LMDZ
caladvtrac_loc.F
Go to the documentation of this file.
1 !
2 ! $Id: caladvtrac_p.F 1299 2010-01-20 14:27:21Z fairhead $
3 !
4 c
5 c
6  SUBROUTINE caladvtrac_loc(q,pbaru,pbarv ,
7  * p ,masse, dq , teta,
8  * flxw, pk, iapptrac)
10  USE infotrac, ONLY : nqtot
12  USE caladvtrac_mod
13  USE mod_hallo
14  USE bands
15  USE times
16  USE vampir
17  USE write_field_loc
18 c
19  IMPLICIT NONE
20 c
21 c Auteurs: F.Hourdin , P.Le Van, F.Forget, F.Codron
22 c
23 c F.Codron (10/99) : ajout humidite specifique pour eau vapeur
24 c=======================================================================
25 c
26 c Shema de Van Leer
27 c
28 c=======================================================================
29 
30 
31 #include "dimensions.h"
32 #include "paramet.h"
33 #include "comconst.h"
34 
35 c Arguments:
36 c ----------
37  REAL :: pbaru( ijb_u:ije_u,llm ),pbarv( ijb_v:ije_v,llm)
38  REAL :: masse(ijb_u:ije_u,llm)
39  REAL :: p( ijb_u:ije_u,llmp1)
40  REAL :: q( ijb_u:ije_u,llm,nqtot),dq( ijb_u:ije_u,llm, nqtot )
41  REAL :: teta( ijb_u:ije_u,llm),pk( ijb_u:ije_u,llm)
42  REAL :: flxw(ijb_u:ije_u,llm)
43  INTEGER :: iapptrac
44 c Local:
45 c ------
46 ! REAL :: pbarug(ijb_u:ije_u,llm)
47 ! REAL :: pbarvg(ijb_v:ije_v,llm)
48 ! REAL :: wg(ijb_u:ije_u,llm)
49 
51  INTEGER,SAVE :: iadvtr=0
52 !$OMP THREADPRIVATE(iadvtr)
53  INTEGER :: ijb,ije,ijbu,ijbv,ijeu,ijev,j
54  INTEGER :: ij,l
55  TYPE(request),SAVE :: Request_vanleer
56 !$OMP THREADPRIVATE(Request_vanleer)
57 
58  !write(*,*) 'caladvtrac 58: entree'
59  ijbu=ij_begin
60  ijeu=ij_end
61 
62  ijbv=ij_begin-iip1
63  ijev=ij_end
64  if (pole_nord) ijbv=ij_begin
65  if (pole_sud) ijev=ij_end-iip1
66 
67  IF(iadvtr.EQ.0) THEN
68 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
69  DO l=1,llm
70  pbaruc(ijbu:ijeu,l)=0.
71  pbarvc(ijbv:ijev,l)=0.
72  ENDDO
73 c$OMP END DO NOWAIT
74  ENDIF
75 
76 c accumulation des flux de masse horizontaux
77 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
78  DO l=1,llm
79  DO ij = ijbu,ijeu
80  pbaruc(ij,l) = pbaruc(ij,l) + pbaru(ij,l)
81  ENDDO
82  DO ij = ijbv,ijev
83  pbarvc(ij,l) = pbarvc(ij,l) + pbarv(ij,l)
84  ENDDO
85  ENDDO
86 c$OMP END DO NOWAIT
87 
88 c selection de la masse instantannee des mailles avant le transport.
89  IF(iadvtr.EQ.0) THEN
90 
91  ijb=ij_begin
92  ije=ij_end
93 
94 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
95  DO l=1,llm
96  massem(ijb:ije,l)=masse(ijb:ije,l)
97  ENDDO
98 c$OMP END DO NOWAIT
99 
100  ENDIF
101 
102  iadvtr = iadvtr+1
103 
104 c$OMP MASTER
105  iapptrac = iadvtr
106 c$OMP END MASTER
107 
108 c Test pour savoir si on advecte a ce pas de temps
109 
110  IF ( iadvtr.EQ.iapp_tracvl ) THEN
111  !write(*,*) 'caladvtrac 133'
112 c$OMP MASTER
114 c$OMP END MASTER
115 
116  ijb=ij_begin
117  ije=ij_end
118 
119 cc .. Modif P.Le Van ( 20/12/97 ) ....
120 cc
121 
122 c traitement des flux de masse avant advection.
123 c 1. calcul de w
124 c 2. groupement des mailles pres du pole.
125 
127 
128 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
129  DO l=1,llm
130  flxw(ijb:ije,l)=wg(ijb:ije,l)/REAL(iapp_tracvl)
131  ENDDO
132 c$OMP ENDDO NOWAIT
133 
134 #ifdef DEBUG_IO
135  CALL writefield_u('pbarug1',pbarug)
136  CALL writefield_v('pbarvg1',pbarvg)
137  CALL writefield_u('wg1',wg)
138 #endif
139 
140 c$OMP BARRIER
141 
142 
143 c$OMP MASTER
144  call vtb(vthallo)
145 c$OMP END MASTER
146 
148  & request_vanleer)
150  & request_vanleer,up=1)
152  & request_vanleer)
154  & request_vanleer)
156  & request_vanleer,up=1,down=1)
158  & request_vanleer,up=1,down=1)
160  & request_vanleer,up=1,down=1)
162  & request_vanleer)
163 
164  call sendrequest(request_vanleer)
165 c$OMP BARRIER
166  call waitrequest(request_vanleer)
167 
168 
169 c$OMP BARRIER
170 c$OMP MASTER
172  call vte(vthallo)
173  call vtb(vtadvection)
175 c$OMP END MASTER
176 c$OMP BARRIER
177 ! CALL WriteField_u('pbarug_adv',pbarug_adv)
178 ! CALL WriteField_u('',)
179 
180 
181 #ifdef DEBUG_IO
182  CALL writefield_u('pbarug1',pbarug_adv)
183  CALL writefield_v('pbarvg1',pbarvg_adv)
184  CALL writefield_u('wg1',wg_adv)
185 #endif
186  !write(*,*) 'caladvtrac 185'
189  . pk_adv)
190  !write(*,*) 'caladvtrac 189'
191 
192 
193 c$OMP MASTER
194  call vte(vtadvection)
196  call vtb(vthallo)
197 c$OMP END MASTER
198 
200  * request_vanleer)
201 
202  call sendrequest(request_vanleer)
203 c$OMP BARRIER
204  call waitrequest(request_vanleer)
205 
206 c$OMP BARRIER
207 c$OMP MASTER
209  call vte(vthallo)
211 c$OMP END MASTER
212 c$OMP BARRIER
213  iadvtr=0
214  ENDIF ! if iadvtr.EQ.iapp_tracvl
215 
216  END
217 
218 
real, dimension(:,:), pointer, save teta_adv
real, dimension(:,:), pointer, save p_adv
Definition: bands.F90:4
integer, save iapp_tracvl
Definition: control_mod.F90:17
do llm!au dessus on relaxe vers profil init!on fait l hypothese que dans ce il n y a plus d eau liq au dessus!donc la relaxation en thetal et qt devient relaxation en tempe et qv l dq1 relax dq(l, 1)
real, dimension(:,:), pointer, save pbarvc
subroutine stop_timer(no_timer)
Definition: times.F90:103
!$Header llmp1
Definition: paramet.h:14
Definition: vampir.F90:1
real, dimension(:,:), pointer, save pbarvg_adv
integer, save ij_end
logical, save pole_sud
subroutine vtb(number)
Definition: vampir.F90:52
character(len=10), save planet_type
Definition: control_mod.F90:32
real, dimension(:,:), pointer, save wg
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm day day1 day day1 *dt_dice endif!time annee_ref dt_dice swup_dice vg_dice omega_dice tg_prof vg_profd w_profd omega_profd!do llm!print llm l llm
subroutine caladvtrac_loc(q, pbaru, pbarv, p, masse, dq, teta, flxw, pk, iapptrac)
Definition: caladvtrac_loc.F:9
integer, parameter timer_caldyn
Definition: times.F90:7
real, dimension(:,:), pointer, save wg_adv
subroutine resume_timer(no_timer)
Definition: times.F90:87
integer, save nqtot
Definition: infotrac.F90:6
type(distrib), target, save distrib_vanleer
Definition: bands.F90:18
subroutine advtrac_loc(pbarug, pbarvg, wg, p, massem, q, teta, pk)
Definition: advtrac_loc.F:11
integer, save ijb_v
logical, save pole_nord
real, dimension(:,:), pointer, save pbaruc
real, dimension(:,:), pointer, save massem_adv
subroutine groupe_loc(pext, pbaru, pbarv, pbarum, pbarvm, wm)
Definition: groupe_loc.F:2
real, dimension(:,:,:), pointer, save q_adv
integer, parameter vthallo
Definition: vampir.F90:7
Definition: times.F90:1
subroutine set_distrib(d)
subroutine sendrequest(a_Request)
Definition: mod_hallo.F90:1072
integer, save ij_begin
integer, save ije_v
real, dimension(:,:), pointer, save massem
real, dimension(:,:), pointer, save pbarug_adv
real, dimension(:,:), pointer, save pk_adv
subroutine vte(number)
Definition: vampir.F90:69
subroutine suspend_timer(no_timer)
Definition: times.F90:70
integer, parameter vtadvection
Definition: vampir.F90:5
subroutine start_timer(no_timer)
Definition: times.F90:51
real, dimension(:,:), pointer, save pbarug
integer, save ije_u
integer, parameter timer_vanleer
Definition: times.F90:8
real, dimension(:,:), pointer, save pbarvg
type(distrib), target, save distrib_caldyn
Definition: bands.F90:17
subroutine waitrequest(a_Request)
Definition: mod_hallo.F90:1196
integer, save ijb_u