/[lmdze]/trunk/dyn3d/calfis.f
ViewVC logotype

Diff of /trunk/dyn3d/calfis.f

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

trunk/libf/dyn3d/calfis.f90 revision 70 by guez, Mon Jun 24 15:39:52 2013 UTC trunk/dyn3d/calfis.f revision 88 by guez, Tue Mar 11 15:09:02 2014 UTC
# Line 4  module calfis_m Line 4  module calfis_m
4    
5  contains  contains
6    
7    SUBROUTINE calfis(rdayvrai, time, ucov, vcov, teta, q, masse, ps, pk, phis, &    SUBROUTINE calfis(rdayvrai, time, ucov, vcov, teta, q, ps, pk, phis, phi, &
8         phi, dudyn, dv, dq, w, dufi, dvfi, dtetafi, dqfi, dpfi, lafin)         dudyn, dv, w, dufi, dvfi, dtetafi, dqfi, dpfi, lafin)
9    
10      ! From dyn3d/calfis.F, version 1.3 2005/05/25 13:10:09      ! From dyn3d/calfis.F, version 1.3 2005/05/25 13:10:09
11      ! Authors: P. Le Van, F. Hourdin      ! Authors: P. Le Van, F. Hourdin
# Line 40  contains Line 40  contains
40      use nr_util, only: pi      use nr_util, only: pi
41      use physiq_m, only: physiq      use physiq_m, only: physiq
42      use pressure_var, only: p3d, pls      use pressure_var, only: p3d, pls
43        use pvtheta_m, only: pvtheta
44    
45      ! Arguments :      ! Arguments :
46    
     ! Input :  
     ! ucov covariant zonal velocity  
     ! vcov covariant meridional velocity  
     ! teta potential temperature  
     ! ps surface pressure  
     ! masse masse d'air dans chaque maille  
     ! pts surface temperature (K)  
     ! callrad clef d'appel au rayonnement  
   
47      ! Output :      ! Output :
     ! dufi tendency for the natural zonal velocity (ms-1)  
48      ! dvfi tendency for the natural meridional velocity      ! dvfi tendency for the natural meridional velocity
49      ! dtetafi tendency for the potential temperature      ! dtetafi tendency for the potential temperature
50      ! pdtsfi tendency for the surface temperature      ! pdtsfi tendency for the surface temperature
# Line 64  contains Line 55  contains
55      REAL, intent(in):: rdayvrai      REAL, intent(in):: rdayvrai
56      REAL, intent(in):: time ! heure de la journée en fraction de jour      REAL, intent(in):: time ! heure de la journée en fraction de jour
57      REAL, intent(in):: ucov(iim + 1, jjm + 1, llm)      REAL, intent(in):: ucov(iim + 1, jjm + 1, llm)
58      REAL vcov(iim + 1, jjm, llm)      ! ucov covariant zonal velocity
59        REAL, intent(in):: vcov(iim + 1, jjm, llm)
60        ! vcov covariant meridional velocity
61      REAL, intent(in):: teta(iim + 1, jjm + 1, llm)      REAL, intent(in):: teta(iim + 1, jjm + 1, llm)
62        ! teta potential temperature
63    
64      REAL, intent(in):: q(iim + 1, jjm + 1, llm, nqmx)      REAL, intent(in):: q(iim + 1, jjm + 1, llm, nqmx)
65      ! (mass fractions of advected fields)      ! (mass fractions of advected fields)
66    
67      REAL masse(iim + 1, jjm + 1, llm)      REAL, intent(in):: ps(iim + 1, jjm + 1)
68      REAL ps(iim + 1, jjm + 1)      ! ps surface pressure
69      REAL, intent(in):: pk(iim + 1, jjm + 1, llm)      REAL, intent(in):: pk(iim + 1, jjm + 1, llm)
70      REAL, intent(in):: phis(iim + 1, jjm + 1)      REAL, intent(in):: phis(iim + 1, jjm + 1)
71      REAL, intent(in):: phi(iim + 1, jjm + 1, llm)      REAL, intent(in):: phi(iim + 1, jjm + 1, llm)
72      REAL dudyn(iim + 1, jjm + 1, llm)      REAL dudyn(iim + 1, jjm + 1, llm)
73      REAL dv(iim + 1, jjm, llm)      REAL dv(iim + 1, jjm, llm)
     REAL dq(iim + 1, jjm + 1, llm, nqmx)  
