source: LMDZ5/tags/proto-testing-20131015/tools/Max_diff_nc_with_lib/NR_util/poly_term.f90 @ 4175

Last change on this file since 4175 was 1795, checked in by Ehouarn Millour, 11 years ago

Version testing basee sur la r1794


Testing release based on r1794

File size: 1.1 KB
Line 
1MODULE poly_term_m
2
3  IMPLICIT NONE
4
5  INTEGER, PARAMETER, private:: NPAR_POLYTERM=8
6
7  INTERFACE poly_term
8     MODULE PROCEDURE poly_term_rr, poly_term_cc
9  END INTERFACE
10
11  private poly_term_rr,poly_term_cc
12
13CONTAINS
14
15  RECURSIVE FUNCTION poly_term_rr(a,b) RESULT(u)
16    REAL, DIMENSION(:), INTENT(IN) :: a
17    REAL, INTENT(IN) :: b
18    REAL, DIMENSION(size(a)) :: u
19    INTEGER n,j
20    n=size(a)
21    if (n <= 0) RETURN
22    u(1)=a(1)
23    if (n < NPAR_POLYTERM) then
24       do j=2,n
25          u(j)=a(j)+b*u(j-1)
26       end do
27    else
28       u(2:n:2)=poly_term_rr(a(2:n:2)+a(1:n-1:2)*b,b*b)
29       u(3:n:2)=a(3:n:2)+b*u(2:n-1:2)
30    end if
31  END FUNCTION poly_term_rr
32  !BL
33  RECURSIVE FUNCTION poly_term_cc(a,b) RESULT(u)
34    COMPLEX, DIMENSION(:), INTENT(IN) :: a
35    COMPLEX, INTENT(IN) :: b
36    COMPLEX, DIMENSION(size(a)) :: u
37    INTEGER n,j
38    n=size(a)
39    if (n <= 0) RETURN
40    u(1)=a(1)
41    if (n < NPAR_POLYTERM) then
42       do j=2,n
43          u(j)=a(j)+b*u(j-1)
44       end do
45    else
46       u(2:n:2)=poly_term_cc(a(2:n:2)+a(1:n-1:2)*b,b*b)
47       u(3:n:2)=a(3:n:2)+b*u(2:n-1:2)
48    end if
49  END FUNCTION poly_term_cc
50
51END MODULE poly_term_m
Note: See TracBrowser for help on using the repository browser.