Line data Source code
1 : MODULE m_d2fdz2cmplx
2 : CONTAINS
3 :
4 0 : SUBROUTINE d2fdz2cmplx(jmtd,jri,rmsh,dx,f,fac,d2f)
5 :
6 : USE m_difcub
7 :
8 : IMPLICIT NONE
9 :
10 : INTEGER, INTENT(IN) :: jmtd
11 : COMPLEX, INTENT(INOUT) :: d2f(jmtd)
12 : COMPLEX, INTENT(IN) :: fac(jmtd)
13 :
14 : REAL, INTENT(IN) :: f(jmtd)
15 : REAL, INTENT(IN) :: rmsh(jmtd)
16 : REAL, INTENT(IN) :: dx
17 :
18 : INTEGER, INTENT(IN) :: jri
19 :
20 0 : REAL, ALLOCATABLE :: fr(:),fi(:),dfr(:),dfi(:)
21 : INTEGER :: i
22 :
23 0 : allocate( dfr(jri),dfi(jri),fr(jri),fi(jri) )
24 0 : DO i=1,jri
25 0 : fr(i) = f(i)*real(fac(i))
26 0 : fi(i) = f(i)*aimag(fac(i))
27 : ENDDO
28 :
29 0 : dfr(1) = difcub( rmsh(1),fr(1),rmsh(1) )
30 0 : dfi(1) = difcub( rmsh(1),fi(1),rmsh(1) )
31 0 : DO i = 2, jri-2
32 0 : dfr(i) = difcub( rmsh(i-1),fr(i-1),rmsh(i) )
33 0 : dfi(i) = difcub( rmsh(i-1),fi(i-1),rmsh(i) )
34 : ENDDO
35 0 : dfr(jri-1) = difcub( rmsh(jri-3),fr(jri-3),rmsh(jri-1) )
36 0 : dfi(jri-1) = difcub( rmsh(jri-3),fi(jri-3),rmsh(jri-1) )
37 0 : dfr(jri) = difcub( rmsh(jri-3),fr(jri-3),rmsh(jri) )
38 0 : dfi(jri) = difcub( rmsh(jri-3),fi(jri-3),rmsh(jri) )
39 :
40 :
41 : d2f(1) = cmplx( difcub( rmsh(1),dfr(1),rmsh(1) ),
42 0 : > difcub( rmsh(1),dfi(1),rmsh(1) ) )
43 0 : DO i = 2, jri-2
44 : d2f(i) = cmplx( difcub( rmsh(i-1),dfr(i-1),rmsh(i) ),
45 0 : > difcub( rmsh(i-1),dfi(i-1),rmsh(i) ) )
46 : ENDDO
47 : d2f(jri-1) = cmplx( difcub( rmsh(jri-3),dfr(jri-3),rmsh(jri-1) ),
48 0 : > difcub( rmsh(jri-3),dfi(jri-3),rmsh(jri-1) ) )
49 : d2f(jri) = cmplx( difcub( rmsh(jri-3),dfr(jri-3),rmsh(jri) ),
50 0 : > difcub( rmsh(jri-3),dfi(jri-3),rmsh(jri) ) )
51 :
52 0 : deallocate( dfr,dfi,fr,fi )
53 :
54 : c d2f = cmplx(0.,0.)
55 : c d2f(1) = (f(3)-2*f(2)+f(1))/dx/dx
56 : c do i=2,jri-1
57 : c d2f(i) = (f(i+1)-2*f(i)+f(i-1))/dx/dx
58 : c enddo
59 : c d2f(jri) = (f(jri-2)-2*f(jri-1)+f(jri))/dx/dx
60 :
61 0 : END SUBROUTINE d2fdz2cmplx
62 : END MODULE m_d2fdz2cmplx
|