/[lmdze]/trunk/filtrez/inifgn.f
ViewVC logotype

Diff of /trunk/filtrez/inifgn.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/filtrez/inifgn.f revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC trunk/filtrez/inifgn.f90 revision 81 by guez, Wed Mar 5 14:38:41 2014 UTC
# Line 1  Line 1 
 !  
 ! $Header: /home/cvsroot/LMDZ4/libf/filtrez/inifgn.F,v 1.1.1.1 2004/05/19 12:53:09 lmdzadmin Exp $  
 !  
       SUBROUTINE inifgn(dv)  
 c    
 c    ...  H.Upadyaya , O.Sharma  ...  
 c  
       use dimens_m  
       use paramet_m  
       use comgeom  
       use serre  
             use coefils  
       IMPLICIT NONE  
 c  
   
 c  
       REAL vec(iim,iim),vec1(iim,iim)  
       REAL dlonu(iim),dlonv(iim)  
       REAL du(iim),dv(iim),d(iim)  
       REAL pi  
       INTEGER i,j,k,imm1,nrot  
 C  
 c  
       EXTERNAL SSUM, acc, jacobi  
 CC      EXTERNAL eigen  
       REAL SSUM  
 c  
   
       imm1  = iim -1  
       pi = 2.* ASIN(1.)  
 C  
       DO 5 i=1,iim  
        dlonu(i)=  xprimu( i )  
        dlonv(i)=  xprimv( i )  
    5  CONTINUE  
   
       DO 12 i=1,iim  
       sddv(i)   = SQRT(dlonv(i))  
       sddu(i)   = SQRT(dlonu(i))  
       unsddu(i) = 1./sddu(i)  
       unsddv(i) = 1./sddv(i)  
   12  CONTINUE  
 C  
       DO 17 j=1,iim  
       DO 17 i=1,iim  
       vec(i,j)     = 0.  
       vec1(i,j)    = 0.  
       eignfnv(i,j) = 0.  
       eignfnu(i,j) = 0.  
   17  CONTINUE  
 c  
 c  
       eignfnv(1,1)    = -1.  
       eignfnv(iim,1)  =  1.  
       DO 20 i=1,imm1  
       eignfnv(i+1,i+1)= -1.  
       eignfnv(i,i+1)  =  1.  
   20  CONTINUE  
       DO 25 j=1,iim  
       DO 25 i=1,iim  
       eignfnv(i,j) = eignfnv(i,j)/(sddu(i)*sddv(j))  
   25  CONTINUE  
       DO 30 j=1,iim  
       DO 30 i=1,iim  
       eignfnu(i,j) = -eignfnv(j,i)  
   30  CONTINUE  
 c  
       DO j = 1, iim  
       DO i = 1, iim  
         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)  
        ENDDO  
       ENDDO  
       ENDDO  
   
 c  
       CALL jacobi(vec,iim,iim,dv,eignfnv,nrot)  
       CALL acc(eignfnv,d,iim)  
       CALL eigen_sort(dv,eignfnv,iim,iim)  
 c  
       CALL jacobi(vec1,iim,iim,du,eignfnu,nrot)  
       CALL acc(eignfnu,d,iim)  
       CALL eigen_sort(du,eignfnu,iim,iim)  
   
 cc   ancienne version avec appels IMSL  
 c  
 c     CALL MXM(eignfnu,iim,eignfnv,iim,vec,iim)  
 c     CALL MXM(eignfnv,iim,eignfnu,iim,vec1,iim)  
 c     CALL EVCSF(iim,vec,iim,dv,eignfnv,iim)  
 c     CALL acc(eignfnv,d,iim)  
 c     CALL eigen(eignfnv,dv)  
 c  
 c     CALL EVCSF(iim,vec1,iim,du,eignfnu,iim)  
 c     CALL acc(eignfnu,d,iim)  
 c     CALL eigen(eignfnu,du)  
