source: LMDZ6/branches/contrails/libf/dyn3dmem/caladvtrac_loc.f90 @ 5425

Last change on this file since 5425 was 5324, checked in by abarral, 5 weeks ago

[WIP] Remove uses of DEBUGIO cpp key (deprecated)

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 4.8 KB
Line 
1!
2! $Id: caladvtrac_p.F 1299 2010-01-20 14:27:21Z fairhead $
3!
4!
5!
6      SUBROUTINE caladvtrac_loc(q,pbaru,pbarv , &
7              p ,masse, dq ,  teta, &
8              flxw, pk, iapptrac)
9  USE parallel_lmdz
10  USE infotrac, ONLY : nqtot
11  USE control_mod, ONLY : iapp_tracvl,planet_type
12  USE caladvtrac_mod
13  USE mod_hallo
14  USE bands
15  USE times
16  USE Vampir
17  USE write_field_loc
18  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
19USE paramet_mod_h
20IMPLICIT NONE
21  !
22  ! Auteurs:   F.Hourdin , P.Le Van, F.Forget, F.Codron
23  !
24  ! F.Codron (10/99) : ajout humidite specifique pour eau vapeur
25  !=======================================================================
26  !
27  !   Shema de  Van Leer
28  !
29  !=======================================================================
30
31
32
33
34
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 :: 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  !   Local:
45  !   ------
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
50  REAL :: flxw_adv(distrib_vanleer%ijb_u:distrib_vanleer%ije_u,llm)
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!$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!$OMP END DO NOWAIT
74  ENDIF
75
76  !   accumulation des flux de masse horizontaux
77!$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!$OMP END DO NOWAIT
87
88  !   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!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
95   DO l=1,llm
96      massem(ijb:ije,l)=masse(ijb:ije,l)
97   ENDDO
98!$OMP END DO NOWAIT
99
100  ENDIF
101
102  iadvtr   = iadvtr+1
103
104!$OMP MASTER
105  iapptrac = iadvtr
106!$OMP END MASTER
107
108  !   Test pour savoir si on advecte a ce pas de temps
109
110  IF ( iadvtr.EQ.iapp_tracvl ) THEN
111  ! !write(*,*) 'caladvtrac 133'
112!$OMP MASTER
113    call suspend_timer(timer_caldyn)
114!$OMP END MASTER
115
116  ijb=ij_begin
117  ije=ij_end
118
119  !c   ..  Modif P.Le Van  ( 20/12/97 )  ....
120  !c
121
122  !   traitement des flux de masse avant advection.
123  ! 1. calcul de w
124  ! 2. groupement des mailles pres du pole.
125
126    CALL groupe_loc( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
127
128!$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!$OMP ENDDO NOWAIT
133
134!$OMP BARRIER
135
136
137!$OMP MASTER
138  call VTb(VTHallo)
139!$OMP END MASTER
140
141  call Register_SwapField_u(pbarug,pbarug_adv, distrib_vanleer, &
142        Request_vanleer)
143  call Register_SwapField_v(pbarvg,pbarvg_adv, distrib_vanleer, &
144        Request_vanleer,up=1)
145  call Register_SwapField_u(massem,massem_adv, distrib_vanleer, &
146        Request_vanleer)
147  call Register_SwapField_u(wg,wg_adv,distrib_vanleer, &
148        Request_vanleer)
149  call Register_SwapField_u(teta,teta_adv, distrib_vanleer, &
150        Request_vanleer,up=1,down=1)
151  call Register_SwapField_u(p,p_adv, distrib_vanleer, &
152        Request_vanleer,up=1,down=1)
153  call Register_SwapField_u(pk,pk_adv, distrib_vanleer, &
154        Request_vanleer,up=1,down=1)
155  call Register_SwapField_u(q,q_adv, distrib_vanleer, &
156        Request_vanleer)
157
158  call SendRequest(Request_vanleer)
159!$OMP BARRIER
160  call WaitRequest(Request_vanleer)
161
162
163!$OMP BARRIER
164!$OMP MASTER
165  call Set_Distrib(distrib_vanleer)
166  call VTe(VTHallo)
167  call VTb(VTadvection)
168  call start_timer(timer_vanleer)
169!$OMP END MASTER
170!$OMP BARRIER
171   ! CALL WriteField_u('pbarug_adv',pbarug_adv)
172   ! CALL WriteField_u('',)
173
174  ! !write(*,*) 'caladvtrac 185'
175  CALL advtrac_loc( pbarug_adv,pbarvg_adv,wg_adv, &
176        p_adv,  massem_adv,q_adv, teta_adv, &
177        pk_adv)
178  ! !write(*,*) 'caladvtrac 189'
179
180
181!$OMP MASTER
182    call VTe(VTadvection)
183    call stop_timer(timer_vanleer)
184    call VTb(VThallo)
185!$OMP END MASTER
186
187    call Register_SwapField_u(q_adv,q,distrib_caldyn, &
188          Request_vanleer)
189
190    call SendRequest(Request_vanleer)
191!$OMP BARRIER
192    call WaitRequest(Request_vanleer)
193
194!$OMP BARRIER
195!$OMP MASTER
196    call Set_Distrib(distrib_caldyn)
197    call VTe(VThallo)
198    call resume_timer(timer_caldyn)
199!$OMP END MASTER
200!$OMP BARRIER
201      iadvtr=0
202   ENDIF ! if iadvtr.EQ.iapp_tracvl
203
204END SUBROUTINE caladvtrac_loc
205
206
Note: See TracBrowser for help on using the repository browser.