Ignore:
Timestamp:
07/25/19 11:36:36 (5 years ago)
Author:
adurocher
Message:

Merge 'mpi_rewrite' into trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/base/field.f90

    r953 r963  
    1313  TYPE t_field 
    1414    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() 
    1818 
    1919    INTEGER,POINTER :: ival2d(:) 
     
    274274       IF (field(ind)%ndim==4) THEN 
    275275          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 
    276280             DEALLOCATE(field(ind)%ival4d) 
    277              IF (field(ind)%ondevice) THEN 
    278                 !$acc exit data delete(field(ind)%ival4d) 
    279                 CONTINUE 
    280              END IF 
    281281          END IF 
    282282 
    283283          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 
    284288             DEALLOCATE(field(ind)%rval4d) 
    285              IF (field(ind)%ondevice) THEN 
    286                 !$acc exit data delete(field(ind)%rval4d) 
    287                 CONTINUE 
    288              END IF 
    289289          END IF 
    290290 
    291291          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 
    292296             DEALLOCATE(field(ind)%lval4d) 
    293              IF (field(ind)%ondevice) THEN 
    294                 !$acc exit data delete(field(ind)%lval4d) 
    295                 CONTINUE 
    296              END IF 
    297297          END IF 
    298298 
    299299       ELSE IF (field(ind)%ndim==3) THEN 
    300300          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 
    301305             DEALLOCATE(field(ind)%ival3d) 
    302              IF (field(ind)%ondevice) THEN 
    303                 !$acc exit data delete(field(ind)%ival3d) 
    304                 CONTINUE 
    305              END IF 
    306306          END IF 
    307307 
    308308          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 
    309313             DEALLOCATE(field(ind)%rval3d) 
    310              IF (field(ind)%ondevice) THEN 
    311                 !$acc exit data delete(field(ind)%rval3d) 
    312                 CONTINUE 
    313              END IF 
    314314          END IF 
    315315 
    316316          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 
    317321             DEALLOCATE(field(ind)%lval3d) 
    318              IF (field(ind)%ondevice) THEN 
    319                 !$acc exit data delete(field(ind)%lval3d) 
    320                 CONTINUE 
    321              END IF 
    322322          END IF 
    323323 
    324324       ELSE IF (field(ind)%ndim==2) THEN 
    325325          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 
    326330             DEALLOCATE(field(ind)%ival2d) 
    327              IF (field(ind)%ondevice) THEN 
    328                 !$acc exit data delete(field(ind)%ival2d) 
    329                 CONTINUE 
    330              END IF 
    331331          END IF 
    332332 
    333333          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 
    334338             DEALLOCATE(field(ind)%rval2d) 
    335              IF (field(ind)%ondevice) THEN 
    336                 !$acc exit data delete(field(ind)%rval2d) 
    337                 CONTINUE 
    338              END IF 
    339339          END IF 
    340340 
    341341          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 
    342346             DEALLOCATE(field(ind)%lval2d) 
    343              IF (field(ind)%ondevice) THEN 
    344                 !$acc exit data delete(field(ind)%lval2d) 
    345                 CONTINUE 
    346              END IF 
    347347          END IF 
    348348 
    349349       ENDIF 
    350  
    351350    ENDDO 
    352351  END SUBROUTINE deallocate_field_ 
     
    555554      IF (field(ind)%ndim==4) THEN 
    556555         IF (field(ind)%data_type==type_integer) THEN 
    557             !$acc update device(field(ind)%ival4d(:,:,:)) 
     556            !$acc update device(field(ind)%ival4d(:,:,:)) async 
    558557            CONTINUE 
    559558         END IF 
    560559 
    561560         IF (field(ind)%data_type==type_real) THEN 
    562             !$acc update device(field(ind)%rval4d(:,:,:)) 
     561            !$acc update device(field(ind)%rval4d(:,:,:)) async 
    563562            CONTINUE 
    564563         END IF 
    565564 
    566565         IF (field(ind)%data_type==type_logical) THEN 
    567             !$acc update device(field(ind)%lval4d(:,:,:)) 
     566            !$acc update device(field(ind)%lval4d(:,:,:)) async 
    568567            CONTINUE 
    569568         END IF 
     
    571570      ELSE IF (field(ind)%ndim==3) THEN 
    572571         IF (field(ind)%data_type==type_integer) THEN 
    573             !$acc update device(field(ind)%ival3d(:,:)) 
     572            !$acc update device(field(ind)%ival3d(:,:)) async 
    574573            CONTINUE 
    575574         END IF 
    576575 
    577576         IF (field(ind)%data_type==type_real) THEN 
    578             !$acc update device(field(ind)%rval3d(:,:)) 
     577            !$acc update device(field(ind)%rval3d(:,:)) async 
    579578            CONTINUE 
    580579         END IF 
    581580 
    582581         IF (field(ind)%data_type==type_logical) THEN 
    583             !$acc update device(field(ind)%lval3d(:,:)) 
     582            !$acc update device(field(ind)%lval3d(:,:)) async 
    584583            CONTINUE 
    585584         END IF 
     
    587586      ELSE IF (field(ind)%ndim==2) THEN 
    588587         IF (field(ind)%data_type==type_integer) THEN 
    589             !$acc update device(field(ind)%ival2d(:)) 
     588            !$acc update device(field(ind)%ival2d(:)) async 
    590589            CONTINUE 
    591590         END IF 
    592591 
    593592         IF (field(ind)%data_type==type_real) THEN 
    594             !$acc update device(field(ind)%rval2d(:)) 
     593            !$acc update device(field(ind)%rval2d(:)) async 
    595594            CONTINUE 
    596595         END IF 
    597596 
    598597         IF (field(ind)%data_type==type_logical) THEN 
    599             !$acc update device(field(ind)%lval2d(:)) 
     598            !$acc update device(field(ind)%lval2d(:)) async 
    600599            CONTINUE 
    601600         END IF 
     
    616615 
    617616      IF (field(ind)%ondevice) THEN 
    618          
     617 
    619618         IF (field(ind)%ndim==4) THEN 
    620619            IF (field(ind)%data_type==type_integer) THEN 
    621                !$acc update host(field(ind)%ival4d(:,:,:)) wait 
     620               !$acc update host(field(ind)%ival4d(:,:,:)) async 
    622621               CONTINUE 
    623622            END IF 
    624623 
    625624            IF (field(ind)%data_type==type_real) THEN 
    626                !$acc update host(field(ind)%rval4d(:,:,:)) wait 
     625               !$acc update host(field(ind)%rval4d(:,:,:)) async 
    627626               CONTINUE 
    628627            END IF 
    629628 
    630629            IF (field(ind)%data_type==type_logical) THEN 
    631                !$acc update host(field(ind)%lval4d(:,:,:)) wait 
    632                CONTINUE 
    633             END IF 
    634           
     630               !$acc update host(field(ind)%lval4d(:,:,:)) async 
     631               CONTINUE 
     632            END IF 
     633 
    635634         ELSE IF (field(ind)%ndim==3) THEN 
    636635            IF (field(ind)%data_type==type_integer) THEN 
    637                !$acc update host(field(ind)%ival3d(:,:)) wait 
     636               !$acc update host(field(ind)%ival3d(:,:)) async 
    638637               CONTINUE 
    639638            END IF 
    640639 
    641640            IF (field(ind)%data_type==type_real) THEN 
    642                !$acc update host(field(ind)%rval3d(:,:)) wait 
     641               !$acc update host(field(ind)%rval3d(:,:)) async 
    643642               CONTINUE 
    644643            END IF 
    645644 
    646645            IF (field(ind)%data_type==type_logical) THEN 
    647                !$acc update host(field(ind)%lval3d(:,:)) wait 
     646               !$acc update host(field(ind)%lval3d(:,:)) async 
    648647               CONTINUE 
    649648            END IF 
     
    651650         ELSE IF (field(ind)%ndim==2) THEN 
    652651            IF (field(ind)%data_type==type_integer) THEN 
    653                !$acc update host(field(ind)%ival2d(:)) wait 
     652               !$acc update host(field(ind)%ival2d(:)) async 
    654653               CONTINUE 
    655654            END IF 
    656655 
    657656            IF (field(ind)%data_type==type_real) THEN 
    658                !$acc update host(field(ind)%rval2d(:)) wait 
     657               !$acc update host(field(ind)%rval2d(:)) async 
    659658               CONTINUE 
    660659            END IF 
    661660 
    662661            IF (field(ind)%data_type==type_logical) THEN 
    663                !$acc update host(field(ind)%lval2d(:)) wait 
     662               !$acc update host(field(ind)%lval2d(:)) async 
    664663               CONTINUE 
    665664            END IF 
     
    667666      END IF 
    668667   ENDDO 
     668   !$acc wait 
    669669   !$OMP BARRIER 
    670670 END SUBROUTINE update_host_field 
     
    679679    IF (field%ndim==4) THEN 
    680680       IF (field%data_type==type_integer) THEN 
    681           !$acc enter data create(field%ival4d(:,:,:)) 
     681          !$acc enter data create(field%ival4d(:,:,:)) async 
    682682       END IF 
    683683 
    684684       IF (field%data_type==type_real) THEN 
    685           !$acc enter data create(field%rval4d(:,:,:)) 
     685          !$acc enter data create(field%rval4d(:,:,:)) async 
    686686       END IF 
    687687 
    688688       IF (field%data_type==type_logical) THEN 
    689           !$acc enter data create(field%lval4d(:,:,:)) 
     689          !$acc enter data create(field%lval4d(:,:,:)) async 
    690690       END IF 
    691691 
    692692    ELSE IF (field%ndim==3) THEN 
    693693       IF (field%data_type==type_integer) THEN 
    694           !$acc enter data create(field%ival3d(:,:)) 
     694          !$acc enter data create(field%ival3d(:,:)) async 
    695695       END IF 
    696696 
    697697       IF (field%data_type==type_real) THEN 
    698           !$acc enter data create(field%rval3d(:,:)) 
     698          !$acc enter data create(field%rval3d(:,:)) async 
    699699       END IF 
    700700 
    701701       IF (field%data_type==type_logical) THEN 
    702           !$acc enter data create(field%lval3d(:,:)) 
     702          !$acc enter data create(field%lval3d(:,:)) async 
    703703       END IF 
    704704 
    705705    ELSE IF (field%ndim==2) THEN 
    706706       IF (field%data_type==type_integer) THEN 
    707           !$acc enter data create(field%ival2d(:)) 
     707          !$acc enter data create(field%ival2d(:)) async 
    708708       END IF 
    709709 
    710710       IF (field%data_type==type_real) THEN 
    711           !$acc enter data create(field%rval2d(:)) 
     711          !$acc enter data create(field%rval2d(:)) async 
    712712       END IF 
    713713 
    714714       IF (field%data_type==type_logical) THEN 
    715           !$acc enter data create(field%lval2d(:)) 
     715          !$acc enter data create(field%lval2d(:)) async 
    716716       END IF 
    717717    ENDIF 
Note: See TracChangeset for help on using the changeset viewer.