Changeset 4485 for LMDZ6/branches/blowing_snow
- Timestamp:
- Mar 30, 2023, 9:07:40 AM (20 months ago)
- Location:
- LMDZ6/branches/blowing_snow
- Files:
-
- 8 added
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/blowing_snow/DefLists/field_def_lmdz.xml
r4412 r4485 112 112 <field id="pluc" long_name="Convective Precip." unit="kg/(s*m2)" /> 113 113 <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)" /> 116 120 <field id="evap_lic" long_name="evaporation at surface lic" unit="kg/(s*m2)" /> 117 121 <field id="evap_oce" long_name="evaporation at surface oce" unit="kg/(s*m2)" /> … … 275 279 <field id="prw" long_name="Precipitable water" unit="kg/m2" /> 276 280 <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" /> 278 283 <field id="s_pblh" long_name="Boundary Layer Height" unit="m" /> 279 284 <field id="s_pblt" long_name="t at Boundary Layer Height" unit="K" /> … … 505 510 <field id="dqphy2d" long_name="Physics dQ" unit="(kg/m2)/s" /> 506 511 <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" /> 508 514 <field id="dqdyn2d" long_name="Dynamics dQ" unit="(kg/m2)/s" /> 509 515 <field id="dqldyn2d" long_name="Dynamics dQL" unit="(kg/m2)/s" /> 510 516 <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" /> 512 519 <field id="dqwak2d" long_name="Wake dQ" unit="(kg/m2)/s" /> 513 520 <field id="dqlsc2d" long_name="Condensation dQ" unit="(kg/m2)/s" /> … … 590 597 <field id="ovapinit" long_name="Specific humidity (begin of timestep)" unit="kg/kg" /> 591 598 <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" /> 593 601 <field id="geop" long_name="Geopotential height" unit="m2/s2" /> 594 602 <field id="geoph" field_ref="geop" long_name="Geopotential height" unit="m" > geop/9.80665 </field> … … 616 624 <field id="dqphy" long_name="Physics dQ" unit="(kg/kg)/s" /> 617 625 <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" /> 619 628 <field id="pr_con_l" long_name="Convective precipitation lic" unit="-" /> 620 629 <field id="pr_con_i" long_name="Convective precipitation ice" unit="-" /> 621 630 <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="-" /> 623 633 <field id="re" long_name="Cloud droplet effective radius" unit="um" /> 624 634 <field id="fl" long_name="Denominator of Cloud droplet effective radius" unit="-" /> … … 643 653 <field id="dqldyn" long_name="Dynamics dQL" unit="(kg/kg)/s" /> 644 654 <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" /> 646 657 <field id="dvdyn" long_name="Dynamics dV" unit="m/s2" /> 647 658 <field id="dtcon" long_name="Convection dT" unit="K/s" /> … … 673 684 <field id="dqvdf_w" long_name="dqvdf within_wake" unit="(kg/kg)/s" /> 674 685 <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" /> 676 691 <field id="dqlscth" long_name="dQ therm." unit="(kg/kg)/s" /> 677 692 <field id="dqlscst" long_name="dQ strat." unit="(kg/kg)/s" /> -
LMDZ6/branches/blowing_snow/DefLists/file_def_histhf_lmdz.xml
r4298 r4485 2 2 <file_definition> 3 3 <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"> 5 5 6 6 <!-- VARS 1D --> … … 12 12 13 13 <!-- VARS 2D --> 14 <field_group group_ref="remap_ 3h" >14 <field_group group_ref="remap_1h" > 15 15 <field_group grid_ref="grid_out" > 16 <field field_ref="phis" level=" 10" />16 <field field_ref="phis" level="5" /> 17 17 <field field_ref="aire" level="10" operation="once" /> 18 18 <field field_ref="contfracATM" level="5" operation="once" /> 19 19 <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" /> 22 22 <field field_ref="sza" level="10" /> 23 23 <field field_ref="ptstar" level="10" /> 24 24 <field field_ref="pt0" level="10" /> 25 <field field_ref="tsol" level=" 10" />25 <field field_ref="tsol" level="5" /> 26 26 <field field_ref="t2m" level="5" /> 27 27 <field field_ref="t2m_min" level="10" operation="minimum" /> … … 32 32 <field field_ref="t2m_sic" level="10" /> 33 33 <field field_ref="gusts" level="10" /> 34 <field field_ref="wind10m" level=" 10" />34 <field field_ref="wind10m" level="5" /> 35 35 <field field_ref="wind100m" level="10" /> 36 36 <field field_ref="wind10max" level="10" operation="maximum" /> 37 37 <field field_ref="sicf" level="10" /> 38 38 <field field_ref="q2m" level="5" /> 39 <field field_ref="ustar" level=" 10" />39 <field field_ref="ustar" level="5" /> 40 40 <field field_ref="u10m" level="5" /> 41 41 <field field_ref="v10m" level="5" /> … … 67 67 <field field_ref="plun" level="10" /> 68 68 <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" /> 72 76 <field field_ref="evap_lic" level="10" /> 73 77 <field field_ref="evap_oce" level="10" /> 74 78 <field field_ref="evap_sic" level="10" /> 75 <field field_ref="msnow" level=" 10" />79 <field field_ref="msnow" level="5" /> 76 80 <field field_ref="fsnow" level="10" /> 77 81 <field field_ref="tops" level="10" /> … … 99 103 <field field_ref="SWupSFC" level="10" /> 100 104 <field field_ref="SWupSFCclr" level="10" /> 101 <field field_ref="SWdnSFC" level=" 10" />105 <field field_ref="SWdnSFC" level="5" /> 102 106 <field field_ref="SWdnSFCclr" level="10" /> 103 107 <field field_ref="LWupSFC" level="10" /> 104 108 <field field_ref="LWupSFCclr" level="10" /> 105 <field field_ref="LWdnSFC" level=" 10" />109 <field field_ref="LWdnSFC" level="5" /> 106 110 <field field_ref="LWdnSFCclr" level="10" /> 107 111 <field field_ref="bils" level="10" /> … … 112 116 <field field_ref="bils_enthalp" level="10" /> 113 117 <field field_ref="bils_latent" level="10" /> 114 <field field_ref="sens" level=" 10" />118 <field field_ref="sens" level="5" /> 115 119 <field field_ref="sens_x" level="11" /> 116 120 <field field_ref="sens_w" level="11" /> … … 198 202 <field field_ref="cldm" level="10" /> 199 203 <field field_ref="cldh" level="10" /> 200 <field field_ref="cldt" level=" 10" />204 <field field_ref="cldt" level="5" /> 201 205 <field field_ref="cldq" level="10" /> 202 206 <field field_ref="lwp" level="10" /> … … 214 218 <field field_ref="wbeff" level="10" /> 215 219 <field field_ref="convoccur" level="10" /> 216 <field field_ref="prw" level=" 10" />220 <field field_ref="prw" level="5" /> 217 221 <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" /> 219 224 <field field_ref="s_pblh" level="10" /> 220 225 <field field_ref="s_pblt" level="10" /> … … 246 251 <field field_ref="u850" level="10" /> 247 252 <field field_ref="u700" level="10" /> 248 <field field_ref="u500" level=" 10" />253 <field field_ref="u500" level="5" /> 249 254 <field field_ref="u200" level="10" /> 250 255 <field field_ref="u100" level="10" /> … … 253 258 <field field_ref="v850" level="10" /> 254 259 <field field_ref="v700" level="10" /> 255 <field field_ref="v500" level=" 10" />260 <field field_ref="v500" level="5" /> 256 261 <field field_ref="v200" level="10" /> 257 262 <field field_ref="v100" level="10" /> … … 267 272 <field field_ref="t850" level="10" /> 268 273 <field field_ref="t700" level="10" /> 269 <field field_ref="t500" level=" 10" />274 <field field_ref="t500" level="5" /> 270 275 <field field_ref="t200" level="10" /> 271 276 <field field_ref="t100" level="10" /> … … 281 286 <field field_ref="z850" level="10" /> 282 287 <field field_ref="z700" level="10" /> 283 <field field_ref="z500" level=" 10" />288 <field field_ref="z500" level="5" /> 284 289 <field field_ref="z200" level="10" /> 285 290 <field field_ref="z100" level="10" /> … … 299 304 <field field_ref="v10_oce" level="10" /> 300 305 <field field_ref="v10_sic" level="10" /> 301 <field field_ref="rh2m" level=" 10" />306 <field field_ref="rh2m" level="5" /> 302 307 <field field_ref="rh2m_min" level="10" operation="minimum" /> 303 308 <field field_ref="rh2m_max" level="10" operation="maximum" /> … … 503 508 <field field_ref="concno3" level="10" /> 504 509 <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" /> 507 512 <field field_ref="temp" level="4" /> 508 513 <field field_ref="theta" level="10" /> 509 <field field_ref="ovap" level=" 10" />514 <field field_ref="ovap" level="5" /> 510 515 <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" /> 513 519 <field field_ref="geop" level="10" /> 514 520 <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" /> 517 523 <field field_ref="vitw" level="6" /> 518 <field field_ref="pres" level=" 10" />524 <field field_ref="pres" level="5" /> 519 525 <field field_ref="paprs" level="10" /> 520 526 <field field_ref="mass" level="10" /> 521 <field field_ref="zfull" level=" 10" />527 <field field_ref="zfull" level="5" /> 522 528 <field field_ref="zhalf" level="10" /> 523 529 <field field_ref="rneb" level="10" /> … … 525 531 <field field_ref="rnebls" level="10" /> 526 532 <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" /> 528 535 <field field_ref="ozone" level="10" /> 529 536 <field field_ref="upwd" level="10" /> 530 537 <field field_ref="ep" level="10" /> 531 538 <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" /> 534 541 <field field_ref="dqlphy" level="10" /> 535 542 <field field_ref="dqsphy" level="10" /> … … 537 544 <field field_ref="pr_con_i" level="10" /> 538 545 <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" /> 540 548 <field field_ref="re" level="10" /> 541 549 <field field_ref="fl" level="10" /> … … 555 563 <field field_ref="dnwd0" level="10" /> 556 564 <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" /> 559 567 <field field_ref="dqldyn" level="10" /> 560 568 <field field_ref="dqsdyn" level="10" /> … … 576 584 <field field_ref="dtlsc" level="10" /> 577 585 <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" /> 579 589 <field field_ref="beta_prec" level="10" /> 580 590 <field field_ref="dtvdf" level="10" /> -
LMDZ6/branches/blowing_snow/libf/dyn3d_common/infotrac.F90
r4433 r4485 37 37 ! |--------------------+-----------------------+-----------------+---------------+----------------------------| 38 38 ! | water in different | water tagging | water isotopes | other tracers | additional tracers moments | 39 ! | phases: H2O_[gls ]| isotopes | | | for higher order schemes |39 ! | phases: H2O_[glsb] | isotopes | | | for higher order schemes | 40 40 ! |--------------------+-----------------------+-----------------+---------------+----------------------------| 41 41 ! | | | | | | … … 66 66 ! | longName | Long name (with adv. scheme suffix) for outputs | ttext | | 67 67 ! | type | Type (so far: tracer or tag) | / | tracer,tag | 68 ! | phase | Phases list ("g"as / "l"iquid / "s"olid ) | / | [g][l][s]|68 ! | phase | Phases list ("g"as / "l"iquid / "s"olid / "b"lowing) | / | [g][l][s][b] | 69 69 ! | component | Name(s) of the merged/cumulated section(s) | / | coma-separated names | 70 70 ! | iGeneration | Generation (>=1) | / | | … … 92 92 ! | trac | ntiso | Isotopes + tagging tracers list + number | / | ntraciso | | 93 93 ! | zone | nzone | Geographic tagging zones list + number | / | ntraceurs_zone | | 94 ! | phase | nphas | Phases list + number | | [g][l][s], 1:3|94 ! | phase | nphas | Phases list + number | |[g][l][s][b],1:4 | 95 95 ! | iqIsoPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot | 96 96 ! | itZonIso | Index in "trac(1:ntiso)"= f(zone, name(1:niso)) | index_trac | 1:ntiso | … … 227 227 nbtr = nqINCA + nqCO2 !--- Number of tracers passed to phytrac 228 228 nqtrue = nbtr + nqo !--- Total number of "true" tracers 229 IF(ALL([2,3 ] /= nqo)) CALL abort_gcm(modname, 'Only 2 or 3water 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) 230 230 ALLOCATE(hadv(nqtrue), hadv_inca(nqINCA), conv_flg_inca(nqINCA), solsym_inca(nqINCA)) 231 231 ALLOCATE(vadv(nqtrue), vadv_inca(nqINCA), pbl_flg_inca(nqINCA)) -
LMDZ6/branches/blowing_snow/libf/misc/readTracFiles_mod.f90
r4454 r4485 114 114 !--- SOME PARAMETERS THAT ARE NOT LIKELY TO CHANGE OFTEN 115 115 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 initials116 CHARACTER(LEN=maxlen), PARAMETER :: old_phases = 'vlirb' !--- Old phases for water (no separator) 117 CHARACTER(LEN=maxlen), PARAMETER :: known_phases = 'glsrb' !--- Known phases initials 118 118 INTEGER, PARAMETER :: nphases = LEN_TRIM(known_phases) !--- Number of phases 119 119 CHARACTER(LEN=maxlen), SAVE :: phases_names(nphases) & !--- Known phases names 120 = ['gaseous', 'liquid ', 'solid ', 'cloud']120 = ['gaseous', 'liquid ', 'solid ', 'cloud ','blosno '] 121 121 CHARACTER(LEN=1), SAVE :: phases_sep = '_' !--- Phase separator 122 122 LOGICAL, SAVE :: tracs_merge = .TRUE. !--- Merge/stack tracers lists -
LMDZ6/branches/blowing_snow/libf/phylmd/add_phys_tend_mod.F90
r3435 r4485 16 16 CONTAINS 17 17 18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap)18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap) 19 19 ! ====================================================================== 20 20 ! Ajoute les tendances de couche limite, soit determinees par la … … 49 49 ! ------------ 50 50 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) 52 52 CHARACTER *(*) text 53 53 REAL paprs(klon,klev+1) … … 76 76 PRINT *, ' add_pbl_tend, zzdt ', zzdt 77 77 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) 79 79 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) 81 81 END IF 82 82 … … 87 87 ! $Id: add_phys_tend.F90 2611 2016-08-03 15:41:26Z jyg $ 88 88 ! 89 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi, paprs,text, &89 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, & 90 90 abortphy,flag_inhib_tend, itap, diag_mode) 91 91 !====================================================================== … … 102 102 USE dimphy, ONLY: klon, klev 103 103 USE 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_seri104 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri 105 105 USE phys_state_var_mod, ONLY: ftsol 106 106 USE geometry_mod, ONLY: longitude_deg, latitude_deg 107 107 USE print_control_mod, ONLY: prt_level 108 108 USE cmp_seri_mod 109 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &110 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col109 USE 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 111 111 IMPLICIT none 112 112 include "YOMCST.h" … … 116 116 !------------ 117 117 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdu, zdv 118 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi 118 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi, zdqbs 119 119 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs 120 120 CHARACTER*(*), INTENT(IN) :: text … … 136 136 ! Save variables, used in diagnostic mode (diag_mode=1). 137 137 REAL, DIMENSION(klon,klev) :: sav_u_seri, sav_v_seri 138 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_q _seri138 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri 139 139 REAL, DIMENSION(klon,klev) :: sav_t_seri 140 140 REAL, DIMENSION(klon,klev) :: sav_zdq … … 163 163 ! zh_ql_col---- total enthalpy of liquid watter (J/m2) 164 164 ! zh_qs_col---- total enthalpy of solid watter (J/m2) 165 ! zh_qbs_col---- total enthalpy of blowing snow (J/m2) 165 166 ! zqw_col------ total mass of watter vapour (kg/m2) 166 167 ! 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) 168 170 ! zek_col------ total kinetic energy (kg/m2) 169 171 ! … … 172 174 REAL zql_col(klon,2) 173 175 REAL zqs_col(klon,2) 176 REAL zqbs_col(klon,2) 174 177 REAL zek_col(klon,2) 175 178 REAL zh_dair_col(klon,2) 176 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2) 179 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2) 177 180 REAL zh_col(klon,2) 178 181 … … 213 216 sav_ql_seri(:,:) = ql_seri(:,:) 214 217 sav_qs_seri(:,:) = qs_seri(:,:) 218 sav_qbs_seri(:,:) = qbs_seri(:,:) 215 219 sav_q_seri(:,:) = q_seri(:,:) 216 220 sav_t_seri(:,:) = t_seri(:,:) … … 236 240 237 241 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), z ek_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)) 241 245 242 246 end if ! end if (fl_ebil .GT. 0) … … 250 254 ql_seri(:,:)=ql_seri(:,:)+zdql(:,:) 251 255 qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:) 256 qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:) 252 257 253 258 !====================================================================== … … 432 437 ql_seri(:,:)=ql_seri(:,:)-zdql(:,:) 433 438 qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:) 439 qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:) 434 440 ENDIF 435 441 … … 446 452 447 453 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), z ek_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)) 451 457 452 458 ! ------------------------------------------------ … … 457 463 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 458 464 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(:) 460 467 461 468 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 465 472 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 466 473 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 467 475 468 476 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 476 484 ql_seri(:,:) = sav_ql_seri(:,:) 477 485 qs_seri(:,:) = sav_qs_seri(:,:) 486 qbs_seri(:,:) = sav_qbs_seri(:,:) 478 487 q_seri(:,:) = sav_q_seri(:,:) 479 488 t_seri(:,:) = sav_t_seri(:,:) … … 484 493 END SUBROUTINE add_phys_tend 485 494 486 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &487 zdu,zdv,zdt,zdq,zdql,zdqs, paprs,text)495 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, & 496 zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text) 488 497 !====================================================================== 489 498 ! Ajoute les tendances des variables physiques aux variables … … 501 510 USE print_control_mod, ONLY: prt_level 502 511 USE cmp_seri_mod 503 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &504 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col512 USE 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 505 514 IMPLICIT none 506 515 include "YOMCST.h" … … 511 520 INTEGER, INTENT(IN) :: nlon, nlev 512 521 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: uu, vv 513 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs 522 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs 514 523 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdu, zdv 515 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs 524 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs, zdqbs 516 525 REAL, DIMENSION(nlon,nlev+1), INTENT(IN) :: paprs 517 526 CHARACTER*(*), INTENT(IN) :: text … … 520 529 !-------- 521 530 REAL, DIMENSION(nlon,nlev) :: uu_n, vv_n 522 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n 531 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n, qbs_n 523 532 524 533 … … 543 552 ! zqw_col------ total mass of watter vapour (kg/m2) 544 553 ! 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) 546 556 ! zek_col------ total kinetic energy (kg/m2) 547 557 ! … … 550 560 REAL zql_col(nlon,2) 551 561 REAL zqs_col(nlon,2) 562 REAL zqbs_col(nlon,2) 552 563 REAL zek_col(nlon,2) 553 564 REAL zh_dair_col(nlon,2) 554 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2) 565 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2) 555 566 REAL zh_col(nlon,2) 556 567 … … 585 596 586 597 CALL integr_v(nlon, nlev, rcpv, & 587 temp, qv, ql, qs, uu, vv, zairm, &588 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_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)) 590 601 591 602 end if ! end if (fl_ebil .GT. 0) … … 600 611 ql_n(:,:)=ql(:,:)+zdql(:,:) 601 612 qs_n(:,:)=qs(:,:)+zdqs(:,:) 613 qbs_n(:,:)=qbs(:,:)+zdqbs(:,:) 602 614 temp_n(:,:)=temp(:,:)+zdt(:,:) 603 615 … … 616 628 617 629 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), z ek_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)) 621 633 622 634 ! ------------------------------------------------ … … 627 639 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 628 640 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(:) 630 643 631 644 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 639 652 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 640 653 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 641 655 642 656 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 649 663 650 664 SUBROUTINE integr_v(nlon, nlev, zcpvap, & 651 temp, qv, ql, qs, uu, vv, zairm, &652 zqw_col, zql_col, zqs_col, z ek_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) 654 668 655 669 IMPLICIT none … … 658 672 INTEGER, INTENT(IN) :: nlon,nlev 659 673 REAL, INTENT(IN) :: zcpvap 660 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, uu, vv674 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs, uu, vv 661 675 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zairm 662 676 REAL, DIMENSION(nlon), INTENT(OUT) :: zqw_col 663 677 REAL, DIMENSION(nlon), INTENT(OUT) :: zql_col 664 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col 678 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col, zqbs_col 665 679 REAL, DIMENSION(nlon), INTENT(OUT) :: zek_col 666 680 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_dair_col 667 681 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qw_col 668 682 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_ql_col 669 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col 683 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col, zh_qbs_col 670 684 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_col 671 685 … … 677 691 zql_col(:) = 0. 678 692 zqs_col(:) = 0. 693 zqbs_col(:) = 0. 679 694 zek_col(:) = 0. 680 695 zh_dair_col(:) = 0. … … 682 697 zh_ql_col(:) = 0. 683 698 zh_qs_col(:) = 0. 699 zh_qbs_col(:) = 0. 684 700 685 701 !JLD write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice … … 694 710 zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k) 695 711 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) 696 713 ! Kinetic Energy 697 714 zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k) … … 702 719 zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k) !jyg 703 720 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 704 722 END DO 705 723 END DO 706 724 ! 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(:) 708 726 709 727 END SUBROUTINE integr_v … … 720 738 USE dimphy, ONLY: klon, klev 721 739 USE phys_state_var_mod, ONLY : phys_tstep 722 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con 740 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall 723 741 USE geometry_mod, ONLY: longitude_deg, latitude_deg 724 742 USE print_control_mod, ONLY: prt_level 725 743 USE cmp_seri_mod 726 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &727 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col744 USE 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 728 746 USE 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 &747 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri & 730 748 & , rain_lsc, snow_lsc 731 749 USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd … … 764 782 bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) & 765 783 & + (-(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) 766 787 CASE("convection") param 767 788 bilq_bnd = - rain_con(1) - snow_con(1) … … 800 821 if ( prt_level .GE. 5) then 801 822 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) 804 825 end if 805 826 -
LMDZ6/branches/blowing_snow/libf/phylmd/clesphys.h
r4458 r4485 100 100 LOGICAL :: ok_daily_climoz 101 101 LOGICAL :: ok_new_lscp 102 LOGICAL :: ok_bs, ok_rad_bs 102 103 ! flag to bypass or not the phytrac module 103 104 INTEGER :: iflag_phytrac … … 150 151 & , ok_chlorophyll,ok_conserv_q, adjust_tropopause & 151 152 & , 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 & 153 154 & , iflag_thermals,nsplit_thermals, tau_thermals 154 155 save /clesphys/ -
LMDZ6/branches/blowing_snow/libf/phylmd/conf_phys_m.F90
r4466 r4485 255 255 LOGICAL, SAVE :: ok_new_lscp_omp 256 256 LOGICAL, SAVE :: ok_icefra_lscp_omp 257 LOGICAL, SAVE :: ok_bs_omp, ok_rad_bs_omp 257 258 258 259 … … 2359 2360 !Config Help = ... 2360 2361 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 = ... 2361 2380 2362 2381 ecrit_LES_omp = 1./8. … … 2473 2492 inertie_lic = inertie_lic_omp 2474 2493 inertie_sno = inertie_sno_omp 2494 ok_bs = ok_bs_omp 2495 ok_rad_bs=ok_rad_bs_omp 2475 2496 rad_froid = rad_froid_omp 2476 2497 rad_chau1 = rad_chau1_omp … … 2982 3003 WRITE(lunout,*) ' inertie_lic = ', inertie_lic 2983 3004 WRITE(lunout,*) ' inertie_sno = ', inertie_sno 3005 WRITE(lunout,*) ' ok_bs = ', ok_bs 3006 WRITE(lunout,*) ' ok_rad_bs = ', ok_rad_bs 2984 3007 WRITE(lunout,*) ' f_cdrag_ter = ',f_cdrag_ter 2985 3008 WRITE(lunout,*) ' f_cdrag_oce = ',f_cdrag_oce -
LMDZ6/branches/blowing_snow/libf/phylmd/fonte_neige_mod.F90
r3900 r4485 164 164 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain 165 165 REAL, DIMENSION(klon), INTENT(IN) :: precip_snow 166 167 ! Input/Output variables166 167 ! Input/Output variables 168 168 !**************************************************************************************** 169 169 -
LMDZ6/branches/blowing_snow/libf/phylmd/infotrac_phy.F90
r4432 r4485 68 68 ! | longName | Long name (with adv. scheme suffix) for outputs | ttext | | 69 69 ! | 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] | 71 71 ! | component | Name(s) of the merged/cumulated section(s) | / | coma-separated names | 72 72 ! | iGeneration | Generation (>=1) | / | | … … 92 92 ! | trac | ntiso | Isotopes + tagging tracers list + number | / | ntraciso | | 93 93 ! | zone | nzone | Geographic tagging zones list + number | / | ntraceurs_zone | | 94 ! | phase | nphas | Phases list + number | | [g][l][s], 1:3|94 ! | phase | nphas | Phases list + number | |[g][l][s][b] 1:4 | 95 95 ! | iqIsoPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot | 96 96 ! | itZonIso | Index in "trac(1:ntiso)"= f(zone, name(1:niso)) | index_trac | 1:ntiso | -
LMDZ6/branches/blowing_snow/libf/phylmd/ocean_forced_mod.F90
r3974 r4485 167 167 SUBROUTINE ocean_forced_ice( & 168 168 itime, dtime, jour, knon, knindex, & 169 tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, 169 tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air,spechum, & 170 170 AcoefH, AcoefQ, BcoefH, BcoefQ, & 171 171 AcoefU, AcoefV, BcoefU, BcoefV, & -
LMDZ6/branches/blowing_snow/libf/phylmd/pbl_surface_mod.F90
r4478 r4485 21 21 USE cpl_mod, ONLY : gath2cpl 22 22 USE climb_hq_mod, ONLY : climb_hq_down, climb_hq_up 23 USE climb_qbs_mod, ONLY : climb_qbs_down, climb_qbs_up 23 24 USE climb_wind_mod, ONLY : climb_wind_down, climb_wind_up 24 25 USE coef_diff_turb_mod, ONLY : coef_diff_turb … … 184 185 rlon, rlat, rugoro, rmu0, & 185 186 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, & 187 188 gustiness, & 188 t, q, u, v, &189 t, q, qbs, u, v, & 189 190 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 190 191 !! t_x, q_x, t_w, q_w, & … … 198 199 beta, & 199 200 !>jyg 200 alb_dir_m, alb_dif_m, zxsens, zxevap, &201 alb_dir_m, alb_dif_m, zxsens, zxevap, zxsnowerosion, & 201 202 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 202 203 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, & 204 205 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 205 206 d_t_w, d_q_w, & … … 224 225 rh2m, zxfluxu, zxfluxv, & 225 226 z0m, z0h, agesno, sollw, solsw, & 226 d_ts, evap, fluxlat, t2m, &227 d_ts, evap, fluxlat, t2m, & 227 228 wfbils, wfbilo, wfevap, wfrain, wfsnow, & 228 229 flux_t, flux_u, flux_v, & … … 230 231 !jyg< 231 232 !! 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, & 233 234 !>jyg 234 235 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 317 318 dser, dt_ds, zsig, zmea 318 319 use phys_output_var_mod, only: tkt, tks, taur, sss 320 use blowing_snow_ini_mod, only : zeta_bs 319 321 #ifdef CPP_XIOS 320 322 USE wxios, ONLY: missing_val … … 351 353 REAL, DIMENSION(klon), INTENT(IN) :: rain_f ! rain fall 352 354 REAL, DIMENSION(klon), INTENT(IN) :: snow_f ! snow fall 355 REAL, DIMENSION(klon), INTENT(IN) :: bs_f ! blowing snow fall 353 356 REAL, DIMENSION(klon), INTENT(IN) :: solsw_m ! net shortwave radiation at mean surface 354 357 REAL, DIMENSION(klon), INTENT(IN) :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface … … 356 359 REAL, DIMENSION(klon,klev), INTENT(IN) :: t ! temperature (K) 357 360 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) 358 362 REAL, DIMENSION(klon,klev), INTENT(IN) :: u ! u speed 359 363 REAL, DIMENSION(klon,klev), INTENT(IN) :: v ! v speed … … 420 424 ! (=> positive sign upwards) 421 425 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 422 427 REAL, DIMENSION(klon), INTENT(OUT) :: zxtsol ! temperature at surface, mean for each grid point 423 428 !!! jyg le ??? … … 436 441 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_u ! change in u speed 437 442 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 438 445 439 446 REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1) … … 495 502 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 496 503 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 497 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface504 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 498 505 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 499 506 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 517 524 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxt ! sensible heat flux, mean for each grid point 518 525 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 519 527 REAL, DIMENSION(klon, nbsrf),INTENT(OUT) :: q2m ! water vapour at 2 meter height 520 528 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 521 531 522 532 ! Martin … … 563 573 REAL, DIMENSION(klon) :: yalb,yalb_vis 564 574 !albedo SB <<< 565 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1 575 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1, yqbs1 566 576 REAL, DIMENSION(klon) :: yqa 567 577 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 569 579 REAL, DIMENSION(klon) :: ysolsw, ysollw 570 580 REAL, DIMENSION(klon) :: yfder 571 581 REAL, DIMENSION(klon) :: yrugoro 572 582 REAL, DIMENSION(klon) :: yfluxlat 583 REAL, DIMENSION(klon) :: yfluxbs 573 584 REAL, DIMENSION(klon) :: y_d_ts 574 585 REAL, DIMENSION(klon) :: y_flux_t1, y_flux_q1 575 586 REAL, DIMENSION(klon) :: y_dflux_t, y_dflux_q 576 587 REAL, DIMENSION(klon) :: y_flux_u1, y_flux_v1 588 REAL, DIMENSION(klon) :: y_flux_bs, y_flux0 577 589 REAL, DIMENSION(klon) :: yt2m, yq2m, yu10m 578 590 INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w … … 601 613 REAL, DIMENSION(klon) :: AcoefH, AcoefQ, BcoefH, BcoefQ 602 614 REAL, DIMENSION(klon) :: AcoefU, AcoefV, BcoefU, BcoefV 615 REAL, DIMENSION(klon) :: AcoefQBS, BcoefQBS 603 616 REAL, DIMENSION(klon) :: ypsref 604 617 REAL, DIMENSION(klon) :: yevap, yevap_pot, ytsurf_new, yalb3_new … … 609 622 REAL, DIMENSION(klon) :: meansqT ! mean square deviation of subsurface temperatures 610 623 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 612 625 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 614 627 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 616 629 REAL, DIMENSION(klon) :: ycdragh, ycdragq, ycdragm 617 630 REAL, DIMENSION(klon,klev) :: yu, yv 618 REAL, DIMENSION(klon,klev) :: yt, yq 631 REAL, DIMENSION(klon,klev) :: yt, yq, yqbs 619 632 REAL, DIMENSION(klon,klev) :: ypplay, ydelp 620 633 REAL, DIMENSION(klon,klev) :: delp … … 678 691 REAL, DIMENSION(klon,klev) :: CcoefH, CcoefQ, DcoefH, DcoefQ 679 692 REAL, DIMENSION(klon,klev) :: CcoefU, CcoefV, DcoefU, DcoefV 693 REAL, DIMENSION(klon,klev) :: CcoefQBS, DcoefQBS 680 694 REAL, DIMENSION(klon,klev) :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x 681 695 REAL, DIMENSION(klon,klev) :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w … … 683 697 REAL, DIMENSION(klon,klev) :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w 684 698 REAL, DIMENSION(klon,klev) :: Kcoef_hq, Kcoef_m, gama_h, gama_q 699 REAL, DIMENSION(klon,klev) :: gama_qbs, Kcoef_qbs 685 700 REAL, DIMENSION(klon,klev) :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x 686 701 REAL, DIMENSION(klon,klev) :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w … … 862 877 REAL, DIMENSION(klon,nbsrf) :: zx_t1 863 878 REAL, DIMENSION(klon, nbsrf) :: alb ! mean albedo for whole SW interval 879 REAL, DIMENSION(klon,nbsrf) :: snowerosion 864 880 REAL, DIMENSION(klon) :: ylwdown ! jg : temporary (ysollwdown) 865 881 REAL, DIMENSION(klon) :: ygustiness ! jg : temporary (ysollwdown) … … 980 996 alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0. 981 997 !albedo SB <<< 982 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. 998 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0. 983 999 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0. 984 1000 zxfluxlat(:)=0. 985 1001 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 986 1002 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. 988 1004 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0. 989 1005 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0. … … 1005 1021 d_ts(:,:)=0. 1006 1022 evap(:,:)=0. 1023 snowerosion(:,:)=0. 1007 1024 fluxlat(:,:)=0. 1008 1025 wfbils(:,:)=0. ; wfbilo(:,:)=0. 1009 1026 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0. 1010 1027 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0. 1028 flux_qbs(:,:,:)=0. 1011 1029 dflux_t(:)=0. ; dflux_q(:)=0. 1012 1030 zxsnow(:)=0. 1013 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0. 1031 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0. 1014 1032 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0. 1015 1033 runoff(:)=0. … … 1048 1066 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 1049 1067 !albedo SB <<< 1050 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.01068 yrain_f = 0.0 ; ysnow_f = 0.0 ; ybs_f=0.0 ; yfder = 0.0 ; ysolsw = 0.0 1051 1069 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 1053 1071 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 1054 1072 yq = 0.0 ; y_dflux_t = 0.0 ; y_dflux_q = 0.0 1073 yqbs(:,:)=0.0 1055 1074 yrugoro = 0.0 ; ywindsp = 0.0 1056 1075 !! 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 1058 1077 !! flux_u = 0.0 ; flux_v = 0.0 ; d_t = 0.0 ; d_q = 0.0 1059 1078 !! d_t_diss= 0.0 ;d_u = 0.0 ; d_v = 0.0 … … 1070 1089 ycldt = 0.0 ; yrmu0 = 0.0 1071 1090 ! Martin 1091 y_d_qbs(:,:)=0.0 1072 1092 1073 1093 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 1395 1415 yrain_f(j) = rain_f(i) 1396 1416 ysnow_f(j) = snow_f(i) 1417 ybs_f(j) = bs_f(i) 1397 1418 yagesno(j) = agesno(i,nsrf) 1398 1419 yfder(j) = fder(i) … … 1406 1427 yu1(j) = u(i,1) 1407 1428 yv1(j) = v(i,1) 1429 yqbs1(j) = qbs(i,1) 1408 1430 ypaprs(j,klev+1) = paprs(i,klev+1) 1409 1431 !jyg< … … 1419 1441 !!! nrlmd le 13/06/2011 1420 1442 y_delta_tsurf(j)=delta_tsurf(i,nsrf) 1421 !!! 1443 yfluxbs(j)=0.0 1444 y_flux_bs(j) = 0.0 1422 1445 ENDDO 1423 1446 ! >> PC … … 1458 1481 yt(j,k) = t(i,k) 1459 1482 yq(j,k) = q(i,k) 1483 yqbs(j,k)=qbs(i,k) 1460 1484 ENDDO 1461 1485 ENDDO … … 1880 1904 ENDIF ! (iflag_split .eq.0) 1881 1905 !!! 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 1882 1920 1883 1921 !**************************************************************************************** … … 2057 2095 debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, & 2058 2096 !!jyg yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2059 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, y t1, yq1,&2097 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2060 2098 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2061 2099 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2063 2101 ylwdown, yq2m, yt2m, & 2064 2102 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,& 2066 2104 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 2067 2105 y_flux_u1, y_flux_v1, & … … 2106 2144 yrmu0, ylwdown, yalb, zgeo1, & 2107 2145 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,& 2110 2147 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2111 2148 AcoefU, AcoefV, BcoefU, BcoefV, & 2112 2149 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2113 ysnow, yqsurf, yqsol, yagesno, &2150 ysnow, yqsurf, yqsol,yqbs1, yagesno, & 2114 2151 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 2115 y tsurf_new, y_dflux_t, y_dflux_q, &2152 yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, & 2116 2153 yzmea, yzsig, ycldt, & 2117 2154 ysnowhgt, yqsnow, ytoice, ysissnow, & … … 2147 2184 itap, dtime, jour, knon, ni, & 2148 2185 !!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, y t(:,1), yq(:,1),& ! ym missing init2186 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),& ! ym missing init 2150 2187 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2151 2188 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2277 2314 ENDDO 2278 2315 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 2279 2323 ! 2280 2324 ! ------------------------------------------------------------------------------ … … 2583 2627 ! 2584 2628 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 2585 2639 !!! 2586 2640 !! … … 2696 2750 !!! 2697 2751 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 2703 2764 DO j = 1, knon 2704 2765 i = ni(j) 2705 2766 evap(i,nsrf) = - flux_q(i,1,nsrf) !jyg 2767 if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif 2706 2768 beta(i,nsrf) = ybeta(j) !jyg 2707 2769 d_ts(i,nsrf) = y_d_ts(j) … … 2873 2935 ENDDO 2874 2936 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 2875 2947 2876 2948 ! print*,'Dans pbl OK4' … … 3327 3399 fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i) 3328 3400 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 3329 3417 !!! 3330 3418 -
LMDZ6/branches/blowing_snow/libf/phylmd/phyaqua_mod.F90
r4463 r4485 360 360 ql_ancien = 0. 361 361 qs_ancien = 0. 362 qbs_ancien = 0. 362 363 u_ancien = 0. 363 364 v_ancien = 0. … … 365 366 prlw_ancien = 0. 366 367 prsw_ancien = 0. 368 prbsw_ancien= 0. 367 369 368 370 ale_wake = 0. -
LMDZ6/branches/blowing_snow/libf/phylmd/phyredem.F90
r4389 r4485 15 15 ftsol, beta_aridity, delta_tsurf, falb_dir, & 16 16 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, & 18 18 agesno, zmea, zstd, zsig, zgam, zthe, zpic, & 19 19 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, & 22 22 v_ancien, clwcon, rnebcon, ratqs, pbl_tke, & 23 23 wake_delta_pbl_tke, zmax0, f0, sig1, w01, & … … 243 243 244 244 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 245 251 246 252 CALL put_field(pass,"RNEBANCIEN", "RNEBANCIEN", rneb_ancien) -
LMDZ6/branches/blowing_snow/libf/phylmd/phys_local_var_mod.F90
r4118 r4485 14 14 REAL, SAVE, ALLOCATABLE :: ql_seri(:,:),qs_seri(:,:) 15 15 !$OMP THREADPRIVATE(ql_seri,qs_seri) 16 REAL, SAVE, ALLOCATABLE :: qbs_seri(:,:) 17 !$OMP THREADPRIVATE(qbs_seri) 16 18 REAL, SAVE, ALLOCATABLE :: u_seri(:,:), v_seri(:,:) 17 19 !$OMP THREADPRIVATE(u_seri, v_seri) … … 26 28 REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:) 27 29 !$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) 32 34 REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:) 33 35 !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn) … … 69 71 REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:) 70 72 !$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) 73 75 REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:) 74 76 !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf) … … 78 80 REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:) 79 81 !$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) 80 84 !>nrlmd+jyg 81 85 REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:) … … 307 311 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt 308 312 !$OMP THREADPRIVATE(JrNt) 309 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw310 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)313 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw 314 !$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw) 311 315 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m 312 316 !$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m) … … 325 329 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte 326 330 !$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte) 331 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic 332 !$OMP THREADPRIVATE(zxustartlic, zxrhoslic) 327 333 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving 328 334 !$OMP THREADPRIVATE(zxfqcalving) … … 446 452 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi 447 453 !$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi) 448 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca 449 !$OMP THREADPRIVATE(prfl, psfl, fraca )454 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl 455 !$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl) 450 456 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2 451 457 !$OMP THREADPRIVATE(Vprecip, zw2) … … 603 609 604 610 IMPLICIT NONE 605 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev) )611 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 606 612 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 607 613 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf)) … … 610 616 ALLOCATE(tr_seri(klon,klev,nbtr)) 611 617 ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev)) 612 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev) )613 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon) )618 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev)) 619 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon)) 614 620 ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev)) 615 621 ALLOCATE(d_tr_dyn(klon,klev,nbtr)) !RomP … … 634 640 ALLOCATE(plul_st(klon),plul_th(klon)) 635 641 ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev)) 636 642 ALLOCATE (d_qbs_vdf(klon,klev)) 643 ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev)) 637 644 ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev)) 638 645 ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev)) … … 760 767 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon)) 761 768 ALLOCATE(JrNt(klon)) 762 ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))763 ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))769 ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon)) 770 ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon)) 764 771 ALLOCATE(s_lcl(klon)) 765 772 ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon)) … … 776 783 ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon)) 777 784 ALLOCATE(zxrunofflic(klon)) 785 ALLOCATE(zxustartlic(klon), zxrhoslic(klon)) 786 zxustartlic(:)=0. ; zxrhoslic(:)=0. 778 787 ALLOCATE(rain_lsc(klon)) 779 788 ALLOCATE(rain_num(klon)) … … 852 861 ALLOCATE(prfl(klon, klev+1)) 853 862 ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1)) 863 ALLOCATE(bsfl(klon,klev+1)) 854 864 ALLOCATE(zw2(klon, klev+1)) 855 865 … … 933 943 USE indice_sol_mod 934 944 IMPLICIT NONE 935 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri )945 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 936 946 DEALLOCATE(u_seri,v_seri) 937 947 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime) … … 939 949 DEALLOCATE(tr_seri) 940 950 DEALLOCATE(d_t_dyn,d_q_dyn) 941 DEALLOCATE(d_ql_dyn,d_qs_dyn )942 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d )951 DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn) 952 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d) 943 953 DEALLOCATE(d_u_dyn,d_v_dyn) 944 954 DEALLOCATE(d_tr_dyn) !RomP … … 963 973 DEALLOCATE(plul_st,plul_th) 964 974 DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss) 975 DEALLOCATE(d_qbs_vdf) 976 DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs) 965 977 DEALLOCATE(d_u_vdf,d_v_vdf) 966 978 DEALLOCATE(d_t_oli,d_t_oro) … … 1072 1084 DEALLOCATE(cldm, cldq, cldt, qsat2m) 1073 1085 DEALLOCATE(JrNt) 1074 DEALLOCATE(dthmin, evap, fder, plcl, plfc)1075 DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)1086 DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc) 1087 DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl) 1076 1088 DEALLOCATE(s_pblh, s_pblt, s_therm) 1077 1089 ! … … 1086 1098 DEALLOCATE(zxfqcalving, zxfluxlat) 1087 1099 DEALLOCATE(zxrunofflic) 1100 DEALLOCATE(zxustartlic, zxrhoslic) 1088 1101 DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf) 1089 1102 DEALLOCATE(rain_lsc) … … 1154 1167 1155 1168 1156 DEALLOCATE(prfl, psfl, fraca, Vprecip)1169 DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip) 1157 1170 DEALLOCATE(zw2) 1158 1171 -
LMDZ6/branches/blowing_snow/libf/phylmd/phys_output_ctrlout_mod.F90
r4412 r4485 378 378 TYPE(ctrl_out), SAVE :: o_snow = ctrl_out((/ 1, 1, 10, 10, 5, 10, 11, 11, 11, 11/), & 379 379 '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) /)) 380 382 TYPE(ctrl_out), SAVE :: o_evap = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), & 381 383 '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) /)) 383 390 TYPE(ctrl_out), SAVE :: o_sens_prec_liq_oce = ctrl_out((/ 5, 5, 10, 10, 5, 10, 11, 11, 11, 11/), & 384 391 'sens_rain_oce', 'Sensible heat flux of liquid prec. over ocean', 'W/m2', (/ ('', i=1, 10) /)) … … 743 750 TYPE(ctrl_out), SAVE :: o_prsw = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), & 744 751 '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) /)) 745 754 TYPE(ctrl_out), SAVE :: o_s_pblh = ctrl_out((/ 1, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 746 755 's_pblh', 'Boundary Layer Height', 'm', (/ ('', i=1, 10) /)) … … 1432 1441 TYPE(ctrl_out), SAVE :: o_ocond = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), & 1433 1442 '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) /)) 1434 1445 TYPE(ctrl_out), SAVE :: o_wvapp = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1435 1446 'wvapp', '', '', (/ ('', i=1, 10) /)) … … 1494 1505 TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1495 1506 '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) /)) 1496 1511 TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1497 1512 'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /)) … … 1502 1517 TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1503 1518 '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) /)) 1504 1521 TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1505 1522 're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /)) … … 1599 1616 TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1600 1617 '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) /)) 1601 1622 TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1602 1623 'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /)) … … 1673 1694 TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1674 1695 '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) /)) 1675 1704 1676 1705 !!!!!!!!!!!!!!!! Specifique thermiques -
LMDZ6/branches/blowing_snow/libf/phylmd/phys_output_var_mod.F90
r4370 r4485 30 30 REAL, SAVE, ALLOCATABLE :: d_qw_col(:) ! watter vapour mass budget for each column (kg/m2/s) 31 31 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) 33 34 REAL, SAVE, ALLOCATABLE :: d_qt_col(:) ! total watter mass budget for each column (kg/m2/s) 34 35 REAL, SAVE, ALLOCATABLE :: d_ek_col(:) ! kinetic energy budget for each column (W/m2) … … 36 37 REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:) ! enthalpy budget of watter vapour for each column (W/m2) 37 38 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) 39 41 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_q t_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) 42 44 43 45 ! Outputs used in cloudth_vert to extract the moments of the horizontal and … … 173 175 174 176 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_q t_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_q t_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. 179 181 180 182 ! Outputs used in cloudth_vert … … 223 225 deallocate(sza_o) 224 226 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_q t_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) 227 229 228 230 ! Outputs used in cloudth_vert -
LMDZ6/branches/blowing_snow/libf/phylmd/phys_output_write_mod.F90
r4389 r4485 17 17 SUBROUTINE phys_output_write(itap, pdtphys, paprs, pphis, & 18 18 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, & 20 20 ptconv, read_climoz, clevSTD, ptconvth, & 21 21 d_u, d_t, qx, d_qx, zmasse, flag_aerosol, flag_aerosol_strat, ok_cdnc) … … 47 47 o_psol, o_mass, o_qsurf, o_qsol, & 48 48 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 50 51 o_tops, o_tops0, o_topl, o_topl0, & 51 52 o_SWupTOA, o_SWupTOAclr, o_SWupTOAcleanclr, o_SWdnTOA, o_fdiffSWdnSFC, & … … 81 82 o_Mipsh, o_Ma, & 82 83 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, & 84 85 o_s_therm, o_uSTDlevs, o_vSTDlevs, & 85 86 o_wSTDlevs, o_zSTDlevs, o_qSTDlevs, & … … 106 107 o_weakinv, o_dthmin, o_cldtau, & 107 108 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, & 109 110 o_rh2m, & 110 111 o_qsat2m, o_tpot, o_tpote, o_SWnetOR, & … … 134 135 o_cldicemxrat, o_cldwatmxrat, o_reffclwtop, o_ec550aer, & 135 136 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, & 137 138 o_vitu, o_vitv, o_vitw, o_pres, o_paprs, & 138 139 o_zfull, o_zhalf, o_rneb, o_rnebjn, o_rnebcon, & 139 140 o_rnebls, o_rneblsvol, o_rhum, o_rhl, o_rhi, o_ozone, o_ozone_light, & 140 141 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, & 142 143 o_ages_srf, o_snow_srf, o_alb1, o_alb2, o_tke, o_tke_dissip, & 143 144 o_tke_max, o_kz, o_kz_max, o_clwcon, & 144 145 o_dtdyn, o_dqdyn, o_dqdyn2d, o_dqldyn, o_dqldyn2d, & 145 o_dqsdyn, o_dqsdyn2d, o_d udyn, o_dvdyn, &146 o_dqsdyn, o_dqsdyn2d, o_dqbsdyn, o_dqbsdyn2d, o_dudyn, o_dvdyn, & 146 147 o_dtcon, o_tntc, o_ducon, o_dvcon, & 147 148 o_dqcon, o_dqcon2d, o_tnhusc, o_tnhusc, o_dtlsc, & … … 151 152 o_ptconvth, o_lmaxth, o_dtvdf, & 152 153 o_dtdis, o_dqvdf, o_dqvdf2d, o_dteva, o_dqeva, o_dqeva2d, & 154 o_dqbsvdf, o_dtbs, o_dqbs, o_dqbsbs, & 153 155 o_ptconv, o_ratqs, o_dtthe, & 154 156 o_duthe, o_dvthe, o_ftime_th, & … … 241 243 USE phys_state_var_mod, ONLY: heat_volc, cool_volc !NL 242 244 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,& 244 246 qsol, z0m, z0h, fevap, agesno, & 245 247 nday_rain, rain_con, snow_con, & … … 275 277 USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, & 276 278 zn2mout, t2m_min_mon, t2m_max_mon, evap, & 279 snowerosion, zxustartlic, zxrhoslic, & 277 280 l_mixmin,l_mix, tke_dissip, & 278 281 zu10m, zv10m, zq2m, zustar, zxqsurf, & … … 288 291 uwat, vwat, & 289 292 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, & 291 294 s_pblh, s_pblt, s_lcl, s_therm, uwriteSTD, & 292 295 vwriteSTD, wwriteSTD, phiwriteSTD, qwriteSTD, & … … 308 311 alp_bl_stat, alp_bl_fluct_tke, slab_wfbils, & 309 312 weak_inversion, dthmin, cldtau, cldemi, & 310 pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, &313 pmflxr, pmflxs, prfl, psfl,bsfl, re, fl, rh2m, & 311 314 qsat2m, tpote, tpot, d_ts, od443aer, od550aer, dryod550aer, & 312 315 od865aer, abs550aer, od550lt1aer, sconcso4, sconcno3, & … … 324 327 icc3dcon, icc3dstra, zfice, reffclwtop, & 325 328 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,& 327 330 zphi, u_seri, v_seri, omega, cldfra, & 328 331 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, & 331 334 d_u_dyn, d_v_dyn, d_t_con, d_t_ajsb, d_t_ajs, & 332 335 d_u_ajs, d_v_ajs, & … … 336 339 d_t_lscst, d_q_lscth, d_q_lscst, plul_th, & 337 340 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, & 338 342 zw2, fraca, zmax_th, d_q_ajsb, d_t_ec, d_u_vdf, & 339 343 d_v_vdf, d_u_oro, d_v_oro, d_t_oro, d_u_lif, & … … 431 435 432 436 ! Input 433 INTEGER :: itap, ivap, iliq, isol, read_climoz437 INTEGER :: itap, ivap, iliq, isol, ibs, read_climoz 434 438 INTEGER, DIMENSION(klon) :: lmax_th 435 439 LOGICAL :: aerosol_couple, ok_sync … … 887 891 888 892 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 890 899 zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) 891 ENDDO 900 ENDDO 901 ENDIF 892 902 ENDIF 893 903 … … 919 929 CALL histwrite_phy(o_fsnow, zfra_o) 920 930 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 921 938 922 939 IF (vars_defined) THEN … … 1105 1122 ENDIF 1106 1123 CALL histwrite_phy(o_tauy, zx_tmp_fi2d) 1107 1108 ! Etienne: test sorties pour compil sur JZ1109 ! IF (landice_opt .GE. 1) THEN1110 ! 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 ! ENDIF1118 1124 1119 1125 DO nsrf = 1, nbsrf … … 1281 1287 CALL histwrite_phy(o_prlw, prlw) 1282 1288 CALL histwrite_phy(o_prsw, prsw) 1289 IF (ok_bs) THEN 1290 CALL histwrite_phy(o_prbsw, prbsw) 1291 ENDIF 1283 1292 CALL histwrite_phy(o_s_pblh, s_pblh) 1284 1293 CALL histwrite_phy(o_s_pblt, s_pblt) … … 1526 1535 CALL histwrite_phy(o_re, re) 1527 1536 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 1528 1542 IF (vars_defined) THEN 1529 1543 DO i=1, klon … … 1795 1809 CALL histwrite_phy(o_zfull,zx_tmp_fi3d) 1796 1810 1811 IF (ok_bs) THEN 1812 CALL histwrite_phy(o_qbs, qbs_seri) 1813 ENDIF 1814 1797 1815 #ifdef CPP_XIOS 1798 1816 !solbnd begin … … 1905 1923 zx_tmp_fi2d=0.0 1906 1924 CALL histwrite_phy(o_dqsphy2d, zx_tmp_fi2d) 1925 ENDIF 1926 1927 1928 IF (ok_bs) THEN 1929 CALL histwrite_phy(o_dqbsphy, d_qx(:,:,ibs)) 1930 IF (vars_defined) CALL water_int(klon,klev,d_qx(:,:,ibs),zmasse,zx_tmp_fi2d) 1931 CALL histwrite_phy(o_dqbsphy2d, zx_tmp_fi2d) 1932 ELSE 1933 zx_tmp_fi3d=0.0 1934 CALL histwrite_phy(o_dqbsphy, zx_tmp_fi3d) 1935 zx_tmp_fi2d=0.0 1936 CALL histwrite_phy(o_dqbsphy2d, zx_tmp_fi2d) 1907 1937 ENDIF 1908 1938 … … 1955 1985 1956 1986 CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d) 1987 1988 IF (ok_bs) THEN 1989 CALL histwrite_phy(o_dqbsdyn, d_qbs_dyn) 1990 CALL histwrite_phy(o_dqbsdyn2d, d_qbs_dyn2d) 1991 ENDIF 1957 1992 1958 1993 CALL histwrite_phy(o_dudyn, d_u_dyn) … … 2098 2133 ENDIF 2099 2134 CALL histwrite_phy(o_dvthe, zx_tmp_fi3d) 2135 2136 IF (ok_bs) THEN 2137 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_vdf(1:klon,1:klev)/pdtphys 2138 CALL histwrite_phy(o_dqbsvdf, zx_tmp_fi3d) 2139 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_bs(1:klon,1:klev)/pdtphys 2140 CALL histwrite_phy(o_dqbsbs, zx_tmp_fi3d) 2141 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_bs(1:klon,1:klev)/pdtphys 2142 CALL histwrite_phy(o_dqbs, zx_tmp_fi3d) 2143 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_t_bs(1:klon,1:klev)/pdtphys 2144 CALL histwrite_phy(o_dtbs, zx_tmp_fi3d) 2145 ENDIF 2100 2146 2101 2147 IF (iflag_thermals>=1) THEN -
LMDZ6/branches/blowing_snow/libf/phylmd/phys_state_var_mod.F90
r4370 r4485 54 54 55 55 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) 58 58 REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:) 59 59 !$OMP THREADPRIVATE(solsw, solswfdiff, sollw) … … 82 82 REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:) 83 83 !$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) 88 88 #ifdef ISO 89 89 REAL, ALLOCATABLE, SAVE :: xt_ancien(:,:,:),xtl_ancien(:,:,:),xts_ancien(:,:,:) … … 547 547 ALLOCATE(rain_fall(klon)) 548 548 ALLOCATE(snow_fall(klon)) 549 ALLOCATE(bs_fall(klon)) 549 550 ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon)) 550 551 sollw=0.0 … … 556 557 ALLOCATE(rugoro(klon)) 557 558 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)) 560 561 ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev)) 561 562 !!! Rom P >>> … … 763 764 !FC 764 765 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) 766 767 DEALLOCATE(zmea, zstd, zsig, zgam) 767 768 DEALLOCATE(zthe, zpic, zval) 768 769 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) 771 772 DEALLOCATE(qtc_cv,sigt_cv) 772 773 DEALLOCATE(u_ancien, v_ancien) -
LMDZ6/branches/blowing_snow/libf/phylmd/physiq_mod.F90
r4478 r4485 84 84 USE atke_turbulence_ini_mod, ONLY : atke_ini 85 85 USE thermcell_ini_mod, ONLY : thermcell_ini 86 USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs 86 87 USE lscp_ini_mod, ONLY : lscp_ini 87 88 … … 144 145 ! [Variables internes non sauvegardees de la physique] 145 146 ! 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, & 147 148 ! Dynamic tendencies (diagnostics) 148 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_ u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &149 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &149 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, & 150 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, & 150 151 ! Physic tendencies 151 152 d_t_con,d_q_con,d_u_con,d_v_con, & … … 164 165 plul_st,plul_th, & 165 166 ! 166 d_t_vdf,d_q_vdf, d_u_vdf,d_v_vdf,d_t_diss, &167 d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, & 167 168 d_t_vdf_x, d_t_vdf_w, & 168 169 d_q_vdf_x, d_q_vdf_w, & 169 170 d_ts, & 171 ! 172 d_t_bs,d_q_bs,d_qbs_bs, & 170 173 ! 171 174 ! d_t_oli,d_u_oli,d_v_oli, & … … 215 218 cldh, cldl,cldm, cldq, cldt, & 216 219 JrNt, & 217 dthmin, evap, fder, plcl, plfc, &218 prw, prlw, prsw, &220 dthmin, evap, snowerosion,fder, plcl, plfc, & 221 prw, prlw, prsw, prbsw, & 219 222 s_lcl, s_pblh, s_pblt, s_therm, & 220 223 cdragm, cdragh, & … … 304 307 fsolsw, wfbils, wfbilo, & 305 308 wfevap, wfrain, wfsnow, & 306 prfl, psfl, fraca, Vprecip, &309 prfl, psfl,bsfl, fraca, Vprecip, & 307 310 zw2, & 308 311 ! … … 460 463 !====================================================================== 461 464 ! 462 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 463 INTEGER,SAVE :: ivap, iliq, isol, irneb 464 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb )465 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 466 INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs 467 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs) 465 468 ! 466 469 ! … … 833 836 !XXX PB 834 837 REAL fluxq(klon,klev, nbsrf) ! flux turbulent d'humidite 838 REAL fluxqbs(klon,klev, nbsrf) ! flux turbulent de neige soufflee 835 839 ! 836 840 REAL zxfluxt(klon, klev) 837 841 REAL zxfluxq(klon, klev) 842 REAL zxfluxqbs(klon,klev) 838 843 REAL zxfluxu(klon, klev) 839 844 REAL zxfluxv(klon, klev) … … 919 924 ! 920 925 ! tendance nulles 921 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 926 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0 922 927 REAL, dimension(klon) :: dsig0, ddens0 923 928 INTEGER, dimension(klon) :: wkoccur1 … … 1060 1065 REAL ztsol(klon) 1061 1066 REAL q2m(klon,nbsrf) ! humidite a 2m 1062 1067 REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface 1068 REAL qbsfra ! blowing snow fraction 1063 1069 !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels 1064 1070 CHARACTER*40 t2mincels, t2maxcels !t2m min., t2m max … … 1270 1276 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1271 1277 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1278 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1272 1279 CALL init_etat0_limit_unstruct 1273 1280 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1319 1326 ENDIF 1320 1327 1321 IF (ok_ice_sursat.AND.(nqo. NE.4)) THEN1328 IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN 1322 1329 WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', & 1323 1330 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.' … … 1337 1344 CALL abort_physic(modname,abort_message,1) 1338 1345 ENDIF 1346 1347 IF (ok_bs) THEN 1348 IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN 1349 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1350 'but nqo=', nqo 1351 abort_message='see above' 1352 CALL abort_physic(modname,abort_message, 1) 1353 ENDIF 1354 ENDIF 1339 1355 1340 1356 Ncvpaseq1 = 0 … … 1754 1770 CALL lscp_ini(pdtphys,ok_ice_sursat) 1755 1771 endif 1772 CALL blowing_snow_ini(prt_level,lunout, & 1773 RCPD, RLSTT, RLVTT, RLMLT, & 1774 RVTMP2, RTT,RD,RG) 1775 1756 1776 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1757 1777 … … 1779 1799 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 1780 1800 pplay, lmax_th, aerosol_couple, & 1781 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&1801 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync,& 1782 1802 ptconv, read_climoz, clevSTD, & 1783 1803 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 2250 2270 dql0(:,:)=0. 2251 2271 dqi0(:,:)=0. 2272 dqbs0(:,:)=0. 2252 2273 dsig0(:) = 0. 2253 2274 ddens0(:) = 0. … … 2302 2323 q_seri(i,k) = qx(i,k,ivap) 2303 2324 ql_seri(i,k) = qx(i,k,iliq) 2325 qbs_seri(i,k) = 0. 2304 2326 !CR: ATTENTION, on rajoute la variable glace 2305 2327 IF (nqo.EQ.2) THEN !--vapour and liquid only … … 2309 2331 qs_seri(i,k) = qx(i,k,isol) 2310 2332 rneb_seri(i,k) = 0. 2311 ELSE IF (nqo. EQ.4) THEN !--vapour, liquid, ice and rneb2333 ELSE IF (nqo.GE.4) THEN !--vapour, liquid, ice and rneb and blowing snow 2312 2334 qs_seri(i,k) = qx(i,k,isol) 2335 IF (ok_ice_sursat) THEN 2313 2336 rneb_seri(i,k) = qx(i,k,irneb) 2337 ENDIF 2338 IF (ok_bs) THEN 2339 qbs_seri(i,k)= qx(i,k,ibs) 2340 ENDIF 2341 2314 2342 ENDIF 2343 2344 2315 2345 ENDDO 2316 2346 ENDDO … … 2321 2351 qql1(:)=0.0 2322 2352 DO k = 1, klev 2323 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k) )*zmasse(:,k)2353 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k) 2324 2354 ENDDO 2325 2355 ENDIF … … 2377 2407 d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep 2378 2408 d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep 2409 d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2379 2410 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2380 2411 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2383 2414 CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d) 2384 2415 d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep 2416 CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d) 2417 d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep 2385 2418 ! !! RomP >>> td dyn traceur 2386 2419 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep … … 2398 2431 d_ql_dyn2d(:) = 0.0 2399 2432 d_qs_dyn2d(:) = 0.0 2433 d_qbs_dyn2d(:)= 0.0 2400 2434 ! !! RomP >>> td dyn traceur 2401 2435 IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0 2402 2436 ! !! RomP <<< 2403 2437 d_rneb_dyn(:,:)=0.0 2438 d_qbs_dyn(:,:)=0.0 2404 2439 ancien_ok = .TRUE. 2405 2440 ENDIF … … 2517 2552 2518 2553 CALL add_phys_tend & 2519 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva, paprs,&2554 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,& 2520 2555 'eva',abortphy,flag_inhib_tend,itap,0) 2521 2556 CALL prt_enerbil('eva',itap) … … 2682 2717 longitude_deg, latitude_deg, rugoro, zrmu0, & 2683 2718 sollwdown, cldt, & 2684 rain_fall, snow_fall, solsw, solswfdiff, sollw, &2719 rain_fall, snow_fall, bs_fall, solsw, solswfdiff, sollw, & 2685 2720 gustiness, & 2686 t_seri, q_seri, u_seri, v_seri, &2721 t_seri, q_seri, qbs_seri, u_seri, v_seri, & 2687 2722 !nrlmd+jyg< 2688 2723 wake_deltat, wake_deltaq, wake_cstar, wake_s, & … … 2695 2730 !albedo SB >>> 2696 2731 ! albsol1, albsol2, sens, evap, & 2697 albsol_dir, albsol_dif, sens, evap, 2732 albsol_dir, albsol_dif, sens, evap, snowerosion, & 2698 2733 !albedo SB <<< 2699 2734 albsol3_lic,runoff, snowhgt, qsnow, to_ice, sissnow, & 2700 2735 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 2701 d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_t_diss, &2736 d_t_vdf, d_q_vdf, d_qbs_vdf, d_u_vdf, d_v_vdf, d_t_diss, & 2702 2737 !nrlmd< 2703 2738 !jyg< … … 2725 2760 fluxt, fluxu, fluxv, & 2726 2761 dsens, devap, zxsnow, & 2727 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke, &2762 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, & 2728 2763 !nrlmd+jyg< 2729 2764 wake_delta_pbl_TKE, & … … 2750 2785 IF (klon_glo==1) THEN 2751 2786 CALL add_pbl_tend & 2752 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&2787 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 2753 2788 'vdf',abortphy,flag_inhib_tend,itap) 2754 2789 ELSE 2755 2790 CALL add_phys_tend & 2756 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&2791 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 2757 2792 'vdf',abortphy,flag_inhib_tend,itap,0) 2758 2793 ENDIF 2759 2794 CALL prt_enerbil('vdf',itap) 2795 2760 2796 !-------------------------------------------------------------------- 2761 2797 … … 2808 2844 2809 2845 ENDIF 2846 2847 ! ================================================================== 2848 ! Blowing snow sublimation and sedimentation 2849 2850 d_t_bs(:,:)=0. 2851 d_q_bs(:,:)=0. 2852 d_qbs_bs(:,:)=0. 2853 bsfl(:,:)=0. 2854 bs_fall(:)=0. 2855 IF (ok_bs) THEN 2856 2857 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, & 2858 d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall) 2859 2860 CALL add_phys_tend & 2861 (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,& 2862 'bs',abortphy,flag_inhib_tend,itap,0) 2863 2864 ENDIF 2865 2810 2866 ! =================================================================== c 2811 2867 ! Calcul de Qsat … … 3232 3288 !! 3233 3289 !! 3234 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &3290 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, & 3235 3291 'convection',abortphy,flag_inhib_tend,itap,0) 3236 3292 CALL prt_enerbil('convection',itap) … … 3363 3419 !----------------------------------------------------------------------- 3364 3420 ! ajout des tendances des poches froides 3365 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0, paprs,'wake', &3421 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', & 3366 3422 abortphy,flag_inhib_tend,itap,0) 3367 3423 CALL prt_enerbil('wake',itap) … … 3521 3577 ! 3522 3578 CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs, & 3523 dql0,dqi0, paprs,'thermals', abortphy,flag_inhib_tend,itap,0)3579 dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0) 3524 3580 CALL prt_enerbil('thermals',itap) 3525 3581 ! … … 3583 3639 !-------------------------------------------------------------------- 3584 3640 ! ajout des tendances de l'ajustement sec ou des thermiques 3585 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0, paprs, &3641 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, & 3586 3642 'ajsb',abortphy,flag_inhib_tend,itap,0) 3587 3643 CALL prt_enerbil('ajsb',itap) … … 3672 3728 ! write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1) 3673 3729 !-JLD 3674 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc, paprs, &3730 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, & 3675 3731 'lsc',abortphy,flag_inhib_tend,itap,0) 3676 3732 CALL prt_enerbil('lsc',itap) … … 3695 3751 ENDIF 3696 3752 3697 !--------------------------------------------------------------------------- 3753 3754 !--------------------------------------------------------------------------- 3698 3755 DO k = 1, klev 3699 3756 DO i = 1, klon 3700 3757 cldfra(i,k) = rneb(i,k) 3701 3758 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 3759 !EV: en effet etrange, j'ajouterais aussi qs_seri 3760 ! plus largement, je nettoierais (enleverrais) ces lignes 3702 3761 IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k) 3703 3762 ENDDO 3704 3763 ENDDO 3764 3765 3766 ! Option to activate the radiative effect of blowing snow (ok_rad_bs) 3767 ! makes sense only if the new large scale condensation scheme is active 3768 ! with the ok_icefra_lscp flag active as well 3769 3770 IF (ok_bs .AND. ok_rad_bs) THEN 3771 IF (ok_new_lscp .AND. ok_icefra_lscp) THEN 3772 DO k=1,klev 3773 DO i=1,klon 3774 radocond(i,k)=radocond(i,k)+qbs_seri(i,k) 3775 picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k)) 3776 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 3777 cldfra(i,k)=max(cldfra(i,k),qbsfra) 3778 ENDDO 3779 ENDDO 3780 ELSE 3781 WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow" 3782 WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false" 3783 abort_message='inconsistency in cloud phase for blowing snow' 3784 CALL abort_physic(modname,abort_message,1) 3785 ENDIF 3786 3787 ENDIF 3788 3705 3789 IF (check) THEN 3706 3790 za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area) … … 4489 4573 ENDDO 4490 4574 4491 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0, paprs,'SW',abortphy,flag_inhib_tend,itap,0)4575 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0) 4492 4576 CALL prt_enerbil('SW',itap) 4493 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0, paprs,'LW',abortphy,flag_inhib_tend,itap,0)4577 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0) 4494 4578 CALL prt_enerbil('LW',itap) 4495 4579 … … 4566 4650 !----------------------------------------------------------------------- 4567 4651 ! ajout des tendances de la trainee de l'orographie 4568 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0, paprs,'oro', &4652 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', & 4569 4653 abortphy,flag_inhib_tend,itap,0) 4570 4654 CALL prt_enerbil('oro',itap) … … 4617 4701 4618 4702 ! ajout des tendances de la portance de l'orographie 4619 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &4703 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, & 4620 4704 'lif', abortphy,flag_inhib_tend,itap,0) 4621 4705 CALL prt_enerbil('lif',itap) … … 4642 4726 d_t_hin(:, :)=0. 4643 4727 CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, & 4644 dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)4728 dqi0, dqbs0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0) 4645 4729 CALL prt_enerbil('hin',itap) 4646 4730 ENDIF … … 4660 4744 ENDDO 4661 4745 4662 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &4746 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, & 4663 4747 paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0) 4664 4748 CALL prt_enerbil('front_gwd_rando',itap) … … 4669 4753 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 4670 4754 du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress) 4671 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &4755 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, & 4672 4756 paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0) 4673 4757 CALL prt_enerbil('flott_gwd_rando',itap) … … 4721 4805 ! ajout de la tendance d'humidite due au methane 4722 4806 d_q_ch4_dtime(:,:) = d_q_ch4(:,:)*phys_tstep 4723 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &4807 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, & 4724 4808 'q_ch4', abortphy,flag_inhib_tend,itap,0) 4725 4809 d_q_ch4(:,:) = d_q_ch4_dtime(:,:)/phys_tstep … … 5026 5110 5027 5111 CALL add_phys_tend & 5028 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep, paprs,&5112 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,& 5029 5113 'rep',abortphy,flag_inhib_tend,itap,0) 5030 5114 IF (abortphy==1) Print*,'ERROR ABORT REP' … … 5103 5187 ! prlw = colonne eau liquide 5104 5188 ! prlw = colonne eau solide 5189 ! prbsw = colonne neige soufflee 5105 5190 prw(:) = 0. 5106 5191 prlw(:) = 0. 5107 5192 prsw(:) = 0. 5193 prbsw(:) = 0. 5108 5194 DO k = 1, klev 5109 5195 prw(:) = prw(:) + q_seri(:,k)*zmasse(:,k) 5110 5196 prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k) 5111 5197 prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k) 5198 prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k) 5112 5199 ENDDO 5113 5200 ! … … 5168 5255 ENDIF 5169 5256 !--ice_sursat: nqo=4, on ajoute rneb 5170 IF (nqo == 4) THEN5257 IF (nqo.ge.4 .and. ok_ice_sursat) THEN 5171 5258 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 5172 5259 ENDIF 5260 5261 IF (nqo.ge.4 .and. ok_bs) THEN 5262 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 5263 ENDIF 5264 5173 5265 ENDDO 5174 5266 ENDDO … … 5217 5309 ql_ancien(:,:) = ql_seri(:,:) 5218 5310 qs_ancien(:,:) = qs_seri(:,:) 5311 qbs_ancien(:,:) = qbs_seri(:,:) 5219 5312 rneb_ancien(:,:) = rneb_seri(:,:) 5220 5313 CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien) 5221 5314 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien) 5222 5315 CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien) 5316 CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien) 5223 5317 ! !! RomP >>> 5224 5318 IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:) … … 5345 5439 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 5346 5440 pplay, lmax_th, aerosol_couple, & 5347 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, &5441 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, & 5348 5442 ok_sync, ptconv, read_climoz, clevSTD, & 5349 5443 ptconvth, d_u, d_t, qx, d_qx, zmasse, & -
LMDZ6/branches/blowing_snow/libf/phylmd/surf_land_mod.F90
r4283 r4485 11 11 rlon, rlat, yrmu0, & 12 12 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, & 14 14 AcoefH, AcoefQ, BcoefH, BcoefQ, & 15 15 AcoefU, AcoefV, BcoefU, BcoefV, & … … 17 17 lwdown_m, q2m, t2m, & 18 18 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, & 20 20 qsurf, tsurf_new, dflux_s, dflux_l, & 21 21 flux_u1, flux_v1 , & … … 81 81 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 82 82 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 84 84 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 85 85 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ … … 109 109 !albedo SB <<< 110 110 REAL, DIMENSION(klon), INTENT(OUT) :: evap 111 REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens, fluxlat 111 REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens, fluxlat, fluxbs 112 112 REAL, DIMENSION(klon), INTENT(OUT) :: qsurf 113 113 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new … … 125 125 REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used 126 126 REAL, DIMENSION(klon) :: u0, v0 ! surface speed 127 REAL, DIMENSION(klon) :: precip_totsnow ! total solid precip 127 128 INTEGER :: i 128 129 … … 130 131 REAL, DIMENSION(klon) :: alb1_new,alb2_new 131 132 !albedo SB <<< 133 134 135 !**************************************************************************************** 136 !Total solid precip 137 138 IF (ok_bs) THEN 139 precip_totsnow=precip_snow+precip_bs 140 ELSE 141 precip_totsnow=precip_snow 142 ENDIF 143 !**************************************************************************************** 144 132 145 133 146 !**************************************************************************************** … … 165 178 zlev, u1, v1, gustiness, temp_air, spechum, epot_air, ccanopy, & 166 179 cdragh, AcoefH, AcoefQ, BcoefH, BcoefQ, & 167 precip_rain, precip_ snow, lwdown_m, swnet, swdown, &180 precip_rain, precip_totsnow, lwdown_m, swnet, swdown, & 168 181 pref_tmp, q2m, t2m, & 169 evap, fluxsens, fluxlat, &182 evap, fluxsens, fluxlat,fluxbs, & 170 183 tsol_rad, tsurf_new, alb1_new, alb2_new, & 171 184 emis_new, z0m, z0h, qsurf, & … … 184 197 !**************************************************************************************** 185 198 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, & 187 200 spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, & 188 201 u1, v1, gustiness, rugoro, swnet, lwnet, & … … 192 205 z0h(1:knon)=z0m(1:knon) ! En attendant mieux 193 206 207 194 208 ENDIF ! ok_veget 209 210 ! blowing snow not treated yet over land 211 fluxbs(:)=0. 212 195 213 196 214 !**************************************************************************************** -
LMDZ6/branches/blowing_snow/libf/phylmd/surf_land_orchidee_mod.F90
r4283 r4485 47 47 precip_rain, precip_snow, lwdown, swnet, swdown, & 48 48 ps, q2m, t2m, & 49 evap, fluxsens, fluxlat, &49 evap, fluxsens, fluxlat, fluxbs, & 50 50 tsol_rad, tsurf_new, alb1_new, alb2_new, & 51 51 emis_new, z0m_new, z0h_new, qsurf, & … … 140 140 ! Parametres de sortie 141 141 !**************************************************************************************** 142 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat, qsurf142 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat, fluxbs, qsurf 143 143 REAL, DIMENSION(klon), INTENT(OUT) :: tsol_rad, tsurf_new 144 144 REAL, DIMENSION(klon), INTENT(OUT) :: alb1_new, alb2_new … … 632 632 fluxsens(1:knon) = -1. * fluxsens(1:knon) 633 633 fluxlat(1:knon) = -1. * fluxlat(1:knon) 634 634 635 ! temporary until blowing snow flux is calculated in orchidee 636 fluxbs(:)=0. 637 635 638 ! evap = -1. * evap 636 639 -
LMDZ6/branches/blowing_snow/libf/phylmd/surf_landice_mod.F90
r4414 r4485 12 12 rmu0, lwdownm, albedo, pphi1, & 13 13 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, & 15 15 AcoefH, AcoefQ, BcoefH, BcoefQ, & 16 16 AcoefU, AcoefV, BcoefU, BcoefV, & 17 17 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, & 20 20 tsurf_new, dflux_s, dflux_l, & 21 21 alt, slope, cloudf, & … … 30 30 USE cpl_mod, ONLY : cpl_send_landice_fields 31 31 USE calcul_fluxs_mod 32 USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic 32 33 USE phys_output_var_mod, ONLY : snow_o,zfra_o 33 34 !FC 34 35 USE ioipsl_getin_p_mod, ONLY : getin_p 35 36 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs 36 37 37 38 #ifdef CPP_INLANDSIS … … 56 57 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 57 58 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 59 60 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 60 61 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ … … 62 63 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 63 64 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 65 66 REAL, DIMENSION(klon), INTENT(IN) :: rugoro 66 67 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf … … 94 95 !albedo SB <<< 95 96 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 97 REAL, DIMENSION(klon), INTENT(OUT) :: fluxbs 96 98 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 97 99 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l … … 134 136 135 137 REAL,DIMENSION(klon) :: alb1,alb2 138 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 136 139 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 137 143 ! End definition 138 144 !**************************************************************************************** … … 165 171 alb2(:) = 999999. 166 172 alb1(:) = 999999. 167 173 fluxbs(:)=0. 168 174 runoff(:) = 0. 169 175 !**************************************************************************************** … … 173 179 radsol(:) = 0.0 174 180 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 181 182 !**************************************************************************************** 175 183 176 184 !**************************************************************************************** … … 264 272 265 273 266 267 274 ELSE 268 275 … … 314 321 flux_u1, flux_v1) 315 322 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 324 323 325 324 !**************************************************************************************** … … 327 326 ! 328 327 !**************************************************************************************** 328 329 329 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 330 330 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)) 335 336 ! 336 337 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" … … 354 355 !z0m = SQRT(z0m**2+rugoro**2) 355 356 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))) 356 416 357 417 … … 378 438 runoff(1:knon)=run_off_lic(1:knon)/dtime 379 439 380 381 !****************************************************************************************382 440 snow_o=0. 383 441 zfra_o = 0. … … 420 478 !albedo SB <<< 421 479 422 423 424 480 425 481 END SUBROUTINE surf_landice -
LMDZ6/branches/blowing_snow/libf/phylmd/surf_ocean_mod.F90
r4370 r4485 13 13 windsp, rmu0, fder, tsurf_in, & 14 14 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, & 16 16 AcoefH, AcoefQ, BcoefH, BcoefQ, & 17 17 AcoefU, AcoefV, BcoefU, BcoefV, & … … 60 60 REAL, DIMENSION(klon), INTENT(IN) :: cdragh 61 61 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 63 63 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 64 64 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ … … 144 144 REAL, DIMENSION(klon) :: radsol 145 145 REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation 146 REAL, DIMENSION(klon) :: precip_totsnow 146 147 CHARACTER(len=20),PARAMETER :: modname="surf_ocean" 147 148 real rhoa(knon) ! density of moist air (kg / m3) … … 160 161 radsol(1:klon) = 0.0 ! initialisation a priori inutile 161 162 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 162 174 163 175 !****************************************************************************** … … 188 200 windsp, fder, & 189 201 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,& 191 203 AcoefH, AcoefQ, BcoefH, BcoefQ, & 192 204 AcoefU, AcoefV, BcoefU, BcoefV, & … … 200 212 CALL ocean_slab_noice( & 201 213 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,& 203 215 AcoefH, AcoefQ, BcoefH, BcoefQ, & 204 216 AcoefU, AcoefV, BcoefU, BcoefV, & … … 211 223 CALL ocean_forced_noice( & 212 224 itime, dtime, jour, knon, knindex, & 213 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow, &225 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, & 214 226 temp_air, spechum, & 215 227 AcoefH, AcoefQ, BcoefH, BcoefQ, & … … 326 338 call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, & 327 339 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), & 329 341 hf = - fluxsens(:knon), hlb = - fluxlat(:knon), & 330 342 rnl = - lwnet(:knon), &
Note: See TracChangeset
for help on using the changeset viewer.