Changeset 4523


Ignore:
Timestamp:
May 3, 2023, 6:21:08 PM (13 months ago)
Author:
evignon
Message:

merge de la branche blowing snow vers la trunk
premiere tentative
Etienne

Location:
LMDZ6/trunk
Files:
34 edited
8 copied

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk

  • LMDZ6/trunk/DefLists/field_def_lmdz.xml

    r4412 r4523  
    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/trunk/DefLists/file_def_histhf_lmdz.xml

    r4298 r4523  
    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/trunk/libf/dyn3d_common/infotrac.F90

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

    r4454 r4523  
    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/trunk/libf/phylmd/add_phys_tend_mod.F90

    r3435 r4523  
    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/trunk/libf/phylmd/clesphys.h

    r4458 r4523  
    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/trunk/libf/phylmd/conf_phys_m.F90

    r4466 r4523  
    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/trunk/libf/phylmd/fonte_neige_mod.F90

    r3900 r4523  
    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/trunk/libf/phylmd/infotrac_phy.F90

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

    r3974 r4523  
    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/trunk/libf/phylmd/pbl_surface_mod.F90

    r4478 r4523  
    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/trunk/libf/phylmd/phyaqua_mod.F90

    r4463 r4523  
    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/trunk/libf/phylmd/phyredem.F90

    r4389 r4523  
    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/trunk/libf/phylmd/phys_local_var_mod.F90

    r4489 r4523  
    1414      REAL, SAVE, ALLOCATABLE :: ql_seri(:,:),qs_seri(:,:)
    1515      !$OMP THREADPRIVATE(ql_seri,qs_seri)
     16      REAL, SAVE, ALLOCATABLE :: qbs_seri(:,:)
     17      !$OMP THREADPRIVATE(qbs_seri)
    1618      REAL, SAVE, ALLOCATABLE :: u_seri(:,:), v_seri(:,:)
    1719      !$OMP THREADPRIVATE(u_seri, v_seri)
     
    2830      REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:)
    2931      !$OMP THREADPRIVATE(d_t_dyn, d_q_dyn)
    30       REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:)
    31       !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn)
    32       REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:)
    33       !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d)
     32      REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:), d_qbs_dyn(:,:)
     33      !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn, d_qbs_dyn)
     34      REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:), d_qbs_dyn2d(:)
     35      !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d)
    3436      REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:)
    3537      !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn)
     
    7173      REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:)
    7274      !$OMP THREADPRIVATE(d_u_oli, d_v_oli)
    73       REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_t_diss(:,:)
    74       !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf,d_t_diss)
     75      REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_qbs_vdf(:,:), d_t_diss(:,:)
     76      !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_qbs_vdf, d_t_diss)
    7577      REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:)
    7678      !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf)
     
    8082      REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:)
    8183      !$OMP THREADPRIVATE( d_t_vdf_x, d_q_vdf_x)
     84      REAL, SAVE, ALLOCATABLE :: d_t_bs(:,:), d_q_bs(:,:), d_qbs_bs(:,:)
     85      !$OMP THREADPRIVATE( d_t_bs,d_q_bs, d_qbs_bs)
    8286!>nrlmd+jyg
    8387      REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:)
     
    312316      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt
    313317!$OMP THREADPRIVATE(JrNt)
    314       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw
    315 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)
     318      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw
     319!$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw)
    316320      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m
    317321!$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m)
     
    330334      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte
    331335!$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte)
     336      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic
     337!$OMP THREADPRIVATE(zxustartlic, zxrhoslic)
    332338      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving
    333339!$OMP THREADPRIVATE(zxfqcalving)
     
    451457      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi
    452458!$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi)
    453       REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca
    454 !$OMP THREADPRIVATE(prfl, psfl, fraca)
     459      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl
     460!$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl)
    455461      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2
    456462!$OMP THREADPRIVATE(Vprecip, zw2)
     
    608614
    609615IMPLICIT NONE
    610       ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev))
     616      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    611617      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    612618      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     
    616622      ALLOCATE(tr_seri(klon,klev,nbtr))
    617623      ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
    618       ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev))
    619       ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon))
     624      ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev))
     625      ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon))
    620626      ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
    621627      ALLOCATE(d_tr_dyn(klon,klev,nbtr))                   !RomP
     
    640646      ALLOCATE(plul_st(klon),plul_th(klon))
    641647      ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev))
    642 
     648      ALLOCATE (d_qbs_vdf(klon,klev))
     649      ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev))
    643650      ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev))
    644651      ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev))
     
    769776      ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon))
    770777      ALLOCATE(JrNt(klon))
    771       ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))
    772       ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
     778      ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon))
     779      ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
    773780      ALLOCATE(s_lcl(klon))
    774781      ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon))
     
    785792      ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon))
    786793      ALLOCATE(zxrunofflic(klon))
     794      ALLOCATE(zxustartlic(klon), zxrhoslic(klon))
     795      zxustartlic(:)=0. ; zxrhoslic(:)=0.
    787796      ALLOCATE(rain_lsc(klon))
    788797      ALLOCATE(rain_num(klon))
     
    861870      ALLOCATE(prfl(klon, klev+1))
    862871      ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1))
     872      ALLOCATE(bsfl(klon,klev+1))
    863873      ALLOCATE(zw2(klon, klev+1))
    864874
     
    942952USE indice_sol_mod
    943953IMPLICIT NONE
    944       DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri)
     954      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    945955      DEALLOCATE(u_seri,v_seri)
    946956      DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
     
    949959      DEALLOCATE(tr_seri)
    950960      DEALLOCATE(d_t_dyn,d_q_dyn)
    951       DEALLOCATE(d_ql_dyn,d_qs_dyn)
    952       DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d)
     961      DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn)
     962      DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d)
    953963      DEALLOCATE(d_u_dyn,d_v_dyn)
    954964      DEALLOCATE(d_tr_dyn)                      !RomP
     
    973983      DEALLOCATE(plul_st,plul_th)
    974984      DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss)
     985      DEALLOCATE(d_qbs_vdf)
     986      DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs)
    975987      DEALLOCATE(d_u_vdf,d_v_vdf)
    976988      DEALLOCATE(d_t_oli,d_t_oro)
     
    10831095      DEALLOCATE(cldm, cldq, cldt, qsat2m)
    10841096      DEALLOCATE(JrNt)
    1085       DEALLOCATE(dthmin, evap, fder, plcl, plfc)
    1086       DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)
     1097      DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc)
     1098      DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl)
    10871099      DEALLOCATE(s_pblh, s_pblt, s_therm)
    10881100!
     
    10971109      DEALLOCATE(zxfqcalving, zxfluxlat)
    10981110      DEALLOCATE(zxrunofflic)
     1111      DEALLOCATE(zxustartlic, zxrhoslic)
    10991112      DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf)
    11001113      DEALLOCATE(rain_lsc)
     
    11651178
    11661179
    1167       DEALLOCATE(prfl, psfl, fraca, Vprecip)
     1180      DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip)
    11681181      DEALLOCATE(zw2)
    11691182
  • LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90

    r4412 r4523  
    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/trunk/libf/phylmd/phys_output_var_mod.F90

    r4370 r4523  
    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/trunk/libf/phylmd/phys_output_write_mod.F90

    r4489 r4523  
    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
     
    17971811       CALL histwrite_phy(o_zfull,zx_tmp_fi3d)
    17981812
     1813       IF (ok_bs) THEN
     1814          CALL histwrite_phy(o_qbs, qbs_seri)
     1815       ENDIF
     1816
    17991817#ifdef CPP_XIOS
    18001818!solbnd begin
     
    19081926       zx_tmp_fi2d=0.0
    19091927       CALL histwrite_phy(o_dqsphy2d,  zx_tmp_fi2d)
     1928       ENDIF
     1929
     1930
     1931       IF (ok_bs) THEN
     1932       CALL histwrite_phy(o_dqbsphy,  d_qx(:,:,ibs))
     1933       IF (vars_defined) CALL water_int(klon,klev,d_qx(:,:,ibs),zmasse,zx_tmp_fi2d)
     1934       CALL histwrite_phy(o_dqbsphy2d,  zx_tmp_fi2d)
     1935       ELSE
     1936       zx_tmp_fi3d=0.0
     1937       CALL histwrite_phy(o_dqbsphy,  zx_tmp_fi3d)
     1938       zx_tmp_fi2d=0.0
     1939       CALL histwrite_phy(o_dqbsphy2d,  zx_tmp_fi2d)
    19101940       ENDIF
    19111941
     
    19581988
    19591989       CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d)
     1990
     1991       IF (ok_bs) THEN
     1992       CALL histwrite_phy(o_dqbsdyn, d_qbs_dyn)
     1993       CALL histwrite_phy(o_dqbsdyn2d, d_qbs_dyn2d)
     1994       ENDIF
    19601995
    19611996       CALL histwrite_phy(o_dudyn, d_u_dyn)
     
    21012136       ENDIF
    21022137       CALL histwrite_phy(o_dvthe, zx_tmp_fi3d)
     2138
     2139       IF (ok_bs) THEN
     2140          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_vdf(1:klon,1:klev)/pdtphys
     2141          CALL histwrite_phy(o_dqbsvdf, zx_tmp_fi3d)
     2142          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_bs(1:klon,1:klev)/pdtphys
     2143          CALL histwrite_phy(o_dqbsbs, zx_tmp_fi3d)
     2144          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_bs(1:klon,1:klev)/pdtphys
     2145          CALL histwrite_phy(o_dqbs, zx_tmp_fi3d)
     2146          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_t_bs(1:klon,1:klev)/pdtphys
     2147          CALL histwrite_phy(o_dtbs, zx_tmp_fi3d)
     2148       ENDIF
    21032149
    21042150       IF (iflag_thermals>=1) THEN
  • LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90

    r4370 r4523  
    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/trunk/libf/phylmd/physiq_mod.F90

    r4519 r4523  
    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       rhcl, &       
    148149       ! Dynamic tendencies (diagnostics)
    149        d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
    150        d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &
     150       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, &
     151       d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, &
    151152       ! Physic tendencies
    152153       d_t_con,d_q_con,d_u_con,d_v_con, &
     
    165166       plul_st,plul_th, &
    166167       !
    167        d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, &
     168       d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, &
    168169       d_t_vdf_x, d_t_vdf_w, &
    169170       d_q_vdf_x, d_q_vdf_w, &
    170171       d_ts, &
     172       !
     173       d_t_bs,d_q_bs,d_qbs_bs, &
    171174       !
    172175!       d_t_oli,d_u_oli,d_v_oli, &
     
    216219       cldh, cldl,cldm, cldq, cldt,      &
    217220       JrNt,                             &
    218        dthmin, evap, fder, plcl, plfc,   &
    219        prw, prlw, prsw,                  &
     221       dthmin, evap, snowerosion,fder, plcl, plfc,   &
     222       prw, prlw, prsw, prbsw,                  &
    220223       s_lcl, s_pblh, s_pblt, s_therm,   &
    221224       cdragm, cdragh,                   &
     
    305308       fsolsw, wfbils, wfbilo,  &
    306309       wfevap, wfrain, wfsnow,  & 
    307        prfl, psfl, fraca, Vprecip,  &
     310       prfl, psfl,bsfl, fraca, Vprecip,  &
    308311       zw2,  &
    309312       !
     
    461464    !======================================================================
    462465    !
    463     ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional)
    464     INTEGER,SAVE :: ivap, iliq, isol, irneb
    465 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb)
     466    ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional)
     467    INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs
     468!$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs)
    466469    !
    467470    !
     
    834837    !XXX PB
    835838    REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
     839    REAL fluxqbs(klon,klev, nbsrf)   ! flux turbulent de neige soufflee
    836840    !
    837841    REAL zxfluxt(klon, klev)
    838842    REAL zxfluxq(klon, klev)
     843    REAL zxfluxqbs(klon,klev)
    839844    REAL zxfluxu(klon, klev)
    840845    REAL zxfluxv(klon, klev)
     
    920925    !
    921926    ! tendance nulles
    922     REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0
     927    REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0
    923928    REAL, dimension(klon)     :: dsig0, ddens0
    924929    INTEGER, dimension(klon)  :: wkoccur1
     
    10661071    REAL ztsol(klon)
    10671072    REAL q2m(klon,nbsrf)  ! humidite a 2m
    1068 
     1073    REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface
     1074    REAL qbsfra  ! blowing snow fraction
    10691075    !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
    10701076    CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
     
    12761282       isol = strIdx(tracers(:)%name, addPhase('H2O', 's'))
    12771283       irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r'))
     1284       ibs  = strIdx(tracers(:)%name, addPhase('H2O', 'b'))
    12781285       CALL init_etat0_limit_unstruct
    12791286       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    13251332       ENDIF
    13261333
    1327        IF (ok_ice_sursat.AND.(nqo.NE.4)) THEN
     1334       IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN
    13281335          WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', &
    13291336               '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.'
     
    13431350          CALL abort_physic(modname,abort_message,1)
    13441351       ENDIF
     1352
     1353        IF (ok_bs) THEN
     1354         IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN
     1355             WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', &
     1356                               'but nqo=', nqo
     1357             abort_message='see above'
     1358             CALL abort_physic(modname,abort_message, 1)
     1359         ENDIF
     1360        ENDIF
    13451361
    13461362       Ncvpaseq1 = 0
     
    17611777           CALL lscp_ini(pdtphys,ok_ice_sursat)
    17621778       endif
     1779       CALL blowing_snow_ini(prt_level,lunout, &
     1780                             RCPD, RLSTT, RLVTT, RLMLT, &
     1781                             RVTMP2, RTT,RD,RG)
     1782
    17631783!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    17641784
     
    17861806       CALL phys_output_write(itap, pdtphys, paprs, pphis,                    &
    17871807                              pplay, lmax_th, aerosol_couple,                 &
    1788                               ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&
     1808                              ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,  ok_sync,&
    17891809                              ptconv, read_climoz, clevSTD,                   &
    17901810                              ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    22572277    dql0(:,:)=0.
    22582278    dqi0(:,:)=0.
     2279    dqbs0(:,:)=0.
    22592280    dsig0(:) = 0.
    22602281    ddens0(:) = 0.
     
    23092330          q_seri(i,k)  = qx(i,k,ivap)
    23102331          ql_seri(i,k) = qx(i,k,iliq)
     2332          qbs_seri(i,k) = 0.
    23112333          !CR: ATTENTION, on rajoute la variable glace
    23122334          IF (nqo.EQ.2) THEN             !--vapour and liquid only
     
    23162338             qs_seri(i,k) = qx(i,k,isol)
    23172339             rneb_seri(i,k) = 0.
    2318           ELSE IF (nqo.EQ.4) THEN        !--vapour, liquid, ice and rneb
     2340          ELSE IF (nqo.GE.4) THEN        !--vapour, liquid, ice and rneb and blowing snow
    23192341             qs_seri(i,k) = qx(i,k,isol)
     2342             IF (ok_ice_sursat) THEN
    23202343             rneb_seri(i,k) = qx(i,k,irneb)
     2344             ENDIF
     2345             IF (ok_bs) THEN
     2346             qbs_seri(i,k)= qx(i,k,ibs)
     2347             ENDIF
     2348
    23212349          ENDIF
     2350
     2351
    23222352       ENDDO
    23232353    ENDDO
     
    23282358    qql1(:)=0.0
    23292359    DO k = 1, klev
    2330       qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
     2360      qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k)
    23312361    ENDDO
    23322362    ENDIF
     
    23842414       d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep
    23852415       d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep
     2416       d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep
    23862417       CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d)
    23872418       d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep
     
    23902421       CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d)
    23912422       d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep
     2423       CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d)
     2424       d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep
    23922425       ! !! RomP >>>   td dyn traceur
    23932426       IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep
     
    24052438       d_ql_dyn2d(:) = 0.0
    24062439       d_qs_dyn2d(:) = 0.0
     2440       d_qbs_dyn2d(:)= 0.0
    24072441       ! !! RomP >>>   td dyn traceur
    24082442       IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0
    24092443       ! !! RomP <<<
    24102444       d_rneb_dyn(:,:)=0.0
     2445       d_qbs_dyn(:,:)=0.0
    24112446       ancien_ok = .TRUE.
    24122447    ENDIF
     
    25242559
    25252560     CALL add_phys_tend &
    2526             (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,paprs,&
     2561            (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,&
    25272562               'eva',abortphy,flag_inhib_tend,itap,0)
    25282563    CALL prt_enerbil('eva',itap)
     
    26892724            longitude_deg, latitude_deg, rugoro,  zrmu0,      &
    26902725            sollwdown,    cldt,      &
    2691             rain_fall, snow_fall, solsw,   solswfdiff, sollw,     &
     2726            rain_fall, snow_fall, bs_fall, solsw,   solswfdiff, sollw,     &
    26922727            gustiness,                                &
    2693             t_seri,    q_seri,    u_seri,  v_seri,    &
     2728            t_seri,    q_seri,   qbs_seri, u_seri,  v_seri,    &
    26942729                                !nrlmd+jyg<
    26952730            wake_deltat, wake_deltaq, wake_cstar, wake_s, &
     
    27022737                                !albedo SB >>>
    27032738                                ! albsol1,   albsol2,   sens,    evap,      &
    2704             albsol_dir,   albsol_dif,   sens,    evap,  
     2739            albsol_dir,   albsol_dif,   sens,    evap, snowerosion,
    27052740                                !albedo SB <<<
    27062741            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    27072742            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
    2708             d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     2743            d_t_vdf,   d_q_vdf, d_qbs_vdf,  d_u_vdf, d_v_vdf, d_t_diss, &
    27092744                                !nrlmd<
    27102745                                !jyg<
     
    27322767            fluxt,   fluxu,  fluxv, &
    27332768            dsens,     devap,     zxsnow, &
    2734             zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke, &
     2769            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
    27352770                                !nrlmd+jyg<
    27362771            wake_delta_pbl_TKE, &
     
    27572792       IF (klon_glo==1) THEN
    27582793          CALL add_pbl_tend &
    2759                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     2794               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    27602795               'vdf',abortphy,flag_inhib_tend,itap)
    27612796       ELSE
    27622797          CALL add_phys_tend &
    2763                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     2798               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    27642799               'vdf',abortphy,flag_inhib_tend,itap,0)
    27652800       ENDIF
    27662801       CALL prt_enerbil('vdf',itap)
     2802
    27672803       !--------------------------------------------------------------------
    27682804
     
    28152851
    28162852    ENDIF
     2853
     2854    ! ==================================================================
     2855    ! Blowing snow sublimation and sedimentation
     2856
     2857    d_t_bs(:,:)=0.
     2858    d_q_bs(:,:)=0.
     2859    d_qbs_bs(:,:)=0.
     2860    bsfl(:,:)=0.
     2861    bs_fall(:)=0.
     2862    IF (ok_bs) THEN
     2863
     2864     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
     2865                                        d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall)
     2866
     2867     CALL add_phys_tend &
     2868               (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,&
     2869               'bs',abortphy,flag_inhib_tend,itap,0)
     2870
     2871    ENDIF
     2872
    28172873    ! =================================================================== c
    28182874    !   Calcul de Qsat
     
    32393295!!
    32403296!!
    3241     CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
     3297    CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, &
    32423298         'convection',abortphy,flag_inhib_tend,itap,0)
    32433299    CALL prt_enerbil('convection',itap)
     
    33703426       !-----------------------------------------------------------------------
    33713427       ! ajout des tendances des poches froides
    3372        CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', &
     3428       CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', &
    33733429            abortphy,flag_inhib_tend,itap,0)
    33743430       CALL prt_enerbil('wake',itap)
     
    35283584          !
    35293585          CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs,  &
    3530                              dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0)
     3586                             dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0)
    35313587          CALL prt_enerbil('thermals',itap)
    35323588          !
     
    35903646          !--------------------------------------------------------------------
    35913647          ! ajout des tendances de l'ajustement sec ou des thermiques
    3592           CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
     3648          CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, &
    35933649               'ajsb',abortphy,flag_inhib_tend,itap,0)
    35943650          CALL prt_enerbil('ajsb',itap)
     
    36793735!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
    36803736!-JLD
    3681     CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs, &
     3737    CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, &
    36823738         'lsc',abortphy,flag_inhib_tend,itap,0)
    36833739    CALL prt_enerbil('lsc',itap)
     
    37023758    ENDIF
    37033759
    3704     !---------------------------------------------------------------------------
     3760
     3761!---------------------------------------------------------------------------
    37053762    DO k = 1, klev
    37063763       DO i = 1, klon
    37073764          cldfra(i,k) = rneb(i,k)
    37083765          !CR: a quoi ca sert? Faut-il ajouter qs_seri?
     3766          !EV: en effet etrange, j'ajouterais aussi qs_seri
     3767          !    plus largement, je nettoierais (enleverrais) ces lignes
    37093768          IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k)
    37103769       ENDDO
    37113770    ENDDO
     3771
     3772
     3773    ! Option to activate the radiative effect of blowing snow (ok_rad_bs)
     3774    ! makes sense only if the new large scale condensation scheme is active
     3775    ! with the ok_icefra_lscp flag active as well
     3776
     3777    IF (ok_bs .AND. ok_rad_bs) THEN
     3778       IF (ok_new_lscp .AND. ok_icefra_lscp) THEN
     3779           DO k=1,klev
     3780             DO i=1,klon
     3781                radocond(i,k)=radocond(i,k)+qbs_seri(i,k)
     3782                picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k))
     3783                qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0)
     3784                cldfra(i,k)=max(cldfra(i,k),qbsfra)
     3785             ENDDO
     3786           ENDDO
     3787       ELSE
     3788          WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow"
     3789          WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false"
     3790          abort_message='inconsistency in cloud phase for blowing snow'
     3791          CALL abort_physic(modname,abort_message,1)
     3792       ENDIF
     3793
     3794    ENDIF
     3795
    37123796    IF (check) THEN
    37133797       za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
     
    45104594    ENDDO
    45114595
    4512     CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend,itap,0)
     4596    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0)
    45134597    CALL prt_enerbil('SW',itap)
    4514     CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend,itap,0)
     4598    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0)
    45154599    CALL prt_enerbil('LW',itap)
    45164600
     
    45874671       !-----------------------------------------------------------------------
    45884672       ! ajout des tendances de la trainee de l'orographie
    4589        CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro', &
     4673       CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', &
    45904674            abortphy,flag_inhib_tend,itap,0)
    45914675       CALL prt_enerbil('oro',itap)
     
    46384722
    46394723       ! ajout des tendances de la portance de l'orographie
    4640        CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &
     4724       CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, &
    46414725            'lif', abortphy,flag_inhib_tend,itap,0)
    46424726       CALL prt_enerbil('lif',itap)
     
    46634747       d_t_hin(:, :)=0.
    46644748       CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, &
    4665             dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)
     4749            dqi0, dqbs0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)
    46664750       CALL prt_enerbil('hin',itap)
    46674751    ENDIF
     
    46814765       ENDDO
    46824766
    4683        CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &
     4767       CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, &
    46844768            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0)
    46854769       CALL prt_enerbil('front_gwd_rando',itap)
     
    46904774            rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
    46914775            du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress)
    4692        CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &
     4776       CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, &
    46934777            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0)
    46944778       CALL prt_enerbil('flott_gwd_rando',itap)
     
    47424826       ! ajout de la tendance d'humidite due au methane
    47434827       d_q_ch4_dtime(:,:) = d_q_ch4(:,:)*phys_tstep
    4744        CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &
     4828       CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, &
    47454829            'q_ch4', abortphy,flag_inhib_tend,itap,0)
    47464830       d_q_ch4(:,:) = d_q_ch4_dtime(:,:)/phys_tstep
     
    50475131
    50485132     CALL add_phys_tend &
    5049             (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,paprs,&
     5133            (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,&
    50505134             'rep',abortphy,flag_inhib_tend,itap,0)
    50515135        IF (abortphy==1) Print*,'ERROR ABORT REP'
     
    51245208    !   prlw = colonne eau liquide
    51255209    !   prlw = colonne eau solide
     5210    !   prbsw = colonne neige soufflee
    51265211    prw(:) = 0.
    51275212    prlw(:) = 0.
    51285213    prsw(:) = 0.
     5214    prbsw(:) = 0.
    51295215    DO k = 1, klev
    51305216       prw(:)  = prw(:)  + q_seri(:,k)*zmasse(:,k)
    51315217       prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k)
    51325218       prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k)
     5219       prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k)
    51335220    ENDDO
    51345221    !
     
    51895276          ENDIF
    51905277          !--ice_sursat: nqo=4, on ajoute rneb
    5191           IF (nqo == 4) THEN
     5278          IF (nqo.ge.4 .and. ok_ice_sursat) THEN
    51925279             d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep
    51935280          ENDIF
     5281
     5282           IF (nqo.ge.4 .and. ok_bs) THEN
     5283             d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep
     5284          ENDIF
     5285
    51945286       ENDDO
    51955287    ENDDO
     
    52385330    ql_ancien(:,:) = ql_seri(:,:)
    52395331    qs_ancien(:,:) = qs_seri(:,:)
     5332    qbs_ancien(:,:) = qbs_seri(:,:)
    52405333    rneb_ancien(:,:) = rneb_seri(:,:)
    52415334    CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien)
    52425335    CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
    52435336    CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien)
     5337    CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien)
    52445338    ! !! RomP >>>
    52455339    IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:)
     
    53665460    CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
    53675461         pplay, lmax_th, aerosol_couple,                 &
    5368          ok_ade, ok_aie, ok_volcan, ivap, iliq, isol,    &
     5462         ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   &
    53695463         ok_sync, ptconv, read_climoz, clevSTD,          &
    53705464         ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
  • LMDZ6/trunk/libf/phylmd/surf_land_mod.F90

    r4283 r4523  
    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/trunk/libf/phylmd/surf_land_orchidee_mod.F90

    r4283 r4523  
    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/trunk/libf/phylmd/surf_landice_mod.F90

    r4414 r4523  
    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/trunk/libf/phylmd/surf_ocean_mod.F90

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

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

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

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

    r4143 r4523  
    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(:,:)
     
    361365      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt
    362366!$OMP THREADPRIVATE(JrNt)
    363       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw
    364 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)
     367      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw
     368!$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw)
    365369      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m
    366370!$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m)
     
    379383      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte
    380384!$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte)
     385      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic
     386!$OMP THREADPRIVATE(zxustartlic, zxrhoslic)
    381387      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving
    382388!$OMP THREADPRIVATE(zxfqcalving)
     
    567573      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi
    568574!$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi)
    569       REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca
    570 !$OMP THREADPRIVATE(prfl, psfl, fraca)
     575      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl
     576!$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl)
    571577      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2
    572578!$OMP THREADPRIVATE(Vprecip, zw2)
     
    734740
    735741IMPLICIT NONE
    736       ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev))
     742      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    737743      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    738744      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     
    741747      ALLOCATE(tr_seri(klon,klev,nbtr))
    742748      ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
    743       ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev))
    744       ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon))
     749      ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev))
     750      ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon))
    745751      ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
    746752      ALLOCATE(d_tr_dyn(klon,klev,nbtr))                   !RomP
     
    765771      ALLOCATE(plul_st(klon),plul_th(klon))
    766772      ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev))
    767 
     773      ALLOCATE (d_qbs_vdf(klon,klev))
     774      ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev))
    768775      ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev))
    769776      ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev))
     
    925932      ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon))
    926933      ALLOCATE(JrNt(klon))
    927       ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))
    928       ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
     934      ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon))
     935      ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
    929936      ALLOCATE(s_lcl(klon))
    930937      ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon))
     
    10551062      ALLOCATE(prfl(klon, klev+1))
    10561063      ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1))
     1064      ALLOCATE(bsfl(klon,klev+1))
    10571065      ALLOCATE(zw2(klon, klev+1))
    10581066
     
    11411149USE indice_sol_mod
    11421150IMPLICIT NONE
    1143       DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri)
     1151      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    11441152      DEALLOCATE(u_seri,v_seri)
    11451153      DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
     
    11471155      DEALLOCATE(tr_seri)
    11481156      DEALLOCATE(d_t_dyn,d_q_dyn)
    1149       DEALLOCATE(d_ql_dyn,d_qs_dyn)
    1150       DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d)
     1157      DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn)
     1158      DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d)
    11511159      DEALLOCATE(d_u_dyn,d_v_dyn)
    11521160      DEALLOCATE(d_tr_dyn)                      !RomP
     
    11711179      DEALLOCATE(plul_st,plul_th)
    11721180      DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss)
     1181      DEALLOCATE(d_qbs_vdf)
     1182      DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs)
    11731183#ifdef ISO
    11741184      deallocate(xt_seri,xtl_seri,xts_seri)
     
    13081318      DEALLOCATE(cldm, cldq, cldt, qsat2m)
    13091319      DEALLOCATE(JrNt)
    1310       DEALLOCATE(dthmin, evap, fder, plcl, plfc)
    1311       DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)
     1320      DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc)
     1321      DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl)
    13121322      DEALLOCATE(s_pblh, s_pblt, s_therm)
    13131323!
     
    13221332      DEALLOCATE(zxfqcalving, zxfluxlat)
    13231333      DEALLOCATE(zxrunofflic)
     1334      DEALLOCATE(zxustartlic, zxrhoslic)
    13241335      DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf)
    13251336      DEALLOCATE(rain_lsc)
     
    14231434
    14241435
    1425       DEALLOCATE(prfl, psfl, fraca, Vprecip)
     1436      DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip)
    14261437      DEALLOCATE(zw2)
    14271438
  • LMDZ6/trunk/libf/phylmdiso/phys_output_ctrlout_mod.F90

    r4065 r4523  
    378378  TYPE(ctrl_out), SAVE :: o_snow = ctrl_out((/ 1, 1, 10, 10, 5, 10, 11, 11, 11, 11/), &
    379379    'snow', 'Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     380  TYPE(ctrl_out), SAVE :: o_bsfall = ctrl_out((/ 10, 10, 10, 10, 5, 10, 11, 11, 11, 11/), &
     381    'bsfall', 'Blowing Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    380382  TYPE(ctrl_out), SAVE :: o_evap = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    381383    'evap', 'Evaporat', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    382 
     384  TYPE(ctrl_out), SAVE :: o_snowerosion = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     385   'snowerosion', 'blowing snow flux', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     386  TYPE(ctrl_out), SAVE :: o_ustart_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     387    'ustart_lic', 'threshold velocity', 'm/s', (/ ('', i=1, 10) /))
     388  TYPE(ctrl_out), SAVE :: o_rhosnow_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     389    'rhosnow_lic', 'snow density lic', 'kg/m3', (/ ('', i=1, 10) /))
    383390  TYPE(ctrl_out), SAVE :: o_sens_prec_liq_oce = ctrl_out((/ 5, 5, 10, 10, 5, 10, 11, 11, 11, 11/), &
    384391    'sens_rain_oce', 'Sensible heat flux of liquid prec. over ocean', 'W/m2', (/ ('', i=1, 10) /))
     
    743750  TYPE(ctrl_out), SAVE :: o_prsw = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    744751    'prsw', 'Precipitable solid water', 'kg/m2', (/ ('', i=1, 10) /))
     752  TYPE(ctrl_out), SAVE :: o_prbsw = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     753    'prbsw', 'Precipitable blowing snow', 'kg/m2', (/ ('', i=1, 10) /))
    745754  TYPE(ctrl_out), SAVE :: o_s_pblh = ctrl_out((/ 1, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    746755    's_pblh', 'Boundary Layer Height', 'm', (/ ('', i=1, 10) /))
     
    14131422    'ec550aer', 'Extinction at 550nm', 'm^-1', (/ ('', i=1, 10) /))
    14141423  TYPE(ctrl_out), SAVE :: o_lwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    1415     'lwcon', 'Cloud liquid water content', 'kg/kg', (/ ('', i=1, 10) /))
     1424    'lwcon', 'Cloud liquid water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /))
    14161425  TYPE(ctrl_out), SAVE :: o_iwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    1417     'iwcon', 'Cloud ice water content', 'kg/kg', (/ ('', i=1, 10) /))
     1426    'iwcon', 'Cloud ice water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /))
    14181427  TYPE(ctrl_out), SAVE :: o_temp = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
    14191428    'temp', 'Air temperature', 'K', (/ ('', i=1, 10) /))
     
    14321441  TYPE(ctrl_out), SAVE :: o_ocond = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
    14331442    'ocond', 'Condensed water', 'kg/kg', (/ ('', i=1, 10) /))
     1443  TYPE(ctrl_out), SAVE :: o_qbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1444    'qbs', 'Specific content of blowing snow', 'kg/kg', (/ ('', i=1, 10) /))
    14341445  TYPE(ctrl_out), SAVE :: o_wvapp = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14351446    'wvapp', '', '', (/ ('', i=1, 10) /))
     
    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/trunk/libf/phylmdiso/phys_output_var_mod.F90

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

    r4522 r4523  
    7979    USE wxios, ONLY: g_ctx, wxios_set_context
    8080#endif
    81     USE atke_turbulence_ini_mod, ONLY : atke_ini
    82     USE lscp_ini_mod, ONLY : lscp_ini
    8381    USE lscp_mod, ONLY : lscp
    8482    USE wake_ini_mod, ONLY : wake_ini
    8583    USE yamada_ini_mod, ONLY : yamada_ini
     84    USE atke_turbulence_ini_mod, ONLY : atke_ini
    8685    USE thermcell_ini_mod, ONLY : thermcell_ini
     86    USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs
     87    USE lscp_ini_mod, ONLY : lscp_ini
    8788
    8889    !USE cmp_seri_mod
     
    183184       ! [Variables internes non sauvegardees de la physique]
    184185       ! Variables locales pour effectuer les appels en serie
    185        t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
     186       t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
    186187       ! Dynamic tendencies (diagnostics)
    187        d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
    188        d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &
     188       d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
     189       d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, &
    189190       ! Physic tendencies
    190191       d_t_con,d_q_con,d_u_con,d_v_con, &
     
    203204       plul_st,plul_th, &
    204205       !
    205        d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, &
     206       d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, &
    206207       d_t_vdf_x, d_t_vdf_w, &
    207208       d_q_vdf_x, d_q_vdf_w, &
    208209       d_ts, &
     210       !
     211       d_t_bs,d_q_bs,d_qbs_bs, &
    209212       !
    210213!       d_t_oli,d_u_oli,d_v_oli, &
     
    254257       cldh, cldl,cldm, cldq, cldt,      &
    255258       JrNt,                             &
    256        dthmin, evap, fder, plcl, plfc,   &
    257        prw, prlw, prsw,                  &
     259       dthmin, evap, snowerosion,fder, plcl, plfc,   &
     260       prw, prlw, prsw, prbsw,                  &
    258261       s_lcl, s_pblh, s_pblt, s_therm,   &
    259262       cdragm, cdragh,                   &
     
    343346       fsolsw, wfbils, wfbilo,  &
    344347       wfevap, wfrain, wfsnow,  & 
    345        prfl, psfl, fraca, Vprecip,  &
     348       prfl, psfl,bsfl, fraca, Vprecip,  &
    346349       zw2,  &
    347350       !
     
    526529    !======================================================================
    527530    !
    528     ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional)
    529     INTEGER,SAVE :: ivap, iliq, isol, irneb
    530 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb)
     531    ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional)
     532    INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs
     533!$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs)
    531534    !
    532535    !
     
    905908    REAL dialiq(klon,klev)  ! eau liquide nuageuse
    906909    REAL diafra(klon,klev)  ! fraction nuageuse
    907     REAL cldliq(klon,klev)  ! eau liquide nuageuse
     910    REAL radocond(klon,klev)  ! eau condensee nuageuse
    908911    !
    909912    !XXX PB
    910913    REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
     914    REAL fluxqbs(klon,klev, nbsrf)   ! flux turbulent de neige soufflee
    911915    !
    912916    REAL zxfluxt(klon, klev)
    913917    REAL zxfluxq(klon, klev)
     918    REAL zxfluxqbs(klon,klev)
    914919    REAL zxfluxu(klon, klev)
    915920    REAL zxfluxv(klon, klev)
     
    10091014    !
    10101015    ! tendance nulles
    1011     REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0
     1016    REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0
    10121017#ifdef ISO
    10131018    REAL, dimension(ntraciso,klon,klev):: dxt0, dxtl0, dxti0
     
    11561161    REAL ztsol(klon)
    11571162    REAL q2m(klon,nbsrf)  ! humidite a 2m
     1163    REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface
     1164    REAL qbsfra  ! blowing snow fraction
    11581165#ifdef ISO
    11591166    REAL d_xtw(ntraciso),d_xtl(ntraciso), d_xts(ntraciso)
     
    13721379       isol = strIdx(tracers(:)%name, addPhase('H2O', 's'))
    13731380       irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r'))
     1381       ibs  = strIdx(tracers(:)%name, addPhase('H2O', 'b'))
    13741382       CALL init_etat0_limit_unstruct
    13751383       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    14211429       ENDIF
    14221430
    1423        IF (ok_ice_sursat.AND.(nqo.NE.4)) THEN
     1431       IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN
    14241432          WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', &
    14251433               '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.'
     
    14401448       ENDIF
    14411449
     1450        IF (ok_bs) THEN
     1451          abort_message='blowing snow cannot be activated with water isotopes yet'
     1452          CALL abort_physic(modname,abort_message, 1)
     1453         IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN
     1454             WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', &
     1455                               'but nqo=', nqo
     1456             abort_message='see above'
     1457             CALL abort_physic(modname,abort_message, 1)
     1458         ENDIF
     1459        ENDIF
    14421460       Ncvpaseq1 = 0
    14431461       dnwd0=0.0
     
    18931911           CALL lscp_ini(pdtphys,ok_ice_sursat)
    18941912       endif
     1913       CALL blowing_snow_ini(prt_level,lunout, &
     1914                             RCPD, RLSTT, RLVTT, RLMLT, &
     1915                             RVTMP2, RTT,RD,RG)
    18951916
    18961917!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    19191940       CALL phys_output_write(itap, pdtphys, paprs, pphis,                    &
    19201941                              pplay, lmax_th, aerosol_couple,                 &
    1921                               ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&
     1942                              ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,  ok_sync,&
    19221943                              ptconv, read_climoz, clevSTD,                   &
    19231944                              ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    24062427    dql0(:,:)=0.
    24072428    dqi0(:,:)=0.
     2429    dqbs0(:,:)=0.
    24082430#ifdef ISO
    24092431      dxt0(:,:,:)=0.
     
    24632485          q_seri(i,k)  = qx(i,k,ivap)
    24642486          ql_seri(i,k) = qx(i,k,iliq)
     2487          qbs_seri(i,k) = 0.
    24652488          !CR: ATTENTION, on rajoute la variable glace
    24662489          IF (nqo.EQ.2) THEN             !--vapour and liquid only
     
    24702493             qs_seri(i,k) = qx(i,k,isol)
    24712494             rneb_seri(i,k) = 0.
    2472           ELSE IF (nqo.EQ.4) THEN        !--vapour, liquid, ice and rneb
     2495          ELSE IF (nqo.GE.4) THEN        !--vapour, liquid, ice and rneb and blowing snow
    24732496             qs_seri(i,k) = qx(i,k,isol)
     2497             IF (ok_ice_sursat) THEN
    24742498             rneb_seri(i,k) = qx(i,k,irneb)
     2499             ENDIF
     2500             IF (ok_bs) THEN
     2501             qbs_seri(i,k)= qx(i,k,ibs)
     2502             ENDIF
     2503
    24752504          ENDIF
     2505
     2506
    24762507       ENDDO
    24772508    ENDDO
     
    25152546    qql1(:)=0.0
    25162547    DO k = 1, klev
    2517       qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
     2548      qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k)
    25182549    ENDDO
    25192550#ifdef ISO
     
    26312662       d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep
    26322663       d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep
     2664       d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep
    26332665       CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d)
    26342666       d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep
     
    26372669       CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d)
    26382670       d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep
     2671       CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d)
     2672       d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep
    26392673       ! !! RomP >>>   td dyn traceur
    26402674       IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep
     
    27232757       d_ql_dyn2d(:) = 0.0
    27242758       d_qs_dyn2d(:) = 0.0
     2759       d_qbs_dyn2d(:)= 0.0
    27252760
    27262761#ifdef ISO
     
    27462781       ! !! RomP <<<
    27472782       d_rneb_dyn(:,:)=0.0
     2783       d_qbs_dyn(:,:)=0.0
    27482784       ancien_ok = .TRUE.
    27492785    ENDIF
     
    28782914
    28792915     CALL add_phys_tend &
    2880             (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,paprs,&
     2916            (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,&
    28812917               'eva',abortphy,flag_inhib_tend,itap,0 &
    28822918#ifdef ISO
     
    30473083            longitude_deg, latitude_deg, rugoro,  zrmu0,      &
    30483084            sollwdown,    cldt,      &
    3049             rain_fall, snow_fall, solsw,   solswfdiff, sollw,     &
     3085            rain_fall, snow_fall, bs_fall, solsw,   solswfdiff, sollw,     &
    30503086            gustiness,                                &
    3051             t_seri,    q_seri,    u_seri,  v_seri,    &
     3087            t_seri,    q_seri,   qbs_seri, u_seri,  v_seri,    &
    30523088                                !nrlmd+jyg<
    30533089            wake_deltat, wake_deltaq, wake_cstar, wake_s, &
     
    30603096                                !albedo SB >>>
    30613097                                ! albsol1,   albsol2,   sens,    evap,      &
    3062             albsol_dir,   albsol_dif,   sens,    evap,  
     3098            albsol_dir,   albsol_dif,   sens,    evap, snowerosion,
    30633099                                !albedo SB <<<
    30643100            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    30653101            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
    3066             d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     3102            d_t_vdf,   d_q_vdf, d_qbs_vdf,  d_u_vdf, d_v_vdf, d_t_diss, &
    30673103                                !nrlmd<
    30683104                                !jyg<
     
    30903126            fluxt,   fluxu,  fluxv, &
    30913127            dsens,     devap,     zxsnow, &
    3092             zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke, &
     3128            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
    30933129                                !nrlmd+jyg<
    30943130            wake_delta_pbl_TKE, &
     
    32023238       IF (klon_glo==1) THEN
    32033239          CALL add_pbl_tend &
    3204                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     3240               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    32053241               'vdf',abortphy,flag_inhib_tend,itap &
    32063242#ifdef ISO
     
    32103246       ELSE
    32113247          CALL add_phys_tend &
    3212                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     3248               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    32133249               'vdf',abortphy,flag_inhib_tend,itap,0 &
    32143250#ifdef ISO
     
    32723308
    32733309    ENDIF
     3310
     3311    ! ==================================================================
     3312    ! Blowing snow sublimation and sedimentation
     3313
     3314    d_t_bs(:,:)=0.
     3315    d_q_bs(:,:)=0.
     3316    d_qbs_bs(:,:)=0.
     3317    bsfl(:,:)=0.
     3318    bs_fall(:)=0.
     3319    IF (ok_bs) THEN
     3320
     3321     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
     3322                                        d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall)
     3323
     3324     CALL add_phys_tend &
     3325               (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,&
     3326               'bs',abortphy,flag_inhib_tend,itap,0  &
     3327#ifdef ISO                                       
     3328       &    ,dxt0,dxtl0,dxti0 &                   
     3329#endif                                       
     3330       &   )
     3331
     3332    ENDIF
     3333
    32743334    ! =================================================================== c
    32753335    !   Calcul de Qsat
     
    39594019!!
    39604020!!
    3961     CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
     4021    CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, &
    39624022         'convection',abortphy,flag_inhib_tend,itap,0 &
    39634023#ifdef ISO
     
    41914251       !-----------------------------------------------------------------------
    41924252       ! ajout des tendances des poches froides
    4193        CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', &
     4253       CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', &
    41944254            abortphy,flag_inhib_tend,itap,0 &
    41954255#ifdef ISO
     
    44704530          !
    44714531          CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs,  &
    4472                              dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &
     4532                             dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &
    44734533#ifdef ISO
    44744534     &    ,d_xt_ajs,dxtl0,dxti0 &
     
    45864646          !--------------------------------------------------------------------
    45874647          ! ajout des tendances de l'ajustement sec ou des thermiques
    4588           CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
     4648          CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, &
    45894649               'ajsb',abortphy,flag_inhib_tend,itap,0 &
    45904650#ifdef ISO
     
    47304790    CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay, &
    47314791         t_seri, q_seri,ptconv,ratqs, &
    4732          d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, &
    4733          cldliq, picefra, rain_lsc, snow_lsc, &
     4792         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 
     4793         radocond, picefra, rain_lsc, snow_lsc, &
    47344794         frac_impa, frac_nucl, beta_prec_fisrt, &
    47354795         prfl, psfl, rhcl,  &
     
    47434803    CALL fisrtilp(phys_tstep,paprs,pplay, &
    47444804         t_seri, q_seri,ptconv,ratqs, &
    4745          d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, &
     4805         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, radocond, &
    47464806         rain_lsc, snow_lsc, &
    47474807         pfrac_impa, pfrac_nucl, pfrac_1nucl, &
     
    47914851!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
    47924852!-JLD
    4793     CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs, &
     4853    CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, &
    47944854         'lsc',abortphy,flag_inhib_tend,itap,0 &
    47954855#ifdef ISO
     
    48284888    ENDIF
    48294889
    4830     !---------------------------------------------------------------------------
     4890
     4891!---------------------------------------------------------------------------
    48314892    DO k = 1, klev
    48324893       DO i = 1, klon
    48334894          cldfra(i,k) = rneb(i,k)
    48344895          !CR: a quoi ca sert? Faut-il ajouter qs_seri?
    4835           IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k)
     4896          !EV: en effet etrange, j'ajouterais aussi qs_seri
     4897          !    plus largement, je nettoierais (enleverrais) ces lignes
     4898          IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k)
    48364899       ENDDO
    48374900    ENDDO
    48384901
    48394902
    4840 
     4903    ! Option to activate the radiative effect of blowing snow (ok_rad_bs)
     4904    ! makes sense only if the new large scale condensation scheme is active
     4905    ! with the ok_icefra_lscp flag active as well
     4906
     4907    IF (ok_bs .AND. ok_rad_bs) THEN
     4908       IF (ok_new_lscp .AND. ok_icefra_lscp) THEN
     4909           DO k=1,klev
     4910             DO i=1,klon
     4911                radocond(i,k)=radocond(i,k)+qbs_seri(i,k)
     4912                picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k))
     4913                qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0)
     4914                cldfra(i,k)=max(cldfra(i,k),qbsfra)
     4915             ENDDO
     4916           ENDDO
     4917       ELSE
     4918          WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow"
     4919          WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false"
     4920          abort_message='inconsistency in cloud phase for blowing snow'
     4921          CALL abort_physic(modname,abort_message,1)
     4922       ENDIF
     4923
     4924    ENDIF
    48414925#ifdef ISO     
    48424926!#ifdef ISOVERIF
     
    50015085          DO i = 1, klon
    50025086             IF (diafra(i,k).GT.cldfra(i,k)) THEN
    5003                 cldliq(i,k) = dialiq(i,k)
     5087                radocond(i,k) = dialiq(i,k)
    50045088                cldfra(i,k) = diafra(i,k)
    50055089             ENDIF
     
    50385122                DO i=1,klon
    50395123                   IF (ptconv(i,k).AND.ptconvth(i,k)) THEN
    5040                       cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
     5124                      radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k)
    50415125                      cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
    50425126                   ELSE IF (ptconv(i,k)) THEN
    50435127                      cldfra(i,k)=rnebcon(i,k)
    5044                       cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     5128                      radocond(i,k)=rnebcon(i,k)*clwcon(i,k)
    50455129                   ENDIF
    50465130                ENDDO
     
    50515135                DO i=1,klon
    50525136                   cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
    5053                    cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
     5137                   radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k)
    50545138                ENDDO
    50555139             ENDDO
     
    50695153                   IF (ptconv(i,k).AND. .NOT.ptconvth(i,k)) THEN
    50705154                      cldfra(i,k)=rnebcon(i,k)
    5071                       cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     5155                      radocond(i,k)=rnebcon(i,k)*clwcon(i,k)
    50725156                   ENDIF
    50735157                ENDDO
     
    50805164          ! Ancienne version
    50815165          cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
    5082           cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
     5166          radocond(:,:)=radocond(:,:)+rnebcon(:,:)*clwcon(:,:)
    50835167       ENDIF
    50845168
     
    51005184          DO i = 1, klon
    51015185             IF (diafra(i,k).GT.cldfra(i,k)) THEN
    5102                 cldliq(i,k) = dialiq(i,k)
     5186                radocond(i,k) = dialiq(i,k)
    51035187                cldfra(i,k) = diafra(i,k)
    51045188             ENDIF
     
    54755559          ENDIF
    54765560          CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, &
    5477                paprs, pplay, t_seri, cldliq, picefra, cldfra, &
     5561               paprs, pplay, t_seri, radocond, picefra, cldfra, &
    54785562               cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, &
    54795563               flwp, fiwp, flwc, fiwc, &
     
    54835567       ELSE
    54845568          CALL nuage (paprs, pplay, &
    5485                t_seri, cldliq, picefra, cldfra, cldtau, cldemi, &
     5569               t_seri, radocond, picefra, cldfra, cldtau, cldemi, &
    54865570               cldh, cldl, cldm, cldt, cldq, &
    54875571               ok_aie, &
     
    57925876    ENDDO
    57935877
    5794     CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 &
     5878    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 &
    57955879#ifdef ISO
    57965880     &    ,dxt0,dxtl0,dxti0 &
     
    57985882     &  )
    57995883    CALL prt_enerbil('SW',itap)
    5800     CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 &
     5884    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 &
    58015885#ifdef ISO
    58025886     &    ,dxt0,dxtl0,dxti0 &
     
    58465930          ! -> condition on zrel_oro can deactivate the drag on tilted planar terrains
    58475931          !    such as ice sheets (work by V. Wiener)
    5848           ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 
     5932          ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to
    58495933          ! earn computation time but they are not physical.
    58505934          IF (((zpic(i)-zmea(i)).GT.zpmm_orodr_t).AND.(zstd(i).GT.zstd_orodr_t).AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
     
    58775961       !-----------------------------------------------------------------------
    58785962       ! ajout des tendances de la trainee de l'orographie
    5879        CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro', &
     5963       CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', &
    58805964            abortphy,flag_inhib_tend,itap,0 &
    58815965#ifdef ISO
     
    59326016
    59336017       ! ajout des tendances de la portance de l'orographie
    5934        CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &
     6018       CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, &
    59356019            'lif', abortphy,flag_inhib_tend,itap,0 &
    59366020#ifdef ISO
     
    59616045       d_t_hin(:, :)=0.
    59626046       CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, &
    5963             dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &
     6047            dqi0, dqbs0,paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &
    59646048#ifdef ISO
    59656049     &    ,dxt0,dxtl0,dxti0 &
     
    59836067       ENDDO
    59846068
    5985        CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &
     6069       CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, &
    59866070            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0 &
    59876071#ifdef ISO
     
    59966080            rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
    59976081            du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress)
    5998        CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &
     6082       CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, &
    59996083            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0 &
    60006084#ifdef ISO
     
    60556139       d_xt_ch4_dtime(:,:,:) = d_xt_ch4(:,:,:)*phys_tstep
    60566140#endif
    6057        CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &
     6141       CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, &
    60586142            'q_ch4', abortphy,flag_inhib_tend,itap,0 &
    60596143#ifdef ISO
     
    61216205! car on peut s'attendre a ce que les petites echelles produisent aussi de la TKE
    61226206! Mais attention, cela ne va pas dans le sens de la conservation de l'energie!
    6123           IF ((zstd(i).GT.1.0).AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
     6207          IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
    61246208             itest(i)=1
    61256209             igwd=igwd+1
     
    63816465    !
    63826466
    6383     IF (type_trac=='repr') THEN
     6467    IF (type_trac == 'repr') THEN
    63846468!MM pas d'impact, car on recupere q_seri,tr_seri,t_seri via phys_local_var_mod
    63856469!MM                               dans Reprobus
     
    64316515         presnivs, pphis,     pphi,     albsol1, &
    64326516         sh_in,   ch_in,    rhcl,      cldfra,   rneb, &
    6433          diafra,   cldliq,    itop_con, ibas_con, &
     6517         diafra,   radocond,    itop_con, ibas_con, &
    64346518         pmflxr,   pmflxs,    prfl,     psfl, &
    64356519         da,       phi,       mp,       upwd, &
     
    64486532
    64496533     CALL add_phys_tend &
    6450             (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,paprs,&
     6534            (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,&
    64516535             'rep',abortphy,flag_inhib_tend,itap,0)
    64526536        IF (abortphy==1) Print*,'ERROR ABORT REP'
     
    65256609    !   prlw = colonne eau liquide
    65266610    !   prlw = colonne eau solide
     6611    !   prbsw = colonne neige soufflee
    65276612    prw(:) = 0.
    65286613    prlw(:) = 0.
    65296614    prsw(:) = 0.
     6615    prbsw(:) = 0.
    65306616    DO k = 1, klev
    65316617       prw(:)  = prw(:)  + q_seri(:,k)*zmasse(:,k)
    65326618       prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k)
    65336619       prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k)
     6620       prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k)
    65346621    ENDDO
    65356622
     
    66026689          ENDIF
    66036690          !--ice_sursat: nqo=4, on ajoute rneb
    6604           IF (nqo == 4) THEN
     6691          IF (nqo.ge.4 .and. ok_ice_sursat) THEN
    66056692             d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep
    66066693          ENDIF
     6694
     6695           IF (nqo.ge.4 .and. ok_bs) THEN
     6696             d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep
     6697          ENDIF
     6698
     6699
    66076700       ENDDO
    66086701    ENDDO
     
    66846777    ql_ancien(:,:) = ql_seri(:,:)
    66856778    qs_ancien(:,:) = qs_seri(:,:)
     6779    qbs_ancien(:,:) = qbs_seri(:,:)
    66866780    rneb_ancien(:,:) = rneb_seri(:,:)
    66876781#ifdef ISO
     
    66936787    CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
    66946788    CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien)
     6789    CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien)
    66956790    ! !! RomP >>>
    66966791    IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:)
     
    68216916    CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
    68226917         pplay, lmax_th, aerosol_couple,                 &
    6823          ok_ade, ok_aie, ok_volcan, ivap, iliq, isol,    &
     6918         ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   &
    68246919         ok_sync, ptconv, read_climoz, clevSTD,          &
    68256920         ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
  • LMDZ6/trunk/libf/phylmdiso/surf_land_mod.F90

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

    r4285 r4523  
    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, &
     
    3434    USE cpl_mod,          ONLY : cpl_send_landice_fields
    3535    USE calcul_fluxs_mod
    36     USE phys_output_var_mod
     36    USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic
     37    USE phys_output_var_mod, ONLY : snow_o,zfra_o
    3738#ifdef ISO   
    3839    USE fonte_neige_mod,  ONLY : xtrun_off_lic
     
    4849!FC
    4950    USE ioipsl_getin_p_mod, ONLY : getin_p
    50 
     51    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs
    5152
    5253#ifdef CPP_INLANDSIS
     
    7273    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
    7374    REAL, DIMENSION(klon), INTENT(IN)             :: cdragh, cdragm
    74     REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow
     75    REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow, precip_bs
    7576    REAL, DIMENSION(klon), INTENT(IN)             :: temp_air, spechum
    7677    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefH, AcoefQ
     
    7879    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
    7980    REAL, DIMENSION(klon), INTENT(IN)             :: ps
    80     REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness
     81    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
    8182    REAL, DIMENSION(klon), INTENT(IN)             :: rugoro
    8283    REAL, DIMENSION(klon,nbsrf), INTENT(IN)       :: pctsrf
     
    118119!albedo SB <<<
    119120    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
     121    REAL, DIMENSION(klon), INTENT(OUT)            :: fluxbs
    120122    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    121123    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
     
    179181
    180182    REAL,DIMENSION(klon) :: alb1,alb2
     183    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    181184    REAL, DIMENSION (klon,6) :: alb6
     185    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, qsalt
     186    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
     187    REAL, DIMENSION(klon)  :: ws1, rhos, ustart
    182188! End definition
    183189!****************************************************************************************
     
    214220           PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic
    215221 
    216 !  z0m=1.e-3
    217 !  z0h = z0m
    218222  firstcall=.false.
    219223  ENDIF
    220224!******************************************************************************************
    221 !
     225
    222226! Initialize output variables
    223227    alb3(:) = 999999.
    224228    alb2(:) = 999999.
    225229    alb1(:) = 999999.
    226    
     230    fluxbs(:)=0. 
    227231    runoff(:) = 0.
    228232!****************************************************************************************
     
    232236    radsol(:) = 0.0
    233237    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     238
     239!****************************************************************************************
    234240
    235241!****************************************************************************************
     
    327333
    328334
    329 
    330335    ELSE
    331336
     
    342347    IF (soil_model) THEN
    343348       CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, &
    344     & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux)
    345 
     349        & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux)
    346350       cal(1:knon) = RCPD / soilcap(1:knon)
    347351       radsol(1:knon)  = radsol(1:knon) + soilflux(1:knon)
     
    406410         flux_u1, flux_v1)
    407411
    408 !****************************************************************************************
    409 ! Calculate snow height, age, run-off,..
     412
     413!****************************************************************************************
     414! Calculate albedo
     415!
     416!****************************************************************************************
     417 
     418    CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
     419
     420
     421! EV: following lines are obsolete since we set alb1 and alb2 to constant values
     422! I therefore comment them
     423!    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
     424!         0.6 * (1.0-zfra(1:knon))
     425!
     426!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
     427!       alb1(1 : knon)  = 0.6 !IM cf FH/GK
     428!       alb1(1 : knon)  = 0.82
     429!       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
     430!       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
     431!IM: KstaTER0.77 & LMD_ARMIP6   
     432
     433! Attantion: alb1 and alb2 are not the same!
     434    alb1(1:knon)  = alb_vis_sno_lic
     435    alb2(1:knon)  = alb_nir_sno_lic
     436
     437
     438!****************************************************************************************
     439! Rugosity
     440!
     441!****************************************************************************************
     442    z0m = z0m_landice
     443    z0h = z0h_landice
     444    !z0m = SQRT(z0m**2+rugoro**2)
     445
     446
     447
     448  ! Simple blowing snow param
     449  if (ok_bs) then
     450       ustart0 = 0.211
     451       rhoice = 920.0
     452       rho0 = 200.0
     453       rhomax=450.0
     454       rhohard=400.0
     455       tau_dens0=86400.0*10.  ! 10 days by default, in s
     456       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
     457       do i = 1, knon
     458           ! estimation of snow density
     459           ! snow density increases with snow age and
     460           ! increases even faster in case of sedimentation of blowing snow
     461           tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs))
     462           rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens))
     463           ! blowing snow flux formula used in MAR
     464           ws1(i)=(u1(i)**2+v1(i)**2)**0.5
     465           ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5
     466           ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax))
     467           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
     468           ! rhohard<450)
     469           esalt=1./(3.25*max(ustar(i),0.001))
     470           hsalt=0.08436*ustar(i)**1.27
     471           qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
     472           !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
     473           fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt)
     474       enddo
     475
     476       ! for outputs
     477       do j = 1, knon
     478          i = knindex(j)
     479          zxustartlic(i) = ustart(j)
     480          zxrhoslic(i) = rhos(j)
     481       enddo
     482
     483  endif
     484
     485
     486
     487!****************************************************************************************
     488! Calculate surface snow amount
    410489!   
    411490!****************************************************************************************
     491    IF (ok_bs) THEN
     492      precip_totsnow=precip_snow+precip_bs
     493      evap_totsnow=evap-fluxbs ! flux bs is positive towards the surface (snow erosion)
     494    ELSE
     495      precip_totsnow=precip_snow
     496      evap_totsnow=evap
     497    ENDIF
     498
    412499    CALL fonte_neige(knon, is_lic, knindex, dtime, &
    413          tsurf, precip_rain, precip_snow, &
    414          snow, qsol, tsurf_new, evap &
     500         tsurf, precip_rain, precip_totsnow, &
     501         snow, qsol, tsurf_new, evap_totsnow &
    415502#ifdef ISO   
    416503     & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag   &
     
    446533
    447534
    448 !****************************************************************************************
    449 ! Calculate albedo
    450 !
    451 !****************************************************************************************
    452     CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
    453 
    454     WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.
    455     zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0)))
    456     alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
    457          0.6 * (1.0-zfra(1:knon))
    458 !
    459 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
    460 !       alb1(1 : knon)  = 0.6 !IM cf FH/GK
    461 !       alb1(1 : knon)  = 0.82
    462 !       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
    463 !       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
    464 !IM: KstaTER0.77 & LMD_ARMIP6   
    465 
    466 ! Attantion: alb1 and alb2 are not the same!
    467     alb1(1:knon)  = alb_vis_sno_lic
    468     alb2(1:knon)  = alb_nir_sno_lic
    469 
    470 
    471 !****************************************************************************************
    472 ! Rugosity
    473 !
    474 !****************************************************************************************
    475     z0m=1.e-3
    476     z0h = z0m
    477     z0m = SQRT(z0m**2+rugoro**2)
    478 
     535    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.                                         
     536    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 
    479537
    480538
     
    494552          run_off_lic_frac(j) = pctsrf(i,is_lic)
    495553       ENDDO
    496        
     554
    497555       CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic, run_off_lic_frac)
    498556    ENDIF
     
    501559    runoff(1:knon)=run_off_lic(1:knon)/dtime
    502560
    503  
    504 !****************************************************************************************
    505 ! Etienne: comment these lines because of duplication just below
    506 !       snow_o=0.
    507 !       zfra_o = 0.
    508 !       DO j = 1, knon
    509 !           i = knindex(j)
    510 !           snow_o(i) = snow(j)
    511 !           zfra_o(i) = zfra(j)
    512 !       ENDDO
    513 !
    514 !****************************************************************************************
    515561       snow_o=0.
    516562       zfra_o = 0.
     
    553599!albedo SB <<<
    554600
    555  
    556  
    557601
    558602  END SUBROUTINE surf_landice
  • LMDZ6/trunk/libf/phylmdiso/surf_ocean_mod.F90

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