source: trunk/LMDZ.GENERIC/libf/dyn3d/addfi.F @ 1351

Last change on this file since 1351 was 253, checked in by emillour, 13 years ago

Generic GCM

  • Massive update to version 0.7

EM+RW

File size: 4.7 KB
Line 
1      SUBROUTINE addfi(nq, pdt, leapf, forward,
2     S          pucov, pvcov, pteta, pq   , pps , pmasse ,
3     S          pdufi, pdvfi, pdhfi,pdqfi, pdpfi  )
4      IMPLICIT NONE
5c
6c=======================================================================
7c
8c    Addition of the physical tendencies
9c    Modif special Mars :
10c       - no special treatment of iq = 1, 2, FF 2003
11c       - recompute mass after incrementation of ps (EM,FF 2008)
12c
13c    Interface :
14c    -----------
15c
16c      Input :
17c      -------
18c      pdt                    time step of integration
19c      leapf                  logical
20c      forward                logical
21c      pucov(ip1jmp1,llm)     first component of the covariant velocity
22c      pvcov(ip1ip1jm,llm)    second component of the covariant velocity
23c      pteta(ip1jmp1,llm)     potential temperature
24c      pts(ip1jmp1,llm)       surface temperature
25c      pdufi(ip1jmp1,llm)     |
26c      pdvfi(ip1jm,llm)       |   respective
27c      pdhfi(ip1jmp1)         |      tendencies
28c      pdtsfi(ip1jmp1)        |
29c
30c      Output :
31c      --------
32c      pucov
33c      pvcov
34c      ph
35c      pts
36c      pmasse(ip1jmp1,llm)    ! mass
37c
38c
39c=======================================================================
40c
41c-----------------------------------------------------------------------
42c
43c    0.  Declarations :
44c    ------------------
45c
46#include "dimensions.h"
47#include "paramet.h"
48#include "comconst.h"
49#include "comgeom.h"
50#include "serre.h"
51#include "comvert.h"
52c
53c    Arguments :
54c    -----------
55c
56      INTEGER nq
57
58      REAL pdt
59c
60      REAL pvcov(ip1jm,llm),pucov(ip1jmp1,llm)
61      REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nq),pps(ip1jmp1)
62c
63      REAL pdvfi(ip1jm,llm),pdufi(ip1jmp1,llm)
64      REAL pdqfi(ip1jmp1,llm,nq),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1)
65
66      real pmasse(ip1jmp1,llm)
67c
68      LOGICAL leapf,forward
69c
70c
71c    Local variables :
72c    -----------------
73c
74      REAL xpn(iim),xps(iim),tpn,tps
75      INTEGER j,k,iq,ij
76      REAL qtestw, qtestt
77      PARAMETER ( qtestw = 1.0e-15 )
78      PARAMETER ( qtestt = 1.0e-30 )
79
80      real p(ip1jmp1,llmp1) ! pressure
81
82      REAL SSUM
83      EXTERNAL SSUM
84c
85c-----------------------------------------------------------------------
86! increment potential temperature
87      DO k = 1,llm
88         DO j = 1,ip1jmp1
89            pteta(j,k)= pteta(j,k) + pdhfi(j,k) * pdt
90         ENDDO
91      ENDDO
92
93      DO  k    = 1, llm
94       DO  ij   = 1, iim
95         xpn(ij) = aire(   ij   ) * pteta(  ij    ,k)
96         xps(ij) = aire(ij+ip1jm) * pteta(ij+ip1jm,k)
97       ENDDO
98       tpn      = SSUM(iim,xpn,1)/ apoln
99       tps      = SSUM(iim,xps,1)/ apols
100
101       DO ij   = 1, iip1
102         pteta(   ij   ,k)  = tpn
103         pteta(ij+ip1jm,k)  = tps
104       ENDDO
105      ENDDO
106c
107
108! increment covariant zonal wind
109      DO k = 1,llm
110         DO j = iip2,ip1jm
111            pucov(j,k)= pucov(j,k) + pdufi(j,k) * pdt
112         ENDDO
113      ENDDO
114
115! increment covariant meridional wind
116      DO k = 1,llm
117         DO j = 1,ip1jm
118            pvcov(j,k)= pvcov(j,k) + pdvfi(j,k) * pdt
119         ENDDO
120      ENDDO
121
122c
123! increment surface pressure
124      DO j = 1,ip1jmp1
125         pps(j) = pps(j) + pdpfi(j) * pdt
126      ENDDO
127
128c     DO iq = 1, 2 ! special Mars: no special treatment for water
129c        DO k = 1,llm
130c           DO j = 1,ip1jmp1
131c              pq(j,k,iq)= pq(j,k,iq) + pdqfi(j,k,iq) * pdt
132c              pq(j,k,iq)= AMAX1( pq(j,k,iq), qtestw )
133c           ENDDO
134c        ENDDO
135c     ENDDO
136
137! increment tracers
138      DO iq = 1, nq
139         DO k = 1,llm
140            DO j = 1,ip1jmp1
141!               pq(j,k,iq)=  pdqfi(j,k,iq) * pdt
142               pq(j,k,iq)= pq(j,k,iq) + pdqfi(j,k,iq) * pdt
143               pq(j,k,iq)= AMAX1( pq(j,k,iq), qtestt ) ! forbid negative tracer values
144            ENDDO
145         ENDDO
146      ENDDO
147!      print*,'MAJOR TRACER MOD in addfi for test'
148                                       
149
150       DO  ij   = 1, iim
151         xpn(ij) = aire(   ij   ) * pps(  ij     )
152         xps(ij) = aire(ij+ip1jm) * pps(ij+ip1jm )
153       ENDDO
154       tpn      = SSUM(iim,xpn,1)/apoln
155       tps      = SSUM(iim,xps,1)/apols
156
157       DO ij   = 1, iip1
158         pps (   ij     )  = tpn
159         pps ( ij+ip1jm )  = tps
160       ENDDO
161
162! recompute mass: (to be synchronous with update of ps)
163      CALL pression ( ip1jmp1, ap, bp, pps, p )
164      CALL massdair (     p  , pmasse         )
165 
166
167
168       DO iq = 1, nq
169         DO  k    = 1, llm
170           DO  ij   = 1, iim
171             xpn(ij) = aire(   ij   ) * pq(  ij    ,k,iq)
172             xps(ij) = aire(ij+ip1jm) * pq(ij+ip1jm,k,iq)
173           ENDDO
174           tpn      = SSUM(iim,xpn,1)/apoln
175           tps      = SSUM(iim,xps,1)/apols
176
177           DO ij   = 1, iip1
178             pq (   ij   ,k,iq)  = tpn
179             pq (ij+ip1jm,k,iq)  = tps
180           ENDDO
181         ENDDO
182       ENDDO
183
184      RETURN
185      END
Note: See TracBrowser for help on using the repository browser.