/[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/libf/filtrez/inifgn.f revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/filtrez/inifgn.f revision 113 by guez, Thu Sep 18 19:56:46 2014 UTC
# Line 1  Line 1 
1  !  module inifgn_m
 ! $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  
       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  
       include "coefils.h"  
 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)  
2    
3        RETURN    IMPLICIT NONE
       END  
4    
5    contains
6    
7      SUBROUTINE inifgn(dv)
8    
9        ! From LMDZ4/libf/filtrez/inifgn.F, v 1.1.1.1 2004/05/19 12:53:09
10    
11        ! H.Upadyaya, O.Sharma
12    
13        USE dimens_m, ONLY: iim
14        USE comgeom, ONLY: xprimu, xprimv
15        USE coefils, ONLY: eignfnu, eignfnv, sddu, sddv, unsddu, unsddv
16    
17        real dv(iim)
18    
19        ! Local:
20        REAL vec(iim, iim), vec1(iim, iim)
21        REAL dlonu(iim), dlonv(iim)
22        REAL du(iim)
23        real d(iim)
24        REAL pi
25        INTEGER i, j, k, imm1, nrot
26    
27        EXTERNAL acc, jacobi
28    
29        !----------------------------------------------------------------
30    
31        imm1 = iim - 1
32        pi = 2.*asin(1.)
33    
34        DO i = 1, iim
35           dlonu(i) = xprimu(i)
36           dlonv(i) = xprimv(i)
37        END DO
38    
39        DO i = 1, iim
40           sddv(i) = sqrt(dlonv(i))
41           sddu(i) = sqrt(dlonu(i))
42           unsddu(i) = 1./sddu(i)
43           unsddv(i) = 1./sddv(i)
44        END DO
45    
46        DO j = 1, iim
47           DO i = 1, iim
48              vec(i, j) = 0.
49              vec1(i, j) = 0.
50              eignfnv(i, j) = 0.
51              eignfnu(i, j) = 0.
52           END DO
53        END DO
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        CALL jacobi(vec, iim, iim, dv, eignfnv, nrot)
84        CALL acc(eignfnv, d, iim)
85        CALL eigen_sort(dv, eignfnv, iim, iim)
86    
87        CALL jacobi(vec1, iim, iim, du, eignfnu, nrot)
88        CALL acc(eignfnu, d, iim)
89        CALL eigen_sort(du, eignfnu, iim, iim)
90    
91      END SUBROUTINE inifgn
92    
93    end module inifgn_m

Legend:
Removed from v.3  
changed lines
  Added in v.113

  ViewVC Help
Powered by ViewVC 1.1.21