source: LMDZ6/trunk/libf/dyn3d/addfi.f90 @ 5272

Last change on this file since 5272 was 5272, checked in by abarral, 2 days ago

Turn paramet.h into a module

  • 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.6 KB
Line 
1!
2! $Id: addfi.f90 5272 2024-10-24 15:53:15Z abarral $
3!
4SUBROUTINE addfi(pdt, leapf, forward, &
5        pucov, pvcov, pteta, pq   , pps , &
6        pdufi, pdvfi, pdhfi,pdqfi, pdpfi  )
7
8  USE infotrac, ONLY : nqtot
9  USE control_mod, ONLY : planet_type
10  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
11  USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
12          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
13  IMPLICIT NONE
14  !
15  !=======================================================================
16  !
17  !    Addition of the physical tendencies
18  !
19  !    Interface :
20  !    -----------
21  !
22  !  Input :
23  !  -------
24  !  pdt                    time step of integration
25  !  leapf                  logical
26  !  forward                logical
27  !  pucov(ip1jmp1,llm)     first component of the covariant velocity
28  !  pvcov(ip1ip1jm,llm)    second component of the covariant velocity
29  !  pteta(ip1jmp1,llm)     potential temperature
30  !  pts(ip1jmp1,llm)       surface temperature
31  !  pdufi(ip1jmp1,llm)     |
32  !  pdvfi(ip1jm,llm)       |   respective
33  !  pdhfi(ip1jmp1)         |      tendencies
34  !  pdtsfi(ip1jmp1)        |
35  !
36  !  Output :
37  !  --------
38  !  pucov
39  !  pvcov
40  !  ph
41  !  pts
42  !
43  !
44  !=======================================================================
45  !
46  !-----------------------------------------------------------------------
47  !
48  !    0.  Declarations :
49  !    ------------------
50  !
51  include "comgeom.h"
52  !
53  !    Arguments :
54  !    -----------
55  !
56  REAL,INTENT(IN) :: pdt ! time step for the integration (s)
57  !
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)
63  ! 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)
69  !
70  LOGICAL,INTENT(IN) :: leapf,forward ! not used
71  !
72  !
73  !    Local variables :
74  !    -----------------
75  !
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
82  !
83  !-----------------------------------------------------------------------
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
104  !
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
118  !
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
185END SUBROUTINE addfi
Note: See TracBrowser for help on using the repository browser.