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

Last change on this file since 5456 was 5285, checked in by abarral, 2 months ago

As discussed internally, remove generic ONLY: ... for new _mod_h modules

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