1    
2        RETURN  ! $Header: /home/cvsroot/LMDZ4/libf/filtrez/inifgn.F,v 1.1.1.1 2004/05/19
3        END  ! 12:53:09 lmdzadmin Exp $
4    
5    SUBROUTINE inifgn(dv)
6    
7      ! ...  H.Upadyaya , O.Sharma  ...
8    
9      USE dimens_m
10      USE paramet_m
11      USE comgeom
12      USE serre
13      USE coefils
14      IMPLICIT NONE
15    
16    
17    
18      REAL vec(iim, iim), vec1(iim, iim)
19      REAL dlonu(iim), dlonv(iim)
20      REAL du(iim), dv(iim), d(iim)
21      REAL pi
22      INTEGER i, j, k, imm1, nrot
23    
24    
25      EXTERNAL ssum, acc, jacobi
26      ! C      EXTERNAL eigen
27      REAL ssum
28    
29    
30      imm1 = iim - 1
31      pi = 2.*asin(1.)
32    
33      DO i = 1, iim
34        dlonu(i) = xprimu(i)
35        dlonv(i) = xprimv(i)
36      END DO
37    
38      DO i = 1, iim
39        sddv(i) = sqrt(dlonv(i))
40        sddu(i) = sqrt(dlonu(i))
41        unsddu(i) = 1./sddu(i)
42        unsddv(i) = 1./sddv(i)
43      END DO
44    
45      DO j = 1, iim
46        DO i = 1, iim
47          vec(i, j) = 0.
48          vec1(i, j) = 0.
49          eignfnv(i, j) = 0.
50          eignfnu(i, j) = 0.
51        END DO
52      END DO
53    
54    
55      eignfnv(1, 1) = -1.
56      eignfnv(iim, 1) = 1.
57      DO i = 1, imm1
58        eignfnv(i+1, i+1) = -1.
59        eignfnv(i, i+1) = 1.
60      END DO
61      DO j = 1, iim
62        DO i = 1, iim
63          eignfnv(i, j) = eignfnv(i, j)/(sddu(i)*sddv(j))
64        END DO
65      END DO
66      DO j = 1, iim
67        DO i = 1, iim
68          eignfnu(i, j) = -eignfnv(j, i)
69        END DO
70      END DO
71    
72      DO j = 1, iim
73        DO i = 1, iim
74          vec(i, j) = 0.0
75          vec1(i, j) = 0.0
76          DO k = 1, iim
77            vec(i, j) = vec(i, j) + eignfnu(i, k)*eignfnv(k, j)
78            vec1(i, j) = vec1(i, j) + eignfnv(i, k)*eignfnu(k, j)
79          END DO
80        END DO
81      END DO
82    
83    
84      CALL jacobi(vec, iim, iim, dv, eignfnv, nrot)
85      CALL acc(eignfnv, d, iim)
86      CALL eigen_sort(dv, eignfnv, iim, iim)
87    
88      CALL jacobi(vec1, iim, iim, du, eignfnu, nrot)
89      CALL acc(eignfnu, d, iim)
90      CALL eigen_sort(du, eignfnu, iim, iim)
91    
92      ! c   ancienne version avec appels IMSL
93    
94      ! CALL MXM(eignfnu,iim,eignfnv,iim,vec,iim)
95      ! CALL MXM(eignfnv,iim,eignfnu,iim,vec1,iim)
96      ! CALL EVCSF(iim,vec,iim,dv,eignfnv,iim)
97      ! CALL acc(eignfnv,d,iim)
98      ! CALL eigen(eignfnv,dv)
99    
100      ! CALL EVCSF(iim,vec1,iim,du,eignfnu,iim)
101      ! CALL acc(eignfnu,d,iim)
102      ! CALL eigen(eignfnu,du)
103    
104      RETURN
105    END SUBROUTINE inifgn
106    

Legend:
Removed from v.76  
changed lines
  Added in v.81

  ViewVC Help
Powered by ViewVC 1.1.21