diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90 index ca327d15c990c80396369f5ad0d79a2c43afeb91..4df321827ad5c381c27968525d0c0e6861015059 100644 --- a/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90 +++ b/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90 @@ -105,6 +105,7 @@ END MODULE MODI_GROUND_PARAM_n !! (J.escobar) 18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n ! (J.escobar) 02/2014 add Forefire coupling !! (G.Delautier) 06/2016 phasage surfex 8 +!! (B.Vie) 2016 LIMA !! (J.Pianezze) 08/2016 add send/recv oasis functions !------------------------------------------------------------------------------- ! @@ -171,6 +172,8 @@ USE MODD_TIME_n USE MODD_TIME USE MODI_TEMPORAL_DIST ! +USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC +! IMPLICIT NONE ! ! @@ -455,8 +458,9 @@ ZRHOA(:,:) = ZPA(:,:)/(XRD * ZTA(:,:) * ((1. + (XRD/XRV)*ZRVA(:,:))/ & ZRAIN=0. ZSNOW=0. IF (NRR>2 .AND. SIZE(XINPRR)>0 ) THEN - IF ((CCLOUD(1:3) == 'ICE' .AND. LSEDIC) .OR. & - ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') .AND. LSEDC)) THEN + IF (( CCLOUD(1:3) == 'ICE' .AND. LSEDIC) .OR. & + ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') .AND. LSEDC) .OR. & + ( CCLOUD=='LIMA' .AND. MSEDC)) THEN ZRAIN = ZRAIN + XINPRR * XRHOLW + XINPRC * XRHOLW ELSE ZRAIN = ZRAIN + XINPRR * XRHOLW diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 index 488502ea3522b5de75249cd979d8aef5b658d078..636dc1a31031e2179b76ad51df20267a15826fe1 100644 --- a/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 +++ b/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 @@ -265,6 +265,7 @@ END MODULE MODI_INI_MODEL_n !! V. Masson Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions !! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files !! Jun. 2016 (G.Delautier) phasage surfex 8 +!! Modification 01/2016 (JP Pinty) Add LIMA !! Aug. 2016 (J.Pianezze) Add SFX_OASIS_READ_NAM function from SurfEx !--------------------------------------------------------------------------------- ! @@ -415,6 +416,7 @@ USE MODD_RELFRC_n USE MODD_2D_FRC ! USE MODE_MPPDB +USE MODI_INIT_AEROSOL_PROPERTIES ! IMPLICIT NONE ! @@ -503,6 +505,12 @@ REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTH ! !* 0. PROLOGUE ! -------- +! Compute relaxation coefficients without changing INI_DYNAMICS nor RELAXDEF +! +IF (CCLOUD == 'LIMA') THEN + LHORELAX_SVC1R3=LHORELAX_SVLIMA +END IF +! ! NULLIFY(TZINITHALO2D_ll) NULLIFY(TZINITHALO3D_ll) @@ -1531,6 +1539,8 @@ ELSE IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0)) END IF ! +IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES +! !------------------------------------------------------------------------------- ! !* 8. INITIALIZE THE PROGNOSTIC FIELDS diff --git a/src/MNH/aircraft_balloon.f90 b/src/MNH/aircraft_balloon.f90 index 972dfeb9f39408fb5496c16ee1ce8bfbd4415b1c..56763877d0106cad356b3a7331a128cec080bc11 100644 --- a/src/MNH/aircraft_balloon.f90 +++ b/src/MNH/aircraft_balloon.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/aircraft_balloon.f90,v $ $Revision: 1.1.10.1.16.1.2.2 $ ! MASDEV4_7 balloon 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ##################### @@ -19,8 +19,7 @@ INTERFACE PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & - PTS, PRHODREF, PCIT, PSPEEDC, PSPEEDR,& - PSPEEDS, PSPEEDG, PSPEEDH, PSEA) + PTS, PRHODREF, PCIT, PSEA) ! USE MODD_TYPE_DATE CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! output listing @@ -47,11 +46,6 @@ REAL, DIMENSION(:,:), INTENT(IN) :: PTS ! surface temperature ! ++ OC REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry air density of the reference state REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed REAL, DIMENSION(:,:),INTENT(IN) :: PSEA ! -- OC ! @@ -69,8 +63,7 @@ END MODULE MODI_AIRCRAFT_BALLOON PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & - PTS, PRHODREF, PCIT, PSPEEDC, PSPEEDR,& - PSPEEDS, PSPEEDG, PSPEEDH, PSEA) + PTS, PRHODREF, PCIT, PSEA) ! ################################################################### ! ! @@ -103,8 +96,6 @@ END MODULE MODI_AIRCRAFT_BALLOON !! Original 15/05/2000 !! !! March, 2008 (P.Lacarrere) Add 3D fluxes -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profiler !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -147,11 +138,6 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE ! turbulent kinetic energy REAL, DIMENSION(:,:), INTENT(IN) :: PTS ! surface temperature REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry air density of the reference state REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed REAL, DIMENSION(:,:),INTENT(IN) :: PSEA ! !------------------------------------------------------------------------------- @@ -171,63 +157,54 @@ IF (TBALLOON1%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON1, PSEA ) ENDIF IF (TBALLOON2%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON2, PSEA ) ENDIF IF (TBALLOON3%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON3, PSEA ) ENDIF IF (TBALLOON4%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON4, PSEA ) ENDIF IF (TBALLOON5%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON5, PSEA ) ENDIF IF (TBALLOON6%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON6, PSEA ) ENDIF IF (TBALLOON7%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON7, PSEA ) ENDIF IF (TBALLOON8%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON8, PSEA ) ENDIF IF (TBALLOON9%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON9, PSEA ) ENDIF ! @@ -235,210 +212,180 @@ IF (TAIRCRAFT1%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT1, PSEA ) ENDIF IF (TAIRCRAFT2%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT2, PSEA ) ENDIF IF (TAIRCRAFT3%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT3, PSEA ) ENDIF IF (TAIRCRAFT4%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT4, PSEA ) ENDIF IF (TAIRCRAFT5%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT5, PSEA ) ENDIF IF (TAIRCRAFT6%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT6, PSEA ) ENDIF IF (TAIRCRAFT7%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT7, PSEA ) ENDIF IF (TAIRCRAFT8%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT8, PSEA ) ENDIF IF (TAIRCRAFT9%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT9, PSEA ) ENDIF IF (TAIRCRAFT10%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT10, PSEA ) ENDIF IF (TAIRCRAFT11%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT11, PSEA ) ENDIF IF (TAIRCRAFT12%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT12, PSEA ) ENDIF IF (TAIRCRAFT13%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT13, PSEA ) ENDIF IF (TAIRCRAFT14%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT14, PSEA ) ENDIF IF (TAIRCRAFT15%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT15, PSEA ) ENDIF IF (TAIRCRAFT16%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT16, PSEA ) ENDIF IF (TAIRCRAFT17%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT17, PSEA ) ENDIF IF (TAIRCRAFT18%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT18, PSEA ) ENDIF IF (TAIRCRAFT19%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT19, PSEA ) ENDIF IF (TAIRCRAFT20%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT20, PSEA ) ENDIF IF (TAIRCRAFT21%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT21, PSEA ) ENDIF IF (TAIRCRAFT22%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT22, PSEA ) ENDIF IF (TAIRCRAFT23%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT23, PSEA ) ENDIF IF (TAIRCRAFT24%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT24, PSEA ) ENDIF IF (TAIRCRAFT25%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT25, PSEA ) ENDIF IF (TAIRCRAFT26%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT26, PSEA ) ENDIF IF (TAIRCRAFT27%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT27, PSEA ) ENDIF IF (TAIRCRAFT28%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT28, PSEA ) ENDIF IF (TAIRCRAFT29%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT29, PSEA ) ENDIF IF (TAIRCRAFT30%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT30, PSEA ) ENDIF ! diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90 index 39ae67b11d0c73dafdce50b39c33b92e3519c770..27fb7547c8c5c6ebcba6da3b0caf4a62db2089e2 100644 --- a/src/MNH/aircraft_balloon_evol.f90 +++ b/src/MNH/aircraft_balloon_evol.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/aircraft_balloon_evol.f90,v $ $Revision: 1.1.8.1.2.4.2.1.10.1.2.4 $ ! MASDEV4_7 balloon 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ########################## @@ -19,10 +19,7 @@ INTERFACE PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & - PTS, PRHODREF, PCIT, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, & - PSPEEDH, & - TPFLYER, PSEA ) + PTS, PRHODREF, PCIT,TPFLYER, PSEA ) ! USE MODD_TYPE_DATE USE MODD_AIRCRAFT_BALLOON @@ -50,11 +47,6 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE ! turbulent kinetic energy REAL, DIMENSION(:,:), INTENT(IN) :: PTS ! surface temperature REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry air density of the reference state REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed ! TYPE(FLYER), INTENT(INOUT) :: TPFLYER! balloon/aircraft REAL, DIMENSION(:,:), INTENT(IN) :: PSEA @@ -73,10 +65,7 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & - PTS, PRHODREF, PCIT, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, & - PSPEEDH, & - TPFLYER, PSEA ) + PTS, PRHODREF, PCIT,TPFLYER, PSEA ) ! ######################################################## ! ! @@ -139,9 +128,10 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL !! April, 2014 (C.Lac) allow RARE calculation only if CCLOUD=ICE3 !! May, 2014 (O.Caumont) modify RARE for hydrometeors containing ice !! add bright band calculation for RARE -!! Feb, 2015 (C.Lac) Correction to prevent aircraft crash +!! Feb, 2015 (C.Lac) Correction to prevent aircraft crash !! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for !! aircraft, ballon and profiler +!! October, 2016 (G.DELAUTIER) LIMA !! !! -------------------------------------------------------------------------- ! @@ -176,6 +166,17 @@ USE MODE_FSCATTER,ONLY : QEPSW,QEPSI,BHMIE,MOMG,MG USE MODE_FGAU, ONLY : GAULAG USE MODD_REF_n, ONLY : XRHODREF USE MODI_GAMMA, ONLY : GAMMA +USE MODD_PARAM_LIMA_WARM, ONLY: XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XAR_L=>XAR,& + XBC_L=>XBC,XAC_L=>XAC +USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,& + XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,& + XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS + +USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,& + XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG +USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,& + XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,& + XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC ! USE MODE_ll USE MODE_IO_ll @@ -186,6 +187,8 @@ USE MODI_TEMPORAL_DIST ! USE MODD_NESTING ! +USE MODD_NSV, ONLY : NSV_LIMA_NI,NSV_LIMA_NR,NSV_LIMA_NC +! IMPLICIT NONE ! ! @@ -215,11 +218,6 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE ! turbulent kinetic energy REAL, DIMENSION(:,:), INTENT(IN) :: PTS ! surface temperature REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry air density of the reference state REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed ! TYPE(FLYER), INTENT(INOUT) :: TPFLYER! balloon/aircraft REAL, DIMENSION(:,:), INTENT(IN) :: PSEA @@ -325,6 +323,7 @@ INTEGER :: IRESP ! return code REAL, DIMENSION(SIZE(PR,3)) :: ZTEMPZ! vertical profile of temperature REAL, DIMENSION(SIZE(PR,3)) :: ZRHODREFZ ! vertical profile of dry air density of the reference state REAL, DIMENSION(SIZE(PR,3)) :: ZCIT ! pristine ice concentration +REAL, DIMENSION(SIZE(PR,3)) :: ZCCI,ZCCR,ZCCC ! ICE,RAIN CLOUD concentration (LIMA) REAL, DIMENSION(SIZE(PR,1),SIZE(PR,2),SIZE(PR,3)) :: ZR REAL, DIMENSION(SIZE(PR,3),SIZE(PR,4)+1) :: ZRZ ! vertical profile of hydrometeor mixing ratios REAL :: ZA,ZB,ZCC,ZCX,ZALPHA,ZNU,ZLB,ZLBEX,ZRHOHYD ! generic microphysical parameters @@ -340,6 +339,7 @@ REAL :: ZFW ! liquid fraction REAL :: ZFPW ! weight for mixed-phase reflectivity REAL,DIMENSION(:),ALLOCATABLE :: ZX,ZW ! Gauss-Laguerre points and weights REAL,DIMENSION(:),ALLOCATABLE :: ZRTMIN ! local values for XRTMIN +LOGICAL :: GCALC !---------------------------------------------------------------------------- ! !* 1. PRELIMINARIES @@ -1008,24 +1008,31 @@ IF ( TPFLYER%FLY) THEN DO JLOOP=1,SIZE(PR,4) TPFLYER%RZ (IN,:,JLOOP) = FLYER_INTERPZ(PR(:,:,:,JLOOP)) END DO - TPFLYER%CIZ (IN,:) = FLYER_INTERPZ(PCIT(:,:,:)) - TPFLYER%FFZ (IN,:) = FLYER_INTERPZ(SQRT(PU**2+PV**2)) - TPFLYER%CIZ (IN,:) = FLYER_INTERPZ(PCIT(:,:,:)) - TPFLYER%SPEEDCZ (IN,:) = FLYER_INTERPZ(PSPEEDC(:,:,:)) - TPFLYER%SPEEDRZ (IN,:) = FLYER_INTERPZ(PSPEEDR(:,:,:)) - TPFLYER%SPEEDSZ (IN,:) = FLYER_INTERPZ(PSPEEDS(:,:,:)) - TPFLYER%SPEEDGZ (IN,:) = FLYER_INTERPZ(PSPEEDG(:,:,:)) - ! initialization CRARE and CRARE_ATT + ! Fin Modifs ON + TPFLYER%FFZ (IN,:) = FLYER_INTERPZ(SQRT(PU**2+PV**2)) + IF (CCLOUD=="LIMA") THEN + TPFLYER%CIZ (IN,:) = FLYER_INTERPZ(PSV(:,:,:,NSV_LIMA_NI)) + TPFLYER%CCZ (IN,:) = FLYER_INTERPZ(PSV(:,:,:,NSV_LIMA_NC)) + TPFLYER%CRZ (IN,:) = FLYER_INTERPZ(PSV(:,:,:,NSV_LIMA_NR)) + ELSE + TPFLYER%CIZ (IN,:) = FLYER_INTERPZ(PCIT(:,:,:)) + ENDIF + ! initialization CRARE and CRARE_ATT + LWC and IWC TPFLYER%CRARE(IN,:) = 0. TPFLYER%CRARE_ATT(IN,:) = 0. TPFLYER%LWCZ (IN,:) = 0. TPFLYER%IWCZ (IN,:) = 0. - IF (CCLOUD=="ICE3") THEN ! only for ICE3 - TPFLYER%LWCZ (IN,:) = FLYER_INTERPZ((PR(:,:,:,2)+PR(:,:,:,3))*PRHODREF(:,:,:)) - TPFLYER%IWCZ (IN,:) = FLYER_INTERPZ((PR(:,:,:,4)+PR(:,:,:,5)+PR(:,:,:,6))*PRHODREF(:,:,:)) - ZTEMPZ(:)=FLYER_INTERPZ(PTH(II:II+1,IJ:IJ+1,:) * ZEXN(:,:,:)) + IF (CCLOUD=="LIMA" .OR. CCLOUD=="ICE3" ) THEN ! only for ICE3 and LIMA + TPFLYER%LWCZ (IN,:) = FLYER_INTERPZ((PR(:,:,:,2)+PR(:,:,:,3))*PRHODREF(:,:,:)) + TPFLYER%IWCZ (IN,:) = FLYER_INTERPZ((PR(:,:,:,4)+PR(:,:,:,5)+PR(:,:,:,6))*PRHODREF(:,:,:)) + ZTEMPZ(:)=FLYER_INTERPZ(PTH(II:II+1,IJ:IJ+1,:) * ZEXN(:,:,:)) ZRHODREFZ(:)=FLYER_INTERPZ(PRHODREF(:,:,:)) ZCIT(:)=FLYER_INTERPZ(PCIT(:,:,:)) + IF (CCLOUD=="LIMA") THEN + ZCCI(:)=FLYER_INTERPZ(PSV(:,:,:,NSV_LIMA_NI)) + ZCCR(:)=FLYER_INTERPZ(PSV(:,:,:,NSV_LIMA_NR)) + ZCCC(:)=FLYER_INTERPZ(PSV(:,:,:,NSV_LIMA_NC)) + ENDIF DO JLOOP=3,6 ZRZ(:,JLOOP)=FLYER_INTERPZ(PR(:,:,:,JLOOP)) END DO @@ -1041,20 +1048,45 @@ IF ( TPFLYER%FLY) THEN CALL GAULAG(JPTS_GAULAG,ZX,ZW) ! for integration over diameters ! initialize minimum values ALLOCATE(ZRTMIN(SIZE(PR,4)+1)) - ZRTMIN(2)=XRTMIN_I(2) ! cloud water over sea - ZRTMIN(3)=XRTMIN_I(3) - ZRTMIN(4)=XRTMIN_I(4) - ZRTMIN(5)=1E-10 - ZRTMIN(6)=XRTMIN_I(6) - ZRTMIN(7)=XRTMIN_I(2) ! cloud water over land ZRTMIN(2)=XRTMIN(2) ! cloud water over sea + IF (CCLOUD == 'LIMA') THEN + ZRTMIN(2)=XRTMIN_L(2) ! cloud water over sea + ZRTMIN(3)=XRTMIN_L(3) + ZRTMIN(4)=XRTMIN_L(4) + ZRTMIN(5)=1E-10 + ZRTMIN(6)=XRTMIN_L(6) + ZRTMIN(7)=XRTMIN_L(2) ! cloud water over land + ELSE + ZRTMIN(2)=XRTMIN_I(2) ! cloud water over sea + ZRTMIN(3)=XRTMIN_I(3) + ZRTMIN(4)=XRTMIN_I(4) + ZRTMIN(5)=1E-10 + ZRTMIN(6)=XRTMIN_I(6) + ZRTMIN(7)=XRTMIN_I(2) ! cloud water over land + ENDIF ! compute cloud radar reflectivity from vertical profiles of temperature and mixing ratios DO JK=1,IKU QMW=SQRT(QEPSW(ZTEMPZ(JK),XLIGHTSPEED/XLAM_CRAD)) QMI=SQRT(QEPSI(ZTEMPZ(JK),XLIGHTSPEED/XLAM_CRAD)) DO JLOOP=2,7 - IF(ZRZ(JK,JLOOP)>ZRTMIN(JLOOP).AND.(JLOOP.NE.4.OR.ZCIT(JK)>0.)) THEN + IF (CCLOUD == 'LIMA') THEN + GCALC=(ZRZ(JK,JLOOP)>ZRTMIN(JLOOP).AND.(JLOOP.NE.4.OR.ZCCI(JK)>0.).AND.& + (JLOOP.NE.3.OR.ZCCR(JK)>0.).AND.((JLOOP.NE.2.AND. JLOOP.NE.7).OR.ZCCC(JK)>0.)) + ELSE + GCALC=(ZRZ(JK,JLOOP)>ZRTMIN(JLOOP).AND.(JLOOP.NE.4.OR.ZCIT(JK)>0.)) + ENDIF + IF(GCALC) THEN SELECT CASE(JLOOP) CASE(2) ! cloud water over sea + IF (CCLOUD == 'LIMA') THEN + ZA=XAC_L + ZB=XBC_L + ZCC=ZCCC(JK)*ZRHODREFZ(JK) + ZCX=0. + ZALPHA=XALPHAC_L + ZNU=XNUC_L + ZLBEX=1.0/(ZCX-ZB) + ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) + ELSE ZA=XAC_I ZB=XBC_I ZCC=XCONC_SEA @@ -1063,7 +1095,18 @@ IF ( TPFLYER%FLY) THEN ZNU=XNUC2_I ZLBEX=1.0/(ZCX-ZB) ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) + ENDIF CASE(3) ! rain water + IF (CCLOUD == 'LIMA') THEN + ZA=XAR_L + ZB=XBR_L + ZCC=ZCCR(JK)*ZRHODREFZ(JK) + ZCX=0. + ZALPHA=XALPHAR_L + ZNU=XNUR_L + ZLBEX=1.0/(ZCX-ZB) + ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) + ELSE ZA=XAR_I ZB=XBR_I ZCC=XCCR_I @@ -1072,7 +1115,19 @@ IF ( TPFLYER%FLY) THEN ZNU=XNUR_I ZLB=XLBR_I ZLBEX=XLBEXR_I + ENDIF CASE(4) ! pristine ice + IF (CCLOUD == 'LIMA') THEN + ZA=XAI_L + ZB=XBI_L + ZCC=ZCCI(JK)*ZRHODREFZ(JK) + ZCX=0. + ZALPHA=XALPHAI_L + ZNU=XNUI_L + ZLBEX=1.0/(ZCX-ZB) + ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) ! because ZCC not included in XLBI + ZFW=0 + ELSE ZA=XAI_I ZB=XBI_I ZCC=ZCIT(JK) @@ -1082,7 +1137,19 @@ IF ( TPFLYER%FLY) THEN ZLBEX=XLBEXI_I ZLB=XLBI_I*ZCC**(-ZLBEX) ! because ZCC not included in XLBI ZFW=0 + ENDIF CASE(5) ! snow + IF (CCLOUD == 'LIMA') THEN + ZA=XAS_L + ZB=XBS_L + ZCC=XCCS_L + ZCX=XCXS_L + ZALPHA=XALPHAS_L + ZNU=XNUS_L + ZLB=XLBS_L + ZLBEX=XLBEXS_L + ZFW=0 + ELSE ZA=XAS_I ZB=XBS_I ZCC=XCCS_I @@ -1092,6 +1159,7 @@ IF ( TPFLYER%FLY) THEN ZLB=XLBS_I ZLBEX=XLBEXS_I ZFW=0 + ENDIF CASE(6) ! graupel !If temperature between -10 and 10°C and Mr and Mg over min threshold: melting graupel ! with liquid water fraction Fw=Mr/(Mr+Mg) else dry graupel (Fw=0) @@ -1101,6 +1169,16 @@ IF ( TPFLYER%FLY) THEN ELSE ZFW=0 ENDIF + IF (CCLOUD == 'LIMA') THEN + ZA=XAG_L + ZB=XBG_L + ZCC=XCCG_L + ZCX=XCXG_L + ZALPHA=XALPHAG_L + ZNU=XNUG_L + ZLB=XLBG_L + ZLBEX=XLBEXG_L + ELSE ZA=XAG_I ZB=XBG_I ZCC=XCCG_I @@ -1109,7 +1187,18 @@ IF ( TPFLYER%FLY) THEN ZNU=XNUG_I ZLB=XLBG_I ZLBEX=XLBEXG_I + ENDIF CASE(7) ! cloud water over land + IF (CCLOUD == 'LIMA') THEN + ZA=XAC_L + ZB=XBC_L + ZCC=ZCCC(JK)*ZRHODREFZ(JK) + ZCX=0. + ZALPHA=XALPHAC_L + ZNU=XNUC_L + ZLBEX=1.0/(ZCX-ZB) + ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) + ELSE ZA=XAC_I ZB=XBC_I ZCC=XCONC_LAND @@ -1118,6 +1207,7 @@ IF ( TPFLYER%FLY) THEN ZNU=XNUC_I ZLBEX=1.0/(ZCX-ZB) ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) + ENDIF END SELECT ZLBDA=ZLB*(ZRHODREFZ(JK)*ZRZ(JK,JLOOP))**ZLBEX ZREFLOC=0. @@ -1386,12 +1476,12 @@ IF ( GSTORE ) THEN ENDDO CALL DISTRIBUTE_FLYER(TPFLYER%FFZ (IN,JLOOP)) CALL DISTRIBUTE_FLYER(TPFLYER%CIZ (IN,JLOOP)) + IF (CCLOUD== 'LIMA' ) THEN + CALL DISTRIBUTE_FLYER(TPFLYER%CRZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%CCZ (IN,JLOOP)) + ENDIF CALL DISTRIBUTE_FLYER(TPFLYER%IWCZ (IN,JLOOP)) CALL DISTRIBUTE_FLYER(TPFLYER%LWCZ (IN,JLOOP)) - CALL DISTRIBUTE_FLYER(TPFLYER%SPEEDCZ (IN,JLOOP)) - CALL DISTRIBUTE_FLYER(TPFLYER%SPEEDRZ (IN,JLOOP)) - CALL DISTRIBUTE_FLYER(TPFLYER%SPEEDSZ (IN,JLOOP)) - CALL DISTRIBUTE_FLYER(TPFLYER%SPEEDGZ (IN,JLOOP)) CALL DISTRIBUTE_FLYER(TPFLYER%CRARE (IN,JLOOP)) CALL DISTRIBUTE_FLYER(TPFLYER%CRARE_ATT (IN,JLOOP)) CALL DISTRIBUTE_FLYER(TPFLYER%WZ (IN,JLOOP)) diff --git a/src/MNH/boundaries.f90 b/src/MNH/boundaries.f90 index ea327bccbb4525a4b0e4d0b10634a748979566c4..e40949d5e7a522683d6df30670dd4a28c6a8703d 100644 --- a/src/MNH/boundaries.f90 +++ b/src/MNH/boundaries.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/boundaries.f90,v $ $Revision: 1.3.2.1.2.1.2.2.12.3 $ $Date: 2014/01/09 15:01:54 $ !----------------------------------------------------------------- !##################### MODULE MODI_BOUNDARIES @@ -171,6 +171,7 @@ END MODULE MODI_BOUNDARIES !! for non normal velocity and potential temp !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! Redelsperger & Pianezze : 08/2015 : add XPOND coefficient +!! Modification 01/2016 (JP Pinty) Add LIMA that is LBC for CCN and IFN !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -188,8 +189,11 @@ USE MODD_CONDSAMP, ONLY : LCONDSAMP USE MODD_ELEC_DESCR USE MODD_ELEC_n USE MODD_REF_n -USE MODD_PARAM_n, ONLY : CELEC +USE MODD_PARAM_n, ONLY : CELEC,CCLOUD USE MODD_LBC_n, ONLY : XPOND +! +USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND, LWARM, LCOLD +! #ifdef MNH_FOREFIRE USE MODD_FOREFIRE, ONLY : LFOREFIRE #endif @@ -262,7 +266,7 @@ REAL :: ZPOND ! Coeff PONDERATION LS INTEGER :: ILBX,ILBY ! size of LB fields' arrays LOGICAL, SAVE, DIMENSION(:), ALLOCATABLE :: GCHBOUNDARY, GAERBOUNDARY,& GDSTBOUNDARY, GSLTBOUNDARY, GPPBOUNDARY, & - GCSBOUNDARY, GICBOUNDARY + GCSBOUNDARY, GICBOUNDARY, GLIMABOUNDARY LOGICAL, SAVE :: GFIRSTCALL1 = .TRUE. LOGICAL, SAVE :: GFIRSTCALL2 = .TRUE. LOGICAL, SAVE :: GFIRSTCALL3 = .TRUE. @@ -270,6 +274,7 @@ LOGICAL, SAVE :: GFIRSTCALL5 = .TRUE. LOGICAL, SAVE :: GFIRSTCALLPP = .TRUE. LOGICAL, SAVE :: GFIRSTCALLCS = .TRUE. LOGICAL, SAVE :: GFIRSTCALLIC = .TRUE. +LOGICAL, SAVE :: GFIRSTCALLLIMA = .TRUE. ! REAL, DIMENSION(SIZE(PLBXWM,1),SIZE(PLBXWM,2),SIZE(PLBXWM,3)) :: & ZLBXVT,ZLBXWT,ZLBXTHT @@ -290,6 +295,9 @@ REAL, DIMENSION(SIZE(PLBYSVM,1),SIZE(PLBYSVM,2),SIZE(PLBYSVM,3),SIZE(PLBYSVM,4)) LOGICAL :: GCHTMP LOGICAL :: GPPTMP LOGICAL :: GCSTMP +! +LOGICAL, SAVE :: GFIRSTCALL4 = .TRUE. +! #ifdef MNH_FOREFIRE LOGICAL, SAVE, DIMENSION(:), ALLOCATABLE :: GFFBOUNDARY LOGICAL, SAVE :: GFIRSTCALLFF = .TRUE. @@ -855,6 +863,36 @@ END SELECT END IF ! ! +IF (CCLOUD == 'LIMA' .AND. IMI == 1) THEN + IF (GFIRSTCALLLIMA) THEN + ALLOCATE(GLIMABOUNDARY(NSV_LIMA)) + GFIRSTCALLLIMA = .FALSE. + DO JSV=NSV_LIMA_BEG,NSV_LIMA_END + GCHTMP = .FALSE. + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) + GLIMABOUNDARY(JSV-NSV_LIMA_BEG+1) = GCHTMP + ENDDO + ENDIF + + DO JSV=NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1 ! LBC for CCN from MACC + IF (GLIMABOUNDARY(JSV-NSV_LIMA_CCN_FREE+1)) THEN + IF (SIZE(PSVT)>0) THEN + CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV)) + ENDIF + ENDIF + ENDDO + DO JSV=NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1 ! LBC for IFN from MACC + IF (GLIMABOUNDARY(JSV-NSV_LIMA_IFN_FREE+1)) THEN + IF (SIZE(PSVT)>0) THEN + CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV)) + ENDIF + ENDIF + ENDDO +ENDIF +! IF (LUSECHEM .AND. IMI == 1) THEN IF (GFIRSTCALL1) THEN ALLOCATE(GCHBOUNDARY(NSV_CHEM)) diff --git a/src/MNH/deallocate_model1.f90 b/src/MNH/deallocate_model1.f90 index d5033dc2e0f1ec9cfb36f724a30094a6d3e4168f..3a3ca61530705ca3c607776b9f4153c6326f9379 100644 --- a/src/MNH/deallocate_model1.f90 +++ b/src/MNH/deallocate_model1.f90 @@ -90,7 +90,7 @@ USE MODD_PRECIP_n USE MODD_ELEC_n USE MODD_PASPOL_n USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR +USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN_ICE=>XRTMIN USE MODE_MODELN_HANDLER ! ! Modif 2D @@ -104,6 +104,11 @@ USE MODD_RELFRC_n USE MODD_ADV_n USE MODD_PAST_FIELD_n USE MODD_TURB_n +! LIMA +!USE MODD_PARAM_LIMA_WARM +!USE MODD_LIMA_PRECIP_SCAVENGING_n +!USE MODD_PARAM_LIMA +!USE MODD_PARAM_LIMA_MIXED IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -512,8 +517,8 @@ END IF ! !* 14. Modules RAIN_ICE_DESCR and MODD_RAIN_ICE_PARAM ! -IF ( ALLOCATED(XRTMIN) .AND. KCALL == 4 ) THEN - DEALLOCATE( XRTMIN ) +IF ( ALLOCATED(XRTMIN_ICE) .AND. KCALL == 4 ) THEN + DEALLOCATE( XRTMIN_ICE ) DEALLOCATE( XGAMINC_RIM1 ) DEALLOCATE( XGAMINC_RIM2 ) DEALLOCATE( XKER_RACCSS ) @@ -538,6 +543,52 @@ IF ( KCALL==3 ) THEN IF (ASSOCIATED(XDISS)) DEALLOCATE(XDISS) IF (ASSOCIATED(XLEM)) DEALLOCATE(XLEM) END IF +! +!* 17. Module LIMA +! +!IF ( KCALL == 4 ) THEN +! IF (ALLOCATED(XHYPF12)) DEALLOCATE(XHYPF12 ) +! IF (ALLOCATED(XHYPF32)) DEALLOCATE(XHYPF32 ) +! IF (ALLOCATED(XAHENG)) DEALLOCATE(XAHENG ) +! IF (ALLOCATED(XPSI1)) DEALLOCATE(XPSI1 ) +! IF (ALLOCATED(XPSI3)) DEALLOCATE(XPSI3 ) +! IF (ALLOCATED(XAHENF)) DEALLOCATE(XAHENF ) +! IF (ALLOCATED(XAHENY)) DEALLOCATE(XAHENY ) +! IF (ALLOCATED(XCONCC_INI)) DEALLOCATE( XCONCC_INI) +! IF (ALLOCATED(XCONCR_PARAM_INI)) DEALLOCATE(XCONCR_PARAM_INI ) +! IF (ASSOCIATED(XINPAP)) DEALLOCATE(XINPAP) +! IF (ASSOCIATED(XACPAP)) DEALLOCATE(XACPAP) +! IF (ALLOCATED(NIMM)) DEALLOCATE( NIMM) +! IF (ALLOCATED(NINDICE_CCN_IMM)) DEALLOCATE(NINDICE_CCN_IMM ) +! IF (ALLOCATED(NSPECIE)) DEALLOCATE(NSPECIE ) +! IF (ALLOCATED(XMDIAM_IFN)) DEALLOCATE(XMDIAM_IFN ) +! IF (ALLOCATED(XSIGMA_IFN)) DEALLOCATE( XSIGMA_IFN) +! IF (ALLOCATED(XRHO_IFN)) DEALLOCATE(XRHO_IFN ) +! IF (ALLOCATED(XFRAC)) DEALLOCATE(XFRAC ) +! IF (ALLOCATED(XFRAC_REF)) DEALLOCATE(XFRAC_REF ) +! IF (ALLOCATED(XABSCISS)) DEALLOCATE(XABSCISS ) +! IF (ALLOCATED(XWEIGHT)) DEALLOCATE(XWEIGHT ) +! IF (ALLOCATED(XR_MEAN_CCN)) DEALLOCATE(XR_MEAN_CCN ) +! IF (ALLOCATED(XLOGSIG_CCN)) DEALLOCATE(XLOGSIG_CCN ) +! IF (ALLOCATED(XRHO_CCN)) DEALLOCATE(XRHO_CCN ) +! IF (ALLOCATED(XKHEN_MULTI)) DEALLOCATE(XKHEN_MULTI ) +! IF (ALLOCATED(XMUHEN_MULTI)) DEALLOCATE(XMUHEN_MULTI ) +! IF (ALLOCATED(XBETAHEN_MULTI)) DEALLOCATE(XBETAHEN_MULTI ) +! IF (ALLOCATED(XCONC_CCN_TOT)) DEALLOCATE(XCONC_CCN_TOT ) +! IF (ALLOCATED(XLIMIT_FACTOR)) DEALLOCATE(XLIMIT_FACTOR ) +! IF (ALLOCATED(XRTMIN)) DEALLOCATE(XRTMIN ) +! IF (ALLOCATED(XCTMIN)) DEALLOCATE(XCTMIN ) +! IF (ALLOCATED(XGAMINC_RIM1)) DEALLOCATE(XGAMINC_RIM1 ) +! IF (ALLOCATED(XGAMINC_RIM2)) DEALLOCATE( XGAMINC_RIM2) +! IF (ALLOCATED(XGAMINC_HMC)) DEALLOCATE(XGAMINC_HMC ) +! IF (ALLOCATED(XKER_RACCSS)) DEALLOCATE(XKER_RACCSS ) +! IF (ALLOCATED(XKER_RACCS)) DEALLOCATE(XKER_RACCS ) +! IF (ALLOCATED(XKER_SACCRG)) DEALLOCATE(XKER_SACCRG ) +! IF (ALLOCATED(XKER_SDRYG)) DEALLOCATE(XKER_SDRYG ) +! IF (ALLOCATED(XKER_RDRYG)) DEALLOCATE(XKER_RDRYG ) +! IF (ALLOCATED(XKER_SWETH)) DEALLOCATE(XKER_SWETH ) +! IF (ALLOCATED(XKER_GWETH)) DEALLOCATE(XKER_GWETH ) +!ENDIF !------------------------------------------------------------------------------- ! CALL GOTO_MODEL(IMI) diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90 index c99ba20e770585e62f48dfc7aeb59936e515c970..42d98ea0e3b26707fee2e1d3730b657ea201bb6f 100644 --- a/src/MNH/default_desfmn.f90 +++ b/src/MNH/default_desfmn.f90 @@ -209,6 +209,7 @@ END MODULE MODI_DEFAULT_DESFM_n !! 07/2013 (Bosseur & Filippi) adds Forefire !! 08/2015 (Redelsperger & Pianezze) add XPOND coefficient for LBC !! 04/2016 (C.LAC) negative contribution to the budget splitted between advection, turbulence and microphysics for KHKO/C2R2 +!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -249,6 +250,23 @@ USE MODD_PASPOL USE MODD_CONDSAMP USE MODD_MEAN_FIELD USE MODD_DRAGTREE +! +! +USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS,& + NMOD_IFN, XIFN_CONC, LIFN_HOM, CIFN_SPECIES, & + CINT_MIXING, NMOD_IMM, NIND_SPECIE, & + CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & + XFACTNUC_DEP, XFACTNUC_CON, & + OWARM=>LWARM, LACTI, ORAIN=>LRAIN, OSEDC=>LSEDC, & + OACTIT=>LACTIT, LBOUND, NMOD_CCN, XCCN_CONC, & + LCCN_HOM, CCCN_MODES, & + YALPHAR=>XALPHAR, YNUR=>XNUR, & + YALPHAC=>XALPHAC, YNUC=>XNUC, CINI_CCN=>HINI_CCN, & + CTYPE_CCN=>HTYPE_CCN, YFSOLUB_CCN=>XFSOLUB_CCN, & + YACTEMP_CCN=>XACTEMP_CCN, YAERDIFF=>XAERDIFF, & + YAERHEIGHT=>XAERHEIGHT, & + LSCAV, LAERO_MASS, NPHILLIPS +! USE MODD_LATZ_EDFLX USE MODD_2D_FRC #ifdef MNH_FOREFIRE @@ -386,6 +404,9 @@ LHORELAX_SVSLT = .FALSE. LHORELAX_SVPP = .FALSE. LHORELAX_SVCS = .FALSE. LHORELAX_SVAER = .FALSE. +! +LHORELAX_SVLIMA = .FALSE. +! #ifdef MNH_FOREFIRE LHORELAX_SVFF = .FALSE. #endif @@ -1052,6 +1073,68 @@ ENDIF ! !------------------------------------------------------------------------------- ! +!* 19.BIS SET DEFAULT VALUES FOR MODD_PARAM_LIMA : +! ---------------------------------------- +! +IF (KMI == 1) THEN + YNUC = 1.0 + YALPHAC = 3.0 + YNUR = 2.0 + YALPHAR = 1.0 +! + OWARM = .TRUE. + LACTI = .TRUE. + ORAIN = .TRUE. + OSEDC = .TRUE. + OACTIT = .FALSE. + LBOUND = .FALSE. +! + CINI_CCN = 'XXX' + CTYPE_CCN(:) = 'X' +! + YAERDIFF = 0.0 + YAERHEIGHT = 2000. +! YR_MEAN_CCN = 0.0 ! In case of 'CCN' initialization +! YLOGSIG_CCN = 0.0 + YFSOLUB_CCN = 1.0 + YACTEMP_CCN = 280. +! + NMOD_CCN = 1 +! +!* AP Scavenging +! + LSCAV = .FALSE. + LAERO_MASS = .FALSE. +! + LCCN_HOM = .TRUE. + CCCN_MODES = '' + XCCN_CONC(:)=0. +ENDIF +! +IF (KMI == 1) THEN + LHHONI = .FALSE. + LCOLD = .TRUE. + LNUCL = .TRUE. + LSEDI = .TRUE. + LSNOW = .TRUE. + LHAIL = .FALSE. + CPRISTINE_ICE_LIMA = 'PLAT' + CHEVRIMED_ICE_LIMA = 'GRAU' + XFACTNUC_DEP = 1.0 + XFACTNUC_CON = 1.0 + NMOD_IFN = 1 + NIND_SPECIE = 1 + LMEYERS = .FALSE. + LIFN_HOM = .TRUE. + CIFN_SPECIES = 'PHILLIPS' + CINT_MIXING = '' + XIFN_CONC(:) = 0. + NMOD_IMM = 0 + NPHILLIPS=8 +ENDIF +! +!------------------------------------------------------------------------------- +! !* 20. SET DEFAULT VALUES FOR MODD_CH_MNHC_n ! ------------------------------------- ! diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index b74d9be93abfb67033973409eb3bedd84c051d03..2752a91a5809a7d00e57d7c5f270320b1894a2df 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -75,6 +75,7 @@ !! 09/2015 (S. Bielli) Add netcdf call for phys_param !! 04/2016 (G.Delautier) replace print by write in OUTPUT LISTING !! 06/2016 (G.Delautier) phasage surfex 8 +!! 09/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -118,6 +119,7 @@ USE MODD_LES USE MODD_LES_BUDGET USE MODD_BUDGET USE MODD_RADAR +USE MODD_PARAM_LIMA, ONLY : LLIMA_DIAG ! USE MODN_DIAG_BLANK ! @@ -198,7 +200,6 @@ LOGICAL, DIMENSION(:,:),ALLOCATABLE :: GMASKkids ! kids domains mask INTEGER :: IIU, IJU, IKU INTEGER :: IINFO_ll ! return code for _ll routines REAL, DIMENSION(:,:),ALLOCATABLE :: ZSEA,ZTOWN -REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZWORK ! NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS, & NCONV_KF, NRAD_3D, CRAD_SAT, NRTTOVINFO, LRAD_SUBG_COND, & @@ -221,7 +222,7 @@ NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS, & XGRID,NBELEV,XELEV,NBRAD,LQUAD,LFALL,LWBSCS,LWREFL,& XREFLMIN,XREFLVDOPMIN,LSNRT,XSNRMIN,& LLIDAR,CVIEW_LIDAR,XALT_LIDAR,XWVL_LIDAR,& - LISOPR,XISOPR,LISOTH,XISOTH, LHU_FLX + LISOPR,XISOPR,LISOTH,XISOTH, LHU_FLX, LLIMA_DIAG ! NAMELIST/NAM_DIAG_FILE/ YINIFILE,YINIFILEPGD, YSUFFIX NAMELIST/NAM_STO_FILE/ CFILES, NSTART_SUPP @@ -291,6 +292,7 @@ LCHAQDIAG=.FALSE. XCHEMLAT(:)=XUNDEF XCHEMLON(:)=XUNDEF LTRAJ=.FALSE. +LLIMA_DIAG=.FALSE. ! LAIRCRAFT_BALLOON=.FALSE. NTIME_AIRCRAFT_BALLOON=NUNDEF @@ -549,9 +551,8 @@ IF ( LAIRCRAFT_BALLOON ) THEN TDTEXP, TDTMOD, TDTCUR, TXDTBAL, & XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, & XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, & - XTKET, XTSRAD, XRHODREF,XCIT, & - ZWORK,ZWORK,ZWORK,ZWORK,ZWORK,ZSEA) - DEALLOCATE (ZSEA,ZTOWN,ZWORK) + XTKET, XTSRAD, XRHODREF,XCIT,ZSEA) + DEALLOCATE (ZSEA,ZTOWN) ! !----------------------------- ! diff --git a/src/MNH/ecmwf_radiation_vers2.f90 b/src/MNH/ecmwf_radiation_vers2.f90 index e71720023a3ce3ad710b62e587c7301677f4577f..390732604adc586c127ab8ad05b62a3f6b0e953a 100644 --- a/src/MNH/ecmwf_radiation_vers2.f90 +++ b/src/MNH/ecmwf_radiation_vers2.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ecmwf_radiation_vers2.f90,v $ $Revision: 1.3.2.4.2.2.2.1 $ ! masdev4_7 BUG1 2007/06/15 17:47:17 !----------------------------------------------------------------- ! ################################# @@ -204,6 +204,7 @@ SUBROUTINE ECMWF_RADIATION_VERS2 ( KLON,KLEV,KRAD_DIAG, KAER, & ! B. Aouizerats 09/2010 Explicit aerosol optical properties computation ! G.Delautier 9/2014: remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM ! M.Mazoyer 2016 : limit of 100 microns for effective radius +! B.VIE 2016 : LIMA !----------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -232,23 +233,33 @@ USE YOERRTWN , ONLY : NG ,NSPA ,NSPB ,WAVENUM1 ,& ! !MESO-NH modules USE MODD_PARAMETERS -USE MODD_RAIN_C2R2_KHKO_PARAM, ONLY : XCREC, XCRER, XFREFFR -USE MODD_RAIN_C2R2_DESCR, ONLY : XAC, XAR, & - XLBEXC, XLBEXR, & - XRTMIN, XCTMIN -USE MODD_ICE_C1R3_PARAM, ONLY : XFREFFI -USE MODD_ICE_C1R3_DESCR, ONLY : XLBEXI, & +USE MODD_RAIN_C2R2_KHKO_PARAM, ONLY : UCREC=>XCREC, UCRER=>XCRER, UFREFFR=>XFREFFR +USE MODD_RAIN_C2R2_DESCR, ONLY : UAC=>XAC, UAR=>XAR, & + ULBEXC=>XLBEXC, ULBEXR=>XLBEXR, & + URTMIN=>XRTMIN, UCTMIN=>XCTMIN +USE MODD_ICE_C1R3_PARAM, ONLY : YFREFFI=>XFREFFI +USE MODD_ICE_C1R3_DESCR, ONLY : YLBEXI=>XLBEXI, & YRTMIN=>XRTMIN, YCTMIN=>XCTMIN USE MODD_CST USE MODD_CRAD -USE MODD_PARAM_C2R2, ONLY : XALPHAC,XNUC,XALPHAR,XNUR ! -USE MODD_PARAM_RAD_n, ONLY : CAOP +USE MODD_PARAM_C2R2, ONLY : UALPHAC=>XALPHAC,UNUC=>XNUC, & + UALPHAR=>XALPHAR,UNUR=>XNUR ! +USE MODD_PARAM_RAD_n, ONLY : CAOP ! USE MODI_LW USE MODI_RRTM_RRTM_140GP USE MODI_SW -! +! +! LIMA +USE MODD_PARAM_n, ONLY : CCLOUD +USE MODD_PARAM_LIMA, ONLY : ZRTMIN=>XRTMIN, ZCTMIN=>XCTMIN, & + ZALPHAC=>XALPHAC, ZNUC=>XNUC, & + ZALPHAR=>XALPHAR, ZNUR=>XNUR +USE MODD_PARAM_LIMA_WARM, ONLY : ZCREC=>XCREC, ZCRER=>XCRER, ZFREFFR=>XFREFFR, & + ZAC=>XAC, ZAR=>XAR, ZLBEXC=>XLBEXC, ZLBEXR=>XLBEXR +USE MODD_PARAM_LIMA_COLD, ONLY : ZFREFFI=>XFREFFI, ZLBEXI=>XLBEXI +! IMPLICIT NONE ! ! @@ -405,8 +416,74 @@ REAL, DIMENSION(KLON,KLEV,16) :: ZTAUCLD REAL, DIMENSION(KLON,KAER,KLEV) :: ZAER_SW,ZAER_LW ! Optical aerosol properties LOGICAL :: GPROP_OP !drapeau sur les condition a remplir pour que le !calcul des propriétés optiques soit effectué +! +REAL, ALLOCATABLE, DIMENSION(:) :: XRTMIN, XCTMIN +REAL :: XALPHAC,XNUC,XALPHAR,XNUR,XCREC,XCRER,XFREFFR,XAC,XAR,XLBEXC,XLBEXR,XFREFFI,XLBEXI !-------------------------------------------------------------- ! +! 0. LIMA +IF ( CCLOUD == "LIMA" ) THEN + ALLOCATE(XRTMIN(SIZE(ZRTMIN,1))) + ALLOCATE(XCTMIN(SIZE(ZCTMIN,1))) + XRTMIN(:)=ZRTMIN(:) + XCTMIN(:)=ZCTMIN(:) + + XALPHAC = ZALPHAC + XNUC = ZNUC + XALPHAR = ZALPHAR + XNUR = ZNUR + XCREC = ZCREC + XCRER = ZCRER + XFREFFR = ZFREFFR + XAC = ZAC + XAR = ZAR + XLBEXC = ZLBEXC + XLBEXR = ZLBEXR + XFREFFI = ZFREFFI + XLBEXI = ZLBEXI + +ELSE IF (CCLOUD == "C3R5") THEN + ALLOCATE(XRTMIN(SIZE(YRTMIN,1))) + ALLOCATE(XCTMIN(SIZE(YCTMIN,1))) + XRTMIN(:)=YRTMIN(:) + XCTMIN(:)=YCTMIN(:) + + XALPHAC = UALPHAC + XNUC = UNUC + XALPHAR = UALPHAR + XNUR = UNUR + XCREC = UCREC + XCRER = UCRER + XFREFFR = UFREFFR + XAC = UAC + XAR = UAR + XLBEXC = ULBEXC + XLBEXR = ULBEXR + XFREFFI = YFREFFI + XLBEXI = YLBEXI + +ELSE IF (CCLOUD == "C2R2" .OR. CCLOUD == "KHKO") THEN + ALLOCATE(XRTMIN(SIZE(URTMIN,1))) + ALLOCATE(XCTMIN(SIZE(UCTMIN,1))) + XRTMIN(:)=URTMIN(:) + XCTMIN(:)=UCTMIN(:) + + XALPHAC = UALPHAC + XNUC = UNUC + XALPHAR = UALPHAR + XNUR = UNUR + XCREC = UCREC + XCRER = UCRER + XFREFFR = UFREFFR + XAC = UAC + XAR = UAR + XLBEXC = ULBEXC + XLBEXR = ULBEXR + XFREFFI = YFREFFI + XLBEXI = YLBEXI + +END IF +! !* 1. SET-UP INPUT QUANTITIES FOR RADIATION ! ------------------------------------- ! @@ -707,8 +784,10 @@ DO JK = 1 , KLEV ! based on the prediction of the number concentrations ! ZRHO(JL) = (1./XRD)*(PAP(JL,IKL)/ PT(JL,IKL)) - ZRADIP(JL) = 0.0 - IF (PCIT_C1R3(JL, IKL)>YCTMIN(4) .AND. PIWC(JL,IKL)>YRTMIN(4)) THEN +!BVIE +! ZRADIP(JL) = 0.0 + ZRADIP(JL) = 40.0 + IF (PCIT_C1R3(JL, IKL)>XCTMIN(4) .AND. PIWC(JL,IKL)>XRTMIN(4)) THEN ZMR(JL) = PIWC(JL,IKL) ZRADIP(JL) = 1.0E6 * XFREFFI*(ZMR(JL)/PCIT_C1R3(JL,IKL))**(XLBEXI) ZDESR(JL) = 2.0 * ZRADIP(JL) diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90 index 24127f9a2d4e5713dadf2280a481e659ce050d4a..c4da956c94c20ecbde3083df2b7ec12fcb906705 100644 --- a/src/MNH/goto_model_wrapper.f90 +++ b/src/MNH/goto_model_wrapper.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/goto_model_wrapper.f90,v $ $Revision: 1.2.4.1.2.3.4.2.2.3 $ ! MASDEV4_7 newsrc 2006/06/26 12:01:39 ! !! MODIFICATIONS @@ -13,6 +13,7 @@ !! 06/12 (Tomasini) Grid-nesting of ADVFRC and EDDY_FLUX !! 07/13 (Bosseur & Filippi) adds Forefire !! 2014 (Faivre) +!! Modification 01/2016 (JP Pinty) Add LIMA !----------------------------------------------------------------- MODULE MODI_GOTO_MODEL_WRAPPER @@ -100,6 +101,9 @@ USE MODD_CH_ROSENBROCK_n USE MODD_RBK90_Global_n USE MODD_RBK90_JacobianSP_n USE MODD_RBK90_Parameters_n +! +USE MODD_LIMA_PRECIP_SCAVENGING_n +! USE MODD_DEF_EDDY_FLUX_n USE MODD_DEF_EDDYUV_FLUX_n USE MODD_RELFRC_n @@ -183,6 +187,9 @@ CALL CH_ROSENBROCK_GOTO_MODEL(KFROM, KTO) CALL RBK90_Global_GOTO_MODEL(KFROM, KTO) CALL RBK90_JacobianSP_GOTO_MODEL(KFROM, KTO) CALL RBK90_Parameters_GOTO_MODEL(KFROM, KTO) +! +CALL LIMA_PRECIP_SCAVENGING_GOTO_MODEL(KFROM, KTO) +! CALL EDDY_FLUX_GOTO_MODEL(KFROM, KTO) CALL EDDYUV_FLUX_GOTO_MODEL(KFROM, KTO) CALL ADVFRC_GOTO_MODEL(KFROM, KTO) diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90 index e5a5a624ee2570ec41f5051ff6fea4b2068b0e8a..28d80b642e41beeefcab8669be1ae2d835b463b0 100644 --- a/src/MNH/ground_paramn.f90 +++ b/src/MNH/ground_paramn.f90 @@ -105,6 +105,7 @@ END MODULE MODI_GROUND_PARAM_n !! (J.escobar) 18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n ! (J.escobar) 2/2014 add Forefire coupling !! 06/2016 (G.Delautier) phasage surfex 8 +!! (B.Vie) 2016 LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -161,6 +162,8 @@ USE MODD_TIME_n USE MODD_TIME USE MODI_TEMPORAL_DIST ! +USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC +! IMPLICIT NONE ! ! @@ -445,8 +448,9 @@ ZRHOA(:,:) = ZPA(:,:)/(XRD * ZTA(:,:) * ((1. + (XRD/XRV)*ZRVA(:,:))/ & ZRAIN=0. ZSNOW=0. IF (NRR>2 .AND. SIZE(XINPRR)>0 ) THEN - IF ((CCLOUD(1:3) == 'ICE' .AND. LSEDIC) .OR. & - ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') .AND. LSEDC)) THEN + IF (( CCLOUD(1:3) == 'ICE' .AND. LSEDIC) .OR. & + ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') .AND. LSEDC) .OR. & + ( CCLOUD=='LIMA' .AND. MSEDC)) THEN ZRAIN = ZRAIN + XINPRR * XRHOLW + XINPRC * XRHOLW ELSE ZRAIN = ZRAIN + XINPRR * XRHOLW diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90 index 2a93c0d805fa57ef852eafd62845a5b5e4f2e58e..5b596df31a305628ec165e938a2470739448e909 100644 --- a/src/MNH/ini_aircraft_balloon.f90 +++ b/src/MNH/ini_aircraft_balloon.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ini_aircraft_balloon.f90,v $ $Revision: 1.3.4.2.2.1.2.1.2.2 $ ! MASDEV4_7 balloon 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ######################### @@ -77,8 +77,7 @@ END MODULE MODI_INI_AIRCRAFT_BALLOON !! Original 15/05/2000 !! Apr, 20 2001: G.Jaubert: use in diag with stationnary fields !! March, 2013 : O.Caumont, C.Lac : add vertical profiles -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profiler +!! OCT,2016 : G.Delautier LIMA !! !! -------------------------------------------------------------------------- ! @@ -101,6 +100,8 @@ USE MODD_DYN_n USE MODI_INI_BALLOON USE MODI_INI_AIRCRAFT ! +USE MODD_PARAM_n, ONLY : CCLOUD +! IMPLICIT NONE ! ! @@ -385,10 +386,10 @@ ALLOCATE(TPFLYER%FFZ (ISTORE,KKU)) ALLOCATE(TPFLYER%IWCZ (ISTORE,KKU)) ALLOCATE(TPFLYER%LWCZ (ISTORE,KKU)) ALLOCATE(TPFLYER%CIZ (ISTORE,KKU)) -ALLOCATE(TPFLYER%SPEEDCZ (ISTORE,KKU)) -ALLOCATE(TPFLYER%SPEEDRZ (ISTORE,KKU)) -ALLOCATE(TPFLYER%SPEEDSZ (ISTORE,KKU)) -ALLOCATE(TPFLYER%SPEEDGZ (ISTORE,KKU)) +IF (CCLOUD=='LIMA') THEN + ALLOCATE(TPFLYER%CCZ (ISTORE,KKU)) + ALLOCATE(TPFLYER%CRZ (ISTORE,KKU)) +ENDIF ALLOCATE(TPFLYER%CRARE(ISTORE,KKU)) ALLOCATE(TPFLYER%CRARE_ATT(ISTORE,KKU)) ALLOCATE(TPFLYER%WZ(ISTORE,KKU)) @@ -424,12 +425,12 @@ TPFLYER%RTZ = XUNDEF TPFLYER%RZ = XUNDEF TPFLYER%FFZ = XUNDEF TPFLYER%CIZ = XUNDEF +IF (CCLOUD=='LIMA') THEN + TPFLYER%CRZ = XUNDEF + TPFLYER%CCZ = XUNDEF +ENDIF TPFLYER%IWCZ = XUNDEF TPFLYER%LWCZ = XUNDEF -TPFLYER%SPEEDCZ = XUNDEF -TPFLYER%SPEEDRZ = XUNDEF -TPFLYER%SPEEDSZ = XUNDEF -TPFLYER%SPEEDGZ = XUNDEF XLAM_CRAD = 3.154E-3 ! (in m) <=> 95.04 GHz = Rasta cloud radar frequency TPFLYER%CRARE = XUNDEF TPFLYER%CRARE_ATT= XUNDEF diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90 index 691b055149736c293f4b089bd49407921595c545..6ca72bcdc407b4a8361ecff43e471a3f46942f09 100644 --- a/src/MNH/ini_budget.f90 +++ b/src/MNH/ini_budget.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ini_budget.f90,v $ $Revision: 1.3.2.5.2.2.2.2.10.2.2.5.2.1 $ ! masdev4_8 budget 2008/06/20 10:08:26 !----------------------------------------------------------------- ! ###################### @@ -154,7 +154,7 @@ END MODULE MODI_INI_BUDGET !! J.Escobar 02/10/2015 modif for JPHEXT(JPVEXT) variable !! C.Lac 04/12/15 Correction for LSUPSAT !! 04/2016 (C.LAC) negative contribution to the budget splitted between advection, turbulence and microphysics for KHKO/C2R2 - +!! C. Barthe 01/2016 Add budget for LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -170,6 +170,10 @@ USE MODD_PARAM_ICE USE MODD_PARAM_C2R2 USE MODD_ELEC_DESCR, ONLY : LINDUCTIVE USE MODD_2D_FRC +USE MODD_PARAM_LIMA, ONLY : OWARM=>LWARM, OCOLD=>LCOLD, OSEDI=>LSEDI, & + OHHONI=>LHHONI, ORAIN=>LRAIN, OSEDC=>LSEDC, & + ONUCL=>LNUCL, OACTI=>LACTI, OSNOW=>LSNOW, & + OHAIL=>LHAIL, OSCAV=>LSCAV, OMEYERS=>LMEYERS ! USE MODE_ll USE MODE_IO_ll @@ -783,48 +787,91 @@ IF (LBU_RTH) THEN IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') & IPROACTV(4,IPROC) = NNEGATH IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE' .OR. (HCLOUD == 'C2R2' .AND. (.NOT. LSUPSAT)) & + IF (HCLOUD == 'LIMA') THEN + IF (OWARM .AND. OACTI) IPROACTV(4,IPROC) = NHENUTH + IPROC=IPROC+1 + IF (OWARM .AND. ORAIN) IPROACTV(4,IPROC) = NREVATH + IPROC=IPROC+1 + IF (OCOLD .AND. ONUCL) IPROACTV(4,IPROC) = NHINDTH + IPROC=IPROC+1 + IF (OCOLD .AND. ONUCL) IPROACTV(4,IPROC) = NHINCTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OHHONI .AND. ONUCL) IPROACTV(4,IPROC) = NHONHTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. ONUCL) IPROACTV(4,IPROC) = NHONCTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. ONUCL) IPROACTV(4,IPROC) = NHONRTH + IPROC=IPROC+1 + IF (OCOLD .AND. OSNOW) IPROACTV(4,IPROC) = NDEPSTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(4,IPROC) = NDEPGTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(4,IPROC) = NIMLTTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(4,IPROC) = NBERFITH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OSNOW) IPROACTV(4,IPROC) = NRIMTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OSNOW) IPROACTV(4,IPROC) = NACCTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(4,IPROC) = NCFRZTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(4,IPROC) = NWETGTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(4,IPROC) = NDRYGTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(4,IPROC) = NGMLTTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(4,IPROC) = NWETHTH + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(4,IPROC) = NHMLTTH + IPROC=IPROC+1 + IPROACTV(4,IPROC) = NCEDSTH + IPROC=IPROC+1 + ELSE + IF (HCLOUD(1:3) == 'ICE' .OR. (HCLOUD == 'C2R2' .AND. (.NOT. LSUPSAT)) & .OR. ( HCLOUD == 'KHKO' .AND. (.NOT. LSUPSAT)) ) & IPROACTV(4,IPROC) = NHENUTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NHONTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NSFRTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NDEPSTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NDEPGTH - IPROC=IPROC+1 - IF (((HCLOUD(1:3) == 'ICE') .AND. LWARM) .OR. ((HCLOUD == 'C2R2' & - .OR. HCLOUD == 'KHKO') .AND. LRAIN) .OR. HCLOUD(1:3) == 'KES') & - IPROACTV(4,IPROC) = NREVATH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NRIMTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NACCTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NCFRZTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NWETGTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NDRYGTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NGMLTTH - IPROC=IPROC+1 - IF (HCLOUD == 'ICE4') IPROACTV(4,IPROC) = NWETHTH - IPROC=IPROC+1 - IF (HCLOUD == 'ICE4') IPROACTV(4,IPROC) = NHMLTTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NIMLTTH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NBERFITH - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NCDEPITH - IPROC=IPROC+1 - IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' .OR. HCLOUD(1:3) == 'KES' .OR. & - HCLOUD == 'REVE') IPROACTV(4,IPROC) = NCONDTH - IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) IPROACTV(4,IPROC) = NNECONTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NHONTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NSFRTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NDEPSTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NDEPGTH + IPROC=IPROC+1 + IF (((HCLOUD(1:3) == 'ICE') .AND. LWARM) .OR. ((HCLOUD == 'C2R2' & + .OR. HCLOUD == 'KHKO') .AND. LRAIN) .OR. HCLOUD(1:3) == 'KES') & + IPROACTV(4,IPROC) = NREVATH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NRIMTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NACCTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NCFRZTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NWETGTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NDRYGTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NGMLTTH + IPROC=IPROC+1 + IF (HCLOUD == 'ICE4') IPROACTV(4,IPROC) = NWETHTH + IPROC=IPROC+1 + IF (HCLOUD == 'ICE4') IPROACTV(4,IPROC) = NHMLTTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NIMLTTH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NBERFITH + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NCDEPITH + IPROC=IPROC+1 + IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' .OR. HCLOUD(1:3) == 'KES' .OR. & + HCLOUD == 'REVE') IPROACTV(4,IPROC) = NCONDTH + IPROC=IPROC+1 + IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) IPROACTV(4,IPROC) = NNECONTH + END IF ! YWORK2(4,1) = 'INIF_' YWORK2(4,2) = 'ENDF_' @@ -868,43 +915,87 @@ IF (LBU_RTH) THEN IPROC=IPROC+1 YWORK2(4,IPROC) = 'NEGA_' IPROC=IPROC+1 - YWORK2(4,IPROC) = 'HENU_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'HON_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'SFR_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'DEPS_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'DEPG_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'REVA_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'RIM_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'ACC_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'CFRZ_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'WETG_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'DRYG_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'GMLT_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'WETH_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'HMLT_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'IMLT_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'BERFI_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'CDEPI_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'COND_' - IPROC=IPROC+1 - YWORK2(4,IPROC) = 'NECON_' + + IF (HCLOUD == 'LIMA') THEN + YWORK2(4,IPROC) = 'HENU_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'REVA_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'HIND_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'HINC_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'HONH_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'HONC_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'HONR_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'DEPS_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'DEPG_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'IMLT_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'BERFI_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'RIM_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'ACC_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'CFRZ_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'WETG_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'DRYG_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'GMLT_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'WETH_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'HMLT_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'CEDS_' + IPROC=IPROC+1 + ELSE + YWORK2(4,IPROC) = 'HENU_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'HON_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'SFR_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'DEPS_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'DEPG_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'REVA_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'RIM_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'ACC_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'CFRZ_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'WETG_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'DRYG_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'GMLT_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'WETH_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'HMLT_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'IMLT_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'BERFI_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'CDEPI_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'COND_' + IPROC=IPROC+1 + YWORK2(4,IPROC) = 'NECON_' + END IF ! YEND_COMMENT(4) = 'BU_RTH' NBUPROCNBR(4) = 3 @@ -1046,6 +1137,24 @@ IF (LBU_RRV) THEN IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') & IPROACTV(6,IPROC) = NNEGARV IPROC=IPROC+1 + +IF (HCLOUD == 'LIMA') THEN + IF (OWARM .AND. OACTI) IPROACTV(6,IPROC) = NHENURV + IPROC=IPROC+1 + IF (OWARM .AND. ORAIN) IPROACTV(6,IPROC) = NREVARV + IPROC=IPROC+1 + IF (OCOLD .AND. ONUCL) IPROACTV(6,IPROC) = NHINDRV + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OHHONI .AND. ONUCL) IPROACTV(6,IPROC) = NHONHRV + IPROC=IPROC+1 + IF (OCOLD .AND. OSNOW) IPROACTV(6,IPROC) = NDEPSRV + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(6,IPROC) = NDEPGRV + IPROC=IPROC+1 + IPROACTV(6,IPROC) = NCEDSRV + IPROC=IPROC+1 + +ELSE IF ((HCLOUD == 'C2R2' .AND. (.NOT. LSUPSAT)) & .OR. ( HCLOUD == 'KHKO' .AND. (.NOT. LSUPSAT)) & .OR. HCLOUD(1:3) == 'ICE') & @@ -1066,6 +1175,8 @@ IF (LBU_RRV) THEN IF ( (HCLOUD == 'KHKO' ) .OR. (HCLOUD == 'C2R2')) & IPROACTV(6,IPROC) = NNECONRV IPROC=IPROC+1 +END IF + ! YWORK2(6,1) = 'INIF_' YWORK2(6,2) = 'ENDF_' @@ -1103,6 +1214,21 @@ IF (LBU_RRV) THEN IPROC=IPROC+1 YWORK2(6,IPROC) = 'NEGA_' IPROC=IPROC+1 +IF (HCLOUD == 'LIMA') THEN + YWORK2(6,IPROC) = 'HENU_' + IPROC=IPROC+1 + YWORK2(6,IPROC) = 'REVA_' + IPROC=IPROC+1 + YWORK2(6,IPROC) = 'HIND_' + IPROC=IPROC+1 + YWORK2(6,IPROC) = 'HONH_' + IPROC=IPROC+1 + YWORK2(6,IPROC) = 'DEPS_' + IPROC=IPROC+1 + YWORK2(6,IPROC) = 'DEPG_' + IPROC=IPROC+1 + YWORK2(6,IPROC) = 'CEDS_' +ELSE YWORK2(6,IPROC) = 'HENU_' IPROC=IPROC+1 YWORK2(6,IPROC) = 'DEPS_' @@ -1116,6 +1242,7 @@ IF (LBU_RRV) THEN YWORK2(6,IPROC) = 'CDEPI_' IPROC=IPROC+1 YWORK2(6,IPROC) = 'NECON_' +END IF ! YEND_COMMENT(6) = 'BU_RRV' NBUPROCNBR(6) = 3 @@ -1179,10 +1306,41 @@ IF (LBU_RRC) THEN IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') & IPROACTV(7,IPROC) = NNEGARC IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'KES' ) IPROACTV(7,IPROC ) = NACCRRC - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'KES' ) IPROACTV(7,IPROC) = NAUTORC - IPROC=IPROC+1 + + IF (HCLOUD == 'LIMA') THEN + IF (OWARM .AND. OSEDC) IPROACTV(7,IPROC) = NSEDIRC + IPROC=IPROC+1 + IF (OWARM .AND. OACTI) IPROACTV(7,IPROC) = NHENURC + IPROC=IPROC+1 + IF (OWARM .AND. ORAIN) IPROACTV(7,IPROC) = NAUTORC + IPROC=IPROC+1 + IF (OWARM .AND. ORAIN) IPROACTV(7,IPROC) = NACCRRC + IPROC=IPROC+1 + IF (OWARM .AND. ORAIN) IPROACTV(7,IPROC) = NREVARC + IPROC=IPROC+1 + IF (OCOLD .AND. ONUCL) IPROACTV(7,IPROC) = NHINCRC + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. ONUCL) IPROACTV(7,IPROC) = NHONCRC + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(7,IPROC) = NIMLTRC + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(7,IPROC) = NBERFIRC + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OSNOW) IPROACTV(7,IPROC) = NRIMRC + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(7,IPROC) = NWETGRC + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(7,IPROC) = NDRYGRC + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(7,IPROC) = NWETHRC + IPROC=IPROC+1 + IPROACTV(7,IPROC) = NCEDSRC + IPROC=IPROC+1 + ELSE + IF (HCLOUD(1:3) == 'KES' ) IPROACTV(7,IPROC ) = NACCRRC + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'KES' ) IPROACTV(7,IPROC) = NAUTORC + IPROC=IPROC+1 IF ((HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') .AND. (.NOT. LSUPSAT)) & IPROACTV(7,IPROC) = NHENURC IPROC=IPROC+1 @@ -1219,6 +1377,8 @@ IF (LBU_RRC) THEN IF ( (HCLOUD == 'KHKO' ) .OR. (HCLOUD == 'C2R2')) & IPROACTV(7,IPROC) = NNECONRC IPROC=IPROC+1 + END IF + ! YWORK2(7,1) = 'INIF_' YWORK2(7,2) = 'ENDF_' @@ -1248,37 +1408,68 @@ IF (LBU_RRC) THEN IPROC=IPROC+1 YWORK2(7,IPROC) = 'NEGA_' IPROC=IPROC+1 - YWORK2(7,IPROC) = 'ACCR_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'AUTO_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'HENU_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'HON_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'AUTO_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'ACCR_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'RIM_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'WETG_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'DRYG_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'WETH_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'IMLT_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'BERFI_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'SEDI_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'CDEPI_' - IPROC=IPROC+1 - YWORK2(7,IPROC) = 'COND_' + + IF (HCLOUD == 'LIMA') THEN + YWORK2(7,IPROC) = 'SEDI_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'HENU_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'AUTO_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'ACCR_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'REVA_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'HINC_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'HONC_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'IMLT_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'BERFI_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'RIM_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'WETG_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'DRYG_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'WETH_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'CEDS_' + ELSE + YWORK2(7,IPROC) = 'ACCR_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'AUTO_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'HENU_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'HON_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'AUTO_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'ACCR_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'RIM_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'WETG_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'DRYG_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'WETH_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'IMLT_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'BERFI_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'SEDI_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'CDEPI_' + IPROC=IPROC+1 + YWORK2(7,IPROC) = 'COND_' IPROC=IPROC+1 YWORK2(7,IPROC) = 'NECON_' + END IF ! YEND_COMMENT(7) = 'BU_RRC' NBUPROCNBR(7) = 3 @@ -1321,68 +1512,122 @@ IF (LBU_RRR) THEN IPROC=IPROC+1 IF ( HCLOUD /= 'NONE' ) IPROACTV(8,IPROC) = NNEGARR IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'KES' ) IPROACTV(8,IPROC) = NSEDIRR - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'KES' ) IPROACTV(8,IPROC) = NACCRRR - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'KES' ) IPROACTV(8,IPROC) = NAUTORR - IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'KES' ) IPROACTV(8,IPROC) = NREVARR - IPROC=IPROC+1 + + IF (HCLOUD == 'LIMA') THEN + IF (OWARM) IPROACTV(8,IPROC) = NSEDIRR + IPROC=IPROC+1 + IF (OWARM) IPROACTV(8,IPROC) = NAUTORR + IPROC=IPROC+1 + IF (OWARM) IPROACTV(8,IPROC) = NACCRRR + IPROC=IPROC+1 + IF (OWARM) IPROACTV(8,IPROC) = NREVARR + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. ONUCL) IPROACTV(8,IPROC) = NHONRRR + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OSNOW) IPROACTV(8,IPROC) = NACCRR + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(8,IPROC) = NCFRZRR + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(8,IPROC) = NWETGRR + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(8,IPROC) = NDRYGRR + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM) IPROACTV(8,IPROC) = NGMLTRR + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(8,IPROC) = NWETHRR + IPROC=IPROC+1 + IF (OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(8,IPROC) = NHMLTRR + ELSE + IF (HCLOUD(1:3) == 'KES' ) IPROACTV(8,IPROC) = NSEDIRR + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'KES' ) IPROACTV(8,IPROC) = NACCRRR + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'KES' ) IPROACTV(8,IPROC) = NAUTORR + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'KES' ) IPROACTV(8,IPROC) = NREVARR + IPROC=IPROC+1 + ! + IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NSFRRR + IPROC=IPROC+1 + IF ((HCLOUD(1:3) == 'ICE' ) .AND. LWARM) & + IPROACTV(8,IPROC) = NAUTORR + IPROC=IPROC+1 + IF ((HCLOUD(1:3) == 'ICE' ) .AND. LWARM) & + IPROACTV(8,IPROC) = NACCRRR + IPROC=IPROC+1 + IF ((HCLOUD(1:3) == 'ICE' ) .AND. LWARM) & + IPROACTV(8,IPROC) = NREVARR + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NACCRR + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NCFRZRR + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NWETGRR + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NDRYGRR + IPROC=IPROC+1 + IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NGMLTRR + IPROC=IPROC+1 + IF (HCLOUD == 'ICE4') IPROACTV(8,IPROC) = NWETHRR + IPROC=IPROC+1 + IF (HCLOUD == 'ICE4') IPROACTV(8,IPROC) = NHMLTRR + IPROC=IPROC+1 + IF ((HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') .AND. LRAIN) IPROACTV(8,IPROC) = NAUTORR + IPROC=IPROC+1 + IF ((HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') .AND. LRAIN) IPROACTV(8,IPROC) = NACCRRR + IPROC=IPROC+1 + IF ((HCLOUD == 'C2R2'.OR. HCLOUD == 'KHKO') .AND. LRAIN) IPROACTV(8,IPROC) = NREVARR + IPROC=IPROC+1 + IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' .OR. HCLOUD(1:3) == 'ICE') & + IPROACTV(8,IPROC) = NSEDIRR + IPROC=IPROC+1 + END IF ! - IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NSFRRR - IPROC=IPROC+1 - IF ((HCLOUD(1:3) == 'ICE' ) .AND. LWARM) & - IPROACTV(8,IPROC) = NAUTORR - IPROC=IPROC+1 - IF ((HCLOUD(1:3) == 'ICE' ) .AND. LWARM) & - IPROACTV(8,IPROC) = NACCRRR - IPROC=IPROC+1 - IF ((HCLOUD(1:3) == 'ICE' ) .AND. LWARM) & - IPROACTV(8,IPROC) = NREVARR + YWORK2(8,1) = 'INIF_' + YWORK2(8,2) = 'ENDF_' + YWORK2(8,3) = 'AVEF_' + IPROC=4 + YWORK2(8,IPROC) = 'ASSE_' IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NACCRR + YWORK2(8,IPROC) = 'NEST_' IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NCFRZRR + YWORK2(8,IPROC) = 'FRC_' IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NWETGRR + YWORK2(8,IPROC) = 'DIF_' IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NDRYGRR + YWORK2(8,IPROC) = 'REL_' IPROC=IPROC+1 - IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NGMLTRR + YWORK2(8,IPROC) = 'ADV_' IPROC=IPROC+1 - IF (HCLOUD == 'ICE4') IPROACTV(8,IPROC) = NWETHRR + YWORK2(8,IPROC) = 'NEGA_' IPROC=IPROC+1 - IF (HCLOUD == 'ICE4') IPROACTV(8,IPROC) = NHMLTRR + +IF (HCLOUD == 'LIMA') THEN + YWORK2(8,IPROC) = 'SEDI_' IPROC=IPROC+1 - IF ((HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') .AND. LRAIN) IPROACTV(8,IPROC) = NAUTORR + YWORK2(8,IPROC) = 'AUTO_' IPROC=IPROC+1 - IF ((HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') .AND. LRAIN) IPROACTV(8,IPROC) = NACCRRR + YWORK2(8,IPROC) = 'ACCR_' IPROC=IPROC+1 - IF ((HCLOUD == 'C2R2'.OR. HCLOUD == 'KHKO') .AND. LRAIN) IPROACTV(8,IPROC) = NREVARR + YWORK2(8,IPROC) = 'REVA_' IPROC=IPROC+1 - IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' .OR. HCLOUD(1:3) == 'ICE') & - IPROACTV(8,IPROC) = NSEDIRR + YWORK2(8,IPROC) = 'HONR_' IPROC=IPROC+1 -! - YWORK2(8,1) = 'INIF_' - YWORK2(8,2) = 'ENDF_' - YWORK2(8,3) = 'AVEF_' - IPROC=4 - YWORK2(8,IPROC) = 'ASSE_' + YWORK2(8,IPROC) = 'ACC_' IPROC=IPROC+1 - YWORK2(8,IPROC) = 'NEST_' + YWORK2(8,IPROC) = 'CFRZ_' IPROC=IPROC+1 - YWORK2(8,IPROC) = 'FRC_' + YWORK2(8,IPROC) = 'WETG_' IPROC=IPROC+1 - YWORK2(8,IPROC) = 'DIF_' + YWORK2(8,IPROC) = 'DRYG_' IPROC=IPROC+1 - YWORK2(8,IPROC) = 'REL_' + YWORK2(8,IPROC) = 'GMLT_' IPROC=IPROC+1 - YWORK2(8,IPROC) = 'ADV_' + YWORK2(8,IPROC) = 'WETH_' IPROC=IPROC+1 - YWORK2(8,IPROC) = 'NEGA_' + YWORK2(8,IPROC) = 'HMLT_' IPROC=IPROC+1 +ELSE YWORK2(8,IPROC) = 'SEDI_' IPROC=IPROC+1 YWORK2(8,IPROC) = 'ACCR_' @@ -1420,6 +1665,7 @@ IF (LBU_RRR) THEN YWORK2(8,IPROC) = 'REVA_' IPROC=IPROC+1 YWORK2(8,IPROC) = 'SEDI_' +END IF ! YEND_COMMENT(8) = 'BU_RRR' NBUPROCNBR(8) = 3 @@ -1476,30 +1722,67 @@ IF (LBU_RRI) THEN IPROC=IPROC+1 IF( HCLOUD /= 'NONE' ) IPROACTV(9,IPROC) = NNEGARI IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NHENURI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NHONRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NAGGSRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NAUTSRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NCFRZRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NWETGRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NDRYGRI - IPROC=IPROC+1 - IF( HCLOUD == 'ICE4') IPROACTV(9,IPROC) = NWETHRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NIMLTRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NBERFIRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NSEDIRI - IPROC=IPROC+1 - IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NCDEPIRI - IPROC=IPROC+1 + + IF (HCLOUD=='LIMA') THEN + IF(OCOLD .AND. OSEDI) IPROACTV(9,IPROC) = NSEDIRI + IPROC=IPROC+1 + IF(OCOLD .AND. ONUCL) IPROACTV(9,IPROC) = NHINDRI + IPROC=IPROC+1 + IF(OCOLD .AND. ONUCL) IPROACTV(9,IPROC) = NHINCRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OHHONI .AND. ONUCL) IPROACTV(9,IPROC) = NHONHRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. ONUCL) IPROACTV(9,IPROC) = NHONCRI + IPROC=IPROC+1 + IF(OCOLD .AND. OSNOW) IPROACTV(9,IPROC) = NCNVIRI + IPROC=IPROC+1 + IF(OCOLD .AND. OSNOW) IPROACTV(9,IPROC) = NCNVSRI + IPROC=IPROC+1 + IF(OCOLD .AND. OSNOW) IPROACTV(9,IPROC) = NAGGSRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(9,IPROC) = NIMLTRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(9,IPROC) = NBERFIRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OSNOW) IPROACTV(9,IPROC) = NHMSRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(9,IPROC) = NCFRZRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(9,IPROC) = NWETGRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(9,IPROC) = NDRYGRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(9,IPROC) = NHMGRI + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(9,IPROC) = NWETHRI + IPROC=IPROC+1 + IPROACTV(9,IPROC) = NCEDSRI + ELSE + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NHENURI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NHONRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NAGGSRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NAUTSRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NCFRZRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NWETGRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NDRYGRI + IPROC=IPROC+1 + IF( HCLOUD == 'ICE4') IPROACTV(9,IPROC) = NWETHRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NIMLTRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NBERFIRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NSEDIRI + IPROC=IPROC+1 + IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NCDEPIRI + IPROC=IPROC+1 + END IF ! YWORK2(9,1) = 'INIF_' YWORK2(9,2) = 'ENDF_' @@ -1525,29 +1808,65 @@ IF (LBU_RRI) THEN IPROC=IPROC+1 YWORK2(9,IPROC) = 'NEGA_' IPROC= IPROC+1 - YWORK2(9,IPROC) = 'HENU_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'HON_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'AGGS_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'AUTS_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'CFRZ_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'WETG_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'DRYG_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'WETH_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'IMLT_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'BERFI_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'SEDI_' - IPROC= IPROC+1 - YWORK2(9,IPROC) = 'CDEPI_' + IF (HCLOUD=='LIMA') THEN + YWORK2(9,IPROC) = 'SEDI_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'HIND_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'HINC_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'HONH_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'HONC_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'CNVI_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'CNVS_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'AGGS_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'IMLT_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'BERFI_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'HMS_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'CFRZ_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'WETG_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'DRYG_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'HMG_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'WETH_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'CEDS_' + ELSE + YWORK2(9,IPROC) = 'HENU_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'HON_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'AGGS_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'AUTS_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'CFRZ_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'WETG_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'DRYG_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'WETH_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'IMLT_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'BERFI_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'SEDI_' + IPROC= IPROC+1 + YWORK2(9,IPROC) = 'CDEPI_' + END IF ! YEND_COMMENT(9) = 'BU_RRI' NBUPROCNBR(9) = 3 @@ -1590,6 +1909,33 @@ IF (LBU_RRS) THEN IPROC= IPROC+1 IF( HCLOUD /= 'NONE' ) IPROACTV(10,IPROC) = NNEGARS IPROC=IPROC+1 + +IF (HCLOUD=='LIMA') THEN + IF(OCOLD) IPROACTV(10,IPROC) = NSEDIRS + IPROC=IPROC+1 + IF(OCOLD) IPROACTV(10,IPROC) = NCNVIRS + IPROC=IPROC+1 + IF(OCOLD) IPROACTV(10,IPROC) = NDEPSRS + IPROC=IPROC+1 + IF(OCOLD) IPROACTV(10,IPROC) = NCNVSRS + IPROC=IPROC+1 + IF(OCOLD) IPROACTV(10,IPROC) = NAGGSRS + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(10,IPROC) = NRIMRS + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(10,IPROC) = NHMSRS + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(10,IPROC) = NACCRS + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(10,IPROC) = NCMELRS + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(10,IPROC) = NWETGRS + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(10,IPROC) = NDRYGRS + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(10,IPROC) = NWETHRS + IPROC=IPROC+1 +ELSE IF( HCLOUD(1:3) == 'ICE') IPROACTV(10,IPROC) = NDEPSRS IPROC=IPROC+1 IF( HCLOUD(1:3) == 'ICE') IPROACTV(10,IPROC) = NAGGSRS @@ -1610,6 +1956,7 @@ IF (LBU_RRS) THEN IPROC=IPROC+1 IF( HCLOUD(1:3) == 'ICE') IPROACTV(10,IPROC) = NSEDIRS IPROC=IPROC+1 +END IF ! YWORK2(10,1) = 'INIF_' YWORK2(10,2) = 'ENDF_' @@ -1629,6 +1976,32 @@ IF (LBU_RRS) THEN IPROC=IPROC+1 YWORK2(10,IPROC) = 'NEGA_' IPROC= IPROC+1 +IF (HCLOUD=='LIMA') THEN + YWORK2(10,IPROC) = 'SEDI_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'CNVI_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'DEPS_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'CNVS_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'AGGS_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'RIM_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'HMS_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'ACC_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'CMEL_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'WETG_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'DRYG_' + IPROC= IPROC+1 + YWORK2(10,IPROC) = 'WETH_' + IPROC= IPROC+1 +ELSE YWORK2(10,IPROC) = 'DEPS_' IPROC= IPROC+1 YWORK2(10,IPROC) = 'AGGS_' @@ -1648,6 +2021,7 @@ IF (LBU_RRS) THEN YWORK2(10,IPROC) = 'WETH_' IPROC=IPROC+1 YWORK2(10,IPROC) = 'SEDI_' +END IF ! YEND_COMMENT(10) = 'BU_RRS' NBUPROCNBR(10) = 3 @@ -1690,6 +2064,35 @@ IF (LBU_RRG) THEN IPROC=IPROC+1 IF( HCLOUD /= 'NONE' ) IPROACTV(11,IPROC) = NNEGARG IPROC=IPROC+1 + +IF (HCLOUD=='LIMA') THEN + IF(OCOLD) IPROACTV(11,IPROC) = NSEDIRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. ONUCL) IPROACTV(11,IPROC) = NHONRRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(11,IPROC) = NDEPGRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OSNOW) IPROACTV(11,IPROC) = NRIMRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OSNOW) IPROACTV(11,IPROC) = NACCRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OSNOW) IPROACTV(11,IPROC) = NCMELRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(11,IPROC) = NCFRZRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(11,IPROC) = NWETGRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(11,IPROC) = NDRYGRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(11,IPROC) = NHMGRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM) IPROACTV(11,IPROC) = NGMLTRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(11,IPROC) = NWETHRG + IPROC=IPROC+1 + IF(OCOLD .AND. OWARM .AND. OHAIL) IPROACTV(11,IPROC) = NCOHGRG + IPROC=IPROC+1 +ELSE IF( HCLOUD(1:3) == 'ICE') IPROACTV(11,IPROC) = NSFRRG IPROC=IPROC+1 IF( HCLOUD(1:3) == 'ICE') IPROACTV(11,IPROC) = NDEPGRG @@ -1714,6 +2117,7 @@ IF (LBU_RRG) THEN IPROC=IPROC+1 IF( HCLOUD(1:3) == 'ICE')IPROACTV(11,IPROC) = NSEDIRG IPROC=IPROC+1 +END IF ! YWORK2(11,1) = 'INIF_' YWORK2(11,2) = 'ENDF_' @@ -1733,6 +2137,33 @@ IF (LBU_RRG) THEN IPROC=IPROC+1 YWORK2(11,IPROC) = 'NEGA_' IPROC=IPROC+1 +IF (HCLOUD=='LIMA') THEN + YWORK2(11,IPROC) = 'SEDI_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'HONR_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'DEPG_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'RIM_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'ACC_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'CMEL_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'CFRZ_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'WETG_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'DRYG_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'HMG_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'GMLT_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'WETH_' + IPROC=IPROC+1 + YWORK2(11,IPROC) = 'COHG_' +ELSE YWORK2(11,IPROC)= 'SFR_' IPROC=IPROC+1 YWORK2(11,IPROC) = 'DEPG_' @@ -1756,6 +2187,7 @@ IF (LBU_RRG) THEN YWORK2(11,IPROC) = 'COHG_' IPROC=IPROC+1 YWORK2(11,IPROC)= 'SEDI_' +END IF ! YEND_COMMENT(11) = 'BU_RRG' NBUPROCNBR(11) = 3 @@ -1814,15 +2246,28 @@ IF (LBU_RRH) THEN IPROACTV(12,IPROC) = 3 END IF IPROC=IPROC+1 - IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NWETGRH - IPROC=IPROC+1 - IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NWETHRH - IPROC=IPROC+1 +! + IF (HCLOUD=='LIMA' .AND. OHAIL) THEN + IPROACTV(12,IPROC) = NSEDIRH + IPROC=IPROC+1 + IPROACTV(12,IPROC) = NWETGRH + IPROC=IPROC+1 + IPROACTV(12,IPROC) = NWETHRH + IPROC=IPROC+1 + IPROACTV(12,IPROC) = NCOHGRH + IPROC=IPROC+1 + IPROACTV(12,IPROC) = NHMLTRH + ELSE + IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NWETGRH + IPROC=IPROC+1 + IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NWETHRH + IPROC=IPROC+1 IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NCOHGRH IPROC=IPROC+1 - IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NHMLTRH - IPROC=IPROC+1 - IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NSEDIRH + IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NHMLTRH + IPROC=IPROC+1 + IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NSEDIRH + END IF ! YWORK2(12,1) = 'INIF_' YWORK2(12,2) = 'ENDF_' @@ -1842,15 +2287,28 @@ IF (LBU_RRH) THEN IPROC=IPROC+1 YWORK2(12,IPROC) = 'NEGA_' IPROC=IPROC+1 - YWORK2(12,IPROC) = 'WETG_' - IPROC=IPROC+1 - YWORK2(12,IPROC) = 'WETH_' - IPROC=IPROC+1 + IF (HCLOUD=='LIMA' .AND. OHAIL) THEN + YWORK2(12,IPROC) = 'SEDI_' + IPROC=IPROC+1 + YWORK2(12,IPROC) = 'WETG_' + IPROC=IPROC+1 + YWORK2(12,IPROC) = 'WETH_' + IPROC=IPROC+1 + YWORK2(12,IPROC) = 'COHG_' + IPROC=IPROC+1 + YWORK2(12,IPROC) = 'HMLT_' + IPROC=IPROC+1 + ELSE + YWORK2(12,IPROC) = 'WETG_' + IPROC=IPROC+1 + YWORK2(12,IPROC) = 'WETH_' + IPROC=IPROC+1 YWORK2(12,IPROC) = 'COHG_' IPROC=IPROC+1 - YWORK2(12,IPROC) = 'HMLT_' - IPROC=IPROC+1 - YWORK2(12,IPROC) = 'SEDI_' + YWORK2(12,IPROC) = 'HMLT_' + IPROC=IPROC+1 + YWORK2(12,IPROC) = 'SEDI_' + END IF ! YEND_COMMENT(12) = 'BU_RRH' NBUPROCNBR(12) = 3 @@ -1909,6 +2367,8 @@ IF (LBU_RSV) THEN IPROC=IPROC+1 IF ( HSCONV == 'EDKF' ) IPROACTV(12+JSV,IPROC)= NMAFLSV IPROC=IPROC+1 + IPROACTV(12+JSV,IPROC)= NADVSV + IPROC=IPROC+1 ! YWORK2(12+JSV,1) = 'INIF_' YWORK2(12+JSV,2) = 'ENDF_' @@ -1931,6 +2391,8 @@ IF (LBU_RSV) THEN YWORK2(12+JSV,IPROC) = 'HTURB_' IPROC=IPROC+1 YWORK2(12+JSV,IPROC) = 'MAFL_' + IPROC=IPROC+1 + YWORK2(12+JSV,IPROC) = 'ADV_' ! ! complete with the budget of other processes ! @@ -2195,9 +2657,8 @@ CONTAINS ! ############################## ! ! -USE MODD_NSV, ONLY : NSV_USER, NSV_C2R2BEG, NSV_C2R2END, & - NSV_CHEMBEG, NSV_CHEMEND, & - NSV_ELECBEG, NSV_ELECEND +USE MODD_NSV +USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM ! IF (JSV <= NSV_USER) THEN ! NSV_USER Case @@ -2270,6 +2731,269 @@ USE MODD_NSV, ONLY : NSV_USER, NSV_C2R2BEG, NSV_C2R2END, & IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 END SELECT ! + + + + + ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN + ! LIMA case + +IF (JSV == NSV_LIMA_NC) THEN +! Cloud droplets conc. + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OWARM) THEN + IF (OSEDC) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'SEDI_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + IF (OACTI) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HENU_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'SELF_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (ORAIN) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'AUTO_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'ACCR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'REVA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + END IF + IF (OCOLD .AND. ONUCL) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HINC_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HONC_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + IF (OWARM .AND. OCOLD) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'IMLT_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OSNOW) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'RIM_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'WETG_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'DRYG_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OHAIL) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'WETH_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'CEDS_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 +! +ELSE IF (JSV == NSV_LIMA_NR) THEN +! Rain drops conc. + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OWARM .AND. ORAIN) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'SEDI_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'AUTO_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'SCBU_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'REVA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'BRKU_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + IF (OCOLD .AND. OWARM .AND. ORAIN .AND. ONUCL) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HONR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + IF (OWARM .AND. OCOLD) THEN + IF (OSNOW) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'ACC_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'CFRZ_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'WETG_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'DRYG_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'GMLT_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OHAIL) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'WETH_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HMLT_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + END IF +! +ELSE IF (JSV.GE.NSV_LIMA_CCN_FREE .AND. JSV.LT.(NSV_LIMA_CCN_FREE+NMOD_CCN)) THEN +! Free CCN conc. + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OWARM .AND. OACTI) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HENU_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + IF (OCOLD .AND. ONUCL .AND. OHHONI .AND. OWARM) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HONH_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'CEDS_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OSCAV) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'SCAV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF +! +ELSE IF (JSV.GE.NSV_LIMA_CCN_ACTI .AND. JSV.LT.(NSV_LIMA_CCN_ACTI+NMOD_CCN)) THEN +! Activated CCN conc. + +ELSE IF (JSV == NSV_LIMA_NI) THEN +! Pristine ice crystals conc. + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OCOLD) THEN + IF (OSEDI) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'SEDI_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + IF (ONUCL) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HIND_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HINC_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OWARM .AND. OHHONI) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HONH_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + IF (OWARM) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HONC_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + END IF + IF (OSNOW) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'CNVI_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'CNVS_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'AGGS_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + END IF + IF (OWARM .AND. OCOLD) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'IMLT_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OSNOW) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HMS_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'CFRZ_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'WETG_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'DRYG_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HMG_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OHAIL) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'WETH_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF + END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'CEDS_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 +! +ELSE IF (JSV.GE.NSV_LIMA_IFN_FREE .AND. JSV.LT.(NSV_LIMA_IFN_FREE+NMOD_IFN)) THEN +! Free IFN conc. + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OCOLD .AND. ONUCL .AND. (.NOT.OMEYERS)) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'HIND_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF +! IF (OCOLD .AND. OWARM) THEN +! ILAST_PROC_NBR = ILAST_PROC_NBR + 1 +! YWORK2(12+JSV,ILAST_PROC_NBR)= 'IMLT_' +! IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 +! END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'CEDS_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IF (OSCAV) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'SCAV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF +! +ELSE IF (JSV.GE.NSV_LIMA_IFN_NUCL .AND. JSV.LT.(NSV_LIMA_IFN_NUCL+NMOD_IFN)) THEN +! Nucleated IFN conc. + +ELSE IF (JSV.GE.NSV_LIMA_IMM_NUCL .AND. JSV.LT.(NSV_LIMA_IMM_NUCL+NMOD_IMM)) THEN +! Nucleated IMM conc. + +ELSE IF (JSV == NSV_LIMA_HOM_HAZE) THEN +! Homogeneous freezing of CCN + +END IF + + + + ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN SELECT CASE(JSV-NSV_ELECBEG+1) CASE(1) ! volumetric charge of water vapor diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90 index 86a1a71b81d4942d7e6ca75308ff6efe428a75fe..38498a3ac53d6b405a477e4074473726344b9d26 100644 --- a/src/MNH/ini_lb.f90 +++ b/src/MNH/ini_lb.f90 @@ -127,6 +127,7 @@ SUBROUTINE INI_LB(HINIFILE,HLUOUT,OLSOURCE,KSV, & !! Pialat/tulet 15/02/12 Add ForeFire scalars !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 27/04/2016 : bug , test only on ANY(HGETSVM({{1:KSV}})=='READ' +!! J.-P. Pinty 09/02/16 Add LIMA that is LBC for CCN and IFN !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -138,6 +139,8 @@ USE MODD_CTURB USE MODD_DUST USE MODD_SALT USE MODD_CH_AEROSOL +USE MODD_PARAM_LIMA +USE MODD_PARAM_n ! USE MODE_FM @@ -150,6 +153,8 @@ USE MODD_CH_M9_n, ONLY: CNAMES, CICNAMES USE MODD_LG, ONLY: CLGNAMES USE MODD_ELEC_DESCR, ONLY: CELECNAMES USE MODD_PARAMETERS, ONLY: JPHEXT +USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES +USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -225,6 +230,7 @@ CHARACTER (LEN= LEN(HGETRVM)), DIMENSION (7) :: YGETRXM ! Arrays with the get i CHARACTER (LEN= 16), DIMENSION (7) :: YRECFMX,YRECFMY ! arrays with the name of the LB fields ! in FM files for the moist variables INTEGER :: IMASDEV +CHARACTER(LEN=2) :: INDICE ! to index CCN and IFN fields of LIMA scheme !------------------------------------------------------------------------------- ! ! @@ -659,6 +665,111 @@ DO JSV = NSV_C1R3BEG, NSV_C1R3END IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. END SELECT END DO +! +! LIMA: CCN and IFN scalar variables +! +IF (CCLOUD=='LIMA' ) THEN + DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1 + SELECT CASE(HGETSVM(JSV)) + CASE ('READ') + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + IF ( KSIZELBXSV_ll /= 0 ) THEN + YRECFM = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + YDIRLB='LBX' + CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& + & IGRID,ILENCH,YCOMMENT,IRESP) + IF ( SIZE(PLBXSVM,1) /= 0 ) THEN + IF (IRESP/=0) THEN + IF (PRESENT(PLBXSVMM)) THEN + PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV) + WRITE(ILUOUT,*) 'CCN PLBXSVM will be initialized to 0' + ELSE + WRITE(ILUOUT,*) 'Pb to initialize CCN PLBXSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF +! + IF (KSIZELBYSV_ll /= 0 ) THEN + YRECFM = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + YDIRLB='LBY' + CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& + & IGRID,ILENCH,YCOMMENT,IRESP) + IF ( SIZE(PLBYSVM,1) /= 0 ) THEN + IF (IRESP/=0) THEN + IF (PRESENT(PLBYSVMM)) THEN + PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV) + WRITE(ILUOUT,*) 'CCN PLBYSVM will be initialized to 0' + ELSE + WRITE(ILUOUT,*) 'Pb to initialize CCN PLBYSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + CASE('INIT') + IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. + IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. + END SELECT + END DO + DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1 + SELECT CASE(HGETSVM(JSV)) + CASE ('READ') + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + IF ( KSIZELBXSV_ll /= 0 ) THEN + YRECFM = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + YDIRLB='LBX' + CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& + & IGRID,ILENCH,YCOMMENT,IRESP) + IF ( SIZE(PLBXSVM,1) /= 0 ) THEN + IF (IRESP/=0) THEN + IF (PRESENT(PLBXSVMM)) THEN + PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV) + WRITE(ILUOUT,*) 'IFN PLBXSVM will be initialized to 0' + ELSE + WRITE(ILUOUT,*) 'Pb to initialize IFN' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF +! + IF (KSIZELBYSV_ll /= 0 ) THEN + YRECFM = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + YDIRLB='LBY' + CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& + & IGRID,ILENCH,YCOMMENT,IRESP) + IF ( SIZE(PLBYSVM,1) /= 0 ) THEN + IF (IRESP/=0) THEN + IF (PRESENT(PLBYSVMM)) THEN + PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV) + WRITE(ILUOUT,*) 'IFN PLBYSVM will be initialized to 0' + ELSE + WRITE(ILUOUT,*) 'Pb to initialize IFN' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + CASE('INIT') + IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. + IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. + END SELECT + END DO +ENDIF ! ELEC scalar variables DO JSV = NSV_ELECBEG, NSV_ELECEND SELECT CASE(HGETSVM(JSV)) diff --git a/src/MNH/ini_micron.f90 b/src/MNH/ini_micron.f90 index 516f1b5be0d2aafbabf59f7a9d9f121585e0d21e..79b357084855a0282e54663ae0bb0fad271a9bba 100644 --- a/src/MNH/ini_micron.f90 +++ b/src/MNH/ini_micron.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ini_micron.f90,v $ $Revision: 1.3.2.2.2.1.2.2.10.2 $ ! MASDEV4_7 init 2007/03/23 11:55:57 !----------------------------------------------------------------- ! ######################## @@ -50,6 +50,7 @@ END MODULE MODI_INI_MICRO_n !! ------------- !! Original 27/11/02 !! O.Geoffroy (03/2006) : Add KHKO scheme +!! Modification 01/2016 (JP Pinty) Add LIMA !! !! -------------------------------------------------------------------------- ! @@ -57,8 +58,6 @@ END MODULE MODI_INI_MICRO_n ! ------------ ! ! -USE MODD_NSV, ONLY : NSV,NSV_CHEM,NSV_C2R2BEG,NSV_C2R2END, & - NSV_C1R3BEG,NSV_C1R3END USE MODD_CONF, ONLY : CCONF,CPROGRAM USE MODD_LUNIT_n, ONLY : CINIFILE,CLUOUT USE MODD_GET_n, ONLY : CGETRCT,CGETRRT, CGETRST, CGETRGT, CGETRHT, CGETCLOUD @@ -90,6 +89,22 @@ USE MODI_SET_CONC_ICE_C1R3 USE MODE_ll USE MODE_MODELN_HANDLER ! +USE MODD_NSV, ONLY : NSV,NSV_CHEM,NSV_C2R2BEG,NSV_C2R2END, & + NSV_C1R3BEG,NSV_C1R3END, & + NSV_LIMA, NSV_LIMA_BEG, NSV_LIMA_END, & + NSV_LIMA_NC, NSV_LIMA_NR, & + NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & + NSV_LIMA_SCAVMASS, & + NSV_LIMA_NI, & + NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, & + NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE +USE MODD_PARAM_LIMA, ONLY : LSCAV, MSEDC=>LSEDC, MACTIT=>LACTIT +USE MODD_LIMA_PRECIP_SCAVENGING_n +! +USE MODI_INIT_AEROSOL_CONCENTRATION +USE MODI_INI_LIMA +USE MODI_SET_CONC_LIMA +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -140,9 +155,9 @@ ELSE ALLOCATE(XACPRR(0,0)) END IF ! -IF ((CCLOUD(1:3) == 'ICE' .AND. LSEDIC) .OR. & - ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. & - CCLOUD == 'KHKO') .AND. LSEDC)) THEN +IF (( CCLOUD(1:3) == 'ICE' .AND.LSEDIC) .OR. & + ((CCLOUD=='C2R2' .OR. CCLOUD=='C3R5' .OR. CCLOUD=='KHKO').AND.LSEDC) .OR. & + ( CCLOUD=='LIMA' .AND.MSEDC)) THEN ALLOCATE(XINPRC(IIU,IJU)) ALLOCATE(XACPRC(IIU,IJU)) XINPRC(:,:)=0.0 @@ -152,7 +167,7 @@ ELSE ALLOCATE(XACPRC(0,0)) END IF ! -IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5') THEN +IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'LIMA') THEN ALLOCATE(XINPRS(IIU,IJU)) ALLOCATE(XACPRS(IIU,IJU)) XINPRS(:,:)=0.0 @@ -162,7 +177,7 @@ ELSE ALLOCATE(XACPRS(0,0)) END IF ! -IF (CCLOUD == 'C3R5' .OR. CCLOUD(1:3) == 'ICE' ) THEN +IF (CCLOUD == 'C3R5' .OR. CCLOUD(1:3) == 'ICE'.OR. CCLOUD == 'LIMA') THEN ALLOCATE(XINPRG(IIU,IJU)) ALLOCATE(XACPRG(IIU,IJU)) XINPRG(:,:)=0.0 @@ -172,7 +187,7 @@ ELSE ALLOCATE(XACPRG(0,0)) END IF ! -IF (CCLOUD =='ICE4') THEN +IF (CCLOUD =='ICE4' .OR. CCLOUD == 'LIMA') THEN ALLOCATE(XINPRH(IIU,IJU)) ALLOCATE(XACPRH(IIU,IJU)) XINPRH(:,:)=0.0 @@ -186,7 +201,7 @@ IF(SIZE(XINPRR) == 0) RETURN ! !* 2b. ALLOCATION for Radiative cooling ! ------------------------------ -IF (LACTIT) THEN +IF (LACTIT .OR. MACTIT) THEN ALLOCATE( XTHM(IIU,IJU,IKU) ) ALLOCATE( XRCM(IIU,IJU,IKU) ) XTHM = XTHT @@ -196,12 +211,23 @@ IF (LACTIT) THEN ALLOCATE( XRCM(0,0,0) ) END IF ! +! +!* 2.bis ALLOCATE Module MODD_PRECIP_SCAVENGING_n +! ------------------------------ +! +IF ( (CCLOUD=='LIMA') .AND. LSCAV ) THEN + ALLOCATE(XINPAP(IIU,IJU)) + ALLOCATE(XACPAP(IIU,IJU)) + XINPAP(:,:)=0.0 + XACPAP(:,:)=0.0 +END IF +! !* 3. INITIALIZE MODD_PRECIP_n variables ! ---------------------------------- ! -CALL READ_PRECIP_FIELD(CINIFILE,CLUOUT,CPROGRAM,CCONF, & - CGETRCT,CGETRRT,CGETRST,CGETRGT,CGETRHT, & - XINPRC,XACPRC,XINPRR,XINPRR3D,XEVAP3D, & +CALL READ_PRECIP_FIELD(CINIFILE,CLUOUT,CPROGRAM,CCONF, & + CGETRCT,CGETRRT,CGETRST,CGETRGT,CGETRHT, & + XINPRC,XACPRC,XINPRR,XINPRR3D,XEVAP3D, & XACPRR,XINPRS,XACPRS,XINPRG,XACPRG, XINPRH,XACPRH ) ! ! @@ -220,17 +246,24 @@ DO JK = IKB,IKE END DO ZDZMIN = MIN_ll (ZDZ,IINFO_ll,1,1,IKB,NIMAX_ll+2*JPHEXT,NJMAX_ll+2*JPHEXT,IKE ) DEALLOCATE(ZDZ) +! IF (CCLOUD(1:3) == 'KES') THEN CALL INI_CLOUD(XTSTEP,ZDZMIN,NSPLITR) ! Warm cloud only ELSE IF (CCLOUD(1:3) == 'ICE' ) THEN - CALL INI_RAIN_ICE(KLUOUT,XTSTEP,ZDZMIN,NSPLITR,CCLOUD) ! Mixed phase cloud + CALL INI_RAIN_ICE(KLUOUT,XTSTEP,ZDZMIN,NSPLITR,CCLOUD) ! Mixed phase cloud ! including hail -ELSE IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' & - .OR. CCLOUD == 'KHKO') THEN - CALL INI_RAIN_C2R2(XTSTEP,ZDZMIN,NSPLITR,CCLOUD) ! 1/2 spectral warm cloud +ELSE IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN + CALL INI_RAIN_C2R2(XTSTEP,ZDZMIN,NSPLITR,CCLOUD) ! 1/2 spectral warm cloud IF (CCLOUD == 'C3R5') THEN CALL INI_ICE_C1R3(XTSTEP,ZDZMIN,NSPLITG) ! 1/2 spectral cold cloud END IF +ELSE IF (CCLOUD == 'LIMA') THEN + IF (CGETCLOUD /= 'READ') THEN + CALL INIT_AEROSOL_CONCENTRATION(XRHODREF, & + XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + XZZ(:,:,:) ) + END IF + CALL INI_LIMA(XTSTEP,ZDZMIN,NSPLITR, NSPLITG) ! 1/2 spectral warm cloud END IF ! IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN @@ -250,6 +283,13 @@ IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN ENDIF ENDIF ! +IF (CCLOUD == 'LIMA') THEN + IF (CGETCLOUD/='READ') THEN + CALL SET_CONC_LIMA(CLUOUT,CGETCLOUD,XRHODREF,& + XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END)) + END IF +END IF +! ! !* 5. INITIALIZE ATMOSPHERIC ELECTRICITY ! ---------------------------------- diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index b50f47d86b423400689fa1260f91658a7a50d914..ce648a216d659d25ea199511070bb05808be9bd4 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -266,6 +266,7 @@ END MODULE MODI_INI_MODEL_n !! V. Masson Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions !! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files !! 06/2016 (G.Delautier) phasage surfex 8 +!! Modification 01/2016 (JP Pinty) Add LIMA !--------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -410,6 +411,7 @@ USE MODD_RELFRC_n USE MODD_2D_FRC ! USE MODE_MPPDB +USE MODI_INIT_AEROSOL_PROPERTIES ! IMPLICIT NONE ! @@ -498,6 +500,12 @@ REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTH ! !* 0. PROLOGUE ! -------- +! Compute relaxation coefficients without changing INI_DYNAMICS nor RELAXDEF +! +IF (CCLOUD == 'LIMA') THEN + LHORELAX_SVC1R3=LHORELAX_SVLIMA +END IF +! ! NULLIFY(TZINITHALO2D_ll) NULLIFY(TZINITHALO3D_ll) @@ -1526,6 +1534,8 @@ ELSE IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0)) END IF ! +IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES +! !------------------------------------------------------------------------------- ! !* 8. INITIALIZE THE PROGNOSTIC FIELDS diff --git a/src/MNH/ini_nsv.f90 b/src/MNH/ini_nsv.f90 index fd55ecb10bc2a7cc05473695231445d6fd4352d7..00407e247519fe64d966c63b61d4f0eb66c71f30 100644 --- a/src/MNH/ini_nsv.f90 +++ b/src/MNH/ini_nsv.f90 @@ -62,6 +62,7 @@ END MODULE MODI_INI_NSV !! 03/2013 (C.Lac) add supersaturation as !! the 4th C2R2 scalar variable !! J.escobar 04/08/2015 suit Pb with writ_lfin JSA increment , modif in ini_nsv to have good order initialization +!! Modification 01/2016 (JP Pinty) Add LIMA and LUSECHEM condition !! !------------------------------------------------------------------------------- ! @@ -74,10 +75,11 @@ USE MODD_CH_M9_n, ONLY : NEQ, NEQAQ USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHAQ, LUSECHIC, CCH_SCHEME, LCH_CONV_LINOX USE MODD_DIAG_FLAG,ONLY : LELECDIAG,LCHEMDIAG,LCHAQDIAG USE MODD_PARAM_n, ONLY : CCLOUD, CELEC -USE MODD_DYN_n, ONLY : LHORELAX_SV,LHORELAX_SVC2R2,LHORELAX_SVC1R3, & - LHORELAX_SVELEC,LHORELAX_SVCHEM,LHORELAX_SVLG, & - LHORELAX_SVDST,LHORELAX_SVAER, LHORELAX_SVSLT, & - LHORELAX_SVPP,LHORELAX_SVCS, LHORELAX_SVCHIC +USE MODD_DYN_n, ONLY : LHORELAX_SV,LHORELAX_SVC2R2,LHORELAX_SVC1R3, & + LHORELAX_SVLIMA, & + LHORELAX_SVELEC,LHORELAX_SVCHEM,LHORELAX_SVLG, & + LHORELAX_SVDST,LHORELAX_SVAER, LHORELAX_SVSLT, & + LHORELAX_SVPP,LHORELAX_SVCS, LHORELAX_SVCHIC #ifdef MNH_FOREFIRE USE MODD_DYN_n, ONLY : LHORELAX_SVFF USE MODD_FOREFIRE @@ -93,11 +95,17 @@ USE MODD_PREP_REAL, ONLY: XT_LS USE MODD_ELEC_DESCR, ONLY : LLNOX_EXPLICIT USE MODD_PARAM_C2R2, ONLY : LSUPSAT ! +USE MODD_PARAM_LIMA, ONLY: NMOD_CCN, LSCAV, LAERO_MASS, & + NMOD_IFN, NMOD_IMM, LHHONI, & + LWARM, LCOLD, LRAIN +! USE MODI_UPDATE_NSV USE MODD_CST, ONLY : XMNH_TINY ! IMPLICIT NONE ! +!------------------------------------------------------------------------------- +! !* 0.1 Declarations of arguments ! INTEGER, INTENT(IN) :: KMI ! model index @@ -106,6 +114,8 @@ INTEGER, INTENT(IN) :: KMI ! model index ! INTEGER :: ISV ! total number of scalar variables ! +!------------------------------------------------------------------------------- +! LINI_NSV = .TRUE. ! ! Users scalar variables are first considered @@ -148,6 +158,72 @@ ELSE NSV_C1R3END_A(KMI) = 0 END IF ! +! scalar variables used in the LIMA microphysical scheme +! +IF (CCLOUD == 'LIMA' ) THEN + ISV = ISV+1 + NSV_LIMA_BEG_A(KMI) = ISV + IF (LWARM) THEN +! Nc + NSV_LIMA_NC_A(KMI) = ISV + ISV = ISV+1 +! Nr + IF (LRAIN) THEN + NSV_LIMA_NR_A(KMI) = ISV + ISV = ISV+1 + END IF + END IF ! LWARM +! CCN + IF (NMOD_CCN .GT. 0) THEN + NSV_LIMA_CCN_FREE_A(KMI) = ISV + ISV = ISV + NMOD_CCN + NSV_LIMA_CCN_ACTI_A(KMI) = ISV + ISV = ISV + NMOD_CCN + END IF +! Scavenging + IF (LSCAV .AND. LAERO_MASS) THEN + NSV_LIMA_SCAVMASS_A(KMI) = ISV + ISV = ISV+1 + END IF ! LSCAV +! + IF (LCOLD) THEN +! Ni + NSV_LIMA_NI_A(KMI) = ISV + ISV = ISV+1 + END IF ! LCOLD +! IFN + IF (NMOD_IFN .GT. 0) THEN + NSV_LIMA_IFN_FREE_A(KMI) = ISV + ISV = ISV + NMOD_IFN + NSV_LIMA_IFN_NUCL_A(KMI) = ISV + ISV = ISV + NMOD_IFN + END IF +! IMM + IF (NMOD_IMM .GT. 0) THEN + NSV_LIMA_IMM_NUCL_A(KMI) = ISV + ISV = ISV + MAX(1,NMOD_IMM) + END IF +! Homogeneous freezing of CCN + IF (LCOLD .AND. LHHONI) THEN + NSV_LIMA_HOM_HAZE_A(KMI) = ISV + ISV = ISV + 1 + END IF +! +! End and total variables +! + ISV = ISV - 1 + NSV_LIMA_END_A(KMI) = ISV + NSV_LIMA_A(KMI) = NSV_LIMA_END_A(KMI) - NSV_LIMA_BEG_A(KMI) + 1 +ELSE + NSV_LIMA_A(KMI) = 0 +! +! force First index to be superior to last index +! in order to create a null section +! + NSV_LIMA_BEG_A(KMI) = 1 + NSV_LIMA_END_A(KMI) = 0 +END IF ! CCLOUD = LIMA +! ! ! Add one scalar for negative ion ! First variable: positive ion (NSV_ELECBEG_A index number) @@ -244,7 +320,7 @@ END IF ! ! scalar variables used in chemical core system ! -IF (NEQ .GT. 0) THEN +IF (LUSECHEM .AND.(NEQ .GT. 0)) THEN NSV_CHEM_A(KMI) = NEQ NSV_CHEMBEG_A(KMI)= ISV+1 NSV_CHEMEND_A(KMI)= ISV+NSV_CHEM_A(KMI) @@ -438,6 +514,9 @@ LHORELAX_SV(NSV_C2R2BEG_A(KMI):NSV_C2R2END_A(KMI))=LHORELAX_SVC2R2 ! C3R5 SV case IF (CCLOUD == 'C3R5') & LHORELAX_SV(NSV_C1R3BEG_A(KMI):NSV_C1R3END_A(KMI))=LHORELAX_SVC1R3 +! LIMA SV case +IF (CCLOUD == 'LIMA') & +LHORELAX_SV(NSV_LIMA_BEG_A(KMI):NSV_LIMA_END_A(KMI))=LHORELAX_SVLIMA ! Electrical SV case IF (CELEC /= 'NONE') & LHORELAX_SV(NSV_ELECBEG_A(KMI):NSV_ELECEND_A(KMI))=LHORELAX_SVELEC @@ -483,6 +562,8 @@ IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' ) & XSVMIN(NSV_C2R2BEG_A(KMI):NSV_C2R2END_A(KMI))=0. IF (CCLOUD == 'C3R5') & XSVMIN(NSV_C1R3BEG_A(KMI):NSV_C1R3END_A(KMI))=0. +IF (CCLOUD == 'LIMA') & +XSVMIN(NSV_LIMA_BEG_A(KMI):NSV_LIMA_END_A(KMI))=0. IF (CELEC /= 'NONE') & XSVMIN(NSV_ELECBEG_A(KMI):NSV_ELECEND_A(KMI))=0. IF (LUSECHEM .OR. LCHEMDIAG) & diff --git a/src/MNH/ini_one_wayn.f90 b/src/MNH/ini_one_wayn.f90 index 6db1416cb0fd1a8bd059270fae79a3a57a617c9a..6ad02eb6c14af831b3765db6cf7ee8be4fd7edbb 100644 --- a/src/MNH/ini_one_wayn.f90 +++ b/src/MNH/ini_one_wayn.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ini_one_wayn.f90,v $ $Revision: 1.3.2.2.2.1.2.1.10.1.2.4.2.1 $ !----------------------------------------------------------------- ! ####################### MODULE MODI_INI_ONE_WAY_n @@ -142,6 +142,7 @@ SUBROUTINE INI_ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT, & !! Bosseur & Filippi 07/2013 Adds Forefire !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 +!! B.VIE 2016 : LIMA !! !------------------------------------------------------------------------------ ! @@ -166,6 +167,8 @@ USE MODI_SET_CONC_RAIN_C2R2 USE MODI_SET_CONC_ICE_C1R3 USE MODI_SET_CHEMAQ_1WAY ! +USE MODI_SET_CONC_LIMA +! IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -395,6 +398,32 @@ IF (HCLOUD=="C3R5" ) THEN ENDIF ENDIF ! +! Checking if it is necessary to compute the Nc, Nr, Ni +! concentrations to use the LIMA microphysical scheme +! (FATHER does not use LIMA and CHILD uses LIMA) +! +IF (HCLOUD=="LIMA" ) THEN + IF (CCLOUD/="LIMA") THEN + ALLOCATE(ZCONCM(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),NSV_LIMA_A(KMI))) + IF (CCLOUD == "REVE") THEN + ZINIT_TYPE = "INI1" + ELSE + ZINIT_TYPE = "NONE" + END IF + CALL SET_CONC_LIMA (HLUOUT,ZINIT_TYPE,XRHODREF,XRT,ZCONCM) + DO JSV=1,NSV_LIMA_A(KMI) + CALL SET_LSFIELD_1WAY_ll(ZCONCM(:,:,:,JSV),& + &ZTSVM(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI) + ENDDO + ELSE + IF (NSV_LIMA_A(KMI)/=NSV_LIMA_A(KDAD)) CALL ABORT + DO JSV=1,NSV_LIMA_A(KMI) + CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KDAD)),& + &ZTSVM(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI) + END DO + END IF +ENDIF +! ! electrical variables ! DO JSV=1,MIN(NSV_ELEC_A(KMI),NSV_ELEC_A(KDAD)) diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90 index 84e954110ec187541dde7544b5cbf1505b15c7d6..fa869c0763ea0a1b1c085e35f53e8c6209f293d4 100644 --- a/src/MNH/ini_posprofilern.f90 +++ b/src/MNH/ini_posprofilern.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ini_posprofilern.f90,v $ $Revision: 1.2.2.2.2.2.2.2.2.1.2.3 $ ! masdev4_7 BUG1 2007/06/28 11:28:12 !----------------------------------------------------------------- ! ######################### @@ -72,8 +72,6 @@ END MODULE MODI_INI_POSPROFILER_n !! MODIFICATIONS !! ------------- !! P. Tulet 15/01/2002 -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profiler !! !! -------------------------------------------------------------------------- ! @@ -185,16 +183,6 @@ ALLOCATE(TPROFILER%TH (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%THV (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%RHOD (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%RARE (ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%SPEEDC(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%SPEEDR(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%SPEEDS(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%SPEEDG(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%SPEEDH(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%INPRC3D(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%INPRR3D(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%INPRS3D(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%INPRG3D(ISTORE,IKU,NUMBPROFILER)) -ALLOCATE(TPROFILER%INPRH3D(ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%R (ISTORE,IKU,NUMBPROFILER,KRR)) ALLOCATE(TPROFILER%SV (ISTORE,IKU,NUMBPROFILER,KSV)) ALLOCATE(TPROFILER%AER (ISTORE,IKU,NUMBPROFILER,NAER)) @@ -236,16 +224,6 @@ TPROFILER%TH = XUNDEF TPROFILER%THV = XUNDEF TPROFILER%RHOD = XUNDEF TPROFILER%RARE = XUNDEF -TPROFILER%SPEEDC = XUNDEF -TPROFILER%SPEEDR = XUNDEF -TPROFILER%SPEEDS = XUNDEF -TPROFILER%SPEEDG = XUNDEF -TPROFILER%SPEEDG = XUNDEF -TPROFILER%INPRC3D= XUNDEF -TPROFILER%INPRR3D= XUNDEF -TPROFILER%INPRS3D= XUNDEF -TPROFILER%INPRG3D= XUNDEF -TPROFILER%INPRH3D= XUNDEF TPROFILER%IWV = XUNDEF TPROFILER%ZTD = XUNDEF TPROFILER%ZWD = XUNDEF diff --git a/src/MNH/lidar.f90 b/src/MNH/lidar.f90 index eb64a5fcabf2042e6bbb65debf5c5693cc6bef49..835da86854aa30a790446dcf70cc0143b516db98 100644 --- a/src/MNH/lidar.f90 +++ b/src/MNH/lidar.f90 @@ -21,11 +21,11 @@ REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Moist variables at t REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLIDAROUT ! Lidar output REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLIPAROUT ! Lidar output (particle only) -REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PCT ! Concentration - ! (C2R2 and C1R3) -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PDSTC ! Dust Concentration -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PDSTD ! Dust Diameter -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PDSTS ! Dust Sigma +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PCT ! Concentration + ! (C2R2 and C1R3) +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PDSTC ! Dust Concentration +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PDSTD ! Dust Diameter +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PDSTS ! Dust Sigma ! ! @@ -84,6 +84,7 @@ END MODULE MODI_LIDAR !! JP Chaboureau 12/02/10 change dust refraction index !! add inputs (lidar charact. and cloud fraction) !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! B.VIE 2016 : LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -93,8 +94,8 @@ USE MODD_PARAMETERS USE MODD_CST USE MODD_RAIN_C2R2_DESCR, ONLY : XLBEXC, XLBEXR, & XRTMIN, XCTMIN -USE MODD_PARAM_C2R2, ONLY : XALPHAC,XNUC, & - XALPHAR,XNUR +USE MODD_PARAM_C2R2, ONLY : YALPHAC=>XALPHAC,YNUC=>XNUC, & + YALPHAR=>XALPHAR,YNUR=>XNUR USE MODD_RAIN_ICE_DESCR, ONLY : XCCR, WLBEXR=>XLBEXR, XLBR, & XCCS, XCXS, XLBEXS, XLBS, & XCCG, XCXG, XLBEXG, XLBG, & @@ -103,9 +104,17 @@ USE MODD_RAIN_ICE_DESCR, ONLY : XCCR, WLBEXR=>XLBEXR, XLBR, & USE MODD_ICE_C1R3_DESCR, ONLY : XLBEXI, & YRTMIN=>XRTMIN, YCTMIN=>XCTMIN ! +USE MODD_PARAM_LIMA, ONLY : URTMIN=>XRTMIN, UCTMIN=>XCTMIN, & + UALPHAC=>XALPHAC,UNUC=>XNUC, & + UALPHAR=>XALPHAR,UNUR=>XNUR, & + UALPHAI=>XALPHAI,UNUI=>XNUI +USE MODD_PARAM_LIMA_COLD, ONLY : UCCS=>XCCS, UCXS=>XCXS, ULBEXS=>XLBEXS, & + ULBS=>XLBS +USE MODD_PARAM_LIMA_MIXED,ONLY : UCCG=>XCCG, UCXG=>XCXG, ULBEXG=>XLBEXG, & + ULBG=>XLBG +! USE MODI_BHMIE_WATER ! Gamma or mono dispersed size distributions USE MODI_BHMIE_AEROSOLS ! Lognormal or mono dispersed size distributions -USE MODE_ll ! IMPLICIT NONE ! @@ -124,9 +133,9 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLIPAROUT ! Lidar output (particle only) REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PCT ! Concentration ! (C2R2 and C1R3) -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PDSTC ! Dust Concentration -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PDSTD ! Dust Diameter -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PDSTS ! Dust Sigma +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PDSTC ! Dust Concentration +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PDSTD ! Dust Diameter +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PDSTS ! Dust Sigma ! !* 0.2 Declarations of local variables : ! @@ -199,6 +208,11 @@ REAL, DIMENSION(5) :: ZPOLC, ZPOLR, ZPOLI ! BackScat. Coefficients ! REAL, DIMENSION(10) :: ZRTMIN, ZCTMIN REAL :: ZLBEXR +! +INTEGER :: JL +REAL :: ZALPHAC, ZNUC, ZALPHAR, ZNUR, ZALPHAI, ZNUI +REAL :: ZCCS, ZCXS, ZLBEXS, ZLBS +REAL :: ZCCG, ZCXG, ZLBEXG, ZLBG ! ! ----------------------------------------------------------------------------- ! @@ -246,13 +260,56 @@ SELECT CASE ( HCLOUD ) CASE('ICE2','ICE3','ICE4') ZRTMIN(1:SIZE(WRTMIN)) = WRTMIN(1:SIZE(WRTMIN)) ZLBEXR = WLBEXR + ZCCS = XCCS + ZCXS = XCXS + ZLBEXS = XLBEXS + ZLBS = XLBS + ZCCG = XCCG + ZCXG = XCXG + ZLBEXG = XLBEXG + ZLBG = XLBG CASE('C2R2') ZRTMIN(1:SIZE(XRTMIN)) = XRTMIN(1:SIZE(XRTMIN)) ZCTMIN(1:SIZE(XCTMIN)) = XCTMIN(1:SIZE(XCTMIN)) - ZLBEXR = XLBEXR + ZLBEXR = XLBEXR + ZALPHAC = YALPHAC + ZNUR = YNUR + ZALPHAR = YALPHAR + ZNUC = YNUC CASE('C3R5') ZRTMIN(1:SIZE(YRTMIN)) = YRTMIN(1:SIZE(YRTMIN)) ZCTMIN(1:SIZE(YCTMIN)) = YCTMIN(1:SIZE(YCTMIN)) + ZALPHAC = YALPHAC + ZNUR = YNUR + ZALPHAR = YALPHAR + ZNUC = YNUC + ZALPHAI = ZALPHAC + ZNUI = ZNUC + ZCCS = XCCS + ZCXS = XCXS + ZLBEXS = XLBEXS + ZLBS = XLBS + ZCCG = XCCG + ZCXG = XCXG + ZLBEXG = XLBEXG + ZLBG = XLBG + CASE('LIMA') + ZRTMIN(1:SIZE(URTMIN)) = URTMIN(1:SIZE(URTMIN)) + ZCTMIN(1:SIZE(UCTMIN)) = UCTMIN(1:SIZE(UCTMIN)) + ZALPHAC = UALPHAC + ZNUR = UNUR + ZALPHAR = UALPHAR + ZNUC = UNUC + ZALPHAI = UALPHAI + ZNUI = UNUI + ZCCS = UCCS + ZCXS = UCXS + ZLBEXS = ULBEXS + ZLBS = ULBS + ZCCG = UCCG + ZCXG = UCXG + ZLBEXG = ULBEXG + ZLBG = ULBG END SELECT ! ! ----------------------------------------------------------------------------- @@ -274,26 +331,29 @@ ZALPH_PAR(:,:,:) = 0. ! AEROSOL CONTRIBUTION ! call bhmie_aerosols ! IF (PRESENT(PDSTC)) THEN - DO JK = IKB, IKE - DO JJ = IJB, IJE - DO JI = IIB, IIE - IF ( PDSTD(JI,JJ,JK)>0.1 ) THEN -! -! Desert dust particles -! - YDSD = 'MONOD' - ZCONC = PDSTC(JI,JJ,JK) - ZFRACVOL_CORE = 1.0 - ZRADIUS = PDSTD(JI,JJ,JK)*1.0E-6 - CALL BHMIE_AEROSOLS( ZWAVE_LENGTH, ZZREFIND_DUST, ZZREFIND_DUST, & - YDSD, ZCONC, ZFRACVOL_CORE, ZEXT_COEF, & - ZBAK_COEF, PRADIUS=ZRADIUS ) - ZALPH_PAR(JI,JJ,JK) = ZALPH_PAR(JI,JJ,JK) + ZETAAER * ZEXT_COEF - ZBETA_PAR(JI,JJ,JK) = ZBETA_PAR(JI,JJ,JK) + ZBAK_COEF - END IF - END DO - END DO - END DO + DO JL = 1, SIZE(PDSTD,4) + DO JK = IKB, IKE + DO JJ = IJB, IJE + DO JI = IIB, IIE + IF ( PDSTD(JI,JJ,JK,JL)>0.1 ) THEN + ! + ! Desert dust particles + ! + YDSD = 'MONOD' + ZCONC = PDSTC(JI,JJ,JK,JL) + ZFRACVOL_CORE = 1.0 + ZRADIUS = PDSTD(JI,JJ,JK,JL)*1.0E-6 + IF( ZRADIUS .GE. 1.0E-3 ) ZRADIUS = ZRADIUS * 1.0E-6 + CALL BHMIE_AEROSOLS( ZWAVE_LENGTH, ZZREFIND_DUST, ZZREFIND_DUST, & + YDSD, ZCONC, ZFRACVOL_CORE, ZEXT_COEF, & + ZBAK_COEF, PRADIUS=ZRADIUS ) + ZALPH_PAR(JI,JJ,JK) = ZALPH_PAR(JI,JJ,JK) + ZETAAER * ZEXT_COEF + ZBETA_PAR(JI,JJ,JK) = ZBETA_PAR(JI,JJ,JK) + ZBAK_COEF + END IF + END DO + END DO + END DO + END DO END IF ! ! @@ -351,7 +411,7 @@ SELECT CASE ( HCLOUD ) END DO END DO END DO - CASE ('C2R2','C3R5') + CASE ('C2R2','C3R5','LIMA') DO JK = IKB, IKE DO JJ = IJB, IJE DO JI = IIB, IIE @@ -366,7 +426,7 @@ SELECT CASE ( HCLOUD ) IANGLE = 11 CALL BHMIE_WATER( ZWAVE_LENGTH, ZZREFIND_WAT, YDSD, ZCONC, & IANGLE, ZEXT_COEF, ZBAK_COEF, KRADIUS=IRADIUS, & - PALPHA=XALPHAC, PNU=XNUC, PLWC=ZLWC ) + PALPHA=ZALPHAC, PNU=ZNUC, PLWC=ZLWC ) ZALPH_PAR(JI,JJ,JK) = ZALPH_PAR(JI,JJ,JK) + ZETACLD * ZEXT_COEF ZBETA_PAR(JI,JJ,JK) = ZBETA_PAR(JI,JJ,JK) + ZBAK_COEF END IF @@ -387,7 +447,7 @@ SELECT CASE ( HCLOUD ) IANGLE = 11 CALL BHMIE_WATER( ZWAVE_LENGTH, ZZREFIND_WAT, YDSD, ZCONC, & IANGLE, ZEXT_COEF, ZBAK_COEF, KRADIUS=IRADIUS, & - PALPHA=XALPHAR, PNU=XNUR, PLWC=ZLWC ) + PALPHA=ZALPHAR, PNU=ZNUR, PLWC=ZLWC ) ZALPH_PAR(JI,JJ,JK) = ZALPH_PAR(JI,JJ,JK) + ZETACLD * ZEXT_COEF ZBETA_PAR(JI,JJ,JK) = ZBETA_PAR(JI,JJ,JK) + ZBAK_COEF END IF @@ -425,7 +485,7 @@ SELECT CASE ( HCLOUD ) END DO END DO END DO - CASE ('C3R5') + CASE ('C3R5','LIMA') DO JK = IKB, IKE DO JJ = IJB, IJE DO JI = IIB, IIE @@ -440,7 +500,7 @@ SELECT CASE ( HCLOUD ) IANGLE = 11 CALL BHMIE_WATER( ZWAVE_LENGTH, ZZREFIND_ICE, YDSD, ZCONC, & IANGLE, ZEXT_COEF, ZBAK_COEF, KRADIUS=IRADIUS, & - PALPHA=XALPHAC, PNU=XNUC, PLWC=ZIWC ) + PALPHA=ZALPHAI, PNU=ZNUI, PLWC=ZIWC ) ZALPH_PAR(JI,JJ,JK) = ZALPH_PAR(JI,JJ,JK) + ZETACLD * ZEXT_COEF ZBETA_PAR(JI,JJ,JK) = ZBETA_PAR(JI,JJ,JK) + ZBAK_COEF END IF @@ -449,7 +509,7 @@ SELECT CASE ( HCLOUD ) END DO END SELECT SELECT CASE ( HCLOUD ) - CASE('ICE2','ICE3','ICE4','C3R5') + CASE('ICE2','ICE3','ICE4','C3R5','LIMA') DO JK = IKB, IKE DO JJ = IJB, IJE DO JI = IIB, IIE @@ -459,21 +519,23 @@ SELECT CASE ( HCLOUD ) ! YDSD = 'MONOD' ZIWC = PRHO(JI,JJ,JK)*PRT(JI,JJ,JK,5) - ZLBDAS = XLBS*(ZIWC)**XLBEXS - ZCONC = XCCS*(ZLBDAS)**XCXS - ZRADIUS = 0.5*(3.0/ZLBDAS) ! Assume Marshall-Palmer law for Reff - IANGLE = 11 - CALL BHMIE_WATER( ZWAVE_LENGTH, ZZREFIND_ICE, YDSD, ZCONC, & - IANGLE, ZEXT_COEF, ZBAK_COEF, PRADIUS=ZRADIUS ) - ZALPH_PAR(JI,JJ,JK) = ZALPH_PAR(JI,JJ,JK) + ZETACLD * ZEXT_COEF - ZBETA_PAR(JI,JJ,JK) = ZBETA_PAR(JI,JJ,JK) + ZBAK_COEF + ZLBDAS = ZLBS*(ZIWC)**ZLBEXS + IF (ZLBDAS .GT. 0) THEN + ZCONC = ZCCS*(ZLBDAS)**ZCXS + ZRADIUS = 0.5*(3.0/ZLBDAS) ! Assume Marshall-Palmer law for Reff + IANGLE = 11 + CALL BHMIE_WATER( ZWAVE_LENGTH, ZZREFIND_ICE, YDSD, ZCONC, & + IANGLE, ZEXT_COEF, ZBAK_COEF, PRADIUS=ZRADIUS ) + ZALPH_PAR(JI,JJ,JK) = ZALPH_PAR(JI,JJ,JK) + ZETACLD * ZEXT_COEF + ZBETA_PAR(JI,JJ,JK) = ZBETA_PAR(JI,JJ,JK) + ZBAK_COEF + END IF END IF END DO END DO END DO END SELECT SELECT CASE ( HCLOUD ) - CASE('ICE3','ICE4','C3R5') + CASE('ICE3','ICE4','C3R5','LIMA') DO JK = IKB, IKE DO JJ = IJB, IJE DO JI = IIB, IIE @@ -483,8 +545,8 @@ SELECT CASE ( HCLOUD ) ! YDSD = 'MONOD' ZIWC = PRHO(JI,JJ,JK)*PRT(JI,JJ,JK,6) - ZLBDAG = XLBG*(ZIWC)**XLBEXG - ZCONC = XCCG*(ZLBDAG)**XCXG + ZLBDAG = ZLBG*(ZIWC)**ZLBEXG + ZCONC = ZCCG*(ZLBDAG)**ZCXG ZRADIUS = 0.5*(3.0/ZLBDAG) ! Assume Marshall-Palmer law for Reff IANGLE = 11 CALL BHMIE_WATER( ZWAVE_LENGTH, ZZREFIND_ICE, YDSD, ZCONC, & diff --git a/src/MNH/modd_aircraft_balloon.f90 b/src/MNH/modd_aircraft_balloon.f90 index 676092e193c6818577641b48997e38971637253e..677a4c4ac525ef94bb01b47788418f6289233c8e 100644 --- a/src/MNH/modd_aircraft_balloon.f90 +++ b/src/MNH/modd_aircraft_balloon.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/modd_aircraft_balloon.f90,v $ $Revision: 1.1.10.1.2.1.10.2.2.2 $ ! MASDEV4_7 modd 2006/06/28 11:31:03 !----------------------------------------------------------------- ! ############################ @@ -36,8 +36,7 @@ !! Original 15/05/00 !! Apr,19, 2001 (G.Jaubert) add CVBALL type !! March, 2013 : O.Caumont, C.Lac : add vertical profiles -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profiler +!! Oct,2016 : G.DELAUTIER LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -135,10 +134,8 @@ REAL, DIMENSION(:,:), POINTER :: FFZ ! horizontal wind REAL, DIMENSION(:,:), POINTER :: IWCZ ! ice water content REAL, DIMENSION(:,:), POINTER :: LWCZ ! liquid water content REAL, DIMENSION(:,:), POINTER :: CIZ ! Ice concentration -REAL, DIMENSION(:,:), POINTER :: SPEEDCZ ! Cloud fall velocity -REAL, DIMENSION(:,:), POINTER :: SPEEDRZ ! Rain fall velocity -REAL, DIMENSION(:,:), POINTER :: SPEEDSZ ! Snow fall velocity -REAL, DIMENSION(:,:), POINTER :: SPEEDGZ ! Graupel fall velocity +REAL, DIMENSION(:,:), POINTER :: CCZ ! Cloud concentration (LIMA) +REAL, DIMENSION(:,:), POINTER :: CRZ ! Rain concentration (LIMA) REAL, DIMENSION(:,:), POINTER :: CRARE ! cloud radar reflectivity REAL, DIMENSION(:,:), POINTER :: CRARE_ATT ! attenuated (= more realistic) cloud radar reflectivity REAL, DIMENSION(:,:), POINTER :: WZ ! vertical profile of vertical velocity diff --git a/src/MNH/modd_budget.f90 b/src/MNH/modd_budget.f90 index f836d15c2219b03a000f0a82d227db40035e69c3..f59d0281a46b02096cbec0e7db82cf323d07675d 100644 --- a/src/MNH/modd_budget.f90 +++ b/src/MNH/modd_budget.f90 @@ -38,6 +38,7 @@ !! P. Jabouille 07/07/04 add budget terms for microphysics !! C. Barthe 19/11/09 add budget terms for electricity !! C.Lac 04/2016 negative contribution to the budget splitted between advection, turbulence and microphysics for KHKO/C2R2 +!! C. Barthe /16 add budget terms for LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -273,6 +274,12 @@ INTEGER, SAVE :: NBERFITH ! BERgeron-FIndeisen gth. ICE3 INTEGER, SAVE :: NCDEPITH ! Cond./DEPosition on ice ICE3 INTEGER, SAVE :: NWETHTH ! wet growth of hail ICE4 INTEGER, SAVE :: NHMLTTH ! melting of hail ICE4 +INTEGER, SAVE :: NHINDTH ! Heterogeneous Nucleation by Deposition C3R5 +INTEGER, SAVE :: NHINCTH ! Heterogeneous Nucleation by Contact C3R5 +INTEGER, SAVE :: NHONHTH ! Haze Homogeneous Nucleation C3R5 +INTEGER, SAVE :: NHONCTH ! droplet homogeneous nucleation C3R5 +INTEGER, SAVE :: NHONRTH ! drop homogeneous nucleation C3R5 +INTEGER, SAVE :: NCEDSTH ! adjustment C3R5 ! ! Allowed processes for the budget of RTKE (kinetic energy) ! @@ -321,6 +328,9 @@ INTEGER, SAVE :: NHENURV ! HEterogenous NUcleation ICE3 INTEGER, SAVE :: NDEPSRV ! DEPosition on Snow ICE3 INTEGER, SAVE :: NDEPGRV ! DEPosition on Graupel ICE3 INTEGER, SAVE :: NCDEPIRV ! Cond./DEPosition on ice ICE3 +INTEGER, SAVE :: NHINDRV ! Heterogeneous Nucleation by Deposition C3R5 +INTEGER, SAVE :: NHONHRV ! Haze Homogeneous Nucleation C3R5 +INTEGER, SAVE :: NCEDSRV ! adjustement C3R5 ! ! Allowed processes for the budget of moist variable RRC (cloud water) ! @@ -354,6 +364,10 @@ INTEGER, SAVE :: NCDEPIRC ! Cond./DEPosition on ice ICE3 INTEGER, SAVE :: NHENURC ! CCN Activation C2R2 INTEGER, SAVE :: NSEDIRC ! sedimentation C2R2 INTEGER, SAVE :: NWETHRC ! wet growth of hail +INTEGER, SAVE :: NHINCRC ! Heterogeneous Nucleation by Contact C3R5 +INTEGER, SAVE :: NHONCRC ! droplet homogeneous nucleation C3R5 +INTEGER, SAVE :: NCEDSRC ! adjustment C3R5 +INTEGER, SAVE :: NREVARC ! evaporation of rain drops ! ! Allowed processes for the budget of moist variable RRR (rain water) ! @@ -380,6 +394,7 @@ INTEGER, SAVE :: NDRYGRR ! DRY Growth of graupel ICE3 INTEGER, SAVE :: NGMLTRR ! Graupel MeLTing ICE3 INTEGER, SAVE :: NWETHRR ! wet growth of hail ICE4 INTEGER, SAVE :: NHMLTRR ! melting of hail ICE4 +INTEGER, SAVE :: NHONRRR ! drop homogeneous nucleation C3R5 ! ! Allowed processes for the budget of moist variable RRI (ice) ! @@ -409,6 +424,15 @@ INTEGER, SAVE :: NIMLTRI ! Ice MeLTing ICE3 INTEGER, SAVE :: NBERFIRI ! BERgeron-FIndeisen gth. ICE3 INTEGER, SAVE :: NCDEPIRI ! Cond./DEPosition on ice ICE3 INTEGER, SAVE :: NWETHRI ! wet growth of hail ICE4 +INTEGER, SAVE :: NHINDRI ! heterogeneous nucleation by deposition C3R5 +INTEGER, SAVE :: NHINCRI ! heterogeneous nucleation by contact C3R5 +INTEGER, SAVE :: NHONHRI ! haze homogeneous nucleation source C3R5 +INTEGER, SAVE :: NHONCRI ! droplet homogeneous nucleation C3R5 +INTEGER, SAVE :: NCNVIRI ! Conversion of snow to r_i C3R5 +INTEGER, SAVE :: NCNVSRI ! Conversion of pristine ice to r_s C3R5 +INTEGER, SAVE :: NHMSRI ! Hallett-Mossop ice multiplication process due to snow riming C3R5 +INTEGER, SAVE :: NHMGRI ! Hallett-Mossop ice multiplication process due to graupel riming C3R5 +INTEGER, SAVE :: NCEDSRI ! adjustement C3R5 ! ! Allowed processes for the budget of moist variable RRS (snow) ! @@ -433,6 +457,9 @@ INTEGER, SAVE :: NCMELRS ! Conversion MeLTing ICE3 INTEGER, SAVE :: NWETGRS ! WET Growth of graupel ICE3 INTEGER, SAVE :: NDRYGRS ! DRY Growth of graupel ICE3 INTEGER, SAVE :: NWETHRS ! wet growth of hail ICE4 +INTEGER, SAVE :: NCNVIRS ! Conversion of snow to r_i C3R5 +INTEGER, SAVE :: NCNVSRS ! Conversion of pristine ice to r_s C3R5 +INTEGER, SAVE :: NHMSRS ! Hallett-Mossop ice multiplication process due to snow riming C3R5 ! ! Allowed processes for the budget of moist variable RRG (graupel) ! @@ -458,7 +485,9 @@ INTEGER, SAVE :: NWETGRG ! WET Growth of graupel ICE3 INTEGER, SAVE :: NDRYGRG ! DRY Growth of graupel ICE3 INTEGER, SAVE :: NGMLTRG ! Graupel MeLTing ICE3 INTEGER, SAVE :: NWETHRG ! wet growth of hail ICE4 -INTEGER, SAVE :: NCOHGRG ! reconversion from hail to graupel ICE4 +INTEGER, SAVE :: NHONRRG ! drop homogeneous nucleation C3R5 +INTEGER, SAVE :: NHMGRG ! Hallett-Mossop ice multiplication process due to graupel riming +INTEGER, SAVE :: NCOHGRG ! conversion of hail to graupel ! ! Allowed processes for the budget of moist variable RRH (hail) ! diff --git a/src/MNH/modd_dynn.f90 b/src/MNH/modd_dynn.f90 index d89a60115879accc53befc512267e6760ec11fba..e0fb84bf7f2fd2c439a00a2cadda69b907d771a5 100644 --- a/src/MNH/modd_dynn.f90 +++ b/src/MNH/modd_dynn.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/modd_dynn.f90,v $ $Revision: 1.2.2.3.2.2.2.2.10.1.2.2 $ $Date: 2014/01/09 15:01:56 $ !----------------------------------------------------------------- ! ################# MODULE MODD_DYN_n @@ -44,6 +44,7 @@ !! Modifications 07/05 (P.Tulet) Add relaxation for dust and aerosol !! Modifications 05/07 (C.Lac) Separation of num diffusion !! Modifications 07/10 (M.Leriche) Add relaxation for ice phase chemical +!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -124,6 +125,7 @@ TYPE DYN_t ! LOGICAL :: LHORELAX_SVC2R2 LOGICAL :: LHORELAX_SVC1R3 + LOGICAL :: LHORELAX_SVLIMA LOGICAL :: LHORELAX_SVELEC LOGICAL :: LHORELAX_SVCHEM LOGICAL :: LHORELAX_SVCHIC @@ -212,6 +214,7 @@ LOGICAL, POINTER :: LHORELAX_RS=>NULL(), LHORELAX_RG=>NULL(), LHORELAX_RH=>NULL( LOGICAL, POINTER :: LHORELAX_TKE=>NULL() LOGICAL, POINTER :: LHORELAX_SVC2R2=>NULL() LOGICAL, POINTER :: LHORELAX_SVC1R3=>NULL() +LOGICAL, POINTER :: LHORELAX_SVLIMA=>NULL() LOGICAL, POINTER :: LHORELAX_SVELEC=>NULL() LOGICAL, POINTER :: LHORELAX_SVCHEM=>NULL() LOGICAL, POINTER :: LHORELAX_SVCHIC=>NULL() @@ -318,6 +321,7 @@ LHORELAX_RH=>DYN_MODEL(KTO)%LHORELAX_RH LHORELAX_TKE=>DYN_MODEL(KTO)%LHORELAX_TKE LHORELAX_SVC2R2=>DYN_MODEL(KTO)%LHORELAX_SVC2R2 LHORELAX_SVC1R3=>DYN_MODEL(KTO)%LHORELAX_SVC1R3 +LHORELAX_SVLIMA=>DYN_MODEL(KTO)%LHORELAX_SVLIMA LHORELAX_SVELEC=>DYN_MODEL(KTO)%LHORELAX_SVELEC LHORELAX_SVCHEM=>DYN_MODEL(KTO)%LHORELAX_SVCHEM LHORELAX_SVCHIC=>DYN_MODEL(KTO)%LHORELAX_SVCHIC diff --git a/src/MNH/modd_nsv.f90 b/src/MNH/modd_nsv.f90 index 2c0fc558f6b5456f1b392124699eb1f38b49ca7e..89324292592d4e58a49e931223e622f7fc298c75 100644 --- a/src/MNH/modd_nsv.f90 +++ b/src/MNH/modd_nsv.f90 @@ -25,6 +25,7 @@ !! M. Leriche 08/07/10 add ice phase chemistry !! C.Lac 07/11 add conditional sampling !! Pialat/Tulet 15/02/12 add ForeFire +!! Modification 01/2016 (JP Pinty) Add LIMA !! !------------------------------------------------------------------------------- ! @@ -114,6 +115,20 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_CS_A = 0 ! number of condit.samplings INTEGER,DIMENSION(JPMODELMAX)::NSV_CSBEG_A = 0 ! with indices in the range : INTEGER,DIMENSION(JPMODELMAX)::NSV_CSEND_A = 0 ! NSV_CSBEG_A...NSV_CSEND_A ! +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_A = 0 ! number of scalar in LIMA +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_BEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_END_A = 0 ! NSV_LIMA_BEG_A...NSV_LIMA_END_A +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NC_A = 0 ! First Nc variable +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NR_A = 0 ! First Nr variable +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_CCN_FREE_A = 0 ! First Free CCN conc. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_CCN_ACTI_A = 0 ! First Acti. CNN conc. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SCAVMASS_A = 0 ! Scavenged mass variable +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NI_A = 0 ! First Ni var. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IFN_FREE_A = 0 ! First Free IFN conc. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IFN_NUCL_A = 0 ! First Nucl. IFN conc. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IMM_NUCL_A = 0 ! First Nucl. IMM conc. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_HOM_HAZE_A = 0 ! Hom. freezing of CCN +! #ifdef MNH_FOREFIRE INTEGER,DIMENSION(JPMODELMAX)::NSV_FF_A = 0 ! number of ForeFire scalar variables INTEGER,DIMENSION(JPMODELMAX)::NSV_FFBEG_A = 0 ! with indices in the range : @@ -197,6 +212,20 @@ INTEGER :: NSV_CS = 0 ! number of condit.samplings INTEGER :: NSV_CSBEG = 0 ! with indices in the range : INTEGER :: NSV_CSEND = 0 ! NSV_CSBEG...NSV_CSEND ! +INTEGER :: NSV_LIMA ! number of scalar in LIMA +INTEGER :: NSV_LIMA_BEG ! with indices in the range : +INTEGER :: NSV_LIMA_END ! NSV_LIMA_BEG_A...NSV_LIMA_END_A +INTEGER :: NSV_LIMA_NC ! +INTEGER :: NSV_LIMA_NR ! +INTEGER :: NSV_LIMA_CCN_FREE ! +INTEGER :: NSV_LIMA_CCN_ACTI ! +INTEGER :: NSV_LIMA_SCAVMASS ! +INTEGER :: NSV_LIMA_NI ! +INTEGER :: NSV_LIMA_IFN_FREE ! +INTEGER :: NSV_LIMA_IFN_NUCL ! +INTEGER :: NSV_LIMA_IMM_NUCL ! +INTEGER :: NSV_LIMA_HOM_HAZE ! +! #ifdef MNH_FOREFIRE INTEGER :: NSV_FF = 0 ! number of ForeFire scalar variables INTEGER :: NSV_FFBEG = 0 ! with indices in the range : diff --git a/src/MNH/modd_parameters.f90 b/src/MNH/modd_parameters.f90 index 4eee85095b509dadb5f2294dec235cdae37b1023..4b8fbdc60dfa2674516c543e0f317bc6bcec5541 100644 --- a/src/MNH/modd_parameters.f90 +++ b/src/MNH/modd_parameters.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/modd_parameters.f90,v $ $Revision: 1.1.8.6.2.1.16.2.2.2 $ !----------------------------------------------------------------- ! ###################### MODULE MODD_PARAMETERS @@ -42,6 +42,7 @@ !! and JPBUMAX from 120 to 250 !! Modification 17/05/04 (P.Jabouille) add JPOUTMAX !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! B.VIE 2016 LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -59,7 +60,7 @@ INTEGER, PARAMETER :: JPVEXT_TURB = 1 ! Vertical External points number INTEGER, PARAMETER :: JPMODELMAX = 8 ! Maximum allowed number of nested models INTEGER, PARAMETER :: JPCPLFILEMAX = 24 ! Maximum allowed number of CouPLing FILEs INTEGER, PARAMETER :: JPBUMAX= 250 ! Maximum of allowed budgets -INTEGER, PARAMETER :: JPBUPROMAX = 42 ! Maximum of allowed processes for all +INTEGER, PARAMETER :: JPBUPROMAX = 60 ! Maximum of allowed processes for all ! budgets INTEGER, PARAMETER :: JPRIMMAX = 6 ! Maximum number of points for the ! horizontal relaxation for the outermost verticals @@ -74,4 +75,7 @@ INTEGER, PARAMETER :: JPDUMMY = 20 ! Size of dummy array ! INTEGER, PARAMETER :: JPOUTMAX = 192 ! Maximum allowed number of OUTput files ! +INTEGER, PARAMETER :: JPLIMACCNMAX = 10 ! Maximum allowed number of CCN modes in LIMA +INTEGER, PARAMETER :: JPLIMAIFNMAX = 10 ! Maximum allowed number of IFN modes in LIMA +! END MODULE MODD_PARAMETERS diff --git a/src/MNH/modd_type_profiler.f90 b/src/MNH/modd_type_profiler.f90 index 0037ae6d5cbc4d6a55cd3154e5835b9ccb181f62..4bd4f703bd2ea5e8b04147a674a801dec5cb4b96 100644 --- a/src/MNH/modd_type_profiler.f90 +++ b/src/MNH/modd_type_profiler.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/modd_type_profiler.f90,v $ $Revision: 1.2.4.1.2.1.10.2.2.2 $ ! MASDEV4_7 modd 2006/06/27 12:27:06 !----------------------------------------------------------------- ! ############################ @@ -36,8 +36,6 @@ IMPLICIT NONE !! MODIFICATIONS !! ------------- !! Original 15/01/02 -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profile !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -80,16 +78,6 @@ REAL, DIMENSION(:,:,:), POINTER :: TKE=>NULL() ! tke(n) REAL, DIMENSION(:,:,:), POINTER :: TH=>NULL() ! th(n) REAL, DIMENSION(:,:,:), POINTER :: THV=>NULL() ! thv(n) REAL, DIMENSION(:,:,:), POINTER :: RARE=>NULL() ! radar reflectivity (n) -REAL, DIMENSION(:,:,:), POINTER :: SPEEDC=>NULL() ! cloud sedim speed (n) -REAL, DIMENSION(:,:,:), POINTER :: SPEEDR=>NULL() ! rain sedim speed (n) -REAL, DIMENSION(:,:,:), POINTER :: SPEEDS=>NULL() ! snow sedim speed (n) -REAL, DIMENSION(:,:,:), POINTER :: SPEEDG=>NULL() ! graup sedim speed (n) -REAL, DIMENSION(:,:,:), POINTER :: SPEEDH=>NULL() ! hail sedim speed (n) -REAL, DIMENSION(:,:,:), POINTER :: INPRC3D=>NULL() ! sedimentation rate(n) -REAL, DIMENSION(:,:,:), POINTER :: INPRR3D=>NULL() ! sedimentation rate(n) -REAL, DIMENSION(:,:,:), POINTER :: INPRS3D=>NULL() ! sedimentation rate(n) -REAL, DIMENSION(:,:,:), POINTER :: INPRG3D=>NULL() ! sedimentation rate(n) -REAL, DIMENSION(:,:,:), POINTER :: INPRH3D=>NULL() ! sedimentation rate(n) REAL, DIMENSION(:,:,:), POINTER :: RHOD=>NULL() ! density of dry air/moist air REAL, DIMENSION(:,:,:,:), POINTER :: R=>NULL() ! r*(n) REAL, DIMENSION(:,:,:,:), POINTER :: SV=>NULL() ! Sv*(n) diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 80b376ab0a9c7138810f0274924a13001db3882e..1ec61b3a4b209c765f03078c1f7ab5e00c4acbbf 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/modeln.f90,v $ $Revision: 1.3.2.5.2.5.2.9.2.12.2.5 $ !----------------------------------------------------------------- ! ################### MODULE MODI_MODEL_n @@ -234,11 +234,12 @@ END MODULE MODI_MODEL_n !! C.Lac 11/09/2015: correction of the budget due to FIT temporal scheme !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! Sep 2015 (S. Bielli) : Remove YDADFILE from argument call -!! of write_phys_param +! of write_phys_param !! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files !! M.Mazoyer : 04/2016 DTHRAD used for radiative cooling when LACTIT +!!! Modification 01/2016 (JP Pinty) Add LIMA !! 06/2016 (G.Delautier) phasage surfex 8 -!!------------------------------------------------------------------------------- +!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ @@ -262,8 +263,8 @@ USE MODD_FRC USE MODD_AIRCRAFT_BALLOON USE MODD_STATION_n USE MODD_PROFILER_n -USE MODD_PARAM_C2R2, ONLY : LSEDC, LRAIN, LACTIT -USE MODD_PARAM_C1R3, ONLY : LSEDI, LHHONI +USE MODD_PARAM_C2R2, ONLY : NSEDC => LSEDC, NRAIN => LRAIN, NACTIT => LACTIT +USE MODD_PARAM_C1R3, ONLY : NSEDI => LSEDI, NHHONI => LHHONI USE MODD_LES USE MODD_LES_BUDGET USE MODD_LUNIT @@ -372,6 +373,16 @@ USE MODD_2D_FRC USE MODD_TIMEZ USE MODE_MNH_TIMING ! +USE MODD_PARAM_LIMA, ONLY : MSEDC => LSEDC, MWARM => LWARM, MRAIN => LRAIN, LACTI, & + MACTIT => LACTIT, LSCAV, NMOD_CCN, LCOLD, & + MSEDI => LSEDI, MHHONI => LHHONI, NMOD_IFN, LHAIL +USE MODD_BLANK +! +USE MODI_FORC_WIND +USE MODI_FORC_SQUALL_LINE +USE MODI_LIMA_PRECIP_SCAVENGING +USE MODD_LIMA_PRECIP_SCAVENGING_n +! USE MODI_SETLB_LG USE MODI_WRITE_SURF_ATM_N USE MODI_SET_MASK @@ -493,15 +504,20 @@ REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRC,DPTR_XINPRR,DPTR_XINPRS,DPTR_XINPRG REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRH,DPTR_XPRCONV,DPTR_XPRSCONV LOGICAL, DIMENSION(:,:),POINTER :: DPTR_GMASKkids ! -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDC -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDR -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDS -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDG -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDH -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRC3D -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRS3D -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRG3D -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRH3D +LOGICAL :: KWARM +LOGICAL :: KRAIN +LOGICAL :: KSEDC +LOGICAL :: KACTIT +LOGICAL :: KSEDI +LOGICAL :: KHHONI +REAL :: TEMPS +INTEGER :: NSV_END +CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file +CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file +! +INTEGER :: ILENG ! Length of comment string in LFIFM file +INTEGER :: IGRID ! C-grid indicator in LFIFM file +INTEGER :: ILENCH ! Length of comment string in LFIFM file ! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZRUS,ZRVS,ZRWS ! @@ -514,6 +530,36 @@ TYPE(HALO2LIST_ll), POINTER :: TZHALO2C_ll ! list of fields to exchange ! !------------------------------------------------------------------------------- ! +!* 0. MICROPHYSICAL SCHEME +! ------------------- +SELECT CASE(CCLOUD) +CASE('C2R2','KHKO','C3R5') + KWARM = .TRUE. + KRAIN = NRAIN + KSEDC = NSEDC + KACTIT = NACTIT +! + KSEDI = NSEDI + KHHONI = NHHONI +CASE('LIMA') + KWARM = MWARM + KRAIN = MRAIN + KSEDC = MSEDC + KACTIT = MACTIT +! + KSEDI = MSEDI + KHHONI = MHHONI +CASE('ICE3','ICE4') !default values + KWARM = LWARM + KRAIN = .TRUE. + KSEDC = .TRUE. + KACTIT = .FALSE. +! + KSEDI = .TRUE. + KHHONI = .FALSE. +END SELECT +! +! !* 1 PRELIMINARY ! ------------ ITYPE = 1 @@ -1632,7 +1678,8 @@ XTIME_LES_BU_PROCESS = 0. ! IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN ! - IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' .OR. CCLOUD == 'C3R5' ) THEN + IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' .OR. CCLOUD == 'C3R5' & + .OR. CCLOUD == "LIMA" ) THEN IF ( LFORCING ) THEN ZWT_ACT_NUC(:,:,:) = XWT(:,:,:) + XWTFRC(:,:,:) ELSE @@ -1666,12 +1713,10 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XPABSM, ZWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & XSVT, XRSVS, & XSRCT, XCLDFR,XCIT, & - LSEDIC,LACTIT, LSEDC, LSEDI, LRAIN, LWARM, LHHONI, & + LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, & - XINPRH,ZINPRH3D, XSOLORG , XMI, & - ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & + XINPRC,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS, XINPRG, XINPRH, XSOLORG , XMI, & ZSEA, ZTOWN ) DEF_NC=.TRUE. #else @@ -1684,12 +1729,10 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XPABSM, ZWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & XSVT, XRSVS, & XSRCT, XCLDFR,XCIT, & - LSEDIC,LACTIT, LSEDC, LSEDI, LRAIN, LWARM, LHHONI, & + LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & - XSOLORG , XMI, & - ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & + XINPRC,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS, XINPRG, XINPRH, XSOLORG , XMI, & ZSEA, ZTOWN ) #endif DEALLOCATE(ZTOWN) @@ -1706,11 +1749,11 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XPABSM, ZWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & XSVT, XRSVS, & XSRCT, XCLDFR,XCIT, & - LSEDIC, LACTIT, LSEDC, LSEDI, LRAIN, LWARM, LHHONI, & + LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & - XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH) + XINPRC,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS,XINPRG,XINPRH & + XSOLORG, XMI) DEF_NC=.TRUE. #else CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & @@ -1722,12 +1765,11 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XPABSM, ZWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & XSVT, XRSVS, & XSRCT, XCLDFR,XCIT, & - LSEDIC, LACTIT, LSEDC, LSEDI, LRAIN, LWARM, LHHONI, & + LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & - XSOLORG, XMI, & - ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH ) + XINPRC,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS,XINPRG, XINPRH, & + XSOLORG, XMI ) #endif END IF XRTHS_CLD = XRTHS - XRTHS_CLD @@ -1745,15 +1787,26 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN END WHERE END DO END IF - IF ((CCLOUD(1:3) == 'ICE' .AND. LSEDIC ) .OR. & - ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') & - .AND. LSEDC ) ) THEN + IF ( (CCLOUD(1:3) == 'ICE' .AND. LSEDIC ) .OR. & + ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' & + .OR. CCLOUD == 'LIMA' ) .AND. KSEDC ) ) & XACPRC = XACPRC + XINPRC * XTSTEP - END IF - IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5') THEN + IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. & + (CCLOUD == 'LIMA' .AND. LCOLD ) ) THEN XACPRS = XACPRS + XINPRS * XTSTEP XACPRG = XACPRG + XINPRG * XTSTEP - IF (CCLOUD == 'ICE4') XACPRH = XACPRH + XINPRH * XTSTEP + IF (CCLOUD == 'ICE4' .OR. (CCLOUD == 'LIMA' .AND. LHAIL)) XACPRH = XACPRH + XINPRH * XTSTEP + END IF +! +! Lessivage des CCN et IFN nucléables par Slinn +! + IF (LSCAV .AND. (CCLOUD == 'LIMA')) THEN + CALL LIMA_PRECIP_SCAVENGING(CCLOUD, ILUOUT, KTCOUNT,XTSTEP,XRT(:,:,:,3), & + XRHODREF, XRHODJ, XZZ, XPABST, XTHT, & + XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + XRSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), XINPAP ) +! + XACPAP(:,:) = XACPAP(:,:) + XINPAP(:,:) * XTSTEP END IF END IF ! @@ -1912,8 +1965,7 @@ IF (LFLYER) & TDTEXP, TDTMOD, TDTSEG, TDTCUR, & XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, & XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, & - XRHODREF,XCIT,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, & - ZSPEEDH,PSEA=ZSEA(:,:)) + XRHODREF,XCIT,PSEA=ZSEA(:,:)) !------------------------------------------------------------------------------- @@ -1937,9 +1989,7 @@ IF (LPROFILER) & TDTEXP, TDTMOD, TDTSEG, TDTCUR, & XXHAT, XYHAT, XZZ,XRHODREF, & XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, & - XAER, XCLDFR, XCIT , & - ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & - ZINPRC3D,XINPRR3D,ZINPRS3D,ZINPRG3D,ZINPRH3D ) + XAER, XCLDFR, XCIT) ! ! CALL SECOND_MNH2(ZTIME2) diff --git a/src/MNH/modn_budget.f90 b/src/MNH/modn_budget.f90 index 4f15755ee2b132033c62aedc29714df60b20a1a4..7ceaa5ddaac89a38dffd12445cae0260a0489c30 100644 --- a/src/MNH/modn_budget.f90 +++ b/src/MNH/modn_budget.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ +! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/modn_budget.f90,v $ $Revision: 1.2.2.1.2.1.2.1.10.1.2.3 $ $Date: 2014/01/09 15:01:56 $ !----------------------------------------------------------------- ! ################## MODULE MODN_BUDGET @@ -226,6 +226,7 @@ !! J.-P. Pinty 25/09/00 add budget terms for C2R2 !! D. Gazen 22/01/01 add NCHEMSV !! C.Lac 04/2016 negative contribution to the budget splitted between advection, turbulence and microphysics for KHKO/C2R2 +!! C. Barthe /16 add budget terms for LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -252,7 +253,8 @@ NAMELIST/NAM_BU_RTH/LBU_RTH, NASSETH, NNESTTH, NADVTH, NFRCTH, & NVTURBTH, NDISSHTH, NNEGATH, NREVATH, NCONDTH, NHENUTH, NHONTH, & NSFRTH, NDEPSTH, NDEPGTH,NRIMTH, NACCTH, NCFRZTH, NWETGTH, & NDRYGTH, NGMLTTH, NIMLTTH, NBERFITH, NCDEPITH, NWETHTH, NHMLTTH, & - NMAFLTH, NNETURTH, NNEADVTH,NNECONTH + NMAFLTH, NNETURTH, NNEADVTH, NNECONTH, & + NHINDTH, NHINCTH, NHONHTH, NHONCTH, NHONRTH, NCEDSTH ! NAMELIST/NAM_BU_RTKE/LBU_RTKE, NASSETKE, NADVTKE, & NFRCTKE, NDIFTKE, NRELTKE, NDRAGTKE, & @@ -261,32 +263,36 @@ NAMELIST/NAM_BU_RTKE/LBU_RTKE, NASSETKE, NADVTKE, & NAMELIST/NAM_BU_RRV/LBU_RRV, NASSERV, NNESTRV, NADVRV, NFRCRV, & NNUDRV, NDIFRV, NRELRV, NDCONVRV, NHTURBRV, NVTURBRV, NNEGARV, & NREVARV, NCONDRV, NHENURV, NDEPSRV, NDEPGRV, NCDEPIRV, NMAFLRV, & - NNETURRV, NNEADVRV,NNECONRV + NNETURRV, NNEADVRV,NNECONRV, NHINDRV, NHONHRV, NCEDSRV ! NAMELIST/NAM_BU_RRC/LBU_RRC, NASSERC, NNESTRC, NADVRC, NFRCRC, & NDIFRC, NRELRC, NDCONVRC, NHTURBRC, NVTURBRC, NNEGARC, NACCRRC, & NAUTORC, NCONDRC, NHONRC, NRIMRC, NWETGRC, NDRYGRC, NIMLTRC, & NBERFIRC, NCDEPIRC, NHENURC, NSEDIRC, NWETHRC, NNETURRC, & - NNEADVRC,NNECONRC + NNEADVRC,NNECONRC, NHINCRC, NHONCRC, NCEDSRC, NREVARC ! NAMELIST/NAM_BU_RRR/LBU_RRR, NASSERR, NNESTRR, NADVRR, NFRCRR, & NDIFRR, NRELRR, NNEGARR, NACCRRR, NAUTORR, NREVARR, NSEDIRR, & NSFRRR, NACCRR, NCFRZRR, NWETGRR, NDRYGRR, NGMLTRR, NWETHRR, & - NHMLTRR + NHMLTRR, & + NHONRRR ! NAMELIST/NAM_BU_RRI/LBU_RRI, NASSERI, NNESTRI, NADVRI, NFRCRI, & NDIFRI, NRELRI, NDCONVRI, NHTURBRI, NVTURBRI, NNEGARI, NSEDIRI, & NHENURI, NHONRI, NAGGSRI, NAUTSRI, NCFRZRI, NWETGRI, NDRYGRI, & - NIMLTRI, NBERFIRI, NCDEPIRI, NWETHRI + NIMLTRI, NBERFIRI, NCDEPIRI, NWETHRI, & + NHINDRI, NHINCRI, NHONHRI, NHONCRI, NCNVIRI, NCNVSRI, & + NHMSRI, NHMGRI, NCEDSRI ! NAMELIST/NAM_BU_RRS/LBU_RRS, NASSERS, NNESTRS, NADVRS, NFRCRS, & NDIFRS, NRELRS, NNEGARS, NSEDIRS, NDEPSRS, NAGGSRS, NAUTSRS, & - NRIMRS, NACCRS, NCMELRS, NWETGRS, NDRYGRS, NWETHRS + NRIMRS, NACCRS, NCMELRS, NWETGRS, NDRYGRS, NWETHRS, & + NCNVIRS, NCNVSRS, NHMSRS ! NAMELIST/NAM_BU_RRG/LBU_RRG, NASSERG, NNESTRG, NADVRG, NFRCRG, & NDIFRG, NRELRG, NNEGARG, NSEDIRG, NSFRRG, NDEPGRG, NRIMRG, NACCRG, & NCMELRG, NCFRZRG, NWETGRG, NDRYGRG, NGMLTRG, NWETHRG, & - NCOHGRG + NHONRRG, NHMGRG, NCOHGRG ! NAMELIST/NAM_BU_RRH/LBU_RRH, NASSERH, NNESTRH, NADVRH, NFRCRH, & NDIFRH, NRELRH, NNEGARH, NSEDIRH, NWETGRH, NWETHRH, NCOHGRH, NHMLTRH diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90 index 90ee35c4ab6399e7afb9d6fb658a39583651c161..22c5a35a32b9c416783b4f3f1d5d31efcb6b4917 100644 --- a/src/MNH/one_wayn.f90 +++ b/src/MNH/one_wayn.f90 @@ -5,7 +5,8 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/one_wayn.f90,v $ $Revision: 1.3.2.3.2.1.2.2.10.1.2.3 $ +! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ################### MODULE MODI_ONE_WAY_n @@ -190,6 +191,7 @@ SUBROUTINE ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT, & !! Bosseur & Filippi 07/2013 Adds Forefire !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 +!!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -212,6 +214,7 @@ USE MODI_VER_INTERP_LIN USE MODI_SET_CONC_RAIN_C2R2 USE MODI_SET_CONC_ICE_C1R3 USE MODI_SET_CHEMAQ_1WAY +USE MODI_SET_CONC_LIMA ! IMPLICIT NONE ! @@ -299,6 +302,8 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCONCT REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMT REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMTI ! +INTEGER :: N_VAR_LIMA +! !------------------------------------------------------------------------------- ! !* 0. INITIALISATION @@ -420,26 +425,26 @@ ENDDO ! concentrations to use the C2R2(or KHKO) microphysical scheme ! (FATHER does not use C2R2(or KHKO) and CHILD uses C2R2(or KHKO)) ! - IF (HCLOUD=="C2R2" .OR. HCLOUD=="KHKO") THEN +IF (HCLOUD=="C2R2" .OR. HCLOUD=="KHKO") THEN IF (CCLOUD/="NONE" .AND. CCLOUD/="C2R2" .AND. CCLOUD/="KHKO") THEN - ZINIT_TYPE="NONE" - ALLOCATE(ZCONCT(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),3)) - IF (CCLOUD == "REVE") THEN + ZINIT_TYPE="NONE" + ALLOCATE(ZCONCT(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),3)) + IF (CCLOUD == "REVE") THEN ZINIT_TYPE = "INI1" - ELSE IF (CCLOUD == "KESS" ) THEN - ZINIT_TYPE = "INI2" - END IF - CALL SET_CONC_RAIN_C2R2 (HLUOUT,ZINIT_TYPE,XRHODREF,XRT,ZCONCT) - DO JSV=1,3 - CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),& - &ZTSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KMI)),KMI) - ENDDO - ELSE - DO JSV=1,NSV_C2R2_A(KMI) - CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KDAD)),& - &ZTSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KMI)),KMI) - END DO - ENDIF + ELSE IF (CCLOUD == "KESS" ) THEN + ZINIT_TYPE = "INI2" + END IF + CALL SET_CONC_RAIN_C2R2 (HLUOUT,ZINIT_TYPE,XRHODREF,XRT,ZCONCT) + DO JSV=1,3 + CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),& + &ZTSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KMI)),KMI) + ENDDO + ELSE + DO JSV=1,NSV_C2R2_A(KMI) + CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KDAD)),& + &ZTSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KMI)),KMI) + END DO + ENDIF ENDIF ! ! Checking also if it is necessary to compute the Ni @@ -447,35 +452,59 @@ ENDIF ! (FATHER does not use C3R5 and CHILD uses C3R5) ! IF (HCLOUD=="C3R5") THEN - IF ( CCLOUD(1:3)=="ICE" ) THEN - ZINIT_TYPE="NONE" - ALLOCATE(ZCONCT(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),5)) - IF (CCLOUD == "REVE") THEN + IF ( CCLOUD(1:3)=="ICE" ) THEN + ZINIT_TYPE="NONE" + ALLOCATE(ZCONCT(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),5)) + IF (CCLOUD == "REVE") THEN ZINIT_TYPE = "INI1" - ELSE IF (CCLOUD == "KESS" ) THEN - ZINIT_TYPE = "INI2" - END IF - CALL SET_CONC_RAIN_C2R2 (HLUOUT,ZINIT_TYPE,XRHODREF,XRT,ZCONCT) - DO JSV=1,3 - CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),& - &ZTSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KMI)),KMI) - ENDDO - ZINIT_TYPE="INI3" - CALL SET_CONC_ICE_C1R3 (HLUOUT,XRHODREF,XRT,ZCONCT) - DO JSV=4,5 - CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),& - &ZTSVT(:,:,:,JSV-4+NSV_C1R3BEG_A(KMI)),KMI) - ENDDO - ELSE - DO JSV=1,NSV_C2R2_A(KMI) - CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KDAD)),& - &ZTSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KMI)),KMI) - END DO - DO JSV=1,NSV_C1R3_A(KMI) - CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_C1R3BEG_A(KDAD)),& - &ZTSVT(:,:,:,JSV-1+NSV_C1R3BEG_A(KMI)),KMI) - END DO - ENDIF + ELSE IF (CCLOUD == "KESS" ) THEN + ZINIT_TYPE = "INI2" + END IF + CALL SET_CONC_RAIN_C2R2 (HLUOUT,ZINIT_TYPE,XRHODREF,XRT,ZCONCT) + DO JSV=1,3 + CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),& + &ZTSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KMI)),KMI) + ENDDO + ZINIT_TYPE="INI3" + CALL SET_CONC_ICE_C1R3 (HLUOUT,XRHODREF,XRT,ZCONCT) + DO JSV=4,5 + CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),& + &ZTSVT(:,:,:,JSV-4+NSV_C1R3BEG_A(KMI)),KMI) + ENDDO + ELSE + DO JSV=1,NSV_C2R2_A(KMI) + CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KDAD)),& + &ZTSVT(:,:,:,JSV-1+NSV_C2R2BEG_A(KMI)),KMI) + END DO + DO JSV=1,NSV_C1R3_A(KMI) + CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_C1R3BEG_A(KDAD)),& + &ZTSVT(:,:,:,JSV-1+NSV_C1R3BEG_A(KMI)),KMI) + END DO + ENDIF +ENDIF +! +! LIMA Scheme +! +IF (HCLOUD=="LIMA" ) THEN + IF (CCLOUD/="LIMA") THEN + ALLOCATE(ZCONCT(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),NSV_LIMA_A(KMI))) + IF (CCLOUD == "REVE") THEN + ZINIT_TYPE = "INI1" + ELSE + ZINIT_TYPE = "NONE" + END IF + CALL SET_CONC_LIMA (HLUOUT,ZINIT_TYPE,XRHODREF,XRT,ZCONCT) + DO JSV=1,NSV_LIMA_A(KMI) + CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),& + &ZTSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI) + ENDDO + ELSE + IF (NSV_LIMA_A(KMI)/=NSV_LIMA_A(KDAD)) CALL ABORT + DO JSV=1,NSV_LIMA_A(KMI) + CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KDAD)),& + &ZTSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI) + END DO + END IF ENDIF ! ! electrical variables diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index 09a1918e8c35a3aa5f97d52d408e989ae2cde604..b8b7fbe23c63ddea833f5c9bf58dcb2ae5caa21e 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -222,6 +222,7 @@ END MODULE MODI_PHYS_PARAM_n !! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test !! 2014 (M.Faivre) !! 06/2016 (G.Delautier) phasage surfex 8 +!! 2016 B.VIE LIMA !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -325,6 +326,8 @@ USE MODD_LATZ_EDFLX USE MODD_MNH_SURFEX_n USE MODI_SWITCH_SBG_LES_N ! +USE MODD_PARAM_LIMA, ONLY : MSEDC => LSEDC, XRTMIN_LIMA=>XRTMIN +! USE MODE_MPPDB IMPLICIT NONE ! @@ -470,8 +473,11 @@ DO JKID = IMI+1,NMODEL ! min value of the possible kids END DO ! IF (IMODSON /= 0 ) THEN - IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN + IF (LUSERC .AND. ( & + (LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & + (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. & + (MSEDC .AND. CCLOUD=='LIMA') & + )) THEN ALLOCATE( ZSAVE_INPRC(SIZE(XINPRC,1),SIZE(XINPRC,2),IMODSON)) ELSE ALLOCATE( ZSAVE_INPRC(0,0,0)) @@ -521,8 +527,11 @@ DO JKID = IMI+1,NMODEL ! min value of the possible kids ! BUG if number of the son does not follow the number of the dad ! IKIDM = JKID-IMI IKIDM = IKIDM + 1 - IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN + IF (LUSERC .AND. ( & + (LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & + (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. & + (MSEDC .AND. CCLOUD=='LIMA') & + )) THEN ZSAVE_INPRC(:,:,IKIDM) = XINPRC(:,:) END IF IF (LUSERR) THEN @@ -623,6 +632,13 @@ IF (CRAD /='NONE') THEN ! refreshed but there is no cloudwater and ice END IF END IF + IF( CCLOUD=='LIMA' )THEN + IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_LIMA(2) .AND. & + MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_LIMA(4) .AND. GCLOUD_ONLY ) THEN + GRAD = .FALSE. ! only the cloudy verticals would be + ! refreshed but there is no cloudwater and ice + END IF + END IF END IF END IF ! @@ -1082,11 +1098,14 @@ IF (CSURF=='EXTE') THEN ! BUG if number of the son does not follow the number of the dad ! IKIDM = JKID-IMI IKIDM = IKIDM + 1 - IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN - WHERE (OMASKkids(:,:) ) - XINPRC(:,:) = ZSAVE_INPRC(:,:,IKIDM) - ENDWHERE + IF (LUSERC .AND. ( & + (LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & + (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. & + (MSEDC .AND. CCLOUD=='LIMA') & + )) THEN + WHERE (OMASKkids(:,:) ) + XINPRC(:,:) = ZSAVE_INPRC(:,:,IKIDM) + ENDWHERE END IF IF (LUSERR) THEN WHERE (OMASKkids(:,:) ) @@ -1461,6 +1480,13 @@ IF ((LDUST).OR.(LSALT)) THEN ! refreshed but there is no cloudwater and ice END IF END IF + IF( CCLOUD=='LIMA' )THEN + IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_LIMA(2) .AND. & + MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_LIMA(4) .AND. GCLOUD_ONLY ) THEN + GCLD = .FALSE. ! only the cloudy verticals would be + ! refreshed but there is no cloudwater and ice + END IF + END IF END IF ! diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 9e97f27f9a598b19ac20f2b9e8e4153bef158773..659452539c6c43ec95affaa87ab732ce71cb1bd0 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -380,6 +380,7 @@ !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! M.Leriche 2015 : add LUSECHEM dans NAM_CH_CONF !! 06/2016 (G.Delautier) phasage surfex 8 +!! B.VIE 2016 : LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -770,6 +771,7 @@ LHORELAX_RH=LUSERH LHORELAX_SV(:)=.FALSE. LHORELAX_SVC2R2 = (NSV_C2R2 > 0) LHORELAX_SVC1R3 = (NSV_C1R3 > 0) +LHORELAX_SVLIMA = (NSV_LIMA > 0) LHORELAX_SVELEC = (NSV_ELEC > 0) LHORELAX_SVCHEM = (NSV_CHEM > 0) LHORELAX_SVCHIC = (NSV_CHIC > 0) diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90 index 7b3174c2993ff5e3d6451ca01ff3c1283ffe554e..269caeb1cdce0381ef65dae7f32cef4c7f88750b 100644 --- a/src/MNH/profilern.f90 +++ b/src/MNH/profilern.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/profilern.f90,v $ $Revision: 1.3.4.1.2.1.10.2.2.3 $ ! MASDEV4_7 profiler 2006/06/01 09:51:49 !----------------------------------------------------------------- ! ########################## @@ -18,9 +18,7 @@ INTERFACE TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ,PRHODREF, & PU, PV, PW, PTH, PR, PSV, PTKE, & - PTS,PP, PAER, PCLDFR, PCIT, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH,& - PINPRC3D,PINPRR3D,PINPRS3D,PINPRG3D,PINPRH3D) + PTS,PP, PAER, PCLDFR, PCIT) ! USE MODD_TYPE_DATE ! @@ -46,16 +44,6 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PP ! pressure REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PAER ! aerosol extinction REAL, DIMENSION(:,:,:), INTENT(IN) :: PCLDFR ! cloud fraction REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! ice concentration -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRC3D! 3D sedimentation rate -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRR3D! 3D sedimentation rate -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRS3D! 3D sedimentation rate -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRG3D! 3D sedimentation rate -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRH3D! 3D sedimentation rate ! !------------------------------------------------------------------------------- ! @@ -70,9 +58,7 @@ END MODULE MODI_PROFILER_n TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ,PRHODREF, & PU, PV, PW, PTH, PR, PSV, PTKE, & - PTS, PP, PAER, PCLDFR, PCIT, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH,& - PINPRC3D,PINPRR3D,PINPRS3D,PINPRG3D,PINPRH3D) + PTS,PP, PAER, PCLDFR, PCIT) ! ######################################################## ! ! @@ -107,8 +93,6 @@ END MODULE MODI_PROFILER_n !! Original 15/02/2002 !! March 2013 : C.Lac : Corrections for 1D + new fields (RARE,THV,DD,FF) !! April 2014 : C.Lac : Call RADAR only if ICE3 -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profiler !! !! !! -------------------------------------------------------------------------- @@ -165,16 +149,6 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PP ! pressure REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PAER ! aerosol extinction REAL, DIMENSION(:,:,:), INTENT(IN) :: PCLDFR ! cloud fraction REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! ice concentration -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRC3D! 3D sedimentation rate -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRR3D! 3D sedimentation rate -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRS3D! 3D sedimentation rate -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRG3D! 3D sedimentation rate -REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRH3D! 3D sedimentation rate ! !------------------------------------------------------------------------------- ! @@ -232,6 +206,9 @@ REAL :: ZZHD_PROFILER ! ZHD at station location REAL :: ZZWD_PROFILER ! ZWD at station location REAL :: ZZHDR ! ZHD correction at station location REAL :: ZZWDR ! ZWD correction at station location +!-------- Calculation parameters -------- +REAL :: ZK1,ZK2,ZK3 ! k1, k2 and K3 atmospheric refractivity constants +REAL :: ZRDSRV ! XRD/XRV ! INTEGER :: IINFO_ll ! return code INTEGER :: ILUOUT ! logical unit @@ -241,8 +218,6 @@ INTEGER :: I ! loop for stations REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2)) :: ZZTD,ZZHD,ZZWD REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZTEMP,ZRARE,ZTHV,ZTEMPV REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZWORK32,ZWORK33,ZWORK34,ZCIT -REAL :: ZK1,ZK2,ZK3 ! k1, k2 and K3 atmospheric refractivity constants -REAL :: ZRDSRV ! XRD/XRV !---------------------------------------------------------------------------- ! !* 2. PRELIMINARIES @@ -521,16 +496,6 @@ IF (GSTORE) THEN TPROFILER%ZZ (IN,:,I) = ZZ(:) TPROFILER%RHOD(IN,:,I) = ZRHOD(:) IF (SIZE(PR,4) == 6) TPROFILER%RARE(IN,:,I) = PROFILER_INTERP(ZRARE) - TPROFILER%SPEEDC(IN,:,I) = PROFILER_INTERP(PSPEEDC) - TPROFILER%SPEEDR(IN,:,I) = PROFILER_INTERP(PSPEEDR) - TPROFILER%SPEEDS(IN,:,I) = PROFILER_INTERP(PSPEEDS) - TPROFILER%SPEEDG(IN,:,I) = PROFILER_INTERP(PSPEEDG) - TPROFILER%SPEEDH(IN,:,I) = PROFILER_INTERP(PSPEEDH) - TPROFILER%INPRC3D(IN,:,I) = PROFILER_INTERP(PINPRC3D)*3.6E6 - TPROFILER%INPRR3D(IN,:,I) = PROFILER_INTERP(PINPRR3D)*3.6E6 - TPROFILER%INPRS3D(IN,:,I) = PROFILER_INTERP(PINPRS3D)*3.6E6 - TPROFILER%INPRG3D(IN,:,I) = PROFILER_INTERP(PINPRG3D)*3.6E6 - TPROFILER%INPRH3D(IN,:,I) = PROFILER_INTERP(PINPRH3D)*3.6E6 IF (.NOT. L1D) THEN TPROFILER%P (IN,:,I) = PROFILER_INTERP(PP(II(I):II(I)+1,IJ(I):IJ(I)+1,:)) ELSE @@ -611,16 +576,6 @@ IF (GSTORE) THEN CALL DISTRIBUTE_PROFILER(TPROFILER%THV (IN,JK,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%RHOD(IN,JK,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%RARE(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDC(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDR(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDS(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDG(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDH(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%INPRC3D(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%INPRR3D(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%INPRS3D(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%INPRG3D(IN,JK,I)) - CALL DISTRIBUTE_PROFILER(TPROFILER%INPRH3D(IN,JK,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%IWV(IN,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%ZTD(IN,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%ZHD(IN,I)) diff --git a/src/MNH/radar_rain_ice.f90 b/src/MNH/radar_rain_ice.f90 index bb73b0f18c14e5b278dca4ce08f44c5205f092cb..a48ed3c87fea4066b0db85b76df3bcfbefef1283 100644 --- a/src/MNH/radar_rain_ice.f90 +++ b/src/MNH/radar_rain_ice.f90 @@ -8,7 +8,8 @@ ! ########################## ! INTERFACE - SUBROUTINE RADAR_RAIN_ICE(PRT,PCIT,PRHODREF,PTEMP,PRARE,PVDOP,PRZDR,PRKDP) + SUBROUTINE RADAR_RAIN_ICE(PRT,PCIT,PRHODREF,PTEMP,PRARE,PVDOP,PRZDR,PRKDP,& + PCRT) ! REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! microphysical mix. ratios at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration at t @@ -21,6 +22,8 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRZDR! radar differential reflectivity ! H-V in dBZ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRKDP! radar differential phase shift ! H-V in degree/km +REAL, DIMENSION(:,:,:), INTENT(IN),OPTIONAL :: PCRT ! rain concentration at t + ! END SUBROUTINE RADAR_RAIN_ICE ! @@ -28,7 +31,7 @@ END INTERFACE ! END MODULE MODI_RADAR_RAIN_ICE ! ######################################################################### - SUBROUTINE RADAR_RAIN_ICE(PRT,PCIT,PRHODREF,PTEMP,PRARE,PVDOP,PRZDR,PRKDP) + SUBROUTINE RADAR_RAIN_ICE(PRT,PCIT,PRHODREF,PTEMP,PRARE,PVDOP,PRZDR,PRKDP,PCRT) ! ######################################################################### ! !!**** *RADAR_RAIN_ICE * - computes some pertinent radar parameters @@ -92,9 +95,37 @@ END MODULE MODI_RADAR_RAIN_ICE ! USE MODD_CST USE MODD_REF -USE MODD_RAIN_ICE_DESCR -USE MODD_RAIN_ICE_PARAM +!USE MODD_RAIN_ICE_PARAM +USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEXR,& + XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XAR_I=>XAR,& + XALPHAC_I=>XALPHAC,XNUC_I=>XNUC,& + XLBC_I=>XLBC,XBC_I=>XBC,XAC_I=>XAC,& + XALPHAC2_I=>XALPHAC2,XNUC2_I=>XNUC2,& + XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XLBEXS_I=>XLBEXS,& + XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,& + XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,& + XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,& + XALPHAI_I=>XALPHAI,XNUI_I=>XNUI,XDI_I=>XDI,XLBEXI_I=>XLBEXI,& + XLBI_I=>XLBI,XAI_I=>XAI,XBI_I=>XBI,XC_I_I=>XC_I,XCS_I=>XCS,XDS_I=>XDS,& + XRTMIN_I=>XRTMIN,XCONC_LAND,XCONC_SEA,XCR_I=>XCR,XDR_I=>XDR,& + XAH_I=>XAH,XLBH_I=>XLBH,XLBEXH_I=>XLBEXH,XCCH_I=>XCCH,& + XALPHAH_I=>XALPHAH,XNUH_I=>XNUH,XCXH_I=>XCXH,XDH_I=>XDH,XCH_I=>XCH,XBH_I=>XBH +USE MODD_PARAM_LIMA_WARM, ONLY: XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XAR_L=>XAR,& + XBC_L=>XBC,XAC_L=>XAC,XCR_L=>XCR,XDR_L=>XDR +USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,& + XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,& + XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XCS_L=>XCS,XDS_L=>XDS + +USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,& + XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG,& + XAH_L=>XAH,XLBH_L=>XLBH,XLBEXH_L=>XLBEXH,XCCH_L=>XCCH,& + XCXH_L=>XCXH,XDH_L=>XDH,XCH_L=>XCH,XALPHAH_L=>XALPHAH,XNUH_L=>XNUH,XBH_L=>XBH + +USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,& + XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,& + XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC USE MODD_PARAMETERS +USE MODD_PARAM_n, ONLY : CCLOUD USE MODD_LUNIT ! USE MODE_IO_ll @@ -116,6 +147,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRZDR! radar differential reflectivity ! H-V in dBZ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRKDP! radar differential phase shift ! H-V in degree/km +REAL, DIMENSION(:,:,:), INTENT(IN),OPTIONAL :: PCRT ! rain concentration at t ! !* 0.2 Declarations of local variables : ! @@ -155,6 +187,13 @@ REAL :: ZR0, ZR1, ZR2 ! r(D) parameters REAL :: Z1, Z2, Z3 ! expansion coefficients ! INTEGER :: II, IJ, IK +! +!REAL :: ZA,ZB,ZCX,ZALPHA,ZNU,ZLB,ZLBEX,ZRHOHYD ! generic microphysical parameters +!REAL,DIMENSION(:),ALLOCATABLE :: ZRTMIN ! local values for XRTMIN + +REAL, DIMENSION(SIZE(PTEMP,1),SIZE(PTEMP,2),SIZE(PTEMP,3)) :: ZLB_L +REAL :: ZLB,ZLBEX , ZCC,ZCX,ZC,ZD + !------------------------------------------------------------------------------- ! ! @@ -210,108 +249,194 @@ IF (SIZE(PRT,4) >= 3) THEN Z3=7.8 ! ZLBDA(:,:,:) = 0.0 - IF( SIZE(PRT,4) == 3 ) THEN - GRAIN(:,:,:) = PRT(:,:,:,3).GT.1.0E-15 - XCCR = 1.E7; XLBEXR = -0.25 ! Marshall-Palmer law - XALPHAR = 1.0; XNUR = 1.0 ! Marshall-Palmer law - XCR = 842.; XDR = 0.8 ! Raindrop fall-speed - XLBR = (XPI*XRHOLW*XCCR)**(-XLBEXR) + IF (CCLOUD == 'LIMA') THEN + GRAIN(:,:,:) =( (PRT(:,:,:,3).GT.XRTMIN_L(3)).AND. PCRT(:,:,:).GT.0.0) + ZLBEX=1.0/(-XBR_L) + ZLB_L(:,:,:)=( XAR_L*PCRT(:,:,:)*PRHODREF(:,:,:)*MOMG(XALPHAR_L,XNUR_L,XBR_L) )**(-ZLBEX) + WHERE( GRAIN(:,:,:) ) + ZLBDA(:,:,:) =ZLB_L(:,:,:) *( PRHODREF(:,:,:)*PRT(:,:,:,3) )**(ZLBEX) + PRARE(:,:,:) = 1.E18*PCRT(:,:,:)*PRHODREF(:,:,:)*(ZLBDA(:,:,:)**(-6.0))*MOMG(XALPHAR_L,XNUR_L,6.0) + PVDOP(:,:,:) = 1.E18*PCRT(:,:,:)*PRHODREF(:,:,:)*XCR_L*(ZLBDA(:,:,:)**(-6.0-XDR_L)) & + *MOMG(XALPHAR_L,XNUR_L,6.0+XDR_L) + PRZDR(:,:,:) = Z1+Z2*(PRHODREF(:,:,:)*PRT(:,:,:,3))**(-ZLBEX)+Z3*(PRHODREF(:,:,:)*PRT(:,:,:,3))**(-2.*ZLBEX) + PRZDR(:,:,:) = 10.0*LOG10( PRZDR(:,:,:) ) ! now in dBZ + PRKDP(:,:,:) = 6.7E3*( PRHODREF(:,:,:)*PRT(:,:,:,3) )* & + (-ZR1*(MOMG(XALPHAR_L,XNUR_L,4.0)/MOMG(XALPHAR_L,XNUR_L,3.0))*(1.0/ZLBDA(:,:,:)) & + -ZR2*(MOMG(XALPHAR_L,XNUR_L,5.0)/MOMG(XALPHAR_L,XNUR_L,3.0))*(1.0/ZLBDA(:,:,:)**2)) + ! in degree/km + END WHERE ELSE - GRAIN(:,:,:) = PRT(:,:,:,3).GT.XRTMIN(3) - END IF - WHERE( GRAIN(:,:,:) ) - ZLBDA(:,:,:) = XLBR*( PRHODREF(:,:,:)*PRT(:,:,:,3) )**XLBEXR - PRARE(:,:,:) = 1.E18*XCCR*(ZLBDA(:,:,:)**(ZCXR-6.0))*MOMG(XALPHAR,XNUR,6.0) - PVDOP(:,:,:) = 1.E18*XCCR*XCR*(ZLBDA(:,:,:)**(ZCXR-6.0-XDR)) & - *MOMG(XALPHAR,XNUR,6.0+XDR) -! PRZDR(:,:,:) = ZSCALE*(1.0 & -! +Z1*(MOMG(XALPHAR,XNUR,7.0)/MOMG(XALPHAR,XNUR,6.0))*(1.0/ZLBDA(:,:,:)) & -! +Z2*(MOMG(XALPHAR,XNUR,8.0)/MOMG(XALPHAR,XNUR,6.0))*(1.0/ZLBDA(:,:,:)**2)) - PRZDR(:,:,:) = Z1+Z2*(PRHODREF(:,:,:)*PRT(:,:,:,3))**(-XLBEXR)+Z3*(PRHODREF(:,:,:)*PRT(:,:,:,3))**(-2.*XLBEXR) -! PRZDR(:,:,:) = -10.0*LOG10( PRZDR(:,:,:) ) ! now in dBZ - PRZDR(:,:,:) = 10.0*LOG10( PRZDR(:,:,:) ) ! now in dBZ - PRKDP(:,:,:) = 6.7E3*( PRHODREF(:,:,:)*PRT(:,:,:,3) )* & - (-ZR1*(MOMG(XALPHAR,XNUR,4.0)/MOMG(XALPHAR,XNUR,3.0))*(1.0/ZLBDA(:,:,:)) & - -ZR2*(MOMG(XALPHAR,XNUR,5.0)/MOMG(XALPHAR,XNUR,3.0))*(1.0/ZLBDA(:,:,:)**2)) + IF( SIZE(PRT,4) == 3 ) THEN + GRAIN(:,:,:) = PRT(:,:,:,3).GT.1.0E-15 + ZCC = 1.E7; ZLBEX = -0.25 ! Marshall-Palmer law + ZALPHA = 1.0; ZNU = 1.0 ! Marshall-Palmer law + ZC = 842.; ZD = 0.8 ! Raindrop fall-speed + ZLB = (XPI*XRHOLW*ZCC)**(-XLBEXR_I) + ELSE + ZLB=XLBR_I + ZLBEX=XLBEXR_I + ZCC=XCCR_I + ZALPHA=XALPHAR_I + ZNU=XNUR_I + ZC=XCR_I + ZD=XDR_I + GRAIN(:,:,:) = PRT(:,:,:,3).GT.XRTMIN_I(3) + END IF + WHERE( GRAIN(:,:,:) ) + ZLBDA(:,:,:) = ZLB*( PRHODREF(:,:,:)*PRT(:,:,:,3) )**ZLBEX + PRARE(:,:,:) = 1.E18*ZCC*(ZLBDA(:,:,:)**(ZCXR-6.0))*MOMG(ZALPHA,ZNU,6.0) + PVDOP(:,:,:) = 1.E18*ZCC*ZC*(ZLBDA(:,:,:)**(ZCXR-6.0-ZD)) & + *MOMG(ZALPHA,ZNU,6.0+ZD) + PRZDR(:,:,:) = Z1+Z2*(PRHODREF(:,:,:)*PRT(:,:,:,3))**(-ZLBEX)+Z3*(PRHODREF(:,:,:)*PRT(:,:,:,3))**(-2.*ZLBEX) + PRZDR(:,:,:) = 10.0*LOG10( PRZDR(:,:,:) ) ! now in dBZ + PRKDP(:,:,:) = 6.7E3*( PRHODREF(:,:,:)*PRT(:,:,:,3) )* & + (-ZR1*(MOMG(ZALPHA,ZNU,4.0)/MOMG(ZALPHA,ZNU,3.0))*(1.0/ZLBDA(:,:,:)) & + -ZR2*(MOMG(ZALPHA,ZNU,5.0)/MOMG(ZALPHA,ZNU,3.0))*(1.0/ZLBDA(:,:,:)**2)) ! in degree/km - END WHERE + END WHERE + ENDIF + END IF + + ! !* 4. PRISTINE ICE ! ------------ ! IF (SIZE(PRT,4) >= 4) THEN ZEQICE = 0.224 - ZDMELT_FACT = ( (6.0*XAI)/(XPI*XRHOLW) )**(2.0) - ZEXP = 2.0*XBI - WHERE( PRT(:,:,:,4).GT.XRTMIN(4) .AND. PCIT(:,:,:).GT.0.0 ) - ZLBDA(:,:,:) = XLBI*( PRHODREF(:,:,:)*PRT(:,:,:,4)/PCIT(:,:,:) )**XLBEXI - ZW(:,:,:) = ZEQICE*ZDMELT_FACT & - *1.E18*PCIT(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAI,XNUI,ZEXP) - PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAI,XNUI,ZEXP+XDI) & - *1.E18*PCIT(:,:,:)*XC_I*(ZLBDA(:,:,:)**(-ZEXP-XDI)) - PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) - END WHERE + IF (CCLOUD == 'LIMA') THEN + ZDMELT_FACT = ( (6.0*XAI_L)/(XPI*XRHOLW) )**(2.0) + ZEXP = 2.0*XBI_L + WHERE( PRT(:,:,:,4).GT.XRTMIN_L(4) .AND. PCIT(:,:,:).GT.0.0 ) + ZLBDA(:,:,:) = XLBI_L**(XLBEXI_L)* (PRT(:,:,:,4)/PCIT(:,:,:))**(-XLBEXI_L) + ZW(:,:,:) = ZEQICE*ZDMELT_FACT *1.E18*PRHODREF(:,:,:)*PCIT(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAI_L,XNUI_L,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAI_L,XNUI_L,ZEXP+XDI_L) & + *1.E18*PRHODREF(:,:,:)*PCIT(:,:,:)*XC_I_L*(ZLBDA(:,:,:)**(-ZEXP-XDI_L)) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + ELSE + ZDMELT_FACT = ( (6.0*XAI_I)/(XPI*XRHOLW) )**(2.0) + ZEXP = 2.0*XBI_I + WHERE( PRT(:,:,:,4).GT.XRTMIN_I(4) .AND. PCIT(:,:,:).GT.0.0 ) + ZLBDA(:,:,:) = XLBI_I*( PRHODREF(:,:,:)*PRT(:,:,:,4)/PCIT(:,:,:) )**XLBEXI_I + ZW(:,:,:) = ZEQICE*ZDMELT_FACT*1.E18*PCIT(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAI_I,XNUI_I,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAI_I,XNUI_I,ZEXP+XDI_I) & + *1.E18*PCIT(:,:,:)*XC_I_I*(ZLBDA(:,:,:)**(-ZEXP-XDI_I)) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + END IF END IF ! !* 5. SNOW/AGGREGATES ! --------------- ! IF (SIZE(PRT,4) >= 5) THEN - ZDMELT_FACT = ( (6.0*XAS)/(XPI*XRHOLW) )**(2.0) - ZEXP = 2.0*XBS - WHERE( PRT(:,:,:,5).GT.XRTMIN(5) ) - ZLBDA(:,:,:) = XLBS*( PRHODREF(:,:,:)*PRT(:,:,:,5) )**XLBEXS - ZW(:,:,:) = ZEQICE*ZDMELT_FACT & - *1.E18*XCCS*(ZLBDA(:,:,:)**(XCXS-ZEXP))*MOMG(XALPHAS,XNUS,ZEXP) - PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS,XNUS,ZEXP+XDS) & - *1.E18*XCCS*XCS*(ZLBDA(:,:,:)**(XCXS-ZEXP-XDS)) - PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) - END WHERE + IF (CCLOUD=='LIMA') THEN + ZDMELT_FACT = ( (6.0*XAS_L)/(XPI*XRHOLW) )**(2.0) + ZEXP = 2.0*XBS_L + WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) ) + ZLBDA(:,:,:) = XLBS_L*( PRHODREF(:,:,:)*PRT(:,:,:,5) )**XLBEXS_L + ZW(:,:,:) = ZEQICE*ZDMELT_FACT & + *1.E18*XCCS_L*(ZLBDA(:,:,:)**(XCXS_L-ZEXP))*MOMG(XALPHAS_L,XNUS_L,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_L,XNUS_L,ZEXP+XDS_L) & + *1.E18*XCCS_L*XCS_L*(ZLBDA(:,:,:)**(XCXS_L-ZEXP-XDS_L)) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + ELSE + ZDMELT_FACT = ( (6.0*XAS_I)/(XPI*XRHOLW) )**(2.0) + ZEXP = 2.0*XBS_I + WHERE( PRT(:,:,:,5).GT.XRTMIN_I(5) ) + ZLBDA(:,:,:) = XLBS_I*( PRHODREF(:,:,:)*PRT(:,:,:,5) )**XLBEXS_I + ZW(:,:,:) = ZEQICE*ZDMELT_FACT & + *1.E18*XCCS_I*(ZLBDA(:,:,:)**(XCXS_I-ZEXP))*MOMG(XALPHAS_I,XNUS_I,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_I,XNUS_I,ZEXP+XDS_I) & + *1.E18*XCCS_I*XCS_I*(ZLBDA(:,:,:)**(XCXS_I-ZEXP-XDS_I)) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + ENDIF END IF ! !* 6. GRAUPELN ! -------- ! IF (SIZE(PRT,4) >= 6) THEN - ZFRAC_WATER = 0.14 - ZDMELT_FACT = ( (6.0*XAG)/(XPI*XRHOLW) )**(2.0) - WHERE( PTEMP(:,:,:).GT.XTT ) - ZREFL_MELT_CONV(:,:,:) = ((1.0-ZFRAC_WATER)*ZEQICE+ZFRAC_WATER)*ZDMELT_FACT - ELSEWHERE - ZREFL_MELT_CONV(:,:,:) = ZEQICE*ZDMELT_FACT - END WHERE -! - ZEXP = 2.0*XBG - WHERE( PRT(:,:,:,6).GT.XRTMIN(6) ) - ZLBDA(:,:,:) = XLBG*( PRHODREF(:,:,:)*PRT(:,:,:,6) )**XLBEXG - ZW(:,:,:) = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG* & - (ZLBDA(:,:,:)**(XCXG-ZEXP))*MOMG(XALPHAG,XNUG,ZEXP) - PVDOP(:,:,:) = PVDOP(:,:,:) + & - ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG*XCG* & - (ZLBDA(:,:,:)**(XCXG-ZEXP-XDG))*MOMG(XALPHAG,XNUG,ZEXP+XDG) - PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) - END WHERE + IF (CCLOUD=='LIMA') THEN + ZFRAC_WATER = 0.14 + ZDMELT_FACT = ( (6.0*XAG_L)/(XPI*XRHOLW) )**(2.0) + WHERE( PTEMP(:,:,:).GT.XTT ) + ZREFL_MELT_CONV(:,:,:) = ((1.0-ZFRAC_WATER)*ZEQICE+ZFRAC_WATER)*ZDMELT_FACT + ELSEWHERE + ZREFL_MELT_CONV(:,:,:) = ZEQICE*ZDMELT_FACT + END WHERE +! + ZEXP = 2.0*XBG_L + WHERE( PRT(:,:,:,6).GT.XRTMIN_L(6) ) + ZLBDA(:,:,:) = XLBG_L*( PRHODREF(:,:,:)*PRT(:,:,:,6) )**XLBEXG_L + ZW(:,:,:) = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG_L* & + (ZLBDA(:,:,:)**(XCXG_L-ZEXP))*MOMG(XALPHAG_L,XNUG_L,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:) + & + ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG_L*XCG_L* & + (ZLBDA(:,:,:)**(XCXG_L-ZEXP-XDG_L))*MOMG(XALPHAG_L,XNUG_L,ZEXP+XDG_L) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + ELSE + ZFRAC_WATER = 0.14 + ZDMELT_FACT = ( (6.0*XAG_I)/(XPI*XRHOLW) )**(2.0) + WHERE( PTEMP(:,:,:).GT.XTT ) + ZREFL_MELT_CONV(:,:,:) = ((1.0-ZFRAC_WATER)*ZEQICE+ZFRAC_WATER)*ZDMELT_FACT + ELSEWHERE + ZREFL_MELT_CONV(:,:,:) = ZEQICE*ZDMELT_FACT + END WHERE +! + ZEXP = 2.0*XBG_I + WHERE( PRT(:,:,:,6).GT.XRTMIN_I(6) ) + ZLBDA(:,:,:) = XLBG_I*( PRHODREF(:,:,:)*PRT(:,:,:,6) )**XLBEXG_I + ZW(:,:,:) = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG_I* & + (ZLBDA(:,:,:)**(XCXG_I-ZEXP))*MOMG(XALPHAG_I,XNUG_I,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:) + & + ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG_I*XCG_I* & + (ZLBDA(:,:,:)**(XCXG_I-ZEXP-XDG_I))*MOMG(XALPHAG_I,XNUG_I,ZEXP+XDG_I) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + ENDIF END IF ! !* 7. HAILSTONES ! ---------- -! +!² IF (SIZE(PRT,4) >= 7) THEN - ZFRAC_WATER = 1. - ZDMELT_FACT = ( (6.0*XAH)/(XPI*XRHOLW) )**(2.0) - ZREFL_MELT_CONV(:,:,:) = ((1.0-ZFRAC_WATER)*ZEQICE+ZFRAC_WATER)*ZDMELT_FACT -! - ZEXP = 2.0*XBH - WHERE( PRT(:,:,:,7).GT.XRTMIN(7) ) - ZLBDA(:,:,:) = XLBH*( PRHODREF(:,:,:)*PRT(:,:,:,7) )**XLBEXH - ZW(:,:,:) = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH* & - (ZLBDA(:,:,:)**(XCXH-ZEXP))*MOMG(XALPHAH,XNUH,ZEXP) - PVDOP(:,:,:) = PVDOP(:,:,:) + & - ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH*XCH* & - (ZLBDA(:,:,:)**(XCXH-ZEXP-XDH))*MOMG(XALPHAH,XNUH,ZEXP+XDH) - PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) - END WHERE + IF (CCLOUD=='LIMA') THEN + ZFRAC_WATER = 1. + ZDMELT_FACT = ( (6.0*XAH_L)/(XPI*XRHOLW) )**(2.0) + ZREFL_MELT_CONV(:,:,:) = ((1.0-ZFRAC_WATER)*ZEQICE+ZFRAC_WATER)*ZDMELT_FACT +! + ZEXP = 2.0*XBH_L + WHERE( PRT(:,:,:,7).GT.XRTMIN_L(7) ) + ZLBDA(:,:,:) = XLBH_L*( PRHODREF(:,:,:)*PRT(:,:,:,7) )**XLBEXH_L + ZW(:,:,:) = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH_L* & + (ZLBDA(:,:,:)**(XCXH_L-ZEXP))*MOMG(XALPHAH_L,XNUH_L,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:) + & + ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH_L*XCH_L* & + (ZLBDA(:,:,:)**(XCXH_L-ZEXP-XDH_L))*MOMG(XALPHAH_L,XNUH_L,ZEXP+XDH_L) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + ELSE + ZFRAC_WATER = 1. + ZDMELT_FACT = ( (6.0*XAH_I)/(XPI*XRHOLW) )**(2.0) + ZREFL_MELT_CONV(:,:,:) = ((1.0-ZFRAC_WATER)*ZEQICE+ZFRAC_WATER)*ZDMELT_FACT +! + ZEXP = 2.0*XBH_I + WHERE( PRT(:,:,:,7).GT.XRTMIN_I(7) ) + ZLBDA(:,:,:) = XLBH_I*( PRHODREF(:,:,:)*PRT(:,:,:,7) )**XLBEXH_I + ZW(:,:,:) = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH_I* & + (ZLBDA(:,:,:)**(XCXH_I-ZEXP))*MOMG(XALPHAH_I,XNUH_I,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:) + & + ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH_I*XCH_I* & + (ZLBDA(:,:,:)**(XCXH_I-ZEXP-XDH_I))*MOMG(XALPHAH_I,XNUH_I,ZEXP+XDH_I) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + END IF END IF ! !* 8. UNIT CONVERSION @@ -335,6 +460,8 @@ WHERE( PRARE(:,:,:) > 1.E-3 ) ELSEWHERE PRARE(:,:,:) = XUNDEF END WHERE + + ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/radar_scattering.f90 b/src/MNH/radar_scattering.f90 index e9434099b850b0daceeefbce1280f1528543bdfe..991a500e2f65ab33faf4463ec15d19b5bbbb8634 100644 --- a/src/MNH/radar_scattering.f90 +++ b/src/MNH/radar_scattering.f90 @@ -115,14 +115,14 @@ USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XDR_I=>XDR,XLBEXR XLBI_I=>XLBI,XAI_I=>XAI,XBI_I=>XBI,XC_I_I=>XC_I,& XRTMIN_I=>XRTMIN !!LIMA -!USE MODD_PARAM_LIMA_WARM, ONLY: XDR_L=>XDR,XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XCR_L=>XCR -!USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,& -! XDS_L=>XDS,XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XCS_L=>XCS -! -!USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG -!USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,& -! XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,& -! XRTMIN_L=>XRTMIN +USE MODD_PARAM_LIMA_WARM, ONLY: XDR_L=>XDR,XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XCR_L=>XCR +USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,& + XDS_L=>XDS,XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XCS_L=>XCS + +USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG +USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,& + XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,& + XRTMIN_L=>XRTMIN !!LIMA USE MODD_RADAR, ONLY:XLAM_RAD,XSTEP_RAD,NBELEV,NDIFF,LATT,NPTS_GAULAG,LQUAD,XVALGROUND,NDGS, & LFALL,LWBSCS,LWREFL,XREFLVDOPMIN,XREFLMIN,LSNRT,XSNRMIN @@ -304,41 +304,41 @@ ENDIF ZRE_S22S11_G=0 ZIM_S22S11_G=0 ! Initialisation varibales microphysiques -!IF (GLIMA) THEN ! LIMA -! ZLBR=XLBR_L -! ZLBEXR=XLBEXR_L -! ZDR=XDR_L -! ZALPHAR=XALPHAR_L -! ZNUR=XNUR_L -! ZBR=XBR_L -! ZCCS=XCCS_L -! ZCXS=XCXS_L -! ZLBS=XLBS_L -! ZLBEXS=XLBEXS_L -! ZDS=XDS_L -! ZALPHAS=XALPHAS_L -! ZNUS=XNUS_L -! ZAS=XAS_L -! ZBS=XBS_L -! ZCCG=XCCG_L -! ZCXG=XCXG_L -! ZLBG=XLBG_L -! ZLBEXG=XLBEXG_L -! ZDG=XDG_L -! ZALPHAG=XALPHAG_L -! ZNUG=XNUG_L -! ZAG=XAG_L -! ZBG=XBG_L -! ZLBI=XLBI_L -! ZLBEXI=XLBEXI_L -! ZDI=XDI_L -! ZALPHAI=XALPHAI_L -! ZNUI=XNUI_L -! ZAI=XAI_L -! ZBI=XBI_L -! ALLOCATE(ZRTMIN(SIZE(XRTMIN_L))) -! ZRTMIN=XRTMIN_L -!ELSE ! ICE3 +IF (GLIMA) THEN ! LIMA + ZLBR=XLBR_L + ZLBEXR=XLBEXR_L + ZDR=XDR_L + ZALPHAR=XALPHAR_L + ZNUR=XNUR_L + ZBR=XBR_L + ZCCS=XCCS_L + ZCXS=XCXS_L + ZLBS=XLBS_L + ZLBEXS=XLBEXS_L + ZDS=XDS_L + ZALPHAS=XALPHAS_L + ZNUS=XNUS_L + ZAS=XAS_L + ZBS=XBS_L + ZCCG=XCCG_L + ZCXG=XCXG_L + ZLBG=XLBG_L + ZLBEXG=XLBEXG_L + ZDG=XDG_L + ZALPHAG=XALPHAG_L + ZNUG=XNUG_L + ZAG=XAG_L + ZBG=XBG_L + ZLBI=XLBI_L + ZLBEXI=XLBEXI_L + ZDI=XDI_L + ZALPHAI=XALPHAI_L + ZNUI=XNUI_L + ZAI=XAI_L + ZBI=XBI_L + ALLOCATE(ZRTMIN(SIZE(XRTMIN_L))) + ZRTMIN=XRTMIN_L +ELSE ! ICE3 ZCCR=XCCR_I ZLBR=XLBR_I ZLBEXR=XLBEXR_I @@ -373,7 +373,7 @@ ENDIF ZBI=XBI_I ALLOCATE(ZRTMIN(SIZE(XRTMIN_I))) ZRTMIN=XRTMIN_I -!ENDIF +ENDIF IF (LATT) THEN IRHOHV=22 !au lieu de 18: !"ZHH","ZDR","KDP","CSR","ZER","ZEI","ZES","ZEG","VRU" @@ -402,17 +402,17 @@ INPTS_V=SIZE(PT_RAY,6) ! ! Initialisation for radial winds IF(LFALL) THEN -! IF (GLIMA) THEN -! ZCR=XCR_L -! ZCI=XC_I_L -! ZCS=XCS_L -! ZCG=XCG_L -! ELSE + IF (GLIMA) THEN + ZCR=XCR_L + ZCI=XC_I_L + ZCS=XCS_L + ZCG=XCG_L + ELSE ZCR=XCR_I ZCI=XC_I_I ZCS=XCS_I ZCG=XCG_I -! ENDIF + ENDIF ELSE ZCR=0. ZCI=0. diff --git a/src/MNH/radiations.f90 b/src/MNH/radiations.f90 index 8bd7efe647032013d4da18c36be72bcc068b3a68..7b9798cb402c9d2547f6deaa05ff7d43adaf709b 100644 --- a/src/MNH/radiations.f90 +++ b/src/MNH/radiations.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/radiations.f90,v $ $Revision: 1.3.2.3.2.2.2.4 $ ! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ######################## @@ -211,6 +211,7 @@ END MODULE MODI_RADIATIONS !! V.Masson, C.Lac 08/10 Correction of inversion of Diffuse and direct albedo !! B.Aouizerats 2010 Explicit aerosol optical properties !! C.Lac 11/2015 Correction on aerosols +!! B.Vie /13 LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -231,7 +232,10 @@ USE MODD_NSV, ONLY : NSV_C2R2,NSV_C2R2BEG,NSV_C2R2END, & NSV_C1R3,NSV_C1R3BEG,NSV_C1R3END, & NSV_DSTBEG, NSV_DSTEND, & NSV_AERBEG, NSV_AEREND, & - NSV_SLTBEG, NSV_SLTEND + NSV_SLTBEG, NSV_SLTEND, & + NSV_LIMA,NSV_LIMA_BEG,NSV_LIMA_END, & + NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_NI +USE MODD_PARAM_n, ONLY : CCLOUD ! USE MODE_THERMO @@ -242,6 +246,7 @@ USE MODD_PARAM_RAD_n, ONLY: CAOP USE MODE_DUSTOPT USE MODE_SALTOPT USE MODI_AEROOPT_GET +USE MODD_PARAM_LIMA ! #ifdef MNH_PGI USE MODE_PACK_PGI @@ -387,6 +392,9 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZDPRES ! layer pressure thickness REAL, DIMENSION(:,:), ALLOCATABLE :: ZCCT_C2R2! Cloud water Concentarion (C2R2) REAL, DIMENSION(:,:), ALLOCATABLE :: ZCRT_C2R2! Rain water Concentarion (C2R2) REAL, DIMENSION(:,:), ALLOCATABLE :: ZCIT_C1R3! Ice water Concentarion (C2R2) +REAL, DIMENSION(:,:), ALLOCATABLE :: ZCCT_LIMA! Cloud water Concentration(LIMA) +REAL, DIMENSION(:,:), ALLOCATABLE :: ZCRT_LIMA! Rain water Concentration(LIMA) +REAL, DIMENSION(:,:), ALLOCATABLE :: ZCIT_LIMA! Ice water Concentration(LIMA) REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZAER ! aerosol optical thickness REAL, DIMENSION(:,:), ALLOCATABLE :: ZALBP ! spectral surface albedo for direct radiations REAL, DIMENSION(:,:), ALLOCATABLE :: ZALBD ! spectral surface albedo for diffuse radiations @@ -514,6 +522,9 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZDZ_SPLIT REAL, DIMENSION(:,:), ALLOCATABLE :: ZCCT_C2R2_SPLIT REAL, DIMENSION(:,:), ALLOCATABLE :: ZCRT_C2R2_SPLIT REAL, DIMENSION(:,:), ALLOCATABLE :: ZCIT_C1R3_SPLIT +REAL, DIMENSION(:,:), ALLOCATABLE :: ZCCT_LIMA_SPLIT +REAL, DIMENSION(:,:), ALLOCATABLE :: ZCRT_LIMA_SPLIT +REAL, DIMENSION(:,:), ALLOCATABLE :: ZCIT_LIMA_SPLIT REAL, DIMENSION(:), ALLOCATABLE :: ZTS_SPLIT REAL, DIMENSION(:,:), ALLOCATABLE :: ZSFSWDIR_SPLIT REAL, DIMENSION(:,:), ALLOCATABLE :: ZSFSWDIF_SPLIT @@ -721,7 +732,8 @@ IF( SIZE(PRT(:,:,:,:),4) >= 4 ) THEN DO JI=IIB,IIE IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB) ZQIWC(IIJ,JKRAD) = MAX(0.,PRT(JI,JJ,JK,4)*PRHODREF(JI,JJ,JK)) - ZQIAVE(IIJ,JKRAD) = MAX( PRT(JI,JJ,JK,4)-XRTMIN(4),0.0 ) +! ZQIAVE(IIJ,JKRAD) = MAX( PRT(JI,JJ,JK,4)-XRTMIN(4),0.0 ) + ZQIAVE(IIJ,JKRAD) = MAX( PRT(JI,JJ,JK,4),0.0 ) END DO END DO END DO @@ -775,6 +787,29 @@ ELSE ALLOCATE (ZCIT_C1R3(0,0)) END IF ! +! +! 2.1*bis pronostic water concentation fields (LIMA coupling) +! +IF( CCLOUD == 'LIMA' ) THEN + ALLOCATE (ZCCT_LIMA(KDLON, KFLEV)) + ALLOCATE (ZCRT_LIMA(KDLON, KFLEV)) + ALLOCATE (ZCIT_LIMA(KDLON, KFLEV)) + ZCCT_LIMA(:, :) = 0. + ZCRT_LIMA (:,:) = 0. + ZCIT_LIMA (:,:) = 0. + DO JK=IKB,IKE + JKRAD = JK-JPVEXT + DO JJ=IJB,IJE + DO JI=IIB,IIE + IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB) + IF (LWARM) ZCCT_LIMA(IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_LIMA_NC)) + IF (LWARM .AND. LRAIN) ZCRT_LIMA(IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_LIMA_NR)) + IF (LCOLD) ZCIT_LIMA(IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_LIMA_NI)) + END DO + END DO + END DO +END IF +! !------------------------------------------------------------------------------- ! !* 3. INITIALIZES THE HALF-LEVEL VARIABLES @@ -942,10 +977,8 @@ IF (CAOP=='EXPL') THEN ENDIF - ZTAUREL_EQ_TMP(:,:,:,:)=ZTAUREL_DST_TMP(:,:,:,:)+ZTAUREL_AER_TMP(:,:,:,:)+ZTAUREL_SLT_TMP(:,:,:,:) -!PAER(:,:,:,3)=PAER_AER(:,:,:)+PAER_SLT(:,:,:)+PAER_DST(:,:,:) PAER(:,:,:,2)=PAER_SLT(:,:,:) PAER(:,:,:,3)=PAER_DST(:,:,:) PAER(:,:,:,4)=PAER_AER(:,:,:) @@ -1390,6 +1423,31 @@ IF(OCLOUD_ONLY .OR. OCLEAR_SKY) THEN ZCIT_C1R3 (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) ) ENDIF ! + ! LIMA water particle concentration + ! + IF( CCLOUD == 'LIMA' ) THEN + ZWORK1(:) = PACK( TRANSPOSE(ZCCT_LIMA(:,:)),MASK=GCLOUDT(:,:) ) + ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns + ZWORK2(ICLOUD+1:)= 0.0 ! and the single clear_sky one + DEALLOCATE(ZCCT_LIMA) + ALLOCATE(ZCCT_LIMA(ICLOUD_COL+1,KFLEV)) + ZCCT_LIMA (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) ) +! + ZWORK1(:) = PACK( TRANSPOSE(ZCRT_LIMA(:,:)),MASK=GCLOUDT(:,:) ) + ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns + ZWORK2(ICLOUD+1:)= 0.0 ! and the single clear_sky one + DEALLOCATE(ZCRT_LIMA) + ALLOCATE(ZCRT_LIMA(ICLOUD_COL+1,KFLEV)) + ZCRT_LIMA (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) ) +! + ZWORK1(:) = PACK( TRANSPOSE(ZCIT_LIMA(:,:)),MASK=GCLOUDT(:,:) ) + ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns + ZWORK2(ICLOUD+1:)= 0.0 ! and the single clear_sky one + DEALLOCATE(ZCIT_LIMA) + ALLOCATE(ZCIT_LIMA(ICLOUD_COL+1,KFLEV)) + ZCIT_LIMA (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) ) + ENDIF + ! ! ozone content profiles ! ZWORK1(:) = PACK( TRANSPOSE(ZO3AVE(:,:)),MASK=GCLOUDT(:,:) ) @@ -1722,6 +1780,28 @@ IF (SIZE(ZCIT_C1R3) > 0) THEN END DO END IF ! +!LIMA water particle concentration +! +IF( CCLOUD == 'LIMA' ) THEN + ZWORK_GRID(:,:)=ZCCT_LIMA(:,:) + DO JKRAD=1, KFLEV + JK1=KFLEV+1-JKRAD + ZCCT_LIMA(:,JKRAD)=ZWORK_GRID(:,JK1) + END DO +! + ZWORK_GRID(:,:)=ZCRT_LIMA(:,:) + DO JKRAD=1, KFLEV + JK1=KFLEV+1-JKRAD + ZCRT_LIMA(:,JKRAD)=ZWORK_GRID(:,JK1) + END DO +! + ZWORK_GRID(:,:)=ZCIT_LIMA(:,:) + DO JKRAD=1, KFLEV + JK1=KFLEV+1-JKRAD + ZCIT_LIMA(:,JKRAD)=ZWORK_GRID(:,JK1) + END DO +END IF +! !ozone content ZWORK_GRID(:,:)=ZO3AVE(:,:) DO JKRAD=1, KFLEV @@ -1868,6 +1948,25 @@ IF( IDIM <= KRAD_COLNBR ) THEN ! there is less than KRAD_COLNBR verticals to be considered therefore ! no split of the arrays is performed ! + IF (CCLOUD == 'LIMA') THEN + CALL ECMWF_RADIATION_VERS2 ( IDIM ,KFLEV, KRAD_DIAG, KAER, & + ZDZ,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG, & + ZRII0, ZAER , ZALBD, ZALBP, ZPRES_HL, ZPAVE, & + PCCO2, ZCFAVE, ZDPRES, ZEMIS, ZEMIW, ZLSM, ZRMU0, & + ZO3AVE , ZQVAVE, ZQIAVE ,ZQIWC,ZQLAVE,ZQLWC, ZQSAVE, ZQRAVE, ZQRWC, & + ZT_HL,ZTAVE, ZTS, ZCCT_LIMA, ZCRT_LIMA, ZCIT_LIMA, & + ZNFLW_CS, ZNFLW, ZNFSW_CS,ZNFSW, & + ZDTLW, ZDTSW, ZFLUX_TOP_GND_IRVISNIR, & + ZSFSWDIR, ZSFSWDIF, & + ZFLUX_SW_DOWN, ZFLUX_SW_UP, ZFLUX_LW , & + ZDTLW_CS, ZDTSW_CS, ZFLUX_TOP_GND_IRVISNIR_CS, & + ZFLUX_SW_DOWN_CS, ZFLUX_SW_UP_CS, ZFLUX_LW_CS, & + ZPLAN_ALB_VIS,ZPLAN_ALB_NIR, ZPLAN_TRA_VIS, ZPLAN_TRA_NIR, & + ZPLAN_ABS_VIS, ZPLAN_ABS_NIR,ZEFCL_LWD, ZEFCL_LWU, & + ZFLWP, ZFIWP,ZRADLP, ZRADIP,ZEFCL_RRTM, ZCLSW_TOTAL, ZTAU_TOTAL, & + ZOMEGA_TOTAL,ZCG_TOTAL, & + GAOP, ZPIZA_EQ,ZCGA_EQ,ZTAUREL_EQ ) + ELSE CALL ECMWF_RADIATION_VERS2 ( IDIM ,KFLEV, KRAD_DIAG, KAER, & ZDZ,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG, & ZRII0, ZAER , ZALBD, ZALBP, ZPRES_HL, ZPAVE, & @@ -1885,7 +1984,8 @@ IF( IDIM <= KRAD_COLNBR ) THEN ZFLWP, ZFIWP,ZRADLP, ZRADIP,ZEFCL_RRTM, ZCLSW_TOTAL, ZTAU_TOTAL, & ZOMEGA_TOTAL,ZCG_TOTAL, & GAOP, ZPIZA_EQ,ZCGA_EQ,ZTAUREL_EQ ) - + END IF +! ELSE ! ! the splitting of the arrays will be performed @@ -2019,6 +2119,14 @@ ELSE ELSE ALLOCATE (ZCIT_C1R3_SPLIT(0,0)) END IF +! +! LIMA coupling +! + IF( CCLOUD == 'LIMA' ) THEN + ALLOCATE (ZCCT_LIMA_SPLIT(IDIM_EFF,KFLEV)) + ALLOCATE (ZCRT_LIMA_SPLIT(IDIM_EFF,KFLEV)) + ALLOCATE (ZCIT_LIMA_SPLIT(IDIM_EFF,KFLEV)) + END IF END IF ! ! fill the splitted arrays with their values taken from the full arrays @@ -2056,12 +2164,38 @@ ELSE ZQSAVE_SPLIT (:,:) = ZQSAVE (IBEG:IEND ,:) ZTS_SPLIT (:) = ZTS (IBEG:IEND) ! +! CALL the ECMWF radiation with the splitted array +! + IF (CCLOUD == 'LIMA') THEN +! LIMA concentrations + ZCCT_LIMA_SPLIT(:,:) = ZCCT_LIMA (IBEG:IEND ,:) + ZCRT_LIMA_SPLIT(:,:) = ZCRT_LIMA (IBEG:IEND ,:) + ZCIT_LIMA_SPLIT(:,:) = ZCIT_LIMA (IBEG:IEND ,:) +! + CALL ECMWF_RADIATION_VERS2 ( IDIM_EFF , KFLEV, KRAD_DIAG, KAER, & + ZDZ_SPLIT,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG, & + ZRII0, ZAER_SPLIT , ZALBD_SPLIT, ZALBP_SPLIT, ZPRES_HL_SPLIT, & + ZPAVE_SPLIT,PCCO2, ZCFAVE_SPLIT, ZDPRES_SPLIT, ZEMIS_SPLIT, ZEMIW_SPLIT, & + ZLSM_SPLIT, ZRMU0_SPLIT,ZO3AVE_SPLIT , ZQVAVE_SPLIT, ZQIAVE_SPLIT ,ZQIWC_SPLIT, & + ZQLAVE_SPLIT,ZQLWC_SPLIT,ZQSAVE_SPLIT, ZQRAVE_SPLIT,ZQRWC_SPLIT, ZT_HL_SPLIT, & + ZTAVE_SPLIT, ZTS_SPLIT, ZCCT_LIMA_SPLIT,ZCRT_LIMA_SPLIT,ZCIT_LIMA_SPLIT, & + ZNFLW_CS_SPLIT, ZNFLW_SPLIT, ZNFSW_CS_SPLIT,ZNFSW_SPLIT, & + ZDTLW_SPLIT, ZDTSW_SPLIT, ZFLUX_TOP_GND_IRVISNIR_SPLIT, & + ZSFSWDIR_SPLIT, ZSFSWDIF_SPLIT, & + ZFLUX_SW_DOWN_SPLIT, ZFLUX_SW_UP_SPLIT, ZFLUX_LW_SPLIT , & + ZDTLW_CS_SPLIT, ZDTSW_CS_SPLIT, ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT, & + ZFLUX_SW_DOWN_CS_SPLIT, ZFLUX_SW_UP_CS_SPLIT, ZFLUX_LW_CS_SPLIT, & + ZPLAN_ALB_VIS_SPLIT,ZPLAN_ALB_NIR_SPLIT, ZPLAN_TRA_VIS_SPLIT, & + ZPLAN_TRA_NIR_SPLIT, ZPLAN_ABS_VIS_SPLIT, ZPLAN_ABS_NIR_SPLIT, & + ZEFCL_LWD_SPLIT, ZEFCL_LWU_SPLIT, ZFLWP_SPLIT,ZFIWP_SPLIT, & + ZRADLP_SPLIT,ZRADIP_SPLIT,ZEFCL_RRTM_SPLIT, ZCLSW_TOTAL_SPLIT, & + ZTAU_TOTAL_SPLIT,ZOMEGA_TOTAL_SPLIT, ZCG_TOTAL_SPLIT, & + GAOP,ZPIZA_EQ_SPLIT,ZCGA_EQ_SPLIT,ZTAUREL_EQ_SPLIT ) + ELSE ! C2R2 concentrations IF (SIZE (ZCCT_C2R2) > 0) ZCCT_C2R2_SPLIT(:,:) = ZCCT_C2R2 (IBEG:IEND ,:) IF (SIZE (ZCRT_C2R2) > 0) ZCRT_C2R2_SPLIT(:,:) = ZCRT_C2R2 (IBEG:IEND ,:) IF (SIZE (ZCIT_C1R3) > 0) ZCIT_C1R3_SPLIT(:,:) = ZCIT_C1R3 (IBEG:IEND ,:) -! -! CALL the ECMWF radiation with the splitted array ! CALL ECMWF_RADIATION_VERS2 ( IDIM_EFF , KFLEV, KRAD_DIAG, KAER, & ZDZ_SPLIT,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG, & @@ -2082,7 +2216,7 @@ ELSE ZRADLP_SPLIT,ZRADIP_SPLIT,ZEFCL_RRTM_SPLIT, ZCLSW_TOTAL_SPLIT, & ZTAU_TOTAL_SPLIT,ZOMEGA_TOTAL_SPLIT, ZCG_TOTAL_SPLIT, & GAOP,ZPIZA_EQ_SPLIT,ZCGA_EQ_SPLIT,ZTAUREL_EQ_SPLIT ) - + END IF ! ! fill the full output arrays with the splitted arrays ! @@ -2162,9 +2296,12 @@ ELSE DEALLOCATE( ZQLWC_SPLIT ) DEALLOCATE( ZQRWC_SPLIT ) DEALLOCATE( ZQIWC_SPLIT ) - DEALLOCATE( ZCCT_C2R2_SPLIT ) - DEALLOCATE( ZCRT_C2R2_SPLIT ) - DEALLOCATE( ZCIT_C1R3_SPLIT ) + IF ( ALLOCATED( ZCCT_C2R2_SPLIT ) ) DEALLOCATE( ZCCT_C2R2_SPLIT ) + IF ( ALLOCATED( ZCRT_C2R2_SPLIT ) ) DEALLOCATE( ZCRT_C2R2_SPLIT ) + IF ( ALLOCATED( ZCIT_C1R3_SPLIT ) ) DEALLOCATE( ZCIT_C1R3_SPLIT ) + IF ( ALLOCATED( ZCCT_LIMA_SPLIT ) ) DEALLOCATE( ZCCT_LIMA_SPLIT ) + IF ( ALLOCATED( ZCRT_LIMA_SPLIT ) ) DEALLOCATE( ZCRT_LIMA_SPLIT ) + IF ( ALLOCATED( ZCIT_LIMA_SPLIT ) ) DEALLOCATE( ZCIT_LIMA_SPLIT ) DEALLOCATE( ZTS_SPLIT ) DEALLOCATE( ZNFLW_CS_SPLIT) DEALLOCATE( ZNFLW_SPLIT) @@ -2229,6 +2366,11 @@ DEALLOCATE(ZDPRES) DEALLOCATE(ZCCT_C2R2) DEALLOCATE(ZCRT_C2R2) DEALLOCATE(ZCIT_C1R3) +IF (CCLOUD == 'LIMA') THEN + DEALLOCATE(ZCCT_LIMA) + DEALLOCATE(ZCRT_LIMA) + DEALLOCATE(ZCIT_LIMA) +END IF ! DEALLOCATE(ZTS) DEALLOCATE(ZALBP) diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index a93ff52d24b9b63614d4f55dd70e0fec81ca462f..f78d0580057f9ebf7de2a8355caad0124a9c8624 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -17,11 +17,10 @@ INTERFACE PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & - PINPRC,PINPRC3D, PINPRR, PINPRR3D, PEVAP3D, & - PINPRS,PINPRS3D, PINPRG,PINPRG3D, PSIGS, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PINPRC,PINPRR, PINPRR3D, PEVAP3D, & + PINPRS, PINPRG, PSIGS, & PSEA, PTOWN, & - PRHT, PRHS, PINPRH,PINPRH3D,OCONVHG ) + PRHT, PRHS, PINPRH,OCONVHG ) ! ! LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. @@ -69,27 +68,18 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIS ! Pristine ice m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRGS ! Graupel m.r. source -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Cloud instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D! Cloud inst precip 3D REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D! Rain inst precip 3D REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D! Snow inst precip 3D REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D! Graupel inst precip 3D REAL, DIMENSION(:,:),OPTIONAL,INTENT(IN) :: PSEA REAL, DIMENSION(:,:),OPTIONAL,INTENT(IN) :: PTOWN REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PINPRH3D! Hail instant precip 3D LOGICAL, OPTIONAL, INTENT(IN) :: OCONVHG! Switch for conversion from ! hail to graupel @@ -103,11 +93,10 @@ END MODULE MODI_RAIN_ICE PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & - PINPRC,PINPRC3D, PINPRR, PINPRR3D, PEVAP3D, & - PINPRS,PINPRS3D, PINPRG,PINPRG3D, PSIGS, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PINPRC, PINPRR, PINPRR3D, PEVAP3D, & + PINPRS, PINPRG, PSIGS, & PSEA, PTOWN, & - PRHT, PRHS, PINPRH,PINPRH3D,OCONVHG ) + PRHT, PRHS, PINPRH,OCONVHG ) ! ##################################################################### ! !!**** * - compute the explicit microphysical sources @@ -320,27 +309,18 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIS ! Pristine ice m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRGS ! Graupel m.r. source ! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Cloud instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D! Cloud inst precip 3D REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D! Rain inst precip 3D REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D! Snow inst precip 3D REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D! Graupel inst precip 3D REAL, DIMENSION(:,:),OPTIONAL,INTENT(IN) :: PSEA REAL, DIMENSION(:,:),OPTIONAL,INTENT(IN) :: PTOWN REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PINPRH3D! Hail instant precip 3D LOGICAL, OPTIONAL, INTENT(IN) :: OCONVHG! Switch for conversion from ! hail to graupel ! @@ -885,20 +865,11 @@ REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D ! ! O. Initialization of for sedimentation ! IF (OSEDIC) PINPRC (:,:) = 0. -IF (OSEDIC) PINPRC3D (:,:,:) = 0. PINPRR (:,:) = 0. PINPRR3D (:,:,:) = 0. PINPRS (:,:) = 0. -PINPRS3D (:,:,:) = 0. PINPRG (:,:) = 0. -PINPRG3D (:,:,:) = 0. IF ( KRR == 7 ) PINPRH (:,:) = 0. -IF ( KRR == 7 ) PINPRH3D (:,:,:) = 0. -PSPEEDC(:,:,:) = 0. -PSPEEDR(:,:,:) = 0. -PSPEEDS(:,:,:) = 0. -PSPEEDG(:,:,:) = 0. -PSPEEDH(:,:,:) = 0. ! !* 1. Parameters for cloud sedimentation ! @@ -1066,9 +1037,6 @@ DO JN = 1 , KSPLITR PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO PINPRC(:,:) = PINPRC(:,:) + ZWSED(:,:,IKB) / XRHOLW / KSPLITR - PINPRC3D(:,:,:) = PINPRC3D(:,:,:) + ZWSED(:,:,1:IKT) / XRHOLW / KSPLITR - WHERE (PRCT(:,:,:) > 1.E-04 ) & - PSPEEDC(:,:,:) = ZWSED(:,:,1:IKT) / (PRCT(:,:,:) * PRHODREF(:,:,:)) IF( JN==KSPLITR ) THEN PRCS(:,:,:) = PRCS(:,:,:) * ZINVTSTEP END IF @@ -1111,8 +1079,6 @@ DO JN = 1 , KSPLITR END DO PINPRR(:,:) = PINPRR(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR PINPRR3D(:,:,:) = PINPRR3D(:,:,:) + ZWSED(:,:,1:IKT)/XRHOLW/KSPLITR - WHERE (PRRT(:,:,:) > 1.E-04 ) & - PSPEEDR(:,:,:) = ZWSED(:,:,1:IKT) / (PRRT(:,:,:) * PRHODREF(:,:,:)) IF( JN==KSPLITR ) THEN PRRS(:,:,:) = PRRS(:,:,:) * ZINVTSTEP END IF @@ -1194,9 +1160,6 @@ DO JN = 1 , KSPLITR PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO PINPRS(:,:) = PINPRS(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR - PINPRS3D(:,:,:) = PINPRS3D(:,:,:) + ZWSED(:,:,1:IKT)/XRHOLW/KSPLITR - WHERE (PRST(:,:,:) > 1.E-04 ) & - PSPEEDS(:,:,:) = ZWSED(:,:,1:IKT) / (PRST(:,:,:) * PRHODREF(:,:,:)) IF( JN==KSPLITR ) THEN PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP END IF @@ -1237,9 +1200,6 @@ END IF PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO PINPRG(:,:) = PINPRG(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR - PINPRG3D(:,:,:) = PINPRG3D(:,:,:) + ZWSED(:,:,1:IKT)/XRHOLW/KSPLITR - WHERE (PRGT(:,:,:) > 1.E-04 ) & - PSPEEDG(:,:,:) = ZWSED(:,:,1:IKT) / (PRGT(:,:,:) * PRHODREF(:,:,:)) IF( JN==KSPLITR ) THEN PRGS(:,:,:) = PRGS(:,:,:) * ZINVTSTEP END IF @@ -1281,9 +1241,6 @@ END IF PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO PINPRH(:,:) = PINPRH(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR - PINPRH3D(:,:,:) = PINPRH3D(:,:,:) + ZWSED(:,:,1:IKT)/XRHOLW/KSPLITR - WHERE (PRHT(:,:,:) > 1.E-04 ) & - PSPEEDH(:,:,:) = ZWSED(:,:,1:IKT) / (PRHT(:,:,:) * PRHODREF(:,:,:)) IF( JN==KSPLITR ) THEN PRHS(:,:,:) = PRHS(:,:,:) * ZINVTSTEP END IF @@ -1336,21 +1293,12 @@ INTEGER, DIMENSION(SIZE(PRHODREF,1)*SIZE(PRHODREF,2)) :: I1, I2 REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D ! droplet condensation !------------------------------------------------------------------------------- ! -PSPEEDC(:,:,:) = 0. -PSPEEDR(:,:,:) = 0. -PSPEEDS(:,:,:) = 0. -PSPEEDG(:,:,:) = 0. -PSPEEDH(:,:,:) = 0. IF (OSEDIC) PINPRC (:,:) = 0. -IF (OSEDIC) PINPRC3D (:,:,:) = 0. PINPRR (:,:) = 0. PINPRR3D (:,:,:) = 0. PINPRS (:,:) = 0. -PINPRS3D (:,:,:) = 0. PINPRG (:,:) = 0. -PINPRG3D (:,:,:) = 0. IF ( KRR == 7 ) PINPRH (:,:) = 0. -IF ( KRR == 7 ) PINPRH3D (:,:,:) = 0. ! ! !* 1. Parameters for cloud sedimentation @@ -1476,11 +1424,7 @@ END DO DO JK = IKTB , IKTE PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO - WHERE (PRCT(:,:,:) > 1.E-04 ) & - PSPEEDC(:,:,:) = ZWSED(:,:,1:IKT) / (PRCT(:,:,:) * PRHODREF(:,:,:)) - PINPRC(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s - PINPRC3D(:,:,:) = ZWSED(:,:,1:IKT)/XRHOLW ! in m/s PRCS(:,:,:) = PRCS(:,:,:) * ZINVTSTEP ENDIF @@ -1533,8 +1477,6 @@ END DO DO JK = IKTB , IKTE PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) ENDDO - WHERE (PRRT(:,:,:) > 1.E-04 ) & - PSPEEDR(:,:,:) = ZWSED(:,:,1:IKT) / (PRRT(:,:,:) * PRHODREF(:,:,:)) PINPRR(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s PINPRR3D(:,:,:) = ZWSED(:,:,1:IKT)/XRHOLW ! in m/s PRRS(:,:,:) = PRRS(:,:,:) * ZINVTSTEP @@ -1644,11 +1586,7 @@ END DO DO JK = IKTB , IKTE PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) ENDDO - WHERE (PRST(:,:,:) > 1.E-04 ) & - PSPEEDS(:,:,:) = ZWSED(:,:,1:IKT) / (PRST(:,:,:) * PRHODREF(:,:,:)) - PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s - PINPRS3D(:,:,:) = ZWSED(:,:,1:IKT)/XRHOLW ! in m/s PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP @@ -1701,11 +1639,7 @@ END DO DO JK = IKTB , IKTE PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) ENDDO - - WHERE (PRGT(:,:,:) > 1.E-04 ) & - PSPEEDG(:,:,:) = ZWSED(:,:,1:IKT) / (PRGT(:,:,:) * PRHODREF(:,:,:)) PINPRG(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s - PINPRG3D(:,:,:) = ZWSED(:,:,1:IKT)/XRHOLW ! in m/s PRGS(:,:,:) = PRGS(:,:,:) * ZINVTSTEP ! @@ -1756,11 +1690,7 @@ END DO DO JK = IKTB , IKTE PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) ENDDO - - WHERE (PRHT(:,:,:) > 1.E-04 ) & - PSPEEDH(:,:,:) = ZWSED(:,:,1:IKT) / (PRHT(:,:,:) * PRHODREF(:,:,:)) PINPRH(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s - PINPRH3D(:,:,:) = ZWSED(:,:,1:IKT)/XRHOLW ! in m/s PRHS(:,:,:) = PRHS(:,:,:) * ZINVTSTEP ENDIF diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90 index 5593a4ab1f57ce5699fb1a0de826049e78262318..c7e9cd86956f58c058226b14b1fb9e511e2b1eb2 100644 --- a/src/MNH/read_desfmn.f90 +++ b/src/MNH/read_desfmn.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ +! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/read_desfmn.f90,v $ $Revision: 1.2.2.1.2.1.2.2.10.1.2.4 $ $Date: 2014/02/14 09:15:53 $ !----------------------------------------------------------------- ! ###################### MODULE MODI_READ_DESFM_n @@ -190,6 +190,7 @@ END MODULE MODI_READ_DESFM_n !! Modification 04/2010 (M. Leriche) Add aqueous + ice chemistry !! Modification 07/2013 (Bosseur & Filippi) Adds Forefire !! Modification 01/2015 (C. Barthe) Add explicit LNOx +!! Modification 2016 (B.VIE) LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -208,7 +209,8 @@ USE MODN_PARAM_n USE MODN_PARAM_RAD_n USE MODN_PARAM_KAFR_n USE MODN_PARAM_MFSHALL_n -USE MODN_PARAM_ICE +USE MODN_PARAM_ICE, ONLY : NAM_PARAM_ICE, ZWARM=>LWARM, ZSEDIC=>LSEDIC, & + ZPRISTINE_ICE=>CPRISTINE_ICE, ZSEDIM=>CSEDIM USE MODN_LUNIT_n USE MODN_LBC_n USE MODN_NUDGING_n @@ -217,8 +219,22 @@ USE MODN_FRC USE MODN_BLANK USE MODN_CH_SOLVER_n USE MODN_CH_MNHC_n -USE MODN_PARAM_C2R2 -USE MODN_PARAM_C1R3 +USE MODN_PARAM_C2R2, ONLY : HPARAM_CCN_C2R2=>HPARAM_CCN,HINI_CCN_C2R2=>HINI_CCN, & + HTYPE_CCN_C2R2=>HTYPE_CCN,LRAIN_C2R2=>LRAIN, & + LSEDC_C2R2=>LSEDC,LACTIT_C2R2=>LACTIT,XCHEN_C2R2=>XCHEN, & + XKHEN_C2R2=>XKHEN,XMUHEN_C2R2=>XMUHEN, & + XBETAHEN_C2R2=>XBETAHEN,XCONC_CCN_C2R2=>XCONC_CCN, & + XR_MEAN_CCN_C2R2=>XR_MEAN_CCN,XLOGSIG_CCN_C2R2=>XLOGSIG_CCN, & + XFSOLUB_CCN_C2R2=>XFSOLUB_CCN,XACTEMP_CCN_C2R2=>XACTEMP_CCN, & + XALPHAC_C2R2=>XALPHAC,XNUC_C2R2=>XNUC,XALPHAR_C2R2=>XALPHAR, & + XNUR_C2R2=>XNUR,XAERDIFF_C2R2=>XAERDIFF, & + XAERHEIGHT_C2R2=>XAERHEIGHT,NAM_PARAM_C2R2 +USE MODN_PARAM_C1R3, ONLY : XALPHAI_C1R3=>XALPHAI,XNUI_C1R3=>XNUI,XALPHAS_C1R3=>XALPHAS, & + XNUS_C1R3=>XNUS,XALPHAG_C1R3=>XALPHAG,XNUG_C1R3=>XNUG, & + XFACTNUC_DEP_C1R3=>XFACTNUC_DEP, & + XFACTNUC_CON_C1R3=>XFACTNUC_CON,LSEDI_C1R3=>LSEDI, & + LHHONI_C1R3=>LHHONI,CPRISTINE_ICE_C1R3,CHEVRIMED_ICE_C1R3, & + NAM_PARAM_C1R3 USE MODN_ELEC USE MODN_SERIES USE MODN_SERIES_n @@ -235,6 +251,7 @@ USE MODN_CONDSAMP USE MODN_LATZ_EDFLX USE MODN_2D_FRC ! +USE MODN_PARAM_LIMA ! USE MODE_POS USE MODE_FM @@ -452,6 +469,8 @@ IF (KMI == 1) THEN IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_C2R2) CALL POSNAM(ILUDES,'NAM_PARAM_C1R3',GFOUND) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_C1R3) + CALL POSNAM(ILUDES,'NAM_PARAM_LIMA',GFOUND) + IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_LIMA) CALL POSNAM(ILUDES,'NAM_ELEC',GFOUND) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_ELEC) CALL POSNAM(ILUDES,'NAM_SERIES',GFOUND,ILUOUT) @@ -680,10 +699,15 @@ IF (NVERB >= 10) THEN WRITE(UNIT=ILUOUT,NML=NAM_PARAM_C1R3) END IF ! - IF (CELEC /= 'NONE') THEN - WRITE(UNIT=ILUOUT,FMT="('************ ELEC SCHEME **********************')") - WRITE(UNIT=ILUOUT,NML=NAM_ELEC) + IF( CCLOUD == 'LIMA' ) THEN + WRITE(UNIT=ILUOUT,FMT="('************ LIMA SCHEME **********************')") + WRITE(UNIT=ILUOUT,NML=NAM_PARAM_LIMA) END IF +! + IF (CELEC /= 'NONE') THEN + WRITE(UNIT=ILUOUT,FMT="('************ ELEC SCHEME **********************')") + WRITE(UNIT=ILUOUT,NML=NAM_ELEC) + END IF ! END IF ! diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index 049dab242b00264804ff5d995e56eb29059fbcb6..112964d0d8f0f2f082fcd29fbb0931c72bf8214c 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/read_exsegn.f90,v $ $Revision: 1.2.2.5.2.4.2.14.2.5.2.4 $ ! masdev4_8 2008/07/09 16:40:30 !----------------------------------------------------------------- ! ###################### @@ -280,6 +280,7 @@ END MODULE MODI_READ_EXSEG_n !! Modification 01/2015 (C. Barthe) add explicit LNOx !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! M.Leriche 18/12/2015 : bug chimie glace dans prep_real_case +!! Modification 01/2016 (JP Pinty) Add LIMA !!------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -318,8 +319,13 @@ USE MODN_TURB_n USE MODN_BLANK USE MODN_CH_MNHC_n USE MODN_CH_SOLVER_n -USE MODN_PARAM_C2R2 -USE MODN_PARAM_C1R3 +USE MODN_PARAM_C2R2, ONLY : EPARAM_CCN=>HPARAM_CCN, EINI_CCN=>HINI_CCN, & + WNUC=>XNUC, WALPHAC=>XALPHAC, NAM_PARAM_C2R2 +USE MODN_PARAM_C1R3, ONLY : NAM_PARAM_C1R3, CPRISTINE_ICE_C1R3, & + CHEVRIMED_ICE_C1R3 +USE MODN_PARAM_LIMA, ONLY : FINI_CCN=>HINI_CCN,NAM_PARAM_LIMA,NMOD_CCN,LSCAV, & + CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, NMOD_IFN, & + LCOLD, LACTI, LNUCL, XALPHAC, XNUC, LMEYERS USE MODN_ELEC USE MODN_SERIES USE MODN_SERIES_n @@ -331,6 +337,7 @@ USE MODN_LATZ_EDFLX ! USE MODD_NSV,NSV_USER_n=>NSV_USER USE MODD_DYN +USE MODD_DYN_n, ONLY : LHORELAX_SVLIMA USE MODD_GET_n USE MODD_GR_FIELD_n ! @@ -421,7 +428,7 @@ INTEGER :: JS,JCI,JI,JSV ! Loop indexes LOGICAL :: GRELAX LOGICAL :: GFOUND ! Return code when searching namelist ! -INTEGER :: IMOMENTS, JMODE, IMODEIDX, JMOM, JSV_NAME +INTEGER :: IMOMENTS, JMODE, IMODEIDX, JMOM, JSV_NAME, JMOD, I ! !------------------------------------------------------------------------------- ! @@ -533,6 +540,8 @@ IF (KMI == 1) THEN IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C2R2) CALL POSNAM(ILUSEG,'NAM_PARAM_C1R3',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C1R3) + CALL POSNAM(ILUSEG,'NAM_PARAM_LIMA',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_LIMA) CALL POSNAM(ILUSEG,'NAM_ELEC',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ELEC) CALL POSNAM(ILUSEG,'NAM_SERIES',GFOUND,ILUOUT) @@ -583,7 +592,7 @@ CALL TEST_NAM_VAR(ILUOUT,'CTEMP_SCHEME',CTEMP_SCHEME, & CALL TEST_NAM_VAR(ILUOUT,'CTURB',CTURB,'NONE','TKEL') CALL TEST_NAM_VAR(ILUOUT,'CRAD',CRAD,'NONE','FIXE','ECMW','TOPA') CALL TEST_NAM_VAR(ILUOUT,'CCLOUD',CCLOUD,'NONE','REVE','KESS', & - 'ICE2','ICE3','ICE4','C2R2','C3R5','KHKO') + & 'ICE2','ICE3','ICE4','C2R2','C3R5','KHKO','LIMA') CALL TEST_NAM_VAR(ILUOUT,'CDCONV',CDCONV,'NONE','KAFR') CALL TEST_NAM_VAR(ILUOUT,'CSCONV',CSCONV,'NONE','KAFR','EDKF') CALL TEST_NAM_VAR(ILUOUT,'CELEC',CELEC,'NONE','ELE3','ELE4') @@ -591,8 +600,8 @@ CALL TEST_NAM_VAR(ILUOUT,'CELEC',CELEC,'NONE','ELE3','ELE4') CALL TEST_NAM_VAR(ILUOUT,'CAER',CAER,'TANR','TEGE','SURF','NONE') CALL TEST_NAM_VAR(ILUOUT,'CAOP',CAOP,'CLIM','EXPL') CALL TEST_NAM_VAR(ILUOUT,'CLW',CLW,'RRTM','MORC') -CALL TEST_NAM_VAR(ILUOUT,'CEFRADL',CEFRADL,'PRES','OCLN','MART','C2R2') -CALL TEST_NAM_VAR(ILUOUT,'CEFRADI',CEFRADI,'FX40','LIOU','SURI','C3R5') +CALL TEST_NAM_VAR(ILUOUT,'CEFRADL',CEFRADL,'PRES','OCLN','MART','C2R2','LIMA') +CALL TEST_NAM_VAR(ILUOUT,'CEFRADI',CEFRADI,'FX40','LIOU','SURI','C3R5','LIMA') CALL TEST_NAM_VAR(ILUOUT,'COPWLW',COPWLW,'SAVI','SMSH','LILI','MALA') CALL TEST_NAM_VAR(ILUOUT,'COPILW',COPILW,'FULI','EBCU','SMSH','FU98') CALL TEST_NAM_VAR(ILUOUT,'COPWSW',COPWSW,'SLIN','FOUQ','MALA') @@ -639,6 +648,13 @@ IF( CCLOUD == 'C3R5' ) THEN CALL TEST_NAM_VAR(ILUOUT,'CHEVRIMED_ICE_C1R3',CHEVRIMED_ICE_C1R3, & 'GRAU','HAIL') END IF +! +IF( CCLOUD == 'LIMA' ) THEN + CALL TEST_NAM_VAR(ILUOUT,'CPRISTINE_ICE_LIMA',CPRISTINE_ICE_LIMA, & + 'PLAT','COLU','BURO') + CALL TEST_NAM_VAR(ILUOUT,'CHEVRIMED_ICE_LIMA',CHEVRIMED_ICE_LIMA, & + 'GRAU','HAIL') +END IF !-------------------------------------------------------------------------------! !* 2. FIRST INITIALIZATIONS ! --------------------- @@ -799,7 +815,7 @@ SELECT CASE ( CCLOUD ) END IF ! CASE ( 'C2R2','C3R5', 'KHKO' ) - IF (( HPARAM_CCN == 'XXX') .OR. (HINI_CCN == 'XXX')) THEN + IF (( EPARAM_CCN == 'XXX') .OR. (EINI_CCN == 'XXX')) THEN WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2-MOMENT MICROPHYSICAL ", & &" SCHEME BUT YOU DIDNT FILL CORRECTLY NAM_PARAM_C2R2", & &" YOU HAVE TO FILL HPARAM_CCN and HINI_CCN ")') @@ -886,12 +902,71 @@ SELECT CASE ( CCLOUD ) WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME' END IF ! - IF (LSUBG_COND) THEN + IF ( WALPHAC /= 3.0 .OR. WNUC /= 2.0) THEN + WRITE(UNIT=ILUOUT,FMT=9001) KMI + WRITE(UNIT=ILUOUT,FMT=*) 'IT IS ADVISED TO USE XALPHAC=3. and XNUC=2.' + WRITE(UNIT=ILUOUT,FMT=*) 'FOR STRATOCUMULUS WITH KHKO SCHEME. ' + END IF +! + IF ( CEFRADL /= 'C2R2') THEN + WRITE(UNIT=ILUOUT,FMT=9001) KMI + WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=C2R2 FOR RADIATION' + WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=C2R2 ' + WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME' + END IF +! + CASE ( 'LIMA') + IF ((LACTI .AND. FINI_CCN == 'XXX')) THEN + WRITE(UNIT=ILUOUT,FMT=9001) KMI + WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2-MOMENT MICROPHYSICAL ", & + &" SCHEME BUT YOU DIDNT FILL CORRECTLY NAM_PARAM_LIMA", & + &" YOU HAVE TO FILL FINI_CCN ")') + STOP + END IF +! + IF(LACTI .AND. NMOD_CCN == 0) THEN + WRITE(UNIT=ILUOUT,FMT=9001) KMI + WRITE(UNIT=ILUOUT,FMT='("ACTIVATION OF AEROSOL PARTICLES IS NOT " & + &"POSSIBLE IF NMOD_CCN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER " & + &"VALUE OF NMOD_CCN IN ORDER TO USE LIMA WARM ACTIVATION SCHEME.")') + STOP + END IF +! + IF(LNUCL .AND. NMOD_IFN == 0 .AND. (.NOT.LMEYERS)) THEN + WRITE(UNIT=ILUOUT,FMT=9001) KMI + WRITE(UNIT=ILUOUT,FMT='("NUCLEATION BY DEPOSITION AND CONTACT IS NOT "& + &"POSSIBLE IF NMOD_IFN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER" & + &"VALUE OF NMOD_IFN IN ORDER TO USE LIMA COLD NUCLEATION SCHEME.")') + END IF +! + IF (HCLOUD == 'NONE') THEN + CGETCLOUD = 'SKIP' + ELSE IF (HCLOUD == 'REVE' ) THEN + CGETCLOUD = 'INI1' + ELSE IF (HCLOUD == 'KESS' ) THEN + CGETCLOUD = 'INI2' + ELSE IF (HCLOUD == 'ICE3' ) THEN + CGETCLOUD = 'INI2' + ELSE + CGETCLOUD = 'READ' ! This is automatically done + END IF +! + IF (LWARM) THEN + LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. + LUSERI=.FALSE.; LUSERS=.FALSE. ; LUSERG=.FALSE.; LUSERH=.FALSE. + END IF +! + IF (LCOLD) THEN + LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. + LUSERI=.TRUE. ; LUSERS=.TRUE. ; LUSERG=.TRUE. ; LUSERH=.TRUE. + END IF +! + IF (LSUBG_COND .AND. LCOLD) THEN WRITE(UNIT=ILUOUT,FMT=9003) KMI WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH THE SIMPLE MIXED PHASE' WRITE(UNIT=ILUOUT,FMT=*) 'MICROPHYS. SCHEME AND THE SUBGRID COND. SCHEME.' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE.' - WRITE(UNIT=ILUOUT,FMT=*) 'SET LSUBG_COND TO FALSE OR CCLOUD TO "REVE", "KESS" ' + WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LSUBG_COND ' + WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "REVE", "KESS" ' !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT @@ -901,15 +976,43 @@ SELECT CASE ( CCLOUD ) IF ( XALPHAC /= 3.0 .OR. XNUC /= 2.0) THEN WRITE(UNIT=ILUOUT,FMT=9001) KMI WRITE(UNIT=ILUOUT,FMT=*) 'IT IS ADVISED TO USE XALPHAC=3. and XNUC=2.' - WRITE(UNIT=ILUOUT,FMT=*) 'FOR STRATOCUMULUS WITH KHKO SCHEME. ' + WRITE(UNIT=ILUOUT,FMT=*) 'FOR STRATOCUMULUS. ' END IF ! - IF ( CEFRADL /= 'C2R2') THEN + IF ( CEFRADL /= 'LIMA') THEN WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=C2R2 FOR RADIATION' - WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=C2R2 ' - WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME' + WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=LIMA FOR RADIATION' + WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=LIMA ' + WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME "LIMA"' END IF + + IF (LUSECHEM ) THEN + WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND CHEMISTRY' + WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LUSECHEM ' + WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' + !callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + END IF + IF (LDUST ) THEN + WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND DUSTS ' + WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LDUST ' + WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' + !callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + END IF + IF (LSALT ) THEN + WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND SEA SALTS ' + WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LSALT ' + WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' + !callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + END IF ! END SELECT ! @@ -1021,7 +1124,8 @@ DO JSV = 1,NSV LUSESV(JSV,KMI) = .TRUE. END DO ! -IF ( CAOP=='EXPL' .AND. .NOT.LDUST .AND. .NOT.LORILAM .AND. .NOT.LSALT) THEN +IF ( CAOP=='EXPL' .AND. .NOT.LDUST .AND. .NOT.LORILAM & + .AND. .NOT.LSALT .AND. .NOT.(CCLOUD=='LIMA') ) THEN WRITE(UNIT=ILUOUT,FMT=9001) KMI WRITE(UNIT=ILUOUT,FMT=*) ' YOU WANT TO USE EXPLICIT AEROSOL OPTICAL ' WRITE(UNIT=ILUOUT,FMT=*) 'PROPERTIES BUT YOU DONT HAVE DUST OR ' @@ -1347,6 +1451,21 @@ IF (CCLOUD == 'C3R5') THEN END IF END IF ! +! LIMA SV case +! +IF (CCLOUD == 'LIMA') THEN + IF (HCLOUD == 'LIMA') THEN + CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='READ' +!!JPP IF(HSTORAGE_TYPE=='TT') CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='INIT' + ELSE + WRITE(UNIT=ILUOUT,FMT=9001) KMI + WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LIMA & + & SCHEME IN INITIAL FMFILE",/,& + & "THE LIMA VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') + CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='INIT' + END IF +END IF +! ! Electrical SV case ! IF (CELEC /= 'NONE') THEN @@ -2144,6 +2263,13 @@ IF (CCLOUD/='C3R5' .AND. LHORELAX_SVC1R3) THEN WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVC1R3=FALSE' END IF ! +IF (CCLOUD/='LIMA' .AND. LHORELAX_SVLIMA) THEN + LHORELAX_SVLIMA=.FALSE. + WRITE(UNIT=ILUOUT,FMT=9002) KMI + WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX LIMA FIELD BUT IT DOES NOT EXIST.' + WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVLIMA=FALSE' +END IF +! IF (CELEC(1:3) /= 'ELE' .AND. LHORELAX_SVELEC) THEN LHORELAX_SVELEC=.FALSE. WRITE(UNIT=ILUOUT,FMT=9002) KMI @@ -2242,6 +2368,7 @@ END IF ! IF ( (.NOT. LHORELAX_UVWTH) .AND. (.NOT.(ANY(LHORELAX_SV))) .AND. & (.NOT. LHORELAX_SVC2R2).AND. (.NOT. LHORELAX_SVC1R3) .AND. & + (.NOT. LHORELAX_SVLIMA).AND. & (.NOT. LHORELAX_SVELEC).AND. (.NOT. LHORELAX_SVCHEM) .AND. & (.NOT. LHORELAX_SVLG) .AND. (.NOT. LHORELAX_SVPP) .AND. & (.NOT. LHORELAX_SVCS) .AND. & @@ -2267,6 +2394,7 @@ IF ((LHORELAX_UVWTH .OR. LHORELAX_SVPP .OR. & LHORELAX_SVFF .OR. & #endif LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR. & + LHORELAX_SVLIMA .OR. & LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR. & LHORELAX_SVLG .OR. ANY(LHORELAX_SV) .OR. & LHORELAX_RV .OR. LHORELAX_RC .OR. & @@ -2281,6 +2409,7 @@ IF ((LHORELAX_UVWTH .OR. LHORELAX_SVPP .OR. & WRITE(ILUOUT,FMT=*) "LHORELAX_UVWTH=",LHORELAX_UVWTH WRITE(ILUOUT,FMT=*) "LHORELAX_SVC2R2=",LHORELAX_SVC2R2 WRITE(ILUOUT,FMT=*) "LHORELAX_SVC1R3=",LHORELAX_SVC1R3 + WRITE(ILUOUT,FMT=*) "LHORELAX_SVLIMA=",LHORELAX_SVLIMA WRITE(ILUOUT,FMT=*) "LHORELAX_SVELEC=",LHORELAX_SVELEC WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHEM=",LHORELAX_SVCHEM WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHIC=",LHORELAX_SVCHIC @@ -2314,6 +2443,7 @@ IF ((LHORELAX_UVWTH .OR. LHORELAX_SVPP .OR. & LHORELAX_SVFF .OR. & #endif LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR. & + LHORELAX_SVLIMA .OR. & LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR. & LHORELAX_SVLG .OR. ANY(LHORELAX_SV) .OR. & LHORELAX_RV .OR. LHORELAX_RC .OR. & diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index e95c80676abe4e5e872cbaf9521d88933c2f9bfd..ce8157e6fa15d79ae580348e8eeef5abff13a8a5 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -2,7 +2,7 @@ !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. -! ######spl +! ###################### MODULE MODI_READ_FIELD ! ###################### ! @@ -230,6 +230,7 @@ END MODULE MODI_READ_FIELD !! Bosseur & Filippi 07/13 Adds Forefire !! M. Leriche 11/14 correct bug in pH initialization !! C.Lac 12/14 correction for reproducibility START/RESTA +!! Modification 01/2016 (JP Pinty) Add LIMA !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -257,6 +258,11 @@ USE MODD_LG, ONLY: CLGNAMES USE MODD_ELEC_DESCR, ONLY: CELECNAMES USE MODD_PARAM_C2R2, ONLY: LSUPSAT ! +USE MODD_PARAM_LIMA , ONLY: NMOD_CCN, LSCAV, LAERO_MASS, & + NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM, LHHONI +USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS +USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES +! USE MODE_FMREAD USE MODI_INI_LS USE MODI_INI_LB @@ -391,6 +397,9 @@ CHARACTER (LEN=2) :: YSTORAGE_TYPE REAL, DIMENSION(KIU) :: X1D ! forcing working arrays REAL, DIMENSION(KIU,KJU,KKU):: XDTH3D,XDRV3D ! +CHARACTER(LEN=2) :: INDICE +INTEGER :: I +! !------------------------------------------------------------------------------- ! !* 1. INITIALIZATION @@ -604,7 +613,7 @@ SELECT CASE(HGETCIT) ! ice concentration PCIT(:,:,:)=0. END SELECT ! -! Scalar Variables Reading : Users, C2R2, C1R3, ELEC, Chemical SV +! Scalar Variables Reading : Users, C2R2, C1R3, LIMA, ELEC, Chemical SV ! YDIR='XY' ISV= SIZE(PSVT,4) @@ -654,6 +663,67 @@ DO JSV = NSV_C1R3BEG,NSV_C1R3END END SELECT END DO ! +! LIMA variables +! +DO JSV = NSV_LIMA_BEG,NSV_LIMA_END + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') +! Nc + IF (JSV .EQ. NSV_LIMA_NC) THEN + YRECFM=TRIM(CLIMA_WARM_NAMES(1))//'T' + END IF +! Nr + IF (JSV .EQ. NSV_LIMA_NR) THEN + YRECFM=TRIM(CLIMA_WARM_NAMES(2))//'T' + END IF +! N CCN free + IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + YRECFM=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' + END IF +! N CCN acti + IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) + YRECFM=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' + END IF +! Scavenging + IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN + YRECFM=TRIM(CAERO_MASS(1))//'T' + END IF +! Ni + IF (JSV .EQ. NSV_LIMA_NI) THEN + YRECFM=TRIM(CLIMA_COLD_NAMES(1))//'T' + END IF +! N IFN free + IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + YRECFM=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' + END IF +! N IFN nucl + IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) + YRECFM=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' + END IF +! N IMM nucl + I = 0 + IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN + I = I + 1 + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + YRECFM=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + END IF +! Hom. freez. of CCN + IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN + YRECFM=TRIM(CLIMA_COLD_NAMES(5))//'T' + END IF +! + CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) +! + PSVT(:,:,:,JSV) = Z3D(:,:,:) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT +END DO +! DO JSV = NSV_ELECBEG,NSV_ELECEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index b463a9c4b3b1f8252db920a467019faf84468672..721d2902e5960747689b02a4da0c00d4608f2b76 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -2,7 +2,7 @@ !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. -! $Source$ +! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/resolved_cloud.f90,v $ !----------------------------------------------------------------- ! ########################## MODULE MODI_RESOLVED_CLOUD @@ -19,10 +19,9 @@ INTERFACE PCIT, OSEDIC, OACTIT, OSEDC, OSEDI, & ORAIN, OWARM, OHHONI, OCONVHG, & PCF_MF,PRC_MF, PRI_MF, & - PINPRC,PINPRC3D,PINPRR,PINPRR3D, PEVAP3D, & - PINPRS,PINPRS3D,PINPRG,PINPRG3D,PINPRH,PINPRH3D, & + PINPRC,PINPRR,PINPRR3D, PEVAP3D, & + PINPRS,PINPRG,PINPRH, & PSOLORG,PMI, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & PSEA,PTOWN ) ! CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! kind of cloud @@ -117,17 +116,8 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI ! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction ! @@ -147,10 +137,9 @@ END MODULE MODI_RESOLVED_CLOUD PCIT, OSEDIC, OACTIT, OSEDC, OSEDI, & ORAIN, OWARM, OHHONI, OCONVHG, & PCF_MF,PRC_MF, PRI_MF, & - PINPRC,PINPRC3D,PINPRR,PINPRR3D, PEVAP3D, & - PINPRS,PINPRS3D,PINPRG,PINPRG3D,PINPRH,PINPRH3D, & + PINPRC,PINPRR,PINPRR3D, PEVAP3D, & + PINPRS,PINPRG,PINPRH, & PSOLORG,PMI, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & PSEA,PTOWN ) ! ########################################################################## ! @@ -253,6 +242,7 @@ END MODULE MODI_RESOLVED_CLOUD !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! M.Mazoyer : 04/2016 : Temperature radiative tendency used for !! activation by cooling (OACTIT) +!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -272,6 +262,8 @@ USE MODD_CH_AEROSOL , ONLY : LORILAM USE MODD_DUST , ONLY : LDUST USE MODD_SALT , ONLY : LSALT ! +USE MODD_PARAM_LIMA, ONLY : LCOLD, XCONC_CCN_TOT, NMOD_CCN, NMOD_IFN, NMOD_IMM +! USE MODI_SLOW_TERMS USE MODI_FAST_TERMS USE MODI_ICE_ADJUST @@ -285,6 +277,10 @@ USE MODI_SHUMAN USE MODI_BUDGET USE MODI_GET_HALO ! +USE MODI_LIMA_WARM +USE MODI_LIMA_COLD +USE MODI_LIMA_MIXED +USE MODI_LIMA_ADJUST ! IMPLICIT NONE ! @@ -383,17 +379,8 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI ! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction ! @@ -409,7 +396,8 @@ INTEGER :: IKB ! INTEGER :: IKE ! INTEGER :: IKU INTEGER :: IINFO_ll ! return code of parallel routine -INTEGER :: JK,JI +INTEGER :: JK,JI,JL +INTEGER :: I, J, K ! ! ! @@ -430,6 +418,8 @@ INTEGER :: ISVEND ! last scalar index for microph REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVT ! scalar variable for microphysics only REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVS ! scalar tendency for microphysics only ! +INTEGER :: JMOD, JMOD_IFN +! !------------------------------------------------------------------------------ ! !* 1. PRELIMINARY COMPUTATIONS @@ -446,12 +436,15 @@ IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') THEN ELSE IF (HCLOUD == 'C3R5') THEN ISVBEG = NSV_C2R2BEG ISVEND = NSV_C1R3END +ELSE IF (HCLOUD == 'LIMA') THEN + ISVBEG = NSV_LIMA_BEG + ISVEND = NSV_LIMA_END ELSE ISVBEG = 0 ISVEND = 0 END IF ! -IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN +IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN ALLOCATE(ZSVT(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),ISVEND - ISVBEG + 1)) ALLOCATE(ZSVS(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),ISVEND - ISVBEG + 1)) ZSVT(:,:,:,:) = PSVT(:,:,:,ISVBEG:ISVEND) @@ -466,7 +459,7 @@ DO JRR = 1,KRR PRS(:,:,:,JRR) = PRS(:,:,:,JRR) / PRHODJ(:,:,:) END DO ! -IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN +IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN DO JSV = 1,SIZE(ZSVS,4) ZSVS(:,:,:,JSV) = ZSVS(:,:,:,JSV) / PRHODJ(:,:,:) ENDDO @@ -493,7 +486,7 @@ IF(LEAST_ll() .AND. HLBCX(2) /= 'CYCL') PRT(IIE+1:,:,:,2:) = 0.0 IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL') PRT(:,:IJB-1,:,2:) = 0.0 IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL') PRT(:,IJE+1:,:,2:) = 0.0 ! -IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN +IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN DO JI=1,JPHEXT ZSVS(JI,:,:,:) = ZSVS(IIB,:,:,:) ZSVS(IIE+JI,:,:,:) = ZSVS(IIE,:,:,:) @@ -520,7 +513,8 @@ PRS(:,:,IKE+1,:) = PRS(:,:,IKE,:) PRT(:,:,IKB-1,:) = PRT(:,:,IKB,:) PRT(:,:,IKE+1,:) = PRT(:,:,IKE,:) ! -IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN +IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO' & + .OR. HCLOUD == 'LIMA') THEN ZSVS(:,:,IKB-1,:) = ZSVS(:,:,IKB,:) ZSVS(:,:,IKE+1,:) = ZSVS(:,:,IKE,:) ZSVT(:,:,IKB-1,:) = ZSVT(:,:,IKB,:) @@ -543,8 +537,8 @@ ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) ! !* 3.1 Non local correction for precipitating species (Rood 87) ! -IF (HCLOUD == 'KESS' .OR. HCLOUD == 'ICE3' & - .OR. HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN +IF (HCLOUD == 'KESS' .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'C2R2' .OR. & + HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO' .OR. HCLOUD=='LIMA' ) THEN ! DO JRR = 3,KRR SELECT CASE (JRR) @@ -672,6 +666,62 @@ SELECT CASE ( HCLOUD ) PSVS(:,:,:,2) = 0.0 END WHERE PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) ) +! + CASE('LIMA') +! Correction of CCN concentrations where rc<0 or Nc<0 + IF (OWARM) THEN + DO JMOD = 1, NMOD_CCN + WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,NSV_LIMA_NC) < 0.) ! rc or Nc < 0. + ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JMOD-1) = & + ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JMOD-1) + & ! NfreeCN = NfreeCN+ + ZSVS(:,:,:,NSV_LIMA_CCN_ACTI+JMOD-1) ! N_activated_CCN + ZSVS(:,:,:,NSV_LIMA_CCN_ACTI+JMOD-1) = 0.0 ! N_activated_CCN=0 + END WHERE + ENDDO + END IF +! Correction where rc<0 + IF (OWARM) THEN + WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,NSV_LIMA_NC) < 0.) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & + ZCPH(:,:,:) / ZEXN(:,:,:) + PRS(:,:,:,2) = 0.0 + ZSVS(:,:,:,NSV_LIMA_NC) = 0.0 + END WHERE + END IF +! Correction where rr<0 + IF (OWARM .AND. ORAIN) THEN + WHERE (PRS(:,:,:,3) < 0. .OR. ZSVS(:,:,:,NSV_LIMA_NR) < 0.) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) / & + ZCPH(:,:,:) / ZEXN(:,:,:) + PRS(:,:,:,3) = 0.0 + ZSVS(:,:,:,NSV_LIMA_NR) = 0.0 + END WHERE + END IF +! Correction of IFN concentrations where ri<0 or Ni<0 + IF (LCOLD) THEN + DO JMOD = 1, NMOD_IFN + WHERE (PRS(:,:,:,4) < 0. .OR. ZSVS(:,:,:,NSV_LIMA_NI) < 0.) ! ri or Ni < 0. + ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JMOD-1) = & + ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JMOD-1) + & + ZSVS(:,:,:,NSV_LIMA_IFN_NUCL+JMOD-1) ! N_IF =N_IF+N_IN + ZSVS(:,:,:,NSV_LIMA_IFN_NUCL+JMOD-1) = 0.0 ! N_IN =0. + END WHERE + ENDDO + END IF +! Correction where ri<0 + IF (LCOLD) THEN + WHERE (PRS(:,:,:,4) < 0. .OR. ZSVS(:,:,:,NSV_LIMA_NI) < 0.) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & + ZCPH(:,:,:) / ZEXN(:,:,:) + PRS(:,:,:,4) = 0.0 + ZSVS(:,:,:,NSV_LIMA_NI) = 0.0 + END WHERE + END IF +! + ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) ) ! END SELECT ! @@ -689,6 +739,23 @@ IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI') IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS') IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG') IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH') +IF (LBUDGET_SV) THEN + CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV') + CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV') + CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV') + IF (NMOD_CCN.GE.1) THEN + DO JL=1, NMOD_CCN + CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* & + PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV') + END DO + END IF + IF (NMOD_IFN.GE.1) THEN + DO JL=1, NMOD_IFN + CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* & + PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV') + END DO + END IF +END IF ! !* 3.4 Limitations of Na and Nc to the CCN max number concentration @@ -806,9 +873,8 @@ SELECT CASE ( HCLOUD ) PRT(:,:,:,5), PRT(:,:,:,6), & PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC,PINPRC3D,PINPRR, PINPRR3D, PEVAP3D, & - PINPRS,PINPRS3D, PINPRG,PINPRG3D, PSIGS, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PINPRC,PINPRR, PINPRR3D, PEVAP3D, & + PINPRS, PINPRG, PSIGS, & PSEA,PTOWN) ! !* 9.2 Perform the saturation adjustment over cloud ice and cloud water @@ -846,11 +912,10 @@ SELECT CASE ( HCLOUD ) PRT(:,:,:,5), PRT(:,:,:,6), & PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC,PINPRC3D, PINPRR, PINPRR3D, PEVAP3D, & - PINPRS,PINPRS3D, PINPRG,PINPRG3D, PSIGS, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PINPRC, PINPRR, PINPRR3D, PEVAP3D, & + PINPRS, PINPRG, PSIGS, & PSEA, PTOWN, & - PRT(:,:,:,7), PRS(:,:,:,7), PINPRH,PINPRH3D,OCONVHG ) + PRT(:,:,:,7), PRS(:,:,:,7), PINPRH,OCONVHG ) ! !* 10.2 Perform the saturation adjustment over cloud ice and cloud water @@ -917,6 +982,47 @@ SELECT CASE ( HCLOUD ) PINUCS=ZSVS(:,:,:,5), PCIS=ZSVS(:,:,:,4), & PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR ) ! +! +!* 12. 2-MOMENT MIXED-PHASE MICROPHYSICAL SCHEME LIMA +! -------------------------------------------------------------- +! +! +!* 12.1 Compute the explicit microphysical sources +! + CASE ('LIMA') +! + IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & + HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ,& + PRHODREF, PEXNREF, PW_ACT, PPABSM, PPABST, & + PTHM, PRCM, & + PTHT, PRT, ZSVT, & + PTHS, PRS, ZSVS, & + PINPRC, PINPRR, PINPRR3D, PEVAP3D ) +! +IF (LCOLD) CALL LIMA_COLD(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, & + HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ, & + PRHODREF, PEXNREF, PPABST, PW_ACT, & + PTHM, PPABSM, & + PTHT, PRT, ZSVT, & + PTHS, PRS, ZSVS, & + PINPRS, PINPRG, PINPRH) +! +IF (OWARM .AND. LCOLD) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, & + HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ,& + PRHODREF, PEXNREF, PPABST, PW_ACT, & + PTHM, PPABSM, & + PTHT, PRT, ZSVT, & + PTHS, PRS, ZSVS ) +! +! +!* 12.2 Perform the saturation adjustment +! +CALL LIMA_ADJUST(KRR, KMI, HFMFILE, HLUOUT, HRAD, & + HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP, & + PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PPABST, & + PRT, PRS, ZSVT, ZSVS, & + PTHS, PSRCS, PCLDFR ) +! END SELECT ! IF ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') ) THEN @@ -942,7 +1048,7 @@ END IF !------------------------------------------------------------------------------- ! ! -!* 12. SWITCH BACK TO THE PROGNOSTIC VARIABLES +!* 13. SWITCH BACK TO THE PROGNOSTIC VARIABLES ! --------------------------------------- ! PTHS(:,:,:) = PTHS(:,:,:) * PRHODJ(:,:,:) @@ -951,7 +1057,7 @@ DO JRR = 1,KRR PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * PRHODJ(:,:,:) END DO ! -IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN +IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN DO JSV = 1,SIZE(ZSVS,4) PSVS(:,:,:,JSV+ISVBEG-1) = ZSVS(:,:,:,JSV) * PRHODJ(:,:,:) ENDDO diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90 index a0586ac5c8823cf6d69c1a8346f40224795a8eed..ae8476c6482bebf149c3cde79c48fe79d8fae4ad 100644 --- a/src/MNH/spawn_field2.f90 +++ b/src/MNH/spawn_field2.f90 @@ -145,6 +145,7 @@ END MODULE MODI_SPAWN_FIELD2 !! Modification 25/02/2015 (M.Moge) correction of the parallelization attempted by M.Faivre !! Modification 15/04/2016 (P.Tulet) bug allocation ZSVT_C !! 29/04/2016 (J.Escobar) bug in use of ZSVT_C in SET_LSFIELD_1WAY_ll +!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -181,6 +182,11 @@ USE MODE_THERMO USE MODE_MODELN_HANDLER USE MODE_IO_ll, ONLY: UPCASE ! +USE MODD_PARAM_LIMA , ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,& + LSCAV, LAERO_MASS, LHHONI +USE MODD_PARAM_LIMA_COLD, ONLY : CLIMA_COLD_NAMES +USE MODD_PARAM_LIMA_WARM, ONLY : CLIMA_WARM_NAMES, CAERO_MASS +! USE MODD_ADVFRC_n USE MODD_RELFRC_n USE MODD_2D_FRC @@ -267,9 +273,14 @@ LOGICAL :: GUSERV ! INTEGER :: IGRID,ILENCH ! File CHARACTER (LEN=16) :: YRECFM ! management +CHARACTER (LEN=16) :: YRECFM_T ! management +CHARACTER (LEN=16) :: YRECFM_M ! management CHARACTER (LEN=100) :: YCOMMENT ! variables CHARACTER (LEN=2) :: YDIR ! +CHARACTER(LEN=2) :: INDICE +INTEGER :: I +! !------------------------------------------------------------------------------- ! !* 1. PROLOGUE: @@ -818,6 +829,63 @@ IF (PRESENT(HSONFILE)) THEN YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO +! +! LIMA variables +! + DO JSV = NSV_LIMA_BEG,NSV_LIMA_END +! Nc + IF (JSV .EQ. NSV_LIMA_NC) THEN + YRECFM_T=TRIM(CLIMA_WARM_NAMES(1))//'T' + END IF +! Nr + IF (JSV .EQ. NSV_LIMA_NR) THEN + YRECFM_T=TRIM(CLIMA_WARM_NAMES(2))//'T' + END IF +! N CCN free + IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + YRECFM_T=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' + END IF +! N CCN acti + IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) + YRECFM_T=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' + END IF +! Scavenging + IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN + YRECFM_T=TRIM(CAERO_MASS(1))//'T' + END IF +! Ni + IF (JSV .EQ. NSV_LIMA_NI) THEN + YRECFM_T=TRIM(CLIMA_COLD_NAMES(1))//'T' + END IF +! N IFN free + IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + YRECFM_T=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' + END IF +! N IFN nucl + IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) + YRECFM_T=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' + END IF +! N IMM nucl + I = 0 + IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN + I = I + 1 + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + YRECFM_T=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + END IF +! Hom. freez. of CCN + IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN + YRECFM_T=TRIM(CLIMA_COLD_NAMES(5))//'T' + END IF +! time t + CALL FMREAD(HSONFILE,YRECFM_T,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + YCOMMENT,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO +! DO JSV = NSV_ELECBEG,NSV_ELECEND ! ELEC Scalar Variables YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T' CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index 25c056d34e89a9eefcf99c64b0d82eb2760f7911..8953122c402453101205fdc68b154263ada97706 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -187,6 +187,7 @@ END MODULE MODI_SPAWN_MODEL2 !! Modification 05/02/2015 (M.Moge) parallelization of SPAWNING !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar 02/05/2016 : test ZZS_MAX in // +!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -277,6 +278,10 @@ USE MODD_2D_FRC USE MODI_GET_SIZEX_LB USE MODI_GET_SIZEY_LB ! +USE MODD_LIMA_PRECIP_SCAVENGING_n +USE MODD_PARAM_LIMA +USE MODD_PASPOL, ONLY : LPASPOL +! USE MODD_MPIF USE MODD_VAR_ll ! @@ -380,6 +385,8 @@ INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays ! CHARACTER(LEN=4) :: YLBTYPE ! +INTEGER,DIMENSION(:,:),ALLOCATABLE :: IJCOUNT +! REAL :: ZZS_MAX, ZZS_MAX_ll !------------------------------------------------------------------------------- ! @@ -585,6 +592,18 @@ CCLOUD = HCLOUD CDCONV = 'NONE' ! deep convection will have to be restarted CSCONV = 'NONE' ! shallow convection will have to be restarted ! +! cas LIMA +! +IF (HCLOUD=='LIMA') THEN + CCLOUD='LIMA' + NMOD_CCN=3 + LSCAV=.FALSE. + LAERO_MASS=.FALSE. + NMOD_IFN=2 + NMOD_IMM=1 + LHHONI=.FALSE. +ENDIF +! CALL INI_NSV(2) ! NSV* are set equal for model 2 and model 1. ! NSV is set to the total number of SV for model 2 ! @@ -656,6 +675,7 @@ IF (NSV_FF > 0) LHORELAX_SVFF = .TRUE. #endif IF (NSV_CS > 0) LHORELAX_SVCS = .TRUE. LHORELAX_SVLG = .FALSE. +IF (NSV_LIMA > 0) LHORELAX_SVLIMA = .TRUE. ! !------------------------------------------------------------------------------- ! @@ -844,7 +864,7 @@ ELSE END IF ! IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C2R2' & - .OR. CCLOUD == 'KHKO' ) THEN + .OR. CCLOUD == 'KHKO' .OR. CCLOUD == 'LIMA') THEN ALLOCATE(XINPRC(IIU,IJU)) ALLOCATE(XACPRC(IIU,IJU)) ELSE @@ -852,7 +872,7 @@ ELSE ALLOCATE(XACPRC(0,0)) END IF ! -IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5') THEN +IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5'.OR. CCLOUD == 'LIMA') THEN ALLOCATE(XINPRS(IIU,IJU)) ALLOCATE(XACPRS(IIU,IJU)) ELSE @@ -860,7 +880,7 @@ ELSE ALLOCATE(XACPRS(0,0)) END IF ! -IF (CCLOUD == 'C3R5' .OR. CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) THEN +IF (CCLOUD == 'C3R5' .OR. CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4'.OR. CCLOUD == 'LIMA' ) THEN ALLOCATE(XINPRG(IIU,IJU)) ALLOCATE(XACPRG(IIU,IJU)) ELSE @@ -868,7 +888,7 @@ ELSE ALLOCATE(XACPRG(0,0)) END IF ! -IF (CCLOUD == 'ICE4') THEN +IF (CCLOUD == 'ICE4'.OR. CCLOUD == 'LIMA') THEN ALLOCATE(XINPRH(IIU,IJU)) ALLOCATE(XACPRH(IIU,IJU)) ELSE @@ -876,6 +896,13 @@ ELSE ALLOCATE(XACPRH(0,0)) END IF ! +IF ( CCLOUD=='LIMA' .AND. LSCAV ) THEN + ALLOCATE(XINPAP(IIU,IJU)) + ALLOCATE(XACPAP(IIU,IJU)) + XINPAP(:,:)=0.0 + XACPAP(:,:)=0.0 +END IF +! ! 4.8bis electric variables ! IF (CELEC /= 'NONE' ) THEN diff --git a/src/MNH/test_nam_var.f90 b/src/MNH/test_nam_var.f90 index 0617298ebf566394cf49d587e22f018bba74d316..95a94bc2d2f0fece9c290b18e5e037837c780ae3 100644 --- a/src/MNH/test_nam_var.f90 +++ b/src/MNH/test_nam_var.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/test_nam_var.f90,v $ $Revision: 1.2.4.1.18.1 $ ! MASDEV4_7 init 2006/05/18 13:07:25 !----------------------------------------------------------------- !############################ @@ -17,7 +17,8 @@ INTERFACE TEST_NAM_VAR SUBROUTINE TEST_NAM_VARC0(KLUOUT,HNAME,HVAR, & HVALUE1,HVALUE2,HVALUE3, & HVALUE4,HVALUE5,HVALUE6, & - HVALUE7,HVALUE8,HVALUE9,HVALUE10 ) + HVALUE7,HVALUE8,HVALUE9, & + HVALUE10,HVALUE11 ) ! INTEGER, INTENT(IN) ::KLUOUT ! output listing logical unit CHARACTER(LEN=*) ,INTENT(IN) ::HNAME ! name of the variable to test @@ -32,7 +33,8 @@ CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE6 ! sixth possible value CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE7 ! seventh possible value CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE8 ! eightth possible value CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE9 ! nineth possible value -CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE10 ! tenth possible value +CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE10 ! tenth possible value +CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE11 ! eleventh possible value ! END SUBROUTINE TEST_NAM_VARC0 ! @@ -45,7 +47,8 @@ END MODULE MODI_TEST_NAM_VAR SUBROUTINE TEST_NAM_VARC0(KLUOUT,HNAME,HVAR, & HVALUE1,HVALUE2,HVALUE3, & HVALUE4,HVALUE5,HVALUE6, & - HVALUE7,HVALUE8,HVALUE9,HVALUE10 ) + HVALUE7,HVALUE8,HVALUE9, & + HVALUE10,HVALUE11 ) ! ######################################################### ! !!**** *TEST_NAM_VARC0* - routine to test the value of a character var. @@ -79,6 +82,7 @@ END MODULE MODI_TEST_NAM_VAR !! ------------- !! !! original 17/04/98 +!! B.Vie 2016 : for LIMA add arguments !---------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -101,6 +105,7 @@ CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE6 ! sixth possible value CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE7 ! seventh possible value CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE8 ! eightth possible value CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE9 ! nineth possible value +CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE11 ! eleventh possible value CHARACTER(LEN=*) ,INTENT(IN), OPTIONAL ::HVALUE10 ! tenth possible value ! !* 0.2 Declarations of local variables @@ -148,6 +153,10 @@ IF ( PRESENT (HVALUE10) ) THEN IF ( HVAR==HVALUE10 ) RETURN END IF ! +IF ( PRESENT (HVALUE11) ) THEN + IF ( HVAR==HVALUE11 ) RETURN +END IF +! ! !------------------------------------------------------------------------------- ! @@ -168,6 +177,7 @@ IF ( PRESENT (HVALUE7) ) WRITE (KLUOUT,*) '"',HVALUE7,'"' IF ( PRESENT (HVALUE8) ) WRITE (KLUOUT,*) '"',HVALUE8,'"' IF ( PRESENT (HVALUE9) ) WRITE (KLUOUT,*) '"',HVALUE9,'"' IF ( PRESENT (HVALUE10) ) WRITE (KLUOUT,*) '"',HVALUE10,'"' +IF ( PRESENT (HVALUE11) ) WRITE (KLUOUT,*) '"',HVALUE11,'"' ! !callabortstop CALL ABORT diff --git a/src/MNH/two_wayn.f90 b/src/MNH/two_wayn.f90 index a213fdbcf7142ec7af28818a5740c86ec629c23b..3ebfd396b164e9179fd56937fc6dc847564d863b 100644 --- a/src/MNH/two_wayn.f90 +++ b/src/MNH/two_wayn.f90 @@ -5,7 +5,8 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/two_wayn.f90,v $ $Revision: 1.3.2.4.2.2.2.3.8.1.2.3 $ +! masdev4_8 nesting 2008/06/30 12:08:25 !----------------------------------------------------------------- ! ################### MODULE MODI_TWO_WAY_n @@ -117,6 +118,7 @@ END MODULE MODI_TWO_WAY_n !! J. Escobar 27/06/2011 correction for gridnesting with different SHAPE !! Bosseur & Filippi 07/2013 Adds Forefire !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -130,6 +132,7 @@ USE MODD_CONF USE MODD_NSV USE MODD_PARAM_ICE, ONLY : LSEDIC USE MODD_PARAM_C2R2, ONLY : LSEDC +USE MODD_PARAM_LIMA, ONLY : NSEDC => LSEDC ! USE MODD_FIELD_n ! modules relative to the inner (fine scale) model $n USE MODD_PRECIP_n , ONLY : XINPRC,XINPRR,XINPRS,XINPRG,XINPRH @@ -253,8 +256,9 @@ ELSE ALLOCATE(ZTSVM(0,0,0,0)) ENDIF ! -IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN +IF (LUSERC .AND. ( (LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & + (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR.& + (NSEDC .AND. CCLOUD == 'LIMA') )) THEN ALLOCATE(ZTINPRC(IDIMX, IDIMY)) ELSE ALLOCATE(ZTINPRC(0,0)) @@ -417,6 +421,25 @@ IF (NSV_C1R3_A(IMI) > 0) THEN END DO END DO END IF +! LIMA scalar variables +IF (NSV_LIMA_A(IMI) > 0) THEN + ! nested model uses LIMA microphysical scheme + DO JVAR=1,NSV_LIMA_A(KMI) + ZTSVM(:,:,:,JVAR-1+NSV_LIMA_BEG_A(KMI)) = 0. + DO JX=1,IDXRATIO + DO JY=1,IDYRATIO + II1 = IIB+JX-1 + II2 = IIE+JX-IDXRATIO + IJ1 = IJB+JY-1 + IJ2 = IJE+JY-IDYRATIO + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_LIMA_BEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_LIMA_BEG_A(KMI))+& + &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& + &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_LIMA_BEG_A(IMI)) + END DO + END DO + END DO +END IF ! Electrical scalar variables IF (NSV_ELEC_A(IMI) > 0) THEN ! nested model uses electrical scheme @@ -669,8 +692,9 @@ END IF ZTINPRR(IIBC:IIEC,IJBC:IJEC)=ZTINPRR(IIBC:IIEC,IJBC:IJEC)/(IDXRATIO*IDYRATIO) END IF ! - IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN + IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & + (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR.& + (NSEDC .AND. CCLOUD == 'LIMA') )) THEN ZTINPRC(:,:) = 0. DO JX=1,IDXRATIO DO JY=1,IDYRATIO @@ -900,8 +924,9 @@ IF (LINTER) THEN ELSE ALLOCATE(ZINPRR(0,0)) END IF - IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN + IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & + (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR.& + (NSEDC .AND. CCLOUD == 'LIMA') )) THEN ALLOCATE(ZINPRC(IXOR:IXEND,IYOR:IYEND)) ELSE ALLOCATE(ZINPRC(0,0)) @@ -974,8 +999,10 @@ ENDDO IF (LUSERR) THEN CALL SET_LSFIELD_2WAY_ll(ZINPRR , ZTINPRR) END IF -IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN +! +IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & + (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR.& + (NSEDC .AND. CCLOUD == 'LIMA') )) THEN CALL SET_LSFIELD_2WAY_ll(ZINPRC , ZTINPRC) END IF IF (LUSERS) THEN @@ -1107,8 +1134,9 @@ ENDIF IF (LUSERR) THEN PINPRR(IXOR:IXEND,IYOR:IYEND)=ZINPRR(IXOR:IXEND,IYOR:IYEND) ENDIF - IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN + IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & + (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR.& + (NSEDC .AND. CCLOUD == 'LIMA') )) THEN PINPRC(IXOR:IXEND,IYOR:IYEND)=ZINPRC(IXOR:IXEND,IYOR:IYEND) ENDIF IF (LUSERS) THEN @@ -1167,6 +1195,12 @@ DO JVAR=NSV_C1R3BEG_A(KMI),NSV_C1R3END_A(KMI) - ZK2W * PRHODJ(IXOR:IXEND,IYOR:IYEND,:) * (PSVM(IXOR:IXEND,IYOR:IYEND,:,JVAR) & -ZSVM(IXOR:IXEND,IYOR:IYEND,:,JVAR)/ZRHODJ(IXOR:IXEND,IYOR:IYEND,:) ) ENDDO +! LIMA scalar variables +DO JVAR=NSV_LIMA_BEG_A(KMI),NSV_LIMA_END_A(KMI) + PRSVS(IXOR:IXEND,IYOR:IYEND,:,JVAR) = PRSVS(IXOR:IXEND,IYOR:IYEND,:,JVAR) & + - ZK2W * PRHODJ(IXOR:IXEND,IYOR:IYEND,:) * (PSVM(IXOR:IXEND,IYOR:IYEND,:,JVAR) & + -ZSVM(IXOR:IXEND,IYOR:IYEND,:,JVAR)/ZRHODJ(IXOR:IXEND,IYOR:IYEND,:) ) +ENDDO ! Electrical scalar variables DO JVAR=NSV_ELECBEG_A(KMI),NSV_ELECEND_A(KMI) PRSVS(IXOR:IXEND,IYOR:IYEND,:,JVAR) = PRSVS(IXOR:IXEND,IYOR:IYEND,:,JVAR) & diff --git a/src/MNH/update_nsv.f90 b/src/MNH/update_nsv.f90 index 332e4c31e4e40f6fcd09f8eff1bfd6e6320c7415..e5555891ff54fd96eaae7c325f952ecb48d66cf5 100644 --- a/src/MNH/update_nsv.f90 +++ b/src/MNH/update_nsv.f90 @@ -22,6 +22,7 @@ END MODULE MODI_UPDATE_NSV !! any MesoNH routine WITH or WITHOUT $n before using !! the NSV_* variables. !! Modify (Escobar ) 2/2014 : add Forefire var +!! Modify (Vie) 2016 : add LIMA USE MODD_CONF, ONLY : NVERB USE MODD_NSV IMPLICIT NONE @@ -46,6 +47,21 @@ NSV_C2R2END = NSV_C2R2END_A(KMI) NSV_C1R3 = NSV_C1R3_A(KMI) NSV_C1R3BEG = NSV_C1R3BEG_A(KMI) NSV_C1R3END = NSV_C1R3END_A(KMI) +! +NSV_LIMA = NSV_LIMA_A(KMI) +NSV_LIMA_BEG = NSV_LIMA_BEG_A(KMI) +NSV_LIMA_END = NSV_LIMA_END_A(KMI) +NSV_LIMA_NC = NSV_LIMA_NC_A(KMI) +NSV_LIMA_NR = NSV_LIMA_NR_A(KMI) +NSV_LIMA_CCN_FREE = NSV_LIMA_CCN_FREE_A(KMI) +NSV_LIMA_CCN_ACTI = NSV_LIMA_CCN_ACTI_A(KMI) +NSV_LIMA_SCAVMASS = NSV_LIMA_SCAVMASS_A(KMI) +NSV_LIMA_NI = NSV_LIMA_NI_A(KMI) +NSV_LIMA_IFN_FREE = NSV_LIMA_IFN_FREE_A(KMI) +NSV_LIMA_IFN_NUCL = NSV_LIMA_IFN_NUCL_A(KMI) +NSV_LIMA_IMM_NUCL = NSV_LIMA_IMM_NUCL_A(KMI) +NSV_LIMA_HOM_HAZE = NSV_LIMA_HOM_HAZE_A(KMI) +! NSV_ELEC = NSV_ELEC_A(KMI) NSV_ELECBEG = NSV_ELECBEG_A(KMI) NSV_ELECEND = NSV_ELECEND_A(KMI) diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90 index 3060afd81857f75e954c360420119884f28e8f1a..f71773a0cedbb1e9c16de9b2e4d57171342f2faf 100644 --- a/src/MNH/write_aircraft_balloon.f90 +++ b/src/MNH/write_aircraft_balloon.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/write_aircraft_balloon.f90,v $ $Revision: 1.2.2.3.2.1.2.2.10.1.2.2 $ ! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ########################### @@ -61,8 +61,7 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON !! Original 15/05/2000 !! 10/01/2011 adding IMI, the model number !! March, 2013 : C.Lac : add vertical profiles -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profiler +!! Oct 2016 : G.Delautier LIMA !! !! -------------------------------------------------------------------------- ! @@ -84,6 +83,9 @@ USE MODD_DUST, ONLY: CDUSTNAMES, LDUST, NMODE_DST USE MODD_SALT, ONLY: CSALTNAMES USE MODD_NSV USE MODD_DIAG_IN_RUN +USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS +USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES +USE MODD_PARAM_LIMA , ONLY: NINDICE_CCN_IMM,NMOD_CCN,NMOD_IFN,NMOD_IMM ! USE MODE_MODELN_HANDLER USE MODE_DUST_PSD @@ -211,9 +213,9 @@ IPROC = 20 + SIZE(TPFLYER%R,2) + SIZE(TPFLYER%SV,2) & IPROCZ = SIZE(TPFLYER%RTZ,2)+ SIZE(TPFLYER%RZ,2)+ SIZE(TPFLYER%RZ,3)+ SIZE(TPFLYER%CRARE,2)+ & SIZE(TPFLYER%CRARE_ATT,2)+ SIZE(TPFLYER%WZ,2) + SIZE(TPFLYER%FFZ,2)+ & SIZE(TPFLYER%IWCZ,2)+ SIZE(TPFLYER%LWCZ,2) + SIZE(TPFLYER%CIZ,2) + & - SIZE(TPFLYER%ZZ,2) + SIZE(TPFLYER%SPEEDCZ,2) + & - SIZE(TPFLYER%SPEEDRZ,2) + SIZE(TPFLYER%SPEEDSZ,2)+ & - SIZE(TPFLYER%SPEEDGZ,2) + SIZE(TPFLYER%ZZ,2) + +IF (NSV_LIMA_BEG/=NSV_LIMA_END) IPROCZ= IPROCZ+ SIZE(TPFLYER%CCZ,2) + SIZE(TPFLYER%CRZ,2) IF (SIZE(TPFLYER%TKE )>0) IPROC = IPROC + 1 IF (LDIAG_IN_RUN) IPROC = IPROC + 1 IF (LORILAM) IPROC = IPROC + JPMODE*3 @@ -421,6 +423,43 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN YCOMMENT (JPROC) = ' ' ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV) END DO +! LIMA variables + DO JSV=NSV_LIMA_BEG,NSV_LIMA_END + JPROC = JPROC+1 + YUNIT (JPROC) = '/kg' + YCOMMENT (JPROC) = ' ' + IF (JSV==NSV_LIMA_NC) YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(1))//'T' + IF (JSV==NSV_LIMA_NR) YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(2))//'T' + IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' + ENDIF + IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) + YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' + ENDIF + IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN + YTITLE(JPROC)=TRIM(CAERO_MASS(1))//'T' + YUNIT (JPROC) = 'kg/kg' + ENDIF + IF (JSV==NSV_LIMA_NI) YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(1))//'T' + IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' + ENDIF + IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) + YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' + ENDIF + I = 0 + IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN + I = I + 1 + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + ENDIF + IF (JSV .EQ. NSV_LIMA_HOM_HAZE) YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(5))//'T' + ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV) + END DO ! electrical scalar variables DO JSV = NSV_ELECBEG,NSV_ELECEND JPROC = JPROC+1 @@ -622,35 +661,31 @@ DO IK=1, IKU YCOMMENTZ(JPROCZ) = 'Liquid water content' ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%LWCZ(:,IK) ! - JPROCZ = JPROCZ + 1 - YTITLEZ (JPROCZ) = 'CIT' - YUNITZ (JPROCZ) = '/m3' - YCOMMENTZ(JPROCZ) = 'Ice concentration' - ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%CIZ(:,IK) -! - JPROCZ = JPROCZ + 1 - YTITLEZ (JPROCZ) = 'SPEEDC' - YUNITZ (JPROCZ) = 'm/s' - YCOMMENTZ(JPROCZ) = 'Cloud fall speed' - ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%SPEEDCZ(:,IK) -! - JPROCZ = JPROCZ + 1 - YTITLEZ (JPROCZ) = 'SPEEDR' - YUNITZ (JPROCZ) = 'm/s' - YCOMMENTZ(JPROCZ) = 'Rain fall speed' - ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%SPEEDRZ(:,IK) -! - JPROCZ = JPROCZ + 1 - YTITLEZ (JPROCZ) = 'SPEEDS' - YUNITZ (JPROCZ) = 'm/s' - YCOMMENTZ(JPROCZ) = 'Snow fall speed' - ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%SPEEDSZ(:,IK) -! - JPROCZ = JPROCZ + 1 - YTITLEZ (JPROCZ) = 'SPEEDG' - YUNITZ (JPROCZ) = 'm/s' - YCOMMENTZ(JPROCZ) = 'Graupel fall speed' - ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%SPEEDGZ(:,IK) + IF (NSV_LIMA_BEG/=NSV_LIMA_END) THEN + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'CIT' + YUNITZ (JPROCZ) = '/m3' + YCOMMENTZ(JPROCZ) = 'Ice concentration' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%CIZ(:,IK) + ELSE + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'CCLOUDT' + YUNITZ (JPROCZ) = '/kg' + YCOMMENTZ(JPROCZ) = 'liquid cloud concentration' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%CCZ(:,IK) +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'CRAINT' + YUNITZ (JPROCZ) = '/kg' + YCOMMENTZ(JPROCZ) = 'Rain concentration' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%CRZ(:,IK) +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'CICET' + YUNITZ (JPROCZ) = '/kg' + YCOMMENTZ(JPROCZ) = 'Ice concentration' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%CIZ(:,IK) + ENDIF ! JPROCZ = JPROCZ + 1 YTITLEZ (JPROCZ) = 'RARE' diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90 index 3bc5260d57895b0c7b726c350fcc3352ae7e5d4f..a52794462935d8fa20f9b358d06676195ccc3b2d 100644 --- a/src/MNH/write_desfmn.f90 +++ b/src/MNH/write_desfmn.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ +! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/write_desfmn.f90,v $ $Revision: 1.2.2.1.2.1.2.2.10.1.2.4 $ $Date: 2014/02/14 09:15:53 $ !----------------------------------------------------------------- ! ######################### MODULE MODI_WRITE_DESFM_n @@ -142,6 +142,7 @@ END MODULE MODI_WRITE_DESFM_n !! Modification V. Masson 01/2004 removes surface (externalization) !! Modification P. Tulet 01/2005 add dust, orilam !! Modification 05/2006 Remove EPS and OWRIGET +!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -150,6 +151,7 @@ USE MODE_FM ! USE MODD_PARAMETERS USE MODD_CONF +USE MODD_DYN_n, ONLY : LHORELAX_SVLIMA ! USE MODN_CONF USE MODN_DYN @@ -175,6 +177,7 @@ USE MODN_CH_MNHC_n USE MODN_CH_SOLVER_n USE MODN_PARAM_C2R2 USE MODN_PARAM_C1R3 +USE MODN_PARAM_LIMA USE MODN_ELEC USE MODN_SERIES USE MODN_SERIES_n @@ -214,7 +217,8 @@ LOGICAL :: GHORELAX_UVWTH, & #ifdef MNH_FOREFIRE GHORELAX_SVFF, & #endif - GHORELAX_SVCHEM, GHORELAX_SVC1R3,GHORELAX_SVELEC + GHORELAX_SVCHEM, GHORELAX_SVC1R3, & + GHORELAX_SVELEC, GHORELAX_SVLIMA LOGICAL :: GHORELAX_SVDST, GHORELAX_SVSLT, GHORELAX_SVAER LOGICAL, DIMENSION(JPSVMAX) :: GHORELAX_SV ! @@ -249,6 +253,7 @@ IF (CPROGRAM/='MESONH') THEN ! impose default value for next simulation GHORELAX_SV(:) = LHORELAX_SV(:) GHORELAX_SVC2R2= LHORELAX_SVC2R2 GHORELAX_SVC1R3= LHORELAX_SVC1R3 + GHORELAX_SVLIMA= LHORELAX_SVLIMA GHORELAX_SVELEC= LHORELAX_SVELEC GHORELAX_SVCHEM= LHORELAX_SVCHEM GHORELAX_SVCHIC= LHORELAX_SVCHIC @@ -272,6 +277,7 @@ IF (CPROGRAM/='MESONH') THEN ! impose default value for next simulation LHORELAX_SV(:) = .FALSE. LHORELAX_SVC2R2= .FALSE. LHORELAX_SVC1R3= .FALSE. + LHORELAX_SVLIMA= .FALSE. LHORELAX_SVELEC= .FALSE. LHORELAX_SVCHEM= .FALSE. LHORELAX_SVCHIC= .FALSE. @@ -388,6 +394,7 @@ IF(CCLOUD(1:3) == 'ICE') WRITE(UNIT=ILUSEG,NML=NAM_PARAM_ICE) IF(CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') & WRITE(UNIT=ILUSEG,NML=NAM_PARAM_C2R2) IF(CCLOUD == 'C3R5' ) WRITE(UNIT=ILUSEG,NML=NAM_PARAM_C1R3) +IF(CCLOUD == 'LIMA' ) WRITE(UNIT=ILUSEG,NML=NAM_PARAM_LIMA) IF(CELEC /= 'NONE') WRITE(UNIT=ILUSEG,NML=NAM_ELEC) IF(LSERIES) WRITE(UNIT=ILUSEG,NML=NAM_SERIES) IF(NMODEL_CLOUD/=NUNDEF) WRITE(UNIT=ILUSEG,NML=NAM_TURB_CLOUD) @@ -549,7 +556,12 @@ IF (NVERB >= 5) THEN END IF END IF ! - IF( CCLOUD == 'KHKO' ) THEN + IF( CCLOUD == 'LIMA' ) THEN + WRITE(UNIT=ILUOUT,FMT="('*********** LIMA SCHEME *********************')") + WRITE(UNIT=ILUOUT,NML=NAM_PARAM_LIMA) + END IF +! + IF( CCLOUD == 'KHKO' ) THEN WRITE(UNIT=ILUOUT,FMT="('*********** KHKO SCHEME *********************')") WRITE(UNIT=ILUOUT,NML=NAM_PARAM_C2R2) END IF @@ -581,6 +593,7 @@ IF (CPROGRAM /='MESONH') THEN !return to previous LHORELAX_ LHORELAX_SV(:) = GHORELAX_SV(:) LHORELAX_SVC2R2= GHORELAX_SVC2R2 LHORELAX_SVC1R3= GHORELAX_SVC1R3 + LHORELAX_SVLIMA= GHORELAX_SVLIMA LHORELAX_SVELEC= GHORELAX_SVELEC LHORELAX_SVCHEM= GHORELAX_SVCHEM LHORELAX_SVCHIC= GHORELAX_SVCHIC diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90 index 906d3aab2a46d671f3007d7ada2d1ddc42644ad6..d017f3d117b8f7e9e0c6547703c0ed1ce5845404 100644 --- a/src/MNH/write_lbn.f90 +++ b/src/MNH/write_lbn.f90 @@ -5,7 +5,8 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/write_lbn.f90,v $ $Revision: 1.2.2.4.2.2.2.2.10.1.2.2 $ +! masdev4_8 init 2008/06/30 12:13:35 !----------------------------------------------------------------- ! ###################### MODULE MODI_WRITE_LB_n @@ -75,6 +76,7 @@ END MODULE MODI_WRITE_LB_n !! M. Leriche 07/10 add NSV_* for ice phase chemistry !! P. Tulet 09/14 modif SALT !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! J.-P. Pinty 09/02/16 Add LIMA that is LBC for CCN and IFN !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -88,6 +90,8 @@ USE MODD_LUNIT_n USE MODD_PARAM_n USE MODD_TURB_n USE MODD_NSV +USE MODD_PARAM_LIMA +USE MODD_PARAM_n ! USE MODE_FMWRIT USE MODE_ll @@ -99,6 +103,8 @@ USE MODD_ICE_C1R3_DESCR, ONLY: C1R3NAMES USE MODD_CH_M9_n, ONLY: CNAMES, CICNAMES USE MODD_LG, ONLY: CLGNAMES USE MODD_ELEC_DESCR, ONLY: CELECNAMES +USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES +USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES USE MODD_CH_AEROSOL USE MODD_CH_AERO_n USE MODI_CH_AER_REALLFI_n @@ -142,6 +148,7 @@ INTEGER :: JK ! Integers, counters for dust modes INTEGER :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX INTEGER :: IMI ! Current model index +CHARACTER(LEN=2) :: INDICE ! to index CCN and IFN fields of LIMA scheme !------------------------------------------------------------------------------- ! !* 1. SOME INITIALIZATIONS @@ -388,6 +395,51 @@ IF (NSV >=1) THEN & IGRID,ILENCH,YCOMMENT,IRESP) END IF END DO +! +! LIMA: CCN and IFN scalar variables +! + IF (CCLOUD=='LIMA' ) THEN + DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1 + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + IF(NSIZELBXSV_ll /= 0) THEN + YRECFM='LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (/KG)' + ILENCH=LEN(YCOMMENT) + CALL FMWRIT_LB(HFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,& + & IGRID,ILENCH,YCOMMENT,IRESP) + END IF +! + IF(NSIZELBYSV_ll /= 0) THEN + YRECFM='LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV,' (/KG)' + ILENCH=LEN(YCOMMENT) + CALL FMWRIT_LB(HFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,& + & IGRID,ILENCH,YCOMMENT,IRESP) + END IF + END DO +! + DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1 + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + IF(NSIZELBXSV_ll /= 0) THEN + YRECFM='LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (/KG)' + ILENCH=LEN(YCOMMENT) + CALL FMWRIT_LB(HFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,& + & IGRID,ILENCH,YCOMMENT,IRESP) + END IF +! + IF(NSIZELBYSV_ll /= 0) THEN + YRECFM='LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV,' (/KG)' + ILENCH=LEN(YCOMMENT) + CALL FMWRIT_LB(HFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,& + & IGRID,ILENCH,YCOMMENT,IRESP) + END IF + END DO + END IF +! +! ELEC +! DO JSV = NSV_ELECBEG,NSV_ELECEND IF(NSIZELBXSV_ll /= 0) THEN YRECFM='LBX_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 0f3b963c864b585cd06ae51f9c62e514f064b68e..6f05480ab7f86723d8b20f9b4fb03bf0daa056ee 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/write_lfifm1_for_diag.f90,v $ $Revision: 1.3.2.5.2.4.2.3.2.3.2.4 $ ! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- !################################ @@ -139,6 +139,7 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG !! G.Delautier 2014 : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM !! C. Augros 2014 : new radar simulator (T matrice) !! D.Ricard 2015 : add THETAES + POVOES (LMOIST_ES=T) +!! Modification 01/2016 (JP Pinty) Add LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -181,8 +182,13 @@ USE MODD_ELEC_DESCR, ONLY : CELECNAMES USE MODD_RAIN_C2R2_KHKO_PARAM USE MODD_ICE_C1R3_PARAM USE MODD_PARAM_ICE, ONLY : LSEDIC -!USE MODD_PARAM_C2R2, ONLY : LSEDC -!USE MODD_PARAM_C1R3 +USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,& + LSCAV, LHHONI, LAERO_MASS, & + LLIMA_DIAG, & + NSPECIE, XMDIAM_IFN, XSIGMA_IFN, ZFRAC=>XFRAC,& + XR_MEAN_CCN, XLOGSIG_CCN +USE MODD_PARAM_LIMA_WARM, ONLY : CLIMA_WARM_CONC, CAERO_MASS +USE MODD_PARAM_LIMA_COLD, ONLY : CLIMA_COLD_CONC USE MODD_LG, ONLY : CLGNAMES USE MODD_PASPOL, ONLY : LPASPOL USE MODD_CONDSAMP, ONLY : LCONDSAMP @@ -316,6 +322,9 @@ INTEGER :: ILUOUT0 ! Logical unit number for output-listing CHARACTER(LEN=2) :: INDICE INTEGER :: I ! +! LIMA LIDAR +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZTMP1, ZTMP2, ZTMP3, ZTMP4 +! !------------------------------------------------------------------------------- ! !* 0. ARRAYS BOUNDS INITIALIZATION @@ -804,7 +813,7 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) ! IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR.& - CCLOUD == 'KHKO') THEN + CCLOUD == 'KHKO' .OR. CCLOUD == 'LIMA') THEN IF (SIZE(XINPRC) /= 0 ) THEN ZWORK21(:,:) = XINPRC(:,:)*3.6E6 YRECFM ='INPRC' @@ -821,7 +830,7 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) END IF END IF - IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5') THEN + IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'LIMA') THEN ZWORK21(:,:) = XINPRS(:,:)*3.6E6 YRECFM = 'INPRS' YCOMMENT = 'X_Y_INstantaneaous PRecipitation rate for Snow (MM/H)' @@ -926,7 +935,7 @@ IF (LVAR_PR ) THEN ZWORK31(:,:,:) = DZF(1,IKU,1,XZZ(:,:,:)) DO JK = IKB,IKE !* Calcul de qtot - IF (CCLOUD(1:3) == 'ICE' ) THEN + IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'LIMA') THEN ZWORK23(IIB:IIE,IJB:IJE) = XRT(IIB:IIE,IJB:IJE,JK,1) + & XRT(IIB:IIE,IJB:IJE,JK,2) + XRT(IIB:IIE,IJB:IJE,JK,3) + & XRT(IIB:IIE,IJB:IJE,JK,4) + XRT(IIB:IIE,IJB:IJE,JK,5) + & @@ -956,7 +965,7 @@ IF (LHU_FLX) THEN ZWORK35(:,:,:) = XRHODREF(:,:,:) * XRT(:,:,:,1) ZWORK31(:,:,:) = MXM(ZWORK35(:,:,:)) * XUT(:,:,:) ZWORK32(:,:,:) = MYM(ZWORK35(:,:,:)) * XVT(:,:,:) - IF (CCLOUD(1:3) == 'ICE' ) THEN + IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'LIMA') THEN ZWORK36(:,:,:) = ZWORK35(:,:,:) + XRHODREF(:,:,:) * (XRT(:,:,:,2) + & XRT(:,:,:,3) + XRT(:,:,:,4) + XRT(:,:,:,5) + XRT(:,:,:,6)) ZWORK33(:,:,:) = MXM(ZWORK36(:,:,:)) * XUT(:,:,:) @@ -993,7 +1002,7 @@ IF (LHU_FLX) THEN ENDIF ENDDO ENDDO - IF (CCLOUD(1:3) == 'ICE' ) THEN + IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'LIMA') THEN ZWORK23(:,:) = 0. ZWORK24(:,:) = 0. ZWORK26(:,:) = 0. @@ -1056,7 +1065,7 @@ IF (LHU_FLX) THEN ILENCH=LEN(YCOMMENT) CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK25*(-1),IGRID,ILENCH,YCOMMENT,IRESP) ! - IF (CCLOUD(1:3) == 'ICE' ) THEN + IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'LIMA') THEN ! composantes U et V du flux surfacique d'hydrométéores YRECFM='UM92' YCOMMENT='(kg / s / m²)' @@ -1099,7 +1108,7 @@ ENDIF ! !* Moist variables ! -IF (LVAR_MRW) THEN +IF (LVAR_MRW .OR. LLIMA_DIAG) THEN IF (NRR >=1) THEN IRR=0 ! Moist variables are written IGRID=1 ! individually in file @@ -1229,7 +1238,96 @@ IF(LVAR_MRW) THEN YCOMMENT,IRESP) END DO END IF - +! +! microphysical LIMA scheme scalar variables +! +IF (LLIMA_DIAG) THEN + DO JSV = NSV_LIMA_BEG,NSV_LIMA_END +! Nc + IF (JSV .EQ. NSV_LIMA_NC) THEN + YRECFM=TRIM(CLIMA_WARM_CONC(1))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! Nr + IF (JSV .EQ. NSV_LIMA_NR) THEN + YRECFM=TRIM(CLIMA_WARM_CONC(2))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! N CCN free + IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + YRECFM=TRIM(CLIMA_WARM_CONC(3))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! N CCN acti + IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) + YRECFM=TRIM(CLIMA_WARM_CONC(4))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! Scavenging + IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN + YRECFM=TRIM(CAERO_MASS(1))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (kg/cm^3)' + END IF +! Ni + IF (JSV .EQ. NSV_LIMA_NI) THEN + YRECFM=TRIM(CLIMA_COLD_CONC(1))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! N IFN free + IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + YRECFM=TRIM(CLIMA_COLD_CONC(2))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! N IFN nucl + IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) + YRECFM=TRIM(CLIMA_COLD_CONC(3))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! N IMM nucl + I = 0 + IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN + I = I + 1 + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + YRECFM=TRIM(CLIMA_COLD_CONC(4))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! Hom. freez. of CCN + IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN + YRECFM=TRIM(CLIMA_COLD_CONC(5))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/cm^3)' + END IF +! +! + ILENCH=LEN(YCOMMENT) + ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-6*XRHODREF(:,:,:) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & + YCOMMENT,IRESP) + END DO +! + IF (LUSERC) THEN + YRECFM= 'LWC' + YCOMMENT='X_Y_Z_LWC (g/m^3)' + ILENCH=LEN(YCOMMENT) + ZWORK31(:,:,:)=XRT(:,:,:,2)*1.E3*XRHODREF(:,:,:) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & + YCOMMENT,IRESP) + END IF +! + IF (LUSERI) THEN + YRECFM= 'IWC' + YCOMMENT='X_Y_Z_MRI (g/m^3)' + ILENCH=LEN(YCOMMENT) + ZWORK31(:,:,:)=XRT(:,:,:,4)*1.E3*XRHODREF(:,:,:) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & + YCOMMENT,IRESP) + END IF +! +END IF +! ! chemical scalar variables in gas phase PPBV IF (LCHEMDIAG) THEN DO JSV = NSV_CHGSBEG,NSV_CHGSEND @@ -2041,7 +2139,7 @@ IF (LTPZH .OR. LCOREF) THEN ZWORK33(:,:,:)=ZWORK31(:,:,:) ZWORK31(:,:,:)=(XMV/XMD)*ZWORK31(:,:,:)/(XPABST(:,:,:)-ZWORK31(:,:,:)) ZWORK32(:,:,:)=100.*XRT(:,:,:,1)/ZWORK31(:,:,:) - IF (CCLOUD(1:3) =='ICE' .OR. CCLOUD =='C3R5') THEN + IF (CCLOUD(1:3) =='ICE' .OR. CCLOUD =='C3R5' .OR. CCLOUD == 'LIMA') THEN WHERE ( ZTEMP(:,:,:)< XTT) ZWORK31(:,:,:) = EXP( XALPI - XBETAI/ZTEMP(:,:,:) & - XGAMI*ALOG(ZTEMP(:,:,:)) ) !saturation over ice @@ -2588,14 +2686,15 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN IF (LUSERR) THEN ZWORK21(:,:) = XACPRR(:,:)*1E3 END IF - IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' ) THEN + IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'LIMA') THEN ZWORK21(:,:) = ZWORK21(:,:) + (XACPRS(:,:) + XACPRG(:,:))*1E3 IF (SIZE(XINPRC) /= 0 ) & ZWORK21(:,:) = ZWORK21(:,:) + XACPRC(:,:) *1E3 IF (SIZE(XINPRH) /= 0 ) & ZWORK21(:,:) = ZWORK21(:,:) + XACPRH(:,:) *1E3 END IF - IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' ) THEN + IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' & + .OR. CCLOUD == 'LIMA' ) THEN IF (SIZE(XINPRC) /= 0 ) & ZWORK21(:,:) = ZWORK21(:,:) + XACPRC(:,:) *1E3 END IF @@ -2603,7 +2702,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN ZWORK21(:,:) = ZWORK21(:,:) + XPACCONV(:,:)*1E3 END IF IF (LUSERR .OR. CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. & - CDCONV /= 'NONE') THEN + CCLOUD == 'LIMA' .OR. CDCONV /= 'NONE') THEN CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) ELSE PRINT * ,'YOU WANT TO COMPUTE THE ACCUMULATED RAIN' @@ -2639,14 +2738,15 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN IF (LUSERR) THEN ZWORK21(:,:) = XINPRR(:,:)*3.6E6 END IF - IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' ) THEN + IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'LIMA') THEN ZWORK21(:,:) = ZWORK21(:,:) + (XINPRS(:,:) + XINPRG(:,:))*3.6E6 IF (SIZE(XINPRC) /= 0 ) & ZWORK21(:,:) = ZWORK21(:,:) + XINPRC(:,:) *3.6E6 IF (SIZE(XINPRH) /= 0 ) & ZWORK21(:,:) = ZWORK21(:,:) + XINPRH(:,:) *3.6E6 END IF - IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' ) THEN + IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' & + .OR. CCLOUD == 'LIMA' ) THEN IF (SIZE(XINPRC) /= 0 ) & ZWORK21(:,:) = ZWORK21(:,:) + XINPRC(:,:) *3.6E6 END IF @@ -2654,7 +2754,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN ZWORK21(:,:) = ZWORK21(:,:) + XPRCONV(:,:)*3.6E6 END IF IF (LUSERR .OR. CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. & - CDCONV /= 'NONE') THEN + CCLOUD == 'LIMA' .OR. CDCONV /= 'NONE') THEN CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) ELSE PRINT * ,'YOU WANT TO COMPUTE THE RAIN RATE' @@ -2827,13 +2927,23 @@ IF(LRADAR .AND. LUSERR) THEN ALLOCATE(XCIT(IIU,IJU,IKU)) XCIT(:,:,:)=800. CALL INI_RADAR('PLAT') + ELSE IF (CCLOUD=='LIMA') THEN + DEALLOCATE(XCIT) + ALLOCATE(XCIT(IIU,IJU,IKU)) + XCIT(:,:,:)=XSVT(:,:,:,NSV_LIMA_NI) + CALL INI_RADAR('PLAT') END IF ! IF (NVERSION_RAD == 1) THEN ! original version of radar diagnostics WRITE(ILUOUT0,*) 'radar diagnostics from RADAR_RAIN_ICE routine' + IF (CCLOUD=='LIMA') THEN + CALL RADAR_RAIN_ICE (XRT, XCIT, XRHODREF, ZTEMP, ZWORK31, ZWORK32, & + ZWORK33, ZWORK34,XSVT(:,:,:,NSV_LIMA_NR) ) + ELSE CALL RADAR_RAIN_ICE (XRT, XCIT, XRHODREF, ZTEMP, ZWORK31, ZWORK32, & ZWORK33, ZWORK34 ) + ENDIF ! YRECFM ='RARE' YCOMMENT ='X_Y_Z_RAdar REflectivity (dBZ)' @@ -2933,12 +3043,12 @@ IF(LRADAR .AND. LUSERR) THEN ALLOCATE(ZWORK42_BIS(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,INBOUT)) END IF ! -! IF (CCLOUD=='LIMA') THEN -! CALL RADAR_SIMULATOR(XUT,XVT,XWT,XRT,XSVT(:,:,:,NSV_LIMA_NI),XRHODREF,& -! ZTEMP,XPABST,ZWORK42,ZWORK43,XSVT(:,:,:,NSV_LIMA_NR)) -! ELSE ! ICE3 + IF (CCLOUD=='LIMA') THEN + CALL RADAR_SIMULATOR(XUT,XVT,XWT,XRT,XSVT(:,:,:,NSV_LIMA_NI),XRHODREF,& + ZTEMP,XPABST,ZWORK42,ZWORK43,XSVT(:,:,:,NSV_LIMA_NR)) + ELSE ! ICE3 CALL RADAR_SIMULATOR(XUT,XVT,XWT,XRT,XCIT,XRHODREF,ZTEMP,XPABSM,ZWORK42,ZWORK43) -! ENDIF + ENDIF ALLOCATE(YRAD(INBOUT)) YRAD(1:9)=(/"ZHH","ZDR","KDP","CSR","ZER","ZEI","ZES","ZEG","VRU"/) ICURR=10 @@ -3044,27 +3154,48 @@ IF (LLIDAR) THEN ! IF (LDUST) THEN IACCMODE=MIN(2,NMODE_DST) + ALLOCATE(ZTMP1(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), 1)) + ALLOCATE(ZTMP2(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), 1)) + ALLOCATE(ZTMP3(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), 1)) + ZTMP1(:,:,:,1)=ZN0_DST(:,:,:,IACCMODE) + ZTMP2(:,:,:,1)=ZRG_DST(:,:,:,IACCMODE) + ZTMP3(:,:,:,1)=ZSIG_DST(:,:,:,IACCMODE) SELECT CASE ( CCLOUD ) CASE('KESS','ICE2','ICE3','ICE4') CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & - XRT, ZWORK31, ZWORK32, & - PDSTC=ZN0_DST(:,:,:,IACCMODE), & - PDSTD=ZRG_DST(:,:,:,IACCMODE), & - PDSTS=ZSIG_DST(:,:,:,IACCMODE) ) + XRT, ZWORK31, ZWORK32, & + PDSTC=ZTMP1, & + PDSTD=ZTMP2, & + PDSTS=ZTMP3) CASE('C2R2') CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & - XRT, ZWORK31, ZWORK32, & - PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C2R2END), & - PDSTC=ZN0_DST(:,:,:,IACCMODE), & - PDSTD=ZRG_DST(:,:,:,IACCMODE), & - PDSTS=ZSIG_DST(:,:,:,IACCMODE) ) + XRT, ZWORK31, ZWORK32, & + PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C2R2END), & + PDSTC=ZTMP1, & + PDSTD=ZTMP2, & + PDSTS=ZTMP3) CASE('C3R5') CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & - XRT, ZWORK31, ZWORK32, & - PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C1R3END-1), & - PDSTC=ZN0_DST(:,:,:,IACCMODE), & - PDSTD=ZRG_DST(:,:,:,IACCMODE), & - PDSTS=ZSIG_DST(:,:,:,IACCMODE) ) + XRT, ZWORK31, ZWORK32, & + PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C1R3END-1), & + PDSTC=ZTMP1, & + PDSTD=ZTMP2, & + PDSTS=ZTMP3) + CASE('LIMA') +! PCT(2) = droplets (3)=drops (4)=ice crystals + ALLOCATE(ZTMP4(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), 4)) + ZTMP4(:,:,:,1)=0. + ZTMP4(:,:,:,2)=XSVT(:,:,:,NSV_LIMA_NC) + ZTMP4(:,:,:,3)=XSVT(:,:,:,NSV_LIMA_NR) + ZTMP4(:,:,:,4)=XSVT(:,:,:,NSV_LIMA_NI) +! + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR,& + XRT, ZWORK31, ZWORK32, & + PCT=ZTMP4, & + PDSTC=ZTMP1, & + PDSTD=ZTMP2, & + PDSTS=ZTMP3) +! END SELECT ELSE SELECT CASE ( CCLOUD ) @@ -3079,8 +3210,24 @@ IF (LLIDAR) THEN CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & XRT, ZWORK31, ZWORK32, & PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C1R3END-1)) + CASE('LIMA') +! PCT(2) = droplets (3)=drops (4)=ice crystals + ALLOCATE(ZTMP4(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), 4)) + ZTMP4(:,:,:,1)=0. + ZTMP4(:,:,:,2)=XSVT(:,:,:,NSV_LIMA_NC) + ZTMP4(:,:,:,3)=XSVT(:,:,:,NSV_LIMA_NR) + ZTMP4(:,:,:,4)=XSVT(:,:,:,NSV_LIMA_NI) +! + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR,& + XRT, ZWORK31, ZWORK32, & + PCT=ZTMP4) END SELECT ENDIF +! + IF( ALLOCATED(ZTMP1) ) DEALLOCATE(ZTMP1) + IF( ALLOCATED(ZTMP2) ) DEALLOCATE(ZTMP2) + IF( ALLOCATED(ZTMP3) ) DEALLOCATE(ZTMP3) + IF( ALLOCATED(ZTMP4) ) DEALLOCATE(ZTMP4) ! YRECFM ='LIDAR' YCOMMENT ='X_Y_Z_Normalized_Lidar_Profile (1/m/sr)' diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index bf3cba65a067be919f74a840f314193da417dd9e..376e3cf0d85ca129de4b7ebe14dfdcf6a1f5571f 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/write_lfin.f90,v $ $Revision: 1.2.2.4.2.4.2.8.2.4.2.5 $ ! masdev4_7 BUG1 2007/06/20 16:58:20 !----------------------------------------------------------------- ! ######################### @@ -161,6 +161,7 @@ END MODULE MODI_WRITE_LFIFM_n !! J.-P. Pinty Jan 2015 add LNOx and flash map diagnostics !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.escobar 04/08/2015 suit Pb with writ_lfin JSA increment , modif in ini_nsv to have good order initialization +!! Modification 01/2016 (JP Pinty) Add LIMA !! !------------------------------------------------------------------------------- ! @@ -222,6 +223,12 @@ USE MODD_PAST_FIELD_n USE MODD_ADV_n, ONLY: CUVW_ADV_SCHEME,XRTKEMS USE MODD_ELEC_FLASH ! +USE MODD_PARAM_LIMA , ONLY: NMOD_CCN, LSCAV, LAERO_MASS, & + NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM, LHHONI +USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS +USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES +USE MODD_LIMA_PRECIP_SCAVENGING_n +! USE MODE_FMWRIT USE MODE_ll USE MODE_IO_ll, ONLY: UPCASE,CLOSE_ll @@ -302,6 +309,9 @@ INTEGER :: INFO_ll INTEGER :: IKRAD INTEGER :: JI,JJ,JK ! loop index INTEGER :: IIU,IJU,IKU,IIB,IJB,IKB,IIE,IJE,IKE ! Arrays bounds +! +CHARACTER(LEN=2) :: INDICE +INTEGER :: I !------------------------------------------------------------------------------- ! !* 0. Initialization @@ -942,6 +952,106 @@ IF (NSV >=1) THEN YCOMMENT,IRESP) JSA=JSA+1 END DO +! +! microphysical LIMA variables +! + DO JSV = NSV_LIMA_BEG,NSV_LIMA_END +! Nc + IF (JSV .EQ. NSV_LIMA_NC) THEN + YRECFM=TRIM(CLIMA_WARM_NAMES(1))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! Nr + IF (JSV .EQ. NSV_LIMA_NR) THEN + YRECFM=TRIM(CLIMA_WARM_NAMES(2))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! N CCN free + IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + YRECFM=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! N CCN acti + IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) + YRECFM=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! Scavenging + IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN + YRECFM=TRIM(CAERO_MASS(1))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (kg/kg)' + END IF +! Ni + IF (JSV .EQ. NSV_LIMA_NI) THEN + YRECFM=TRIM(CLIMA_COLD_NAMES(1))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! N IFN free + IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + YRECFM=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! N IFN nucl + IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) + YRECFM=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! N IMM nucl + I = 0 + IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN + I = I + 1 + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + YRECFM=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! Hom. freez. of CCN + IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN + YRECFM=TRIM(CLIMA_COLD_NAMES(5))//'T' + WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)' + END IF +! +! + ILENCH=LEN(YCOMMENT) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & + YCOMMENT,IRESP) + JSA=JSA+1 + END DO +! + IF (LSCAV .AND. LAERO_MASS) THEN + IF (ASSOCIATED(XINPAP)) THEN + IF (SIZE(XINPAP) /= 0 ) THEN + ZWORK2D(:,:) = XINPAP(:,:) + YRECFM = 'INPAP' + YCOMMENT = 'X_Y_INstantaneous Precipitating Aerosol Rate (kg/m2/s)' + IGRID = 1 + ILENCH = LEN(YCOMMENT) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D,IGRID,ILENCH, & + YCOMMENT,IRESP) ! unit conversion + ZWORK2D(:,:) = XRHOLW*XINPRR(:,:)*XSVT(:,:,2,NSV_LIMA_SCAVMASS)/ & + max( 1.e-20,XRT(:,:,2,3) ) !~2=at ground level + YRECFM = 'INPBP' + YCOMMENT = 'X_Y_INstantaneous Precipitating Aerosol Rate (kg/m2/s)' + IGRID = 1 + ILENCH = LEN(YCOMMENT) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D,IGRID,ILENCH, & + YCOMMENT,IRESP) ! unit conversion +! + ZWORK2D(:,:) = XACPAP(:,:) + YRECFM = 'ACPAP' + YCOMMENT = 'X_Y_ACcumulated Precipitating Aerosol Rate (kg/m2)' + IGRID = 1 + ILENCH = LEN(YCOMMENT) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D,IGRID,ILENCH, & + YCOMMENT,IRESP) ! unit conversion + END IF + END IF + END IF +! +! ! electrical scalar variables DO JSV = NSV_ELECBEG,NSV_ELECEND YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T' diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90 index 4a03174e928ad1c9be806706caebffbd8a3c2504..8f48f7b68924b69bedc215a32005c326195b52ff 100644 --- a/src/MNH/write_profilern.f90 +++ b/src/MNH/write_profilern.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/write_profilern.f90,v $ $Revision: 1.2.2.3.2.1.2.2.10.2.2.2 $ ! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ########################### @@ -59,8 +59,7 @@ END MODULE MODI_WRITE_PROFILER_n !! MODIFICATIONS !! ------------- !! Original 15/02/2002 -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profiler +!! 2016 : G.DELAUTIER : LIMA !! !! -------------------------------------------------------------------------- ! @@ -89,6 +88,9 @@ USE MODE_DUST_PSD USE MODE_AERO_PSD ! USE MODI_WRITE_DIACHRO +USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS +USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES +USE MODD_PARAM_LIMA , ONLY: NINDICE_CCN_IMM,NMOD_CCN,NMOD_IFN,NMOD_IMM ! IMPLICIT NONE ! @@ -142,6 +144,8 @@ INTEGER :: JPROC ! loop counter INTEGER :: JRR ! loop counter INTEGER :: JSV ! loop counter INTEGER :: IKU, IK ! loop counter +CHARACTER(LEN=2) :: INDICE +INTEGER :: I ! !---------------------------------------------------------------------------- ! @@ -149,7 +153,7 @@ IF (TPROFILER%X(II)==XUNDEF) RETURN IF (TPROFILER%Y(II)==XUNDEF) RETURN IKU = SIZE(TPROFILER%W,2) !nbre de niveaux sur la verticale SIZE(TPROFILER%W,2) ! -IPROC = 27 + SIZE(TPROFILER%R,4) + SIZE(TPROFILER%SV,4) +IPROC = 22 + SIZE(TPROFILER%R,4) + SIZE(TPROFILER%SV,4) IF (LDIAG_IN_RUN) IPROC = IPROC + 13 IF (LORILAM) IPROC = IPROC + JPMODE*3 IF (LDUST) IPROC = IPROC + NMODE_DST*3 @@ -192,66 +196,6 @@ YCOMMENT (JPROC) = 'Radar reflectivity' ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%RARE(:,IK,II) ! JPROC = JPROC + 1 -YTITLE (JPROC) = 'SPEEDC' -YUNIT (JPROC) = 'm/s' -YCOMMENT (JPROC) = 'Cloud sedimentation speed' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDC(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'SPEEDR' -YUNIT (JPROC) = 'm/s' -YCOMMENT (JPROC) = 'Rain sedimentation speed' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDR(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'SPEEDS' -YUNIT (JPROC) = 'm/s' -YCOMMENT (JPROC) = 'Snow sedimentation speed' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDS(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'SPEEDG' -YUNIT (JPROC) = 'm/s' -YCOMMENT (JPROC) = 'Graupel sedimentation speed' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDG(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'SPEEDH' -YUNIT (JPROC) = 'm/s' -YCOMMENT (JPROC) = 'Hail sedimentation speed' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDH(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'INPRC3D' -YUNIT (JPROC) = 'mm/h' -YCOMMENT (JPROC) = 'Cloud sedimentation rate' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRC3D(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'INPRR3D' -YUNIT (JPROC) = 'mm/h' -YCOMMENT (JPROC) = 'Rain sedimentation rate' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRR3D(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'INPRS3D' -YUNIT (JPROC) = 'mm/h' -YCOMMENT (JPROC) = 'Snow sedimentation rate' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRS3D(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'INPRG3D' -YUNIT (JPROC) = 'mm/h' -YCOMMENT (JPROC) = 'Graupel sedimentation rate' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRG3D(:,IK,II) -! -JPROC = JPROC + 1 -YTITLE (JPROC) = 'INPRH3D' -YUNIT (JPROC) = 'mm/h' -YCOMMENT (JPROC) = 'Hail sedimentation rate' -ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRH3D(:,IK,II) -! -JPROC = JPROC + 1 YTITLE (JPROC) = 'P' YUNIT (JPROC) = 'Pascal' YCOMMENT (JPROC) = 'Pressure' @@ -477,6 +421,41 @@ IF (SIZE(TPROFILER%SV,4)>=1) THEN YCOMMENT (JPROC) = ' ' ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) END DO + ! LIMA variables + DO JSV=NSV_LIMA_BEG,NSV_LIMA_END + JPROC = JPROC+1 + YUNIT (JPROC) = '/kg' + YCOMMENT (JPROC) = ' ' + IF (JSV==NSV_LIMA_NC) YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(1))//'T' + IF (JSV==NSV_LIMA_NR) YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(2))//'T' + IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' + ENDIF + IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) + YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' + ENDIF + IF (JSV .EQ. NSV_LIMA_SCAVMASS) YTITLE(JPROC)=TRIM(CAERO_MASS(1))//'T' + IF (JSV==NSV_LIMA_NI) YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(1))//'T' + IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' + ENDIF + IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) + YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' + ENDIF + I = 0 + IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN + I = I + 1 + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + ENDIF + IF (JSV .EQ. NSV_LIMA_HOM_HAZE) YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(5))//'T' + + ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) + END DO ! electrical scalar variables DO JSV = NSV_ELECBEG,NSV_ELECEND JPROC = JPROC+1