diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90 index 50ac18baf250c7d656db9388a9cd286877e4ffb8..70c4074d94f58f5fdc94e619874dd7a95f54751d 100644 --- a/src/MNH/ini_budget.f90 +++ b/src/MNH/ini_budget.f90 @@ -2722,24 +2722,35 @@ SV_BUDGETS: do jsv = 1, ksv else if ( jsv >= nsv_c2r2beg .and. jsv <= nsv_c2r2end ) then SV_VAR ! C2R2 or KHKO Case - SV_C2R2: select case( jsv - nsv_c2r2beg + 1 ) - case ( 1 ) SV_C2R2 - ! Concentration of activated nuclei - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) + ! Source terms in common for all C2R2/KHKO budgets + ! (except supersaturation not taken into account in the budgets (for the moment)) + if ( jsv <= nsv_c2r2beg + 2 ) then + gcond = hturb == 'TKEL' + tzsource%cmnhname = 'NETUR' + tzsource%clongname = 'negative correction induced by turbulence' + call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) + gcond = .true. + tzsource%cmnhname = 'NEADV' + tzsource%clongname = 'negative correction induced by advection' + call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) + + gcond = .true. + tzsource%cmnhname = 'NEGA' + tzsource%clongname = 'negative correction' + call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) + + gcond = .true. + tzsource%cmnhname = 'NECON' + tzsource%clongname = 'negative correction induced by condensation' + call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) + end if + ! Source terms specific to each budget + SV_C2R2: select case( jsv - nsv_c2r2beg + 1 ) + case ( 1 ) SV_C2R2 + ! Concentration of activated nuclei gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt ) gcond = gtmp .or. ( .not.gtmp .and. .not.lsupsat_c2r2 ) tzsource%cmnhname = 'HENU' @@ -2751,29 +2762,9 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%clongname = 'evaporation' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - case ( 2 ) SV_C2R2 ! Concentration of cloud droplets - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt ) gcond = gtmp .or. ( .not.gtmp .and. .not.lsupsat_c2r2 ) tzsource%cmnhname = 'HENU' @@ -2805,28 +2796,9 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%clongname = 'evaporation' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - case ( 3 ) SV_C2R2 ! Concentration of raindrops - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) gcond = lrain_c2r2 tzsource%cmnhname = 'AUTO' @@ -2853,11 +2825,6 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%clongname = 'sedimentation' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - case ( 4 ) SV_C2R2 ! Supersaturation @@ -2867,23 +2834,32 @@ SV_BUDGETS: do jsv = 1, ksv else if ( jsv >= nsv_lima_beg .and. jsv <= nsv_lima_end ) then SV_VAR ! LIMA case - SV_LIMA: if ( jsv == nsv_lima_nc ) then - ! Cloud droplets concentration - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) + ! Source terms in common for all LIMA budgets + gcond = hturb == 'TKEL' + tzsource%cmnhname = 'NETUR' + tzsource%clongname = 'negative correction induced by turbulence' + call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) + gcond = .true. + tzsource%cmnhname = 'NEADV' + tzsource%clongname = 'negative correction induced by advection' + call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) + + gcond = .true. + tzsource%cmnhname = 'NEGA' + tzsource%clongname = 'negative correction' + call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) + + gcond = .true. + tzsource%cmnhname = 'NECON' + tzsource%clongname = 'negative correction induced by condensation' + call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) + + ! Source terms specific to each budget + SV_LIMA: if ( jsv == nsv_lima_nc ) then + ! Cloud droplets concentration gcond = lptsplit .and. lwarm_lima .and. lrain_lima tzsource%cmnhname = 'CORR' tzsource%clongname = 'correction' @@ -2974,29 +2950,9 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%clongname = 'adjustment to saturation' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - else if ( jsv == nsv_lima_nr ) then SV_LIMA ! Rain drops concentration - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - gcond = lptsplit .and. lwarm_lima .and. lrain_lima tzsource%cmnhname = 'CORR' tzsource%clongname = 'correction' @@ -3077,29 +3033,9 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%clongname = 'hail melting' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - else if ( jsv >= nsv_lima_ccn_free .and. jsv <= nsv_lima_ccn_free + nmod_ccn - 1 ) then SV_LIMA ! Free CCN concentration - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - gcond = lwarm_lima .and. lacti_lima .and. nmod_ccn >= 1 tzsource%cmnhname = 'HENU' tzsource%clongname = 'CCN activation' @@ -3120,75 +3056,17 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%clongname = 'scavenging' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - else if ( jsv >= nsv_lima_ccn_acti .and. jsv <= nsv_lima_ccn_acti + nmod_ccn - 1 ) then SV_LIMA ! Activated CCN concentration - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) else if ( jsv == nsv_lima_scavmass ) then SV_LIMA ! Scavenged mass variable - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) else if ( jsv == nsv_lima_ni ) then SV_LIMA ! Pristine ice crystals concentration - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - gcond = lptsplit .and. lcold_lima .and. lsnow_lima tzsource%cmnhname = 'CORR' tzsource%clongname = 'correction' @@ -3278,29 +3156,9 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%clongname = 'adjustment to saturation' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - else if ( jsv >= nsv_lima_ifn_free .and. jsv <= nsv_lima_ifn_free + nmod_ifn - 1 ) then SV_LIMA ! Free IFN concentration - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - !Rq: if NMOD_IFN=0=> budget=0 gcond = ( .not.lptsplit .and. lcold_lima .and. lnucl_lima .and. .not. lmeyers_lima ) .or. & ( lptsplit .and. lcold_lima .and. lnucl_lima .and. .not. lmeyers_lima .and. nmod_ifn >= 1 ) @@ -3313,95 +3171,27 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%clongname = 'adjustment to saturation' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = lscav_lima tzsource%cmnhname = 'SCAV' tzsource%clongname = 'scavenging' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - else if ( jsv >= nsv_lima_ifn_nucl .and. jsv <= nsv_lima_ifn_nucl + nmod_ifn - 1 ) then SV_LIMA ! Nucleated IFN concentration - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) else if ( jsv >= nsv_lima_imm_nucl .and. jsv <= nsv_lima_imm_nucl + nmod_imm - 1 ) then SV_LIMA ! Nucleated IMM concentration - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) else if ( jsv == nsv_lima_hom_haze ) then SV_LIMA ! Homogeneous freezing of CCN - gcond = hturb == 'TKEL' - tzsource%cmnhname = 'NETUR' - tzsource%clongname = 'negative correction induced by turbulence' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnetursv ) - - gcond = .true. - tzsource%cmnhname = 'NEADV' - tzsource%clongname = 'negative correction induced by advection' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneadvsv ) - - gcond = .true. - tzsource%cmnhname = 'NEGA' - tzsource%clongname = 'negative correction' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nnegasv ) - gcond = .not.lptsplit .and. lcold_lima .and. lnucl_lima .and. lwarm_lima .and. lhhoni_lima tzsource%cmnhname = 'HONH' tzsource%clongname = 'haze homogeneous nucleation' call Budget_source_add( tbudgets(ibudget), tzsource, gcond, igroup ) - gcond = .true. - tzsource%cmnhname = 'NECON' - tzsource%clongname = 'negative correction induced by condensation' - call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneconsv ) - end if SV_LIMA