Changeset 963 for codes/icosagcm/trunk/src/base
- Timestamp:
- 07/25/19 11:36:36 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/base/field.f90
r953 r963 13 13 TYPE t_field 14 14 CHARACTER(30) :: name 15 REAL(rstd),POINTER :: rval2d(:) => null()16 REAL(rstd),POINTER :: rval3d(:,:) => null()17 REAL(rstd),POINTER :: rval4d(:,:,:) => null()15 REAL(rstd),POINTER, CONTIGUOUS :: rval2d(:) => null() 16 REAL(rstd),POINTER, CONTIGUOUS :: rval3d(:,:) => null() 17 REAL(rstd),POINTER, CONTIGUOUS :: rval4d(:,:,:) => null() 18 18 19 19 INTEGER,POINTER :: ival2d(:) … … 274 274 IF (field(ind)%ndim==4) THEN 275 275 IF (data_type==type_integer) THEN 276 IF (field(ind)%ondevice) THEN 277 !$acc exit data delete(field(ind)%ival4d(:,:,:)) 278 CONTINUE 279 END IF 276 280 DEALLOCATE(field(ind)%ival4d) 277 IF (field(ind)%ondevice) THEN278 !$acc exit data delete(field(ind)%ival4d)279 CONTINUE280 END IF281 281 END IF 282 282 283 283 IF (data_type==type_real) THEN 284 IF (field(ind)%ondevice) THEN 285 !$acc exit data delete(field(ind)%rval4d(:,:,:)) 286 CONTINUE 287 END IF 284 288 DEALLOCATE(field(ind)%rval4d) 285 IF (field(ind)%ondevice) THEN286 !$acc exit data delete(field(ind)%rval4d)287 CONTINUE288 END IF289 289 END IF 290 290 291 291 IF (data_type==type_logical) THEN 292 IF (field(ind)%ondevice) THEN 293 !$acc exit data delete(field(ind)%lval4d(:,:,:)) 294 CONTINUE 295 END IF 292 296 DEALLOCATE(field(ind)%lval4d) 293 IF (field(ind)%ondevice) THEN294 !$acc exit data delete(field(ind)%lval4d)295 CONTINUE296 END IF297 297 END IF 298 298 299 299 ELSE IF (field(ind)%ndim==3) THEN 300 300 IF (data_type==type_integer) THEN 301 IF (field(ind)%ondevice) THEN 302 !$acc exit data delete(field(ind)%ival3d(:,:)) 303 CONTINUE 304 END IF 301 305 DEALLOCATE(field(ind)%ival3d) 302 IF (field(ind)%ondevice) THEN303 !$acc exit data delete(field(ind)%ival3d)304 CONTINUE305 END IF306 306 END IF 307 307 308 308 IF (data_type==type_real) THEN 309 IF (field(ind)%ondevice) THEN 310 !$acc exit data delete(field(ind)%rval3d(:,:)) 311 CONTINUE 312 END IF 309 313 DEALLOCATE(field(ind)%rval3d) 310 IF (field(ind)%ondevice) THEN311 !$acc exit data delete(field(ind)%rval3d)312 CONTINUE313 END IF314 314 END IF 315 315 316 316 IF (data_type==type_logical) THEN 317 IF (field(ind)%ondevice) THEN 318 !$acc exit data delete(field(ind)%lval3d(:,:)) 319 CONTINUE 320 END IF 317 321 DEALLOCATE(field(ind)%lval3d) 318 IF (field(ind)%ondevice) THEN319 !$acc exit data delete(field(ind)%lval3d)320 CONTINUE321 END IF322 322 END IF 323 323 324 324 ELSE IF (field(ind)%ndim==2) THEN 325 325 IF (data_type==type_integer) THEN 326 IF (field(ind)%ondevice) THEN 327 !$acc exit data delete(field(ind)%ival2d(:)) 328 CONTINUE 329 END IF 326 330 DEALLOCATE(field(ind)%ival2d) 327 IF (field(ind)%ondevice) THEN328 !$acc exit data delete(field(ind)%ival2d)329 CONTINUE330 END IF331 331 END IF 332 332 333 333 IF (data_type==type_real) THEN 334 IF (field(ind)%ondevice) THEN 335 !$acc exit data delete(field(ind)%rval2d(:)) 336 CONTINUE 337 END IF 334 338 DEALLOCATE(field(ind)%rval2d) 335 IF (field(ind)%ondevice) THEN336 !$acc exit data delete(field(ind)%rval2d)337 CONTINUE338 END IF339 339 END IF 340 340 341 341 IF (data_type==type_logical) THEN 342 IF (field(ind)%ondevice) THEN 343 !$acc exit data delete(field(ind)%lval2d(:)) 344 CONTINUE 345 END IF 342 346 DEALLOCATE(field(ind)%lval2d) 343 IF (field(ind)%ondevice) THEN344 !$acc exit data delete(field(ind)%lval2d)345 CONTINUE346 END IF347 347 END IF 348 348 349 349 ENDIF 350 351 350 ENDDO 352 351 END SUBROUTINE deallocate_field_ … … 555 554 IF (field(ind)%ndim==4) THEN 556 555 IF (field(ind)%data_type==type_integer) THEN 557 !$acc update device(field(ind)%ival4d(:,:,:)) 556 !$acc update device(field(ind)%ival4d(:,:,:)) async 558 557 CONTINUE 559 558 END IF 560 559 561 560 IF (field(ind)%data_type==type_real) THEN 562 !$acc update device(field(ind)%rval4d(:,:,:)) 561 !$acc update device(field(ind)%rval4d(:,:,:)) async 563 562 CONTINUE 564 563 END IF 565 564 566 565 IF (field(ind)%data_type==type_logical) THEN 567 !$acc update device(field(ind)%lval4d(:,:,:)) 566 !$acc update device(field(ind)%lval4d(:,:,:)) async 568 567 CONTINUE 569 568 END IF … … 571 570 ELSE IF (field(ind)%ndim==3) THEN 572 571 IF (field(ind)%data_type==type_integer) THEN 573 !$acc update device(field(ind)%ival3d(:,:)) 572 !$acc update device(field(ind)%ival3d(:,:)) async 574 573 CONTINUE 575 574 END IF 576 575 577 576 IF (field(ind)%data_type==type_real) THEN 578 !$acc update device(field(ind)%rval3d(:,:)) 577 !$acc update device(field(ind)%rval3d(:,:)) async 579 578 CONTINUE 580 579 END IF 581 580 582 581 IF (field(ind)%data_type==type_logical) THEN 583 !$acc update device(field(ind)%lval3d(:,:)) 582 !$acc update device(field(ind)%lval3d(:,:)) async 584 583 CONTINUE 585 584 END IF … … 587 586 ELSE IF (field(ind)%ndim==2) THEN 588 587 IF (field(ind)%data_type==type_integer) THEN 589 !$acc update device(field(ind)%ival2d(:)) 588 !$acc update device(field(ind)%ival2d(:)) async 590 589 CONTINUE 591 590 END IF 592 591 593 592 IF (field(ind)%data_type==type_real) THEN 594 !$acc update device(field(ind)%rval2d(:)) 593 !$acc update device(field(ind)%rval2d(:)) async 595 594 CONTINUE 596 595 END IF 597 596 598 597 IF (field(ind)%data_type==type_logical) THEN 599 !$acc update device(field(ind)%lval2d(:)) 598 !$acc update device(field(ind)%lval2d(:)) async 600 599 CONTINUE 601 600 END IF … … 616 615 617 616 IF (field(ind)%ondevice) THEN 618 617 619 618 IF (field(ind)%ndim==4) THEN 620 619 IF (field(ind)%data_type==type_integer) THEN 621 !$acc update host(field(ind)%ival4d(:,:,:)) wait620 !$acc update host(field(ind)%ival4d(:,:,:)) async 622 621 CONTINUE 623 622 END IF 624 623 625 624 IF (field(ind)%data_type==type_real) THEN 626 !$acc update host(field(ind)%rval4d(:,:,:)) wait625 !$acc update host(field(ind)%rval4d(:,:,:)) async 627 626 CONTINUE 628 627 END IF 629 628 630 629 IF (field(ind)%data_type==type_logical) THEN 631 !$acc update host(field(ind)%lval4d(:,:,:)) wait632 CONTINUE 633 END IF 634 630 !$acc update host(field(ind)%lval4d(:,:,:)) async 631 CONTINUE 632 END IF 633 635 634 ELSE IF (field(ind)%ndim==3) THEN 636 635 IF (field(ind)%data_type==type_integer) THEN 637 !$acc update host(field(ind)%ival3d(:,:)) wait636 !$acc update host(field(ind)%ival3d(:,:)) async 638 637 CONTINUE 639 638 END IF 640 639 641 640 IF (field(ind)%data_type==type_real) THEN 642 !$acc update host(field(ind)%rval3d(:,:)) wait641 !$acc update host(field(ind)%rval3d(:,:)) async 643 642 CONTINUE 644 643 END IF 645 644 646 645 IF (field(ind)%data_type==type_logical) THEN 647 !$acc update host(field(ind)%lval3d(:,:)) wait646 !$acc update host(field(ind)%lval3d(:,:)) async 648 647 CONTINUE 649 648 END IF … … 651 650 ELSE IF (field(ind)%ndim==2) THEN 652 651 IF (field(ind)%data_type==type_integer) THEN 653 !$acc update host(field(ind)%ival2d(:)) wait652 !$acc update host(field(ind)%ival2d(:)) async 654 653 CONTINUE 655 654 END IF 656 655 657 656 IF (field(ind)%data_type==type_real) THEN 658 !$acc update host(field(ind)%rval2d(:)) wait657 !$acc update host(field(ind)%rval2d(:)) async 659 658 CONTINUE 660 659 END IF 661 660 662 661 IF (field(ind)%data_type==type_logical) THEN 663 !$acc update host(field(ind)%lval2d(:)) wait662 !$acc update host(field(ind)%lval2d(:)) async 664 663 CONTINUE 665 664 END IF … … 667 666 END IF 668 667 ENDDO 668 !$acc wait 669 669 !$OMP BARRIER 670 670 END SUBROUTINE update_host_field … … 679 679 IF (field%ndim==4) THEN 680 680 IF (field%data_type==type_integer) THEN 681 !$acc enter data create(field%ival4d(:,:,:)) 681 !$acc enter data create(field%ival4d(:,:,:)) async 682 682 END IF 683 683 684 684 IF (field%data_type==type_real) THEN 685 !$acc enter data create(field%rval4d(:,:,:)) 685 !$acc enter data create(field%rval4d(:,:,:)) async 686 686 END IF 687 687 688 688 IF (field%data_type==type_logical) THEN 689 !$acc enter data create(field%lval4d(:,:,:)) 689 !$acc enter data create(field%lval4d(:,:,:)) async 690 690 END IF 691 691 692 692 ELSE IF (field%ndim==3) THEN 693 693 IF (field%data_type==type_integer) THEN 694 !$acc enter data create(field%ival3d(:,:)) 694 !$acc enter data create(field%ival3d(:,:)) async 695 695 END IF 696 696 697 697 IF (field%data_type==type_real) THEN 698 !$acc enter data create(field%rval3d(:,:)) 698 !$acc enter data create(field%rval3d(:,:)) async 699 699 END IF 700 700 701 701 IF (field%data_type==type_logical) THEN 702 !$acc enter data create(field%lval3d(:,:)) 702 !$acc enter data create(field%lval3d(:,:)) async 703 703 END IF 704 704 705 705 ELSE IF (field%ndim==2) THEN 706 706 IF (field%data_type==type_integer) THEN 707 !$acc enter data create(field%ival2d(:)) 707 !$acc enter data create(field%ival2d(:)) async 708 708 END IF 709 709 710 710 IF (field%data_type==type_real) THEN 711 !$acc enter data create(field%rval2d(:)) 711 !$acc enter data create(field%rval2d(:)) async 712 712 END IF 713 713 714 714 IF (field%data_type==type_logical) THEN 715 !$acc enter data create(field%lval2d(:)) 715 !$acc enter data create(field%lval2d(:)) async 716 716 END IF 717 717 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.