74      REAL, intent(in):: w(iim + 1, jjm + 1, llm)      REAL, intent(in):: w(iim + 1, jjm + 1, llm)
75      REAL dufi(iim + 1, jjm + 1, llm)  
76        REAL, intent(out):: dufi(iim + 1, jjm + 1, llm)
77        ! tendency for the covariant zonal velocity (m2 s-2)
78    
79      REAL dvfi(iim + 1, jjm, llm)      REAL dvfi(iim + 1, jjm, llm)
80      REAL, intent(out):: dtetafi(iim + 1, jjm + 1, llm)      REAL, intent(out):: dtetafi(iim + 1, jjm + 1, llm)
81      REAL dqfi(iim + 1, jjm + 1, llm, nqmx)      REAL dqfi(iim + 1, jjm + 1, llm, nqmx)
# Line 99  contains Line 95  contains
95      real qx(klon, llm, nqmx) ! mass fractions of advected fields      real qx(klon, llm, nqmx) ! mass fractions of advected fields
96      REAL omega(klon, llm)      REAL omega(klon, llm)
97    
98      REAL d_u(klon, llm), d_v(klon, llm)      REAL d_u(klon, llm), d_v(klon, llm) ! tendances physiques du vent (m s-2)
99      REAL d_t(klon, llm), d_qx(klon, llm, nqmx)      REAL d_t(klon, llm), d_qx(klon, llm, nqmx)
100      REAL d_ps(klon)      REAL d_ps(klon)
101    
102      REAL z1(iim)      REAL z1(iim)
103      REAL pksurcp(iim + 1, jjm + 1)      REAL pksurcp(iim + 1, jjm + 1)
104    
105      ! I. Musat: diagnostic PVteta, Amip2      ! Diagnostic PVteta pour Amip2 :
106      INTEGER, PARAMETER:: ntetaSTD=3      INTEGER, PARAMETER:: ntetaSTD = 3
107      REAL:: rtetaSTD(ntetaSTD) = (/350., 380., 405./)      REAL:: rtetaSTD(ntetaSTD) = (/350., 380., 405./)
108      REAL PVteta(klon, ntetaSTD)      REAL PVteta(klon, ntetaSTD)
109    
# Line 187  contains Line 183  contains
183      DO l=1, llm      DO l=1, llm
184         DO j=2, jjm         DO j=2, jjm
185            ig0 = 1+(j-2)*iim            ig0 = 1+(j-2)*iim
186            u(ig0+1, l)= 0.5 * &            u(ig0+1, l)= 0.5 &
187                 (ucov(iim, j, l)/cu_2d(iim, j) + ucov(1, j, l)/cu_2d(1, j))                 * (ucov(iim, j, l) / cu_2d(iim, j) + ucov(1, j, l) / cu_2d(1, j))
188            DO i=2, iim            DO i=2, iim
189               u(ig0+i, l)= 0.5 * &               u(ig0+i, l)= 0.5 * (ucov(i-1, j, l)/cu_2d(i-1, j) &
                   (ucov(i-1, j, l)/cu_2d(i-1, j) &  
190                    + ucov(i, j, l)/cu_2d(i, j))                    + ucov(i, j, l)/cu_2d(i, j))
191            end DO            end DO
192         end DO         end DO
# Line 235  contains Line 230  contains
230    
231      forall(l= 1: llm) v(:, l) = pack(zvfi(:, :, l), dyn_phy)      forall(l= 1: llm) v(:, l) = pack(zvfi(:, :, l), dyn_phy)
232    
233      !IM calcul PV a teta=350, 380, 405K      ! Compute potential vorticity at theta = 350, 380 and 405 K:
234      CALL PVtheta(klon, llm, ucov, vcov, teta, t, play, paprs, &      CALL PVtheta(klon, llm, ucov, vcov, teta, t, play, paprs, ntetaSTD, &
235           ntetaSTD, rtetaSTD, PVteta)           rtetaSTD, PVteta)
236    
237      ! Appel de la physique :      ! Appel de la physique :
238      CALL physiq(lafin, rdayvrai, time, dtphys, paprs, play, pphi, pphis, u, &      CALL physiq(lafin, rdayvrai, time, dtphys, paprs, play, pphi, pphis, u, &
239           v, t, qx, omega, d_u, d_v, d_t, d_qx, d_ps, dudyn, PVteta)           v, t, qx, omega, d_u, d_v, d_t, d_qx, d_ps, dudyn)
240    
241      ! transformation des tendances physiques en tendances dynamiques:      ! transformation des tendances physiques en tendances dynamiques:
242    
# Line 297  contains Line 292  contains
292      ! 65. champ u:      ! 65. champ u:
293    
294      DO l=1, llm      DO l=1, llm
   
