--- trunk/Sources/filtrez/inifgn.f 2015/05/26 17:46:03 139 +++ trunk/Sources/filtrez/inifgn.f 2015/06/05 18:58:06 140 @@ -1,7 +1,17 @@ module inifgn_m + use dimens_m, only: iim + IMPLICIT NONE + private iim + + real sddu(iim), sddv(iim) ! SQRT(dx) + real unsddu(iim), unsddv(iim) + + real eignfnu(iim, iim), eignfnv(iim, iim) + ! eignfn eigenfunctions of the discrete laplacian + contains SUBROUTINE inifgn(dv) @@ -10,9 +20,9 @@ ! H.Upadyaya, O.Sharma - USE coefils, ONLY: eignfnu, eignfnv, sddu, sddv, unsddu, unsddv USE dimens_m, ONLY: iim USE dynetat0_m, ONLY: xprimu, xprimv + use nr_util, only: pi use numer_rec_95, only: jacobi real, intent(out):: dv(iim) @@ -21,22 +31,16 @@ REAL vec(iim, iim), vec1(iim, iim) REAL du(iim) real d(iim) - REAL pi - INTEGER i, j, k, imm1, nrot + INTEGER i, j, k, nrot EXTERNAL acc !---------------------------------------------------------------- - imm1 = iim - 1 - pi = 2.*asin(1.) - - DO i = 1, iim - sddv(i) = sqrt(xprimv(i)) - sddu(i) = sqrt(xprimu(i)) - unsddu(i) = 1./sddu(i) - unsddv(i) = 1./sddv(i) - END DO + sddv = sqrt(xprimv(:iim)) + sddu = sqrt(xprimu(:iim)) + unsddu = 1. / sddu + unsddv = 1. / sddv DO j = 1, iim DO i = 1, iim @@ -47,20 +51,22 @@ END DO END DO - eignfnv(1, 1) = -1. + eignfnv(1, 1) = - 1. eignfnv(iim, 1) = 1. - DO i = 1, imm1 - eignfnv(i+1, i+1) = -1. + DO i = 1, iim - 1 + eignfnv(i+1, i+1) = - 1. eignfnv(i, i+1) = 1. END DO + DO j = 1, iim DO i = 1, iim - eignfnv(i, j) = eignfnv(i, j)/(sddu(i)*sddv(j)) + eignfnv(i, j) = eignfnv(i, j) / (sddu(i) * sddv(j)) END DO END DO + DO j = 1, iim DO i = 1, iim - eignfnu(i, j) = -eignfnv(j, i) + eignfnu(i, j) = - eignfnv(j, i) END DO END DO @@ -69,8 +75,8 @@ vec(i, j) = 0.0 vec1(i, j) = 0.0 DO k = 1, iim - vec(i, j) = vec(i, j) + eignfnu(i, k)*eignfnv(k, j) - vec1(i, j) = vec1(i, j) + eignfnv(i, k)*eignfnu(k, j) + vec(i, j) = vec(i, j) + eignfnu(i, k) * eignfnv(k, j) + vec1(i, j) = vec1(i, j) + eignfnv(i, k) * eignfnu(k, j) END DO END DO END DO