Ignore:
Timestamp:
Mar 30, 2023, 9:07:40 AM (20 months ago)
Author:
evignon
Message:

premier commit pour l'ajout de la neige soufflee sur la nouvelle branche

Location:
LMDZ6/branches/blowing_snow
Files:
8 added
23 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/blowing_snow/DefLists/field_def_lmdz.xml

    r4412 r4485  
    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>
     
    616624        <field id="dqphy"    long_name="Physics dQ"    unit="(kg/kg)/s" />
    617625        <field id="dqlphy"   long_name="Physics dQL"    unit="(kg/kg)/s" />
    618         <field id="dqsphy"   long_name="Physics dQS"    unit="(kg/kg)/s" />
     626        <field id="dqsphy"   long_name="Physics dQS"    unit="(kg/kg)/s" />
     627        <field id="dqbsphy"   long_name="Physics dQBS"    unit="(kg/kg)/s" />
    619628        <field id="pr_con_l"    long_name="Convective precipitation lic"    unit="-" />
    620629        <field id="pr_con_i"    long_name="Convective precipitation ice"    unit="-" />
    621630        <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="-" />
     631        <field id="pr_lsc_i"    long_name="Large scale precipitation ice"    unit="-" />
     632        <field id="pr_bs"    long_name="precipitation blowing snow"    unit="-" />
    623633        <field id="re"    long_name="Cloud droplet effective radius"    unit="um" />
    624634        <field id="fl"    long_name="Denominator of Cloud droplet effective radius"    unit="-" />
     
    643653        <field id="dqldyn"    long_name="Dynamics dQL"    unit="(kg/kg)/s" />
    644654        <field id="dqsdyn"    long_name="Dynamics dQS"    unit="(kg/kg)/s" />
    645         <field id="dudyn"    long_name="Dynamics dU"    unit="m/s2" />
     655        <field id="dqbsdyn"    long_name="Dynamics dQBS"    unit="(kg/kg)/s" />       
     656        <field id="dudyn"    long_name="Dynamics dU"    unit="m/s2" />
    646657        <field id="dvdyn"    long_name="Dynamics dV"    unit="m/s2" />
    647658        <field id="dtcon"    long_name="Convection dT"    unit="K/s" />
     
    673684        <field id="dqvdf_w" long_name="dqvdf within_wake" unit="(kg/kg)/s" />
    674685        <field id="dteva"    long_name="Reevaporation dT"    unit="K/s" />
    675         <field id="dqeva"    long_name="Reevaporation dQ"    unit="(kg/kg)/s" />
     686        <field id="dqeva"    long_name="Reevaporation dQ"    unit="(kg/kg)/s" />
     687        <field id="dqbsvdf"    long_name="Boundary-layer dQBS"    unit="(kg/kg)/s" />
     688        <field id="dqbsbs"    long_name="Blowing snow dQBS"    unit="(kg/kg)/s" />
     689        <field id="dqbs"    long_name="Blowing snow dQ"    unit="(kg/kg)/s" />
     690        <field id="dtbs"    long_name="Blowing snow dT"    unit="(K)/s" />
    676691        <field id="dqlscth"    long_name="dQ therm."    unit="(kg/kg)/s" />
    677692        <field id="dqlscst"    long_name="dQ strat."    unit="(kg/kg)/s" />
  • LMDZ6/branches/blowing_snow/DefLists/file_def_histhf_lmdz.xml

    r4298 r4485  
    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/blowing_snow/libf/dyn3d_common/infotrac.F90

    r4433 r4485  
    3737!  |--------------------+-----------------------+-----------------+---------------+----------------------------|
    3838!  | water in different |    water tagging      |  water isotopes | other tracers | additional tracers moments |
    39 !  | phases: H2O_[gls] |      isotopes         |                 |               |  for higher order schemes  |
     39!  | phases: H2O_[glsb] |      isotopes         |                 |               |  for higher order schemes  |
    4040!  |--------------------+-----------------------+-----------------+---------------+----------------------------|
    4141!  |                    |                       |                 |               |                            |
     
    6666!  | longName    | Long name (with adv. scheme suffix) for outputs      | ttext       |                        |
    6767!  | type        | Type (so far: tracer or tag)                         | /           | tracer,tag             |
    68 !  | phase       | Phases list ("g"as / "l"iquid / "s"olid)             | /           | [g][l][s]              |
     68!  | phase       | Phases list ("g"as / "l"iquid / "s"olid / "b"lowing) | /           | [g][l][s][b]           |
    6969!  | component   | Name(s) of the merged/cumulated section(s)           | /           | coma-separated names   |
    7070!  | iGeneration | Generation (>=1)                                     | /           |                        |
     
    9292!  | trac   | ntiso  | Isotopes + tagging tracers list + number         | / | ntraciso       |                 |
    9393!  | zone   | nzone  | Geographic tagging zones   list + number         | / | ntraceurs_zone |                 |
    94 !  | phase  | nphas  | Phases                     list + number         |                    | [g][l][s], 1:3 |
     94!  | phase  | nphas  | Phases                     list + number         |                    |[g][l][s][b],1:4 |
    9595!  | iqIsoPha        | Index in "qx"           = f(name(1:ntiso)),phas) | iqiso              | 1:nqtot         |
    9696!  | 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/blowing_snow/libf/misc/readTracFiles_mod.f90

    r4454 r4485  
    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/blowing_snow/libf/phylmd/add_phys_tend_mod.F90

    r3435 r4485  
    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/blowing_snow/libf/phylmd/clesphys.h

    r4458 r4485  
    100100       LOGICAL :: ok_daily_climoz
    101101       LOGICAL :: ok_new_lscp
     102       LOGICAL :: ok_bs, ok_rad_bs
    102103! flag to bypass or not the phytrac module
    103104       INTEGER :: iflag_phytrac
     
    150151     &     , ok_chlorophyll,ok_conserv_q, adjust_tropopause             &
    151152     &     , ok_daily_climoz, ok_all_xml, ok_lwoff                      &
    152      &     , iflag_phytrac, ok_new_lscp                                 &
     153     &     , iflag_phytrac, ok_new_lscp, ok_bs, ok_rad_bs               &
    153154     &     ,  iflag_thermals,nsplit_thermals, tau_thermals   
    154155       save /clesphys/
  • LMDZ6/branches/blowing_snow/libf/phylmd/conf_phys_m.F90

    r4466 r4485  
    255255    LOGICAL, SAVE :: ok_new_lscp_omp
    256256    LOGICAL, SAVE :: ok_icefra_lscp_omp
     257    LOGICAL, SAVE :: ok_bs_omp, ok_rad_bs_omp
    257258
    258259
     
    23592360    !Config Help = ...
    23602361
     2362
     2363
     2364    ok_bs_omp = .FALSE.
     2365    CALL getin('ok_bs', ok_bs_omp)
     2366    !
     2367    !Config Key  = ok_bs_omp
     2368    !Config Desc = include blowing snow
     2369    !Config Def  = .FALSE.
     2370    !Config Help = ...
     2371
     2372
     2373    ok_rad_bs_omp = .FALSE.
     2374    CALL getin('ok_rad_bs', ok_rad_bs_omp)
     2375    !
     2376    !Config Key  = ok_rad_bs_omp
     2377    !Config Desc = include blowing snow radiative effect
     2378    !Config Def  = .FALSE.
     2379    !Config Help = ...
    23612380
    23622381    ecrit_LES_omp = 1./8.
     
    24732492    inertie_lic = inertie_lic_omp
    24742493    inertie_sno = inertie_sno_omp
     2494    ok_bs = ok_bs_omp
     2495    ok_rad_bs=ok_rad_bs_omp
    24752496    rad_froid = rad_froid_omp
    24762497    rad_chau1 = rad_chau1_omp
     
    29823003    WRITE(lunout,*) ' inertie_lic = ', inertie_lic
    29833004    WRITE(lunout,*) ' inertie_sno = ', inertie_sno
     3005    WRITE(lunout,*) ' ok_bs = ', ok_bs
     3006    WRITE(lunout,*) ' ok_rad_bs = ', ok_rad_bs
    29843007    WRITE(lunout,*) ' f_cdrag_ter = ',f_cdrag_ter
    29853008    WRITE(lunout,*) ' f_cdrag_oce = ',f_cdrag_oce
  • LMDZ6/branches/blowing_snow/libf/phylmd/fonte_neige_mod.F90

    r3900 r4485  
    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/blowing_snow/libf/phylmd/infotrac_phy.F90

    r4432 r4485  
    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)                                     | /           |                        |
     
    9292!  | trac   | ntiso  | Isotopes + tagging tracers list + number         | / | ntraciso       |                 |
    9393!  | zone   | nzone  | Geographic tagging zones   list + number         | / | ntraceurs_zone |                 |
    94 !  | phase  | nphas  | Phases                     list + number         |                    | [g][l][s], 1:3 |
     94!  | phase  | nphas  | Phases                     list + number         |                    |[g][l][s][b] 1:4 |
    9595!  | iqIsoPha        | Index in "qx"           = f(name(1:ntiso)),phas) | iqiso              | 1:nqtot         |
    9696!  | itZonIso        | Index in "trac(1:ntiso)"= f(zone, name(1:niso))  | index_trac         | 1:ntiso         |
  • LMDZ6/branches/blowing_snow/libf/phylmd/ocean_forced_mod.F90

    r3974 r4485  
    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/blowing_snow/libf/phylmd/pbl_surface_mod.F90

    r4478 r4485  
    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
     
    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(IN)        :: 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
     
    862877    REAL, DIMENSION(klon,nbsrf)        :: zx_t1
    863878    REAL, DIMENSION(klon, nbsrf)       :: alb          ! mean albedo for whole SW interval
     879    REAL, DIMENSION(klon,nbsrf)        :: snowerosion   
    864880    REAL, DIMENSION(klon)              :: ylwdown      ! jg : temporary (ysollwdown)
    865881    REAL, DIMENSION(klon)              :: ygustiness      ! jg : temporary (ysollwdown)
     
    980996  alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0.
    981997!albedo SB <<<
    982  zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0.
     998 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0.
    983999 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0.
    9841000 zxfluxlat(:)=0.
    9851001 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0.
    9861002 zn2mout(:,:)=0 ;
    987  d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
     1003 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
    9881004 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0.
    9891005 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0.
     
    10051021 d_ts(:,:)=0.
    10061022 evap(:,:)=0.
     1023 snowerosion(:,:)=0.
    10071024 fluxlat(:,:)=0.
    10081025 wfbils(:,:)=0. ; wfbilo(:,:)=0.
    10091026 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0.
    10101027 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0.
     1028 flux_qbs(:,:,:)=0.
    10111029 dflux_t(:)=0. ; dflux_q(:)=0.
    10121030 zxsnow(:)=0.
    1013  zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.
     1031 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0.
    10141032 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0.
    10151033 runoff(:)=0.
     
    10481066    yqsurf = 0.0  ; yalb = 0.0 ; yalb_vis = 0.0
    10491067!albedo SB <<<
    1050     yrain_f = 0.0 ; ysnow_f = 0.0    ; yfder = 0.0     ; ysolsw = 0.0
     1068    yrain_f = 0.0 ; ysnow_f = 0.0  ; ybs_f=0.0  ; yfder = 0.0     ; ysolsw = 0.0
    10511069    ysollw = 0.0  ; yz0m = 0.0 ; yz0h = 0.0    ; yu1 = 0.0   
    1052     yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0
     1070    yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0     ; yqbs1 = 0.0
    10531071    ydelp = 0.0   ; yu = 0.0         ; yv = 0.0        ; yt = 0.0         
    10541072    yq = 0.0      ; y_dflux_t = 0.0  ; y_dflux_q = 0.0
     1073    yqbs(:,:)=0.0 
    10551074    yrugoro = 0.0 ; ywindsp = 0.0   
    10561075!!    d_ts = 0.0    ; yfluxlat=0.0     ; flux_t = 0.0    ; flux_q = 0.0     
    1057     yfluxlat=0.0
     1076    yfluxlat=0.0 ; y_flux0(:)=0.0
    10581077!!    flux_u = 0.0  ; flux_v = 0.0     ; d_t = 0.0       ; d_q = 0.0     
    10591078!!    d_t_diss= 0.0 ;d_u = 0.0     ; d_v = 0.0
     
    10701089    ycldt = 0.0      ; yrmu0 = 0.0
    10711090    ! Martin
     1091    y_d_qbs(:,:)=0.0
    10721092
    10731093!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    13951415          yrain_f(j) = rain_f(i)
    13961416          ysnow_f(j) = snow_f(i)
     1417          ybs_f(j)   = bs_f(i)
    13971418          yagesno(j) = agesno(i,nsrf)
    13981419          yfder(j)   = fder(i)
     
    14061427          yu1(j)     = u(i,1)
    14071428          yv1(j)     = v(i,1)
     1429          yqbs1(j)   = qbs(i,1)
    14081430          ypaprs(j,klev+1) = paprs(i,klev+1)
    14091431!jyg<
     
    14191441!!! nrlmd le 13/06/2011
    14201442          y_delta_tsurf(j)=delta_tsurf(i,nsrf)
    1421 !!!
     1443          yfluxbs(j)=0.0
     1444          y_flux_bs(j) = 0.0
    14221445       ENDDO
    14231446! >> PC
     
    14581481             yt(j,k) = t(i,k)
    14591482             yq(j,k) = q(i,k)
     1483             yqbs(j,k)=qbs(i,k)
    14601484          ENDDO
    14611485        ENDDO
     
    18801904       ENDIF  ! (iflag_split .eq.0)
    18811905!!!
     1906
     1907 ! For blowing snow:
     1908    IF (ok_bs) THEN
     1909     ! following Bintanja et al 2000, part II
     1910     ! we assume that the eddy diffuvisity coefficient for
     1911     ! suspended particles is larger than Km by a factor zeta_bs
     1912     ! which is equal to 3 by default
     1913     ycoefqbs=ycoefm*zeta_bs
     1914     CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, &
     1915     ydelp, yt, yqbs, dtime, &
     1916     CcoefQBS, DcoefQBS, &
     1917     Kcoef_qbs, gama_qbs, &
     1918     AcoefQBS, BcoefQBS)
     1919    ENDIF
    18821920
    18831921!****************************************************************************************
     
    20572095               debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, &
    20582096!!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,&
     2097               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    20602098               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    20612099               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    20632101               ylwdown, yq2m, yt2m, &
    20642102               ysnow, yqsol, yagesno, ytsoil, &
    2065                yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
     2103               yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,&
    20662104               yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, &
    20672105               y_flux_u1, y_flux_v1, &
     
    21062144                  yrmu0, ylwdown, yalb, zgeo1, &
    21072145                  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,&
     2146                  ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    21102147                  AcoefH, AcoefQ, BcoefH, BcoefQ, &
    21112148                  AcoefU, AcoefV, BcoefU, BcoefV, &
    21122149                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2113                   ysnow, yqsurf, yqsol, yagesno, &
     2150                  ysnow, yqsurf, yqsol,yqbs1, yagesno, &
    21142151                  ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, &
    2115                   ytsurf_new, y_dflux_t, y_dflux_q, &
     2152                  yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, &
    21162153                  yzmea, yzsig, ycldt, &
    21172154                  ysnowhgt, yqsnow, ytoice, ysissnow, &
     
    21472184               itap, dtime, jour, knon, ni, &
    21482185!!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
     2186               ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),&    ! ym missing init
    21502187               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    21512188               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    22772314          ENDDO
    22782315        ENDIF ! (ok_flux_surf)
     2316
     2317        ! flux of blowing snow at the first level
     2318        IF (ok_bs) THEN
     2319        DO j=1,knon
     2320        y_flux_bs(j)=yfluxbs(j)
     2321        ENDDO
     2322        ENDIF
    22792323!
    22802324! ------------------------------------------------------------------------------
     
    25832627!
    25842628       ENDIF  ! (iflag_split .eq.0)
     2629
     2630       IF (ok_bs) THEN
     2631            CALL climb_qbs_up(knon, dtime, yqbs, &
     2632            y_flux_bs, ypaprs, ypplay, &
     2633            AcoefQBS, BcoefQBS, &
     2634            CcoefQBS, DcoefQBS, &
     2635            Kcoef_qbs, gama_qbs, &
     2636            y_flux_qbs(:,:), y_d_qbs(:,:))
     2637       ENDIF
     2638
    25852639!!!
    25862640!!
     
    26962750!!!
    26972751
    2698 !      print*,'Dans pbl OK1'
    2699 
    2700 !jyg<
    2701 !!       evap(:,nsrf) = - flux_q(:,1,nsrf)
    2702 !>jyg
     2752       ! tendencies of blowing snow
     2753       IF (ok_bs) THEN
     2754           DO k = 1, klev   
     2755            DO j = 1, knon
     2756                i = ni(j)
     2757                y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j)
     2758                flux_qbs(i,k,nsrf) = y_flux_qbs(j,k)
     2759            ENDDO
     2760          ENDDO
     2761       ENDIF
     2762
     2763
    27032764       DO j = 1, knon
    27042765          i = ni(j)
    27052766          evap(i,nsrf) = - flux_q(i,1,nsrf)                  !jyg
     2767          if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif
    27062768          beta(i,nsrf) = ybeta(j)                             !jyg
    27072769          d_ts(i,nsrf) = y_d_ts(j)
     
    28732935          ENDDO
    28742936       ENDDO
     2937
     2938
     2939       IF (ok_bs) THEN
     2940         DO k = 1, klev
     2941         DO j = 1, knon
     2942         i = ni(j)
     2943         d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k)
     2944         ENDDO
     2945         ENDDO
     2946        ENDIF
    28752947
    28762948!      print*,'Dans pbl OK4'
     
    33273399       fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i)
    33283400    ENDDO
     3401
     3402    ! if blowing snow
     3403    if (ok_bs) then 
     3404       DO nsrf = 1, nbsrf
     3405       DO k = 1, klev
     3406       DO i = 1, klon
     3407         zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf)
     3408       ENDDO
     3409       ENDDO
     3410       ENDDO
     3411
     3412       DO i = 1, klon
     3413        zxsnowerosion(i)     = zxfluxqbs(i,1) ! blowings snow flux at the surface
     3414       END DO
     3415    endif
     3416
    33293417!!!
    33303418
  • LMDZ6/branches/blowing_snow/libf/phylmd/phyaqua_mod.F90

    r4463 r4485  
    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/blowing_snow/libf/phylmd/phyredem.F90

    r4389 r4485  
    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,    &
     
    243243
    244244    CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien)
     245
     246    IF (ok_bs) THEN
     247       CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall)
     248       CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien)
     249       CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien)
     250    ENDIF
    245251
    246252    CALL put_field(pass,"RNEBANCIEN", "RNEBANCIEN", rneb_ancien)
  • LMDZ6/branches/blowing_snow/libf/phylmd/phys_local_var_mod.F90

    r4118 r4485  
    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(:,:)
     
    307311      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt
    308312!$OMP THREADPRIVATE(JrNt)
    309       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw
    310 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)
     313      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw
     314!$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw)
    311315      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m
    312316!$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m)
     
    325329      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte
    326330!$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte)
     331      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic
     332!$OMP THREADPRIVATE(zxustartlic, zxrhoslic)
    327333      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving
    328334!$OMP THREADPRIVATE(zxfqcalving)
     
    446452      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi
    447453!$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi)
    448       REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca
    449 !$OMP THREADPRIVATE(prfl, psfl, fraca)
     454      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl
     455!$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl)
    450456      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2
    451457!$OMP THREADPRIVATE(Vprecip, zw2)
     
    603609
    604610IMPLICIT NONE
    605       ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev))
     611      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    606612      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    607613      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     
    610616      ALLOCATE(tr_seri(klon,klev,nbtr))
    611617      ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
    612       ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev))
    613       ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon))
     618      ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev))
     619      ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon))
    614620      ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
    615621      ALLOCATE(d_tr_dyn(klon,klev,nbtr))                   !RomP
     
    634640      ALLOCATE(plul_st(klon),plul_th(klon))
    635641      ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev))
    636 
     642      ALLOCATE (d_qbs_vdf(klon,klev))
     643      ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev))
    637644      ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev))
    638645      ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev))
     
    760767      ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon))
    761768      ALLOCATE(JrNt(klon))
    762       ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))
    763       ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
     769      ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon))
     770      ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
    764771      ALLOCATE(s_lcl(klon))
    765772      ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon))
     
    776783      ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon))
    777784      ALLOCATE(zxrunofflic(klon))
     785      ALLOCATE(zxustartlic(klon), zxrhoslic(klon))
     786      zxustartlic(:)=0. ; zxrhoslic(:)=0.
    778787      ALLOCATE(rain_lsc(klon))
    779788      ALLOCATE(rain_num(klon))
     
    852861      ALLOCATE(prfl(klon, klev+1))
    853862      ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1))
     863      ALLOCATE(bsfl(klon,klev+1))
    854864      ALLOCATE(zw2(klon, klev+1))
    855865
     
    933943USE indice_sol_mod
    934944IMPLICIT NONE
    935       DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri)
     945      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    936946      DEALLOCATE(u_seri,v_seri)
    937947      DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
     
    939949      DEALLOCATE(tr_seri)
    940950      DEALLOCATE(d_t_dyn,d_q_dyn)
    941       DEALLOCATE(d_ql_dyn,d_qs_dyn)
    942       DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d)
     951      DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn)
     952      DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d)
    943953      DEALLOCATE(d_u_dyn,d_v_dyn)
    944954      DEALLOCATE(d_tr_dyn)                      !RomP
     
    963973      DEALLOCATE(plul_st,plul_th)
    964974      DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss)
     975      DEALLOCATE(d_qbs_vdf)
     976      DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs)
    965977      DEALLOCATE(d_u_vdf,d_v_vdf)
    966978      DEALLOCATE(d_t_oli,d_t_oro)
     
    10721084      DEALLOCATE(cldm, cldq, cldt, qsat2m)
    10731085      DEALLOCATE(JrNt)
    1074       DEALLOCATE(dthmin, evap, fder, plcl, plfc)
    1075       DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)
     1086      DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc)
     1087      DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl)
    10761088      DEALLOCATE(s_pblh, s_pblt, s_therm)
    10771089!
     
    10861098      DEALLOCATE(zxfqcalving, zxfluxlat)
    10871099      DEALLOCATE(zxrunofflic)
     1100      DEALLOCATE(zxustartlic, zxrhoslic)
    10881101      DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf)
    10891102      DEALLOCATE(rain_lsc)
     
    11541167
    11551168
    1156       DEALLOCATE(prfl, psfl, fraca, Vprecip)
     1169      DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip)
    11571170      DEALLOCATE(zw2)
    11581171
  • LMDZ6/branches/blowing_snow/libf/phylmd/phys_output_ctrlout_mod.F90

    r4412 r4485  
    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) /))
     
    14941505  TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14951506    'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1507  TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1508    'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1509  TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1510    'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    14961511  TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14971512    'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /))
     
    15021517  TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15031518    'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /))
     1519  TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1520    'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /))
    15041521  TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15051522    're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /))
     
    15991616  TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16001617    'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1618  TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1619    'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1620  TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1621    'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    16011622  TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16021623    'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /))
     
    16731694  TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16741695    'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1696  TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1697    'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1698  TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1699    'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1700  TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1701    'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /))
     1702  TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1703    'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /))
    16751704
    16761705!!!!!!!!!!!!!!!! Specifique thermiques
  • LMDZ6/branches/blowing_snow/libf/phylmd/phys_output_var_mod.F90

    r4370 r4485  
    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/blowing_snow/libf/phylmd/phys_output_write_mod.F90

    r4389 r4485  
    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, &
    140141         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, &
     142         o_dqsphy, o_dqsphy2d, o_dqbsphy, o_dqbsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, &
    142143         o_ages_srf, o_snow_srf, o_alb1, o_alb2, o_tke, o_tke_dissip, &
    143144         o_tke_max, o_kz, o_kz_max, o_clwcon, &
    144145         o_dtdyn, o_dqdyn, o_dqdyn2d, o_dqldyn, o_dqldyn2d, &
    145          o_dqsdyn, o_dqsdyn2d, o_dudyn, o_dvdyn, &
     146         o_dqsdyn, o_dqsdyn2d, o_dqbsdyn, o_dqbsdyn2d, o_dudyn, o_dvdyn, &
    146147         o_dtcon, o_tntc, o_ducon, o_dvcon, &
    147148         o_dqcon, o_dqcon2d, o_tnhusc, o_tnhusc, o_dtlsc, &
     
    151152         o_ptconvth, o_lmaxth, o_dtvdf, &
    152153         o_dtdis, o_dqvdf, o_dqvdf2d, o_dteva, o_dqeva, o_dqeva2d, &
     154         o_dqbsvdf, o_dtbs, o_dqbs, o_dqbsbs, &
    153155         o_ptconv, o_ratqs, o_dtthe, &
    154156         o_duthe, o_dvthe, o_ftime_th, &
     
    241243    USE phys_state_var_mod, ONLY: heat_volc, cool_volc !NL
    242244
    243     USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, &
     245    USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, bs_fall,&
    244246         qsol, z0m, z0h, fevap, agesno, &
    245247         nday_rain, rain_con, snow_con, &
     
    275277    USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, &
    276278         zn2mout, t2m_min_mon, t2m_max_mon, evap, &
     279         snowerosion, zxustartlic, zxrhoslic, &
    277280         l_mixmin,l_mix, tke_dissip, &
    278281         zu10m, zv10m, zq2m, zustar, zxqsurf, &
     
    288291         uwat, vwat, &
    289292         rneb_seri, d_rneb_dyn, &
    290          plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw, &
     293         plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw,prbsw, &
    291294         s_pblh, s_pblt, s_lcl, s_therm, uwriteSTD, &
    292295         vwriteSTD, wwriteSTD, phiwriteSTD, qwriteSTD, &
     
    308311         alp_bl_stat, alp_bl_fluct_tke, slab_wfbils, &
    309312         weak_inversion, dthmin, cldtau, cldemi, &
    310          pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, &
     313         pmflxr, pmflxs, prfl, psfl,bsfl, re, fl, rh2m, &
    311314         qsat2m, tpote, tpot, d_ts, od443aer, od550aer, dryod550aer, &
    312315         od865aer, abs550aer, od550lt1aer, sconcso4, sconcno3, &
     
    324327         icc3dcon, icc3dstra, zfice, reffclwtop, &
    325328         ec550aer, flwc, fiwc, t_seri, theta, q_seri, &
    326          ql_seri, qs_seri, tr_seri, &
     329         ql_seri, qs_seri, qbs_seri, tr_seri, qbs_seri,&
    327330         zphi, u_seri, v_seri, omega, cldfra, &
    328331         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, &
     332         d_q_dyn,  d_ql_dyn, d_qs_dyn, d_qbs_dyn,  &
     333         d_q_dyn2d,  d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d, &
    331334         d_u_dyn, d_v_dyn, d_t_con, d_t_ajsb, d_t_ajs, &
    332335         d_u_ajs, d_v_ajs, &
     
    336339         d_t_lscst, d_q_lscth, d_q_lscst, plul_th, &
    337340         plul_st, d_t_vdf, d_t_diss, d_q_vdf, d_q_eva, &
     341         d_t_bs, d_q_bs, d_qbs_bs, d_qbs_vdf, &
    338342         zw2, fraca, zmax_th, d_q_ajsb, d_t_ec, d_u_vdf, &
    339343         d_v_vdf, d_u_oro, d_v_oro, d_t_oro, d_u_lif, &
     
    431435
    432436    ! Input
    433     INTEGER :: itap, ivap, iliq, isol, read_climoz
     437    INTEGER :: itap, ivap, iliq, isol, ibs, read_climoz
    434438    INTEGER, DIMENSION(klon) :: lmax_th
    435439    LOGICAL :: aerosol_couple, ok_sync
     
    887891
    888892       IF (vars_defined) THEN
    889           DO i = 1, klon
     893          IF (ok_bs) THEN
     894             DO i = 1, klon
     895             zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) + bs_fall(i)
     896             ENDDO
     897          ELSE
     898             DO i = 1, klon
    890899             zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i)
    891           ENDDO
     900             ENDDO
     901          ENDIF
    892902       ENDIF
    893903
     
    919929       CALL histwrite_phy(o_fsnow, zfra_o)
    920930       CALL histwrite_phy(o_evap, evap)
     931
     932       IF (ok_bs) THEN
     933           CALL histwrite_phy(o_bsfall, bs_fall)     
     934           CALL histwrite_phy(o_snowerosion, snowerosion)
     935           CALL histwrite_phy(o_ustart_lic, zxustartlic)
     936           CALL histwrite_phy(o_rhosnow_lic, zxrhoslic)
     937       ENDIF
    921938
    922939       IF (vars_defined) THEN
     
    11051122       ENDIF
    11061123       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
    11181124
    11191125       DO nsrf = 1, nbsrf
     
    12811287       CALL histwrite_phy(o_prlw, prlw)
    12821288       CALL histwrite_phy(o_prsw, prsw)
     1289       IF (ok_bs) THEN
     1290       CALL histwrite_phy(o_prbsw, prbsw)
     1291       ENDIF
    12831292       CALL histwrite_phy(o_s_pblh, s_pblh)
    12841293       CALL histwrite_phy(o_s_pblt, s_pblt)
     
    15261535       CALL histwrite_phy(o_re, re)
    15271536       CALL histwrite_phy(o_fl, fl)
     1537
     1538       IF (ok_bs) THEN
     1539         CALL histwrite_phy(o_pr_bs, bsfl(:,1:klev))
     1540       ENDIF
     1541
    15281542       IF (vars_defined) THEN
    15291543          DO i=1, klon
     
    17951809       CALL histwrite_phy(o_zfull,zx_tmp_fi3d)
    17961810
     1811       IF (ok_bs) THEN
     1812          CALL histwrite_phy(o_qbs, qbs_seri)
     1813       ENDIF
     1814
    17971815#ifdef CPP_XIOS
    17981816!solbnd begin
     
    19051923       zx_tmp_fi2d=0.0
    19061924       CALL histwrite_phy(o_dqsphy2d,  zx_tmp_fi2d)
     1925       ENDIF
     1926
     1927
     1928       IF (ok_bs) THEN
     1929       CALL histwrite_phy(o_dqbsphy,  d_qx(:,:,ibs))
     1930       IF (vars_defined) CALL water_int(klon,klev,d_qx(:,:,ibs),zmasse,zx_tmp_fi2d)
     1931       CALL histwrite_phy(o_dqbsphy2d,  zx_tmp_fi2d)
     1932       ELSE
     1933       zx_tmp_fi3d=0.0
     1934       CALL histwrite_phy(o_dqbsphy,  zx_tmp_fi3d)
     1935       zx_tmp_fi2d=0.0
     1936       CALL histwrite_phy(o_dqbsphy2d,  zx_tmp_fi2d)
    19071937       ENDIF
    19081938
     
    19551985
    19561986       CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d)
     1987
     1988       IF (ok_bs) THEN
     1989       CALL histwrite_phy(o_dqbsdyn, d_qbs_dyn)
     1990       CALL histwrite_phy(o_dqbsdyn2d, d_qbs_dyn2d)
     1991       ENDIF
    19571992
    19581993       CALL histwrite_phy(o_dudyn, d_u_dyn)
     
    20982133       ENDIF
    20992134       CALL histwrite_phy(o_dvthe, zx_tmp_fi3d)
     2135
     2136       IF (ok_bs) THEN
     2137          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_vdf(1:klon,1:klev)/pdtphys
     2138          CALL histwrite_phy(o_dqbsvdf, zx_tmp_fi3d)
     2139          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_bs(1:klon,1:klev)/pdtphys
     2140          CALL histwrite_phy(o_dqbsbs, zx_tmp_fi3d)
     2141          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_bs(1:klon,1:klev)/pdtphys
     2142          CALL histwrite_phy(o_dqbs, zx_tmp_fi3d)
     2143          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_t_bs(1:klon,1:klev)/pdtphys
     2144          CALL histwrite_phy(o_dtbs, zx_tmp_fi3d)
     2145       ENDIF
    21002146
    21012147       IF (iflag_thermals>=1) THEN
  • LMDZ6/branches/blowing_snow/libf/phylmd/phys_state_var_mod.F90

    r4370 r4485  
    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(:,:,:)
     
    547547      ALLOCATE(rain_fall(klon))
    548548      ALLOCATE(snow_fall(klon))
     549      ALLOCATE(bs_fall(klon))
    549550      ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon))
    550551      sollw=0.0
     
    556557      ALLOCATE(rugoro(klon))
    557558      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))
     559      ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev), qbs_ancien(klon,klev))
     560      ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon), prbsw_ancien(klon))
    560561      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
    561562!!! Rom P >>>
     
    763764!FC
    764765      DEALLOCATE(treedrg)
    765       DEALLOCATE(rain_fall, snow_fall, solsw, solswfdiff, sollw, radsol, swradcorr)
     766      DEALLOCATE(rain_fall, snow_fall, bs_fall,solsw, solswfdiff, sollw, radsol, swradcorr)
    766767      DEALLOCATE(zmea, zstd, zsig, zgam)
    767768      DEALLOCATE(zthe, zpic, zval)
    768769      DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
    769       DEALLOCATE(qs_ancien, ql_ancien, rneb_ancien)
    770       DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien)
     770      DEALLOCATE(qs_ancien, ql_ancien, qbs_ancien, rneb_ancien)
     771      DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
    771772      DEALLOCATE(qtc_cv,sigt_cv)
    772773      DEALLOCATE(u_ancien, v_ancien)
  • LMDZ6/branches/blowing_snow/libf/phylmd/physiq_mod.F90

    r4478 r4485  
    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
     
    144145       ! [Variables internes non sauvegardees de la physique]
    145146       ! 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, &
     147       t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
    147148       ! Dynamic tendencies (diagnostics)
    148        d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
    149        d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &
     149       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, &
     150       d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, &
    150151       ! Physic tendencies
    151152       d_t_con,d_q_con,d_u_con,d_v_con, &
     
    164165       plul_st,plul_th, &
    165166       !
    166        d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, &
     167       d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, &
    167168       d_t_vdf_x, d_t_vdf_w, &
    168169       d_q_vdf_x, d_q_vdf_w, &
    169170       d_ts, &
     171       !
     172       d_t_bs,d_q_bs,d_qbs_bs, &
    170173       !
    171174!       d_t_oli,d_u_oli,d_v_oli, &
     
    215218       cldh, cldl,cldm, cldq, cldt,      &
    216219       JrNt,                             &
    217        dthmin, evap, fder, plcl, plfc,   &
    218        prw, prlw, prsw,                  &
     220       dthmin, evap, snowerosion,fder, plcl, plfc,   &
     221       prw, prlw, prsw, prbsw,                  &
    219222       s_lcl, s_pblh, s_pblt, s_therm,   &
    220223       cdragm, cdragh,                   &
     
    304307       fsolsw, wfbils, wfbilo,  &
    305308       wfevap, wfrain, wfsnow,  & 
    306        prfl, psfl, fraca, Vprecip,  &
     309       prfl, psfl,bsfl, fraca, Vprecip,  &
    307310       zw2,  &
    308311       !
     
    460463    !======================================================================
    461464    !
    462     ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional)
    463     INTEGER,SAVE :: ivap, iliq, isol, irneb
    464 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb)
     465    ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional)
     466    INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs
     467!$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs)
    465468    !
    466469    !
     
    833836    !XXX PB
    834837    REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
     838    REAL fluxqbs(klon,klev, nbsrf)   ! flux turbulent de neige soufflee
    835839    !
    836840    REAL zxfluxt(klon, klev)
    837841    REAL zxfluxq(klon, klev)
     842    REAL zxfluxqbs(klon,klev)
    838843    REAL zxfluxu(klon, klev)
    839844    REAL zxfluxv(klon, klev)
     
    919924    !
    920925    ! tendance nulles
    921     REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0
     926    REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0
    922927    REAL, dimension(klon)     :: dsig0, ddens0
    923928    INTEGER, dimension(klon)  :: wkoccur1
     
    10601065    REAL ztsol(klon)
    10611066    REAL q2m(klon,nbsrf)  ! humidite a 2m
    1062 
     1067    REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface
     1068    REAL qbsfra  ! blowing snow fraction
    10631069    !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
    10641070    CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
     
    12701276       isol = strIdx(tracers(:)%name, addPhase('H2O', 's'))
    12711277       irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r'))
     1278       ibs  = strIdx(tracers(:)%name, addPhase('H2O', 'b'))
    12721279       CALL init_etat0_limit_unstruct
    12731280       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    13191326       ENDIF
    13201327
    1321        IF (ok_ice_sursat.AND.(nqo.NE.4)) THEN
     1328       IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN
    13221329          WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', &
    13231330               '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.'
     
    13371344          CALL abort_physic(modname,abort_message,1)
    13381345       ENDIF
     1346
     1347        IF (ok_bs) THEN
     1348         IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN
     1349             WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', &
     1350                               'but nqo=', nqo
     1351             abort_message='see above'
     1352             CALL abort_physic(modname,abort_message, 1)
     1353         ENDIF
     1354        ENDIF
    13391355
    13401356       Ncvpaseq1 = 0
     
    17541770           CALL lscp_ini(pdtphys,ok_ice_sursat)
    17551771       endif
     1772       CALL blowing_snow_ini(prt_level,lunout, &
     1773                             RCPD, RLSTT, RLVTT, RLMLT, &
     1774                             RVTMP2, RTT,RD,RG)
     1775
    17561776!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    17571777
     
    17791799       CALL phys_output_write(itap, pdtphys, paprs, pphis,                    &
    17801800                              pplay, lmax_th, aerosol_couple,                 &
    1781                               ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&
     1801                              ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,  ok_sync,&
    17821802                              ptconv, read_climoz, clevSTD,                   &
    17831803                              ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    22502270    dql0(:,:)=0.
    22512271    dqi0(:,:)=0.
     2272    dqbs0(:,:)=0.
    22522273    dsig0(:) = 0.
    22532274    ddens0(:) = 0.
     
    23022323          q_seri(i,k)  = qx(i,k,ivap)
    23032324          ql_seri(i,k) = qx(i,k,iliq)
     2325          qbs_seri(i,k) = 0.
    23042326          !CR: ATTENTION, on rajoute la variable glace
    23052327          IF (nqo.EQ.2) THEN             !--vapour and liquid only
     
    23092331             qs_seri(i,k) = qx(i,k,isol)
    23102332             rneb_seri(i,k) = 0.
    2311           ELSE IF (nqo.EQ.4) THEN        !--vapour, liquid, ice and rneb
     2333          ELSE IF (nqo.GE.4) THEN        !--vapour, liquid, ice and rneb and blowing snow
    23122334             qs_seri(i,k) = qx(i,k,isol)
     2335             IF (ok_ice_sursat) THEN
    23132336             rneb_seri(i,k) = qx(i,k,irneb)
     2337             ENDIF
     2338             IF (ok_bs) THEN
     2339             qbs_seri(i,k)= qx(i,k,ibs)
     2340             ENDIF
     2341
    23142342          ENDIF
     2343
     2344
    23152345       ENDDO
    23162346    ENDDO
     
    23212351    qql1(:)=0.0
    23222352    DO k = 1, klev
    2323       qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
     2353      qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k)
    23242354    ENDDO
    23252355    ENDIF
     
    23772407       d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep
    23782408       d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep
     2409       d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep
    23792410       CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d)
    23802411       d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep
     
    23832414       CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d)
    23842415       d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep
     2416       CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d)
     2417       d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep
    23852418       ! !! RomP >>>   td dyn traceur
    23862419       IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep
     
    23982431       d_ql_dyn2d(:) = 0.0
    23992432       d_qs_dyn2d(:) = 0.0
     2433       d_qbs_dyn2d(:)= 0.0
    24002434       ! !! RomP >>>   td dyn traceur
    24012435       IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0
    24022436       ! !! RomP <<<
    24032437       d_rneb_dyn(:,:)=0.0
     2438       d_qbs_dyn(:,:)=0.0
    24042439       ancien_ok = .TRUE.
    24052440    ENDIF
     
    25172552
    25182553     CALL add_phys_tend &
    2519             (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,paprs,&
     2554            (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,&
    25202555               'eva',abortphy,flag_inhib_tend,itap,0)
    25212556    CALL prt_enerbil('eva',itap)
     
    26822717            longitude_deg, latitude_deg, rugoro,  zrmu0,      &
    26832718            sollwdown,    cldt,      &
    2684             rain_fall, snow_fall, solsw,   solswfdiff, sollw,     &
     2719            rain_fall, snow_fall, bs_fall, solsw,   solswfdiff, sollw,     &
    26852720            gustiness,                                &
    2686             t_seri,    q_seri,    u_seri,  v_seri,    &
     2721            t_seri,    q_seri,   qbs_seri, u_seri,  v_seri,    &
    26872722                                !nrlmd+jyg<
    26882723            wake_deltat, wake_deltaq, wake_cstar, wake_s, &
     
    26952730                                !albedo SB >>>
    26962731                                ! albsol1,   albsol2,   sens,    evap,      &
    2697             albsol_dir,   albsol_dif,   sens,    evap,  
     2732            albsol_dir,   albsol_dif,   sens,    evap, snowerosion,
    26982733                                !albedo SB <<<
    26992734            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    27002735            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
    2701             d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     2736            d_t_vdf,   d_q_vdf, d_qbs_vdf,  d_u_vdf, d_v_vdf, d_t_diss, &
    27022737                                !nrlmd<
    27032738                                !jyg<
     
    27252760            fluxt,   fluxu,  fluxv, &
    27262761            dsens,     devap,     zxsnow, &
    2727             zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke, &
     2762            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
    27282763                                !nrlmd+jyg<
    27292764            wake_delta_pbl_TKE, &
     
    27502785       IF (klon_glo==1) THEN
    27512786          CALL add_pbl_tend &
    2752                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     2787               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    27532788               'vdf',abortphy,flag_inhib_tend,itap)
    27542789       ELSE
    27552790          CALL add_phys_tend &
    2756                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     2791               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    27572792               'vdf',abortphy,flag_inhib_tend,itap,0)
    27582793       ENDIF
    27592794       CALL prt_enerbil('vdf',itap)
     2795
    27602796       !--------------------------------------------------------------------
    27612797
     
    28082844
    28092845    ENDIF
     2846
     2847    ! ==================================================================
     2848    ! Blowing snow sublimation and sedimentation
     2849
     2850    d_t_bs(:,:)=0.
     2851    d_q_bs(:,:)=0.
     2852    d_qbs_bs(:,:)=0.
     2853    bsfl(:,:)=0.
     2854    bs_fall(:)=0.
     2855    IF (ok_bs) THEN
     2856
     2857     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
     2858                                        d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall)
     2859
     2860     CALL add_phys_tend &
     2861               (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,&
     2862               'bs',abortphy,flag_inhib_tend,itap,0)
     2863
     2864    ENDIF
     2865
    28102866    ! =================================================================== c
    28112867    !   Calcul de Qsat
     
    32323288!!
    32333289!!
    3234     CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
     3290    CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, &
    32353291         'convection',abortphy,flag_inhib_tend,itap,0)
    32363292    CALL prt_enerbil('convection',itap)
     
    33633419       !-----------------------------------------------------------------------
    33643420       ! ajout des tendances des poches froides
    3365        CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', &
     3421       CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', &
    33663422            abortphy,flag_inhib_tend,itap,0)
    33673423       CALL prt_enerbil('wake',itap)
     
    35213577          !
    35223578          CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs,  &
    3523                              dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0)
     3579                             dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0)
    35243580          CALL prt_enerbil('thermals',itap)
    35253581          !
     
    35833639          !--------------------------------------------------------------------
    35843640          ! ajout des tendances de l'ajustement sec ou des thermiques
    3585           CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
     3641          CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, &
    35863642               'ajsb',abortphy,flag_inhib_tend,itap,0)
    35873643          CALL prt_enerbil('ajsb',itap)
     
    36723728!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
    36733729!-JLD
    3674     CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs, &
     3730    CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, &
    36753731         'lsc',abortphy,flag_inhib_tend,itap,0)
    36763732    CALL prt_enerbil('lsc',itap)
     
    36953751    ENDIF
    36963752
    3697     !---------------------------------------------------------------------------
     3753
     3754!---------------------------------------------------------------------------
    36983755    DO k = 1, klev
    36993756       DO i = 1, klon
    37003757          cldfra(i,k) = rneb(i,k)
    37013758          !CR: a quoi ca sert? Faut-il ajouter qs_seri?
     3759          !EV: en effet etrange, j'ajouterais aussi qs_seri
     3760          !    plus largement, je nettoierais (enleverrais) ces lignes
    37023761          IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k)
    37033762       ENDDO
    37043763    ENDDO
     3764
     3765
     3766    ! Option to activate the radiative effect of blowing snow (ok_rad_bs)
     3767    ! makes sense only if the new large scale condensation scheme is active
     3768    ! with the ok_icefra_lscp flag active as well
     3769
     3770    IF (ok_bs .AND. ok_rad_bs) THEN
     3771       IF (ok_new_lscp .AND. ok_icefra_lscp) THEN
     3772           DO k=1,klev
     3773             DO i=1,klon
     3774                radocond(i,k)=radocond(i,k)+qbs_seri(i,k)
     3775                picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k))
     3776                qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0)
     3777                cldfra(i,k)=max(cldfra(i,k),qbsfra)
     3778             ENDDO
     3779           ENDDO
     3780       ELSE
     3781          WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow"
     3782          WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false"
     3783          abort_message='inconsistency in cloud phase for blowing snow'
     3784          CALL abort_physic(modname,abort_message,1)
     3785       ENDIF
     3786
     3787    ENDIF
     3788
    37053789    IF (check) THEN
    37063790       za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
     
    44894573    ENDDO
    44904574
    4491     CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend,itap,0)
     4575    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0)
    44924576    CALL prt_enerbil('SW',itap)
    4493     CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend,itap,0)
     4577    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0)
    44944578    CALL prt_enerbil('LW',itap)
    44954579
     
    45664650       !-----------------------------------------------------------------------
    45674651       ! ajout des tendances de la trainee de l'orographie
    4568        CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro', &
     4652       CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', &
    45694653            abortphy,flag_inhib_tend,itap,0)
    45704654       CALL prt_enerbil('oro',itap)
     
    46174701
    46184702       ! ajout des tendances de la portance de l'orographie
    4619        CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &
     4703       CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, &
    46204704            'lif', abortphy,flag_inhib_tend,itap,0)
    46214705       CALL prt_enerbil('lif',itap)
     
    46424726       d_t_hin(:, :)=0.
    46434727       CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, &
    4644             dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)
     4728            dqi0, dqbs0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)
    46454729       CALL prt_enerbil('hin',itap)
    46464730    ENDIF
     
    46604744       ENDDO
    46614745
    4662        CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &
     4746       CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, &
    46634747            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0)
    46644748       CALL prt_enerbil('front_gwd_rando',itap)
     
    46694753            rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
    46704754            du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress)
    4671        CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &
     4755       CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, &
    46724756            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0)
    46734757       CALL prt_enerbil('flott_gwd_rando',itap)
     
    47214805       ! ajout de la tendance d'humidite due au methane
    47224806       d_q_ch4_dtime(:,:) = d_q_ch4(:,:)*phys_tstep
    4723        CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &
     4807       CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, &
    47244808            'q_ch4', abortphy,flag_inhib_tend,itap,0)
    47254809       d_q_ch4(:,:) = d_q_ch4_dtime(:,:)/phys_tstep
     
    50265110
    50275111     CALL add_phys_tend &
    5028             (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,paprs,&
     5112            (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,&
    50295113             'rep',abortphy,flag_inhib_tend,itap,0)
    50305114        IF (abortphy==1) Print*,'ERROR ABORT REP'
     
    51035187    !   prlw = colonne eau liquide
    51045188    !   prlw = colonne eau solide
     5189    !   prbsw = colonne neige soufflee
    51055190    prw(:) = 0.
    51065191    prlw(:) = 0.
    51075192    prsw(:) = 0.
     5193    prbsw(:) = 0.
    51085194    DO k = 1, klev
    51095195       prw(:)  = prw(:)  + q_seri(:,k)*zmasse(:,k)
    51105196       prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k)
    51115197       prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k)
     5198       prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k)
    51125199    ENDDO
    51135200    !
     
    51685255          ENDIF
    51695256          !--ice_sursat: nqo=4, on ajoute rneb
    5170           IF (nqo == 4) THEN
     5257          IF (nqo.ge.4 .and. ok_ice_sursat) THEN
    51715258             d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep
    51725259          ENDIF
     5260
     5261           IF (nqo.ge.4 .and. ok_bs) THEN
     5262             d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep
     5263          ENDIF
     5264
    51735265       ENDDO
    51745266    ENDDO
     
    52175309    ql_ancien(:,:) = ql_seri(:,:)
    52185310    qs_ancien(:,:) = qs_seri(:,:)
     5311    qbs_ancien(:,:) = qbs_seri(:,:)
    52195312    rneb_ancien(:,:) = rneb_seri(:,:)
    52205313    CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien)
    52215314    CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
    52225315    CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien)
     5316    CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien)
    52235317    ! !! RomP >>>
    52245318    IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:)
     
    53455439    CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
    53465440         pplay, lmax_th, aerosol_couple,                 &
    5347          ok_ade, ok_aie, ok_volcan, ivap, iliq, isol,    &
     5441         ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   &
    53485442         ok_sync, ptconv, read_climoz, clevSTD,          &
    53495443         ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
  • LMDZ6/branches/blowing_snow/libf/phylmd/surf_land_mod.F90

    r4283 r4485  
    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,fluxbs, &             
    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/blowing_snow/libf/phylmd/surf_land_orchidee_mod.F90

    r4283 r4485  
    4747       precip_rain, precip_snow, lwdown, swnet, swdown, &
    4848       ps, q2m, t2m, &
    49        evap, fluxsens, fluxlat, &             
     49       evap, fluxsens, fluxlat, fluxbs, &             
    5050       tsol_rad, tsurf_new, alb1_new, alb2_new, &
    5151       emis_new, z0m_new, z0h_new, qsurf, &
     
    140140! Parametres de sortie
    141141!****************************************************************************************
    142     REAL, DIMENSION(klon), INTENT(OUT)        :: evap, fluxsens, fluxlat, qsurf
     142    REAL, DIMENSION(klon), INTENT(OUT)        :: evap, fluxsens, fluxlat, fluxbs, qsurf
    143143    REAL, DIMENSION(klon), INTENT(OUT)        :: tsol_rad, tsurf_new
    144144    REAL, DIMENSION(klon), INTENT(OUT)        :: alb1_new, alb2_new
     
    632632    fluxsens(1:knon) = -1. * fluxsens(1:knon)
    633633    fluxlat(1:knon)  = -1. * fluxlat(1:knon)
    634    
     634   
     635! temporary until blowing snow flux is calculated in orchidee
     636    fluxbs(:)=0.
     637
    635638!  evap     = -1. * evap
    636639
  • LMDZ6/branches/blowing_snow/libf/phylmd/surf_landice_mod.F90

    r4414 r4485  
    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, &
    1717       ps, u1, v1, gustiness, rugoro, pctsrf, &
    18        snow, qsurf, qsol, agesno, &
    19        tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &
     18       snow, qsurf, qsol, qbs1, agesno, &
     19       tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, &
    2020       tsurf_new, dflux_s, dflux_l, &
    2121       alt, slope, cloudf, &
     
    3030    USE cpl_mod,          ONLY : cpl_send_landice_fields
    3131    USE calcul_fluxs_mod
     32    USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic
    3233    USE phys_output_var_mod, ONLY : snow_o,zfra_o
    3334!FC
    3435    USE ioipsl_getin_p_mod, ONLY : getin_p
    35 
     36    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs
    3637
    3738#ifdef CPP_INLANDSIS
     
    5657    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
    5758    REAL, DIMENSION(klon), INTENT(IN)             :: cdragh, cdragm
    58     REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow
     59    REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow, precip_bs
    5960    REAL, DIMENSION(klon), INTENT(IN)             :: temp_air, spechum
    6061    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefH, AcoefQ
     
    6263    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
    6364    REAL, DIMENSION(klon), INTENT(IN)             :: ps
    64     REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness
     65    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
    6566    REAL, DIMENSION(klon), INTENT(IN)             :: rugoro
    6667    REAL, DIMENSION(klon,nbsrf), INTENT(IN)       :: pctsrf
     
    9495!albedo SB <<<
    9596    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
     97    REAL, DIMENSION(klon), INTENT(OUT)            :: fluxbs
    9698    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    9799    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
     
    134136
    135137    REAL,DIMENSION(klon) :: alb1,alb2
     138    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    136139    REAL, DIMENSION (klon,6) :: alb6
     140    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, qsalt
     141    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
     142    REAL, DIMENSION(klon)  :: ws1, rhos, ustart
    137143! End definition
    138144!****************************************************************************************
     
    165171    alb2(:) = 999999.
    166172    alb1(:) = 999999.
    167    
     173    fluxbs(:)=0. 
    168174    runoff(:) = 0.
    169175!****************************************************************************************
     
    173179    radsol(:) = 0.0
    174180    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     181
     182!****************************************************************************************
    175183
    176184!****************************************************************************************
     
    264272
    265273
    266 
    267274    ELSE
    268275
     
    314321         flux_u1, flux_v1)
    315322
    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 
    324323
    325324!****************************************************************************************
     
    327326!
    328327!****************************************************************************************
     328 
    329329    CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
    330330
    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))
     331
     332! EV: following lines are obsolete since we set alb1 and alb2 to constant values
     333! I therefore comment them
     334!    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
     335!         0.6 * (1.0-zfra(1:knon))
    335336!
    336337!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
     
    354355    !z0m = SQRT(z0m**2+rugoro**2)
    355356
     357
     358
     359  ! Simple blowing snow param
     360  if (ok_bs) then
     361       ustart0 = 0.211
     362       rhoice = 920.0
     363       rho0 = 200.0
     364       rhomax=450.0
     365       rhohard=400.0
     366       tau_dens0=86400.0*10.  ! 10 days by default, in s
     367       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
     368       do i = 1, knon
     369           ! estimation of snow density
     370           ! snow density increases with snow age and
     371           ! increases even faster in case of sedimentation of blowing snow
     372           tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs))
     373           rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens))
     374           ! blowing snow flux formula used in MAR
     375           ws1(i)=(u1(i)**2+v1(i)**2)**0.5
     376           ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5
     377           ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax))
     378           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
     379           ! rhohard<450)
     380           esalt=1./(3.25*max(ustar(i),0.001))
     381           hsalt=0.08436*ustar(i)**1.27
     382           qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
     383           !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
     384           fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt)
     385       enddo
     386
     387       ! for outputs
     388       do j = 1, knon
     389          i = knindex(j)
     390          zxustartlic(i) = ustart(j)
     391          zxrhoslic(i) = rhos(j)
     392       enddo
     393
     394  endif
     395
     396
     397
     398!****************************************************************************************
     399! Calculate surface snow amount
     400!   
     401!****************************************************************************************
     402    IF (ok_bs) THEN
     403      precip_totsnow=precip_snow+precip_bs
     404      evap_totsnow=evap-fluxbs ! flux bs is positive towards the surface (snow erosion)
     405    ELSE
     406      precip_totsnow=precip_snow
     407      evap_totsnow=evap
     408    ENDIF
     409
     410    CALL fonte_neige(knon, is_lic, knindex, dtime, &
     411         tsurf, precip_rain, precip_totsnow,  &
     412         snow, qsol, tsurf_new, evap_totsnow)
     413
     414    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.                                         
     415    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 
    356416
    357417
     
    378438    runoff(1:knon)=run_off_lic(1:knon)/dtime
    379439
    380  
    381 !****************************************************************************************
    382440       snow_o=0.
    383441       zfra_o = 0.
     
    420478!albedo SB <<<
    421479
    422  
    423  
    424480
    425481  END SUBROUTINE surf_landice
  • LMDZ6/branches/blowing_snow/libf/phylmd/surf_ocean_mod.F90

    r4370 r4485  
    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), &
Note: See TracChangeset for help on using the changeset viewer.