diff --git a/docs/TODO b/docs/TODO index 6146bf71d91118dfc05759a0b16550c7e21f79d3..32bfd81be2f219b3dd33705f9dcc4b8557fde4ac 100644 --- a/docs/TODO +++ b/docs/TODO @@ -13,6 +13,7 @@ Dependencies: Clé de compilation REPRO48 ajoutée pour permettre de reproduire le cycle 48, elle: - contourne des corrections de bug - modifie l'organisation de calculs +- reproduit les résultats obtenus avant l'introduction de la fraction précipitante froide dans l'ajustement Cette clé devra être supprimée Merge pb: @@ -39,7 +40,6 @@ Etape 2: array syntax -> loop Pb identifiés à corriger plus tard: - deposition devrait être déplacée dans ice4_tendencies -- non reproduction en changeant le nombre de procs - avec les optimisations de Ryad, les tableaux 3D de precip passés à ice4_tendencies lorsque HSUBG_RC_RR_ACCR=='PRFR' ne sont pas utilisables puisque les K1, K2 et K3 sont relatifs à la boucle IMICRO et que les calculs faits en debut de routine ne diff --git a/src/arome/ext/aroini_micro.F90 b/src/arome/ext/aroini_micro.F90 new file mode 100644 index 0000000000000000000000000000000000000000..1b4f963a8722864f234cc045c57427d0ae211d12 --- /dev/null +++ b/src/arome/ext/aroini_micro.F90 @@ -0,0 +1,178 @@ +! ######spl +SUBROUTINE AROINI_MICRO(KULOUT,PTSTEP,LDWARM,CMICRO,KSPLITR,CCSEDIM,LDCRIAUTI,& + PCRIAUTI,PT0CRIAUTI,PCRIAUTC,PTSTEP_TS, CCSNOWRIMING, PMRSTEP, KMAXITER, & + LDFEEDBACKT, LDEVLIMIT, LDNULLWETG, LDWETGPOST, LDNULLWETH, LDWETHPOST, & + PFRACM90, LDCONVHG, CCSUBG_RC_RR_ACCR, CCSUBG_RR_EVAP, CCSUBG_PR_PDF, & + LDCRFLIMIT, CCFRAC_ICE_ADJUST, PSPLIT_MAXCFL,& + CCFRAC_ICE_SHALLOW_MF, LDSEDIM_AFTER,LDDEPOSC,PVDEPOSC ) + +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK +!**** *INI_MICRO* - Initialize common meso_NH MODD_ used in microphysics for AROME + +! Purpose. +! -------- +! Initialize +! MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM and MODD_PARAM_ICE +! parameters used in AROME microphysics + +!** Interface. +! ---------- +! *CALL* *INI_MICRO (KULOUT,KSTEP,KSPLITR) + +! Explicit arguments : +! -------------------- +! KULOUT : Logical unit for the output +! PTSTEP : Time step +! KSPLITR : Number of small time step interation for rain sedimentation +! LDWARM : value assigned to LWARM + +! Implicit arguments : +! -------------------- +! + +! Method. +! ------- +! See documentation + +! Externals. +! ---------- + +! Reference. +! ---------- +! Documentation AROME + +! Author. +! ------- +! Y. Seity + +! Modifications. +! -------------- +! Original : 03-12-12 +! 05-08-25 Kovacic added LDWARM +! Jan 2015 S. Riette: LFEEDBACKT, LEVLIMIT, LNULLWETG, LWETGPOST, CSNOWRIMING, +! XFRACM90, NMRSITER, XMRSTEP, LSIMULSG, XTSTEP_TS +! LNULLWETH, LWETHPOST added +! Oct 2016 S. Riette: LDCRFLIMIT, CCFRAC_ICE_ADJUST +! and CCFRAC_ICE_SHALLOW_MF added +! Dec 2020 Y. Seity : Add Fog deposition term +! ------------------------------------------------------------------ + +USE MODD_RAIN_ICE_DESCR +USE MODD_RAIN_ICE_PARAM +USE MODD_PARAM_ICE +USE MODD_PARAM_C1R3 + +USE MODI_INI_RAIN_ICE + +IMPLICIT NONE +! ----------------------------------------------------------------------- +! DUMMY INTEGER SCALARS +INTEGER, INTENT (IN) :: KULOUT +REAL, INTENT (IN) :: PTSTEP +LOGICAL, INTENT (IN) :: LDWARM +CHARACTER(4), INTENT (IN) :: CMICRO +CHARACTER(4), INTENT (IN) :: CCSEDIM +INTEGER, INTENT (OUT) :: KSPLITR +LOGICAL, INTENT (IN) :: LDCRIAUTI +REAL, INTENT (IN) :: PCRIAUTI +REAL, INTENT (IN) :: PT0CRIAUTI +REAL, INTENT (IN) :: PCRIAUTC +REAL, INTENT (IN) :: PTSTEP_TS +CHARACTER(4), INTENT (IN) :: CCSNOWRIMING +REAL, INTENT (IN) :: PMRSTEP +INTEGER, INTENT (IN) :: KMAXITER +LOGICAL, INTENT (IN) :: LDFEEDBACKT +LOGICAL, INTENT (IN) :: LDEVLIMIT +LOGICAL, INTENT (IN) :: LDNULLWETG +LOGICAL, INTENT (IN) :: LDWETGPOST +LOGICAL, INTENT (IN) :: LDNULLWETH +LOGICAL, INTENT (IN) :: LDWETHPOST +REAL, INTENT (IN) :: PFRACM90 +LOGICAL, INTENT (IN) :: LDCONVHG +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RC_RR_ACCR +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RR_EVAP +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_PR_PDF +LOGICAL, INTENT (IN) :: LDCRFLIMIT +CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_ADJUST +REAL, INTENT (IN) :: PSPLIT_MAXCFL +CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_SHALLOW_MF +LOGICAL, INTENT (IN) :: LDSEDIM_AFTER +LOGICAL, INTENT (IN) :: LDDEPOSC +REAL, INTENT(IN):: PVDEPOSC + +!----------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: ZCRI0, ZTCRI0 +REAL(KIND=JPRB) :: ZHOOK_HANDLE +! ----------------------------------------------------------------------- +! 1. Set implicit default values for MODD_PARAM_ICE + +IF (LHOOK) CALL DR_HOOK('AROINI_MICRO',0,ZHOOK_HANDLE) +CALL PARAM_ICE_ASSOCIATE() +! +LWARM=LDWARM +CPRISTINE_ICE='PLAT' +CPRISTINE_ICE_C1R3='PLAT' +CHEVRIMED_ICE_C1R3='GRAU' +CSEDIM=CCSEDIM +CSUBG_RC_RR_ACCR=CCSUBG_RC_RR_ACCR +CSUBG_RR_EVAP=CCSUBG_RR_EVAP +CSUBG_PR_PDF=CCSUBG_PR_PDF +LFEEDBACKT=LDFEEDBACKT ! When .TRUE. feed back on temperature is taken into account +LEVLIMIT=LDEVLIMIT ! When .TRUE. water vapour pressure is limited by saturation +LNULLWETG=LDNULLWETG ! When .TRUE. graupel wet growth is activated with null rate (to allow water shedding) +LWETGPOST=LDWETGPOST ! When .TRUE. graupel wet growth is activated with positive temperature (to allow water shedding) +LNULLWETH=LDNULLWETH ! Same as LNULLWETG but for hail +LWETHPOST=LDWETHPOST ! Same as LWETGPOST but for hail +CSNOWRIMING=CCSNOWRIMING ! OLD or M90 for Murakami 1990 formulation +XFRACM90=PFRACM90 ! Fraction used for the Murakami 1990 formulation +NMAXITER=KMAXITER ! Maximum number of iterations for mixing ratio or time splitting +XMRSTEP=PMRSTEP ! maximum mixing ratio step for mixing ratio splitting +LCONVHG=LDCONVHG ! TRUE to allow the conversion from hail to graupel +LCRFLIMIT=LDCRFLIMIT !True to limit rain contact freezing to possible heat exchange +CFRAC_ICE_ADJUST=CCFRAC_ICE_ADJUST !Choice of solid/liquid partition in adjustements +CFRAC_ICE_SHALLOW_MF=CCFRAC_ICE_SHALLOW_MF !Choice of solid/liquid partition in shallow_mf +XSPLIT_MAXCFL=PSPLIT_MAXCFL +LSEDIM_AFTER=LDSEDIM_AFTER ! sedimentation done before or after microphysics +! +XTSTEP_TS=PTSTEP_TS ! Approximative time step for time-splitting (0 for no time-splitting) +! +! 2. Set implicit default values for MODD_RAIN_ICE_DESCR +! et MODD_RAIN_ICE_PARAM + +CALL INI_RAIN_ICE (KULOUT, PTSTEP, 20.,KSPLITR,CMICRO) +!update values from namparar +LDEPOSC=LDDEPOSC +XVDEPOSC=PVDEPOSC +IF (LDCRIAUTI) THEN + + XCRIAUTI=PCRIAUTI + XCRIAUTC=PCRIAUTC + XT0CRIAUTI=PT0CRIAUTI + !second point to determine 10**(aT+b) law + ZTCRI0=-40.0 + ZCRI0=1.25E-6 + + XBCRIAUTI=-( LOG10(XCRIAUTI) - LOG10(ZCRI0)*PT0CRIAUTI/ZTCRI0 )& + *ZTCRI0/(XT0CRIAUTI-ZTCRI0) + XACRIAUTI=(LOG10(ZCRI0)-XBCRIAUTI)/ZTCRI0 + + ! 3. Write NSPLITR,updated CRIAUTI + + WRITE(UNIT=KULOUT,FMT='('' NSPLITR = '',I8.4)')KSPLITR + WRITE(UNIT=KULOUT,FMT='('' UPDATED VALUES FROM NAMPARAR :'')') + WRITE(UNIT=KULOUT,FMT='('' LCRIAUTI = '',L5)')LDCRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XCRIAUTI = '',E13.6)')XCRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XACRIAUTI = '',E13.6)')XACRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XBCRIAUTI = '',E13.6)')XBCRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XT0CRIAUTI = '',E13.6)')XT0CRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XCRIAUTC = '',E13.6)')XCRIAUTC + WRITE(UNIT=KULOUT,FMT='('' XVDEPOSC = '',E13.6)')XVDEPOSC + WRITE(UNIT=KULOUT,FMT='('' LDEPOSC = '',L5)')LDEPOSC +ENDIF +! ----------------------------------------------------------------------- + +IF (LHOOK) CALL DR_HOOK('AROINI_MICRO',1,ZHOOK_HANDLE) +RETURN +END SUBROUTINE AROINI_MICRO diff --git a/src/arome/micro/ini_rain_ice.F90 b/src/arome/micro/ini_rain_ice.F90 index 406588a4a2733cf129f060c9cf8f4f3deb2397ad..8be837892a224c87c437878a0f0a42207113580a 100644 --- a/src/arome/micro/ini_rain_ice.F90 +++ b/src/arome/micro/ini_rain_ice.F90 @@ -170,6 +170,9 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE !------------------------------------------------------------------------------- IF (LHOOK) CALL DR_HOOK('INI_RAIN_ICE',0,ZHOOK_HANDLE) ! +IF(.NOT.ASSOCIATED(XCEXVT)) CALL RAIN_ICE_DESCR_ASSOCIATE() +IF(.NOT.ASSOCIATED(XFSEDC)) CALL RAIN_ICE_PARAM_ASSOCIATE() +! ! !* 0. FUNCTION STATEMENTS ! ------------------- @@ -432,7 +435,6 @@ ZRHO00 = 101325.*(1.+ZRV)/(XRD+ZRV*XRV)/293.15 ! !* 4.2 Constants for sedimentation ! -IF(.NOT.ASSOCIATED(XFSEDC)) CALL RAIN_ICE_PARAM_INIT() XFSEDC(1) = GAMMA(XNUC+(XDC+3.)/XALPHAC)/GAMMA(XNUC+3./XALPHAC)* & (ZRHO00)**XCEXVT XFSEDC(2) = GAMMA(XNUC2+(XDC+3.)/XALPHAC2)/GAMMA(XNUC2+3./XALPHAC2)* & diff --git a/src/arome/micro/modd_param_ice.F90 b/src/arome/micro/modd_param_ice.F90 index e07a2001e2a2f4da573a12a80c8ede09baa9bc53..f35cb367d83d9111f84944b5d3e2bce93c747928 100644 --- a/src/arome/micro/modd_param_ice.F90 +++ b/src/arome/micro/modd_param_ice.F90 @@ -81,38 +81,73 @@ END TYPE PARAM_ICE_t ! TYPE(PARAM_ICE_t), SAVE, TARGET :: PARAM_ICE ! -LOGICAL, POINTER :: LWARM => PARAM_ICE%LWARM, & - LSEDIC => PARAM_ICE%LSEDIC, & - LDEPOSC => PARAM_ICE%LDEPOSC, & - LFEEDBACKT => PARAM_ICE%LFEEDBACKT, & - LEVLIMIT => PARAM_ICE%LEVLIMIT, & - LNULLWETG => PARAM_ICE%LNULLWETG, & - LWETGPOST => PARAM_ICE%LWETGPOST, & - LNULLWETH => PARAM_ICE%LNULLWETH, & - LWETHPOST => PARAM_ICE%LWETHPOST, & - LCONVHG => PARAM_ICE%LCONVHG, & - LCRFLIMIT => PARAM_ICE%LCRFLIMIT, & - LADJ_BEFORE => PARAM_ICE%LADJ_BEFORE, & - LADJ_AFTER => PARAM_ICE%LADJ_AFTER, & - LSEDIM_AFTER => PARAM_ICE%LSEDIM_AFTER +LOGICAL, POINTER :: LWARM => NULL(), & + LSEDIC => NULL(), & + LDEPOSC => NULL(), & + LFEEDBACKT => NULL(), & + LEVLIMIT => NULL(), & + LNULLWETG => NULL(), & + LWETGPOST => NULL(), & + LNULLWETH => NULL(), & + LWETHPOST => NULL(), & + LCONVHG => NULL(), & + LCRFLIMIT => NULL(), & + LADJ_BEFORE => NULL(), & + LADJ_AFTER => NULL(), & + LSEDIM_AFTER => NULL() -REAL, POINTER :: XVDEPOSC => PARAM_ICE%XVDEPOSC, & - XFRACM90 => PARAM_ICE%XFRACM90, & - XMRSTEP => PARAM_ICE%XMRSTEP, & - XTSTEP_TS => PARAM_ICE%XTSTEP_TS, & - XSPLIT_MAXCFL => PARAM_ICE%XSPLIT_MAXCFL +REAL, POINTER :: XVDEPOSC => NULL(), & + XFRACM90 => NULL(), & + XMRSTEP => NULL(), & + XTSTEP_TS => NULL(), & + XSPLIT_MAXCFL => NULL() -INTEGER, POINTER :: NMAXITER => PARAM_ICE%NMAXITER +INTEGER, POINTER :: NMAXITER => NULL() -CHARACTER(LEN=1), POINTER :: CFRAC_ICE_ADJUST => PARAM_ICE%CFRAC_ICE_ADJUST -CHARACTER(LEN=1), POINTER :: CFRAC_ICE_SHALLOW_MF => PARAM_ICE%CFRAC_ICE_SHALLOW_MF -CHARACTER(LEN=4), POINTER :: CPRISTINE_ICE => PARAM_ICE%CPRISTINE_ICE -CHARACTER(LEN=4), POINTER :: CSEDIM => PARAM_ICE%CSEDIM -CHARACTER(LEN=4), POINTER :: CSNOWRIMING => PARAM_ICE%CSNOWRIMING -CHARACTER(LEN=80),POINTER :: CSUBG_RC_RR_ACCR => PARAM_ICE%CSUBG_RC_RR_ACCR -CHARACTER(LEN=80),POINTER :: CSUBG_RR_EVAP => PARAM_ICE%CSUBG_RR_EVAP -CHARACTER(LEN=80),POINTER :: CSUBG_PR_PDF => PARAM_ICE%CSUBG_PR_PDF +CHARACTER(LEN=1), POINTER :: CFRAC_ICE_ADJUST => NULL() +CHARACTER(LEN=1), POINTER :: CFRAC_ICE_SHALLOW_MF => NULL() +CHARACTER(LEN=4), POINTER :: CPRISTINE_ICE => NULL() +CHARACTER(LEN=4), POINTER :: CSEDIM => NULL() +CHARACTER(LEN=4), POINTER :: CSNOWRIMING => NULL() +CHARACTER(LEN=80),POINTER :: CSUBG_RC_RR_ACCR => NULL() +CHARACTER(LEN=80),POINTER :: CSUBG_RR_EVAP => NULL() +CHARACTER(LEN=80),POINTER :: CSUBG_PR_PDF => NULL() ! !------------------------------------------------------------------------------- ! +CONTAINS +SUBROUTINE PARAM_ICE_ASSOCIATE() + IMPLICIT NONE + LWARM => PARAM_ICE%LWARM + LSEDIC => PARAM_ICE%LSEDIC + LDEPOSC => PARAM_ICE%LDEPOSC + LFEEDBACKT => PARAM_ICE%LFEEDBACKT + LEVLIMIT => PARAM_ICE%LEVLIMIT + LNULLWETG => PARAM_ICE%LNULLWETG + LWETGPOST => PARAM_ICE%LWETGPOST + LNULLWETH => PARAM_ICE%LNULLWETH + LWETHPOST => PARAM_ICE%LWETHPOST + LCONVHG => PARAM_ICE%LCONVHG + LCRFLIMIT => PARAM_ICE%LCRFLIMIT + LADJ_BEFORE => PARAM_ICE%LADJ_BEFORE + LADJ_AFTER => PARAM_ICE%LADJ_AFTER + LSEDIM_AFTER => PARAM_ICE%LSEDIM_AFTER + ! + XVDEPOSC => PARAM_ICE%XVDEPOSC + XFRACM90 => PARAM_ICE%XFRACM90 + XMRSTEP => PARAM_ICE%XMRSTEP + XTSTEP_TS => PARAM_ICE%XTSTEP_TS + XSPLIT_MAXCFL => PARAM_ICE%XSPLIT_MAXCFL + ! + NMAXITER => PARAM_ICE%NMAXITER + ! + CFRAC_ICE_ADJUST => PARAM_ICE%CFRAC_ICE_ADJUST + CFRAC_ICE_SHALLOW_MF => PARAM_ICE%CFRAC_ICE_SHALLOW_MF + CPRISTINE_ICE => PARAM_ICE%CPRISTINE_ICE + CSEDIM => PARAM_ICE%CSEDIM + CSNOWRIMING => PARAM_ICE%CSNOWRIMING + CSUBG_RC_RR_ACCR => PARAM_ICE%CSUBG_RC_RR_ACCR + CSUBG_RR_EVAP => PARAM_ICE%CSUBG_RR_EVAP + CSUBG_PR_PDF => PARAM_ICE%CSUBG_PR_PDF +END SUBROUTINE PARAM_ICE_ASSOCIATE END MODULE MODD_PARAM_ICE diff --git a/src/common/aux/ini_cst.F90 b/src/common/aux/ini_cst.F90 index 69b4c998b2605848b8f631a3209fe07b321fdb9c..c51e7149fe22b573f6e8ee1e3d048c155d86c059 100644 --- a/src/common/aux/ini_cst.F90 +++ b/src/common/aux/ini_cst.F90 @@ -64,13 +64,14 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! IMPLICIT NONE ! +REAL(KIND=JPRB) :: ZHOOK_HANDLE !------------------------------------------------------------------------------- +IF (LHOOK) CALL DR_HOOK('INI_CST',0,ZHOOK_HANDLE) +CALL CST_ASSOCIATE() ! !* 1. FUNDAMENTAL CONSTANTS ! --------------------- ! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -IF (LHOOK) CALL DR_HOOK('INI_CST',0,ZHOOK_HANDLE) XPI = 2.*ASIN(1.) XKARMAN = 0.4 XLIGHTSPEED = 299792458. diff --git a/src/common/aux/modd_cst.F90 b/src/common/aux/modd_cst.F90 index 2c09737ee088de855eb929f8bace2fca6f8acb52..7e647e4e64c6f958991a5e49f1800fab3ade77f2 100644 --- a/src/common/aux/modd_cst.F90 +++ b/src/common/aux/modd_cst.F90 @@ -121,55 +121,121 @@ END TYPE CST_t TYPE(CST_t), TARGET, SAVE :: CST -REAL, POINTER :: XPI=>CST%XPI -REAL, POINTER :: XDAY=>CST%XDAY, XSIYEA=>CST%XSIYEA, XSIDAY=>CST%XSIDAY -REAL, POINTER :: XKARMAN=>CST%XKARMAN -REAL, POINTER :: XLIGHTSPEED=>CST%XLIGHTSPEED -REAL, POINTER :: XPLANCK=>CST%XPLANCK -REAL, POINTER :: XBOLTZ=>CST%XBOLTZ -REAL, POINTER :: XAVOGADRO=>CST%XAVOGADRO -REAL, POINTER :: XRADIUS=>CST%XRADIUS, XOMEGA=>CST%XOMEGA -REAL, POINTER :: XG=>CST%XG -REAL, POINTER :: XP00=>CST%XP00 -REAL, POINTER :: XP00OCEAN=>CST%XP00OCEAN -REAL, POINTER :: XRH00OCEAN=>CST%XRH00OCEAN -REAL, POINTER :: XSTEFAN=>CST%XSTEFAN, XI0=>CST%XI0 -REAL, POINTER :: XMD=>CST%XMD, XMV=>CST%XMV -REAL, POINTER :: XRD=>CST%XRD, XRV=>CST%XRV -REAL, POINTER :: XEPSILO=>CST%XEPSILO -REAL, POINTER :: XCPD=>CST%XCPD, XCPV=>CST%XCPV -REAL, POINTER :: XRHOLW=>CST%XRHOLW -REAL, POINTER :: XCL=>CST%XCL, XCI=>CST%XCI -REAL, POINTER :: XTT=>CST%XTT -REAL, POINTER :: XLVTT=>CST%XLVTT -REAL, POINTER :: XLSTT=>CST%XLSTT -REAL, POINTER :: XLMTT=>CST%XLMTT -REAL, POINTER :: XESTT=>CST%XESTT -REAL, POINTER :: XALPW=>CST%XALPW, XBETAW=>CST%XBETAW, XGAMW=>CST%XGAMW -REAL, POINTER :: XALPI=>CST%XALPI, XBETAI=>CST%XBETAI, XGAMI=>CST%XGAMI -REAL, POINTER :: XCONDI=>CST%XCONDI -REAL, POINTER :: XALPHAOC=>CST%XALPHAOC -REAL, POINTER :: XBETAOC=>CST%XBETAOC -REAL, POINTER :: XTH00=>CST%XTH00 -REAL, POINTER :: XTH00OCEAN=>CST%XTH00OCEAN -REAL, POINTER :: XSA00OCEAN=>CST%XSA00OCEAN -REAL, POINTER :: XROC=>CST%XROC -REAL, POINTER :: XD1=>CST%XD1 -REAL, POINTER :: XD2=>CST%XD2 -REAL, POINTER :: XRHOLI=>CST%XRHOLI -INTEGER, POINTER :: NDAYSEC=>CST%NDAYSEC -REAL, POINTER :: RDSRV=>CST%RDSRV -REAL, POINTER :: RDSCPD=>CST%RDSCPD -REAL, POINTER :: RINVXP00=>CST%RINVXP00 -REAL, POINTER :: XMNH_TINY=>CST%XMNH_TINY -REAL, POINTER :: XMNH_TINY_12=>CST%XMNH_TINY_12 -REAL, POINTER :: XMNH_EPSILON=>CST%XMNH_EPSILON -REAL, POINTER :: XMNH_HUGE=>CST%XMNH_HUGE -REAL, POINTER :: XMNH_HUGE_12_LOG=>CST%XMNH_HUGE_12_LOG -REAL, POINTER :: XEPS_DT=>CST%XEPS_DT -REAL, POINTER :: XRES_FLAT_CART=>CST%XRES_FLAT_CART -REAL, POINTER :: XRES_OTHER=>CST%XRES_OTHER -REAL, POINTER :: XRES_PREP=>CST%XRES_PREP +REAL, POINTER :: XPI=>NULL() +REAL, POINTER :: XDAY=>NULL(), XSIYEA=>NULL(), XSIDAY=>NULL() +REAL, POINTER :: XKARMAN=>NULL() +REAL, POINTER :: XLIGHTSPEED=>NULL() +REAL, POINTER :: XPLANCK=>NULL() +REAL, POINTER :: XBOLTZ=>NULL() +REAL, POINTER :: XAVOGADRO=>NULL() +REAL, POINTER :: XRADIUS=>NULL(), XOMEGA=>NULL() +REAL, POINTER :: XG=>NULL() +REAL, POINTER :: XP00=>NULL() +REAL, POINTER :: XP00OCEAN=>NULL() +REAL, POINTER :: XRH00OCEAN=>NULL() +REAL, POINTER :: XSTEFAN=>NULL(), XI0=>NULL() +REAL, POINTER :: XMD=>NULL(), XMV=>NULL() +REAL, POINTER :: XRD=>NULL(), XRV=>NULL() +REAL, POINTER :: XEPSILO=>NULL() +REAL, POINTER :: XCPD=>NULL(), XCPV=>NULL() +REAL, POINTER :: XRHOLW=>NULL() +REAL, POINTER :: XCL=>NULL(), XCI=>NULL() +REAL, POINTER :: XTT=>NULL() +REAL, POINTER :: XLVTT=>NULL() +REAL, POINTER :: XLSTT=>NULL() +REAL, POINTER :: XLMTT=>NULL() +REAL, POINTER :: XESTT=>NULL() +REAL, POINTER :: XALPW=>NULL(), XBETAW=>NULL(), XGAMW=>NULL() +REAL, POINTER :: XALPI=>NULL(), XBETAI=>NULL(), XGAMI=>NULL() +REAL, POINTER :: XCONDI=>NULL() +REAL, POINTER :: XALPHAOC=>NULL() +REAL, POINTER :: XBETAOC=>NULL() +REAL, POINTER :: XTH00=>NULL() +REAL, POINTER :: XTH00OCEAN=>NULL() +REAL, POINTER :: XSA00OCEAN=>NULL() +REAL, POINTER :: XROC=>NULL() +REAL, POINTER :: XD1=>NULL() +REAL, POINTER :: XD2=>NULL() +REAL, POINTER :: XRHOLI=>NULL() +INTEGER, POINTER :: NDAYSEC=>NULL() +REAL, POINTER :: RDSRV=>NULL() +REAL, POINTER :: RDSCPD=>NULL() +REAL, POINTER :: RINVXP00=>NULL() +REAL, POINTER :: XMNH_TINY=>NULL() +REAL, POINTER :: XMNH_TINY_12=>NULL() +REAL, POINTER :: XMNH_EPSILON=>NULL() +REAL, POINTER :: XMNH_HUGE=>NULL() +REAL, POINTER :: XMNH_HUGE_12_LOG=>NULL() +REAL, POINTER :: XEPS_DT=>NULL() +REAL, POINTER :: XRES_FLAT_CART=>NULL() +REAL, POINTER :: XRES_OTHER=>NULL() +REAL, POINTER :: XRES_PREP=>NULL() +! +CONTAINS +SUBROUTINE CST_ASSOCIATE() + IMPLICIT NONE + XPI=>CST%XPI + XDAY=>CST%XDAY + XSIYEA=>CST%XSIYEA + XSIDAY=>CST%XSIDAY + XKARMAN=>CST%XKARMAN + XLIGHTSPEED=>CST%XLIGHTSPEED + XPLANCK=>CST%XPLANCK + XBOLTZ=>CST%XBOLTZ + XAVOGADRO=>CST%XAVOGADRO + XRADIUS=>CST%XRADIUS + XOMEGA=>CST%XOMEGA + XG=>CST%XG + XP00=>CST%XP00 + XP00OCEAN=>CST%XP00OCEAN + XRH00OCEAN=>CST%XRH00OCEAN + XSTEFAN=>CST%XSTEFAN + XI0=>CST%XI0 + XMD=>CST%XMD + XMV=>CST%XMV + XRD=>CST%XRD + XRV=>CST%XRV + XEPSILO=>CST%XEPSILO + XCPD=>CST%XCPD + XCPV=>CST%XCPV + XRHOLW=>CST%XRHOLW + XCL=>CST%XCL + XCI=>CST%XCI + XTT=>CST%XTT + XLVTT=>CST%XLVTT + XLSTT=>CST%XLSTT + XLMTT=>CST%XLMTT + XESTT=>CST%XESTT + XALPW=>CST%XALPW + XBETAW=>CST%XBETAW + XGAMW=>CST%XGAMW + XALPI=>CST%XALPI + XBETAI=>CST%XBETAI + XGAMI=>CST%XGAMI + XCONDI=>CST%XCONDI + XALPHAOC=>CST%XALPHAOC + XBETAOC=>CST%XBETAOC + XTH00=>CST%XTH00 + XTH00OCEAN=>CST%XTH00OCEAN + XSA00OCEAN=>CST%XSA00OCEAN + XROC=>CST%XROC + XD1=>CST%XD1 + XD2=>CST%XD2 + XRHOLI=>CST%XRHOLI + NDAYSEC=>CST%NDAYSEC + RDSRV=>CST%RDSRV + RDSCPD=>CST%RDSCPD + RINVXP00=>CST%RINVXP00 + XMNH_TINY=>CST%XMNH_TINY + XMNH_TINY_12=>CST%XMNH_TINY_12 + XMNH_EPSILON=>CST%XMNH_EPSILON + XMNH_HUGE=>CST%XMNH_HUGE + XMNH_HUGE_12_LOG=>CST%XMNH_HUGE_12_LOG + XEPS_DT=>CST%XEPS_DT + XRES_FLAT_CART=>CST%XRES_FLAT_CART + XRES_OTHER=>CST%XRES_OTHER + XRES_PREP=>CST%XRES_PREP +END SUBROUTINE CST_ASSOCIATE ! END MODULE MODD_CST diff --git a/src/common/micro/ini_neb.F90 b/src/common/micro/ini_neb.F90 index ba090da315cdb70773c13331d2428e50e4178dd7..0a36664e96fdd44e8fd287d9bd48bb39af288a15 100644 --- a/src/common/micro/ini_neb.F90 +++ b/src/common/micro/ini_neb.F90 @@ -53,6 +53,9 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE ! 1. SETTING THE NUMERICAL VALUES ! IF (LHOOK) CALL DR_HOOK('INI_NEB',0,ZHOOK_HANDLE) +! +CALL NEB_ASSOCIATE() +! !Freezing between 0 and -20. Other possibilities are 0/-40 or -5/-25 XTMAXMIX = 273.16 XTMINMIX = 253.16 diff --git a/src/common/micro/modd_neb.F90 b/src/common/micro/modd_neb.F90 index 03fa2ecc04c72fc2572ed7c30a7c5cc7dd06afb5..ebca8d22354bb6009ad39ce5a5ba7abe5440485b 100644 --- a/src/common/micro/modd_neb.F90 +++ b/src/common/micro/modd_neb.F90 @@ -43,7 +43,14 @@ END TYPE NEB_t TYPE(NEB_t), SAVE, TARGET :: NEB -REAL, POINTER :: XTMINMIX=>NEB%XTMINMIX, XTMAXMIX=>NEB%XTMAXMIX +REAL, POINTER :: XTMINMIX=>NULL(), & + XTMAXMIX=>NULL() ! +CONTAINS +SUBROUTINE NEB_ASSOCIATE() + IMPLICIT NONE + XTMINMIX => NEB%XTMINMIX + XTMAXMIX => NEB%XTMAXMIX +END SUBROUTINE NEB_ASSOCIATE ! END MODULE MODD_NEB diff --git a/src/common/micro/modd_rain_ice_descr.F90 b/src/common/micro/modd_rain_ice_descr.F90 index 2d73bbdb51e893f3f05393f1772a377b723c482a..d46a9c1b8779e2f6a7c24499b5d758d4e088cc33 100644 --- a/src/common/micro/modd_rain_ice_descr.F90 +++ b/src/common/micro/modd_rain_ice_descr.F90 @@ -83,86 +83,168 @@ END TYPE RAIN_ICE_DESCR_t TYPE(RAIN_ICE_DESCR_t), SAVE, TARGET :: RAIN_ICE_DESCR ! REAL,DIMENSION(:),POINTER :: XLBC=>NULL(), XRTMIN=>NULL() -REAL, POINTER :: XCEXVT => RAIN_ICE_DESCR%XCEXVT ,& - XAC => RAIN_ICE_DESCR%XAC ,& - XBC => RAIN_ICE_DESCR%XBC ,& - XCC => RAIN_ICE_DESCR%XCC ,& - XDC => RAIN_ICE_DESCR%XDC ,& - XAR => RAIN_ICE_DESCR%XAR ,& - XBR => RAIN_ICE_DESCR%XBR ,& - XCR => RAIN_ICE_DESCR%XCR ,& - XDR => RAIN_ICE_DESCR%XDR ,& - XCCR => RAIN_ICE_DESCR%XCCR ,& - XF0R => RAIN_ICE_DESCR%XF0R ,& - XF1R => RAIN_ICE_DESCR%XF1R ,& - XC1R => RAIN_ICE_DESCR%XC1R ,& - XAI => RAIN_ICE_DESCR%XAI ,& - XBI => RAIN_ICE_DESCR%XBI ,& - XC_I => RAIN_ICE_DESCR%XC_I ,& - XDI => RAIN_ICE_DESCR%XDI ,& - XF0I => RAIN_ICE_DESCR%XF0I ,& - XF2I => RAIN_ICE_DESCR%XF2I ,& - XC1I => RAIN_ICE_DESCR%XC1I ,& - XAS => RAIN_ICE_DESCR%XAS ,& - XBS => RAIN_ICE_DESCR%XBS ,& - XCS => RAIN_ICE_DESCR%XCS ,& - XDS => RAIN_ICE_DESCR%XDS ,& - XCCS => RAIN_ICE_DESCR%XCCS ,& - XCXS => RAIN_ICE_DESCR%XCXS ,& - XF0S => RAIN_ICE_DESCR%XF0S ,& - XF1S => RAIN_ICE_DESCR%XF1S ,& - XC1S => RAIN_ICE_DESCR%XC1S ,& - XAG => RAIN_ICE_DESCR%XAG ,& - XBG => RAIN_ICE_DESCR%XBG ,& - XCG => RAIN_ICE_DESCR%XCG ,& - XDG => RAIN_ICE_DESCR%XDG ,& - XCCG => RAIN_ICE_DESCR%XCCG ,& - XCXG => RAIN_ICE_DESCR%XCXG ,& - XF0G => RAIN_ICE_DESCR%XF0G ,& - XF1G => RAIN_ICE_DESCR%XF1G ,& - XC1G => RAIN_ICE_DESCR%XC1G ,& - XAH => RAIN_ICE_DESCR%XAH ,& - XBH => RAIN_ICE_DESCR%XBH ,& - XCH => RAIN_ICE_DESCR%XCH ,& - XDH => RAIN_ICE_DESCR%XDH ,& - XCCH => RAIN_ICE_DESCR%XCCH ,& - XCXH => RAIN_ICE_DESCR%XCXH ,& - XF0H => RAIN_ICE_DESCR%XF0H ,& - XF1H => RAIN_ICE_DESCR%XF1H ,& - XC1H => RAIN_ICE_DESCR%XC1H ,& - XALPHAC => RAIN_ICE_DESCR%XALPHAC ,& - XNUC => RAIN_ICE_DESCR%XNUC ,& - XALPHAC2 => RAIN_ICE_DESCR%XALPHAC2 ,& - XNUC2 => RAIN_ICE_DESCR%XNUC2 ,& - XLBEXC => RAIN_ICE_DESCR%XLBEXC ,& - XALPHAR => RAIN_ICE_DESCR%XALPHAR ,& - XNUR => RAIN_ICE_DESCR%XNUR ,& - XLBEXR => RAIN_ICE_DESCR%XLBEXR ,& - XLBR => RAIN_ICE_DESCR%XLBR ,& - XALPHAI => RAIN_ICE_DESCR%XALPHAI ,& - XNUI => RAIN_ICE_DESCR%XNUI ,& - XLBEXI => RAIN_ICE_DESCR%XLBEXI ,& - XLBI => RAIN_ICE_DESCR%XLBI ,& - XALPHAS => RAIN_ICE_DESCR%XALPHAS ,& - XNUS => RAIN_ICE_DESCR%XNUS ,& - XLBEXS => RAIN_ICE_DESCR%XLBEXS ,& - XLBS => RAIN_ICE_DESCR%XLBS ,& - XALPHAG => RAIN_ICE_DESCR%XALPHAG ,& - XNUG => RAIN_ICE_DESCR%XNUG ,& - XLBEXG => RAIN_ICE_DESCR%XLBEXG ,& - XLBG => RAIN_ICE_DESCR%XLBG ,& - XALPHAH => RAIN_ICE_DESCR%XALPHAH ,& - XNUH => RAIN_ICE_DESCR%XNUH ,& - XLBEXH => RAIN_ICE_DESCR%XLBEXH ,& - XLBH => RAIN_ICE_DESCR%XLBH ,& - XLBDAR_MAX => RAIN_ICE_DESCR%XLBDAR_MAX ,& - XLBDAS_MAX => RAIN_ICE_DESCR%XLBDAS_MAX ,& - XLBDAG_MAX => RAIN_ICE_DESCR%XLBDAG_MAX ,& - XCONC_SEA => RAIN_ICE_DESCR%XCONC_SEA ,& - XCONC_LAND => RAIN_ICE_DESCR%XCONC_LAND ,& - XCONC_URBAN => RAIN_ICE_DESCR%XCONC_URBAN +REAL, POINTER :: XCEXVT => NULL(), & + XAC => NULL(), & + XBC => NULL(), & + XCC => NULL(), & + XDC => NULL(), & + XAR => NULL(), & + XBR => NULL(), & + XCR => NULL(), & + XDR => NULL(), & + XCCR => NULL(), & + XF0R => NULL(), & + XF1R => NULL(), & + XC1R => NULL(), & + XAI => NULL(), & + XBI => NULL(), & + XC_I => NULL(), & + XDI => NULL(), & + XF0I => NULL(), & + XF2I => NULL(), & + XC1I => NULL(), & + XAS => NULL(), & + XBS => NULL(), & + XCS => NULL(), & + XDS => NULL(), & + XCCS => NULL(), & + XCXS => NULL(), & + XF0S => NULL(), & + XF1S => NULL(), & + XC1S => NULL(), & + XAG => NULL(), & + XBG => NULL(), & + XCG => NULL(), & + XDG => NULL(), & + XCCG => NULL(), & + XCXG => NULL(), & + XF0G => NULL(), & + XF1G => NULL(), & + XC1G => NULL(), & + XAH => NULL(), & + XBH => NULL(), & + XCH => NULL(), & + XDH => NULL(), & + XCCH => NULL(), & + XCXH => NULL(), & + XF0H => NULL(), & + XF1H => NULL(), & + XC1H => NULL(), & + XALPHAC => NULL(), & + XNUC => NULL(), & + XALPHAC2 => NULL(), & + XNUC2 => NULL(), & + XLBEXC => NULL(), & + XALPHAR => NULL(), & + XNUR => NULL(), & + XLBEXR => NULL(), & + XLBR => NULL(), & + XALPHAI => NULL(), & + XNUI => NULL(), & + XLBEXI => NULL(), & + XLBI => NULL(), & + XALPHAS => NULL(), & + XNUS => NULL(), & + XLBEXS => NULL(), & + XLBS => NULL(), & + XALPHAG => NULL(), & + XNUG => NULL(), & + XLBEXG => NULL(), & + XLBG => NULL(), & + XALPHAH => NULL(), & + XNUH => NULL(), & + XLBEXH => NULL(), & + XLBH => NULL(), & + XLBDAR_MAX => NULL(), & + XLBDAS_MAX => NULL(), & + XLBDAG_MAX => NULL(), & + XCONC_SEA => NULL(), & + XCONC_LAND => NULL(), & + XCONC_URBAN => NULL() ! CONTAINS +SUBROUTINE RAIN_ICE_DESCR_ASSOCIATE() + IMPLICIT NONE + XCEXVT => RAIN_ICE_DESCR%XCEXVT + XAC => RAIN_ICE_DESCR%XAC + XBC => RAIN_ICE_DESCR%XBC + XCC => RAIN_ICE_DESCR%XCC + XDC => RAIN_ICE_DESCR%XDC + XAR => RAIN_ICE_DESCR%XAR + XBR => RAIN_ICE_DESCR%XBR + XCR => RAIN_ICE_DESCR%XCR + XDR => RAIN_ICE_DESCR%XDR + XCCR => RAIN_ICE_DESCR%XCCR + XF0R => RAIN_ICE_DESCR%XF0R + XF1R => RAIN_ICE_DESCR%XF1R + XC1R => RAIN_ICE_DESCR%XC1R + XAI => RAIN_ICE_DESCR%XAI + XBI => RAIN_ICE_DESCR%XBI + XC_I => RAIN_ICE_DESCR%XC_I + XDI => RAIN_ICE_DESCR%XDI + XF0I => RAIN_ICE_DESCR%XF0I + XF2I => RAIN_ICE_DESCR%XF2I + XC1I => RAIN_ICE_DESCR%XC1I + XAS => RAIN_ICE_DESCR%XAS + XBS => RAIN_ICE_DESCR%XBS + XCS => RAIN_ICE_DESCR%XCS + XDS => RAIN_ICE_DESCR%XDS + XCCS => RAIN_ICE_DESCR%XCCS + XCXS => RAIN_ICE_DESCR%XCXS + XF0S => RAIN_ICE_DESCR%XF0S + XF1S => RAIN_ICE_DESCR%XF1S + XC1S => RAIN_ICE_DESCR%XC1S + XAG => RAIN_ICE_DESCR%XAG + XBG => RAIN_ICE_DESCR%XBG + XCG => RAIN_ICE_DESCR%XCG + XDG => RAIN_ICE_DESCR%XDG + XCCG => RAIN_ICE_DESCR%XCCG + XCXG => RAIN_ICE_DESCR%XCXG + XF0G => RAIN_ICE_DESCR%XF0G + XF1G => RAIN_ICE_DESCR%XF1G + XC1G => RAIN_ICE_DESCR%XC1G + XAH => RAIN_ICE_DESCR%XAH + XBH => RAIN_ICE_DESCR%XBH + XCH => RAIN_ICE_DESCR%XCH + XDH => RAIN_ICE_DESCR%XDH + XCCH => RAIN_ICE_DESCR%XCCH + XCXH => RAIN_ICE_DESCR%XCXH + XF0H => RAIN_ICE_DESCR%XF0H + XF1H => RAIN_ICE_DESCR%XF1H + XC1H => RAIN_ICE_DESCR%XC1H + XALPHAC => RAIN_ICE_DESCR%XALPHAC + XNUC => RAIN_ICE_DESCR%XNUC + XALPHAC2 => RAIN_ICE_DESCR%XALPHAC2 + XNUC2 => RAIN_ICE_DESCR%XNUC2 + XLBEXC => RAIN_ICE_DESCR%XLBEXC + XALPHAR => RAIN_ICE_DESCR%XALPHAR + XNUR => RAIN_ICE_DESCR%XNUR + XLBEXR => RAIN_ICE_DESCR%XLBEXR + XLBR => RAIN_ICE_DESCR%XLBR + XALPHAI => RAIN_ICE_DESCR%XALPHAI + XNUI => RAIN_ICE_DESCR%XNUI + XLBEXI => RAIN_ICE_DESCR%XLBEXI + XLBI => RAIN_ICE_DESCR%XLBI + XALPHAS => RAIN_ICE_DESCR%XALPHAS + XNUS => RAIN_ICE_DESCR%XNUS + XLBEXS => RAIN_ICE_DESCR%XLBEXS + XLBS => RAIN_ICE_DESCR%XLBS + XALPHAG => RAIN_ICE_DESCR%XALPHAG + XNUG => RAIN_ICE_DESCR%XNUG + XLBEXG => RAIN_ICE_DESCR%XLBEXG + XLBG => RAIN_ICE_DESCR%XLBG + XALPHAH => RAIN_ICE_DESCR%XALPHAH + XNUH => RAIN_ICE_DESCR%XNUH + XLBEXH => RAIN_ICE_DESCR%XLBEXH + XLBH => RAIN_ICE_DESCR%XLBH + XLBDAR_MAX => RAIN_ICE_DESCR%XLBDAR_MAX + XLBDAS_MAX => RAIN_ICE_DESCR%XLBDAS_MAX + XLBDAG_MAX => RAIN_ICE_DESCR%XLBDAG_MAX + XCONC_SEA => RAIN_ICE_DESCR%XCONC_SEA + XCONC_LAND => RAIN_ICE_DESCR%XCONC_LAND + XCONC_URBAN => RAIN_ICE_DESCR%XCONC_URBAN +END SUBROUTINE +! SUBROUTINE RAIN_ICE_DESCR_ALLOCATE(KRR) IMPLICIT NONE INTEGER, INTENT(IN) :: KRR diff --git a/src/common/micro/modd_rain_ice_param.F90 b/src/common/micro/modd_rain_ice_param.F90 index 1705d9bb6a7be29feaa79623deba0c24f7d65100..efb3c5520bc45f614732bb412fdd366933a63d90 100644 --- a/src/common/micro/modd_rain_ice_param.F90 +++ b/src/common/micro/modd_rain_ice_param.F90 @@ -188,171 +188,171 @@ TYPE(RAIN_ICE_PARAM_t), SAVE, TARGET :: RAIN_ICE_PARAM ! REAL,DIMENSION(:),POINTER :: XFSEDC => NULL() -REAL,POINTER :: XFSEDR => RAIN_ICE_PARAM%XFSEDR, & - XEXSEDR => RAIN_ICE_PARAM%XEXSEDR, & - XFSEDI => RAIN_ICE_PARAM%XFSEDI, & - XEXCSEDI => RAIN_ICE_PARAM%XEXCSEDI, & - XEXRSEDI => RAIN_ICE_PARAM%XEXRSEDI, & - XFSEDS => RAIN_ICE_PARAM%XFSEDS, & - XEXSEDS => RAIN_ICE_PARAM%XEXSEDS, & - XFSEDG => RAIN_ICE_PARAM%XFSEDG, & - XEXSEDG => RAIN_ICE_PARAM%XEXSEDG, & - XNU10 => RAIN_ICE_PARAM%XNU10, & - XALPHA1 => RAIN_ICE_PARAM%XALPHA1, & - XBETA1 => RAIN_ICE_PARAM%XBETA1, & - XNU20 => RAIN_ICE_PARAM%XNU20, & - XALPHA2 => RAIN_ICE_PARAM%XALPHA2, & - XBETA2 => RAIN_ICE_PARAM%XBETA2, & - XMNU0 => RAIN_ICE_PARAM%XMNU0, & - XALPHA3 => RAIN_ICE_PARAM%XALPHA3, & - XBETA3 => RAIN_ICE_PARAM%XBETA3, & - XHON => RAIN_ICE_PARAM%XHON, & - XSCFAC => RAIN_ICE_PARAM%XSCFAC, & - X0EVAR => RAIN_ICE_PARAM%X0EVAR, & - X1EVAR => RAIN_ICE_PARAM%X1EVAR, & - XEX0EVAR => RAIN_ICE_PARAM%XEX0EVAR, & - XEX1EVAR => RAIN_ICE_PARAM%XEX1EVAR, & - X0DEPI => RAIN_ICE_PARAM%X0DEPI, & - X2DEPI => RAIN_ICE_PARAM%X2DEPI, & - X0DEPS => RAIN_ICE_PARAM%X0DEPS, & - X1DEPS => RAIN_ICE_PARAM%X1DEPS, & - XEX0DEPS => RAIN_ICE_PARAM%XEX0DEPS, & - XEX1DEPS => RAIN_ICE_PARAM%XEX1DEPS, & - X0DEPG => RAIN_ICE_PARAM%X0DEPG, & - X1DEPG => RAIN_ICE_PARAM%X1DEPG, & - XEX0DEPG => RAIN_ICE_PARAM%XEX0DEPG, & - XEX1DEPG => RAIN_ICE_PARAM%XEX1DEPG, & - XTIMAUTI => RAIN_ICE_PARAM%XTIMAUTI, & - XTEXAUTI => RAIN_ICE_PARAM%XTEXAUTI, & - XCRIAUTI => RAIN_ICE_PARAM%XCRIAUTI, & - XT0CRIAUTI => RAIN_ICE_PARAM%XT0CRIAUTI, & - XACRIAUTI => RAIN_ICE_PARAM%XACRIAUTI, & - XBCRIAUTI => RAIN_ICE_PARAM%XBCRIAUTI, & - XCOLIS => RAIN_ICE_PARAM%XCOLIS, & - XCOLEXIS => RAIN_ICE_PARAM%XCOLEXIS, & - XFIAGGS => RAIN_ICE_PARAM%XFIAGGS, & - XEXIAGGS => RAIN_ICE_PARAM%XEXIAGGS, & - XTIMAUTC => RAIN_ICE_PARAM%XTIMAUTC, & - XCRIAUTC => RAIN_ICE_PARAM%XCRIAUTC, & - XFCACCR => RAIN_ICE_PARAM%XFCACCR, & - XEXCACCR => RAIN_ICE_PARAM%XEXCACCR, & - XDCSLIM => RAIN_ICE_PARAM%XDCSLIM, & - XCOLCS => RAIN_ICE_PARAM%XCOLCS, & - XEXCRIMSS => RAIN_ICE_PARAM%XEXCRIMSS, & - XCRIMSS => RAIN_ICE_PARAM%XCRIMSS, & - XEXCRIMSG => RAIN_ICE_PARAM%XEXCRIMSG, & - XCRIMSG => RAIN_ICE_PARAM%XCRIMSG, & - XEXSRIMCG => RAIN_ICE_PARAM%XEXSRIMCG, & - XSRIMCG => RAIN_ICE_PARAM%XSRIMCG, & - XEXSRIMCG2 => RAIN_ICE_PARAM%XEXSRIMCG2, & - XSRIMCG2 => RAIN_ICE_PARAM%XSRIMCG2, & - XSRIMCG3 => RAIN_ICE_PARAM%XSRIMCG3, & - XGAMINC_BOUND_MIN => RAIN_ICE_PARAM%XGAMINC_BOUND_MIN, & - XGAMINC_BOUND_MAX => RAIN_ICE_PARAM%XGAMINC_BOUND_MAX, & - XRIMINTP1 => RAIN_ICE_PARAM%XRIMINTP1, & - XRIMINTP2 => RAIN_ICE_PARAM%XRIMINTP2, & - XFRACCSS => RAIN_ICE_PARAM%XFRACCSS, & - XLBRACCS1 => RAIN_ICE_PARAM%XLBRACCS1, & - XLBRACCS2 => RAIN_ICE_PARAM%XLBRACCS2, & - XLBRACCS3 => RAIN_ICE_PARAM%XLBRACCS3, & - XFSACCRG => RAIN_ICE_PARAM%XFSACCRG, & - XLBSACCR1 => RAIN_ICE_PARAM%XLBSACCR1, & - XLBSACCR2 => RAIN_ICE_PARAM%XLBSACCR2, & - XLBSACCR3 => RAIN_ICE_PARAM%XLBSACCR3, & - XACCLBDAS_MIN => RAIN_ICE_PARAM%XACCLBDAS_MIN, & - XACCLBDAS_MAX => RAIN_ICE_PARAM%XACCLBDAS_MAX, & - XACCLBDAR_MIN => RAIN_ICE_PARAM%XACCLBDAR_MIN, & - XACCLBDAR_MAX => RAIN_ICE_PARAM%XACCLBDAR_MAX, & - XACCINTP1S => RAIN_ICE_PARAM%XACCINTP1S, & - XACCINTP2S => RAIN_ICE_PARAM%XACCINTP2S, & - XACCINTP1R => RAIN_ICE_PARAM%XACCINTP1R, & - XACCINTP2R => RAIN_ICE_PARAM%XACCINTP2R, & - XFSCVMG => RAIN_ICE_PARAM%XFSCVMG, & - XCOLIR => RAIN_ICE_PARAM%XCOLIR, & - XEXRCFRI => RAIN_ICE_PARAM%XEXRCFRI, & - XRCFRI => RAIN_ICE_PARAM%XRCFRI, & - XEXICFRR => RAIN_ICE_PARAM%XEXICFRR, & - XICFRR => RAIN_ICE_PARAM%XICFRR, & - XFCDRYG => RAIN_ICE_PARAM%XFCDRYG, & - XCOLIG => RAIN_ICE_PARAM%XCOLIG, & - XCOLEXIG => RAIN_ICE_PARAM%XCOLEXIG, & - XFIDRYG => RAIN_ICE_PARAM%XFIDRYG, & - XFIDRYG2 => RAIN_ICE_PARAM%XFIDRYG2, & - XEXFIDRYG => RAIN_ICE_PARAM%XEXFIDRYG, & - XCOLSG => RAIN_ICE_PARAM%XCOLSG, & - XCOLEXSG => RAIN_ICE_PARAM%XCOLEXSG, & - XFSDRYG => RAIN_ICE_PARAM%XFSDRYG, & - XLBSDRYG1 => RAIN_ICE_PARAM%XLBSDRYG1, & - XLBSDRYG2 => RAIN_ICE_PARAM%XLBSDRYG2, & - XLBSDRYG3 => RAIN_ICE_PARAM%XLBSDRYG3, & - XFRDRYG => RAIN_ICE_PARAM%XFRDRYG, & - XLBRDRYG1 => RAIN_ICE_PARAM%XLBRDRYG1, & - XLBRDRYG2 => RAIN_ICE_PARAM%XLBRDRYG2, & - XLBRDRYG3 => RAIN_ICE_PARAM%XLBRDRYG3, & - XDRYLBDAR_MIN => RAIN_ICE_PARAM%XDRYLBDAR_MIN, & - XDRYLBDAR_MAX => RAIN_ICE_PARAM%XDRYLBDAR_MAX, & - XDRYLBDAS_MIN => RAIN_ICE_PARAM%XDRYLBDAS_MIN, & - XDRYLBDAS_MAX => RAIN_ICE_PARAM%XDRYLBDAS_MAX, & - XDRYLBDAG_MIN => RAIN_ICE_PARAM%XDRYLBDAG_MIN, & - XDRYLBDAG_MAX => RAIN_ICE_PARAM%XDRYLBDAG_MAX, & - XDRYINTP1R => RAIN_ICE_PARAM%XDRYINTP1R, & - XDRYINTP2R => RAIN_ICE_PARAM%XDRYINTP2R, & - XDRYINTP1S => RAIN_ICE_PARAM%XDRYINTP1S, & - XDRYINTP2S => RAIN_ICE_PARAM%XDRYINTP2S, & - XDRYINTP1G => RAIN_ICE_PARAM%XDRYINTP1G, & - XDRYINTP2G => RAIN_ICE_PARAM%XDRYINTP2G, & - XFSEDH => RAIN_ICE_PARAM%XFSEDH, & - XEXSEDH => RAIN_ICE_PARAM%XEXSEDH, & - X0DEPH => RAIN_ICE_PARAM%X0DEPH, & - X1DEPH => RAIN_ICE_PARAM%X1DEPH, & - XEX0DEPH => RAIN_ICE_PARAM%XEX0DEPH, & - XEX1DEPH => RAIN_ICE_PARAM%XEX1DEPH, & - XCOLIH => RAIN_ICE_PARAM%XCOLIH, & - XCOLEXIH => RAIN_ICE_PARAM%XCOLEXIH, & - XCOLSH => RAIN_ICE_PARAM%XCOLSH, & - XCOLEXSH => RAIN_ICE_PARAM%XCOLEXSH, & - XCOLGH => RAIN_ICE_PARAM%XCOLGH, & - XCOLEXGH => RAIN_ICE_PARAM%XCOLEXGH, & - XFWETH => RAIN_ICE_PARAM%XFWETH, & - XFSWETH => RAIN_ICE_PARAM%XFSWETH, & - XLBSWETH1 => RAIN_ICE_PARAM%XLBSWETH1, & - XLBSWETH2 => RAIN_ICE_PARAM%XLBSWETH2, & - XLBSWETH3 => RAIN_ICE_PARAM%XLBSWETH3, & - XFGWETH => RAIN_ICE_PARAM%XFGWETH, & - XLBGWETH1 => RAIN_ICE_PARAM%XLBGWETH1, & - XLBGWETH2 => RAIN_ICE_PARAM%XLBGWETH2, & - XLBGWETH3 => RAIN_ICE_PARAM%XLBGWETH3, & - XFRWETH => RAIN_ICE_PARAM%XFRWETH, & - XLBRWETH1 => RAIN_ICE_PARAM%XLBRWETH1, & - XLBRWETH2 => RAIN_ICE_PARAM%XLBRWETH2, & - XLBRWETH3 => RAIN_ICE_PARAM%XLBRWETH3, & - XWETLBDAS_MIN => RAIN_ICE_PARAM%XWETLBDAS_MIN, & - XWETLBDAS_MAX => RAIN_ICE_PARAM%XWETLBDAS_MAX, & - XWETLBDAG_MIN => RAIN_ICE_PARAM%XWETLBDAG_MIN, & - XWETLBDAG_MAX => RAIN_ICE_PARAM%XWETLBDAG_MAX, & - XWETLBDAR_MIN => RAIN_ICE_PARAM%XWETLBDAR_MIN, & - XWETLBDAR_MAX => RAIN_ICE_PARAM%XWETLBDAR_MAX, & - XWETLBDAH_MIN => RAIN_ICE_PARAM%XWETLBDAH_MIN, & - XWETLBDAH_MAX => RAIN_ICE_PARAM%XWETLBDAH_MAX, & - XWETINTP1S => RAIN_ICE_PARAM%XWETINTP1S, & - XWETINTP2S => RAIN_ICE_PARAM%XWETINTP2S, & - XWETINTP1G => RAIN_ICE_PARAM%XWETINTP1G, & - XWETINTP2G => RAIN_ICE_PARAM%XWETINTP2G, & - XWETINTP1R => RAIN_ICE_PARAM%XWETINTP1R, & - XWETINTP2R => RAIN_ICE_PARAM%XWETINTP2R, & - XWETINTP1H => RAIN_ICE_PARAM%XWETINTP1H, & - XWETINTP2H => RAIN_ICE_PARAM%XWETINTP2H +REAL,POINTER :: XFSEDR => NULL(), & + XEXSEDR => NULL(), & + XFSEDI => NULL(), & + XEXCSEDI => NULL(), & + XEXRSEDI => NULL(), & + XFSEDS => NULL(), & + XEXSEDS => NULL(), & + XFSEDG => NULL(), & + XEXSEDG => NULL(), & + XNU10 => NULL(), & + XALPHA1 => NULL(), & + XBETA1 => NULL(), & + XNU20 => NULL(), & + XALPHA2 => NULL(), & + XBETA2 => NULL(), & + XMNU0 => NULL(), & + XALPHA3 => NULL(), & + XBETA3 => NULL(), & + XHON => NULL(), & + XSCFAC => NULL(), & + X0EVAR => NULL(), & + X1EVAR => NULL(), & + XEX0EVAR => NULL(), & + XEX1EVAR => NULL(), & + X0DEPI => NULL(), & + X2DEPI => NULL(), & + X0DEPS => NULL(), & + X1DEPS => NULL(), & + XEX0DEPS => NULL(), & + XEX1DEPS => NULL(), & + X0DEPG => NULL(), & + X1DEPG => NULL(), & + XEX0DEPG => NULL(), & + XEX1DEPG => NULL(), & + XTIMAUTI => NULL(), & + XTEXAUTI => NULL(), & + XCRIAUTI => NULL(), & + XT0CRIAUTI => NULL(), & + XACRIAUTI => NULL(), & + XBCRIAUTI => NULL(), & + XCOLIS => NULL(), & + XCOLEXIS => NULL(), & + XFIAGGS => NULL(), & + XEXIAGGS => NULL(), & + XTIMAUTC => NULL(), & + XCRIAUTC => NULL(), & + XFCACCR => NULL(), & + XEXCACCR => NULL(), & + XDCSLIM => NULL(), & + XCOLCS => NULL(), & + XEXCRIMSS => NULL(), & + XCRIMSS => NULL(), & + XEXCRIMSG => NULL(), & + XCRIMSG => NULL(), & + XEXSRIMCG => NULL(), & + XSRIMCG => NULL(), & + XEXSRIMCG2 => NULL(), & + XSRIMCG2 => NULL(), & + XSRIMCG3 => NULL(), & + XGAMINC_BOUND_MIN => NULL(), & + XGAMINC_BOUND_MAX => NULL(), & + XRIMINTP1 => NULL(), & + XRIMINTP2 => NULL(), & + XFRACCSS => NULL(), & + XLBRACCS1 => NULL(), & + XLBRACCS2 => NULL(), & + XLBRACCS3 => NULL(), & + XFSACCRG => NULL(), & + XLBSACCR1 => NULL(), & + XLBSACCR2 => NULL(), & + XLBSACCR3 => NULL(), & + XACCLBDAS_MIN => NULL(), & + XACCLBDAS_MAX => NULL(), & + XACCLBDAR_MIN => NULL(), & + XACCLBDAR_MAX => NULL(), & + XACCINTP1S => NULL(), & + XACCINTP2S => NULL(), & + XACCINTP1R => NULL(), & + XACCINTP2R => NULL(), & + XFSCVMG => NULL(), & + XCOLIR => NULL(), & + XEXRCFRI => NULL(), & + XRCFRI => NULL(), & + XEXICFRR => NULL(), & + XICFRR => NULL(), & + XFCDRYG => NULL(), & + XCOLIG => NULL(), & + XCOLEXIG => NULL(), & + XFIDRYG => NULL(), & + XFIDRYG2 => NULL(), & + XEXFIDRYG => NULL(), & + XCOLSG => NULL(), & + XCOLEXSG => NULL(), & + XFSDRYG => NULL(), & + XLBSDRYG1 => NULL(), & + XLBSDRYG2 => NULL(), & + XLBSDRYG3 => NULL(), & + XFRDRYG => NULL(), & + XLBRDRYG1 => NULL(), & + XLBRDRYG2 => NULL(), & + XLBRDRYG3 => NULL(), & + XDRYLBDAR_MIN => NULL(), & + XDRYLBDAR_MAX => NULL(), & + XDRYLBDAS_MIN => NULL(), & + XDRYLBDAS_MAX => NULL(), & + XDRYLBDAG_MIN => NULL(), & + XDRYLBDAG_MAX => NULL(), & + XDRYINTP1R => NULL(), & + XDRYINTP2R => NULL(), & + XDRYINTP1S => NULL(), & + XDRYINTP2S => NULL(), & + XDRYINTP1G => NULL(), & + XDRYINTP2G => NULL(), & + XFSEDH => NULL(), & + XEXSEDH => NULL(), & + X0DEPH => NULL(), & + X1DEPH => NULL(), & + XEX0DEPH => NULL(), & + XEX1DEPH => NULL(), & + XCOLIH => NULL(), & + XCOLEXIH => NULL(), & + XCOLSH => NULL(), & + XCOLEXSH => NULL(), & + XCOLGH => NULL(), & + XCOLEXGH => NULL(), & + XFWETH => NULL(), & + XFSWETH => NULL(), & + XLBSWETH1 => NULL(), & + XLBSWETH2 => NULL(), & + XLBSWETH3 => NULL(), & + XFGWETH => NULL(), & + XLBGWETH1 => NULL(), & + XLBGWETH2 => NULL(), & + XLBGWETH3 => NULL(), & + XFRWETH => NULL(), & + XLBRWETH1 => NULL(), & + XLBRWETH2 => NULL(), & + XLBRWETH3 => NULL(), & + XWETLBDAS_MIN => NULL(), & + XWETLBDAS_MAX => NULL(), & + XWETLBDAG_MIN => NULL(), & + XWETLBDAG_MAX => NULL(), & + XWETLBDAR_MIN => NULL(), & + XWETLBDAR_MAX => NULL(), & + XWETLBDAH_MIN => NULL(), & + XWETLBDAH_MAX => NULL(), & + XWETINTP1S => NULL(), & + XWETINTP2S => NULL(), & + XWETINTP1G => NULL(), & + XWETINTP2G => NULL(), & + XWETINTP1R => NULL(), & + XWETINTP2R => NULL(), & + XWETINTP1H => NULL(), & + XWETINTP2H => NULL() -INTEGER, POINTER :: NGAMINC => RAIN_ICE_PARAM%NGAMINC, & - NACCLBDAS => RAIN_ICE_PARAM%NACCLBDAS, & - NACCLBDAR => RAIN_ICE_PARAM%NACCLBDAR, & - NDRYLBDAR => RAIN_ICE_PARAM%NDRYLBDAR, & - NDRYLBDAS => RAIN_ICE_PARAM%NDRYLBDAS, & - NDRYLBDAG => RAIN_ICE_PARAM%NDRYLBDAG, & - NWETLBDAS => RAIN_ICE_PARAM%NWETLBDAS, & - NWETLBDAG => RAIN_ICE_PARAM%NWETLBDAG, & - NWETLBDAR => RAIN_ICE_PARAM%NWETLBDAR, & - NWETLBDAH => RAIN_ICE_PARAM%NWETLBDAH +INTEGER, POINTER :: NGAMINC => NULL(), & + NACCLBDAS => NULL(), & + NACCLBDAR => NULL(), & + NDRYLBDAR => NULL(), & + NDRYLBDAS => NULL(), & + NDRYLBDAG => NULL(), & + NWETLBDAS => NULL(), & + NWETLBDAG => NULL(), & + NWETLBDAR => NULL(), & + NWETLBDAH => NULL() REAL, DIMENSION(:), POINTER :: XGAMINC_RIM1 => NULL(), & XGAMINC_RIM2 => NULL(), & @@ -367,10 +367,177 @@ REAL,DIMENSION(:,:), POINTER :: XKER_RACCSS => NULL(), & XKER_GWETH => NULL(), & XKER_RWETH => NULL() CONTAINS -SUBROUTINE RAIN_ICE_PARAM_INIT() +SUBROUTINE RAIN_ICE_PARAM_ASSOCIATE() IMPLICIT NONE XFSEDC => RAIN_ICE_PARAM%XFSEDC -END SUBROUTINE RAIN_ICE_PARAM_INIT + ! + XFSEDR => RAIN_ICE_PARAM%XFSEDR + XEXSEDR => RAIN_ICE_PARAM%XEXSEDR + XFSEDI => RAIN_ICE_PARAM%XFSEDI + XEXCSEDI => RAIN_ICE_PARAM%XEXCSEDI + XEXRSEDI => RAIN_ICE_PARAM%XEXRSEDI + XFSEDS => RAIN_ICE_PARAM%XFSEDS + XEXSEDS => RAIN_ICE_PARAM%XEXSEDS + XFSEDG => RAIN_ICE_PARAM%XFSEDG + XEXSEDG => RAIN_ICE_PARAM%XEXSEDG + XNU10 => RAIN_ICE_PARAM%XNU10 + XALPHA1 => RAIN_ICE_PARAM%XALPHA1 + XBETA1 => RAIN_ICE_PARAM%XBETA1 + XNU20 => RAIN_ICE_PARAM%XNU20 + XALPHA2 => RAIN_ICE_PARAM%XALPHA2 + XBETA2 => RAIN_ICE_PARAM%XBETA2 + XMNU0 => RAIN_ICE_PARAM%XMNU0 + XALPHA3 => RAIN_ICE_PARAM%XALPHA3 + XBETA3 => RAIN_ICE_PARAM%XBETA3 + XHON => RAIN_ICE_PARAM%XHON + XSCFAC => RAIN_ICE_PARAM%XSCFAC + X0EVAR => RAIN_ICE_PARAM%X0EVAR + X1EVAR => RAIN_ICE_PARAM%X1EVAR + XEX0EVAR => RAIN_ICE_PARAM%XEX0EVAR + XEX1EVAR => RAIN_ICE_PARAM%XEX1EVAR + X0DEPI => RAIN_ICE_PARAM%X0DEPI + X2DEPI => RAIN_ICE_PARAM%X2DEPI + X0DEPS => RAIN_ICE_PARAM%X0DEPS + X1DEPS => RAIN_ICE_PARAM%X1DEPS + XEX0DEPS => RAIN_ICE_PARAM%XEX0DEPS + XEX1DEPS => RAIN_ICE_PARAM%XEX1DEPS + X0DEPG => RAIN_ICE_PARAM%X0DEPG + X1DEPG => RAIN_ICE_PARAM%X1DEPG + XEX0DEPG => RAIN_ICE_PARAM%XEX0DEPG + XEX1DEPG => RAIN_ICE_PARAM%XEX1DEPG + XTIMAUTI => RAIN_ICE_PARAM%XTIMAUTI + XTEXAUTI => RAIN_ICE_PARAM%XTEXAUTI + XCRIAUTI => RAIN_ICE_PARAM%XCRIAUTI + XT0CRIAUTI => RAIN_ICE_PARAM%XT0CRIAUTI + XACRIAUTI => RAIN_ICE_PARAM%XACRIAUTI + XBCRIAUTI => RAIN_ICE_PARAM%XBCRIAUTI + XCOLIS => RAIN_ICE_PARAM%XCOLIS + XCOLEXIS => RAIN_ICE_PARAM%XCOLEXIS + XFIAGGS => RAIN_ICE_PARAM%XFIAGGS + XEXIAGGS => RAIN_ICE_PARAM%XEXIAGGS + XTIMAUTC => RAIN_ICE_PARAM%XTIMAUTC + XCRIAUTC => RAIN_ICE_PARAM%XCRIAUTC + XFCACCR => RAIN_ICE_PARAM%XFCACCR + XEXCACCR => RAIN_ICE_PARAM%XEXCACCR + XDCSLIM => RAIN_ICE_PARAM%XDCSLIM + XCOLCS => RAIN_ICE_PARAM%XCOLCS + XEXCRIMSS => RAIN_ICE_PARAM%XEXCRIMSS + XCRIMSS => RAIN_ICE_PARAM%XCRIMSS + XEXCRIMSG => RAIN_ICE_PARAM%XEXCRIMSG + XCRIMSG => RAIN_ICE_PARAM%XCRIMSG + XEXSRIMCG => RAIN_ICE_PARAM%XEXSRIMCG + XSRIMCG => RAIN_ICE_PARAM%XSRIMCG + XEXSRIMCG2 => RAIN_ICE_PARAM%XEXSRIMCG2 + XSRIMCG2 => RAIN_ICE_PARAM%XSRIMCG2 + XSRIMCG3 => RAIN_ICE_PARAM%XSRIMCG3 + XGAMINC_BOUND_MIN => RAIN_ICE_PARAM%XGAMINC_BOUND_MIN + XGAMINC_BOUND_MAX => RAIN_ICE_PARAM%XGAMINC_BOUND_MAX + XRIMINTP1 => RAIN_ICE_PARAM%XRIMINTP1 + XRIMINTP2 => RAIN_ICE_PARAM%XRIMINTP2 + XFRACCSS => RAIN_ICE_PARAM%XFRACCSS + XLBRACCS1 => RAIN_ICE_PARAM%XLBRACCS1 + XLBRACCS2 => RAIN_ICE_PARAM%XLBRACCS2 + XLBRACCS3 => RAIN_ICE_PARAM%XLBRACCS3 + XFSACCRG => RAIN_ICE_PARAM%XFSACCRG + XLBSACCR1 => RAIN_ICE_PARAM%XLBSACCR1 + XLBSACCR2 => RAIN_ICE_PARAM%XLBSACCR2 + XLBSACCR3 => RAIN_ICE_PARAM%XLBSACCR3 + XACCLBDAS_MIN => RAIN_ICE_PARAM%XACCLBDAS_MIN + XACCLBDAS_MAX => RAIN_ICE_PARAM%XACCLBDAS_MAX + XACCLBDAR_MIN => RAIN_ICE_PARAM%XACCLBDAR_MIN + XACCLBDAR_MAX => RAIN_ICE_PARAM%XACCLBDAR_MAX + XACCINTP1S => RAIN_ICE_PARAM%XACCINTP1S + XACCINTP2S => RAIN_ICE_PARAM%XACCINTP2S + XACCINTP1R => RAIN_ICE_PARAM%XACCINTP1R + XACCINTP2R => RAIN_ICE_PARAM%XACCINTP2R + XFSCVMG => RAIN_ICE_PARAM%XFSCVMG + XCOLIR => RAIN_ICE_PARAM%XCOLIR + XEXRCFRI => RAIN_ICE_PARAM%XEXRCFRI + XRCFRI => RAIN_ICE_PARAM%XRCFRI + XEXICFRR => RAIN_ICE_PARAM%XEXICFRR + XICFRR => RAIN_ICE_PARAM%XICFRR + XFCDRYG => RAIN_ICE_PARAM%XFCDRYG + XCOLIG => RAIN_ICE_PARAM%XCOLIG + XCOLEXIG => RAIN_ICE_PARAM%XCOLEXIG + XFIDRYG => RAIN_ICE_PARAM%XFIDRYG + XFIDRYG2 => RAIN_ICE_PARAM%XFIDRYG2 + XEXFIDRYG => RAIN_ICE_PARAM%XEXFIDRYG + XCOLSG => RAIN_ICE_PARAM%XCOLSG + XCOLEXSG => RAIN_ICE_PARAM%XCOLEXSG + XFSDRYG => RAIN_ICE_PARAM%XFSDRYG + XLBSDRYG1 => RAIN_ICE_PARAM%XLBSDRYG1 + XLBSDRYG2 => RAIN_ICE_PARAM%XLBSDRYG2 + XLBSDRYG3 => RAIN_ICE_PARAM%XLBSDRYG3 + XFRDRYG => RAIN_ICE_PARAM%XFRDRYG + XLBRDRYG1 => RAIN_ICE_PARAM%XLBRDRYG1 + XLBRDRYG2 => RAIN_ICE_PARAM%XLBRDRYG2 + XLBRDRYG3 => RAIN_ICE_PARAM%XLBRDRYG3 + XDRYLBDAR_MIN => RAIN_ICE_PARAM%XDRYLBDAR_MIN + XDRYLBDAR_MAX => RAIN_ICE_PARAM%XDRYLBDAR_MAX + XDRYLBDAS_MIN => RAIN_ICE_PARAM%XDRYLBDAS_MIN + XDRYLBDAS_MAX => RAIN_ICE_PARAM%XDRYLBDAS_MAX + XDRYLBDAG_MIN => RAIN_ICE_PARAM%XDRYLBDAG_MIN + XDRYLBDAG_MAX => RAIN_ICE_PARAM%XDRYLBDAG_MAX + XDRYINTP1R => RAIN_ICE_PARAM%XDRYINTP1R + XDRYINTP2R => RAIN_ICE_PARAM%XDRYINTP2R + XDRYINTP1S => RAIN_ICE_PARAM%XDRYINTP1S + XDRYINTP2S => RAIN_ICE_PARAM%XDRYINTP2S + XDRYINTP1G => RAIN_ICE_PARAM%XDRYINTP1G + XDRYINTP2G => RAIN_ICE_PARAM%XDRYINTP2G + XFSEDH => RAIN_ICE_PARAM%XFSEDH + XEXSEDH => RAIN_ICE_PARAM%XEXSEDH + X0DEPH => RAIN_ICE_PARAM%X0DEPH + X1DEPH => RAIN_ICE_PARAM%X1DEPH + XEX0DEPH => RAIN_ICE_PARAM%XEX0DEPH + XEX1DEPH => RAIN_ICE_PARAM%XEX1DEPH + XCOLIH => RAIN_ICE_PARAM%XCOLIH + XCOLEXIH => RAIN_ICE_PARAM%XCOLEXIH + XCOLSH => RAIN_ICE_PARAM%XCOLSH + XCOLEXSH => RAIN_ICE_PARAM%XCOLEXSH + XCOLGH => RAIN_ICE_PARAM%XCOLGH + XCOLEXGH => RAIN_ICE_PARAM%XCOLEXGH + XFWETH => RAIN_ICE_PARAM%XFWETH + XFSWETH => RAIN_ICE_PARAM%XFSWETH + XLBSWETH1 => RAIN_ICE_PARAM%XLBSWETH1 + XLBSWETH2 => RAIN_ICE_PARAM%XLBSWETH2 + XLBSWETH3 => RAIN_ICE_PARAM%XLBSWETH3 + XFGWETH => RAIN_ICE_PARAM%XFGWETH + XLBGWETH1 => RAIN_ICE_PARAM%XLBGWETH1 + XLBGWETH2 => RAIN_ICE_PARAM%XLBGWETH2 + XLBGWETH3 => RAIN_ICE_PARAM%XLBGWETH3 + XFRWETH => RAIN_ICE_PARAM%XFRWETH + XLBRWETH1 => RAIN_ICE_PARAM%XLBRWETH1 + XLBRWETH2 => RAIN_ICE_PARAM%XLBRWETH2 + XLBRWETH3 => RAIN_ICE_PARAM%XLBRWETH3 + XWETLBDAS_MIN => RAIN_ICE_PARAM%XWETLBDAS_MIN + XWETLBDAS_MAX => RAIN_ICE_PARAM%XWETLBDAS_MAX + XWETLBDAG_MIN => RAIN_ICE_PARAM%XWETLBDAG_MIN + XWETLBDAG_MAX => RAIN_ICE_PARAM%XWETLBDAG_MAX + XWETLBDAR_MIN => RAIN_ICE_PARAM%XWETLBDAR_MIN + XWETLBDAR_MAX => RAIN_ICE_PARAM%XWETLBDAR_MAX + XWETLBDAH_MIN => RAIN_ICE_PARAM%XWETLBDAH_MIN + XWETLBDAH_MAX => RAIN_ICE_PARAM%XWETLBDAH_MAX + XWETINTP1S => RAIN_ICE_PARAM%XWETINTP1S + XWETINTP2S => RAIN_ICE_PARAM%XWETINTP2S + XWETINTP1G => RAIN_ICE_PARAM%XWETINTP1G + XWETINTP2G => RAIN_ICE_PARAM%XWETINTP2G + XWETINTP1R => RAIN_ICE_PARAM%XWETINTP1R + XWETINTP2R => RAIN_ICE_PARAM%XWETINTP2R + XWETINTP1H => RAIN_ICE_PARAM%XWETINTP1H + XWETINTP2H => RAIN_ICE_PARAM%XWETINTP2H + ! + NGAMINC => RAIN_ICE_PARAM%NGAMINC + NACCLBDAS => RAIN_ICE_PARAM%NACCLBDAS + NACCLBDAR => RAIN_ICE_PARAM%NACCLBDAR + NDRYLBDAR => RAIN_ICE_PARAM%NDRYLBDAR + NDRYLBDAS => RAIN_ICE_PARAM%NDRYLBDAS + NDRYLBDAG => RAIN_ICE_PARAM%NDRYLBDAG + NWETLBDAS => RAIN_ICE_PARAM%NWETLBDAS + NWETLBDAG => RAIN_ICE_PARAM%NWETLBDAG + NWETLBDAR => RAIN_ICE_PARAM%NWETLBDAR + NWETLBDAH => RAIN_ICE_PARAM%NWETLBDAH +END SUBROUTINE RAIN_ICE_PARAM_ASSOCIATE +! SUBROUTINE RAIN_ICE_PARAM_ALLOCATE(HNAME, KDIM1, KDIM2) IMPLICIT NONE CHARACTER(LEN=*), INTENT(IN) :: HNAME diff --git a/src/common/micro/mode_ice4_compute_pdf.F90 b/src/common/micro/mode_ice4_compute_pdf.F90 index cbe4a3e2e65872de922705767ba6b65eb04de449..411cdddad26897dcf9f0fbc50c4a4459fdf946e7 100644 --- a/src/common/micro/mode_ice4_compute_pdf.F90 +++ b/src/common/micro/mode_ice4_compute_pdf.F90 @@ -327,7 +327,11 @@ ELSE ENDIF ! !$mnh_expand_where(JI=1:KSIZE) +#ifdef REPRO48 + PRF=PHLC_HCF +#else PRF(:)=MAX(PHLC_HCF(:),PHLI_HCF(:)) +#endif !$mnh_end_expand_where(JI=1:KSIZE) ! IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 1, ZHOOK_HANDLE) diff --git a/src/common/micro/mode_ice4_tendencies.F90 b/src/common/micro/mode_ice4_tendencies.F90 index 065a1a0a2974bdcbd237855c4b16ce16cac478d6..b07aaebebe7564db43f285b570079b085786d7a4 100644 --- a/src/common/micro/mode_ice4_tendencies.F90 +++ b/src/common/micro/mode_ice4_tendencies.F90 @@ -315,15 +315,6 @@ CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF,& PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, ZRAINFR) LLRFR=HSUBG_RC_RR_ACCR=='PRFR' .OR. HSUBG_RR_EVAP=='PRFR' IF (LLRFR) THEN - CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODE_ICE4_TENDENCIES', 'LLRFR case broken by optimisation, see comments in mode_ice4_tendencies to knwon why (and how to reapir)....') - !Microphyscs was optimized by introducing chunks of KPROMA size - !Thus, in ice4_tendencies, the 1D array represent only a fraction of the points where microphisical species are present - !We cannot rebuild the entire 3D arrays here, so we cannot call ice4_rainfr_vert here - !A solution would be to suppress optimisation in this case by setting KPROMA=KSIZE in rain_ice - !Another solution would be to compute column by column? - !Another one would be to cut tendencies in 3 parts: before rainfr_vert, rainfr_vert, after rainfr_vert - - !Diagnostic of precipitation fraction PRAINFR(:,:,:) = 0. ZRRT3D (:,:,:) = 0. @@ -333,8 +324,10 @@ IF (LLRFR) THEN DO JL=1,KSIZE PRAINFR(K1(JL), K2(JL), K3(JL)) = ZRAINFR(JL) ZRRT3D (K1(JL), K2(JL), K3(JL)) = ZVART(JL,IRR) +#ifndef REPRO48 ZRST3D (K1(JL), K2(JL), K3(JL)) = ZVART(JL,IRS) ZRGT3D (K1(JL), K2(JL), K3(JL)) = ZVART(JL,IRG) +#endif END DO IF (KRR==7) THEN DO JL=1,KSIZE diff --git a/src/mesonh/micro/ini_rain_ice.f90 b/src/mesonh/micro/ini_rain_ice.f90 index 2ac1d538116f2276fd9b55a3f8b691be631ca7ad..3c131d2986b2a3a1c927e01149922c47f1504188 100644 --- a/src/mesonh/micro/ini_rain_ice.f90 +++ b/src/mesonh/micro/ini_rain_ice.f90 @@ -195,6 +195,10 @@ REAL :: PWETLBDAR_MAX,PWETLBDAH_MAX,PWETLBDAR_MIN,PWETLBDAH_MIN REAL(KIND=JPRB) :: ZHOOK_HANDLE !------------------------------------------------------------------------------- IF (LHOOK) CALL DR_HOOK('INI_RAIN_ICE',0,ZHOOK_HANDLE) +! +IF(.NOT.ASSOCIATED(XCEXVT)) CALL RAIN_ICE_DESCR_ASSOCIATE() +IF(.NOT.ASSOCIATED(XFSEDC)) CALL RAIN_ICE_PARAM_ASSOCIATE() + ! ! !* 0. FUNCTION STATEMENTS @@ -456,7 +460,6 @@ ZRHO00 = 101325.*(1.+ZRV)/(XRD+ZRV*XRV)/293.15 ! !* 4.2 Constants for sedimentation ! -IF(.NOT.ASSOCIATED(XFSEDC)) CALL RAIN_ICE_PARAM_INIT() XFSEDC(1) = GAMMA(XNUC+(XDC+3.)/XALPHAC)/GAMMA(XNUC+3./XALPHAC)* & (ZRHO00)**XCEXVT XFSEDC(2) = GAMMA(XNUC2+(XDC+3.)/XALPHAC2)/GAMMA(XNUC2+3./XALPHAC2)* & diff --git a/src/mesonh/micro/ini_rain_ice_elec.f90 b/src/mesonh/micro/ini_rain_ice_elec.f90 index 85fbe6feaa20817f71223cf7af268cc2cc6a5286..780eb5e88472e96a6d68cac821a9bc09325e79bd 100644 --- a/src/mesonh/micro/ini_rain_ice_elec.f90 +++ b/src/mesonh/micro/ini_rain_ice_elec.f90 @@ -172,6 +172,9 @@ REAL :: PDRYLBDAR_MAX, PDRYLBDAR_MIN REAL :: PWETLBDAS_MAX, PWETLBDAG_MAX, PWETLBDAS_MIN, PWETLBDAG_MIN REAL :: PWETLBDAH_MAX, PWETLBDAH_MIN ! +IF(.NOT.ASSOCIATED(XCEXVT)) CALL RAIN_ICE_DESCR_ASSOCIATE() | -------------------------------------------------------------------------------------------------------------------- +IF(.NOT.ASSOCIATED(XFSEDC)) CALL RAIN_ICE_PARAM_ASSOCIATE() +! !------------------------------------------------------------------------------- ! !* 0. FUNCTION STATEMENTS @@ -205,13 +208,27 @@ IF (CSEDIM == 'SPLI') THEN END DO SPLIT END IF ! -IF (ALLOCATED(XRTMIN)) THEN ! In case of nesting microphysics constants of +IF (ASSOCIATED(XRTMIN)) THEN ! In case of nesting microphysics constants of ! MODD_RAIN_ICE_PARAM are computed only once, ! but if INI_RAIN_ICE has been called already ! one must change the XRTMIN size. - DEALLOCATE(XRTMIN) + CALL RAIN_ICE_DESCR_DEALLOCATE() END IF ! +IF (HCLOUD == 'ICE4') THEN + CALL RAIN_ICE_DESCR_ALLOCATE(7) +ELSE IF (HCLOUD == 'ICE3') THEN + CALL RAIN_ICE_DESCR_ALLOCATE(6) +END IF +! +XRTMIN(1) = 1.0E-20 +XRTMIN(2) = 1.0E-20 +XRTMIN(3) = 1.0E-20 +XRTMIN(4) = 1.0E-20 +XRTMIN(5) = 1.0E-15 +XRTMIN(6) = 1.0E-15 +IF (HCLOUD == 'ICE4') XRTMIN(7) = 1.0E-15 +! !------------------------------------------------------------------------------- ! !* 2. CHARACTERISTICS OF THE SPECIES @@ -383,20 +400,6 @@ XLBDAG_MAX = 100000.0 ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc XLBDAS_MAX = (ZCONC_MAX / XCCS)**(1./XCXS) ! -IF (HCLOUD == 'ICE4') THEN - ALLOCATE( XRTMIN(7) ) -ELSE IF (HCLOUD == 'ICE3') THEN - ALLOCATE( XRTMIN(6) ) -END IF -! -XRTMIN(1) = 1.0E-20 -XRTMIN(2) = 1.0E-20 -XRTMIN(3) = 1.0E-20 -XRTMIN(4) = 1.0E-20 -XRTMIN(5) = 1.0E-15 -XRTMIN(6) = 1.0E-15 -IF (HCLOUD == 'ICE4') XRTMIN(7) = 1.0E-15 -! XCONC_SEA = 1.E8 ! 100/cm3 XCONC_LAND = 3.E8 ! 300/cm3 XCONC_URBAN = 5.E8 ! 500/cm3 diff --git a/src/mesonh/micro/modd_param_ice.f90 b/src/mesonh/micro/modd_param_ice.f90 index 74d01e0f6ac90b7b90f106dbfccbe88e004a46e3..0d5c42bd07374ecce527fc41af314127a5f24e0b 100644 --- a/src/mesonh/micro/modd_param_ice.f90 +++ b/src/mesonh/micro/modd_param_ice.f90 @@ -82,39 +82,75 @@ END TYPE PARAM_ICE_t ! TYPE(PARAM_ICE_t), SAVE, TARGET :: PARAM_ICE ! -LOGICAL, POINTER :: LWARM => PARAM_ICE%LWARM, & - LSEDIC => PARAM_ICE%LSEDIC, & - LDEPOSC => PARAM_ICE%LDEPOSC, & - LRED => PARAM_ICE%LRED, & - LFEEDBACKT => PARAM_ICE%LFEEDBACKT, & - LEVLIMIT => PARAM_ICE%LEVLIMIT, & - LNULLWETG => PARAM_ICE%LNULLWETG, & - LWETGPOST => PARAM_ICE%LWETGPOST, & - LNULLWETH => PARAM_ICE%LNULLWETH, & - LWETHPOST => PARAM_ICE%LWETHPOST, & - LCONVHG => PARAM_ICE%LCONVHG, & - LCRFLIMIT => PARAM_ICE%LCRFLIMIT, & - LADJ_BEFORE => PARAM_ICE%LADJ_BEFORE, & - LADJ_AFTER => PARAM_ICE%LADJ_AFTER, & - LSEDIM_AFTER => PARAM_ICE%LSEDIM_AFTER +LOGICAL, POINTER :: LWARM => NULL(), & + LSEDIC => NULL(), & + LDEPOSC => NULL(), & + LRED => NULL(), & + LFEEDBACKT => NULL(), & + LEVLIMIT => NULL(), & + LNULLWETG => NULL(), & + LWETGPOST => NULL(), & + LNULLWETH => NULL(), & + LWETHPOST => NULL(), & + LCONVHG => NULL(), & + LCRFLIMIT => NULL(), & + LADJ_BEFORE => NULL(), & + LADJ_AFTER => NULL(), & + LSEDIM_AFTER => NULL() -REAL, POINTER :: XVDEPOSC => PARAM_ICE%XVDEPOSC, & - XFRACM90 => PARAM_ICE%XFRACM90, & - XMRSTEP => PARAM_ICE%XMRSTEP, & - XTSTEP_TS => PARAM_ICE%XTSTEP_TS, & - XSPLIT_MAXCFL => PARAM_ICE%XSPLIT_MAXCFL +REAL, POINTER :: XVDEPOSC => NULL(), & + XFRACM90 => NULL(), & + XMRSTEP => NULL(), & + XTSTEP_TS => NULL(), & + XSPLIT_MAXCFL => NULL() -INTEGER, POINTER :: NMAXITER => PARAM_ICE%NMAXITER +INTEGER, POINTER :: NMAXITER => NULL() -CHARACTER(LEN=1), POINTER :: CFRAC_ICE_ADJUST => PARAM_ICE%CFRAC_ICE_ADJUST -CHARACTER(LEN=1), POINTER :: CFRAC_ICE_SHALLOW_MF => PARAM_ICE%CFRAC_ICE_SHALLOW_MF -CHARACTER(LEN=4), POINTER :: CPRISTINE_ICE => PARAM_ICE%CPRISTINE_ICE -CHARACTER(LEN=4), POINTER :: CSEDIM => PARAM_ICE%CSEDIM -CHARACTER(LEN=4), POINTER :: CSNOWRIMING => PARAM_ICE%CSNOWRIMING -CHARACTER(LEN=80),POINTER :: CSUBG_RC_RR_ACCR => PARAM_ICE%CSUBG_RC_RR_ACCR -CHARACTER(LEN=80),POINTER :: CSUBG_RR_EVAP => PARAM_ICE%CSUBG_RR_EVAP -CHARACTER(LEN=80),POINTER :: CSUBG_PR_PDF => PARAM_ICE%CSUBG_PR_PDF +CHARACTER(LEN=1), POINTER :: CFRAC_ICE_ADJUST => NULL() +CHARACTER(LEN=1), POINTER :: CFRAC_ICE_SHALLOW_MF => NULL() +CHARACTER(LEN=4), POINTER :: CPRISTINE_ICE => NULL() +CHARACTER(LEN=4), POINTER :: CSEDIM => NULL() +CHARACTER(LEN=4), POINTER :: CSNOWRIMING => NULL() +CHARACTER(LEN=80),POINTER :: CSUBG_RC_RR_ACCR => NULL() +CHARACTER(LEN=80),POINTER :: CSUBG_RR_EVAP => NULL() +CHARACTER(LEN=80),POINTER :: CSUBG_PR_PDF => NULL() ! !------------------------------------------------------------------------------- ! +CONTAINS +SUBROUTINE PARAM_ICE_ASSOCIATE() + IMPLICIT NONE + LWARM => PARAM_ICE%LWARM, & + LSEDIC => PARAM_ICE%LSEDIC, & + LDEPOSC => PARAM_ICE%LDEPOSC, & + LRED => PARAM_ICE%LRED, & + LFEEDBACKT => PARAM_ICE%LFEEDBACKT, & + LEVLIMIT => PARAM_ICE%LEVLIMIT, & + LNULLWETG => PARAM_ICE%LNULLWETG, & + LWETGPOST => PARAM_ICE%LWETGPOST, & + LNULLWETH => PARAM_ICE%LNULLWETH, & + LWETHPOST => PARAM_ICE%LWETHPOST, & + LCONVHG => PARAM_ICE%LCONVHG, & + LCRFLIMIT => PARAM_ICE%LCRFLIMIT, & + LADJ_BEFORE => PARAM_ICE%LADJ_BEFORE, & + LADJ_AFTER => PARAM_ICE%LADJ_AFTER, & + LSEDIM_AFTER => PARAM_ICE%LSEDIM_AFTER + ! + XVDEPOSC => PARAM_ICE%XVDEPOSC, & + XFRACM90 => PARAM_ICE%XFRACM90, & + XMRSTEP => PARAM_ICE%XMRSTEP, & + XTSTEP_TS => PARAM_ICE%XTSTEP_TS, & + XSPLIT_MAXCFL => PARAM_ICE%XSPLIT_MAXCFL + ! + NMAXITER => PARAM_ICE%NMAXITER + ! + CFRAC_ICE_ADJUST => PARAM_ICE%CFRAC_ICE_ADJUST + CFRAC_ICE_SHALLOW_MF => PARAM_ICE%CFRAC_ICE_SHALLOW_MF + CPRISTINE_ICE => PARAM_ICE%CPRISTINE_ICE + CSEDIM => PARAM_ICE%CSEDIM + CSNOWRIMING => PARAM_ICE%CSNOWRIMING + CSUBG_RC_RR_ACCR => PARAM_ICE%CSUBG_RC_RR_ACCR + CSUBG_RR_EVAP => PARAM_ICE%CSUBG_RR_EVAP + CSUBG_PR_PDF => PARAM_ICE%CSUBG_PR_PDF +END SUBROUTINE PARAM_ICE_ASSOCIATE END MODULE MODD_PARAM_ICE