From 1605f53c726da153bcfb0f1a6182f091dd32c78b Mon Sep 17 00:00:00 2001 From: ESCOBAR Juan <escj@nuwa.aerologie.net> Date: Sat, 23 Mar 2013 23:15:31 +0100 Subject: [PATCH] Juan 23/03/2012: add management of mirror array on ppm_sO_x & ppm_s0_y --- MNH/ppm.f90 | 176 +++++++++++++++++++++------------------------------- 1 file changed, 71 insertions(+), 105 deletions(-) diff --git a/MNH/ppm.f90 b/MNH/ppm.f90 index 60b687959..6a722c428 100644 --- a/MNH/ppm.f90 +++ b/MNH/ppm.f90 @@ -178,33 +178,6 @@ END MODULE MODI_PPM ! ! !------------------------------------------------------------------------------- -MODULE MODD_PPM_01 -INTEGER, SAVE :: IIB,IJB ! Begining useful area in x,y,z directions -INTEGER, SAVE :: IIE,IJE ! End useful area in x,y,z directions -! -! terms used in parabolic interpolation, dmq, qL, qR, dq, q6 -REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: & - ZQL,ZQR, ZDQ,ZQ6, ZDMQ & -! -! extra variables for the initial guess of parabolae parameters - , ZQL0,ZQR0,ZQ60 & -! -! advection fluxes - , ZFPOS, ZFNEG -#define ACC_MIRROR -#ifdef ACC_MIRROR -!$acc declare mirror (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) -#endif -! -!BEG JUAN PPM_LL -INTEGER,SAVE :: IJS,IJN -!END JUAN PPM_LL -!JUAN ACC -INTEGER, SAVE :: IIU,IJU,IKU -LOGICAL, SAVE :: GWEST , GEAST -LOGICAL, SAVE :: GFIRST_CALL_PPM_01_X = .TRUE. -END MODULE MODD_PPM_01 -!------------------------------------------------------------------------------- ! ######################################################################## !!$ FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) & !!$ RESULT(PR) @@ -233,7 +206,14 @@ USE MODD_LUNIT !END JUAN PPM_LL USE MODE_MPPDB USE MODD_PARAMETERS, ONLY : JPHEXT -USE MODD_PPM_01 +! +USE MODE_MNH_ZWORK, ONLY : & +& IIB,IIE, IIU,IJU,IKU , IJS,IJN, & +& GWEST,GEAST, & +& ZQL=>ZW3D1,ZQR=>ZW3D2,ZDQ=>ZW3D3,ZQ6=>ZW3D4,ZDMQ=>ZW3D5 , & +& ZQL0=>ZW3D6,ZQR0=>ZW3D7,ZQ60=>ZW3D8 , & +& ZFPOS=>ZW3D9,ZFNEG=>ZW3D10 + ! IMPLICIT NONE ! @@ -257,6 +237,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR INTEGER :: ILUOUT,IRESP ! for prints INTEGER :: I,J,K ! +! !!$INTEGER, SAVE :: IIB,IJB ! Begining useful area in x,y,z directions !!$INTEGER, SAVE :: IIE,IJE ! End useful area in x,y,z directions !!$! @@ -291,33 +272,6 @@ DQ(IIE+1,:,:)=0.5*(PQ(IIB+1,:,:)-PQ(IIE,:,:)) ! DIF2X(DQ,PQ) !* 0.3. COMPUTES THE DOMAIN DIMENSIONS ! ------------------------------ ! - -IF (GFIRST_CALL_PPM_01_X) THEN -GFIRST_CALL_PPM_01_X = .FALSE. - -CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) -IJS=IJB -IJN=IJE - -IIU=size(psrc,1) -IJU=size(psrc,2) -IKU=size(psrc,3) - -GWEST = LWEST_ll() -GEAST = LEAST_ll() - -ALLOCATE (ZQL(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZQR(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZDQ(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZQ6(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZDMQ(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZQL0(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZQR0(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZQ60(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZFPOS(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) -ALLOCATE (ZFNEG(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3))) - -END IF ! !BEG JUAN PPM_LL ! @@ -337,9 +291,6 @@ CALL GET_HALO_D(PSRC,HDIR="01_X") ! #define JUAN_ACC_01_X #ifdef JUAN_ACC_01_X -#ifndef ACC_MIRROR -!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) -#endif !$acc region #endif DO K=1,IKU ; DO J = 1,IJU ; DO I=1,IIU @@ -662,9 +613,6 @@ CALL GET_HALO_D(ZFNEG,HDIR="01_X") #ifdef JUAN_ACC_01_X !$acc end region -#ifndef ACC_MIRROR -!$acc end data region -#endif #endif CALL GET_HALO_D(PR,HDIR="01_X") @@ -1556,6 +1504,13 @@ USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll USE MODD_PARAMETERS, ONLY : JPHEXT USE MODE_MPPDB ! +USE MODE_MNH_ZWORK, ONLY : & +& IIB,IIE, IJB,IJE, IIU,IJU,IKU , IJS,IJN, & +& GWEST,GEAST, & +& ZPHAT=>ZW3D1,ZPHAT=>ZW3D2,ZFPOS=>ZW3D3,ZFNEG=>ZW3D4, & +& ZRHO_MXM=>ZW3D5,ZCR_MXM=>ZW3D6,ZCR_DXF=>ZW3D7, & +& ZPSRC_HALO2_WEST +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -1575,26 +1530,26 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR ! !* 0.2 Declarations of local variables : ! -INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions -INTEGER:: IIE,IJE ! End useful area in x,y,z directions +!!$INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions +!!$INTEGER:: IIE,IJE ! End useful area in x,y,z directions ! ! advection fluxes -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG +!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG ! ! variable at cell edges -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT +!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT ! !BEG JUAN PPM_LL TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC INTEGER :: ILUOUT,IRESP ! for prints -INTEGER :: IJS,IJN +!!$INTEGER :: IJS,IJN !END JUAN PPM_LL !JUAN ACC -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZRHO_MXM , ZCR_MXM , ZCR_DXF -INTEGER :: I,J,K ,IIU,IJU,IKU -LOGICAL :: GWEST , GEAST +!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZRHO_MXM , ZCR_MXM , ZCR_DXF +INTEGER :: I,J,K +!!$LOGICAL :: GWEST , GEAST ! -REAL, DIMENSION(SIZE(PCR,2),SIZE(PCR,3)) :: ZPSRC_HALO2_WEST +!!$REAL, DIMENSION(SIZE(PCR,2),SIZE(PCR,3)) :: ZPSRC_HALO2_WEST ! ! inline shuman with macro #define dxf(PDXF,PA) PDXF(1:IIU-1,:,:) = PA(2:IIU,:,:) - PA(1:IIU-1,:,:) ; PDXF(IIU,:,:) = PDXF(2*JPHEXT,:,:) ! DXF(PDXF,PA) @@ -1605,16 +1560,16 @@ REAL, DIMENSION(SIZE(PCR,2),SIZE(PCR,3)) :: ZPSRC_HALO2_WEST !* 0.3. COMPUTES THE DOMAIN DIMENSIONS ! ------------------------------ ! -CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) -IJS=IJB -IJN=IJE - -IIU=size(psrc,1) -IJU=size(psrc,2) -IKU=size(psrc,3) - -GWEST = LWEST_ll() -GEAST = LEAST_ll() +!!$CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) +!!$IJS=IJB +!!$IJN=IJE +!!$ +!!$IIU=size(psrc,1) +!!$IJU=size(psrc,2) +!!$IKU=size(psrc,3) +!!$ +!!$GWEST = LWEST_ll() +!!$GEAST = LEAST_ll() ! !BEG JUAN PPM_LL @@ -1633,10 +1588,12 @@ ENDIF ! CALL GET_HALO2(PSRC,TZ_PSRC_HALO2_ll) ZPSRC_HALO2_WEST(:,:) = TZ_PSRC_HALO2_ll%HALO2%WEST(:,:) +!$acc update device (ZPSRC_HALO2_WEST) ! + #define JUAN_ACC_S0_X #ifdef JUAN_ACC_S0_X -!$acc data pcreate (ZPHAT,ZFPOS,ZFNEG,ZRHO_MXM,ZCR_MXM,ZCR_DXF) pcopyin (psrc,pcr,prho,ZPSRC_HALO2_WEST) pcopyout(pr) +!$acc data copyin (psrc,pcr,prho) copyout(pr) !$acc kernels #endif ! @@ -1858,6 +1815,14 @@ USE MODD_CONF USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll USE MODD_PARAMETERS, ONLY : JPHEXT USE MODE_MPPDB +! +USE MODE_MNH_ZWORK, ONLY : & +& IIB,IIE, IJB,IJE, IIU,IJU,IKU , IIW,IIA, & +& GSOUTH , GNORTH, & +& ZPHAT=>ZW3D1,ZFPOS=>ZW3D2,ZFNEG=>ZW3D3,ZRHO_MYM=>ZW3D4, & +& ZCR_MYM=>ZW3D5,ZCR_DYF=>ZW3D6, & +& ZPSRC_HALO2_SOUTH + ! IMPLICIT NONE ! @@ -1874,31 +1839,31 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density REAL, INTENT(IN) :: PTSTEP ! Time step ! ! output source term -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR & +REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR ! !* 0.2 Declarations of local variables : ! ! advection fluxes - , ZFPOS, ZFNEG & +!!$ , ZFPOS, ZFNEG & ! ! variable at cell edges - , ZPHAT & +!!$ , ZPHAT & ! - , ZRHO_MYM , ZCR_MYM , ZCR_DYF +!!$ , ZRHO_MYM , ZCR_MYM , ZCR_DYF ! -INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions -INTEGER:: IIE,IJE ! End useful area in x,y,z directions +!!$INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions +!!$INTEGER:: IIE,IJE ! End useful area in x,y,z directions ! !BEG JUAN PPM_LL TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC INTEGER :: ILUOUT,IRESP ! for prints -INTEGER :: IIW,IIA +!!$INTEGER :: IIW,IIA !END JUAN PPM_LL !JUAN ACC -INTEGER :: I,J,K ,IIU,IJU,IKU -LOGICAL :: GSOUTH , GNORTH +INTEGER :: I,J,K +!!$LOGICAL :: GSOUTH , GNORTH ! -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,3)) :: ZPSRC_HALO2_SOUTH +!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,3)) :: ZPSRC_HALO2_SOUTH ! ! inline shuman with macro #define dyf(PDYF,PA) PDYF(:,1:IJU-1,:) = PA(:,2:IJU,:) - PA(:,1:IJU-1,:); PDYF(:,IJU,:) = PDYF(:,2*JPHEXT,:) ! DYF(PDYF,PA) @@ -1910,16 +1875,16 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,3)) :: ZPSRC_HALO2_SOUTH !* 0.3. COMPUTES THE DOMAIN DIMENSIONS ! ------------------------------ ! -CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) -IIW=IIB -IIA=IIE - -IIU=size(psrc,1) -IJU=size(psrc,2) -IKU=size(psrc,3) - -GSOUTH=LSOUTH_ll() -GNORTH=LNORTH_ll() +!!$CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) +!!$IIW=IIB +!!$IIA=IIE +!!$ +!!$IIU=size(psrc,1) +!!$IJU=size(psrc,2) +!!$IKU=size(psrc,3) +!!$ +!!$GSOUTH=LSOUTH_ll() +!!$GNORTH=LNORTH_ll() ! !------------------------------------------------------------------------------- @@ -1931,13 +1896,14 @@ END IF ! CALL GET_HALO2(PSRC,TZ_PSRC_HALO2_ll) ZPSRC_HALO2_SOUTH(:,:) = TZ_PSRC_HALO2_ll%HALO2%SOUTH(:,:) +!$acc update device (ZPSRC_HALO2_SOUTH) ! ! Initialize with relalistic value all work array ! #define JUAN_ACC_S0_Y #ifdef JUAN_ACC_S0_Y -!$acc data region local(ZPHAT,ZFPOS,ZFNEG,ZRHO_MYM,ZCR_MYM,ZCR_DYF) copyin (psrc,pcr,prho,zpsrc_halo2_south) copyout(pr) -!$acc region +!$acc data copyin (psrc,pcr,prho) copyout(pr) +!$acc kernels #endif ! ZPHAT=PSRC @@ -2104,8 +2070,8 @@ ENDIF ENDIF ! #ifdef JUAN_ACC_S0_Y -!$acc end region -!$acc end data region +!$acc end kernels +!$acc end data #endif ! CALL GET_HALO(PR,HDIR="S0_Y") -- GitLab