diff --git a/MNH/mode_mnh_zwork.f90 b/MNH/mode_mnh_zwork.f90 index 4cbc8cd339680f6eb1386bb7316ff8fa471b4335..f72687df5c16384c21a92e581c11c3749fcfc5cc 100644 --- a/MNH/mode_mnh_zwork.f90 +++ b/MNH/mode_mnh_zwork.f90 @@ -14,11 +14,9 @@ MODULE MODE_MNH_ZWORK LOGICAL, SAVE :: GFIRST_CALL_MNH_ALLOC_ZWORK = .TRUE. ! - REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: & - & ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25, & - & ZPPM - !$acc declare mirror (ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25) & - !$acc & mirror(ZPPM) + + REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: ZPPM + !$acc declare mirror(ZPPM) REAL, SAVE, ALLOCATABLE , DIMENSION(:,:) :: ZPSRC_HALO2_WEST REAL, SAVE, ALLOCATABLE , DIMENSION(:,:) :: ZPSRC_HALO2_SOUTH @@ -26,17 +24,21 @@ MODULE MODE_MNH_ZWORK REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: ZUNIT3D !$acc declare mirror(ZUNIT3D) - - REAL, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: & - ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT - !$acc declare mirror(ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT) ! - - INTEGER :: JPMAX_T3D = 20 + INTEGER :: JPMAX_T3D = 25 INTEGER , ALLOCATABLE, DIMENSION (:) :: NT3D_POOL INTEGER :: NT3D_TOP , NT3D_TOP_MAX = 0 - REAL , ALLOCATABLE, DIMENSION(:,:,:,:) :: ZT3D , ZT3D_REALLOC - !$acc declare mirror(ZT3D,ZT3D_REALLOC) + REAL , ALLOCATABLE, DIMENSION(:,:,:,:) , TARGET :: ZT3D_A1,ZT3D_A2,ZT3D_A3,ZT3D_A4 + REAL , POINTER , DIMENSION(:,:,:,:) :: ZT3D + !$acc declare mirror(ZT3D_A1,ZT3D_A2,ZT3D_A3,ZT3D_A4) + + TYPE TMODEL + REAL , POINTER, DIMENSION(:,:,:,:) :: X + END TYPE TMODEL + + TYPE(TMODEL) , DIMENSION(10) :: MODEL + + !acc declare mirror(MODEL) CONTAINS @@ -82,14 +84,6 @@ CONTAINS ! ! Work array ! - - ALLOCATE (ZW3D20(IIU,IJU,IKU)) - ALLOCATE (ZW3D21(IIU,IJU,IKU)) - ALLOCATE (ZW3D22(IIU,IJU,IKU)) - ALLOCATE (ZW3D23(IIU,IJU,IKU)) - ALLOCATE (ZW3D24(IIU,IJU,IKU)) - ALLOCATE (ZW3D25(IIU,IJU,IKU)) - ALLOCATE (ZPPM(IIU,IJU,IKU)) ALLOCATE (ZPSRC_HALO2_WEST(IJU,IKU)) @@ -97,10 +91,10 @@ CONTAINS ALLOCATE (ZUNIT3D(IIU,IJU,IKU)) - ALLOCATE (ZRUT(IIU,IJU,IKU),ZRVT(IIU,IJU,IKU),ZRWT(IIU,IJU,IKU)) - ALLOCATE (ZRUCT(IIU,IJU,IKU),ZRVCT(IIU,IJU,IKU),ZRWCT(IIU,IJU,IKU)) + ALLOCATE (ZT3D_A1(IIU,IJU,IKU,JPMAX_T3D)) + MODEL(1)%X => ZT3D_A1 + ZT3D => MODEL(1)%X - ALLOCATE (ZT3D(IIU,IJU,IKU,JPMAX_T3D)) ALLOCATE (NT3D_POOL(JPMAX_T3D)) NT3D_TOP = 0 DO JI = 1, JPMAX_T3D @@ -108,42 +102,27 @@ CONTAINS END DO !$acc kernels - - ZW3D20 = XUNDEF - ZW3D21 = XUNDEF - ZW3D22 = XUNDEF - ZW3D23 = XUNDEF - ZW3D24 = XUNDEF - ZW3D25 = XUNDEF ZPPM = XUNDEF ZPSRC_HALO2_WEST = XUNDEF ZPSRC_HALO2_SOUTH = XUNDEF - ZUNIT3D = 1.0 - - ZRUT = XUNDEF - ZRVT = XUNDEF - ZRWT = XUNDEF - ZRUCT = XUNDEF - ZRVCT = XUNDEF - ZRWCT = XUNDEF + ZUNIT3D = 1.0 - ZT3D = XUNDEF + ZT3D_A1 = XUNDEF !$acc end kernels - !$acc update host (ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25) !$acc update host (ZPPM) !$acc update host (ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH) !$acc update host (ZUNIT3D) - !$acc update host (ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT) - !$acc update host (ZT3D) + + END IF END SUBROUTINE MNH_ALLOC_ZWORK