Changeset 4669 for LMDZ6


Ignore:
Timestamp:
Sep 4, 2023, 10:17:16 AM (10 months ago)
Author:
Laurent Fairhead
Message:

Merged with trunk revision 4586 corresponding to june 2023 testing

Location:
LMDZ6/branches/LMDZ_cdrag_LSCE
Files:
2 deleted
73 edited
16 copied

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ_cdrag_LSCE

  • LMDZ6/branches/LMDZ_cdrag_LSCE/DefLists/field_def_lmdz.xml

    r4412 r4669  
    112112        <field id="pluc"    long_name="Convective Precip."      unit="kg/(s*m2)" />
    113113        <field id="snow"    long_name="Snow fall"               unit="kg/(s*m2)" />
    114         <field id="evap"    long_name="Evaporat"                unit="kg/(s*m2)" />
    115         <field id="evap_ter"    long_name="evaporation at surface ter"    unit="kg/(s*m2)" />
     114        <field id="evap"    long_name="Evaporat"                unit="kg/(s*m2)" />
     115        <field id="snowerosion"    long_name="blowing snow erosion"                unit="kg/(s*m2)" />
     116        <field id="bsfall"    long_name="blowing snow precipitation"                unit="kg/(s*m2)" />
     117        <field id="rhosnow_lic"    long_name="snow density lic"                unit="kg/m3" />
     118        <field id="ustart_lic"    long_name="ustar threshold for snow erosion"                unit="m/s" />
     119        <field id="evap_ter"    long_name="evaporation at surface ter"    unit="kg/(s*m2)" />
    116120        <field id="evap_lic"    long_name="evaporation at surface lic"    unit="kg/(s*m2)" />
    117121        <field id="evap_oce"    long_name="evaporation at surface oce"    unit="kg/(s*m2)" />
     
    275279        <field id="prw"    long_name="Precipitable water"    unit="kg/m2" />
    276280        <field id="prlw"   long_name="Precipitable liquid water"  unit="kg/m2" />
    277         <field id="prsw"   long_name="Precipitable solid water"  unit="kg/m2" />
     281        <field id="prsw"   long_name="Precipitable solid water"  unit="kg/m2" />
     282        <field id="prbsw"   long_name="Precipitable blowing snow"  unit="kg/m2" />
    278283        <field id="s_pblh"    long_name="Boundary Layer Height"    unit="m" />
    279284        <field id="s_pblt"    long_name="t at Boundary Layer Height"    unit="K" />
     
    505510        <field id="dqphy2d"    long_name="Physics dQ"    unit="(kg/m2)/s" />
    506511        <field id="dqlphy2d"    long_name="Physics dQL"    unit="(kg/m2)/s" />
    507         <field id="dqsphy2d"    long_name="Physics dQS"    unit="(kg/m2)/s" />
     512        <field id="dqsphy2d"    long_name="Physics dQS"    unit="(kg/m2)/s" />
     513        <field id="dqbsphy2d"    long_name="Physics dQBS"    unit="(kg/m2)/s" />
    508514        <field id="dqdyn2d"    long_name="Dynamics dQ"    unit="(kg/m2)/s" />
    509515        <field id="dqldyn2d"   long_name="Dynamics dQL"    unit="(kg/m2)/s" />
    510516        <field id="dqsdyn2d"   long_name="Dynamics dQS"    unit="(kg/m2)/s" />
    511         <field id="dqcon2d"    long_name="Convection dQ"    unit="(kg/m2)/s" />
     517        <field id="dqbsdyn2d"   long_name="Dynamics dQBS"    unit="(kg/m2)/s" />
     518        <field id="dqcon2d"    long_name="Convection dQ"    unit="(kg/m2)/s" />
    512519        <field id="dqwak2d"    long_name="Wake dQ"    unit="(kg/m2)/s" />
    513520        <field id="dqlsc2d"    long_name="Condensation dQ"    unit="(kg/m2)/s" />
     
    590597        <field id="ovapinit"    long_name="Specific humidity (begin of timestep)"    unit="kg/kg" />
    591598        <field id="oliq"    long_name="Liquid water"    unit="kg/kg" />
    592         <field id="ocond"    long_name="Condensed water"    unit="kg/kg" />
     599        <field id="ocond"    long_name="Condensed water"    unit="kg/kg" />
     600        <field id="qbs"    long_name="specific content of blowing snow"    unit="kg/kg" />
    593601        <field id="geop"    long_name="Geopotential height"    unit="m2/s2" />
    594602        <field id="geoph" field_ref="geop" long_name="Geopotential height" unit="m" > geop/9.80665 </field>
     
    604612        <field id="rnebcon"    long_name="Convective Cloud Fraction"    unit="-" />
    605613        <field id="rnebls"    long_name="LS Cloud fraction"    unit="-" />
    606         <field id="rneblsvol" long_name="LS Cloud fraction by volume"    unit="-" />
     614        <field id="rneblsvol" long_name="LS Cloud fraction by volume"    unit="-" />
     615        <field id="pfraclr" long_name="LS precip fraction clear-sky part"    unit="-" />               
     616        <field id="pfracld" long_name="LS precip fraction cloudy part"    unit="-" />   
    607617        <field id="rhum"    long_name="Relative humidity"    unit="-" />
    608618        <field id="rhl" long_name="Relative humidity wrt liquid" unit="%" />
     
    616626        <field id="dqphy"    long_name="Physics dQ"    unit="(kg/kg)/s" />
    617627        <field id="dqlphy"   long_name="Physics dQL"    unit="(kg/kg)/s" />
    618         <field id="dqsphy"   long_name="Physics dQS"    unit="(kg/kg)/s" />
     628        <field id="dqsphy"   long_name="Physics dQS"    unit="(kg/kg)/s" />
     629        <field id="dqbsphy"   long_name="Physics dQBS"    unit="(kg/kg)/s" />
    619630        <field id="pr_con_l"    long_name="Convective precipitation lic"    unit="-" />
    620631        <field id="pr_con_i"    long_name="Convective precipitation ice"    unit="-" />
    621632        <field id="pr_lsc_l"    long_name="Large scale precipitation lic"    unit="-" />
    622         <field id="pr_lsc_i"    long_name="Large scale precipitation ice"    unit="-" />
     633        <field id="pr_lsc_i"    long_name="Large scale precipitation ice"    unit="-" />
     634        <field id="pr_bs"    long_name="precipitation blowing snow"    unit="-" />
    623635        <field id="re"    long_name="Cloud droplet effective radius"    unit="um" />
    624636        <field id="fl"    long_name="Denominator of Cloud droplet effective radius"    unit="-" />
     
    643655        <field id="dqldyn"    long_name="Dynamics dQL"    unit="(kg/kg)/s" />
    644656        <field id="dqsdyn"    long_name="Dynamics dQS"    unit="(kg/kg)/s" />
    645         <field id="dudyn"    long_name="Dynamics dU"    unit="m/s2" />
     657        <field id="dqbsdyn"    long_name="Dynamics dQBS"    unit="(kg/kg)/s" />       
     658        <field id="dudyn"    long_name="Dynamics dU"    unit="m/s2" />
    646659        <field id="dvdyn"    long_name="Dynamics dV"    unit="m/s2" />
    647660        <field id="dtcon"    long_name="Convection dT"    unit="K/s" />
     
    673686        <field id="dqvdf_w" long_name="dqvdf within_wake" unit="(kg/kg)/s" />
    674687        <field id="dteva"    long_name="Reevaporation dT"    unit="K/s" />
    675         <field id="dqeva"    long_name="Reevaporation dQ"    unit="(kg/kg)/s" />
     688        <field id="dqeva"    long_name="Reevaporation dQ"    unit="(kg/kg)/s" />
     689        <field id="dqbsvdf"    long_name="Boundary-layer dQBS"    unit="(kg/kg)/s" />
     690        <field id="dqbsbs"    long_name="Blowing snow dQBS"    unit="(kg/kg)/s" />
     691        <field id="dqbs"    long_name="Blowing snow dQ"    unit="(kg/kg)/s" />
     692        <field id="dtbs"    long_name="Blowing snow dT"    unit="(K)/s" />
    676693        <field id="dqlscth"    long_name="dQ therm."    unit="(kg/kg)/s" />
    677694        <field id="dqlscst"    long_name="dQ strat."    unit="(kg/kg)/s" />
     
    756773        <field id="qcontr2"     long_name="Contrail qcontr2"     unit="kg/kg" />
    757774        <field id="Tcontr"     long_name="Contrail Tcontr"     unit="K" />
     775        <field id="fluxt"     long_name="flux h"     unit="W/m2" />
     776        <field id="fluxq"     long_name="flux q"     unit="-" />
    758777    </field_group>
    759778
  • LMDZ6/branches/LMDZ_cdrag_LSCE/DefLists/file_def_histhf_lmdz.xml

    r4298 r4669  
    22<file_definition>
    33    <file_group id="defile">
    4         <file id="histhf" name="histhf" output_freq="3h" output_level="_AUTO_" enabled="_AUTO_" compression_level="2" sync_freq="3h">
     4        <file id="histhf" name="histhf" output_freq="1h" output_level="_AUTO_" enabled="_AUTO_" compression_level="2" sync_freq="1h">
    55           
    66            <!-- VARS 1D -->
     
    1212       
    1313            <!-- VARS 2D -->
    14             <field_group group_ref="remap_3h" >
     14            <field_group group_ref="remap_1h" >
    1515              <field_group grid_ref="grid_out" >
    16                 <field field_ref="phis" level="10" />
     16                <field field_ref="phis" level="5" />
    1717                <field field_ref="aire" level="10" operation="once" />
    1818                <field field_ref="contfracATM" level="5" operation="once" />
    1919                <field field_ref="contfracOR" level="5" />
    20                 <field field_ref="flat" level="10" />
    21                 <field field_ref="slp" level="10" />
     20                <field field_ref="flat" level="5" />
     21                <field field_ref="slp" level="5" />
    2222                <field field_ref="sza" level="10" />
    2323                <field field_ref="ptstar" level="10" />
    2424                <field field_ref="pt0" level="10" />
    25                 <field field_ref="tsol" level="10" />
     25                <field field_ref="tsol" level="5" />
    2626                <field field_ref="t2m" level="5" />
    2727                <field field_ref="t2m_min" level="10" operation="minimum" />
     
    3232                <field field_ref="t2m_sic" level="10" />
    3333                <field field_ref="gusts" level="10" />
    34                 <field field_ref="wind10m" level="10" />
     34                <field field_ref="wind10m" level="5" />
    3535                <field field_ref="wind100m" level="10" />
    3636                <field field_ref="wind10max" level="10" operation="maximum" />
    3737                <field field_ref="sicf" level="10" />
    3838                <field field_ref="q2m" level="5" />
    39                 <field field_ref="ustar" level="10" />
     39                <field field_ref="ustar" level="5" />
    4040                <field field_ref="u10m" level="5" />
    4141                <field field_ref="v10m" level="5" />
     
    6767                <field field_ref="plun" level="10" />
    6868                <field field_ref="pluc" level="10" />
    69                 <field field_ref="snow" level="5" />
    70                 <field field_ref="evap" level="10" />
    71                 <field field_ref="evap_ter" level="10" />
     69                <field field_ref="snow" level="5" />
     70                <field field_ref="bsfall" level="5" />
     71                <field field_ref="evap" level="5" />
     72                <field field_ref="snowerosion" level="5" />
     73                <field field_ref="rhosnow_lic" level="5" />
     74                <field field_ref="ustart_lic" level="5" />
     75                <field field_ref="evap_ter" level="10" />
    7276                <field field_ref="evap_lic" level="10" />
    7377                <field field_ref="evap_oce" level="10" />
    7478                <field field_ref="evap_sic" level="10" />
    75                 <field field_ref="msnow" level="10" />
     79                <field field_ref="msnow" level="5" />
    7680                <field field_ref="fsnow" level="10" />
    7781                <field field_ref="tops" level="10" />
     
    99103                <field field_ref="SWupSFC" level="10" />
    100104                <field field_ref="SWupSFCclr" level="10" />
    101                 <field field_ref="SWdnSFC" level="10" />
     105                <field field_ref="SWdnSFC" level="5" />
    102106                <field field_ref="SWdnSFCclr" level="10" />
    103107                <field field_ref="LWupSFC" level="10" />
    104108                <field field_ref="LWupSFCclr" level="10" />
    105                 <field field_ref="LWdnSFC" level="10" />
     109                <field field_ref="LWdnSFC" level="5" />
    106110                <field field_ref="LWdnSFCclr" level="10" />
    107111                <field field_ref="bils" level="10" />
     
    112116                <field field_ref="bils_enthalp" level="10" />
    113117                <field field_ref="bils_latent" level="10" />
    114                 <field field_ref="sens" level="10" />
     118                <field field_ref="sens" level="5" />
    115119                <field field_ref="sens_x" level="11" />
    116120                <field field_ref="sens_w" level="11" />
     
    198202                <field field_ref="cldm" level="10" />
    199203                <field field_ref="cldh" level="10" />
    200                 <field field_ref="cldt" level="10" />
     204                <field field_ref="cldt" level="5" />
    201205                <field field_ref="cldq" level="10" />
    202206                <field field_ref="lwp" level="10" />
     
    214218                <field field_ref="wbeff" level="10" />
    215219                <field field_ref="convoccur" level="10" />
    216                 <field field_ref="prw" level="10" />
     220                <field field_ref="prw" level="5" />
    217221                <field field_ref="prlw" level="10" />
    218                 <field field_ref="prsw" level="10" />
     222                <field field_ref="prsw" level="10" />
     223                <field field_ref="prbsw" level="5" />
    219224                <field field_ref="s_pblh" level="10" />
    220225                <field field_ref="s_pblt" level="10" />
     
    246251                    <field field_ref="u850" level="10" />
    247252                    <field field_ref="u700" level="10" />
    248                     <field field_ref="u500" level="10" />
     253                    <field field_ref="u500" level="5" />
    249254                    <field field_ref="u200" level="10" />
    250255                    <field field_ref="u100" level="10" />
     
    253258                    <field field_ref="v850" level="10" />
    254259                    <field field_ref="v700" level="10" />
    255                     <field field_ref="v500" level="10" />
     260                    <field field_ref="v500" level="5" />
    256261                    <field field_ref="v200" level="10" />
    257262                    <field field_ref="v100" level="10" />
     
    267272                    <field field_ref="t850" level="10" />
    268273                    <field field_ref="t700" level="10" />
    269                     <field field_ref="t500" level="10" />
     274                    <field field_ref="t500" level="5" />
    270275                    <field field_ref="t200" level="10" />
    271276                    <field field_ref="t100" level="10" />
     
    281286                    <field field_ref="z850" level="10" />
    282287                    <field field_ref="z700" level="10" />
    283                     <field field_ref="z500" level="10" />
     288                    <field field_ref="z500" level="5" />
    284289                    <field field_ref="z200" level="10" />
    285290                    <field field_ref="z100" level="10" />
     
    299304                <field field_ref="v10_oce" level="10" />
    300305                <field field_ref="v10_sic" level="10" />
    301                 <field field_ref="rh2m" level="10" />
     306                <field field_ref="rh2m" level="5" />
    302307                <field field_ref="rh2m_min" level="10" operation="minimum" />
    303308                <field field_ref="rh2m_max" level="10" operation="maximum" />
     
    503508                <field field_ref="concno3" level="10" />
    504509                <field field_ref="ec550aer" level="10" />
    505                 <field field_ref="lwcon" level="10" />
    506                 <field field_ref="iwcon" level="10" />
     510                <field field_ref="lwcon" level="5" />
     511                <field field_ref="iwcon" level="5" />
    507512                <field field_ref="temp" level="4" />
    508513                <field field_ref="theta" level="10" />
    509                 <field field_ref="ovap" level="10" />
     514                <field field_ref="ovap" level="5" />
    510515                <field field_ref="ovapinit" level="10" />
    511                 <field field_ref="oliq" level="10" />
    512                 <field field_ref="ocond" level="10" />
     516                <field field_ref="oliq" level="5" />
     517                <field field_ref="ocond" level="5" />
     518                <field field_ref="qbs" level="5" />
    513519                <field field_ref="geop" level="10" />
    514520                <field field_ref="geoph" level="10" />
    515                 <field field_ref="vitu" level="10" />
    516                 <field field_ref="vitv" level="10" />
     521                <field field_ref="vitu" level="5" />
     522                <field field_ref="vitv" level="5" />
    517523                <field field_ref="vitw" level="6" />
    518                 <field field_ref="pres" level="10" />
     524                <field field_ref="pres" level="5" />
    519525                <field field_ref="paprs" level="10" />
    520526                <field field_ref="mass" level="10" />
    521                 <field field_ref="zfull" level="10" />
     527                <field field_ref="zfull" level="5" />
    522528                <field field_ref="zhalf" level="10" />
    523529                <field field_ref="rneb" level="10" />
     
    525531                <field field_ref="rnebls" level="10" />
    526532                <field field_ref="rneblsvol" level="10" />
    527                 <field field_ref="rhum" level="10" />
     533                <field field_ref="rhum" level="10" />
     534                <field field_ref="rhi" level="5" />
    528535                <field field_ref="ozone" level="10" />
    529536                <field field_ref="upwd" level="10" />
    530537                <field field_ref="ep" level="10" />
    531538                <field field_ref="duphy" level="10" />
    532                 <field field_ref="dtphy" level="10" />
    533                 <field field_ref="dqphy" level="10" />
     539                <field field_ref="dtphy" level="5" />
     540                <field field_ref="dqphy" level="5" />
    534541                <field field_ref="dqlphy" level="10" />
    535542                <field field_ref="dqsphy" level="10" />
     
    537544                <field field_ref="pr_con_i" level="10" />
    538545                <field field_ref="pr_lsc_l" level="10" />
    539                 <field field_ref="pr_lsc_i" level="10" />
     546                <field field_ref="pr_lsc_i" level="10" />
     547                <field field_ref="pr_bs" level="5" />
    540548                <field field_ref="re" level="10" />
    541549                <field field_ref="fl" level="10" />
     
    555563                <field field_ref="dnwd0" level="10" />
    556564                <field field_ref="mc" level="10" />
    557                 <field field_ref="dtdyn" level="10" />
    558                 <field field_ref="dqdyn" level="10" />
     565                <field field_ref="dtdyn" level="5" />
     566                <field field_ref="dqdyn" level="5" />
    559567                <field field_ref="dqldyn" level="10" />
    560568                <field field_ref="dqsdyn" level="10" />
     
    576584                <field field_ref="dtlsc" level="10" />
    577585                <field field_ref="dtlschr" level="10" />
    578                 <field field_ref="dqlsc" level="10" />
     586                <field field_ref="dqlsc" level="10" />
     587                <field field_ref="dtbs" level="5" />
     588                <field field_ref="dqbs" level="5" />
    579589                <field field_ref="beta_prec" level="10" />
    580590                <field field_ref="dtvdf" level="10" />
  • LMDZ6/branches/LMDZ_cdrag_LSCE/DefLists/namelist_ecrad

    r4489 r4669  
    66!
    77&radiation_driver
    8  do_parallel             = true,   ! Use OpenMP parallelization?
    9  nblocksize              = 8,      ! Number of columns to process per thread
    10 
    11 ! Verbosity level: 0=none, 1=warning, 2=info, 3=progress, 4=detailed, 5=debug
    12  iverbose = 5,
    13 
    14  fractional_std=1.,                 ! (-)    vertically constant fractional standard deviation of in-cloud liquid water [0, 3]    *0.75*
    15  overlap_decorr_length=1000,          ! (m)    vertically constant overlap decorrelation length                           [0, 5000] *2000*
    16                                       !        following Hogan and Illingworth 2000, if overlap_scheme_name=="Exp-Ran"
     8 ok_effective_size=false,             !        Cloud effective size taken into account for SPARTACUS solver if true
     9 ok_separation=true,                  !        Cloud separation scale taken into account for SPARTACUS solver if true
     10 frac_std=1.,                         ! (-)    vertically constant fractional standard deviation of in-cloud liquid water [0, 3]    *0.75*
     11 overlap_decorr_length=2000,          ! (m)    vertically constant overlap decorrelation length                           [0, 5000] *2000*
     12                                      !        following Hogan and Illingworth 2000, if overlap_scheme_name=="Exp-Ran"
    1713                                      !        Ctrue(i,j) = a*Cmax(i,j) + (1-a)*Crand(i,j) ; a = exp(DZ(i,j)/overlap_decorr_length)
    18  high_inv_effective_size = 0.0001     ! (m-1)  override input profile      [e-6, e-3] *e-4*
    19  middle_inv_effective_size = 0.0001   ! (m-1)  override input profile      [e-6, e-3] *e-4*
    20  low_inv_effective_size = 0.005       ! (m-1)  override input profile      [e-5, e-2] *e-3*
    21  effective_size_scaling = 1.0,        ! (-)    scale effective size
    22 
    23  !sw_albedo              = 0.2,        ! (-)    override shortwave albedo, no default     [0,1]
    24  !lw_emissivity          = 1.0,        ! (-)    override longwave emissivity, no default  [0,1]
    25 
    26  q_liquid_scaling       = 1.,         ! (-)    scale liquid water content input profile
    27  q_ice_scaling          = 1.,         ! (-)    scale ice water content input profile
    28  cloud_fraction_scaling = 1.,         ! (-)    scale cloud fraction input profile
    29 
    30  overlap_decorr_length_scaling=1.,    ! (-)    scale overlap decorrelation length
    31 
    32  !skin_temperature       =  294.2,     ! (K)    override skin temperature from input file, no default
    33  !cos_solar_zenith_angle =  .5,        ! (-)    override cos solar zenith angle from input file, no default
    34 
    35  !solar_irradiance_override= 1368.143, ! (Wm-2) override total solar irradiance, default value is 1366.0
     14 high_inv_effective_size = 0.0001,     ! (m-1)  override input profile      [e-6, e-3] *e-4*
     15 middle_inv_effective_size = 0.0001,   ! (m-1)  override input profile      [e-6, e-3] *e-4*
     16 low_inv_effective_size = 0.005,       ! (m-1)  override input profile      [e-5, e-2] *e-3*
     17 cloud_separation_scale_toa = 14000.0,
     18 cloud_separation_scale_surface = 2500.0,
     19 cloud_separation_scale_power = 3.5,
     20 cloud_inhom_separation_factor = 0.75,
    3621/
    3722
     
    4126!
    4227&radiation
    43 do_lw = true,
    44 do_sw_direct = true,
    45 do_3d_effects           = true,           ! Represent 3D effects?
    46 do_lw_side_emissivity   = true,
    47 do_3d_lw_multilayer_effects = true,
    48 directory_name          = "data",         ! Location of configuration files
     28 do_lw = true,
     29 do_sw_direct = true,
     30 do_3d_effects          = true,           ! Represent 3D effects?
     31 do_lw_side_emissivity   = true,
     32 do_3d_lw_multilayer_effects = true,
     33 directory_name         = "data",         ! Location of configuration files
    4934
    50 liquid_model_name = "SOCRATES",           ! Liquid droplet scattering model: "Monochromatic", "HuStamnes", *"SOCRATES"*, "Slingo"
    51 ice_model_name    = "Fu-IFS",             ! Ice particle scattering model: "Monochromatic", "Fu-PSRAD", "Fu-IFS", *"Baran"*, "Baran2016", "Baran2017", "Yi"
    52 cloud_pdf_shape_name    = "Gamma",        ! To describe liquid water horizontal distribution: *"Gamma"*, "Lognormal"
     35 liquid_model_name = "SOCRATES",           ! Liquid droplet scattering model: "Monochromatic", "HuStamnes", *"SOCRATES"*, "Slingo"
     36 ice_model_name    = "Fu-IFS",             ! Ice particle scattering model: "Monochromatic", "Fu-PSRAD", "Fu-IFS", *"Baran"*, "Baran2016", "Baran2017", "Yi"
     37 cloud_pdf_shape_name    = "Gamma",        ! To describe liquid water horizontal distribution: *"Gamma"*, "Lognormal"
    5338
    54 sw_solver_name          = "Tripleclouds",    ! Solver: "Homogeneous", *"McICA"*, "SPARTACUS", "Tripleclouds"
    55 lw_solver_name          = "Tripleclouds",    ! enable 3D effects
    56 sw_encroachment_name    = "Computed",     ! "Maximum" = old behaviour (also "Minimum"/*"Computed"*)
    57 overlap_scheme_name     = "Exp-Ran",      ! Cloud overlap: *"Exp-Ran"*, "Max-Ran", "Exp-Exp"
     39 sw_solver_name          = "Tripleclouds",    ! Solver: "Homogeneous", *"McICA"*, "SPARTACUS", "Tripleclouds"
     40 lw_solver_name          = "Tripleclouds",    ! enable 3D effects
     41 sw_encroachment_name    = "Computed",     ! "Maximum" = old behaviour (also "Minimum"/*"Computed"*)
     42 overlap_scheme_name     = "Exp-Ran",      ! Cloud overlap: *"Exp-Ran"*, "Max-Ran", "Exp-Exp"
    5843
    59 overhead_sun_factor = 0.06,
    60 do_lw_cloud_scattering  = true,           ! Clouds scatter in the longwave?
    61 do_lw_aerosol_scattering= true,           ! Aerosols scatter in the longwave?
    62 cloud_inhom_decorr_scaling = 0.5,
    63 do_save_radiative_properties = false,     ! Save raw radiation properties in radiative_properties.nc?
     44 overhead_sun_factor = 0.06,
     45 do_lw_cloud_scattering         = true,           ! Clouds scatter in the longwave?
     46 do_lw_aerosol_scattering= true,           ! Aerosols scatter in the longwave?
     47 cloud_inhom_decorr_scaling = 0.5,
     48 do_save_radiative_properties = false,     ! Save raw radiation properties in radiative_properties.nc?
    6449
    6550! Verbosity level: 0=none, 1=warning, 2=info, 3=progress, 4=detailed, 5=debug
    66 iverbose                = 1,
    67 use_aerosols            = false,          ! Include aerosols in radiation calculations?
    68 n_aerosol_types         = 13,             
    69 aerosol_optics_override_file_name = "aerosol_optics_lmdz.nc"
    70 do_save_spectral_flux   = false,          ! Save spectral fluxes in output file?
    71 do_save_gpoint_flux     = false,          ! Save fluxes per g-point in output file?
    72 gas_model_name          = "RRTMG-IFS",    ! Gas model: "Monochromatic", *"RRTMG-IFS"*, "RRTMG-PSRAD"
     51 iverbose               = 1,
     52 use_aerosols           = false,          ! Include aerosols in radiation calculations?
     53 n_aerosol_types         = 13,             
     54 !aerosol_optics_override_file_name = "aerosol_optics_lmdz.nc"
     55 do_save_spectral_flux   = false,          ! Save spectral fluxes in output file?
     56 do_save_gpoint_flux     = false,          ! Save fluxes per g-point in output file?
     57 gas_model_name          = "RRTMG-IFS",    ! Gas model: "Monochromatic", *"RRTMG-IFS"*, "RRTMG-PSRAD"
    7358/
  • LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_IRENE-AMD.path

    r4489 r4669  
     1
    12NETCDF_INCDIR="-I$NETCDFFORTRAN_INCDIR"
    23NETCDF_LIBDIR="-L$NETCDFFORTRAN_LIBDIR -L$NETCDF_LIBDIR"
    34NETCDF_LIB="-lnetcdff -lnetcdf"
    45
    5 NETCDF95_INCDIR=-I$LMDGCM/../../include/NetCDF95
    6 NETCDF95_LIBDIR=-L$LMDGCM/../../lib
     6NETCDF95_INCDIR=-I$NETCDF95_INCDIR
     7NETCDF95_LIBDIR=-L$NETCDF95_LIBDIR
    78NETCDF95_LIB=-lnetcdf95
    89
     
    2526INCA_LIBDIR="-L$LMDGCM/../INCA/build/lib"
    2627INCA_LIB="-lchimie"
    27 
    28 
  • LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_IRENE.env

    r4510 r4669  
    1212module load c++/gnu/8.3.0
    1313module load c/gnu/8.3.0
     14module load netcdf95
  • LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_IRENE.path

    r4515 r4669  
    44NETCDF_LIB="-lnetcdff -lnetcdf"
    55
    6 NETCDF95_INCDIR=-I/ccc/cont003/home/igcmg/igcmg/Tools/irene/include/NetCDF95
    7 NETCDF95_LIBDIR=-L/ccc/cont003/home/igcmg/igcmg/Tools/irene/lib
     6NETCDF95_INCDIR=-I$NETCDF95_INCDIR
     7NETCDF95_LIBDIR=-L$NETCDF95_LIBDIR
    88NETCDF95_LIB=-lnetcdf95
    99
  • LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_JEANZAY.env

    r4385 r4669  
    44module load netcdf/4.7.2-mpi
    55module load netcdf-fortran/4.5.2-mpi
     6module load netcdf95
    67
    78module load gcc/6.5.0
  • LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_JEANZAY.path

    r4499 r4669  
    66NETCDF_LIB="-lnetcdff -lnetcdf"
    77
    8 NETCDF95_INCDIR=-I/gpfswork/rech/lmd/rdzt899/build/Libraries_release/NetCDF95/modules
    9 NETCDF95_LIBDIR=-L/gpfswork/rech/lmd/rdzt899/build/Libraries_release/NetCDF95
     8NETCDF95_INCDIR=-I$NETCDF95_ROOT/include/NetCDF95
     9NETCDF95_LIBDIR=-L$NETCDF95_ROOT/lib
    1010NETCDF95_LIB=-lnetcdf95
    1111
  • LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-ifort_LSCE.path

    r4489 r4669  
    1 NETCDF_LIBDIR="-L/usr/local/install/netcdf-4.3.2p/lib -lnetcdff -lnetcdf -L/usr/local/install/hdf5-1.8.9p/lib -lhdf5_hl -lhdf5 -lhdf5 -lz -lcurl"
    2 NETCDF_INCDIR=-I/usr/local/install/netcdf-4.3.2p/include
    3 NETCDF95_INCDIR=$LMDGCM/../../include
    4 NETCDF95_LIBDIR=$LMDGCM/../../lib
    5 IOIPSL_INCDIR="$LMDGCM/../../lib -I$LMDGCM/../IOIPSL/inc"
    6 IOIPSL_LIBDIR="$LMDGCM/../../lib -lioipsl -L$LMDGCM/../IOIPSL/lib"
    7 ORCH_INCDIR=$LMDGCM/../../lib
    8 ORCH_LIBDIR=$LMDGCM/../../lib
    9 OASIS_INCDIR=
    10 OASIS_LIBDIR=
    11 INCA_LIBDIR=$LMDGCM/../INCA/config/lib
    12 INCA_INCDIR=$LMDGCM/../INCA/config/inc
    13 XIOS_INCDIR=$LMDGCM/../XIOS/inc
    14 XIOS_LIBDIR=$LMDGCM/../XIOS/lib
     1NETCDF_INCDIR="-I/usr/local/install/netcdf-4.3.2p/include"
     2NETCDF_LIBDIR="-L/usr/local/install/netcdf-4.3.2p/lib -L/usr/local/install/hdf5-1.8.9p/lib"
     3NETCDF_LIB="-lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lhdf5 -lz -lcurl"
     4
     5NETCDF95_INCDIR=-I/home/orchideeshare/igcmg/Tools/NetCDF95.intel-fcomp.2020/include/NetCDF95
     6NETCDF95_LIBDIR=-L/home/orchideeshare/igcmg/Tools/NetCDF95.intel-fcomp.2020/lib
     7NETCDF95_LIB=-lnetcdf95
     8
     9IOIPSL_INCDIR="-I$LMDGCM/../../lib -I$LMDGCM/../IOIPSL/inc"
     10IOIPSL_LIBDIR="-L$LMDGCM/../../lib -L$LMDGCM/../IOIPSL/lib"
     11IOIPSL_LIB="-lioipsl"
     12
     13XIOS_INCDIR="-I$LMDGCM/../XIOS/inc"
     14XIOS_LIBDIR="-L$LMDGCM/../XIOS/lib"
     15XIOS_LIB="-lxios -lstdc++"
     16
     17ORCH_INCDIR="-I$LMDGCM/../../lib"
     18ORCH_LIBDIR="-L$LMDGCM/../../lib"
     19ORCH_LIB=
     20
     21OASIS_INCDIR="-I$LMDGCM/../../oasis3-mct/BLD/build/lib/psmile.MPI1"
     22OASIS_LIBDIR="-L$LMDGCM/../../oasis3-mct/BLD/lib"
     23OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu"
     24
     25INCA_INCDIR="-I$LMDGCM/../INCA/build/inc"
     26INCA_LIBDIR="-L$LMDGCM/../INCA/build/lib"
     27INCA_LIB="-lchimie"
  • LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-ifort_MESOIPSL.env

    r4305 r4669  
    88module load netcdf-fortran/4.5.3-mpi
    99module load netcdf-c/4.7.4-mpi
    10 
     10module load netcdf95
  • LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-ifort_MESOIPSL.path

    r4428 r4669  
    11NETCDF_INCDIR="-I $NETCDF_FORTRAN_ROOT/include -I${HDF5_ROOT}/include"
    22NETCDF_LIBDIR="-L${NETCDF_FORTRAN_ROOT}/lib -L${NETCDF_C_ROOT}/lib -L${HDF5_ROOT}"
    3 NETCDF_LIB="-lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz -lcurl -lstdc++"
     3NETCDF_LIB="-lnetcdff -lnetcdf"
     4
     5NETCDF95_INCDIR=-I$NETCDF95_ROOT/include/NetCDF95
     6NETCDF95_LIBDIR=-L$NETCDF95_ROOT/lib
     7NETCDF95_LIB=-lnetcdf95
    48
    59IOIPSL_INCDIR="-I$LMDGCM/../../lib -I$LMDGCM/../IOIPSL/inc"
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/dyn3d/conf_gcm.F90

    r4470 r4669  
    1515  USE comconst_mod, ONLY: dissip_deltaz, dissip_factz, dissip_zref, &
    1616                          iflag_top_bound, mode_top_bound, tau_top_bound, &
    17                           ngroup
     17                          ngroup, maxlatfilter
    1818  USE logic_mod, ONLY: fxyhypb, iflag_phys, ok_etat0, ok_gradsfile, &
    1919                       ok_guide, ok_limit, ok_strato, purmats, read_start, &
     
    310310  CALL getin('dissip_deltaz',dissip_deltaz )
    311311  CALL getin('dissip_zref',dissip_zref )
     312
     313  ! maxlatfilter
     314  maxlatfilter=-1.0
     315  CALL getin('maxlatfilter',maxlatfilter)
     316  if (maxlatfilter > 90) &
     317       call abort_gcm("conf_gcm", 'maxlatfilter should be <=90', 1)
     318
    312319
    313320  ! ngroup
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/dyn3d_common/comconst_mod.F90

    r2597 r4669  
    2626      INTEGER iflag_top_bound ! sponge type
    2727      INTEGER ngroup ! parameter to group points (along longitude) near poles
     28      REAL maxlatfilter ! maximum latitude (in degrees) above which filter is active
    2829      INTEGER mode_top_bound  ! sponge mode
    2930      REAL tau_top_bound ! inverse of sponge characteristic time scale (Hz)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/dyn3d_common/infotrac.F90

    r4487 r4669  
    3636!  |--------------------+-----------------------+-----------------+---------------+----------------------------|
    3737!  | water in different |    water tagging      |  water isotopes | other tracers | additional tracers moments |
    38 !  | phases: H2O_[gls] |      isotopes         |                 |               |  for higher order schemes  |
     38!  | phases: H2O_[glsb] |      isotopes         |                 |               |  for higher order schemes  |
    3939!  |--------------------+-----------------------+-----------------+---------------+----------------------------|
    4040!  |                    |                       |                 |               |                            |
     
    6565!  | longName    | Long name (with adv. scheme suffix) for outputs      | ttext       |                        |
    6666!  | type        | Type (so far: tracer or tag)                         | /           | tracer,tag             |
    67 !  | phase       | Phases list ("g"as / "l"iquid / "s"olid)             | /           | [g][l][s]              |
     67!  | phase       | Phases list ("g"as / "l"iquid / "s"olid / "b"lowing) | /           | [g][l][s][b]           |
    6868!  | component   | Name(s) of the merged/cumulated section(s)           | /           | coma-separated names   |
    6969!  | iGeneration | Generation (>=1)                                     | /           |                        |
     
    9191!  | trac   | ntiso  | Isotopes + tagging tracers list + number         | / | ntraciso       |                 |
    9292!  | zone   | nzone  | Geographic tagging zones   list + number         | / | ntraceurs_zone |                 |
    93 !  | phase  | nphas  | Phases                     list + number         |                    | [g][l][s], 1:3 |
     93!  | phase  | nphas  | Phases                     list + number         |                    |[g][l][s][b],1:4 |
    9494!  | iqIsoPha        | Index in "qx"           = f(name(1:ntiso)),phas) | iqiso              | 1:nqtot         |
    9595!  | itZonIso        | Index in "trac(1:ntiso)"= f(zone, name(1:niso))  | index_trac         | 1:ntiso         |
     
    227227      nbtr = nqINCA + nqCO2                                          !--- Number of tracers passed to phytrac
    228228      nqtrue = nbtr + nqo                                            !--- Total number of "true" tracers
    229       IF(ALL([2,3] /= nqo)) CALL abort_gcm(modname, 'Only 2 or 3 water phases allowed ; found nqo='//TRIM(int2str(nqo)), 1)
     229      IF(ALL([2,3,4,5] /= nqo)) CALL abort_gcm(modname, 'Only 2, 3, 4 , 5 water phases allowed ; found nqo='//TRIM(int2str(nqo)), 1)
    230230      ALLOCATE(hadv(nqtrue), hadv_inca(nqINCA), conv_flg_inca(nqINCA), solsym_inca(nqINCA))
    231231      ALLOCATE(vadv(nqtrue), vadv_inca(nqINCA),  pbl_flg_inca(nqINCA))
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/dyn3dmem/conf_gcm.F90

    r4469 r4669  
    1919  USE comconst_mod, ONLY: dissip_deltaz, dissip_factz, dissip_zref, &
    2020                          iflag_top_bound, mode_top_bound, tau_top_bound, &
    21                           ngroup
     21                          ngroup, maxlatfilter
    2222  USE logic_mod, ONLY: fxyhypb, iflag_phys, ok_etat0, ok_gradsfile, &
    2323                       ok_guide, ok_limit, ok_strato, purmats, read_start, &
     
    340340  CALL getin('dissip_deltaz',dissip_deltaz )
    341341  CALL getin('dissip_zref',dissip_zref )
     342
     343
     344  !maxlatfilter
     345  maxlatfilter = -1.0
     346  CALL getin('maxlatfilter',maxlatfilter)
     347  if (maxlatfilter > 90) &
     348       call abort_gcm("conf_gcm", 'maxlatfilter should be <=90', 1)
     349 
    342350
    343351  ! ngroup
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/filtrez/filtreg_mod.F90

    r4440 r4669  
    1616  USE serre_mod, ONLY: alphax
    1717  USE logic_mod, ONLY: fxyhypb, ysinus
     18  USE comconst_mod, ONLY: maxlatfilter
     19
    1820    !    ... H. Upadhyaya, O.Sharma   ...
    1921    !
     
    125127    ! as length dx becomes of the same size as dy
    126128    !
     129    ! if maxlatfilter >0, prescribe the colat0 value from the .def files
     130   
     131    IF (maxlatfilter .LT. 0.) THEN
     132
    127133    colat0  =  MIN( 0.5, dymin/dxmin )
    128134    ! colat0  =  1.
     
    133139       alphax = 0.
    134140    ENDIF
     141
     142    ELSE
     143
     144    colat0=(90.0-maxlatfilter)/180.0*pi       
     145
     146    ENDIF
     147   
     148   
     149   
    135150    !
    136151    PRINT 50, colat0,alphax
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/grid/dimension/makdim

    r4440 r4669  
    1212fi
    1313
    14 if ( ( ($1 % 8 != 0)) && (( $# == 3 ) ) || ( $1 == 1 ) )
     14if ( (( $1 % 8 != 0 )) && (( $# == 3 )) || (( $1 == 1 )) )
    1515then
    1616    echo "The number of longitudes must be a multiple of 8."
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/misc/readTracFiles_mod.f90

    r4454 r4669  
    114114  !--- SOME PARAMETERS THAT ARE NOT LIKELY TO CHANGE OFTEN
    115115  CHARACTER(LEN=maxlen), SAVE      :: tran0        = 'air'      !--- Default transporting fluid
    116   CHARACTER(LEN=maxlen), PARAMETER :: old_phases   = 'vlir'     !--- Old phases for water (no separator)
    117   CHARACTER(LEN=maxlen), PARAMETER :: known_phases = 'glsr'     !--- Known phases initials
     116  CHARACTER(LEN=maxlen), PARAMETER :: old_phases   = 'vlirb'     !--- Old phases for water (no separator)
     117  CHARACTER(LEN=maxlen), PARAMETER :: known_phases = 'glsrb'     !--- Known phases initials
    118118  INTEGER, PARAMETER :: nphases = LEN_TRIM(known_phases)        !--- Number of phases
    119119  CHARACTER(LEN=maxlen), SAVE      :: phases_names(nphases) &   !--- Known phases names
    120                                              = ['gaseous', 'liquid ', 'solid  ', 'cloud ']
     120                                = ['gaseous', 'liquid ', 'solid  ', 'cloud  ','blosno ']
    121121  CHARACTER(LEN=1), SAVE :: phases_sep  =  '_'                  !--- Phase separator
    122122  LOGICAL,          SAVE :: tracs_merge = .TRUE.                !--- Merge/stack tracers lists
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/add_phys_tend_mod.F90

    r3435 r4669  
    1616CONTAINS
    1717
    18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap)
     18SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap)
    1919  ! ======================================================================
    2020  ! Ajoute les tendances de couche limite, soit determinees par la
     
    4949  ! ------------
    5050  REAL zdu(klon, klev), zdv(klon, klev)
    51   REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev)
     51  REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev)
    5252  CHARACTER *(*) text
    5353  REAL paprs(klon,klev+1)
     
    7676    PRINT *, ' add_pbl_tend, zzdt ', zzdt
    7777    PRINT *, ' add_pbl_tend, zzdq ', zzdq
    78     CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0)
     78    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0)
    7979  ELSE
    80     CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0)
     80    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0)
    8181  END IF
    8282
     
    8787! $Id: add_phys_tend.F90 2611 2016-08-03 15:41:26Z jyg $
    8888!
    89 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,paprs,text, &
     89SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, &
    9090                          abortphy,flag_inhib_tend, itap, diag_mode)
    9191!======================================================================
     
    102102USE dimphy, ONLY: klon, klev
    103103USE phys_state_var_mod, ONLY : phys_tstep
    104 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q_seri, t_seri
     104USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri
    105105USE phys_state_var_mod, ONLY: ftsol
    106106USE geometry_mod, ONLY: longitude_deg, latitude_deg
    107107USE print_control_mod, ONLY: prt_level
    108108USE cmp_seri_mod
    109 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    110   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     109USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     110  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    111111IMPLICIT none
    112112  include "YOMCST.h"
     
    116116!------------
    117117REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdu, zdv
    118 REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi
     118REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi, zdqbs
    119119REAL, DIMENSION(klon,klev+1),   INTENT(IN)    :: paprs
    120120CHARACTER*(*),                  INTENT(IN)    :: text
     
    136136! Save variables, used in diagnostic mode (diag_mode=1).
    137137REAL, DIMENSION(klon,klev)   :: sav_u_seri, sav_v_seri
    138 REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_q_seri
     138REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri
    139139REAL, DIMENSION(klon,klev)   :: sav_t_seri
    140140REAL, DIMENSION(klon,klev)   :: sav_zdq
     
    163163! zh_ql_col----  total enthalpy of liquid watter (J/m2)
    164164! zh_qs_col----  total enthalpy of solid watter  (J/m2)
     165! zh_qbs_col----  total enthalpy of blowing snow  (J/m2)
    165166! zqw_col------  total mass of watter vapour (kg/m2)
    166167! zql_col------  total mass of liquid watter (kg/m2)
    167 ! zqs_col------  total mass of solid watter (kg/m2)
     168! zqs_col------  total mass of cloud ice (kg/m2)
     169! zqbs_col------  total mass of blowing snow (kg/m2)
    168170! zek_col------  total kinetic energy (kg/m2)
    169171!
     
    172174REAL zql_col(klon,2)
    173175REAL zqs_col(klon,2)
     176REAL zqbs_col(klon,2)
    174177REAL zek_col(klon,2)
    175178REAL zh_dair_col(klon,2)
    176 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2)
     179REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2)
    177180REAL zh_col(klon,2)
    178181
     
    213216    sav_ql_seri(:,:) = ql_seri(:,:)
    214217    sav_qs_seri(:,:) = qs_seri(:,:)
     218    sav_qbs_seri(:,:) = qbs_seri(:,:)
    215219    sav_q_seri(:,:)  = q_seri(:,:)
    216220    sav_t_seri(:,:)  = t_seri(:,:)
     
    236240
    237241    CALL integr_v(klon, klev, zcpvap, &
    238                   t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &
    239                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    240                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     242                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
     243                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     244                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    241245
    242246  end if ! end if (fl_ebil .GT. 0)
     
    250254     ql_seri(:,:)=ql_seri(:,:)+zdql(:,:)
    251255     qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:)
     256     qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:)
    252257
    253258!======================================================================
     
    432437        ql_seri(:,:)=ql_seri(:,:)-zdql(:,:)
    433438        qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:)
     439        qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:)
    434440      ENDIF
    435441
     
    446452
    447453    CALL integr_v(klon, klev, zcpvap, &
    448                   t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &
    449                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    450                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     454                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
     455                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     456                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    451457
    452458    ! ------------------------------------------------
     
    457463    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
    458464    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
    459     d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:)
     465    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
     466    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
    460467
    461468    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
     
    465472    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
    466473    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
     474    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
    467475
    468476    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
     
    476484    ql_seri(:,:) = sav_ql_seri(:,:)
    477485    qs_seri(:,:) = sav_qs_seri(:,:)
     486    qbs_seri(:,:) = sav_qbs_seri(:,:)
    478487    q_seri(:,:)  = sav_q_seri(:,:)
    479488    t_seri(:,:)  = sav_t_seri(:,:)
     
    484493END SUBROUTINE add_phys_tend
    485494
    486 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &
    487                           zdu,zdv,zdt,zdq,zdql,zdqs,paprs,text)
     495SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, &
     496                          zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text)
    488497!======================================================================
    489498! Ajoute les tendances des variables physiques aux variables
     
    501510USE print_control_mod, ONLY: prt_level
    502511USE cmp_seri_mod
    503 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    504   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     512USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     513  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    505514IMPLICIT none
    506515  include "YOMCST.h"
     
    511520INTEGER, INTENT(IN)                           :: nlon, nlev
    512521REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: uu, vv
    513 REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs
     522REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs, qbs
    514523REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdu, zdv
    515 REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs
     524REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs, zdqbs
    516525REAL, DIMENSION(nlon,nlev+1),   INTENT(IN)    :: paprs
    517526CHARACTER*(*),                  INTENT(IN)    :: text
     
    520529!--------
    521530REAL, DIMENSION(nlon,nlev)      :: uu_n, vv_n
    522 REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n
     531REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n, qbs_n
    523532
    524533
     
    543552! zqw_col------  total mass of watter vapour (kg/m2)
    544553! zql_col------  total mass of liquid watter (kg/m2)
    545 ! zqs_col------  total mass of solid watter (kg/m2)
     554! zqs_col------  total mass of cloud ice (kg/m2)
     555! zqbs_col------  total mass of blowing snow (kg/m2)
    546556! zek_col------  total kinetic energy (kg/m2)
    547557!
     
    550560REAL zql_col(nlon,2)
    551561REAL zqs_col(nlon,2)
     562REAL zqbs_col(nlon,2)
    552563REAL zek_col(nlon,2)
    553564REAL zh_dair_col(nlon,2)
    554 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2)
     565REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2)
    555566REAL zh_col(nlon,2)
    556567
     
    585596
    586597    CALL integr_v(nlon, nlev, rcpv, &
    587                   temp, qv, ql, qs, uu, vv, zairm, &
    588                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    589                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     598                  temp, qv, ql, qs, qbs, uu, vv, zairm, &
     599                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     600                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    590601
    591602  end if ! end if (fl_ebil .GT. 0)
     
    600611     ql_n(:,:)=ql(:,:)+zdql(:,:)
    601612     qs_n(:,:)=qs(:,:)+zdqs(:,:)
     613     qbs_n(:,:)=qbs(:,:)+zdqbs(:,:)
    602614     temp_n(:,:)=temp(:,:)+zdt(:,:)
    603615
     
    616628
    617629    CALL integr_v(nlon, nlev, rcpv, &
    618                   temp_n, qv_n, ql_n, qs_n, uu_n, vv_n, zairm, &
    619                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    620                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     630                  temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, &
     631                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     632                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    621633
    622634    ! ------------------------------------------------
     
    627639    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
    628640    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
    629     d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:)
     641    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
     642    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
    630643
    631644    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
     
    639652    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
    640653    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
     654    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
    641655
    642656    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
     
    649663
    650664SUBROUTINE integr_v(nlon, nlev, zcpvap, &
    651                     temp, qv, ql, qs, uu, vv, zairm,  &
    652                     zqw_col, zql_col, zqs_col, zek_col, zh_dair_col, &
    653                     zh_qw_col, zh_ql_col, zh_qs_col, zh_col)
     665                    temp, qv, ql, qs, qbs, uu, vv, zairm,  &
     666                    zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, &
     667                    zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col)
    654668
    655669IMPLICIT none
     
    658672INTEGER,                    INTENT(IN)    :: nlon,nlev
    659673REAL,                       INTENT(IN)    :: zcpvap
    660 REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, uu, vv
     674REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, qbs, uu, vv
    661675REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: zairm
    662676REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqw_col
    663677REAL, DIMENSION(nlon),      INTENT(OUT)   :: zql_col
    664 REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col
     678REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col, zqbs_col
    665679REAL, DIMENSION(nlon),      INTENT(OUT)   :: zek_col
    666680REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_dair_col
    667681REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qw_col
    668682REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_ql_col
    669 REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col
     683REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col, zh_qbs_col
    670684REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_col
    671685
     
    677691    zql_col(:) = 0.
    678692    zqs_col(:) = 0.
     693    zqbs_col(:) = 0.
    679694    zek_col(:) = 0.
    680695    zh_dair_col(:) = 0.
     
    682697    zh_ql_col(:) = 0.
    683698    zh_qs_col(:) = 0.
     699    zh_qbs_col(:) = 0.
    684700
    685701!JLD    write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice
     
    694710        zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k)
    695711        zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k)
     712        zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k)
    696713        ! Kinetic Energy
    697714        zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k)
     
    702719        zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k)   !jyg
    703720        zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k)   !jyg
     721        zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k)   !jyg
    704722      END DO
    705723    END DO
    706724    ! compute total air enthalpy
    707     zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:)
     725    zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:)
    708726
    709727END SUBROUTINE integr_v
     
    720738USE dimphy, ONLY: klon, klev
    721739USE phys_state_var_mod, ONLY : phys_tstep
    722 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con
     740USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall
    723741USE geometry_mod, ONLY: longitude_deg, latitude_deg
    724742USE print_control_mod, ONLY: prt_level
    725743USE cmp_seri_mod
    726 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    727   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     744USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     745  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    728746USE phys_local_var_mod, ONLY: evap, sens
    729 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q_seri, t_seri &
     747USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri &
    730748   &  , rain_lsc, snow_lsc
    731749USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd
     
    764782      bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) &
    765783    &         + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1)
     784  CASE("bs") param
     785      bilq_bnd = - bs_fall(1)
     786      bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1)
    766787  CASE("convection") param
    767788      bilq_bnd = - rain_con(1) - snow_con(1)
     
    800821  if ( prt_level .GE. 5) then
    801822    write(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd
    802     write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1)
    803     write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1)
     823    write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1), d_qbs_col(1)
     824    write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1),d_h_qbs_col(1)
    804825  end if
    805826
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/atke_turbulence_ini_mod.F90

    r4481 r4669  
    55save
    66
    7   integer :: iflag_atke
    8   !$OMP THREADPRIVATE(iflag_atke)
     7integer :: iflag_atke, iflag_num_atke
     8!$OMP THREADPRIVATE(iflag_atke, iflag_num_atke)
    99  real :: kappa = 0.4 ! Von Karman constant
    1010  !$OMP THREADPRIVATE(kappa)
     
    4545  CALL getin_p('iflag_atke',iflag_atke)
    4646
     47  ! flag that controls the numerical treatment of diffusion coeffiient calculation
     48  iflag_num_atke=0
     49  CALL getin_p('iflag_num_atke',iflag_num_atke)
     50
    4751  ! asymptotic mixing length [m]
    4852  l0=150.0
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/calcratqs.F90

    r4009 r4669  
    77           qtc_cv, sigt_cv, zqsat,             &
    88           tke,tke_dissip,lmix,wprime, &
    9            t2m,q2m,fm_therm, &
     9           t2m,q2m,fm_therm,cell_area,&
    1010           ratqs,ratqsc,ratqs_inter)
    1111
     
    3737real, dimension(klon,klev),intent(in) :: wake_deltaq,wake_s
    3838real, dimension(klon,nbsrf),intent(in) :: t2m,q2m
     39real, dimension(klon), intent(in) :: cell_area
    3940! Output
    4041real, dimension(klon,klev),intent(inout) :: ratqs,ratqsc,ratqs_inter
     
    4748real facteur,zfratqs1,zfratqs2
    4849real, dimension(klon,klev) :: ratqs_hetero,ratqs_oro,ratqs_tke
    49 
     50real resol,resolmax,fact
    5051
    5152!-------------------------------------------------------------------------
     
    142143           *( tanh( (ratqsp0-pplay(:,k))/ratqsdp) + 1.)
    143144         enddo
     145
     146
     147      else if (iflag_ratqs==5) then
     148! Dependency of ratqs on model resolution
     149! Audran, Meryl, Lea, Gwendal and Etienne
     150! April 2023
     151        resolmax=sqrt(maxval(cell_area))
     152         do k=1,klev
     153            do i=1,klon
     154              resol=sqrt(cell_area(i))
     155              fact=sqrt(resol/resolmax)
     156              ratqss(i,k)=ratqsbas*fact+0.5*(ratqshaut-ratqsbas)*fact &
     157              *( tanh( (ratqsp0-pplay(i,k))/ratqsdp) + 1.)
     158           enddo
     159         enddo
     160
    144161
    145162       else if (iflag_ratqs .GT. 9) then
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/calcul_divers.h

    r3435 r4669  
    22! $Id$
    33!
     4! itap : nombre de pas de temps de la physique
     5! itapm1 : somme du nombre de pas de temps du/des mois precedent/s.
     6! (itap - itapm1) : nombre de pas de temps du mois courant
    47!
    5 ! Initialisations diverses au tout debut
     8! Ne pas modifier les IFs ci-dessous impliquant itapm1,
     9! autrement les resultats seront faux !!
     10!
     11! Ici on utilise MOD(itap - itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.1)
     12! pour detecter le debut de chaque mois lorsque  l on tourne par an.
     13!
     14! IM, 26.05.2023
     15!
     16!
     17! Initialisations itapm1 du premier mois
    618      IF(itap.EQ.1) THEN
    719         itapm1=0
     20!        print*,'initialisation itap=1 itapm1 ',itapm1
    821      ENDIF
    922
     23!
    1024! Initialisation debut de mois
    1125      IF(itap.EQ.itapm1+1) THEN
     26         ndayrain_mth(:)=0.
     27!        print*,'Initialisation ndayrain_mth ',itap
     28      ENDIF
     29!
     30! Initialisation debut de chaque jour
     31      IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN
    1232        nday_rain(:)=0.
    1333!       print*,'initialisation mois suivants day_rain itap',itap
    1434      ENDIF
    15 
    16 ! Calcul fin de journee : total_rain, nday_rain
    17       IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN
    18 !        print*,'calcul nday_rain itap ',itap
     35!
     36! Calcul a chaque pas de temps de la physique
    1937         DO i = 1, klon
    2038            total_rain(i)=rain_fall(i)+snow_fall(i) 
    21             IF(total_rain(i).GT.0.) nday_rain(i)=nday_rain(i)+1.
     39            IF(total_rain(i).GT.0.) nday_rain(i)=1.
     40         ENDDO
     41!
     42! Cumul en fin de journee
     43      IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN
     44         DO i = 1, klon
     45            ndayrain_mth(i)=ndayrain_mth(i)+nday_rain(i)
    2246         ENDDO
    2347      ENDIF
    24 
     48!
    2549! Initialisation fin de mois
     50! Ne pas changer le IF ci-dessous, car le compteur itapm1 est augmente
     51! apres, dans la boucle !!!
     52! IM, 260523
    2653      IF(MOD(itap-itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.0) THEN
    2754        itapm1=itapm1+NINT(mth_len*un_jour/phys_tstep)
    28 !       print*,'initialisation itapm1 ',itapm1
     55!       print*,'fmois i i1 mjt',itap,itapm1,mth_len,un_jour,phys_tstep
    2956      ENDIF
    3057!
    3158! calcul temperatures minimale et maximale moyennees sur le mois
    3259!
    33 !initialisation debut de mois ou de journee pour les fichiers mensuels
     60!initialisation debut de mois pour les fichiers mensuels annuels
    3461  IF(itap.EQ.itapm1+1) THEN
    3562     t2m_min_mon=0.
    3663     t2m_max_mon=0.
    3764  ENDIF
     65!
     66!initialisation debut de journee pour les fichiers mensuels annuels
    3867  IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN
    3968     zt2m_min_mon=zt2m
    4069     zt2m_max_mon=zt2m
    4170  ENDIF
    42 !calcul a chaque pas de temps pour les fichiers mensuels
     71!
     72!calcul sur tous les pas de temps pour les fichiers mensuels annuels
    4373     DO i = 1, klon
    4474        zt2m_min_mon(i)=MIN(zt2m(i),zt2m_min_mon(i))
    4575        zt2m_max_mon(i)=MAX(zt2m(i),zt2m_max_mon(i))
    4676     ENDDO
    47 !fin de journee
     77!
     78!fin journee
    4879  IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN
    4980   t2m_min_mon=t2m_min_mon+zt2m_min_mon
    5081   t2m_max_mon=t2m_max_mon+zt2m_max_mon
    5182  ENDIF
     83!
    5284!fin mois
    5385  IF(itap==itapm1) THEN
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/clesphys.h

    r4661 r4669  
    1818       REAL co2_ppm, co2_ppm0, solaire
    1919       INTEGER iflag_thermals,nsplit_thermals
     20       INTEGER iflag_physiq
    2021       REAL tau_thermals
    2122
     
    102103       LOGICAL :: ok_daily_climoz
    103104       LOGICAL :: ok_new_lscp
     105       LOGICAL :: ok_bs, ok_rad_bs
    104106! flag to bypass or not the phytrac module
    105107       INTEGER :: iflag_phytrac
     
    154156     &     , ok_chlorophyll,ok_conserv_q, adjust_tropopause             &
    155157     &     , ok_daily_climoz, ok_all_xml, ok_lwoff                      &
    156      &     , iflag_phytrac, ok_new_lscp                                 &
    157      &     ,  iflag_thermals,nsplit_thermals, tau_thermals   
     158     &     , iflag_phytrac, ok_new_lscp, ok_bs, ok_rad_bs               &
     159     &     ,  iflag_thermals,nsplit_thermals, tau_thermals              &
     160     &     , iflag_physiq
    158161       save /clesphys/
    159162!$OMP THREADPRIVATE(/clesphys/)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/cloudth_mod.F90

    r4380 r4669  
    11MODULE cloudth_mod
     2
    23
    34  IMPLICIT NONE
     
    1011     &           ratqs,zqs,t)
    1112
     13
     14      use lscp_ini_mod, only: iflag_cloudth_vert
    1215
    1316      IMPLICIT NONE
     
    2427#include "YOETHF.h"
    2528#include "FCTTRE.h"
    26 #include "nuage.h"
    2729
    2830      INTEGER itap,ind1,ind2
     
    262264
    263265      USE ioipsl_getin_p_mod, ONLY : getin_p
     266      use lscp_ini_mod, only: iflag_cloudth_vert
    264267
    265268      IMPLICIT NONE
     
    268271#include "YOETHF.h"
    269272#include "FCTTRE.h"
    270 #include "nuage.h"
    271273     
    272274      INTEGER itap,ind1,ind2
     
    593595     &           ratqs,zqs,t)
    594596
     597      use lscp_ini_mod, only: iflag_cloudth_vert
    595598
    596599      IMPLICIT NONE
     
    607610#include "YOETHF.h"
    608611#include "FCTTRE.h"
    609 #include "nuage.h"
    610612
    611613      INTEGER itap,ind1,ind2
     
    820822!===========================================================================
    821823
    822 
     824      use lscp_ini_mod, only: iflag_cloudth_vert
    823825      USE ioipsl_getin_p_mod, ONLY : getin_p
    824826      USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv, &
     
    830832#include "YOETHF.h"
    831833#include "FCTTRE.h"
    832 #include "nuage.h"
    833834     
    834835      INTEGER itap,ind1,ind2
     
    12831284     &           ratqs,zqs,T)
    12841285
    1285 
     1286      use lscp_ini_mod, only: iflag_cloudth_vert
    12861287      USE ioipsl_getin_p_mod, ONLY : getin_p
    12871288      USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv, &
     
    12931294#include "YOETHF.h"
    12941295#include "FCTTRE.h"
    1295 #include "nuage.h"
    12961296
    12971297
     
    15501550!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    15511551
    1552 
     1552      use lscp_ini_mod, only: iflag_cloudth_vert
    15531553      USE ioipsl_getin_p_mod, ONLY : getin_p
    15541554      USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
     
    15611561#include "YOETHF.h"
    15621562#include "FCTTRE.h"
    1563 #include "nuage.h"
    15641563     
    15651564
     
    23212320
    23222321    INCLUDE "YOMCST.h"
    2323     INCLUDE "nuage.h"
    23242322
    23252323    INTEGER, INTENT(IN) :: ind1,ind2, klev           ! horizontal and vertical indices and dimensions
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/conf_phys_m.F90

    r4661 r4669  
    3535
    3636    INCLUDE "conema3.h"
    37     INCLUDE "fisrtilp.h"
    3837    INCLUDE "nuage.h"
    3938    INCLUDE "YOMCST.h"
     
    171170    LOGICAL,SAVE :: ok_adj_ema_omp
    172171    INTEGER,SAVE :: iflag_clw_omp
    173     REAL,SAVE :: cld_lc_lsc_omp,cld_lc_con_omp,cld_tau_lsc_omp,cld_tau_con_omp
    174     REAL,SAVE :: ffallv_lsc_omp, ffallv_con_omp,coef_eva_omp,coef_eva_i_omp
    175     LOGICAL,SAVE :: reevap_ice_omp
    176     INTEGER,SAVE :: iflag_pdf_omp
    177172    INTEGER,SAVE :: iflag_ice_thermo_omp
    178173    LOGICAL,SAVE :: ok_ice_sursat_omp
    179174    LOGICAL,SAVE :: ok_plane_h2o_omp, ok_plane_contrail_omp
    180     INTEGER,SAVE :: iflag_t_glace_omp
    181     INTEGER,SAVE :: iflag_cloudth_vert_omp
    182     INTEGER,SAVE :: iflag_rain_incloud_vol_omp
    183     INTEGER,SAVE :: iflag_vice_omp, iflag_rei_omp
     175    INTEGER,SAVE :: iflag_rei_omp
    184176    REAL,SAVE :: rad_froid_omp, rad_chau1_omp, rad_chau2_omp
    185     REAL,SAVE :: t_glace_min_omp, t_glace_max_omp
    186     REAL,SAVE :: exposant_glace_omp
    187     INTEGER,SAVE :: iflag_gammasat_omp
    188177    REAL,SAVE :: rei_min_omp, rei_max_omp
    189178    INTEGER,SAVE :: iflag_sic_omp, iflag_inertie_omp
     
    200189    REAL, SAVE ::  fmagic_omp, pmagic_omp
    201190    INTEGER,SAVE :: iflag_pbl_omp,lev_histhf_omp,lev_histday_omp,lev_histmth_omp
    202     INTEGER,SAVE :: iflag_pbl_split_omp
     191    INTEGER,SAVE :: iflag_pbl_split_omp,iflag_physiq_omp
    203192!FC
    204193    INTEGER,SAVE :: ifl_pbltree_omp
     
    234223    INTEGER, SAVE :: iflag_ener_conserv_omp
    235224    LOGICAL, SAVE :: ok_conserv_q_omp
    236     INTEGER, SAVE :: iflag_fisrtilp_qsat_omp
    237     INTEGER, SAVE :: iflag_bergeron_omp
    238225    LOGICAL,SAVE  :: ok_strato_omp
    239226    LOGICAL,SAVE  :: ok_hines_omp, ok_gwd_rando_omp
     
    259246    INTEGER,SAVE  :: nit_bulk_omp
    260247    INTEGER,SAVE  :: kz0_omp
     248    LOGICAL, SAVE :: ok_bs_omp, ok_rad_bs_omp
    261249
    262250
     
    10231011    CALL getin('ok_conserv_q',ok_conserv_q_omp)
    10241012
    1025     !Config  Key  = iflag_fisrtilp_qsat
    1026     !Config  Desc = Flag de fisrtilp
    1027     !Config  Def  = 0
    1028     !Config  Help = Flag  pour la pluie grande-échelle les options suivantes existent :
    1029     !Config         >1 nb iterations pour converger dans le calcul de qsat
    1030     iflag_fisrtilp_qsat_omp = 0
    1031     CALL getin('iflag_fisrtilp_qsat',iflag_fisrtilp_qsat_omp)
    1032 
    1033     !Config  Key  = iflag_bergeron
    1034     !Config  Desc = Flag de fisrtilp
    1035     !Config  Def  = 0
    1036     !Config  Help = Flag  pour la pluie grande-échelle les options suivantes existent :
    1037     !Config         0 pas d effet Bergeron
    1038     !Config         1 effet Bergeron pour T<0
    1039     iflag_bergeron_omp = 0
    1040     CALL getin('iflag_bergeron',iflag_bergeron_omp)
    1041 
    10421013    !
    10431014    !
     
    10981069    iflag_clw_omp = 0
    10991070    CALL getin('iflag_clw',iflag_clw_omp)
    1100     !
    1101     !Config Key  = cld_lc_lsc
    1102     !Config Desc = 
    1103     !Config Def  = 2.6e-4
    1104     !Config Help =
    1105     !
    1106     cld_lc_lsc_omp = 2.6e-4
    1107     CALL getin('cld_lc_lsc',cld_lc_lsc_omp)
    1108     !
    1109     !Config Key  = cld_lc_con
    1110     !Config Desc = 
    1111     !Config Def  = 2.6e-4
    1112     !Config Help =
    1113     !
    1114     cld_lc_con_omp = 2.6e-4
    1115     CALL getin('cld_lc_con',cld_lc_con_omp)
    1116     !
    1117     !Config Key  = cld_tau_lsc
    1118     !Config Desc = 
    1119     !Config Def  = 3600.
    1120     !Config Help =
    1121     !
    1122     cld_tau_lsc_omp = 3600.
    1123     CALL getin('cld_tau_lsc',cld_tau_lsc_omp)
    1124     !
    1125     !Config Key  = cld_tau_con
    1126     !Config Desc = 
    1127     !Config Def  = 3600.
    1128     !Config Help =
    1129     !
    1130     cld_tau_con_omp = 3600.
    1131     CALL getin('cld_tau_con',cld_tau_con_omp)
    1132     !
    1133     !Config Key  = ffallv_lsc
    1134     !Config Desc = 
    1135     !Config Def  = 1.
    1136     !Config Help =
    1137     !
    1138     ffallv_lsc_omp = 1.
    1139     CALL getin('ffallv_lsc',ffallv_lsc_omp)
    1140     !
    1141     !Config Key  = ffallv_con
    1142     !Config Desc = 
    1143     !Config Def  = 1.
    1144     !Config Help =
    1145     !
    1146     ffallv_con_omp = 1.
    1147     CALL getin('ffallv_con',ffallv_con_omp)
    1148     !
    1149     !Config Key  = coef_eva
    1150     !Config Desc = 
    1151     !Config Def  = 2.e-5
    1152     !Config Help =
    1153     !
    1154     coef_eva_omp = 2.e-5
    1155     CALL getin('coef_eva',coef_eva_omp)
    1156     !
    1157     !Config Key  = coef_eva_i
    1158     !Config Desc = 
    1159     !Config Def  = 2.e-5
    1160     !Config Help =
    1161     !
    1162     coef_eva_i_omp = coef_eva_omp
    1163     CALL getin('coef_eva_i',coef_eva_i_omp)
    1164     !
    1165     !Config Key  = reevap_ice
    1166     !Config Desc = 
    1167     !Config Def  = .FALSE.
    1168     !Config Help =
    1169     !
    1170     reevap_ice_omp = .FALSE.
    1171     CALL getin('reevap_ice',reevap_ice_omp)
     1071   
    11721072
    11731073    !Config Key  = iflag_ratqs
     
    12851185
    12861186    !
    1287     !Config Key  = iflag_pdf
    1288     !Config Desc = 
    1289     !Config Def  = 0
    1290     !Config Help =
    1291     !
    1292     iflag_pdf_omp = 0
    1293     CALL getin('iflag_pdf',iflag_pdf_omp)
    1294     !
    12951187    !Config Key  = fact_cldcon
    12961188    !Config Desc = 
     
    14431335    CALL getin('rad_chau2',rad_chau2_omp)
    14441336
    1445     !
    1446     !Config Key  = t_glace_min
    1447     !Config Desc = 
    1448     !Config Def  = 258.
    1449     !Config Help =
    1450     !
    1451     t_glace_min_omp = 258.
    1452     CALL getin('t_glace_min',t_glace_min_omp)
    1453 
    1454     !
    1455     !Config Key  = t_glace_max
    1456     !Config Desc = 
    1457     !Config Def  = 273.13
    1458     !Config Help =
    1459     !
    1460     t_glace_max_omp = 273.13
    1461     CALL getin('t_glace_max',t_glace_max_omp)
    1462 
    1463     !
    1464     !Config Key  = exposant_glace
    1465     !Config Desc = 
    1466     !Config Def  = 2.
    1467     !Config Help =
    1468     !
    1469     exposant_glace_omp = 1.
    1470     CALL getin('exposant_glace',exposant_glace_omp)
    1471 
    1472     !
    1473     !Config Key  = iflag_gammasat
    1474     !Config Desc = 
    1475     !Config Def  = 0
    1476     !Config Help =
    1477     !
    1478     iflag_gammasat_omp=0
    1479     CALL getin('iflag_gammasat',iflag_gammasat_omp)
    1480 
    1481 
    1482     !
    1483     !Config Key  = iflag_t_glace
    1484     !Config Desc = 
    1485     !Config Def  = 0
    1486     !Config Help =
    1487     !
    1488     iflag_t_glace_omp = 0
    1489     CALL getin('iflag_t_glace',iflag_t_glace_omp)
    1490 
    1491     !
    1492     !Config Key  = iflag_cloudth_vert
    1493     !Config Desc = 
    1494     !Config Def  = 0
    1495     !Config Help =
    1496     !
    1497     iflag_cloudth_vert_omp = 0
    1498     CALL getin('iflag_cloudth_vert',iflag_cloudth_vert_omp)
    1499 
    1500     !
    1501     !Config Key  = iflag_rain_incloud_vol
    1502     !Config Desc = 
    1503     !Config Def  = 0
    1504     !Config Help =
    1505     !
    1506     iflag_rain_incloud_vol_omp = 0
    1507     CALL getin('iflag_rain_incloud_vol',iflag_rain_incloud_vol_omp)
    1508 
    1509     !
    1510     !Config Key  = iflag_vice
    1511     !Config Desc = 
    1512     !Config Def  = 0
    1513     !Config Help =
    1514     !
    1515     iflag_vice_omp = 0
    1516     CALL getin('iflag_vice',iflag_vice_omp)
    15171337
    15181338    !Config Key  = iflag_rei
     
    16951515    CALL getin('iflag_pbl',iflag_pbl_omp)
    16961516
     1517    iflag_physiq_omp = 0 ! 0: std, 1: with physiqex output, 2: for physiqex
     1518    CALL getin('iflag_physiq',iflag_physiq_omp)
     1519
    16971520!FC
    16981521    !Config Key  = ifl_pbltree
     
    17441567    nsplit_thermals_omp = 1
    17451568    CALL getin('nsplit_thermals',nsplit_thermals_omp)
    1746 
    1747     !Config Key  = alp_bl_k
    1748     !Config Desc =
    1749     !Config Def  = 0.
    1750     !Config Help =
    1751     !
     1569    !
     1570    !Config Key  = nsplit_thermals
     1571    !Config Desc =
     1572    !Config Def  = 0
     1573    !Config Help =
    17521574    alp_bl_k_omp = 1.
    17531575    CALL getin('alp_bl_k',alp_bl_k_omp)
     
    23902212    !Config Help = ...
    23912213
     2214
     2215
     2216    ok_bs_omp = .FALSE.
     2217    CALL getin('ok_bs', ok_bs_omp)
     2218    !
     2219    !Config Key  = ok_bs_omp
     2220    !Config Desc = include blowing snow
     2221    !Config Def  = .FALSE.
     2222    !Config Help = ...
     2223
     2224
     2225    ok_rad_bs_omp = .FALSE.
     2226    CALL getin('ok_rad_bs', ok_rad_bs_omp)
     2227    !
     2228    !Config Key  = ok_rad_bs_omp
     2229    !Config Desc = include blowing snow radiative effect
     2230    !Config Def  = .FALSE.
     2231    !Config Help = ...
    23922232
    23932233    ecrit_LES_omp = 1./8.
     
    24772317    iflag_ener_conserv = iflag_ener_conserv_omp
    24782318    ok_conserv_q = ok_conserv_q_omp
    2479     iflag_fisrtilp_qsat = iflag_fisrtilp_qsat_omp
    2480     iflag_bergeron = iflag_bergeron_omp
    2481 
    24822319    epmax = epmax_omp
    24832320    coef_epmax_cape = coef_epmax_cape_omp
    24842321    ok_adj_ema = ok_adj_ema_omp
    24852322    iflag_clw = iflag_clw_omp
    2486     cld_lc_lsc = cld_lc_lsc_omp
    2487     cld_lc_con = cld_lc_con_omp
    2488     cld_tau_lsc = cld_tau_lsc_omp
    2489     cld_tau_con = cld_tau_con_omp
    2490     ffallv_lsc = ffallv_lsc_omp
    2491     ffallv_con = ffallv_con_omp
    2492     coef_eva = coef_eva_omp
    2493     coef_eva_i = coef_eva_i_omp
    2494     reevap_ice = reevap_ice_omp
    2495     iflag_pdf = iflag_pdf_omp
    24962323    solarlong0 = solarlong0_omp
    24972324    qsol0 = qsol0_omp
     
    25042331    inertie_lic = inertie_lic_omp
    25052332    inertie_sno = inertie_sno_omp
     2333    ok_bs = ok_bs_omp
     2334    ok_rad_bs=ok_rad_bs_omp
    25062335    rad_froid = rad_froid_omp
    25072336    rad_chau1 = rad_chau1_omp
    25082337    rad_chau2 = rad_chau2_omp
    2509     t_glace_min = t_glace_min_omp
    2510     t_glace_max = t_glace_max_omp
    2511     exposant_glace = exposant_glace_omp
    2512     iflag_gammasat=iflag_gammasat_omp
    2513     iflag_t_glace = iflag_t_glace_omp
    2514     iflag_cloudth_vert=iflag_cloudth_vert_omp
    2515     iflag_rain_incloud_vol=iflag_rain_incloud_vol_omp
    2516     iflag_vice=iflag_vice_omp
    25172338    iflag_rei=iflag_rei_omp
    25182339    iflag_ice_thermo = iflag_ice_thermo_omp
     
    25332354    pmagic = pmagic_omp
    25342355    iflag_pbl = iflag_pbl_omp
     2356    iflag_physiq = iflag_physiq_omp
    25352357    iflag_pbl_split = iflag_pbl_split_omp
    25362358!FC
     
    29072729    WRITE(lunout,*) ' iflag_ener_conserv=',iflag_ener_conserv
    29082730    WRITE(lunout,*) ' ok_conserv_q=',ok_conserv_q
    2909     WRITE(lunout,*) ' iflag_fisrtilp_qsat=',iflag_fisrtilp_qsat
    2910     WRITE(lunout,*) ' iflag_bergeron=',iflag_bergeron
    29112731    WRITE(lunout,*) ' epmax = ', epmax
    29122732    WRITE(lunout,*) ' coef_epmax_cape = ', coef_epmax_cape
    29132733    WRITE(lunout,*) ' ok_adj_ema = ', ok_adj_ema
    29142734    WRITE(lunout,*) ' iflag_clw = ', iflag_clw
    2915     WRITE(lunout,*) ' cld_lc_lsc = ', cld_lc_lsc
    2916     WRITE(lunout,*) ' cld_lc_con = ', cld_lc_con
    2917     WRITE(lunout,*) ' cld_tau_lsc = ', cld_tau_lsc
    2918     WRITE(lunout,*) ' cld_tau_con = ', cld_tau_con
    2919     WRITE(lunout,*) ' ffallv_lsc = ', ffallv_lsc
    2920     WRITE(lunout,*) ' ffallv_con = ', ffallv_con
    2921     WRITE(lunout,*) ' coef_eva = ', coef_eva
    2922     WRITE(lunout,*) ' coef_eva_i = ', coef_eva_i
    2923     WRITE(lunout,*) ' reevap_ice = ', reevap_ice
    2924     WRITE(lunout,*) ' iflag_pdf = ', iflag_pdf
    29252735    WRITE(lunout,*) ' iflag_cld_th = ', iflag_cld_th
    29262736    WRITE(lunout,*) ' iflag_cld_cv = ', iflag_cld_cv
     
    29442754    WRITE(lunout,*) ' rad_chau1 = ',rad_chau1
    29452755    WRITE(lunout,*) ' rad_chau2 = ',rad_chau2
    2946     WRITE(lunout,*) ' t_glace_min = ',t_glace_min
    2947     WRITE(lunout,*) ' t_glace_max = ',t_glace_max
    2948     WRITE(lunout,*) ' exposant_glace = ',exposant_glace
    2949     WRITE(lunout,*) ' iflag_gammasat = ',iflag_gammasat
    2950     WRITE(lunout,*) ' iflag_t_glace = ',iflag_t_glace
    2951     WRITE(lunout,*) ' iflag_cloudth_vert = ',iflag_cloudth_vert
    2952     WRITE(lunout,*) ' iflag_rain_incloud_vol = ',iflag_rain_incloud_vol
    2953     WRITE(lunout,*) ' iflag_vice = ',iflag_vice
    29542756    WRITE(lunout,*) ' iflag_rei = ',iflag_rei
    29552757    WRITE(lunout,*) ' iflag_ice_thermo = ',iflag_ice_thermo
     
    29922794    WRITE(lunout,*) ' freq_calNMC = ',freq_calNMC
    29932795    WRITE(lunout,*) ' iflag_pbl = ', iflag_pbl
     2796    WRITE(lunout,*) ' iflag_physiq = ', iflag_physiq
    29942797!FC
    29952798    WRITE(lunout,*) ' ifl_pbltree = ', ifl_pbltree
     
    30172820    WRITE(lunout,*) ' inertie_lic = ', inertie_lic
    30182821    WRITE(lunout,*) ' inertie_sno = ', inertie_sno
     2822    WRITE(lunout,*) ' ok_bs = ', ok_bs
     2823    WRITE(lunout,*) ' ok_rad_bs = ', ok_rad_bs
    30192824    WRITE(lunout,*) ' f_cdrag_ter = ',f_cdrag_ter
    30202825    WRITE(lunout,*) ' f_cdrag_oce = ',f_cdrag_oce
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/mod_1D_cases_read2.F90

    r4288 r4669  
    11351135  !       endif
    11361136  timeit=(day-day_ju_ini_cas)*86400
    1137   print *,'day=',day
    1138   print *,'day_ju_ini_cas=',day_ju_ini_cas
    1139   print *,'pdt_cas=',pdt_cas
    1140   print *,'timeit=',timeit
    1141   print *,'nt_cas=',nt_cas
     1137  !print *,'day=',day
     1138  !print *,'day_ju_ini_cas=',day_ju_ini_cas
     1139  !print *,'pdt_cas=',pdt_cas
     1140  !print *,'timeit=',timeit
     1141  !print *,'nt_cas=',nt_cas
    11421142
    11431143  ! Determine the closest observation times:
     
    11551155  time_cas1=(it_cas1-1)*pdt_cas
    11561156  time_cas2=(it_cas2-1)*pdt_cas
    1157   print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2
     1157  !print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2
    11581158
    11591159  if (it_cas1 .gt. nt_cas) then
     
    13501350  !       endif
    13511351  timeit=(day-day_ju_ini_cas)*86400
    1352   print *,'day=',day
    1353   print *,'day_ju_ini_cas=',day_ju_ini_cas
    1354   print *,'pdt_cas=',pdt_cas
    1355   print *,'timeit=',timeit
    1356   print *,'nt_cas=',nt_cas
     1352  !print *,'day=',day
     1353  !print *,'day_ju_ini_cas=',day_ju_ini_cas
     1354  !print *,'pdt_cas=',pdt_cas
     1355  !print *,'timeit=',timeit
     1356  !print *,'nt_cas=',nt_cas
    13571357
    13581358  ! Determine the closest observation times:
     
    13701370  time_cas1=(it_cas1-1)*pdt_cas
    13711371  time_cas2=(it_cas2-1)*pdt_cas
    1372   print *,'timeit,pdt_cas,nt_cas=',timeit,pdt_cas,nt_cas
    1373   print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2
     1372  !print *,'timeit,pdt_cas,nt_cas=',timeit,pdt_cas,nt_cas
     1373  !print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2
    13741374
    13751375  if (it_cas1 .gt. nt_cas) then
     
    14031403     t_prof_cas(k) = t_cas(k,it_cas2)                                 &       
    14041404          -frac*(t_cas(k,it_cas2)-t_cas(k,it_cas1))
    1405      print *,'k,frac,plev_cas1,plev_cas2=',k,frac,plev_cas(k,it_cas1),plev_cas(k,it_cas2)
     1405     !print *,'k,frac,plev_cas1,plev_cas2=',k,frac,plev_cas(k,it_cas1),plev_cas(k,it_cas2)
    14061406     theta_prof_cas(k) = theta_cas(k,it_cas2)                         &                     
    14071407          -frac*(theta_cas(k,it_cas2)-theta_cas(k,it_cas1))
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/old_lmdz1d.F90

    r4361 r4669  
    1313       ftsol, beta_aridity, pbl_tke, pctsrf, radsol, rain_fall, snow_fall, ratqs, &
    1414       rnebcon, rugoro, sig1, w01, solaire_etat0, sollw, sollwdown, &
    15        solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, &
     15       solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, rneb_ancien, &
    1616       wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, &
    1717       wake_deltaq, wake_deltat, wake_s, wake_dens, &
     
    920920        u_ancien(1,:)=u(:)
    921921        v_ancien(1,:)=v(:)
     922        rneb_ancien(1,:)=0.
    922923
    923924        u10m=0.
     
    945946!------------------------------------------------------------------------
    946947!Al1 =============== restart option ==========================
     948        iflag_physiq=0
     949        call getin('iflag_physiq',iflag_physiq)
     950
    947951        if (.not.restart) then
    948952          iflag_pbl = 5
     
    12481252!! Increment state variables
    12491253!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1250 print*,'OLDLMDZ1D AANT'
    12511254    IF (flag_inhib_forcing == 0) then ! if tendency of forcings should be added
    1252 print*,'OLDLMDZ1D ARES' , forcing_sandu
    12531255
    12541256! pour les cas sandu et astex, on reclacule u,v,q,temp et teta dans 1D_nudge_sandu_astex.h
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/scm.F90

    r4361 r4669  
    99       ftsol, beta_aridity, pbl_tke, pctsrf, radsol, rain_fall, snow_fall, ratqs, &
    1010       rnebcon, rugoro, sig1, w01, solaire_etat0, sollw, sollwdown, &
    11        solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, &
     11       solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, rneb_ancien, &
    1212       wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, &
    1313       wake_deltaq, wake_deltat, wake_s, wake_dens, &
     
    678678        u_ancien(1,:)=u(:)
    679679        v_ancien(1,:)=v(:)
     680        rneb_ancien(1,:)=0.
    680681 
    681682        u10m=0.
     
    703704!------------------------------------------------------------------------
    704705!Al1 =============== restart option ======================================
     706        iflag_physiq=0
     707        call getin('iflag_physiq',iflag_physiq)
     708
    705709        if (.not.restart) then
    706710          iflag_pbl = 5
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_aerosol_optics.F90

    r4489 r4669  
    5353        ! properties and average to the spectral intervals of the
    5454        ! current gas-optics scheme
    55 !        call setup_general_aerosol_optics(config)
    56         call setup_general_aerosol_optics_lmdz(config,trim(config%aerosol_optics_file_name))
     55        call setup_general_aerosol_optics(config)
    5756      else
    5857        ! Read file containing optical properties already in the bands
     
    334333
    335334  end subroutine setup_general_aerosol_optics
    336 
    337     !---------------------------------------------------------------------
    338   ! Read LMDZ file containing high spectral resolution optical properties
    339   ! and average to the spectral intervals of the current gas-optics
    340   ! scheme
    341   subroutine setup_general_aerosol_optics_lmdz(config,file_name)
    342 
    343     use parkind1,                      only : jprb
    344     use yomhook,                       only : lhook, dr_hook
    345 !    use easy_netcdf,                   only : netcdf_file
    346     use radiation_config,              only : config_type
    347     use radiation_aerosol_optics_data, only : aerosol_optics_type
    348     use radiation_spectral_definition, only : SolarReferenceTemperature, &
    349          &                                    TerrestrialReferenceTemperature
    350     use radiation_io,                  only : nulout
    351     use netcdf95, only: nf95_open, nf95_inq_grp_full_ncid, nf95_close, &
    352          nf95_inq_dimid, nf95_inq_varid, nf95_inquire_dimension, &
    353          nf95_get_var, nf95_gw_var
    354     use netcdf, only: nf90_nowrite
    355 
    356 
    357     type(config_type), intent(inout), target :: config
    358 
    359 !    ! The NetCDF file containing the aerosol optics data
    360 !    type(netcdf_file)  :: file
    361 
    362     character(len=*), intent(in):: file_name
    363     ! NetCDF file containing the aerosol optics data
    364 
    365     ! Wavenumber points in NetCDF file
    366     real(jprb), allocatable :: wavenumber(:) ! cm-1
    367 
    368     ! Hydrophilic aerosol properties
    369     real(jprb), allocatable :: mass_ext_philic(:,:,:)    ! Mass-ext coefficient (m2 kg-1)
    370     real(jprb), allocatable :: ssa_philic(:,:,:)         ! Single-scattering albedo
    371     real(jprb), allocatable :: g_philic(:,:,:)           ! Asymmetry factor
    372     real(jprb), allocatable :: lidar_ratio_philic(:,:,:) ! Lidar ratio (sr)
    373 
    374     ! Hydrophobic aerosol properties
    375     real(jprb), allocatable :: mass_ext_phobic(:,:)      ! Mass-ext coefficient (m2 kg-1)
    376     real(jprb), allocatable :: ssa_phobic(:,:)           ! Single-scattering albedo
    377     real(jprb), allocatable :: g_phobic(:,:)             ! Asymmetry factor
    378     real(jprb), allocatable :: lidar_ratio_phobic(:,:)   ! Lidar ratio (sr)
    379 
    380     ! Mapping matrix between optical properties at the wavenumbers in
    381     ! the file, and spectral intervals used by the gas-optics scheme
    382     real(jprb), allocatable :: mapping(:,:)
    383 
    384     ! Pointer to the aerosol optics coefficients for brevity of access
    385     type(aerosol_optics_type), pointer :: ao
    386 
    387     ! Target monochromatic wavenumber for interpolation (cm-1)
    388     real(jprb) :: wavenumber_target
    389 
    390     ! Number of spectral points describing aerosol properties in the
    391     ! shortwave and longwave
    392     integer    :: nspecsw, nspeclw
    393 
    394     ! Number of monochromatic wavelengths required
    395     integer    :: nmono
    396 
    397     integer    :: n_type_philic, n_type_phobic, nrh, nwn
    398     integer    :: jtype, jwl, iwn
    399 
    400     ! Weight of first point in interpolation
    401     real(jprb) :: weight1
    402 
    403     real(jprb) :: hook_handle
    404 
    405     ! Local:
    406     integer ncid, grpid, dimid, varid
    407 
    408     if (lhook) call dr_hook('radiation_aerosol_optics:setup_general_aerosol_optics',0,hook_handle)
    409 
    410     ao => config%aerosol_optics
    411 
    412     ao%use_hydrophilic = .true.
    413     ao%use_monochromatic = .true.
    414     print*,'file_name= ',file_name
    415     call nf95_open(file_name, nf90_nowrite, ncid)
    416     call nf95_inq_grp_full_ncid(ncid, "Hydrophilic", grpid)
    417     call nf95_inq_dimid(grpid, "hur", dimid)
    418     call nf95_inquire_dimension(grpid, dimid, nclen = ao%nrh)
    419 !    allocate(ao%rh_lower(ao%nrh))
    420     call nf95_inq_varid(grpid, "hur_bounds", varid)
    421     call nf95_get_var(grpid, varid, ao%rh_lower, count_nc = [1, ao%nrh])
    422 
    423     ! Hydrophilic/LW_bands:
    424     call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/LW_bands", grpid)
    425     call nf95_inq_varid(grpid, "asymmetry", varid)
    426     call nf95_gw_var(grpid, varid, ao%g_lw_philic)
    427     call nf95_inq_varid(grpid, "single_scat_alb", varid)
    428     call nf95_gw_var(grpid, varid, ao%ssa_lw_philic)
    429     call nf95_inq_varid(grpid, "mass_ext", varid)
    430     call nf95_gw_var(grpid, varid, ao%mass_ext_lw_philic)
    431 
    432     ! Hydrophilic/SW_bands:
    433     call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/SW_bands", grpid)
    434     call nf95_inq_varid(grpid, "asymmetry", varid)
    435     call nf95_gw_var(grpid, varid, ao%g_sw_philic)
    436     ao%g_sw_philic = cshift(ao%g_sw_philic, 1)
    437     call nf95_inq_varid(grpid, "single_scat_alb", varid)
    438     call nf95_gw_var(grpid, varid, ao%ssa_sw_philic)
    439     ao%g_sw_philic = cshift(ao%ssa_sw_philic, 1)
    440     call nf95_inq_varid(grpid, "mass_ext", varid)
    441     call nf95_gw_var(grpid, varid, ao%mass_ext_sw_philic)
    442     ao%g_sw_philic = cshift(ao%mass_ext_sw_philic, 1)
    443 
    444     ! Hydrophilic/Monochromatic:
    445     call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/Monochromatic", grpid)
    446     call nf95_inq_varid(grpid, "mass_ext", varid)
    447     call nf95_gw_var(grpid, varid, ao%mass_ext_mono_philic)
    448 
    449     ! Hydrophobic/LW_bands:
    450     call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/LW_bands", grpid)
    451     call nf95_inq_varid(grpid, "asymmetry", varid)
    452     call nf95_gw_var(grpid, varid, ao%g_lw_phobic)
    453     call nf95_inq_varid(grpid, "single_scat_alb", varid)
    454     call nf95_gw_var(grpid, varid, ao%ssa_lw_phobic)
    455     call nf95_inq_varid(grpid, "mass_ext", varid)
    456     call nf95_gw_var(grpid, varid, ao%mass_ext_lw_phobic)
    457 
    458     ! Hydrophobic/SW_bands:
    459     call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/SW_bands", grpid)
    460     call nf95_inq_varid(grpid, "asymmetry", varid)
    461     call nf95_gw_var(grpid, varid, ao%g_sw_phobic)
    462     ao%g_sw_phobic = cshift(ao%g_sw_phobic, 1)
    463     call nf95_inq_varid(grpid, "single_scat_alb", varid)
    464     call nf95_gw_var(grpid, varid, ao%ssa_sw_phobic)
    465     ao%g_sw_phobic = cshift(ao%ssa_sw_phobic, 1)
    466     call nf95_inq_varid(grpid, "mass_ext", varid)
    467     call nf95_gw_var(grpid, varid, ao%mass_ext_sw_phobic)
    468     ao%g_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1)
    469 ! AI ATTENTION   
    470     call nf95_inq_varid(grpid, "wavenumber", varid)
    471     call nf95_gw_var(grpid, varid, wavenumber)
    472 
    473     ! Hydrophobic/Monochromatic:
    474     call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/Monochromatic", grpid)
    475     call nf95_inq_varid(grpid, "mass_ext", varid)
    476     call nf95_gw_var(grpid, varid, ao%mass_ext_mono_phobic)
    477 
    478 !    call file%get('wavenumber', wavenumber)
    479 !    nwn = size(wavenumber)
    480 
    481 !    call file%get_global_attribute('description_hydrophobic', &
    482 !         &                         ao%description_phobic_str)
    483 
    484 
    485 !      call file%get('relative_humidity1',      ao%rh_lower)
    486 
    487 !      call file%get_global_attribute('description_hydrophilic', &
    488 !           &                         ao%description_philic_str)
    489 
    490     ! Close aerosol scattering file
    491 !    call file%close()
    492 
    493     call nf95_close(ncid)
    494 
    495     ! Get array sizes
    496 !    ao%n_bands_lw = size(ao%mass_ext_lw_phobic, 1)
    497 !    ao%n_bands_sw = size(ao%mass_ext_sw_phobic, 1)
    498 !    ao%n_mono_wl = size(ao%mass_ext_mono_phobic, 1)
    499 !    ao%n_type_phobic = size(ao%mass_ext_lw_phobic, 2)
    500 !    ao%n_type_philic = size(ao%mass_ext_lw_philic, 3)
    501 
    502     ! Allocate memory for mapping arrays
    503 !    ao%ntype = ao%n_type_phobic + ao%n_type_philic
    504 !    allocate(ao%iclass(ao%ntype))
    505 !    allocate(ao%itype(ao%ntype))
    506 
    507 !    ao%iclass = IAerosolClassUndefined
    508 !    ao%itype  = 0
    509 
    510     n_type_phobic = size(mass_ext_phobic, 2)
    511     if (ao%use_hydrophilic) then
    512       n_type_philic = size(mass_ext_philic, 3)
    513       nrh = size(ao%rh_lower)
    514     else
    515       n_type_philic = 0
    516       nrh = 0
    517     end if
    518 
    519     if (config%do_cloud_aerosol_per_sw_g_point) then
    520       nspecsw = config%gas_optics_sw%spectral_def%ng
    521     else
    522       nspecsw = config%gas_optics_sw%spectral_def%nband
    523     end if
    524 
    525     if (config%do_cloud_aerosol_per_lw_g_point) then
    526       nspeclw = config%gas_optics_lw%spectral_def%ng
    527     else
    528       nspeclw = config%gas_optics_lw%spectral_def%nband
    529     end if
    530 
    531     if (allocated(ao%wavelength_mono)) then
    532       ! Monochromatic wavelengths also required
    533       nmono = size(ao%wavelength_mono)
    534     else
    535       nmono = 0
    536     end if
    537 
    538     call ao%allocate(n_type_phobic, n_type_philic, nrh, nspeclw, nspecsw, nmono)
    539 
    540     if (config%do_sw) then
    541       call config%gas_optics_sw%spectral_def%calc_mapping(SolarReferenceTemperature, &
    542            &  wavenumber, mapping, use_bands=(.not. config%do_cloud_aerosol_per_sw_g_point))
    543 
    544       ao%mass_ext_sw_phobic = matmul(mapping, mass_ext_phobic)
    545       ao%ssa_sw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic) &
    546            &           / ao%mass_ext_sw_phobic
    547       ao%g_sw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic*g_phobic) &
    548            &         / (ao%mass_ext_sw_phobic*ao%ssa_sw_phobic)
    549 
    550       if (ao%use_hydrophilic) then
    551         do jtype = 1,n_type_philic
    552           ao%mass_ext_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype))
    553           ao%ssa_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &
    554                &                                        *ssa_philic(:,:,jtype)) &
    555                &           / ao%mass_ext_sw_philic(:,:,jtype)
    556           ao%g_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &
    557                &                       *ssa_philic(:,:,jtype)*g_philic(:,:,jtype)) &
    558                &         / (ao%mass_ext_sw_philic(:,:,jtype)*ao%ssa_sw_philic(:,:,jtype))
    559         end do
    560       end if
    561     end if
    562     if (config%do_lw) then
    563       call config%gas_optics_lw%spectral_def%calc_mapping(TerrestrialReferenceTemperature, &
    564            &  wavenumber, mapping, use_bands=(.not. config%do_cloud_aerosol_per_lw_g_point))
    565 
    566       ao%mass_ext_lw_phobic = matmul(mapping, mass_ext_phobic)
    567       ao%ssa_lw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic) &
    568            &           / ao%mass_ext_lw_phobic
    569       ao%g_lw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic*g_phobic) &
    570            &         / (ao%mass_ext_lw_phobic*ao%ssa_lw_phobic)
    571 
    572       if (ao%use_hydrophilic) then
    573         do jtype = 1,n_type_philic
    574           ao%mass_ext_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype))
    575           ao%ssa_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &
    576                &                                        *ssa_philic(:,:,jtype)) &
    577                &           / ao%mass_ext_lw_philic(:,:,jtype)
    578           ao%g_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &
    579                &                       *ssa_philic(:,:,jtype)*g_philic(:,:,jtype)) &
    580                &         / (ao%mass_ext_lw_philic(:,:,jtype)*ao%ssa_lw_philic(:,:,jtype))
    581         end do
    582       end if
    583     end if
    584 
    585     if (allocated(ao%wavelength_mono)) then
    586       ! Monochromatic wavelengths also required
    587       do jwl = 1,nmono
    588         ! Wavelength (m) to wavenumber (cm-1)
    589         wavenumber_target = 0.01_jprb / ao%wavelength_mono(jwl)
    590         ! Find index to first interpolation point, and its weight
    591         if (wavenumber_target <= wavenumber(1)) then
    592           weight1 = 1.0_jprb
    593           iwn = 1
    594         else if (wavenumber_target >= wavenumber(nwn)) then
    595           iwn = nwn-1
    596           weight1 = 0.0_jprb
    597         else
    598           iwn = 1
    599           do while (wavenumber(iwn+1) < wavenumber_target .and. iwn < nwn-1)
    600             iwn = iwn + 1
    601           end do
    602           weight1 = (wavenumber(iwn+1)-wavenumber_target) &
    603                &  / (wavenumber(iwn+1)-wavenumber(iwn))
    604         end if
    605         ! Linear interpolation
    606         ao%mass_ext_mono_phobic(jwl,:) = weight1 * mass_ext_phobic(iwn,:) &
    607              &             + (1.0_jprb - weight1)* mass_ext_phobic(iwn+1,:)
    608         ao%ssa_mono_phobic(jwl,:)      = weight1 * ssa_phobic(iwn,:) &
    609              &             + (1.0_jprb - weight1)* ssa_phobic(iwn+1,:)
    610         ao%g_mono_phobic(jwl,:)        = weight1 * g_phobic(iwn,:) &
    611              &             + (1.0_jprb - weight1)* g_phobic(iwn+1,:)
    612         ao%lidar_ratio_mono_phobic(jwl,:) = weight1 * lidar_ratio_phobic(iwn,:) &
    613              &                + (1.0_jprb - weight1)* lidar_ratio_phobic(iwn+1,:)
    614         if (ao%use_hydrophilic) then
    615           ao%mass_ext_mono_philic(jwl,:,:) = weight1 * mass_ext_philic(iwn,:,:) &
    616                &               + (1.0_jprb - weight1)* mass_ext_philic(iwn+1,:,:)
    617           ao%ssa_mono_philic(jwl,:,:)      = weight1 * ssa_philic(iwn,:,:) &
    618                &               + (1.0_jprb - weight1)* ssa_philic(iwn+1,:,:)
    619           ao%g_mono_philic(jwl,:,:)        = weight1 * g_philic(iwn,:,:) &
    620                &               + (1.0_jprb - weight1)* g_philic(iwn+1,:,:)
    621           ao%lidar_ratio_mono_philic(jwl,:,:) = weight1 * lidar_ratio_philic(iwn,:,:) &
    622                &                  + (1.0_jprb - weight1)* lidar_ratio_philic(iwn+1,:,:)
    623         end if
    624       end do
    625     end if
    626 
    627     ! Deallocate memory local to this routine
    628     deallocate(mass_ext_phobic)
    629     deallocate(ssa_phobic)
    630     deallocate(g_phobic)
    631     deallocate(lidar_ratio_phobic)
    632     if (ao%use_hydrophilic) then
    633       deallocate(mass_ext_philic)
    634       deallocate(ssa_philic)
    635       deallocate(g_philic)
    636       deallocate(lidar_ratio_philic)
    637     end if
    638 
    639     if (lhook) call dr_hook('radiation_aerosol_optics:setup_general_aerosol_optics',1,hook_handle)
    640 
    641   end subroutine setup_general_aerosol_optics_lmdz
    642    
    643335
    644336  !---------------------------------------------------------------------
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_cloud_generator.F90

    r4489 r4669  
    541541    use radiation_pdf_sampler, only : pdf_sampler_type
    542542    implicit none
    543 #if defined(__GFORTRAN__) || defined(__PGI) || defined(__NEC__)
    544 #else
    545     !$omp declare simd(sample_from_pdf_simd) uniform(this) &
    546     !$omp linear(ref(fsd)) linear(ref(cdf))
    547 #endif
    548543    type(pdf_sampler_type), intent(in)  :: this
    549544
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_scheme.F90

    r4489 r4669  
    8787     &  NWEIGHT_PAR, IBAND_PAR, WEIGHT_PAR, &
    8888     &  ITYPE_TROP_BG_AER,  TROP_BG_AER_MASS_EXT, &
    89      &  ITYPE_STRAT_BG_AER, STRAT_BG_AER_MASS_EXT
     89     &  ITYPE_STRAT_BG_AER, STRAT_BG_AER_MASS_EXT, ISolverSpartacus
    9090! Commentes : jour, date de la simulation
    9191!USE YOMRIP0  , ONLY : NINDAT
     
    105105
    106106USE mod_phys_lmdz_para
     107USE setup_config_from_lmdz,   ONLY : driver_config_type
    107108
    108109IMPLICIT NONE
     
    269270! Ratio of cloud overlap decorrelation length for cloud water
    270271! inhomogeneities to that for cloud boundaries (typically 0.5)
    271 REAL(KIND=JPRB)           :: ZDECORR_LEN_RATIO
     272!REAL(KIND=JPRB)           :: ZDECORR_LEN_RATIO = 0.5_jprb
     273
     274!AI mai 2023
     275! A mettre dans namelist
     276!real(jprb) :: high_inv_effective_size
     277!real(jprb) :: middle_inv_effective_size
     278!real(jprb) :: low_inv_effective_size
     279
     280!real(jprb) :: cloud_inhom_separation_factor
     281!real(jprb) :: cloud_separation_scale_surface
     282!real(jprb) :: cloud_separation_scale_toa
     283!real(jprb) :: cloud_separation_scale_power
    272284
    273285! The surface net longwave flux if the surface was a black body, used
     
    290302
    291303! AI ATTENTION
    292 real(jprb), parameter    :: frac_std = 0.75
     304! A mettre dans namelist
     305!real(jprb), parameter    :: frac_std = 0.75
    293306
    294307! Name of file names specified on command line
     
    301314!$OMP THREADPRIVATE(debut_ecrad)
    302315
     316type(driver_config_type) :: driver_config
    303317! Import time functions for iseed calculation
    304318! AI ATTENTION propre a ifs
     
    342356! AI appel radiation_setup
    343357call SETUP_RADIATION_SCHEME(loutput)
     358! Read "radiation_driver" namelist into radiation driver config type
     359  file_name="namelist_ecrad"
     360call driver_config%read(file_name)
     361
     362if (rad_config%i_solver_sw == ISolverSPARTACUS &
     363      & .or.   rad_config%i_solver_lw == ISolverSPARTACUS) then
     364       print*,'Solveur SW: ', rad_config%i_solver_sw
     365       print*,'Solveur LW: ', rad_config%i_solver_lw
     366   if (driver_config%ok_effective_size) then
     367       print*,'low_inv_effective_size = ',driver_config%low_inv_effective_size
     368       print*,'middle_inv_effective_size = ',driver_config%middle_inv_effective_size
     369       print*,'high_inv_effective_size = ',driver_config%high_inv_effective_size
     370   else if (driver_config%ok_separation) then   
     371       print*,'cloud_separation_scale_surface =',driver_config%cloud_separation_scale_surface
     372       print*,'cloud_separation_scale_toa =',driver_config%cloud_separation_scale_toa
     373       print*,'cloud_separation_scale_power =',driver_config%cloud_separation_scale_power
     374       print*,'cloud_inhom_separation_factor =',driver_config%cloud_inhom_separation_factor
     375   endif   
     376endif   
    344377
    345378 if (lprint_config) then
     
    450483cloud%fraction(KIDIA:KFDIA,:) = PCLOUD_FRAC(KIDIA:KFDIA,:)
    451484
    452 !AI ATTENTION a voir avec JL
    453 ! Compute effective radii and convert to metres
    454 !CALL LIQUID_EFFECTIVE_RADIUS(KIDIA, KFDIA, KLON, KLEV, &
    455 !     &  PPRESSURE, PTEMPERATURE, PCLOUD_FRAC, PQ_LIQUID, PQ_RAIN, &
    456 !     &  PLAND_SEA_MASK, PCCN_LAND, PCCN_SEA, &
    457 !     &  ZRE_LIQUID_UM)
     485!!! ok AI ATTENTION a voir avec JL
     486! Compute effective radi and convert to metres
     487! AI. : on passe directement les champs de LMDZ
    458488cloud%re_liq(KIDIA:KFDIA,:) = ZRE_LIQUID_UM(KIDIA:KFDIA,:)
    459 
    460 !CALL ICE_EFFECTIVE_RADIUS(KIDIA, KFDIA, KLON, KLEV, &
    461 !     &  PPRESSURE, PTEMPERATURE, PCLOUD_FRAC, PQ_ICE, PQ_SNOW, PGEMU, &
    462 !     &  ZRE_ICE_UM)
    463489cloud%re_ice(KIDIA:KFDIA,:) = ZRE_ICE_UM(KIDIA:KFDIA,:)
    464490
     
    468494! decorrelation lengths for cloud water content inhomogeneities and
    469495! cloud boundaries, and set it in the "rad_config" object.
     496! IFS :
    470497!CALL CLOUD_OVERLAP_DECORR_LEN(KIDIA, KFDIA, KLON, PGEMU, YRERAD%NDECOLAT, &
    471498!     &    ZDECORR_LEN_KM, PDECORR_LEN_RATIO=ZDECORR_LEN_RATIO)
    472 
    473 ! AI ATTENTION (valeur lue dans namelist)
    474 !ZDECORR_LEN_RATIO = 0.5_JPRB
    475 !rad_config%cloud_inhom_decorr_scaling = ZDECORR_LEN_RATIO
     499! AI valeur dans namelist
     500! rad_config%cloud_inhom_decorr_scaling = ZDECORR_LEN_RATIO
     501
    476502!AI ATTENTION meme valeur que dans offline
    477 ZDECORR_LEN_KM = 2000.0_JPRB
     503! A mettre dans namelist
     504ZDECORR_LEN_KM = driver_config%overlap_decorr_length
    478505DO JLON = KIDIA,KFDIA
    479506  CALL cloud%set_overlap_param(thermodynamics, &
    480        &                       ZDECORR_LEN_KM(JLON), &
    481        &                       istartcol=JLON, iendcol=JLON)
     507       &                 ZDECORR_LEN_KM(JLON), &
     508       &                 istartcol=JLON, iendcol=JLON)
    482509ENDDO
    483510
     511! IFS :
    484512! Cloud water content fractional standard deviation is configurable
    485513! from namelist NAERAD but must be globally constant. Before it was
     
    487515!CALL cloud%create_fractional_std(KLON, KLEV, YRERAD%RCLOUD_FRAC_STD)
    488516! AI ATTENTION frac_std=0.75 meme valeur que dans la version offline
    489 CALL cloud%create_fractional_std(KLON, KLEV, frac_std)
    490 
     517CALL cloud%create_fractional_std(KLON, KLEV, driver_config%frac_std)
     518
     519if (rad_config%i_solver_sw == ISolverSPARTACUS &
     520      & .or.   rad_config%i_solver_lw == ISolverSPARTACUS) then
    491521! AI ! Read cloud properties needed by SPARTACUS
     522!AI ATTENTION meme traitement dans le version offline
     523
    492524! By default mid and high cloud effective size is 10 km
    493525!CALL cloud%create_inv_cloud_effective_size(KLON,KLEV,1.0_JPRB/10000.0_JPRB)
    494 ! But for boundary clouds (eta > 0.8) we set it to 1 km
    495 !DO JLEV = 1,KLEV
    496 !  DO JLON = KIDIA,KFDIA
    497 !    IF (PPRESSURE(JLON,JLEV) > 0.8_JPRB * PPRESSURE_H(JLON,KLEV+1)) THEN
    498 !      cloud%inv_cloud_effective_size(JLON,JLEV) = 1.0e-3_JPRB
    499 !    ENDIF
    500 !  ENDDO
    501 !ENDDO
    502 !AI ATTENTION meme traitement dans le version offline
    503 call cloud%create_inv_cloud_effective_size_eta(KLON, KLEV, &
     526
     527!  if (driver_config%low_inv_effective_size >= 0.0_jprb &
     528!     & .or. driver_config%middle_inv_effective_size >= 0.0_jprb &
     529!     & .or. driver_config%high_inv_effective_size >= 0.0_jprb) then
     530  if (driver_config%ok_effective_size) then
     531     call cloud%create_inv_cloud_effective_size_eta(klon, klev, &
    504532               &  thermodynamics%pressure_hl, &
    505                &  0.005_JPRB, &
    506                &  0.0001_JPRB, &
    507                &  0.0001, 0.8_jprb, 0.45_jprb)     
     533               &  driver_config%low_inv_effective_size, &
     534               &  driver_config%middle_inv_effective_size, &
     535               &  driver_config%high_inv_effective_size, 0.8_jprb, 0.45_jprb)
     536!  else if (driver_config%cloud_separation_scale_surface > 0.0_jprb &
     537!         .and. driver_config%cloud_separation_scale_toa > 0.0_jprb) then
     538  else if (driver_config%ok_separation) then
     539      call cloud%param_cloud_effective_separation_eta(klon, klev, &
     540               &  thermodynamics%pressure_hl, &
     541               &  driver_config%cloud_separation_scale_surface, &
     542               &  driver_config%cloud_separation_scale_toa, &
     543               &  driver_config%cloud_separation_scale_power, &
     544               &  driver_config%cloud_inhom_separation_factor)
     545  endif
     546endif 
    508547
    509548print*,'******** AEROSOLS (allocate + input) **************************************'
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/setup_aerosol_optics_lmdz_m.F90

    r4489 r4669  
    2929    use netcdf95, only: nf95_open, nf95_inq_grp_full_ncid, nf95_close, &
    3030         nf95_inq_dimid, nf95_inq_varid, nf95_inquire_dimension, &
    31          nf95_get_var, nf95_gw_var
    32     use netcdf, only: nf90_nowrite
     31         nf95_get_var, nf95_gw_var, nf95_nowrite
    3332
    3433    type(aerosol_optics_type), intent(out):: ao
     
    4443    ao%use_hydrophilic = .true.
    4544    ao%use_monochromatic = .true.
    46     print*,'file_name= ',file_name
    47     call nf95_open(file_name, nf90_nowrite, ncid)
     45    call nf95_open(file_name, nf95_nowrite, ncid)
    4846    call nf95_inq_grp_full_ncid(ncid, "Hydrophilic", grpid)
    4947    call nf95_inq_dimid(grpid, "hur", dimid)
     
    6967    call nf95_inq_varid(grpid, "single_scat_alb", varid)
    7068    call nf95_gw_var(grpid, varid, ao%ssa_sw_philic)
    71     ao%g_sw_philic = cshift(ao%ssa_sw_philic, 1)
     69    ao%ssa_sw_philic = cshift(ao%ssa_sw_philic, 1)
    7270    call nf95_inq_varid(grpid, "mass_ext", varid)
    7371    call nf95_gw_var(grpid, varid, ao%mass_ext_sw_philic)
    74     ao%g_sw_philic = cshift(ao%mass_ext_sw_philic, 1)
     72    ao%mass_ext_sw_philic = cshift(ao%mass_ext_sw_philic, 1)
    7573
    7674    ! Hydrophilic/Monochromatic:
     
    9593    call nf95_inq_varid(grpid, "single_scat_alb", varid)
    9694    call nf95_gw_var(grpid, varid, ao%ssa_sw_phobic)
    97     ao%g_sw_phobic = cshift(ao%ssa_sw_phobic, 1)
     95    ao%ssa_sw_phobic = cshift(ao%ssa_sw_phobic, 1)
    9896    call nf95_inq_varid(grpid, "mass_ext", varid)
    9997    call nf95_gw_var(grpid, varid, ao%mass_ext_sw_phobic)
    100     ao%g_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1)
     98    ao%mass_ext_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1)
    10199
    102100    ! Hydrophobic/Monochromatic:
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/fisrtilp.F90

    r4380 r4669  
    2020  ! flag to include modifications to ensure energy conservation (if flag >0)
    2121  USE add_phys_tend_mod, only : fl_cor_ebil
     22  USE lscp_ini_mod, ONLY: iflag_t_glace,t_glace_min, t_glace_max, exposant_glace
     23  USE lscp_ini_mod, ONLY: iflag_cloudth_vert, iflag_rain_incloud_vol
     24  USE lscp_ini_mod, ONLY: coef_eva, coef_eva_i, ffallv_lsc, ffallv_con
     25  USE lscp_ini_mod, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
     26  USE lscp_ini_mod, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf
     27
     28
    2229  IMPLICIT none
    2330  !======================================================================
     
    4754  !======================================================================
    4855  include "YOMCST.h"
    49   include "fisrtilp.h"
    50   include "nuage.h" ! JBM (3/14)
    51 
    5256  !
    5357  ! Principaux inputs:
     
    228232                     ! (Heymsfield & Donner, 1990)
    229233  REAL zzz
    230 
    231234  include "YOETHF.h"
    232235  include "FCTTRE.h"
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/fonte_neige_mod.F90

    r3900 r4669  
    164164    REAL, DIMENSION(klon), INTENT(IN)    :: precip_rain
    165165    REAL, DIMENSION(klon), INTENT(IN)    :: precip_snow
    166    
    167 ! Input/Output variables
     166
     167    ! Input/Output variables
    168168!****************************************************************************************
    169169
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ice_sursat_mod.F90

    r4260 r4669  
    308308  INCLUDE "YOETHF.h"
    309309  INCLUDE "FCTTRE.h"
    310   INCLUDE "fisrtilp.h"
    311310  INCLUDE "clesphys.h"
    312311
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/icefrac_lsc_mod.F90

    r3102 r4669  
    1717 
    1818  USE print_control_mod, ONLY: lunout, prt_level
    19   INCLUDE "nuage.h"
    20 
    21   ! nuage.h contains:
     19  USE lscp_ini_mod, ONLY: t_glace_min, t_glace_max, exposant_glace, iflag_t_glace
     20  ! lscp_ini contains:
    2221  ! t_glace_min: if T < Tmin, the cloud is only made of water ice
    2322  ! t_glace_max: if T > Tmax, the cloud is only made of liquid water
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/infotrac_phy.F90

    r4500 r4669  
    6868!  | longName    | Long name (with adv. scheme suffix) for outputs      | ttext       |                        |
    6969!  | type        | Type (so far: tracer or tag)                         | /           | tracer,tag             |
    70 !  | phase       | Phases list ("g"as / "l"iquid / "s"olid)             | /           | [g][l][s]              |
     70!  | phase       | Phases list ("g"as / "l"iquid / "s"olid / "b"lowing) | /           | [g][l][s][b]           |
    7171!  | component   | Name(s) of the merged/cumulated section(s)           | /           | coma-separated names   |
    7272!  | iGeneration | Generation (>=1)                                     | /           |                        |
     
    9393!  | trac   | ntiso  | Isotopes + tagging tracers list + number         | / | ntraciso       |                 |
    9494!  | zone   | nzone  | Geographic tagging zones   list + number         | / | ntraceurs_zone |                 |
    95 !  | phase  | nphas  | Phases                     list + number         |                    | [g][l][s], 1:3 |
     95!  | phase  | nphas  | Phases                     list + number         |                    |[g][l][s][b] 1:4 |
    9696!  | iqIsoPha        | Index in "qx"           = f(name(1:ntiso)),phas) | iqiso              | 1:nqtot         |
    9797!  | itZonIso        | Index in "trac(1:ntiso)"= f(zone, name(1:niso))  | index_trac         | 1:ntiso         |
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_ini_mod.F90

    r4420 r4669  
    55  ! PARAMETERS for lscp:
    66  !--------------------
    7  
     7 
     8  REAL RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG
     9  !$OMP THREADPRIVATE(RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG)
     10
    811  REAL, SAVE :: seuil_neb=0.001                 ! cloud fraction threshold: a cloud really exists when exceeded
    912  !$OMP THREADPRIVATE(seuil_neb)
    1013
    11   INTEGER, SAVE :: ninter=5                     ! number of iterations to calculate autoconversion to precipitation
    12   !$OMP THREADPRIVATE(ninter)
     14  INTEGER, SAVE :: niter_lscp=5                 ! number of iterations to calculate autoconversion to precipitation
     15  !$OMP THREADPRIVATE(niter_lscp)
    1316
    1417  INTEGER,SAVE :: iflag_evap_prec=1             ! precipitation evaporation flag. 0: nothing, 1: "old way",
    1518                                                ! 2: Max cloud fraction above to calculate the max of reevaporation
    16                                                 ! 4: LTP'method i.e. evaporation in the clear-sky fraction of the mesh only
     19                                                ! >=4: LTP'method i.e. evaporation in the clear-sky fraction of the mesh only
     20                                                ! pay attention that iflag_evap_prec=4 may lead to unrealistic and overestimated
     21                                                ! evaporation. Use 5 instead
    1722  !$OMP THREADPRIVATE(iflag_evap_prec)
    1823
     
    3843  !$OMP THREADPRIVATE(ok_radocond_snow)
    3944
    40   LOGICAL, SAVE :: ok_debug_autoconversion=.true.   ! removes a bug in the autoconversion process
    41   !$OMP THREADPRIVATE(ok_debug_autoconversion)
    42 
     45  REAL, SAVE :: t_glace_min=258.0                ! lower-bound temperature parameter for cloud phase determination
     46  !$OMP THREADPRIVATE(t_glace_min)
     47
     48  REAL, SAVE :: t_glace_max=273.15               ! upper-bound temperature parameter for cloud phase determination
     49  !$OMP THREADPRIVATE(t_glace_max)
     50
     51  REAL, SAVE :: exposant_glace=1.0               ! parameter for cloud phase determination
     52  !$OMP THREADPRIVATE(exposant_glace)
     53
     54  INTEGER, SAVE :: iflag_vice=0                  ! which expression for ice crystall fall velocity
     55  !$OMP THREADPRIVATE(iflag_vice)
     56
     57  INTEGER, SAVE :: iflag_t_glace=0               ! which expression for cloud phase partitioning
     58  !$OMP THREADPRIVATE(iflag_t_glace)
     59
     60  INTEGER, SAVE :: iflag_cloudth_vert=0          ! option for determining cloud fraction and content in convective boundary layers
     61  !$OMP THREADPRIVATE(iflag_cloudth_vert)
     62
     63  INTEGER, SAVE :: iflag_gammasat=0              ! which threshold for homogeneous nucleation below -40oC
     64  !$OMP THREADPRIVATE(iflag_gammasat)
     65
     66  INTEGER, SAVE :: iflag_rain_incloud_vol=0      ! use of volume cloud fraction for rain autoconversion
     67  !$OMP THREADPRIVATE(iflag_rain_incloud_vol)
     68
     69  INTEGER, SAVE :: iflag_bergeron=0              ! bergeron effect for liquid precipitation treatment 
     70  !$OMP THREADPRIVATE(iflag_bergeron)
     71
     72  INTEGER, SAVE :: iflag_fisrtilp_qsat=0         ! qsat adjustment (iterative) during autoconversion
     73  !$OMP THREADPRIVATE(iflag_fisrtilp_qsat)
     74
     75  INTEGER, SAVE :: iflag_pdf=0                   ! type of subgrid scale qtot pdf
     76  !$OMP THREADPRIVATE(iflag_pdf)
     77
     78  INTEGER, SAVE :: iflag_autoconversion=0        ! autoconversion option
     79  !$OMP THREADPRIVATE(iflag_autoconversion)
     80
     81  LOGICAL, SAVE :: reevap_ice=.false.            ! no liquid precip for T< threshold
     82  !$OMP THREADPRIVATE(reevap_ice)
     83
     84  REAL, SAVE :: cld_lc_lsc=2.6e-4                ! liquid autoconversion coefficient, stratiform rain
     85  !$OMP THREADPRIVATE(cld_lc_lsc)
     86
     87  REAL, SAVE :: cld_lc_con=2.6e-4                ! liquid autoconversion coefficient, convective rain
     88  !$OMP THREADPRIVATE(cld_lc_con)
     89
     90  REAL, SAVE :: cld_tau_lsc=3600.                ! liquid autoconversion timescale, stratiform rain
     91  !$OMP THREADPRIVATE(cld_tau_lsc)
     92
     93  REAL, SAVE :: cld_tau_con=3600.                ! liquid autoconversion timescale, convective rain
     94  !$OMP THREADPRIVATE(cld_tau_con)
     95
     96  REAL, SAVE :: cld_expo_lsc=2.                  ! liquid autoconversion threshold exponent, stratiform rain
     97  !$OMP THREADPRIVATE(cld_expo_lsc)
     98
     99  REAL, SAVE :: cld_expo_con=2.                  ! liquid autoconversion threshold exponent, convective rain
     100  !$OMP THREADPRIVATE(cld_expo_con)
     101
     102  REAL, SAVE :: ffallv_lsc=1.                    ! tuning coefficient crystal fall velocity, stratiform
     103  !$OMP THREADPRIVATE(ffallv_lsc)
     104
     105  REAL, SAVE :: ffallv_con=1.                    ! tuning coefficient crystal fall velocity, convective
     106  !$OMP THREADPRIVATE(ffallv_con)
     107
     108  REAL, SAVE :: coef_eva=2e-5                    ! tuning coefficient liquid precip evaporation
     109  !$OMP THREADPRIVATE(coef_eva)
     110
     111  REAL, SAVE :: coef_eva_i                       ! tuning coefficient ice precip sublimation
     112  !$OMP THREADPRIVATE(coef_eva_i)
     113
     114  REAL cice_velo                                 ! factor in the ice fall velocity formulation
     115  PARAMETER (cice_velo=1.645)
     116
     117  REAL dice_velo                                 ! exponent in the ice fall velocity formulation
     118  PARAMETER (dice_velo=0.16)
     119
     120  REAL, SAVE :: dist_liq=300.                    ! typical deph of cloud-top liquid layer in mpcs
     121  !$OMP THREADPRIVATE(dist_liq)
     122
     123  REAL, SAVE    :: tresh_cl=0.0                  ! cloud fraction threshold for cloud top search
     124  !$OMP THREADPRIVATE(tresh_cl)
    43125
    44126CONTAINS
    45127
    46 SUBROUTINE lscp_ini(dtime,ok_ice_sursat)
     128SUBROUTINE lscp_ini(dtime,ok_ice_sursat, RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in, &
     129                    RVTMP2_in, RTT_in,RD_in,RG_in)
    47130
    48131
     
    54137   LOGICAL, INTENT(IN)   :: ok_ice_sursat 
    55138
    56     CALL getin_p('ninter',ninter)
     139   REAL, INTENT(IN)      :: RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in
     140   REAL, INTENT(IN)      ::  RVTMP2_in, RTT_in, RD_in, RG_in
     141   character (len=20) :: modname='lscp_ini_mod'
     142   character (len=80) :: abort_message
     143
     144
     145    RG=RG_in
     146    RD=RD_in
     147    RCPD=RCPD_in
     148    RLVTT=RLVTT_in
     149    RLSTT=RLSTT_in
     150    RLMLT=RLMLT_in
     151    RTT=RTT_in
     152    RG=RG_in
     153    RVTMP2=RVTMP2_in
     154
     155
     156
     157    CALL getin_p('niter_lscp',niter_lscp)
    57158    CALL getin_p('iflag_evap_prec',iflag_evap_prec)
    58159    CALL getin_p('seuil_neb',seuil_neb)
     
    60161    CALL getin_p('iflag_mpc_bl',iflag_mpc_bl)
    61162    CALL getin_p('ok_radocond_snow',ok_radocond_snow)
    62     CALL getin_p('ok_debug_autoconversion',ok_debug_autoconversion)   
    63     WRITE(lunout,*) 'lscp, ninter:', ninter
     163    CALL getin_p('t_glace_max',t_glace_max)
     164    CALL getin_p('t_glace_min',t_glace_min)
     165    CALL getin_p('exposant_glace',exposant_glace)
     166    CALL getin_p('iflag_vice',iflag_vice)
     167    CALL getin_p('iflag_t_glace',iflag_t_glace)
     168    CALL getin_p('iflag_cloudth_vert',iflag_cloudth_vert)
     169    CALL getin_p('iflag_gammasat',iflag_gammasat)
     170    CALL getin_p('iflag_rain_incloud_vol',iflag_rain_incloud_vol)
     171    CALL getin_p('iflag_bergeron',iflag_bergeron)
     172    CALL getin_p('iflag_fisrtilp_qsat',iflag_fisrtilp_qsat)
     173    CALL getin_p('iflag_pdf',iflag_pdf)
     174    CALL getin_p('reevap_ice',reevap_ice)
     175    CALL getin_p('cld_lc_lsc',cld_lc_lsc)
     176    CALL getin_p('cld_lc_con',cld_lc_con)
     177    CALL getin_p('cld_tau_lsc',cld_tau_lsc)
     178    CALL getin_p('cld_tau_con',cld_tau_con)
     179    CALL getin_p('cld_expo_lsc',cld_expo_lsc)
     180    CALL getin_p('cld_expo_con',cld_expo_con)
     181    CALL getin_p('ffallv_lsc',ffallv_lsc)
     182    CALL getin_p('ffallv_lsc',ffallv_con)
     183    CALL getin_p('coef_eva',coef_eva)
     184    coef_eva_i=coef_eva
     185    CALL getin_p('coef_eva_i',coef_eva_i)
     186    CALL getin_p('iflag_autoconversion',iflag_autoconversion)
     187    CALL getin_p('dist_liq',dist_liq)
     188    CALL getin_p('tresh_cl',tresh_cl)
     189
     190
     191
     192
     193    WRITE(lunout,*) 'lscp, niter_lscp:', niter_lscp
    64194    WRITE(lunout,*) 'lscp, iflag_evap_prec:', iflag_evap_prec
    65195    WRITE(lunout,*) 'lscp, seuil_neb:', seuil_neb
     
    67197    WRITE(lunout,*) 'lscp, iflag_mpc_bl:', iflag_mpc_bl
    68198    WRITE(lunout,*) 'lscp, ok_radocond_snow:', ok_radocond_snow
    69     WRITE(lunout,*) 'lscp, ok_debug_autoconversion:', ok_debug_autoconversion
     199    WRITE(lunout,*) 'lscp, t_glace_max:', t_glace_max
     200    WRITE(lunout,*) 'lscp, t_glace_min:', t_glace_min
     201    WRITE(lunout,*) 'lscp, exposant_glace:', exposant_glace
     202    WRITE(lunout,*) 'lscp, iflag_vice:', iflag_vice
     203    WRITE(lunout,*) 'lscp, iflag_t_glace:', iflag_t_glace
     204    WRITE(lunout,*) 'lscp, iflag_cloudth_vert:', iflag_cloudth_vert
     205    WRITE(lunout,*) 'lscp, iflag_gammasat:', iflag_gammasat
     206    WRITE(lunout,*) 'lscp, iflag_rain_incloud_vol:', iflag_rain_incloud_vol
     207    WRITE(lunout,*) 'lscp, iflag_bergeron:', iflag_bergeron
     208    WRITE(lunout,*) 'lscp, iflag_fisrtilp_qsat:', iflag_fisrtilp_qsat
     209    WRITE(lunout,*) 'lscp, iflag_pdf', iflag_pdf
     210    WRITE(lunout,*) 'lscp, reevap_ice', reevap_ice
     211    WRITE(lunout,*) 'lscp, cld_lc_lsc', cld_lc_lsc
     212    WRITE(lunout,*) 'lscp, cld_lc_con', cld_lc_con
     213    WRITE(lunout,*) 'lscp, cld_tau_lsc', cld_tau_lsc
     214    WRITE(lunout,*) 'lscp, cld_tau_con', cld_tau_con
     215    WRITE(lunout,*) 'lscp, cld_expo_lsc', cld_expo_lsc
     216    WRITE(lunout,*) 'lscp, cld_expo_con', cld_expo_con
     217    WRITE(lunout,*) 'lscp, ffallv_lsc', ffallv_lsc
     218    WRITE(lunout,*) 'lscp, ffallv_con', ffallv_con
     219    WRITE(lunout,*) 'lscp, coef_eva', coef_eva
     220    WRITE(lunout,*) 'lscp, coef_eva_i', coef_eva_i
     221    WRITE(lunout,*) 'lscp, iflag_autoconversion', iflag_autoconversion
     222    WRITE(lunout,*) 'lscp, dist_liq', dist_liq
     223    WRITE(lunout,*) 'lscp, tresh_cl', tresh_cl
     224
     225
     226
     227
    70228
    71229    ! check for precipitation sub-time steps
    72     IF (ABS(dtime/REAL(ninter)-360.0).GT.0.001) THEN
     230    IF (ABS(dtime/REAL(niter_lscp)-360.0).GT.0.001) THEN
    73231        WRITE(lunout,*) 'lscp: it is not expected, see Z.X.Li', dtime
    74232        WRITE(lunout,*) 'I would prefer a 6 min sub-timestep'
     233    ENDIF
     234
     235    ! check consistency between numerical resolution of autoconversion
     236    ! and other options
     237   
     238    IF (iflag_autoconversion .EQ. 2) THEN
     239        IF ((iflag_vice .NE. 0) .OR. (niter_lscp .GT. 1)) THEN
     240           abort_message = 'in lscp, iflag_autoconversion=2 requires iflag_vice=0 and niter_lscp=1'
     241           CALL abort_physic (modname,abort_message,1)
     242        ENDIF
    75243    ENDIF
    76244
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_mod.F90

    r4425 r4669  
    99     paprs,pplay,t,q,ptconv,ratqs,                      &
    1010     d_t, d_q, d_ql, d_qi, rneb, rneblsvol, rneb_seri,  &
    11      radocond, radicefrac, rain, snow,                    &
     11     pfraclr,pfracld,                                   &
     12     radocond, radicefrac, rain, snow,                  &
    1213     frac_impa, frac_nucl, beta,                        &
    1314     prfl, psfl, rhcl, zqta, fraca,                     &
    1415     ztv, zpspsk, ztla, zthl, iflag_cld_th,             &
    1516     iflag_ice_thermo, ok_ice_sursat, qsatl, qsats,     &
     17     distcltop,                                         &
    1618     qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss,   &
    1719     Tcontr, qcontr, qcontr2, fcontrN, fcontrP)
     
    8991USE print_control_mod, ONLY: prt_level, lunout
    9092USE cloudth_mod, ONLY : cloudth, cloudth_v3, cloudth_v6, cloudth_mpc
    91 USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat, fallice_velocity
     93USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat
     94USE lscp_tools_mod, ONLY : fallice_velocity, distance_to_cloud_top
    9295USE ice_sursat_mod, ONLY : ice_sursat
    9396
    94 USE lscp_ini_mod, ONLY : seuil_neb, ninter, iflag_evap_prec, t_coup, DDT0, ztfondue, rain_int_min
    95 USE lscp_ini_mod, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, ok_debug_autoconversion
    96 
     97USE lscp_ini_mod, ONLY : seuil_neb, niter_lscp, iflag_evap_prec, t_coup, DDT0, ztfondue, rain_int_min
     98USE lscp_ini_mod, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, cld_expo_con, cld_expo_lsc
     99USE lscp_ini_mod, ONLY : iflag_cloudth_vert, iflag_rain_incloud_vol, iflag_t_glace, t_glace_min
     100USE lscp_ini_mod, ONLY : coef_eva, coef_eva_i,cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
     101USE lscp_ini_mod, ONLY : iflag_bergeron, iflag_fisrtilp_qsat, iflag_vice, cice_velo, dice_velo
     102USE lscp_ini_mod, ONLY : iflag_autoconversion, ffallv_con, ffallv_lsc
     103USE lscp_ini_mod, ONLY : RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG
    97104
    98105IMPLICIT NONE
     
    101108! VARIABLES DECLARATION
    102109!===============================================================================
    103 
    104 include "YOMCST.h"
    105 include "YOETHF.h"
    106 include "fisrtilp.h"
    107 include "nuage.h"
    108110
    109111! INPUT VARIABLES:
     
    125127  LOGICAL, DIMENSION(klon,klev),   INTENT(IN)   :: ptconv          ! grid points where deep convection scheme is active
    126128
    127 
    128129  !Inputs associated with thermal plumes
    129130
     
    133134  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: zpspsk          ! exner potential (p/100000)**(R/cp)
    134135  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: ztla            ! liquid temperature within thermals [K]
    135   REAL, DIMENSION(klon,klev),      INTENT(INOUT)   :: zthl         ! liquid potential temperature [K]
    136136
    137137  ! INPUT/OUTPUT variables
    138138  !------------------------
    139 
     139 
     140  REAL, DIMENSION(klon,klev),      INTENT(INOUT)   :: zthl         ! liquid potential temperature [K]
    140141  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: ratqs            ! function of pressure that sets the large-scale
    141142  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: beta             ! conversion rate of condensed water
     
    154155  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: rneb             ! cloud fraction [-]
    155156  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: rneblsvol        ! cloud fraction per unit volume [-] 
     157  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: pfraclr          ! precip fraction clear-sky part [-]
     158  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: pfracld          ! precip fraction cloudy part [-]
    156159  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: radocond         ! condensed water used in the radiation scheme [kg/kg]
    157160  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: radicefrac       ! ice fraction of condensed water for radiation scheme
     
    163166  REAL, DIMENSION(klon,klev+1),    INTENT(OUT)  :: prfl             ! large-scale rainfall flux in the column [kg/s/m2]
    164167  REAL, DIMENSION(klon,klev+1),    INTENT(OUT)  :: psfl             ! large-scale snowfall flux in the column [kg/s/m2]
     168  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: distcltop        ! distance to cloud top [m]
    165169
    166170  ! fraction of aerosol scavenging through impaction and nucleation (for on-line)
     
    189193
    190194  REAL qsl(klon), qsi(klon)
    191   REAL zct, zcl
     195  REAL zct, zcl,zexpo
    192196  REAL ctot(klon,klev)
    193197  REAL ctot_vol(klon,klev)
     
    231235  REAL tot_zneb(klon), tot_znebn(klon), d_tot_zneb(klon)
    232236  REAL d_znebprecip_clr_cld(klon), d_znebprecip_cld_clr(klon)
    233   REAL velo(klon,klev), vr
     237  REAL velo(klon,klev), vr, ffallv
    234238  REAL qlmpc, qimpc, rnebmpc
    235239  REAL radocondi(klon,klev), radocondl(klon,klev)
     240  REAL effective_zneb
     241  REAL distcltop1D(klon)
     242
    236243
    237244  INTEGER i, k, n, kk
     
    255262
    256263! Few initial checks
    257 
    258 IF (iflag_t_glace.EQ.0) THEN
    259     abort_message = 'lscp cannot be used if iflag_t_glace=0'
    260     CALL abort_physic(modname,abort_message,1)
    261 ENDIF
    262 
    263 IF (.NOT.((iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3))) THEN
    264     abort_message = 'lscp cannot be used without ice thermodynamics'
    265     CALL abort_physic(modname,abort_message,1)
    266 ENDIF
    267264
    268265IF (iflag_fisrtilp_qsat .LT. 0) THEN
     
    297294d_qi(:,:) = 0.0
    298295rneb(:,:) = 0.0
     296pfraclr(:,:)=0.0
     297pfracld(:,:)=0.0
    299298radocond(:,:) = 0.0
    300299radicefrac(:,:) = 0.0
     
    320319d_tot_zneb(:) = 0.0
    321320qzero(:) = 0.0
     321distcltop1D(:)=0.0
    322322
    323323!--ice supersaturation
     
    415415            IF (zrfl(i)+zifl(i).GT.0.) THEN
    416416
    417             ! LudoTP: we only account for precipitation evaporation in the clear-sky (iflag_evap_prec=4).
     417            ! LudoTP: we only account for precipitation evaporation in the clear-sky (iflag_evap_prec>=4).
    418418            ! c_iso: likely important to distinguish cs from neb isotope precipitation
    419419
    420                 IF (iflag_evap_prec.EQ.4) THEN
     420                IF (iflag_evap_prec.GE.4) THEN
    421421                    zrfl(i) = zrflclr(i)
    422422                    zifl(i) = ziflclr(i)
     
    429429                ENDIF
    430430
    431                 IF (iflag_evap_prec.EQ.4) THEN
     431                IF (iflag_evap_prec.GT.4) THEN
     432                ! Max evaporation not to saturate the clear sky precip fraction
     433                ! i.e. the fraction where evaporation occurs
     434                    zqev0 = MAX(0.0, (zqs(i)-zq(i))*znebprecipclr(i))
     435                ELSEIF (iflag_evap_prec .EQ. 4) THEN
    432436                ! Max evaporation not to saturate the whole mesh
     437                ! Pay attention -> lead to unrealistic and excessive evaporation
    433438                    zqev0 = MAX(0.0, zqs(i)-zq(i))
    434439                ELSE
     
    440445                ! dP/dz=beta*(1-q/qsat)*sqrt(P)
    441446                ! formula from Sundquist 1988, Klemp & Wilhemson 1978
    442                 ! LTP: evaporation only in the clear sky part (iflag_evap_prec=4)
     447                ! LTP: evaporation only in the clear sky part (iflag_evap_prec>=4)
    443448
    444449                IF (iflag_evap_prec.EQ.3) THEN
     
    446451                    *SQRT(zrfl(i)/max(1.e-4,znebprecip(i)))        &
    447452                    *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
    448                 ELSE IF (iflag_evap_prec.EQ.4) THEN
     453                ELSE IF (iflag_evap_prec.GE.4) THEN
    449454                     zqevt = znebprecipclr(i)*coef_eva*(1.0-zq(i)/qsl(i)) &
    450455                    *SQRT(zrfl(i)/max(1.e-8,znebprecipclr(i))) &
     
    463468                    *SQRT(zifl(i)/max(1.e-4,znebprecip(i))) &
    464469                    *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
    465                 ELSE IF (iflag_evap_prec.EQ.4) THEN
     470                ELSE IF (iflag_evap_prec.GE.4) THEN
    466471                     zqevti = znebprecipclr(i)*coef_eva_i*(1.0-zq(i)/qsi(i)) &
    467472                    *SQRT(zifl(i)/max(1.e-8,znebprecipclr(i))) &
     
    518523                                           
    519524
    520                 IF (iflag_evap_prec.EQ.4) THEN
     525                IF (iflag_evap_prec.GE.4) THEN
    521526                    zrflclr(i) = zrfl(i)
    522527                    ziflclr(i) = zifl(i)
     
    536541
    537542                ! update of rainfall and snowfall due to melting
    538                 IF (iflag_evap_prec.EQ.4) THEN
     543                IF (iflag_evap_prec.GE.4) THEN
    539544                    zrflclr(i)=zrflclr(i)+zmelt*ziflclr(i)
    540545                    zrflcld(i)=zrflcld(i)+zmelt*ziflcld(i)
     
    721726                  ! saturation may occur at a humidity different from qsat (gamma qsat), so gamma correction for dqs
    722727                  zdqs(:) = gammasat(:)*zdqs(:)+zqs(:)*dgammasatdt(:)
    723                   CALL icefrac_lscp(klon, zt(:),pplay(:,k)/paprs(:,1),zfice(:),dzfice(:))
     728                  ! cloud phase determination
     729                  IF (iflag_t_glace.GE.4) THEN
     730                  ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top
     731                       CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D)
     732                  ENDIF
     733                  CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, distcltop1D(:),zfice(:),dzfice(:))
    724734
    725735                  DO i=1,klon !todoan : check if loop in i is needed
     
    809819        !   zcond: mean condensed water in the mesh
    810820        !   zqn  : mean water vapor in the mesh
     821        !   zfice: ice fraction in clouds
    811822        !   zt   : temperature
    812823        !   rhcl : clear-sky relative humidity
    813824        ! ----------------------------------------------------------------
    814825
     826
     827        ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top
     828        IF (iflag_t_glace.GE.4) THEN
     829            CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D)
     830            distcltop(:,k)=distcltop1D(:)
     831        ENDIF   
     832
     833        ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs)
     834        CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,distcltop1D(:),zfice(:), dzfice(:))
     835
     836
    815837        ! Water vapor update, Phase determination and subsequent latent heat exchange
    816 
    817         ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs)
    818         CALL icefrac_lscp(klon,zt(:),pplay(:,k)/paprs(:,1),zfice(:), dzfice(:))
    819 
    820838        DO i=1, klon
    821 
    822839
    823840            IF (mpc_bl_points(i,k) .GT. 0) THEN
     
    873890
    874891    ! LTP:
    875     IF (iflag_evap_prec==4) THEN
     892    IF (iflag_evap_prec .GE. 4) THEN
    876893
    877894        !Partitionning between precipitation coming from clouds and that coming from CS
     
    919936    ENDIF
    920937
     938
     939    ! Autoconversion
     940    ! -------------------------------------------------------------------------------
     941
     942
    921943    ! Initialisation of zoliq and radocond variables
    922944
     
    930952            iwc(i)   = 0.
    931953            zneb(i)  = MAX(rneb(i,k),seuil_neb)
    932             radocond(i,k) = zoliq(i)/REAL(ninter+1)
     954            radocond(i,k) = zoliq(i)/REAL(niter_lscp+1)
    933955            radicefrac(i,k) = zfice(i)
    934             radocondi(i,k)=zoliq(i)*zfice(i)/REAL(ninter+1)
    935             radocondl(i,k)=zoliq(i)*(1.-zfice(i))/REAL(ninter+1)
     956            radocondi(i,k)=zoliq(i)*zfice(i)/REAL(niter_lscp+1)
     957            radocondl(i,k)=zoliq(i)*(1.-zfice(i))/REAL(niter_lscp+1)
    936958    ENDDO
    937959
    938     ! Autoconversion
    939     ! -------------------------------------------------------------------------------
    940      
    941     DO n = 1, ninter
     960       
     961    DO n = 1, niter_lscp
    942962
    943963        DO i=1,klon
     
    965985                ELSE
    966986
    967                     IF (ok_debug_autoconversion) THEN ! if condition to be removed after test phase
    968 
    969                     ! water quantity to remove: zchau (Sundqvist, 1978)
    970                     ! same thing for the ice: zfroi (Zender & Kiehl, 1997)
    971987                    IF (ptconv(i,k)) THEN ! if convective point
    972988                        zcl=cld_lc_con
    973989                        zct=1./cld_tau_con
    974                         zfroi = dtime/REAL(ninter)/zdz(i)*zoliqi(i)*velo(i,k)
     990                        zexpo=cld_expo_con
     991                        ffallv=ffallv_con
    975992                    ELSE
    976993                        zcl=cld_lc_lsc
    977994                        zct=1./cld_tau_lsc
    978                         zfroi = dtime/REAL(ninter)/zdz(i)*zoliqi(i) &   ! dqice/dt=1/rho*d(rho*wice*qice)/dz
    979                             *velo(i,k)
     995                        zexpo=cld_expo_lsc
     996                        ffallv=ffallv_lsc
    980997                    ENDIF
     998
    981999
    9821000                    ! if vertical heterogeneity is taken into account, we use
     
    9851003                    ! reduces the in-cloud water).
    9861004
     1005                    ! Liquid water quantity to remove: zchau (Sundqvist, 1978)
     1006                    ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2)
     1007                    !.........................................................
    9871008                    IF ((iflag_cloudth_vert.GE.3).AND.(iflag_rain_incloud_vol.EQ.1)) THEN
    988                         zchau = zct   *dtime/REAL(ninter) * zoliql(i) &
    989                         *(1.0-EXP(-(zoliql(i)/ctot_vol(i,k)/zcl)**2))
    990                     ELSE
    991                         zchau = zct   *dtime/REAL(ninter) * zoliql(i) &
    992                         *(1.0-EXP(-(zoliql(i)/zneb(i)/zcl)**2))        ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2)
    993                     ENDIF
    994 
    995                     ELSE ! with old bug in autoconversion
    996 
    997                     ! water quantity to remove: zchau (Sundqvist, 1978)
    998                     ! same thing for the ice: zfroi (Zender & Kiehl, 1997)
    999                     IF (ptconv(i,k)) THEN ! if convective point
    1000                         zcl=cld_lc_con
    1001                         zct=1./cld_tau_con
    1002                         zfroi = dtime/REAL(ninter)/zdz(i)*zoliq(i)*velo(i,k)*zfice(i)
    1003                     ELSE
    1004                         zcl=cld_lc_lsc
    1005                         zct=1./cld_tau_lsc
    1006                         zfroi = dtime/REAL(ninter)/zdz(i)*zoliq(i) &   ! dqice/dt=1/rho*d(rho*wice*qice)/dz
    1007                             *velo(i,k) * zfice(i)
    1008                     ENDIF
    10091009
    10101010                    ! if vertical heterogeneity is taken into account, we use
     
    10121012                    ! surface fraction (which is larger and artificially
    10131013                    ! reduces the in-cloud water).
    1014 
    1015 
    1016                     IF ((iflag_cloudth_vert.GE.3).AND.(iflag_rain_incloud_vol.EQ.1)) THEN
    1017                         zchau = zct   *dtime/REAL(ninter) * zoliq(i) &
    1018                         *(1.0-EXP(-(zoliq(i)/ctot_vol(i,k)/zcl)**2)) *(1.-zfice(i))
     1014                        effective_zneb=ctot_vol(i,k)
    10191015                    ELSE
    1020                         zchau = zct   *dtime/REAL(ninter) * zoliq(i) &
    1021                         *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl)**2)) *(1.-zfice(i)) ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2)
     1016                        effective_zneb=zneb(i)
     1017                    ENDIF
     1018
     1019
     1020                    IF (iflag_autoconversion .EQ. 2) THEN
     1021                    ! two-steps resolution with niter_lscp=1 sufficient
     1022                    ! we first treat the second term (with exponential) in an explicit way
     1023                    ! and then treat the first term (-q/tau) in an exact way
     1024                        zchau=zoliql(i)*(1.-exp(-dtime/REAL(niter_lscp)*zct &
     1025                        *(1.-exp(-(zoliql(i)/effective_zneb/zcl)**zexpo))))
     1026                    ELSE
     1027                    ! old explicit resolution with subtimesteps
     1028                        zchau = zct*dtime/REAL(niter_lscp)*zoliql(i) &
     1029                        *(1.0-EXP(-(zoliql(i)/effective_zneb/zcl)**zexpo))
    10221030                    ENDIF
    10231031
    1024                     ENDIF ! ok_debug_autoconversion
     1032
     1033                    ! Ice water quantity to remove (Zender & Kiehl, 1997)
     1034                    ! dqice/dt=1/rho*d(rho*wice*qice)/dz
     1035                    !....................................
     1036                    IF (iflag_autoconversion .EQ. 2) THEN
     1037                    ! exact resolution, niter_lscp=1 is sufficient but works only
     1038                    ! with iflag_vice=0
     1039                       IF (zoliqi(i) .GT. 0.) THEN
     1040                          zfroi=(zoliqi(i)-((zoliqi(i)**(-dice_velo)) &
     1041                          +dice_velo*dtime/REAL(niter_lscp)*cice_velo/zdz(i)*ffallv)**(-1./dice_velo))
     1042                       ELSE
     1043                          zfroi=0.
     1044                       ENDIF
     1045                    ELSE
     1046                    ! old explicit resolution with subtimesteps
     1047                       zfroi = dtime/REAL(niter_lscp)/zdz(i)*zoliqi(i)*velo(i,k)
     1048                    ENDIF
    10251049
    10261050                    zrain   = MIN(MAX(zchau,0.0),zoliql(i))
     
    10301054                ENDIF
    10311055
    1032                 zoliql(i) = MAX(zoliq(i)*(1.-zfice(i))-1.*zrain  , 0.0)
    1033                 zoliqi(i) = MAX(zoliq(i)*zfice(i)-1.*zsnow  , 0.0)
    1034                 zoliq(i)  = MAX(zoliq(i)-zprecip , 0.0)
     1056                IF (iflag_autoconversion .GE. 1) THEN
     1057                   ! debugged version with phase conservation through the autoconversion process
     1058                   zoliql(i) = MAX(zoliql(i)-1.*zrain  , 0.0)
     1059                   zoliqi(i) = MAX(zoliqi(i)-1.*zsnow  , 0.0)
     1060                   zoliq(i)  = MAX(zoliq(i)-zprecip , 0.0)
     1061                ELSE
     1062                   ! bugged version with phase resetting
     1063                   zoliql(i) = MAX(zoliq(i)*(1.-zfice(i))-1.*zrain  , 0.0)
     1064                   zoliqi(i) = MAX(zoliq(i)*zfice(i)-1.*zsnow  , 0.0)
     1065                   zoliq(i)  = MAX(zoliq(i)-zprecip , 0.0)
     1066                ENDIF
    10351067
    10361068                ! c_iso: call isotope_conversion (for readibility) or duplicate
    10371069
    1038                 radocond(i,k) = radocond(i,k) + zoliq(i)/REAL(ninter+1)
    1039                 radocondl(i,k) = radocondl(i,k) + zoliql(i)/REAL(ninter+1)
    1040                 radocondi(i,k) = radocondi(i,k) + zoliqi(i)/REAL(ninter+1)
     1070                radocond(i,k) = radocond(i,k) + zoliq(i)/REAL(niter_lscp+1)
     1071                radocondl(i,k) = radocondl(i,k) + zoliql(i)/REAL(niter_lscp+1)
     1072                radocondi(i,k) = radocondi(i,k) + zoliqi(i)/REAL(niter_lscp+1)
    10411073
    10421074            ENDIF ! rneb >0
     
    10501082    DO i = 1, klon
    10511083           
    1052             IF (iflag_evap_prec.EQ.4) THEN
     1084            IF (iflag_evap_prec.GE.4) THEN
    10531085                ziflprev(i)=ziflcld(i)
    10541086            ELSE
     
    10921124                    ! c_iso : mv here condensation of isotopes + redispatchage en precip
    10931125
    1094                 IF (iflag_evap_prec.EQ.4) THEN
     1126                IF (iflag_evap_prec.GE.4) THEN
    10951127                    zrflcld(i) = zrflcld(i)+zqprecl(i) &
    10961128                    *(paprs(i,k)-paprs(i,k+1))/(RG*dtime)
     
    11131145
    11141146    ! LTP: limit of surface cloud fraction covered by precipitation when the local intensity of the flux is below rain_int_min
    1115     ! if iflag_evap_pre=4
    1116     IF (iflag_evap_prec.EQ.4) THEN
     1147    ! if iflag_evap_prec>=4
     1148    IF (iflag_evap_prec.GE.4) THEN
    11171149
    11181150        DO i=1,klon
     
    11341166        ENDDO
    11351167
     1168
    11361169    ENDIF
    11371170
     
    11411174    ! Outputs:
    11421175    ! Precipitation fluxes at layer interfaces
    1143     ! and temperature and water species tendencies
     1176    ! + precipitation fractions +
     1177    ! temperature and water species tendencies
    11441178    DO i = 1, klon
    11451179        psfl(i,k)=zifl(i)
    11461180        prfl(i,k)=zrfl(i)
     1181        pfraclr(i,k)=znebprecipclr(i)
     1182        pfracld(i,k)=znebprecipcld(i)
    11471183        d_ql(i,k) = (1-zfice(i))*zoliq(i)
    11481184        d_qi(i,k) = zfice(i)*zoliq(i)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_tools_mod.F90

    r4072 r4669  
    1616    ! 3212–3234. https://doi.org/10.1029/2019MS001642
    1717   
    18    
     18    use lscp_ini_mod, only: iflag_vice, ffallv_con, ffallv_lsc
     19    use lscp_ini_mod, only: cice_velo, dice_velo
     20
    1921    IMPLICIT NONE
    20 
    21     INCLUDE "nuage.h"
    22     INCLUDE "fisrtilp.h"
    2322
    2423    INTEGER, INTENT(IN) :: klon
     
    3332
    3433    INTEGER i
    35     REAL logvm,iwcg,tempc,phpa,cvel,dvel,fallv_tun
     34    REAL logvm,iwcg,tempc,phpa,fallv_tun
    3635    REAL m2ice, m2snow, vmice, vmsnow
    3736    REAL aice, bice, asnow, bsnow
     
    6261       
    6362        velo(i)=fallv_tun*velo(i)/100.0 ! from cm/s to m/s
    64         dvel=0.2
    65         cvel=fallv_tun*65.0*(rho(i)**0.2)*(150./phpa)**0.15
    6663
    6764    ELSE IF (iflag_vice .EQ. 2) THEN
     
    9491        vmsnow=vmsnow*((1000./phpa)**0.35)
    9592        velo(i)=fallv_tun*min(vmsnow,vmice)/100. ! to m/s
    96         dvel=0.2
    97         cvel=velo(i)/((iwcg/1000.*rho(i))**dvel)
    9893
    9994    ELSE
    10095        ! By default, fallspeed velocity of ice crystals according to Heymsfield & Donner 1990
    101         velo(i) = fallv_tun*3.29/2.0*((iwcg/1000.)**0.16)
    102         dvel=0.16
    103         cvel=fallv_tun*3.29/2.0*(rho(i)**0.16)
     96        velo(i) = fallv_tun*cice_velo*((iwcg/1000.)**dice_velo)
    10497    ENDIF
    10598    ENDDO
     
    109102
    110103!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    111 SUBROUTINE ICEFRAC_LSCP(klon, temp, sig, icefrac, dicefracdT)
     104SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, distcltop, icefrac, dicefracdT)
    112105!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    113106 
     
    120113
    121114    USE print_control_mod, ONLY: lunout, prt_level
     115    USE lscp_ini_mod, ONLY: t_glace_min, t_glace_max, exposant_glace, iflag_t_glace
     116    USE lscp_ini_mod, ONLY : RTT, dist_liq
    122117
    123118    IMPLICIT NONE
    124119
    125 
    126     INCLUDE "YOMCST.h"
    127     INCLUDE "nuage.h"
    128     INCLUDE "clesphys.h"
    129 
    130 
    131   ! nuage.h contains:
    132   ! t_glace_min: if T < Tmin, the cloud is only made of water ice
    133   ! t_glace_max: if T > Tmax, the cloud is only made of liquid water
    134   ! exposant_glace: controls the sharpness of the transition
    135120
    136121    INTEGER, INTENT(IN)                 :: klon       ! number of horizontal grid points
    137122    REAL, INTENT(IN), DIMENSION(klon)   :: temp       ! temperature
    138     REAL, INTENT(IN), DIMENSION(klon)   :: sig
     123    REAL, INTENT(IN), DIMENSION(klon)   :: distcltop       ! distance to cloud top
     124    INTEGER, INTENT(IN)                 :: iflag_ice_thermo
    139125    REAL, INTENT(OUT), DIMENSION(klon)  :: icefrac
    140126    REAL, INTENT(OUT), DIMENSION(klon)  :: dicefracdT
     
    142128
    143129    INTEGER i
    144     REAL    sig0,www,tmin_tmp,liqfrac_tmp
     130    REAL    liqfrac_tmp, dicefrac_tmp
    145131    REAL    Dv, denomdep,beta,qsi,dqsidt
    146     INTEGER exposant_glace_old
    147     REAL t_glace_min_old
    148132    LOGICAL ice_thermo
    149133
    150     sig0=0.8
    151     t_glace_min_old = RTT - 15.0
    152     ice_thermo = (iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3)
    153     IF (ice_thermo) THEN
    154       exposant_glace_old = 2
    155     ELSE
    156       exposant_glace_old = 6
     134    CHARACTER (len = 20) :: modname = 'lscp_tools'
     135    CHARACTER (len = 80) :: abort_message
     136
     137    IF ((iflag_t_glace.LT.2) .OR. (iflag_t_glace.GT.6)) THEN
     138       abort_message = 'lscp cannot be used if iflag_t_glace<2 or >6'
     139       CALL abort_physic(modname,abort_message,1)
    157140    ENDIF
    158141
    159 
    160 ! calculation of icefrac and dicefrac/dT
     142    IF (.NOT.((iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3))) THEN
     143       abort_message = 'lscp cannot be used without ice thermodynamics'
     144       CALL abort_physic(modname,abort_message,1)
     145    ENDIF
     146
    161147
    162148    DO i=1,klon
    163 
    164     IF (iflag_t_glace.EQ.1) THEN
    165             ! Transition to ice close to surface for T<Tmax
    166             ! w=1 at the surface and 0 for sig < sig0
    167             www=(max(sig(i)-sig0,0.))/(1.-sig0)
    168     ELSEIF (iflag_t_glace.GE.2) THEN
    169             ! No convertion to ice close to surface
    170             www = 0.
    171     ENDIF
    172      
    173     tmin_tmp=www*t_glace_max+(1.-www)*t_glace_min
    174     liqfrac_tmp=  (temp(i)-tmin_tmp) / (t_glace_max-tmin_tmp)
    175     liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0)
    176        
    177     IF (iflag_t_glace.GE.3) THEN
    178             icefrac(i) = 1.0-liqfrac_tmp**exposant_glace
    179             IF ((icefrac(i) .GT.0.) .AND. (liqfrac_tmp .GT. 0)) THEN
    180                  dicefracdT(i)= exposant_glace * ((liqfrac_tmp)**(exposant_glace-1.)) &
    181                            / (t_glace_min - t_glace_max)
    182             ELSE
    183 
    184                  dicefracdT(i)=0.
    185             ENDIF
    186 
    187     ELSE
     149 
     150        ! old function with sole dependence upon temperature
     151        IF (iflag_t_glace .EQ. 2) THEN
     152            liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min)
     153            liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0)
    188154            icefrac(i) = (1.0-liqfrac_tmp)**exposant_glace
    189155            IF (icefrac(i) .GT.0.) THEN
     
    196162            ENDIF
    197163
    198     ENDIF
    199    
    200     ENDDO
    201 
    202 
    203     RETURN
    204 
     164        ENDIF
     165
     166        ! function of temperature used in CMIP6 physics
     167        IF (iflag_t_glace .EQ. 3) THEN
     168            liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min)
     169            liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0)
     170            icefrac(i) = 1.0-liqfrac_tmp**exposant_glace
     171            IF ((icefrac(i) .GT.0.) .AND. (liqfrac_tmp .GT. 0.)) THEN
     172                dicefracdT(i)= exposant_glace * ((liqfrac_tmp)**(exposant_glace-1.)) &
     173                          / (t_glace_min - t_glace_max)
     174            ELSE
     175                dicefracdT(i)=0.
     176            ENDIF
     177        ENDIF
     178
     179        ! for iflag_t_glace .GE. 4, the liquid fraction depends upon temperature at cloud top
     180        ! and then decreases with decreasing height
     181
     182        !with linear function of temperature at cloud top
     183        IF (iflag_t_glace .EQ. 4) THEN 
     184                liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min)
     185                liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0)
     186                icefrac(i)    =  MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.)
     187                dicefrac_tmp = - temp(i)/(t_glace_max-t_glace_min)
     188                dicefracdT(i) = dicefrac_tmp*exp(-distcltop(i)/dist_liq)
     189                IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN
     190                        dicefracdT(i) = 0.
     191                ENDIF
     192        ENDIF
     193
     194        ! with CMIP6 function of temperature at cloud top
     195        IF (iflag_t_glace .EQ. 5) THEN
     196                liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min)
     197                liqfrac_tmp =  MIN(MAX(liqfrac_tmp,0.0),1.0)
     198                liqfrac_tmp = liqfrac_tmp**exposant_glace
     199                icefrac(i)  =  MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.)
     200                IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN
     201                        dicefracdT(i) = 0.
     202                ELSE
     203                        dicefracdT(i) = exposant_glace*((liqfrac_tmp)**(exposant_glace-1.))/(t_glace_min- t_glace_max) &
     204                                        *exp(-distcltop(i)/dist_liq)
     205                ENDIF
     206        ENDIF
     207
     208        ! with modified function of temperature at cloud top
     209        ! to get largere values around 260 K, works well with t_glace_min = 241K
     210        IF (iflag_t_glace .EQ. 6) THEN
     211                IF (temp(i) .GT. t_glace_max) THEN
     212                        liqfrac_tmp = 1.
     213                ELSE
     214                        liqfrac_tmp = -((temp(i)-t_glace_max) / (t_glace_max-t_glace_min))**2+1.
     215                ENDIF
     216                liqfrac_tmp  = MIN(MAX(liqfrac_tmp,0.0),1.0)
     217                icefrac(i)   = MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.)       
     218                IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN
     219                        dicefracdT(i) = 0.
     220                ELSE
     221                        dicefracdT(i) = 2*((temp(i)-t_glace_max) / (t_glace_max-t_glace_min))/(t_glace_max-t_glace_min) &
     222                                  *exp(-distcltop(i)/dist_liq)
     223                ENDIF
     224        ENDIF
     225
     226
     227
     228     ENDDO ! klon
     229 
     230     RETURN
     231 
    205232END SUBROUTINE ICEFRAC_LSCP
    206233!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
    276303!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    277304
     305    use lscp_ini_mod, only: iflag_gammasat, t_glace_min, RTT
    278306
    279307    IMPLICIT NONE
    280308
    281     include "YOMCST.h"
    282     include "YOETHF.h"
    283     include "FCTTRE.h"
    284     include "nuage.h"
    285309
    286310    INTEGER, INTENT(IN) :: klon                       ! number of horizontal grid points
     
    348372
    349373END SUBROUTINE CALC_GAMMASAT
    350 
    351 
     374!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     375
     376
     377!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     378SUBROUTINE DISTANCE_TO_CLOUD_TOP(klon,klev,k,temp,pplay,paprs,rneb,distcltop1D)
     379!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     380   
     381   USE lscp_ini_mod, ONLY : rd,rg,tresh_cl
     382
     383   IMPLICIT NONE
     384   
     385   INTEGER, INTENT(IN) :: klon,klev                !number of horizontal and vertical grid points
     386   INTEGER, INTENT(IN) :: k                        ! vertical index
     387   REAL, INTENT(IN), DIMENSION(klon,klev) :: temp  ! temperature in K
     388   REAL, INTENT(IN), DIMENSION(klon,klev) :: pplay ! pressure middle layer in Pa
     389   REAL, INTENT(IN), DIMENSION(klon,klev+1) :: paprs ! pressure interfaces in Pa
     390   REAL, INTENT(IN), DIMENSION(klon,klev) :: rneb  ! cloud fraction
     391
     392   REAL, INTENT(OUT), DIMENSION(klon) :: distcltop1D  ! distance from cloud top
     393
     394   REAL dzlay(klon,klev)
     395   REAL zlay(klon,klev)
     396   REAL dzinterf
     397   INTEGER i,k_top, kvert
     398   LOGICAL bool_cl
     399
     400
     401   DO i=1,klon
     402         ! Initialization height middle of first layer
     403          dzlay(i,1) = Rd * temp(i,1) / rg * log(paprs(i,1)/paprs(i,2))
     404          zlay(i,1) = dzlay(i,1)/2
     405
     406          DO kvert=2,klev
     407                 IF (kvert.EQ.klev) THEN
     408                       dzlay(i,kvert) = 2*(rd * temp(i,kvert) / rg * log(paprs(i,kvert)/pplay(i,kvert)))
     409                 ELSE
     410                       dzlay(i,kvert) = rd * temp(i,kvert) / rg * log(paprs(i,kvert)/paprs(i,kvert+1))
     411                 ENDIF
     412                       dzinterf       = rd * temp(i,kvert) / rg * log(pplay(i,kvert-1)/pplay(i,kvert))
     413                       zlay(i,kvert)  = zlay(i,kvert-1) + dzinterf
     414           ENDDO
     415   ENDDO
     416   
     417   k_top = k
     418   DO i=1,klon
     419          IF (rneb(i,k) .LE. tresh_cl) THEN
     420                 bool_cl = .FALSE.
     421          ELSE
     422                 bool_cl = .TRUE.
     423          ENDIF
     424
     425          DO WHILE ((bool_cl) .AND. (k_top .LE. klev))
     426          ! find cloud top
     427                IF (rneb(i,k_top) .GT. tresh_cl) THEN
     428                      k_top = k_top + 1
     429                ELSE
     430                      bool_cl = .FALSE.
     431                      k_top   = k_top - 1
     432                ENDIF
     433          ENDDO
     434          k_top=min(k_top,klev)
     435
     436          !dist to top is dist between current layer and layer of cloud top (from middle to middle) + dist middle to
     437          !interf for layer of cloud top
     438          distcltop1D(i) = zlay(i,k_top) - zlay(i,k) + dzlay(i,k_top)/2
     439   ENDDO ! klon
     440
     441END SUBROUTINE DISTANCE_TO_CLOUD_TOP
    352442!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    353443
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/newmicro.F90

    r4119 r4669  
    33SUBROUTINE newmicro(flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, picefra, pclc, &
    44    pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, &
    5     mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg,re, fl, reliq, reice, &
     5    mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg,distcltop, re, fl, reliq, reice, &
    66    reliq_pi, reice_pi)
    77
     
    1212  USE phys_state_var_mod, ONLY: rnebcon, clwcon
    1313  USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14)
     14  USE lscp_ini_mod, only: iflag_t_glace
    1415  USE ioipsl_getin_p_mod, ONLY : getin_p
    1516  USE print_control_mod, ONLY: lunout
     
    4142  ! bl95_b1-input-R-a PARAMETER, may be varied for tests (    -"-      )
    4243  ! latitude_deg-input latitude in degrees
     44  ! distcltop ---input- distance from cloud top
    4345
    4446  ! re------output-R-Cloud droplet effective radius multiplied by fl [um]
     
    9799  REAL pctlwp(klon)
    98100
     101  REAL distcltop(klon,klev)
    99102  LOGICAL lo
    100103
     
    241244
    242245      IF (ok_new_lscp) THEN
    243           CALL icefrac_lscp(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:,k),dzfice(:,k))
     246          CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:,k),dzfice(:,k))
    244247      ELSE
    245248          CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:,k))
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/nuage.F90

    r3999 r4669  
    22
    33SUBROUTINE nuage(paprs, pplay, t, pqlwp,picefra, pclc, pcltau, pclemi, pch, pcl, pcm, &
    4     pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, &
     4    pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, distcltop, &
    55    cldtaupi, re, fl)
    66  USE dimphy
    77  USE lscp_tools_mod, only: icefrac_lscp
    88  USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14)
     9  USE lscp_ini_mod, only : iflag_t_glace
    910  USE phys_local_var_mod, ONLY: ptconv
    1011  IMPLICIT NONE
     
    4950
    5051  REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon)
    51 
     52  REAL distcltop(klon,klev)
    5253  LOGICAL lo
    5354
     
    112113!                           t_glace_max, exposant_glace)
    113114        IF (ok_new_lscp) THEN
    114             CALL icefrac_lscp(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:),dzfice(:))
     115            CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:),dzfice(:))
    115116        ELSE
    116117            CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:))
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/nuage.h

    r4380 r4669  
    22! $Id$
    33!
    4       REAL rad_froid, rad_chau1, rad_chau2, t_glace_max, t_glace_min
    5       REAL exposant_glace
     4      REAL rad_froid, rad_chau1, rad_chau2
    65      REAL rei_min,rei_max
    76      REAL tau_cld_cv,coefw_cld_cv
    8 
    97      REAL tmax_fonte_cv
    10 
    11       INTEGER iflag_t_glace, iflag_cloudth_vert, iflag_cld_cv
    12       INTEGER iflag_rain_incloud_vol
    13    
    14       INTEGER iflag_gammasat, iflag_vice, iflag_rei
     8      INTEGER iflag_cld_cv
     9      INTEGER iflag_rei
    1510      LOGICAL ok_icefra_lscp
    1611
    17       common /nuagecom/ rad_froid,rad_chau1, rad_chau2,t_glace_max,     &
    18      &                  t_glace_min,exposant_glace,rei_min,rei_max,     &
     12      common /nuagecom/ rad_froid,rad_chau1, rad_chau2,                 &
     13     &                  rei_min,rei_max,                                &
    1914     &                  tau_cld_cv,coefw_cld_cv,                        &
    2015     &                  tmax_fonte_cv,                                  &
    21      &                  iflag_t_glace,iflag_cloudth_vert,iflag_cld_cv,  &
    22      &                  iflag_rain_incloud_vol,                         &
    23      &                  ok_icefra_lscp,                  &
    24      &                  iflag_gammasat, iflag_vice,       &
     16     &                  iflag_cld_cv,                                   &
     17     &                  ok_icefra_lscp,                                 &
    2518     &                  iflag_rei   
    2619!$OMP THREADPRIVATE(/nuagecom/)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ocean_forced_mod.F90

    r3974 r4669  
    167167  SUBROUTINE ocean_forced_ice( &
    168168       itime, dtime, jour, knon, knindex, &
    169        tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     169       tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air,spechum, &
    170170       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    171171       AcoefU, AcoefV, BcoefU, BcoefV, &
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/pbl_surface_mod.F90

    r4662 r4669  
    2121  USE cpl_mod,             ONLY : gath2cpl
    2222  USE climb_hq_mod,        ONLY : climb_hq_down, climb_hq_up
     23  USE climb_qbs_mod,       ONLY : climb_qbs_down, climb_qbs_up
    2324  USE climb_wind_mod,      ONLY : climb_wind_down, climb_wind_up
    2425  USE coef_diff_turb_mod,  ONLY : coef_diff_turb
    25   USE atke_exchange_coeff_mod, ONLY :  atke_compute_km_kh
     26  USE call_atke_mod,       ONLY :  call_atke
    2627  USE ioipsl_getin_p_mod,  ONLY : getin_p
    2728  USE cdrag_mod
     
    184185       rlon,      rlat,      rugoro,   rmu0,          &
    185186       lwdown_m,  cldt,          &
    186        rain_f,    snow_f,    solsw_m,  solswfdiff_m, sollw_m,       &
     187       rain_f,    snow_f,    bs_f, solsw_m,  solswfdiff_m, sollw_m,       &
    187188       gustiness,                                     &
    188        t,         q,        u,        v,             &
     189       t,         q,        qbs, u,        v,             &
    189190!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    190191!!       t_x,       q_x,       t_w,      q_w,           &
     
    198199       beta, &
    199200!>jyg
    200        alb_dir_m,    alb_dif_m,  zxsens,   zxevap,    &
     201       alb_dir_m,    alb_dif_m,  zxsens,   zxevap,  zxsnowerosion,  &
    201202       alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    202203       zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout, &
    203        d_t,       d_q,       d_u,      d_v, d_t_diss, &
     204       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss, &
    204205!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    205206       d_t_w,     d_q_w,                              &
     
    224225       rh2m,      zxfluxu,  zxfluxv,               &
    225226       z0m, z0h,   agesno,  sollw,    solsw,         &
    226        d_ts,      evap,    fluxlat,  t2m,           &
     227       d_ts,      evap,    fluxlat,   t2m,           &
    227228       wfbils,    wfbilo, wfevap, wfrain, wfsnow,   &
    228229       flux_t,   flux_u, flux_v,                    &
     
    230231!jyg<
    231232!!       zxfluxt,   zxfluxq,   q2m,      flux_q, tke,   &
    232        zxfluxt,   zxfluxq,   q2m,      flux_q, tke_x,  &
     233       zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x,  &
    233234!>jyg
    234235!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    317318         dser, dt_ds, zsig, zmea
    318319    use phys_output_var_mod, only: tkt, tks, taur, sss
     320    use blowing_snow_ini_mod, only : zeta_bs
    319321#ifdef CPP_XIOS
    320322    USE wxios, ONLY: missing_val
     
    351353    REAL, DIMENSION(klon),        INTENT(INOUT)     :: rain_f  ! rain fall
    352354    REAL, DIMENSION(klon),        INTENT(IN)        :: snow_f  ! snow fall
     355    REAL, DIMENSION(klon),        INTENT(IN)        :: bs_f  ! blowing snow fall
    353356    REAL, DIMENSION(klon),        INTENT(IN)        :: solsw_m ! net shortwave radiation at mean surface
    354357    REAL, DIMENSION(klon),        INTENT(IN)        :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface
     
    356359    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t       ! temperature (K)
    357360    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: q       ! water vapour (kg/kg)
     361    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: qbs       ! blowing snow specific content (kg/kg)
    358362    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: u       ! u speed
    359363    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: v       ! v speed
     
    420424                                                                  ! (=> positive sign upwards)
    421425    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxevap     ! water vapour flux at surface, positiv upwards
     426    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsnowerosion     ! blowing snow flux at surface
    422427    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol     ! temperature at surface, mean for each grid point
    423428!!! jyg le ???
     
    436441    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_u        ! change in u speed
    437442    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_v        ! change in v speed
     443    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_qbs        ! change in blowing snow specific content
     444
    438445
    439446    REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1)
     
    495502    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: sollw      ! net longwave radiation at surface
    496503    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: d_ts       ! change in temperature at surface
    497     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap     ! evaporation at surface
     504    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap       ! evaporation at surface
    498505    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: fluxlat    ! latent flux
    499506    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: t2m        ! temperature at 2 meter height
     
    517524    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxt    ! sensible heat flux, mean for each grid point
    518525    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxq    ! water vapour flux, mean for each grid point
     526    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxqbs    ! blowing snow flux, mean for each grid point
    519527    REAL, DIMENSION(klon, nbsrf),INTENT(OUT)        :: q2m        ! water vapour at 2 meter height
    520528    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q     ! water vapour flux(latent flux) (kg/m**2/s)
     529    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs   ! blowind snow vertical flux (kg/m**2
     530
    521531
    522532! Martin
     
    563573    REAL, DIMENSION(klon)              :: yalb,yalb_vis
    564574!albedo SB <<<
    565     REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1
     575    REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1, yqbs1
    566576    REAL, DIMENSION(klon)              :: yqa
    567577    REAL, DIMENSION(klon)              :: ysnow, yqsurf, yagesno, yqsol
    568     REAL, DIMENSION(klon)              :: yrain_f, ysnow_f
     578    REAL, DIMENSION(klon)              :: yrain_f, ysnow_f, ybs_f
    569579    REAL, DIMENSION(klon)              :: ysolsw, ysollw
    570580    REAL, DIMENSION(klon)              :: yfder
    571581    REAL, DIMENSION(klon)              :: yrugoro
    572582    REAL, DIMENSION(klon)              :: yfluxlat
     583    REAL, DIMENSION(klon)              :: yfluxbs
    573584    REAL, DIMENSION(klon)              :: y_d_ts
    574585    REAL, DIMENSION(klon)              :: y_flux_t1, y_flux_q1
    575586    REAL, DIMENSION(klon)              :: y_dflux_t, y_dflux_q
    576587    REAL, DIMENSION(klon)              :: y_flux_u1, y_flux_v1
     588    REAL, DIMENSION(klon)              :: y_flux_bs, y_flux0
    577589    REAL, DIMENSION(klon)              :: yt2m, yq2m, yu10m
    578590    INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w
     
    601613    REAL, DIMENSION(klon)              :: AcoefH, AcoefQ, BcoefH, BcoefQ
    602614    REAL, DIMENSION(klon)              :: AcoefU, AcoefV, BcoefU, BcoefV
     615    REAL, DIMENSION(klon)              :: AcoefQBS, BcoefQBS
    603616    REAL, DIMENSION(klon)              :: ypsref
    604617    REAL, DIMENSION(klon)              :: yevap, yevap_pot, ytsurf_new, yalb3_new
     
    609622    REAL, DIMENSION(klon)              :: meansqT ! mean square deviation of subsurface temperatures
    610623    REAL, DIMENSION(klon)              :: alb_m  ! mean albedo for whole SW interval
    611     REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss
     624    REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs
    612625    REAL, DIMENSION(klon,klev)         :: y_d_u, y_d_v
    613     REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q
     626    REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q, y_flux_qbs
    614627    REAL, DIMENSION(klon,klev)         :: y_flux_u, y_flux_v
    615     REAL, DIMENSION(klon,klev)         :: ycoefh, ycoefm,ycoefq
     628    REAL, DIMENSION(klon,klev)         :: ycoefh,ycoefm,ycoefq,ycoefqbs
    616629    REAL, DIMENSION(klon)              :: ycdragh, ycdragq, ycdragm
    617630    REAL, DIMENSION(klon,klev)         :: yu, yv
    618     REAL, DIMENSION(klon,klev)         :: yt, yq
     631    REAL, DIMENSION(klon,klev)         :: yt, yq, yqbs
    619632    REAL, DIMENSION(klon,klev)         :: ypplay, ydelp
    620633    REAL, DIMENSION(klon,klev)         :: delp
     
    678691    REAL, DIMENSION(klon,klev)         :: CcoefH, CcoefQ, DcoefH, DcoefQ
    679692    REAL, DIMENSION(klon,klev)         :: CcoefU, CcoefV, DcoefU, DcoefV
     693    REAL, DIMENSION(klon,klev)         :: CcoefQBS, DcoefQBS
    680694    REAL, DIMENSION(klon,klev)         :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x
    681695    REAL, DIMENSION(klon,klev)         :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w
     
    683697    REAL, DIMENSION(klon,klev)         :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w
    684698    REAL, DIMENSION(klon,klev)         :: Kcoef_hq, Kcoef_m, gama_h, gama_q
     699    REAL, DIMENSION(klon,klev)         :: gama_qbs, Kcoef_qbs
    685700    REAL, DIMENSION(klon,klev)         :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x
    686701    REAL, DIMENSION(klon,klev)         :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w
     
    775790    REAL, DIMENSION(klon)       :: uzon_w, vmer_w, speed_w, zri1_w, pref_w !speed_w, zri1_w, pref_w, added by Fuxing WANG, 04/03/2015
    776791    REAL, DIMENSION(klon)       :: zgeo1_w, tair1_w, qair1_w, tairsol_w
     792    REAL, DIMENSION(klon)       :: yus0, yvs0
    777793
    778794!!! jyg le 25/03/2013
     
    862878    REAL, DIMENSION(klon,nbsrf)        :: zx_t1
    863879    REAL, DIMENSION(klon, nbsrf)       :: alb          ! mean albedo for whole SW interval
     880    REAL, DIMENSION(klon,nbsrf)        :: snowerosion   
    864881    REAL, DIMENSION(klon)              :: ylwdown      ! jg : temporary (ysollwdown)
    865882    REAL, DIMENSION(klon)              :: ygustiness      ! jg : temporary (ysollwdown)
     
    977994 cdragh(:)=0. ; cdragm(:)=0.
    978995 zu1(:)=0. ; zv1(:)=0.
     996 yus0(:)=0. ; yvs0(:)=0.
    979997!albedo SB >>>
    980998  alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0.
    981999!albedo SB <<<
    982  zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0.
     1000 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0.
    9831001 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0.
    9841002 zxfluxlat(:)=0.
    9851003 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0.
    9861004 zn2mout(:,:)=0 ;
    987  d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
     1005 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
    9881006 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0.
    9891007 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0.
     
    10051023 d_ts(:,:)=0.
    10061024 evap(:,:)=0.
     1025 snowerosion(:,:)=0.
    10071026 fluxlat(:,:)=0.
    10081027 wfbils(:,:)=0. ; wfbilo(:,:)=0.
    10091028 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0.
    10101029 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0.
     1030 flux_qbs(:,:,:)=0.
    10111031 dflux_t(:)=0. ; dflux_q(:)=0.
    10121032 zxsnow(:)=0.
    1013  zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.
     1033 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0.
    10141034 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0.
    10151035 runoff(:)=0.
     
    10481068    yqsurf = 0.0  ; yalb = 0.0 ; yalb_vis = 0.0
    10491069!albedo SB <<<
    1050     yrain_f = 0.0 ; ysnow_f = 0.0    ; yfder = 0.0     ; ysolsw = 0.0
     1070    yrain_f = 0.0 ; ysnow_f = 0.0  ; ybs_f=0.0  ; yfder = 0.0     ; ysolsw = 0.0
    10511071    ysollw = 0.0  ; yz0m = 0.0 ; yz0h = 0.0    ; yz0h_oupas = 0.0 ; yu1 = 0.0   
    1052     yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0
     1072    yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0     ; yqbs1 = 0.0
    10531073    ydelp = 0.0   ; yu = 0.0         ; yv = 0.0        ; yt = 0.0         
    10541074    yq = 0.0      ; y_dflux_t = 0.0  ; y_dflux_q = 0.0
     1075    yqbs(:,:)=0.0 
    10551076    yrugoro = 0.0 ; ywindsp = 0.0   
    10561077!!    d_ts = 0.0    ; yfluxlat=0.0     ; flux_t = 0.0    ; flux_q = 0.0     
    1057     yfluxlat=0.0
     1078    yfluxlat=0.0 ; y_flux0(:)=0.0
    10581079!!    flux_u = 0.0  ; flux_v = 0.0     ; d_t = 0.0       ; d_q = 0.0     
    10591080!!    d_t_diss= 0.0 ;d_u = 0.0     ; d_v = 0.0
     
    10701091    ycldt = 0.0      ; yrmu0 = 0.0
    10711092    ! Martin
     1093    y_d_qbs(:,:)=0.0
    10721094
    10731095!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    13661388!   Provisional : set ybeta to standard values
    13671389       IF (nsrf .NE. is_ter) THEN
    1368            ybeta(:) = 1.
     1390           ybeta(1:knon) = 1.
    13691391       ELSE
    13701392           IF (iflag_split .EQ. 0) THEN
    1371               ybeta(:) = 1.
     1393              ybeta(1:knon) = 1.
    13721394           ELSE
    13731395             DO j = 1, knon
     
    13951417          yrain_f(j) = rain_f(i)
    13961418          ysnow_f(j) = snow_f(i)
     1419          ybs_f(j)   = bs_f(i)
    13971420          yagesno(j) = agesno(i,nsrf)
    13981421          yfder(j)   = fder(i)
     
    14061429          yu1(j)     = u(i,1)
    14071430          yv1(j)     = v(i,1)
     1431          yqbs1(j)   = qbs(i,1)
    14081432          ypaprs(j,klev+1) = paprs(i,klev+1)
    14091433!jyg<
     
    14191443!!! nrlmd le 13/06/2011
    14201444          y_delta_tsurf(j)=delta_tsurf(i,nsrf)
    1421 !!!
     1445          yfluxbs(j)=0.0
     1446          y_flux_bs(j) = 0.0
    14221447       ENDDO
    14231448! >> PC
     
    14581483             yt(j,k) = t(i,k)
    14591484             yq(j,k) = q(i,k)
     1485             yqbs(j,k)=qbs(i,k)
    14601486          ENDDO
    14611487        ENDDO
     
    15871613     ENDIF
    15881614
    1589         IF (prt_level >=10) print *,'clcdrag -> ycdragh ', ycdragh
     1615        IF (prt_level >=10) print *,'cdrag -> ycdragh ', ycdragh(1:knon)
    15901616       ELSE  !(iflag_split .eq.0)
    15911617
     
    16351661            ycdragm_w, ycdragh_w, zri1_w, pref_w, rain_f, zxtsol, ypplay(:,1) )
    16361662!
    1637         zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:)
     1663!!!bug !!        zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:)
     1664        zgeo1(1:knon) = wake_s(1:knon)*zgeo1_w(1:knon) + (1.-wake_s(1:knon))*zgeo1_x(1:knon)
    16381665
    16391666! --- special Dice. JYG+MPL 25112013 puis BOMEX
     
    16611688!!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012
    16621689      IF (prt_level >=10) THEN
    1663       print *,' args coef_diff_turb: yu ',  yu 
    1664       print *,' args coef_diff_turb: yv ',  yv 
    1665       print *,' args coef_diff_turb: yq ',  yq 
    1666       print *,' args coef_diff_turb: yt ',  yt 
    1667       print *,' args coef_diff_turb: yts ', yts 
    1668       print *,' args coef_diff_turb: yz0m ', yz0m 
    1669       print *,' args coef_diff_turb: yqsurf ', yqsurf 
    1670       print *,' args coef_diff_turb: ycdragm ', ycdragm
    1671       print *,' args coef_diff_turb: ycdragh ', ycdragh
    1672       print *,' args coef_diff_turb: ytke ', ytke
     1690      print *,' args coef_diff_turb: yu ',  yu(1:knon,:) 
     1691      print *,' args coef_diff_turb: yv ',  yv(1:knon,:)   
     1692      print *,' args coef_diff_turb: yq ',  yq(1:knon,:)   
     1693      print *,' args coef_diff_turb: yt ',  yt(1:knon,:)   
     1694      print *,' args coef_diff_turb: yts ', yts(1:knon)
     1695      print *,' args coef_diff_turb: yz0m ', yz0m(1:knon)
     1696      print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 
     1697      print *,' args coef_diff_turb: ycdragm ', ycdragm(1:knon)
     1698      print *,' args coef_diff_turb: ycdragh ', ycdragh(1:knon)
     1699      print *,' args coef_diff_turb: ytke ', ytke(1:knon,:)   
    16731700       ENDIF
    16741701
    16751702        IF (iflag_pbl>=50) THEN
    16761703
    1677         CALL atke_compute_km_kh(knon,klev,yu,yv,yt, &
     1704        CALL call_atke(dtime,knon,klev,ycdragm, ycdragh,yus0,yvs0,yts,yu,yv,yt, &
    16781705             ypplay,ypaprs,ytke,ycoefm, ycoefh)
    16791706
     
    16981725       ENDIF ! iflag_pbl >= 50
    16991726
    1700         IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh
     1727        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh(1:knon,:)
    17011728
    17021729
     
    17051732     
    17061733      IF (prt_level >=10) THEN
    1707       print *,' args coef_diff_turb: yu_x ',  yu_x 
    1708       print *,' args coef_diff_turb: yv_x ',  yv_x 
    1709       print *,' args coef_diff_turb: yq_x ',  yq_x 
    1710       print *,' args coef_diff_turb: yt_x ',  yt_x 
    1711       print *,' args coef_diff_turb: yts_x ', yts_x 
    1712       print *,' args coef_diff_turb: yqsurf ', yqsurf 
    1713       print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x
    1714       print *,' args coef_diff_turb: ycdragh_x ', ycdragh_x
    1715       print *,' args coef_diff_turb: ytke_x ', ytke_x
     1734      print *,' args coef_diff_turb: yu_x ',  yu_x(1:knon,:)     
     1735      print *,' args coef_diff_turb: yv_x ',  yv_x(1:knon,:)     
     1736      print *,' args coef_diff_turb: yq_x ',  yq_x(1:knon,:)     
     1737      print *,' args coef_diff_turb: yt_x ',  yt_x(1:knon,:)     
     1738      print *,' args coef_diff_turb: yts_x ', yts_x(1:knon)
     1739      print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 
     1740      print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x(1:knon)
     1741      print *,' args coef_diff_turb: ycdragh_x ', ycdragh_x(1:knon)
     1742      print *,' args coef_diff_turb: ytke_x ', ytke_x(1:knon,:)   
    17161743      ENDIF
    17171744
     
    17191746        IF (iflag_pbl>=50) THEN
    17201747     
    1721         CALL atke_compute_km_kh(knon,klev,yu_x,yv_x,yt_x, &
     1748        CALL call_atke(dtime,knon,klev,ycdragm_x,ycdragh_x,yus0,yvs0,yts_x,yu_x,yv_x,yt_x, &
    17221749             ypplay,ypaprs,ytke_x,ycoefm_x, ycoefh_x)
    17231750
     
    17421769        ENDIF ! iflag_pbl >= 50
    17431770
    1744         IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x
     1771        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x(1:knon,:)
    17451772!
    17461773      IF (prt_level >=10) THEN
    1747       print *,' args coef_diff_turb: yu_w ',  yu_w 
    1748       print *,' args coef_diff_turb: yv_w ',  yv_w 
    1749       print *,' args coef_diff_turb: yq_w ',  yq_w 
    1750       print *,' args coef_diff_turb: yt_w ',  yt_w 
    1751       print *,' args coef_diff_turb: yts_w ', yts_w 
    1752       print *,' args coef_diff_turb: yqsurf ', yqsurf 
    1753       print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w
    1754       print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w
    1755       print *,' args coef_diff_turb: ytke_w ', ytke_w
     1774      print *,' args coef_diff_turb: yu_w ',  yu_w(1:knon,:)
     1775      print *,' args coef_diff_turb: yv_w ',  yv_w(1:knon,:) 
     1776      print *,' args coef_diff_turb: yq_w ',  yq_w(1:knon,:) 
     1777      print *,' args coef_diff_turb: yt_w ',  yt_w(1:knon,:) 
     1778      print *,' args coef_diff_turb: yts_w ', yts_w(1:knon)
     1779      print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 
     1780      print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w(1:knon)
     1781      print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w(1:knon)
     1782      print *,' args coef_diff_turb: ytke_w ', ytke_w(1:knon,:)
    17561783      ENDIF
    17571784     
    17581785        IF (iflag_pbl>=50) THEN
    17591786       
    1760         CALL atke_compute_km_kh(knon,klev,yu_w,yv_w,yt_w, &
     1787        CALL call_atke(dtime,knon,klev,ycdragm_w,ycdragh_w,yus0,yvs0,yts_w,yu_w,yv_w,yt_w, &
    17611788             ypplay,ypaprs,ytke_w,ycoefm_w, ycoefh_w)
    17621789
     
    17811808
    17821809
    1783         IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w
     1810        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w(1:knon,:)
    17841811
    17851812!!!jyg le 10/04/2013
     
    18801907       ENDIF  ! (iflag_split .eq.0)
    18811908!!!
     1909
     1910! For blowing snow:
     1911    IF (ok_bs) THEN
     1912     ! following Bintanja et al 2000, part II
     1913     ! we assume that the eddy diffsivity coefficient for
     1914     ! suspended particles is larger than Km by a factor zeta_bs
     1915     ! which is equal to 3 by default
     1916     do k=1,klev
     1917        do j=1,knon
     1918           ycoefqbs(j,k)=ycoefm(j,k)*zeta_bs
     1919        enddo
     1920     enddo
     1921     CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, &
     1922     ydelp, yt, yqbs, dtime, &
     1923     CcoefQBS, DcoefQBS, &
     1924     Kcoef_qbs, gama_qbs, &
     1925     AcoefQBS, BcoefQBS)
     1926    ENDIF
    18821927
    18831928!****************************************************************************************
     
    19992044!!!
    20002045       IF (prt_level >=10) THEN
    2001          PRINT *,'pbl_surface (merge->): yt(1,:) ',yt(1,:)
    2002          PRINT *,'pbl_surface (merge->): yq(1,:) ',yq(1,:)
    2003          PRINT *,'pbl_surface (merge->): yu(1,:) ',yu(1,:)
    2004          PRINT *,'pbl_surface (merge->): yv(1,:) ',yv(1,:)
    2005          PRINT *,'pbl_surface (merge->): AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) ', &
    2006                                          AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1)
    2007          PRINT *,'pbl_surface (merge->): BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) ', &
    2008                                          BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1)
     2046         DO i = 1, min(1,knon)
     2047           PRINT *,'pbl_surface (merge->): yt(1,:) ',yt(i,:)
     2048           PRINT *,'pbl_surface (merge->): yq(1,:) ',yq(i,:)
     2049           PRINT *,'pbl_surface (merge->): yu(1,:) ',yu(i,:)
     2050           PRINT *,'pbl_surface (merge->): yv(1,:) ',yv(i,:)
     2051           PRINT *,'pbl_surface (merge->): AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) ', &
     2052                                           AcoefH(i), AcoefQ(i), AcoefU(i), AcoefV(i)
     2053           PRINT *,'pbl_surface (merge->): BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) ', &
     2054                                           BcoefH(i), BcoefQ(i), BcoefU(i), BcoefV(i)
     2055         ENDDO
    20092056
    20102057       ENDIF
     
    20572104               debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, &
    20582105!!jyg               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2059                yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2106               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    20602107               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    20612108               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    20632110               ylwdown, yq2m, yt2m, &
    20642111               ysnow, yqsol, yagesno, ytsoil, &
    2065                yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
     2112               yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,&
    20662113               yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, &
    20672114               y_flux_u1, y_flux_v1, &
     
    21062153                  yrmu0, ylwdown, yalb, zgeo1, &
    21072154                  ysolsw, ysollw, yts, ypplay(:,1), &
    2108                   !!jyg               ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2109                   ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2155                  ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    21102156                  AcoefH, AcoefQ, BcoefH, BcoefQ, &
    21112157                  AcoefU, AcoefV, BcoefU, BcoefV, &
     2158                  AcoefQBS, BcoefQBS, &
    21122159                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2113                   ysnow, yqsurf, yqsol, yagesno, &
     2160                  ysnow, yqsurf, yqsol,yqbs1, yagesno, &
    21142161                  ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, &
    2115                   ytsurf_new, y_dflux_t, y_dflux_q, &
     2162                  yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, &
    21162163                  yzmea, yzsig, ycldt, &
    21172164                  ysnowhgt, yqsnow, ytoice, ysissnow, &
     
    21472194               itap, dtime, jour, knon, ni, &
    21482195!!jyg               ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2149                ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&    ! ym missing init
     2196               ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),&    ! ym missing init
    21502197               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    21512198               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    21582205               ydt_ds(:knon), ytkt(:knon), ytks(:knon), ytaur(:knon), ysss)
    21592206      IF (prt_level >=10) THEN
    2160           print *,'arg de surf_ocean: ycdragh ',ycdragh
    2161           print *,'arg de surf_ocean: ycdragm ',ycdragm
    2162           print *,'arg de surf_ocean: yt ', yt
    2163           print *,'arg de surf_ocean: yq ', yq
    2164           print *,'arg de surf_ocean: yts ', yts
    2165           print *,'arg de surf_ocean: AcoefH ',AcoefH
    2166           print *,'arg de surf_ocean: AcoefQ ',AcoefQ
    2167           print *,'arg de surf_ocean: BcoefH ',BcoefH
    2168           print *,'arg de surf_ocean: BcoefQ ',BcoefQ
    2169           print *,'arg de surf_ocean: yevap ',yevap
    2170           print *,'arg de surf_ocean: yfluxsens ',yfluxsens
    2171           print *,'arg de surf_ocean: yfluxlat ',yfluxlat
    2172           print *,'arg de surf_ocean: ytsurf_new ',ytsurf_new
     2207          print *,'arg de surf_ocean: ycdragh ',ycdragh(1:knon)
     2208          print *,'arg de surf_ocean: ycdragm ',ycdragm(1:knon)
     2209          print *,'arg de surf_ocean: yt ', yt(1:knon,:)
     2210          print *,'arg de surf_ocean: yq ', yq(1:knon,:)
     2211          print *,'arg de surf_ocean: yts ', yts(1:knon)
     2212          print *,'arg de surf_ocean: AcoefH ',AcoefH(1:knon)
     2213          print *,'arg de surf_ocean: AcoefQ ',AcoefQ(1:knon)
     2214          print *,'arg de surf_ocean: BcoefH ',BcoefH(1:knon)
     2215          print *,'arg de surf_ocean: BcoefQ ',BcoefQ(1:knon)
     2216          print *,'arg de surf_ocean: yevap ',yevap(1:knon)
     2217          print *,'arg de surf_ocean: yfluxsens ',yfluxsens(1:knon)
     2218          print *,'arg de surf_ocean: yfluxlat ',yfluxlat(1:knon)
     2219          print *,'arg de surf_ocean: ytsurf_new ',ytsurf_new(1:knon)
    21732220       ENDIF
    21742221! Special DICE MPL 05082013 puis BOMEX MPL 20150410
     
    22202267
    22212268       IF (evap0>=0.) THEN
    2222           yevap(:)=evap0
    2223           yevap(:)=RLVTT*evap0
     2269          yevap(1:knon)=evap0
     2270          yevap(1:knon)=RLVTT*evap0
    22242271       ENDIF
    22252272
     
    22772324          ENDDO
    22782325        ENDIF ! (ok_flux_surf)
     2326
     2327        ! flux of blowing snow at the first level
     2328        IF (ok_bs) THEN
     2329        DO j=1,knon
     2330        y_flux_bs(j)=yfluxbs(j)
     2331        ENDDO
     2332        ENDIF
    22792333!
    22802334! ------------------------------------------------------------------------------
     
    24212475       IF (prt_level >= 10) THEN
    24222476         print *,'pbl_surface, ybeta , yevap, yevap_pot ', &
    2423                                ybeta , yevap, yevap_pot
     2477                               ybeta(1:knon) , yevap(1:knon), yevap_pot(1:knon)
    24242478       ENDIF  ! (prt_level >= 10)
    24252479!
     
    25832637!
    25842638       ENDIF  ! (iflag_split .eq.0)
     2639
     2640       IF (ok_bs) THEN
     2641            CALL climb_qbs_up(knon, dtime, yqbs, &
     2642            y_flux_bs, ypaprs, ypplay, &
     2643            AcoefQBS, BcoefQBS, &
     2644            CcoefQBS, DcoefQBS, &
     2645            Kcoef_qbs, gama_qbs, &
     2646            y_flux_qbs(:,:), y_d_qbs(:,:))
     2647       ENDIF
     2648
    25852649!!!
    25862650!!
     
    26962760!!!
    26972761
    2698 !      print*,'Dans pbl OK1'
    2699 
    2700 !jyg<
    2701 !!       evap(:,nsrf) = - flux_q(:,1,nsrf)
    2702 !>jyg
     2762       ! tendencies of blowing snow
     2763       IF (ok_bs) THEN
     2764           DO k = 1, klev   
     2765            DO j = 1, knon
     2766                i = ni(j)
     2767                y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j)
     2768                flux_qbs(i,k,nsrf) = y_flux_qbs(j,k)
     2769            ENDDO
     2770          ENDDO
     2771       ENDIF
     2772
     2773
    27032774       DO j = 1, knon
    27042775          i = ni(j)
    27052776          evap(i,nsrf) = - flux_q(i,1,nsrf)                  !jyg
     2777          if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif
    27062778          beta(i,nsrf) = ybeta(j)                             !jyg
    27072779          d_ts(i,nsrf) = y_d_ts(j)
     
    28742946       ENDDO
    28752947
     2948
     2949       IF (ok_bs) THEN
     2950         DO k = 1, klev
     2951         DO j = 1, knon
     2952         i = ni(j)
     2953         d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k)
     2954         ENDDO
     2955         ENDDO
     2956        ENDIF
     2957
    28762958!      print*,'Dans pbl OK4'
    28772959
    28782960       IF (prt_level >=10) THEN
    28792961         print *, 'pbl_surface tendencies for w: d_t_w, d_t_x, d_t ', &
    2880           d_t_w(:,1), d_t_x(:,1), d_t(:,1)
     2962          d_t_w(1:knon,1), d_t_x(1:knon,1), d_t(1:knon,1)
    28812963       ENDIF
    28822964
     
    31243206       IF (prt_level >=10) THEN
    31253207         print *, 'T2m, q2m, RH2m ', &
    3126           t2m, q2m, rh2m
     3208          t2m(1:knon,:), q2m(1:knon,:), rh2m(1:knon)
    31273209       ENDIF
    31283210
     
    31373219            ytherm,ytrmb1,ytrmb2,ytrmb3,ylcl)
    31383220          IF (prt_level >=10) THEN
    3139        print *,' Arg. de HBTM: yt2m ',yt2m
    3140        print *,' Arg. de HBTM: yt10m ',yt10m
    3141        print *,' Arg. de HBTM: yq2m ',yq2m
    3142        print *,' Arg. de HBTM: yq10m ',yq10m
    3143        print *,' Arg. de HBTM: yustar ',yustar
    3144        print *,' Arg. de HBTM: y_flux_t ',y_flux_t
    3145        print *,' Arg. de HBTM: y_flux_q ',y_flux_q
    3146        print *,' Arg. de HBTM: yu ',yu
    3147        print *,' Arg. de HBTM: yv ',yv
    3148        print *,' Arg. de HBTM: yt ',yt
    3149        print *,' Arg. de HBTM: yq ',yq
     3221       print *,' Arg. de HBTM: yt2m ',yt2m(1:knon)
     3222       print *,' Arg. de HBTM: yt10m ',yt10m(1:knon)
     3223       print *,' Arg. de HBTM: yq2m ',yq2m(1:knon)
     3224       print *,' Arg. de HBTM: yq10m ',yq10m(1:knon)
     3225       print *,' Arg. de HBTM: yustar ',yustar(1:knon)
     3226       print *,' Arg. de HBTM: y_flux_t ',y_flux_t(1:knon,:)
     3227       print *,' Arg. de HBTM: y_flux_q ',y_flux_q(1:knon,:)
     3228       print *,' Arg. de HBTM: yu ',yu(1:knon,:)
     3229       print *,' Arg. de HBTM: yv ',yv(1:knon,:)
     3230       print *,' Arg. de HBTM: yt ',yt(1:knon,:)
     3231       print *,' Arg. de HBTM: yq ',yq(1:knon,:)
    31503232          ENDIF
    31513233       ELSE  ! (iflag_split .eq.0)
     
    31563238            ytherm_x,ytrmb1_x,ytrmb2_x,ytrmb3_x,ylcl_x)
    31573239          IF (prt_level >=10) THEN
    3158        print *,' Arg. de HBTM: yt2m_x ',yt2m_x
    3159        print *,' Arg. de HBTM: yt10m_x ',yt10m_x
    3160        print *,' Arg. de HBTM: yq2m_x ',yq2m_x
    3161        print *,' Arg. de HBTM: yq10m_x ',yq10m_x
    3162        print *,' Arg. de HBTM: yustar_x ',yustar_x
    3163        print *,' Arg. de HBTM: y_flux_t_x ',y_flux_t_x
    3164        print *,' Arg. de HBTM: y_flux_q_x ',y_flux_q_x
    3165        print *,' Arg. de HBTM: yu_x ',yu_x
    3166        print *,' Arg. de HBTM: yv_x ',yv_x
    3167        print *,' Arg. de HBTM: yt_x ',yt_x
    3168        print *,' Arg. de HBTM: yq_x ',yq_x
     3240       print *,' Arg. de HBTM: yt2m_x ',yt2m_x(1:knon)
     3241       print *,' Arg. de HBTM: yt10m_x ',yt10m_x(1:knon)
     3242       print *,' Arg. de HBTM: yq2m_x ',yq2m_x(1:knon)
     3243       print *,' Arg. de HBTM: yq10m_x ',yq10m_x(1:knon)
     3244       print *,' Arg. de HBTM: yustar_x ',yustar_x(1:knon)
     3245       print *,' Arg. de HBTM: y_flux_t_x ',y_flux_t_x(1:knon,:)
     3246       print *,' Arg. de HBTM: y_flux_q_x ',y_flux_q_x(1:knon,:)
     3247       print *,' Arg. de HBTM: yu_x ',yu_x(1:knon,:)
     3248       print *,' Arg. de HBTM: yv_x ',yv_x(1:knon,:)
     3249       print *,' Arg. de HBTM: yt_x ',yt_x(1:knon,:)
     3250       print *,' Arg. de HBTM: yq_x ',yq_x(1:knon,:)
    31693251          ENDIF
    31703252        CALL HBTM(knon, ypaprs, ypplay, &
     
    31953277        ENDDO
    31963278        IF (prt_level >=10) THEN
    3197           print *, 'After HBTM: pblh ', pblh
    3198           print *, 'After HBTM: plcl ', plcl
    3199           print *, 'After HBTM: cteiCL ', cteiCL
     3279          print *, 'After HBTM: pblh ', pblh(1:knon,:)
     3280          print *, 'After HBTM: plcl ', plcl(1:knon,:)
     3281          print *, 'After HBTM: cteiCL ', cteiCL(1:knon,:)
    32003282        ENDIF
    32013283       ELSE  !(iflag_split .eq.0)
     
    32153297        ENDDO
    32163298        IF (prt_level >=10) THEN
    3217           print *, 'After HBTM: pblh_x ', pblh_x
    3218           print *, 'After HBTM: plcl_x ', plcl_x
    3219           print *, 'After HBTM: cteiCL_x ', cteiCL_x
     3299          print *, 'After HBTM: pblh_x ', pblh_x(1:knon,:)
     3300          print *, 'After HBTM: plcl_x ', plcl_x(1:knon,:)
     3301          print *, 'After HBTM: cteiCL_x ', cteiCL_x(1:knon,:)
    32203302        ENDIF
    32213303        DO j=1, knon
     
    32343316        ENDDO
    32353317        IF (prt_level >=10) THEN
    3236           print *, 'After HBTM: pblh_w ', pblh_w
    3237           print *, 'After HBTM: plcl_w ', plcl_w
    3238           print *, 'After HBTM: cteiCL_w ', cteiCL_w
     3318          print *, 'After HBTM: pblh_w ', pblh_w(1:knon,:)
     3319          print *, 'After HBTM: plcl_w ', plcl_w(1:knon,:)
     3320          print *, 'After HBTM: cteiCL_w ', cteiCL_w(1:knon,:)
    32393321        ENDIF
    32403322!!!
     
    33273409       fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i)
    33283410    ENDDO
     3411
     3412    ! if blowing snow
     3413    if (ok_bs) then 
     3414       DO nsrf = 1, nbsrf
     3415       DO k = 1, klev
     3416       DO i = 1, klon
     3417         zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf)
     3418       ENDDO
     3419       ENDDO
     3420       ENDDO
     3421
     3422       DO i = 1, klon
     3423        zxsnowerosion(i)     = zxfluxqbs(i,1) ! blowings snow flux at the surface
     3424       END DO
     3425    endif
     3426
    33293427!!!
    33303428
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyaqua_mod.F90

    r4463 r4669  
    360360    ql_ancien   = 0.
    361361    qs_ancien   = 0.
     362    qbs_ancien  = 0.
    362363    u_ancien    = 0.
    363364    v_ancien    = 0.
     
    365366    prlw_ancien = 0.
    366367    prsw_ancien = 0. 
     368    prbsw_ancien= 0.
    367369
    368370    ale_wake    = 0.
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyetat0_mod.F90

    r4389 r4669  
    2020       qsol, fevap, z0m, z0h, agesno, &
    2121       du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, &
    22        falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, &
    23        ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &
    24        rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, &
     22       falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, &
     23       ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &
     24       rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, &
    2525       solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, &
    2626       wake_deltat, wake_delta_pbl_TKE, delta_tsurf, beta_aridity, wake_fip, wake_pe, &
     
    300300
    301301!===================================================================
     302! Lecture dans le cas iflag_pbl_surface =1
     303!===================================================================
     304
     305   if ( iflag_physiq <= 1 ) then
     306!===================================================================
    302307  ! Lecture des temperatures du sol profond:
    303308!===================================================================
     
    327332  found=phyetat0_get(snow_fall,"snow_f","snow fall",0.)
    328333  found=phyetat0_get(rain_fall,"rain_f","rain fall",0.)
    329 
     334  IF (ok_bs) THEN
     335     found=phyetat0_get(bs_fall,"bs_f","blowing snow fall",0.)
     336  ELSE
     337     bs_fall(:)=0.
     338  ENDIF
    330339!=======================================================================
    331340! Radiation
     
    374383  ENDIF
    375384
     385  endif ! iflag_physiq <= 1
     386
    376387  ! Lecture de l'age de la neige:
    377388  found=phyetat0_srf(agesno,"AGESNO","SNOW AGE",0.001)
     
    388399  ancien_ok=ancien_ok.AND.phyetat0_get(prlw_ancien,"PRLWANCIEN","PRLWANCIEN",0.)
    389400  ancien_ok=ancien_ok.AND.phyetat0_get(prsw_ancien,"PRSWANCIEN","PRSWANCIEN",0.)
     401
     402  ! cas specifique des variables de la neige soufflee
     403  IF (ok_bs) THEN
     404     ancien_ok=ancien_ok.AND.phyetat0_get(qbs_ancien,"QBSANCIEN","QBSANCIEN",0.)
     405     ancien_ok=ancien_ok.AND.phyetat0_get(prbsw_ancien,"PRBSWANCIEN","PRBSWANCIEN",0.)
     406  ELSE
     407     qbs_ancien(:,:)=0.
     408     prbsw_ancien(:)=0.
     409  ENDIF
    390410
    391411  ! Ehouarn: addtional tests to check if t_ancien, q_ancien contain
     
    401421       (maxval(t_ancien).EQ.minval(t_ancien)) ) THEN
    402422    ancien_ok=.false.
     423  ENDIF
     424
     425  IF (ok_bs) THEN
     426    IF ( (maxval(qbs_ancien).EQ.minval(qbs_ancien))       .OR. &
     427         (maxval(prbsw_ancien).EQ.minval(prbsw_ancien)) ) THEN
     428       ancien_ok=.false.
     429    ENDIF
    403430  ENDIF
    404431
     
    591618  ! Initialize module pbl_surface_mod
    592619
     620  if ( iflag_physiq <= 1 ) then
    593621  CALL pbl_surface_init(fder, snow, qsurf, tsoil)
     622  endif
    594623
    595624  ! Initialize module ocean_cpl_mod for the case of coupled ocean
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyredem.F90

    r4389 r4669  
    1515                                ftsol, beta_aridity, delta_tsurf, falb_dir,  &
    1616                                falb_dif, qsol, fevap, radsol, solsw, sollw, &
    17                                 sollwdown, rain_fall, snow_fall, z0m, z0h,  &
     17                                sollwdown, rain_fall, snow_fall, bs_fall, z0m, z0h, &
    1818                                agesno, zmea, zstd, zsig, zgam, zthe, zpic,  &
    1919                                zval, rugoro, t_ancien, q_ancien,            &
    20                                 prw_ancien, prlw_ancien, prsw_ancien,        &
    21                                 ql_ancien, qs_ancien, rneb_ancien, u_ancien, &
     20                                prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien,      &
     21                                ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, u_ancien, &
    2222                                v_ancien, clwcon, rnebcon, ratqs, pbl_tke,   &
    2323                                wake_delta_pbl_tke, zmax0, f0, sig1, w01,    &
     
    7676  ! Get variables which will be written to restart file from module
    7777  ! pbl_surface_mod
    78   CALL pbl_surface_final(fder, snow, qsurf,  tsoil)
     78  if ( iflag_physiq <= 1 ) then
     79     CALL pbl_surface_final(fder, snow, qsurf,  tsoil)
     80  endif
    7981
    8082  ! Get a variable calculated in module fonte_neige_mod
     
    243245
    244246    CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien)
     247
     248    IF (ok_bs) THEN
     249       CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall)
     250       CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien)
     251       CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien)
     252    ENDIF
    245253
    246254    CALL put_field(pass,"RNEBANCIEN", "RNEBANCIEN", rneb_ancien)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_local_var_mod.F90

    • Property svn:keywords changed from Author Date Id Revision to Id
    r4489 r4669  
    1414      REAL, SAVE, ALLOCATABLE :: ql_seri(:,:),qs_seri(:,:)
    1515      !$OMP THREADPRIVATE(ql_seri,qs_seri)
     16      REAL, SAVE, ALLOCATABLE :: qbs_seri(:,:)
     17      !$OMP THREADPRIVATE(qbs_seri)
    1618      REAL, SAVE, ALLOCATABLE :: u_seri(:,:), v_seri(:,:)
    1719      !$OMP THREADPRIVATE(u_seri, v_seri)
     
    2830      REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:)
    2931      !$OMP THREADPRIVATE(d_t_dyn, d_q_dyn)
    30       REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:)
    31       !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn)
    32       REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:)
    33       !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d)
     32      REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:), d_qbs_dyn(:,:)
     33      !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn, d_qbs_dyn)
     34      REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:), d_qbs_dyn2d(:)
     35      !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d)
    3436      REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:)
    3537      !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn)
     
    7173      REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:)
    7274      !$OMP THREADPRIVATE(d_u_oli, d_v_oli)
    73       REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_t_diss(:,:)
    74       !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf,d_t_diss)
     75      REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_qbs_vdf(:,:), d_t_diss(:,:)
     76      !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_qbs_vdf, d_t_diss)
    7577      REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:)
    7678      !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf)
     
    8082      REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:)
    8183      !$OMP THREADPRIVATE( d_t_vdf_x, d_q_vdf_x)
     84      REAL, SAVE, ALLOCATABLE :: d_t_bs(:,:), d_q_bs(:,:), d_qbs_bs(:,:)
     85      !$OMP THREADPRIVATE( d_t_bs,d_q_bs, d_qbs_bs)
    8286!>nrlmd+jyg
    8387      REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:)
     
    276280!$OMP THREADPRIVATE(sens, flwp, fiwp)
    277281!!
     282!FC
     283      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zxfluxt, zxfluxq
     284!$OMP THREADPRIVATE(zxfluxt, zxfluxq)
     285!FC
    278286!!         Wake variables
    279287      REAL,ALLOCATABLE,SAVE,DIMENSION(:)            :: alp_wake
     
    312320      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt
    313321!$OMP THREADPRIVATE(JrNt)
    314       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw
    315 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)
     322      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw
     323!$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw)
    316324      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m
    317325!$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m)
     
    330338      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte
    331339!$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte)
     340      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic
     341!$OMP THREADPRIVATE(zxustartlic, zxrhoslic)
    332342      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving
    333343!$OMP THREADPRIVATE(zxfqcalving)
     
    451461      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi
    452462!$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi)
    453       REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca
    454 !$OMP THREADPRIVATE(prfl, psfl, fraca)
     463      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl
     464!$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl)
    455465      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2
    456466!$OMP THREADPRIVATE(Vprecip, zw2)
     
    470480      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rneb,rnebjn,rneblsvol
    471481!$OMP THREADPRIVATE(rneb,rnebjn,rneblsvol)
     482      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfraclr,pfracld
     483!$OMP THREADPRIVATE(pfraclr,pfracld)
    472484
    473485! variables de sorties MM
     
    523535      REAL, SAVE, ALLOCATABLE :: fcontrP(:,:)
    524536      !$OMP THREADPRIVATE(fcontrP)
     537      REAL, SAVE, ALLOCATABLE :: distcltop(:,:)
     538      !$OMP THREADPRIVATE(distcltop)
     539
    525540
    526541#ifdef CPP_StratAer
     
    608623
    609624IMPLICIT NONE
    610       ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev))
     625      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    611626      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    612627      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     
    616631      ALLOCATE(tr_seri(klon,klev,nbtr))
    617632      ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
    618       ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev))
    619       ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon))
     633      ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev))
     634      ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon))
    620635      ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
    621636      ALLOCATE(d_tr_dyn(klon,klev,nbtr))                   !RomP
     
    640655      ALLOCATE(plul_st(klon),plul_th(klon))
    641656      ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev))
    642 
     657      ALLOCATE (d_qbs_vdf(klon,klev))
     658      ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev))
    643659      ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev))
    644660      ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev))
     
    769785      ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon))
    770786      ALLOCATE(JrNt(klon))
    771       ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))
    772       ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
     787      ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon))
     788      ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
    773789      ALLOCATE(s_lcl(klon))
    774790      ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon))
     
    785801      ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon))
    786802      ALLOCATE(zxrunofflic(klon))
     803      ALLOCATE(zxustartlic(klon), zxrhoslic(klon))
     804      zxustartlic(:)=0. ; zxrhoslic(:)=0.
    787805      ALLOCATE(rain_lsc(klon))
    788806      ALLOCATE(rain_num(klon))
     
    841859      ALLOCATE(wfevap(klon, nbsrf), wfrain(klon,nbsrf), wfsnow(klon, nbsrf))
    842860      ALLOCATE(evap_pot(klon, nbsrf))
     861! FC
     862      ALLOCATE(zxfluxq(klon,klev),zxfluxt(klon,klev))
    843863!
    844864!  Deep convective variables used in phytrac
     
    861881      ALLOCATE(prfl(klon, klev+1))
    862882      ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1))
     883      ALLOCATE(bsfl(klon,klev+1))
    863884      ALLOCATE(zw2(klon, klev+1))
    864885
     
    874895      ALLOCATE(beta_prec(klon,klev))
    875896      ALLOCATE(rneb(klon,klev),rnebjn(klon,klev),rneblsvol(klon,klev))
     897      ALLOCATE(pfraclr(klon,klev),pfracld(klon,klev))
     898      pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined
     899      ALLOCATE(distcltop(klon,klev))
    876900
    877901
     
    942966USE indice_sol_mod
    943967IMPLICIT NONE
    944       DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri)
     968      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    945969      DEALLOCATE(u_seri,v_seri)
    946970      DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
     
    949973      DEALLOCATE(tr_seri)
    950974      DEALLOCATE(d_t_dyn,d_q_dyn)
    951       DEALLOCATE(d_ql_dyn,d_qs_dyn)
    952       DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d)
     975      DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn)
     976      DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d)
    953977      DEALLOCATE(d_u_dyn,d_v_dyn)
    954978      DEALLOCATE(d_tr_dyn)                      !RomP
     
    973997      DEALLOCATE(plul_st,plul_th)
    974998      DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss)
     999      DEALLOCATE(d_qbs_vdf)
     1000      DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs)
    9751001      DEALLOCATE(d_u_vdf,d_v_vdf)
    9761002      DEALLOCATE(d_t_oli,d_t_oro)
     
    10831109      DEALLOCATE(cldm, cldq, cldt, qsat2m)
    10841110      DEALLOCATE(JrNt)
    1085       DEALLOCATE(dthmin, evap, fder, plcl, plfc)
    1086       DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)
     1111      DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc)
     1112      DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl)
    10871113      DEALLOCATE(s_pblh, s_pblt, s_therm)
    10881114!
     
    10971123      DEALLOCATE(zxfqcalving, zxfluxlat)
    10981124      DEALLOCATE(zxrunofflic)
     1125      DEALLOCATE(zxustartlic, zxrhoslic)
    10991126      DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf)
    11001127      DEALLOCATE(rain_lsc)
     
    11291156      DEALLOCATE(alp_bl_stat, n2, s2)
    11301157      DEALLOCATE(proba_notrig, random_notrig)
     1158!FC
     1159      DEALLOCATE(zxfluxq,zxfluxt)
    11311160
    11321161      DEALLOCATE(dnwd0)
     
    11651194
    11661195
    1167       DEALLOCATE(prfl, psfl, fraca, Vprecip)
     1196      DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip)
    11681197      DEALLOCATE(zw2)
    11691198
     
    11781207      DEALLOCATE(beta_prec)
    11791208      DEALLOCATE(rneb)
     1209      DEALLOCATE(pfraclr,pfracld)
    11801210      DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic)
    1181 
     1211      DEALLOCATE(distcltop)
    11821212      DEALLOCATE (p_tropopause)
    11831213      DEALLOCATE (z_tropopause)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_ctrlout_mod.F90

    r4412 r4669  
    378378  TYPE(ctrl_out), SAVE :: o_snow = ctrl_out((/ 1, 1, 10, 10, 5, 10, 11, 11, 11, 11/), &
    379379    'snow', 'Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     380  TYPE(ctrl_out), SAVE :: o_bsfall = ctrl_out((/ 10, 10, 10, 10, 5, 10, 11, 11, 11, 11/), &
     381    'bsfall', 'Blowing Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    380382  TYPE(ctrl_out), SAVE :: o_evap = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    381383    'evap', 'Evaporat', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    382 
     384  TYPE(ctrl_out), SAVE :: o_snowerosion = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     385   'snowerosion', 'blowing snow flux', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     386  TYPE(ctrl_out), SAVE :: o_ustart_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     387    'ustart_lic', 'threshold velocity', 'm/s', (/ ('', i=1, 10) /))
     388  TYPE(ctrl_out), SAVE :: o_rhosnow_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     389    'rhosnow_lic', 'snow density lic', 'kg/m3', (/ ('', i=1, 10) /))
    383390  TYPE(ctrl_out), SAVE :: o_sens_prec_liq_oce = ctrl_out((/ 5, 5, 10, 10, 5, 10, 11, 11, 11, 11/), &
    384391    'sens_rain_oce', 'Sensible heat flux of liquid prec. over ocean', 'W/m2', (/ ('', i=1, 10) /))
     
    743750  TYPE(ctrl_out), SAVE :: o_prsw = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    744751    'prsw', 'Precipitable solid water', 'kg/m2', (/ ('', i=1, 10) /))
     752  TYPE(ctrl_out), SAVE :: o_prbsw = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     753    'prbsw', 'Precipitable blowing snow', 'kg/m2', (/ ('', i=1, 10) /))
    745754  TYPE(ctrl_out), SAVE :: o_s_pblh = ctrl_out((/ 1, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    746755    's_pblh', 'Boundary Layer Height', 'm', (/ ('', i=1, 10) /))
     
    14321441  TYPE(ctrl_out), SAVE :: o_ocond = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
    14331442    'ocond', 'Condensed water', 'kg/kg', (/ ('', i=1, 10) /))
     1443  TYPE(ctrl_out), SAVE :: o_qbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1444    'qbs', 'Specific content of blowing snow', 'kg/kg', (/ ('', i=1, 10) /))
    14341445  TYPE(ctrl_out), SAVE :: o_wvapp = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14351446    'wvapp', '', '', (/ ('', i=1, 10) /))
     
    14621473  TYPE(ctrl_out), SAVE :: o_rneblsvol = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14631474    'rneblsvol', 'LS Cloud fraction by volume', '-', (/ ('', i=1, 10) /))
     1475  TYPE(ctrl_out), SAVE :: o_pfraclr = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     1476    'pfraclr', 'LS precipitation fraction clear-sky part', '-', (/ ('', i=1, 10) /))
     1477  TYPE(ctrl_out), SAVE :: o_pfracld = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     1478    'pfracld', 'LS precipitation fraction cloudy part', '-', (/ ('', i=1, 10) /))
    14641479  TYPE(ctrl_out), SAVE :: o_rhum = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14651480    'rhum', 'Relative humidity', '-', (/ ('', i=1, 10) /))
     
    14941509  TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14951510    'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1511  TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1512    'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1513  TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1514    'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    14961515  TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14971516    'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /))
     
    15021521  TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15031522    'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /))
     1523  TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1524    'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /))
    15041525  TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15051526    're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /))
     
    15301551  TYPE(ctrl_out), SAVE :: o_stratomask = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15311552    'stratomask', 'Stratospheric fraction', '1', (/ ('', i=1, 10) /))
     1553!FC
     1554  TYPE(ctrl_out), SAVE :: o_zxfluxt = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1555    'fluxt', 'flux h ', 'W/m2', (/ ('', i=1, 10) /))
     1556  TYPE(ctrl_out), SAVE :: o_zxfluxq = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1557    'fluxq', 'flux q ', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    15321558!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    15331559
     
    15991625  TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16001626    'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1627  TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1628    'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1629  TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1630    'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    16011631  TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16021632    'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /))
     
    16731703  TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16741704    'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1705  TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1706    'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1707  TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1708    'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1709  TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1710    'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /))
     1711  TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1712    'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /))
    16751713
    16761714!!!!!!!!!!!!!!!! Specifique thermiques
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_var_mod.F90

    r4370 r4669  
    3030  REAL, SAVE, ALLOCATABLE :: d_qw_col(:)      ! watter vapour mass budget for each column (kg/m2/s)
    3131  REAL, SAVE, ALLOCATABLE :: d_ql_col(:)      ! liquid watter mass budget for each column (kg/m2/s)
    32   REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! solid watter mass budget for each column (kg/m2/s)
     32  REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! cloud ice mass budget for each column (kg/m2/s)
     33  REAL, SAVE, ALLOCATABLE :: d_qbs_col(:)     ! blowing snow mass budget for each column (kg/m2/s)
    3334  REAL, SAVE, ALLOCATABLE :: d_qt_col(:)      ! total watter mass budget for each column (kg/m2/s)
    3435  REAL, SAVE, ALLOCATABLE :: d_ek_col(:)      ! kinetic energy budget for each column (W/m2)
     
    3637  REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:)    ! enthalpy budget of watter vapour for each column (W/m2)
    3738  REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:)    ! enthalpy budget of liquid watter for each column (W/m2)
    38   REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of solid watter  for each column (W/m2)
     39  REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of cloud ice  for each column (W/m2)
     40  REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:)    ! enthalpy budget of blowing snow for each column (W/m2)
    3941  REAL, SAVE, ALLOCATABLE :: d_h_col(:)       ! total enthalpy budget for each column (W/m2)
    40   !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col)
    41   !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col)
     42  !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col)
     43  !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
    4244
    4345  ! Outputs used in cloudth_vert to extract the moments of the horizontal and
     
    173175
    174176    allocate (bils_ec(klon),bils_ech(klon),bils_tke(klon),bils_diss(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon))
    175     allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) &
    176   &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_col(klon))
    177     d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0.
    178     d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_col=0.
     177    allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qbs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) &
     178  &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_qbs_col(klon), d_h_col(klon))
     179    d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qbs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0.
     180    d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_qbs_col=0. ; d_h_col=0.
    179181
    180182    ! Outputs used in cloudth_vert
     
    223225    deallocate(sza_o)
    224226    deallocate (bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent)
    225     deallocate (d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    226   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col)
     227    deallocate (d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     228  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
    227229
    228230    ! Outputs used in cloudth_vert
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_write_mod.F90

    r4489 r4669  
    1717  SUBROUTINE phys_output_write(itap, pdtphys, paprs, pphis, &
    1818       pplay, lmax_th, aerosol_couple,         &
    19        ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync, &
     19       ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync, &
    2020       ptconv, read_climoz, clevSTD, ptconvth, &
    2121       d_u, d_t, qx, d_qx, zmasse, flag_aerosol, flag_aerosol_strat, ok_cdnc)
     
    4747         o_psol, o_mass, o_qsurf, o_qsol, &
    4848         o_precip, o_rain_fall, o_rain_con, o_ndayrain, o_plul, o_pluc, o_plun, &
    49          o_snow, o_msnow, o_fsnow, o_evap, o_ep,o_epmax_diag, & ! epmax_cape
     49         o_snow, o_msnow, o_fsnow, o_evap, o_snowerosion, o_ustart_lic, o_rhosnow_lic, o_bsfall, &
     50         o_ep,o_epmax_diag, & ! epmax_cape
    5051         o_tops, o_tops0, o_topl, o_topl0, &
    5152         o_SWupTOA, o_SWupTOAclr, o_SWupTOAcleanclr, o_SWdnTOA, o_fdiffSWdnSFC, &
     
    8182         o_Mipsh, o_Ma, &
    8283         o_dnwd, o_dnwd0, o_ftime_deepcv, o_ftime_con, o_mc, &
    83          o_prw, o_prlw, o_prsw, o_s_pblh, o_s_pblt, o_s_lcl, &
     84         o_prw, o_prlw, o_prsw, o_prbsw, o_s_pblh, o_s_pblt, o_s_lcl, &
    8485         o_s_therm, o_uSTDlevs, o_vSTDlevs, &
    8586         o_wSTDlevs, o_zSTDlevs, o_qSTDlevs, &
     
    106107         o_weakinv, o_dthmin, o_cldtau, &
    107108         o_cldemi, o_pr_con_l, o_pr_con_i, &
    108          o_pr_lsc_l, o_pr_lsc_i, o_re, o_fl, &
     109         o_pr_lsc_l, o_pr_lsc_i, o_pr_bs, o_re, o_fl, &
    109110         o_rh2m, &
    110111         o_qsat2m, o_tpot, o_tpote, o_SWnetOR, &
     
    134135         o_cldicemxrat, o_cldwatmxrat, o_reffclwtop, o_ec550aer, &
    135136         o_lwcon, o_iwcon, o_temp, o_theta, &
    136          o_ovapinit, o_ovap, o_oliq, o_ocond, o_geop, &
     137         o_ovapinit, o_ovap, o_oliq, o_ocond, o_geop,o_qbs, &
    137138         o_vitu, o_vitv, o_vitw, o_pres, o_paprs, &
    138139         o_zfull, o_zhalf, o_rneb, o_rnebjn, o_rnebcon, &
    139140         o_rnebls, o_rneblsvol, o_rhum, o_rhl, o_rhi, o_ozone, o_ozone_light, &
     141         o_pfraclr, o_pfracld, &
    140142         o_duphy, o_dtphy, o_dqphy, o_dqphy2d, o_dqlphy, o_dqlphy2d, &
    141          o_dqsphy, o_dqsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, &
     143         o_dqsphy, o_dqsphy2d, o_dqbsphy, o_dqbsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, &
    142144         o_ages_srf, o_snow_srf, o_alb1, o_alb2, o_tke, o_tke_dissip, &
    143145         o_tke_max, o_kz, o_kz_max, o_clwcon, &
    144146         o_dtdyn, o_dqdyn, o_dqdyn2d, o_dqldyn, o_dqldyn2d, &
    145          o_dqsdyn, o_dqsdyn2d, o_dudyn, o_dvdyn, &
     147         o_dqsdyn, o_dqsdyn2d, o_dqbsdyn, o_dqbsdyn2d, o_dudyn, o_dvdyn, &
    146148         o_dtcon, o_tntc, o_ducon, o_dvcon, &
    147149         o_dqcon, o_dqcon2d, o_tnhusc, o_tnhusc, o_dtlsc, &
     
    151153         o_ptconvth, o_lmaxth, o_dtvdf, &
    152154         o_dtdis, o_dqvdf, o_dqvdf2d, o_dteva, o_dqeva, o_dqeva2d, &
     155         o_dqbsvdf, o_dtbs, o_dqbs, o_dqbsbs, &
    153156         o_ptconv, o_ratqs, o_dtthe, &
    154157         o_duthe, o_dvthe, o_ftime_th, &
     
    204207         o_dxtajs,o_dxtvdf,o_dxtthe, o_dxtch4, &
    205208         o_dxtprod_nucl,o_dxtcosmo,o_dxtdecroiss, &
     209         o_xtevap_srf, &
    206210#endif
    207211! Tropopause
     
    219223         o_flx_co2_ff, o_flx_co2_bb, &
    220224         o_delta_sst, o_delta_sal, o_ds_ns, o_dt_ns, o_dter, o_dser, o_tkt, &
    221          o_tks, o_taur, o_sss
     225         o_tks, o_taur, o_sss, &
     226!FC
     227         o_zxfluxt,o_zxfluxq
    222228
    223229#ifdef CPP_StratAer
     
    241247    USE phys_state_var_mod, ONLY: heat_volc, cool_volc !NL
    242248
    243     USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, &
     249    USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, bs_fall,&
    244250         qsol, z0m, z0h, fevap, agesno, &
    245          nday_rain, rain_con, snow_con, &
     251         nday_rain, ndayrain_mth, rain_con, snow_con, &
    246252         topsw, toplw, toplw0, swup, swdn, solswfdiff, &
    247253         topsw0, swupc0, swdnc0, swup0, swdn0, SWup200, SWup200clr, &
     
    269275         wTSTD, u2STD, v2STD, T2STD, missing_val_nf90, delta_sal, ds_ns, &
    270276#ifdef ISO
    271         xtrain_con, xtsnow_con, xtrain_fall, xtsnow_fall, &
     277        xtrain_con, xtsnow_con, xtrain_fall, xtsnow_fall, fxtevap, &
    272278#endif
    273279         dt_ns, delta_sst, dter, dser
     
    275281    USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, &
    276282         zn2mout, t2m_min_mon, t2m_max_mon, evap, &
     283         snowerosion, zxustartlic, zxrhoslic, &
    277284         l_mixmin,l_mix, tke_dissip, &
    278285         zu10m, zv10m, zq2m, zustar, zxqsurf, &
     
    288295         uwat, vwat, &
    289296         rneb_seri, d_rneb_dyn, &
    290          plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw, &
     297         plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw,prbsw, &
    291298         s_pblh, s_pblt, s_lcl, s_therm, uwriteSTD, &
    292299         vwriteSTD, wwriteSTD, phiwriteSTD, qwriteSTD, &
     
    308315         alp_bl_stat, alp_bl_fluct_tke, slab_wfbils, &
    309316         weak_inversion, dthmin, cldtau, cldemi, &
    310          pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, &
     317         pmflxr, pmflxs, prfl, psfl,bsfl, re, fl, rh2m, &
    311318         qsat2m, tpote, tpot, d_ts, od443aer, od550aer, dryod550aer, &
    312319         od865aer, abs550aer, od550lt1aer, sconcso4, sconcno3, &
     
    324331         icc3dcon, icc3dstra, zfice, reffclwtop, &
    325332         ec550aer, flwc, fiwc, t_seri, theta, q_seri, &
    326          ql_seri, qs_seri, tr_seri, &
     333         ql_seri, qs_seri, qbs_seri, tr_seri, qbs_seri,&
    327334         zphi, u_seri, v_seri, omega, cldfra, &
    328          rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, d_t_dyn,  &
    329          d_q_dyn,  d_ql_dyn, d_qs_dyn, &
    330          d_q_dyn2d,  d_ql_dyn2d, d_qs_dyn2d, &
     335         rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, &
     336         pfraclr, pfracld, d_t_dyn,  &
     337         d_q_dyn,  d_ql_dyn, d_qs_dyn, d_qbs_dyn,  &
     338         d_q_dyn2d,  d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d, &
    331339         d_u_dyn, d_v_dyn, d_t_con, d_t_ajsb, d_t_ajs, &
    332340         d_u_ajs, d_v_ajs, &
     
    336344         d_t_lscst, d_q_lscth, d_q_lscst, plul_th, &
    337345         plul_st, d_t_vdf, d_t_diss, d_q_vdf, d_q_eva, &
     346         d_t_bs, d_q_bs, d_qbs_bs, d_qbs_vdf, &
    338347         zw2, fraca, zmax_th, d_q_ajsb, d_t_ec, d_u_vdf, &
    339348         d_v_vdf, d_u_oro, d_v_oro, d_t_oro, d_u_lif, &
     
    350359#endif
    351360         ep, epmax_diag, &  ! epmax_cape
    352          p_tropopause, t_tropopause, z_tropopause
     361         p_tropopause, t_tropopause, z_tropopause, &
     362         zxfluxt,zxfluxq
     363!FC
    353364
    354365#ifdef CPP_StratAer
     
    431442
    432443    ! Input
    433     INTEGER :: itap, ivap, iliq, isol, read_climoz
     444    INTEGER :: itap, ivap, iliq, isol, ibs, read_climoz
    434445    INTEGER, DIMENSION(klon) :: lmax_th
    435446    LOGICAL :: aerosol_couple, ok_sync
     
    887898
    888899       IF (vars_defined) THEN
    889           DO i = 1, klon
     900          IF (ok_bs) THEN
     901             DO i = 1, klon
     902             zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) + bs_fall(i)
     903             ENDDO
     904          ELSE
     905             DO i = 1, klon
    890906             zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i)
    891           ENDDO
     907             ENDDO
     908          ENDIF
    892909       ENDIF
    893910
    894911       CALL histwrite_phy(o_precip, zx_tmp_fi2d)
    895912       CALL histwrite_phy(o_rain_fall, rain_fall)
    896        CALL histwrite_phy(o_ndayrain, nday_rain)
     913       CALL histwrite_phy(o_ndayrain, ndayrain_mth)
    897914
    898915       ! epmax_cape:
     
    919936       CALL histwrite_phy(o_fsnow, zfra_o)
    920937       CALL histwrite_phy(o_evap, evap)
     938
     939       IF (ok_bs) THEN
     940           CALL histwrite_phy(o_bsfall, bs_fall)     
     941           CALL histwrite_phy(o_snowerosion, snowerosion)
     942           CALL histwrite_phy(o_ustart_lic, zxustartlic)
     943           CALL histwrite_phy(o_rhosnow_lic, zxrhoslic)
     944       ENDIF
    921945
    922946       IF (vars_defined) THEN
     
    11051129       ENDIF
    11061130       CALL histwrite_phy(o_tauy, zx_tmp_fi2d)
    1107 
    1108        ! Etienne: test sorties pour compil sur JZ
    1109 !       IF (landice_opt .GE. 1) THEN
    1110 !          CALL histwrite_phy(o_snowsrf, snow_o)
    1111 !          CALL histwrite_phy(o_qsnow, qsnow)
    1112 !          CALL histwrite_phy(o_snowhgt,snowhgt)
    1113 !          CALL histwrite_phy(o_toice,to_ice)
    1114 !          CALL histwrite_phy(o_sissnow,sissnow)
    1115 !          CALL histwrite_phy(o_runoff,runoff)
    1116 !          CALL histwrite_phy(o_albslw3,albsol3_lic)
    1117 !       ENDIF
    11181131
    11191132       DO nsrf = 1, nbsrf
     
    12811294       CALL histwrite_phy(o_prlw, prlw)
    12821295       CALL histwrite_phy(o_prsw, prsw)
     1296       IF (ok_bs) THEN
     1297       CALL histwrite_phy(o_prbsw, prbsw)
     1298       ENDIF
    12831299       CALL histwrite_phy(o_s_pblh, s_pblh)
    12841300       CALL histwrite_phy(o_s_pblt, s_pblt)
     
    15261542       CALL histwrite_phy(o_re, re)
    15271543       CALL histwrite_phy(o_fl, fl)
     1544
     1545       IF (ok_bs) THEN
     1546         CALL histwrite_phy(o_pr_bs, bsfl(:,1:klev))
     1547       ENDIF
     1548
    15281549       IF (vars_defined) THEN
    15291550          DO i=1, klon
     
    17831804       CALL histwrite_phy(o_ovap, q_seri)
    17841805       CALL histwrite_phy(o_oliq, ql_seri)
     1806       !FC
     1807       CALL histwrite_phy(o_zxfluxt, zxfluxt)
     1808       CALL histwrite_phy(o_zxfluxq, zx_tmp_fi3d)
     1809       !FC
    17851810
    17861811       IF (vars_defined) zx_tmp_fi3d = ql_seri+qs_seri
     
    17961821       IF (vars_defined) zx_tmp_fi3d = zphi/RG
    17971822       CALL histwrite_phy(o_zfull,zx_tmp_fi3d)
     1823
     1824       IF (ok_bs) THEN
     1825          CALL histwrite_phy(o_qbs, qbs_seri)
     1826       ENDIF
    17981827
    17991828#ifdef CPP_XIOS
     
    18461875          IF (vars_defined) zx_tmp_fi3d = zx_rhi * 100.
    18471876          CALL histwrite_phy(o_rhi, zx_tmp_fi3d)
     1877       ENDIF
     1878     
     1879       IF (ok_new_lscp) THEN
     1880           CALL histwrite_phy(o_pfraclr, pfraclr)
     1881           CALL histwrite_phy(o_pfracld, pfracld)
    18481882       ENDIF
    18491883
     
    19081942       zx_tmp_fi2d=0.0
    19091943       CALL histwrite_phy(o_dqsphy2d,  zx_tmp_fi2d)
     1944       ENDIF
     1945
     1946
     1947       IF (ok_bs) THEN
     1948       CALL histwrite_phy(o_dqbsphy,  d_qx(:,:,ibs))
     1949       IF (vars_defined) CALL water_int(klon,klev,d_qx(:,:,ibs),zmasse,zx_tmp_fi2d)
     1950       CALL histwrite_phy(o_dqbsphy2d,  zx_tmp_fi2d)
     1951       ELSE
     1952       zx_tmp_fi3d=0.0
     1953       CALL histwrite_phy(o_dqbsphy,  zx_tmp_fi3d)
     1954       zx_tmp_fi2d=0.0
     1955       CALL histwrite_phy(o_dqbsphy2d,  zx_tmp_fi2d)
    19101956       ENDIF
    19111957
     
    19582004
    19592005       CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d)
     2006
     2007       IF (ok_bs) THEN
     2008       CALL histwrite_phy(o_dqbsdyn, d_qbs_dyn)
     2009       CALL histwrite_phy(o_dqbsdyn2d, d_qbs_dyn2d)
     2010       ENDIF
    19602011
    19612012       CALL histwrite_phy(o_dudyn, d_u_dyn)
     
    21012152       ENDIF
    21022153       CALL histwrite_phy(o_dvthe, zx_tmp_fi3d)
     2154
     2155       IF (ok_bs) THEN
     2156          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_vdf(1:klon,1:klev)/pdtphys
     2157          CALL histwrite_phy(o_dqbsvdf, zx_tmp_fi3d)
     2158          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_bs(1:klon,1:klev)/pdtphys
     2159          CALL histwrite_phy(o_dqbsbs, zx_tmp_fi3d)
     2160          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_bs(1:klon,1:klev)/pdtphys
     2161          CALL histwrite_phy(o_dqbs, zx_tmp_fi3d)
     2162          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_t_bs(1:klon,1:klev)/pdtphys
     2163          CALL histwrite_phy(o_dtbs, zx_tmp_fi3d)
     2164       ENDIF
    21032165
    21042166       IF (iflag_thermals>=1) THEN
     
    26142676        CALL histwrite_phy(o_xtoliq(ixt), xtl_seri(ixt,:,:))
    26152677
     2678        DO nsrf = 1, nbsrf ! ajout Camille 8 mai 2023
     2679        IF (vars_defined)       zx_tmp_fi2d(1 : klon) = fxtevap(ixt,:, nsrf)
     2680        CALL histwrite_phy(o_xtevap_srf(ixt,nsrf), zx_tmp_fi2d)
     2681        ENDDO
     2682
    26162683        IF (vars_defined) zx_tmp_fi3d(:,:)=xtl_seri(ixt,:,:)+xts_seri(ixt,:,:)
    26172684        CALL histwrite_phy(o_xtcond(ixt), zx_tmp_fi3d)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_state_var_mod.F90

    r4370 r4669  
    5454
    5555
    56       REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:)
    57 !$OMP THREADPRIVATE( rain_fall, snow_fall)
     56      REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:), bs_fall(:)
     57!$OMP THREADPRIVATE( rain_fall, snow_fall, bs_fall)
    5858      REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:)
    5959!$OMP THREADPRIVATE(solsw, solswfdiff, sollw)
     
    8282      REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:)
    8383!$OMP THREADPRIVATE(t_ancien, q_ancien)
    84       REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:)
    85 !$OMP THREADPRIVATE(ql_ancien, qs_ancien)
    86       REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:)
    87 !$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien)
     84      REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:), qbs_ancien(:,:)
     85!$OMP THREADPRIVATE(ql_ancien, qs_ancien, qbs_ancien)
     86      REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:), prbsw_ancien(:)
     87!$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
    8888#ifdef ISO
    8989      REAL, ALLOCATABLE, SAVE :: xt_ancien(:,:,:),xtl_ancien(:,:,:),xts_ancien(:,:,:)
     
    313313      REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 
    314314!$OMP THREADPRIVATE(total_rain,nday_rain)
     315      REAL,ALLOCATABLE,SAVE :: ndayrain_mth(:)
     316!$OMP THREADPRIVATE(ndayrain_mth)
    315317      REAL,ALLOCATABLE,SAVE :: paire_ter(:)
    316318!$OMP THREADPRIVATE(paire_ter)
     
    547549      ALLOCATE(rain_fall(klon))
    548550      ALLOCATE(snow_fall(klon))
     551      ALLOCATE(bs_fall(klon))
    549552      ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon))
    550553      sollw=0.0
     
    556559      ALLOCATE(rugoro(klon))
    557560      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
    558       ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev))
    559       ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon))
     561      ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev), qbs_ancien(klon,klev))
     562      ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon), prbsw_ancien(klon))
    560563      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
    561564!!! Rom P >>>
     
    655658      ALLOCATE(pfrac_1nucl(klon,klev))
    656659      ALLOCATE(total_rain(klon), nday_rain(klon))
     660      ALLOCATE(ndayrain_mth(klon))
    657661      ALLOCATE(paire_ter(klon))
    658662      ALLOCATE(albsol1(klon), albsol2(klon))
     
    763767!FC
    764768      DEALLOCATE(treedrg)
    765       DEALLOCATE(rain_fall, snow_fall, solsw, solswfdiff, sollw, radsol, swradcorr)
     769      DEALLOCATE(rain_fall, snow_fall, bs_fall,solsw, solswfdiff, sollw, radsol, swradcorr)
    766770      DEALLOCATE(zmea, zstd, zsig, zgam)
    767771      DEALLOCATE(zthe, zpic, zval)
    768772      DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
    769       DEALLOCATE(qs_ancien, ql_ancien, rneb_ancien)
    770       DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien)
     773      DEALLOCATE(qs_ancien, ql_ancien, qbs_ancien, rneb_ancien)
     774      DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
    771775      DEALLOCATE(qtc_cv,sigt_cv)
    772776      DEALLOCATE(u_ancien, v_ancien)
     
    835839      DEALLOCATE(pfrac_1nucl)
    836840      DEALLOCATE(total_rain, nday_rain)
     841      DEALLOCATE(ndayrain_mth)
    837842      DEALLOCATE(paire_ter)
    838843      DEALLOCATE(albsol1, albsol2)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/physiq_mod.F90

    r4661 r4669  
    8484    USE atke_turbulence_ini_mod, ONLY : atke_ini
    8585    USE thermcell_ini_mod, ONLY : thermcell_ini
     86    USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs
    8687    USE lscp_ini_mod, ONLY : lscp_ini
    8788
     
    141142!!!!!!!!!!!!!!!!!!  END "USE" for CPP keys !!!!!!!!!!!!!!!!!!!!!!
    142143
     144USE physiqex_mod, ONLY : physiqex
    143145USE phys_local_var_mod, ONLY: phys_local_var_init, phys_local_var_end, &
    144146       ! [Variables internes non sauvegardees de la physique]
    145147       ! Variables locales pour effectuer les appels en serie
    146        t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
     148       t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
    147149       rhcl, &       
    148150       ! Dynamic tendencies (diagnostics)
    149        d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
    150        d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &
     151       d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
     152       d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, &
    151153       ! Physic tendencies
    152154       d_t_con,d_q_con,d_u_con,d_v_con, &
     
    165167       plul_st,plul_th, &
    166168       !
    167        d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, &
     169       d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, &
    168170       d_t_vdf_x, d_t_vdf_w, &
    169171       d_q_vdf_x, d_q_vdf_w, &
    170172       d_ts, &
     173       !
     174       d_t_bs,d_q_bs,d_qbs_bs, &
    171175       !
    172176!       d_t_oli,d_u_oli,d_v_oli, &
     
    216220       cldh, cldl,cldm, cldq, cldt,      &
    217221       JrNt,                             &
    218        dthmin, evap, fder, plcl, plfc,   &
    219        prw, prlw, prsw,                  &
     222       dthmin, evap, snowerosion,fder, plcl, plfc,   &
     223       prw, prlw, prsw, prbsw,                  &
    220224       s_lcl, s_pblh, s_pblt, s_therm,   &
    221225       cdragm, cdragh,                   &
     
    290294       !
    291295       rneblsvol, &
     296       pfraclr,pfracld, &
     297       distcltop, &
    292298       zqsatl, zqsats, &
    293299       qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
     
    305311       fsolsw, wfbils, wfbilo,  &
    306312       wfevap, wfrain, wfsnow,  & 
    307        prfl, psfl, fraca, Vprecip,  &
     313       prfl, psfl,bsfl, fraca, Vprecip,  &
    308314       zw2,  &
    309315       !
     
    317323       beta_prec,  &
    318324       rneb,  &
    319        zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic
    320        !
     325       zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic, &
     326       zxfluxt,zxfluxq
     327       !
     328      USE output_physiqex_mod, ONLY: output_physiqex
     329
    321330
    322331    IMPLICIT NONE
     
    461470    !======================================================================
    462471    !
    463     ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional)
    464     INTEGER,SAVE :: ivap, iliq, isol, irneb
    465 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb)
     472    ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional)
     473    INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs
     474!$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs)
    466475    !
    467476    !
     
    834843    !XXX PB
    835844    REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
    836     !
    837     REAL zxfluxt(klon, klev)
    838     REAL zxfluxq(klon, klev)
     845    REAL fluxqbs(klon,klev, nbsrf)   ! flux turbulent de neige soufflee
     846    !
     847    !FC    REAL zxfluxt(klon, klev)
     848    !FC    REAL zxfluxq(klon, klev)
     849    REAL zxfluxqbs(klon,klev)
    839850    REAL zxfluxu(klon, klev)
    840851    REAL zxfluxv(klon, klev)
     
    920931    !
    921932    ! tendance nulles
    922     REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0
     933    REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0
    923934    REAL, dimension(klon)     :: dsig0, ddens0
    924935    INTEGER, dimension(klon)  :: wkoccur1
     
    944955    LOGICAL, SAVE :: ok_bug_split_th = .TRUE.
    945956    !$OMP THREADPRIVATE(ok_bug_split_th)
     957
     958    ! Logical switch to a bug : modifying directly wake_deltat  by adding
     959    ! the (w) dry adjustment tendency to wake_deltat
     960    LOGICAL, SAVE :: ok_bug_ajs_cv = .TRUE.
     961    !$OMP THREADPRIVATE(ok_bug_ajs_cv)
    946962
    947963    !
     
    10611077    REAL ztsol(klon)
    10621078    REAL q2m(klon,nbsrf)  ! humidite a 2m
    1063 
     1079    REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface
     1080    REAL qbsfra  ! blowing snow fraction
    10641081    !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
    10651082    CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
     
    11361153    !IM 100106 BEG : pouvoir sortir les ctes de la physique
    11371154    include "conema3.h"
    1138     include "fisrtilp.h"
    11391155    include "nuage.h"
    11401156    include "compbl.h"
     
    11441160    ! Declarations pour Simulateur COSP
    11451161    !============================================================
     1162    ! AI 10-22
     1163#ifdef CPP_COSP
     1164    include "ini_COSP.h"
     1165#endif
    11461166    real :: mr_ozone(klon,klev), phicosp(klon,klev)
    11471167
     
    12181238    REAL pi
    12191239
     1240
     1241    !======================================================================!
     1242    ! Bifurcation vers un nouveau moniteur physique pour experimenter      !
     1243    ! des solutions et préparer le couplage avec la physique de MesoNH     !
     1244    ! 14 mai 2023                                                          !
     1245    !======================================================================!
     1246    if (debut) then                                                        !
     1247       iflag_physiq=0
     1248       call getin_p('iflag_physiq', iflag_physiq)                          !
     1249    endif                                                                  !
     1250    if ( iflag_physiq == 2 ) then                                          !
     1251       call physiqex (nlon,nlev, &                                         !
     1252       debut,lafin,pdtphys_, &                                             !
     1253       paprs,pplay,pphi,pphis,presnivs, &                                  !
     1254       u,v,rot,t,qx, &                                                     !
     1255       flxmass_w, &                                                        !
     1256       d_u, d_v, d_t, d_qx, d_ps)                                          !
     1257       return                                                              !
     1258    endif                                                                  !
     1259    !======================================================================!
     1260
     1261
    12201262    pi = 4. * ATAN(1.)
    12211263
     
    12441286    ! Utilise notamment en 1D mais peut etre active egalement en 3D
    12451287    ! en imposant la valeur de igout.
    1246     !======================================================================d
     1288    !======================================================================
    12471289    IF (prt_level.ge.1) THEN
    12481290       igout=klon/2+1/klon
     
    12751317       isol = strIdx(tracers(:)%name, addPhase('H2O', 's'))
    12761318       irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r'))
     1319       ibs  = strIdx(tracers(:)%name, addPhase('H2O', 'b'))
    12771320       CALL init_etat0_limit_unstruct
    12781321       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    13241367       ENDIF
    13251368
    1326        IF (ok_ice_sursat.AND.(nqo.NE.4)) THEN
     1369       IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN
    13271370          WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', &
    13281371               '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.'
     
    13421385          CALL abort_physic(modname,abort_message,1)
    13431386       ENDIF
     1387
     1388        IF (ok_bs) THEN
     1389         IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN
     1390             WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', &
     1391                               'but nqo=', nqo
     1392             abort_message='see above'
     1393             CALL abort_physic(modname,abort_message, 1)
     1394         ENDIF
     1395        ENDIF
    13441396
    13451397       Ncvpaseq1 = 0
     
    14041456       CALL getin_p('ok_bug_cv_trac',ok_bug_cv_trac)
    14051457       CALL getin_p('ok_bug_split_th',ok_bug_split_th)
     1458       CALL getin_p('ok_bug_ajs_cv',ok_bug_ajs_cv)
    14061459       fl_ebil = 0 ! by default, conservation diagnostics are desactivated
    14071460       CALL getin_p('fl_ebil',fl_ebil)
     
    16761729      IF (.NOT. create_etat0_limit) CALL init_readaerosolstrato(flag_aerosol_strat)  !! initialise aero strato from file for XIOS interpolation (unstructured_grid)
    16771730
     1731      if (ok_cosp) then
    16781732#ifdef CPP_COSP
    1679       IF (ok_cosp) THEN
    1680 !           DO k = 1, klev
    1681 !             DO i = 1, klon
    1682 !               phicosp(i,k) = pphi(i,k) + pphis(i)
    1683 !             ENDDO
    1684 !           ENDDO
     1733        ! A.I : Initialisations pour le 1er passage a Cosp
     1734        CALL ini_COSP(ref_liq_cosp0,ref_ice_cosp0,pctsrf_cosp0,zu10m_cosp0,zv10m_cosp0, &
     1735               zxtsol_cosp0,zx_rh_cosp0,cldfra_cosp0,rnebcon_cosp0,flwc_cosp0, &
     1736               fiwc_cosp0,prfl_cosp0,psfl_cosp0,pmflxr_cosp0,pmflxs_cosp0, &
     1737               mr_ozone_cosp0,cldtau_cosp0,cldemi_cosp0,JrNt_cosp0)
     1738
    16851739        CALL phys_cosp(itap,phys_tstep,freq_cosp, &
    16861740               ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, &
     
    16951749               pmflxr(:,1:klev),pmflxs(:,1:klev), &
    16961750               mr_ozone,cldtau, cldemi)
    1697       ENDIF
    16981751#endif
    16991752
    17001753#ifdef CPP_COSP2
    1701         IF (ok_cosp) THEN
    1702 !           DO k = 1, klev
    1703 !             DO i = 1, klon
    1704 !               phicosp(i,k) = pphi(i,k) + pphis(i)
    1705 !             ENDDO
    1706 !           ENDDO
    17071754          CALL phys_cosp2(itap,phys_tstep,freq_cosp, &
    17081755               ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, &
     
    17171764               pmflxr(:,1:klev),pmflxs(:,1:klev), &
    17181765               mr_ozone,cldtau, cldemi)
    1719        ENDIF
    17201766#endif
    17211767
    17221768#ifdef CPP_COSPV2
    1723         IF (ok_cosp) THEN
    1724            DO k = 1, klev
    1725              DO i = 1, klon
    1726                phicosp(i,k) = pphi(i,k) + pphis(i)
    1727              ENDDO
    1728            ENDDO
    17291769          CALL lmdz_cosp_interface(itap,phys_tstep,freq_cosp, &
    17301770               ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, &
     
    17391779               pmflxr(:,1:klev),pmflxs(:,1:klev), &
    17401780               mr_ozone,cldtau, cldemi)
    1741        ENDIF
    17421781#endif
     1782      ENDIF
    17431783
    17441784       !
     
    17561796       CALL thermcell_ini(iflag_thermals,prt_level,tau_thermals,lunout, &
    17571797   &    RG,RD,RCPD,RKAPPA,RLVTT,RETV)
    1758        IF (ok_new_lscp) then
    1759            CALL lscp_ini(pdtphys,ok_ice_sursat)
    1760        endif
     1798       CALL lscp_ini(pdtphys,ok_ice_sursat, RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)
     1799       CALL blowing_snow_ini(prt_level,lunout, &
     1800                             RCPD, RLSTT, RLVTT, RLMLT, &
     1801                             RVTMP2, RTT,RD,RG)
     1802
    17611803!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    17621804
     
    17841826       CALL phys_output_write(itap, pdtphys, paprs, pphis,                    &
    17851827                              pplay, lmax_th, aerosol_couple,                 &
    1786                               ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&
     1828                              ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,  ok_sync,&
    17871829                              ptconv, read_climoz, clevSTD,                   &
    17881830                              ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    22552297    dql0(:,:)=0.
    22562298    dqi0(:,:)=0.
     2299    dqbs0(:,:)=0.
    22572300    dsig0(:) = 0.
    22582301    ddens0(:) = 0.
     
    23072350          q_seri(i,k)  = qx(i,k,ivap)
    23082351          ql_seri(i,k) = qx(i,k,iliq)
     2352          qbs_seri(i,k) = 0.
    23092353          !CR: ATTENTION, on rajoute la variable glace
    23102354          IF (nqo.EQ.2) THEN             !--vapour and liquid only
     
    23142358             qs_seri(i,k) = qx(i,k,isol)
    23152359             rneb_seri(i,k) = 0.
    2316           ELSE IF (nqo.EQ.4) THEN        !--vapour, liquid, ice and rneb
     2360          ELSE IF (nqo.GE.4) THEN        !--vapour, liquid, ice and rneb and blowing snow
    23172361             qs_seri(i,k) = qx(i,k,isol)
     2362             IF (ok_ice_sursat) THEN
    23182363             rneb_seri(i,k) = qx(i,k,irneb)
     2364             ENDIF
     2365             IF (ok_bs) THEN
     2366             qbs_seri(i,k)= qx(i,k,ibs)
     2367             ENDIF
     2368
    23192369          ENDIF
     2370
     2371
    23202372       ENDDO
    23212373    ENDDO
     
    23262378    qql1(:)=0.0
    23272379    DO k = 1, klev
    2328       qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
     2380      qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k)
    23292381    ENDDO
    23302382    ENDIF
     
    23822434       d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep
    23832435       d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep
     2436       d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep
    23842437       CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d)
    23852438       d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep
     
    23882441       CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d)
    23892442       d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep
     2443       CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d)
     2444       d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep
    23902445       ! !! RomP >>>   td dyn traceur
    23912446       IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep
     
    24032458       d_ql_dyn2d(:) = 0.0
    24042459       d_qs_dyn2d(:) = 0.0
     2460       d_qbs_dyn2d(:)= 0.0
    24052461       ! !! RomP >>>   td dyn traceur
    24062462       IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0
    24072463       ! !! RomP <<<
    24082464       d_rneb_dyn(:,:)=0.0
     2465       d_qbs_dyn(:,:)=0.0
    24092466       ancien_ok = .TRUE.
    24102467    ENDIF
     
    25222579
    25232580     CALL add_phys_tend &
    2524             (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,paprs,&
     2581            (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,&
    25252582               'eva',abortphy,flag_inhib_tend,itap,0)
    25262583    CALL prt_enerbil('eva',itap)
     
    26982755            longitude_deg, latitude_deg, rugoro,  zrmu0,      &
    26992756            sollwdown,    cldt,      &
    2700             rain_fall, snow_fall, solsw,   solswfdiff, sollw,     &
     2757            rain_fall, snow_fall, bs_fall, solsw,   solswfdiff, sollw,     &
    27012758            gustiness,                                &
    2702             t_seri,    q_seri,    u_seri,  v_seri,    &
     2759            t_seri,    q_seri,   qbs_seri, u_seri,  v_seri,    &
    27032760                                !nrlmd+jyg<
    27042761            wake_deltat, wake_deltaq, wake_cstar, wake_s, &
     
    27112768                                !albedo SB >>>
    27122769                                ! albsol1,   albsol2,   sens,    evap,      &
    2713             albsol_dir,   albsol_dif,   sens,    evap,  
     2770            albsol_dir,   albsol_dif,   sens,    evap, snowerosion,
    27142771                                !albedo SB <<<
    27152772            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    27162773            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
    2717             d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     2774            d_t_vdf,   d_q_vdf, d_qbs_vdf,  d_u_vdf, d_v_vdf, d_t_diss, &
    27182775                                !nrlmd<
    27192776                                !jyg<
     
    27412798            fluxt,   fluxu,  fluxv, &
    27422799            dsens,     devap,     zxsnow, &
    2743             zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke, &
     2800            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
    27442801                                !nrlmd+jyg<
    27452802            wake_delta_pbl_TKE, &
     
    27662823       IF (klon_glo==1) THEN
    27672824          CALL add_pbl_tend &
    2768                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     2825               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    27692826               'vdf',abortphy,flag_inhib_tend,itap)
    27702827       ELSE
    27712828          CALL add_phys_tend &
    2772                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     2829               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    27732830               'vdf',abortphy,flag_inhib_tend,itap,0)
    27742831       ENDIF
    27752832       CALL prt_enerbil('vdf',itap)
     2833
    27762834       !--------------------------------------------------------------------
    27772835
     
    28242882
    28252883    ENDIF
     2884
     2885    ! ==================================================================
     2886    ! Blowing snow sublimation and sedimentation
     2887
     2888    d_t_bs(:,:)=0.
     2889    d_q_bs(:,:)=0.
     2890    d_qbs_bs(:,:)=0.
     2891    bsfl(:,:)=0.
     2892    bs_fall(:)=0.
     2893    IF (ok_bs) THEN
     2894
     2895     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
     2896                                        d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall)
     2897
     2898     CALL add_phys_tend &
     2899               (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,&
     2900               'bs',abortphy,flag_inhib_tend,itap,0)
     2901
     2902    ENDIF
     2903
    28262904    ! =================================================================== c
    28272905    !   Calcul de Qsat
     
    29943072                ENDDO
    29953073             ENDDO
    2996              IF (iflag_adjwk == 2) THEN
     3074             IF (iflag_adjwk == 2 .AND. OK_bug_ajs_cv) THEN
    29973075               CALL add_wake_tend &
    29983076                 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy)
    2999              ENDIF  ! (iflag_adjwk == 2)
     3077             ENDIF  ! (iflag_adjwk == 2 .AND. OK_bug_ajs_cv)
    30003078          ENDIF  ! (iflag_adjwk >= 1)
    30013079       ENDIF ! (iflag_wake>=1)
     
    32483326!!
    32493327!!
    3250     CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
     3328    CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, &
    32513329         'convection',abortphy,flag_inhib_tend,itap,0)
    32523330    CALL prt_enerbil('convection',itap)
     
    33793457       !-----------------------------------------------------------------------
    33803458       ! ajout des tendances des poches froides
    3381        CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', &
     3459       CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', &
    33823460            abortphy,flag_inhib_tend,itap,0)
    33833461       CALL prt_enerbil('wake',itap)
     
    35373615          !
    35383616          CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs,  &
    3539                              dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0)
     3617                             dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0)
    35403618          CALL prt_enerbil('thermals',itap)
    35413619          !
     
    35993677          !--------------------------------------------------------------------
    36003678          ! ajout des tendances de l'ajustement sec ou des thermiques
    3601           CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
     3679          CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, &
    36023680               'ajsb',abortphy,flag_inhib_tend,itap,0)
    36033681          CALL prt_enerbil('ajsb',itap)
     
    36333711         ptconv,ptconvth,clwcon0th, rnebcon0th,     &
    36343712         paprs,pplay,t_seri,q_seri, qtc_cv, sigt_cv, zqsat, &
    3635          pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm, &
     3713         pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm,cell_area, &
    36363714         ratqs,ratqsc,ratqs_inter)
    36373715
     
    36573735         t_seri, q_seri,ptconv,ratqs, &
    36583736         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, &
     3737         pfraclr,pfracld, &
    36593738         radocond, picefra, rain_lsc, snow_lsc, &
    36603739         frac_impa, frac_nucl, beta_prec_fisrt, &
    36613740         prfl, psfl, rhcl,  &
    36623741         zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, &
    3663          iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, &
     3742         iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, &
    36643743         qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
    36653744         Tcontr, qcontr, qcontr2, fcontrN, fcontrP )
     
    36883767!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
    36893768!-JLD
    3690     CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs, &
     3769    CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, &
    36913770         'lsc',abortphy,flag_inhib_tend,itap,0)
    36923771    CALL prt_enerbil('lsc',itap)
     
    37113790    ENDIF
    37123791
    3713     !---------------------------------------------------------------------------
     3792
     3793!---------------------------------------------------------------------------
    37143794    DO k = 1, klev
    37153795       DO i = 1, klon
    37163796          cldfra(i,k) = rneb(i,k)
    37173797          !CR: a quoi ca sert? Faut-il ajouter qs_seri?
     3798          !EV: en effet etrange, j'ajouterais aussi qs_seri
     3799          !    plus largement, je nettoierais (enleverrais) ces lignes
    37183800          IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k)
    37193801       ENDDO
    37203802    ENDDO
     3803
     3804
     3805    ! Option to activate the radiative effect of blowing snow (ok_rad_bs)
     3806    ! makes sense only if the new large scale condensation scheme is active
     3807    ! with the ok_icefra_lscp flag active as well
     3808
     3809    IF (ok_bs .AND. ok_rad_bs) THEN
     3810       IF (ok_new_lscp .AND. ok_icefra_lscp) THEN
     3811           DO k=1,klev
     3812             DO i=1,klon
     3813                radocond(i,k)=radocond(i,k)+qbs_seri(i,k)
     3814                picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k))
     3815                qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0)
     3816                cldfra(i,k)=max(cldfra(i,k),qbsfra)
     3817             ENDDO
     3818           ENDDO
     3819       ELSE
     3820          WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow"
     3821          WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false"
     3822          abort_message='inconsistency in cloud phase for blowing snow'
     3823          CALL abort_physic(modname,abort_message,1)
     3824       ENDIF
     3825
     3826    ENDIF
     3827
    37213828    IF (check) THEN
    37223829       za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
     
    42064313               flwp, fiwp, flwc, fiwc, &
    42074314               mass_solu_aero, mass_solu_aero_pi, &
    4208                cldtaupi, latitude_deg, re, fl, ref_liq, ref_ice, &
     4315               cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, &
    42094316               ref_liq_pi, ref_ice_pi)
    42104317       ELSE
     
    42144321               ok_aie, &
    42154322               mass_solu_aero, mass_solu_aero_pi, &
    4216                bl95_b0, bl95_b1, &
     4323               bl95_b0, bl95_b1, distcltop, &
    42174324               cldtaupi, re, fl)
    42184325       ENDIF
     
    45194626    ENDDO
    45204627
    4521     CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend,itap,0)
     4628    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0)
    45224629    CALL prt_enerbil('SW',itap)
    4523     CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend,itap,0)
     4630    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0)
    45244631    CALL prt_enerbil('LW',itap)
    45254632
     
    45964703       !-----------------------------------------------------------------------
    45974704       ! ajout des tendances de la trainee de l'orographie
    4598        CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro', &
     4705       CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', &
    45994706            abortphy,flag_inhib_tend,itap,0)
    46004707       CALL prt_enerbil('oro',itap)
     
    46474754
    46484755       ! ajout des tendances de la portance de l'orographie
    4649        CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &
     4756       CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, &
    46504757            'lif', abortphy,flag_inhib_tend,itap,0)
    46514758       CALL prt_enerbil('lif',itap)
     
    46724779       d_t_hin(:, :)=0.
    46734780       CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, &
    4674             dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)
     4781            dqi0, dqbs0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)
    46754782       CALL prt_enerbil('hin',itap)
    46764783    ENDIF
     
    46904797       ENDDO
    46914798
    4692        CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &
     4799       CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, &
    46934800            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0)
    46944801       CALL prt_enerbil('front_gwd_rando',itap)
     
    46994806            rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
    47004807            du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress)
    4701        CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &
     4808       CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, &
    47024809            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0)
    47034810       CALL prt_enerbil('flott_gwd_rando',itap)
     
    47514858       ! ajout de la tendance d'humidite due au methane
    47524859       d_q_ch4_dtime(:,:) = d_q_ch4(:,:)*phys_tstep
    4753        CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &
     4860       CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, &
    47544861            'q_ch4', abortphy,flag_inhib_tend,itap,0)
    47554862       d_q_ch4(:,:) = d_q_ch4_dtime(:,:)/phys_tstep
     
    50565163
    50575164     CALL add_phys_tend &
    5058             (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,paprs,&
     5165            (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,&
    50595166             'rep',abortphy,flag_inhib_tend,itap,0)
    50605167        IF (abortphy==1) Print*,'ERROR ABORT REP'
     
    51335240    !   prlw = colonne eau liquide
    51345241    !   prlw = colonne eau solide
     5242    !   prbsw = colonne neige soufflee
    51355243    prw(:) = 0.
    51365244    prlw(:) = 0.
    51375245    prsw(:) = 0.
     5246    prbsw(:) = 0.
    51385247    DO k = 1, klev
    51395248       prw(:)  = prw(:)  + q_seri(:,k)*zmasse(:,k)
    51405249       prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k)
    51415250       prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k)
     5251       prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k)
    51425252    ENDDO
    51435253    !
     
    51985308          ENDIF
    51995309          !--ice_sursat: nqo=4, on ajoute rneb
    5200           IF (nqo == 4) THEN
     5310          IF (nqo.ge.4 .and. ok_ice_sursat) THEN
    52015311             d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep
    52025312          ENDIF
     5313
     5314           IF (nqo.ge.4 .and. ok_bs) THEN
     5315             d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep
     5316          ENDIF
     5317
    52035318       ENDDO
    52045319    ENDDO
     
    52475362    ql_ancien(:,:) = ql_seri(:,:)
    52485363    qs_ancien(:,:) = qs_seri(:,:)
     5364    qbs_ancien(:,:) = qbs_seri(:,:)
    52495365    rneb_ancien(:,:) = rneb_seri(:,:)
    52505366    CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien)
    52515367    CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
    52525368    CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien)
     5369    CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien)
    52535370    ! !! RomP >>>
    52545371    IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:)
     
    53755492    CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
    53765493         pplay, lmax_th, aerosol_couple,                 &
    5377          ok_ade, ok_aie, ok_volcan, ivap, iliq, isol,    &
     5494         ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   &
    53785495         ok_sync, ptconv, read_climoz, clevSTD,          &
    53795496         ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    53865503
    53875504#endif
     5505    ! Petit appelle de sorties pour accompagner le travail sur phyex
     5506    if ( iflag_physiq == 1 ) then
     5507        call output_physiqex(debut,jD_eq,pdtphys,presnivs,paprs,u,v,t,qx,cldfra,0.*t,0.*t,0.*t,pbl_tke,theta)
     5508    endif
    53885509
    53895510    !====================================================================
     
    54065527    ! Disabling calls to the prt_alerte function
    54075528    alert_first_call = .FALSE.
     5529
    54085530   
    54095531    IF (lafin) THEN
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_land_mod.F90

    r4283 r4669  
    1111       rlon, rlat, yrmu0, &
    1212       debut, lafin, zlev, ccanopy, swnet, lwnet, albedo, &
    13        tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     13       tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1414       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1515       AcoefU, AcoefV, BcoefU, BcoefV, &
     
    1717       lwdown_m, q2m, t2m, &
    1818       snow, qsol, agesno, tsoil, &
    19        z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, &   
     19       z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, fluxbs, &   
    2020       qsurf, tsurf_new, dflux_s, dflux_l, &
    2121       flux_u1, flux_v1 , &
     
    8181    REAL, DIMENSION(klon), INTENT(IN)       :: p1lay
    8282    REAL, DIMENSION(klon), INTENT(IN)       :: cdragh, cdragm
    83     REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow
     83    REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow, precip_bs
    8484    REAL, DIMENSION(klon), INTENT(IN)       :: temp_air, spechum
    8585    REAL, DIMENSION(klon), INTENT(IN)       :: AcoefH, AcoefQ, BcoefH, BcoefQ
     
    109109!albedo SB <<<
    110110    REAL, DIMENSION(klon), INTENT(OUT)       :: evap
    111     REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat
     111    REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat, fluxbs
    112112    REAL, DIMENSION(klon), INTENT(OUT)       :: qsurf
    113113    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
     
    125125    REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used
    126126    REAL, DIMENSION(klon) :: u0, v0     ! surface speed
     127    REAL, DIMENSION(klon) :: precip_totsnow     ! total solid precip
    127128    INTEGER               :: i
    128129
     
    130131    REAL, DIMENSION(klon)      :: alb1_new,alb2_new
    131132!albedo SB <<<
     133
     134
     135!****************************************************************************************
     136!Total solid precip
     137
     138IF (ok_bs) THEN
     139precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     140ELSE
     141precip_totsnow(:)=precip_snow(:)
     142ENDIF
     143!****************************************************************************************
     144
    132145
    133146!****************************************************************************************
     
    165178            zlev,  u1, v1, gustiness, temp_air, spechum, epot_air, ccanopy, &
    166179            cdragh, AcoefH, AcoefQ, BcoefH, BcoefQ, &
    167             precip_rain, precip_snow, lwdown_m, swnet, swdown, &
     180            precip_rain, precip_totsnow, lwdown_m, swnet, swdown, &
    168181            pref_tmp, q2m, t2m, &
    169             evap, fluxsens, fluxlat, &             
     182            evap, fluxsens, fluxlat,  &             
    170183            tsol_rad, tsurf_new, alb1_new, alb2_new, &
    171184            emis_new, z0m, z0h, qsurf, &
     
    184197!****************************************************************************************
    185198       CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,&
    186             tsurf, p1lay, cdragh, precip_rain, precip_snow, temp_air, &
     199            tsurf, p1lay, cdragh, precip_rain, precip_totsnow, temp_air, &
    187200            spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, &
    188201            u1, v1, gustiness, rugoro, swnet, lwnet, &
     
    192205        z0h(1:knon)=z0m(1:knon) ! En attendant mieux
    193206
     207
    194208    ENDIF ! ok_veget
     209
     210        ! blowing snow not treated yet over land
     211        fluxbs(:)=0.
     212
    195213
    196214!****************************************************************************************
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_land_orchidee_mod.F90

    r4283 r4669  
    632632    fluxsens(1:knon) = -1. * fluxsens(1:knon)
    633633    fluxlat(1:knon)  = -1. * fluxlat(1:knon)
    634     
     634   
    635635!  evap     = -1. * evap
    636636
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_landice_mod.F90

    r4414 r4669  
    1212       rmu0, lwdownm, albedo, pphi1, &
    1313       swnet, lwnet, tsurf, p1lay, &
    14        cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     14       cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1515       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1616       AcoefU, AcoefV, BcoefU, BcoefV, &
     17       AcoefQBS, BcoefQBS, &
    1718       ps, u1, v1, gustiness, rugoro, pctsrf, &
    18        snow, qsurf, qsol, agesno, &
    19        tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &
     19       snow, qsurf, qsol, qbs1, agesno, &
     20       tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, &
    2021       tsurf_new, dflux_s, dflux_l, &
    2122       alt, slope, cloudf, &
     
    3031    USE cpl_mod,          ONLY : cpl_send_landice_fields
    3132    USE calcul_fluxs_mod
     33    USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic
    3234    USE phys_output_var_mod, ONLY : snow_o,zfra_o
    3335!FC
    3436    USE ioipsl_getin_p_mod, ONLY : getin_p
    35 
     37    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs
    3638
    3739#ifdef CPP_INLANDSIS
     
    5658    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
    5759    REAL, DIMENSION(klon), INTENT(IN)             :: cdragh, cdragm
    58     REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow
     60    REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow, precip_bs
    5961    REAL, DIMENSION(klon), INTENT(IN)             :: temp_air, spechum
    6062    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefH, AcoefQ
    6163    REAL, DIMENSION(klon), INTENT(IN)             :: BcoefH, BcoefQ
    6264    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
     65    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefQBS, BcoefQBS
    6366    REAL, DIMENSION(klon), INTENT(IN)             :: ps
    64     REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness
     67    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
    6568    REAL, DIMENSION(klon), INTENT(IN)             :: rugoro
    6669    REAL, DIMENSION(klon,nbsrf), INTENT(IN)       :: pctsrf
     
    9497!albedo SB <<<
    9598    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
     99    REAL, DIMENSION(klon), INTENT(OUT)            :: fluxbs
    96100    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    97101    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
     
    134138
    135139    REAL,DIMENSION(klon) :: alb1,alb2
     140    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    136141    REAL, DIMENSION (klon,6) :: alb6
     142    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, rhod
     143    REAL                   :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc
     144    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
     145    REAL, DIMENSION(klon)  :: ws1, rhos, ustart, qsalt
    137146! End definition
    138147!****************************************************************************************
     
    165174    alb2(:) = 999999.
    166175    alb1(:) = 999999.
    167    
     176    fluxbs(:)=0. 
    168177    runoff(:) = 0.
    169178!****************************************************************************************
     
    173182    radsol(:) = 0.0
    174183    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     184
     185!****************************************************************************************
    175186
    176187!****************************************************************************************
     
    264275
    265276
    266 
    267277    ELSE
    268278
     
    314324         flux_u1, flux_v1)
    315325
    316 !****************************************************************************************
    317 ! Calculate snow height, age, run-off,..
    318 !   
    319 !****************************************************************************************
    320     CALL fonte_neige(knon, is_lic, knindex, dtime, &
    321          tsurf, precip_rain, precip_snow, &
    322          snow, qsol, tsurf_new, evap)
    323 
    324326
    325327!****************************************************************************************
     
    327329!
    328330!****************************************************************************************
     331 
    329332    CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
    330333
    331     WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.
    332     zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0)))
    333     alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
    334          0.6 * (1.0-zfra(1:knon))
     334
     335! EV: following lines are obsolete since we set alb1 and alb2 to constant values
     336! I therefore comment them
     337!    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
     338!         0.6 * (1.0-zfra(1:knon))
    335339!
    336340!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
     
    354358    !z0m = SQRT(z0m**2+rugoro**2)
    355359
     360
     361
     362  ! Simple blowing snow param
     363  if (ok_bs) then
     364       ustart0 = 0.211
     365       rhoice = 920.0
     366       rho0 = 200.0
     367       rhomax=450.0
     368       rhohard=400.0
     369       tau_dens0=86400.0*10.  ! 10 days by default, in s
     370       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
     371
     372       ! computation of threshold friction velocity
     373       ! which depends on surface snow density
     374       do i = 1, knon
     375           ! estimation of snow density
     376           ! snow density increases with snow age and
     377           ! increases even faster in case of sedimentation of blowing snow
     378           tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs))
     379           rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens))
     380           ! blowing snow flux formula used in MAR
     381           ws1(i)=(u1(i)**2+v1(i)**2)**0.5
     382           ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5
     383           ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax))
     384           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
     385           ! rhohard<450)
     386       enddo
     387       
     388       ! computation of qbs at the top of the saltation layer
     389       ! two formulations possible
     390       ! pay attention that qbs is a mixing ratio and has to be converted
     391       ! to specific content
     392       
     393       if (iflag_saltation_bs .eq. 1) then
     394       ! expression from CRYOWRF (Sharma et al. 2022)
     395          aa=2.6
     396          bb=2.5
     397          cc=2.0
     398          lambdasalt=0.45
     399          do i =1, knon
     400               rhod=p1lay(i)/RD/temp_air(i)
     401               nunu=max(ustar(i)/ustart(i),1.e-3)
     402               fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * &
     403                        (aa+bb*nunu**(-2)+cc*nunu**(-1)) 
     404               csalt=fluxsalt/(2.8*ustart(i))
     405               hsalt=0.08436*ustar(i)**1.27
     406               qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) &
     407                       * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6))
     408               qsalt(i)=max(qsalt(i),0.)
     409          enddo
     410
     411
     412       else
     413       ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)       
     414          do i=1, knon
     415              esalt=1./(3.25*max(ustar(i),0.001))
     416              hsalt=0.08436*ustar(i)**1.27
     417              qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
     418              !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
     419          enddo
     420       endif
     421
     422        ! calculation of erosion (emission flux towards the first atmospheric level)
     423        ! consistent with implicit resolution of turbulent mixing equation
     424       do i=1, knon
     425              rhod=p1lay(i)/RD/temp_air(i)
     426              fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) &
     427                       / (1.-rhod*ws1(i)*zeta_bs*cdragm(i)*BcoefQBS(i)*dtime)
     428              !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i))
     429       enddo
     430
     431       ! for outputs
     432       do j = 1, knon
     433          i = knindex(j)
     434          zxustartlic(i) = ustart(j)
     435          zxrhoslic(i) = rhos(j)
     436       enddo
     437
     438  endif
     439
     440
     441
     442!****************************************************************************************
     443! Calculate surface snow amount
     444!   
     445!****************************************************************************************
     446    IF (ok_bs) THEN
     447      precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     448      evap_totsnow(:)=evap(:)-fluxbs(:) ! flux bs is positive towards the surface (snow erosion)
     449    ELSE
     450      precip_totsnow(:)=precip_snow(:)
     451      evap_totsnow(:)=evap(:)
     452    ENDIF
     453
     454    CALL fonte_neige(knon, is_lic, knindex, dtime, &
     455         tsurf, precip_rain, precip_totsnow,  &
     456         snow, qsol, tsurf_new, evap_totsnow)
     457
     458    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.                                         
     459    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 
    356460
    357461
     
    378482    runoff(1:knon)=run_off_lic(1:knon)/dtime
    379483
    380  
    381 !****************************************************************************************
    382484       snow_o=0.
    383485       zfra_o = 0.
     
    420522!albedo SB <<<
    421523
    422  
    423  
    424524
    425525  END SUBROUTINE surf_landice
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_ocean_mod.F90

    r4370 r4669  
    1313       windsp, rmu0, fder, tsurf_in, &
    1414       itime, dtime, jour, knon, knindex, &
    15        p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     15       p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1616       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1717       AcoefU, AcoefV, BcoefU, BcoefV, &
     
    6060    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh
    6161    REAL, DIMENSION(klon), INTENT(IN)        :: cdragm
    62     REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
     62    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow, precip_bs
    6363    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
    6464    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
     
    144144    REAL, DIMENSION(klon) :: radsol
    145145    REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation
     146    REAL, DIMENSION(klon) :: precip_totsnow
    146147    CHARACTER(len=20),PARAMETER :: modname="surf_ocean"
    147148    real rhoa(knon) ! density of moist air  (kg / m3)
     
    160161    radsol(1:klon) = 0.0 ! initialisation a priori inutile
    161162    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     163
     164
     165    !****************************************************************************************
     166    !Total solid precip
     167
     168    IF (ok_bs) THEN
     169       precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     170    ELSE
     171       precip_totsnow(:)=precip_snow(:)
     172    ENDIF
     173
    162174
    163175    !******************************************************************************
     
    188200            windsp, fder, &
    189201            itime, dtime, knon, knindex, &
    190             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow,temp_air,spechum,&
     202            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow,temp_air,spechum,&
    191203            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    192204            AcoefU, AcoefV, BcoefU, BcoefV, &
     
    200212       CALL ocean_slab_noice( &
    201213            itime, dtime, jour, knon, knindex, &
    202             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum,&
     214            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, temp_air, spechum,&
    203215            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    204216            AcoefU, AcoefV, BcoefU, BcoefV, &
     
    211223       CALL ocean_forced_noice( &
    212224            itime, dtime, jour, knon, knindex, &
    213             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, &
     225            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, &
    214226            temp_air, spechum, &
    215227            AcoefH, AcoefQ, BcoefH, BcoefQ, &
     
    326338       call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, &
    327339            u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), &
    328             rain = precip_rain(:knon) + precip_snow(:knon), &
     340            rain = precip_rain(:knon) + precip_totsnow(:knon), &
    329341            hf = - fluxsens(:knon), hlb = - fluxlat(:knon), &
    330342            rnl = - lwnet(:knon), &
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/add_phys_tend_mod.F90

    r4491 r4669  
    1616CONTAINS
    1717
    18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap &
     18SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap &
    1919#ifdef ISO
    2020        ,zdxt,zdxtl,zdxti &
     
    6262  ! ------------
    6363  REAL zdu(klon, klev), zdv(klon, klev)
    64   REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev)
     64  REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev)
    6565  CHARACTER *(*) text
    6666  REAL paprs(klon,klev+1)
     
    104104    PRINT *, ' add_pbl_tend, zzdt ', zzdt
    105105    PRINT *, ' add_pbl_tend, zzdq ', zzdq
    106     CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
     106    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
    107107#ifdef ISO
    108108        ,zzdxt,zdxtl,zdxti &
     
    110110        )
    111111  ELSE
    112     CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
     112    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
    113113#ifdef ISO
    114114        ,zdxt,zdxtl,zdxti &
     
    123123! $Id$
    124124!
    125 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,paprs,text, &
     125SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, &
    126126                          abortphy,flag_inhib_tend, itap, diag_mode &
    127127#ifdef ISO
     
    142142USE dimphy, ONLY: klon, klev
    143143USE phys_state_var_mod, ONLY : phys_tstep
    144 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q_seri, t_seri
     144USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri
    145145#ifdef ISO
    146146USE phys_local_var_mod, ONLY: xtl_seri, xts_seri, xt_seri
     
    150150USE print_control_mod, ONLY: prt_level
    151151USE cmp_seri_mod
    152 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    153   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     152USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     153  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    154154
    155155#ifdef ISO
     
    167167!------------
    168168REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdu, zdv
    169 REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi
     169REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi, zdqbs
    170170REAL, DIMENSION(klon,klev+1),   INTENT(IN)    :: paprs
    171171CHARACTER*(*),                  INTENT(IN)    :: text
     
    197197! Save variables, used in diagnostic mode (diag_mode=1).
    198198REAL, DIMENSION(klon,klev)   :: sav_u_seri, sav_v_seri
    199 REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_q_seri
     199REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri
    200200REAL, DIMENSION(klon,klev)   :: sav_t_seri
    201201REAL, DIMENSION(klon,klev)   :: sav_zdq
     
    228228! zh_ql_col----  total enthalpy of liquid watter (J/m2)
    229229! zh_qs_col----  total enthalpy of solid watter  (J/m2)
     230! zh_qbs_col----  total enthalpy of blowing snow  (J/m2)
    230231! zqw_col------  total mass of watter vapour (kg/m2)
    231232! zql_col------  total mass of liquid watter (kg/m2)
    232 ! zqs_col------  total mass of solid watter (kg/m2)
     233! zqs_col------  total mass of cloud ice (kg/m2)
     234! zqbs_col------  total mass of blowing snow (kg/m2)
    233235! zek_col------  total kinetic energy (kg/m2)
    234236!
     
    237239REAL zql_col(klon,2)
    238240REAL zqs_col(klon,2)
     241REAL zqbs_col(klon,2)
    239242REAL zek_col(klon,2)
    240243REAL zh_dair_col(klon,2)
    241 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2)
     244REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2)
    242245REAL zh_col(klon,2)
    243246
     
    278281    sav_ql_seri(:,:) = ql_seri(:,:)
    279282    sav_qs_seri(:,:) = qs_seri(:,:)
     283    sav_qbs_seri(:,:) = qbs_seri(:,:)
    280284    sav_q_seri(:,:)  = q_seri(:,:)
    281285    sav_t_seri(:,:)  = t_seri(:,:)
     
    304308
    305309    CALL integr_v(klon, klev, zcpvap, &
    306                   t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &
    307                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    308                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     310                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
     311                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     312                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    309313
    310314  end if ! end if (fl_ebil .GT. 0)
     
    337341     ql_seri(:,:)=ql_seri(:,:)+zdql(:,:)
    338342     qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:)
     343     qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:)
    339344#ifdef ISO
    340345     xtl_seri(:,:,:)=xtl_seri(:,:,:)+zdxtl(:,:,:)
     
    601606        ql_seri(:,:)=ql_seri(:,:)-zdql(:,:)
    602607        qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:)
     608        qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:)
    603609      ENDIF
    604610
     
    615621
    616622    CALL integr_v(klon, klev, zcpvap, &
    617                   t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &
    618                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    619                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     623                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
     624                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     625                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    620626
    621627    ! ------------------------------------------------
     
    626632    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
    627633    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
    628     d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:)
     634    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
     635    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
    629636
    630637    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
     
    634641    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
    635642    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
     643    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
    636644
    637645    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
     
    645653    ql_seri(:,:) = sav_ql_seri(:,:)
    646654    qs_seri(:,:) = sav_qs_seri(:,:)
     655    qbs_seri(:,:) = sav_qbs_seri(:,:)
    647656    q_seri(:,:)  = sav_q_seri(:,:)
    648657    t_seri(:,:)  = sav_t_seri(:,:)
     
    659668END SUBROUTINE add_phys_tend
    660669
    661 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &
    662                           zdu,zdv,zdt,zdq,zdql,zdqs,paprs,text)
     670SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, &
     671                          zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text)
    663672!======================================================================
    664673! Ajoute les tendances des variables physiques aux variables
     
    676685USE print_control_mod, ONLY: prt_level
    677686USE cmp_seri_mod
    678 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    679   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     687USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     688  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    680689IMPLICIT none
    681690  include "YOMCST.h"
     
    686695INTEGER, INTENT(IN)                           :: nlon, nlev
    687696REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: uu, vv
    688 REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs
     697REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs, qbs
    689698REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdu, zdv
    690 REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs
     699REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs, zdqbs
    691700REAL, DIMENSION(nlon,nlev+1),   INTENT(IN)    :: paprs
    692701CHARACTER*(*),                  INTENT(IN)    :: text
     
    695704!--------
    696705REAL, DIMENSION(nlon,nlev)      :: uu_n, vv_n
    697 REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n
     706REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n, qbs_n
    698707
    699708
     
    718727! zqw_col------  total mass of watter vapour (kg/m2)
    719728! zql_col------  total mass of liquid watter (kg/m2)
    720 ! zqs_col------  total mass of solid watter (kg/m2)
     729! zqs_col------  total mass of cloud ice (kg/m2)
     730! zqbs_col------  total mass of blowing snow (kg/m2)
    721731! zek_col------  total kinetic energy (kg/m2)
    722732!
     
    725735REAL zql_col(nlon,2)
    726736REAL zqs_col(nlon,2)
     737REAL zqbs_col(nlon,2)
    727738REAL zek_col(nlon,2)
    728739REAL zh_dair_col(nlon,2)
    729 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2)
     740REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2)
    730741REAL zh_col(nlon,2)
    731742
     
    760771
    761772    CALL integr_v(nlon, nlev, rcpv, &
    762                   temp, qv, ql, qs, uu, vv, zairm, &
    763                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    764                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     773                  temp, qv, ql, qs, qbs, uu, vv, zairm, &
     774                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     775                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    765776
    766777  end if ! end if (fl_ebil .GT. 0)
     
    775786     ql_n(:,:)=ql(:,:)+zdql(:,:)
    776787     qs_n(:,:)=qs(:,:)+zdqs(:,:)
     788     qbs_n(:,:)=qbs(:,:)+zdqbs(:,:)
    777789     temp_n(:,:)=temp(:,:)+zdt(:,:)
    778790
     
    791803
    792804    CALL integr_v(nlon, nlev, rcpv, &
    793                   temp_n, qv_n, ql_n, qs_n, uu_n, vv_n, zairm, &
    794                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    795                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     805                  temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, &
     806                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     807                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    796808
    797809    ! ------------------------------------------------
     
    802814    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
    803815    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
    804     d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:)
     816    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
     817    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
    805818
    806819    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
     
    814827    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
    815828    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
     829    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
    816830
    817831    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
     
    824838
    825839SUBROUTINE integr_v(nlon, nlev, zcpvap, &
    826                     temp, qv, ql, qs, uu, vv, zairm,  &
    827                     zqw_col, zql_col, zqs_col, zek_col, zh_dair_col, &
    828                     zh_qw_col, zh_ql_col, zh_qs_col, zh_col)
     840                    temp, qv, ql, qs, qbs, uu, vv, zairm,  &
     841                    zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, &
     842                    zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col)
    829843
    830844IMPLICIT none
     
    833847INTEGER,                    INTENT(IN)    :: nlon,nlev
    834848REAL,                       INTENT(IN)    :: zcpvap
    835 REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, uu, vv
     849REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, qbs, uu, vv
    836850REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: zairm
    837851REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqw_col
    838852REAL, DIMENSION(nlon),      INTENT(OUT)   :: zql_col
    839 REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col
     853REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col, zqbs_col
    840854REAL, DIMENSION(nlon),      INTENT(OUT)   :: zek_col
    841855REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_dair_col
    842856REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qw_col
    843857REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_ql_col
    844 REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col
     858REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col, zh_qbs_col
    845859REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_col
    846860
     
    852866    zql_col(:) = 0.
    853867    zqs_col(:) = 0.
     868    zqbs_col(:) = 0.
    854869    zek_col(:) = 0.
    855870    zh_dair_col(:) = 0.
     
    857872    zh_ql_col(:) = 0.
    858873    zh_qs_col(:) = 0.
     874    zh_qbs_col(:) = 0.
    859875
    860876!JLD    write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice
     
    869885        zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k)
    870886        zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k)
     887        zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k)
    871888        ! Kinetic Energy
    872889        zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k)
     
    877894        zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k)   !jyg
    878895        zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k)   !jyg
     896        zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k)   !jyg
    879897      END DO
    880898    END DO
    881899    ! compute total air enthalpy
    882     zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:)
     900    zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:)
    883901
    884902END SUBROUTINE integr_v
     
    895913USE dimphy, ONLY: klon, klev
    896914USE phys_state_var_mod, ONLY : phys_tstep
    897 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con
     915USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall
    898916USE geometry_mod, ONLY: longitude_deg, latitude_deg
    899917USE print_control_mod, ONLY: prt_level
    900918USE cmp_seri_mod
    901 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    902   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     919USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     920  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    903921USE phys_local_var_mod, ONLY: evap, sens
    904 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q_seri, t_seri &
     922USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri &
    905923   &  , rain_lsc, snow_lsc
    906924USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd
     
    939957      bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) &
    940958    &         + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1)
     959  CASE("bs") param
     960      bilq_bnd = - bs_fall(1)
     961      bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1)
    941962  CASE("convection") param
    942963      bilq_bnd = - rain_con(1) - snow_con(1)
     
    975996  if ( prt_level .GE. 5) then
    976997    write(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd
    977     write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1)
    978     write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1)
     998    write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1), d_qbs_col(1)
     999    write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1),d_h_qbs_col(1)
    9791000  end if
    9801001
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/fisrtilp.F90

    r4491 r4669  
    2626  ! flag to include modifications to ensure energy conservation (if flag >0)
    2727  USE add_phys_tend_mod, only : fl_cor_ebil
     28  USE lscp_ini_mod, ONLY: iflag_t_glace,t_glace_min, t_glace_max, exposant_glace
     29  USE lscp_ini_mod, ONLY: iflag_cloudth_vert, iflag_rain_incloud_vol
     30  USE lscp_ini_mod, ONLY: coef_eva, coef_eva_i, ffallv_lsc, ffallv_con
     31  USE lscp_ini_mod, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
     32  USE lscp_ini_mod, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf
     33
     34
     35
    2836#ifdef ISO
    2937  USE infotrac_phy, ONLY: ntraciso=>ntiso,niso,itZonIso
     
    8290  !======================================================================
    8391  include "YOMCST.h"
    84   include "fisrtilp.h"
    85   include "nuage.h" ! JBM (3/14)
    86 
    8792  !
    8893  ! Principaux inputs:
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/pbl_surface_mod.F90

    r4491 r4669  
    2121  USE cpl_mod,             ONLY : gath2cpl
    2222  USE climb_hq_mod,        ONLY : climb_hq_down, climb_hq_up
     23  USE climb_qbs_mod,       ONLY : climb_qbs_down, climb_qbs_up
    2324  USE climb_wind_mod,      ONLY : climb_wind_down, climb_wind_up
    2425  USE coef_diff_turb_mod,  ONLY : coef_diff_turb
     
    261262       rlon,      rlat,      rugoro,   rmu0,          &
    262263       lwdown_m,  cldt,          &
    263        rain_f,    snow_f,    solsw_m,  solswfdiff_m, sollw_m,       &
     264       rain_f,    snow_f,    bs_f, solsw_m,  solswfdiff_m, sollw_m,       &
    264265       gustiness,                                     &
    265        t,         q,        u,        v,             &
     266       t,         q,        qbs, u,        v,             &
    266267!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    267268!!       t_x,       q_x,       t_w,      q_w,           &
     
    275276       beta, &
    276277!>jyg
    277        alb_dir_m,    alb_dif_m,  zxsens,   zxevap,    &
     278       alb_dir_m,    alb_dif_m,  zxsens,   zxevap,  zxsnowerosion,  &
    278279       alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    279280       zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout, &
    280        d_t,       d_q,       d_u,      d_v, d_t_diss, &
     281       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss, &
    281282!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    282283       d_t_w,     d_q_w,                              &
     
    301302       rh2m,      zxfluxu,  zxfluxv,               &
    302303       z0m, z0h,   agesno,  sollw,    solsw,         &
    303        d_ts,      evap,    fluxlat,  t2m,           &
     304       d_ts,      evap,    fluxlat,   t2m,           &
    304305       wfbils,    wfbilo, wfevap, wfrain, wfsnow,   &
    305306       flux_t,   flux_u, flux_v,                    &
     
    307308!jyg<
    308309!!       zxfluxt,   zxfluxq,   q2m,      flux_q, tke,   &
    309        zxfluxt,   zxfluxq,   q2m,      flux_q, tke_x,  &
     310       zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x,  &
    310311!>jyg
    311312!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    410411         dser, dt_ds, zsig, zmea
    411412    use phys_output_var_mod, only: tkt, tks, taur, sss
     413    use blowing_snow_ini_mod, only : zeta_bs
    412414#ifdef CPP_XIOS
    413415    USE wxios, ONLY: missing_val
     
    444446    REAL, DIMENSION(klon),        INTENT(IN)        :: rain_f  ! rain fall
    445447    REAL, DIMENSION(klon),        INTENT(IN)        :: snow_f  ! snow fall
     448    REAL, DIMENSION(klon),        INTENT(IN)        :: bs_f  ! blowing snow fall
    446449    REAL, DIMENSION(klon),        INTENT(IN)        :: solsw_m ! net shortwave radiation at mean surface
    447450    REAL, DIMENSION(klon),        INTENT(IN)        :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface
     
    449452    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t       ! temperature (K)
    450453    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: q       ! water vapour (kg/kg)
     454    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: qbs       ! blowing snow specific content (kg/kg)
    451455    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: u       ! u speed
    452456    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: v       ! v speed
     
    521525                                                                  ! (=> positive sign upwards)
    522526    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxevap     ! water vapour flux at surface, positiv upwards
     527    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsnowerosion     ! blowing snow flux at surface
    523528    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol     ! temperature at surface, mean for each grid point
    524529!!! jyg le ???
     
    537542    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_u        ! change in u speed
    538543    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_v        ! change in v speed
     544    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_qbs        ! change in blowing snow specific content
     545
    539546
    540547    REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1)
     
    604611    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: sollw      ! net longwave radiation at surface
    605612    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: d_ts       ! change in temperature at surface
    606     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap     ! evaporation at surface
     613    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap       ! evaporation at surface
    607614    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: fluxlat    ! latent flux
    608615    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: t2m        ! temperature at 2 meter height
     
    631638    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxt    ! sensible heat flux, mean for each grid point
    632639    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxq    ! water vapour flux, mean for each grid point
     640    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxqbs    ! blowing snow flux, mean for each grid point
    633641    REAL, DIMENSION(klon, nbsrf),INTENT(OUT)        :: q2m        ! water vapour at 2 meter height
    634642    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q     ! water vapour flux(latent flux) (kg/m**2/s)
     643    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs   ! blowind snow vertical flux (kg/m**2
     644
    635645#ifdef ISO   
    636646    REAL, DIMENSION(ntraciso,klon),       INTENT(OUT)        :: dflux_xt    ! change of water vapour flux
     
    683693    REAL, DIMENSION(klon)              :: yalb,yalb_vis
    684694!albedo SB <<<
    685     REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1
     695    REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1, yqbs1
    686696    REAL, DIMENSION(klon)              :: yqa
    687697    REAL, DIMENSION(klon)              :: ysnow, yqsurf, yagesno, yqsol
    688     REAL, DIMENSION(klon)              :: yrain_f, ysnow_f
     698    REAL, DIMENSION(klon)              :: yrain_f, ysnow_f, ybs_f
    689699#ifdef ISO
    690700    REAL, DIMENSION(ntraciso,klon)              :: yxt1
     
    699709    REAL, DIMENSION(klon)              :: yrugoro
    700710    REAL, DIMENSION(klon)              :: yfluxlat
     711    REAL, DIMENSION(klon)              :: yfluxbs
    701712    REAL, DIMENSION(klon)              :: y_d_ts
    702713    REAL, DIMENSION(klon)              :: y_flux_t1, y_flux_q1
     
    707718#endif
    708719    REAL, DIMENSION(klon)              :: y_flux_u1, y_flux_v1
     720    REAL, DIMENSION(klon)              :: y_flux_bs, y_flux0
    709721    REAL, DIMENSION(klon)              :: yt2m, yq2m, yu10m
    710722    INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w
     
    736748#endif
    737749    REAL, DIMENSION(klon)              :: AcoefU, AcoefV, BcoefU, BcoefV
     750    REAL, DIMENSION(klon)              :: AcoefQBS, BcoefQBS
    738751    REAL, DIMENSION(klon)              :: ypsref
    739752    REAL, DIMENSION(klon)              :: yevap, yevap_pot, ytsurf_new, yalb3_new
     
    744757    REAL, DIMENSION(klon)              :: meansqT ! mean square deviation of subsurface temperatures
    745758    REAL, DIMENSION(klon)              :: alb_m  ! mean albedo for whole SW interval
    746     REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss
     759    REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs
    747760    REAL, DIMENSION(klon,klev)         :: y_d_u, y_d_v
    748     REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q
     761    REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q, y_flux_qbs
    749762    REAL, DIMENSION(klon,klev)         :: y_flux_u, y_flux_v
    750     REAL, DIMENSION(klon,klev)         :: ycoefh, ycoefm,ycoefq
     763    REAL, DIMENSION(klon,klev)         :: ycoefh, ycoefm,ycoefq, ycoefqbs
    751764    REAL, DIMENSION(klon)              :: ycdragh, ycdragq, ycdragm
    752765    REAL, DIMENSION(klon,klev)         :: yu, yv
    753     REAL, DIMENSION(klon,klev)         :: yt, yq
     766    REAL, DIMENSION(klon,klev)         :: yt, yq, yqbs
    754767#ifdef ISO
    755768    REAL, DIMENSION(ntraciso,klon)              :: yxtevap
     
    819832    REAL, DIMENSION(klon,klev)         :: CcoefH, CcoefQ, DcoefH, DcoefQ
    820833    REAL, DIMENSION(klon,klev)         :: CcoefU, CcoefV, DcoefU, DcoefV
     834    REAL, DIMENSION(klon,klev)         :: CcoefQBS, DcoefQBS
    821835    REAL, DIMENSION(klon,klev)         :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x
    822836    REAL, DIMENSION(klon,klev)         :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w
     
    824838    REAL, DIMENSION(klon,klev)         :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w
    825839    REAL, DIMENSION(klon,klev)         :: Kcoef_hq, Kcoef_m, gama_h, gama_q
     840    REAL, DIMENSION(klon,klev)         :: gama_qbs, Kcoef_qbs
    826841    REAL, DIMENSION(klon,klev)         :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x
    827842    REAL, DIMENSION(klon,klev)         :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w
     
    10161031    REAL, DIMENSION(klon,nbsrf)        :: zx_t1
    10171032    REAL, DIMENSION(klon, nbsrf)       :: alb          ! mean albedo for whole SW interval
     1033    REAL, DIMENSION(klon,nbsrf)        :: snowerosion   
    10181034    REAL, DIMENSION(klon)              :: ylwdown      ! jg : temporary (ysollwdown)
    10191035    REAL, DIMENSION(klon)              :: ygustiness      ! jg : temporary (ysollwdown)
     
    11891205  alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0.
    11901206!albedo SB <<<
    1191  zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0.
     1207 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0.
    11921208 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0.
    11931209 zxfluxlat(:)=0.
    11941210 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0.
    11951211 zn2mout(:,:)=0 ;
    1196  d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
     1212 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
    11971213 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0.
    11981214 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0.
     
    12141230 d_ts(:,:)=0.
    12151231 evap(:,:)=0.
     1232 snowerosion(:,:)=0.
    12161233 fluxlat(:,:)=0.
    12171234 wfbils(:,:)=0. ; wfbilo(:,:)=0.
    12181235 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0.
    12191236 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0.
     1237 flux_qbs(:,:,:)=0.
    12201238 dflux_t(:)=0. ; dflux_q(:)=0.
    12211239 zxsnow(:)=0.
    1222  zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.
     1240 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0.
    12231241 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0.
    12241242 runoff(:)=0.
     
    12661284    yqsurf = 0.0  ; yalb = 0.0 ; yalb_vis = 0.0
    12671285!albedo SB <<<
    1268     yrain_f = 0.0 ; ysnow_f = 0.0    ; yfder = 0.0     ; ysolsw = 0.0
     1286    yrain_f = 0.0 ; ysnow_f = 0.0  ; ybs_f=0.0  ; yfder = 0.0     ; ysolsw = 0.0
    12691287    ysollw = 0.0  ; yz0m = 0.0 ; yz0h = 0.0    ; yu1 = 0.0   
    1270     yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0
     1288    yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0     ; yqbs1 = 0.0
    12711289    ydelp = 0.0   ; yu = 0.0         ; yv = 0.0        ; yt = 0.0         
    12721290    yq = 0.0      ; y_dflux_t = 0.0  ; y_dflux_q = 0.0
     1291    yqbs(:,:)=0.0 
    12731292    yrugoro = 0.0 ; ywindsp = 0.0   
    12741293!!    d_ts = 0.0    ; yfluxlat=0.0     ; flux_t = 0.0    ; flux_q = 0.0     
    1275     yfluxlat=0.0
     1294    yfluxlat=0.0 ; y_flux0(:)=0.0
    12761295!!    flux_u = 0.0  ; flux_v = 0.0     ; d_t = 0.0       ; d_q = 0.0     
    12771296!!    d_t_diss= 0.0 ;d_u = 0.0     ; d_v = 0.0
     
    12881307    ycldt = 0.0      ; yrmu0 = 0.0
    12891308    ! Martin
     1309    y_d_qbs(:,:)=0.0
    12901310
    12911311!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    16291649          yrain_f(j) = rain_f(i)
    16301650          ysnow_f(j) = snow_f(i)
     1651          ybs_f(j)   = bs_f(i)
    16311652          yagesno(j) = agesno(i,nsrf)
    16321653          yfder(j)   = fder(i)
     
    16401661          yu1(j)     = u(i,1)
    16411662          yv1(j)     = v(i,1)
     1663          yqbs1(j)   = qbs(i,1)
    16421664          ypaprs(j,klev+1) = paprs(i,klev+1)
    16431665!jyg<
     
    16531675!!! nrlmd le 13/06/2011
    16541676          y_delta_tsurf(j)=delta_tsurf(i,nsrf)
     1677          yfluxbs(j)=0.0
     1678          y_flux_bs(j) = 0.0
    16551679!!!
    16561680#ifdef ISO
     
    17211745             yt(j,k) = t(i,k)
    17221746             yq(j,k) = q(i,k)
     1747             yqbs(j,k)=qbs(i,k)
    17231748#ifdef ISO
    17241749             do ixt=1,ntraciso   
     
    19511976      print *,' args coef_diff_turb: ycdragh ', ycdragh
    19521977      print *,' args coef_diff_turb: ytke ', ytke
    1953 
    19541978       ENDIF
    19551979
     
    19601984
    19611985        ELSE
    1962 
    19631986
    19641987        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
     
    19812004
    19822005        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh
    1983 !
     2006
     2007
    19842008       ELSE  !(iflag_split .eq.0)
     2009
    19852010      IF (prt_level >=10) THEN
    19862011      print *,' args coef_diff_turb: yu_x ',  yu_x 
     
    20202045       ENDIF
    20212046
    2022        ENDIF ! iflag_pbl >= 50
     2047        ENDIF ! iflag_pbl >= 50
    20232048
    20242049        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x
     
    20342059      print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w
    20352060      print *,' args coef_diff_turb: ytke_w ', ytke_w
    2036        ENDIF
     2061      ENDIF
    20372062
    20382063        IF (iflag_pbl>=50) THEN
     
    20622087
    20632088        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w
    2064 !
     2089
    20652090!!!jyg le 10/04/2013
    20662091!!   En attendant de traiter le transport des traceurs dans les poches froides, formule
     
    20722097        ENDDO
    20732098      ENDDO
    2074 !!!
    20752099       ENDIF  ! (iflag_split .eq.0)
    2076 !!!
    20772100       
    20782101!****************************************************************************************
     
    21712194       ENDIF  ! (iflag_split .eq.0)
    21722195!!!
     2196
     2197 ! For blowing snow:
     2198    IF (ok_bs) THEN
     2199     ! following Bintanja et al 2000, part II
     2200     ! we assume that the eddy diffsivity coefficient for
     2201     ! suspended particles is larger than Km by a factor zeta_bs
     2202     ! which is equal to 3 by default
     2203     do k=1,klev
     2204        do j=1,knon
     2205           ycoefqbs(j,k)=ycoefm(j,k)*zeta_bs
     2206        enddo
     2207     enddo
     2208     CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, &
     2209     ydelp, yt, yqbs, dtime, &
     2210     CcoefQBS, DcoefQBS, &
     2211     Kcoef_qbs, gama_qbs, &
     2212     AcoefQBS, BcoefQBS)
     2213    ENDIF
     2214
     2215
    21732216
    21742217!****************************************************************************************
     
    23562399               debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, &
    23572400!!jyg               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2358                yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2401               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    23592402               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    23602403               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    23622405               ylwdown, yq2m, yt2m, &
    23632406               ysnow, yqsol, yagesno, ytsoil, &
    2364                yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
     2407               yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,&
    23652408               yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, &
    23662409               y_flux_u1, y_flux_v1, &
     
    24332476                  yrmu0, ylwdown, yalb, zgeo1, &
    24342477                  ysolsw, ysollw, yts, ypplay(:,1), &
    2435                   !!jyg               ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2436                   ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2478                  ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    24372479                  AcoefH, AcoefQ, BcoefH, BcoefQ, &
    24382480                  AcoefU, AcoefV, BcoefU, BcoefV, &
     2481                  AcoefQBS, BcoefQBS, &
    24392482                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2440                   ysnow, yqsurf, yqsol, yagesno, &
     2483                  ysnow, yqsurf, yqsol,yqbs1, yagesno, &
    24412484                  ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, &
    2442                   ytsurf_new, y_dflux_t, y_dflux_q, &
     2485                  yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, &
    24432486                  yzmea, yzsig, ycldt, &
    24442487                  ysnowhgt, yqsnow, ytoice, ysissnow, &
     
    24992542               itap, dtime, jour, knon, ni, &
    25002543!!jyg               ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2501                ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&    ! ym missing init
     2544               ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),&    ! ym missing init
    25022545               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    25032546               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    26642707          ENDDO
    26652708        ENDIF ! (ok_flux_surf)
     2709
     2710        ! flux of blowing snow at the first level
     2711        IF (ok_bs) THEN
     2712        DO j=1,knon
     2713        y_flux_bs(j)=yfluxbs(j)
     2714        ENDDO
     2715        ENDIF
    26662716!
    26672717! ------------------------------------------------------------------------------
     
    29913041!
    29923042       ENDIF  ! (iflag_split .eq.0)
     3043
     3044       IF (ok_bs) THEN
     3045            CALL climb_qbs_up(knon, dtime, yqbs, &
     3046            y_flux_bs, ypaprs, ypplay, &
     3047            AcoefQBS, BcoefQBS, &
     3048            CcoefQBS, DcoefQBS, &
     3049            Kcoef_qbs, gama_qbs, &
     3050            y_flux_qbs(:,:), y_d_qbs(:,:))
     3051       ENDIF
     3052
    29933053!!!
    29943054!!
     
    31573217!!!
    31583218
    3159 !      print*,'Dans pbl OK1'
    3160 
    3161 !jyg<
    3162 !!       evap(:,nsrf) = - flux_q(:,1,nsrf)
    3163 !>jyg
     3219       ! tendencies of blowing snow
     3220       IF (ok_bs) THEN
     3221           DO k = 1, klev   
     3222            DO j = 1, knon
     3223                i = ni(j)
     3224                y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j)
     3225                flux_qbs(i,k,nsrf) = y_flux_qbs(j,k)
     3226            ENDDO
     3227          ENDDO
     3228       ENDIF
     3229
     3230
    31643231       DO j = 1, knon
    31653232          i = ni(j)
    31663233          evap(i,nsrf) = - flux_q(i,1,nsrf)                  !jyg
     3234          if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif
    31673235          beta(i,nsrf) = ybeta(j)                             !jyg
    31683236          d_ts(i,nsrf) = y_d_ts(j)
     
    33923460          ENDDO
    33933461       ENDDO
     3462
     3463
     3464       IF (ok_bs) THEN
     3465         DO k = 1, klev
     3466         DO j = 1, knon
     3467         i = ni(j)
     3468         d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k)
     3469         ENDDO
     3470         ENDDO
     3471        ENDIF
     3472
    33943473
    33953474#ifdef ISO
     
    38943973       fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i)
    38953974    ENDDO
     3975
     3976    ! if blowing snow
     3977    if (ok_bs) then 
     3978       DO nsrf = 1, nbsrf
     3979       DO k = 1, klev
     3980       DO i = 1, klon
     3981         zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf)
     3982       ENDDO
     3983       ENDDO
     3984       ENDDO
     3985
     3986       DO i = 1, klon
     3987        zxsnowerosion(i)     = zxfluxqbs(i,1) ! blowings snow flux at the surface
     3988       END DO
     3989    endif
     3990
     3991   
     3992   
    38963993#ifdef ISO
    38973994    DO i = 1, klon
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phyetat0_mod.F90

    r4389 r4669  
    2424       qsol, fevap, z0m, z0h, agesno, &
    2525       du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, &
    26        falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, &
    27        ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &
    28        rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, &
     26       falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, &
     27       ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &
     28       rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, &
    2929       solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, &
    3030       wake_deltat, wake_delta_pbl_TKE, delta_tsurf, beta_aridity, wake_fip, wake_pe, &
     
    349349  found=phyetat0_get(rain_fall,"rain_f","rain fall",0.)
    350350
     351  IF (ok_bs) THEN
     352     found=phyetat0_get(bs_fall,"bs_f","blowing snow fall",0.)
     353  ELSE
     354     bs_fall(:)=0.
     355  ENDIF
     356
     357
    351358!=======================================================================
    352359! Radiation
     
    410417  ancien_ok=ancien_ok.AND.phyetat0_get(prsw_ancien,"PRSWANCIEN","PRSWANCIEN",0.)
    411418
     419  ! cas specifique des variables de la neige soufflee
     420  IF (ok_bs) THEN
     421     ancien_ok=ancien_ok.AND.phyetat0_get(qbs_ancien,"QBSANCIEN","QBSANCIEN",0.)
     422     ancien_ok=ancien_ok.AND.phyetat0_get(prbsw_ancien,"PRBSWANCIEN","PRBSWANCIEN",0.)
     423  ELSE
     424     qbs_ancien(:,:)=0.
     425     prbsw_ancien(:)=0.
     426  ENDIF
     427
     428
    412429  ! Ehouarn: addtional tests to check if t_ancien, q_ancien contain
    413430  !          dummy values (as is the case when generated by ce0l,
     
    423440    ancien_ok=.false.
    424441  ENDIF
     442
     443  IF (ok_bs) THEN
     444    IF ( (maxval(qbs_ancien).EQ.minval(qbs_ancien))       .OR. &
     445         (maxval(prbsw_ancien).EQ.minval(prbsw_ancien)) ) THEN
     446       ancien_ok=.false.
     447    ENDIF
     448  ENDIF
     449
    425450
    426451  found=phyetat0_get(clwcon,"CLWCON","CLWCON",0.)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phyredem.F90

    r4491 r4669  
    1515                                ftsol, beta_aridity, delta_tsurf, falb_dir,  &
    1616                                falb_dif, qsol, fevap, radsol, solsw, sollw, &
    17                                 sollwdown, rain_fall, snow_fall, z0m, z0h,  &
     17                                sollwdown, rain_fall, snow_fall, bs_fall, z0m, z0h, &
    1818                                agesno, zmea, zstd, zsig, zgam, zthe, zpic,  &
    1919                                zval, rugoro, t_ancien, q_ancien,            &
    20                                 prw_ancien, prlw_ancien, prsw_ancien,        &
    21                                 ql_ancien, qs_ancien,  u_ancien,            &
     20                                prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien,      &
     21                                ql_ancien, qs_ancien, qbs_ancien,  u_ancien, &
    2222                                v_ancien, clwcon, rnebcon, ratqs, pbl_tke,   &
    2323                                wake_delta_pbl_tke, zmax0, f0, sig1, w01,    &
     
    260260
    261261    CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien)
     262
     263    IF (ok_bs) THEN
     264       CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall)
     265       CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien)
     266       CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien)
     267    ENDIF
    262268
    263269    CALL put_field(pass,"PRWANCIEN", "PRWANCIEN", prw_ancien)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_local_var_mod.F90

    r4143 r4669  
    1414      REAL, SAVE, ALLOCATABLE :: ql_seri(:,:),qs_seri(:,:)
    1515      !$OMP THREADPRIVATE(ql_seri,qs_seri)
     16      REAL, SAVE, ALLOCATABLE :: qbs_seri(:,:)
     17      !$OMP THREADPRIVATE(qbs_seri)
    1618      REAL, SAVE, ALLOCATABLE :: u_seri(:,:), v_seri(:,:)
    1719      !$OMP THREADPRIVATE(u_seri, v_seri)
     
    2628      REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:)
    2729      !$OMP THREADPRIVATE(d_t_dyn, d_q_dyn)
    28       REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:)
    29       !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn)
    30       REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:)
    31       !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d)
     30      REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:), d_qbs_dyn(:,:)
     31      !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn, d_qbs_dyn)
     32      REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:), d_qbs_dyn2d(:)
     33      !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d)
    3234      REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:)
    3335      !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn)
     
    6971      REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:)
    7072      !$OMP THREADPRIVATE(d_u_oli, d_v_oli)
    71       REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_t_diss(:,:)
    72       !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf,d_t_diss)
     73      REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_qbs_vdf(:,:), d_t_diss(:,:)
     74      !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_qbs_vdf, d_t_diss)
    7375      REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:)
    7476      !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf)
     
    7880      REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:)
    7981      !$OMP THREADPRIVATE( d_t_vdf_x, d_q_vdf_x)
     82      REAL, SAVE, ALLOCATABLE :: d_t_bs(:,:), d_q_bs(:,:), d_qbs_bs(:,:)
     83      !$OMP THREADPRIVATE( d_t_bs,d_q_bs, d_qbs_bs)
    8084!>nrlmd+jyg
    8185      REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:)
     
    313317!$OMP THREADPRIVATE(sens, flwp, fiwp)
    314318!!
     319!FC
     320      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zxfluxt, zxfluxq
     321!$OMP THREADPRIVATE(zxfluxt, zxfluxq)
     322!FC
    315323!!         Wake variables
    316324      REAL,ALLOCATABLE,SAVE,DIMENSION(:)            :: alp_wake
     
    361369      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt
    362370!$OMP THREADPRIVATE(JrNt)
    363       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw
    364 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)
     371      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw
     372!$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw)
    365373      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m
    366374!$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m)
     
    379387      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte
    380388!$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte)
     389      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic
     390!$OMP THREADPRIVATE(zxustartlic, zxrhoslic)
    381391      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving
    382392!$OMP THREADPRIVATE(zxfqcalving)
     
    567577      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi
    568578!$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi)
    569       REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca
    570 !$OMP THREADPRIVATE(prfl, psfl, fraca)
     579      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl
     580!$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl)
    571581      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2
    572582!$OMP THREADPRIVATE(Vprecip, zw2)
     
    585595      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rneb,rnebjn,rneblsvol
    586596!$OMP THREADPRIVATE(rneb,rnebjn,rneblsvol)
     597      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfraclr,pfracld
     598!$OMP THREADPRIVATE(pfraclr,pfracld)
     599      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: distcltop
     600!$OMP THREADPRIVATE(distcltop)
    587601
    588602! variables de sorties MM
     
    734748
    735749IMPLICIT NONE
    736       ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev))
     750      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    737751      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    738752      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     
    741755      ALLOCATE(tr_seri(klon,klev,nbtr))
    742756      ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
    743       ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev))
    744       ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon))
     757      ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev))
     758      ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon))
    745759      ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
    746760      ALLOCATE(d_tr_dyn(klon,klev,nbtr))                   !RomP
     
    765779      ALLOCATE(plul_st(klon),plul_th(klon))
    766780      ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev))
    767 
     781      ALLOCATE (d_qbs_vdf(klon,klev))
     782      ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev))
    768783      ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev))
    769784      ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev))
     
    925940      ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon))
    926941      ALLOCATE(JrNt(klon))
    927       ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))
    928       ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
     942      ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon))
     943      ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
    929944      ALLOCATE(s_lcl(klon))
    930945      ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon))
     
    10121027      ALLOCATE(wfevap(klon, nbsrf), wfrain(klon,nbsrf), wfsnow(klon, nbsrf))
    10131028      ALLOCATE(evap_pot(klon, nbsrf))
     1029! FC
     1030      ALLOCATE(zxfluxq(klon,klev),zxfluxt(klon,klev))
     1031!
    10141032!
    10151033!  Deep convective variables used in phytrac
     
    10551073      ALLOCATE(prfl(klon, klev+1))
    10561074      ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1))
     1075      ALLOCATE(bsfl(klon,klev+1))
    10571076      ALLOCATE(zw2(klon, klev+1))
    10581077
     
    10681087      ALLOCATE(beta_prec(klon,klev))
    10691088      ALLOCATE(rneb(klon,klev),rnebjn(klon,klev),rneblsvol(klon,klev))
    1070 
     1089      ALLOCATE(pfraclr(klon,klev),pfracld(klon,klev))
     1090      pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined
     1091      ALLOCATE(distcltop(klon,klev))
    10711092
    10721093      ALLOCATE (zxsnow(klon),snowhgt(klon),qsnow(klon),to_ice(klon))
     
    11411162USE indice_sol_mod
    11421163IMPLICIT NONE
    1143       DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri)
     1164      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    11441165      DEALLOCATE(u_seri,v_seri)
    11451166      DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
     
    11471168      DEALLOCATE(tr_seri)
    11481169      DEALLOCATE(d_t_dyn,d_q_dyn)
    1149       DEALLOCATE(d_ql_dyn,d_qs_dyn)
    1150       DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d)
     1170      DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn)
     1171      DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d)
    11511172      DEALLOCATE(d_u_dyn,d_v_dyn)
    11521173      DEALLOCATE(d_tr_dyn)                      !RomP
     
    11711192      DEALLOCATE(plul_st,plul_th)
    11721193      DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss)
     1194      DEALLOCATE(d_qbs_vdf)
     1195      DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs)
    11731196#ifdef ISO
    11741197      deallocate(xt_seri,xtl_seri,xts_seri)
     
    13081331      DEALLOCATE(cldm, cldq, cldt, qsat2m)
    13091332      DEALLOCATE(JrNt)
    1310       DEALLOCATE(dthmin, evap, fder, plcl, plfc)
    1311       DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)
     1333      DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc)
     1334      DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl)
    13121335      DEALLOCATE(s_pblh, s_pblt, s_therm)
    13131336!
     
    13221345      DEALLOCATE(zxfqcalving, zxfluxlat)
    13231346      DEALLOCATE(zxrunofflic)
     1347      DEALLOCATE(zxustartlic, zxrhoslic)
    13241348      DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf)
    13251349      DEALLOCATE(rain_lsc)
     
    13641388      DEALLOCATE(alp_bl_stat, n2, s2)
    13651389      DEALLOCATE(proba_notrig, random_notrig)
     1390!FC
     1391      DEALLOCATE(zxfluxq,zxfluxt)
    13661392
    13671393      DEALLOCATE(dnwd0)
     
    14231449
    14241450
    1425       DEALLOCATE(prfl, psfl, fraca, Vprecip)
     1451      DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip)
    14261452      DEALLOCATE(zw2)
    14271453
     
    14361462      DEALLOCATE(beta_prec)
    14371463      DEALLOCATE(rneb)
     1464      DEALLOCATE(pfraclr,pfracld)
     1465      DEALLOCATE(distcltop)
    14381466      DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic)
    14391467#ifdef ISO
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_ctrlout_mod.F90

    r4065 r4669  
    378378  TYPE(ctrl_out), SAVE :: o_snow = ctrl_out((/ 1, 1, 10, 10, 5, 10, 11, 11, 11, 11/), &
    379379    'snow', 'Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     380  TYPE(ctrl_out), SAVE :: o_bsfall = ctrl_out((/ 10, 10, 10, 10, 5, 10, 11, 11, 11, 11/), &
     381    'bsfall', 'Blowing Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    380382  TYPE(ctrl_out), SAVE :: o_evap = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    381383    'evap', 'Evaporat', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    382 
     384  TYPE(ctrl_out), SAVE :: o_snowerosion = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     385   'snowerosion', 'blowing snow flux', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     386  TYPE(ctrl_out), SAVE :: o_ustart_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     387    'ustart_lic', 'threshold velocity', 'm/s', (/ ('', i=1, 10) /))
     388  TYPE(ctrl_out), SAVE :: o_rhosnow_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     389    'rhosnow_lic', 'snow density lic', 'kg/m3', (/ ('', i=1, 10) /))
    383390  TYPE(ctrl_out), SAVE :: o_sens_prec_liq_oce = ctrl_out((/ 5, 5, 10, 10, 5, 10, 11, 11, 11, 11/), &
    384391    'sens_rain_oce', 'Sensible heat flux of liquid prec. over ocean', 'W/m2', (/ ('', i=1, 10) /))
     
    743750  TYPE(ctrl_out), SAVE :: o_prsw = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    744751    'prsw', 'Precipitable solid water', 'kg/m2', (/ ('', i=1, 10) /))
     752  TYPE(ctrl_out), SAVE :: o_prbsw = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     753    'prbsw', 'Precipitable blowing snow', 'kg/m2', (/ ('', i=1, 10) /))
    745754  TYPE(ctrl_out), SAVE :: o_s_pblh = ctrl_out((/ 1, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    746755    's_pblh', 'Boundary Layer Height', 'm', (/ ('', i=1, 10) /))
     
    14131422    'ec550aer', 'Extinction at 550nm', 'm^-1', (/ ('', i=1, 10) /))
    14141423  TYPE(ctrl_out), SAVE :: o_lwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    1415     'lwcon', 'Cloud liquid water content', 'kg/kg', (/ ('', i=1, 10) /))
     1424    'lwcon', 'Cloud liquid water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /))
    14161425  TYPE(ctrl_out), SAVE :: o_iwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    1417     'iwcon', 'Cloud ice water content', 'kg/kg', (/ ('', i=1, 10) /))
     1426    'iwcon', 'Cloud ice water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /))
    14181427  TYPE(ctrl_out), SAVE :: o_temp = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
    14191428    'temp', 'Air temperature', 'K', (/ ('', i=1, 10) /))
     
    14321441  TYPE(ctrl_out), SAVE :: o_ocond = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
    14331442    'ocond', 'Condensed water', 'kg/kg', (/ ('', i=1, 10) /))
     1443  TYPE(ctrl_out), SAVE :: o_qbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1444    'qbs', 'Specific content of blowing snow', 'kg/kg', (/ ('', i=1, 10) /))
    14341445  TYPE(ctrl_out), SAVE :: o_wvapp = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14351446    'wvapp', '', '', (/ ('', i=1, 10) /))
     
    14621473  TYPE(ctrl_out), SAVE :: o_rneblsvol = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14631474    'rneblsvol', 'LS Cloud fraction by volume', '-', (/ ('', i=1, 10) /))
     1475  TYPE(ctrl_out), SAVE :: o_pfraclr = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     1476    'pfraclr', 'LS precipitation fraction clear-sky part', '-', (/ ('', i=1, 10) /))
     1477  TYPE(ctrl_out), SAVE :: o_pfracld = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     1478    'pfracld', 'LS precipitation fraction cloudy part', '-', (/ ('', i=1, 10) /))
    14641479  TYPE(ctrl_out), SAVE :: o_rhum = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14651480    'rhum', 'Relative humidity', '-', (/ ('', i=1, 10) /))
     
    14941509  TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14951510    'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1511  TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1512    'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1513  TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1514    'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    14961515  TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14971516    'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /))
     
    15021521  TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15031522    'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /))
     1523  TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1524    'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /))
    15041525  TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15051526    're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /))
     
    15301551  TYPE(ctrl_out), SAVE :: o_stratomask = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15311552    'stratomask', 'Stratospheric fraction', '1', (/ ('', i=1, 10) /))
     1553!FC
     1554  TYPE(ctrl_out), SAVE :: o_zxfluxt = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1555    'fluxt', 'flux h ', 'W/m2', (/ ('', i=1, 10) /))
     1556  TYPE(ctrl_out), SAVE :: o_zxfluxq = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1557    'fluxq', 'flux q ', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    15321558!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    15331559
     
    15991625  TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16001626    'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1627  TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1628    'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1629  TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1630    'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    16011631  TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16021632    'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /))
     
    16731703  TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16741704    'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1705  TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1706    'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1707  TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1708    'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1709  TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1710    'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /))
     1711  TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1712    'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /))
    16751713
    16761714!!!!!!!!!!!!!!!! Specifique thermiques
     
    18351873  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtprecip(:)
    18361874  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtevap(:)
     1875  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtevap_srf(:,:) ! ajout Camille 8 mai 2023
    18371876  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtplul(:)
    18381877  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtpluc(:)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_mod.F90

    r4170 r4669  
    178178    ALLOCATE(o_xtpluc(ntraciso))
    179179    ALLOCATE(o_xtevap(ntraciso))
     180    ALLOCATE(o_xtevap_srf(ntraciso,4))
    180181    ALLOCATE(o_xtovap(ntraciso))
    181182    ALLOCATE(o_xtoliq(ntraciso))
     
    558559      o_xtevap  (ixt)=ctrl_out(flag,   'evap'//TRIM(outiso),             'Evaporat.', unit, [('',i=1,nfiles)])
    559560
     561      ! ajout Camille 8 mai 2023
     562      flag = [1, 6, 10, 10, 10, 10, 11, 11, 11, 11]
     563      o_xtevap_srf (ixt,1)=ctrl_out(flag,   'evap_ter'//TRIM(outiso), 'Evap sfc'//clnsurf(1), unit, [('',i=1,nfiles)])
     564      o_xtevap_srf (ixt,2)=ctrl_out(flag,   'evap_lic'//TRIM(outiso), 'Evap sfc'//clnsurf(2), unit, [('',i=1,nfiles)])
     565      o_xtevap_srf (ixt,3)=ctrl_out(flag,   'evap_oce'//TRIM(outiso), 'Evap sfc'//clnsurf(3), unit, [('',i=1,nfiles)])
     566      o_xtevap_srf (ixt,4)=ctrl_out(flag,   'evap_sic'//TRIM(outiso), 'Evap sfc'//clnsurf(4), unit, [('',i=1,nfiles)])
     567
    560568      flag = [2,  3,  4, 10, 10, 10, 11, 11, 11, 11]; unit = 'kg/kg'
    561569      o_xtovap  (ixt)=ctrl_out(flag,   'ovap'//TRIM(outiso),     'Specific humidity', unit, [('',i=1,nfiles)])
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_var_mod.F90

    r4374 r4669  
    2929  REAL, SAVE, ALLOCATABLE :: d_qw_col(:)      ! watter vapour mass budget for each column (kg/m2/s)
    3030  REAL, SAVE, ALLOCATABLE :: d_ql_col(:)      ! liquid watter mass budget for each column (kg/m2/s)
    31   REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! solid watter mass budget for each column (kg/m2/s)
     31  REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! cloud ice mass budget for each column (kg/m2/s)
     32  REAL, SAVE, ALLOCATABLE :: d_qbs_col(:)     ! blowing snow mass budget for each column (kg/m2/s)
    3233  REAL, SAVE, ALLOCATABLE :: d_qt_col(:)      ! total watter mass budget for each column (kg/m2/s)
    3334  REAL, SAVE, ALLOCATABLE :: d_ek_col(:)      ! kinetic energy budget for each column (W/m2)
     
    3536  REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:)    ! enthalpy budget of watter vapour for each column (W/m2)
    3637  REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:)    ! enthalpy budget of liquid watter for each column (W/m2)
    37   REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of solid watter  for each column (W/m2)
     38  REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of cloud ice  for each column (W/m2)
     39  REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:)    ! enthalpy budget of blowing snow for each column (W/m2)
    3840  REAL, SAVE, ALLOCATABLE :: d_h_col(:)       ! total enthalpy budget for each column (W/m2)
    39   !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col)
    40   !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col)
     41  !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col)
     42  !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
    4143
    4244  ! Outputs used in cloudth_vert to extract the moments of the horizontal and
     
    173175
    174176    allocate (bils_ec(klon),bils_ech(klon),bils_tke(klon),bils_diss(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon))
    175     allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) &
    176   &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_col(klon))
    177     d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0.
    178     d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_col=0.
     177    allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qbs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) &
     178  &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_qbs_col(klon), d_h_col(klon))
     179    d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qbs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0.
     180    d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_qbs_col=0. ; d_h_col=0.
    179181
    180182    ! Outputs used in cloudth_vert
     
    223225    deallocate(sza_o)
    224226    deallocate (bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent)
    225     deallocate (d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    226   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col)
     227    deallocate (d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     228  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
    227229
    228230    ! Outputs used in cloudth_vert
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/physiq_mod.F90

    r4495 r4669  
    7979    USE wxios, ONLY: g_ctx, wxios_set_context
    8080#endif
    81     USE atke_turbulence_ini_mod, ONLY : atke_ini
    82     USE lscp_ini_mod, ONLY : lscp_ini
    8381    USE lscp_mod, ONLY : lscp
    8482    USE wake_ini_mod, ONLY : wake_ini
    8583    USE yamada_ini_mod, ONLY : yamada_ini
     84    USE atke_turbulence_ini_mod, ONLY : atke_ini
    8685    USE thermcell_ini_mod, ONLY : thermcell_ini
     86    USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs
     87    USE lscp_ini_mod, ONLY : lscp_ini
    8788
    8889    !USE cmp_seri_mod
     
    183184       ! [Variables internes non sauvegardees de la physique]
    184185       ! Variables locales pour effectuer les appels en serie
    185        t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
     186       t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
    186187       ! Dynamic tendencies (diagnostics)
    187        d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
    188        d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &
     188       d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
     189       d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, &
    189190       ! Physic tendencies
    190191       d_t_con,d_q_con,d_u_con,d_v_con, &
     
    203204       plul_st,plul_th, &
    204205       !
    205        d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, &
     206       d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, &
    206207       d_t_vdf_x, d_t_vdf_w, &
    207208       d_q_vdf_x, d_q_vdf_w, &
    208209       d_ts, &
     210       !
     211       d_t_bs,d_q_bs,d_qbs_bs, &
    209212       !
    210213!       d_t_oli,d_u_oli,d_v_oli, &
     
    254257       cldh, cldl,cldm, cldq, cldt,      &
    255258       JrNt,                             &
    256        dthmin, evap, fder, plcl, plfc,   &
    257        prw, prlw, prsw,                  &
     259       dthmin, evap, snowerosion,fder, plcl, plfc,   &
     260       prw, prlw, prsw, prbsw,                  &
    258261       s_lcl, s_pblh, s_pblt, s_therm,   &
    259262       cdragm, cdragh,                   &
     
    328331       !
    329332       rneblsvol, &
     333       pfraclr,pfracld, &
     334       distcltop, &
    330335       zqsatl, zqsats, &
    331336       qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
     
    343348       fsolsw, wfbils, wfbilo,  &
    344349       wfevap, wfrain, wfsnow,  & 
    345        prfl, psfl, fraca, Vprecip,  &
     350       prfl, psfl,bsfl, fraca, Vprecip,  &
    346351       zw2,  &
    347352       !
     
    355360       beta_prec,  &
    356361       rneb,  &
    357        zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic
     362       zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic, &
     363       zxfluxt,zxfluxq
    358364
    359365
     
    526532    !======================================================================
    527533    !
    528     ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional)
    529     INTEGER,SAVE :: ivap, iliq, isol, irneb
    530 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb)
     534    ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional)
     535    INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs
     536!$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs)
    531537    !
    532538    !
     
    905911    REAL dialiq(klon,klev)  ! eau liquide nuageuse
    906912    REAL diafra(klon,klev)  ! fraction nuageuse
    907     REAL cldliq(klon,klev)  ! eau liquide nuageuse
     913    REAL radocond(klon,klev)  ! eau condensee nuageuse
    908914    !
    909915    !XXX PB
    910916    REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
    911     !
    912     REAL zxfluxt(klon, klev)
    913     REAL zxfluxq(klon, klev)
     917    REAL fluxqbs(klon,klev, nbsrf)   ! flux turbulent de neige soufflee
     918    !
     919    !FC    REAL zxfluxt(klon, klev)
     920    !FC    REAL zxfluxq(klon, klev)
     921    REAL zxfluxqbs(klon,klev)
    914922    REAL zxfluxu(klon, klev)
    915923    REAL zxfluxv(klon, klev)
     
    10091017    !
    10101018    ! tendance nulles
    1011     REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0
     1019    REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0
    10121020#ifdef ISO
    10131021    REAL, dimension(ntraciso,klon,klev):: dxt0, dxtl0, dxti0
     
    11561164    REAL ztsol(klon)
    11571165    REAL q2m(klon,nbsrf)  ! humidite a 2m
     1166    REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface
     1167    REAL qbsfra  ! blowing snow fraction
    11581168#ifdef ISO
    11591169    REAL d_xtw(ntraciso),d_xtl(ntraciso), d_xts(ntraciso)
     
    12341244    !IM 100106 BEG : pouvoir sortir les ctes de la physique
    12351245    include "conema3.h"
    1236     include "fisrtilp.h"
    12371246    include "nuage.h"
    12381247    include "compbl.h"
     
    13721381       isol = strIdx(tracers(:)%name, addPhase('H2O', 's'))
    13731382       irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r'))
     1383       ibs  = strIdx(tracers(:)%name, addPhase('H2O', 'b'))
    13741384       CALL init_etat0_limit_unstruct
    13751385       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    14211431       ENDIF
    14221432
    1423        IF (ok_ice_sursat.AND.(nqo.NE.4)) THEN
     1433       IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN
    14241434          WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', &
    14251435               '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.'
     
    14401450       ENDIF
    14411451
     1452        IF (ok_bs) THEN
     1453          abort_message='blowing snow cannot be activated with water isotopes yet'
     1454          CALL abort_physic(modname,abort_message, 1)
     1455         IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN
     1456             WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', &
     1457                               'but nqo=', nqo
     1458             abort_message='see above'
     1459             CALL abort_physic(modname,abort_message, 1)
     1460         ENDIF
     1461        ENDIF
    14421462       Ncvpaseq1 = 0
    14431463       dnwd0=0.0
     
    18901910       CALL thermcell_ini(iflag_thermals,prt_level,tau_thermals,lunout, &
    18911911   &    RG,RD,RCPD,RKAPPA,RLVTT,RETV)
    1892        IF (ok_new_lscp) then
    1893            CALL lscp_ini(pdtphys,ok_ice_sursat)
    1894        endif
     1912       CALL lscp_ini(pdtphys,ok_ice_sursat,RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)
     1913       CALL blowing_snow_ini(prt_level,lunout, &
     1914                             RCPD, RLSTT, RLVTT, RLMLT, &
     1915                             RVTMP2, RTT,RD,RG)
    18951916
    18961917!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    19191940       CALL phys_output_write(itap, pdtphys, paprs, pphis,                    &
    19201941                              pplay, lmax_th, aerosol_couple,                 &
    1921                               ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&
     1942                              ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,  ok_sync,&
    19221943                              ptconv, read_climoz, clevSTD,                   &
    19231944                              ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    24062427    dql0(:,:)=0.
    24072428    dqi0(:,:)=0.
     2429    dqbs0(:,:)=0.
    24082430#ifdef ISO
    24092431      dxt0(:,:,:)=0.
     
    24632485          q_seri(i,k)  = qx(i,k,ivap)
    24642486          ql_seri(i,k) = qx(i,k,iliq)
     2487          qbs_seri(i,k) = 0.
    24652488          !CR: ATTENTION, on rajoute la variable glace
    24662489          IF (nqo.EQ.2) THEN             !--vapour and liquid only
     
    24702493             qs_seri(i,k) = qx(i,k,isol)
    24712494             rneb_seri(i,k) = 0.
    2472           ELSE IF (nqo.EQ.4) THEN        !--vapour, liquid, ice and rneb
     2495          ELSE IF (nqo.GE.4) THEN        !--vapour, liquid, ice and rneb and blowing snow
    24732496             qs_seri(i,k) = qx(i,k,isol)
     2497             IF (ok_ice_sursat) THEN
    24742498             rneb_seri(i,k) = qx(i,k,irneb)
     2499             ENDIF
     2500             IF (ok_bs) THEN
     2501             qbs_seri(i,k)= qx(i,k,ibs)
     2502             ENDIF
     2503
    24752504          ENDIF
     2505
     2506
    24762507       ENDDO
    24772508    ENDDO
     
    25152546    qql1(:)=0.0
    25162547    DO k = 1, klev
    2517       qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
     2548      qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k)
    25182549    ENDDO
    25192550#ifdef ISO
     
    26312662       d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep
    26322663       d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep
     2664       d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep
    26332665       CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d)
    26342666       d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep
     
    26372669       CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d)
    26382670       d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep
     2671       CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d)
     2672       d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep
    26392673       ! !! RomP >>>   td dyn traceur
    26402674       IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep
     
    27232757       d_ql_dyn2d(:) = 0.0
    27242758       d_qs_dyn2d(:) = 0.0
     2759       d_qbs_dyn2d(:)= 0.0
    27252760
    27262761#ifdef ISO
     
    27462781       ! !! RomP <<<
    27472782       d_rneb_dyn(:,:)=0.0
     2783       d_qbs_dyn(:,:)=0.0
    27482784       ancien_ok = .TRUE.
    27492785    ENDIF
     
    28782914
    28792915     CALL add_phys_tend &
    2880             (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,paprs,&
     2916            (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,&
    28812917               'eva',abortphy,flag_inhib_tend,itap,0 &
    28822918#ifdef ISO
     
    30473083            longitude_deg, latitude_deg, rugoro,  zrmu0,      &
    30483084            sollwdown,    cldt,      &
    3049             rain_fall, snow_fall, solsw,   solswfdiff, sollw,     &
     3085            rain_fall, snow_fall, bs_fall, solsw,   solswfdiff, sollw,     &
    30503086            gustiness,                                &
    3051             t_seri,    q_seri,    u_seri,  v_seri,    &
     3087            t_seri,    q_seri,   qbs_seri, u_seri,  v_seri,    &
    30523088                                !nrlmd+jyg<
    30533089            wake_deltat, wake_deltaq, wake_cstar, wake_s, &
     
    30603096                                !albedo SB >>>
    30613097                                ! albsol1,   albsol2,   sens,    evap,      &
    3062             albsol_dir,   albsol_dif,   sens,    evap,  
     3098            albsol_dir,   albsol_dif,   sens,    evap, snowerosion,
    30633099                                !albedo SB <<<
    30643100            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    30653101            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
    3066             d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     3102            d_t_vdf,   d_q_vdf, d_qbs_vdf,  d_u_vdf, d_v_vdf, d_t_diss, &
    30673103                                !nrlmd<
    30683104                                !jyg<
     
    30903126            fluxt,   fluxu,  fluxv, &
    30913127            dsens,     devap,     zxsnow, &
    3092             zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke, &
     3128            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
    30933129                                !nrlmd+jyg<
    30943130            wake_delta_pbl_TKE, &
     
    32023238       IF (klon_glo==1) THEN
    32033239          CALL add_pbl_tend &
    3204                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     3240               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    32053241               'vdf',abortphy,flag_inhib_tend,itap &
    32063242#ifdef ISO
     
    32103246       ELSE
    32113247          CALL add_phys_tend &
    3212                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     3248               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    32133249               'vdf',abortphy,flag_inhib_tend,itap,0 &
    32143250#ifdef ISO
     
    32723308
    32733309    ENDIF
     3310
     3311    ! ==================================================================
     3312    ! Blowing snow sublimation and sedimentation
     3313
     3314    d_t_bs(:,:)=0.
     3315    d_q_bs(:,:)=0.
     3316    d_qbs_bs(:,:)=0.
     3317    bsfl(:,:)=0.
     3318    bs_fall(:)=0.
     3319    IF (ok_bs) THEN
     3320
     3321     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
     3322                                        d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall)
     3323
     3324     CALL add_phys_tend &
     3325               (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,&
     3326               'bs',abortphy,flag_inhib_tend,itap,0  &
     3327#ifdef ISO                                       
     3328       &    ,dxt0,dxtl0,dxti0 &                   
     3329#endif                                       
     3330       &   )
     3331
     3332    ENDIF
     3333
    32743334    ! =================================================================== c
    32753335    !   Calcul de Qsat
     
    39594019!!
    39604020!!
    3961     CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
     4021    CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, &
    39624022         'convection',abortphy,flag_inhib_tend,itap,0 &
    39634023#ifdef ISO
     
    41914251       !-----------------------------------------------------------------------
    41924252       ! ajout des tendances des poches froides
    4193        CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', &
     4253       CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', &
    41944254            abortphy,flag_inhib_tend,itap,0 &
    41954255#ifdef ISO
     
    44704530          !
    44714531          CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs,  &
    4472                              dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &
     4532                             dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &
    44734533#ifdef ISO
    44744534     &    ,d_xt_ajs,dxtl0,dxti0 &
     
    45864646          !--------------------------------------------------------------------
    45874647          ! ajout des tendances de l'ajustement sec ou des thermiques
    4588           CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
     4648          CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, &
    45894649               'ajsb',abortphy,flag_inhib_tend,itap,0 &
    45904650#ifdef ISO
     
    46274687         ptconv,ptconvth,clwcon0th, rnebcon0th,     &
    46284688         paprs,pplay,t_seri,q_seri, qtc_cv, sigt_cv, zqsat, &
    4629          pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm, &
     4689         pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm,cell_area, &
    46304690         ratqs,ratqsc,ratqs_inter)
    46314691
     
    47314791         t_seri, q_seri,ptconv,ratqs, &
    47324792         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, &
    4733          cldliq, picefra, rain_lsc, snow_lsc, &
     4793         pfraclr,pfracld, &
     4794         radocond, picefra, rain_lsc, snow_lsc, &
    47344795         frac_impa, frac_nucl, beta_prec_fisrt, &
    47354796         prfl, psfl, rhcl,  &
    47364797         zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, &
    4737          iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, &
     4798         iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, &
    47384799         qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
    47394800         Tcontr, qcontr, qcontr2, fcontrN, fcontrP )
     
    47434804    CALL fisrtilp(phys_tstep,paprs,pplay, &
    47444805         t_seri, q_seri,ptconv,ratqs, &
    4745          d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, &
     4806         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, radocond, &
    47464807         rain_lsc, snow_lsc, &
    47474808         pfrac_impa, pfrac_nucl, pfrac_1nucl, &
     
    47914852!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
    47924853!-JLD
    4793     CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs, &
     4854    CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, &
    47944855         'lsc',abortphy,flag_inhib_tend,itap,0 &
    47954856#ifdef ISO
     
    48284889    ENDIF
    48294890
    4830     !---------------------------------------------------------------------------
     4891
     4892!---------------------------------------------------------------------------
    48314893    DO k = 1, klev
    48324894       DO i = 1, klon
    48334895          cldfra(i,k) = rneb(i,k)
    48344896          !CR: a quoi ca sert? Faut-il ajouter qs_seri?
    4835           IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k)
     4897          !EV: en effet etrange, j'ajouterais aussi qs_seri
     4898          !    plus largement, je nettoierais (enleverrais) ces lignes
     4899          IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k)
    48364900       ENDDO
    48374901    ENDDO
    48384902
    48394903
    4840 
     4904    ! Option to activate the radiative effect of blowing snow (ok_rad_bs)
     4905    ! makes sense only if the new large scale condensation scheme is active
     4906    ! with the ok_icefra_lscp flag active as well
     4907
     4908    IF (ok_bs .AND. ok_rad_bs) THEN
     4909       IF (ok_new_lscp .AND. ok_icefra_lscp) THEN
     4910           DO k=1,klev
     4911             DO i=1,klon
     4912                radocond(i,k)=radocond(i,k)+qbs_seri(i,k)
     4913                picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k))
     4914                qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0)
     4915                cldfra(i,k)=max(cldfra(i,k),qbsfra)
     4916             ENDDO
     4917           ENDDO
     4918       ELSE
     4919          WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow"
     4920          WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false"
     4921          abort_message='inconsistency in cloud phase for blowing snow'
     4922          CALL abort_physic(modname,abort_message,1)
     4923       ENDIF
     4924
     4925    ENDIF
    48414926#ifdef ISO     
    48424927!#ifdef ISOVERIF
     
    50015086          DO i = 1, klon
    50025087             IF (diafra(i,k).GT.cldfra(i,k)) THEN
    5003                 cldliq(i,k) = dialiq(i,k)
     5088                radocond(i,k) = dialiq(i,k)
    50045089                cldfra(i,k) = diafra(i,k)
    50055090             ENDIF
     
    50385123                DO i=1,klon
    50395124                   IF (ptconv(i,k).AND.ptconvth(i,k)) THEN
    5040                       cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
     5125                      radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k)
    50415126                      cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
    50425127                   ELSE IF (ptconv(i,k)) THEN
    50435128                      cldfra(i,k)=rnebcon(i,k)
    5044                       cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     5129                      radocond(i,k)=rnebcon(i,k)*clwcon(i,k)
    50455130                   ENDIF
    50465131                ENDDO
     
    50515136                DO i=1,klon
    50525137                   cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
    5053                    cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
     5138                   radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k)
    50545139                ENDDO
    50555140             ENDDO
     
    50695154                   IF (ptconv(i,k).AND. .NOT.ptconvth(i,k)) THEN
    50705155                      cldfra(i,k)=rnebcon(i,k)
    5071                       cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     5156                      radocond(i,k)=rnebcon(i,k)*clwcon(i,k)
    50725157                   ENDIF
    50735158                ENDDO
     
    50805165          ! Ancienne version
    50815166          cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
    5082           cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
     5167          radocond(:,:)=radocond(:,:)+rnebcon(:,:)*clwcon(:,:)
    50835168       ENDIF
    50845169
     
    51005185          DO i = 1, klon
    51015186             IF (diafra(i,k).GT.cldfra(i,k)) THEN
    5102                 cldliq(i,k) = dialiq(i,k)
     5187                radocond(i,k) = dialiq(i,k)
    51035188                cldfra(i,k) = diafra(i,k)
    51045189             ENDIF
     
    54755560          ENDIF
    54765561          CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, &
    5477                paprs, pplay, t_seri, cldliq, picefra, cldfra, &
     5562               paprs, pplay, t_seri, radocond, picefra, cldfra, &
    54785563               cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, &
    54795564               flwp, fiwp, flwc, fiwc, &
    54805565               mass_solu_aero, mass_solu_aero_pi, &
    5481                cldtaupi, latitude_deg, re, fl, ref_liq, ref_ice, &
     5566               cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, &
    54825567               ref_liq_pi, ref_ice_pi)
    54835568       ELSE
    54845569          CALL nuage (paprs, pplay, &
    5485                t_seri, cldliq, picefra, cldfra, cldtau, cldemi, &
     5570               t_seri, radocond, picefra, cldfra, cldtau, cldemi, &
    54865571               cldh, cldl, cldm, cldt, cldq, &
    54875572               ok_aie, &
    54885573               mass_solu_aero, mass_solu_aero_pi, &
    5489                bl95_b0, bl95_b1, &
     5574               bl95_b0, bl95_b1, distcltop, &
    54905575               cldtaupi, re, fl)
    54915576       ENDIF
     
    57925877    ENDDO
    57935878
    5794     CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 &
     5879    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 &
    57955880#ifdef ISO
    57965881     &    ,dxt0,dxtl0,dxti0 &
     
    57985883     &  )
    57995884    CALL prt_enerbil('SW',itap)
    5800     CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 &
     5885    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 &
    58015886#ifdef ISO
    58025887     &    ,dxt0,dxtl0,dxti0 &
     
    58465931          ! -> condition on zrel_oro can deactivate the drag on tilted planar terrains
    58475932          !    such as ice sheets (work by V. Wiener)
    5848           ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 
     5933          ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to
    58495934          ! earn computation time but they are not physical.
    58505935          IF (((zpic(i)-zmea(i)).GT.zpmm_orodr_t).AND.(zstd(i).GT.zstd_orodr_t).AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
     
    58775962       !-----------------------------------------------------------------------
    58785963       ! ajout des tendances de la trainee de l'orographie
    5879        CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro', &
     5964       CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', &
    58805965            abortphy,flag_inhib_tend,itap,0 &
    58815966#ifdef ISO
     
    59326017
    59336018       ! ajout des tendances de la portance de l'orographie
    5934        CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &
     6019       CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, &
    59356020            'lif', abortphy,flag_inhib_tend,itap,0 &
    59366021#ifdef ISO
     
    59616046       d_t_hin(:, :)=0.
    59626047       CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, &
    5963             dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &
     6048            dqi0, dqbs0,paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &
    59646049#ifdef ISO
    59656050     &    ,dxt0,dxtl0,dxti0 &
     
    59836068       ENDDO
    59846069
    5985        CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &
     6070       CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, &
    59866071            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0 &
    59876072#ifdef ISO
     
    59966081            rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
    59976082            du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress)
    5998        CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &
     6083       CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, &
    59996084            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0 &
    60006085#ifdef ISO
     
    60556140       d_xt_ch4_dtime(:,:,:) = d_xt_ch4(:,:,:)*phys_tstep
    60566141#endif
    6057        CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &
     6142       CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, &
    60586143            'q_ch4', abortphy,flag_inhib_tend,itap,0 &
    60596144#ifdef ISO
     
    61216206! car on peut s'attendre a ce que les petites echelles produisent aussi de la TKE
    61226207! Mais attention, cela ne va pas dans le sens de la conservation de l'energie!
    6123           IF ((zstd(i).GT.1.0).AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
     6208          IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
    61246209             itest(i)=1
    61256210             igwd=igwd+1
     
    63816466    !
    63826467
    6383     IF (type_trac=='repr') THEN
     6468    IF (type_trac == 'repr') THEN
    63846469!MM pas d'impact, car on recupere q_seri,tr_seri,t_seri via phys_local_var_mod
    63856470!MM                               dans Reprobus
     
    64316516         presnivs, pphis,     pphi,     albsol1, &
    64326517         sh_in,   ch_in,    rhcl,      cldfra,   rneb, &
    6433          diafra,   cldliq,    itop_con, ibas_con, &
     6518         diafra,   radocond,    itop_con, ibas_con, &
    64346519         pmflxr,   pmflxs,    prfl,     psfl, &
    64356520         da,       phi,       mp,       upwd, &
     
    64486533
    64496534     CALL add_phys_tend &
    6450             (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,paprs,&
     6535            (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,&
    64516536             'rep',abortphy,flag_inhib_tend,itap,0)
    64526537        IF (abortphy==1) Print*,'ERROR ABORT REP'
     
    65256610    !   prlw = colonne eau liquide
    65266611    !   prlw = colonne eau solide
     6612    !   prbsw = colonne neige soufflee
    65276613    prw(:) = 0.
    65286614    prlw(:) = 0.
    65296615    prsw(:) = 0.
     6616    prbsw(:) = 0.
    65306617    DO k = 1, klev
    65316618       prw(:)  = prw(:)  + q_seri(:,k)*zmasse(:,k)
    65326619       prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k)
    65336620       prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k)
     6621       prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k)
    65346622    ENDDO
    65356623
     
    66026690          ENDIF
    66036691          !--ice_sursat: nqo=4, on ajoute rneb
    6604           IF (nqo == 4) THEN
     6692          IF (nqo.ge.4 .and. ok_ice_sursat) THEN
    66056693             d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep
    66066694          ENDIF
     6695
     6696           IF (nqo.ge.4 .and. ok_bs) THEN
     6697             d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep
     6698          ENDIF
     6699
     6700
    66076701       ENDDO
    66086702    ENDDO
     
    66846778    ql_ancien(:,:) = ql_seri(:,:)
    66856779    qs_ancien(:,:) = qs_seri(:,:)
     6780    qbs_ancien(:,:) = qbs_seri(:,:)
    66866781    rneb_ancien(:,:) = rneb_seri(:,:)
    66876782#ifdef ISO
     
    66936788    CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
    66946789    CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien)
     6790    CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien)
    66956791    ! !! RomP >>>
    66966792    IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:)
     
    68216917    CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
    68226918         pplay, lmax_th, aerosol_couple,                 &
    6823          ok_ade, ok_aie, ok_volcan, ivap, iliq, isol,    &
     6919         ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   &
    68246920         ok_sync, ptconv, read_climoz, clevSTD,          &
    68256921         ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_land_mod.F90

    r4285 r4669  
    1111       rlon, rlat, yrmu0, &
    1212       debut, lafin, zlev, ccanopy, swnet, lwnet, albedo, &
    13        tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     13       tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1414       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1515       AcoefU, AcoefV, BcoefU, BcoefV, &
     
    1717       lwdown_m, q2m, t2m, &
    1818       snow, qsol, agesno, tsoil, &
    19        z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, &   
     19       z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, fluxbs, &   
    2020       qsurf, tsurf_new, dflux_s, dflux_l, &
    2121       flux_u1, flux_v1 , &
     
    9494    REAL, DIMENSION(klon), INTENT(IN)       :: p1lay
    9595    REAL, DIMENSION(klon), INTENT(IN)       :: cdragh, cdragm
    96     REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow
     96    REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow, precip_bs
    9797    REAL, DIMENSION(klon), INTENT(IN)       :: temp_air, spechum
    9898    REAL, DIMENSION(klon), INTENT(IN)       :: AcoefH, AcoefQ, BcoefH, BcoefQ
     
    129129!albedo SB <<<
    130130    REAL, DIMENSION(klon), INTENT(OUT)       :: evap
    131     REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat
     131    REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat, fluxbs
    132132    REAL, DIMENSION(klon), INTENT(OUT)       :: qsurf
    133133    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
     
    152152    REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used
    153153    REAL, DIMENSION(klon) :: u0, v0     ! surface speed
     154    REAL, DIMENSION(klon) :: precip_totsnow     ! total solid precip
    154155    INTEGER               :: i
    155156
     
    166167#endif 
    167168
     169!****************************************************************************************
     170!Total solid precip
     171
     172IF (ok_bs) THEN
     173precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     174ELSE
     175precip_totsnow(:)=precip_snow(:)
     176ENDIF
     177!****************************************************************************************
    168178#ifdef ISO
    169179#ifdef ISOVERIF
     
    228238            zlev,  u1, v1, gustiness, temp_air, spechum, epot_air, ccanopy, &
    229239            cdragh, AcoefH, AcoefQ, BcoefH, BcoefQ, &
    230             precip_rain, precip_snow, lwdown_m, swnet, swdown, &
     240            precip_rain, precip_totsnow, lwdown_m, swnet, swdown, &
    231241            pref_tmp, q2m, t2m, &
    232             evap, fluxsens, fluxlat, &             
     242            evap, fluxsens, fluxlat,  &             
    233243            tsol_rad, tsurf_new, alb1_new, alb2_new, &
    234244            emis_new, z0m, z0h, qsurf, &
     
    277287#endif
    278288       CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,&
    279             tsurf, p1lay, cdragh, precip_rain, precip_snow, temp_air, &
     289            tsurf, p1lay, cdragh, precip_rain, precip_totsnow, temp_air, &
    280290            spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, &
    281291            u1, v1, gustiness, rugoro, swnet, lwnet, &
     
    293303    ENDIF ! ok_veget
    294304
     305        ! blowing snow not treated yet over land
     306        fluxbs(:)=0.
    295307!****************************************************************************************
    296308! Calculation for all land models
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_landice_mod.F90

    r4285 r4669  
    1212       rmu0, lwdownm, albedo, pphi1, &
    1313       swnet, lwnet, tsurf, p1lay, &
    14        cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     14       cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1515       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1616       AcoefU, AcoefV, BcoefU, BcoefV, &
     17       AcoefQBS, BcoefQBS, &
    1718       ps, u1, v1, gustiness, rugoro, pctsrf, &
    18        snow, qsurf, qsol, agesno, &
    19        tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &
     19       snow, qsurf, qsol, qbs1, agesno, &
     20       tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, &
    2021       tsurf_new, dflux_s, dflux_l, &
    2122       alt, slope, cloudf, &
     
    3435    USE cpl_mod,          ONLY : cpl_send_landice_fields
    3536    USE calcul_fluxs_mod
    36     USE phys_output_var_mod
     37    USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic
     38    USE phys_output_var_mod, ONLY : snow_o,zfra_o
    3739#ifdef ISO   
    3840    USE fonte_neige_mod,  ONLY : xtrun_off_lic
     
    4850!FC
    4951    USE ioipsl_getin_p_mod, ONLY : getin_p
    50 
     52    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs
    5153
    5254#ifdef CPP_INLANDSIS
     
    7274    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
    7375    REAL, DIMENSION(klon), INTENT(IN)             :: cdragh, cdragm
    74     REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow
     76    REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow, precip_bs
    7577    REAL, DIMENSION(klon), INTENT(IN)             :: temp_air, spechum
    7678    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefH, AcoefQ
    7779    REAL, DIMENSION(klon), INTENT(IN)             :: BcoefH, BcoefQ
    7880    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
     81    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefQBS, BcoefQBS
    7982    REAL, DIMENSION(klon), INTENT(IN)             :: ps
    80     REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness
     83    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
    8184    REAL, DIMENSION(klon), INTENT(IN)             :: rugoro
    8285    REAL, DIMENSION(klon,nbsrf), INTENT(IN)       :: pctsrf
     
    118121!albedo SB <<<
    119122    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
     123    REAL, DIMENSION(klon), INTENT(OUT)            :: fluxbs
    120124    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    121125    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
     
    179183
    180184    REAL,DIMENSION(klon) :: alb1,alb2
     185    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    181186    REAL, DIMENSION (klon,6) :: alb6
     187    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, rhod
     188    REAL                   :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc
     189    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
     190    REAL, DIMENSION(klon)  :: ws1, rhos, ustart, qsalt
    182191! End definition
    183192!****************************************************************************************
     
    214223           PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic
    215224 
    216 !  z0m=1.e-3
    217 !  z0h = z0m
    218225  firstcall=.false.
    219226  ENDIF
    220227!******************************************************************************************
    221 !
     228
    222229! Initialize output variables
    223230    alb3(:) = 999999.
    224231    alb2(:) = 999999.
    225232    alb1(:) = 999999.
    226    
     233    fluxbs(:)=0. 
    227234    runoff(:) = 0.
    228235!****************************************************************************************
     
    232239    radsol(:) = 0.0
    233240    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     241
     242!****************************************************************************************
    234243
    235244!****************************************************************************************
     
    327336
    328337
    329 
    330338    ELSE
    331339
     
    342350    IF (soil_model) THEN
    343351       CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, &
    344     & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux)
    345 
     352        & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux)
    346353       cal(1:knon) = RCPD / soilcap(1:knon)
    347354       radsol(1:knon)  = radsol(1:knon) + soilflux(1:knon)
     
    406413         flux_u1, flux_v1)
    407414
    408 !****************************************************************************************
    409 ! Calculate snow height, age, run-off,..
     415
     416!****************************************************************************************
     417! Calculate albedo
     418!
     419!****************************************************************************************
     420 
     421    CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
     422
     423
     424! EV: following lines are obsolete since we set alb1 and alb2 to constant values
     425! I therefore comment them
     426!    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
     427!         0.6 * (1.0-zfra(1:knon))
     428!
     429!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
     430!       alb1(1 : knon)  = 0.6 !IM cf FH/GK
     431!       alb1(1 : knon)  = 0.82
     432!       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
     433!       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
     434!IM: KstaTER0.77 & LMD_ARMIP6   
     435
     436! Attantion: alb1 and alb2 are not the same!
     437    alb1(1:knon)  = alb_vis_sno_lic
     438    alb2(1:knon)  = alb_nir_sno_lic
     439
     440
     441!****************************************************************************************
     442! Rugosity
     443!
     444!****************************************************************************************
     445    z0m = z0m_landice
     446    z0h = z0h_landice
     447    !z0m = SQRT(z0m**2+rugoro**2)
     448
     449
     450
     451  ! Simple blowing snow param
     452  if (ok_bs) then
     453       ustart0 = 0.211
     454       rhoice = 920.0
     455       rho0 = 200.0
     456       rhomax=450.0
     457       rhohard=400.0
     458       tau_dens0=86400.0*10.  ! 10 days by default, in s
     459       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
     460
     461       ! computation of threshold friction velocity
     462       ! which depends on surface snow density
     463       do i = 1, knon
     464           ! estimation of snow density
     465           ! snow density increases with snow age and
     466           ! increases even faster in case of sedimentation of blowing snow
     467           tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs))
     468           rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens))
     469           ! blowing snow flux formula used in MAR
     470           ws1(i)=(u1(i)**2+v1(i)**2)**0.5
     471           ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5
     472           ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax))
     473           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
     474           ! rhohard<450)
     475       enddo
     476       
     477       ! computation of qbs at the top of the saltation layer
     478       ! two formulations possible
     479       ! pay attention that qbs is a mixing ratio and has to be converted
     480       ! to specific content
     481       
     482       if (iflag_saltation_bs .eq. 1) then
     483       ! expression from CRYOWRF (Sharma et al. 2022)
     484          aa=2.6
     485          bb=2.5
     486          cc=2.0
     487          lambdasalt=0.45
     488          do i =1, knon
     489               rhod=p1lay(i)/RD/temp_air(i)
     490               nunu=max(ustar(i)/ustart(i),1.e-3)
     491               fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * &
     492                        (aa+bb*nunu**(-2)+cc*nunu**(-1)) 
     493               csalt=fluxsalt/(2.8*ustart(i))
     494               hsalt=0.08436*ustar(i)**1.27
     495               qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) &
     496                       * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6))
     497               qsalt(i)=max(qsalt(i),0.)
     498          enddo
     499
     500
     501       else
     502       ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)       
     503          do i=1, knon
     504              esalt=1./(3.25*max(ustar(i),0.001))
     505              hsalt=0.08436*ustar(i)**1.27
     506              qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
     507              !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
     508          enddo
     509       endif
     510
     511        ! calculation of erosion (emission flux towards the first atmospheric level)
     512        ! consistent with implicit resolution of turbulent mixing equation
     513       do i=1, knon
     514              rhod=p1lay(i)/RD/temp_air(i)
     515              fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) &
     516                       / (1.-rhod*ws1(i)*zeta_bs*cdragm(i)*BcoefQBS(i)*dtime)
     517              !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i))
     518       enddo
     519
     520       ! for outputs
     521       do j = 1, knon
     522          i = knindex(j)
     523          zxustartlic(i) = ustart(j)
     524          zxrhoslic(i) = rhos(j)
     525       enddo
     526
     527  endif
     528
     529
     530
     531!****************************************************************************************
     532! Calculate surface snow amount
    410533!   
    411534!****************************************************************************************
     535    IF (ok_bs) THEN
     536      precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     537      evap_totsnow(:)=evap(:)-fluxbs(:) ! flux bs is positive towards the surface (snow erosion)
     538    ELSE
     539      precip_totsnow(:)=precip_snow(:)
     540      evap_totsnow(:)=evap(:)
     541    ENDIF
     542
    412543    CALL fonte_neige(knon, is_lic, knindex, dtime, &
    413          tsurf, precip_rain, precip_snow, &
    414          snow, qsol, tsurf_new, evap &
     544         tsurf, precip_rain, precip_totsnow, &
     545         snow, qsol, tsurf_new, evap_totsnow &
    415546#ifdef ISO   
    416547     & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag   &
     
    446577
    447578
    448 !****************************************************************************************
    449 ! Calculate albedo
    450 !
    451 !****************************************************************************************
    452     CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
    453 
    454     WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.
    455     zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0)))
    456     alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
    457          0.6 * (1.0-zfra(1:knon))
    458 !
    459 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
    460 !       alb1(1 : knon)  = 0.6 !IM cf FH/GK
    461 !       alb1(1 : knon)  = 0.82
    462 !       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
    463 !       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
    464 !IM: KstaTER0.77 & LMD_ARMIP6   
    465 
    466 ! Attantion: alb1 and alb2 are not the same!
    467     alb1(1:knon)  = alb_vis_sno_lic
    468     alb2(1:knon)  = alb_nir_sno_lic
    469 
    470 
    471 !****************************************************************************************
    472 ! Rugosity
    473 !
    474 !****************************************************************************************
    475     z0m=1.e-3
    476     z0h = z0m
    477     z0m = SQRT(z0m**2+rugoro**2)
    478 
     579    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.                                         
     580    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 
    479581
    480582
     
    494596          run_off_lic_frac(j) = pctsrf(i,is_lic)
    495597       ENDDO
    496        
     598
    497599       CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic, run_off_lic_frac)
    498600    ENDIF
     
    501603    runoff(1:knon)=run_off_lic(1:knon)/dtime
    502604
    503  
    504 !****************************************************************************************
    505 ! Etienne: comment these lines because of duplication just below
    506 !       snow_o=0.
    507 !       zfra_o = 0.
    508 !       DO j = 1, knon
    509 !           i = knindex(j)
    510 !           snow_o(i) = snow(j)
    511 !           zfra_o(i) = zfra(j)
    512 !       ENDDO
    513 !
    514 !****************************************************************************************
    515605       snow_o=0.
    516606       zfra_o = 0.
     
    553643!albedo SB <<<
    554644
    555  
    556  
    557645
    558646  END SUBROUTINE surf_landice
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_ocean_mod.F90

    r4374 r4669  
    1313       windsp, rmu0, fder, tsurf_in, &
    1414       itime, dtime, jour, knon, knindex, &
    15        p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     15       p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1616       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1717       AcoefU, AcoefV, BcoefU, BcoefV, &
     
    7272    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh
    7373    REAL, DIMENSION(klon), INTENT(IN)        :: cdragm
    74     REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
     74    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow, precip_bs
    7575    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
    7676    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
     
    169169    REAL, DIMENSION(klon) :: radsol
    170170    REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation
     171    REAL, DIMENSION(klon) :: precip_totsnow
    171172    CHARACTER(len=20),PARAMETER :: modname="surf_ocean"
    172173    real rhoa(knon) ! density of moist air  (kg / m3)
     
    200201    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
    201202
     203
     204    !****************************************************************************************
     205    !Total solid precip
     206
     207    IF (ok_bs) THEN
     208       precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     209    ELSE
     210       precip_totsnow(:)=precip_snow(:)
     211    ENDIF
     212
    202213    !******************************************************************************
    203214    ! Cdragq computed from cdrag
     
    227238            windsp, fder, &
    228239            itime, dtime, knon, knindex, &
    229             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow,temp_air,spechum,&
     240            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow,temp_air,spechum,&
    230241            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    231242            AcoefU, AcoefV, BcoefU, BcoefV, &
     
    239250       CALL ocean_slab_noice( &
    240251            itime, dtime, jour, knon, knindex, &
    241             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum,&
     252            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, temp_air, spechum,&
    242253            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    243254            AcoefU, AcoefV, BcoefU, BcoefV, &
     
    250261       CALL ocean_forced_noice( &
    251262            itime, dtime, jour, knon, knindex, &
    252             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, &
     263            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, &
    253264            temp_air, spechum, &
    254265            AcoefH, AcoefQ, BcoefH, BcoefQ, &
     
    370381       call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, &
    371382            u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), &
    372             rain = precip_rain(:knon) + precip_snow(:knon), &
     383            rain = precip_rain(:knon) + precip_totsnow(:knon), &
    373384            hf = - fluxsens(:knon), hlb = - fluxlat(:knon), &
    374385            rnl = - lwnet(:knon), &
  • LMDZ6/branches/LMDZ_cdrag_LSCE/makelmdz

    r4489 r4669  
    1717couple=false
    1818veget=false
     19inlandsis=false
     20rrtm=false
     21rad="oldrad"
     22dust=false
     23strataer=false
    1924chimie=false
    2025parallel=none
     
    2732cosp2=false
    2833cospv2=false
    29 inlandsis=false
    30 rrtm=false
    31 rad=""
    32 dust=false
    33 strataer=false
     34
    3435full=""
    3536
     
    110111[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
    111112[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug
    112 [-c false/MPI1/MPI2]       : coupling with ocean model : MPI1/MPI2/false (default: false)
     113[-c false/MPI1/OMCT]       : coupling with ocean model : MPI1/OMCT/false (default: false)
    113114[-v false/orchideetrunk/orchidee2.1/orchidee2.0/orchidee1.9] : version of the vegetation model to include (default: false)
    114115          false       : no vegetation model
    115116          orchideetrunk : compile using ORCHIDEE trunk from revision 7757 or higher
    116117          orchidee2.1 : compile using ORCHIDEE 2.1 until 4.1 included or until revision 7757 on the trunk
    117           orchidee2.0 : compile using ORCHIDEE 2.0 (or more recent version)
     118          orchidee2.0 : compile using ORCHIDEE 2.0
    118119          orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
    119120          true        : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
     
    125126[-rrtm true/false]    : compile with/without rrtm package (default: false)
    126127[-rad oldrad/rrtm/ecrad]    : compile with oldrad/rrtm/ecrad radiatif code (default: oldrad)
    127 [-dust true/false]    : compile with/without the dust package from Boucher et al. (default: false)
    128 [-strataer true/false]    : compile with/without the strat aer package from Boucher et al. (default: false)
     128[-dust true/false]    : compile with/without the dust package by Boucher and co (default: false)
     129[-strataer true/false]    : compile with/without the strat aer package by Boucher and co (default: false)
    129130[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
    130131[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
     
    135136[-mem]                     : reduced memory dynamics (obsolete flag; always on in parallel mode)
    136137[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
    137 [-full]                    : Full (re)compilation (from scratch)
    138138[-link LINKS]              : additional links with other libraries
     139[-full]                    : full recompiling
    139140[-fcm_path path]           : path to the fcm tool (default: tools/fcm/bin)
    140141[-ext_src path]            : path to an additional set of routines to compile with the model
     
    171172          veget="$2" ; shift ; shift ;;
    172173
    173       "-chimie")
    174           chimie="$2" ; shift ; shift ;;
    175 
    176       "-parallel")
    177           parallel="$2" ; shift ; shift ;;
    178      
    179       "-include")
    180           INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
    181 
    182       "-cpp")
    183           CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
    184 
    185       "-cosp")
    186           cosp="$2" ; shift ; shift ;;
    187 
    188       "-cosp2")
    189           cosp2="$2" ; shift ; shift ;;
    190 
    191       "-cosp2")
    192           cospv2="$2" ; shift ; shift ;;
    193      
    194174      "-inlandsis")
    195175          inlandsis="$2" ; shift ; shift ;; 
     
    207187          strataer="$2" ; shift ; shift ;;
    208188     
     189      "-chimie")
     190          chimie="$2" ; shift ; shift ;;
     191
     192      "-parallel")
     193          parallel="$2" ; shift ; shift ;;
     194     
     195      "-include")
     196          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
     197
     198      "-cpp")
     199          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
     200
     201      "-cosp")
     202          cosp="$2" ; shift ; shift ;;
     203
     204      "-cosp2")
     205          cosp2="$2" ; shift ; shift ;;
     206
     207      "-cospv2")
     208          cospv2="$2" ; shift ; shift ;;
     209     
    209210      "-mem")
    210211          echo "option -mem is obsolete (now always on in parallel)"
     
    214215          filtre=$2 ; shift ; shift ;;
    215216
     217      "-link")
     218          LIB="$LIB $2" ; shift ; shift ;;
     219
     220      "-fcm_path")
     221          fcm_path=$2 ; shift ; shift ;;
     222
     223      "-ext_src")
     224          EXT_SRC=$2 ; src_dirs="$src_dirs $EXT_SRC" ; shift ; shift ;;
     225
    216226      "-full")
    217227      full="full" ; shift ;;
    218 
    219       "-link")
    220           LIB="$LIB $2" ; shift ; shift ;;
    221 
    222       "-fcm_path")
    223           fcm_path=$2 ; shift ; shift ;;
    224 
    225       "-ext_src")
    226           EXT_SRC=$2 ; src_dirs="$src_dirs $EXT_SRC" ; shift ; shift ;;
    227228
    228229      "-arch")
     
    364365   lib_phy='-lphy'"$physique"' -lphy_common'
    365366   CPP_KEY="$CPP_KEY CPP_PHYS"
    366    if [[ $phys_root == "lmd" ]]
    367       then
    368       #For lmd physics, default planet type is Earth
    369       CPP_KEY="$CPP_KEY CPP_EARTH"
     367   if [[ "${phys_root}" == "lmd" ]]
     368   then
     369   #For lmd physics, default planet type is Earth
     370   CPP_KEY="$CPP_KEY CPP_EARTH"
    370371   fi
    371372fi
     
    475476fi
    476477
     478if [[ "$inlandsis" == "true" ]]
     479then
     480   CPP_KEY="$CPP_KEY CPP_INLANDSIS"
     481   src_dirs="$src_dirs phy${physique}/inlandsis"
     482fi
     483
     484
     485if [[ "$rad" == "rrtm" ]]
     486then
     487   CPP_KEY="$CPP_KEY CPP_RRTM"
     488   src_dirs="$src_dirs phy${physique}/rrtm"
     489fi
     490if [[ "$rad" == "ecrad" ]]
     491then
     492   CPP_KEY="$CPP_KEY CPP_ECRAD"
     493   src_dirs="$src_dirs phy${physique}/ecrad"
     494fi
     495
     496if [[ "$dust" == "true" ]]
     497then
     498   CPP_KEY="$CPP_KEY CPP_Dust"
     499   src_dirs="$src_dirs phy${physique}/Dust"
     500fi
     501
     502if [[ "$strataer" == "true" ]]
     503then
     504   CPP_KEY="$CPP_KEY CPP_StratAer"
     505   src_dirs="$src_dirs phy${physique}/StratAer"
     506fi
     507
    477508#===============================================================================
    478509INCLUDE="$INCLUDE ${NETCDF95_INCDIR}"
     
    524555
    525556
    526 if [[ "$inlandsis" == "true" ]]
    527 then
    528    CPP_KEY="$CPP_KEY CPP_INLANDSIS"
    529    src_dirs="$src_dirs phy${physique}/inlandsis"
    530 fi
    531 
    532 
    533 if [[ "$rad" == "rrtm" ]]
    534 then
    535    CPP_KEY="$CPP_KEY CPP_RRTM"
    536    src_dirs="$src_dirs phy${physique}/rrtm"
    537 fi
    538 if [[ "$rad" == "ecrad" ]]
    539 then
    540    CPP_KEY="$CPP_KEY CPP_ECRAD"
    541    src_dirs="$src_dirs phy${physique}/ecrad"
    542 fi
    543 
    544 if [[ "$dust" == "true" ]]
    545 then
    546    CPP_KEY="$CPP_KEY CPP_Dust"
    547    src_dirs="$src_dirs phy${physique}/Dust"
    548 fi
    549 
    550 if [[ "$strataer" == "true" ]]
    551 then
    552    CPP_KEY="$CPP_KEY CPP_StratAer"
    553    src_dirs="$src_dirs phy${physique}/StratAer"
    554 fi
    555557
    556558#add new ocean skin modelisation to source dir by default
     
    804806# Execution du make
    805807#################################################################
    806 echo $makecommand RANLIB=$ranlib -f $LMDGCM/makefile \
    807 OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \
    808 OPTIM90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
    809 OPTIMTRU90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
    810 OPTIM="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
    811 INCLUDE="$INCLUDE" \
    812 $filtre \
    813 LIBO=${LIBOGCM}/${nomlib} \
    814 "PHYS=$physique" \
    815 LIBPHY=${LIBPHY} \
    816 LIBPHY_COMMON=${LIBPHY_COMMON} \
    817 LIBDYN_PHYS=${LIBDYN_PHYS} \
    818 DIM=$dimc \
    819 FLAG_PARA=$FLAG_PARA \
    820 L_PHY="$lib_phy" \
    821 L_DYN_PHY="$libdyn_phy" \
    822 L_ADJNT=$adjnt \
    823 L_COSP="$lcosp" \
    824 L_COSP2="$lcosp2" \
    825 L_COSPV2="$lcospv2" \
    826 L_CHIMIE="$libchimie" \
    827 LOCAL_DIR="$localdir"  \
    828 F77="$fcompiler" \
    829 F90="$fcompiler" \
    830 OPLINK="$LIB" \
    831 LINK="$linker" \
    832 GCM="$LMDGCM" \
    833 MOD_LOC_DIR=$mod_loc_dir \
    834 MOD_SUFFIX="mod" \
    835 AR=$arcommand \
    836 ARFLAGS="$arflags" \
    837 DIRMAIN=$dirmain \
    838 SOURCE=$source_code \
    839 PROG=$code
    840 
     808set -v
    841809$makecommand RANLIB=$ranlib -f $LMDGCM/makefile \
    842810OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \
     
    874842PROG=$code
    875843
     844set +v
    876845
    877846if [[ -r $LIBFGCM/grid/dimensions.h ]]
Note: See TracChangeset for help on using the changeset viewer.