diff --git a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 index 863e7b667c2288ebaae606cc54d72b323ff2ba82..c3c55262fcc8efcae9148a7998929924b4456951 100644 --- a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 @@ -535,7 +535,7 @@ ! !* 2.1.1.2 Fill out the buffer in the south part of the halo2 ! - DO JK=TPZONE%NZOR, TPZONE%NZEND + DO JK=TPZONE%NZOR, MIN(TPZONE%NZEND,SIZE(TZHALO2%HALO2%SOUTH,2)) DO JI=TPZONE%NXOR, TPZONE%NXEND ! JINC = JINC + 1 @@ -562,7 +562,7 @@ ! !* 2.1.2.2 Fill out the buffer in the east part of the halo2 ! - DO JK=TPZONE%NZOR, TPZONE%NZEND + DO JK=TPZONE%NZOR, MIN(TPZONE%NZEND,SIZE(TZHALO2%HALO2%EAST,2)) DO JJ=TPZONE%NYOR, TPZONE%NYEND ! JINC = JINC + 1 @@ -589,7 +589,7 @@ ! !* 2.1.3.2 Fill out the buffer in the north part of the halo2 ! - DO JK=TPZONE%NZOR, TPZONE%NZEND + DO JK=TPZONE%NZOR, MIN(TPZONE%NZEND,SIZE(TZHALO2%HALO2%NORTH,2)) DO JI=TPZONE%NXOR, TPZONE%NXEND ! JINC = JINC + 1 @@ -616,7 +616,7 @@ ! !* 2.1.4.2 Fill out the buffer in the west part of the halo2 ! - DO JK=TPZONE%NZOR, TPZONE%NZEND + DO JK=TPZONE%NZOR, MIN(TPZONE%NZEND,SIZE(TZHALO2%HALO2%WEST,2)) DO JJ=TPZONE%NYOR, TPZONE%NYEND ! JINC = JINC + 1 diff --git a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 index b45850ab06006503d24fdf82e7e6bfe480f4a26b..3302f650e440636222024ccea1fae85ff5742cd9 100644 --- a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 @@ -1441,7 +1441,9 @@ INTEGER :: NB_REQ ! TYPE(LIST_ll), POINTER :: TZLIST INTEGER :: IIBS, IIES, IJBS, IJES, IKBS, IKES, IIBR, IIER, & - IJBR, IJER, IKBR, IKER + IJBR, IJER, IKBR, IKER + !JUAN + INTEGER :: IIKMAXIN,IIKMAXOUT ! !------------------------------------------------------------------------------- ! @@ -1461,6 +1463,13 @@ INTEGER :: NB_REQ IJER = TPRECV%NYEND IKBR = TPRECV%NZOR IKER = TPRECV%NZEND + IIKMAXIN = SIZE(PFIELDIN,3) + IIKMAXOUT = SIZE(PFIELDOUT,3) + ! JUAN SPECIAL CASE TO REDUCE/AUGMENTE Z LEVEL FOR PREP_REAL_CASE + IF ( (IKES.EQ.IKER) .AND. (IIKMAXIN.EQ.IIKMAXOUT)) THEN + IKER = IIKMAXOUT + IKES = IIKMAXIN + END IF ! !* 2. COPY THE VALUES OF PFIELDIN SITUATED IN THE TPSEND ZONE !* IN THE ENTRIES OF PFIELDOUT DEFINED BY TPRECV @@ -1558,7 +1567,7 @@ INTEGER :: NB_REQ ! Z axe JKMAX = SIZE(TPFIELD%ARRAY3D,3) JKOR = TPZONE%NZOR - JKEND = TPZONE%NZEND + JKEND = MIN(TPZONE%NZEND,JKMAX) ! Y axe JJMAX = SIZE(TPFIELD%ARRAY3D,2) JJOR = TPZONE%NYOR @@ -1675,7 +1684,7 @@ INTEGER :: NB_REQ ! Z axe JKMAX = SIZE(TPFIELD%ARRAY3D,3) JKOR = TPZONE%NZOR - JKEND = TPZONE%NZEND + JKEND = MIN(TPZONE%NZEND,JKMAX) ! Y axe JJMAX = SIZE(TPFIELD%ARRAY3D,2) JJOR = TPZONE%NYOR @@ -2063,7 +2072,7 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV ! Z axe JKMAX = SIZE(PFIELDIN,3) JKOR = TZZONESEND%NZOR - JKEND = TZZONESEND%NZEND + JKEND = MIN(JKMAX,TZZONESEND%NZEND) ! Y axe JJMAX = SIZE(PFIELDIN,2) JJOR = TZZONESEND%NYOR @@ -2078,7 +2087,7 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV JJBOX = JJEND - JJOR + 1 JIJMAX = JIBOX*JJBOX - DO JK=TZZONESEND%NZOR, TZZONESEND%NZEND + DO JK=JKOR,JKEND ! TZZONESEND%NZOR, TZZONESEND%NZEND !CDIR NODEP !OCL NOVREC DO JIJ=1,JIJMAX @@ -2142,7 +2151,7 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV ! Z axe JKMAX = SIZE(PFIELDOUT,3) JKOR = TZZONERECV%NZOR - JKEND = TZZONERECV%NZEND + JKEND = MIN(JKMAX,TZZONERECV%NZEND) ! Y axe JJMAX = SIZE(PFIELDOUT,2) JJOR = TZZONERECV%NYOR @@ -2156,7 +2165,7 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV JIBOX = JIEND - JIOR + 1 JJBOX = JJEND - JJOR + 1 JIJMAX = JIBOX*JJBOX - DO JK = TZZONERECV%NZOR, TZZONERECV%NZEND + DO JK = JKOR,JKEND ! TZZONERECV%NZOR, TZZONERECV%NZEND !CDIR NODEP !OCL NOVREC DO JIJ=1,JIJMAX @@ -2197,7 +2206,7 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV ! Z axe JKMAX = SIZE(PFIELDOUT,3) JKOR = TZZONERECV%NZOR - JKEND = TZZONERECV%NZEND + JKEND = MIN(JKMAX,TZZONERECV%NZEND) ! Y axe JJMAX = SIZE(PFIELDOUT,2) JJOR = TZZONERECV%NYOR @@ -2211,7 +2220,7 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV JIBOX = JIEND - JIOR + 1 JJBOX = JJEND - JJOR + 1 JIJMAX = JIBOX*JJBOX - DO JK = TZZONERECV%NZOR, TZZONERECV%NZEND + DO JK = JKOR,JKEND ! TZZONERECV%NZOR, TZZONERECV%NZEND !CDIR NODEP !OCL NOVREC DO JIJ=1,JIJMAX diff --git a/src/MNH/anel_balancen.f90 b/src/MNH/anel_balancen.f90 index 540e56b76eff1ad6c19ca1cf4fc79da078cb12ae..d969a9b8800786497a1750caeefef53240ba4101 100644 --- a/src/MNH/anel_balancen.f90 +++ b/src/MNH/anel_balancen.f90 @@ -208,7 +208,7 @@ CALL MPPDB_CHECK3D(XUT,"anel_balancen1-::XUT",PRECISION) ! ------------------------------- ! ! -CALL TRIDZ(CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,ZDXHATM,ZDYHATM,ZRHOM, & +CALL TRIDZ(CLBCX,CLBCY,CPRESOPT,XMAP,XDXHAT,XDYHAT,ZDXHATM,ZDYHATM,ZRHOM, & ZAF,ZCF,ZTRIGSX,ZTRIGSY,IIFAXX,IIFAXY,XRHODJ,XTHVREF,XZZ,ZBFY,& ZBFB,ZBF_SXP2_YP1_Z) CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen1-after TRIDZ::XRHODJ",PRECISION) diff --git a/src/MNH/ini_dynamics.f90 b/src/MNH/ini_dynamics.f90 index add1cc9e389d189ec736e64cc2c1c4f87e6d4758..44a9bc9bd639c187a3b05085a4c6d22acd25f787 100644 --- a/src/MNH/ini_dynamics.f90 +++ b/src/MNH/ini_dynamics.f90 @@ -8,7 +8,7 @@ ! ######################## INTERFACE SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ, & - PDXHAT,PDYHAT,PZHAT,PZHATM,HLBCX,HLBCY,PTSTEP, & + PDXHAT,PDYHAT,PZHAT,PZHATM,HLBCX,HLBCY,HPRESOPT,PTSTEP, & OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV, & OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG, & OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV, & @@ -45,6 +45,7 @@ REAL, DIMENSION(:), INTENT(IN) :: PZHAT ! Gal-Chen Height REAL, DIMENSION(:), INTENT(IN) :: PZHATM ! ... at mass points CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCX ! x-direction LBC type CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCY ! y-direction LBC type +CHARACTER (LEN=5) :: HPRESOPT ! Choice of the pressure solver LOGICAL, INTENT(IN) :: OVE_RELAX ! logical ! switch to activate the VErtical RELAXation LOGICAL, INTENT(IN) :: OVE_RELAX_GRD ! logical @@ -180,7 +181,7 @@ END INTERFACE END MODULE MODI_INI_DYNAMICS ! ###################################################################### SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ, & - PDXHAT,PDYHAT,PZHAT,PZHATM,HLBCX,HLBCY,PTSTEP, & + PDXHAT,PDYHAT,PZHAT,PZHATM,HLBCX,HLBCY,HPRESOPT,PTSTEP, & OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV, & OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG, & OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV, & @@ -316,6 +317,7 @@ REAL, DIMENSION(:), INTENT(IN) :: PZHAT ! Gal-Chen Height REAL, DIMENSION(:), INTENT(IN) :: PZHATM ! ... at mass points CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCX ! x-direction LBC type CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCY ! y-direction LBC type +CHARACTER (LEN=5) :: HPRESOPT ! Choice of the pressure solver LOGICAL, INTENT(IN) :: OVE_RELAX ! logical ! switch to activate the VErtical RELAXation LOGICAL, INTENT(IN) :: OVE_RELAX_GRD ! logical @@ -493,7 +495,7 @@ IF (.NOT.L1D) THEN ! PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,PAF, & ! PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & ! PRHODJ,PTHVREF,PZZ,PBFY) - CALL TRIDZ(HLBCX,HLBCY, & + CALL TRIDZ(HLBCX,HLBCY,HPRESOPT, & PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,PAF, & PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & PRHODJ,PTHVREF,PZZ,PBFY,PBFB, & diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index a67a2ee3d0c60ba317bd2fbb11eee85a322fcb72..f88d337e5ac3c136ee0c535b6bee82e5a8cf83ef 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -2539,7 +2539,7 @@ IF (LLG .AND. LINIT_LG .AND. CPROGRAM=='MESONH') & ! ------------------------------------------ ! CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & - XZHAT,XZHATM,CLBCX,CLBCY,XTSTEP, & + XZHAT,XZHATM,CLBCX,CLBCY,CPRESOPT,XTSTEP, & LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV, & LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, & LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV, & diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90 index 28380073c49d0606ad041f27f1c8a725c59f5b61..7d102bc24d345b9ebc368f59dac584752dbb2bb3 100644 --- a/src/MNH/ini_spectren.f90 +++ b/src/MNH/ini_spectren.f90 @@ -891,7 +891,7 @@ ALLOCATE(XALKBAS(0)) ALLOCATE(XALKWBAS(0)) ! CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & - XZHAT,XZHATM,CLBCX,CLBCY,XTSTEP, & + XZHAT,XZHATM,CLBCX,CLBCY,CPRESOPT,XTSTEP, & LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV, & LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, & LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV, & diff --git a/src/MNH/tridz.f90 b/src/MNH/tridz.f90 index 4a74457910674c6edca3bf6f463ba8ed82fda929..e5a6b7429263e0e74b0f1817626eb17a8f0ad350 100644 --- a/src/MNH/tridz.f90 +++ b/src/MNH/tridz.f90 @@ -9,7 +9,7 @@ ! INTERFACE ! - SUBROUTINE TRIDZ(HLBCX,HLBCY, & + SUBROUTINE TRIDZ(HLBCX,HLBCY,HPRESOPT, & PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM, & PAF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & PRHODJ,PTHVREF,PZZ,PBFY,PBFB,& @@ -19,6 +19,7 @@ IMPLICIT NONE ! CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! x-direction LBC type CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type +CHARACTER (LEN=5) :: HPRESOPT ! Choice of the pressure solver ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! Virtual Potential @@ -68,7 +69,7 @@ END INTERFACE END MODULE MODI_TRIDZ ! ! ################################################################### - SUBROUTINE TRIDZ(HLBCX,HLBCY, & + SUBROUTINE TRIDZ(HLBCX,HLBCY,HPRESOPT, & PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM, & PAF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & PRHODJ,PTHVREF,PZZ,PBFY,PBFB,& @@ -199,6 +200,7 @@ IMPLICIT NONE ! CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! x-direction LBC type CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type +CHARACTER (LEN=5) :: HPRESOPT ! Choice of the pressure solver ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! Virtual Potential @@ -573,8 +575,10 @@ DEALLOCATE(ZEIGENX_ll) ! ! PBFY = 1. -PBFB = 1. ! JUAN Z_SLIDE -PBF_SXP2_YP1_Z = 1. ! JUAN Z_SLIDE +IF ( HPRESOPT == 'ZRESI' ) THEN + PBFB = 1. ! JUAN Z_SLIDE + PBF_SXP2_YP1_Z = 1. ! JUAN Z_SLIDE +END IF ! IF (L2D) THEN DO JK= IKB,IKE @@ -614,7 +618,7 @@ ELSE PBFY(1:IYMODEY_ll,1:IXMODEY_ll,IKE+1) = 0.5 * ( PRHOM(IKE) + PRHOM(IKE+1) ) / & ZDZM(IKE+1) **2 ! - +IF ( HPRESOPT == 'ZRESI' ) THEN !JUAN Z_SPLITTING !JUAN for Z splitting we need to do the vertical substitution !JUAN in Bsplitting slides so need PBFB @@ -635,6 +639,7 @@ ELSE ! PBFB(IIB:IIE,IJB:IJE,IKE+1) = 0.5 * ( PRHOM(IKE) + PRHOM(IKE+1) ) / & ZDZM(IKE+1) **2 +END IF ! IF (HLBCX(1) == 'CYCL' .AND. .NOT.(L2D) ) THEN !JUAN @@ -648,7 +653,8 @@ IF (HLBCY(1) == 'CYCL' .AND. .NOT.(L2D) ) THEN JJ = IYMODE_ll -1 ZEIGEN_ll(:,2) = ZEIGEN_ll(:,JJ) END IF - ! +! +IF ( HPRESOPT == 'ZRESI' ) THEN !JUAN Z_SPLITTING !JUAN Z_SPLITTING !JUAN for Z splitting we need to do the vertical substitution @@ -671,7 +677,8 @@ END IF PBF_SXP2_YP1_Z(1:IIU_SXP2_YP1_Z_ll,1:IJU_SXP2_YP1_Z_ll,IKE+1) = 0.5 * ( PRHOM(IKE) + PRHOM(IKE+1) ) / & ZDZM(IKE+1) **2 ! -!JUAN Z_SPLITTING + !JUAN Z_SPLITTING +END IF END IF ! ! second coefficent is meaningless in cyclic case diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index b0db48a149d2815e4161fdade5c34729556e8135..3cc62a7b6039e69f79f9568bbac1433f57db0741 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -1702,7 +1702,7 @@ END IF ! !* 1.10 Diagnostic variables related to the precipitations ! -IF (CPROGRAM /= 'IDEAL') THEN +IF ( (CPROGRAM /= 'IDEAL') .AND. (CPROGRAM /= 'REAL') )THEN IF (ASSOCIATED(XINPRC)) THEN IF (SIZE(XINPRC) /= 0 ) THEN CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)