/[lmdze]/trunk/libf/dyn3d/sortvarc0.f90
ViewVC logotype

Diff of /trunk/libf/dyn3d/sortvarc0.f90

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

trunk/libf/dyn3d/sortvarc0.f revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/libf/dyn3d/sortvarc0.f90 revision 64 by guez, Wed Aug 29 14:47:17 2012 UTC
# Line 1  Line 1 
1  !  SUBROUTINE sortvarc0(ucov, teta, ps, masse, pk, phis, vorpot, phi, bern, dp)
 ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/sortvarc0.F,v 1.1.1.1 2004/05/19 12:53:07 lmdzadmin Exp $  
 !  
       SUBROUTINE sortvarc0  
      $(itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time ,  
      $ vcov)  
   
 c=======================================================================  
 c  
 c   Auteur:    P. Le Van  
 c   -------  
 c  
 c   Objet:  
 c   ------  
 c  
 c   sortie des variables de controle  
 c  
 c=======================================================================  
 c-----------------------------------------------------------------------  
 c   Declarations:  
 c   -------------  
   
       use dimens_m  
       use paramet_m  
       use comconst  
       use comvert  
       use logic  
       use comgeom  
       use temps  
       use ener  
       IMPLICIT NONE  
   
 c   Arguments:  
 c   ----------  
   
       INTEGER, intent(in):: itau  
       REAL, intent(in):: ucov(ip1jmp1,llm)  
       real teta(ip1jmp1,llm),masse(ip1jmp1,llm)  
       REAL, intent(in):: vcov(ip1jm,llm)  
       REAL, intent(in):: ps(ip1jmp1)  
       real, intent(in):: phis(ip1jmp1)  
       REAL vorpot(ip1jm,llm)  
       REAL phi(ip1jmp1,llm),bern(ip1jmp1,llm)  
       REAL dp(ip1jmp1)  
       REAL time  
       REAL, intent(in):: pk(ip1jmp1,llm)  
   
 c   Local:  
 c   ------  
   
       REAL vor(ip1jm),bernf(ip1jmp1,llm),ztotl(llm)  
       REAL etotl(llm),stotl(llm),rmsvl(llm),angl(llm),ge(ip1jmp1)  
       REAL cosphi(ip1jm),omegcosp(ip1jm)  
       REAL dtvrs1j,rjour,heure,radsg,radomeg  
       REAL rday, massebxy(ip1jm,llm)  
       INTEGER  l, ij, imjmp1  
   
       REAL       SSUM  
       integer  ismin,ismax  
   
 c-----------------------------------------------------------------------  
   
       print *, "Call sequence information: sortvarc0"  
        dtvrs1j   = dtvr/daysec  
        rjour     = FLOAT( INT( itau * dtvrs1j ))  
        heure     = ( itau*dtvrs1j-rjour ) * 24.  
        imjmp1    = iim * jjp1  
        IF(ABS(heure - 24.).LE.0.0001 ) heure = 0.  
 c  
        CALL massbarxy ( masse, massebxy )  
   
 c   .....  Calcul  de  rmsdpdt  .....  
   
        ge=dp*dp  
   
        rmsdpdt = SSUM(ip1jmp1,ge,1) - SSUM(jjp1,ge,iip1)  
 c  
        rmsdpdt = daysec* 1.e-2 * SQRT(rmsdpdt/imjmp1)  
   
        CALL SCOPY( ijp1llm,bern,1,bernf,1 )  
        CALL filtreg(bernf,jjp1,llm,-2,2,.TRUE.,1)  
   
 c   .....  Calcul du moment  angulaire   .....  
   
        radsg    = rad /g  
        radomeg  = rad * omeg  
 c  
        DO ij=iip2,ip1jm  
           cosphi( ij ) = COS(rlatu((ij-1)/iip1+1))  
           omegcosp(ij) = radomeg   * cosphi(ij)  
        ENDDO  
   
 c  ...  Calcul  de l'energie,de l'enstrophie,de l'entropie et de rmsv  .  
   
        DO l=1,llm  
           DO ij = 1,ip1jm  
              vor(ij)=vorpot(ij,l)*vorpot(ij,l)*massebxy(ij,l)  
           ENDDO  
           ztotl(l)=(SSUM(ip1jm,vor,1)-SSUM(jjm,vor,iip1))  
   
           DO ij = 1,ip1jmp1  
              ge(ij)= masse(ij,l)*(phis(ij)+teta(ij,l)*pk(ij,l)  +  
      s        bernf(ij,l)-phi(ij,l))  
           ENDDO  
           etotl(l) = SSUM(ip1jmp1,ge,1) - SSUM(jjp1,ge,iip1)  
   
           DO   ij   = 1, ip1jmp1  
              ge(ij) = masse(ij,l)*teta(ij,l)  
           ENDDO  
           stotl(l)= SSUM(ip1jmp1,ge,1) - SSUM(jjp1,ge,iip1)  
   
           DO ij=1,ip1jmp1  
              ge(ij)=masse(ij,l)*AMAX1(bernf(ij,l)-phi(ij,l),0.)  
           ENDDO  
           rmsvl(l)=2.*(SSUM(ip1jmp1,ge,1)-SSUM(jjp1,ge,iip1))  
   
           DO ij =iip2,ip1jm  
              ge(ij)=(ucov(ij,l)/cu(ij)+omegcosp(ij))*masse(ij,l) *  
      *               cosphi(ij)  
           ENDDO  
           angl(l) = radsg *  
      s    (SSUM(ip1jm-iip1,ge(iip2),1)-SSUM(jjm-1,ge(iip2),iip1))  
       ENDDO  
   
           DO ij=1,ip1jmp1  
             ge(ij)= ps(ij)*aire(ij)  
           ENDDO  
       ptot0  = SSUM(ip1jmp1,ge,1)-SSUM(jjp1,ge,iip1)  
       etot0  = SSUM(     llm, etotl, 1 )  
       ztot0  = SSUM(     llm, ztotl, 1 )  
       stot0  = SSUM(     llm, stotl, 1 )  
       rmsv   = SSUM(     llm, rmsvl, 1 )  
       ang0   = SSUM(     llm,  angl, 1 )  
   
       rday = FLOAT(INT ( day_ini + time ))  
 c  
       PRINT 3500, itau, rday, heure, time  
       PRINT *, "ptot0 = ", ptot0  
       PRINT *, "etot0 = ", etot0  
       PRINT *, "ztot0 = ", ztot0  
       PRINT *, "stot0 = ", stot0  
       PRINT *, "ang0 = ", ang0  
   
 3500   FORMAT('0',10(1h*),4x,'pas',i7,5x,'jour',f5.0,'heure',f5.1,4x  
      *   ,'date',f10.5,4x,10(1h*))  
       RETURN  
       END  
