diff --git a/src/trans/gpu/internal/ltinvad_mod.F90 b/src/trans/gpu/internal/ltinvad_mod.F90 index 301e5524..55bb9049 100755 --- a/src/trans/gpu/internal/ltinvad_mod.F90 +++ b/src/trans/gpu/internal/ltinvad_mod.F90 @@ -10,21 +10,21 @@ ! nor does it submit to any jurisdiction. ! -MODULE LTINV_MOD +MODULE LTINVAD_MOD USE BUFFERED_ALLOCATOR_MOD, ONLY: ALLOCATION_RESERVATION_HANDLE IMPLICIT NONE PRIVATE - PUBLIC :: LTINV, LTINV_HANDLE, PREPARE_LTINV + PUBLIC :: LTINVAD, LTINVAD_HANDLE, PREPARE_LTINVAD - TYPE LTINV_HANDLE + TYPE LTINVAD_HANDLE TYPE(ALLOCATION_RESERVATION_HANDLE) :: HPIA_AND_IN - TYPE(ALLOCATION_RESERVATION_HANDLE) :: HOUTS_AND_OUTA + ! TYPE(ALLOCATION_RESERVATION_HANDLE) :: HOUTS_AND_OUTA END TYPE CONTAINS - FUNCTION PREPARE_LTINV(ALLOCATOR,KF_UV,KF_SCALARS,LVORGP,LDIVGP,LSCDERS) RESULT(HLTINV) + FUNCTION PREPARE_LTINVAD(ALLOCATOR,KF_UV,KF_SCALARS,LVORGP,LDIVGP,LSCDERS) RESULT(HLTINV) USE PARKIND_ECTRANS, ONLY: JPIM, JPRBT, JPRD, JPIB USE TPM_DISTR, ONLY: D USE TPM_DIM, ONLY: R @@ -38,7 +38,7 @@ FUNCTION PREPARE_LTINV(ALLOCATOR,KF_UV,KF_SCALARS,LVORGP,LDIVGP,LSCDERS) RESULT( INTEGER(KIND=JPIM), INTENT(IN) :: KF_UV,KF_SCALARS LOGICAL, INTENT(IN) :: LVORGP,LDIVGP,LSCDERS - TYPE(LTINV_HANDLE) :: HLTINV + TYPE(LTINVAD_HANDLE) :: HLTINVAD INTEGER(KIND=JPIB) :: IALLOC_SZ, IPIA_SZ INTEGER(KIND=JPIM) :: IOUT_STRIDES0 @@ -83,23 +83,23 @@ FUNCTION PREPARE_LTINV(ALLOCATOR,KF_UV,KF_SCALARS,LVORGP,LDIVGP,LSCDERS) RESULT( ! ZINP0 IALLOC_SZ = IALLOC_SZ + ALIGN(IIN0_SIZE*C_SIZEOF(ZPRD_DUMMY),128) - HLTINV%HPIA_AND_IN = RESERVE(ALLOCATOR, IALLOC_SZ, "HLTINV_HPIA_AND_IN") + HLTINVAD%HPIA_AND_IN = RESERVE(ALLOCATOR, IALLOC_SZ, "HLTINVAD_HPIA_AND_IN") - IALLOC_SZ = 0 - ! ZOUTA - IALLOC_SZ = IALLOC_SZ + ALIGN(IOUT_SIZE*C_SIZEOF(ZPRBT_DUMMY),128) - ! ZOUTS - IALLOC_SZ = IALLOC_SZ + ALIGN(IOUT_SIZE*C_SIZEOF(ZPRBT_DUMMY),128) - ! ZOUTA0 - IALLOC_SZ = IALLOC_SZ + ALIGN(IOUT0_SIZE*C_SIZEOF(ZPRD_DUMMY),128) - ! ZOUTS0 - IALLOC_SZ = IALLOC_SZ + ALIGN(IOUT0_SIZE*C_SIZEOF(ZPRD_DUMMY),128) + ! IALLOC_SZ = 0 + ! ! ZOUTA + ! IALLOC_SZ = IALLOC_SZ + ALIGN(IOUT_SIZE*C_SIZEOF(ZPRBT_DUMMY),128) + ! ! ZOUTS + ! IALLOC_SZ = IALLOC_SZ + ALIGN(IOUT_SIZE*C_SIZEOF(ZPRBT_DUMMY),128) + ! ! ZOUTA0 + ! IALLOC_SZ = IALLOC_SZ + ALIGN(IOUT0_SIZE*C_SIZEOF(ZPRD_DUMMY),128) + ! ! ZOUTS0 + ! IALLOC_SZ = IALLOC_SZ + ALIGN(IOUT0_SIZE*C_SIZEOF(ZPRD_DUMMY),128) - HLTINV%HOUTS_AND_OUTA = RESERVE(ALLOCATOR, IALLOC_SZ, "HLTINV_HOUTS_AND_OUTA") + ! HLTINVAD%HOUTS_AND_OUTA = RESERVE(ALLOCATOR, IALLOC_SZ, "HLTINVAD_HOUTS_AND_OUTA") - END FUNCTION PREPARE_LTINV + END FUNCTION PREPARE_LTINVAD - SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& + SUBROUTINE LTINVAD(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& & PSPVOR,PSPDIV,PSPSCALAR,PSPSC3A,PSPSC3B,PSPSC2, & & ZOUTS,ZOUTA,ZOUTS0,ZOUTA0) @@ -110,10 +110,11 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& USE TPM_GEOMETRY, ONLY: G USE BUFFERED_ALLOCATOR_MOD, ONLY: BUFFERED_ALLOCATOR, ASSIGN_PTR, GET_ALLOCATION USE TPM_DISTR, ONLY: D - USE PRFI1B_MOD, ONLY: PRFI1B - USE VDTUV_MOD, ONLY: VDTUV - USE SPNSDE_MOD, ONLY: SPNSDE - USE LEINV_MOD, ONLY: LEINV_STRIDES, LEINV + USE PRFI1BAD_MOD, ONLY: PRFI1BAD + USE VDTUVAD_MOD, ONLY: VDTUVAD + USE SPNSDEAD_MOD, ONLY: SPNSDEAD + USE LEINV_MOD, ONLY: LEINV_STRIDES + USE LEINVAD_MOD, ONLY: LEINVAD USE ABORT_TRANS_MOD, ONLY: ABORT_TRANS USE TPM_FIELDS_GPU, ONLY: FG USE MPL_MODULE, ONLY: MPL_BARRIER,MPL_ALL_MS_COMM @@ -121,16 +122,16 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& USE TPM_STATS, ONLY: GSTATS => GSTATS_NVTX USE ISO_C_BINDING, ONLY: C_SIZE_T, C_LOC, C_SIZEOF - !**** *LTINV* - Inverse Legendre transform + !**** *LTINVAD* - adjoint of inverse Legendre transform ! ! Purpose. ! -------- - ! Tranform from Laplace space to Fourier space, compute U and V - ! and north/south derivatives of state variables. + ! Adjoint of the "tranform from Laplace space to Fourier space, compute U and V + ! and north/south derivatives of state variables". !** Interface. ! ---------- - ! *CALL* *LTINV(...) + ! *CALL* *LTINVAD(...) ! Explicit arguments : ! -------------------- @@ -175,14 +176,14 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& INTEGER(KIND=JPIM), INTENT(IN) :: KF_UV INTEGER(KIND=JPIM), INTENT(IN) :: KF_SCALARS - REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PSPVOR(:,:) - REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PSPDIV(:,:) - REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PSPSCALAR(:,:) - REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PSPSC2(:,:) - REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PSPSC3A(:,:,:) - REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PSPSC3B(:,:,:) - REAL(KIND=JPRBT), POINTER, INTENT(OUT) :: ZOUTS(:), ZOUTA(:) - REAL(KIND=JPRD), POINTER, INTENT(OUT) :: ZOUTS0(:), ZOUTA0(:) + REAL(KIND=JPRB) ,OPTIONAL,INTENT(INOUT) :: PSPVOR(:,:) + REAL(KIND=JPRB) ,OPTIONAL,INTENT(INOUT) :: PSPDIV(:,:) + REAL(KIND=JPRB) ,OPTIONAL,INTENT(INOUT) :: PSPSCALAR(:,:) + REAL(KIND=JPRB) ,OPTIONAL,INTENT(INOUT) :: PSPSC2(:,:) + REAL(KIND=JPRB) ,OPTIONAL,INTENT(INOUT) :: PSPSC3A(:,:,:) + REAL(KIND=JPRB) ,OPTIONAL,INTENT(INOUT) :: PSPSC3B(:,:,:) + REAL(KIND=JPRBT) , INTENT(IN) :: ZOUTS(:), ZOUTA(:) + REAL(KIND=JPRD) , INTENT(IN) :: ZOUTS0(:), ZOUTA0(:) INTEGER(KIND=JPIM) :: IFIRST, J3 @@ -192,7 +193,7 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& REAL(KIND=JPHOOK) :: ZHOOK_HANDLE TYPE(BUFFERED_ALLOCATOR), INTENT(IN) :: ALLOCATOR - TYPE(LTINV_HANDLE), INTENT(IN) :: HLTINV + TYPE(LTINVAD_HANDLE), INTENT(IN) :: HLTINV INTEGER(KIND=JPIM) :: IOUT_STRIDES0 INTEGER(KIND=JPIB) :: IOUT_SIZE @@ -214,7 +215,7 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& !* 1. PERFORM LEGENDRE TRANFORM. ! -------------------------- - IF (LHOOK) CALL DR_HOOK('LTINV_MOD',0,ZHOOK_HANDLE) + IF (LHOOK) CALL DR_HOOK('LTINVAD_MOD',0,ZHOOK_HANDLE) ! Get all pointers IF_READIN = 0 @@ -256,31 +257,31 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& & IALLOC_POS, IALLOC_SZ) IALLOC_POS = IALLOC_POS + IALLOC_SZ - IALLOC_POS = 1 + ! IALLOC_POS = 1 - ! ZOUTA - IALLOC_SZ = ALIGN(IOUT_SIZE*C_SIZEOF(ZOUTA(1)),128) - CALL ASSIGN_PTR(ZOUTA, GET_ALLOCATION(ALLOCATOR, HLTINV%HOUTS_AND_OUTA),& - & IALLOC_POS, IALLOC_SZ) - IALLOC_POS = IALLOC_POS + IALLOC_SZ + ! ! ZOUTA + ! IALLOC_SZ = ALIGN(IOUT_SIZE*C_SIZEOF(ZOUTA(1)),128) + ! CALL ASSIGN_PTR(ZOUTA, GET_ALLOCATION(ALLOCATOR, HLTINV%HOUTS_AND_OUTA),& + ! & IALLOC_POS, IALLOC_SZ) + ! IALLOC_POS = IALLOC_POS + IALLOC_SZ - ! ZOUTS - IALLOC_SZ = ALIGN(IOUT_SIZE*C_SIZEOF(ZOUTS(1)),128) - CALL ASSIGN_PTR(ZOUTS, GET_ALLOCATION(ALLOCATOR, HLTINV%HOUTS_AND_OUTA),& - & IALLOC_POS, IALLOC_SZ) - IALLOC_POS = IALLOC_POS + IALLOC_SZ + ! ! ZOUTS + ! IALLOC_SZ = ALIGN(IOUT_SIZE*C_SIZEOF(ZOUTS(1)),128) + ! CALL ASSIGN_PTR(ZOUTS, GET_ALLOCATION(ALLOCATOR, HLTINV%HOUTS_AND_OUTA),& + ! & IALLOC_POS, IALLOC_SZ) + ! IALLOC_POS = IALLOC_POS + IALLOC_SZ - ! ZOUTA0 - IALLOC_SZ = ALIGN(IOUT0_SIZE*C_SIZEOF(ZOUTA0(1)),128) - CALL ASSIGN_PTR(ZOUTA0, GET_ALLOCATION(ALLOCATOR, HLTINV%HOUTS_AND_OUTA),& - & IALLOC_POS, IALLOC_SZ) - IALLOC_POS = IALLOC_POS + IALLOC_SZ + ! ! ZOUTA0 + ! IALLOC_SZ = ALIGN(IOUT0_SIZE*C_SIZEOF(ZOUTA0(1)),128) + ! CALL ASSIGN_PTR(ZOUTA0, GET_ALLOCATION(ALLOCATOR, HLTINV%HOUTS_AND_OUTA),& + ! & IALLOC_POS, IALLOC_SZ) + ! IALLOC_POS = IALLOC_POS + IALLOC_SZ - ! ZOUTS0 - IALLOC_SZ = ALIGN(IOUT0_SIZE*C_SIZEOF(ZOUTS0(1)),128) - CALL ASSIGN_PTR(ZOUTS0, GET_ALLOCATION(ALLOCATOR, HLTINV%HOUTS_AND_OUTA),& - & IALLOC_POS, IALLOC_SZ) - IALLOC_POS = IALLOC_POS + IALLOC_SZ + ! ! ZOUTS0 + ! IALLOC_SZ = ALIGN(IOUT0_SIZE*C_SIZEOF(ZOUTS0(1)),128) + ! CALL ASSIGN_PTR(ZOUTS0, GET_ALLOCATION(ALLOCATOR, HLTINV%HOUTS_AND_OUTA),& + ! & IALLOC_POS, IALLOC_SZ) + ! IALLOC_POS = IALLOC_POS + IALLOC_SZ ! Assign pointers do the different components of PIA IFIRST = 0 @@ -345,31 +346,31 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& CALL GSTATS(422,1) IF (KF_UV > 0) THEN - CALL PRFI1B(PVOR,PSPVOR,KF_UV,UBOUND(PSPVOR,2)) - CALL PRFI1B(PDIV,PSPDIV,KF_UV,UBOUND(PSPDIV,2)) + CALL PRFI1BAD(PVOR,PSPVOR,KF_UV,UBOUND(PSPVOR,2)) + CALL PRFI1BAD(PDIV,PSPDIV,KF_UV,UBOUND(PSPDIV,2)) ! Compute U and V for VOR and DIV - CALL VDTUV(KF_UV,ZEPSNM,PVOR,PDIV,PU,PV) + CALL VDTUVAD(KF_UV,ZEPSNM,PVOR,PDIV,PU,PV) ENDIF IF (KF_SCALARS > 0) THEN IF(PRESENT(PSPSCALAR)) THEN - CALL PRFI1B(PSCALARS,PSPSCALAR,KF_SCALARS,UBOUND(PSPSCALAR,2)) + CALL PRFI1BAD(PSCALARS,PSPSCALAR,KF_SCALARS,UBOUND(PSPSCALAR,2)) ELSE IFIRST = 1 IF(PRESENT(PSPSC2) .AND. NF_SC2 > 0) THEN - CALL PRFI1B(PSCALARS(IFIRST:IFIRST+2*NF_SC2-1,:,:),PSPSC2(:,:),NF_SC2,UBOUND(PSPSC2,2)) + CALL PRFI1BAD(PSCALARS(IFIRST:IFIRST+2*NF_SC2-1,:,:),PSPSC2(:,:),NF_SC2,UBOUND(PSPSC2,2)) IFIRST = IFIRST+2*NF_SC2 ENDIF IF(PRESENT(PSPSC3A) .AND. NF_SC3A > 0) THEN DO J3=1,UBOUND(PSPSC3A,3) - CALL PRFI1B(PSCALARS(IFIRST:IFIRST+2*NF_SC3A-1,:,:),PSPSC3A(:,:,J3),NF_SC3A,UBOUND(PSPSC3A,2)) + CALL PRFI1BAD(PSCALARS(IFIRST:IFIRST+2*NF_SC3A-1,:,:),PSPSC3A(:,:,J3),NF_SC3A,UBOUND(PSPSC3A,2)) IFIRST = IFIRST+2*NF_SC3A ENDDO ENDIF IF(PRESENT(PSPSC3B) .AND. NF_SC3B > 0) THEN DO J3=1,UBOUND(PSPSC3B,3) - CALL PRFI1B(PSCALARS(IFIRST:IFIRST+2*NF_SC3B-1,:,:),PSPSC3B(:,:,J3),NF_SC3B,UBOUND(PSPSC3B,2)) + CALL PRFI1BAD(PSCALARS(IFIRST:IFIRST+2*NF_SC3B-1,:,:),PSPSC3B(:,:,J3),NF_SC3B,UBOUND(PSPSC3B,2)) IFIRST = IFIRST+2*NF_SC3B ENDDO ENDIF @@ -382,7 +383,7 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& ! Compute NS derivatives if needed IF (LSCDERS) THEN - CALL SPNSDE(KF_SCALARS,ZEPSNM,PSCALARS,PSCALARS_NSDER) + CALL SPNSDEAD(KF_SCALARS,ZEPSNM,PSCALARS,PSCALARS_NSDER) ENDIF #ifdef OMPGPU @@ -404,16 +405,16 @@ SUBROUTINE LTINV(ALLOCATOR,HLTINV,KF_UV,KF_SCALARS,& ! ------------------------------------------------------------------ - !* 4. INVERSE LEGENDRE TRANSFORM. + !* 4. Adjoint of INVERSE LEGENDRE TRANSFORM. ! --------------------------- ! Legendre transforms. When converting PIA into ZOUT, we ignore the first entries of LEINV. ! This is because vorticity and divergence is not necessarily converted to GP space. - CALL LEINV(ALLOCATOR,PIA(2*(IF_READIN-IF_LEG)+1:IF_READIN,:,:),ZINP,ZINP0,ZOUTS,ZOUTA,ZOUTS0,ZOUTA0,IF_LEG) + CALL LEINVAD(ALLOCATOR,PIA(2*(IF_READIN-IF_LEG)+1:IF_READIN,:,:),ZINP,ZINP0,ZOUTS,ZOUTA,ZOUTS0,ZOUTA0,IF_LEG) - IF (LHOOK) CALL DR_HOOK('LTINV_MOD',1,ZHOOK_HANDLE) + IF (LHOOK) CALL DR_HOOK('LTINVAD_MOD',1,ZHOOK_HANDLE) END ASSOCIATE ! ------------------------------------------------------------------ - END SUBROUTINE LTINV -END MODULE LTINV_MOD + END SUBROUTINE LTINVAD +END MODULE LTINVAD_MOD