Changeset 4669 for LMDZ6/branches/LMDZ_cdrag_LSCE
- Timestamp:
- Sep 4, 2023, 10:17:16 AM (17 months ago)
- Location:
- LMDZ6/branches/LMDZ_cdrag_LSCE
- Files:
-
- 2 deleted
- 73 edited
- 16 copied
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_cdrag_LSCE
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ_cdrag_LSCE/DefLists/field_def_lmdz.xml
r4412 r4669 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> … … 604 612 <field id="rnebcon" long_name="Convective Cloud Fraction" unit="-" /> 605 613 <field id="rnebls" long_name="LS Cloud fraction" unit="-" /> 606 <field id="rneblsvol" long_name="LS Cloud fraction by volume" unit="-" /> 614 <field id="rneblsvol" long_name="LS Cloud fraction by volume" unit="-" /> 615 <field id="pfraclr" long_name="LS precip fraction clear-sky part" unit="-" /> 616 <field id="pfracld" long_name="LS precip fraction cloudy part" unit="-" /> 607 617 <field id="rhum" long_name="Relative humidity" unit="-" /> 608 618 <field id="rhl" long_name="Relative humidity wrt liquid" unit="%" /> … … 616 626 <field id="dqphy" long_name="Physics dQ" unit="(kg/kg)/s" /> 617 627 <field id="dqlphy" long_name="Physics dQL" unit="(kg/kg)/s" /> 618 <field id="dqsphy" long_name="Physics dQS" unit="(kg/kg)/s" /> 628 <field id="dqsphy" long_name="Physics dQS" unit="(kg/kg)/s" /> 629 <field id="dqbsphy" long_name="Physics dQBS" unit="(kg/kg)/s" /> 619 630 <field id="pr_con_l" long_name="Convective precipitation lic" unit="-" /> 620 631 <field id="pr_con_i" long_name="Convective precipitation ice" unit="-" /> 621 632 <field id="pr_lsc_l" long_name="Large scale precipitation lic" unit="-" /> 622 <field id="pr_lsc_i" long_name="Large scale precipitation ice" unit="-" /> 633 <field id="pr_lsc_i" long_name="Large scale precipitation ice" unit="-" /> 634 <field id="pr_bs" long_name="precipitation blowing snow" unit="-" /> 623 635 <field id="re" long_name="Cloud droplet effective radius" unit="um" /> 624 636 <field id="fl" long_name="Denominator of Cloud droplet effective radius" unit="-" /> … … 643 655 <field id="dqldyn" long_name="Dynamics dQL" unit="(kg/kg)/s" /> 644 656 <field id="dqsdyn" long_name="Dynamics dQS" unit="(kg/kg)/s" /> 645 <field id="dudyn" long_name="Dynamics dU" unit="m/s2" /> 657 <field id="dqbsdyn" long_name="Dynamics dQBS" unit="(kg/kg)/s" /> 658 <field id="dudyn" long_name="Dynamics dU" unit="m/s2" /> 646 659 <field id="dvdyn" long_name="Dynamics dV" unit="m/s2" /> 647 660 <field id="dtcon" long_name="Convection dT" unit="K/s" /> … … 673 686 <field id="dqvdf_w" long_name="dqvdf within_wake" unit="(kg/kg)/s" /> 674 687 <field id="dteva" long_name="Reevaporation dT" unit="K/s" /> 675 <field id="dqeva" long_name="Reevaporation dQ" unit="(kg/kg)/s" /> 688 <field id="dqeva" long_name="Reevaporation dQ" unit="(kg/kg)/s" /> 689 <field id="dqbsvdf" long_name="Boundary-layer dQBS" unit="(kg/kg)/s" /> 690 <field id="dqbsbs" long_name="Blowing snow dQBS" unit="(kg/kg)/s" /> 691 <field id="dqbs" long_name="Blowing snow dQ" unit="(kg/kg)/s" /> 692 <field id="dtbs" long_name="Blowing snow dT" unit="(K)/s" /> 676 693 <field id="dqlscth" long_name="dQ therm." unit="(kg/kg)/s" /> 677 694 <field id="dqlscst" long_name="dQ strat." unit="(kg/kg)/s" /> … … 756 773 <field id="qcontr2" long_name="Contrail qcontr2" unit="kg/kg" /> 757 774 <field id="Tcontr" long_name="Contrail Tcontr" unit="K" /> 775 <field id="fluxt" long_name="flux h" unit="W/m2" /> 776 <field id="fluxq" long_name="flux q" unit="-" /> 758 777 </field_group> 759 778 -
LMDZ6/branches/LMDZ_cdrag_LSCE/DefLists/file_def_histhf_lmdz.xml
r4298 r4669 2 2 <file_definition> 3 3 <file_group id="defile"> 4 <file id="histhf" name="histhf" output_freq=" 3h" output_level="_AUTO_" enabled="_AUTO_" compression_level="2" sync_freq="3h">4 <file id="histhf" name="histhf" output_freq="1h" output_level="_AUTO_" enabled="_AUTO_" compression_level="2" sync_freq="1h"> 5 5 6 6 <!-- VARS 1D --> … … 12 12 13 13 <!-- VARS 2D --> 14 <field_group group_ref="remap_ 3h" >14 <field_group group_ref="remap_1h" > 15 15 <field_group grid_ref="grid_out" > 16 <field field_ref="phis" level=" 10" />16 <field field_ref="phis" level="5" /> 17 17 <field field_ref="aire" level="10" operation="once" /> 18 18 <field field_ref="contfracATM" level="5" operation="once" /> 19 19 <field field_ref="contfracOR" level="5" /> 20 <field field_ref="flat" level=" 10" />21 <field field_ref="slp" level=" 10" />20 <field field_ref="flat" level="5" /> 21 <field field_ref="slp" level="5" /> 22 22 <field field_ref="sza" level="10" /> 23 23 <field field_ref="ptstar" level="10" /> 24 24 <field field_ref="pt0" level="10" /> 25 <field field_ref="tsol" level=" 10" />25 <field field_ref="tsol" level="5" /> 26 26 <field field_ref="t2m" level="5" /> 27 27 <field field_ref="t2m_min" level="10" operation="minimum" /> … … 32 32 <field field_ref="t2m_sic" level="10" /> 33 33 <field field_ref="gusts" level="10" /> 34 <field field_ref="wind10m" level=" 10" />34 <field field_ref="wind10m" level="5" /> 35 35 <field field_ref="wind100m" level="10" /> 36 36 <field field_ref="wind10max" level="10" operation="maximum" /> 37 37 <field field_ref="sicf" level="10" /> 38 38 <field field_ref="q2m" level="5" /> 39 <field field_ref="ustar" level=" 10" />39 <field field_ref="ustar" level="5" /> 40 40 <field field_ref="u10m" level="5" /> 41 41 <field field_ref="v10m" level="5" /> … … 67 67 <field field_ref="plun" level="10" /> 68 68 <field field_ref="pluc" level="10" /> 69 <field field_ref="snow" level="5" /> 70 <field field_ref="evap" level="10" /> 71 <field field_ref="evap_ter" level="10" /> 69 <field field_ref="snow" level="5" /> 70 <field field_ref="bsfall" level="5" /> 71 <field field_ref="evap" level="5" /> 72 <field field_ref="snowerosion" level="5" /> 73 <field field_ref="rhosnow_lic" level="5" /> 74 <field field_ref="ustart_lic" level="5" /> 75 <field field_ref="evap_ter" level="10" /> 72 76 <field field_ref="evap_lic" level="10" /> 73 77 <field field_ref="evap_oce" level="10" /> 74 78 <field field_ref="evap_sic" level="10" /> 75 <field field_ref="msnow" level=" 10" />79 <field field_ref="msnow" level="5" /> 76 80 <field field_ref="fsnow" level="10" /> 77 81 <field field_ref="tops" level="10" /> … … 99 103 <field field_ref="SWupSFC" level="10" /> 100 104 <field field_ref="SWupSFCclr" level="10" /> 101 <field field_ref="SWdnSFC" level=" 10" />105 <field field_ref="SWdnSFC" level="5" /> 102 106 <field field_ref="SWdnSFCclr" level="10" /> 103 107 <field field_ref="LWupSFC" level="10" /> 104 108 <field field_ref="LWupSFCclr" level="10" /> 105 <field field_ref="LWdnSFC" level=" 10" />109 <field field_ref="LWdnSFC" level="5" /> 106 110 <field field_ref="LWdnSFCclr" level="10" /> 107 111 <field field_ref="bils" level="10" /> … … 112 116 <field field_ref="bils_enthalp" level="10" /> 113 117 <field field_ref="bils_latent" level="10" /> 114 <field field_ref="sens" level=" 10" />118 <field field_ref="sens" level="5" /> 115 119 <field field_ref="sens_x" level="11" /> 116 120 <field field_ref="sens_w" level="11" /> … … 198 202 <field field_ref="cldm" level="10" /> 199 203 <field field_ref="cldh" level="10" /> 200 <field field_ref="cldt" level=" 10" />204 <field field_ref="cldt" level="5" /> 201 205 <field field_ref="cldq" level="10" /> 202 206 <field field_ref="lwp" level="10" /> … … 214 218 <field field_ref="wbeff" level="10" /> 215 219 <field field_ref="convoccur" level="10" /> 216 <field field_ref="prw" level=" 10" />220 <field field_ref="prw" level="5" /> 217 221 <field field_ref="prlw" level="10" /> 218 <field field_ref="prsw" level="10" /> 222 <field field_ref="prsw" level="10" /> 223 <field field_ref="prbsw" level="5" /> 219 224 <field field_ref="s_pblh" level="10" /> 220 225 <field field_ref="s_pblt" level="10" /> … … 246 251 <field field_ref="u850" level="10" /> 247 252 <field field_ref="u700" level="10" /> 248 <field field_ref="u500" level=" 10" />253 <field field_ref="u500" level="5" /> 249 254 <field field_ref="u200" level="10" /> 250 255 <field field_ref="u100" level="10" /> … … 253 258 <field field_ref="v850" level="10" /> 254 259 <field field_ref="v700" level="10" /> 255 <field field_ref="v500" level=" 10" />260 <field field_ref="v500" level="5" /> 256 261 <field field_ref="v200" level="10" /> 257 262 <field field_ref="v100" level="10" /> … … 267 272 <field field_ref="t850" level="10" /> 268 273 <field field_ref="t700" level="10" /> 269 <field field_ref="t500" level=" 10" />274 <field field_ref="t500" level="5" /> 270 275 <field field_ref="t200" level="10" /> 271 276 <field field_ref="t100" level="10" /> … … 281 286 <field field_ref="z850" level="10" /> 282 287 <field field_ref="z700" level="10" /> 283 <field field_ref="z500" level=" 10" />288 <field field_ref="z500" level="5" /> 284 289 <field field_ref="z200" level="10" /> 285 290 <field field_ref="z100" level="10" /> … … 299 304 <field field_ref="v10_oce" level="10" /> 300 305 <field field_ref="v10_sic" level="10" /> 301 <field field_ref="rh2m" level=" 10" />306 <field field_ref="rh2m" level="5" /> 302 307 <field field_ref="rh2m_min" level="10" operation="minimum" /> 303 308 <field field_ref="rh2m_max" level="10" operation="maximum" /> … … 503 508 <field field_ref="concno3" level="10" /> 504 509 <field field_ref="ec550aer" level="10" /> 505 <field field_ref="lwcon" level=" 10" />506 <field field_ref="iwcon" level=" 10" />510 <field field_ref="lwcon" level="5" /> 511 <field field_ref="iwcon" level="5" /> 507 512 <field field_ref="temp" level="4" /> 508 513 <field field_ref="theta" level="10" /> 509 <field field_ref="ovap" level=" 10" />514 <field field_ref="ovap" level="5" /> 510 515 <field field_ref="ovapinit" level="10" /> 511 <field field_ref="oliq" level="10" /> 512 <field field_ref="ocond" level="10" /> 516 <field field_ref="oliq" level="5" /> 517 <field field_ref="ocond" level="5" /> 518 <field field_ref="qbs" level="5" /> 513 519 <field field_ref="geop" level="10" /> 514 520 <field field_ref="geoph" level="10" /> 515 <field field_ref="vitu" level=" 10" />516 <field field_ref="vitv" level=" 10" />521 <field field_ref="vitu" level="5" /> 522 <field field_ref="vitv" level="5" /> 517 523 <field field_ref="vitw" level="6" /> 518 <field field_ref="pres" level=" 10" />524 <field field_ref="pres" level="5" /> 519 525 <field field_ref="paprs" level="10" /> 520 526 <field field_ref="mass" level="10" /> 521 <field field_ref="zfull" level=" 10" />527 <field field_ref="zfull" level="5" /> 522 528 <field field_ref="zhalf" level="10" /> 523 529 <field field_ref="rneb" level="10" /> … … 525 531 <field field_ref="rnebls" level="10" /> 526 532 <field field_ref="rneblsvol" level="10" /> 527 <field field_ref="rhum" level="10" /> 533 <field field_ref="rhum" level="10" /> 534 <field field_ref="rhi" level="5" /> 528 535 <field field_ref="ozone" level="10" /> 529 536 <field field_ref="upwd" level="10" /> 530 537 <field field_ref="ep" level="10" /> 531 538 <field field_ref="duphy" level="10" /> 532 <field field_ref="dtphy" level=" 10" />533 <field field_ref="dqphy" level=" 10" />539 <field field_ref="dtphy" level="5" /> 540 <field field_ref="dqphy" level="5" /> 534 541 <field field_ref="dqlphy" level="10" /> 535 542 <field field_ref="dqsphy" level="10" /> … … 537 544 <field field_ref="pr_con_i" level="10" /> 538 545 <field field_ref="pr_lsc_l" level="10" /> 539 <field field_ref="pr_lsc_i" level="10" /> 546 <field field_ref="pr_lsc_i" level="10" /> 547 <field field_ref="pr_bs" level="5" /> 540 548 <field field_ref="re" level="10" /> 541 549 <field field_ref="fl" level="10" /> … … 555 563 <field field_ref="dnwd0" level="10" /> 556 564 <field field_ref="mc" level="10" /> 557 <field field_ref="dtdyn" level=" 10" />558 <field field_ref="dqdyn" level=" 10" />565 <field field_ref="dtdyn" level="5" /> 566 <field field_ref="dqdyn" level="5" /> 559 567 <field field_ref="dqldyn" level="10" /> 560 568 <field field_ref="dqsdyn" level="10" /> … … 576 584 <field field_ref="dtlsc" level="10" /> 577 585 <field field_ref="dtlschr" level="10" /> 578 <field field_ref="dqlsc" level="10" /> 586 <field field_ref="dqlsc" level="10" /> 587 <field field_ref="dtbs" level="5" /> 588 <field field_ref="dqbs" level="5" /> 579 589 <field field_ref="beta_prec" level="10" /> 580 590 <field field_ref="dtvdf" level="10" /> -
LMDZ6/branches/LMDZ_cdrag_LSCE/DefLists/namelist_ecrad
r4489 r4669 6 6 ! 7 7 &radiation_driver 8 do_parallel = true, ! Use OpenMP parallelization? 9 nblocksize = 8, ! Number of columns to process per thread 10 11 ! Verbosity level: 0=none, 1=warning, 2=info, 3=progress, 4=detailed, 5=debug 12 iverbose = 5, 13 14 fractional_std=1., ! (-) vertically constant fractional standard deviation of in-cloud liquid water [0, 3] *0.75* 15 overlap_decorr_length=1000, ! (m) vertically constant overlap decorrelation length [0, 5000] *2000* 16 ! following Hogan and Illingworth 2000, if overlap_scheme_name=="Exp-Ran" 8 ok_effective_size=false, ! Cloud effective size taken into account for SPARTACUS solver if true 9 ok_separation=true, ! Cloud separation scale taken into account for SPARTACUS solver if true 10 frac_std=1., ! (-) vertically constant fractional standard deviation of in-cloud liquid water [0, 3] *0.75* 11 overlap_decorr_length=2000, ! (m) vertically constant overlap decorrelation length [0, 5000] *2000* 12 ! following Hogan and Illingworth 2000, if overlap_scheme_name=="Exp-Ran" 17 13 ! Ctrue(i,j) = a*Cmax(i,j) + (1-a)*Crand(i,j) ; a = exp(DZ(i,j)/overlap_decorr_length) 18 high_inv_effective_size = 0.0001 ! (m-1) override input profile [e-6, e-3] *e-4* 19 middle_inv_effective_size = 0.0001 ! (m-1) override input profile [e-6, e-3] *e-4* 20 low_inv_effective_size = 0.005 ! (m-1) override input profile [e-5, e-2] *e-3* 21 effective_size_scaling = 1.0, ! (-) scale effective size 22 23 !sw_albedo = 0.2, ! (-) override shortwave albedo, no default [0,1] 24 !lw_emissivity = 1.0, ! (-) override longwave emissivity, no default [0,1] 25 26 q_liquid_scaling = 1., ! (-) scale liquid water content input profile 27 q_ice_scaling = 1., ! (-) scale ice water content input profile 28 cloud_fraction_scaling = 1., ! (-) scale cloud fraction input profile 29 30 overlap_decorr_length_scaling=1., ! (-) scale overlap decorrelation length 31 32 !skin_temperature = 294.2, ! (K) override skin temperature from input file, no default 33 !cos_solar_zenith_angle = .5, ! (-) override cos solar zenith angle from input file, no default 34 35 !solar_irradiance_override= 1368.143, ! (Wm-2) override total solar irradiance, default value is 1366.0 14 high_inv_effective_size = 0.0001, ! (m-1) override input profile [e-6, e-3] *e-4* 15 middle_inv_effective_size = 0.0001, ! (m-1) override input profile [e-6, e-3] *e-4* 16 low_inv_effective_size = 0.005, ! (m-1) override input profile [e-5, e-2] *e-3* 17 cloud_separation_scale_toa = 14000.0, 18 cloud_separation_scale_surface = 2500.0, 19 cloud_separation_scale_power = 3.5, 20 cloud_inhom_separation_factor = 0.75, 36 21 / 37 22 … … 41 26 ! 42 27 &radiation 43 do_lw = true,44 do_sw_direct = true,45 do_3d_effects = true, ! Represent 3D effects?46 do_lw_side_emissivity = true,47 do_3d_lw_multilayer_effects = true,48 directory_name = "data", ! Location of configuration files28 do_lw = true, 29 do_sw_direct = true, 30 do_3d_effects = true, ! Represent 3D effects? 31 do_lw_side_emissivity = true, 32 do_3d_lw_multilayer_effects = true, 33 directory_name = "data", ! Location of configuration files 49 34 50 liquid_model_name = "SOCRATES", ! Liquid droplet scattering model: "Monochromatic", "HuStamnes", *"SOCRATES"*, "Slingo"51 ice_model_name = "Fu-IFS", ! Ice particle scattering model: "Monochromatic", "Fu-PSRAD", "Fu-IFS", *"Baran"*, "Baran2016", "Baran2017", "Yi"52 cloud_pdf_shape_name = "Gamma", ! To describe liquid water horizontal distribution: *"Gamma"*, "Lognormal"35 liquid_model_name = "SOCRATES", ! Liquid droplet scattering model: "Monochromatic", "HuStamnes", *"SOCRATES"*, "Slingo" 36 ice_model_name = "Fu-IFS", ! Ice particle scattering model: "Monochromatic", "Fu-PSRAD", "Fu-IFS", *"Baran"*, "Baran2016", "Baran2017", "Yi" 37 cloud_pdf_shape_name = "Gamma", ! To describe liquid water horizontal distribution: *"Gamma"*, "Lognormal" 53 38 54 sw_solver_name = "Tripleclouds", ! Solver: "Homogeneous", *"McICA"*, "SPARTACUS", "Tripleclouds"55 lw_solver_name = "Tripleclouds", ! enable 3D effects56 sw_encroachment_name = "Computed", ! "Maximum" = old behaviour (also "Minimum"/*"Computed"*)57 overlap_scheme_name = "Exp-Ran", ! Cloud overlap: *"Exp-Ran"*, "Max-Ran", "Exp-Exp"39 sw_solver_name = "Tripleclouds", ! Solver: "Homogeneous", *"McICA"*, "SPARTACUS", "Tripleclouds" 40 lw_solver_name = "Tripleclouds", ! enable 3D effects 41 sw_encroachment_name = "Computed", ! "Maximum" = old behaviour (also "Minimum"/*"Computed"*) 42 overlap_scheme_name = "Exp-Ran", ! Cloud overlap: *"Exp-Ran"*, "Max-Ran", "Exp-Exp" 58 43 59 overhead_sun_factor = 0.06,60 do_lw_cloud_scattering = true, ! Clouds scatter in the longwave?61 do_lw_aerosol_scattering= true, ! Aerosols scatter in the longwave?62 cloud_inhom_decorr_scaling = 0.5,63 do_save_radiative_properties = false, ! Save raw radiation properties in radiative_properties.nc?44 overhead_sun_factor = 0.06, 45 do_lw_cloud_scattering = true, ! Clouds scatter in the longwave? 46 do_lw_aerosol_scattering= true, ! Aerosols scatter in the longwave? 47 cloud_inhom_decorr_scaling = 0.5, 48 do_save_radiative_properties = false, ! Save raw radiation properties in radiative_properties.nc? 64 49 65 50 ! Verbosity level: 0=none, 1=warning, 2=info, 3=progress, 4=detailed, 5=debug 66 iverbose = 1,67 use_aerosols = false, ! Include aerosols in radiation calculations?68 n_aerosol_types = 13,69 aerosol_optics_override_file_name = "aerosol_optics_lmdz.nc"70 do_save_spectral_flux = false, ! Save spectral fluxes in output file?71 do_save_gpoint_flux = false, ! Save fluxes per g-point in output file?72 gas_model_name = "RRTMG-IFS", ! Gas model: "Monochromatic", *"RRTMG-IFS"*, "RRTMG-PSRAD"51 iverbose = 1, 52 use_aerosols = false, ! Include aerosols in radiation calculations? 53 n_aerosol_types = 13, 54 !aerosol_optics_override_file_name = "aerosol_optics_lmdz.nc" 55 do_save_spectral_flux = false, ! Save spectral fluxes in output file? 56 do_save_gpoint_flux = false, ! Save fluxes per g-point in output file? 57 gas_model_name = "RRTMG-IFS", ! Gas model: "Monochromatic", *"RRTMG-IFS"*, "RRTMG-PSRAD" 73 58 / -
LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_IRENE-AMD.path
r4489 r4669 1 1 2 NETCDF_INCDIR="-I$NETCDFFORTRAN_INCDIR" 2 3 NETCDF_LIBDIR="-L$NETCDFFORTRAN_LIBDIR -L$NETCDF_LIBDIR" 3 4 NETCDF_LIB="-lnetcdff -lnetcdf" 4 5 5 NETCDF95_INCDIR=-I$ LMDGCM/../../include/NetCDF956 NETCDF95_LIBDIR=-L$ LMDGCM/../../lib6 NETCDF95_INCDIR=-I$NETCDF95_INCDIR 7 NETCDF95_LIBDIR=-L$NETCDF95_LIBDIR 7 8 NETCDF95_LIB=-lnetcdf95 8 9 … … 25 26 INCA_LIBDIR="-L$LMDGCM/../INCA/build/lib" 26 27 INCA_LIB="-lchimie" 27 28 -
LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_IRENE.env
r4510 r4669 12 12 module load c++/gnu/8.3.0 13 13 module load c/gnu/8.3.0 14 module load netcdf95 -
LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_IRENE.path
r4515 r4669 4 4 NETCDF_LIB="-lnetcdff -lnetcdf" 5 5 6 NETCDF95_INCDIR=-I /ccc/cont003/home/igcmg/igcmg/Tools/irene/include/NetCDF957 NETCDF95_LIBDIR=-L /ccc/cont003/home/igcmg/igcmg/Tools/irene/lib6 NETCDF95_INCDIR=-I$NETCDF95_INCDIR 7 NETCDF95_LIBDIR=-L$NETCDF95_LIBDIR 8 8 NETCDF95_LIB=-lnetcdf95 9 9 -
LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_JEANZAY.env
r4385 r4669 4 4 module load netcdf/4.7.2-mpi 5 5 module load netcdf-fortran/4.5.2-mpi 6 module load netcdf95 6 7 7 8 module load gcc/6.5.0 -
LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-X64_JEANZAY.path
r4499 r4669 6 6 NETCDF_LIB="-lnetcdff -lnetcdf" 7 7 8 NETCDF95_INCDIR=-I /gpfswork/rech/lmd/rdzt899/build/Libraries_release/NetCDF95/modules9 NETCDF95_LIBDIR=-L /gpfswork/rech/lmd/rdzt899/build/Libraries_release/NetCDF958 NETCDF95_INCDIR=-I$NETCDF95_ROOT/include/NetCDF95 9 NETCDF95_LIBDIR=-L$NETCDF95_ROOT/lib 10 10 NETCDF95_LIB=-lnetcdf95 11 11 -
LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-ifort_LSCE.path
r4489 r4669 1 NETCDF_LIBDIR="-L/usr/local/install/netcdf-4.3.2p/lib -lnetcdff -lnetcdf -L/usr/local/install/hdf5-1.8.9p/lib -lhdf5_hl -lhdf5 -lhdf5 -lz -lcurl" 2 NETCDF_INCDIR=-I/usr/local/install/netcdf-4.3.2p/include 3 NETCDF95_INCDIR=$LMDGCM/../../include 4 NETCDF95_LIBDIR=$LMDGCM/../../lib 5 IOIPSL_INCDIR="$LMDGCM/../../lib -I$LMDGCM/../IOIPSL/inc" 6 IOIPSL_LIBDIR="$LMDGCM/../../lib -lioipsl -L$LMDGCM/../IOIPSL/lib" 7 ORCH_INCDIR=$LMDGCM/../../lib 8 ORCH_LIBDIR=$LMDGCM/../../lib 9 OASIS_INCDIR= 10 OASIS_LIBDIR= 11 INCA_LIBDIR=$LMDGCM/../INCA/config/lib 12 INCA_INCDIR=$LMDGCM/../INCA/config/inc 13 XIOS_INCDIR=$LMDGCM/../XIOS/inc 14 XIOS_LIBDIR=$LMDGCM/../XIOS/lib 1 NETCDF_INCDIR="-I/usr/local/install/netcdf-4.3.2p/include" 2 NETCDF_LIBDIR="-L/usr/local/install/netcdf-4.3.2p/lib -L/usr/local/install/hdf5-1.8.9p/lib" 3 NETCDF_LIB="-lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lhdf5 -lz -lcurl" 4 5 NETCDF95_INCDIR=-I/home/orchideeshare/igcmg/Tools/NetCDF95.intel-fcomp.2020/include/NetCDF95 6 NETCDF95_LIBDIR=-L/home/orchideeshare/igcmg/Tools/NetCDF95.intel-fcomp.2020/lib 7 NETCDF95_LIB=-lnetcdf95 8 9 IOIPSL_INCDIR="-I$LMDGCM/../../lib -I$LMDGCM/../IOIPSL/inc" 10 IOIPSL_LIBDIR="-L$LMDGCM/../../lib -L$LMDGCM/../IOIPSL/lib" 11 IOIPSL_LIB="-lioipsl" 12 13 XIOS_INCDIR="-I$LMDGCM/../XIOS/inc" 14 XIOS_LIBDIR="-L$LMDGCM/../XIOS/lib" 15 XIOS_LIB="-lxios -lstdc++" 16 17 ORCH_INCDIR="-I$LMDGCM/../../lib" 18 ORCH_LIBDIR="-L$LMDGCM/../../lib" 19 ORCH_LIB= 20 21 OASIS_INCDIR="-I$LMDGCM/../../oasis3-mct/BLD/build/lib/psmile.MPI1" 22 OASIS_LIBDIR="-L$LMDGCM/../../oasis3-mct/BLD/lib" 23 OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" 24 25 INCA_INCDIR="-I$LMDGCM/../INCA/build/inc" 26 INCA_LIBDIR="-L$LMDGCM/../INCA/build/lib" 27 INCA_LIB="-lchimie" -
LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-ifort_MESOIPSL.env
r4305 r4669 8 8 module load netcdf-fortran/4.5.3-mpi 9 9 module load netcdf-c/4.7.4-mpi 10 10 module load netcdf95 -
LMDZ6/branches/LMDZ_cdrag_LSCE/arch/arch-ifort_MESOIPSL.path
r4428 r4669 1 1 NETCDF_INCDIR="-I $NETCDF_FORTRAN_ROOT/include -I${HDF5_ROOT}/include" 2 2 NETCDF_LIBDIR="-L${NETCDF_FORTRAN_ROOT}/lib -L${NETCDF_C_ROOT}/lib -L${HDF5_ROOT}" 3 NETCDF_LIB="-lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz -lcurl -lstdc++" 3 NETCDF_LIB="-lnetcdff -lnetcdf" 4 5 NETCDF95_INCDIR=-I$NETCDF95_ROOT/include/NetCDF95 6 NETCDF95_LIBDIR=-L$NETCDF95_ROOT/lib 7 NETCDF95_LIB=-lnetcdf95 4 8 5 9 IOIPSL_INCDIR="-I$LMDGCM/../../lib -I$LMDGCM/../IOIPSL/inc" -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/dyn3d/conf_gcm.F90
r4470 r4669 15 15 USE comconst_mod, ONLY: dissip_deltaz, dissip_factz, dissip_zref, & 16 16 iflag_top_bound, mode_top_bound, tau_top_bound, & 17 ngroup 17 ngroup, maxlatfilter 18 18 USE logic_mod, ONLY: fxyhypb, iflag_phys, ok_etat0, ok_gradsfile, & 19 19 ok_guide, ok_limit, ok_strato, purmats, read_start, & … … 310 310 CALL getin('dissip_deltaz',dissip_deltaz ) 311 311 CALL getin('dissip_zref',dissip_zref ) 312 313 ! maxlatfilter 314 maxlatfilter=-1.0 315 CALL getin('maxlatfilter',maxlatfilter) 316 if (maxlatfilter > 90) & 317 call abort_gcm("conf_gcm", 'maxlatfilter should be <=90', 1) 318 312 319 313 320 ! ngroup -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/dyn3d_common/comconst_mod.F90
r2597 r4669 26 26 INTEGER iflag_top_bound ! sponge type 27 27 INTEGER ngroup ! parameter to group points (along longitude) near poles 28 REAL maxlatfilter ! maximum latitude (in degrees) above which filter is active 28 29 INTEGER mode_top_bound ! sponge mode 29 30 REAL tau_top_bound ! inverse of sponge characteristic time scale (Hz) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/dyn3d_common/infotrac.F90
r4487 r4669 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/branches/LMDZ_cdrag_LSCE/libf/dyn3dmem/conf_gcm.F90
r4469 r4669 19 19 USE comconst_mod, ONLY: dissip_deltaz, dissip_factz, dissip_zref, & 20 20 iflag_top_bound, mode_top_bound, tau_top_bound, & 21 ngroup 21 ngroup, maxlatfilter 22 22 USE logic_mod, ONLY: fxyhypb, iflag_phys, ok_etat0, ok_gradsfile, & 23 23 ok_guide, ok_limit, ok_strato, purmats, read_start, & … … 340 340 CALL getin('dissip_deltaz',dissip_deltaz ) 341 341 CALL getin('dissip_zref',dissip_zref ) 342 343 344 !maxlatfilter 345 maxlatfilter = -1.0 346 CALL getin('maxlatfilter',maxlatfilter) 347 if (maxlatfilter > 90) & 348 call abort_gcm("conf_gcm", 'maxlatfilter should be <=90', 1) 349 342 350 343 351 ! ngroup -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/filtrez/filtreg_mod.F90
r4440 r4669 16 16 USE serre_mod, ONLY: alphax 17 17 USE logic_mod, ONLY: fxyhypb, ysinus 18 USE comconst_mod, ONLY: maxlatfilter 19 18 20 ! ... H. Upadhyaya, O.Sharma ... 19 21 ! … … 125 127 ! as length dx becomes of the same size as dy 126 128 ! 129 ! if maxlatfilter >0, prescribe the colat0 value from the .def files 130 131 IF (maxlatfilter .LT. 0.) THEN 132 127 133 colat0 = MIN( 0.5, dymin/dxmin ) 128 134 ! colat0 = 1. … … 133 139 alphax = 0. 134 140 ENDIF 141 142 ELSE 143 144 colat0=(90.0-maxlatfilter)/180.0*pi 145 146 ENDIF 147 148 149 135 150 ! 136 151 PRINT 50, colat0,alphax -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/grid/dimension/makdim
r4440 r4669 12 12 fi 13 13 14 if ( ( ($1 % 8 != 0)) && (( $# == 3 ) ) || ( $1 == 1) )14 if ( (( $1 % 8 != 0 )) && (( $# == 3 )) || (( $1 == 1 )) ) 15 15 then 16 16 echo "The number of longitudes must be a multiple of 8." -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/misc/readTracFiles_mod.f90
r4454 r4669 114 114 !--- SOME PARAMETERS THAT ARE NOT LIKELY TO CHANGE OFTEN 115 115 CHARACTER(LEN=maxlen), SAVE :: tran0 = 'air' !--- Default transporting fluid 116 CHARACTER(LEN=maxlen), PARAMETER :: old_phases = 'vlir ' !--- Old phases for water (no separator)117 CHARACTER(LEN=maxlen), PARAMETER :: known_phases = 'glsr ' !--- Known phases initials116 CHARACTER(LEN=maxlen), PARAMETER :: old_phases = 'vlirb' !--- Old phases for water (no separator) 117 CHARACTER(LEN=maxlen), PARAMETER :: known_phases = 'glsrb' !--- Known phases initials 118 118 INTEGER, PARAMETER :: nphases = LEN_TRIM(known_phases) !--- Number of phases 119 119 CHARACTER(LEN=maxlen), SAVE :: phases_names(nphases) & !--- Known phases names 120 = ['gaseous', 'liquid ', 'solid ', 'cloud']120 = ['gaseous', 'liquid ', 'solid ', 'cloud ','blosno '] 121 121 CHARACTER(LEN=1), SAVE :: phases_sep = '_' !--- Phase separator 122 122 LOGICAL, SAVE :: tracs_merge = .TRUE. !--- Merge/stack tracers lists -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/add_phys_tend_mod.F90
r3435 r4669 16 16 CONTAINS 17 17 18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap)18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap) 19 19 ! ====================================================================== 20 20 ! Ajoute les tendances de couche limite, soit determinees par la … … 49 49 ! ------------ 50 50 REAL zdu(klon, klev), zdv(klon, klev) 51 REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev) 51 REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev) 52 52 CHARACTER *(*) text 53 53 REAL paprs(klon,klev+1) … … 76 76 PRINT *, ' add_pbl_tend, zzdt ', zzdt 77 77 PRINT *, ' add_pbl_tend, zzdq ', zzdq 78 CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0)78 CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0) 79 79 ELSE 80 CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0)80 CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0) 81 81 END IF 82 82 … … 87 87 ! $Id: add_phys_tend.F90 2611 2016-08-03 15:41:26Z jyg $ 88 88 ! 89 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi, paprs,text, &89 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, & 90 90 abortphy,flag_inhib_tend, itap, diag_mode) 91 91 !====================================================================== … … 102 102 USE dimphy, ONLY: klon, klev 103 103 USE phys_state_var_mod, ONLY : phys_tstep 104 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q _seri, t_seri104 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri 105 105 USE phys_state_var_mod, ONLY: ftsol 106 106 USE geometry_mod, ONLY: longitude_deg, latitude_deg 107 107 USE print_control_mod, ONLY: prt_level 108 108 USE cmp_seri_mod 109 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &110 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col109 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col & 110 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 111 111 IMPLICIT none 112 112 include "YOMCST.h" … … 116 116 !------------ 117 117 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdu, zdv 118 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi 118 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi, zdqbs 119 119 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs 120 120 CHARACTER*(*), INTENT(IN) :: text … … 136 136 ! Save variables, used in diagnostic mode (diag_mode=1). 137 137 REAL, DIMENSION(klon,klev) :: sav_u_seri, sav_v_seri 138 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_q _seri138 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri 139 139 REAL, DIMENSION(klon,klev) :: sav_t_seri 140 140 REAL, DIMENSION(klon,klev) :: sav_zdq … … 163 163 ! zh_ql_col---- total enthalpy of liquid watter (J/m2) 164 164 ! zh_qs_col---- total enthalpy of solid watter (J/m2) 165 ! zh_qbs_col---- total enthalpy of blowing snow (J/m2) 165 166 ! zqw_col------ total mass of watter vapour (kg/m2) 166 167 ! zql_col------ total mass of liquid watter (kg/m2) 167 ! zqs_col------ total mass of solid watter (kg/m2) 168 ! zqs_col------ total mass of cloud ice (kg/m2) 169 ! zqbs_col------ total mass of blowing snow (kg/m2) 168 170 ! zek_col------ total kinetic energy (kg/m2) 169 171 ! … … 172 174 REAL zql_col(klon,2) 173 175 REAL zqs_col(klon,2) 176 REAL zqbs_col(klon,2) 174 177 REAL zek_col(klon,2) 175 178 REAL zh_dair_col(klon,2) 176 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2) 179 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2) 177 180 REAL zh_col(klon,2) 178 181 … … 213 216 sav_ql_seri(:,:) = ql_seri(:,:) 214 217 sav_qs_seri(:,:) = qs_seri(:,:) 218 sav_qbs_seri(:,:) = qbs_seri(:,:) 215 219 sav_q_seri(:,:) = q_seri(:,:) 216 220 sav_t_seri(:,:) = t_seri(:,:) … … 236 240 237 241 CALL integr_v(klon, klev, zcpvap, & 238 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &239 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &240 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))242 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, & 243 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 244 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 241 245 242 246 end if ! end if (fl_ebil .GT. 0) … … 250 254 ql_seri(:,:)=ql_seri(:,:)+zdql(:,:) 251 255 qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:) 256 qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:) 252 257 253 258 !====================================================================== … … 432 437 ql_seri(:,:)=ql_seri(:,:)-zdql(:,:) 433 438 qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:) 439 qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:) 434 440 ENDIF 435 441 … … 446 452 447 453 CALL integr_v(klon, klev, zcpvap, & 448 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &449 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &450 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))454 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, & 455 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 456 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 451 457 452 458 ! ------------------------------------------------ … … 457 463 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 458 464 d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep 459 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) 465 d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep 466 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:) 460 467 461 468 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 465 472 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 466 473 d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep 474 d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep 467 475 468 476 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 476 484 ql_seri(:,:) = sav_ql_seri(:,:) 477 485 qs_seri(:,:) = sav_qs_seri(:,:) 486 qbs_seri(:,:) = sav_qbs_seri(:,:) 478 487 q_seri(:,:) = sav_q_seri(:,:) 479 488 t_seri(:,:) = sav_t_seri(:,:) … … 484 493 END SUBROUTINE add_phys_tend 485 494 486 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &487 zdu,zdv,zdt,zdq,zdql,zdqs, paprs,text)495 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, & 496 zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text) 488 497 !====================================================================== 489 498 ! Ajoute les tendances des variables physiques aux variables … … 501 510 USE print_control_mod, ONLY: prt_level 502 511 USE cmp_seri_mod 503 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &504 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col512 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col & 513 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 505 514 IMPLICIT none 506 515 include "YOMCST.h" … … 511 520 INTEGER, INTENT(IN) :: nlon, nlev 512 521 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: uu, vv 513 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs 522 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs 514 523 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdu, zdv 515 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs 524 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs, zdqbs 516 525 REAL, DIMENSION(nlon,nlev+1), INTENT(IN) :: paprs 517 526 CHARACTER*(*), INTENT(IN) :: text … … 520 529 !-------- 521 530 REAL, DIMENSION(nlon,nlev) :: uu_n, vv_n 522 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n 531 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n, qbs_n 523 532 524 533 … … 543 552 ! zqw_col------ total mass of watter vapour (kg/m2) 544 553 ! zql_col------ total mass of liquid watter (kg/m2) 545 ! zqs_col------ total mass of solid watter (kg/m2) 554 ! zqs_col------ total mass of cloud ice (kg/m2) 555 ! zqbs_col------ total mass of blowing snow (kg/m2) 546 556 ! zek_col------ total kinetic energy (kg/m2) 547 557 ! … … 550 560 REAL zql_col(nlon,2) 551 561 REAL zqs_col(nlon,2) 562 REAL zqbs_col(nlon,2) 552 563 REAL zek_col(nlon,2) 553 564 REAL zh_dair_col(nlon,2) 554 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2) 565 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2) 555 566 REAL zh_col(nlon,2) 556 567 … … 585 596 586 597 CALL integr_v(nlon, nlev, rcpv, & 587 temp, qv, ql, qs, uu, vv, zairm, &588 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &589 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))598 temp, qv, ql, qs, qbs, uu, vv, zairm, & 599 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 600 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 590 601 591 602 end if ! end if (fl_ebil .GT. 0) … … 600 611 ql_n(:,:)=ql(:,:)+zdql(:,:) 601 612 qs_n(:,:)=qs(:,:)+zdqs(:,:) 613 qbs_n(:,:)=qbs(:,:)+zdqbs(:,:) 602 614 temp_n(:,:)=temp(:,:)+zdt(:,:) 603 615 … … 616 628 617 629 CALL integr_v(nlon, nlev, rcpv, & 618 temp_n, qv_n, ql_n, qs_n, uu_n, vv_n, zairm, &619 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &620 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))630 temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, & 631 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 632 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 621 633 622 634 ! ------------------------------------------------ … … 627 639 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 628 640 d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep 629 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) 641 d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep 642 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:) 630 643 631 644 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 639 652 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 640 653 d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep 654 d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep 641 655 642 656 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 649 663 650 664 SUBROUTINE integr_v(nlon, nlev, zcpvap, & 651 temp, qv, ql, qs, uu, vv, zairm, &652 zqw_col, zql_col, zqs_col, z ek_col, zh_dair_col, &653 zh_qw_col, zh_ql_col, zh_qs_col, zh_ col)665 temp, qv, ql, qs, qbs, uu, vv, zairm, & 666 zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, & 667 zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col) 654 668 655 669 IMPLICIT none … … 658 672 INTEGER, INTENT(IN) :: nlon,nlev 659 673 REAL, INTENT(IN) :: zcpvap 660 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, uu, vv674 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs, uu, vv 661 675 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zairm 662 676 REAL, DIMENSION(nlon), INTENT(OUT) :: zqw_col 663 677 REAL, DIMENSION(nlon), INTENT(OUT) :: zql_col 664 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col 678 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col, zqbs_col 665 679 REAL, DIMENSION(nlon), INTENT(OUT) :: zek_col 666 680 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_dair_col 667 681 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qw_col 668 682 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_ql_col 669 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col 683 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col, zh_qbs_col 670 684 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_col 671 685 … … 677 691 zql_col(:) = 0. 678 692 zqs_col(:) = 0. 693 zqbs_col(:) = 0. 679 694 zek_col(:) = 0. 680 695 zh_dair_col(:) = 0. … … 682 697 zh_ql_col(:) = 0. 683 698 zh_qs_col(:) = 0. 699 zh_qbs_col(:) = 0. 684 700 685 701 !JLD write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice … … 694 710 zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k) 695 711 zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k) 712 zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k) 696 713 ! Kinetic Energy 697 714 zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k) … … 702 719 zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k) !jyg 703 720 zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k) !jyg 721 zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k) !jyg 704 722 END DO 705 723 END DO 706 724 ! compute total air enthalpy 707 zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) 725 zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:) 708 726 709 727 END SUBROUTINE integr_v … … 720 738 USE dimphy, ONLY: klon, klev 721 739 USE phys_state_var_mod, ONLY : phys_tstep 722 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con 740 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall 723 741 USE geometry_mod, ONLY: longitude_deg, latitude_deg 724 742 USE print_control_mod, ONLY: prt_level 725 743 USE cmp_seri_mod 726 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &727 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col744 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col & 745 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 728 746 USE phys_local_var_mod, ONLY: evap, sens 729 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q _seri, t_seri &747 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri & 730 748 & , rain_lsc, snow_lsc 731 749 USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd … … 764 782 bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) & 765 783 & + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1) 784 CASE("bs") param 785 bilq_bnd = - bs_fall(1) 786 bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1) 766 787 CASE("convection") param 767 788 bilq_bnd = - rain_con(1) - snow_con(1) … … 800 821 if ( prt_level .GE. 5) then 801 822 write(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd 802 write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1) 803 write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1) 823 write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1), d_qbs_col(1) 824 write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1),d_h_qbs_col(1) 804 825 end if 805 826 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/atke_turbulence_ini_mod.F90
r4481 r4669 5 5 save 6 6 7 integer :: iflag_atke8 !$OMP THREADPRIVATE(iflag_atke)7 integer :: iflag_atke, iflag_num_atke 8 !$OMP THREADPRIVATE(iflag_atke, iflag_num_atke) 9 9 real :: kappa = 0.4 ! Von Karman constant 10 10 !$OMP THREADPRIVATE(kappa) … … 45 45 CALL getin_p('iflag_atke',iflag_atke) 46 46 47 ! flag that controls the numerical treatment of diffusion coeffiient calculation 48 iflag_num_atke=0 49 CALL getin_p('iflag_num_atke',iflag_num_atke) 50 47 51 ! asymptotic mixing length [m] 48 52 l0=150.0 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/calcratqs.F90
r4009 r4669 7 7 qtc_cv, sigt_cv, zqsat, & 8 8 tke,tke_dissip,lmix,wprime, & 9 t2m,q2m,fm_therm, 9 t2m,q2m,fm_therm,cell_area,& 10 10 ratqs,ratqsc,ratqs_inter) 11 11 … … 37 37 real, dimension(klon,klev),intent(in) :: wake_deltaq,wake_s 38 38 real, dimension(klon,nbsrf),intent(in) :: t2m,q2m 39 real, dimension(klon), intent(in) :: cell_area 39 40 ! Output 40 41 real, dimension(klon,klev),intent(inout) :: ratqs,ratqsc,ratqs_inter … … 47 48 real facteur,zfratqs1,zfratqs2 48 49 real, dimension(klon,klev) :: ratqs_hetero,ratqs_oro,ratqs_tke 49 50 real resol,resolmax,fact 50 51 51 52 !------------------------------------------------------------------------- … … 142 143 *( tanh( (ratqsp0-pplay(:,k))/ratqsdp) + 1.) 143 144 enddo 145 146 147 else if (iflag_ratqs==5) then 148 ! Dependency of ratqs on model resolution 149 ! Audran, Meryl, Lea, Gwendal and Etienne 150 ! April 2023 151 resolmax=sqrt(maxval(cell_area)) 152 do k=1,klev 153 do i=1,klon 154 resol=sqrt(cell_area(i)) 155 fact=sqrt(resol/resolmax) 156 ratqss(i,k)=ratqsbas*fact+0.5*(ratqshaut-ratqsbas)*fact & 157 *( tanh( (ratqsp0-pplay(i,k))/ratqsdp) + 1.) 158 enddo 159 enddo 160 144 161 145 162 else if (iflag_ratqs .GT. 9) then -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/calcul_divers.h
r3435 r4669 2 2 ! $Id$ 3 3 ! 4 ! itap : nombre de pas de temps de la physique 5 ! itapm1 : somme du nombre de pas de temps du/des mois precedent/s. 6 ! (itap - itapm1) : nombre de pas de temps du mois courant 4 7 ! 5 ! Initialisations diverses au tout debut 8 ! Ne pas modifier les IFs ci-dessous impliquant itapm1, 9 ! autrement les resultats seront faux !! 10 ! 11 ! Ici on utilise MOD(itap - itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.1) 12 ! pour detecter le debut de chaque mois lorsque l on tourne par an. 13 ! 14 ! IM, 26.05.2023 15 ! 16 ! 17 ! Initialisations itapm1 du premier mois 6 18 IF(itap.EQ.1) THEN 7 19 itapm1=0 20 ! print*,'initialisation itap=1 itapm1 ',itapm1 8 21 ENDIF 9 22 23 ! 10 24 ! Initialisation debut de mois 11 25 IF(itap.EQ.itapm1+1) THEN 26 ndayrain_mth(:)=0. 27 ! print*,'Initialisation ndayrain_mth ',itap 28 ENDIF 29 ! 30 ! Initialisation debut de chaque jour 31 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN 12 32 nday_rain(:)=0. 13 33 ! print*,'initialisation mois suivants day_rain itap',itap 14 34 ENDIF 15 16 ! Calcul fin de journee : total_rain, nday_rain 17 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN 18 ! print*,'calcul nday_rain itap ',itap 35 ! 36 ! Calcul a chaque pas de temps de la physique 19 37 DO i = 1, klon 20 38 total_rain(i)=rain_fall(i)+snow_fall(i) 21 IF(total_rain(i).GT.0.) nday_rain(i)=nday_rain(i)+1. 39 IF(total_rain(i).GT.0.) nday_rain(i)=1. 40 ENDDO 41 ! 42 ! Cumul en fin de journee 43 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN 44 DO i = 1, klon 45 ndayrain_mth(i)=ndayrain_mth(i)+nday_rain(i) 22 46 ENDDO 23 47 ENDIF 24 48 ! 25 49 ! Initialisation fin de mois 50 ! Ne pas changer le IF ci-dessous, car le compteur itapm1 est augmente 51 ! apres, dans la boucle !!! 52 ! IM, 260523 26 53 IF(MOD(itap-itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.0) THEN 27 54 itapm1=itapm1+NINT(mth_len*un_jour/phys_tstep) 28 ! print*,' initialisation itapm1 ',itapm155 ! print*,'fmois i i1 mjt',itap,itapm1,mth_len,un_jour,phys_tstep 29 56 ENDIF 30 57 ! 31 58 ! calcul temperatures minimale et maximale moyennees sur le mois 32 59 ! 33 !initialisation debut de mois ou de journee pour les fichiers mensuels60 !initialisation debut de mois pour les fichiers mensuels annuels 34 61 IF(itap.EQ.itapm1+1) THEN 35 62 t2m_min_mon=0. 36 63 t2m_max_mon=0. 37 64 ENDIF 65 ! 66 !initialisation debut de journee pour les fichiers mensuels annuels 38 67 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN 39 68 zt2m_min_mon=zt2m 40 69 zt2m_max_mon=zt2m 41 70 ENDIF 42 !calcul a chaque pas de temps pour les fichiers mensuels 71 ! 72 !calcul sur tous les pas de temps pour les fichiers mensuels annuels 43 73 DO i = 1, klon 44 74 zt2m_min_mon(i)=MIN(zt2m(i),zt2m_min_mon(i)) 45 75 zt2m_max_mon(i)=MAX(zt2m(i),zt2m_max_mon(i)) 46 76 ENDDO 47 !fin de journee 77 ! 78 !fin journee 48 79 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN 49 80 t2m_min_mon=t2m_min_mon+zt2m_min_mon 50 81 t2m_max_mon=t2m_max_mon+zt2m_max_mon 51 82 ENDIF 83 ! 52 84 !fin mois 53 85 IF(itap==itapm1) THEN -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/clesphys.h
r4661 r4669 18 18 REAL co2_ppm, co2_ppm0, solaire 19 19 INTEGER iflag_thermals,nsplit_thermals 20 INTEGER iflag_physiq 20 21 REAL tau_thermals 21 22 … … 102 103 LOGICAL :: ok_daily_climoz 103 104 LOGICAL :: ok_new_lscp 105 LOGICAL :: ok_bs, ok_rad_bs 104 106 ! flag to bypass or not the phytrac module 105 107 INTEGER :: iflag_phytrac … … 154 156 & , ok_chlorophyll,ok_conserv_q, adjust_tropopause & 155 157 & , ok_daily_climoz, ok_all_xml, ok_lwoff & 156 & , iflag_phytrac, ok_new_lscp & 157 & , iflag_thermals,nsplit_thermals, tau_thermals 158 & , iflag_phytrac, ok_new_lscp, ok_bs, ok_rad_bs & 159 & , iflag_thermals,nsplit_thermals, tau_thermals & 160 & , iflag_physiq 158 161 save /clesphys/ 159 162 !$OMP THREADPRIVATE(/clesphys/) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/cloudth_mod.F90
r4380 r4669 1 1 MODULE cloudth_mod 2 2 3 3 4 IMPLICIT NONE … … 10 11 & ratqs,zqs,t) 11 12 13 14 use lscp_ini_mod, only: iflag_cloudth_vert 12 15 13 16 IMPLICIT NONE … … 24 27 #include "YOETHF.h" 25 28 #include "FCTTRE.h" 26 #include "nuage.h"27 29 28 30 INTEGER itap,ind1,ind2 … … 262 264 263 265 USE ioipsl_getin_p_mod, ONLY : getin_p 266 use lscp_ini_mod, only: iflag_cloudth_vert 264 267 265 268 IMPLICIT NONE … … 268 271 #include "YOETHF.h" 269 272 #include "FCTTRE.h" 270 #include "nuage.h"271 273 272 274 INTEGER itap,ind1,ind2 … … 593 595 & ratqs,zqs,t) 594 596 597 use lscp_ini_mod, only: iflag_cloudth_vert 595 598 596 599 IMPLICIT NONE … … 607 610 #include "YOETHF.h" 608 611 #include "FCTTRE.h" 609 #include "nuage.h"610 612 611 613 INTEGER itap,ind1,ind2 … … 820 822 !=========================================================================== 821 823 822 824 use lscp_ini_mod, only: iflag_cloudth_vert 823 825 USE ioipsl_getin_p_mod, ONLY : getin_p 824 826 USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv, & … … 830 832 #include "YOETHF.h" 831 833 #include "FCTTRE.h" 832 #include "nuage.h"833 834 834 835 INTEGER itap,ind1,ind2 … … 1283 1284 & ratqs,zqs,T) 1284 1285 1285 1286 use lscp_ini_mod, only: iflag_cloudth_vert 1286 1287 USE ioipsl_getin_p_mod, ONLY : getin_p 1287 1288 USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv, & … … 1293 1294 #include "YOETHF.h" 1294 1295 #include "FCTTRE.h" 1295 #include "nuage.h"1296 1296 1297 1297 … … 1550 1550 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1551 1551 1552 1552 use lscp_ini_mod, only: iflag_cloudth_vert 1553 1553 USE ioipsl_getin_p_mod, ONLY : getin_p 1554 1554 USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv … … 1561 1561 #include "YOETHF.h" 1562 1562 #include "FCTTRE.h" 1563 #include "nuage.h"1564 1563 1565 1564 … … 2321 2320 2322 2321 INCLUDE "YOMCST.h" 2323 INCLUDE "nuage.h"2324 2322 2325 2323 INTEGER, INTENT(IN) :: ind1,ind2, klev ! horizontal and vertical indices and dimensions -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/conf_phys_m.F90
r4661 r4669 35 35 36 36 INCLUDE "conema3.h" 37 INCLUDE "fisrtilp.h"38 37 INCLUDE "nuage.h" 39 38 INCLUDE "YOMCST.h" … … 171 170 LOGICAL,SAVE :: ok_adj_ema_omp 172 171 INTEGER,SAVE :: iflag_clw_omp 173 REAL,SAVE :: cld_lc_lsc_omp,cld_lc_con_omp,cld_tau_lsc_omp,cld_tau_con_omp174 REAL,SAVE :: ffallv_lsc_omp, ffallv_con_omp,coef_eva_omp,coef_eva_i_omp175 LOGICAL,SAVE :: reevap_ice_omp176 INTEGER,SAVE :: iflag_pdf_omp177 172 INTEGER,SAVE :: iflag_ice_thermo_omp 178 173 LOGICAL,SAVE :: ok_ice_sursat_omp 179 174 LOGICAL,SAVE :: ok_plane_h2o_omp, ok_plane_contrail_omp 180 INTEGER,SAVE :: iflag_t_glace_omp 181 INTEGER,SAVE :: iflag_cloudth_vert_omp 182 INTEGER,SAVE :: iflag_rain_incloud_vol_omp 183 INTEGER,SAVE :: iflag_vice_omp, iflag_rei_omp 175 INTEGER,SAVE :: iflag_rei_omp 184 176 REAL,SAVE :: rad_froid_omp, rad_chau1_omp, rad_chau2_omp 185 REAL,SAVE :: t_glace_min_omp, t_glace_max_omp186 REAL,SAVE :: exposant_glace_omp187 INTEGER,SAVE :: iflag_gammasat_omp188 177 REAL,SAVE :: rei_min_omp, rei_max_omp 189 178 INTEGER,SAVE :: iflag_sic_omp, iflag_inertie_omp … … 200 189 REAL, SAVE :: fmagic_omp, pmagic_omp 201 190 INTEGER,SAVE :: iflag_pbl_omp,lev_histhf_omp,lev_histday_omp,lev_histmth_omp 202 INTEGER,SAVE :: iflag_pbl_split_omp 191 INTEGER,SAVE :: iflag_pbl_split_omp,iflag_physiq_omp 203 192 !FC 204 193 INTEGER,SAVE :: ifl_pbltree_omp … … 234 223 INTEGER, SAVE :: iflag_ener_conserv_omp 235 224 LOGICAL, SAVE :: ok_conserv_q_omp 236 INTEGER, SAVE :: iflag_fisrtilp_qsat_omp237 INTEGER, SAVE :: iflag_bergeron_omp238 225 LOGICAL,SAVE :: ok_strato_omp 239 226 LOGICAL,SAVE :: ok_hines_omp, ok_gwd_rando_omp … … 259 246 INTEGER,SAVE :: nit_bulk_omp 260 247 INTEGER,SAVE :: kz0_omp 248 LOGICAL, SAVE :: ok_bs_omp, ok_rad_bs_omp 261 249 262 250 … … 1023 1011 CALL getin('ok_conserv_q',ok_conserv_q_omp) 1024 1012 1025 !Config Key = iflag_fisrtilp_qsat1026 !Config Desc = Flag de fisrtilp1027 !Config Def = 01028 !Config Help = Flag pour la pluie grande-échelle les options suivantes existent :1029 !Config >1 nb iterations pour converger dans le calcul de qsat1030 iflag_fisrtilp_qsat_omp = 01031 CALL getin('iflag_fisrtilp_qsat',iflag_fisrtilp_qsat_omp)1032 1033 !Config Key = iflag_bergeron1034 !Config Desc = Flag de fisrtilp1035 !Config Def = 01036 !Config Help = Flag pour la pluie grande-échelle les options suivantes existent :1037 !Config 0 pas d effet Bergeron1038 !Config 1 effet Bergeron pour T<01039 iflag_bergeron_omp = 01040 CALL getin('iflag_bergeron',iflag_bergeron_omp)1041 1042 1013 ! 1043 1014 ! … … 1098 1069 iflag_clw_omp = 0 1099 1070 CALL getin('iflag_clw',iflag_clw_omp) 1100 ! 1101 !Config Key = cld_lc_lsc 1102 !Config Desc = 1103 !Config Def = 2.6e-4 1104 !Config Help = 1105 ! 1106 cld_lc_lsc_omp = 2.6e-4 1107 CALL getin('cld_lc_lsc',cld_lc_lsc_omp) 1108 ! 1109 !Config Key = cld_lc_con 1110 !Config Desc = 1111 !Config Def = 2.6e-4 1112 !Config Help = 1113 ! 1114 cld_lc_con_omp = 2.6e-4 1115 CALL getin('cld_lc_con',cld_lc_con_omp) 1116 ! 1117 !Config Key = cld_tau_lsc 1118 !Config Desc = 1119 !Config Def = 3600. 1120 !Config Help = 1121 ! 1122 cld_tau_lsc_omp = 3600. 1123 CALL getin('cld_tau_lsc',cld_tau_lsc_omp) 1124 ! 1125 !Config Key = cld_tau_con 1126 !Config Desc = 1127 !Config Def = 3600. 1128 !Config Help = 1129 ! 1130 cld_tau_con_omp = 3600. 1131 CALL getin('cld_tau_con',cld_tau_con_omp) 1132 ! 1133 !Config Key = ffallv_lsc 1134 !Config Desc = 1135 !Config Def = 1. 1136 !Config Help = 1137 ! 1138 ffallv_lsc_omp = 1. 1139 CALL getin('ffallv_lsc',ffallv_lsc_omp) 1140 ! 1141 !Config Key = ffallv_con 1142 !Config Desc = 1143 !Config Def = 1. 1144 !Config Help = 1145 ! 1146 ffallv_con_omp = 1. 1147 CALL getin('ffallv_con',ffallv_con_omp) 1148 ! 1149 !Config Key = coef_eva 1150 !Config Desc = 1151 !Config Def = 2.e-5 1152 !Config Help = 1153 ! 1154 coef_eva_omp = 2.e-5 1155 CALL getin('coef_eva',coef_eva_omp) 1156 ! 1157 !Config Key = coef_eva_i 1158 !Config Desc = 1159 !Config Def = 2.e-5 1160 !Config Help = 1161 ! 1162 coef_eva_i_omp = coef_eva_omp 1163 CALL getin('coef_eva_i',coef_eva_i_omp) 1164 ! 1165 !Config Key = reevap_ice 1166 !Config Desc = 1167 !Config Def = .FALSE. 1168 !Config Help = 1169 ! 1170 reevap_ice_omp = .FALSE. 1171 CALL getin('reevap_ice',reevap_ice_omp) 1071 1172 1072 1173 1073 !Config Key = iflag_ratqs … … 1285 1185 1286 1186 ! 1287 !Config Key = iflag_pdf1288 !Config Desc =1289 !Config Def = 01290 !Config Help =1291 !1292 iflag_pdf_omp = 01293 CALL getin('iflag_pdf',iflag_pdf_omp)1294 !1295 1187 !Config Key = fact_cldcon 1296 1188 !Config Desc = … … 1443 1335 CALL getin('rad_chau2',rad_chau2_omp) 1444 1336 1445 !1446 !Config Key = t_glace_min1447 !Config Desc =1448 !Config Def = 258.1449 !Config Help =1450 !1451 t_glace_min_omp = 258.1452 CALL getin('t_glace_min',t_glace_min_omp)1453 1454 !1455 !Config Key = t_glace_max1456 !Config Desc =1457 !Config Def = 273.131458 !Config Help =1459 !1460 t_glace_max_omp = 273.131461 CALL getin('t_glace_max',t_glace_max_omp)1462 1463 !1464 !Config Key = exposant_glace1465 !Config Desc =1466 !Config Def = 2.1467 !Config Help =1468 !1469 exposant_glace_omp = 1.1470 CALL getin('exposant_glace',exposant_glace_omp)1471 1472 !1473 !Config Key = iflag_gammasat1474 !Config Desc =1475 !Config Def = 01476 !Config Help =1477 !1478 iflag_gammasat_omp=01479 CALL getin('iflag_gammasat',iflag_gammasat_omp)1480 1481 1482 !1483 !Config Key = iflag_t_glace1484 !Config Desc =1485 !Config Def = 01486 !Config Help =1487 !1488 iflag_t_glace_omp = 01489 CALL getin('iflag_t_glace',iflag_t_glace_omp)1490 1491 !1492 !Config Key = iflag_cloudth_vert1493 !Config Desc =1494 !Config Def = 01495 !Config Help =1496 !1497 iflag_cloudth_vert_omp = 01498 CALL getin('iflag_cloudth_vert',iflag_cloudth_vert_omp)1499 1500 !1501 !Config Key = iflag_rain_incloud_vol1502 !Config Desc =1503 !Config Def = 01504 !Config Help =1505 !1506 iflag_rain_incloud_vol_omp = 01507 CALL getin('iflag_rain_incloud_vol',iflag_rain_incloud_vol_omp)1508 1509 !1510 !Config Key = iflag_vice1511 !Config Desc =1512 !Config Def = 01513 !Config Help =1514 !1515 iflag_vice_omp = 01516 CALL getin('iflag_vice',iflag_vice_omp)1517 1337 1518 1338 !Config Key = iflag_rei … … 1695 1515 CALL getin('iflag_pbl',iflag_pbl_omp) 1696 1516 1517 iflag_physiq_omp = 0 ! 0: std, 1: with physiqex output, 2: for physiqex 1518 CALL getin('iflag_physiq',iflag_physiq_omp) 1519 1697 1520 !FC 1698 1521 !Config Key = ifl_pbltree … … 1744 1567 nsplit_thermals_omp = 1 1745 1568 CALL getin('nsplit_thermals',nsplit_thermals_omp) 1746 1747 !Config Key = alp_bl_k 1748 !Config Desc = 1749 !Config Def = 0. 1750 !Config Help = 1751 ! 1569 ! 1570 !Config Key = nsplit_thermals 1571 !Config Desc = 1572 !Config Def = 0 1573 !Config Help = 1752 1574 alp_bl_k_omp = 1. 1753 1575 CALL getin('alp_bl_k',alp_bl_k_omp) … … 2390 2212 !Config Help = ... 2391 2213 2214 2215 2216 ok_bs_omp = .FALSE. 2217 CALL getin('ok_bs', ok_bs_omp) 2218 ! 2219 !Config Key = ok_bs_omp 2220 !Config Desc = include blowing snow 2221 !Config Def = .FALSE. 2222 !Config Help = ... 2223 2224 2225 ok_rad_bs_omp = .FALSE. 2226 CALL getin('ok_rad_bs', ok_rad_bs_omp) 2227 ! 2228 !Config Key = ok_rad_bs_omp 2229 !Config Desc = include blowing snow radiative effect 2230 !Config Def = .FALSE. 2231 !Config Help = ... 2392 2232 2393 2233 ecrit_LES_omp = 1./8. … … 2477 2317 iflag_ener_conserv = iflag_ener_conserv_omp 2478 2318 ok_conserv_q = ok_conserv_q_omp 2479 iflag_fisrtilp_qsat = iflag_fisrtilp_qsat_omp2480 iflag_bergeron = iflag_bergeron_omp2481 2482 2319 epmax = epmax_omp 2483 2320 coef_epmax_cape = coef_epmax_cape_omp 2484 2321 ok_adj_ema = ok_adj_ema_omp 2485 2322 iflag_clw = iflag_clw_omp 2486 cld_lc_lsc = cld_lc_lsc_omp2487 cld_lc_con = cld_lc_con_omp2488 cld_tau_lsc = cld_tau_lsc_omp2489 cld_tau_con = cld_tau_con_omp2490 ffallv_lsc = ffallv_lsc_omp2491 ffallv_con = ffallv_con_omp2492 coef_eva = coef_eva_omp2493 coef_eva_i = coef_eva_i_omp2494 reevap_ice = reevap_ice_omp2495 iflag_pdf = iflag_pdf_omp2496 2323 solarlong0 = solarlong0_omp 2497 2324 qsol0 = qsol0_omp … … 2504 2331 inertie_lic = inertie_lic_omp 2505 2332 inertie_sno = inertie_sno_omp 2333 ok_bs = ok_bs_omp 2334 ok_rad_bs=ok_rad_bs_omp 2506 2335 rad_froid = rad_froid_omp 2507 2336 rad_chau1 = rad_chau1_omp 2508 2337 rad_chau2 = rad_chau2_omp 2509 t_glace_min = t_glace_min_omp2510 t_glace_max = t_glace_max_omp2511 exposant_glace = exposant_glace_omp2512 iflag_gammasat=iflag_gammasat_omp2513 iflag_t_glace = iflag_t_glace_omp2514 iflag_cloudth_vert=iflag_cloudth_vert_omp2515 iflag_rain_incloud_vol=iflag_rain_incloud_vol_omp2516 iflag_vice=iflag_vice_omp2517 2338 iflag_rei=iflag_rei_omp 2518 2339 iflag_ice_thermo = iflag_ice_thermo_omp … … 2533 2354 pmagic = pmagic_omp 2534 2355 iflag_pbl = iflag_pbl_omp 2356 iflag_physiq = iflag_physiq_omp 2535 2357 iflag_pbl_split = iflag_pbl_split_omp 2536 2358 !FC … … 2907 2729 WRITE(lunout,*) ' iflag_ener_conserv=',iflag_ener_conserv 2908 2730 WRITE(lunout,*) ' ok_conserv_q=',ok_conserv_q 2909 WRITE(lunout,*) ' iflag_fisrtilp_qsat=',iflag_fisrtilp_qsat2910 WRITE(lunout,*) ' iflag_bergeron=',iflag_bergeron2911 2731 WRITE(lunout,*) ' epmax = ', epmax 2912 2732 WRITE(lunout,*) ' coef_epmax_cape = ', coef_epmax_cape 2913 2733 WRITE(lunout,*) ' ok_adj_ema = ', ok_adj_ema 2914 2734 WRITE(lunout,*) ' iflag_clw = ', iflag_clw 2915 WRITE(lunout,*) ' cld_lc_lsc = ', cld_lc_lsc2916 WRITE(lunout,*) ' cld_lc_con = ', cld_lc_con2917 WRITE(lunout,*) ' cld_tau_lsc = ', cld_tau_lsc2918 WRITE(lunout,*) ' cld_tau_con = ', cld_tau_con2919 WRITE(lunout,*) ' ffallv_lsc = ', ffallv_lsc2920 WRITE(lunout,*) ' ffallv_con = ', ffallv_con2921 WRITE(lunout,*) ' coef_eva = ', coef_eva2922 WRITE(lunout,*) ' coef_eva_i = ', coef_eva_i2923 WRITE(lunout,*) ' reevap_ice = ', reevap_ice2924 WRITE(lunout,*) ' iflag_pdf = ', iflag_pdf2925 2735 WRITE(lunout,*) ' iflag_cld_th = ', iflag_cld_th 2926 2736 WRITE(lunout,*) ' iflag_cld_cv = ', iflag_cld_cv … … 2944 2754 WRITE(lunout,*) ' rad_chau1 = ',rad_chau1 2945 2755 WRITE(lunout,*) ' rad_chau2 = ',rad_chau2 2946 WRITE(lunout,*) ' t_glace_min = ',t_glace_min2947 WRITE(lunout,*) ' t_glace_max = ',t_glace_max2948 WRITE(lunout,*) ' exposant_glace = ',exposant_glace2949 WRITE(lunout,*) ' iflag_gammasat = ',iflag_gammasat2950 WRITE(lunout,*) ' iflag_t_glace = ',iflag_t_glace2951 WRITE(lunout,*) ' iflag_cloudth_vert = ',iflag_cloudth_vert2952 WRITE(lunout,*) ' iflag_rain_incloud_vol = ',iflag_rain_incloud_vol2953 WRITE(lunout,*) ' iflag_vice = ',iflag_vice2954 2756 WRITE(lunout,*) ' iflag_rei = ',iflag_rei 2955 2757 WRITE(lunout,*) ' iflag_ice_thermo = ',iflag_ice_thermo … … 2992 2794 WRITE(lunout,*) ' freq_calNMC = ',freq_calNMC 2993 2795 WRITE(lunout,*) ' iflag_pbl = ', iflag_pbl 2796 WRITE(lunout,*) ' iflag_physiq = ', iflag_physiq 2994 2797 !FC 2995 2798 WRITE(lunout,*) ' ifl_pbltree = ', ifl_pbltree … … 3017 2820 WRITE(lunout,*) ' inertie_lic = ', inertie_lic 3018 2821 WRITE(lunout,*) ' inertie_sno = ', inertie_sno 2822 WRITE(lunout,*) ' ok_bs = ', ok_bs 2823 WRITE(lunout,*) ' ok_rad_bs = ', ok_rad_bs 3019 2824 WRITE(lunout,*) ' f_cdrag_ter = ',f_cdrag_ter 3020 2825 WRITE(lunout,*) ' f_cdrag_oce = ',f_cdrag_oce -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/mod_1D_cases_read2.F90
r4288 r4669 1135 1135 ! endif 1136 1136 timeit=(day-day_ju_ini_cas)*86400 1137 print *,'day=',day1138 print *,'day_ju_ini_cas=',day_ju_ini_cas1139 print *,'pdt_cas=',pdt_cas1140 print *,'timeit=',timeit1141 print *,'nt_cas=',nt_cas1137 !print *,'day=',day 1138 !print *,'day_ju_ini_cas=',day_ju_ini_cas 1139 !print *,'pdt_cas=',pdt_cas 1140 !print *,'timeit=',timeit 1141 !print *,'nt_cas=',nt_cas 1142 1142 1143 1143 ! Determine the closest observation times: … … 1155 1155 time_cas1=(it_cas1-1)*pdt_cas 1156 1156 time_cas2=(it_cas2-1)*pdt_cas 1157 print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas21157 !print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2 1158 1158 1159 1159 if (it_cas1 .gt. nt_cas) then … … 1350 1350 ! endif 1351 1351 timeit=(day-day_ju_ini_cas)*86400 1352 print *,'day=',day1353 print *,'day_ju_ini_cas=',day_ju_ini_cas1354 print *,'pdt_cas=',pdt_cas1355 print *,'timeit=',timeit1356 print *,'nt_cas=',nt_cas1352 !print *,'day=',day 1353 !print *,'day_ju_ini_cas=',day_ju_ini_cas 1354 !print *,'pdt_cas=',pdt_cas 1355 !print *,'timeit=',timeit 1356 !print *,'nt_cas=',nt_cas 1357 1357 1358 1358 ! Determine the closest observation times: … … 1370 1370 time_cas1=(it_cas1-1)*pdt_cas 1371 1371 time_cas2=(it_cas2-1)*pdt_cas 1372 print *,'timeit,pdt_cas,nt_cas=',timeit,pdt_cas,nt_cas1373 print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas21372 !print *,'timeit,pdt_cas,nt_cas=',timeit,pdt_cas,nt_cas 1373 !print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2 1374 1374 1375 1375 if (it_cas1 .gt. nt_cas) then … … 1403 1403 t_prof_cas(k) = t_cas(k,it_cas2) & 1404 1404 -frac*(t_cas(k,it_cas2)-t_cas(k,it_cas1)) 1405 print *,'k,frac,plev_cas1,plev_cas2=',k,frac,plev_cas(k,it_cas1),plev_cas(k,it_cas2)1405 !print *,'k,frac,plev_cas1,plev_cas2=',k,frac,plev_cas(k,it_cas1),plev_cas(k,it_cas2) 1406 1406 theta_prof_cas(k) = theta_cas(k,it_cas2) & 1407 1407 -frac*(theta_cas(k,it_cas2)-theta_cas(k,it_cas1)) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/old_lmdz1d.F90
r4361 r4669 13 13 ftsol, beta_aridity, pbl_tke, pctsrf, radsol, rain_fall, snow_fall, ratqs, & 14 14 rnebcon, rugoro, sig1, w01, solaire_etat0, sollw, sollwdown, & 15 solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, &15 solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, rneb_ancien, & 16 16 wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, & 17 17 wake_deltaq, wake_deltat, wake_s, wake_dens, & … … 920 920 u_ancien(1,:)=u(:) 921 921 v_ancien(1,:)=v(:) 922 rneb_ancien(1,:)=0. 922 923 923 924 u10m=0. … … 945 946 !------------------------------------------------------------------------ 946 947 !Al1 =============== restart option ========================== 948 iflag_physiq=0 949 call getin('iflag_physiq',iflag_physiq) 950 947 951 if (.not.restart) then 948 952 iflag_pbl = 5 … … 1248 1252 !! Increment state variables 1249 1253 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1250 print*,'OLDLMDZ1D AANT'1251 1254 IF (flag_inhib_forcing == 0) then ! if tendency of forcings should be added 1252 print*,'OLDLMDZ1D ARES' , forcing_sandu1253 1255 1254 1256 ! pour les cas sandu et astex, on reclacule u,v,q,temp et teta dans 1D_nudge_sandu_astex.h -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/scm.F90
r4361 r4669 9 9 ftsol, beta_aridity, pbl_tke, pctsrf, radsol, rain_fall, snow_fall, ratqs, & 10 10 rnebcon, rugoro, sig1, w01, solaire_etat0, sollw, sollwdown, & 11 solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, &11 solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, rneb_ancien, & 12 12 wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, & 13 13 wake_deltaq, wake_deltat, wake_s, wake_dens, & … … 678 678 u_ancien(1,:)=u(:) 679 679 v_ancien(1,:)=v(:) 680 rneb_ancien(1,:)=0. 680 681 681 682 u10m=0. … … 703 704 !------------------------------------------------------------------------ 704 705 !Al1 =============== restart option ====================================== 706 iflag_physiq=0 707 call getin('iflag_physiq',iflag_physiq) 708 705 709 if (.not.restart) then 706 710 iflag_pbl = 5 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_aerosol_optics.F90
r4489 r4669 53 53 ! properties and average to the spectral intervals of the 54 54 ! current gas-optics scheme 55 ! call setup_general_aerosol_optics(config) 56 call setup_general_aerosol_optics_lmdz(config,trim(config%aerosol_optics_file_name)) 55 call setup_general_aerosol_optics(config) 57 56 else 58 57 ! Read file containing optical properties already in the bands … … 334 333 335 334 end subroutine setup_general_aerosol_optics 336 337 !---------------------------------------------------------------------338 ! Read LMDZ file containing high spectral resolution optical properties339 ! and average to the spectral intervals of the current gas-optics340 ! scheme341 subroutine setup_general_aerosol_optics_lmdz(config,file_name)342 343 use parkind1, only : jprb344 use yomhook, only : lhook, dr_hook345 ! use easy_netcdf, only : netcdf_file346 use radiation_config, only : config_type347 use radiation_aerosol_optics_data, only : aerosol_optics_type348 use radiation_spectral_definition, only : SolarReferenceTemperature, &349 & TerrestrialReferenceTemperature350 use radiation_io, only : nulout351 use netcdf95, only: nf95_open, nf95_inq_grp_full_ncid, nf95_close, &352 nf95_inq_dimid, nf95_inq_varid, nf95_inquire_dimension, &353 nf95_get_var, nf95_gw_var354 use netcdf, only: nf90_nowrite355 356 357 type(config_type), intent(inout), target :: config358 359 ! ! The NetCDF file containing the aerosol optics data360 ! type(netcdf_file) :: file361 362 character(len=*), intent(in):: file_name363 ! NetCDF file containing the aerosol optics data364 365 ! Wavenumber points in NetCDF file366 real(jprb), allocatable :: wavenumber(:) ! cm-1367 368 ! Hydrophilic aerosol properties369 real(jprb), allocatable :: mass_ext_philic(:,:,:) ! Mass-ext coefficient (m2 kg-1)370 real(jprb), allocatable :: ssa_philic(:,:,:) ! Single-scattering albedo371 real(jprb), allocatable :: g_philic(:,:,:) ! Asymmetry factor372 real(jprb), allocatable :: lidar_ratio_philic(:,:,:) ! Lidar ratio (sr)373 374 ! Hydrophobic aerosol properties375 real(jprb), allocatable :: mass_ext_phobic(:,:) ! Mass-ext coefficient (m2 kg-1)376 real(jprb), allocatable :: ssa_phobic(:,:) ! Single-scattering albedo377 real(jprb), allocatable :: g_phobic(:,:) ! Asymmetry factor378 real(jprb), allocatable :: lidar_ratio_phobic(:,:) ! Lidar ratio (sr)379 380 ! Mapping matrix between optical properties at the wavenumbers in381 ! the file, and spectral intervals used by the gas-optics scheme382 real(jprb), allocatable :: mapping(:,:)383 384 ! Pointer to the aerosol optics coefficients for brevity of access385 type(aerosol_optics_type), pointer :: ao386 387 ! Target monochromatic wavenumber for interpolation (cm-1)388 real(jprb) :: wavenumber_target389 390 ! Number of spectral points describing aerosol properties in the391 ! shortwave and longwave392 integer :: nspecsw, nspeclw393 394 ! Number of monochromatic wavelengths required395 integer :: nmono396 397 integer :: n_type_philic, n_type_phobic, nrh, nwn398 integer :: jtype, jwl, iwn399 400 ! Weight of first point in interpolation401 real(jprb) :: weight1402 403 real(jprb) :: hook_handle404 405 ! Local:406 integer ncid, grpid, dimid, varid407 408 if (lhook) call dr_hook('radiation_aerosol_optics:setup_general_aerosol_optics',0,hook_handle)409 410 ao => config%aerosol_optics411 412 ao%use_hydrophilic = .true.413 ao%use_monochromatic = .true.414 print*,'file_name= ',file_name415 call nf95_open(file_name, nf90_nowrite, ncid)416 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic", grpid)417 call nf95_inq_dimid(grpid, "hur", dimid)418 call nf95_inquire_dimension(grpid, dimid, nclen = ao%nrh)419 ! allocate(ao%rh_lower(ao%nrh))420 call nf95_inq_varid(grpid, "hur_bounds", varid)421 call nf95_get_var(grpid, varid, ao%rh_lower, count_nc = [1, ao%nrh])422 423 ! Hydrophilic/LW_bands:424 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/LW_bands", grpid)425 call nf95_inq_varid(grpid, "asymmetry", varid)426 call nf95_gw_var(grpid, varid, ao%g_lw_philic)427 call nf95_inq_varid(grpid, "single_scat_alb", varid)428 call nf95_gw_var(grpid, varid, ao%ssa_lw_philic)429 call nf95_inq_varid(grpid, "mass_ext", varid)430 call nf95_gw_var(grpid, varid, ao%mass_ext_lw_philic)431 432 ! Hydrophilic/SW_bands:433 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/SW_bands", grpid)434 call nf95_inq_varid(grpid, "asymmetry", varid)435 call nf95_gw_var(grpid, varid, ao%g_sw_philic)436 ao%g_sw_philic = cshift(ao%g_sw_philic, 1)437 call nf95_inq_varid(grpid, "single_scat_alb", varid)438 call nf95_gw_var(grpid, varid, ao%ssa_sw_philic)439 ao%g_sw_philic = cshift(ao%ssa_sw_philic, 1)440 call nf95_inq_varid(grpid, "mass_ext", varid)441 call nf95_gw_var(grpid, varid, ao%mass_ext_sw_philic)442 ao%g_sw_philic = cshift(ao%mass_ext_sw_philic, 1)443 444 ! Hydrophilic/Monochromatic:445 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/Monochromatic", grpid)446 call nf95_inq_varid(grpid, "mass_ext", varid)447 call nf95_gw_var(grpid, varid, ao%mass_ext_mono_philic)448 449 ! Hydrophobic/LW_bands:450 call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/LW_bands", grpid)451 call nf95_inq_varid(grpid, "asymmetry", varid)452 call nf95_gw_var(grpid, varid, ao%g_lw_phobic)453 call nf95_inq_varid(grpid, "single_scat_alb", varid)454 call nf95_gw_var(grpid, varid, ao%ssa_lw_phobic)455 call nf95_inq_varid(grpid, "mass_ext", varid)456 call nf95_gw_var(grpid, varid, ao%mass_ext_lw_phobic)457 458 ! Hydrophobic/SW_bands:459 call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/SW_bands", grpid)460 call nf95_inq_varid(grpid, "asymmetry", varid)461 call nf95_gw_var(grpid, varid, ao%g_sw_phobic)462 ao%g_sw_phobic = cshift(ao%g_sw_phobic, 1)463 call nf95_inq_varid(grpid, "single_scat_alb", varid)464 call nf95_gw_var(grpid, varid, ao%ssa_sw_phobic)465 ao%g_sw_phobic = cshift(ao%ssa_sw_phobic, 1)466 call nf95_inq_varid(grpid, "mass_ext", varid)467 call nf95_gw_var(grpid, varid, ao%mass_ext_sw_phobic)468 ao%g_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1)469 ! AI ATTENTION470 call nf95_inq_varid(grpid, "wavenumber", varid)471 call nf95_gw_var(grpid, varid, wavenumber)472 473 ! Hydrophobic/Monochromatic:474 call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/Monochromatic", grpid)475 call nf95_inq_varid(grpid, "mass_ext", varid)476 call nf95_gw_var(grpid, varid, ao%mass_ext_mono_phobic)477 478 ! call file%get('wavenumber', wavenumber)479 ! nwn = size(wavenumber)480 481 ! call file%get_global_attribute('description_hydrophobic', &482 ! & ao%description_phobic_str)483 484 485 ! call file%get('relative_humidity1', ao%rh_lower)486 487 ! call file%get_global_attribute('description_hydrophilic', &488 ! & ao%description_philic_str)489 490 ! Close aerosol scattering file491 ! call file%close()492 493 call nf95_close(ncid)494 495 ! Get array sizes496 ! ao%n_bands_lw = size(ao%mass_ext_lw_phobic, 1)497 ! ao%n_bands_sw = size(ao%mass_ext_sw_phobic, 1)498 ! ao%n_mono_wl = size(ao%mass_ext_mono_phobic, 1)499 ! ao%n_type_phobic = size(ao%mass_ext_lw_phobic, 2)500 ! ao%n_type_philic = size(ao%mass_ext_lw_philic, 3)501 502 ! Allocate memory for mapping arrays503 ! ao%ntype = ao%n_type_phobic + ao%n_type_philic504 ! allocate(ao%iclass(ao%ntype))505 ! allocate(ao%itype(ao%ntype))506 507 ! ao%iclass = IAerosolClassUndefined508 ! ao%itype = 0509 510 n_type_phobic = size(mass_ext_phobic, 2)511 if (ao%use_hydrophilic) then512 n_type_philic = size(mass_ext_philic, 3)513 nrh = size(ao%rh_lower)514 else515 n_type_philic = 0516 nrh = 0517 end if518 519 if (config%do_cloud_aerosol_per_sw_g_point) then520 nspecsw = config%gas_optics_sw%spectral_def%ng521 else522 nspecsw = config%gas_optics_sw%spectral_def%nband523 end if524 525 if (config%do_cloud_aerosol_per_lw_g_point) then526 nspeclw = config%gas_optics_lw%spectral_def%ng527 else528 nspeclw = config%gas_optics_lw%spectral_def%nband529 end if530 531 if (allocated(ao%wavelength_mono)) then532 ! Monochromatic wavelengths also required533 nmono = size(ao%wavelength_mono)534 else535 nmono = 0536 end if537 538 call ao%allocate(n_type_phobic, n_type_philic, nrh, nspeclw, nspecsw, nmono)539 540 if (config%do_sw) then541 call config%gas_optics_sw%spectral_def%calc_mapping(SolarReferenceTemperature, &542 & wavenumber, mapping, use_bands=(.not. config%do_cloud_aerosol_per_sw_g_point))543 544 ao%mass_ext_sw_phobic = matmul(mapping, mass_ext_phobic)545 ao%ssa_sw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic) &546 & / ao%mass_ext_sw_phobic547 ao%g_sw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic*g_phobic) &548 & / (ao%mass_ext_sw_phobic*ao%ssa_sw_phobic)549 550 if (ao%use_hydrophilic) then551 do jtype = 1,n_type_philic552 ao%mass_ext_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype))553 ao%ssa_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &554 & *ssa_philic(:,:,jtype)) &555 & / ao%mass_ext_sw_philic(:,:,jtype)556 ao%g_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &557 & *ssa_philic(:,:,jtype)*g_philic(:,:,jtype)) &558 & / (ao%mass_ext_sw_philic(:,:,jtype)*ao%ssa_sw_philic(:,:,jtype))559 end do560 end if561 end if562 if (config%do_lw) then563 call config%gas_optics_lw%spectral_def%calc_mapping(TerrestrialReferenceTemperature, &564 & wavenumber, mapping, use_bands=(.not. config%do_cloud_aerosol_per_lw_g_point))565 566 ao%mass_ext_lw_phobic = matmul(mapping, mass_ext_phobic)567 ao%ssa_lw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic) &568 & / ao%mass_ext_lw_phobic569 ao%g_lw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic*g_phobic) &570 & / (ao%mass_ext_lw_phobic*ao%ssa_lw_phobic)571 572 if (ao%use_hydrophilic) then573 do jtype = 1,n_type_philic574 ao%mass_ext_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype))575 ao%ssa_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &576 & *ssa_philic(:,:,jtype)) &577 & / ao%mass_ext_lw_philic(:,:,jtype)578 ao%g_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &579 & *ssa_philic(:,:,jtype)*g_philic(:,:,jtype)) &580 & / (ao%mass_ext_lw_philic(:,:,jtype)*ao%ssa_lw_philic(:,:,jtype))581 end do582 end if583 end if584 585 if (allocated(ao%wavelength_mono)) then586 ! Monochromatic wavelengths also required587 do jwl = 1,nmono588 ! Wavelength (m) to wavenumber (cm-1)589 wavenumber_target = 0.01_jprb / ao%wavelength_mono(jwl)590 ! Find index to first interpolation point, and its weight591 if (wavenumber_target <= wavenumber(1)) then592 weight1 = 1.0_jprb593 iwn = 1594 else if (wavenumber_target >= wavenumber(nwn)) then595 iwn = nwn-1596 weight1 = 0.0_jprb597 else598 iwn = 1599 do while (wavenumber(iwn+1) < wavenumber_target .and. iwn < nwn-1)600 iwn = iwn + 1601 end do602 weight1 = (wavenumber(iwn+1)-wavenumber_target) &603 & / (wavenumber(iwn+1)-wavenumber(iwn))604 end if605 ! Linear interpolation606 ao%mass_ext_mono_phobic(jwl,:) = weight1 * mass_ext_phobic(iwn,:) &607 & + (1.0_jprb - weight1)* mass_ext_phobic(iwn+1,:)608 ao%ssa_mono_phobic(jwl,:) = weight1 * ssa_phobic(iwn,:) &609 & + (1.0_jprb - weight1)* ssa_phobic(iwn+1,:)610 ao%g_mono_phobic(jwl,:) = weight1 * g_phobic(iwn,:) &611 & + (1.0_jprb - weight1)* g_phobic(iwn+1,:)612 ao%lidar_ratio_mono_phobic(jwl,:) = weight1 * lidar_ratio_phobic(iwn,:) &613 & + (1.0_jprb - weight1)* lidar_ratio_phobic(iwn+1,:)614 if (ao%use_hydrophilic) then615 ao%mass_ext_mono_philic(jwl,:,:) = weight1 * mass_ext_philic(iwn,:,:) &616 & + (1.0_jprb - weight1)* mass_ext_philic(iwn+1,:,:)617 ao%ssa_mono_philic(jwl,:,:) = weight1 * ssa_philic(iwn,:,:) &618 & + (1.0_jprb - weight1)* ssa_philic(iwn+1,:,:)619 ao%g_mono_philic(jwl,:,:) = weight1 * g_philic(iwn,:,:) &620 & + (1.0_jprb - weight1)* g_philic(iwn+1,:,:)621 ao%lidar_ratio_mono_philic(jwl,:,:) = weight1 * lidar_ratio_philic(iwn,:,:) &622 & + (1.0_jprb - weight1)* lidar_ratio_philic(iwn+1,:,:)623 end if624 end do625 end if626 627 ! Deallocate memory local to this routine628 deallocate(mass_ext_phobic)629 deallocate(ssa_phobic)630 deallocate(g_phobic)631 deallocate(lidar_ratio_phobic)632 if (ao%use_hydrophilic) then633 deallocate(mass_ext_philic)634 deallocate(ssa_philic)635 deallocate(g_philic)636 deallocate(lidar_ratio_philic)637 end if638 639 if (lhook) call dr_hook('radiation_aerosol_optics:setup_general_aerosol_optics',1,hook_handle)640 641 end subroutine setup_general_aerosol_optics_lmdz642 643 335 644 336 !--------------------------------------------------------------------- -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_cloud_generator.F90
r4489 r4669 541 541 use radiation_pdf_sampler, only : pdf_sampler_type 542 542 implicit none 543 #if defined(__GFORTRAN__) || defined(__PGI) || defined(__NEC__)544 #else545 !$omp declare simd(sample_from_pdf_simd) uniform(this) &546 !$omp linear(ref(fsd)) linear(ref(cdf))547 #endif548 543 type(pdf_sampler_type), intent(in) :: this 549 544 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_scheme.F90
r4489 r4669 87 87 & NWEIGHT_PAR, IBAND_PAR, WEIGHT_PAR, & 88 88 & ITYPE_TROP_BG_AER, TROP_BG_AER_MASS_EXT, & 89 & ITYPE_STRAT_BG_AER, STRAT_BG_AER_MASS_EXT 89 & ITYPE_STRAT_BG_AER, STRAT_BG_AER_MASS_EXT, ISolverSpartacus 90 90 ! Commentes : jour, date de la simulation 91 91 !USE YOMRIP0 , ONLY : NINDAT … … 105 105 106 106 USE mod_phys_lmdz_para 107 USE setup_config_from_lmdz, ONLY : driver_config_type 107 108 108 109 IMPLICIT NONE … … 269 270 ! Ratio of cloud overlap decorrelation length for cloud water 270 271 ! inhomogeneities to that for cloud boundaries (typically 0.5) 271 REAL(KIND=JPRB) :: ZDECORR_LEN_RATIO 272 !REAL(KIND=JPRB) :: ZDECORR_LEN_RATIO = 0.5_jprb 273 274 !AI mai 2023 275 ! A mettre dans namelist 276 !real(jprb) :: high_inv_effective_size 277 !real(jprb) :: middle_inv_effective_size 278 !real(jprb) :: low_inv_effective_size 279 280 !real(jprb) :: cloud_inhom_separation_factor 281 !real(jprb) :: cloud_separation_scale_surface 282 !real(jprb) :: cloud_separation_scale_toa 283 !real(jprb) :: cloud_separation_scale_power 272 284 273 285 ! The surface net longwave flux if the surface was a black body, used … … 290 302 291 303 ! AI ATTENTION 292 real(jprb), parameter :: frac_std = 0.75 304 ! A mettre dans namelist 305 !real(jprb), parameter :: frac_std = 0.75 293 306 294 307 ! Name of file names specified on command line … … 301 314 !$OMP THREADPRIVATE(debut_ecrad) 302 315 316 type(driver_config_type) :: driver_config 303 317 ! Import time functions for iseed calculation 304 318 ! AI ATTENTION propre a ifs … … 342 356 ! AI appel radiation_setup 343 357 call SETUP_RADIATION_SCHEME(loutput) 358 ! Read "radiation_driver" namelist into radiation driver config type 359 file_name="namelist_ecrad" 360 call driver_config%read(file_name) 361 362 if (rad_config%i_solver_sw == ISolverSPARTACUS & 363 & .or. rad_config%i_solver_lw == ISolverSPARTACUS) then 364 print*,'Solveur SW: ', rad_config%i_solver_sw 365 print*,'Solveur LW: ', rad_config%i_solver_lw 366 if (driver_config%ok_effective_size) then 367 print*,'low_inv_effective_size = ',driver_config%low_inv_effective_size 368 print*,'middle_inv_effective_size = ',driver_config%middle_inv_effective_size 369 print*,'high_inv_effective_size = ',driver_config%high_inv_effective_size 370 else if (driver_config%ok_separation) then 371 print*,'cloud_separation_scale_surface =',driver_config%cloud_separation_scale_surface 372 print*,'cloud_separation_scale_toa =',driver_config%cloud_separation_scale_toa 373 print*,'cloud_separation_scale_power =',driver_config%cloud_separation_scale_power 374 print*,'cloud_inhom_separation_factor =',driver_config%cloud_inhom_separation_factor 375 endif 376 endif 344 377 345 378 if (lprint_config) then … … 450 483 cloud%fraction(KIDIA:KFDIA,:) = PCLOUD_FRAC(KIDIA:KFDIA,:) 451 484 452 !AI ATTENTION a voir avec JL 453 ! Compute effective radii and convert to metres 454 !CALL LIQUID_EFFECTIVE_RADIUS(KIDIA, KFDIA, KLON, KLEV, & 455 ! & PPRESSURE, PTEMPERATURE, PCLOUD_FRAC, PQ_LIQUID, PQ_RAIN, & 456 ! & PLAND_SEA_MASK, PCCN_LAND, PCCN_SEA, & 457 ! & ZRE_LIQUID_UM) 485 !!! ok AI ATTENTION a voir avec JL 486 ! Compute effective radi and convert to metres 487 ! AI. : on passe directement les champs de LMDZ 458 488 cloud%re_liq(KIDIA:KFDIA,:) = ZRE_LIQUID_UM(KIDIA:KFDIA,:) 459 460 !CALL ICE_EFFECTIVE_RADIUS(KIDIA, KFDIA, KLON, KLEV, &461 ! & PPRESSURE, PTEMPERATURE, PCLOUD_FRAC, PQ_ICE, PQ_SNOW, PGEMU, &462 ! & ZRE_ICE_UM)463 489 cloud%re_ice(KIDIA:KFDIA,:) = ZRE_ICE_UM(KIDIA:KFDIA,:) 464 490 … … 468 494 ! decorrelation lengths for cloud water content inhomogeneities and 469 495 ! cloud boundaries, and set it in the "rad_config" object. 496 ! IFS : 470 497 !CALL CLOUD_OVERLAP_DECORR_LEN(KIDIA, KFDIA, KLON, PGEMU, YRERAD%NDECOLAT, & 471 498 ! & ZDECORR_LEN_KM, PDECORR_LEN_RATIO=ZDECORR_LEN_RATIO) 472 473 ! AI ATTENTION (valeur lue dans namelist) 474 !ZDECORR_LEN_RATIO = 0.5_JPRB 475 !rad_config%cloud_inhom_decorr_scaling = ZDECORR_LEN_RATIO 499 ! AI valeur dans namelist 500 ! rad_config%cloud_inhom_decorr_scaling = ZDECORR_LEN_RATIO 501 476 502 !AI ATTENTION meme valeur que dans offline 477 ZDECORR_LEN_KM = 2000.0_JPRB 503 ! A mettre dans namelist 504 ZDECORR_LEN_KM = driver_config%overlap_decorr_length 478 505 DO JLON = KIDIA,KFDIA 479 506 CALL cloud%set_overlap_param(thermodynamics, & 480 & 481 & 507 & ZDECORR_LEN_KM(JLON), & 508 & istartcol=JLON, iendcol=JLON) 482 509 ENDDO 483 510 511 ! IFS : 484 512 ! Cloud water content fractional standard deviation is configurable 485 513 ! from namelist NAERAD but must be globally constant. Before it was … … 487 515 !CALL cloud%create_fractional_std(KLON, KLEV, YRERAD%RCLOUD_FRAC_STD) 488 516 ! AI ATTENTION frac_std=0.75 meme valeur que dans la version offline 489 CALL cloud%create_fractional_std(KLON, KLEV, frac_std) 490 517 CALL cloud%create_fractional_std(KLON, KLEV, driver_config%frac_std) 518 519 if (rad_config%i_solver_sw == ISolverSPARTACUS & 520 & .or. rad_config%i_solver_lw == ISolverSPARTACUS) then 491 521 ! AI ! Read cloud properties needed by SPARTACUS 522 !AI ATTENTION meme traitement dans le version offline 523 492 524 ! By default mid and high cloud effective size is 10 km 493 525 !CALL cloud%create_inv_cloud_effective_size(KLON,KLEV,1.0_JPRB/10000.0_JPRB) 494 ! But for boundary clouds (eta > 0.8) we set it to 1 km 495 !DO JLEV = 1,KLEV 496 ! DO JLON = KIDIA,KFDIA 497 ! IF (PPRESSURE(JLON,JLEV) > 0.8_JPRB * PPRESSURE_H(JLON,KLEV+1)) THEN 498 ! cloud%inv_cloud_effective_size(JLON,JLEV) = 1.0e-3_JPRB 499 ! ENDIF 500 ! ENDDO 501 !ENDDO 502 !AI ATTENTION meme traitement dans le version offline 503 call cloud%create_inv_cloud_effective_size_eta(KLON, KLEV, & 526 527 ! if (driver_config%low_inv_effective_size >= 0.0_jprb & 528 ! & .or. driver_config%middle_inv_effective_size >= 0.0_jprb & 529 ! & .or. driver_config%high_inv_effective_size >= 0.0_jprb) then 530 if (driver_config%ok_effective_size) then 531 call cloud%create_inv_cloud_effective_size_eta(klon, klev, & 504 532 & thermodynamics%pressure_hl, & 505 & 0.005_JPRB, & 506 & 0.0001_JPRB, & 507 & 0.0001, 0.8_jprb, 0.45_jprb) 533 & driver_config%low_inv_effective_size, & 534 & driver_config%middle_inv_effective_size, & 535 & driver_config%high_inv_effective_size, 0.8_jprb, 0.45_jprb) 536 ! else if (driver_config%cloud_separation_scale_surface > 0.0_jprb & 537 ! .and. driver_config%cloud_separation_scale_toa > 0.0_jprb) then 538 else if (driver_config%ok_separation) then 539 call cloud%param_cloud_effective_separation_eta(klon, klev, & 540 & thermodynamics%pressure_hl, & 541 & driver_config%cloud_separation_scale_surface, & 542 & driver_config%cloud_separation_scale_toa, & 543 & driver_config%cloud_separation_scale_power, & 544 & driver_config%cloud_inhom_separation_factor) 545 endif 546 endif 508 547 509 548 print*,'******** AEROSOLS (allocate + input) **************************************' -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/setup_aerosol_optics_lmdz_m.F90
r4489 r4669 29 29 use netcdf95, only: nf95_open, nf95_inq_grp_full_ncid, nf95_close, & 30 30 nf95_inq_dimid, nf95_inq_varid, nf95_inquire_dimension, & 31 nf95_get_var, nf95_gw_var 32 use netcdf, only: nf90_nowrite 31 nf95_get_var, nf95_gw_var, nf95_nowrite 33 32 34 33 type(aerosol_optics_type), intent(out):: ao … … 44 43 ao%use_hydrophilic = .true. 45 44 ao%use_monochromatic = .true. 46 print*,'file_name= ',file_name 47 call nf95_open(file_name, nf90_nowrite, ncid) 45 call nf95_open(file_name, nf95_nowrite, ncid) 48 46 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic", grpid) 49 47 call nf95_inq_dimid(grpid, "hur", dimid) … … 69 67 call nf95_inq_varid(grpid, "single_scat_alb", varid) 70 68 call nf95_gw_var(grpid, varid, ao%ssa_sw_philic) 71 ao% g_sw_philic = cshift(ao%ssa_sw_philic, 1)69 ao%ssa_sw_philic = cshift(ao%ssa_sw_philic, 1) 72 70 call nf95_inq_varid(grpid, "mass_ext", varid) 73 71 call nf95_gw_var(grpid, varid, ao%mass_ext_sw_philic) 74 ao% g_sw_philic = cshift(ao%mass_ext_sw_philic, 1)72 ao%mass_ext_sw_philic = cshift(ao%mass_ext_sw_philic, 1) 75 73 76 74 ! Hydrophilic/Monochromatic: … … 95 93 call nf95_inq_varid(grpid, "single_scat_alb", varid) 96 94 call nf95_gw_var(grpid, varid, ao%ssa_sw_phobic) 97 ao% g_sw_phobic = cshift(ao%ssa_sw_phobic, 1)95 ao%ssa_sw_phobic = cshift(ao%ssa_sw_phobic, 1) 98 96 call nf95_inq_varid(grpid, "mass_ext", varid) 99 97 call nf95_gw_var(grpid, varid, ao%mass_ext_sw_phobic) 100 ao% g_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1)98 ao%mass_ext_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1) 101 99 102 100 ! Hydrophobic/Monochromatic: -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/fisrtilp.F90
r4380 r4669 20 20 ! flag to include modifications to ensure energy conservation (if flag >0) 21 21 USE add_phys_tend_mod, only : fl_cor_ebil 22 USE lscp_ini_mod, ONLY: iflag_t_glace,t_glace_min, t_glace_max, exposant_glace 23 USE lscp_ini_mod, ONLY: iflag_cloudth_vert, iflag_rain_incloud_vol 24 USE lscp_ini_mod, ONLY: coef_eva, coef_eva_i, ffallv_lsc, ffallv_con 25 USE lscp_ini_mod, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con 26 USE lscp_ini_mod, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf 27 28 22 29 IMPLICIT none 23 30 !====================================================================== … … 47 54 !====================================================================== 48 55 include "YOMCST.h" 49 include "fisrtilp.h"50 include "nuage.h" ! JBM (3/14)51 52 56 ! 53 57 ! Principaux inputs: … … 228 232 ! (Heymsfield & Donner, 1990) 229 233 REAL zzz 230 231 234 include "YOETHF.h" 232 235 include "FCTTRE.h" -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/fonte_neige_mod.F90
r3900 r4669 164 164 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain 165 165 REAL, DIMENSION(klon), INTENT(IN) :: precip_snow 166 167 ! Input/Output variables166 167 ! Input/Output variables 168 168 !**************************************************************************************** 169 169 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ice_sursat_mod.F90
r4260 r4669 308 308 INCLUDE "YOETHF.h" 309 309 INCLUDE "FCTTRE.h" 310 INCLUDE "fisrtilp.h"311 310 INCLUDE "clesphys.h" 312 311 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/icefrac_lsc_mod.F90
r3102 r4669 17 17 18 18 USE print_control_mod, ONLY: lunout, prt_level 19 INCLUDE "nuage.h" 20 21 ! nuage.h contains: 19 USE lscp_ini_mod, ONLY: t_glace_min, t_glace_max, exposant_glace, iflag_t_glace 20 ! lscp_ini contains: 22 21 ! t_glace_min: if T < Tmin, the cloud is only made of water ice 23 22 ! t_glace_max: if T > Tmax, the cloud is only made of liquid water -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/infotrac_phy.F90
r4500 r4669 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/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_ini_mod.F90
r4420 r4669 5 5 ! PARAMETERS for lscp: 6 6 !-------------------- 7 7 8 REAL RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG 9 !$OMP THREADPRIVATE(RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG) 10 8 11 REAL, SAVE :: seuil_neb=0.001 ! cloud fraction threshold: a cloud really exists when exceeded 9 12 !$OMP THREADPRIVATE(seuil_neb) 10 13 11 INTEGER, SAVE :: ni nter=5! number of iterations to calculate autoconversion to precipitation12 !$OMP THREADPRIVATE(ni nter)14 INTEGER, SAVE :: niter_lscp=5 ! number of iterations to calculate autoconversion to precipitation 15 !$OMP THREADPRIVATE(niter_lscp) 13 16 14 17 INTEGER,SAVE :: iflag_evap_prec=1 ! precipitation evaporation flag. 0: nothing, 1: "old way", 15 18 ! 2: Max cloud fraction above to calculate the max of reevaporation 16 ! 4: LTP'method i.e. evaporation in the clear-sky fraction of the mesh only 19 ! >=4: LTP'method i.e. evaporation in the clear-sky fraction of the mesh only 20 ! pay attention that iflag_evap_prec=4 may lead to unrealistic and overestimated 21 ! evaporation. Use 5 instead 17 22 !$OMP THREADPRIVATE(iflag_evap_prec) 18 23 … … 38 43 !$OMP THREADPRIVATE(ok_radocond_snow) 39 44 40 LOGICAL, SAVE :: ok_debug_autoconversion=.true. ! removes a bug in the autoconversion process 41 !$OMP THREADPRIVATE(ok_debug_autoconversion) 42 45 REAL, SAVE :: t_glace_min=258.0 ! lower-bound temperature parameter for cloud phase determination 46 !$OMP THREADPRIVATE(t_glace_min) 47 48 REAL, SAVE :: t_glace_max=273.15 ! upper-bound temperature parameter for cloud phase determination 49 !$OMP THREADPRIVATE(t_glace_max) 50 51 REAL, SAVE :: exposant_glace=1.0 ! parameter for cloud phase determination 52 !$OMP THREADPRIVATE(exposant_glace) 53 54 INTEGER, SAVE :: iflag_vice=0 ! which expression for ice crystall fall velocity 55 !$OMP THREADPRIVATE(iflag_vice) 56 57 INTEGER, SAVE :: iflag_t_glace=0 ! which expression for cloud phase partitioning 58 !$OMP THREADPRIVATE(iflag_t_glace) 59 60 INTEGER, SAVE :: iflag_cloudth_vert=0 ! option for determining cloud fraction and content in convective boundary layers 61 !$OMP THREADPRIVATE(iflag_cloudth_vert) 62 63 INTEGER, SAVE :: iflag_gammasat=0 ! which threshold for homogeneous nucleation below -40oC 64 !$OMP THREADPRIVATE(iflag_gammasat) 65 66 INTEGER, SAVE :: iflag_rain_incloud_vol=0 ! use of volume cloud fraction for rain autoconversion 67 !$OMP THREADPRIVATE(iflag_rain_incloud_vol) 68 69 INTEGER, SAVE :: iflag_bergeron=0 ! bergeron effect for liquid precipitation treatment 70 !$OMP THREADPRIVATE(iflag_bergeron) 71 72 INTEGER, SAVE :: iflag_fisrtilp_qsat=0 ! qsat adjustment (iterative) during autoconversion 73 !$OMP THREADPRIVATE(iflag_fisrtilp_qsat) 74 75 INTEGER, SAVE :: iflag_pdf=0 ! type of subgrid scale qtot pdf 76 !$OMP THREADPRIVATE(iflag_pdf) 77 78 INTEGER, SAVE :: iflag_autoconversion=0 ! autoconversion option 79 !$OMP THREADPRIVATE(iflag_autoconversion) 80 81 LOGICAL, SAVE :: reevap_ice=.false. ! no liquid precip for T< threshold 82 !$OMP THREADPRIVATE(reevap_ice) 83 84 REAL, SAVE :: cld_lc_lsc=2.6e-4 ! liquid autoconversion coefficient, stratiform rain 85 !$OMP THREADPRIVATE(cld_lc_lsc) 86 87 REAL, SAVE :: cld_lc_con=2.6e-4 ! liquid autoconversion coefficient, convective rain 88 !$OMP THREADPRIVATE(cld_lc_con) 89 90 REAL, SAVE :: cld_tau_lsc=3600. ! liquid autoconversion timescale, stratiform rain 91 !$OMP THREADPRIVATE(cld_tau_lsc) 92 93 REAL, SAVE :: cld_tau_con=3600. ! liquid autoconversion timescale, convective rain 94 !$OMP THREADPRIVATE(cld_tau_con) 95 96 REAL, SAVE :: cld_expo_lsc=2. ! liquid autoconversion threshold exponent, stratiform rain 97 !$OMP THREADPRIVATE(cld_expo_lsc) 98 99 REAL, SAVE :: cld_expo_con=2. ! liquid autoconversion threshold exponent, convective rain 100 !$OMP THREADPRIVATE(cld_expo_con) 101 102 REAL, SAVE :: ffallv_lsc=1. ! tuning coefficient crystal fall velocity, stratiform 103 !$OMP THREADPRIVATE(ffallv_lsc) 104 105 REAL, SAVE :: ffallv_con=1. ! tuning coefficient crystal fall velocity, convective 106 !$OMP THREADPRIVATE(ffallv_con) 107 108 REAL, SAVE :: coef_eva=2e-5 ! tuning coefficient liquid precip evaporation 109 !$OMP THREADPRIVATE(coef_eva) 110 111 REAL, SAVE :: coef_eva_i ! tuning coefficient ice precip sublimation 112 !$OMP THREADPRIVATE(coef_eva_i) 113 114 REAL cice_velo ! factor in the ice fall velocity formulation 115 PARAMETER (cice_velo=1.645) 116 117 REAL dice_velo ! exponent in the ice fall velocity formulation 118 PARAMETER (dice_velo=0.16) 119 120 REAL, SAVE :: dist_liq=300. ! typical deph of cloud-top liquid layer in mpcs 121 !$OMP THREADPRIVATE(dist_liq) 122 123 REAL, SAVE :: tresh_cl=0.0 ! cloud fraction threshold for cloud top search 124 !$OMP THREADPRIVATE(tresh_cl) 43 125 44 126 CONTAINS 45 127 46 SUBROUTINE lscp_ini(dtime,ok_ice_sursat) 128 SUBROUTINE lscp_ini(dtime,ok_ice_sursat, RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in, & 129 RVTMP2_in, RTT_in,RD_in,RG_in) 47 130 48 131 … … 54 137 LOGICAL, INTENT(IN) :: ok_ice_sursat 55 138 56 CALL getin_p('ninter',ninter) 139 REAL, INTENT(IN) :: RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in 140 REAL, INTENT(IN) :: RVTMP2_in, RTT_in, RD_in, RG_in 141 character (len=20) :: modname='lscp_ini_mod' 142 character (len=80) :: abort_message 143 144 145 RG=RG_in 146 RD=RD_in 147 RCPD=RCPD_in 148 RLVTT=RLVTT_in 149 RLSTT=RLSTT_in 150 RLMLT=RLMLT_in 151 RTT=RTT_in 152 RG=RG_in 153 RVTMP2=RVTMP2_in 154 155 156 157 CALL getin_p('niter_lscp',niter_lscp) 57 158 CALL getin_p('iflag_evap_prec',iflag_evap_prec) 58 159 CALL getin_p('seuil_neb',seuil_neb) … … 60 161 CALL getin_p('iflag_mpc_bl',iflag_mpc_bl) 61 162 CALL getin_p('ok_radocond_snow',ok_radocond_snow) 62 CALL getin_p('ok_debug_autoconversion',ok_debug_autoconversion) 63 WRITE(lunout,*) 'lscp, ninter:', ninter 163 CALL getin_p('t_glace_max',t_glace_max) 164 CALL getin_p('t_glace_min',t_glace_min) 165 CALL getin_p('exposant_glace',exposant_glace) 166 CALL getin_p('iflag_vice',iflag_vice) 167 CALL getin_p('iflag_t_glace',iflag_t_glace) 168 CALL getin_p('iflag_cloudth_vert',iflag_cloudth_vert) 169 CALL getin_p('iflag_gammasat',iflag_gammasat) 170 CALL getin_p('iflag_rain_incloud_vol',iflag_rain_incloud_vol) 171 CALL getin_p('iflag_bergeron',iflag_bergeron) 172 CALL getin_p('iflag_fisrtilp_qsat',iflag_fisrtilp_qsat) 173 CALL getin_p('iflag_pdf',iflag_pdf) 174 CALL getin_p('reevap_ice',reevap_ice) 175 CALL getin_p('cld_lc_lsc',cld_lc_lsc) 176 CALL getin_p('cld_lc_con',cld_lc_con) 177 CALL getin_p('cld_tau_lsc',cld_tau_lsc) 178 CALL getin_p('cld_tau_con',cld_tau_con) 179 CALL getin_p('cld_expo_lsc',cld_expo_lsc) 180 CALL getin_p('cld_expo_con',cld_expo_con) 181 CALL getin_p('ffallv_lsc',ffallv_lsc) 182 CALL getin_p('ffallv_lsc',ffallv_con) 183 CALL getin_p('coef_eva',coef_eva) 184 coef_eva_i=coef_eva 185 CALL getin_p('coef_eva_i',coef_eva_i) 186 CALL getin_p('iflag_autoconversion',iflag_autoconversion) 187 CALL getin_p('dist_liq',dist_liq) 188 CALL getin_p('tresh_cl',tresh_cl) 189 190 191 192 193 WRITE(lunout,*) 'lscp, niter_lscp:', niter_lscp 64 194 WRITE(lunout,*) 'lscp, iflag_evap_prec:', iflag_evap_prec 65 195 WRITE(lunout,*) 'lscp, seuil_neb:', seuil_neb … … 67 197 WRITE(lunout,*) 'lscp, iflag_mpc_bl:', iflag_mpc_bl 68 198 WRITE(lunout,*) 'lscp, ok_radocond_snow:', ok_radocond_snow 69 WRITE(lunout,*) 'lscp, ok_debug_autoconversion:', ok_debug_autoconversion 199 WRITE(lunout,*) 'lscp, t_glace_max:', t_glace_max 200 WRITE(lunout,*) 'lscp, t_glace_min:', t_glace_min 201 WRITE(lunout,*) 'lscp, exposant_glace:', exposant_glace 202 WRITE(lunout,*) 'lscp, iflag_vice:', iflag_vice 203 WRITE(lunout,*) 'lscp, iflag_t_glace:', iflag_t_glace 204 WRITE(lunout,*) 'lscp, iflag_cloudth_vert:', iflag_cloudth_vert 205 WRITE(lunout,*) 'lscp, iflag_gammasat:', iflag_gammasat 206 WRITE(lunout,*) 'lscp, iflag_rain_incloud_vol:', iflag_rain_incloud_vol 207 WRITE(lunout,*) 'lscp, iflag_bergeron:', iflag_bergeron 208 WRITE(lunout,*) 'lscp, iflag_fisrtilp_qsat:', iflag_fisrtilp_qsat 209 WRITE(lunout,*) 'lscp, iflag_pdf', iflag_pdf 210 WRITE(lunout,*) 'lscp, reevap_ice', reevap_ice 211 WRITE(lunout,*) 'lscp, cld_lc_lsc', cld_lc_lsc 212 WRITE(lunout,*) 'lscp, cld_lc_con', cld_lc_con 213 WRITE(lunout,*) 'lscp, cld_tau_lsc', cld_tau_lsc 214 WRITE(lunout,*) 'lscp, cld_tau_con', cld_tau_con 215 WRITE(lunout,*) 'lscp, cld_expo_lsc', cld_expo_lsc 216 WRITE(lunout,*) 'lscp, cld_expo_con', cld_expo_con 217 WRITE(lunout,*) 'lscp, ffallv_lsc', ffallv_lsc 218 WRITE(lunout,*) 'lscp, ffallv_con', ffallv_con 219 WRITE(lunout,*) 'lscp, coef_eva', coef_eva 220 WRITE(lunout,*) 'lscp, coef_eva_i', coef_eva_i 221 WRITE(lunout,*) 'lscp, iflag_autoconversion', iflag_autoconversion 222 WRITE(lunout,*) 'lscp, dist_liq', dist_liq 223 WRITE(lunout,*) 'lscp, tresh_cl', tresh_cl 224 225 226 227 70 228 71 229 ! check for precipitation sub-time steps 72 IF (ABS(dtime/REAL(ni nter)-360.0).GT.0.001) THEN230 IF (ABS(dtime/REAL(niter_lscp)-360.0).GT.0.001) THEN 73 231 WRITE(lunout,*) 'lscp: it is not expected, see Z.X.Li', dtime 74 232 WRITE(lunout,*) 'I would prefer a 6 min sub-timestep' 233 ENDIF 234 235 ! check consistency between numerical resolution of autoconversion 236 ! and other options 237 238 IF (iflag_autoconversion .EQ. 2) THEN 239 IF ((iflag_vice .NE. 0) .OR. (niter_lscp .GT. 1)) THEN 240 abort_message = 'in lscp, iflag_autoconversion=2 requires iflag_vice=0 and niter_lscp=1' 241 CALL abort_physic (modname,abort_message,1) 242 ENDIF 75 243 ENDIF 76 244 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_mod.F90
r4425 r4669 9 9 paprs,pplay,t,q,ptconv,ratqs, & 10 10 d_t, d_q, d_ql, d_qi, rneb, rneblsvol, rneb_seri, & 11 radocond, radicefrac, rain, snow, & 11 pfraclr,pfracld, & 12 radocond, radicefrac, rain, snow, & 12 13 frac_impa, frac_nucl, beta, & 13 14 prfl, psfl, rhcl, zqta, fraca, & 14 15 ztv, zpspsk, ztla, zthl, iflag_cld_th, & 15 16 iflag_ice_thermo, ok_ice_sursat, qsatl, qsats, & 17 distcltop, & 16 18 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 17 19 Tcontr, qcontr, qcontr2, fcontrN, fcontrP) … … 89 91 USE print_control_mod, ONLY: prt_level, lunout 90 92 USE cloudth_mod, ONLY : cloudth, cloudth_v3, cloudth_v6, cloudth_mpc 91 USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat, fallice_velocity 93 USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat 94 USE lscp_tools_mod, ONLY : fallice_velocity, distance_to_cloud_top 92 95 USE ice_sursat_mod, ONLY : ice_sursat 93 96 94 USE lscp_ini_mod, ONLY : seuil_neb, ninter, iflag_evap_prec, t_coup, DDT0, ztfondue, rain_int_min 95 USE lscp_ini_mod, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, ok_debug_autoconversion 96 97 USE lscp_ini_mod, ONLY : seuil_neb, niter_lscp, iflag_evap_prec, t_coup, DDT0, ztfondue, rain_int_min 98 USE lscp_ini_mod, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, cld_expo_con, cld_expo_lsc 99 USE lscp_ini_mod, ONLY : iflag_cloudth_vert, iflag_rain_incloud_vol, iflag_t_glace, t_glace_min 100 USE lscp_ini_mod, ONLY : coef_eva, coef_eva_i,cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con 101 USE lscp_ini_mod, ONLY : iflag_bergeron, iflag_fisrtilp_qsat, iflag_vice, cice_velo, dice_velo 102 USE lscp_ini_mod, ONLY : iflag_autoconversion, ffallv_con, ffallv_lsc 103 USE lscp_ini_mod, ONLY : RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG 97 104 98 105 IMPLICIT NONE … … 101 108 ! VARIABLES DECLARATION 102 109 !=============================================================================== 103 104 include "YOMCST.h"105 include "YOETHF.h"106 include "fisrtilp.h"107 include "nuage.h"108 110 109 111 ! INPUT VARIABLES: … … 125 127 LOGICAL, DIMENSION(klon,klev), INTENT(IN) :: ptconv ! grid points where deep convection scheme is active 126 128 127 128 129 !Inputs associated with thermal plumes 129 130 … … 133 134 REAL, DIMENSION(klon,klev), INTENT(IN) :: zpspsk ! exner potential (p/100000)**(R/cp) 134 135 REAL, DIMENSION(klon,klev), INTENT(IN) :: ztla ! liquid temperature within thermals [K] 135 REAL, DIMENSION(klon,klev), INTENT(INOUT) :: zthl ! liquid potential temperature [K]136 136 137 137 ! INPUT/OUTPUT variables 138 138 !------------------------ 139 139 140 REAL, DIMENSION(klon,klev), INTENT(INOUT) :: zthl ! liquid potential temperature [K] 140 141 REAL, DIMENSION(klon,klev), INTENT(INOUT):: ratqs ! function of pressure that sets the large-scale 141 142 REAL, DIMENSION(klon,klev), INTENT(INOUT):: beta ! conversion rate of condensed water … … 154 155 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rneb ! cloud fraction [-] 155 156 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rneblsvol ! cloud fraction per unit volume [-] 157 REAL, DIMENSION(klon,klev), INTENT(OUT) :: pfraclr ! precip fraction clear-sky part [-] 158 REAL, DIMENSION(klon,klev), INTENT(OUT) :: pfracld ! precip fraction cloudy part [-] 156 159 REAL, DIMENSION(klon,klev), INTENT(OUT) :: radocond ! condensed water used in the radiation scheme [kg/kg] 157 160 REAL, DIMENSION(klon,klev), INTENT(OUT) :: radicefrac ! ice fraction of condensed water for radiation scheme … … 163 166 REAL, DIMENSION(klon,klev+1), INTENT(OUT) :: prfl ! large-scale rainfall flux in the column [kg/s/m2] 164 167 REAL, DIMENSION(klon,klev+1), INTENT(OUT) :: psfl ! large-scale snowfall flux in the column [kg/s/m2] 168 REAL, DIMENSION(klon,klev), INTENT(OUT) :: distcltop ! distance to cloud top [m] 165 169 166 170 ! fraction of aerosol scavenging through impaction and nucleation (for on-line) … … 189 193 190 194 REAL qsl(klon), qsi(klon) 191 REAL zct, zcl 195 REAL zct, zcl,zexpo 192 196 REAL ctot(klon,klev) 193 197 REAL ctot_vol(klon,klev) … … 231 235 REAL tot_zneb(klon), tot_znebn(klon), d_tot_zneb(klon) 232 236 REAL d_znebprecip_clr_cld(klon), d_znebprecip_cld_clr(klon) 233 REAL velo(klon,klev), vr 237 REAL velo(klon,klev), vr, ffallv 234 238 REAL qlmpc, qimpc, rnebmpc 235 239 REAL radocondi(klon,klev), radocondl(klon,klev) 240 REAL effective_zneb 241 REAL distcltop1D(klon) 242 236 243 237 244 INTEGER i, k, n, kk … … 255 262 256 263 ! Few initial checks 257 258 IF (iflag_t_glace.EQ.0) THEN259 abort_message = 'lscp cannot be used if iflag_t_glace=0'260 CALL abort_physic(modname,abort_message,1)261 ENDIF262 263 IF (.NOT.((iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3))) THEN264 abort_message = 'lscp cannot be used without ice thermodynamics'265 CALL abort_physic(modname,abort_message,1)266 ENDIF267 264 268 265 IF (iflag_fisrtilp_qsat .LT. 0) THEN … … 297 294 d_qi(:,:) = 0.0 298 295 rneb(:,:) = 0.0 296 pfraclr(:,:)=0.0 297 pfracld(:,:)=0.0 299 298 radocond(:,:) = 0.0 300 299 radicefrac(:,:) = 0.0 … … 320 319 d_tot_zneb(:) = 0.0 321 320 qzero(:) = 0.0 321 distcltop1D(:)=0.0 322 322 323 323 !--ice supersaturation … … 415 415 IF (zrfl(i)+zifl(i).GT.0.) THEN 416 416 417 ! LudoTP: we only account for precipitation evaporation in the clear-sky (iflag_evap_prec =4).417 ! LudoTP: we only account for precipitation evaporation in the clear-sky (iflag_evap_prec>=4). 418 418 ! c_iso: likely important to distinguish cs from neb isotope precipitation 419 419 420 IF (iflag_evap_prec. EQ.4) THEN420 IF (iflag_evap_prec.GE.4) THEN 421 421 zrfl(i) = zrflclr(i) 422 422 zifl(i) = ziflclr(i) … … 429 429 ENDIF 430 430 431 IF (iflag_evap_prec.EQ.4) THEN 431 IF (iflag_evap_prec.GT.4) THEN 432 ! Max evaporation not to saturate the clear sky precip fraction 433 ! i.e. the fraction where evaporation occurs 434 zqev0 = MAX(0.0, (zqs(i)-zq(i))*znebprecipclr(i)) 435 ELSEIF (iflag_evap_prec .EQ. 4) THEN 432 436 ! Max evaporation not to saturate the whole mesh 437 ! Pay attention -> lead to unrealistic and excessive evaporation 433 438 zqev0 = MAX(0.0, zqs(i)-zq(i)) 434 439 ELSE … … 440 445 ! dP/dz=beta*(1-q/qsat)*sqrt(P) 441 446 ! formula from Sundquist 1988, Klemp & Wilhemson 1978 442 ! LTP: evaporation only in the clear sky part (iflag_evap_prec =4)447 ! LTP: evaporation only in the clear sky part (iflag_evap_prec>=4) 443 448 444 449 IF (iflag_evap_prec.EQ.3) THEN … … 446 451 *SQRT(zrfl(i)/max(1.e-4,znebprecip(i))) & 447 452 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 448 ELSE IF (iflag_evap_prec. EQ.4) THEN453 ELSE IF (iflag_evap_prec.GE.4) THEN 449 454 zqevt = znebprecipclr(i)*coef_eva*(1.0-zq(i)/qsl(i)) & 450 455 *SQRT(zrfl(i)/max(1.e-8,znebprecipclr(i))) & … … 463 468 *SQRT(zifl(i)/max(1.e-4,znebprecip(i))) & 464 469 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 465 ELSE IF (iflag_evap_prec. EQ.4) THEN470 ELSE IF (iflag_evap_prec.GE.4) THEN 466 471 zqevti = znebprecipclr(i)*coef_eva_i*(1.0-zq(i)/qsi(i)) & 467 472 *SQRT(zifl(i)/max(1.e-8,znebprecipclr(i))) & … … 518 523 519 524 520 IF (iflag_evap_prec. EQ.4) THEN525 IF (iflag_evap_prec.GE.4) THEN 521 526 zrflclr(i) = zrfl(i) 522 527 ziflclr(i) = zifl(i) … … 536 541 537 542 ! update of rainfall and snowfall due to melting 538 IF (iflag_evap_prec. EQ.4) THEN543 IF (iflag_evap_prec.GE.4) THEN 539 544 zrflclr(i)=zrflclr(i)+zmelt*ziflclr(i) 540 545 zrflcld(i)=zrflcld(i)+zmelt*ziflcld(i) … … 721 726 ! saturation may occur at a humidity different from qsat (gamma qsat), so gamma correction for dqs 722 727 zdqs(:) = gammasat(:)*zdqs(:)+zqs(:)*dgammasatdt(:) 723 CALL icefrac_lscp(klon, zt(:),pplay(:,k)/paprs(:,1),zfice(:),dzfice(:)) 728 ! cloud phase determination 729 IF (iflag_t_glace.GE.4) THEN 730 ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top 731 CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D) 732 ENDIF 733 CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, distcltop1D(:),zfice(:),dzfice(:)) 724 734 725 735 DO i=1,klon !todoan : check if loop in i is needed … … 809 819 ! zcond: mean condensed water in the mesh 810 820 ! zqn : mean water vapor in the mesh 821 ! zfice: ice fraction in clouds 811 822 ! zt : temperature 812 823 ! rhcl : clear-sky relative humidity 813 824 ! ---------------------------------------------------------------- 814 825 826 827 ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top 828 IF (iflag_t_glace.GE.4) THEN 829 CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D) 830 distcltop(:,k)=distcltop1D(:) 831 ENDIF 832 833 ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs) 834 CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,distcltop1D(:),zfice(:), dzfice(:)) 835 836 815 837 ! Water vapor update, Phase determination and subsequent latent heat exchange 816 817 ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs)818 CALL icefrac_lscp(klon,zt(:),pplay(:,k)/paprs(:,1),zfice(:), dzfice(:))819 820 838 DO i=1, klon 821 822 839 823 840 IF (mpc_bl_points(i,k) .GT. 0) THEN … … 873 890 874 891 ! LTP: 875 IF (iflag_evap_prec ==4) THEN892 IF (iflag_evap_prec .GE. 4) THEN 876 893 877 894 !Partitionning between precipitation coming from clouds and that coming from CS … … 919 936 ENDIF 920 937 938 939 ! Autoconversion 940 ! ------------------------------------------------------------------------------- 941 942 921 943 ! Initialisation of zoliq and radocond variables 922 944 … … 930 952 iwc(i) = 0. 931 953 zneb(i) = MAX(rneb(i,k),seuil_neb) 932 radocond(i,k) = zoliq(i)/REAL(ni nter+1)954 radocond(i,k) = zoliq(i)/REAL(niter_lscp+1) 933 955 radicefrac(i,k) = zfice(i) 934 radocondi(i,k)=zoliq(i)*zfice(i)/REAL(ni nter+1)935 radocondl(i,k)=zoliq(i)*(1.-zfice(i))/REAL(ni nter+1)956 radocondi(i,k)=zoliq(i)*zfice(i)/REAL(niter_lscp+1) 957 radocondl(i,k)=zoliq(i)*(1.-zfice(i))/REAL(niter_lscp+1) 936 958 ENDDO 937 959 938 ! Autoconversion 939 ! ------------------------------------------------------------------------------- 940 941 DO n = 1, ninter 960 961 DO n = 1, niter_lscp 942 962 943 963 DO i=1,klon … … 965 985 ELSE 966 986 967 IF (ok_debug_autoconversion) THEN ! if condition to be removed after test phase968 969 ! water quantity to remove: zchau (Sundqvist, 1978)970 ! same thing for the ice: zfroi (Zender & Kiehl, 1997)971 987 IF (ptconv(i,k)) THEN ! if convective point 972 988 zcl=cld_lc_con 973 989 zct=1./cld_tau_con 974 zfroi = dtime/REAL(ninter)/zdz(i)*zoliqi(i)*velo(i,k) 990 zexpo=cld_expo_con 991 ffallv=ffallv_con 975 992 ELSE 976 993 zcl=cld_lc_lsc 977 994 zct=1./cld_tau_lsc 978 z froi = dtime/REAL(ninter)/zdz(i)*zoliqi(i) & ! dqice/dt=1/rho*d(rho*wice*qice)/dz979 *velo(i,k)995 zexpo=cld_expo_lsc 996 ffallv=ffallv_lsc 980 997 ENDIF 998 981 999 982 1000 ! if vertical heterogeneity is taken into account, we use … … 985 1003 ! reduces the in-cloud water). 986 1004 1005 ! Liquid water quantity to remove: zchau (Sundqvist, 1978) 1006 ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2) 1007 !......................................................... 987 1008 IF ((iflag_cloudth_vert.GE.3).AND.(iflag_rain_incloud_vol.EQ.1)) THEN 988 zchau = zct *dtime/REAL(ninter) * zoliql(i) &989 *(1.0-EXP(-(zoliql(i)/ctot_vol(i,k)/zcl)**2))990 ELSE991 zchau = zct *dtime/REAL(ninter) * zoliql(i) &992 *(1.0-EXP(-(zoliql(i)/zneb(i)/zcl)**2)) ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2)993 ENDIF994 995 ELSE ! with old bug in autoconversion996 997 ! water quantity to remove: zchau (Sundqvist, 1978)998 ! same thing for the ice: zfroi (Zender & Kiehl, 1997)999 IF (ptconv(i,k)) THEN ! if convective point1000 zcl=cld_lc_con1001 zct=1./cld_tau_con1002 zfroi = dtime/REAL(ninter)/zdz(i)*zoliq(i)*velo(i,k)*zfice(i)1003 ELSE1004 zcl=cld_lc_lsc1005 zct=1./cld_tau_lsc1006 zfroi = dtime/REAL(ninter)/zdz(i)*zoliq(i) & ! dqice/dt=1/rho*d(rho*wice*qice)/dz1007 *velo(i,k) * zfice(i)1008 ENDIF1009 1009 1010 1010 ! if vertical heterogeneity is taken into account, we use … … 1012 1012 ! surface fraction (which is larger and artificially 1013 1013 ! reduces the in-cloud water). 1014 1015 1016 IF ((iflag_cloudth_vert.GE.3).AND.(iflag_rain_incloud_vol.EQ.1)) THEN 1017 zchau = zct *dtime/REAL(ninter) * zoliq(i) & 1018 *(1.0-EXP(-(zoliq(i)/ctot_vol(i,k)/zcl)**2)) *(1.-zfice(i)) 1014 effective_zneb=ctot_vol(i,k) 1019 1015 ELSE 1020 zchau = zct *dtime/REAL(ninter) * zoliq(i) & 1021 *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl)**2)) *(1.-zfice(i)) ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2) 1016 effective_zneb=zneb(i) 1017 ENDIF 1018 1019 1020 IF (iflag_autoconversion .EQ. 2) THEN 1021 ! two-steps resolution with niter_lscp=1 sufficient 1022 ! we first treat the second term (with exponential) in an explicit way 1023 ! and then treat the first term (-q/tau) in an exact way 1024 zchau=zoliql(i)*(1.-exp(-dtime/REAL(niter_lscp)*zct & 1025 *(1.-exp(-(zoliql(i)/effective_zneb/zcl)**zexpo)))) 1026 ELSE 1027 ! old explicit resolution with subtimesteps 1028 zchau = zct*dtime/REAL(niter_lscp)*zoliql(i) & 1029 *(1.0-EXP(-(zoliql(i)/effective_zneb/zcl)**zexpo)) 1022 1030 ENDIF 1023 1031 1024 ENDIF ! ok_debug_autoconversion 1032 1033 ! Ice water quantity to remove (Zender & Kiehl, 1997) 1034 ! dqice/dt=1/rho*d(rho*wice*qice)/dz 1035 !.................................... 1036 IF (iflag_autoconversion .EQ. 2) THEN 1037 ! exact resolution, niter_lscp=1 is sufficient but works only 1038 ! with iflag_vice=0 1039 IF (zoliqi(i) .GT. 0.) THEN 1040 zfroi=(zoliqi(i)-((zoliqi(i)**(-dice_velo)) & 1041 +dice_velo*dtime/REAL(niter_lscp)*cice_velo/zdz(i)*ffallv)**(-1./dice_velo)) 1042 ELSE 1043 zfroi=0. 1044 ENDIF 1045 ELSE 1046 ! old explicit resolution with subtimesteps 1047 zfroi = dtime/REAL(niter_lscp)/zdz(i)*zoliqi(i)*velo(i,k) 1048 ENDIF 1025 1049 1026 1050 zrain = MIN(MAX(zchau,0.0),zoliql(i)) … … 1030 1054 ENDIF 1031 1055 1032 zoliql(i) = MAX(zoliq(i)*(1.-zfice(i))-1.*zrain , 0.0) 1033 zoliqi(i) = MAX(zoliq(i)*zfice(i)-1.*zsnow , 0.0) 1034 zoliq(i) = MAX(zoliq(i)-zprecip , 0.0) 1056 IF (iflag_autoconversion .GE. 1) THEN 1057 ! debugged version with phase conservation through the autoconversion process 1058 zoliql(i) = MAX(zoliql(i)-1.*zrain , 0.0) 1059 zoliqi(i) = MAX(zoliqi(i)-1.*zsnow , 0.0) 1060 zoliq(i) = MAX(zoliq(i)-zprecip , 0.0) 1061 ELSE 1062 ! bugged version with phase resetting 1063 zoliql(i) = MAX(zoliq(i)*(1.-zfice(i))-1.*zrain , 0.0) 1064 zoliqi(i) = MAX(zoliq(i)*zfice(i)-1.*zsnow , 0.0) 1065 zoliq(i) = MAX(zoliq(i)-zprecip , 0.0) 1066 ENDIF 1035 1067 1036 1068 ! c_iso: call isotope_conversion (for readibility) or duplicate 1037 1069 1038 radocond(i,k) = radocond(i,k) + zoliq(i)/REAL(ni nter+1)1039 radocondl(i,k) = radocondl(i,k) + zoliql(i)/REAL(ni nter+1)1040 radocondi(i,k) = radocondi(i,k) + zoliqi(i)/REAL(ni nter+1)1070 radocond(i,k) = radocond(i,k) + zoliq(i)/REAL(niter_lscp+1) 1071 radocondl(i,k) = radocondl(i,k) + zoliql(i)/REAL(niter_lscp+1) 1072 radocondi(i,k) = radocondi(i,k) + zoliqi(i)/REAL(niter_lscp+1) 1041 1073 1042 1074 ENDIF ! rneb >0 … … 1050 1082 DO i = 1, klon 1051 1083 1052 IF (iflag_evap_prec. EQ.4) THEN1084 IF (iflag_evap_prec.GE.4) THEN 1053 1085 ziflprev(i)=ziflcld(i) 1054 1086 ELSE … … 1092 1124 ! c_iso : mv here condensation of isotopes + redispatchage en precip 1093 1125 1094 IF (iflag_evap_prec. EQ.4) THEN1126 IF (iflag_evap_prec.GE.4) THEN 1095 1127 zrflcld(i) = zrflcld(i)+zqprecl(i) & 1096 1128 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) … … 1113 1145 1114 1146 ! LTP: limit of surface cloud fraction covered by precipitation when the local intensity of the flux is below rain_int_min 1115 ! if iflag_evap_pre =41116 IF (iflag_evap_prec. EQ.4) THEN1147 ! if iflag_evap_prec>=4 1148 IF (iflag_evap_prec.GE.4) THEN 1117 1149 1118 1150 DO i=1,klon … … 1134 1166 ENDDO 1135 1167 1168 1136 1169 ENDIF 1137 1170 … … 1141 1174 ! Outputs: 1142 1175 ! Precipitation fluxes at layer interfaces 1143 ! and temperature and water species tendencies 1176 ! + precipitation fractions + 1177 ! temperature and water species tendencies 1144 1178 DO i = 1, klon 1145 1179 psfl(i,k)=zifl(i) 1146 1180 prfl(i,k)=zrfl(i) 1181 pfraclr(i,k)=znebprecipclr(i) 1182 pfracld(i,k)=znebprecipcld(i) 1147 1183 d_ql(i,k) = (1-zfice(i))*zoliq(i) 1148 1184 d_qi(i,k) = zfice(i)*zoliq(i) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_tools_mod.F90
r4072 r4669 16 16 ! 3212–3234. https://doi.org/10.1029/2019MS001642 17 17 18 18 use lscp_ini_mod, only: iflag_vice, ffallv_con, ffallv_lsc 19 use lscp_ini_mod, only: cice_velo, dice_velo 20 19 21 IMPLICIT NONE 20 21 INCLUDE "nuage.h"22 INCLUDE "fisrtilp.h"23 22 24 23 INTEGER, INTENT(IN) :: klon … … 33 32 34 33 INTEGER i 35 REAL logvm,iwcg,tempc,phpa, cvel,dvel,fallv_tun34 REAL logvm,iwcg,tempc,phpa,fallv_tun 36 35 REAL m2ice, m2snow, vmice, vmsnow 37 36 REAL aice, bice, asnow, bsnow … … 62 61 63 62 velo(i)=fallv_tun*velo(i)/100.0 ! from cm/s to m/s 64 dvel=0.265 cvel=fallv_tun*65.0*(rho(i)**0.2)*(150./phpa)**0.1566 63 67 64 ELSE IF (iflag_vice .EQ. 2) THEN … … 94 91 vmsnow=vmsnow*((1000./phpa)**0.35) 95 92 velo(i)=fallv_tun*min(vmsnow,vmice)/100. ! to m/s 96 dvel=0.297 cvel=velo(i)/((iwcg/1000.*rho(i))**dvel)98 93 99 94 ELSE 100 95 ! By default, fallspeed velocity of ice crystals according to Heymsfield & Donner 1990 101 velo(i) = fallv_tun*3.29/2.0*((iwcg/1000.)**0.16) 102 dvel=0.16 103 cvel=fallv_tun*3.29/2.0*(rho(i)**0.16) 96 velo(i) = fallv_tun*cice_velo*((iwcg/1000.)**dice_velo) 104 97 ENDIF 105 98 ENDDO … … 109 102 110 103 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 111 SUBROUTINE ICEFRAC_LSCP(klon, temp, sig, icefrac, dicefracdT)104 SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, distcltop, icefrac, dicefracdT) 112 105 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 113 106 … … 120 113 121 114 USE print_control_mod, ONLY: lunout, prt_level 115 USE lscp_ini_mod, ONLY: t_glace_min, t_glace_max, exposant_glace, iflag_t_glace 116 USE lscp_ini_mod, ONLY : RTT, dist_liq 122 117 123 118 IMPLICIT NONE 124 119 125 126 INCLUDE "YOMCST.h"127 INCLUDE "nuage.h"128 INCLUDE "clesphys.h"129 130 131 ! nuage.h contains:132 ! t_glace_min: if T < Tmin, the cloud is only made of water ice133 ! t_glace_max: if T > Tmax, the cloud is only made of liquid water134 ! exposant_glace: controls the sharpness of the transition135 120 136 121 INTEGER, INTENT(IN) :: klon ! number of horizontal grid points 137 122 REAL, INTENT(IN), DIMENSION(klon) :: temp ! temperature 138 REAL, INTENT(IN), DIMENSION(klon) :: sig 123 REAL, INTENT(IN), DIMENSION(klon) :: distcltop ! distance to cloud top 124 INTEGER, INTENT(IN) :: iflag_ice_thermo 139 125 REAL, INTENT(OUT), DIMENSION(klon) :: icefrac 140 126 REAL, INTENT(OUT), DIMENSION(klon) :: dicefracdT … … 142 128 143 129 INTEGER i 144 REAL sig0,www,tmin_tmp,liqfrac_tmp130 REAL liqfrac_tmp, dicefrac_tmp 145 131 REAL Dv, denomdep,beta,qsi,dqsidt 146 INTEGER exposant_glace_old147 REAL t_glace_min_old148 132 LOGICAL ice_thermo 149 133 150 sig0=0.8 151 t_glace_min_old = RTT - 15.0 152 ice_thermo = (iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3) 153 IF (ice_thermo) THEN 154 exposant_glace_old = 2 155 ELSE 156 exposant_glace_old = 6 134 CHARACTER (len = 20) :: modname = 'lscp_tools' 135 CHARACTER (len = 80) :: abort_message 136 137 IF ((iflag_t_glace.LT.2) .OR. (iflag_t_glace.GT.6)) THEN 138 abort_message = 'lscp cannot be used if iflag_t_glace<2 or >6' 139 CALL abort_physic(modname,abort_message,1) 157 140 ENDIF 158 141 159 160 ! calculation of icefrac and dicefrac/dT 142 IF (.NOT.((iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3))) THEN 143 abort_message = 'lscp cannot be used without ice thermodynamics' 144 CALL abort_physic(modname,abort_message,1) 145 ENDIF 146 161 147 162 148 DO i=1,klon 163 164 IF (iflag_t_glace.EQ.1) THEN 165 ! Transition to ice close to surface for T<Tmax 166 ! w=1 at the surface and 0 for sig < sig0 167 www=(max(sig(i)-sig0,0.))/(1.-sig0) 168 ELSEIF (iflag_t_glace.GE.2) THEN 169 ! No convertion to ice close to surface 170 www = 0. 171 ENDIF 172 173 tmin_tmp=www*t_glace_max+(1.-www)*t_glace_min 174 liqfrac_tmp= (temp(i)-tmin_tmp) / (t_glace_max-tmin_tmp) 175 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 176 177 IF (iflag_t_glace.GE.3) THEN 178 icefrac(i) = 1.0-liqfrac_tmp**exposant_glace 179 IF ((icefrac(i) .GT.0.) .AND. (liqfrac_tmp .GT. 0)) THEN 180 dicefracdT(i)= exposant_glace * ((liqfrac_tmp)**(exposant_glace-1.)) & 181 / (t_glace_min - t_glace_max) 182 ELSE 183 184 dicefracdT(i)=0. 185 ENDIF 186 187 ELSE 149 150 ! old function with sole dependence upon temperature 151 IF (iflag_t_glace .EQ. 2) THEN 152 liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min) 153 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 188 154 icefrac(i) = (1.0-liqfrac_tmp)**exposant_glace 189 155 IF (icefrac(i) .GT.0.) THEN … … 196 162 ENDIF 197 163 198 ENDIF 199 200 ENDDO 201 202 203 RETURN 204 164 ENDIF 165 166 ! function of temperature used in CMIP6 physics 167 IF (iflag_t_glace .EQ. 3) THEN 168 liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min) 169 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 170 icefrac(i) = 1.0-liqfrac_tmp**exposant_glace 171 IF ((icefrac(i) .GT.0.) .AND. (liqfrac_tmp .GT. 0.)) THEN 172 dicefracdT(i)= exposant_glace * ((liqfrac_tmp)**(exposant_glace-1.)) & 173 / (t_glace_min - t_glace_max) 174 ELSE 175 dicefracdT(i)=0. 176 ENDIF 177 ENDIF 178 179 ! for iflag_t_glace .GE. 4, the liquid fraction depends upon temperature at cloud top 180 ! and then decreases with decreasing height 181 182 !with linear function of temperature at cloud top 183 IF (iflag_t_glace .EQ. 4) THEN 184 liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min) 185 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 186 icefrac(i) = MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.) 187 dicefrac_tmp = - temp(i)/(t_glace_max-t_glace_min) 188 dicefracdT(i) = dicefrac_tmp*exp(-distcltop(i)/dist_liq) 189 IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN 190 dicefracdT(i) = 0. 191 ENDIF 192 ENDIF 193 194 ! with CMIP6 function of temperature at cloud top 195 IF (iflag_t_glace .EQ. 5) THEN 196 liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min) 197 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 198 liqfrac_tmp = liqfrac_tmp**exposant_glace 199 icefrac(i) = MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.) 200 IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN 201 dicefracdT(i) = 0. 202 ELSE 203 dicefracdT(i) = exposant_glace*((liqfrac_tmp)**(exposant_glace-1.))/(t_glace_min- t_glace_max) & 204 *exp(-distcltop(i)/dist_liq) 205 ENDIF 206 ENDIF 207 208 ! with modified function of temperature at cloud top 209 ! to get largere values around 260 K, works well with t_glace_min = 241K 210 IF (iflag_t_glace .EQ. 6) THEN 211 IF (temp(i) .GT. t_glace_max) THEN 212 liqfrac_tmp = 1. 213 ELSE 214 liqfrac_tmp = -((temp(i)-t_glace_max) / (t_glace_max-t_glace_min))**2+1. 215 ENDIF 216 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 217 icefrac(i) = MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.) 218 IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN 219 dicefracdT(i) = 0. 220 ELSE 221 dicefracdT(i) = 2*((temp(i)-t_glace_max) / (t_glace_max-t_glace_min))/(t_glace_max-t_glace_min) & 222 *exp(-distcltop(i)/dist_liq) 223 ENDIF 224 ENDIF 225 226 227 228 ENDDO ! klon 229 230 RETURN 231 205 232 END SUBROUTINE ICEFRAC_LSCP 206 233 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ … … 276 303 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 277 304 305 use lscp_ini_mod, only: iflag_gammasat, t_glace_min, RTT 278 306 279 307 IMPLICIT NONE 280 308 281 include "YOMCST.h"282 include "YOETHF.h"283 include "FCTTRE.h"284 include "nuage.h"285 309 286 310 INTEGER, INTENT(IN) :: klon ! number of horizontal grid points … … 348 372 349 373 END SUBROUTINE CALC_GAMMASAT 350 351 374 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 375 376 377 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 378 SUBROUTINE DISTANCE_TO_CLOUD_TOP(klon,klev,k,temp,pplay,paprs,rneb,distcltop1D) 379 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 380 381 USE lscp_ini_mod, ONLY : rd,rg,tresh_cl 382 383 IMPLICIT NONE 384 385 INTEGER, INTENT(IN) :: klon,klev !number of horizontal and vertical grid points 386 INTEGER, INTENT(IN) :: k ! vertical index 387 REAL, INTENT(IN), DIMENSION(klon,klev) :: temp ! temperature in K 388 REAL, INTENT(IN), DIMENSION(klon,klev) :: pplay ! pressure middle layer in Pa 389 REAL, INTENT(IN), DIMENSION(klon,klev+1) :: paprs ! pressure interfaces in Pa 390 REAL, INTENT(IN), DIMENSION(klon,klev) :: rneb ! cloud fraction 391 392 REAL, INTENT(OUT), DIMENSION(klon) :: distcltop1D ! distance from cloud top 393 394 REAL dzlay(klon,klev) 395 REAL zlay(klon,klev) 396 REAL dzinterf 397 INTEGER i,k_top, kvert 398 LOGICAL bool_cl 399 400 401 DO i=1,klon 402 ! Initialization height middle of first layer 403 dzlay(i,1) = Rd * temp(i,1) / rg * log(paprs(i,1)/paprs(i,2)) 404 zlay(i,1) = dzlay(i,1)/2 405 406 DO kvert=2,klev 407 IF (kvert.EQ.klev) THEN 408 dzlay(i,kvert) = 2*(rd * temp(i,kvert) / rg * log(paprs(i,kvert)/pplay(i,kvert))) 409 ELSE 410 dzlay(i,kvert) = rd * temp(i,kvert) / rg * log(paprs(i,kvert)/paprs(i,kvert+1)) 411 ENDIF 412 dzinterf = rd * temp(i,kvert) / rg * log(pplay(i,kvert-1)/pplay(i,kvert)) 413 zlay(i,kvert) = zlay(i,kvert-1) + dzinterf 414 ENDDO 415 ENDDO 416 417 k_top = k 418 DO i=1,klon 419 IF (rneb(i,k) .LE. tresh_cl) THEN 420 bool_cl = .FALSE. 421 ELSE 422 bool_cl = .TRUE. 423 ENDIF 424 425 DO WHILE ((bool_cl) .AND. (k_top .LE. klev)) 426 ! find cloud top 427 IF (rneb(i,k_top) .GT. tresh_cl) THEN 428 k_top = k_top + 1 429 ELSE 430 bool_cl = .FALSE. 431 k_top = k_top - 1 432 ENDIF 433 ENDDO 434 k_top=min(k_top,klev) 435 436 !dist to top is dist between current layer and layer of cloud top (from middle to middle) + dist middle to 437 !interf for layer of cloud top 438 distcltop1D(i) = zlay(i,k_top) - zlay(i,k) + dzlay(i,k_top)/2 439 ENDDO ! klon 440 441 END SUBROUTINE DISTANCE_TO_CLOUD_TOP 352 442 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 353 443 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/newmicro.F90
r4119 r4669 3 3 SUBROUTINE newmicro(flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, picefra, pclc, & 4 4 pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, & 5 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg, re, fl, reliq, reice, &5 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg,distcltop, re, fl, reliq, reice, & 6 6 reliq_pi, reice_pi) 7 7 … … 12 12 USE phys_state_var_mod, ONLY: rnebcon, clwcon 13 13 USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14) 14 USE lscp_ini_mod, only: iflag_t_glace 14 15 USE ioipsl_getin_p_mod, ONLY : getin_p 15 16 USE print_control_mod, ONLY: lunout … … 41 42 ! bl95_b1-input-R-a PARAMETER, may be varied for tests ( -"- ) 42 43 ! latitude_deg-input latitude in degrees 44 ! distcltop ---input- distance from cloud top 43 45 44 46 ! re------output-R-Cloud droplet effective radius multiplied by fl [um] … … 97 99 REAL pctlwp(klon) 98 100 101 REAL distcltop(klon,klev) 99 102 LOGICAL lo 100 103 … … 241 244 242 245 IF (ok_new_lscp) THEN 243 CALL icefrac_lscp(klon,t(:,k), pplay(:,k)/paprs(:,1),zfice(:,k),dzfice(:,k))246 CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:,k),dzfice(:,k)) 244 247 ELSE 245 248 CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:,k)) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/nuage.F90
r3999 r4669 2 2 3 3 SUBROUTINE nuage(paprs, pplay, t, pqlwp,picefra, pclc, pcltau, pclemi, pch, pcl, pcm, & 4 pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, &4 pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, distcltop, & 5 5 cldtaupi, re, fl) 6 6 USE dimphy 7 7 USE lscp_tools_mod, only: icefrac_lscp 8 8 USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14) 9 USE lscp_ini_mod, only : iflag_t_glace 9 10 USE phys_local_var_mod, ONLY: ptconv 10 11 IMPLICIT NONE … … 49 50 50 51 REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon) 51 52 REAL distcltop(klon,klev) 52 53 LOGICAL lo 53 54 … … 112 113 ! t_glace_max, exposant_glace) 113 114 IF (ok_new_lscp) THEN 114 CALL icefrac_lscp(klon,t(:,k), pplay(:,k)/paprs(:,1),zfice(:),dzfice(:))115 CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:),dzfice(:)) 115 116 ELSE 116 117 CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:)) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/nuage.h
r4380 r4669 2 2 ! $Id$ 3 3 ! 4 REAL rad_froid, rad_chau1, rad_chau2, t_glace_max, t_glace_min 5 REAL exposant_glace 4 REAL rad_froid, rad_chau1, rad_chau2 6 5 REAL rei_min,rei_max 7 6 REAL tau_cld_cv,coefw_cld_cv 8 9 7 REAL tmax_fonte_cv 10 11 INTEGER iflag_t_glace, iflag_cloudth_vert, iflag_cld_cv 12 INTEGER iflag_rain_incloud_vol 13 14 INTEGER iflag_gammasat, iflag_vice, iflag_rei 8 INTEGER iflag_cld_cv 9 INTEGER iflag_rei 15 10 LOGICAL ok_icefra_lscp 16 11 17 common /nuagecom/ rad_froid,rad_chau1, rad_chau2, t_glace_max,&18 & t_glace_min,exposant_glace,rei_min,rei_max,&12 common /nuagecom/ rad_froid,rad_chau1, rad_chau2, & 13 & rei_min,rei_max, & 19 14 & tau_cld_cv,coefw_cld_cv, & 20 15 & tmax_fonte_cv, & 21 & iflag_t_glace,iflag_cloudth_vert,iflag_cld_cv, & 22 & iflag_rain_incloud_vol, & 23 & ok_icefra_lscp, & 24 & iflag_gammasat, iflag_vice, & 16 & iflag_cld_cv, & 17 & ok_icefra_lscp, & 25 18 & iflag_rei 26 19 !$OMP THREADPRIVATE(/nuagecom/) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ocean_forced_mod.F90
r3974 r4669 167 167 SUBROUTINE ocean_forced_ice( & 168 168 itime, dtime, jour, knon, knindex, & 169 tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, 169 tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air,spechum, & 170 170 AcoefH, AcoefQ, BcoefH, BcoefQ, & 171 171 AcoefU, AcoefV, BcoefU, BcoefV, & -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/pbl_surface_mod.F90
r4662 r4669 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 25 USE atke_exchange_coeff_mod, ONLY : atke_compute_km_kh26 USE call_atke_mod, ONLY : call_atke 26 27 USE ioipsl_getin_p_mod, ONLY : getin_p 27 28 USE cdrag_mod … … 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(INOUT) :: 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,ycoefq628 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 … … 775 790 REAL, DIMENSION(klon) :: uzon_w, vmer_w, speed_w, zri1_w, pref_w !speed_w, zri1_w, pref_w, added by Fuxing WANG, 04/03/2015 776 791 REAL, DIMENSION(klon) :: zgeo1_w, tair1_w, qair1_w, tairsol_w 792 REAL, DIMENSION(klon) :: yus0, yvs0 777 793 778 794 !!! jyg le 25/03/2013 … … 862 878 REAL, DIMENSION(klon,nbsrf) :: zx_t1 863 879 REAL, DIMENSION(klon, nbsrf) :: alb ! mean albedo for whole SW interval 880 REAL, DIMENSION(klon,nbsrf) :: snowerosion 864 881 REAL, DIMENSION(klon) :: ylwdown ! jg : temporary (ysollwdown) 865 882 REAL, DIMENSION(klon) :: ygustiness ! jg : temporary (ysollwdown) … … 977 994 cdragh(:)=0. ; cdragm(:)=0. 978 995 zu1(:)=0. ; zv1(:)=0. 996 yus0(:)=0. ; yvs0(:)=0. 979 997 !albedo SB >>> 980 998 alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0. 981 999 !albedo SB <<< 982 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. 1000 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0. 983 1001 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0. 984 1002 zxfluxlat(:)=0. 985 1003 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 986 1004 zn2mout(:,:)=0 ; 987 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_ u(:,:)=0. ; d_v(:,:)=0.1005 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0. 988 1006 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0. 989 1007 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0. … … 1005 1023 d_ts(:,:)=0. 1006 1024 evap(:,:)=0. 1025 snowerosion(:,:)=0. 1007 1026 fluxlat(:,:)=0. 1008 1027 wfbils(:,:)=0. ; wfbilo(:,:)=0. 1009 1028 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0. 1010 1029 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0. 1030 flux_qbs(:,:,:)=0. 1011 1031 dflux_t(:)=0. ; dflux_q(:)=0. 1012 1032 zxsnow(:)=0. 1013 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0. 1033 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0. 1014 1034 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0. 1015 1035 runoff(:)=0. … … 1048 1068 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 1049 1069 !albedo SB <<< 1050 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.01070 yrain_f = 0.0 ; ysnow_f = 0.0 ; ybs_f=0.0 ; yfder = 0.0 ; ysolsw = 0.0 1051 1071 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yz0h_oupas = 0.0 ; yu1 = 0.0 1052 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 1072 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 ; yqbs1 = 0.0 1053 1073 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 1054 1074 yq = 0.0 ; y_dflux_t = 0.0 ; y_dflux_q = 0.0 1075 yqbs(:,:)=0.0 1055 1076 yrugoro = 0.0 ; ywindsp = 0.0 1056 1077 !! d_ts = 0.0 ; yfluxlat=0.0 ; flux_t = 0.0 ; flux_q = 0.0 1057 yfluxlat=0.0 1078 yfluxlat=0.0 ; y_flux0(:)=0.0 1058 1079 !! flux_u = 0.0 ; flux_v = 0.0 ; d_t = 0.0 ; d_q = 0.0 1059 1080 !! d_t_diss= 0.0 ;d_u = 0.0 ; d_v = 0.0 … … 1070 1091 ycldt = 0.0 ; yrmu0 = 0.0 1071 1092 ! Martin 1093 y_d_qbs(:,:)=0.0 1072 1094 1073 1095 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 1366 1388 ! Provisional : set ybeta to standard values 1367 1389 IF (nsrf .NE. is_ter) THEN 1368 ybeta( :) = 1.1390 ybeta(1:knon) = 1. 1369 1391 ELSE 1370 1392 IF (iflag_split .EQ. 0) THEN 1371 ybeta( :) = 1.1393 ybeta(1:knon) = 1. 1372 1394 ELSE 1373 1395 DO j = 1, knon … … 1395 1417 yrain_f(j) = rain_f(i) 1396 1418 ysnow_f(j) = snow_f(i) 1419 ybs_f(j) = bs_f(i) 1397 1420 yagesno(j) = agesno(i,nsrf) 1398 1421 yfder(j) = fder(i) … … 1406 1429 yu1(j) = u(i,1) 1407 1430 yv1(j) = v(i,1) 1431 yqbs1(j) = qbs(i,1) 1408 1432 ypaprs(j,klev+1) = paprs(i,klev+1) 1409 1433 !jyg< … … 1419 1443 !!! nrlmd le 13/06/2011 1420 1444 y_delta_tsurf(j)=delta_tsurf(i,nsrf) 1421 !!! 1445 yfluxbs(j)=0.0 1446 y_flux_bs(j) = 0.0 1422 1447 ENDDO 1423 1448 ! >> PC … … 1458 1483 yt(j,k) = t(i,k) 1459 1484 yq(j,k) = q(i,k) 1485 yqbs(j,k)=qbs(i,k) 1460 1486 ENDDO 1461 1487 ENDDO … … 1587 1613 ENDIF 1588 1614 1589 IF (prt_level >=10) print *,'c lcdrag -> ycdragh ', ycdragh1615 IF (prt_level >=10) print *,'cdrag -> ycdragh ', ycdragh(1:knon) 1590 1616 ELSE !(iflag_split .eq.0) 1591 1617 … … 1635 1661 ycdragm_w, ycdragh_w, zri1_w, pref_w, rain_f, zxtsol, ypplay(:,1) ) 1636 1662 ! 1637 zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:) 1663 !!!bug !! zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:) 1664 zgeo1(1:knon) = wake_s(1:knon)*zgeo1_w(1:knon) + (1.-wake_s(1:knon))*zgeo1_x(1:knon) 1638 1665 1639 1666 ! --- special Dice. JYG+MPL 25112013 puis BOMEX … … 1661 1688 !!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012 1662 1689 IF (prt_level >=10) THEN 1663 print *,' args coef_diff_turb: yu ', yu 1664 print *,' args coef_diff_turb: yv ', yv 1665 print *,' args coef_diff_turb: yq ', yq 1666 print *,' args coef_diff_turb: yt ', yt 1667 print *,' args coef_diff_turb: yts ', yts 1668 print *,' args coef_diff_turb: yz0m ', yz0m 1669 print *,' args coef_diff_turb: yqsurf ', yqsurf 1670 print *,' args coef_diff_turb: ycdragm ', ycdragm 1671 print *,' args coef_diff_turb: ycdragh ', ycdragh 1672 print *,' args coef_diff_turb: ytke ', ytke 1690 print *,' args coef_diff_turb: yu ', yu(1:knon,:) 1691 print *,' args coef_diff_turb: yv ', yv(1:knon,:) 1692 print *,' args coef_diff_turb: yq ', yq(1:knon,:) 1693 print *,' args coef_diff_turb: yt ', yt(1:knon,:) 1694 print *,' args coef_diff_turb: yts ', yts(1:knon) 1695 print *,' args coef_diff_turb: yz0m ', yz0m(1:knon) 1696 print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 1697 print *,' args coef_diff_turb: ycdragm ', ycdragm(1:knon) 1698 print *,' args coef_diff_turb: ycdragh ', ycdragh(1:knon) 1699 print *,' args coef_diff_turb: ytke ', ytke(1:knon,:) 1673 1700 ENDIF 1674 1701 1675 1702 IF (iflag_pbl>=50) THEN 1676 1703 1677 CALL atke_compute_km_kh(knon,klev,yu,yv,yt, &1704 CALL call_atke(dtime,knon,klev,ycdragm, ycdragh,yus0,yvs0,yts,yu,yv,yt, & 1678 1705 ypplay,ypaprs,ytke,ycoefm, ycoefh) 1679 1706 … … 1698 1725 ENDIF ! iflag_pbl >= 50 1699 1726 1700 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh 1727 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh(1:knon,:) 1701 1728 1702 1729 … … 1705 1732 1706 1733 IF (prt_level >=10) THEN 1707 print *,' args coef_diff_turb: yu_x ', yu_x 1708 print *,' args coef_diff_turb: yv_x ', yv_x 1709 print *,' args coef_diff_turb: yq_x ', yq_x 1710 print *,' args coef_diff_turb: yt_x ', yt_x 1711 print *,' args coef_diff_turb: yts_x ', yts_x 1712 print *,' args coef_diff_turb: yqsurf ', yqsurf 1713 print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x 1714 print *,' args coef_diff_turb: ycdragh_x ', ycdragh_x 1715 print *,' args coef_diff_turb: ytke_x ', ytke_x 1734 print *,' args coef_diff_turb: yu_x ', yu_x(1:knon,:) 1735 print *,' args coef_diff_turb: yv_x ', yv_x(1:knon,:) 1736 print *,' args coef_diff_turb: yq_x ', yq_x(1:knon,:) 1737 print *,' args coef_diff_turb: yt_x ', yt_x(1:knon,:) 1738 print *,' args coef_diff_turb: yts_x ', yts_x(1:knon) 1739 print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 1740 print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x(1:knon) 1741 print *,' args coef_diff_turb: ycdragh_x ', ycdragh_x(1:knon) 1742 print *,' args coef_diff_turb: ytke_x ', ytke_x(1:knon,:) 1716 1743 ENDIF 1717 1744 … … 1719 1746 IF (iflag_pbl>=50) THEN 1720 1747 1721 CALL atke_compute_km_kh(knon,klev,yu_x,yv_x,yt_x, &1748 CALL call_atke(dtime,knon,klev,ycdragm_x,ycdragh_x,yus0,yvs0,yts_x,yu_x,yv_x,yt_x, & 1722 1749 ypplay,ypaprs,ytke_x,ycoefm_x, ycoefh_x) 1723 1750 … … 1742 1769 ENDIF ! iflag_pbl >= 50 1743 1770 1744 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x 1771 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x(1:knon,:) 1745 1772 ! 1746 1773 IF (prt_level >=10) THEN 1747 print *,' args coef_diff_turb: yu_w ', yu_w 1748 print *,' args coef_diff_turb: yv_w ', yv_w 1749 print *,' args coef_diff_turb: yq_w ', yq_w 1750 print *,' args coef_diff_turb: yt_w ', yt_w 1751 print *,' args coef_diff_turb: yts_w ', yts_w 1752 print *,' args coef_diff_turb: yqsurf ', yqsurf 1753 print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w 1754 print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w 1755 print *,' args coef_diff_turb: ytke_w ', ytke_w 1774 print *,' args coef_diff_turb: yu_w ', yu_w(1:knon,:) 1775 print *,' args coef_diff_turb: yv_w ', yv_w(1:knon,:) 1776 print *,' args coef_diff_turb: yq_w ', yq_w(1:knon,:) 1777 print *,' args coef_diff_turb: yt_w ', yt_w(1:knon,:) 1778 print *,' args coef_diff_turb: yts_w ', yts_w(1:knon) 1779 print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 1780 print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w(1:knon) 1781 print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w(1:knon) 1782 print *,' args coef_diff_turb: ytke_w ', ytke_w(1:knon,:) 1756 1783 ENDIF 1757 1784 1758 1785 IF (iflag_pbl>=50) THEN 1759 1786 1760 CALL atke_compute_km_kh(knon,klev,yu_w,yv_w,yt_w, &1787 CALL call_atke(dtime,knon,klev,ycdragm_w,ycdragh_w,yus0,yvs0,yts_w,yu_w,yv_w,yt_w, & 1761 1788 ypplay,ypaprs,ytke_w,ycoefm_w, ycoefh_w) 1762 1789 … … 1781 1808 1782 1809 1783 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w 1810 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w(1:knon,:) 1784 1811 1785 1812 !!!jyg le 10/04/2013 … … 1880 1907 ENDIF ! (iflag_split .eq.0) 1881 1908 !!! 1909 1910 ! For blowing snow: 1911 IF (ok_bs) THEN 1912 ! following Bintanja et al 2000, part II 1913 ! we assume that the eddy diffsivity coefficient for 1914 ! suspended particles is larger than Km by a factor zeta_bs 1915 ! which is equal to 3 by default 1916 do k=1,klev 1917 do j=1,knon 1918 ycoefqbs(j,k)=ycoefm(j,k)*zeta_bs 1919 enddo 1920 enddo 1921 CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, & 1922 ydelp, yt, yqbs, dtime, & 1923 CcoefQBS, DcoefQBS, & 1924 Kcoef_qbs, gama_qbs, & 1925 AcoefQBS, BcoefQBS) 1926 ENDIF 1882 1927 1883 1928 !**************************************************************************************** … … 1999 2044 !!! 2000 2045 IF (prt_level >=10) THEN 2001 PRINT *,'pbl_surface (merge->): yt(1,:) ',yt(1,:) 2002 PRINT *,'pbl_surface (merge->): yq(1,:) ',yq(1,:) 2003 PRINT *,'pbl_surface (merge->): yu(1,:) ',yu(1,:) 2004 PRINT *,'pbl_surface (merge->): yv(1,:) ',yv(1,:) 2005 PRINT *,'pbl_surface (merge->): AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) ', & 2006 AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) 2007 PRINT *,'pbl_surface (merge->): BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) ', & 2008 BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) 2046 DO i = 1, min(1,knon) 2047 PRINT *,'pbl_surface (merge->): yt(1,:) ',yt(i,:) 2048 PRINT *,'pbl_surface (merge->): yq(1,:) ',yq(i,:) 2049 PRINT *,'pbl_surface (merge->): yu(1,:) ',yu(i,:) 2050 PRINT *,'pbl_surface (merge->): yv(1,:) ',yv(i,:) 2051 PRINT *,'pbl_surface (merge->): AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) ', & 2052 AcoefH(i), AcoefQ(i), AcoefU(i), AcoefV(i) 2053 PRINT *,'pbl_surface (merge->): BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) ', & 2054 BcoefH(i), BcoefQ(i), BcoefU(i), BcoefV(i) 2055 ENDDO 2009 2056 2010 2057 ENDIF … … 2057 2104 debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, & 2058 2105 !!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,&2106 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2060 2107 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2061 2108 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2063 2110 ylwdown, yq2m, yt2m, & 2064 2111 ysnow, yqsol, yagesno, ytsoil, & 2065 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat, &2112 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,& 2066 2113 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 2067 2114 y_flux_u1, y_flux_v1, & … … 2106 2153 yrmu0, ylwdown, yalb, zgeo1, & 2107 2154 ysolsw, ysollw, yts, ypplay(:,1), & 2108 !!jyg ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2109 ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,& 2155 ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2110 2156 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2111 2157 AcoefU, AcoefV, BcoefU, BcoefV, & 2158 AcoefQBS, BcoefQBS, & 2112 2159 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2113 ysnow, yqsurf, yqsol, yagesno, &2160 ysnow, yqsurf, yqsol,yqbs1, yagesno, & 2114 2161 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 2115 y tsurf_new, y_dflux_t, y_dflux_q, &2162 yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, & 2116 2163 yzmea, yzsig, ycldt, & 2117 2164 ysnowhgt, yqsnow, ytoice, ysissnow, & … … 2147 2194 itap, dtime, jour, knon, ni, & 2148 2195 !!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 init2196 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),& ! ym missing init 2150 2197 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2151 2198 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2158 2205 ydt_ds(:knon), ytkt(:knon), ytks(:knon), ytaur(:knon), ysss) 2159 2206 IF (prt_level >=10) THEN 2160 print *,'arg de surf_ocean: ycdragh ',ycdragh 2161 print *,'arg de surf_ocean: ycdragm ',ycdragm 2162 print *,'arg de surf_ocean: yt ', yt 2163 print *,'arg de surf_ocean: yq ', yq 2164 print *,'arg de surf_ocean: yts ', yts 2165 print *,'arg de surf_ocean: AcoefH ',AcoefH 2166 print *,'arg de surf_ocean: AcoefQ ',AcoefQ 2167 print *,'arg de surf_ocean: BcoefH ',BcoefH 2168 print *,'arg de surf_ocean: BcoefQ ',BcoefQ 2169 print *,'arg de surf_ocean: yevap ',yevap 2170 print *,'arg de surf_ocean: yfluxsens ',yfluxsens 2171 print *,'arg de surf_ocean: yfluxlat ',yfluxlat 2172 print *,'arg de surf_ocean: ytsurf_new ',ytsurf_new 2207 print *,'arg de surf_ocean: ycdragh ',ycdragh(1:knon) 2208 print *,'arg de surf_ocean: ycdragm ',ycdragm(1:knon) 2209 print *,'arg de surf_ocean: yt ', yt(1:knon,:) 2210 print *,'arg de surf_ocean: yq ', yq(1:knon,:) 2211 print *,'arg de surf_ocean: yts ', yts(1:knon) 2212 print *,'arg de surf_ocean: AcoefH ',AcoefH(1:knon) 2213 print *,'arg de surf_ocean: AcoefQ ',AcoefQ(1:knon) 2214 print *,'arg de surf_ocean: BcoefH ',BcoefH(1:knon) 2215 print *,'arg de surf_ocean: BcoefQ ',BcoefQ(1:knon) 2216 print *,'arg de surf_ocean: yevap ',yevap(1:knon) 2217 print *,'arg de surf_ocean: yfluxsens ',yfluxsens(1:knon) 2218 print *,'arg de surf_ocean: yfluxlat ',yfluxlat(1:knon) 2219 print *,'arg de surf_ocean: ytsurf_new ',ytsurf_new(1:knon) 2173 2220 ENDIF 2174 2221 ! Special DICE MPL 05082013 puis BOMEX MPL 20150410 … … 2220 2267 2221 2268 IF (evap0>=0.) THEN 2222 yevap( :)=evap02223 yevap( :)=RLVTT*evap02269 yevap(1:knon)=evap0 2270 yevap(1:knon)=RLVTT*evap0 2224 2271 ENDIF 2225 2272 … … 2277 2324 ENDDO 2278 2325 ENDIF ! (ok_flux_surf) 2326 2327 ! flux of blowing snow at the first level 2328 IF (ok_bs) THEN 2329 DO j=1,knon 2330 y_flux_bs(j)=yfluxbs(j) 2331 ENDDO 2332 ENDIF 2279 2333 ! 2280 2334 ! ------------------------------------------------------------------------------ … … 2421 2475 IF (prt_level >= 10) THEN 2422 2476 print *,'pbl_surface, ybeta , yevap, yevap_pot ', & 2423 ybeta , yevap, yevap_pot2477 ybeta(1:knon) , yevap(1:knon), yevap_pot(1:knon) 2424 2478 ENDIF ! (prt_level >= 10) 2425 2479 ! … … 2583 2637 ! 2584 2638 ENDIF ! (iflag_split .eq.0) 2639 2640 IF (ok_bs) THEN 2641 CALL climb_qbs_up(knon, dtime, yqbs, & 2642 y_flux_bs, ypaprs, ypplay, & 2643 AcoefQBS, BcoefQBS, & 2644 CcoefQBS, DcoefQBS, & 2645 Kcoef_qbs, gama_qbs, & 2646 y_flux_qbs(:,:), y_d_qbs(:,:)) 2647 ENDIF 2648 2585 2649 !!! 2586 2650 !! … … 2696 2760 !!! 2697 2761 2698 ! print*,'Dans pbl OK1' 2699 2700 !jyg< 2701 !! evap(:,nsrf) = - flux_q(:,1,nsrf) 2702 !>jyg 2762 ! tendencies of blowing snow 2763 IF (ok_bs) THEN 2764 DO k = 1, klev 2765 DO j = 1, knon 2766 i = ni(j) 2767 y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j) 2768 flux_qbs(i,k,nsrf) = y_flux_qbs(j,k) 2769 ENDDO 2770 ENDDO 2771 ENDIF 2772 2773 2703 2774 DO j = 1, knon 2704 2775 i = ni(j) 2705 2776 evap(i,nsrf) = - flux_q(i,1,nsrf) !jyg 2777 if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif 2706 2778 beta(i,nsrf) = ybeta(j) !jyg 2707 2779 d_ts(i,nsrf) = y_d_ts(j) … … 2874 2946 ENDDO 2875 2947 2948 2949 IF (ok_bs) THEN 2950 DO k = 1, klev 2951 DO j = 1, knon 2952 i = ni(j) 2953 d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k) 2954 ENDDO 2955 ENDDO 2956 ENDIF 2957 2876 2958 ! print*,'Dans pbl OK4' 2877 2959 2878 2960 IF (prt_level >=10) THEN 2879 2961 print *, 'pbl_surface tendencies for w: d_t_w, d_t_x, d_t ', & 2880 d_t_w( :,1), d_t_x(:,1), d_t(:,1)2962 d_t_w(1:knon,1), d_t_x(1:knon,1), d_t(1:knon,1) 2881 2963 ENDIF 2882 2964 … … 3124 3206 IF (prt_level >=10) THEN 3125 3207 print *, 'T2m, q2m, RH2m ', & 3126 t2m , q2m, rh2m3208 t2m(1:knon,:), q2m(1:knon,:), rh2m(1:knon) 3127 3209 ENDIF 3128 3210 … … 3137 3219 ytherm,ytrmb1,ytrmb2,ytrmb3,ylcl) 3138 3220 IF (prt_level >=10) THEN 3139 print *,' Arg. de HBTM: yt2m ',yt2m 3140 print *,' Arg. de HBTM: yt10m ',yt10m 3141 print *,' Arg. de HBTM: yq2m ',yq2m 3142 print *,' Arg. de HBTM: yq10m ',yq10m 3143 print *,' Arg. de HBTM: yustar ',yustar 3144 print *,' Arg. de HBTM: y_flux_t ',y_flux_t 3145 print *,' Arg. de HBTM: y_flux_q ',y_flux_q 3146 print *,' Arg. de HBTM: yu ',yu 3147 print *,' Arg. de HBTM: yv ',yv 3148 print *,' Arg. de HBTM: yt ',yt 3149 print *,' Arg. de HBTM: yq ',yq 3221 print *,' Arg. de HBTM: yt2m ',yt2m(1:knon) 3222 print *,' Arg. de HBTM: yt10m ',yt10m(1:knon) 3223 print *,' Arg. de HBTM: yq2m ',yq2m(1:knon) 3224 print *,' Arg. de HBTM: yq10m ',yq10m(1:knon) 3225 print *,' Arg. de HBTM: yustar ',yustar(1:knon) 3226 print *,' Arg. de HBTM: y_flux_t ',y_flux_t(1:knon,:) 3227 print *,' Arg. de HBTM: y_flux_q ',y_flux_q(1:knon,:) 3228 print *,' Arg. de HBTM: yu ',yu(1:knon,:) 3229 print *,' Arg. de HBTM: yv ',yv(1:knon,:) 3230 print *,' Arg. de HBTM: yt ',yt(1:knon,:) 3231 print *,' Arg. de HBTM: yq ',yq(1:knon,:) 3150 3232 ENDIF 3151 3233 ELSE ! (iflag_split .eq.0) … … 3156 3238 ytherm_x,ytrmb1_x,ytrmb2_x,ytrmb3_x,ylcl_x) 3157 3239 IF (prt_level >=10) THEN 3158 print *,' Arg. de HBTM: yt2m_x ',yt2m_x 3159 print *,' Arg. de HBTM: yt10m_x ',yt10m_x 3160 print *,' Arg. de HBTM: yq2m_x ',yq2m_x 3161 print *,' Arg. de HBTM: yq10m_x ',yq10m_x 3162 print *,' Arg. de HBTM: yustar_x ',yustar_x 3163 print *,' Arg. de HBTM: y_flux_t_x ',y_flux_t_x 3164 print *,' Arg. de HBTM: y_flux_q_x ',y_flux_q_x 3165 print *,' Arg. de HBTM: yu_x ',yu_x 3166 print *,' Arg. de HBTM: yv_x ',yv_x 3167 print *,' Arg. de HBTM: yt_x ',yt_x 3168 print *,' Arg. de HBTM: yq_x ',yq_x 3240 print *,' Arg. de HBTM: yt2m_x ',yt2m_x(1:knon) 3241 print *,' Arg. de HBTM: yt10m_x ',yt10m_x(1:knon) 3242 print *,' Arg. de HBTM: yq2m_x ',yq2m_x(1:knon) 3243 print *,' Arg. de HBTM: yq10m_x ',yq10m_x(1:knon) 3244 print *,' Arg. de HBTM: yustar_x ',yustar_x(1:knon) 3245 print *,' Arg. de HBTM: y_flux_t_x ',y_flux_t_x(1:knon,:) 3246 print *,' Arg. de HBTM: y_flux_q_x ',y_flux_q_x(1:knon,:) 3247 print *,' Arg. de HBTM: yu_x ',yu_x(1:knon,:) 3248 print *,' Arg. de HBTM: yv_x ',yv_x(1:knon,:) 3249 print *,' Arg. de HBTM: yt_x ',yt_x(1:knon,:) 3250 print *,' Arg. de HBTM: yq_x ',yq_x(1:knon,:) 3169 3251 ENDIF 3170 3252 CALL HBTM(knon, ypaprs, ypplay, & … … 3195 3277 ENDDO 3196 3278 IF (prt_level >=10) THEN 3197 print *, 'After HBTM: pblh ', pblh 3198 print *, 'After HBTM: plcl ', plcl 3199 print *, 'After HBTM: cteiCL ', cteiCL 3279 print *, 'After HBTM: pblh ', pblh(1:knon,:) 3280 print *, 'After HBTM: plcl ', plcl(1:knon,:) 3281 print *, 'After HBTM: cteiCL ', cteiCL(1:knon,:) 3200 3282 ENDIF 3201 3283 ELSE !(iflag_split .eq.0) … … 3215 3297 ENDDO 3216 3298 IF (prt_level >=10) THEN 3217 print *, 'After HBTM: pblh_x ', pblh_x 3218 print *, 'After HBTM: plcl_x ', plcl_x 3219 print *, 'After HBTM: cteiCL_x ', cteiCL_x 3299 print *, 'After HBTM: pblh_x ', pblh_x(1:knon,:) 3300 print *, 'After HBTM: plcl_x ', plcl_x(1:knon,:) 3301 print *, 'After HBTM: cteiCL_x ', cteiCL_x(1:knon,:) 3220 3302 ENDIF 3221 3303 DO j=1, knon … … 3234 3316 ENDDO 3235 3317 IF (prt_level >=10) THEN 3236 print *, 'After HBTM: pblh_w ', pblh_w 3237 print *, 'After HBTM: plcl_w ', plcl_w 3238 print *, 'After HBTM: cteiCL_w ', cteiCL_w 3318 print *, 'After HBTM: pblh_w ', pblh_w(1:knon,:) 3319 print *, 'After HBTM: plcl_w ', plcl_w(1:knon,:) 3320 print *, 'After HBTM: cteiCL_w ', cteiCL_w(1:knon,:) 3239 3321 ENDIF 3240 3322 !!! … … 3327 3409 fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i) 3328 3410 ENDDO 3411 3412 ! if blowing snow 3413 if (ok_bs) then 3414 DO nsrf = 1, nbsrf 3415 DO k = 1, klev 3416 DO i = 1, klon 3417 zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf) 3418 ENDDO 3419 ENDDO 3420 ENDDO 3421 3422 DO i = 1, klon 3423 zxsnowerosion(i) = zxfluxqbs(i,1) ! blowings snow flux at the surface 3424 END DO 3425 endif 3426 3329 3427 !!! 3330 3428 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyaqua_mod.F90
r4463 r4669 360 360 ql_ancien = 0. 361 361 qs_ancien = 0. 362 qbs_ancien = 0. 362 363 u_ancien = 0. 363 364 v_ancien = 0. … … 365 366 prlw_ancien = 0. 366 367 prsw_ancien = 0. 368 prbsw_ancien= 0. 367 369 368 370 ale_wake = 0. -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyetat0_mod.F90
r4389 r4669 20 20 qsol, fevap, z0m, z0h, agesno, & 21 21 du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, & 22 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, &23 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &24 rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, &22 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 23 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, & 24 rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, & 25 25 solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, & 26 26 wake_deltat, wake_delta_pbl_TKE, delta_tsurf, beta_aridity, wake_fip, wake_pe, & … … 300 300 301 301 !=================================================================== 302 ! Lecture dans le cas iflag_pbl_surface =1 303 !=================================================================== 304 305 if ( iflag_physiq <= 1 ) then 306 !=================================================================== 302 307 ! Lecture des temperatures du sol profond: 303 308 !=================================================================== … … 327 332 found=phyetat0_get(snow_fall,"snow_f","snow fall",0.) 328 333 found=phyetat0_get(rain_fall,"rain_f","rain fall",0.) 329 334 IF (ok_bs) THEN 335 found=phyetat0_get(bs_fall,"bs_f","blowing snow fall",0.) 336 ELSE 337 bs_fall(:)=0. 338 ENDIF 330 339 !======================================================================= 331 340 ! Radiation … … 374 383 ENDIF 375 384 385 endif ! iflag_physiq <= 1 386 376 387 ! Lecture de l'age de la neige: 377 388 found=phyetat0_srf(agesno,"AGESNO","SNOW AGE",0.001) … … 388 399 ancien_ok=ancien_ok.AND.phyetat0_get(prlw_ancien,"PRLWANCIEN","PRLWANCIEN",0.) 389 400 ancien_ok=ancien_ok.AND.phyetat0_get(prsw_ancien,"PRSWANCIEN","PRSWANCIEN",0.) 401 402 ! cas specifique des variables de la neige soufflee 403 IF (ok_bs) THEN 404 ancien_ok=ancien_ok.AND.phyetat0_get(qbs_ancien,"QBSANCIEN","QBSANCIEN",0.) 405 ancien_ok=ancien_ok.AND.phyetat0_get(prbsw_ancien,"PRBSWANCIEN","PRBSWANCIEN",0.) 406 ELSE 407 qbs_ancien(:,:)=0. 408 prbsw_ancien(:)=0. 409 ENDIF 390 410 391 411 ! Ehouarn: addtional tests to check if t_ancien, q_ancien contain … … 401 421 (maxval(t_ancien).EQ.minval(t_ancien)) ) THEN 402 422 ancien_ok=.false. 423 ENDIF 424 425 IF (ok_bs) THEN 426 IF ( (maxval(qbs_ancien).EQ.minval(qbs_ancien)) .OR. & 427 (maxval(prbsw_ancien).EQ.minval(prbsw_ancien)) ) THEN 428 ancien_ok=.false. 429 ENDIF 403 430 ENDIF 404 431 … … 591 618 ! Initialize module pbl_surface_mod 592 619 620 if ( iflag_physiq <= 1 ) then 593 621 CALL pbl_surface_init(fder, snow, qsurf, tsoil) 622 endif 594 623 595 624 ! Initialize module ocean_cpl_mod for the case of coupled ocean -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyredem.F90
r4389 r4669 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, & … … 76 76 ! Get variables which will be written to restart file from module 77 77 ! pbl_surface_mod 78 CALL pbl_surface_final(fder, snow, qsurf, tsoil) 78 if ( iflag_physiq <= 1 ) then 79 CALL pbl_surface_final(fder, snow, qsurf, tsoil) 80 endif 79 81 80 82 ! Get a variable calculated in module fonte_neige_mod … … 243 245 244 246 CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien) 247 248 IF (ok_bs) THEN 249 CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall) 250 CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien) 251 CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien) 252 ENDIF 245 253 246 254 CALL put_field(pass,"RNEBANCIEN", "RNEBANCIEN", rneb_ancien) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_local_var_mod.F90
-
Property
svn:keywords
changed from
Author Date Id Revision
toId
r4489 r4669 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(:,:) … … 276 280 !$OMP THREADPRIVATE(sens, flwp, fiwp) 277 281 !! 282 !FC 283 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zxfluxt, zxfluxq 284 !$OMP THREADPRIVATE(zxfluxt, zxfluxq) 285 !FC 278 286 !! Wake variables 279 287 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: alp_wake … … 312 320 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt 313 321 !$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)322 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw 323 !$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw) 316 324 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m 317 325 !$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m) … … 330 338 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte 331 339 !$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte) 340 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic 341 !$OMP THREADPRIVATE(zxustartlic, zxrhoslic) 332 342 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving 333 343 !$OMP THREADPRIVATE(zxfqcalving) … … 451 461 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi 452 462 !$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi) 453 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca 454 !$OMP THREADPRIVATE(prfl, psfl, fraca )463 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl 464 !$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl) 455 465 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2 456 466 !$OMP THREADPRIVATE(Vprecip, zw2) … … 470 480 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rneb,rnebjn,rneblsvol 471 481 !$OMP THREADPRIVATE(rneb,rnebjn,rneblsvol) 482 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfraclr,pfracld 483 !$OMP THREADPRIVATE(pfraclr,pfracld) 472 484 473 485 ! variables de sorties MM … … 523 535 REAL, SAVE, ALLOCATABLE :: fcontrP(:,:) 524 536 !$OMP THREADPRIVATE(fcontrP) 537 REAL, SAVE, ALLOCATABLE :: distcltop(:,:) 538 !$OMP THREADPRIVATE(distcltop) 539 525 540 526 541 #ifdef CPP_StratAer … … 608 623 609 624 IMPLICIT NONE 610 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev) )625 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 611 626 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 612 627 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 631 ALLOCATE(tr_seri(klon,klev,nbtr)) 617 632 ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev)) 618 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev) )619 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon) )633 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev)) 634 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon)) 620 635 ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev)) 621 636 ALLOCATE(d_tr_dyn(klon,klev,nbtr)) !RomP … … 640 655 ALLOCATE(plul_st(klon),plul_th(klon)) 641 656 ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev)) 642 657 ALLOCATE (d_qbs_vdf(klon,klev)) 658 ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev)) 643 659 ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev)) 644 660 ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev)) … … 769 785 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon)) 770 786 ALLOCATE(JrNt(klon)) 771 ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))772 ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))787 ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon)) 788 ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon)) 773 789 ALLOCATE(s_lcl(klon)) 774 790 ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon)) … … 785 801 ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon)) 786 802 ALLOCATE(zxrunofflic(klon)) 803 ALLOCATE(zxustartlic(klon), zxrhoslic(klon)) 804 zxustartlic(:)=0. ; zxrhoslic(:)=0. 787 805 ALLOCATE(rain_lsc(klon)) 788 806 ALLOCATE(rain_num(klon)) … … 841 859 ALLOCATE(wfevap(klon, nbsrf), wfrain(klon,nbsrf), wfsnow(klon, nbsrf)) 842 860 ALLOCATE(evap_pot(klon, nbsrf)) 861 ! FC 862 ALLOCATE(zxfluxq(klon,klev),zxfluxt(klon,klev)) 843 863 ! 844 864 ! Deep convective variables used in phytrac … … 861 881 ALLOCATE(prfl(klon, klev+1)) 862 882 ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1)) 883 ALLOCATE(bsfl(klon,klev+1)) 863 884 ALLOCATE(zw2(klon, klev+1)) 864 885 … … 874 895 ALLOCATE(beta_prec(klon,klev)) 875 896 ALLOCATE(rneb(klon,klev),rnebjn(klon,klev),rneblsvol(klon,klev)) 897 ALLOCATE(pfraclr(klon,klev),pfracld(klon,klev)) 898 pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined 899 ALLOCATE(distcltop(klon,klev)) 876 900 877 901 … … 942 966 USE indice_sol_mod 943 967 IMPLICIT NONE 944 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri )968 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 945 969 DEALLOCATE(u_seri,v_seri) 946 970 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime) … … 949 973 DEALLOCATE(tr_seri) 950 974 DEALLOCATE(d_t_dyn,d_q_dyn) 951 DEALLOCATE(d_ql_dyn,d_qs_dyn )952 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d )975 DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn) 976 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d) 953 977 DEALLOCATE(d_u_dyn,d_v_dyn) 954 978 DEALLOCATE(d_tr_dyn) !RomP … … 973 997 DEALLOCATE(plul_st,plul_th) 974 998 DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss) 999 DEALLOCATE(d_qbs_vdf) 1000 DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs) 975 1001 DEALLOCATE(d_u_vdf,d_v_vdf) 976 1002 DEALLOCATE(d_t_oli,d_t_oro) … … 1083 1109 DEALLOCATE(cldm, cldq, cldt, qsat2m) 1084 1110 DEALLOCATE(JrNt) 1085 DEALLOCATE(dthmin, evap, fder, plcl, plfc)1086 DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)1111 DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc) 1112 DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl) 1087 1113 DEALLOCATE(s_pblh, s_pblt, s_therm) 1088 1114 ! … … 1097 1123 DEALLOCATE(zxfqcalving, zxfluxlat) 1098 1124 DEALLOCATE(zxrunofflic) 1125 DEALLOCATE(zxustartlic, zxrhoslic) 1099 1126 DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf) 1100 1127 DEALLOCATE(rain_lsc) … … 1129 1156 DEALLOCATE(alp_bl_stat, n2, s2) 1130 1157 DEALLOCATE(proba_notrig, random_notrig) 1158 !FC 1159 DEALLOCATE(zxfluxq,zxfluxt) 1131 1160 1132 1161 DEALLOCATE(dnwd0) … … 1165 1194 1166 1195 1167 DEALLOCATE(prfl, psfl, fraca, Vprecip)1196 DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip) 1168 1197 DEALLOCATE(zw2) 1169 1198 … … 1178 1207 DEALLOCATE(beta_prec) 1179 1208 DEALLOCATE(rneb) 1209 DEALLOCATE(pfraclr,pfracld) 1180 1210 DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic) 1181 1211 DEALLOCATE(distcltop) 1182 1212 DEALLOCATE (p_tropopause) 1183 1213 DEALLOCATE (z_tropopause) -
Property
svn:keywords
changed from
-
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_ctrlout_mod.F90
r4412 r4669 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) /)) … … 1462 1473 TYPE(ctrl_out), SAVE :: o_rneblsvol = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1463 1474 'rneblsvol', 'LS Cloud fraction by volume', '-', (/ ('', i=1, 10) /)) 1475 TYPE(ctrl_out), SAVE :: o_pfraclr = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1476 'pfraclr', 'LS precipitation fraction clear-sky part', '-', (/ ('', i=1, 10) /)) 1477 TYPE(ctrl_out), SAVE :: o_pfracld = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1478 'pfracld', 'LS precipitation fraction cloudy part', '-', (/ ('', i=1, 10) /)) 1464 1479 TYPE(ctrl_out), SAVE :: o_rhum = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1465 1480 'rhum', 'Relative humidity', '-', (/ ('', i=1, 10) /)) … … 1494 1509 TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1495 1510 'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1511 TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1512 'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1513 TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1514 'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1496 1515 TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1497 1516 'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /)) … … 1502 1521 TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1503 1522 'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /)) 1523 TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1524 'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /)) 1504 1525 TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1505 1526 're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /)) … … 1530 1551 TYPE(ctrl_out), SAVE :: o_stratomask = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1531 1552 'stratomask', 'Stratospheric fraction', '1', (/ ('', i=1, 10) /)) 1553 !FC 1554 TYPE(ctrl_out), SAVE :: o_zxfluxt = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1555 'fluxt', 'flux h ', 'W/m2', (/ ('', i=1, 10) /)) 1556 TYPE(ctrl_out), SAVE :: o_zxfluxq = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1557 'fluxq', 'flux q ', 'kg/(s*m2)', (/ ('', i=1, 10) /)) 1532 1558 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1533 1559 … … 1599 1625 TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1600 1626 'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1627 TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1628 'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1629 TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1630 'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1601 1631 TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1602 1632 'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /)) … … 1673 1703 TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1674 1704 'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1705 TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1706 'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1707 TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1708 'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1709 TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1710 'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /)) 1711 TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1712 'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1675 1713 1676 1714 !!!!!!!!!!!!!!!! Specifique thermiques -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_var_mod.F90
r4370 r4669 30 30 REAL, SAVE, ALLOCATABLE :: d_qw_col(:) ! watter vapour mass budget for each column (kg/m2/s) 31 31 REAL, SAVE, ALLOCATABLE :: d_ql_col(:) ! liquid watter mass budget for each column (kg/m2/s) 32 REAL, SAVE, ALLOCATABLE :: d_qs_col(:) ! solid watter mass budget for each column (kg/m2/s) 32 REAL, SAVE, ALLOCATABLE :: d_qs_col(:) ! cloud ice mass budget for each column (kg/m2/s) 33 REAL, SAVE, ALLOCATABLE :: d_qbs_col(:) ! blowing snow mass budget for each column (kg/m2/s) 33 34 REAL, SAVE, ALLOCATABLE :: d_qt_col(:) ! total watter mass budget for each column (kg/m2/s) 34 35 REAL, SAVE, ALLOCATABLE :: d_ek_col(:) ! kinetic energy budget for each column (W/m2) … … 36 37 REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:) ! enthalpy budget of watter vapour for each column (W/m2) 37 38 REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:) ! enthalpy budget of liquid watter for each column (W/m2) 38 REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:) ! enthalpy budget of solid watter for each column (W/m2) 39 REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:) ! enthalpy budget of cloud ice for each column (W/m2) 40 REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:) ! enthalpy budget of blowing snow for each column (W/m2) 39 41 REAL, SAVE, ALLOCATABLE :: d_h_col(:) ! total enthalpy budget for each column (W/m2) 40 !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col)41 !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col)42 !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col) 43 !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col) 42 44 43 45 ! Outputs used in cloudth_vert to extract the moments of the horizontal and … … 173 175 174 176 allocate (bils_ec(klon),bils_ech(klon),bils_tke(klon),bils_diss(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon)) 175 allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_q t_col(klon), d_ek_col(klon), d_h_dair_col(klon) &176 & , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_ col(klon))177 d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_q t_col=0. ; d_ek_col=0. ; d_h_dair_col =0.178 d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_ col=0.177 allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qbs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) & 178 & , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_qbs_col(klon), d_h_col(klon)) 179 d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qbs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0. 180 d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_qbs_col=0. ; d_h_col=0. 179 181 180 182 ! Outputs used in cloudth_vert … … 223 225 deallocate(sza_o) 224 226 deallocate (bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent) 225 deallocate (d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &226 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col)227 deallocate (d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col & 228 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col) 227 229 228 230 ! Outputs used in cloudth_vert -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_write_mod.F90
r4489 r4669 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, & 141 o_pfraclr, o_pfracld, & 140 142 o_duphy, o_dtphy, o_dqphy, o_dqphy2d, o_dqlphy, o_dqlphy2d, & 141 o_dqsphy, o_dqsphy2d, o_ albe_srf, o_z0m_srf, o_z0h_srf, &143 o_dqsphy, o_dqsphy2d, o_dqbsphy, o_dqbsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, & 142 144 o_ages_srf, o_snow_srf, o_alb1, o_alb2, o_tke, o_tke_dissip, & 143 145 o_tke_max, o_kz, o_kz_max, o_clwcon, & 144 146 o_dtdyn, o_dqdyn, o_dqdyn2d, o_dqldyn, o_dqldyn2d, & 145 o_dqsdyn, o_dqsdyn2d, o_d udyn, o_dvdyn, &147 o_dqsdyn, o_dqsdyn2d, o_dqbsdyn, o_dqbsdyn2d, o_dudyn, o_dvdyn, & 146 148 o_dtcon, o_tntc, o_ducon, o_dvcon, & 147 149 o_dqcon, o_dqcon2d, o_tnhusc, o_tnhusc, o_dtlsc, & … … 151 153 o_ptconvth, o_lmaxth, o_dtvdf, & 152 154 o_dtdis, o_dqvdf, o_dqvdf2d, o_dteva, o_dqeva, o_dqeva2d, & 155 o_dqbsvdf, o_dtbs, o_dqbs, o_dqbsbs, & 153 156 o_ptconv, o_ratqs, o_dtthe, & 154 157 o_duthe, o_dvthe, o_ftime_th, & … … 204 207 o_dxtajs,o_dxtvdf,o_dxtthe, o_dxtch4, & 205 208 o_dxtprod_nucl,o_dxtcosmo,o_dxtdecroiss, & 209 o_xtevap_srf, & 206 210 #endif 207 211 ! Tropopause … … 219 223 o_flx_co2_ff, o_flx_co2_bb, & 220 224 o_delta_sst, o_delta_sal, o_ds_ns, o_dt_ns, o_dter, o_dser, o_tkt, & 221 o_tks, o_taur, o_sss 225 o_tks, o_taur, o_sss, & 226 !FC 227 o_zxfluxt,o_zxfluxq 222 228 223 229 #ifdef CPP_StratAer … … 241 247 USE phys_state_var_mod, ONLY: heat_volc, cool_volc !NL 242 248 243 USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, &249 USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, bs_fall,& 244 250 qsol, z0m, z0h, fevap, agesno, & 245 nday_rain, rain_con, snow_con, &251 nday_rain, ndayrain_mth, rain_con, snow_con, & 246 252 topsw, toplw, toplw0, swup, swdn, solswfdiff, & 247 253 topsw0, swupc0, swdnc0, swup0, swdn0, SWup200, SWup200clr, & … … 269 275 wTSTD, u2STD, v2STD, T2STD, missing_val_nf90, delta_sal, ds_ns, & 270 276 #ifdef ISO 271 xtrain_con, xtsnow_con, xtrain_fall, xtsnow_fall, &277 xtrain_con, xtsnow_con, xtrain_fall, xtsnow_fall, fxtevap, & 272 278 #endif 273 279 dt_ns, delta_sst, dter, dser … … 275 281 USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, & 276 282 zn2mout, t2m_min_mon, t2m_max_mon, evap, & 283 snowerosion, zxustartlic, zxrhoslic, & 277 284 l_mixmin,l_mix, tke_dissip, & 278 285 zu10m, zv10m, zq2m, zustar, zxqsurf, & … … 288 295 uwat, vwat, & 289 296 rneb_seri, d_rneb_dyn, & 290 plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw, &297 plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw,prbsw, & 291 298 s_pblh, s_pblt, s_lcl, s_therm, uwriteSTD, & 292 299 vwriteSTD, wwriteSTD, phiwriteSTD, qwriteSTD, & … … 308 315 alp_bl_stat, alp_bl_fluct_tke, slab_wfbils, & 309 316 weak_inversion, dthmin, cldtau, cldemi, & 310 pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, &317 pmflxr, pmflxs, prfl, psfl,bsfl, re, fl, rh2m, & 311 318 qsat2m, tpote, tpot, d_ts, od443aer, od550aer, dryod550aer, & 312 319 od865aer, abs550aer, od550lt1aer, sconcso4, sconcno3, & … … 324 331 icc3dcon, icc3dstra, zfice, reffclwtop, & 325 332 ec550aer, flwc, fiwc, t_seri, theta, q_seri, & 326 ql_seri, qs_seri, tr_seri,&333 ql_seri, qs_seri, qbs_seri, tr_seri, qbs_seri,& 327 334 zphi, u_seri, v_seri, omega, cldfra, & 328 rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, d_t_dyn, & 329 d_q_dyn, d_ql_dyn, d_qs_dyn, & 330 d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, & 335 rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, & 336 pfraclr, pfracld, d_t_dyn, & 337 d_q_dyn, d_ql_dyn, d_qs_dyn, d_qbs_dyn, & 338 d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d, & 331 339 d_u_dyn, d_v_dyn, d_t_con, d_t_ajsb, d_t_ajs, & 332 340 d_u_ajs, d_v_ajs, & … … 336 344 d_t_lscst, d_q_lscth, d_q_lscst, plul_th, & 337 345 plul_st, d_t_vdf, d_t_diss, d_q_vdf, d_q_eva, & 346 d_t_bs, d_q_bs, d_qbs_bs, d_qbs_vdf, & 338 347 zw2, fraca, zmax_th, d_q_ajsb, d_t_ec, d_u_vdf, & 339 348 d_v_vdf, d_u_oro, d_v_oro, d_t_oro, d_u_lif, & … … 350 359 #endif 351 360 ep, epmax_diag, & ! epmax_cape 352 p_tropopause, t_tropopause, z_tropopause 361 p_tropopause, t_tropopause, z_tropopause, & 362 zxfluxt,zxfluxq 363 !FC 353 364 354 365 #ifdef CPP_StratAer … … 431 442 432 443 ! Input 433 INTEGER :: itap, ivap, iliq, isol, read_climoz444 INTEGER :: itap, ivap, iliq, isol, ibs, read_climoz 434 445 INTEGER, DIMENSION(klon) :: lmax_th 435 446 LOGICAL :: aerosol_couple, ok_sync … … 887 898 888 899 IF (vars_defined) THEN 889 DO i = 1, klon 900 IF (ok_bs) THEN 901 DO i = 1, klon 902 zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) + bs_fall(i) 903 ENDDO 904 ELSE 905 DO i = 1, klon 890 906 zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) 891 ENDDO 907 ENDDO 908 ENDIF 892 909 ENDIF 893 910 894 911 CALL histwrite_phy(o_precip, zx_tmp_fi2d) 895 912 CALL histwrite_phy(o_rain_fall, rain_fall) 896 CALL histwrite_phy(o_ndayrain, nday _rain)913 CALL histwrite_phy(o_ndayrain, ndayrain_mth) 897 914 898 915 ! epmax_cape: … … 919 936 CALL histwrite_phy(o_fsnow, zfra_o) 920 937 CALL histwrite_phy(o_evap, evap) 938 939 IF (ok_bs) THEN 940 CALL histwrite_phy(o_bsfall, bs_fall) 941 CALL histwrite_phy(o_snowerosion, snowerosion) 942 CALL histwrite_phy(o_ustart_lic, zxustartlic) 943 CALL histwrite_phy(o_rhosnow_lic, zxrhoslic) 944 ENDIF 921 945 922 946 IF (vars_defined) THEN … … 1105 1129 ENDIF 1106 1130 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 1131 1119 1132 DO nsrf = 1, nbsrf … … 1281 1294 CALL histwrite_phy(o_prlw, prlw) 1282 1295 CALL histwrite_phy(o_prsw, prsw) 1296 IF (ok_bs) THEN 1297 CALL histwrite_phy(o_prbsw, prbsw) 1298 ENDIF 1283 1299 CALL histwrite_phy(o_s_pblh, s_pblh) 1284 1300 CALL histwrite_phy(o_s_pblt, s_pblt) … … 1526 1542 CALL histwrite_phy(o_re, re) 1527 1543 CALL histwrite_phy(o_fl, fl) 1544 1545 IF (ok_bs) THEN 1546 CALL histwrite_phy(o_pr_bs, bsfl(:,1:klev)) 1547 ENDIF 1548 1528 1549 IF (vars_defined) THEN 1529 1550 DO i=1, klon … … 1783 1804 CALL histwrite_phy(o_ovap, q_seri) 1784 1805 CALL histwrite_phy(o_oliq, ql_seri) 1806 !FC 1807 CALL histwrite_phy(o_zxfluxt, zxfluxt) 1808 CALL histwrite_phy(o_zxfluxq, zx_tmp_fi3d) 1809 !FC 1785 1810 1786 1811 IF (vars_defined) zx_tmp_fi3d = ql_seri+qs_seri … … 1796 1821 IF (vars_defined) zx_tmp_fi3d = zphi/RG 1797 1822 CALL histwrite_phy(o_zfull,zx_tmp_fi3d) 1823 1824 IF (ok_bs) THEN 1825 CALL histwrite_phy(o_qbs, qbs_seri) 1826 ENDIF 1798 1827 1799 1828 #ifdef CPP_XIOS … … 1846 1875 IF (vars_defined) zx_tmp_fi3d = zx_rhi * 100. 1847 1876 CALL histwrite_phy(o_rhi, zx_tmp_fi3d) 1877 ENDIF 1878 1879 IF (ok_new_lscp) THEN 1880 CALL histwrite_phy(o_pfraclr, pfraclr) 1881 CALL histwrite_phy(o_pfracld, pfracld) 1848 1882 ENDIF 1849 1883 … … 1908 1942 zx_tmp_fi2d=0.0 1909 1943 CALL histwrite_phy(o_dqsphy2d, zx_tmp_fi2d) 1944 ENDIF 1945 1946 1947 IF (ok_bs) THEN 1948 CALL histwrite_phy(o_dqbsphy, d_qx(:,:,ibs)) 1949 IF (vars_defined) CALL water_int(klon,klev,d_qx(:,:,ibs),zmasse,zx_tmp_fi2d) 1950 CALL histwrite_phy(o_dqbsphy2d, zx_tmp_fi2d) 1951 ELSE 1952 zx_tmp_fi3d=0.0 1953 CALL histwrite_phy(o_dqbsphy, zx_tmp_fi3d) 1954 zx_tmp_fi2d=0.0 1955 CALL histwrite_phy(o_dqbsphy2d, zx_tmp_fi2d) 1910 1956 ENDIF 1911 1957 … … 1958 2004 1959 2005 CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d) 2006 2007 IF (ok_bs) THEN 2008 CALL histwrite_phy(o_dqbsdyn, d_qbs_dyn) 2009 CALL histwrite_phy(o_dqbsdyn2d, d_qbs_dyn2d) 2010 ENDIF 1960 2011 1961 2012 CALL histwrite_phy(o_dudyn, d_u_dyn) … … 2101 2152 ENDIF 2102 2153 CALL histwrite_phy(o_dvthe, zx_tmp_fi3d) 2154 2155 IF (ok_bs) THEN 2156 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_vdf(1:klon,1:klev)/pdtphys 2157 CALL histwrite_phy(o_dqbsvdf, zx_tmp_fi3d) 2158 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_bs(1:klon,1:klev)/pdtphys 2159 CALL histwrite_phy(o_dqbsbs, zx_tmp_fi3d) 2160 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_bs(1:klon,1:klev)/pdtphys 2161 CALL histwrite_phy(o_dqbs, zx_tmp_fi3d) 2162 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_t_bs(1:klon,1:klev)/pdtphys 2163 CALL histwrite_phy(o_dtbs, zx_tmp_fi3d) 2164 ENDIF 2103 2165 2104 2166 IF (iflag_thermals>=1) THEN … … 2614 2676 CALL histwrite_phy(o_xtoliq(ixt), xtl_seri(ixt,:,:)) 2615 2677 2678 DO nsrf = 1, nbsrf ! ajout Camille 8 mai 2023 2679 IF (vars_defined) zx_tmp_fi2d(1 : klon) = fxtevap(ixt,:, nsrf) 2680 CALL histwrite_phy(o_xtevap_srf(ixt,nsrf), zx_tmp_fi2d) 2681 ENDDO 2682 2616 2683 IF (vars_defined) zx_tmp_fi3d(:,:)=xtl_seri(ixt,:,:)+xts_seri(ixt,:,:) 2617 2684 CALL histwrite_phy(o_xtcond(ixt), zx_tmp_fi3d) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_state_var_mod.F90
r4370 r4669 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(:,:,:) … … 313 313 REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 314 314 !$OMP THREADPRIVATE(total_rain,nday_rain) 315 REAL,ALLOCATABLE,SAVE :: ndayrain_mth(:) 316 !$OMP THREADPRIVATE(ndayrain_mth) 315 317 REAL,ALLOCATABLE,SAVE :: paire_ter(:) 316 318 !$OMP THREADPRIVATE(paire_ter) … … 547 549 ALLOCATE(rain_fall(klon)) 548 550 ALLOCATE(snow_fall(klon)) 551 ALLOCATE(bs_fall(klon)) 549 552 ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon)) 550 553 sollw=0.0 … … 556 559 ALLOCATE(rugoro(klon)) 557 560 ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev)) 558 ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev) )559 ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon) )561 ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev), qbs_ancien(klon,klev)) 562 ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon), prbsw_ancien(klon)) 560 563 ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev)) 561 564 !!! Rom P >>> … … 655 658 ALLOCATE(pfrac_1nucl(klon,klev)) 656 659 ALLOCATE(total_rain(klon), nday_rain(klon)) 660 ALLOCATE(ndayrain_mth(klon)) 657 661 ALLOCATE(paire_ter(klon)) 658 662 ALLOCATE(albsol1(klon), albsol2(klon)) … … 763 767 !FC 764 768 DEALLOCATE(treedrg) 765 DEALLOCATE(rain_fall, snow_fall, solsw, solswfdiff, sollw, radsol, swradcorr)769 DEALLOCATE(rain_fall, snow_fall, bs_fall,solsw, solswfdiff, sollw, radsol, swradcorr) 766 770 DEALLOCATE(zmea, zstd, zsig, zgam) 767 771 DEALLOCATE(zthe, zpic, zval) 768 772 DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon) 769 DEALLOCATE(qs_ancien, ql_ancien, rneb_ancien)770 DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien )773 DEALLOCATE(qs_ancien, ql_ancien, qbs_ancien, rneb_ancien) 774 DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien) 771 775 DEALLOCATE(qtc_cv,sigt_cv) 772 776 DEALLOCATE(u_ancien, v_ancien) … … 835 839 DEALLOCATE(pfrac_1nucl) 836 840 DEALLOCATE(total_rain, nday_rain) 841 DEALLOCATE(ndayrain_mth) 837 842 DEALLOCATE(paire_ter) 838 843 DEALLOCATE(albsol1, albsol2) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/physiq_mod.F90
r4661 r4669 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 … … 141 142 !!!!!!!!!!!!!!!!!! END "USE" for CPP keys !!!!!!!!!!!!!!!!!!!!!! 142 143 144 USE physiqex_mod, ONLY : physiqex 143 145 USE phys_local_var_mod, ONLY: phys_local_var_init, phys_local_var_end, & 144 146 ! [Variables internes non sauvegardees de la physique] 145 147 ! Variables locales pour effectuer les appels en serie 146 t_seri,q_seri,ql_seri,qs_seri, u_seri,v_seri,tr_seri,rneb_seri, &148 t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, & 147 149 rhcl, & 148 150 ! Dynamic tendencies (diagnostics) 149 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_ u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &150 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &151 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, & 152 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, & 151 153 ! Physic tendencies 152 154 d_t_con,d_q_con,d_u_con,d_v_con, & … … 165 167 plul_st,plul_th, & 166 168 ! 167 d_t_vdf,d_q_vdf, d_u_vdf,d_v_vdf,d_t_diss, &169 d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, & 168 170 d_t_vdf_x, d_t_vdf_w, & 169 171 d_q_vdf_x, d_q_vdf_w, & 170 172 d_ts, & 173 ! 174 d_t_bs,d_q_bs,d_qbs_bs, & 171 175 ! 172 176 ! d_t_oli,d_u_oli,d_v_oli, & … … 216 220 cldh, cldl,cldm, cldq, cldt, & 217 221 JrNt, & 218 dthmin, evap, fder, plcl, plfc, &219 prw, prlw, prsw, &222 dthmin, evap, snowerosion,fder, plcl, plfc, & 223 prw, prlw, prsw, prbsw, & 220 224 s_lcl, s_pblh, s_pblt, s_therm, & 221 225 cdragm, cdragh, & … … 290 294 ! 291 295 rneblsvol, & 296 pfraclr,pfracld, & 297 distcltop, & 292 298 zqsatl, zqsats, & 293 299 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & … … 305 311 fsolsw, wfbils, wfbilo, & 306 312 wfevap, wfrain, wfsnow, & 307 prfl, psfl, fraca, Vprecip, &313 prfl, psfl,bsfl, fraca, Vprecip, & 308 314 zw2, & 309 315 ! … … 317 323 beta_prec, & 318 324 rneb, & 319 zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic 320 ! 325 zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic, & 326 zxfluxt,zxfluxq 327 ! 328 USE output_physiqex_mod, ONLY: output_physiqex 329 321 330 322 331 IMPLICIT NONE … … 461 470 !====================================================================== 462 471 ! 463 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 464 INTEGER,SAVE :: ivap, iliq, isol, irneb 465 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb )472 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 473 INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs 474 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs) 466 475 ! 467 476 ! … … 834 843 !XXX PB 835 844 REAL fluxq(klon,klev, nbsrf) ! flux turbulent d'humidite 836 ! 837 REAL zxfluxt(klon, klev) 838 REAL zxfluxq(klon, klev) 845 REAL fluxqbs(klon,klev, nbsrf) ! flux turbulent de neige soufflee 846 ! 847 !FC REAL zxfluxt(klon, klev) 848 !FC REAL zxfluxq(klon, klev) 849 REAL zxfluxqbs(klon,klev) 839 850 REAL zxfluxu(klon, klev) 840 851 REAL zxfluxv(klon, klev) … … 920 931 ! 921 932 ! tendance nulles 922 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 933 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0 923 934 REAL, dimension(klon) :: dsig0, ddens0 924 935 INTEGER, dimension(klon) :: wkoccur1 … … 944 955 LOGICAL, SAVE :: ok_bug_split_th = .TRUE. 945 956 !$OMP THREADPRIVATE(ok_bug_split_th) 957 958 ! Logical switch to a bug : modifying directly wake_deltat by adding 959 ! the (w) dry adjustment tendency to wake_deltat 960 LOGICAL, SAVE :: ok_bug_ajs_cv = .TRUE. 961 !$OMP THREADPRIVATE(ok_bug_ajs_cv) 946 962 947 963 ! … … 1061 1077 REAL ztsol(klon) 1062 1078 REAL q2m(klon,nbsrf) ! humidite a 2m 1063 1079 REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface 1080 REAL qbsfra ! blowing snow fraction 1064 1081 !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels 1065 1082 CHARACTER*40 t2mincels, t2maxcels !t2m min., t2m max … … 1136 1153 !IM 100106 BEG : pouvoir sortir les ctes de la physique 1137 1154 include "conema3.h" 1138 include "fisrtilp.h"1139 1155 include "nuage.h" 1140 1156 include "compbl.h" … … 1144 1160 ! Declarations pour Simulateur COSP 1145 1161 !============================================================ 1162 ! AI 10-22 1163 #ifdef CPP_COSP 1164 include "ini_COSP.h" 1165 #endif 1146 1166 real :: mr_ozone(klon,klev), phicosp(klon,klev) 1147 1167 … … 1218 1238 REAL pi 1219 1239 1240 1241 !======================================================================! 1242 ! Bifurcation vers un nouveau moniteur physique pour experimenter ! 1243 ! des solutions et préparer le couplage avec la physique de MesoNH ! 1244 ! 14 mai 2023 ! 1245 !======================================================================! 1246 if (debut) then ! 1247 iflag_physiq=0 1248 call getin_p('iflag_physiq', iflag_physiq) ! 1249 endif ! 1250 if ( iflag_physiq == 2 ) then ! 1251 call physiqex (nlon,nlev, & ! 1252 debut,lafin,pdtphys_, & ! 1253 paprs,pplay,pphi,pphis,presnivs, & ! 1254 u,v,rot,t,qx, & ! 1255 flxmass_w, & ! 1256 d_u, d_v, d_t, d_qx, d_ps) ! 1257 return ! 1258 endif ! 1259 !======================================================================! 1260 1261 1220 1262 pi = 4. * ATAN(1.) 1221 1263 … … 1244 1286 ! Utilise notamment en 1D mais peut etre active egalement en 3D 1245 1287 ! en imposant la valeur de igout. 1246 !====================================================================== d1288 !====================================================================== 1247 1289 IF (prt_level.ge.1) THEN 1248 1290 igout=klon/2+1/klon … … 1275 1317 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1276 1318 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1319 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1277 1320 CALL init_etat0_limit_unstruct 1278 1321 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1324 1367 ENDIF 1325 1368 1326 IF (ok_ice_sursat.AND.(nqo. NE.4)) THEN1369 IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN 1327 1370 WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', & 1328 1371 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.' … … 1342 1385 CALL abort_physic(modname,abort_message,1) 1343 1386 ENDIF 1387 1388 IF (ok_bs) THEN 1389 IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN 1390 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1391 'but nqo=', nqo 1392 abort_message='see above' 1393 CALL abort_physic(modname,abort_message, 1) 1394 ENDIF 1395 ENDIF 1344 1396 1345 1397 Ncvpaseq1 = 0 … … 1404 1456 CALL getin_p('ok_bug_cv_trac',ok_bug_cv_trac) 1405 1457 CALL getin_p('ok_bug_split_th',ok_bug_split_th) 1458 CALL getin_p('ok_bug_ajs_cv',ok_bug_ajs_cv) 1406 1459 fl_ebil = 0 ! by default, conservation diagnostics are desactivated 1407 1460 CALL getin_p('fl_ebil',fl_ebil) … … 1676 1729 IF (.NOT. create_etat0_limit) CALL init_readaerosolstrato(flag_aerosol_strat) !! initialise aero strato from file for XIOS interpolation (unstructured_grid) 1677 1730 1731 if (ok_cosp) then 1678 1732 #ifdef CPP_COSP 1679 IF (ok_cosp) THEN1680 ! DO k = 1, klev 1681 ! DO i = 1, klon 1682 ! phicosp(i,k) = pphi(i,k) + pphis(i) 1683 ! ENDDO 1684 ! ENDDO 1733 ! A.I : Initialisations pour le 1er passage a Cosp 1734 CALL ini_COSP(ref_liq_cosp0,ref_ice_cosp0,pctsrf_cosp0,zu10m_cosp0,zv10m_cosp0, & 1735 zxtsol_cosp0,zx_rh_cosp0,cldfra_cosp0,rnebcon_cosp0,flwc_cosp0, & 1736 fiwc_cosp0,prfl_cosp0,psfl_cosp0,pmflxr_cosp0,pmflxs_cosp0, & 1737 mr_ozone_cosp0,cldtau_cosp0,cldemi_cosp0,JrNt_cosp0) 1738 1685 1739 CALL phys_cosp(itap,phys_tstep,freq_cosp, & 1686 1740 ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, & … … 1695 1749 pmflxr(:,1:klev),pmflxs(:,1:klev), & 1696 1750 mr_ozone,cldtau, cldemi) 1697 ENDIF1698 1751 #endif 1699 1752 1700 1753 #ifdef CPP_COSP2 1701 IF (ok_cosp) THEN1702 ! DO k = 1, klev1703 ! DO i = 1, klon1704 ! phicosp(i,k) = pphi(i,k) + pphis(i)1705 ! ENDDO1706 ! ENDDO1707 1754 CALL phys_cosp2(itap,phys_tstep,freq_cosp, & 1708 1755 ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, & … … 1717 1764 pmflxr(:,1:klev),pmflxs(:,1:klev), & 1718 1765 mr_ozone,cldtau, cldemi) 1719 ENDIF1720 1766 #endif 1721 1767 1722 1768 #ifdef CPP_COSPV2 1723 IF (ok_cosp) THEN1724 DO k = 1, klev1725 DO i = 1, klon1726 phicosp(i,k) = pphi(i,k) + pphis(i)1727 ENDDO1728 ENDDO1729 1769 CALL lmdz_cosp_interface(itap,phys_tstep,freq_cosp, & 1730 1770 ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, & … … 1739 1779 pmflxr(:,1:klev),pmflxs(:,1:klev), & 1740 1780 mr_ozone,cldtau, cldemi) 1741 ENDIF1742 1781 #endif 1782 ENDIF 1743 1783 1744 1784 ! … … 1756 1796 CALL thermcell_ini(iflag_thermals,prt_level,tau_thermals,lunout, & 1757 1797 & RG,RD,RCPD,RKAPPA,RLVTT,RETV) 1758 IF (ok_new_lscp) then 1759 CALL lscp_ini(pdtphys,ok_ice_sursat) 1760 endif 1798 CALL lscp_ini(pdtphys,ok_ice_sursat, RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG) 1799 CALL blowing_snow_ini(prt_level,lunout, & 1800 RCPD, RLSTT, RLVTT, RLMLT, & 1801 RVTMP2, RTT,RD,RG) 1802 1761 1803 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1762 1804 … … 1784 1826 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 1785 1827 pplay, lmax_th, aerosol_couple, & 1786 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&1828 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync,& 1787 1829 ptconv, read_climoz, clevSTD, & 1788 1830 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 2255 2297 dql0(:,:)=0. 2256 2298 dqi0(:,:)=0. 2299 dqbs0(:,:)=0. 2257 2300 dsig0(:) = 0. 2258 2301 ddens0(:) = 0. … … 2307 2350 q_seri(i,k) = qx(i,k,ivap) 2308 2351 ql_seri(i,k) = qx(i,k,iliq) 2352 qbs_seri(i,k) = 0. 2309 2353 !CR: ATTENTION, on rajoute la variable glace 2310 2354 IF (nqo.EQ.2) THEN !--vapour and liquid only … … 2314 2358 qs_seri(i,k) = qx(i,k,isol) 2315 2359 rneb_seri(i,k) = 0. 2316 ELSE IF (nqo. EQ.4) THEN !--vapour, liquid, ice and rneb2360 ELSE IF (nqo.GE.4) THEN !--vapour, liquid, ice and rneb and blowing snow 2317 2361 qs_seri(i,k) = qx(i,k,isol) 2362 IF (ok_ice_sursat) THEN 2318 2363 rneb_seri(i,k) = qx(i,k,irneb) 2364 ENDIF 2365 IF (ok_bs) THEN 2366 qbs_seri(i,k)= qx(i,k,ibs) 2367 ENDIF 2368 2319 2369 ENDIF 2370 2371 2320 2372 ENDDO 2321 2373 ENDDO … … 2326 2378 qql1(:)=0.0 2327 2379 DO k = 1, klev 2328 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k) )*zmasse(:,k)2380 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k) 2329 2381 ENDDO 2330 2382 ENDIF … … 2382 2434 d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep 2383 2435 d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep 2436 d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2384 2437 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2385 2438 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2388 2441 CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d) 2389 2442 d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep 2443 CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d) 2444 d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep 2390 2445 ! !! RomP >>> td dyn traceur 2391 2446 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep … … 2403 2458 d_ql_dyn2d(:) = 0.0 2404 2459 d_qs_dyn2d(:) = 0.0 2460 d_qbs_dyn2d(:)= 0.0 2405 2461 ! !! RomP >>> td dyn traceur 2406 2462 IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0 2407 2463 ! !! RomP <<< 2408 2464 d_rneb_dyn(:,:)=0.0 2465 d_qbs_dyn(:,:)=0.0 2409 2466 ancien_ok = .TRUE. 2410 2467 ENDIF … … 2522 2579 2523 2580 CALL add_phys_tend & 2524 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva, paprs,&2581 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,& 2525 2582 'eva',abortphy,flag_inhib_tend,itap,0) 2526 2583 CALL prt_enerbil('eva',itap) … … 2698 2755 longitude_deg, latitude_deg, rugoro, zrmu0, & 2699 2756 sollwdown, cldt, & 2700 rain_fall, snow_fall, solsw, solswfdiff, sollw, &2757 rain_fall, snow_fall, bs_fall, solsw, solswfdiff, sollw, & 2701 2758 gustiness, & 2702 t_seri, q_seri, u_seri, v_seri, &2759 t_seri, q_seri, qbs_seri, u_seri, v_seri, & 2703 2760 !nrlmd+jyg< 2704 2761 wake_deltat, wake_deltaq, wake_cstar, wake_s, & … … 2711 2768 !albedo SB >>> 2712 2769 ! albsol1, albsol2, sens, evap, & 2713 albsol_dir, albsol_dif, sens, evap, 2770 albsol_dir, albsol_dif, sens, evap, snowerosion, & 2714 2771 !albedo SB <<< 2715 2772 albsol3_lic,runoff, snowhgt, qsnow, to_ice, sissnow, & 2716 2773 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 2717 d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_t_diss, &2774 d_t_vdf, d_q_vdf, d_qbs_vdf, d_u_vdf, d_v_vdf, d_t_diss, & 2718 2775 !nrlmd< 2719 2776 !jyg< … … 2741 2798 fluxt, fluxu, fluxv, & 2742 2799 dsens, devap, zxsnow, & 2743 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke, &2800 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, & 2744 2801 !nrlmd+jyg< 2745 2802 wake_delta_pbl_TKE, & … … 2766 2823 IF (klon_glo==1) THEN 2767 2824 CALL add_pbl_tend & 2768 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&2825 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 2769 2826 'vdf',abortphy,flag_inhib_tend,itap) 2770 2827 ELSE 2771 2828 CALL add_phys_tend & 2772 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&2829 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 2773 2830 'vdf',abortphy,flag_inhib_tend,itap,0) 2774 2831 ENDIF 2775 2832 CALL prt_enerbil('vdf',itap) 2833 2776 2834 !-------------------------------------------------------------------- 2777 2835 … … 2824 2882 2825 2883 ENDIF 2884 2885 ! ================================================================== 2886 ! Blowing snow sublimation and sedimentation 2887 2888 d_t_bs(:,:)=0. 2889 d_q_bs(:,:)=0. 2890 d_qbs_bs(:,:)=0. 2891 bsfl(:,:)=0. 2892 bs_fall(:)=0. 2893 IF (ok_bs) THEN 2894 2895 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, & 2896 d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall) 2897 2898 CALL add_phys_tend & 2899 (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,& 2900 'bs',abortphy,flag_inhib_tend,itap,0) 2901 2902 ENDIF 2903 2826 2904 ! =================================================================== c 2827 2905 ! Calcul de Qsat … … 2994 3072 ENDDO 2995 3073 ENDDO 2996 IF (iflag_adjwk == 2 ) THEN3074 IF (iflag_adjwk == 2 .AND. OK_bug_ajs_cv) THEN 2997 3075 CALL add_wake_tend & 2998 3076 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy) 2999 ENDIF ! (iflag_adjwk == 2 )3077 ENDIF ! (iflag_adjwk == 2 .AND. OK_bug_ajs_cv) 3000 3078 ENDIF ! (iflag_adjwk >= 1) 3001 3079 ENDIF ! (iflag_wake>=1) … … 3248 3326 !! 3249 3327 !! 3250 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &3328 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, & 3251 3329 'convection',abortphy,flag_inhib_tend,itap,0) 3252 3330 CALL prt_enerbil('convection',itap) … … 3379 3457 !----------------------------------------------------------------------- 3380 3458 ! ajout des tendances des poches froides 3381 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0, paprs,'wake', &3459 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', & 3382 3460 abortphy,flag_inhib_tend,itap,0) 3383 3461 CALL prt_enerbil('wake',itap) … … 3537 3615 ! 3538 3616 CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs, & 3539 dql0,dqi0, paprs,'thermals', abortphy,flag_inhib_tend,itap,0)3617 dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0) 3540 3618 CALL prt_enerbil('thermals',itap) 3541 3619 ! … … 3599 3677 !-------------------------------------------------------------------- 3600 3678 ! ajout des tendances de l'ajustement sec ou des thermiques 3601 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0, paprs, &3679 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, & 3602 3680 'ajsb',abortphy,flag_inhib_tend,itap,0) 3603 3681 CALL prt_enerbil('ajsb',itap) … … 3633 3711 ptconv,ptconvth,clwcon0th, rnebcon0th, & 3634 3712 paprs,pplay,t_seri,q_seri, qtc_cv, sigt_cv, zqsat, & 3635 pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm, &3713 pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm,cell_area, & 3636 3714 ratqs,ratqsc,ratqs_inter) 3637 3715 … … 3657 3735 t_seri, q_seri,ptconv,ratqs, & 3658 3736 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 3737 pfraclr,pfracld, & 3659 3738 radocond, picefra, rain_lsc, snow_lsc, & 3660 3739 frac_impa, frac_nucl, beta_prec_fisrt, & 3661 3740 prfl, psfl, rhcl, & 3662 3741 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, & 3663 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, &3742 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, & 3664 3743 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 3665 3744 Tcontr, qcontr, qcontr2, fcontrN, fcontrP ) … … 3688 3767 ! write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1) 3689 3768 !-JLD 3690 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc, paprs, &3769 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, & 3691 3770 'lsc',abortphy,flag_inhib_tend,itap,0) 3692 3771 CALL prt_enerbil('lsc',itap) … … 3711 3790 ENDIF 3712 3791 3713 !--------------------------------------------------------------------------- 3792 3793 !--------------------------------------------------------------------------- 3714 3794 DO k = 1, klev 3715 3795 DO i = 1, klon 3716 3796 cldfra(i,k) = rneb(i,k) 3717 3797 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 3798 !EV: en effet etrange, j'ajouterais aussi qs_seri 3799 ! plus largement, je nettoierais (enleverrais) ces lignes 3718 3800 IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k) 3719 3801 ENDDO 3720 3802 ENDDO 3803 3804 3805 ! Option to activate the radiative effect of blowing snow (ok_rad_bs) 3806 ! makes sense only if the new large scale condensation scheme is active 3807 ! with the ok_icefra_lscp flag active as well 3808 3809 IF (ok_bs .AND. ok_rad_bs) THEN 3810 IF (ok_new_lscp .AND. ok_icefra_lscp) THEN 3811 DO k=1,klev 3812 DO i=1,klon 3813 radocond(i,k)=radocond(i,k)+qbs_seri(i,k) 3814 picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k)) 3815 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 3816 cldfra(i,k)=max(cldfra(i,k),qbsfra) 3817 ENDDO 3818 ENDDO 3819 ELSE 3820 WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow" 3821 WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false" 3822 abort_message='inconsistency in cloud phase for blowing snow' 3823 CALL abort_physic(modname,abort_message,1) 3824 ENDIF 3825 3826 ENDIF 3827 3721 3828 IF (check) THEN 3722 3829 za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area) … … 4206 4313 flwp, fiwp, flwc, fiwc, & 4207 4314 mass_solu_aero, mass_solu_aero_pi, & 4208 cldtaupi, latitude_deg, re, fl, ref_liq, ref_ice, &4315 cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, & 4209 4316 ref_liq_pi, ref_ice_pi) 4210 4317 ELSE … … 4214 4321 ok_aie, & 4215 4322 mass_solu_aero, mass_solu_aero_pi, & 4216 bl95_b0, bl95_b1, &4323 bl95_b0, bl95_b1, distcltop, & 4217 4324 cldtaupi, re, fl) 4218 4325 ENDIF … … 4519 4626 ENDDO 4520 4627 4521 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0, paprs,'SW',abortphy,flag_inhib_tend,itap,0)4628 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0) 4522 4629 CALL prt_enerbil('SW',itap) 4523 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0, paprs,'LW',abortphy,flag_inhib_tend,itap,0)4630 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0) 4524 4631 CALL prt_enerbil('LW',itap) 4525 4632 … … 4596 4703 !----------------------------------------------------------------------- 4597 4704 ! ajout des tendances de la trainee de l'orographie 4598 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0, paprs,'oro', &4705 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', & 4599 4706 abortphy,flag_inhib_tend,itap,0) 4600 4707 CALL prt_enerbil('oro',itap) … … 4647 4754 4648 4755 ! ajout des tendances de la portance de l'orographie 4649 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &4756 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, & 4650 4757 'lif', abortphy,flag_inhib_tend,itap,0) 4651 4758 CALL prt_enerbil('lif',itap) … … 4672 4779 d_t_hin(:, :)=0. 4673 4780 CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, & 4674 dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)4781 dqi0, dqbs0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0) 4675 4782 CALL prt_enerbil('hin',itap) 4676 4783 ENDIF … … 4690 4797 ENDDO 4691 4798 4692 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &4799 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, & 4693 4800 paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0) 4694 4801 CALL prt_enerbil('front_gwd_rando',itap) … … 4699 4806 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 4700 4807 du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress) 4701 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &4808 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, & 4702 4809 paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0) 4703 4810 CALL prt_enerbil('flott_gwd_rando',itap) … … 4751 4858 ! ajout de la tendance d'humidite due au methane 4752 4859 d_q_ch4_dtime(:,:) = d_q_ch4(:,:)*phys_tstep 4753 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &4860 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, & 4754 4861 'q_ch4', abortphy,flag_inhib_tend,itap,0) 4755 4862 d_q_ch4(:,:) = d_q_ch4_dtime(:,:)/phys_tstep … … 5056 5163 5057 5164 CALL add_phys_tend & 5058 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep, paprs,&5165 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,& 5059 5166 'rep',abortphy,flag_inhib_tend,itap,0) 5060 5167 IF (abortphy==1) Print*,'ERROR ABORT REP' … … 5133 5240 ! prlw = colonne eau liquide 5134 5241 ! prlw = colonne eau solide 5242 ! prbsw = colonne neige soufflee 5135 5243 prw(:) = 0. 5136 5244 prlw(:) = 0. 5137 5245 prsw(:) = 0. 5246 prbsw(:) = 0. 5138 5247 DO k = 1, klev 5139 5248 prw(:) = prw(:) + q_seri(:,k)*zmasse(:,k) 5140 5249 prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k) 5141 5250 prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k) 5251 prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k) 5142 5252 ENDDO 5143 5253 ! … … 5198 5308 ENDIF 5199 5309 !--ice_sursat: nqo=4, on ajoute rneb 5200 IF (nqo == 4) THEN5310 IF (nqo.ge.4 .and. ok_ice_sursat) THEN 5201 5311 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 5202 5312 ENDIF 5313 5314 IF (nqo.ge.4 .and. ok_bs) THEN 5315 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 5316 ENDIF 5317 5203 5318 ENDDO 5204 5319 ENDDO … … 5247 5362 ql_ancien(:,:) = ql_seri(:,:) 5248 5363 qs_ancien(:,:) = qs_seri(:,:) 5364 qbs_ancien(:,:) = qbs_seri(:,:) 5249 5365 rneb_ancien(:,:) = rneb_seri(:,:) 5250 5366 CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien) 5251 5367 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien) 5252 5368 CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien) 5369 CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien) 5253 5370 ! !! RomP >>> 5254 5371 IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:) … … 5375 5492 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 5376 5493 pplay, lmax_th, aerosol_couple, & 5377 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, &5494 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, & 5378 5495 ok_sync, ptconv, read_climoz, clevSTD, & 5379 5496 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 5386 5503 5387 5504 #endif 5505 ! Petit appelle de sorties pour accompagner le travail sur phyex 5506 if ( iflag_physiq == 1 ) then 5507 call output_physiqex(debut,jD_eq,pdtphys,presnivs,paprs,u,v,t,qx,cldfra,0.*t,0.*t,0.*t,pbl_tke,theta) 5508 endif 5388 5509 5389 5510 !==================================================================== … … 5406 5527 ! Disabling calls to the prt_alerte function 5407 5528 alert_first_call = .FALSE. 5529 5408 5530 5409 5531 IF (lafin) THEN -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_land_mod.F90
r4283 r4669 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, & 170 183 tsol_rad, tsurf_new, alb1_new, alb2_new, & 171 184 emis_new, z0m, z0h, qsurf, & … … 184 197 !**************************************************************************************** 185 198 CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,& 186 tsurf, p1lay, cdragh, precip_rain, precip_ snow, temp_air, &199 tsurf, p1lay, cdragh, precip_rain, precip_totsnow, temp_air, & 187 200 spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, & 188 201 u1, v1, gustiness, rugoro, swnet, lwnet, & … … 192 205 z0h(1:knon)=z0m(1:knon) ! En attendant mieux 193 206 207 194 208 ENDIF ! ok_veget 209 210 ! blowing snow not treated yet over land 211 fluxbs(:)=0. 212 195 213 196 214 !**************************************************************************************** -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_land_orchidee_mod.F90
r4283 r4669 632 632 fluxsens(1:knon) = -1. * fluxsens(1:knon) 633 633 fluxlat(1:knon) = -1. * fluxlat(1:knon) 634 634 635 635 ! evap = -1. * evap 636 636 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_landice_mod.F90
r4414 r4669 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 AcoefQBS, BcoefQBS, & 17 18 ps, u1, v1, gustiness, rugoro, pctsrf, & 18 snow, qsurf, qsol, agesno, &19 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &19 snow, qsurf, qsol, qbs1, agesno, & 20 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, & 20 21 tsurf_new, dflux_s, dflux_l, & 21 22 alt, slope, cloudf, & … … 30 31 USE cpl_mod, ONLY : cpl_send_landice_fields 31 32 USE calcul_fluxs_mod 33 USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic 32 34 USE phys_output_var_mod, ONLY : snow_o,zfra_o 33 35 !FC 34 36 USE ioipsl_getin_p_mod, ONLY : getin_p 35 37 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs 36 38 37 39 #ifdef CPP_INLANDSIS … … 56 58 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 57 59 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 58 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 60 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 59 61 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 60 62 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ 61 63 REAL, DIMENSION(klon), INTENT(IN) :: BcoefH, BcoefQ 62 64 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 65 REAL, DIMENSION(klon), INTENT(IN) :: AcoefQBS, BcoefQBS 63 66 REAL, DIMENSION(klon), INTENT(IN) :: ps 64 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 67 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness, qbs1 65 68 REAL, DIMENSION(klon), INTENT(IN) :: rugoro 66 69 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf … … 94 97 !albedo SB <<< 95 98 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 99 REAL, DIMENSION(klon), INTENT(OUT) :: fluxbs 96 100 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 97 101 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l … … 134 138 135 139 REAL,DIMENSION(klon) :: alb1,alb2 140 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 136 141 REAL, DIMENSION (klon,6) :: alb6 142 REAL :: rho0, rhoice, ustart0, hsalt, esalt, rhod 143 REAL :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc 144 REAL :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard 145 REAL, DIMENSION(klon) :: ws1, rhos, ustart, qsalt 137 146 ! End definition 138 147 !**************************************************************************************** … … 165 174 alb2(:) = 999999. 166 175 alb1(:) = 999999. 167 176 fluxbs(:)=0. 168 177 runoff(:) = 0. 169 178 !**************************************************************************************** … … 173 182 radsol(:) = 0.0 174 183 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 184 185 !**************************************************************************************** 175 186 176 187 !**************************************************************************************** … … 264 275 265 276 266 267 277 ELSE 268 278 … … 314 324 flux_u1, flux_v1) 315 325 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 326 325 327 !**************************************************************************************** … … 327 329 ! 328 330 !**************************************************************************************** 331 329 332 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 330 333 331 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 332 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 333 alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 334 0.6 * (1.0-zfra(1:knon)) 334 335 ! EV: following lines are obsolete since we set alb1 and alb2 to constant values 336 ! I therefore comment them 337 ! alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 338 ! 0.6 * (1.0-zfra(1:knon)) 335 339 ! 336 340 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" … … 354 358 !z0m = SQRT(z0m**2+rugoro**2) 355 359 360 361 362 ! Simple blowing snow param 363 if (ok_bs) then 364 ustart0 = 0.211 365 rhoice = 920.0 366 rho0 = 200.0 367 rhomax=450.0 368 rhohard=400.0 369 tau_dens0=86400.0*10. ! 10 days by default, in s 370 tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory 371 372 ! computation of threshold friction velocity 373 ! which depends on surface snow density 374 do i = 1, knon 375 ! estimation of snow density 376 ! snow density increases with snow age and 377 ! increases even faster in case of sedimentation of blowing snow 378 tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs)) 379 rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens)) 380 ! blowing snow flux formula used in MAR 381 ws1(i)=(u1(i)**2+v1(i)**2)**0.5 382 ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5 383 ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax)) 384 ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till 385 ! rhohard<450) 386 enddo 387 388 ! computation of qbs at the top of the saltation layer 389 ! two formulations possible 390 ! pay attention that qbs is a mixing ratio and has to be converted 391 ! to specific content 392 393 if (iflag_saltation_bs .eq. 1) then 394 ! expression from CRYOWRF (Sharma et al. 2022) 395 aa=2.6 396 bb=2.5 397 cc=2.0 398 lambdasalt=0.45 399 do i =1, knon 400 rhod=p1lay(i)/RD/temp_air(i) 401 nunu=max(ustar(i)/ustart(i),1.e-3) 402 fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * & 403 (aa+bb*nunu**(-2)+cc*nunu**(-1)) 404 csalt=fluxsalt/(2.8*ustart(i)) 405 hsalt=0.08436*ustar(i)**1.27 406 qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) & 407 * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6)) 408 qsalt(i)=max(qsalt(i),0.) 409 enddo 410 411 412 else 413 ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001) 414 do i=1, knon 415 esalt=1./(3.25*max(ustar(i),0.001)) 416 hsalt=0.08436*ustar(i)**1.27 417 qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 418 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 419 enddo 420 endif 421 422 ! calculation of erosion (emission flux towards the first atmospheric level) 423 ! consistent with implicit resolution of turbulent mixing equation 424 do i=1, knon 425 rhod=p1lay(i)/RD/temp_air(i) 426 fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) & 427 / (1.-rhod*ws1(i)*zeta_bs*cdragm(i)*BcoefQBS(i)*dtime) 428 !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i)) 429 enddo 430 431 ! for outputs 432 do j = 1, knon 433 i = knindex(j) 434 zxustartlic(i) = ustart(j) 435 zxrhoslic(i) = rhos(j) 436 enddo 437 438 endif 439 440 441 442 !**************************************************************************************** 443 ! Calculate surface snow amount 444 ! 445 !**************************************************************************************** 446 IF (ok_bs) THEN 447 precip_totsnow(:)=precip_snow(:)+precip_bs(:) 448 evap_totsnow(:)=evap(:)-fluxbs(:) ! flux bs is positive towards the surface (snow erosion) 449 ELSE 450 precip_totsnow(:)=precip_snow(:) 451 evap_totsnow(:)=evap(:) 452 ENDIF 453 454 CALL fonte_neige(knon, is_lic, knindex, dtime, & 455 tsurf, precip_rain, precip_totsnow, & 456 snow, qsol, tsurf_new, evap_totsnow) 457 458 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 459 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 356 460 357 461 … … 378 482 runoff(1:knon)=run_off_lic(1:knon)/dtime 379 483 380 381 !****************************************************************************************382 484 snow_o=0. 383 485 zfra_o = 0. … … 420 522 !albedo SB <<< 421 523 422 423 424 524 425 525 END SUBROUTINE surf_landice -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_ocean_mod.F90
r4370 r4669 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/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/add_phys_tend_mod.F90
r4491 r4669 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/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/fisrtilp.F90
r4491 r4669 26 26 ! flag to include modifications to ensure energy conservation (if flag >0) 27 27 USE add_phys_tend_mod, only : fl_cor_ebil 28 USE lscp_ini_mod, ONLY: iflag_t_glace,t_glace_min, t_glace_max, exposant_glace 29 USE lscp_ini_mod, ONLY: iflag_cloudth_vert, iflag_rain_incloud_vol 30 USE lscp_ini_mod, ONLY: coef_eva, coef_eva_i, ffallv_lsc, ffallv_con 31 USE lscp_ini_mod, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con 32 USE lscp_ini_mod, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf 33 34 35 28 36 #ifdef ISO 29 37 USE infotrac_phy, ONLY: ntraciso=>ntiso,niso,itZonIso … … 82 90 !====================================================================== 83 91 include "YOMCST.h" 84 include "fisrtilp.h"85 include "nuage.h" ! JBM (3/14)86 87 92 ! 88 93 ! Principaux inputs: -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/pbl_surface_mod.F90
r4491 r4669 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 diffsivity coefficient for 2201 ! suspended particles is larger than Km by a factor zeta_bs 2202 ! which is equal to 3 by default 2203 do k=1,klev 2204 do j=1,knon 2205 ycoefqbs(j,k)=ycoefm(j,k)*zeta_bs 2206 enddo 2207 enddo 2208 CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, & 2209 ydelp, yt, yqbs, dtime, & 2210 CcoefQBS, DcoefQBS, & 2211 Kcoef_qbs, gama_qbs, & 2212 AcoefQBS, BcoefQBS) 2213 ENDIF 2214 2215 2173 2216 2174 2217 !**************************************************************************************** … … 2356 2399 debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, & 2357 2400 !!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,&2401 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2359 2402 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2360 2403 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2362 2405 ylwdown, yq2m, yt2m, & 2363 2406 ysnow, yqsol, yagesno, ytsoil, & 2364 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat, &2407 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,& 2365 2408 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 2366 2409 y_flux_u1, y_flux_v1, & … … 2433 2476 yrmu0, ylwdown, yalb, zgeo1, & 2434 2477 ysolsw, ysollw, yts, ypplay(:,1), & 2435 !!jyg ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2436 ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,& 2478 ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2437 2479 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2438 2480 AcoefU, AcoefV, BcoefU, BcoefV, & 2481 AcoefQBS, BcoefQBS, & 2439 2482 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2440 ysnow, yqsurf, yqsol, yagesno, &2483 ysnow, yqsurf, yqsol,yqbs1, yagesno, & 2441 2484 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 2442 y tsurf_new, y_dflux_t, y_dflux_q, &2485 yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, & 2443 2486 yzmea, yzsig, ycldt, & 2444 2487 ysnowhgt, yqsnow, ytoice, ysissnow, & … … 2499 2542 itap, dtime, jour, knon, ni, & 2500 2543 !!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 init2544 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),& ! ym missing init 2502 2545 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2503 2546 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2664 2707 ENDDO 2665 2708 ENDIF ! (ok_flux_surf) 2709 2710 ! flux of blowing snow at the first level 2711 IF (ok_bs) THEN 2712 DO j=1,knon 2713 y_flux_bs(j)=yfluxbs(j) 2714 ENDDO 2715 ENDIF 2666 2716 ! 2667 2717 ! ------------------------------------------------------------------------------ … … 2991 3041 ! 2992 3042 ENDIF ! (iflag_split .eq.0) 3043 3044 IF (ok_bs) THEN 3045 CALL climb_qbs_up(knon, dtime, yqbs, & 3046 y_flux_bs, ypaprs, ypplay, & 3047 AcoefQBS, BcoefQBS, & 3048 CcoefQBS, DcoefQBS, & 3049 Kcoef_qbs, gama_qbs, & 3050 y_flux_qbs(:,:), y_d_qbs(:,:)) 3051 ENDIF 3052 2993 3053 !!! 2994 3054 !! … … 3157 3217 !!! 3158 3218 3159 ! print*,'Dans pbl OK1' 3160 3161 !jyg< 3162 !! evap(:,nsrf) = - flux_q(:,1,nsrf) 3163 !>jyg 3219 ! tendencies of blowing snow 3220 IF (ok_bs) THEN 3221 DO k = 1, klev 3222 DO j = 1, knon 3223 i = ni(j) 3224 y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j) 3225 flux_qbs(i,k,nsrf) = y_flux_qbs(j,k) 3226 ENDDO 3227 ENDDO 3228 ENDIF 3229 3230 3164 3231 DO j = 1, knon 3165 3232 i = ni(j) 3166 3233 evap(i,nsrf) = - flux_q(i,1,nsrf) !jyg 3234 if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif 3167 3235 beta(i,nsrf) = ybeta(j) !jyg 3168 3236 d_ts(i,nsrf) = y_d_ts(j) … … 3392 3460 ENDDO 3393 3461 ENDDO 3462 3463 3464 IF (ok_bs) THEN 3465 DO k = 1, klev 3466 DO j = 1, knon 3467 i = ni(j) 3468 d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k) 3469 ENDDO 3470 ENDDO 3471 ENDIF 3472 3394 3473 3395 3474 #ifdef ISO … … 3894 3973 fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i) 3895 3974 ENDDO 3975 3976 ! if blowing snow 3977 if (ok_bs) then 3978 DO nsrf = 1, nbsrf 3979 DO k = 1, klev 3980 DO i = 1, klon 3981 zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf) 3982 ENDDO 3983 ENDDO 3984 ENDDO 3985 3986 DO i = 1, klon 3987 zxsnowerosion(i) = zxfluxqbs(i,1) ! blowings snow flux at the surface 3988 END DO 3989 endif 3990 3991 3992 3896 3993 #ifdef ISO 3897 3994 DO i = 1, klon -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phyetat0_mod.F90
r4389 r4669 24 24 qsol, fevap, z0m, z0h, agesno, & 25 25 du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, & 26 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, &27 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &28 rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, &26 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 27 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, & 28 rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, & 29 29 solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, & 30 30 wake_deltat, wake_delta_pbl_TKE, delta_tsurf, beta_aridity, wake_fip, wake_pe, & … … 349 349 found=phyetat0_get(rain_fall,"rain_f","rain fall",0.) 350 350 351 IF (ok_bs) THEN 352 found=phyetat0_get(bs_fall,"bs_f","blowing snow fall",0.) 353 ELSE 354 bs_fall(:)=0. 355 ENDIF 356 357 351 358 !======================================================================= 352 359 ! Radiation … … 410 417 ancien_ok=ancien_ok.AND.phyetat0_get(prsw_ancien,"PRSWANCIEN","PRSWANCIEN",0.) 411 418 419 ! cas specifique des variables de la neige soufflee 420 IF (ok_bs) THEN 421 ancien_ok=ancien_ok.AND.phyetat0_get(qbs_ancien,"QBSANCIEN","QBSANCIEN",0.) 422 ancien_ok=ancien_ok.AND.phyetat0_get(prbsw_ancien,"PRBSWANCIEN","PRBSWANCIEN",0.) 423 ELSE 424 qbs_ancien(:,:)=0. 425 prbsw_ancien(:)=0. 426 ENDIF 427 428 412 429 ! Ehouarn: addtional tests to check if t_ancien, q_ancien contain 413 430 ! dummy values (as is the case when generated by ce0l, … … 423 440 ancien_ok=.false. 424 441 ENDIF 442 443 IF (ok_bs) THEN 444 IF ( (maxval(qbs_ancien).EQ.minval(qbs_ancien)) .OR. & 445 (maxval(prbsw_ancien).EQ.minval(prbsw_ancien)) ) THEN 446 ancien_ok=.false. 447 ENDIF 448 ENDIF 449 425 450 426 451 found=phyetat0_get(clwcon,"CLWCON","CLWCON",0.) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phyredem.F90
r4491 r4669 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/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_local_var_mod.F90
r4143 r4669 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(:,:) … … 313 317 !$OMP THREADPRIVATE(sens, flwp, fiwp) 314 318 !! 319 !FC 320 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zxfluxt, zxfluxq 321 !$OMP THREADPRIVATE(zxfluxt, zxfluxq) 322 !FC 315 323 !! Wake variables 316 324 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: alp_wake … … 361 369 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt 362 370 !$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)371 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw 372 !$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw) 365 373 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m 366 374 !$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m) … … 379 387 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte 380 388 !$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte) 389 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic 390 !$OMP THREADPRIVATE(zxustartlic, zxrhoslic) 381 391 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving 382 392 !$OMP THREADPRIVATE(zxfqcalving) … … 567 577 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi 568 578 !$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi) 569 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca 570 !$OMP THREADPRIVATE(prfl, psfl, fraca )579 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl 580 !$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl) 571 581 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2 572 582 !$OMP THREADPRIVATE(Vprecip, zw2) … … 585 595 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rneb,rnebjn,rneblsvol 586 596 !$OMP THREADPRIVATE(rneb,rnebjn,rneblsvol) 597 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfraclr,pfracld 598 !$OMP THREADPRIVATE(pfraclr,pfracld) 599 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: distcltop 600 !$OMP THREADPRIVATE(distcltop) 587 601 588 602 ! variables de sorties MM … … 734 748 735 749 IMPLICIT NONE 736 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev) )750 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 737 751 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 738 752 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 755 ALLOCATE(tr_seri(klon,klev,nbtr)) 742 756 ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev)) 743 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev) )744 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon) )757 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev)) 758 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon)) 745 759 ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev)) 746 760 ALLOCATE(d_tr_dyn(klon,klev,nbtr)) !RomP … … 765 779 ALLOCATE(plul_st(klon),plul_th(klon)) 766 780 ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev)) 767 781 ALLOCATE (d_qbs_vdf(klon,klev)) 782 ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev)) 768 783 ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev)) 769 784 ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev)) … … 925 940 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon)) 926 941 ALLOCATE(JrNt(klon)) 927 ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))928 ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))942 ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon)) 943 ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon)) 929 944 ALLOCATE(s_lcl(klon)) 930 945 ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon)) … … 1012 1027 ALLOCATE(wfevap(klon, nbsrf), wfrain(klon,nbsrf), wfsnow(klon, nbsrf)) 1013 1028 ALLOCATE(evap_pot(klon, nbsrf)) 1029 ! FC 1030 ALLOCATE(zxfluxq(klon,klev),zxfluxt(klon,klev)) 1031 ! 1014 1032 ! 1015 1033 ! Deep convective variables used in phytrac … … 1055 1073 ALLOCATE(prfl(klon, klev+1)) 1056 1074 ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1)) 1075 ALLOCATE(bsfl(klon,klev+1)) 1057 1076 ALLOCATE(zw2(klon, klev+1)) 1058 1077 … … 1068 1087 ALLOCATE(beta_prec(klon,klev)) 1069 1088 ALLOCATE(rneb(klon,klev),rnebjn(klon,klev),rneblsvol(klon,klev)) 1070 1089 ALLOCATE(pfraclr(klon,klev),pfracld(klon,klev)) 1090 pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined 1091 ALLOCATE(distcltop(klon,klev)) 1071 1092 1072 1093 ALLOCATE (zxsnow(klon),snowhgt(klon),qsnow(klon),to_ice(klon)) … … 1141 1162 USE indice_sol_mod 1142 1163 IMPLICIT NONE 1143 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri )1164 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 1144 1165 DEALLOCATE(u_seri,v_seri) 1145 1166 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime) … … 1147 1168 DEALLOCATE(tr_seri) 1148 1169 DEALLOCATE(d_t_dyn,d_q_dyn) 1149 DEALLOCATE(d_ql_dyn,d_qs_dyn )1150 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d )1170 DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn) 1171 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d) 1151 1172 DEALLOCATE(d_u_dyn,d_v_dyn) 1152 1173 DEALLOCATE(d_tr_dyn) !RomP … … 1171 1192 DEALLOCATE(plul_st,plul_th) 1172 1193 DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss) 1194 DEALLOCATE(d_qbs_vdf) 1195 DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs) 1173 1196 #ifdef ISO 1174 1197 deallocate(xt_seri,xtl_seri,xts_seri) … … 1308 1331 DEALLOCATE(cldm, cldq, cldt, qsat2m) 1309 1332 DEALLOCATE(JrNt) 1310 DEALLOCATE(dthmin, evap, fder, plcl, plfc)1311 DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)1333 DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc) 1334 DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl) 1312 1335 DEALLOCATE(s_pblh, s_pblt, s_therm) 1313 1336 ! … … 1322 1345 DEALLOCATE(zxfqcalving, zxfluxlat) 1323 1346 DEALLOCATE(zxrunofflic) 1347 DEALLOCATE(zxustartlic, zxrhoslic) 1324 1348 DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf) 1325 1349 DEALLOCATE(rain_lsc) … … 1364 1388 DEALLOCATE(alp_bl_stat, n2, s2) 1365 1389 DEALLOCATE(proba_notrig, random_notrig) 1390 !FC 1391 DEALLOCATE(zxfluxq,zxfluxt) 1366 1392 1367 1393 DEALLOCATE(dnwd0) … … 1423 1449 1424 1450 1425 DEALLOCATE(prfl, psfl, fraca, Vprecip)1451 DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip) 1426 1452 DEALLOCATE(zw2) 1427 1453 … … 1436 1462 DEALLOCATE(beta_prec) 1437 1463 DEALLOCATE(rneb) 1464 DEALLOCATE(pfraclr,pfracld) 1465 DEALLOCATE(distcltop) 1438 1466 DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic) 1439 1467 #ifdef ISO -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_ctrlout_mod.F90
r4065 r4669 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) /)) … … 1462 1473 TYPE(ctrl_out), SAVE :: o_rneblsvol = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1463 1474 'rneblsvol', 'LS Cloud fraction by volume', '-', (/ ('', i=1, 10) /)) 1475 TYPE(ctrl_out), SAVE :: o_pfraclr = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1476 'pfraclr', 'LS precipitation fraction clear-sky part', '-', (/ ('', i=1, 10) /)) 1477 TYPE(ctrl_out), SAVE :: o_pfracld = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1478 'pfracld', 'LS precipitation fraction cloudy part', '-', (/ ('', i=1, 10) /)) 1464 1479 TYPE(ctrl_out), SAVE :: o_rhum = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1465 1480 'rhum', 'Relative humidity', '-', (/ ('', i=1, 10) /)) … … 1494 1509 TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1495 1510 'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1511 TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1512 'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1513 TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1514 'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1496 1515 TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1497 1516 'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /)) … … 1502 1521 TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1503 1522 'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /)) 1523 TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1524 'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /)) 1504 1525 TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1505 1526 're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /)) … … 1530 1551 TYPE(ctrl_out), SAVE :: o_stratomask = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1531 1552 'stratomask', 'Stratospheric fraction', '1', (/ ('', i=1, 10) /)) 1553 !FC 1554 TYPE(ctrl_out), SAVE :: o_zxfluxt = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1555 'fluxt', 'flux h ', 'W/m2', (/ ('', i=1, 10) /)) 1556 TYPE(ctrl_out), SAVE :: o_zxfluxq = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1557 'fluxq', 'flux q ', 'kg/(s*m2)', (/ ('', i=1, 10) /)) 1532 1558 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1533 1559 … … 1599 1625 TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1600 1626 'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1627 TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1628 'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1629 TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1630 'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1601 1631 TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1602 1632 'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /)) … … 1673 1703 TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1674 1704 'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1705 TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1706 'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1707 TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1708 'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1709 TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1710 'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /)) 1711 TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1712 'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1675 1713 1676 1714 !!!!!!!!!!!!!!!! Specifique thermiques … … 1835 1873 TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtprecip(:) 1836 1874 TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtevap(:) 1875 TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtevap_srf(:,:) ! ajout Camille 8 mai 2023 1837 1876 TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtplul(:) 1838 1877 TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtpluc(:) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_mod.F90
r4170 r4669 178 178 ALLOCATE(o_xtpluc(ntraciso)) 179 179 ALLOCATE(o_xtevap(ntraciso)) 180 ALLOCATE(o_xtevap_srf(ntraciso,4)) 180 181 ALLOCATE(o_xtovap(ntraciso)) 181 182 ALLOCATE(o_xtoliq(ntraciso)) … … 558 559 o_xtevap (ixt)=ctrl_out(flag, 'evap'//TRIM(outiso), 'Evaporat.', unit, [('',i=1,nfiles)]) 559 560 561 ! ajout Camille 8 mai 2023 562 flag = [1, 6, 10, 10, 10, 10, 11, 11, 11, 11] 563 o_xtevap_srf (ixt,1)=ctrl_out(flag, 'evap_ter'//TRIM(outiso), 'Evap sfc'//clnsurf(1), unit, [('',i=1,nfiles)]) 564 o_xtevap_srf (ixt,2)=ctrl_out(flag, 'evap_lic'//TRIM(outiso), 'Evap sfc'//clnsurf(2), unit, [('',i=1,nfiles)]) 565 o_xtevap_srf (ixt,3)=ctrl_out(flag, 'evap_oce'//TRIM(outiso), 'Evap sfc'//clnsurf(3), unit, [('',i=1,nfiles)]) 566 o_xtevap_srf (ixt,4)=ctrl_out(flag, 'evap_sic'//TRIM(outiso), 'Evap sfc'//clnsurf(4), unit, [('',i=1,nfiles)]) 567 560 568 flag = [2, 3, 4, 10, 10, 10, 11, 11, 11, 11]; unit = 'kg/kg' 561 569 o_xtovap (ixt)=ctrl_out(flag, 'ovap'//TRIM(outiso), 'Specific humidity', unit, [('',i=1,nfiles)]) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_var_mod.F90
r4374 r4669 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/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/physiq_mod.F90
r4495 r4669 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, & … … 328 331 ! 329 332 rneblsvol, & 333 pfraclr,pfracld, & 334 distcltop, & 330 335 zqsatl, zqsats, & 331 336 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & … … 343 348 fsolsw, wfbils, wfbilo, & 344 349 wfevap, wfrain, wfsnow, & 345 prfl, psfl, fraca, Vprecip, &350 prfl, psfl,bsfl, fraca, Vprecip, & 346 351 zw2, & 347 352 ! … … 355 360 beta_prec, & 356 361 rneb, & 357 zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic 362 zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic, & 363 zxfluxt,zxfluxq 358 364 359 365 … … 526 532 !====================================================================== 527 533 ! 528 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 529 INTEGER,SAVE :: ivap, iliq, isol, irneb 530 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb )534 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 535 INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs 536 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs) 531 537 ! 532 538 ! … … 905 911 REAL dialiq(klon,klev) ! eau liquide nuageuse 906 912 REAL diafra(klon,klev) ! fraction nuageuse 907 REAL cldliq(klon,klev) ! eau liquide nuageuse913 REAL radocond(klon,klev) ! eau condensee nuageuse 908 914 ! 909 915 !XXX PB 910 916 REAL fluxq(klon,klev, nbsrf) ! flux turbulent d'humidite 911 ! 912 REAL zxfluxt(klon, klev) 913 REAL zxfluxq(klon, klev) 917 REAL fluxqbs(klon,klev, nbsrf) ! flux turbulent de neige soufflee 918 ! 919 !FC REAL zxfluxt(klon, klev) 920 !FC REAL zxfluxq(klon, klev) 921 REAL zxfluxqbs(klon,klev) 914 922 REAL zxfluxu(klon, klev) 915 923 REAL zxfluxv(klon, klev) … … 1009 1017 ! 1010 1018 ! tendance nulles 1011 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 1019 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0 1012 1020 #ifdef ISO 1013 1021 REAL, dimension(ntraciso,klon,klev):: dxt0, dxtl0, dxti0 … … 1156 1164 REAL ztsol(klon) 1157 1165 REAL q2m(klon,nbsrf) ! humidite a 2m 1166 REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface 1167 REAL qbsfra ! blowing snow fraction 1158 1168 #ifdef ISO 1159 1169 REAL d_xtw(ntraciso),d_xtl(ntraciso), d_xts(ntraciso) … … 1234 1244 !IM 100106 BEG : pouvoir sortir les ctes de la physique 1235 1245 include "conema3.h" 1236 include "fisrtilp.h"1237 1246 include "nuage.h" 1238 1247 include "compbl.h" … … 1372 1381 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1373 1382 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1383 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1374 1384 CALL init_etat0_limit_unstruct 1375 1385 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1421 1431 ENDIF 1422 1432 1423 IF (ok_ice_sursat.AND.(nqo. NE.4)) THEN1433 IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN 1424 1434 WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', & 1425 1435 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.' … … 1440 1450 ENDIF 1441 1451 1452 IF (ok_bs) THEN 1453 abort_message='blowing snow cannot be activated with water isotopes yet' 1454 CALL abort_physic(modname,abort_message, 1) 1455 IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN 1456 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1457 'but nqo=', nqo 1458 abort_message='see above' 1459 CALL abort_physic(modname,abort_message, 1) 1460 ENDIF 1461 ENDIF 1442 1462 Ncvpaseq1 = 0 1443 1463 dnwd0=0.0 … … 1890 1910 CALL thermcell_ini(iflag_thermals,prt_level,tau_thermals,lunout, & 1891 1911 & RG,RD,RCPD,RKAPPA,RLVTT,RETV) 1892 IF (ok_new_lscp) then 1893 CALL lscp_ini(pdtphys,ok_ice_sursat) 1894 endif 1912 CALL lscp_ini(pdtphys,ok_ice_sursat,RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG) 1913 CALL blowing_snow_ini(prt_level,lunout, & 1914 RCPD, RLSTT, RLVTT, RLMLT, & 1915 RVTMP2, RTT,RD,RG) 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 … … 4627 4687 ptconv,ptconvth,clwcon0th, rnebcon0th, & 4628 4688 paprs,pplay,t_seri,q_seri, qtc_cv, sigt_cv, zqsat, & 4629 pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm, &4689 pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm,cell_area, & 4630 4690 ratqs,ratqsc,ratqs_inter) 4631 4691 … … 4731 4791 t_seri, q_seri,ptconv,ratqs, & 4732 4792 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 4733 cldliq, picefra, rain_lsc, snow_lsc, & 4793 pfraclr,pfracld, & 4794 radocond, picefra, rain_lsc, snow_lsc, & 4734 4795 frac_impa, frac_nucl, beta_prec_fisrt, & 4735 4796 prfl, psfl, rhcl, & 4736 4797 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, & 4737 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, &4798 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, & 4738 4799 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 4739 4800 Tcontr, qcontr, qcontr2, fcontrN, fcontrP ) … … 4743 4804 CALL fisrtilp(phys_tstep,paprs,pplay, & 4744 4805 t_seri, q_seri,ptconv,ratqs, & 4745 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, &4806 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, radocond, & 4746 4807 rain_lsc, snow_lsc, & 4747 4808 pfrac_impa, pfrac_nucl, pfrac_1nucl, & … … 4791 4852 ! write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1) 4792 4853 !-JLD 4793 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc, paprs, &4854 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, & 4794 4855 'lsc',abortphy,flag_inhib_tend,itap,0 & 4795 4856 #ifdef ISO … … 4828 4889 ENDIF 4829 4890 4830 !--------------------------------------------------------------------------- 4891 4892 !--------------------------------------------------------------------------- 4831 4893 DO k = 1, klev 4832 4894 DO i = 1, klon 4833 4895 cldfra(i,k) = rneb(i,k) 4834 4896 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 4835 IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k) 4897 !EV: en effet etrange, j'ajouterais aussi qs_seri 4898 ! plus largement, je nettoierais (enleverrais) ces lignes 4899 IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k) 4836 4900 ENDDO 4837 4901 ENDDO 4838 4902 4839 4903 4840 4904 ! Option to activate the radiative effect of blowing snow (ok_rad_bs) 4905 ! makes sense only if the new large scale condensation scheme is active 4906 ! with the ok_icefra_lscp flag active as well 4907 4908 IF (ok_bs .AND. ok_rad_bs) THEN 4909 IF (ok_new_lscp .AND. ok_icefra_lscp) THEN 4910 DO k=1,klev 4911 DO i=1,klon 4912 radocond(i,k)=radocond(i,k)+qbs_seri(i,k) 4913 picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k)) 4914 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 4915 cldfra(i,k)=max(cldfra(i,k),qbsfra) 4916 ENDDO 4917 ENDDO 4918 ELSE 4919 WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow" 4920 WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false" 4921 abort_message='inconsistency in cloud phase for blowing snow' 4922 CALL abort_physic(modname,abort_message,1) 4923 ENDIF 4924 4925 ENDIF 4841 4926 #ifdef ISO 4842 4927 !#ifdef ISOVERIF … … 5001 5086 DO i = 1, klon 5002 5087 IF (diafra(i,k).GT.cldfra(i,k)) THEN 5003 cldliq(i,k) = dialiq(i,k)5088 radocond(i,k) = dialiq(i,k) 5004 5089 cldfra(i,k) = diafra(i,k) 5005 5090 ENDIF … … 5038 5123 DO i=1,klon 5039 5124 IF (ptconv(i,k).AND.ptconvth(i,k)) THEN 5040 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)5125 radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k) 5041 5126 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.) 5042 5127 ELSE IF (ptconv(i,k)) THEN 5043 5128 cldfra(i,k)=rnebcon(i,k) 5044 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)5129 radocond(i,k)=rnebcon(i,k)*clwcon(i,k) 5045 5130 ENDIF 5046 5131 ENDDO … … 5051 5136 DO i=1,klon 5052 5137 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.) 5053 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)5138 radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k) 5054 5139 ENDDO 5055 5140 ENDDO … … 5069 5154 IF (ptconv(i,k).AND. .NOT.ptconvth(i,k)) THEN 5070 5155 cldfra(i,k)=rnebcon(i,k) 5071 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)5156 radocond(i,k)=rnebcon(i,k)*clwcon(i,k) 5072 5157 ENDIF 5073 5158 ENDDO … … 5080 5165 ! Ancienne version 5081 5166 cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.) 5082 cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)5167 radocond(:,:)=radocond(:,:)+rnebcon(:,:)*clwcon(:,:) 5083 5168 ENDIF 5084 5169 … … 5100 5185 DO i = 1, klon 5101 5186 IF (diafra(i,k).GT.cldfra(i,k)) THEN 5102 cldliq(i,k) = dialiq(i,k)5187 radocond(i,k) = dialiq(i,k) 5103 5188 cldfra(i,k) = diafra(i,k) 5104 5189 ENDIF … … 5475 5560 ENDIF 5476 5561 CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, & 5477 paprs, pplay, t_seri, cldliq, picefra, cldfra, &5562 paprs, pplay, t_seri, radocond, picefra, cldfra, & 5478 5563 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, & 5479 5564 flwp, fiwp, flwc, fiwc, & 5480 5565 mass_solu_aero, mass_solu_aero_pi, & 5481 cldtaupi, latitude_deg, re, fl, ref_liq, ref_ice, &5566 cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, & 5482 5567 ref_liq_pi, ref_ice_pi) 5483 5568 ELSE 5484 5569 CALL nuage (paprs, pplay, & 5485 t_seri, cldliq, picefra, cldfra, cldtau, cldemi, &5570 t_seri, radocond, picefra, cldfra, cldtau, cldemi, & 5486 5571 cldh, cldl, cldm, cldt, cldq, & 5487 5572 ok_aie, & 5488 5573 mass_solu_aero, mass_solu_aero_pi, & 5489 bl95_b0, bl95_b1, &5574 bl95_b0, bl95_b1, distcltop, & 5490 5575 cldtaupi, re, fl) 5491 5576 ENDIF … … 5792 5877 ENDDO 5793 5878 5794 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0, paprs,'SW',abortphy,flag_inhib_tend,itap,0 &5879 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 & 5795 5880 #ifdef ISO 5796 5881 & ,dxt0,dxtl0,dxti0 & … … 5798 5883 & ) 5799 5884 CALL prt_enerbil('SW',itap) 5800 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0, paprs,'LW',abortphy,flag_inhib_tend,itap,0 &5885 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 & 5801 5886 #ifdef ISO 5802 5887 & ,dxt0,dxtl0,dxti0 & … … 5846 5931 ! -> condition on zrel_oro can deactivate the drag on tilted planar terrains 5847 5932 ! such as ice sheets (work by V. Wiener) 5848 ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 5933 ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 5849 5934 ! earn computation time but they are not physical. 5850 5935 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 5962 !----------------------------------------------------------------------- 5878 5963 ! ajout des tendances de la trainee de l'orographie 5879 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0, paprs,'oro', &5964 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', & 5880 5965 abortphy,flag_inhib_tend,itap,0 & 5881 5966 #ifdef ISO … … 5932 6017 5933 6018 ! ajout des tendances de la portance de l'orographie 5934 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &6019 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, & 5935 6020 'lif', abortphy,flag_inhib_tend,itap,0 & 5936 6021 #ifdef ISO … … 5961 6046 d_t_hin(:, :)=0. 5962 6047 CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, & 5963 dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &6048 dqi0, dqbs0,paprs, 'hin', abortphy,flag_inhib_tend,itap,0 & 5964 6049 #ifdef ISO 5965 6050 & ,dxt0,dxtl0,dxti0 & … … 5983 6068 ENDDO 5984 6069 5985 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &6070 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, & 5986 6071 paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0 & 5987 6072 #ifdef ISO … … 5996 6081 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 5997 6082 du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress) 5998 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &6083 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, & 5999 6084 paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0 & 6000 6085 #ifdef ISO … … 6055 6140 d_xt_ch4_dtime(:,:,:) = d_xt_ch4(:,:,:)*phys_tstep 6056 6141 #endif 6057 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &6142 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, & 6058 6143 'q_ch4', abortphy,flag_inhib_tend,itap,0 & 6059 6144 #ifdef ISO … … 6121 6206 ! car on peut s'attendre a ce que les petites echelles produisent aussi de la TKE 6122 6207 ! 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)) THEN6208 IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN 6124 6209 itest(i)=1 6125 6210 igwd=igwd+1 … … 6381 6466 ! 6382 6467 6383 IF (type_trac =='repr') THEN6468 IF (type_trac == 'repr') THEN 6384 6469 !MM pas d'impact, car on recupere q_seri,tr_seri,t_seri via phys_local_var_mod 6385 6470 !MM dans Reprobus … … 6431 6516 presnivs, pphis, pphi, albsol1, & 6432 6517 sh_in, ch_in, rhcl, cldfra, rneb, & 6433 diafra, cldliq, itop_con, ibas_con, &6518 diafra, radocond, itop_con, ibas_con, & 6434 6519 pmflxr, pmflxs, prfl, psfl, & 6435 6520 da, phi, mp, upwd, & … … 6448 6533 6449 6534 CALL add_phys_tend & 6450 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep, paprs,&6535 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,& 6451 6536 'rep',abortphy,flag_inhib_tend,itap,0) 6452 6537 IF (abortphy==1) Print*,'ERROR ABORT REP' … … 6525 6610 ! prlw = colonne eau liquide 6526 6611 ! prlw = colonne eau solide 6612 ! prbsw = colonne neige soufflee 6527 6613 prw(:) = 0. 6528 6614 prlw(:) = 0. 6529 6615 prsw(:) = 0. 6616 prbsw(:) = 0. 6530 6617 DO k = 1, klev 6531 6618 prw(:) = prw(:) + q_seri(:,k)*zmasse(:,k) 6532 6619 prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k) 6533 6620 prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k) 6621 prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k) 6534 6622 ENDDO 6535 6623 … … 6602 6690 ENDIF 6603 6691 !--ice_sursat: nqo=4, on ajoute rneb 6604 IF (nqo == 4) THEN6692 IF (nqo.ge.4 .and. ok_ice_sursat) THEN 6605 6693 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 6606 6694 ENDIF 6695 6696 IF (nqo.ge.4 .and. ok_bs) THEN 6697 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 6698 ENDIF 6699 6700 6607 6701 ENDDO 6608 6702 ENDDO … … 6684 6778 ql_ancien(:,:) = ql_seri(:,:) 6685 6779 qs_ancien(:,:) = qs_seri(:,:) 6780 qbs_ancien(:,:) = qbs_seri(:,:) 6686 6781 rneb_ancien(:,:) = rneb_seri(:,:) 6687 6782 #ifdef ISO … … 6693 6788 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien) 6694 6789 CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien) 6790 CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien) 6695 6791 ! !! RomP >>> 6696 6792 IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:) … … 6821 6917 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 6822 6918 pplay, lmax_th, aerosol_couple, & 6823 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, &6919 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, & 6824 6920 ok_sync, ptconv, read_climoz, clevSTD, & 6825 6921 ptconvth, d_u, d_t, qx, d_qx, zmasse, & -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_land_mod.F90
r4285 r4669 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, & 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/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_landice_mod.F90
r4285 r4669 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 AcoefQBS, BcoefQBS, & 17 18 ps, u1, v1, gustiness, rugoro, pctsrf, & 18 snow, qsurf, qsol, agesno, &19 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &19 snow, qsurf, qsol, qbs1, agesno, & 20 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, & 20 21 tsurf_new, dflux_s, dflux_l, & 21 22 alt, slope, cloudf, & … … 34 35 USE cpl_mod, ONLY : cpl_send_landice_fields 35 36 USE calcul_fluxs_mod 36 USE phys_output_var_mod 37 USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic 38 USE phys_output_var_mod, ONLY : snow_o,zfra_o 37 39 #ifdef ISO 38 40 USE fonte_neige_mod, ONLY : xtrun_off_lic … … 48 50 !FC 49 51 USE ioipsl_getin_p_mod, ONLY : getin_p 50 52 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs 51 53 52 54 #ifdef CPP_INLANDSIS … … 72 74 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 73 75 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 74 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 76 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 75 77 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 76 78 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ 77 79 REAL, DIMENSION(klon), INTENT(IN) :: BcoefH, BcoefQ 78 80 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 81 REAL, DIMENSION(klon), INTENT(IN) :: AcoefQBS, BcoefQBS 79 82 REAL, DIMENSION(klon), INTENT(IN) :: ps 80 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 83 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness, qbs1 81 84 REAL, DIMENSION(klon), INTENT(IN) :: rugoro 82 85 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf … … 118 121 !albedo SB <<< 119 122 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 123 REAL, DIMENSION(klon), INTENT(OUT) :: fluxbs 120 124 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 121 125 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l … … 179 183 180 184 REAL,DIMENSION(klon) :: alb1,alb2 185 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 181 186 REAL, DIMENSION (klon,6) :: alb6 187 REAL :: rho0, rhoice, ustart0, hsalt, esalt, rhod 188 REAL :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc 189 REAL :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard 190 REAL, DIMENSION(klon) :: ws1, rhos, ustart, qsalt 182 191 ! End definition 183 192 !**************************************************************************************** … … 214 223 PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic 215 224 216 ! z0m=1.e-3217 ! z0h = z0m218 225 firstcall=.false. 219 226 ENDIF 220 227 !****************************************************************************************** 221 ! 228 222 229 ! Initialize output variables 223 230 alb3(:) = 999999. 224 231 alb2(:) = 999999. 225 232 alb1(:) = 999999. 226 233 fluxbs(:)=0. 227 234 runoff(:) = 0. 228 235 !**************************************************************************************** … … 232 239 radsol(:) = 0.0 233 240 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 241 242 !**************************************************************************************** 234 243 235 244 !**************************************************************************************** … … 327 336 328 337 329 330 338 ELSE 331 339 … … 342 350 IF (soil_model) THEN 343 351 CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, & 344 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux) 345 352 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux) 346 353 cal(1:knon) = RCPD / soilcap(1:knon) 347 354 radsol(1:knon) = radsol(1:knon) + soilflux(1:knon) … … 406 413 flux_u1, flux_v1) 407 414 408 !**************************************************************************************** 409 ! Calculate snow height, age, run-off,.. 415 416 !**************************************************************************************** 417 ! Calculate albedo 418 ! 419 !**************************************************************************************** 420 421 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 422 423 424 ! EV: following lines are obsolete since we set alb1 and alb2 to constant values 425 ! I therefore comment them 426 ! alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 427 ! 0.6 * (1.0-zfra(1:knon)) 428 ! 429 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" 430 ! alb1(1 : knon) = 0.6 !IM cf FH/GK 431 ! alb1(1 : knon) = 0.82 432 ! alb1(1 : knon) = 0.77 !211003 Ksta0.77 433 ! alb1(1 : knon) = 0.8 !KstaTER0.8 & LMD_ARMIP5 434 !IM: KstaTER0.77 & LMD_ARMIP6 435 436 ! Attantion: alb1 and alb2 are not the same! 437 alb1(1:knon) = alb_vis_sno_lic 438 alb2(1:knon) = alb_nir_sno_lic 439 440 441 !**************************************************************************************** 442 ! Rugosity 443 ! 444 !**************************************************************************************** 445 z0m = z0m_landice 446 z0h = z0h_landice 447 !z0m = SQRT(z0m**2+rugoro**2) 448 449 450 451 ! Simple blowing snow param 452 if (ok_bs) then 453 ustart0 = 0.211 454 rhoice = 920.0 455 rho0 = 200.0 456 rhomax=450.0 457 rhohard=400.0 458 tau_dens0=86400.0*10. ! 10 days by default, in s 459 tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory 460 461 ! computation of threshold friction velocity 462 ! which depends on surface snow density 463 do i = 1, knon 464 ! estimation of snow density 465 ! snow density increases with snow age and 466 ! increases even faster in case of sedimentation of blowing snow 467 tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs)) 468 rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens)) 469 ! blowing snow flux formula used in MAR 470 ws1(i)=(u1(i)**2+v1(i)**2)**0.5 471 ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5 472 ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax)) 473 ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till 474 ! rhohard<450) 475 enddo 476 477 ! computation of qbs at the top of the saltation layer 478 ! two formulations possible 479 ! pay attention that qbs is a mixing ratio and has to be converted 480 ! to specific content 481 482 if (iflag_saltation_bs .eq. 1) then 483 ! expression from CRYOWRF (Sharma et al. 2022) 484 aa=2.6 485 bb=2.5 486 cc=2.0 487 lambdasalt=0.45 488 do i =1, knon 489 rhod=p1lay(i)/RD/temp_air(i) 490 nunu=max(ustar(i)/ustart(i),1.e-3) 491 fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * & 492 (aa+bb*nunu**(-2)+cc*nunu**(-1)) 493 csalt=fluxsalt/(2.8*ustart(i)) 494 hsalt=0.08436*ustar(i)**1.27 495 qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) & 496 * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6)) 497 qsalt(i)=max(qsalt(i),0.) 498 enddo 499 500 501 else 502 ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001) 503 do i=1, knon 504 esalt=1./(3.25*max(ustar(i),0.001)) 505 hsalt=0.08436*ustar(i)**1.27 506 qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 507 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 508 enddo 509 endif 510 511 ! calculation of erosion (emission flux towards the first atmospheric level) 512 ! consistent with implicit resolution of turbulent mixing equation 513 do i=1, knon 514 rhod=p1lay(i)/RD/temp_air(i) 515 fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) & 516 / (1.-rhod*ws1(i)*zeta_bs*cdragm(i)*BcoefQBS(i)*dtime) 517 !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i)) 518 enddo 519 520 ! for outputs 521 do j = 1, knon 522 i = knindex(j) 523 zxustartlic(i) = ustart(j) 524 zxrhoslic(i) = rhos(j) 525 enddo 526 527 endif 528 529 530 531 !**************************************************************************************** 532 ! Calculate surface snow amount 410 533 ! 411 534 !**************************************************************************************** 535 IF (ok_bs) THEN 536 precip_totsnow(:)=precip_snow(:)+precip_bs(:) 537 evap_totsnow(:)=evap(:)-fluxbs(:) ! flux bs is positive towards the surface (snow erosion) 538 ELSE 539 precip_totsnow(:)=precip_snow(:) 540 evap_totsnow(:)=evap(:) 541 ENDIF 542 412 543 CALL fonte_neige(knon, is_lic, knindex, dtime, & 413 tsurf, precip_rain, precip_ snow, &414 snow, qsol, tsurf_new, evap &544 tsurf, precip_rain, precip_totsnow, & 545 snow, qsol, tsurf_new, evap_totsnow & 415 546 #ifdef ISO 416 547 & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag & … … 446 577 447 578 448 !**************************************************************************************** 449 ! Calculate albedo 450 ! 451 !**************************************************************************************** 452 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 453 454 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 455 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 456 alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 457 0.6 * (1.0-zfra(1:knon)) 458 ! 459 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" 460 ! alb1(1 : knon) = 0.6 !IM cf FH/GK 461 ! alb1(1 : knon) = 0.82 462 ! alb1(1 : knon) = 0.77 !211003 Ksta0.77 463 ! alb1(1 : knon) = 0.8 !KstaTER0.8 & LMD_ARMIP5 464 !IM: KstaTER0.77 & LMD_ARMIP6 465 466 ! Attantion: alb1 and alb2 are not the same! 467 alb1(1:knon) = alb_vis_sno_lic 468 alb2(1:knon) = alb_nir_sno_lic 469 470 471 !**************************************************************************************** 472 ! Rugosity 473 ! 474 !**************************************************************************************** 475 z0m=1.e-3 476 z0h = z0m 477 z0m = SQRT(z0m**2+rugoro**2) 478 579 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 580 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 479 581 480 582 … … 494 596 run_off_lic_frac(j) = pctsrf(i,is_lic) 495 597 ENDDO 496 598 497 599 CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic, run_off_lic_frac) 498 600 ENDIF … … 501 603 runoff(1:knon)=run_off_lic(1:knon)/dtime 502 604 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 605 snow_o=0. 516 606 zfra_o = 0. … … 553 643 !albedo SB <<< 554 644 555 556 557 645 558 646 END SUBROUTINE surf_landice -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_ocean_mod.F90
r4374 r4669 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), & -
LMDZ6/branches/LMDZ_cdrag_LSCE/makelmdz
r4489 r4669 17 17 couple=false 18 18 veget=false 19 inlandsis=false 20 rrtm=false 21 rad="oldrad" 22 dust=false 23 strataer=false 19 24 chimie=false 20 25 parallel=none … … 27 32 cosp2=false 28 33 cospv2=false 29 inlandsis=false 30 rrtm=false 31 rad="" 32 dust=false 33 strataer=false 34 34 35 full="" 35 36 … … 110 111 [-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd) 111 112 [-prod / -dev / -debug] : compilation mode production (default) / developement / debug 112 [-c false/MPI1/ MPI2] : coupling with ocean model : MPI1/MPI2/false (default: false)113 [-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false) 113 114 [-v false/orchideetrunk/orchidee2.1/orchidee2.0/orchidee1.9] : version of the vegetation model to include (default: false) 114 115 false : no vegetation model 115 116 orchideetrunk : compile using ORCHIDEE trunk from revision 7757 or higher 116 117 orchidee2.1 : compile using ORCHIDEE 2.1 until 4.1 included or until revision 7757 on the trunk 117 orchidee2.0 : compile using ORCHIDEE 2.0 (or more recent version)118 orchidee2.0 : compile using ORCHIDEE 2.0 118 119 orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6 119 120 true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6 … … 125 126 [-rrtm true/false] : compile with/without rrtm package (default: false) 126 127 [-rad oldrad/rrtm/ecrad] : compile with oldrad/rrtm/ecrad radiatif code (default: oldrad) 127 [-dust true/false] : compile with/without the dust package from Boucher et al.(default: false)128 [-strataer true/false] : compile with/without the strat aer package from Boucher et al.(default: false)128 [-dust true/false] : compile with/without the dust package by Boucher and co (default: false) 129 [-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false) 129 130 [-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp 130 131 [-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom) … … 135 136 [-mem] : reduced memory dynamics (obsolete flag; always on in parallel mode) 136 137 [-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez) 137 [-full] : Full (re)compilation (from scratch)138 138 [-link LINKS] : additional links with other libraries 139 [-full] : full recompiling 139 140 [-fcm_path path] : path to the fcm tool (default: tools/fcm/bin) 140 141 [-ext_src path] : path to an additional set of routines to compile with the model … … 171 172 veget="$2" ; shift ; shift ;; 172 173 173 "-chimie")174 chimie="$2" ; shift ; shift ;;175 176 "-parallel")177 parallel="$2" ; shift ; shift ;;178 179 "-include")180 INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;181 182 "-cpp")183 CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;184 185 "-cosp")186 cosp="$2" ; shift ; shift ;;187 188 "-cosp2")189 cosp2="$2" ; shift ; shift ;;190 191 "-cosp2")192 cospv2="$2" ; shift ; shift ;;193 194 174 "-inlandsis") 195 175 inlandsis="$2" ; shift ; shift ;; … … 207 187 strataer="$2" ; shift ; shift ;; 208 188 189 "-chimie") 190 chimie="$2" ; shift ; shift ;; 191 192 "-parallel") 193 parallel="$2" ; shift ; shift ;; 194 195 "-include") 196 INCLUDE="$INCLUDE -I$2" ; shift ; shift ;; 197 198 "-cpp") 199 CPP_KEY="$CPP_KEY $2" ; shift ; shift ;; 200 201 "-cosp") 202 cosp="$2" ; shift ; shift ;; 203 204 "-cosp2") 205 cosp2="$2" ; shift ; shift ;; 206 207 "-cospv2") 208 cospv2="$2" ; shift ; shift ;; 209 209 210 "-mem") 210 211 echo "option -mem is obsolete (now always on in parallel)" … … 214 215 filtre=$2 ; shift ; shift ;; 215 216 217 "-link") 218 LIB="$LIB $2" ; shift ; shift ;; 219 220 "-fcm_path") 221 fcm_path=$2 ; shift ; shift ;; 222 223 "-ext_src") 224 EXT_SRC=$2 ; src_dirs="$src_dirs $EXT_SRC" ; shift ; shift ;; 225 216 226 "-full") 217 227 full="full" ; shift ;; 218 219 "-link")220 LIB="$LIB $2" ; shift ; shift ;;221 222 "-fcm_path")223 fcm_path=$2 ; shift ; shift ;;224 225 "-ext_src")226 EXT_SRC=$2 ; src_dirs="$src_dirs $EXT_SRC" ; shift ; shift ;;227 228 228 229 "-arch") … … 364 365 lib_phy='-lphy'"$physique"' -lphy_common' 365 366 CPP_KEY="$CPP_KEY CPP_PHYS" 366 if [[ $phys_root== "lmd" ]]367 368 369 367 if [[ "${phys_root}" == "lmd" ]] 368 then 369 #For lmd physics, default planet type is Earth 370 CPP_KEY="$CPP_KEY CPP_EARTH" 370 371 fi 371 372 fi … … 475 476 fi 476 477 478 if [[ "$inlandsis" == "true" ]] 479 then 480 CPP_KEY="$CPP_KEY CPP_INLANDSIS" 481 src_dirs="$src_dirs phy${physique}/inlandsis" 482 fi 483 484 485 if [[ "$rad" == "rrtm" ]] 486 then 487 CPP_KEY="$CPP_KEY CPP_RRTM" 488 src_dirs="$src_dirs phy${physique}/rrtm" 489 fi 490 if [[ "$rad" == "ecrad" ]] 491 then 492 CPP_KEY="$CPP_KEY CPP_ECRAD" 493 src_dirs="$src_dirs phy${physique}/ecrad" 494 fi 495 496 if [[ "$dust" == "true" ]] 497 then 498 CPP_KEY="$CPP_KEY CPP_Dust" 499 src_dirs="$src_dirs phy${physique}/Dust" 500 fi 501 502 if [[ "$strataer" == "true" ]] 503 then 504 CPP_KEY="$CPP_KEY CPP_StratAer" 505 src_dirs="$src_dirs phy${physique}/StratAer" 506 fi 507 477 508 #=============================================================================== 478 509 INCLUDE="$INCLUDE ${NETCDF95_INCDIR}" … … 524 555 525 556 526 if [[ "$inlandsis" == "true" ]]527 then528 CPP_KEY="$CPP_KEY CPP_INLANDSIS"529 src_dirs="$src_dirs phy${physique}/inlandsis"530 fi531 532 533 if [[ "$rad" == "rrtm" ]]534 then535 CPP_KEY="$CPP_KEY CPP_RRTM"536 src_dirs="$src_dirs phy${physique}/rrtm"537 fi538 if [[ "$rad" == "ecrad" ]]539 then540 CPP_KEY="$CPP_KEY CPP_ECRAD"541 src_dirs="$src_dirs phy${physique}/ecrad"542 fi543 544 if [[ "$dust" == "true" ]]545 then546 CPP_KEY="$CPP_KEY CPP_Dust"547 src_dirs="$src_dirs phy${physique}/Dust"548 fi549 550 if [[ "$strataer" == "true" ]]551 then552 CPP_KEY="$CPP_KEY CPP_StratAer"553 src_dirs="$src_dirs phy${physique}/StratAer"554 fi555 557 556 558 #add new ocean skin modelisation to source dir by default … … 804 806 # Execution du make 805 807 ################################################################# 806 echo $makecommand RANLIB=$ranlib -f $LMDGCM/makefile \ 807 OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \ 808 OPTIM90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \ 809 OPTIMTRU90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \ 810 OPTIM="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \ 811 INCLUDE="$INCLUDE" \ 812 $filtre \ 813 LIBO=${LIBOGCM}/${nomlib} \ 814 "PHYS=$physique" \ 815 LIBPHY=${LIBPHY} \ 816 LIBPHY_COMMON=${LIBPHY_COMMON} \ 817 LIBDYN_PHYS=${LIBDYN_PHYS} \ 818 DIM=$dimc \ 819 FLAG_PARA=$FLAG_PARA \ 820 L_PHY="$lib_phy" \ 821 L_DYN_PHY="$libdyn_phy" \ 822 L_ADJNT=$adjnt \ 823 L_COSP="$lcosp" \ 824 L_COSP2="$lcosp2" \ 825 L_COSPV2="$lcospv2" \ 826 L_CHIMIE="$libchimie" \ 827 LOCAL_DIR="$localdir" \ 828 F77="$fcompiler" \ 829 F90="$fcompiler" \ 830 OPLINK="$LIB" \ 831 LINK="$linker" \ 832 GCM="$LMDGCM" \ 833 MOD_LOC_DIR=$mod_loc_dir \ 834 MOD_SUFFIX="mod" \ 835 AR=$arcommand \ 836 ARFLAGS="$arflags" \ 837 DIRMAIN=$dirmain \ 838 SOURCE=$source_code \ 839 PROG=$code 840 808 set -v 841 809 $makecommand RANLIB=$ranlib -f $LMDGCM/makefile \ 842 810 OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \ … … 874 842 PROG=$code 875 843 844 set +v 876 845 877 846 if [[ -r $LIBFGCM/grid/dimensions.h ]]
Note: See TracChangeset
for help on using the changeset viewer.