source: LMDZ6/trunk/libf/dyn3dmem/fluxstokenc_p.f90 @ 5278

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

Turn paramet.h into a module

File size: 3.9 KB
Line 
1!
2! $Id: caladvtrac_p.F 1299 2010-01-20 14:27:21Z fairhead $
3!
4!
5!
6      SUBROUTINE fluxstokenc_p(pbaru,pbarv , &
7              masse,  teta, phi)
8  USE parallel_lmdz
9  USE control_mod, ONLY : iapp_tracvl,planet_type,iphysiq
10  USE caladvtrac_mod
11  USE mod_hallo
12  USE bands
13  USE times
14  USE Vampir
15  USE write_field_loc
16
17  !
18  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
19USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
20          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
21IMPLICIT NONE
22  !
23  ! Auteurs:   F.Hourdin , P.Le Van, F.Forget, F.Codron
24  !
25  !=======================================================================
26  !
27  !   Shema de  Van Leer
28  !
29  !=======================================================================
30
31
32
33
34  include "tracstoke.h"
35
36  !   Arguments:
37  !   ----------
38  REAL :: pbaru( ijb_u:ije_u,llm ),pbarv( ijb_v:ije_v,llm)
39  REAL :: masse(ijb_u:ije_u,llm)
40  REAL :: teta( ijb_u:ije_u,llm)
41  REAL :: phi(ijb_u:ije_u,llm)
42
43  INTEGER,SAVE :: pasflx=0
44!$OMP THREADPRIVATE(pasflx)
45  INTEGER ::  ijb,ije,ijbu,ijbv,ijeu,ijev,j
46  INTEGER :: ij,l
47  TYPE(Request),SAVE :: Request_vanleer
48!$OMP THREADPRIVATE(Request_vanleer)
49
50
51
52  ! !write(*,*) 'caladvtrac 58: entree'
53  ijbu=ij_begin
54  ijeu=ij_end
55
56  ijbv=ij_begin-iip1
57  ijev=ij_end
58  if (pole_nord) ijbv=ij_begin
59  if (pole_sud)  ijev=ij_end-iip1
60
61  IF(pasflx.EQ.0) THEN
62!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
63  DO l=1,llm
64      tetac(ijbu:ijeu,l)=0.
65      phic(ijbu:ijeu,l)=0.
66      pbarucc(ijbu:ijeu,l)=0.
67      pbarvcc(ijbv:ijev,l)=0.
68    ENDDO
69!$OMP END DO NOWAIT
70  ENDIF
71
72  !   accumulation des flux de masse horizontaux
73!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
74  DO l=1,llm
75     DO ij = ijbu,ijeu
76        pbarucc(ij,l) = pbarucc(ij,l) + pbaru(ij,l)
77        tetac(ij,l) = tetac(ij,l) + teta(ij,l)
78        phic(ij,l) = phic(ij,l) + phi(ij,l)
79
80     ENDDO
81     DO ij = ijbv,ijev
82        pbarvcc(ij,l) = pbarvcc(ij,l) + pbarv(ij,l)
83     ENDDO
84  ENDDO
85!$OMP END DO NOWAIT
86
87  !   selection de la masse instantannee des mailles avant le transport.
88  IF(pasflx.EQ.0) THEN
89
90      ijb=ij_begin
91      ije=ij_end
92
93!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
94  DO l=1,llm
95      massec(ijb:ije,l)=masse(ijb:ije,l)
96   ENDDO
97!$OMP END DO NOWAIT
98
99  ENDIF
100
101  pasflx   = pasflx+1
102
103
104  !   Test pour savoir si on advecte a ce pas de temps
105
106  IF ( pasflx.EQ.(iphysiq*istphy) ) THEN
107  ! !write(*,*) 'caladvtrac 133'
108!$OMP MASTER
109  call suspend_timer(timer_caldyn)
110!$OMP END MASTER
111
112  ijb=ij_begin
113  ije=ij_end
114
115
116!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
117  DO l=1,llm
118        pbarucc(ijb:ije,l) = pbarucc(ijb:ije,l)/REAL(iphysiq*istphy)
119        tetac(ijb:ije,l) = tetac(ijb:ije,l)/REAL(iphysiq*istphy)
120        phic(ijb:ije,l) = phic(ijb:ije,l)/REAL(iphysiq*istphy)
121  ENDDO
122!$OMP ENDDO NOWAIT
123
124  if (pole_sud) ije=ij_end-iip1
125
126!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
127  DO l=1,llm
128        pbarvcc(ijb:ije,l) = pbarvcc(ijb:ije,l)/REAL(iphysiq*istphy)
129  ENDDO
130!$OMP ENDDO NOWAIT
131
132
133!$OMP BARRIER
134    call Register_Hallo_u(pbarucc,llm,1,1,1,1,Request_vanleer)
135    call Register_Hallo_v(pbarvcc,llm,1,1,1,1,Request_vanleer)
136    call SendRequest(Request_vanleer)
137!$OMP BARRIER
138    call WaitRequest(Request_vanleer)
139!$OMP BARRIER
140
141
142
143
144  !c   ..  Modif P.Le Van  ( 20/12/97 )  ....
145  !c
146
147  !   traitement des flux de masse avant advection.
148  ! 1. calcul de w
149  ! 2. groupement des mailles pres du pole.
150
151    CALL groupe_loc( massec, pbarucc,pbarvcc, pbarugg,pbarvgg,wgg )
152
153
154
155     ijb=ij_begin
156     ije=ij_end
157
158!$OMP BARRIER
159     CALL WriteField_u('pbarug',pbarugg)
160     CALL WriteField_v('pbarvg',pbarvgg)
161     CALL WriteField_u('wg',wgg)
162     CALL WriteField_u('tetag',tetac)
163     CALL WriteField_u('phig',phic)
164     CALL WriteField_u('masseg',massec)
165
166
167!$OMP MASTER
168    call Set_Distrib(distrib_caldyn)
169    call VTe(VThallo)
170    call resume_timer(timer_caldyn)
171!$OMP END MASTER
172
173
174!$OMP BARRIER
175      pasflx=0
176   ENDIF ! if iadvtr.EQ.iapp_tracvl
177
178END SUBROUTINE fluxstokenc_p
Note: See TracBrowser for help on using the repository browser.