Changeset 709 for LMDZ4/branches/V3_test/libf/dyn3dpar/advtrac_p.F
- Timestamp:
- Sep 20, 2006, 12:12:39 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/V3_test/libf/dyn3dpar/advtrac_p.F
r630 r709 4 4 c 5 5 c 6 #ifdef INCA _CH46 #ifdef INCA 7 7 SUBROUTINE advtrac_p(pbaru,pbarv , 8 8 * p, masse,q,iapptrac,teta, … … 25 25 c 26 26 USE parallel 27 USE Write_Field_p 27 28 USE Bands 28 29 USE mod_hallo … … 56 57 REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm) 57 58 REAL pk(ip1jmp1,llm) 58 #ifdef INCA _CH459 #ifdef INCA 59 60 cym INTEGER :: hadv_flg(nq) 60 61 INTEGER :: hadv_flg(nqmx) … … 70 71 REAL pbaruc(ip1jmp1,llm),pbarvc(ip1jm,llm) 71 72 REAL massem(ip1jmp1,llm),zdp(ip1jmp1) 72 REAL 73 REAL,SAVE::pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm) 73 74 REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu 74 75 real cpuadv(nqmx) … … 78 79 INTEGER ij,l,iq,iiq 79 80 REAL zdpmin, zdpmax 80 EXTERNAL minmax81 81 SAVE iadvtr, massem, pbaruc, pbarvc 82 82 DATA iadvtr/0/ 83 c$OMP THREADPRIVATE(iadvtr) 83 84 c---------------------------------------------------------- 84 85 c Rajouts pour PPM … … 98 99 integer ijb,ije,ijb_u,ijb_v,ije_u,ije_v,j 99 100 type(Request) :: Request_vanleer 100 REAL p_tmp( ip1jmp1,llmp1 )101 REAL teta_tmp(ip1jmp1,llm)102 REAL pk_tmp(ip1jmp1,llm)101 REAL,SAVE :: p_tmp( ip1jmp1,llmp1 ) 102 REAL,SAVE :: teta_tmp(ip1jmp1,llm) 103 REAL,SAVE :: pk_tmp(ip1jmp1,llm) 103 104 104 105 ijb_u=ij_begin … … 113 114 c CALL initial0(ijp1llm,pbaruc) 114 115 c CALL initial0(ijmllm,pbarvc) 115 116 pbaruc(ijb_u:ije_u,:)=0. 117 pbarvc(ijb_v:ije_v,:)=0. 118 116 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 117 DO l=1,llm 118 pbaruc(ijb_u:ije_u,l)=0. 119 pbarvc(ijb_v:ije_v,l)=0. 120 ENDDO 121 c$OMP END DO NOWAIT 119 122 ENDIF 120 123 121 124 c accumulation des flux de masse horizontaux 125 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 122 126 DO l=1,llm 123 127 DO ij = ijb_u,ije_u … … 128 132 ENDDO 129 133 ENDDO 134 c$OMP END DO NOWAIT 130 135 131 136 c selection de la masse instantannee des mailles avant le transport. … … 136 141 ije=ij_end 137 142 138 massem(ijb:ije,:)=masse(ijb:ije,:) 143 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 144 DO l=1,llm 145 massem(ijb:ije,l)=masse(ijb:ije,l) 146 ENDDO 147 c$OMP END DO NOWAIT 148 139 149 ccc CALL filtreg ( massem ,jjp1, llm,-2, 2, .TRUE., 1 ) 140 150 c … … 142 152 143 153 iadvtr = iadvtr+1 154 155 c$OMP MASTER 144 156 iapptrac = iadvtr 145 157 c$OMP END MASTER 146 158 147 159 c Test pour savoir si on advecte a ce pas de temps 148 160 149 161 IF ( iadvtr.EQ.iapp_tracvl ) THEN 162 c$OMP MASTER 150 163 call suspend_timer(timer_caldyn) 164 c$OMP END MASTER 151 165 152 166 ijb=ij_begin 153 167 ije=ij_end 154 168 169 170 cc .. Modif P.Le Van ( 20/12/97 ) .... 171 cc 172 173 c traitement des flux de masse avant advection. 174 c 1. calcul de w 175 c 2. groupement des mailles pres du pole. 176 177 c$OMP BARRIER 178 CALL groupe_p( massem, pbaruc,pbarvc, pbarug,pbarvg,wg ) 179 c$OMP BARRIER 180 181 c$OMP BARRIER 182 c$OMP MASTER 155 183 p_tmp(ijb:ije,1:llmp1)=p(ijb:ije,1:llmp1) 156 184 pk_tmp(ijb:ije,1:llm)=pk(ijb:ije,1:llm) 157 185 teta_tmp(ijb:ije,1:llm)=teta(ijb:ije,1:llm) 158 159 160 cc .. Modif P.Le Van ( 20/12/97 ) ....161 cc162 163 c traitement des flux de masse avant advection.164 c 1. calcul de w165 c 2. groupement des mailles pres du pole.166 167 CALL groupe_p( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )168 169 186 call VTb(VTHallo) 170 187 call Register_SwapFieldHallo(pbarug,pbarug,ip1jmp1,llm, … … 195 212 call VTb(VTadvection) 196 213 call start_timer(timer_vanleer) 197 198 199 #ifdef INCA_CH4 214 c$OMP END MASTER 215 c$OMP BARRIER 216 217 #ifdef INCA 200 218 ! ... Flux de masse diaganostiques traceurs 201 219 c flxw = wg / FLOAT(iapp_tracvl) … … 211 229 if (pole_sud) ije=ij_end-iip1 212 230 213 231 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 214 232 DO l=1,llm-1 215 233 DO ij = ijb+1,ije … … 241 259 242 260 ENDDO 261 c$OMP END DO NOWAIT 243 262 244 263 c------------------------------------------------------------------- … … 253 272 cym ----> Revérifier lors de la parallélisation des autres schemas 254 273 255 call massbar_p(massem,massebx,masseby) 256 274 cym call massbar_p(massem,massebx,masseby) 275 276 call vlspltgen_p( q,iadv, 2., massem, wg , 277 * pbarug,pbarvg,dtvr,p_tmp,pk_tmp,teta_tmp ) 278 279 280 GOTO 1234 257 281 c----------------------------------------------------------- 258 282 c Appel des sous programmes d'advection … … 309 333 310 334 call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0) 311 #ifdef INCA _CH4335 #ifdef INCA 312 336 do iiq = iq+1, iq+3 313 337 q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1) … … 328 352 call prather(q(1,1,iq),wg,massem,pbarug,pbarvg, 329 353 s n,dtbon) 330 #ifdef INCA _CH4354 #ifdef INCA 331 355 do iiq = iq+1, iq+9 332 356 q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1) … … 441 465 end DO 442 466 467 1234 CONTINUE 468 c$OMP BARRIER 469 c$OMP MASTER 443 470 ijb=ij_begin 444 471 ije=ij_end … … 450 477 ENDDO 451 478 479 452 480 CALL qminimum_p( q, 2, finmasse ) 453 481 … … 455 483 c on reinitialise a zero les flux de masse cumules 456 484 c--------------------------------------------------- 457 iadvtr=0485 c iadvtr=0 458 486 call VTe(VTadvection) 459 487 call stop_timer(timer_vanleer) … … 465 493 enddo 466 494 467 #ifdef INCA _CH4495 #ifdef INCA 468 496 call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm, 469 497 * jj_nb_caldyn,0,0,Request_vanleer) … … 475 503 call VTe(VThallo) 476 504 call resume_timer(timer_caldyn) 477 505 c$OMP END MASTER 506 c$OMP BARRIER 507 iadvtr=0 478 508 ENDIF ! if iadvtr.EQ.iapp_tracvl 479 509
Note: See TracChangeset
for help on using the changeset viewer.