Changeset 5246 for LMDZ6/trunk/libf/filtrez/inifgn.F90
- Timestamp:
- Oct 21, 2024, 2:58:45 PM (22 hours ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/filtrez/inifgn.F90
r5245 r5246 2 2 ! $Header: /home/cvsroot/LMDZ4/libf/filtrez/inifgn.F,v 1.1.1.1 2004-05-19 12:53:09 lmdzadmin Exp $ 3 3 ! 4 5 c 6 c ... H.Upadyaya , O.Sharma ... 7 c 8 9 c 10 11 12 4 SUBROUTINE inifgn(dv) 5 ! 6 ! ... H.Upadyaya , O.Sharma ... 7 ! 8 IMPLICIT NONE 9 ! 10 include "dimensions.h" 11 include "paramet.h" 12 include "comgeom.h" 13 13 14 c 15 REALvec(iim,iim),vec1(iim,iim)16 REALdlonu(iim),dlonv(iim)17 REALdu(iim),dv(iim),d(iim)18 REALpi19 INTEGERi,j,k,imm1,nrot20 C 21 22 c 23 24 REALSSUM25 c 14 ! 15 REAL :: vec(iim,iim),vec1(iim,iim) 16 REAL :: dlonu(iim),dlonv(iim) 17 REAL :: du(iim),dv(iim),d(iim) 18 REAL :: pi 19 INTEGER :: i,j,k,imm1,nrot 20 ! 21 include "coefils.h" 22 ! 23 EXTERNAL SSUM, acc,eigen,jacobi 24 REAL :: SSUM 25 ! 26 26 27 28 29 C 30 DO 5i=1,iim31 32 33 5 CONTINUE27 imm1 = iim -1 28 pi = 2.* ASIN(1.) 29 ! 30 DO i=1,iim 31 dlonu(i)= xprimu( i ) 32 dlonv(i)= xprimv( i ) 33 END DO 34 34 35 DO 12 i=1,iim 36 sddv(i) = SQRT(dlonv(i)) 37 sddu(i) = SQRT(dlonu(i)) 38 unsddu(i) = 1./sddu(i) 39 unsddv(i) = 1./sddv(i) 40 12 CONTINUE 41 C 42 DO 17 j=1,iim 43 DO 17 i=1,iim 44 vec(i,j) = 0. 45 vec1(i,j) = 0. 46 eignfnv(i,j) = 0. 47 eignfnu(i,j) = 0. 48 17 CONTINUE 49 c 50 c 51 eignfnv(1,1) = -1. 52 eignfnv(iim,1) = 1. 53 DO 20 i=1,imm1 54 eignfnv(i+1,i+1)= -1. 55 eignfnv(i,i+1) = 1. 56 20 CONTINUE 57 DO 25 j=1,iim 58 DO 25 i=1,iim 59 eignfnv(i,j) = eignfnv(i,j)/(sddu(i)*sddv(j)) 60 25 CONTINUE 61 DO 30 j=1,iim 62 DO 30 i=1,iim 63 eignfnu(i,j) = -eignfnv(j,i) 64 30 CONTINUE 65 c 35 DO i=1,iim 36 sddv(i) = SQRT(dlonv(i)) 37 sddu(i) = SQRT(dlonu(i)) 38 unsddu(i) = 1./sddu(i) 39 unsddv(i) = 1./sddv(i) 40 END DO 41 ! 42 DO j=1,iim 43 DO i=1,iim 44 vec(i,j) = 0. 45 vec1(i,j) = 0. 46 eignfnv(i,j) = 0. 47 eignfnu(i,j) = 0. 48 END DO 49 END DO 50 ! 51 ! 52 eignfnv(1,1) = -1. 53 eignfnv(iim,1) = 1. 54 DO i=1,imm1 55 eignfnv(i+1,i+1)= -1. 56 eignfnv(i,i+1) = 1. 57 END DO 58 DO j=1,iim 59 DO i=1,iim 60 eignfnv(i,j) = eignfnv(i,j)/(sddu(i)*sddv(j)) 61 END DO 62 END DO 63 DO j=1,iim 64 DO i=1,iim 65 eignfnu(i,j) = -eignfnv(j,i) 66 END DO 67 END DO 68 ! 66 69 #ifdef CRAY 67 68 70 CALL MXM(eignfnu,iim,eignfnv,iim,vec ,iim) 71 CALL MXM(eignfnv,iim,eignfnu,iim,vec1,iim) 69 72 #else 70 71 72 73 74 75 76 77 78 79 73 DO j = 1, iim 74 DO i = 1, iim 75 vec (i,j) = 0.0 76 vec1(i,j) = 0.0 77 DO k = 1, iim 78 vec (i,j) = vec(i,j) + eignfnu(i,k) * eignfnv(k,j) 79 vec1(i,j) = vec1(i,j) + eignfnv(i,k) * eignfnu(k,j) 80 ENDDO 81 ENDDO 82 ENDDO 80 83 #endif 81 84 82 c 83 84 85 86 c 87 88 89 85 ! 86 CALL jacobi(vec,iim,iim,dv,eignfnv,nrot) 87 CALL acc(eignfnv,d,iim) 88 CALL eigen_sort(dv,eignfnv,iim,iim) 89 ! 90 CALL jacobi(vec1,iim,iim,du,eignfnu,nrot) 91 CALL acc(eignfnu,d,iim) 92 CALL eigen_sort(du,eignfnu,iim,iim) 90 93 91 cc ancienne version avec appels IMSL92 c 93 cCALL MXM(eignfnu,iim,eignfnv,iim,vec,iim)94 cCALL MXM(eignfnv,iim,eignfnu,iim,vec1,iim)95 cCALL EVCSF(iim,vec,iim,dv,eignfnv,iim)96 cCALL acc(eignfnv,d,iim)97 cCALL eigen(eignfnv,dv)98 c 99 cCALL EVCSF(iim,vec1,iim,du,eignfnu,iim)100 cCALL acc(eignfnu,d,iim)101 cCALL eigen(eignfnu,du)94 !c ancienne version avec appels IMSL 95 ! 96 ! CALL MXM(eignfnu,iim,eignfnv,iim,vec,iim) 97 ! CALL MXM(eignfnv,iim,eignfnu,iim,vec1,iim) 98 ! CALL EVCSF(iim,vec,iim,dv,eignfnv,iim) 99 ! CALL acc(eignfnv,d,iim) 100 ! CALL eigen(eignfnv,dv) 101 ! 102 ! CALL EVCSF(iim,vec1,iim,du,eignfnu,iim) 103 ! CALL acc(eignfnu,d,iim) 104 ! CALL eigen(eignfnu,du) 102 105 103 104 END 106 RETURN 107 END SUBROUTINE inifgn 105 108
Note: See TracChangeset
for help on using the changeset viewer.