diff --git a/MNH/ppm.f90 b/MNH/ppm.f90 index 3e4ebc41e898e807268a1881b825424728b5f5fd..b60c580723565108012a07867df8bfabd81d484e 100644 --- a/MNH/ppm.f90 +++ b/MNH/ppm.f90 @@ -10,54 +10,61 @@ ! INTERFACE ! -FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) & - RESULT(PR) +!!$FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) & +!!$ RESULT(PR) +SUBROUTINE PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR) 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 REAL, INTENT(IN) :: PTSTEP ! Time step ! ! output source term -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR +!$acc reflected (PSRC,PCR,PRHO,PR) ! -END FUNCTION PPM_01_X +!!$END FUNCTION PPM_01_X +END SUBROUTINE PPM_01_X ! -FUNCTION PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) & - RESULT(PR) +!!$FUNCTION PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) & +!!$ RESULT(PR) +SUBROUTINE PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP, PR) 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 REAL, INTENT(IN) :: PTSTEP ! Time step ! ! output source term -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR +!$acc reflected (PSRC,PCR,PRHO,PR) ! -END FUNCTION PPM_01_Y +END SUBROUTINE PPM_01_Y ! -FUNCTION PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) RESULT(PR) +!!$FUNCTION PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) RESULT(PR) +SUBROUTINE PPM_01_Z(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 REAL, INTENT(IN) :: PTSTEP ! Time step ! ! output source term -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR +!$acc reflected (PSRC,PCR,PRHO,PR) ! -END FUNCTION PPM_01_Z +END SUBROUTINE PPM_01_Z ! FUNCTION PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) & RESULT(PR) @@ -173,8 +180,10 @@ END MODULE MODI_PPM !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- ! ######################################################################## - FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) & - RESULT(PR) +!!$ FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) & +!!$ RESULT(PR) + SUBROUTINE PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR) + ! ######################################################################## !! !!**** PPM_01_X - PPM_01 fully monotonic PPM advection scheme in X direction @@ -207,14 +216,14 @@ 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 REAL, INTENT(IN) :: PTSTEP ! Time step ! ! output source term -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR +!$acc reflected (PSRC,PCR,PRHO,PR) ! !* 0.2 Declarations of local variables : ! @@ -222,15 +231,14 @@ 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(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL,ZQR -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDQ,ZQ6 -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDMQ +REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: & + ZQL,ZQR, ZDQ,ZQ6, ZDMQ & ! ! extra variables for the initial guess of parabolae parameters -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL0,ZQR0,ZQ60 + , ZQL0,ZQR0,ZQ60 & ! ! advection fluxes -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG + , ZFPOS, ZFNEG ! !BEG JUAN PPM_LL INTEGER :: ILUOUT,IRESP ! for prints @@ -277,11 +285,11 @@ IF(NHALO /= 1) THEN STOP ENDIF ! -CALL GET_HALO(PSRC,HDIR="01_X") +CALL GET_HALO_D(PSRC,HDIR="01_X") ! #define JUAN_ACC_01_X #ifdef JUAN_ACC_01_X -!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) copyin (psrc,pcr,prho) copyout(pr) +!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) !$acc region #endif DO K=1,IKU ; DO J = 1,IJU ; DO I=1,IIU @@ -607,7 +615,7 @@ CALL GET_HALO_D(ZFNEG,HDIR="01_X") !$acc end data region #endif - CALL GET_HALO(PR,HDIR="01_X") + CALL GET_HALO_D(PR,HDIR="01_X") ! !!$END SELECT ! @@ -668,15 +676,17 @@ CALL GET_HALO_D(ZFNEG,HDIR="01_X") !!$! !!$END FUNCTION DIF2X ! -END FUNCTION PPM_01_X +!!$END FUNCTION PPM_01_X + END SUBROUTINE PPM_01_X ! ! !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- ! ! ######################################################################## - FUNCTION PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) & - RESULT(PR) +!!$ FUNCTION PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) & +!!$ RESULT(PR) + SUBROUTINE PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP,PR) ! ######################################################################## !! !!**** PPM_01_Y - PPM_01 fully monotonic PPM advection scheme in Y direction @@ -710,17 +720,20 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type INTEGER, INTENT(IN) :: KGRID ! C grid localisation REAL, INTENT(IN) :: PTSTEP ! Time step ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC & ! variable at t - , PCR & ! Courant number +REAL, DIMENSION(:,:,:), INTENT(INOUT):: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR & ! Courant number , PRHO ! density ! ! output source term -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR & +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR +!$acc reflected (PSRC,PCR,PRHO,PR) +! ! !* 0.2 Declarations of local variables : ! ! terms used in parabolic interpolation, dmq, qL, qR, dq, q6 - , ZQL,ZQR , ZDQ,ZQ6 , ZDMQ & +REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: & + ZQL,ZQR , ZDQ,ZQ6 , ZDMQ & ! extra variables for the initial guess of parabolae parameters , ZQL0,ZQR0,ZQ60 & ! advection fluxes @@ -730,17 +743,6 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR & INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions INTEGER:: IIE,IJE ! End useful area in x,y,z directions ! - -!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL,ZQR -!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDQ,ZQ6 -!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDMQ -!!$! -!!$ -!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL0,ZQR0,ZQ60 -!!$! -!!$ -!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG -! !BEG JUAN PPM_LL INTEGER :: ILUOUT,IRESP ! for prints INTEGER :: IIW,IIA @@ -783,7 +785,7 @@ IF(NHALO /= 1) THEN STOP ENDIF ! -CALL GET_HALO(PSRC,HDIR="01_Y") +CALL GET_HALO_D(PSRC,HDIR="01_Y") ! ! !------------------------------------------------------------------------------- @@ -791,7 +793,7 @@ CALL GET_HALO(PSRC,HDIR="01_Y") ! #define JUAN_ACC_01_Y #ifdef JUAN_ACC_01_Y -!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) copyin (psrc,pcr,prho) copyout(pr) +!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) !$acc region #endif PR=PSRC @@ -1141,7 +1143,7 @@ CALL GET_HALO_D(ZFPOS,HDIR="01_Y") !$acc end data region #endif - CALL GET_HALO(PR,HDIR="01_Y") + CALL GET_HALO_D(PR,HDIR="01_Y") ! !!$END SELECT @@ -1206,14 +1208,15 @@ CALL GET_HALO_D(ZFPOS,HDIR="01_Y") !!$! !!$END FUNCTION DIF2Y ! -END FUNCTION PPM_01_Y + END SUBROUTINE PPM_01_Y ! ! !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- ! ! ######################################################################## - FUNCTION PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) RESULT(PR) +!!$ FUNCTION PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) RESULT(PR) + SUBROUTINE PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP, PR) ! ######################################################################## !! !!**** PPM_01_Z - PPM_01 fully monotonic PPM advection scheme in Z direction @@ -1239,20 +1242,21 @@ IMPLICIT NONE !* 0.1 Declarations of dummy arguments : ! INTEGER, INTENT(IN) :: KGRID ! C grid localisation -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRC ! variable at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR ! Courant number -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! density REAL, INTENT(IN) :: PTSTEP ! Time step ! +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCR & ! Courant number + , PRHO ! density +! ! output source term -REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR & +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR +!$acc reflected (PSRC,PCR,PRHO,PR) ! !* 0.2 Declarations of local variables : ! ! terms used in parabolic interpolation, dmq, qL, qR, dq, q6 - , ZQL, ZQR, ZDQ, ZQ6, ZDMQ & +REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: & + ZQL, ZQR, ZDQ, ZQ6, ZDMQ & ! ! extra variables for the initial guess of parabolae parameters , ZQL0,ZQR0,ZQ60 & @@ -1288,7 +1292,7 @@ IKU=size(psrc,3) #define JUAN_ACC_01_Z #ifdef JUAN_ACC_01_Z -!$acc data region local (ZDMQ,ZQL0,ZQR0,ZDQ,ZQ60,ZQL,ZQR,ZQ6,ZFPOS,ZFNEG) copyin (psrc,pcr,prho) copyout(pr) +!$acc data region local (ZDMQ,ZQL0,ZQR0,ZDQ,ZQ60,ZQL,ZQR,ZQ6,ZFPOS,ZFNEG) !$acc region #endif ! @@ -1401,7 +1405,7 @@ ZFNEG(:,:,IKE+1) = (ZQR(:,:,IKE)-PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + & !$acc end data region #endif -CALL GET_HALO(PR) +CALL GET_HALO_D(PR) CALL MPPDB_CHECK3DM("PPM::PPM_01_Z ::PR",PRECISION,PR) ! !!$CONTAINS @@ -1465,7 +1469,7 @@ CALL MPPDB_CHECK3DM("PPM::PPM_01_Z ::PR",PRECISION,PR) !!$! !!$END FUNCTION DIF2Z ! -END FUNCTION PPM_01_Z +END SUBROUTINE PPM_01_Z ! ! !-------------------------------------------------------------------------------