diff --git a/src/MNH/aer2lima.f90 b/src/MNH/aer2lima.f90 index 885dc0dc0270f586dfa4ffedca88eb3f4345ad4f..eaf03fa5b74ef44d11d605c55c6d4f3e7d0a693f 100644 --- a/src/MNH/aer2lima.f90 +++ b/src/MNH/aer2lima.f90 @@ -278,29 +278,31 @@ END DO ELSE ! keep lima class intiatialization IF (CACTCCN=="ABRK") THEN ! only one CCN_FREE mode (activation is not performed upon aerosol class but by physical paramters) - IF (NMOD_CCN .GE. 2) & - ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + & - PSVT(:,:,:,NSV_LIMA_CCN_FREE+1) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI+1) - IF (NMOD_CCN .GE. 3) & - ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + & - PSVT(:,:,:,NSV_LIMA_CCN_FREE+2) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI+2) - + IF (NMOD_CCN .GE. 2) THEN + DO JI = 2, NMOD_CCN + ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + & + PSVT(:,:,:,NSV_LIMA_CCN_FREE+JI-1) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI+JI-1) + END DO + END IF ELSE - IF (NMOD_CCN .GE. 2) & - ZCCN_SUM(:,:,:,2) = PSVT(:,:,:,NSV_LIMA_CCN_FREE+1) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI+1) - - IF (NMOD_CCN .GE. 3) & - ZCCN_SUM(:,:,:,3) = PSVT(:,:,:,NSV_LIMA_CCN_FREE+2) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI+2) + IF (NMOD_CCN .GE. 2) THEN + DO JI = 2, NMOD_CCN + ZCCN_SUM(:,:,:,JI) = PSVT(:,:,:,NSV_LIMA_CCN_FREE+JI-1) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI+JI-1) + END DO + END IF END IF - IF (.NOT.(LDUST)) & - ZIFN_SUM(:,:,:,1) = PSVT(:,:,:,NSV_LIMA_IFN_FREE) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL) - - IF (NMOD_IFN .GE. 2) & - ZIFN_SUM(:,:,:,2) = PSVT(:,:,:,NSV_LIMA_IFN_FREE+1) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL+1) + IF (.NOT.(LDUST) .AND. NMOD_IFN.GE.1) & + ZIFN_SUM(:,:,:,1) = PSVT(:,:,:,NSV_LIMA_IFN_FREE) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL) + IF (NMOD_IFN .GE. 2) THEN + DO JI = 2, NMOD_IFN + ZIFN_SUM(:,:,:,JI) = PSVT(:,:,:,NSV_LIMA_IFN_FREE+JI-1) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL+JI-1) + END DO + END IF END IF ! end if sur LORILAM - +! +! ! Sea Salt part IF (LSALT) THEN ! @@ -329,7 +331,8 @@ ELSE ! keep lima class intiatialization for sea salt + ccn from orilam ZCCN_SUM(:,:,:,1) = PSVT(:,:,:,NSV_LIMA_CCN_FREE) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI) END IF ! end if sur LSALT - +! +! ! Dust part IF (LDUST) THEN ! initatialization of dust if not macc @@ -352,24 +355,24 @@ IF (LDUST) THEN END DO ELSE ! keep lima class intiatialization - - ZIFN_SUM(:,:,:,1) = PSVT(:,:,:,NSV_LIMA_IFN_FREE) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL) + IF (NMOD_IFN.GE.1) & + ZIFN_SUM(:,:,:,1) = PSVT(:,:,:,NSV_LIMA_IFN_FREE) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL) END IF ! endif sur LDUST - -PSVT(:,:,:,NSV_LIMA_CCN_FREE) = MAX(ZCCN_SUM(:,:,:,1) - PSVT(:,:,:,NSV_LIMA_CCN_ACTI), 0.) - -IF (NMOD_CCN .GE. 2) & -PSVT(:,:,:,NSV_LIMA_CCN_FREE+1) = MAX(ZCCN_SUM(:,:,:,2) - PSVT(:,:,:,NSV_LIMA_CCN_ACTI+1), 0.) - - -IF (NMOD_CCN .GE. 3) & -PSVT(:,:,:,NSV_LIMA_CCN_FREE+2) = MAX(ZCCN_SUM(:,:,:,3) - PSVT(:,:,:,NSV_LIMA_CCN_ACTI+2), 0.) - -PSVT(:,:,:,NSV_LIMA_IFN_FREE) = MAX(ZIFN_SUM(:,:,:,1) - PSVT(:,:,:,NSV_LIMA_IFN_NUCL), 0.) -IF (NMOD_IFN .GE. 2) & -PSVT(:,:,:,NSV_LIMA_IFN_FREE+1) = MAX(ZIFN_SUM(:,:,:,2) - PSVT(:,:,:,NSV_LIMA_IFN_NUCL+1), 0.) - +! +! +! +IF (NMOD_CCN .GE. 1) THEN + DO JI=1,NMOD_CCN + PSVT(:,:,:,NSV_LIMA_CCN_FREE+JI-1) = MAX(ZCCN_SUM(:,:,:,JI) - PSVT(:,:,:,NSV_LIMA_CCN_ACTI+JI-1), 0.) + END DO +END IF +! +IF (NMOD_IFN .GE. 1) THEN + DO JI=1,NMOD_IFN + PSVT(:,:,:,NSV_LIMA_IFN_FREE+JI-1) = MAX(ZIFN_SUM(:,:,:,JI) - PSVT(:,:,:,NSV_LIMA_IFN_NUCL+JI-1), 0.) + END DO +END IF ! ! END SUBROUTINE AER2LIMA diff --git a/src/MNH/ini_lima_cold_mixed.f90 b/src/MNH/ini_lima_cold_mixed.f90 index e5cc933aadb2c1ea1fa6dae71670860155005d1a..2a59420e0d0029f87a8837da855080c88da52b10 100644 --- a/src/MNH/ini_lima_cold_mixed.f90 +++ b/src/MNH/ini_lima_cold_mixed.f90 @@ -800,7 +800,7 @@ XHMLINTP2 = 1.0 + XHMLINTP1*LOG( 25.E-6/(XGAMINC_HMC_BOUND_MIN)**(1.0/XALPHAC) ) ! !* 7.2 Constants for the accretion of raindrops onto aggregates ! -XFRACCSS = XNS*((XPI**2)/24.0)*XRHOLW*(ZRHO00**XCEXVT) +XFRACCSS = XNS*XPI/4.0*XAR*(ZRHO00**XCEXVT) ! XLBRACCS1 = MOMG(XALPHAS,XNUS,2.)*MOMG(XALPHAR,XNUR,3.) XLBRACCS2 = 2.*MOMG(XALPHAS,XNUS,1.)*MOMG(XALPHAR,XNUR,4.) diff --git a/src/MNH/lima_ccn_activation.f90 b/src/MNH/lima_ccn_activation.f90 index 22f5b399a6370ed00361e2cf4464976db277ec42..fa0a276ebcc591f7dc6dbdbdaf505f044d97c6ba 100644 --- a/src/MNH/lima_ccn_activation.f90 +++ b/src/MNH/lima_ccn_activation.f90 @@ -652,7 +652,7 @@ DO JL = 1, NPTS fl(JL)=fnew(JL) else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),PZZW6(JL),JL) go to 100 end if @@ -673,7 +673,7 @@ DO JL = 1, NPTS PZRIDDR(JL)=PX2 else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),PZZW6(JL),JL) go to 100 else diff --git a/src/MNH/lima_init_ccn_activation_spectrum.f90 b/src/MNH/lima_init_ccn_activation_spectrum.f90 index 16a5617407f80b8bd99fd57dc25b5687ed6433db..4403f97025e2c04b8f823efd603eec3accbb28ef 100644 --- a/src/MNH/lima_init_ccn_activation_spectrum.f90 +++ b/src/MNH/lima_init_ccn_activation_spectrum.f90 @@ -287,7 +287,7 @@ fh = DSDD(PX2,XDDRY,XKAPPA,XT) fl=fnew else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 fh = DSDD(PX2,XDDRY,XKAPPA,XT) go to 100 STOP @@ -303,7 +303,7 @@ fh = DSDD(PX2,XDDRY,XKAPPA,XT) PZRIDDR=PX2 else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 fh = DSDD(PX2,XDDRY,XKAPPA,XT) go to 100 else diff --git a/src/MNH/lima_mixed_fast_processes.f90 b/src/MNH/lima_mixed_fast_processes.f90 index b8a9fcc32d6cb5938ef38bcbcdb132103c1832ad..4ce1a80932b529416248070daee6e26af33c1e86 100644 --- a/src/MNH/lima_mixed_fast_processes.f90 +++ b/src/MNH/lima_mixed_fast_processes.f90 @@ -160,7 +160,7 @@ USE MODD_NSV USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_COLD USE MODD_PARAM_LIMA_MIXED -USE MODD_PARAM_LIMA_WARM, ONLY : XDR +USE MODD_PARAM_LIMA_WARM, ONLY : XBR, XDR use mode_budget, only: Budget_store_init, Budget_store_end @@ -826,10 +826,10 @@ IF( IGACC>0 .AND. LRAIN) THEN ! WHERE ( GACC(:) ) ZZW1(:,2) = PCRT1D(:) * & !! coef of RRACCS - XFRACCSS*( PRST1D(:)*PLBDAS(:)**XBS )*( PRHODREF(:)**(-XCEXVT) ) & + XFRACCSS*( PRST1D(:)*PLBDAS(:)**XBS )*( PRHODREF(:)**(1-XCEXVT) ) & *( XLBRACCS1/((PLBDAS(:)**2) ) + & XLBRACCS2/( PLBDAS(:) * PLBDAR(:) ) + & - XLBRACCS3/( (PLBDAR(:)**2)) )/PLBDAR(:)**3 + XLBRACCS3/( (PLBDAR(:)**2)) )/PLBDAR(:)**XBR ZZW1(:,4) = MIN( PRRS1D(:),ZZW1(:,2)*ZZW(:) ) ! RRACCSS PRRS1D(:) = PRRS1D(:) - ZZW1(:,4) PRSS1D(:) = PRSS1D(:) + ZZW1(:,4) @@ -870,7 +870,7 @@ IF( IGACC>0 .AND. LRAIN) THEN WHERE ( GACC(:) .AND. (PRSS1D(:)>XRTMIN(5)/PTSTEP) ) ZZW1(:,2) = MAX( MIN( PRRS1D(:),ZZW1(:,2)-ZZW1(:,4) ) , 0. ) ! RRACCSG ZZW1(:,3) = MIN( PRSS1D(:),XFSACCRG*ZZW(:)* & ! RSACCRG - ( PRST1D(:) )*( PRHODREF(:)**(-XCEXVT) ) & + ( PRST1D(:) )*( PRHODREF(:)**(1-XCEXVT) ) & *( XLBSACCR1/((PLBDAR(:)**2) ) + & XLBSACCR2/( PLBDAR(:) * PLBDAS(:) ) + & XLBSACCR3/( (PLBDAS(:)**2)) ) ) diff --git a/src/MNH/lima_rain_accr_snow.f90 b/src/MNH/lima_rain_accr_snow.f90 index 264c98bb914139fa437951ddd15bb3595f302106..5ece49ac93b856337d711e5ac276a38bcb39fdfd 100644 --- a/src/MNH/lima_rain_accr_snow.f90 +++ b/src/MNH/lima_rain_accr_snow.f90 @@ -69,6 +69,7 @@ END MODULE MODI_LIMA_RAIN_ACCR_SNOW ! USE MODD_CST, ONLY : XTT USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCEXVT +USE MODD_PARAM_LIMA_WARM, ONLY : XBR USE MODD_PARAM_LIMA_COLD, ONLY : XBS, XTRANS_MP_GAMMAS USE MODD_PARAM_LIMA_MIXED, ONLY : NACCLBDAS, XACCINTP1S, XACCINTP2S, & NACCLBDAR, XACCINTP1R, XACCINTP2R, & @@ -211,21 +212,19 @@ WHERE( GACC ) ! ! 1.3.4 raindrop accretion on the small sized aggregates ! -! BVIE manque PCRT ??????????????????????????????????? -! ZZW4(:) = & !! coef of RRACCS and RRACCS - ZZW4(:) = PCRT(:) & !! coef of RRACCS and RRACCS - * XFRACCSS *( PRST(:)*PLBDS(:)**XBS )*( PRHODREF(:)**(-XCEXVT) ) & - *( XLBRACCS1/( PLBDS(:)**2 ) + & - XLBRACCS2/( PLBDS(:) * PLBDR(:) ) + & - XLBRACCS3/( PLBDR(:)**2 ) ) / PLBDR(:)**3 + ZZW4(:) = PCRT(:) * & !! coef of RRACCS and RRACCS + XFRACCSS *( PRST(:)*PLBDS(:)**XBS )*( PRHODREF(:)**(1-XCEXVT) ) & + *( XLBRACCS1/( PLBDS(:)**2 ) + & + XLBRACCS2/( PLBDS(:) * PLBDR(:) ) + & + XLBRACCS3/( PLBDR(:)**2 ) ) / PLBDR(:)**XBR ! ! 1.3.6 raindrop accretion-conversion of the large sized aggregates ! into graupeln ! - ZZW5(:) = XFSACCRG*ZZW3(:) * & ! RSACCRG - ( PRST(:) )*( PRHODREF(:)**(-XCEXVT) ) & - *( XLBSACCR1/( PLBDR(:)**2 ) + & + ZZW5(:) = XFSACCRG * ZZW3(:) * PCRT(:) * & ! RSACCRG + ( PRST(:) )*( PRHODREF(:)**(1-XCEXVT) ) * & + ( XLBSACCR1/( PLBDR(:)**2 ) + & XLBSACCR2/( PLBDR(:) * PLBDS(:) ) + & XLBSACCR3/( PLBDS(:)**2 ) ) ! diff --git a/src/MNH/lima_warm_nucl.f90 b/src/MNH/lima_warm_nucl.f90 index 549a5fc8460f4ac857a2171b64b324f9aec84b95..d62e4f790ca42ab792afdcfa66b970171f83b2e8 100644 --- a/src/MNH/lima_warm_nucl.f90 +++ b/src/MNH/lima_warm_nucl.f90 @@ -662,7 +662,7 @@ DO JL = 1, NPTS fl(JL)=fnew(JL) else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),PZZW6(JL),JL) go to 100 end if @@ -683,7 +683,7 @@ DO JL = 1, NPTS PZRIDDR(JL)=PX2 else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),PZZW6(JL),JL) go to 100 else diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index 937990ac60b9f1ec2b644266849fbd9e917205d3..de986a0cd5eb891a956958436988b5cb6cc85432 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -534,8 +534,8 @@ END IF ! !* 1. From ORILAM to LIMA: ! -IF (HCLOUD == 'LIMA') THEN -!IF (HCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN +!IF (HCLOUD == 'LIMA') THEN +IF (HCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN ! ORILAM : tendance s --> variable instant t ALLOCATE(ZSVT(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),NSV)) DO II = 1, NSV