source: LMDZ4/trunk/libf/dyn3dpar/addfi_p.F @ 1131

Last change on this file since 1131 was 774, checked in by Laurent Fairhead, 17 years ago

Suite du merge entre la version et la HEAD: quelques modifications de
Yann sur le

LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
RevLine 
[774]1!
2! $Header$
3!
[630]4      SUBROUTINE addfi_p(nq, pdt, leapf, forward,
5     S          pucov, pvcov, pteta, pq   , pps ,
6     S          pdufi, pdvfi, pdhfi,pdqfi, pdpfi  )
7      USE parallel
8      IMPLICIT NONE
9c
10c=======================================================================
11c
12c    Addition of the physical tendencies
13c
14c    Interface :
15c    -----------
16c
17c      Input :
18c      -------
19c      pdt                    time step of integration
20c      leapf                  logical
21c      forward                logical
22c      pucov(ip1jmp1,llm)     first component of the covariant velocity
23c      pvcov(ip1ip1jm,llm)    second component of the covariant velocity
24c      pteta(ip1jmp1,llm)     potential temperature
25c      pts(ip1jmp1,llm)       surface temperature
26c      pdufi(ip1jmp1,llm)     |
27c      pdvfi(ip1jm,llm)       |   respective
28c      pdhfi(ip1jmp1)         |      tendencies
29c      pdtsfi(ip1jmp1)        |
30c
31c      Output :
32c      --------
33c      pucov
34c      pvcov
35c      ph
36c      pts
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"
51c
52c    Arguments :
53c    -----------
54c
55      INTEGER nq
56
57      REAL pdt
58c
59      REAL pvcov(ip1jm,llm),pucov(ip1jmp1,llm)
60      REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nq),pps(ip1jmp1)
61c
62      REAL pdvfi(ip1jm,llm),pdufi(ip1jmp1,llm)
63      REAL pdqfi(ip1jmp1,llm,nq),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1)
64c
65      LOGICAL leapf,forward
66c
67c
68c    Local variables :
69c    -----------------
70c
71      REAL xpn(iim),xps(iim),tpn,tps
72      INTEGER j,k,iq,ij
73      REAL qtestw, qtestt
74      PARAMETER ( qtestw = 1.0e-15 )
75      PARAMETER ( qtestt = 1.0e-40 )
76
77      REAL SSUM
78      EXTERNAL SSUM
79     
80      INTEGER :: ijb,ije
81c
82c-----------------------------------------------------------------------
83     
84      ijb=ij_begin
85      ije=ij_end
86     
[764]87c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
[630]88      DO k = 1,llm
89         DO j = ijb,ije
90            pteta(j,k)= pteta(j,k) + pdhfi(j,k) * pdt
91         ENDDO
92      ENDDO
[764]93c$OMP END DO NOWAIT
[630]94
95      if (pole_nord) then
[764]96c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
[630]97        DO  k    = 1, llm
98         DO  ij   = 1, iim
99           xpn(ij) = aire(   ij   ) * pteta(  ij    ,k)
100         ENDDO
101         tpn      = SSUM(iim,xpn,1)/ apoln
102
103         DO ij   = 1, iip1
104           pteta(   ij   ,k)  = tpn
105         ENDDO
106       ENDDO
[764]107c$OMP END DO NOWAIT
[630]108      endif
109
110      if (pole_sud) then
[764]111c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
[630]112        DO  k    = 1, llm
113         DO  ij   = 1, iim
114           xps(ij) = aire(ij+ip1jm) * pteta(ij+ip1jm,k)
115         ENDDO
116         tps      = SSUM(iim,xps,1)/ apols
117
118         DO ij   = 1, iip1
119           pteta(ij+ip1jm,k)  = tps
120         ENDDO
121       ENDDO
[764]122c$OMP END DO NOWAIT
[630]123      endif
124c
125
126      ijb=ij_begin
127      ije=ij_end
128      if (pole_nord) ijb=ij_begin+iip1
129      if (pole_sud)  ije=ij_end-iip1
[764]130
131c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
[630]132      DO k = 1,llm
133         DO j = ijb,ije
134            pucov(j,k)= pucov(j,k) + pdufi(j,k) * pdt
135         ENDDO
136      ENDDO
[764]137c$OMP END DO NOWAIT
[630]138
139      if (pole_nord) ijb=ij_begin
140
[764]141c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
[630]142      DO k = 1,llm
143         DO j = ijb,ije
144            pvcov(j,k)= pvcov(j,k) + pdvfi(j,k) * pdt
145         ENDDO
146      ENDDO
[764]147c$OMP END DO NOWAIT
[630]148
149c
150      if (pole_sud)  ije=ij_end
[764]151c$OMP MASTER
[630]152      DO j = ijb,ije
153         pps(j) = pps(j) + pdpfi(j) * pdt
154      ENDDO
[764]155c$OMP END MASTER
[630]156 
157      DO iq = 1, 2
[764]158c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
[630]159         DO k = 1,llm
160            DO j = ijb,ije
161               pq(j,k,iq)= pq(j,k,iq) + pdqfi(j,k,iq) * pdt
162               pq(j,k,iq)= AMAX1( pq(j,k,iq), qtestw )
163            ENDDO
164         ENDDO
[764]165c$OMP END DO NOWAIT
[630]166      ENDDO
167
168      DO iq = 3, nq
[764]169c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
[630]170         DO k = 1,llm
171            DO j = ijb,ije
172               pq(j,k,iq)= pq(j,k,iq) + pdqfi(j,k,iq) * pdt
173               pq(j,k,iq)= AMAX1( pq(j,k,iq), qtestt )
174            ENDDO
175         ENDDO
[764]176c$OMP END DO NOWAIT
[630]177      ENDDO
178
[764]179c$OMP MASTER
[630]180      if (pole_nord) then
181     
182        DO  ij   = 1, iim
183          xpn(ij) = aire(   ij   ) * pps(  ij     )
184        ENDDO
185
186        tpn      = SSUM(iim,xpn,1)/apoln
187
188        DO ij   = 1, iip1
189          pps (   ij     )  = tpn
190        ENDDO
191     
192      endif
193
194      if (pole_sud) then
195     
196        DO  ij   = 1, iim
197          xps(ij) = aire(ij+ip1jm) * pps(ij+ip1jm )
198        ENDDO
199
200        tps      = SSUM(iim,xps,1)/apols
201
202        DO ij   = 1, iip1
203          pps ( ij+ip1jm )  = tps
204        ENDDO
205     
206      endif
[764]207c$OMP END MASTER
[630]208
209      if (pole_nord) then
210        DO iq = 1, nq
[764]211c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
[630]212          DO  k    = 1, llm
213            DO  ij   = 1, iim
214              xpn(ij) = aire(   ij   ) * pq(  ij    ,k,iq)
215            ENDDO
216            tpn      = SSUM(iim,xpn,1)/apoln
217 
218            DO ij   = 1, iip1
219              pq (   ij   ,k,iq)  = tpn
220            ENDDO
221          ENDDO
[764]222c$OMP END DO NOWAIT       
[630]223        ENDDO
224      endif
225     
226      if (pole_sud) then
227        DO iq = 1, nq
[764]228c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
[630]229          DO  k    = 1, llm
230            DO  ij   = 1, iim
231              xps(ij) = aire(ij+ip1jm) * pq(ij+ip1jm,k,iq)
232            ENDDO
233            tps      = SSUM(iim,xps,1)/apols
234 
235            DO ij   = 1, iip1
236              pq (ij+ip1jm,k,iq)  = tps
237            ENDDO
238          ENDDO
[764]239c$OMP END DO NOWAIT       
[630]240        ENDDO
241      endif
242     
243     
244      RETURN
245      END
Note: See TracBrowser for help on using the repository browser.