From 631eab480888ea589a1b065cf667ca79ed363b98 Mon Sep 17 00:00:00 2001 From: ESCOBAR Juan <escj@nuwa> Date: Thu, 7 Nov 2013 15:59:53 +0100 Subject: [PATCH] Juan 7/11/2013: add usage of ZT3D & GET & REL of is section --- MNH/get_halo.f90 | 4 +- MNH/mode_mnh_zwork.f90 | 460 ++++++++++++++++++++++++----------------- 2 files changed, 272 insertions(+), 192 deletions(-) diff --git a/MNH/get_halo.f90 b/MNH/get_halo.f90 index 810c4cddd..52532129f 100644 --- a/MNH/get_halo.f90 +++ b/MNH/get_halo.f90 @@ -31,7 +31,7 @@ INTERFACE SUBROUTINE GET_HALO_D(PSRC,HDIR) ! REAL, DIMENSION(:,:,:) :: PSRC ! variable at t - !$acc reflected (PSRC) + !$acc declare present (PSRC) CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction ! END SUBROUTINE GET_HALO_D @@ -136,7 +136,7 @@ USE MODE_MNH_ZWORK, ONLY : GWEST , GEAST, GSOUTH , GNORTH IMPLICIT NONE ! REAL, DIMENSION(:,:,:) :: PSRC ! variable at t -!$acc reflected (PSRC) +!$acc declare present (PSRC) CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction ! TYPE(LIST_ll) , POINTER :: TZ_PSRC_ll ! halo diff --git a/MNH/mode_mnh_zwork.f90 b/MNH/mode_mnh_zwork.f90 index da5860e7b..cc2944349 100644 --- a/MNH/mode_mnh_zwork.f90 +++ b/MNH/mode_mnh_zwork.f90 @@ -1,204 +1,284 @@ MODULE MODE_MNH_ZWORK -INTEGER, SAVE :: IIB,IJB,IKB ! Begining useful area in x,y,z directions -INTEGER, SAVE :: IIE,IJE,IKE ! End useful area in x,y,z directions - -! -INTEGER,SAVE :: IJS,IJN, IIW,IIA -! -INTEGER, SAVE :: IIU,IJU,IKU -LOGICAL, SAVE :: GWEST , GEAST -LOGICAL, SAVE :: GSOUTH , GNORTH - -LOGICAL, SAVE :: GFIRST_CALL_MNH_ALLOC_ZWORK = .TRUE. -! -REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: & -& ZW3D1,ZW3D2,ZW3D3,ZW3D4,ZW3D5,ZW3D6,ZW3D7, & -& ZW3D8,ZW3D9,ZW3D10,ZW3D11,ZW3D12,ZW3D13,ZW3D14,ZW3D15, & -& ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25,ZW3D26,ZW3D27, & -& ZPPM, & -& ZRHOX1_PPM_MET,ZRHOX2_PPM_MET,ZRHOY1_PPM_MET, & -& ZRHOY2_PPM_MET,ZRHOZ1_PPM_MET,ZRHOZ2_PPM_MET, & -& ZSRC_PPM_MET -!$acc declare mirror(ZW3D1,ZW3D2,ZW3D3,ZW3D4,ZW3D5,ZW3D6,ZW3D7) & -!$acc & mirror(ZW3D8,ZW3D9,ZW3D10,ZW3D11,ZW3D12,ZW3D13,ZW3D14,ZW3D15) & -!$acc & mirror(ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25,ZW3D26,ZW3D27) & -!$acc & mirror(ZPPM) & -!$acc & mirror(ZRHOX1_PPM_MET,ZRHOX2_PPM_MET,ZRHOY1_PPM_MET) & -!$acc & mirror(ZRHOY2_PPM_MET,ZRHOZ1_PPM_MET,ZRHOZ2_PPM_MET) & -!$acc & mirror(ZSRC_PPM_MET) + IMPLICIT NONE + + INTEGER, SAVE :: IIB,IJB,IKB ! Begining useful area in x,y,z directions + INTEGER, SAVE :: IIE,IJE,IKE ! End useful area in x,y,z directions + + ! + INTEGER,SAVE :: IJS,IJN, IIW,IIA + ! + INTEGER, SAVE :: IIU,IJU,IKU + LOGICAL, SAVE :: GWEST , GEAST + LOGICAL, SAVE :: GSOUTH , GNORTH + + LOGICAL, SAVE :: GFIRST_CALL_MNH_ALLOC_ZWORK = .TRUE. + ! + REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: & + & ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25, & + & ZPPM, & + & ZRHOX1_PPM_MET,ZRHOX2_PPM_MET,ZRHOY1_PPM_MET, & + & ZRHOY2_PPM_MET,ZRHOZ1_PPM_MET,ZRHOZ2_PPM_MET, & + & ZSRC_PPM_MET + !$acc declare mirror (ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25) & + !$acc & mirror(ZPPM) & + !$acc & mirror(ZRHOX1_PPM_MET,ZRHOX2_PPM_MET,ZRHOY1_PPM_MET) & + !$acc & mirror(ZRHOY2_PPM_MET,ZRHOZ1_PPM_MET,ZRHOZ2_PPM_MET) & + !$acc & mirror(ZSRC_PPM_MET) - -REAL, SAVE, ALLOCATABLE , DIMENSION(:,:) :: ZPSRC_HALO2_WEST -REAL, SAVE, ALLOCATABLE , DIMENSION(:,:) :: ZPSRC_HALO2_SOUTH -!$acc declare mirror(ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH) -REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: ZUNIT3D -!$acc declare mirror(ZUNIT3D) + REAL, SAVE, ALLOCATABLE , DIMENSION(:,:) :: ZPSRC_HALO2_WEST + REAL, SAVE, ALLOCATABLE , DIMENSION(:,:) :: ZPSRC_HALO2_SOUTH + !$acc declare mirror(ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH) -REAL, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: & - ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG -!$acc declare mirror(ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) + REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: ZUNIT3D + !$acc declare mirror(ZUNIT3D) + +!!$ REAL, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: & +!!$ ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG +!!$ !$acc declare mirror(ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) + + REAL, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: & + ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT + !$acc declare mirror(ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT) + ! + + INTEGER :: JPMAX_T3D = 20 + 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, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: & - ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT -!$acc declare mirror(ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT) -! CONTAINS -SUBROUTINE MNH_ALLOC_ZWORK(IMODEL) + SUBROUTINE MNH_ALLOC_ZWORK(IMODEL) - USE MODE_TOOLS_ll, ONLY : LWEST_ll,LEAST_ll, LSOUTH_ll, LNORTH_ll + USE MODE_TOOLS_ll, ONLY : LWEST_ll,LEAST_ll, LSOUTH_ll, LNORTH_ll - USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF - USE MODD_DIM_n, ONLY : NKMAX + USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF + USE MODD_DIM_n, ONLY : NKMAX - IMPLICIT NONE - - INTEGER :: IMODEL - - IF (GFIRST_CALL_MNH_ALLOC_ZWORK) THEN - GFIRST_CALL_MNH_ALLOC_ZWORK = .FALSE. - - CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) - IJS=IJB - IJN=IJE - IIW=IIB - IIA=IIE - IKB = 1 + JPVEXT - IKE = NKMAX + JPVEXT - - CALL GET_DIM_EXT_ll('B',IIU,IJU) - IKU=NKMAX + 2* JPVEXT - - GWEST = LWEST_ll() - GEAST = LEAST_ll() - - GSOUTH=LSOUTH_ll() - GNORTH=LNORTH_ll() + + + IMPLICIT NONE + + INTEGER :: IMODEL + + INTEGER :: JI + + IF (GFIRST_CALL_MNH_ALLOC_ZWORK) THEN + GFIRST_CALL_MNH_ALLOC_ZWORK = .FALSE. + + ! + ! Array dim + ! + CALL GET_DIM_EXT_ll('B',IIU,IJU) + IKU=NKMAX + 2* JPVEXT + + ! + ! Computation bound + ! + CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) + IJS=IJB + IJN=IJE + IIW=IIB + IIA=IIE + IKB = 1 + JPVEXT + IKE = NKMAX + JPVEXT + + + ! + ! Lateral boundary + ! + GWEST = LWEST_ll() + GEAST = LEAST_ll() + + GSOUTH=LSOUTH_ll() + GNORTH=LNORTH_ll() + + ! + ! 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 (ZRHOX1_PPM_MET(IIU,IJU,IKU)) + ALLOCATE (ZRHOX2_PPM_MET(IIU,IJU,IKU)) + ALLOCATE (ZRHOY1_PPM_MET(IIU,IJU,IKU)) + ALLOCATE (ZRHOY2_PPM_MET(IIU,IJU,IKU)) + ALLOCATE (ZRHOZ1_PPM_MET(IIU,IJU,IKU)) + ALLOCATE (ZRHOZ2_PPM_MET(IIU,IJU,IKU)) + ALLOCATE (ZSRC_PPM_MET(IIU,IJU,IKU)) + + ALLOCATE (ZPSRC_HALO2_WEST(IJU,IKU)) + ALLOCATE (ZPSRC_HALO2_SOUTH(IIU,IKU)) + + ALLOCATE (ZUNIT3D(IIU,IJU,IKU)) + +!!$ ALLOCATE (ZQL(IIU,IJU,IKU),ZQR(IIU,IJU,IKU),ZDQ(IIU,IJU,IKU)) +!!$ ALLOCATE (ZQ6(IIU,IJU,IKU),ZDMQ(IIU,IJU,IKU),ZQL0(IIU,IJU,IKU)) +!!$ ALLOCATE (ZQR0(IIU,IJU,IKU),ZQ60(IIU,IJU,IKU),ZFPOS(IIU,IJU,IKU)) +!!$ ALLOCATE (ZFNEG(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(IIU,IJU,IKU,JPMAX_T3D)) + ALLOCATE (NT3D_POOL(JPMAX_T3D)) + NT3D_TOP = 0 + DO JI = 1, JPMAX_T3D + NT3D_POOL(JI) = JI + END DO + + !$acc kernels + + ZW3D20 = XUNDEF + ZW3D21 = XUNDEF + ZW3D22 = XUNDEF + ZW3D23 = XUNDEF + ZW3D24 = XUNDEF + ZW3D25 = XUNDEF - ALLOCATE (ZW3D1(IIU,IJU,IKU)) - ALLOCATE (ZW3D2(IIU,IJU,IKU)) - ALLOCATE (ZW3D3(IIU,IJU,IKU)) - ALLOCATE (ZW3D4(IIU,IJU,IKU)) - ALLOCATE (ZW3D5(IIU,IJU,IKU)) - ALLOCATE (ZW3D6(IIU,IJU,IKU)) - ALLOCATE (ZW3D7(IIU,IJU,IKU)) - ALLOCATE (ZW3D8(IIU,IJU,IKU)) - ALLOCATE (ZW3D9(IIU,IJU,IKU)) - ALLOCATE (ZW3D10(IIU,IJU,IKU)) - ALLOCATE (ZW3D11(IIU,IJU,IKU)) - ALLOCATE (ZW3D12(IIU,IJU,IKU)) - ALLOCATE (ZW3D13(IIU,IJU,IKU)) - ALLOCATE (ZW3D14(IIU,IJU,IKU)) - ALLOCATE (ZW3D15(IIU,IJU,IKU)) - - 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 (ZW3D26(IIU,IJU,IKU)) - ALLOCATE (ZW3D27(IIU,IJU,IKU)) - - ALLOCATE (ZPPM(IIU,IJU,IKU)) - ALLOCATE (ZRHOX1_PPM_MET(IIU,IJU,IKU)) - ALLOCATE (ZRHOX2_PPM_MET(IIU,IJU,IKU)) - ALLOCATE (ZRHOY1_PPM_MET(IIU,IJU,IKU)) - ALLOCATE (ZRHOY2_PPM_MET(IIU,IJU,IKU)) - ALLOCATE (ZRHOZ1_PPM_MET(IIU,IJU,IKU)) - ALLOCATE (ZRHOZ2_PPM_MET(IIU,IJU,IKU)) - ALLOCATE (ZSRC_PPM_MET(IIU,IJU,IKU)) - - ALLOCATE (ZPSRC_HALO2_WEST(IJU,IKU)) - ALLOCATE (ZPSRC_HALO2_SOUTH(IIU,IKU)) - - ALLOCATE (ZUNIT3D(IIU,IJU,IKU)) - - ALLOCATE (ZQL(IIU,IJU,IKU),ZQR(IIU,IJU,IKU),ZDQ(IIU,IJU,IKU)) - ALLOCATE (ZQ6(IIU,IJU,IKU),ZDMQ(IIU,IJU,IKU),ZQL0(IIU,IJU,IKU)) - ALLOCATE (ZQR0(IIU,IJU,IKU),ZQ60(IIU,IJU,IKU),ZFPOS(IIU,IJU,IKU)) - ALLOCATE (ZFNEG(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)) - -!$acc kernels - ZW3D1 = XUNDEF - ZW3D2 = XUNDEF - ZW3D3 = XUNDEF - ZW3D4 = XUNDEF - ZW3D5 = XUNDEF - ZW3D6 = XUNDEF - ZW3D7 = XUNDEF - ZW3D8 = XUNDEF - ZW3D9 = XUNDEF - ZW3D10 = XUNDEF - ZW3D11 = XUNDEF - ZW3D12 = XUNDEF - ZW3D13 = XUNDEF - ZW3D14 = XUNDEF - ZW3D15 = XUNDEF - - ZW3D20 = XUNDEF - ZW3D21 = XUNDEF - ZW3D22 = XUNDEF - ZW3D23 = XUNDEF - ZW3D24 = XUNDEF - ZW3D25 = XUNDEF - ZW3D26 = XUNDEF - ZW3D27 = XUNDEF - - ZPPM = XUNDEF - - ZPSRC_HALO2_WEST = XUNDEF - ZPSRC_HALO2_SOUTH = XUNDEF - - ZUNIT3D = 1.0 - - ZRHOX1_PPM_MET = XUNDEF - ZRHOX2_PPM_MET = XUNDEF - ZRHOY1_PPM_MET = XUNDEF - ZRHOY2_PPM_MET = XUNDEF - ZRHOZ1_PPM_MET = XUNDEF - ZRHOZ2_PPM_MET = XUNDEF - ZSRC_PPM_MET = XUNDEF - - ZQL = XUNDEF - ZQR = XUNDEF - ZDQ = XUNDEF - ZQ6 = XUNDEF - ZDMQ = XUNDEF - ZQL0 = XUNDEF - ZQR0 = XUNDEF - ZQ60 = XUNDEF - ZFPOS = XUNDEF - ZFNEG = XUNDEF - - ZRUT = XUNDEF - ZRVT = XUNDEF - ZRWT = XUNDEF - ZRUCT = XUNDEF - ZRVCT = XUNDEF - ZRWCT = XUNDEF - -!$acc end kernels -!$acc update host (ZW3D1,ZW3D2,ZW3D3,ZW3D4,ZW3D5,ZW3D6,ZW3D7) -!$acc update host (ZW3D8,ZW3D9,ZW3D10,ZW3D11,ZW3D12,ZW3D13,ZW3D14,ZW3D15) -!$acc update host (ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25,ZW3D26,ZW3D27) -!$acc update host (ZPPM) -!$acc update host (ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH) -!$acc update host (ZUNIT3D) -!$acc update host (ZRHOX1_PPM_MET,ZRHOX2_PPM_MET,ZRHOY1_PPM_MET) -!$acc update host (ZRHOY2_PPM_MET,ZRHOZ1_PPM_MET,ZRHOZ2_PPM_MET) -!$acc update host (ZSRC_PPM_MET) -!$acc update host (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) -!$acc update host (ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT) - - - END IF - -END SUBROUTINE MNH_ALLOC_ZWORK + ZPPM = XUNDEF + + ZPSRC_HALO2_WEST = XUNDEF + ZPSRC_HALO2_SOUTH = XUNDEF + + ZUNIT3D = 1.0 + + ZRHOX1_PPM_MET = XUNDEF + ZRHOX2_PPM_MET = XUNDEF + ZRHOY1_PPM_MET = XUNDEF + ZRHOY2_PPM_MET = XUNDEF + ZRHOZ1_PPM_MET = XUNDEF + ZRHOZ2_PPM_MET = XUNDEF + ZSRC_PPM_MET = XUNDEF + +!!$ ZQL = XUNDEF +!!$ ZQR = XUNDEF +!!$ ZDQ = XUNDEF +!!$ ZQ6 = XUNDEF +!!$ ZDMQ = XUNDEF +!!$ ZQL0 = XUNDEF +!!$ ZQR0 = XUNDEF +!!$ ZQ60 = XUNDEF +!!$ ZFPOS = XUNDEF +!!$ ZFNEG = XUNDEF + + ZRUT = XUNDEF + ZRVT = XUNDEF + ZRWT = XUNDEF + ZRUCT = XUNDEF + ZRVCT = XUNDEF + ZRWCT = XUNDEF + + ZT3D = 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 (ZRHOX1_PPM_MET,ZRHOX2_PPM_MET,ZRHOY1_PPM_MET) + !$acc update host (ZRHOY2_PPM_MET,ZRHOZ1_PPM_MET,ZRHOZ2_PPM_MET) + !$acc update host (ZSRC_PPM_MET) +!!$ !$acc update host (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) + !$acc update host (ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT) + + !$acc update host (ZT3D) + + + END IF + + END SUBROUTINE MNH_ALLOC_ZWORK + + SUBROUTINE MNH_GET_ZT3D_N0(KTEMP) + + IMPLICIT NONE + + INTEGER :: KTEMP + + IF (NT3D_TOP == JPMAX_T3D ) THEN + print*," MNH_GET_ZT3D JPMAX_T3D OVER FLOW=", JPMAX_T3D + call ABORT() + ELSE + NT3D_TOP = NT3D_TOP + 1 + KTEMP = NT3D_POOL(NT3D_TOP) + NT3D_POOL(NT3D_TOP) = -1 + IF ( NT3D_TOP > NT3D_TOP_MAX ) THEN + NT3D_TOP_MAX = NT3D_TOP + print*," MNH_GET_ZT3D NT3D_TOP_MAX=", NT3D_TOP_MAX , "KTEMP=",KTEMP + END IF + ENDIF + + + END SUBROUTINE MNH_GET_ZT3D_N0 + + SUBROUTINE MNH_GET_ZT3D(KTEMP1,KTEMP2,KTEMP3,KTEMP4,KTEMP5,KTEMP6,KTEMP7,KTEMP8,KTEMP9,KTEMP10) + + IMPLICIT NONE + + INTEGER :: KTEMP1 + INTEGER,OPTIONAL :: KTEMP2,KTEMP3,KTEMP4,KTEMP5,KTEMP6,KTEMP7,KTEMP8,KTEMP9,KTEMP10 + + CALL MNH_GET_ZT3D_N0(KTEMP1) + IF (PRESENT(KTEMP2)) CALL MNH_GET_ZT3D_N0(KTEMP2) + IF (PRESENT(KTEMP3)) CALL MNH_GET_ZT3D_N0(KTEMP3) + IF (PRESENT(KTEMP4)) CALL MNH_GET_ZT3D_N0(KTEMP4) + IF (PRESENT(KTEMP5)) CALL MNH_GET_ZT3D_N0(KTEMP5) + IF (PRESENT(KTEMP6)) CALL MNH_GET_ZT3D_N0(KTEMP6) + IF (PRESENT(KTEMP7)) CALL MNH_GET_ZT3D_N0(KTEMP7) + IF (PRESENT(KTEMP8)) CALL MNH_GET_ZT3D_N0(KTEMP8) + IF (PRESENT(KTEMP9)) CALL MNH_GET_ZT3D_N0(KTEMP9) + IF (PRESENT(KTEMP10)) CALL MNH_GET_ZT3D_N0(KTEMP10) + + + END SUBROUTINE MNH_GET_ZT3D + + SUBROUTINE MNH_REL_ZT3D_N0(KTEMP) + + IMPLICIT NONE + + INTEGER :: KTEMP + + IF ( ( NT3D_TOP > JPMAX_T3D ) .OR. ( NT3D_TOP < 1 ) ) THEN + print*," MNH_REL_ZT3D NT3D_TOP OVER FLOW NT3D_TOP=", NT3D_TOP + call ABORT() + ELSE + NT3D_POOL(NT3D_TOP) = KTEMP + !print*," MNH_REL_ZT3D NT3D_TOP=", NT3D_TOP , "KTEMP=",KTEMP + NT3D_TOP = NT3D_TOP - 1 + ENDIF + + END SUBROUTINE MNH_REL_ZT3D_N0 + + SUBROUTINE MNH_REL_ZT3D(KTEMP1,KTEMP2,KTEMP3,KTEMP4,KTEMP5,KTEMP6,KTEMP7,KTEMP8,KTEMP9,KTEMP10) + + IMPLICIT NONE + + INTEGER :: KTEMP1 + INTEGER,OPTIONAL :: KTEMP2,KTEMP3,KTEMP4,KTEMP5,KTEMP6,KTEMP7,KTEMP8,KTEMP9,KTEMP10 + + CALL MNH_REL_ZT3D_N0(KTEMP1) + IF (PRESENT(KTEMP2)) CALL MNH_REL_ZT3D_N0(KTEMP2) + IF (PRESENT(KTEMP3)) CALL MNH_REL_ZT3D_N0(KTEMP3) + IF (PRESENT(KTEMP4)) CALL MNH_REL_ZT3D_N0(KTEMP4) + IF (PRESENT(KTEMP5)) CALL MNH_REL_ZT3D_N0(KTEMP5) + IF (PRESENT(KTEMP6)) CALL MNH_REL_ZT3D_N0(KTEMP6) + IF (PRESENT(KTEMP7)) CALL MNH_REL_ZT3D_N0(KTEMP7) + IF (PRESENT(KTEMP8)) CALL MNH_REL_ZT3D_N0(KTEMP8) + IF (PRESENT(KTEMP9)) CALL MNH_REL_ZT3D_N0(KTEMP9) + IF (PRESENT(KTEMP10)) CALL MNH_REL_ZT3D_N0(KTEMP10) + + END SUBROUTINE MNH_REL_ZT3D + + END MODULE MODE_MNH_ZWORK -- GitLab