Changeset 2298 for LMDZ5/branches/testing/libf/dyn3dmem/vlspltgen_loc.F
- Timestamp:
- Jun 14, 2015, 9:13:32 PM (9 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 2238-2257,2259-2271,2273,2277-2282,2284-2288,2290-2291
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/dyn3dmem/vlspltgen_loc.F
r1910 r2298 27 27 USE Write_Field_loc 28 28 USE VAMPIR 29 USE infotrac, ONLY : nqtot 29 ! CRisi: on rajoute variables utiles d'infotrac 30 USE infotrac, ONLY : nqtot,nqperes,nqdesc,nqfils,iqfils, 31 & ok_iso_verif 30 32 USE vlspltgen_mod 31 33 IMPLICIT NONE … … 64 66 REAL ptarg,pdelarg,foeew,zdelta 65 67 REAL tempe(ijb_u:ije_u) 66 INTEGER ijb,ije,iq 68 INTEGER ijb,ije,iq,iq2,ifils 67 69 LOGICAL, SAVE :: firstcall=.TRUE. 68 70 !$OMP THREADPRIVATE(firstcall) … … 150 152 ije=ij_end 151 153 154 DO iq=1,nqtot 152 155 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 153 156 DO l=1,llm 154 157 DO ij=ijb,ije 155 mw(ij,l )=w(ij,l) * zzw158 mw(ij,l,iq)=w(ij,l) * zzw 156 159 ENDDO 157 160 ENDDO 158 161 c$OMP END DO NOWAIT 159 162 ENDDO 163 164 DO iq=1,nqtot 160 165 c$OMP MASTER 161 166 DO ij=ijb,ije 162 mw(ij,llm+1 )=0.167 mw(ij,llm+1,iq)=0. 163 168 ENDDO 164 169 c$OMP END MASTER 170 ENDDO 165 171 166 172 c CALL SCOPY(ijp1llm,q,1,zq,1) … … 170 176 ije=ij_end 171 177 172 DO iq=1,nqtot 178 DO iq=1,nqtot 173 179 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 174 180 DO l=1,llm … … 179 185 ENDDO 180 186 181 #ifdef DEBUG_IO 187 #ifdef DEBUG_IO 182 188 CALL WriteField_u('mu',mu) 183 189 CALL WriteField_v('mv',mv) … … 186 192 #endif 187 193 194 ! verif temporaire 195 ijb=ij_begin 196 ije=ij_end 197 if (ok_iso_verif) then 198 call check_isotopes(zq,ijb,ije,'vlspltgen_loc 191') 199 endif !if (ok_iso_verif) then 200 188 201 c$OMP BARRIER 189 DO iq=1,nqtot 190 202 ! DO iq=1,nqtot 203 DO iq=1,nqperes ! CRisi: on ne boucle que sur les pères= ceux qui sont transportés directement par l'air 204 !write(*,*) 'vlspltgen 192: iq,iadv=',iq,iadv(iq) 205 #ifdef DEBUG_IO 206 CALL WriteField_u('zq',zq(:,:,iq)) 207 CALL WriteField_u('zm',zm(:,:,iq)) 208 #endif 209 if(iadv(iq) == 0) then 210 211 cycle 212 213 else if (iadv(iq)==10) then 214 215 #ifdef _ADV_HALO 216 ! CRisi: on ajoute les nombres de fils et tableaux des fils 217 ! On suppose qu'on ne peut advecter les fils que par le schéma 10. 218 call vlx_loc(zq,pente_max,zm,mu, 219 & ij_begin,ij_begin+2*iip1-1,iq) 220 call vlx_loc(zq,pente_max,zm,mu, 221 & ij_end-2*iip1+1,ij_end,iq) 222 #else 223 call vlx_loc(zq,pente_max,zm,mu, 224 & ij_begin,ij_end,iq) 225 #endif 226 227 c$OMP MASTER 228 call VTb(VTHallo) 229 c$OMP END MASTER 230 call Register_Hallo_u(zq(:,:,iq),llm,2,2,2,2,MyRequest1) 231 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest1) 232 ! CRisi 233 do ifils=1,nqdesc(iq) 234 iq2=iqfils(ifils,iq) 235 call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest1) 236 call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest1) 237 enddo 238 239 c$OMP MASTER 240 call VTe(VTHallo) 241 c$OMP END MASTER 242 else if (iadv(iq)==14) then 243 244 #ifdef _ADV_HALO 245 call vlxqs_loc(zq,pente_max,zm,mu, 246 & qsat,ij_begin,ij_begin+2*iip1-1,iq) 247 call vlxqs_loc(zq,pente_max,zm,mu, 248 & qsat,ij_end-2*iip1+1,ij_end,iq) 249 #else 250 call vlxqs_loc(zq,pente_max,zm,mu, 251 & qsat,ij_begin,ij_end,iq) 252 #endif 253 254 c$OMP MASTER 255 call VTb(VTHallo) 256 c$OMP END MASTER 257 258 call Register_Hallo_u(zq(:,:,iq),llm,2,2,2,2,MyRequest1) 259 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest1) 260 do ifils=1,nqdesc(iq) 261 iq2=iqfils(ifils,iq) 262 call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest1) 263 call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest1) 264 enddo 265 266 c$OMP MASTER 267 call VTe(VTHallo) 268 c$OMP END MASTER 269 else 270 271 stop 'vlspltgen_p : schema non parallelise' 272 273 endif 274 275 enddo !DO iq=1,nqperes 276 277 278 c$OMP BARRIER 279 c$OMP MASTER 280 call VTb(VTHallo) 281 c$OMP END MASTER 282 283 call SendRequest(MyRequest1) 284 285 c$OMP MASTER 286 call VTe(VTHallo) 287 c$OMP END MASTER 288 c$OMP BARRIER 289 290 ! verif temporaire 291 ijb=ij_begin-2*iip1 292 ije=ij_end+2*iip1 293 if (pole_nord) ijb=ij_begin 294 if (pole_sud) ije=ij_end 295 if (ok_iso_verif) then 296 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 280') 297 endif !if (ok_iso_verif) then 298 299 do iq=1,nqperes 300 !write(*,*) 'vlspltgen 279: iq=',iq 301 302 if(iadv(iq) == 0) then 303 304 cycle 305 306 else if (iadv(iq)==10) then 307 308 #ifdef _ADV_HALLO 309 call vlx_loc(zq,pente_max,zm,mu, 310 & ij_begin+2*iip1,ij_end-2*iip1,iq) 311 #endif 312 else if (iadv(iq)==14) then 313 #ifdef _ADV_HALLO 314 call vlxqs_loc(zq,pente_max,zm,mu, 315 & qsat,ij_begin+2*iip1,ij_end-2*iip1,iq) 316 #endif 317 else 318 319 stop 'vlspltgen_p : schema non parallelise' 320 321 endif 322 323 enddo 324 c$OMP BARRIER 325 c$OMP MASTER 326 call VTb(VTHallo) 327 c$OMP END MASTER 328 329 ! call WaitRecvRequest(MyRequest1) 330 ! call WaitSendRequest(MyRequest1) 331 c$OMP BARRIER 332 call WaitRequest(MyRequest1) 333 334 335 c$OMP MASTER 336 call VTe(VTHallo) 337 c$OMP END MASTER 338 c$OMP BARRIER 339 340 341 if (ok_iso_verif) then 342 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 326') 343 endif !if (ok_iso_verif) then 344 if (ok_iso_verif) then 345 ijb=ij_begin-2*iip1 346 ije=ij_end+2*iip1 347 if (pole_nord) ijb=ij_begin 348 if (pole_sud) ije=ij_end 349 call check_isotopes(zq,ijb,ije,'vlspltgen_loc 336') 350 endif !if (ok_iso_verif) then 351 352 do iq=1,nqperes 353 !write(*,*) 'vlspltgen 321: iq=',iq 191 354 #ifdef DEBUG_IO 192 355 CALL WriteField_u('zq',zq(:,:,iq)) 193 356 CALL WriteField_u('zm',zm(:,:,iq)) 194 357 #endif 358 195 359 if(iadv(iq) == 0) then 196 360 … … 198 362 199 363 else if (iadv(iq)==10) then 200 201 #ifdef _ADV_HALO 202 call vlx_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 203 & ij_begin,ij_begin+2*iip1-1) 204 call vlx_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 205 & ij_end-2*iip1+1,ij_end) 206 #else 207 call vlx_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 208 & ij_begin,ij_end) 209 #endif 210 211 c$OMP MASTER 212 call VTb(VTHallo) 213 c$OMP END MASTER 214 call Register_Hallo_u(zq(:,:,iq),llm,2,2,2,2,MyRequest1) 215 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest1) 216 217 c$OMP MASTER 218 call VTe(VTHallo) 219 c$OMP END MASTER 364 365 call vly_loc(zq,pente_max,zm,mv,iq) 366 220 367 else if (iadv(iq)==14) then 221 222 #ifdef _ADV_HALO 223 call vlxqs_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 224 & qsat,ij_begin,ij_begin+2*iip1-1) 225 call vlxqs_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 226 & qsat,ij_end-2*iip1+1,ij_end) 227 #else 228 229 call vlxqs_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 230 & qsat,ij_begin,ij_end) 231 #endif 232 233 c$OMP MASTER 234 call VTb(VTHallo) 235 c$OMP END MASTER 236 237 call Register_Hallo_u(zq(:,:,iq),llm,2,2,2,2,MyRequest1) 238 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest1) 239 240 c$OMP MASTER 241 call VTe(VTHallo) 242 c$OMP END MASTER 368 369 call vlyqs_loc(zq,pente_max,zm,mv, 370 & qsat,iq) 371 243 372 else 244 373 … … 246 375 247 376 endif 248 249 enddo 250 251 252 c$OMP BARRIER 253 c$OMP MASTER 254 call VTb(VTHallo) 255 c$OMP END MASTER 256 257 call SendRequest(MyRequest1) 258 259 c$OMP MASTER 260 call VTe(VTHallo) 261 c$OMP END MASTER 262 c$OMP BARRIER 263 do iq=1,nqtot 264 265 if(iadv(iq) == 0) then 266 267 cycle 268 269 else if (iadv(iq)==10) then 270 271 #ifdef _ADV_HALLO 272 call vlx_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 273 & ij_begin+2*iip1,ij_end-2*iip1) 274 #endif 275 else if (iadv(iq)==14) then 276 #ifdef _ADV_HALLO 277 call vlxqs_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 278 & qsat,ij_begin+2*iip1,ij_end-2*iip1) 279 #endif 280 else 281 282 stop 'vlspltgen_p : schema non parallelise' 283 284 endif 285 286 enddo 287 c$OMP BARRIER 288 c$OMP MASTER 289 call VTb(VTHallo) 290 c$OMP END MASTER 291 292 ! call WaitRecvRequest(MyRequest1) 293 ! call WaitSendRequest(MyRequest1) 294 c$OMP BARRIER 295 call WaitRequest(MyRequest1) 296 297 298 c$OMP MASTER 299 call VTe(VTHallo) 300 c$OMP END MASTER 301 c$OMP BARRIER 302 303 304 do iq=1,nqtot 377 378 enddo 379 380 if (ok_iso_verif) then 381 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 357') 382 endif !if (ok_iso_verif) then 383 384 do iq=1,nqperes 385 !write(*,*) 'vlspltgen 349: iq=',iq 305 386 #ifdef DEBUG_IO 306 387 CALL WriteField_u('zq',zq(:,:,iq)) 307 388 CALL WriteField_u('zm',zm(:,:,iq)) 308 389 #endif 390 if(iadv(iq) == 0) then 391 392 cycle 393 394 else if (iadv(iq)==10 .or. iadv(iq)==14 ) then 395 396 c$OMP BARRIER 397 #ifdef _ADV_HALLO 398 call vlz_loc(zq,pente_max,zm,mw, 399 & ij_begin,ij_begin+2*iip1-1,iq) 400 call vlz_loc(zq,pente_max,zm,mw, 401 & ij_end-2*iip1+1,ij_end,iq) 402 #else 403 call vlz_loc(zq,pente_max,zm,mw, 404 & ij_begin,ij_end,iq) 405 #endif 406 c$OMP BARRIER 407 408 c$OMP MASTER 409 call VTb(VTHallo) 410 c$OMP END MASTER 411 412 call Register_Hallo_u(zq(:,:,iq),llm,2,2,2,2,MyRequest2) 413 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest2) 414 ! CRisi 415 do ifils=1,nqdesc(iq) 416 iq2=iqfils(ifils,iq) 417 call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest2) 418 call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest2) 419 enddo 420 c$OMP MASTER 421 call VTe(VTHallo) 422 c$OMP END MASTER 423 c$OMP BARRIER 424 else 425 426 stop 'vlspltgen_p : schema non parallelise' 427 428 endif 429 430 enddo 431 c$OMP BARRIER 432 433 c$OMP MASTER 434 call VTb(VTHallo) 435 c$OMP END MASTER 436 437 call SendRequest(MyRequest2) 438 439 c$OMP MASTER 440 call VTe(VTHallo) 441 c$OMP END MASTER 442 443 444 if (ok_iso_verif) then 445 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 429') 446 endif !if (ok_iso_verif) then 447 448 c$OMP BARRIER 449 do iq=1,nqperes 450 !write(*,*) 'vlspltgen 409: iq=',iq 451 309 452 if(iadv(iq) == 0) then 310 453 311 454 cycle 312 455 313 else if (iadv(iq)==10 ) then314 315 call vly_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mv) 316 317 else if (iadv(iq)==14) then 318 319 call vlyqs_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mv, 320 & qsat) 321 456 else if (iadv(iq)==10 .or. iadv(iq)==14 ) then 457 c$OMP BARRIER 458 459 #ifdef _ADV_HALLO 460 call vlz_loc(zq,pente_max,zm,mw, 461 & ij_begin+2*iip1,ij_end-2*iip1,iq) 462 #endif 463 464 c$OMP BARRIER 322 465 else 323 466 … … 325 468 326 469 endif 327 328 enddo 329 330 331 do iq=1,nqtot 470 471 enddo 472 !write(*,*) 'vlspltgen_loc 476' 473 474 c$OMP BARRIER 475 !write(*,*) 'vlspltgen_loc 477' 476 c$OMP MASTER 477 call VTb(VTHallo) 478 c$OMP END MASTER 479 480 ! call WaitRecvRequest(MyRequest2) 481 ! call WaitSendRequest(MyRequest2) 482 c$OMP BARRIER 483 CALL WaitRequest(MyRequest2) 484 485 c$OMP MASTER 486 call VTe(VTHallo) 487 c$OMP END MASTER 488 c$OMP BARRIER 489 490 491 !write(*,*) 'vlspltgen_loc 494' 492 if (ok_iso_verif) then 493 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 461') 494 endif !if (ok_iso_verif) then 495 496 do iq=1,nqperes 497 !write(*,*) 'vlspltgen 449: iq=',iq 332 498 #ifdef DEBUG_IO 333 499 CALL WriteField_u('zq',zq(:,:,iq)) 334 500 CALL WriteField_u('zm',zm(:,:,iq)) 335 501 #endif 502 if(iadv(iq) == 0) then 503 504 cycle 505 506 else if (iadv(iq)==10) then 507 508 call vly_loc(zq,pente_max,zm,mv,iq) 509 510 else if (iadv(iq)==14) then 511 512 call vlyqs_loc(zq,pente_max,zm,mv, 513 & qsat,iq) 514 515 else 516 517 stop 'vlspltgen_p : schema non parallelise' 518 519 endif 520 521 enddo !do iq=1,nqperes 522 523 if (ok_iso_verif) then 524 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 493') 525 endif !if (ok_iso_verif) then 526 527 do iq=1,nqperes 528 !write(*,*) 'vlspltgen 477: iq=',iq 529 #ifdef DEBUG_IO 530 CALL WriteField_u('zq',zq(:,:,iq)) 531 CALL WriteField_u('zm',zm(:,:,iq)) 532 #endif 336 533 if(iadv(iq) == 0) then 337 534 338 535 cycle 339 536 340 else if (iadv(iq)==10 .or. iadv(iq)==14 ) then341 342 c$OMP BARRIER343 #ifdef _ADV_HALLO344 call vlz_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mw,345 & ij_begin,ij_begin+2*iip1-1)346 call vlz_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mw,347 & ij_end-2*iip1+1,ij_end)348 #else349 call vlz_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mw,350 & ij_begin,ij_end)351 #endif352 c$OMP BARRIER353 354 c$OMP MASTER355 call VTb(VTHallo)356 c$OMP END MASTER357 358 call Register_Hallo_u(zq(:,:,iq),llm,2,2,2,2,MyRequest2)359 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest2)360 361 c$OMP MASTER362 call VTe(VTHallo)363 c$OMP END MASTER364 c$OMP BARRIER365 else366 367 stop 'vlspltgen_p : schema non parallelise'368 369 endif370 371 enddo372 c$OMP BARRIER373 374 c$OMP MASTER375 call VTb(VTHallo)376 c$OMP END MASTER377 378 call SendRequest(MyRequest2)379 380 c$OMP MASTER381 call VTe(VTHallo)382 c$OMP END MASTER383 384 c$OMP BARRIER385 do iq=1,nqtot386 387 if(iadv(iq) == 0) then388 389 cycle390 391 else if (iadv(iq)==10 .or. iadv(iq)==14 ) then392 c$OMP BARRIER393 394 #ifdef _ADV_HALLO395 call vlz_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mw,396 & ij_begin+2*iip1,ij_end-2*iip1)397 #endif398 399 c$OMP BARRIER400 else401 402 stop 'vlspltgen_p : schema non parallelise'403 404 endif405 406 enddo407 408 c$OMP BARRIER409 c$OMP MASTER410 call VTb(VTHallo)411 c$OMP END MASTER412 413 ! call WaitRecvRequest(MyRequest2)414 ! call WaitSendRequest(MyRequest2)415 c$OMP BARRIER416 CALL WaitRequest(MyRequest2)417 418 c$OMP MASTER419 call VTe(VTHallo)420 c$OMP END MASTER421 c$OMP BARRIER422 423 424 do iq=1,nqtot425 #ifdef DEBUG_IO426 CALL WriteField_u('zq',zq(:,:,iq))427 CALL WriteField_u('zm',zm(:,:,iq))428 #endif429 if(iadv(iq) == 0) then430 431 cycle432 433 537 else if (iadv(iq)==10) then 434 538 435 call vly_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mv) 539 call vlx_loc(zq,pente_max,zm,mu, 540 & ij_begin,ij_end,iq) 436 541 437 542 else if (iadv(iq)==14) then 438 543 439 call vl yqs_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mv,440 & qsat)544 call vlxqs_loc(zq,pente_max,zm,mu, 545 & qsat, ij_begin,ij_end,iq) 441 546 442 547 else 443 548 444 549 stop 'vlspltgen_p : schema non parallelise' 445 550 446 551 endif 447 552 448 enddo 449 450 451 do iq=1,nqtot 452 #ifdef DEBUG_IO 453 CALL WriteField_u('zq',zq(:,:,iq)) 454 CALL WriteField_u('zm',zm(:,:,iq)) 455 #endif 456 if(iadv(iq) == 0) then 457 458 cycle 459 460 else if (iadv(iq)==10) then 461 462 call vlx_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 463 & ij_begin,ij_end) 464 465 else if (iadv(iq)==14) then 466 467 call vlxqs_loc(zq(ijb_u,1,iq),pente_max,zm(ijb_u,1,iq),mu, 468 & qsat, ij_begin,ij_end) 469 470 else 471 472 stop 'vlspltgen_p : schema non parallelise' 473 474 endif 475 476 enddo 477 553 enddo !do iq=1,nqperes 554 555 !write(*,*) 'vlspltgen 550: apres derniere serie de call vlx' 556 if (ok_iso_verif) then 557 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 521') 558 endif !if (ok_iso_verif) then 478 559 479 560 ijb=ij_begin 480 561 ije=ij_end 562 !write(*,*) 'vlspltgen_loc 557' 481 563 c$OMP BARRIER 482 564 483 565 !write(*,*) 'vlspltgen_loc 559' 484 566 DO iq=1,nqtot 567 !write(*,*) 'vlspltgen_loc 561, iq=',iq 485 568 #ifdef DEBUG_IO 486 569 CALL WriteField_u('zq',zq(:,:,iq)) … … 495 578 ENDDO 496 579 ENDDO 497 c$OMP END DO NOWAIT 580 c$OMP END DO NOWAIT 581 !write(*,*) 'vlspltgen_loc 575' 498 582 499 583 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) … … 504 588 ENDDO 505 589 c$OMP END DO NOWAIT 506 507 ENDDO 590 !write(*,*) 'vlspltgen_loc 583' 591 ENDDO !DO iq=1,nqtot 508 592 509 593 if (ok_iso_verif) then 594 call check_isotopes(q,ij_begin,ij_end,'vlspltgen_loc 557') 595 endif !if (ok_iso_verif) then 596 510 597 c$OMP BARRIER 511 598 … … 516 603 cc$OMP BARRIER 517 604 605 !write(*,*) 'vlspltgen 597: sortie' 518 606 RETURN 519 607 END
Note: See TracChangeset
for help on using the changeset viewer.