source: LMDZ5/trunk/libf/dyn3d/addfi.F @ 2597

Last change on this file since 2597 was 2597, checked in by Ehouarn Millour, 8 years ago

Cleanup in the dynamics: get rid of comconst.h, make it a module comconst_mod.
EM

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.8 KB
Line 
1!
2! $Id: addfi.F 2597 2016-07-22 06:44:47Z emillour $
3!
4      SUBROUTINE addfi(pdt, leapf, forward,
5     S          pucov, pvcov, pteta, pq   , pps ,
6     S          pdufi, pdvfi, pdhfi,pdqfi, pdpfi  )
7
8      USE infotrac, ONLY : nqtot
9      USE control_mod, ONLY : planet_type
10      IMPLICIT NONE
11c
12c=======================================================================
13c
14c    Addition of the physical tendencies
15c
16c    Interface :
17c    -----------
18c
19c      Input :
20c      -------
21c      pdt                    time step of integration
22c      leapf                  logical
23c      forward                logical
24c      pucov(ip1jmp1,llm)     first component of the covariant velocity
25c      pvcov(ip1ip1jm,llm)    second component of the covariant velocity
26c      pteta(ip1jmp1,llm)     potential temperature
27c      pts(ip1jmp1,llm)       surface temperature
28c      pdufi(ip1jmp1,llm)     |
29c      pdvfi(ip1jm,llm)       |   respective
30c      pdhfi(ip1jmp1)         |      tendencies
31c      pdtsfi(ip1jmp1)        |
32c
33c      Output :
34c      --------
35c      pucov
36c      pvcov
37c      ph
38c      pts
39c
40c
41c=======================================================================
42c
43c-----------------------------------------------------------------------
44c
45c    0.  Declarations :
46c    ------------------
47c
48      include "dimensions.h"
49      include "paramet.h"
50      include "comgeom.h"
51      include "serre.h"
52c
53c    Arguments :
54c    -----------
55c
56      REAL,INTENT(IN) :: pdt ! time step for the integration (s)
57c
58      REAL,INTENT(INOUT) :: pvcov(ip1jm,llm) ! covariant meridional wind
59      REAL,INTENT(INOUT) :: pucov(ip1jmp1,llm) ! covariant zonal wind
60      REAL,INTENT(INOUT) :: pteta(ip1jmp1,llm) ! potential temperature
61      REAL,INTENT(INOUT) :: pq(ip1jmp1,llm,nqtot) ! tracers
62      REAL,INTENT(INOUT) :: pps(ip1jmp1) ! surface pressure (Pa)
63c respective tendencies (.../s) to add
64      REAL,INTENT(IN) :: pdvfi(ip1jm,llm)
65      REAL,INTENT(IN) :: pdufi(ip1jmp1,llm)
66      REAL,INTENT(IN) :: pdqfi(ip1jmp1,llm,nqtot)
67      REAL,INTENT(IN) :: pdhfi(ip1jmp1,llm)
68      REAL,INTENT(IN) :: pdpfi(ip1jmp1)
69c
70      LOGICAL,INTENT(IN) :: leapf,forward ! not used
71c
72c
73c    Local variables :
74c    -----------------
75c
76      REAL xpn(iim),xps(iim),tpn,tps
77      INTEGER j,k,iq,ij
78      REAL,PARAMETER :: qtestw = 1.0e-15
79      REAL,PARAMETER :: qtestt = 1.0e-40
80
81      REAL SSUM
82c
83c-----------------------------------------------------------------------
84
85      DO k = 1,llm
86         DO j = 1,ip1jmp1
87            pteta(j,k)= pteta(j,k) + pdhfi(j,k) * pdt
88         ENDDO
89      ENDDO
90
91      DO  k    = 1, llm
92       DO  ij   = 1, iim
93         xpn(ij) = aire(   ij   ) * pteta(  ij    ,k)
94         xps(ij) = aire(ij+ip1jm) * pteta(ij+ip1jm,k)
95       ENDDO
96       tpn      = SSUM(iim,xpn,1)/ apoln
97       tps      = SSUM(iim,xps,1)/ apols
98
99       DO ij   = 1, iip1
100         pteta(   ij   ,k)  = tpn
101         pteta(ij+ip1jm,k)  = tps
102       ENDDO
103      ENDDO
104c
105
106      DO k = 1,llm
107         DO j = iip2,ip1jm
108            pucov(j,k)= pucov(j,k) + pdufi(j,k) * pdt
109         ENDDO
110      ENDDO
111
112      DO k = 1,llm
113         DO j = 1,ip1jm
114            pvcov(j,k)= pvcov(j,k) + pdvfi(j,k) * pdt
115         ENDDO
116      ENDDO
117
118c
119      DO j = 1,ip1jmp1
120         pps(j) = pps(j) + pdpfi(j) * pdt
121      ENDDO
122 
123      if (planet_type=="earth") then
124      ! earth case, special treatment for first 2 tracers (water)
125       DO iq = 1, 2
126         DO k = 1,llm
127            DO j = 1,ip1jmp1
128               pq(j,k,iq)= pq(j,k,iq) + pdqfi(j,k,iq) * pdt
129               pq(j,k,iq)= AMAX1( pq(j,k,iq), qtestw )
130            ENDDO
131         ENDDO
132       ENDDO
133
134       DO iq = 3, nqtot
135         DO k = 1,llm
136            DO j = 1,ip1jmp1
137               pq(j,k,iq)= pq(j,k,iq) + pdqfi(j,k,iq) * pdt
138               pq(j,k,iq)= AMAX1( pq(j,k,iq), qtestt )
139            ENDDO
140         ENDDO
141       ENDDO
142      else
143      ! general case, treat all tracers equally)
144       DO iq = 1, nqtot
145         DO k = 1,llm
146            DO j = 1,ip1jmp1
147               pq(j,k,iq)= pq(j,k,iq) + pdqfi(j,k,iq) * pdt
148               pq(j,k,iq)= AMAX1( pq(j,k,iq), qtestt )
149            ENDDO
150         ENDDO
151       ENDDO
152      endif ! of if (planet_type=="earth")
153
154
155      DO  ij   = 1, iim
156        xpn(ij) = aire(   ij   ) * pps(  ij     )
157        xps(ij) = aire(ij+ip1jm) * pps(ij+ip1jm )
158      ENDDO
159      tpn      = SSUM(iim,xpn,1)/apoln
160      tps      = SSUM(iim,xps,1)/apols
161
162      DO ij   = 1, iip1
163        pps (   ij     )  = tpn
164        pps ( ij+ip1jm )  = tps
165      ENDDO
166
167
168      DO iq = 1, nqtot
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.