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
RevLine 
[4139]1!
2! $Id: caladvtrac_p.F 1299 2010-01-20 14:27:21Z fairhead $
3!
[5246]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
[4139]16
[5246]17  !
[5271]18  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
[5272]19USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
20          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
[5271]21IMPLICIT NONE
[5246]22  !
23  ! Auteurs:   F.Hourdin , P.Le Van, F.Forget, F.Codron
24  !
25  !=======================================================================
26  !
27  !   Shema de  Van Leer
28  !
29  !=======================================================================
[4139]30
31
[5271]32
[5272]33
[5246]34  include "tracstoke.h"
[4139]35
[5246]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
[4139]44!$OMP THREADPRIVATE(pasflx)
[5246]45  INTEGER ::  ijb,ije,ijbu,ijbv,ijeu,ijev,j
46  INTEGER :: ij,l
47  TYPE(Request),SAVE :: Request_vanleer
[4139]48!$OMP THREADPRIVATE(Request_vanleer)
49
50
51
[5246]52  ! !write(*,*) 'caladvtrac 58: entree'
53  ijbu=ij_begin
54  ijeu=ij_end
[4139]55
[5246]56  ijbv=ij_begin-iip1
57  ijev=ij_end
58  if (pole_nord) ijbv=ij_begin
59  if (pole_sud)  ijev=ij_end-iip1
[4139]60
[5246]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
[4139]71
[5246]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)
[4139]79
[5246]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
[4139]86
[5246]87  !   selection de la masse instantannee des mailles avant le transport.
88  IF(pasflx.EQ.0) THEN
[4139]89
[5246]90      ijb=ij_begin
91      ije=ij_end
[4139]92
[5246]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
[4139]98
[5246]99  ENDIF
[4139]100
[5246]101  pasflx   = pasflx+1
[4139]102
103
[5246]104  !   Test pour savoir si on advecte a ce pas de temps
[4139]105
[5246]106  IF ( pasflx.EQ.(iphysiq*istphy) ) THEN
107  ! !write(*,*) 'caladvtrac 133'
108!$OMP MASTER
109  call suspend_timer(timer_caldyn)
110!$OMP END MASTER
[4139]111
[5246]112  ijb=ij_begin
113  ije=ij_end
[4139]114
115
[5246]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
[4139]123
[5246]124  if (pole_sud) ije=ij_end-iip1
[4139]125
[5246]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
[4139]131
132
[5246]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
[4139]140
141
142
143
[5246]144  !c   ..  Modif P.Le Van  ( 20/12/97 )  ....
145  !c
[4139]146
[5246]147  !   traitement des flux de masse avant advection.
148  ! 1. calcul de w
149  ! 2. groupement des mailles pres du pole.
[4139]150
[5246]151    CALL groupe_loc( massec, pbarucc,pbarvcc, pbarugg,pbarvgg,wgg )
[4139]152
153
154
[5246]155     ijb=ij_begin
156     ije=ij_end
[4139]157
[5246]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)
[4139]165
166
[5246]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.