2    
3      ! From dyn3d/sortvarc0.F, v 1.1.1.1 2004/05/19 12:53:07
4      ! Auteur : P. Le Van
5      ! Objet : sortie des variables de contrôle
6    
7      USE dimens_m, ONLY : iim, jjm, llm
8      USE paramet_m, ONLY : iip1, iip2, ijp1llm, ip1jm, ip1jmp1, jjp1
9      USE comconst, ONLY : daysec, g, omeg, rad
10      USE comgeom, ONLY : aire, cu, rlatu
11      USE ener, ONLY : ang0, etot0, ptot0, rmsdpdt, rmsv, stot0, ztot0
12      use filtreg_m, only: filtreg
13    
14      IMPLICIT NONE
15    
16      !   Arguments:
17    
18      REAL, INTENT (IN) :: ucov(ip1jmp1, llm)
19      REAL :: teta(ip1jmp1, llm), masse(ip1jmp1, llm)
20      REAL, INTENT (IN) :: ps(ip1jmp1)
21      REAL, INTENT (IN) :: phis(ip1jmp1)
22      REAL :: vorpot(ip1jm, llm)
23      REAL :: phi(ip1jmp1, llm), bern(ip1jmp1, llm)
24      REAL :: dp(ip1jmp1)
25      REAL, INTENT (IN) :: pk(ip1jmp1, llm)
26    
27      !   Local:
28    
29      REAL :: vor(ip1jm), bernf(ip1jmp1, llm), ztotl(llm)
30      REAL :: etotl(llm), stotl(llm), rmsvl(llm), angl(llm), ge(ip1jmp1)
31      REAL :: cosphi(ip1jm), omegcosp(ip1jm)
32      REAL radomeg
33      REAL massebxy(ip1jm, llm)
34      INTEGER l, ij
35    
36      REAL :: ssum
37    
38      !-----------------------------------------------------------------------
39    
40      PRINT *, 'Call sequence information: sortvarc0'
41    
42      CALL massbarxy(masse, massebxy)
43    
44      ! Calcul  de  rmsdpdt
45      ge = dp*dp
46      rmsdpdt = ssum(ip1jmp1, ge, 1) - ssum(jjp1, ge, iip1)
47      rmsdpdt = daysec*1.E-2*sqrt(rmsdpdt / (iim * jjp1))
48      CALL scopy(ijp1llm, bern, 1, bernf, 1)
49      CALL filtreg(bernf, jjp1, llm, -2, 2, .TRUE.)
50    
51      !  Calcul du moment  angulaire
52    
53      radomeg = rad * omeg
54    
55      DO ij = iip2, ip1jm
56         cosphi(ij) = cos(rlatu((ij-1)/iip1+1))
57         omegcosp(ij) = radomeg*cosphi(ij)
58      END DO
59    
60      ! Calcul  de l'energie, de l'enstrophie, de l'entropie et de rmsv
61    
62      DO l = 1, llm
63         DO ij = 1, ip1jm
64            vor(ij) = vorpot(ij, l)*vorpot(ij, l)*massebxy(ij, l)
65         END DO
66         ztotl(l) = (ssum(ip1jm, vor, 1)-ssum(jjm, vor, iip1))
67    
68         DO ij = 1, ip1jmp1
69            ge(ij) = masse(ij, l) &
70                 *(phis(ij)+teta(ij, l)*pk(ij, l)+bernf(ij, l)-phi(ij, l))
71         END DO
72         etotl(l) = ssum(ip1jmp1, ge, 1) - ssum(jjp1, ge, iip1)
73    
74         DO ij = 1, ip1jmp1
75            ge(ij) = masse(ij, l)*teta(ij, l)
76         END DO
77         stotl(l) = ssum(ip1jmp1, ge, 1) - ssum(jjp1, ge, iip1)
78    
79         DO ij = 1, ip1jmp1
80            ge(ij) = masse(ij, l)*amax1(bernf(ij, l)-phi(ij, l), 0.)
81         END DO
82         rmsvl(l) = 2.*(ssum(ip1jmp1, ge, 1)-ssum(jjp1, ge, iip1))
83    
84         DO ij = iip2, ip1jm
85            ge(ij) = (ucov(ij, l)/cu(ij)+omegcosp(ij))*masse(ij, l)*cosphi(ij)
86         END DO
87         angl(l) = rad / g &
88              * (ssum(ip1jm-iip1, ge(iip2), 1)-ssum(jjm-1, ge(iip2), iip1))
89      END DO
90    
91      DO ij = 1, ip1jmp1
92         ge(ij) = ps(ij)*aire(ij)
93      END DO
94      ptot0 = ssum(ip1jmp1, ge, 1) - ssum(jjp1, ge, iip1)
95      etot0 = ssum(llm, etotl, 1)
96      ztot0 = ssum(llm, ztotl, 1)
97      stot0 = ssum(llm, stotl, 1)
98      rmsv = ssum(llm, rmsvl, 1)
99      ang0 = ssum(llm, angl, 1)
100    
101      PRINT *, 'ptot0 = ', ptot0
102      PRINT *, 'etot0 = ', etot0
103      PRINT *, 'ztot0 = ', ztot0
104      PRINT *, 'stot0 = ', stot0
105      PRINT *, 'ang0 = ', ang0
106    
107    END SUBROUTINE sortvarc0

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

  ViewVC Help
Powered by ViewVC 1.1.21