295         DO i=1, iim + 1         DO i=1, iim + 1
296            dufi(i, 1, l) = 0.            dufi(i, 1, l) = 0.
297            dufi(i, jjm + 1, l) = 0.            dufi(i, jjm + 1, l) = 0.
# Line 306  contains Line 300  contains
300         DO j=2, jjm         DO j=2, jjm
301            ig0=1+(j-2)*iim            ig0=1+(j-2)*iim
302            DO i=1, iim-1            DO i=1, iim-1
303               dufi(i, j, l)= &               dufi(i, j, l)= 0.5*(d_u(ig0+i, l)+d_u(ig0+i+1, l))*cu_2d(i, j)
                   0.5*(d_u(ig0+i, l)+d_u(ig0+i+1, l))*cu_2d(i, j)  
304            ENDDO            ENDDO
305            dufi(iim, j, l)= &            dufi(iim, j, l)= 0.5*(d_u(ig0+1, l)+d_u(ig0+iim, l))*cu_2d(iim, j)
                0.5*(d_u(ig0+1, l)+d_u(ig0+iim, l))*cu_2d(iim, j)  
306            dufi(iim + 1, j, l)=dufi(1, j, l)            dufi(iim + 1, j, l)=dufi(1, j, l)
307         ENDDO         ENDDO
   
308      ENDDO      ENDDO
309    
310      ! 67. champ v:      ! 67. champ v:
311    
312      DO l=1, llm      DO l=1, llm
   
313         DO j=2, jjm-1         DO j=2, jjm-1
314            ig0=1+(j-2)*iim            ig0=1+(j-2)*iim
315            DO i=1, iim            DO i=1, iim
316               dvfi(i, j, l)= &               dvfi(i, j, l)= 0.5*(d_v(ig0+i, l)+d_v(ig0+i+iim, l))*cv_2d(i, j)
                   0.5*(d_v(ig0+i, l)+d_v(ig0+i+iim, l))*cv_2d(i, j)  
317            ENDDO            ENDDO
318            dvfi(iim + 1, j, l) = dvfi(1, j, l)            dvfi(iim + 1, j, l) = dvfi(1, j, l)
319         ENDDO         ENDDO
320      ENDDO      ENDDO
321    
322      ! 68. champ v pres des poles:      ! 68. champ v près des pôles:
323      ! v = U * cos(long) + V * SIN(long)      ! v = U * cos(long) + V * SIN(long)
324    
325      DO l=1, llm      DO l=1, llm
326         DO i=1, iim         DO i=1, iim
327            dvfi(i, 1, l)= &            dvfi(i, 1, l)= d_u(1, l)*COS(rlonv(i))+d_v(1, l)*SIN(rlonv(i))
328                 d_u(1, l)*COS(rlonv(i))+d_v(1, l)*SIN(rlonv(i))            dvfi(i, jjm, l)=d_u(klon, l)*COS(rlonv(i)) +d_v(klon, l)*SIN(rlonv(i))
329            dvfi(i, jjm, l)=d_u(klon, l)*COS(rlonv(i)) &            dvfi(i, 1, l)= 0.5*(dvfi(i, 1, l)+d_v(i+1, l))*cv_2d(i, 1)
330                 +d_v(klon, l)*SIN(rlonv(i))            dvfi(i, jjm, l)= 0.5 &
331            dvfi(i, 1, l)= &                 * (dvfi(i, jjm, l) + d_v(klon - iim - 1 + i, l)) * cv_2d(i, jjm)
                0.5*(dvfi(i, 1, l)+d_v(i+1, l))*cv_2d(i, 1)  
           dvfi(i, jjm, l)= &  
                0.5*(dvfi(i, jjm, l)+d_v(klon-iim-1+i, l))*cv_2d(i, jjm)  
332         ENDDO         ENDDO
333    
334         dvfi(iim + 1, 1, l) = dvfi(1, 1, l)         dvfi(iim + 1, 1, l) = dvfi(1, 1, l)

Legend:
Removed from v.70  
changed lines
  Added in v.88

  ViewVC Help
Powered by ViewVC 1.1.21