Changeset 4523
- Timestamp:
- May 3, 2023, 6:21:08 PM (21 months ago)
- Location:
- LMDZ6/trunk
- Files:
-
- 34 edited
- 8 copied
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk
- Property svn:mergeinfo changed
/LMDZ6/branches/blowing_snow (added) merged: 4485,4504,4506,4521
- Property svn:mergeinfo changed
-
LMDZ6/trunk/DefLists/field_def_lmdz.xml
r4412 r4523 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/trunk/DefLists/file_def_histhf_lmdz.xml
r4298 r4523 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/trunk/libf/dyn3d_common/infotrac.F90
r4487 r4523 36 36 ! |--------------------+-----------------------+-----------------+---------------+----------------------------| 37 37 ! | water in different | water tagging | water isotopes | other tracers | additional tracers moments | 38 ! | phases: H2O_[gls ]| isotopes | | | for higher order schemes |38 ! | phases: H2O_[glsb] | isotopes | | | for higher order schemes | 39 39 ! |--------------------+-----------------------+-----------------+---------------+----------------------------| 40 40 ! | | | | | | … … 65 65 ! | longName | Long name (with adv. scheme suffix) for outputs | ttext | | 66 66 ! | type | Type (so far: tracer or tag) | / | tracer,tag | 67 ! | phase | Phases list ("g"as / "l"iquid / "s"olid ) | / | [g][l][s]|67 ! | phase | Phases list ("g"as / "l"iquid / "s"olid / "b"lowing) | / | [g][l][s][b] | 68 68 ! | component | Name(s) of the merged/cumulated section(s) | / | coma-separated names | 69 69 ! | iGeneration | Generation (>=1) | / | | … … 91 91 ! | trac | ntiso | Isotopes + tagging tracers list + number | / | ntraciso | | 92 92 ! | zone | nzone | Geographic tagging zones list + number | / | ntraceurs_zone | | 93 ! | phase | nphas | Phases list + number | | [g][l][s], 1:3|93 ! | phase | nphas | Phases list + number | |[g][l][s][b],1:4 | 94 94 ! | iqIsoPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot | 95 95 ! | 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/trunk/libf/misc/readTracFiles_mod.f90
r4454 r4523 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/trunk/libf/phylmd/add_phys_tend_mod.F90
r3435 r4523 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/trunk/libf/phylmd/clesphys.h
r4458 r4523 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/trunk/libf/phylmd/conf_phys_m.F90
r4466 r4523 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/trunk/libf/phylmd/fonte_neige_mod.F90
r3900 r4523 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/trunk/libf/phylmd/infotrac_phy.F90
r4500 r4523 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) | / | | … … 93 93 ! | trac | ntiso | Isotopes + tagging tracers list + number | / | ntraciso | | 94 94 ! | zone | nzone | Geographic tagging zones list + number | / | ntraceurs_zone | | 95 ! | phase | nphas | Phases list + number | | [g][l][s], 1:3|95 ! | phase | nphas | Phases list + number | |[g][l][s][b] 1:4 | 96 96 ! | iqIsoPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot | 97 97 ! | itZonIso | Index in "trac(1:ntiso)"= f(zone, name(1:niso)) | index_trac | 1:ntiso | -
LMDZ6/trunk/libf/phylmd/ocean_forced_mod.F90
r3974 r4523 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/trunk/libf/phylmd/pbl_surface_mod.F90
r4478 r4523 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/trunk/libf/phylmd/phyaqua_mod.F90
r4463 r4523 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/trunk/libf/phylmd/phyredem.F90
r4389 r4523 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/trunk/libf/phylmd/phys_local_var_mod.F90
r4489 r4523 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) … … 28 30 REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:) 29 31 !$OMP THREADPRIVATE(d_t_dyn, d_q_dyn) 30 REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:) 31 !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn )32 REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:) 33 !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d )32 REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:), d_qbs_dyn(:,:) 33 !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn, d_qbs_dyn) 34 REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:), d_qbs_dyn2d(:) 35 !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d) 34 36 REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:) 35 37 !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn) … … 71 73 REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:) 72 74 !$OMP THREADPRIVATE(d_u_oli, d_v_oli) 73 REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_ t_diss(:,:)74 !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_t_diss)75 REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_qbs_vdf(:,:), d_t_diss(:,:) 76 !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_qbs_vdf, d_t_diss) 75 77 REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:) 76 78 !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf) … … 80 82 REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:) 81 83 !$OMP THREADPRIVATE( d_t_vdf_x, d_q_vdf_x) 84 REAL, SAVE, ALLOCATABLE :: d_t_bs(:,:), d_q_bs(:,:), d_qbs_bs(:,:) 85 !$OMP THREADPRIVATE( d_t_bs,d_q_bs, d_qbs_bs) 82 86 !>nrlmd+jyg 83 87 REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:) … … 312 316 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt 313 317 !$OMP THREADPRIVATE(JrNt) 314 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw315 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)318 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw 319 !$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw) 316 320 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m 317 321 !$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m) … … 330 334 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte 331 335 !$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte) 336 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic 337 !$OMP THREADPRIVATE(zxustartlic, zxrhoslic) 332 338 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving 333 339 !$OMP THREADPRIVATE(zxfqcalving) … … 451 457 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi 452 458 !$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi) 453 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca 454 !$OMP THREADPRIVATE(prfl, psfl, fraca )459 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl 460 !$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl) 455 461 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2 456 462 !$OMP THREADPRIVATE(Vprecip, zw2) … … 608 614 609 615 IMPLICIT NONE 610 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev) )616 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 611 617 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 612 618 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf)) … … 616 622 ALLOCATE(tr_seri(klon,klev,nbtr)) 617 623 ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev)) 618 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev) )619 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon) )624 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev)) 625 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon)) 620 626 ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev)) 621 627 ALLOCATE(d_tr_dyn(klon,klev,nbtr)) !RomP … … 640 646 ALLOCATE(plul_st(klon),plul_th(klon)) 641 647 ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev)) 642 648 ALLOCATE (d_qbs_vdf(klon,klev)) 649 ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev)) 643 650 ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev)) 644 651 ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev)) … … 769 776 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon)) 770 777 ALLOCATE(JrNt(klon)) 771 ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))772 ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))778 ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon)) 779 ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon)) 773 780 ALLOCATE(s_lcl(klon)) 774 781 ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon)) … … 785 792 ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon)) 786 793 ALLOCATE(zxrunofflic(klon)) 794 ALLOCATE(zxustartlic(klon), zxrhoslic(klon)) 795 zxustartlic(:)=0. ; zxrhoslic(:)=0. 787 796 ALLOCATE(rain_lsc(klon)) 788 797 ALLOCATE(rain_num(klon)) … … 861 870 ALLOCATE(prfl(klon, klev+1)) 862 871 ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1)) 872 ALLOCATE(bsfl(klon,klev+1)) 863 873 ALLOCATE(zw2(klon, klev+1)) 864 874 … … 942 952 USE indice_sol_mod 943 953 IMPLICIT NONE 944 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri )954 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 945 955 DEALLOCATE(u_seri,v_seri) 946 956 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime) … … 949 959 DEALLOCATE(tr_seri) 950 960 DEALLOCATE(d_t_dyn,d_q_dyn) 951 DEALLOCATE(d_ql_dyn,d_qs_dyn )952 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d )961 DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn) 962 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d) 953 963 DEALLOCATE(d_u_dyn,d_v_dyn) 954 964 DEALLOCATE(d_tr_dyn) !RomP … … 973 983 DEALLOCATE(plul_st,plul_th) 974 984 DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss) 985 DEALLOCATE(d_qbs_vdf) 986 DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs) 975 987 DEALLOCATE(d_u_vdf,d_v_vdf) 976 988 DEALLOCATE(d_t_oli,d_t_oro) … … 1083 1095 DEALLOCATE(cldm, cldq, cldt, qsat2m) 1084 1096 DEALLOCATE(JrNt) 1085 DEALLOCATE(dthmin, evap, fder, plcl, plfc)1086 DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)1097 DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc) 1098 DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl) 1087 1099 DEALLOCATE(s_pblh, s_pblt, s_therm) 1088 1100 ! … … 1097 1109 DEALLOCATE(zxfqcalving, zxfluxlat) 1098 1110 DEALLOCATE(zxrunofflic) 1111 DEALLOCATE(zxustartlic, zxrhoslic) 1099 1112 DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf) 1100 1113 DEALLOCATE(rain_lsc) … … 1165 1178 1166 1179 1167 DEALLOCATE(prfl, psfl, fraca, Vprecip)1180 DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip) 1168 1181 DEALLOCATE(zw2) 1169 1182 -
LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90
r4412 r4523 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/trunk/libf/phylmd/phys_output_var_mod.F90
r4370 r4523 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/trunk/libf/phylmd/phys_output_write_mod.F90
r4489 r4523 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 … … 1797 1811 CALL histwrite_phy(o_zfull,zx_tmp_fi3d) 1798 1812 1813 IF (ok_bs) THEN 1814 CALL histwrite_phy(o_qbs, qbs_seri) 1815 ENDIF 1816 1799 1817 #ifdef CPP_XIOS 1800 1818 !solbnd begin … … 1908 1926 zx_tmp_fi2d=0.0 1909 1927 CALL histwrite_phy(o_dqsphy2d, zx_tmp_fi2d) 1928 ENDIF 1929 1930 1931 IF (ok_bs) THEN 1932 CALL histwrite_phy(o_dqbsphy, d_qx(:,:,ibs)) 1933 IF (vars_defined) CALL water_int(klon,klev,d_qx(:,:,ibs),zmasse,zx_tmp_fi2d) 1934 CALL histwrite_phy(o_dqbsphy2d, zx_tmp_fi2d) 1935 ELSE 1936 zx_tmp_fi3d=0.0 1937 CALL histwrite_phy(o_dqbsphy, zx_tmp_fi3d) 1938 zx_tmp_fi2d=0.0 1939 CALL histwrite_phy(o_dqbsphy2d, zx_tmp_fi2d) 1910 1940 ENDIF 1911 1941 … … 1958 1988 1959 1989 CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d) 1990 1991 IF (ok_bs) THEN 1992 CALL histwrite_phy(o_dqbsdyn, d_qbs_dyn) 1993 CALL histwrite_phy(o_dqbsdyn2d, d_qbs_dyn2d) 1994 ENDIF 1960 1995 1961 1996 CALL histwrite_phy(o_dudyn, d_u_dyn) … … 2101 2136 ENDIF 2102 2137 CALL histwrite_phy(o_dvthe, zx_tmp_fi3d) 2138 2139 IF (ok_bs) THEN 2140 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_vdf(1:klon,1:klev)/pdtphys 2141 CALL histwrite_phy(o_dqbsvdf, zx_tmp_fi3d) 2142 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_bs(1:klon,1:klev)/pdtphys 2143 CALL histwrite_phy(o_dqbsbs, zx_tmp_fi3d) 2144 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_bs(1:klon,1:klev)/pdtphys 2145 CALL histwrite_phy(o_dqbs, zx_tmp_fi3d) 2146 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_t_bs(1:klon,1:klev)/pdtphys 2147 CALL histwrite_phy(o_dtbs, zx_tmp_fi3d) 2148 ENDIF 2103 2149 2104 2150 IF (iflag_thermals>=1) THEN -
LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90
r4370 r4523 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/trunk/libf/phylmd/physiq_mod.F90
r4519 r4523 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 rhcl, & 148 149 ! Dynamic tendencies (diagnostics) 149 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_ u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &150 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &150 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, & 151 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, & 151 152 ! Physic tendencies 152 153 d_t_con,d_q_con,d_u_con,d_v_con, & … … 165 166 plul_st,plul_th, & 166 167 ! 167 d_t_vdf,d_q_vdf, d_u_vdf,d_v_vdf,d_t_diss, &168 d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, & 168 169 d_t_vdf_x, d_t_vdf_w, & 169 170 d_q_vdf_x, d_q_vdf_w, & 170 171 d_ts, & 172 ! 173 d_t_bs,d_q_bs,d_qbs_bs, & 171 174 ! 172 175 ! d_t_oli,d_u_oli,d_v_oli, & … … 216 219 cldh, cldl,cldm, cldq, cldt, & 217 220 JrNt, & 218 dthmin, evap, fder, plcl, plfc, &219 prw, prlw, prsw, &221 dthmin, evap, snowerosion,fder, plcl, plfc, & 222 prw, prlw, prsw, prbsw, & 220 223 s_lcl, s_pblh, s_pblt, s_therm, & 221 224 cdragm, cdragh, & … … 305 308 fsolsw, wfbils, wfbilo, & 306 309 wfevap, wfrain, wfsnow, & 307 prfl, psfl, fraca, Vprecip, &310 prfl, psfl,bsfl, fraca, Vprecip, & 308 311 zw2, & 309 312 ! … … 461 464 !====================================================================== 462 465 ! 463 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 464 INTEGER,SAVE :: ivap, iliq, isol, irneb 465 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb )466 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 467 INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs 468 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs) 466 469 ! 467 470 ! … … 834 837 !XXX PB 835 838 REAL fluxq(klon,klev, nbsrf) ! flux turbulent d'humidite 839 REAL fluxqbs(klon,klev, nbsrf) ! flux turbulent de neige soufflee 836 840 ! 837 841 REAL zxfluxt(klon, klev) 838 842 REAL zxfluxq(klon, klev) 843 REAL zxfluxqbs(klon,klev) 839 844 REAL zxfluxu(klon, klev) 840 845 REAL zxfluxv(klon, klev) … … 920 925 ! 921 926 ! tendance nulles 922 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 927 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0 923 928 REAL, dimension(klon) :: dsig0, ddens0 924 929 INTEGER, dimension(klon) :: wkoccur1 … … 1066 1071 REAL ztsol(klon) 1067 1072 REAL q2m(klon,nbsrf) ! humidite a 2m 1068 1073 REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface 1074 REAL qbsfra ! blowing snow fraction 1069 1075 !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels 1070 1076 CHARACTER*40 t2mincels, t2maxcels !t2m min., t2m max … … 1276 1282 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1277 1283 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1284 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1278 1285 CALL init_etat0_limit_unstruct 1279 1286 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1325 1332 ENDIF 1326 1333 1327 IF (ok_ice_sursat.AND.(nqo. NE.4)) THEN1334 IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN 1328 1335 WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', & 1329 1336 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.' … … 1343 1350 CALL abort_physic(modname,abort_message,1) 1344 1351 ENDIF 1352 1353 IF (ok_bs) THEN 1354 IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN 1355 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1356 'but nqo=', nqo 1357 abort_message='see above' 1358 CALL abort_physic(modname,abort_message, 1) 1359 ENDIF 1360 ENDIF 1345 1361 1346 1362 Ncvpaseq1 = 0 … … 1761 1777 CALL lscp_ini(pdtphys,ok_ice_sursat) 1762 1778 endif 1779 CALL blowing_snow_ini(prt_level,lunout, & 1780 RCPD, RLSTT, RLVTT, RLMLT, & 1781 RVTMP2, RTT,RD,RG) 1782 1763 1783 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1764 1784 … … 1786 1806 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 1787 1807 pplay, lmax_th, aerosol_couple, & 1788 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&1808 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync,& 1789 1809 ptconv, read_climoz, clevSTD, & 1790 1810 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 2257 2277 dql0(:,:)=0. 2258 2278 dqi0(:,:)=0. 2279 dqbs0(:,:)=0. 2259 2280 dsig0(:) = 0. 2260 2281 ddens0(:) = 0. … … 2309 2330 q_seri(i,k) = qx(i,k,ivap) 2310 2331 ql_seri(i,k) = qx(i,k,iliq) 2332 qbs_seri(i,k) = 0. 2311 2333 !CR: ATTENTION, on rajoute la variable glace 2312 2334 IF (nqo.EQ.2) THEN !--vapour and liquid only … … 2316 2338 qs_seri(i,k) = qx(i,k,isol) 2317 2339 rneb_seri(i,k) = 0. 2318 ELSE IF (nqo. EQ.4) THEN !--vapour, liquid, ice and rneb2340 ELSE IF (nqo.GE.4) THEN !--vapour, liquid, ice and rneb and blowing snow 2319 2341 qs_seri(i,k) = qx(i,k,isol) 2342 IF (ok_ice_sursat) THEN 2320 2343 rneb_seri(i,k) = qx(i,k,irneb) 2344 ENDIF 2345 IF (ok_bs) THEN 2346 qbs_seri(i,k)= qx(i,k,ibs) 2347 ENDIF 2348 2321 2349 ENDIF 2350 2351 2322 2352 ENDDO 2323 2353 ENDDO … … 2328 2358 qql1(:)=0.0 2329 2359 DO k = 1, klev 2330 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k) )*zmasse(:,k)2360 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k) 2331 2361 ENDDO 2332 2362 ENDIF … … 2384 2414 d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep 2385 2415 d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep 2416 d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2386 2417 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2387 2418 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2390 2421 CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d) 2391 2422 d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep 2423 CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d) 2424 d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep 2392 2425 ! !! RomP >>> td dyn traceur 2393 2426 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep … … 2405 2438 d_ql_dyn2d(:) = 0.0 2406 2439 d_qs_dyn2d(:) = 0.0 2440 d_qbs_dyn2d(:)= 0.0 2407 2441 ! !! RomP >>> td dyn traceur 2408 2442 IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0 2409 2443 ! !! RomP <<< 2410 2444 d_rneb_dyn(:,:)=0.0 2445 d_qbs_dyn(:,:)=0.0 2411 2446 ancien_ok = .TRUE. 2412 2447 ENDIF … … 2524 2559 2525 2560 CALL add_phys_tend & 2526 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva, paprs,&2561 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,& 2527 2562 'eva',abortphy,flag_inhib_tend,itap,0) 2528 2563 CALL prt_enerbil('eva',itap) … … 2689 2724 longitude_deg, latitude_deg, rugoro, zrmu0, & 2690 2725 sollwdown, cldt, & 2691 rain_fall, snow_fall, solsw, solswfdiff, sollw, &2726 rain_fall, snow_fall, bs_fall, solsw, solswfdiff, sollw, & 2692 2727 gustiness, & 2693 t_seri, q_seri, u_seri, v_seri, &2728 t_seri, q_seri, qbs_seri, u_seri, v_seri, & 2694 2729 !nrlmd+jyg< 2695 2730 wake_deltat, wake_deltaq, wake_cstar, wake_s, & … … 2702 2737 !albedo SB >>> 2703 2738 ! albsol1, albsol2, sens, evap, & 2704 albsol_dir, albsol_dif, sens, evap, 2739 albsol_dir, albsol_dif, sens, evap, snowerosion, & 2705 2740 !albedo SB <<< 2706 2741 albsol3_lic,runoff, snowhgt, qsnow, to_ice, sissnow, & 2707 2742 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 2708 d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_t_diss, &2743 d_t_vdf, d_q_vdf, d_qbs_vdf, d_u_vdf, d_v_vdf, d_t_diss, & 2709 2744 !nrlmd< 2710 2745 !jyg< … … 2732 2767 fluxt, fluxu, fluxv, & 2733 2768 dsens, devap, zxsnow, & 2734 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke, &2769 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, & 2735 2770 !nrlmd+jyg< 2736 2771 wake_delta_pbl_TKE, & … … 2757 2792 IF (klon_glo==1) THEN 2758 2793 CALL add_pbl_tend & 2759 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&2794 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 2760 2795 'vdf',abortphy,flag_inhib_tend,itap) 2761 2796 ELSE 2762 2797 CALL add_phys_tend & 2763 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&2798 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 2764 2799 'vdf',abortphy,flag_inhib_tend,itap,0) 2765 2800 ENDIF 2766 2801 CALL prt_enerbil('vdf',itap) 2802 2767 2803 !-------------------------------------------------------------------- 2768 2804 … … 2815 2851 2816 2852 ENDIF 2853 2854 ! ================================================================== 2855 ! Blowing snow sublimation and sedimentation 2856 2857 d_t_bs(:,:)=0. 2858 d_q_bs(:,:)=0. 2859 d_qbs_bs(:,:)=0. 2860 bsfl(:,:)=0. 2861 bs_fall(:)=0. 2862 IF (ok_bs) THEN 2863 2864 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, & 2865 d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall) 2866 2867 CALL add_phys_tend & 2868 (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,& 2869 'bs',abortphy,flag_inhib_tend,itap,0) 2870 2871 ENDIF 2872 2817 2873 ! =================================================================== c 2818 2874 ! Calcul de Qsat … … 3239 3295 !! 3240 3296 !! 3241 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &3297 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, & 3242 3298 'convection',abortphy,flag_inhib_tend,itap,0) 3243 3299 CALL prt_enerbil('convection',itap) … … 3370 3426 !----------------------------------------------------------------------- 3371 3427 ! ajout des tendances des poches froides 3372 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0, paprs,'wake', &3428 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', & 3373 3429 abortphy,flag_inhib_tend,itap,0) 3374 3430 CALL prt_enerbil('wake',itap) … … 3528 3584 ! 3529 3585 CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs, & 3530 dql0,dqi0, paprs,'thermals', abortphy,flag_inhib_tend,itap,0)3586 dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0) 3531 3587 CALL prt_enerbil('thermals',itap) 3532 3588 ! … … 3590 3646 !-------------------------------------------------------------------- 3591 3647 ! ajout des tendances de l'ajustement sec ou des thermiques 3592 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0, paprs, &3648 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, & 3593 3649 'ajsb',abortphy,flag_inhib_tend,itap,0) 3594 3650 CALL prt_enerbil('ajsb',itap) … … 3679 3735 ! write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1) 3680 3736 !-JLD 3681 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc, paprs, &3737 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, & 3682 3738 'lsc',abortphy,flag_inhib_tend,itap,0) 3683 3739 CALL prt_enerbil('lsc',itap) … … 3702 3758 ENDIF 3703 3759 3704 !--------------------------------------------------------------------------- 3760 3761 !--------------------------------------------------------------------------- 3705 3762 DO k = 1, klev 3706 3763 DO i = 1, klon 3707 3764 cldfra(i,k) = rneb(i,k) 3708 3765 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 3766 !EV: en effet etrange, j'ajouterais aussi qs_seri 3767 ! plus largement, je nettoierais (enleverrais) ces lignes 3709 3768 IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k) 3710 3769 ENDDO 3711 3770 ENDDO 3771 3772 3773 ! Option to activate the radiative effect of blowing snow (ok_rad_bs) 3774 ! makes sense only if the new large scale condensation scheme is active 3775 ! with the ok_icefra_lscp flag active as well 3776 3777 IF (ok_bs .AND. ok_rad_bs) THEN 3778 IF (ok_new_lscp .AND. ok_icefra_lscp) THEN 3779 DO k=1,klev 3780 DO i=1,klon 3781 radocond(i,k)=radocond(i,k)+qbs_seri(i,k) 3782 picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k)) 3783 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 3784 cldfra(i,k)=max(cldfra(i,k),qbsfra) 3785 ENDDO 3786 ENDDO 3787 ELSE 3788 WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow" 3789 WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false" 3790 abort_message='inconsistency in cloud phase for blowing snow' 3791 CALL abort_physic(modname,abort_message,1) 3792 ENDIF 3793 3794 ENDIF 3795 3712 3796 IF (check) THEN 3713 3797 za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area) … … 4510 4594 ENDDO 4511 4595 4512 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0, paprs,'SW',abortphy,flag_inhib_tend,itap,0)4596 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0) 4513 4597 CALL prt_enerbil('SW',itap) 4514 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0, paprs,'LW',abortphy,flag_inhib_tend,itap,0)4598 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0) 4515 4599 CALL prt_enerbil('LW',itap) 4516 4600 … … 4587 4671 !----------------------------------------------------------------------- 4588 4672 ! ajout des tendances de la trainee de l'orographie 4589 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0, paprs,'oro', &4673 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', & 4590 4674 abortphy,flag_inhib_tend,itap,0) 4591 4675 CALL prt_enerbil('oro',itap) … … 4638 4722 4639 4723 ! ajout des tendances de la portance de l'orographie 4640 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &4724 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, & 4641 4725 'lif', abortphy,flag_inhib_tend,itap,0) 4642 4726 CALL prt_enerbil('lif',itap) … … 4663 4747 d_t_hin(:, :)=0. 4664 4748 CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, & 4665 dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)4749 dqi0, dqbs0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0) 4666 4750 CALL prt_enerbil('hin',itap) 4667 4751 ENDIF … … 4681 4765 ENDDO 4682 4766 4683 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &4767 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, & 4684 4768 paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0) 4685 4769 CALL prt_enerbil('front_gwd_rando',itap) … … 4690 4774 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 4691 4775 du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress) 4692 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &4776 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, & 4693 4777 paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0) 4694 4778 CALL prt_enerbil('flott_gwd_rando',itap) … … 4742 4826 ! ajout de la tendance d'humidite due au methane 4743 4827 d_q_ch4_dtime(:,:) = d_q_ch4(:,:)*phys_tstep 4744 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &4828 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, & 4745 4829 'q_ch4', abortphy,flag_inhib_tend,itap,0) 4746 4830 d_q_ch4(:,:) = d_q_ch4_dtime(:,:)/phys_tstep … … 5047 5131 5048 5132 CALL add_phys_tend & 5049 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep, paprs,&5133 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,& 5050 5134 'rep',abortphy,flag_inhib_tend,itap,0) 5051 5135 IF (abortphy==1) Print*,'ERROR ABORT REP' … … 5124 5208 ! prlw = colonne eau liquide 5125 5209 ! prlw = colonne eau solide 5210 ! prbsw = colonne neige soufflee 5126 5211 prw(:) = 0. 5127 5212 prlw(:) = 0. 5128 5213 prsw(:) = 0. 5214 prbsw(:) = 0. 5129 5215 DO k = 1, klev 5130 5216 prw(:) = prw(:) + q_seri(:,k)*zmasse(:,k) 5131 5217 prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k) 5132 5218 prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k) 5219 prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k) 5133 5220 ENDDO 5134 5221 ! … … 5189 5276 ENDIF 5190 5277 !--ice_sursat: nqo=4, on ajoute rneb 5191 IF (nqo == 4) THEN5278 IF (nqo.ge.4 .and. ok_ice_sursat) THEN 5192 5279 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 5193 5280 ENDIF 5281 5282 IF (nqo.ge.4 .and. ok_bs) THEN 5283 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 5284 ENDIF 5285 5194 5286 ENDDO 5195 5287 ENDDO … … 5238 5330 ql_ancien(:,:) = ql_seri(:,:) 5239 5331 qs_ancien(:,:) = qs_seri(:,:) 5332 qbs_ancien(:,:) = qbs_seri(:,:) 5240 5333 rneb_ancien(:,:) = rneb_seri(:,:) 5241 5334 CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien) 5242 5335 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien) 5243 5336 CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien) 5337 CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien) 5244 5338 ! !! RomP >>> 5245 5339 IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:) … … 5366 5460 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 5367 5461 pplay, lmax_th, aerosol_couple, & 5368 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, &5462 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, & 5369 5463 ok_sync, ptconv, read_climoz, clevSTD, & 5370 5464 ptconvth, d_u, d_t, qx, d_qx, zmasse, & -
LMDZ6/trunk/libf/phylmd/surf_land_mod.F90
r4283 r4523 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/trunk/libf/phylmd/surf_land_orchidee_mod.F90
r4283 r4523 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/trunk/libf/phylmd/surf_landice_mod.F90
r4414 r4523 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/trunk/libf/phylmd/surf_ocean_mod.F90
r4370 r4523 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), & -
LMDZ6/trunk/libf/phylmdiso/add_phys_tend_mod.F90
r4491 r4523 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 #ifdef ISO 20 20 ,zdxt,zdxtl,zdxti & … … 62 62 ! ------------ 63 63 REAL zdu(klon, klev), zdv(klon, klev) 64 REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev) 64 REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev) 65 65 CHARACTER *(*) text 66 66 REAL paprs(klon,klev+1) … … 104 104 PRINT *, ' add_pbl_tend, zzdt ', zzdt 105 105 PRINT *, ' add_pbl_tend, zzdq ', zzdq 106 CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0 &106 CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 & 107 107 #ifdef ISO 108 108 ,zzdxt,zdxtl,zdxti & … … 110 110 ) 111 111 ELSE 112 CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0 &112 CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 & 113 113 #ifdef ISO 114 114 ,zdxt,zdxtl,zdxti & … … 123 123 ! $Id$ 124 124 ! 125 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi, paprs,text, &125 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, & 126 126 abortphy,flag_inhib_tend, itap, diag_mode & 127 127 #ifdef ISO … … 142 142 USE dimphy, ONLY: klon, klev 143 143 USE phys_state_var_mod, ONLY : phys_tstep 144 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q _seri, t_seri144 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri 145 145 #ifdef ISO 146 146 USE phys_local_var_mod, ONLY: xtl_seri, xts_seri, xt_seri … … 150 150 USE print_control_mod, ONLY: prt_level 151 151 USE cmp_seri_mod 152 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 &153 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col152 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 & 153 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 154 154 155 155 #ifdef ISO … … 167 167 !------------ 168 168 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdu, zdv 169 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi 169 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi, zdqbs 170 170 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs 171 171 CHARACTER*(*), INTENT(IN) :: text … … 197 197 ! Save variables, used in diagnostic mode (diag_mode=1). 198 198 REAL, DIMENSION(klon,klev) :: sav_u_seri, sav_v_seri 199 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_q _seri199 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri 200 200 REAL, DIMENSION(klon,klev) :: sav_t_seri 201 201 REAL, DIMENSION(klon,klev) :: sav_zdq … … 228 228 ! zh_ql_col---- total enthalpy of liquid watter (J/m2) 229 229 ! zh_qs_col---- total enthalpy of solid watter (J/m2) 230 ! zh_qbs_col---- total enthalpy of blowing snow (J/m2) 230 231 ! zqw_col------ total mass of watter vapour (kg/m2) 231 232 ! zql_col------ total mass of liquid watter (kg/m2) 232 ! zqs_col------ total mass of solid watter (kg/m2) 233 ! zqs_col------ total mass of cloud ice (kg/m2) 234 ! zqbs_col------ total mass of blowing snow (kg/m2) 233 235 ! zek_col------ total kinetic energy (kg/m2) 234 236 ! … … 237 239 REAL zql_col(klon,2) 238 240 REAL zqs_col(klon,2) 241 REAL zqbs_col(klon,2) 239 242 REAL zek_col(klon,2) 240 243 REAL zh_dair_col(klon,2) 241 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2) 244 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2) 242 245 REAL zh_col(klon,2) 243 246 … … 278 281 sav_ql_seri(:,:) = ql_seri(:,:) 279 282 sav_qs_seri(:,:) = qs_seri(:,:) 283 sav_qbs_seri(:,:) = qbs_seri(:,:) 280 284 sav_q_seri(:,:) = q_seri(:,:) 281 285 sav_t_seri(:,:) = t_seri(:,:) … … 304 308 305 309 CALL integr_v(klon, klev, zcpvap, & 306 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &307 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &308 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))310 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, & 311 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 312 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 309 313 310 314 end if ! end if (fl_ebil .GT. 0) … … 337 341 ql_seri(:,:)=ql_seri(:,:)+zdql(:,:) 338 342 qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:) 343 qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:) 339 344 #ifdef ISO 340 345 xtl_seri(:,:,:)=xtl_seri(:,:,:)+zdxtl(:,:,:) … … 601 606 ql_seri(:,:)=ql_seri(:,:)-zdql(:,:) 602 607 qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:) 608 qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:) 603 609 ENDIF 604 610 … … 615 621 616 622 CALL integr_v(klon, klev, zcpvap, & 617 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &618 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &619 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))623 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, & 624 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 625 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 620 626 621 627 ! ------------------------------------------------ … … 626 632 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 627 633 d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep 628 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) 634 d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep 635 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:) 629 636 630 637 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 634 641 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 635 642 d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep 643 d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep 636 644 637 645 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 645 653 ql_seri(:,:) = sav_ql_seri(:,:) 646 654 qs_seri(:,:) = sav_qs_seri(:,:) 655 qbs_seri(:,:) = sav_qbs_seri(:,:) 647 656 q_seri(:,:) = sav_q_seri(:,:) 648 657 t_seri(:,:) = sav_t_seri(:,:) … … 659 668 END SUBROUTINE add_phys_tend 660 669 661 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &662 zdu,zdv,zdt,zdq,zdql,zdqs, paprs,text)670 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, & 671 zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text) 663 672 !====================================================================== 664 673 ! Ajoute les tendances des variables physiques aux variables … … 676 685 USE print_control_mod, ONLY: prt_level 677 686 USE cmp_seri_mod 678 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 &679 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col687 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 & 688 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 680 689 IMPLICIT none 681 690 include "YOMCST.h" … … 686 695 INTEGER, INTENT(IN) :: nlon, nlev 687 696 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: uu, vv 688 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs 697 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs 689 698 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdu, zdv 690 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs 699 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs, zdqbs 691 700 REAL, DIMENSION(nlon,nlev+1), INTENT(IN) :: paprs 692 701 CHARACTER*(*), INTENT(IN) :: text … … 695 704 !-------- 696 705 REAL, DIMENSION(nlon,nlev) :: uu_n, vv_n 697 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n 706 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n, qbs_n 698 707 699 708 … … 718 727 ! zqw_col------ total mass of watter vapour (kg/m2) 719 728 ! zql_col------ total mass of liquid watter (kg/m2) 720 ! zqs_col------ total mass of solid watter (kg/m2) 729 ! zqs_col------ total mass of cloud ice (kg/m2) 730 ! zqbs_col------ total mass of blowing snow (kg/m2) 721 731 ! zek_col------ total kinetic energy (kg/m2) 722 732 ! … … 725 735 REAL zql_col(nlon,2) 726 736 REAL zqs_col(nlon,2) 737 REAL zqbs_col(nlon,2) 727 738 REAL zek_col(nlon,2) 728 739 REAL zh_dair_col(nlon,2) 729 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2) 740 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2) 730 741 REAL zh_col(nlon,2) 731 742 … … 760 771 761 772 CALL integr_v(nlon, nlev, rcpv, & 762 temp, qv, ql, qs, uu, vv, zairm, &763 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &764 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))773 temp, qv, ql, qs, qbs, uu, vv, zairm, & 774 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 775 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 765 776 766 777 end if ! end if (fl_ebil .GT. 0) … … 775 786 ql_n(:,:)=ql(:,:)+zdql(:,:) 776 787 qs_n(:,:)=qs(:,:)+zdqs(:,:) 788 qbs_n(:,:)=qbs(:,:)+zdqbs(:,:) 777 789 temp_n(:,:)=temp(:,:)+zdt(:,:) 778 790 … … 791 803 792 804 CALL integr_v(nlon, nlev, rcpv, & 793 temp_n, qv_n, ql_n, qs_n, uu_n, vv_n, zairm, &794 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &795 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))805 temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, & 806 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 807 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 796 808 797 809 ! ------------------------------------------------ … … 802 814 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 803 815 d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep 804 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) 816 d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep 817 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:) 805 818 806 819 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 814 827 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 815 828 d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep 829 d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep 816 830 817 831 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 824 838 825 839 SUBROUTINE integr_v(nlon, nlev, zcpvap, & 826 temp, qv, ql, qs, uu, vv, zairm, &827 zqw_col, zql_col, zqs_col, z ek_col, zh_dair_col, &828 zh_qw_col, zh_ql_col, zh_qs_col, zh_ col)840 temp, qv, ql, qs, qbs, uu, vv, zairm, & 841 zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, & 842 zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col) 829 843 830 844 IMPLICIT none … … 833 847 INTEGER, INTENT(IN) :: nlon,nlev 834 848 REAL, INTENT(IN) :: zcpvap 835 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, uu, vv849 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs, uu, vv 836 850 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zairm 837 851 REAL, DIMENSION(nlon), INTENT(OUT) :: zqw_col 838 852 REAL, DIMENSION(nlon), INTENT(OUT) :: zql_col 839 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col 853 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col, zqbs_col 840 854 REAL, DIMENSION(nlon), INTENT(OUT) :: zek_col 841 855 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_dair_col 842 856 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qw_col 843 857 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_ql_col 844 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col 858 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col, zh_qbs_col 845 859 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_col 846 860 … … 852 866 zql_col(:) = 0. 853 867 zqs_col(:) = 0. 868 zqbs_col(:) = 0. 854 869 zek_col(:) = 0. 855 870 zh_dair_col(:) = 0. … … 857 872 zh_ql_col(:) = 0. 858 873 zh_qs_col(:) = 0. 874 zh_qbs_col(:) = 0. 859 875 860 876 !JLD write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice … … 869 885 zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k) 870 886 zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k) 887 zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k) 871 888 ! Kinetic Energy 872 889 zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k) … … 877 894 zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k) !jyg 878 895 zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k) !jyg 896 zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k) !jyg 879 897 END DO 880 898 END DO 881 899 ! compute total air enthalpy 882 zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) 900 zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:) 883 901 884 902 END SUBROUTINE integr_v … … 895 913 USE dimphy, ONLY: klon, klev 896 914 USE phys_state_var_mod, ONLY : phys_tstep 897 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con 915 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall 898 916 USE geometry_mod, ONLY: longitude_deg, latitude_deg 899 917 USE print_control_mod, ONLY: prt_level 900 918 USE cmp_seri_mod 901 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 &902 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col919 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 & 920 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 903 921 USE phys_local_var_mod, ONLY: evap, sens 904 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q _seri, t_seri &922 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri & 905 923 & , rain_lsc, snow_lsc 906 924 USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd … … 939 957 bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) & 940 958 & + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1) 959 CASE("bs") param 960 bilq_bnd = - bs_fall(1) 961 bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1) 941 962 CASE("convection") param 942 963 bilq_bnd = - rain_con(1) - snow_con(1) … … 975 996 if ( prt_level .GE. 5) then 976 997 write(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd 977 write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1) 978 write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1) 998 write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1), d_qbs_col(1) 999 write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1),d_h_qbs_col(1) 979 1000 end if 980 1001 -
LMDZ6/trunk/libf/phylmdiso/pbl_surface_mod.F90
r4491 r4523 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 … … 261 262 rlon, rlat, rugoro, rmu0, & 262 263 lwdown_m, cldt, & 263 rain_f, snow_f, solsw_m, solswfdiff_m, sollw_m, &264 rain_f, snow_f, bs_f, solsw_m, solswfdiff_m, sollw_m, & 264 265 gustiness, & 265 t, q, u, v, &266 t, q, qbs, u, v, & 266 267 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 267 268 !! t_x, q_x, t_w, q_w, & … … 275 276 beta, & 276 277 !>jyg 277 alb_dir_m, alb_dif_m, zxsens, zxevap, &278 alb_dir_m, alb_dif_m, zxsens, zxevap, zxsnowerosion, & 278 279 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 279 280 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 280 d_t, d_q, d_u, d_v, d_t_diss, &281 d_t, d_q, d_qbs, d_u, d_v, d_t_diss, & 281 282 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 282 283 d_t_w, d_q_w, & … … 301 302 rh2m, zxfluxu, zxfluxv, & 302 303 z0m, z0h, agesno, sollw, solsw, & 303 d_ts, evap, fluxlat, t2m, &304 d_ts, evap, fluxlat, t2m, & 304 305 wfbils, wfbilo, wfevap, wfrain, wfsnow, & 305 306 flux_t, flux_u, flux_v, & … … 307 308 !jyg< 308 309 !! zxfluxt, zxfluxq, q2m, flux_q, tke, & 309 zxfluxt, zxfluxq, q2m, flux_q, tke_x, &310 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, & 310 311 !>jyg 311 312 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 410 411 dser, dt_ds, zsig, zmea 411 412 use phys_output_var_mod, only: tkt, tks, taur, sss 413 use blowing_snow_ini_mod, only : zeta_bs 412 414 #ifdef CPP_XIOS 413 415 USE wxios, ONLY: missing_val … … 444 446 REAL, DIMENSION(klon), INTENT(IN) :: rain_f ! rain fall 445 447 REAL, DIMENSION(klon), INTENT(IN) :: snow_f ! snow fall 448 REAL, DIMENSION(klon), INTENT(IN) :: bs_f ! blowing snow fall 446 449 REAL, DIMENSION(klon), INTENT(IN) :: solsw_m ! net shortwave radiation at mean surface 447 450 REAL, DIMENSION(klon), INTENT(IN) :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface … … 449 452 REAL, DIMENSION(klon,klev), INTENT(IN) :: t ! temperature (K) 450 453 REAL, DIMENSION(klon,klev), INTENT(IN) :: q ! water vapour (kg/kg) 454 REAL, DIMENSION(klon,klev), INTENT(IN) :: qbs ! blowing snow specific content (kg/kg) 451 455 REAL, DIMENSION(klon,klev), INTENT(IN) :: u ! u speed 452 456 REAL, DIMENSION(klon,klev), INTENT(IN) :: v ! v speed … … 521 525 ! (=> positive sign upwards) 522 526 REAL, DIMENSION(klon), INTENT(OUT) :: zxevap ! water vapour flux at surface, positiv upwards 527 REAL, DIMENSION(klon), INTENT(OUT) :: zxsnowerosion ! blowing snow flux at surface 523 528 REAL, DIMENSION(klon), INTENT(OUT) :: zxtsol ! temperature at surface, mean for each grid point 524 529 !!! jyg le ??? … … 537 542 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_u ! change in u speed 538 543 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_v ! change in v speed 544 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_qbs ! change in blowing snow specific content 545 539 546 540 547 REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1) … … 604 611 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 605 612 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 606 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface613 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 607 614 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 608 615 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 631 638 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxt ! sensible heat flux, mean for each grid point 632 639 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxq ! water vapour flux, mean for each grid point 640 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxqbs ! blowing snow flux, mean for each grid point 633 641 REAL, DIMENSION(klon, nbsrf),INTENT(OUT) :: q2m ! water vapour at 2 meter height 634 642 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q ! water vapour flux(latent flux) (kg/m**2/s) 643 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs ! blowind snow vertical flux (kg/m**2 644 635 645 #ifdef ISO 636 646 REAL, DIMENSION(ntraciso,klon), INTENT(OUT) :: dflux_xt ! change of water vapour flux … … 683 693 REAL, DIMENSION(klon) :: yalb,yalb_vis 684 694 !albedo SB <<< 685 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1 695 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1, yqbs1 686 696 REAL, DIMENSION(klon) :: yqa 687 697 REAL, DIMENSION(klon) :: ysnow, yqsurf, yagesno, yqsol 688 REAL, DIMENSION(klon) :: yrain_f, ysnow_f 698 REAL, DIMENSION(klon) :: yrain_f, ysnow_f, ybs_f 689 699 #ifdef ISO 690 700 REAL, DIMENSION(ntraciso,klon) :: yxt1 … … 699 709 REAL, DIMENSION(klon) :: yrugoro 700 710 REAL, DIMENSION(klon) :: yfluxlat 711 REAL, DIMENSION(klon) :: yfluxbs 701 712 REAL, DIMENSION(klon) :: y_d_ts 702 713 REAL, DIMENSION(klon) :: y_flux_t1, y_flux_q1 … … 707 718 #endif 708 719 REAL, DIMENSION(klon) :: y_flux_u1, y_flux_v1 720 REAL, DIMENSION(klon) :: y_flux_bs, y_flux0 709 721 REAL, DIMENSION(klon) :: yt2m, yq2m, yu10m 710 722 INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w … … 736 748 #endif 737 749 REAL, DIMENSION(klon) :: AcoefU, AcoefV, BcoefU, BcoefV 750 REAL, DIMENSION(klon) :: AcoefQBS, BcoefQBS 738 751 REAL, DIMENSION(klon) :: ypsref 739 752 REAL, DIMENSION(klon) :: yevap, yevap_pot, ytsurf_new, yalb3_new … … 744 757 REAL, DIMENSION(klon) :: meansqT ! mean square deviation of subsurface temperatures 745 758 REAL, DIMENSION(klon) :: alb_m ! mean albedo for whole SW interval 746 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss 759 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs 747 760 REAL, DIMENSION(klon,klev) :: y_d_u, y_d_v 748 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q 761 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q, y_flux_qbs 749 762 REAL, DIMENSION(klon,klev) :: y_flux_u, y_flux_v 750 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq 763 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq, ycoefqbs 751 764 REAL, DIMENSION(klon) :: ycdragh, ycdragq, ycdragm 752 765 REAL, DIMENSION(klon,klev) :: yu, yv 753 REAL, DIMENSION(klon,klev) :: yt, yq 766 REAL, DIMENSION(klon,klev) :: yt, yq, yqbs 754 767 #ifdef ISO 755 768 REAL, DIMENSION(ntraciso,klon) :: yxtevap … … 819 832 REAL, DIMENSION(klon,klev) :: CcoefH, CcoefQ, DcoefH, DcoefQ 820 833 REAL, DIMENSION(klon,klev) :: CcoefU, CcoefV, DcoefU, DcoefV 834 REAL, DIMENSION(klon,klev) :: CcoefQBS, DcoefQBS 821 835 REAL, DIMENSION(klon,klev) :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x 822 836 REAL, DIMENSION(klon,klev) :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w … … 824 838 REAL, DIMENSION(klon,klev) :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w 825 839 REAL, DIMENSION(klon,klev) :: Kcoef_hq, Kcoef_m, gama_h, gama_q 840 REAL, DIMENSION(klon,klev) :: gama_qbs, Kcoef_qbs 826 841 REAL, DIMENSION(klon,klev) :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x 827 842 REAL, DIMENSION(klon,klev) :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w … … 1016 1031 REAL, DIMENSION(klon,nbsrf) :: zx_t1 1017 1032 REAL, DIMENSION(klon, nbsrf) :: alb ! mean albedo for whole SW interval 1033 REAL, DIMENSION(klon,nbsrf) :: snowerosion 1018 1034 REAL, DIMENSION(klon) :: ylwdown ! jg : temporary (ysollwdown) 1019 1035 REAL, DIMENSION(klon) :: ygustiness ! jg : temporary (ysollwdown) … … 1189 1205 alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0. 1190 1206 !albedo SB <<< 1191 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. 1207 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0. 1192 1208 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0. 1193 1209 zxfluxlat(:)=0. 1194 1210 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 1195 1211 zn2mout(:,:)=0 ; 1196 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_ u(:,:)=0. ; d_v(:,:)=0.1212 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0. 1197 1213 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0. 1198 1214 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0. … … 1214 1230 d_ts(:,:)=0. 1215 1231 evap(:,:)=0. 1232 snowerosion(:,:)=0. 1216 1233 fluxlat(:,:)=0. 1217 1234 wfbils(:,:)=0. ; wfbilo(:,:)=0. 1218 1235 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0. 1219 1236 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0. 1237 flux_qbs(:,:,:)=0. 1220 1238 dflux_t(:)=0. ; dflux_q(:)=0. 1221 1239 zxsnow(:)=0. 1222 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0. 1240 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0. 1223 1241 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0. 1224 1242 runoff(:)=0. … … 1266 1284 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 1267 1285 !albedo SB <<< 1268 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.01286 yrain_f = 0.0 ; ysnow_f = 0.0 ; ybs_f=0.0 ; yfder = 0.0 ; ysolsw = 0.0 1269 1287 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yu1 = 0.0 1270 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 1288 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 ; yqbs1 = 0.0 1271 1289 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 1272 1290 yq = 0.0 ; y_dflux_t = 0.0 ; y_dflux_q = 0.0 1291 yqbs(:,:)=0.0 1273 1292 yrugoro = 0.0 ; ywindsp = 0.0 1274 1293 !! d_ts = 0.0 ; yfluxlat=0.0 ; flux_t = 0.0 ; flux_q = 0.0 1275 yfluxlat=0.0 1294 yfluxlat=0.0 ; y_flux0(:)=0.0 1276 1295 !! flux_u = 0.0 ; flux_v = 0.0 ; d_t = 0.0 ; d_q = 0.0 1277 1296 !! d_t_diss= 0.0 ;d_u = 0.0 ; d_v = 0.0 … … 1288 1307 ycldt = 0.0 ; yrmu0 = 0.0 1289 1308 ! Martin 1309 y_d_qbs(:,:)=0.0 1290 1310 1291 1311 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 1629 1649 yrain_f(j) = rain_f(i) 1630 1650 ysnow_f(j) = snow_f(i) 1651 ybs_f(j) = bs_f(i) 1631 1652 yagesno(j) = agesno(i,nsrf) 1632 1653 yfder(j) = fder(i) … … 1640 1661 yu1(j) = u(i,1) 1641 1662 yv1(j) = v(i,1) 1663 yqbs1(j) = qbs(i,1) 1642 1664 ypaprs(j,klev+1) = paprs(i,klev+1) 1643 1665 !jyg< … … 1653 1675 !!! nrlmd le 13/06/2011 1654 1676 y_delta_tsurf(j)=delta_tsurf(i,nsrf) 1677 yfluxbs(j)=0.0 1678 y_flux_bs(j) = 0.0 1655 1679 !!! 1656 1680 #ifdef ISO … … 1721 1745 yt(j,k) = t(i,k) 1722 1746 yq(j,k) = q(i,k) 1747 yqbs(j,k)=qbs(i,k) 1723 1748 #ifdef ISO 1724 1749 do ixt=1,ntraciso … … 1951 1976 print *,' args coef_diff_turb: ycdragh ', ycdragh 1952 1977 print *,' args coef_diff_turb: ytke ', ytke 1953 1954 1978 ENDIF 1955 1979 … … 1960 1984 1961 1985 ELSE 1962 1963 1986 1964 1987 CALL coef_diff_turb(dtime, nsrf, knon, ni, & … … 1981 2004 1982 2005 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh 1983 ! 2006 2007 1984 2008 ELSE !(iflag_split .eq.0) 2009 1985 2010 IF (prt_level >=10) THEN 1986 2011 print *,' args coef_diff_turb: yu_x ', yu_x … … 2020 2045 ENDIF 2021 2046 2022 ENDIF ! iflag_pbl >= 502047 ENDIF ! iflag_pbl >= 50 2023 2048 2024 2049 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x … … 2034 2059 print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w 2035 2060 print *,' args coef_diff_turb: ytke_w ', ytke_w 2036 2061 ENDIF 2037 2062 2038 2063 IF (iflag_pbl>=50) THEN … … 2062 2087 2063 2088 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w 2064 ! 2089 2065 2090 !!!jyg le 10/04/2013 2066 2091 !! En attendant de traiter le transport des traceurs dans les poches froides, formule … … 2072 2097 ENDDO 2073 2098 ENDDO 2074 !!!2075 2099 ENDIF ! (iflag_split .eq.0) 2076 !!!2077 2100 2078 2101 !**************************************************************************************** … … 2171 2194 ENDIF ! (iflag_split .eq.0) 2172 2195 !!! 2196 2197 ! For blowing snow: 2198 IF (ok_bs) THEN 2199 ! following Bintanja et al 2000, part II 2200 ! we assume that the eddy diffuvisity coefficient for 2201 ! suspended particles is larger than Km by a factor zeta_bs 2202 ! which is equal to 3 by default 2203 ycoefqbs=ycoefm*zeta_bs 2204 CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, & 2205 ydelp, yt, yqbs, dtime, & 2206 CcoefQBS, DcoefQBS, & 2207 Kcoef_qbs, gama_qbs, & 2208 AcoefQBS, BcoefQBS) 2209 ENDIF 2210 2173 2211 2174 2212 !**************************************************************************************** … … 2356 2394 debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, & 2357 2395 !!jyg yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2358 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, y t1, yq1,&2396 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2359 2397 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2360 2398 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2362 2400 ylwdown, yq2m, yt2m, & 2363 2401 ysnow, yqsol, yagesno, ytsoil, & 2364 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat, &2402 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,& 2365 2403 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 2366 2404 y_flux_u1, y_flux_v1, & … … 2433 2471 yrmu0, ylwdown, yalb, zgeo1, & 2434 2472 ysolsw, ysollw, yts, ypplay(:,1), & 2435 !!jyg ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2436 ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,& 2473 ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2437 2474 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2438 2475 AcoefU, AcoefV, BcoefU, BcoefV, & 2439 2476 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2440 ysnow, yqsurf, yqsol, yagesno, &2477 ysnow, yqsurf, yqsol,yqbs1, yagesno, & 2441 2478 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 2442 y tsurf_new, y_dflux_t, y_dflux_q, &2479 yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, & 2443 2480 yzmea, yzsig, ycldt, & 2444 2481 ysnowhgt, yqsnow, ytoice, ysissnow, & … … 2499 2536 itap, dtime, jour, knon, ni, & 2500 2537 !!jyg ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2501 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, y t(:,1), yq(:,1),& ! ym missing init2538 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),& ! ym missing init 2502 2539 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2503 2540 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2664 2701 ENDDO 2665 2702 ENDIF ! (ok_flux_surf) 2703 2704 ! flux of blowing snow at the first level 2705 IF (ok_bs) THEN 2706 DO j=1,knon 2707 y_flux_bs(j)=yfluxbs(j) 2708 ENDDO 2709 ENDIF 2666 2710 ! 2667 2711 ! ------------------------------------------------------------------------------ … … 2991 3035 ! 2992 3036 ENDIF ! (iflag_split .eq.0) 3037 3038 IF (ok_bs) THEN 3039 CALL climb_qbs_up(knon, dtime, yqbs, & 3040 y_flux_bs, ypaprs, ypplay, & 3041 AcoefQBS, BcoefQBS, & 3042 CcoefQBS, DcoefQBS, & 3043 Kcoef_qbs, gama_qbs, & 3044 y_flux_qbs(:,:), y_d_qbs(:,:)) 3045 ENDIF 3046 2993 3047 !!! 2994 3048 !! … … 3157 3211 !!! 3158 3212 3159 ! print*,'Dans pbl OK1' 3160 3161 !jyg< 3162 !! evap(:,nsrf) = - flux_q(:,1,nsrf) 3163 !>jyg 3213 ! tendencies of blowing snow 3214 IF (ok_bs) THEN 3215 DO k = 1, klev 3216 DO j = 1, knon 3217 i = ni(j) 3218 y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j) 3219 flux_qbs(i,k,nsrf) = y_flux_qbs(j,k) 3220 ENDDO 3221 ENDDO 3222 ENDIF 3223 3224 3164 3225 DO j = 1, knon 3165 3226 i = ni(j) 3166 3227 evap(i,nsrf) = - flux_q(i,1,nsrf) !jyg 3228 if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif 3167 3229 beta(i,nsrf) = ybeta(j) !jyg 3168 3230 d_ts(i,nsrf) = y_d_ts(j) … … 3392 3454 ENDDO 3393 3455 ENDDO 3456 3457 3458 IF (ok_bs) THEN 3459 DO k = 1, klev 3460 DO j = 1, knon 3461 i = ni(j) 3462 d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k) 3463 ENDDO 3464 ENDDO 3465 ENDIF 3466 3394 3467 3395 3468 #ifdef ISO … … 3894 3967 fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i) 3895 3968 ENDDO 3969 3970 ! if blowing snow 3971 if (ok_bs) then 3972 DO nsrf = 1, nbsrf 3973 DO k = 1, klev 3974 DO i = 1, klon 3975 zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf) 3976 ENDDO 3977 ENDDO 3978 ENDDO 3979 3980 DO i = 1, klon 3981 zxsnowerosion(i) = zxfluxqbs(i,1) ! blowings snow flux at the surface 3982 END DO 3983 endif 3984 3985 3986 3896 3987 #ifdef ISO 3897 3988 DO i = 1, klon -
LMDZ6/trunk/libf/phylmdiso/phyredem.F90
r4491 r4523 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, u_ancien,&20 prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 21 ql_ancien, qs_ancien, qbs_ancien, u_ancien, & 22 22 v_ancien, clwcon, rnebcon, ratqs, pbl_tke, & 23 23 wake_delta_pbl_tke, zmax0, f0, sig1, w01, & … … 260 260 261 261 CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien) 262 263 IF (ok_bs) THEN 264 CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall) 265 CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien) 266 CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien) 267 ENDIF 262 268 263 269 CALL put_field(pass,"PRWANCIEN", "PRWANCIEN", prw_ancien) -
LMDZ6/trunk/libf/phylmdiso/phys_local_var_mod.F90
r4143 r4523 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(:,:) … … 361 365 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt 362 366 !$OMP THREADPRIVATE(JrNt) 363 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw364 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)367 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw 368 !$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw) 365 369 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m 366 370 !$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m) … … 379 383 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte 380 384 !$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte) 385 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic 386 !$OMP THREADPRIVATE(zxustartlic, zxrhoslic) 381 387 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving 382 388 !$OMP THREADPRIVATE(zxfqcalving) … … 567 573 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi 568 574 !$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi) 569 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca 570 !$OMP THREADPRIVATE(prfl, psfl, fraca )575 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl 576 !$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl) 571 577 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2 572 578 !$OMP THREADPRIVATE(Vprecip, zw2) … … 734 740 735 741 IMPLICIT NONE 736 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev) )742 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 737 743 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 738 744 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf)) … … 741 747 ALLOCATE(tr_seri(klon,klev,nbtr)) 742 748 ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev)) 743 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev) )744 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon) )749 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev)) 750 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon)) 745 751 ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev)) 746 752 ALLOCATE(d_tr_dyn(klon,klev,nbtr)) !RomP … … 765 771 ALLOCATE(plul_st(klon),plul_th(klon)) 766 772 ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev)) 767 773 ALLOCATE (d_qbs_vdf(klon,klev)) 774 ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev)) 768 775 ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev)) 769 776 ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev)) … … 925 932 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon)) 926 933 ALLOCATE(JrNt(klon)) 927 ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))928 ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))934 ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon)) 935 ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon)) 929 936 ALLOCATE(s_lcl(klon)) 930 937 ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon)) … … 1055 1062 ALLOCATE(prfl(klon, klev+1)) 1056 1063 ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1)) 1064 ALLOCATE(bsfl(klon,klev+1)) 1057 1065 ALLOCATE(zw2(klon, klev+1)) 1058 1066 … … 1141 1149 USE indice_sol_mod 1142 1150 IMPLICIT NONE 1143 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri )1151 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 1144 1152 DEALLOCATE(u_seri,v_seri) 1145 1153 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime) … … 1147 1155 DEALLOCATE(tr_seri) 1148 1156 DEALLOCATE(d_t_dyn,d_q_dyn) 1149 DEALLOCATE(d_ql_dyn,d_qs_dyn )1150 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d )1157 DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn) 1158 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d) 1151 1159 DEALLOCATE(d_u_dyn,d_v_dyn) 1152 1160 DEALLOCATE(d_tr_dyn) !RomP … … 1171 1179 DEALLOCATE(plul_st,plul_th) 1172 1180 DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss) 1181 DEALLOCATE(d_qbs_vdf) 1182 DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs) 1173 1183 #ifdef ISO 1174 1184 deallocate(xt_seri,xtl_seri,xts_seri) … … 1308 1318 DEALLOCATE(cldm, cldq, cldt, qsat2m) 1309 1319 DEALLOCATE(JrNt) 1310 DEALLOCATE(dthmin, evap, fder, plcl, plfc)1311 DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)1320 DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc) 1321 DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl) 1312 1322 DEALLOCATE(s_pblh, s_pblt, s_therm) 1313 1323 ! … … 1322 1332 DEALLOCATE(zxfqcalving, zxfluxlat) 1323 1333 DEALLOCATE(zxrunofflic) 1334 DEALLOCATE(zxustartlic, zxrhoslic) 1324 1335 DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf) 1325 1336 DEALLOCATE(rain_lsc) … … 1423 1434 1424 1435 1425 DEALLOCATE(prfl, psfl, fraca, Vprecip)1436 DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip) 1426 1437 DEALLOCATE(zw2) 1427 1438 -
LMDZ6/trunk/libf/phylmdiso/phys_output_ctrlout_mod.F90
r4065 r4523 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) /)) … … 1413 1422 'ec550aer', 'Extinction at 550nm', 'm^-1', (/ ('', i=1, 10) /)) 1414 1423 TYPE(ctrl_out), SAVE :: o_lwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1415 'lwcon', 'Cloud liquid water content ', 'kg/kg', (/ ('', i=1, 10) /))1424 'lwcon', 'Cloud liquid water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /)) 1416 1425 TYPE(ctrl_out), SAVE :: o_iwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1417 'iwcon', 'Cloud ice water content ', 'kg/kg', (/ ('', i=1, 10) /))1426 'iwcon', 'Cloud ice water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /)) 1418 1427 TYPE(ctrl_out), SAVE :: o_temp = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), & 1419 1428 'temp', 'Air temperature', 'K', (/ ('', 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/trunk/libf/phylmdiso/phys_output_var_mod.F90
r4374 r4523 29 29 REAL, SAVE, ALLOCATABLE :: d_qw_col(:) ! watter vapour mass budget for each column (kg/m2/s) 30 30 REAL, SAVE, ALLOCATABLE :: d_ql_col(:) ! liquid watter mass budget for each column (kg/m2/s) 31 REAL, SAVE, ALLOCATABLE :: d_qs_col(:) ! solid watter mass budget for each column (kg/m2/s) 31 REAL, SAVE, ALLOCATABLE :: d_qs_col(:) ! cloud ice mass budget for each column (kg/m2/s) 32 REAL, SAVE, ALLOCATABLE :: d_qbs_col(:) ! blowing snow mass budget for each column (kg/m2/s) 32 33 REAL, SAVE, ALLOCATABLE :: d_qt_col(:) ! total watter mass budget for each column (kg/m2/s) 33 34 REAL, SAVE, ALLOCATABLE :: d_ek_col(:) ! kinetic energy budget for each column (W/m2) … … 35 36 REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:) ! enthalpy budget of watter vapour for each column (W/m2) 36 37 REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:) ! enthalpy budget of liquid watter for each column (W/m2) 37 REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:) ! enthalpy budget of solid watter for each column (W/m2) 38 REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:) ! enthalpy budget of cloud ice for each column (W/m2) 39 REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:) ! enthalpy budget of blowing snow for each column (W/m2) 38 40 REAL, SAVE, ALLOCATABLE :: d_h_col(:) ! total enthalpy budget for each column (W/m2) 39 !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col)40 !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col)41 !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col) 42 !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col) 41 43 42 44 ! 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/trunk/libf/phylmdiso/physiq_mod.F90
r4522 r4523 79 79 USE wxios, ONLY: g_ctx, wxios_set_context 80 80 #endif 81 USE atke_turbulence_ini_mod, ONLY : atke_ini82 USE lscp_ini_mod, ONLY : lscp_ini83 81 USE lscp_mod, ONLY : lscp 84 82 USE wake_ini_mod, ONLY : wake_ini 85 83 USE yamada_ini_mod, ONLY : yamada_ini 84 USE atke_turbulence_ini_mod, ONLY : atke_ini 86 85 USE thermcell_ini_mod, ONLY : thermcell_ini 86 USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs 87 USE lscp_ini_mod, ONLY : lscp_ini 87 88 88 89 !USE cmp_seri_mod … … 183 184 ! [Variables internes non sauvegardees de la physique] 184 185 ! Variables locales pour effectuer les appels en serie 185 t_seri,q_seri,ql_seri,qs_seri, u_seri,v_seri,tr_seri,rneb_seri, &186 t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, & 186 187 ! Dynamic tendencies (diagnostics) 187 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_ u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &188 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &188 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, & 189 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, & 189 190 ! Physic tendencies 190 191 d_t_con,d_q_con,d_u_con,d_v_con, & … … 203 204 plul_st,plul_th, & 204 205 ! 205 d_t_vdf,d_q_vdf, d_u_vdf,d_v_vdf,d_t_diss, &206 d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, & 206 207 d_t_vdf_x, d_t_vdf_w, & 207 208 d_q_vdf_x, d_q_vdf_w, & 208 209 d_ts, & 210 ! 211 d_t_bs,d_q_bs,d_qbs_bs, & 209 212 ! 210 213 ! d_t_oli,d_u_oli,d_v_oli, & … … 254 257 cldh, cldl,cldm, cldq, cldt, & 255 258 JrNt, & 256 dthmin, evap, fder, plcl, plfc, &257 prw, prlw, prsw, &259 dthmin, evap, snowerosion,fder, plcl, plfc, & 260 prw, prlw, prsw, prbsw, & 258 261 s_lcl, s_pblh, s_pblt, s_therm, & 259 262 cdragm, cdragh, & … … 343 346 fsolsw, wfbils, wfbilo, & 344 347 wfevap, wfrain, wfsnow, & 345 prfl, psfl, fraca, Vprecip, &348 prfl, psfl,bsfl, fraca, Vprecip, & 346 349 zw2, & 347 350 ! … … 526 529 !====================================================================== 527 530 ! 528 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 529 INTEGER,SAVE :: ivap, iliq, isol, irneb 530 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb )531 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 532 INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs 533 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs) 531 534 ! 532 535 ! … … 905 908 REAL dialiq(klon,klev) ! eau liquide nuageuse 906 909 REAL diafra(klon,klev) ! fraction nuageuse 907 REAL cldliq(klon,klev) ! eau liquide nuageuse910 REAL radocond(klon,klev) ! eau condensee nuageuse 908 911 ! 909 912 !XXX PB 910 913 REAL fluxq(klon,klev, nbsrf) ! flux turbulent d'humidite 914 REAL fluxqbs(klon,klev, nbsrf) ! flux turbulent de neige soufflee 911 915 ! 912 916 REAL zxfluxt(klon, klev) 913 917 REAL zxfluxq(klon, klev) 918 REAL zxfluxqbs(klon,klev) 914 919 REAL zxfluxu(klon, klev) 915 920 REAL zxfluxv(klon, klev) … … 1009 1014 ! 1010 1015 ! tendance nulles 1011 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 1016 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0 1012 1017 #ifdef ISO 1013 1018 REAL, dimension(ntraciso,klon,klev):: dxt0, dxtl0, dxti0 … … 1156 1161 REAL ztsol(klon) 1157 1162 REAL q2m(klon,nbsrf) ! humidite a 2m 1163 REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface 1164 REAL qbsfra ! blowing snow fraction 1158 1165 #ifdef ISO 1159 1166 REAL d_xtw(ntraciso),d_xtl(ntraciso), d_xts(ntraciso) … … 1372 1379 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1373 1380 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1381 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1374 1382 CALL init_etat0_limit_unstruct 1375 1383 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1421 1429 ENDIF 1422 1430 1423 IF (ok_ice_sursat.AND.(nqo. NE.4)) THEN1431 IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN 1424 1432 WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', & 1425 1433 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.' … … 1440 1448 ENDIF 1441 1449 1450 IF (ok_bs) THEN 1451 abort_message='blowing snow cannot be activated with water isotopes yet' 1452 CALL abort_physic(modname,abort_message, 1) 1453 IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN 1454 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1455 'but nqo=', nqo 1456 abort_message='see above' 1457 CALL abort_physic(modname,abort_message, 1) 1458 ENDIF 1459 ENDIF 1442 1460 Ncvpaseq1 = 0 1443 1461 dnwd0=0.0 … … 1893 1911 CALL lscp_ini(pdtphys,ok_ice_sursat) 1894 1912 endif 1913 CALL blowing_snow_ini(prt_level,lunout, & 1914 RCPD, RLSTT, RLVTT, RLMLT, & 1915 RVTMP2, RTT,RD,RG) 1895 1916 1896 1917 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 1919 1940 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 1920 1941 pplay, lmax_th, aerosol_couple, & 1921 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&1942 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync,& 1922 1943 ptconv, read_climoz, clevSTD, & 1923 1944 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 2406 2427 dql0(:,:)=0. 2407 2428 dqi0(:,:)=0. 2429 dqbs0(:,:)=0. 2408 2430 #ifdef ISO 2409 2431 dxt0(:,:,:)=0. … … 2463 2485 q_seri(i,k) = qx(i,k,ivap) 2464 2486 ql_seri(i,k) = qx(i,k,iliq) 2487 qbs_seri(i,k) = 0. 2465 2488 !CR: ATTENTION, on rajoute la variable glace 2466 2489 IF (nqo.EQ.2) THEN !--vapour and liquid only … … 2470 2493 qs_seri(i,k) = qx(i,k,isol) 2471 2494 rneb_seri(i,k) = 0. 2472 ELSE IF (nqo. EQ.4) THEN !--vapour, liquid, ice and rneb2495 ELSE IF (nqo.GE.4) THEN !--vapour, liquid, ice and rneb and blowing snow 2473 2496 qs_seri(i,k) = qx(i,k,isol) 2497 IF (ok_ice_sursat) THEN 2474 2498 rneb_seri(i,k) = qx(i,k,irneb) 2499 ENDIF 2500 IF (ok_bs) THEN 2501 qbs_seri(i,k)= qx(i,k,ibs) 2502 ENDIF 2503 2475 2504 ENDIF 2505 2506 2476 2507 ENDDO 2477 2508 ENDDO … … 2515 2546 qql1(:)=0.0 2516 2547 DO k = 1, klev 2517 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k) )*zmasse(:,k)2548 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k) 2518 2549 ENDDO 2519 2550 #ifdef ISO … … 2631 2662 d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep 2632 2663 d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep 2664 d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2633 2665 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2634 2666 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2637 2669 CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d) 2638 2670 d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep 2671 CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d) 2672 d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep 2639 2673 ! !! RomP >>> td dyn traceur 2640 2674 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep … … 2723 2757 d_ql_dyn2d(:) = 0.0 2724 2758 d_qs_dyn2d(:) = 0.0 2759 d_qbs_dyn2d(:)= 0.0 2725 2760 2726 2761 #ifdef ISO … … 2746 2781 ! !! RomP <<< 2747 2782 d_rneb_dyn(:,:)=0.0 2783 d_qbs_dyn(:,:)=0.0 2748 2784 ancien_ok = .TRUE. 2749 2785 ENDIF … … 2878 2914 2879 2915 CALL add_phys_tend & 2880 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva, paprs,&2916 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,& 2881 2917 'eva',abortphy,flag_inhib_tend,itap,0 & 2882 2918 #ifdef ISO … … 3047 3083 longitude_deg, latitude_deg, rugoro, zrmu0, & 3048 3084 sollwdown, cldt, & 3049 rain_fall, snow_fall, solsw, solswfdiff, sollw, &3085 rain_fall, snow_fall, bs_fall, solsw, solswfdiff, sollw, & 3050 3086 gustiness, & 3051 t_seri, q_seri, u_seri, v_seri, &3087 t_seri, q_seri, qbs_seri, u_seri, v_seri, & 3052 3088 !nrlmd+jyg< 3053 3089 wake_deltat, wake_deltaq, wake_cstar, wake_s, & … … 3060 3096 !albedo SB >>> 3061 3097 ! albsol1, albsol2, sens, evap, & 3062 albsol_dir, albsol_dif, sens, evap, 3098 albsol_dir, albsol_dif, sens, evap, snowerosion, & 3063 3099 !albedo SB <<< 3064 3100 albsol3_lic,runoff, snowhgt, qsnow, to_ice, sissnow, & 3065 3101 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 3066 d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_t_diss, &3102 d_t_vdf, d_q_vdf, d_qbs_vdf, d_u_vdf, d_v_vdf, d_t_diss, & 3067 3103 !nrlmd< 3068 3104 !jyg< … … 3090 3126 fluxt, fluxu, fluxv, & 3091 3127 dsens, devap, zxsnow, & 3092 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke, &3128 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, & 3093 3129 !nrlmd+jyg< 3094 3130 wake_delta_pbl_TKE, & … … 3202 3238 IF (klon_glo==1) THEN 3203 3239 CALL add_pbl_tend & 3204 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&3240 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 3205 3241 'vdf',abortphy,flag_inhib_tend,itap & 3206 3242 #ifdef ISO … … 3210 3246 ELSE 3211 3247 CALL add_phys_tend & 3212 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&3248 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 3213 3249 'vdf',abortphy,flag_inhib_tend,itap,0 & 3214 3250 #ifdef ISO … … 3272 3308 3273 3309 ENDIF 3310 3311 ! ================================================================== 3312 ! Blowing snow sublimation and sedimentation 3313 3314 d_t_bs(:,:)=0. 3315 d_q_bs(:,:)=0. 3316 d_qbs_bs(:,:)=0. 3317 bsfl(:,:)=0. 3318 bs_fall(:)=0. 3319 IF (ok_bs) THEN 3320 3321 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, & 3322 d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall) 3323 3324 CALL add_phys_tend & 3325 (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,& 3326 'bs',abortphy,flag_inhib_tend,itap,0 & 3327 #ifdef ISO 3328 & ,dxt0,dxtl0,dxti0 & 3329 #endif 3330 & ) 3331 3332 ENDIF 3333 3274 3334 ! =================================================================== c 3275 3335 ! Calcul de Qsat … … 3959 4019 !! 3960 4020 !! 3961 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &4021 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, & 3962 4022 'convection',abortphy,flag_inhib_tend,itap,0 & 3963 4023 #ifdef ISO … … 4191 4251 !----------------------------------------------------------------------- 4192 4252 ! ajout des tendances des poches froides 4193 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0, paprs,'wake', &4253 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', & 4194 4254 abortphy,flag_inhib_tend,itap,0 & 4195 4255 #ifdef ISO … … 4470 4530 ! 4471 4531 CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs, & 4472 dql0,dqi0, paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &4532 dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 & 4473 4533 #ifdef ISO 4474 4534 & ,d_xt_ajs,dxtl0,dxti0 & … … 4586 4646 !-------------------------------------------------------------------- 4587 4647 ! ajout des tendances de l'ajustement sec ou des thermiques 4588 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0, paprs, &4648 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, & 4589 4649 'ajsb',abortphy,flag_inhib_tend,itap,0 & 4590 4650 #ifdef ISO … … 4730 4790 CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay, & 4731 4791 t_seri, q_seri,ptconv,ratqs, & 4732 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 4733 cldliq, picefra, rain_lsc, snow_lsc, &4792 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 4793 radocond, picefra, rain_lsc, snow_lsc, & 4734 4794 frac_impa, frac_nucl, beta_prec_fisrt, & 4735 4795 prfl, psfl, rhcl, & … … 4743 4803 CALL fisrtilp(phys_tstep,paprs,pplay, & 4744 4804 t_seri, q_seri,ptconv,ratqs, & 4745 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, &4805 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, radocond, & 4746 4806 rain_lsc, snow_lsc, & 4747 4807 pfrac_impa, pfrac_nucl, pfrac_1nucl, & … … 4791 4851 ! write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1) 4792 4852 !-JLD 4793 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc, paprs, &4853 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, & 4794 4854 'lsc',abortphy,flag_inhib_tend,itap,0 & 4795 4855 #ifdef ISO … … 4828 4888 ENDIF 4829 4889 4830 !--------------------------------------------------------------------------- 4890 4891 !--------------------------------------------------------------------------- 4831 4892 DO k = 1, klev 4832 4893 DO i = 1, klon 4833 4894 cldfra(i,k) = rneb(i,k) 4834 4895 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 4835 IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k) 4896 !EV: en effet etrange, j'ajouterais aussi qs_seri 4897 ! plus largement, je nettoierais (enleverrais) ces lignes 4898 IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k) 4836 4899 ENDDO 4837 4900 ENDDO 4838 4901 4839 4902 4840 4903 ! Option to activate the radiative effect of blowing snow (ok_rad_bs) 4904 ! makes sense only if the new large scale condensation scheme is active 4905 ! with the ok_icefra_lscp flag active as well 4906 4907 IF (ok_bs .AND. ok_rad_bs) THEN 4908 IF (ok_new_lscp .AND. ok_icefra_lscp) THEN 4909 DO k=1,klev 4910 DO i=1,klon 4911 radocond(i,k)=radocond(i,k)+qbs_seri(i,k) 4912 picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k)) 4913 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 4914 cldfra(i,k)=max(cldfra(i,k),qbsfra) 4915 ENDDO 4916 ENDDO 4917 ELSE 4918 WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow" 4919 WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false" 4920 abort_message='inconsistency in cloud phase for blowing snow' 4921 CALL abort_physic(modname,abort_message,1) 4922 ENDIF 4923 4924 ENDIF 4841 4925 #ifdef ISO 4842 4926 !#ifdef ISOVERIF … … 5001 5085 DO i = 1, klon 5002 5086 IF (diafra(i,k).GT.cldfra(i,k)) THEN 5003 cldliq(i,k) = dialiq(i,k)5087 radocond(i,k) = dialiq(i,k) 5004 5088 cldfra(i,k) = diafra(i,k) 5005 5089 ENDIF … … 5038 5122 DO i=1,klon 5039 5123 IF (ptconv(i,k).AND.ptconvth(i,k)) THEN 5040 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)5124 radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k) 5041 5125 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.) 5042 5126 ELSE IF (ptconv(i,k)) THEN 5043 5127 cldfra(i,k)=rnebcon(i,k) 5044 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)5128 radocond(i,k)=rnebcon(i,k)*clwcon(i,k) 5045 5129 ENDIF 5046 5130 ENDDO … … 5051 5135 DO i=1,klon 5052 5136 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.) 5053 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)5137 radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k) 5054 5138 ENDDO 5055 5139 ENDDO … … 5069 5153 IF (ptconv(i,k).AND. .NOT.ptconvth(i,k)) THEN 5070 5154 cldfra(i,k)=rnebcon(i,k) 5071 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)5155 radocond(i,k)=rnebcon(i,k)*clwcon(i,k) 5072 5156 ENDIF 5073 5157 ENDDO … … 5080 5164 ! Ancienne version 5081 5165 cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.) 5082 cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)5166 radocond(:,:)=radocond(:,:)+rnebcon(:,:)*clwcon(:,:) 5083 5167 ENDIF 5084 5168 … … 5100 5184 DO i = 1, klon 5101 5185 IF (diafra(i,k).GT.cldfra(i,k)) THEN 5102 cldliq(i,k) = dialiq(i,k)5186 radocond(i,k) = dialiq(i,k) 5103 5187 cldfra(i,k) = diafra(i,k) 5104 5188 ENDIF … … 5475 5559 ENDIF 5476 5560 CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, & 5477 paprs, pplay, t_seri, cldliq, picefra, cldfra, &5561 paprs, pplay, t_seri, radocond, picefra, cldfra, & 5478 5562 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, & 5479 5563 flwp, fiwp, flwc, fiwc, & … … 5483 5567 ELSE 5484 5568 CALL nuage (paprs, pplay, & 5485 t_seri, cldliq, picefra, cldfra, cldtau, cldemi, &5569 t_seri, radocond, picefra, cldfra, cldtau, cldemi, & 5486 5570 cldh, cldl, cldm, cldt, cldq, & 5487 5571 ok_aie, & … … 5792 5876 ENDDO 5793 5877 5794 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0, paprs,'SW',abortphy,flag_inhib_tend,itap,0 &5878 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 & 5795 5879 #ifdef ISO 5796 5880 & ,dxt0,dxtl0,dxti0 & … … 5798 5882 & ) 5799 5883 CALL prt_enerbil('SW',itap) 5800 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0, paprs,'LW',abortphy,flag_inhib_tend,itap,0 &5884 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 & 5801 5885 #ifdef ISO 5802 5886 & ,dxt0,dxtl0,dxti0 & … … 5846 5930 ! -> condition on zrel_oro can deactivate the drag on tilted planar terrains 5847 5931 ! such as ice sheets (work by V. Wiener) 5848 ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 5932 ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 5849 5933 ! earn computation time but they are not physical. 5850 5934 IF (((zpic(i)-zmea(i)).GT.zpmm_orodr_t).AND.(zstd(i).GT.zstd_orodr_t).AND.(zrel_oro(i).LE.zrel_oro_t)) THEN … … 5877 5961 !----------------------------------------------------------------------- 5878 5962 ! ajout des tendances de la trainee de l'orographie 5879 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0, paprs,'oro', &5963 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', & 5880 5964 abortphy,flag_inhib_tend,itap,0 & 5881 5965 #ifdef ISO … … 5932 6016 5933 6017 ! ajout des tendances de la portance de l'orographie 5934 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &6018 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, & 5935 6019 'lif', abortphy,flag_inhib_tend,itap,0 & 5936 6020 #ifdef ISO … … 5961 6045 d_t_hin(:, :)=0. 5962 6046 CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, & 5963 dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &6047 dqi0, dqbs0,paprs, 'hin', abortphy,flag_inhib_tend,itap,0 & 5964 6048 #ifdef ISO 5965 6049 & ,dxt0,dxtl0,dxti0 & … … 5983 6067 ENDDO 5984 6068 5985 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &6069 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, & 5986 6070 paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0 & 5987 6071 #ifdef ISO … … 5996 6080 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 5997 6081 du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress) 5998 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &6082 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, & 5999 6083 paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0 & 6000 6084 #ifdef ISO … … 6055 6139 d_xt_ch4_dtime(:,:,:) = d_xt_ch4(:,:,:)*phys_tstep 6056 6140 #endif 6057 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &6141 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, & 6058 6142 'q_ch4', abortphy,flag_inhib_tend,itap,0 & 6059 6143 #ifdef ISO … … 6121 6205 ! car on peut s'attendre a ce que les petites echelles produisent aussi de la TKE 6122 6206 ! Mais attention, cela ne va pas dans le sens de la conservation de l'energie! 6123 IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN6207 IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN 6124 6208 itest(i)=1 6125 6209 igwd=igwd+1 … … 6381 6465 ! 6382 6466 6383 IF (type_trac =='repr') THEN6467 IF (type_trac == 'repr') THEN 6384 6468 !MM pas d'impact, car on recupere q_seri,tr_seri,t_seri via phys_local_var_mod 6385 6469 !MM dans Reprobus … … 6431 6515 presnivs, pphis, pphi, albsol1, & 6432 6516 sh_in, ch_in, rhcl, cldfra, rneb, & 6433 diafra, cldliq, itop_con, ibas_con, &6517 diafra, radocond, itop_con, ibas_con, & 6434 6518 pmflxr, pmflxs, prfl, psfl, & 6435 6519 da, phi, mp, upwd, & … … 6448 6532 6449 6533 CALL add_phys_tend & 6450 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep, paprs,&6534 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,& 6451 6535 'rep',abortphy,flag_inhib_tend,itap,0) 6452 6536 IF (abortphy==1) Print*,'ERROR ABORT REP' … … 6525 6609 ! prlw = colonne eau liquide 6526 6610 ! prlw = colonne eau solide 6611 ! prbsw = colonne neige soufflee 6527 6612 prw(:) = 0. 6528 6613 prlw(:) = 0. 6529 6614 prsw(:) = 0. 6615 prbsw(:) = 0. 6530 6616 DO k = 1, klev 6531 6617 prw(:) = prw(:) + q_seri(:,k)*zmasse(:,k) 6532 6618 prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k) 6533 6619 prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k) 6620 prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k) 6534 6621 ENDDO 6535 6622 … … 6602 6689 ENDIF 6603 6690 !--ice_sursat: nqo=4, on ajoute rneb 6604 IF (nqo == 4) THEN6691 IF (nqo.ge.4 .and. ok_ice_sursat) THEN 6605 6692 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 6606 6693 ENDIF 6694 6695 IF (nqo.ge.4 .and. ok_bs) THEN 6696 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 6697 ENDIF 6698 6699 6607 6700 ENDDO 6608 6701 ENDDO … … 6684 6777 ql_ancien(:,:) = ql_seri(:,:) 6685 6778 qs_ancien(:,:) = qs_seri(:,:) 6779 qbs_ancien(:,:) = qbs_seri(:,:) 6686 6780 rneb_ancien(:,:) = rneb_seri(:,:) 6687 6781 #ifdef ISO … … 6693 6787 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien) 6694 6788 CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien) 6789 CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien) 6695 6790 ! !! RomP >>> 6696 6791 IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:) … … 6821 6916 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 6822 6917 pplay, lmax_th, aerosol_couple, & 6823 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, &6918 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, & 6824 6919 ok_sync, ptconv, read_climoz, clevSTD, & 6825 6920 ptconvth, d_u, d_t, qx, d_qx, zmasse, & -
LMDZ6/trunk/libf/phylmdiso/surf_land_mod.F90
r4285 r4523 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 , & … … 94 94 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 95 95 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 96 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 96 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 97 97 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 98 98 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ … … 129 129 !albedo SB <<< 130 130 REAL, DIMENSION(klon), INTENT(OUT) :: evap 131 REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens, fluxlat 131 REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens, fluxlat, fluxbs 132 132 REAL, DIMENSION(klon), INTENT(OUT) :: qsurf 133 133 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new … … 152 152 REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used 153 153 REAL, DIMENSION(klon) :: u0, v0 ! surface speed 154 REAL, DIMENSION(klon) :: precip_totsnow ! total solid precip 154 155 INTEGER :: i 155 156 … … 166 167 #endif 167 168 169 !**************************************************************************************** 170 !Total solid precip 171 172 IF (ok_bs) THEN 173 precip_totsnow=precip_snow+precip_bs 174 ELSE 175 precip_totsnow=precip_snow 176 ENDIF 177 !**************************************************************************************** 168 178 #ifdef ISO 169 179 #ifdef ISOVERIF … … 228 238 zlev, u1, v1, gustiness, temp_air, spechum, epot_air, ccanopy, & 229 239 cdragh, AcoefH, AcoefQ, BcoefH, BcoefQ, & 230 precip_rain, precip_ snow, lwdown_m, swnet, swdown, &240 precip_rain, precip_totsnow, lwdown_m, swnet, swdown, & 231 241 pref_tmp, q2m, t2m, & 232 evap, fluxsens, fluxlat, &242 evap, fluxsens, fluxlat,fluxbs, & 233 243 tsol_rad, tsurf_new, alb1_new, alb2_new, & 234 244 emis_new, z0m, z0h, qsurf, & … … 277 287 #endif 278 288 CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,& 279 tsurf, p1lay, cdragh, precip_rain, precip_ snow, temp_air, &289 tsurf, p1lay, cdragh, precip_rain, precip_totsnow, temp_air, & 280 290 spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, & 281 291 u1, v1, gustiness, rugoro, swnet, lwnet, & … … 293 303 ENDIF ! ok_veget 294 304 305 ! blowing snow not treated yet over land 306 fluxbs(:)=0. 295 307 !**************************************************************************************** 296 308 ! Calculation for all land models -
LMDZ6/trunk/libf/phylmdiso/surf_landice_mod.F90
r4285 r4523 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, & … … 34 34 USE cpl_mod, ONLY : cpl_send_landice_fields 35 35 USE calcul_fluxs_mod 36 USE phys_output_var_mod 36 USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic 37 USE phys_output_var_mod, ONLY : snow_o,zfra_o 37 38 #ifdef ISO 38 39 USE fonte_neige_mod, ONLY : xtrun_off_lic … … 48 49 !FC 49 50 USE ioipsl_getin_p_mod, ONLY : getin_p 50 51 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs 51 52 52 53 #ifdef CPP_INLANDSIS … … 72 73 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 73 74 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 74 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 75 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 75 76 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 76 77 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ … … 78 79 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 79 80 REAL, DIMENSION(klon), INTENT(IN) :: ps 80 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 81 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness, qbs1 81 82 REAL, DIMENSION(klon), INTENT(IN) :: rugoro 82 83 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf … … 118 119 !albedo SB <<< 119 120 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 121 REAL, DIMENSION(klon), INTENT(OUT) :: fluxbs 120 122 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 121 123 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l … … 179 181 180 182 REAL,DIMENSION(klon) :: alb1,alb2 183 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 181 184 REAL, DIMENSION (klon,6) :: alb6 185 REAL :: rho0, rhoice, ustart0, hsalt, esalt, qsalt 186 REAL :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard 187 REAL, DIMENSION(klon) :: ws1, rhos, ustart 182 188 ! End definition 183 189 !**************************************************************************************** … … 214 220 PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic 215 221 216 ! z0m=1.e-3217 ! z0h = z0m218 222 firstcall=.false. 219 223 ENDIF 220 224 !****************************************************************************************** 221 ! 225 222 226 ! Initialize output variables 223 227 alb3(:) = 999999. 224 228 alb2(:) = 999999. 225 229 alb1(:) = 999999. 226 230 fluxbs(:)=0. 227 231 runoff(:) = 0. 228 232 !**************************************************************************************** … … 232 236 radsol(:) = 0.0 233 237 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 238 239 !**************************************************************************************** 234 240 235 241 !**************************************************************************************** … … 327 333 328 334 329 330 335 ELSE 331 336 … … 342 347 IF (soil_model) THEN 343 348 CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, & 344 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux) 345 349 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux) 346 350 cal(1:knon) = RCPD / soilcap(1:knon) 347 351 radsol(1:knon) = radsol(1:knon) + soilflux(1:knon) … … 406 410 flux_u1, flux_v1) 407 411 408 !**************************************************************************************** 409 ! Calculate snow height, age, run-off,.. 412 413 !**************************************************************************************** 414 ! Calculate albedo 415 ! 416 !**************************************************************************************** 417 418 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 419 420 421 ! EV: following lines are obsolete since we set alb1 and alb2 to constant values 422 ! I therefore comment them 423 ! alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 424 ! 0.6 * (1.0-zfra(1:knon)) 425 ! 426 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" 427 ! alb1(1 : knon) = 0.6 !IM cf FH/GK 428 ! alb1(1 : knon) = 0.82 429 ! alb1(1 : knon) = 0.77 !211003 Ksta0.77 430 ! alb1(1 : knon) = 0.8 !KstaTER0.8 & LMD_ARMIP5 431 !IM: KstaTER0.77 & LMD_ARMIP6 432 433 ! Attantion: alb1 and alb2 are not the same! 434 alb1(1:knon) = alb_vis_sno_lic 435 alb2(1:knon) = alb_nir_sno_lic 436 437 438 !**************************************************************************************** 439 ! Rugosity 440 ! 441 !**************************************************************************************** 442 z0m = z0m_landice 443 z0h = z0h_landice 444 !z0m = SQRT(z0m**2+rugoro**2) 445 446 447 448 ! Simple blowing snow param 449 if (ok_bs) then 450 ustart0 = 0.211 451 rhoice = 920.0 452 rho0 = 200.0 453 rhomax=450.0 454 rhohard=400.0 455 tau_dens0=86400.0*10. ! 10 days by default, in s 456 tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory 457 do i = 1, knon 458 ! estimation of snow density 459 ! snow density increases with snow age and 460 ! increases even faster in case of sedimentation of blowing snow 461 tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs)) 462 rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens)) 463 ! blowing snow flux formula used in MAR 464 ws1(i)=(u1(i)**2+v1(i)**2)**0.5 465 ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5 466 ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax)) 467 ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till 468 ! rhohard<450) 469 esalt=1./(3.25*max(ustar(i),0.001)) 470 hsalt=0.08436*ustar(i)**1.27 471 qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 472 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 473 fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt) 474 enddo 475 476 ! for outputs 477 do j = 1, knon 478 i = knindex(j) 479 zxustartlic(i) = ustart(j) 480 zxrhoslic(i) = rhos(j) 481 enddo 482 483 endif 484 485 486 487 !**************************************************************************************** 488 ! Calculate surface snow amount 410 489 ! 411 490 !**************************************************************************************** 491 IF (ok_bs) THEN 492 precip_totsnow=precip_snow+precip_bs 493 evap_totsnow=evap-fluxbs ! flux bs is positive towards the surface (snow erosion) 494 ELSE 495 precip_totsnow=precip_snow 496 evap_totsnow=evap 497 ENDIF 498 412 499 CALL fonte_neige(knon, is_lic, knindex, dtime, & 413 tsurf, precip_rain, precip_ snow, &414 snow, qsol, tsurf_new, evap &500 tsurf, precip_rain, precip_totsnow, & 501 snow, qsol, tsurf_new, evap_totsnow & 415 502 #ifdef ISO 416 503 & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag & … … 446 533 447 534 448 !**************************************************************************************** 449 ! Calculate albedo 450 ! 451 !**************************************************************************************** 452 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 453 454 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 455 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 456 alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 457 0.6 * (1.0-zfra(1:knon)) 458 ! 459 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" 460 ! alb1(1 : knon) = 0.6 !IM cf FH/GK 461 ! alb1(1 : knon) = 0.82 462 ! alb1(1 : knon) = 0.77 !211003 Ksta0.77 463 ! alb1(1 : knon) = 0.8 !KstaTER0.8 & LMD_ARMIP5 464 !IM: KstaTER0.77 & LMD_ARMIP6 465 466 ! Attantion: alb1 and alb2 are not the same! 467 alb1(1:knon) = alb_vis_sno_lic 468 alb2(1:knon) = alb_nir_sno_lic 469 470 471 !**************************************************************************************** 472 ! Rugosity 473 ! 474 !**************************************************************************************** 475 z0m=1.e-3 476 z0h = z0m 477 z0m = SQRT(z0m**2+rugoro**2) 478 535 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 536 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 479 537 480 538 … … 494 552 run_off_lic_frac(j) = pctsrf(i,is_lic) 495 553 ENDDO 496 554 497 555 CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic, run_off_lic_frac) 498 556 ENDIF … … 501 559 runoff(1:knon)=run_off_lic(1:knon)/dtime 502 560 503 504 !****************************************************************************************505 ! Etienne: comment these lines because of duplication just below506 ! snow_o=0.507 ! zfra_o = 0.508 ! DO j = 1, knon509 ! i = knindex(j)510 ! snow_o(i) = snow(j)511 ! zfra_o(i) = zfra(j)512 ! ENDDO513 !514 !****************************************************************************************515 561 snow_o=0. 516 562 zfra_o = 0. … … 553 599 !albedo SB <<< 554 600 555 556 557 601 558 602 END SUBROUTINE surf_landice -
LMDZ6/trunk/libf/phylmdiso/surf_ocean_mod.F90
r4374 r4523 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, & … … 72 72 REAL, DIMENSION(klon), INTENT(IN) :: cdragh 73 73 REAL, DIMENSION(klon), INTENT(IN) :: cdragm 74 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 74 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 75 75 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 76 76 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ … … 169 169 REAL, DIMENSION(klon) :: radsol 170 170 REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation 171 REAL, DIMENSION(klon) :: precip_totsnow 171 172 CHARACTER(len=20),PARAMETER :: modname="surf_ocean" 172 173 real rhoa(knon) ! density of moist air (kg / m3) … … 200 201 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 201 202 203 204 !**************************************************************************************** 205 !Total solid precip 206 207 IF (ok_bs) THEN 208 precip_totsnow=precip_snow+precip_bs 209 ELSE 210 precip_totsnow=precip_snow 211 ENDIF 212 202 213 !****************************************************************************** 203 214 ! Cdragq computed from cdrag … … 227 238 windsp, fder, & 228 239 itime, dtime, knon, knindex, & 229 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow,temp_air,spechum,&240 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow,temp_air,spechum,& 230 241 AcoefH, AcoefQ, BcoefH, BcoefQ, & 231 242 AcoefU, AcoefV, BcoefU, BcoefV, & … … 239 250 CALL ocean_slab_noice( & 240 251 itime, dtime, jour, knon, knindex, & 241 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow, temp_air, spechum,&252 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, temp_air, spechum,& 242 253 AcoefH, AcoefQ, BcoefH, BcoefQ, & 243 254 AcoefU, AcoefV, BcoefU, BcoefV, & … … 250 261 CALL ocean_forced_noice( & 251 262 itime, dtime, jour, knon, knindex, & 252 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow, &263 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, & 253 264 temp_air, spechum, & 254 265 AcoefH, AcoefQ, BcoefH, BcoefQ, & … … 370 381 call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, & 371 382 u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), & 372 rain = precip_rain(:knon) + precip_ snow(:knon), &383 rain = precip_rain(:knon) + precip_totsnow(:knon), & 373 384 hf = - fluxsens(:knon), hlb = - fluxlat(:knon), & 374 385 rnl = - lwnet(:knon), &
Note: See TracChangeset
for help on using the changeset viewer.