Skip to content
Snippets Groups Projects
Commit 24ff52f4 authored by ESCOBAR MUNOZ Juan's avatar ESCOBAR MUNOZ Juan
Browse files

Juan 10/06/2021: rain_ice_sedimentation_split.f90 , replace allocate -> MNH_ALLOCATE_IT1D

parent 9ebbf521
No related branches found
No related tags found
No related merge requests found
......@@ -48,6 +48,12 @@ USE MODI_BITREP
#endif
use MODI_BUDGET
#ifdef MNH_OPENACC
USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D, MNH_ALLOCATE_ZT1DP , MNH_REL_ZT1D , &
MNH_ALLOCATE_GT3D , MNH_ALLOCATE_GT2D, MNH_REL_GT3D, &
MNH_ALLOCATE_IT1D , MNH_REL_IT1D
#endif
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
......@@ -96,21 +102,26 @@ INTEGER :: ISEDIMR, ISEDIMC, ISEDIMI, ISEDIMS, IS
INTEGER :: JI, JJ, JK ! Loop indices on grid
INTEGER :: JN ! Temporal loop index for the rain sedimentation
INTEGER :: JL
INTEGER, DIMENSION(:), ALLOCATABLE :: IC1, IC2, IC3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), ALLOCATABLE :: IR1, IR2, IR3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), ALLOCATABLE :: IS1, IS2, IS3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), ALLOCATABLE :: II1, II2, II3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), ALLOCATABLE :: IG1, IG2, IG3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), ALLOCATABLE :: IH1, IH2, IH3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: IC1, IC2, IC3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: IR1, IR2, IR3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: IS1, IS2, IS3 ! Used to replace the COUNT
INTEGER :: IIC1, IIC2, IIC3, IIR1, IIR2, IIR3, IIS1, IIS2, IIS3
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: II1, II2, II3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: IG1, IG2, IG3 ! Used to replace the COUNT
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: IH1, IH2, IH3 ! Used to replace the COUNT
INTEGER :: III1, III2, III3, IIG1, IIG2, IIG3, IIH1, IIH2, IIH3
LOGICAL :: GPRESENT_PFPR, GPRESENT_PSEA
LOGICAL, DIMENSION(:,:), ALLOCATABLE :: GDEP
LOGICAL, DIMENSION(:,:,:), ALLOCATABLE :: GSEDIMR, GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH ! Where to compute the SED processes
LOGICAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: GDEP
LOGICAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: GSEDIMR, GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH ! Where to compute the SED processes
INTEGER :: IGDEP,IGSEDIMR, IGSEDIMC, IGSEDIMI, IGSEDIMS, IGSEDIMG, IGSEDIMH
REAL :: ZINVTSTEP
REAL :: ZTSPLITR ! Small time step for rain sedimentation
REAL :: ZTMP1, ZTMP2, ZTMP3 ! Intermediate variables
REAL :: ZRHODREFLOC ! RHO Dry REFerence
REAL :: ZRSLOC, ZRTLOC ! Intermediate variables
REAL, DIMENSION(:), ALLOCATABLE :: ZRTMIN
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZRTMIN
! XRTMIN = Minimum value for the mixing ratio
! ZRTMIN = Minimum value for the source (tendency)
REAL :: ZCC, & ! terminal velocity
......@@ -121,15 +132,18 @@ REAL :: ZCC, & ! terminal velocity
ZWLBDA, & ! Free mean path
ZZT, & ! Temperature
ZPRES ! Pressure
REAL, DIMENSION(:,:), ALLOCATABLE :: ZCONC_TMP ! Weighted concentration
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCONC3D ! Doplet condensation
REAL, DIMENSION(:,:), ALLOCATABLE :: ZOMPSEA,ZTMP1_2D,ZTMP2_2D,ZTMP3_2D,ZTMP4_2D !Work arrays
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRAY, & ! Cloud Mean radius
REAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: ZCONC_TMP ! Weighted concentration
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZCONC3D ! Doplet condensation
REAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: ZOMPSEA,ZTMP1_2D,ZTMP2_2D,ZTMP3_2D,ZTMP4_2D !Work arrays
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZRAY, & ! Cloud Mean radius
ZLBC, & ! XLBC weighted by sea fraction
ZFSEDC
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZPRCS,ZPRRS,ZPRSS,ZPRGS,ZPRHS ! Mixing ratios created during the time step
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZW ! Work array
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWSED ! sedimentation fluxes
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZPRCS,ZPRRS,ZPRSS,ZPRGS,ZPRHS ! Mixing ratios created during the time step
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZW ! Work array
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZWSED ! sedimentation fluxes
INTEGER :: IZCONC_TMP,IZCONC3D,IZOMPSEA,IZTMP1_2D,IZTMP2_2D,IZTMP3_2D,IZTMP4_2D,IZRAY,IZLBC,IZFSEDC
INTEGER :: IIU,IJU,IKU, IIJKU
!
!-------------------------------------------------------------------------------
!
......@@ -173,41 +187,68 @@ IF (MPPDB_INITIALIZED) THEN
CALL MPPDB_CHECK(PRGS,"RAIN_ICE_SEDIMENTATION_SPLIT beg:PRGS")
IF (PRESENT(PRHS)) CALL MPPDB_CHECK(PRHS,"RAIN_ICE_SEDIMENTATION_SPLIT beg:PRHS")
END IF
IIU = size(PRCS, 1 )
IJU = size(PRCS, 2 )
IKU = size(PRCS, 3 )
IIJKU = IIU * IJU * IKU
!
ALLOCATE( IC1(size(PRCS)), IC2(size(PRCS)), IC3(size(PRCS)) )
ALLOCATE( IR1(size(PRCS)), IR2(size(PRCS)), IR3(size(PRCS)) )
ALLOCATE( IS1(size(PRCS)), IS2(size(PRCS)), IS3(size(PRCS)) )
ALLOCATE( II1(size(PRCS)), II2(size(PRCS)), II3(size(PRCS)) )
ALLOCATE( IG1(size(PRCS)), IG2(size(PRCS)), IG3(size(PRCS)) )
ALLOCATE( IH1(size(PRCS)), IH2(size(PRCS)), IH3(size(PRCS)) )
ALLOCATE( GDEP(SIZE(PRCS,1),SIZE(PRCS,2)) )
ALLOCATE( GSEDIMR(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( GSEDIMC(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( GSEDIMI(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( GSEDIMS(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( GSEDIMG(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( GSEDIMH(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
#ifndef MNH_OPENACC
ALLOCATE( IC1(IIJKU), IC2(IIJKU), IC3(IIJKU) )
ALLOCATE( IR1(IIJKU), IR2(IIJKU), IR3(IIJKU) )
ALLOCATE( IS1(IIJKU), IS2(IIJKU), IS3(IIJKU) )
ALLOCATE( II1(IIJKU), II2(IIJKU), II3(IIJKU) )
ALLOCATE( IG1(IIJKU), IG2(IIJKU), IG3(IIJKU) )
ALLOCATE( IH1(IIJKU), IH2(IIJKU), IH3(IIJKU) )
#else
IIC1 = MNH_ALLOCATE_IT1D(IC1,IIJKU)
IIC2 = MNH_ALLOCATE_IT1D(IC2,IIJKU)
IIC3 = MNH_ALLOCATE_IT1D(IC3,IIJKU)
IIR1 = MNH_ALLOCATE_IT1D(IR1,IIJKU)
IIR2 = MNH_ALLOCATE_IT1D(IR2,IIJKU)
IIR3 = MNH_ALLOCATE_IT1D(IR3,IIJKU)
IIS1 = MNH_ALLOCATE_IT1D(IS1,IIJKU)
IIS2 = MNH_ALLOCATE_IT1D(IS2,IIJKU)
IIS3 = MNH_ALLOCATE_IT1D(IS3,IIJKU)
III1 = MNH_ALLOCATE_IT1D(II1,IIJKU)
III2 = MNH_ALLOCATE_IT1D(II2,IIJKU)
III3 = MNH_ALLOCATE_IT1D(II3,IIJKU)
IIG1 = MNH_ALLOCATE_IT1D(IG1,IIJKU)
IIG2 = MNH_ALLOCATE_IT1D(IG2,IIJKU)
IIG3 = MNH_ALLOCATE_IT1D(IG3,IIJKU)
IIH1 = MNH_ALLOCATE_IT1D(IH1,IIJKU)
IIH2 = MNH_ALLOCATE_IT1D(IH2,IIJKU)
IIH3 = MNH_ALLOCATE_IT1D(IH3,IIJKU)
#endif
ALLOCATE( GDEP(IIU,IJU) )
ALLOCATE( GSEDIMR(IIU,IJU,IKU) )
ALLOCATE( GSEDIMC(IIU,IJU,IKU) )
ALLOCATE( GSEDIMI(IIU,IJU,IKU) )
ALLOCATE( GSEDIMS(IIU,IJU,IKU) )
ALLOCATE( GSEDIMG(IIU,IJU,IKU) )
ALLOCATE( GSEDIMH(IIU,IJU,IKU) )
ALLOCATE( ZRTMIN(SIZE(XRTMIN)) )
ALLOCATE( ZCONC_TMP(SIZE(PRCS,1),SIZE(PRCS,2)) )
ALLOCATE( ZOMPSEA (SIZE(PRCS,1),SIZE(PRCS,2)) )
ALLOCATE( ZTMP1_2D (SIZE(PRCS,1),SIZE(PRCS,2)) )
ALLOCATE( ZTMP2_2D (SIZE(PRCS,1),SIZE(PRCS,2)) )
ALLOCATE( ZTMP3_2D (SIZE(PRCS,1),SIZE(PRCS,2)) )
ALLOCATE( ZTMP4_2D (SIZE(PRCS,1),SIZE(PRCS,2)) )
ALLOCATE( ZCONC3D(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZRAY (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZLBC (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZFSEDC (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZPRCS (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZPRRS (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZPRSS (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZPRGS (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZPRHS (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZW (SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) )
ALLOCATE( ZWSED (SIZE(PRCS,1),SIZE(PRCS,2),0:SIZE(PRCS,3)+1) )
ALLOCATE( ZCONC_TMP(IIU,IJU) )
ALLOCATE( ZOMPSEA (IIU,IJU) )
ALLOCATE( ZTMP1_2D (IIU,IJU) )
ALLOCATE( ZTMP2_2D (IIU,IJU) )
ALLOCATE( ZTMP3_2D (IIU,IJU) )
ALLOCATE( ZTMP4_2D (IIU,IJU) )
ALLOCATE( ZCONC3D(IIU,IJU,IKU) )
ALLOCATE( ZRAY (IIU,IJU,IKU) )
ALLOCATE( ZLBC (IIU,IJU,IKU) )
ALLOCATE( ZFSEDC (IIU,IJU,IKU) )
ALLOCATE( ZPRCS (IIU,IJU,IKU) )
ALLOCATE( ZPRRS (IIU,IJU,IKU) )
ALLOCATE( ZPRSS (IIU,IJU,IKU) )
ALLOCATE( ZPRGS (IIU,IJU,IKU) )
ALLOCATE( ZPRHS (IIU,IJU,IKU) )
ALLOCATE( ZW (IIU,IJU,IKU) )
ALLOCATE( ZWSED (IIU,IJU,0:IKU+1) )
!$acc data create( IC1, IC2, IC3, IR1, IR2, IR3, IS1, IS2, IS3, II1, II2, II3, IG1, IG2, IG3, IH1, IH2, IH3, &
!$acc & GDEP, GSEDIMR, GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH, &
!$acc data present( IC1, IC2, IC3, IR1, IR2, IR3, IS1, IS2, IS3, II1, II2, II3, IG1, IG2, IG3, IH1, IH2, IH3) &
!$acc & create( GDEP, GSEDIMR, GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH, &
!$acc & ZRTMIN, ZCONC_TMP, &
!$acc & ZOMPSEA, ZTMP1_2D, ZTMP2_2D, ZTMP3_2D, ZTMP4_2D, ZCONC3D, &
!$acc & ZRAY, ZLBC, ZFSEDC, &
......@@ -686,6 +727,19 @@ END IF
!$acc end data
#ifndef MNH_OPENACC
DEALLOCATE(IC1, IC2, IC3, IR1, IR2, IR3, IS1, IS2, IS3, II1, II2, II3, IG1, IG2, IG3, IH1, IH2, IH3)
#else
CALL MNH_REL_IT1D(IIC1, IIC2, IIC3, IIR1, IIR2, IIR3, IIS1, IIS2, IIS3,&
III1, III2, III3, IIG1, IIG2, IIG3, IIH1, IIH2, IIH3)
#endif
DEALLOCATE(GDEP, GSEDIMR, GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH)
DEALLOCATE(ZRTMIN)
DEALLOCATE(ZCONC_TMP,ZOMPSEA, ZTMP1_2D, ZTMP2_2D, ZTMP3_2D, ZTMP4_2D, ZCONC3D)
DEALLOCATE(ZRAY, ZLBC, ZFSEDC,ZPRCS, ZPRRS, ZPRSS, ZPRGS, ZPRHS, ZW)
DEALLOCATE(ZWSED)
!$acc end data
END SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment