diff --git a/MNH/ppm.f90 b/MNH/ppm.f90 index 8f431e0cdd768ac7c8d4d96e51ece33187659c4e..254e3296d7e5f621fb53caedeb059ce078112b9c 100644 --- a/MNH/ppm.f90 +++ b/MNH/ppm.f90 @@ -25,7 +25,6 @@ REAL, INTENT(IN) :: PTSTEP ! Time step ! ! output source term REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR -!acc reflected (PSRC,PCR,PRHO,PR) ! !!$END FUNCTION PPM_01_X END SUBROUTINE PPM_01_X @@ -62,7 +61,6 @@ REAL, INTENT(IN) :: PTSTEP ! Time step ! ! output source term REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR -!acc reflected (PSRC,PCR,PRHO,PR) ! END SUBROUTINE PPM_01_Z ! @@ -75,7 +73,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -96,7 +94,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -115,7 +113,7 @@ SUBROUTINE PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP & ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -133,7 +131,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -152,7 +150,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! X direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -169,7 +167,7 @@ FUNCTION PPM_S1_Z(KGRID, PSRC, PCR, PRHO, PRHOT, PTSTEP) & ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -193,6 +191,7 @@ END MODULE MODI_PPM SUBROUTINE PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR) USE MODE_MNH_ZWORK, ONLY : ZT3D, MNH_GET_ZT3D , MNH_REL_ZT3D + USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU IMPLICIT NONE ! @@ -214,7 +213,8 @@ INTEGER :: IZQL,IZQR,IZDQ,IZQ6,IZDMQ,IZQL0,IZQR0,IZQ60,IZFPOS,IZFNEG CALL MNH_GET_ZT3D(IZQL,IZQR,IZDQ,IZQ6,IZDMQ,IZQL0,IZQR0,IZQ60,IZFPOS,IZFNEG) - CALL PPM_01_X_D(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR, & + CALL PPM_01_X_D(IIU,IJU,IKU,HLBCX, KGRID, & + & PSRC, PCR, PRHO, PTSTEP, PR, & & ZT3D(:,:,:,IZQL),ZT3D(:,:,:,IZQR),ZT3D(:,:,:,IZDQ),ZT3D(:,:,:,IZQ6), & & ZT3D(:,:,:,IZDMQ),ZT3D(:,:,:,IZQL0),ZT3D(:,:,:,IZQR0), ZT3D(:,:,:,IZQ60), & & ZT3D(:,:,:,IZFPOS),ZT3D(:,:,:,IZFNEG) ) @@ -223,7 +223,8 @@ INTEGER :: IZQL,IZQR,IZDQ,IZQ6,IZDMQ,IZQL0,IZQR0,IZQ60,IZFPOS,IZFNEG CONTAINS - SUBROUTINE PPM_01_X_D(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR, & + SUBROUTINE PPM_01_X_D(IIU,IJU,IKU,HLBCX, KGRID, & + & PSRC, PCR, PRHO, PTSTEP, PR, & & ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) ! ######################################################################## @@ -249,25 +250,25 @@ USE MODD_LUNIT !END JUAN PPM_LL USE MODE_MPPDB USE MODD_PARAMETERS, ONLY : JPHEXT +USE MODE_TOOLS_ll, ONLY : GET_INDICE_ll, LEAST_ll, LWEST_ll ! ! -USE MODE_MNH_ZWORK, ONLY : IIB,IIE, IIU,IJU,IKU , IJS,IJN, GWEST,GEAST -! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! +INTEGER , INTENT(IN) :: IIU,IJU,IKU CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density +REAL, DIMENSION(IIU,IJU,IKU), INTENT(INOUT) :: PSRC ! variable at t +REAL, DIMENSION(IIU,IJU,IKU), INTENT(IN) :: PCR ! Courant number +REAL, DIMENSION(IIU,IJU,IKU), INTENT(IN) :: PRHO ! density REAL, INTENT(IN) :: PTSTEP ! Time step ! ! output source term -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR +REAL, DIMENSION(IIU,IJU,IKU), INTENT(INOUT) :: PR !$acc declare present (PSRC,PCR,PRHO,PR) ! !* 0.2 Declarations of local variables : @@ -276,11 +277,11 @@ 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 +INTEGER :: IIB,IJB ! Begining useful area in x,y,z directions +INTEGER :: IIE,IJE ! End useful area in x,y,z directions !!$! !!$! terms used in parabolic interpolation, dmq, qL, qR, dq, q6 -REAL , DIMENSION(:,:,:) :: & +REAL , DIMENSION(IIU,IJU,IKU) :: & ZQL,ZQR, ZDQ,ZQ6, ZDMQ & !!$! !!$! extra variables for the initial guess of parabolae parameters @@ -289,14 +290,12 @@ REAL , DIMENSION(:,:,:) :: & !!$! advection fluxes , ZFPOS, ZFNEG !$acc declare present (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) -!!$! -!!$!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. +! +!BEG JUAN PPM_LL +INTEGER :: IJS,IJN +!END JUAN PPM_LL +!JUAN ACC +LOGICAL :: GWEST , GEAST ! ! inline shuman with macro ! @@ -312,7 +311,11 @@ DQ(IIE+1,:,:)=0.5*(PQ(IIB+1,:,:)-PQ(IIE,:,:)) ! DIF2X(DQ,PQ) ! !* 0.3. COMPUTES THE DOMAIN DIMENSIONS ! ------------------------------ -! +CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) +IJS=IJB +IJN=IJE +GWEST = LWEST_ll() +GEAST = LEAST_ll() ! !BEG JUAN PPM_LL ! @@ -347,18 +350,24 @@ CALL GET_HALO_D(PSRC,HDIR="01_X") !!$ZFPOS(I,J,K)=PSRC(I,J,K) !!$ZFNEG(I,J,K)=PSRC(I,J,K) !!$ENDDO ; ENDDO ; ENDDO -PR=PSRC -ZQL=PSRC -ZQR=PSRC -ZDQ=PSRC -ZQ6=PSRC -ZDMQ=PSRC -ZQL0=PSRC -ZQR0=PSRC -ZQ60=PSRC + +!acc parallel vector_length(32) + +!!$PR=PSRC +!!$ZQL=PSRC +!!$ZQR=PSRC +!!$ZDQ=PSRC +!!$ZQ6=PSRC +!!$ZDMQ=PSRC +!!$ZQL0=PSRC +!!$ZQR0=PSRC +!!$ZQ60=PSRC + ZFPOS=PSRC ZFNEG=PSRC -! acc end kernels + +!acc end parallel +!acc kernels ! !------------------------------------------------------------------------------- ! @@ -527,6 +536,9 @@ ZFNEG=PSRC #ifdef TEMPO_JUAN !$acc end kernels CALL GET_HALO_D(ZDMQ,HDIR="01_X") +IF (MPPDB_INITIALIZED) THEN +!$acc update host(ZDMQ) +ENDIF CALL MPPDB_CHECK3DM("PPM::PPM_01_X OPEN ::ZDMQ",PRECISION,ZDMQ) !$acc kernels #endif @@ -618,7 +630,7 @@ ENDDO ; ENDDO ; ENDDO ! #ifdef TEMPO_JUAN !$acc end kernels -CALL GET_HALO_D(ZFPOS(:,:,:),HDIR="01_X") +CALL GET_HALO_D(ZFPOS,HDIR="01_X") !$acc kernels #endif ! @@ -641,7 +653,7 @@ CALL GET_HALO_D(ZFPOS(:,:,:),HDIR="01_X") ! #ifdef TEMPO_JUAN !$acc end kernels -CALL GET_HALO_D(ZFNEG(:,:,:),HDIR="01_X") +CALL GET_HALO_D(ZFNEG,HDIR="01_X") !$acc kernels #endif ! @@ -659,7 +671,7 @@ CALL GET_HALO_D(ZFNEG(:,:,:),HDIR="01_X") ! ! acc kernels mxm(ZQL,PRHO) - ZQR = PCR* ZQL(:,:,:) *( ZFPOS(:,:,:)*(0.5+SIGN(0.5,PCR)) + ZFNEG(:,:,:)*(0.5-SIGN(0.5,PCR)) ) + ZQR = PCR* ZQL *( ZFPOS*(0.5+SIGN(0.5,PCR)) + ZFNEG*(0.5-SIGN(0.5,PCR)) ) dxf(PR,ZQR) !!$ PR = DXF( PCR*MXM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,PCR)) + & @@ -895,7 +907,7 @@ CALL GET_HALO_D(PSRC,HDIR="01_Y") !$acc kernels #endif PR=PSRC -ZQL(:,:,:)=PSRC +ZQL=PSRC ZQR=PSRC ZDQ=PSRC ZQ6=PSRC @@ -903,7 +915,7 @@ ZDMQ=PSRC ZQL0=PSRC ZQR0=PSRC ZQ60=PSRC -ZFPOS(:,:,:)=PSRC +ZFPOS=PSRC ZFNEG=PSRC ! acc end kernels ! @@ -1173,7 +1185,7 @@ CALL GET_HALO_D(ZQL0,HDIR="01_Y") ! #ifdef TEMPO_JUAN !$acc end kernels -CALL GET_HALO_D(ZFPOS(:,:,:),HDIR="01_Y") +CALL GET_HALO_D(ZFPOS,HDIR="01_Y") !$acc kernels #endif ! @@ -1540,6 +1552,9 @@ ZFNEG(:,:,IKE+1) = (ZQR(:,:,IKE)-PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + & #endif CALL GET_HALO_D(PR) +IF (MPPDB_INITIALIZED) THEN +!$acc update host(PR) +ENDIF CALL MPPDB_CHECK3DM("PPM::PPM_01_Z ::PR",PRECISION,PR) ! !!$CONTAINS @@ -1627,7 +1642,7 @@ SUBROUTINE PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP , PR) ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! - REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t + REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -1689,7 +1704,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -1965,6 +1980,9 @@ ENDIF #endif ! CALL GET_HALO(PR,HDIR="S0_X") +IF (MPPDB_INITIALIZED) THEN +!$acc update host(PR) +ENDIF CALL MPPDB_CHECK3DM("PPM::PPM_S0_X OPEN ::PR",PRECISION,PR) !!$! !!$END SELECT @@ -1995,7 +2013,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -2055,7 +2073,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -2303,6 +2321,9 @@ ENDIF #endif ! CALL GET_HALO(PR,HDIR="S0_Y") + IF (MPPDB_INITIALIZED) THEN + !$acc update host(PR) + ENDIF CALL MPPDB_CHECK3DM("PPM::PPM_S0_Y OPEN ::PR",PRECISION,PR) ! !!$END SELECT @@ -2330,7 +2351,7 @@ SUBROUTINE PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP & ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -2383,7 +2404,7 @@ IMPLICIT NONE ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -2495,6 +2516,9 @@ ZFNEG(:,:,IKE+1) = (ZPHAT(:,:,IKE+1) - PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + & #endif ! CALL GET_HALO(PR) ! JUAN + IF (MPPDB_INITIALIZED) THEN + !$acc update host(PR) + ENDIF CALL MPPDB_CHECK3DM("PPM::PPM_S0_Z ::PR",PRECISION,PR) ! END SUBROUTINE PPM_S0_Z_D @@ -2537,7 +2561,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -2794,7 +2818,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! X direction LBC type ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density @@ -3051,7 +3075,7 @@ IMPLICIT NONE ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density