From 42e746cbf31ec7b51409d73deae42fa1e0408be9 Mon Sep 17 00:00:00 2001 From: Paulo Kubota Date: Fri, 21 Feb 2025 11:26:24 -0300 Subject: [PATCH 01/18] update monan 8.2.2 --- .gitignore | 87 +- Makefile | 210 +- README.md | 62 +- load_monan_app_modules.sh | 24 + make.output | 366 + make.sh | 117 + src/Makefile | 24 +- src/core_atmosphere/Externals.cfg | 10 + src/core_atmosphere/Makefile | 3 +- src/core_atmosphere/Registry.xml | 613 +- src/core_atmosphere/build_options.mk | 3 + .../dynamics/mpas_atm_time_integration.F | 776 +- src/core_atmosphere/mpas_atm_core.F | 6 +- src/core_atmosphere/mpas_atm_core_interface.F | 104 +- src/core_atmosphere/mpas_atm_halos.F | 46 +- src/core_atmosphere/physics/.gitignore | 1 + src/core_atmosphere/physics/Makefile | 67 +- .../physics/Registry_noahmp.xml | 624 ++ src/core_atmosphere/physics/ccpp_kind_types.F | 4 + src/core_atmosphere/physics/ccpp_kinds.F | 4 - .../physics/checkout_data_files.sh | 2 +- .../physics/mpas_atmphys_control.F | 53 +- .../physics/mpas_atmphys_driver.F | 61 +- .../physics/mpas_atmphys_driver_cloudiness.F | 3 +- .../physics/mpas_atmphys_driver_convection.F | 42 +- .../physics/mpas_atmphys_driver_lsm_noahmp.F | 1094 +++ .../mpas_atmphys_driver_microphysics.F | 388 +- .../physics/mpas_atmphys_driver_pbl.F | 351 +- .../mpas_atmphys_driver_radiation_lw.F | 30 +- .../mpas_atmphys_driver_radiation_sw.F | 163 +- .../physics/mpas_atmphys_driver_sfclayer.F | 153 +- .../physics/mpas_atmphys_finalize.F | 12 +- .../physics/mpas_atmphys_init.F | 181 +- .../physics/mpas_atmphys_init_microphysics.F | 241 +- .../physics/mpas_atmphys_interface.F | 551 +- .../physics/mpas_atmphys_lsm_noahinit.F | 8 - .../physics/mpas_atmphys_lsm_noahmpfinalize.F | 40 + .../physics/mpas_atmphys_lsm_noahmpinit.F | 501 ++ .../physics/mpas_atmphys_manager.F | 95 +- .../physics/mpas_atmphys_packages.F | 46 +- .../physics/mpas_atmphys_todynamics.F | 731 +- .../physics/mpas_atmphys_vars.F | 67 +- .../physics/physics_mmm/Makefile | 56 - .../physics/physics_mmm/bl_gwdo.F | 659 -- .../physics/physics_mmm/bl_mynn.F | 1244 ---- .../physics/physics_mmm/bl_mynn_subroutines.F | 6565 ----------------- .../physics/physics_mmm/bl_ysu.F | 1709 ----- .../physics/physics_mmm/cu_ntiedtke.F | 3766 ---------- .../physics/physics_mmm/module_libmassv.F | 91 - .../physics/physics_mmm/module_sprayHFs.F | 965 --- .../physics/physics_mmm/mp_radar.F | 677 -- .../physics/physics_mmm/mp_wsm6.F | 2441 ------ .../physics/physics_mmm/mp_wsm6_effectRad.F | 188 - .../physics/physics_mmm/mynn_shared.F | 133 - .../physics/physics_mmm/sf_mynn.F | 2340 ------ .../physics/physics_mmm/sf_sfclayrev.F | 1161 --- .../physics/physics_noahmp/README.md | 88 + .../physics/physics_noahmp/RELEASE_NOTES.md | 426 ++ ...ctored_variable_name_glossary_Feb2023.xlsx | Bin 0 -> 374306 bytes .../docs/NoahMP_v5_technote.pdf | Bin 0 -> 1572864 bytes .../drivers/mpas/BiochemVarInTransferMod.F90 | 148 + .../drivers/mpas/BiochemVarOutTransferMod.F90 | 54 + .../drivers/mpas/ConfigVarInTransferMod.F90 | 170 + .../drivers/mpas/ConfigVarOutTransferMod.F90 | 45 + .../drivers/mpas/EnergyVarInTransferMod.F90 | 154 + .../drivers/mpas/EnergyVarOutTransferMod.F90 | 188 + .../drivers/mpas/ForcingVarInTransferMod.F90 | 68 + .../drivers/mpas/ForcingVarOutTransferMod.F90 | 43 + .../physics_noahmp/drivers/mpas/Makefile | 74 + .../drivers/mpas/NoahmpDriverMainMod.F90 | 249 + .../drivers/mpas/NoahmpGroundwaterInitMod.F90 | 326 + .../drivers/mpas/NoahmpIOVarFinalizeMod.F90 | 463 ++ .../drivers/mpas/NoahmpIOVarInitMod.F90 | 850 +++ .../drivers/mpas/NoahmpIOVarType.F90 | 936 +++ .../drivers/mpas/NoahmpInitMainMod.F90 | 263 + .../drivers/mpas/NoahmpReadNamelistMod.F90 | 397 + .../drivers/mpas/NoahmpReadTableMod.F90 | 1182 +++ .../drivers/mpas/NoahmpSnowInitMod.F90 | 115 + .../drivers/mpas/PedoTransferSR2006Mod.F90 | 210 + .../drivers/mpas/WaterVarInTransferMod.F90 | 241 + .../drivers/mpas/WaterVarOutTransferMod.F90 | 153 + .../physics_noahmp/src/AtmosForcingMod.F90 | 182 + .../src/BalanceErrorCheckGlacierMod.F90 | 163 + .../src/BalanceErrorCheckMod.F90 | 255 + .../physics_noahmp/src/BiochemCropMainMod.F90 | 115 + .../src/BiochemNatureVegMainMod.F90 | 109 + .../physics_noahmp/src/BiochemVarInitMod.F90 | 193 + .../physics_noahmp/src/BiochemVarType.F90 | 177 + .../physics_noahmp/src/CanopyHydrologyMod.F90 | 141 + .../src/CanopyRadiationTwoStreamMod.F90 | 263 + .../src/CanopyWaterInterceptMod.F90 | 155 + .../physics_noahmp/src/CarbonFluxCropMod.F90 | 268 + .../src/CarbonFluxNatureVegMod.F90 | 248 + .../physics_noahmp/src/ConfigVarInitMod.F90 | 89 + .../physics_noahmp/src/ConfigVarType.F90 | 183 + .../physics_noahmp/src/ConstantDefineMod.F90 | 40 + .../src/CropGrowDegreeDayMod.F90 | 107 + .../src/CropPhotosynthesisMod.F90 | 109 + .../src/EnergyMainGlacierMod.F90 | 173 + .../physics_noahmp/src/EnergyMainMod.F90 | 360 + .../physics_noahmp/src/EnergyVarInitMod.F90 | 398 + .../physics_noahmp/src/EnergyVarType.F90 | 309 + .../physics_noahmp/src/ForcingVarInitMod.F90 | 43 + .../physics_noahmp/src/ForcingVarType.F90 | 37 + .../src/GeneralInitGlacierMod.F90 | 50 + .../physics_noahmp/src/GeneralInitMod.F90 | 61 + .../src/GlacierIceThermalPropertyMod.F90 | 51 + .../src/GlacierPhaseChangeMod.F90 | 440 ++ .../src/GlacierTemperatureMainMod.F90 | 80 + .../src/GlacierTemperatureSolverMod.F90 | 84 + .../src/GlacierThermalDiffusionMod.F90 | 141 + .../src/GroundAlbedoGlacierMod.F90 | 51 + .../physics_noahmp/src/GroundAlbedoMod.F90 | 73 + .../src/GroundRoughnessPropertyGlacierMod.F90 | 54 + .../src/GroundRoughnessPropertyMod.F90 | 86 + .../src/GroundThermalPropertyGlacierMod.F90 | 84 + .../src/GroundThermalPropertyMod.F90 | 111 + .../physics_noahmp/src/GroundWaterMmfMod.F90 | 691 ++ .../src/GroundWaterTopModelMod.F90 | 216 + .../src/HumiditySaturationMod.F90 | 63 + .../physics_noahmp/src/IrrigationFloodMod.F90 | 70 + .../src/IrrigationInfilPhilipMod.F90 | 86 + .../physics_noahmp/src/IrrigationMicroMod.F90 | 73 + .../src/IrrigationPrepareMod.F90 | 99 + .../src/IrrigationSprinklerMod.F90 | 109 + .../src/IrrigationTriggerMod.F90 | 144 + .../physics/physics_noahmp/src/Makefile | 351 + .../src/MatrixSolverTriDiagonalMod.F90 | 73 + .../src/NoahmpMainGlacierMod.F90 | 77 + .../physics_noahmp/src/NoahmpMainMod.F90 | 140 + .../physics_noahmp/src/NoahmpVarType.F90 | 31 + .../physics_noahmp/src/PhenologyMainMod.F90 | 169 + .../src/PrecipitationHeatAdvectGlacierMod.F90 | 64 + .../src/PrecipitationHeatAdvectMod.F90 | 99 + .../src/PsychrometricVariableGlacierMod.F90 | 40 + .../src/PsychrometricVariableMod.F90 | 63 + .../src/ResistanceAboveCanopyChen97Mod.F90 | 209 + .../src/ResistanceAboveCanopyMostMod.F90 | 176 + .../src/ResistanceBareGroundChen97Mod.F90 | 215 + .../src/ResistanceBareGroundMostMod.F90 | 177 + .../ResistanceCanopyStomataBallBerryMod.F90 | 173 + .../src/ResistanceCanopyStomataJarvisMod.F90 | 112 + .../ResistanceGroundEvaporationGlacierMod.F90 | 44 + .../src/ResistanceGroundEvaporationMod.F90 | 101 + .../src/ResistanceLeafToGroundMod.F90 | 106 + .../src/RunoffSubSurfaceDrainageMod.F90 | 39 + .../src/RunoffSubSurfaceEquiWaterTableMod.F90 | 52 + .../src/RunoffSubSurfaceGroundWaterMod.F90 | 43 + .../src/RunoffSubSurfaceShallowMmfMod.F90 | 52 + .../src/RunoffSurfaceBatsMod.F90 | 68 + .../src/RunoffSurfaceDynamicVicMod.F90 | 300 + .../src/RunoffSurfaceExcessDynamicVicMod.F90 | 88 + .../src/RunoffSurfaceFreeDrainMod.F90 | 132 + .../src/RunoffSurfaceTopModelEquiMod.F90 | 54 + .../src/RunoffSurfaceTopModelGrdMod.F90 | 57 + .../src/RunoffSurfaceTopModelMmfMod.F90 | 54 + .../src/RunoffSurfaceVicMod.F90 | 100 + .../src/RunoffSurfaceXinAnJiangMod.F90 | 110 + .../src/ShallowWaterTableMmfMod.F90 | 176 + .../physics_noahmp/src/SnowAgingBatsMod.F90 | 74 + .../physics_noahmp/src/SnowAlbedoBatsMod.F90 | 68 + .../physics_noahmp/src/SnowAlbedoClassMod.F90 | 68 + .../src/SnowCoverGlacierMod.F90 | 41 + .../src/SnowCoverGroundNiu07Mod.F90 | 51 + .../src/SnowLayerCombineMod.F90 | 185 + .../physics_noahmp/src/SnowLayerDivideMod.F90 | 160 + .../src/SnowLayerWaterComboMod.F90 | 70 + .../src/SnowThermalPropertyMod.F90 | 85 + .../src/SnowWaterMainGlacierMod.F90 | 141 + .../physics_noahmp/src/SnowWaterMainMod.F90 | 141 + .../src/SnowfallBelowCanopyMod.F90 | 78 + .../src/SnowpackCompactionMod.F90 | 126 + .../src/SnowpackHydrologyGlacierMod.F90 | 169 + .../src/SnowpackHydrologyMod.F90 | 159 + .../src/SoilHydraulicPropertyMod.F90 | 118 + .../src/SoilMoistureSolverMod.F90 | 148 + .../src/SoilSnowTemperatureMainMod.F90 | 84 + .../src/SoilSnowTemperatureSolverMod.F90 | 84 + .../src/SoilSnowThermalDiffusionMod.F90 | 141 + .../src/SoilSnowWaterPhaseChangeMod.F90 | 290 + .../src/SoilThermalPropertyMod.F90 | 112 + .../src/SoilWaterDiffusionRichardsMod.F90 | 180 + .../src/SoilWaterInfilGreenAmptMod.F90 | 94 + .../src/SoilWaterInfilPhilipMod.F90 | 104 + .../src/SoilWaterInfilSmithParlangeMod.F90 | 108 + .../physics_noahmp/src/SoilWaterMainMod.F90 | 270 + .../src/SoilWaterSupercoolKoren99Mod.F90 | 127 + .../src/SoilWaterSupercoolNiu06Mod.F90 | 48 + .../src/SoilWaterTranspirationMod.F90 | 91 + .../src/SurfaceAlbedoGlacierMod.F90 | 79 + .../physics_noahmp/src/SurfaceAlbedoMod.F90 | 159 + .../src/SurfaceEmissivityGlacierMod.F90 | 46 + .../src/SurfaceEmissivityMod.F90 | 61 + .../src/SurfaceEnergyFluxBareGroundMod.F90 | 227 + .../src/SurfaceEnergyFluxGlacierMod.F90 | 231 + .../src/SurfaceEnergyFluxVegetatedMod.F90 | 428 ++ .../src/SurfaceRadiationGlacierMod.F90 | 65 + .../src/SurfaceRadiationMod.F90 | 137 + .../src/TileDrainageEquiDepthMod.F90 | 69 + .../src/TileDrainageHooghoudtMod.F90 | 188 + .../src/TileDrainageSimpleMod.F90 | 213 + .../src/VaporPressureSaturationMod.F90 | 69 + .../src/WaterMainGlacierMod.F90 | 158 + .../physics_noahmp/src/WaterMainMod.F90 | 209 + .../src/WaterTableDepthSearchMod.F90 | 77 + .../src/WaterTableEquilibriumMod.F90 | 76 + .../physics_noahmp/src/WaterVarInitMod.F90 | 310 + .../physics_noahmp/src/WaterVarType.F90 | 244 + .../physics_noahmp/utility/CheckNanMod.F90 | 26 + .../physics_noahmp/utility/ErrorHandleMod.F90 | 26 + .../physics_noahmp/utility/Machine.F90 | 22 + .../physics/physics_noahmp/utility/Makefile | 30 + .../physics/physics_wrf/Makefile | 33 +- .../physics/physics_wrf/bl_mynn_post.F | 5 +- .../physics/physics_wrf/bl_mynn_pre.F | 2 +- .../physics/physics_wrf/cu_ntiedtke_post.F | 120 + .../physics/physics_wrf/cu_ntiedtke_pre.F | 187 + .../physics/physics_wrf/module_bl_ysu.F | 15 +- .../physics/physics_wrf/module_cu_ntiedtke.F | 21 +- .../physics/physics_wrf/module_mp_thompson.F | 399 +- .../physics_wrf/module_mp_thompson_aerosols.F | 214 + .../physics/physics_wrf/module_ra_rrtmg_sw.F | 36 +- .../physics_wrf/module_ra_rrtmg_sw_aerosols.F | 925 +++ .../physics/physics_wrf/module_sf_mynn.F | 33 +- .../physics/physics_wrf/module_sf_sfclayrev.F | 49 +- .../physics/physics_wrf/sf_mynn_pre.F | 2 +- .../physics/physics_wrf/sf_sfclayrev_pre.F | 101 + .../tools/manage_externals/.gitignore | 17 + .../tools/manage_externals/README.md | 231 + .../tools/manage_externals/README_FIRST | 54 + .../tools/manage_externals/checkout_externals | 43 + .../tools/manage_externals/manic/__init__.py | 9 + .../tools/manage_externals/manic/checkout.py | 449 ++ .../manic/externals_description.py | 830 +++ .../manic/externals_status.py | 164 + .../manic/global_constants.py | 18 + .../manage_externals/manic/repository.py | 98 + .../manic/repository_factory.py | 30 + .../manage_externals/manic/repository_git.py | 859 +++ .../manage_externals/manic/repository_svn.py | 291 + .../manage_externals/manic/sourcetree.py | 425 ++ .../tools/manage_externals/manic/utils.py | 330 + src/core_init_atmosphere/CMakeLists.txt | 79 + src/core_init_atmosphere/Makefile | 12 +- src/core_init_atmosphere/Registry.xml | 79 +- .../mpas_geotile_manager.F | 4 +- .../mpas_init_atm_cases.F | 18 +- .../mpas_init_atm_core_interface.F | 71 +- .../mpas_init_atm_static.F | 259 +- .../mpas_init_atm_thompson_aerosols.F | 867 +++ src/core_landice/Makefile | 2 +- src/core_landice/Registry.xml | 2 +- .../mode_forward/mpas_li_core_interface.F | 6 +- src/core_ocean/Makefile | 2 +- src/core_ocean/Registry.xml | 2 +- .../driver/mpas_ocn_core_interface.F | 6 +- src/core_seaice/Makefile | 2 +- src/core_seaice/Registry.xml | 2 +- .../mpas_seaice_core_interface.F | 6 +- src/core_sw/Makefile | 2 +- src/core_sw/Registry.xml | 2 +- src/core_sw/mpas_sw_core_interface.F | 6 +- src/core_test/Makefile | 12 +- src/core_test/Registry.xml | 20 +- src/core_test/mpas_test_core.F | 51 +- src/core_test/mpas_test_core_dmpar.F | 160 + src/core_test/mpas_test_core_field_tests.F | 68 +- src/core_test/mpas_test_core_halo_exch.F | 796 +- src/core_test/mpas_test_core_interface.F | 9 +- src/core_test/mpas_test_core_stream_inquiry.F | 225 + src/core_test/mpas_test_core_string_utils.F | 183 + src/core_test/mpas_test_openacc.F | 312 + src/external/esmf_time_f90/CMakeLists.txt | 34 + src/external/ezxml/CMakeLists.txt | 8 + src/framework/CMakeLists.txt | 70 + src/framework/mpas_abort.F | 2 +- src/framework/mpas_dmpar.F | 248 +- src/framework/mpas_framework.F | 133 + src/framework/mpas_log.F | 2 +- src/operators/CMakeLists.txt | 24 + src/tools/CMakeLists.txt | 30 + src/tools/input_gen/CMakeLists.txt | 6 + src/tools/registry/CMakeLists.txt | 17 + src/tools/registry/gen_inc.c | 46 +- src/tools/registry/gen_inc.h | 2 +- src/tools/registry/parse.c | 17 +- src/tools/registry/utility.c | 81 + src/tools/registry/utility.h | 2 + .../atmosphere/setup_atm_run_dir | 174 + testing_and_setup/compass/.gitignore | 2 + testing_and_setup/compass/README | 41 + testing_and_setup/compass/clean_testcase.py | 216 + testing_and_setup/compass/doc/README.config | 243 + .../compass/doc/README.driver_script | 125 + .../compass/doc/README.regression_suite | 42 + .../compass/doc/README.run_config | 71 + testing_and_setup/compass/doc/README.template | 114 + .../compass/general.config.landice | 44 + .../compass/general.config.ocean | 50 + testing_and_setup/compass/general.config.test | 34 + .../50000m/EISMINT-1_50000m_template.xml | 58 + .../50000m/MovingMargin1/config_driver.xml | 9 + .../MovingMargin1/config_run_model_step.xml | 33 + .../MovingMargin1/config_setup_mesh_step.xml | 51 + .../50000m/periodic_hex.namelist.input | 8 + .../EISMINT1/check_output_eismint-mm1.py | 122 + ...tial_conditions_EISMINT1-MovingMargin-1.py | 94 + .../25000m/EISMINT2_25000m_template.xml | 69 + .../decomposition_test/config_driver.xml | 17 + .../config_experiment_F_1p.xml | 37 + .../config_experiment_F_4p.xml | 37 + .../config_setup_mesh_step.xml | 1 + .../decomposition_test/output_comparison.xml | 11 + .../25000m/periodic_hex.namelist.input | 8 + .../standard_experiments/config_driver.xml | 8 + .../config_experiment_A.xml | 21 + .../config_experiment_B.xml | 21 + .../config_experiment_C.xml | 21 + .../config_experiment_D.xml | 21 + .../config_experiment_E.xml | 21 + .../config_experiment_F.xml | 21 + .../config_experiment_G.xml | 21 + .../config_setup_mesh_step.xml | 41 + .../setup_initial_conditions_EISMINT2.py | 167 + .../EISMINT2/visualize_output_EISMINT2.py | 371 + .../compass/landice/MISMIP+/README.mismip+ | 249 + .../compass/landice/MISMIP+/albany_input.xml | 241 + .../landice/MISMIP+/cull_cells_for_MISMIP.py | 74 + .../compass/landice/MISMIP+/mismip+PlotGL.py | 129 + .../MISMIP+/mismip+ResolutionAnalysis.py | 139 + .../compass/landice/MISMIP+/mismip+WriteGL.py | 318 + .../landice/MISMIP+/mismip+_template.xml | 86 + .../setup_mismip+_initial_conditions.py | 233 + .../MISMIP+/setup_mismip+_subdirectories.py | 130 + .../standard_resolution/standard_test/README | 33 + .../config_setup_experiments.xml | 278 + .../compass/landice/MISMIP3D/README | 26 + .../compass/landice/MISMIP3D/README.P75S_R | 100 + .../compass/landice/MISMIP3D/albany_input.xml | 236 + .../landice/MISMIP3D/cull_cells_for_MISMIP.py | 74 + .../full_width/Stnd/config_10000m.xml | 67 + .../MISMIP3D/full_width/Stnd/config_1000m.xml | 78 + .../MISMIP3D/full_width/Stnd/config_2000m.xml | 78 + .../MISMIP3D/full_width/Stnd/config_250m.xml | 78 + .../MISMIP3D/full_width/Stnd/config_5000m.xml | 75 + .../MISMIP3D/full_width/Stnd/config_500m.xml | 78 + .../MISMIP3D/full_width/Stnd/config_P75.xml | 68 + .../full_width/Stnd/config_driver.xml | 19 + .../minimal_width/Stnd/config_10000m.xml | 67 + .../minimal_width/Stnd/config_1000m.xml | 78 + .../minimal_width/Stnd/config_2000m.xml | 78 + .../minimal_width/Stnd/config_250m.xml | 78 + .../minimal_width/Stnd/config_5000m.xml | 78 + .../minimal_width/Stnd/config_500m.xml | 78 + .../minimal_width/Stnd/config_driver.xml | 26 + .../landice/MISMIP3D/mismip_template.xml | 83 + .../landice/MISMIP3D/plot_GL_Stnd_MISMIP3D.py | 166 + .../MISMIP3D/plot_Perturbation_MISMIP3d.py | 146 + .../landice/MISMIP3D/plot_speed_profiles.py | 95 + .../setup_mismip3d_initial_conditions.py | 185 + .../MISMIP3D/setup_mismip3d_perturb_domain.py | 245 + .../standard_configuration/README | 11 + .../config_setup_experiments.xml | 112 + .../jigsaw/generate_Thwaites_mesh.m | 247 + .../standard_configuration/config_driver.xml | 6 + .../config_setup_model_step.xml | 41 + .../landice/Thwaites_variability/README | 30 + .../Thwaites_variability/albany_input.xml | 228 + .../compare_variability_runs.py | 520 ++ .../finalize_thwaites_initial_conditions.py | 61 + .../Thwaites_variability/setup_many_runs.sh | 106 + .../slurm.edison_bundle.run | 19 + .../Thwaites_variability/slurm.wolf.run | 23 + .../thwaites_minimal.geojson | 8 + .../thwaites_template.xml | 103 + .../config_setup_experiments.xml | 116 + .../1250m/circular-shelf_1250m_template.xml | 51 + .../config_1proc_run_model_step.xml | 35 + .../config_4proc_run_model_step.xml | 33 + .../decomposition_test/config_driver.xml | 17 + .../config_setup_mesh_step.xml | 41 + .../decomposition_test/output_comparison.xml | 10 + .../1250m/periodic_hex.namelist.input | 8 + .../1250m/smoketest/config_driver.xml | 9 + .../1250m/smoketest/config_run_model_step.xml | 33 + .../smoketest/config_setup_mesh_step.xml | 41 + .../landice/circular-shelf/albany_input.xml | 190 + ...setup_circular_shelf_initial_conditions.py | 117 + .../visualize_circular_shelf.py | 139 + .../5000m/confined-shelf_5000m_template.xml | 48 + .../config_1proc_run_model_step.xml | 35 + .../config_4proc_run_model_step.xml | 33 + .../decomposition_test/config_driver.xml | 17 + .../config_setup_mesh_step.xml | 41 + .../decomposition_test/output_comparison.xml | 10 + .../5000m/periodic_hex.namelist.input | 8 + .../5000m/smoketest/config_driver.xml | 9 + .../5000m/smoketest/config_run_model_step.xml | 33 + .../smoketest/config_setup_mesh_step.xml | 41 + .../landice/confined-shelf/albany_input.xml | 190 + ...setup_confined_shelf_initial_conditions.py | 146 + .../visualize_confined_shelf.py | 182 + .../config_1proc_run_model_step.xml | 36 + .../config_4proc_run_model_step.xml | 34 + .../decomposition_test/config_driver.xml | 17 + .../config_setup_mesh_step.xml | 40 + .../decomposition_test/output_comparison.xml | 9 + .../dome/2000m/dome_2000m_template.xml | 42 + .../halfar_analytic_test/config_driver.xml | 9 + .../config_run_model_step.xml | 41 + .../config_setup_mesh_step.xml | 40 + .../config_1proc_run_model_step.xml | 40 + .../config_4proc_run_model_step.xml | 38 + .../ho_decomposition_test/config_driver.xml | 17 + .../config_setup_mesh_step.xml | 41 + .../output_comparison.xml | 9 + .../2000m/ho_restart_test/config_driver.xml | 17 + .../ho_restart_test/config_full_run_step.xml | 49 + .../config_restart_run_step.xml | 62 + .../config_setup_mesh_step.xml | 41 + .../ho_restart_test/output_comparison.xml | 10 + .../2000m/ho_vs_sia_test/config_driver.xml | 17 + .../config_ho_run_model_step.xml | 39 + .../ho_vs_sia_test/config_setup_mesh_step.xml | 41 + .../config_sia_run_model_step.xml | 39 + .../ho_vs_sia_test/output_comparison.xml | 9 + .../dome/2000m/periodic_hex.namelist.input | 8 + .../dome/2000m/restart_test/config_driver.xml | 17 + .../restart_test/config_full_run_step.xml | 48 + .../restart_test/config_restart_run_step.xml | 75 + .../restart_test/config_setup_mesh_step.xml | 40 + .../2000m/restart_test/output_comparison.xml | 10 + .../dome/2000m/smoketest/config_driver.xml | 9 + .../2000m/smoketest/config_run_model_step.xml | 34 + .../smoketest/config_setup_mesh_step.xml | 40 + .../compass/landice/dome/albany_input.xml | 154 + .../landice/dome/check_halfar_solution.py | 188 + .../dome/setup_dome_initial_conditions.py | 117 + .../config_1proc_run_model_step.xml | 36 + .../config_4proc_run_model_step.xml | 34 + .../decomposition_test/config_driver.xml | 17 + .../config_setup_mesh_step.xml | 39 + .../decomposition_test/output_comparison.xml | 9 + .../dome_varres_template.xml | 42 + .../halfar_analytic_test/config_driver.xml | 9 + .../config_run_model_step.xml | 41 + .../config_setup_mesh_step.xml | 39 + .../config_1proc_run_model_step.xml | 39 + .../config_4proc_run_model_step.xml | 37 + .../ho_decomposition_test/config_driver.xml | 17 + .../config_setup_mesh_step.xml | 39 + .../output_comparison.xml | 9 + .../ho_restart_test/config_driver.xml | 17 + .../ho_restart_test/config_full_run_step.xml | 49 + .../config_restart_run_step.xml | 62 + .../config_setup_mesh_step.xml | 39 + .../ho_restart_test/output_comparison.xml | 10 + .../restart_test/config_driver.xml | 17 + .../restart_test/config_full_run_step.xml | 48 + .../restart_test/config_restart_run_step.xml | 60 + .../restart_test/config_setup_mesh_step.xml | 39 + .../restart_test/output_comparison.xml | 10 + .../smoketest/config_driver.xml | 9 + .../smoketest/config_run_model_step.xml | 34 + .../smoketest/config_setup_mesh_step.xml | 39 + .../generate_varres_dome_mesh.m | 184 + .../compass/landice/dome/visualize_dome.py | 179 + .../config_1proc_run_model_step.xml | 41 + .../config_8proc_run_model_step.xml | 39 + .../20km/decomposition_test/config_driver.xml | 14 + .../decomposition_test/output_comparison.xml | 9 + .../20km/greenland_20km_template.xml | 50 + .../20km/restart_test/config_driver.xml | 14 + .../restart_test/config_full_run_step.xml | 54 + .../restart_test/config_restart_run_step.xml | 65 + .../20km/restart_test/output_comparison.xml | 10 + .../20km/smoke_test/config_driver.xml | 6 + .../20km/smoke_test/config_run_model_step.xml | 39 + .../landice/greenland/albany_input.xml | 189 + .../config_1proc_run_model_step.xml | 39 + .../config_3proc_run_model_step.xml | 37 + .../decomposition_test/config_driver.xml | 17 + .../config_setup_mesh_step.xml | 41 + .../decomposition_test/output_comparison.xml | 9 + .../1000m/periodic_hex.namelist.input | 8 + .../1000m/restart_test/config_driver.xml | 17 + .../restart_test/config_full_run_step.xml | 44 + .../restart_test/config_restart_run_step.xml | 73 + .../restart_test/config_setup_mesh_step.xml | 41 + .../1000m/restart_test/output_comparison.xml | 11 + .../1000m/spinup_test/config_driver.xml | 9 + .../spinup_test/config_run_model_step.xml | 37 + .../spinup_test/config_setup_mesh_step.xml | 41 + .../steady_state_drift_test/config_driver.xml | 9 + .../config_run_model_step.xml | 32 + .../config_setup_mesh_step.xml | 41 + .../compass/landice/hydro-radial/README | 78 + .../compass/landice/hydro-radial/params.m | 36 + .../hydro-radial/plot_hydro-radial_profile.py | 242 + .../compass/landice/hydro-radial/psteady.m | 16 + .../landice/hydro-radial/radial_template.xml | 58 + .../landice/hydro-radial/radialsteady.m | 187 + .../setup_hydro-radial_initial_conditions.py | 105 + .../hydro-radial/setup_mpas_radial_IC.m | 31 + .../20000m/periodic_hex.namelist.input | 8 + .../20000m/ramp_20000m_template.xml | 58 + .../20000m/smoketest/config_driver.xml | 9 + .../smoketest/config_run_model_step.xml | 33 + .../smoketest/config_setup_mesh_step.xml | 41 + .../hydro-ramp/plot_hydro-ramp_profile.py | 134 + .../setup_hydro-ramp_initial_conditions.py | 69 + .../hydro-shmip/convert_mpas_to_shmip.py | 183 + .../hydro-shmip/standard_resolution/README | 21 + .../experiment_A/config_driver.xml | 24 + .../experiment_A/config_experiment_A1.xml | 41 + .../experiment_A/config_experiment_A2.xml | 41 + .../experiment_A/config_experiment_A3.xml | 41 + .../experiment_A/config_experiment_A4.xml | 41 + .../experiment_A/config_experiment_A5.xml | 41 + .../experiment_A/config_experiment_A6.xml | 41 + .../config_setup_sqrt_mesh_step.xml | 52 + ...ro-shmip_experimentA_initial_conditions.py | 109 + .../experiment_B/config_driver.xml | 13 + .../experiment_B/config_experiment_B1.xml | 23 + .../experiment_B/config_experiment_B2.xml | 23 + .../experiment_B/config_experiment_B3.xml | 23 + .../experiment_B/config_experiment_B4.xml | 23 + .../experiment_B/config_experiment_B5.xml | 23 + ...ro-shmip_experimentB_initial_conditions.py | 255 + .../experiment_C/config_driver.xml | 13 + .../experiment_C/config_experiment_C1.xml | 37 + .../experiment_C/config_experiment_C2.xml | 37 + .../experiment_C/config_experiment_C3.xml | 37 + .../experiment_C/config_experiment_C4.xml | 37 + ...ro-shmip_experimentC_initial_conditions.py | 42 + .../experiment_D/config_driver.xml | 15 + .../experiment_D/config_experiment_D1.xml | 36 + .../experiment_D/config_experiment_D2.xml | 34 + .../experiment_D/config_experiment_D3.xml | 36 + .../experiment_D/config_experiment_D4.xml | 36 + .../experiment_D/config_experiment_D5.xml | 36 + ...ro-shmip_experimentD_initial_conditions.py | 41 + .../experiment_E/config_driver.xml | 21 + .../experiment_E/config_experiment_E1.xml | 42 + .../config_setup_valley_mesh_step.xml | 51 + ...ro-shmip_experimentE_initial_conditions.py | 134 + .../periodic_hex.namelist.input.sqrt | 10 + .../periodic_hex.namelist.input.sqrt.1km | 10 + .../periodic_hex.namelist.input.sqrt.250m | 10 + .../periodic_hex.namelist.input.sqrt.2km | 10 + .../periodic_hex.namelist.input.sqrt.500m | 10 + .../periodic_hex.namelist.input.valley | 10 + .../standard_resolution/shmip_template.xml | 96 + .../hydro-shmip/visualize_output_shmip.py | 408 + .../hydro-shmip/visualize_output_shmip_C.py | 260 + .../hydro-shmip/visualize_output_shmip_D.py | 195 + .../landice/initMIP-AIS/build_bmb_forcing.sh | 57 + .../landice/initMIP-AIS/build_smb_forcing.sh | 61 + .../landice/initMIP-AIS/plot_globalStats.py | 63 + .../landice/initMIP-AIS/plot_regionalStats.py | 118 + .../landice/initMIP-AIS/process_xtime.py | 19 + .../spinup/calibrate_calving_parameter.py | 180 + .../spinup/plot_stats_for_paper.py | 118 + .../ho_integration_test_suite.xml | 32 + .../standard_integration_test_suite.xml | 42 + testing_and_setup/compass/list_testcases.py | 114 + .../compass/manage_regression_suite.py | 582 ++ .../10km/baroclinic_channel_10km_template.xml | 43 + .../10km/decomp_test/config_4proc_run.xml | 23 + .../10km/decomp_test/config_8proc_run.xml | 23 + .../10km/decomp_test/config_driver.xml | 19 + .../10km/decomp_test/config_init1.xml | 63 + .../10km/decomp_test/config_init2.xml | 50 + .../10km/default/config_driver.xml | 11 + .../10km/default/config_forward.xml | 23 + .../10km/default/config_init1.xml | 63 + .../10km/default/config_init2.xml | 50 + .../10km/restart_test/config_driver.xml | 19 + .../10km/restart_test/config_full_run.xml | 26 + .../10km/restart_test/config_init1.xml | 63 + .../10km/restart_test/config_init2.xml | 50 + .../10km/restart_test/config_restart_run.xml | 31 + .../restart_test/restart_setup_template.xml | 17 + .../10km/threads_test/config_4proc_run.xml | 23 + .../10km/threads_test/config_8proc_run.xml | 23 + .../10km/threads_test/config_driver.xml | 19 + .../10km/threads_test/config_init1.xml | 63 + .../10km/threads_test/config_init2.xml | 50 + .../global_ocean/EC120to60/default/.gitignore | 4 + .../EC120to60/default/config_driver.xml | 19 + .../EC120to60/default/config_forward.xml | 40 + .../EC120to60/default/config_init1.xml | 21 + .../EC120to60/default/config_init2.xml | 51 + .../global_ocean/EC120to60/spin_up/.gitignore | 5 + .../EC120to60/spin_up/config_driver.xml | 19 + .../EC120to60/spin_up/config_forward.xml | 48 + .../EC120to60/spin_up/config_init1.xml | 21 + .../EC120to60/spin_up/config_init2.xml | 51 + .../EC120to60/spin_up/config_spin_up1.xml | 48 + .../EC120to60/template_forward.xml | 11 + .../global_ocean/EC60to30/default/.gitignore | 4 + .../EC60to30/default/config_driver.xml | 19 + .../EC60to30/default/config_forward.xml | 39 + .../EC60to30/default/config_init1.xml | 21 + .../EC60to30/default/config_init2.xml | 51 + .../EC60to30/five_cell/config_driver.xml | 19 + .../EC60to30/five_cell/config_forward.xml | 33 + .../EC60to30/five_cell/config_init1.xml | 26 + .../EC60to30/five_cell/config_init2.xml | 43 + .../five_cell/land_coverage_5_cell.geojson | 41 + .../EC60to30/single_cell/config_driver.xml | 19 + .../EC60to30/single_cell/config_forward.xml | 33 + .../EC60to30/single_cell/config_init1.xml | 26 + .../EC60to30/single_cell/config_init2.xml | 43 + .../single_cell/land_coverage_1_cell.geojson | 41 + .../global_ocean/EC60to30/spin_up/.gitignore | 5 + .../EC60to30/spin_up/config_driver.xml | 19 + .../EC60to30/spin_up/config_forward.xml | 48 + .../EC60to30/spin_up/config_init1.xml | 21 + .../EC60to30/spin_up/config_init2.xml | 51 + .../EC60to30/spin_up/config_spin_up1.xml | 47 + .../EC60to30/template_forward.xml | 11 + .../EC60to30/with_land_ice/.gitignore | 9 + .../with_land_ice/config_adjust_ssh.xml | 47 + .../EC60to30/with_land_ice/config_driver.xml | 25 + .../EC60to30/with_land_ice/config_forward.xml | 64 + .../EC60to30/with_land_ice/config_init1.xml | 22 + .../EC60to30/with_land_ice/config_init2.xml | 55 + .../with_land_ice/config_init2_smoothed.xml | 54 + .../with_land_ice/config_spin_up1.xml | 59 + .../global_ocean/QU120/default/.gitignore | 4 + .../QU120/default/config_driver.xml | 16 + .../QU120/default/config_forward.xml | 41 + .../QU120/default/config_init1.xml | 21 + .../QU120/default/config_init2.xml | 48 + .../QU120/ecosys_60_layer/config_driver.xml | 17 + .../QU120/ecosys_60_layer/config_forward.xml | 72 + .../QU120/ecosys_60_layer/config_init1.xml | 21 + .../QU120/ecosys_60_layer/config_init2.xml | 62 + .../global_ocean/QU120/template_forward.xml | 8 + .../QU120/with_land_ice/.gitignore | 6 + .../QU120/with_land_ice/config_adjust_ssh.xml | 44 + .../QU120/with_land_ice/config_driver.xml | 22 + .../QU120/with_land_ice/config_forward.xml | 44 + .../QU120/with_land_ice/config_init1.xml | 22 + .../QU120/with_land_ice/config_init2.xml | 50 + .../QU240/analysis_test/config_driver.xml | 89 + .../QU240/analysis_test/config_forward.xml | 97 + .../QU240/analysis_test/config_init1.xml | 21 + .../QU240/analysis_test/config_init2.xml | 48 + .../global_ocean/QU240/default/.gitignore | 4 + .../QU240/default/config_driver.xml | 16 + .../QU240/default/config_forward.xml | 38 + .../QU240/default/config_init1.xml | 21 + .../QU240/default/config_init2.xml | 51 + .../QU240/performance_test/config_driver.xml | 19 + .../QU240/performance_test/config_forward.xml | 39 + .../QU240/performance_test/config_init1.xml | 21 + .../QU240/performance_test/config_init2.xml | 48 + .../QU240/restart_test/.gitignore | 5 + .../QU240/restart_test/config_driver.xml | 19 + .../QU240/restart_test/config_full_run.xml | 37 + .../QU240/restart_test/config_init1.xml | 21 + .../QU240/restart_test/config_init2.xml | 49 + .../QU240/restart_test/config_restart_run.xml | 43 + .../restart_test/restart_setup_template.xml | 18 + .../QU240/rk4_blocks_test/.gitignore | 5 + .../rk4_blocks_test/config_4blocks_run.xml | 38 + .../rk4_blocks_test/config_8blocks_run.xml | 39 + .../QU240/rk4_blocks_test/config_driver.xml | 19 + .../QU240/rk4_blocks_test/config_init1.xml | 21 + .../QU240/rk4_blocks_test/config_init2.xml | 49 + .../QU240/se_blocks_test/.gitignore | 5 + .../se_blocks_test/config_4blocks_run.xml | 36 + .../se_blocks_test/config_8blocks_run.xml | 37 + .../QU240/se_blocks_test/config_driver.xml | 19 + .../QU240/se_blocks_test/config_init1.xml | 21 + .../QU240/se_blocks_test/config_init2.xml | 49 + .../global_ocean/QU240/template_forward.xml | 10 + .../QU240/with_land_ice/config_adjust_ssh.xml | 35 + .../QU240/with_land_ice/config_driver.xml | 22 + .../QU240/with_land_ice/config_forward.xml | 39 + .../QU240/with_land_ice/config_init1.xml | 22 + .../QU240/with_land_ice/config_init2.xml | 52 + .../QU240/with_land_ice_no_iter/.gitignore | 4 + .../with_land_ice_no_iter/config_driver.xml | 19 + .../with_land_ice_no_iter/config_forward.xml | 39 + .../with_land_ice_no_iter/config_init1.xml | 22 + .../with_land_ice_no_iter/config_init2.xml | 52 + .../QU240/zstar_128_layers/config_driver.xml | 19 + .../QU240/zstar_128_layers/config_forward.xml | 39 + .../QU240/zstar_128_layers/config_init1.xml | 21 + .../QU240/zstar_128_layers/config_init2.xml | 54 + .../global_ocean/QU480/default/.gitignore | 4 + .../QU480/default/config_driver.xml | 16 + .../QU480/default/config_forward.xml | 39 + .../QU480/default/config_init1.xml | 21 + .../QU480/default/config_init2.xml | 51 + .../global_ocean/QU480/template_forward.xml | 9 + .../RRS15to5/default/config_driver.xml | 16 + .../RRS15to5/default/config_forward.xml | 37 + .../RRS15to5/default/config_init1.xml | 20 + .../RRS15to5/default/config_init2.xml | 49 + .../RRS15to5/spin_up/config_driver.xml | 28 + .../RRS15to5/spin_up/config_forward.xml | 51 + .../RRS15to5/spin_up/config_init1.xml | 20 + .../RRS15to5/spin_up/config_init2.xml | 49 + .../RRS15to5/spin_up/config_spin_up1.xml | 50 + .../RRS15to5/spin_up/config_spin_up2.xml | 54 + .../RRS15to5/spin_up/config_spin_up3.xml | 54 + .../RRS15to5/spin_up/config_spin_up4.xml | 54 + .../RRS15to5/template_forward.xml | 11 + .../RRS18to6/default/config_driver.xml | 16 + .../RRS18to6/default/config_forward.xml | 37 + .../RRS18to6/default/config_init1.xml | 20 + .../RRS18to6/default/config_init2.xml | 49 + .../RRS18to6/spin_up/config_driver.xml | 28 + .../RRS18to6/spin_up/config_forward.xml | 51 + .../RRS18to6/spin_up/config_init1.xml | 20 + .../RRS18to6/spin_up/config_init2.xml | 49 + .../RRS18to6/spin_up/config_spin_up1.xml | 50 + .../RRS18to6/spin_up/config_spin_up2.xml | 54 + .../RRS18to6/spin_up/config_spin_up3.xml | 54 + .../RRS18to6/spin_up/config_spin_up4.xml | 54 + .../RRS18to6/template_forward.xml | 11 + .../global_ocean/RRS30to10/default/.gitignore | 4 + .../RRS30to10/default/config_driver.xml | 16 + .../RRS30to10/default/config_forward.xml | 39 + .../RRS30to10/default/config_init1.xml | 20 + .../RRS30to10/default/config_init2.xml | 49 + .../global_ocean/RRS30to10/spin_up/.gitignore | 8 + .../RRS30to10/spin_up/config_driver.xml | 28 + .../RRS30to10/spin_up/config_forward.xml | 51 + .../RRS30to10/spin_up/config_init1.xml | 20 + .../RRS30to10/spin_up/config_init2.xml | 49 + .../RRS30to10/spin_up/config_spin_up1.xml | 50 + .../RRS30to10/spin_up/config_spin_up2.xml | 55 + .../RRS30to10/spin_up/config_spin_up3.xml | 54 + .../RRS30to10/spin_up/config_spin_up4.xml | 54 + .../RRS30to10/template_forward.xml | 9 + .../RRS30to10/with_land_ice/.gitignore | 9 + .../with_land_ice/config_adjust_ssh.xml | 49 + .../RRS30to10/with_land_ice/config_driver.xml | 34 + .../with_land_ice/config_forward.xml | 62 + .../RRS30to10/with_land_ice/config_init1.xml | 21 + .../RRS30to10/with_land_ice/config_init2.xml | 55 + .../with_land_ice/config_spin_up1.xml | 57 + .../with_land_ice/config_spin_up2.xml | 60 + .../with_land_ice/config_spin_up3.xml | 60 + .../with_land_ice/config_spin_up4.xml | 60 + .../compass/ocean/global_ocean/init_step1.py | 159 + .../global_ocean/template_adjust_ssh.xml | 28 + .../template_critical_passages.xml | 16 + .../ocean/global_ocean/template_forward.xml | 19 + .../ocean/global_ocean/template_init2.xml | 160 + .../template_init_with_land_ice.xml | 34 + .../5km/default/config_driver.xml | 11 + .../5km/default/config_forward.xml | 23 + .../5km/default/config_init1.xml | 63 + .../5km/default/config_init2.xml | 50 + .../5km/internal_waves_5km_template.xml | 43 + .../5km/ten-day/config_driver.xml | 11 + .../5km/ten-day/config_forward.xml | 33 + .../5km/ten-day/config_init1.xml | 63 + .../5km/ten-day/config_init2.xml | 50 + .../10km/expt1.01/config_adjust_ssh.xml | 31 + .../isomip/10km/expt1.01/config_driver.xml | 22 + .../isomip/10km/expt1.01/config_forward.xml | 30 + .../isomip/10km/expt1.01/config_init1.xml | 40 + .../isomip/10km/expt1.01/config_init2.xml | 26 + .../10km/expt2.01/config_adjust_ssh.xml | 31 + .../isomip/10km/expt2.01/config_driver.xml | 22 + .../isomip/10km/expt2.01/config_forward.xml | 30 + .../isomip/10km/expt2.01/config_init1.xml | 45 + .../isomip/10km/expt2.01/config_init2.xml | 31 + .../ocean/isomip/template_adjust_ssh.xml | 20 + .../compass/ocean/isomip/template_forward.xml | 60 + .../compass/ocean/isomip/template_init.xml | 53 + .../ocean/isomip_plus/2km/Ocean0/.gitignore | 1 + .../2km/Ocean0/config_adjust_ssh.xml | 40 + .../isomip_plus/2km/Ocean0/config_driver.xml | 22 + .../isomip_plus/2km/Ocean0/config_forward.xml | 38 + .../2km/Ocean0/config_forward_kpp.xml | 48 + .../2km/Ocean0/config_forward_short.xml | 36 + .../2km/Ocean0/config_forward_unforced.xml | 34 + .../isomip_plus/2km/Ocean0/config_init1.xml | 55 + .../isomip_plus/2km/Ocean0/config_init2.xml | 30 + .../2km/Ocean1/config_adjust_ssh.xml | 40 + .../isomip_plus/2km/Ocean1/config_driver.xml | 22 + .../isomip_plus/2km/Ocean1/config_forward.xml | 38 + .../2km/Ocean1/config_forward_kpp.xml | 48 + .../2km/Ocean1/config_forward_short.xml | 36 + .../isomip_plus/2km/Ocean1/config_init1.xml | 55 + .../isomip_plus/2km/Ocean1/config_init2.xml | 30 + .../2km/Ocean2/config_adjust_ssh.xml | 40 + .../isomip_plus/2km/Ocean2/config_driver.xml | 22 + .../isomip_plus/2km/Ocean2/config_forward.xml | 38 + .../2km/Ocean2/config_forward_kpp.xml | 48 + .../2km/Ocean2/config_forward_short.xml | 36 + .../isomip_plus/2km/Ocean2/config_init1.xml | 57 + .../isomip_plus/2km/Ocean2/config_init2.xml | 32 + .../ocean/isomip_plus/5km/Ocean0/.gitignore | 1 + .../5km/Ocean0/config_adjust_ssh.xml | 41 + .../isomip_plus/5km/Ocean0/config_driver.xml | 22 + .../isomip_plus/5km/Ocean0/config_forward.xml | 40 + .../isomip_plus/5km/Ocean0/config_init1.xml | 55 + .../isomip_plus/5km/Ocean0/config_init2.xml | 30 + .../5km/Ocean1/config_adjust_ssh.xml | 1 + .../isomip_plus/5km/Ocean1/config_driver.xml | 1 + .../isomip_plus/5km/Ocean1/config_forward.xml | 1 + .../isomip_plus/5km/Ocean1/config_init1.xml | 55 + .../isomip_plus/5km/Ocean1/config_init2.xml | 30 + .../5km/Ocean2/config_adjust_ssh.xml | 1 + .../isomip_plus/5km/Ocean2/config_driver.xml | 1 + .../isomip_plus/5km/Ocean2/config_forward.xml | 1 + .../isomip_plus/5km/Ocean2/config_init1.xml | 57 + .../isomip_plus/5km/Ocean2/config_init2.xml | 32 + .../isomip_plus/5km/template_forward.xml | 34 + .../ocean/isomip_plus/processInputGeometry.py | 120 + .../isomip_plus/setup_Ocean0_param_study.py | 26 + .../template_Ocean0_param_study.xml | 40 + .../ocean/isomip_plus/template_adjust_ssh.xml | 28 + .../ocean/isomip_plus/template_forward.xml | 109 + .../ocean/isomip_plus/template_init.xml | 81 + .../isomip_plus/update_evaporationFlux.py | 95 + .../isomip_plus/viz/computeAndPlotResults.py | 93 + .../viz/computeBarotropicStreamfunction.py | 159 + .../viz/computeMISOMIPInterpCoeffs.py | 282 + .../viz/computeOverturningStreamfunction.py | 296 + .../isomip_plus/viz/interpMISOMIPResults.py | 414 ++ .../ocean/isomip_plus/viz/plotMeltFluxes.py | 176 + .../ocean/isomip_plus/viz/plotResults.py | 365 + .../iterate_init.py | 116 + .../plot_cart_ssh_landIcePressure.py | 161 + .../0.5km/default/config_driver.xml | 22 + .../0.5km/default/config_forward.xml | 54 + .../0.5km/default/config_init1.xml | 63 + .../0.5km/default/config_init2.xml | 50 + .../16km/default/config_driver.xml | 22 + .../16km/default/config_forward.xml | 51 + .../16km/default/config_init1.xml | 63 + .../16km/default/config_init2.xml | 51 + .../ocean/overflow/10km/default/.gitignore | 4 + .../overflow/10km/default/config_driver.xml | 22 + .../overflow/10km/default/config_forward.xml | 52 + .../overflow/10km/default/config_init1.xml | 64 + .../overflow/10km/default/config_init2.xml | 51 + .../20km/default_light/config_driver.xml | 22 + .../20km/default_light/config_forward.xml | 84 + .../20km/default_light/config_init1.xml | 64 + .../20km/default_light/config_init2.xml | 53 + .../region_reset_light_test/config_driver.xml | 22 + .../config_forward.xml | 100 + .../region_reset_light_test/config_init1.xml | 64 + .../region_reset_light_test/config_init2.xml | 53 + .../time_reset_light_test/config_driver.xml | 22 + .../time_reset_light_test/config_forward.xml | 85 + .../time_reset_light_test/config_init1.xml | 64 + .../time_reset_light_test/config_init2.xml | 53 + .../regression_suites/land_ice_fluxes.xml | 41 + .../compass/ocean/regression_suites/light.xml | 17 + .../ocean/regression_suites/nightly.xml | 44 + .../compass/ocean/scripts/plot_globalStats.py | 82 + .../compass/ocean/sea_mount/6.7km/.gitignore | 3 + .../sea_mount/6.7km/default/config_driver.xml | 11 + .../6.7km/default/config_forward.xml | 25 + .../sea_mount/6.7km/default/config_init1.xml | 63 + .../sea_mount/6.7km/default/config_init2.xml | 51 + .../sea_mount/6.7km/template_forward.xml | 37 + .../ocean/soma/16km/3layer/config_driver.xml | 17 + .../ocean/soma/16km/3layer/config_forward.xml | 60 + .../ocean/soma/16km/3layer/config_init1.xml | 69 + .../ocean/soma/16km/3layer/config_init2.xml | 69 + .../ocean/soma/16km/default/config_driver.xml | 17 + .../soma/16km/default/config_forward.xml | 54 + .../ocean/soma/16km/default/config_init1.xml | 66 + .../ocean/soma/16km/default/config_init2.xml | 67 + .../16km/surface_restoring/config_driver.xml | 17 + .../16km/surface_restoring/config_forward.xml | 55 + .../16km/surface_restoring/config_init1.xml | 70 + .../16km/surface_restoring/config_init2.xml | 73 + .../ocean/soma/32km/3layer/config_driver.xml | 17 + .../ocean/soma/32km/3layer/config_forward.xml | 60 + .../ocean/soma/32km/3layer/config_init1.xml | 69 + .../ocean/soma/32km/3layer/config_init2.xml | 69 + .../ocean/soma/32km/default/config_driver.xml | 28 + .../soma/32km/default/config_forward.xml | 55 + .../ocean/soma/32km/default/config_init1.xml | 66 + .../ocean/soma/32km/default/config_init2.xml | 67 + .../32km/surface_restoring/config_driver.xml | 17 + .../32km/surface_restoring/config_forward.xml | 55 + .../32km/surface_restoring/config_init1.xml | 70 + .../32km/surface_restoring/config_init2.xml | 73 + .../ocean/soma/4km/32to4km/config_driver.xml | 28 + .../ocean/soma/4km/32to4km/config_forward.xml | 55 + .../ocean/soma/4km/32to4km/config_init1.xml | 68 + .../ocean/soma/4km/32to4km/config_init2.xml | 67 + .../ocean/soma/4km/3layer/config_driver.xml | 17 + .../ocean/soma/4km/3layer/config_forward.xml | 62 + .../ocean/soma/4km/3layer/config_init1.xml | 69 + .../ocean/soma/4km/3layer/config_init2.xml | 69 + .../ocean/soma/4km/default/config_driver.xml | 17 + .../ocean/soma/4km/default/config_forward.xml | 56 + .../ocean/soma/4km/default/config_init1.xml | 66 + .../ocean/soma/4km/default/config_init2.xml | 67 + .../4km/surface_restoring/config_driver.xml | 17 + .../4km/surface_restoring/config_forward.xml | 57 + .../4km/surface_restoring/config_init1.xml | 70 + .../4km/surface_restoring/config_init2.xml | 73 + .../ocean/soma/8km/32to8km/config_driver.xml | 28 + .../ocean/soma/8km/32to8km/config_forward.xml | 55 + .../ocean/soma/8km/32to8km/config_init1.xml | 68 + .../ocean/soma/8km/32to8km/config_init2.xml | 67 + .../ocean/soma/8km/3layer/config_driver.xml | 17 + .../ocean/soma/8km/3layer/config_forward.xml | 60 + .../ocean/soma/8km/3layer/config_init1.xml | 69 + .../ocean/soma/8km/3layer/config_init2.xml | 69 + .../ocean/soma/8km/default/config_driver.xml | 17 + .../ocean/soma/8km/default/config_forward.xml | 54 + .../ocean/soma/8km/default/config_init1.xml | 66 + .../ocean/soma/8km/default/config_init2.xml | 67 + .../8km/surface_restoring/config_driver.xml | 17 + .../8km/surface_restoring/config_forward.xml | 55 + .../8km/surface_restoring/config_init1.xml | 70 + .../8km/surface_restoring/config_init2.xml | 73 + .../ocean/soma/soma_analysis_members.xml | 48 + .../compass/ocean/soma/soma_run.xml | 80 + .../compass/ocean/soma/soma_template.xml | 27 + .../ocean/sub_ice_shelf_2D/5km/.gitignore | 3 + .../5km/Haney_number_init/config_driver.xml | 19 + .../5km/Haney_number_init/config_forward.xml | 29 + .../5km/Haney_number_init/config_init1.xml | 37 + .../5km/Haney_number_init/config_init2.xml | 24 + .../config_adjust_ssh.xml | 31 + .../config_driver.xml | 22 + .../config_forward.xml | 29 + .../config_init1.xml | 38 + .../config_init2.xml | 25 + .../5km/default/config_driver.xml | 19 + .../5km/default/config_forward.xml | 29 + .../5km/default/config_init1.xml | 35 + .../5km/default/config_init2.xml | 22 + .../5km/iterative_init/config_adjust_ssh.xml | 31 + .../5km/iterative_init/config_driver.xml | 22 + .../5km/iterative_init/config_forward.xml | 29 + .../5km/iterative_init/config_init1.xml | 36 + .../5km/iterative_init/config_init2.xml | 23 + .../5km/restart_test/config_adjust_ssh.xml | 31 + .../5km/restart_test/config_driver.xml | 28 + .../5km/restart_test/config_full_run.xml | 34 + .../5km/restart_test/config_init1.xml | 35 + .../5km/restart_test/config_init2.xml | 26 + .../5km/restart_test/config_restart_run.xml | 46 + .../restart_test/restart_setup_template.xml | 23 + .../5km/template_adjust_ssh.xml | 20 + .../sub_ice_shelf_2D/5km/template_forward.xml | 50 + .../sub_ice_shelf_2D/5km/template_init.xml | 51 + .../5km/with_frazil/config_adjust_ssh.xml | 31 + .../5km/with_frazil/config_driver.xml | 25 + .../5km/with_frazil/config_forward.xml | 32 + .../5km/with_frazil/config_init1.xml | 35 + .../5km/with_frazil/config_init2.xml | 27 + .../analysis_members/debug_diagnostics.xml | 28 + .../eddy_product_variables.xml | 31 + .../analysis_members/eliassen_palm.xml | 90 + .../analysis_members/global_stats.xml | 38 + .../global_stats_text_only.xml | 38 + .../high_frequency_output.xml | 30 + .../lagrangian_particle_tracking.xml | 149 + .../layer_volume_weighted_averages.xml | 31 + .../meridional_heat_transport.xml | 34 + .../analysis_members/mixed_layer_depths.xml | 40 + .../analysis_members/okubo_weiss.xml | 36 + .../surface_area_weighted_averages.xml | 29 + .../test_compute_interval.xml | 27 + .../analysis_members/time_filters.xml | 52 + .../analysis_members/time_series_stats.xml | 59 + .../analysis_members/water_mass_census.xml | 35 + .../templates/analysis_members/zonal_mean.xml | 36 + .../compass/ocean/templates/debugging.xml | 33 + .../ocean/templates/streams/KPP_testing.xml | 38 + .../ocean/templates/streams/forcing_data.xml | 26 + .../ocean/templates/streams/frazil.xml | 22 + .../templates/streams/land_ice_fluxes.xml | 34 + .../templates/streams/minimal_output.xml | 17 + .../ocean/templates/streams/output.xml | 56 + .../streams/shortwave_forcing_data.xml | 16 + .../validations/LIGHT_comparison.xml | 12 + .../templates/validations/LIGHT_timers.xml | 11 + .../validations/ecosys_comparison.xml | 36 + .../validations/frazil_comparison.xml | 14 + .../validations/land_ice_flux_comparison.xml | 25 + .../validations/prognostic_comparison.xml | 9 + .../ocean/ziso/10km/default/config_driver.xml | 11 + .../ziso/10km/default/config_forward.xml | 53 + .../ocean/ziso/10km/default/config_init1.xml | 70 + .../ocean/ziso/10km/default/config_init2.xml | 71 + .../ziso/2.5km/default/config_driver.xml | 11 + .../ziso/2.5km/default/config_forward.xml | 53 + .../ocean/ziso/2.5km/default/config_init1.xml | 70 + .../ocean/ziso/2.5km/default/config_init2.xml | 71 + .../ocean/ziso/20km/default/config_driver.xml | 26 + .../ziso/20km/default/config_forward.xml | 59 + .../ocean/ziso/20km/default/config_init1.xml | 70 + .../ocean/ziso/20km/default/config_init2.xml | 71 + .../ziso/20km/with_frazil/config_driver.xml | 20 + .../ziso/20km/with_frazil/config_forward.xml | 44 + .../ziso/20km/with_frazil/config_init1.xml | 71 + .../ziso/20km/with_frazil/config_init2.xml | 72 + .../ocean/ziso/5km/default/config_driver.xml | 11 + .../ocean/ziso/5km/default/config_forward.xml | 53 + .../ocean/ziso/5km/default/config_init1.xml | 70 + .../ocean/ziso/5km/default/config_init2.xml | 71 + .../ocean/ziso/ziso_analysis_members.xml | 54 + .../compass/ocean/ziso/ziso_run.xml | 73 + .../compass/ocean/ziso/ziso_template.xml | 28 + .../compass/runtime_definitions/mpirun.xml | 9 + .../compass/runtime_definitions/srun.xml | 9 + testing_and_setup/compass/setup_testcase.py | 1870 +++++ .../test/basic_spherical/960km/.gitignore | 2 + .../960km/default/config_driver.xml | 10 + .../960km/default/config_test.xml | 42 + .../compass/test/example_regression_suite.xml | 5 + .../compass/utility_scripts/check_progress.py | 98 + .../compass/utility_scripts/compare_fields.py | 173 + .../compass/utility_scripts/compare_timers.py | 79 + .../utility_scripts/make_graph_file.py | 64 + .../make_parameter_study_configs.py | 57 + .../compass/utility_scripts/setup_restart.py | 55 + .../configurations/standard_physics/README | 1 + testing_and_setup/seaice/testing/.gitignore | 2 + testing_and_setup/seaice/testing/README | 95 + .../seaice/testing/compare_mpas_files.py | 167 + .../seaice/testing/test_mpas-seaice.py | 143 + .../seaice/testing/testing_utils.py | 296 + .../seaice/testing/tests/parallelism.py | 96 + .../seaice/testing/tests/regression.py | 80 + .../seaice/testing/tests/restartability.py | 106 + .../testing/testsuites/testsuite.standard.xml | 10 + .../testsuites/testsuite.standard_bgc.xml | 12 + 1040 files changed, 81362 insertions(+), 24547 deletions(-) create mode 100755 load_monan_app_modules.sh create mode 100644 make.output create mode 100755 make.sh create mode 100644 src/core_atmosphere/Externals.cfg create mode 100644 src/core_atmosphere/physics/Registry_noahmp.xml create mode 100644 src/core_atmosphere/physics/ccpp_kind_types.F delete mode 100644 src/core_atmosphere/physics/ccpp_kinds.F create mode 100644 src/core_atmosphere/physics/mpas_atmphys_driver_lsm_noahmp.F create mode 100644 src/core_atmosphere/physics/mpas_atmphys_lsm_noahmpfinalize.F create mode 100644 src/core_atmosphere/physics/mpas_atmphys_lsm_noahmpinit.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/Makefile delete mode 100644 src/core_atmosphere/physics/physics_mmm/bl_gwdo.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/bl_mynn.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/bl_mynn_subroutines.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/bl_ysu.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/cu_ntiedtke.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/module_libmassv.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/module_sprayHFs.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/mp_radar.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/mp_wsm6.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/mp_wsm6_effectRad.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/mynn_shared.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/sf_mynn.F delete mode 100644 src/core_atmosphere/physics/physics_mmm/sf_sfclayrev.F create mode 100644 src/core_atmosphere/physics/physics_noahmp/README.md create mode 100644 src/core_atmosphere/physics/physics_noahmp/RELEASE_NOTES.md create mode 100644 src/core_atmosphere/physics/physics_noahmp/docs/NoahMP_refactored_variable_name_glossary_Feb2023.xlsx create mode 100644 src/core_atmosphere/physics/physics_noahmp/docs/NoahMP_v5_technote.pdf create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/BiochemVarInTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/BiochemVarOutTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/ConfigVarInTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/ConfigVarOutTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/EnergyVarInTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/EnergyVarOutTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/ForcingVarInTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/ForcingVarOutTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/Makefile create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpDriverMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpGroundwaterInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpIOVarFinalizeMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpIOVarInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpIOVarType.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpInitMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpReadNamelistMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpReadTableMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/NoahmpSnowInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/PedoTransferSR2006Mod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/WaterVarInTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/drivers/mpas/WaterVarOutTransferMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/AtmosForcingMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/BalanceErrorCheckGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/BalanceErrorCheckMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/BiochemCropMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/BiochemNatureVegMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/BiochemVarInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/BiochemVarType.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/CanopyHydrologyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/CanopyRadiationTwoStreamMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/CanopyWaterInterceptMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/CarbonFluxCropMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/CarbonFluxNatureVegMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ConfigVarInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ConfigVarType.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ConstantDefineMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/CropGrowDegreeDayMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/CropPhotosynthesisMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/EnergyMainGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/EnergyMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/EnergyVarInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/EnergyVarType.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ForcingVarInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ForcingVarType.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GeneralInitGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GeneralInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GlacierIceThermalPropertyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GlacierPhaseChangeMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GlacierTemperatureMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GlacierTemperatureSolverMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GlacierThermalDiffusionMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GroundAlbedoGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GroundAlbedoMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GroundRoughnessPropertyGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GroundRoughnessPropertyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GroundThermalPropertyGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GroundThermalPropertyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GroundWaterMmfMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/GroundWaterTopModelMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/HumiditySaturationMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/IrrigationFloodMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/IrrigationInfilPhilipMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/IrrigationMicroMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/IrrigationPrepareMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/IrrigationSprinklerMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/IrrigationTriggerMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/Makefile create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/MatrixSolverTriDiagonalMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/NoahmpMainGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/NoahmpMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/NoahmpVarType.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/PhenologyMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/PrecipitationHeatAdvectGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/PrecipitationHeatAdvectMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/PsychrometricVariableGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/PsychrometricVariableMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceAboveCanopyChen97Mod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceAboveCanopyMostMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceBareGroundChen97Mod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceBareGroundMostMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceCanopyStomataBallBerryMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceCanopyStomataJarvisMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceGroundEvaporationGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceGroundEvaporationMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ResistanceLeafToGroundMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSubSurfaceDrainageMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSubSurfaceEquiWaterTableMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSubSurfaceGroundWaterMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSubSurfaceShallowMmfMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceBatsMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceDynamicVicMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceExcessDynamicVicMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceFreeDrainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceTopModelEquiMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceTopModelGrdMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceTopModelMmfMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceVicMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/RunoffSurfaceXinAnJiangMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/ShallowWaterTableMmfMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowAgingBatsMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowAlbedoBatsMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowAlbedoClassMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowCoverGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowCoverGroundNiu07Mod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowLayerCombineMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowLayerDivideMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowLayerWaterComboMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowThermalPropertyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowWaterMainGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowWaterMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowfallBelowCanopyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowpackCompactionMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowpackHydrologyGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SnowpackHydrologyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilHydraulicPropertyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilMoistureSolverMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilSnowTemperatureMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilSnowTemperatureSolverMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilSnowThermalDiffusionMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilSnowWaterPhaseChangeMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilThermalPropertyMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilWaterDiffusionRichardsMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilWaterInfilGreenAmptMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilWaterInfilPhilipMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilWaterInfilSmithParlangeMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilWaterMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilWaterSupercoolKoren99Mod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilWaterSupercoolNiu06Mod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SoilWaterTranspirationMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceAlbedoGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceAlbedoMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceEmissivityGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceEmissivityMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceEnergyFluxBareGroundMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceEnergyFluxGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceEnergyFluxVegetatedMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceRadiationGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/SurfaceRadiationMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/TileDrainageEquiDepthMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/TileDrainageHooghoudtMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/TileDrainageSimpleMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/VaporPressureSaturationMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/WaterMainGlacierMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/WaterMainMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/WaterTableDepthSearchMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/WaterTableEquilibriumMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/WaterVarInitMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/src/WaterVarType.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/utility/CheckNanMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/utility/ErrorHandleMod.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/utility/Machine.F90 create mode 100644 src/core_atmosphere/physics/physics_noahmp/utility/Makefile create mode 100644 src/core_atmosphere/physics/physics_wrf/cu_ntiedtke_post.F create mode 100644 src/core_atmosphere/physics/physics_wrf/cu_ntiedtke_pre.F create mode 100644 src/core_atmosphere/physics/physics_wrf/module_mp_thompson_aerosols.F create mode 100644 src/core_atmosphere/physics/physics_wrf/module_ra_rrtmg_sw_aerosols.F create mode 100644 src/core_atmosphere/physics/physics_wrf/sf_sfclayrev_pre.F create mode 100644 src/core_atmosphere/tools/manage_externals/.gitignore create mode 100644 src/core_atmosphere/tools/manage_externals/README.md create mode 100644 src/core_atmosphere/tools/manage_externals/README_FIRST create mode 100755 src/core_atmosphere/tools/manage_externals/checkout_externals create mode 100644 src/core_atmosphere/tools/manage_externals/manic/__init__.py create mode 100755 src/core_atmosphere/tools/manage_externals/manic/checkout.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/externals_description.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/externals_status.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/global_constants.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/repository.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/repository_factory.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/repository_git.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/repository_svn.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/sourcetree.py create mode 100644 src/core_atmosphere/tools/manage_externals/manic/utils.py create mode 100644 src/core_init_atmosphere/CMakeLists.txt create mode 100644 src/core_init_atmosphere/mpas_init_atm_thompson_aerosols.F create mode 100644 src/core_test/mpas_test_core_dmpar.F create mode 100644 src/core_test/mpas_test_core_stream_inquiry.F create mode 100644 src/core_test/mpas_test_core_string_utils.F create mode 100644 src/core_test/mpas_test_openacc.F create mode 100644 src/external/esmf_time_f90/CMakeLists.txt create mode 100644 src/external/ezxml/CMakeLists.txt create mode 100644 src/framework/CMakeLists.txt create mode 100644 src/operators/CMakeLists.txt create mode 100644 src/tools/CMakeLists.txt create mode 100644 src/tools/input_gen/CMakeLists.txt create mode 100644 src/tools/registry/CMakeLists.txt create mode 100755 testing_and_setup/atmosphere/setup_atm_run_dir create mode 100644 testing_and_setup/compass/.gitignore create mode 100644 testing_and_setup/compass/README create mode 100755 testing_and_setup/compass/clean_testcase.py create mode 100644 testing_and_setup/compass/doc/README.config create mode 100644 testing_and_setup/compass/doc/README.driver_script create mode 100644 testing_and_setup/compass/doc/README.regression_suite create mode 100644 testing_and_setup/compass/doc/README.run_config create mode 100644 testing_and_setup/compass/doc/README.template create mode 100644 testing_and_setup/compass/general.config.landice create mode 100644 testing_and_setup/compass/general.config.ocean create mode 100644 testing_and_setup/compass/general.config.test create mode 100644 testing_and_setup/compass/landice/EISMINT1/50000m/EISMINT-1_50000m_template.xml create mode 100644 testing_and_setup/compass/landice/EISMINT1/50000m/MovingMargin1/config_driver.xml create mode 100644 testing_and_setup/compass/landice/EISMINT1/50000m/MovingMargin1/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/EISMINT1/50000m/MovingMargin1/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/EISMINT1/50000m/periodic_hex.namelist.input create mode 100755 testing_and_setup/compass/landice/EISMINT1/check_output_eismint-mm1.py create mode 100755 testing_and_setup/compass/landice/EISMINT1/setup_initial_conditions_EISMINT1-MovingMargin-1.py create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/EISMINT2_25000m_template.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/decomposition_test/config_experiment_F_1p.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/decomposition_test/config_experiment_F_4p.xml create mode 120000 testing_and_setup/compass/landice/EISMINT2/25000m/decomposition_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/periodic_hex.namelist.input create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_driver.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_experiment_A.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_experiment_B.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_experiment_C.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_experiment_D.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_experiment_E.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_experiment_F.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_experiment_G.xml create mode 100644 testing_and_setup/compass/landice/EISMINT2/25000m/standard_experiments/config_setup_mesh_step.xml create mode 100755 testing_and_setup/compass/landice/EISMINT2/setup_initial_conditions_EISMINT2.py create mode 100755 testing_and_setup/compass/landice/EISMINT2/visualize_output_EISMINT2.py create mode 100644 testing_and_setup/compass/landice/MISMIP+/README.mismip+ create mode 100644 testing_and_setup/compass/landice/MISMIP+/albany_input.xml create mode 100755 testing_and_setup/compass/landice/MISMIP+/cull_cells_for_MISMIP.py create mode 100755 testing_and_setup/compass/landice/MISMIP+/mismip+PlotGL.py create mode 100755 testing_and_setup/compass/landice/MISMIP+/mismip+ResolutionAnalysis.py create mode 100755 testing_and_setup/compass/landice/MISMIP+/mismip+WriteGL.py create mode 100644 testing_and_setup/compass/landice/MISMIP+/mismip+_template.xml create mode 100755 testing_and_setup/compass/landice/MISMIP+/setup_mismip+_initial_conditions.py create mode 100755 testing_and_setup/compass/landice/MISMIP+/setup_mismip+_subdirectories.py create mode 100644 testing_and_setup/compass/landice/MISMIP+/standard_resolution/standard_test/README create mode 100644 testing_and_setup/compass/landice/MISMIP+/standard_resolution/standard_test/config_setup_experiments.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/README create mode 100644 testing_and_setup/compass/landice/MISMIP3D/README.P75S_R create mode 100644 testing_and_setup/compass/landice/MISMIP3D/albany_input.xml create mode 100755 testing_and_setup/compass/landice/MISMIP3D/cull_cells_for_MISMIP.py create mode 100644 testing_and_setup/compass/landice/MISMIP3D/full_width/Stnd/config_10000m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/full_width/Stnd/config_1000m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/full_width/Stnd/config_2000m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/full_width/Stnd/config_250m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/full_width/Stnd/config_5000m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/full_width/Stnd/config_500m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/full_width/Stnd/config_P75.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/full_width/Stnd/config_driver.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/minimal_width/Stnd/config_10000m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/minimal_width/Stnd/config_1000m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/minimal_width/Stnd/config_2000m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/minimal_width/Stnd/config_250m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/minimal_width/Stnd/config_5000m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/minimal_width/Stnd/config_500m.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/minimal_width/Stnd/config_driver.xml create mode 100644 testing_and_setup/compass/landice/MISMIP3D/mismip_template.xml create mode 100755 testing_and_setup/compass/landice/MISMIP3D/plot_GL_Stnd_MISMIP3D.py create mode 100755 testing_and_setup/compass/landice/MISMIP3D/plot_Perturbation_MISMIP3d.py create mode 100755 testing_and_setup/compass/landice/MISMIP3D/plot_speed_profiles.py create mode 100755 testing_and_setup/compass/landice/MISMIP3D/setup_mismip3d_initial_conditions.py create mode 100755 testing_and_setup/compass/landice/MISMIP3D/setup_mismip3d_perturb_domain.py create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/1km_varres_jigsaw/standard_configuration/README create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/1km_varres_jigsaw/standard_configuration/config_setup_experiments.xml create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/1km_varres_jigsaw/standard_configuration/jigsaw/generate_Thwaites_mesh.m create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/4km_varres/standard_configuration/config_driver.xml create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/4km_varres/standard_configuration/config_setup_model_step.xml create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/README create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/albany_input.xml create mode 100755 testing_and_setup/compass/landice/Thwaites_variability/compare_variability_runs.py create mode 100755 testing_and_setup/compass/landice/Thwaites_variability/finalize_thwaites_initial_conditions.py create mode 100755 testing_and_setup/compass/landice/Thwaites_variability/setup_many_runs.sh create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/slurm.edison_bundle.run create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/slurm.wolf.run create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/thwaites_minimal.geojson create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/thwaites_template.xml create mode 100644 testing_and_setup/compass/landice/Thwaites_variability/uniform_resolution/resolution_testing_configuration/config_setup_experiments.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/circular-shelf_1250m_template.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/decomposition_test/config_1proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/decomposition_test/config_4proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/decomposition_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/periodic_hex.namelist.input create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/smoketest/config_driver.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/smoketest/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/1250m/smoketest/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/circular-shelf/albany_input.xml create mode 100755 testing_and_setup/compass/landice/circular-shelf/setup_circular_shelf_initial_conditions.py create mode 100755 testing_and_setup/compass/landice/circular-shelf/visualize_circular_shelf.py create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/confined-shelf_5000m_template.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/decomposition_test/config_1proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/decomposition_test/config_4proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/decomposition_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/periodic_hex.namelist.input create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/smoketest/config_driver.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/smoketest/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/5000m/smoketest/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/confined-shelf/albany_input.xml create mode 100755 testing_and_setup/compass/landice/confined-shelf/setup_confined_shelf_initial_conditions.py create mode 100755 testing_and_setup/compass/landice/confined-shelf/visualize_confined_shelf.py create mode 100644 testing_and_setup/compass/landice/dome/2000m/decomposition_test/config_1proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/decomposition_test/config_4proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/decomposition_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/dome_2000m_template.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/halfar_analytic_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/halfar_analytic_test/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/halfar_analytic_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_decomposition_test/config_1proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_decomposition_test/config_4proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_decomposition_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_restart_test/config_full_run_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_restart_test/config_restart_run_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_restart_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_restart_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_vs_sia_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_vs_sia_test/config_ho_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_vs_sia_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_vs_sia_test/config_sia_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/ho_vs_sia_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/periodic_hex.namelist.input create mode 100644 testing_and_setup/compass/landice/dome/2000m/restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/restart_test/config_full_run_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/restart_test/config_restart_run_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/restart_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/restart_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/smoketest/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/smoketest/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/2000m/smoketest/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/albany_input.xml create mode 100755 testing_and_setup/compass/landice/dome/check_halfar_solution.py create mode 100755 testing_and_setup/compass/landice/dome/setup_dome_initial_conditions.py create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/decomposition_test/config_1proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/decomposition_test/config_4proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/decomposition_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/dome_varres_template.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/halfar_analytic_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/halfar_analytic_test/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/halfar_analytic_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_decomposition_test/config_1proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_decomposition_test/config_4proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_decomposition_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_restart_test/config_full_run_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_restart_test/config_restart_run_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_restart_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/ho_restart_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/restart_test/config_full_run_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/restart_test/config_restart_run_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/restart_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/restart_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/smoketest/config_driver.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/smoketest/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution/smoketest/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/dome/variable_resolution_jigsaw/generate_varres_dome_mesh.m create mode 100755 testing_and_setup/compass/landice/dome/visualize_dome.py create mode 100644 testing_and_setup/compass/landice/greenland/20km/decomposition_test/config_1proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/decomposition_test/config_8proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/greenland_20km_template.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/restart_test/config_full_run_step.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/restart_test/config_restart_run_step.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/restart_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/smoke_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/greenland/20km/smoke_test/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/greenland/albany_input.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/decomposition_test/config_1proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/decomposition_test/config_3proc_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/decomposition_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/decomposition_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/decomposition_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/periodic_hex.namelist.input create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/restart_test/config_full_run_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/restart_test/config_restart_run_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/restart_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/restart_test/output_comparison.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/spinup_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/spinup_test/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/spinup_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/steady_state_drift_test/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/steady_state_drift_test/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/1000m/steady_state_drift_test/config_setup_mesh_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/README create mode 100644 testing_and_setup/compass/landice/hydro-radial/params.m create mode 100755 testing_and_setup/compass/landice/hydro-radial/plot_hydro-radial_profile.py create mode 100644 testing_and_setup/compass/landice/hydro-radial/psteady.m create mode 100644 testing_and_setup/compass/landice/hydro-radial/radial_template.xml create mode 100644 testing_and_setup/compass/landice/hydro-radial/radialsteady.m create mode 100755 testing_and_setup/compass/landice/hydro-radial/setup_hydro-radial_initial_conditions.py create mode 100644 testing_and_setup/compass/landice/hydro-radial/setup_mpas_radial_IC.m create mode 100644 testing_and_setup/compass/landice/hydro-ramp/20000m/periodic_hex.namelist.input create mode 100644 testing_and_setup/compass/landice/hydro-ramp/20000m/ramp_20000m_template.xml create mode 100644 testing_and_setup/compass/landice/hydro-ramp/20000m/smoketest/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-ramp/20000m/smoketest/config_run_model_step.xml create mode 100644 testing_and_setup/compass/landice/hydro-ramp/20000m/smoketest/config_setup_mesh_step.xml create mode 100755 testing_and_setup/compass/landice/hydro-ramp/plot_hydro-ramp_profile.py create mode 100755 testing_and_setup/compass/landice/hydro-ramp/setup_hydro-ramp_initial_conditions.py create mode 100755 testing_and_setup/compass/landice/hydro-shmip/convert_mpas_to_shmip.py create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/README create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/config_experiment_A1.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/config_experiment_A2.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/config_experiment_A3.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/config_experiment_A4.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/config_experiment_A5.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/config_experiment_A6.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/config_setup_sqrt_mesh_step.xml create mode 100755 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_A/setup_hydro-shmip_experimentA_initial_conditions.py create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_B/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_B/config_experiment_B1.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_B/config_experiment_B2.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_B/config_experiment_B3.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_B/config_experiment_B4.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_B/config_experiment_B5.xml create mode 100755 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_B/setup_hydro-shmip_experimentB_initial_conditions.py create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_C/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_C/config_experiment_C1.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_C/config_experiment_C2.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_C/config_experiment_C3.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_C/config_experiment_C4.xml create mode 100755 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_C/setup_hydro-shmip_experimentC_initial_conditions.py create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_D/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_D/config_experiment_D1.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_D/config_experiment_D2.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_D/config_experiment_D3.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_D/config_experiment_D4.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_D/config_experiment_D5.xml create mode 100755 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_D/setup_hydro-shmip_experimentD_initial_conditions.py create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_E/config_driver.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_E/config_experiment_E1.xml create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_E/config_setup_valley_mesh_step.xml create mode 100755 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/experiment_E/setup_hydro-shmip_experimentE_initial_conditions.py create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/periodic_hex.namelist.input.sqrt create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/periodic_hex.namelist.input.sqrt.1km create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/periodic_hex.namelist.input.sqrt.250m create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/periodic_hex.namelist.input.sqrt.2km create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/periodic_hex.namelist.input.sqrt.500m create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/periodic_hex.namelist.input.valley create mode 100644 testing_and_setup/compass/landice/hydro-shmip/standard_resolution/shmip_template.xml create mode 100755 testing_and_setup/compass/landice/hydro-shmip/visualize_output_shmip.py create mode 100755 testing_and_setup/compass/landice/hydro-shmip/visualize_output_shmip_C.py create mode 100755 testing_and_setup/compass/landice/hydro-shmip/visualize_output_shmip_D.py create mode 100755 testing_and_setup/compass/landice/initMIP-AIS/build_bmb_forcing.sh create mode 100755 testing_and_setup/compass/landice/initMIP-AIS/build_smb_forcing.sh create mode 100644 testing_and_setup/compass/landice/initMIP-AIS/plot_globalStats.py create mode 100644 testing_and_setup/compass/landice/initMIP-AIS/plot_regionalStats.py create mode 100755 testing_and_setup/compass/landice/initMIP-AIS/process_xtime.py create mode 100755 testing_and_setup/compass/landice/initMIP-AIS/spinup/calibrate_calving_parameter.py create mode 100755 testing_and_setup/compass/landice/initMIP-AIS/spinup/plot_stats_for_paper.py create mode 100644 testing_and_setup/compass/landice/regression_suites/ho_integration_test_suite.xml create mode 100644 testing_and_setup/compass/landice/regression_suites/standard_integration_test_suite.xml create mode 100755 testing_and_setup/compass/list_testcases.py create mode 100755 testing_and_setup/compass/manage_regression_suite.py create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/baroclinic_channel_10km_template.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/decomp_test/config_4proc_run.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/decomp_test/config_8proc_run.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/decomp_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/decomp_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/decomp_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/restart_test/config_full_run.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/restart_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/restart_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/restart_test/config_restart_run.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/restart_test/restart_setup_template.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/threads_test/config_4proc_run.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/threads_test/config_8proc_run.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/threads_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/threads_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/baroclinic_channel/10km/threads_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/default/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/spin_up/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/spin_up/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/spin_up/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/spin_up/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/spin_up/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/spin_up/config_spin_up1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC120to60/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/default/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/five_cell/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/five_cell/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/five_cell/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/five_cell/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/five_cell/land_coverage_5_cell.geojson create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/single_cell/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/single_cell/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/single_cell/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/single_cell/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/single_cell/land_coverage_1_cell.geojson create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/spin_up/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/spin_up/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/spin_up/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/spin_up/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/spin_up/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/spin_up/config_spin_up1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/with_land_ice/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/with_land_ice/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/with_land_ice/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/with_land_ice/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/with_land_ice/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/with_land_ice/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/with_land_ice/config_init2_smoothed.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/EC60to30/with_land_ice/config_spin_up1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/default/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/ecosys_60_layer/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/ecosys_60_layer/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/ecosys_60_layer/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/ecosys_60_layer/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/with_land_ice/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/with_land_ice/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/with_land_ice/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/with_land_ice/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/with_land_ice/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU120/with_land_ice/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/analysis_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/analysis_test/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/analysis_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/analysis_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/default/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/performance_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/performance_test/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/performance_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/performance_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/restart_test/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/restart_test/config_full_run.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/restart_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/restart_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/restart_test/config_restart_run.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/restart_test/restart_setup_template.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/rk4_blocks_test/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/rk4_blocks_test/config_4blocks_run.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/rk4_blocks_test/config_8blocks_run.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/rk4_blocks_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/rk4_blocks_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/rk4_blocks_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/se_blocks_test/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/se_blocks_test/config_4blocks_run.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/se_blocks_test/config_8blocks_run.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/se_blocks_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/se_blocks_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/se_blocks_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice_no_iter/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice_no_iter/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice_no_iter/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice_no_iter/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/with_land_ice_no_iter/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/zstar_128_layers/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/zstar_128_layers/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/zstar_128_layers/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU240/zstar_128_layers/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU480/default/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU480/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU480/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU480/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU480/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/QU480/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/spin_up/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/spin_up/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/spin_up/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/spin_up/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/spin_up/config_spin_up1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/spin_up/config_spin_up2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/spin_up/config_spin_up3.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/spin_up/config_spin_up4.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS15to5/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/spin_up/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/spin_up/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/spin_up/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/spin_up/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/spin_up/config_spin_up1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/spin_up/config_spin_up2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/spin_up/config_spin_up3.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/spin_up/config_spin_up4.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS18to6/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/default/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/config_spin_up1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/config_spin_up2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/config_spin_up3.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/spin_up/config_spin_up4.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/.gitignore create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_spin_up1.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_spin_up2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_spin_up3.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/RRS30to10/with_land_ice/config_spin_up4.xml create mode 100755 testing_and_setup/compass/ocean/global_ocean/init_step1.py create mode 100644 testing_and_setup/compass/ocean/global_ocean/template_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/template_critical_passages.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/template_init2.xml create mode 100644 testing_and_setup/compass/ocean/global_ocean/template_init_with_land_ice.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/internal_waves_5km_template.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/ten-day/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/ten-day/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/ten-day/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/internal_waves/5km/ten-day/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt1.01/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt1.01/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt1.01/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt1.01/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt1.01/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt2.01/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt2.01/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt2.01/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt2.01/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/isomip/10km/expt2.01/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/isomip/template_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/isomip/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip/template_init.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/.gitignore create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/config_forward_kpp.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/config_forward_short.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/config_forward_unforced.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean0/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean1/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean1/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean1/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean1/config_forward_kpp.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean1/config_forward_short.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean1/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean1/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean2/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean2/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean2/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean2/config_forward_kpp.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean2/config_forward_short.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean2/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/2km/Ocean2/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean0/.gitignore create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean0/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean0/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean0/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean0/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean0/config_init2.xml create mode 120000 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean1/config_adjust_ssh.xml create mode 120000 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean1/config_driver.xml create mode 120000 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean1/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean1/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean1/config_init2.xml create mode 120000 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean2/config_adjust_ssh.xml create mode 120000 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean2/config_driver.xml create mode 120000 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean2/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean2/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/Ocean2/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/5km/template_forward.xml create mode 100755 testing_and_setup/compass/ocean/isomip_plus/processInputGeometry.py create mode 100755 testing_and_setup/compass/ocean/isomip_plus/setup_Ocean0_param_study.py create mode 100644 testing_and_setup/compass/ocean/isomip_plus/template_Ocean0_param_study.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/template_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/isomip_plus/template_init.xml create mode 100755 testing_and_setup/compass/ocean/isomip_plus/update_evaporationFlux.py create mode 100755 testing_and_setup/compass/ocean/isomip_plus/viz/computeAndPlotResults.py create mode 100755 testing_and_setup/compass/ocean/isomip_plus/viz/computeBarotropicStreamfunction.py create mode 100755 testing_and_setup/compass/ocean/isomip_plus/viz/computeMISOMIPInterpCoeffs.py create mode 100755 testing_and_setup/compass/ocean/isomip_plus/viz/computeOverturningStreamfunction.py create mode 100755 testing_and_setup/compass/ocean/isomip_plus/viz/interpMISOMIPResults.py create mode 100755 testing_and_setup/compass/ocean/isomip_plus/viz/plotMeltFluxes.py create mode 100755 testing_and_setup/compass/ocean/isomip_plus/viz/plotResults.py create mode 100755 testing_and_setup/compass/ocean/iterative_ssh_landIcePressure_scripts/iterate_init.py create mode 100755 testing_and_setup/compass/ocean/iterative_ssh_landIcePressure_scripts/plot_cart_ssh_landIcePressure.py create mode 100644 testing_and_setup/compass/ocean/lock_exchange/0.5km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/lock_exchange/0.5km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/lock_exchange/0.5km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/lock_exchange/0.5km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/lock_exchange/16km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/lock_exchange/16km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/lock_exchange/16km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/lock_exchange/16km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/overflow/10km/default/.gitignore create mode 100644 testing_and_setup/compass/ocean/overflow/10km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/overflow/10km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/overflow/10km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/overflow/10km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/default_light/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/default_light/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/default_light/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/default_light/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/region_reset_light_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/region_reset_light_test/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/region_reset_light_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/region_reset_light_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/time_reset_light_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/time_reset_light_test/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/time_reset_light_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/periodic_planar/20km/time_reset_light_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/regression_suites/land_ice_fluxes.xml create mode 100644 testing_and_setup/compass/ocean/regression_suites/light.xml create mode 100644 testing_and_setup/compass/ocean/regression_suites/nightly.xml create mode 100755 testing_and_setup/compass/ocean/scripts/plot_globalStats.py create mode 100644 testing_and_setup/compass/ocean/sea_mount/6.7km/.gitignore create mode 100644 testing_and_setup/compass/ocean/sea_mount/6.7km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/sea_mount/6.7km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/sea_mount/6.7km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/sea_mount/6.7km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/sea_mount/6.7km/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/3layer/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/3layer/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/3layer/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/3layer/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/surface_restoring/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/surface_restoring/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/surface_restoring/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/16km/surface_restoring/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/3layer/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/3layer/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/3layer/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/3layer/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/surface_restoring/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/surface_restoring/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/surface_restoring/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/32km/surface_restoring/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/32to4km/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/32to4km/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/32to4km/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/32to4km/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/3layer/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/3layer/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/3layer/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/3layer/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/surface_restoring/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/surface_restoring/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/surface_restoring/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/4km/surface_restoring/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/32to8km/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/32to8km/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/32to8km/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/32to8km/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/3layer/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/3layer/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/3layer/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/3layer/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/surface_restoring/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/surface_restoring/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/surface_restoring/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/soma/8km/surface_restoring/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/soma/soma_analysis_members.xml create mode 100644 testing_and_setup/compass/ocean/soma/soma_run.xml create mode 100644 testing_and_setup/compass/ocean/soma/soma_template.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/.gitignore create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_init/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_init/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_init/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_init/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_iterative_init/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_iterative_init/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_iterative_init/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_iterative_init/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/Haney_number_iterative_init/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/iterative_init/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/iterative_init/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/iterative_init/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/iterative_init/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/iterative_init/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/restart_test/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/restart_test/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/restart_test/config_full_run.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/restart_test/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/restart_test/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/restart_test/config_restart_run.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/restart_test/restart_setup_template.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/template_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/template_forward.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/template_init.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/with_frazil/config_adjust_ssh.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/with_frazil/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/with_frazil/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/with_frazil/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/sub_ice_shelf_2D/5km/with_frazil/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/debug_diagnostics.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/eddy_product_variables.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/eliassen_palm.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/global_stats.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/global_stats_text_only.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/high_frequency_output.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/lagrangian_particle_tracking.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/layer_volume_weighted_averages.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/meridional_heat_transport.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/mixed_layer_depths.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/okubo_weiss.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/surface_area_weighted_averages.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/test_compute_interval.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/time_filters.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/time_series_stats.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/water_mass_census.xml create mode 100644 testing_and_setup/compass/ocean/templates/analysis_members/zonal_mean.xml create mode 100644 testing_and_setup/compass/ocean/templates/debugging.xml create mode 100644 testing_and_setup/compass/ocean/templates/streams/KPP_testing.xml create mode 100644 testing_and_setup/compass/ocean/templates/streams/forcing_data.xml create mode 100644 testing_and_setup/compass/ocean/templates/streams/frazil.xml create mode 100644 testing_and_setup/compass/ocean/templates/streams/land_ice_fluxes.xml create mode 100644 testing_and_setup/compass/ocean/templates/streams/minimal_output.xml create mode 100644 testing_and_setup/compass/ocean/templates/streams/output.xml create mode 100644 testing_and_setup/compass/ocean/templates/streams/shortwave_forcing_data.xml create mode 100644 testing_and_setup/compass/ocean/templates/validations/LIGHT_comparison.xml create mode 100644 testing_and_setup/compass/ocean/templates/validations/LIGHT_timers.xml create mode 100644 testing_and_setup/compass/ocean/templates/validations/ecosys_comparison.xml create mode 100644 testing_and_setup/compass/ocean/templates/validations/frazil_comparison.xml create mode 100644 testing_and_setup/compass/ocean/templates/validations/land_ice_flux_comparison.xml create mode 100644 testing_and_setup/compass/ocean/templates/validations/prognostic_comparison.xml create mode 100644 testing_and_setup/compass/ocean/ziso/10km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/ziso/10km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/ziso/10km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/ziso/10km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/ziso/2.5km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/ziso/2.5km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/ziso/2.5km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/ziso/2.5km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/ziso/20km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/ziso/20km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/ziso/20km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/ziso/20km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/ziso/20km/with_frazil/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/ziso/20km/with_frazil/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/ziso/20km/with_frazil/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/ziso/20km/with_frazil/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/ziso/5km/default/config_driver.xml create mode 100644 testing_and_setup/compass/ocean/ziso/5km/default/config_forward.xml create mode 100644 testing_and_setup/compass/ocean/ziso/5km/default/config_init1.xml create mode 100644 testing_and_setup/compass/ocean/ziso/5km/default/config_init2.xml create mode 100644 testing_and_setup/compass/ocean/ziso/ziso_analysis_members.xml create mode 100644 testing_and_setup/compass/ocean/ziso/ziso_run.xml create mode 100644 testing_and_setup/compass/ocean/ziso/ziso_template.xml create mode 100644 testing_and_setup/compass/runtime_definitions/mpirun.xml create mode 100644 testing_and_setup/compass/runtime_definitions/srun.xml create mode 100755 testing_and_setup/compass/setup_testcase.py create mode 100644 testing_and_setup/compass/test/basic_spherical/960km/.gitignore create mode 100644 testing_and_setup/compass/test/basic_spherical/960km/default/config_driver.xml create mode 100644 testing_and_setup/compass/test/basic_spherical/960km/default/config_test.xml create mode 100644 testing_and_setup/compass/test/example_regression_suite.xml create mode 100755 testing_and_setup/compass/utility_scripts/check_progress.py create mode 100755 testing_and_setup/compass/utility_scripts/compare_fields.py create mode 100755 testing_and_setup/compass/utility_scripts/compare_timers.py create mode 100755 testing_and_setup/compass/utility_scripts/make_graph_file.py create mode 100755 testing_and_setup/compass/utility_scripts/make_parameter_study_configs.py create mode 100755 testing_and_setup/compass/utility_scripts/setup_restart.py create mode 100644 testing_and_setup/seaice/configurations/standard_physics/README create mode 100644 testing_and_setup/seaice/testing/.gitignore create mode 100644 testing_and_setup/seaice/testing/README create mode 100755 testing_and_setup/seaice/testing/compare_mpas_files.py create mode 100755 testing_and_setup/seaice/testing/test_mpas-seaice.py create mode 100644 testing_and_setup/seaice/testing/testing_utils.py create mode 100755 testing_and_setup/seaice/testing/tests/parallelism.py create mode 100755 testing_and_setup/seaice/testing/tests/regression.py create mode 100755 testing_and_setup/seaice/testing/tests/restartability.py create mode 100644 testing_and_setup/seaice/testing/testsuites/testsuite.standard.xml create mode 100644 testing_and_setup/seaice/testing/testsuites/testsuite.standard_bgc.xml diff --git a/.gitignore b/.gitignore index 1b9bb0ed5..42e80e9e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,44 +1,63 @@ -# Compiling output logs and scripts -*.output.init_atmosphere -*.output.atmosphere -*.sh -inc - -# Namelists -namelist.atmosphere -namelist.init_atmosphere -stream_list.* -streams.* +# Ignore Files in the MPAS Direcory -# Prerequisites -*.d +# All pre-processed Fortran files in MPAS specific directories +src/core_*/Registry_processed.xml +src/core_*/*.f90 +src/framework/*.f90 +src/driver/*.f90 +src/operators/*.f90 -# Compiled Object files -*.slo -*.lo +# All object files *.o -*.obj - -# Precompiled Headers -*.gch -*.pch -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files +# All mod files *.mod -*.smod -# Compiled Static libraries -*.lai -*.la +# All libraries *.a -*.lib # Executables -*.exe +*_model +build_tables + +# NetCDF Files +*.nc + +# Restart timestamp file +restart_timestamp + +# Graph files and partition files +*.info +*.info.part.* + +# Error, Output, and Abort log files *.out -*.app +*.err +*.abort + +# Text files (For statistical output from ocean model) +*.txt +!CMakeLists.txt + +# Directories with individual .gitignore files are: +# src/external (Externals might have a different compilation method) +# src/inc (Include files don't exist until build time. But directory needs to exist.) +# src/core_atmosphere (Directory to include object files from physics in the atmosphere core library.) + +# Ignore WRF Physics Files +*.TBL +*DATA* + +# Files for detecting whether builds of cores or shared framework can be reused +.build_opts* + +# Ignore all runtime config files +namelist.* +streams.* +stream_list.* + +# Intermediate files that may be produced by Intel compilers +*.i +*.i90 + +src/core_*/inc diff --git a/Makefile b/Makefile index ae8e47729..292ea8eb1 100644 --- a/Makefile +++ b/Makefile @@ -9,18 +9,18 @@ dummy: gnu: # BUILDTARGET GNU Fortran, C, and C++ compilers ( $(MAKE) all \ - "FC_PARALLEL = mpif90" \ - "CC_PARALLEL = mpicc" \ - "CXX_PARALLEL = mpicxx" \ + "FC_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90" \ + "CC_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc" \ + "CXX_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicxx" \ "FC_SERIAL = gfortran" \ "CC_SERIAL = gcc" \ "CXX_SERIAL = g++" \ "FFLAGS_PROMOTION = -fdefault-real-8 -fdefault-double-8" \ - "FFLAGS_OPT = -std=f2008 -O3 -fallow-argument-mismatch -ffree-line-length-none -fconvert=big-endian -ffree-form" \ + "FFLAGS_OPT = -std=f2008 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form" \ "CFLAGS_OPT = -O3" \ "CXXFLAGS_OPT = -O3" \ "LDFLAGS_OPT = -O3" \ - "FFLAGS_DEBUG = -g -ffree-line-length-none -fallow-argument-mismatch -fconvert=big-endian -ffree-form -fcheck=all -fbacktrace -ffpe-trap=invalid,zero,overflow" \ + "FFLAGS_DEBUG = -std=f2008 -g -ffree-line-length-none -fconvert=big-endian -ffree-form -fcheck=all -fbacktrace -ffpe-trap=invalid,zero,overflow" \ "CFLAGS_DEBUG = -g" \ "CXXFLAGS_DEBUG = -g" \ "LDFLAGS_DEBUG = -g" \ @@ -154,7 +154,7 @@ nvhpc: # BUILDTARGET NVIDIA HPC SDK "FFLAGS_DEBUG = -O0 -g -Mbounds -Mchkptr -byteswapio -Mfree -Ktrap=divz,fp,inv,ovf -traceback" \ "CFLAGS_DEBUG = -O0 -g -traceback" \ "CXXFLAGS_DEBUG = -O0 -g -traceback" \ - "LDFLAGS_DEBUG = -O0 -g -Mbounds -Mchkptr -Ktrap=divz,fp,inv,ovf -traceback" \ + "LDFLAGS_DEBUG = -O0 -g -Mbounds -Ktrap=divz,fp,inv,ovf -traceback" \ "FFLAGS_OMP = -mp" \ "CFLAGS_OMP = -mp" \ "FFLAGS_ACC = -Mnofma -acc -gpu=cc70,cc80 -Minfo=accel" \ @@ -184,7 +184,7 @@ pgi: # BUILDTARGET PGI compiler suite "FFLAGS_DEBUG = -O0 -g -Mbounds -Mchkptr -byteswapio -Mfree -Ktrap=divz,fp,inv,ovf -traceback" \ "CFLAGS_DEBUG = -O0 -g -traceback" \ "CXXFLAGS_DEBUG = -O0 -g -traceback" \ - "LDFLAGS_DEBUG = -O0 -g -Mbounds -Mchkptr -Ktrap=divz,fp,inv,ovf -traceback" \ + "LDFLAGS_DEBUG = -O0 -g -Mbounds -Ktrap=divz,fp,inv,ovf -traceback" \ "FFLAGS_OMP = -mp" \ "CFLAGS_OMP = -mp" \ "FFLAGS_ACC = -Mnofma -acc -Minfo=accel" \ @@ -216,7 +216,7 @@ pgi-summit: # BUILDTARGET PGI compiler suite w/OpenACC options for ORNL Summit "FFLAGS_DEBUG = -O0 -g -Mbounds -Mchkptr -byteswapio -Mfree -Ktrap=divz,fp,inv,ovf -traceback" \ "CFLAGS_DEBUG = -O0 -g -traceback" \ "CXXFLAGS_DEBUG = -O0 -g -traceback" \ - "LDFLAGS_DEBUG = -O0 -g -Mbounds -Mchkptr -Ktrap=divz,fp,inv,ovf -traceback" \ + "LDFLAGS_DEBUG = -O0 -g -Mbounds -Ktrap=divz,fp,inv,ovf -traceback" \ "FFLAGS_OMP = -mp" \ "CFLAGS_OMP = -mp" \ "PICFLAG = -fpic" \ @@ -380,9 +380,9 @@ intel-mpi: # BUILDTARGET Intel compiler suite with Intel MPI library gfortran: # BUILDTARGET GNU Fortran, C, and C++ compilers ( $(MAKE) all \ - "FC_PARALLEL = mpif90" \ - "CC_PARALLEL = mpicc" \ - "CXX_PARALLEL = mpicxx" \ + "FC_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90" \ + "CC_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc" \ + "CXX_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicxx" \ "FC_SERIAL = gfortran" \ "CC_SERIAL = gcc" \ "CXX_SERIAL = g++" \ @@ -670,7 +670,7 @@ intel: # BUILDTARGET Intel oneAPI Fortran, C, and C++ compiler suite "FFLAGS_DEBUG = -g -convert big_endian -free -check all -fpe0 -traceback" \ "CFLAGS_DEBUG = -g -traceback" \ "CXXFLAGS_DEBUG = -g -traceback" \ - "LDFLAGS_DEBUG = -g -fpe0 -traceback" \ + "LDFLAGS_DEBUG = -g -check all -fpe0 -traceback" \ "FFLAGS_OMP = -qopenmp" \ "CFLAGS_OMP = -qopenmp" \ "PICFLAG = -fpic" \ @@ -737,10 +737,10 @@ else # Not using PIO, using SMIOL endif ifneq "$(NETCDF)" "" -ifneq ($(wildcard $(NETCDF)/lib), ) +ifneq ($(wildcard $(NETCDF)/lib/libnetcdf.*), ) NETCDFLIBLOC = lib endif -ifneq ($(wildcard $(NETCDF)/lib64), ) +ifneq ($(wildcard $(NETCDF)/lib64/libnetcdf.*), ) NETCDFLIBLOC = lib64 endif CPPINCLUDES += -I$(NETCDF)/include @@ -761,10 +761,10 @@ endif ifneq "$(PNETCDF)" "" -ifneq ($(wildcard $(PNETCDF)/lib), ) +ifneq ($(wildcard $(PNETCDF)/lib/libpnetcdf.*), ) PNETCDFLIBLOC = lib endif -ifneq ($(wildcard $(PNETCDF)/lib64), ) +ifneq ($(wildcard $(PNETCDF)/lib64/libpnetcdf.*), ) PNETCDFLIBLOC = lib64 endif CPPINCLUDES += -I$(PNETCDF)/include @@ -958,28 +958,6 @@ else OPENACC_MESSAGE="MPAS was built without OpenACC accelerator support." endif -ifneq ($(wildcard .mpas_core_*), ) # CHECK FOR BUILT CORE - -ifneq ($(wildcard .mpas_core_$(CORE)), ) # CHECK FOR SAME CORE AS ATTEMPTED BUILD. - override AUTOCLEAN=false - CONTINUE=true -else - LAST_CORE=`cat .mpas_core_*` - -ifeq "$(AUTOCLEAN)" "true" # CHECK FOR CLEAN PRIOR TO BUILD OF A NEW CORE. - CONTINUE=true - AUTOCLEAN_MESSAGE="Infrastructure was cleaned prior to building ." -else - CONTINUE=false -endif # END OF AUTOCLEAN CHECK - -endif # END OF CORE=LAST_CORE CHECK - -else - - override AUTOCLEAN=false - CONTINUE=true -endif # END IF BUILT CORE CHECK ifneq ($(wildcard namelist.$(NAMELIST_SUFFIX)), ) # Check for generated namelist file. NAMELIST_MESSAGE="A default namelist file (namelist.$(NAMELIST_SUFFIX).defaults) has been generated, but namelist.$(NAMELIST_SUFFIX) has not been modified." @@ -1036,12 +1014,119 @@ report_builds: @echo "CORE=$(CORE)" endif -ifeq "$(CONTINUE)" "true" all: mpas_main -else -all: clean_core + endif +# +# The rebuild_check target determines whether the shared framework or $(CORE) were +# previously compiled with incompatible options, and stops the build with an error +# message if so. +# +rebuild_check: + @# + @# Write current build options to a file .build_opts.tmp, to later be + @# compared with build options use for the shared framework or core. + @# Only build options that affect compatibility are written, while options + @# like $(RM), $(BUILD_TARGET), and $(CORE) are not. + @# + $(shell printf "FC=$(FC)\n$\ + CC=$(CC)\n$\ + CXX=$(CXX)\n$\ + SFC=$(SFC)\n$\ + SCC=$(SCC)\n$\ + CFLAGS=$(CFLAGS)\n$\ + CXXFLAGS=$(CXXFLAGS)\n$\ + FFLAGS=$(FFLAGS)\n$\ + LDFLAGS=$(LDFLAGS)\n$\ + CPPFLAGS=$(CPPFLAGS)\n$\ + LIBS=$(LIBS)\n$\ + CPPINCLUDES=$(CPPINCLUDES)\n$\ + OPENMP=$(OPENMP)\n$\ + OPENMP_OFFLOAD=$(OPENMP_OFFLOAD)\n$\ + OPENACC=$(OPENACC)\n$\ + TAU=$(TAU)\n$\ + PICFLAG=$(PICFLAG)\n$\ + TIMER_LIB=$(TIMER_LIB)\n$\ + GEN_F90=$(GEN_F90)\n" | sed 's/-DMPAS_EXE_NAME=[^[:space:]]*//' | sed 's/-DMPAS_NAMELIST_SUFFIX=[^[:space:]]*//' | sed 's/-DCORE_[^[:space:]]*//' | sed 's/-DMPAS_GIT_VERSION=[^[:space:]]*//' > .build_opts.tmp ) + + @# + @# PREV_BUILD is set to "OK" if the shared framework and core are either + @# clean or were previously compiled with compatible options. Otherwise, + @# PREV_BUILD is set to "shared framework" if the shared framework was + @# built with incompatible options, or "$(CORE) core" if the core was + @# built with incompatible options. + @# + $(eval PREV_BUILD := $(shell $\ + if [ -f ".build_opts.framework" ]; then $\ + cmp -s .build_opts.tmp .build_opts.framework; $\ + if [ $$? -eq 0 ]; then $\ + stat=0; $\ + else $\ + stat=1; $\ + x="shared framework"; $\ + if [ "$(AUTOCLEAN)" = "true" ]; then $\ + cp .build_opts.tmp .build_opts.framework; $\ + fi; $\ + fi $\ + else $\ + stat=0; $\ + cp .build_opts.tmp .build_opts.framework; $\ + fi; $\ + : ; $\ + : At this this point, stat is already set, and we should only ; $\ + : set it to 1 but never to 0, as that might mask an incompatibility ; $\ + : in the framework build. ; $\ + : ; $\ + if [ -f ".build_opts.$(CORE)" ]; then $\ + cmp -s .build_opts.tmp .build_opts.$(CORE); $\ + if [ $$? -ne 0 ]; then $\ + stat=1; $\ + if [ "$$x" = "" ]; then $\ + x="$(CORE) core"; $\ + else $\ + x="$$x and $(CORE) core"; $\ + fi; $\ + if [ "$(AUTOCLEAN)" = "true" ]; then $\ + cp .build_opts.tmp .build_opts.$(CORE); $\ + fi; $\ + fi; $\ + else $\ + if [ $$stat -eq 0 ]; then $\ + cp .build_opts.tmp .build_opts.$(CORE); $\ + fi; $\ + fi; $\ + rm -f .build_opts.tmp; $\ + if [ $$stat -eq 1 ]; then $\ + printf "$$x"; $\ + else $\ + printf "OK"; $\ + fi; $\ + )) + + $(if $(findstring and,$(PREV_BUILD)),$(eval VERB=were),$(eval VERB=was)) +ifeq "$(AUTOCLEAN)" "true" + $(if $(findstring framework,$(PREV_BUILD)),$(eval AUTOCLEAN_DEPS+=clean_shared)) + $(if $(findstring core,$(PREV_BUILD)),$(eval AUTOCLEAN_DEPS+=clean_core)) + $(if $(findstring OK,$(PREV_BUILD)), $(eval override AUTOCLEAN=false), ) + $(eval AUTOCLEAN_MESSAGE=The $(PREV_BUILD) $(VERB) cleaned and re-compiled.) +else + $(if $(findstring OK,$(PREV_BUILD)), \ + , \ + $(info ************************************************************************) \ + $(info The $(PREV_BUILD) $(VERB) previously compiled with ) \ + $(info incompatible options. Please do one of the following:) \ + $(info ) \ + $(info - Clean the $(CORE) core, which will also cause the shared) \ + $(info framework to be cleaned; then compile the $(CORE) core.) \ + $(info ) \ + $(info or)\ + $(info ) \ + $(info - Add AUTOCLEAN=true to the build command to automatically clean) \ + $(info and re-compile the $(PREV_BUILD).) \ + $(info ) \ + $(info ************************************************************************) \ + $(error )) endif @@ -1267,9 +1352,10 @@ mpi_f08_test: $(info Checking for mpi_f08 support...) $(eval MPAS_MPI_F08 := $(shell $\ printf "program main\n$\ - & use mpi_f08, only : MPI_Init, MPI_Comm\n$\ + & use mpi_f08, only : MPI_Init, MPI_Comm, MPI_INTEGER, MPI_Datatype\n$\ & integer :: ierr\n$\ & type (MPI_Comm) :: comm\n$\ + & type (MPI_Datatype), parameter :: MPI_INTEGERKIND = MPI_INTEGER\n$\ & call MPI_Init(ierr)\n$\ end program main\n" | sed 's/&/ /' > mpi_f08.f90; $\ $\ @@ -1277,7 +1363,7 @@ mpi_f08_test: mpi_f08_status=$$?; $\ rm -f mpi_f08.f90 mpi_f08.x; $\ if [ $$mpi_f08_status -eq 0 ]; then $\ - printf "0"; $\ + printf "1"; $\ else $\ printf "0"; $\ fi $\ @@ -1289,19 +1375,15 @@ mpi_f08_test: $(if $(findstring 1,$(MPAS_MPI_F08)), $(info mpi_f08 module detected.)) ifneq "$(PIO)" "" -MAIN_DEPS = openmp_test openacc_test pio_test mpi_f08_test +MAIN_DEPS = rebuild_check openmp_test openacc_test pio_test mpi_f08_test override CPPFLAGS += "-DMPAS_PIO_SUPPORT" else -MAIN_DEPS = openmp_test openacc_test mpi_f08_test +MAIN_DEPS = rebuild_check openmp_test openacc_test mpi_f08_test IO_MESSAGE = "Using the SMIOL library." override CPPFLAGS += "-DMPAS_SMIOL_SUPPORT" endif - mpas_main: $(MAIN_DEPS) -ifeq "$(AUTOCLEAN)" "true" - $(RM) .mpas_core_* -endif cd src; $(MAKE) FC="$(FC)" \ CC="$(CC)" \ CXX="$(CXX)" \ @@ -1320,11 +1402,11 @@ endif FCINCLUDES="$(FCINCLUDES)" \ CORE="$(CORE)"\ AUTOCLEAN="$(AUTOCLEAN)" \ + AUTOCLEAN_DEPS="$(AUTOCLEAN_DEPS)" \ GEN_F90="$(GEN_F90)" \ NAMELIST_SUFFIX="$(NAMELIST_SUFFIX)" \ EXE_NAME="$(EXE_NAME)" - @echo "$(EXE_NAME)" > .mpas_core_$(CORE) if [ -e src/$(EXE_NAME) ]; then mv src/$(EXE_NAME) .; fi ( cd src/core_$(CORE); $(MAKE) ROOT_DIR="$(PWD)" post_build ) @echo "*******************************************************************************" @@ -1346,11 +1428,13 @@ endif @echo $(IO_MESSAGE) @echo "*******************************************************************************" clean: - cd src; $(MAKE) clean RM="$(RM)" CORE="$(CORE)" - $(RM) .mpas_core_* + cd src; $(MAKE) clean RM="$(RM)" CORE="$(CORE)" AUTOCLEAN="$(AUTOCLEAN)" $(RM) $(EXE_NAME) $(RM) namelist.$(NAMELIST_SUFFIX).defaults $(RM) streams.$(NAMELIST_SUFFIX).defaults + if [ -f .build_opts.framework ]; then $(RM) .build_opts.framework; fi + if [ -f .build_opts.$(CORE) ]; then $(RM) .build_opts.$(CORE); fi + core_error: @echo "" @echo "*******************************************************************************" @@ -1361,26 +1445,6 @@ core_error: exit 1 error: errmsg -clean_core: - @echo "" - @echo "*******************************************************************************" - @echo " The MPAS infrastructure is currently built for the $(LAST_CORE) core." - @echo " Before building the $(CORE) core, please do one of the following." - @echo "" - @echo "" - @echo " To remove the $(LAST_CORE)_model executable and clean the MPAS infrastructure, run:" - @echo " make clean CORE=$(LAST_CORE)" - @echo "" - @echo " To preserve all executables except $(CORE)_model and clean the MPAS infrastructure, run:" - @echo " make clean CORE=$(CORE)" - @echo "" - @echo " Alternatively, AUTOCLEAN=true can be appended to the make command to force a clean," - @echo " build a new $(CORE)_model executable, and preserve all other executables." - @echo "" - @echo "*******************************************************************************" - @echo "" - exit 1 - else # CORE IF all: error @@ -1408,7 +1472,7 @@ errmsg: @echo " DEBUG=true - builds debug version. Default is optimized version." @echo " USE_PAPI=true - builds version using PAPI for timers. Default is off." @echo " TAU=true - builds version using TAU hooks for profiling. Default is off." - @echo " AUTOCLEAN=true - forces a clean of infrastructure prior to build new core." + @echo " AUTOCLEAN=true - Enables automatic cleaning and re-compilation of code as needed." @echo " GEN_F90=true - Generates intermediate .f90 files through CPP, and builds with them." @echo " TIMER_LIB=opt - Selects the timer library interface to be used for profiling the model. Options are:" @echo " TIMER_LIB=native - Uses native built-in timers in MPAS" diff --git a/README.md b/README.md index 485d95be2..f7775edf2 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,30 @@ -# MONAN-v1.2.0-rc - -## Model for Ocean-laNd-Atmosphere predictioN - -MONAN is a community model of the Unified Earth System that has as its main objective, as its name already refers, to be a numerical model that covers all scales, geographical and temporal, of the entire Earth system and its implications. It is "community" because it aggregates efforts from several brazilian national institutions such as universities, research centers, operational centers and various authorities in the area of meteorology, environment, oceans and others. It also can receive support from international centers and universities as well as support from the private sector. - -The MONAN Model is managed by a scientific committee appointed by INPE's director and has its initial version structure (0.1.0) based on the dynamic core of the MPAS 8.0.1 Model. part of the physics used by MONAN is obtained from the MPAS model and another part obtained from other sources or developed by the community. The MPAS model can be found at the link [GitHub - MPAS-Dev/MPAS-Model: Repository for MPAS models and shared framework releases.](https://github.com/MPAS-Dev/MPAS-Model) - - -History +MPAS-v8.2.2 ==== -- Version 1.2.0-rc (Release Candidate) - Bugs correction's and new parameterization: new output variables CTT, precipci for comparison with remote sensing data; the seaspray parameterization based on Barr et al 2024; a new approach to scale awareness of the conv parameterization (3d -subsidence); new output vars for PBL and convection tendencies; a tuning for cloud fraction using the monan formulation; bug fix for cold pool tendency; coupling of the downdrafts gust front speed with the surface fluxes; a soil moisture tuning for operational forecast; tuning for the convection parameterization; new formulation for the time scale for instability removal. -- Version 1.1.2-rc (Release Candidate) - Bugfix interpolation "diagnostics"; Improved vertical interpolation; Pressure correction, now using pressure2 instead of pressure. -- Version 1.1.1-rc (Release Candidate) - New vertical interpolation; Some vars were only being written at 8 level, now they are written at 22 levels like the others; Geopotential now no longer shows values above 100%; Temperature (in levels) is now free from the impact of topography; Some negative precipitation values occur (need to be fixed). -- Version 1.1.0-rc (Release Candidate) - Bug correction for CAMRAD and TKE MYNN, GF further tuning for operation and introduces the option of 3d lateral subsidence spread for use the grey zone scales. -- Version 1.0.0 - Implementing the first physics MONAN package: GF scheme as in BRAMS, new cloud fraction, cold-pool scheme with 2-D transport, and new outputs. -- Version 0.6.0 - Update MPAS-V8.1.0. -- Version 0.5.1 - Bug fix: zgeo variable. -- Version 0.5.0 - Included new variables. -- Version 0.4.0 - Included new variables; update MPAS-v8.0.2; bug fixes. -- Version 0.3.0 - Included new levels for existing variables and included new variables. -- Version 0.2.0 - Included variables and new isobaric levels. -- Version 0.1.0 - Initial version structure (0.1.0) based on the dynamic core of the MPAS 8.0.1 Model. +The Model for Prediction Across Scales (MPAS) is a collaborative project for +developing atmosphere, ocean, and other earth-system simulation components for +use in climate, regional climate, and weather studies. The primary development +partners are the climate modeling group at Los Alamos National Laboratory +(COSIM) and the National Center for Atmospheric Research. Both primary +partners are responsible for the MPAS framework, operators, and tools common to +the applications; LANL has primary responsibility for the ocean model, and NCAR +has primary responsibility for the atmospheric model. -MPAS-v8.1.0 -==== - -The Model for Prediction Across Scales (MPAS) is a collaborative project for developing atmosphere, ocean, and other earth-system simulation components for use in climate, regional climate, and weather studies. The primary development partners are the climate modeling group at Los Alamos National Laboratory (COSIM) and the National Center for Atmospheric Research. Both primary partners are responsible for the MPAS framework, operators, and tools common to the applications; LANL has primary responsibility for the ocean model, and NCAR has primary responsibility for the atmospheric model. +The MPAS framework facilitates the rapid development and prototyping of models +by providing infrastructure typically required by model developers, including +high-level data types, communication routines, and I/O routines. By using MPAS, +developers can leverage pre-existing code and focus more on development of +their model. -The MPAS framework facilitates the rapid development and prototyping of models by providing infrastructure typically required by model developers, including high-level data types, communication routines, and I/O routines. By using MPAS, developers can leverage pre-existing code and focus more on development of their model. - -Building -==== +BUILDING +======== -This README is provided as a brief introduction to the MPAS framework. It does not provide details about each specific model, nor does it provide building instructions. +This README is provided as a brief introduction to the MPAS framework. It does +not provide details about each specific model, nor does it provide building +instructions. -For information about building and running each core, please refer to each core's user's guide, which can be found at the following web sites: +For information about building and running each core, please refer to each +core's user's guide, which can be found at the following web sites: [MPAS-Atmosphere](http://mpas-dev.github.io/atmosphere/atmosphere_download.html) @@ -47,9 +36,10 @@ For information about building and running each core, please refer to each core' Code Layout ------------ +---------- -Within the MPAS repository, code is laid out as follows. Sub-directories are only described below the src directory. +Within the MPAS repository, code is laid out as follows. Sub-directories are +only described below the src directory. MPAS-Model ├── src @@ -65,4 +55,6 @@ Within the MPAS repository, code is laid out as follows. Sub-directories are onl ├── testing_and_setup -- Tools for setting up configurations and test cases (Shared) └── default_inputs -- Copies of default stream and namelists files (Shared) -Model cores are typically developed independently. For information about building and running a particular core, please refer to that core's user's guide. +Model cores are typically developed independently. For information about +building and running a particular core, please refer to that core's user's +guide. diff --git a/load_monan_app_modules.sh b/load_monan_app_modules.sh new file mode 100755 index 000000000..c202d08d6 --- /dev/null +++ b/load_monan_app_modules.sh @@ -0,0 +1,24 @@ +module purge +module load ohpc +module unload openmpi4 +module load phdf5 +module load netcdf +module load netcdf-fortran +module load mpich-4.0.2-gcc-9.4.0-gpof2pv +module load hwloc +module list + +export OMP_NUM_THREADS=1 +export OMPI_MCA_btl_openib_allow_ib=1 +export OMPI_MCA_btl_openib_if_include="mlx5_0:1" +export PMIX_MCA_gds=hash + +export NETCDF=/mnt/beegfs/monan/libs/netcdf +export PNETCDF=/mnt/beegfs/monan/libs/PnetCDF + +MPI_PARAMS="-iface ib0 -bind-to core -map-by core" +export MKL_NUM_THREADS=1 +export I_MPI_DEBUG=5 +export MKL_DEBUG_CPU_TYPE=5 +export I_MPI_ADJUST_BCAST=12 ## NUMA aware SHM-Based (AVX512) + diff --git a/make.output b/make.output new file mode 100644 index 000000000..2e0ce578f --- /dev/null +++ b/make.output @@ -0,0 +1,366 @@ +NOTE: PRECISION=single is unnecessary, single is the default +( make all \ +"FC_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90" \ +"CC_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc" \ +"CXX_PARALLEL = /opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicxx" \ +"FC_SERIAL = gfortran" \ +"CC_SERIAL = gcc" \ +"CXX_SERIAL = g++" \ +"FFLAGS_PROMOTION = -fdefault-real-8 -fdefault-double-8" \ +"FFLAGS_OPT = -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form" \ +"CFLAGS_OPT = -O3" \ +"CXXFLAGS_OPT = -O3" \ +"LDFLAGS_OPT = -O3" \ +"FFLAGS_DEBUG = -g -ffree-line-length-none -fconvert=big-endian -ffree-form -fcheck=all -fbacktrace -ffpe-trap=invalid,zero,overflow" \ +"CFLAGS_DEBUG = -g" \ +"CXXFLAGS_DEBUG = -g" \ +"LDFLAGS_DEBUG = -g" \ +"FFLAGS_OMP = -fopenmp" \ +"CFLAGS_OMP = -fopenmp" \ +"FFLAGS_ACC =" \ +"CFLAGS_ACC =" \ +"PICFLAG = -fPIC" \ +"BUILD_TARGET = gfortran" \ +"CORE = init_atmosphere" \ +"DEBUG = " \ +"USE_PAPI = " \ +"OPENMP = true" \ +"OPENACC = " \ +"CPPFLAGS = -D_MPI" ) +make[1]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU' +NOTE: PRECISION=single is unnecessary, single is the default +Checking for mpi_f08 support... +Testing compiler for OpenMP support +mpi_f08 module detected. +cd src; make FC="/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90" \ + CC="/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc" \ + CXX="/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicxx" \ + SFC="gfortran" \ + SCC="gcc" \ + LINKER="/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90" \ + CFLAGS="-O3 -fopenmp "-DSINGLE_PRECISION"" \ + CXXFLAGS="-O3 -fopenmp "-DSINGLE_PRECISION"" \ + FFLAGS="-O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp" \ + LDFLAGS="-O3 -fopenmp" \ + RM="rm -f" \ + CPP="cpp -P -traditional" \ + CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model "-DMPAS_OPENMP" "-DSINGLE_PRECISION" -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION="unknown" -DMPAS_BUILD_TARGET=gfortran "-DMPAS_SMIOL_SUPPORT" -DMPAS_USE_MPI_F08" \ + LIBS=" -L/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -lsmiolf -lsmiol -L/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/lib -lnetcdff -lnetcdf -L/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/lib -lpnetcdf" \ + CPPINCLUDES=" -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include" \ + FCINCLUDES=" -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include" \ + CORE="init_atmosphere"\ + AUTOCLEAN="" \ + AUTOCLEAN_DEPS="" \ + GEN_F90="false" \ + NAMELIST_SUFFIX="init_atmosphere" \ + EXE_NAME="init_atmosphere_model" +make[2]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src' +( cd external; make FC="/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90" SFC="gfortran" CC="/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc" SCC="gcc" FFLAGS="-O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp" CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION" CPP="cpp -P -traditional" NETCDF="/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf" CORE="init_atmosphere" all ) +make[3]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external' +( cd esmf_time_f90; make FC="/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90" FFLAGS="-O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp" CPP="cpp -P -traditional" CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI" GEN_F90=false ) +( cd ezxml; make OBJFILE="ezxml.o" ) +make -C SMIOL +make[4]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL' +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -DSMIOL_PNETCDF -O3 -fopenmp -DSINGLE_PRECISION -c smiol.c +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -DSMIOL_PNETCDF -O3 -fopenmp -DSINGLE_PRECISION -c smiol_utils.c +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -DSMIOL_PNETCDF -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c smiolf.F90 +make[4]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -c ezxml.c -o ezxml.o +make[4]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/esmf_time_f90' +rm -f ESMF_BaseMod.o ESMF_BaseMod.mod +rm -f ESMF_FractionMod.o ESMF_FractionMod.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_BaseMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_FractionMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +rm -f wrf_error_fatal.o wrf_error_fatal.mod +rm -f wrf_message.o wrf_message.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c wrf_message.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c wrf_error_fatal.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +rm -f ESMF_BaseTimeMod.o ESMF_BaseTimeMod.mod +rm -f MeatMod.o MeatMod.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c MeatMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_BaseTimeMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +rm -f ESMF_CalendarMod.o ESMF_CalendarMod.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_CalendarMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +ar -cr libsmiol.a smiol.o smiol_utils.o +rm -f ESMF_ShrTimeMod.o ESMF_ShrTimeMod.mod +make[4]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +rm -f ESMF_Stubs.o ESMF_Stubs.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_Stubs.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_ShrTimeMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +rm -f ESMF_TimeIntervalMod.o ESMF_TimeIntervalMod.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_TimeIntervalMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +ar -cr libsmiolf.a smiolf.o +rm -f ESMF_TimeMod.o ESMF_TimeMod.mod +make[4]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL' +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_TimeMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +rm -f ESMF_AlarmMod.o ESMF_AlarmMod.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_AlarmMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +rm -f ESMF_ClockMod.o ESMF_ClockMod.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_ClockMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +rm -f ESMF_AlarmClockMod.o ESMF_AlarmClockMod.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF_AlarmClockMod.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +rm -f ESMF.o ESMF.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -DHIDE_MPI -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c ESMF.F90 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I. +ar -ru libesmf_time.a *.o +ar: creating libesmf_time.a +make[4]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/esmf_time_f90' +make[3]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external' +( cd framework; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include" all ) +(cd tools; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CC="gcc" CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION") +make[3]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/framework' +make[3]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools' +( make build_registry CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CC="gcc" CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION" ) +make[4]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools' +*** Building MPAS tools from source *** +(cd registry; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CC="gcc" CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION") +rm -f mpas_kind_types.o mpas_kind_types.mod +make[5]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/registry' +(cd ../../external/ezxml; make CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION " OBJFILE="ezxml_tools.o") +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_kind_types.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_c_interfacing.o mpas_c_interfacing.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_c_interfacing.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_string_utils.o mpas_string_utils.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/ezxml -c regex_matching.c +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_string_utils.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/ezxml -c random_id.c +make[6]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -c ezxml.c -o ezxml_tools.o +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/ezxml -c pool_hash.c +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/ezxml -c xml_stream_parser.c +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/ezxml -c stream_inquiry.c +rm -f mpas_constants.o mpas_constants.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_constants.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_io_units.o mpas_io_units.mod +rm -f mpas_threading.o mpas_threading.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_io_units.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_threading.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_derived_types.o mpas_derived_types.mod +rm -f mpas_abort.o mpas_abort.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_derived_types.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_abort.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +make[6]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +#(make ezxml CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include") +(make parse CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include") +make[6]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/registry' +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I../../external/ezxml -c parse.c +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I../../external/ezxml -c dictionary.c +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I../../external/ezxml -c gen_inc.c +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I../../external/ezxml -c fortprintf.c +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I../../external/ezxml -c utility.c +rm -f mpas_log.o mpas_log.mod +rm -f mpas_hash.o mpas_hash.mod +rm -f mpas_attlist.o mpas_attlist.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_log.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_attlist.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_hash.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +gcc -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -fopenmp -DSINGLE_PRECISION ../../external/ezxml/ezxml_tools.o -I../../external/ezxml -o parse parse.o dictionary.o gen_inc.o fortprintf.o utility.o +rm -f mpas_field_routines.o mpas_field_routines.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_field_routines.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +make[6]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/registry' +make[5]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/registry' +make[4]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools' +( make build_input_gen CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CC="gcc" CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION" ) +make[4]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools' +*** Building MPAS tools from source *** +(cd input_gen; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CC="gcc" CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION") +make[5]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen' +(cd ../../external/ezxml; make CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION " OBJFILE="ezxml_tools.o") +make[6]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +make[6]: 'ezxml_tools.o' is up to date. +make[6]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +(make -j 1 namelist_gen CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include") +make[6]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen' +make[6]: warning: -jN forced in submake: disabling jobserver mode. +(cd ../../external/ezxml; make CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION " OBJFILE="ezxml_tools.o") +make[7]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +make[7]: 'ezxml_tools.o' is up to date. +make[7]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I../../external/ezxml -c namelist_gen.c +rm -f mpas_sort.o mpas_sort.mod +rm -f mpas_stream_inquiry.o mpas_stream_inquiry.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_sort.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_stream_inquiry.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I../../external/ezxml -c test_functions.c +gcc -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -fopenmp -DSINGLE_PRECISION -I../../external/ezxml -o namelist_gen namelist_gen.o test_functions.o ../../external/ezxml/ezxml_tools.o +make[6]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen' +(make -j 1 streams_gen CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include") +make[6]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen' +make[6]: warning: -jN forced in submake: disabling jobserver mode. +(cd ../../external/ezxml; make CFLAGS="-O3 -fopenmp -DSINGLE_PRECISION " OBJFILE="ezxml_tools.o") +make[7]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +make[7]: 'ezxml_tools.o' is up to date. +make[7]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/ezxml' +gcc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I../../external/ezxml -c streams_gen.c +gcc -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -fopenmp -DSINGLE_PRECISION -I../../external/ezxml -o streams_gen streams_gen.o test_functions.o ../../external/ezxml/ezxml_tools.o +make[6]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen' +make[5]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen' +make[4]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools' +make[3]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools' +rm -f mpas_pool_routines.o mpas_pool_routines.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_pool_routines.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_dmpar.o mpas_dmpar.mod +rm -f mpas_halo.o mpas_halo.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_dmpar.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_halo.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_io.o mpas_io.mod +rm -f mpas_domain_routines.o mpas_domain_routines.mod +rm -f mpas_timer.o mpas_timer.mod +rm -f mpas_block_decomp.o mpas_block_decomp.mod +rm -f mpas_timekeeping.o mpas_timekeeping.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_io.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_domain_routines.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_timer.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_block_decomp.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_timekeeping.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_io_streams.o mpas_io_streams.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_io_streams.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_stream_list.o mpas_stream_list.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_stream_list.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_stream_manager.o mpas_stream_manager.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_stream_manager.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_framework.o mpas_framework.mod +rm -f mpas_decomp.o mpas_decomp.mod +rm -f mpas_forcing.o mpas_forcing.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_framework.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_decomp.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_forcing.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_block_creator.o mpas_block_creator.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_block_creator.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +rm -f mpas_bootstrapping.o mpas_bootstrapping.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_bootstrapping.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../external/esmf_time_f90 +ar -ru libframework.a mpas_kind_types.o mpas_framework.o mpas_timer.o mpas_timekeeping.o mpas_constants.o mpas_attlist.o mpas_hash.o mpas_sort.o mpas_block_decomp.o mpas_block_creator.o mpas_dmpar.o mpas_abort.o mpas_decomp.o mpas_threading.o mpas_io.o mpas_io_streams.o mpas_bootstrapping.o mpas_io_units.o mpas_stream_manager.o mpas_stream_list.o mpas_forcing.o mpas_c_interfacing.o random_id.o pool_hash.o mpas_derived_types.o mpas_domain_routines.o mpas_field_routines.o mpas_pool_routines.o xml_stream_parser.o regex_matching.o mpas_log.o mpas_halo.o mpas_string_utils.o mpas_stream_inquiry.o stream_inquiry.o ../external/ezxml/ezxml.o +ar: creating libframework.a +make[3]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/framework' +ln -sf framework/libframework.a libframework.a +( cd operators; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include" all ) +make[3]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/operators' +rm -f mpas_vector_operations.o mpas_vector_operations.mod +rm -f mpas_matrix_operations.o mpas_matrix_operations.mod +rm -f mpas_spline_interpolation.o mpas_spline_interpolation.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_vector_operations.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_matrix_operations.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_spline_interpolation.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +rm -f mpas_tensor_operations.o mpas_tensor_operations.mod +rm -f mpas_rbf_interpolation.o mpas_rbf_interpolation.mod +rm -f mpas_geometry_utils.o mpas_geometry_utils.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_rbf_interpolation.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_tensor_operations.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_geometry_utils.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +rm -f mpas_tracer_advection_helpers.o mpas_tracer_advection_helpers.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_tracer_advection_helpers.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +rm -f mpas_vector_reconstruction.o mpas_vector_reconstruction.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_vector_reconstruction.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +rm -f mpas_tracer_advection_mono.o mpas_tracer_advection_mono.mod +rm -f mpas_tracer_advection_std.o mpas_tracer_advection_std.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_tracer_advection_std.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_tracer_advection_mono.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../external/esmf_time_f90 +ar -ru libops.a mpas_vector_operations.o mpas_matrix_operations.o mpas_tensor_operations.o mpas_rbf_interpolation.o mpas_vector_reconstruction.o mpas_spline_interpolation.o mpas_tracer_advection_helpers.o mpas_tracer_advection_mono.o mpas_tracer_advection_std.o mpas_geometry_utils.o +ar: creating libops.a +make[3]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/operators' +ln -sf operators/libops.a libops.a +( cd core_init_atmosphere; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include" REG_PARSE="/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/registry/parse" gen_includes ) +make[3]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/core_init_atmosphere' +cpp -P -traditional -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include Registry.xml > Registry_processed.xml +(if [ ! -d inc ]; then mkdir -p inc; fi) # To generate *.inc files +(cd inc; /home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/registry/parse ../Registry_processed.xml -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 ) +---- GENERATING IMMUTABLE STREAMS ---- +make[3]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/core_init_atmosphere' +( cd core_init_atmosphere; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include" NL_GEN="/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen/namelist_gen" ST_GEN="/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen/streams_gen" core_input_gen ) +make[3]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/core_init_atmosphere' +if [ ! -e default_inputs ]; then mkdir default_inputs; fi +( cd default_inputs; /home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen/namelist_gen ../Registry_processed.xml namelist.init_atmosphere in_defaults=true ) +( cd default_inputs; /home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/tools/input_gen/streams_gen ../Registry_processed.xml streams.init_atmosphere stream_list.init_atmosphere. listed ) +make[3]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/core_init_atmosphere' +( cd core_init_atmosphere; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include" all ) +make[3]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/core_init_atmosphere' +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpicc -O3 -fopenmp -DSINGLE_PRECISION -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -c read_geogrid.c +rm -f mpas_atm_advection.o mpas_atm_advection.mod +rm -f mpas_init_atm_read_met.o mpas_init_atm_read_met.mod +rm -f mpas_init_atm_llxy.o mpas_init_atm_llxy.mod +rm -f mpas_init_atm_queue.o mpas_init_atm_queue.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_atm_advection.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_read_met.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_init_atm_bitarray.o mpas_init_atm_bitarray.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_llxy.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_queue.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_atmphys_utilities.o mpas_atmphys_utilities.mod +rm -f mpas_stack.o mpas_stack.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_bitarray.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_atmphys_utilities.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_stack.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_kd_tree.o mpas_kd_tree.mod +rm -f mpas_parse_geoindex.o mpas_parse_geoindex.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_kd_tree.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_parse_geoindex.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_init_atm_gwd.o mpas_init_atm_gwd.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_gwd.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_init_atm_vinterp.o mpas_init_atm_vinterp.mod +rm -f mpas_atmphys_date_time.o mpas_atmphys_date_time.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_vinterp.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_atmphys_date_time.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_atmphys_constants.o mpas_atmphys_constants.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_atmphys_constants.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_atmphys_functions.o mpas_atmphys_functions.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_atmphys_functions.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_init_atm_hinterp.o mpas_init_atm_hinterp.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_hinterp.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_geotile_manager.o mpas_geotile_manager.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_geotile_manager.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_init_atm_static.o mpas_init_atm_static.mod +rm -f mpas_init_atm_surface.o mpas_init_atm_surface.mod +rm -f mpas_init_atm_thompson_aerosols.o mpas_init_atm_thompson_aerosols.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_surface.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_static.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_thompson_aerosols.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_atmphys_initialize_real.o mpas_atmphys_initialize_real.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_atmphys_initialize_real.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_init_atm_cases.o mpas_init_atm_cases.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_cases.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_init_atm_core.o mpas_init_atm_core.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_core.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +rm -f mpas_init_atm_core_interface.o mpas_init_atm_core_interface.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_init_atm_core_interface.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I./inc -I../framework -I../operators -I../external/esmf_time_f90 +ar -ru libdycore.a mpas_init_atm_core.o mpas_init_atm_core_interface.o mpas_init_atm_cases.o mpas_atm_advection.o mpas_init_atm_read_met.o mpas_init_atm_llxy.o mpas_init_atm_bitarray.o mpas_init_atm_queue.o mpas_init_atm_hinterp.o mpas_init_atm_static.o mpas_init_atm_gwd.o mpas_init_atm_surface.o mpas_init_atm_vinterp.o mpas_init_atm_thompson_aerosols.o read_geogrid.o mpas_atmphys_constants.o mpas_atmphys_date_time.o mpas_atmphys_functions.o mpas_atmphys_initialize_real.o mpas_atmphys_utilities.o mpas_stack.o mpas_kd_tree.o mpas_parse_geoindex.o mpas_geotile_manager.o +ar: creating libdycore.a +make[3]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/core_init_atmosphere' +ln -sf core_init_atmosphere/libdycore.a libdycore.a +( cd driver; make CPPFLAGS="-D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08" CPPINCLUDES="-I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include" all ) +make[3]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/driver' +(make clean) +make[4]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/driver' +rm -f *.o *.mod *.f90 +rm -f *.i +make[4]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/driver' +(make driver) +make[4]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/driver' +rm -f mpas_subdriver.o mpas_subdriver.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas_subdriver.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../operators -I../core_init_atmosphere -I../external/esmf_time_f90 +rm -f mpas.o mpas.mod +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -D_MPI -DCORE_INIT_ATMOSPHERE -DMPAS_NAMELIST_SUFFIX=init_atmosphere -DMPAS_EXE_NAME=init_atmosphere_model -DMPAS_OPENMP -DSINGLE_PRECISION -DMPAS_NATIVE_TIMERS -DMPAS_GIT_VERSION=unknown -DMPAS_BUILD_TARGET=gfortran -DMPAS_SMIOL_SUPPORT -DMPAS_USE_MPI_F08 -O3 -ffree-line-length-none -fconvert=big-endian -ffree-form -fopenmp -c mpas.F -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/include -I/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/include -I../framework -I../operators -I../core_init_atmosphere -I../external/esmf_time_f90 +make[4]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/driver' +make[3]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/driver' +/opt/ohpc/pub/mpi/openmpi4-gnu9/4.1.1/bin/mpif90 -O3 -fopenmp -o init_atmosphere_model driver/*.o -L. -ldycore -lops -lframework -L/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/external/SMIOL -lsmiolf -lsmiol -L/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf/lib -lnetcdff -lnetcdf -L/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF/lib -lpnetcdf -I./external/esmf_time_f90 -L./external/esmf_time_f90 -lesmf_time +make[2]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src' +if [ -e src/init_atmosphere_model ]; then mv src/init_atmosphere_model .; fi +( cd src/core_init_atmosphere; make ROOT_DIR="/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU" post_build ) +make[2]: Entering directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/core_init_atmosphere' +if [ ! -e /home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/default_inputs ]; then mkdir /home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/default_inputs; fi +cp default_inputs/* /home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/default_inputs/. +( cd /home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/default_inputs; for FILE in `ls -1`; do if [ ! -e ../$FILE ]; then cp $FILE ../.; fi; done ) +make[2]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU/src/core_init_atmosphere' +******************************************************************************* +MPAS was built with default single-precision reals. +Debugging is off. +Parallel version is on. +Using the mpi_f08 module. +Papi libraries are off. +TAU Hooks are off. +MPAS was built with OpenMP enabled. +MPAS was built without OpenMP-offload GPU support. +MPAS was built without OpenACC accelerator support. +Position-dependent code was generated. +MPAS was built with .F files. +The native timer interface is being used +Using the SMIOL library. +******************************************************************************* +make[1]: Leaving directory '/home/paulo.kubota/monan_linux/monan/model/sources/MONAN-Model_GPU' diff --git a/make.sh b/make.sh new file mode 100755 index 000000000..4d5535ab3 --- /dev/null +++ b/make.sh @@ -0,0 +1,117 @@ +#!/bin/bash +#Usage: make target CORE=[core] [options] +#Example targets: +# gnu - GNU Fortran, C, and C++ compilers +# xlf - IBM XL compilers +# xlf-summit-omp-offload - IBM XL compilers w/OpenMP offloading on ORNL Summit +# ftn - Cray compilers +# titan-cray - (deprecated) Cray compilers with options for ORNL Titan +# nvhpc - NVIDIA HPC SDK +# pgi - PGI compiler suite +# pgi-summit - PGI compiler suite w/OpenACC options for ORNL Summit +# pgi-nersc - (deprecated) PGI compilers on NERSC machines +# pgi-llnl - (deprecated) PGI compilers on LLNL machines +# ifort - Intel Fortran, C, and C++ compiler suite +# ifort-scorep - Intel compiler suite with ScoreP profiling library +# ifort-gcc - Intel Fortran compiler and GNU C/C++ compilers +# intel-mpi - Intel compiler suite with Intel MPI library +# gfortran - GNU Fortran, C, and C++ compilers +# gfortran-clang - GNU Fortran compiler with LLVM clang/clang++ compilers +# g95 - (deprecated) G95 Fortran compiler with GNU C/C++ compilers +# pathscale-nersc - (deprecated) Pathscale compilers on NERSC machines +# cray-nersc - (deprecated) Cray compilers on NERSC machines +# gnu-nersc - (deprecated) GNU compilers on NERSC machines +# intel-nersc - (deprecated) Intel compilers on NERSC machines +# bluegene - (deprecated) IBM XL compilers on BlueGene/Q systems +# llvm - LLVM flang, clang, and clang++ compilers +# nag - NAG Fortran compiler and GNU C/C++ compilers +# cray - Cray Programming Environment +# intel - Intel oneAPI Fortran, C, and C++ compiler suite +# +#Availabe Cores: +# atmosphere +# init_atmosphere +# landice +# ocean +# seaice +# sw +# test +#Available Options: +# DEBUG=true - builds debug version. Default is optimized version. +# USE_PAPI=true - builds version using PAPI for timers. Default is off. +# TAU=true - builds version using TAU hooks for profiling. Default is off. +# AUTOCLEAN=true - forces a clean of infrastructure prior to build new core. +# GEN_F90=true - Generates intermediate .f90 files through CPP, and builds with them. +# TIMER_LIB=opt - Selects the timer library interface to be used for profiling the model. Options are: +# TIMER_LIB=native - Uses native built-in timers in MPAS +# TIMER_LIB=gptl - Uses gptl for the timer interface instead of the native interface +# TIMER_LIB=tau - Uses TAU for the timer interface instead of the native interface +# OPENMP=true - builds and links with OpenMP flags. Default is to not use OpenMP. +# OPENACC=true - builds and links with OpenACC flags. Default is to not use OpenACC. +# PRECISION=double - builds with default double-precision real kind. Default is to use single-precision. +# SHAREDLIB=true - generate position-independent code suitable for use in a shared library. Default is false. +#. ./load_monan_app_modules.sh +export DIRhome=/home/paulo.kubota/monan_linux/monan/model +export DIRroot=/mnt/beegfs/paulo.kubota/monan_linux/monan/model + +export MONAN_SRC_DIR=${DIRhome}/sources/MONAN-Model_GPU +export MONAN_EXE_MODEL=${DIRroot}/exec/MONAN-Model_GPU +export MONAN_EXE_PRE=${DIRroot}/../pre/exec/MONAN-Model_GPU + +#export NETCDF=/mnt/beegfs/monan/libs/netcdf +#export PNETCDF=/mnt/beegfs/monan/libs/PnetCDF +export NETCDF='/mnt/beegfs/paulo.kubota/lib/lib_gnu/netcdf' +export PNETCDF='/mnt/beegfs/paulo.kubota/lib/lib_gnu/pnetcdf/pnetcdf-1.12.3/PnetCDF' +# PIO is not necessary for version 8.* If PIO is empty, MPAS Will use SMIOL +export PIO= +mkdir -p ${MONAN_SRC_DIR}/bin +mkdir -p ${MONAN_EXE_MODEL}/exec/ +####################################################################################### +# +# +# +####################################################################################### +rm ${MONAN_SRC_DIR}/bin/atmosphere_model +rm ${MONAN_EXE_MODEL}/exec/atmosphere_model + +make clean CORE=atmosphere +#make -j 8 gfortran CORE=atmosphere DEBUG=true OPENMP=true USE_PIO2=false PRECISION=single 2>&1 | tee make.output +make -j 8 gfortran CORE=atmosphere OPENMP=true USE_PIO2=false PRECISION=single 2>&1 | tee make.output +mv ${MONAN_SRC_DIR}/atmosphere_model ${MONAN_SRC_DIR}/bin/ +mv ${MONAN_SRC_DIR}/build_tables ${MONAN_SRC_DIR}/bin/ +make clean CORE=atmosphere +cp -f ${MONAN_SRC_DIR}/bin/atmosphere_model ${MONAN_EXE_MODEL}/exec/ +cp -f ${MONAN_SRC_DIR}/bin/build_tables ${MONAN_EXE_MODEL}/exec/ +if [ -s "${MONAN_EXE_MODEL}/exec/atmosphere_model" ]; then + echo "" + echo -e "\033[1;32m==>\033[0m Files atmosphere_model generated Successfully in ${MONAN_SRC_DIR}/bin and copied to ${MONAN_EXE_MODEL}/exec !" + echo +else + echo -e "\033[1;31m==>\033[0m !!! An error occurred during build. Check output" + exit -1 +fi +####################################################################################### +# +# +# +####################################################################################### +rm ${MONAN_SRC_DIR}/bin/init_atmosphere +rm ${MONAN_EXE_PRE}/exec/init_atmosphere +make clean CORE=init_atmosphere +#make -j 8 gfortran CORE=init_atmosphere DEBUG=true OPENMP=true USE_PIO2=false PRECISION=single 2>&1 | tee make.output +make -j 8 gfortran CORE=init_atmosphere OPENMP=true USE_PIO2=false PRECISION=single 2>&1 | tee make.output +mv ${MONAN_SRC_DIR}/init_atmosphere_model ${MONAN_SRC_DIR}/bin/ +make clean CORE=init_atmosphere + +mkdir -p ${MONAN_EXE_PRE}/exec/ +cp -f ${MONAN_SRC_DIR}/bin/init_atmosphere_model ${MONAN_EXE_PRE}/exec/ + +if [ -s "${MONAN_EXE_PRE}/exec/init_atmosphere_model" ]; then + echo "" + echo -e "\033[1;32m==>\033[0m Files init_atmosphere_model generated Successfully in ${MONAN_SRC_DIR}/bin and copied to ${MONAN_EXE_PRE}/exec !" + echo +else + echo -e "\033[1;31m==>\033[0m !!! An error occurred during build. Check output" + exit -1 +fi + diff --git a/src/Makefile b/src/Makefile index cc0cc020d..b9c037c8c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -6,12 +6,6 @@ include Makefile.in.$(ESM) else -ifeq "$(AUTOCLEAN)" "true" -AUTOCLEAN_DEPS=clean_shared -else -AUTOCLEAN_DEPS= -endif - all: mpas mpas: $(AUTOCLEAN_DEPS) externals frame ops dycore drver @@ -45,18 +39,24 @@ dycore: $(AUTOCLEAN_DEPS) build_tools externals frame ops clean: clean_shared clean_core clean_core: +ifeq "$(AUTOCLEAN)" "true" + $(info ) + $(info *********************************************************************************************) + $(info The $(CORE) core will be cleaned and re-compiled.) + $(info *********************************************************************************************) + $(info ) +endif if [ -d core_$(CORE) ] ; then \ ( cd core_$(CORE); $(MAKE) clean ) \ fi; clean_shared: ifeq "$(AUTOCLEAN)" "true" - @echo "" - @echo "*********************************************************************************************" - @echo "The MPAS infrastructure is currently built for a core different from $(CORE)." - @echo "The infrastructure will be cleaned and re-built for the $(CORE) core." - @echo "*********************************************************************************************" - @echo "" + $(info ) + $(info *********************************************************************************************) + $(info The infrastructure will be cleaned and re-compiled.) + $(info *********************************************************************************************) + $(info ) endif $(RM) libframework.a libops.a libdycore.a lib$(CORE).a *.o ( cd tools; $(MAKE) clean ) diff --git a/src/core_atmosphere/Externals.cfg b/src/core_atmosphere/Externals.cfg new file mode 100644 index 000000000..3626ec367 --- /dev/null +++ b/src/core_atmosphere/Externals.cfg @@ -0,0 +1,10 @@ +[MMM-physics] +local_path = ./physics_mmm +protocol = git +repo_url = https://github.com/NCAR/MMM-physics.git +tag = 20240626-MPASv8.2 + +required = True + +[externals_description] +schema_version = 1.0.0 diff --git a/src/core_atmosphere/Makefile b/src/core_atmosphere/Makefile index 16316c08a..50128d68d 100644 --- a/src/core_atmosphere/Makefile +++ b/src/core_atmosphere/Makefile @@ -30,7 +30,7 @@ core_input_gen: gen_includes: core_reg (if [ ! -d inc ]; then mkdir -p inc; fi) # To generate *.inc files - (cd inc; $(REG_PARSE) < ../Registry_processed.xml ) + (cd inc; $(REG_PARSE) ../Registry_processed.xml $(CPPFLAGS) ) post_build: if [ ! -e $(ROOT_DIR)/default_inputs ]; then mkdir $(ROOT_DIR)/default_inputs; fi @@ -42,6 +42,7 @@ physcore: mpas_atm_dimensions.o ( mkdir libphys; cd libphys; ar -x ../physics/libphys.a ) ( cd ../..; ln -sf ./src/core_atmosphere/physics/physics_wrf/files/*TBL .) ( cd ../..; ln -sf ./src/core_atmosphere/physics/physics_wrf/files/*DATA* .) + ( cd ../..; ln -sf ./src/core_atmosphere/physics/physics_noahmp/parameters/*TBL .) dycore: mpas_atm_dimensions.o $(PHYSCORE) ( cd dynamics; $(MAKE) all PHYSICS="$(PHYSICS)" ) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 005a4d074..a8ef65263 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -1,5 +1,5 @@ - + @@ -397,6 +397,7 @@ + @@ -404,6 +405,7 @@ + @@ -492,11 +494,41 @@ + #ifdef MPAS_CAM_DYCORE #endif - + + +#ifdef DO_PHYSICS + + + + + + + + + + + + + + + + + + + + + + + + + + +#endif @@ -524,17 +556,17 @@ #ifdef DO_PHYSICS - - - - - - - - - - - + + + + + + + + + + + @@ -551,22 +583,22 @@ - - + + - - - - - - - - - - + + + + + + + + + + #endif @@ -615,15 +647,18 @@ #ifdef DO_PHYSICS - - - - - - - - + + + + + + + + + + + @@ -634,7 +669,9 @@ + + @@ -645,32 +682,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -782,6 +819,18 @@ + + + + + + + + + + + + @@ -799,32 +848,37 @@ + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -840,16 +894,16 @@ - - - - - - - - - - + + + + + + + + + + @@ -857,13 +911,14 @@ + #endif @@ -947,8 +1002,8 @@ - - + + @@ -997,6 +1052,7 @@ + @@ -1690,8 +1746,8 @@ - - + + @@ -1771,6 +1827,75 @@ + + + + + + + + + + + + + + + + + + +#ifdef DO_PHYSICS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#endif + @@ -2109,32 +2234,44 @@ + packages="bl_mynn_in;bl_ysu_in;cu_ntiedtke_in;mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="bl_mynn_in;bl_ysu_in;cu_ntiedtke_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="bl_mynn_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="bl_mynn_in;mp_thompson_in;mp_thompson_aers_in"/> - + packages="mp_thompson_in;mp_thompson_aers_in"/> + + + + + + + @@ -2249,6 +2386,14 @@ + + + + @@ -2384,7 +2529,7 @@ - + @@ -2392,6 +2537,15 @@ + + + + + @@ -2443,31 +2597,43 @@ + packages="bl_mynn_in;bl_ysu_in;cu_ntiedtke_in;mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="bl_mynn_in;bl_ysu_in;cu_ntiedtke_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="bl_mynn_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="bl_mynn_in;mp_thompson_in;mp_thompson_aers_in"/> + packages="mp_thompson_in;mp_thompson_aers_in"/> + + + + + + - - - - - - - - + + + + + + @@ -2637,6 +2823,11 @@ description="logical for turning on/off top-down, radiation_driven mixing" possible_values=".true. to turn on top-down radiation_driven mixing; .false. otherwise"/> + + + possible_values="`suite',`mp_wsm6',`mp_thompson',`mp_thompson_aerosols', `mp_kessler',`off'"/> + possible_values="`suite',`sf_noah',`sf_noahmp`, `off'"/> - @@ -2826,6 +3017,11 @@ description="threshold above which accumulated radiation diagnostics are reset" possible_values="Positive real values"/> + + + possible_values="0,1,2"/> + + @@ -2912,71 +3111,79 @@ + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/> + packages="mp_thompson_in;mp_thompson_aers_in"/> + packages="mp_thompson_in;mp_thompson_aers_in"/> + + + + @@ -2984,11 +3191,11 @@ - - + + + + @@ -3101,7 +3308,7 @@ + packages="cu_gf_monan_in"/> + - - + + + + + + + @@ -3723,13 +3932,26 @@ - + + + + + + + + + + @@ -3864,6 +4086,58 @@ persistence="scratch" /> #ifdef DO_PHYSICS + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3967,10 +4241,22 @@ description="tendency of snow mixing ratio due to pbl processes" packages="bl_mynn_in"/> + + + + + + @@ -4141,22 +4427,28 @@ description="Potential temperature increment"/> - - - - - - @@ -4168,4 +4460,7 @@ #include "diagnostics/Registry_diagnostics.xml" +#ifdef DO_PHYSICS +#include "physics/Registry_noahmp.xml" +#endif diff --git a/src/core_atmosphere/build_options.mk b/src/core_atmosphere/build_options.mk index 34caf8d66..3b5a87345 100644 --- a/src/core_atmosphere/build_options.mk +++ b/src/core_atmosphere/build_options.mk @@ -2,6 +2,9 @@ PWD=$(shell pwd) EXE_NAME=atmosphere_model NAMELIST_SUFFIX=atmosphere override CPPFLAGS += -DCORE_ATMOSPHERE +FCINCLUDES += -I$(PWD)/src/core_atmosphere/physics/physics_noahmp/drivers/mpas \ + -I$(PWD)/src/core_atmosphere/physics/physics_noahmp/utility \ + -I$(PWD)/src/core_atmosphere/physics/physics_noahmp/src report_builds: @echo "CORE=atmosphere" diff --git a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F index 49076d88f..17865129e 100644 --- a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F +++ b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F @@ -6,6 +6,14 @@ ! distributed with this code, or at http://mpas-dev.github.com/license.html ! +#ifdef MPAS_OPENACC +#define MPAS_ACC_TIMER_START(X) call mpas_timer_start(X) +#define MPAS_ACC_TIMER_STOP(X) call mpas_timer_stop(X) +#else +#define MPAS_ACC_TIMER_START(X) +#define MPAS_ACC_TIMER_STOP(X) +#endif + module atm_time_integration use mpas_derived_types @@ -188,6 +196,24 @@ subroutine mpas_atm_dynamics_init(domain) type (field2DReal), pointer :: tend_ru_physicsField, tend_rtheta_physicsField, tend_rho_physicsField #endif +#ifdef MPAS_OPENACC + type (mpas_pool_type), pointer :: mesh + + real (kind=RKIND), dimension(:), pointer :: dvEdge + integer, dimension(:,:), pointer :: cellsOnCell + integer, dimension(:,:), pointer :: cellsOnEdge + integer, dimension(:,:), pointer :: advCellsForEdge + integer, dimension(:,:), pointer :: edgesOnCell + integer, dimension(:), pointer :: nAdvCellsForEdge + integer, dimension(:), pointer :: nEdgesOnCell + real (kind=RKIND), dimension(:,:), pointer :: adv_coefs + real (kind=RKIND), dimension(:,:), pointer :: adv_coefs_3rd + real (kind=RKIND), dimension(:,:), pointer :: edgesOnCell_sign + real (kind=RKIND), dimension(:), pointer :: invAreaCell + integer, dimension(:), pointer :: bdyMaskCell + integer, dimension(:), pointer :: bdyMaskEdge +#endif + #ifdef MPAS_CAM_DYCORE nullify(tend_physics) @@ -203,6 +229,50 @@ subroutine mpas_atm_dynamics_init(domain) call mpas_allocate_scratch_field(tend_ru_physicsField) #endif +#ifdef MPAS_OPENACC + nullify(mesh) + call mpas_pool_get_subpool(domain % blocklist % structs, 'mesh', mesh) + + call mpas_pool_get_array(mesh, 'dvEdge', dvEdge) + !$acc enter data copyin(dvEdge) + + call mpas_pool_get_array(mesh, 'cellsOnCell', cellsOnCell) + !$acc enter data copyin(cellsOnCell) + + call mpas_pool_get_array(mesh, 'cellsOnEdge', cellsOnEdge) + !$acc enter data copyin(cellsOnEdge) + + call mpas_pool_get_array(mesh, 'advCellsForEdge', advCellsForEdge) + !$acc enter data copyin(advCellsForEdge) + + call mpas_pool_get_array(mesh, 'edgesOnCell', edgesOnCell) + !$acc enter data copyin(edgesOnCell) + + call mpas_pool_get_array(mesh, 'nAdvCellsForEdge', nAdvCellsForEdge) + !$acc enter data copyin(nAdvCellsForEdge) + + call mpas_pool_get_array(mesh, 'nEdgesOnCell', nEdgesOnCell) + !$acc enter data copyin(nEdgesOnCell) + + call mpas_pool_get_array(mesh, 'adv_coefs', adv_coefs) + !$acc enter data copyin(adv_coefs) + + call mpas_pool_get_array(mesh, 'adv_coefs_3rd', adv_coefs_3rd) + !$acc enter data copyin(adv_coefs_3rd) + + call mpas_pool_get_array(mesh, 'edgesOnCell_sign', edgesOnCell_sign) + !$acc enter data copyin(edgesOnCell_sign) + + call mpas_pool_get_array(mesh, 'invAreaCell', invAreaCell) + !$acc enter data copyin(invAreaCell) + + call mpas_pool_get_array(mesh, 'bdyMaskCell', bdyMaskCell) + !$acc enter data copyin(bdyMaskCell) + + call mpas_pool_get_array(mesh, 'bdyMaskEdge', bdyMaskEdge) + !$acc enter data copyin(bdyMaskEdge) +#endif + end subroutine mpas_atm_dynamics_init @@ -233,6 +303,24 @@ subroutine mpas_atm_dynamics_finalize(domain) type (field2DReal), pointer :: tend_ru_physicsField, tend_rtheta_physicsField, tend_rho_physicsField #endif +#ifdef MPAS_OPENACC + type (mpas_pool_type), pointer :: mesh + + real (kind=RKIND), dimension(:), pointer :: dvEdge + integer, dimension(:,:), pointer :: cellsOnCell + integer, dimension(:,:), pointer :: cellsOnEdge + integer, dimension(:,:), pointer :: advCellsForEdge + integer, dimension(:,:), pointer :: edgesOnCell + integer, dimension(:), pointer :: nAdvCellsForEdge + integer, dimension(:), pointer :: nEdgesOnCell + real (kind=RKIND), dimension(:,:), pointer :: adv_coefs + real (kind=RKIND), dimension(:,:), pointer :: adv_coefs_3rd + real (kind=RKIND), dimension(:,:), pointer :: edgesOnCell_sign + real (kind=RKIND), dimension(:), pointer :: invAreaCell + integer, dimension(:), pointer :: bdyMaskCell + integer, dimension(:), pointer :: bdyMaskEdge +#endif + #ifdef MPAS_CAM_DYCORE nullify(tend_physics) @@ -248,6 +336,50 @@ subroutine mpas_atm_dynamics_finalize(domain) call mpas_deallocate_scratch_field(tend_ru_physicsField) #endif +#ifdef MPAS_OPENACC + nullify(mesh) + call mpas_pool_get_subpool(domain % blocklist % structs, 'mesh', mesh) + + call mpas_pool_get_array(mesh, 'dvEdge', dvEdge) + !$acc exit data delete(dvEdge) + + call mpas_pool_get_array(mesh, 'cellsOnCell', cellsOnCell) + !$acc exit data delete(cellsOnCell) + + call mpas_pool_get_array(mesh, 'cellsOnEdge', cellsOnEdge) + !$acc exit data delete(cellsOnEdge) + + call mpas_pool_get_array(mesh, 'advCellsForEdge', advCellsForEdge) + !$acc exit data delete(advCellsForEdge) + + call mpas_pool_get_array(mesh, 'edgesOnCell', edgesOnCell) + !$acc exit data delete(edgesOnCell) + + call mpas_pool_get_array(mesh, 'nAdvCellsForEdge', nAdvCellsForEdge) + !$acc exit data delete(nAdvCellsForEdge) + + call mpas_pool_get_array(mesh, 'nEdgesOnCell', nEdgesOnCell) + !$acc exit data delete(nEdgesOnCell) + + call mpas_pool_get_array(mesh, 'adv_coefs', adv_coefs) + !$acc exit data delete(adv_coefs) + + call mpas_pool_get_array(mesh, 'adv_coefs_3rd', adv_coefs_3rd) + !$acc exit data delete(adv_coefs_3rd) + + call mpas_pool_get_array(mesh, 'edgesOnCell_sign', edgesOnCell_sign) + !$acc exit data delete(edgesOnCell_sign) + + call mpas_pool_get_array(mesh, 'invAreaCell', invAreaCell) + !$acc exit data delete(invAreaCell) + + call mpas_pool_get_array(mesh, 'bdyMaskCell', bdyMaskCell) + !$acc exit data delete(bdyMaskCell) + + call mpas_pool_get_array(mesh, 'bdyMaskEdge', bdyMaskEdge) + !$acc exit data delete(bdyMaskEdge) +#endif + end subroutine mpas_atm_dynamics_finalize @@ -367,7 +499,7 @@ subroutine atm_srk3(domain, dt, itimestep, exchange_halo_group) character (len=StrKIND), pointer :: config_convection_scheme integer, pointer :: num_scalars, index_qv, nCells, nCellsSolve, nEdges, nEdgesSolve, nVertices, nVerticesSolve, nVertLevels - integer, pointer :: index_qc, index_qr, index_qi, index_qs, index_qg, index_nr, index_ni + integer, pointer :: index_qc, index_qr, index_qi, index_qs, index_qg, index_nr, index_ni, index_nc, index_nifa, index_nwfa character(len=StrKIND), pointer :: config_IAU_option @@ -471,6 +603,9 @@ subroutine atm_srk3(domain, dt, itimestep, exchange_halo_group) call mpas_pool_get_dimension(state, 'index_qg', index_qg) call mpas_pool_get_dimension(state, 'index_nr', index_nr) call mpas_pool_get_dimension(state, 'index_ni', index_ni) + call mpas_pool_get_dimension(state, 'index_nc', index_nc) + call mpas_pool_get_dimension(state, 'index_nifa', index_nifa) + call mpas_pool_get_dimension(state, 'index_nwfa', index_nwfa) endif ! @@ -585,7 +720,7 @@ subroutine atm_srk3(domain, dt, itimestep, exchange_halo_group) call mpas_timer_start('physics_get_tend') rk_step = 1 dynamics_substep = 1 - call physics_get_tend( block, mesh, state, diag, diag_physics,tend, tend_physics, & + call physics_get_tend( block, mesh, state, diag, tend, tend_physics, & block % configs, rk_step, dynamics_substep, & tend_ru_physics, tend_rtheta_physics, tend_rho_physics, & exchange_halo_group ) @@ -927,7 +1062,15 @@ subroutine atm_srk3(domain, dt, itimestep, exchange_halo_group) if (index_ni > 0) then scalars_driving(index_ni,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'ni', rk_timestep(rk_step) ) end if - + if (index_nc > 0) then + scalars_driving(index_nc,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nc', rk_timestep(rk_step) ) + end if + if (index_nifa > 0) then + scalars_driving(index_nifa,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nifa', rk_timestep(rk_step) ) + end if + if (index_nwfa > 0) then + scalars_driving(index_nwfa,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nwfa', rk_timestep(rk_step) ) + end if !$OMP PARALLEL DO do thread=1,nThreads call atm_bdy_adjust_scalars( state, diag, mesh, block % configs, scalars_driving, nVertLevels, dt, rk_timestep(rk_step), & @@ -1094,7 +1237,15 @@ subroutine atm_srk3(domain, dt, itimestep, exchange_halo_group) if (index_ni > 0) then scalars_driving(index_ni,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'ni', rk_timestep(rk_step) ) end if - + if (index_nc > 0) then + scalars_driving(index_nc,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nc', rk_timestep(rk_step) ) + end if + if (index_nifa > 0) then + scalars_driving(index_nifa,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nifa', rk_timestep(rk_step) ) + end if + if (index_nwfa > 0) then + scalars_driving(index_nwfa,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nwfa', rk_timestep(rk_step) ) + end if !$OMP PARALLEL DO do thread=1,nThreads call atm_bdy_adjust_scalars( state, diag, mesh, block % configs, scalars_driving, nVertLevels, dt, rk_timestep(rk_step), & @@ -1183,7 +1334,7 @@ subroutine atm_srk3(domain, dt, itimestep, exchange_halo_group) call mpas_timer_start('microphysics') !$OMP PARALLEL DO do thread=1,nThreads - call driver_microphysics ( block % configs, mesh, state, 2, diag, diag_physics, tend, itimestep, & + call driver_microphysics ( block % configs, mesh, state, 2, diag, diag_physics, tend_physics, tend, itimestep, & cellSolveThreadStart(thread), cellSolveThreadEnd(thread)) end do !$OMP END PARALLEL DO @@ -1255,7 +1406,15 @@ subroutine atm_srk3(domain, dt, itimestep, exchange_halo_group) if (index_ni > 0) then scalars_driving(index_ni,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'ni', dt ) end if - + if (index_nc > 0) then + scalars_driving(index_nc,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nc', dt ) + end if + if (index_nifa > 0) then + scalars_driving(index_nifa,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nifa', dt ) + end if + if (index_nwfa > 0) then + scalars_driving(index_nwfa,1:nVertLevels,1:nCells+1) = mpas_atm_get_bdy_state( clock, block, nVertLevels, nCells, 'nwfa', dt ) + end if !$OMP PARALLEL DO do thread=1,nThreads call atm_bdy_set_scalars( state, mesh, scalars_driving, nVertLevels, & @@ -1321,7 +1480,7 @@ subroutine advance_scalars(field_name, domain, rk_step, rk_timestep, config_mono type (mpas_pool_type), pointer :: tend type (mpas_pool_type), pointer :: state type (mpas_pool_type), pointer :: diag - type (mpas_pool_type), pointer :: diag_physics + type (mpas_pool_type), pointer :: mesh type (mpas_pool_type), pointer :: halo_scratch @@ -1348,14 +1507,14 @@ subroutine advance_scalars(field_name, domain, rk_step, rk_timestep, config_mono call mpas_pool_get_subpool(block % structs, 'tend', tend) call mpas_pool_get_subpool(block % structs, 'state', state) call mpas_pool_get_subpool(block % structs, 'diag', diag) - call mpas_pool_get_subpool(block % structs, 'diag_physics', diag_physics) + call mpas_pool_get_subpool(block % structs, 'mesh', mesh) call mpas_pool_get_subpool(block % structs, 'halo_scratch', halo_scratch) call mpas_pool_get_dimension(mesh, 'nCells', nCells) call mpas_pool_get_dimension(mesh, 'nEdges', nEdges) call mpas_pool_get_dimension(mesh, 'nVertLevels', nVertLevels) - call mpas_pool_get_dimension(state, 'num_scalars', num_scalars) + call mpas_pool_get_dimension(state, 'num_'//trim(field_name), num_scalars) call mpas_pool_get_dimension(block % dimensions, 'nThreads', nThreads) @@ -1403,13 +1562,13 @@ subroutine advance_scalars(field_name, domain, rk_step, rk_timestep, config_mono !$OMP PARALLEL DO do thread=1,nThreads if (rk_step < 3 .or. (.not. config_monotonic .and. .not. config_positive_definite)) then - call atm_advance_scalars(field_name, tend, state, diag, diag_physics, mesh, block % configs, rk_timestep(rk_step), & + call atm_advance_scalars(field_name, tend, state, diag, mesh, block % configs, rk_timestep(rk_step), & edgeThreadStart(thread), edgeThreadEnd(thread), & cellSolveThreadStart(thread), cellSolveThreadEnd(thread), & horiz_flux_array, rk_step, config_time_integration_order, & advance_density=config_split_dynamics_transport) else - call atm_advance_scalars_mono(field_name, block, tend, state, diag, diag_physics, mesh, halo_scratch, & + call atm_advance_scalars_mono(field_name, block, tend, state, diag, mesh, halo_scratch, & block % configs, rk_timestep(rk_step), & cellThreadStart(thread), cellThreadEnd(thread), & edgeThreadStart(thread), edgeThreadEnd(thread), & @@ -2760,7 +2919,7 @@ end subroutine atm_recover_large_step_variables_work !> to the work routine. ! !----------------------------------------------------------------------- - subroutine atm_advance_scalars(field_name, tend, state, diag, diag_physics, mesh, configs, dt, & + subroutine atm_advance_scalars(field_name, tend, state, diag, mesh, configs, dt, & edgeStart, edgeEnd, & cellSolveStart, cellSolveEnd, & horiz_flux_arr, rk_step, config_time_integration_order, advance_density) @@ -2773,7 +2932,7 @@ subroutine atm_advance_scalars(field_name, tend, state, diag, diag_physics, mesh type (mpas_pool_type), intent(in) :: tend type (mpas_pool_type), intent(inout) :: state type (mpas_pool_type), intent(in) :: diag - type (mpas_pool_type), intent(in) :: diag_physics + type (mpas_pool_type), intent(in) :: mesh type (mpas_pool_type), intent(in) :: configs integer, intent(in) :: rk_step ! rk substep we are integrating @@ -2859,6 +3018,7 @@ subroutine atm_advance_scalars(field_name, tend, state, diag, diag_physics, mesh call mpas_pool_get_dimension(state,'index_buoyx',index_buoyx) call mpas_pool_get_config(configs,'config_gf_cporg',config_gf_cporg) !--srf + call atm_advance_scalars_work(nCells, num_scalars, dt, & edgeStart, edgeEnd, & cellSolveStart, cellSolveEnd, & @@ -2992,7 +3152,7 @@ subroutine atm_advance_scalars_work(nCells, num_scalars, dt, & flux4(q_im2, q_im1, q_i, q_ip1, ua) + & coef3*abs(ua)*((q_ip1 - q_im2)-3.*(q_i-q_im1))/12.0 - !-srf +!-srf !print*,'atm_advance_scalars_work : index_buoyx',index_buoyx !-srf local_advance_density = advance_density @@ -3018,154 +3178,201 @@ subroutine atm_advance_scalars_work(nCells, num_scalars, dt, & weight_time_old = 1. - weight_time_new + MPAS_ACC_TIMER_START('atm_advance_scalars [ACC_data_xfer]') + !$acc enter data create(horiz_flux_arr) + !$acc enter data copyin(uhAvg, scalar_new) + MPAS_ACC_TIMER_STOP('atm_advance_scalars [ACC_data_xfer]') + + !$acc parallel async + !$acc loop gang worker private(scalar_weight2, ica) do iEdge=edgeStart,edgeEnd - if( (.not.config_apply_lbcs) .or. (bdyMaskEdge(iEdge) .lt. nRelaxZone-1) ) then ! full flux calculation + if ((.not.config_apply_lbcs) & + .or. (bdyMaskEdge(iEdge) < nRelaxZone-1)) then ! full flux calculation - select case(nAdvCellsForEdge(iEdge)) + select case(nAdvCellsForEdge(iEdge)) - case(10) + case(10) - do j=1,10 -!DIR$ IVDEP - do k=1,nVertLevels - scalar_weight2(k,j) = adv_coefs(j,iEdge) + sign(1.0_RKIND,uhAvg(k,iEdge))*adv_coefs_3rd(j,iEdge) + !$acc loop vector collapse(2) + do j=1,10 + do k=1,nVertLevels + scalar_weight2(k,j) = adv_coefs(j,iEdge) + sign(1.0_RKIND,uhAvg(k,iEdge))*adv_coefs_3rd(j,iEdge) + end do end do - end do - do j=1,10 - ica(j) = advCellsForEdge(j,iEdge) - end do -!DIR$ IVDEP - do k = 1,nVertLevels -!DIR$ IVDEP - do iScalar = 1,num_scalars ; if(iScalar == index_buoyx) cycle !--srf - horiz_flux_arr(iScalar,k,iEdge) = & - scalar_weight2(k,1) * scalar_new(iScalar,k,ica(1)) + & - scalar_weight2(k,2) * scalar_new(iScalar,k,ica(2)) + & - scalar_weight2(k,3) * scalar_new(iScalar,k,ica(3)) + & - scalar_weight2(k,4) * scalar_new(iScalar,k,ica(4)) + & - scalar_weight2(k,5) * scalar_new(iScalar,k,ica(5)) + & - scalar_weight2(k,6) * scalar_new(iScalar,k,ica(6)) + & - scalar_weight2(k,7) * scalar_new(iScalar,k,ica(7)) + & - scalar_weight2(k,8) * scalar_new(iScalar,k,ica(8)) + & - scalar_weight2(k,9) * scalar_new(iScalar,k,ica(9)) + & - scalar_weight2(k,10) * scalar_new(iScalar,k,ica(10)) + + !$acc loop vector + do j=1,10 + ica(j) = advCellsForEdge(j,iEdge) end do - end do - case default + !$acc loop vector collapse(2) + do k = 1,nVertLevels + do iScalar = 1,num_scalars ; if(iScalar == index_buoyx) cycle !--srf + horiz_flux_arr(iScalar,k,iEdge) = & + scalar_weight2(k,1) * scalar_new(iScalar,k,ica(1)) + & + scalar_weight2(k,2) * scalar_new(iScalar,k,ica(2)) + & + scalar_weight2(k,3) * scalar_new(iScalar,k,ica(3)) + & + scalar_weight2(k,4) * scalar_new(iScalar,k,ica(4)) + & + scalar_weight2(k,5) * scalar_new(iScalar,k,ica(5)) + & + scalar_weight2(k,6) * scalar_new(iScalar,k,ica(6)) + & + scalar_weight2(k,7) * scalar_new(iScalar,k,ica(7)) + & + scalar_weight2(k,8) * scalar_new(iScalar,k,ica(8)) + & + scalar_weight2(k,9) * scalar_new(iScalar,k,ica(9)) + & + scalar_weight2(k,10) * scalar_new(iScalar,k,ica(10)) + end do + end do - horiz_flux_arr(:,:,iEdge) = 0.0 - do j=1,nAdvCellsForEdge(iEdge) - iAdvCell = advCellsForEdge(j,iEdge) -!DIR$ IVDEP + case default + + !$acc loop vector collapse(2) do k=1,nVertLevels - scalar_weight = adv_coefs(j,iEdge) + sign(1.0_RKIND,uhAvg(k,iEdge))*adv_coefs_3rd(j,iEdge) -!DIR$ IVDEP - do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf - horiz_flux_arr(iScalar,k,iEdge) = horiz_flux_arr(iScalar,k,iEdge) + scalar_weight * scalar_new(iScalar,k,iAdvCell) + do iScalar=1,num_scalars + horiz_flux_arr(iScalar,k,iEdge) = 0.0_RKIND end do end do - end do - end select + !$acc loop seq + do j=1,nAdvCellsForEdge(iEdge) + iAdvCell = advCellsForEdge(j,iEdge) - else if(config_apply_lbcs .and. (bdyMaskEdge(iEdge) .ge. nRelaxZone-1) .and. (bdyMaskEdge(iEdge) .le. nRelaxZone) ) then - ! upwind flux evaluation for outermost 2 edges in specified zone + !$acc loop vector collapse(2) + do k=1,nVertLevels + do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf + scalar_weight = adv_coefs(j,iEdge) + sign(1.0_RKIND,uhAvg(k,iEdge))*adv_coefs_3rd(j,iEdge) + horiz_flux_arr(iScalar,k,iEdge) = horiz_flux_arr(iScalar,k,iEdge) & + + scalar_weight * scalar_new(iScalar,k,iAdvCell) + end do + end do + end do + end select + + else if(config_apply_lbcs & + .and. (bdyMaskEdge(iEdge) >= nRelaxZone-1) & + .and. (bdyMaskEdge(iEdge) <= nRelaxZone)) then + + ! upwind flux evaluation for outermost 2 edges in specified zone cell1 = cellsOnEdge(1,iEdge) cell2 = cellsOnEdge(2,iEdge) -!DIR$ IVDEP + + !$acc loop vector collapse(2) do k=1,nVertLevels - u_direction = sign(0.5_RKIND,uhAvg(k,iEdge)) - u_positive = dvEdge(iEdge)*abs(u_direction + 0.5_RKIND) - u_negative = dvEdge(iEdge)*abs(u_direction - 0.5_RKIND) -!DIR$ IVDEP - do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf + do iScalar=1,num_scalars + u_direction = sign(0.5_RKIND,uhAvg(k,iEdge)) + u_positive = dvEdge(iEdge)*abs(u_direction + 0.5_RKIND) + u_negative = dvEdge(iEdge)*abs(u_direction - 0.5_RKIND) + if(iScalar == index_buoyx) cycle !--srf horiz_flux_arr(iScalar,k,iEdge) = u_positive*scalar_new(iScalar,k,cell1) + u_negative*scalar_new(iScalar,k,cell2) end do end do - end if ! end of regional MPAS test - end do + !$acc end parallel !$OMP BARRIER -! scalar update, for each column sum fluxes over horizontal edges, add physics tendency, and add vertical flux divergence in update. + ! + ! scalar update, for each column sum fluxes over horizontal edges, add physics tendency, + ! and add vertical flux divergence in update. + ! - + MPAS_ACC_TIMER_START('atm_advance_scalars [ACC_data_xfer]') +#ifndef DO_PHYSICS + !$acc enter data create(scalar_tend_save) +#else + !$acc enter data copyin(scalar_tend_save) +#endif + !$acc enter data copyin(scalar_old, fnm, fnp, rdnw, wwAvg, rho_zz_old, rho_zz_new) + !$acc enter data create(scalar_tend_column, wdtn) + MPAS_ACC_TIMER_STOP('atm_advance_scalars [ACC_data_xfer]') + + !$acc parallel wait + !$acc loop gang worker private(scalar_tend_column, wdtn) do iCell=cellSolveStart,cellSolveEnd if(bdyMaskCell(iCell) <= nRelaxZone) then ! specified zone for regional_MPAS is not updated in this routine + !$acc loop vector collapse(2) + do k=1,nVertLevels + do iScalar=1,num_scalars + scalar_tend_column(iScalar,k) = 0.0_RKIND #ifndef DO_PHYSICS - scalar_tend_save(:,:,iCell) = 0.0 ! testing purposes - we have no sources or sinks + scalar_tend_save(iScalar,k,iCell) = 0.0_RKIND ! testing purposes - we have no sources or sinks #endif - scalar_tend_column(1:num_scalars,1:nVertlevels) = 0. + end do + end do + !$acc loop seq do i=1,nEdgesOnCell(iCell) iEdge = edgesOnCell(i,iCell) ! here we add the horizontal flux divergence into the scalar tendency. ! note that the scalar tendency is modified. -!DIR$ IVDEP + !$acc loop vector collapse(2) do k=1,nVertLevels -!DIR$ IVDEP do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf scalar_tend_column(iScalar,k) = scalar_tend_column(iScalar,k) & - edgesOnCell_sign(i,iCell) * uhAvg(k,iEdge)*horiz_flux_arr(iScalar,k,iEdge) end do end do - + end do -!DIR$ IVDEP + !$acc loop vector collapse(2) do k=1,nVertLevels -!DIR$ IVDEP + do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf - scalar_tend_column(iScalar,k) = scalar_tend_column(iScalar,k) * invAreaCell(iCell) + scalar_tend_save(iScalar,k,iCell) + scalar_tend_column(iScalar,k) = scalar_tend_column(iScalar,k) * invAreaCell(iCell) & + + scalar_tend_save(iScalar,k,iCell) end do end do - - ! - ! vertical flux divergence and update of the scalars - ! - wdtn(:,1) = 0.0 - wdtn(:,nVertLevels+1) = 0.0 - k = 2 - do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf - wdtn(iScalar,k) = wwAvg(k,iCell)*(fnm(k)*scalar_new(iScalar,k,iCell)+fnp(k)*scalar_new(iScalar,k-1,iCell)) - end do - -!DIR$ IVDEP - do k=3,nVertLevels-1 -!DIR$ IVDEP + ! + ! vertical flux divergence and update of the scalars + ! + + !$acc loop vector do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf - wdtn(iScalar,k) = flux3( scalar_new(iScalar,k-2,iCell),scalar_new(iScalar,k-1,iCell), & - scalar_new(iScalar,k ,iCell),scalar_new(iScalar,k+1,iCell), & - wwAvg(k,iCell), coef_3rd_order ) + wdtn(iScalar,1) = 0.0 + wdtn(iScalar,2) = wwAvg(2,iCell)*(fnm(2)*scalar_new(iScalar,2,iCell)+fnp(2)*scalar_new(iScalar,2-1,iCell)) + wdtn(iScalar,nVertLevels) = wwAvg(nVertLevels,iCell) * & + ( fnm(nVertLevels)*scalar_new(iScalar,nVertLevels,iCell) & + +fnp(nVertLevels)*scalar_new(iScalar,nVertLevels-1,iCell) ) + wdtn(iScalar,nVertLevels+1) = 0.0 end do - end do - k = nVertLevels - do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf - wdtn(iScalar,k) = wwAvg(k,iCell)*(fnm(k)*scalar_new(iScalar,k,iCell)+fnp(k)*scalar_new(iScalar,k-1,iCell)) - end do -!DIR$ IVDEP - do k=1,nVertLevels - rho_zz_new_inv = 1.0_RKIND / (weight_time_old*rho_zz_old(k,iCell) + weight_time_new*rho_zz_new(k,iCell)) -!DIR$ IVDEP - do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf - scalar_new(iScalar,k,iCell) = ( scalar_old(iScalar,k,iCell)*rho_zz_old(k,iCell) & - + dt*( scalar_tend_column(iScalar,k) -rdnw(k)*(wdtn(iScalar,k+1)-wdtn(iScalar,k)) ) ) * rho_zz_new_inv + !$acc loop vector collapse(2) + do k=3,nVertLevels-1 + + do iScalar=1,num_scalars ; if(iScalar == index_buoyx) cycle !--srf + wdtn(iScalar,k) = flux3( scalar_new(iScalar,k-2,iCell),scalar_new(iScalar,k-1,iCell), & + scalar_new(iScalar,k ,iCell),scalar_new(iScalar,k+1,iCell), & + wwAvg(k,iCell), coef_3rd_order ) + end do end do - end do - end if ! specified zone regional_MPAS test + !$acc loop vector collapse(2) + do k=1,nVertLevels + + + do iScalar=1,num_scalars; if(iScalar == index_buoyx) cycle !--srf + rho_zz_new_inv = 1.0_RKIND / (weight_time_old*rho_zz_old(k,iCell) + weight_time_new*rho_zz_new(k,iCell)) + scalar_new(iScalar,k,iCell) = ( scalar_old(iScalar,k,iCell)*rho_zz_old(k,iCell) & + + dt*( scalar_tend_column(iScalar,k) -rdnw(k)*(wdtn(iScalar,k+1)-wdtn(iScalar,k)) ) ) * rho_zz_new_inv + end do + end do + + end if ! specified zone regional_MPAS test end do + !$acc end parallel + + MPAS_ACC_TIMER_START('atm_advance_scalars [ACC_data_xfer]') + !$acc exit data copyout(scalar_new) + !$acc exit data delete(scalar_tend_column, wdtn, uhAvg, wwAvg, scalar_old, fnm, fnp, & + !$acc rdnw, rho_zz_old, rho_zz_new, horiz_flux_arr, scalar_tend_save) + MPAS_ACC_TIMER_STOP('atm_advance_scalars [ACC_data_xfer]') end subroutine atm_advance_scalars_work @@ -3181,7 +3388,7 @@ end subroutine atm_advance_scalars_work !> to the work routine. ! !----------------------------------------------------------------------- - subroutine atm_advance_scalars_mono(field_name, block, tend, state, diag, diag_physics, mesh, halo_scratch, configs, dt, & + subroutine atm_advance_scalars_mono(field_name, block, tend, state, diag, mesh, halo_scratch, configs, dt, & cellStart, cellEnd, edgeStart, edgeEnd, & cellSolveStart, cellSolveEnd, & scalar_old, scalar_new, s_max, s_min, wdtn, flux_arr, & @@ -3196,7 +3403,7 @@ subroutine atm_advance_scalars_mono(field_name, block, tend, state, diag, diag_p type (mpas_pool_type), intent(in) :: tend type (mpas_pool_type), intent(inout) :: state type (mpas_pool_type), intent(in) :: diag - type (mpas_pool_type), intent(in) :: diag_physics + type (mpas_pool_type), intent(in) :: mesh type (mpas_pool_type), intent(in) :: halo_scratch type (mpas_pool_type), intent(in) :: configs @@ -3288,7 +3495,7 @@ subroutine atm_advance_scalars_mono(field_name, block, tend, state, diag, diag_p call mpas_pool_get_dimension(state,'index_buoyx',index_buoyx) call mpas_pool_get_config(configs,'config_gf_cporg',config_gf_cporg) !--srf - call atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scalars, dt, & + call atm_advance_scalars_mono_work(field_name, block, state, nCells, nEdges, num_scalars, dt, & cellStart, cellEnd, edgeStart, edgeEnd, & cellSolveStart, cellSolveEnd, & coef_3rd_order, nCellsSolve, uhAvg, wwAvg, scalar_tend, rho_zz_old, & @@ -3359,7 +3566,7 @@ end subroutine atm_advance_scalars_mono !> as used in the RK3 scheme as described in Wang et al MWR 2009 ! !----------------------------------------------------------------------- - subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scalars, dt, & + subroutine atm_advance_scalars_mono_work(field_name, block, state, nCells, nEdges, num_scalars, dt, & cellStart, cellEnd, edgeStart, edgeEnd, & cellSolveStart, cellSolveEnd, & coef_3rd_order, nCellsSolve, uhAvg, wwAvg, scalar_tend, rho_zz_old, & @@ -3374,6 +3581,7 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala implicit none + character(len=*), intent(in) :: field_name type (block_type), intent(inout), target :: block type (mpas_pool_type), intent(inout) :: state integer, intent(in) :: index_buoyx !--srf @@ -3445,10 +3653,10 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala flux3(q_im2, q_im1, q_i, q_ip1, ua, coef3) = & flux4(q_im2, q_im1, q_i, q_ip1, ua) + & coef3*abs(ua)*((q_ip1 - q_im2)-3.*(q_i-q_im1))/12.0 - !-srf + +!-srf !print*,'atm_advance_scalars_work_mono : index_buoyx',index_buoyx !-srf - if (present(advance_density)) then local_advance_density = advance_density else @@ -3462,30 +3670,62 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala ! Note, however, that we enforce positive-definiteness in this update. ! The transport will maintain this positive definite solution and optionally, shape preservation (monotonicity). + + MPAS_ACC_TIMER_START('atm_advance_scalars_mono [ACC_data_xfer]') + !$acc data present(nEdgesOnCell, edgesOnCell, edgesOnCell_sign, & + !$acc invAreaCell, cellsOnCell, cellsOnEdge, nAdvCellsForEdge, & + !$acc advCellsForEdge, adv_coefs, adv_coefs_3rd, dvEdge, bdyMaskCell) + +#ifdef DO_PHYSICS + !$acc enter data copyin(scalar_tend) +#else + !$acc enter data create(scalar_tend) +#endif + if (local_advance_density) then + !$acc enter data copyin(rho_zz_int) + end if + !$acc enter data copyin(scalars_old, rho_zz_old, rdnw, uhAvg, wwAvg) + MPAS_ACC_TIMER_STOP('atm_advance_scalars_mono [ACC_data_xfer]') + + !$acc parallel + + !$acc loop gang worker do iCell=cellSolveStart,cellSolveEnd -!DIR$ IVDEP - do k = 1,nVertLevels -!DIR$ IVDEP - do iScalar = 1,num_scalars ; if(iScalar == index_buoyx) cycle !--srf + + !$acc loop vector collapse(2) + do k = 1,nVertLevels + + do iScalar = 1,num_scalars; if(iScalar == index_buoyx) cycle !--srf #ifndef DO_PHYSICS !TBH: Michael, would you please check this change? Our test uses -DDO_PHYSICS !TBH: so this code is not executed. The change avoids redundant work. - scalar_tend(iScalar,k,iCell) = 0.0 ! testing purposes - we have no sources or sinks + scalar_tend(iScalar,k,iCell) = 0.0_RKIND ! testing purposes - we have no sources or sinks #endif - scalars_old(iScalar,k,iCell) = scalars_old(iScalar,k,iCell)+dt*scalar_tend(iScalar,k,iCell) / rho_zz_old(k,iCell) - scalar_tend(iScalar,k,iCell) = 0.0 - end do + scalars_old(iScalar,k,iCell) = scalars_old(iScalar,k,iCell)+dt*scalar_tend(iScalar,k,iCell) / rho_zz_old(k,iCell) + scalar_tend(iScalar,k,iCell) = 0.0_RKIND + end do end do + end do + !$acc end parallel + + MPAS_ACC_TIMER_START('atm_advance_scalars_mono [ACC_data_xfer]') + !$acc exit data copyout(scalar_tend) + + !$acc update self(scalars_old) + MPAS_ACC_TIMER_STOP('atm_advance_scalars_mono [ACC_data_xfer]') !$OMP BARRIER !$OMP MASTER - call exchange_halo_group(block % domain, 'dynamics:scalars_old') + call exchange_halo_group(block % domain, 'dynamics:'//trim(field_name)//'_old') !$OMP END MASTER !$OMP BARRIER + MPAS_ACC_TIMER_START('atm_advance_scalars_mono [ACC_data_xfer]') + !$acc update device(scalars_old) + MPAS_ACC_TIMER_STOP('atm_advance_scalars_mono [ACC_data_xfer]') ! ! Runge Kutta integration, so we compute fluxes from scalar_new values, update starts from scalar_old @@ -3496,53 +3736,83 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala call mpas_log_write('Error: rho_zz_int not supplied to atm_advance_scalars_mono_work( ) when advance_density=.true.', messageType=MPAS_LOG_CRIT) end if + !$acc parallel + ! begin with update of density + + !$acc loop gang worker do iCell=cellSolveStart,cellSolveEnd - rho_zz_int(:,iCell) = 0.0 + + !$acc loop vector + do k=1,nVertLevels + rho_zz_int(k,iCell) = 0.0_RKIND + end do + + !$acc loop seq do i=1,nEdgesOnCell(iCell) iEdge = edgesOnCell(i,iCell) -!DIR$ IVDEP + !$acc loop vector do k=1,nVertLevels - rho_zz_int(k,iCell) = rho_zz_int(k,iCell) - edgesOnCell_sign(i,iCell) * uhAvg(k,iEdge) * dvEdge(iEdge) * invAreaCell(iCell) + rho_zz_int(k,iCell) = rho_zz_int(k,iCell) - edgesOnCell_sign(i,iCell) & + * uhAvg(k,iEdge) * dvEdge(iEdge) * invAreaCell(iCell) end do end do end do + + !$acc loop gang worker do iCell=cellSolveStart,cellSolveEnd -!DIR$ IVDEP + + !$acc loop vector do k=1,nVertLevels - rho_zz_int(k,iCell) = rho_zz_old(k,iCell) + dt*( rho_zz_int(k,iCell) - rdnw(k)*(wwAvg(k+1,iCell)-wwAvg(k,iCell)) ) + rho_zz_int(k,iCell) = rho_zz_old(k,iCell) + dt*(rho_zz_int(k,iCell) - rdnw(k)*(wwAvg(k+1,iCell)-wwAvg(k,iCell))) end do end do + + !$acc end parallel + !$OMP BARRIER + end if - ! next, do one scalar at a time + MPAS_ACC_TIMER_START('atm_advance_scalars_mono [ACC_data_xfer]') + if (.not. local_advance_density) then + !$acc enter data copyin(rho_zz_new) + end if + !$acc enter data copyin(scalars_new, fnm, fnp) + !$acc enter data create(scalar_old, scalar_new, scale_arr, s_min, s_max, & + !$acc flux_arr, flux_tmp, flux_upwind_tmp, wdtn) + MPAS_ACC_TIMER_STOP('atm_advance_scalars_mono [ACC_data_xfer]') - do iScalar = 1, num_scalars ; if(iScalar == index_buoyx) cycle !--srf - !srf - !print*,'scalars',iScalar,maxval(scalars_new(iScalar,:,:)) - ! + do iScalar = 1, num_scalars; if(iScalar == index_buoyx) cycle !--srf + + !$acc parallel + !$acc loop gang worker do iCell=cellStart,cellEnd -!DIR$ IVDEP + + !$acc loop vector do k=1,nVertLevels scalar_old(k,iCell) = scalars_old(iScalar,k,iCell) scalar_new(k,iCell) = scalars_new(iScalar,k,iCell) end do end do -! ***** TEMPORARY TEST ******* WCS 20161012 - do k=1,nVertLevels - scalar_old(k,nCells+1) = 0. - scalar_new(k,nCells+1) = 0. - end do +#ifndef MPAS_OPENACC + do k=1,nVertLevels + scalar_old(k,nCells+1) = 0.0_RKIND + scalar_new(k,nCells+1) = 0.0_RKIND + end do +#endif + !$acc end parallel !$OMP BARRIER #ifdef DEBUG_TRANSPORT + !$acc update self(scalar_old) + scmin = scalar_old(1,1) scmax = scalar_old(1,1) do iCell = 1, nCells @@ -3553,6 +3823,8 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala end do call mpas_log_write(' scmin, scmin old in $r $r', realArgs=(/scmin,scmax/)) + !$acc update self(scalar_new) + scmin = scalar_new(1,1) scmax = scalar_new(1,1) do iCell = 1, nCells @@ -3564,15 +3836,17 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala call mpas_log_write(' scmin, scmin new in ', realArgs=(/scmin,scmax/)) #endif + !$acc parallel ! ! vertical flux divergence, and min and max bounds for flux limiter ! + !$acc loop gang worker do iCell=cellSolveStart,cellSolveEnd ! zero flux at top and bottom - wdtn(1,iCell) = 0.0 - wdtn(nVertLevels+1,iCell) = 0.0 + wdtn(1,iCell) = 0.0_RKIND + wdtn(nVertLevels+1,iCell) = 0.0_RKIND k = 1 s_max(k,iCell) = max(scalar_old(1,iCell),scalar_old(2,iCell)) @@ -3583,7 +3857,7 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala s_max(k,iCell) = max(scalar_old(k-1,iCell),scalar_old(k,iCell),scalar_old(k+1,iCell)) s_min(k,iCell) = min(scalar_old(k-1,iCell),scalar_old(k,iCell),scalar_old(k+1,iCell)) -!DIR$ IVDEP + !$acc loop vector do k=3,nVertLevels-1 wdtn(k,iCell) = flux3( scalar_new(k-2,iCell),scalar_new(k-1,iCell), & scalar_new(k ,iCell),scalar_new(k+1,iCell), & @@ -3605,7 +3879,7 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala ! original code retained in select "default" case select case(nEdgesOnCell(iCell)) case(6) -!DIR$ IVDEP + !$acc loop vector do k=1, nVertLevels s_max(k,iCell) = max(s_max(k,iCell), & scalar_old(k, cellsOnCell(1,iCell)), & @@ -3621,11 +3895,13 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala scalar_old(k, cellsOnCell(4,iCell)), & scalar_old(k, cellsOnCell(5,iCell)), & scalar_old(k, cellsOnCell(6,iCell))) - enddo + end do case default + !$acc loop seq do i=1, nEdgesOnCell(iCell) -!DIR$ IVDEP + + !$acc loop vector do k=1, nVertLevels s_max(k,iCell) = max(s_max(k,iCell),scalar_old(k, cellsOnCell(i,iCell))) s_min(k,iCell) = min(s_min(k,iCell),scalar_old(k, cellsOnCell(i,iCell))) @@ -3635,12 +3911,16 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala end do + !$acc end parallel + !$OMP BARRIER + !$acc parallel + ! ! horizontal flux divergence ! - + !$acc loop gang worker private(ica, swa) do iEdge=edgeStart,edgeEnd cell1 = cellsOnEdge(1,iEdge) @@ -3653,11 +3933,14 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala ! be sure to see additional declarations near top of subroutine select case(nAdvCellsForEdge(iEdge)) case(10) + !$acc loop vector do jj=1,10 ica(jj) = advCellsForEdge(jj,iEdge) swa(jj,1) = adv_coefs(jj,iEdge) + adv_coefs_3rd(jj,iEdge) swa(jj,2) = adv_coefs(jj,iEdge) - adv_coefs_3rd(jj,iEdge) - enddo + end do + + !$acc loop vector do k=1,nVertLevels ii = merge(1, 2, uhAvg(k,iEdge) > 0) flux_arr(k,iEdge) = uhAvg(k,iEdge)*( & @@ -3666,15 +3949,19 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala swa(5,ii)*scalar_new(k,ica(5)) + swa(6,ii)*scalar_new(k,ica(6)) + & swa(7,ii)*scalar_new(k,ica(7)) + swa(8,ii)*scalar_new(k,ica(8)) + & swa(9,ii)*scalar_new(k,ica(9)) + swa(10,ii)*scalar_new(k,ica(10))) - enddo + end do case default + !$acc loop vector do k=1,nVertLevels flux_arr(k,iEdge) = 0.0_RKIND - enddo + end do + + !$acc loop seq do i=1,nAdvCellsForEdge(iEdge) iCell = advCellsForEdge(i,iEdge) -!DIR$ IVDEP + + !$acc loop vector do k=1,nVertLevels scalar_weight = uhAvg(k,iEdge)*(adv_coefs(i,iEdge) + sign(1.0_RKIND,uhAvg(k,iEdge))*adv_coefs_3rd(i,iEdge)) flux_arr(k,iEdge) = flux_arr(k,iEdge) + scalar_weight* scalar_new(k,iCell) @@ -3683,43 +3970,55 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala end select else - flux_arr(:,iEdge) = 0.0_RKIND + + !$acc loop vector + do k=1,nVertLevels + flux_arr(k,iEdge) = 0.0_RKIND + end do + end if end do + !$acc end parallel + !$OMP BARRIER + !$acc parallel + ! ! vertical flux divergence for upwind update, we will put upwind update into scalar_new, and put factor of dt in fluxes ! + !$acc loop gang worker private(flux_upwind_arr) do iCell=cellSolveStart,cellSolveEnd k = 1 scalar_new(k,iCell) = scalar_old(k,iCell) * rho_zz_old(k,iCell) -!DIR$ IVDEP + !$acc loop vector do k = 2, nVertLevels scalar_new(k,iCell) = scalar_old(k,iCell)*rho_zz_old(k,iCell) flux_upwind_arr(k) = dt*(max(0.0_RKIND,wwAvg(k,iCell))*scalar_old(k-1,iCell) + min(0.0_RKIND,wwAvg(k,iCell))*scalar_old(k,iCell)) end do + + !$acc loop vector do k = 1, nVertLevels-1 scalar_new(k,iCell) = scalar_new(k,iCell) - flux_upwind_arr(k+1)*rdnw(k) end do -!DIR$ IVDEP + + !$acc loop vector do k = 2, nVertLevels scalar_new(k ,iCell) = scalar_new(k ,iCell) + flux_upwind_arr(k)*rdnw(k) wdtn(k,iCell) = dt*wdtn(k,iCell) - flux_upwind_arr(k) end do - ! ! scale_arr(SCALE_IN,:,:) and scale_arr(SCALE_OUT:,:) are used here to store the incoming and outgoing perturbation flux ! contributions to the update: first the vertical flux component, then the horizontal ! -!DIR$ IVDEP + !$acc loop vector do k=1,nVertLevels scale_arr(k,SCALE_IN, iCell) = - rdnw(k)*(min(0.0_RKIND,wdtn(k+1,iCell))-max(0.0_RKIND,wdtn(k,iCell))) scale_arr(k,SCALE_OUT,iCell) = - rdnw(k)*(max(0.0_RKIND,wdtn(k+1,iCell))-min(0.0_RKIND,wdtn(k,iCell))) @@ -3732,28 +4031,43 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala ! ! upwind flux computation + !$acc loop gang worker do iEdge=edgeStart,edgeEnd + cell1 = cellsOnEdge(1,iEdge) cell2 = cellsOnEdge(2,iEdge) -!DIR$ IVDEP - do k=1, nVertLevels + + !$acc loop vector + do k=1,nVertLevels flux_upwind_tmp(k,iEdge) = dvEdge(iEdge) * dt * & (max(0.0_RKIND,uhAvg(k,iEdge))*scalar_old(k,cell1) + min(0.0_RKIND,uhAvg(k,iEdge))*scalar_old(k,cell2)) flux_tmp(k,iEdge) = dt * flux_arr(k,iEdge) - flux_upwind_tmp(k,iEdge) end do if( config_apply_lbcs .and. (bdyMaskEdge(iEdge) == nRelaxZone) .or. (bdyMaskEdge(iEdge) == nRelaxZone-1) ) then - flux_tmp(:,iEdge) = 0. - flux_arr(:,iEdge) = flux_upwind_tmp(:,iEdge) + !$acc loop vector + do k=1,nVertLevels + flux_tmp(k,iEdge) = 0.0_RKIND + flux_arr(k,iEdge) = flux_upwind_tmp(k,iEdge) + end do end if end do + + !$acc end parallel + !$OMP BARRIER + + !$acc parallel + + !$acc loop gang worker do iCell=cellSolveStart,cellSolveEnd + + !$acc loop seq do i=1,nEdgesOnCell(iCell) iEdge = edgesOnCell(i,iCell) -!DIR$ IVDEP + !$acc loop vector do k=1, nVertLevels scalar_new(k,iCell) = scalar_new(k,iCell) - edgesOnCell_sign(i,iCell) * flux_upwind_tmp(k,iEdge) * invAreaCell(iCell) @@ -3766,6 +4080,7 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala end do end do + ! ! next, the limiter ! @@ -3773,51 +4088,69 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala ! simplification of limiter calculations ! worked through algebra and found equivalent form ! added benefit that it should address ifort single prec overflow issue - if (local_advance_density) then - do iCell=cellSolveStart,cellSolveEnd -!DIR$ IVDEP - do k = 1, nVertLevels + if (local_advance_density) then + !$acc loop gang worker + do iCell=cellSolveStart,cellSolveEnd - scale_factor = (s_max(k,iCell)*rho_zz_int(k,iCell) - scalar_new(k,iCell)) / & - (scale_arr(k,SCALE_IN,iCell) + eps) - scale_arr(k,SCALE_IN,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) ) + !$acc loop vector + do k = 1, nVertLevels + scale_factor = (s_max(k,iCell)*rho_zz_int(k,iCell) - scalar_new(k,iCell)) / & + (scale_arr(k,SCALE_IN,iCell) + eps) + scale_arr(k,SCALE_IN,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) ) - scale_factor = (s_min(k,iCell)*rho_zz_int(k,iCell) - scalar_new(k,iCell)) / & - (scale_arr(k,SCALE_OUT,iCell) - eps) - scale_arr(k,SCALE_OUT,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) ) + scale_factor = (s_min(k,iCell)*rho_zz_int(k,iCell) - scalar_new(k,iCell)) / & + (scale_arr(k,SCALE_OUT,iCell) - eps) + scale_arr(k,SCALE_OUT,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) ) + end do end do - end do - else - do iCell=cellSolveStart,cellSolveEnd -!DIR$ IVDEP - do k = 1, nVertLevels + else + !$acc loop gang worker + do iCell=cellSolveStart,cellSolveEnd - scale_factor = (s_max(k,iCell)*rho_zz_new(k,iCell) - scalar_new(k,iCell)) / & - (scale_arr(k,SCALE_IN,iCell) + eps) - scale_arr(k,SCALE_IN,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) ) + !$acc loop vector + do k = 1, nVertLevels + scale_factor = (s_max(k,iCell)*rho_zz_new(k,iCell) - scalar_new(k,iCell)) / & + (scale_arr(k,SCALE_IN,iCell) + eps) + scale_arr(k,SCALE_IN,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) ) - scale_factor = (s_min(k,iCell)*rho_zz_new(k,iCell) - scalar_new(k,iCell)) / & - (scale_arr(k,SCALE_OUT,iCell) - eps) - scale_arr(k,SCALE_OUT,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) ) + scale_factor = (s_min(k,iCell)*rho_zz_new(k,iCell) - scalar_new(k,iCell)) / & + (scale_arr(k,SCALE_OUT,iCell) - eps) + scale_arr(k,SCALE_OUT,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) ) + end do end do - end do - end if + end if + + !$acc end parallel ! ! communicate scale factors here. ! communicate only first halo row in these next two exchanges ! + + MPAS_ACC_TIMER_START('atm_advance_scalars_mono [ACC_data_xfer]') + !$acc update self(scale_arr) + MPAS_ACC_TIMER_STOP('atm_advance_scalars_mono [ACC_data_xfer]') + !$OMP BARRIER !$OMP MASTER call exchange_halo_group(block % domain, 'dynamics:scale') !$OMP END MASTER !$OMP BARRIER + MPAS_ACC_TIMER_START('atm_advance_scalars_mono [ACC_data_xfer]') + !$acc update device(scale_arr) + MPAS_ACC_TIMER_STOP('atm_advance_scalars_mono [ACC_data_xfer]') + + !$acc parallel + + !$acc loop gang worker do iEdge=edgeStart,edgeEnd cell1 = cellsOnEdge(1,iEdge) cell2 = cellsOnEdge(2,iEdge) + if (cell1 <= nCellsSolve .or. cell2 <= nCellsSolve) then ! only for owned cells -!DIR$ IVDEP + + !$acc loop vector do k=1, nVertLevels flux_upwind = dvEdge(iEdge) * dt * & (max(0.0_RKIND,uhAvg(k,iEdge))*scalar_old(k,cell1) + min(0.0_RKIND,uhAvg(k,iEdge))*scalar_old(k,cell2)) @@ -3825,7 +4158,10 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala end do if( config_apply_lbcs .and. (bdyMaskEdge(iEdge) == nRelaxZone) .or. (bdyMaskEdge(iEdge) == nRelaxZone-1) ) then - flux_arr(:,iEdge) = 0. + !$acc loop vector + do k=1,nVertLevels + flux_arr(k,iEdge) = 0.0_RKIND + end do end if end if @@ -3837,11 +4173,14 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala ! moved assignment to scalar_new from separate loop (see commented code below) ! into the following loops. Avoids having to save elements of flux array + !$acc loop gang worker do iEdge=edgeStart,edgeEnd cell1 = cellsOnEdge(1,iEdge) cell2 = cellsOnEdge(2,iEdge) + if (cell1 <= nCellsSolve .or. cell2 <= nCellsSolve) then -!DIR$ IVDEP + + !$acc loop vector do k = 1, nVertLevels flux = flux_arr(k,iEdge) flux = max(0.0_RKIND,flux) * min(scale_arr(k,SCALE_OUT,cell1), scale_arr(k,SCALE_IN, cell2)) & @@ -3850,14 +4189,21 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala end do end if end do - - ! - ! rescale the vertical flux - ! + + !$acc end parallel + + ! + ! rescale the vertical flux + ! + !$OMP BARRIER + + !$acc parallel + !$acc loop gang worker do iCell=cellSolveStart,cellSolveEnd -!DIR$ IVDEP + + !$acc loop vector do k = 2, nVertLevels flux = wdtn(k,iCell) flux = max(0.0_RKIND,flux) * min(scale_arr(k-1,SCALE_OUT,iCell), scale_arr(k ,SCALE_IN,iCell)) & @@ -3866,33 +4212,42 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala end do end do - ! ! do the scalar update now that we have the fluxes ! + !$acc loop gang worker do iCell=cellSolveStart,cellSolveEnd + + !$acc loop seq do i=1,nEdgesOnCell(iCell) iEdge = edgesOnCell(i,iCell) -!DIR$ IVDEP + + !$acc loop vector do k=1,nVertLevels scalar_new(k,iCell) = scalar_new(k,iCell) - edgesOnCell_sign(i,iCell)*flux_arr(k,iEdge) * invAreaCell(iCell) end do end do - if (local_advance_density) then -!DIR$ IVDEP - do k=1,nVertLevels - scalar_new(k,iCell) = ( scalar_new(k,iCell) + (-rdnw(k)*(wdtn(k+1,iCell)-wdtn(k,iCell)) ) )/rho_zz_int(k,iCell) - end do - else -!DIR$ IVDEP - do k=1,nVertLevels - scalar_new(k,iCell) = ( scalar_new(k,iCell) + (-rdnw(k)*(wdtn(k+1,iCell)-wdtn(k,iCell)) ) )/rho_zz_new(k,iCell) - end do - end if + if (local_advance_density) then + !$acc loop vector + do k=1,nVertLevels + scalar_new(k,iCell) = (scalar_new(k,iCell) + (-rdnw(k)*(wdtn(k+1,iCell)-wdtn(k,iCell)) ) )/rho_zz_int(k,iCell) + end do + else + !$acc loop vector + do k=1,nVertLevels + scalar_new(k,iCell) = (scalar_new(k,iCell) + (-rdnw(k)*(wdtn(k+1,iCell)-wdtn(k,iCell)) ) )/rho_zz_new(k,iCell) + end do + end if end do + !$acc end parallel + #ifdef DEBUG_TRANSPORT + !$acc update self(scalar_new) + !$acc update self(s_max) + !$acc update self(s_min) + scmin = scalar_new(1,1) scmax = scalar_new(1,1) do iCell = 1, nCellsSolve @@ -3915,16 +4270,36 @@ subroutine atm_advance_scalars_mono_work(block, state, nCells, nEdges, num_scala ! hence the enforcement of PD in the copy back to the model state. !$OMP BARRIER + !$acc parallel + + !$acc loop gang worker do iCell=cellStart,cellEnd if(bdyMaskCell(iCell) <= nSpecZone) then ! regional_MPAS does spec zone update after transport. - do k=1, nVertLevels + !$acc loop vector + do k=1,nVertLevels scalars_new(iScalar,k,iCell) = max(0.0_RKIND,scalar_new(k,iCell)) end do end if end do + !$acc end parallel + end do ! loop over scalars + MPAS_ACC_TIMER_START('atm_advance_scalars_mono [ACC_data_xfer]') + if (local_advance_density) then + !$acc exit data copyout(rho_zz_int) + else + !$acc exit data delete(rho_zz_new) + end if + !$acc exit data copyout(scalars_new) + !$acc exit data delete(scalars_old, scalar_old, scalar_new, scale_arr, s_min, s_max, & + !$acc rho_zz_old, flux_arr, flux_tmp, flux_upwind_tmp, wdtn, wwAvg, & + !$acc uhAvg, fnm, fnp, rdnw) + + !$acc end data + MPAS_ACC_TIMER_STOP('atm_advance_scalars_mono [ACC_data_xfer]') + end subroutine atm_advance_scalars_mono_work @@ -7574,3 +7949,4 @@ subroutine atm_advance_scalars_mono_work_coldpool(block, state, nCells, nEdges, end subroutine atm_advance_scalars_mono_work_coldpool end module atm_time_integration + diff --git a/src/core_atmosphere/mpas_atm_core.F b/src/core_atmosphere/mpas_atm_core.F index 4093873b7..95e4e19d2 100644 --- a/src/core_atmosphere/mpas_atm_core.F +++ b/src/core_atmosphere/mpas_atm_core.F @@ -392,7 +392,9 @@ subroutine atm_mpas_init_block(dminfo, stream_manager, block, mesh, dt) type (mpas_pool_type), pointer :: tend type (mpas_pool_type), pointer :: sfc_input type (mpas_pool_type), pointer :: diag_physics + type (mpas_pool_type), pointer :: diag_physics_noahmp type (mpas_pool_type), pointer :: atm_input + type (mpas_pool_type), pointer :: output_noahmp integer :: iCell,iEdge,iVertex @@ -551,14 +553,16 @@ subroutine atm_mpas_init_block(dminfo, stream_manager, block, mesh, dt) !initialization of some input variables in registry: call mpas_pool_get_subpool(block % structs, 'tend', tend) call mpas_pool_get_subpool(block % structs, 'diag_physics', diag_physics) + call mpas_pool_get_subpool(block % structs, 'diag_physics_noahmp', diag_physics_noahmp) call mpas_pool_get_subpool(block % structs, 'atm_input', atm_input) + call mpas_pool_get_subpool(block % structs, 'output_noahmp', output_noahmp) call physics_tables_init(dminfo, block % configs) call physics_registry_init(mesh, block % configs, sfc_input) call physics_run_init(block % configs, mesh, state, clock, stream_manager) !initialization of all physics: call physics_init(dminfo, clock, block % configs, mesh, diag, tend, state, 1, diag_physics, & - atm_input, sfc_input) + diag_physics_noahmp, atm_input, sfc_input, output_noahmp) endif #endif diff --git a/src/core_atmosphere/mpas_atm_core_interface.F b/src/core_atmosphere/mpas_atm_core_interface.F index 6435e5b50..4c189313f 100644 --- a/src/core_atmosphere/mpas_atm_core_interface.F +++ b/src/core_atmosphere/mpas_atm_core_interface.F @@ -211,10 +211,14 @@ function atm_setup_packages(configs, streamInfo, packages, iocontext) result(ier ! ! Packages for the GF-MONAN scheme ! + !srf call setup_monan_packages(configs, packages) + !srf end function atm_setup_packages + !srf + !*********************************************************************** ! function setup_monan_packages ! !> \brief Set up packages specific to the GF-MONAN scheme @@ -311,6 +315,7 @@ subroutine setup_monan_packages(configs, packages) end if end subroutine setup_monan_packages + !srf !*********************************************************************** ! @@ -363,9 +368,9 @@ function atm_setup_log(logInfo, domain, unitNumbers) result(iErr)!{{{ use mpas_derived_types, only : mpas_log_type, domain_type use mpas_log, only : mpas_log_init, mpas_log_open -#ifdef MPAS_OPENMP - use mpas_threading, only : mpas_threading_get_num_threads -#endif + use mpas_framework, only : mpas_framework_report_settings + + implicit none @@ -394,53 +399,54 @@ function atm_setup_log(logInfo, domain, unitNumbers) result(iErr)!{{{ call mpas_log_write('') call mpas_log_write('MPAS-Atmosphere Version '//trim(domain % core % modelVersion)) call mpas_log_write('') - call mpas_log_write('') - call mpas_log_write('Output from ''git describe --dirty'': '//trim(domain % core % git_version)) - call mpas_log_write('') - call mpas_log_write('Compile-time options:') - call mpas_log_write(' Build target: '//trim(domain % core % build_target)) - call mpas_log_write(' OpenMP support: ' // & -#ifdef MPAS_OPENMP - 'yes') -#else - 'no') -#endif - call mpas_log_write(' OpenACC support: ' // & -#ifdef MPAS_OPENACC - 'yes') -#else - 'no') -#endif - call mpas_log_write(' Default real precision: ' // & -#ifdef SINGLE_PRECISION - 'single') -#else - 'double') -#endif - call mpas_log_write(' Compiler flags: ' // & -#ifdef MPAS_DEBUG - 'debug') -#else - 'optimize') -#endif - call mpas_log_write(' I/O layer: ' // & -#ifdef MPAS_PIO_SUPPORT -#ifdef USE_PIO2 - 'PIO 2.x') -#else - 'PIO 1.x') -#endif -#else - 'SMIOL') -#endif - call mpas_log_write('') - call mpas_log_write('Run-time settings:') - call mpas_log_write(' MPI task count: $i', intArgs=[domain % dminfo % nprocs]) -#ifdef MPAS_OPENMP - call mpas_log_write(' OpenMP max threads: $i', intArgs=[mpas_threading_get_max_threads()]) -#endif - call mpas_log_write('') + call mpas_framework_report_settings(domain) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + end function atm_setup_log!}}} diff --git a/src/core_atmosphere/mpas_atm_halos.F b/src/core_atmosphere/mpas_atm_halos.F index 7c0505327..9d3848b4a 100644 --- a/src/core_atmosphere/mpas_atm_halos.F +++ b/src/core_atmosphere/mpas_atm_halos.F @@ -26,7 +26,7 @@ subroutine halo_exchange_routine(domain, halo_group, ierr) end subroutine halo_exchange_routine end interface - character(len=StrKIND), pointer, private :: config_halo_exch_method +! character(len=StrKIND), pointer, private :: config_halo_exch_method procedure (halo_exchange_routine), pointer :: exchange_halo_group @@ -56,9 +56,14 @@ subroutine atm_build_halo_groups(domain, ierr) use mpas_halo, only : mpas_halo_init, mpas_halo_exch_group_create, mpas_halo_exch_group_add_field, & mpas_halo_exch_group_complete, mpas_halo_exch_group_full_halo_exch + ! Arguments type (domain_type), intent(inout) :: domain integer, intent(inout) :: ierr + ! Local variables + character(len=StrKIND), pointer :: config_halo_exch_method + + ! ! Determine from the namelist option config_halo_exch_method which halo exchange method to employ ! @@ -174,16 +179,20 @@ subroutine atm_build_halo_groups(domain, ierr) call mpas_dmpar_exch_group_add_field(domain, 'physics:cuten', 'rucuten', timeLevel=1, haloLayers=(/1,2/)) call mpas_dmpar_exch_group_add_field(domain, 'physics:cuten', 'rvcuten', timeLevel=1, haloLayers=(/1,2/)) !-srf + !umcl;vmcl <==> diag call mpas_dmpar_exch_group_create(domain, 'physics:coldpool') call mpas_dmpar_exch_group_add_field(domain, 'physics:coldpool' , 'umcl', timeLevel=1, haloLayers=(/1,2/)) call mpas_dmpar_exch_group_add_field(domain, 'physics:coldpool' , 'vmcl', timeLevel=1, haloLayers=(/1,2/)) - + !sigma_deep <==> diag_physics + call mpas_dmpar_exch_group_create(domain, 'physics:sigdiagten') + call mpas_dmpar_exch_group_add_field(domain, 'physics:sigdiagten' , 'sigma_deep', timeLevel=1, haloLayers=(/1,2/)) + !sigma_deep <==> tend_physics call mpas_dmpar_exch_group_create(domain, 'physics:sub3d_cuten') - call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sigma_deep' , timeLevel=1, haloLayers=(/1/)) - call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rucuten', timeLevel=1, haloLayers=(/1/)) - call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rvcuten', timeLevel=1, haloLayers=(/1/)) - call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rthcuten', timeLevel=1, haloLayers=(/1/)) - call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rqvcuten', timeLevel=1, haloLayers=(/1/)) + !call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sigma_deep' , timeLevel=1, haloLayers=(/1,2/)) + call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rucuten', timeLevel=1, haloLayers=(/1,2/)) + call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rvcuten', timeLevel=1, haloLayers=(/1,2/)) + call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rthcuten', timeLevel=1, haloLayers=(/1,2/)) + call mpas_dmpar_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rqvcuten', timeLevel=1, haloLayers=(/1,2/)) !-srf #endif @@ -323,13 +332,17 @@ subroutine atm_build_halo_groups(domain, ierr) call mpas_halo_exch_group_add_field(domain, 'physics:coldpool', 'umcl', timeLevel=1, haloLayers=(/1,2/)) call mpas_halo_exch_group_add_field(domain, 'physics:coldpool', 'vmcl', timeLevel=1, haloLayers=(/1,2/)) call mpas_halo_exch_group_complete(domain, 'physics:coldpool') + + call mpas_halo_exch_group_create(domain, 'physics:sigdiagten') + call mpas_halo_exch_group_add_field(domain, 'physics:sigdiagten', 'sigma_deep', timeLevel=1, haloLayers=(/1,2/)) + call mpas_halo_exch_group_complete(domain, 'physics:sigdiagten') call mpas_halo_exch_group_create(domain, 'physics:sub3d_cuten') - call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sigma_deep' , timeLevel=1, haloLayers=(/1/)) - call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rucuten', timeLevel=1, haloLayers=(/1/)) - call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rvcuten', timeLevel=1, haloLayers=(/1/)) - call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rthcuten', timeLevel=1, haloLayers=(/1/)) - call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rqvcuten', timeLevel=1, haloLayers=(/1/)) + !call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sigma_deep' , timeLevel=1, haloLayers=(/1,2/)) + call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rucuten', timeLevel=1, haloLayers=(/1,2/)) + call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rvcuten', timeLevel=1, haloLayers=(/1,2/)) + call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rthcuten', timeLevel=1, haloLayers=(/1,2/)) + call mpas_halo_exch_group_add_field(domain, 'physics:sub3d_cuten', 'sub3d_rqvcuten', timeLevel=1, haloLayers=(/1,2/)) call mpas_halo_exch_group_complete(domain, 'physics:sub3d_cuten') !-srf #endif @@ -376,9 +389,15 @@ subroutine atm_destroy_halo_groups(domain, ierr) use mpas_dmpar, only : mpas_dmpar_exch_group_destroy use mpas_halo, only : mpas_halo_exch_group_destroy, mpas_halo_finalize + ! Arguments type (domain_type), intent(inout) :: domain integer, intent(inout) :: ierr + ! Local variables + character(len=StrKIND), pointer :: config_halo_exch_method + + + call mpas_pool_get_config(domain % blocklist % configs, 'config_halo_exch_method', config_halo_exch_method) if (trim(config_halo_exch_method) == 'mpas_dmpar') then ! @@ -416,7 +435,7 @@ subroutine atm_destroy_halo_groups(domain, ierr) !srf call mpas_dmpar_exch_group_destroy(domain, 'physics:coldpool') call mpas_dmpar_exch_group_destroy(domain, 'physics:sub3d_cuten') - + !srf #endif else if (trim(config_halo_exch_method) == 'mpas_halo') then @@ -456,6 +475,7 @@ subroutine atm_destroy_halo_groups(domain, ierr) !srf call mpas_halo_exch_group_destroy(domain, 'physics:coldpool') call mpas_halo_exch_group_destroy(domain, 'physics:sub3d_cuten') + !srf #endif diff --git a/src/core_atmosphere/physics/.gitignore b/src/core_atmosphere/physics/.gitignore index e0d3d1a00..f27a16f14 100644 --- a/src/core_atmosphere/physics/.gitignore +++ b/src/core_atmosphere/physics/.gitignore @@ -1,3 +1,4 @@ *.f90 physics_wrf/*.f90 physics_wrf/files/ +physics_mmm diff --git a/src/core_atmosphere/physics/Makefile b/src/core_atmosphere/physics/Makefile index e176c7f74..948716ca8 100644 --- a/src/core_atmosphere/physics/Makefile +++ b/src/core_atmosphere/physics/Makefile @@ -4,13 +4,15 @@ ifeq ($(CORE),atmosphere) COREDEF = -Dmpas endif -all: lookup_tables core_physics_init core_physics_mmm core_physics_wrf core_physics_monan core_physics +all: + ./../tools/manage_externals/checkout_externals --externals ./../Externals.cfg + $(MAKE) lookup_tables core_physics_init core_physics_mmm core_physics_monan core_physics_wrf core_physics_noahmp core_physics dummy: echo "****** compiling physics ******" OBJS_init = \ - ccpp_kinds.o \ + ccpp_kind_types.o \ mpas_atmphys_constants.o \ mpas_atmphys_date_time.o \ mpas_atmphys_functions.o \ @@ -24,6 +26,7 @@ OBJS = \ mpas_atmphys_driver_convection.o \ mpas_atmphys_driver_gwdo.o \ mpas_atmphys_driver_lsm.o \ + mpas_atmphys_driver_lsm_noahmp.o \ mpas_atmphys_driver_microphysics.o \ mpas_atmphys_driver_oml.o \ mpas_atmphys_driver_pbl.o \ @@ -37,6 +40,8 @@ OBJS = \ mpas_atmphys_interface.o \ mpas_atmphys_landuse.o \ mpas_atmphys_lsm_noahinit.o \ + mpas_atmphys_lsm_noahmpinit.o \ + mpas_atmphys_lsm_noahmpfinalize.o \ mpas_atmphys_lsm_shared.o \ mpas_atmphys_manager.o \ mpas_atmphys_o3climatology.o \ @@ -52,19 +57,30 @@ lookup_tables: ./checkout_data_files.sh core_physics_mmm: core_physics_init - (cd physics_mmm; $(MAKE) all) + (cd physics_mmm; $(MAKE) -f Makefile.mpas all) core_physics_wrf: core_physics_init core_physics_mmm (cd physics_wrf; $(MAKE) all COREDEF="$(COREDEF)") +core_physics_noahmp: + (cd physics_noahmp/utility; $(MAKE) all COREDEF="$(COREDEF)") + (cd physics_noahmp/src; $(MAKE) all COREDEF="$(COREDEF)") + (cd physics_noahmp/drivers/mpas; $(MAKE) all COREDEF="$(COREDEF)") + core_physics_monan: core_physics_init (cd physics_monan; $(MAKE) all COREDEF="$(COREDEF)") + core_physics_init: $(OBJS_init) - ar -ru libphys.a $(OBJS_init) -core_physics: core_physics_wrf + +core_physics: core_physics_wrf core_physics_noahmp ($(MAKE) phys_interface COREDEF="$(COREDEF)") - ar -ru libphys.a $(OBJS) + ar -ru libphys.a $(OBJS_init) $(OBJS) + ($(MAKE) -C ./physics_mmm -f Makefile.mpas physics_mmm_lib) + ($(MAKE) -C ./physics_wrf physics_wrf_lib) + ($(MAKE) -C ./physics_noahmp/drivers/mpas driver_lib) + ($(MAKE) -C ./physics_noahmp/src src_lib) + ($(MAKE) -C ./physics_noahmp/utility utility_lib) phys_interface: $(OBJS) @@ -82,6 +98,7 @@ mpas_atmphys_driver.o: \ mpas_atmphys_driver_convection.o \ mpas_atmphys_driver_gwdo.o \ mpas_atmphys_driver_lsm.o \ + mpas_atmphys_driver_lsm_noahmp.o \ mpas_atmphys_driver_pbl.o \ mpas_atmphys_driver_radiation_lw.o \ mpas_atmphys_driver_radiation_sw.o \ @@ -111,6 +128,11 @@ mpas_atmphys_driver_lsm.o: \ mpas_atmphys_lsm_noahinit.o \ mpas_atmphys_vars.o +mpas_atmphys_driver_lsm_noahmp.o: \ + mpas_atmphys_constants.o \ + mpas_atmphys_manager.o \ + mpas_atmphys_vars.o + mpas_atmphys_driver_microphysics.o: \ mpas_atmphys_constants.o \ mpas_atmphys_init_microphysics.o \ @@ -141,10 +163,18 @@ mpas_atmphys_driver_radiation_sw.o: \ mpas_atmphys_rrtmg_swinit.o \ mpas_atmphys_vars.o +mpas_atmphys_driver_seaice.o: \ + mpas_atmphys_constants.o \ + mpas_atmphys_lsm_shared.o \ + mpas_atmphys_vars.o + mpas_atmphys_driver_sfclayer.o: \ mpas_atmphys_constants.o \ mpas_atmphys_vars.o +mpas_atmphys_finalize.o: \ + mpas_atmphys_lsm_noahmpfinalize.o + mpas_atmphys_init.o: \ mpas_atmphys_driver_convection.o \ mpas_atmphys_driver_lsm.o \ @@ -153,6 +183,7 @@ mpas_atmphys_init.o: \ mpas_atmphys_driver_radiation_lw.o \ mpas_atmphys_driver_radiation_sw.o \ mpas_atmphys_driver_sfclayer.o \ + mpas_atmphys_lsm_noahmpinit.o \ mpas_atmphys_landuse.o \ mpas_atmphys_o3climatology.o \ mpas_atmphys_vars.o @@ -169,6 +200,13 @@ mpas_atmphys_lsm_noahinit.o: \ mpas_atmphys_constants.o \ mpas_atmphys_utilities.o +mpas_atmphys_lsm_noahmpinit.o: \ + mpas_atmphys_utilities.o \ + mpas_atmphys_vars.o + +mpas_atmphys_lsm_noahmpfinalize.o : \ + mpas_atmphys_vars.o + mpas_atmphys_manager.o: \ mpas_atmphys_constants.o \ mpas_atmphys_o3climatology.o \ @@ -189,10 +227,10 @@ mpas_atmphys_rrtmg_swinit.o: \ mpas_atmphys_constants.o \ mpas_atmphys_utilities.o -mpas_atmphys_driver_seaice.o: \ - mpas_atmphys_constants.o \ - mpas_atmphys_lsm_shared.o \ - mpas_atmphys_vars.o + + + + mpas_atmphys_todynamics.o: \ mpas_atmphys_constants.o \ @@ -210,7 +248,10 @@ mpas_atmphys_update.o: \ clean: $(RM) *.o *.mod *.f90 libphys.a ( cd physics_wrf; $(MAKE) clean ) - ( cd physics_mmm; $(MAKE) clean ) + ( if [ -d physics_mmm ]; then cd physics_mmm; $(MAKE) -f Makefile.mpas clean; fi; ) + ( cd physics_noahmp/drivers/mpas; $(MAKE) clean ) + ( cd physics_noahmp/src; $(MAKE) clean ) + ( cd physics_noahmp/utility; $(MAKE) clean ) ( cd physics_monan; $(MAKE) clean ) @# Certain systems with intel compilers generate *.i files @# This removes them during the clean process @@ -220,7 +261,7 @@ clean: $(RM) $@ $*.mod ifeq "$(GEN_F90)" "true" $(CPP) $(CPPFLAGS) $(COREDEF) $(HYDROSTATIC) $(CPPINCLUDES) $< > $*.f90 - $(FC) $(FFLAGS) -c $*.f90 $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_monan -I.. -I../../framework -I../../external/esmf_time_f90 + $(FC) $(FFLAGS) -c $*.f90 $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_monan -I./physics_noahmp -I./physics_noahmp/utility -I./physics_noahmp/drivers/mpas -I./physics_noahmp/src -I.. -I../../framework -I../../external/esmf_time_f90 else - $(FC) $(CPPFLAGS) $(COREDEF) $(HYDROSATIC) $(FFLAGS) -c $*.F $(CPPINCLUDES) $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_monan -I.. -I../../framework -I../../external/esmf_time_f90 + $(FC) $(CPPFLAGS) $(COREDEF) $(HYDROSATIC) $(FFLAGS) -c $*.F $(CPPINCLUDES) $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_monan -I./physics_noahmp -I./physics_noahmp/utility -I./physics_noahmp/drivers/mpas -I./physics_noahmp/src -I.. -I../../framework -I../../external/esmf_time_f90 endif diff --git a/src/core_atmosphere/physics/Registry_noahmp.xml b/src/core_atmosphere/physics/Registry_noahmp.xml new file mode 100644 index 000000000..2e489d442 --- /dev/null +++ b/src/core_atmosphere/physics/Registry_noahmp.xml @@ -0,0 +1,624 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/core_atmosphere/physics/ccpp_kind_types.F b/src/core_atmosphere/physics/ccpp_kind_types.F new file mode 100644 index 000000000..cdc75ccfa --- /dev/null +++ b/src/core_atmosphere/physics/ccpp_kind_types.F @@ -0,0 +1,4 @@ +module ccpp_kind_types + use mpas_kind_types,only: kind_phys => RKIND, kind_phys8 => R8KIND + contains +end module ccpp_kind_types diff --git a/src/core_atmosphere/physics/ccpp_kinds.F b/src/core_atmosphere/physics/ccpp_kinds.F deleted file mode 100644 index af633a84e..000000000 --- a/src/core_atmosphere/physics/ccpp_kinds.F +++ /dev/null @@ -1,4 +0,0 @@ -module ccpp_kinds - use mpas_kind_types,only: kind_phys => RKIND - contains -end module ccpp_kinds diff --git a/src/core_atmosphere/physics/checkout_data_files.sh b/src/core_atmosphere/physics/checkout_data_files.sh index 55043fee7..b5ad45bce 100755 --- a/src/core_atmosphere/physics/checkout_data_files.sh +++ b/src/core_atmosphere/physics/checkout_data_files.sh @@ -23,7 +23,7 @@ ################################################################################ -mpas_vers="8.0" +mpas_vers="8.2" github_org="MPAS-Dev" # GitHub organization where the MPAS-Data repository is found. # For physics development, it can be helpful for a developer diff --git a/src/core_atmosphere/physics/mpas_atmphys_control.F b/src/core_atmosphere/physics/mpas_atmphys_control.F index e45ac699a..f88778032 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_control.F +++ b/src/core_atmosphere/physics/mpas_atmphys_control.F @@ -72,10 +72,17 @@ module mpas_atmphys_control ! * modified logic in subroutine physics_tables_init so that the Thompson microphysics tables are read in each ! MPI task. ! Laura D. Fowler (laura@ucar.edu) / 2016-12-30. +! * added the option mp_thompson_aerosols. +! Laura D. Fowler (laura@ucar.edu) / 2018-01-31. ! * added the option sf_monin_obukhov_rev to run the revised surface layer scheme with the YSU PBL scheme. ! Laura D. Fowler (laura@ucar.edu) / 2023-05-15. ! * replaced the option "noah" with "sf_noah" to run the NOAH land surface scheme. ! Laura D. Fowler (laura@ucar.edu) / 2022-02-18. +! * added the option "sf_noahmp" to run the NOAH-MP land surface scheme. +! Laura D. Fowler (laura@ucar.edu) / 2022-07-15. +! * in the mesoscale_reference suite, replaced the MM5 surface layer scheme with the MM5 revised surface layer +! scheme as the default option for config_sfclayer_scheme. +! Laura D. Fowler (laura@ucar.edu) / 2024-06-18. contains @@ -130,7 +137,7 @@ subroutine physics_namelist_check(configs) if (trim(config_radt_lw_scheme) == 'suite') config_radt_lw_scheme = 'rrtmg_lw' if (trim(config_radt_sw_scheme) == 'suite') config_radt_sw_scheme = 'rrtmg_sw' if (trim(config_radt_cld_scheme) == 'suite') config_radt_cld_scheme = 'cld_fraction' - if (trim(config_sfclayer_scheme) == 'suite') config_sfclayer_scheme = 'sf_monin_obukhov' + if (trim(config_sfclayer_scheme) == 'suite') config_sfclayer_scheme = 'sf_monin_obukhov_rev' if (trim(config_lsm_scheme) == 'suite') config_lsm_scheme = 'sf_noah' else if (trim(config_physics_suite) == 'convection_permitting') then @@ -168,6 +175,7 @@ subroutine physics_namelist_check(configs) if (trim(config_radt_cld_scheme) == 'suite') config_radt_cld_scheme = 'cld_fraction_monan' if (trim(config_sfclayer_scheme) == 'suite') config_sfclayer_scheme = 'sf_mynn' if (trim(config_lsm_scheme) == 'suite') config_lsm_scheme = 'sf_noah' + else if (trim(config_physics_suite) == 'none') then if (trim(config_microp_scheme) == 'suite') config_microp_scheme = 'off' @@ -189,12 +197,13 @@ subroutine physics_namelist_check(configs) end if !cloud microphysics scheme: - if(.not. (config_microp_scheme .eq. 'off' .or. & - config_microp_scheme .eq. 'mp_kessler' .or. & - config_microp_scheme .eq. 'mp_thompson' .or. & + if(.not. (config_microp_scheme .eq. 'off' .or. & + config_microp_scheme .eq. 'mp_kessler' .or. & + config_microp_scheme .eq. 'mp_thompson' .or. & + config_microp_scheme .eq. 'mp_thompson_aerosols' .or. & config_microp_scheme .eq. 'mp_wsm6')) then - write(mpas_err_message,'(A,A10)') 'illegal value for config_microp_scheme:', & + write(mpas_err_message,'(A,A20)') 'illegal value for config_microp_scheme:', & trim(config_microp_scheme) call physics_error_fatal(mpas_err_message) @@ -208,7 +217,7 @@ subroutine physics_namelist_check(configs) config_convection_scheme .eq. 'cu_tiedtke' .or. & config_convection_scheme .eq. 'cu_ntiedtke')) then - write(mpas_err_message,'(A,A10)') 'illegal value for config_convection_scheme: ', & + write(mpas_err_message,'(A,A20)') 'illegal value for config_convection_scheme: ', & trim(config_convection_scheme) call physics_error_fatal(mpas_err_message) @@ -219,7 +228,7 @@ subroutine physics_namelist_check(configs) config_pbl_scheme .eq. 'bl_mynn' .or. & config_pbl_scheme .eq. 'bl_ysu')) then - write(mpas_err_message,'(A,A10)') 'illegal value for pbl_scheme: ', & + write(mpas_err_message,'(A,A20)') 'illegal value for pbl_scheme: ', & trim(config_pbl_scheme) call physics_error_fatal(mpas_err_message) @@ -229,7 +238,7 @@ subroutine physics_namelist_check(configs) if(.not. (config_gwdo_scheme .eq. 'off' .or. & config_gwdo_scheme .eq. 'bl_ysu_gwdo')) then - write(mpas_err_message,'(A,A10)') 'illegal value for gwdo_scheme: ', & + write(mpas_err_message,'(A,A20)') 'illegal value for gwdo_scheme: ', & trim(config_gwdo_scheme) call physics_error_fatal(mpas_err_message) @@ -240,7 +249,7 @@ subroutine physics_namelist_check(configs) config_radt_lw_scheme .eq. 'cam_lw' .or. & config_radt_lw_scheme .eq. 'rrtmg_lw')) then - write(mpas_err_message,'(A,A10)') 'illegal value for longwave radiation scheme: ', & + write(mpas_err_message,'(A,A20)') 'illegal value for longwave radiation scheme: ', & trim(config_radt_lw_scheme) call physics_error_fatal(mpas_err_message) @@ -251,7 +260,7 @@ subroutine physics_namelist_check(configs) config_radt_sw_scheme .eq. 'cam_sw' .or. & config_radt_sw_scheme .eq. 'rrtmg_sw')) then - write(mpas_err_message,'(A,A10)') 'illegal value for shortwave radiation _scheme: ', & + write(mpas_err_message,'(A,A20)') 'illegal value for shortwave radiation _scheme: ', & trim(config_radt_sw_scheme) call physics_error_fatal(mpas_err_message) @@ -261,10 +270,10 @@ subroutine physics_namelist_check(configs) if(.not. (config_radt_cld_scheme .eq. 'off' .or. & config_radt_cld_scheme .eq. 'cld_incidence' .or. & config_radt_cld_scheme .eq. 'cld_fraction' .or. & - config_radt_cld_scheme .eq. 'cld_fraction_thompson' .or. & + config_radt_cld_scheme .eq. 'cld_fraction_thompson'.or. & config_radt_cld_scheme .eq. 'cld_fraction_monan')) then - write(mpas_err_message,'(A,A10)') 'illegal value for calculation of cloud fraction: ', & + write(mpas_err_message,'(A,A20)') 'illegal value for calculation of cloud fraction: ', & trim(config_radt_cld_scheme) call physics_error_fatal(mpas_err_message) @@ -273,10 +282,10 @@ subroutine physics_namelist_check(configs) (config_radt_sw_scheme.ne.'off' .and. config_radt_cld_scheme.eq.'off')) then call mpas_log_write('') - write(mpas_err_message,'(A,A10)') & + write(mpas_err_message,'(A,A20)') & ' config_radt_cld_scheme is not set for radiation calculation' call physics_message(mpas_err_message) - write(mpas_err_message,'(A,A10)') & + write(mpas_err_message,'(A,A20)') & ' switch calculation of cloud fraction to config_radt_cld_scheme = cld_incidence' call physics_message(mpas_err_message) config_radt_cld_scheme = "cld_incidence" @@ -289,7 +298,7 @@ subroutine physics_namelist_check(configs) config_sfclayer_scheme .eq. 'sf_monin_obukhov' .or. & config_sfclayer_scheme .eq. 'sf_monin_obukhov_rev')) then - write(mpas_err_message,'(A,A10)') 'illegal value for surface layer scheme: ', & + write(mpas_err_message,'(A,A20)') 'illegal value for surface layer scheme: ', & trim(config_sfclayer_scheme) call physics_error_fatal(mpas_err_message) else @@ -298,7 +307,7 @@ subroutine physics_namelist_check(configs) elseif(config_pbl_scheme == 'bl_ysu') then if(config_sfclayer_scheme /= 'sf_monin_obukhov' .and. & config_sfclayer_scheme /= 'sf_monin_obukhov_rev') then - write(mpas_err_message,'(A,A10)') 'wrong choice for surface layer scheme with YSU PBL: ', & + write(mpas_err_message,'(A,A20)') 'wrong choice for surface layer scheme with YSU PBL: ', & trim(config_sfclayer_scheme) call physics_error_fatal(mpas_err_message) endif @@ -312,10 +321,11 @@ subroutine physics_namelist_check(configs) call physics_error_fatal('land surface scheme: ' // & 'set config_sfclayer_scheme different than off') - elseif(.not. (config_lsm_scheme .eq. 'off ' .or. & - config_lsm_scheme .eq. 'sf_noah')) then + elseif(.not. (config_lsm_scheme .eq. 'off ' .or. & + config_lsm_scheme .eq. 'sf_noah' .or. & + config_lsm_scheme .eq. 'sf_noahmp')) then - write(mpas_err_message,'(A,A10)') 'illegal value for land surface scheme: ', & + write(mpas_err_message,'(A,A20)') 'illegal value for land surface scheme: ', & trim(config_lsm_scheme) call physics_error_fatal(mpas_err_message) @@ -384,7 +394,7 @@ subroutine physics_registry_init(mesh,configs,sfc_input) lsm_select: select case(trim(config_lsm_scheme)) - case("sf_noah") + case("sf_noah","sf_noahmp") !initialize the thickness of the soil layers for the Noah scheme: do iCell = 1, nCells dzs(1,iCell) = 0.10_RKIND @@ -423,7 +433,8 @@ subroutine physics_tables_init(dminfo,configs) if(dminfo % my_proc_id == IO_NODE) then call mpas_pool_get_config(configs,'config_microp_scheme',config_microp_scheme) - if(config_microp_scheme /= "mp_thompson") return + if(config_microp_scheme /= "mp_thompson" .or. & + config_microp_scheme /= "mp_thompson_aerosols") return l_qr_acr_qg = .false. l_qr_acr_qs = .false. diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver.F b/src/core_atmosphere/physics/mpas_atmphys_driver.F index 58f98e5c7..65160da3a 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver.F @@ -14,6 +14,7 @@ module mpas_atmphys_driver use mpas_atmphys_driver_convection use mpas_atmphys_driver_gwdo use mpas_atmphys_driver_lsm + use mpas_atmphys_driver_lsm_noahmp use mpas_atmphys_driver_pbl use mpas_atmphys_driver_radiation_lw use mpas_atmphys_driver_radiation_sw @@ -115,9 +116,12 @@ end subroutine halo_exchange_routine ! * modified call to driver_cloudiness to accomodate the calculation of the cloud fraction with the Thompson ! cloud microphysics scheme. ! Laura D. Fowler (laura@ucar.edu) / 2016-06-04. +! * added call to the Noah-MP land surface scheme. +! Laura D. Fowler (laura@ucar.edu) / 2024-03-11. ! * Added call to boundary layer mixing for 'extras' scalars (see routine driver_pbl_scalars) ! Saulo R. Freitas (saulo.freitas@inpe.br) / 2024-09-19 + contains @@ -134,13 +138,15 @@ subroutine physics_driver(domain,itimestep,xtime_s,exchange_halo_group) type(domain_type),intent(inout):: domain !local pointers: - type(mpas_pool_type),pointer:: configs, & - mesh, & - state, & - diag, & - diag_physics, & - tend_physics, & - atm_input, & + type(mpas_pool_type),pointer:: configs, & + mesh, & + state, & + diag, & + diag_physics, & + diag_physics_noahmp, & + output_noahmp, & + tend_physics, & + atm_input, & sfc_input logical,pointer:: config_frac_seaice @@ -194,18 +200,20 @@ subroutine physics_driver(domain,itimestep,xtime_s,exchange_halo_group) block => domain % blocklist do while(associated(block)) - call mpas_pool_get_subpool(block%structs,'mesh' ,mesh ) - call mpas_pool_get_subpool(block%structs,'state' ,state ) - call mpas_pool_get_subpool(block%structs,'diag' ,diag ) - call mpas_pool_get_subpool(block%structs,'diag_physics',diag_physics) - call mpas_pool_get_subpool(block%structs,'atm_input' ,atm_input ) - call mpas_pool_get_subpool(block%structs,'sfc_input' ,sfc_input ) - call mpas_pool_get_subpool(block%structs,'tend_physics',tend_physics) + call mpas_pool_get_subpool(block%structs,'mesh' ,mesh ) + call mpas_pool_get_subpool(block%structs,'state' ,state ) + call mpas_pool_get_subpool(block%structs,'diag' ,diag ) + call mpas_pool_get_subpool(block%structs,'diag_physics' ,diag_physics ) + call mpas_pool_get_subpool(block%structs,'diag_physics_noahmp',diag_physics_noahmp) + call mpas_pool_get_subpool(block%structs,'output_noahmp' ,output_noahmp ) + call mpas_pool_get_subpool(block%structs,'atm_input' ,atm_input ) + call mpas_pool_get_subpool(block%structs,'sfc_input' ,sfc_input ) + call mpas_pool_get_subpool(block%structs,'tend_physics' ,tend_physics ) - call mpas_pool_get_dimension(block % dimensions, 'nThreads', nThreads) + call mpas_pool_get_dimension(block%dimensions, 'nThreads', nThreads) - call mpas_pool_get_dimension(block % dimensions, 'cellSolveThreadStart', cellSolveThreadStart) - call mpas_pool_get_dimension(block % dimensions, 'cellSolveThreadEnd', cellSolveThreadEnd) + call mpas_pool_get_dimension(block%dimensions, 'cellSolveThreadStart', cellSolveThreadStart) + call mpas_pool_get_dimension(block%dimensions, 'cellSolveThreadEnd', cellSolveThreadEnd) !allocate arrays shared by all physics parameterizations: call allocate_forall_physics(block%configs) @@ -291,15 +299,24 @@ subroutine physics_driver(domain,itimestep,xtime_s,exchange_halo_group) !call to land-surface scheme: if(config_lsm_scheme .ne. 'off') then - call allocate_lsm + if(config_lsm_scheme == 'sf_noah') then + call allocate_lsm !$OMP PARALLEL DO - do thread=1,nThreads - call driver_lsm(itimestep,block%configs,mesh,diag_physics,sfc_input, & - cellSolveThreadStart(thread), cellSolveThreadEnd(thread)) - end do + do thread=1,nThreads + call driver_lsm(itimestep,block%configs,mesh,diag_physics,sfc_input, & + cellSolveThreadStart(thread), cellSolveThreadEnd(thread)) + end do !$OMP END PARALLEL DO call deallocate_lsm + elseif(config_lsm_scheme == 'sf_noahmp') then + do thread=1,nThreads + call driver_lsm_noahmp(block%configs,mesh,state,time_lev,diag,diag_physics, & + diag_physics_noahmp,output_noahmp,sfc_input,itimestep, & + cellSolveThreadStart(thread),cellSolveThreadEnd(thread)) + enddo + endif + call allocate_seaice !$OMP PARALLEL DO do thread=1,nThreads diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F index ee088ac3f..6b3e4e46a 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F @@ -15,7 +15,7 @@ module mpas_atmphys_driver_cloudiness use mpas_atmphys_vars use module_mp_thompson_cldfra3 use module_mp_cldfra_cb, only: calc_cldfraction_monan - + implicit none private public:: allocate_cloudiness, & @@ -89,6 +89,7 @@ subroutine deallocate_cloudiness if(allocated(qcrad_p) ) deallocate(qcrad_p ) if(allocated(qirad_p) ) deallocate(qirad_p ) if(allocated(qsrad_p) ) deallocate(qsrad_p ) + if(allocated(zgrid_p) ) deallocate(zgrid_p ) if(allocated(kpbl_p) ) deallocate(kpbl_p ) if(allocated(rupmfxcu_p)) deallocate(rupmfxcu_p) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_convection.F b/src/core_atmosphere/physics/mpas_atmphys_driver_convection.F index 94e86c327..9ca61fe2a 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_convection.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_convection.F @@ -114,7 +114,7 @@ end subroutine halo_exchange_routine ! Laura D. Fowler (laura@ucar.edu) / 2016-10-18. ! * since we removed the local variable convection_scheme from mpas_atmphys_vars.F, now defines convection_scheme ! as a pointer to config_convection_scheme. -! Laura D. Fowler (laura@ucar.edu) / 2917-02-16. +! Laura D. Fowler (laura@ucar.edu) / 2017-02-16. ! * removed f_qv,f_qr,and f_qs in the calls to cu_tiedtke and cu_ntiedtke. removed f_qv and f_qc in the call to ! kf_eta_cps. ! Laura D. Fowler (laura@ucar.edu) / 2024-02-13. @@ -198,9 +198,9 @@ subroutine allocate_convection(configs) if(.not.allocated(rtopshcu_p) ) allocate(rtopshcu_p(ims:ime,jms:jme) ) if(.not.allocated(rbotdpcu_p) ) allocate(rbotdpcu_p(ims:ime,jms:jme) ) if(.not.allocated(v2d1_p) ) allocate(v2d1_p(ims:ime,jms:jme) ) - if(.not.allocated(v2d2_p) ) allocate(v2d2_p(ims:ime,jms:jme) ) - if(.not.allocated(lightn_dens_p) ) allocate(lightn_dens_p(ims:ime,jms:jme) ) - if(.not.allocated(sigma_deep_p) ) allocate(sigma_deep_p(ims:ime,jms:jme) ) + if(.not.allocated(v2d2_p) ) allocate(v2d2_p(ims:ime,jms:jme) ) + if(.not.allocated(lightn_dens_p) ) allocate(lightn_dens_p(ims:ime,jms:jme) ) + if(.not.allocated(sigma_deep_p) ) allocate(sigma_deep_p(ims:ime,jms:jme) ) if(.not.allocated(rthblten_p) ) allocate(rthblten_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(rthdynten_p) ) allocate(rthdynten_p(ims:ime,kms:kme,jms:jme)) @@ -212,8 +212,8 @@ subroutine allocate_convection(configs) if(.not.allocated(rucuten_p) ) allocate(rucuten_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(rvcuten_p) ) allocate(rvcuten_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(rcnvcfcuten_p) ) allocate(rcnvcfcuten_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(rbuoyxcuten_p) ) allocate(rbuoyxcuten_p(ims:ime,kms:kme,jms:jme)) - + if(.not.allocated(rbuoyxcuten_p) ) allocate(rbuoyxcuten_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(tkepbl_p) ) allocate(tkepbl_p (ims:ime,kms:kme,jms:jme) ) if(.not.allocated(elpbl_p) ) allocate(elpbl_p (ims:ime,kms:kme,jms:jme) ) if(.not.allocated(rupmfxcu_p) ) allocate(rupmfxcu_p(ims:ime,kms:kme,jms:jme) ) @@ -329,7 +329,7 @@ subroutine allocate_convection(configs) if(.not.allocated(area_p) ) allocate(area_p(ims:ime,jms:jme) ) if(.not.allocated(nca_p) ) allocate(nca_p(ims:ime,jms:jme) ) if(.not.allocated(cubot_p) ) allocate(cubot_p(ims:ime,jms:jme) ) - if(.not.allocated(cutop_p) ) allocate(cutop_p(ims:ime,jms:jme) ) + if(.not.allocated(cutop_p) ) allocate(cutop_p(ims:ime,jms:jme) ) if(.not.allocated(w0avg_p) ) allocate(w0avg_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(rqrcuten_p) ) allocate(rqrcuten_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(rqscuten_p) ) allocate(rqscuten_p(ims:ime,kms:kme,jms:jme)) @@ -490,9 +490,9 @@ subroutine deallocate_convection(configs) if(allocated(rtopshcu_p) ) deallocate(rtopshcu_p ) if(allocated(rbotdpcu_p) ) deallocate(rbotdpcu_p ) if(allocated(v2d1_p) ) deallocate(v2d1_p ) - if(allocated(v2d2_p) ) deallocate(v2d2_p ) - if(allocated(lightn_dens_p) ) deallocate(lightn_dens_p ) - if(allocated(sigma_deep_p) ) deallocate(sigma_deep_p ) + if(allocated(v2d2_p) ) deallocate(v2d2_p ) + if(allocated(lightn_dens_p) ) deallocate(lightn_dens_p ) + if(allocated(sigma_deep_p) ) deallocate(sigma_deep_p ) if(allocated(rthblten_p) ) deallocate(rthblten_p ) if(allocated(rthdynten_p) ) deallocate(rthdynten_p ) @@ -521,7 +521,7 @@ subroutine deallocate_convection(configs) if(allocated(area_p) ) deallocate(area_p ) if(allocated(nca_p) ) deallocate(nca_p ) if(allocated(cubot_p) ) deallocate(cubot_p ) - if(allocated(cutop_p) ) deallocate(cutop_p ) + if(allocated(cutop_p) ) deallocate(cutop_p ) if(allocated(w0avg_p) ) deallocate(w0avg_p ) if(allocated(rqrcuten_p) ) deallocate(rqrcuten_p ) if(allocated(rqscuten_p) ) deallocate(rqscuten_p ) @@ -714,28 +714,28 @@ subroutine driver_convection(itimestep,configs,mesh,sfc_input,diag_physics,tend_ kpbl = kpbl_p , tke_pbl = tkepbl_p , & turb_len_scale = elpbl_p , & buoyx = buoyx_p , cnvcf = cnvcf_p , & - rthblten = rthblten_p , rqvblten = rqvblten_p , & + rthblten = rthblten_p , rqvblten = rqvblten_p , & rthratenlw = rthratenlw_p , rthratensw = rthratensw_p , & - rthdyten = rthdynten_p , rqvdyten = rqvdynten_p , & + rthdyten = rthdynten_p , rqvdyten = rqvdynten_p , & raincv = raincv_p , conprr = pratec_p , & lightn_dens = lightn_dens_p , sigma_deep = sigma_deep_p , & - rthcuten = rthcuten_p , rqvcuten = rqvcuten_p , & + rthcuten = rthcuten_p , rqvcuten = rqvcuten_p , & rqccuten = rqccuten_p , rqicuten = rqicuten_p , & rucuten = rucuten_p , rvcuten = rvcuten_p , & rbuoyxcuten = rbuoyxcuten_p , rcnvcfcuten = rcnvcfcuten_p , & - sub3d_rthcuten = sub3d_rthcuten_p , sub3d_rqvcuten= sub3d_rqvcuten_p, & + sub3d_rthcuten = sub3d_rthcuten_p , sub3d_rqvcuten= sub3d_rqvcuten_p, & sub3d_rucuten = sub3d_rucuten_p , sub3d_rvcuten = sub3d_rvcuten_p , & rupmfxcu = rupmfxcu_p , rdnmfxcu = rdnmfxcu_p , & - rmfxdpcu = rmfxdpcu_p , rmfxdncu = rmfxdncu_p , & + rmfxdpcu = rmfxdpcu_p , rmfxdncu = rmfxdncu_p , & rmfxmdcu = rmfxmdcu_p , & rmfxshcu = rmfxshcu_p , rtopdpcu = rtopdpcu_p , & rtopmdcu = rtopmdcu_p , rtopshcu = rtopshcu_p , & rbotdpcu = rbotdpcu_p , & - var2d1 = v2d1_p , var2d2 = v2d2_p , & + var2d1 = v2d1_p , var2d2 = v2d2_p , & var3d1 = v3d1_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kds , kme = kme , & @@ -947,6 +947,7 @@ subroutine convection_from_MPAS(dt_dyn,configs,mesh,sfc_input,diag_physics,tend_ enddo enddo end if + convection_select: select case(convection_scheme) case ("cu_gf_monan") @@ -1211,7 +1212,8 @@ subroutine convection_from_MPAS(dt_dyn,configs,mesh,sfc_input,diag_physics,tend_ end subroutine convection_from_MPAS !================================================================================================================= - subroutine convection_to_MPAS(configs,mesh,diag_physics,tend_physics,its,ite,exchange_halo_group,block) + subroutine convection_to_MPAS(configs,mesh,diag_physics,tend_physics,its,ite,& + exchange_halo_group,block) !================================================================================================================= !input arguments: @@ -1375,6 +1377,7 @@ subroutine convection_to_MPAS(configs,mesh,diag_physics,tend_physics,its,ite,exc !-- part 2: broadcast the subsidence tendencies call exchange_halo_group(block % domain, 'physics:sub3d_cuten') + call exchange_halo_group(block % domain, 'physics:sigdiagten') !-- part 3: spread the subsidence tendencies to the 1st neighboors call mpas_pool_get_array(mesh, 'cellsOnCell', cellsOnCell) @@ -1587,6 +1590,7 @@ subroutine update_convection_step2(configs,mesh,sfc_input,diag_physics,tend_phys real(kind=RKIND),dimension(:),pointer:: xland real(kind=RKIND),dimension(:),pointer:: wlpool,vcpool,u_gustfront,v_gustfront +!local variables and arrays: real(kind=RKIND),dimension(:,:),pointer:: umcl,vmcl real(kind=RKIND),dimension(:,:),pointer:: rumcl real(kind=RKIND),dimension(:,:),pointer:: zgrid,rh @@ -1611,6 +1615,7 @@ subroutine update_convection_step2(configs,mesh,sfc_input,diag_physics,tend_phys real(kind=RKIND):: vert_scale_diss,tau_cloud_diss,htopx,snk,src,tau_cp,denom real(kind=RKIND):: total_dz,H_env,gama,temp, rvap, press, qes, zlevel, dzrho, aux, MCL_speed + !----------------------------------------------------------------------------------------------------------------- call mpas_pool_get_config(configs,'config_bucket_rainc',bucket_rainc) @@ -1861,6 +1866,7 @@ subroutine update_convection_step2(configs,mesh,sfc_input,diag_physics,tend_phys case default end select convection_select + end subroutine update_convection_step2 !================================================================================================================= !-- alternative routine for "tend_toEdges" --! diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_lsm_noahmp.F b/src/core_atmosphere/physics/mpas_atmphys_driver_lsm_noahmp.F new file mode 100644 index 000000000..8bbec8991 --- /dev/null +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_lsm_noahmp.F @@ -0,0 +1,1094 @@ +! Copyright (c) 2013, Los Alamos National Security, LLC (LANS) +! and the University Corporation for Atmospheric Research (UCAR). +! +! Unless noted otherwise source code is licensed under the BSD license. +! Additional copyright and license information can be found in the LICENSE file +! distributed with this code, or at http://mpas-dev.github.com/license.html +! +!================================================================================================================= + module mpas_atmphys_driver_lsm_noahmp + use mpas_kind_types + use mpas_log + use mpas_pool_routines + use mpas_timer,only: mpas_timer_start, mpas_timer_stop + + use mpas_atmphys_constants,only: R_d,R_v + use mpas_atmphys_manager,only : year,curr_julday,month,day + use mpas_atmphys_vars,only : mpas_noahmp,xice_threshold + + + use NoahmpIOVarType + use NoahmpDriverMainMod,only: NoahmpDriverMain + + implicit none + private + public:: driver_lsm_noahmp + + + contains + + +!================================================================================================================= + subroutine lsm_noahmp_fromMPAS(configs,mesh,diag,diag_physics,diag_physics_noahmp,output_noahmp,sfc_input, & + state,time_lev,itimestep) +!================================================================================================================= + +!--- input arguments: + type(mpas_pool_type),intent(in):: configs + type(mpas_pool_type),intent(in):: mesh + type(mpas_pool_type),intent(in):: diag + type(mpas_pool_type),intent(in):: state + + integer,intent(in):: time_lev + integer,intent(in):: itimestep + + +!--- inout arguments: + type(mpas_pool_type),intent(in):: diag_physics + type(mpas_pool_type),intent(in):: diag_physics_noahmp + type(mpas_pool_type),intent(in):: output_noahmp + type(mpas_pool_type),intent(in):: sfc_input + + +!--- local variables and arrays: + logical,pointer:: do_restart + + character(len=StrKIND),pointer:: microp_scheme, & + convection_scheme + + integer:: i,its,ite + integer:: n,ns,nsoil,nsnow,nzsnow + integer,dimension(:),pointer:: isltyp,ivgtyp + + real(kind=RKIND),dimension(:),pointer:: latCell,lonCell + real(kind=RKIND),dimension(:),pointer:: shdmax,shdmin,vegfra,tmn,xice,xland + + real(kind=RKIND),dimension(:),pointer:: coszr,glw,gsw,swddir,swddif + real(kind=RKIND),dimension(:),pointer:: graupelncv,raincv,rainncv,snowncv,sr + + +!--- local INOUT pointers (with generic LSM equivalent as defined in WRF): + real(kind=RKIND),dimension(:),pointer:: acsnom,acsnow,canwat,hfx,qfx,qsfc,lh,grdflx,sfc_albedo,sfc_emiss, & + sfcrunoff,skintemp,smstav,smstot,udrunoff,snow,snowc,snowh,lai,z0, & + znt + real(kind=RKIND),dimension(:,:),pointer:: sh2o,smois,tslb + + +!--- local INOUT pointers (with no Noah LSM equivalent as defined in WRF): + integer,dimension(:),pointer:: isnowxy + real(kind=RKIND),dimension(:),pointer:: tvxy,tgxy,canicexy,canliqxy,eahxy,tahxy,cmxy,chxy,fwetxy,sneqvoxy, & + alboldxy,qsnowxy,qrainxy,wslakexy,zwtxy,waxy,wtxy,deeprechxy, & + rechxy,lfmassxy,rtmassxy,stmassxy,woodxy,grainxy,gddxy,stblcpxy, & + fastcpxy,xsaixy,taussxy + real(kind=RKIND),dimension(:,:),pointer:: tsnoxy,zsnsoxy,snicexy,snliqxy + + +!--- local OUT pointers (with no Noah LSM equivalent as defined in WRF): + real(kind=RKIND),dimension(:),pointer:: t2mvxy,t2mbxy,q2mvxy,q2mbxy,tradxy,neexy,gppxy,nppxy,fvegxy,runsfxy, & + runsbxy,ecanxy,edirxy,etranxy,fsaxy,firaxy,aparxy,psnxy,savxy,sagxy, & + rssunxy,rsshaxy,bgapxy,wgapxy,tgvxy,tgbxy,chvxy,chbxy,shgxy,shcxy, & + shbxy,evgxy,evbxy,ghvxy,ghbxy,irgxy,ircxy,irbxy,trxy,evcxy,chleafxy, & + chucxy,chv2xy,chb2xy,rs,qtdrain + + +!--- local OUT additional variables: + real(kind=RKIND),dimension(:),pointer:: pahxy,pahgxy,pahbxy,pahvxy,qintsxy,qintrxy,qdripsxy,qdriprxy, & + qthrosxy,qthrorxy,qsnsubxy,qmeltxy,qsnfroxy,qsubcxy,qfrocxy, & + qevacxy,qdewcxy,qfrzcxy,qmeltcxy,qsnbotxy,pondingxy,fpicexy, & + rainlsm,snowlsm,forctlsm,forcqlsm,forcplsm,forczlsm,forcwlsm, & + acc_ssoilxy,acc_qinsurxy,acc_qsevaxy,eflxbxy,soilenergy,snowenergy, & + canhsxy,acc_dwaterxy,acc_prcpxy,acc_ecanxy,acc_etranxy,acc_edirxy + real(kind=RKIND),dimension(:,:),pointer:: acc_etranixy + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write('--- enter subroutine lsm_noahmp_fromMPAS: itimestep = $i',intArgs=(/itimestep/)) + + call mpas_pool_get_config(configs,'config_do_restart',do_restart) + + call mpas_pool_get_config(configs,'config_convection_scheme',convection_scheme) + call mpas_pool_get_config(configs,'config_microp_scheme' ,microp_scheme ) + + +!--- initialization of local dimensions: + its = mpas_noahmp%its + ite = mpas_noahmp%ite + nsoil = mpas_noahmp%nsoil + nsnow = mpas_noahmp%nsnow + nzsnow = nsnow + nsoil + + +!--- initialization of time-varying variables: + mpas_noahmp%restart_flag = do_restart + + mpas_noahmp%soiltstep = 0 + mpas_noahmp%itimestep = itimestep + mpas_noahmp%yr = year + mpas_noahmp%month = month + mpas_noahmp%day = day + mpas_noahmp%julian = curr_julday + + +!--- initialization of xice_threshold: + mpas_noahmp%xice_threshold = xice_threshold + + +!--- initialization of INPUT surface variables: + call mpas_pool_get_array(sfc_input,'shdmax',shdmax) + call mpas_pool_get_array(sfc_input,'shdmin',shdmin) + call mpas_pool_get_array(sfc_input,'vegfra',vegfra) + call mpas_pool_get_array(sfc_input,'tmn' ,tmn ) + call mpas_pool_get_array(sfc_input,'xice' ,xice ) + call mpas_pool_get_array(sfc_input,'xland' ,xland ) + + call mpas_pool_get_array(diag_physics,'coszr' ,coszr ) + call mpas_pool_get_array(diag_physics,'glw' ,glw ) + call mpas_pool_get_array(diag_physics,'gsw' ,gsw ) + call mpas_pool_get_array(diag_physics,'sfc_albedo',sfc_albedo) + call mpas_pool_get_array(diag_physics,'swddir' ,swddir ) + call mpas_pool_get_array(diag_physics,'swddif' ,swddif ) + call mpas_pool_get_array(diag_physics,'sr' ,sr ) + call mpas_pool_get_array(diag_physics,'raincv' ,raincv ) + call mpas_pool_get_array(diag_physics,'rainncv' ,rainncv ) + call mpas_pool_get_array(diag_physics,'snowncv' ,snowncv ) + call mpas_pool_get_array(diag_physics,'graupelncv',graupelncv) + + do i = its,ite + mpas_noahmp%coszen(i) = coszr(i) + mpas_noahmp%gvfmax(i) = shdmax(i) + mpas_noahmp%gvfmin(i) = shdmin(i) + mpas_noahmp%vegfra(i) = vegfra(i) + mpas_noahmp%tmn(i) = tmn(i) + mpas_noahmp%xland(i) = xland(i) + mpas_noahmp%xice(i) = xice(i) + mpas_noahmp%swdown(i) = gsw(i) / (1.-sfc_albedo(i)) + mpas_noahmp%swddir(i) = swddir(i) + mpas_noahmp%swddif(i) = swddif(i) + mpas_noahmp%glw(i) = glw(i) + mpas_noahmp%rainbl(i) = 0. + mpas_noahmp%snowbl(i) = 0. + mpas_noahmp%rainshv(i) = 0. + mpas_noahmp%hailncv(i) = 0. + mpas_noahmp%mp_hail(i) = 0. + mpas_noahmp%mp_shcv(i) = 0. + mpas_noahmp%seaice(i) = 0. + enddo + +!--- calculation of the instantaneous precipitation rates of rain and snow: + if(microp_scheme .ne. 'off') then + do i = its,ite + mpas_noahmp%sr(i) = sr(i) + mpas_noahmp%rainncv(i) = rainncv(i) + mpas_noahmp%snowncv(i) = snowncv(i) + mpas_noahmp%graupelncv(i) = graupelncv(i) + mpas_noahmp%rainbl(i) = mpas_noahmp%rainbl(i) + mpas_noahmp%rainncv(i) + mpas_noahmp%snowbl(i) = mpas_noahmp%snowbl(i) + mpas_noahmp%snowncv(i) + + mpas_noahmp%mp_rainnc(i) = rainncv(i) + mpas_noahmp%mp_snow(i) = snowncv(i) + mpas_noahmp%mp_graup(i) = graupelncv(i) + enddo + else + do i = its,ite + mpas_noahmp%sr(i) = 0. + mpas_noahmp%rainncv(i) = 0. + mpas_noahmp%snowncv(i) = 0. + mpas_noahmp%graupelncv(i) = 0. + + mpas_noahmp%mp_rainnc(i) = 0. + mpas_noahmp%mp_snow(i) = 0. + mpas_noahmp%mp_graup(i) = 0. + enddo + endif + if(convection_scheme .ne. 'off') then + do i = its,ite + mpas_noahmp%raincv(i) = raincv(i) + mpas_noahmp%rainbl(i) = mpas_noahmp%rainbl(i) + mpas_noahmp%raincv(i) + mpas_noahmp%raincv(i) = raincv(i) + + mpas_noahmp%mp_rainc(i) = raincv(i) + enddo + else + do i = its,ite + mpas_noahmp%raincv(i) = 0. + mpas_noahmp%mp_rainc(i) = 0. + enddo + endif + +!--- calculation of the incidence of fractional seaice: + do i = its,ite + mpas_noahmp%seaice(i) = 0. + if(mpas_noahmp%xice(i) .ge. xice_threshold) mpas_noahmp%seaice(i) = 1. + enddo + + +!--- initialization of INPUT sounding variables: + call lsm_noahmp_sounding_fromMPAS(mesh,state,time_lev,diag) + + +!--- initialization of INOUT variables (with generic LSM equivalent as defined in WRF), i.e. +! see lines 162-184 in module NoahmpIOVarType.F90): + call mpas_pool_get_array(sfc_input,'skintemp',skintemp) + call mpas_pool_get_array(sfc_input,'snowc' ,snowc ) + call mpas_pool_get_array(sfc_input,'snow' ,snow ) + call mpas_pool_get_array(sfc_input,'snowh' ,snowh ) + call mpas_pool_get_array(sfc_input,'sh2o' ,sh2o ) + call mpas_pool_get_array(sfc_input,'smois' ,smois ) + call mpas_pool_get_array(sfc_input,'tslb' ,tslb ) + + call mpas_pool_get_array(diag_physics,'hfx' ,hfx ) + call mpas_pool_get_array(diag_physics,'qfx' ,qfx ) + call mpas_pool_get_array(diag_physics,'lh ' ,lh ) + call mpas_pool_get_array(diag_physics,'grdflx' ,grdflx ) + call mpas_pool_get_array(diag_physics,'smstav' ,smstav ) + call mpas_pool_get_array(diag_physics,'smstot' ,smstot ) + call mpas_pool_get_array(diag_physics,'sfcrunoff' ,sfcrunoff ) + call mpas_pool_get_array(diag_physics,'udrunoff' ,udrunoff ) + call mpas_pool_get_array(diag_physics,'canwat' ,canwat ) + call mpas_pool_get_array(diag_physics,'acsnom' ,acsnom ) + call mpas_pool_get_array(diag_physics,'acsnow' ,acsnow ) + call mpas_pool_get_array(diag_physics,'sfc_emiss' ,sfc_emiss ) + call mpas_pool_get_array(diag_physics,'qsfc' ,qsfc ) + call mpas_pool_get_array(diag_physics,'lai' ,lai ) + call mpas_pool_get_array(diag_physics,'z0' ,z0 ) + call mpas_pool_get_array(diag_physics,'znt' ,znt ) + + + do i = its,ite + mpas_noahmp%tsk(i) = skintemp(i) + mpas_noahmp%hfx(i) = hfx(i) + mpas_noahmp%qfx(i) = qfx(i) + mpas_noahmp%lh(i) = lh(i) + mpas_noahmp%grdflx(i) = grdflx(i) + mpas_noahmp%smstav(i) = smstav(i) + mpas_noahmp%smstot(i) = smstot(i) + mpas_noahmp%sfcrunoff(i) = sfcrunoff(i) + mpas_noahmp%udrunoff(i) = udrunoff(i) + mpas_noahmp%albedo(i) = sfc_albedo(i) + mpas_noahmp%snowc(i) = snowc(i) + mpas_noahmp%snow(i) = snow(i) + mpas_noahmp%snowh(i) = snowh(i) + mpas_noahmp%canwat(i) = canwat(i) + mpas_noahmp%acsnom(i) = acsnom(i) + mpas_noahmp%acsnow(i) = acsnow(i) + mpas_noahmp%emiss(i) = sfc_emiss(i) + mpas_noahmp%qsfc(i) = qsfc(i) + mpas_noahmp%lai(i) = lai(i) + mpas_noahmp%z0(i) = z0(i) + mpas_noahmp%znt(i) = znt(i) + enddo + + do ns = 1,nsoil + do i = its,ite + mpas_noahmp%sh2o(i,ns) = sh2o(ns,i) + mpas_noahmp%smois(i,ns) = smois(ns,i) + mpas_noahmp%tslb(i,ns) = tslb(ns,i) + enddo + enddo + + +!--- initialization of INOUT variables (with no Noah LSM equivalent as defined in WRF), i.e. +! see lines 186-222 in module NoahmpIOVarType.F90: + call mpas_pool_get_array(diag_physics_noahmp,'isnowxy' ,isnowxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tvxy' ,tvxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tgxy' ,tgxy ) + call mpas_pool_get_array(diag_physics_noahmp,'canicexy' ,canicexy ) + call mpas_pool_get_array(diag_physics_noahmp,'canliqxy' ,canliqxy ) + call mpas_pool_get_array(diag_physics_noahmp,'eahxy' ,eahxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tahxy' ,tahxy ) + call mpas_pool_get_array(diag_physics_noahmp,'cmxy' ,cmxy ) + call mpas_pool_get_array(diag_physics_noahmp,'chxy' ,chxy ) + call mpas_pool_get_array(diag_physics_noahmp,'fwetxy' ,fwetxy ) + call mpas_pool_get_array(diag_physics_noahmp,'sneqvoxy' ,sneqvoxy ) + call mpas_pool_get_array(diag_physics_noahmp,'alboldxy' ,alboldxy ) + call mpas_pool_get_array(diag_physics_noahmp,'qsnowxy' ,qsnowxy ) + call mpas_pool_get_array(diag_physics_noahmp,'qrainxy' ,qrainxy ) + call mpas_pool_get_array(diag_physics_noahmp,'wslakexy' ,wslakexy ) + call mpas_pool_get_array(diag_physics_noahmp,'zwtxy' ,zwtxy ) + call mpas_pool_get_array(diag_physics_noahmp,'waxy' ,waxy ) + call mpas_pool_get_array(diag_physics_noahmp,'wtxy' ,wtxy ) + call mpas_pool_get_array(diag_physics_noahmp,'deeprechxy',deeprechxy ) + call mpas_pool_get_array(diag_physics_noahmp,'rechxy' ,rechxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tsnoxy' ,tsnoxy ) + call mpas_pool_get_array(diag_physics_noahmp,'zsnsoxy' ,zsnsoxy ) + call mpas_pool_get_array(diag_physics_noahmp,'snicexy' ,snicexy ) + call mpas_pool_get_array(diag_physics_noahmp,'snliqxy' ,snliqxy ) + call mpas_pool_get_array(diag_physics_noahmp,'lfmassxy' ,lfmassxy ) + call mpas_pool_get_array(diag_physics_noahmp,'rtmassxy' ,rtmassxy ) + call mpas_pool_get_array(diag_physics_noahmp,'stmassxy' ,stmassxy ) + call mpas_pool_get_array(diag_physics_noahmp,'woodxy' ,woodxy ) + call mpas_pool_get_array(diag_physics_noahmp,'grainxy' ,grainxy ) + call mpas_pool_get_array(diag_physics_noahmp,'gddxy' ,gddxy ) + call mpas_pool_get_array(diag_physics_noahmp,'stblcpxy' ,stblcpxy ) + call mpas_pool_get_array(diag_physics_noahmp,'fastcpxy' ,fastcpxy ) + call mpas_pool_get_array(diag_physics_noahmp,'xsaixy' ,xsaixy ) + call mpas_pool_get_array(diag_physics_noahmp,'taussxy' ,taussxy ) + + do i = its,ite + mpas_noahmp%isnowxy(i) = isnowxy(i) + mpas_noahmp%tvxy(i) = tvxy(i) + mpas_noahmp%tgxy(i) = tgxy(i) + mpas_noahmp%canicexy(i) = canicexy(i) + mpas_noahmp%canliqxy(i) = canliqxy(i) + mpas_noahmp%eahxy(i) = eahxy(i) + mpas_noahmp%tahxy(i) = tahxy(i) + mpas_noahmp%cmxy(i) = cmxy(i) + mpas_noahmp%chxy(i) = chxy(i) + mpas_noahmp%fwetxy(i) = fwetxy(i) + mpas_noahmp%sneqvoxy(i) = sneqvoxy(i) + mpas_noahmp%alboldxy(i) = alboldxy(i) + mpas_noahmp%qsnowxy(i) = qsnowxy(i) + mpas_noahmp%qrainxy(i) = qrainxy(i) + mpas_noahmp%wslakexy(i) = wslakexy(i) + mpas_noahmp%zwtxy(i) = zwtxy(i) + mpas_noahmp%waxy(i) = waxy(i) + mpas_noahmp%wtxy(i) = wtxy(i) + mpas_noahmp%deeprechxy(i) = deeprechxy(i) + mpas_noahmp%rechxy(i) = rechxy(i) + mpas_noahmp%lfmassxy(i) = lfmassxy(i) + mpas_noahmp%rtmassxy(i) = rtmassxy(i) + mpas_noahmp%stmassxy(i) = stmassxy(i) + mpas_noahmp%woodxy(i) = woodxy(i) + mpas_noahmp%grainxy(i) = grainxy(i) + mpas_noahmp%gddxy(i) = gddxy(i) + mpas_noahmp%stblcpxy(i) = stblcpxy(i) + mpas_noahmp%fastcpxy(i) = fastcpxy(i) + mpas_noahmp%xsaixy(i) = xsaixy(i) + mpas_noahmp%taussxy(i) = taussxy(i) + enddo + + do ns = 1,nsnow + n = ns - nsnow + do i = its,ite + mpas_noahmp%tsnoxy(i,n) = tsnoxy(ns,i) + mpas_noahmp%snicexy(i,n) = snicexy(ns,i) + mpas_noahmp%snliqxy(i,n) = snliqxy(ns,i) + mpas_noahmp%zsnsoxy(i,n) = zsnsoxy(ns,i) + enddo + enddo + do ns = nsnow+1,nzsnow + n = ns - nsnow + do i = its,ite + mpas_noahmp%zsnsoxy(i,n) = zsnsoxy(ns,i) + enddo + enddo + + +!--- initialization of OUT (with no Noah LSM equivalent as defined in WRF), i.e. +! see lines 242-290 in module NoahmpIOVarType.F90): + call mpas_pool_get_array(output_noahmp,'t2mvxy' ,t2mvxy ) + call mpas_pool_get_array(output_noahmp,'t2mbxy' ,t2mbxy ) + call mpas_pool_get_array(output_noahmp,'q2mvxy' ,q2mvxy ) + call mpas_pool_get_array(output_noahmp,'q2mbxy' ,q2mbxy ) + call mpas_pool_get_array(output_noahmp,'tradxy' ,tradxy ) + call mpas_pool_get_array(output_noahmp,'neexy' ,neexy ) + call mpas_pool_get_array(output_noahmp,'gppxy' ,gppxy ) + call mpas_pool_get_array(output_noahmp,'nppxy' ,nppxy ) + call mpas_pool_get_array(output_noahmp,'fvegxy' ,fvegxy ) + call mpas_pool_get_array(output_noahmp,'runsfxy' ,runsfxy ) + call mpas_pool_get_array(output_noahmp,'runsbxy' ,runsbxy ) + call mpas_pool_get_array(output_noahmp,'ecanxy' ,ecanxy ) + call mpas_pool_get_array(output_noahmp,'edirxy' ,edirxy ) + call mpas_pool_get_array(output_noahmp,'etranxy' ,etranxy ) + call mpas_pool_get_array(output_noahmp,'fsaxy' ,fsaxy ) + call mpas_pool_get_array(output_noahmp,'firaxy' ,firaxy ) + call mpas_pool_get_array(output_noahmp,'aparxy' ,aparxy ) + call mpas_pool_get_array(output_noahmp,'psnxy' ,psnxy ) + call mpas_pool_get_array(output_noahmp,'savxy' ,savxy ) + call mpas_pool_get_array(output_noahmp,'sagxy' ,sagxy ) + call mpas_pool_get_array(output_noahmp,'rssunxy' ,rssunxy ) + call mpas_pool_get_array(output_noahmp,'rsshaxy' ,rsshaxy ) + call mpas_pool_get_array(output_noahmp,'bgapxy' ,bgapxy ) + call mpas_pool_get_array(output_noahmp,'wgapxy' ,wgapxy ) + call mpas_pool_get_array(output_noahmp,'tgvxy' ,tgvxy ) + call mpas_pool_get_array(output_noahmp,'tgbxy' ,tgbxy ) + call mpas_pool_get_array(output_noahmp,'chvxy' ,chvxy ) + call mpas_pool_get_array(output_noahmp,'chbxy' ,chbxy ) + call mpas_pool_get_array(output_noahmp,'shgxy' ,shgxy ) + call mpas_pool_get_array(output_noahmp,'shcxy' ,shcxy ) + call mpas_pool_get_array(output_noahmp,'shbxy' ,shbxy ) + call mpas_pool_get_array(output_noahmp,'evgxy' ,evgxy ) + call mpas_pool_get_array(output_noahmp,'evbxy' ,evbxy ) + call mpas_pool_get_array(output_noahmp,'ghvxy' ,ghvxy ) + call mpas_pool_get_array(output_noahmp,'ghbxy' ,ghbxy ) + call mpas_pool_get_array(output_noahmp,'irgxy' ,irgxy ) + call mpas_pool_get_array(output_noahmp,'ircxy' ,ircxy ) + call mpas_pool_get_array(output_noahmp,'irbxy' ,irbxy ) + call mpas_pool_get_array(output_noahmp,'trxy' ,trxy ) + call mpas_pool_get_array(output_noahmp,'evcxy' ,evcxy ) + call mpas_pool_get_array(output_noahmp,'chleafxy',chleafxy) + call mpas_pool_get_array(output_noahmp,'chucxy' ,chucxy ) + call mpas_pool_get_array(output_noahmp,'chv2xy' ,chv2xy ) + call mpas_pool_get_array(output_noahmp,'chb2xy' ,chb2xy ) + call mpas_pool_get_array(output_noahmp,'rs' ,rs ) + call mpas_pool_get_array(output_noahmp,'qtdrain',qtdrain ) + + do i = its,ite + mpas_noahmp%t2mvxy(i) = t2mvxy(i) + mpas_noahmp%t2mbxy(i) = t2mbxy(i) + mpas_noahmp%q2mvxy(i) = q2mvxy(i) + mpas_noahmp%q2mbxy(i) = q2mbxy(i) + mpas_noahmp%tradxy(i) = tradxy(i) + mpas_noahmp%neexy(i) = neexy(i) + mpas_noahmp%gppxy(i) = gppxy(i) + mpas_noahmp%nppxy(i) = nppxy(i) + mpas_noahmp%fvegxy(i) = fvegxy(i) + mpas_noahmp%runsfxy(i) = runsfxy(i) + mpas_noahmp%runsbxy(i) = runsbxy(i) + mpas_noahmp%ecanxy(i) = ecanxy(i) + mpas_noahmp%edirxy(i) = edirxy(i) + mpas_noahmp%etranxy(i) = etranxy(i) + mpas_noahmp%fsaxy(i) = fsaxy(i) + mpas_noahmp%firaxy(i) = firaxy(i) + mpas_noahmp%aparxy(i) = aparxy(i) + mpas_noahmp%psnxy(i) = psnxy(i) + mpas_noahmp%savxy(i) = savxy(i) + mpas_noahmp%sagxy(i) = sagxy(i) + mpas_noahmp%rssunxy(i) = rssunxy(i) + mpas_noahmp%rsshaxy(i) = rsshaxy(i) + mpas_noahmp%bgapxy(i) = bgapxy(i) + mpas_noahmp%wgapxy(i) = wgapxy(i) + mpas_noahmp%tgvxy(i) = tgvxy(i) + mpas_noahmp%tgbxy(i) = tgbxy(i) + mpas_noahmp%chvxy(i) = chvxy(i) + mpas_noahmp%chbxy(i) = chbxy(i) + mpas_noahmp%shgxy(i) = shgxy(i) + mpas_noahmp%shcxy(i) = shcxy(i) + mpas_noahmp%shbxy(i) = shbxy(i) + mpas_noahmp%evgxy(i) = evgxy(i) + mpas_noahmp%evbxy(i) = evbxy(i) + mpas_noahmp%ghvxy(i) = ghvxy(i) + mpas_noahmp%ghbxy(i) = ghbxy(i) + mpas_noahmp%irgxy(i) = irgxy(i) + mpas_noahmp%ircxy(i) = ircxy(i) + mpas_noahmp%irbxy(i) = irbxy(i) + mpas_noahmp%trxy(i) = trxy(i) + mpas_noahmp%evcxy(i) = evcxy(i) + mpas_noahmp%chleafxy(i) = chleafxy(i) + mpas_noahmp%chucxy(i) = chucxy(i) + mpas_noahmp%chv2xy(i) = chv2xy(i) + mpas_noahmp%chb2xy(i) = chb2xy(i) + mpas_noahmp%rs(i) = rs(i) + mpas_noahmp%qtdrain(i) = qtdrain(i) + enddo + + + !--- update of OUT additional variables, i.e. see lines 292-334 in module NoahmpIOVarType.F90: + call mpas_pool_get_array(output_noahmp,'pahxy' ,pahxy ) + call mpas_pool_get_array(output_noahmp,'pahgxy' ,pahgxy ) + call mpas_pool_get_array(output_noahmp,'pahbxy' ,pahbxy ) + call mpas_pool_get_array(output_noahmp,'pahvxy' ,pahvxy ) + call mpas_pool_get_array(output_noahmp,'qintsxy' ,qintsxy ) + call mpas_pool_get_array(output_noahmp,'qintrxy' ,qintrxy ) + call mpas_pool_get_array(output_noahmp,'qdripsxy' ,qdripsxy ) + call mpas_pool_get_array(output_noahmp,'qdriprxy' ,qdriprxy ) + call mpas_pool_get_array(output_noahmp,'qthrosxy' ,qthrosxy ) + call mpas_pool_get_array(output_noahmp,'qthrorxy' ,qthrorxy ) + call mpas_pool_get_array(output_noahmp,'qsnsubxy' ,qsnsubxy ) + call mpas_pool_get_array(output_noahmp,'qmeltxy' ,qmeltxy ) + call mpas_pool_get_array(output_noahmp,'qsnfroxy' ,qsnfroxy ) + call mpas_pool_get_array(output_noahmp,'qsubcxy' ,qsubcxy ) + call mpas_pool_get_array(output_noahmp,'qfrocxy' ,qfrocxy ) + call mpas_pool_get_array(output_noahmp,'qevacxy' ,qevacxy ) + call mpas_pool_get_array(output_noahmp,'qdewcxy' ,qdewcxy ) + call mpas_pool_get_array(output_noahmp,'qfrzcxy' ,qfrzcxy ) + call mpas_pool_get_array(output_noahmp,'qmeltcxy' ,qmeltcxy ) + call mpas_pool_get_array(output_noahmp,'qsnbotxy' ,qsnbotxy ) + call mpas_pool_get_array(output_noahmp,'pondingxy' ,pondingxy ) + call mpas_pool_get_array(output_noahmp,'fpicexy' ,fpicexy ) + call mpas_pool_get_array(output_noahmp,'rainlsm' ,rainlsm ) + call mpas_pool_get_array(output_noahmp,'snowlsm' ,snowlsm ) + call mpas_pool_get_array(output_noahmp,'forctlsm' ,forctlsm ) + call mpas_pool_get_array(output_noahmp,'forcqlsm' ,forcqlsm ) + call mpas_pool_get_array(output_noahmp,'forcplsm' ,forcplsm ) + call mpas_pool_get_array(output_noahmp,'forczlsm' ,forczlsm ) + call mpas_pool_get_array(output_noahmp,'forcwlsm' ,forcwlsm ) + call mpas_pool_get_array(output_noahmp,'acc_ssoilxy' ,acc_ssoilxy ) + call mpas_pool_get_array(output_noahmp,'acc_qinsurxy',acc_qinsurxy ) + call mpas_pool_get_array(output_noahmp,'acc_qsevaxy' ,acc_qsevaxy ) + call mpas_pool_get_array(output_noahmp,'eflxbxy' ,eflxbxy ) + call mpas_pool_get_array(output_noahmp,'soilenergy' ,soilenergy ) + call mpas_pool_get_array(output_noahmp,'snowenergy' ,snowenergy ) + call mpas_pool_get_array(output_noahmp,'canhsxy' ,canhsxy ) + call mpas_pool_get_array(output_noahmp,'acc_dwaterxy',acc_dwaterxy ) + call mpas_pool_get_array(output_noahmp,'acc_prcpxy' ,acc_prcpxy ) + call mpas_pool_get_array(output_noahmp,'acc_ecanxy' ,acc_ecanxy ) + call mpas_pool_get_array(output_noahmp,'acc_etranxy' ,acc_etranxy ) + call mpas_pool_get_array(output_noahmp,'acc_edirxy' ,acc_edirxy ) + call mpas_pool_get_array(output_noahmp,'acc_etranixy',acc_etranixy ) + + do i = its,ite + mpas_noahmp%pahxy(i) = pahxy(i) + mpas_noahmp%pahgxy(i) = pahgxy(i) + mpas_noahmp%pahbxy(i) = pahbxy(i) + mpas_noahmp%pahvxy(i) = pahvxy(i) + mpas_noahmp%qintsxy(i) = qintsxy(i) + mpas_noahmp%qintrxy(i) = qintrxy(i) + mpas_noahmp%qdripsxy(i) = qdripsxy(i) + mpas_noahmp%qdriprxy(i) = qdriprxy(i) + mpas_noahmp%qthrosxy(i) = qthrosxy(i) + mpas_noahmp%qthrorxy(i) = qthrorxy(i) + mpas_noahmp%qsnsubxy(i) = qsnsubxy(i) + mpas_noahmp%qmeltxy(i) = qmeltxy(i) + mpas_noahmp%qsnfroxy(i) = qsnfroxy(i) + mpas_noahmp%qsubcxy(i) = qsubcxy(i) + mpas_noahmp%qfrocxy(i) = qfrocxy(i) + mpas_noahmp%qevacxy(i) = qevacxy(i) + mpas_noahmp%qdewcxy(i) = qdewcxy(i) + mpas_noahmp%qfrzcxy(i) = qfrzcxy(i) + mpas_noahmp%qmeltcxy(i) = qmeltcxy(i) + mpas_noahmp%qsnbotxy(i) = qsnbotxy(i) + mpas_noahmp%pondingxy(i) = pondingxy(i) + mpas_noahmp%fpicexy(i) = fpicexy(i) + mpas_noahmp%rainlsm(i) = rainlsm(i) + mpas_noahmp%snowlsm(i) = snowlsm(i) + mpas_noahmp%forctlsm(i) = forctlsm(i) + mpas_noahmp%forcqlsm(i) = forcqlsm(i) + mpas_noahmp%forcplsm(i) = forcplsm(i) + mpas_noahmp%forczlsm(i) = forczlsm(i) + mpas_noahmp%forcwlsm(i) = forcwlsm(i) + mpas_noahmp%acc_ssoilxy(i) = acc_ssoilxy(i) + mpas_noahmp%acc_qinsurxy(i) = acc_qinsurxy(i) + mpas_noahmp%acc_qsevaxy(i) = acc_qsevaxy(i) + mpas_noahmp%eflxbxy(i) = eflxbxy(i) + mpas_noahmp%soilenergy(i) = soilenergy(i) + mpas_noahmp%snowenergy(i) = snowenergy(i) + mpas_noahmp%canhsxy(i) = canhsxy(i) + mpas_noahmp%acc_dwaterxy(i) = acc_dwaterxy(i) + mpas_noahmp%acc_prcpxy(i) = acc_prcpxy(i) + mpas_noahmp%acc_ecanxy(i) = acc_ecanxy(i) + mpas_noahmp%acc_etranxy(i) = acc_etranxy(i) + mpas_noahmp%acc_edirxy(i) = acc_edirxy(i) +! real(kind=kind_noahmp), allocatable, dimension(:,:) :: acc_etranixy + enddo + +!call mpas_log_write('--- end subroutine lsm_noahmp_fromMPAS.') + + end subroutine lsm_noahmp_fromMPAS + +!================================================================================================================= + subroutine lsm_noahmp_sounding_fromMPAS(mesh,state,time_lev,diag) +!================================================================================================================= + +!--- input arguments: + type(mpas_pool_type),intent(in):: mesh + type(mpas_pool_type),intent(in):: diag + type(mpas_pool_type),intent(in):: state + + integer,intent(in):: time_lev + + +!--- local variables and arrays: + integer:: i,its,ite,k,kts,kte + integer,pointer:: index_qv + + real(kind=RKIND),dimension(:,:),pointer:: zgrid + real(kind=RKIND),dimension(:,:),pointer:: qv,theta_m,u,v + real(kind=RKIND),dimension(:,:),pointer:: exner,pressure_b,pressure_p + real(kind=RKIND),dimension(:,:,:),pointer:: scalars + + real(kind=RKIND):: fzm,fzp,mult,totm,totp + real(kind=RKIND):: w1,w2,z0,z1,z2 + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write('--- enter subroutine lsm_noahmp_sounding_fromMPAS: $i',intArgs=(/time_lev/)) + + +!--- initialization of local dimensions: + its = mpas_noahmp%its + ite = mpas_noahmp%ite + kts = mpas_noahmp%kts + kte = mpas_noahmp%kte + + +!--- initialization of input sounding variables: + call mpas_pool_get_array(mesh,'zgrid',zgrid) + + call mpas_pool_get_array(diag,'exner' ,exner ) + call mpas_pool_get_array(diag,'pressure_base' ,pressure_b) + call mpas_pool_get_array(diag,'pressure_p' ,pressure_p) + call mpas_pool_get_array(diag,'uReconstructZonal' ,u ) + call mpas_pool_get_array(diag,'uReconstructMeridional',v ) + + call mpas_pool_get_array(state,'theta_m',theta_m,time_lev) + call mpas_pool_get_array(state,'scalars',scalars,time_lev) + + call mpas_pool_get_dimension(state,'index_qv',index_qv) + qv => scalars(index_qv,:,:) + + do i = its,ite + do k = kts,kte + mpas_noahmp%dz8w(i,k) = zgrid(k+1,i)-zgrid(k,i) + mpas_noahmp%qv_curr(i,k) = qv(k,i) + mpas_noahmp%t_phy(i,k) = (theta_m(k,i)/(1.+R_v/R_d*qv(k,i)))*exner(k,i) + mpas_noahmp%u_phy(i,k) = u(k,i) + mpas_noahmp%v_phy(i,k) = v(k,i) + enddo + enddo + + +!--- initialization of pressure at interface between layers: + do i = its,ite + k = kts + z0 = zgrid(k,i) + z1 = 0.5*(zgrid(k,i)+zgrid(k+1,i)) + z2 = 0.5*(zgrid(k+1,i)+zgrid(k+2,i)) + w1 = (z0-z2)/(z1-z2) + w2 = 1.-w1 + totm = pressure_p(k,i)+pressure_b(k,i) + totp = pressure_p(k+1,i)+pressure_b(k+1,i) + mpas_noahmp%p8w(i,k) = w1*totm + w2*totp + + do k = kts+1,kte + totm = pressure_p(k-1,i)+pressure_b(k-1,i) + totp = pressure_p(k,i)+pressure_b(k,i) + mult = 1./(zgrid(k+1,i)-zgrid(k-1,i)) + fzm = mult*(zgrid(k,i)-zgrid(k-1,i)) + fzp = mult*(zgrid(k+1,i)-zgrid(k,i)) + mpas_noahmp%p8w(i,k) = fzm*totp + fzp*totm + enddo + enddo + +!call mpas_log_write('--- end subroutine lsm_noahmp_sounding_fromMPAS:') + + end subroutine lsm_noahmp_sounding_fromMPAS + +!================================================================================================================= + subroutine lsm_noahmp_toMPAS(diag_physics,diag_physics_noahmp,output_noahmp,sfc_input) +!================================================================================================================= + +!--- input arguments: + type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: diag_physics_noahmp + type(mpas_pool_type),intent(inout):: output_noahmp + type(mpas_pool_type),intent(inout):: sfc_input + + +!--- local variables and arrays: + integer:: i,its,ite + integer:: n,ns,nsoil,nsnow,nzsnow + + +!--- local INOUT pointers (with generic LSM equivalent as defined in WRF): + real(kind=RKIND),dimension(:),pointer:: acsnom,acsnow,canwat,hfx,qfx,qsfc,lh,grdflx,sfc_albedo,sfc_emiss, & + sfcrunoff,skintemp,smstav,smstot,udrunoff,snow,snowc,snowh,lai,z0, & + znt + real(kind=RKIND),dimension(:,:),pointer:: sh2o,smois,tslb + + + !--- local INOUT pointers (with no Noah LSM equivalent as defined in WRF): + integer,dimension(:),pointer:: isnowxy + real(kind=RKIND),dimension(:),pointer:: tvxy,tgxy,canicexy,canliqxy,eahxy,tahxy,cmxy,chxy,fwetxy,sneqvoxy, & + alboldxy,qsnowxy,qrainxy,wslakexy,zwtxy,waxy,wtxy,deeprechxy, & + rechxy,lfmassxy,rtmassxy,stmassxy,woodxy,grainxy,gddxy,stblcpxy, & + fastcpxy,xsaixy,taussxy + real(kind=RKIND),dimension(:,:),pointer:: tsnoxy,zsnsoxy,snicexy,snliqxy + + +!--- local OUT pointers (with no Noah LSM equivalent as defined in WRF): + real(kind=RKIND),dimension(:),pointer:: t2mvxy,t2mbxy,q2mvxy,q2mbxy,tradxy,neexy,gppxy,nppxy,fvegxy,runsfxy, & + runsbxy,ecanxy,edirxy,etranxy,fsaxy,firaxy,aparxy,psnxy,savxy,sagxy, & + rssunxy,rsshaxy,bgapxy,wgapxy,tgvxy,tgbxy,chvxy,chbxy,shgxy,shcxy, & + shbxy,evgxy,evbxy,ghvxy,ghbxy,irgxy,ircxy,irbxy,trxy,evcxy,chleafxy, & + chucxy,chv2xy,chb2xy,rs,qtdrain + + +!--- local OUT additional variables: + real(kind=RKIND),dimension(:),pointer:: pahxy,pahgxy,pahbxy,pahvxy,qintsxy,qintrxy,qdripsxy,qdriprxy, & + qthrosxy,qthrorxy,qsnsubxy,qmeltxy,qsnfroxy,qsubcxy,qfrocxy, & + qevacxy,qdewcxy,qfrzcxy,qmeltcxy,qsnbotxy,pondingxy,fpicexy, & + rainlsm,snowlsm,forctlsm,forcqlsm,forcplsm,forczlsm,forcwlsm, & + acc_ssoilxy,acc_qinsurxy,acc_qsevaxy,eflxbxy,soilenergy,snowenergy, & + canhsxy,acc_dwaterxy,acc_prcpxy,acc_ecanxy,acc_etranxy,acc_edirxy + real(kind=RKIND),dimension(:,:),pointer:: acc_etranixy + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write('--- enter subroutine lsm_noahmp_toMPAS:') + + +!--- initialization of local dimensions: + its = mpas_noahmp%its + ite = mpas_noahmp%ite + nsoil = mpas_noahmp%nsoil + nsnow = mpas_noahmp%nsnow + nzsnow = nsnow + nsoil + + +!--- update of INOUT variables (with generic LSM equivalent as defined in WRF), i.e. see +! lines 162-184 in module NoahmpIOVarType.F90): + call mpas_pool_get_array(sfc_input,'skintemp',skintemp) + call mpas_pool_get_array(sfc_input,'snowc' ,snowc ) + call mpas_pool_get_array(sfc_input,'snow' ,snow ) + call mpas_pool_get_array(sfc_input,'snowh' ,snowh ) + call mpas_pool_get_array(sfc_input,'sh2o' ,sh2o ) + call mpas_pool_get_array(sfc_input,'smois' ,smois ) + call mpas_pool_get_array(sfc_input,'tslb' ,tslb ) + + call mpas_pool_get_array(diag_physics,'hfx' ,hfx ) + call mpas_pool_get_array(diag_physics,'qfx' ,qfx ) + call mpas_pool_get_array(diag_physics,'lh ' ,lh ) + call mpas_pool_get_array(diag_physics,'grdflx' ,grdflx ) + call mpas_pool_get_array(diag_physics,'smstav' ,smstav ) + call mpas_pool_get_array(diag_physics,'smstot' ,smstot ) + call mpas_pool_get_array(diag_physics,'sfcrunoff' ,sfcrunoff ) + call mpas_pool_get_array(diag_physics,'udrunoff' ,udrunoff ) + call mpas_pool_get_array(diag_physics,'sfc_albedo',sfc_albedo) + call mpas_pool_get_array(diag_physics,'canwat' ,canwat ) + call mpas_pool_get_array(diag_physics,'acsnom' ,acsnom ) + call mpas_pool_get_array(diag_physics,'acsnow' ,acsnow ) + call mpas_pool_get_array(diag_physics,'sfc_emiss' ,sfc_emiss ) + call mpas_pool_get_array(diag_physics,'qsfc' ,qsfc ) + call mpas_pool_get_array(diag_physics,'lai' ,lai ) + call mpas_pool_get_array(diag_physics,'z0' ,z0 ) + call mpas_pool_get_array(diag_physics,'znt' ,znt ) + + + do i = its,ite + skintemp(i) = mpas_noahmp%tsk(i) + hfx(i) = mpas_noahmp%hfx(i) + qfx(i) = mpas_noahmp%qfx(i) + lh(i) = mpas_noahmp%lh(i) + grdflx(i) = mpas_noahmp%grdflx(i) + smstav(i) = mpas_noahmp%smstav(i) + smstot(i) = mpas_noahmp%smstot(i) + sfcrunoff(i) = mpas_noahmp%sfcrunoff(i) + udrunoff(i) = mpas_noahmp%udrunoff(i) + sfc_albedo(i) = mpas_noahmp%albedo(i) + snowc(i) = mpas_noahmp%snowc(i) + snow(i) = mpas_noahmp%snow(i) + snowh(i) = mpas_noahmp%snowh(i) + canwat(i) = mpas_noahmp%canwat(i) + acsnom(i) = mpas_noahmp%acsnom(i) + acsnow(i) = mpas_noahmp%acsnow(i) + sfc_emiss(i) = mpas_noahmp%emiss(i) + qsfc(i) = mpas_noahmp%qsfc(i) + lai(i) = mpas_noahmp%lai(i) + z0(i) = mpas_noahmp%z0(i) + znt(i) = mpas_noahmp%znt(i) + enddo + + do ns = 1,nsoil + do i = its,ite + sh2o(ns,i) = mpas_noahmp%sh2o(i,ns) + smois(ns,i) = mpas_noahmp%smois(i,ns) + tslb(ns,i) = mpas_noahmp%tslb(i,ns) + enddo + enddo + + +!--- update of INOUT variables (with no Noah LSM equivalent as defined in WRF), i.e. see +! lines 186-222 in module NoahmpIOVarType.F90: + call mpas_pool_get_array(diag_physics_noahmp,'isnowxy' ,isnowxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tvxy' ,tvxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tgxy' ,tgxy ) + call mpas_pool_get_array(diag_physics_noahmp,'canicexy' ,canicexy ) + call mpas_pool_get_array(diag_physics_noahmp,'canliqxy' ,canliqxy ) + call mpas_pool_get_array(diag_physics_noahmp,'eahxy' ,eahxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tahxy' ,tahxy ) + call mpas_pool_get_array(diag_physics_noahmp,'cmxy' ,cmxy ) + call mpas_pool_get_array(diag_physics_noahmp,'chxy' ,chxy ) + call mpas_pool_get_array(diag_physics_noahmp,'fwetxy' ,fwetxy ) + call mpas_pool_get_array(diag_physics_noahmp,'sneqvoxy' ,sneqvoxy ) + call mpas_pool_get_array(diag_physics_noahmp,'alboldxy' ,alboldxy ) + call mpas_pool_get_array(diag_physics_noahmp,'qsnowxy' ,qsnowxy ) + call mpas_pool_get_array(diag_physics_noahmp,'qrainxy' ,qrainxy ) + call mpas_pool_get_array(diag_physics_noahmp,'wslakexy' ,wslakexy ) + call mpas_pool_get_array(diag_physics_noahmp,'zwtxy' ,zwtxy ) + call mpas_pool_get_array(diag_physics_noahmp,'waxy' ,waxy ) + call mpas_pool_get_array(diag_physics_noahmp,'wtxy' ,wtxy ) + call mpas_pool_get_array(diag_physics_noahmp,'deeprechxy',deeprechxy ) + call mpas_pool_get_array(diag_physics_noahmp,'rechxy' ,rechxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tsnoxy' ,tsnoxy ) + call mpas_pool_get_array(diag_physics_noahmp,'zsnsoxy' ,zsnsoxy ) + call mpas_pool_get_array(diag_physics_noahmp,'snicexy' ,snicexy ) + call mpas_pool_get_array(diag_physics_noahmp,'snliqxy' ,snliqxy ) + call mpas_pool_get_array(diag_physics_noahmp,'lfmassxy' ,lfmassxy ) + call mpas_pool_get_array(diag_physics_noahmp,'rtmassxy' ,rtmassxy ) + call mpas_pool_get_array(diag_physics_noahmp,'stmassxy' ,stmassxy ) + call mpas_pool_get_array(diag_physics_noahmp,'woodxy' ,woodxy ) + call mpas_pool_get_array(diag_physics_noahmp,'grainxy' ,grainxy ) + call mpas_pool_get_array(diag_physics_noahmp,'gddxy' ,gddxy ) + call mpas_pool_get_array(diag_physics_noahmp,'stblcpxy' ,stblcpxy ) + call mpas_pool_get_array(diag_physics_noahmp,'fastcpxy' ,fastcpxy ) + call mpas_pool_get_array(diag_physics_noahmp,'xsaixy' ,xsaixy ) + call mpas_pool_get_array(diag_physics_noahmp,'taussxy' ,taussxy ) + + do i = its,ite + isnowxy(i) = mpas_noahmp%isnowxy(i) + tvxy(i) = mpas_noahmp%tvxy(i) + tgxy(i) = mpas_noahmp%tgxy(i) + canicexy(i) = mpas_noahmp%canicexy(i) + canliqxy(i) = mpas_noahmp%canliqxy(i) + eahxy(i) = mpas_noahmp%eahxy(i) + tahxy(i) = mpas_noahmp%tahxy(i) + cmxy(i) = mpas_noahmp%cmxy(i) + chxy(i) = mpas_noahmp%chxy(i) + fwetxy(i) = mpas_noahmp%fwetxy(i) + sneqvoxy(i) = mpas_noahmp%sneqvoxy(i) + alboldxy(i) = mpas_noahmp%alboldxy(i) + qsnowxy(i) = mpas_noahmp%qsnowxy(i) + qrainxy(i) = mpas_noahmp%qrainxy(i) + wslakexy(i) = mpas_noahmp%wslakexy(i) + zwtxy(i) = mpas_noahmp%zwtxy(i) + waxy(i) = mpas_noahmp%waxy(i) + wtxy(i) = mpas_noahmp%wtxy(i) + deeprechxy(i) = mpas_noahmp%deeprechxy(i) + rechxy(i) = mpas_noahmp%rechxy(i) + lfmassxy(i) = mpas_noahmp%lfmassxy(i) + rtmassxy(i) = mpas_noahmp%rtmassxy(i) + stmassxy(i) = mpas_noahmp%stmassxy(i) + woodxy(i) = mpas_noahmp%woodxy(i) + grainxy(i) = mpas_noahmp%grainxy(i) + gddxy(i) = mpas_noahmp%gddxy(i) + stblcpxy(i) = mpas_noahmp%stblcpxy(i) + fastcpxy(i) = mpas_noahmp%fastcpxy(i) + xsaixy(i) = mpas_noahmp%xsaixy(i) + taussxy(i) = mpas_noahmp%taussxy(i) + + do ns = 1,nsnow + n = ns - nsnow + tsnoxy(ns,i) = mpas_noahmp%tsnoxy(i,n) + snicexy(ns,i) = mpas_noahmp%snicexy(i,n) + snliqxy(ns,i) = mpas_noahmp%snliqxy(i,n) + enddo + do ns = 1,nsnow + n = ns - nsnow + zsnsoxy(ns,i) = mpas_noahmp%zsnsoxy(i,n) + enddo + do ns = nsnow+1,nzsnow + n = ns - nsoil + 1 + zsnsoxy(ns,i) = mpas_noahmp%zsnsoxy(i,n) + enddo + enddo + + +!--- update of OUT (with no Noah LSM equivalent as defined in WRF), i.e. see +! lines 242-290 in module NoahmpIOVarType.F90: + call mpas_pool_get_array(output_noahmp,'t2mvxy' ,t2mvxy ) + call mpas_pool_get_array(output_noahmp,'t2mbxy' ,t2mbxy ) + call mpas_pool_get_array(output_noahmp,'q2mvxy' ,q2mvxy ) + call mpas_pool_get_array(output_noahmp,'q2mbxy' ,q2mbxy ) + call mpas_pool_get_array(output_noahmp,'tradxy' ,tradxy ) + call mpas_pool_get_array(output_noahmp,'neexy' ,neexy ) + call mpas_pool_get_array(output_noahmp,'gppxy' ,gppxy ) + call mpas_pool_get_array(output_noahmp,'nppxy' ,nppxy ) + call mpas_pool_get_array(output_noahmp,'fvegxy' ,fvegxy ) + call mpas_pool_get_array(output_noahmp,'runsfxy' ,runsfxy ) + call mpas_pool_get_array(output_noahmp,'runsbxy' ,runsbxy ) + call mpas_pool_get_array(output_noahmp,'ecanxy' ,ecanxy ) + call mpas_pool_get_array(output_noahmp,'edirxy' ,edirxy ) + call mpas_pool_get_array(output_noahmp,'etranxy' ,etranxy ) + call mpas_pool_get_array(output_noahmp,'fsaxy' ,fsaxy ) + call mpas_pool_get_array(output_noahmp,'firaxy' ,firaxy ) + call mpas_pool_get_array(output_noahmp,'aparxy' ,aparxy ) + call mpas_pool_get_array(output_noahmp,'psnxy' ,psnxy ) + call mpas_pool_get_array(output_noahmp,'savxy' ,savxy ) + call mpas_pool_get_array(output_noahmp,'sagxy' ,sagxy ) + call mpas_pool_get_array(output_noahmp,'rssunxy' ,rssunxy ) + call mpas_pool_get_array(output_noahmp,'rsshaxy' ,rsshaxy ) + call mpas_pool_get_array(output_noahmp,'bgapxy' ,bgapxy ) + call mpas_pool_get_array(output_noahmp,'wgapxy' ,wgapxy ) + call mpas_pool_get_array(output_noahmp,'tgvxy' ,tgvxy ) + call mpas_pool_get_array(output_noahmp,'tgbxy' ,tgbxy ) + call mpas_pool_get_array(output_noahmp,'chvxy' ,chvxy ) + call mpas_pool_get_array(output_noahmp,'chbxy' ,chbxy ) + call mpas_pool_get_array(output_noahmp,'shgxy' ,shgxy ) + call mpas_pool_get_array(output_noahmp,'shcxy' ,shcxy ) + call mpas_pool_get_array(output_noahmp,'shbxy' ,shbxy ) + call mpas_pool_get_array(output_noahmp,'evgxy' ,evgxy ) + call mpas_pool_get_array(output_noahmp,'evbxy' ,evbxy ) + call mpas_pool_get_array(output_noahmp,'ghvxy' ,ghvxy ) + call mpas_pool_get_array(output_noahmp,'ghbxy' ,ghbxy ) + call mpas_pool_get_array(output_noahmp,'irgxy' ,irgxy ) + call mpas_pool_get_array(output_noahmp,'ircxy' ,ircxy ) + call mpas_pool_get_array(output_noahmp,'irbxy' ,irbxy ) + call mpas_pool_get_array(output_noahmp,'trxy' ,trxy ) + call mpas_pool_get_array(output_noahmp,'evcxy' ,evcxy ) + call mpas_pool_get_array(output_noahmp,'chleafxy',chleafxy) + call mpas_pool_get_array(output_noahmp,'chucxy' ,chucxy ) + call mpas_pool_get_array(output_noahmp,'chv2xy' ,chv2xy ) + call mpas_pool_get_array(output_noahmp,'chb2xy' ,chb2xy ) + call mpas_pool_get_array(output_noahmp,'rs' ,rs ) + call mpas_pool_get_array(output_noahmp,'qtdrain',qtdrain ) + + do i = its,ite + t2mvxy(i) = mpas_noahmp%t2mvxy(i) + t2mbxy(i) = mpas_noahmp%t2mbxy(i) + q2mvxy(i) = mpas_noahmp%q2mvxy(i) + q2mbxy(i) = mpas_noahmp%q2mbxy(i) + tradxy(i) = mpas_noahmp%tradxy(i) + neexy(i) = mpas_noahmp%neexy(i) + gppxy(i) = mpas_noahmp%gppxy(i) + nppxy(i) = mpas_noahmp%nppxy(i) + fvegxy(i) = mpas_noahmp%fvegxy(i) + runsfxy(i) = mpas_noahmp%runsfxy(i) + runsbxy(i) = mpas_noahmp%runsbxy(i) + ecanxy(i) = mpas_noahmp%ecanxy(i) + edirxy(i) = mpas_noahmp%edirxy(i) + etranxy(i) = mpas_noahmp%etranxy(i) + fsaxy(i) = mpas_noahmp%fsaxy(i) + firaxy(i) = mpas_noahmp%firaxy(i) + aparxy(i) = mpas_noahmp%aparxy(i) + psnxy(i) = mpas_noahmp%psnxy(i) + savxy(i) = mpas_noahmp%savxy(i) + sagxy(i) = mpas_noahmp%sagxy(i) + rssunxy(i) = mpas_noahmp%rssunxy(i) + rsshaxy(i) = mpas_noahmp%rsshaxy(i) + bgapxy(i) = mpas_noahmp%bgapxy(i) + wgapxy(i) = mpas_noahmp%wgapxy(i) + tgvxy(i) = mpas_noahmp%tgvxy(i) + tgbxy(i) = mpas_noahmp%tgbxy(i) + chvxy(i) = mpas_noahmp%chvxy(i) + chbxy(i) = mpas_noahmp%chbxy(i) + shgxy(i) = mpas_noahmp%shgxy(i) + shcxy(i) = mpas_noahmp%shcxy(i) + shbxy(i) = mpas_noahmp%shbxy(i) + evgxy(i) = mpas_noahmp%evgxy(i) + evbxy(i) = mpas_noahmp%evbxy(i) + ghvxy(i) = mpas_noahmp%ghvxy(i) + ghbxy(i) = mpas_noahmp%ghbxy(i) + irgxy(i) = mpas_noahmp%irgxy(i) + ircxy(i) = mpas_noahmp%ircxy(i) + irbxy(i) = mpas_noahmp%irbxy(i) + trxy(i) = mpas_noahmp%trxy(i) + evcxy(i) = mpas_noahmp%evcxy(i) + chleafxy(i) = mpas_noahmp%chleafxy(i) + chucxy(i) = mpas_noahmp%chucxy(i) + chv2xy(i) = mpas_noahmp%chv2xy(i) + chb2xy(i) = mpas_noahmp%chb2xy(i) + rs(i) = mpas_noahmp%rs(i) + qtdrain(i) = mpas_noahmp%qtdrain(i) + enddo + + +!--- update of OUT additional variables, i.e. see lines 292-334 in module NoahmpIOVarType.F90: + call mpas_pool_get_array(output_noahmp,'pahxy' ,pahxy ) + call mpas_pool_get_array(output_noahmp,'pahgxy' ,pahgxy ) + call mpas_pool_get_array(output_noahmp,'pahbxy' ,pahbxy ) + call mpas_pool_get_array(output_noahmp,'pahvxy' ,pahvxy ) + call mpas_pool_get_array(output_noahmp,'qintsxy' ,qintsxy ) + call mpas_pool_get_array(output_noahmp,'qintrxy' ,qintrxy ) + call mpas_pool_get_array(output_noahmp,'qdripsxy' ,qdripsxy ) + call mpas_pool_get_array(output_noahmp,'qdriprxy' ,qdriprxy ) + call mpas_pool_get_array(output_noahmp,'qthrosxy' ,qthrosxy ) + call mpas_pool_get_array(output_noahmp,'qthrorxy' ,qthrorxy ) + call mpas_pool_get_array(output_noahmp,'qsnsubxy' ,qsnsubxy ) + call mpas_pool_get_array(output_noahmp,'qmeltxy' ,qmeltxy ) + call mpas_pool_get_array(output_noahmp,'qsnfroxy' ,qsnfroxy ) + call mpas_pool_get_array(output_noahmp,'qsubcxy' ,qsubcxy ) + call mpas_pool_get_array(output_noahmp,'qfrocxy' ,qfrocxy ) + call mpas_pool_get_array(output_noahmp,'qevacxy' ,qevacxy ) + call mpas_pool_get_array(output_noahmp,'qdewcxy' ,qdewcxy ) + call mpas_pool_get_array(output_noahmp,'qfrzcxy' ,qfrzcxy ) + call mpas_pool_get_array(output_noahmp,'qmeltcxy' ,qmeltcxy ) + call mpas_pool_get_array(output_noahmp,'qsnbotxy' ,qsnbotxy ) + call mpas_pool_get_array(output_noahmp,'pondingxy' ,pondingxy ) + call mpas_pool_get_array(output_noahmp,'fpicexy' ,fpicexy ) + call mpas_pool_get_array(output_noahmp,'rainlsm' ,rainlsm ) + call mpas_pool_get_array(output_noahmp,'snowlsm' ,snowlsm ) + call mpas_pool_get_array(output_noahmp,'forctlsm' ,forctlsm ) + call mpas_pool_get_array(output_noahmp,'forcqlsm' ,forcqlsm ) + call mpas_pool_get_array(output_noahmp,'forcplsm' ,forcplsm ) + call mpas_pool_get_array(output_noahmp,'forczlsm' ,forczlsm ) + call mpas_pool_get_array(output_noahmp,'forcwlsm' ,forcwlsm ) + call mpas_pool_get_array(output_noahmp,'acc_ssoilxy' ,acc_ssoilxy ) + call mpas_pool_get_array(output_noahmp,'acc_qinsurxy',acc_qinsurxy ) + call mpas_pool_get_array(output_noahmp,'acc_qsevaxy' ,acc_qsevaxy ) + call mpas_pool_get_array(output_noahmp,'eflxbxy' ,eflxbxy ) + call mpas_pool_get_array(output_noahmp,'soilenergy' ,soilenergy ) + call mpas_pool_get_array(output_noahmp,'snowenergy' ,snowenergy ) + call mpas_pool_get_array(output_noahmp,'canhsxy' ,canhsxy ) + call mpas_pool_get_array(output_noahmp,'acc_dwaterxy',acc_dwaterxy ) + call mpas_pool_get_array(output_noahmp,'acc_prcpxy' ,acc_prcpxy ) + call mpas_pool_get_array(output_noahmp,'acc_ecanxy' ,acc_ecanxy ) + call mpas_pool_get_array(output_noahmp,'acc_etranxy' ,acc_etranxy ) + call mpas_pool_get_array(output_noahmp,'acc_edirxy' ,acc_edirxy ) + call mpas_pool_get_array(output_noahmp,'acc_etranixy',acc_etranixy ) + + do i = its,ite + pahxy(i) = mpas_noahmp%pahxy(i) + pahgxy(i) = mpas_noahmp%pahgxy(i) + pahbxy(i) = mpas_noahmp%pahbxy(i) + pahvxy(i) = mpas_noahmp%pahvxy(i) + qintsxy(i) = mpas_noahmp%qintsxy(i) + qintrxy(i) = mpas_noahmp%qintrxy(i) + qdripsxy(i) = mpas_noahmp%qdripsxy(i) + qdriprxy(i) = mpas_noahmp%qdriprxy(i) + qthrosxy(i) = mpas_noahmp%qthrosxy(i) + qthrorxy(i) = mpas_noahmp%qthrorxy(i) + qsnsubxy(i) = mpas_noahmp%qsnsubxy(i) + qmeltxy(i) = mpas_noahmp%qmeltxy(i) + qsnfroxy(i) = mpas_noahmp%qsnfroxy(i) + qsubcxy(i) = mpas_noahmp%qsubcxy(i) + qfrocxy(i) = mpas_noahmp%qfrocxy(i) + qevacxy(i) = mpas_noahmp%qevacxy(i) + qdewcxy(i) = mpas_noahmp%qdewcxy(i) + qfrzcxy(i) = mpas_noahmp%qfrzcxy(i) + qmeltcxy(i) = mpas_noahmp%qmeltcxy(i) + qsnbotxy(i) = mpas_noahmp%qsnbotxy(i) + pondingxy(i) = mpas_noahmp%pondingxy(i) + fpicexy(i) = mpas_noahmp%fpicexy(i) + rainlsm(i) = mpas_noahmp%rainlsm(i) + snowlsm(i) = mpas_noahmp%snowlsm(i) + forctlsm(i) = mpas_noahmp%forctlsm(i) + forcqlsm(i) = mpas_noahmp%forcqlsm(i) + forcplsm(i) = mpas_noahmp%forcplsm(i) + forczlsm(i) = mpas_noahmp%forczlsm(i) + forcwlsm(i) = mpas_noahmp%forcwlsm(i) + acc_ssoilxy(i) = mpas_noahmp%acc_ssoilxy(i) + acc_qinsurxy(i) = mpas_noahmp%acc_qinsurxy(i) + acc_qsevaxy(i) = mpas_noahmp%acc_qsevaxy(i) + eflxbxy(i) = mpas_noahmp%eflxbxy(i) + soilenergy(i) = mpas_noahmp%soilenergy(i) + snowenergy(i) = mpas_noahmp%snowenergy(i) + canhsxy(i) = mpas_noahmp%canhsxy(i) + acc_dwaterxy(i) = mpas_noahmp%acc_dwaterxy(i) + acc_prcpxy(i) = mpas_noahmp%acc_prcpxy(i) + acc_ecanxy(i) = mpas_noahmp%acc_ecanxy(i) + acc_etranxy(i) = mpas_noahmp%acc_etranxy(i) + acc_edirxy(i) = mpas_noahmp%acc_edirxy(i) +! real(kind=kind_noahmp), allocatable, dimension(:,:) :: acc_etranixy + enddo + +!call mpas_log_write('--- end subroutine lsm_noahmp_toMPAS:') + + end subroutine lsm_noahmp_toMPAS + +!================================================================================================================= + subroutine driver_lsm_noahmp(configs,mesh,state,time_lev,diag,diag_physics,diag_physics_noahmp,output_noahmp, & + sfc_input,itimestep,its,ite) +!================================================================================================================= + +!--- input arguments: + type(mpas_pool_type),intent(in):: configs + type(mpas_pool_type),intent(in):: mesh + type(mpas_pool_type),intent(in):: diag + type(mpas_pool_type),intent(in):: state + + integer,intent(in):: itimestep,its,ite + integer,intent(in):: time_lev + +!--- inout arguments: + type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: diag_physics_noahmp + type(mpas_pool_type),intent(inout):: output_noahmp + type(mpas_pool_type),intent(inout):: sfc_input + + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write(' ') +!call mpas_log_write('--- enter subroutine driver_lsm_noahmp:') + + call lsm_noahmp_fromMPAS(configs,mesh,diag,diag_physics,diag_physics_noahmp,output_noahmp,sfc_input, & + state,time_lev,itimestep) + + call NoahmpDriverMain(mpas_noahmp) + + call lsm_noahmp_toMPAS(diag_physics,diag_physics_noahmp,output_noahmp,sfc_input) + +!call mpas_log_write('--- end subroutine driver_lsm_noahmp:') + + end subroutine driver_lsm_noahmp + +!================================================================================================================= + end module mpas_atmphys_driver_lsm_noahmp +!================================================================================================================= diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index 397e2cf90..f3ea8280f 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -28,7 +28,7 @@ module mpas_atmphys_driver_microphysics public:: allocate_microphysics, & deallocate_microphysics, & driver_microphysics, & - microphysics_init + init_microphysics !MPAS driver for parameterization of cloud microphysics processes. @@ -87,9 +87,6 @@ module mpas_atmphys_driver_microphysics ! pointer to config_microp_scheme. ! Laura D. Fowler (laura@ucar.edu) / 2917-02-16. -! * implemented fro WRF a cloud top temperature estimation -! Saulo R. Freitas (saulo.freitas@inpe.br) / 2025-01-20 -! !--- initialization option for WSM6 from WRF version 3.8.1. this option could also be set as a namelist parameter. integer,parameter:: hail_opt = 0 @@ -112,32 +109,30 @@ subroutine allocate_microphysics(configs) call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) !sounding variables: - if(.not.allocated(rho_p) ) allocate(rho_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(th_p) ) allocate(th_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(pi_p) ) allocate(pi_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(pres_p) ) allocate(pres_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(z_p) ) allocate(z_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(dz_p) ) allocate(dz_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(w_p) ) allocate(w_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(rho_p) ) allocate(rho_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(th_p) ) allocate(th_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(pi_p) ) allocate(pi_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(pres_p)) allocate(pres_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(z_p) ) allocate(z_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(dz_p) ) allocate(dz_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(w_p) ) allocate(w_p(ims:ime,kms:kme,jms:jme) ) !mass mixing ratios: - if(.not.allocated(qv_p) ) allocate(qv_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qc_p) ) allocate(qc_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qr_p) ) allocate(qr_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qv_p)) allocate(qv_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qc_p)) allocate(qc_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qr_p)) allocate(qr_p(ims:ime,kms:kme,jms:jme)) !surface precipitation: if(.not.allocated(rainnc_p) ) allocate(rainnc_p(ims:ime,jms:jme) ) if(.not.allocated(rainncv_p)) allocate(rainncv_p(ims:ime,jms:jme)) - if(.not.allocated(ctt_p) ) allocate(ctt_p(ims:ime,jms:jme) ) - - microp_select: select case(microp_scheme) + microp_select: select case(trim(microp_scheme)) - case ("mp_thompson","mp_wsm6") + case ("mp_thompson","mp_thompson_aerosols","mp_wsm6") !mass mixing ratios: - if(.not.allocated(qi_p) ) allocate(qi_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qs_p) ) allocate(qs_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qg_p) ) allocate(qg_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qi_p)) allocate(qi_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qs_p)) allocate(qs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qg_p)) allocate(qg_p(ims:ime,kms:kme,jms:jme)) !surface precipitation: if(.not.allocated(sr_p) ) allocate(sr_p(ims:ime,jms:jme) ) @@ -147,13 +142,17 @@ subroutine allocate_microphysics(configs) if(.not.allocated(graupelncv_p)) allocate(graupelncv_p(ims:ime,jms:jme)) !cloud water,cloud ice,and snow effective radii: - if(.not.allocated(recloud_p) ) allocate(recloud_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(reice_p) ) allocate(reice_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(resnow_p) ) allocate(resnow_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(recloud_p)) allocate(recloud_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(reice_p) ) allocate(reice_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(resnow_p) ) allocate(resnow_p(ims:ime,kms:kme,jms:jme) ) + + !precipitation flux: + if(.not.allocated(rainprod_p)) allocate(rainprod_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(evapprod_p)) allocate(evapprod_p(ims:ime,kms:kme,jms:jme)) - microp2_select: select case(microp_scheme) + microp2_select: select case(trim(microp_scheme)) - case("mp_thompson") + case("mp_thompson","mp_thompson_aerosols") !number concentrations: if(.not.allocated(ntc_p)) allocate(ntc_p(ims:ime,jms:jme)) if(.not.allocated(muc_p)) allocate(muc_p(ims:ime,jms:jme)) @@ -163,6 +162,17 @@ subroutine allocate_microphysics(configs) if(.not.allocated(rainprod_p)) allocate(rainprod_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(evapprod_p)) allocate(evapprod_p(ims:ime,kms:kme,jms:jme)) + microp3_select: select case(trim(microp_scheme)) + case("mp_thompson_aerosols") + if(.not.allocated(nifa2d_p)) allocate(nifa2d_p(ims:ime,jms:jme)) + if(.not.allocated(nwfa2d_p)) allocate(nwfa2d_p(ims:ime,jms:jme)) + if(.not.allocated(nc_p) ) allocate(nc_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(nifa_p) ) allocate(nifa_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(nwfa_p) ) allocate(nwfa_p(ims:ime,kms:kme,jms:jme)) + + case default + end select microp3_select + case default end select microp2_select @@ -188,55 +198,67 @@ subroutine deallocate_microphysics(configs) call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) !sounding variables: - if(allocated(rho_p) ) deallocate(rho_p ) - if(allocated(th_p) ) deallocate(th_p ) - if(allocated(pi_p) ) deallocate(pi_p ) - if(allocated(pres_p) ) deallocate(pres_p ) - if(allocated(z_p) ) deallocate(z_p ) - if(allocated(dz_p) ) deallocate(dz_p ) - if(allocated(w_p) ) deallocate(w_p ) + if(allocated(rho_p) ) deallocate(rho_p ) + if(allocated(th_p) ) deallocate(th_p ) + if(allocated(pi_p) ) deallocate(pi_p ) + if(allocated(pres_p)) deallocate(pres_p) + if(allocated(z_p) ) deallocate(z_p ) + if(allocated(dz_p) ) deallocate(dz_p ) + if(allocated(w_p) ) deallocate(w_p ) !mass mixing ratios: - if(allocated(qv_p) ) deallocate(qv_p ) - if(allocated(qc_p) ) deallocate(qc_p ) - if(allocated(qr_p) ) deallocate(qr_p ) + if(allocated(qv_p)) deallocate(qv_p) + if(allocated(qc_p)) deallocate(qc_p) + if(allocated(qr_p)) deallocate(qr_p) !surface precipitation: - if(allocated(rainnc_p) ) deallocate(rainnc_p ) - if(allocated(rainncv_p) ) deallocate(rainncv_p ) - if(allocated(ctt_p) ) deallocate(ctt_p ) - - microp_select: select case(microp_scheme) + if(allocated(rainnc_p) ) deallocate(rainnc_p ) + if(allocated(rainncv_p)) deallocate(rainncv_p) - case ("mp_thompson","mp_wsm6") + microp_select: select case(trim(microp_scheme)) + case ("mp_thompson","mp_thompson_aerosols","mp_wsm6") !mass mixing ratios: - if(allocated(qi_p) ) deallocate(qi_p ) - if(allocated(qs_p) ) deallocate(qs_p ) - if(allocated(qg_p) ) deallocate(qg_p ) + if(allocated(qi_p)) deallocate(qi_p) + if(allocated(qs_p)) deallocate(qs_p) + if(allocated(qg_p)) deallocate(qg_p) !surface precipitation: - if(allocated(sr_p) ) deallocate(sr_p ) - if(allocated(snownc_p) ) deallocate(snownc_p ) - if(allocated(snowncv_p) ) deallocate(snowncv_p ) - if(allocated(graupelnc_p) ) deallocate(graupelnc_p ) - if(allocated(graupelncv_p) ) deallocate(graupelncv_p ) + if(allocated(sr_p) ) deallocate(sr_p ) + if(allocated(snownc_p) ) deallocate(snownc_p ) + if(allocated(snowncv_p) ) deallocate(snowncv_p ) + if(allocated(graupelnc_p) ) deallocate(graupelnc_p ) + if(allocated(graupelncv_p)) deallocate(graupelncv_p) !cloud water,cloud ice,and snow effective radii: - if(allocated(recloud_p) ) deallocate(recloud_p ) - if(allocated(reice_p) ) deallocate(reice_p ) - if(allocated(resnow_p) ) deallocate(resnow_p ) + if(allocated(recloud_p)) deallocate(recloud_p) + if(allocated(reice_p) ) deallocate(reice_p ) + if(allocated(resnow_p) ) deallocate(resnow_p ) - microp2_select: select case(microp_scheme) + !precipitation flux: + if(allocated(rainprod_p)) deallocate(rainprod_p) + if(allocated(evapprod_p)) deallocate(evapprod_p) - case("mp_thompson") + microp2_select: select case(trim(microp_scheme)) + + case("mp_thompson","mp_thompson_aerosols") !number concentrations: if(allocated(ntc_p)) deallocate(ntc_p) if(allocated(muc_p)) deallocate(muc_p) if(allocated(ni_p) ) deallocate(ni_p ) if(allocated(nr_p) ) deallocate(nr_p ) - if(allocated(rainprod_p)) deallocate(rainprod_p) - if(allocated(evapprod_p)) deallocate(evapprod_p) + + + microp3_select: select case(trim(microp_scheme)) + case("mp_thompson_aerosols") + if(allocated(nifa2d_p)) deallocate(nifa2d_p) + if(allocated(nwfa2d_p)) deallocate(nwfa2d_p) + if(allocated(nc_p) ) deallocate(nc_p ) + if(allocated(nifa_p) ) deallocate(nifa_p ) + if(allocated(nwfa_p) ) deallocate(nwfa_p ) + + case default + end select microp3_select case default @@ -249,7 +271,7 @@ subroutine deallocate_microphysics(configs) end subroutine deallocate_microphysics !================================================================================================================= - subroutine microphysics_init(dminfo,configs,mesh,sfc_input,diag_physics) + subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_physics) !================================================================================================================= !input arguments: @@ -257,11 +279,14 @@ subroutine microphysics_init(dminfo,configs,mesh,sfc_input,diag_physics) type(mpas_pool_type),intent(in):: configs type(mpas_pool_type),intent(in):: mesh type(mpas_pool_type),intent(in):: sfc_input + integer,intent(in):: time_lev !inout arguments: type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: state !local pointer: + logical,pointer:: do_restart character(len=StrKIND),pointer:: microp_scheme !CCPP-compliant flags: @@ -269,31 +294,42 @@ subroutine microphysics_init(dminfo,configs,mesh,sfc_input,diag_physics) integer:: errflg !----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write(' ') +!call mpas_log_write('--- enter subroutine init_microphysics:') !initialization of CCPP-compliant flags: errmsg = ' ' errflg = 0 call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) + call mpas_pool_get_config(configs,'config_do_restart' ,do_restart ) + + microp_select: select case(trim(microp_scheme)) + + case("mp_thompson","mp_thompson_aerosols") + call thompson_init(l_mp_tables) + call init_thompson_clouddroplets_forMPAS(mesh,sfc_input,diag_physics) - microp_select: select case(microp_scheme) + microp2_select: select case(trim(microp_scheme)) + case("mp_thompson_aerosols") + call init_thompson_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics) - case("mp_thompson") - call thompson_init(l_mp_tables) - call init_thompson_clouddroplets_forMPAS(mesh,sfc_input,diag_physics) + case default + end select microp2_select - case("mp_wsm6") - call mp_wsm6_init(den0=rho_a,denr=rho_r,dens=rho_s,cl=cliq,cpv=cpv, & - hail_opt=hail_opt,errmsg=errmsg,errflg=errflg) + case("mp_wsm6") + call mp_wsm6_init(den0=rho_a,denr=rho_r,dens=rho_s,cl=cliq,cpv=cpv, & + hail_opt=hail_opt,errmsg=errmsg,errflg=errflg) - case default + case default + end select microp_select - end select microp_select +!call mpas_log_write('--- end subroutine init_microphysics:') - end subroutine microphysics_init + end subroutine init_microphysics !================================================================================================================= - subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,tend,itimestep,its,ite) + subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,tend_physics,tend,itimestep,its,ite) !================================================================================================================= use mpas_constants, only : rvord @@ -310,6 +346,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten type(mpas_pool_type),intent(inout):: state type(mpas_pool_type),intent(inout):: diag type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: tend_physics type(mpas_pool_type),intent(inout):: tend !local pointers: @@ -342,13 +379,13 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten call precip_from_MPAS(configs,diag_physics,its,ite) !... initialization of soundings for non-hydrostatic dynamical cores. - call microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,its,ite) + call microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,tend_physics,its,ite) !... call to different cloud microphysics schemes: - microp_select: select case(microp_scheme) + microp_select: select case(trim(microp_scheme)) case ("mp_kessler") - call mpas_timer_start('Kessler') + call mpas_timer_start('mp_kessler') call kessler( & t = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , rho = rho_p , pii = pi_p , & @@ -361,11 +398,11 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) - call mpas_timer_stop('Kessler') + call mpas_timer_stop('mp_kessler') case ("mp_thompson") + call mpas_timer_start('mp_thompson') istep = 1 - call mpas_timer_start('Thompson') do while (istep .le. n_microp) call mp_gt_driver( & th = th_p , qv = qv_p , qc = qc_p , & @@ -378,14 +415,40 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten sr = sr_p , rainprod = rainprod_p , evapprod = evapprod_p , & re_cloud = recloud_p , re_ice = reice_p , re_snow = resnow_p , & has_reqc = has_reqc , has_reqi = has_reqi , has_reqs = has_reqs , & - ntc = ntc_p , muc = muc_p , & + ntc = ntc_p , muc = muc_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) istep = istep + 1 enddo - call mpas_timer_stop('Thompson') + call mpas_timer_stop('mp_thompson') + + case ("mp_thompson_aerosols") + call mpas_timer_start('mp_thompson_aerosols') + istep = 1 + do while (istep .le. n_microp) + call mp_gt_driver( & + th = th_p , qv = qv_p , qc = qc_p , & + qr = qr_p , qi = qi_p , qs = qs_p , & + qg = qg_p , ni = ni_p , nr = nr_p , & + pii = pi_p , p = pres_p , dz = dz_p , & + w = w_p , dt_in = dt_microp , itimestep = itimestep , & + rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , & + snowncv = snowncv_p , graupelnc = graupelnc_p , graupelncv = graupelncv_p , & + sr = sr_p , rainprod = rainprod_p , evapprod = evapprod_p , & + re_cloud = recloud_p , re_ice = reice_p , re_snow = resnow_p , & + has_reqc = has_reqc , has_reqi = has_reqi , has_reqs = has_reqs , & + nc = nc_p , nifa = nifa_p , nwfa = nwfa_p , & + nifa2d = nifa2d_p , nwfa2d = nwfa2d_p , ntc = ntc_p , & + muc = muc_p , & + ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & + ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & + its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & + ) + istep = istep + 1 + enddo + call mpas_timer_stop('mp_thompson_aerosols') case ("mp_wsm6") call mpas_timer_start('mp_wsm6') @@ -423,7 +486,8 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten !ensure that we only call compute_radar_reflectivity() if we are using an MPS that supports !the computation of simulated radar reflectivity: if(trim(microp_scheme) == "mp_wsm6" .or. & - trim(microp_scheme) == "mp_thompson") then + trim(microp_scheme) == "mp_thompson" .or. & + trim(microp_scheme) == "mp_thompson_aerosols") then call compute_radar_reflectivity(configs,diag_physics,its,ite) else call mpas_log_write('*** NOTICE: NOT computing simulated radar reflectivity') @@ -436,19 +500,12 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten end if -!... diagnostic the clout top temperature - call wrfcttcalc(pres_p = pres_p, pi_p = pi_p, th_p = th_p, qci = qi_p , qcw = qc_p , & - qvp = qv_p, ght = z_p, ctt = ctt_p , & - ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & - ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & - its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte ) - !... copy updated precipitation from the wrf-physics grid back to the geodesic-dynamics grid: call precip_to_MPAS(configs,diag_physics,its,ite) !... copy updated cloud microphysics variables from the wrf-physics grid back to the geodesic- ! dynamics grid: - call microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,tend,itimestep,its,ite) + call microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,tend_physics,tend,its,ite) !... deallocation of all microphysics arrays: !$OMP BARRIER @@ -502,9 +559,9 @@ subroutine precip_from_MPAS(configs,diag_physics,its,ite) enddo !variables specific to different cloud microphysics schemes: - microp_select: select case(microp_scheme) + microp_select: select case(trim(microp_scheme)) - case ("mp_thompson","mp_wsm6") + case ("mp_thompson","mp_thompson_aerosols","mp_wsm6") do j = jts, jte do i = its, ite snowncv_p(i,j) = 0._RKIND @@ -512,7 +569,6 @@ subroutine precip_from_MPAS(configs,diag_physics,its,ite) snownc_p(i,j) = 0._RKIND graupelnc_p(i,j) = 0._RKIND sr_p(i,j) = 0._RKIND - ctt_p(i,j) = 0._RKIND enddo enddo @@ -544,7 +600,7 @@ subroutine precip_to_MPAS(configs,diag_physics,its,ite) integer,dimension(:),pointer:: i_rainnc real(kind=RKIND),pointer:: config_bucket_rainnc - real(kind=RKIND),dimension(:),pointer:: precipw,precipci,ctt + real(kind=RKIND),dimension(:),pointer:: precipw real(kind=RKIND),dimension(:),pointer:: graupelnc,rainnc,snownc real(kind=RKIND),dimension(:),pointer:: graupelncv,rainncv,snowncv,sr @@ -566,12 +622,9 @@ subroutine precip_to_MPAS(configs,diag_physics,its,ite) call mpas_pool_get_array(diag_physics,'snownc' ,snownc ) call mpas_pool_get_array(diag_physics,'snowncv' ,snowncv ) call mpas_pool_get_array(diag_physics,'sr' ,sr ) - call mpas_pool_get_array(diag_physics,'ctt' ,ctt ) - call mpas_pool_get_array(diag_physics,'precipci' ,precipci ) do i = its,ite precipw(i) = 0._RKIND - precipci(i)= 0._RKIND enddo !variables common to all cloud microphysics schemes: @@ -600,16 +653,14 @@ subroutine precip_to_MPAS(configs,diag_physics,its,ite) enddo !CR: negative rainc values correction: - !where (rainnc < 0._RKIND) - ! rainnc = 0._RKIND - !endwhere + where (rainnc < 0._RKIND) + rainnc = 0._RKIND + endwhere - - !variables specific to different cloud microphysics schemes: - microp_select_init: select case(microp_scheme) + microp_select: select case(trim(microp_scheme)) - case ("mp_thompson","mp_wsm6") + case ("mp_thompson","mp_thompson_aerosols","mp_wsm6") do j = jts,jte do i = its,ite !time-step precipitation: @@ -620,19 +671,12 @@ subroutine precip_to_MPAS(configs,diag_physics,its,ite) !accumulated precipitation: snownc(i) = snownc(i) + snowncv(i) graupelnc(i) = graupelnc(i) + graupelncv(i) - !-srf adding column ice and cloud content, like precipw - do k = kts,kte - rho_a = rho_p(i,k,j) / (1._RKIND + qv_p(i,k,j)) - precipci(i) = precipci(i) + (qc_p(i,k,j) + qi_p(i,k,j)) * rho_a * dz_p(i,k,j) - enddo - !-srf adding cloud top temperature - ctt(i) = ctt_p(i,j) enddo enddo case default - end select microp_select_init + end select microp_select end subroutine precip_to_MPAS @@ -664,7 +708,7 @@ subroutine compute_radar_reflectivity(configs,diag_physics,its,ite) call mpas_pool_get_array(diag_physics,'refl10cm_1km',refl10cm_1km) call mpas_pool_get_array(diag_physics,'refl10cm_1km_max',refl10cm_1km_max) - microp_select: select case(microp_scheme) + microp_select: select case(trim(microp_scheme)) case ("mp_kessler") call physics_error_fatal('--- calculation of radar reflectivity is not available' // & @@ -690,7 +734,7 @@ subroutine compute_radar_reflectivity(configs,diag_physics,its,ite) qs1d(k) = qs_p(i,k,j) qg1d(k) = qg_p(i,k,j) dBZ1d(k) = -35._RKIND - zp(k) = z_p(i,k,j) - z_p(i,1,j)+0.5*dz_p(i,1,j) ! height AGL + zp(k) = z_p(i,k,j) - z_p(i,1,j) + 0.5*dz_p(i,k,j) ! height AGL enddo call refl10cm_wsm6(qv1d,qr1d,qs1d,qg1d,t1d,p1d,dBZ1d,kts,kte) @@ -717,7 +761,7 @@ subroutine compute_radar_reflectivity(configs,diag_physics,its,ite) if(allocated(dBz1d)) deallocate(dBZ1d) if(allocated(zp) ) deallocate(zp ) - case ("mp_thompson") + case ("mp_thompson","mp_thompson_aerosols") if(.not.allocated(p1d) ) allocate(p1d(kts:kte) ) if(.not.allocated(t1d) ) allocate(t1d(kts:kte) ) if(.not.allocated(qv1d) ) allocate(qv1d(kts:kte) ) @@ -741,7 +785,7 @@ subroutine compute_radar_reflectivity(configs,diag_physics,its,ite) qg1d(k) = qg_p(i,k,j) nr1d(k) = nr_p(i,k,j) dBZ1d(k) = -35._RKIND - zp(k) = z_p(i,k,j) - z_p(i,1,j)+0.5*dz_p(i,1,j) ! height AGL + zp(k) = z_p(i,k,j) - z_p(i,1,j) + 0.5*dz_p(i,k,j) ! height AGL enddo call calc_refl10cm(qv1d,qc1d,qr1d,nr1d,qs1d,qg1d,t1d,p1d,dBZ1d,kts,kte,i,j) @@ -830,128 +874,6 @@ subroutine compute_relhum(diag,its,ite) if(allocated(qvs1d)) deallocate(qvs1d) end subroutine compute_relhum -!================================================================================================================= - subroutine wrfcttcalc(pres_p,pi_p, th_p, qci, qcw, qvp, ght, ctt & - ,ids,ide, jds,jde, kds,kde & ! domain dims - ,ims,ime, jms,jme, kms,kme & ! memory dims - ,its,ite, jts,jte, kts,kte ) ! tile dims -!================================================================================================================= -implicit none -real(kind=rkind), parameter :: abscoefi = .272_rkind ! cloud ice absorption coefficient in m^2/g -real(kind=rkind), parameter :: abscoef = .145_rkind ! cloud water absorption coefficient in m^2/g -real(kind=rkind), parameter :: celkel = 273.15_rkind -real(kind=rkind), parameter :: g = 9.81_rkind -real(kind=rkind), parameter :: ussalr = 0.0065_rkind ! deg c per m -real(kind=rkind), parameter :: rd = 287._rkind -real(kind=rkind), parameter :: eps = 0.622_rkind -real(kind=rkind), parameter :: missing = -999._rkind -real(kind=rkind), parameter :: opt_thresh = 1.0_rkind -integer , parameter :: fill_nocloud = 0 -integer , parameter :: haveqci = 1 - -integer , intent(in ) :: ids,ide, jds,jde, kds,kde, & - ims,ime, jms,jme, kms,kme, & - its,ite, jts,jte, kts,kte - -real(kind=rkind), dimension(ims:ime , kms:kme , jms:jme ), intent(in) :: ght, pres_p, th_p, qci, qcw, qvp,pi_p -real(kind=rkind), dimension(ims:ime , jms:jme ), intent(out) :: ctt -real(kind=rkind), dimension(ims:ime , kms:kme , jms:jme) :: pf,tk,prs - -! local variables -integer i,j,k,ripk -real(kind=rkind) :: opdepthu, opdepthd, dp, arg1, fac, prsctt, ratmix -real(kind=rkind) :: arg2, agl_hgt, vt -real(kind=rkind) :: p1, p2 - -prs = 0.01_rkind*pres_p ! convert to hpa -tk = th_p * pi_p ! temp in k -!ter(:,:) = ght(:,1,:) - -do j=jts, jte - do i=its,ite - ratmix = .001_rkind*qvp(i,1,j) - arg1 = eps + ratmix - arg2 = eps*(1. + ratmix) - vt = tk(i,1,j)*arg1/arg2 !virtual temperature - agl_hgt = ght(i,kte,j) - ght(i,1,j) - arg1 = -g/(rd*ussalr) - pf(i,kte,j) = prs(i,1,j)*(vt/(vt + ussalr*(agl_hgt)))**(arg1) - end do -end do - -do k=1,kte-1 - do j=jts, jte - do i=its,ite - ripk = kte-k+1 - pf(i,k,j) = .5_rkind*(prs(i,ripk,j) + prs(i,ripk-1,j)) - end do - end do -end do - -do j=jts, jte - do i=its,ite - opdepthd = 0._rkind - k = 0 - prsctt = -1 - - ! integrate downward from model top, calculating path at full - ! model vertical levels. - do k=2,kte - opdepthu = opdepthd - ripk = kte - k + 1 - - if (k .ne. 1) then - dp = 100._rkind*(pf(i,k,j) - pf(i,k-1,j)) ! should be in pa - else - dp = 200._rkind*(pf(i,1,j) - prs(i,kte,j)) ! should be in pa - end if - - if (haveqci .eq. 0) then - if (tk(i,ripk,j) .lt. celkel) then - ! note: abscoefi is m**2/g, qcw is g/kg, so no convrsion needed - opdepthd = opdepthu + abscoefi*1.e+3*qcw(i,ripk,j) * dp/g - else - opdepthd = opdepthu + abscoef*1.e+3*qcw(i,ripk,j) * dp/g - end if - else - opdepthd = opdepthd + (abscoef*1.e+3*qcw(i,ripk,j) + abscoefi*1.e+3*qci(i,ripk,j))*dp/g - end if - - if (opdepthd .lt. opt_thresh .and. k .lt. kte) then - cycle - - else if (opdepthd .lt. opt_thresh .and. k .eq. kte) then - if (fill_nocloud .eq. 0) then - prsctt = prs(i,1,j) - endif - exit - else - fac = (1. - opdepthu)/(opdepthd - opdepthu) - prsctt = pf(i,k-1,j) + fac*(pf(i,k,j) - pf(i,k-1,j)) - prsctt = min(prs(i,1,j), max(prs(i,kte,j), prsctt)) - exit - end if - end do - - ! prsctt should only be 0 if fill values are used - if (prsctt .gt. -1) then - do k=2,kte - ripk = kte - k + 1 - p1 = prs(i,ripk+1,j) - p2 = prs(i,ripk,j) - if (prsctt .ge. p1 .and. prsctt .le. p2) then - fac = (prsctt - p1)/(p2 - p1) - arg1 = fac*(tk(i,ripk ,j) - tk(i,ripk+1,j)) - celkel - ctt(i,j) = tk(i,ripk+1,j) + arg1 - exit - end if - end do - else - ctt(i,j) = missing - end if - end do -end do -end subroutine wrfcttcalc !================================================================================================================= end module mpas_atmphys_driver_microphysics diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F index 6969ff6e5..eea38a69e 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F @@ -127,60 +127,61 @@ subroutine allocate_pbl(configs) case("bl_ysu") !from surface-layer model: - if(.not.allocated(br_p) ) allocate(br_p(ims:ime,jms:jme) ) - if(.not.allocated(ctopo_p) ) allocate(ctopo_p(ims:ime,jms:jme) ) - if(.not.allocated(ctopo2_p) ) allocate(ctopo2_p(ims:ime,jms:jme) ) - if(.not.allocated(delta_p) ) allocate(delta_p(ims:ime,jms:jme) ) - if(.not.allocated(psih_p) ) allocate(psih_p(ims:ime,jms:jme) ) - if(.not.allocated(psim_p) ) allocate(psim_p(ims:ime,jms:jme) ) - if(.not.allocated(u10_p) ) allocate(u10_p(ims:ime,jms:jme) ) - if(.not.allocated(v10_p) ) allocate(v10_p(ims:ime,jms:jme) ) - if(.not.allocated(exch_p) ) allocate(exch_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(wstar_p) ) allocate(wstar_p(ims:ime,jms:jme) ) + if(.not.allocated(br_p) ) allocate(br_p(ims:ime,jms:jme) ) + if(.not.allocated(ctopo_p) ) allocate(ctopo_p(ims:ime,jms:jme) ) + if(.not.allocated(ctopo2_p)) allocate(ctopo2_p(ims:ime,jms:jme) ) + if(.not.allocated(delta_p) ) allocate(delta_p(ims:ime,jms:jme) ) + if(.not.allocated(psih_p) ) allocate(psih_p(ims:ime,jms:jme) ) + if(.not.allocated(psim_p) ) allocate(psim_p(ims:ime,jms:jme) ) + if(.not.allocated(u10_p) ) allocate(u10_p(ims:ime,jms:jme) ) + if(.not.allocated(v10_p) ) allocate(v10_p(ims:ime,jms:jme) ) + if(.not.allocated(exch_p) ) allocate(exch_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(wstar_p) ) allocate(wstar_p(ims:ime,jms:jme) ) case("bl_mynn") - if(.not.allocated(kbl_plume_p) ) allocate(kbl_plume_p(ims:ime,jms:jme) ) - - if(.not.allocated(dx_p) ) allocate(dx_p(ims:ime,jms:jme) ) - if(.not.allocated(ch_p) ) allocate(ch_p(ims:ime,jms:jme) ) - if(.not.allocated(qsfc_p) ) allocate(qsfc_p(ims:ime,jms:jme) ) - if(.not.allocated(rmol_p) ) allocate(rmol_p(ims:ime,jms:jme) ) - if(.not.allocated(tsk_p) ) allocate(tsk_p(ims:ime,jms:jme) ) - if(.not.allocated(maxwidthbl_p) ) allocate(maxwidthbl_p(ims:ime,jms:jme) ) - if(.not.allocated(maxmfbl_p) ) allocate(maxmfbl_p(ims:ime,jms:jme) ) - if(.not.allocated(zbl_plume_p) ) allocate(zbl_plume_p(ims:ime,jms:jme) ) - - if(.not.allocated(cov_p) ) allocate(cov_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qke_p) ) allocate(qke_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qsq_p) ) allocate(qsq_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(tsq_p) ) allocate(tsq_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qkeadv_p) ) allocate(qkeadv_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(elpbl_p) ) allocate(elpbl_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(tkepbl_p) ) allocate(tkepbl_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(sh3d_p) ) allocate(sh3d_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(sm3d_p) ) allocate(sm3d_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(dqke_p) ) allocate(dqke_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qbuoy_p) ) allocate(qbuoy_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qdiss_p) ) allocate(qdiss_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qshear_p) ) allocate(qshear_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qwt_p) ) allocate(qwt_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qibl_p) ) allocate(qibl_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(cldfrabl_p) ) allocate(cldfrabl_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(edmfa_p) ) allocate(edmfa_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(edmfw_p) ) allocate(edmfw_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(edmfqt_p) ) allocate(edmfqt_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(edmfthl_p) ) allocate(edmfthl_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(edmfent_p) ) allocate(edmfent_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(edmfqc_p) ) allocate(edmfqc_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(subthl_p) ) allocate(subthl_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(subqv_p) ) allocate(subqv_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(detthl_p) ) allocate(detthl_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(detqv_p) ) allocate(detqv_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(kbl_plume_p) ) allocate(kbl_plume_p(ims:ime,jms:jme) ) + if(.not.allocated(dx_p) ) allocate(dx_p(ims:ime,jms:jme) ) + if(.not.allocated(ch_p) ) allocate(ch_p(ims:ime,jms:jme) ) + if(.not.allocated(qsfc_p) ) allocate(qsfc_p(ims:ime,jms:jme) ) + if(.not.allocated(rmol_p) ) allocate(rmol_p(ims:ime,jms:jme) ) + if(.not.allocated(tsk_p) ) allocate(tsk_p(ims:ime,jms:jme) ) + if(.not.allocated(maxwidthbl_p)) allocate(maxwidthbl_p(ims:ime,jms:jme) ) + if(.not.allocated(maxmfbl_p) ) allocate(maxmfbl_p(ims:ime,jms:jme) ) + if(.not.allocated(zbl_plume_p) ) allocate(zbl_plume_p(ims:ime,jms:jme) ) + if(.not.allocated(cov_p) ) allocate(cov_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qke_p) ) allocate(qke_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qsq_p) ) allocate(qsq_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(tsq_p) ) allocate(tsq_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qkeadv_p) ) allocate(qkeadv_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(elpbl_p) ) allocate(elpbl_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(tkepbl_p) ) allocate(tkepbl_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(sh3d_p) ) allocate(sh3d_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(sm3d_p) ) allocate(sm3d_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(dqke_p) ) allocate(dqke_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qbuoy_p) ) allocate(qbuoy_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qdiss_p) ) allocate(qdiss_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qshear_p) ) allocate(qshear_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qwt_p) ) allocate(qwt_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qibl_p) ) allocate(qibl_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(cldfrabl_p) ) allocate(cldfrabl_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(edmfa_p) ) allocate(edmfa_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(edmfw_p) ) allocate(edmfw_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(edmfqt_p) ) allocate(edmfqt_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(edmfthl_p) ) allocate(edmfthl_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(edmfent_p) ) allocate(edmfent_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(edmfqc_p) ) allocate(edmfqc_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(subthl_p) ) allocate(subthl_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(subqv_p) ) allocate(subqv_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(detthl_p) ) allocate(detthl_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(detqv_p) ) allocate(detqv_p(ims:ime,kms:kme,jms:jme) ) !additional tendencies: - if(.not.allocated(rqsblten_p) ) allocate(rqsblten_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(rniblten_p) ) allocate(rniblten_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(rqsblten_p) ) allocate(rqsblten_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(rncblten_p) ) allocate(rncblten_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(rniblten_p) ) allocate(rniblten_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(rnifablten_p)) allocate(rnifablten_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(rnwfablten_p)) allocate(rnwfablten_p(ims:ime,kms:kme,jms:jme)) !allocation of additional arrays: if(.not.allocated(pattern_spp_pbl)) allocate(pattern_spp_pbl(ims:ime,kms:kme,jms:jme)) @@ -235,60 +236,62 @@ subroutine deallocate_pbl(configs) case("bl_ysu") !from surface-layer model: - if(allocated(br_p) ) deallocate(br_p ) - if(allocated(ctopo_p) ) deallocate(ctopo_p ) - if(allocated(ctopo2_p) ) deallocate(ctopo2_p ) - if(allocated(delta_p) ) deallocate(delta_p ) - if(allocated(psih_p) ) deallocate(psih_p ) - if(allocated(psim_p) ) deallocate(psim_p ) - if(allocated(u10_p) ) deallocate(u10_p ) - if(allocated(v10_p) ) deallocate(v10_p ) - if(allocated(exch_p) ) deallocate(exch_p ) - if(allocated(wstar_p) ) deallocate(wstar_p ) + if(allocated(br_p) ) deallocate(br_p ) + if(allocated(ctopo_p) ) deallocate(ctopo_p ) + if(allocated(ctopo2_p)) deallocate(ctopo2_p) + if(allocated(delta_p) ) deallocate(delta_p ) + if(allocated(psih_p) ) deallocate(psih_p ) + if(allocated(psim_p) ) deallocate(psim_p ) + if(allocated(u10_p) ) deallocate(u10_p ) + if(allocated(v10_p) ) deallocate(v10_p ) + if(allocated(exch_p) ) deallocate(exch_p ) + if(allocated(wstar_p) ) deallocate(wstar_p ) case("bl_mynn") - if(allocated(kbl_plume_p) ) deallocate(kbl_plume_p ) - - if(allocated(dx_p) ) deallocate(dx_p ) - if(allocated(ch_p) ) deallocate(ch_p ) - if(allocated(qsfc_p) ) deallocate(qsfc_p ) - if(allocated(rmol_p) ) deallocate(rmol_p ) - if(allocated(tsk_p) ) deallocate(tsk_p ) - if(allocated(maxwidthbl_p) ) deallocate(maxwidthbl_p ) - if(allocated(maxmfbl_p) ) deallocate(maxmfbl_p ) - if(allocated(zbl_plume_p) ) deallocate(zbl_plume_p ) - - if(allocated(cov_p) ) deallocate(cov_p ) - if(allocated(qke_p) ) deallocate(qke_p ) - if(allocated(qsq_p) ) deallocate(qsq_p ) - if(allocated(tsq_p) ) deallocate(tsq_p ) - if(allocated(qkeadv_p) ) deallocate(qkeadv_p ) - if(allocated(elpbl_p) ) deallocate(elpbl_p ) - if(allocated(tkepbl_p) ) deallocate(tkepbl_p ) - if(allocated(sh3d_p) ) deallocate(sh3d_p ) - if(allocated(sm3d_p) ) deallocate(sm3d_p ) - if(allocated(dqke_p) ) deallocate(dqke_p ) - if(allocated(qbuoy_p) ) deallocate(qbuoy_p ) - if(allocated(qdiss_p) ) deallocate(qdiss_p ) - if(allocated(qshear_p) ) deallocate(qshear_p ) - if(allocated(qwt_p) ) deallocate(qwt_p ) - if(allocated(qcbl_p) ) deallocate(qcbl_p ) - if(allocated(qibl_p) ) deallocate(qibl_p ) - if(allocated(cldfrabl_p) ) deallocate(cldfrabl_p ) - if(allocated(edmfa_p) ) deallocate(edmfa_p ) - if(allocated(edmfw_p) ) deallocate(edmfw_p ) - if(allocated(edmfqt_p) ) deallocate(edmfqt_p ) - if(allocated(edmfthl_p) ) deallocate(edmfthl_p ) - if(allocated(edmfent_p) ) deallocate(edmfent_p ) - if(allocated(edmfqc_p) ) deallocate(edmfqc_p ) - if(allocated(subthl_p) ) deallocate(subthl_p ) - if(allocated(subqv_p) ) deallocate(subqv_p ) - if(allocated(detthl_p) ) deallocate(detthl_p ) - if(allocated(detqv_p) ) deallocate(detqv_p ) + if(allocated(kbl_plume_p) ) deallocate(kbl_plume_p ) + if(allocated(dx_p) ) deallocate(dx_p ) + if(allocated(ch_p) ) deallocate(ch_p ) + if(allocated(qsfc_p) ) deallocate(qsfc_p ) + if(allocated(rmol_p) ) deallocate(rmol_p ) + if(allocated(tsk_p) ) deallocate(tsk_p ) + if(allocated(maxwidthbl_p)) deallocate(maxwidthbl_p) + if(allocated(maxmfbl_p) ) deallocate(maxmfbl_p ) + if(allocated(zbl_plume_p) ) deallocate(zbl_plume_p ) + + if(allocated(cov_p) ) deallocate(cov_p ) + if(allocated(qke_p) ) deallocate(qke_p ) + if(allocated(qsq_p) ) deallocate(qsq_p ) + if(allocated(tsq_p) ) deallocate(tsq_p ) + if(allocated(qkeadv_p) ) deallocate(qkeadv_p ) + if(allocated(elpbl_p) ) deallocate(elpbl_p ) + if(allocated(tkepbl_p) ) deallocate(tkepbl_p ) + if(allocated(sh3d_p) ) deallocate(sh3d_p ) + if(allocated(sm3d_p) ) deallocate(sm3d_p ) + if(allocated(dqke_p) ) deallocate(dqke_p ) + if(allocated(qbuoy_p) ) deallocate(qbuoy_p ) + if(allocated(qdiss_p) ) deallocate(qdiss_p ) + if(allocated(qshear_p) ) deallocate(qshear_p ) + if(allocated(qwt_p) ) deallocate(qwt_p ) + if(allocated(qcbl_p) ) deallocate(qcbl_p ) + if(allocated(qibl_p) ) deallocate(qibl_p ) + if(allocated(cldfrabl_p) ) deallocate(cldfrabl_p ) + if(allocated(edmfa_p) ) deallocate(edmfa_p ) + if(allocated(edmfw_p) ) deallocate(edmfw_p ) + if(allocated(edmfqt_p) ) deallocate(edmfqt_p ) + if(allocated(edmfthl_p) ) deallocate(edmfthl_p ) + if(allocated(edmfent_p) ) deallocate(edmfent_p ) + if(allocated(edmfqc_p) ) deallocate(edmfqc_p ) + if(allocated(subthl_p) ) deallocate(subthl_p ) + if(allocated(subqv_p) ) deallocate(subqv_p ) + if(allocated(detthl_p) ) deallocate(detthl_p ) + if(allocated(detqv_p) ) deallocate(detqv_p ) !additional tendencies: - if(allocated(rqsblten_p) ) deallocate(rqsblten_p ) - if(allocated(rniblten_p) ) deallocate(rniblten_p ) + if(allocated(rqsblten_p) ) deallocate(rqsblten_p ) + if(allocated(rncblten_p) ) deallocate(rncblten_p ) + if(allocated(rniblten_p) ) deallocate(rniblten_p ) + if(allocated(rnifablten_p)) deallocate(rnifablten_p) + if(allocated(rnwfablten_p)) deallocate(rnwfablten_p) !deallocation of additional arrays: if(allocated(pattern_spp_pbl)) deallocate(pattern_spp_pbl) @@ -485,8 +488,11 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it qshear_p(i,k,j) = 0._RKIND qwt_p(i,k,j) = 0._RKIND - rqsblten_p(i,k,j) = 0._RKIND - rniblten_p(i,k,j) = 0._RKIND + rqsblten_p(i,k,j) = 0._RKIND + rncblten_p(i,k,j) = 0._RKIND + rniblten_p(i,k,j) = 0._RKIND + rnifablten_p(i,k,j) = 0._RKIND + rnwfablten_p(i,k,j) = 0._RKIND pattern_spp_pbl(i,k,j) = 0._RKIND enddo @@ -546,7 +552,7 @@ subroutine pbl_to_MPAS(configs,diag_physics,tend_physics,its,ite) real(kind=RKIND),dimension(:),pointer :: hpbl real(kind=RKIND),dimension(:,:),pointer:: kzh,kzm,kzq real(kind=RKIND),dimension(:,:),pointer:: rublten,rvblten,rthblten,rqvblten,rqcblten,rqiblten,rqsblten - real(kind=RKIND),dimension(:,:),pointer:: rniblten + real(kind=RKIND),dimension(:,:),pointer:: rncblten,rniblten,rnifablten,rnwfablten !local pointers for YSU scheme: real(kind=RKIND),dimension(:,:),pointer:: exch_h @@ -649,7 +655,7 @@ subroutine pbl_to_MPAS(configs,diag_physics,tend_physics,its,ite) call mpas_pool_get_array(diag_physics,'det_qv' ,det_qv ) call mpas_pool_get_array(tend_physics,'rqsblten' ,rqsblten ) - call mpas_pool_get_array(tend_physics,'rniblten' ,rniblten ) + do j = jts,jte do k = kts,kte @@ -682,12 +688,37 @@ subroutine pbl_to_MPAS(configs,diag_physics,tend_physics,its,ite) qshear(k,i) = qshear_p(i,k,j) qwt(k,i) = qwt_p(i,k,j) + rqsblten(k,i) = rqsblten_p(i,k,j) - rniblten(k,i) = rniblten_p(i,k,j) enddo enddo enddo + if(f_ni) then + call mpas_pool_get_array(tend_physics,'rniblten',rniblten) + do j = jts,jte + do k = kts,kte + do i = its,ite + rniblten(k,i) = rniblten_p(i,k,j) + enddo + enddo + enddo + endif + if(f_nc .and. f_nifa .and. f_nwfa) then + call mpas_pool_get_array(tend_physics,'rncblten' ,rncblten ) + call mpas_pool_get_array(tend_physics,'rnifablten',rnifablten) + call mpas_pool_get_array(tend_physics,'rnwfablten',rnwfablten) + do j = jts,jte + do k = kts,kte + do i = its,ite + rncblten(k,i) = rncblten_p(i,k,j) + rnifablten(k,i) = rnifablten_p(i,k,j) + rnwfablten(k,i) = rnwfablten_p(i,k,j) + enddo + enddo + enddo + endif + case default end select pbl_select @@ -713,10 +744,10 @@ subroutine init_pbl(configs) pbl_select: select case (trim(pbl_scheme)) case("bl_mynn") - call mpas_log_write('--- enter subroutine bl_mynn_init:') +! call mpas_log_write('--- enter subroutine bl_mynn_init:') call bl_mynn_init(cp,cpv,cice,cliq,ep_1,ep_2,gravity,karman,P0,R_d,R_v,svp1,svp2,svp3,svpt0, & xlf,xls,xlv,errmsg,errflg) - call mpas_log_write('--- end subroutine bl_mynn_mpas_init:') +! call mpas_log_write('--- end subroutine bl_mynn_init:') case default @@ -873,58 +904,60 @@ subroutine driver_pbl(itimestep,configs,mesh,sfc_input,diag_physics,tend_physics call mpas_timer_start('bl_mynn') call mynn_bl_driver( & - f_qc = f_qc , f_qi = f_qi , f_qs = f_qs , & - f_qoz = f_qoz , f_nc = f_nc , f_ni = f_ni , & - f_nifa = f_nifa , f_nwfa = f_nwfa , f_nbca = f_nbca , & - icloud_bl = icloud_bl , delt = dt_pbl , dx = dx_p , & - xland = xland_p , ps = psfc_p , ts = tsk_p , & - qsfc = qsfc_p , ust = ust_p , ch = ch_p , & - hfx = hfx_p , qfx = qfx_p , rmol = rmol_p , & - wspd = wspd_p , znt = znt_p , uoce = uoce_p , & - voce = voce_p , dz = dz_p , u = u_p , & - v = v_p , w = w_p , th = th_p , & - tt = t_p , p = pres_hyd_p , exner = pi_p , & - rho = rho_p , qv = qv_p , qc = qc_p , & - qi = qi_p , qs = qs_p , ni = ni_p , & - rthraten = rthraten_p , pblh = hpbl_p , kpbl = kpbl_p , & - cldfra_bl = cldfrabl_p , qc_bl = qcbl_p , qi_bl = qibl_p , & - maxwidth = maxwidthbl_p , maxmf = maxmfbl_p , ktop_plume = kbl_plume_p , & - ztop_plume = zbl_plume_p , dqke = dqke_p , qke_adv = qkeadv_p , & - tsq = tsq_p , qsq = qsq_p , cov = cov_p , & - el_pbl = elpbl_p , rublten = rublten_p , rvblten = rvblten_p , & - rthblten = rthblten_p , rqvblten = rqvblten_p , rqcblten = rqcblten_p , & - rqiblten = rqiblten_p , rqsblten = rqsblten_p , rniblten = rniblten_p , & - edmf_a = edmfa_p , edmf_w = edmfw_p , edmf_qt = edmfqt_p , & - edmf_thl = edmfthl_p , edmf_ent = edmfent_p , edmf_qc = edmfqc_p , & - sub_thl = subthl_p , sub_sqv = subqv_p , det_thl = detthl_p , & - det_sqv = detqv_p , exch_h = kzh_p , exch_m = kzm_p , & - qke = qke_p , qwt = qwt_p , qshear = qshear_p , & - qbuoy = qbuoy_p , qdiss = qdiss_p , sh3d = sh3d_p , & - sm3d = sm3d_p , spp_pbl = spp_pbl , pattern_spp = pattern_spp_pbl , & - do_restart = config_do_restart , & - do_DAcycling = config_do_DAcycling , & - initflag = initflag , & - bl_mynn_tkeadvect = bl_mynn_tkeadvect , & - bl_mynn_tkebudget = bl_mynn_tkebudget , & - bl_mynn_cloudpdf = bl_mynn_cloudpdf , & - bl_mynn_mixlength = bl_mynn_mixlength , & - bl_mynn_closure = bl_mynn_closure , & - bl_mynn_stfunc = bl_mynn_stfunc , & - bl_mynn_topdown = bl_mynn_topdown , & - bl_mynn_scaleaware = bl_mynn_scaleaware , & - bl_mynn_dheat_opt = bl_mynn_dheat_opt , & - bl_mynn_edmf = bl_mynn_edmf , & - bl_mynn_edmf_dd = bl_mynn_edmf_dd , & - bl_mynn_edmf_mom = bl_mynn_edmf_mom , & - bl_mynn_edmf_tke = bl_mynn_edmf_tke , & - bl_mynn_output = bl_mynn_edmf_output , & - bl_mynn_mixscalars = bl_mynn_mixscalars , & - bl_mynn_cloudmix = bl_mynn_cloudmix , & - bl_mynn_mixqt = bl_mynn_mixqt , & - ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & - ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & - its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte , & - errmsg = errmsg , errflg = errflg & + f_qc = f_qc , f_qi = f_qi , f_qs = f_qs , & + f_qoz = f_qoz , f_nc = f_nc , f_ni = f_ni , & + f_nifa = f_nifa , f_nwfa = f_nwfa , f_nbca = f_nbca , & + icloud_bl = icloud_bl , delt = dt_pbl , dx = dx_p , & + xland = xland_p , ps = psfc_p , ts = tsk_p , & + qsfc = qsfc_p , ust = ust_p , ch = ch_p , & + hfx = hfx_p , qfx = qfx_p , rmol = rmol_p , & + wspd = wspd_p , znt = znt_p , uoce = uoce_p , & + voce = voce_p , dz = dz_p , u = u_p , & + v = v_p , w = w_p , th = th_p , & + tt = t_p , p = pres_hyd_p , exner = pi_p , & + rho = rho_p , qv = qv_p , qc = qc_p , & + qi = qi_p , qs = qs_p , nc = nc_p , & + ni = ni_p , nifa = nifa_p , nwfa = nwfa_p , & + rthraten = rthraten_p , pblh = hpbl_p , kpbl = kpbl_p , & + cldfra_bl = cldfrabl_p , qc_bl = qcbl_p , qi_bl = qibl_p , & + maxwidth = maxwidthbl_p , maxmf = maxmfbl_p , ktop_plume = kbl_plume_p , & + ztop_plume = zbl_plume_p , dqke = dqke_p , qke_adv = qkeadv_p , & + tsq = tsq_p , qsq = qsq_p , cov = cov_p , & + el_pbl = elpbl_p , rublten = rublten_p , rvblten = rvblten_p , & + rthblten = rthblten_p , rqvblten = rqvblten_p , rqcblten = rqcblten_p , & + rqiblten = rqiblten_p , rqsblten = rqsblten_p , rncblten = rncblten_p , & + rniblten = rniblten_p , rnifablten = rnifablten_p , rnwfablten = rnwfablten_p , & + edmf_a = edmfa_p , edmf_w = edmfw_p , edmf_qt = edmfqt_p , & + edmf_thl = edmfthl_p , edmf_ent = edmfent_p , edmf_qc = edmfqc_p , & + sub_thl = subthl_p , sub_sqv = subqv_p , det_thl = detthl_p , & + det_sqv = detqv_p , exch_h = kzh_p , exch_m = kzm_p , & + qke = qke_p , qwt = qwt_p , qshear = qshear_p , & + qbuoy = qbuoy_p , qdiss = qdiss_p , sh3d = sh3d_p , & + sm3d = sm3d_p , spp_pbl = spp_pbl , pattern_spp = pattern_spp_pbl , & + do_restart = config_do_restart , & + do_DAcycling = config_do_DAcycling , & + initflag = initflag , & + bl_mynn_tkeadvect = bl_mynn_tkeadvect , & + bl_mynn_tkebudget = bl_mynn_tkebudget , & + bl_mynn_cloudpdf = bl_mynn_cloudpdf , & + bl_mynn_mixlength = bl_mynn_mixlength , & + bl_mynn_closure = bl_mynn_closure , & + bl_mynn_stfunc = bl_mynn_stfunc , & + bl_mynn_topdown = bl_mynn_topdown , & + bl_mynn_scaleaware = bl_mynn_scaleaware , & + bl_mynn_dheat_opt = bl_mynn_dheat_opt , & + bl_mynn_edmf = bl_mynn_edmf , & + bl_mynn_edmf_dd = bl_mynn_edmf_dd , & + bl_mynn_edmf_mom = bl_mynn_edmf_mom , & + bl_mynn_edmf_tke = bl_mynn_edmf_tke , & + bl_mynn_output = bl_mynn_edmf_output , & + bl_mynn_mixscalars = bl_mynn_mixscalars , & + bl_mynn_cloudmix = bl_mynn_cloudmix , & + bl_mynn_mixqt = bl_mynn_mixqt , & + ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & + ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & + its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte , & + errmsg = errmsg , errflg = errflg & ) call mpas_timer_stop('bl_mynn') ! call mpas_log_write('--- exit subroutine mynn_bl_driver:') diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_radiation_lw.F b/src/core_atmosphere/physics/mpas_atmphys_driver_radiation_lw.F index 60dbebb3e..d4d271e50 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_radiation_lw.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_radiation_lw.F @@ -9,7 +9,7 @@ module mpas_atmphys_driver_radiation_lw use mpas_kind_types use mpas_pool_routines - use mpas_timer, only : mpas_timer_start, mpas_timer_stop + use mpas_timer,only: mpas_timer_start,mpas_timer_stop use mpas_atmphys_driver_radiation_sw, only: radconst use mpas_atmphys_constants @@ -138,7 +138,6 @@ subroutine allocate_radiation_lw(configs,xtime_s) if(.not.allocated(rthratenlw_p) ) allocate(rthratenlw_p(ims:ime,kms:kme,jms:jme) ) radiation_lw_select: select case (trim(radt_lw_scheme)) - case("rrtmg_lw") if(.not.allocated(recloud_p) ) allocate(recloud_p(ims:ime,kms:kme,jms:jme) ) @@ -202,7 +201,6 @@ subroutine allocate_radiation_lw(configs,xtime_s) endif case default - end select radiation_lw_select end subroutine allocate_radiation_lw @@ -243,7 +241,6 @@ subroutine deallocate_radiation_lw(configs) if(allocated(rthratenlw_p) ) deallocate(rthratenlw_p ) radiation_lw_select: select case (trim(radt_lw_scheme)) - case("rrtmg_lw") if(allocated(recloud_p) ) deallocate(recloud_p ) if(allocated(reice_p) ) deallocate(reice_p ) @@ -292,7 +289,6 @@ subroutine deallocate_radiation_lw(configs) if(allocated(aerosolcp_p) ) deallocate(aerosolcp_p ) case default - end select radiation_lw_select end subroutine deallocate_radiation_lw @@ -320,9 +316,9 @@ subroutine radiation_lw_from_MPAS(xtime_s,configs,mesh,state,time_lev,diag_physi !local pointers: logical,pointer:: config_o3climatology + logical,pointer:: config_microp_re character(len=StrKIND),pointer:: radt_lw_scheme character(len=StrKIND),pointer:: microp_scheme - logical,pointer:: config_microp_re real(kind=RKIND),dimension(:),pointer :: latCell,lonCell real(kind=RKIND),dimension(:),pointer :: skintemp,snow,xice,xland @@ -339,10 +335,10 @@ subroutine radiation_lw_from_MPAS(xtime_s,configs,mesh,state,time_lev,diag_physi !----------------------------------------------------------------------------------------------------------------- + call mpas_pool_get_config(configs,'config_microp_re' ,config_microp_re ) call mpas_pool_get_config(configs,'config_o3climatology' ,config_o3climatology) call mpas_pool_get_config(configs,'config_radt_lw_scheme',radt_lw_scheme ) call mpas_pool_get_config(configs,'config_microp_scheme' ,microp_scheme ) - call mpas_pool_get_config(configs,'config_microp_re' ,config_microp_re ) call mpas_pool_get_array(mesh,'latCell',latCell) call mpas_pool_get_array(mesh,'lonCell',lonCell) @@ -415,10 +411,9 @@ subroutine radiation_lw_from_MPAS(xtime_s,configs,mesh,state,time_lev,diag_physi enddo radiation_lw_select: select case (trim(radt_lw_scheme)) - case("rrtmg_lw") microp_select: select case(microp_scheme) - case("mp_thompson","mp_wsm6") + case("mp_thompson","mp_thompson_aerosols","mp_wsm6") if(config_microp_re) then call mpas_pool_get_array(diag_physics,'re_cloud',re_cloud) call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) @@ -610,7 +605,6 @@ subroutine radiation_lw_from_MPAS(xtime_s,configs,mesh,state,time_lev,diag_physi enddo case default - end select radiation_lw_select end subroutine radiation_lw_from_MPAS @@ -629,9 +623,9 @@ subroutine radiation_lw_to_MPAS(configs,diag_physics,tend_physics,its,ite) integer,intent(in):: its,ite !local pointers: + logical,pointer:: config_microp_re character(len=StrKIND),pointer:: radt_lw_scheme character(len=StrKIND),pointer:: microp_scheme - logical,pointer:: config_microp_re real(kind=RKIND),dimension(:),pointer :: glw,lwcf,lwdnb,lwdnbc,lwdnt,lwdntc,lwupb,lwupbc, & lwupt,lwuptc,olrtoa @@ -645,9 +639,9 @@ subroutine radiation_lw_to_MPAS(configs,diag_physics,tend_physics,its,ite) !----------------------------------------------------------------------------------------------------------------- - call mpas_pool_get_config(configs,'config_radt_lw_scheme',radt_lw_scheme ) - call mpas_pool_get_config(configs,'config_microp_scheme' ,microp_scheme ) call mpas_pool_get_config(configs,'config_microp_re' ,config_microp_re) + call mpas_pool_get_config(configs,'config_microp_scheme' ,microp_scheme ) + call mpas_pool_get_config(configs,'config_radt_lw_scheme',radt_lw_scheme ) call mpas_pool_get_array(diag_physics,'glw' ,glw ) call mpas_pool_get_array(diag_physics,'lwcf' ,lwcf ) @@ -690,7 +684,7 @@ subroutine radiation_lw_to_MPAS(configs,diag_physics,tend_physics,its,ite) case("rrtmg_lw") microp_select: select case(microp_scheme) - case("mp_thompson","mp_wsm6") + case("mp_thompson","mp_thompson_aerosols","mp_wsm6") call mpas_pool_get_array(diag_physics,'rre_cloud',rre_cloud) call mpas_pool_get_array(diag_physics,'rre_ice' ,rre_ice ) call mpas_pool_get_array(diag_physics,'rre_snow' ,rre_snow ) @@ -795,7 +789,6 @@ subroutine init_radiation_lw(dminfo,configs,mesh,atm_input,diag,diag_physics,sta call mpas_pool_get_config(configs,'config_radt_lw_scheme',radt_lw_scheme) radiation_lw_select: select case (trim(radt_lw_scheme)) - case ("rrtmg_lw") call rrtmg_initlw_forMPAS(dminfo) @@ -803,7 +796,6 @@ subroutine init_radiation_lw(dminfo,configs,mesh,atm_input,diag,diag_physics,sta call camradinit(dminfo,mesh,atm_input,diag,diag_physics,state,time_lev) case default - end select radiation_lw_select end subroutine init_radiation_lw @@ -847,12 +839,11 @@ subroutine driver_radiation_lw(xtime_s,configs,mesh,state,time_lev,diag_physics, !call to longwave radiation scheme: radiation_lw_select: select case (trim(radt_lw_scheme)) - case ("rrtmg_lw") o3input = 0 if(config_o3climatology) o3input = 2 - call mpas_timer_start('RRTMG_lw') + call mpas_timer_start('rrtmg_lwrad') call rrtmg_lwrad( & p3d = pres_hyd_p , p8w = pres2_hyd_p , pi3d = pi_p , & t3d = t_p , t8w = t2_p , dz8w = dz_p , & @@ -874,7 +865,7 @@ subroutine driver_radiation_lw(xtime_s,configs,mesh,state,time_lev,diag_physics, ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) - call mpas_timer_stop('RRTMG_lw') + call mpas_timer_stop('rrtmg_lwrad') case ("cam_lw") xtime_m = xtime_s/60. @@ -941,7 +932,6 @@ subroutine driver_radiation_lw(xtime_s,configs,mesh,state,time_lev,diag_physics, call mpas_timer_stop('CAMRAD_lw') case default - end select radiation_lw_select !copy local arrays to MPAS grid: diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_radiation_sw.F b/src/core_atmosphere/physics/mpas_atmphys_driver_radiation_sw.F index a69553891..10171239d 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_radiation_sw.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_radiation_sw.F @@ -9,7 +9,7 @@ module mpas_atmphys_driver_radiation_sw use mpas_kind_types use mpas_pool_routines - use mpas_timer, only : mpas_timer_start, mpas_timer_stop + use mpas_timer,only: mpas_timer_start,mpas_timer_stop use mpas_atmphys_constants use mpas_atmphys_manager, only: gmt,curr_julday,julday,year @@ -18,6 +18,8 @@ module mpas_atmphys_driver_radiation_sw use mpas_atmphys_vars !wrf physics: + use module_mp_thompson_aerosols + use module_ra_rrtmg_sw_aerosols use module_ra_cam use module_ra_rrtmg_sw @@ -87,6 +89,14 @@ module mpas_atmphys_driver_radiation_sw ! Laura D. Fowler (laura@ucar.edu) / 2023-04-21. ! * removed the variables f_qv and f_qg in the call to subroutine camrad. ! Laura D. Fowler (laura@ucar.edu) / 2024-02-13. +! * in subroutine radiation_sw_from_MPAS, added the calculation of the optical properties of "water-friendly" and +! "ice-friendly" aerosols from the Thompson cloud microphysics scheme for use in the RRTMG short-wave radiation +! code. +! Laura D. Fowler (laura@ucar.edu) / 2024-05-16. +! * in subroutine driver_radiation_sw, modified the argument list in the call to subroutine rrtmg_sw to include +! the optical properties of "water-friendly" and "ice-friendly" aerosols from the Thompson cloud microphysics +! scheme. +! Laura D. Fowler (laura@ucar.edu) / 2024-05-16. contains @@ -101,10 +111,12 @@ subroutine allocate_radiation_sw(configs,xtime_s) real(kind=RKIND),intent(in):: xtime_s !local pointers: - character(len=StrKIND),pointer:: radt_sw_scheme + character(len=StrKIND),pointer:: mp_scheme, & + radt_sw_scheme !----------------------------------------------------------------------------------------------------------------- + call mpas_pool_get_config(configs,'config_microp_scheme' ,mp_scheme ) call mpas_pool_get_config(configs,'config_radt_sw_scheme',radt_sw_scheme) if(.not.allocated(f_ice) ) allocate(f_ice(ims:ime,kms:kme,jms:jme) ) @@ -134,7 +146,6 @@ subroutine allocate_radiation_sw(configs,xtime_s) if(.not.allocated(rthratensw_p) ) allocate(rthratensw_p(ims:ime,kms:kme,jms:jme) ) radiation_sw_select: select case (trim(radt_sw_scheme)) - case("rrtmg_sw") if(.not.allocated(recloud_p) ) allocate(recloud_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(reice_p) ) allocate(reice_p(ims:ime,kms:kme,jms:jme) ) @@ -161,6 +172,20 @@ subroutine allocate_radiation_sw(configs,xtime_s) if(.not.allocated(pin_p) ) allocate(pin_p(num_oznlevels) ) if(.not.allocated(o3clim_p) ) allocate(o3clim_p(ims:ime,1:num_oznlevels,jms:jme)) + if(.not.allocated(tauaer_p) ) allocate(tauaer_p(ims:ime,kms:kme,jms:jme,nbndsw) ) + if(.not.allocated(ssaaer_p) ) allocate(ssaaer_p(ims:ime,kms:kme,jms:jme,nbndsw) ) + if(.not.allocated(asyaer_p) ) allocate(asyaer_p(ims:ime,kms:kme,jms:jme,nbndsw) ) + + aerosol_select: select case(mp_scheme) + case("mp_thompson_aerosols") + if(.not.allocated(ht_p) ) allocate(ht_p(ims:ime,jms:jme) ) + if(.not.allocated(taer_type_p)) allocate(taer_type_p(ims:ime,jms:jme)) + if(.not.allocated(taod5502d_p)) allocate(taod5502d_p(ims:ime,jms:jme)) + if(.not.allocated(taod5503d_p)) allocate(taod5503d_p(ims:ime,kms:kme,jms:jme)) + + case default + end select aerosol_select + case("cam_sw") if(.not.allocated(glw_p) ) allocate(glw_p(ims:ime,jms:jme) ) if(.not.allocated(lwcf_p) ) allocate(lwcf_p(ims:ime,jms:jme) ) @@ -217,10 +242,12 @@ subroutine deallocate_radiation_sw(configs) type(mpas_pool_type),intent(in):: configs !local pointers: - character(len=StrKIND),pointer:: radt_sw_scheme + character(len=StrKIND),pointer:: mp_scheme, & + radt_sw_scheme !----------------------------------------------------------------------------------------------------------------- + call mpas_pool_get_config(configs,'config_microp_scheme' ,mp_scheme ) call mpas_pool_get_config(configs,'config_radt_sw_scheme',radt_sw_scheme) if(allocated(f_ice) ) deallocate(f_ice ) @@ -247,7 +274,6 @@ subroutine deallocate_radiation_sw(configs) if(allocated(rthratensw_p) ) deallocate(rthratensw_p ) radiation_sw_select: select case (trim(radt_sw_scheme)) - case("rrtmg_sw") if(allocated(recloud_p) ) deallocate(recloud_p ) if(allocated(reice_p) ) deallocate(reice_p ) @@ -274,6 +300,20 @@ subroutine deallocate_radiation_sw(configs) if(allocated(pin_p) ) deallocate(pin_p ) if(allocated(o3clim_p) ) deallocate(o3clim_p ) + if(allocated(tauaer_p) ) deallocate(tauaer_p ) + if(allocated(ssaaer_p) ) deallocate(ssaaer_p ) + if(allocated(asyaer_p) ) deallocate(asyaer_p ) + + aerosol_select: select case(mp_scheme) + case("mp_thompson","mp_thompson_aerosols") + if(allocated(ht_p) ) deallocate(ht_p ) + if(allocated(taer_type_p)) deallocate(taer_type_p) + if(allocated(taod5502d_p)) deallocate(taod5502d_p) + if(allocated(taod5503d_p)) deallocate(taod5503d_p) + + case default + end select aerosol_select + case("cam_sw") if(allocated(pin_p) ) deallocate(pin_p ) if(allocated(m_hybi_p) ) deallocate(m_hybi_p ) @@ -334,24 +374,28 @@ subroutine radiation_sw_from_MPAS(configs,mesh,state,time_lev,diag_physics,atm_i !local pointers: logical,pointer:: config_o3climatology + logical,pointer:: config_microp_re character(len=StrKIND),pointer:: radt_sw_scheme character(len=StrKIND),pointer:: microp_scheme - logical,pointer:: config_microp_re + real(kind=RKIND),dimension(:),pointer :: latCell,lonCell real(kind=RKIND),dimension(:),pointer :: skintemp,snow,xice,xland real(kind=RKIND),dimension(:),pointer :: m_ps,pin real(kind=RKIND),dimension(:),pointer :: sfc_albedo,sfc_emiss + real(kind=RKIND),dimension(:),pointer :: taod5502d + real(kind=RKIND),dimension(:,:),pointer :: zgrid real(kind=RKIND),dimension(:,:),pointer :: cldfrac,m_hybi,o3clim real(kind=RKIND),dimension(:,:),pointer :: re_cloud,re_ice,re_snow + real(kind=RKIND),dimension(:,:),pointer :: taod5503d real(kind=RKIND),dimension(:,:,:),pointer:: aerosols,ozmixm !----------------------------------------------------------------------------------------------------------------- + call mpas_pool_get_config(configs,'config_microp_re' ,config_microp_re ) call mpas_pool_get_config(configs,'config_o3climatology' ,config_o3climatology) call mpas_pool_get_config(configs,'config_radt_sw_scheme',radt_sw_scheme ) call mpas_pool_get_config(configs,'config_microp_scheme' ,microp_scheme ) - call mpas_pool_get_config(configs,'config_microp_re' ,config_microp_re ) call mpas_pool_get_array(mesh,'latCell',latCell) call mpas_pool_get_array(mesh,'lonCell',lonCell) @@ -416,6 +460,9 @@ subroutine radiation_sw_from_MPAS(configs,mesh,state,time_lev,diag_physics,atm_i swupbc_p(i,j) = 0.0_RKIND swupt_p(i,j) = 0.0_RKIND swuptc_p(i,j) = 0.0_RKIND + swddir_p(i,j) = 0.0_RKIND + swddni_p(i,j) = 0.0_RKIND + swddif_p(i,j) = 0.0_RKIND enddo do k = kts,kte @@ -440,13 +487,27 @@ subroutine radiation_sw_from_MPAS(configs,mesh,state,time_lev,diag_physics,atm_i case default end select radiation_sw_select0 + aer_opt = 0 + do n = 1,nbndsw + do j = jts,jte + do k = kts,kte + do i = its,ite + tauaer_p(i,k,j,n) = 0._RKIND + ssaaer_p(i,k,j,n) = 1._RKIND + asyaer_p(i,k,j,n) = 0._RKIND + enddo + enddo + enddo + enddo + + + radiation_sw_select: select case (trim(radt_sw_scheme)) case("rrtmg_sw") - microp_select: select case(microp_scheme) - case("mp_thompson","mp_wsm6") + case("mp_thompson","mp_thompson_aerosols","mp_wsm6") if(config_microp_re) then call mpas_pool_get_array(diag_physics,'re_cloud',re_cloud) call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) @@ -480,6 +541,63 @@ subroutine radiation_sw_from_MPAS(configs,mesh,state,time_lev,diag_physics,atm_i case default end select microp_select + aerosol_select: select case(microp_scheme) + case("mp_thompson_aerosols") + call mpas_pool_get_array(mesh,'zgrid',zgrid) + call mpas_pool_get_array(diag_physics,'taod5502d',taod5502d) + call mpas_pool_get_array(diag_physics,'taod5503d',taod5503d) + + aer_opt = 3 + do j = jts,jte + do i = its,ite + ht_p(i,j) = zgrid(1,i) + if(xland_p(i,j)==1._RKIND) then + taer_type_p(i,j) = 1 + elseif(xland_p(i,j)==2._RKIND) then + taer_type_p(i,j) = 3 + endif + enddo + enddo + + !--- calculation of the 550 nm optical depth of the water- and ice-friendly aerosols: + call gt_aod( & + p_phy = pres_hyd_p , dz8w = dz_p , t_phy = t_p , qvapor = qv_p , & + nwfa = nwfa_p , nifa = nifa_p , taod5503d = taod5503d_p , & + ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & + its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & + ) + + do j = jts,jte + do i = its,ite + taod5502d_p(i,j) = 0._RKIND + do k = kts,kte + taod5502d_p(i,j) = taod5502d_p(i,j) + taod5503d_p(i,k,j) + taod5503d(k,i) = taod5503d_p(i,k,j) + enddo + taod5502d(i) = taod5502d_p(i,j) + enddo + enddo + + !--- calculation of the spectral optical depth, single-scattering albedo, and asymmetry factor + !as a function of the 550 nm optical depth of the water- and ice-friendly aerosols: + call calc_aerosol_rrtmg_sw( & + ht = ht_p , dz8w = dz_p , & + p = pres_hyd_p , t3d = t_p , & + qv3d = qv_p , tauaer = tauaer_p , & + ssaaer = ssaaer_p , asyaer = asyaer_p , & + aod5502d = taod5502d_p , aod5503d = taod5503d_p , & + aer_type = taer_type_p , & + aer_aod550_opt = taer_aod550_opt , aer_angexp_opt = taer_angexp_opt , & + aer_ssa_opt = taer_ssa_opt , aer_asy_opt = taer_asy_opt , & + aer_aod550_val = aer_aod550_val , aer_angexp_val = aer_angexp_val , & + aer_ssa_val = aer_ssa_val , aer_asy_val = aer_asy_val , & + ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & + its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & + ) + + case default + end select aerosol_select + do j = jts,jte do k = kts,kte+2 do i = its,ite @@ -601,7 +719,6 @@ subroutine radiation_sw_from_MPAS(configs,mesh,state,time_lev,diag_physics,atm_i enddo case default - end select radiation_sw_select end subroutine radiation_sw_from_MPAS @@ -660,6 +777,9 @@ subroutine radiation_sw_to_MPAS(configs,diag_physics,tend_physics,its,ite) swupbc(i) = swupbc_p(i,j) swupt(i) = swupt_p(i,j) swuptc(i) = swuptc_p(i,j) + swddir(i) = swddir_p(i,j) + swddni(i) = swddni_p(i,j) + swddif(i) = swddif_p(i,j) enddo do k = kts,kte @@ -687,7 +807,6 @@ subroutine radiation_sw_to_MPAS(configs,diag_physics,tend_physics,its,ite) enddo case default end select radiation_sw_select - !call mpas_log_write('--- enter subroutine radiation_sw_to_MPAS:') !call mpas_log_write(' ') @@ -719,7 +838,6 @@ subroutine init_radiation_sw(dminfo,configs,mesh,atm_input,diag,diag_physics,sta !call to shortwave radiation scheme: radiation_sw_select: select case (trim(radt_sw_scheme)) - case ("rrtmg_sw") call rrtmg_initsw_forMPAS(dminfo) @@ -727,7 +845,6 @@ subroutine init_radiation_sw(dminfo,configs,mesh,atm_input,diag,diag_physics,sta call camradinit(dminfo,mesh,atm_input,diag,diag_physics,state,time_lev) case default - end select radiation_sw_select end subroutine init_radiation_sw @@ -795,12 +912,11 @@ subroutine driver_radiation_sw(itimestep,configs,mesh,state,time_lev,diag_physic !call to shortwave radiation scheme: radiation_sw_select: select case (trim(radt_sw_scheme)) - case ("rrtmg_sw") o3input = 0 if(config_o3climatology) o3input = 2 - call mpas_timer_start('RRTMG_sw') + call mpas_timer_start('rrtmg_swrad') call rrtmg_swrad( & p3d = pres_hyd_p , p8w = pres2_hyd_p , pi3d = pi_p , & t3d = t_p , t8w = t2_p , dz8w = dz_p , & @@ -817,18 +933,20 @@ subroutine driver_radiation_sw(itimestep,configs,mesh,state,time_lev,diag_physic o3clim = o3clim_p , gsw = gsw_p , swcf = swcf_p , & rthratensw = rthratensw_p , has_reqc = has_reqc , has_reqi = has_reqi , & has_reqs = has_reqs , re_cloud = recloud_p , re_ice = reice_p , & - re_snow = resnow_p , swupt = swupt_p , swuptc = swuptc_p , & - swdnt = swdnt_p , swdntc = swdntc_p , swupb = swupb_p , & - swupbc = swupbc_p , swdnb = swdnb_p , swdnbc = swdnbc_p , & - swddir = swddir_p , swddni = swddni_p , swddif = swddif_p , & + re_snow = resnow_p , aer_opt = aer_opt , tauaer3d = tauaer_p , & + ssaaer3d = ssaaer_p , asyaer3d = asyaer_p , swupt = swupt_p , & + swuptc = swuptc_p , swdnt = swdnt_p , swdntc = swdntc_p , & + swupb = swupb_p , swupbc = swupbc_p , swdnb = swdnb_p , & + swdnbc = swdnbc_p , swddir = swddir_p , swddni = swddni_p , & + swddif = swddif_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) - call mpas_timer_stop('RRTMG_sw') + call mpas_timer_stop('rrtmg_swrad') case ("cam_sw") - call mpas_timer_start('CAMRAD_sw') + call mpas_timer_start('camrad_sw') call camrad( dolw = .false. , dosw = .true. , & p_phy = pres_hyd_p , p8w = pres2_hyd_p , & pi_phy = pi_p , t_phy = t_p , & @@ -876,10 +994,9 @@ subroutine driver_radiation_sw(itimestep,configs,mesh,state,time_lev,diag_physic ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) - call mpas_timer_stop('CAMRAD_sw') + call mpas_timer_stop('camrad_sw') case default - end select radiation_sw_select !copy local arrays to MPAS grid: diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_sfclayer.F b/src/core_atmosphere/physics/mpas_atmphys_driver_sfclayer.F index 845bdf285..e3d5501f4 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_sfclayer.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_sfclayer.F @@ -89,8 +89,6 @@ module mpas_atmphys_driver_sfclayer ! * updated the MYNN surface layer scheme to the sourcecode available from WRF version 4.6. ! Laura D. Fowler (laura@ucar.edu) / 2024-02-14. -! * coupling gust front speed from downdrafts with surface winds -! Saulo R. Freitas (saulo.freitas@inpe.br) / 2025-01-19 contains @@ -148,10 +146,8 @@ subroutine allocate_sfclayer(configs) if(.not.allocated(xland_p) ) allocate(xland_p(ims:ime,jms:jme) ) if(.not.allocated(zol_p) ) allocate(zol_p(ims:ime,jms:jme) ) if(.not.allocated(znt_p) ) allocate(znt_p(ims:ime,jms:jme) ) - + if(.not.allocated(sgsgustcu_p)) allocate(sgsgustcu_p(ims:ime,jms:jme) ) - if(.not.allocated(hfx_spr_p) ) allocate(hfx_spr_p(ims:ime,jms:jme) ) - if(.not.allocated(lh_spr_p) ) allocate(lh_spr_p(ims:ime,jms:jme) ) if(config_frac_seaice) then if(.not.allocated(sst_p) ) allocate(sst_p(ims:ime,jms:jme) ) @@ -286,9 +282,7 @@ subroutine deallocate_sfclayer(configs) if(allocated(zol_p) ) deallocate(zol_p ) if(allocated(znt_p) ) deallocate(znt_p ) - if(allocated(sgsgustcu_p)) deallocate(sgsgustcu_p) - if(allocated(hfx_spr_p) ) deallocate(hfx_spr_p ) - if(allocated(lh_spr_p) ) deallocate(lh_spr_p ) + if(allocated(sgsgustcu_p)) deallocate(sgsgustcu_p ) if(config_frac_seaice) then @@ -410,7 +404,8 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite, & real(kind=RKIND),dimension(:,:),pointer:: buoyx real(kind=RKIND),dimension(:,:,:),pointer:: scalars real :: wspd_local, factor1, factor2, gspd_local -!----------------------------------------------------------------------------------------------------------------- +!-srf: local variables and pointers specific to GF cumulus scheme: +!----------------------------------------------------------------------------------------------------------------- !input variables: call mpas_pool_get_config(configs,'config_frac_seaice' ,config_frac_seaice) @@ -448,7 +443,6 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite, & call mpas_pool_get_array(diag_physics,'znt' ,znt ) call mpas_pool_get_array(diag_physics,'zol' ,zol ) - do j = jts,jte do i = its,ite !input variables: @@ -488,8 +482,6 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite, & th2m_p(i,j) = 0._RKIND u10_p(i,j) = 0._RKIND v10_p(i,j) = 0._RKIND - hfx_spr_p(i,j)= 0._RKIND - lh_spr_p(i,j) = 0._RKIND !output variables (optional): cd_p(i,j) = 0._RKIND @@ -633,7 +625,7 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite, & call mpas_pool_get_array(diag_physics,'v2d2' ,v2d2 ) - if( (config_gf_gustf == 1 .or. config_gf_gustf == 2) .and. config_gf_cporg == 1) then + if(config_gf_gustf == 1 .and. config_gf_cporg == 1) then !--- coupled with the cold pool gustfront scheme call mpas_pool_get_dimension(state,'index_buoyx',index_buoyx) call mpas_pool_get_array(state,'scalars',scalars,time_lev) @@ -645,9 +637,7 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite, & do i = its,ite factor1 = min (mx_buoy2,buoyx(kts,i)) factor1 = min (factor1,mx_buoy2)/mx_buoy2 - !factor2 = atan((factor1-0.05*mx_buoy1/mx_buoy2)*5.) - factor2 = atan((factor1-2.00*mx_buoy1/mx_buoy2)*5.) - + factor2 = atan((factor1-0.05*mx_buoy1/mx_buoy2)*5.) factor2 = max (0.0,min(factor2,1.0)) wspd_local = sqrt(u_p(i,kts,j) *u_p(i,kts,j) + v_p(i,kts,j) *v_p(i,kts,j)) @@ -670,7 +660,7 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite, & enddo enddo - else if(config_gf_gustf == 3) then + else if(config_gf_gustf == 2) then !- gustiness parameterization based on Redelsperger et al (2000). !- using the downdraft mass flux from GF cumulus scheme (rmfxdncu) call mpas_pool_get_array(diag_physics,'rmfxdncu' ,rmfxdncu) @@ -700,7 +690,6 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite, & end select convection_select !-------------------------------------------------------------------------- - end subroutine sfclayer_from_MPAS !================================================================================================================= @@ -735,8 +724,6 @@ subroutine sfclayer_to_MPAS(configs,sfc_input,diag_physics,its,ite) !local pointers specific to mynn: real(kind=RKIND),dimension(:),pointer:: ch,qcg - real(kind=RKIND),dimension(:),pointer:: lh_spr,hfx_spr - !----------------------------------------------------------------------------------------------------------------- call mpas_pool_get_config(configs,'config_frac_seaice' ,config_frac_seaice) @@ -765,9 +752,6 @@ subroutine sfclayer_to_MPAS(configs,sfc_input,diag_physics,its,ite) call mpas_pool_get_array(diag_physics,'wspd' ,wspd ) call mpas_pool_get_array(diag_physics,'znt' ,znt ) call mpas_pool_get_array(diag_physics,'zol' ,zol ) - - call mpas_pool_get_array(diag_physics,'lh_spr' ,lh_spr ) - call mpas_pool_get_array(diag_physics,'hfx_spr',hfx_spr) !output variables: call mpas_pool_get_array(diag_physics,'q2' ,q2 ) @@ -776,9 +760,6 @@ subroutine sfclayer_to_MPAS(configs,sfc_input,diag_physics,its,ite) call mpas_pool_get_array(diag_physics,'u10' ,u10 ) call mpas_pool_get_array(diag_physics,'v10' ,v10 ) - call mpas_pool_get_array(diag_physics,'hfx_spr',hfx_spr) - call mpas_pool_get_array(diag_physics,'lh_spr' ,lh_spr ) - !output variables (optional): call mpas_pool_get_array(diag_physics,'cd' ,cd ) call mpas_pool_get_array(diag_physics,'cda' ,cda ) @@ -823,9 +804,6 @@ subroutine sfclayer_to_MPAS(configs,sfc_input,diag_physics,its,ite) th2m(i) = th2m_p(i,j) u10(i) = u10_p(i,j) v10(i) = v10_p(i,j) - hfx_spr(i)= hfx_spr_p(i,j) - lh_spr(i) = lh_spr_p(i,j) - !output variables (optional): cd(i) = cd_p(i,j) cda(i) = cda_p(i,j) @@ -981,8 +959,6 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite character(len=StrKIND),pointer:: sfclayer_scheme real(kind=RKIND),dimension(:),pointer:: areaCell - integer,pointer:: config_gf_gustf ! parameter to couple the gustfront speed with the - ! surface layer fluxes !local variables: integer:: initflag real(kind=RKIND):: dx @@ -1002,7 +978,6 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite call mpas_pool_get_config(configs,'config_do_restart' ,config_do_restart ) call mpas_pool_get_config(configs,'config_frac_seaice' ,config_frac_seaice) call mpas_pool_get_config(configs,'config_sfclayer_scheme',sfclayer_scheme ) - call mpas_pool_get_config(configs,'config_gf_gustf' ,config_gf_gustf ) call mpas_pool_get_array(mesh,'areaCell',areaCell) @@ -1082,71 +1057,71 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite call mpas_timer_start('sf_monin_obukhov_rev') call mpas_log_write('--- enter subroutine sfclayrev:') call sfclayrev( & - p3d = pres_hyd_p , psfc = psfc_p , t3d = t_p , & - u3d = u_p , v3d = v_p , qv3d = qv_p , & - dz8w = dz_p , cp = cp , g = gravity , & - rovcp = rcp , R = R_d , xlv = xlv , & - chs = chs_p , chs2 = chs2_p , cqs2 = cqs2_p , & - cpm = cpm_p , znt = znt_p , ust = ust_p , & - pblh = hpbl_p , mavail = mavail_p , zol = zol_p , & - mol = mol_p , regime = regime_p , psim = psim_p , & - psih = psih_p , fm = fm_p , fh = fh_p , & - xland = xland_p , hfx = hfx_p , qfx = qfx_p , & - lh = lh_p , tsk = tsk_p , flhc = flhc_p , & - flqc = flqc_p , qgh = qgh_p , qsfc = qsfc_p , & - rmol = rmol_p , u10 = u10_p , v10 = v10_p , & - th2 = th2m_p , t2 = t2m_p , q2 = q2_p , & - gz1oz0 = gz1oz0_p , wspd = wspd_p , br = br_p , & - isfflx = isfflx , dx = dx_p , svp1 = svp1 , & - svp2 = svp2 , svp3 = svp3 , svpt0 = svpt0 , & - ep1 = ep_1 , ep2 = ep_2 , karman = karman , & - eomeg = eomeg , stbolt = stbolt , P1000mb = P0 , & - ustm = ustm_p , ck = ck_p , cka = cka_p , & - cd = cd_p , cda = cda_p , isftcflx = isftcflx , & - iz0tlnd = iz0tlnd , shalwater_z0 = shalwater_flag , shalwater_depth = shalwater_depth , & - water_depth = waterdepth_p , scm_force_flux = scm_force_flux , & - errmsg = errmsg , errflg = errflg , & - ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & - ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & - its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & + p3d = pres_hyd_p , psfc = psfc_p , t3d = t_p , & + u3d = u_p , v3d = v_p , qv3d = qv_p , & + dz8w = dz_p , cp = cp , g = gravity , & + rovcp = rcp , R = R_d , xlv = xlv , & + chs = chs_p , chs2 = chs2_p , cqs2 = cqs2_p , & + cpm = cpm_p , znt = znt_p , ust = ust_p , & + pblh = hpbl_p , mavail = mavail_p , zol = zol_p , & + mol = mol_p , regime = regime_p , psim = psim_p , & + psih = psih_p , fm = fm_p , fh = fh_p , & + xland = xland_p , hfx = hfx_p , qfx = qfx_p , & + lh = lh_p , tsk = tsk_p , flhc = flhc_p , & + flqc = flqc_p , qgh = qgh_p , qsfc = qsfc_p , & + rmol = rmol_p , u10 = u10_p , v10 = v10_p , & + th2 = th2m_p , t2 = t2m_p , q2 = q2_p , & + gz1oz0 = gz1oz0_p , wspd = wspd_p , br = br_p , & + isfflx = isfflx , dx = dx_p , svp1 = svp1 , & + svp2 = svp2 , svp3 = svp3 , svpt0 = svpt0 , & + ep1 = ep_1 , ep2 = ep_2 , karman = karman , & + p1000mb = P0 , lakemask = lakemask_p , ustm = ustm_p , & + ck = ck_p , cka = cka_p , cd = cd_p , & + cda = cda_p , isftcflx = isftcflx , iz0tlnd = iz0tlnd , & + shalwater_z0 = shalwater_flag , water_depth = waterdepth_p , scm_force_flux = scm_force_flux , & + errmsg = errmsg , errflg = errflg , & + ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & + ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & + its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) + call mpas_log_write('--- end subroutine sfclayrev:') if(config_frac_seaice) then call mpas_log_write('--- enter subroutine sfclayrev seaice:') call sfclayrev( & - p3d = pres_hyd_p , psfc = psfc_p , t3d = t_p , & - u3d = u_p , v3d = v_p , qv3d = qv_p , & - dz8w = dz_p , cp = cp , g = gravity , & - rovcp = rcp , R = R_d , xlv = xlv , & - chs = chs_sea , chs2 = chs2_sea , cqs2 = cqs2_sea , & - cpm = cpm_sea , znt = znt_sea , ust = ust_sea , & - pblh = hpbl_p , mavail = mavail_sea , zol = zol_sea , & - mol = mol_sea , regime = regime_sea , psim = psim_sea , & - psih = psih_sea , fm = fm_sea , fh = fh_sea , & - xland = xland_sea , hfx = hfx_sea , qfx = qfx_sea , & - lh = lh_sea , tsk = tsk_sea , flhc = flhc_sea , & - flqc = flqc_sea , qgh = qgh_sea , qsfc = qsfc_sea , & - rmol = rmol_sea , u10 = u10_sea , v10 = v10_sea , & - th2 = th2m_sea , t2 = t2m_sea , q2 = q2_sea , & - gz1oz0 = gz1oz0_sea , wspd = wspd_sea , br = br_sea , & - isfflx = isfflx , dx = dx_p , svp1 = svp1 , & - svp2 = svp2 , svp3 = svp3 , svpt0 = svpt0 , & - ep1 = ep_1 , ep2 = ep_2 , karman = karman , & - eomeg = eomeg , stbolt = stbolt , P1000mb = P0 , & - ustm = ustm_sea , ck = ck_sea , cka = cka_sea , & - cd = cd_sea , cda = cda_sea , isftcflx = isftcflx , & - iz0tlnd = iz0tlnd , shalwater_z0 = shalwater_flag , shalwater_depth = shalwater_depth , & - water_depth = waterdepth_p , scm_force_flux = scm_force_flux , & - errmsg = errmsg , errflg = errflg , & - ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & - ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & - its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & + p3d = pres_hyd_p , psfc = psfc_p , t3d = t_p , & + u3d = u_p , v3d = v_p , qv3d = qv_p , & + dz8w = dz_p , cp = cp , g = gravity , & + rovcp = rcp , R = R_d , xlv = xlv , & + chs = chs_sea , chs2 = chs2_sea , cqs2 = cqs2_sea , & + cpm = cpm_sea , znt = znt_sea , ust = ust_sea , & + pblh = hpbl_p , mavail = mavail_sea , zol = zol_sea , & + mol = mol_sea , regime = regime_sea , psim = psim_sea , & + psih = psih_sea , fm = fm_sea , fh = fh_sea , & + xland = xland_sea , hfx = hfx_sea , qfx = qfx_sea , & + lh = lh_sea , tsk = tsk_sea , flhc = flhc_sea , & + flqc = flqc_sea , qgh = qgh_sea , qsfc = qsfc_sea , & + rmol = rmol_sea , u10 = u10_sea , v10 = v10_sea , & + th2 = th2m_sea , t2 = t2m_sea , q2 = q2_sea , & + gz1oz0 = gz1oz0_sea , wspd = wspd_sea , br = br_sea , & + isfflx = isfflx , dx = dx_p , svp1 = svp1 , & + svp2 = svp2 , svp3 = svp3 , svpt0 = svpt0 , & + ep1 = ep_1 , ep2 = ep_2 , karman = karman , & + p1000mb = P0 , lakemask = lakemask_p , ustm = ustm_sea , & + ck = ck_sea , cka = cka_sea , cd = cd_sea , & + cda = cda_sea , isftcflx = isftcflx , iz0tlnd = iz0tlnd , & + shalwater_z0 = shalwater_flag , water_depth = waterdepth_p , scm_force_flux = scm_force_flux , & + errmsg = errmsg , errflg = errflg , & + ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & + ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & + its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) call mpas_log_write('--- end subroutine sfclayrev seaice:') endif call mpas_timer_stop('sf_monin_obukhov_rev') + case("sf_mynn") call mpas_timer_start('sf_mynn') call sfclay_mynn( & @@ -1174,13 +1149,12 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite qcg = qcg_p , spp_pbl = spp_pbl , isftcflx = isftcflx , & iz0tlnd = iz0tlnd , itimestep = initflag , & errmsg = errmsg , errflg = errflg , & - sgsgustcu= sgsgustcu_p, hfx_spr = hfx_spr_p, lh_spr = lh_spr_p , & - config_gf_gustf = config_gf_gustf , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) + if(config_frac_seaice) then call sfclay_mynn( & p3d = pres_hyd_p , pi3d = pi_p , psfcpa = psfc_p , & @@ -1207,12 +1181,11 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite qcg = qcg_p , spp_pbl = spp_pbl , isftcflx = isftcflx , & iz0tlnd = iz0tlnd , itimestep = initflag , & errmsg = errmsg , errflg = errflg , & - sgsgustcu= sgsgustcu_p, hfx_spr = hfx_spr_p, lh_spr = lh_spr_p , & - config_gf_gustf = config_gf_gustf , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & ) + endif call mpas_timer_stop('sf_mynn') diff --git a/src/core_atmosphere/physics/mpas_atmphys_finalize.F b/src/core_atmosphere/physics/mpas_atmphys_finalize.F index 8ad924819..903042246 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_finalize.F +++ b/src/core_atmosphere/physics/mpas_atmphys_finalize.F @@ -9,6 +9,7 @@ module mpas_atmphys_finalize use mpas_pool_routines + use mpas_atmphys_lsm_noahmpfinalize,only: sf_noahmp_deallocate use module_mp_thompson implicit none @@ -37,14 +38,21 @@ subroutine atmphys_finalize(configs) type(mpas_pool_type),intent(in):: configs !local variables and pointers: - character(len=StrKIND),pointer:: config_microp_scheme + character(len=StrKIND),pointer:: config_lsm_scheme, & + config_microp_scheme !----------------------------------------------------------------------------------------------------------------- + call mpas_pool_get_config(configs,'config_lsm_scheme' ,config_lsm_scheme ) call mpas_pool_get_config(configs,'config_microp_scheme',config_microp_scheme) - if(trim(config_microp_scheme) == 'mp_thompson') & + if(trim(config_lsm_scheme) == 'sf_noahmp') & + call sf_noahmp_deallocate + + if(trim(config_microp_scheme) == 'mp_thompson' .or. & + trim(config_microp_scheme) == 'mp_thompson_aerosols') then call mp_thompson_deallocate + endif end subroutine atmphys_finalize diff --git a/src/core_atmosphere/physics/mpas_atmphys_init.F b/src/core_atmosphere/physics/mpas_atmphys_init.F index 1e9c790db..eb3c457a4 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_init.F +++ b/src/core_atmosphere/physics/mpas_atmphys_init.F @@ -11,17 +11,18 @@ module mpas_atmphys_init use mpas_pool_routines use mpas_timekeeping - use mpas_atmphys_driver_convection, only: init_convection + use mpas_atmphys_driver_convection,only: init_convection use mpas_atmphys_driver_lsm,only: init_lsm - use mpas_atmphys_driver_microphysics + use mpas_atmphys_driver_microphysics,only: init_microphysics use mpas_atmphys_driver_pbl,only: init_pbl - use mpas_atmphys_driver_radiation_lw, only: init_radiation_lw - use mpas_atmphys_driver_radiation_sw, only: init_radiation_sw - use mpas_atmphys_driver_sfclayer + use mpas_atmphys_driver_radiation_lw,only: init_radiation_lw + use mpas_atmphys_driver_radiation_sw,only: init_radiation_sw + use mpas_atmphys_driver_sfclayer,only: init_sfclayer use mpas_atmphys_vars,only: f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_nifa,f_nwfa,f_nbca use mpas_atmphys_landuse use mpas_atmphys_o3climatology + use mpas_atmphys_lsm_noahmpinit,only: init_lsm_noahmp implicit none private @@ -68,14 +69,16 @@ module mpas_atmphys_init ! Laura D. Fowler (laura@ucar.edu) / 2016-10-18. ! * added the subroutine init_physics_flags to initialize f_qc,f_qr,f_qi,f_qs,f_qg,f_nc,and f_ni. ! Laura D. Fowler (laura@ucar.edu) / 2024-02-14. +! * added call to subroutine init_lsm_noahmp to initialize the Noah-MP land surface scheme. +! Laura D. Fowler (laura@ucar.edu) / 2024-03-11. contains !================================================================================================================= - subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_physics, & - atm_input,sfc_input) + subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_physics,diag_physics_noahmp, & + atm_input,sfc_input,output_noahmp) !================================================================================================================= !input arguments: @@ -91,12 +94,15 @@ subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_ type(mpas_pool_type),intent(inout):: diag type(mpas_pool_type),intent(inout):: tend type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: diag_physics_noahmp type(mpas_pool_type),intent(inout):: atm_input type(mpas_pool_type),intent(inout):: sfc_input + type(mpas_pool_type),intent(inout):: output_noahmp !local pointers: - logical,pointer:: config_do_restart, & - config_o3climatology + logical,pointer:: config_do_restart, & + config_o3climatology, & + config_oml1d character(len=StrKIND),pointer:: & config_convection_scheme, & @@ -108,39 +114,40 @@ subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_ config_radt_sw_scheme integer,pointer:: nCellsSolve,nLags - integer,dimension(:),pointer :: i_rainc,i_rainnc - integer,dimension(:),pointer :: i_acswdnb,i_acswdnbc,i_acswdnt,i_acswdntc, & - i_acswupb,i_acswupbc,i_acswupt,i_acswuptc, & - i_aclwdnb,i_aclwdnbc,i_aclwdnt,i_aclwdntc, & - i_aclwupb,i_aclwupbc,i_aclwupt,i_aclwuptc - - real(kind=RKIND),dimension(:),pointer :: acswdnb,acswdnbc,acswdnt,acswdntc, & - acswupb,acswupbc,acswupt,acswuptc, & - aclwdnb,aclwdnbc,aclwdnt,aclwdntc, & - aclwupb,aclwupbc,aclwupt,aclwuptc - real(kind=RKIND),dimension(:),pointer :: nsteps_accum,ndays_accum,tday_accum, & - tyear_accum,tyear_mean - real(kind=RKIND),dimension(:),pointer :: sst,sstsk,tmn,xice,xicem + integer,dimension(:),pointer:: i_rainc,i_rainnc + integer,dimension(:),pointer:: i_acswdnb,i_acswdnbc,i_acswdnt,i_acswdntc, & + i_acswupb,i_acswupbc,i_acswupt,i_acswuptc, & + i_aclwdnb,i_aclwdnbc,i_aclwdnt,i_aclwdntc, & + i_aclwupb,i_aclwupbc,i_aclwupt,i_aclwuptc + + real(kind=RKIND),dimension(:),pointer:: acswdnb,acswdnbc,acswdnt,acswdntc, & + acswupb,acswupbc,acswupt,acswuptc, & + aclwdnb,aclwdnbc,aclwdnt,aclwdntc, & + aclwupb,aclwupbc,aclwupt,aclwuptc + real(kind=RKIND),dimension(:),pointer:: nsteps_accum,ndays_accum,tday_accum, & + tyear_accum,tyear_mean + real(kind=RKIND),dimension(:),pointer:: sst,sstsk,tmn,xice,xicem real(kind=RKIND),dimension(:,:),pointer:: tlag - real(kind=RKIND),dimension(:),pointer :: t_oml, t_oml_initial, t_oml_200m_initial - real(kind=RKIND),dimension(:),pointer :: h_oml, h_oml_initial, hu_oml, hv_oml - real(kind=RKIND), pointer :: config_oml_hml0 - integer,pointer:: nCells - logical,pointer:: config_oml1d - - + real(kind=RKIND),pointer:: config_oml_hml0 + real(kind=RKIND),dimension(:),pointer:: t_oml,t_oml_initial,t_oml_200m_initial + real(kind=RKIND),dimension(:),pointer:: h_oml,h_oml_initial,hu_oml,hv_oml + + + + + !local variables and arrays: type(MPAS_Time_Type):: currTime logical:: init_done integer:: ierr,julday - integer:: iCell,iLag,iEdge,nEdges_m + integer:: iCell,iLag !----------------------------------------------------------------------------------------------------------------- -! call mpas_log_write('') -! call mpas_log_write('--- enter subroutine physics_init:') +!call mpas_log_write('') +!call mpas_log_write('--- enter subroutine physics_init:') call mpas_pool_get_config(configs,'config_do_restart' ,config_do_restart ) call mpas_pool_get_config(configs,'config_o3climatology' ,config_o3climatology ) @@ -211,7 +218,7 @@ subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_ call mpas_pool_get_array(diag_physics,'hv_oml' ,hv_oml) call mpas_pool_get_config(configs,'config_oml1d' ,config_oml1d ) call mpas_pool_get_config(configs,'config_oml_hml0' ,config_oml_hml0 ) - call mpas_pool_get_dimension(mesh,'nCells',nCells) + currTime = mpas_get_clock_time(clock,MPAS_NOW,ierr) call mpas_get_time(curr_time=currTime,DoY=julday,ierr=ierr) @@ -284,7 +291,7 @@ subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_ !initialization of xicem: if(.not.config_do_restart) then -! call mpas_log_write('--- initialization of xicem:') +! call mpas_log_write('--- initialization of xicem:') do iCell = 1, nCellsSolve xicem(iCell) = xice(iCell) enddo @@ -294,47 +301,47 @@ subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_ !sea-surface temperature is applied. This avoids having the array sstsk equal to !zero over land: if(.not. config_do_restart) then -! call mpas_log_write('--- initialization of sstsk:') +! call mpas_log_write('--- initialization of sstsk:') do iCell = 1, nCellsSolve sstsk(iCell) = sst(iCell) enddo endif -! initialized the 1D ocean mixed-layer model (code from wrf module_sf_oml) - if (config_oml1d) then - if (.not. config_do_restart) then - call mpas_log_write('--- initialization of 1D ocean mixed layer model ') - do iCell = 1, nCellsSolve - t_oml(iCell) = sst(iCell) - t_oml_initial(iCell) = sst(iCell) - end do - if (config_oml_hml0 .gt. 0) then - do iCell = 1, nCellsSolve - h_oml(iCell) = config_oml_hml0 - h_oml_initial(iCell) = config_oml_hml0 - hu_oml(iCell) = 0. - hv_oml(iCell) = 0. - t_oml_200m_initial(iCell) = sst(iCell) - 5. - end do - else if (config_oml_hml0 .eq. 0) then -! initializing with climatological mixed layer depth only - do iCell = 1, nCellsSolve - h_oml(iCell) = h_oml_initial(iCell) - hu_oml(iCell) = 0. - hv_oml(iCell) = 0. - t_oml_200m_initial(iCell) = sst(iCell) - 5. - end do - else - do iCell = 1, nCellsSolve - h_oml(iCell) = h_oml_initial(iCell) - ! WRF COMMENT: - ! fill in near coast area with SST: 200 K was set as missing value in ocean pre-processing code - if( (t_oml_200m_initial(iCell) > 200.) .and. (t_oml_200m_initial(iCell) <= 200.) ) & - t_oml_200m_initial(iCell) = sst(iCell) - end do - end if - end if - end if +!initialized the 1D ocean mixed-layer model (code from wrf module_sf_oml): + if(config_oml1d) then + if(.not. config_do_restart) then + call mpas_log_write('--- initialization of 1D ocean mixed layer model ') + do iCell = 1, nCellsSolve + t_oml(iCell) = sst(iCell) + t_oml_initial(iCell) = sst(iCell) + enddo + if(config_oml_hml0 .gt. 0) then + do iCell = 1, nCellsSolve + h_oml(iCell) = config_oml_hml0 + h_oml_initial(iCell) = config_oml_hml0 + hu_oml(iCell) = 0. + hv_oml(iCell) = 0. + t_oml_200m_initial(iCell) = sst(iCell) - 5. + enddo + elseif(config_oml_hml0 .eq. 0) then +! initializing with climatological mixed layer depth only: + do iCell = 1, nCellsSolve + h_oml(iCell) = h_oml_initial(iCell) + hu_oml(iCell) = 0. + hv_oml(iCell) = 0. + t_oml_200m_initial(iCell) = sst(iCell) - 5. + enddo + else + do iCell = 1, nCellsSolve + h_oml(iCell) = h_oml_initial(iCell) + ! WRF COMMENT: + ! fill in near coast area with SST: 200 K was set as missing value in ocean pre-processing code + if( (t_oml_200m_initial(iCell) > 200.) .and. (t_oml_200m_initial(iCell) <= 200.) ) & + t_oml_200m_initial(iCell) = sst(iCell) + enddo + endif + endif + endif !initialization of temperatures needed for updating the deep soil temperature: if(.not. config_do_restart) then @@ -363,7 +370,7 @@ subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_ !initialization of cloud microphysics processes: if(config_microp_scheme .ne. 'off') & - call microphysics_init(dminfo,configs,mesh,sfc_input,diag_physics) + call init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_physics) !initialization of PBL processes: if(config_pbl_scheme .ne. 'off') call init_pbl(configs) @@ -372,10 +379,13 @@ subroutine physics_init(dminfo,clock,configs,mesh,diag,tend,state,time_lev,diag_ if(config_sfclayer_scheme .ne. 'off') call init_sfclayer(configs) !initialization of land-surface model: -!if(.not. config_do_restart) then -! if(config_lsm_scheme .ne. 'off') call init_lsm(dminfo,mesh,configs,diag_physics,sfc_input) -!endif - if(config_lsm_scheme .ne. 'off') call init_lsm(dminfo,mesh,configs,diag_physics,sfc_input) + if(config_lsm_scheme .ne. 'off') then + if(config_lsm_scheme .eq. 'sf_noah') then + call init_lsm(dminfo,mesh,configs,diag_physics,sfc_input) + elseif(config_lsm_scheme .eq. 'sf_noahmp') then + call init_lsm_noahmp(configs,mesh,diag_physics,diag_physics_noahmp,output_noahmp,sfc_input) + endif + endif !initialization of shortwave radiation processes: init_done = .false. @@ -423,7 +433,7 @@ subroutine init_physics_flags(state,f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_n !local pointers: integer,pointer:: index_qc,index_qr,index_qi,index_qs,index_qg - integer,pointer:: index_ni + integer,pointer:: index_nc,index_ni,index_nifa,index_nwfa !----------------------------------------------------------------------------------------------------------------- @@ -447,15 +457,20 @@ subroutine init_physics_flags(state,f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_n if(index_qg .gt. -1) f_qg = .true. !initializes the logical assigned to number concentrations: - f_nc = .false. !nc is not defined in Registry.xml - therefore f_nc is initialized to false. + f_nc = .false. f_ni = .false. - f_nifa = .false. !nifa is not defined in Registry.xml - therefore f_nc is initialized to false. - f_nwfa = .false. !nwfa is not defined in Registry.xml - therefore f_nc is initialized to false. + f_nifa = .false. + f_nwfa = .false. f_nbca = .false. !nbca is not defined in Registry.xml - therefore f_nc is initialized to false. - - call mpas_pool_get_dimension(state,'index_ni',index_ni) - - if(index_ni .gt. -1) f_ni = .true. + call mpas_pool_get_dimension(state,'index_nc' ,index_nc ) + call mpas_pool_get_dimension(state,'index_ni' ,index_ni ) + call mpas_pool_get_dimension(state,'index_nifa',index_nifa) + call mpas_pool_get_dimension(state,'index_nwfa',index_nwfa) + + if(index_nc .gt. -1) f_nc = .true. + if(index_ni .gt. -1) f_ni = .true. + if(index_nifa .gt. -1) f_nifa = .true. + if(index_nwfa .gt. -1) f_nwfa = .true. end subroutine init_physics_flags diff --git a/src/core_atmosphere/physics/mpas_atmphys_init_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_init_microphysics.F index 99db47ced..f2a75d6c9 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_init_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_init_microphysics.F @@ -5,20 +5,23 @@ ! Additional copyright and license information can be found in the LICENSE file ! distributed with this code, or at http://mpas-dev.github.com/license.html ! +#define DM_BCAST_MACRO(A) call mpas_dmpar_bcast_real4s(dminfo,size(A),A) !================================================================================================================= module mpas_atmphys_init_microphysics use mpas_dmpar use mpas_kind_types + use mpas_log use mpas_pool_routines use mpas_atmphys_utilities -!use module_mp_thompson, only: is_aerosol_aware,naCCN0,naCCN1,naIN0,naIN1,ntb_arc,ntb_arw,ntb_art,ntb_arr, & -! ntb_ark,tnccn_act + use module_mp_thompson, only: is_aerosol_aware,naCCN0,naCCN1,naIN0,naIN1,ntb_arc,ntb_arw,ntb_art,ntb_arr, & + ntb_ark,tnccn_act implicit none private - public:: init_thompson_clouddroplets_forMPAS + public:: init_thompson_clouddroplets_forMPAS, & + init_thompson_aerosols_forMPAS !MPAS main initialization of the Thompson parameterization of cloud microphysics with nucleation of cloud !droplets based on distributions of CCNs and INs (aerosol-aware parameterization). @@ -29,6 +32,15 @@ module mpas_atmphys_init_microphysics ! ---------------------------------------- ! * added "use mpas_dmpar" at the top of the module. ! Laura D. Fowler (laura@ucar.edu) / 2016-04-04. +! * modified the initialization of nifa and nwfa.If nifa and nwfa are already available in the initial conditions +! using the climatological GOCART data,do not recalculate nifa and nwfa using an exponential profile of CCN and +! IN as a function of height. +! Laura D. Fowler (laura@ucar.edu) / 2016-05-27. +! * modified the subroutine init_thompson_aerosols_forMPAS for exact restartibility when using the microphysics +! option "mp_thompson_aerosols". +! Laura D. Fowler (laura@ucar.edu) / 2018-02-23. +! * changed the definition of DM_BCAST_MACRO to compile table_ccnAct with the default DOUBLE PRECISION. +! Laura D. Fowler (laura@ucar.edu) / 2018-03-07. contains @@ -80,8 +92,225 @@ subroutine init_thompson_clouddroplets_forMPAS(mesh,sfc_input,diag_physics) end subroutine init_thompson_clouddroplets_forMPAS !================================================================================================================= - end module mpas_atmphys_init_microphysics + subroutine init_thompson_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics) +!================================================================================================================= + +!input variables: + type(dm_info),intent(in):: dminfo + type(mpas_pool_type),intent(in):: mesh + logical,intent(in):: do_restart + integer,intent(in):: time_lev + +!inout variables: + type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: state + +!local variables and pointers: + integer,pointer:: nCellsSolve,nVertLevels + integer,pointer:: index_nifa,index_nwfa + + real(kind=RKIND),dimension(:),pointer :: areaCell + real(kind=RKIND),dimension(:),pointer :: nifa2d,nwfa2d + real(kind=RKIND),dimension(:,:),pointer :: zgrid,zz + real(kind=RKIND),dimension(:,:),pointer :: rho_zz,nifa,nwfa + real(kind=RKIND),dimension(:,:,:),pointer:: scalars + + character(len=StrKIND):: mess + + integer:: iCell, k + + real(kind=RKIND):: max_test + real(kind=RKIND):: airmass + real(kind=RKIND):: h_01 + real(kind=RKIND):: niIN3,niCCN3 + real(kind=RKIND):: nifa_max,nifa_min,global_nifa_max,global_nifa_min + real(kind=RKIND):: nwfa_max,nwfa_min,global_nwfa_max,global_nwfa_min + real(kind=RKIND),dimension(:,:),allocatable:: hgt + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write('--- enter subroutine init_thompson_aerosols_forMPAS:') + + is_aerosol_aware = .true. + +!... read a static file containing CCN activation of aerosols. The data were created from a parcel model by +!... Feingold & Heymsfield with further changes by Eidhammer and Kriedenweis. + call table_ccnAct(dminfo) + call mpas_log_write('--- end read table_ccnAct:') + +!... if do_restart is true, then we do not need to check the initialization of nwfa, nifa, and nwfa2d. If false, +! then, we proceed with the initialization: + if(do_restart) return + + call mpas_pool_get_dimension(mesh,'nCellsSolve',nCellsSolve) + call mpas_pool_get_dimension(mesh,'nVertLevels',nVertLevels) + + call mpas_pool_get_array(mesh,'areaCell',areaCell) + call mpas_pool_get_array(mesh,'zgrid' ,zgrid ) + call mpas_pool_get_array(mesh,'zz' ,zz ) + + call mpas_pool_get_array(diag_physics,'nifa2d',nifa2d) + call mpas_pool_get_array(diag_physics,'nwfa2d',nwfa2d) + + call mpas_pool_get_dimension(state,'index_nifa' ,index_nifa ) + call mpas_pool_get_dimension(state,'index_nwfa' ,index_nwfa ) + + call mpas_pool_get_array(state,'scalars',scalars,time_lev) + nifa => scalars(index_nifa,:,:) + nwfa => scalars(index_nwfa,:,:) + + call mpas_pool_get_array(state,'rho_zz',rho_zz,time_lev) + + if(.not.allocated(hgt)) allocate(hgt(1:nVertLevels,1:nCellsSolve)) + do iCell = 1, nCellsSolve + do k = 1, nVertLevels + hgt(k,iCell) = 0.5_RKIND * (zgrid(k,iCell)+zgrid(k+1,iCell)) + enddo + enddo + +!... initialize the distribution of hygroscopic ("water friendly") aerosols if not already initialized using +! GOCART data: + global_nwfa_min = 0._RKIND + global_nwfa_max = 0._RKIND + nwfa_min = minval(nwfa(:,1:nCellsSolve)) + nwfa_max = maxval(nwfa(:,1:nCellsSolve)) + call mpas_dmpar_min_real(dminfo,nwfa_min,global_nwfa_min) + call mpas_dmpar_max_real(dminfo,nwfa_max,global_nwfa_max) + call mpas_log_write('--- global_nwfa_min = $r',realArgs=(/global_nwfa_min/)) + call mpas_log_write('--- global_nwfa_max = $r',realArgs=(/global_nwfa_max/)) + + if(global_nwfa_min == 0._RKIND .and. global_nwfa_max == 0._RKIND) then + call mpas_log_write('--- initialize nwfa using an exponential distribution of CCN as a function of height.') + do iCell = 1, nCellsSolve + if(hgt(1,iCell).le.1000.0) then + h_01 = 0.8 + elseif(hgt(1,iCell).ge.2500.0) then + h_01 = 0.01 + else + h_01 = 0.8*cos(hgt(1,iCell)*0.001 - 1.0) + endif + niCCN3 = -1.0*ALOG(naCCN1/naCCN0)/h_01 + nwfa(1,iCell) = naCCN1+naCCN0*exp(-((hgt(2,iCell)-hgt(1,iCell))/1000.)*niCCN3) + do k = 2, nVertLevels + nwfa(k,iCell) = naCCN1+naCCN0*exp(-((hgt(k,iCell)-hgt(1,iCell))/1000.)*niCCN3) + enddo + enddo + else + call mpas_log_write('--- initialize nwfa using the climatological GOCART data.') + endif + +!... initialize the distribution of nonhygroscopic ("ice friendly") aerosols if not already initialized using +! GOCART data: + global_nifa_min = 0._RKIND + global_nifa_max = 0._RKIND + nifa_min = minval(nifa(:,1:nCellsSolve)) + nifa_max = maxval(nifa(:,1:nCellsSolve)) + call mpas_dmpar_min_real(dminfo,nifa_min,global_nifa_min) + call mpas_dmpar_max_real(dminfo,nifa_max,global_nifa_max) + call mpas_log_write('--- global_nifa_min = $r',realArgs=(/global_nifa_min/)) + call mpas_log_write('--- global_nifa_max = $r',realArgs=(/global_nifa_max/)) + + if(global_nifa_min == 0._RKIND .and. global_nifa_max == 0._RKIND) then + call mpas_log_write('--- initialize nifa using an exponential distribution of IN as a function of height.') + do iCell = 1, nCellsSolve + if(hgt(1,iCell).le.1000.0) then + h_01 = 0.8 + elseif(hgt(1,iCell).ge.2500.0) then + h_01 = 0.01 + else + h_01 = 0.8*cos(hgt(1,iCell)*0.001 - 1.0) + endif + niIN3 = -1.0*ALOG(naIN1/naIN0)/h_01 + nifa(1,iCell) = naIN1+naIN0*exp(-((hgt(2,iCell)-hgt(1,iCell))/1000.)*niIN3) + do k = 2, nVertLevels + nifa(k,iCell) = naIN1+naIN0*exp(-((hgt(k,iCell)-hgt(1,iCell))/1000.)*niIN3) + enddo + enddo + else + call mpas_log_write('--- initialize nifa using the climatological GOCART data.') + endif + +!... scale the lowest level aerosol data into an emissions rate. This is very far from ideal, but +!... need higher emissions where larger amount of (climo) existing and lesser emissions where there +!... exists fewer to begin as a first-order simplistic approach. Later, proper connection to emission +!... inventory would be better, but, for now, scale like this: +!... where: Nwfa=50 per cc, emit 0.875E4 aerosols per second per grid box unit +!... that was tested as ~(20kmx20kmx50m = 2.E10 m**3). + + k = 1 + do iCell = 1, nCellsSolve + airmass = rho_zz(k,iCell)*zz(k,iCell) + airmass = airmass*(zgrid(k+1,iCell)-zgrid(k,iCell))*areaCell(iCell) ! (in kg) + nwfa2d(iCell) = nwfa(k,iCell)*0.000196*airmass*0.5e-10 + nifa2d(iCell) = 0._RKIND +! call mpas_log_write('$i $r $r $r',intArgs=(/iCell/),realArgs=(/airmass,nwfa2d(iCell),nifa2d(iCell)/)) + enddo + +!... deallocate local arrays: + if(allocated(hgt)) deallocate(hgt) + +!call mpas_log_write('--- end subroutine init_thompson_aerosols_forMPAS.') + + end subroutine init_thompson_aerosols_forMPAS + !================================================================================================================= + subroutine table_ccnAct(dminfo) +!================================================================================================================= + +!input variables: + type(dm_info),intent(in):: dminfo - - +!local variables: + logical:: opened + integer:: ccn_unit,i,istat + character(len=StrKIND):: errmess +!----------------------------------------------------------------------------------------------------------------- + + if(.not.allocated(tnccn_act)) allocate(tnccn_act(ntb_arc,ntb_arw,ntb_art,ntb_arr,ntb_ark)) + +!get a unit to open binary file: + istat = -999 + if(dminfo % my_proc_id == IO_NODE) then + do i = 10,99 + inquire(i,opened = opened,iostat=istat) + if(.not. opened ) then + ccn_unit = i + exit + endif + enddo + if(istat /= 0) & + call physics_error_fatal('mpas_atmphys_init_microphysics table_ccnAct: Can not '// & + 'find unused fortran unit to read in lookup table.' ) + endif + +!distribute unit to other processors: + call mpas_dmpar_bcast_int(dminfo,ccn_unit) + +!open binary file: + istat = -999 + if(dminfo % my_proc_id == IO_NODE) then + open(ccn_unit,file='CCN_ACTIVATE_DATA',form='UNFORMATTED',status='OLD',iostat=istat) + if(istat /= 0) then + write(errmess,'(A,I4)') 'mpas_atmphys_init_microphysics table_ccnAct:: '// & + 'error opening CCN_ACTIVATE_DATA on unit', ccn_unit + call physics_error_fatal(errmess) + endif + endif + +!read and broadcast data to all nodes: + istat = -999 + if(dminfo % my_proc_id == IO_NODE) then + read(ccn_unit,iostat=istat) tnccn_act + if(istat /= 0) then + write(errmess,'(A,I4)') 'mpas_atmphys_init_microphysics table_ccnAct:: '// & + 'error reading tnccn_act on unit', ccn_unit + call physics_error_fatal(errmess) + endif + endif + + DM_BCAST_MACRO(tnccn_act) + + end subroutine table_ccnAct + +!================================================================================================================= + end module mpas_atmphys_init_microphysics +!================================================================================================================= diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index 289b600bf..a359593ff 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -77,11 +77,13 @@ subroutine allocate_forall_physics(configs) type(mpas_pool_type),intent(in):: configs !local pointers: - character(len=StrKIND),pointer:: pbl_scheme,convection_scheme - +!-srf + character(len=StrKIND),pointer:: microp_scheme,pbl_scheme,convection_scheme +!-srf !----------------------------------------------------------------------------------------------------------------- - call mpas_pool_get_config(configs,'config_pbl_scheme',pbl_scheme) + call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) + call mpas_pool_get_config(configs,'config_pbl_scheme' ,pbl_scheme ) if(.not.allocated(psfc_p) ) allocate(psfc_p(ims:ime,jms:jme) ) if(.not.allocated(ptop_p) ) allocate(ptop_p(ims:ime,jms:jme) ) @@ -114,23 +116,33 @@ subroutine allocate_forall_physics(configs) if(.not.allocated(qs_p) ) allocate(qs_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(qg_p) ) allocate(qg_p(ims:ime,kms:kme,jms:jme) ) - pbl_select: select case (trim(pbl_scheme)) + microp_select: select case(trim(microp_scheme)) + case("mp_thompson_aerosols") + if(.not.allocated(nifa_p)) allocate(nifa_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(nwfa_p)) allocate(nwfa_p(ims:ime,kms:kme,jms:jme)) + + case default + end select microp_select + + pbl_select: select case(trim(pbl_scheme)) case("bl_mynn") + if(.not.allocated(nc_p)) allocate(nc_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(ni_p)) allocate(ni_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(nifa_p)) allocate(nifa_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(nwfa_p)) allocate(nwfa_p(ims:ime,kms:kme,jms:jme)) case default - end select pbl_select - +!-srf call mpas_pool_get_config(configs,'config_convection_scheme',convection_scheme) convection_select: select case(trim(convection_scheme)) case("cu_gf_monan") if(.not.allocated(cnvcf_p)) allocate(cnvcf_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(buoyx_p)) allocate(buoyx_p(ims:ime,kms:kme,jms:jme)) case default +!-srf end select convection_select - !... arrays used for calculating the hydrostatic pressure and exner function: if(.not.allocated(psfc_hyd_p) ) allocate(psfc_hyd_p(ims:ime,jms:jme) ) if(.not.allocated(psfc_hydd_p) ) allocate(psfc_hydd_p(ims:ime,jms:jme) ) @@ -150,11 +162,13 @@ subroutine deallocate_forall_physics(configs) type(mpas_pool_type),intent(in):: configs !local pointers: - character(len=StrKIND),pointer:: pbl_scheme,convection_scheme - +!-srf + character(len=StrKIND),pointer:: microp_scheme,pbl_scheme,convection_scheme +!-srf !----------------------------------------------------------------------------------------------------------------- - call mpas_pool_get_config(configs,'config_pbl_scheme',pbl_scheme) + call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) + call mpas_pool_get_config(configs,'config_pbl_scheme' ,pbl_scheme ) if(allocated(psfc_p) ) deallocate(psfc_p ) if(allocated(ptop_p) ) deallocate(ptop_p ) @@ -187,14 +201,25 @@ subroutine deallocate_forall_physics(configs) if(allocated(qs_p) ) deallocate(qs_p ) if(allocated(qg_p) ) deallocate(qg_p ) - pbl_select: select case (trim(pbl_scheme)) + microp_select: select case(trim(microp_scheme)) + case("mp_thompson_aerosols") + if(allocated(nifa_p)) deallocate(nifa_p) + if(allocated(nwfa_p)) deallocate(nwfa_p) + + case default + end select microp_select + + pbl_select: select case(trim(pbl_scheme)) case("bl_mynn") + if(allocated(nc_p)) deallocate(nc_p) if(allocated(ni_p)) deallocate(ni_p) + if(allocated(nifa_p)) deallocate(nifa_p) + if(allocated(nwfa_p)) deallocate(nwfa_p) case default - end select pbl_select - + +!-srf call mpas_pool_get_config(configs,'config_convection_scheme',convection_scheme) convection_select: select case(trim(convection_scheme)) case("cu_gf_monan") @@ -203,6 +228,7 @@ subroutine deallocate_forall_physics(configs) case default end select convection_select +!-srf if(allocated(psfc_hyd_p) ) deallocate(psfc_hyd_p ) if(allocated(psfc_hydd_p) ) deallocate(psfc_hydd_p ) @@ -231,13 +257,16 @@ subroutine MPAS_to_physics(configs,mesh,state,time_lev,diag,diag_physics,its,ite type(mpas_pool_type),intent(inout):: diag_physics !local pointers: - character(len=StrKIND),pointer:: pbl_scheme,convection_scheme +!-srf + character(len=StrKIND),pointer:: microp_scheme,pbl_scheme,convection_scheme +!-srf integer,pointer:: index_qv,index_qc,index_qr,index_qi,index_qs,index_qg - integer,pointer:: index_ni + integer,pointer:: index_nc,index_ni,index_nifa,index_nwfa +!-srf integer,pointer:: index_cnvcf, index_buoyx integer,pointer:: config_gf_cporg, config_gf_pcvol - +!-srf real(kind=RKIND),dimension(:),pointer :: latCell,lonCell real(kind=RKIND),dimension(:),pointer :: fzm,fzp,rdzw @@ -246,9 +275,11 @@ subroutine MPAS_to_physics(configs,mesh,state,time_lev,diag,diag_physics,its,ite real(kind=RKIND),dimension(:,:),pointer :: zz,exner,pressure_b,rtheta_p,rtheta_b real(kind=RKIND),dimension(:,:),pointer :: rho_zz,theta_m,pressure_p,u,v,w real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg - real(kind=RKIND),dimension(:,:),pointer :: ni + real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nifa,nwfa real(kind=RKIND),dimension(:,:,:),pointer:: scalars +!-srf real(kind=RKIND),dimension(:,:),pointer :: cnvcf,buoyx +!-srf !local variables: integer:: i,k,j @@ -268,7 +299,8 @@ subroutine MPAS_to_physics(configs,mesh,state,time_lev,diag,diag_physics,its,ite !call mpas_log_write('kts=$i kte=$i',intArgs=(/kts,kte/)) !initialization: - call mpas_pool_get_config(configs,'config_pbl_scheme',pbl_scheme) + call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) + call mpas_pool_get_config(configs,'config_pbl_scheme' ,pbl_scheme ) call mpas_pool_get_array(mesh,'latCell',latCell) call mpas_pool_get_array(mesh,'lonCell',lonCell) @@ -340,23 +372,77 @@ subroutine MPAS_to_physics(configs,mesh,state,time_lev,diag,diag_physics,its,ite enddo enddo - pbl_select: select case (trim(pbl_scheme)) - case("bl_mynn") - call mpas_pool_get_dimension(state,'index_ni',index_ni) - ni => scalars(index_ni,:,:) - + microp_select: select case(trim(microp_scheme)) + case("mp_thompson_aerosols") + nullify(nifa) + nullify(nwfa) + call mpas_pool_get_dimension(state,'index_nifa',index_nifa) + call mpas_pool_get_dimension(state,'index_nwfa',index_nwfa) + nifa => scalars(index_nifa,:,:) + nwfa => scalars(index_nwfa,:,:) do j = jts,jte - do k = kts,kte - do i = its,ite - ni_p(i,k,j) = max(0.,ni(k,i)) - enddo - enddo + do k = kts,kte + do i = its,ite + nifa_p(i,k,j) = max(0.,nifa(k,i)) + nwfa_p(i,k,j) = max(0.,nwfa(k,i)) + enddo + enddo enddo case default + end select microp_select + pbl_select: select case(trim(pbl_scheme)) + case("bl_mynn") + do j = jts,jte + do k = kts,kte + do i = its,ite + nc_p(i,k,j) = 0._RKIND + ni_p(i,k,j) = 0._RKIND + nifa_p(i,k,j) = 0._RKIND + nwfa_p(i,k,j) = 0._RKIND + enddo + enddo + enddo + !initializes ni_p when running the options "mp_thompson" or "mp_thompson_aerosols": + if(f_ni) then + nullify(ni) + call mpas_pool_get_dimension(state,'index_ni',index_ni) + ni => scalars(index_ni,:,:) + do j = jts,jte + do k = kts,kte + do i = its,ite + ni_p(i,k,j) = max(0.,ni(k,i)) + enddo + enddo + enddo + endif + !initializes nc_p, nifa_p, and nwfa_p when running the option "mp_thompson_aerosols": + if(f_nc .and. f_nifa .and. f_nwfa) then + nullify(nc) + nullify(nifa) + nullify(nwfa) + call mpas_pool_get_dimension(state,'index_nc',index_nc) + call mpas_pool_get_dimension(state,'index_nifa',index_nifa) + call mpas_pool_get_dimension(state,'index_nwfa',index_nwfa) + nc => scalars(index_nc,:,:) + nifa => scalars(index_nifa,:,:) + nwfa => scalars(index_nwfa,:,:) + do j = jts,jte + do k = kts,kte + do i = its,ite + nc_p(i,k,j) = max(0.,nc(k,i)) + nifa_p(i,k,j) = max(0.,nifa(k,i)) + nwfa_p(i,k,j) = max(0.,nwfa(k,i)) + enddo + enddo + enddo + endif + + case default end select pbl_select - + +!-srf call mpas_pool_get_config(configs,'config_convection_scheme',convection_scheme) convection_select: select case(trim(convection_scheme)) case("cu_gf_monan") @@ -386,6 +472,7 @@ subroutine MPAS_to_physics(configs,mesh,state,time_lev,diag,diag_physics,its,ite endif case default end select convection_select +!-srf !calculation of the surface pressure using hydrostatic assumption down to the surface:: do j = jts,jte @@ -522,7 +609,7 @@ subroutine MPAS_to_physics(configs,mesh,state,time_lev,diag,diag_physics,its,ite end subroutine MPAS_to_physics !================================================================================================================= - subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,its,ite) + subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,tend_physics,its,ite) !================================================================================================================= !input variables: @@ -535,18 +622,23 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, integer,intent(in):: its,ite integer:: time_lev +!inout variables: + type(mpas_pool_type),intent(inout):: tend_physics + !local pointers: - character(len=StrKIND),pointer:: microp_scheme + character(len=StrKIND),pointer:: mp_scheme integer,pointer:: index_qv,index_qc,index_qr,index_qi,index_qs,index_qg - integer,pointer:: index_ni,index_nr - real(kind=RKIND),dimension(:),pointer :: nt_c,mu_c + integer,pointer:: index_nc,index_ni,index_nr,index_nifa,index_nwfa + real(kind=RKIND),dimension(:),pointer :: nifa2d,nwfa2d,nt_c,mu_c real(kind=RKIND),dimension(:,:),pointer :: zgrid,w real(kind=RKIND),dimension(:,:),pointer :: zz,exner,pressure_b real(kind=RKIND),dimension(:,:),pointer :: rho_zz,theta_m,pressure_p real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg - real(kind=RKIND),dimension(:,:),pointer :: ni,nr + real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod real(kind=RKIND),dimension(:,:),pointer :: re_cloud,re_ice,re_snow + real(kind=RKIND),dimension(:,:),pointer :: rthmpten,rqvmpten,rqcmpten,rqrmpten,rqimpten,rqsmpten,rqgmpten + real(kind=RKIND),dimension(:,:),pointer :: rncmpten,rnimpten,rnrmpten,rnifampten,rnwfampten real(kind=RKIND),dimension(:,:,:),pointer:: scalars !local variables: @@ -554,7 +646,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, !----------------------------------------------------------------------------------------------------------------- - call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) + call mpas_pool_get_config(configs,'config_microp_scheme',mp_scheme) call mpas_pool_get_array(mesh,'zgrid',zgrid) call mpas_pool_get_array(mesh,'zz' ,zz ) @@ -563,31 +655,33 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, call mpas_pool_get_array(diag,'pressure_base',pressure_b) call mpas_pool_get_array(diag,'pressure_p' ,pressure_p) - call mpas_pool_get_array(diag_physics,'nt_c' ,nt_c ) - call mpas_pool_get_array(diag_physics,'mu_c' ,mu_c ) - call mpas_pool_get_array(diag_physics,'rainprod',rainprod) - call mpas_pool_get_array(diag_physics,'evapprod',evapprod) - call mpas_pool_get_array(diag_physics,'re_cloud',re_cloud) - call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) - call mpas_pool_get_array(diag_physics,'re_snow' ,re_snow ) - call mpas_pool_get_array(state,'rho_zz' ,rho_zz ,time_lev) call mpas_pool_get_array(state,'theta_m',theta_m,time_lev) call mpas_pool_get_array(state,'w' ,w ,time_lev) - call mpas_pool_get_dimension(state,'index_qv' ,index_qv ) - call mpas_pool_get_dimension(state,'index_qc' ,index_qc ) - call mpas_pool_get_dimension(state,'index_qr' ,index_qr ) - call mpas_pool_get_dimension(state,'index_qi' ,index_qi ) - call mpas_pool_get_dimension(state,'index_qs' ,index_qs ) - call mpas_pool_get_dimension(state,'index_qg' ,index_qg ) - call mpas_pool_get_dimension(state,'index_ni' ,index_ni ) - call mpas_pool_get_dimension(state,'index_nr' ,index_nr ) + call mpas_pool_get_dimension(state,'index_qv',index_qv) + call mpas_pool_get_dimension(state,'index_qc',index_qc) + call mpas_pool_get_dimension(state,'index_qr',index_qr) + + + + + + + + + + + + + + + call mpas_pool_get_array(state,'scalars',scalars,time_lev) - qv => scalars(index_qv,:,:) - qc => scalars(index_qc,:,:) - qr => scalars(index_qr,:,:) + qv => scalars(index_qv,:,:) + qc => scalars(index_qc,:,:) + qr => scalars(index_qr,:,:) !initialize variables needed in the cloud microphysics schemes: do j = jts, jte @@ -610,13 +704,21 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, enddo enddo -!additional initialization as function of cloud microphysics scheme: - microp_select_init: select case(microp_scheme) - - case ("mp_thompson","mp_wsm6") - qi => scalars(index_qi,:,:) - qs => scalars(index_qs,:,:) - qg => scalars(index_qg,:,:) +!initialize cloud water species and aerosols as function of cloud microphysics scheme: + mp_select: select case(trim(mp_scheme)) + case("mp_thompson","mp_thompson_aerosols","mp_wsm6") + call mpas_pool_get_dimension(state,'index_qi',index_qi) + call mpas_pool_get_dimension(state,'index_qs',index_qs) + call mpas_pool_get_dimension(state,'index_qg',index_qg) + qi => scalars(index_qi,:,:) + qs => scalars(index_qs,:,:) + qg => scalars(index_qg,:,:) + + call mpas_pool_get_array(diag_physics,'rainprod',rainprod) + call mpas_pool_get_array(diag_physics,'evapprod',evapprod) + call mpas_pool_get_array(diag_physics,'re_cloud',re_cloud) + call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) + call mpas_pool_get_array(diag_physics,'re_snow' ,re_snow ) do j = jts, jte do k = kts, kte @@ -624,77 +726,168 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, qi_p(i,k,j) = qi(k,i) qs_p(i,k,j) = qs(k,i) qg_p(i,k,j) = qg(k,i) - recloud_p(i,k,j) = re_cloud(k,i) - reice_p(i,k,j) = re_ice(k,i) - resnow_p(i,k,j) = re_snow(k,i) + + rainprod_p(i,k,j) = rainprod(k,i) + evapprod_p(i,k,j) = evapprod(k,k) + recloud_p(i,k,j) = re_cloud(k,i) + reice_p(i,k,j) = re_ice(k,i) + resnow_p(i,k,j) = re_snow(k,i) enddo enddo enddo - microp2_select: select case(microp_scheme) - - case("mp_thompson") - ni => scalars(index_ni,:,:) - nr => scalars(index_nr,:,:) + mp2_select: select case(trim(mp_scheme)) + case("mp_thompson","mp_thompson_aerosols") + call mpas_pool_get_dimension(state,'index_ni',index_ni) + call mpas_pool_get_dimension(state,'index_nr',index_nr) + ni => scalars(index_ni,:,:) + nr => scalars(index_nr,:,:) + + call mpas_pool_get_array(diag_physics,'nt_c',nt_c) + call mpas_pool_get_array(diag_physics,'mu_c',mu_c) + do j = jts,jte + do i = its,ite + muc_p(i,j) = mu_c(i) + ntc_p(i,j) = nt_c(i) + enddo + do k = kts, kte + do i = its, ite + ni_p(i,k,j) = ni(k,i) + nr_p(i,k,j) = nr(k,i) + enddo + enddo + enddo + + mp3_select: select case(trim(mp_scheme)) + case("mp_thompson_aerosols") + call mpas_pool_get_dimension(state,'index_nc' ,index_nc ) + call mpas_pool_get_dimension(state,'index_nifa',index_nifa) + call mpas_pool_get_dimension(state,'index_nwfa',index_nwfa) + nc => scalars(index_nc,:,:) + nifa => scalars(index_nifa,:,:) + nwfa => scalars(index_nwfa,:,:) + + call mpas_pool_get_array(diag_physics,'nifa2d',nifa2d) + call mpas_pool_get_array(diag_physics,'nwfa2d',nwfa2d) + do j = jts,jte + do i = its,ite + nifa2d_p(i,j) = nifa2d(i) + nwfa2d_p(i,j) = nwfa2d(i) + enddo + do k = kts, kte + do i = its, ite + nc_p(i,k,j) = nc(k,i) + nifa_p(i,k,j) = nifa(k,i) + nwfa_p(i,k,j) = nwfa(k,i) + enddo + enddo + enddo + + case default + end select mp3_select + + case default + end select mp2_select - do j = jts,jte - do i = its,ite - muc_p(i,j) = mu_c(i) - ntc_p(i,j) = nt_c(i) - enddo - enddo - do j = jts, jte - do k = kts, kte - do i = its, ite - ni_p(i,k,j) = ni(k,i) - nr_p(i,k,j) = nr(k,i) - rainprod_p(i,k,j) = rainprod(k,i) - evapprod_p(i,k,j) = evapprod(k,i) - enddo - enddo - enddo + case default + end select mp_select + +!begin calculation of cloud microphysics tendencies: + mp_tend_select: select case(trim(mp_scheme)) + case("mp_thompson","mp_thompson_aerosols","mp_wsm6") + call mpas_pool_get_array(tend_physics,'rthmpten',rthmpten) + call mpas_pool_get_array(tend_physics,'rqvmpten',rqvmpten) + call mpas_pool_get_array(tend_physics,'rqcmpten',rqcmpten) + call mpas_pool_get_array(tend_physics,'rqrmpten',rqrmpten) + call mpas_pool_get_array(tend_physics,'rqimpten',rqimpten) + call mpas_pool_get_array(tend_physics,'rqsmpten',rqsmpten) + call mpas_pool_get_array(tend_physics,'rqgmpten',rqgmpten) - case default + do k = kts,kte + do i = its,ite + rthmpten(k,i) = theta_m(k,i)/(1._RKIND+R_v/R_d*max(0._RKIND,qv(k,i))) + rqvmpten(k,i) = qv(k,i) + rqcmpten(k,i) = qc(k,i) + rqrmpten(k,i) = qr(k,i) + rqimpten(k,i) = qi(k,i) + rqsmpten(k,i) = qs(k,i) + rqgmpten(k,i) = qg(k,i) + enddo + enddo - end select microp2_select + mp2_tend_select: select case(trim(mp_scheme)) + case("mp_thompson","mp_thompson_aerosols") + call mpas_pool_get_array(tend_physics,'rnimpten',rnimpten) + call mpas_pool_get_array(tend_physics,'rnrmpten',rnrmpten) + + do k = kts,kte + do i = its,ite + rnimpten(k,i) = ni(k,i) + rnrmpten(k,i) = nr(k,i) + enddo + enddo + + mp3_tend_select: select case(trim(mp_scheme)) + case("mp_thompson_aerosols") + call mpas_pool_get_array(tend_physics,'rncmpten',rncmpten) + call mpas_pool_get_array(tend_physics,'rnifampten',rnifampten) + call mpas_pool_get_array(tend_physics,'rnwfampten',rnwfampten) + + do k = kts,kte + do i = its,ite + rncmpten(k,i) = nc(k,i) + rnifampten(k,i) = nifa(k,i) + rnwfampten(k,i) = nwfa(k,i) + enddo + enddo + + case default + end select mp3_tend_select + + case default + end select mp2_tend_select case default - - end select microp_select_init + end select mp_tend_select end subroutine microphysics_from_MPAS !================================================================================================================= - subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,tend,itimestep,its,ite) + subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,tend_physics,tend,its,ite) !================================================================================================================= !input variables: type(mpas_pool_type),intent(in):: configs type(mpas_pool_type),intent(in):: mesh - integer,intent(in):: itimestep,time_lev + integer,intent(in):: time_lev integer,intent(in):: its,ite -!output variables: +!inout variables: type(mpas_pool_type),intent(inout):: state type(mpas_pool_type),intent(inout):: diag type(mpas_pool_type),intent(inout):: tend type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: tend_physics + !local pointers: - character(len=StrKIND),pointer:: microp_scheme + character(len=StrKIND),pointer:: mp_scheme integer,pointer:: index_qv,index_qc,index_qr,index_qi,index_qs,index_qg - integer,pointer:: index_ni,index_nr + integer,pointer:: index_nc,index_ni,index_nr,index_nifa,index_nwfa real(kind=RKIND),dimension(:),pointer :: surface_pressure,tend_sfc_pressure + real(kind=RKIND),dimension(:),pointer :: nifa2d,nwfa2d real(kind=RKIND),dimension(:,:),pointer :: zgrid real(kind=RKIND),dimension(:,:),pointer :: zz,exner,exner_b,pressure_b,rtheta_p,rtheta_b real(kind=RKIND),dimension(:,:),pointer :: rho_zz,theta_m,pressure_p real(kind=RKIND),dimension(:,:),pointer :: rt_diabatic_tend real(kind=RKIND),dimension(:,:),pointer :: dtheta_dt_mp real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg - real(kind=RKIND),dimension(:,:),pointer :: ni,nr + real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod real(kind=RKIND),dimension(:,:),pointer :: re_cloud,re_ice,re_snow + real(kind=RKIND),dimension(:,:),pointer :: rthmpten,rqvmpten,rqcmpten,rqrmpten,rqimpten,rqsmpten,rqgmpten + real(kind=RKIND),dimension(:,:),pointer :: rncmpten,rnimpten,rnrmpten,rnifampten,rnwfampten real(kind=RKIND),dimension(:,:,:),pointer:: scalars !local variables: @@ -704,7 +897,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te !----------------------------------------------------------------------------------------------------------------- - call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) + call mpas_pool_get_config(configs,'config_microp_scheme',mp_scheme) call mpas_pool_get_array(mesh,'zz' ,zz ) call mpas_pool_get_array(mesh,'zgrid',zgrid) @@ -718,12 +911,6 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te call mpas_pool_get_array(diag,'surface_pressure',surface_pressure) call mpas_pool_get_array(diag,'dtheta_dt_mp' ,dtheta_dt_mp ) - call mpas_pool_get_array(diag_physics,'rainprod',rainprod) - call mpas_pool_get_array(diag_physics,'evapprod',evapprod) - call mpas_pool_get_array(diag_physics,'re_cloud',re_cloud) - call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) - call mpas_pool_get_array(diag_physics,'re_snow' ,re_snow ) - call mpas_pool_get_array(tend,'tend_sfc_pressure',tend_sfc_pressure) call mpas_pool_get_array(state,'rho_zz' ,rho_zz ,time_lev) @@ -732,12 +919,6 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te call mpas_pool_get_dimension(state,'index_qv' ,index_qv ) call mpas_pool_get_dimension(state,'index_qc' ,index_qc ) call mpas_pool_get_dimension(state,'index_qr' ,index_qr ) - call mpas_pool_get_dimension(state,'index_qi' ,index_qi ) - call mpas_pool_get_dimension(state,'index_qs' ,index_qs ) - call mpas_pool_get_dimension(state,'index_qg' ,index_qg ) - call mpas_pool_get_dimension(state,'index_ni' ,index_ni ) - call mpas_pool_get_dimension(state,'index_nr' ,index_nr ) - call mpas_pool_get_array(state,'scalars',scalars,time_lev) qv => scalars(index_qv,:,:) qc => scalars(index_qc,:,:) @@ -779,7 +960,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te enddo enddo -!updates the surface pressure and calculates the surface pressure tendency: +!update surface pressure and calculates the surface pressure tendency: do j = jts,jte do i = its,ite tem1 = zgrid(2,i)-zgrid(1,i) @@ -797,20 +978,31 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te enddo enddo -!variables specific to different cloud microphysics schemes: - microp_select_init: select case(microp_scheme) +!update cloud water species and aerosols as functions of cloud microphysics schemes: + mp_select: select case(trim(mp_scheme)) + case("mp_thompson","mp_thompson_aerosols","mp_wsm6") + call mpas_pool_get_dimension(state,'index_qi',index_qi) + call mpas_pool_get_dimension(state,'index_qs',index_qs) + call mpas_pool_get_dimension(state,'index_qg',index_qg) + qi => scalars(index_qi,:,:) + qs => scalars(index_qs,:,:) + qg => scalars(index_qg,:,:) + + call mpas_pool_get_array(diag_physics,'rainprod',rainprod) + call mpas_pool_get_array(diag_physics,'evapprod',evapprod) + call mpas_pool_get_array(diag_physics,'re_cloud',re_cloud) + call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) + call mpas_pool_get_array(diag_physics,'re_snow' ,re_snow ) - case ("mp_thompson","mp_wsm6") - qi => scalars(index_qi,:,:) - qs => scalars(index_qs,:,:) - qg => scalars(index_qg,:,:) - - do j = jts, jte - do k = kts, kte - do i = its, ite + do j = jts,jte + do k = kts,kte + do i = its,ite qi(k,i) = qi_p(i,k,j) qs(k,i) = qs_p(i,k,j) qg(k,i) = qg_p(i,k,j) + + rainprod(k,i) = rainprod_p(i,k,j) + evapprod(k,i) = evapprod_p(i,k,j) re_cloud(k,i) = recloud_p(i,k,j) re_ice(k,i) = reice_p(i,k,j) re_snow(k,i) = resnow_p(i,k,j) @@ -818,30 +1010,113 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te enddo enddo - microp2_select: select case(microp_scheme) - - case("mp_thompson") - ni => scalars(index_ni,:,:) - nr => scalars(index_nr,:,:) + mp2_select: select case(trim(mp_scheme)) + case("mp_thompson","mp_thompson_aerosols") + call mpas_pool_get_dimension(state,'index_ni',index_ni) + call mpas_pool_get_dimension(state,'index_nr',index_nr) + ni => scalars(index_ni,:,:) + nr => scalars(index_nr,:,:) + + do j = jts,jte + do k = kts,kte + do i = its,ite + ni(k,i) = ni_p(i,k,j) + nr(k,i) = nr_p(i,k,j) + enddo + enddo + enddo + + mp3_select: select case(trim(mp_scheme)) + case("mp_thompson_aerosols") + call mpas_pool_get_dimension(state,'index_nc' ,index_nc ) + call mpas_pool_get_dimension(state,'index_nifa',index_nifa) + call mpas_pool_get_dimension(state,'index_nwfa',index_nwfa) + nc => scalars(index_nc,:,:) + nifa => scalars(index_nifa,:,:) + nwfa => scalars(index_nwfa,:,:) + + call mpas_pool_get_array(diag_physics,'nifa2d',nifa2d) + call mpas_pool_get_array(diag_physics,'nwfa2d',nwfa2d) + do j = jts,jte + do i = its,ite + nifa2d(i) = nifa2d_p(i,j) + nwfa2d(i) = nwfa2d_p(i,j) + enddo + do k = kts, kte + do i = its, ite + nc(k,i) = nc_p(i,k,j) + nifa(k,i) = nifa_p(i,k,j) + nwfa(k,i) = nwfa_p(i,k,j) + enddo + enddo + enddo + + case default + end select mp3_select + + case default + end select mp2_select - do j = jts, jte - do k = kts, kte - do i = its, ite - ni(k,i) = ni_p(i,k,j) - nr(k,i) = nr_p(i,k,j) - rainprod(k,i) = rainprod_p(i,k,j) - evapprod(k,i) = evapprod_p(i,k,j) - enddo - enddo - enddo + case default + end select mp_select + +!end calculation of cloud microphysics tendencies: + mp_tend_select: select case(trim(mp_scheme)) + case("mp_thompson","mp_thompson_aerosols","mp_wsm6") + call mpas_pool_get_array(tend_physics,'rthmpten',rthmpten) + call mpas_pool_get_array(tend_physics,'rqvmpten',rqvmpten) + call mpas_pool_get_array(tend_physics,'rqcmpten',rqcmpten) + call mpas_pool_get_array(tend_physics,'rqrmpten',rqrmpten) + call mpas_pool_get_array(tend_physics,'rqimpten',rqimpten) + call mpas_pool_get_array(tend_physics,'rqsmpten',rqsmpten) + call mpas_pool_get_array(tend_physics,'rqgmpten',rqgmpten) - case default + do k = kts,kte + do i = its,ite + rthmpten(k,i) = (theta_m(k,i)/(1._RKIND+R_v/R_d*max(0._RKIND,qv(k,i)))-rthmpten(k,i))/dt_dyn + rqvmpten(k,i) = (qv(k,i)-rqvmpten(k,i))/dt_dyn + rqcmpten(k,i) = (qc(k,i)-rqcmpten(k,i))/dt_dyn + rqrmpten(k,i) = (qr(k,i)-rqrmpten(k,i))/dt_dyn + rqimpten(k,i) = (qi(k,i)-rqimpten(k,i))/dt_dyn + rqsmpten(k,i) = (qs(k,i)-rqsmpten(k,i))/dt_dyn + rqgmpten(k,i) = (qg(k,i)-rqgmpten(k,i))/dt_dyn + enddo + enddo - end select microp2_select + mp2_tend_select: select case(trim(mp_scheme)) + case("mp_thompson","mp_thompson_aerosols") + call mpas_pool_get_array(tend_physics,'rnimpten',rnimpten) + call mpas_pool_get_array(tend_physics,'rnrmpten',rnrmpten) + + do k = kts,kte + do i = its,ite + rnimpten(k,i) = (ni(k,i)-rnimpten(k,i))/dt_dyn + rnrmpten(k,i) = (nr(k,i)-rnrmpten(k,i))/dt_dyn + enddo + enddo + + mp3_tend_select: select case(trim(mp_scheme)) + case("mp_thompson_aerosols") + call mpas_pool_get_array(tend_physics,'rncmpten',rncmpten) + call mpas_pool_get_array(tend_physics,'rnifampten',rnifampten) + call mpas_pool_get_array(tend_physics,'rnwfampten',rnwfampten) + + do k = kts,kte + do i = its,ite + rncmpten(k,i) = (nc(k,i)-rncmpten(k,i))/dt_dyn + rnifampten(k,i) = (nifa(k,i)-rnifampten(k,i))/dt_dyn + rnwfampten(k,i) = (nwfa(k,i)-rnwfampten(k,i))/dt_dyn + enddo + enddo + + case default + end select mp3_tend_select + + case default + end select mp2_tend_select case default - - end select microp_select_init + end select mp_tend_select end subroutine microphysics_to_MPAS diff --git a/src/core_atmosphere/physics/mpas_atmphys_lsm_noahinit.F b/src/core_atmosphere/physics/mpas_atmphys_lsm_noahinit.F index 995a9cecc..07481fd6f 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_lsm_noahinit.F +++ b/src/core_atmosphere/physics/mpas_atmphys_lsm_noahinit.F @@ -151,14 +151,6 @@ subroutine lsminit(dminfo,mesh,configs,diag_physics,sfc_input) !initializes soil liquid water content SH2O: do iCell = 1, nCells - - !---srf - do ns = 1, nSoilLevels - if(smois(ns,iCell) < 0.99) smois(ns,iCell) = 0.7* smois(ns,iCell) - enddo - call physics_message( 'srf: initial soil moisture reduced by 30%' ) - !---srf - bx = bb(isltyp(iCell)) smcmax = maxsmc(isltyp(iCell)) psisat = satpsi(isltyp(iCell)) diff --git a/src/core_atmosphere/physics/mpas_atmphys_lsm_noahmpfinalize.F b/src/core_atmosphere/physics/mpas_atmphys_lsm_noahmpfinalize.F new file mode 100644 index 000000000..5e6f999b4 --- /dev/null +++ b/src/core_atmosphere/physics/mpas_atmphys_lsm_noahmpfinalize.F @@ -0,0 +1,40 @@ +! Copyright (c) 2013, Los Alamos National Security, LLC (LANS) +! and the University Corporation for Atmospheric Research (UCAR). +! +! Unless noted otherwise source code is licensed under the BSD license. +! Additional copyright and license information can be found in the LICENSE file +! distributed with this code, or at http://mpas-dev.github.com/license.html +! +!================================================================================================================= + module mpas_atmphys_lsm_noahmpfinalize + use mpas_log,only: mpas_log_write + + use mpas_atmphys_vars,only: mpas_noahmp + use NoahmpIOVarFinalizeMod,only: NoahmpIOVarFinalizeDefault + + + private + public:: sf_noahmp_deallocate + + + contains + +!================================================================================================================= + subroutine sf_noahmp_deallocate( ) +!================================================================================================================= +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write(' ') +!call mpas_log_write('--- enter subroutine sf_noahmp_deallocate:') + + +!--- deallocate Noahmp arrays: + call NoahmpIOVarFinalizeDefault(mpas_noahmp) + + +!call mpas_log_write('--- end subroutine sf_noahmp_deallocate:') + + end subroutine sf_noahmp_deallocate + +!================================================================================================================= + end module mpas_atmphys_lsm_noahmpfinalize +!================================================================================================================= diff --git a/src/core_atmosphere/physics/mpas_atmphys_lsm_noahmpinit.F b/src/core_atmosphere/physics/mpas_atmphys_lsm_noahmpinit.F new file mode 100644 index 000000000..da1cead2c --- /dev/null +++ b/src/core_atmosphere/physics/mpas_atmphys_lsm_noahmpinit.F @@ -0,0 +1,501 @@ +! Copyright (c) 2013, Los Alamos National Security, LLC (LANS) +! and the University Corporation for Atmospheric Research (UCAR). +! +! Unless noted otherwise source code is licensed under the BSD license. +! Additional copyright and license information can be found in the LICENSE file +! distributed with this code, or at http://mpas-dev.github.com/license.html +! +!================================================================================================================= + module mpas_atmphys_lsm_noahmpinit + use mpas_log + use mpas_pool_routines + + use mpas_atmphys_utilities,only: physics_error_fatal + use mpas_atmphys_vars,only : mpas_noahmp + + use NoahmpInitMainMod,only : NoahmpInitMain + use NoahmpIOVarInitMod,only: NoahmpIOVarInitDefault + use NoahmpIOVarType + use NoahmpReadNamelistMod + use NoahmpReadTableMod,only: NoahmpReadTable + + + private + public:: init_lsm_noahmp + + + contains + + +!================================================================================================================= + subroutine init_lsm_noahmp(configs,mesh,diag_physics,diag_physics_noahmp,output_noahmp,sfc_input) +!================================================================================================================= + +!--- input arguments: + type(mpas_pool_type),intent(in):: configs + type(mpas_pool_type),intent(in):: mesh + +!--- inout arguments: + type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: diag_physics_noahmp + type(mpas_pool_type),intent(inout):: output_noahmp + type(mpas_pool_type),intent(inout):: sfc_input + +!--- local variables and arrays: + character(len=StrKIND),pointer:: mminlu + + integer:: ns + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write(' ') +!call mpas_log_write('--- enter subroutine init_lsm_noahmp:') + + +!--- initialize dimensions: + call noahmp_read_dimensions(mesh) + + +!--- initialize namelist options: + call noahmp_read_namelist(configs) + + +!--- allocate Noahmp arrays: +!call mpas_log_write(' ') +!call mpas_log_write('--- enter subroutine NoahmpIOVarInitDefault:') + call NoahmpIOVarInitDefault(mpas_noahmp) +!call mpas_log_write('--- end subroutine NoahmpIOVarInitDefault:') + + +!--- read NoahmpTable.TBL: + call mpas_pool_get_array(sfc_input,'mminlu',mminlu) + mpas_noahmp%llanduse = mminlu + +!call mpas_log_write(' ') +!call mpas_log_write('--- enter subroutine NoahmpReadTable:') + call NoahmpReadTable(mpas_noahmp) +!call mpas_log_write('--- isbarren_table = $i',intArgs=(/mpas_noahmp%isbarren_table/)) +!call mpas_log_write('--- isice_table = $i',intArgs=(/mpas_noahmp%isice_table/) ) +!call mpas_log_write('--- iswater_table = $i',intArgs=(/mpas_noahmp%iswater_table/) ) +!call mpas_log_write('--- isurban_table = $i',intArgs=(/mpas_noahmp%isurban_table/) ) +!call mpas_log_write('--- urbtype_beg = $i',intArgs=(/mpas_noahmp%urbtype_beg/) ) +!call mpas_log_write('--- slcats_table = $i',intArgs=(/mpas_noahmp%slcats_table/) ) +!call mpas_log_write(' ') +!do ns = 1,mpas_noahmp%slcats_table +! call mpas_log_write('--- BEXP,SMCMAX,PSISAT: $i $r $r $r',intArgs=(/ns/),realArgs= & +! (/mpas_noahmp%bexp_table(ns),mpas_noahmp%smcmax_table(ns),mpas_noahmp%psisat_table(ns)/)) +!enddo +!call mpas_log_write('--- end subroutine NoahmpReadTable:') + + +!--- initialize noahmp: + call noahmp_init(configs,mesh,diag_physics,diag_physics_noahmp,output_noahmp,sfc_input) + + +!call mpas_log_write('--- end subroutine init_lsm_noahmp:') +!call mpas_log_write(' ') + + end subroutine init_lsm_noahmp + +!================================================================================================================= + subroutine noahmp_read_dimensions(mesh) +!================================================================================================================= + +!--- input arguments: + type(mpas_pool_type),intent(in):: mesh + +!--- local variables and pointers: + integer,pointer:: nCellsSolve,nVertLevels + integer,pointer:: nSoilLevels,nSnowLevels + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write('--- enter subroutine noahmp_read_dimensions:') + + + call mpas_pool_get_dimension(mesh,'nCellsSolve',nCellsSolve) + call mpas_pool_get_dimension(mesh,'nVertLevels',nVertLevels) + call mpas_pool_get_dimension(mesh,'nSoilLevels',nSoilLevels) + call mpas_pool_get_dimension(mesh,'nSnowLevels',nSnowLevels) + + mpas_noahmp%its = 1 + mpas_noahmp%ite = nCellsSolve + mpas_noahmp%kts = 1 + mpas_noahmp%kte = nVertLevels + + mpas_noahmp%nsoil = nSoilLevels + mpas_noahmp%nsnow = nSnowLevels + +!call mpas_log_write(' its = $i ite = $i', intArgs=(/mpas_noahmp%its,mpas_noahmp%ite/)) +!call mpas_log_write(' kts = $i kte = $i', intArgs=(/mpas_noahmp%kts,mpas_noahmp%kte/)) +!call mpas_log_write(' ') +!call mpas_log_write(' nSoilLevels = $i',intArgs=(/mpas_noahmp%nsoil/)) +!call mpas_log_write(' nSnowLevels = $i',intArgs=(/mpas_noahmp%nsnow/)) + + +!call mpas_log_write('--- end subroutine noahmp_read_dimensions:') + + end subroutine noahmp_read_dimensions + +!================================================================================================================= + subroutine noahmp_read_namelist(configs) +!================================================================================================================= + +!--- input arguments: + type(mpas_pool_type),intent(in):: configs + + +!--- local variables and pointers: + integer,pointer:: iopt_dveg , iopt_crs , iopt_btr , iopt_runsrf , iopt_runsub , iopt_sfc , iopt_frz , & + iopt_inf , iopt_rad , iopt_alb , iopt_snf , iopt_tksno , iopt_tbot , iopt_stc , & + iopt_gla , iopt_rsf , iopt_soil , iopt_pedo , iopt_crop , iopt_irr , iopt_irrm , & + iopt_infdv , iopt_tdrn + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write(' ') +!call mpas_log_write('--- enter subroutine noahmp_read_namelist:') + + call mpas_pool_get_config(configs,'config_noahmp_iopt_dveg' ,iopt_dveg ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_crs' ,iopt_crs ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_btr' ,iopt_btr ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_runsrf',iopt_runsrf) + call mpas_pool_get_config(configs,'config_noahmp_iopt_runsub',iopt_runsub) + call mpas_pool_get_config(configs,'config_noahmp_iopt_sfc' ,iopt_sfc ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_frz' ,iopt_frz ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_inf' ,iopt_inf ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_rad' ,iopt_rad ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_alb' ,iopt_alb ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_snf' ,iopt_snf ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_tksno' ,iopt_tksno ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_tbot' ,iopt_tbot ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_stc' ,iopt_stc ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_gla' ,iopt_gla ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_rsf' ,iopt_rsf ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_soil' ,iopt_soil ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_pedo' ,iopt_pedo ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_crop' ,iopt_crop ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_irr' ,iopt_irr ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_irrm' ,iopt_irrm ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_infdv' ,iopt_infdv ) + call mpas_pool_get_config(configs,'config_noahmp_iopt_tdrn' ,iopt_tdrn ) + + mpas_noahmp%iopt_dveg = iopt_dveg + mpas_noahmp%iopt_crs = iopt_crs + mpas_noahmp%iopt_btr = iopt_btr + mpas_noahmp%iopt_runsrf = iopt_runsrf + mpas_noahmp%iopt_runsub = iopt_runsub + mpas_noahmp%iopt_sfc = iopt_sfc + mpas_noahmp%iopt_frz = iopt_frz + mpas_noahmp%iopt_inf = iopt_inf + mpas_noahmp%iopt_rad = iopt_rad + mpas_noahmp%iopt_alb = iopt_alb + mpas_noahmp%iopt_snf = iopt_snf + mpas_noahmp%iopt_tksno = iopt_tksno + mpas_noahmp%iopt_tbot = iopt_tbot + mpas_noahmp%iopt_stc = iopt_stc + mpas_noahmp%iopt_gla = iopt_gla + mpas_noahmp%iopt_rsf = iopt_rsf + mpas_noahmp%iopt_soil = iopt_soil + mpas_noahmp%iopt_pedo = iopt_pedo + mpas_noahmp%iopt_crop = iopt_crop + mpas_noahmp%iopt_irr = iopt_irr + mpas_noahmp%iopt_irrm = iopt_irrm + mpas_noahmp%iopt_infdv = iopt_infdv + mpas_noahmp%iopt_tdrn = iopt_tdrn + +!--- check options that are not available in MPAS: + if(iopt_soil == 4) call physics_error_fatal("NOAHmp: iopt_soil = 4 is not an available option") + if(iopt_crop > 0 ) call physics_error_fatal("NOAHmp: crop model is not an available option. set iopt_crop = 0") + if(iopt_irr > 0 ) call physics_error_fatal("NOAHmp: irrigation is not an available option. set iopt_irr = 0" ) + if(iopt_irrm > 0 ) call physics_error_fatal("NOAHmp: irrigation is not an available option. set iopt_irrm = 0") + if(iopt_tdrn > 0 ) call physics_error_fatal("NOAHmp: drainage is not an available option. set iopt_tdrn = 0" ) + +!call mpas_log_write('--- end subroutine noahmp_read_namelist:') + + end subroutine noahmp_read_namelist + +!================================================================================================================= + subroutine noahmp_init(configs,mesh,diag_physics,diag_physics_noahmp,output_noahmp,sfc_input) +!================================================================================================================= + +!--- input arguments: + type(mpas_pool_type),intent(in):: configs + type(mpas_pool_type),intent(in):: mesh + +!--- inout arguments: + type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: diag_physics_noahmp + type(mpas_pool_type),intent(inout):: output_noahmp + type(mpas_pool_type),intent(inout):: sfc_input + +!local pointers: + logical,pointer:: urban_physics + + integer,pointer:: nsoilcomps + integer,dimension(:),pointer:: isltyp,ivgtyp + integer,dimension(:),pointer:: isnowxy + integer,dimension(:),pointer:: irnumsi,irnummi,irnumfi + + real(kind=RKIND),pointer:: dt + + real(kind=RKIND),dimension(:),pointer:: soilcl1,soilcl2,soilcl3,soilcl4 + real(kind=RKIND),dimension(:,:),pointer:: soilcomp + + real(kind=RKIND),dimension(:),pointer:: areaCell,latCell,lonCell + real(kind=RKIND),dimension(:),pointer:: canwat,lai,skintemp,snow,snowc,snowh,tmn,xice,xland + real(kind=RKIND),dimension(:),pointer:: alboldxy,canicexy,canliqxy,chxy,cmxy,eahxy,fastcpxy,fwetxy,gddxy, & + grainxy,lfmassxy,qrainxy,qsnowxy,rtmassxy,sneqvoxy,stblcpxy,stmassxy, & + tahxy,tgxy,tvxy,xsaixy,waxy,woodxy,wslakexy,wtxy,zwtxy + real(kind=RKIND),dimension(:),pointer:: irwatsi,ireloss,irrsplh,irwatmi,irmivol,irwatfi,irfivol + real(kind=RKIND),dimension(:),pointer:: qtdrain,t2mbxy,t2mvxy + + real(kind=RKIND),dimension(:,:),pointer:: dzs,sh2o,smois,tslb + real(kind=RKIND),dimension(:,:),pointer:: snicexy,snliqxy,tsnoxy,zsnsoxy + +!local variables and pointers: + logical,pointer:: do_restart + logical,parameter:: fndsnowh = .true. + integer:: i,its,ite,ns,nsoil,nsnow,nzsnow + +!----------------------------------------------------------------------------------------------------------------- +!call mpas_log_write(' ') +!call mpas_log_write('--- enter subroutine noahmp_init:') + + +!--- initialization of local dimensions: + its = mpas_noahmp%its + ite = mpas_noahmp%ite + nsoil = mpas_noahmp%nsoil + nsnow = mpas_noahmp%nsnow + nzsnow = nsnow + nsoil + + +!--- initialization of Noah-MP run parameters: + call mpas_pool_get_config(configs,'config_do_restart',do_restart) + call mpas_pool_get_config(configs,'config_urban_physics',urban_physics) + call mpas_pool_get_config(configs,'config_dt',dt) + + mpas_noahmp%restart_flag = do_restart + mpas_noahmp%sf_urban_physics = 0 + if(urban_physics) mpas_noahmp%sf_urban_physics = 1 + + mpas_noahmp%fndsnowh = fndsnowh + mpas_noahmp%dtbl = dt + + +!--- initialization of Noah-MP mesh variables: + call mpas_pool_get_dimension(mesh,'nSoilComps',nsoilcomps) + + call mpas_pool_get_array(mesh,'areaCell',areaCell) + call mpas_pool_get_array(mesh,'latCell' ,latCell ) + call mpas_pool_get_array(mesh,'lonCell' ,lonCell ) + call mpas_pool_get_array(mesh,'soilcomp',soilcomp) + call mpas_pool_get_array(mesh,'soilcl1' ,soilcl1 ) + call mpas_pool_get_array(mesh,'soilcl2' ,soilcl2 ) + call mpas_pool_get_array(mesh,'soilcl3' ,soilcl3 ) + call mpas_pool_get_array(mesh,'soilcl4' ,soilcl4 ) + + do i = its,ite + mpas_noahmp%areaxy(i) = areaCell(i) + mpas_noahmp%xlat(i) = latCell(i) + mpas_noahmp%xlong(i) = lonCell(i) + enddo + if(mpas_noahmp%iopt_soil > 1) then + do i = its,ite + mpas_noahmp%soilcl1(i) = soilcl1(i) + mpas_noahmp%soilcl2(i) = soilcl2(i) + mpas_noahmp%soilcl3(i) = soilcl3(i) + mpas_noahmp%soilcl4(i) = soilcl4(i) + do ns = 1,nsoilcomps + mpas_noahmp%soilcomp(i,ns) = soilcomp(ns,i) + enddo + enddo + endif + + +!--- initialization of time-invariant surface variables needed in subroutine NoahmpInitMain: + call mpas_pool_get_array(sfc_input,'dzs' ,dzs ) + call mpas_pool_get_array(sfc_input,'isltyp',isltyp) + call mpas_pool_get_array(sfc_input,'ivgtyp',ivgtyp) + + do i = its, ite + mpas_noahmp%isltyp(i) = isltyp(i) + mpas_noahmp%ivgtyp(i) = ivgtyp(i) + enddo + do ns = 1, nsoil + mpas_noahmp%dzs(ns) = dzs(ns,its) + enddo + + + if(mpas_noahmp%restart_flag) return + +!--- initialization of time-varying variables needed in subroutine NoahmpInitMain: + call mpas_pool_get_array(sfc_input,'skintemp',skintemp) + call mpas_pool_get_array(sfc_input,'snow' ,snow ) + call mpas_pool_get_array(sfc_input,'snowc' ,snowc ) + call mpas_pool_get_array(sfc_input,'snowh' ,snowh ) + call mpas_pool_get_array(sfc_input,'tmn' ,tmn ) + call mpas_pool_get_array(sfc_input,'xice' ,xice ) + call mpas_pool_get_array(sfc_input,'xland' ,xland ) + call mpas_pool_get_array(sfc_input,'sh2o' ,sh2o ) + call mpas_pool_get_array(sfc_input,'smois' ,smois ) + call mpas_pool_get_array(sfc_input,'tslb' ,tslb ) + + call mpas_pool_get_array(diag_physics,'canwat',canwat) + call mpas_pool_get_array(diag_physics,'lai',lai) + + call mpas_pool_get_array(diag_physics_noahmp,'alboldxy',alboldxy) + call mpas_pool_get_array(diag_physics_noahmp,'canicexy',canicexy) + call mpas_pool_get_array(diag_physics_noahmp,'canliqxy',canliqxy) + call mpas_pool_get_array(diag_physics_noahmp,'chxy' ,chxy ) + call mpas_pool_get_array(diag_physics_noahmp,'cmxy' ,cmxy ) + call mpas_pool_get_array(diag_physics_noahmp,'eahxy' ,eahxy ) + call mpas_pool_get_array(diag_physics_noahmp,'fastcpxy',fastcpxy) + call mpas_pool_get_array(diag_physics_noahmp,'fwetxy' ,fwetxy ) + call mpas_pool_get_array(diag_physics_noahmp,'gddxy' ,gddxy ) + call mpas_pool_get_array(diag_physics_noahmp,'grainxy' ,grainxy ) + call mpas_pool_get_array(diag_physics_noahmp,'lfmassxy',lfmassxy) + call mpas_pool_get_array(diag_physics_noahmp,'qrainxy' ,qrainxy ) + call mpas_pool_get_array(diag_physics_noahmp,'qsnowxy' ,qsnowxy ) + call mpas_pool_get_array(diag_physics_noahmp,'rtmassxy',rtmassxy) + call mpas_pool_get_array(diag_physics_noahmp,'sneqvoxy',sneqvoxy) + call mpas_pool_get_array(diag_physics_noahmp,'stblcpxy',stblcpxy) + call mpas_pool_get_array(diag_physics_noahmp,'stmassxy',stmassxy) + call mpas_pool_get_array(diag_physics_noahmp,'tahxy' ,tahxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tgxy' ,tgxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tvxy' ,tvxy ) + call mpas_pool_get_array(diag_physics_noahmp,'waxy' ,waxy ) + call mpas_pool_get_array(diag_physics_noahmp,'woodxy' ,woodxy ) + call mpas_pool_get_array(diag_physics_noahmp,'wslakexy',wslakexy) + call mpas_pool_get_array(diag_physics_noahmp,'wtxy' ,wtxy ) + call mpas_pool_get_array(diag_physics_noahmp,'xsaixy' ,xsaixy ) + call mpas_pool_get_array(diag_physics_noahmp,'zwtxy' ,zwtxy ) + + call mpas_pool_get_array(diag_physics_noahmp,'irnumsi' ,irnumsi ) + call mpas_pool_get_array(diag_physics_noahmp,'irwatsi' ,irwatsi ) + call mpas_pool_get_array(diag_physics_noahmp,'ireloss' ,ireloss ) + call mpas_pool_get_array(diag_physics_noahmp,'irrsplh' ,irrsplh ) + call mpas_pool_get_array(diag_physics_noahmp,'irnummi' ,irnummi ) + call mpas_pool_get_array(diag_physics_noahmp,'irwatmi' ,irwatmi ) + call mpas_pool_get_array(diag_physics_noahmp,'irmivol' ,irmivol ) + call mpas_pool_get_array(diag_physics_noahmp,'irnumfi' ,irnumfi ) + call mpas_pool_get_array(diag_physics_noahmp,'irwatfi' ,irwatfi ) + call mpas_pool_get_array(diag_physics_noahmp,'irfivol', irfivol ) + + call mpas_pool_get_array(diag_physics_noahmp,'isnowxy' ,isnowxy ) + call mpas_pool_get_array(diag_physics_noahmp,'snicexy' ,snicexy ) + call mpas_pool_get_array(diag_physics_noahmp,'snliqxy' ,snliqxy ) + call mpas_pool_get_array(diag_physics_noahmp,'tsnoxy' ,tsnoxy ) + call mpas_pool_get_array(diag_physics_noahmp,'zsnsoxy' ,zsnsoxy ) + + call mpas_pool_get_array(output_noahmp,'t2mbxy',t2mbxy ) + call mpas_pool_get_array(output_noahmp,'t2mvxy',t2mvxy ) + call mpas_pool_get_array(output_noahmp,'qtdrain',qtdrain) + + + do i = its,ite + mpas_noahmp%tmn(i) = tmn(i) + mpas_noahmp%tsk(i) = skintemp(i) + mpas_noahmp%xice(i) = xice(i) + mpas_noahmp%xland(i) = xland(i) + mpas_noahmp%snow(i) = snow(i) + mpas_noahmp%snowh(i) = snowh(i) + + do ns = 1,nsoil + mpas_noahmp%sh2o(i,ns) = sh2o(ns,i) + mpas_noahmp%smois(i,ns) = smois(ns,i) + mpas_noahmp%tslb(i,ns) = tslb(ns,i) + enddo + enddo + + + call NoahmpInitMain(mpas_noahmp) + + +!--- update of all time-varying Noah-MP variables: + do i = its,ite + isnowxy(i) = mpas_noahmp%isnowxy(i) + snow(i) = mpas_noahmp%snow(i) ! in mm (check unit in noahmp driver). + snowh(i) = mpas_noahmp%snowh(i) ! in m (check unit in noahmp driver). + snowc(i) = 0._RKIND + if(snow(i) .gt. 0._RKIND) snowc(i) = 1. + + do ns = 1,nsoil + mpas_noahmp%sh2o(i,ns) = sh2o(ns,i) + mpas_noahmp%smois(i,ns) = smois(ns,i) + mpas_noahmp%tslb(i,ns) = tslb(ns,i) + enddo + enddo + + do ns = 1,nsnow + n = ns - nsnow + do i = its,ite + tsnoxy(ns,i) = mpas_noahmp%tsnoxy(i,n) + snicexy(ns,i) = mpas_noahmp%snicexy(i,n) + snliqxy(ns,i) = mpas_noahmp%snliqxy(i,n) + zsnsoxy(ns,i) = mpas_noahmp%zsnsoxy(i,n) + enddo + enddo + do ns = nsnow+1,nzsnow + n = ns - nsnow + do i = its,ite + zsnsoxy(ns,i) = mpas_noahmp%zsnsoxy(i,n) + enddo + enddo + + do i = its,ite + canwat(i) = mpas_noahmp%canwat(i) + lai(i) = mpas_noahmp%lai(i) + + isnowxy(i) = mpas_noahmp%isnowxy(i) + alboldxy(i) = mpas_noahmp%alboldxy(i) + canicexy(i) = mpas_noahmp%canicexy(i) + canliqxy(i) = mpas_noahmp%canliqxy(i) + chxy(i) = mpas_noahmp%chxy(i) + cmxy(i) = mpas_noahmp%cmxy(i) + eahxy(i) = mpas_noahmp%eahxy(i) + fastcpxy(i) = mpas_noahmp%fastcpxy(i) + fwetxy(i) = mpas_noahmp%fwetxy(i) + gddxy(i) = mpas_noahmp%gddxy(i) + grainxy(i) = mpas_noahmp%grainxy(i) + lfmassxy(i) = mpas_noahmp%lfmassxy(i) + qrainxy(i) = mpas_noahmp%qrainxy(i) + qsnowxy(i) = mpas_noahmp%qsnowxy(i) + rtmassxy(i) = mpas_noahmp%rtmassxy(i) + sneqvoxy(i) = mpas_noahmp%sneqvoxy(i) + stblcpxy(i) = mpas_noahmp%stblcpxy(i) + stmassxy(i) = mpas_noahmp%stmassxy(i) + tahxy(i) = mpas_noahmp%tahxy(i) + tgxy(i) = mpas_noahmp%tgxy(i) + tvxy(i) = mpas_noahmp%tvxy(i) + waxy(i) = mpas_noahmp%waxy(i) + woodxy(i) = mpas_noahmp%woodxy(i) + wslakexy(i) = mpas_noahmp%wslakexy(i) + wtxy(i) = mpas_noahmp%wtxy(i) + xsaixy(i) = mpas_noahmp%xsaixy(i) + zwtxy(i) = mpas_noahmp%zwtxy(i) + + qtdrain(i) = mpas_noahmp%qtdrain(i) + t2mbxy(i) = mpas_noahmp%t2mbxy(i) + t2mvxy(i) = mpas_noahmp%t2mvxy(i) + enddo + + do i = its, ite + irnumsi(i) = mpas_noahmp%irnumsi(i) + irwatsi(i) = mpas_noahmp%irwatsi(i) + ireloss(i) = mpas_noahmp%ireloss(i) + irrsplh(i) = mpas_noahmp%irrsplh(i) + irnummi(i) = mpas_noahmp%irnummi(i) + irwatmi(i) = mpas_noahmp%irwatmi(i) + irmivol(i) = mpas_noahmp%irmivol(i) + irnumfi(i) = mpas_noahmp%irnumfi(i) + irwatfi(i) = mpas_noahmp%irwatfi(i) + irfivol(i) = mpas_noahmp%irfivol(i) + enddo + + +!call mpas_log_write('--- end subroutine noahmp_init:') + + end subroutine noahmp_init + +!================================================================================================================= + end module mpas_atmphys_lsm_noahmpinit +!================================================================================================================= diff --git a/src/core_atmosphere/physics/mpas_atmphys_manager.F b/src/core_atmosphere/physics/mpas_atmphys_manager.F index 1056896f8..629f210a0 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_manager.F +++ b/src/core_atmosphere/physics/mpas_atmphys_manager.F @@ -23,6 +23,8 @@ module mpas_atmphys_manager public:: physics_timetracker,physics_run_init integer, public:: year !Current year. + integer, public:: month !Current month. + integer, public:: day !Current day of the month. integer, public:: julday !Initial Julian day. real(kind=RKIND), public:: curr_julday !Current Julian day (= 0.0 at 0Z on January 1st). real(kind=RKIND), public:: gmt !Greenwich mean time hour of model start (hr) @@ -183,8 +185,8 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) !call mpas_log_write('--- enter subroutine physics_timetracker: itimestep = $i', intArgs=(/itimestep/)) call mpas_pool_get_config(domain%blocklist%configs,'config_convection_scheme',config_convection_scheme) - call mpas_pool_get_config(domain%blocklist%configs,'config_radt_lw_scheme' ,config_radt_lw_scheme ) - call mpas_pool_get_config(domain%blocklist%configs,'config_radt_sw_scheme' ,config_radt_sw_scheme ) + call mpas_pool_get_config(domain%blocklist%configs,'config_radt_lw_scheme' ,config_radt_lw_scheme ) + call mpas_pool_get_config(domain%blocklist%configs,'config_radt_sw_scheme' ,config_radt_sw_scheme ) call mpas_pool_get_config(domain%blocklist%configs,'config_conv_interval' ,config_conv_interval ) call mpas_pool_get_config(domain%blocklist%configs,'config_radtlw_interval' ,config_radtlw_interval ) @@ -200,7 +202,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) !update the current julian day and current year: currTime = mpas_get_clock_time(clock,MPAS_NOW,ierr) - call mpas_get_time(curr_time=currTime,dateTimeString=timeStamp,YYYY=yr,H=h,M=m, & + call mpas_get_time(curr_time=currTime,dateTimeString=timeStamp,YYYY=yr,MM=month,DD=day,H=h,M=m, & S=s,S_n=s_n,S_d=s_d,DoY=DoY,ierr=ierr) utc_h = real(h) + real(m) / 60.0 + real(s + s_n / s_d) / 3600.0 @@ -209,13 +211,13 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) julday = DoY curr_julday = real(julday-1) + utc_h / 24.0 LeapYear = isLeapYear(year) -! call mpas_log_write(' YEAR =$i', intArgs=(/year/)) -! call mpas_log_write(' JULDAY =$i', intArgs=(/julday/)) -! call mpas_log_write(' GMT =$r', realArgs=(/gmt/)) -! call mpas_log_write(' UTC_H =$r', realArgs=(/utc_h/)) -! call mpas_log_write(' CURR_JULDAY =$r', realArgs=(/curr_julday/)) -! call mpas_log_write(' LEAP_YEAR =$l', logicArgs=(/LeapYear/)) -! call mpas_log_write(' TIME STAMP ='//trim(timeStamp)) +!call mpas_log_write(' YEAR = $i', intArgs=(/year/)) +!call mpas_log_write(' JULDAY = $i', intArgs=(/julday/)) +!call mpas_log_write(' GMT = $r', realArgs=(/gmt/)) +!call mpas_log_write(' UTC_H = $r', realArgs=(/utc_h/)) +!call mpas_log_write(' CURR_JULDAY = $r', realArgs=(/curr_julday/)) +!call mpas_log_write(' LEAP_YEAR = $l', logicArgs=(/LeapYear/)) +!call mpas_log_write(' TIME STAMP = '//trim(timeStamp)) block => domain % blocklist do while(associated(block)) @@ -266,7 +268,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) elseif(config_radtlw_interval == "none") then l_radtlw = .true. endif - call mpas_log_write('--- time to run the LW radiation scheme L_RADLW =$l',logicArgs=(/l_radtlw/)) + call mpas_log_write('--- time to run the LW radiation scheme L_RADLW = $l',logicArgs=(/l_radtlw/)) endif if(trim(config_radt_sw_scheme) /= "off") then @@ -280,7 +282,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) elseif(config_radtsw_interval == "none") then l_radtsw = .true. endif - call mpas_log_write('--- time to run the SW radiation scheme L_RADSW =$l',logicArgs=(/l_radtsw/)) + call mpas_log_write('--- time to run the SW radiation scheme L_RADSW = $l',logicArgs=(/l_radtsw/)) endif !check to see if it is time to run the parameterization of convection: @@ -295,7 +297,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) elseif(config_conv_interval == "none") then l_conv = .true. endif - call mpas_log_write('--- time to run the convection scheme L_CONV =$l',logicArgs=(/l_conv/)) + call mpas_log_write('--- time to run the convection scheme L_CONV = $l',logicArgs=(/l_conv/)) endif !check to see if it is time to update ozone to the current julian day in the RRTMG radiation codes: @@ -323,7 +325,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) call mpas_reset_clock_alarm(clock,camAlarmID,ierr=ierr) doabsems = .true. endif - call mpas_log_write('--- time to update CAM absorptivity and emissivity arrays DOABSEMS =$l',logicArgs=(/doabsems/)) + call mpas_log_write('--- time to update CAM absorptivity and emissivity arrays DOABSEMS = $l',logicArgs=(/doabsems/)) endif !check to see if it is time to save the local CAM arrays absnst_p, absnxt_p, and emstot_p to @@ -334,7 +336,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) call mpas_reset_clock_alarm(clock,camlwAlarmID,camlwTimeStep,ierr=ierr) l_camlw = .true. endif - call mpas_log_write('--- time to write local CAM arrays to MPAS arrays L_CAMLW =$l',logicArgs=(/l_camlw/)) + call mpas_log_write('--- time to write local CAM arrays to MPAS arrays L_CAMLW = $l',logicArgs=(/l_camlw/)) endif !check to see if it is time to apply limit to the accumulated rain due to cloud microphysics @@ -345,7 +347,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) call mpas_reset_clock_alarm(clock,acrainAlarmID,acrainTimeStep,ierr=ierr) l_acrain = .true. endif - call mpas_log_write('--- time to apply limit to accumulated rainc and rainnc L_ACRAIN =$l',logicArgs=(/l_acrain/)) + call mpas_log_write('--- time to apply limit to accumulated rainc and rainnc L_ACRAIN = $l',logicArgs=(/l_acrain/)) endif !check to see if it is time to apply limit to the accumulated radiation diagnostics due to @@ -356,7 +358,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) call mpas_reset_clock_alarm(clock,acradtAlarmID,acradtTimeStep,ierr=ierr) l_acradt = .true. endif - call mpas_log_write('--- time to apply limit to accumulated radiation diags. L_ACRADT =$l',logicArgs=(/l_acradt/)) + call mpas_log_write('--- time to apply limit to accumulated radiation diags. L_ACRADT = $l',logicArgs=(/l_acradt/)) endif !check to see if it is time to calculate additional physics diagnostics: @@ -368,7 +370,7 @@ subroutine physics_timetracker(domain,dt,clock,itimestep,xtime_s) if (mpas_is_alarm_ringing(clock,diagAlarmID,interval=dtInterval,ierr=ierr)) then l_diags = .true. end if - call mpas_log_write('--- time to calculate additional physics_diagnostics =$l',logicArgs=(/l_diags/)) + call mpas_log_write('--- time to calculate additional physics_diagnostics = $l',logicArgs=(/l_diags/)) end subroutine physics_timetracker @@ -384,18 +386,18 @@ subroutine physics_run_init(configs,mesh,state,clock,stream_manager) type (MPAS_streamManager_type), intent(inout) :: stream_manager !local pointers: - character(len=StrKIND),pointer:: config_convection_scheme, & - config_lsm_scheme, & - config_microp_scheme, & - config_radt_lw_scheme, & + character(len=StrKIND),pointer:: config_convection_scheme, & + config_lsm_scheme, & + config_microp_scheme, & + config_radt_lw_scheme, & config_radt_sw_scheme - character(len=StrKIND),pointer:: config_conv_interval, & - config_pbl_interval, & - config_radtlw_interval, & - config_radtsw_interval, & - config_bucket_update, & - config_camrad_abs_update, & + character(len=StrKIND),pointer:: config_conv_interval, & + config_pbl_interval, & + config_radtlw_interval, & + config_radtsw_interval, & + config_bucket_update, & + config_camrad_abs_update, & config_greeness_update logical,pointer:: config_sst_update @@ -445,7 +447,6 @@ subroutine physics_run_init(configs,mesh,state,clock,stream_manager) call mpas_pool_get_dimension(mesh,'nAerLevels' ,nAerLevels ) call mpas_pool_get_dimension(mesh,'nOznLevels' ,nOznLevels ) call mpas_pool_get_dimension(mesh,'nCellsSolve',nCellsSolve) - call mpas_pool_get_dimension(mesh,'nCellsSolve',nCellsSolve) call mpas_pool_get_dimension(mesh,'nSoilLevels',nSoilLevels) call mpas_pool_get_dimension(mesh,'nVertLevels',nVertLevels) @@ -642,10 +643,11 @@ subroutine physics_run_init(configs,mesh,state,clock,stream_manager) end if endif - call mpas_log_write(' DT_RADTLW =$r', realArgs=(/dt_radtlw/)) - call mpas_log_write(' DT_RADTSW =$r', realArgs=(/dt_radtsw/)) - call mpas_log_write(' DT_CU =$r', realArgs=(/dt_cu/)) - call mpas_log_write(' DT_PBL =$r', realArgs=(/dt_pbl/)) + call mpas_log_write(' ') + call mpas_log_write('DT_RADTLW = $r', realArgs=(/dt_radtlw/)) + call mpas_log_write('DT_RADTSW = $r', realArgs=(/dt_radtsw/)) + call mpas_log_write('DT_CU = $r', realArgs=(/dt_cu/)) + call mpas_log_write('DT_PBL = $r', realArgs=(/dt_pbl/)) !initialization of physics dimensions to mimic a rectangular grid: ims=1 ; ime = nCellsSolve @@ -660,15 +662,16 @@ subroutine physics_run_init(configs,mesh,state,clock,stream_manager) jts=jms ; jte = jme kts=kms ; kte = kme-1 - call mpas_log_write(' IMS =$i IME =$i', intArgs=(/ims,ime/)) - call mpas_log_write(' JMS =$i JME =$i', intArgs=(/jms,jme/)) - call mpas_log_write(' KMS =$i KME =$i', intArgs=(/kms,kme/)) - call mpas_log_write(' IDS =$i IDE =$i', intArgs=(/ids,ide/)) - call mpas_log_write(' JDS =$i JDE =$i', intArgs=(/jds,jde/)) - call mpas_log_write(' KDS =$i KDE =$i', intArgs=(/kds,kde/)) - call mpas_log_write(' ITS =$i ITE =$i', intArgs=(/its,ite/)) - call mpas_log_write(' JTS =$i JTE =$i', intArgs=(/jts,jte/)) - call mpas_log_write(' KTS =$i KTE =$i', intArgs=(/kts,kte/)) + call mpas_log_write(' ') + call mpas_log_write('IMS = $i IME = $i',intArgs=(/ims,ime/)) + call mpas_log_write('JMS = $i JME = $i',intArgs=(/jms,jme/)) + call mpas_log_write('KMS = $i KME = $i',intArgs=(/kms,kme/)) + call mpas_log_write('IDS = $i IDE = $i',intArgs=(/ids,ide/)) + call mpas_log_write('JDS = $i JDE = $i',intArgs=(/jds,jde/)) + call mpas_log_write('KDS = $i KDE = $i',intArgs=(/kds,kde/)) + call mpas_log_write('ITS = $i ITE = $i',intArgs=(/its,ite/)) + call mpas_log_write('JTS = $i JTE = $i',intArgs=(/jts,jte/)) + call mpas_log_write('KTS = $i KTE = $i',intArgs=(/kts,kte/)) !initialization local physics variables: num_months = nMonths @@ -682,12 +685,14 @@ subroutine physics_run_init(configs,mesh,state,clock,stream_manager) !... cloud microphysics: dt_microp = dt_dyn n_microp = 1 - if(trim(config_microp_scheme)=='mp_thompson') then + if(trim(config_microp_scheme)=='mp_thompson' .or. & + trim(config_microp_scheme)=='mp_thompson_aerosols') then dt_microp = 90._RKIND n_microp = max(nint(dt_dyn/dt_microp),1) dt_microp = dt_dyn / n_microp if(dt_dyn <= dt_microp) dt_microp = dt_dyn endif + call mpas_log_write(' ') call mpas_log_write('--- specifics on cloud microphysics option microp_scheme = '//trim(config_microp_scheme)) call mpas_log_write('--- dt_microp = $r', realArgs=(/dt_microp/)) call mpas_log_write('--- n_microp = $i', intArgs=(/n_microp/)) @@ -743,7 +748,8 @@ subroutine physics_run_init(configs,mesh,state,clock,stream_manager) has_reqi = 0 has_reqs = 0 if(config_microp_re) then - if(trim(config_microp_scheme)=='mp_thompson' .or. & + if(trim(config_microp_scheme)=='mp_thompson' .or. & + trim(config_microp_scheme)=='mp_thompson_aerosols' .or. & trim(config_microp_scheme)=='mp_wsm6') then if(trim(config_radt_lw_scheme)=='rrtmg_lw' .and. trim(config_radt_sw_scheme)=='rrtmg_sw') then has_reqc = 1 @@ -755,6 +761,7 @@ subroutine physics_run_init(configs,mesh,state,clock,stream_manager) call mpas_log_write('--- has_reqc = $i', intArgs=(/has_reqc/)) call mpas_log_write('--- has_reqi = $i', intArgs=(/has_reqi/)) call mpas_log_write('--- has_reqs = $i', intArgs=(/has_reqs/)) + call mpas_log_write(' ') end subroutine physics_run_init diff --git a/src/core_atmosphere/physics/mpas_atmphys_packages.F b/src/core_atmosphere/physics/mpas_atmphys_packages.F index e6b1640e4..5453203c6 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_packages.F +++ b/src/core_atmosphere/physics/mpas_atmphys_packages.F @@ -36,9 +36,11 @@ function atmphys_setup_packages(configs,packages,iocontext) result(ierr) character(len=StrKIND),pointer:: config_microp_scheme character(len=StrKIND),pointer:: config_convection_scheme character(len=StrKIND),pointer:: config_pbl_scheme - logical,pointer:: mp_kessler_in,mp_thompson_in,mp_wsm6_in + character(len=StrKIND),pointer:: config_lsm_scheme + logical,pointer:: mp_kessler_in,mp_thompson_in,mp_thompson_aers_in,mp_wsm6_in logical,pointer:: cu_grell_freitas_in,cu_kain_fritsch_in,cu_ntiedtke_in,cu_gf_monan_in logical,pointer:: bl_mynn_in,bl_ysu_in + logical,pointer:: sf_noahmp_in integer :: ierr @@ -61,11 +63,15 @@ function atmphys_setup_packages(configs,packages,iocontext) result(ierr) nullify(mp_thompson_in) call mpas_pool_get_package(packages,'mp_thompson_inActive',mp_thompson_in) + nullify(mp_thompson_aers_in) + call mpas_pool_get_package(packages,'mp_thompson_aers_inActive',mp_thompson_aers_in) + nullify(mp_wsm6_in) call mpas_pool_get_package(packages,'mp_wsm6_inActive',mp_wsm6_in) - if(.not.associated(mp_kessler_in) .or. & - .not.associated(mp_thompson_in) .or. & + if(.not.associated(mp_kessler_in ) .or. & + .not.associated(mp_thompson_in ) .or. & + .not.associated(mp_thompson_aers_in) .or. & .not.associated(mp_wsm6_in)) then call mpas_log_write('====================================================================================',messageType=MPAS_LOG_ERR) call mpas_log_write('* Error while setting up packages for cloud microphysics options in atmosphere core.',messageType=MPAS_LOG_ERR) @@ -74,20 +80,24 @@ function atmphys_setup_packages(configs,packages,iocontext) result(ierr) return endif - mp_kessler_in = .false. - mp_thompson_in = .false. - mp_wsm6_in = .false. + mp_kessler_in = .false. + mp_thompson_in = .false. + mp_thompson_aers_in = .false. + mp_wsm6_in = .false. if(config_microp_scheme == 'mp_kessler') then mp_kessler_in = .true. elseif(config_microp_scheme == 'mp_thompson') then mp_thompson_in = .true. + elseif(config_microp_scheme == 'mp_thompson_aerosols') then + mp_thompson_aers_in = .true. elseif(config_microp_scheme == 'mp_wsm6') then mp_wsm6_in = .true. endif call mpas_log_write(' mp_kessler_in = $l', logicArgs=(/mp_kessler_in/)) call mpas_log_write(' mp_thompson_in = $l', logicArgs=(/mp_thompson_in/)) + call mpas_log_write(' mp_thompson_aers_in = $l', logicArgs=(/mp_thompson_aers_in/)) call mpas_log_write(' mp_wsm6_in = $l', logicArgs=(/mp_wsm6_in/)) !--- initialization of all packages for parameterizations of convection: @@ -96,6 +106,7 @@ function atmphys_setup_packages(configs,packages,iocontext) result(ierr) nullify(cu_grell_freitas_in) call mpas_pool_get_package(packages,'cu_grell_freitas_inActive',cu_grell_freitas_in) + nullify(cu_gf_monan_in) call mpas_pool_get_package(packages,'cu_gf_monan_inActive',cu_gf_monan_in) @@ -169,6 +180,29 @@ function atmphys_setup_packages(configs,packages,iocontext) result(ierr) call mpas_log_write(' bl_ysu_in = $l', logicArgs=(/bl_ysu_in/)) call mpas_log_write('') +!--- initialization of all packages for parameterizations of land surface processes: + + call mpas_pool_get_config(configs,'config_lsm_scheme',config_lsm_scheme) + + nullify(sf_noahmp_in) + call mpas_pool_get_package(packages,'sf_noahmp_inActive',sf_noahmp_in) + + if(.not.associated(sf_noahmp_in)) then + call mpas_log_write('====================================================================================',messageType=MPAS_LOG_ERR) + call mpas_log_write('* Error while setting up packages for land surface options in atmosphere core.' , messageType=MPAS_LOG_ERR) + call mpas_log_write('====================================================================================',messageType=MPAS_LOG_ERR) + ierr = 1 + return + endif + + if(config_lsm_scheme=='sf_noahmp') then + sf_noahmp_in = .true. + endif + + call mpas_log_write(' sf_noahmp_in = $l', logicArgs=(/sf_noahmp_in/)) + call mpas_log_write('') + + end function atmphys_setup_packages !================================================================================================================= diff --git a/src/core_atmosphere/physics/mpas_atmphys_todynamics.F b/src/core_atmosphere/physics/mpas_atmphys_todynamics.F index 6ae17e730..86f04062e 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_todynamics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_todynamics.F @@ -10,6 +10,7 @@ module mpas_atmphys_todynamics use mpas_kind_types use mpas_pool_routines use mpas_dmpar + use mpas_atm_dimensions use mpas_atmphys_constants, only: R_d,R_v,degrad @@ -21,37 +22,39 @@ module mpas_atmphys_todynamics !Interface between the physics parameterizations and the non-hydrostatic dynamical core. !Laura D. Fowler (send comments to laura@ucar.edu). !2013-05-01. -! -! + + ! subroutines in mpas_atmphys_todynamics: ! --------------------------------------- -! physics_get_tend: add and mass-weigh tendencies before being added to dynamics tendencies. -! tend_toEdges : interpolate wind-tendencies from centers to edges of grid-cells. +! physics_get_tend : intermediate subroutine between the dynamical core and calculation of the total +! physics tendencies. +! physics_get_tend_work: add and mass-weigh physics tendencies before being added to dynamics tendencies. +! tend_toEdges : interpolate wind-tendencies from centers to edges of grid-cells. ! ! add-ons and modifications to sourcecode: ! ---------------------------------------- -! * added calculation of the advective tendency of the potential temperature due to horizontal -! and vertical advection, and horizontal mixing (diffusion). -! Laura D. Fowler (birch.mmm.ucar.edu) / 2013-11-19. -! * throughout the sourcecode, replaced all "var_struct" defined arrays by local pointers. -! Laura D. Fowler (laura@ucar.edu) / 2014-04-22. -! * modified sourcecode to use pools. -! Laura D. Fowler (laura@ucar.edu) / 2014-05-15. -! * renamed config_conv_deep_scheme to config_convection_scheme. -! Laura D. Fowler (laura@ucar.edu) / 2014-09-18. -! * renamed "tiedtke" with "cu_tiedtke". -! Laura D. Fowler (laura@ucar.edu) / 2016-03-22. -! * modified the sourcecode to accomodate the packages "cu_kain_fritsch_in" and "cu_ntiedtke_in". -! Laura D. Fowler (laura@ucar.edu) / 2016-03-24. -! * added the option bl_mynn for the calculation of the tendency for the cloud ice number concentration. -! Laura D. Fowler (laura@ucar.edu) / 2016-04-11. -! * in subroutine physics_get_tend_work, added the option cu_ntiedtke in the calculation of rucuten_Edge. -! Laura D. Fowler (laura@ucar.edu) / 2016-10-28. - - ! - ! Abstract interface for routine used to communicate halos of fields - ! in a named group - ! +! * cleaned-up subroutines physics_get_tend and physics_get_tend_work. +! Laura D. Fowler (laura@ucar.edu) / 2018-01-23. +! * removed the option bl_mynn_wrf390. +! Laura D. Fowler (laura@ucar.edu) / 2018-01-24. +! * added tendencies of cloud liquid water number concentration, and water-friendly and ice-friendly aerosol +! number concentrations due to PBL processes. +! Laura D. Fowler (laura@ucar.edu) / 2024-05-16. + + + + + + + + + + + +! +! Abstract interface for routine used to communicate halos of fields +! in a named group +! abstract interface subroutine halo_exchange_routine(domain, halo_group, ierr) @@ -69,205 +72,236 @@ end subroutine halo_exchange_routine !================================================================================================================= - subroutine physics_get_tend( block, mesh, state, diag, diag_physics, tend, tend_physics, configs, rk_step, dynamics_substep, & - tend_ru_physics, tend_rtheta_physics, tend_rho_physics, exchange_halo_group ) + subroutine physics_get_tend(block,mesh,state,diag,tend,tend_physics,configs,rk_step,dynamics_substep, & + tend_ru_physics,tend_rtheta_physics,tend_rho_physics,exchange_halo_group) !================================================================================================================= - - use mpas_atm_dimensions + + !input variables: type(block_type),intent(in),target:: block type(mpas_pool_type),intent(in):: mesh type(mpas_pool_type),intent(in):: state type(mpas_pool_type),intent(in):: configs - integer, intent(in):: rk_step - integer, intent(in):: dynamics_substep - procedure (halo_exchange_routine) :: exchange_halo_group + integer,intent(in):: rk_step + integer,intent(in):: dynamics_substep + procedure(halo_exchange_routine):: exchange_halo_group !inout variables: type(mpas_pool_type),intent(inout):: diag - type(mpas_pool_type),intent(inout):: diag_physics + type(mpas_pool_type),intent(inout):: tend type(mpas_pool_type),intent(inout):: tend_physics - real(kind=RKIND),dimension(:,:) :: tend_ru_physics, tend_rtheta_physics, tend_rho_physics + real(kind=RKIND),intent(inout),dimension(:,:):: tend_ru_physics,tend_rtheta_physics,tend_rho_physics !local variables: - character(len=StrKIND), pointer :: config_pbl_scheme, config_convection_scheme, & - config_radt_lw_scheme, config_radt_sw_scheme + character(len=StrKIND),pointer:: pbl_scheme, & + convection_scheme, & + microp_scheme, & + radt_lw_scheme, & + radt_sw_scheme integer:: i,iCell,k,n - integer,pointer:: index_qv, index_qc, index_qr, index_qi, index_qs, index_qg - integer,pointer:: index_ni + integer,pointer:: index_qv,index_qc,index_qr,index_qi,index_qs + integer,pointer:: index_nc,index_ni,index_nifa,index_nwfa +!-srf integer,pointer:: index_cnvcf, index_buoyx +!-srf integer,pointer:: nCells,nCellsSolve,nEdges,nEdgesSolve real(kind=RKIND),dimension(:,:),pointer:: mass ! time level 2 rho_zz real(kind=RKIND),dimension(:,:),pointer:: mass_edge ! diag rho_edge real(kind=RKIND),dimension(:,:),pointer:: theta_m ! time level 1 real(kind=RKIND),dimension(:,:,:),pointer:: scalars + real(kind=RKIND),dimension(:,:),pointer:: rthblten,rqvblten,rqcblten, & rqiblten,rqsblten,rublten,rvblten - real(kind=RKIND),dimension(:,:),pointer:: rniblten + real(kind=RKIND),dimension(:,:),pointer:: rncblten,rniblten,rnifablten,rnwfablten real(kind=RKIND),dimension(:,:),pointer:: rthcuten,rqvcuten,rqccuten, & rqrcuten,rqicuten,rqscuten, & rucuten,rvcuten real(kind=RKIND),dimension(:,:),pointer:: rthratenlw,rthratensw - + +!-srf real(kind=RKIND),dimension(:,:),pointer:: rcnvcfcuten,rbuoyxcuten +!-srf + real(kind=RKIND),dimension(:,:),pointer:: tend_u_phys !nick - real(kind=RKIND),dimension(:,:),pointer :: tend_theta,tend_theta_euler,tend_u + real(kind=RKIND),dimension(:,:,:),pointer:: tend_scalars - real(kind=RKIND):: coeff - real(kind=RKIND):: tem + + real(kind=RKIND),dimension(:,:),pointer:: rublten_Edge,rucuten_Edge - real(kind=RKIND),dimension(:,:),allocatable:: theta,tend_th + real(kind=RKIND),dimension(:,:),allocatable:: tend_th !================================================================================================================= - call mpas_pool_get_dimension(mesh, 'nCells', nCells) - call mpas_pool_get_dimension(mesh, 'nCellsSolve', nCellsSolve) - call mpas_pool_get_dimension(mesh, 'nEdges', nEdges) - call mpas_pool_get_dimension(mesh, 'nEdgesSolve', nEdgesSolve) - - call mpas_pool_get_config(configs, 'config_pbl_scheme', config_pbl_scheme) - call mpas_pool_get_config(configs, 'config_convection_scheme', config_convection_scheme) - call mpas_pool_get_config(configs, 'config_radt_lw_scheme', config_radt_lw_scheme) - call mpas_pool_get_config(configs, 'config_radt_sw_scheme', config_radt_sw_scheme) - - call mpas_pool_get_array(state, 'theta_m', theta_m, 1) - call mpas_pool_get_array(state, 'scalars', scalars, 1) - call mpas_pool_get_array(state, 'rho_zz', mass, 2) - call mpas_pool_get_array(diag , 'rho_edge', mass_edge) - - call mpas_pool_get_array(diag , 'tend_u_phys', tend_u_phys) !nick - - call mpas_pool_get_dimension(state, 'index_qv', index_qv) - call mpas_pool_get_dimension(state, 'index_qc', index_qc) - call mpas_pool_get_dimension(state, 'index_qr', index_qr) - call mpas_pool_get_dimension(state, 'index_qi', index_qi) - call mpas_pool_get_dimension(state, 'index_qs', index_qs) - call mpas_pool_get_dimension(state, 'index_qg', index_qg) - call mpas_pool_get_dimension(state, 'index_ni', index_ni) + call mpas_pool_get_dimension(mesh,'nCells',nCells) + call mpas_pool_get_dimension(mesh,'nEdges',nEdges) + call mpas_pool_get_dimension(mesh,'nCellsSolve',nCellsSolve) + call mpas_pool_get_dimension(mesh,'nEdgesSolve',nEdgesSolve) + + call mpas_pool_get_config(configs,'config_convection_scheme',convection_scheme) + call mpas_pool_get_config(configs,'config_microp_scheme' ,microp_scheme ) + call mpas_pool_get_config(configs,'config_pbl_scheme' ,pbl_scheme ) + call mpas_pool_get_config(configs,'config_radt_lw_scheme' ,radt_lw_scheme ) + call mpas_pool_get_config(configs,'config_radt_sw_scheme' ,radt_sw_scheme ) + + call mpas_pool_get_array(state,'theta_m' ,theta_m,1) + call mpas_pool_get_array(state,'scalars' ,scalars,1) + call mpas_pool_get_array(state,'rho_zz' ,mass,2 ) + call mpas_pool_get_array(diag ,'rho_edge',mass_edge) + call mpas_pool_get_array(diag ,'tend_u_phys',tend_u_phys) + + call mpas_pool_get_dimension(state,'index_qv',index_qv) + call mpas_pool_get_dimension(state,'index_qc',index_qc) + call mpas_pool_get_dimension(state,'index_qr',index_qr) + call mpas_pool_get_dimension(state,'index_qi',index_qi) + call mpas_pool_get_dimension(state,'index_qs',index_qs) + + call mpas_pool_get_dimension(state,'index_nc',index_nc) + call mpas_pool_get_dimension(state,'index_ni',index_ni) +!-srf call mpas_pool_get_dimension(state, 'index_cnvcf', index_cnvcf) call mpas_pool_get_dimension(state, 'index_buoyx', index_buoyx) - call mpas_pool_get_array(tend_physics, 'rublten', rublten) - call mpas_pool_get_array(tend_physics, 'rvblten', rvblten) - call mpas_pool_get_array(tend_physics, 'rublten_Edge', rublten_Edge) - call mpas_pool_get_array(tend_physics, 'rthblten', rthblten) - call mpas_pool_get_array(tend_physics, 'rqvblten', rqvblten) - call mpas_pool_get_array(tend_physics, 'rqcblten', rqcblten) - call mpas_pool_get_array(tend_physics, 'rqiblten', rqiblten) - call mpas_pool_get_array(tend_physics, 'rqsblten', rqsblten) - call mpas_pool_get_array(tend_physics, 'rniblten', rniblten) - - call mpas_pool_get_array(tend_physics, 'rucuten', rucuten) - call mpas_pool_get_array(tend_physics, 'rvcuten', rvcuten) - call mpas_pool_get_array(tend_physics, 'rucuten_Edge', rucuten_Edge) - call mpas_pool_get_array(tend_physics, 'rthcuten', rthcuten) - call mpas_pool_get_array(tend_physics, 'rqvcuten', rqvcuten) - call mpas_pool_get_array(tend_physics, 'rqccuten', rqccuten) - call mpas_pool_get_array(tend_physics, 'rqrcuten', rqrcuten) - call mpas_pool_get_array(tend_physics, 'rqicuten', rqicuten) - call mpas_pool_get_array(tend_physics, 'rqscuten', rqscuten) - - call mpas_pool_get_array(tend_physics, 'rthratenlw', rthratenlw) - call mpas_pool_get_array(tend_physics, 'rthratensw', rthratensw) - +!-srf + call mpas_pool_get_dimension(state,'index_nifa',index_nifa) + call mpas_pool_get_dimension(state,'index_nwfa',index_nwfa) + + call mpas_pool_get_array(tend_physics,'rublten',rublten) + call mpas_pool_get_array(tend_physics,'rvblten',rvblten) + call mpas_pool_get_array(tend_physics,'rthblten',rthblten) + call mpas_pool_get_array(tend_physics,'rqvblten',rqvblten) + call mpas_pool_get_array(tend_physics,'rqcblten',rqcblten) + call mpas_pool_get_array(tend_physics,'rqiblten',rqiblten) + call mpas_pool_get_array(tend_physics,'rqsblten',rqsblten) + call mpas_pool_get_array(tend_physics,'rncblten',rncblten) + call mpas_pool_get_array(tend_physics,'rniblten',rniblten) + call mpas_pool_get_array(tend_physics,'rnifablten',rnifablten) + call mpas_pool_get_array(tend_physics,'rnwfablten',rnwfablten) + call mpas_pool_get_array(tend_physics,'rublten_Edge',rublten_Edge) + + call mpas_pool_get_array(tend_physics,'rucuten',rucuten) + call mpas_pool_get_array(tend_physics,'rvcuten',rvcuten) + call mpas_pool_get_array(tend_physics,'rthcuten',rthcuten) + call mpas_pool_get_array(tend_physics,'rqvcuten',rqvcuten) + call mpas_pool_get_array(tend_physics,'rqccuten',rqccuten) + call mpas_pool_get_array(tend_physics,'rqrcuten',rqrcuten) + call mpas_pool_get_array(tend_physics,'rqicuten',rqicuten) + call mpas_pool_get_array(tend_physics,'rqscuten',rqscuten) + call mpas_pool_get_array(tend_physics,'rucuten_Edge',rucuten_Edge) + + call mpas_pool_get_array(tend_physics,'rthratenlw',rthratenlw) + call mpas_pool_get_array(tend_physics,'rthratensw',rthratensw) + +!-srf call mpas_pool_get_array(tend_physics, 'rcnvcfcuten', rcnvcfcuten) call mpas_pool_get_array(tend_physics, 'rbuoyxcuten', rbuoyxcuten) +!-srf + + - call mpas_pool_get_array(tend,'u' , tend_u ) - call mpas_pool_get_array(tend,'theta_m' , tend_theta ) - call mpas_pool_get_array(tend,'theta_euler' ,tend_theta_euler) - call mpas_pool_get_array(tend,'scalars_tend',tend_scalars ) + + call mpas_pool_get_array(tend,'scalars_tend',tend_scalars) !initialize the tendency for the potential temperature and all scalars due to PBL, convection, !and longwave and shortwave radiation: -! allocate(theta(nVertLevels,nCellsSolve) ) + allocate(tend_th(nVertLevels,nCellsSolve)) tend_th = 0._RKIND - tend_scalars(:,:,:) = 0._RKIND + tend_scalars(:,:,:) = 0._RKIND - tend_ru_physics(:,:) = 0._RKIND + tend_ru_physics(:,:) = 0._RKIND tend_rtheta_physics(:,:) = 0._RKIND - tend_rho_physics(:,:) = 0._RKIND ! NB: rho tendency is not currently supplied by physics, but this - ! field may be later filled with IAU or other tendencies - - ! - ! In case some variables are not allocated due to their associated packages, - ! we need to make their pointers associated here to avoid triggering run-time - ! checks when calling physics_get_tend_work - ! - if (.not. associated(rublten)) allocate(rublten(0,0) ) - if (.not. associated(rvblten)) allocate(rvblten(0,0) ) - if (.not. associated(rthblten)) allocate(rthblten(0,0)) - if (.not. associated(rqvblten)) allocate(rqvblten(0,0)) - if (.not. associated(rqcblten)) allocate(rqcblten(0,0)) - if (.not. associated(rqiblten)) allocate(rqiblten(0,0)) - if (.not. associated(rqsblten)) allocate(rqsblten(0,0)) - if (.not. associated(rniblten)) allocate(rniblten(0,0)) - if (.not. associated(rucuten)) allocate(rucuten(0,0) ) - if (.not. associated(rvcuten)) allocate(rvcuten(0,0) ) - if (.not. associated(rthcuten)) allocate(rthcuten(0,0)) - if (.not. associated(rqvcuten)) allocate(rqvcuten(0,0)) - if (.not. associated(rqccuten)) allocate(rqccuten(0,0)) - if (.not. associated(rqicuten)) allocate(rqicuten(0,0)) - if (.not. associated(rqrcuten)) allocate(rqrcuten(0,0)) - if (.not. associated(rqscuten)) allocate(rqscuten(0,0)) + tend_rho_physics(:,:) = 0._RKIND + + +! +! in case some variables are not allocated due to their associated packages. +! we need to make their pointers associated here to avoid triggering run-time. +! checks when calling physics_get_tend_work: +! + if(.not. associated(rucuten) ) allocate(rucuten(0,0) ) + if(.not. associated(rvcuten) ) allocate(rvcuten(0,0) ) + if(.not. associated(rthcuten)) allocate(rthcuten(0,0)) + if(.not. associated(rqvcuten)) allocate(rqvcuten(0,0)) + if(.not. associated(rqccuten)) allocate(rqccuten(0,0)) + if(.not. associated(rqicuten)) allocate(rqicuten(0,0)) + if(.not. associated(rqrcuten)) allocate(rqrcuten(0,0)) + if(.not. associated(rqscuten)) allocate(rqscuten(0,0)) + + if(.not. associated(rublten) ) allocate(rublten(0,0) ) + if(.not. associated(rvblten) ) allocate(rvblten(0,0) ) + if(.not. associated(rthblten)) allocate(rthblten(0,0)) + if(.not. associated(rqvblten)) allocate(rqvblten(0,0)) + if(.not. associated(rqcblten)) allocate(rqcblten(0,0)) + if(.not. associated(rqiblten)) allocate(rqiblten(0,0)) + if(.not. associated(rqsblten)) allocate(rqsblten(0,0)) + if(.not. associated(rncblten)) allocate(rncblten(0,0)) + if(.not. associated(rniblten)) allocate(rniblten(0,0)) + if(.not. associated(rnifablten)) allocate(rnifablten(0,0)) + if(.not. associated(rnwfablten)) allocate(rnwfablten(0,0)) !-srf if (.not. associated(rbuoyxcuten)) allocate(rbuoyxcuten(0,0)) if (.not. associated(rcnvcfcuten)) allocate(rcnvcfcuten(0,0)) !-srf - call physics_get_tend_work(block, mesh, nCells, nEdges, nCellsSolve, nEdgesSolve, & - rk_step, dynamics_substep, & - config_pbl_scheme, config_convection_scheme, config_radt_lw_scheme, config_radt_sw_scheme, & - index_qv, index_qc, index_qr, index_qi, index_qs, index_ni, & - rublten, rvblten, mass_edge, rublten_Edge, & - tend_ru_physics, & - rucuten, rvcuten, rucuten_Edge, & - tend_th, tend_scalars, mass, rthblten, rqvblten, rqcblten, rqiblten, rqsblten, rniblten, & - rthcuten, rqvcuten, rqccuten, rqrcuten, rqicuten, rqscuten, & - rthratenlw, rthratensw, & - tend_u_phys, & - theta_m, scalars, & - tend_rtheta_physics, & - tend_theta_euler, & - exchange_halo_group, & - index_cnvcf,index_buoyx,rbuoyxcuten,rcnvcfcuten) - - ! - ! Clean up any pointers that were allocated with zero size before the call to - ! physics_get_tend_work - ! - if (size(rublten) == 0) deallocate(rublten ) - if (size(rvblten) == 0) deallocate(rvblten ) - if (size(rthblten) == 0) deallocate(rthblten) - if (size(rqvblten) == 0) deallocate(rqvblten) - if (size(rqcblten) == 0) deallocate(rqcblten) - if (size(rqiblten) == 0) deallocate(rqiblten) - if (size(rqsblten) == 0) deallocate(rqsblten) - if (size(rniblten) == 0) deallocate(rniblten) - if (size(rucuten) == 0) deallocate(rucuten ) - if (size(rvcuten) == 0) deallocate(rvcuten ) - if (size(rthcuten) == 0) deallocate(rthcuten) - if (size(rqvcuten) == 0) deallocate(rqvcuten) - if (size(rqccuten) == 0) deallocate(rqccuten) - if (size(rqicuten) == 0) deallocate(rqicuten) - if (size(rqrcuten) == 0) deallocate(rqrcuten) - if (size(rqscuten) == 0) deallocate(rqscuten) + call physics_get_tend_work( & + block,mesh,nCells,nEdges,nCellsSolve,nEdgesSolve,rk_step,dynamics_substep, & + pbl_scheme,convection_scheme,microp_scheme,radt_lw_scheme,radt_sw_scheme, & + index_qv,index_qc,index_qr,index_qi,index_qs, & + index_nc,index_ni,index_nifa,index_nwfa, & + mass,mass_edge,theta_m,scalars, & + rublten,rvblten,rthblten,rqvblten,rqcblten,rqiblten,rqsblten, & + rncblten,rniblten,rnifablten,rnwfablten, & + rucuten,rvcuten,rthcuten,rqvcuten,rqccuten,rqrcuten,rqicuten,rqscuten, & + rthratenlw,rthratensw,rublten_Edge,rucuten_Edge, & + tend_th,tend_rtheta_physics,tend_scalars,tend_ru_physics,tend_u_phys, & + exchange_halo_group, & + + +!-srf + index_cnvcf,index_buoyx,rbuoyxcuten,rcnvcfcuten) +!-srf + + +! +! Clean up any pointers that were allocated with zero size before the call to +! physics_get_tend_work: +! + if(size(rucuten) == 0 ) deallocate(rucuten ) + if(size(rvcuten) == 0 ) deallocate(rvcuten ) + if(size(rthcuten) == 0) deallocate(rthcuten) + if(size(rqvcuten) == 0) deallocate(rqvcuten) + if(size(rqccuten) == 0) deallocate(rqccuten) + if(size(rqicuten) == 0) deallocate(rqicuten) + if(size(rqrcuten) == 0) deallocate(rqrcuten) + if(size(rqscuten) == 0) deallocate(rqscuten) + + if(size(rublten) == 0 ) deallocate(rublten ) + if(size(rvblten) == 0 ) deallocate(rvblten ) + if(size(rthblten) == 0) deallocate(rthblten) + if(size(rqvblten) == 0) deallocate(rqvblten) + if(size(rqcblten) == 0) deallocate(rqcblten) + if(size(rqiblten) == 0) deallocate(rqiblten) + if(size(rqsblten) == 0) deallocate(rqsblten) + if(size(rncblten) == 0) deallocate(rncblten) + if(size(rniblten) == 0) deallocate(rniblten) + + if(size(rnifablten) == 0) deallocate(rnifablten) + if(size(rnwfablten) == 0) deallocate(rnwfablten) !-srf if (size(rbuoyxcuten) == 0) deallocate(rbuoyxcuten) if (size(rcnvcfcuten) == 0) deallocate(rcnvcfcuten) !-srf -! deallocate(theta) + deallocate(tend_th) ! if(rk_step .eq. 3) then @@ -287,151 +321,185 @@ subroutine physics_get_tend( block, mesh, state, diag, diag_physics, tend, tend_ end subroutine physics_get_tend - !================================================================================================== - subroutine physics_get_tend_work(block, mesh, nCells, nEdges, nCellsSolve, nEdgesSolve, & - rk_step, dynamics_substep, & - config_pbl_scheme, config_convection_scheme, config_radt_lw_scheme, config_radt_sw_scheme, & - index_qv, index_qc, index_qr, index_qi, index_qs, index_ni, & - rublten, rvblten, mass_edge, rublten_Edge, tend_u, & - rucuten, rvcuten, rucuten_Edge, & - tend_th, tend_scalars, mass, rthblten, rqvblten, rqcblten, rqiblten, rqsblten, rniblten, & - rthcuten, rqvcuten, rqccuten, rqrcuten, rqicuten, rqscuten, & - rthratenlw, rthratensw, & - tend_u_phys, & - theta_m, scalars, tend_theta, tend_theta_euler, & - exchange_halo_group, & - index_cnvcf,index_buoyx,rbuoyxcuten,rcnvcfcuten) -!================================================================================================== - - use mpas_atm_dimensions - - implicit none - - type(block_type), intent(in) :: block - type(mpas_pool_type), intent(in) :: mesh - integer, intent(in) :: nCells, nEdges, nCellsSolve, nEdgesSolve - integer, intent(in) :: rk_step, dynamics_substep - character(len=StrKIND), intent(in) :: config_pbl_scheme - character(len=StrKIND), intent(in) :: config_convection_scheme - character(len=StrKIND), intent(in) :: config_radt_lw_scheme - character(len=StrKIND), intent(in) :: config_radt_sw_scheme - integer, intent(in) :: index_qv, index_qc, index_qr, index_qi, index_qs, index_ni +!================================================================================================================= + subroutine physics_get_tend_work( & + block,mesh,nCells,nEdges,nCellsSolve,nEdgesSolve,rk_step,dynamics_substep, & + pbl_scheme,convection_scheme,microp_scheme,radt_lw_scheme,radt_sw_scheme, & + index_qv,index_qc,index_qr,index_qi,index_qs, & + index_nc,index_ni,index_nifa,index_nwfa, & + mass,mass_edge,theta_m,scalars, & + rublten,rvblten,rthblten,rqvblten,rqcblten,rqiblten,rqsblten, & + rncblten,rniblten,rnifablten,rnwfablten, & + rucuten,rvcuten,rthcuten,rqvcuten,rqccuten,rqrcuten,rqicuten,rqscuten, & + rthratenlw,rthratensw,rublten_Edge,rucuten_Edge, & + tend_th,tend_theta,tend_scalars,tend_u,tend_u_phys, & + exchange_halo_group, & +!-srf + index_cnvcf,index_buoyx,rbuoyxcuten,rcnvcfcuten) +!-srf + +!================================================================================================================= + +!input arguments: + + procedure(halo_exchange_routine):: exchange_halo_group + + + + type(block_type),intent(in) :: block + type(mpas_pool_type),intent(in):: mesh + + character(len=StrKIND),intent(in):: convection_scheme + character(len=StrKIND),intent(in):: microp_scheme + character(len=StrKIND),intent(in):: pbl_scheme + character(len=StrKIND),intent(in):: radt_lw_scheme + character(len=StrKIND),intent(in):: radt_sw_scheme + + integer,intent(in):: nCells,nEdges,nCellsSolve,nEdgesSolve + integer,intent(in):: rk_step,dynamics_substep + integer,intent(in):: index_qv,index_qc,index_qr,index_qi,index_qs + integer,intent(in):: index_nc,index_ni,index_nifa,index_nwfa +!-srf integer, intent(in) :: index_cnvcf,index_buoyx - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rublten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rvblten - real (kind=RKIND), dimension(nVertLevels,nEdges+1), intent(in) :: mass_edge - real (kind=RKIND), dimension(nVertLevels,nEdges+1), intent(inout) :: rublten_Edge - real (kind=RKIND), dimension(nVertLevels,nEdges+1), intent(inout) :: tend_u - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rucuten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rvcuten - real (kind=RKIND), dimension(nVertLevels,nEdges+1), intent(inout) :: rucuten_Edge - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(inout) :: tend_th - real (kind=RKIND), dimension(num_scalars,nVertLevels,nCells+1), intent(inout) :: tend_scalars - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: mass - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rthblten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqvblten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqcblten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqiblten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqsblten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rniblten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rthcuten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqvcuten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqccuten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqrcuten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqicuten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rqscuten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rthratenlw - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rthratensw - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rbuoyxcuten - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: rcnvcfcuten - real (kind=RKIND), dimension(nVertLevels,nEdges+1), intent(inout) :: tend_u_phys - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: theta_m - real (kind=RKIND), dimension(num_scalars,nVertLevels,nCells+1), intent(in) :: scalars - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(inout) :: tend_theta - real (kind=RKIND), dimension(nVertLevels,nCells+1), intent(in) :: tend_theta_euler - procedure (halo_exchange_routine) :: exchange_halo_group - - integer :: i, k , mynum - real (kind=RKIND) :: coeff - - !add coupled tendencies due to PBL processes: - if (config_pbl_scheme .ne. 'off') then - if (rk_step == 1 .and. dynamics_substep == 1) then - call exchange_halo_group(block % domain, 'physics:blten') - call tend_toEdges(block,mesh,rublten,rvblten,rublten_Edge) +!-srf + + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: mass + real(kind=RKIND),intent(in),dimension(nVertLevels,nEdges+1):: mass_edge + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: theta_m + real(kind=RKIND),intent(in),dimension(num_scalars,nVertLevels,nCells+1):: scalars + + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rublten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rvblten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rthblten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqvblten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqcblten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqiblten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqsblten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rncblten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rniblten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rnifablten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rnwfablten + + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rucuten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rvcuten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rthcuten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqvcuten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqccuten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqrcuten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqicuten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rqscuten + + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rthratenlw + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rthratensw +!-srf + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rbuoyxcuten + real(kind=RKIND),intent(in),dimension(nVertLevels,nCells+1):: rcnvcfcuten +!-srf + +!inout arguments: + real(kind=RKIND),intent(inout),dimension(nVertLevels,nEdges+1):: rublten_Edge + real(kind=RKIND),intent(inout),dimension(nVertLevels,nEdges+1):: rucuten_Edge + real(kind=RKIND),intent(inout),dimension(nVertLevels,nEdges+1):: tend_u + real(kind=RKIND),intent(inout),dimension(nVertLevels,nEdges+1):: tend_u_phys + + real(kind=RKIND),intent(inout),dimension(nVertLevels,nCells+1):: tend_th + real(kind=RKIND),intent(inout),dimension(nVertLevels,nCells+1):: tend_theta + real(kind=RKIND),intent(inout),dimension(num_scalars,nVertLevels,nCells+1):: tend_scalars + +!local variables: + integer:: i,k + real(kind=RKIND):: coeff + +!----------------------------------------------------------------------------------------------------------------- + +!add coupled tendencies due to PBL processes: + if(pbl_scheme .ne. 'off') then + if(rk_step == 1 .and. dynamics_substep == 1) then + call exchange_halo_group(block%domain,'physics:blten') + call tend_toEdges(block,mesh,rublten,rvblten,rublten_Edge) !MGD for PV budget? should a similar line be in the cumulus section below? - tend_u_phys(1:nVertLevels,1:nEdges) = rublten_Edge(1:nVertLevels,1:nEdges) - end if + tend_u_phys(1:nVertLevels,1:nEdges) = rublten_Edge(1:nVertLevels,1:nEdges) + end if - do i = 1, nEdgesSolve - do k = 1, nVertLevels - tend_u(k,i)=tend_u(k,i)+rublten_Edge(k,i)*mass_edge(k,i) - enddo - enddo + do i = 1, nEdgesSolve + do k = 1, nVertLevels + tend_u(k,i)=tend_u(k,i)+rublten_Edge(k,i)*mass_edge(k,i) + enddo + enddo - do i = 1, nCellsSolve - do k = 1, nVertLevels - tend_th(k,i) = tend_th(k,i) + rthblten(k,i)*mass(k,i) - tend_scalars(index_qv,k,i) = tend_scalars(index_qv,k,i) + rqvblten(k,i)*mass(k,i) - tend_scalars(index_qc,k,i) = tend_scalars(index_qc,k,i) + rqcblten(k,i)*mass(k,i) - tend_scalars(index_qi,k,i) = tend_scalars(index_qi,k,i) + rqiblten(k,i)*mass(k,i) - enddo - enddo + do i = 1, nCellsSolve + do k = 1, nVertLevels + tend_th(k,i) = tend_th(k,i) + rthblten(k,i)*mass(k,i) + tend_scalars(index_qv,k,i) = tend_scalars(index_qv,k,i) + rqvblten(k,i)*mass(k,i) + tend_scalars(index_qc,k,i) = tend_scalars(index_qc,k,i) + rqcblten(k,i)*mass(k,i) + tend_scalars(index_qi,k,i) = tend_scalars(index_qi,k,i) + rqiblten(k,i)*mass(k,i) + enddo + enddo + + pbl_select: select case(trim(pbl_scheme)) - pbl_select: select case (trim(config_pbl_scheme)) + case('bl_mynn') - case("bl_mynn") + do i = 1, nCellsSolve + do k = 1, nVertLevels + tend_scalars(index_qs,k,i) = tend_scalars(index_qs,k,i) + rqsblten(k,i)*mass(k,i) + tend_scalars(index_ni,k,i) = tend_scalars(index_ni,k,i) + rniblten(k,i)*mass(k,i) + enddo + enddo + if(trim(microp_scheme) == 'mp_thompson_aerosols') then do i = 1, nCellsSolve do k = 1, nVertLevels - tend_scalars(index_qs,k,i) = tend_scalars(index_qs,k,i) + rqsblten(k,i)*mass(k,i) - tend_scalars(index_ni,k,i) = tend_scalars(index_ni,k,i) + rniblten(k,i)*mass(k,i) + tend_scalars(index_nc,k,i) = tend_scalars(index_nc,k,i) + rncblten(k,i)*mass(k,i) + tend_scalars(index_nifa,k,i) = tend_scalars(index_nifa,k,i) + rnifablten(k,i)*mass(k,i) + tend_scalars(index_nwfa,k,i) = tend_scalars(index_nwfa,k,i) + rnwfablten(k,i)*mass(k,i) enddo enddo - - case default - - end select pbl_select - endif + endif - !add coupled tendencies due to convection: - if (config_convection_scheme .ne. 'off') then + case default + end select pbl_select + endif - do i = 1, nCellsSolve - do k = 1, nVertLevels - tend_th(k,i) = tend_th(k,i) + rthcuten(k,i)*mass(k,i) - tend_scalars(index_qv,k,i) = tend_scalars(index_qv,k,i) + rqvcuten(k,i)*mass(k,i) - tend_scalars(index_qc,k,i) = tend_scalars(index_qc,k,i) + rqccuten(k,i)*mass(k,i) - tend_scalars(index_qi,k,i) = tend_scalars(index_qi,k,i) + rqicuten(k,i)*mass(k,i) - enddo - enddo - convection_select: select case(config_convection_scheme) +!add coupled tendencies due to convection: + if(convection_scheme .ne. 'off') then - case('cu_kain_fritsch') - do i = 1, nCellsSolve - do k = 1, nVertLevels - tend_scalars(index_qr,k,i) = tend_scalars(index_qr,k,i) + rqrcuten(k,i)*mass(k,i) - tend_scalars(index_qs,k,i) = tend_scalars(index_qs,k,i) + rqscuten(k,i)*mass(k,i) - enddo - enddo - - case('cu_tiedtke','cu_ntiedtke') - if (rk_step == 1 .and. dynamics_substep == 1) then - call exchange_halo_group(block % domain, 'physics:cuten') - call tend_toEdges(block,mesh,rucuten,rvcuten,rucuten_Edge) - - tend_u_phys(1:nVertLevels,1:nEdges) = tend_u_phys(1:nVertLevels,1:nEdges) & - + rucuten_Edge(1:nVertLevels,1:nEdges) - end if - do i = 1, nEdgesSolve - do k = 1, nVertLevels - tend_u(k,i)=tend_u(k,i)+rucuten_Edge(k,i)*mass_edge(k,i) - enddo - enddo + do i = 1, nCellsSolve + do k = 1, nVertLevels + tend_th(k,i) = tend_th(k,i) + rthcuten(k,i)*mass(k,i) + tend_scalars(index_qv,k,i) = tend_scalars(index_qv,k,i) + rqvcuten(k,i)*mass(k,i) + tend_scalars(index_qc,k,i) = tend_scalars(index_qc,k,i) + rqccuten(k,i)*mass(k,i) + tend_scalars(index_qi,k,i) = tend_scalars(index_qi,k,i) + rqicuten(k,i)*mass(k,i) + enddo + enddo - case('cu_gf_monan') + cu_select: select case(trim(convection_scheme)) + + case('cu_kain_fritsch') + do i = 1, nCellsSolve + do k = 1, nVertLevels + tend_scalars(index_qr,k,i) = tend_scalars(index_qr,k,i) + rqrcuten(k,i)*mass(k,i) + tend_scalars(index_qs,k,i) = tend_scalars(index_qs,k,i) + rqscuten(k,i)*mass(k,i) + enddo + enddo + + case('cu_tiedtke','cu_ntiedtke') + if(rk_step == 1 .and. dynamics_substep == 1) then + call exchange_halo_group(block%domain,'physics:cuten') + call tend_toEdges(block,mesh,rucuten,rvcuten,rucuten_Edge) + + tend_u_phys(1:nVertLevels,1:nEdges) = tend_u_phys(1:nVertLevels,1:nEdges) & + + rucuten_Edge(1:nVertLevels,1:nEdges) + endif + do i = 1, nEdgesSolve + do k = 1, nVertLevels + tend_u(k,i)=tend_u(k,i)+rucuten_Edge(k,i)*mass_edge(k,i) + enddo + enddo + + case('cu_gf_monan') if (rk_step == 1 .and. dynamics_substep == 1) then call exchange_halo_group(block % domain, 'physics:cuten') call tend_toEdges(block,mesh,rucuten,rvcuten,rucuten_Edge) @@ -454,37 +522,41 @@ subroutine physics_get_tend_work(block, mesh, nCells, nEdges, nCellsSolve, nEdge ! enddo !srf--------------------------------------------------------------------------------------------------------- - case default - end select convection_select - endif - - !add coupled tendencies due to longwave radiation: - if (config_radt_lw_scheme .ne. 'off') then - do i = 1, nCellsSolve - do k = 1, nVertLevels - tend_th(k,i) = tend_th(k,i) + rthratenlw(k,i)*mass(k,i) - enddo - enddo - endif - - !add coupled tendencies due to shortwave radiation: - if (config_radt_sw_scheme .ne. 'off') then - do i = 1, nCellsSolve - do k = 1, nVertLevels - tend_th(k,i) = tend_th(k,i) + rthratensw(k,i)*mass(k,i) - enddo - enddo - endif - - !if non-hydrostatic core, convert the tendency for the potential temperature to a - !tendency for the modified potential temperature: + case default + end select cu_select + endif + + +!add coupled tendencies due to longwave radiation: + if(radt_lw_scheme .ne. 'off') then do i = 1, nCellsSolve do k = 1, nVertLevels - coeff = (1. + R_v/R_d * scalars(index_qv,k,i)) - tend_th(k,i) = coeff * tend_th(k,i) + R_v/R_d * theta_m(k,i) * tend_scalars(index_qv,k,i) / coeff - tend_theta(k,i) = tend_theta(k,i) + tend_th(k,i) + tend_th(k,i) = tend_th(k,i) + rthratenlw(k,i)*mass(k,i) enddo enddo + endif + + +!add coupled tendencies due to shortwave radiation: + if(radt_sw_scheme .ne. 'off') then + do i = 1, nCellsSolve + do k = 1, nVertLevels + tend_th(k,i) = tend_th(k,i) + rthratensw(k,i)*mass(k,i) + enddo + enddo + endif + + +!convert the tendency for the potential temperature to tendency for the modified potential temperature: + + do i = 1, nCellsSolve + do k = 1, nVertLevels + coeff = (1. + R_v/R_d * scalars(index_qv,k,i)) + tend_th(k,i) = coeff * tend_th(k,i) + R_v/R_d * theta_m(k,i) * tend_scalars(index_qv,k,i) / coeff + tend_theta(k,i) = tend_theta(k,i) + tend_th(k,i) + enddo + enddo + end subroutine physics_get_tend_work @@ -508,20 +580,19 @@ subroutine tend_toEdges(block,mesh,Ux_tend,Uy_tend,U_tend) integer,pointer:: nCells,nCellsSolve,nEdges integer,dimension(:,:),pointer:: cellsOnEdge - real(kind=RKIND), dimension(:,:), pointer :: east, north, edgeNormalVectors - + real(kind=RKIND),dimension(:,:),pointer:: east,north,edgeNormalVectors !----------------------------------------------------------------------------------------------------------------- - call mpas_pool_get_dimension(mesh, 'nCells', nCells) - call mpas_pool_get_dimension(mesh, 'nCellsSolve', nCellsSolve) - call mpas_pool_get_dimension(mesh, 'nEdges', nEdges) + call mpas_pool_get_dimension(mesh,'nCells',nCells) + call mpas_pool_get_dimension(mesh,'nCellsSolve',nCellsSolve) + call mpas_pool_get_dimension(mesh,'nEdges',nEdges) - call mpas_pool_get_array(mesh, 'east', east) - call mpas_pool_get_array(mesh, 'north', north) - call mpas_pool_get_array(mesh, 'edgeNormalVectors', edgeNormalVectors) + call mpas_pool_get_array(mesh,'east',east) + call mpas_pool_get_array(mesh,'north',north) + call mpas_pool_get_array(mesh,'edgeNormalVectors',edgeNormalVectors) - call mpas_pool_get_array(mesh, 'cellsOnEdge', cellsOnEdge) + call mpas_pool_get_array(mesh,'cellsOnEdge',cellsOnEdge) do iEdge = 1, nEdges cell1 = cellsOnEdge(1,iEdge) @@ -530,14 +601,14 @@ subroutine tend_toEdges(block,mesh,Ux_tend,Uy_tend,U_tend) U_tend(:,iEdge) = Ux_tend(:,cell1) * 0.5 * (edgeNormalVectors(1,iEdge) * east(1,cell1) & + edgeNormalVectors(2,iEdge) * east(2,cell1) & + edgeNormalVectors(3,iEdge) * east(3,cell1)) & - + Uy_tend(:,cell1) * 0.5 * (edgeNormalVectors(1,iEdge) * north(1,cell1) & - + edgeNormalVectors(2,iEdge) * north(2,cell1) & - + edgeNormalVectors(3,iEdge) * north(3,cell1)) & + + Uy_tend(:,cell1) * 0.5 * (edgeNormalVectors(1,iEdge) * north(1,cell1) & + + edgeNormalVectors(2,iEdge) * north(2,cell1) & + + edgeNormalVectors(3,iEdge) * north(3,cell1)) & + Ux_tend(:,cell2) * 0.5 * (edgeNormalVectors(1,iEdge) * east(1,cell2) & + edgeNormalVectors(2,iEdge) * east(2,cell2) & + edgeNormalVectors(3,iEdge) * east(3,cell2)) & - + Uy_tend(:,cell2) * 0.5 * (edgeNormalVectors(1,iEdge) * north(1,cell2) & - + edgeNormalVectors(2,iEdge) * north(2,cell2) & + + Uy_tend(:,cell2) * 0.5 * (edgeNormalVectors(1,iEdge) * north(1,cell2) & + + edgeNormalVectors(2,iEdge) * north(2,cell2) & + edgeNormalVectors(3,iEdge) * north(3,cell2)) end do diff --git a/src/core_atmosphere/physics/mpas_atmphys_vars.F b/src/core_atmosphere/physics/mpas_atmphys_vars.F index 1eec77a31..28a236421 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_vars.F +++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F @@ -8,6 +8,8 @@ !================================================================================================================= module mpas_atmphys_vars use mpas_kind_types + + use NoahmpIOVarType implicit none public @@ -204,6 +206,7 @@ module mpas_atmphys_vars qg_p !graupel mixing ratio [kg/kg] real(kind=RKIND),dimension(:,:,:),allocatable:: & + nc_p, &!cloud water droplet number concentration [#/kg] ni_p, &!cloud ice crystal number concentration [#/kg] nr_p !rain drop number concentration [#/kg] @@ -247,7 +250,7 @@ module mpas_atmphys_vars f_qc, &!parameter set to true to include the cloud water mixing ratio. f_qr, &!parameter set to true to include the rain mixing ratio. f_qi, &!parameter set to true to include the cloud ice mixing ratio. - f_qs, &!parameter set to true to include the snow minxg ratio. + f_qs, &!parameter set to true to include the snow mixing ratio. f_qg, &!parameter set to true to include the graupel mixing ratio. f_qoz !parameter set to true to include the ozone mixing ratio. @@ -277,9 +280,6 @@ module mpas_atmphys_vars has_reqi, &! has_reqs - real(kind=RKIND),dimension(:,:),allocatable:: & - ntc_p, &! - muc_p ! real(kind=RKIND),dimension(:,:,:),allocatable:: & rainprod_p, &! evapprod_p, &! @@ -288,6 +288,17 @@ module mpas_atmphys_vars resnow_p, &! refl10cm_p ! +!... for Thompson cloud microphysics parameterization, including aerosol-aware option: + real(kind=RKIND),dimension(:,:),allocatable:: & + ntc_p, &! + muc_p, &! + nifa2d_p, &!surface emission of "ice-friendly" aerosols [#/kg-1/s] + nwfa2d_p !surface emission of "water-friendly" aerosols [#/kg-1/s] + + real(kind=RKIND),dimension(:,:,:),allocatable:: & + nifa_p, &!"ice-friendly" number concentration [#/kg] + nwfa_p !"water-friendly" number concentration [#/kg] + !================================================================================================================= !... variables and arrays related to parameterization of convection: !================================================================================================================= @@ -389,8 +400,7 @@ module mpas_atmphys_vars real(kind=RKIND),dimension(:,:),allocatable:: & wlpool_p, &! vcpool_p, &! - lightn_dens_p,& - ctt_p + lightn_dens_p real(kind=RKIND),dimension(:,:,:),allocatable:: & sub3d_rthcuten_p, &! @@ -481,7 +491,10 @@ module mpas_atmphys_vars real(kind=RKIND),dimension(:,:,:),allocatable:: & rqsblten_p, &!tendency of snow mixing ratio due to PBL processes. - rniblten_p !tendency of cloud ice number concentration due to PBL processes. + rncblten_p, &!tendency of cloud liquid water number concentration due to PBL processes. + rniblten_p, &!tendency of cloud ice number concentration due to PBL processes. + rnifablten_p, &!tendency of ice-friendly aerosol number concentration due to PBL processes. + rnwfablten_p !tendency of water-friendly aerosol number concentration due to PBL processes. real(kind=RKIND),dimension(:,:,:),allocatable:: & pattern_spp_pbl !stochastic forcing for the MYMM PBL and surface layer schemes. @@ -556,11 +569,6 @@ module mpas_atmphys_vars wspd_p, &!wind speed [m/s] znt_p, &!time-varying roughness length [m] zol_p ! -!---srf -real(kind=RKIND),dimension(:,:),allocatable:: & - hfx_spr_p, &!upward heat flux at the due sea sprays [W/m2] - lh_spr_p !latent heat flux at the due sea sprays [W/m2] - !... arrays only in monin_obukohv (module_sf_sfclay.F): real(kind=RKIND),dimension(:,:),allocatable:: & @@ -630,6 +638,35 @@ module mpas_atmphys_vars snowsi_p, &!snow depth over seaice [m] icedepth_p !seaice thickness [m] +!================================================================================================================= +!... variables and arrays related to the calculation of the optical properties of aerosols: to date, the only kind +! of aerosols included in MPAS are the "water-friendly" and "ice-friendly" aerosols used in the Thompson cloud +! cloud microphysics scheme. +!================================================================================================================= + + integer,parameter:: taer_aod550_opt = 2!input option for nwfa, nifa optical depth at 500 nm. + integer,parameter:: taer_angexp_opt = 3!input option for nwfa, nifa aerosol Angstrom exponent. + integer,parameter:: taer_ssa_opt = 3!input option for nwfa, nifa aerosol single-scattering albedo. + integer,parameter:: taer_asy_opt = 3!input option for nwfa, nifa aerosol asymmetry factor. + + integer:: aer_opt !=[0,3] : 0 for no aerosols, 3 for "water-" and "ice-friendly" aerosols. + integer,dimension(:,:),allocatable:: & + taer_type_p !=[1,2,3]: 1 for rural, 2 is urban and 3 is maritime in WRF. In MPAS, + !aer_type is initialized as a function of landmask (=1 over land; =2 over + !oceans. + + real(kind=RKIND),parameter:: aer_aod550_val = 0.12 + real(kind=RKIND),parameter:: aer_angexp_val = 1.3 + real(kind=RKIND),parameter:: aer_ssa_val = 0.85 + real(kind=RKIND),parameter:: aer_asy_val = 0.9 + + real(kind=RKIND),dimension(:,:),allocatable :: taod5502d_p!total aerosol optical depth at 550 nm [-] + real(kind=RKIND),dimension(:,:,:),allocatable:: taod5503d_p!aerosol optical depth at 550 nm [-] + + real(kind=RKIND),dimension(:,:,:,:),allocatable:: tauaer_p !aerosol optical depth in RRTMG SW [-] + real(kind=RKIND),dimension(:,:,:,:),allocatable:: ssaaer_p !aerosol single scatterin albedo in RRTMG SW [-] + real(kind=RKIND),dimension(:,:,:,:),allocatable:: asyaer_p !aerosol asymmetry factor in RRTMG SW [-] + !================================================================================================================= !... variables and arrays related to parameterization of short-wave radiation: !================================================================================================================= @@ -843,6 +880,12 @@ module mpas_atmphys_vars frc_urb_p, &!urban fraction [-] ust_urb_p !urban u* in similarity theory [m/s] +!================================================================================================================= +!.. variables and arrays related to the Noahmp land-surface parameterization: +!================================================================================================================= + + type(NoahmpIO_type):: mpas_noahmp + !================================================================================================================= !.. variables and arrays related to surface characteristics: !================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_mmm/Makefile b/src/core_atmosphere/physics/physics_mmm/Makefile deleted file mode 100644 index 80448dbc0..000000000 --- a/src/core_atmosphere/physics/physics_mmm/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -.SUFFIXES: .F .o - -all: dummy physics_mmm - -dummy: - echo "****** compiling physics_mmm ******" - -OBJS = \ - bl_gwdo.o \ - bl_mynn.o \ - bl_mynn_subroutines.o \ - bl_ysu.o \ - cu_ntiedtke.o \ - mp_radar.o \ - mp_wsm6_effectRad.o \ - mp_wsm6.o \ - mynn_shared.o \ - sf_mynn.o \ - sf_sfclayrev.o \ - module_libmassv.o \ - module_sprayHFs.o - -physics_mmm: $(OBJS) - ar -ru ./../libphys.a $(OBJS) - -# DEPENDENCIES: -bl_mynn.o: \ - bl_mynn_subroutines.o - -bl_mynn_subroutines.o: \ - mynn_shared.o - -mp_wsm6_effectRad.o: \ - mp_wsm6.o - -mp_wsm6.o: \ - mp_radar.o \ - module_libmassv.o - -sf_mynn.o: \ - mynn_shared.o \ - module_sprayHFs.o - -clean: - $(RM) *.f90 *.o *.mod - @# Certain systems with intel compilers generate *.i files - @# This removes them during the clean process - $(RM) *.i - -.F.o: -ifeq "$(GEN_F90)" "true" - $(CPP) $(CPPFLAGS) $(COREDEF) $(CPPINCLUDES) $< > $*.f90 - $(FC) $(FFLAGS) -c $*.f90 $(FCINCLUDES) -I.. -I../../../framework -I../../../external/esmf_time_f90 -else - $(FC) $(CPPFLAGS) $(COREDEF) $(FFLAGS) -c $*.F $(CPPINCLUDES) $(FCINCLUDES) -I.. -I../../../framework -I../../../external/esmf_time_f90 -endif diff --git a/src/core_atmosphere/physics/physics_mmm/bl_gwdo.F b/src/core_atmosphere/physics/physics_mmm/bl_gwdo.F deleted file mode 100644 index dfb337091..000000000 --- a/src/core_atmosphere/physics/physics_mmm/bl_gwdo.F +++ /dev/null @@ -1,659 +0,0 @@ -module bl_gwdo -use ccpp_kinds,only: kind_phys -!=============================================================================== - IMPLICIT NONE - PRIVATE - PUBLIC :: bl_gwdo_run - PUBLIC :: bl_gwdo_init - PUBLIC :: bl_gwdo_final - PUBLIC :: bl_gwdo_timestep_init - PUBLIC :: bl_gwdo_timestep_final - -contains -!------------------------------------------------------------------------------- -!------------------------------------------------------------------------------- - subroutine bl_gwdo_run(sina, cosa, & - rublten,rvblten, & - dtaux3d,dtauy3d, & - dusfcg,dvsfcg, & - uproj, vproj, & - t1, q1, & - prsi, prsl, prslk, zl, & - var, oc1, & - oa2d1, oa2d2, & - oa2d3, oa2d4, & - ol2d1, ol2d2, & - ol2d3, ol2d4, & - g_, cp_, rd_, rv_, fv_, pi_, & - dxmeter, deltim, & - its, ite, kte, kme, & - errmsg, errflg ) -!------------------------------------------------------------------------------- -! -! abstract : -! this code handles the time tendencies of u v due to the effect of -! mountain induced gravity wave drag from sub-grid scale orography. -! this routine not only treats the traditional upper-level wave breaking due -! to mountain variance (alpert 1988), but also the enhanced -! lower-tropospheric wave breaking due to mountain convexity and asymmetry -! (kim and arakawa 1995). thus, in addition to the terrain height data -! in a model grid gox, additional 10-2d topographic statistics files are -! needed, including orographic standard deviation (var), convexity (oc1), -! asymmetry (oa4) and ol (ol4). these data sets are prepared based on the -! 30 sec usgs orography (hong 1999). the current scheme was implmented as in -! choi and hong (2015), which names kim gwdo since it was developed by -! kiaps staffs for kiaps integrated model system (kim). the scheme -! additionally includes the effects of orographic anisotropy and -! flow-blocking drag. -! coded by song-you hong and young-joon kim and implemented by song-you hong -! -! history log : -! 2015-07-01 hyun-joo choi add flow-blocking drag and orographic anisotropy -! -! references : -! choi and hong (2015), j. geophys. res. -! hong et al. (2008), wea. forecasting -! kim and doyle (2005), q. j. r. meteor. soc. -! kim and arakawa (1995), j. atmos. sci. -! alpet et al. (1988), NWP conference -! hong (1999), NCEP office note 424 -! -! input : -! dudt, dvdt - non-lin tendency for u and v wind component -! uproj, vproj - projection-relative U and V m/sec -! u1, v1 - zonal and meridional wind m/sec at t0-dt -! t1 - temperature deg k at t0-dt -! q1 - mixing ratio at t0-dt -! deltim - time step (s) -! del - positive increment of pressure across layer (pa) -! prslk, zl, prsl, prsi - pressure and height variables -! oa4, ol4, omax, var, oc1 - orographic statistics -! -! output : -! dudt, dvdt - wind tendency due to gwdo -! dtaux2d, dtauy2d - diagnoised orographic gwd -! dusfc, dvsfc - gw stress -! -!------------------------------------------------------------------------------- - use ccpp_kinds, only: kind_phys - implicit none -! - integer, parameter :: kts = 1 - integer , intent(in ) :: its, ite, kte, kme - real(kind=kind_phys) , intent(in ) :: g_, pi_, rd_, rv_, fv_,& - cp_, deltim - real(kind=kind_phys), dimension(its:ite) , intent(in ) :: dxmeter - real(kind=kind_phys), dimension(its:ite,kts:kte) , intent(inout) :: rublten, rvblten - real(kind=kind_phys), dimension(its:ite,kts:kte) , intent( out) :: dtaux3d, dtauy3d - real(kind=kind_phys), dimension(its:ite) , intent( out) :: dusfcg, dvsfcg - real(kind=kind_phys), dimension(its:ite) , intent(in ) :: sina, cosa - real(kind=kind_phys), dimension(its:ite,kts:kte) , intent(in ) :: uproj, vproj - real(kind=kind_phys), dimension(its:ite,kts:kte) , intent(in ) :: t1, q1, prslk, zl -! - real(kind=kind_phys), dimension(its:ite,kts:kte) , intent(in ) :: prsl - real(kind=kind_phys), dimension(its:ite,kts:kme) , intent(in ) :: prsi -! - real(kind=kind_phys), dimension(its:ite) , intent(in ) :: var, oc1, & - oa2d1, oa2d2, oa2d3, oa2d4, & - ol2d1, ol2d2, ol2d3, ol2d4 - character(len=*) , intent( out) :: errmsg - integer , intent( out) :: errflg -! - real(kind=kind_phys), parameter :: ric = 0.25 ! critical richardson number - real(kind=kind_phys), parameter :: dw2min = 1. - real(kind=kind_phys), parameter :: rimin = -100. - real(kind=kind_phys), parameter :: bnv2min = 1.0e-5 - real(kind=kind_phys), parameter :: efmin = 0.0 - real(kind=kind_phys), parameter :: efmax = 10.0 - real(kind=kind_phys), parameter :: xl = 4.0e4 - real(kind=kind_phys), parameter :: critac = 1.0e-5 - real(kind=kind_phys), parameter :: gmax = 1. - real(kind=kind_phys), parameter :: veleps = 1.0 - real(kind=kind_phys), parameter :: frc = 1.0 - real(kind=kind_phys), parameter :: ce = 0.8 - real(kind=kind_phys), parameter :: cg = 0.5 - integer,parameter :: kpblmin = 2 -! -! local variables -! - integer :: kpblmax - integer :: latd,lond - integer :: i,k,lcap,lcapp1,nwd,idir, & - klcap,kp1,ikount,kk -! - real(kind=kind_phys) :: fdir,cs,rcsks, & - wdir,ti,rdz,temp,tem2,dw2,shr2,bvf2,rdelks, & - wtkbj,tem,gfobnv,hd,fro,rim,temc,tem1,efact, & - temv,dtaux,dtauy -! - real(kind=kind_phys), dimension(its:ite,kts:kte) :: dudt, dvdt - real(kind=kind_phys), dimension(its:ite,kts:kte) :: dtaux2d, dtauy2d - real(kind=kind_phys), dimension(its:ite) :: dusfc, dvsfc - logical, dimension(its:ite) :: ldrag, icrilv, flag,kloop1 - real(kind=kind_phys), dimension(its:ite) :: coefm -! - real(kind=kind_phys), dimension(its:ite) :: taub, xn, yn, ubar, vbar, fr, & - ulow, rulow, bnv, oa, ol, rhobar, & - dtfac, brvf, xlinv, delks,delks1, & - zlowtop,cleff - real(kind=kind_phys), dimension(its:ite,kts:kte+1) :: taup - real(kind=kind_phys), dimension(its:ite,kts:kte-1) :: velco - real(kind=kind_phys), dimension(its:ite,kts:kte) :: bnv2, usqj, taud, rho, vtk, vtj - real(kind=kind_phys), dimension(its:ite,kts:kte) :: del - real(kind=kind_phys), dimension(its:ite,kts:kte) :: u1, v1 - real(kind=kind_phys), dimension(its:ite,4) :: oa4, ol4 -! - integer, dimension(its:ite) :: kbl, klowtop - integer, parameter :: mdir=8 - integer, dimension(mdir) :: nwdir - data nwdir/6,7,5,8,2,3,1,4/ -! -! variables for flow-blocking drag -! - real(kind=kind_phys), parameter :: frmax = 10. - real(kind=kind_phys), parameter :: olmin = 1.0e-5 - real(kind=kind_phys), parameter :: odmin = 0.1 - real(kind=kind_phys), parameter :: odmax = 10. -! - real(kind=kind_phys) :: fbdcd - real(kind=kind_phys) :: zblk, tautem - real(kind=kind_phys) :: fbdpe, fbdke - real(kind=kind_phys), dimension(its:ite) :: delx, dely - real(kind=kind_phys), dimension(its:ite,4) :: dxy4, dxy4p - real(kind=kind_phys), dimension(4) :: ol4p - real(kind=kind_phys), dimension(its:ite) :: dxy, dxyp, olp, od - real(kind=kind_phys), dimension(its:ite,kts:kte+1) :: taufb -! - integer, dimension(its:ite) :: komax - integer :: kblk -!------------------------------------------------------------------------------- -! -! constants -! - lcap = kte - lcapp1 = lcap + 1 - fdir = mdir / (2.0*pi_) -! -! initialize CCPP error flag and message -! - errmsg = '' - errflg = 0 -! -! calculate length of grid for flow-blocking drag -! - delx(its:ite) = dxmeter(its:ite) - dely(its:ite) = dxmeter(its:ite) - dxy4(its:ite,1) = delx(its:ite) - dxy4(its:ite,2) = dely(its:ite) - dxy4(its:ite,3) = sqrt(delx(its:ite)**2. + dely(its:ite)**2.) - dxy4(its:ite,4) = dxy4(its:ite,3) - dxy4p(its:ite,1) = dxy4(its:ite,2) - dxy4p(its:ite,2) = dxy4(its:ite,1) - dxy4p(its:ite,3) = dxy4(its:ite,4) - dxy4p(its:ite,4) = dxy4(its:ite,3) -! - cleff(its:ite) = dxmeter(its:ite) -! -! initialize arrays, array syntax is OK for OpenMP since these are local -! - ldrag = .false. ; icrilv = .false. ; flag = .true. -! - klowtop = 0 ; kbl = 0 -! - dtaux = 0. ; dtauy = 0. ; xn = 0. ; yn = 0. - ubar = 0. ; vbar = 0. ; rhobar = 0. ; ulow = 0. - oa = 0. ; ol = 0. ; taub = 0. -! - usqj = 0. ; bnv2 = 0. ; vtj = 0. ; vtk = 0. - taup = 0. ; taud = 0. ; dtaux2d = 0. ; dtauy2d = 0. -! - dtfac = 1.0 ; xlinv = 1.0/xl -! - komax = 0 - taufb = 0.0 -! - do k = kts,kte - do i = its,ite - vtj(i,k) = t1(i,k) * (1.+fv_*q1(i,k)) - vtk(i,k) = vtj(i,k) / prslk(i,k) - - ! Density (kg/m^3) - - rho(i,k) = 1./rd_ * prsl(i,k) / vtj(i,k) - - ! Delta p (positive) between interfaces levels (Pa) - - del(i,k) = prsi(i,k) - prsi(i,k+1) - - ! Earth-relative zonal and meridional winds (m/s) - - u1(i,k) = uproj(i,k)*cosa(i) - vproj(i,k)*sina(i) - v1(i,k) = uproj(i,k)*sina(i) + vproj(i,k)*cosa(i) - - enddo - enddo - -! - do i = its,ite - zlowtop(i) = 2. * var(i) - enddo -! - do i = its,ite - kloop1(i) = .true. - enddo -! - do k = kts+1,kte - do i = its,ite - if(zlowtop(i) .gt. 0.) then - if (kloop1(i).and.zl(i,k)-zl(i,1).ge.zlowtop(i)) then - klowtop(i) = k+1 - kloop1(i) = .false. - endif - endif - enddo - enddo -! - kpblmax = kte - do i = its,ite - kbl(i) = klowtop(i) - kbl(i) = max(min(kbl(i),kpblmax),kpblmin) - enddo -! -! determine the level of maximum orographic height -! - komax(:) = kbl(:) -! - do i = its,ite - delks(i) = 1.0 / (prsi(i,1) - prsi(i,kbl(i))) - delks1(i) = 1.0 / (prsl(i,1) - prsl(i,kbl(i))) - enddo -! -! compute low level averages within pbl -! - do k = kts,kpblmax - do i = its,ite - if (k.lt.kbl(i)) then - rcsks = del(i,k) * delks(i) - rdelks = del(i,k) * delks(i) - ubar(i) = ubar(i) + rcsks * u1(i,k) ! pbl u mean - vbar(i) = vbar(i) + rcsks * v1(i,k) ! pbl v mean - rhobar(i) = rhobar(i) + rdelks * rho(i,k) ! pbl rho mean - endif - enddo - enddo -! -! figure out low-level horizontal wind direction -! -! nwd 1 2 3 4 5 6 7 8 -! wd w s sw nw e n ne se -! - do i = its,ite - oa4(i,1) = oa2d1(i) - oa4(i,2) = oa2d2(i) - oa4(i,3) = oa2d3(i) - oa4(i,4) = oa2d4(i) - ol4(i,1) = ol2d1(i) - ol4(i,2) = ol2d2(i) - ol4(i,3) = ol2d3(i) - ol4(i,4) = ol2d4(i) - wdir = atan2(ubar(i),vbar(i)) + pi_ - idir = mod(nint(fdir*wdir),mdir) + 1 - nwd = nwdir(idir) - oa(i) = (1-2*int( (nwd-1)/4 )) * oa4(i,mod(nwd-1,4)+1) - ol(i) = ol4(i,mod(nwd-1,4)+1) -! -! compute orographic width along (ol) and perpendicular (olp) the wind direction -! - ol4p(1) = ol4(i,2) - ol4p(2) = ol4(i,1) - ol4p(3) = ol4(i,4) - ol4p(4) = ol4(i,3) - olp(i) = ol4p(mod(nwd-1,4)+1) -! -! compute orographic direction (horizontal orographic aspect ratio) -! - od(i) = olp(i)/max(ol(i),olmin) - od(i) = min(od(i),odmax) - od(i) = max(od(i),odmin) -! -! compute length of grid in the along(dxy) and cross(dxyp) wind directions -! - dxy(i) = dxy4(i,MOD(nwd-1,4)+1) - dxyp(i) = dxy4p(i,MOD(nwd-1,4)+1) - enddo -! -! saving richardson number in usqj for migwdi -! - do k = kts,kte-1 - do i = its,ite - ti = 2.0 / (t1(i,k)+t1(i,k+1)) - rdz = 1./(zl(i,k+1) - zl(i,k)) - tem1 = u1(i,k) - u1(i,k+1) - tem2 = v1(i,k) - v1(i,k+1) - dw2 = tem1*tem1 + tem2*tem2 - shr2 = max(dw2,dw2min) * rdz * rdz - bvf2 = g_*(g_/cp_+rdz*(vtj(i,k+1)-vtj(i,k))) * ti - usqj(i,k) = max(bvf2/shr2,rimin) - bnv2(i,k) = 2.0*g_*rdz*(vtk(i,k+1)-vtk(i,k))/(vtk(i,k+1)+vtk(i,k)) - enddo - enddo -! -! compute the "low level" or 1/3 wind magnitude (m/s) -! - do i = its,ite - ulow(i) = max(sqrt(ubar(i)*ubar(i) + vbar(i)*vbar(i)), 1.0) - rulow(i) = 1./ulow(i) - enddo -! - do k = kts,kte-1 - do i = its,ite - velco(i,k) = 0.5 * ((u1(i,k)+u1(i,k+1)) * ubar(i) & - + (v1(i,k)+v1(i,k+1)) * vbar(i)) - velco(i,k) = velco(i,k) * rulow(i) - if ((velco(i,k).lt.veleps) .and. (velco(i,k).gt.0.)) then - velco(i,k) = veleps - endif - enddo - enddo -! -! no drag when critical level in the base layer -! - do i = its,ite - ldrag(i) = velco(i,1).le.0. - enddo -! -! no drag when velco.lt.0 -! - do k = kpblmin,kpblmax - do i = its,ite - if (k .lt. kbl(i)) ldrag(i) = ldrag(i).or. velco(i,k).le.0. - enddo - enddo -! -! the low level weighted average ri is stored in usqj(1,1; im) -! the low level weighted average n**2 is stored in bnv2(1,1; im) -! this is called bnvl2 in phy_gwd_alpert_sub not bnv2 -! rdelks (del(k)/delks) vert ave factor so we can * instead of / -! - do i = its,ite - wtkbj = (prsl(i,1)-prsl(i,2)) * delks1(i) - bnv2(i,1) = wtkbj * bnv2(i,1) - usqj(i,1) = wtkbj * usqj(i,1) - enddo -! - do k = kpblmin,kpblmax - do i = its,ite - if (k .lt. kbl(i)) then - rdelks = (prsl(i,k)-prsl(i,k+1)) * delks1(i) - bnv2(i,1) = bnv2(i,1) + bnv2(i,k) * rdelks - usqj(i,1) = usqj(i,1) + usqj(i,k) * rdelks - endif - enddo - enddo -! - do i = its,ite - ldrag(i) = ldrag(i) .or. bnv2(i,1).le.0.0 - ldrag(i) = ldrag(i) .or. ulow(i).eq.1.0 - ldrag(i) = ldrag(i) .or. var(i) .le. 0.0 - enddo -! -! set all ri low level values to the low level value -! - do k = kpblmin,kpblmax - do i = its,ite - if (k .lt. kbl(i)) usqj(i,k) = usqj(i,1) - enddo - enddo -! - do i = its,ite - if (.not.ldrag(i)) then - bnv(i) = sqrt( bnv2(i,1) ) - fr(i) = bnv(i) * rulow(i) * var(i) * od(i) - fr(i) = min(fr(i),frmax) - xn(i) = ubar(i) * rulow(i) - yn(i) = vbar(i) * rulow(i) - endif - enddo -! -! compute the base level stress and store it in taub -! calculate enhancement factor, number of mountains & aspect -! ratio const. use simplified relationship between standard -! deviation & critical hgt -! - do i = its,ite - if (.not. ldrag(i)) then - efact = (oa(i) + 2.) ** (ce*fr(i)/frc) - efact = min( max(efact,efmin), efmax ) - coefm(i) = (1. + ol(i)) ** (oa(i)+1.) - xlinv(i) = coefm(i) / cleff(i) - tem = fr(i) * fr(i) * oc1(i) - gfobnv = gmax * tem / ((tem + cg)*bnv(i)) - taub(i) = xlinv(i) * rhobar(i) * ulow(i) * ulow(i) & - * ulow(i) * gfobnv * efact - else - taub(i) = 0.0 - xn(i) = 0.0 - yn(i) = 0.0 - endif - enddo -! -! now compute vertical structure of the stress. -! - do k = kts,kpblmax - do i = its,ite - if (k .le. kbl(i)) taup(i,k) = taub(i) - enddo - enddo -! - do k = kpblmin, kte-1 ! vertical level k loop! - kp1 = k + 1 - do i = its,ite -! -! unstablelayer if ri < ric -! unstable layer if upper air vel comp along surf vel <=0 (crit lay) -! at (u-c)=0. crit layer exists and bit vector should be set (.le.) -! - if (k .ge. kbl(i)) then - icrilv(i) = icrilv(i) .or. ( usqj(i,k) .lt. ric) & - .or. (velco(i,k) .le. 0.0) - brvf(i) = max(bnv2(i,k),bnv2min) ! brunt-vaisala frequency squared - brvf(i) = sqrt(brvf(i)) ! brunt-vaisala frequency - endif - enddo -! - do i = its,ite - if (k .ge. kbl(i) .and. (.not. ldrag(i))) then - if (.not.icrilv(i) .and. taup(i,k) .gt. 0.0 ) then - temv = 1.0 / velco(i,k) - tem1 = coefm(i)/dxy(i)*(rho(i,kp1)+rho(i,k))*brvf(i)*velco(i,k)*0.5 - hd = sqrt(taup(i,k) / tem1) - fro = brvf(i) * hd * temv -! -! rim is the minimum-richardson number by shutts (1985) -! - tem2 = sqrt(usqj(i,k)) - tem = 1. + tem2 * fro - rim = usqj(i,k) * (1.-fro) / (tem * tem) -! -! check stability to employ the 'saturation hypothesis' -! of lindzen (1981) except at tropospheric downstream regions -! - if (rim .le. ric) then ! saturation hypothesis! - if ((oa(i) .le. 0.).or.(kp1 .ge. kpblmin )) then - temc = 2.0 + 1.0 / tem2 - hd = velco(i,k) * (2.*sqrt(temc)-temc) / brvf(i) - taup(i,kp1) = tem1 * hd * hd - endif - else ! no wavebreaking! - taup(i,kp1) = taup(i,k) - endif - endif - endif - enddo - enddo -! - if (lcap.lt.kte) then - do klcap = lcapp1,kte - do i = its,ite - taup(i,klcap) = prsi(i,klcap) / prsi(i,lcap) * taup(i,lcap) - enddo - enddo - endif - do i = its,ite - if (.not.ldrag(i)) then -! -! determine the height of flow-blocking layer -! - kblk = 0 - fbdpe = 0.0 - fbdke = 0.0 - do k = kte, kpblmin, -1 - if (kblk.eq.0 .and. k.le.kbl(i)) then - fbdpe = fbdpe + bnv2(i,k)*(zl(i,kbl(i))-zl(i,k)) & - *del(i,k)/g_/rho(i,k) - fbdke = 0.5*(u1(i,k)**2.+v1(i,k)**2.) -! -! apply flow-blocking drag when fbdpe >= fbdke -! - if (fbdpe.ge.fbdke) then - kblk = k - kblk = min(kblk,kbl(i)) - zblk = zl(i,kblk)-zl(i,kts) - endif - endif - enddo - if (kblk.ne.0) then -! -! compute flow-blocking stress -! - fbdcd = max(2.0-1.0/od(i),0.0) - taufb(i,kts) = 0.5*rhobar(i)*coefm(i)/dxmeter(i)**2*fbdcd*dxyp(i) & - *olp(i)*zblk*ulow(i)**2 - tautem = taufb(i,kts)/real(kblk-kts) - do k = kts+1, kblk - taufb(i,k) = taufb(i,k-1) - tautem - enddo -! -! sum orographic GW stress and flow-blocking stress -! - taup(i,:) = taup(i,:) + taufb(i,:) - endif - endif - enddo -! -! calculate - (g)*d(tau)/d(pressure) and deceleration terms dtaux, dtauy -! - do k = kts,kte - do i = its,ite - taud(i,k) = 1. * (taup(i,k+1) - taup(i,k)) * g_ / del(i,k) - enddo - enddo -! -! if the gravity wave drag would force a critical line -! in the lower ksmm1 layers during the next deltim timestep, -! then only apply drag until that critical line is reached. -! - do k = kts,kpblmax-1 - do i = its,ite - if (k .le. kbl(i)) then - if (taud(i,k).ne.0.) & - dtfac(i) = min(dtfac(i),abs(velco(i,k)/(deltim*taud(i,k)))) - endif - enddo - enddo -! - do i = its,ite - dusfc(i) = 0. - dvsfc(i) = 0. - enddo -! - do k = kts,kte - do i = its,ite - taud(i,k) = taud(i,k) * dtfac(i) - dtaux = taud(i,k) * xn(i) - dtauy = taud(i,k) * yn(i) - dtaux2d(i,k) = dtaux - dtauy2d(i,k) = dtauy - dudt(i,k) = dtaux - dvdt(i,k) = dtauy - dusfc(i) = dusfc(i) + dtaux * del(i,k) - dvsfc(i) = dvsfc(i) + dtauy * del(i,k) - enddo - enddo -! - do i = its,ite - dusfc(i) = (-1./g_) * dusfc(i) - dvsfc(i) = (-1./g_) * dvsfc(i) - enddo -! -! rotate tendencies from zonal/meridional back to model grid -! - do k = kts,kte - do i = its,ite - rublten(i,k) = rublten(i,k)+dudt(i,k)*cosa(i) + dvdt(i,k)*sina(i) - rvblten(i,k) = rvblten(i,k)-dudt(i,k)*sina(i) + dvdt(i,k)*cosa(i) - dtaux3d(i,k) = dtaux2d(i,k)*cosa(i) + dtauy2d(i,k)*sina(i) - dtauy3d(i,k) =-dtaux2d(i,k)*sina(i) + dtauy2d(i,k)*cosa(i) - enddo - enddo - do i = its,ite - dusfcg(i) = dusfc(i)*cosa(i) + dvsfc(i)*sina(i) - dvsfcg(i) =-dusfc(i)*sina(i) + dvsfc(i)*cosa(i) - enddo - return - end subroutine bl_gwdo_run - -!------------------------------------------------------------------------------- - subroutine bl_gwdo_init (errmsg, errflg) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! This routine currently does nothing - - errmsg = '' - errflg = 0 - - end subroutine bl_gwdo_init - -!------------------------------------------------------------------------------- - subroutine bl_gwdo_final (errmsg, errflg) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! This routine currently does nothing - - errmsg = '' - errflg = 0 - - end subroutine bl_gwdo_final - -!------------------------------------------------------------------------------- - subroutine bl_gwdo_timestep_init (errmsg, errflg) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! This routine currently does nothing - - errmsg = '' - errflg = 0 - - end subroutine bl_gwdo_timestep_init - -!------------------------------------------------------------------------------- - subroutine bl_gwdo_timestep_final (errmsg, errflg) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! This routine currently does nothing - - errmsg = '' - errflg = 0 - - end subroutine bl_gwdo_timestep_final - -!------------------------------------------------------------------------------- -end module bl_gwdo diff --git a/src/core_atmosphere/physics/physics_mmm/bl_mynn.F b/src/core_atmosphere/physics/physics_mmm/bl_mynn.F deleted file mode 100644 index b41b2c538..000000000 --- a/src/core_atmosphere/physics/physics_mmm/bl_mynn.F +++ /dev/null @@ -1,1244 +0,0 @@ -!================================================================================================================= - module bl_mynn - use mpas_kind_types,only: kind_phys => RKIND - - use bl_mynn_common,only: & - cp , cpv , cliq , cice , ep_1 , ep_2 , ep_3 , grav , karman , p1000mb , & - r_d , r_v , svp1 , svp2 , svp3 , svpt0 , xlf , xls , xlv , p608 , & - t0c , tref , tkmin , tv0 , gtr , xlvcp , xlscp , rvovrd , rcp , cphh_st , & - cphm_st , cphh_unst , cphm_unst , b1 , b2 , zero - use bl_mynn_subroutines - - - implicit none - private - public:: bl_mynn_init, & - bl_mynn_finalize, & - bl_mynn_run - - - contains - - -!================================================================================================================= - subroutine bl_mynn_init(con_cp,con_cpv,con_cice,con_cliq,con_ep1,con_ep2,con_grav,con_karman,con_p0, & - con_rd,con_rv,con_svp1,con_svp2,con_svp3,con_svpt0,con_xlf,con_xls,con_xlv, & - errmsg,errflg) -!================================================================================================================= - -!-- input arguments: - real(kind=kind_phys),intent(in):: & - con_cp, & - con_cpv, & - con_cice, & - con_cliq - - real(kind=kind_phys),intent(in):: & - con_ep1, & - con_ep2 - - real(kind=kind_phys),intent(in):: & - con_grav - - real(kind=kind_phys),intent(in):: & - con_karman - - real(kind=kind_phys),intent(in):: & - con_p0 - - real(kind=kind_phys),intent(in):: & - con_rd, & - con_rv - - real(kind=kind_phys),intent(in):: & - con_svp1, & - con_svp2, & - con_svp3, & - con_svpt0 - - real(kind=kind_phys),intent(in):: & - con_xlf, & - con_xls, & - con_xlv - - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - -!--- initialization of physics constants needed in the MYNN PBL scheme and already available from MPAS: - cp = con_cp - cpv = con_cpv - cliq = con_cliq - cice = con_cice - ep_1 = con_ep1 - ep_2 = con_ep2 - grav = con_grav - karman = con_karman - p1000mb = con_p0 - r_d = con_rd - r_v = con_rv - rvovrd = r_v/r_d - svp1 = con_svp1 - svp2 = con_svp2 - svp3 = con_svp3 - svpt0 = con_svpt0 - xlf = con_xlf - xls = con_xls - xlv = con_xlv - -!--- initialization of derived physics constants needed in the MYNN PBL scheme: - ep_3 = 1.-ep_2 - gtr = grav/tref - p608 = ep_1 - rcp = r_d/cp - t0c = svpt0 - tv0 = p608*tref - xlscp = (xlv+xlf)/cp - xlvcp = xlv/cp - -!ev = xlv -!rk = cp/r_d -!svp11 = svp1*1.e3 -!tv1 = (1.+p608)*tref -!vk = karman - - errmsg = " " - errflg = 0 - - end subroutine bl_mynn_init - -!================================================================================================================= - subroutine bl_mynn_finalize(errmsg,errflg) -!================================================================================================================= - - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- -!note: this subroutine currently does nothing. - - errmsg = ' ' - errflg = 0 - - end subroutine bl_mynn_finalize - -!================================================================================================================= - subroutine bl_mynn_run & - (initflag , restart , cycling , & - delt , dz , dx , & - znt , u , v , & - w , th , sqv , & - sqc , sqi , sqs , & - qnc , qni , qnwfa , & - qnifa , qnbca , qozone , & - p , exner , rho , & - tt , xland , ts , & - qsfc , ps , ust , & - ch , hfx , qfx , & - rmol , wspd , uoce , & - voce , qke , qke_adv , & - tsq , qsq , cov , & - rublten , rvblten , rthblten , & - rqvblten , rqcblten , rqiblten , & - rqsblten , rqncblten , rqniblten , & - rqnwfablten , rqnifablten , rqnbcablten , & - rqozblten , exch_h , exch_m , & - pblh , kpbl , el_pbl , & - dqke , qwt , qshear , & - qbuoy , qdiss , sh , & - sm , qc_bl , qi_bl , & - cldfra_bl , icloud_bl , bl_mynn_tkeadvect , & - bl_mynn_tkebudget , bl_mynn_cloudpdf , bl_mynn_mixlength , & - bl_mynn_closure , bl_mynn_stfunc , bl_mynn_topdown , & - bl_mynn_edmf , bl_mynn_edmf_dd , bl_mynn_edmf_mom , & - bl_mynn_edmf_tke , bl_mynn_mixscalars , bl_mynn_output , & - bl_mynn_cloudmix , bl_mynn_mixqt , bl_mynn_scaleaware , & - bl_mynn_dheatopt , edmf_a , edmf_w , & - edmf_qt , edmf_thl , edmf_ent , & - edmf_qc , sub_thl , sub_sqv , & - det_thl , det_sqv , edmf_a_dd , & - edmf_w_dd , edmf_qt_dd , edmf_thl_dd , & - edmf_ent_dd , edmf_qc_dd , maxwidth , & - maxmf , ztop_plume , ktop_plume , & - spp_pbl , pattern_spp_pbl , rthraten , & - flag_qc , flag_qi , flag_qs , & - flag_qnc , flag_qni , flag_qnwfa , & - flag_qnifa , flag_qnbca , flag_qoz , & -#if(WRF_CHEM == 1) - mix_chem , nchem , kdvel , & - ndvel , chem , emis_ant_no , & - frp , vdep , & -#endif - its, ite , kts , kte , kme , errmsg , errflg & - ) - -!================================================================================================================= - -!input arguments: - logical,intent(in):: & - flag_qc,flag_qi,flag_qs,flag_qoz,flag_qnc,flag_qni,flag_qnifa,flag_qnwfa,flag_qnbca - - logical,intent(in):: bl_mynn_edmf,bl_mynn_edmf_dd,bl_mynn_edmf_mom,bl_mynn_edmf_tke - logical,intent(in):: bl_mynn_mixscalars,bl_mynn_cloudmix,bl_mynn_mixqt - logical,intent(in):: bl_mynn_tkeadvect,bl_mynn_tkebudget - logical,intent(in):: bl_mynn_output,bl_mynn_dheatopt,bl_mynn_scaleaware,bl_mynn_topdown - - logical,intent(in):: & - restart,cycling - - integer,intent(in):: its,ite,kts,kte,kme - - integer,intent(in):: & - initflag,icloud_bl,spp_pbl - - integer,intent(in):: & - bl_mynn_cloudpdf,bl_mynn_mixlength,bl_mynn_stfunc - - real(kind=kind_phys),intent(in):: & - bl_mynn_closure - - real(kind=kind_phys),intent(in):: & - delt - - real(kind=kind_phys),intent(in),dimension(its:ite):: & - dx, &! - xland, &! - ps, &! - ts, &! - qsfc, &! - ust, &! - ch, &! - hfx, &! - qfx, &! - rmol, &! - wspd, &! - uoce, &! - voce, &! - znt ! - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: & - dz, &! - u, &! - v, &! - th, &! - tt, &! - p, &! - exner, &! - rho, &! - rthraten ! - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: & - sqv, &! - sqc, &! - sqi, &! - sqs, &! - qnc, &! - qni, &! - qnifa, &! - qnwfa, &! - qnbca, &! - qozone ! - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: & - pattern_spp_pbl - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kme):: & - w ! - -!inout arguments: - integer,intent(inout),dimension(its:ite):: & - kpbl, &! - ktop_plume ! - - real(kind=kind_phys),intent(inout),dimension(its:ite):: & - pblh - - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - cldfra_bl, &! - qc_bl, &! - qi_bl ! - - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - el_pbl, &! - qke, &! - qke_adv, &! - cov, &! - qsq, &! - tsq, &! - sh, &! - sm ! - - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - rublten, &! - rvblten, &! - rthblten, &! - rqvblten, &! - rqcblten, &! - rqiblten, &! - rqsblten, &! - rqncblten, &! - rqniblten, &! - rqnifablten, &! - rqnwfablten, &! - rqnbcablten, &! - rqozblten ! - - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - edmf_a, &! - edmf_w, &! - edmf_qt, &! - edmf_thl, &! - edmf_ent, &! - edmf_qc, &! - sub_thl, &! - sub_sqv, &! - det_thl, &! - det_sqv ! - - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte),optional:: & - edmf_a_dd, &! - edmf_w_dd, &! - edmf_qt_dd, &! - edmf_thl_dd, &! - edmf_ent_dd, &! - edmf_qc_dd - - -!output arguments: - character(len=*),intent(out):: & - errmsg ! output error message (-). - - integer,intent(out):: & - errflg ! output error flag (-). - - real(kind=kind_phys),intent(out),dimension(its:ite):: & - maxwidth, &! - maxmf, &! - ztop_plume - - real(kind=kind_phys),intent(out),dimension(its:ite,kts:kte):: & - exch_h, &! - exch_m ! - - real(kind=kind_phys),intent(out),dimension(its:ite,kts:kte),optional:: & - dqke, &! - qwt, &! - qshear, &! - qbuoy, &! - qdiss ! - - -!local variable and arrays: - logical:: initialize_qke - - integer:: i,k - - real(kind=kind_phys):: qc_bl2,qi_bl2 - real(kind=kind_phys):: cpm,exnerg,flq,flqc,flqv,flt,fltv,phh,pmz,psig_bl,psig_shcu,sqcg,phi_m, & - th_sfc,zet,ts_decay - - real(kind=kind_phys),dimension(kts:kte):: cldfra_bl1_old,qc_bl1_old,qi_bl1_old - real(kind=kind_phys),dimension(kts:kte):: qv1,qc1,qi1,qs1 - real(kind=kind_phys),dimension(kts:kte):: det_sqc,det_u,det_v,sub_u,sub_v - - real(kind=kind_phys),dimension(kts:kte):: pdc,pdk,pdq,pdt,sgm,sqw,thetav,thl,vq,vt,kzero - - real(kind=kind_phys),dimension(kts:kte):: dfh,dfm,dfq,qcd,tcd,diss_heat - - real(kind=kind_phys),dimension(kts:kte):: rstoch_col - - real(kind=kind_phys),dimension(kts:kte+1):: zw - - real(kind=kind_phys),dimension(kts:kte+1):: & - s_aw1,s_awthl1,s_awqt1,s_awqv1,s_awqc1,s_awu1,s_awv1,s_awqke1,s_awqnc1,s_awqni1, & - s_awqnwfa1,s_awqnifa1,s_awqnbca1 - - real(kind=kind_phys),dimension(kts:kte+1):: & - sd_aw1,sd_awthl1,sd_awqt1,sd_awqv1,sd_awqc1,sd_awu1,sd_awv1,sd_awqke1 - -!JOE-top-down diffusion - logical :: cloudflg - integer :: kk,kminrad - - real(kind=kind_phys),parameter:: pfac =2.0, zfmin = 0.01, phifac=8.0 - real(kind=kind_phys):: maxkhtopdown - real(kind=kind_phys):: bfxpbl,dthvx,tmp1,temps,templ,zl1,wstar3_2 - real(kind=kind_phys):: ent_eff,radsum,radflux,we,rcldb,rvls,minrad,zminrad - real(kind=kind_phys),dimension(kts:kte):: khtopdown,zfac,wscalek2,zfacent,tkeprodtd -!JOE-end top down - - -!local 1D input arguments: - real(kind=kind_phys):: dx1,xland1,ps1,ts1,qsfc1,ust1,ch1,hfx1,qfx1,rmol1,wspd1, & - uoce1,voce1,znt1 - real(kind=kind_phys),dimension(kts:kte):: & - dz1,u1,v1,th1,tk1,p1,ex1,rho1,qnc1,qni1,qnifa1,qnwfa1,qnbca1,qozone1,rthraten1,sqv1,sqc1,sqi1,sqs1 - real(kind=kind_phys),dimension(kts:kme):: w1 - -!local 1D inout arguments: - integer:: kpbl1,ktop_plume1 - - real(kind=kind_phys):: pblh1 - real(kind=kind_phys),dimension(kts:kte):: cldfra_bl1,qc_bl1,qi_bl1 - real(kind=kind_phys),dimension(kts:kte):: el_pbl1,qke1,qke_adv1,cov1,qsq1,tsq1,sh1,sm1 - real(kind=kind_phys),dimension(kts:kte):: du1,dv1,dth1,dqv1,dqc1,dqi1,dqs1,dqnc1,dqni1,dqnifa1,dqnwfa1, & - dqnbca1,dqozone1 - real(kind=kind_phys),dimension(kts:kte):: edmf_a1,edmf_w1,edmf_qt1,edmf_thl1,edmf_ent1,edmf_qc1,sub_thl1, & - sub_sqv1,det_thl1,det_sqv1 - real(kind=kind_phys),dimension(kts:kte):: edmf_a_dd1,edmf_w_dd1,edmf_qt_dd1,edmf_thl_dd1,edmf_ent_dd1, & - edmf_qc_dd1 - -!local 1D output arguments: - real(kind=kind_phys):: maxwidth1,maxmf1,ztop_plume1 - real(kind=kind_phys),dimension(kts:kte):: exch_h1,exch_m1 - - real(kind=kind_phys),dimension(kts:kte):: dqke1,qwt1,qshear1,qbuoy1,qdiss1 - -!substepping TKE: - integer:: nsub - real(kind=kind_phys):: delt2 - - - -!VARIABLES NEEDED FOR MIXING OF CHEMICAL SPECIES: -#if(WRF_CHEM == 1) -!--- inputs: - logical,intent(in):: mix_chem - integer,intent(in):: nchem,kdvel,ndvel - real(kind=kind_phys),intent(in),dimension(its:ite),optional:: frp,emis_ant_no - real(kind=kind_phys),intent(in),dimension(its:ite,ndvel):: vdep - -!--- inouts: - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte,nchem):: chem -#else - logical,parameter:: mix_chem = .false. - integer,parameter:: nchem = 1 - integer,parameter:: kdvel = 1 - integer,parameter:: ndvel = 1 -#endif -!--- local variables and arrays: - logical,parameter:: rrfs_sd = .false. - logical,parameter:: smoke_dbg = .false. - logical,parameter:: enh_mix = .false. - - integer:: ic - real(kind=kind_phys):: emis_ant_no1,frp1 - real(kind=kind_phys),dimension(ndvel):: vd1 - real(kind=kind_phys),dimension(kts:kte,nchem):: chem1 - real(kind=kind_phys),dimension(kts:kte+1,nchem):: s_awchem1 - !END VARIABLES NEEDED FOR MIXING OF CHEMICAL SPECIES. - -!----------------------------------------------------------------------------------------------------------------- - - errmsg = " " - errflg = 0 - - do i = its,ite - - if(present(dqke)) then - do k = kts,kte - dqke(i,k) = qke(i,k) - enddo - endif - -!--- initialization of 2D inout tendencies: - do k = kts,kte - rublten(i,k) = 0._kind_phys - rvblten(i,k) = 0._kind_phys - rthblten(i,k) = 0._kind_phys - rqvblten(i,k) = 0._kind_phys - rqcblten(i,k) = 0._kind_phys - rqiblten(i,k) = 0._kind_phys - rqsblten(i,k) = 0._kind_phys - rqncblten(i,k) = 0._kind_phys - rqniblten(i,k) = 0._kind_phys - rqnifablten(i,k) = 0._kind_phys - rqnwfablten(i,k) = 0._kind_phys - rqnbcablten(i,k) = 0._kind_phys - rqozblten(i,k) = 0._kind_phys - enddo - -!--- initialization of 2D output variables: - ktop_plume(i) = 0 - maxwidth(i) = 0._kind_phys - maxmf(i) = 0._kind_phys - ztop_plume(i) = 0._kind_phys - -!--- initialization of 1D input variables using 2D input variables: - dx1 = dx(i) - xland1 = xland(i) - ps1 = ps(i) - ts1 = ts(i) - qsfc1 = qsfc(i) - ust1 = ust(i) - ch1 = ch(i) - hfx1 = hfx(i) - qfx1 = qfx(i) - rmol1 = rmol(i) - wspd1 = wspd(i) - uoce1 = uoce(i) - voce1 = voce(i) - znt1 = znt(i) - - do k = kts,kte - dz1(k) = dz(i,k) - u1(k) = u(i,k) - v1(k) = v(i,k) - w1(k) = w(i,k) - th1(k) = th(i,k) - tk1(k) = tt(i,k) - p1(k) = p(i,k) - ex1(k) = exner(i,k) - rho1(k) = rho(i,k) - sh1(k) = sh(i,k) - sm1(k) = sm(i,k) - rthraten1(k) = rthraten(i,k) - sqv1(k) = sqv(i,k) - sqc1(k) = sqc(i,k) - sqi1(k) = sqi(i,k) - sqs1(k) = sqs(i,k) - qnc1(k) = qnc(i,k) - qni1(k) = qni(i,k) - qnifa1(k) = qnifa(i,k) - qnwfa1(k) = qnwfa(i,k) - qnbca1(k) = qnbca(i,k) - qozone1(k) = qozone(i,k) - kzero(k) = 0._kind_phys - enddo - do k = kte,kte+1 - w1(k) = w(i,k) - enddo - -!--- initialization of the PBL stochastic forcing: - if(spp_pbl .eq. 1) then - do k = kts,kte - rstoch_col(k) = pattern_spp_pbl(i,k) - enddo - else - do k = kts,kte - rstoch_col(k) = 0._kind_phys - enddo - endif - - -!--- initialization of 1D inout variables using 2D inout variables: - kpbl1 = kpbl(i) - pblh1 = pblh(i) - - do k = kts,kte - cldfra_bl1(k) = cldfra_bl(i,k) - qc_bl1(k) = qc_bl(i,k) - qi_bl1(k) = qi_bl(i,k) - enddo - - do k = kts,kte - el_pbl1(k) = el_pbl(i,k) - qke1(k) = qke(i,k) - qke_adv1(k) = qke_adv(i,k) - cov1(k) = cov(i,k) - qsq1(k) = qsq(i,k) - tsq1(k) = tsq(i,k) - sh1(k) = sh(i,k) - sm1(k) = sm(i,k) - enddo - -!--- initialization of 1D local variables: - ktop_plume1 = 0 - maxwidth1 = 0._kind_phys - maxmf1 = 0._kind_phys - ztop_plume1 = 0._kind_phys - maxkhtopdown = 0._kind_phys - - do k = kts,kte - du1(k) = 0._kind_phys - dv1(k) = 0._kind_phys - dth1(k) = 0._kind_phys - dqv1(k) = 0._kind_phys - dqc1(k) = 0._kind_phys - dqi1(k) = 0._kind_phys - dqs1(k) = 0._kind_phys - dqnc1(k) = 0._kind_phys - dqni1(k) = 0._kind_phys - dqnifa1(k) = 0._kind_phys - dqnwfa1(k) = 0._kind_phys - dqnbca1(k) = 0._kind_phys - dqozone1(k) = 0._kind_phys - enddo - do k = kts,kte - edmf_a1(k) = 0._kind_phys - edmf_w1(k) = 0._kind_phys - edmf_qc1(k) = 0._kind_phys - edmf_ent1(k) = 0._kind_phys - edmf_qt1(k) = 0._kind_phys - edmf_thl1(k) = 0._kind_phys - sub_thl1(k) = 0._kind_phys - sub_sqv1(k) = 0._kind_phys - det_thl1(k) = 0._kind_phys - det_sqv1(k) = 0._kind_phys - - edmf_a_dd1(k) = 0._kind_phys - edmf_w_dd1(k) = 0._kind_phys - edmf_qc_dd1(k) = 0._kind_phys - edmf_ent_dd1(k) = 0._kind_phys - edmf_qt_dd1(k) = 0._kind_phys - edmf_thl_dd1(k) = 0._kind_phys - enddo - do k = kts,kte - dqke1(k) = 0._kind_phys - qwt1(k) = 0._kind_phys - qshear1(k) = 0._kind_phys - qbuoy1(k) = 0._kind_phys - qdiss1(k) = 0._kind_phys - exch_h1(k) = 0._kind_phys - exch_m1(k) = 0._kind_phys - enddo - do k = kts,kte - sub_u(k) = 0._kind_phys - sub_v(k) = 0._kind_phys - det_sqc(k) = 0._kind_phys - det_u(k) = 0._kind_phys - det_v(k) = 0._kind_phys - enddo - do k = kts,kte+1 - s_aw1(k) = 0._kind_phys - s_awthl1(k) = 0._kind_phys - s_awqt1(k) = 0._kind_phys - s_awqv1(k) = 0._kind_phys - s_awqc1(k) = 0._kind_phys - s_awu1(k) = 0._kind_phys - s_awv1(k) = 0._kind_phys - s_awqke1(k) = 0._kind_phys - s_awqnc1(k) = 0._kind_phys - s_awqni1(k) = 0._kind_phys - s_awqnwfa1(k) = 0._kind_phys - s_awqnifa1(k) = 0._kind_phys - s_awqnbca1(k) = 0._kind_phys - enddo - do k = kts,kte+1 - sd_aw1(k) = 0._kind_phys - sd_awthl1(k) = 0._kind_phys - sd_awqt1(k) = 0._kind_phys - sd_awqv1(k) = 0._kind_phys - sd_awqc1(k) = 0._kind_phys - sd_awu1(k) = 0._kind_phys - sd_awv1(k) = 0._kind_phys - sd_awqke1(k) = 0._kind_phys - enddo - do k = kts,kte - cldfra_bl1_old(k) = 0._kind_phys - qc_bl1_old(k) = 0._kind_phys - qi_bl1_old(k) = 0._kind_phys - enddo - - do k = kts,kte - qv1(k) = sqv1(k)/(1.-sqv1(k)) - qc1(k) = sqc1(k)/(1.-sqv1(k)) - qi1(k) = sqi1(k)/(1.-sqv1(k)) - qs1(k) = sqs1(k)/(1.-sqv1(k)) - enddo - - k = kts - zw(k) = 0._kind_phys - do k = kts+1,kte+1 - zw(k) = zw(k-1) + dz1(k-1) - enddo - -!INITIALIZATION OF LOCAL CHEMICAL SPECIES: -#if(WRF_CHEM == 1) - do ic = 1,nchem - vd1(ic) = vdep(i,ic) - do k = kts,kte - chem1(k,ic) = chem(i,k,ic) - enddo - enddo - if(present(emis_ant_no) .and. present(frp)) then - emis_ant_no1 = emis_ant_no(i) - frp1 = frp(i) - else - emis_ant_no1 = 0._kind_phys - frp1 = 0._kind_phys - endif - !END INITIALIZATION OF LOCAL CHEMICAL SPECIES. -#else - do ic = 1,nchem - vd1(ic) = 0._kind_phys - do k = kts,kte - chem1(k,ic) = 0._kind_phys - enddo - enddo - emis_ant_no1 = 0._kind_phys - frp1 = 0._kind_phys -#endif - do ic = 1,nchem - do k = kts,kte+1 - s_awchem1(k,ic) = 0._kind_phys - enddo - enddo -!END INITIALIZATION OF LOCAL CHEMICAL SPECIES. - - - do k = kts,kte - !keep snow out for now - increase ceiling bias - sqw(k) = sqv1(k)+sqc1(k)+sqi1(k) !+sqs1(k) - thl(k) = th1(k) - xlvcp/ex1(k)*sqc1(k) - xlscp/ex1(k)*(sqi1(k))!+sqs1(k)) - thetav(k) = th1(k)*(1.+0.608*sqv1(k)) - - !Use form from Tripoli and Cotton (1981) with their - !suggested min temperature to improve accuracy. - !thl(k)=th(k)*(1.- xlvcp/MAX(tk1(k),TKmin)*sqc1(k) - xlscp/MAX(tk1(k),TKmin)*sqi1(k)) - !thetav(k) = th1(k)*(1.+p608)*sqv1(k) - enddo - -!----------------------------------------------------------------------------------------------------------------- -!initflag > 0: -!----------------------------------------------------------------------------------------------------------------- - if(initflag > 0 .and. .not.restart) then - - !test to see if we want to initialize qke1: - if((restart .or. cycling)) then - if(qke1(kts) < 0.0002) then - initialize_qke = .true. - else - initialize_qke = .false. - endif - else ! not cycling or restarting: - initialize_qke = .true. - endif - - if(.not.restart .or. .not.cycling) then - do k = kts,kte - sh1(k) = 0._kind_phys - sm1(k) = 0._kind_phys - el_pbl1(k) = 0._kind_phys - tsq1(k) = 0._kind_phys - qsq1(k) = 0._kind_phys - cov1(k) = 0._kind_phys - cldfra_bl1(k) = 0._kind_phys - qc_bl1(k) = 0._kind_phys - qi_bl1(k) = 0._kind_phys - qke1(k) = 0._kind_phys - enddo - endif - do k = kts,kte - cldfra_bl1_old(k) = 0._kind_phys - qc_bl1_old(k) = 0._kind_phys - qi_bl1_old(k) = 0._kind_phys - enddo - - if(initialize_qke) then - do k = kts,kte - qke1(k)=5.*ust1*max((ust1*700.-zw(k))/(max(ust1,0.01)*700.),0.01) - enddo - endif - - !--- computes the PBL height: - call get_pblh(kts,kte,pblh1,thetav,qke1,zw,dz1,xland1,kpbl1) - - !--- computes the similarity functions: - if(bl_mynn_scaleaware) then - call scale_aware(dx1,pblh1,psig_bl,psig_shcu) - else - psig_bl = 1._kind_phys - psig_shcu = 1._kind_phys - endif - - !--- calls mym_initialize: - call mym_initialize( & - kts,kte,xland1, & - dz1,dx1,zw, & - u1,v1,thl,sqv1, & - pblh1,th1,thetav,sh1,sm1, & - ust1, rmol1, & - el_pbl1,qke1,tsq1,qsq1,cov1, & - psig_bl,cldfra_bl1, & - bl_mynn_mixlength, & - edmf_w1,edmf_a1, & - initialize_qke, & - spp_pbl,rstoch_col) - - endif -!----------------------------------------------------------------------------------------------------------------- -!end initflag > 0: -!----------------------------------------------------------------------------------------------------------------- - - - if(bl_mynn_tkeadvect) then - do k = kts,kte - qke1(k) = qke_adv1(k) - enddo - endif - !Joe-TKE budget: - if(bl_mynn_tkebudget) then - do k = kts,kte - dqke1(k) = qke1(k) - enddo - endif - if(icloud_bl > 0) then - do k = kts,kte - cldfra_bl1_old(k) = cldfra_bl1(k) - qc_bl1_old(k) = qc_bl1(k) - qi_bl1_old(k) = qi_bl1(k) - enddo - endif - - !--- computes the PBL height: - call get_pblh(kts,kte,pblh1,thetav,qke1,zw,dz1,xland1,kpbl1) - - !--- computes the similarity functions: - if(bl_mynn_scaleaware) then - call scale_aware(dx1,pblh1,psig_bl,psig_shcu) - else - psig_bl = 1._kind_phys - psig_shcu = 1._kind_phys - endif - - sqcg = 0.0 !ill-defined variable; qcg has been removed - cpm = cp*(1.+0.84*qv1(kts)) - exnerg = (ps1/p1000mb)**rcp - - !----------------------------------------------------- - !ORIGINAL CODE - !flt = hfx(i)/( rho(i,kts)*cpm ) & - ! +xlvcp*ch(i)*(sqc(kts)/exner(i,kts) -sqcg/exnerg) - !flq = qfx(i)/ rho(i,kts) & - ! -ch(i)*(sqc(kts) -sqcg ) - !----------------------------------------------------- - flqv = qfx1/rho1(kts) - flqc = 0.0 !currently no sea-spray fluxes, fog settling hangled elsewhere - th_sfc = ts1/ex1(kts) - - !--- turbulent flux for the TKE voundary conditions: - flq = flqv + flqc ! Latent - flt = hfx1/(rho1(kts)*cpm ) - xlvcp*flqc/ex1(kts) ! Temperature flux - fltv = flt + flqv*p608*th_sfc ! Virtual temperature flux - - !--- update 1/L using updated sfc heat flux and friction velocity: - rmol1 = -karman*gtr*fltv/max(ust1**3,1.0e-6) - zet = 0.5*dz1(kts)*rmol1 - zet = max(zet, -20.) - zet = min(zet, 20.) - - !if(i.eq.idbg)print*,"updated z/L=",zet - if(bl_mynn_stfunc == 0) then - !original Kansas-type stability functions: - if(zet >= 0.0) then - pmz = 1.0 + (cphm_st-1.0) * zet - phh = 1.0 + cphh_st * zet - else - pmz = 1.0/ (1.0-cphm_unst*zet)**0.25 - zet - phh = 1.0/sqrt(1.0-cphh_unst*zet) - endif - phi_m = pmz + zet - else - !updated stability functions (Puhales, 2020): - phi_m = phim(zet) - pmz = phi_m - zet - phh = phih(zet) - endif - - !call mym_condensation() to calculate the nonconvective component of the subgrid-scale cloud fraction - !and mixing ratio as well as the functions used to calculate the buoyancy flux. Different cloud PDFs - !can be selected by use of the namelist parameter bl_mynn_cloudpdf: - do k = kts,kte - vt(k) = 0._kind_phys - vq(k) = 0._kind_phys - sgm(k) = 0._kind_phys - enddo - - call mym_condensation(kts,kte, & - dx1,dz1,zw,xland1, & - thl,sqw,sqv1,sqc1,sqi1,sqs1, & - p1,ex1,tsq1,qsq1,cov1, & - sh1,el_pbl1,bl_mynn_cloudpdf, & - qc_bl1,qi_bl1,cldfra_bl1, & - pblh1,hfx1, & - vt,vq,th1,sgm,rmol1, & - spp_pbl,rstoch_col) - - - !add TKE source driven by cloud top cooling. calculate the buoyancy production of tke from cloud-top - !cooling when bl_mynn_topdown = .true. - if(bl_mynn_topdown)then - call topdown_cloudrad(kts,kte,dz1,zw,fltv, & - xland1,kpbl1,pblh1, & - sqc1,sqi1,sqw,thl,th1,ex1,p1,rho1,thetav, & - cldfra_bl1,rthraten1, & - maxkhtopdown,khtopdown,tkeprodtd) - else - maxkhtopdown = 0._kind_phys - do k = kts,kte - khtopdown(k) = 0._kind_phys - tkeprodtd(k) = 0._kind_phys - enddo - endif - - - !--- calls subroutine dmp_mf(): - if(bl_mynn_edmf) then - call dmp_mf( i, & - kts,kte,delt,zw,dz1,p1,rho1, & - bl_mynn_edmf_mom, & - bl_mynn_edmf_tke, & - bl_mynn_mixscalars, & - u1,v1,w1,th1,thl,thetav,tk1, & - sqw,sqv1,sqc1,qke1, & - qnc1,qni1,qnwfa1,qnifa1,qnbca1, & - ex1,vt,vq,sgm, & - ust1,flt,fltv,flq,flqv, & - pblh1,kpbl1,dx1, & - xland1,th_sfc, & - !now outputs - tendencies - !dth1mf,dqv1mf,dqc1mf,du1mf,dv1mf, & - !outputs - updraft properties - edmf_a1,edmf_w1,edmf_qt1, & - edmf_thl1,edmf_ent1,edmf_qc1, & - !for the solver - s_aw1,s_awthl1,s_awqt1, & - s_awqv1,s_awqc1, & - s_awu1,s_awv1,s_awqke1, & - s_awqnc1,s_awqni1, & - s_awqnwfa1,s_awqnifa1,s_awqnbca1, & - sub_thl1,sub_sqv1, & - sub_u,sub_v, & - det_thl1,det_sqv1,det_sqc, & - det_u,det_v, & - !chem/smoke mixing - nchem,chem1,s_awchem1, & - mix_chem, & - qc_bl1,cldfra_bl1, & - qc_bl1_old,cldfra_bl1_old, & - flag_qc,flag_qi, & - flag_qnc,flag_qni, & - flag_qnwfa,flag_qnifa,flag_qnbca, & - psig_shcu, & - maxwidth1,ktop_plume1, & - maxmf1,ztop_plume1, & - spp_pbl,rstoch_col) - - if(bl_mynn_edmf_dd) then - call ddmf_jpl(kts,kte,delt,zw,dz1,p1, & - u1,v1,th1,thl,thetav,tk1, & - sqw,sqv1,sqc1,rho1,ex1, & - ust1,flt,flq, & - pblh1,kpbl1, & - edmf_a_dd1,edmf_w_dd1,edmf_qt_dd1, & - edmf_thl_dd1,edmf_ent_dd1, & - edmf_qc_dd1, & - sd_aw1,sd_awthl1,sd_awqt1, & - sd_awqv1,sd_awqc1,sd_awu1,sd_awv1, & - sd_awqke1, & - qc_bl1,cldfra_bl1, & - rthraten) - endif - endif - - - !--- capability to substep the eddy-diffusivity portion: - !do nsub = 1,2 - delt2 = delt !*0.5 !only works if topdown=0 - - call mym_turbulence & - (kts,kte,xland1,bl_mynn_closure, & - dz1,dx1,zw, & - u1,v1,thl,thetav,sqc1,sqw, & - qke1,tsq1,qsq1,cov1, & - vt,vq, & - rmol1,flt,fltv,flq, & - pblh1,th1, & - sh1,sm1,el_pbl1, & - dfm,dfh,dfq, & - tcd,qcd,pdk, & - pdt,pdq,pdc, & - qwt1,qshear1,qbuoy1,qdiss1, & - bl_mynn_tkebudget, & - psig_bl,psig_shcu, & - cldfra_bl1,bl_mynn_mixlength, & - edmf_w1,edmf_a1, & - tkeprodtd, & - spp_pbl,rstoch_col) - - - !--- calls subroutine mym_predict() to solve TKE: - call mym_predict & - (kts,kte,bl_mynn_closure, & - delt2,dz1, & - ust1,flt,flq,pmz,phh, & - el_pbl1,dfq,rho1,pdk,pdt,pdq,pdc, & - qke1,tsq1,qsq1,cov1, & - s_aw1,s_awqke1,bl_mynn_edmf_tke, & - qwt1,qdiss1,bl_mynn_tkebudget) ! TKE budget (Puhales 2020) - - if(bl_mynn_dheatopt) then - do k = kts,kte-1 - !set max dissipative heating rate to 7.2 K per hour - diss_heat(k) = min(max(1.0*(qke1(k)**1.5)/(b1*max(0.5*(el_pbl1(k)+el_pbl1(k+1)),1.))/cp,0.0),0.002) - - !limit heating above 100 mb: - diss_heat(k) = diss_heat(k) * exp(-10000./MAX(p1(k),1.)) - enddo - diss_heat(kte) = 0. - else - do k = kts,kte - diss_heat(k) = 0. - enddo - endif - - - !--- call to subroutine mynn_tendencies: - call mynn_tendencies(kts,kte, & - delt,dz1,rho1, & - u1,v1,th1,tk1,qv1, & - qc1,qi1,kzero,qnc1,qni1, & !kzero replaces qs1 - not mixing snow - ps1,p1,ex1,thl, & - sqv1,sqc1,sqi1,kzero,sqw, & !kzero replaces sqs - not mxing snow - qnwfa1,qnifa1,qnbca1,qozone1, & - ust1,flt,flq,flqv,flqc, & - wspd1,uoce1,voce1, & - tsq1,qsq1,cov1, & - tcd,qcd, & - dfm,dfh,dfq, & - du1,dv1,dth1,dqv1, & - dqc1,dqi1,dqs1,dqnc1,dqni1, & - dqnwfa1,dqnifa1,dqnbca1, & - dqozone1, & - diss_heat, & - !mass flux components - s_aw1,s_awthl1,s_awqt1, & - s_awqv1,s_awqc1,s_awu1,s_awv1, & - s_awqnc1,s_awqni1, & - s_awqnwfa1,s_awqnifa1,s_awqnbca1, & - sd_aw1,sd_awthl1,sd_awqt1, & - sd_awqv1,sd_awqc1, & - sd_awu1,sd_awv1, & - sub_thl1,sub_sqv1, & - sub_u,sub_v, & - det_thl1,det_sqv1,det_sqc, & - det_u,det_v, & - flag_qc,flag_qi,flag_qnc, & - flag_qni,flag_qs, & - flag_qnwfa,flag_qnifa, & - flag_qnbca,flag_qoz, & - cldfra_bl1, & - bl_mynn_cloudmix, & - bl_mynn_mixqt, & - bl_mynn_edmf_mom, & - bl_mynn_mixscalars) - - - !--- call to subroutine mynn_mix_chem for PBL and tropospheric mixing of - ! chemical species: - if(mix_chem) then - if(rrfs_sd) then - call mynn_mix_chem(kts,kte, & - delt,dz1,pblh1, & - nchem,kdvel,ndvel, & - chem1,vd1, & - rho1,flt, & - tcd,qcd, & - dfh, & - s_aw1,s_awchem1, & - emis_ant_no1, & - frp1,rrfs_sd, & - enh_mix,smoke_dbg) - else - call mynn_mix_chem(kts,kte, & - delt,dz1,pblh1, & - nchem,kdvel,ndvel, & - chem1,vd1, & - rho1,flt, & - tcd,qcd, & - dfh, & - s_aw1,s_awchem1, & - zero, & - zero,rrfs_sd, & - enh_mix,smoke_dbg) - endif - endif -#if(WRF == 1) - !directly updates chem3 instead of computing a tendency: - do ic = 1,nchem - do k = kts,kte - chem(i,k,ic) = max(1.e-12,chem1(k,ic)) - enddo - enddo -#endif - - - !--- computes the exchange coefficients: - call retrieve_exchange_coeffs(kts,kte,dfm,dfh,dz1,exch_m1,exch_h1) - - -!----------------------------------------------------------------------------------------------------------------- -!begin output of 2D variables: -!----------------------------------------------------------------------------------------------------------------- - !output tendencies: - do k = kts,kte - rublten(i,k) = du1(k) - rvblten(i,k) = dv1(k) - rthblten(i,k) = dth1(k) - rqvblten(i,k) = dqv1(k) - enddo - if(bl_mynn_cloudmix .and. flag_qc) then - do k = kts,kte - rqcblten(i,k) = dqc1(k) - enddo - endif - if(bl_mynn_cloudmix .and. flag_qi) then - do k = kts,kte - rqiblten(i,k) = dqi1(k) - enddo - endif - if(bl_mynn_cloudmix .and. flag_qs) then - do k = kts,kte - rqsblten(i,k) = dqs1(k) - enddo - endif - if(bl_mynn_cloudmix .and. bl_mynn_mixscalars .and. flag_qnc) then - do k = kts,kte - rqncblten(i,k) = dqnc1(k) - enddo - endif - if(bl_mynn_cloudmix .and. bl_mynn_mixscalars .and. flag_qni) then - do k = kts,kte - rqniblten(i,k) = dqni1(k) - enddo - endif - if(bl_mynn_cloudmix .and. bl_mynn_mixscalars .and. flag_qnifa) then - do k = kts,kte - rqnifablten(i,k) = dqnifa1(k) - enddo - endif - if(bl_mynn_cloudmix .and. bl_mynn_mixscalars .and. flag_qnwfa) then - do k = kts,kte - rqnwfablten(i,k) = dqnwfa1(k) - enddo - endif - if(bl_mynn_cloudmix .and. bl_mynn_mixscalars .and. flag_qnbca) then - do k = kts,kte - rqnbcablten(i,k) = dqnbca1(k) - enddo - endif - do k = kts,kte - rqozblten(i,k) = 0._kind_phys - enddo - - !inout arrays: - kpbl(i) = kpbl1 - ktop_plume(i) = ktop_plume1 - - pblh(i) = pblh1 - - do k = kts,kte - cldfra_bl(i,k) = cldfra_bl1(k) - qc_bl(i,k) = qc_bl1(k) - qi_bl(i,k) = qi_bl1(k) - enddo - - do k = kts,kte - el_pbl(i,k) = el_pbl1(k) - qke(i,k) = qke1(k) - qke_adv(i,k) = qke_adv1(k) - cov(i,k) = cov1(k) - qsq(i,k) = qsq1(k) - tsq(i,k) = tsq1(k) - sh(i,k) = sh1(k) - sm(i,k) = sm1(k) - enddo - - - !the TKE budget is now given in m**2/s**-3 (Puhales, 2020): - if(present(qwt) .and. present(qbuoy) .and. present(qshear) .and. & - present(qdiss) .and. present(dqke)) then - if(bl_mynn_tkebudget) then - !lower boundary condtions (using similarity relationships such as the prognostic equation for Qke) - k = kts - qshear1(k) = 4.*(ust1**3*phi_m/(karman*dz1(k)))-qshear1(k+1) ! staggered - qbuoy1(k) = 4.*(-ust1**3*zet/(karman*dz1(k)))-qbuoy1(k+1) ! staggered - - !unstaggering shear and buoy and trasnfering all TKE budget to 2D arrays: - do k = kts,kte-1 - qshear(i,k) = 0.5*(qshear1(k) + qshear1(k+1)) ! unstaggering in z - qbuoy(i,k) = 0.5*(qbuoy1(k) + qbuoy1(k+1)) ! unstaggering in z - qwt(i,k) = qwt1(k) - qdiss(i,k) = qdiss1(k) - dqke(i,k) = (qke1(k)-dqke(i,k))*0.5/delt - enddo - !upper boundary conditions - k = kte - qshear(i,k) = 0._kind_phys - qbuoy(i,k) = 0._kind_phys - qwt(i,k) = 0._kind_phys - qdiss(i,k) = 0._kind_phys - dqke(i,k) = 0._kind_phys - else - do k = kts,kte - qshear(i,k) = 0._kind_phys - qbuoy(i,k) = 0._kind_phys - qwt(i,k) = 0._kind_phys - qdiss(i,k) = 0._kind_phys - dqke(i,k) = 0._kind_phys - enddo - endif - endif - - - !optional inout arrays for updraft/downdraft properties: - if(bl_mynn_edmf .and. bl_mynn_output) then - do k = kts,kte - edmf_a(i,k) = edmf_a1(k) - edmf_w(i,k) = edmf_w1(k) - edmf_qt(i,k) = edmf_qt1(k) - edmf_thl(i,k) = edmf_thl1(k) - edmf_ent(i,k) = edmf_ent1(k) - edmf_qc(i,k) = edmf_qc1(k) - sub_thl(i,k) = sub_thl1(k) - sub_sqv(i,k) = sub_sqv1(k) - det_thl(i,k) = det_thl1(k) - det_sqv(i,k) = det_sqv1(k) - enddo - else - do k = kts,kte - edmf_a(i,k) = 0._kind_phys - edmf_w(i,k) = 0._kind_phys - edmf_qt(i,k) = 0._kind_phys - edmf_thl(i,k) = 0._kind_phys - edmf_ent(i,k) = 0._kind_phys - edmf_qc(i,k) = 0._kind_phys - sub_thl(i,k) = 0._kind_phys - sub_sqv(i,k) = 0._kind_phys - det_thl(i,k) = 0._kind_phys - det_sqv(i,k) = 0._kind_phys - enddo - endif - if(bl_mynn_edmf_dd .and. bl_mynn_output) then - if(present(edmf_a_dd) .and. present(edmf_w_dd) .and. present(edmf_qt_dd) .and. & - present(edmf_thl_dd) .and. present(edmf_ent_dd) .and. present(edmf_qc_dd)) then - do k = kts,kte - edmf_a_dd(i,k) = edmf_a_dd1(k) - edmf_w_dd(i,k) = edmf_w_dd1(k) - edmf_qt_dd(i,k) = edmf_qt_dd1(k) - edmf_thl_dd(i,k) = edmf_thl_dd1(k) - edmf_ent_dd(i,k) = edmf_ent_dd1(k) - edmf_qc_dd(i,k) = edmf_qc_dd1(k) - enddo - endif - endif - - !output arrays: - maxwidth(i) = maxwidth1 - maxmf(i) = maxmf1 - ztop_plume(i) = ztop_plume1 - - do k = kts,kte - exch_h(i,k) = exch_h1(k) - exch_m(i,k) = exch_m1(k) - enddo - - enddo - - end subroutine bl_mynn_run - -!================================================================================================================= - end module bl_mynn -!================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_mmm/bl_mynn_subroutines.F b/src/core_atmosphere/physics/physics_mmm/bl_mynn_subroutines.F deleted file mode 100644 index 324c36851..000000000 --- a/src/core_atmosphere/physics/physics_mmm/bl_mynn_subroutines.F +++ /dev/null @@ -1,6565 +0,0 @@ -!================================================================================================================= - module bl_mynn_common - use mpas_kind_types,only: kind_phys => RKIND - - implicit none - save - - -!--- physics constants that need to be initialized with physics constants from the host model: - real(kind=kind_phys):: cp ! defined in bl_mynn_init. - real(kind=kind_phys):: cpv ! defined in bl_mynn_init. - real(kind=kind_phys):: cice ! defined in bl_mynn_init. - real(kind=kind_phys):: cliq ! defined in bl_mynn_init. - - real(kind=kind_phys):: ep_1 ! defined in bl_mynn_init. - real(kind=kind_phys):: ep_2 ! defined in bl_mynn_init. - - real(kind=kind_phys):: grav ! defined in bl_mynn_init. - - real(kind=kind_phys):: karman ! defined in bl_mynn_init. - real(kind=kind_phys):: p1000mb ! defined in bl_mynn_init. - - real(kind=kind_phys):: rcp ! defined in bl_mynn_init. - real(kind=kind_phys):: r_d ! defined in bl_mynn_init. - real(kind=kind_phys):: r_v ! defined in bl_mynn_init. - real(kind=kind_phys):: rvovrd ! defined in bl_mynn_init. - - real(kind=kind_phys):: svp1 ! defined in bl_mynn_init. - real(kind=kind_phys):: svp2 ! defined in bl_mynn_init. - real(kind=kind_phys):: svp3 ! defined in bl_mynn_init. - real(kind=kind_phys):: svpt0 ! defined in bl_mynn_init. - - real(kind=kind_phys):: xlf ! defined in bl_mynn_init. - real(kind=kind_phys):: xlv ! defined in bl_mynn_init. - real(kind=kind_phys):: xls ! defined in bl_mynn_init. - - -!--- derived physics constants: - real(kind=kind_phys):: ep_3 - real(kind=kind_phys):: gtr - real(kind=kind_phys):: p608 - real(kind=kind_phys):: t0c - real(kind=kind_phys):: tv0 - real(kind=kind_phys):: xlscp - real(kind=kind_phys):: xlvcp - -!real(kind=kind_phys):: ev -!real(kind=kind_phys):: rk -!real(kind=kind_phys):: svp11 -!real(kind=kind_phys):: tv1 -!real(kind=kind_phys):: vk - - -!--- parameters: - real(kind=kind_phys),parameter:: tice = 240.0 !-33 (C), temp at saturation w.r.t. ice - real(kind=kind_phys),parameter:: tkmin = 253.0 - real(kind=kind_phys),parameter:: tref = 300.0 - real(kind=kind_phys),parameter:: onethird = 1./3. - real(kind=kind_phys),parameter:: twothirds = 2./3. - real(kind=kind_phys),parameter:: zero = 0._kind_phys - - -!--- physics constants also needed in subroutine bl_mynn_run: - real(kind=kind_phys),parameter:: b1 = 24.0 - real(kind=kind_phys),parameter:: b2 = 15.0 - - real(kind=kind_phys),parameter:: cphh_st = 5.0 - real(kind=kind_phys),parameter:: cphm_st = 5.0 - real(kind=kind_phys),parameter:: cphh_unst = 16.0 - real(kind=kind_phys),parameter:: cphm_unst = 16.0 - - end module bl_mynn_common - -!================================================================================================================= -!>\file module_bl_mynn.F90 -!! This file contains the entity of MYNN-EDMF PBL scheme. -! ********************************************************************** -! * An improved Mellor-Yamada turbulence closure model * -! * * -! * Original author: M. Nakanishi (N.D.A), naka@nda.ac.jp * -! * Translated into F90 and implemented in WRF-ARW by: * -! * Mariusz Pagowski (NOAA-GSL) * -! * Subsequently developed by: * -! * Joseph Olson, Jaymes Kenyon (NOAA/GSL), * -! * Wayne Angevine (NOAA/CSL), Kay Suselj (NASA/JPL), * -! * Franciano Puhales (UFSM), Laura Fowler (NCAR), * -! * Elynn Wu (UCSD), and Jordan Schnell (NOAA/GSL) * -! * * -! * Contents: * -! * * -! * mynn_bl_driver - main subroutine which calls all other routines * -! * -------------- * -! * 1. mym_initialize (to be called once initially) * -! * gives the closure constants and initializes the turbulent * -! * quantities. * -! * 2. get_pblh * -! * Calculates the boundary layer height * -! * 3. scale_aware * -! * Calculates scale-adaptive tapering functions * -! * 4. mym_condensation * -! * determines the liquid water content and the cloud fraction * -! * diagnostically. * -! * 5. dmp_mf * -! * Calls the (nonlocal) mass-flux component * -! * 6. ddmf_jpl * -! * Calls the downdraft mass-flux component * -! * (-) mym_level2 (called in the other subroutines) * -! * calculates the stability functions at Level 2. * -! * (-) mym_length (called in the other subroutines) * -! * calculates the master length scale. * -! * 7. mym_turbulence * -! * calculates the vertical diffusivity coefficients and the * -! * production terms for the turbulent quantities. * -! * 8. mym_predict * -! * predicts the turbulent quantities at the next step. * -! * * -! * call mym_initialize * -! * | * -! * |<----------------+ * -! * | | * -! * call get_pblh | * -! * call scale_aware | * -! * call mym_condensation | * -! * call dmp_mf | * -! * call ddmf_jpl | * -! * call mym_turbulence | * -! * call mym_predict | * -! * | | * -! * |-----------------+ * -! * | * -! * end * -! * * -! * Variables worthy of special mention: * -! * tref : Reference temperature * -! * thl : Liquid water potential temperature * -! * qw : Total water (water vapor+liquid water) content * -! * ql : Liquid water content * -! * vt, vq : Functions for computing the buoyancy flux * -! * qke : 2 * TKE * -! * el : mixing length * -! * * -! * If the water contents are unnecessary, e.g., in the case of * -! * ocean models, thl is the potential temperature and qw, ql, vt * -! * and vq are all zero. * -! * * -! * Grid arrangement: * -! * k+1 +---------+ * -! * | | i = 1 - nx * -! * (k) | * | k = 1 - nz * -! * | | * -! * k +---------+ * -! * i (i) i+1 * -! * * -! * All the predicted variables are defined at the center (*) of * -! * the grid boxes. The diffusivity coefficients and two of their * -! * components (el and stability functions sh & sm) are, however, * -! * defined on the walls of the grid boxes. * -! * # Upper boundary values are given at k=nz. * -! * * -! * References: * -! * 1. Nakanishi, M., 2001: * -! * Boundary-Layer Meteor., 99, 349-378. * -! * 2. Nakanishi, M. and H. Niino, 2004: * -! * Boundary-Layer Meteor., 112, 1-31. * -! * 3. Nakanishi, M. and H. Niino, 2006: * -! * Boundary-Layer Meteor., 119, 397-407. * -! * 4. Nakanishi, M. and H. Niino, 2009: * -! * Jour. Meteor. Soc. Japan, 87, 895-912. * -! * 5. Olson J. and coauthors, 2019: A description of the * -! * MYNN-EDMF scheme and coupling to other components in * -! * WRF-ARW. NOAA Tech. Memo. OAR GSD, 61, 37 pp., * -! * https://doi.org/10.25923/n9wm-be49. * -! * 6. Puhales, Franciano S. and coauthors, 2020: Turbulent * -! * Kinetic Energy Budget for MYNN-EDMF PBL Scheme in WRF model.* -! * Universidade Federal de Santa Maria Technical Note. 9 pp. * -! ********************************************************************** -! ================================================================== -! Notes on original implementation into WRF-ARW -! changes to original code: -! 1. code is 1D (in z) -! 2. option to advect TKE, but not the covariances and variances -! 3. Cranck-Nicholson replaced with the implicit scheme -! 4. removed terrain-dependent grid since input in WRF in actual -! distances in z[m] -! 5. cosmetic changes to adhere to WRF standard (remove common blocks, -! intent etc) -!------------------------------------------------------------------- -! Further modifications post-implementation -! -! 1. Addition of BouLac mixing length in the free atmosphere. -! 2. Changed the turbulent mixing length to be integrated from the -! surface to the top of the BL + a transition layer depth. -! v3.4.1: Option to use Kitamura/Canuto modification which removes -! the critical Richardson number and negative TKE (default). -! Hybrid PBL height diagnostic, which blends a theta-v-based -! definition in neutral/convective BL and a TKE-based definition -! in stable conditions. -! TKE budget output option -! v3.5.0: TKE advection option (bl_mynn_tkeadvect) -! v3.5.1: Fog deposition related changes. -! v3.6.0: Removed fog deposition from the calculation of tendencies -! Added mixing of qc, qi, qni -! Added output for wstar, delta, TKE_PBL, & KPBL for correct -! coupling to shcu schemes -! v3.8.0: Added subgrid scale cloud output for coupling to radiation -! schemes (activated by setting icloud_bl =1 in phys namelist). -! Added WRF_DEBUG prints (at level 3000) -! Added Tripoli and Cotton (1981) correction. -! Added namelist option bl_mynn_cloudmix to test effect of mixing -! cloud species (default = 1: on). -! Added mass-flux option (bl_mynn_edmf, = .true. for DMP mass-flux, .false.: off). -! Related options: -! bl_mynn_edmf_mom = .true. : activate momentum transport in MF scheme -! bl_mynn_edmf_tke = .true. : activate TKE transport in MF scheme -! Added mixing length option (bl_mynn_mixlength, see notes below) -! Added more sophisticated saturation checks, following Thompson scheme -! Added new cloud PDF option (bl_mynn_cloudpdf = 2) from Chaboureau -! and Bechtold (2002, JAS, with mods) -! Added capability to mix chemical species when env variable -! WRF_CHEM = 1, thanks to Wayne Angevine. -! Added scale-aware mixing length, following Junshi Ito's work -! Ito et al. (2015, BLM). -! v3.9.0 Improvement to the mass-flux scheme (dynamic number of plumes, -! better plume/cloud depth, significant speed up, better cloud -! fraction). -! Added Stochastic Parameter Perturbation (SPP) implementation. -! Many miscellaneous tweaks to the mixing lengths and stratus -! component of the subgrid clouds. -! v.4.0 Removed or added alternatives to WRF-specific functions/modules -! for the sake of portability to other models. -! the sake of portability to other models. -! Further refinement of mass-flux scheme from SCM experiments with -! Wayne Angevine: switch to linear entrainment and back to -! Simpson and Wiggert-type w-equation. -! Addition of TKE production due to radiation cooling at top of -! clouds (proto-version); not activated by default. -! Some code rewrites to move if-thens out of loops in an attempt to -! improve computational efficiency. -! New tridiagonal solver, which is supposedly 14% faster and more -! conservative. Impact seems very small. -! Many miscellaneous tweaks to the mixing lengths and stratus -! component of the subgrid-scale (SGS) clouds. -! v4.1 Big improvements in downward SW radiation due to revision of subgrid clouds -! - better cloud fraction and subgrid scale mixing ratios. -! - may experience a small cool bias during the daytime now that high -! SW-down bias is greatly reduced... -! Some tweaks to increase the turbulent mixing during the daytime for -! bl_mynn_mixlength option 2 to alleviate cool bias (very small impact). -! Improved ensemble spread from changes to SPP in MYNN -! - now perturbing eddy diffusivity and eddy viscosity directly -! - now perturbing background rh (in SGS cloud calc only) -! - now perturbing entrainment rates in mass-flux scheme -! Added IF checks (within IFDEFS) to protect mixchem code from being used -! when HRRR smoke is used (no impact on regular non-wrf chem use) -! Important bug fix for wrf chem when transporting chemical species in MF scheme -! Removed 2nd mass-flux scheme (no only bl_mynn_edmf = 1, no option 2) -! Removed unused stochastic code for mass-flux scheme -! Changed mass-flux scheme to be integrated on interface levels instead of -! mass levels - impact is small -! Added option to mix 2nd moments in MYNN as opposed to the scalar_pblmix option. -! - activated with bl_mynn_mixscalars = .true.; this sets scalar_pblmix = 0 -! - added tridagonal solver used in scalar_pblmix option to duplicate tendencies -! - this alone changes the interface call considerably from v4.0. -! Slight revision to TKE production due to radiation cooling at top of clouds -! Added the non-Guassian buoyancy flux function of Bechtold and Siebesma (1998, JAS). -! - improves TKE in SGS clouds -! Added heating due to dissipation of TKE (small impact, maybe + 0.1 C daytime PBL temp) -! Misc changes made for FV3/MPAS compatibility -! v4.2 A series of small tweaks to help reduce a cold bias in the PBL: -! - slight increase in diffusion in convective conditions -! - relaxed criteria for mass-flux activation/strength -! - added capability to cycle TKE for continuity in hourly updating HRRR -! - added effects of compensational environmental subsidence in mass-flux scheme, -! which resulted in tweaks to detrainment rates. -! Bug fix for diagnostic-decay of SGS clouds - noticed by Greg Thompson. This has -! a very small, but primarily positive, impact on SW-down biases. -! Tweak to calculation of KPBL - urged by Laura Fowler - to make more intuitive. -! Tweak to temperature range of blending for saturation check (water to ice). This -! slightly reduces excessive SGS clouds in polar region. No impact warm clouds. -! Added namelist option bl_mynn_output (.false. or .true.) to suppress or activate the -! allocation and output of 10 3D variables. Most people will want this -! set to 0 (default) to save memory and disk space. -! Added new array qi_bl as opposed to using qc_bl for both SGS qc and qi. This -! gives us more control of the magnitudes which can be confounded by using -! a single array. As a results, many subroutines needed to be modified, -! especially mym_condensation. -! Added the blending of the stratus component of the SGS clouds to the mass-flux -! clouds to account for situations where stratus and cumulus may exist in the -! grid cell. -! Misc small-impact bugfixes: -! 1) dz was incorrectly indexed in mym_condensation -! 2) configurations with icloud_bl = 0 were using uninitialized arrays -! v4.5 / CCPP -! This version includes many modifications that proved valuable in the global -! framework and removes some key lingering bugs in the mixing of chemical species. -! TKE Budget output fixed (Puhales, 2020-12) -! New option for stability function: (Puhales, 2020-12) -! bl_mynn_stfunc = 0 (original, Kansas-type function, Paulson, 1970 ) -! bl_mynn_stfunc = 1 (expanded range, same as used for Jimenez et al (MWR) -! see the Technical Note for this implementation (small impact). -! Improved conservation of momentum and higher-order moments. -! Important bug fixes for mixing of chemical species. -! Addition of pressure-gradient effects on updraft momentum transport. -! Addition of bl_mynn_closure option = 2.5, 2.6, or 3.0 -! Addition of higher-order moments for sigma when using -! bl_mynn_cloudpdf = 2 (Chab-Becht). -! Removed WRF_CHEM dependencies. -! Many miscellaneous tweaks. -! v4.6 / CCPP -! Some code optimization. Removed many conditions from loops. Redesigned the mass- -! flux scheme to use 8 plumes instead of a variable n plumes. This results in -! the removal of the output variable "nudprafts" and adds maxwidth and ztop_plume. -! Revision option bl_mynn_cloudpdf = 2, which now ensures cloud fractions for all -! optically relevant mixing ratios (tip from Greg Thompson). Also, added flexibility -! for tuning near-surface cloud fractions to remove excess fog/low ceilings. -! Now outputs all SGS cloud mixing ratios as grid-mean values, not in-cloud. This -! results in a change in the pre-radiation code to no longer multiply mixing ratios -! by cloud fractions. -! Bug fix for the momentum transport. -! Lots of code cleanup: removal of test code, comments, changing text case, etc. -! Many misc tuning/tweaks. -! -! Many of these changes are now documented in references listed above. -!==================================================================== -MODULE bl_mynn_subroutines - use mpas_kind_types,only: kind_phys => RKIND,kind_phys8 => R8KIND - use bl_mynn_common,only: & - b1 , b2 , cice , cliq , cp , & - cpv , ep_2 , ep_3 , grav , gtr , & - karman , onethird , p1000mb , p608 , r_d , & - r_v , rcp , rvovrd , svp1 , t0c , & - tice , tkmin , tv0 , twothirds , xls , & - xlscp , xlv , xlvcp , cphh_st , cphm_st , & - cphh_unst , cphm_unst - - use mynn_shared,only: esat_blend,qsat_blend,xl_blend - - implicit none - private - public:: dmp_mf, & - ddmf_jpl, & - topdown_cloudrad, & - get_pblh, & - mym_condensation, & - mym_initialize, & - mynn_mix_chem, & - mym_predict, & - mym_turbulence, & - mynn_tendencies, & - phih, & - phim, & - retrieve_exchange_coeffs, & - scale_aware - -!=================================================================== -! From here on, these are MYNN-specific parameters: -! The parameters below depend on stability functions of module_sf_mynn. - -! Closure constants - real(kind_phys), parameter :: & - &pr = 0.74, & - &g1 = 0.235, & ! NN2009 = 0.235 -! &b1 = 24.0, & -! &b2 = 15.0, & ! CKmod NN2009 - &c2 = 0.729, & ! 0.729, & !0.75, & - &c3 = 0.340, & ! 0.340, & !0.352, & - &c4 = 0.0, & - &c5 = 0.2, & - &a1 = b1*( 1.0-3.0*g1 )/6.0, & -! &c1 = g1 -1.0/( 3.0*a1*b1**(1.0/3.0) ), & - &c1 = g1 -1.0/( 3.0*a1*2.88449914061481660), & - &a2 = a1*( g1-c1 )/( g1*pr ), & - &g2 = b2/b1*( 1.0-c3 ) +2.0*a1/b1*( 3.0-2.0*c2 ) - - real(kind_phys), parameter :: & - &cc2 = 1.0-c2, & - &cc3 = 1.0-c3, & - &e1c = 3.0*a2*b2*cc3, & - &e2c = 9.0*a1*a2*cc2, & - &e3c = 9.0*a2*a2*cc2*( 1.0-c5 ), & - &e4c = 12.0*a1*a2*cc2, & - &e5c = 6.0*a1*a1 - -! Constants for min tke in elt integration (qmin), max z/L in els (zmax), -! and factor for eddy viscosity for TKE (Kq = Sqfac*Km): - real(kind_phys), parameter :: qmin=0.0, zmax=1.0, Sqfac=3.0 -! Note that the following mixing-length constants are now specified in mym_length -! &cns=3.5, alp1=0.23, alp2=0.3, alp3=3.0, alp4=10.0, alp5=0.2 - - real(kind_phys), parameter :: gpw=5./3., qcgmin=1.e-8, qkemin=1.e-12 - real(kind_phys), parameter :: tliq = 269. !all hydrometeors are liquid when T > tliq - -! Constants for cloud PDF (mym_condensation) - real(kind_phys), parameter :: rr2=0.7071068, rrp=0.3989423 - - !>Use Canuto/Kitamura mod (remove Ric and negative TKE) (1:yes, 0:no) - !!For more info, see Canuto et al. (2008 JAS) and Kitamura (Journal of the - !!Meteorological Society of Japan, Vol. 88, No. 5, pp. 857-864, 2010). - !!Note that this change required further modification of other parameters - !!above (c2, c3). If you want to remove this option, set c2 and c3 constants - !!(above) back to NN2009 values (see commented out lines next to the - !!parameters above). This only removes the negative TKE problem - !!but does not necessarily improve performance - neutral impact. - real(kind_phys), parameter :: CKmod=1. - - !Option to activate environmental subsidence in mass-flux scheme - logical, parameter :: env_subs = .false. - - !option to print out more stuff for debugging purposes - logical, parameter :: debug_code = .false. - integer, parameter :: idbg = 23 !specific i-point to write out - -CONTAINS - -!======================================================================= -! SUBROUTINE mym_initialize: -! -! Input variables: -! iniflag : <>0; turbulent quantities will be initialized -! = 0; turbulent quantities have been already -! given, i.e., they will not be initialized -! nx, nz : Dimension sizes of the -! x and z directions, respectively -! tref : Reference temperature (K) -! dz(nz) : Vertical grid spacings (m) -! # dz(nz)=dz(nz-1) -! zw(nz+1) : Heights of the walls of the grid boxes (m) -! # zw(1)=0.0 and zw(k)=zw(k-1)+dz(k-1) -! exner(nx,nz) : Exner function at zw*h+zg (J/kg K) -! defined by c_p*( p_basic/1000hPa )^kappa -! This is usually computed by integrating -! d(pi0)/dz = -h*g/tref. -! rmo(nx) : Inverse of the Obukhov length (m^(-1)) -! flt, flq(nx) : Turbulent fluxes of potential temperature and -! total water, respectively: -! flt=-u_*Theta_* (K m/s) -! flq=-u_*qw_* (kg/kg m/s) -! ust(nx) : Friction velocity (m/s) -! pmz(nx) : phi_m-zeta at z1*h+z0, where z1 (=0.5*dz(1)) -! is the first grid point above the surafce, z0 -! the roughness length and zeta=(z1*h+z0)*rmo -! phh(nx) : phi_h at z1*h+z0 -! u, v(nx,nz) : Components of the horizontal wind (m/s) -! thl(nx,nz) : Liquid water potential temperature -! (K) -! qw(nx,nz) : Total water content Q_w (kg/kg) -! -! Output variables: -! ql(nx,nz) : Liquid water content (kg/kg) -! vt, vq(nx,nz) : Functions for computing the buoyancy flux -! qke(nx,nz) : Twice the turbulent kinetic energy q^2 -! (m^2/s^2) -! tsq(nx,nz) : Variance of Theta_l (K^2) -! qsq(nx,nz) : Variance of Q_w -! cov(nx,nz) : Covariance of Theta_l and Q_w (K) -! el(nx,nz) : Master length scale L (m) -! defined on the walls of the grid boxes -! -! Work arrays: see subroutine mym_level2 -! pd?(nx,nz,ny) : Half of the production terms at Level 2 -! defined on the walls of the grid boxes -! qkw(nx,nz,ny) : q on the walls of the grid boxes (m/s) -! -! # As to dtl, ...gh, see subroutine mym_turbulence. -! -!------------------------------------------------------------------- - -!>\ingroup gsd_mynn_edmf -!! This subroutine initializes the mixing length, TKE, \f$\theta^{'2}\f$, -!! \f$q^{'2}\f$, and \f$\theta^{'}q^{'}\f$. -!!\section gen_mym_ini GSD MYNN-EDMF mym_initialize General Algorithm -!> @{ - SUBROUTINE mym_initialize ( & - & kts,kte,xland, & - & dz, dx, zw, & - & u, v, thl, qw, & -! & ust, rmo, pmz, phh, flt, flq, & - & zi, theta, thetav, sh, sm, & - & ust, rmo, el, & - & Qke, Tsq, Qsq, Cov, Psig_bl, cldfra_bl1D, & - & bl_mynn_mixlength, & - & edmf_w1,edmf_a1, & - & INITIALIZE_QKE, & - & spp_pbl,rstoch_col) -! -!------------------------------------------------------------------- - - integer, intent(in) :: kts,kte - integer, intent(in) :: bl_mynn_mixlength - logical, intent(in) :: INITIALIZE_QKE -! real(kind_phys), intent(in) :: ust, rmo, pmz, phh, flt, flq - real(kind_phys), intent(in) :: rmo, Psig_bl, xland - real(kind_phys), intent(in) :: dx, ust, zi - real(kind_phys), dimension(kts:kte), intent(in) :: dz - real(kind_phys), dimension(kts:kte+1), intent(in) :: zw - real(kind_phys), dimension(kts:kte), intent(in) :: u,v,thl,& - &qw,cldfra_bl1D,edmf_w1,edmf_a1 - real(kind_phys), dimension(kts:kte), intent(out) :: tsq,qsq,cov - real(kind_phys), dimension(kts:kte), intent(inout) :: el,qke - real(kind_phys), dimension(kts:kte) :: & - &ql,pdk,pdt,pdq,pdc,dtl,dqw,dtv, & - &gm,gh,sm,sh,qkw,vt,vq - integer :: k,l,lmax - real(kind_phys):: phm,vkz,elq,elv,b1l,b2l,pmz=1.,phh=1., & - &flt=0.,fltv=0.,flq=0.,tmpq - real(kind_phys), dimension(kts:kte) :: theta,thetav - real(kind_phys), dimension(kts:kte) :: rstoch_col - integer ::spp_pbl - -!> - At first ql, vt and vq are set to zero. - DO k = kts,kte - ql(k) = 0.0 - vt(k) = 0.0 - vq(k) = 0.0 - END DO -! -!> - Call mym_level2() to calculate the stability functions at level 2. - CALL mym_level2 ( kts,kte, & - & dz, & - & u, v, thl, thetav, qw, & - & ql, vt, vq, & - & dtl, dqw, dtv, gm, gh, sm, sh ) -! -! ** Preliminary setting ** - - el (kts) = 0.0 - IF (INITIALIZE_QKE) THEN - !qke(kts) = ust**2 * ( b1*pmz )**(2.0/3.0) - qke(kts) = 1.5 * ust**2 * ( b1*pmz )**(2.0/3.0) - DO k = kts+1,kte - !qke(k) = 0.0 - !linearly taper off towards top of pbl - qke(k)=qke(kts)*MAX((ust*700. - zw(k))/(MAX(ust,0.01)*700.), 0.01) - ENDDO - ENDIF -! - phm = phh*b2 / ( b1*pmz )**(1.0/3.0) - tsq(kts) = phm*( flt/ust )**2 - qsq(kts) = phm*( flq/ust )**2 - cov(kts) = phm*( flt/ust )*( flq/ust ) -! - DO k = kts+1,kte - vkz = karman*zw(k) - el (k) = vkz/( 1.0 + vkz/100.0 ) -! qke(k) = 0.0 -! - tsq(k) = 0.0 - qsq(k) = 0.0 - cov(k) = 0.0 - END DO -! -! ** Initialization with an iterative manner ** -! ** lmax is the iteration count. This is arbitrary. ** - lmax = 5 -! - DO l = 1,lmax -! -!> - call mym_length() to calculate the master length scale. - CALL mym_length ( & - & kts,kte,xland, & - & dz, dx, zw, & - & rmo, flt, fltv, flq, & - & vt, vq, & - & u, v, qke, & - & dtv, & - & el, & - & zi,theta, & - & qkw,Psig_bl,cldfra_bl1D, & - & bl_mynn_mixlength, & - & edmf_w1,edmf_a1 ) -! - DO k = kts+1,kte - elq = el(k)*qkw(k) - pdk(k) = elq*( sm(k)*gm(k) + & - & sh(k)*gh(k) ) - pdt(k) = elq* sh(k)*dtl(k)**2 - pdq(k) = elq* sh(k)*dqw(k)**2 - pdc(k) = elq* sh(k)*dtl(k)*dqw(k) - END DO -! -! ** Strictly, vkz*h(i,j) -> karman*( 0.5*dz(1)*h(i,j)+z0 ) ** - vkz = karman*0.5*dz(kts) - elv = 0.5*( el(kts+1)+el(kts) ) / vkz - IF (INITIALIZE_QKE)THEN - !qke(kts) = ust**2 * ( b1*pmz*elv )**(2.0/3.0) - qke(kts) = 1.0 * MAX(ust,0.02)**2 * ( b1*pmz*elv )**(2.0/3.0) - ENDIF - - phm = phh*b2 / ( b1*pmz/elv**2 )**(1.0/3.0) - tsq(kts) = phm*( flt/ust )**2 - qsq(kts) = phm*( flq/ust )**2 - cov(kts) = phm*( flt/ust )*( flq/ust ) - - DO k = kts+1,kte-1 - b1l = b1*0.25*( el(k+1)+el(k) ) - !tmpq=MAX(b1l*( pdk(k+1)+pdk(k) ),qkemin) - !add MIN to limit unreasonable QKE - tmpq=MIN(MAX(b1l*( pdk(k+1)+pdk(k) ),qkemin),125.) -! PRINT *,'tmpqqqqq',tmpq,pdk(k+1),pdk(k) - IF (INITIALIZE_QKE)THEN - qke(k) = tmpq**twothirds - ENDIF - - IF ( qke(k) .LE. 0.0 ) THEN - b2l = 0.0 - ELSE - b2l = b2*( b1l/b1 ) / SQRT( qke(k) ) - END IF - - tsq(k) = b2l*( pdt(k+1)+pdt(k) ) - qsq(k) = b2l*( pdq(k+1)+pdq(k) ) - cov(k) = b2l*( pdc(k+1)+pdc(k) ) - END DO - - END DO - -!! qke(kts)=qke(kts+1) -!! tsq(kts)=tsq(kts+1) -!! qsq(kts)=qsq(kts+1) -!! cov(kts)=cov(kts+1) - - IF (INITIALIZE_QKE)THEN - qke(kts)=0.5*(qke(kts)+qke(kts+1)) - qke(kte)=qke(kte-1) - ENDIF - tsq(kte)=tsq(kte-1) - qsq(kte)=qsq(kte-1) - cov(kte)=cov(kte-1) - -! -! RETURN - - END SUBROUTINE mym_initialize -!> @} - -! -! ================================================================== -! SUBROUTINE mym_level2: -! -! Input variables: see subroutine mym_initialize -! -! Output variables: -! dtl(nx,nz,ny) : Vertical gradient of Theta_l (K/m) -! dqw(nx,nz,ny) : Vertical gradient of Q_w -! dtv(nx,nz,ny) : Vertical gradient of Theta_V (K/m) -! gm (nx,nz,ny) : G_M divided by L^2/q^2 (s^(-2)) -! gh (nx,nz,ny) : G_H divided by L^2/q^2 (s^(-2)) -! sm (nx,nz,ny) : Stability function for momentum, at Level 2 -! sh (nx,nz,ny) : Stability function for heat, at Level 2 -! -! These are defined on the walls of the grid boxes. -! - -!>\ingroup gsd_mynn_edmf -!! This subroutine calculates the level 2, non-dimensional wind shear -!! \f$G_M\f$ and vertical temperature gradient \f$G_H\f$ as well as -!! the level 2 stability funcitons \f$S_h\f$ and \f$S_m\f$. -!!\param kts horizontal dimension -!!\param kte vertical dimension -!!\param dz vertical grid spacings (\f$m\f$) -!!\param u west-east component of the horizontal wind (\f$m s^{-1}\f$) -!!\param v south-north component of the horizontal wind (\f$m s^{-1}\f$) -!!\param thl liquid water potential temperature -!!\param qw total water content \f$Q_w\f$ -!!\param ql liquid water content (\f$kg kg^{-1}\f$) -!!\param vt -!!\param vq -!!\param dtl vertical gradient of \f$\theta_l\f$ (\f$K m^{-1}\f$) -!!\param dqw vertical gradient of \f$Q_w\f$ -!!\param dtv vertical gradient of \f$\theta_V\f$ (\f$K m^{-1}\f$) -!!\param gm \f$G_M\f$ divided by \f$L^{2}/q^{2}\f$ (\f$s^{-2}\f$) -!!\param gh \f$G_H\f$ divided by \f$L^{2}/q^{2}\f$ (\f$s^{-2}\f$) -!!\param sm stability function for momentum, at Level 2 -!!\param sh stability function for heat, at Level 2 -!!\section gen_mym_level2 GSD MYNN-EDMF mym_level2 General Algorithm -!! @ { - SUBROUTINE mym_level2 (kts,kte, & - & dz, & - & u, v, thl, thetav, qw, & - & ql, vt, vq, & - & dtl, dqw, dtv, gm, gh, sm, sh ) -! -!------------------------------------------------------------------- - - integer, intent(in) :: kts,kte - -#ifdef HARDCODE_VERTICAL -# define kts 1 -# define kte HARDCODE_VERTICAL -#endif - - real(kind_phys), dimension(kts:kte), intent(in) :: dz - real(kind_phys), dimension(kts:kte), intent(in) :: u,v, & - &thl,qw,ql,vt,vq,thetav - real(kind_phys), dimension(kts:kte), intent(out) :: & - &dtl,dqw,dtv,gm,gh,sm,sh - - integer :: k - - real(kind_phys):: rfc,f1,f2,rf1,rf2,smc,shc, & - &ri1,ri2,ri3,ri4,duz,dtz,dqz,vtt,vqq,dtq,dzk, & - &afk,abk,ri,rf - - real(kind_phys):: a2fac - -! ev = 2.5e6 -! tv0 = 0.61*tref -! tv1 = 1.61*tref -! gtr = 9.81/tref -! - rfc = g1/( g1+g2 ) - f1 = b1*( g1-c1 ) +3.0*a2*( 1.0 -c2 )*( 1.0-c5 ) & - & +2.0*a1*( 3.0-2.0*c2 ) - f2 = b1*( g1+g2 ) -3.0*a1*( 1.0 -c2 ) - rf1 = b1*( g1-c1 )/f1 - rf2 = b1* g1 /f2 - smc = a1 /a2* f1/f2 - shc = 3.0*a2*( g1+g2 ) -! - ri1 = 0.5/smc - ri2 = rf1*smc - ri3 = 4.0*rf2*smc -2.0*ri2 - ri4 = ri2**2 -! - DO k = kts+1,kte - dzk = 0.5 *( dz(k)+dz(k-1) ) - afk = dz(k)/( dz(k)+dz(k-1) ) - abk = 1.0 -afk - duz = ( u(k)-u(k-1) )**2 +( v(k)-v(k-1) )**2 - duz = duz /dzk**2 - dtz = ( thl(k)-thl(k-1) )/( dzk ) - dqz = ( qw(k)-qw(k-1) )/( dzk ) -! - vtt = 1.0 +vt(k)*abk +vt(k-1)*afk ! Beta-theta in NN09, Eq. 39 - vqq = tv0 +vq(k)*abk +vq(k-1)*afk ! Beta-q - dtq = vtt*dtz +vqq*dqz - !Alternatively, use theta-v without the SGS clouds - !dtq = ( thetav(k)-thetav(k-1) )/( dzk ) -! - dtl(k) = dtz - dqw(k) = dqz - dtv(k) = dtq -!? dtv(i,j,k) = dtz +tv0*dqz -!? : +( xlv/pi0(i,j,k)-tv1 ) -!? : *( ql(i,j,k)-ql(i,j,k-1) )/( dzk*h(i,j) ) -! - gm (k) = duz - gh (k) = -dtq*gtr -! -! ** Gradient Richardson number ** - ri = -gh(k)/MAX( duz, 1.0e-10 ) - - !a2fac is needed for the Canuto/Kitamura mod - IF (CKmod .eq. 1) THEN - a2fac = 1./(1. + MAX(ri,0.0)) - ELSE - a2fac = 1. - ENDIF - - rfc = g1/( g1+g2 ) - f1 = b1*( g1-c1 ) +3.0*a2*a2fac *( 1.0 -c2 )*( 1.0-c5 ) & - & +2.0*a1*( 3.0-2.0*c2 ) - f2 = b1*( g1+g2 ) -3.0*a1*( 1.0 -c2 ) - rf1 = b1*( g1-c1 )/f1 - rf2 = b1* g1 /f2 - smc = a1 /(a2*a2fac)* f1/f2 - shc = 3.0*(a2*a2fac)*( g1+g2 ) - - ri1 = 0.5/smc - ri2 = rf1*smc - ri3 = 4.0*rf2*smc -2.0*ri2 - ri4 = ri2**2 - -! ** Flux Richardson number ** - rf = MIN( ri1*( ri + ri2-SQRT(ri**2 - ri3*ri + ri4) ), rfc ) -! - sh (k) = shc*( rfc-rf )/( 1.0-rf ) - sm (k) = smc*( rf1-rf )/( rf2-rf ) * sh(k) - END DO -! -! RETURN - -#ifdef HARDCODE_VERTICAL -# undef kts -# undef kte -#endif - - END SUBROUTINE mym_level2 -!! @} - -! ================================================================== -! SUBROUTINE mym_length: -! -! Input variables: see subroutine mym_initialize -! -! Output variables: see subroutine mym_initialize -! -! Work arrays: -! elt(nx,ny) : Length scale depending on the PBL depth (m) -! vsc(nx,ny) : Velocity scale q_c (m/s) -! at first, used for computing elt -! -! NOTE: the mixing lengths are meant to be calculated at the full- -! sigmal levels (or interfaces beween the model layers). -! -!>\ingroup gsd_mynn_edmf -!! This subroutine calculates the mixing lengths. - SUBROUTINE mym_length ( & - & kts,kte,xland, & - & dz, dx, zw, & - & rmo, flt, fltv, flq, & - & vt, vq, & - & u1, v1, qke, & - & dtv, & - & el, & - & zi, theta, qkw, & - & Psig_bl, cldfra_bl1D, & - & bl_mynn_mixlength, & - & edmf_w1,edmf_a1 ) - -!------------------------------------------------------------------- - - integer, intent(in) :: kts,kte - -#ifdef HARDCODE_VERTICAL -# define kts 1 -# define kte HARDCODE_VERTICAL -#endif - - integer, intent(in) :: bl_mynn_mixlength - real(kind_phys), dimension(kts:kte), intent(in) :: dz - real(kind_phys), dimension(kts:kte+1), intent(in) :: zw - real(kind_phys), intent(in) :: rmo,flt,fltv,flq,Psig_bl,xland - real(kind_phys), intent(in) :: dx,zi - real(kind_phys), dimension(kts:kte), intent(in) :: u1,v1, & - &qke,vt,vq,cldfra_bl1D,edmf_w1,edmf_a1 - real(kind_phys), dimension(kts:kte), intent(out) :: qkw, el - real(kind_phys), dimension(kts:kte), intent(in) :: dtv - real(kind_phys):: elt,vsc - real(kind_phys), dimension(kts:kte), intent(in) :: theta - real(kind_phys), dimension(kts:kte) :: qtke,elBLmin,elBLavg,thetaw - real(kind_phys):: wt,wt2,zi2,h1,h2,hs,elBLmin0,elBLavg0,cldavg - - ! THE FOLLOWING CONSTANTS ARE IMPORTANT FOR REGULATING THE - ! MIXING LENGTHS: - real(kind_phys):: cns, & !< for surface layer (els) in stable conditions - alp1, & !< for turbulent length scale (elt) - alp2, & !< for buoyancy length scale (elb) - alp3, & !< for buoyancy enhancement factor of elb - alp4, & !< for surface layer (els) in unstable conditions - alp5, & !< for BouLac mixing length or above PBLH - alp6 !< for mass-flux/ - - !THE FOLLOWING LIMITS DO NOT DIRECTLY AFFECT THE ACTUAL PBLH. - !THEY ONLY IMPOSE LIMITS ON THE CALCULATION OF THE MIXING LENGTH - !SCALES SO THAT THE BOULAC MIXING LENGTH (IN FREE ATMOS) DOES - !NOT ENCROACH UPON THE BOUNDARY LAYER MIXING LENGTH (els, elb & elt). - real(kind_phys), parameter :: minzi = 300. !< min mixed-layer height - real(kind_phys), parameter :: maxdz = 750. !< max (half) transition layer depth - !! =0.3*2500 m PBLH, so the transition - !! layer stops growing for PBLHs > 2.5 km. - real(kind_phys), parameter :: mindz = 300. !< 300 !min (half) transition layer depth - - !SURFACE LAYER LENGTH SCALE MODS TO REDUCE IMPACT IN UPPER BOUNDARY LAYER - real(kind_phys), parameter :: ZSLH = 100. !< Max height correlated to surface conditions (m) - real(kind_phys), parameter :: CSL = 2. !< CSL = constant of proportionality to L O(1) - - - integer :: i,j,k - real(kind_phys):: afk,abk,zwk,zwk1,dzk,qdz,vflx,bv,tau_cloud, & - & wstar,elb,els,elf,el_stab,el_mf,el_stab_mf,elb_mf, & - & PBLH_PLUS_ENT,Uonset,Ugrid,wt_u,el_les - real(kind_phys), parameter :: ctau = 1000. !constant for tau_cloud - -! tv0 = 0.61*tref -! gtr = 9.81/tref - - SELECT CASE(bl_mynn_mixlength) - - CASE (0) ! ORIGINAL MYNN MIXING LENGTH + BouLac - - cns = 2.7 - alp1 = 0.23 - alp2 = 1.0 - alp3 = 5.0 - alp4 = 100. - alp5 = 0.3 - - ! Impose limits on the height integration for elt and the transition layer depth - zi2 = MIN(10000.,zw(kte-2)) !originally integrated to model top, not just 10 km. - h1=MAX(0.3*zi2,mindz) - h1=MIN(h1,maxdz) ! 1/2 transition layer depth - h2=h1/2.0 ! 1/4 transition layer depth - - qkw(kts) = SQRT(MAX(qke(kts),1.0e-10)) - DO k = kts+1,kte - afk = dz(k)/( dz(k)+dz(k-1) ) - abk = 1.0 -afk - qkw(k) = SQRT(MAX(qke(k)*abk+qke(k-1)*afk,1.0e-3)) - END DO - - elt = 1.0e-5 - vsc = 1.0e-5 - - ! ** Strictly, zwk*h(i,j) -> ( zwk*h(i,j)+z0 ) ** - k = kts+1 - zwk = zw(k) - DO WHILE (zwk .LE. zi2+h1) - dzk = 0.5*( dz(k)+dz(k-1) ) - qdz = MAX( qkw(k)-qmin, 0.03 )*dzk - elt = elt +qdz*zwk - vsc = vsc +qdz - k = k+1 - zwk = zw(k) - END DO - - elt = alp1*elt/vsc - vflx = ( vt(kts)+1.0 )*flt +( vq(kts)+tv0 )*flq - vsc = ( gtr*elt*MAX( vflx, 0.0 ) )**(1.0/3.0) - - ! ** Strictly, el(i,k=1) is not zero. ** - el(kts) = 0.0 - zwk1 = zw(kts+1) - - DO k = kts+1,kte - zwk = zw(k) !full-sigma levels - - ! ** Length scale limited by the buoyancy effect ** - IF ( dtv(k) .GT. 0.0 ) THEN - bv = SQRT( gtr*dtv(k) ) - elb = alp2*qkw(k) / bv & - & *( 1.0 + alp3/alp2*& - &SQRT( vsc/( bv*elt ) ) ) - elf = alp2 * qkw(k)/bv - - ELSE - elb = 1.0e10 - elf = elb - ENDIF - - ! ** Length scale in the surface layer ** - IF ( rmo .GT. 0.0 ) THEN - els = karman*zwk/(1.0+cns*MIN( zwk*rmo, zmax )) - ELSE - els = karman*zwk*( 1.0 - alp4* zwk*rmo )**0.2 - END IF - - ! ** HARMONC AVERGING OF MIXING LENGTH SCALES: - ! el(k) = MIN(elb/( elb/elt+elb/els+1.0 ),elf) - ! el(k) = elb/( elb/elt+elb/els+1.0 ) - - wt=.5*TANH((zwk - (zi2+h1))/h2) + .5 - - el(k) = MIN(elb/( elb/elt+elb/els+1.0 ),elf) - - END DO - - CASE (1) !NONLOCAL (using BouLac) FORM OF MIXING LENGTH - - ugrid = sqrt(u1(kts)**2 + v1(kts)**2) - uonset= 15. - wt_u = (1.0 - min(max(ugrid - uonset, 0.0)/30.0, 0.5)) - cns = 2.7 !was 3.5 - alp1 = 0.23 - alp2 = 0.3 - alp3 = 2.5 * wt_u !taper off bouyancy enhancement in shear-driven pbls - alp4 = 5.0 - alp5 = 0.3 - alp6 = 50. - - ! Impose limits on the height integration for elt and the transition layer depth - zi2=MAX(zi,300.) !minzi) - h1=MAX(0.3*zi2,300.) - h1=MIN(h1,600.) ! 1/2 transition layer depth - h2=h1/2.0 ! 1/4 transition layer depth - - qtke(kts)=MAX(0.5*qke(kts), 0.01) !tke at full sigma levels - thetaw(kts)=theta(kts) !theta at full-sigma levels - qkw(kts) = SQRT(MAX(qke(kts),1.0e-10)) - - DO k = kts+1,kte - afk = dz(k)/( dz(k)+dz(k-1) ) - abk = 1.0 -afk - qkw(k) = SQRT(MAX(qke(k)*abk+qke(k-1)*afk,1.0e-3)) - qtke(k) = 0.5*(qkw(k)**2) ! q -> TKE - thetaw(k)= theta(k)*abk + theta(k-1)*afk - END DO - - elt = 1.0e-5 - vsc = 1.0e-5 - - ! ** Strictly, zwk*h(i,j) -> ( zwk*h(i,j)+z0 ) ** - k = kts+1 - zwk = zw(k) - DO WHILE (zwk .LE. zi2+h1) - dzk = 0.5*( dz(k)+dz(k-1) ) - qdz = min(max( qkw(k)-qmin, 0.03 ), 30.0)*dzk - elt = elt +qdz*zwk - vsc = vsc +qdz - k = k+1 - zwk = zw(k) - END DO - - elt = MIN( MAX( alp1*elt/vsc, 10.), 400.) - !avoid use of buoyancy flux functions which are ill-defined at the surface - !vflx = ( vt(kts)+1.0 )*flt + ( vq(kts)+tv0 )*flq - vflx = fltv - vsc = ( gtr*elt*MAX( vflx, 0.0 ) )**onethird - - ! ** Strictly, el(i,j,1) is not zero. ** - el(kts) = 0.0 - zwk1 = zw(kts+1) !full-sigma levels - - ! COMPUTE BouLac mixing length - CALL boulac_length(kts,kte,zw,dz,qtke,thetaw,elBLmin,elBLavg) - - DO k = kts+1,kte - zwk = zw(k) !full-sigma levels - - ! ** Length scale limited by the buoyancy effect ** - IF ( dtv(k) .GT. 0.0 ) THEN - bv = max( sqrt( gtr*dtv(k) ), 0.0001) - elb = MAX(alp2*qkw(k), & - & alp6*edmf_a1(k-1)*edmf_w1(k-1)) / bv & - & *( 1.0 + alp3*SQRT( vsc/(bv*elt) ) ) - elb = MIN(elb, zwk) - elf = 1.0 * qkw(k)/bv - elBLavg(k) = MAX(elBLavg(k), alp6*edmf_a1(k-1)*edmf_w1(k-1)/bv) - ELSE - elb = 1.0e10 - elf = elb - ENDIF - - ! ** Length scale in the surface layer ** - IF ( rmo .GT. 0.0 ) THEN - els = karman*zwk/(1.0+cns*MIN( zwk*rmo, zmax )) - ELSE - els = karman*zwk*( 1.0 - alp4* zwk*rmo )**0.2 - END IF - - ! ** NOW BLEND THE MIXING LENGTH SCALES: - wt=.5*TANH((zwk - (zi2+h1))/h2) + .5 - - !add blending to use BouLac mixing length in free atmos; - !defined relative to the PBLH (zi) + transition layer (h1) - !el(k) = MIN(elb/( elb/elt+elb/els+1.0 ),elf) - !try squared-blending - but take out elb (makes it underdiffusive) - !el(k) = SQRT( els**2/(1. + (els**2/elt**2) +(els**2/elb**2))) - el(k) = sqrt( els**2/(1. + (els**2/elt**2))) - el(k) = min(el(k), elb) - el(k) = MIN (el(k), elf) - el(k) = el(k)*(1.-wt) + alp5*elBLavg(k)*wt - - ! include scale-awareness, except for original MYNN - el(k) = el(k)*Psig_bl - - END DO - - CASE (2) !Local (mostly) mixing length formulation - - Uonset = 3.5 + dz(kts)*0.1 - Ugrid = sqrt(u1(kts)**2 + v1(kts)**2) - cns = 3.5 !JOE-test * (1.0 - MIN(MAX(Ugrid - Uonset, 0.0)/10.0, 1.0)) - alp1 = 0.22 - alp2 = 0.30 - alp3 = 2.0 - alp4 = 5.0 - alp5 = alp2 !like alp2, but for free atmosphere - alp6 = 50.0 !used for MF mixing length - - ! Impose limits on the height integration for elt and the transition layer depth - !zi2=MAX(zi,minzi) - zi2=MAX(zi, 300.) - !h1=MAX(0.3*zi2,mindz) - !h1=MIN(h1,maxdz) ! 1/2 transition layer depth - h1=MAX(0.3*zi2,300.) - h1=MIN(h1,600.) - h2=h1*0.5 ! 1/4 transition layer depth - - qtke(kts)=MAX(0.5*qke(kts),0.01) !tke at full sigma levels - qkw(kts) = SQRT(MAX(qke(kts),1.0e-4)) - - DO k = kts+1,kte - afk = dz(k)/( dz(k)+dz(k-1) ) - abk = 1.0 -afk - qkw(k) = SQRT(MAX(qke(k)*abk+qke(k-1)*afk,1.0e-3)) - qtke(k) = 0.5*qkw(k)**2 ! qkw -> TKE - END DO - - elt = 1.0e-5 - vsc = 1.0e-5 - - ! ** Strictly, zwk*h(i,j) -> ( zwk*h(i,j)+z0 ) ** - PBLH_PLUS_ENT = MAX(zi+h1, 100.) - k = kts+1 - zwk = zw(k) - DO WHILE (zwk .LE. PBLH_PLUS_ENT) - dzk = 0.5*( dz(k)+dz(k-1) ) - qdz = min(max( qkw(k)-qmin, 0.03 ), 30.0)*dzk - elt = elt +qdz*zwk - vsc = vsc +qdz - k = k+1 - zwk = zw(k) - END DO - - elt = MIN( MAX(alp1*elt/vsc, 10.), 400.) - !avoid use of buoyancy flux functions which are ill-defined at the surface - !vflx = ( vt(kts)+1.0 )*flt +( vq(kts)+tv0 )*flq - vflx = fltv - vsc = ( gtr*elt*MAX( vflx, 0.0 ) )**onethird - - ! ** Strictly, el(i,j,1) is not zero. ** - el(kts) = 0.0 - zwk1 = zw(kts+1) - - DO k = kts+1,kte - zwk = zw(k) !full-sigma levels - dzk = 0.5*( dz(k)+dz(k-1) ) - cldavg = 0.5*(cldfra_bl1D(k-1)+cldfra_bl1D(k)) - - ! ** Length scale limited by the buoyancy effect ** - IF ( dtv(k) .GT. 0.0 ) THEN - !impose min value on bv - bv = MAX( SQRT( gtr*dtv(k) ), 0.001) - !elb_mf = alp2*qkw(k) / bv & - elb_mf = MAX(alp2*qkw(k), & - & alp6*edmf_a1(k-1)*edmf_w1(k-1)) / bv & - & *( 1.0 + alp3*SQRT( vsc/( bv*elt ) ) ) - elb = MIN(MAX(alp5*qkw(k), alp6*edmf_a1(k)*edmf_w1(k))/bv, zwk) - - !tau_cloud = MIN(MAX(0.5*zi/((gtr*zi*MAX(vflx,1.0e-4))**onethird),30.),150.) - wstar = 1.25*(gtr*zi*MAX(vflx,1.0e-4))**onethird - tau_cloud = MIN(MAX(ctau * wstar/grav, 30.), 150.) - !minimize influence of surface heat flux on tau far away from the PBLH. - wt=.5*TANH((zwk - (zi2+h1))/h2) + .5 - tau_cloud = tau_cloud*(1.-wt) + 50.*wt - elf = MIN(MAX(tau_cloud*SQRT(MIN(qtke(k),40.)), & - & alp6*edmf_a1(k)*edmf_w1(k)/bv), zwk) - - !IF (zwk > zi .AND. elf > 400.) THEN - ! ! COMPUTE BouLac mixing length - ! !CALL boulac_length0(k,kts,kte,zw,dz,qtke,thetaw,elBLmin0,elBLavg0) - ! !elf = alp5*elBLavg0 - ! elf = MIN(MAX(50.*SQRT(qtke(k)), 400.), zwk) - !ENDIF - - ELSE - ! use version in development for RAP/HRRR 2016 - ! JAYMES- - ! tau_cloud is an eddy turnover timescale; - ! see Teixeira and Cheinet (2004), Eq. 1, and - ! Cheinet and Teixeira (2003), Eq. 7. The - ! coefficient 0.5 is tuneable. Expression in - ! denominator is identical to vsc (a convective - ! velocity scale), except that elt is relpaced - ! by zi, and zero is replaced by 1.0e-4 to - ! prevent division by zero. - !tau_cloud = MIN(MAX(0.5*zi/((gtr*zi*MAX(vflx,1.0e-4))**onethird),50.),150.) - wstar = 1.25*(gtr*zi*MAX(vflx,1.0e-4))**onethird - tau_cloud = MIN(MAX(ctau * wstar/grav, 50.), 200.) - !minimize influence of surface heat flux on tau far away from the PBLH. - wt=.5*TANH((zwk - (zi2+h1))/h2) + .5 - !tau_cloud = tau_cloud*(1.-wt) + 50.*wt - tau_cloud = tau_cloud*(1.-wt) + MAX(100.,dzk*0.25)*wt - - elb = MIN(tau_cloud*SQRT(MIN(qtke(k),40.)), zwk) - !elf = elb - elf = elb !/(1. + (elb/800.)) !bound free-atmos mixing length to < 800 m. - elb_mf = elb - END IF - elf = elf/(1. + (elf/800.)) !bound free-atmos mixing length to < 800 m. - elb_mf = MAX(elb_mf, 0.01) !to avoid divide-by-zero below - - ! ** Length scale in the surface layer ** - IF ( rmo .GT. 0.0 ) THEN - els = karman*zwk/(1.0+cns*MIN( zwk*rmo, zmax )) - ELSE - els = karman*zwk*( 1.0 - alp4* zwk*rmo )**0.2 - END IF - - ! ** NOW BLEND THE MIXING LENGTH SCALES: - wt=.5*TANH((zwk - (zi2+h1))/h2) + .5 - - !try squared-blending - el(k) = SQRT( els**2/(1. + (els**2/elt**2) +(els**2/elb_mf**2))) - el(k) = el(k)*(1.-wt) + elf*wt - - ! include scale-awareness. For now, use simple asymptotic kz -> 12 m (should be ~dz). - el_les= MIN(els/(1. + (els/12.)), elb_mf) - el(k) = el(k)*Psig_bl + (1.-Psig_bl)*el_les - - END DO - - END SELECT - - -#ifdef HARDCODE_VERTICAL -# undef kts -# undef kte -#endif - - END SUBROUTINE mym_length - -! ================================================================== -!>\ingroup gsd_mynn_edmf -!! This subroutine was taken from the BouLac scheme in WRF-ARW and modified for -!! integration into the MYNN PBL scheme. WHILE loops were added to reduce the -!! computational expense. This subroutine computes the length scales up and down -!! and then computes the min, average of the up/down length scales, and also -!! considers the distance to the surface. -!\param dlu the distance a parcel can be lifted upwards give a finite -! amount of TKE. -!\param dld the distance a parcel can be displaced downwards given a -! finite amount of TKE. -!\param lb1 the minimum of the length up and length down -!\param lb2 the average of the length up and length down - SUBROUTINE boulac_length0(k,kts,kte,zw,dz,qtke,theta,lb1,lb2) -! -! NOTE: This subroutine was taken from the BouLac scheme in WRF-ARW -! and modified for integration into the MYNN PBL scheme. -! WHILE loops were added to reduce the computational expense. -! This subroutine computes the length scales up and down -! and then computes the min, average of the up/down -! length scales, and also considers the distance to the -! surface. -! -! dlu = the distance a parcel can be lifted upwards give a finite -! amount of TKE. -! dld = the distance a parcel can be displaced downwards given a -! finite amount of TKE. -! lb1 = the minimum of the length up and length down -! lb2 = the average of the length up and length down -!------------------------------------------------------------------- - - integer, intent(in) :: k,kts,kte - real(kind_phys), dimension(kts:kte), intent(in) :: qtke,dz,theta - real(kind_phys), intent(out) :: lb1,lb2 - real(kind_phys), dimension(kts:kte+1), intent(in) :: zw - - !LOCAL VARS - integer :: izz, found - real(kind_phys):: dlu,dld - real(kind_phys):: dzt, zup, beta, zup_inf, bbb, tl, zdo, zdo_sup, zzz - - - !---------------------------------- - ! FIND DISTANCE UPWARD - !---------------------------------- - zup=0. - dlu=zw(kte+1)-zw(k)-dz(k)*0.5 - zzz=0. - zup_inf=0. - beta=gtr !Buoyancy coefficient (g/tref) - - !print*,"FINDING Dup, k=",k," zw=",zw(k) - - if (k .lt. kte) then !cant integrate upwards from highest level - found = 0 - izz=k - DO WHILE (found .EQ. 0) - - if (izz .lt. kte) then - dzt=dz(izz) ! layer depth above - zup=zup-beta*theta(k)*dzt ! initial PE the parcel has at k - !print*," ",k,izz,theta(izz),dz(izz) - zup=zup+beta*(theta(izz+1)+theta(izz))*dzt*0.5 ! PE gained by lifting a parcel to izz+1 - zzz=zzz+dzt ! depth of layer k to izz+1 - !print*," PE=",zup," TKE=",qtke(k)," z=",zw(izz) - if (qtke(k).lt.zup .and. qtke(k).ge.zup_inf) then - bbb=(theta(izz+1)-theta(izz))/dzt - if (bbb .ne. 0.) then - !fractional distance up into the layer where TKE becomes < PE - tl=(-beta*(theta(izz)-theta(k)) + & - & sqrt( max(0.,(beta*(theta(izz)-theta(k)))**2 + & - & 2.*bbb*beta*(qtke(k)-zup_inf))))/bbb/beta - else - if (theta(izz) .ne. theta(k))then - tl=(qtke(k)-zup_inf)/(beta*(theta(izz)-theta(k))) - else - tl=0. - endif - endif - dlu=zzz-dzt+tl - !print*," FOUND Dup:",dlu," z=",zw(izz)," tl=",tl - found =1 - endif - zup_inf=zup - izz=izz+1 - ELSE - found = 1 - ENDIF - - ENDDO - - endif - - !---------------------------------- - ! FIND DISTANCE DOWN - !---------------------------------- - zdo=0. - zdo_sup=0. - dld=zw(k) - zzz=0. - - !print*,"FINDING Ddown, k=",k," zwk=",zw(k) - if (k .gt. kts) then !cant integrate downwards from lowest level - - found = 0 - izz=k - DO WHILE (found .EQ. 0) - - if (izz .gt. kts) then - dzt=dz(izz-1) - zdo=zdo+beta*theta(k)*dzt - !print*," ",k,izz,theta(izz),dz(izz-1) - zdo=zdo-beta*(theta(izz-1)+theta(izz))*dzt*0.5 - zzz=zzz+dzt - !print*," PE=",zdo," TKE=",qtke(k)," z=",zw(izz) - if (qtke(k).lt.zdo .and. qtke(k).ge.zdo_sup) then - bbb=(theta(izz)-theta(izz-1))/dzt - if (bbb .ne. 0.) then - tl=(beta*(theta(izz)-theta(k))+ & - & sqrt( max(0.,(beta*(theta(izz)-theta(k)))**2 + & - & 2.*bbb*beta*(qtke(k)-zdo_sup))))/bbb/beta - else - if (theta(izz) .ne. theta(k)) then - tl=(qtke(k)-zdo_sup)/(beta*(theta(izz)-theta(k))) - else - tl=0. - endif - endif - dld=zzz-dzt+tl - !print*," FOUND Ddown:",dld," z=",zw(izz)," tl=",tl - found = 1 - endif - zdo_sup=zdo - izz=izz-1 - ELSE - found = 1 - ENDIF - ENDDO - - endif - - !---------------------------------- - ! GET MINIMUM (OR AVERAGE) - !---------------------------------- - !The surface layer length scale can exceed z for large z/L, - !so keep maximum distance down > z. - dld = min(dld,zw(k+1))!not used in PBL anyway, only free atmos - lb1 = min(dlu,dld) !minimum - !JOE-fight floating point errors - dlu=MAX(0.1,MIN(dlu,1000.)) - dld=MAX(0.1,MIN(dld,1000.)) - lb2 = sqrt(dlu*dld) !average - biased towards smallest - !lb2 = 0.5*(dlu+dld) !average - - if (k .eq. kte) then - lb1 = 0. - lb2 = 0. - endif - !print*,"IN MYNN-BouLac",k,lb1 - !print*,"IN MYNN-BouLac",k,dld,dlu - - END SUBROUTINE boulac_length0 - -! ================================================================== -!>\ingroup gsd_mynn_edmf -!! This subroutine was taken from the BouLac scheme in WRF-ARW -!! and modified for integration into the MYNN PBL scheme. -!! WHILE loops were added to reduce the computational expense. -!! This subroutine computes the length scales up and down -!! and then computes the min, average of the up/down -!! length scales, and also considers the distance to the -!! surface. - SUBROUTINE boulac_length(kts,kte,zw,dz,qtke,theta,lb1,lb2) -! dlu = the distance a parcel can be lifted upwards give a finite -! amount of TKE. -! dld = the distance a parcel can be displaced downwards given a -! finite amount of TKE. -! lb1 = the minimum of the length up and length down -! lb2 = the average of the length up and length down -!------------------------------------------------------------------- - - integer, intent(in) :: kts,kte - real(kind_phys), dimension(kts:kte), intent(in) :: qtke,dz,theta - real(kind_phys), dimension(kts:kte), intent(out):: lb1,lb2 - real(kind_phys), dimension(kts:kte+1), intent(in) :: zw - - !LOCAL VARS - integer :: iz, izz, found - real(kind_phys), dimension(kts:kte) :: dlu,dld - real(kind_phys), parameter :: Lmax=2000. !soft limit - real(kind_phys):: dzt, zup, beta, zup_inf, bbb, tl, zdo, zdo_sup, zzz - - !print*,"IN MYNN-BouLac",kts, kte - - do iz=kts,kte - - !---------------------------------- - ! FIND DISTANCE UPWARD - !---------------------------------- - zup=0. - dlu(iz)=zw(kte+1)-zw(iz)-dz(iz)*0.5 - zzz=0. - zup_inf=0. - beta=gtr !Buoyancy coefficient (g/tref) - - !print*,"FINDING Dup, k=",iz," zw=",zw(iz) - - if (iz .lt. kte) then !cant integrate upwards from highest level - - found = 0 - izz=iz - DO WHILE (found .EQ. 0) - - if (izz .lt. kte) then - dzt=dz(izz) ! layer depth above - zup=zup-beta*theta(iz)*dzt ! initial PE the parcel has at iz - !print*," ",iz,izz,theta(izz),dz(izz) - zup=zup+beta*(theta(izz+1)+theta(izz))*dzt*0.5 ! PE gained by lifting a parcel to izz+1 - zzz=zzz+dzt ! depth of layer iz to izz+1 - !print*," PE=",zup," TKE=",qtke(iz)," z=",zw(izz) - if (qtke(iz).lt.zup .and. qtke(iz).ge.zup_inf) then - bbb=(theta(izz+1)-theta(izz))/dzt - if (bbb .ne. 0.) then - !fractional distance up into the layer where TKE becomes < PE - tl=(-beta*(theta(izz)-theta(iz)) + & - & sqrt( max(0.,(beta*(theta(izz)-theta(iz)))**2 + & - & 2.*bbb*beta*(qtke(iz)-zup_inf))))/bbb/beta - else - if (theta(izz) .ne. theta(iz))then - tl=(qtke(iz)-zup_inf)/(beta*(theta(izz)-theta(iz))) - else - tl=0. - endif - endif - dlu(iz)=zzz-dzt+tl - !print*," FOUND Dup:",dlu(iz)," z=",zw(izz)," tl=",tl - found =1 - endif - zup_inf=zup - izz=izz+1 - ELSE - found = 1 - ENDIF - - ENDDO - - endif - - !---------------------------------- - ! FIND DISTANCE DOWN - !---------------------------------- - zdo=0. - zdo_sup=0. - dld(iz)=zw(iz) - zzz=0. - - !print*,"FINDING Ddown, k=",iz," zwk=",zw(iz) - if (iz .gt. kts) then !cant integrate downwards from lowest level - - found = 0 - izz=iz - DO WHILE (found .EQ. 0) - - if (izz .gt. kts) then - dzt=dz(izz-1) - zdo=zdo+beta*theta(iz)*dzt - !print*," ",iz,izz,theta(izz),dz(izz-1) - zdo=zdo-beta*(theta(izz-1)+theta(izz))*dzt*0.5 - zzz=zzz+dzt - !print*," PE=",zdo," TKE=",qtke(iz)," z=",zw(izz) - if (qtke(iz).lt.zdo .and. qtke(iz).ge.zdo_sup) then - bbb=(theta(izz)-theta(izz-1))/dzt - if (bbb .ne. 0.) then - tl=(beta*(theta(izz)-theta(iz))+ & - & sqrt( max(0.,(beta*(theta(izz)-theta(iz)))**2 + & - & 2.*bbb*beta*(qtke(iz)-zdo_sup))))/bbb/beta - else - if (theta(izz) .ne. theta(iz)) then - tl=(qtke(iz)-zdo_sup)/(beta*(theta(izz)-theta(iz))) - else - tl=0. - endif - endif - dld(iz)=zzz-dzt+tl - !print*," FOUND Ddown:",dld(iz)," z=",zw(izz)," tl=",tl - found = 1 - endif - zdo_sup=zdo - izz=izz-1 - ELSE - found = 1 - ENDIF - ENDDO - - endif - - !---------------------------------- - ! GET MINIMUM (OR AVERAGE) - !---------------------------------- - !The surface layer length scale can exceed z for large z/L, - !so keep maximum distance down > z. - dld(iz) = min(dld(iz),zw(iz+1))!not used in PBL anyway, only free atmos - lb1(iz) = min(dlu(iz),dld(iz)) !minimum - !JOE-fight floating point errors - dlu(iz)=MAX(0.1,MIN(dlu(iz),1000.)) - dld(iz)=MAX(0.1,MIN(dld(iz),1000.)) - lb2(iz) = sqrt(dlu(iz)*dld(iz)) !average - biased towards smallest - !lb2(iz) = 0.5*(dlu(iz)+dld(iz)) !average - - !Apply soft limit (only impacts very large lb; lb=100 by 5%, lb=500 by 20%). - lb1(iz) = lb1(iz)/(1. + (lb1(iz)/Lmax)) - lb2(iz) = lb2(iz)/(1. + (lb2(iz)/Lmax)) - - if (iz .eq. kte) then - lb1(kte) = lb1(kte-1) - lb2(kte) = lb2(kte-1) - endif - !print*,"IN MYNN-BouLac",kts, kte,lb1(iz) - !print*,"IN MYNN-BouLac",iz,dld(iz),dlu(iz) - - ENDDO - - END SUBROUTINE boulac_length -! -! ================================================================== -! SUBROUTINE mym_turbulence: -! -! Input variables: see subroutine mym_initialize -! closure : closure level (2.5, 2.6, or 3.0) -! -! # ql, vt, vq, qke, tsq, qsq and cov are changed to input variables. -! -! Output variables: see subroutine mym_initialize -! dfm(nx,nz,ny) : Diffusivity coefficient for momentum, -! divided by dz (not dz*h(i,j)) (m/s) -! dfh(nx,nz,ny) : Diffusivity coefficient for heat, -! divided by dz (not dz*h(i,j)) (m/s) -! dfq(nx,nz,ny) : Diffusivity coefficient for q^2, -! divided by dz (not dz*h(i,j)) (m/s) -! tcd(nx,nz,ny) : Countergradient diffusion term for Theta_l -! (K/s) -! qcd(nx,nz,ny) : Countergradient diffusion term for Q_w -! (kg/kg s) -! pd?(nx,nz,ny) : Half of the production terms -! -! Only tcd and qcd are defined at the center of the grid boxes -! -! # DO NOT forget that tcd and qcd are added on the right-hand side -! of the equations for Theta_l and Q_w, respectively. -! -! Work arrays: see subroutine mym_initialize and level2 -! -! # dtl, dqw, dtv, gm and gh are allowed to share storage units with -! dfm, dfh, dfq, tcd and qcd, respectively, for saving memory. -! -!>\ingroup gsd_mynn_edmf -!! This subroutine calculates the vertical diffusivity coefficients and the -!! production terms for the turbulent quantities. -!>\section gen_mym_turbulence GSD mym_turbulence General Algorithm -!! Two subroutines mym_level2() and mym_length() are called within this -!!subrouine to collect variable to carry out successive calculations: -!! - mym_level2() calculates the level 2 nondimensional wind shear \f$G_M\f$ -!! and vertical temperature gradient \f$G_H\f$ as well as the level 2 stability -!! functions \f$S_h\f$ and \f$S_m\f$. -!! - mym_length() calculates the mixing lengths. -!! - The stability criteria from Helfand and Labraga (1989) are applied. -!! - The stability functions for level 2.5 or level 3.0 are calculated. -!! - If level 3.0 is used, counter-gradient terms are calculated. -!! - Production terms of TKE,\f$\theta^{'2}\f$,\f$q^{'2}\f$, and \f$\theta^{'}q^{'}\f$ -!! are calculated. -!! - Eddy diffusivity \f$K_h\f$ and eddy viscosity \f$K_m\f$ are calculated. -!! - TKE budget terms are calculated (if the namelist parameter \p bl_mynn_tkebudget -!! is set to True) - SUBROUTINE mym_turbulence ( & - & kts,kte, & - & xland,closure, & - & dz, dx, zw, & - & u, v, thl, thetav, ql, qw, & - & qke, tsq, qsq, cov, & - & vt, vq, & - & rmo, flt, fltv, flq, & - & zi,theta, & - & sh, sm, & - & El, & - & Dfm, Dfh, Dfq, Tcd, Qcd, Pdk, Pdt, Pdq, Pdc, & - & qWT1D,qSHEAR1D,qBUOY1D,qDISS1D, & - & bl_mynn_tkebudget, & - & Psig_bl,Psig_shcu,cldfra_bl1D, & - & bl_mynn_mixlength, & - & edmf_w1,edmf_a1, & - & TKEprodTD, & - & spp_pbl,rstoch_col ) - -!------------------------------------------------------------------- - - integer, intent(in) :: kts,kte - -#ifdef HARDCODE_VERTICAL -# define kts 1 -# define kte HARDCODE_VERTICAL -#endif - - logical, intent(in) :: bl_mynn_tkebudget - integer, intent(in) :: bl_mynn_mixlength - real(kind_phys), intent(in) :: closure - real(kind_phys), dimension(kts:kte), intent(in) :: dz - real(kind_phys), dimension(kts:kte+1), intent(in) :: zw - real(kind_phys), intent(in) :: rmo,flt,fltv,flq, & - &Psig_bl,Psig_shcu,xland,dx,zi - real(kind_phys), dimension(kts:kte), intent(in) :: u,v,thl,thetav,qw, & - &ql,vt,vq,qke,tsq,qsq,cov,cldfra_bl1D,edmf_w1,edmf_a1, & - &TKEprodTD - - real(kind_phys), dimension(kts:kte), intent(out) :: dfm,dfh,dfq, & - &pdk,pdt,pdq,pdc,tcd,qcd,el - - real(kind_phys), dimension(kts:kte), intent(inout) :: & - qWT1D,qSHEAR1D,qBUOY1D,qDISS1D - real(kind_phys):: q3sq_old,dlsq1,qWTP_old,qWTP_new - real(kind_phys):: dudz,dvdz,dTdz,upwp,vpwp,Tpwp - - real(kind_phys), dimension(kts:kte) :: qkw,dtl,dqw,dtv,gm,gh,sm,sh - - integer :: k -! real(kind_phys):: cc2,cc3,e1c,e2c,e3c,e4c,e5c - real(kind_phys):: e6c,dzk,afk,abk,vtt,vqq, & - &cw25,clow,cupp,gamt,gamq,smd,gamv,elq,elh - - real(kind_phys):: cldavg - real(kind_phys), dimension(kts:kte), intent(in) :: theta - - real(kind_phys):: a2fac, duz, ri !JOE-Canuto/Kitamura mod - - real(kind_phys):: auh,aum,adh,adm,aeh,aem,Req,Rsl,Rsl2, & - gmelq,sm20,sh20,sm25max,sh25max,sm25min,sh25min, & - sm_pbl,sh_pbl,zi2,wt,slht,wtpr - - real(kind=kind_phys8):: q2sq, t2sq, r2sq, c2sq, elsq, gmel, ghel - real(kind=kind_phys8):: q3sq, t3sq, r3sq, c3sq, dlsq, qdiv - real(kind=kind_phys8):: e1, e2, e3, e4, enum, eden, wden - -! Stochastic - integer, intent(in) :: spp_pbl - real(kind_phys), dimension(kts:kte) :: rstoch_col - real(kind_phys):: Prnum, shb - real(kind_phys), parameter :: Prlimit = 5.0 - -! -! tv0 = 0.61*tref -! gtr = 9.81/tref -! -! cc2 = 1.0-c2 -! cc3 = 1.0-c3 -! e1c = 3.0*a2*b2*cc3 -! e2c = 9.0*a1*a2*cc2 -! e3c = 9.0*a2*a2*cc2*( 1.0-c5 ) -! e4c = 12.0*a1*a2*cc2 -! e5c = 6.0*a1*a1 -! - - CALL mym_level2 (kts,kte, & - & dz, & - & u, v, thl, thetav, qw, & - & ql, vt, vq, & - & dtl, dqw, dtv, gm, gh, sm, sh ) -! - CALL mym_length ( & - & kts,kte,xland, & - & dz, dx, zw, & - & rmo, flt, fltv, flq, & - & vt, vq, & - & u, v, qke, & - & dtv, & - & el, & - & zi,theta, & - & qkw,Psig_bl,cldfra_bl1D, & - & bl_mynn_mixlength, & - & edmf_w1,edmf_a1 ) -! - - DO k = kts+1,kte - dzk = 0.5 *( dz(k)+dz(k-1) ) - afk = dz(k)/( dz(k)+dz(k-1) ) - abk = 1.0 -afk - elsq = el (k)**2 - q3sq = qkw(k)**2 - q2sq = b1*elsq*( sm(k)*gm(k)+sh(k)*gh(k) ) - - sh20 = MAX(sh(k), 1e-5) - sm20 = MAX(sm(k), 1e-5) - sh(k)= MAX(sh(k), 1e-5) - - !Canuto/Kitamura mod - duz = ( u(k)-u(k-1) )**2 +( v(k)-v(k-1) )**2 - duz = duz /dzk**2 - ! ** Gradient Richardson number ** - ri = -gh(k)/MAX( duz, 1.0e-10 ) - IF (CKmod .eq. 1) THEN - a2fac = 1./(1. + MAX(ri,0.0)) - ELSE - a2fac = 1. - ENDIF - !end Canuto/Kitamura mod - - !level 2.0 Prandtl number - !Prnum = MIN(sm20/sh20, 4.0) - !The form of Zilitinkevich et al. (2006) but modified - !half-way towards Esau and Grachev (2007, Wind Eng) - !Prnum = MIN(0.76 + 3.0*MAX(ri,0.0), Prlimit) - Prnum = MIN(0.76 + 4.0*MAX(ri,0.0), Prlimit) - !Prnum = MIN(0.76 + 5.0*MAX(ri,0.0), Prlimit) -! -! Modified: Dec/22/2005, from here, (dlsq -> elsq) - gmel = gm (k)*elsq - ghel = gh (k)*elsq -! Modified: Dec/22/2005, up to here - - ! Level 2.0 debug prints - IF ( debug_code ) THEN - IF (sh(k)<0.0 .OR. sm(k)<0.0) THEN - print*,"MYNN; mym_turbulence 2.0; sh=",sh(k)," k=",k - print*," gm=",gm(k)," gh=",gh(k)," sm=",sm(k) - print*," q2sq=",q2sq," q3sq=",q3sq," q3/q2=",q3sq/q2sq - print*," qke=",qke(k)," el=",el(k)," ri=",ri - print*," PBLH=",zi," u=",u(k)," v=",v(k) - ENDIF - ENDIF - -! ** Since qkw is set to more than 0.0, q3sq > 0.0. ** - -! new stability criteria in level 2.5 (as well as level 3) - little/no impact -! ** Limitation on q, instead of L/q ** - dlsq = elsq - IF ( q3sq/dlsq .LT. -gh(k) ) q3sq = -dlsq*gh(k) - - IF ( q3sq .LT. q2sq ) THEN - !Apply Helfand & Labraga mod - qdiv = SQRT( q3sq/q2sq ) !HL89: (1-alfa) -! - !Use level 2.5 stability functions - !e1 = q3sq - e1c*ghel*a2fac - !e2 = q3sq - e2c*ghel*a2fac - !e3 = e1 + e3c*ghel*a2fac**2 - !e4 = e1 - e4c*ghel*a2fac - !eden = e2*e4 + e3*e5c*gmel - !eden = MAX( eden, 1.0d-20 ) - !sm(k) = q3sq*a1*( e3-3.0*c1*e4 )/eden - !!JOE-Canuto/Kitamura mod - !!sh(k) = q3sq*a2*( e2+3.0*c1*e5c*gmel )/eden - !sh(k) = q3sq*(a2*a2fac)*( e2+3.0*c1*e5c*gmel )/eden - !sm(k) = Prnum*sh(k) - !sm(k) = sm(k) * qdiv - - !Use level 2.0 functions as in original MYNN - sh(k) = sh(k) * qdiv - sm(k) = sm(k) * qdiv - ! !sm_pbl = sm(k) * qdiv - ! - ! !Or, use the simple Pr relationship - ! sm(k) = Prnum*sh(k) - ! - ! !or blend them: - ! zi2 = MAX(zi, 300.) - ! wt =.5*TANH((zw(k) - zi2)/200.) + .5 - ! sm(k) = sm_pbl*(1.-wt) + sm(k)*wt - - !Recalculate terms for later use - !JOE-Canuto/Kitamura mod - !e1 = q3sq - e1c*ghel * qdiv**2 - !e2 = q3sq - e2c*ghel * qdiv**2 - !e3 = e1 + e3c*ghel * qdiv**2 - !e4 = e1 - e4c*ghel * qdiv**2 - e1 = q3sq - e1c*ghel*a2fac * qdiv**2 - e2 = q3sq - e2c*ghel*a2fac * qdiv**2 - e3 = e1 + e3c*ghel*a2fac**2 * qdiv**2 - e4 = e1 - e4c*ghel*a2fac * qdiv**2 - eden = e2*e4 + e3*e5c*gmel * qdiv**2 - eden = MAX( eden, 1.0d-20 ) - !!JOE-Canuto/Kitamura mod - !!sh(k) = q3sq*a2*( e2+3.0*c1*e5c*gmel )/eden - retro 5 - !sh(k) = q3sq*(a2*a2fac)*( e2+3.0*c1*e5c*gmel )/eden - !sm(k) = Prnum*sh(k) - ELSE - !JOE-Canuto/Kitamura mod - !e1 = q3sq - e1c*ghel - !e2 = q3sq - e2c*ghel - !e3 = e1 + e3c*ghel - !e4 = e1 - e4c*ghel - e1 = q3sq - e1c*ghel*a2fac - e2 = q3sq - e2c*ghel*a2fac - e3 = e1 + e3c*ghel*a2fac**2 - e4 = e1 - e4c*ghel*a2fac - eden = e2*e4 + e3*e5c*gmel - eden = MAX( eden, 1.0d-20 ) - - qdiv = 1.0 - !Use level 2.5 stability functions - sm(k) = q3sq*a1*( e3-3.0*c1*e4 )/eden - ! sm_pbl = q3sq*a1*( e3-3.0*c1*e4 )/eden - !!JOE-Canuto/Kitamura mod - !!sh(k) = q3sq*a2*( e2+3.0*c1*e5c*gmel )/eden - sh(k) = q3sq*(a2*a2fac)*( e2+3.0*c1*e5c*gmel )/eden - ! sm(k) = Prnum*sh(k) - - ! !or blend them: - ! zi2 = MAX(zi, 300.) - ! wt = .5*TANH((zw(k) - zi2)/200.) + .5 - ! sm(k) = sm_pbl*(1.-wt) + sm(k)*wt - END IF !end Helfand & Labraga check - - !Impose broad limits on Sh and Sm: - gmelq = MAX(gmel/q3sq, 1d-8) - sm25max = 4. !MIN(sm20*3.0, SQRT(.1936/gmelq)) - sh25max = 4. !MIN(sh20*3.0, 0.76*b2) - sm25min = 0.0 !MAX(sm20*0.1, 1e-6) - sh25min = 0.0 !MAX(sh20*0.1, 1e-6) - - !JOE: Level 2.5 debug prints - ! HL88 , lev2.5 criteria from eqs. 3.17, 3.19, & 3.20 - IF ( debug_code ) THEN - IF ((sh(k)sh25max .OR. sm(k)>sm25max) ) THEN - print*,"In mym_turbulence 2.5: k=",k - print*," sm=",sm(k)," sh=",sh(k) - print*," ri=",ri," Pr=",sm(k)/MAX(sh(k),1e-8) - print*," gm=",gm(k)," gh=",gh(k) - print*," q2sq=",q2sq," q3sq=",q3sq, q3sq/q2sq - print*," qke=",qke(k)," el=",el(k) - print*," PBLH=",zi," u=",u(k)," v=",v(k) - print*," SMnum=",q3sq*a1*( e3-3.0*c1*e4)," SMdenom=",eden - print*," SHnum=",q3sq*(a2*a2fac)*( e2+3.0*c1*e5c*gmel ),& - " SHdenom=",eden - ENDIF - ENDIF - - !Enforce constraints for level 2.5 functions - IF ( sh(k) > sh25max ) sh(k) = sh25max - IF ( sh(k) < sh25min ) sh(k) = sh25min - !IF ( sm(k) > sm25max ) sm(k) = sm25max - !IF ( sm(k) < sm25min ) sm(k) = sm25min - !sm(k) = Prnum*sh(k) - - !surface layer PR - !slht = zi*0.1 - !wtpr = min( max( (slht - zw(k))/slht, 0.0), 1.0) ! 1 at z=0, 0 above sfc layer - !Prlim = 1.0*wtpr + (1.0 - wtpr)*Prlimit - !Prlim = 2.0*wtpr + (1.0 - wtpr)*Prlimit - !sm(k) = MIN(sm(k), Prlim*Sh(k)) - !Pending more testing, keep same Pr limit in sfc layer - shb = max(sh(k), 0.002) - sm(k) = MIN(sm(k), Prlimit*shb) - -! ** Level 3 : start ** - IF ( closure .GE. 3.0 ) THEN - t2sq = qdiv*b2*elsq*sh(k)*dtl(k)**2 - r2sq = qdiv*b2*elsq*sh(k)*dqw(k)**2 - c2sq = qdiv*b2*elsq*sh(k)*dtl(k)*dqw(k) - t3sq = MAX( tsq(k)*abk+tsq(k-1)*afk, 0.0 ) - r3sq = MAX( qsq(k)*abk+qsq(k-1)*afk, 0.0 ) - c3sq = cov(k)*abk+cov(k-1)*afk - -! Modified: Dec/22/2005, from here - c3sq = SIGN( MIN( ABS(c3sq), SQRT(t3sq*r3sq) ), c3sq ) -! - vtt = 1.0 +vt(k)*abk +vt(k-1)*afk - vqq = tv0 +vq(k)*abk +vq(k-1)*afk - - t2sq = vtt*t2sq +vqq*c2sq - r2sq = vtt*c2sq +vqq*r2sq - c2sq = MAX( vtt*t2sq+vqq*r2sq, 0.0d0 ) - t3sq = vtt*t3sq +vqq*c3sq - r3sq = vtt*c3sq +vqq*r3sq - c3sq = MAX( vtt*t3sq+vqq*r3sq, 0.0d0 ) -! - cw25 = e1*( e2 + 3.0*c1*e5c*gmel*qdiv**2 )/( 3.0*eden ) -! -! ** Limitation on q, instead of L/q ** - dlsq = elsq - IF ( q3sq/dlsq .LT. -gh(k) ) q3sq = -dlsq*gh(k) -! -! ** Limitation on c3sq (0.12 =< cw =< 0.76) ** - ! Use Janjic's (2001; p 13-17) methodology (eqs 4.11-414 and 5.7-5.10) - ! to calculate an exact limit for c3sq: - auh = 27.*a1*((a2*a2fac)**2)*b2*(gtr)**2 - aum = 54.*(a1**2)*(a2*a2fac)*b2*c1*(gtr) - adh = 9.*a1*((a2*a2fac)**2)*(12.*a1 + 3.*b2)*(gtr)**2 - adm = 18.*(a1**2)*(a2*a2fac)*(b2 - 3.*(a2*a2fac))*(gtr) - - aeh = (9.*a1*((a2*a2fac)**2)*b1 +9.*a1*((a2*a2fac)**2)* & - (12.*a1 + 3.*b2))*(gtr) - aem = 3.*a1*(a2*a2fac)*b1*(3.*(a2*a2fac) + 3.*b2*c1 + & - (18.*a1*c1 - b2)) + & - (18.)*(a1**2)*(a2*a2fac)*(b2 - 3.*(a2*a2fac)) - - Req = -aeh/aem - Rsl = (auh + aum*Req)/(3.*adh + 3.*adm*Req) - !For now, use default values, since tests showed little/no sensitivity - Rsl = .12 !lower limit - Rsl2= 1.0 - 2.*Rsl !upper limit - !IF (k==2)print*,"Dynamic limit RSL=",Rsl - !IF (Rsl < 0.10 .OR. Rsl > 0.18) THEN - ! print*,'--- ERROR: MYNN: Dynamic Cw '// & - ! 'limit exceeds reasonable limits' - ! print*," MYNN: Dynamic Cw limit needs attention=",Rsl - !ENDIF - - !JOE-Canuto/Kitamura mod - !e2 = q3sq - e2c*ghel * qdiv**2 - !e3 = q3sq + e3c*ghel * qdiv**2 - !e4 = q3sq - e4c*ghel * qdiv**2 - e2 = q3sq - e2c*ghel*a2fac * qdiv**2 - e3 = q3sq + e3c*ghel*a2fac**2 * qdiv**2 - e4 = q3sq - e4c*ghel*a2fac * qdiv**2 - eden = e2*e4 + e3 *e5c*gmel * qdiv**2 - - !JOE-Canuto/Kitamura mod - !wden = cc3*gtr**2 * dlsq**2/elsq * qdiv**2 & - ! & *( e2*e4c - e3c*e5c*gmel * qdiv**2 ) - wden = cc3*gtr**2 * dlsq**2/elsq * qdiv**2 & - & *( e2*e4c*a2fac - e3c*e5c*gmel*a2fac**2 * qdiv**2 ) - - IF ( wden .NE. 0.0 ) THEN - !JOE: test dynamic limits - clow = q3sq*( 0.12-cw25 )*eden/wden - cupp = q3sq*( 0.76-cw25 )*eden/wden - !clow = q3sq*( Rsl -cw25 )*eden/wden - !cupp = q3sq*( Rsl2-cw25 )*eden/wden -! - IF ( wden .GT. 0.0 ) THEN - c3sq = MIN( MAX( c3sq, c2sq+clow ), c2sq+cupp ) - ELSE - c3sq = MAX( MIN( c3sq, c2sq+clow ), c2sq+cupp ) - END IF - END IF -! - e1 = e2 + e5c*gmel * qdiv**2 - eden = MAX( eden, 1.0d-20 ) -! Modified: Dec/22/2005, up to here - - !JOE-Canuto/Kitamura mod - !e6c = 3.0*a2*cc3*gtr * dlsq/elsq - e6c = 3.0*(a2*a2fac)*cc3*gtr * dlsq/elsq - - !============================ - ! ** for Gamma_theta ** - !! enum = qdiv*e6c*( t3sq-t2sq ) - IF ( t2sq .GE. 0.0 ) THEN - enum = MAX( qdiv*e6c*( t3sq-t2sq ), 0.0d0 ) - ELSE - enum = MIN( qdiv*e6c*( t3sq-t2sq ), 0.0d0 ) - ENDIF - gamt =-e1 *enum /eden - - !============================ - ! ** for Gamma_q ** - !! enum = qdiv*e6c*( r3sq-r2sq ) - IF ( r2sq .GE. 0.0 ) THEN - enum = MAX( qdiv*e6c*( r3sq-r2sq ), 0.0d0 ) - ELSE - enum = MIN( qdiv*e6c*( r3sq-r2sq ), 0.0d0 ) - ENDIF - gamq =-e1 *enum /eden - - !============================ - ! ** for Sm' and Sh'd(Theta_V)/dz ** - !! enum = qdiv*e6c*( c3sq-c2sq ) - enum = MAX( qdiv*e6c*( c3sq-c2sq ), 0.0d0) - - !JOE-Canuto/Kitamura mod - !smd = dlsq*enum*gtr/eden * qdiv**2 * (e3c+e4c)*a1/a2 - smd = dlsq*enum*gtr/eden * qdiv**2 * (e3c*a2fac**2 + & - & e4c*a2fac)*a1/(a2*a2fac) - - gamv = e1 *enum*gtr/eden - sm(k) = sm(k) +smd - - !============================ - ! ** For elh (see below), qdiv at Level 3 is reset to 1.0. ** - qdiv = 1.0 - - ! Level 3 debug prints - IF ( debug_code ) THEN - IF (sh(k)<-0.3 .OR. sm(k)<-0.3 .OR. & - qke(k) < -0.1 .or. ABS(smd) .gt. 2.0) THEN - print*," MYNN; mym_turbulence3.0; sh=",sh(k)," k=",k - print*," gm=",gm(k)," gh=",gh(k)," sm=",sm(k) - print*," q2sq=",q2sq," q3sq=",q3sq," q3/q2=",q3sq/q2sq - print*," qke=",qke(k)," el=",el(k)," ri=",ri - print*," PBLH=",zi," u=",u(k)," v=",v(k) - ENDIF - ENDIF - -! ** Level 3 : end ** - - ELSE -! ** At Level 2.5, qdiv is not reset. ** - gamt = 0.0 - gamq = 0.0 - gamv = 0.0 - END IF -! -! Add min background stability function (diffusivity) within model levels -! with active plumes and clouds. - cldavg = 0.5*(cldfra_bl1D(k-1) + cldfra_bl1D(k)) - IF (edmf_a1(k) > 0.001 .OR. cldavg > 0.02) THEN - ! for mass-flux columns - sm(k) = MAX(sm(k), 0.03*MIN(10.*edmf_a1(k)*edmf_w1(k),1.0) ) - sh(k) = MAX(sh(k), 0.03*MIN(10.*edmf_a1(k)*edmf_w1(k),1.0) ) - ! for clouds - sm(k) = MAX(sm(k), 0.05*MIN(cldavg,1.0) ) - sh(k) = MAX(sh(k), 0.05*MIN(cldavg,1.0) ) - ENDIF -! - elq = el(k)*qkw(k) - elh = elq*qdiv - - ! Production of TKE (pdk), T-variance (pdt), - ! q-variance (pdq), and covariance (pdc) - pdk(k) = elq*( sm(k)*gm(k) & - & +sh(k)*gh(k)+gamv ) + & - & 0.5*TKEprodTD(k) ! xmchen - pdt(k) = elh*( sh(k)*dtl(k)+gamt )*dtl(k) - pdq(k) = elh*( sh(k)*dqw(k)+gamq )*dqw(k) - pdc(k) = elh*( sh(k)*dtl(k)+gamt ) & - & *dqw(k)*0.5 & - & + elh*( sh(k)*dqw(k)+gamq )*dtl(k)*0.5 - - ! Contergradient terms - tcd(k) = elq*gamt - qcd(k) = elq*gamq - - ! Eddy Diffusivity/Viscosity divided by dz - dfm(k) = elq*sm(k) / dzk - dfh(k) = elq*sh(k) / dzk -! Modified: Dec/22/2005, from here -! ** In sub.mym_predict, dfq for the TKE and scalar variance ** -! ** are set to 3.0*dfm and 1.0*dfm, respectively. (Sqfac) ** - dfq(k) = dfm(k) -! Modified: Dec/22/2005, up to here - - IF (bl_mynn_tkebudget) THEN - !TKE BUDGET -! dudz = ( u(k)-u(k-1) )/dzk -! dvdz = ( v(k)-v(k-1) )/dzk -! dTdz = ( thl(k)-thl(k-1) )/dzk - -! upwp = -elq*sm(k)*dudz -! vpwp = -elq*sm(k)*dvdz -! Tpwp = -elq*sh(k)*dTdz -! Tpwp = SIGN(MAX(ABS(Tpwp),1.E-6),Tpwp) - - -!! TKE budget (Puhales, 2020, WRF 4.2.1) << EOB - - !!!Shear Term - !!!qSHEAR1D(k)=-(upwp*dudz + vpwp*dvdz) - qSHEAR1D(k) = elq*sm(k)*gm(k) !staggered - - !!!Buoyancy Term - !!!qBUOY1D(k)=grav*Tpwp/thl(k) - !qBUOY1D(k)= elq*(sh(k)*gh(k) + gamv) - !qBUOY1D(k) = elq*(sh(k)*(-dTdz*grav/thl(k)) + gamv) !! ORIGINAL CODE - - !! Buoyncy term takes the TKEprodTD(k) production now - qBUOY1D(k) = elq*(sh(k)*gh(k)+gamv)+0.5*TKEprodTD(k) ! xmchen - - !!!Dissipation Term (now it evaluated in mym_predict) - !qDISS1D(k) = (q3sq**(3./2.))/(b1*MAX(el(k),1.)) !! ORIGINAL CODE - - !! >> EOB - ENDIF - - END DO -! - - dfm(kts) = 0.0 - dfh(kts) = 0.0 - dfq(kts) = 0.0 - tcd(kts) = 0.0 - qcd(kts) = 0.0 - - tcd(kte) = 0.0 - qcd(kte) = 0.0 - -! - DO k = kts,kte-1 - dzk = dz(k) - tcd(k) = ( tcd(k+1)-tcd(k) )/( dzk ) - qcd(k) = ( qcd(k+1)-qcd(k) )/( dzk ) - END DO -! - if (spp_pbl==1) then - DO k = kts,kte - dfm(k)= dfm(k) + dfm(k)* rstoch_col(k) * 1.5 * MAX(exp(-MAX(zw(k)-8000.,0.0)/2000.),0.001) - dfh(k)= dfh(k) + dfh(k)* rstoch_col(k) * 1.5 * MAX(exp(-MAX(zw(k)-8000.,0.0)/2000.),0.001) - END DO - endif - -! RETURN -#ifdef HARDCODE_VERTICAL -# undef kts -# undef kte -#endif - - END SUBROUTINE mym_turbulence - -! ================================================================== -! SUBROUTINE mym_predict: -! -! Input variables: see subroutine mym_initialize and turbulence -! qke(nx,nz,ny) : qke at (n)th time level -! tsq, ...cov : ditto -! -! Output variables: -! qke(nx,nz,ny) : qke at (n+1)th time level -! tsq, ...cov : ditto -! -! Work arrays: -! qkw(nx,nz,ny) : q at the center of the grid boxes (m/s) -! bp (nx,nz,ny) : = 1/2*F, see below -! rp (nx,nz,ny) : = P-1/2*F*Q, see below -! -! # The equation for a turbulent quantity Q can be expressed as -! dQ/dt + Ah + Av = Dh + Dv + P - F*Q, (1) -! where A is the advection, D the diffusion, P the production, -! F*Q the dissipation and h and v denote horizontal and vertical, -! respectively. If Q is q^2, F is 2q/B_1L. -! Using the Crank-Nicholson scheme for Av, Dv and F*Q, a finite -! difference equation is written as -! Q{n+1} - Q{n} = dt *( Dh{n} - Ah{n} + P{n} ) -! + dt/2*( Dv{n} - Av{n} - F*Q{n} ) -! + dt/2*( Dv{n+1} - Av{n+1} - F*Q{n+1} ), (2) -! where n denotes the time level. -! When the advection and diffusion terms are discretized as -! dt/2*( Dv - Av ) = a(k)Q(k+1) - b(k)Q(k) + c(k)Q(k-1), (3) -! Eq.(2) can be rewritten as -! - a(k)Q(k+1) + [ 1 + b(k) + dt/2*F ]Q(k) - c(k)Q(k-1) -! = Q{n} + dt *( Dh{n} - Ah{n} + P{n} ) -! + dt/2*( Dv{n} - Av{n} - F*Q{n} ), (4) -! where Q on the left-hand side is at (n+1)th time level. -! -! In this subroutine, a(k), b(k) and c(k) are obtained from -! subprogram coefvu and are passed to subprogram tinteg via -! common. 1/2*F and P-1/2*F*Q are stored in bp and rp, -! respectively. Subprogram tinteg solves Eq.(4). -! -! Modify this subroutine according to your numerical integration -! scheme (program). -! -!------------------------------------------------------------------- -!>\ingroup gsd_mynn_edmf -!! This subroutine predicts the turbulent quantities at the next step. - SUBROUTINE mym_predict (kts,kte, & - & closure, & - & delt, & - & dz, & - & ust, flt, flq, pmz, phh, & - & el, dfq, rho, & - & pdk, pdt, pdq, pdc, & - & qke, tsq, qsq, cov, & - & s_aw,s_awqke,bl_mynn_edmf_tke, & - & qWT1D, qDISS1D,bl_mynn_tkebudget) !! TKE budget (Puhales, 2020) - -!------------------------------------------------------------------- - integer, intent(in) :: kts,kte - -#ifdef HARDCODE_VERTICAL -# define kts 1 -# define kte HARDCODE_VERTICAL -#endif - - logical, intent(in) :: bl_mynn_edmf_tke,bl_mynn_tkebudget - real(kind_phys), intent(in) :: closure - real(kind_phys), dimension(kts:kte), intent(in) :: dz, dfq, el, rho - real(kind_phys), dimension(kts:kte), intent(inout) :: pdk, pdt, pdq, pdc - real(kind_phys), intent(in) :: flt, flq, pmz, phh - real(kind_phys), intent(in) :: ust, delt - real(kind_phys), dimension(kts:kte), intent(inout) :: qke,tsq, qsq, cov -! WA 8/3/15 - real(kind_phys), dimension(kts:kte+1), intent(inout) :: s_awqke,s_aw - - !! TKE budget (Puhales, 2020, WRF 4.2.1) << EOB - real(kind_phys), dimension(kts:kte), intent(out) :: qWT1D, qDISS1D - real(kind_phys), dimension(kts:kte) :: tke_up,dzinv - !! >> EOB - - integer :: k - real(kind_phys), dimension(kts:kte) :: qkw, bp, rp, df3q - real(kind_phys):: vkz,pdk1,phm,pdt1,pdq1,pdc1,b1l,b2l,onoff - real(kind_phys), dimension(kts:kte) :: dtz - real(kind_phys), dimension(kts:kte) :: a,b,c,d,x - - real(kind_phys), dimension(kts:kte) :: rhoinv - real(kind_phys), dimension(kts:kte+1) :: rhoz,kqdz,kmdz - - ! REGULATE THE MOMENTUM MIXING FROM THE MASS-FLUX SCHEME (on or off) - IF (.not. bl_mynn_edmf_tke) THEN - onoff=0.0 - ELSE - onoff=1.0 - ENDIF - -! ** Strictly, vkz*h(i,j) -> karman*( 0.5*dz(1)*h(i,j)+z0 ) ** - vkz = karman*0.5*dz(kts) -! -! ** dfq for the TKE is 3.0*dfm. ** -! - DO k = kts,kte -!! qke(k) = MAX(qke(k), 0.0) - qkw(k) = SQRT( MAX( qke(k), 0.0 ) ) - df3q(k)=Sqfac*dfq(k) - dtz(k)=delt/dz(k) - END DO -! -!JOE-add conservation + stability criteria - !Prepare "constants" for diffusion equation. - !khdz = rho*Kh/dz = rho*dfh - rhoz(kts) =rho(kts) - rhoinv(kts)=1./rho(kts) - kqdz(kts) =rhoz(kts)*df3q(kts) - kmdz(kts) =rhoz(kts)*dfq(kts) - DO k=kts+1,kte - rhoz(k) =(rho(k)*dz(k-1) + rho(k-1)*dz(k))/(dz(k-1)+dz(k)) - rhoz(k) = MAX(rhoz(k),1E-4) - rhoinv(k)=1./MAX(rho(k),1E-4) - kqdz(k) = rhoz(k)*df3q(k) ! for TKE - kmdz(k) = rhoz(k)*dfq(k) ! for T'2, q'2, and T'q' - ENDDO - rhoz(kte+1)=rhoz(kte) - kqdz(kte+1)=rhoz(kte+1)*df3q(kte) - kmdz(kte+1)=rhoz(kte+1)*dfq(kte) - - !stability criteria for mf - DO k=kts+1,kte-1 - kqdz(k) = MAX(kqdz(k), 0.5* s_aw(k)) - kqdz(k) = MAX(kqdz(k), -0.5*(s_aw(k)-s_aw(k+1))) - kmdz(k) = MAX(kmdz(k), 0.5* s_aw(k)) - kmdz(k) = MAX(kmdz(k), -0.5*(s_aw(k)-s_aw(k+1))) - ENDDO - !end conservation mods - - pdk1 = 2.0*ust**3*pmz/( vkz ) - phm = 2.0/ust *phh/( vkz ) - pdt1 = phm*flt**2 - pdq1 = phm*flq**2 - pdc1 = phm*flt*flq -! -! ** pdk(1)+pdk(2) corresponds to pdk1. ** - pdk(kts) = pdk1 - pdk(kts+1) - -!! pdt(kts) = pdt1 -pdt(kts+1) -!! pdq(kts) = pdq1 -pdq(kts+1) -!! pdc(kts) = pdc1 -pdc(kts+1) - pdt(kts) = pdt(kts+1) - pdq(kts) = pdq(kts+1) - pdc(kts) = pdc(kts+1) -! -! ** Prediction of twice the turbulent kinetic energy ** -!! DO k = kts+1,kte-1 - DO k = kts,kte-1 - b1l = b1*0.5*( el(k+1)+el(k) ) - bp(k) = 2.*qkw(k) / b1l - rp(k) = pdk(k+1) + pdk(k) - END DO - -!! a(1)=0. -!! b(1)=1. -!! c(1)=-1. -!! d(1)=0. - -! Since df3q(kts)=0.0, a(1)=0.0 and b(1)=1.+dtz(k)*df3q(k+1)+bp(k)*delt. - DO k=kts,kte-1 -! a(k-kts+1)=-dtz(k)*df3q(k) -! b(k-kts+1)=1.+dtz(k)*(df3q(k)+df3q(k+1))+bp(k)*delt -! c(k-kts+1)=-dtz(k)*df3q(k+1) -! d(k-kts+1)=rp(k)*delt + qke(k) -! WA 8/3/15 add EDMF contribution -! a(k)= - dtz(k)*df3q(k) + 0.5*dtz(k)*s_aw(k)*onoff -! b(k)=1. + dtz(k)*(df3q(k)+df3q(k+1)) & -! + 0.5*dtz(k)*(s_aw(k)-s_aw(k+1))*onoff + bp(k)*delt -! c(k)= - dtz(k)*df3q(k+1) - 0.5*dtz(k)*s_aw(k+1)*onoff -! d(k)=rp(k)*delt + qke(k) + dtz(k)*(s_awqke(k)-s_awqke(k+1))*onoff -!JOE 8/22/20 improve conservation - a(k)= - dtz(k)*kqdz(k)*rhoinv(k) & - & + 0.5*dtz(k)*rhoinv(k)*s_aw(k)*onoff - b(k)=1. + dtz(k)*(kqdz(k)+kqdz(k+1))*rhoinv(k) & - & + 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1))*onoff & - & + bp(k)*delt - c(k)= - dtz(k)*kqdz(k+1)*rhoinv(k) & - & - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*onoff - d(k)=rp(k)*delt + qke(k) & - & + dtz(k)*rhoinv(k)*(s_awqke(k)-s_awqke(k+1))*onoff - ENDDO - -!! DO k=kts+1,kte-1 -!! a(k-kts+1)=-dtz(k)*df3q(k) -!! b(k-kts+1)=1.+dtz(k)*(df3q(k)+df3q(k+1)) -!! c(k-kts+1)=-dtz(k)*df3q(k+1) -!! d(k-kts+1)=rp(k)*delt + qke(k) - qke(k)*bp(k)*delt -!! ENDDO - -!! "no flux at top" -! a(kte)=-1. !0. -! b(kte)=1. -! c(kte)=0. -! d(kte)=0. -!! "prescribed value" - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=qke(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) - - DO k=kts,kte -! qke(k)=max(d(k-kts+1), 1.e-4) - qke(k)=max(x(k), 1.e-4) - qke(k)=min(qke(k), 150.) - ENDDO - - -!! TKE budget (Puhales, 2020, WRF 4.2.1) << EOB - IF (bl_mynn_tkebudget) THEN - !! TKE Vertical transport << EOBvt - tke_up=0.5*qke - dzinv=1./dz - k=kts - qWT1D(k)=dzinv(k)*( & - & (kqdz(k+1)*(tke_up(k+1)-tke_up(k))-kqdz(k)*tke_up(k)) & - & + 0.5*rhoinv(k)*(s_aw(k+1)*tke_up(k+1) & - & + (s_aw(k+1)-s_aw(k))*tke_up(k) & - & + (s_awqke(k)-s_awqke(k+1)))*onoff) !unstaggered - DO k=kts+1,kte-1 - qWT1D(k)=dzinv(k)*( & - & (kqdz(k+1)*(tke_up(k+1)-tke_up(k))-kqdz(k)*(tke_up(k)-tke_up(k-1))) & - & + 0.5*rhoinv(k)*(s_aw(k+1)*tke_up(k+1) & - & + (s_aw(k+1)-s_aw(k))*tke_up(k) & - & - s_aw(k)*tke_up(k-1) & - & + (s_awqke(k)-s_awqke(k+1)))*onoff) !unstaggered - ENDDO - k=kte - qWT1D(k)=dzinv(k)*(-kqdz(k)*(tke_up(k)-tke_up(k-1)) & - & + 0.5*rhoinv(k)*(-s_aw(k)*tke_up(k)-s_aw(k)*tke_up(k-1)+s_awqke(k))*onoff) !unstaggered - !! >> EOBvt - qDISS1D=bp*tke_up !! TKE dissipation rate !unstaggered - END IF -!! >> EOB - - IF ( closure > 2.5 ) THEN - - ! ** Prediction of the moisture variance ** - DO k = kts,kte-1 - b2l = b2*0.5*( el(k+1)+el(k) ) - bp(k) = 2.*qkw(k) / b2l - rp(k) = pdq(k+1) + pdq(k) - END DO - - !zero gradient for qsq at bottom and top - !a(1)=0. - !b(1)=1. - !c(1)=-1. - !d(1)=0. - - ! Since dfq(kts)=0.0, a(1)=0.0 and b(1)=1.+dtz(k)*dfq(k+1)+bp(k)*delt. - DO k=kts,kte-1 - a(k)= - dtz(k)*kmdz(k)*rhoinv(k) - b(k)=1. + dtz(k)*(kmdz(k)+kmdz(k+1))*rhoinv(k) + bp(k)*delt - c(k)= - dtz(k)*kmdz(k+1)*rhoinv(k) - d(k)=rp(k)*delt + qsq(k) - ENDDO - - a(kte)=-1. !0. - b(kte)=1. - c(kte)=0. - d(kte)=0. - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) - - DO k=kts,kte - !qsq(k)=d(k-kts+1) - qsq(k)=MAX(x(k),1e-17) - ENDDO - ELSE - !level 2.5 - use level 2 diagnostic - DO k = kts,kte-1 - IF ( qkw(k) .LE. 0.0 ) THEN - b2l = 0.0 - ELSE - b2l = b2*0.25*( el(k+1)+el(k) )/qkw(k) - END IF - qsq(k) = b2l*( pdq(k+1)+pdq(k) ) - END DO - qsq(kte)=qsq(kte-1) - END IF -!!!!!!!!!!!!!!!!!!!!!!end level 2.6 - - IF ( closure .GE. 3.0 ) THEN -! -! ** dfq for the scalar variance is 1.0*dfm. ** -! -! ** Prediction of the temperature variance ** -!! DO k = kts+1,kte-1 - DO k = kts,kte-1 - b2l = b2*0.5*( el(k+1)+el(k) ) - bp(k) = 2.*qkw(k) / b2l - rp(k) = pdt(k+1) + pdt(k) - END DO - -!zero gradient for tsq at bottom and top - -!! a(1)=0. -!! b(1)=1. -!! c(1)=-1. -!! d(1)=0. - -! Since dfq(kts)=0.0, a(1)=0.0 and b(1)=1.+dtz(k)*dfq(k+1)+bp(k)*delt. - DO k=kts,kte-1 - !a(k-kts+1)=-dtz(k)*dfq(k) - !b(k-kts+1)=1.+dtz(k)*(dfq(k)+dfq(k+1))+bp(k)*delt - !c(k-kts+1)=-dtz(k)*dfq(k+1) - !d(k-kts+1)=rp(k)*delt + tsq(k) -!JOE 8/22/20 improve conservation - a(k)= - dtz(k)*kmdz(k)*rhoinv(k) - b(k)=1. + dtz(k)*(kmdz(k)+kmdz(k+1))*rhoinv(k) + bp(k)*delt - c(k)= - dtz(k)*kmdz(k+1)*rhoinv(k) - d(k)=rp(k)*delt + tsq(k) - ENDDO - -!! DO k=kts+1,kte-1 -!! a(k-kts+1)=-dtz(k)*dfq(k) -!! b(k-kts+1)=1.+dtz(k)*(dfq(k)+dfq(k+1)) -!! c(k-kts+1)=-dtz(k)*dfq(k+1) -!! d(k-kts+1)=rp(k)*delt + tsq(k) - tsq(k)*bp(k)*delt -!! ENDDO - - a(kte)=-1. !0. - b(kte)=1. - c(kte)=0. - d(kte)=0. - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) - - DO k=kts,kte -! tsq(k)=d(k-kts+1) - tsq(k)=x(k) - ENDDO - -! ** Prediction of the temperature-moisture covariance ** -!! DO k = kts+1,kte-1 - DO k = kts,kte-1 - b2l = b2*0.5*( el(k+1)+el(k) ) - bp(k) = 2.*qkw(k) / b2l - rp(k) = pdc(k+1) + pdc(k) - END DO - -!zero gradient for tqcov at bottom and top - -!! a(1)=0. -!! b(1)=1. -!! c(1)=-1. -!! d(1)=0. - -! Since dfq(kts)=0.0, a(1)=0.0 and b(1)=1.+dtz(k)*dfq(k+1)+bp(k)*delt. - DO k=kts,kte-1 - !a(k-kts+1)=-dtz(k)*dfq(k) - !b(k-kts+1)=1.+dtz(k)*(dfq(k)+dfq(k+1))+bp(k)*delt - !c(k-kts+1)=-dtz(k)*dfq(k+1) - !d(k-kts+1)=rp(k)*delt + cov(k) -!JOE 8/22/20 improve conservation - a(k)= - dtz(k)*kmdz(k)*rhoinv(k) - b(k)=1. + dtz(k)*(kmdz(k)+kmdz(k+1))*rhoinv(k) + bp(k)*delt - c(k)= - dtz(k)*kmdz(k+1)*rhoinv(k) - d(k)=rp(k)*delt + cov(k) - ENDDO - -!! DO k=kts+1,kte-1 -!! a(k-kts+1)=-dtz(k)*dfq(k) -!! b(k-kts+1)=1.+dtz(k)*(dfq(k)+dfq(k+1)) -!! c(k-kts+1)=-dtz(k)*dfq(k+1) -!! d(k-kts+1)=rp(k)*delt + cov(k) - cov(k)*bp(k)*delt -!! ENDDO - - a(kte)=-1. !0. - b(kte)=1. - c(kte)=0. - d(kte)=0. - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) - - DO k=kts,kte -! cov(k)=d(k-kts+1) - cov(k)=x(k) - ENDDO - - ELSE - - !Not level 3 - default to level 2 diagnostic - DO k = kts,kte-1 - IF ( qkw(k) .LE. 0.0 ) THEN - b2l = 0.0 - ELSE - b2l = b2*0.25*( el(k+1)+el(k) )/qkw(k) - END IF -! - tsq(k) = b2l*( pdt(k+1)+pdt(k) ) - cov(k) = b2l*( pdc(k+1)+pdc(k) ) - END DO - - tsq(kte)=tsq(kte-1) - cov(kte)=cov(kte-1) - - END IF - -#ifdef HARDCODE_VERTICAL -# undef kts -# undef kte -#endif - - END SUBROUTINE mym_predict - -! ================================================================== -! SUBROUTINE mym_condensation: -! -! Input variables: see subroutine mym_initialize and turbulence -! exner(nz) : Perturbation of the Exner function (J/kg K) -! defined on the walls of the grid boxes -! This is usually computed by integrating -! d(pi)/dz = h*g*tv/tref**2 -! from the upper boundary, where tv is the -! virtual potential temperature minus tref. -! -! Output variables: see subroutine mym_initialize -! cld(nx,nz,ny) : Cloud fraction -! -! Work arrays/variables: -! qmq : Q_w-Q_{sl}, where Q_{sl} is the saturation -! specific humidity at T=Tl -! alp(nx,nz,ny) : Functions in the condensation process -! bet(nx,nz,ny) : ditto -! sgm(nx,nz,ny) : Combined standard deviation sigma_s -! multiplied by 2/alp -! -! # qmq, alp, bet and sgm are allowed to share storage units with -! any four of other work arrays for saving memory. -! -! # Results are sensitive particularly to values of cp and r_d. -! Set these values to those adopted by you. -! -!------------------------------------------------------------------- -!>\ingroup gsd_mynn_edmf -!! This subroutine calculates the nonconvective component of the -!! subgrid cloud fraction and mixing ratio as well as the functions used to -!! calculate the buoyancy flux. Different cloud PDFs can be selected by -!! use of the namelist parameter \p bl_mynn_cloudpdf . - SUBROUTINE mym_condensation (kts,kte, & - & dx, dz, zw, xland, & - & thl, qw, qv, qc, qi, qs, & - & p,exner, & - & tsq, qsq, cov, & - & Sh, el, bl_mynn_cloudpdf, & - & qc_bl1D, qi_bl1D, & - & cldfra_bl1D, & - & PBLH1,HFX1, & - & Vt, Vq, th, sgm, rmo, & - & spp_pbl,rstoch_col ) - -!------------------------------------------------------------------- - - integer, intent(in) :: kts,kte, bl_mynn_cloudpdf - -#ifdef HARDCODE_VERTICAL -# define kts 1 -# define kte HARDCODE_VERTICAL -#endif - - real(kind_phys), intent(in) :: HFX1,rmo,xland - real(kind_phys), intent(in) :: dx,pblh1 - real(kind_phys), dimension(kts:kte), intent(in) :: dz - real(kind_phys), dimension(kts:kte+1), intent(in) :: zw - real(kind_phys), dimension(kts:kte), intent(in) :: p,exner,thl,qw, & - &qv,qc,qi,qs,tsq,qsq,cov,th - - real(kind_phys), dimension(kts:kte), intent(inout) :: vt,vq,sgm - - real(kind_phys), dimension(kts:kte) :: alp,a,bet,b,ql,q1,RH - real(kind_phys), dimension(kts:kte), intent(out) :: qc_bl1D,qi_bl1D, & - &cldfra_bl1D - DOUBLE PRECISION :: t3sq, r3sq, c3sq - - real(kind_phys):: qsl,esat,qsat,dqsl,cld0,q1k,qlk,eq1,qll, & - &q2p,pt,rac,qt,t,xl,rsl,cpm,Fng,qww,alpha,beta,bb, & - &ls,wt,wt2,qpct,cld_factor,fac_damp,liq_frac,ql_ice,ql_water, & - &qmq,qsat_tk,q1_rh,rh_hack,dzm1,zsl,maxqc - real(kind_phys), parameter :: qpct_sfc=0.025 - real(kind_phys), parameter :: qpct_pbl=0.030 - real(kind_phys), parameter :: qpct_trp=0.040 - real(kind_phys), parameter :: rhcrit =0.83 !for cloudpdf = 2 - real(kind_phys), parameter :: rhmax =1.02 !for cloudpdf = 2 - integer :: i,j,k - - real(kind_phys):: erf - - !VARIABLES FOR ALTERNATIVE SIGMA - real(kind_phys):: dth,dtl,dqw,dzk,els - real(kind_phys), dimension(kts:kte), intent(in) :: Sh,el - - !variables for SGS BL clouds - real(kind_phys) :: zagl,damp,PBLH2 - real(kind_phys) :: cfmax - - !JAYMES: variables for tropopause-height estimation - real(kind_phys) :: theta1, theta2, ht1, ht2 - integer :: k_tropo - -! Stochastic - integer, intent(in) :: spp_pbl - real(kind_phys), dimension(kts:kte) :: rstoch_col - real(kind_phys) :: qw_pert - -! First, obtain an estimate for the tropopause height (k), using the method employed in the -! Thompson subgrid-cloud scheme. This height will be a consideration later when determining -! the "final" subgrid-cloud properties. -! JAYMES: added 3 Nov 2016, adapted from G. Thompson - - DO k = kte-3, kts, -1 - theta1 = th(k) - theta2 = th(k+2) - ht1 = 44307.692 * (1.0 - (p(k)/101325.)**0.190) - ht2 = 44307.692 * (1.0 - (p(k+2)/101325.)**0.190) - if ( (((theta2-theta1)/(ht2-ht1)) .lt. 10./1500. ) .AND. & - & (ht1.lt.19000.) .and. (ht1.gt.4000.) ) then - goto 86 - endif - ENDDO - 86 continue - k_tropo = MAX(kts+2, k+2) - - zagl = 0. - - SELECT CASE(bl_mynn_cloudpdf) - - CASE (0) ! ORIGINAL MYNN PARTIAL-CONDENSATION SCHEME - - DO k = kts,kte-1 - t = th(k)*exner(k) - -!x if ( ct .gt. 0.0 ) then -! a = 17.27 -! b = 237.3 -!x else -!x a = 21.87 -!x b = 265.5 -!x end if -! -! ** 3.8 = 0.622*6.11 (hPa) ** - - !SATURATED VAPOR PRESSURE - esat = esat_blend(t,t0c,tice) - !SATURATED SPECIFIC HUMIDITY - !qsl=ep_2*esat/(p(k)-ep_3*esat) - qsl=ep_2*esat/max(1.e-4,(p(k)-ep_3*esat)) - !dqw/dT: Clausius-Clapeyron - dqsl = qsl*ep_2*xlv/( r_d*t**2 ) - - alp(k) = 1.0/( 1.0+dqsl*xlvcp ) - bet(k) = dqsl*exner(k) - - !Sommeria and Deardorff (1977) scheme, as implemented - !in Nakanishi and Niino (2009), Appendix B - t3sq = MAX( tsq(k), 0.0 ) - r3sq = MAX( qsq(k), 0.0 ) - c3sq = cov(k) - c3sq = SIGN( MIN( ABS(c3sq), SQRT(t3sq*r3sq) ), c3sq ) - r3sq = r3sq +bet(k)**2*t3sq -2.0*bet(k)*c3sq - !DEFICIT/EXCESS WATER CONTENT - qmq = qw(k) -qsl - !ORIGINAL STANDARD DEVIATION - sgm(k) = SQRT( MAX( r3sq, 1.0d-10 )) - !NORMALIZED DEPARTURE FROM SATURATION - q1(k) = qmq / sgm(k) - !CLOUD FRACTION. rr2 = 1/SQRT(2) = 0.707 - cldfra_bl1D(k) = 0.5*( 1.0+erf( q1(k)*rr2 ) ) - - q1k = q1(k) - eq1 = rrp*EXP( -0.5*q1k*q1k ) - qll = MAX( cldfra_bl1D(k)*q1k + eq1, 0.0 ) - !ESTIMATED LIQUID WATER CONTENT (UNNORMALIZED) - ql(k) = alp(k)*sgm(k)*qll - !LIMIT SPECIES TO TEMPERATURE RANGES - liq_frac = min(1.0, max(0.0,(t-240.0)/29.0)) - qc_bl1D(k) = liq_frac*ql(k) - qi_bl1D(k) = (1.0 - liq_frac)*ql(k) - - !Now estimate the buoyancy flux functions - q2p = xlvcp/exner(k) - pt = thl(k) +q2p*ql(k) ! potential temp - - !qt is a THETA-V CONVERSION FOR TOTAL WATER (i.e., THETA-V = qt*THETA) - qt = 1.0 +p608*qw(k) -(1.+p608)*(qc_bl1D(k)+qi_bl1D(k))*cldfra_bl1D(k) - rac = alp(k)*( cldfra_bl1D(K)-qll*eq1 )*( q2p*qt-(1.+p608)*pt ) - - !BUOYANCY FACTORS: wherever vt and vq are used, there is a - !"+1" and "+tv0", respectively, so these are subtracted out here. - !vt is unitless and vq has units of K. - vt(k) = qt-1.0 -rac*bet(k) - vq(k) = p608*pt-tv0 +rac - - END DO - - CASE (1, -1) !ALTERNATIVE FORM (Nakanishi & Niino 2004 BLM, eq. B6, and - !Kuwano-Yoshida et al. 2010 QJRMS, eq. 7): - DO k = kts,kte-1 - t = th(k)*exner(k) - !SATURATED VAPOR PRESSURE - esat = esat_blend(t,t0c,tice) - !SATURATED SPECIFIC HUMIDITY - !qsl=ep_2*esat/(p(k)-ep_3*esat) - qsl=ep_2*esat/max(1.e-4,(p(k)-ep_3*esat)) - !dqw/dT: Clausius-Clapeyron - dqsl = qsl*ep_2*xlv/( r_d*t**2 ) - - alp(k) = 1.0/( 1.0+dqsl*xlvcp ) - bet(k) = dqsl*exner(k) - - if (k .eq. kts) then - dzk = 0.5*dz(k) - else - dzk = dz(k) - end if - dth = 0.5*(thl(k+1)+thl(k)) - 0.5*(thl(k)+thl(MAX(k-1,kts))) - dqw = 0.5*(qw(k+1) + qw(k)) - 0.5*(qw(k) + qw(MAX(k-1,kts))) - sgm(k) = SQRT( MAX( (alp(k)**2 * MAX(el(k)**2,0.1) * & - b2 * MAX(Sh(k),0.03))/4. * & - (dqw/dzk - bet(k)*(dth/dzk ))**2 , 1.0e-10) ) - qmq = qw(k) -qsl - q1(k) = qmq / sgm(k) - cldfra_bl1D(K) = 0.5*( 1.0+erf( q1(k)*rr2 ) ) - - !now compute estimated lwc for PBL scheme's use - !qll IS THE NORMALIZED LIQUID WATER CONTENT (Sommeria and - !Deardorff (1977, eq 29a). rrp = 1/(sqrt(2*pi)) = 0.3989 - q1k = q1(k) - eq1 = rrp*EXP( -0.5*q1k*q1k ) - qll = MAX( cldfra_bl1D(K)*q1k + eq1, 0.0 ) - !ESTIMATED LIQUID WATER CONTENT (UNNORMALIZED) - ql (k) = alp(k)*sgm(k)*qll - liq_frac = min(1.0, max(0.0,(t-240.0)/29.0)) - qc_bl1D(k) = liq_frac*ql(k) - qi_bl1D(k) = (1.0 - liq_frac)*ql(k) - - !Now estimate the buoyancy flux functions - q2p = xlvcp/exner(k) - pt = thl(k) +q2p*ql(k) ! potential temp - - !qt is a THETA-V CONVERSION FOR TOTAL WATER (i.e., THETA-V = qt*THETA) - qt = 1.0 +p608*qw(k) -(1.+p608)*(qc_bl1D(k)+qi_bl1D(k))*cldfra_bl1D(k) - rac = alp(k)*( cldfra_bl1D(K)-qll*eq1 )*( q2p*qt-(1.+p608)*pt ) - - !BUOYANCY FACTORS: wherever vt and vq are used, there is a - !"+1" and "+tv0", respectively, so these are subtracted out here. - !vt is unitless and vq has units of K. - vt(k) = qt-1.0 -rac*bet(k) - vq(k) = p608*pt-tv0 +rac - - END DO - - CASE (2, -2) - - !Diagnostic statistical scheme of Chaboureau and Bechtold (2002), JAS - !but with use of higher-order moments to estimate sigma - pblh2=MAX(10._kind_phys,pblh1) - zagl = 0. - dzm1 = 0. - DO k = kts,kte-1 - zagl = zagl + 0.5*(dz(k) + dzm1) - dzm1 = dz(k) - - t = th(k)*exner(k) - xl = xl_blend(t,t0c,tice,cice,cliq,cpv,xls,xlv) ! obtain latent heat - qsat_tk= qsat_blend(t,t0c,tice,p(k)) ! saturation water vapor mixing ratio at tk and p - rh(k) = MAX(MIN(rhmax, qw(k)/MAX(1.E-10,qsat_tk)),0.001_kind_phys) - - !dqw/dT: Clausius-Clapeyron - dqsl = qsat_tk*ep_2*xlv/( r_d*t**2 ) - alp(k) = 1.0/( 1.0+dqsl*xlvcp ) - bet(k) = dqsl*exner(k) - - rsl = xl*qsat_tk / (r_v*t**2) ! slope of C-C curve at t (=abs temperature) - ! CB02, Eqn. 4 - cpm = cp + qw(k)*cpv ! CB02, sec. 2, para. 1 - a(k) = 1./(1. + xl*rsl/cpm) ! CB02 variable "a" - b(k) = a(k)*rsl ! CB02 variable "b" - - !SPP - qw_pert= qw(k) + qw(k)*0.5*rstoch_col(k)*real(spp_pbl) - - !This form of qmq (the numerator of Q1) no longer uses the a(k) factor - qmq = qw_pert - qsat_tk ! saturation deficit/excess; - - !Use the form of Eq. (6) in Chaboureau and Bechtold (2002) - !except neglect all but the first term for sig_r - r3sq = max( qsq(k), 0.0 ) - !Calculate sigma using higher-order moments: - sgm(k) = SQRT( r3sq ) - !Set constraints on sigma relative to saturation water vapor - sgm(k) = min( sgm(k), qsat_tk*0.666 ) - !sgm(k) = max( sgm(k), qsat_tk*0.035 ) - - !introduce vertical grid spacing dependence on min sgm - wt = max(500. - max(dz(k)-100.,0.0), 0.0_kind_phys)/500. !=1 for dz < 100 m, =0 for dz > 600 m - sgm(k) = sgm(k) + sgm(k)*0.2*(1.0-wt) !inflate sgm for coarse dz - - !allow min sgm to vary with dz and z. - qpct = qpct_pbl*wt + qpct_trp*(1.0-wt) - qpct = min(qpct, max(qpct_sfc, qpct_pbl*zagl/500.) ) - sgm(k) = max( sgm(k), qsat_tk*qpct ) - - q1(k) = qmq / sgm(k) ! Q1, the normalized saturation - - !Add condition for falling/settling into low-RH layers, so at least - !some cloud fraction is applied for all qc, qs, and qi. - rh_hack= rh(k) - wt2 = min(max( zagl - pblh2, 0.0 )/300., 1.0) - !ensure adequate RH & q1 when qi is at least 1e-9 (above the PBLH) - if ((qi(k)+qs(k))>1.e-9 .and. (zagl .gt. pblh2)) then - rh_hack =min(rhmax, rhcrit + wt2*0.045*(9.0 + log10(qi(k)+qs(k)))) - rh(k) =max(rh(k), rh_hack) - !add rh-based q1 - q1_rh =-3. + 3.*(rh(k)-rhcrit)/(1.-rhcrit) - q1(k) =max(q1_rh, q1(k) ) - endif - !ensure adequate rh & q1 when qc is at least 1e-6 (above the PBLH) - if (qc(k)>1.e-6 .and. (zagl .gt. pblh2)) then - rh_hack =min(rhmax, rhcrit + wt2*0.08*(6.0 + log10(qc(k)))) - rh(k) =max(rh(k), rh_hack) - !add rh-based q1 - q1_rh =-3. + 3.*(rh(k)-rhcrit)/(1.-rhcrit) - q1(k) =max(q1_rh, q1(k) ) - endif - - q1k = q1(k) ! backup Q1 for later modification - - ! Specify cloud fraction - !Original C-B cloud fraction, allows cloud fractions out to q1 = -3.5 - !cldfra_bl1D(K) = max(0., min(1., 0.5+0.36*atan(1.55*q1(k)))) ! Eq. 7 in CB02 - !Waynes LES fit - over-diffuse, when limits removed from vt & vq & fng - !cldfra_bl1D(K) = max(0., min(1., 0.5+0.36*atan(1.2*(q1(k)+0.4)))) - !Best compromise: Improves marine stratus without adding much cold bias. - cldfra_bl1D(k) = max(0., min(1., 0.5+0.36*atan(1.8*(q1(k)+0.2)))) - - ! Specify hydrometeors - ! JAYMES- this option added 8 May 2015 - ! The cloud water formulations are taken from CB02, Eq. 8. - maxqc = max(qw(k) - qsat_tk, 0.0) - if (q1k < 0.) then !unsaturated - ql_water = sgm(k)*exp(1.2*q1k-1.) - ql_ice = sgm(k)*exp(1.2*q1k-1.) - elseif (q1k > 2.) then !supersaturated - ql_water = min(sgm(k)*q1k, maxqc) - ql_ice = sgm(k)*q1k - else !slightly saturated (0 > q1 < 2) - ql_water = min(sgm(k)*(exp(-1.) + 0.66*q1k + 0.086*q1k**2), maxqc) - ql_ice = sgm(k)*(exp(-1.) + 0.66*q1k + 0.086*q1k**2) - endif - - !In saturated grid cells, use average of SGS and resolved values - !if ( qc(k) > 1.e-6 ) ql_water = 0.5 * ( ql_water + qc(k) ) - !ql_ice is actually the total frozen condensate (snow+ice), - !if ( (qi(k)+qs(k)) > 1.e-9 ) ql_ice = 0.5 * ( ql_ice + (qi(k)+qs(k)) ) - - if (cldfra_bl1D(k) < 0.001) then - ql_ice = 0.0 - ql_water = 0.0 - cldfra_bl1D(k) = 0.0 - endif - - liq_frac = MIN(1.0, MAX(0.0, (t-tice)/(tliq-tice))) - qc_bl1D(k) = liq_frac*ql_water ! apply liq_frac to ql_water and ql_ice - qi_bl1D(k) = (1.0-liq_frac)*ql_ice - - !Above tropopause: eliminate subgrid clouds from CB scheme. Note that this was - !"k_tropo - 1" as of 20 Feb 2023. Changed to allow more high-level clouds. - if (k .ge. k_tropo) then - cldfra_bl1D(K) = 0. - qc_bl1D(k) = 0. - qi_bl1D(k) = 0. - endif - - !Buoyancy-flux-related calculations follow... - !limiting Q1 to avoid too much diffusion in cloud layers - !q1k=max(Q1(k),-2.0) - if ((xland-1.5).GE.0) then ! water - q1k=max(Q1(k),-2.5) - else ! land - q1k=max(Q1(k),-2.0) - endif - ! "Fng" represents the non-Gaussian transport factor - ! (non-dimensional) from Bechtold et al. 1995 - ! (hereafter BCMT95), section 3(c). Their suggested - ! forms for Fng (from their Eq. 20) are: - !IF (q1k < -2.) THEN - ! Fng = 2.-q1k - !ELSE IF (q1k > 0.) THEN - ! Fng = 1. - !ELSE - ! Fng = 1.-1.5*q1k - !ENDIF - ! Use the form of "Fng" from Bechtold and Siebesma (1998, JAS) - if (q1k .ge. 1.0) then - Fng = 1.0 - elseif (q1k .ge. -1.7 .and. q1k .lt. 1.0) then - Fng = exp(-0.4*(q1k-1.0)) - elseif (q1k .ge. -2.5 .and. q1k .lt. -1.7) then - Fng = 3.0 + exp(-3.8*(q1k+1.7)) - else - Fng = min(23.9 + exp(-1.6*(q1k+2.5)), 60._kind_phys) - endif - - cfmax = min(cldfra_bl1D(k), 0.6_kind_phys) - !Further limit the cf going into vt & vq near the surface - zsl = min(max(25., 0.1*pblh2), 100.) - wt = min(zagl/zsl, 1.0) !=0 at z=0 m, =1 above ekman layer - cfmax = cfmax*wt - - bb = b(k)*t/th(k) ! bb is "b" in BCMT95. Their "b" differs from - ! "b" in CB02 (i.e., b(k) above) by a factor - ! of T/theta. Strictly, b(k) above is formulated in - ! terms of sat. mixing ratio, but bb in BCMT95 is - ! cast in terms of sat. specific humidity. The - ! conversion is neglected here. - qww = 1.+0.61*qw(k) - alpha = 0.61*th(k) - beta = (th(k)/t)*(xl/cp) - 1.61*th(k) - vt(k) = qww - cfmax*beta*bb*Fng - 1. - vq(k) = alpha + cfmax*beta*a(k)*Fng - tv0 - ! vt and vq correspond to beta-theta and beta-q, respectively, - ! in NN09, Eq. B8. They also correspond to the bracketed - ! expressions in BCMT95, Eq. 15, since (s*ql/sigma^2) = cldfra*Fng - ! The "-1" and "-tv0" terms are included for consistency with - ! the legacy vt and vq formulations (above). - - ! dampen amplification factor where need be - fac_damp = min(zagl * 0.0025, 1.0) - !cld_factor = 1.0 + fac_damp*MAX(0.0, ( RH(k) - 0.75 ) / 0.26 )**1.9 !HRRRv4 - !cld_factor = 1.0 + fac_damp*min((max(0.0, ( RH(k) - 0.92 )) / 0.25 )**2, 0.3) - cld_factor = 1.0 + fac_damp*min((max(0.0, ( RH(k) - 0.92 )) / 0.145)**2, 0.37) - cldfra_bl1D(K) = min( 1., cld_factor*cldfra_bl1D(K) ) - enddo - - END SELECT !end cloudPDF option - - !For testing purposes only, option for isolating on the mass-flux clouds. - IF (bl_mynn_cloudpdf .LT. 0) THEN - DO k = kts,kte-1 - cldfra_bl1D(k) = 0.0 - qc_bl1D(k) = 0.0 - qi_bl1D(k) = 0.0 - END DO - ENDIF -! - ql(kte) = ql(kte-1) - vt(kte) = vt(kte-1) - vq(kte) = vq(kte-1) - qc_bl1D(kte)=0. - qi_bl1D(kte)=0. - cldfra_bl1D(kte)=0. - RETURN - -#ifdef HARDCODE_VERTICAL -# undef kts -# undef kte -#endif - - END SUBROUTINE mym_condensation - -! ================================================================== -!>\ingroup gsd_mynn_edmf -!! This subroutine solves for tendencies of U, V, \f$\theta\f$, qv, -!! qc, and qi - SUBROUTINE mynn_tendencies(kts,kte, & - &delt,dz,rho, & - &u,v,th,tk,qv,qc,qi,qs,qnc,qni, & - &psfc,p,exner, & - &thl,sqv,sqc,sqi,sqs,sqw, & - &qnwfa,qnifa,qnbca,ozone, & - &ust,flt,flq,flqv,flqc,wspd, & - &uoce,voce, & - &tsq,qsq,cov, & - &tcd,qcd, & - &dfm,dfh,dfq, & - &Du,Dv,Dth,Dqv,Dqc,Dqi,Dqs,Dqnc,Dqni, & - &Dqnwfa,Dqnifa,Dqnbca,Dozone, & - &diss_heat, & - &s_aw,s_awthl,s_awqt,s_awqv,s_awqc, & - &s_awu,s_awv, & - &s_awqnc,s_awqni, & - &s_awqnwfa,s_awqnifa,s_awqnbca, & - &sd_aw,sd_awthl,sd_awqt,sd_awqv, & - &sd_awqc,sd_awu,sd_awv, & - &sub_thl,sub_sqv, & - &sub_u,sub_v, & - &det_thl,det_sqv,det_sqc, & - &det_u,det_v, & - &FLAG_QC,FLAG_QI,FLAG_QNC,FLAG_QNI, & - &FLAG_QS, & - &FLAG_QNWFA,FLAG_QNIFA,FLAG_QNBCA, & - &FLAG_OZONE, & - &cldfra_bl1d, & - &bl_mynn_cloudmix, & - &bl_mynn_mixqt, & - &bl_mynn_edmf_mom, & - &bl_mynn_mixscalars ) - -!------------------------------------------------------------------- - integer, intent(in) :: kts,kte - -#ifdef HARDCODE_VERTICAL -# define kts 1 -# define kte HARDCODE_VERTICAL -#endif - - logical, intent(in) :: bl_mynn_edmf_mom - logical, intent(in) :: bl_mynn_mixscalars,bl_mynn_cloudmix,bl_mynn_mixqt - logical, intent(in) :: FLAG_QI,FLAG_QNI,FLAG_QC,FLAG_QS, & - &FLAG_QNC,FLAG_QNWFA,FLAG_QNIFA,FLAG_QNBCA,FLAG_OZONE - -! thl - liquid water potential temperature -! qw - total water -! dfm,dfh,dfq - diffusivities i.e., dfh(k) = elq*sh(k) / dzk -! flt - surface flux of thl -! flq - surface flux of qw - -! mass-flux plumes - real(kind_phys), dimension(kts:kte+1), intent(in) :: s_aw, & - &s_awthl,s_awqt,s_awqnc,s_awqni,s_awqv,s_awqc,s_awu,s_awv, & - &s_awqnwfa,s_awqnifa,s_awqnbca, & - &sd_aw,sd_awthl,sd_awqt,sd_awqv,sd_awqc,sd_awu,sd_awv -! tendencies from mass-flux environmental subsidence and detrainment - real(kind_phys), dimension(kts:kte), intent(in) :: sub_thl,sub_sqv, & - &sub_u,sub_v,det_thl,det_sqv,det_sqc,det_u,det_v - real(kind_phys), dimension(kts:kte), intent(in) :: u,v,th,tk,qv,qc,qi,& - &qs,qni,qnc,rho,p,exner,dfq,dz,tsq,qsq,cov,tcd,qcd, & - &cldfra_bl1d,diss_heat - real(kind_phys), dimension(kts:kte), intent(inout) :: thl,sqw,sqv,sqc,& - &sqi,sqs,qnwfa,qnifa,qnbca,ozone,dfm,dfh - real(kind_phys), dimension(kts:kte), intent(inout) :: du,dv,dth,dqv, & - &dqc,dqi,dqs,dqni,dqnc,dqnwfa,dqnifa,dqnbca,dozone - real(kind_phys), intent(in) :: flt,flq,flqv,flqc,uoce,voce - real(kind_phys), intent(in) :: ust,delt,psfc,wspd - !debugging - real(kind_phys):: wsp,wsp2,tk2,th2 - logical :: problem - integer :: kproblem - -! real(kind_phys), intent(in) :: gradu_top,gradv_top,gradth_top,gradqv_top - -!local vars - - real(kind_phys), dimension(kts:kte) :: dtz,dfhc,dfmc,delp - real(kind_phys), dimension(kts:kte) :: sqv2,sqc2,sqi2,sqs2,sqw2, & - &qni2,qnc2,qnwfa2,qnifa2,qnbca2,ozone2 - real(kind_phys), dimension(kts:kte) :: zfac,plumeKh,rhoinv - real(kind_phys), dimension(kts:kte) :: a,b,c,d,x - real(kind_phys), dimension(kts:kte+1) :: rhoz, & !rho on model interface - &khdz,kmdz - real(kind_phys):: rhs,gfluxm,gfluxp,dztop,maxdfh,mindfh,maxcf,maxKh,zw - real(kind_phys):: t,esat,qsl,onoff,kh,km,dzk,rhosfc - real(kind_phys):: ustdrag,ustdiff,qvflux - real(kind_phys):: th_new,portion_qc,portion_qi,condensate,qsat - integer :: k,kk - - !Activate nonlocal mixing from the mass-flux scheme for - !number concentrations and aerosols (0.0 = no; 1.0 = yes) - real(kind_phys), parameter :: nonloc = 1.0 - - dztop=.5*(dz(kte)+dz(kte-1)) - - ! REGULATE THE MOMENTUM MIXING FROM THE MASS-FLUX SCHEME (on or off) - ! Note that s_awu and s_awv already come in as 0.0 if bl_mynn_edmf_mom == .false., so - ! we only need to zero-out the MF term - IF (.not. bl_mynn_edmf_mom) THEN - onoff=0.0 - ELSE - onoff=1.0 - ENDIF - - !Prepare "constants" for diffusion equation. - !khdz = rho*Kh/dz = rho*dfh - rhosfc = psfc/(R_d*(tk(kts)+p608*qv(kts))) - dtz(kts) =delt/dz(kts) - rhoz(kts) =rho(kts) - rhoinv(kts)=1./rho(kts) - khdz(kts) =rhoz(kts)*dfh(kts) - kmdz(kts) =rhoz(kts)*dfm(kts) - delp(kts) = psfc - (p(kts+1)*dz(kts) + p(kts)*dz(kts+1))/(dz(kts)+dz(kts+1)) - DO k=kts+1,kte - dtz(k) =delt/dz(k) - rhoz(k) =(rho(k)*dz(k-1) + rho(k-1)*dz(k))/(dz(k-1)+dz(k)) - rhoz(k) = MAX(rhoz(k),1E-4) - rhoinv(k)=1./MAX(rho(k),1E-4) - dzk = 0.5 *( dz(k)+dz(k-1) ) - khdz(k) = rhoz(k)*dfh(k) - kmdz(k) = rhoz(k)*dfm(k) - ENDDO - DO k=kts+1,kte-1 - delp(k) = (p(k)*dz(k-1) + p(k-1)*dz(k))/(dz(k)+dz(k-1)) - & - (p(k+1)*dz(k) + p(k)*dz(k+1))/(dz(k)+dz(k+1)) - ENDDO - delp(kte) =delp(kte-1) - rhoz(kte+1)=rhoz(kte) - khdz(kte+1)=rhoz(kte+1)*dfh(kte) - kmdz(kte+1)=rhoz(kte+1)*dfm(kte) - - !stability criteria for mf - DO k=kts+1,kte-1 - khdz(k) = MAX(khdz(k), 0.5*s_aw(k)) - khdz(k) = MAX(khdz(k), -0.5*(s_aw(k)-s_aw(k+1))) - kmdz(k) = MAX(kmdz(k), 0.5*s_aw(k)) - kmdz(k) = MAX(kmdz(k), -0.5*(s_aw(k)-s_aw(k+1))) - ENDDO - - ustdrag = MIN(ust*ust,0.99)/wspd ! limit at ~ 20 m/s - ustdiff = MIN(ust*ust,0.01)/wspd ! limit at ~ 2 m/s - dth(kts:kte) = 0.0 ! must initialize for moisture_check routine - -!!============================================ -!! u -!!============================================ - - k=kts - -!rho-weighted (drag in b-vector): - a(k)= -dtz(k)*kmdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(kmdz(k+1)+rhosfc*ust**2/wspd)*rhoinv(k) & - & - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*onoff & - & - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1)*onoff - c(k)= -dtz(k)*kmdz(k+1)*rhoinv(k) & - & - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*onoff & - & - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1)*onoff - d(k)=u(k) + dtz(k)*uoce*ust**2/wspd & - & - dtz(k)*rhoinv(k)*s_awu(k+1)*onoff & - & + dtz(k)*rhoinv(k)*sd_awu(k+1)*onoff & - & + sub_u(k)*delt + det_u(k)*delt - - do k=kts+1,kte-1 - a(k)= -dtz(k)*kmdz(k)*rhoinv(k) & - & + 0.5*dtz(k)*rhoinv(k)*s_aw(k)*onoff & - & + 0.5*dtz(k)*rhoinv(k)*sd_aw(k)*onoff - b(k)=1.+ dtz(k)*(kmdz(k)+kmdz(k+1))*rhoinv(k) & - & + 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1))*onoff & - & + 0.5*dtz(k)*rhoinv(k)*(sd_aw(k)-sd_aw(k+1))*onoff - c(k)= - dtz(k)*kmdz(k+1)*rhoinv(k) & - & - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*onoff & - & - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1)*onoff - d(k)=u(k) + dtz(k)*rhoinv(k)*(s_awu(k)-s_awu(k+1))*onoff & - & - dtz(k)*rhoinv(k)*(sd_awu(k)-sd_awu(k+1))*onoff & - & + sub_u(k)*delt + det_u(k)*delt - enddo - -!! no flux at the top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=0. - -!! specified gradient at the top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=gradu_top*dztop - -!! prescribed value - a(kte)=0 - b(kte)=1. - c(kte)=0. - d(kte)=u(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte -! du(k)=(d(k-kts+1)-u(k))/delt - du(k)=(x(k)-u(k))/delt - ENDDO - -!!============================================ -!! v -!!============================================ - - k=kts - -!rho-weighted (drag in b-vector): - a(k)= -dtz(k)*kmdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(kmdz(k+1) + rhosfc*ust**2/wspd)*rhoinv(k) & - & - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*onoff & - & - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1)*onoff - c(k)= -dtz(k)*kmdz(k+1)*rhoinv(k) & - & - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*onoff & - & - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1)*onoff - d(k)=v(k) + dtz(k)*voce*ust**2/wspd & - & - dtz(k)*rhoinv(k)*s_awv(k+1)*onoff & - & + dtz(k)*rhoinv(k)*sd_awv(k+1)*onoff & - & + sub_v(k)*delt + det_v(k)*delt - - do k=kts+1,kte-1 - a(k)= -dtz(k)*kmdz(k)*rhoinv(k) & - & + 0.5*dtz(k)*rhoinv(k)*s_aw(k)*onoff & - & + 0.5*dtz(k)*rhoinv(k)*sd_aw(k)*onoff - b(k)=1.+dtz(k)*(kmdz(k)+kmdz(k+1))*rhoinv(k) & - & + 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1))*onoff & - & + 0.5*dtz(k)*rhoinv(k)*(sd_aw(k)-sd_aw(k+1))*onoff - c(k)= -dtz(k)*kmdz(k+1)*rhoinv(k) & - & - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*onoff & - & - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1)*onoff - d(k)=v(k) + dtz(k)*rhoinv(k)*(s_awv(k)-s_awv(k+1))*onoff & - & - dtz(k)*rhoinv(k)*(sd_awv(k)-sd_awv(k+1))*onoff & - & + sub_v(k)*delt + det_v(k)*delt - enddo - -!! no flux at the top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=0. - -!! specified gradient at the top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=gradv_top*dztop - -!! prescribed value - a(kte)=0 - b(kte)=1. - c(kte)=0. - d(kte)=v(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte -! dv(k)=(d(k-kts+1)-v(k))/delt - dv(k)=(x(k)-v(k))/delt - ENDDO - -!!============================================ -!! thl tendency -!!============================================ - k=kts - -! a(k)=0. -! b(k)=1.+dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! c(k)= -dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! d(k)=thl(k) + dtz(k)*flt + tcd(k)*delt & -! & -dtz(k)*s_awthl(kts+1) + diss_heat(k)*delt + & -! & sub_thl(k)*delt + det_thl(k)*delt -! -! DO k=kts+1,kte-1 -! a(k)= -dtz(k)*dfh(k) + 0.5*dtz(k)*s_aw(k) -! b(k)=1.+dtz(k)*(dfh(k)+dfh(k+1)) + 0.5*dtz(k)*(s_aw(k)-s_aw(k+1)) -! c(k)= -dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! d(k)=thl(k) + tcd(k)*delt + dtz(k)*(s_awthl(k)-s_awthl(k+1)) & -! & + diss_heat(k)*delt + & -! & sub_thl(k)*delt + det_thl(k)*delt -! ENDDO - -!rho-weighted: rhosfc*X*rhoinv(k) - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - d(k)=thl(k) + dtz(k)*rhosfc*flt*rhoinv(k) + tcd(k)*delt & - & - dtz(k)*rhoinv(k)*s_awthl(k+1) -dtz(k)*rhoinv(k)*sd_awthl(k+1) + & - & diss_heat(k)*delt + sub_thl(k)*delt + det_thl(k)*delt - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k) + 0.5*dtz(k)*rhoinv(k)*sd_aw(k) - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1)) + 0.5*dtz(k)*rhoinv(k)*(sd_aw(k)-sd_aw(k+1)) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - d(k)=thl(k) + tcd(k)*delt + & - & dtz(k)*rhoinv(k)*(s_awthl(k)-s_awthl(k+1)) + dtz(k)*rhoinv(k)*(sd_awthl(k)-sd_awthl(k+1)) + & - & diss_heat(k)*delt + & - & sub_thl(k)*delt + det_thl(k)*delt - ENDDO - -!! no flux at the top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=0. - -!! specified gradient at the top -!assume gradthl_top=gradth_top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=gradth_top*dztop - -!! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=thl(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte - !thl(k)=d(k-kts+1) - thl(k)=x(k) - ENDDO - -IF (bl_mynn_mixqt) THEN - !============================================ - ! MIX total water (sqw = sqc + sqv + sqi) - ! NOTE: no total water tendency is output; instead, we must calculate - ! the saturation specific humidity and then - ! subtract out the moisture excess (sqc & sqi) - !============================================ - - k=kts - -! a(k)=0. -! b(k)=1.+dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! c(k)= -dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! !rhs= qcd(k) !+ (gfluxp - gfluxm)/dz(k)& -! d(k)=sqw(k) + dtz(k)*flq + qcd(k)*delt - dtz(k)*s_awqt(k+1) -! -! DO k=kts+1,kte-1 -! a(k)= -dtz(k)*dfh(k) + 0.5*dtz(k)*s_aw(k) -! b(k)=1.+dtz(k)*(dfh(k)+dfh(k+1)) + 0.5*dtz(k)*(s_aw(k)-s_aw(k+1)) -! c(k)= -dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! d(k)=sqw(k) + qcd(k)*delt + dtz(k)*(s_awqt(k)-s_awqt(k+1)) -! ENDDO - -!rho-weighted: - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - d(k)=sqw(k) + dtz(k)*rhosfc*flq*rhoinv(k) + qcd(k)*delt - dtz(k)*rhoinv(k)*s_awqt(k+1) - dtz(k)*rhoinv(k)*sd_awqt(k+1) - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k) + 0.5*dtz(k)*rhoinv(k)*sd_aw(k) - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1)) + 0.5*dtz(k)*rhoinv(k)*(sd_aw(k)-sd_aw(k+1)) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - d(k)=sqw(k) + qcd(k)*delt + dtz(k)*rhoinv(k)*(s_awqt(k)-s_awqt(k+1)) + dtz(k)*rhoinv(k)*(sd_awqt(k)-sd_awqt(k+1)) - ENDDO - -!! no flux at the top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=0. -!! specified gradient at the top -!assume gradqw_top=gradqv_top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=gradqv_top*dztop -!! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=sqw(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,sqw2) -! CALL tridiag3(kte,a,b,c,d,sqw2) - -! DO k=kts,kte -! sqw2(k)=d(k-kts+1) -! ENDDO -ELSE - sqw2=sqw -ENDIF - -IF (.not. bl_mynn_mixqt) THEN -!============================================ -! cloud water ( sqc ). If mixing total water (bl_mynn_mixqt > 0), -! then sqc will be backed out of saturation check (below). -!============================================ - IF (bl_mynn_cloudmix .AND. FLAG_QC) THEN - - k=kts - -! a(k)=0. -! b(k)=1.+dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! c(k)= -dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! d(k)=sqc(k) + dtz(k)*flqc + qcd(k)*delt - & -! dtz(k)*s_awqc(k+1) + det_sqc(k)*delt -! -! DO k=kts+1,kte-1 -! a(k)= -dtz(k)*dfh(k) + 0.5*dtz(k)*s_aw(k) -! b(k)=1.+dtz(k)*(dfh(k)+dfh(k+1)) + 0.5*dtz(k)*(s_aw(k)-s_aw(k+1)) -! c(k)= -dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! d(k)=sqc(k) + qcd(k)*delt + dtz(k)*(s_awqc(k)-s_awqc(k+1)) + & -! det_sqc(k)*delt -! ENDDO - -!rho-weighted: - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - d(k)=sqc(k) + dtz(k)*rhosfc*flqc*rhoinv(k) + qcd(k)*delt & - & - dtz(k)*rhoinv(k)*s_awqc(k+1) - dtz(k)*rhoinv(k)*sd_awqc(k+1) + & - & det_sqc(k)*delt - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k) + 0.5*dtz(k)*rhoinv(k)*sd_aw(k) - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1)) + 0.5*dtz(k)*rhoinv(k)*(sd_aw(k)-sd_aw(k+1)) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - d(k)=sqc(k) + qcd(k)*delt + dtz(k)*rhoinv(k)*(s_awqc(k)-s_awqc(k+1)) + dtz(k)*rhoinv(k)*(sd_awqc(k)-sd_awqc(k+1)) + & - & det_sqc(k)*delt - ENDDO - -! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=sqc(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,sqc2) -! CALL tridiag3(kte,a,b,c,d,sqc2) - -! DO k=kts,kte -! sqc2(k)=d(k-kts+1) -! ENDDO - ELSE - !If not mixing clouds, set "updated" array equal to original array - sqc2=sqc - ENDIF -ENDIF - -IF (.not. bl_mynn_mixqt) THEN - !============================================ - ! MIX WATER VAPOR ONLY ( sqv ). If mixing total water (bl_mynn_mixqt > 0), - ! then sqv will be backed out of saturation check (below). - !============================================ - - k=kts - -! a(k)=0. -! b(k)=1.+dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! c(k)= -dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! d(k)=sqv(k) + dtz(k)*flqv + qcd(k)*delt - dtz(k)*s_awqv(k+1) + & -! & sub_sqv(k)*delt + det_sqv(k)*delt -! -! DO k=kts+1,kte-1 -! a(k)= -dtz(k)*dfh(k) + 0.5*dtz(k)*s_aw(k) -! b(k)=1.+dtz(k)*(dfh(k)+dfh(k+1)) + 0.5*dtz(k)*(s_aw(k)-s_aw(k+1)) -! c(k)= -dtz(k)*dfh(k+1) - 0.5*dtz(k)*s_aw(k+1) -! d(k)=sqv(k) + qcd(k)*delt + dtz(k)*(s_awqv(k)-s_awqv(k+1)) + & -! & sub_sqv(k)*delt + det_sqv(k)*delt -! ENDDO - - !limit unreasonably large negative fluxes: - qvflux = flqv - if (qvflux < 0.0) then - !do not allow specified surface flux to reduce qv below 1e-8 kg/kg - qvflux = max(qvflux, (min(0.9*sqv(kts) - 1e-8, 0.0)/dtz(kts))) - endif - -!rho-weighted: rhosfc*X*rhoinv(k) - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - d(k)=sqv(k) + dtz(k)*rhosfc*qvflux*rhoinv(k) + qcd(k)*delt & - & - dtz(k)*rhoinv(k)*s_awqv(k+1) - dtz(k)*rhoinv(k)*sd_awqv(k+1) + & - & sub_sqv(k)*delt + det_sqv(k)*delt - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k) + 0.5*dtz(k)*rhoinv(k)*sd_aw(k) - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1)) + 0.5*dtz(k)*rhoinv(k)*(sd_aw(k)-sd_aw(k+1)) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - 0.5*dtz(k)*rhoinv(k)*sd_aw(k+1) - d(k)=sqv(k) + qcd(k)*delt + dtz(k)*rhoinv(k)*(s_awqv(k)-s_awqv(k+1)) + dtz(k)*rhoinv(k)*(sd_awqv(k)-sd_awqv(k+1)) + & - & sub_sqv(k)*delt + det_sqv(k)*delt - ENDDO - -! no flux at the top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=0. - -! specified gradient at the top -! assume gradqw_top=gradqv_top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=gradqv_top*dztop - -! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=sqv(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,sqv2) -! CALL tridiag3(kte,a,b,c,d,sqv2) - -! DO k=kts,kte -! sqv2(k)=d(k-kts+1) -! ENDDO -ELSE - sqv2=sqv -ENDIF - -!============================================ -! MIX CLOUD ICE ( sqi ) -!============================================ -IF (bl_mynn_cloudmix .AND. FLAG_QI) THEN - - k=kts -!rho-weighted: - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - d(k)=sqi(k) - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - d(k)=sqi(k) - ENDDO - -!! no flux at the top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=0. - -!! specified gradient at the top -!assume gradqw_top=gradqv_top -! a(kte)=-1. -! b(kte)=1. -! c(kte)=0. -! d(kte)=gradqv_top*dztop - -!! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=sqi(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,sqi2) -! CALL tridiag3(kte,a,b,c,d,sqi2) - -! DO k=kts,kte -! sqi2(k)=d(k-kts+1) -! ENDDO -ELSE - sqi2=sqi -ENDIF - -!============================================ -! MIX SNOW ( sqs ) -!============================================ -!hard-code to not mix snow -IF (bl_mynn_cloudmix .AND. .false.) THEN - - k=kts -!rho-weighted: - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - d(k)=sqs(k) - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - d(k)=sqs(k) - ENDDO - -!! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=sqs(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,sqs2) -! CALL tridiag3(kte,a,b,c,d,sqs2) - -! DO k=kts,kte -! sqs2(k)=d(k-kts+1) -! ENDDO -ELSE - sqs2=sqs -ENDIF - -!!============================================ -!! cloud ice number concentration (qni) -!!============================================ -IF (bl_mynn_cloudmix .AND. FLAG_QNI .AND. & - bl_mynn_mixscalars) THEN - - k=kts - - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qni(k) - dtz(k)*rhoinv(k)*s_awqni(k+1)*nonloc - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k)*nonloc - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1))*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qni(k) + dtz(k)*rhoinv(k)*(s_awqni(k)-s_awqni(k+1))*nonloc - ENDDO - -!! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=qni(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte - !qni2(k)=d(k-kts+1) - qni2(k)=x(k) - ENDDO - -ELSE - qni2=qni -ENDIF - -!!============================================ -!! cloud water number concentration (qnc) -!! include non-local transport -!!============================================ - IF (bl_mynn_cloudmix .AND. FLAG_QNC .AND. & - bl_mynn_mixscalars) THEN - - k=kts - - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qnc(k) - dtz(k)*rhoinv(k)*s_awqnc(k+1)*nonloc - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k)*nonloc - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1))*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qnc(k) + dtz(k)*rhoinv(k)*(s_awqnc(k)-s_awqnc(k+1))*nonloc - ENDDO - -!! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=qnc(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte - !qnc2(k)=d(k-kts+1) - qnc2(k)=x(k) - ENDDO - -ELSE - qnc2=qnc -ENDIF - -!============================================ -! Water-friendly aerosols ( qnwfa ). -!============================================ -IF (bl_mynn_cloudmix .AND. FLAG_QNWFA .AND. & - bl_mynn_mixscalars) THEN - - k=kts - - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k) + khdz(k+1))*rhoinv(k) - & - & 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qnwfa(k) - dtz(k)*rhoinv(k)*s_awqnwfa(k+1)*nonloc - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k)*nonloc - b(k)=1.+dtz(k)*(khdz(k) + khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1))*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qnwfa(k) + dtz(k)*rhoinv(k)*(s_awqnwfa(k)-s_awqnwfa(k+1))*nonloc - ENDDO - -! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=qnwfa(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte - !qnwfa2(k)=d(k) - qnwfa2(k)=x(k) - ENDDO - -ELSE - !If not mixing aerosols, set "updated" array equal to original array - qnwfa2=qnwfa -ENDIF - -!============================================ -! Ice-friendly aerosols ( qnifa ). -!============================================ -IF (bl_mynn_cloudmix .AND. FLAG_QNIFA .AND. & - bl_mynn_mixscalars) THEN - - k=kts - - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k) + khdz(k+1))*rhoinv(k) - & - & 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qnifa(k) - dtz(k)*rhoinv(k)*s_awqnifa(k+1)*nonloc - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k)*nonloc - b(k)=1.+dtz(k)*(khdz(k) + khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1))*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qnifa(k) + dtz(k)*rhoinv(k)*(s_awqnifa(k)-s_awqnifa(k+1))*nonloc - ENDDO - -! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=qnifa(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte - !qnifa2(k)=d(k-kts+1) - qnifa2(k)=x(k) - ENDDO - -ELSE - !If not mixing aerosols, set "updated" array equal to original array - qnifa2=qnifa -ENDIF - -!============================================ -! Black-carbon aerosols ( qnbca ). -!============================================ -IF (bl_mynn_cloudmix .AND. FLAG_QNBCA .AND. & - bl_mynn_mixscalars) THEN - - k=kts - - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k) + khdz(k+1))*rhoinv(k) - & - & 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qnbca(k) - dtz(k)*rhoinv(k)*s_awqnbca(k+1)*nonloc - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k)*nonloc - b(k)=1.+dtz(k)*(khdz(k) + khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1))*nonloc - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1)*nonloc - d(k)=qnbca(k) + dtz(k)*rhoinv(k)*(s_awqnbca(k)-s_awqnbca(k+1))*nonloc - ENDDO - -! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=qnbca(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte - !qnbca2(k)=d(k-kts+1) - qnbca2(k)=x(k) - ENDDO - -ELSE - !If not mixing aerosols, set "updated" array equal to original array - qnbca2=qnbca -ENDIF - -!============================================ -! Ozone - local mixing only -!============================================ -IF (FLAG_OZONE) THEN - k=kts - -!rho-weighted: - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - d(k)=ozone(k) - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - d(k)=ozone(k) - ENDDO - -! prescribed value - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=ozone(kte) - -! CALL tridiag(kte,a,b,c,d) - CALL tridiag2(kte,a,b,c,d,x) -! CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte - !ozone2(k)=d(k-kts+1) - dozone(k)=(x(k)-ozone(k))/delt - ENDDO -ELSE - dozone(:)=0.0 -ENDIF - -!!============================================ -!! Compute tendencies and convert to mixing ratios for WRF. -!! Note that the momentum tendencies are calculated above. -!!============================================ - - IF (bl_mynn_mixqt) THEN - DO k=kts,kte - !compute updated theta using updated thl and old condensate - th_new = thl(k) + xlvcp/exner(k)*sqc(k) & - & + xlscp/exner(k)*sqi(k) - - t = th_new*exner(k) - qsat = qsat_blend(t,t0c,tice,p(k)) - !SATURATED VAPOR PRESSURE - !esat=esat_blend(t,t0c,tice) - !SATURATED SPECIFIC HUMIDITY - !qsl=ep_2*esat/(p(k)-ep_3*esat) - !qsl=ep_2*esat/max(1.e-4,(p(k)-ep_3*esat)) - - IF (sqc(k) > 0.0 .or. sqi(k) > 0.0) THEN !initially saturated - sqv2(k) = MIN(sqw2(k),qsat) - portion_qc = sqc(k)/(sqc(k) + sqi(k)) - portion_qi = sqi(k)/(sqc(k) + sqi(k)) - condensate = MAX(sqw2(k) - qsat, 0.0) - sqc2(k) = condensate*portion_qc - sqi2(k) = condensate*portion_qi - ELSE ! initially unsaturated ----- - sqv2(k) = sqw2(k) ! let microphys decide what to do - sqi2(k) = 0.0 ! if sqw2 > qsat - sqc2(k) = 0.0 - ENDIF - ENDDO - ENDIF - - - !===================== - ! WATER VAPOR TENDENCY - !===================== - DO k=kts,kte - Dqv(k)=(sqv2(k) - sqv(k))/delt - !if (sqv2(k) < 0.0)print*,"neg qv:",sqv2(k),k - ENDDO - - IF (bl_mynn_cloudmix) THEN - !===================== - ! CLOUD WATER TENDENCY - !===================== - !print*,"FLAG_QC:",FLAG_QC - IF (FLAG_QC) THEN - DO k=kts,kte - Dqc(k)=(sqc2(k) - sqc(k))/delt - !if (sqc2(k) < 0.0)print*,"neg qc:",sqc2(k),k - ENDDO - ELSE - DO k=kts,kte - Dqc(k) = 0. - ENDDO - ENDIF - - !=================== - ! CLOUD WATER NUM CONC TENDENCY - !=================== - IF (FLAG_QNC .AND. bl_mynn_mixscalars) THEN - DO k=kts,kte - Dqnc(k) = (qnc2(k)-qnc(k))/delt - !IF(Dqnc(k)*delt + qnc(k) < 0.)Dqnc(k)=-qnc(k)/delt - ENDDO - ELSE - DO k=kts,kte - Dqnc(k) = 0. - ENDDO - ENDIF - - !=================== - ! CLOUD ICE TENDENCY - !=================== - IF (FLAG_QI) THEN - DO k=kts,kte - Dqi(k)=(sqi2(k) - sqi(k))/delt - !if (sqi2(k) < 0.0)print*,"neg qi:",sqi2(k),k - ENDDO - ELSE - DO k=kts,kte - Dqi(k) = 0. - ENDDO - ENDIF - - !=================== - ! CLOUD SNOW TENDENCY - !=================== - IF (.false.) THEN !disabled - DO k=kts,kte - Dqs(k)=(sqs2(k) - sqs(k))/delt - ENDDO - ELSE - DO k=kts,kte - Dqs(k) = 0. - ENDDO - ENDIF - - !=================== - ! CLOUD ICE NUM CONC TENDENCY - !=================== - IF (FLAG_QNI .AND. bl_mynn_mixscalars) THEN - DO k=kts,kte - Dqni(k)=(qni2(k)-qni(k))/delt - !IF(Dqni(k)*delt + qni(k) < 0.)Dqni(k)=-qni(k)/delt - ENDDO - ELSE - DO k=kts,kte - Dqni(k)=0. - ENDDO - ENDIF - ELSE !-MIX CLOUD SPECIES? - !CLOUDS ARE NOT MIXED (when bl_mynn_cloudmix == .false.) - DO k=kts,kte - Dqc(k) =0. - Dqnc(k)=0. - Dqi(k) =0. - Dqni(k)=0. - Dqs(k) =0. - ENDDO - ENDIF - - !ensure non-negative moist species - CALL moisture_check(kte, delt, delp, exner, & - sqv2, sqc2, sqi2, sqs2, thl, & - dqv, dqc, dqi, dqs, dth ) - - !===================== - ! OZONE TENDENCY CHECK - !===================== - DO k=kts,kte - IF(Dozone(k)*delt + ozone(k) < 0.) THEN - Dozone(k)=-ozone(k)*0.99/delt - ENDIF - ENDDO - - !=================== - ! THETA TENDENCY - !=================== - IF (FLAG_QI) THEN - DO k=kts,kte - Dth(k)=(thl(k) + xlvcp/exner(k)*sqc2(k) & - & + xlscp/exner(k)*(sqi2(k)+sqs(k)) & - & - th(k))/delt - !Use form from Tripoli and Cotton (1981) with their - !suggested min temperature to improve accuracy: - !Dth(k)=(thl(k)*(1.+ xlvcp/MAX(tk(k),TKmin)*sqc(k) & - ! & + xlscp/MAX(tk(k),TKmin)*sqi(k)) & - ! & - th(k))/delt - ENDDO - ELSE - DO k=kts,kte - Dth(k)=(thl(k)+xlvcp/exner(k)*sqc2(k) - th(k))/delt - !Use form from Tripoli and Cotton (1981) with their - !suggested min temperature to improve accuracy. - !Dth(k)=(thl(k)*(1.+ xlvcp/MAX(tk(k),TKmin)*sqc(k)) & - !& - th(k))/delt - ENDDO - ENDIF - - !=================== - ! AEROSOL TENDENCIES - !=================== - IF (FLAG_QNWFA .AND. FLAG_QNIFA .AND. & - bl_mynn_mixscalars) THEN - DO k=kts,kte - !===================== - ! WATER-friendly aerosols - !===================== - Dqnwfa(k)=(qnwfa2(k) - qnwfa(k))/delt - !===================== - ! Ice-friendly aerosols - !===================== - Dqnifa(k)=(qnifa2(k) - qnifa(k))/delt - ENDDO - ELSE - DO k=kts,kte - Dqnwfa(k)=0. - Dqnifa(k)=0. - ENDDO - ENDIF - - !======================== - ! BLACK-CARBON TENDENCIES - !======================== - IF (FLAG_QNBCA .AND. bl_mynn_mixscalars) THEN - DO k=kts,kte - Dqnbca(k)=(qnbca2(k) - qnbca(k))/delt - ENDDO - ELSE - DO k=kts,kte - Dqnbca(k)=0. - ENDDO - ENDIF - - !ensure non-negative moist species - !note: if called down here, dth needs to be updated, but - ! if called before the theta-tendency calculation, do not compute dth - !CALL moisture_check(kte, delt, delp, exner, & - ! sqv, sqc, sqi, thl, & - ! dqv, dqc, dqi, dth ) - - if (debug_code) then - problem = .false. - do k=kts,kte - wsp = sqrt(u(k)**2 + v(k)**2) - wsp2 = sqrt((u(k)+du(k)*delt)**2 + (v(k)+du(k)*delt)**2) - th2 = th(k) + Dth(k)*delt - tk2 = th2*exner(k) - if (wsp2 > 200. .or. tk2 > 360. .or. tk2 < 160.) then - problem = .true. - print*,"Outgoing problem at: k=",k - print*," incoming wsp=",wsp," outgoing wsp=",wsp2 - print*," incoming T=",th(k)*exner(k),"outgoing T:",tk2 - print*," du=",du(k)*delt," dv=",dv(k)*delt," dth=",dth(k)*delt - print*," km=",kmdz(k)*dz(k)," kh=",khdz(k)*dz(k) - print*," u*=",ust," wspd=",wspd,"rhosfc=",rhosfc - print*," LH=",flq*rhosfc*1004.," HFX=",flt*rhosfc*1004. - print*," drag term=",ust**2/wspd*dtz(k)*rhosfc/rho(kts) - kproblem = k - endif - enddo - if (problem) then - print*,"==thl:",thl(max(kproblem-3,1):min(kproblem+3,kte)) - print*,"===qv:",sqv2(max(kproblem-3,1):min(kproblem+3,kte)) - print*,"===qc:",sqc2(max(kproblem-3,1):min(kproblem+3,kte)) - print*,"===qi:",sqi2(max(kproblem-3,1):min(kproblem+3,kte)) - print*,"====u:",u(max(kproblem-3,1):min(kproblem+3,kte)) - print*,"====v:",v(max(kproblem-3,1):min(kproblem+3,kte)) - endif - endif - -#ifdef HARDCODE_VERTICAL -# undef kts -# undef kte -#endif - - END SUBROUTINE mynn_tendencies - -! ================================================================== - SUBROUTINE moisture_check(kte, delt, dp, exner, & - qv, qc, qi, qs, th, & - dqv, dqc, dqi, dqs, dth ) - - ! This subroutine was adopted from the CAM-UW ShCu scheme and - ! adapted for use here. - ! - ! If qc < qcmin, qi < qimin, or qv < qvmin happens in any layer, - ! force them to be larger than minimum value by (1) condensating - ! water vapor into liquid or ice, and (2) by transporting water vapor - ! from the very lower layer. - ! - ! We then update the final state variables and tendencies associated - ! with this correction. If any condensation happens, update theta too. - ! Note that (qv,qc,qi,th) are the final state variables after - ! applying corresponding input tendencies and corrective tendencies. - - implicit none - integer, intent(in) :: kte - real(kind_phys), intent(in) :: delt - real(kind_phys), dimension(kte), intent(in) :: dp, exner - real(kind_phys), dimension(kte), intent(inout) :: qv, qc, qi, qs, th - real(kind_phys), dimension(kte), intent(inout) :: dqv, dqc, dqi, dqs, dth - integer k - real(kind_phys):: dqc2, dqi2, dqs2, dqv2, sum, aa, dum - real(kind_phys), parameter :: qvmin = 1e-20, & - qcmin = 0.0, & - qimin = 0.0 - - do k = kte, 1, -1 ! From the top to the surface - dqc2 = max(0.0, qcmin-qc(k)) !qc deficit (>=0) - dqi2 = max(0.0, qimin-qi(k)) !qi deficit (>=0) - dqs2 = max(0.0, qimin-qs(k)) !qs deficit (>=0) - - !fix tendencies - dqc(k) = dqc(k) + dqc2/delt - dqi(k) = dqi(k) + dqi2/delt - dqs(k) = dqs(k) + dqs2/delt - dqv(k) = dqv(k) - (dqc2+dqi2+dqs2)/delt - dth(k) = dth(k) + xlvcp/exner(k)*(dqc2/delt) + & - xlscp/exner(k)*((dqi2+dqs2)/delt) - !update species - qc(k) = qc(k) + dqc2 - qi(k) = qi(k) + dqi2 - qs(k) = qs(k) + dqs2 - qv(k) = qv(k) - dqc2 - dqi2 - dqs2 - th(k) = th(k) + xlvcp/exner(k)*dqc2 + & - xlscp/exner(k)*(dqi2+dqs2) - - !then fix qv - dqv2 = max(0.0, qvmin-qv(k)) !qv deficit (>=0) - dqv(k) = dqv(k) + dqv2/delt - qv(k) = qv(k) + dqv2 - if( k .ne. 1 ) then - qv(k-1) = qv(k-1) - dqv2*dp(k)/dp(k-1) - dqv(k-1) = dqv(k-1) - dqv2*dp(k)/dp(k-1)/delt - endif - qv(k) = max(qv(k),qvmin) - qc(k) = max(qc(k),qcmin) - qi(k) = max(qi(k),qimin) - qs(k) = max(qs(k),qimin) - end do - ! Extra moisture used to satisfy 'qv(1)>=qvmin' is proportionally - ! extracted from all the layers that has 'qv > 2*qvmin'. This fully - ! preserves column moisture. - if( dqv2 .gt. 1.e-20 ) then - sum = 0.0 - do k = 1, kte - if( qv(k) .gt. 2.0*qvmin ) sum = sum + qv(k)*dp(k) - enddo - aa = dqv2*dp(1)/max(1.e-20,sum) - if( aa .lt. 0.5 ) then - do k = 1, kte - if( qv(k) .gt. 2.0*qvmin ) then - dum = aa*qv(k) - qv(k) = qv(k) - dum - dqv(k) = dqv(k) - dum/delt - endif - enddo - else - ! For testing purposes only (not yet found in any output): - ! write(*,*) 'Full moisture conservation is impossible' - endif - endif - - return - - END SUBROUTINE moisture_check - -! ================================================================== - - SUBROUTINE mynn_mix_chem(kts,kte, & - delt,dz,pblh, & - nchem, kdvel, ndvel, & - chem1, vd1, & - rho, & - flt, tcd, qcd, & - dfh, & - s_aw, s_awchem, & - emis_ant_no, frp, rrfs_sd, & - enh_mix, smoke_dbg ) - -!------------------------------------------------------------------- - integer, intent(in) :: kts,kte - real(kind_phys), dimension(kts:kte), intent(in) :: dfh,dz,tcd,qcd - real(kind_phys), dimension(kts:kte), intent(inout) :: rho - real(kind_phys), intent(in) :: flt - real(kind_phys), intent(in) :: delt,pblh - integer, intent(in) :: nchem, kdvel, ndvel - real(kind_phys), dimension( kts:kte+1), intent(in) :: s_aw - real(kind_phys), dimension( kts:kte, nchem ), intent(inout) :: chem1 - real(kind_phys), dimension( kts:kte+1,nchem), intent(in) :: s_awchem - real(kind_phys), dimension( ndvel ), intent(in) :: vd1 - real(kind_phys), intent(in) :: emis_ant_no,frp - logical, intent(in) :: rrfs_sd,enh_mix,smoke_dbg -!local vars - - real(kind_phys), dimension(kts:kte) :: dtz - real(kind_phys), dimension(kts:kte) :: a,b,c,d,x - real(kind_phys):: rhs,dztop - real(kind_phys):: t,dzk - real(kind_phys):: hght - real(kind_phys):: khdz_old, khdz_back - integer :: k,kk,kmaxfire ! JLS 12/21/21 - integer :: ic ! Chemical array loop index - - integer, SAVE :: icall - - real(kind_phys), dimension(kts:kte) :: rhoinv - real(kind_phys), dimension(kts:kte+1) :: rhoz,khdz - real(kind_phys), parameter :: NO_threshold = 10.0 ! For anthropogenic sources - real(kind_phys), parameter :: frp_threshold = 10.0 ! RAR 02/11/22: I increased the frp threshold to enhance mixing over big fires - real(kind_phys), parameter :: pblh_threshold = 100.0 - - dztop=.5*(dz(kte)+dz(kte-1)) - - DO k=kts,kte - dtz(k)=delt/dz(k) - ENDDO - - !Prepare "constants" for diffusion equation. - !khdz = rho*Kh/dz = rho*dfh - rhoz(kts) =rho(kts) - rhoinv(kts)=1./rho(kts) - khdz(kts) =rhoz(kts)*dfh(kts) - - DO k=kts+1,kte - rhoz(k) =(rho(k)*dz(k-1) + rho(k-1)*dz(k))/(dz(k-1)+dz(k)) - rhoz(k) = MAX(rhoz(k),1E-4) - rhoinv(k)=1./MAX(rho(k),1E-4) - dzk = 0.5 *( dz(k)+dz(k-1) ) - khdz(k) = rhoz(k)*dfh(k) - ENDDO - rhoz(kte+1)=rhoz(kte) - khdz(kte+1)=rhoz(kte+1)*dfh(kte) - - !stability criteria for mf - DO k=kts+1,kte-1 - khdz(k) = MAX(khdz(k), 0.5*s_aw(k)) - khdz(k) = MAX(khdz(k), -0.5*(s_aw(k)-s_aw(k+1))) - ENDDO - - !Enhanced mixing over fires - IF ( rrfs_sd .and. enh_mix ) THEN - DO k=kts+1,kte-1 - khdz_old = khdz(k) - khdz_back = pblh * 0.15 / dz(k) - !Modify based on anthropogenic emissions of NO and FRP - IF ( pblh < pblh_threshold ) THEN - IF ( emis_ant_no > NO_threshold ) THEN - khdz(k) = MAX(1.1*khdz(k),sqrt((emis_ant_no / NO_threshold)) / dz(k) * rhoz(k)) ! JLS 12/21/21 -! khdz(k) = MAX(khdz(k),khdz_back) - ENDIF - IF ( frp > frp_threshold ) THEN - kmaxfire = ceiling(log(frp)) - khdz(k) = MAX(1.1*khdz(k), (1. - k/(kmaxfire*2.)) * ((log(frp))**2.- 2.*log(frp)) / dz(k)*rhoz(k)) ! JLS 12/21/21 -! khdz(k) = MAX(khdz(k),khdz_back) - ENDIF - ENDIF - ENDDO - ENDIF - - !============================================ - ! Patterned after mixing of water vapor in mynn_tendencies. - !============================================ - - DO ic = 1,nchem - k=kts - - a(k)= -dtz(k)*khdz(k)*rhoinv(k) - b(k)=1.+dtz(k)*(khdz(k+1)+khdz(k))*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - d(k)=chem1(k,ic) & !dtz(k)*flt !neglecting surface sources - & - dtz(k)*vd1(ic)*chem1(k,ic) & - & - dtz(k)*rhoinv(k)*s_awchem(k+1,ic) - - DO k=kts+1,kte-1 - a(k)= -dtz(k)*khdz(k)*rhoinv(k) + 0.5*dtz(k)*rhoinv(k)*s_aw(k) - b(k)=1.+dtz(k)*(khdz(k)+khdz(k+1))*rhoinv(k) + & - & 0.5*dtz(k)*rhoinv(k)*(s_aw(k)-s_aw(k+1)) - c(k)= -dtz(k)*khdz(k+1)*rhoinv(k) - 0.5*dtz(k)*rhoinv(k)*s_aw(k+1) - d(k)=chem1(k,ic) + dtz(k)*rhoinv(k)*(s_awchem(k,ic)-s_awchem(k+1,ic)) - ENDDO - - ! prescribed value at top - a(kte)=0. - b(kte)=1. - c(kte)=0. - d(kte)=chem1(kte,ic) - - CALL tridiag3(kte,a,b,c,d,x) - - DO k=kts,kte - chem1(k,ic)=x(k) - ENDDO - ENDDO - - END SUBROUTINE mynn_mix_chem - -! ================================================================== -!>\ingroup gsd_mynn_edmf - SUBROUTINE retrieve_exchange_coeffs(kts,kte,& - &dfm,dfh,dz,K_m,K_h) - -!------------------------------------------------------------------- - - integer , intent(in) :: kts,kte - - real(kind_phys), dimension(KtS:KtE), intent(in) :: dz,dfm,dfh - - real(kind_phys), dimension(KtS:KtE), intent(out) :: K_m, K_h - - - integer :: k - real(kind_phys):: dzk - - K_m(kts)=0. - K_h(kts)=0. - - DO k=kts+1,kte - dzk = 0.5 *( dz(k)+dz(k-1) ) - K_m(k)=dfm(k)*dzk - K_h(k)=dfh(k)*dzk - ENDDO - - END SUBROUTINE retrieve_exchange_coeffs - -! ================================================================== -!>\ingroup gsd_mynn_edmf - SUBROUTINE tridiag(n,a,b,c,d) - -!! to solve system of linear eqs on tridiagonal matrix n times n -!! after Peaceman and Rachford, 1955 -!! a,b,c,d - are vectors of order n -!! a,b,c - are coefficients on the LHS -!! d - is initially RHS on the output becomes a solution vector - -!------------------------------------------------------------------- - - integer, intent(in):: n - real(kind_phys), dimension(n), intent(in) :: a,b - real(kind_phys), dimension(n), intent(inout) :: c,d - - integer :: i - real(kind_phys):: p - real(kind_phys), dimension(n) :: q - - c(n)=0. - q(1)=-c(1)/b(1) - d(1)=d(1)/b(1) - - DO i=2,n - p=1./(b(i)+a(i)*q(i-1)) - q(i)=-c(i)*p - d(i)=(d(i)-a(i)*d(i-1))*p - ENDDO - - DO i=n-1,1,-1 - d(i)=d(i)+q(i)*d(i+1) - ENDDO - - END SUBROUTINE tridiag - -! ================================================================== -!>\ingroup gsd_mynn_edmf - subroutine tridiag2(n,a,b,c,d,x) - implicit none -! a - sub-diagonal (means it is the diagonal below the main diagonal) -! b - the main diagonal -! c - sup-diagonal (means it is the diagonal above the main diagonal) -! d - right part -! x - the answer -! n - number of unknowns (levels) - - integer,intent(in) :: n - real(kind_phys), dimension(n), intent(in) :: a,b,c,d - real(kind_phys), dimension(n), intent(out):: x - real(kind_phys), dimension(n) :: cp,dp - real(kind_phys):: m - integer :: i - - ! initialize c-prime and d-prime - cp(1) = c(1)/b(1) - dp(1) = d(1)/b(1) - ! solve for vectors c-prime and d-prime - do i = 2,n - m = b(i)-cp(i-1)*a(i) - cp(i) = c(i)/m - dp(i) = (d(i)-dp(i-1)*a(i))/m - enddo - ! initialize x - x(n) = dp(n) - ! solve for x from the vectors c-prime and d-prime - do i = n-1, 1, -1 - x(i) = dp(i)-cp(i)*x(i+1) - end do - - end subroutine tridiag2 -! ================================================================== -!>\ingroup gsd_mynn_edmf - subroutine tridiag3(kte,a,b,c,d,x) - -!ccccccccccccccccccccccccccccccc -! Aim: Inversion and resolution of a tridiagonal matrix -! A X = D -! Input: -! a(*) lower diagonal (Ai,i-1) -! b(*) principal diagonal (Ai,i) -! c(*) upper diagonal (Ai,i+1) -! d -! Output -! x results -!ccccccccccccccccccccccccccccccc - - implicit none - integer,intent(in) :: kte - integer, parameter :: kts=1 - real(kind_phys), dimension(kte) :: a,b,c,d - real(kind_phys), dimension(kte), intent(out) :: x - integer :: in - -! integer kms,kme,kts,kte,in -! real(kind_phys)a(kms:kme,3),c(kms:kme),x(kms:kme) - - do in=kte-1,kts,-1 - d(in)=d(in)-c(in)*d(in+1)/b(in+1) - b(in)=b(in)-c(in)*a(in+1)/b(in+1) - enddo - - do in=kts+1,kte - d(in)=d(in)-a(in)*d(in-1)/b(in-1) - enddo - - do in=kts,kte - x(in)=d(in)/b(in) - enddo - - return - end subroutine tridiag3 - -! ================================================================== -!>\ingroup gsd_mynn_edmf -!! This subroutine calculates hybrid diagnotic boundary-layer height (PBLH). -!! -!! NOTES ON THE PBLH FORMULATION: The 1.5-theta-increase method defines -!!PBL heights as the level at. -!!which the potential temperature first exceeds the minimum potential. -!!temperature within the boundary layer by 1.5 K. When applied to. -!!observed temperatures, this method has been shown to produce PBL- -!!height estimates that are unbiased relative to profiler-based. -!!estimates (Nielsen-Gammon et al. 2008 \cite Nielsen_Gammon_2008). -!! However, their study did not -!!include LLJs. Banta and Pichugina (2008) \cite Pichugina_2008 show that a TKE-based. -!!threshold is a good estimate of the PBL height in LLJs. Therefore, -!!a hybrid definition is implemented that uses both methods, weighting -!!the TKE-method more during stable conditions (PBLH < 400 m). -!!A variable tke threshold (TKEeps) is used since no hard-wired -!!value could be found to work best in all conditions. -!>\section gen_get_pblh GSD get_pblh General Algorithm -!> @{ - SUBROUTINE GET_PBLH(KTS,KTE,zi,thetav1D,qke1D,zw1D,dz1D,landsea,kzi) - - !--------------------------------------------------------------- - ! NOTES ON THE PBLH FORMULATION - ! - !The 1.5-theta-increase method defines PBL heights as the level at - !which the potential temperature first exceeds the minimum potential - !temperature within the boundary layer by 1.5 K. When applied to - !observed temperatures, this method has been shown to produce PBL- - !height estimates that are unbiased relative to profiler-based - !estimates (Nielsen-Gammon et al. 2008). However, their study did not - !include LLJs. Banta and Pichugina (2008) show that a TKE-based - !threshold is a good estimate of the PBL height in LLJs. Therefore, - !a hybrid definition is implemented that uses both methods, weighting - !the TKE-method more during stable conditions (PBLH < 400 m). - !A variable tke threshold (TKEeps) is used since no hard-wired - !value could be found to work best in all conditions. - !--------------------------------------------------------------- - - integer,intent(in) :: KTS,KTE - -#ifdef HARDCODE_VERTICAL -# define kts 1 -# define kte HARDCODE_VERTICAL -#endif - - real(kind_phys), intent(out) :: zi - real(kind_phys), intent(in) :: landsea - real(kind_phys), dimension(kts:kte), intent(in) :: thetav1D, qke1D, dz1D - real(kind_phys), dimension(kts:kte+1), intent(in) :: zw1D - !LOCAL VARS - real(kind_phys):: PBLH_TKE,qtke,qtkem1,wt,maxqke,TKEeps,minthv - real(kind_phys):: delt_thv !delta theta-v; dependent on land/sea point - real(kind_phys), parameter :: sbl_lim = 200. !upper limit of stable BL height (m). - real(kind_phys), parameter :: sbl_damp = 400. !transition length for blending (m). - integer :: I,J,K,kthv,ktke,kzi - - !Initialize KPBL (kzi) - kzi = 2 - - !> - FIND MIN THETAV IN THE LOWEST 200 M AGL - k = kts+1 - kthv = 1 - minthv = 9.E9 - DO WHILE (zw1D(k) .LE. 200.) - !DO k=kts+1,kte-1 - IF (minthv > thetav1D(k)) then - minthv = thetav1D(k) - kthv = k - ENDIF - k = k+1 - !IF (zw1D(k) .GT. sbl_lim) exit - ENDDO - - !> - FIND THETAV-BASED PBLH (BEST FOR DAYTIME). - zi=0. - k = kthv+1 - IF((landsea-1.5).GE.0)THEN - ! WATER - delt_thv = 1.0 - ELSE - ! LAND - delt_thv = 1.25 - ENDIF - - zi=0. - k = kthv+1 -! DO WHILE (zi .EQ. 0.) - DO k=kts+1,kte-1 - IF (thetav1D(k) .GE. (minthv + delt_thv))THEN - zi = zw1D(k) - dz1D(k-1)* & - & MIN((thetav1D(k)-(minthv + delt_thv))/ & - & MAX(thetav1D(k)-thetav1D(k-1),1E-6),1.0) - ENDIF - !k = k+1 - IF (k .EQ. kte-1) zi = zw1D(kts+1) !EXIT SAFEGUARD - IF (zi .NE. 0.0) exit - ENDDO - !print*,"IN GET_PBLH:",thsfc,zi - - !> - FOR STABLE BOUNDARY LAYERS, USE TKE METHOD TO COMPLEMENT THE - !! THETAV-BASED DEFINITION (WHEN THE THETA-V BASED PBLH IS BELOW ~0.5 KM). - !!THE TANH WEIGHTING FUNCTION WILL MAKE THE TKE-BASED DEFINITION NEGLIGIBLE - !!WHEN THE THETA-V-BASED DEFINITION IS ABOVE ~1 KM. - ktke = 1 - maxqke = MAX(Qke1D(kts),0.) - !Use 5% of tke max (Kosovic and Curry, 2000; JAS) - !TKEeps = maxtke/20. = maxqke/40. - TKEeps = maxqke/40. - TKEeps = MAX(TKEeps,0.02) !0.025) - PBLH_TKE=0. - - k = ktke+1 -! DO WHILE (PBLH_TKE .EQ. 0.) - DO k=kts+1,kte-1 - !QKE CAN BE NEGATIVE (IF CKmod == 0)... MAKE TKE NON-NEGATIVE. - qtke =MAX(Qke1D(k)/2.,0.) ! maximum TKE - qtkem1=MAX(Qke1D(k-1)/2.,0.) - IF (qtke .LE. TKEeps) THEN - PBLH_TKE = zw1D(k) - dz1D(k-1)* & - & MIN((TKEeps-qtke)/MAX(qtkem1-qtke, 1E-6), 1.0) - !IN CASE OF NEAR ZERO TKE, SET PBLH = LOWEST LEVEL. - PBLH_TKE = MAX(PBLH_TKE,zw1D(kts+1)) - !print *,"PBLH_TKE:",i,PBLH_TKE, Qke1D(k)/2., zw1D(kts+1) - ENDIF - !k = k+1 - IF (k .EQ. kte-1) PBLH_TKE = zw1D(kts+1) !EXIT SAFEGUARD - IF (PBLH_TKE .NE. 0.) exit - ENDDO - - !> - With TKE advection turned on, the TKE-based PBLH can be very large - !! in grid points with convective precipitation (> 8 km!), - !! so an artificial limit is imposed to not let PBLH_TKE exceed the - !!theta_v-based PBL height +/- 350 m. - !!This has no impact on 98-99% of the domain, but is the simplest patch - !!that adequately addresses these extremely large PBLHs. - PBLH_TKE = MIN(PBLH_TKE,zi+350.) - PBLH_TKE = MAX(PBLH_TKE,MAX(zi-350.,10.)) - - wt=.5*TANH((zi - sbl_lim)/sbl_damp) + .5 - IF (maxqke <= 0.05) THEN - !Cold pool situation - default to theta_v-based def - ELSE - !BLEND THE TWO PBLH TYPES HERE: - zi=PBLH_TKE*(1.-wt) + zi*wt - ENDIF - - !Compute KPBL (kzi) - DO k=kts+1,kte-1 - IF ( zw1D(k) >= zi) THEN - kzi = k-1 - exit - ENDIF - ENDDO - -#ifdef HARDCODE_VERTICAL -# undef kts -# undef kte -#endif - - END SUBROUTINE GET_PBLH -!> @} - -! ================================================================== -!>\ingroup gsd_mynn_edmf -!! This subroutine is the Dynamic Multi-Plume (DMP) Mass-Flux Scheme. -!! -!! dmp_mf() calculates the nonlocal turbulent transport from the dynamic -!! multiplume mass-flux scheme as well as the shallow-cumulus component of -!! the subgrid clouds. Note that this mass-flux scheme is called when the -!! namelist paramter \p bl_mynn_edmf is set to true (recommended). -!! -!! Much thanks to Kay Suslj of NASA-JPL for contributing the original version -!! of this mass-flux scheme. Considerable changes have been made from it's -!! original form. Some additions include: -!! -# scale-aware tapering as dx -> 0 -!! -# transport of TKE (extra namelist option) -!! -# Chaboureau-Bechtold cloud fraction & coupling to radiation (when icloud_bl > 0) -!! -# some extra limits for numerical stability -!! -!! This scheme remains under development, so consider it experimental code. -!! - SUBROUTINE DMP_mf(ii, & - & kts,kte,dt,zw,dz,p,rho, & - & momentum_opt, & - & tke_opt, & - & scalar_opt, & - & u,v,w,th,thl,thv,tk, & - & qt,qv,qc,qke, & - & qnc,qni,qnwfa,qnifa,qnbca, & - & exner,vt,vq,sgm, & - & ust,flt,fltv,flq,flqv, & - & pblh,kpbl,dx,landsea,ts, & - ! outputs - updraft properties - & edmf_a,edmf_w, & - & edmf_qt,edmf_thl, & - & edmf_ent,edmf_qc, & - ! outputs - variables needed for solver - & s_aw,s_awthl,s_awqt, & - & s_awqv,s_awqc, & - & s_awu,s_awv,s_awqke, & - & s_awqnc,s_awqni, & - & s_awqnwfa,s_awqnifa, & - & s_awqnbca, & - & sub_thl,sub_sqv, & - & sub_u,sub_v, & - & det_thl,det_sqv,det_sqc, & - & det_u,det_v, & - ! chem/smoke - & nchem,chem1,s_awchem, & - & mix_chem, & - ! in/outputs - subgrid scale clouds - & qc_bl1d,cldfra_bl1d, & - & qc_bl1D_old,cldfra_bl1D_old, & - ! inputs - flags for moist arrays - & F_QC,F_QI, & - & F_QNC,F_QNI, & - & F_QNWFA,F_QNIFA,F_QNBCA, & - & Psig_shcu, & - ! output info - & maxwidth,ktop,maxmf,ztop, & - ! inputs for stochastic perturbations - & spp_pbl,rstoch_col ) - - ! inputs: - integer, intent(in) :: ii - integer, intent(in) :: KTS,KTE,KPBL - logical, intent(in) :: momentum_opt,scalar_opt,tke_opt - -#ifdef HARDCODE_VERTICAL -# define kts 1 -# define kte HARDCODE_VERTICAL -#endif - -! Stochastic - integer, intent(in) :: spp_pbl - real(kind_phys), dimension(kts:kte) :: rstoch_col - - real(kind_phys),dimension(kts:kte), intent(in) :: & - &U,V,W,TH,THL,TK,QT,QV,QC, & - &exner,dz,THV,P,rho,qke,qnc,qni,qnwfa,qnifa,qnbca - real(kind_phys),dimension(kts:kte+1), intent(in) :: zw !height at full-sigma - real(kind_phys), intent(in) :: flt,fltv,flq,flqv,Psig_shcu, & - &landsea,ts,dx,dt,ust,pblh - logical, optional :: F_QC,F_QI,F_QNC,F_QNI,F_QNWFA,F_QNIFA,F_QNBCA - - ! outputs - updraft properties - real(kind_phys),dimension(kts:kte), intent(out) :: edmf_a,edmf_w, & - & edmf_qt,edmf_thl,edmf_ent,edmf_qc - !add one local edmf variable: - real(kind_phys),dimension(kts:kte) :: edmf_th - ! output - integer, intent(out) :: ktop - real(kind_phys), intent(out) :: maxmf,ztop,maxwidth - ! outputs - variables needed for solver - real(kind_phys),dimension(kts:kte+1) :: s_aw, & !sum ai*rho*wis_awphi - &s_awthl,s_awqt,s_awqv,s_awqc,s_awqnc,s_awqni, & - &s_awqnwfa,s_awqnifa,s_awqnbca,s_awu,s_awv, & - &s_awqke,s_aw2 - - real(kind_phys),dimension(kts:kte), intent(inout) :: & - &qc_bl1d,cldfra_bl1d,qc_bl1d_old,cldfra_bl1d_old - - integer, parameter :: nup=8, debug_mf=0 - real(kind_phys) :: nup2 - - !------------- local variables ------------------- - ! updraft properties defined on interfaces (k=1 is the top of the - ! first model layer - real(kind_phys),dimension(kts:kte+1,1:NUP) :: & - &UPW,UPTHL,UPQT,UPQC,UPQV, & - &UPA,UPU,UPV,UPTHV,UPQKE,UPQNC, & - &UPQNI,UPQNWFA,UPQNIFA,UPQNBCA - ! entrainment variables - real(kind_phys),dimension(kts:kte,1:NUP) :: ENT,ENTf - integer,dimension(kts:kte,1:NUP) :: ENTi - ! internal variables - integer :: K,I,k50 - real(kind_phys):: fltv2,wstar,qstar,thstar,sigmaW,sigmaQT, & - &sigmaTH,z0,pwmin,pwmax,wmin,wmax,wlv,Psig_w,maxw,maxqc,wpbl - real(kind_phys):: B,QTn,THLn,THVn,QCn,Un,Vn,QKEn,QNCn,QNIn, & - & QNWFAn,QNIFAn,QNBCAn, & - & Wn2,Wn,EntEXP,EntEXM,EntW,BCOEFF,THVkm1,THVk,Pk,rho_int - - ! w parameters - real(kind_phys), parameter :: & - &Wa=2./3., & - &Wb=0.002, & - &Wc=1.5 - - ! Lateral entrainment parameters ( L0=100 and ENT0=0.1) were taken from - ! Suselj et al (2013, jas). Note that Suselj et al (2014,waf) use L0=200 and ENT0=0.2. - real(kind_phys),parameter :: & - & L0=100., & - & ENT0=0.1 - - ! Parameters/variables for regulating plumes: - real(kind_phys), parameter :: Atot = 0.10 ! Maximum total fractional area of all updrafts - real(kind_phys), parameter :: lmax = 1000.! diameter of largest plume (absolute maximum, can be smaller) - real(kind_phys), parameter :: lmin = 300. ! diameter of smallest plume (absolute minimum, can be larger) - real(kind_phys), parameter :: dlmin = 0. ! delta increase in the diameter of smallest plume (large fltv) - real(kind_phys) :: minwidth ! actual width of smallest plume - real(kind_phys) :: dl ! variable increment of plume size - real(kind_phys), parameter :: dcut = 1.2 ! max diameter of plume to parameterize relative to dx (km) - real(kind_phys):: d != -2.3 to -1.7 ;=-1.9 in Neggers paper; power law exponent for number density (N=Cl^d). - ! Note that changing d to -2.0 makes each size plume equally contribute to the total coverage of all plumes. - ! Note that changing d to -1.7 doubles the area coverage of the largest plumes relative to the smallest plumes. - real(kind_phys):: cn,c,l,n,an2,hux,wspd_pbl,cloud_base,width_flx - - ! chem/smoke - integer, intent(in) :: nchem - real(kind_phys),dimension(:, :) :: chem1 - real(kind_phys),dimension(kts:kte+1, nchem) :: s_awchem - real(kind_phys),dimension(nchem) :: chemn - real(kind_phys),dimension(kts:kte+1,1:NUP, nchem) :: UPCHEM - integer :: ic - real(kind_phys),dimension(kts:kte+1, nchem) :: edmf_chem - logical, intent(in) :: mix_chem - - !JOE: add declaration of ERF - real(kind_phys):: ERF - - logical :: superadiabatic - - ! VARIABLES FOR CHABOUREAU-BECHTOLD CLOUD FRACTION - real(kind_phys),dimension(kts:kte), intent(inout) :: vt, vq, sgm - real(kind_phys):: sigq,xl,rsl,cpm,a,qmq,mf_cf,Aup,Q1,diffqt,qsat_tk,& - Fng,qww,alpha,beta,bb,f,pt,t,q2p,b9,satvp,rhgrid, & - Ac_mf,Ac_strat,qc_mf - real(kind_phys), parameter :: cf_thresh = 0.5 ! only overwrite stratus CF less than this value - - ! Variables for plume interpolation/saturation check - real(kind_phys),dimension(kts:kte) :: exneri,dzi,rhoz - real(kind_phys):: THp, QTp, QCp, QCs, esat, qsl - real(kind_phys):: csigma,acfac,ac_wsp - - !plume overshoot - integer :: overshoot - real(kind_phys):: bvf, Frz, dzp - - !Flux limiter: not let mass-flux of heat between k=1&2 exceed (fluxportion)*(surface heat flux). - !This limiter makes adjustments to the entire column. - real(kind_phys):: adjustment, flx1 - real(kind_phys), parameter :: fluxportion=0.75 ! set liberally, so has minimal impact. Note that - ! 0.5 starts to have a noticeable impact - ! over land (decrease maxMF by 10-20%), but no impact over water. - - !Subsidence - real(kind_phys),dimension(kts:kte) :: sub_thl,sub_sqv,sub_u,sub_v, & !tendencies due to subsidence - det_thl,det_sqv,det_sqc,det_u,det_v, & !tendencied due to detrainment - envm_a,envm_w,envm_thl,envm_sqv,envm_sqc, & - envm_u,envm_v !environmental variables defined at middle of layer - real(kind_phys),dimension(kts:kte+1) :: envi_a,envi_w !environmental variables defined at model interface - real(kind_phys):: temp,sublim,qc_ent,qv_ent,qt_ent,thl_ent,detrate, & - detrateUV,oow,exc_fac,aratio,detturb,qc_grid,qc_sgs, & - qc_plume,exc_heat,exc_moist,tk_int,tvs - real(kind_phys), parameter :: Cdet = 1./45. - real(kind_phys), parameter :: dzpmax = 300. !limit dz used in detrainment - can be excessing in thick layers - !parameter "Csub" determines the propotion of upward vertical velocity that contributes to - !environmenatal subsidence. Some portion is expected to be compensated by downdrafts instead of - !gentle environmental subsidence. 1.0 assumes all upward vertical velocity in the mass-flux scheme - !is compensated by "gentle" environmental subsidence. - real(kind_phys), parameter :: Csub=0.25 - - !Factor for the pressure gradient effects on momentum transport - real(kind_phys), parameter :: pgfac = 0.00 ! Zhang and Wu showed 0.4 is more appropriate for lower troposphere - real(kind_phys):: Uk,Ukm1,Vk,Vkm1,dxsa - -! check the inputs -! print *,'dt',dt -! print *,'dz',dz -! print *,'u',u -! print *,'v',v -! print *,'thl',thl -! print *,'qt',qt -! print *,'ust',ust -! print *,'flt',flt -! print *,'flq',flq -! print *,'pblh',pblh - -! Initialize individual updraft properties - UPW=0. - UPTHL=0. - UPTHV=0. - UPQT=0. - UPA=0. - UPU=0. - UPV=0. - UPQC=0. - UPQV=0. - UPQKE=0. - UPQNC=0. - UPQNI=0. - UPQNWFA=0. - UPQNIFA=0. - UPQNBCA=0. - if ( mix_chem ) then - UPCHEM(kts:kte+1,1:NUP,1:nchem)=0.0 - endif - - ENT=0.001 -! Initialize mean updraft properties - edmf_a =0. - edmf_w =0. - edmf_qt =0. - edmf_thl=0. - edmf_ent=0. - edmf_qc =0. - if ( mix_chem ) then - edmf_chem(kts:kte+1,1:nchem) = 0.0 - endif - -! Initialize the variables needed for implicit solver - s_aw=0. - s_awthl=0. - s_awqt=0. - s_awqv=0. - s_awqc=0. - s_awu=0. - s_awv=0. - s_awqke=0. - s_awqnc=0. - s_awqni=0. - s_awqnwfa=0. - s_awqnifa=0. - s_awqnbca=0. - if ( mix_chem ) then - s_awchem(kts:kte+1,1:nchem) = 0.0 - endif - -! Initialize explicit tendencies for subsidence & detrainment - sub_thl = 0. - sub_sqv = 0. - sub_u = 0. - sub_v = 0. - det_thl = 0. - det_sqv = 0. - det_sqc = 0. - det_u = 0. - det_v = 0. - nup2 = nup !start with nup, but set to zero if activation criteria fails - - ! Taper off MF scheme when significant resolved-scale motions - ! are present This function needs to be asymetric... - maxw = 0.0 - cloud_base = 9000.0 - do k=1,kte-1 - if (zw(k) > pblh + 500.) exit - - wpbl = w(k) - if (w(k) < 0.)wpbl = 2.*w(k) - maxw = max(maxw,abs(wpbl)) - - !Find highest k-level below 50m AGL - if (ZW(k)<=50.)k50=k - - !Search for cloud base - qc_sgs = max(qc(k), qc_bl1d(k)) - if (qc_sgs> 1E-5 .and. (cldfra_bl1d(k) .ge. 0.5) .and. cloud_base == 9000.0) then - cloud_base = 0.5*(ZW(k)+ZW(k+1)) - endif - enddo - - !do nothing for small w (< 1 m/s), but linearly taper off for w > 1.0 m/s - maxw = max(0.,maxw - 1.0) - Psig_w = max(0.0, 1.0 - maxw) - Psig_w = min(Psig_w, Psig_shcu) - - !Completely shut off MF scheme for strong resolved-scale vertical velocities. - fltv2 = fltv - if(Psig_w == 0.0 .and. fltv > 0.0) fltv2 = -1.*fltv - - ! If surface buoyancy is positive we do integration, otherwise no. - ! Also, ensure that it is at least slightly superadiabatic up through 50 m - superadiabatic = .false. - if ((landsea-1.5).ge.0) then - hux = -0.001 ! WATER ! dT/dz must be < - 0.1 K per 100 m. - else - hux = -0.005 ! LAND ! dT/dz must be < - 0.5 K per 100 m. - endif - tvs = ts*(1.0+p608*qv(kts)) - do k=1,max(1,k50-1) !use "-1" because k50 used interface heights (zw). - if (k == 1) then - if ((thv(k)-tvs)/(0.5*dz(k)) < hux) then - superadiabatic = .true. - else - superadiabatic = .false. - exit - endif - else - if ((thv(k)-thv(k-1))/(0.5*(dz(k)+dz(k-1))) < hux) then - superadiabatic = .true. - else - superadiabatic = .false. - exit - endif - endif - enddo - - ! Determine the numer of updrafts/plumes in the grid column: - ! Some of these criteria may be a little redundant but useful for bullet-proofing. - ! (1) largest plume = 1.2 * dx. - ! (2) Apply a scale-break, assuming no plumes with diameter larger than 1.1*PBLH can exist. - ! (3) max plume size beneath clouds deck approx = 0.5 * cloud_base. - ! (4) add wspd-dependent limit, when plume model breaks down. (hurricanes) - ! (5) limit to reduce max plume sizes in weakly forced conditions. This is only - ! meant to "soften" the activation of the mass-flux scheme. - ! Criteria (1) - maxwidth = min(dx*dcut, lmax) - !Criteria (2) - maxwidth = min(maxwidth, 1.1_kind_phys*PBLH) - ! Criteria (3) - if ((landsea-1.5) .lt. 0) then !land - maxwidth = MIN(maxwidth, 0.5_kind_phys*cloud_base) - else !water - maxwidth = MIN(maxwidth, 0.9_kind_phys*cloud_base) - endif - ! Criteria (4) - wspd_pbl=SQRT(MAX(u(kts)**2 + v(kts)**2, 0.01_kind_phys)) - !Note: area fraction (acfac) is modified below - ! Criteria (5) - only a function of flt (not fltv) - if ((landsea-1.5).LT.0) then !land - width_flx = MAX(MIN(1000.*(0.6*tanh((fltv - 0.040)/0.04) + .5),1000._kind_phys), 0._kind_phys) - else !water - width_flx = MAX(MIN(1000.*(0.6*tanh((fltv - 0.007)/0.02) + .5),1000._kind_phys), 0._kind_phys) - endif - maxwidth = MIN(maxwidth, width_flx) - minwidth = lmin - !allow min plume size to increase in large flux conditions (eddy diffusivity should be - !large enough to handle the representation of small plumes). - if (maxwidth .ge. (lmax - 1.0) .and. fltv .gt. 0.2)minwidth = lmin + dlmin*min((fltv-0.2)/0.3, 1._kind_phys) - - if (maxwidth .le. minwidth) then ! deactivate MF component - nup2 = 0 - maxwidth = 0.0 - endif - - ! Initialize values for 2d output fields: - ktop = 0 - ztop = 0.0 - maxmf= 0.0 - -!Begin plume processing if passes criteria -if ( fltv2 > 0.002 .AND. (maxwidth > minwidth) .AND. superadiabatic) then - - ! Find coef C for number size density N - cn = 0. - d =-1.9 !set d to value suggested by Neggers 2015 (JAMES). - dl = (maxwidth - minwidth)/real(nup-1,kind=kind_phys) - do i=1,NUP - ! diameter of plume - l = minwidth + dl*real(i-1) - cn = cn + l**d * (l*l)/(dx*dx) * dl ! sum fractional area of each plume - enddo - C = Atot/cn !Normalize C according to the defined total fraction (Atot) - - ! Make updraft area (UPA) a function of the buoyancy flux - if ((landsea-1.5).LT.0) then !land - acfac = .5*tanh((fltv2 - 0.02)/0.05) + .5 - else !water - acfac = .5*tanh((fltv2 - 0.01)/0.03) + .5 - endif - !add a windspeed-dependent adjustment to acfac that tapers off - !the mass-flux scheme linearly above sfc wind speeds of 10 m/s. - !Note: this effect may be better represented by an increase in - !entrainment rate for high wind consitions (more ambient turbulence). - if (wspd_pbl .le. 10.) then - ac_wsp = 1.0 - else - ac_wsp = 1.0 - min((wspd_pbl - 10.0)/15., 1.0) - endif - acfac = acfac * ac_wsp - - ! Find the portion of the total fraction (Atot) of each plume size: - An2 = 0. - do i=1,NUP - ! diameter of plume - l = minwidth + dl*real(i-1) - N = C*l**d ! number density of plume n - UPA(1,i) = N*l*l/(dx*dx) * dl ! fractional area of plume n - - UPA(1,i) = UPA(1,i)*acfac - An2 = An2 + UPA(1,i) ! total fractional area of all plumes - !print*," plume size=",l,"; area=",UPA(1,I),"; total=",An2 - end do - - ! set initial conditions for updrafts - z0=50. - pwmin=0.1 ! was 0.5 - pwmax=0.4 ! was 3.0 - - wstar=max(1.E-2,(gtr*fltv2*pblh)**(onethird)) - qstar=max(flq,1.0E-5)/wstar - thstar=flt/wstar - - if ((landsea-1.5) .ge. 0) then - csigma = 1.34 ! WATER - else - csigma = 1.34 ! LAND - endif - - if (env_subs) then - exc_fac = 0.0 - else - if ((landsea-1.5).GE.0) then - !water: increase factor to compensate for decreased pwmin/pwmax - exc_fac = 0.58*4.0 - else - !land: no need to increase factor - already sufficiently large superadiabatic layers - exc_fac = 0.58 - endif - endif - !decrease excess for large wind speeds - exc_fac = exc_fac * ac_wsp - - !Note: sigmaW is typically about 0.5*wstar - sigmaW =csigma*wstar*(z0/pblh)**(onethird)*(1 - 0.8*z0/pblh) - sigmaQT=csigma*qstar*(z0/pblh)**(onethird) - sigmaTH=csigma*thstar*(z0/pblh)**(onethird) - - !Note: Given the pwmin & pwmax set above, these max/mins are - ! rarely exceeded. - wmin=MIN(sigmaW*pwmin,0.1) - wmax=MIN(sigmaW*pwmax,0.5) - - !SPECIFY SURFACE UPDRAFT PROPERTIES AT MODEL INTERFACE BETWEEN K = 1 & 2 - do i=1,NUP - wlv=wmin+(wmax-wmin)/NUP2*(i-1) - - !SURFACE UPDRAFT VERTICAL VELOCITY - UPW(1,I)=wmin + real(i)/real(NUP)*(wmax-wmin) - UPU(1,I)=(U(KTS)*DZ(KTS+1)+U(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - UPV(1,I)=(V(KTS)*DZ(KTS+1)+V(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - UPQC(1,I)=0.0 - !UPQC(1,I)=(QC(KTS)*DZ(KTS+1)+QC(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - - exc_heat = exc_fac*UPW(1,I)*sigmaTH/sigmaW - UPTHV(1,I)=(THV(KTS)*DZ(KTS+1)+THV(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) & - & + exc_heat - UPTHL(1,I)=(THL(KTS)*DZ(KTS+1)+THL(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) & - & + exc_heat - - !calculate exc_moist by use of surface fluxes - exc_moist=exc_fac*UPW(1,I)*sigmaQT/sigmaW - UPQT(1,I)=(QT(KTS)*DZ(KTS+1)+QT(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1))& - & +exc_moist - - UPQKE(1,I)=(QKE(KTS)*DZ(KTS+1)+QKE(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - UPQNC(1,I)=(QNC(KTS)*DZ(KTS+1)+QNC(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - UPQNI(1,I)=(QNI(KTS)*DZ(KTS+1)+QNI(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - UPQNWFA(1,I)=(QNWFA(KTS)*DZ(KTS+1)+QNWFA(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - UPQNIFA(1,I)=(QNIFA(KTS)*DZ(KTS+1)+QNIFA(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - UPQNBCA(1,I)=(QNBCA(KTS)*DZ(KTS+1)+QNBCA(KTS+1)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - enddo - - if ( mix_chem ) then - do i=1,NUP - do ic = 1,nchem - UPCHEM(1,i,ic)=(chem1(KTS,ic)*DZ(KTS+1)+chem1(KTS+1,ic)*DZ(KTS))/(DZ(KTS)+DZ(KTS+1)) - enddo - enddo - endif - - !Initialize environmental variables which can be modified by detrainment - envm_thl(kts:kte)=THL(kts:kte) - envm_sqv(kts:kte)=QV(kts:kte) - envm_sqc(kts:kte)=QC(kts:kte) - envm_u(kts:kte)=U(kts:kte) - envm_v(kts:kte)=V(kts:kte) - do k=kts,kte-1 - rhoz(k) = (rho(k)*dz(k+1)+rho(k+1)*dz(k))/(dz(k+1)+dz(k)) - enddo - rhoz(kte) = rho(kte) - - !dxsa is scale-adaptive factor governing the pressure-gradient term of the momentum transport - dxsa = 1. - MIN(MAX((12000.0-dx)/(12000.0-3000.0), 0.), 1.) - - ! do integration updraft - do i=1,NUP - QCn = 0. - overshoot = 0 - l = minwidth + dl*real(i-1) ! diameter of plume - do k=kts+1,kte-1 - !Entrainment from Tian and Kuang (2016) - !ENT(k,i) = 0.35/(MIN(MAX(UPW(K-1,I),0.75),1.9)*l) - wmin = 0.3 + l*0.0005 !* MAX(pblh-ZW(k+1), 0.0)/pblh - ENT(k,i) = 0.33/(MIN(MAX(UPW(K-1,I),wmin),0.9)*l) - - !Entrainment from Negggers (2015, JAMES) - !ENT(k,i) = 0.02*l**-0.35 - 0.0009 - !ENT(k,i) = 0.04*l**-0.50 - 0.0009 !more plume diversity - !ENT(k,i) = 0.04*l**-0.495 - 0.0009 !"neg1+" - - !Minimum background entrainment - ENT(k,i) = max(ENT(k,i),0.0003) - !ENT(k,i) = max(ENT(k,i),0.05/ZW(k)) !not needed for Tian and Kuang - - !increase entrainment for plumes extending very high. - IF(ZW(k) >= MIN(pblh+1500., 4000.))THEN - ENT(k,i)=ENT(k,i) + (ZW(k)-MIN(pblh+1500.,4000.))*5.0E-6 - ENDIF - - !SPP - ENT(k,i) = ENT(k,i) * (1.0 - rstoch_col(k)) - - ENT(k,i) = min(ENT(k,i),0.9/(ZW(k+1)-ZW(k))) - - ! Define environment U & V at the model interface levels - Uk =(U(k)*DZ(k+1)+U(k+1)*DZ(k))/(DZ(k+1)+DZ(k)) - Ukm1=(U(k-1)*DZ(k)+U(k)*DZ(k-1))/(DZ(k-1)+DZ(k)) - Vk =(V(k)*DZ(k+1)+V(k+1)*DZ(k))/(DZ(k+1)+DZ(k)) - Vkm1=(V(k-1)*DZ(k)+V(k)*DZ(k-1))/(DZ(k-1)+DZ(k)) - - ! Linear entrainment: - EntExp= ENT(K,I)*(ZW(k+1)-ZW(k)) - EntExm= EntExp*0.3333 !reduce entrainment for momentum - QTn =UPQT(k-1,I) *(1.-EntExp) + QT(k)*EntExp - THLn=UPTHL(k-1,I)*(1.-EntExp) + THL(k)*EntExp - Un =UPU(k-1,I) *(1.-EntExm) + U(k)*EntExm + dxsa*pgfac*(Uk - Ukm1) - Vn =UPV(k-1,I) *(1.-EntExm) + V(k)*EntExm + dxsa*pgfac*(Vk - Vkm1) - QKEn=UPQKE(k-1,I)*(1.-EntExp) + QKE(k)*EntExp - QNCn=UPQNC(k-1,I)*(1.-EntExp) + QNC(k)*EntExp - QNIn=UPQNI(k-1,I)*(1.-EntExp) + QNI(k)*EntExp - QNWFAn=UPQNWFA(k-1,I)*(1.-EntExp) + QNWFA(k)*EntExp - QNIFAn=UPQNIFA(k-1,I)*(1.-EntExp) + QNIFA(k)*EntExp - QNBCAn=UPQNBCA(k-1,I)*(1.-EntExp) + QNBCA(k)*EntExp - - !capture the updated qc, qt & thl modified by entranment alone, - !since they will be modified later if condensation occurs. - qc_ent = QCn - qt_ent = QTn - thl_ent = THLn - - ! Exponential Entrainment: - !EntExp= exp(-ENT(K,I)*(ZW(k)-ZW(k-1))) - !QTn =QT(K) *(1-EntExp)+UPQT(K-1,I)*EntExp - !THLn=THL(K)*(1-EntExp)+UPTHL(K-1,I)*EntExp - !Un =U(K) *(1-EntExp)+UPU(K-1,I)*EntExp - !Vn =V(K) *(1-EntExp)+UPV(K-1,I)*EntExp - !QKEn=QKE(k)*(1-EntExp)+UPQKE(K-1,I)*EntExp - - if ( mix_chem ) then - do ic = 1,nchem - ! Exponential Entrainment: - !chemn(ic) = chem(k,ic)*(1-EntExp)+UPCHEM(K-1,I,ic)*EntExp - ! Linear entrainment: - chemn(ic)=UPCHEM(k-1,i,ic)*(1.-EntExp) + chem1(k,ic)*EntExp - enddo - endif - - ! Define pressure at model interface - Pk =(P(k)*DZ(k+1)+P(k+1)*DZ(k))/(DZ(k+1)+DZ(k)) - ! Compute plume properties thvn and qcn - call condensation_edmf(QTn,THLn,Pk,ZW(k+1),THVn,QCn) - - ! Define environment THV at the model interface levels - THVk =(THV(k)*DZ(k+1)+THV(k+1)*DZ(k))/(DZ(k+1)+DZ(k)) - THVkm1=(THV(k-1)*DZ(k)+THV(k)*DZ(k-1))/(DZ(k-1)+DZ(k)) - -! B=g*(0.5*(THVn+UPTHV(k-1,I))/THV(k-1) - 1.0) - B=grav*(THVn/THVk - 1.0) - IF(B>0.)THEN - BCOEFF = 0.15 !w typically stays < 2.5, so doesnt hit the limits nearly as much - ELSE - BCOEFF = 0.2 !0.33 - ENDIF - - ! Original StEM with exponential entrainment - !EntW=exp(-2.*(Wb+Wc*ENT(K,I))*(ZW(k)-ZW(k-1))) - !Wn2=UPW(K-1,I)**2*EntW + (1.-EntW)*0.5*Wa*B/(Wb+Wc*ENT(K,I)) - ! Original StEM with linear entrainment - !Wn2=UPW(K-1,I)**2*(1.-EntExp) + EntExp*0.5*Wa*B/(Wb+Wc*ENT(K,I)) - !Wn2=MAX(Wn2,0.0) - !WA: TEMF form -! IF (B>0.0 .AND. UPW(K-1,I) < 0.2 ) THEN - IF (UPW(K-1,I) < 0.2 ) THEN - Wn = UPW(K-1,I) + (-2. * ENT(K,I) * UPW(K-1,I) + BCOEFF*B / MAX(UPW(K-1,I),0.2)) * MIN(ZW(k)-ZW(k-1), 250.) - ELSE - Wn = UPW(K-1,I) + (-2. * ENT(K,I) * UPW(K-1,I) + BCOEFF*B / UPW(K-1,I)) * MIN(ZW(k)-ZW(k-1), 250.) - ENDIF - !Do not allow a parcel to accelerate more than 1.25 m/s over 200 m. - !Add max increase of 2.0 m/s for coarse vertical resolution. - IF(Wn > UPW(K-1,I) + MIN(1.25*(ZW(k)-ZW(k-1))/200., 2.0) ) THEN - Wn = UPW(K-1,I) + MIN(1.25*(ZW(k)-ZW(k-1))/200., 2.0) - ENDIF - !Add symmetrical max decrease in w - IF(Wn < UPW(K-1,I) - MIN(1.25*(ZW(k)-ZW(k-1))/200., 2.0) ) THEN - Wn = UPW(K-1,I) - MIN(1.25*(ZW(k)-ZW(k-1))/200., 2.0) - ENDIF - Wn = MIN(MAX(Wn,0.0), 3.0) - - !Check to make sure that the plume made it up at least one level. - !if it failed, then set nup2=0 and exit the mass-flux portion. - IF (k==kts+1 .AND. Wn == 0.) THEN - NUP2=0 - exit - ENDIF - - IF (debug_mf == 1) THEN - IF (Wn .GE. 3.0) THEN - ! surface values - print *," **** SUSPICIOUSLY LARGE W:" - print *,' QCn:',QCn,' ENT=',ENT(k,i),' Nup2=',Nup2 - print *,'pblh:',pblh,' Wn:',Wn,' UPW(k-1)=',UPW(K-1,I) - print *,'K=',k,' B=',B,' dz=',ZW(k)-ZW(k-1) - ENDIF - ENDIF - - !Allow strongly forced plumes to overshoot if KE is sufficient - IF (Wn <= 0.0 .AND. overshoot == 0) THEN - overshoot = 1 - IF ( THVk-THVkm1 .GT. 0.0 ) THEN - bvf = SQRT( gtr*(THVk-THVkm1)/dz(k) ) - !vertical Froude number - Frz = UPW(K-1,I)/(bvf*dz(k)) - !IF ( Frz >= 0.5 ) Wn = MIN(Frz,1.0)*UPW(K-1,I) - dzp = dz(k)*MAX(MIN(Frz,1.0),0.0) ! portion of highest layer the plume penetrates - ENDIF - ELSE - dzp = dz(k) - ENDIF - - !minimize the plume penetratration in stratocu-topped PBL - !IF (fltv2 < 0.06) THEN - ! IF(ZW(k+1) >= pblh-200. .AND. qc(k) > 1e-5 .AND. I > 4) Wn=0. - !ENDIF - - !Modify environment variables (representative of the model layer - envm*) - !following the updraft dynamical detrainment of Asai and Kasahara (1967, JAS). - !Reminder: w is limited to be non-negative (above) - aratio = MIN(UPA(K-1,I)/(1.-UPA(K-1,I)), 0.5) !limit should never get hit - detturb = 0.00008 - oow = -0.060/MAX(1.0,(0.5*(Wn+UPW(K-1,I)))) !coef for dynamical detrainment rate - detrate = MIN(MAX(oow*(Wn-UPW(K-1,I))/dz(k), detturb), .0002) ! dynamical detrainment rate (m^-1) - detrateUV= MIN(MAX(oow*(Wn-UPW(K-1,I))/dz(k), detturb), .0001) ! dynamical detrainment rate (m^-1) - envm_thl(k)=envm_thl(k) + (0.5*(thl_ent + UPTHL(K-1,I)) - thl(k))*detrate*aratio*MIN(dzp,dzpmax) - qv_ent = 0.5*(MAX(qt_ent-qc_ent,0.) + MAX(UPQT(K-1,I)-UPQC(K-1,I),0.)) - envm_sqv(k)=envm_sqv(k) + (qv_ent-QV(K))*detrate*aratio*MIN(dzp,dzpmax) - IF (UPQC(K-1,I) > 1E-8) THEN - IF (QC(K) > 1E-6) THEN - qc_grid = QC(K) - ELSE - qc_grid = cldfra_bl1d(k)*qc_bl1d(K) - ENDIF - envm_sqc(k)=envm_sqc(k) + MAX(UPA(K-1,I)*0.5*(QCn + UPQC(K-1,I)) - qc_grid, 0.0)*detrate*aratio*MIN(dzp,dzpmax) - ENDIF - envm_u(k) =envm_u(k) + (0.5*(Un + UPU(K-1,I)) - U(K))*detrateUV*aratio*MIN(dzp,dzpmax) - envm_v(k) =envm_v(k) + (0.5*(Vn + UPV(K-1,I)) - V(K))*detrateUV*aratio*MIN(dzp,dzpmax) - - IF (Wn > 0.) THEN - !Update plume variables at current k index - UPW(K,I)=Wn !sqrt(Wn2) - UPTHV(K,I)=THVn - UPTHL(K,I)=THLn - UPQT(K,I)=QTn - UPQC(K,I)=QCn - UPU(K,I)=Un - UPV(K,I)=Vn - UPQKE(K,I)=QKEn - UPQNC(K,I)=QNCn - UPQNI(K,I)=QNIn - UPQNWFA(K,I)=QNWFAn - UPQNIFA(K,I)=QNIFAn - UPQNBCA(K,I)=QNBCAn - UPA(K,I)=UPA(K-1,I) - IF ( mix_chem ) THEN - do ic = 1,nchem - UPCHEM(k,I,ic) = chemn(ic) - enddo - ENDIF - ktop = MAX(ktop,k) - ELSE - exit !exit k-loop - END IF - ENDDO - - IF (debug_mf == 1) THEN - IF (MAXVAL(UPW(:,I)) > 10.0 .OR. MINVAL(UPA(:,I)) < 0.0 .OR. & - MAXVAL(UPA(:,I)) > Atot .OR. NUP2 > 10) THEN - ! surface values - print *,'flq:',flq,' fltv:',fltv2,' Nup2=',Nup2 - print *,'pblh:',pblh,' wstar:',wstar,' ktop=',ktop - print *,'sigmaW=',sigmaW,' sigmaTH=',sigmaTH,' sigmaQT=',sigmaQT - ! means - print *,'u:',u - print *,'v:',v - print *,'thl:',thl - print *,'UPA:',UPA(:,I) - print *,'UPW:',UPW(:,I) - print *,'UPTHL:',UPTHL(:,I) - print *,'UPQT:',UPQT(:,I) - print *,'ENT:',ENT(:,I) - ENDIF - ENDIF - ENDDO -ELSE - !At least one of the conditions was not met for activating the MF scheme. - NUP2=0. -END IF !end criteria check for mass-flux scheme - -ktop=MIN(ktop,KTE-1) -IF (ktop == 0) THEN - ztop = 0.0 -ELSE - ztop=zw(ktop) -ENDIF - -IF (nup2 > 0) THEN - !Calculate the fluxes for each variable - !All s_aw* variable are == 0 at k=1 - DO i=1,NUP - DO k=KTS,KTE-1 - s_aw(k+1) = s_aw(k+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*Psig_w - s_awthl(k+1)= s_awthl(k+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPTHL(K,i)*Psig_w - s_awqt(k+1) = s_awqt(k+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPQT(K,i)*Psig_w - !to conform to grid mean properties, move qc to qv in grid mean - !saturated layers, so total water fluxes are preserved but - !negative qc fluxes in unsaturated layers is reduced. -! if (qc(k) > 1e-12 .or. qc(k+1) > 1e-12) then - qc_plume = UPQC(K,i) -! else -! qc_plume = 0.0 -! endif - s_awqc(k+1) = s_awqc(k+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*qc_plume*Psig_w - s_awqv(k+1) = s_awqt(k+1) - s_awqc(k+1) - ENDDO - ENDDO - !momentum - if (momentum_opt) then - do i=1,nup - do k=kts,kte-1 - s_awu(k+1) = s_awu(k+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPU(K,i)*Psig_w - s_awv(k+1) = s_awv(k+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPV(K,i)*Psig_w - enddo - enddo - endif - !tke - if (tke_opt) then - do i=1,nup - do k=kts,kte-1 - s_awqke(k+1)= s_awqke(k+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPQKE(K,i)*Psig_w - enddo - enddo - endif - !chem - if ( mix_chem ) then - do k=kts,kte - do i=1,nup - do ic = 1,nchem - s_awchem(k+1,ic) = s_awchem(k+1,ic) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPCHEM(K,i,ic)*Psig_w - enddo - enddo - enddo - endif - - if (scalar_opt) then - do k=kts,kte - do I=1,nup - s_awqnc(k+1) = s_awqnc(K+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPQNC(K,i)*Psig_w - s_awqni(k+1) = s_awqni(K+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPQNI(K,i)*Psig_w - s_awqnwfa(k+1)= s_awqnwfa(K+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPQNWFA(K,i)*Psig_w - s_awqnifa(k+1)= s_awqnifa(K+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPQNIFA(K,i)*Psig_w - s_awqnbca(k+1)= s_awqnbca(K+1) + rhoz(k)*UPA(K,i)*UPW(K,i)*UPQNBCA(K,i)*Psig_w - enddo - enddo - endif - - !Flux limiter: Check ratio of heat flux at top of first model layer - !and at the surface. Make sure estimated flux out of the top of the - !layer is < fluxportion*surface_heat_flux - IF (s_aw(kts+1) /= 0.) THEN - dzi(kts) = 0.5*(DZ(kts)+DZ(kts+1)) !dz centered at model interface - flx1 = MAX(s_aw(kts+1)*(TH(kts)-TH(kts+1))/dzi(kts),1.0e-5) - ELSE - flx1 = 0.0 - !print*,"ERROR: s_aw(kts+1) == 0, NUP=",NUP," NUP2=",NUP2,& - ! " superadiabatic=",superadiabatic," KTOP=",KTOP - ENDIF - adjustment=1.0 - !Print*,"Flux limiter in MYNN-EDMF, adjustment=",fluxportion*flt/dz(kts)/flx1 - !Print*,"flt/dz=",flt/dz(kts)," flx1=",flx1," s_aw(kts+1)=",s_aw(kts+1) - IF (flx1 > fluxportion*flt/dz(kts) .AND. flx1>0.0) THEN - adjustment= fluxportion*flt/dz(kts)/flx1 - s_aw = s_aw*adjustment - s_awthl = s_awthl*adjustment - s_awqt = s_awqt*adjustment - s_awqc = s_awqc*adjustment - s_awqv = s_awqv*adjustment - s_awqnc = s_awqnc*adjustment - s_awqni = s_awqni*adjustment - s_awqnwfa = s_awqnwfa*adjustment - s_awqnifa = s_awqnifa*adjustment - s_awqnbca = s_awqnbca*adjustment - IF (momentum_opt) THEN - s_awu = s_awu*adjustment - s_awv = s_awv*adjustment - ENDIF - IF (tke_opt) THEN - s_awqke= s_awqke*adjustment - ENDIF - IF ( mix_chem ) THEN - s_awchem = s_awchem*adjustment - ENDIF - UPA = UPA*adjustment - ENDIF - !Print*,"adjustment=",adjustment," fluxportion=",fluxportion," flt=",flt - - !Calculate mean updraft properties for output: - !all edmf_* variables at k=1 correspond to the interface at top of first model layer - do k=kts,kte-1 - do I=1,nup - edmf_a(K) =edmf_a(K) +UPA(K,i) - edmf_w(K) =edmf_w(K) +rhoz(k)*UPA(K,i)*UPW(K,i) - edmf_qt(K) =edmf_qt(K) +rhoz(k)*UPA(K,i)*UPQT(K,i) - edmf_thl(K)=edmf_thl(K)+rhoz(k)*UPA(K,i)*UPTHL(K,i) - edmf_ent(K)=edmf_ent(K)+rhoz(k)*UPA(K,i)*ENT(K,i) - edmf_qc(K) =edmf_qc(K) +rhoz(k)*UPA(K,i)*UPQC(K,i) - enddo - enddo - do k=kts,kte-1 - !Note that only edmf_a is multiplied by Psig_w. This takes care of the - !scale-awareness of the subsidence below: - if (edmf_a(k)>0.) then - edmf_w(k)=edmf_w(k)/edmf_a(k) - edmf_qt(k)=edmf_qt(k)/edmf_a(k) - edmf_thl(k)=edmf_thl(k)/edmf_a(k) - edmf_ent(k)=edmf_ent(k)/edmf_a(k) - edmf_qc(k)=edmf_qc(k)/edmf_a(k) - edmf_a(k)=edmf_a(k)*Psig_w - !FIND MAXIMUM MASS-FLUX IN THE COLUMN: - if(edmf_a(k)*edmf_w(k) > maxmf) maxmf = edmf_a(k)*edmf_w(k) - endif - enddo ! end k - - !smoke/chem - if ( mix_chem ) then - do k=kts,kte-1 - do I=1,nup - do ic = 1,nchem - edmf_chem(k,ic) = edmf_chem(k,ic) + rhoz(k)*UPA(K,I)*UPCHEM(k,i,ic) - enddo - enddo - enddo - do k=kts,kte-1 - if (edmf_a(k)>0.) then - do ic = 1,nchem - edmf_chem(k,ic) = edmf_chem(k,ic)/edmf_a(k) - enddo - endif - enddo ! end k - endif - - !Calculate the effects environmental subsidence. - !All envi_*variables are valid at the interfaces, like the edmf_* variables - IF (env_subs) THEN - DO k=kts+1,kte-1 - !First, smooth the profiles of w & a, since sharp vertical gradients - !in plume variables are not likely extended to env variables - !Note1: w is treated as negative further below - !Note2: both w & a will be transformed into env variables further below - envi_w(k) = onethird*(edmf_w(k-1)+edmf_w(k)+edmf_w(k+1)) - envi_a(k) = onethird*(edmf_a(k-1)+edmf_a(k)+edmf_a(k+1))*adjustment - ENDDO - !define env variables at k=1 (top of first model layer) - envi_w(kts) = edmf_w(kts) - envi_a(kts) = edmf_a(kts) - !define env variables at k=kte - envi_w(kte) = 0.0 - envi_a(kte) = edmf_a(kte) - !define env variables at k=kte+1 - envi_w(kte+1) = 0.0 - envi_a(kte+1) = edmf_a(kte) - !Add limiter for very long time steps (i.e. dt > 300 s) - !Note that this is not a robust check - only for violations in - ! the first model level. - IF (envi_w(kts) > 0.9*DZ(kts)/dt) THEN - sublim = 0.9*DZ(kts)/dt/envi_w(kts) - ELSE - sublim = 1.0 - ENDIF - !Transform w & a into env variables - DO k=kts,kte - temp=envi_a(k) - envi_a(k)=1.0-temp - envi_w(k)=csub*sublim*envi_w(k)*temp/(1.-temp) - ENDDO - !calculate tendencies from subsidence and detrainment valid at the middle of - !each model layer. The lowest model layer uses an assumes w=0 at the surface. - dzi(kts) = 0.5*(dz(kts)+dz(kts+1)) - sub_thl(kts)= 0.5*envi_w(kts)*envi_a(kts)* & - (rho(kts+1)*thl(kts+1)-rho(kts)*thl(kts))/dzi(kts)/rhoz(k) - sub_sqv(kts)= 0.5*envi_w(kts)*envi_a(kts)* & - (rho(kts+1)*qv(kts+1)-rho(kts)*qv(kts))/dzi(kts)/rhoz(k) - DO k=kts+1,kte-1 - dzi(k) = 0.5*(dz(k)+dz(k+1)) - sub_thl(k)= 0.5*(envi_w(k)+envi_w(k-1))*0.5*(envi_a(k)+envi_a(k-1)) * & - (rho(k+1)*thl(k+1)-rho(k)*thl(k))/dzi(k)/rhoz(k) - sub_sqv(k)= 0.5*(envi_w(k)+envi_w(k-1))*0.5*(envi_a(k)+envi_a(k-1)) * & - (rho(k+1)*qv(k+1)-rho(k)*qv(k))/dzi(k)/rhoz(k) - ENDDO - - DO k=KTS,KTE-1 - det_thl(k)=Cdet*(envm_thl(k)-thl(k))*envi_a(k)*Psig_w - det_sqv(k)=Cdet*(envm_sqv(k)-qv(k))*envi_a(k)*Psig_w - det_sqc(k)=Cdet*(envm_sqc(k)-qc(k))*envi_a(k)*Psig_w - ENDDO - - IF (momentum_opt) THEN - sub_u(kts)=0.5*envi_w(kts)*envi_a(kts)* & - (rho(kts+1)*u(kts+1)-rho(kts)*u(kts))/dzi(kts)/rhoz(k) - sub_v(kts)=0.5*envi_w(kts)*envi_a(kts)* & - (rho(kts+1)*v(kts+1)-rho(kts)*v(kts))/dzi(kts)/rhoz(k) - DO k=kts+1,kte-1 - sub_u(k)=0.5*(envi_w(k)+envi_w(k-1))*0.5*(envi_a(k)+envi_a(k-1)) * & - (rho(k+1)*u(k+1)-rho(k)*u(k))/dzi(k)/rhoz(k) - sub_v(k)=0.5*(envi_w(k)+envi_w(k-1))*0.5*(envi_a(k)+envi_a(k-1)) * & - (rho(k+1)*v(k+1)-rho(k)*v(k))/dzi(k)/rhoz(k) - ENDDO - - DO k=KTS,KTE-1 - det_u(k) = Cdet*(envm_u(k)-u(k))*envi_a(k)*Psig_w - det_v(k) = Cdet*(envm_v(k)-v(k))*envi_a(k)*Psig_w - ENDDO - ENDIF - ENDIF !end subsidence/env detranment - - !First, compute exner, plume theta, and dz centered at interface - !Here, k=1 is the top of the first model layer. These values do not - !need to be defined at k=kte (unused level). - DO K=KTS,KTE-1 - exneri(k) = (exner(k)*dz(k+1)+exner(k+1)*dz(k))/(dz(k+1)+dz(k)) - edmf_th(k)= edmf_thl(k) + xlvcp/exneri(k)*edmf_qc(K) - dzi(k) = 0.5*(dz(k)+dz(k+1)) - ENDDO - -!JOE: ADD CLDFRA_bl1d, qc_bl1d. Note that they have already been defined in -! mym_condensation. Here, a shallow-cu component is added, but no cumulus -! clouds can be added at k=1 (start loop at k=2). - do k=kts+1,kte-2 - if (k > KTOP) exit - if(0.5*(edmf_qc(k)+edmf_qc(k-1))>0.0 .and. (cldfra_bl1d(k) < cf_thresh))THEN - !interpolate plume quantities to mass levels - Aup = (edmf_a(k)*dzi(k-1)+edmf_a(k-1)*dzi(k))/(dzi(k-1)+dzi(k)) - THp = (edmf_th(k)*dzi(k-1)+edmf_th(k-1)*dzi(k))/(dzi(k-1)+dzi(k)) - QTp = (edmf_qt(k)*dzi(k-1)+edmf_qt(k-1)*dzi(k))/(dzi(k-1)+dzi(k)) - !convert TH to T -! t = THp*exner(k) - !SATURATED VAPOR PRESSURE - esat = esat_blend(tk(k),t0c,tice) - !SATURATED SPECIFIC HUMIDITY - qsl=ep_2*esat/max(1.e-7,(p(k)-ep_3*esat)) - - !condensed liquid in the plume on mass levels - if (edmf_qc(k)>0.0 .and. edmf_qc(k-1)>0.0) then - QCp = (edmf_qc(k)*dzi(k-1)+edmf_qc(k-1)*dzi(k))/(dzi(k-1)+dzi(k)) - else - QCp = max(edmf_qc(k),edmf_qc(k-1)) - endif - - !COMPUTE CLDFRA & QC_BL FROM MASS-FLUX SCHEME and recompute vt & vq - xl = xl_blend(tk(k),t0c,tice,cice,cliq,cpv,xls,xlv) ! obtain blended heat capacity - qsat_tk = qsat_blend(tk(k),t0c,tice,p(k)) ! get saturation water vapor mixing ratio - ! at t and p - rsl = xl*qsat_tk / (r_v*tk(k)**2) ! slope of C-C curve at t (abs temp) - ! CB02, Eqn. 4 - cpm = cp + qt(k)*cpv ! CB02, sec. 2, para. 1 - a = 1./(1. + xl*rsl/cpm) ! CB02 variable "a" - b9 = a*rsl ! CB02 variable "b" - - q2p = xlvcp/exner(k) - pt = thl(k) +q2p*QCp*Aup ! potential temp (env + plume) - bb = b9*tk(k)/pt ! bb is "b9" in BCMT95. Their "b9" differs from - ! "b9" in CB02 by a factor - ! of T/theta. Strictly, b9 above is formulated in - ! terms of sat. mixing ratio, but bb in BCMT95 is - ! cast in terms of sat. specific humidity. The - ! conversion is neglected here. - qww = 1.+0.61*qt(k) - alpha = 0.61*pt - beta = pt*xl/(tk(k)*cp) - 1.61*pt - !Buoyancy flux terms have been moved to the end of this section... - - !Now calculate convective component of the cloud fraction: - if (a > 0.0) then - f = MIN(1.0/a, 4.0) ! f is vertical profile scaling function (CB2005) - else - f = 1.0 - endif - - !CB form: - !sigq = 3.5E-3 * Aup * 0.5*(edmf_w(k)+edmf_w(k-1)) * f ! convective component of sigma (CB2005) - !sigq = SQRT(sigq**2 + sgm(k)**2) ! combined conv + stratus components - !Per S.DeRoode 2009? - !sigq = 5. * Aup * (QTp - qt(k)) - sigq = 10. * Aup * (QTp - qt(k)) - !constrain sigq wrt saturation: - sigq = max(sigq, qsat_tk*0.02 ) - sigq = min(sigq, qsat_tk*0.25 ) - - qmq = a * (qt(k) - qsat_tk) ! saturation deficit/excess; - Q1 = qmq/sigq ! the numerator of Q1 - - if ((landsea-1.5).GE.0) then ! WATER - !modified form from LES - !mf_cf = min(max(0.5 + 0.36 * atan(1.20*(Q1+0.2)),0.01),0.6) - !Original CB - mf_cf = min(max(0.5 + 0.36 * atan(1.55*Q1),0.01),0.6) - mf_cf = max(mf_cf, 1.2 * Aup) - mf_cf = min(mf_cf, 5.0 * Aup) - else ! LAND - !LES form - !mf_cf = min(max(0.5 + 0.36 * atan(1.20*(Q1+0.4)),0.01),0.6) - !Original CB - mf_cf = min(max(0.5 + 0.36 * atan(1.55*Q1),0.01),0.6) - mf_cf = max(mf_cf, 1.8 * Aup) - mf_cf = min(mf_cf, 5.0 * Aup) - endif - - !IF ( debug_code ) THEN - ! print*,"In MYNN, StEM edmf" - ! print*," CB: env qt=",qt(k)," qsat=",qsat_tk - ! print*," k=",k," satdef=",QTp - qsat_tk," sgm=",sgm(k) - ! print*," CB: sigq=",sigq," qmq=",qmq," tk=",tk(k) - ! print*," CB: mf_cf=",mf_cf," cldfra_bl=",cldfra_bl1d(k)," edmf_a=",edmf_a(k) - !ENDIF - - ! Update cloud fractions and specific humidities in grid cells - ! where the mass-flux scheme is active. The specific humidities - ! are converted to grid means (not in-cloud quantities). - if ((landsea-1.5).GE.0) then ! water - if (QCp * Aup > 5e-5) then - qc_bl1d(k) = 1.86 * (QCp * Aup) - 2.2e-5 - else - qc_bl1d(k) = 1.18 * (QCp * Aup) - endif - cldfra_bl1d(k) = mf_cf - Ac_mf = mf_cf - else ! land - if (QCp * Aup > 5e-5) then - qc_bl1d(k) = 1.86 * (QCp * Aup) - 2.2e-5 - else - qc_bl1d(k) = 1.18 * (QCp * Aup) - endif - cldfra_bl1d(k) = mf_cf - Ac_mf = mf_cf - endif - - !Now recalculate the terms for the buoyancy flux for mass-flux clouds: - !See mym_condensation for details on these formulations. - !Use Bechtold and Siebesma (1998) piecewise estimation of Fng with - !limits ,since they really should be recalculated after all the other changes...: - !Only overwrite vt & vq in non-stratus condition - !if ((landsea-1.5).GE.0) then ! WATER - Q1=max(Q1,-2.25) - !else - ! Q1=max(Q1,-2.0) - !endif - - if (Q1 .ge. 1.0) then - Fng = 1.0 - elseif (Q1 .ge. -1.7 .and. Q1 .lt. 1.0) then - Fng = EXP(-0.4*(Q1-1.0)) - elseif (Q1 .ge. -2.5 .and. Q1 .lt. -1.7) then - Fng = 3.0 + EXP(-3.8*(Q1+1.7)) - else - Fng = min(23.9 + EXP(-1.6*(Q1+2.5)), 60.) - endif - - !link the buoyancy flux function to active clouds only (c*Aup): - vt(k) = qww - (1.5*Aup)*beta*bb*Fng - 1. - vq(k) = alpha + (1.5*Aup)*beta*a*Fng - tv0 - endif !check for (qc in plume) .and. (cldfra_bl < threshold) - enddo !k-loop - -ENDIF !end nup2 > 0 - -!modify output (negative: dry plume, positive: moist plume) -if (ktop > 0) then - maxqc = maxval(edmf_qc(1:ktop)) - if ( maxqc < 1.E-8) maxmf = -1.0*maxmf -endif - -! -! debugging -! -if (edmf_w(1) > 4.0) then -! surface values - print *,'flq:',flq,' fltv:',fltv2 - print *,'pblh:',pblh,' wstar:',wstar - print *,'sigmaW=',sigmaW,' sigmaTH=',sigmaTH,' sigmaQT=',sigmaQT -! means -! print *,'u:',u -! print *,'v:',v -! print *,'thl:',thl -! print *,'thv:',thv -! print *,'qt:',qt -! print *,'p:',p - -! updrafts -! DO I=1,NUP2 -! print *,'up:A',i -! print *,UPA(:,i) -! print *,'up:W',i -! print*,UPW(:,i) -! print *,'up:thv',i -! print *,UPTHV(:,i) -! print *,'up:thl',i -! print *,UPTHL(:,i) -! print *,'up:qt',i -! print *,UPQT(:,i) -! print *,'up:tQC',i -! print *,UPQC(:,i) -! print *,'up:ent',i -! print *,ENT(:,i) -! ENDDO - -! mean updrafts - print *,' edmf_a',edmf_a(1:14) - print *,' edmf_w',edmf_w(1:14) - print *,' edmf_qt:',edmf_qt(1:14) - print *,' edmf_thl:',edmf_thl(1:14) - -ENDIF !END Debugging - - -#ifdef HARDCODE_VERTICAL -# undef kts -# undef kte -#endif - -END SUBROUTINE DMP_MF -!================================================================= -!>\ingroup gsd_mynn_edmf -!! This subroutine -subroutine condensation_edmf(QT,THL,P,zagl,THV,QC) -! -! zero or one condensation for edmf: calculates THV and QC -! -real(kind_phys),intent(in) :: QT,THL,P,zagl -real(kind_phys),intent(out) :: THV -real(kind_phys),intent(inout):: QC - -integer :: niter,i -real(kind_phys):: diff,exn,t,th,qs,qcold - -! constants used from module_model_constants.F -! p1000mb -! rcp ... Rd/cp -! xlv ... latent heat for water (2.5e6) -! cp -! rvord .. r_v/r_d (1.6) - -! number of iterations - niter=50 -! minimum difference (usually converges in < 8 iterations with diff = 2e-5) - diff=1.e-6 - - EXN=(P/p1000mb)**rcp - !QC=0. !better first guess QC is incoming from lower level, do not set to zero - do i=1,NITER - T=EXN*THL + xlvcp*QC - QS=qsat_blend(T,t0c,tice,P) - QCOLD=QC - QC=0.5*QC + 0.5*MAX((QT-QS),0.) - if (abs(QC-QCOLD) 0.0) THEN -! PRINT*,"EDMF SAT, p:",p," iterations:",i -! PRINT*," T=",T," THL=",THL," THV=",THV -! PRINT*," QS=",QS," QT=",QT," QC=",QC,"ratio=",qc/qs -! ENDIF - - !THIS BASICALLY GIVE THE SAME RESULT AS THE PREVIOUS LINE - !TH = THL + xlv/cp/EXN*QC - !THV= TH*(1. + p608*QT) - - !print *,'t,p,qt,qs,qc' - !print *,t,p,qt,qs,qc - - -end subroutine condensation_edmf - -!=============================================================== - -subroutine condensation_edmf_r(QT,THL,P,zagl,THV,QC) -! -! zero or one condensation for edmf: calculates THL and QC -! similar to condensation_edmf but with different inputs -! -real(kind_phys),intent(in) :: QT,THV,P,zagl -real(kind_phys),intent(out) :: THL, QC - -integer :: niter,i -real(kind_phys):: diff,exn,t,th,qs,qcold - -! number of iterations - niter=50 -! minimum difference - diff=2.e-5 - - EXN=(P/p1000mb)**rcp - ! assume first that th = thv - T = THV*EXN - !QS = qsat_blend(T,t0c,tice,P) - !QC = QS - QT - - QC=0. - - do i=1,NITER - QCOLD = QC - T = EXN*THV/(1.+QT*(rvovrd-1.)-rvovrd*QC) - QS=qsat_blend(T,t0c,tice,P) - QC= MAX((QT-QS),0.) - if (abs(QC-QCOLD)0) then -! Wn2=DOWNW(K+1,I)**2*EntW - Wa*B/Beta_dm * (1. - EntW) -! else -! Wn2=DOWNW(K+1,I)**2 - 2.*Wa*B*dz(k) -! end if - - mindownw = MIN(DOWNW(K+1,I),-0.2) - Wn = DOWNW(K+1,I) + (-2.*ENT(K,I)*DOWNW(K+1,I) - & - BCOEFF*B/mindownw)*MIN(dz(k), 250.) - - !Do not allow a parcel to accelerate more than 1.25 m/s over 200 m. - !Add max acceleration of -2.0 m/s for coarse vertical resolution. - IF (Wn < DOWNW(K+1,I) - MIN(1.25*dz(k)/200., -2.0))THEN - Wn = DOWNW(K+1,I) - MIN(1.25*dz(k)/200., -2.0) - ENDIF - !Add symmetrical max decrease in velocity (less negative) - IF (Wn > DOWNW(K+1,I) + MIN(1.25*dz(k)/200., 2.0))THEN - Wn = DOWNW(K+1,I) + MIN(1.25*dz(k)/200., 2.0) - ENDIF - Wn = MAX(MIN(Wn,0.0), -3.0) - - !print *, " k =", k, " z =", ZW(k) - !print *, " entw =",ENT(K,I), " Bouy =", B - !print *, " downthv =", THVn, " thvk =", thvk - !print *, " downthl =", THLn, " thl =", thl(k) - !print *, " downqt =", QTn , " qt =", qt(k) - !print *, " downw+1 =",DOWNW(K+1,I), " Wn2 =", Wn - - IF (Wn .lt. 0.) THEN !terminate when velocity is too small - DOWNW(K,I) = Wn !-sqrt(Wn2) - DOWNTHV(K,I)= THVn - DOWNTHL(K,I)= THLn - DOWNQT(K,I) = QTn - DOWNQC(K,I) = QCn - DOWNU(K,I) = Un - DOWNV(K,I) = Vn - DOWNA(K,I) = DOWNA(K+1,I) - ELSE - !plumes must go at least 2 levels - if (DD_initK(I) - K .lt. 2) then - DOWNW(:,I) = 0.0 - DOWNTHV(:,I)= 0.0 - DOWNTHL(:,I)= 0.0 - DOWNQT(:,I) = 0.0 - DOWNQC(:,I) = 0.0 - DOWNU(:,I) = 0.0 - DOWNV(:,I) = 0.0 - endif - exit - ENDIF - ENDDO - ENDDO - endif ! end cloud flag - - DOWNW(1,:) = 0. !make sure downdraft does not go to the surface - DOWNA(1,:) = 0. - - ! Combine both moist and dry plume, write as one averaged plume - ! Even though downdraft starts at different height, average all up to qlTop - DO k=qlTop,KTS,-1 - DO I=1,NDOWN - edmf_a_dd(K) =edmf_a_dd(K) +DOWNA(K-1,I) - edmf_w_dd(K) =edmf_w_dd(K) +DOWNA(K-1,I)*DOWNW(K-1,I) - edmf_qt_dd(K) =edmf_qt_dd(K) +DOWNA(K-1,I)*DOWNQT(K-1,I) - edmf_thl_dd(K)=edmf_thl_dd(K)+DOWNA(K-1,I)*DOWNTHL(K-1,I) - edmf_ent_dd(K)=edmf_ent_dd(K)+DOWNA(K-1,I)*ENT(K-1,I) - edmf_qc_dd(K) =edmf_qc_dd(K) +DOWNA(K-1,I)*DOWNQC(K-1,I) - ENDDO - - IF (edmf_a_dd(k) >0.) THEN - edmf_w_dd(k) =edmf_w_dd(k) /edmf_a_dd(k) - edmf_qt_dd(k) =edmf_qt_dd(k) /edmf_a_dd(k) - edmf_thl_dd(k)=edmf_thl_dd(k)/edmf_a_dd(k) - edmf_ent_dd(k)=edmf_ent_dd(k)/edmf_a_dd(k) - edmf_qc_dd(k) =edmf_qc_dd(k) /edmf_a_dd(k) - ENDIF - ENDDO - - ! - ! computing variables needed for solver - ! - - DO k=KTS,qlTop - rho_int = (rho(k)*DZ(k+1)+rho(k+1)*DZ(k))/(DZ(k+1)+DZ(k)) - DO I=1,NDOWN - sd_aw(k) =sd_aw(k) +rho_int*DOWNA(k,i)*DOWNW(k,i) - sd_awthl(k)=sd_awthl(k)+rho_int*DOWNA(k,i)*DOWNW(k,i)*DOWNTHL(k,i) - sd_awqt(k) =sd_awqt(k) +rho_int*DOWNA(k,i)*DOWNW(k,i)*DOWNQT(k,i) - sd_awqc(k) =sd_awqc(k) +rho_int*DOWNA(k,i)*DOWNW(k,i)*DOWNQC(k,i) - sd_awu(k) =sd_awu(k) +rho_int*DOWNA(k,i)*DOWNW(k,i)*DOWNU(k,i) - sd_awv(k) =sd_awv(k) +rho_int*DOWNA(k,i)*DOWNW(k,i)*DOWNV(k,i) - ENDDO - sd_awqv(k) = sd_awqt(k) - sd_awqc(k) - ENDDO - -END SUBROUTINE DDMF_JPL -!=============================================================== - - -SUBROUTINE SCALE_AWARE(dx,PBL1,Psig_bl,Psig_shcu) - - !--------------------------------------------------------------- - ! NOTES ON SCALE-AWARE FORMULATION - ! - !JOE: add scale-aware factor (Psig) here, taken from Honnert et al. (2011, - ! JAS) and/or from Hyeyum Hailey Shin and Song-You Hong (2013, JAS) - ! - ! Psig_bl tapers local mixing - ! Psig_shcu tapers nonlocal mixing - - real(kind_phys), intent(in) :: dx,pbl1 - real(kind_phys), intent(out) :: Psig_bl,Psig_shcu - real(kind_phys) :: dxdh - - Psig_bl=1.0 - Psig_shcu=1.0 - dxdh=MAX(2.5*dx,10.)/MIN(PBL1,3000.) - ! Honnert et al. 2011, TKE in PBL *** original form used until 201605 - !Psig_bl= ((dxdh**2) + 0.07*(dxdh**0.667))/((dxdh**2) + & - ! (3./21.)*(dxdh**0.67) + (3./42.)) - ! Honnert et al. 2011, TKE in entrainment layer - !Psig_bl= ((dxdh**2) + (4./21.)*(dxdh**0.667))/((dxdh**2) + & - ! (3./20.)*(dxdh**0.67) + (7./21.)) - ! New form to preseve parameterized mixing - only down 5% at dx = 750 m - Psig_bl= ((dxdh**2) + 0.106*(dxdh**0.667))/((dxdh**2) +0.066*(dxdh**0.667) + 0.071) - - !assume a 500 m cloud depth for shallow-cu clods - dxdh=MAX(2.5*dx,10.)/MIN(PBL1+500.,3500.) - ! Honnert et al. 2011, TKE in entrainment layer *** original form used until 201605 - !Psig_shcu= ((dxdh**2) + (4./21.)*(dxdh**0.667))/((dxdh**2) + & - ! (3./20.)*(dxdh**0.67) + (7./21.)) - - ! Honnert et al. 2011, TKE in cumulus - !Psig(i)= ((dxdh**2) + 1.67*(dxdh**1.4))/((dxdh**2) +1.66*(dxdh**1.4) + - !0.2) - - ! Honnert et al. 2011, w'q' in PBL - !Psig(i)= 0.5 + 0.5*((dxdh**2) + 0.03*(dxdh**1.4) - - !(4./13.))/((dxdh**2) + 0.03*(dxdh**1.4) + (4./13.)) - ! Honnert et al. 2011, w'q' in cumulus - !Psig(i)= ((dxdh**2) - 0.07*(dxdh**1.4))/((dxdh**2) -0.07*(dxdh**1.4) + - !0.02) - - ! Honnert et al. 2011, q'q' in PBL - !Psig(i)= 0.5 + 0.5*((dxdh**2) + 0.25*(dxdh**0.667) -0.73)/((dxdh**2) - !-0.03*(dxdh**0.667) + 0.73) - ! Honnert et al. 2011, q'q' in cumulus - !Psig(i)= ((dxdh**2) - 0.34*(dxdh**1.4))/((dxdh**2) - 0.35*(dxdh**1.4) - !+ 0.37) - - ! Hyeyum Hailey Shin and Song-You Hong 2013, TKE in PBL (same as Honnert's above) - !Psig_shcu= ((dxdh**2) + 0.070*(dxdh**0.667))/((dxdh**2) - !+0.142*(dxdh**0.667) + 0.071) - ! Hyeyum Hailey Shin and Song-You Hong 2013, TKE in entrainment zone *** switch to this form 201605 - Psig_shcu= ((dxdh**2) + 0.145*(dxdh**0.667))/((dxdh**2) +0.172*(dxdh**0.667) + 0.170) - - ! Hyeyum Hailey Shin and Song-You Hong 2013, w'theta' in PBL - !Psig(i)= 0.5 + 0.5*((dxdh**2) -0.098)/((dxdh**2) + 0.106) - ! Hyeyum Hailey Shin and Song-You Hong 2013, w'theta' in entrainment zone - !Psig(i)= 0.5 + 0.5*((dxdh**2) - 0.112*(dxdh**0.25) -0.071)/((dxdh**2) - !+ 0.054*(dxdh**0.25) + 0.10) - - !print*,"in scale_aware; dx, dxdh, Psig(i)=",dx,dxdh,Psig(i) - !If(Psig_bl(i) < 0.0 .OR. Psig(i) > 1.)print*,"dx, dxdh, Psig(i)=",dx,dxdh,Psig_bl(i) - If(Psig_bl > 1.0) Psig_bl=1.0 - If(Psig_bl < 0.0) Psig_bl=0.0 - - If(Psig_shcu > 1.0) Psig_shcu=1.0 - If(Psig_shcu < 0.0) Psig_shcu=0.0 - - END SUBROUTINE SCALE_AWARE -! =================================================================== - FUNCTION phim(zet) - ! New stability function parameters for momentum (Puhales, 2020, WRF 4.2.1) - ! The forms in unstable conditions (z/L < 0) use Grachev et al. (2000), which are a blend of - ! the classical (Kansas) forms (i.e., Paulson 1970, Dyer and Hicks 1970), valid for weakly - ! unstable conditions (-1 < z/L < 0). The stability functions for stable conditions use an - ! updated form taken from Cheng and Brutsaert (2005), which extends the validity into very - ! stable conditions [z/L ~ O(10)]. - IMPLICIT NONE - - real(kind_phys), intent(in):: zet - real(kind_phys):: dummy_0,dummy_1,dummy_11,dummy_2,dummy_22,dummy_3,dummy_33,dummy_4,dummy_44,dummy_psi - real(kind_phys), parameter :: am_st=6.1, bm_st=2.5, rbm_st=1./bm_st - real(kind_phys), parameter :: ah_st=5.3, bh_st=1.1, rbh_st=1./bh_st - real(kind_phys), parameter :: am_unst=10., ah_unst=34. - real(kind_phys):: phi_m,phim - - if ( zet >= 0.0 ) then - dummy_0=1+zet**bm_st - dummy_1=zet+dummy_0**(rbm_st) - dummy_11=1+dummy_0**(rbm_st-1)*zet**(bm_st-1) - dummy_2=(-am_st/dummy_1)*dummy_11 - phi_m = 1-zet*dummy_2 - else - dummy_0 = (1.0-cphm_unst*zet)**0.25 - phi_m = 1./dummy_0 - dummy_psi = 2.*log(0.5*(1.+dummy_0))+log(0.5*(1.+dummy_0**2))-2.*atan(dummy_0)+1.570796 - - dummy_0=(1.-am_unst*zet) ! parentesis arg - dummy_1=dummy_0**0.333333 ! y - dummy_11=-0.33333*am_unst*dummy_0**(-0.6666667) ! dy/dzet - dummy_2 = 0.33333*(dummy_1**2.+dummy_1+1.) ! f - dummy_22 = 0.3333*dummy_11*(2.*dummy_1+1.) ! df/dzet - dummy_3 = 0.57735*(2.*dummy_1+1.) ! g - dummy_33 = 1.1547*dummy_11 ! dg/dzet - dummy_4 = 1.5*log(dummy_2)-1.73205*atan(dummy_3)+1.813799364 !psic - dummy_44 = (1.5/dummy_2)*dummy_22-1.73205*dummy_33/(1.+dummy_3**2)! dpsic/dzet - - dummy_0 = zet**2 - dummy_1 = 1./(1.+dummy_0) ! denon - dummy_11 = 2.*zet ! denon/dzet - dummy_2 = ((1-phi_m)/zet+dummy_11*dummy_4+dummy_0*dummy_44)*dummy_1 - dummy_22 = -dummy_11*(dummy_psi+dummy_0*dummy_4)*dummy_1**2 - - phi_m = 1.-zet*(dummy_2+dummy_22) - end if - - !phim = phi_m - zet - phim = phi_m - - END FUNCTION phim -! =================================================================== - - FUNCTION phih(zet) - ! New stability function parameters for heat (Puhales, 2020, WRF 4.2.1) - ! The forms in unstable conditions (z/L < 0) use Grachev et al. (2000), which are a blend of - ! the classical (Kansas) forms (i.e., Paulson 1970, Dyer and Hicks 1970), valid for weakly - ! unstable conditions (-1 < z/L < 0). The stability functions for stable conditions use an - ! updated form taken from Cheng and Brutsaert (2005), which extends the validity into very - ! stable conditions [z/L ~ O(10)]. - IMPLICIT NONE - - real(kind_phys), intent(in):: zet - real(kind_phys):: dummy_0,dummy_1,dummy_11,dummy_2,dummy_22,dummy_3,dummy_33,dummy_4,dummy_44,dummy_psi - real(kind_phys), parameter :: am_st=6.1, bm_st=2.5, rbm_st=1./bm_st - real(kind_phys), parameter :: ah_st=5.3, bh_st=1.1, rbh_st=1./bh_st - real(kind_phys), parameter :: am_unst=10., ah_unst=34. - real(kind_phys):: phh,phih - - if ( zet >= 0.0 ) then - dummy_0=1+zet**bh_st - dummy_1=zet+dummy_0**(rbh_st) - dummy_11=1+dummy_0**(rbh_st-1)*zet**(bh_st-1) - dummy_2=(-ah_st/dummy_1)*dummy_11 - phih = 1-zet*dummy_2 - else - dummy_0 = (1.0-cphh_unst*zet)**0.5 - phh = 1./dummy_0 - dummy_psi = 2.*log(0.5*(1.+dummy_0)) - - dummy_0=(1.-ah_unst*zet) ! parentesis arg - dummy_1=dummy_0**0.333333 ! y - dummy_11=-0.33333*ah_unst*dummy_0**(-0.6666667) ! dy/dzet - dummy_2 = 0.33333*(dummy_1**2.+dummy_1+1.) ! f - dummy_22 = 0.3333*dummy_11*(2.*dummy_1+1.) ! df/dzet - dummy_3 = 0.57735*(2.*dummy_1+1.) ! g - dummy_33 = 1.1547*dummy_11 ! dg/dzet - dummy_4 = 1.5*log(dummy_2)-1.73205*atan(dummy_3)+1.813799364 !psic - dummy_44 = (1.5/dummy_2)*dummy_22-1.73205*dummy_33/(1.+dummy_3**2)! dpsic/dzet - - dummy_0 = zet**2 - dummy_1 = 1./(1.+dummy_0) ! denon - dummy_11 = 2.*zet ! ddenon/dzet - dummy_2 = ((1-phh)/zet+dummy_11*dummy_4+dummy_0*dummy_44)*dummy_1 - dummy_22 = -dummy_11*(dummy_psi+dummy_0*dummy_4)*dummy_1**2 - - phih = 1.-zet*(dummy_2+dummy_22) - end if - -END FUNCTION phih -! ================================================================== - SUBROUTINE topdown_cloudrad(kts,kte, & - &dz1,zw,fltv,xland,kpbl,PBLH, & - &sqc,sqi,sqw,thl,th1,ex1,p1,rho1,thetav, & - &cldfra_bl1D,rthraten, & - &maxKHtopdown,KHtopdown,TKEprodTD ) - - !input - integer, intent(in) :: kte,kts - real(kind_phys), dimension(kts:kte), intent(in) :: dz1,sqc,sqi,sqw,& - thl,th1,ex1,p1,rho1,thetav,cldfra_bl1D - real(kind_phys), dimension(kts:kte), intent(in) :: rthraten - real(kind_phys), dimension(kts:kte+1), intent(in) :: zw - real(kind_phys), intent(in) :: pblh,fltv - real(kind_phys), intent(in) :: xland - integer , intent(in) :: kpbl - !output - real(kind_phys), intent(out) :: maxKHtopdown - real(kind_phys), dimension(kts:kte), intent(out) :: KHtopdown,TKEprodTD - !local - real(kind_phys), dimension(kts:kte) :: zfac,wscalek2,zfacent - real(kind_phys) :: bfx0,wm2,wm3,bfxpbl,dthvx,tmp1 - real(kind_phys) :: temps,templ,zl1,wstar3_2 - real(kind_phys) :: ent_eff,radsum,radflux,we,rcldb,rvls,minrad,zminrad - real(kind_phys), parameter :: pfac =2.0, zfmin = 0.01, phifac=8.0 - integer :: k,kk,kminrad - logical :: cloudflg - - cloudflg=.false. - minrad=100. - kminrad=kpbl - zminrad=PBLH - KHtopdown(kts:kte)=0.0 - TKEprodTD(kts:kte)=0.0 - maxKHtopdown=0.0 - - !CHECK FOR STRATOCUMULUS-TOPPED BOUNDARY LAYERS - DO kk = MAX(1,kpbl-2),kpbl+3 - if (sqc(kk).gt. 1.e-6 .OR. sqi(kk).gt. 1.e-6 .OR. & - cldfra_bl1D(kk).gt.0.5) then - cloudflg=.true. - endif - if (rthraten(kk) < minrad)then - minrad=rthraten(kk) - kminrad=kk - zminrad=zw(kk) + 0.5*dz1(kk) - endif - ENDDO - - IF (MAX(kminrad,kpbl) < 2)cloudflg = .false. - IF (cloudflg) THEN - zl1 = dz1(kts) - k = MAX(kpbl-1, kminrad-1) - !Best estimate of height of TKE source (top of downdrafts): - !zminrad = 0.5*pblh(i) + 0.5*zminrad - - templ=thl(k)*ex1(k) - !rvls is ws at full level - rvls=100.*6.112*EXP(17.67*(templ-273.16)/(templ-29.65))*(ep_2/p1(k+1)) - temps=templ + (sqw(k)-rvls)/(cp/xlv + ep_2*xlv*rvls/(r_d*templ**2)) - rvls=100.*6.112*EXP(17.67*(temps-273.15)/(temps-29.65))*(ep_2/p1(k+1)) - rcldb=max(sqw(k)-rvls,0.) - - !entrainment efficiency - dthvx = (thl(k+2) + th1(k+2)*p608*sqw(k+2)) & - - (thl(k) + th1(k) *p608*sqw(k)) - dthvx = max(dthvx,0.1) - tmp1 = xlvcp * rcldb/(ex1(k)*dthvx) - !Originally from Nichols and Turton (1986), where a2 = 60, but lowered - !here to 8, as in Grenier and Bretherton (2001). - ent_eff = 0.2 + 0.2*8.*tmp1 - - radsum=0. - DO kk = MAX(1,kpbl-3),kpbl+3 - radflux=rthraten(kk)*ex1(kk) !converts theta/s to temp/s - radflux=radflux*cp/grav*(p1(kk)-p1(kk+1)) ! converts temp/s to W/m^2 - if (radflux < 0.0 ) radsum=abs(radflux)+radsum - ENDDO - - !More strict limits over land to reduce stable-layer mixouts - if ((xland-1.5).GE.0)THEN ! WATER - radsum=MIN(radsum,90.0) - bfx0 = max(radsum/rho1(k)/cp,0.) - else ! LAND - radsum=MIN(0.25*radsum,30.0)!practically turn off over land - bfx0 = max(radsum/rho1(k)/cp - max(fltv,0.0),0.) - endif - - !entrainment from PBL top thermals - wm3 = grav/thetav(k)*bfx0*MIN(pblh,1500.) ! this is wstar3(i) -! wm2 = wm2 + wm3**twothirds - bfxpbl = - ent_eff * bfx0 - dthvx = max(thetav(k+1)-thetav(k),0.1) - we = max(bfxpbl/dthvx,-sqrt(wm3**twothirds)) - - DO kk = kts,kpbl+3 - !Analytic vertical profile - zfac(kk) = min(max((1.-(zw(kk+1)-zl1)/(zminrad-zl1)),zfmin),1.) - zfacent(kk) = 10.*MAX((zminrad-zw(kk+1))/zminrad,0.0)*(1.-zfac(kk))**3 - - !Calculate an eddy diffusivity profile (not used at the moment) - wscalek2(kk) = (phifac*karman*wm3*(zfac(kk)))**onethird - !Modify shape of Kh to be similar to Lock et al (2000): use pfac = 3.0 - KHtopdown(kk) = wscalek2(kk)*karman*(zminrad-zw(kk+1))*(1.-zfac(kk))**3 !pfac - KHtopdown(kk) = MAX(KHtopdown(kk),0.0) - - !Calculate TKE production = 2(g/TH)(w'TH'), where w'TH' = A(TH/g)wstar^3/PBLH, - !A = ent_eff, and wstar is associated with the radiative cooling at top of PBL. - !An analytic profile controls the magnitude of this TKE prod in the vertical. - TKEprodTD(kk)=2.*ent_eff*wm3/MAX(pblh,100.)*zfacent(kk) - TKEprodTD(kk)= MAX(TKEprodTD(kk),0.0) - ENDDO - ENDIF !end cloud check - maxKHtopdown=MAXVAL(KHtopdown(:)) - - END SUBROUTINE topdown_cloudrad -! ================================================================== -! =================================================================== -! =================================================================== - -END MODULE bl_mynn_subroutines diff --git a/src/core_atmosphere/physics/physics_mmm/bl_ysu.F b/src/core_atmosphere/physics/physics_mmm/bl_ysu.F deleted file mode 100644 index 601c232cb..000000000 --- a/src/core_atmosphere/physics/physics_mmm/bl_ysu.F +++ /dev/null @@ -1,1709 +0,0 @@ -#define NEED_B4B_DURING_CCPP_TESTING 1 -!================================================================================================================= - module bl_ysu - use ccpp_kinds,only: kind_phys - - implicit none - private - public:: bl_ysu_run , & - bl_ysu_init , & - bl_ysu_final , & - bl_ysu_timestep_init, & - bl_ysu_timestep_final - - - contains - - -!================================================================================================================= - subroutine bl_ysu_run(ux,vx,tx,qvx,qcx,qix,nmix,qmix,p2d,p2di,pi2d, & - f_qc,f_qi, & - utnp,vtnp,ttnp,qvtnp,qctnp,qitnp,qmixtnp, & - cp,g,rovcp,rd,rovg,ep1,ep2,karman,xlv,rv, & - dz8w2d,psfcpa, & - znt,ust,hpbl,psim,psih, & - xland,hfx,qfx,wspd,br, & - dt,kpbl1d, & - exch_hx,exch_mx, & - wstar,delta, & - u10,v10, & - uox,vox, & - rthraten, & - ysu_topdown_pblmix, & - ctopo,ctopo2, & - a_u,a_v,a_t,a_q,a_e, & - b_u,b_v,b_t,b_q,b_e, & - sfk,vlk,dlu,dlg,frcurb, & - flag_bep, & - its,ite,kte,kme, & - errmsg,errflg & - ) -!------------------------------------------------------------------------------- - implicit none -!------------------------------------------------------------------------------- -! -! this code is a revised vertical diffusion package ("ysupbl") -! with a nonlocal turbulent mixing in the pbl after "mrfpbl". -! the ysupbl (hong et al. 2006) is based on the study of noh -! et al.(2003) and accumulated realism of the behavior of the -! troen and mahrt (1986) concept implemented by hong and pan(1996). -! the major ingredient of the ysupbl is the inclusion of an explicit -! treatment of the entrainment processes at the entrainment layer. -! this routine uses an implicit approach for vertical flux -! divergence and does not require "miter" timesteps. -! it includes vertical diffusion in the stable atmosphere -! and moist vertical diffusion in clouds. -! -! mrfpbl: -! coded by song-you hong (ncep), implemented by jimy dudhia (ncar) -! fall 1996 -! -! ysupbl: -! coded by song-you hong (yonsei university) and implemented by -! song-you hong (yonsei university) and jimy dudhia (ncar) -! summer 2002 -! -! further modifications : -! an enhanced stable layer mixing, april 2008 -! ==> increase pbl height when sfc is stable (hong 2010) -! pressure-level diffusion, april 2009 -! ==> negligible differences -! implicit forcing for momentum with clean up, july 2009 -! ==> prevents model blowup when sfc layer is too low -! incresea of lamda, maximum (30, 0.1 x del z) feb 2010 -! ==> prevents model blowup when delz is extremely large -! revised prandtl number at surface, peggy lemone, feb 2010 -! ==> increase kh, decrease mixing due to counter-gradient term -! revised thermal, shin et al. mon. wea. rev. , songyou hong, aug 2011 -! ==> reduce the thermal strength when z1 < 0.1 h -! revised prandtl number for free convection, dudhia, mar 2012 -! ==> pr0 = 1 + bke (=0.272) when neutral, kh is reduced -! minimum kzo = 0.01, lo = min (30m,delz), hong, mar 2012 -! ==> weaker mixing when stable, and les resolution in vertical -! gz1oz0 is removed, and psim psih are ln(z1/z0)-psim,h, hong, mar 2012 -! ==> consider thermal z0 when differs from mechanical z0 -! a bug fix in wscale computation in stable bl, sukanta basu, jun 2012 -! ==> wscale becomes small with height, and less mixing in stable bl -! revision in background diffusion (kzo), jan 2016 -! ==> kzo = 0.1 for momentum and = 0.01 for mass to account for -! internal wave mixing of large et al. (1994), songyou hong, feb 2016 -! ==> alleviate superious excessive mixing when delz is large -! add multilayer urban canopy models of BEP and BEP+BEM, jan 2021 -! -! references: -! -! hendricks, knievel, and wang (2020), j. appl. meteor. clim. -! hong (2010) quart. j. roy. met. soc -! hong, noh, and dudhia (2006), mon. wea. rev. -! hong and pan (1996), mon. wea. rev. -! noh, chun, hong, and raasch (2003), boundary layer met. -! troen and mahrt (1986), boundary layer met. -! -!------------------------------------------------------------------------------- -! - real(kind=kind_phys),parameter :: xkzminm = 0.1,xkzminh = 0.01 - real(kind=kind_phys),parameter :: xkzmin = 0.01,xkzmax = 1000.,rimin = -100. - real(kind=kind_phys),parameter :: rlam = 30.,prmin = 0.25,prmax = 4. - real(kind=kind_phys),parameter :: brcr_ub = 0.0,brcr_sb = 0.25,cori = 1.e-4 - real(kind=kind_phys),parameter :: afac = 6.8,bfac = 6.8,pfac = 2.0,pfac_q = 2.0 - real(kind=kind_phys),parameter :: phifac = 8.,sfcfrac = 0.1 - real(kind=kind_phys),parameter :: d1 = 0.02, d2 = 0.05, d3 = 0.001 - real(kind=kind_phys),parameter :: h1 = 0.33333335, h2 = 0.6666667 - real(kind=kind_phys),parameter :: zfmin = 1.e-8,aphi5 = 5.,aphi16 = 16. - real(kind=kind_phys),parameter :: tmin=1.e-2 - real(kind=kind_phys),parameter :: gamcrt = 3.,gamcrq = 2.e-3 - real(kind=kind_phys),parameter :: xka = 2.4e-5 - integer,parameter :: imvdif = 1 - real(kind=kind_phys),parameter :: rcl = 1.0 - integer,parameter :: kts=1, kms=1 -! - integer, intent(in ) :: its,ite,kte,kme - - integer, intent(in) :: ysu_topdown_pblmix -! - integer, intent(in) :: nmix -! - real(kind=kind_phys), intent(in ) :: dt,cp,g,rovcp,rovg,rd,xlv,rv -! - real(kind=kind_phys), intent(in ) :: ep1,ep2,karman -! - logical, intent(in ) :: f_qc, f_qi -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(in) :: dz8w2d, & - pi2d -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(in ) :: tx, & - qvx, & - qcx, & - qix -! - real(kind=kind_phys), dimension( its:ite, kts:kte, nmix ) , & - intent(in ) :: qmix -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(out ) :: utnp, & - vtnp, & - ttnp, & - qvtnp, & - qctnp, & - qitnp -! - real(kind=kind_phys), dimension( its:ite, kts:kte, nmix ) , & - intent(out ) :: qmixtnp -! - real(kind=kind_phys), dimension( its:ite, kms:kme ) , & - intent(in ) :: p2di -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(in ) :: p2d -! - real(kind=kind_phys), dimension( its:ite ) , & - intent(out ) :: hpbl -! - real(kind=kind_phys), dimension( its:ite ) , & - intent(in ) :: ust, & - znt - real(kind=kind_phys), dimension( its:ite ) , & - intent(in ) :: xland, & - hfx, & - qfx -! - real(kind=kind_phys), dimension( its:ite ), intent(in ) :: wspd - real(kind=kind_phys), dimension( its:ite ), intent(in ) :: br -! - real(kind=kind_phys), dimension( its:ite ), intent(in ) :: psim, & - psih -! - real(kind=kind_phys), dimension( its:ite ), intent(in ) :: psfcpa - integer, dimension( its:ite ), intent(out ) :: kpbl1d -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(in ) :: ux, & - vx, & - rthraten - real(kind=kind_phys), dimension( its:ite ) , & - optional , & - intent(in ) :: ctopo, & - ctopo2 -! - logical, intent(in ) :: flag_bep - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - optional , & - intent(in ) :: a_u, & - a_v, & - a_t, & - a_q, & - a_e, & - b_u, & - b_v, & - b_t, & - b_q, & - b_e, & - sfk, & - vlk, & - dlu, & - dlg - real(kind=kind_phys), dimension( its:ite ) , & - optional , & - intent(in ) :: frcurb -! - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - -! -! local vars -! - real(kind=kind_phys), dimension( its:ite ) :: hol - real(kind=kind_phys), dimension( its:ite, kms:kme ) :: zq -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) :: & - thx,thvx,thlix, & - del, & - dza, & - dzq, & - xkzom, & - xkzoh, & - za -! - real(kind=kind_phys), dimension( its:ite ) :: & - rhox, & - govrth, & - zl1,thermal, & - wscale, & - hgamt,hgamq, & - brdn,brup, & - phim,phih, & - dusfc,dvsfc, & - dtsfc,dqsfc, & - prpbl, & - wspd1,thermalli -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) :: xkzh,xkzm,xkzq, & - f1,f2, & - r1,r2, & - ad,au, & - cu, & - al, & - zfac, & - rhox2, & - hgamt2, & - ad1,adm,adv -! -!jdf added exch_hx -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(out ) :: exch_hx, & - exch_mx -! - real(kind=kind_phys), dimension( its:ite ) , & - intent(inout) :: u10, & - v10 - real(kind=kind_phys), dimension( its:ite ), optional , & - intent(in ) :: uox, & - vox - real(kind=kind_phys), dimension( its:ite ) :: uoxl, & - voxl - real(kind=kind_phys), dimension( its:ite ) :: & - brcr, & - sflux, & - zol1, & - brcr_sbro -! - real(kind=kind_phys), dimension( its:ite, kts:kte) :: r3,f3 - integer, dimension( its:ite ) :: kpbl,kpblold -! - logical, dimension( its:ite ) :: pblflg, & - sfcflg, & - stable, & - cloudflg - - logical :: definebrup -! - integer :: n,i,k,l,ic,is,kk - integer :: klpbl -! -! - real(kind=kind_phys) :: dt2,rdt,spdk2,fm,fh,hol1,gamfac,vpert,prnum,prnum0 - real(kind=kind_phys) :: ss,ri,qmean,tmean,alph,chi,zk,rl2,dk,sri - real(kind=kind_phys) :: brint,dtodsd,dtodsu,rdz,dsdzt,dsdzq,dsdz2,rlamdz - real(kind=kind_phys) :: utend,vtend,ttend,qtend - real(kind=kind_phys) :: dtstep,govrthv - real(kind=kind_phys) :: cont, conq, conw, conwrc -! - - real(kind=kind_phys), dimension( its:ite, kts:kte ) :: wscalek,wscalek2 - real(kind=kind_phys), dimension( its:ite ), intent(out) :: wstar, & - delta - real(kind=kind_phys), dimension( its:ite, kts:kte ) :: xkzml,xkzhl, & - zfacent,entfac - real(kind=kind_phys), dimension( its:ite, kts:kte ) :: qcxl, & - qixl - real(kind=kind_phys), dimension( its:ite ) :: ust3, & - wstar3, & - wstar3_2, & - hgamu,hgamv, & - wm2, we, & - bfxpbl, & - hfxpbl,qfxpbl, & - ufxpbl,vfxpbl, & - dthvx - real(kind=kind_phys) :: prnumfac,bfx0,hfx0,qfx0,delb,dux,dvx, & - dsdzu,dsdzv,wm3,dthx,dqx,wspd10,ross,tem1,dsig,tvcon,conpr, & - prfac,prfac2,phim8z,radsum,tmp1,templ,rvls,temps,ent_eff, & - rcldb,bruptmp,radflux,vconvlim,vconvnew,fluxc,vconvc,vconv -!topo-corr - real(kind=kind_phys), dimension( its:ite, kts:kte ) :: fric, & - tke_ysu,& - el_ysu,& - shear_ysu,& - buoy_ysu - real(kind=kind_phys), dimension( its:ite) :: pblh_ysu,& - vconvfx -! - real(kind=kind_phys) :: bepswitch - - real(kind=kind_phys), dimension( its:ite, kts:kte ) :: & - a_u2d,a_v2d,a_t2d,a_q2d,a_e2d,b_u2d,b_v2d,b_t2d,b_q2d,b_e2d, & - sfk2d,vlk2d,dlu2d,dlg2d - real(kind=kind_phys), dimension( its:ite ) :: & - frc_urb1d - - real(kind=kind_phys), dimension( kts:kte ) :: thvx_1d,tke_1d,dzq_1d - real(kind=kind_phys), dimension( kts:kte+1) :: zq_1d - -! -!------------------------------------------------------------------------------- -! - klpbl = kte -! - cont=cp/g - conq=xlv/g - conw=1./g - conwrc = conw*sqrt(rcl) - conpr = bfac*karman*sfcfrac -! -! k-start index for tracer diffusion -! - if(f_qc) then - do k = kts,kte - do i = its,ite - qcxl(i,k) = qcx(i,k) - enddo - enddo - else - do k = kts,kte - do i = its,ite - qcxl(i,k) = 0. - enddo - enddo - endif -! - if(f_qi) then - do k = kts,kte - do i = its,ite - qixl(i,k) = qix(i,k) - enddo - enddo - else - do k = kts,kte - do i = its,ite - qixl(i,k) = 0. - enddo - enddo - endif -! - do k = kts,kte - do i = its,ite - thx(i,k) = tx(i,k)/pi2d(i,k) - thlix(i,k) = (tx(i,k)-xlv*qcxl(i,k)/cp-2.834E6*qixl(i,k)/cp)/pi2d(i,k) - enddo - enddo -! - do k = kts,kte - do i = its,ite - tvcon = (1.+ep1*qvx(i,k)) - thvx(i,k) = thx(i,k)*tvcon - enddo - enddo -! - if ( present(uox) .and. present(vox) ) then - do i =its,ite - uoxl(i) = uox(i) - voxl(i) = vox(i) - enddo - else - do i =its,ite - uoxl(i) = 0 - voxl(i) = 0 - enddo - endif -! - do i = its,ite - tvcon = (1.+ep1*qvx(i,1)) - rhox(i) = psfcpa(i)/(rd*tx(i,1)*tvcon) - govrth(i) = g/thx(i,1) - enddo -! - if(present(a_u) .and. present(a_v) .and. present(a_t) .and. & - present(a_q) .and. present(a_t) .and. present(a_e) .and. & - present(b_u) .and. present(b_v) .and. present(b_t) .and. & - present(b_q) .and. present(b_e) .and. present(dlg) .and. & - present(dlu) .and. present(sfk) .and. present(vlk) .and. & - present(frcurb) .and. flag_bep) then - - bepswitch=1.0 - do k = kts, kte - do i = its,ite - a_u2d(i,k) = a_u(i,k) - a_v2d(i,k) = a_v(i,k) - a_t2d(i,k) = a_t(i,k) - a_q2d(i,k) = a_q(i,k) - a_e2d(i,k) = a_e(i,k) - b_u2d(i,k) = b_u(i,k) - b_v2d(i,k) = b_v(i,k) - b_t2d(i,k) = b_t(i,k) - b_q2d(i,k) = b_q(i,k) - b_e2d(i,k) = b_e(i,k) - dlg2d(i,k) = dlg(i,k) - dlu2d(i,k) = dlu(i,k) - vlk2d(i,k) = vlk(i,k) - sfk2d(i,k) = sfk(i,k) - enddo - enddo - do i = its, ite - frc_urb1d(i) = frcurb(i) - enddo - else - bepswitch=0.0 - do k = kts, kte - do i = its,ite - a_u2d(i,k) = 0.0 - a_v2d(i,k) = 0.0 - a_t2d(i,k) = 0.0 - a_q2d(i,k) = 0.0 - a_e2d(i,k) = 0.0 - b_u2d(i,k) = 0.0 - b_v2d(i,k) = 0.0 - b_t2d(i,k) = 0.0 - b_q2d(i,k) = 0.0 - b_e2d(i,k) = 0.0 - dlg2d(i,k) = 0.0 - dlu2d(i,k) = 0.0 - vlk2d(i,k) = 1.0 - sfk2d(i,k) = 1.0 - enddo - enddo - do i = its, ite - frc_urb1d(i) = 0.0 - enddo - endif -! -!-----compute the height of full- and half-sigma levels above ground -! level, and the layer thicknesses. -! - do i = its,ite - zq(i,1) = 0. - enddo -! - do k = kts,kte - do i = its,ite - zq(i,k+1) = dz8w2d(i,k)+zq(i,k) - tvcon = (1.+ep1*qvx(i,k)) - rhox2(i,k) = p2d(i,k)/(rd*tx(i,k)*tvcon) - enddo - enddo -! - do k = kts,kte - do i = its,ite - za(i,k) = 0.5*(zq(i,k)+zq(i,k+1)) - dzq(i,k) = zq(i,k+1)-zq(i,k) - del(i,k) = p2di(i,k)-p2di(i,k+1) - enddo - enddo -! - do i = its,ite - dza(i,1) = za(i,1) - enddo -! - do k = kts+1,kte - do i = its,ite - dza(i,k) = za(i,k)-za(i,k-1) - enddo - enddo -! -!-----initialize output and local exchange coefficents: - do k = kts,kte - do i = its,ite - exch_hx(i,k) = 0. - exch_mx(i,k) = 0. - xkzh(i,k) = 0. - xkzhl(i,k) = 0. - xkzm(i,k) = 0. - xkzml(i,k) = 0. - xkzq(i,k) = 0. - enddo - enddo -! - do i = its,ite - wspd1(i) = sqrt( (ux(i,1)-uoxl(i))*(ux(i,1)-uoxl(i)) + (vx(i,1)-voxl(i))*(vx(i,1)-voxl(i)) )+1.e-9 - enddo -! -!---- compute vertical diffusion -! -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! compute preliminary variables -! - dtstep = dt - dt2 = 2.*dtstep - rdt = 1./dt2 -! - do i = its,ite - bfxpbl(i) = 0.0 - hfxpbl(i) = 0.0 - qfxpbl(i) = 0.0 - ufxpbl(i) = 0.0 - vfxpbl(i) = 0.0 - hgamu(i) = 0.0 - hgamv(i) = 0.0 - delta(i) = 0.0 - wstar3_2(i) = 0.0 - enddo -! - do k = kts,klpbl - do i = its,ite - wscalek(i,k) = 0.0 - wscalek2(i,k) = 0.0 - enddo - enddo -! - do k = kts,klpbl - do i = its,ite - zfac(i,k) = 0.0 - enddo - enddo - do k = kts,klpbl-1 - do i = its,ite - xkzom(i,k) = xkzminm - xkzoh(i,k) = xkzminh - enddo - enddo -! - do i = its,ite - dusfc(i) = 0. - dvsfc(i) = 0. - dtsfc(i) = 0. - dqsfc(i) = 0. - enddo -! - do i = its,ite - hgamt(i) = 0. - hgamq(i) = 0. - wscale(i) = 0. - we(i) = 0. - kpbl(i) = 1 - hpbl(i) = zq(i,1) - zl1(i) = za(i,1) - thermal(i)= thvx(i,1) - thermalli(i) = thlix(i,1) - pblflg(i) = .true. - sfcflg(i) = .true. - sflux(i) = hfx(i)/rhox(i)/cp + qfx(i)/rhox(i)*ep1*thx(i,1) - if(br(i).gt.0.0) sfcflg(i) = .false. - enddo -! -! compute the first guess of pbl height -! - do i = its,ite - stable(i) = .false. - brup(i) = br(i) - brcr(i) = brcr_ub - enddo -! - do k = 2,klpbl - do i = its,ite - if(.not.stable(i))then - brdn(i) = brup(i) - spdk2 = max(ux(i,k)**2+vx(i,k)**2,1.) - brup(i) = (thvx(i,k)-thermal(i))*(g*za(i,k)/thvx(i,1))/spdk2 - kpbl(i) = k - stable(i) = brup(i).gt.brcr(i) - endif - enddo - enddo -! - do i = its,ite - k = kpbl(i) - if(brdn(i).ge.brcr(i))then - brint = 0. - elseif(brup(i).le.brcr(i))then - brint = 1. - else - brint = (brcr(i)-brdn(i))/(brup(i)-brdn(i)) - endif - hpbl(i) = za(i,k-1)+brint*(za(i,k)-za(i,k-1)) - if(hpbl(i).lt.zq(i,2)) kpbl(i) = 1 - if(kpbl(i).le.1) pblflg(i) = .false. - enddo -! - do i = its,ite - fm = psim(i) - fh = psih(i) - zol1(i) = max(br(i)*fm*fm/fh,rimin) - if(sfcflg(i))then - zol1(i) = min(zol1(i),-zfmin) - else - zol1(i) = max(zol1(i),zfmin) - endif - hol1 = zol1(i)*hpbl(i)/zl1(i)*sfcfrac - if(sfcflg(i))then - phim(i) = (1.-aphi16*hol1)**(-1./4.) - phih(i) = (1.-aphi16*hol1)**(-1./2.) - bfx0 = max(sflux(i),0.) - hfx0 = max(hfx(i)/rhox(i)/cp,0.) - qfx0 = max(ep1*thx(i,1)*qfx(i)/rhox(i),0.) - wstar3(i) = (govrth(i)*bfx0*hpbl(i)) - wstar(i) = (wstar3(i))**h1 - else - phim(i) = (1.+aphi5*hol1) - phih(i) = phim(i) - wstar(i) = 0. - wstar3(i) = 0. - endif - ust3(i) = ust(i)**3. - wscale(i) = (ust3(i)+phifac*karman*wstar3(i)*0.5)**h1 - wscale(i) = min(wscale(i),ust(i)*aphi16) - wscale(i) = max(wscale(i),ust(i)/aphi5) - enddo -! -! compute the surface variables for pbl height estimation -! under unstable conditions -! - do i = its,ite - if(sfcflg(i).and.sflux(i).gt.0.0)then - gamfac = bfac/rhox(i)/wscale(i) - hgamt(i) = min(gamfac*hfx(i)/cp,gamcrt) - hgamq(i) = min(gamfac*qfx(i),gamcrq) - vpert = (hgamt(i)+ep1*thx(i,1)*hgamq(i))/bfac*afac - thermal(i) = thermal(i)+max(vpert,0.)*min(za(i,1)/(sfcfrac*hpbl(i)),1.0) - thermalli(i)= thermalli(i)+max(vpert,0.)*min(za(i,1)/(sfcfrac*hpbl(i)),1.0) - hgamt(i) = max(hgamt(i),0.0) - hgamq(i) = max(hgamq(i),0.0) - brint = -15.9*ust(i)*ust(i)/wspd(i)*wstar3(i)/(wscale(i)**4.) - hgamu(i) = brint*ux(i,1) - hgamv(i) = brint*vx(i,1) - else - pblflg(i) = .false. - endif - enddo -! -! enhance the pbl height by considering the thermal -! - do i = its,ite - if(pblflg(i))then - kpbl(i) = 1 - hpbl(i) = zq(i,1) - endif - enddo -! - do i = its,ite - if(pblflg(i))then - stable(i) = .false. - brup(i) = br(i) - brcr(i) = brcr_ub - endif - enddo -! - do k = 2,klpbl - do i = its,ite - if(.not.stable(i).and.pblflg(i))then - brdn(i) = brup(i) - spdk2 = max(ux(i,k)**2+vx(i,k)**2,1.) - brup(i) = (thvx(i,k)-thermal(i))*(g*za(i,k)/thvx(i,1))/spdk2 - kpbl(i) = k - stable(i) = brup(i).gt.brcr(i) - endif - enddo - enddo -! -! enhance pbl by theta-li -! - if (ysu_topdown_pblmix.eq.1)then - do i = its,ite - kpblold(i) = kpbl(i) - definebrup=.false. - do k = kpblold(i), kte-1 - spdk2 = max(ux(i,k)**2+vx(i,k)**2,1.) - bruptmp = (thlix(i,k)-thermalli(i))*(g*za(i,k)/thlix(i,1))/spdk2 - stable(i) = bruptmp.ge.brcr(i) - if (definebrup) then - kpbl(i) = k - brup(i) = bruptmp - definebrup=.false. - endif - if (.not.stable(i)) then !overwrite brup brdn values - brdn(i)=bruptmp - definebrup=.true. - pblflg(i)=.true. - endif - enddo - enddo - endif - - do i = its,ite - if(pblflg(i)) then - k = kpbl(i) - if(brdn(i).ge.brcr(i))then - brint = 0. - elseif(brup(i).le.brcr(i))then - brint = 1. - else - brint = (brcr(i)-brdn(i))/(brup(i)-brdn(i)) - endif - hpbl(i) = za(i,k-1)+brint*(za(i,k)-za(i,k-1)) - if(hpbl(i).lt.zq(i,2)) kpbl(i) = 1 - if(kpbl(i).le.1) pblflg(i) = .false. - endif - enddo -! -! stable boundary layer -! - do i = its,ite - if((.not.sfcflg(i)).and.hpbl(i).lt.zq(i,2)) then - brup(i) = br(i) - stable(i) = .false. - else - stable(i) = .true. - endif - enddo -! - do i = its,ite - if((.not.stable(i)).and.((xland(i)-1.5).ge.0))then - wspd10 = u10(i)*u10(i) + v10(i)*v10(i) - wspd10 = sqrt(wspd10) - ross = wspd10 / (cori*znt(i)) - brcr_sbro(i) = min(0.16*(1.e-7*ross)**(-0.18),.3) - endif - enddo -! - do i = its,ite - if(.not.stable(i))then - if((xland(i)-1.5).ge.0)then - brcr(i) = brcr_sbro(i) - else - brcr(i) = brcr_sb - endif - endif - enddo -! - do k = 2,klpbl - do i = its,ite - if(.not.stable(i))then - brdn(i) = brup(i) - spdk2 = max(ux(i,k)**2+vx(i,k)**2,1.) - brup(i) = (thvx(i,k)-thermal(i))*(g*za(i,k)/thvx(i,1))/spdk2 - kpbl(i) = k - stable(i) = brup(i).gt.brcr(i) - endif - enddo - enddo -! - do i = its,ite - if((.not.sfcflg(i)).and.hpbl(i).lt.zq(i,2)) then - k = kpbl(i) - if(brdn(i).ge.brcr(i))then - brint = 0. - elseif(brup(i).le.brcr(i))then - brint = 1. - else - brint = (brcr(i)-brdn(i))/(brup(i)-brdn(i)) - endif - hpbl(i) = za(i,k-1)+brint*(za(i,k)-za(i,k-1)) - if(hpbl(i).lt.zq(i,2)) kpbl(i) = 1 - if(kpbl(i).le.1) pblflg(i) = .false. - endif - enddo -! -! estimate the entrainment parameters -! - do i = its,ite - cloudflg(i)=.false. - if(pblflg(i)) then - k = kpbl(i) - 1 - wm3 = wstar3(i) + 5. * ust3(i) - wm2(i) = wm3**h2 - bfxpbl(i) = -0.15*thvx(i,1)/g*wm3/hpbl(i) - dthvx(i) = max(thvx(i,k+1)-thvx(i,k),tmin) - we(i) = max(bfxpbl(i)/dthvx(i),-sqrt(wm2(i))) - if((qcxl(i,k)+qixl(i,k)).gt.0.01e-3.and.ysu_topdown_pblmix.eq.1)then - if ( kpbl(i) .ge. 2) then - cloudflg(i)=.true. - templ=thlix(i,k)*(p2di(i,k+1)/100000)**rovcp - !rvls is ws at full level - rvls=100.*6.112*EXP(17.67*(templ-273.16)/(templ-29.65))*(ep2/p2di(i,k+1)) - temps=templ + ((qvx(i,k)+qcxl(i,k))-rvls)/(cp/xlv + & - ep2*xlv*rvls/(rd*templ**2)) - rvls=100.*6.112*EXP(17.67*(temps-273.15)/(temps-29.65))*(ep2/p2di(i,k+1)) - rcldb=max((qvx(i,k)+qcxl(i,k))-rvls,0.) - !entrainment efficiency - dthvx(i) = (thlix(i,k+2)+thx(i,k+2)*ep1*(qvx(i,k+2)+qcxl(i,k+2))) & - - (thlix(i,k) + thx(i,k) *ep1*(qvx(i,k) +qcxl(i,k))) - dthvx(i) = max(dthvx(i),0.1) - tmp1 = xlv/cp * rcldb/(pi2d(i,k)*dthvx(i)) - ent_eff = 0.2 * 8. * tmp1 +0.2 - - radsum=0. - do kk = 1,kpbl(i)-1 - radflux=rthraten(i,kk)*pi2d(i,kk) !converts theta/s to temp/s - radflux=radflux*cp/g*(p2di(i,kk)-p2di(i,kk+1)) ! converts temp/s to W/m^2 - if (radflux < 0.0 ) radsum=abs(radflux)+radsum - enddo - radsum=max(radsum,0.0) - - !recompute entrainment from sfc thermals - bfx0 = max(max(sflux(i),0.0)-radsum/rhox2(i,k)/cp,0.) - bfx0 = max(sflux(i),0.0) - wm3 = (govrth(i)*bfx0*hpbl(i))+5. * ust3(i) - wm2(i) = wm3**h2 - bfxpbl(i) = -0.15*thvx(i,1)/g*wm3/hpbl(i) - dthvx(i) = max(thvx(i,k+1)-thvx(i,k),tmin) - we(i) = max(bfxpbl(i)/dthvx(i),-sqrt(wm2(i))) - - !entrainment from PBL top thermals - bfx0 = max(radsum/rhox2(i,k)/cp-max(sflux(i),0.0),0.) - bfx0 = max(radsum/rhox2(i,k)/cp,0.) - wm3 = (g/thvx(i,k)*bfx0*hpbl(i)) ! this is wstar3(i) - wm2(i) = wm2(i)+wm3**h2 - bfxpbl(i) = - ent_eff * bfx0 - dthvx(i) = max(thvx(i,k+1)-thvx(i,k),0.1) - we(i) = we(i) + max(bfxpbl(i)/dthvx(i),-sqrt(wm3**h2)) - - !wstar3_2 - bfx0 = max(radsum/rhox2(i,k)/cp,0.) - wstar3_2(i) = (g/thvx(i,k)*bfx0*hpbl(i)) - !recompute hgamt - wscale(i) = (ust3(i)+phifac*karman*(wstar3(i)+wstar3_2(i))*0.5)**h1 - wscale(i) = min(wscale(i),ust(i)*aphi16) - wscale(i) = max(wscale(i),ust(i)/aphi5) - gamfac = bfac/rhox(i)/wscale(i) - hgamt(i) = min(gamfac*hfx(i)/cp,gamcrt) - hgamq(i) = min(gamfac*qfx(i),gamcrq) - gamfac = bfac/rhox2(i,k)/wscale(i) - hgamt2(i,k) = min(gamfac*radsum/cp,gamcrt) - hgamt(i) = max(hgamt(i),0.0) + max(hgamt2(i,k),0.0) - brint = -15.9*ust(i)*ust(i)/wspd(i)*(wstar3(i)+wstar3_2(i))/(wscale(i)**4.) - hgamu(i) = brint*ux(i,1) - hgamv(i) = brint*vx(i,1) - endif - endif - prpbl(i) = 1.0 - dthx = max(thx(i,k+1)-thx(i,k),tmin) - dqx = min(qvx(i,k+1)-qvx(i,k),0.0) - hfxpbl(i) = we(i)*dthx - qfxpbl(i) = we(i)*dqx -! - dux = ux(i,k+1)-ux(i,k) - dvx = vx(i,k+1)-vx(i,k) - if(dux.gt.tmin) then - ufxpbl(i) = max(prpbl(i)*we(i)*dux,-ust(i)*ust(i)) - elseif(dux.lt.-tmin) then - ufxpbl(i) = min(prpbl(i)*we(i)*dux,ust(i)*ust(i)) - else - ufxpbl(i) = 0.0 - endif - if(dvx.gt.tmin) then - vfxpbl(i) = max(prpbl(i)*we(i)*dvx,-ust(i)*ust(i)) - elseif(dvx.lt.-tmin) then - vfxpbl(i) = min(prpbl(i)*we(i)*dvx,ust(i)*ust(i)) - else - vfxpbl(i) = 0.0 - endif - delb = govrth(i)*d3*hpbl(i) - delta(i) = min(d1*hpbl(i) + d2*wm2(i)/delb,100.) - endif - enddo -! - do k = kts,klpbl - do i = its,ite - if(pblflg(i).and.k.ge.kpbl(i))then - entfac(i,k) = ((zq(i,k+1)-hpbl(i))/delta(i))**2. - else - entfac(i,k) = 1.e30 - endif - enddo - enddo -! -! compute diffusion coefficients below pbl -! - do k = kts,klpbl - do i = its,ite - if(k.lt.kpbl(i)) then - zfac(i,k) = min(max((1.-(zq(i,k+1)-zl1(i))/(hpbl(i)-zl1(i))),zfmin),1.) - zfacent(i,k) = (1.-zfac(i,k))**3. - wscalek(i,k) = (ust3(i)+phifac*karman*wstar3(i)*(1.-zfac(i,k)))**h1 - wscalek2(i,k) = (phifac*karman*wstar3_2(i)*(zfac(i,k)))**h1 - if(sfcflg(i)) then - prfac = conpr - prfac2 = 15.9*(wstar3(i)+wstar3_2(i))/ust3(i)/(1.+4.*karman*(wstar3(i)+wstar3_2(i))/ust3(i)) - prnumfac = -3.*(max(zq(i,k+1)-sfcfrac*hpbl(i),0.))**2./hpbl(i)**2. - else - prfac = 0. - prfac2 = 0. - prnumfac = 0. - phim8z = 1.+aphi5*zol1(i)*zq(i,k+1)/zl1(i) - wscalek(i,k) = ust(i)/phim8z - wscalek(i,k) = max(wscalek(i,k),0.001) - endif - prnum0 = (phih(i)/phim(i)+prfac) - prnum0 = max(min(prnum0,prmax),prmin) - xkzm(i,k) = wscalek(i,k) *karman* zq(i,k+1) * zfac(i,k)**pfac+ & - wscalek2(i,k)*karman*(hpbl(i)-zq(i,k+1))*(1-zfac(i,k))**pfac - !Do not include xkzm at kpbl-1 since it changes entrainment - if (k.eq.kpbl(i)-1.and.cloudflg(i).and.we(i).lt.0.0) then - xkzm(i,k) = 0.0 - endif - prnum = 1. + (prnum0-1.)*exp(prnumfac) - xkzq(i,k) = xkzm(i,k)/prnum*zfac(i,k)**(pfac_q-pfac) - prnum0 = prnum0/(1.+prfac2*karman*sfcfrac) - prnum = 1. + (prnum0-1.)*exp(prnumfac) - xkzh(i,k) = xkzm(i,k)/prnum - xkzm(i,k) = xkzm(i,k)+xkzom(i,k) - xkzh(i,k) = xkzh(i,k)+xkzoh(i,k) - xkzq(i,k) = xkzq(i,k)+xkzoh(i,k) - xkzm(i,k) = min(xkzm(i,k),xkzmax) - xkzh(i,k) = min(xkzh(i,k),xkzmax) - xkzq(i,k) = min(xkzq(i,k),xkzmax) - endif - enddo - enddo -! -! compute diffusion coefficients over pbl (free atmosphere) -! - do k = kts,kte-1 - do i = its,ite - if(k.ge.kpbl(i)) then - ss = ((ux(i,k+1)-ux(i,k))*(ux(i,k+1)-ux(i,k)) & - +(vx(i,k+1)-vx(i,k))*(vx(i,k+1)-vx(i,k))) & - /(dza(i,k+1)*dza(i,k+1))+1.e-9 - govrthv = g/(0.5*(thvx(i,k+1)+thvx(i,k))) - ri = govrthv*(thvx(i,k+1)-thvx(i,k))/(ss*dza(i,k+1)) - if(imvdif.eq.1)then - if((qcxl(i,k)+qixl(i,k)).gt.0.01e-3.and. & - (qcxl(i,k+1)+qixl(i,k+1)).gt.0.01e-3)then -! in cloud - qmean = 0.5*(qvx(i,k)+qvx(i,k+1)) - tmean = 0.5*(tx(i,k)+tx(i,k+1)) - alph = xlv*qmean/rd/tmean - chi = xlv*xlv*qmean/cp/rv/tmean/tmean - ri = (1.+alph)*(ri-g*g/ss/tmean/cp*((chi-alph)/(1.+chi))) - endif - endif - zk = karman*zq(i,k+1) - rlamdz = min(max(0.1*dza(i,k+1),rlam),300.) - rlamdz = min(dza(i,k+1),rlamdz) - rl2 = (zk*rlamdz/(rlamdz+zk))**2 - dk = rl2*sqrt(ss) - if(ri.lt.0.)then -! unstable regime - ri = max(ri, rimin) - sri = sqrt(-ri) - xkzm(i,k) = dk*(1+8.*(-ri)/(1+1.746*sri)) - xkzh(i,k) = dk*(1+8.*(-ri)/(1+1.286*sri)) - else -! stable regime - xkzh(i,k) = dk/(1+5.*ri)**2 - prnum = 1.0+2.1*ri - prnum = min(prnum,prmax) - xkzm(i,k) = xkzh(i,k)*prnum - endif -! - xkzm(i,k) = xkzm(i,k)+xkzom(i,k) - xkzh(i,k) = xkzh(i,k)+xkzoh(i,k) - xkzm(i,k) = min(xkzm(i,k),xkzmax) - xkzh(i,k) = min(xkzh(i,k),xkzmax) - xkzml(i,k) = xkzm(i,k) - xkzhl(i,k) = xkzh(i,k) - endif - enddo - enddo -! -! compute tridiagonal matrix elements for heat -! - do k = kts,kte - do i = its,ite - au(i,k) = 0. - al(i,k) = 0. - ad(i,k) = 0. - f1(i,k) = 0. - enddo - enddo -! - do i = its,ite - ad(i,1) = 1. - f1(i,1) = thx(i,1)-300.+(1.0-bepswitch)*hfx(i)/cont/del(i,1)*dt2 - enddo -! - do k = kts,kte-1 - do i = its,ite - dtodsd = sfk2d(i,k)*dt2/del(i,k) - dtodsu = sfk2d(i,k)*dt2/del(i,k+1) - dsig = p2d(i,k)-p2d(i,k+1) - rdz = 1./dza(i,k+1) - tem1 = dsig*xkzh(i,k)*rdz - if(pblflg(i).and.k.lt.kpbl(i)) then - dsdzt = tem1*(-hgamt(i)/hpbl(i)-hfxpbl(i)*zfacent(i,k)/xkzh(i,k)) - f1(i,k) = f1(i,k)+dtodsd*dsdzt - f1(i,k+1) = thx(i,k+1)-300.-dtodsu*dsdzt - elseif(pblflg(i).and.k.ge.kpbl(i).and.entfac(i,k).lt.4.6) then - xkzh(i,k) = -we(i)*dza(i,kpbl(i))*exp(-entfac(i,k)) - xkzh(i,k) = sqrt(xkzh(i,k)*xkzhl(i,k)) - xkzh(i,k) = max(xkzh(i,k),xkzoh(i,k)) - xkzh(i,k) = min(xkzh(i,k),xkzmax) - f1(i,k+1) = thx(i,k+1)-300. - else - f1(i,k+1) = thx(i,k+1)-300. - endif - tem1 = dsig*xkzh(i,k)*rdz - dsdz2 = tem1*rdz - au(i,k) = -dtodsd*dsdz2/vlk2d(i,k) - al(i,k) = -dtodsu*dsdz2/vlk2d(i,k) - ad(i,k) = ad(i,k)-au(i,k) - ad(i,k+1) = 1.-al(i,k) - exch_hx(i,k+1) = xkzh(i,k) - enddo - enddo -! -! add bep/bep+bem forcing for heat if flag_bep=.true. -! - do k = kts,kte - do i = its,ite - ad(i,k) = ad(i,k) - a_t2d(i,k)*dt2 - f1(i,k) = f1(i,k) + b_t2d(i,k)*dt2 - enddo - enddo -! -! copies here to avoid duplicate input args for tridin -! - do k = kts,kte - do i = its,ite - cu(i,k) = au(i,k) - r1(i,k) = f1(i,k) - enddo - enddo -! - call tridin_ysu(al,ad,cu,r1,au,f1,its,ite,kts,kte,1) -! -! recover tendencies of heat -! - do k = kte,kts,-1 - do i = its,ite -#if (NEED_B4B_DURING_CCPP_TESTING == 1) - ttend = (f1(i,k)-thx(i,k)+300.)*rdt*pi2d(i,k) - ttnp(i,k) = ttend - dtsfc(i) = dtsfc(i)+ttend*cont*del(i,k)/pi2d(i,k) -#elif (NEED_B4B_DURING_CCPP_TESTING != 1) - ttend = (f1(i,k)-thx(i,k)+300.)*rdt - ttnp(i,k) = ttend - dtsfc(i) = dtsfc(i)+ttend*cont*del(i,k) -#endif - enddo - enddo -! - -!--- compute tridiagonal matrix elements for water vapor, cloud water, and cloud ice: - !--- initialization of k-coefficient above the PBL. - do i = its,ite - do k = kts,kte-1 - if(k .ge. kpbl(i)) xkzq(i,k) = xkzh(i,k) - enddo - enddo - - !--- water vapor: - do i = its,ite - do k = kts,kte - au(i,k) = 0. - al(i,k) = 0. - ad(i,k) = 0. - f1(i,k) = 0. - r1(i,k) = 0. - enddo - - k = 1 - ad(i,1) = 1. - f1(i,1) = qvx(i,1)+(1.0-bepswitch)*qfx(i)*g/del(i,1)*dt2 - - do k = kts,kte-1 - dtodsd = sfk2d(i,k)*dt2/del(i,k) - dtodsu = sfk2d(i,k)*dt2/del(i,k+1) - dsig = p2d(i,k)-p2d(i,k+1) - rdz = 1./dza(i,k+1) - tem1 = dsig*xkzq(i,k)*rdz - if(pblflg(i).and.k.lt.kpbl(i)) then - dsdzq = tem1*(-qfxpbl(i)*zfacent(i,k)/xkzq(i,k)) - f1(i,k) = f1(i,k)+dtodsd*dsdzq - f1(i,k+1) = qvx(i,k+1)-dtodsu*dsdzq - elseif(pblflg(i).and.k.ge.kpbl(i).and.entfac(i,k).lt.4.6) then - xkzq(i,k) = -we(i)*dza(i,kpbl(i))*exp(-entfac(i,k)) - xkzq(i,k) = sqrt(xkzq(i,k)*xkzhl(i,k)) - xkzq(i,k) = max(xkzq(i,k),xkzoh(i,k)) - xkzq(i,k) = min(xkzq(i,k),xkzmax) - f1(i,k+1) = qvx(i,k+1) - else - f1(i,k+1) = qvx(i,k+1) - endif - tem1 = dsig*xkzq(i,k)*rdz - dsdz2 = tem1*rdz - au(i,k) = -dtodsd*dsdz2/vlk2d(i,k) - al(i,k) = -dtodsu*dsdz2/vlk2d(i,k) - ad(i,k) = ad(i,k)-au(i,k) - ad(i,k+1) = 1.-al(i,k) - enddo -! -! add bep/bep+bem forcing for water vapor if flag_bep=.true. -! - do k = kts,kte - adv(i,k) = ad(i,k) - a_q2d(i,k)*dt2 - f1(i,k) = f1(i,k) + b_q2d(i,k)*dt2 - enddo - - do k = kts,kte - cu(i,k) = au(i,k) - r1(i,k) = f1(i,k) - enddo - enddo - call tridin_ysu(al,adv,cu,r1,au,f1,its,ite,kts,kte,1) - - do i = its,ite - do k = kte,kts,-1 - qtend = (f1(i,k)-qvx(i,k))*rdt - qvtnp(i,k) = qtend - dqsfc(i) = dqsfc(i)+qtend*conq*del(i,k) - enddo - enddo - - !--- cloud water: - if(f_qc) then - do i = its,ite - do k = kts,kte - f1(i,k) = qcxl(i,k) - r1(i,k) = f1(i,k) - enddo - enddo - call tridin_ysu(al,ad,cu,r1,au,f1,its,ite,kts,kte,1) - - do i = its,ite - do k = kte,kts,-1 - qtend = (f1(i,k)-qcxl(i,k))*rdt - qctnp(i,k) = qtend - enddo - enddo - endif - - !--- cloud ice: - if(f_qi) then - do i = its,ite - do k = kts,kte - f1(i,k) = qixl(i,k) - r1(i,k) = f1(i,k) - enddo - enddo - call tridin_ysu(al,ad,cu,r1,au,f1,its,ite,kts,kte,1) - - do i = its,ite - do k = kte,kts,-1 - qtend = (f1(i,k)-qixl(i,k))*rdt - qitnp(i,k) = qtend - enddo - enddo - endif - - !--- chemical species and/or passive tracers, meaning all variables that we want to - ! be vertically-mixed, if nmix=0 (number of tracers) then the loop is skipped - do n = 1, nmix - do i = its,ite - do k = kts,kte - f1(i,k) = qmix(i,k,n) - r1(i,k) = f1(i,k) - enddo - enddo - call tridin_ysu(al,ad,cu,r1,au,f1,its,ite,kts,kte,1) - - do i = its,ite - do k = kte,kts,-1 - qtend = (f1(i,k)-qmix(i,k,n))*rdt - qmixtnp(i,k,n) = qtend - enddo - enddo - enddo - -! -! compute tridiagonal matrix elements for momentum -! - do i = its,ite - do k = kts,kte - au(i,k) = 0. - al(i,k) = 0. - ad(i,k) = 0. - f1(i,k) = 0. - f2(i,k) = 0. - enddo - enddo -! -! paj: ctopo=1 if topo_wind=0 (default) -!raquel---paj tke code (could be replaced with shin-hong tke in future - do i = its,ite - do k= kts, kte-1 - shear_ysu(i,k)=xkzm(i,k)*((-hgamu(i)/hpbl(i)+(ux(i,k+1)-ux(i,k))/dza(i,k+1))*(ux(i,k+1)-ux(i,k))/dza(i,k+1) & - + (-hgamv(i)/hpbl(i)+(vx(i,k+1)-vx(i,k))/dza(i,k+1))*(vx(i,k+1)-vx(i,k))/dza(i,k+1)) - buoy_ysu(i,k)=xkzh(i,k)*g*(1.0/thx(i,k))*(-hgamt(i)/hpbl(i)+(thx(i,k+1)-thx(i,k))/dza(i,k+1)) - - zk = karman*zq(i,k+1) - !over pbl - if (k.ge.kpbl(i)) then - rlamdz = min(max(0.1*dza(i,k+1),rlam),300.) - rlamdz = min(dza(i,k+1),rlamdz) - else - !in pbl - rlamdz = 150.0 - endif - el_ysu(i,k) = zk*rlamdz/(rlamdz+zk) - tke_ysu(i,k)=16.6*el_ysu(i,k)*(shear_ysu(i,k)-buoy_ysu(i,k)) - !q2 when q3 positive - if(tke_ysu(i,k).le.0) then - tke_ysu(i,k)=0.0 - else - tke_ysu(i,k)=(tke_ysu(i,k))**0.66 - endif - enddo - !Hybrid pblh of MYNN - !tke is q2 -! CALL GET_PBLH(KTS,KTE,pblh_ysu(i),thvx(i,kts:kte),& -! & tke_ysu(i,kts:kte),zq(i,kts:kte+1),dzq(i,kts:kte),xland(i)) - do k = kts,kte - thvx_1d(k) = thvx(i,k) - tke_1d(k) = tke_ysu(i,k) - zq_1d(k) = zq(i,k) - dzq_1d(k) = dzq(i,k) - enddo - zq_1d(kte+1) = zq(i,kte+1) - call get_pblh(kts,kte,pblh_ysu(i),thvx_1d,tke_1d,zq_1d,dzq_1d,xland(i)) - -!--- end of paj tke -! compute vconv -! Use Beljaars over land - if (xland(i).lt.1.5) then - fluxc = max(sflux(i),0.0) - vconvc=1. - VCONV = vconvc*(g/thvx(i,1)*pblh_ysu(i)*fluxc)**.33 - else -! for water there is no topo effect so vconv not needed - VCONV = 0. - endif - vconvfx(i) = vconv -!raquel -!ctopo stability correction - fric(i,1)=ust(i)**2/wspd1(i)*rhox(i)*g/del(i,1)*dt2 & - *(wspd1(i)/wspd(i))**2 - if(present(ctopo)) then - vconvnew=0.9*vconvfx(i)+1.5*(max((pblh_ysu(i)-500)/1000.0,0.0)) - vconvlim = min(vconvnew,1.0) - ad(i,1) = 1.+fric(i,1)*vconvlim+ctopo(i)*fric(i,1)*(1-vconvlim) - ad(i,1) = ad(i,1) - bepswitch*frc_urb1d(i)* & - (fric(i,1)*vconvlim+ctopo(i)*fric(i,1)*(1-vconvlim)) -! ad(i,1) = 1.+(1.-bepswitch*frc_urb1d(i))* & -! (fric(i,1)*vconvlim+ctopo(i)*fric(i,1)*(1-vconvlim)) - else - ad(i,1) = 1.+fric(i,1) - endif - f1(i,1) = ux(i,1)+uoxl(i)*ust(i)**2*rhox(i)*g/del(i,1)*dt2/wspd1(i)*(wspd1(i)/wspd(i))**2 - f2(i,1) = vx(i,1)+voxl(i)*ust(i)**2*rhox(i)*g/del(i,1)*dt2/wspd1(i)*(wspd1(i)/wspd(i))**2 - enddo -! - do k = kts,kte-1 - do i = its,ite - dtodsd = sfk2d(i,k)*dt2/del(i,k) - dtodsu = sfk2d(i,k)*dt2/del(i,k+1) - dsig = p2d(i,k)-p2d(i,k+1) - rdz = 1./dza(i,k+1) - tem1 = dsig*xkzm(i,k)*rdz - if(pblflg(i).and.k.lt.kpbl(i))then - dsdzu = tem1*(-hgamu(i)/hpbl(i)-ufxpbl(i)*zfacent(i,k)/xkzm(i,k)) - dsdzv = tem1*(-hgamv(i)/hpbl(i)-vfxpbl(i)*zfacent(i,k)/xkzm(i,k)) - f1(i,k) = f1(i,k)+dtodsd*dsdzu - f1(i,k+1) = ux(i,k+1)-dtodsu*dsdzu - f2(i,k) = f2(i,k)+dtodsd*dsdzv - f2(i,k+1) = vx(i,k+1)-dtodsu*dsdzv - elseif(pblflg(i).and.k.ge.kpbl(i).and.entfac(i,k).lt.4.6) then - xkzm(i,k) = prpbl(i)*xkzh(i,k) - xkzm(i,k) = sqrt(xkzm(i,k)*xkzml(i,k)) - xkzm(i,k) = max(xkzm(i,k),xkzom(i,k)) - xkzm(i,k) = min(xkzm(i,k),xkzmax) - f1(i,k+1) = ux(i,k+1) - f2(i,k+1) = vx(i,k+1) - else - f1(i,k+1) = ux(i,k+1) - f2(i,k+1) = vx(i,k+1) - endif - tem1 = dsig*xkzm(i,k)*rdz - dsdz2 = tem1*rdz - au(i,k) = -dtodsd*dsdz2/vlk2d(i,k) - al(i,k) = -dtodsu*dsdz2/vlk2d(i,k) - ad(i,k) = ad(i,k)-au(i,k) - ad(i,k+1) = 1.-al(i,k) - exch_mx(i,k+1) = xkzm(i,k) - enddo - enddo -! -! add bep/bep+bem forcing for momentum if flag_bep=.true. -! - do k = kts,kte - do i = its,ite - ad1(i,k) = ad(i,k) - end do - end do - do k = kts,kte - do i = its,ite - ad(i,k) = ad(i,k) - a_u2d(i,k)*dt2 - ad1(i,k) = ad1(i,k) - a_v2d(i,k)*dt2 - f1(i,k) = f1(i,k) + b_u2d(i,k)*dt2 - f2(i,k) = f2(i,k) + b_v2d(i,k)*dt2 - enddo - enddo -! -! copies here to avoid duplicate input args for tridin -! - do k = kts,kte - do i = its,ite - cu(i,k) = au(i,k) - r1(i,k) = f1(i,k) - r2(i,k) = f2(i,k) - enddo - enddo -! -! solve tridiagonal problem for momentum -! - call tridi2n(al,ad,ad1,cu,r1,r2,au,f1,f2,its,ite,kts,kte,1) -! -! recover tendencies of momentum -! - do k = kte,kts,-1 - do i = its,ite - utend = (f1(i,k)-ux(i,k))*rdt - vtend = (f2(i,k)-vx(i,k))*rdt - utnp(i,k) = utend - vtnp(i,k) = vtend - dusfc(i) = dusfc(i) + utend*conwrc*del(i,k) - dvsfc(i) = dvsfc(i) + vtend*conwrc*del(i,k) - enddo - enddo -! -! paj: ctopo2=1 if topo_wind=0 (default) -! - do i = its,ite - if(present(ctopo).and.present(ctopo2)) then ! mchen for NMM - u10(i) = ctopo2(i)*u10(i)+(1-ctopo2(i))*ux(i,1) - v10(i) = ctopo2(i)*v10(i)+(1-ctopo2(i))*vx(i,1) - endif !mchen - enddo -! -!---- end of vertical diffusion -! - do i = its,ite - kpbl1d(i) = kpbl(i) - enddo -! - errmsg = 'bl_ysu_run OK' - errflg = 0 -! - end subroutine bl_ysu_run - -!================================================================================================================= - subroutine bl_ysu_init (errmsg, errflg) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! This routine currently does nothing - - errmsg = '' - errflg = 0 - - end subroutine bl_ysu_init - -!================================================================================================================= - subroutine bl_ysu_final (errmsg, errflg) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! This routine currently does nothing - - errmsg = '' - errflg = 0 - - end subroutine bl_ysu_final - -!================================================================================================================= - subroutine bl_ysu_timestep_init (errmsg, errflg) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! This routine currently does nothing - - errmsg = '' - errflg = 0 - - end subroutine bl_ysu_timestep_init - -!================================================================================================================= - subroutine bl_ysu_timestep_final (errmsg, errflg) - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! This routine currently does nothing - - errmsg = '' - errflg = 0 - - end subroutine bl_ysu_timestep_final -!------------------------------------------------------------------------------- -! -!------------------------------------------------------------------------------- - subroutine tridi2n(cl,cm,cm1,cu,r1,r2,au,f1,f2,its,ite,kts,kte,nt) -!------------------------------------------------------------------------------- - implicit none -!------------------------------------------------------------------------------- -! - integer, intent(in ) :: its,ite, kts,kte, nt -! - real(kind=kind_phys), dimension( its:ite, kts+1:kte+1 ) , & - intent(in ) :: cl -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(in ) :: cm, & - cm1, & - r1 - real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & - intent(in ) :: r2 -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(inout) :: au, & - cu, & - f1 - real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & - intent(inout) :: f2 -! - real(kind=kind_phys) :: fk - integer :: i,k,l,n,it -! -!------------------------------------------------------------------------------- -! - l = ite - n = kte -! - do i = its,l - fk = 1./cm(i,1) - au(i,1) = fk*cu(i,1) - f1(i,1) = fk*r1(i,1) - enddo -! - do it = 1,nt - do i = its,l - fk = 1./cm1(i,1) - f2(i,1,it) = fk*r2(i,1,it) - enddo - enddo - - do k = kts+1,n-1 - do i = its,l - fk = 1./(cm(i,k)-cl(i,k)*au(i,k-1)) - au(i,k) = fk*cu(i,k) - f1(i,k) = fk*(r1(i,k)-cl(i,k)*f1(i,k-1)) - enddo - enddo -! - do it = 1,nt - do k = kts+1,n-1 - do i = its,l - fk = 1./(cm1(i,k)-cl(i,k)*au(i,k-1)) - f2(i,k,it) = fk*(r2(i,k,it)-cl(i,k)*f2(i,k-1,it)) - enddo - enddo - enddo -! - do i = its,l - fk = 1./(cm(i,n)-cl(i,n)*au(i,n-1)) - f1(i,n) = fk*(r1(i,n)-cl(i,n)*f1(i,n-1)) - enddo -! - do it = 1,nt - do i = its,l - fk = 1./(cm1(i,n)-cl(i,n)*au(i,n-1)) - f2(i,n,it) = fk*(r2(i,n,it)-cl(i,n)*f2(i,n-1,it)) - enddo - enddo -! - do k = n-1,kts,-1 - do i = its,l - f1(i,k) = f1(i,k)-au(i,k)*f1(i,k+1) - enddo - enddo -! - do it = 1,nt - do k = n-1,kts,-1 - do i = its,l - f2(i,k,it) = f2(i,k,it)-au(i,k)*f2(i,k+1,it) - enddo - enddo - enddo -! - end subroutine tridi2n -!------------------------------------------------------------------------------- -! -!------------------------------------------------------------------------------- - subroutine tridin_ysu(cl,cm,cu,r2,au,f2,its,ite,kts,kte,nt) -!------------------------------------------------------------------------------- - implicit none -!------------------------------------------------------------------------------- -! - integer, intent(in ) :: its,ite, kts,kte, nt -! - real(kind=kind_phys), dimension( its:ite, kts+1:kte+1 ) , & - intent(in ) :: cl -! - real(kind=kind_phys), dimension( its:ite, kts:kte ) , & - intent(in ) :: au, & - cm, & - cu - real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & - intent(in ) :: r2 - - real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & - intent(inout) :: f2 -! - real(kind=kind_phys) :: fk - real(kind=kind_phys), dimension( its:ite, kts:kte ) :: aul - integer :: i,k,l,n,it -! -!------------------------------------------------------------------------------- -! - l = ite - n = kte -! - do i = its,ite - do k = kts,kte - aul(i,k) = 0. - enddo - enddo -! - do it = 1,nt - do i = its,l - fk = 1./cm(i,1) - aul(i,1) = fk*cu(i,1) - f2(i,1,it) = fk*r2(i,1,it) - enddo - enddo -! - do it = 1,nt - do k = kts+1,n-1 - do i = its,l - fk = 1./(cm(i,k)-cl(i,k)*aul(i,k-1)) - aul(i,k) = fk*cu(i,k) - f2(i,k,it) = fk*(r2(i,k,it)-cl(i,k)*f2(i,k-1,it)) - enddo - enddo - enddo -! - do it = 1,nt - do i = its,l - fk = 1./(cm(i,n)-cl(i,n)*aul(i,n-1)) - f2(i,n,it) = fk*(r2(i,n,it)-cl(i,n)*f2(i,n-1,it)) - enddo - enddo -! - do it = 1,nt - do k = n-1,kts,-1 - do i = its,l - f2(i,k,it) = f2(i,k,it)-aul(i,k)*f2(i,k+1,it) - enddo - enddo - enddo -! - end subroutine tridin_ysu - -!================================================================================================================= - subroutine get_pblh(kts,kte,zi,thetav1d,qke1d,zw1d,dz1d,landsea) -! Copied from MYNN PBL - - !--------------------------------------------------------------- - ! NOTES ON THE PBLH FORMULATION - ! - !The 1.5-theta-increase method defines PBL heights as the level at - !which the potential temperature first exceeds the minimum potential - !temperature within the boundary layer by 1.5 K. When applied to - !observed temperatures, this method has been shown to produce PBL- - !height estimates that are unbiased relative to profiler-based - !estimates (Nielsen-Gammon et al. 2008). However, their study did not - !include LLJs. Banta and Pichugina (2008) show that a TKE-based - !threshold is a good estimate of the PBL height in LLJs. Therefore, - !a hybrid definition is implemented that uses both methods, weighting - !the TKE-method more during stable conditions (PBLH < 400 m). - !A variable tke threshold (TKEeps) is used since no hard-wired - !value could be found to work best in all conditions. - !--------------------------------------------------------------- - - integer,intent(in) :: kts,kte - real(kind=kind_phys), intent(out) :: zi - real(kind=kind_phys), intent(in) :: landsea - real(kind=kind_phys), dimension(kts:kte), intent(in) :: thetav1d, qke1d, dz1d - real(kind=kind_phys), dimension(kts:kte+1), intent(in) :: zw1d - !local vars - real(kind=kind_phys) :: pblh_tke,qtke,qtkem1,wt,maxqke,tkeeps,minthv - real(kind=kind_phys) :: delt_thv !delta theta-v; dependent on land/sea point - real(kind=kind_phys), parameter :: sbl_lim = 200. !theta-v pbl lower limit of trust (m). - real(kind=kind_phys), parameter :: sbl_damp = 400. !damping range for averaging with tke-based pblh (m). - integer :: i,j,k,kthv,ktke - - !find max tke and min thetav in the lowest 500 m - k = kts+1 - kthv = 1 - ktke = 1 - maxqke = 0. - minthv = 9.e9 - - do while (zw1d(k) .le. 500.) - qtke =max(qke1d(k),0.) ! maximum qke - if (maxqke < qtke) then - maxqke = qtke - ktke = k - endif - if (minthv > thetav1d(k)) then - minthv = thetav1d(k) - kthv = k - endif - k = k+1 - enddo - !tkeeps = maxtke/20. = maxqke/40. - tkeeps = maxqke/40. - tkeeps = max(tkeeps,0.025) - tkeeps = min(tkeeps,0.25) - - !find thetav-based pblh (best for daytime). - zi=0. - k = kthv+1 - if((landsea-1.5).ge.0)then - ! water - delt_thv = 0.75 - else - ! land - delt_thv = 1.5 - endif - - zi=0. - k = kthv+1 - do while (zi .eq. 0.) - if (thetav1d(k) .ge. (minthv + delt_thv))then - zi = zw1d(k) - dz1d(k-1)* & - & min((thetav1d(k)-(minthv + delt_thv))/max(thetav1d(k)-thetav1d(k-1),1e-6),1.0) - endif - k = k+1 - if (k .eq. kte-1) zi = zw1d(kts+1) !exit safeguard - enddo - - !print*,"in get_pblh:",thsfc,zi - !for stable boundary layers, use tke method to complement the - !thetav-based definition (when the theta-v based pblh is below ~0.5 km). - !the tanh weighting function will make the tke-based definition negligible - !when the theta-v-based definition is above ~1 km. - !find tke-based pblh (best for nocturnal/stable conditions). - - pblh_tke=0. - k = ktke+1 - do while (pblh_tke .eq. 0.) - !qke can be negative (if ckmod == 0)... make tke non-negative. - qtke =max(qke1d(k)/2.,0.) ! maximum tke - qtkem1=max(qke1d(k-1)/2.,0.) - if (qtke .le. tkeeps) then - pblh_tke = zw1d(k) - dz1d(k-1)* & - & min((tkeeps-qtke)/max(qtkem1-qtke, 1e-6), 1.0) - !in case of near zero tke, set pblh = lowest level. - pblh_tke = max(pblh_tke,zw1d(kts+1)) - !print *,"pblh_tke:",i,j,pblh_tke, qke1d(k)/2., zw1d(kts+1) - endif - k = k+1 - if (k .eq. kte-1) pblh_tke = zw1d(kts+1) !exit safeguard - enddo - - !blend the two pblh types here: - - wt=.5*tanh((zi - sbl_lim)/sbl_damp) + .5 - zi=pblh_tke*(1.-wt) + zi*wt - - end subroutine get_pblh - -!================================================================================================================= - end module bl_ysu -!================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_mmm/cu_ntiedtke.F b/src/core_atmosphere/physics/physics_mmm/cu_ntiedtke.F deleted file mode 100644 index 041bb6745..000000000 --- a/src/core_atmosphere/physics/physics_mmm/cu_ntiedtke.F +++ /dev/null @@ -1,3766 +0,0 @@ -!================================================================================================================= - module cu_ntiedtke_common - use ccpp_kinds,only: kind_phys - - - implicit none - save - - real(kind=kind_phys):: alf - real(kind=kind_phys):: als - real(kind=kind_phys):: alv - real(kind=kind_phys):: cpd - real(kind=kind_phys):: g - real(kind=kind_phys):: rd - real(kind=kind_phys):: rv - - real(kind=kind_phys),parameter:: t13 = 1.0/3.0 - real(kind=kind_phys),parameter:: tmelt = 273.16 - real(kind=kind_phys),parameter:: c1es = 610.78 - real(kind=kind_phys),parameter:: c3les = 17.2693882 - real(kind=kind_phys),parameter:: c3ies = 21.875 - real(kind=kind_phys),parameter:: c4les = 35.86 - real(kind=kind_phys),parameter:: c4ies = 7.66 - - real(kind=kind_phys),parameter:: rtwat = tmelt - real(kind=kind_phys),parameter:: rtber = tmelt-5. - real(kind=kind_phys),parameter:: rtice = tmelt-23. - - integer,parameter:: momtrans = 2 - real(kind=kind_phys),parameter:: entrdd = 2.0e-4 - real(kind=kind_phys),parameter:: cmfcmax = 1.0 - real(kind=kind_phys),parameter:: cmfcmin = 1.e-10 - real(kind=kind_phys),parameter:: cmfdeps = 0.30 - real(kind=kind_phys),parameter:: zdnoprc = 2.0e4 - real(kind=kind_phys),parameter:: cprcon = 1.4e-3 - real(kind=kind_phys),parameter:: pgcoef = 0.7 - - real(kind=kind_phys):: rcpd - real(kind=kind_phys):: c2es - real(kind=kind_phys):: c5les - real(kind=kind_phys):: c5ies - real(kind=kind_phys):: r5alvcp - real(kind=kind_phys):: r5alscp - real(kind=kind_phys):: ralvdcp - real(kind=kind_phys):: ralsdcp - real(kind=kind_phys):: ralfdcp - real(kind=kind_phys):: vtmpc1 - real(kind=kind_phys):: zrg - - logical,parameter:: nonequil = .true. - logical,parameter:: lmfpen = .true. - logical,parameter:: lmfmid = .true. - logical,parameter:: lmfscv = .true. - logical,parameter:: lmfdd = .true. - logical,parameter:: lmfdudv = .true. - - -!================================================================================================================= - end module cu_ntiedtke_common -!================================================================================================================= - - module cu_ntiedtke - use ccpp_kinds,only: kind_phys - use cu_ntiedtke_common - - - implicit none - private - public:: cu_ntiedtke_run, & - cu_ntiedtke_init, & - cu_ntiedtke_final, & - cu_ntiedtke_timestep_init, & - cu_ntiedtke_timestep_final - - - contains - - -!================================================================================================================= - subroutine cu_ntiedtke_init(con_cp,con_rd,con_rv,con_xlv,con_xls,con_xlf,con_grav,errmsg,errflg) -!================================================================================================================= - -!input arguments: - real(kind=kind_phys),intent(in):: & - con_cp, & - con_rd, & - con_rv, & - con_xlv, & - con_xls, & - con_xlf, & - con_grav - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - alf = con_xlf - als = con_xls - alv = con_xlv - cpd = con_cp - g = con_grav - rd = con_rd - rv = con_rv - - rcpd = 1.0/con_cp - c2es = c1es*con_rd/con_rv - c5les = c3les*(tmelt-c4les) - c5ies = c3ies*(tmelt-c4ies) - r5alvcp = c5les*con_xlv*rcpd - r5alscp = c5ies*con_xls*rcpd - ralvdcp = con_xlv*rcpd - ralsdcp = con_xls*rcpd - ralfdcp = con_xlf*rcpd - vtmpc1 = con_rv/con_rd-1.0 - zrg = 1.0/con_grav - - errmsg = 'cu_ntiedtke_init OK' - errflg = 0 - - end subroutine cu_ntiedtke_init - -!================================================================================================================= - subroutine cu_ntiedtke_final(errmsg,errflg) -!================================================================================================================= - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - errmsg = 'cu_ntiedtke_final OK' - errflg = 0 - - end subroutine cu_ntiedtke_final - -!================================================================================================================= - subroutine cu_ntiedtke_timestep_init(its,ite,kts,kte,im,kx,kx1,itimestep,stepcu,dt,grav,xland,dz,pres,presi, & - t,rho,qv,qc,qi,u,v,w,qvften,thften,qvftenz,thftenz,slimsk,delt,prsl,ghtl,tf,qvf,qcf, & - qif,uf,vf,prsi,ghti,omg,errmsg,errflg) -!================================================================================================================= - -!--- input arguments: - integer,intent(in):: its,ite,kts,kte - integer,intent(in):: itimestep - integer,intent(in):: stepcu - - real(kind=kind_phys),intent(in):: dt,grav - real(kind=kind_phys),intent(in),dimension(its:ite):: xland - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: dz,pres,t,rho,qv,qc,qi,u,v - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: qvften,thften - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte+1):: presi,w - -!--- inout arguments: - integer,intent(inout):: im,kx,kx1 - integer,intent(inout),dimension(its:ite):: slimsk - - real(kind=kind_phys),intent(inout):: delt - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: tf,qvf,qcf,qif,uf,vf - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: ghtl,omg,prsl - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: qvftenz,thftenz - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte+1):: ghti,prsi - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!--- local variables and arrays: - integer:: i,k,pp,zz - - real(kind=kind_phys),dimension(its:ite,kts:kte):: zl,dot - real(kind=kind_phys),dimension(its:ite,kts:kte+1):: zi - -!----------------------------------------------------------------------------------------------------------------- - - im = ite-its+1 - kx = kte-kts+1 - kx1 = kx+1 - - delt = dt*stepcu - - do i = its,ite - slimsk(i) = (abs(xland(i)-2.)) - enddo - - k = kts - do i = its,ite - zi(i,k) = 0. - enddo - do k = kts,kte - do i = its,ite - zi(i,k+1) = zi(i,k)+dz(i,k) - enddo - enddo - do k = kts,kte - do i = its,ite - zl(i,k) = 0.5*(zi(i,k)+zi(i,k+1)) - dot(i,k) = -0.5*grav*rho(i,k)*(w(i,k)+w(i,k+1)) - enddo - enddo - - pp = 0 - do k = kts,kte+1 - zz = kte + 1 - pp - do i = its,ite - ghti(i,zz) = zi(i,k) - prsi(i,zz) = presi(i,k) - enddo - pp = pp + 1 - enddo - pp = 0 - do k = kts,kte - zz = kte-pp - do i = its,ite - ghtl(i,zz) = zl(i,k) - omg(i,zz) = dot(i,k) - prsl(i,zz) = pres(i,k) - enddo - pp = pp + 1 - enddo - - pp = 0 - do k = kts,kte - zz = kte-pp - do i = its,ite - tf(i,zz) = t(i,k) - qvf(i,zz) = qv(i,k) - qcf(i,zz) = qc(i,k) - qif(i,zz) = qi(i,k) - uf(i,zz) = u(i,k) - vf(i,zz) = v(i,k) - enddo - pp = pp + 1 - enddo - - if(itimestep == 1) then - do k = kts,kte - do i = its,ite - qvftenz(i,k) = 0. - thftenz(i,k) = 0. - enddo - enddo - else - pp = 0 - do k = kts,kte - zz = kte-pp - do i = its,ite - qvftenz(i,zz) = qvften(i,k) - thftenz(i,zz) = thften(i,k) - enddo - pp = pp + 1 - enddo - endif - - errmsg = 'cu_ntiedtke_timestep_init OK' - errflg = 0 - - end subroutine cu_ntiedtke_timestep_init - -!================================================================================================================= - subroutine cu_ntiedtke_timestep_final(its,ite,kts,kte,stepcu,dt,exner,qv,qc,qi,t,u,v,qvf,qcf,qif,tf,uf,vf,rn, & - raincv,pratec,rthcuten,rqvcuten,rqccuten,rqicuten,rucuten,rvcuten,errmsg,errflg) -!================================================================================================================= - -!--- input arguments: - integer,intent(in):: its,ite,kts,kte - integer,intent(in):: stepcu - - real(kind=kind_phys),intent(in):: dt - real(kind=kind_phys),intent(in),dimension(its:ite):: rn - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: exner,qv,qc,qi,t,u,v,qvf,qcf,qif,tf,uf,vf - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(its:ite):: raincv,pratec - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: rqvcuten,rqccuten,rqicuten - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: rthcuten,rucuten,rvcuten - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!--- local variables and arrays: - integer:: i,k,pp,zz - - real(kind=kind_phys):: delt,rdelt - -!----------------------------------------------------------------------------------------------------------------- - - delt = dt*stepcu - rdelt = 1./delt - - do i = its,ite - raincv(i) = rn(i)/stepcu - pratec(i) = rn(i)/(stepcu*dt) - enddo - - pp = 0 - do k = kts,kte - zz = kte - pp - do i = its,ite - rthcuten(i,k) = (tf(i,zz)-t(i,k))/exner(i,k)*rdelt - rqvcuten(i,k) = (qvf(i,zz)-qv(i,k))*rdelt - rqccuten(i,k) = (qcf(i,zz)-qc(i,k))*rdelt - rqicuten(i,k) = (qif(i,zz)-qi(i,k))*rdelt - rucuten(i,k) = (uf(i,zz)-u(i,k))*rdelt - rvcuten(i,k) = (vf(i,zz)-v(i,k))*rdelt - enddo - pp = pp + 1 - enddo - - errmsg = 'cu_ntiedtke_timestep_final OK' - errflg = 0 - - end subroutine cu_ntiedtke_timestep_final - -!================================================================================================================= -! level 1 subroutine 'cu_ntiedkte_run' - subroutine cu_ntiedtke_run(pu,pv,pt,pqv,pqc,pqi,pqvf,ptf,poz,pzz,pomg, & - & pap,paph,evap,hfx,zprecc,lndj,lq,km,km1,dt,dx,errmsg,errflg) -!================================================================================================================= -! this is the interface between the model and the mass flux convection module -! m.tiedtke e.c.m.w.f. 1989 -! j.morcrette 1992 -!-------------------------------------------- -! modifications -! C. zhang & Yuqing Wang 2011-2017 -! -! modified from IPRC IRAM - yuqing wang, university of hawaii (ICTP REGCM4.4). -! -! The current version is stable. There are many updates to the old Tiedtke scheme (cu_physics=6) -! update notes: -! the new Tiedtke scheme is similar to the Tiedtke scheme used in REGCM4 and ECMWF cy40r1. -! the major differences to the old Tiedtke (cu_physics=6) scheme are, -! (a) New trigger functions for deep and shallow convections (Jakob and Siebesma 2003; -! Bechtold et al. 2004, 2008, 2014). -! (b) Non-equilibrium situations are considered in the closure for deep convection -! (Bechtold et al. 2014). -! (c) New convection time scale for the deep convection closure (Bechtold et al. 2008). -! (d) New entrainment and detrainment rates for all convection types (Bechtold et al. 2008). -! (e) New formula for the conversion from cloud water/ice to rain/snow (Sundqvist 1978). -! (f) Different way to include cloud scale pressure gradients (Gregory et al. 1997; -! Wu and Yanai 1994) -! -! other reference: tiedtke (1989, mwr, 117, 1779-1800) -! IFS documentation - cy33r1, cy37r2, cy38r1, cy40r1 -! -! Note for climate simulation of Tropical Cyclones -! This version of Tiedtke scheme was tested with YSU PBL scheme, RRTMG radation -! schemes, and WSM6 microphysics schemes, at horizontal resolution around 20 km -! Set: momtrans = 2. -! pgcoef = 0.7 to 1.0 is good depends on the basin -! nonequil = .false. - -! Note for the diurnal simulation of precipitaton -! When nonequil = .true., the CAPE is relaxed toward to a value from PBL -! It can improve the diurnal precipitation over land. - -!--- input arguments: - integer,intent(in):: lq,km,km1 - integer,intent(in),dimension(lq):: lndj - - real(kind=kind_phys),intent(in):: dt - real(kind=kind_phys),intent(in),dimension(lq):: dx - real(kind=kind_phys),intent(in),dimension(lq):: evap,hfx - real(kind=kind_phys),intent(in),dimension(lq,km):: pqvf,ptf - real(kind=kind_phys),intent(in),dimension(lq,km):: poz,pomg,pap - real(kind=kind_phys),intent(in),dimension(lq,km1):: pzz,paph - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(lq):: zprecc - real(kind=kind_phys),intent(inout),dimension(lq,km):: pu,pv,pt,pqv,pqc,pqi - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!--- local variables and arrays: - logical,dimension(lq):: locum - integer:: i,j,k - integer,dimension(lq):: icbot,ictop,ktype - - real(kind=kind_phys):: ztmst,fliq,fice,ztc,zalf,tt - real(kind=kind_phys):: ztpp1,zew,zqs,zcor - real(kind=kind_phys):: dxref - - real(kind=kind_phys),dimension(lq):: pqhfl,prsfc,pssfc,phhfl,zrain - real(kind=kind_phys),dimension(lq):: scale_fac,scale_fac2 - - real(kind=kind_phys),dimension(lq,km):: pum1,pvm1,ztt,ptte,pqte,pvom,pvol,pverv,pgeo - real(kind=kind_phys),dimension(lq,km):: zqq,pcte - real(kind=kind_phys),dimension(lq,km):: ztp1,zqp1,ztu,zqu,zlu,zlude,zmfu,zmfd,zqsat - real(kind=kind_phys),dimension(lq,km1):: pgeoh - -!----------------------------------------------------------------------------------------------------------------- -! - ztmst=dt -! -! set scale-dependency factor when dx is < 15 km -! - dxref = 15000. - do j=1,lq - if (dx(j).lt.dxref) then - scale_fac(j) = (1.06133+log(dxref/dx(j)))**3 - scale_fac2(j) = scale_fac(j)**0.5 - else - scale_fac(j) = 1.+1.33e-5*dx(j) - scale_fac2(j) = 1. - end if - end do -! -! masv flux diagnostics. -! - do j=1,lq - zrain(j)=0.0 - locum(j)=.false. - prsfc(j)=0.0 - pssfc(j)=0.0 - pqhfl(j)=evap(j) - phhfl(j)=hfx(j) - pgeoh(j,km1)=g*pzz(j,km1) - end do -! -! convert model variables for mflux scheme -! - do k=1,km - do j=1,lq - pcte(j,k)=0.0 - pvom(j,k)=0.0 - pvol(j,k)=0.0 - ztp1(j,k)=pt(j,k) - zqp1(j,k)=pqv(j,k)/(1.0+pqv(j,k)) - pum1(j,k)=pu(j,k) - pvm1(j,k)=pv(j,k) - pverv(j,k)=pomg(j,k) - pgeo(j,k)=g*poz(j,k) - pgeoh(j,k)=g*pzz(j,k) - tt=ztp1(j,k) - zew = foeewm(tt) - zqs = zew/pap(j,k) - zqs = min(0.5,zqs) - zcor = 1./(1.-vtmpc1*zqs) - zqsat(j,k)=zqs*zcor - pqte(j,k)=pqvf(j,k) - zqq(j,k) =pqte(j,k) - ptte(j,k)=ptf(j,k) - ztt(j,k) =ptte(j,k) - end do - end do -! -!----------------------------------------------------------------------- -!* 2. call 'cumastrn'(master-routine for cumulus parameterization) -! - call cumastrn & - & (lq, km, km1, km-1, ztp1, & - & zqp1, pum1, pvm1, pverv, zqsat, & - & pqhfl, ztmst, pap, paph, pgeo, & - & ptte, pqte, pvom, pvol, prsfc, & - & pssfc, locum, & - & ktype, icbot, ictop, ztu, zqu, & - & zlu, zlude, zmfu, zmfd, zrain, & - & pcte, phhfl, lndj, pgeoh, dx, & - & scale_fac, scale_fac2) -! -! to include the cloud water and cloud ice detrained from convection -! - do k=1,km - do j=1,lq - if(pcte(j,k).gt.0.) then - fliq=foealfa(ztp1(j,k)) - fice=1.0-fliq - pqc(j,k)=pqc(j,k)+fliq*pcte(j,k)*ztmst - pqi(j,k)=pqi(j,k)+fice*pcte(j,k)*ztmst - endif - end do - end do -! - do k=1,km - do j=1,lq - pt(j,k)= ztp1(j,k)+(ptte(j,k)-ztt(j,k))*ztmst - zqp1(j,k)=zqp1(j,k)+(pqte(j,k)-zqq(j,k))*ztmst - pqv(j,k)=zqp1(j,k)/(1.0-zqp1(j,k)) - end do - end do - - do j=1,lq - zprecc(j)=amax1(0.0,(prsfc(j)+pssfc(j))*ztmst) - end do - - if (lmfdudv) then - do k=1,km - do j=1,lq - pu(j,k)=pu(j,k)+pvom(j,k)*ztmst - pv(j,k)=pv(j,k)+pvol(j,k)*ztmst - end do - end do - endif -! - errmsg = 'cu_ntiedtke_run OK' - errflg = 0 -! - return - end subroutine cu_ntiedtke_run - -!############################################################# -! -! level 2 subroutines -! -!############################################################# -!*********************************************************** -! subroutine cumastrn -!*********************************************************** - subroutine cumastrn & - & (klon, klev, klevp1, klevm1, pten, & - & pqen, puen, pven, pverv, pqsen, & - & pqhfl, ztmst, pap, paph, pgeo, & - & ptte, pqte, pvom, pvol, prsfc, & - & pssfc, ldcum, & - & ktype, kcbot, kctop, ptu, pqu, & - & plu, plude, pmfu, pmfd, prain, & - & pcte, phhfl, lndj, zgeoh, dx, & - & scale_fac, scale_fac2) - implicit none -! -!***cumastrn* master routine for cumulus massflux-scheme -! m.tiedtke e.c.m.w.f. 1986/1987/1989 -! modifications -! y.wang i.p.r.c 2001 -! c.zhang 2012 -!***purpose -! ------- -! this routine computes the physical tendencies of the -! prognostic variables t,q,u and v due to convective processes. -! processes considered are: convective fluxes, formation of -! precipitation, evaporation of falling rain below cloud base, -! saturated cumulus downdrafts. -!***method -! ------ -! parameterization is done using a massflux-scheme. -! (1) define constants and parameters -! (2) specify values (t,q,qs...) at half levels and -! initialize updraft- and downdraft-values in 'cuinin' -! (3) calculate cloud base in 'cutypen', calculate cloud types in cutypen, -! and specify cloud base massflux -! (4) do cloud ascent in 'cuascn' in absence of downdrafts -! (5) do downdraft calculations: -! (a) determine values at lfs in 'cudlfsn' -! (b) determine moist descent in 'cuddrafn' -! (c) recalculate cloud base massflux considering the -! effect of cu-downdrafts -! (6) do final adjusments to convective fluxes in 'cuflxn', -! do evaporation in subcloud layer -! (7) calculate increments of t and q in 'cudtdqn' -! (8) calculate increments of u and v in 'cududvn' -!***externals. -! ---------- -! cuinin: initializes values at vertical grid used in cu-parametr. -! cutypen: cloud bypes, 1: deep cumulus 2: shallow cumulus -! cuascn: cloud ascent for entraining plume -! cudlfsn: determines values at lfs for downdrafts -! cuddrafn:does moist descent for cumulus downdrafts -! cuflxn: final adjustments to convective fluxes (also in pbl) -! cudqdtn: updates tendencies for t and q -! cududvn: updates tendencies for u and v -!***switches. -! -------- -! lmfmid=.t. midlevel convection is switched on -! lmfdd=.t. cumulus downdrafts switched on -! lmfdudv=.t. cumulus friction switched on -!*** -! model parameters (defined in subroutine cuparam) -! ------------------------------------------------ -! entrdd entrainment rate for cumulus downdrafts -! cmfcmax maximum massflux value allowed for -! cmfcmin minimum massflux value (for safety) -! cmfdeps fractional massflux for downdrafts at lfs -! cprcon coefficient for conversion from cloud water to rain -!***reference. -! ---------- -! paper on massflux scheme (tiedtke,1989) -!----------------------------------------------------------------- - -!--- input arguments: - integer,intent(in):: klev,klon,klevp1,klevm1 - integer,intent(in),dimension(klon):: lndj - - real(kind=kind_phys),intent(in):: ztmst - real(kind=kind_phys),intent(in),dimension(klon):: dx - real(kind=kind_phys),intent(in),dimension(klon):: pqhfl,phhfl - real(kind=kind_phys),intent(in),dimension(klon):: scale_fac,scale_fac2 - real(kind=kind_phys),intent(in),dimension(klon,klev):: pten,pqen,puen,pven,pverv - real(kind=kind_phys),intent(in),dimension(klon,klev):: pap,pgeo - real(kind=kind_phys),intent(in),dimension(klon,klevp1):: paph,zgeoh - -!--- inout arguments: - integer,intent(inout),dimension(klon):: ktype,kcbot,kctop - logical,intent(inout),dimension(klon):: ldcum - - real(kind=kind_phys),intent(inout),dimension(klon):: pqsen - real(kind=kind_phys),intent(inout),dimension(klon):: prsfc,pssfc,prain - real(kind=kind_phys),intent(inout),dimension(klon,klev):: pcte,ptte,pqte,pvom,pvol - real(kind=kind_phys),intent(inout),dimension(klon,klev):: ptu,pqu,plu,plude,pmfu,pmfd - -!--- local variables and arrays: - logical:: llo1 - logical,dimension(klon):: loddraf,llo2 - - integer:: jl,jk,ik - integer:: ikb,ikt,icum,itopm2 - integer,dimension(klon):: kdpl,idtop,ictop0,ilwmin - integer,dimension(klon,klev):: ilab - - real(kind=kind_phys):: zcons,zcons2,zqumqe,zdqmin,zdh,zmfmax - real(kind=kind_phys):: zalfaw,zalv,zqalv,zc5ldcp,zc4les,zhsat,zgam,zzz,zhhat - real(kind=kind_phys):: zpbmpt,zro,zdz,zdp,zeps,zfac,wspeed - real(kind=kind_phys):: zduten,zdvten,ztdis,pgf_u,pgf_v - real(kind=kind_phys):: zlon - real(kind=kind_phys):: ztau,zerate,zderate,zmfa - real(kind=kind_phys),dimension(klon):: zmfs - real(kind=kind_phys),dimension(klon):: zsfl,zcape,zcape1,zcape2,ztauc,ztaubl,zheat - real(kind=kind_phys),dimension(klon):: wup,zdqcv - real(kind=kind_phys),dimension(klon):: wbase,zmfuub - real(kind=kind_phys),dimension(klon):: upbl - real(kind=kind_phys),dimension(klon):: zhcbase,zmfub,zmfub1,zdhpbl - real(kind=kind_phys),dimension(klon):: zmfuvb,zsum12,zsum22 - real(kind=kind_phys),dimension(klon):: zrfl - real(kind=kind_phys),dimension(klev):: pmean - real(kind=kind_phys),dimension(klon,klev):: pmfude_rate,pmfdde_rate - real(kind=kind_phys),dimension(klon,klev):: zdpmel - real(kind=kind_phys),dimension(klon,klev):: zmfuus,zmfdus,zuv2,ztenu,ztenv - real(kind=kind_phys),dimension(klon,klev):: ztenh,zqenh,zqsenh,ztd,zqd - real(kind=kind_phys),dimension(klon,klev):: zmfus,zmfds,zmfuq,zmfdq,zdmfup,zdmfdp,zmful - real(kind=kind_phys),dimension(klon,klev):: zuu,zvu,zud,zvd,zlglac - real(kind=kind_phys),dimension(klon,klevp1):: pmflxr,pmflxs - -!------------------------------------------- -! 1. specify constants and parameters -!------------------------------------------- - zcons=1./(g*ztmst) - zcons2=3./(g*ztmst) - -!-------------------------------------------------------------- -!* 2. initialize values at vertical grid points in 'cuini' -!-------------------------------------------------------------- - call cuinin & - & (klon, klev, klevp1, klevm1, pten, & - & pqen, pqsen, puen, pven, pverv, & - & pgeo, paph, zgeoh, ztenh, zqenh, & - & zqsenh, ilwmin, ptu, pqu, ztd, & - & zqd, zuu, zvu, zud, zvd, & - & pmfu, pmfd, zmfus, zmfds, zmfuq, & - & zmfdq, zdmfup, zdmfdp, zdpmel, plu, & - & plude, ilab) - -!---------------------------------- -!* 3.0 cloud base calculations -!---------------------------------- -!* (a) determine cloud base values in 'cutypen', -! and the cumulus type 1 or 2 -! ------------------------------------------- - call cutypen & - & ( klon, klev, klevp1, klevm1, pqen, & - & ztenh, zqenh, zqsenh, zgeoh, paph, & - & phhfl, pqhfl, pgeo, pqsen, pap, & - & pten, lndj, ptu, pqu, ilab, & - & ldcum, kcbot, ictop0, ktype, wbase, & - & plu, kdpl) - -!* (b) assign the first guess mass flux at cloud base -! ------------------------------------------ - do jl=1,klon - zdhpbl(jl)=0.0 - upbl(jl) = 0.0 - idtop(jl)=0 - end do - - do jk=2,klev - do jl=1,klon - if(jk.ge.kcbot(jl) .and. ldcum(jl)) then - zdhpbl(jl)=zdhpbl(jl)+(alv*pqte(jl,jk)+cpd*ptte(jl,jk))& - & *(paph(jl,jk+1)-paph(jl,jk)) - if(lndj(jl) .eq. 0) then - wspeed = sqrt(puen(jl,jk)**2 + pven(jl,jk)**2) - upbl(jl) = upbl(jl) + wspeed*(paph(jl,jk+1)-paph(jl,jk)) - end if - end if - end do - end do - - do jl=1,klon - if(ldcum(jl)) then - ikb=kcbot(jl) - zmfmax = (paph(jl,ikb)-paph(jl,ikb-1))*zcons2 - if(ktype(jl) == 1) then - zmfub(jl)= 0.1*zmfmax - else if ( ktype(jl) == 2 ) then - zqumqe = pqu(jl,ikb) + plu(jl,ikb) - zqenh(jl,ikb) - zdqmin = max(0.01*zqenh(jl,ikb),1.e-10) - zdh = cpd*(ptu(jl,ikb)-ztenh(jl,ikb)) + alv*zqumqe - zdh = g*max(zdh,1.e5*zdqmin) - if ( zdhpbl(jl) > 0. ) then - zmfub(jl) = zdhpbl(jl)/zdh - zmfub(jl) = min(zmfub(jl),zmfmax) - else - zmfub(jl) = 0.1*zmfmax - ldcum(jl) = .false. - end if - end if - else - zmfub(jl) = 0. - end if - end do -!------------------------------------------------------ -!* 4.0 determine cloud ascent for entraining plume -!------------------------------------------------------ -!* (a) do ascent in 'cuasc'in absence of downdrafts -!---------------------------------------------------------- - call cuascn & - & (klon, klev, klevp1, klevm1, ztenh, & - & zqenh, puen, pven, pten, pqen, & - & pqsen, pgeo, zgeoh, pap, paph, & - & pqte, pverv, ilwmin, ldcum, zhcbase, & - & ktype, ilab, ptu, pqu, plu, & - & zuu, zvu, pmfu, zmfub, & - & zmfus, zmfuq, zmful, plude, zdmfup, & - & kcbot, kctop, ictop0, icum, ztmst, & - & zqsenh, zlglac, lndj, wup, wbase, & - & kdpl, pmfude_rate) - -!* (b) check cloud depth and change entrainment rate accordingly -! calculate precipitation rate (for downdraft calculation) -!------------------------------------------------------------------ - do jl=1,klon - if ( ldcum(jl) ) then - ikb = kcbot(jl) - itopm2 = kctop(jl) - zpbmpt = paph(jl,ikb) - paph(jl,itopm2) - if ( ktype(jl) == 1 .and. zpbmpt < zdnoprc ) ktype(jl) = 2 - if ( ktype(jl) == 2 .and. zpbmpt >= zdnoprc ) ktype(jl) = 1 - ictop0(jl) = kctop(jl) - end if - zrfl(jl)=zdmfup(jl,1) - end do - - do jk=2,klev - do jl=1,klon - zrfl(jl)=zrfl(jl)+zdmfup(jl,jk) - end do - end do - - do jk = 1,klev - do jl = 1,klon - pmfd(jl,jk) = 0. - zmfds(jl,jk) = 0. - zmfdq(jl,jk) = 0. - zdmfdp(jl,jk) = 0. - zdpmel(jl,jk) = 0. - end do - end do - -!----------------------------------------- -!* 6.0 cumulus downdraft calculations -!----------------------------------------- - if(lmfdd) then -!* (a) determine lfs in 'cudlfsn' -!-------------------------------------- - call cudlfsn & - & (klon, klev,& - & kcbot, kctop, lndj, ldcum, & - & ztenh, zqenh, puen, pven, & - & pten, pqsen, pgeo, & - & zgeoh, paph, ptu, pqu, plu, & - & zuu, zvu, zmfub, zrfl, & - & ztd, zqd, zud, zvd, & - & pmfd, zmfds, zmfdq, zdmfdp, & - & idtop, loddraf) -!* (b) determine downdraft t,q and fluxes in 'cuddrafn' -!------------------------------------------------------------ - call cuddrafn & - & (klon, klev, loddraf, & - & ztenh, zqenh, puen, pven, & - & pgeo, zgeoh, paph, zrfl, & - & ztd, zqd, zud, zvd, pmfu, & - & pmfd, zmfds, zmfdq, zdmfdp, pmfdde_rate) -!----------------------------------------------------------- - end if -! -!----------------------------------------------------------------------- -!* 6.0 closure and clean work -! ------ -!-- 6.1 recalculate cloud base massflux from a cape closure -! for deep convection (ktype=1) -! - do jl=1,klon - if(ldcum(jl) .and. ktype(jl) .eq. 1) then - ikb = kcbot(jl) - ikt = kctop(jl) - zheat(jl)=0.0 - zcape(jl)=0.0 - zcape1(jl)=0.0 - zcape2(jl)=0.0 - zmfub1(jl)=zmfub(jl) - - ztauc(jl) = (zgeoh(jl,ikt)-zgeoh(jl,ikb)) / & - ((2.+ min(15.0,wup(jl)))*g) - if(lndj(jl) .eq. 0) then - upbl(jl) = 2.+ upbl(jl)/(paph(jl,klev+1)-paph(jl,ikb)) - ztaubl(jl) = (zgeoh(jl,ikb)-zgeoh(jl,klev+1))/(g*upbl(jl)) - ztaubl(jl) = min(300., ztaubl(jl)) - else - ztaubl(jl) = ztauc(jl) - end if - end if - end do -! - do jk = 1 , klev - do jl = 1 , klon - llo1 = ldcum(jl) .and. ktype(jl) .eq. 1 - if ( llo1 .and. jk <= kcbot(jl) .and. jk > kctop(jl) ) then - ikb = kcbot(jl) - zdz = pgeo(jl,jk-1)-pgeo(jl,jk) - zdp = pap(jl,jk)-pap(jl,jk-1) - zheat(jl) = zheat(jl) + ((pten(jl,jk-1)-pten(jl,jk)+zdz*rcpd) / & - ztenh(jl,jk)+vtmpc1*(pqen(jl,jk-1)-pqen(jl,jk))) * & - (g*(pmfu(jl,jk)+pmfd(jl,jk))) - zcape1(jl) = zcape1(jl) + ((ptu(jl,jk)-ztenh(jl,jk))/ztenh(jl,jk) + & - vtmpc1*(pqu(jl,jk)-zqenh(jl,jk))-plu(jl,jk))*zdp - end if - - if ( llo1 .and. jk >= kcbot(jl) ) then - if((paph(jl,klev+1)-paph(jl,kdpl(jl)))<50.e2) then - zdp = paph(jl,jk+1)-paph(jl,jk) - zcape2(jl) = zcape2(jl) + ztaubl(jl)* & - ((1.+vtmpc1*pqen(jl,jk))*ptte(jl,jk)+vtmpc1*pten(jl,jk)*pqte(jl,jk))*zdp - end if - end if - end do - end do - - do jl=1,klon - if(ldcum(jl).and.ktype(jl).eq.1) then - ikb = kcbot(jl) - ikt = kctop(jl) - ztauc(jl) = max(ztmst,ztauc(jl)) - ztauc(jl) = max(360.,ztauc(jl)) - ztauc(jl) = min(10800.,ztauc(jl)) - ztau = ztauc(jl) * scale_fac(jl) - if(nonequil) then - zcape2(jl)= max(0.,zcape2(jl)) - zcape(jl) = max(0.,min(zcape1(jl)-zcape2(jl),5000.)) - else - zcape(jl) = max(0.,min(zcape1(jl),5000.)) - end if - zheat(jl) = max(1.e-4,zheat(jl)) - zmfub1(jl) = (zcape(jl)*zmfub(jl))/(zheat(jl)*ztau) - zmfub1(jl) = max(zmfub1(jl),0.001) - zmfmax=(paph(jl,ikb)-paph(jl,ikb-1))*zcons2 - zmfub1(jl)=min(zmfub1(jl),zmfmax) - end if - end do -! -!* 6.2 recalculate convective fluxes due to effect of -! downdrafts on boundary layer moist static energy budget (ktype=2) -!-------------------------------------------------------- - do jl=1,klon - if(ldcum(jl) .and. ktype(jl) .eq. 2) then - ikb=kcbot(jl) - if(pmfd(jl,ikb).lt.0.0 .and. loddraf(jl)) then - zeps=-pmfd(jl,ikb)/max(zmfub(jl),cmfcmin) - else - zeps=0. - endif - zqumqe=pqu(jl,ikb)+plu(jl,ikb)- & - & zeps*zqd(jl,ikb)-(1.-zeps)*zqenh(jl,ikb) - zdqmin=max(0.01*zqenh(jl,ikb),cmfcmin) - zmfmax=(paph(jl,ikb)-paph(jl,ikb-1))*zcons2 -! using moist static engergy closure instead of moisture closure - zdh=cpd*(ptu(jl,ikb)-zeps*ztd(jl,ikb)- & - & (1.-zeps)*ztenh(jl,ikb))+alv*zqumqe - zdh=g*max(zdh,1.e5*zdqmin) - if(zdhpbl(jl).gt.0.)then - zmfub1(jl)=zdhpbl(jl)/zdh - else - zmfub1(jl) = zmfub(jl) - end if - zmfub1(jl) = zmfub1(jl)/scale_fac2(jl) - zmfub1(jl) = min(zmfub1(jl),zmfmax) - end if - -!* 6.3 mid-level convection - nothing special -!--------------------------------------------------------- - if(ldcum(jl) .and. ktype(jl) .eq. 3 ) then - zmfub1(jl) = zmfub(jl) - end if - - end do - -!* 6.4 scaling the downdraft mass flux -!--------------------------------------------------------- - do jk=1,klev - do jl=1,klon - if( ldcum(jl) ) then - zfac=zmfub1(jl)/max(zmfub(jl),cmfcmin) - pmfd(jl,jk)=pmfd(jl,jk)*zfac - zmfds(jl,jk)=zmfds(jl,jk)*zfac - zmfdq(jl,jk)=zmfdq(jl,jk)*zfac - zdmfdp(jl,jk)=zdmfdp(jl,jk)*zfac - pmfdde_rate(jl,jk) = pmfdde_rate(jl,jk)*zfac - end if - end do - end do - -!* 6.5 scaling the updraft mass flux -! -------------------------------------------------------- - do jl = 1,klon - if ( ldcum(jl) ) zmfs(jl) = zmfub1(jl)/max(cmfcmin,zmfub(jl)) - end do - do jk = 2 , klev - do jl = 1,klon - if ( ldcum(jl) .and. jk >= kctop(jl)-1 ) then - ikb = kcbot(jl) - if ( jk>ikb ) then - zdz = ((paph(jl,klev+1)-paph(jl,jk))/(paph(jl,klev+1)-paph(jl,ikb))) - pmfu(jl,jk) = pmfu(jl,ikb)*zdz - end if - zmfmax = (paph(jl,jk)-paph(jl,jk-1))*zcons2 - if ( pmfu(jl,jk)*zmfs(jl) > zmfmax ) then - zmfs(jl) = min(zmfs(jl),zmfmax/pmfu(jl,jk)) - end if - end if - end do - end do - do jk = 2 , klev - do jl = 1,klon - if ( ldcum(jl) .and. jk <= kcbot(jl) .and. jk >= kctop(jl)-1 ) then - pmfu(jl,jk) = pmfu(jl,jk)*zmfs(jl) - zmfus(jl,jk) = zmfus(jl,jk)*zmfs(jl) - zmfuq(jl,jk) = zmfuq(jl,jk)*zmfs(jl) - zmful(jl,jk) = zmful(jl,jk)*zmfs(jl) - zdmfup(jl,jk) = zdmfup(jl,jk)*zmfs(jl) - plude(jl,jk) = plude(jl,jk)*zmfs(jl) - pmfude_rate(jl,jk) = pmfude_rate(jl,jk)*zmfs(jl) - end if - end do - end do - -!* 6.6 if ktype = 2, kcbot=kctop is not allowed -! --------------------------------------------------- - do jl = 1,klon - if ( ktype(jl) == 2 .and. & - kcbot(jl) == kctop(jl) .and. kcbot(jl) >= klev-1 ) then - ldcum(jl) = .false. - ktype(jl) = 0 - end if - end do - - if ( .not. lmfscv .or. .not. lmfpen ) then - do jl = 1,klon - llo2(jl) = .false. - if ( (.not. lmfscv .and. ktype(jl) == 2) .or. & - (.not. lmfpen .and. ktype(jl) == 1) ) then - llo2(jl) = .true. - ldcum(jl) = .false. - end if - end do - end if - -!* 6.7 set downdraft mass fluxes to zero above cloud top -!---------------------------------------------------- - do jl = 1,klon - if ( loddraf(jl) .and. idtop(jl) <= kctop(jl) ) then - idtop(jl) = kctop(jl) + 1 - end if - end do - do jk = 2 , klev - do jl = 1,klon - if ( loddraf(jl) ) then - if ( jk < idtop(jl) ) then - pmfd(jl,jk) = 0. - zmfds(jl,jk) = 0. - zmfdq(jl,jk) = 0. - pmfdde_rate(jl,jk) = 0. - zdmfdp(jl,jk) = 0. - else if ( jk == idtop(jl) ) then - pmfdde_rate(jl,jk) = 0. - end if - end if - end do - end do -!---------------------------------------------------------- -!* 7.0 determine final convective fluxes in 'cuflx' -!---------------------------------------------------------- - call cuflxn & - & ( klon, klev, ztmst & - & , pten, pqen, pqsen, ztenh, zqenh & - & , paph, pap, zgeoh, lndj, ldcum & - & , kcbot, kctop, idtop, itopm2 & - & , ktype, loddraf & - & , pmfu, pmfd, zmfus, zmfds & - & , zmfuq, zmfdq, zmful, plude & - & , zdmfup, zdmfdp, zdpmel, zlglac & - & , prain, pmfdde_rate, pmflxr, pmflxs ) - -! some adjustments needed - do jl=1,klon - zmfs(jl) = 1. - zmfuub(jl)=0. - end do - do jk = 2 , klev - do jl = 1,klon - if ( loddraf(jl) .and. jk >= idtop(jl)-1 ) then - zmfmax = pmfu(jl,jk)*0.98 - if ( pmfd(jl,jk)+zmfmax+1.e-15 < 0. ) then - zmfs(jl) = min(zmfs(jl),-zmfmax/pmfd(jl,jk)) - end if - end if - end do - end do - - do jk = 2 , klev - do jl = 1 , klon - if ( zmfs(jl) < 1. .and. jk >= idtop(jl)-1 ) then - pmfd(jl,jk) = pmfd(jl,jk)*zmfs(jl) - zmfds(jl,jk) = zmfds(jl,jk)*zmfs(jl) - zmfdq(jl,jk) = zmfdq(jl,jk)*zmfs(jl) - pmfdde_rate(jl,jk) = pmfdde_rate(jl,jk)*zmfs(jl) - zmfuub(jl) = zmfuub(jl) - (1.-zmfs(jl))*zdmfdp(jl,jk) - pmflxr(jl,jk+1) = pmflxr(jl,jk+1) + zmfuub(jl) - zdmfdp(jl,jk) = zdmfdp(jl,jk)*zmfs(jl) - end if - end do - end do - - do jk = 2 , klev - 1 - do jl = 1, klon - if ( loddraf(jl) .and. jk >= idtop(jl)-1 ) then - zerate = -pmfd(jl,jk) + pmfd(jl,jk-1) + pmfdde_rate(jl,jk) - if ( zerate < 0. ) then - pmfdde_rate(jl,jk) = pmfdde_rate(jl,jk) - zerate - end if - end if - if ( ldcum(jl) .and. jk >= kctop(jl)-1 ) then - zerate = pmfu(jl,jk) - pmfu(jl,jk+1) + pmfude_rate(jl,jk) - if ( zerate < 0. ) then - pmfude_rate(jl,jk) = pmfude_rate(jl,jk) - zerate - end if - zdmfup(jl,jk) = pmflxr(jl,jk+1) + pmflxs(jl,jk+1) - & - pmflxr(jl,jk) - pmflxs(jl,jk) - zdmfdp(jl,jk) = 0. - end if - end do - end do - -! avoid negative humidities at ddraught top - do jl = 1,klon - if ( loddraf(jl) ) then - jk = idtop(jl) - ik = min(jk+1,klev) - if ( zmfdq(jl,jk) < 0.3*zmfdq(jl,ik) ) then - zmfdq(jl,jk) = 0.3*zmfdq(jl,ik) - end if - end if - end do - -! avoid negative humidities near cloud top because gradient of precip flux -! and detrainment / liquid water flux are too large - do jk = 2 , klev - do jl = 1, klon - if ( ldcum(jl) .and. jk >= kctop(jl)-1 .and. jk < kcbot(jl) ) then - zdz = ztmst*g/(paph(jl,jk+1)-paph(jl,jk)) - zmfa = zmfuq(jl,jk+1) + zmfdq(jl,jk+1) - & - zmfuq(jl,jk) - zmfdq(jl,jk) + & - zmful(jl,jk+1) - zmful(jl,jk) + zdmfup(jl,jk) - zmfa = (zmfa-plude(jl,jk))*zdz - if ( pqen(jl,jk)+zmfa < 0. ) then - plude(jl,jk) = plude(jl,jk) + 2.*(pqen(jl,jk)+zmfa)/zdz - end if - if ( plude(jl,jk) < 0. ) plude(jl,jk) = 0. - end if - if ( .not. ldcum(jl) ) pmfude_rate(jl,jk) = 0. - if ( abs(pmfd(jl,jk-1)) < 1.0e-20 ) pmfdde_rate(jl,jk) = 0. - end do - end do - - do jl=1,klon - prsfc(jl) = pmflxr(jl,klev+1) - pssfc(jl) = pmflxs(jl,klev+1) - end do - -!---------------------------------------------------------------- -!* 8.0 update tendencies for t and q in subroutine cudtdq -!---------------------------------------------------------------- - call cudtdqn(klon,klev,itopm2,kctop,idtop,ldcum,loddraf, & - ztmst,paph,zgeoh,pgeo,pten,ztenh,pqen,zqenh,pqsen, & - zlglac,plude,pmfu,pmfd,zmfus,zmfds,zmfuq,zmfdq,zmful, & - zdmfup,zdmfdp,zdpmel,ptte,pqte,pcte) -!---------------------------------------------------------------- -!* 9.0 update tendencies for u and u in subroutine cududv -!---------------------------------------------------------------- - if(lmfdudv) then - do jk = klev-1 , 2 , -1 - ik = jk + 1 - do jl = 1,klon - if ( ldcum(jl) ) then - if ( jk == kcbot(jl) .and. ktype(jl) < 3 ) then - ikb = kdpl(jl) - zuu(jl,jk) = puen(jl,ikb-1) - zvu(jl,jk) = pven(jl,ikb-1) - else if ( jk == kcbot(jl) .and. ktype(jl) == 3 ) then - zuu(jl,jk) = puen(jl,jk-1) - zvu(jl,jk) = pven(jl,jk-1) - end if - if ( jk < kcbot(jl) .and. jk >= kctop(jl) ) then - if(momtrans .eq. 1)then - zfac = 0. - if ( ktype(jl) == 1 .or. ktype(jl) == 3 ) zfac = 2. - if ( ktype(jl) == 1 .and. jk <= kctop(jl)+2 ) zfac = 3. - zerate = pmfu(jl,jk) - pmfu(jl,ik) + & - (1.+zfac)*pmfude_rate(jl,jk) - zderate = (1.+zfac)*pmfude_rate(jl,jk) - zmfa = 1./max(cmfcmin,pmfu(jl,jk)) - zuu(jl,jk) = (zuu(jl,ik)*pmfu(jl,ik) + & - zerate*puen(jl,jk)-zderate*zuu(jl,ik))*zmfa - zvu(jl,jk) = (zvu(jl,ik)*pmfu(jl,ik) + & - zerate*pven(jl,jk)-zderate*zvu(jl,ik))*zmfa - else - pgf_u = -pgcoef*0.5*(pmfu(jl,ik)*(puen(jl,ik)-puen(jl,jk))+& - pmfu(jl,jk)*(puen(jl,jk)-puen(jl,jk-1))) - pgf_v = -pgcoef*0.5*(pmfu(jl,ik)*(pven(jl,ik)-pven(jl,jk))+& - pmfu(jl,jk)*(pven(jl,jk)-pven(jl,jk-1))) - zerate = pmfu(jl,jk) - pmfu(jl,ik) + pmfude_rate(jl,jk) - zderate = pmfude_rate(jl,jk) - zmfa = 1./max(cmfcmin,pmfu(jl,jk)) - zuu(jl,jk) = (zuu(jl,ik)*pmfu(jl,ik) + & - zerate*puen(jl,jk)-zderate*zuu(jl,ik)+pgf_u)*zmfa - zvu(jl,jk) = (zvu(jl,ik)*pmfu(jl,ik) + & - zerate*pven(jl,jk)-zderate*zvu(jl,ik)+pgf_v)*zmfa - end if - end if - end if - end do - end do - - if(lmfdd) then - do jk = 3 , klev - ik = jk - 1 - do jl = 1,klon - if ( ldcum(jl) ) then - if ( jk == idtop(jl) ) then - zud(jl,jk) = 0.5*(zuu(jl,jk)+puen(jl,ik)) - zvd(jl,jk) = 0.5*(zvu(jl,jk)+pven(jl,ik)) - else if ( jk > idtop(jl) ) then - zerate = -pmfd(jl,jk) + pmfd(jl,ik) + pmfdde_rate(jl,jk) - zmfa = 1./min(-cmfcmin,pmfd(jl,jk)) - zud(jl,jk) = (zud(jl,ik)*pmfd(jl,ik) - & - zerate*puen(jl,ik)+pmfdde_rate(jl,jk)*zud(jl,ik))*zmfa - zvd(jl,jk) = (zvd(jl,ik)*pmfd(jl,ik) - & - zerate*pven(jl,ik)+pmfdde_rate(jl,jk)*zvd(jl,ik))*zmfa - end if - end if - end do - end do - end if -! -------------------------------------------------- -! rescale massfluxes for stability in Momentum -!------------------------------------------------------------------------ - zmfs(:) = 1. - do jk = 2 , klev - do jl = 1, klon - if ( ldcum(jl) .and. jk >= kctop(jl)-1 ) then - zmfmax = (paph(jl,jk)-paph(jl,jk-1))*zcons - if ( pmfu(jl,jk) > zmfmax .and. jk >= kctop(jl) ) then - zmfs(jl) = min(zmfs(jl),zmfmax/pmfu(jl,jk)) - end if - end if - end do - end do - do jk = 1 , klev - do jl = 1, klon - zmfuus(jl,jk) = pmfu(jl,jk) - zmfdus(jl,jk) = pmfd(jl,jk) - if ( ldcum(jl) .and. jk >= kctop(jl)-1 ) then - zmfuus(jl,jk) = pmfu(jl,jk)*zmfs(jl) - zmfdus(jl,jk) = pmfd(jl,jk)*zmfs(jl) - end if - end do - end do -!* 9.1 update u and v in subroutine cududvn -!------------------------------------------------------------------- - do jk = 1 , klev - do jl = 1, klon - ztenu(jl,jk) = pvom(jl,jk) - ztenv(jl,jk) = pvol(jl,jk) - end do - end do - - call cududvn(klon,klev,itopm2,ktype,kcbot,kctop, & - ldcum,ztmst,paph,puen,pven,zmfuus,zmfdus,zuu, & - zud,zvu,zvd,pvom,pvol) - -! calculate KE dissipation - do jl = 1, klon - zsum12(jl) = 0. - zsum22(jl) = 0. - end do - do jk = 1 , klev - do jl = 1, klon - zuv2(jl,jk) = 0. - if ( ldcum(jl) .and. jk >= kctop(jl)-1 ) then - zdz = (paph(jl,jk+1)-paph(jl,jk)) - zduten = pvom(jl,jk) - ztenu(jl,jk) - zdvten = pvol(jl,jk) - ztenv(jl,jk) - zuv2(jl,jk) = sqrt(zduten**2+zdvten**2) - zsum22(jl) = zsum22(jl) + zuv2(jl,jk)*zdz - zsum12(jl) = zsum12(jl) - & - (puen(jl,jk)*zduten+pven(jl,jk)*zdvten)*zdz - end if - end do - end do - do jk = 1 , klev - do jl = 1, klon - if ( ldcum(jl) .and. jk>=kctop(jl)-1 ) then - ztdis = rcpd*zsum12(jl)*zuv2(jl,jk)/max(1.e-15,zsum22(jl)) - ptte(jl,jk) = ptte(jl,jk) + ztdis - end if - end do - end do - - end if - -!---------------------------------------------------------------------- -!* 10. IN CASE THAT EITHER DEEP OR SHALLOW IS SWITCHED OFF -! NEED TO SET SOME VARIABLES A POSTERIORI TO ZERO -! --------------------------------------------------- - if ( .not. lmfscv .or. .not. lmfpen ) then - do jk = 2 , klev - do jl = 1, klon - if ( llo2(jl) .and. jk >= kctop(jl)-1 ) then - ptu(jl,jk) = pten(jl,jk) - pqu(jl,jk) = pqen(jl,jk) - plu(jl,jk) = 0. - pmfude_rate(jl,jk) = 0. - pmfdde_rate(jl,jk) = 0. - end if - end do - end do - do jl = 1, klon - if ( llo2(jl) ) then - kctop(jl) = klev - 1 - kcbot(jl) = klev - 1 - end if - end do - end if - - return - end subroutine cumastrn - -!********************************************** -! level 3 subroutine cuinin -!********************************************** -! - subroutine cuinin & - & (klon, klev, klevp1, klevm1, pten, & - & pqen, pqsen, puen, pven, pverv, & - & pgeo, paph, pgeoh, ptenh, pqenh, & - & pqsenh, klwmin, ptu, pqu, ptd, & - & pqd, puu, pvu, pud, pvd, & - & pmfu, pmfd, pmfus, pmfds, pmfuq, & - & pmfdq, pdmfup, pdmfdp, pdpmel, plu, & - & plude, klab) - implicit none -! m.tiedtke e.c.m.w.f. 12/89 -!***purpose -! ------- -! this routine interpolates large-scale fields of t,q etc. -! to half levels (i.e. grid for massflux scheme), -! and initializes values for updrafts and downdrafts -!***interface -! --------- -! this routine is called from *cumastr*. -!***method. -! -------- -! for extrapolation to half levels see tiedtke(1989) -!***externals -! --------- -! *cuadjtq* to specify qs at half levels -! ---------------------------------------------------------------- - -!--- input arguments: - integer,intent(in):: klon,klev,klevp1,klevm1 - - real(kind=kind_phys),intent(in),dimension(klon,klev):: pten,pqen,pqsen,puen,pven - real(kind=kind_phys),intent(in),dimension(klon,klev):: pgeo,pverv - real(kind=kind_phys),intent(in),dimension(klon,klev+1):: paph,pgeoh - -!--- output arguments: - integer,intent(out),dimension(klon):: klwmin - integer,intent(out),dimension(klon,klev):: klab - - real(kind=kind_phys),intent(out),dimension(klon,klev):: ptenh,pqenh,pqsenh - real(kind=kind_phys),intent(out),dimension(klon,klev):: ptu,ptd,pqu,pqd,plu - real(kind=kind_phys),intent(out),dimension(klon,klev):: puu,pud,pvu,pvd - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(klon,klev):: pmfu,pmfd,pmfus,pmfds,pmfuq,pmfdq - real(kind=kind_phys),intent(inout),dimension(klon,klev):: pdmfup,pdmfdp,plude,pdpmel - -!--- local variables and arrays: - logical,dimension(klon):: loflag - integer:: jl,jk - integer:: icall,ik - real(kind=kind_phys):: zzs - real(kind=kind_phys),dimension(klon):: zph,zwmax - -!------------------------------------------------------------ -!* 1. specify large scale parameters at half levels -!* adjust temperature fields if staticly unstable -!* find level of maximum vertical velocity -! ----------------------------------------------------------- - do jk=2,klev - do jl=1,klon - ptenh(jl,jk)=(max(cpd*pten(jl,jk-1)+pgeo(jl,jk-1), & - & cpd*pten(jl,jk)+pgeo(jl,jk))-pgeoh(jl,jk))*rcpd - pqenh(jl,jk) = pqen(jl,jk-1) - pqsenh(jl,jk)= pqsen(jl,jk-1) - zph(jl)=paph(jl,jk) - loflag(jl)=.true. - end do - - if ( jk >= klev-1 .or. jk < 2 ) cycle - ik=jk - icall=0 - call cuadjtqn(klon,klev,ik,zph,ptenh,pqsenh,loflag,icall) - do jl=1,klon - pqenh(jl,jk)=min(pqen(jl,jk-1),pqsen(jl,jk-1)) & - & +(pqsenh(jl,jk)-pqsen(jl,jk-1)) - pqenh(jl,jk)=max(pqenh(jl,jk),0.) - end do - end do - - do jl=1,klon - ptenh(jl,klev)=(cpd*pten(jl,klev)+pgeo(jl,klev)- & - & pgeoh(jl,klev))*rcpd - pqenh(jl,klev)=pqen(jl,klev) - ptenh(jl,1)=pten(jl,1) - pqenh(jl,1)=pqen(jl,1) - klwmin(jl)=klev - zwmax(jl)=0. - end do - - do jk=klevm1,2,-1 - do jl=1,klon - zzs=max(cpd*ptenh(jl,jk)+pgeoh(jl,jk), & - & cpd*ptenh(jl,jk+1)+pgeoh(jl,jk+1)) - ptenh(jl,jk)=(zzs-pgeoh(jl,jk))*rcpd - end do - end do - - do jk=klev,3,-1 - do jl=1,klon - if(pverv(jl,jk).lt.zwmax(jl)) then - zwmax(jl)=pverv(jl,jk) - klwmin(jl)=jk - end if - end do - end do -!----------------------------------------------------------- -!* 2.0 initialize values for updrafts and downdrafts -!----------------------------------------------------------- - do jk=1,klev - ik=jk-1 - if(jk.eq.1) ik=1 - do jl=1,klon - ptu(jl,jk)=ptenh(jl,jk) - ptd(jl,jk)=ptenh(jl,jk) - pqu(jl,jk)=pqenh(jl,jk) - pqd(jl,jk)=pqenh(jl,jk) - plu(jl,jk)=0. - puu(jl,jk)=puen(jl,ik) - pud(jl,jk)=puen(jl,ik) - pvu(jl,jk)=pven(jl,ik) - pvd(jl,jk)=pven(jl,ik) - klab(jl,jk)=0 - end do - end do - return - end subroutine cuinin - -!--------------------------------------------------------- -! level 3 subroutines -!-------------------------------------------------------- - subroutine cutypen & - & ( klon, klev, klevp1, klevm1, pqen, & - & ptenh, pqenh, pqsenh, pgeoh, paph, & - & hfx, qfx, pgeo, pqsen, pap, & - & pten, lndj, cutu, cuqu, culab, & - & ldcum, cubot, cutop, ktype, wbase, & - & culu, kdpl) -! zhang & wang iprc 2011-2013 -!***purpose. -! -------- -! to produce first guess updraught for cu-parameterizations -! calculates condensation level, and sets updraught base variables and -! first guess cloud type -!***interface -! --------- -! this routine is called from *cumastr*. -! input are environm. values of t,q,p,phi at half levels. -! it returns cloud types as follows; -! ktype=1 for deep cumulus -! ktype=2 for shallow cumulus -!***method. -! -------- -! based on a simplified updraught equation -! partial(hup)/partial(z)=eta(h - hup) -! eta is the entrainment rate for test parcel -! h stands for dry static energy or the total water specific humidity -! references: christian jakob, 2003: a new subcloud model for -! mass-flux convection schemes -! influence on triggering, updraft properties, and model -! climate, mon.wea.rev. -! 131, 2765-2778 -! and -! ifs documentation - cy36r1,cy38r1 -!***input variables: -! ptenh [ztenh] - environment temperature on half levels. (cuini) -! pqenh [zqenh] - env. specific humidity on half levels. (cuini) -! pgeoh [zgeoh] - geopotential on half levels, (mssflx) -! paph - pressure of half levels. (mssflx) -! rho - density of the lowest model level -! qfx - net upward moisture flux at the surface (kg/m^2/s) -! hfx - net upward heat flux at the surface (w/m^2) -!***variables output by cutype: -! ktype - convection type - 1: penetrative (cumastr) -! 2: stratocumulus (cumastr) -! 3: mid-level (cuasc) -! information for updraft parcel (ptu,pqu,plu,kcbot,klab,kdpl...) -! ---------------------------------------------------------------- -!------------------------------------------------------------------- - implicit none -!------------------------------------------------------------------- - -!--- input arguments: - integer,intent(in):: klon,klev,klevp1,klevm1 - integer,intent(in),dimension(klon):: lndj - - real(kind=kind_phys),intent(in),dimension(klon):: qfx,hfx - real(kind=kind_phys),intent(in),dimension(klon,klev):: pap,pgeo - real(kind=kind_phys),intent(in),dimension(klon,klev):: pten,pqen,pqsen - real(kind=kind_phys),intent(in),dimension(klon,klev):: ptenh,pqenh,pqsenh - real(kind=kind_phys),intent(in),dimension(klon,klevp1):: paph,pgeoh - -!--- output arguments: - logical,intent(out),dimension(klon):: ldcum - - integer,intent(out),dimension(klon):: ktype - integer,intent(out),dimension(klon):: cubot,cutop,kdpl - integer,intent(out),dimension(klon,klev):: culab - - real(kind=kind_phys),intent(out),dimension(klon):: wbase - real(kind=kind_phys),intent(out),dimension(klon,klev):: cutu,cuqu,culu - -!--- local variables and arrays: - logical:: needreset - logical,dimension(klon):: lldcum - logical,dimension(klon):: loflag,deepflag,resetflag - - integer:: jl,jk,ik,icall,levels - integer:: nk,is,ikb,ikt - integer,dimension(klon):: kctop,kcbot - integer,dimension(klon):: zcbase,itoppacel - integer,dimension(klon,klev):: klab - - real(kind=kind_phys):: rho,part1,part2,root,conw,deltt,deltq - real(kind=kind_phys):: zz,zdken,zdq - real(kind=kind_phys):: fscale,crirh1,pp - real(kind=kind_phys):: atop1,atop2,abot - real(kind=kind_phys):: tmix,zmix,qmix,pmix - real(kind=kind_phys):: zlglac,dp - real(kind=kind_phys):: zqsu,zcor,zdp,zesdp,zalfaw,zfacw,zfaci,zfac,zdsdp,zdqsdt,zdtdp - real(kind=kind_phys):: zpdifftop, zpdiffbot - - real(kind=kind_phys),dimension(klon):: eta,dz,coef,zqold,zph - real(kind=kind_phys),dimension(klon,klev):: dh,dhen,kup,vptu,vten - real(kind=kind_phys),dimension(klon,klev):: ptu,pqu,plu - real(kind=kind_phys),dimension(klon,klev):: zbuo,abuoy,plude - -!-------------------------------------------------------------- - do jl=1,klon - kcbot(jl)=klev - kctop(jl)=klev - kdpl(jl) =klev - ktype(jl)=0 - wbase(jl)=0. - ldcum(jl)=.false. - end do - -!----------------------------------------------------------- -! let's do test,and check the shallow convection first -! the first level is klev -! define deltat and deltaq -!----------------------------------------------------------- - do jk=1,klev - do jl=1,klon - plu(jl,jk)=culu(jl,jk) ! parcel liquid water - ptu(jl,jk)=cutu(jl,jk) ! parcel temperature - pqu(jl,jk)=cuqu(jl,jk) ! parcel specific humidity - klab(jl,jk)=culab(jl,jk) - dh(jl,jk)=0.0 ! parcel dry static energy - dhen(jl,jk)=0.0 ! environment dry static energy - kup(jl,jk)=0.0 ! updraught kinetic energy for parcel - vptu(jl,jk)=0.0 ! parcel virtual temperature considering water-loading - vten(jl,jk)=0.0 ! environment virtual temperature - zbuo(jl,jk)=0.0 ! parcel buoyancy - abuoy(jl,jk)=0.0 - end do - end do - - do jl=1,klon - zqold(jl) = 0. - lldcum(jl) = .false. - loflag(jl) = .true. - end do - -! check the levels from lowest level to second top level - do jk=klevm1,2,-1 - -! define the variables at the first level - if(jk .eq. klevm1) then - do jl=1,klon - rho=pap(jl,klev)/ & - & (rd*(pten(jl,klev)*(1.+vtmpc1*pqen(jl,klev)))) - part1 = 1.5*0.4*pgeo(jl,klev)/ & - & (rho*pten(jl,klev)) - part2 = -hfx(jl)*rcpd-vtmpc1*pten(jl,klev)*qfx(jl) - root = 0.001-part1*part2 - if(part2 .lt. 0.) then - conw = 1.2*(root)**t13 - deltt = max(1.5*hfx(jl)/(rho*cpd*conw),0.) - deltq = max(1.5*qfx(jl)/(rho*conw),0.) - kup(jl,klev) = 0.5*(conw**2) - pqu(jl,klev)= pqenh(jl,klev) + deltq - dhen(jl,klev)= pgeoh(jl,klev) + ptenh(jl,klev)*cpd - dh(jl,klev) = dhen(jl,klev) + deltt*cpd - ptu(jl,klev) = (dh(jl,klev)-pgeoh(jl,klev))*rcpd - vptu(jl,klev)=ptu(jl,klev)*(1.+vtmpc1*pqu(jl,klev)) - vten(jl,klev)=ptenh(jl,klev)*(1.+vtmpc1*pqenh(jl,klev)) - zbuo(jl,klev)=(vptu(jl,klev)-vten(jl,klev))/vten(jl,klev) - klab(jl,klev) = 1 - else - loflag(jl) = .false. - end if - end do - end if - - is=0 - do jl=1,klon - if(loflag(jl))then - is=is+1 - endif - enddo - if(is.eq.0) exit - -! the next levels, we use the variables at the first level as initial values - do jl=1,klon - if(loflag(jl)) then - eta(jl) = 0.8/(pgeo(jl,jk)*zrg)+2.e-4 - dz(jl) = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg - coef(jl)= 0.5*eta(jl)*dz(jl) - dhen(jl,jk) = pgeoh(jl,jk) + cpd*ptenh(jl,jk) - dh(jl,jk) = (coef(jl)*(dhen(jl,jk+1)+dhen(jl,jk))& - & +(1.-coef(jl))*dh(jl,jk+1))/(1.+coef(jl)) - pqu(jl,jk) =(coef(jl)*(pqenh(jl,jk+1)+pqenh(jl,jk))& - & +(1.-coef(jl))*pqu(jl,jk+1))/(1.+coef(jl)) - ptu(jl,jk) = (dh(jl,jk)-pgeoh(jl,jk))*rcpd - zqold(jl) = pqu(jl,jk) - zph(jl)=paph(jl,jk) - end if - end do -! check if the parcel is saturated - ik=jk - icall=1 - call cuadjtqn(klon,klev,ik,zph,ptu,pqu,loflag,icall) - do jl=1,klon - if( loflag(jl) ) then - zdq = max((zqold(jl) - pqu(jl,jk)),0.) - plu(jl,jk) = plu(jl,jk+1) + zdq - zlglac=zdq*((1.-foealfa(ptu(jl,jk))) - & - (1.-foealfa(ptu(jl,jk+1)))) - plu(jl,jk) = min(plu(jl,jk),5.e-3) - dh(jl,jk) = pgeoh(jl,jk) + cpd*(ptu(jl,jk)+ralfdcp*zlglac) -! compute the updraft speed - vptu(jl,jk) = ptu(jl,jk)*(1.+vtmpc1*pqu(jl,jk)-plu(jl,jk))+& - ralfdcp*zlglac - vten(jl,jk) = ptenh(jl,jk)*(1.+vtmpc1*pqenh(jl,jk)) - zbuo(jl,jk) = (vptu(jl,jk) - vten(jl,jk))/vten(jl,jk) - abuoy(jl,jk)=(zbuo(jl,jk)+zbuo(jl,jk+1))*0.5*g - atop1 = 1.0 - 2.*coef(jl) - atop2 = 2.0*dz(jl)*abuoy(jl,jk) - abot = 1.0 + 2.*coef(jl) - kup(jl,jk) = (atop1*kup(jl,jk+1) + atop2) / abot - -! let's find the exact cloud base - if ( plu(jl,jk) > 0. .and. klab(jl,jk+1) == 1 ) then - ik = jk + 1 - zqsu = foeewm(ptu(jl,ik))/paph(jl,ik) - zqsu = min(0.5,zqsu) - zcor = 1./(1.-vtmpc1*zqsu) - zqsu = zqsu*zcor - zdq = min(0.,pqu(jl,ik)-zqsu) - zalfaw = foealfa(ptu(jl,ik)) - zfacw = c5les/((ptu(jl,ik)-c4les)**2) - zfaci = c5ies/((ptu(jl,ik)-c4ies)**2) - zfac = zalfaw*zfacw + (1.-zalfaw)*zfaci - zesdp = foeewm(ptu(jl,ik))/paph(jl,ik) - zcor = 1./(1.-vtmpc1*zesdp) - zdqsdt = zfac*zcor*zqsu - zdtdp = rd*ptu(jl,ik)/(cpd*paph(jl,ik)) - zdp = zdq/(zdqsdt*zdtdp) - zcbase(jl) = paph(jl,ik) + zdp -! chose nearest half level as cloud base (jk or jk+1) - zpdifftop = zcbase(jl) - paph(jl,jk) - zpdiffbot = paph(jl,jk+1) - zcbase(jl) - if ( zpdifftop > zpdiffbot .and. kup(jl,jk+1) > 0. ) then - ikb = min(klev-1,jk+1) - klab(jl,ikb) = 2 - klab(jl,jk) = 2 - kcbot(jl) = ikb - plu(jl,jk+1) = 1.0e-8 - else if ( zpdifftop <= zpdiffbot .and.kup(jl,jk) > 0. ) then - klab(jl,jk) = 2 - kcbot(jl) = jk - end if - end if - - if(kup(jl,jk) .lt. 0.)then - loflag(jl) = .false. - if(plu(jl,jk+1) .gt. 0.) then - kctop(jl) = jk - lldcum(jl) = .true. - else - lldcum(jl) = .false. - end if - else - if(plu(jl,jk) .gt. 0.)then - klab(jl,jk)=2 - else - klab(jl,jk)=1 - end if - end if - end if - end do - - end do ! end all the levels - - do jl=1,klon - ikb = kcbot(jl) - ikt = kctop(jl) - if(paph(jl,ikb) - paph(jl,ikt) > zdnoprc) lldcum(jl) = .false. - if(lldcum(jl)) then - ktype(jl) = 2 - ldcum(jl) = .true. - wbase(jl) = sqrt(max(2.*kup(jl,ikb),0.)) - cubot(jl) = ikb - cutop(jl) = ikt - kdpl(jl) = klev - else - cutop(jl) = -1 - cubot(jl) = -1 - kdpl(jl) = klev - 1 - ldcum(jl) = .false. - wbase(jl) = 0. - end if - end do - - do jk=klev,1,-1 - do jl=1,klon - ikt = kctop(jl) - if(jk .ge. ikt)then - culab(jl,jk) = klab(jl,jk) - cutu(jl,jk) = ptu(jl,jk) - cuqu(jl,jk) = pqu(jl,jk) - culu(jl,jk) = plu(jl,jk) - end if - end do - end do - -!----------------------------------------------------------- -! next, let's check the deep convection -! the first level is klevm1-1 -! define deltat and deltaq -!---------------------------------------------------------- -! we check the parcel starting level by level -! assume the mix-layer is 60hPa - deltt = 0.2 - deltq = 1.0e-4 - do jl=1,klon - deepflag(jl) = .false. - end do - - do jk=klev,1,-1 - do jl=1,klon - if((paph(jl,klev+1)-paph(jl,jk)) .lt. 350.e2) itoppacel(jl) = jk - end do - end do - - do levels=klevm1-1,klev/2+1,-1 ! loop starts - do jk=1,klev - do jl=1,klon - plu(jl,jk)=0.0 ! parcel liquid water - ptu(jl,jk)=0.0 ! parcel temperature - pqu(jl,jk)=0.0 ! parcel specific humidity - dh(jl,jk)=0.0 ! parcel dry static energy - dhen(jl,jk)=0.0 ! environment dry static energy - kup(jl,jk)=0.0 ! updraught kinetic energy for parcel - vptu(jl,jk)=0.0 ! parcel virtual temperature consideringwater-loading - vten(jl,jk)=0.0 ! environment virtual temperature - abuoy(jl,jk)=0.0 - zbuo(jl,jk)=0.0 - klab(jl,jk)=0 - end do - end do - - do jl=1,klon - kcbot(jl) = levels - kctop(jl) = levels - zqold(jl) = 0. - lldcum(jl) = .false. - resetflag(jl)= .false. - loflag(jl) = (.not. deepflag(jl)) .and. (levels.ge.itoppacel(jl)) - end do - -! start the inner loop to search the deep convection points - do jk=levels,2,-1 - is=0 - do jl=1,klon - if(loflag(jl))then - is=is+1 - endif - enddo - if(is.eq.0) exit - -! define the variables at the departure level - if(jk .eq. levels) then - do jl=1,klon - if(loflag(jl)) then - if((paph(jl,klev+1)-paph(jl,jk)) < 60.e2) then - tmix=0. - qmix=0. - zmix=0. - pmix=0. - do nk=jk+2,jk,-1 - if(pmix < 50.e2) then - dp = paph(jl,nk) - paph(jl,nk-1) - tmix=tmix+dp*ptenh(jl,nk) - qmix=qmix+dp*pqenh(jl,nk) - zmix=zmix+dp*pgeoh(jl,nk) - pmix=pmix+dp - end if - end do - tmix=tmix/pmix - qmix=qmix/pmix - zmix=zmix/pmix - else - tmix=ptenh(jl,jk+1) - qmix=pqenh(jl,jk+1) - zmix=pgeoh(jl,jk+1) - end if - - pqu(jl,jk+1) = qmix + deltq - dhen(jl,jk+1)= zmix + tmix*cpd - dh(jl,jk+1) = dhen(jl,jk+1) + deltt*cpd - ptu(jl,jk+1) = (dh(jl,jk+1)-pgeoh(jl,jk+1))*rcpd - kup(jl,jk+1) = 0.5 - klab(jl,jk+1)= 1 - vptu(jl,jk+1)=ptu(jl,jk+1)*(1.+vtmpc1*pqu(jl,jk+1)) - vten(jl,jk+1)=ptenh(jl,jk+1)*(1.+vtmpc1*pqenh(jl,jk+1)) - zbuo(jl,jk+1)=(vptu(jl,jk+1)-vten(jl,jk+1))/vten(jl,jk+1) - end if - end do - end if - -! the next levels, we use the variables at the first level as initial values - do jl=1,klon - if(loflag(jl)) then -! define the fscale - fscale = min(1.,(pqsen(jl,jk)/pqsen(jl,levels))**3) - eta(jl) = 1.75e-3*fscale - dz(jl) = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg - coef(jl)= 0.5*eta(jl)*dz(jl) - dhen(jl,jk) = pgeoh(jl,jk) + cpd*ptenh(jl,jk) - dh(jl,jk) = (coef(jl)*(dhen(jl,jk+1)+dhen(jl,jk))& - & +(1.-coef(jl))*dh(jl,jk+1))/(1.+coef(jl)) - pqu(jl,jk) =(coef(jl)*(pqenh(jl,jk+1)+pqenh(jl,jk))& - & +(1.-coef(jl))*pqu(jl,jk+1))/(1.+coef(jl)) - ptu(jl,jk) = (dh(jl,jk)-pgeoh(jl,jk))*rcpd - zqold(jl) = pqu(jl,jk) - zph(jl)=paph(jl,jk) - end if - end do -! check if the parcel is saturated - ik=jk - icall=1 - call cuadjtqn(klon,klev,ik,zph,ptu,pqu,loflag,icall) - - do jl=1,klon - if( loflag(jl) ) then - zdq = max((zqold(jl) - pqu(jl,jk)),0.) - plu(jl,jk) = plu(jl,jk+1) + zdq - zlglac=zdq*((1.-foealfa(ptu(jl,jk))) - & - (1.-foealfa(ptu(jl,jk+1)))) - plu(jl,jk) = 0.5*plu(jl,jk) - dh(jl,jk) = pgeoh(jl,jk) + cpd*(ptu(jl,jk)+ralfdcp*zlglac) -! compute the updraft speed - vptu(jl,jk) = ptu(jl,jk)*(1.+vtmpc1*pqu(jl,jk)-plu(jl,jk))+& - ralfdcp*zlglac - vten(jl,jk) = ptenh(jl,jk)*(1.+vtmpc1*pqenh(jl,jk)) - zbuo(jl,jk) = (vptu(jl,jk) - vten(jl,jk))/vten(jl,jk) - abuoy(jl,jk)=(zbuo(jl,jk)+zbuo(jl,jk+1))*0.5*g - atop1 = 1.0 - 2.*coef(jl) - atop2 = 2.0*dz(jl)*abuoy(jl,jk) - abot = 1.0 + 2.*coef(jl) - kup(jl,jk) = (atop1*kup(jl,jk+1) + atop2) / abot -! let's find the exact cloud base - if ( plu(jl,jk) > 0. .and. klab(jl,jk+1) == 1 ) then - ik = jk + 1 - zqsu = foeewm(ptu(jl,ik))/paph(jl,ik) - zqsu = min(0.5,zqsu) - zcor = 1./(1.-vtmpc1*zqsu) - zqsu = zqsu*zcor - zdq = min(0.,pqu(jl,ik)-zqsu) - zalfaw = foealfa(ptu(jl,ik)) - zfacw = c5les/((ptu(jl,ik)-c4les)**2) - zfaci = c5ies/((ptu(jl,ik)-c4ies)**2) - zfac = zalfaw*zfacw + (1.-zalfaw)*zfaci - zesdp = foeewm(ptu(jl,ik))/paph(jl,ik) - zcor = 1./(1.-vtmpc1*zesdp) - zdqsdt = zfac*zcor*zqsu - zdtdp = rd*ptu(jl,ik)/(cpd*paph(jl,ik)) - zdp = zdq/(zdqsdt*zdtdp) - zcbase(jl) = paph(jl,ik) + zdp -! chose nearest half level as cloud base (jk or jk+1) - zpdifftop = zcbase(jl) - paph(jl,jk) - zpdiffbot = paph(jl,jk+1) - zcbase(jl) - if ( zpdifftop > zpdiffbot .and. kup(jl,jk+1) > 0. ) then - ikb = min(klev-1,jk+1) - klab(jl,ikb) = 2 - klab(jl,jk) = 2 - kcbot(jl) = ikb - plu(jl,jk+1) = 1.0e-8 - else if ( zpdifftop <= zpdiffbot .and.kup(jl,jk) > 0. ) then - klab(jl,jk) = 2 - kcbot(jl) = jk - end if - end if - - if(kup(jl,jk) .lt. 0.)then - loflag(jl) = .false. - if(plu(jl,jk+1) .gt. 0.) then - kctop(jl) = jk - lldcum(jl) = .true. - else - lldcum(jl) = .false. - end if - else - if(plu(jl,jk) .gt. 0.)then - klab(jl,jk)=2 - else - klab(jl,jk)=1 - end if - end if - end if - end do - - end do ! end all the levels - - needreset = .false. - do jl=1,klon - ikb = kcbot(jl) - ikt = kctop(jl) - if(paph(jl,ikb) - paph(jl,ikt) < zdnoprc) lldcum(jl) = .false. - if(lldcum(jl)) then - ktype(jl) = 1 - ldcum(jl) = .true. - deepflag(jl) = .true. - wbase(jl) = sqrt(max(2.*kup(jl,ikb),0.)) - cubot(jl) = ikb - cutop(jl) = ikt - kdpl(jl) = levels+1 - needreset = .true. - resetflag(jl)= .true. - end if - end do - - if(needreset) then - do jk=klev,1,-1 - do jl=1,klon - if(resetflag(jl)) then - ikt = kctop(jl) - ikb = kdpl(jl) - if(jk .le. ikb .and. jk .ge. ikt )then - culab(jl,jk) = klab(jl,jk) - cutu(jl,jk) = ptu(jl,jk) - cuqu(jl,jk) = pqu(jl,jk) - culu(jl,jk) = plu(jl,jk) - else - culab(jl,jk) = 1 - cutu(jl,jk) = ptenh(jl,jk) - cuqu(jl,jk) = pqenh(jl,jk) - culu(jl,jk) = 0. - end if - if ( jk .lt. ikt ) culab(jl,jk) = 0 - end if - end do - end do - end if - - end do ! end all cycles - - return - end subroutine cutypen - -!----------------------------------------------------------------- -! level 3 subroutines 'cuascn' -!----------------------------------------------------------------- - subroutine cuascn & - & (klon, klev, klevp1, klevm1, ptenh, & - & pqenh, puen, pven, pten, pqen, & - & pqsen, pgeo, pgeoh, pap, paph, & - & pqte, pverv, klwmin, ldcum, phcbase, & - & ktype, klab, ptu, pqu, plu, & - & puu, pvu, pmfu, pmfub, & - & pmfus, pmfuq, pmful, plude, pdmfup, & - & kcbot, kctop, kctop0, kcum, ztmst, & - & pqsenh, plglac, lndj, wup, wbase, & - & kdpl, pmfude_rate) - - implicit none -! this routine does the calculations for cloud ascents -! for cumulus parameterization -! m.tiedtke e.c.m.w.f. 7/86 modif. 12/89 -! y.wang iprc 11/01 modif. -! c.zhang iprc 05/12 modif. -!***purpose. -! -------- -! to produce cloud ascents for cu-parametrization -! (vertical profiles of t,q,l,u and v and corresponding -! fluxes as well as precipitation rates) -!***interface -! --------- -! this routine is called from *cumastr*. -!***method. -! -------- -! lift surface air dry-adiabatically to cloud base -! and then calculate moist ascent for -! entraining/detraining plume. -! entrainment and detrainment rates differ for -! shallow and deep cumulus convection. -! in case there is no penetrative or shallow convection -! check for possibility of mid level convection -! (cloud base values calculated in *cubasmc*) -!***externals -! --------- -! *cuadjtqn* adjust t and q due to condensation in ascent -! *cuentrn* calculate entrainment/detrainment rates -! *cubasmcn* calculate cloud base values for midlevel convection -!***reference -! --------- -! (tiedtke,1989) -!***input variables: -! ptenh [ztenh] - environ temperature on half levels. (cuini) -! pqenh [zqenh] - env. specific humidity on half levels. (cuini) -! puen - environment wind u-component. (mssflx) -! pven - environment wind v-component. (mssflx) -! pten - environment temperature. (mssflx) -! pqen - environment specific humidity. (mssflx) -! pqsen - environment saturation specific humidity. (mssflx) -! pgeo - geopotential. (mssflx) -! pgeoh [zgeoh] - geopotential on half levels, (mssflx) -! pap - pressure in pa. (mssflx) -! paph - pressure of half levels. (mssflx) -! pqte - moisture convergence (delta q/delta t). (mssflx) -! pverv - large scale vertical velocity (omega). (mssflx) -! klwmin [ilwmin] - level of minimum omega. (cuini) -! klab [ilab] - level label - 1: sub-cloud layer. -! 2: condensation level (cloud base) -! pmfub [zmfub] - updraft mass flux at cloud base. (cumastr) -!***variables modified by cuasc: -! ldcum - logical denoting profiles. (cubase) -! ktype - convection type - 1: penetrative (cumastr) -! 2: stratocumulus (cumastr) -! 3: mid-level (cuasc) -! ptu - cloud temperature. -! pqu - cloud specific humidity. -! plu - cloud liquid water (moisture condensed out) -! puu [zuu] - cloud momentum u-component. -! pvu [zvu] - cloud momentum v-component. -! pmfu - updraft mass flux. -! pmfus [zmfus] - updraft flux of dry static energy. (cubasmc) -! pmfuq [zmfuq] - updraft flux of specific humidity. -! pmful [zmful] - updraft flux of cloud liquid water. -! plude - liquid water returned to environment by detrainment. -! pdmfup [zmfup] - -! kcbot - cloud base level. (cubase) -! kctop - cloud top level -! kctop0 [ictop0] - estimate of cloud top. (cumastr) -! kcum [icum] - flag to control the call - -!--- input arguments: - integer,intent(in):: klev,klon,klevp1,klevm1 - integer,intent(in),dimension(klon):: lndj - integer,intent(in),dimension(klon):: klwmin - integer,intent(in),dimension(klon):: kdpl - - real(kind=kind_phys),intent(in):: ztmst - real(kind=kind_phys),intent(in),dimension(klon):: wbase - real(kind=kind_phys),intent(in),dimension(klon,klev):: pten,pqen,pqsen,puen,pven,pqte,pverv - real(kind=kind_phys),intent(in),dimension(klon,klev):: pap,pgeo - real(kind=kind_phys),intent(in),dimension(klon,klevp1):: paph,pgeoh - -!--- inout arguments: - logical,intent(inout),dimension(klon):: ldcum - - integer,intent(inout):: kcum - integer,intent(inout),dimension(klon):: kcbot,kctop,kctop0 - integer,intent(inout),dimension(klon,klev):: klab - - real(kind=kind_phys),intent(inout),dimension(klon):: phcbase - real(kind=kind_phys),intent(inout),dimension(klon):: pmfub - real(kind=kind_phys),intent(inout),dimension(klon,klev):: ptenh,pqenh,pqsenh - real(kind=kind_phys),intent(inout),dimension(klon,klev):: ptu,pqu,plu,puu,pvu - real(kind=kind_phys),intent(inout),dimension(klon,klev):: pmfu,pmfus,pmfuq,pmful,plude,pdmfup - -!--- output arguments: - integer,intent(out),dimension(klon):: ktype - - real(kind=kind_phys),intent(out),dimension(klon):: wup - real(kind=kind_phys),intent(out),dimension(klon,klev):: plglac,pmfude_rate - -!--- local variables and arrays: - logical:: llo2,llo3 - logical,dimension(klon):: loflag,llo1 - - integer:: jl,jk - integer::ikb,icum,itopm2,ik,icall,is,jlm,jll - integer,dimension(klon):: jlx - - real(kind=kind_phys):: zcons2,zfacbuo,zprcdgw,z_cwdrag,z_cldmax,z_cwifrac,z_cprc2 - real(kind=kind_phys):: zmftest,zmfmax,zqeen,zseen,zscde,zqude - real(kind=kind_phys):: zmfusk,zmfuqk,zmfulk - real(kind=kind_phys):: zbc,zbe,zkedke,zmfun,zwu,zprcon,zdt,zcbf,zzco - real(kind=kind_phys):: zlcrit,zdfi,zc,zd,zint,zlnew,zvw,zvi,zalfaw,zrold - real(kind=kind_phys):: zrnew,zz,zdmfeu,zdmfdu,dp - real(kind=kind_phys):: zfac,zbuoc,zdkbuo,zdken,zvv,zarg,zchange,zxe,zxs,zdshrd - real(kind=kind_phys):: atop1,atop2,abot - - real(kind=kind_phys),dimension(klon):: eta,dz,zoentr,zdpmean - real(kind=kind_phys),dimension(klon):: zph,zdmfen,zdmfde,zmfuu,zmfuv,zpbase,zqold,zluold,zprecip - real(kind=kind_phys),dimension(klon,klev):: zlrain,zbuo,kup,zodetr,pdmfen - -!-------------------------------- -!* 1. specify parameters -!-------------------------------- - zcons2=3./(g*ztmst) - zfacbuo = 0.5/(1.+0.5) - zprcdgw = cprcon*zrg - z_cldmax = 5.e-3 - z_cwifrac = 0.5 - z_cprc2 = 0.5 - z_cwdrag = (3.0/8.0)*0.506/0.2 -!--------------------------------- -! 2. set default values -!--------------------------------- - llo3 = .false. - do jl=1,klon - zluold(jl)=0. - wup(jl)=0. - zdpmean(jl)=0. - zoentr(jl)=0. - if(.not.ldcum(jl)) then - ktype(jl)=0 - kcbot(jl) = -1 - pmfub(jl) = 0. - pqu(jl,klev) = 0. - end if - end do - - ! initialize variout quantities - do jk=1,klev - do jl=1,klon - if(jk.ne.kcbot(jl)) plu(jl,jk)=0. - pmfu(jl,jk)=0. - pmfus(jl,jk)=0. - pmfuq(jl,jk)=0. - pmful(jl,jk)=0. - plude(jl,jk)=0. - plglac(jl,jk)=0. - pdmfup(jl,jk)=0. - zlrain(jl,jk)=0. - zbuo(jl,jk)=0. - kup(jl,jk)=0. - pdmfen(jl,jk) = 0. - pmfude_rate(jl,jk) = 0. - if(.not.ldcum(jl).or.ktype(jl).eq.3) klab(jl,jk)=0 - if(.not.ldcum(jl).and.paph(jl,jk).lt.4.e4) kctop0(jl)=jk - end do - end do - - do jl = 1,klon - if ( ktype(jl) == 3 ) ldcum(jl) = .false. - end do -!------------------------------------------------ -! 3.0 initialize values at cloud base level -!------------------------------------------------ - do jl=1,klon - kctop(jl)=kcbot(jl) - if(ldcum(jl)) then - ikb = kcbot(jl) - kup(jl,ikb) = 0.5*wbase(jl)**2 - pmfu(jl,ikb) = pmfub(jl) - pmfus(jl,ikb) = pmfub(jl)*(cpd*ptu(jl,ikb)+pgeoh(jl,ikb)) - pmfuq(jl,ikb) = pmfub(jl)*pqu(jl,ikb) - pmful(jl,ikb) = pmfub(jl)*plu(jl,ikb) - end if - end do -! -!----------------------------------------------------------------- -! 4. do ascent: subcloud layer (klab=1) ,clouds (klab=2) -! by doing first dry-adiabatic ascent and then -! by adjusting t,q and l accordingly in *cuadjtqn*, -! then check for buoyancy and set flags accordingly -!----------------------------------------------------------------- -! - do jk=klevm1,3,-1 -! specify cloud base values for midlevel convection -! in *cubasmc* in case there is not already convection -! --------------------------------------------------------------------- - ik=jk - call cubasmcn& - & (klon, klev, klevm1, ik, pten, & - & pqen, pqsen, puen, pven, pverv, & - & pgeo, pgeoh, ldcum, ktype, klab, zlrain, & - & pmfu, pmfub, kcbot, ptu, & - & pqu, plu, puu, pvu, pmfus, & - & pmfuq, pmful, pdmfup) - is = 0 - jlm = 0 - do jl = 1,klon - loflag(jl) = .false. - zprecip(jl) = 0. - llo1(jl) = .false. - is = is + klab(jl,jk+1) - if ( klab(jl,jk+1) == 0 ) klab(jl,jk) = 0 - if ( (ldcum(jl) .and. klab(jl,jk+1) == 2) .or. & - (ktype(jl) == 3 .and. klab(jl,jk+1) == 1) ) then - loflag(jl) = .true. - jlm = jlm + 1 - jlx(jlm) = jl - end if - zph(jl) = paph(jl,jk) - if ( ktype(jl) == 3 .and. jk == kcbot(jl) ) then - zmfmax = (paph(jl,jk)-paph(jl,jk-1))*zcons2 - if ( pmfub(jl) > zmfmax ) then - zfac = zmfmax/pmfub(jl) - pmfu(jl,jk+1) = pmfu(jl,jk+1)*zfac - pmfus(jl,jk+1) = pmfus(jl,jk+1)*zfac - pmfuq(jl,jk+1) = pmfuq(jl,jk+1)*zfac - pmfub(jl) = zmfmax - end if - pmfub(jl)=min(pmfub(jl),zmfmax) - end if - end do - - if(is.gt.0) llo3 = .true. -! -!* specify entrainment rates in *cuentr* -! ------------------------------------- - ik=jk - call cuentrn(klon,klev,ik,kcbot,ldcum,llo3, & - pgeoh,pmfu,zdmfen,zdmfde) -! -! do adiabatic ascent for entraining/detraining plume - if(llo3) then -! ------------------------------------------------------- -! - do jl = 1,klon - zqold(jl) = 0. - end do - do jll = 1 , jlm - jl = jlx(jll) - zdmfde(jl) = min(zdmfde(jl),0.75*pmfu(jl,jk+1)) - if ( jk == kcbot(jl) ) then - zoentr(jl) = -1.75e-3*(min(1.,pqen(jl,jk)/pqsen(jl,jk)) - & - 1.)*(pgeoh(jl,jk)-pgeoh(jl,jk+1))*zrg - zoentr(jl) = min(0.4,zoentr(jl))*pmfu(jl,jk+1) - end if - if ( jk < kcbot(jl) ) then - zmfmax = (paph(jl,jk)-paph(jl,jk-1))*zcons2 - zxs = max(pmfu(jl,jk+1)-zmfmax,0.) - wup(jl) = wup(jl) + kup(jl,jk+1)*(pap(jl,jk+1)-pap(jl,jk)) - zdpmean(jl) = zdpmean(jl) + pap(jl,jk+1) - pap(jl,jk) - zdmfen(jl) = zoentr(jl) - if ( ktype(jl) >= 2 ) then - zdmfen(jl) = 2.0*zdmfen(jl) - zdmfde(jl) = zdmfen(jl) - end if - zdmfde(jl) = zdmfde(jl) * & - (1.6-min(1.,pqen(jl,jk)/pqsen(jl,jk))) - zmftest = pmfu(jl,jk+1) + zdmfen(jl) - zdmfde(jl) - zchange = max(zmftest-zmfmax,0.) - zxe = max(zchange-zxs,0.) - zdmfen(jl) = zdmfen(jl) - zxe - zchange = zchange - zxe - zdmfde(jl) = zdmfde(jl) + zchange - end if - pdmfen(jl,jk) = zdmfen(jl) - zdmfde(jl) - pmfu(jl,jk) = pmfu(jl,jk+1) + zdmfen(jl) - zdmfde(jl) - zqeen = pqenh(jl,jk+1)*zdmfen(jl) - zseen = (cpd*ptenh(jl,jk+1)+pgeoh(jl,jk+1))*zdmfen(jl) - zscde = (cpd*ptu(jl,jk+1)+pgeoh(jl,jk+1))*zdmfde(jl) - zqude = pqu(jl,jk+1)*zdmfde(jl) - plude(jl,jk) = plu(jl,jk+1)*zdmfde(jl) - zmfusk = pmfus(jl,jk+1) + zseen - zscde - zmfuqk = pmfuq(jl,jk+1) + zqeen - zqude - zmfulk = pmful(jl,jk+1) - plude(jl,jk) - plu(jl,jk) = zmfulk*(1./max(cmfcmin,pmfu(jl,jk))) - pqu(jl,jk) = zmfuqk*(1./max(cmfcmin,pmfu(jl,jk))) - ptu(jl,jk) = (zmfusk * & - (1./max(cmfcmin,pmfu(jl,jk)))-pgeoh(jl,jk))*rcpd - ptu(jl,jk) = max(100.,ptu(jl,jk)) - ptu(jl,jk) = min(400.,ptu(jl,jk)) - zqold(jl) = pqu(jl,jk) - zlrain(jl,jk) = zlrain(jl,jk+1)*(pmfu(jl,jk+1)-zdmfde(jl)) * & - (1./max(cmfcmin,pmfu(jl,jk))) - zluold(jl) = plu(jl,jk) - end do -! reset to environmental values if below departure level - do jl = 1,klon - if ( jk > kdpl(jl) ) then - ptu(jl,jk) = ptenh(jl,jk) - pqu(jl,jk) = pqenh(jl,jk) - plu(jl,jk) = 0. - zluold(jl) = plu(jl,jk) - end if - end do -!* do corrections for moist ascent -!* by adjusting t,q and l in *cuadjtq* -!------------------------------------------------ - ik=jk - icall=1 -! - if ( jlm > 0 ) then - call cuadjtqn(klon,klev,ik,zph,ptu,pqu,loflag,icall) - end if -! compute the upfraft speed in cloud layer - do jll = 1 , jlm - jl = jlx(jll) - if ( pqu(jl,jk) /= zqold(jl) ) then - plglac(jl,jk) = plu(jl,jk) * & - ((1.-foealfa(ptu(jl,jk)))- & - (1.-foealfa(ptu(jl,jk+1)))) - ptu(jl,jk) = ptu(jl,jk) + ralfdcp*plglac(jl,jk) - end if - end do - do jll = 1 , jlm - jl = jlx(jll) - if ( pqu(jl,jk) /= zqold(jl) ) then - klab(jl,jk) = 2 - plu(jl,jk) = plu(jl,jk) + zqold(jl) - pqu(jl,jk) - zbc = ptu(jl,jk)*(1.+vtmpc1*pqu(jl,jk)-plu(jl,jk+1) - & - zlrain(jl,jk+1)) - zbe = ptenh(jl,jk)*(1.+vtmpc1*pqenh(jl,jk)) - zbuo(jl,jk) = zbc - zbe -! set flags for the case of midlevel convection - if ( ktype(jl) == 3 .and. klab(jl,jk+1) == 1 ) then - if ( zbuo(jl,jk) > -0.5 ) then - ldcum(jl) = .true. - kctop(jl) = jk - kup(jl,jk) = 0.5 - else - klab(jl,jk) = 0 - pmfu(jl,jk) = 0. - plude(jl,jk) = 0. - plu(jl,jk) = 0. - end if - end if - if ( klab(jl,jk+1) == 2 ) then - if ( zbuo(jl,jk) < 0. ) then - ptenh(jl,jk) = 0.5*(pten(jl,jk)+pten(jl,jk-1)) - pqenh(jl,jk) = 0.5*(pqen(jl,jk)+pqen(jl,jk-1)) - zbuo(jl,jk) = zbc - ptenh(jl,jk)*(1.+vtmpc1*pqenh(jl,jk)) - end if - zbuoc = (zbuo(jl,jk) / & - (ptenh(jl,jk)*(1.+vtmpc1*pqenh(jl,jk)))+zbuo(jl,jk+1) / & - (ptenh(jl,jk+1)*(1.+vtmpc1*pqenh(jl,jk+1))))*0.5 - zdkbuo = (pgeoh(jl,jk)-pgeoh(jl,jk+1))*zfacbuo*zbuoc -! mixing and "pressure" gradient term in upper troposphere - if ( zdmfen(jl) > 0. ) then - zdken = min(1.,(1.+z_cwdrag)*zdmfen(jl) / & - max(cmfcmin,pmfu(jl,jk+1))) - else - zdken = min(1.,(1.+z_cwdrag)*zdmfde(jl) / & - max(cmfcmin,pmfu(jl,jk+1))) - end if - kup(jl,jk) = (kup(jl,jk+1)*(1.-zdken)+zdkbuo) / & - (1.+zdken) - if ( zbuo(jl,jk) < 0. ) then - zkedke = kup(jl,jk)/max(1.e-10,kup(jl,jk+1)) - zkedke = max(0.,min(1.,zkedke)) - zmfun = sqrt(zkedke)*pmfu(jl,jk+1) - zdmfde(jl) = max(zdmfde(jl),pmfu(jl,jk+1)-zmfun) - plude(jl,jk) = plu(jl,jk+1)*zdmfde(jl) - pmfu(jl,jk) = pmfu(jl,jk+1) + zdmfen(jl) - zdmfde(jl) - end if - if ( zbuo(jl,jk) > -0.2 ) then - ikb = kcbot(jl) - zoentr(jl) = 1.75e-3*(0.3-(min(1.,pqen(jl,jk-1) / & - pqsen(jl,jk-1))-1.))*(pgeoh(jl,jk-1)-pgeoh(jl,jk)) * & - zrg*min(1.,pqsen(jl,jk)/pqsen(jl,ikb))**3 - zoentr(jl) = min(0.4,zoentr(jl))*pmfu(jl,jk) - else - zoentr(jl) = 0. - end if -! erase values if below departure level - if ( jk > kdpl(jl) ) then - pmfu(jl,jk) = pmfu(jl,jk+1) - kup(jl,jk) = 0.5 - end if - if ( kup(jl,jk) > 0. .and. pmfu(jl,jk) > 0. ) then - kctop(jl) = jk - llo1(jl) = .true. - else - klab(jl,jk) = 0 - pmfu(jl,jk) = 0. - kup(jl,jk) = 0. - zdmfde(jl) = pmfu(jl,jk+1) - plude(jl,jk) = plu(jl,jk+1)*zdmfde(jl) - end if -! save detrainment rates for updraught - if ( pmfu(jl,jk+1) > 0. ) pmfude_rate(jl,jk) = zdmfde(jl) - end if - else if ( ktype(jl) == 2 .and. pqu(jl,jk) == zqold(jl) ) then - klab(jl,jk) = 0 - pmfu(jl,jk) = 0. - kup(jl,jk) = 0. - zdmfde(jl) = pmfu(jl,jk+1) - plude(jl,jk) = plu(jl,jk+1)*zdmfde(jl) - pmfude_rate(jl,jk) = zdmfde(jl) - end if - end do - - do jl = 1,klon - if ( llo1(jl) ) then -! conversions only proceeds if plu is greater than a threshold liquid water -! content of 0.3 g/kg over water and 0.5 g/kg over land to prevent precipitation -! generation from small water contents. - if ( lndj(jl).eq.1 ) then - zdshrd = 5.e-4 - else - zdshrd = 3.e-4 - end if - ikb=kcbot(jl) - if ( plu(jl,jk) > zdshrd )then - zwu = min(15.0,sqrt(2.*max(0.1,kup(jl,jk+1)))) - zprcon = zprcdgw/(0.75*zwu) -! PARAMETERS FOR BERGERON-FINDEISEN PROCESS (T < -5C) - zdt = min(rtber-rtice,max(rtber-ptu(jl,jk),0.)) - zcbf = 1. + z_cprc2*sqrt(zdt) - zzco = zprcon*zcbf - zlcrit = zdshrd/zcbf - zdfi = pgeoh(jl,jk) - pgeoh(jl,jk+1) - zc = (plu(jl,jk)-zluold(jl)) - zarg = (plu(jl,jk)/zlcrit)**2 - if ( zarg < 25.0 ) then - zd = zzco*(1.-exp(-zarg))*zdfi - else - zd = zzco*zdfi - end if - zint = exp(-zd) - zlnew = zluold(jl)*zint + zc/zd*(1.-zint) - zlnew = max(0.,min(plu(jl,jk),zlnew)) - zlnew = min(z_cldmax,zlnew) - zprecip(jl) = max(0.,zluold(jl)+zc-zlnew) - pdmfup(jl,jk) = zprecip(jl)*pmfu(jl,jk) - zlrain(jl,jk) = zlrain(jl,jk) + zprecip(jl) - plu(jl,jk) = zlnew - end if - end if - end do - do jl = 1, klon - if ( llo1(jl) ) then - if ( zlrain(jl,jk) > 0. ) then - zvw = 21.18*zlrain(jl,jk)**0.2 - zvi = z_cwifrac*zvw - zalfaw = foealfa(ptu(jl,jk)) - zvv = zalfaw*zvw + (1.-zalfaw)*zvi - zrold = zlrain(jl,jk) - zprecip(jl) - zc = zprecip(jl) - zwu = min(15.0,sqrt(2.*max(0.1,kup(jl,jk)))) - zd = zvv/zwu - zint = exp(-zd) - zrnew = zrold*zint + zc/zd*(1.-zint) - zrnew = max(0.,min(zlrain(jl,jk),zrnew)) - zlrain(jl,jk) = zrnew - end if - end if - end do - do jll = 1 , jlm - jl = jlx(jll) - pmful(jl,jk) = plu(jl,jk)*pmfu(jl,jk) - pmfus(jl,jk) = (cpd*ptu(jl,jk)+pgeoh(jl,jk))*pmfu(jl,jk) - pmfuq(jl,jk) = pqu(jl,jk)*pmfu(jl,jk) - end do - end if - end do -!---------------------------------------------------------------------- -! 5. final calculations -! ------------------ - do jl = 1,klon - if ( kctop(jl) == -1 ) ldcum(jl) = .false. - kcbot(jl) = max(kcbot(jl),kctop(jl)) - if ( ldcum(jl) ) then - wup(jl) = max(1.e-2,wup(jl)/max(1.,zdpmean(jl))) - wup(jl) = sqrt(2.*wup(jl)) - end if - end do - - return - end subroutine cuascn -!--------------------------------------------------------- -! level 3 souroutines -!-------------------------------------------------------- - subroutine cudlfsn & - & (klon, klev, & - & kcbot, kctop, lndj, ldcum, & - & ptenh, pqenh, puen, pven, & - & pten, pqsen, pgeo, & - & pgeoh, paph, ptu, pqu, plu, & - & puu, pvu, pmfub, prfl, & - & ptd, pqd, pud, pvd, & - & pmfd, pmfds, pmfdq, pdmfdp, & - & kdtop, lddraf) - -! this routine calculates level of free sinking for -! cumulus downdrafts and specifies t,q,u and v values - -! m.tiedtke e.c.m.w.f. 12/86 modif. 12/89 - -! purpose. -! -------- -! to produce lfs-values for cumulus downdrafts -! for massflux cumulus parameterization - -! interface -! --------- -! this routine is called from *cumastr*. -! input are environmental values of t,q,u,v,p,phi -! and updraft values t,q,u and v and also -! cloud base massflux and cu-precipitation rate. -! it returns t,q,u and v values and massflux at lfs. -! method. - -! check for negative buoyancy of air of equal parts of -! moist environmental air and cloud air. - -! parameter description units -! --------- ----------- ----- -! input parameters (integer): - -! *klon* number of grid points per packet -! *klev* number of levels -! *kcbot* cloud base level -! *kctop* cloud top level - -! input parameters (logical): - -! *lndj* land sea mask (1 for land) -! *ldcum* flag: .true. for convective points - -! input parameters (real): - -! *ptenh* env. temperature (t+1) on half levels k -! *pqenh* env. spec. humidity (t+1) on half levels kg/kg -! *puen* provisional environment u-velocity (t+1) m/s -! *pven* provisional environment v-velocity (t+1) m/s -! *pten* provisional environment temperature (t+1) k -! *pqsen* environment spec. saturation humidity (t+1) kg/kg -! *pgeo* geopotential m2/s2 -! *pgeoh* geopotential on half levels m2/s2 -! *paph* provisional pressure on half levels pa -! *ptu* temperature in updrafts k -! *pqu* spec. humidity in updrafts kg/kg -! *plu* liquid water content in updrafts kg/kg -! *puu* u-velocity in updrafts m/s -! *pvu* v-velocity in updrafts m/s -! *pmfub* massflux in updrafts at cloud base kg/(m2*s) - -! updated parameters (real): - -! *prfl* precipitation rate kg/(m2*s) - -! output parameters (real): - -! *ptd* temperature in downdrafts k -! *pqd* spec. humidity in downdrafts kg/kg -! *pud* u-velocity in downdrafts m/s -! *pvd* v-velocity in downdrafts m/s -! *pmfd* massflux in downdrafts kg/(m2*s) -! *pmfds* flux of dry static energy in downdrafts j/(m2*s) -! *pmfdq* flux of spec. humidity in downdrafts kg/(m2*s) -! *pdmfdp* flux difference of precip. in downdrafts kg/(m2*s) - -! output parameters (integer): - -! *kdtop* top level of downdrafts - -! output parameters (logical): - -! *lddraf* .true. if downdrafts exist - -! externals -! --------- -! *cuadjtq* for calculating wet bulb t and q at lfs -!---------------------------------------------------------------------- - - implicit none - -!--- input arguments: - integer,intent(in):: klon - logical,intent(in),dimension(klon):: ldcum - - integer,intent(in):: klev - integer,intent(in),dimension(klon):: lndj - integer,intent(in),dimension(klon):: kcbot,kctop - - real(kind=kind_phys),intent(in),dimension(klon):: pmfub - real(kind=kind_phys),intent(in),dimension(klon,klev):: pten,pqsen,pgeo,puen,pven - real(kind=kind_phys),intent(in),dimension(klon,klev):: ptenh,pqenh - real(kind=kind_phys),intent(in),dimension(klon,klev):: ptu,pqu,puu,pvu,plu - real(kind=kind_phys),intent(in),dimension(klon,klev+1):: pgeoh,paph - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(klon):: prfl - real(kind=kind_phys),intent(inout),dimension(klon,klev):: pud,pvd - -!--- output arguments: - logical,intent(out),dimension(klon):: lddraf - integer,intent(out),dimension(klon):: kdtop - - real(kind=kind_phys),intent(out),dimension(klon,klev):: ptd,pqd,pmfd,pmfds,pmfdq,pdmfdp - -!--- local variables and arrays: - logical,dimension(klon):: llo2 - integer:: jl,jk - integer:: is,ik,icall,ike - integer,dimension(klon):: ikhsmin - - real(kind=kind_phys):: zhsk,zttest,zqtest,zbuo,zmftop - real(kind=kind_phys),dimension(klon):: zcond,zph,zhsmin - real(kind=kind_phys),dimension(klon,klev):: ztenwb,zqenwb - -!---------------------------------------------------------------------- - -! 1. set default values for downdrafts -! --------------------------------- - do jl=1,klon - lddraf(jl)=.false. - kdtop(jl)=klev+1 - ikhsmin(jl)=klev+1 - zhsmin(jl)=1.e8 - enddo -!---------------------------------------------------------------------- - -! 2. determine level of free sinking: -! downdrafts shall start at model level of minimum -! of saturation moist static energy or below -! respectively - -! for every point and proceed as follows: - -! (1) determine level of minimum of hs -! (2) determine wet bulb environmental t and q -! (3) do mixing with cumulus cloud air -! (4) check for negative buoyancy -! (5) if buoyancy>0 repeat (2) to (4) for next -! level below - -! the assumption is that air of downdrafts is mixture -! of 50% cloud air + 50% environmental air at wet bulb -! temperature (i.e. which became saturated due to -! evaporation of rain and cloud water) -! ---------------------------------------------------- - do jk=3,klev-2 - do jl=1,klon - zhsk=cpd*pten(jl,jk)+pgeo(jl,jk) + & - & foelhm(pten(jl,jk))*pqsen(jl,jk) - if(zhsk .lt. zhsmin(jl)) then - zhsmin(jl) = zhsk - ikhsmin(jl)= jk - end if - end do - end do - - - ike=klev-3 - do jk=3,ike - -! 2.1 calculate wet-bulb temperature and moisture -! for environmental air in *cuadjtq* -! ------------------------------------------- - is=0 - do jl=1,klon - ztenwb(jl,jk)=ptenh(jl,jk) - zqenwb(jl,jk)=pqenh(jl,jk) - zph(jl)=paph(jl,jk) - llo2(jl)=ldcum(jl).and.prfl(jl).gt.0..and..not.lddraf(jl).and. & - & (jk.lt.kcbot(jl).and.jk.gt.kctop(jl)).and. jk.ge.ikhsmin(jl) - if(llo2(jl))then - is=is+1 - endif - enddo - if(is.eq.0) cycle - - ik=jk - icall=2 - call cuadjtqn & - & ( klon, klev, ik, zph, ztenwb, zqenwb, llo2, icall) - -! 2.2 do mixing of cumulus and environmental air -! and check for negative buoyancy. -! then set values for downdraft at lfs. -! ---------------------------------------- - do jl=1,klon - if(llo2(jl)) then - zttest=0.5*(ptu(jl,jk)+ztenwb(jl,jk)) - zqtest=0.5*(pqu(jl,jk)+zqenwb(jl,jk)) - zbuo=zttest*(1.+vtmpc1 *zqtest)- & - & ptenh(jl,jk)*(1.+vtmpc1 *pqenh(jl,jk)) - zcond(jl)=pqenh(jl,jk)-zqenwb(jl,jk) - zmftop=-cmfdeps*pmfub(jl) - if(zbuo.lt.0..and.prfl(jl).gt.10.*zmftop*zcond(jl)) then - kdtop(jl)=jk - lddraf(jl)=.true. - ptd(jl,jk)=zttest - pqd(jl,jk)=zqtest - pmfd(jl,jk)=zmftop - pmfds(jl,jk)=pmfd(jl,jk)*(cpd*ptd(jl,jk)+pgeoh(jl,jk)) - pmfdq(jl,jk)=pmfd(jl,jk)*pqd(jl,jk) - pdmfdp(jl,jk-1)=-0.5*pmfd(jl,jk)*zcond(jl) - prfl(jl)=prfl(jl)+pdmfdp(jl,jk-1) - endif - endif - enddo - - enddo - - return - end subroutine cudlfsn - -!--------------------------------------------------------- -! level 3 souroutines -!-------------------------------------------------------- -!********************************************** -! subroutine cuddrafn -!********************************************** - subroutine cuddrafn & - & ( klon, klev, lddraf & - & , ptenh, pqenh, puen, pven & - & , pgeo, pgeoh, paph, prfl & - & , ptd, pqd, pud, pvd, pmfu & - & , pmfd, pmfds, pmfdq, pdmfdp, pmfdde_rate ) - -! this routine calculates cumulus downdraft descent - -! m.tiedtke e.c.m.w.f. 12/86 modif. 12/89 - -! purpose. -! -------- -! to produce the vertical profiles for cumulus downdrafts -! (i.e. t,q,u and v and fluxes) - -! interface -! --------- - -! this routine is called from *cumastr*. -! input is t,q,p,phi,u,v at half levels. -! it returns fluxes of s,q and evaporation rate -! and u,v at levels where downdraft occurs - -! method. -! -------- -! calculate moist descent for entraining/detraining plume by -! a) moving air dry-adiabatically to next level below and -! b) correcting for evaporation to obtain saturated state. - -! parameter description units -! --------- ----------- ----- -! input parameters (integer): - -! *klon* number of grid points per packet -! *klev* number of levels - -! input parameters (logical): - -! *lddraf* .true. if downdrafts exist - -! input parameters (real): - -! *ptenh* env. temperature (t+1) on half levels k -! *pqenh* env. spec. humidity (t+1) on half levels kg/kg -! *puen* provisional environment u-velocity (t+1) m/s -! *pven* provisional environment v-velocity (t+1) m/s -! *pgeo* geopotential m2/s2 -! *paph* provisional pressure on half levels pa -! *pmfu* massflux updrafts kg/(m2*s) - -! updated parameters (real): - -! *prfl* precipitation rate kg/(m2*s) - -! output parameters (real): - -! *ptd* temperature in downdrafts k -! *pqd* spec. humidity in downdrafts kg/kg -! *pud* u-velocity in downdrafts m/s -! *pvd* v-velocity in downdrafts m/s -! *pmfd* massflux in downdrafts kg/(m2*s) -! *pmfds* flux of dry static energy in downdrafts j/(m2*s) -! *pmfdq* flux of spec. humidity in downdrafts kg/(m2*s) -! *pdmfdp* flux difference of precip. in downdrafts kg/(m2*s) - -! externals -! --------- -! *cuadjtq* for adjusting t and q due to evaporation in -! saturated descent -!---------------------------------------------------------------------- - implicit none - -!--- input arguments: - integer,intent(in)::klon - logical,intent(in),dimension(klon):: lddraf - - integer,intent(in)::klev - - real(kind=kind_phys),intent(in),dimension(klon,klev):: ptenh,pqenh,puen,pven - real(kind=kind_phys),intent(in),dimension(klon,klev):: pgeo,pmfu - real(kind=kind_phys),intent(in),dimension(klon,klev+1):: pgeoh,paph - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(klon):: prfl - real(kind=kind_phys),intent(inout),dimension(klon,klev):: ptd,pqd,pud,pvd - real(kind=kind_phys),intent(inout),dimension(klon,klev):: pmfd,pmfds,pmfdq,pdmfdp - -!--- output arguments: - real(kind=kind_phys),intent(inout),dimension(klon,klev):: pmfdde_rate - -!--- local variables and arrays: - logical:: llo1 - logical,dimension(klon):: llo2 - - integer:: jl,jk - integer:: is,ik,icall,ike - integer,dimension(klon):: itopde - - real(kind=kind_phys):: zentr,zdz,zzentr,zseen,zqeen,zsdde,zqdde,zdmfdp - real(kind=kind_phys):: zmfdsk,zmfdqk,zbuo,zrain,zbuoyz,zmfduk,zmfdvk - real(kind=kind_phys),dimension(klon):: zdmfen,zdmfde,zcond,zoentr,zbuoy,zph - -!---------------------------------------------------------------------- -! 1. calculate moist descent for cumulus downdraft by -! (a) calculating entrainment/detrainment rates, -! including organized entrainment dependent on -! negative buoyancy and assuming -! linear decrease of massflux in pbl -! (b) doing moist descent - evaporative cooling -! and moistening is calculated in *cuadjtq* -! (c) checking for negative buoyancy and -! specifying final t,q,u,v and downward fluxes -! ------------------------------------------------- - do jl=1,klon - zoentr(jl)=0. - zbuoy(jl)=0. - zdmfen(jl)=0. - zdmfde(jl)=0. - enddo - - do jk=klev,1,-1 - do jl=1,klon - pmfdde_rate(jl,jk) = 0. - if((paph(jl,klev+1)-paph(jl,jk)).lt. 60.e2) itopde(jl) = jk - end do - end do - - do jk=3,klev - is=0 - do jl=1,klon - zph(jl)=paph(jl,jk) - llo2(jl)=lddraf(jl).and.pmfd(jl,jk-1).lt.0. - if(llo2(jl)) then - is=is+1 - endif - enddo - if(is.eq.0) cycle - - do jl=1,klon - if(llo2(jl)) then - zentr = entrdd*pmfd(jl,jk-1)*(pgeoh(jl,jk-1)-pgeoh(jl,jk))*zrg - zdmfen(jl)=zentr - zdmfde(jl)=zentr - endif - enddo - - do jl=1,klon - if(llo2(jl)) then - if(jk.gt.itopde(jl)) then - zdmfen(jl)=0. - zdmfde(jl)=pmfd(jl,itopde(jl))* & - & (paph(jl,jk)-paph(jl,jk-1))/ & - & (paph(jl,klev+1)-paph(jl,itopde(jl))) - endif - endif - enddo - - do jl=1,klon - if(llo2(jl)) then - if(jk.le.itopde(jl)) then - zdz=-(pgeoh(jl,jk-1)-pgeoh(jl,jk))*zrg - zzentr=zoentr(jl)*zdz*pmfd(jl,jk-1) - zdmfen(jl)=zdmfen(jl)+zzentr - zdmfen(jl)=max(zdmfen(jl),0.3*pmfd(jl,jk-1)) - zdmfen(jl)=max(zdmfen(jl),-0.75*pmfu(jl,jk)- & - & (pmfd(jl,jk-1)-zdmfde(jl))) - zdmfen(jl)=min(zdmfen(jl),0.) - endif - endif - enddo - - do jl=1,klon - if(llo2(jl)) then - pmfd(jl,jk)=pmfd(jl,jk-1)+zdmfen(jl)-zdmfde(jl) - zseen=(cpd*ptenh(jl,jk-1)+pgeoh(jl,jk-1))*zdmfen(jl) - zqeen=pqenh(jl,jk-1)*zdmfen(jl) - zsdde=(cpd*ptd(jl,jk-1)+pgeoh(jl,jk-1))*zdmfde(jl) - zqdde=pqd(jl,jk-1)*zdmfde(jl) - zmfdsk=pmfds(jl,jk-1)+zseen-zsdde - zmfdqk=pmfdq(jl,jk-1)+zqeen-zqdde - pqd(jl,jk)=zmfdqk*(1./min(-cmfcmin,pmfd(jl,jk))) - ptd(jl,jk)=(zmfdsk*(1./min(-cmfcmin,pmfd(jl,jk)))-& - & pgeoh(jl,jk))*rcpd - ptd(jl,jk)=min(400.,ptd(jl,jk)) - ptd(jl,jk)=max(100.,ptd(jl,jk)) - zcond(jl)=pqd(jl,jk) - endif - enddo - - ik=jk - icall=2 - call cuadjtqn(klon, klev, ik, zph, ptd, pqd, llo2, icall ) - - do jl=1,klon - if(llo2(jl)) then - zcond(jl)=zcond(jl)-pqd(jl,jk) - zbuo=ptd(jl,jk)*(1.+vtmpc1 *pqd(jl,jk))- & - & ptenh(jl,jk)*(1.+vtmpc1 *pqenh(jl,jk)) - if(prfl(jl).gt.0..and.pmfu(jl,jk).gt.0.) then - zrain=prfl(jl)/pmfu(jl,jk) - zbuo=zbuo-ptd(jl,jk)*zrain - endif - if(zbuo.ge.0 .or. prfl(jl).le.(pmfd(jl,jk)*zcond(jl))) then - pmfd(jl,jk)=0. - zbuo=0. - endif - pmfds(jl,jk)=(cpd*ptd(jl,jk)+pgeoh(jl,jk))*pmfd(jl,jk) - pmfdq(jl,jk)=pqd(jl,jk)*pmfd(jl,jk) - zdmfdp=-pmfd(jl,jk)*zcond(jl) - pdmfdp(jl,jk-1)=zdmfdp - prfl(jl)=prfl(jl)+zdmfdp - -! compute organized entrainment for use at next level - zbuoyz=zbuo/ptenh(jl,jk) - zbuoyz=min(zbuoyz,0.0) - zdz=-(pgeo(jl,jk-1)-pgeo(jl,jk)) - zbuoy(jl)=zbuoy(jl)+zbuoyz*zdz - zoentr(jl)=g*zbuoyz*0.5/(1.+zbuoy(jl)) - pmfdde_rate(jl,jk) = -zdmfde(jl) - endif - enddo - - enddo - - return - end subroutine cuddrafn -!--------------------------------------------------------- -! level 3 souroutines -!-------------------------------------------------------- - subroutine cuflxn & - & ( klon, klev, ztmst & - & , pten, pqen, pqsen, ptenh, pqenh & - & , paph, pap, pgeoh, lndj, ldcum & - & , kcbot, kctop, kdtop, ktopm2 & - & , ktype, lddraf & - & , pmfu, pmfd, pmfus, pmfds & - & , pmfuq, pmfdq, pmful, plude & - & , pdmfup, pdmfdp, pdpmel, plglac & - & , prain, pmfdde_rate, pmflxr, pmflxs ) - -! m.tiedtke e.c.m.w.f. 7/86 modif. 12/89 - -! purpose -! ------- - -! this routine does the final calculation of convective -! fluxes in the cloud layer and in the subcloud layer - -! interface -! --------- -! this routine is called from *cumastr*. - - -! parameter description units -! --------- ----------- ----- -! input parameters (integer): - -! *klon* number of grid points per packet -! *klev* number of levels -! *kcbot* cloud base level -! *kctop* cloud top level -! *kdtop* top level of downdrafts - -! input parameters (logical): - -! *lndj* land sea mask (1 for land) -! *ldcum* flag: .true. for convective points - -! input parameters (real): - -! *ptsphy* time step for the physics s -! *pten* provisional environment temperature (t+1) k -! *pqen* provisional environment spec. humidity (t+1) kg/kg -! *pqsen* environment spec. saturation humidity (t+1) kg/kg -! *ptenh* env. temperature (t+1) on half levels k -! *pqenh* env. spec. humidity (t+1) on half levels kg/kg -! *paph* provisional pressure on half levels pa -! *pap* provisional pressure on full levels pa -! *pgeoh* geopotential on half levels m2/s2 - -! updated parameters (integer): - -! *ktype* set to zero if ldcum=.false. - -! updated parameters (logical): - -! *lddraf* set to .false. if ldcum=.false. or kdtop= kdtop(jl) - if ( llddraf .and.jk.ge.kdtop(jl)) then - pmfds(jl,jk) = pmfds(jl,jk)-pmfd(jl,jk) * & - (cpd*ptenh(jl,jk)+pgeoh(jl,jk)) - pmfdq(jl,jk) = pmfdq(jl,jk)-pmfd(jl,jk)*pqenh(jl,jk) - else - pmfd(jl,jk) = 0. - pmfds(jl,jk) = 0. - pmfdq(jl,jk) = 0. - pdmfdp(jl,jk-1) = 0. - end if - if ( llddraf .and. pmfd(jl,jk) < 0. .and. & - abs(pmfd(jl,ikb)) < 1.e-20 ) then - idbas(jl) = jk - end if - else - pmfu(jl,jk)=0. - pmfd(jl,jk)=0. - pmfus(jl,jk)=0. - pmfds(jl,jk)=0. - pmfuq(jl,jk)=0. - pmfdq(jl,jk)=0. - pmful(jl,jk)=0. - plglac(jl,jk)=0. - pdmfup(jl,jk-1)=0. - pdmfdp(jl,jk-1)=0. - plude(jl,jk-1)=0. - endif - enddo - enddo - - do jl=1,klon - pmflxr(jl,klev+1) = 0. - pmflxs(jl,klev+1) = 0. - end do - do jl=1,klon - if(ldcum(jl)) then - ikb=kcbot(jl) - ik=ikb+1 - zzp=((paph(jl,klev+1)-paph(jl,ik))/ & - & (paph(jl,klev+1)-paph(jl,ikb))) - if(ktype(jl).eq.3) then - zzp=zzp**2 - endif - pmfu(jl,ik)=pmfu(jl,ikb)*zzp - pmfus(jl,ik)=(pmfus(jl,ikb)- & - & foelhm(ptenh(jl,ikb))*pmful(jl,ikb))*zzp - pmfuq(jl,ik)=(pmfuq(jl,ikb)+pmful(jl,ikb))*zzp - pmful(jl,ik)=0. - endif - enddo - - do jk=ktopm2,klev - do jl=1,klon - if(ldcum(jl).and.jk.gt.kcbot(jl)+1) then - ikb=kcbot(jl)+1 - zzp=((paph(jl,klev+1)-paph(jl,jk))/ & - & (paph(jl,klev+1)-paph(jl,ikb))) - if(ktype(jl).eq.3) then - zzp=zzp**2 - endif - pmfu(jl,jk)=pmfu(jl,ikb)*zzp - pmfus(jl,jk)=pmfus(jl,ikb)*zzp - pmfuq(jl,jk)=pmfuq(jl,ikb)*zzp - pmful(jl,jk)=0. - endif - ik = idbas(jl) - llddraf = lddraf(jl) .and. jk > ik .and. ik < klev - if ( llddraf .and. ik == kcbot(jl)+1 ) then - zzp = ((paph(jl,klev+1)-paph(jl,jk))/(paph(jl,klev+1)-paph(jl,ik))) - if ( ktype(jl) == 3 ) zzp = zzp*zzp - pmfd(jl,jk) = pmfd(jl,ik)*zzp - pmfds(jl,jk) = pmfds(jl,ik)*zzp - pmfdq(jl,jk) = pmfdq(jl,ik)*zzp - pmfdde_rate(jl,jk) = -(pmfd(jl,jk-1)-pmfd(jl,jk)) - else if ( llddraf .and. ik /= kcbot(jl)+1 .and. jk == ik+1 ) then - pmfdde_rate(jl,jk) = -(pmfd(jl,jk-1)-pmfd(jl,jk)) - end if - enddo - enddo -!* 2. calculate rain/snow fall rates -!* calculate melting of snow -!* calculate evaporation of precip -! ------------------------------- - - do jk=ktopm2,klev - do jl=1,klon - if(ldcum(jl) .and. jk >=kctop(jl)-1 ) then - prain(jl)=prain(jl)+pdmfup(jl,jk) - if(pmflxs(jl,jk).gt.0..and.pten(jl,jk).gt.tmelt) then - zcons1=zcons1a*(1.+0.5*(pten(jl,jk)-tmelt)) - zfac=zcons1*(paph(jl,jk+1)-paph(jl,jk)) - zsnmlt=min(pmflxs(jl,jk),zfac*(pten(jl,jk)-tmelt)) - pdpmel(jl,jk)=zsnmlt - pqsen(jl,jk)=foeewm(pten(jl,jk)-zsnmlt/zfac)/pap(jl,jk) - endif - zalfaw=foealfa(pten(jl,jk)) - ! - ! No liquid precipitation above melting level - ! - if ( pten(jl,jk) < tmelt .and. zalfaw > 0. ) then - plglac(jl,jk) = plglac(jl,jk)+zalfaw*(pdmfup(jl,jk)+pdmfdp(jl,jk)) - zalfaw = 0. - end if - pmflxr(jl,jk+1)=pmflxr(jl,jk)+zalfaw* & - & (pdmfup(jl,jk)+pdmfdp(jl,jk))+pdpmel(jl,jk) - pmflxs(jl,jk+1)=pmflxs(jl,jk)+(1.-zalfaw)* & - & (pdmfup(jl,jk)+pdmfdp(jl,jk))-pdpmel(jl,jk) - if(pmflxr(jl,jk+1)+pmflxs(jl,jk+1).lt.0.0) then - pdmfdp(jl,jk)=-(pmflxr(jl,jk)+pmflxs(jl,jk)+pdmfup(jl,jk)) - pmflxr(jl,jk+1)=0.0 - pmflxs(jl,jk+1)=0.0 - pdpmel(jl,jk) =0.0 - else if ( pmflxr(jl,jk+1) < 0. ) then - pmflxs(jl,jk+1) = pmflxs(jl,jk+1)+pmflxr(jl,jk+1) - pmflxr(jl,jk+1) = 0. - else if ( pmflxs(jl,jk+1) < 0. ) then - pmflxr(jl,jk+1) = pmflxr(jl,jk+1)+pmflxs(jl,jk+1) - pmflxs(jl,jk+1) = 0. - end if - endif - enddo - enddo - do jk=ktopm2,klev - do jl=1,klon - if(ldcum(jl).and.jk.ge.kcbot(jl)) then - zrfl=pmflxr(jl,jk)+pmflxs(jl,jk) - if(zrfl.gt.1.e-20) then - zdrfl1=zcpecons*max(0.,pqsen(jl,jk)-pqen(jl,jk))*zcucov* & - & (sqrt(paph(jl,jk)/paph(jl,klev+1))/5.09e-3* & - & zrfl/zcucov)**0.5777* & - & (paph(jl,jk+1)-paph(jl,jk)) - zrnew=zrfl-zdrfl1 - zrmin=zrfl-zcucov*max(0.,rhevap(jl)*pqsen(jl,jk) & - & -pqen(jl,jk)) *zcons2*(paph(jl,jk+1)-paph(jl,jk)) - zrnew=max(zrnew,zrmin) - zrfln=max(zrnew,0.) - zdrfl=min(0.,zrfln-zrfl) - zdenom=1./max(1.e-20,pmflxr(jl,jk)+pmflxs(jl,jk)) - zalfaw=foealfa(pten(jl,jk)) - if ( pten(jl,jk) < tmelt ) zalfaw = 0. - zpdr=zalfaw*pdmfdp(jl,jk) - zpds=(1.-zalfaw)*pdmfdp(jl,jk) - pmflxr(jl,jk+1)=pmflxr(jl,jk)+zpdr & - & +pdpmel(jl,jk)+zdrfl*pmflxr(jl,jk)*zdenom - pmflxs(jl,jk+1)=pmflxs(jl,jk)+zpds & - & -pdpmel(jl,jk)+zdrfl*pmflxs(jl,jk)*zdenom - pdmfup(jl,jk)=pdmfup(jl,jk)+zdrfl - if ( pmflxr(jl,jk+1)+pmflxs(jl,jk+1) < 0. ) then - pdmfup(jl,jk) = pdmfup(jl,jk)-(pmflxr(jl,jk+1)+pmflxs(jl,jk+1)) - pmflxr(jl,jk+1) = 0. - pmflxs(jl,jk+1) = 0. - pdpmel(jl,jk) = 0. - else if ( pmflxr(jl,jk+1) < 0. ) then - pmflxs(jl,jk+1) = pmflxs(jl,jk+1)+pmflxr(jl,jk+1) - pmflxr(jl,jk+1) = 0. - else if ( pmflxs(jl,jk+1) < 0. ) then - pmflxr(jl,jk+1) = pmflxr(jl,jk+1)+pmflxs(jl,jk+1) - pmflxs(jl,jk+1) = 0. - end if - else - pmflxr(jl,jk+1)=0.0 - pmflxs(jl,jk+1)=0.0 - pdmfdp(jl,jk)=0.0 - pdpmel(jl,jk)=0.0 - endif - endif - enddo - enddo - - return - end subroutine cuflxn -!--------------------------------------------------------- -! level 3 subroutines -!-------------------------------------------------------- - subroutine cudtdqn(klon,klev,ktopm2,kctop,kdtop,ldcum, & - lddraf,ztmst,paph,pgeoh,pgeo,pten,ptenh,pqen, & - pqenh,pqsen,plglac,plude,pmfu,pmfd,pmfus,pmfds, & - pmfuq,pmfdq,pmful,pdmfup,pdmfdp,pdpmel,ptent,ptenq,pcte) - implicit none - -!--- input arguments: - integer,intent(in):: klon - logical,intent(in),dimension(klon):: ldcum,lddraf - - integer,intent(in):: klev,ktopm2 - integer,intent(in),dimension(klon):: kctop,kdtop - - real(kind=kind_phys),intent(in):: ztmst - real(kind=kind_phys),intent(in),dimension(klon,klev):: pgeo - real(kind=kind_phys),intent(in),dimension(klon,klev):: pten - real(kind=kind_phys),intent(in),dimension(klon,klev):: pmfu,pmfus,pmfd,pmfds - real(kind=kind_phys),intent(in),dimension(klon,klev):: pmfuq,pmfdq,pmful - real(kind=kind_phys),intent(in),dimension(klon,klev):: plglac,plude,pdpmel - real(kind=kind_phys),intent(in),dimension(klon,klev):: pdmfup,pdmfdp - real(kind=kind_phys),intent(in),dimension(klon,klev):: pqen, ptenh,pqenh,pqsen - real(kind=kind_phys),intent(in),dimension(klon,klev+1):: paph,pgeoh - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(klon,klev):: ptent,ptenq,pcte - -!--- local variables and arrays: - integer:: jk ,ik ,jl - real(kind=kind_phys):: zalv ,zzp - real(kind=kind_phys),dimension(klon,klev):: zdtdt,zdqdt,zdp - - !* 1.0 SETUP AND INITIALIZATIONS - ! ------------------------- - do jk = 1 , klev - do jl = 1, klon - if ( ldcum(jl) ) then - zdp(jl,jk) = g/(paph(jl,jk+1)-paph(jl,jk)) - end if - end do - end do - !----------------------------------------------------------------------- - !* 2.0 COMPUTE TENDENCIES - ! ------------------ - do jk = ktopm2 , klev - if ( jk < klev ) then - do jl = 1,klon - if ( ldcum(jl) ) then - zalv = foelhm(pten(jl,jk)) - zdtdt(jl,jk) = zdp(jl,jk)*rcpd * & - (pmfus(jl,jk+1)-pmfus(jl,jk)+pmfds(jl,jk+1) - & - pmfds(jl,jk)+alf*plglac(jl,jk)-alf*pdpmel(jl,jk) - & - zalv*(pmful(jl,jk+1)-pmful(jl,jk)-plude(jl,jk)-pdmfup(jl,jk)-pdmfdp(jl,jk))) - zdqdt(jl,jk) = zdp(jl,jk)*(pmfuq(jl,jk+1) - & - pmfuq(jl,jk)+pmfdq(jl,jk+1)-pmfdq(jl,jk)+pmful(jl,jk+1) - & - pmful(jl,jk)-plude(jl,jk)-pdmfup(jl,jk)-pdmfdp(jl,jk)) - end if - end do - else - do jl = 1,klon - if ( ldcum(jl) ) then - zalv = foelhm(pten(jl,jk)) - zdtdt(jl,jk) = -zdp(jl,jk)*rcpd * & - (pmfus(jl,jk)+pmfds(jl,jk)+alf*pdpmel(jl,jk) - & - zalv*(pmful(jl,jk)+pdmfup(jl,jk)+pdmfdp(jl,jk)+plude(jl,jk))) - zdqdt(jl,jk) = -zdp(jl,jk)*(pmfuq(jl,jk) + plude(jl,jk) + & - pmfdq(jl,jk)+(pmful(jl,jk)+pdmfup(jl,jk)+pdmfdp(jl,jk))) - end if - end do - end if - end do - !--------------------------------------------------------------- - !* 3.0 UPDATE TENDENCIES - ! ----------------- - do jk = ktopm2 , klev - do jl = 1, klon - if ( ldcum(jl) ) then - ptent(jl,jk) = ptent(jl,jk) + zdtdt(jl,jk) - ptenq(jl,jk) = ptenq(jl,jk) + zdqdt(jl,jk) - pcte(jl,jk) = zdp(jl,jk)*plude(jl,jk) - end if - end do - end do - - return - end subroutine cudtdqn -!--------------------------------------------------------- -! level 3 subroutines -!-------------------------------------------------------- - subroutine cududvn(klon,klev,ktopm2,ktype,kcbot,kctop,ldcum, & - ztmst,paph,puen,pven,pmfu,pmfd,puu,pud,pvu,pvd,ptenu, & - ptenv) - implicit none - -!--- input arguments: - integer,intent(in):: klon - logical,intent(in),dimension(klon):: ldcum - integer,intent(in):: klev,ktopm2 - integer,intent(in),dimension(klon):: ktype,kcbot,kctop - - real(kind=kind_phys),intent(in):: ztmst - real(kind=kind_phys),intent(in),dimension(klon,klev):: pmfu,pmfd,puen,pven - real(kind=kind_phys),intent(in),dimension(klon,klev):: puu,pud,pvu,pvd - real(kind=kind_phys),intent(in),dimension(klon,klev+1):: paph - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(klon,klev):: ptenu,ptenv - -!--- local variables and arrays: - integer:: ik,ikb,jk,jl - - real(kind=kind_phys):: zzp,zdtdt - real(kind=kind_Phys),dimension(klon,klev):: zdudt,zdvdt,zdp - real(kind=kind_phys),dimension(klon,klev):: zuen,zven,zmfuu,zmfdu,zmfuv,zmfdv - -! - do jk = 1 , klev - do jl = 1, klon - if ( ldcum(jl) ) then - zuen(jl,jk) = puen(jl,jk) - zven(jl,jk) = pven(jl,jk) - zdp(jl,jk) = g/(paph(jl,jk+1)-paph(jl,jk)) - end if - end do - end do -!---------------------------------------------------------------------- -!* 1.0 CALCULATE FLUXES AND UPDATE U AND V TENDENCIES -! ---------------------------------------------- - do jk = ktopm2 , klev - ik = jk - 1 - do jl = 1,klon - if ( ldcum(jl) ) then - zmfuu(jl,jk) = pmfu(jl,jk)*(puu(jl,jk)-zuen(jl,ik)) - zmfuv(jl,jk) = pmfu(jl,jk)*(pvu(jl,jk)-zven(jl,ik)) - zmfdu(jl,jk) = pmfd(jl,jk)*(pud(jl,jk)-zuen(jl,ik)) - zmfdv(jl,jk) = pmfd(jl,jk)*(pvd(jl,jk)-zven(jl,ik)) - end if - end do - end do - ! linear fluxes below cloud - do jk = ktopm2 , klev - do jl = 1, klon - if ( ldcum(jl) .and. jk > kcbot(jl) ) then - ikb = kcbot(jl) - zzp = ((paph(jl,klev+1)-paph(jl,jk))/(paph(jl,klev+1)-paph(jl,ikb))) - if ( ktype(jl) == 3 ) zzp = zzp*zzp - zmfuu(jl,jk) = zmfuu(jl,ikb)*zzp - zmfuv(jl,jk) = zmfuv(jl,ikb)*zzp - zmfdu(jl,jk) = zmfdu(jl,ikb)*zzp - zmfdv(jl,jk) = zmfdv(jl,ikb)*zzp - end if - end do - end do -!---------------------------------------------------------------------- -!* 2.0 COMPUTE TENDENCIES -! ------------------ - do jk = ktopm2 , klev - if ( jk < klev ) then - ik = jk + 1 - do jl = 1,klon - if ( ldcum(jl) ) then - zdudt(jl,jk) = zdp(jl,jk) * & - (zmfuu(jl,ik)-zmfuu(jl,jk)+zmfdu(jl,ik)-zmfdu(jl,jk)) - zdvdt(jl,jk) = zdp(jl,jk) * & - (zmfuv(jl,ik)-zmfuv(jl,jk)+zmfdv(jl,ik)-zmfdv(jl,jk)) - end if - end do - else - do jl = 1,klon - if ( ldcum(jl) ) then - zdudt(jl,jk) = -zdp(jl,jk)*(zmfuu(jl,jk)+zmfdu(jl,jk)) - zdvdt(jl,jk) = -zdp(jl,jk)*(zmfuv(jl,jk)+zmfdv(jl,jk)) - end if - end do - end if - end do -!--------------------------------------------------------------------- -!* 3.0 UPDATE TENDENCIES -! ----------------- - do jk = ktopm2 , klev - do jl = 1, klon - if ( ldcum(jl) ) then - ptenu(jl,jk) = ptenu(jl,jk) + zdudt(jl,jk) - ptenv(jl,jk) = ptenv(jl,jk) + zdvdt(jl,jk) - end if - end do - end do -!---------------------------------------------------------------------- - return - end subroutine cududvn -!--------------------------------------------------------- -! level 3 subroutines -!-------------------------------------------------------- - subroutine cuadjtqn & - & (klon, klev, kk, psp, pt, pq, ldflag, kcall) -! m.tiedtke e.c.m.w.f. 12/89 -! purpose. -! -------- -! to produce t,q and l values for cloud ascent - -! interface -! --------- -! this routine is called from subroutines: -! *cond* (t and q at condensation level) -! *cubase* (t and q at condensation level) -! *cuasc* (t and q at cloud levels) -! *cuini* (environmental t and qs values at half levels) -! input are unadjusted t and q values, -! it returns adjusted values of t and q - -! parameter description units -! --------- ----------- ----- -! input parameters (integer): - -! *klon* number of grid points per packet -! *klev* number of levels -! *kk* level -! *kcall* defines calculation as -! kcall=0 env. t and qs in*cuini* -! kcall=1 condensation in updrafts (e.g. cubase, cuasc) -! kcall=2 evaporation in downdrafts (e.g. cudlfs,cuddraf) -! input parameters (real): - -! *psp* pressure pa - -! updated parameters (real): - -! *pt* temperature k -! *pq* specific humidity kg/kg -! externals -! --------- -! for condensation calculations. -! the tables are initialised in *suphec*. - -!---------------------------------------------------------------------- - - implicit none - -!--- input arguments: - integer,intent(in):: klon - logical,intent(in),dimension(klon):: ldflag - integer,intent(in):: kcall,kk,klev - - real(kind=kind_phys),intent(in),dimension(klon):: psp - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(klon,klev):: pt,pq - -!--- local variables and arrays: - integer:: jl,jk - integer:: isum - - real(kind=kind_phys)::zqmax,zqsat,zcor,zqp,zcond,zcond1,zl,zi,zf - -!---------------------------------------------------------------------- -! 1. define constants -! ---------------- - zqmax=0.5 - -! 2. calculate condensation and adjust t and q accordingly -! ----------------------------------------------------- - - if ( kcall == 1 ) then - do jl = 1,klon - if ( ldflag(jl) ) then - zqp = 1./psp(jl) - zl = 1./(pt(jl,kk)-c4les) - zi = 1./(pt(jl,kk)-c4ies) - zqsat = c2es*(foealfa(pt(jl,kk))*exp(c3les*(pt(jl,kk)-tmelt)*zl) + & - (1.-foealfa(pt(jl,kk)))*exp(c3ies*(pt(jl,kk)-tmelt)*zi)) - zqsat = zqsat*zqp - zqsat = min(0.5,zqsat) - zcor = 1. - vtmpc1*zqsat - zf = foealfa(pt(jl,kk))*r5alvcp*zl**2 + & - (1.-foealfa(pt(jl,kk)))*r5alscp*zi**2 - zcond = (pq(jl,kk)*zcor**2-zqsat*zcor)/(zcor**2+zqsat*zf) - if ( zcond > 0. ) then - pt(jl,kk) = pt(jl,kk) + foeldcpm(pt(jl,kk))*zcond - pq(jl,kk) = pq(jl,kk) - zcond - zl = 1./(pt(jl,kk)-c4les) - zi = 1./(pt(jl,kk)-c4ies) - zqsat = c2es*(foealfa(pt(jl,kk)) * & - exp(c3les*(pt(jl,kk)-tmelt)*zl)+(1.-foealfa(pt(jl,kk))) * & - exp(c3ies*(pt(jl,kk)-tmelt)*zi)) - zqsat = zqsat*zqp - zqsat = min(0.5,zqsat) - zcor = 1. - vtmpc1*zqsat - zf = foealfa(pt(jl,kk))*r5alvcp*zl**2 + & - (1.-foealfa(pt(jl,kk)))*r5alscp*zi**2 - zcond1 = (pq(jl,kk)*zcor**2-zqsat*zcor)/(zcor**2+zqsat*zf) - if ( abs(zcond) < 1.e-20 ) zcond1 = 0. - pt(jl,kk) = pt(jl,kk) + foeldcpm(pt(jl,kk))*zcond1 - pq(jl,kk) = pq(jl,kk) - zcond1 - end if - end if - end do - elseif ( kcall == 2 ) then - do jl = 1,klon - if ( ldflag(jl) ) then - zqp = 1./psp(jl) - zqsat = foeewm(pt(jl,kk))*zqp - zqsat = min(0.5,zqsat) - zcor = 1./(1.-vtmpc1*zqsat) - zqsat = zqsat*zcor - zcond = (pq(jl,kk)-zqsat)/(1.+zqsat*zcor*foedem(pt(jl,kk))) - zcond = min(zcond,0.) - pt(jl,kk) = pt(jl,kk) + foeldcpm(pt(jl,kk))*zcond - pq(jl,kk) = pq(jl,kk) - zcond - zqsat = foeewm(pt(jl,kk))*zqp - zqsat = min(0.5,zqsat) - zcor = 1./(1.-vtmpc1*zqsat) - zqsat = zqsat*zcor - zcond1 = (pq(jl,kk)-zqsat)/(1.+zqsat*zcor*foedem(pt(jl,kk))) - if ( abs(zcond) < 1.e-20 ) zcond1 = min(zcond1,0.) - pt(jl,kk) = pt(jl,kk) + foeldcpm(pt(jl,kk))*zcond1 - pq(jl,kk) = pq(jl,kk) - zcond1 - end if - end do - else if ( kcall == 0 ) then - do jl = 1,klon - zqp = 1./psp(jl) - zqsat = foeewm(pt(jl,kk))*zqp - zqsat = min(0.5,zqsat) - zcor = 1./(1.-vtmpc1*zqsat) - zqsat = zqsat*zcor - zcond1 = (pq(jl,kk)-zqsat)/(1.+zqsat*zcor*foedem(pt(jl,kk))) - pt(jl,kk) = pt(jl,kk) + foeldcpm(pt(jl,kk))*zcond1 - pq(jl,kk) = pq(jl,kk) - zcond1 - zqsat = foeewm(pt(jl,kk))*zqp - zqsat = min(0.5,zqsat) - zcor = 1./(1.-vtmpc1*zqsat) - zqsat = zqsat*zcor - zcond1 = (pq(jl,kk)-zqsat)/(1.+zqsat*zcor*foedem(pt(jl,kk))) - pt(jl,kk) = pt(jl,kk) + foeldcpm(pt(jl,kk))*zcond1 - pq(jl,kk) = pq(jl,kk) - zcond1 - end do - end if - - return - end subroutine cuadjtqn -!--------------------------------------------------------- -! level 4 subroutines -!-------------------------------------------------------- - subroutine cubasmcn & - & (klon, klev, klevm1, kk, pten, & - & pqen, pqsen, puen, pven, pverv, & - & pgeo, pgeoh, ldcum, ktype, klab, plrain, & - & pmfu, pmfub, kcbot, ptu, & - & pqu, plu, puu, pvu, pmfus, & - & pmfuq, pmful, pdmfup) - implicit none -! m.tiedtke e.c.m.w.f. 12/89 -! c.zhang iprc 05/2012 -!***purpose. -! -------- -! this routine calculates cloud base values -! for midlevel convection -!***interface -! --------- -! this routine is called from *cuasc*. -! input are environmental values t,q etc -! it returns cloudbase values for midlevel convection -!***method. -! ------- -! s. tiedtke (1989) -!***externals -! --------- -! none -! ---------------------------------------------------------------- - -!--- input arguments: - integer,intent(in):: klon - logical,intent(in),dimension(klon):: ldcum - integer,intent(in):: kk,klev,klevm1 - - real(kind=kind_phys),intent(in),dimension(klon,klev):: pten,pqen,pqsen,pgeo,pverv - real(kind=kind_phys),intent(in),dimension(klon,klev):: puen,pven ! not used. - real(kind=kind_phys),intent(in),dimension(klon,klev):: puu,pvu ! not used. - real(kind=kind_phys),intent(in),dimension(klon,klev+1):: pgeoh - -!--- output arguments: - integer,intent(out),dimension(klon):: ktype,kcbot - integer,intent(out),dimension(klon,klev):: klab - - real(kind=kind_phys),intent(out),dimension(klon):: pmfub - real(kind=kind_phys),intent(out),dimension(klon,klev):: plrain - real(kind=kind_phys),intent(out),dimension(klon,klev):: ptu,pqu,plu - real(kind=kind_phys),intent(out),dimension(klon,klev):: pmfu,pmfus,pmfuq,pmful - real(kind=kind_phys),intent(out),dimension(klon,klev):: pdmfup - -!--- local variables and arrays: - integer:: jl,klevp1 - real(kind=kind_phys):: zzzmb - -!-------------------------------------------------------- -!* 1. calculate entrainment and detrainment rates -! ------------------------------------------------------- - do jl=1,klon - if(.not.ldcum(jl) .and. klab(jl,kk+1).eq.0) then - if(lmfmid .and. pqen(jl,kk) .gt. 0.80*pqsen(jl,kk).and. & - pgeo(jl,kk)*zrg .gt. 5.0e2 .and. & - & pgeo(jl,kk)*zrg .lt. 1.0e4 ) then - ptu(jl,kk+1)=(cpd*pten(jl,kk)+pgeo(jl,kk)-pgeoh(jl,kk+1))& - & *rcpd - pqu(jl,kk+1)=pqen(jl,kk) - plu(jl,kk+1)=0. - zzzmb=max(cmfcmin,-pverv(jl,kk)*zrg) - zzzmb=min(zzzmb,cmfcmax) - pmfub(jl)=zzzmb - pmfu(jl,kk+1)=pmfub(jl) - pmfus(jl,kk+1)=pmfub(jl)*(cpd*ptu(jl,kk+1)+pgeoh(jl,kk+1)) - pmfuq(jl,kk+1)=pmfub(jl)*pqu(jl,kk+1) - pmful(jl,kk+1)=0. - pdmfup(jl,kk+1)=0. - kcbot(jl)=kk - klab(jl,kk+1)=1 - plrain(jl,kk+1)=0.0 - ktype(jl)=3 - end if - end if - end do - return - end subroutine cubasmcn -!--------------------------------------------------------- -! level 4 subroutines -!--------------------------------------------------------- - subroutine cuentrn(klon,klev,kk,kcbot,ldcum,ldwork, & - pgeoh,pmfu,pdmfen,pdmfde) - implicit none - -!--- input arguments: - logical,intent(in):: ldwork - integer,intent(in):: klon - logical,intent(in),dimension(klon):: ldcum - - integer,intent(in):: klev,kk - integer,intent(in),dimension(klon):: kcbot - - real(kind=kind_phys),intent(in),dimension(klon,klev):: pmfu - real(kind=kind_phys),intent(in),dimension(klon,klev+1):: pgeoh - -!--- output arguments: - real(kind=kind_phys),intent(out),dimension(klon):: pdmfen - real(kind=kind_phys),intent(out),dimension(klon):: pdmfde - -!--- local variables and arrays: - logical:: llo1 - integer:: jl - real(kind=kind_phys):: zdz ,zmf - real(kind=kind_phys),dimension(klon):: zentr - - ! - !* 1. CALCULATE ENTRAINMENT AND DETRAINMENT RATES - ! ------------------------------------------- - if ( ldwork ) then - do jl = 1,klon - pdmfen(jl) = 0. - pdmfde(jl) = 0. - zentr(jl) = 0. - end do - ! - !* 1.1 SPECIFY ENTRAINMENT RATES - ! ------------------------- - do jl = 1, klon - if ( ldcum(jl) ) then - zdz = (pgeoh(jl,kk)-pgeoh(jl,kk+1))*zrg - zmf = pmfu(jl,kk+1)*zdz - llo1 = kk < kcbot(jl) - if ( llo1 ) then - pdmfen(jl) = zentr(jl)*zmf - pdmfde(jl) = 0.75e-4*zmf - end if - end if - end do - end if - end subroutine cuentrn -!-------------------------------------------------------- -! external functions -!------------------------------------------------------ - real(kind=kind_phys) function foealfa(tt) -! foealfa is calculated to distinguish the three cases: -! -! foealfa=1 water phase -! foealfa=0 ice phase -! 0 < foealfa < 1 mixed phase -! -! input : tt = temperature -! - implicit none - real(kind=kind_phys),intent(in):: tt - foealfa = min(1.,((max(rtice,min(rtwat,tt))-rtice) & - & /(rtwat-rtice))**2) - - return - end function foealfa - - real(kind=kind_phys) function foelhm(tt) - implicit none - real(kind=kind_phys),intent(in):: tt - foelhm = foealfa(tt)*alv + (1.-foealfa(tt))*als - return - end function foelhm - - real(kind=kind_phys) function foeewm(tt) - implicit none - real(kind=kind_phys),intent(in):: tt - foeewm = c2es * & - & (foealfa(tt)*exp(c3les*(tt-tmelt)/(tt-c4les))+ & - & (1.-foealfa(tt))*exp(c3ies*(tt-tmelt)/(tt-c4ies))) - return - end function foeewm - - real(kind=kind_phys) function foedem(tt) - implicit none - real(kind=kind_phys),intent(in):: tt - foedem = foealfa(tt)*r5alvcp*(1./(tt-c4les)**2)+ & - & (1.-foealfa(tt))*r5alscp*(1./(tt-c4ies)**2) - return - end function foedem - - real(kind=kind_phys) function foeldcpm(tt) - implicit none - real(kind=kind_phys),intent(in):: tt - foeldcpm = foealfa(tt)*ralvdcp+ & - & (1.-foealfa(tt))*ralsdcp - return - end function foeldcpm - -!================================================================================================================= - end module cu_ntiedtke -!================================================================================================================= - diff --git a/src/core_atmosphere/physics/physics_mmm/module_libmassv.F b/src/core_atmosphere/physics/physics_mmm/module_libmassv.F deleted file mode 100644 index 60ff9fa02..000000000 --- a/src/core_atmosphere/physics/physics_mmm/module_libmassv.F +++ /dev/null @@ -1,91 +0,0 @@ -!================================================================================================================= - module module_libmassv - - implicit none - - - interface vrec - module procedure vrec_d - module procedure vrec_s - end interface - - interface vsqrt - module procedure vsqrt_d - module procedure vsqrt_s - end interface - - integer, parameter, private :: R4KIND = selected_real_kind(6) - integer, parameter, private :: R8KIND = selected_real_kind(12) - - contains - - -!================================================================================================================= - subroutine vrec_d(y,x,n) -!================================================================================================================= - integer,intent(in):: n - real(kind=R8KIND),dimension(*),intent(in):: x - real(kind=R8KIND),dimension(*),intent(out):: y - - integer:: j -!----------------------------------------------------------------------------------------------------------------- - - do j=1,n - y(j)=real(1.0,kind=R8KIND)/x(j) - enddo - - end subroutine vrec_d - -!================================================================================================================= - subroutine vrec_s(y,x,n) -!================================================================================================================= - integer,intent(in):: n - real(kind=R4KIND),dimension(*),intent(in):: x - real(kind=R4KIND),dimension(*),intent(out):: y - - integer:: j -!----------------------------------------------------------------------------------------------------------------- - - do j=1,n - y(j)=real(1.0,kind=R4KIND)/x(j) - enddo - - end subroutine vrec_s - -!================================================================================================================= - subroutine vsqrt_d(y,x,n) -!================================================================================================================= - integer,intent(in):: n - real(kind=R8KIND),dimension(*),intent(in):: x - real(kind=R8KIND),dimension(*),intent(out):: y - - integer:: j -!----------------------------------------------------------------------------------------------------------------- - - do j=1,n - y(j)=sqrt(x(j)) - enddo - - end subroutine vsqrt_d - -!================================================================================================================= - subroutine vsqrt_s(y,x,n) -!================================================================================================================= - - integer,intent(in):: n - real(kind=R4KIND),dimension(*),intent(in):: x - real(kind=R4KIND),dimension(*),intent(out):: y - - integer:: j - -!----------------------------------------------------------------------------------------------------------------- - - do j=1,n - y(j)=sqrt(x(j)) - enddo - - end subroutine vsqrt_s - -!================================================================================================================= - end module module_libmassv -!================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_mmm/module_sprayHFs.F b/src/core_atmosphere/physics/physics_mmm/module_sprayHFs.F deleted file mode 100644 index 60591a5e8..000000000 --- a/src/core_atmosphere/physics/physics_mmm/module_sprayHFs.F +++ /dev/null @@ -1,965 +0,0 @@ -MODULE module_sprayHFs - -IMPLICIT NONE -PUBLIC :: sprayHFs -PRIVATE - -!=============================================================================== -! -! SEASTATE-DEPENDENT AIR-SEA HEAT FLUXES WITH SPRAY IN HIGH WINDS -! -! This module contains subroutines to incorporate seastate-dependent sea -! spray heat flux physics into an existing bulk surface layer scheme in coupled -! regional or global Earth system models. This code is maintained at -! https://github.com/bwbarr/sprayHFs, where documentation and the latest version -! are available. Please send any questions about model physics or this module's -! implementation to Ben Barr at benjamin.barr@whoi.edu. -! -!=============================================================================== -! -! Implemented in MPAS/MONAN models by S.R.Freitas (INPE @ Jan 2025) -!=============================================================================== - - -CONTAINS - - -!=============================================================================== - -SUBROUTINE sprayHFs(z_1,t_1,q_1,U_1,gf,p_0,t_0,eps,dcp,swh,mss,L,z0,z0t,z0q,& - z_ref,whichSSGF,paramWaves,dHS1_spr,dHL1_spr,dthstar_spr,& - dqstar_spr,dthvstar_spr,dthref_spr,dtref_spr,dqref_spr,dsref_spr,& - tau,H_S0pr,H_L0pr,M_spr,H_Tspr,H_Rspr,H_SNspr,H_Lspr,alpha_S,& - beta_S,beta_L,gamma_S,gamma_L) - -!------------------------------------------------------------------------------- -! -! Subroutine to calculate spray modifications to heat fluxes and surface layer -! properties. Implemented per Barr et al. (2023) (hereafter BCF23). Heat -! fluxes from the ocean to the atmosphere are defined as positive, and momentum -! fluxes (stress) from the atmosphere to the ocean are defined as positive. -! Positive heat fluxes correspond to negative values of the turbulent flux -! scales thstar, qstar, and thvstar. -! -! Inputs: -! z_1 - height of lowest atmospheric model mass level [m] -! t_1 - air temperature at z_1 [K] -! q_1 - air specific humidity at z_1 [kg kg-1] -! U_1 - current-relative windspeed magnitude at z_1 [m s-1]. Does not -! include gustiness. -! gf - gust factor accounting for gustiness at low winds [-]. gf = Sg_1/U_1, -! where Sg_1 is the windspeed magnitude at z_1 including gustiness. If -! not accounting for gustiness, pass gf = 1. -! p_0 - surface pressure [Pa] -! t_0 - sea surface temperature (interfacial temp, not bulk layer temp) [K] -! eps - wave energy dissipation flux [W m-2] -! dcp - dominant wave phase speed [m s-1] -! swh - significant wave height [m] -! mss - mean squared waveslope [-] -! L - Obukhov stability length [m]. This is considered "known" for this -! subroutine's computations but may be determined iteratively by the -! existing bulk algorithm code. -! z0 - momentum roughness length [m]. If surface stress comes from a bulk -! algorithm (e.g., COARE), pass the parameterized z0. If surface stress -! comes from a wave model, invert and pass an equivalent z0 based on MO -! theory using stress, U_1, gf, and L. -! z0t - thermal roughness length [m] -! z0q - moisture roughness length [m]. Does not have to be equal to z0t. -! z_ref - reference height [m] for calculating spray changes to subgrid surface -! layer potential temperature, temperature, specific humidity, and -! saturation ratio. This may be used to update the existing code's -! calculations of thermodynamic variables at a reference height (e.g., -! 2 m). The physics of this parameterization do not produce direct -! changes to the subgrid wind profile (e.g., 10-m windspeed components). -! z_ref should not be larger than z_1. Pass -1 for z_ref to calculate -! these changes at the mid-spray-layer height. -! whichSSGF - string naming which SSGF to use. Options are: -! 'BCF23_Seastate': seastate-dependent, per BCF23 Eq. 1. -! 'F94_MOM80': widely used F94 wind-based SSGF, using original whitecap -! fraction per Monahan and O'Muircheartaigh (1980). -! 'F94_BCF23': updated F94 wind-based SSGF given as BCF23 Eq. 3. -! paramWaves - True to parameterize wave processes, False to use input values -! for wave properties (eps, dcp, swh, mss). If True, dummy values -! (e.g., zeroes) should be passed in the subroutine call for all four -! wave properties. If False, externally-defined values (e.g., from a -! wave model) should be passed in the subroutine call. -! Outputs: -! dHS1_spr - change to total surface sensible heat flux due to spray [W m-2] -! dHL1_spr - change to total surface latent heat flux due to spray [W m-2] -! dthstar_spr - change to total theta flux scale due to spray [K] -! dqstar_spr - change to total q flux scale due to spray [kg kg-1] -! dthvstar_spr - change to total thetav (i.e., buoyancy) flux scale due to -! spray [K] -! dthref_spr - change to potential temperature at user-specified reference -! height due to spray heat flux feedback [K], (+) = warming -! dtref_spr - change to temperature at user-specified reference height due -! to spray heat flux feedback [K], (+) = warming -! dqref_spr - change to q at user-specified reference height due to spray -! heat flux feedback [kg kg-1], (+) = moistening -! dsref_spr - change to saturation ratio at user-specified reference height -! due to spray heat flux feedback [-], (+) = s increases -! tau - bulk stress [Pa]. Provided for comparison to bulk stress from -! existing bulk code. Should not be used to override existing bulk stress. -! H_S0pr - bulk SHF without spray [W m-2]. Provided for comparison to bulk -! SHF from existing code. Should not be used to override existing bulk -! SHF. -! H_L0pr - bulk LHF without spray [W m-2]. Provided for comparison to bulk -! LHF from existing code. Should not be used to override existing bulk -! LHF. -! M_spr - spray generated mass flux [kg m-2 s-1] -! H_Tspr - spray heat flux due to temperature change [W m-2]. This is -! exactly equal to the spray enthalpy flux, H_Kspr. H_Kspr is not a -! variable used in this code, but it is discussed in the BCF23 paper. -! H_Rspr - spray heat flux due to size change [W m-2] -! H_SNspr - net spray sensible heat flux [W m-2], including both the direct -! heating flux (H_Sspr) and the evaporative cooling flux (-H_Rspr), -! i.e., H_SNspr = H_Sspr - H_Rspr. -! H_Lspr - spray latent heat flux [W m-2] -! alpha_S - feedback coefficient between H_Sspr and surface layer -! temp/humidity profiles [-] -! beta_S - feedback coefficient between H_Rspr and surface layer -! temp/humidity profiles [-] -! beta_L - feedback coefficient between H_Lspr and surface layer -! temp/humidity profiles [-] -! gamma_S - feedback coefficient between spray heat fluxes and interfacial -! sensible heat flux [-] -! gamma_L - feedback coefficient between spray heat fluxes and interfacial -! latent heat flux [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: z_1,t_1,q_1,U_1,gf,p_0,t_0,L,z0,z0t,z0q,z_ref -CHARACTER(LEN=*),INTENT(IN) :: whichSSGF -LOGICAL,INTENT(IN) :: paramWaves -REAL,INTENT(INOUT) :: eps,dcp,swh,mss -REAL,INTENT(OUT) :: dHS1_spr -REAL,INTENT(OUT) :: dHL1_spr -REAL,INTENT(OUT) :: dthstar_spr -REAL,INTENT(OUT) :: dqstar_spr -REAL,INTENT(OUT) :: dthvstar_spr -REAL,INTENT(OUT) :: dthref_spr -REAL,INTENT(OUT) :: dtref_spr -REAL,INTENT(OUT) :: dqref_spr -REAL,INTENT(OUT) :: dsref_spr -REAL,INTENT(OUT) :: tau -REAL,INTENT(OUT) :: H_S0pr -REAL,INTENT(OUT) :: H_L0pr -REAL,INTENT(OUT) :: M_spr -REAL,INTENT(OUT) :: H_Tspr -REAL,INTENT(OUT) :: H_Rspr -REAL,INTENT(OUT) :: H_SNspr -REAL,INTENT(OUT) :: H_Lspr -REAL,INTENT(OUT) :: alpha_S -REAL,INTENT(OUT) :: beta_S -REAL,INTENT(OUT) :: beta_L -REAL,INTENT(OUT) :: gamma_S -REAL,INTENT(OUT) :: gamma_L - -REAL,PARAMETER :: sprayLB = 10.0 ! Lower bound on U_10 for spray production. 10 m s-1 is typical for whitecapping -REAL,PARAMETER :: kappa = 0.4 ! von Karman constant [-] -REAL,PARAMETER :: g = 9.81 ! Acceleration due to gravity [m s-2] -REAL,PARAMETER :: Rdry = 287.1 ! Dry air gas constant [J kg-1 K-1] -REAL,PARAMETER :: rho_sw = 1030. ! Density of seawater [kg m-3] -REAL,PARAMETER :: rho_dry = 2160. ! Density of chrystalline salt [kg m-3] -REAL,PARAMETER :: cp_sw = 4200. ! Specific heat capacity of seawater [J kg-1 K-1] -REAL,PARAMETER :: cp_a = 1004.67 ! Specific heat capacity of air [J kg-1 K-1] -REAL,PARAMETER :: nu = 2. ! Number of ions into which NaCl dissociates [-] -REAL,PARAMETER :: Phi_s = 0.924 ! Practical osmotic coefficient at molality of 0.6 [-] -REAL,PARAMETER :: Mw = 18.02 ! Molecular weight of water [g mol-1] -REAL,PARAMETER :: Ms = 58.44 ! Molecular weight of salt [g mol-1] -REAL,PARAMETER :: xs = 0.035 ! Mass fraction of salt in seawater [-] - -REAL :: Sg_1,ustar,U_10 -REAL :: Lv,delspr,zref,rdryBYr0,y0,q_0,tv_1,rho_a,p_1,p_delsprD2,p_zref,th_0,& - th_1,tC_1,k_a,nu_a,Dv_a,gammaWB -REAL :: psiH_1,psiH_delspr,psiH_delsprD2,psiH_zref,phisprH_delspr,phisprH_zref,thstar_pr,& - qstar_pr,G_S,G_L,t_delsprD2pr,th_zref_pr,t_zref_pr,q_delsprD2pr,q_zref_pr,& - s_delsprD2pr,s_zref_pr -REAL :: zR,H_Sspr,H_Tsprpr,H_Ssprpr,H_Rsprpr,H_Lsprpr -REAL :: etaT,Cs_pr,C_HIG,H_IG,Psi,Chi,Lambda,A,B,C,B2M4AC,s_hatPOS,H_Rspr_IG -REAL :: H_S1,H_L1,H_S0,H_L0,th_zref,t_zref,q_zref,s_zref,thstar,qstar,thvstar_pr,thvstar -CHARACTER(LEN=100) :: Wform - -! Droplet radius vector [m] -REAL,DIMENSION(25) :: r0 = (/ 10., 20., 30., 40., 50., 60.,& - 70., 80., 90., 102.5, 122.5, 157.5, 215., 300., 400., 500.,& - 600., 700., 800., 900.,1037.5, 1250., 1500., 1750., 2000. /)*1e-6 -! Droplet bin width vector [m] -REAL,DIMENSION(25) :: delta_r0 = (/ 10., 10., 10., 10., 10., 10.,& - 10., 10., 10., 15., 25., 45., 70., 100., 100., 100.,& - 100., 100., 100., 100., 175., 250., 250., 250., 250. /)*1e-6 -REAL,DIMENSION(25) :: v_g,dmdr0,tauf,Fp,tauT,zT - - -! 1. Check if U_10 >= sprayLB. If so, perform spray calculations -------------- -Sg_1 = U_1*gf ! Windspeed magnitude at z_1 including gustiness [m s-1] -ustar = Sg_1*kappa/(LOG(z_1/z0) - stabIntM(z_1/L)) ! Local turbulence intensity (not bulk fric velocity) [m s-1] -U_10 = ustar/kappa/gf*(LOG(10./z0) - stabIntM(10./L)) ! 10m windspeed [m s-1], gustiness removed -IF (U_10 < sprayLB) THEN ! Set returned fields to zero or dummy (999) values - - dHS1_spr = 0.; dHL1_spr = 0.; dthstar_spr = 0.; dqstar_spr = 0.; dthvstar_spr = 0.; - dthref_spr = 0.; dtref_spr = 0.; dqref_spr = 0.; dsref_spr = 0. - tau = 999.; H_S0pr = 999.; H_L0pr = 999.; M_spr = 999. - H_Tspr = 999.; H_Rspr = 999.; H_SNspr = 999.; H_Lspr = 999. - alpha_S = 999.; beta_S = 999.; beta_L = 999.; gamma_S = 999.; gamma_L = 999. - -ELSE IF (U_10 >= sprayLB) THEN ! Perform spray calculations - - ! 2. Get properties and environmental variables ---------------------------- - Lv = (2.501-0.00237*(t_0-273.15))*1e6 ! Latent heat of vap for water [J kg-1] - rdryBYr0 = (xs*rho_sw/rho_dry)**0.33333 ! Ratio of dry salt radius to r0 [-] - y0 = -nu*Phi_s*Mw/Ms*rho_dry/rho_sw*rdryBYr0**3/(1. - rho_dry/rho_sw*rdryBYr0**3) ! y for surface seawater [-] - q_0 = qsat0(t_0,p_0)*(1. + y0) ! Specific humidity at surface (accounting for salt) [kg kg-1] - tv_1 = t_1*(1.+0.608*q_1) ! Virtual temperature at z_1 [K] - rho_a = (p_0 - 1.25*g*z_1)/(Rdry*tv_1) ! Air density at z_1 [kg m-3], adjusting pressure using rho_a~1.25 kg m-3 - IF (paramWaves) THEN ! Parameterize eps, dcp, swh, and mss - CALL waveProps(U_10,ustar/gf**0.5,rho_a,eps,dcp,swh,mss) ! Uses bulk friction velocity without gustiness - END IF - delspr = MIN(swh,z_1) ! Spray layer thickness [m], nominally one swh per M&V2014a. Limited to z_1. - IF (z_ref < 0.) THEN ! Set reference height to user-defined value or mid-spray layer height - zref = delspr/2. - ELSE - zref = z_ref - END IF - p_1 = p_0 - rho_a*g*z_1 ! Pressure at z_1 [Pa]. All pressure adjustments assume hydrostatic gradient. - p_delsprD2 = p_0 - rho_a*g*delspr/2. ! Pressure at delspr/2 [Pa] - p_zref = p_0 - rho_a*g*zref ! Pressure at zref [Pa] - th_0 = t_0*(1.e5/p_0)**0.286 ! Potential temperature at surface [K] - th_1 = t_1*(1.e5/p_1)**0.286 ! Potential temperature at z_1 [K] - tC_1 = t_1 - 273.15 ! Convert t_1 to [C] for property calculations - k_a = 2.411e-2*(1.+3.309e-3*tC_1-1.441e-6*tC_1**2) ! Thermal conductivity of air [W m-1 K-1] - nu_a = 1.326e-5*(1.+6.542e-3*tC_1+8.301e-6*tC_1**2-4.84e-9*tC_1**3) ! Kin visc of air [m2 s-1] - Dv_a = 2.11e-5*((tC_1+273.)/273.)**1.94 ! Water vapor diffusivity in air [m2 s-1] - gammaWB = 240.97*17.502/(tC_1+240.97)**2 ! gamma = (dqsat/dT)/qsat [K-1], per Buck (1981) - - ! 3. Calculate fluxes w/o spray and some stability/feedback items ---------- - psiH_1 = stabIntH(z_1/L) ! Stability integral for heat at z_1 [-] - psiH_delspr = stabIntH(delspr/L) ! Stability integral for heat at delspr [-] - psiH_delsprD2 = stabIntH(delspr/2./L) ! Stability integral for heat at delspr/2 [-] - psiH_zref = stabIntH(zref/L) ! Stability integral for heat at zref [-] - phisprH_delspr = stabIntSprayH(delspr/L) ! Stability integral for heat with spray at delspr [-] - phisprH_zref = stabIntSprayH(zref/L) ! Stability integral for heat with spray at zref [-] - thstar_pr = -(th_0 - th_1)*kappa/(LOG(z_1/z0t) - psiH_1) ! theta flux scale without spray [K] - qstar_pr = -( q_0 - q_1)*kappa/(LOG(z_1/z0q) - psiH_1) ! q flux scale without spray [kg kg-1] - G_S = rho_a*cp_a*kappa*ustar ! Dimensional group for sensible heat [W m-2 K-1] - G_L = rho_a*Lv*kappa*ustar ! Dimensional group for latent heat [W m-2] - tau = rho_a*ustar**2/gf ! Bulk stress [Pa] - H_S0pr = -G_S/kappa*thstar_pr ! Bulk SHF without spray [W m-2] - H_L0pr = -G_L/kappa*qstar_pr ! Bulk LHF without spray [W m-2] - t_delsprD2pr = (th_0 - H_S0pr/G_S*(LOG(delspr/2./z0t) - psiH_delsprD2))*(p_delsprD2/1.e5)**0.286 ! t at mid-layer w/o fdbk [K] - th_zref_pr = th_0 - H_S0pr/G_S*(LOG(zref/z0t) - psiH_zref ) ! Potential temp at zref w/o fdbk [K] - q_delsprD2pr = q_0 - H_L0pr/G_L*(LOG(delspr/2./z0q) - psiH_delsprD2) ! q at mid-layer w/o fdbk [kg kg-1] - q_zref_pr = q_0 - H_L0pr/G_L*(LOG(zref/z0q) - psiH_zref ) ! q at zref w/o fdbk [kg kg-1] - t_zref_pr = th_zref_pr*(p_zref/1.e5)**0.286 ! t at zref w/o fdbk [K] - s_delsprD2pr = satratio(t_delsprD2pr,p_delsprD2,q_delsprD2pr,0.99999) ! s at mid-layer w/o fdbk [-] - s_zref_pr = satratio(t_zref_pr ,p_zref ,q_zref_pr ,0.99999) ! s at zref w/o fdbk [-] - gamma_S = (LOG(delspr/z0t) - psiH_delspr - 1. + phisprH_delspr)/(LOG(z_1/z0t) - psiH_1) ! Interfacial SHF fdbk coeff [-] - gamma_L = (LOG(delspr/z0q) - psiH_delspr - 1. + phisprH_delspr)/(LOG(z_1/z0q) - psiH_1) ! Interfacial LHF fdbk coeff [-] - - ! 4. Calculate spray generation and some droplet properties ---------------- - v_g = fall_velocity_PK97(r0) ! Droplet settling velocity [m s-1] - IF (whichSSGF == 'BCF23_Seastate') THEN - CALL ssgf_BCF23(eps,swh,dcp,mss,ustar,z0,L,gf,r0,delta_r0,v_g,M_spr,dmdr0) - ELSE IF ((whichSSGF == 'F94_MOM80') .OR. (whichSSGF == 'F94_BCF23')) THEN - IF (whichSSGF == 'F94_MOM80') THEN - Wform = 'MOM80' - ELSE IF (whichSSGF == 'F94_BCF23') THEN - Wform = 'BCF23' - END IF - CALL ssgf_F94(U_10,Wform,r0,delta_r0,M_spr,dmdr0) - END IF - tauf = delspr/v_g ! Characteristic droplet settling time [s] - Fp = 1. + 0.25*(2.*v_g*r0/nu_a)**0.5 ! Slip factor (Pr&Kl) [-] - tauT = rho_sw*cp_sw*r0**2/3./k_a/Fp ! Characteristic droplet cooling timescale [s] - zT = MIN(0.5*delspr,0.5*v_g*tauT) ! H_Tspr ambient property height [m] - zR = 0.5*delspr ! H_Rspr ambient property height [m] - - ! 5. Calculate spray heat fluxes without feedback -------------------------- - ! Initialize spray heat fluxes to zero - H_Sspr = 0. - H_Rspr = 0. - H_Lspr = 0. - ! Calculate spray heat fluxes without feedback - CALL update_HFs(H_Sspr,H_Rspr,H_Lspr,r0,delta_r0,zT,zR,tauf,tauT,Fp,& - dmdr0,p_0,gammaWB,y0,t_0,rho_a,Dv_a,xs,delspr,z0t,z0q,L,th_0,q_0,& - G_S,G_L,H_S0pr,H_L0pr,gamma_S,gamma_L,Lv,cp_a,rho_sw,nu,Phi_s,Mw,& - Ms,cp_sw,g,H_Tspr) - ! Store spray heat fluxes without feedback - H_Tsprpr = H_Tspr ! Spray HF due to temp change, without feedback [W m-2] - H_Ssprpr = H_Sspr ! Spray SHF, without feedback [W m-2] - H_Rsprpr = H_Rspr ! Spray HF due to size change, without feedback [W m-2] - H_Lsprpr = H_Lspr ! Spray LHF, without feedback [W m-2] - - ! 6. Calculate spray heat fluxes with feedback ----------------------------- - ! Use simple model to calculate initial guess for H_Rspr - etaT = 17.502*240.97/(t_delsprD2pr-273.15+240.97)**2 ! [K-1] - Cs_pr = (1. + y0 - s_delsprD2pr)**2/(1. - s_delsprD2pr) ! [-] - IF (delspr < 4.) THEN - C_HIG = 1.0 ! Tuneable constant for equivalent height [-] - ELSE IF (delspr > 10.) THEN - C_HIG = 0.7 - ELSE - C_HIG = -0.05*delspr + 1.2 - END IF - H_IG = MIN(C_HIG*delspr,z_1) ! Equivalent height for heating in simple model [m] - Psi = etaT*LOG(z_1/H_IG)/G_S*H_Tsprpr ! [-] - Chi = etaT*LOG(z_1/H_IG)/G_S + LOG(z_1/H_IG)/G_L/q_delsprD2pr ! [m2 W-1] - Lambda = (Psi - 1. + (1. + y0)/s_delsprD2pr)/Chi ! [W m-2] - A = H_Rsprpr/Cs_pr + 1./s_delsprD2pr/Chi ! [W m-2] - B = -Lambda - y0/s_delsprD2pr/Chi ! [W m-2] - C = y0*Lambda ! [W m-2] - B2M4AC = B**2 - 4.*A*C ! Argument of radical in quadratic formula [W2 m-4] - IF (B2M4AC >= 0.) THEN ! Real solutions - s_hatPOS = (-B + SQRT(B2M4AC))/2./A ! Larger root [-], seems physical - H_Rspr_IG = s_hatPOS**2/(s_hatPOS - y0)*H_Rsprpr/Cs_pr ! IG for H_Rspr [W m-2] - ELSE ! For imaginary solutions set H_Rspr_IG to zero - H_Rspr_IG = 0. - END IF - ! Adjust heat fluxes using IG - H_Rspr = H_Rspr_IG - H_Lspr = H_Rspr_IG + H_Tspr - H_Sspr - ! Calculate spray heat fluxes with feedback using H_Rspr_IG - CALL update_HFs(H_Sspr,H_Rspr,H_Lspr,r0,delta_r0,zT,zR,tauf,tauT,Fp,& - dmdr0,p_0,gammaWB,y0,t_0,rho_a,Dv_a,xs,delspr,z0t,z0q,L,th_0,q_0,& - G_S,G_L,H_S0pr,H_L0pr,gamma_S,gamma_L,Lv,cp_a,rho_sw,nu,Phi_s,Mw,& - Ms,cp_sw,g,H_Tspr) - - ! 7. Calculate final diagnosed quantities ---------------------------------- - H_SNspr = H_Sspr - H_Rspr ! Net spray sensible heat flux [W m-2] - dHS1_spr = gamma_S*H_SNspr ! Change to total SHF due to spray [W m-2] - dHL1_spr = gamma_L*H_Lspr ! Change to total LHF due to spray [W m-2] - dthstar_spr = -kappa/G_S*dHS1_spr ! Change to thstar due to spray [K] - dqstar_spr = -kappa/G_L*dHL1_spr ! Change to qstar due to spray [kg kg-1] - - !--srf: got floating-point exception - erroneous arithmetic operation. - !alpha_S = H_Sspr/H_Ssprpr ! Feedback coefficient for H_Sspr [-] - !beta_S = H_Rspr/H_Rsprpr ! Feedback coefficient for H_Rspr [-] - !beta_L = H_Lspr/H_Lsprpr ! Feedback coefficient for H_Lspr [-] - !---- - - H_S1 = H_S0pr + dHS1_spr ! Total SHF [W m-2] - H_L1 = H_L0pr + dHL1_spr ! Total LHF [W m-2] - H_S0 = H_S1 - H_SNspr ! Surface SHF (interfacial with feedback) [W m-2] - H_L0 = H_L1 - H_Lspr ! Surface LHF (interfacial with feedback) [W m-2] - IF (zref < delspr) THEN ! zref is within spray layer - th_zref = th_0 - 1./G_S*(H_S0*(LOG(zref/z0t) - psiH_zref) & - + zref/delspr*(1. - phisprH_zref)*H_SNspr) ! th at zref w/ fdbk [K] - q_zref = q_0 - 1./G_L*(H_L0*(LOG(zref/z0q) - psiH_zref) & - + zref/delspr*(1. - phisprH_zref)*H_Lspr) ! q at zref w/ fdbk [kg kg-1] - ELSE ! zref is above spray layer - th_zref = th_1 + H_S1/G_S*(LOG(z_1/zref) - psiH_1 + psiH_zref) ! [K] - q_zref = q_1 + H_L1/G_L*(LOG(z_1/zref) - psiH_1 + psiH_zref) ! [kg kg-1] - END IF - t_zref = th_zref*(p_zref/1.e5)**0.286 ! t at zref w/ fdbk [K] - s_zref = satratio(t_zref,p_zref,q_zref,0.99999) ! s at zref w/ fdbk [-] - dthref_spr = th_zref - th_zref_pr ! th change at zref due to feedback [K], (+) = warming - dtref_spr = t_zref - t_zref_pr ! t change at zref due to feedback [K], (+) = warming - dqref_spr = q_zref - q_zref_pr ! q change at zref due to feedback [kg kg-1], (+) = moistening - dsref_spr = s_zref - s_zref_pr ! s change at zref due to feedback [-], (+) = incr s - thstar = -H_S1*kappa/G_S ! theta flux scale with spray (based on total SHF) [K] - qstar = -H_L1*kappa/G_L ! q flux scale with spray (based on total LHF) [kg kg-1] - thvstar_pr = thstar_pr*(1. + 0.61*q_1) + 0.61*t_1*qstar_pr ! thetav flux scale without spray [K] - thvstar = thstar*(1. + 0.61*q_1) + 0.61*t_1*qstar ! thetav flux scale with spray [K] - dthvstar_spr = thvstar - thvstar_pr ! Change to thvstar due to spray [K] - -END IF - -END SUBROUTINE sprayHFs - -!=============================================================================== - -SUBROUTINE update_HFs(H_Sspr,H_Rspr,H_Lspr,r0,delta_r0,zT,zR,tauf,tauT,Fp,& - dmdr0,p_0,gammaWB,y0,t_0,rho_a,Dv_a,xs,delspr,z0t,z0q,L,th_0,q_0,& - G_S,G_L,H_S0pr,H_L0pr,gamma_S,gamma_L,Lv,cp_a,rho_sw,nu,Phi_s,Mw,& - Ms,cp_sw,g,H_Tspr) - -!------------------------------------------------------------------------------- -! -! Subroutine to update spray heat fluxes based on previous values. -! -! Updated (INOUT) Fields: -! H_Sspr [W m-2], H_Rspr [W m-2], H_Lspr [W m-2] -! Inputs: -! r0 [m], delta_r0 [m], zT [m], zR [m], tauf [s], tauT [s], Fp [-], -! dmdr0 [kg m-2 s-1 m-1], p_0 [Pa], gammaWB [K-1], y0 [-], t_0 [K], -! rho_a [kg m-3], Dv_a [m2 s-1], xs [-], delspr [m], z0t [m], z0q [m], -! L [m], th_0 [K], q_0 [kg kg-1], G_S [W m-2 K-1], G_L [W m-2], -! H_S0pr [W m-2], H_L0pr [W m-2], gamma_S [-], gamma_L [-], Lv [J kg-1], -! cp_a [J kg-1 K-1], rho_sw [kg m-3], nu [-], Phi_s [-], Mw [g mol-1], -! Ms [g mol-1], cp_sw [J kg-1 K-1], g [m s-2] -! Outputs: -! H_Tspr [W m-2] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(INOUT) :: H_Sspr,H_Rspr,H_Lspr -REAL,INTENT(IN) :: zR,p_0,gammaWB,y0,t_0,rho_a,Dv_a,xs,delspr,z0t,z0q,L,th_0,& - q_0,G_S,G_L,H_S0pr,H_L0pr,gamma_S,gamma_L,Lv,cp_a,rho_sw,nu,Phi_s,Mw,& - Ms,cp_sw,g -REAL,DIMENSION(25),INTENT(IN) :: r0,delta_r0,zT,tauf,tauT,Fp,dmdr0 -REAL,INTENT(OUT) :: H_Tspr - -INTEGER :: i -REAL :: H_S0,H_L0,p_zR,t_zR,q_zR,qsat0_zR,betaWB_zR,s_zR -REAL,DIMENSION(25) :: p_zT,t_zT,q_zT,qsat0_zT,betaWB_zT,s_zT,wetdep_zT,tWB_zT,& - tdropf,tauR,req,rf,stabIntH_z0tPzT,stabIntH_z0qPzT,stabIntSprayH_z0tPzT,& - stabIntSprayH_z0qPzT - -! 1. Calculate surface heat fluxes (interfacial with feedback) using previous values of spray heat fluxes. -! If spray heat fluxes are zero, this gives the no-spray interfacial fluxes. -H_S0 = H_S0pr - (1. - gamma_S)*(H_Sspr - H_Rspr) ! Surface SHF (interfacial with feedback) [W m-2] -H_L0 = H_L0pr - (1. - gamma_L)*H_Lspr ! Surface LHF (interfacial with feedback) [W m-2] - -! 2. Get thermodynamic parameters for calculating H_Tspr -DO i = 1,25 - stabIntH_z0tPzT(i) = stabIntH((z0t+zT(i))/L) - stabIntH_z0qPzT(i) = stabIntH((z0q+zT(i))/L) - stabIntSprayH_z0tPzT(i) = stabIntSprayH((z0t+zT(i))/L) - stabIntSprayH_z0qPzT(i) = stabIntSprayH((z0q+zT(i))/L) -END DO -p_zT = p_0 - rho_a*g*zT ! Pressure at zT [Pa] -t_zT = (th_0 - 1./G_S*(H_S0*(LOG((z0t+zT)/z0t) - stabIntH_z0tPzT) & - + zT/delspr*(1. - stabIntSprayH_z0tPzT)*(H_Sspr - H_Rspr)))*(p_zT/1.e5)**0.286 ! Temp at zT [K] -q_zT = q_0 - 1./G_L*(H_L0*(LOG((z0q+zT)/z0q) - stabIntH_z0qPzT) & - + zT/delspr*(1. - stabIntSprayH_z0qPzT)*H_Lspr) ! Spec hum at zT [kg kg-1] -DO i = 1,25 - qsat0_zT(i) = qsat0(t_zT(i),p_zT(i)) ! Saturation specific humidity at zT [kg kg-1] - s_zT(i) = satratio(t_zT(i),p_zT(i),q_zT(i),0.99999) ! Saturation ratio at zT [-] -END DO -betaWB_zT = 1./(1. + Lv*gammaWB*(1. + y0)/cp_a*qsat0_zT) ! Wetbulb coefficient at zT [-] -wetdep_zT = (1. - s_zT/(1. + y0))*(1. - betaWB_zT)/gammaWB ! Wetbulb depression at zT [-] -tWB_zT = t_zT - wetdep_zT ! Wetbulb temperature at zT [K] -tdropf = tWB_zT + (t_0 - tWB_zT)*EXP(-tauf/tauT) ! Final droplet temperature [K] - -! 3. Get thermodynamic parameters for calculating H_Rspr -p_zR = p_0 - rho_a*g*zR ! Pressure at zR [Pa] -t_zR = (th_0 - 1./G_S*(H_S0*(LOG((z0t+zR)/z0t) - stabIntH((z0t+zR)/L)) & - + zR/delspr*(1. - stabIntSprayH((z0t+zR)/L))*(H_Sspr - H_Rspr)))*(p_zR/1.e5)**0.286 ! Temp at zR [K] -q_zR = q_0 - 1./G_L*(H_L0*(LOG((z0q+zR)/z0q) - stabIntH((z0q+zR)/L)) & - + zR/delspr*(1. - stabIntSprayH((z0q+zR)/L))*H_Lspr) ! Spec hum at zR [kg kg-1] -qsat0_zR = qsat0(t_zR,p_zR) ! Saturation specific humidity at zR [kg kg-1] -betaWB_zR = 1./(1. + Lv*gammaWB*(1. + y0)/cp_a*qsat0_zR) ! Wetbulb coefficient at zR [-] -s_zR = satratio(t_zR,p_zR,q_zR,0.99999) ! Saturation ratio at zR [-] -tauR = rho_sw*r0**2/(rho_a*Dv_a*Fp*qsat0_zR*betaWB_zR*ABS(1. + y0 - s_zR)) ! Char timescale for evap [s] -req = r0*(xs*(1. + nu*Phi_s*Mw/Ms/(1. - s_zR)))**0.33333 ! Equilibrium radius at zR [m] -rf = req + (r0 - req)*EXP(-tauf/tauR) ! Final droplet radius [m] -IF (ABS(1. + y0 - s_zR) < 1.e-3) THEN - rf = r0 ! Assume no change if s_zR ~ 1 + y0 -END IF - -! 4. Calculate updated spray heat fluxes using new thermodynamic parameters -H_Tspr = DOT_PRODUCT(cp_sw*(t_0 - tdropf)*dmdr0,delta_r0) ! Spray HF due to temp change [W m-2] -H_Sspr = DOT_PRODUCT(cp_sw*SIGN(MIN(ABS(t_0 - tdropf),ABS(t_0 - t_zT)),& - t_0 - tWB_zT)*dmdr0,delta_r0) ! Spray SHF [W m-2] -H_Rspr = DOT_PRODUCT(Lv*(1. - (rf/r0)**3)*dmdr0,delta_r0) ! Spray HF due to size change [W m-2] -H_Lspr = H_Rspr + H_Tspr - H_Sspr ! Spray LHF [W m-2] - -END SUBROUTINE update_HFs - -!=============================================================================== - -SUBROUTINE ssgf_BCF23(eps,swh,dcp,mss,ustar,z0,L,gf,r0,delta_r0,v_g,M_spr,dmdr0) - -!------------------------------------------------------------------------------- -! -! Subroutine to calculate seastate-dependent SSGF per BCF23. Note that the -! gustiness connected to the MO wind profile and the gust height used for spray -! generation are not related. -! -! Inputs: -! eps - wave energy dissipation flux [kg s-3] -! swh - significant wave height [m] -! dcp - dominant wave phase velocity [m s-1] -! mss - mean squared waveslope [-] -! ustar - local turbulence intensity [m s-1], including gustiness -! z0 - momentum roughness length [m] -! L - Obukhov stability length [m] -! gf - gust factor [-] -! r0 - SSGF radius vector [m] -! delta_r0 - SSGF bin width vector [m] -! v_g - droplet settling velocity vector [m s-1] -! Outputs: -! M_spr - total spray mass flux [kg m-2 s-1] -! dmdr0 - mass spectrum of ejected droplets [kg m-2 s-1 m-1] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: eps,swh,dcp,mss,ustar,z0,L,gf -REAL,DIMENSION(25),INTENT(IN) :: r0,delta_r0,v_g -REAL,INTENT(OUT) :: M_spr -REAL,DIMENSION(25),INTENT(OUT) :: dmdr0 - -REAL,PARAMETER :: fs = 2.2 ! Model coefficient scaling SSGF magnitude [-]. This is the traditional 'sourcestrength'. -REAL,PARAMETER :: C1 = 1.35 ! Additional model coefficient scaling SSGF magnitude [-] -REAL,PARAMETER :: C2 = 0.1116 ! Model coefficient inside exponential [-] -REAL,PARAMETER :: C3 = 0.719 ! Model coefficient on mss [-] -REAL,PARAMETER :: C4 = 2.17 ! Model coefficient on sigma_h [-] -REAL,PARAMETER :: C5 = 0.852 ! Model coefficient in erf [-] -REAL,PARAMETER :: Ceps = 100. ! Nondimensional mean volumetric dissipation [-], from Sutherland and Melville (2015) -REAL,PARAMETER :: Cbr = 0.8 ! Scale factor on dcp to determine breaking wave crest speed [-], from Banner et al. (2014) -REAL,PARAMETER :: alpha_k = 1.5 ! Kolmogorov constant [-] -REAL,PARAMETER :: kappa = 0.4 ! von Karman constant [-] -REAL,PARAMETER :: rho_sw = 1030. ! Density of seawater [kg m-3] -REAL,PARAMETER :: nu_w = 0.90e-6 ! Kinematic viscosity of water [m2 s-1] -REAL,PARAMETER :: sigma_surf = 7.4e-5 ! Ratio of surface tension to water density [m3 s-2] -REAL,PARAMETER :: PI = 3.14159 - -REAL :: Wa,eps_KV_mean,eps_KV,eta_k,h_gust,U_h,U_10,U_crest,sigma_h -REAL,DIMENSION(25) :: dmdr0_form,ejecprob - -! Background calculations -Wa = whitecapActive_DLM17(dcp,ustar/SQRT(gf),swh) ! Actively breaking whitecap fraction [-] -eps_KV_mean = Ceps*eps/swh/rho_sw ! Mean volumetric kinematic dissipation at surface [m2 s-3], per Sutherland and Melville 2015 -eps_KV = eps_KV_mean/Wa ! Volumetric kinematic dissipation at surface under actively breaking whitecaps [m2 s-3] -eta_k = (nu_w**3/eps_KV)**0.25 ! Kolmogorov microscale [m] -h_gust = 200.*z0 ! Gust height [m] -U_h = ustar/kappa/gf*(LOG(h_gust/z0) - stabIntM(h_gust/L)) ! Windspeed at gust height [m s-1], gustiness removed -U_10 = ustar/kappa/gf*(LOG(10./z0) - stabIntM(10./L)) ! 10-m windspeed [m s-1], gustiness removed -U_crest = Cbr*dcp ! Speed of crest of breaking wave [m s-1] -sigma_h = C4*U_10 ! Standard deviation of windspeed at h_gust [m s-1] - -! Calculate SSGF -dmdr0_form = (fs*C1*rho_sw*eps_KV*r0*Wa)/(3.*sigma_surf)*EXP(-1.5*alpha_k*C2*(PI*eta_k/r0)**1.33333) ! Formation spectrum [kg m-2 s-1 m-1] -ejecprob = 0.5*(1. + ERF((U_h - U_crest - v_g/C3/mss)/sigma_h - C5)) ! Droplet ejection probability [-] -dmdr0 = dmdr0_form*ejecprob ! Ejected droplet spectrum [kg m-2 s-1 m-1] - -! Calculate total spray mass flux -M_spr = DOT_PRODUCT(dmdr0,delta_r0) ! [kg m-2 s-1] - -END SUBROUTINE ssgf_BCF23 - -!=============================================================================== - -SUBROUTINE ssgf_F94(U_10,Wform,r0,delta_r0,M_spr,dmdr0) - -!------------------------------------------------------------------------------- -! -! Subroutine to calculate wind-dependent Fairall et al. (1994) SSGF. Universal -! droplet size distribution implemented per Mueller and Veron (2014), and -! whitecap fraction can be per either Monahan and O'Muircheartaigh (1980) or -! BCF23. -! -! Inputs: -! U_10 - 10-m windspeed [m s-1] -! Wform - string naming which whitecap fraction to use. Options are: -! 'MOM80': original F94 wind-based whitecap fraction per Monahan and -! O'Muircheartaigh (1980). -! 'BCF23': updated wind-based whitcap fraction per BCF23 Eq. A2. -! r0 - SSGF radius vector [m] -! delta_r0 - SSGF bin width vector [m] -! Outputs: -! M_spr - total spray mass flux [kg m-2 s-1] -! dmdr0 - mass spectrum of ejected droplets [kg m-2 s-1 m-1] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: U_10 -CHARACTER(LEN=100),INTENT(IN) :: Wform -REAL,DIMENSION(25),INTENT(IN) :: r0,delta_r0 -REAL,INTENT(OUT) :: M_spr -REAL,DIMENSION(25),INTENT(OUT) :: dmdr0 - -REAL,PARAMETER :: rho_w = 1030. ! Density of seawater [kg m-3] -REAL,PARAMETER :: PI = 3.14159 -! Coefficients for A92 source function at 11 m/s, based on r80 -REAL,PARAMETER :: B0 = 4.405 -REAL,PARAMETER :: B1 = -2.646 -REAL,PARAMETER :: B2 = -3.156 -REAL,PARAMETER :: B3 = 8.902 -REAL,PARAMETER :: B4 = -4.482 -REAL,PARAMETER :: C1 = 1.02e4 -REAL,PARAMETER :: C2 = 6.95e6 -REAL,PARAMETER :: C3 = 1.75e17 - -INTEGER :: i -REAL :: WC_A92_11ms,WC,fs -REAL,DIMENSION(25) :: r0_micrometers,r80,dFdr80,dFdr0_11ms,dFdr0_perWC,& - dVdr0_perWC - -r0_micrometers = r0*1.e6 ! [um] -r80 = 0.518*r0_micrometers**0.976 ! Equilibrium radius at 80% RH [um], per Fitzgerald (1975) - -! Define the A92 number source function at 11 m s-1, based on r80 [m-2 s-1 um-1] -DO i = 1,25 - IF (r80(i) < 0.8) THEN - dFdr80(i) = 0. - ELSE IF ((r80(i) >= 0.8) .AND. (r80(i) < 15.)) THEN - dFdr80(i) = 10.**(B0 + B1*LOG10(r80(i)) & - + B2*LOG10(r80(i))**2 & - + B3*LOG10(r80(i))**3 & - + B4*LOG10(r80(i))**4) - ELSE IF ((r80(i) >= 15.) .AND. (r80(i) < 37.5)) THEN - dFdr80(i) = C1*r80(i)**(-1) - ELSE IF ((r80(i) >= 37.5) .AND. (r80(i) < 100.)) THEN - dFdr80(i) = C2*r80(i)**(-2.8) - ELSE IF ((r80(i) >= 100.) .AND. (r80(i) < 250.)) THEN - dFdr80(i) = C3*r80(i)**(-8) - ELSE IF (r80(i) >= 250.) THEN - dFdr80(i) = 0. - END IF -END DO - -! Convert to mass SSGF using the selected whitecap fraction. -! dFdr0_11ms used to have a bug where r0 was mistakenly used instead of r0_micrometers -- BWB 240612 -dFdr0_11ms = dFdr80*0.506*r0_micrometers**(-0.024) ! A92 source function at 11 m/s, based on r0 [m-2 s-1 um-1] -IF (Wform == 'MOM80') THEN - WC_A92_11ms = whitecap_MOM80(11.) ! Whitecap fraction of A92 source function at 11 m/s [-] - WC = whitecap_MOM80(U_10) ! Whitecap fraction at input U_10 [-] - fs = 0.56 ! SSGF scaling factor [-]. 0.56 used instead of 0.4 to correct earlier bug in dFdr0_11ms. -ELSE IF (Wform == 'BCF23') THEN - WC_A92_11ms = whitecap_BCF23wind(11.) ! Whitecap fraction of A92 source function at 11 m/s [-] - WC = whitecap_BCF23wind(U_10) ! Whitecap fraction at input U_10 [-] - fs = 3.1 ! SSGF scaling factor [-]. 3.1 used instead of 2.2 to correct earlier bug in dFdr0_11ms. -END IF -dFdr0_perWC = dFdr0_11ms/WC_A92_11ms*1.e6 ! F94 number source function per unit whitecap area [m-2 s-1 m-1] -dVdr0_perWC = dFdr0_perWC*1.33333*PI*r0**3 ! F94 volume source function per unit whitecap area [m3 m-2 s-1 m-1] -dmdr0 = fs*rho_w*dVdr0_perWC*WC ! F94 mass source function [kg m-2 s-1 m-1] - -! Calculate total spray mass flux -M_spr = DOT_PRODUCT(dmdr0,delta_r0) ! [kg m-2 s-1] - -END SUBROUTINE ssgf_F94 - -!=============================================================================== - -FUNCTION qsat0(t,p) RESULT(q_sat0) - -!------------------------------------------------------------------------------- -! -! Function to calculate saturation specific humidity over a plane surface of -! pure water, with saturation vapor pressure per Buck (1981). -! -! Inputs: -! t - temperature [K] -! p - pressure [Pa] -! Outputs: -! q_sat0 - saturation specific humidity over a plane surface of -! pure water [kg kg-1] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: t,p -REAL :: e_sat0,q_sat0 - -e_sat0 = 6.1121*EXP(17.502*(t - 273.15)/(t - 273.15 + 240.97))*(1.0007 + 3.46e-8*p)*1.e2 ! Sat vap press [Pa] -q_sat0 = e_sat0*0.622/(p - 0.378*e_sat0) ! Saturation specific humidity [kg kg-1] - -END FUNCTION - -!=============================================================================== - -FUNCTION satratio(t,p,q,max_satratio) RESULT(s) - -!------------------------------------------------------------------------------- -! -! Function to calculate saturation ratio, using function qsat0() that defines -! e_sat0 per Buck (1981). We assume that s = q/qsat0, rather than w/wsat0 -! (i.e., we use specific humidity rather than mixing ratio), so that air with -! q = qsat0 will be exactly saturated. This is done for convenience and to ease -! interpretation. -! -! Inputs: -! t - temperature [K] -! p - pressure [Pa] -! q - specific humidity [kg kg-1] -! max_satratio - maximum allowable saturation ratio [-] -! Outputs: -! s - saturation ratio [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: t,p,q,max_satratio -REAL :: s - -s = MIN(q/qsat0(t,p),max_satratio) ! Saturation ratio [-] - -END FUNCTION - -!=============================================================================== - -FUNCTION stabIntM(zeta) RESULT(psiM) - -!------------------------------------------------------------------------------- -! -! Function to calculate the integrated stability function for momentum, -! evaluated at zeta. Implemented per COARE 3.6 Matlab code. -! -! Inputs: -! zeta - stability parameter [-] -! Outputs: -! psiM - integrated stability function at zeta [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: zeta -REAL :: psiM,Xk,psik,Xc,psic,f,am,bm,BBm,X - -IF (zeta == 0.) THEN ! Neutral - psiM = 0. -ELSE IF (zeta < 0.) THEN ! Unstable - Xk = (1. - 16.*zeta)**0.25 ! For small negative zeta - psik = 2.*LOG((1. + Xk)/2.) + LOG((1. + Xk**2)/2.) - 2.*ATAN(Xk) + 2.*ATAN(1.) - Xc = (1. - 10.15*zeta)**0.33333 ! For large negative zeta - psic = 1.5*LOG((1. + Xc + Xc**2)/3.) - SQRT(3.)*ATAN((1. + 2.*Xc)/SQRT(3.)) + 4.*ATAN(1.)/SQRT(3.) - f = zeta**2/(1. + zeta**2) - psiM = (1. - f)*psik + f*psic -ELSE IF (zeta > 0.) THEN ! Stable (Grachev 2007, Eq. 12) - am = 5. - bm = am/6.5 - BBm = ((1.-bm)/bm)**0.33333 - X = (1. + zeta)**0.33333 - psiM = -(3.*am/bm)*(X-1.) + ((am*BBm)/(2.*bm))*(2.*LOG((BBm+X)/(BBm+1.)) - & - LOG((BBm**2-BBm*X+X**2)/(BBm**2-BBm+1.)) + 2.*SQRT(3.)*ATAN((2.*X-BBm)/(BBm*SQRT(3.))) - & - 2.*SQRT(3.)*ATAN((2.-BBm)/(BBm*SQRT(3.)))) -END IF - -END FUNCTION - -!=============================================================================== - -FUNCTION stabIntH(zeta) RESULT(psiH) - -!------------------------------------------------------------------------------- -! -! Function to calculate the integrated stability function for heat, evaluated at -! zeta. Implemented per COARE 3.6 Matlab code. -! -! Inputs: -! zeta - stability parameter [-] -! Outputs: -! psiH - integrated stability function at zeta [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: zeta -REAL :: psiH,Yk,psik,Yc,psic,f,a,b,c,BB - -IF (zeta == 0.) THEN ! Neutral - psiH = 0. -ELSE IF (zeta < 0.) THEN ! Unstable - Yk = (1. - 16.*zeta)**0.5 ! For small negative zeta - psik = 2.*LOG((1. + Yk)/2.) - Yc = (1. - 34.15*zeta)**0.33333 ! For large negative zeta - psic = 1.5*LOG((1. + Yc + Yc**2)/3.) - SQRT(3.)*ATAN((1. + 2.*Yc)/SQRT(3.)) + 4.*ATAN(1.)/SQRT(3.) - f = zeta**2/(1. + zeta**2) - psiH = (1. - f)*psik + f*psic -ELSE IF (zeta > 0.) THEN ! Stable (Grachev 2007, Eq. 13) - a = 5. - b = 5. - c = 3. - BB = SQRT(c**2 - 4.) - psiH = -(b/2.)*LOG(1.+c*zeta+zeta**2) + \ - (((b*c)/(2.*BB))-(a/BB))*(LOG((2.*zeta+c-BB)/(2.*zeta+c+BB))-LOG((c-BB)/(c+BB))) -END IF - -END FUNCTION - -!=============================================================================== - -FUNCTION stabIntSprayH(zeta) RESULT(phisprH) - -!------------------------------------------------------------------------------- -! -! Function to calculate the integrated stability function for heat within the -! spray layer, evaluated at zeta. Implemented per BCF23, using the classical -! values for the stability functions (gamma = 16, beta = 5, e.g., Dyer 1974). -! -! Inputs: -! zeta - stability parameter [-] -! Outputs: -! phisprH - integrated stability function within spray layer at zeta [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: zeta -REAL :: phisprH,Y - -IF (zeta == 0.) THEN ! Neutral - phisprH = 0. -ELSE IF (zeta > 0.) THEN ! Stable - phisprH = -2.5*zeta -ELSE IF (zeta < 0.) THEN ! Unstable - Y = (1. - 16.*zeta)**0.5 - phisprH = -(Y - 1.)**2/16./zeta -END IF - -END FUNCTION - -!=============================================================================== - -FUNCTION whitecapActive_DLM17(dcp,ustar,swh) RESULT(Wa) - -!------------------------------------------------------------------------------- -! -! Function to calculate active breaking whitecap fraction per Deike, Lenain, and -! Melville (2017). This is a parameterization based on volume of entrained air. -! -! Inputs: -! dcp - dominant phase speed [m s-1] -! ustar - bulk friction velocity [m s-1] -! swh - significant wave height [m] -! Outputs: -! Wa - actively breaking whitecap fraction [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: dcp,ustar,swh -REAL,PARAMETER :: g = 9.81 ! Acceleration due to gravity [m s-2] -REAL :: Wa - -Wa = MIN(0.018*dcp*ustar**2/g/swh,1.0) - -END FUNCTION - -!=============================================================================== - -FUNCTION whitecap_MOM80(U_10) RESULT(W) - -!------------------------------------------------------------------------------- -! -! Function to calculate whitecap fraction per Monahan and O'Muircheartaigh -! (1980). -! -! Inputs: -! U_10 - 10-m windspeed [m s-1] -! Outputs: -! W - whitecap fraction [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: U_10 -REAL :: W - -W = MIN(3.8e-6*U_10**3.4,1.0) - -END FUNCTION - -!=============================================================================== - -FUNCTION whitecap_BCF23wind(U_10) RESULT(W) - -!------------------------------------------------------------------------------- -! -! Function to calculate wind-based whitecap fraction given as BCF23 Eq A2. -! -! Inputs: -! U_10 - 10-m windspeed [m s-1] -! Outputs: -! W - whitecap fraction [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: U_10 -REAL :: W - -W = MIN(6.5e-4*MAX(U_10 - 2.,0.)**1.5,1.0) - -END FUNCTION - -!=============================================================================== - -SUBROUTINE waveProps(U_10,ustarb,rho_a,eps,dcp,swh,mss) - -!------------------------------------------------------------------------------- -! -! This is a temporary hack to roughly estimate wave properties based on -! atmospheric variables. It will be replaced by directly parameterizing the -! seastate-based SSGF from winds. -! -! Inputs: -! U_10 - 10-m windspeed [m s-1] -! ustarb - bulk friction velocity [m s-1] -! rho_a - air density [kg m-3] -! Outputs: -! eps - wave energy dissipation flux [W m-2] -! dcp - dominant wave phase speed [m s-1] -! swh - significant wave height [m] -! mss - mean squared waveslope [-] -! -!------------------------------------------------------------------------------- - -REAL,INTENT(IN) :: U_10,ustarb,rho_a -REAL,INTENT(INOUT) :: eps,dcp,swh,mss -REAL,PARAMETER :: g = 9.81 ! Acceleration due to gravity [m s-2] -REAL,PARAMETER :: fudge1 = 0.2 ! Fudge factor on eps -REAL,PARAMETER :: fudge2 = 0.7 ! Fudge factor on mss -REAL,PARAMETER :: PI = 3.14159 -REAL :: swh_W17,swh_tail - -! 1. Significant wave height -- Wang et al. (2017) with hacked tail -swh_W17 = 0.0143*U_10**2 + 0.9626 ! swh per Wang et al. 2017 [m] -swh_tail = 7. + 0.14*U_10 ! Hacked linear tail [m] -swh = (1. - 0.5*(TANH((U_10 - 27.)/7.) + 1.))*swh_W17 & - + (0.5*(TANH((U_10 - 29.)/7.) + 1.))*swh_tail ! Smooth merge between two params - -! 2. Dominant phase speed -- Wang et al. (2017) -dcp = (g*swh/(0.0628*(2.*PI)**1.5*ustarb**0.5))**0.666667 ! [m s-1] - -! 3. Wave energy dissipation flux -- Terray et al. (1996) with fudge factor -eps = rho_a*ustarb**2*0.5*dcp*fudge1 ! [W m-2], factor of 0.5 from T96 Fig 6 - -! 4. Mean squared waveslope -- Davis et al. (2023) with fudge factor -mss = 0.109*TANH(0.057*U_10)*fudge2 ! [-] - -END SUBROUTINE waveProps - -!=============================================================================== - -FUNCTION fall_velocity_PK97(r) RESULT(v_fall) - -!------------------------------------------------------------------------------- -! -! Function to calculate terminal fall velocity of spherical droplets, based on -! Pruppacher and Klett (1997) section 10.3.6. -! -! Inputs: -! r - droplet radius [m] -! Outputs: -! v_fall - terminal settling velocity [m s-1] -! -!------------------------------------------------------------------------------- - -REAL,DIMENSION(25),INTENT(IN) :: r -REAL,DIMENSION(25) :: v_fall -REAL,PARAMETER :: nu_a = 1.5e-5 ! Kinematic viscosity of air [m2 s-1] -REAL,PARAMETER :: rho_a = 1.25 ! Density of air [kg m-3] -REAL,PARAMETER :: rho_w = 1030. ! Density of seawater [kg m-3] -REAL,PARAMETER :: g = 9.81 ! Acceleration due to gravity [m s-2] -REAL,PARAMETER :: sigma_aw = 7.4e-2 ! Surface tension of air-water interface [N m-1] -REAL,PARAMETER :: lamda_a0 = 6.6e-8 ! Mean free path at 1013.25 mb, 293.15 K [m] -REAL,DIMENSION(7) :: B1 = (/ -0.318657e1, 0.992696, -0.153193e-2, -0.987059e-3, & - -0.578878e-3, 0.855176e-4, -0.327815e-5 /) ! Polynomial coeffs for 10 <= r <= 535 um [-] -REAL,DIMENSION(6) :: B2 = (/ -0.500015e1, 0.523778e1, -0.204914e1, 0.475294, & - -0.542819e-1, 0.238449e-2 /) ! Polynomial coefficients for r > 535 um [-] -INTEGER :: i -REAL :: v_stokes,f_slip,CdNRe2,X,Y,NRe,NBo,NP,NBoNP16 - -DO i = 1,25 - IF (r(i) < 10.e-6) THEN ! For r < 10 micrometers - v_stokes = 2.*r(i)**2*g*(rho_w - rho_a)/9./(rho_a*nu_a) ! Stokes velocity [m s-1] - f_slip = 1. + 1.26*lamda_a0/r(i) ! Slip flow Cunningham correction factor [-] - v_fall(i) = f_slip*v_stokes ! Settling velocity [m s-1] - ELSE IF ((r(i) >= 10.e-6) .AND. (r(i) <= 535.e-6)) THEN ! For r from 10 to 535 micrometers - CdNRe2 = 32.*r(i)**3*(rho_w - rho_a)/rho_a/nu_a**2*g/3. ! Product of Cd and Re**2 [-] - X = LOG(CdNRe2) ! X in polynomial curve fit [-] - Y = B1(1) + B1(2)*X + B1(3)*X**2 + B1(4)*X**3 + B1(5)*X**4 + & - B1(6)*X**5 + B1(7)*X**6 ! Y in polynomial curve fit [-] - NRe = EXP(Y) ! Reynolds number [-] - v_fall(i) = nu_a*NRe/2./r(i) ! Settling velocity [m s-1] - ELSE IF (r(i) > 535.e-6) THEN ! For r > 535 micrometers - NBo = g*(rho_w - rho_a)*r(i)**2/sigma_aw ! Bond number [-] - NP = sigma_aw**3/rho_a**2/nu_a**4/g/(rho_w - rho_a) ! Physical property number [-] - NBoNP16 = NBo*NP**0.16666 ! Product of Bond number and physical property number to the 1/6 power [-] - X = LOG(16./3.*NBoNP16) ! X in polynomial curve fit [-] - Y = B2(1) + B2(2)*X + B2(3)*X**2 + B2(4)*X**3 + B2(5)*X**4 + & - B2(6)*X**5 ! Y in polynomial curve fit [-] - NRe = NP**0.16666*EXP(Y) ! Reynolds number [-] - v_fall(i) = nu_a*NRe/2./r(i) ! Settling velocity [m s-1] - END IF -END DO - -END FUNCTION - -!=============================================================================== - -END MODULE module_sprayHFs diff --git a/src/core_atmosphere/physics/physics_mmm/mp_radar.F b/src/core_atmosphere/physics/physics_mmm/mp_radar.F deleted file mode 100644 index 08199da7d..000000000 --- a/src/core_atmosphere/physics/physics_mmm/mp_radar.F +++ /dev/null @@ -1,677 +0,0 @@ -!================================================================================================================= - module mp_radar - use ccpp_kinds,only: kind_phys - - implicit none - private - public:: radar_init, & - rayleigh_soak_wetgraupel - -!+---+-----------------------------------------------------------------+ -!..This set of routines facilitates computing radar reflectivity. -!.. This module is more library code whereas the individual microphysics -!.. schemes contains specific details needed for the final computation, -!.. so refer to location within each schemes calling the routine named -!.. rayleigh_soak_wetgraupel. -!.. The bulk of this code originated from Ulrich Blahak (Germany) and -!.. was adapted to WRF by G. Thompson. This version of code is only -!.. intended for use when Rayleigh scattering principles dominate and -!.. is not intended for wavelengths in which Mie scattering is a -!.. significant portion. Therefore, it is well-suited to use with -!.. 5 or 10 cm wavelength like USA NEXRAD radars. -!.. This code makes some rather simple assumptions about water -!.. coating on outside of frozen species (snow/graupel). Fraction of -!.. meltwater is simply the ratio of mixing ratio below melting level -!.. divided by mixing ratio at level just above highest T>0C. Also, -!.. immediately 90% of the melted water exists on the ice's surface -!.. and 10% is embedded within ice. No water is "shed" at all in these -!.. assumptions. The code is quite slow because it does the reflectivity -!.. calculations based on 50 individual size bins of the distributions. -!+---+-----------------------------------------------------------------+ - - integer, parameter, private :: R4KIND = selected_real_kind(6) - integer, parameter, private :: R8KIND = selected_real_kind(12) - - integer,parameter,public:: nrbins = 50 - integer,parameter,public:: slen = 20 - character(len=slen), public:: & - mixingrulestring_s, matrixstring_s, inclusionstring_s, & - hoststring_s, hostmatrixstring_s, hostinclusionstring_s, & - mixingrulestring_g, matrixstring_g, inclusionstring_g, & - hoststring_g, hostmatrixstring_g, hostinclusionstring_g - - complex(kind=R8KIND),public:: m_w_0, m_i_0 - - double precision,dimension(nrbins+1),public:: xxdx - double precision,dimension(nrbins),public:: xxds,xdts,xxdg,xdtg - double precision,parameter,public:: lamda_radar = 0.10 ! in meters - double precision,public:: k_w,pi5,lamda4 - - double precision, dimension(nrbins+1), public:: simpson - double precision, dimension(3), parameter, public:: basis = & - (/1.d0/3.d0, 4.d0/3.d0, 1.d0/3.d0/) - - real(kind=kind_phys),public,dimension(4):: xcre,xcse,xcge,xcrg,xcsg,xcgg - real(kind=kind_phys),public:: xam_r,xbm_r,xmu_r,xobmr - real(kind=kind_phys),public:: xam_s,xbm_s,xmu_s,xoams,xobms,xocms - real(kind=kind_phys),public:: xam_g,xbm_g,xmu_g,xoamg,xobmg,xocmg - real(kind=kind_phys),public:: xorg2,xosg2,xogg2 - - -!..Single melting snow/graupel particle 90% meltwater on external sfc - character(len=256):: radar_debug - - double precision,parameter,public:: melt_outside_s = 0.9d0 - double precision,parameter,public:: melt_outside_g = 0.9d0 - - - contains - - -!================================================================================================================= - subroutine radar_init - implicit none -!================================================================================================================= - - integer:: n - -!----------------------------------------------------------------------------------------------------------------- - - pi5 = 3.14159*3.14159*3.14159*3.14159*3.14159 - lamda4 = lamda_radar*lamda_radar*lamda_radar*lamda_radar - m_w_0 = m_complex_water_ray (lamda_radar, 0.0d0) - m_i_0 = m_complex_ice_maetzler (lamda_radar, 0.0d0) - k_w = (abs( (m_w_0*m_w_0 - 1.0) /(m_w_0*m_w_0 + 2.0) ))**2 - - do n = 1, nrbins+1 - simpson(n) = 0.0d0 - enddo - do n = 1, nrbins-1, 2 - simpson(n) = simpson(n) + basis(1) - simpson(n+1) = simpson(n+1) + basis(2) - simpson(n+2) = simpson(n+2) + basis(3) - enddo - - do n = 1, slen - mixingrulestring_s(n:n) = char(0) - matrixstring_s(n:n) = char(0) - inclusionstring_s(n:n) = char(0) - hoststring_s(n:n) = char(0) - hostmatrixstring_s(n:n) = char(0) - hostinclusionstring_s(n:n) = char(0) - mixingrulestring_g(n:n) = char(0) - matrixstring_g(n:n) = char(0) - inclusionstring_g(n:n) = char(0) - hoststring_g(n:n) = char(0) - hostmatrixstring_g(n:n) = char(0) - hostinclusionstring_g(n:n) = char(0) - enddo - - mixingrulestring_s = 'maxwellgarnett' - hoststring_s = 'air' - matrixstring_s = 'water' - inclusionstring_s = 'spheroidal' - hostmatrixstring_s = 'icewater' - hostinclusionstring_s = 'spheroidal' - - mixingrulestring_g = 'maxwellgarnett' - hoststring_g = 'air' - matrixstring_g = 'water' - inclusionstring_g = 'spheroidal' - hostmatrixstring_g = 'icewater' - hostinclusionstring_g = 'spheroidal' - -!..Create bins of snow (from 100 microns up to 2 cm). - xxdx(1) = 100.d-6 - xxdx(nrbins+1) = 0.02d0 - do n = 2, nrbins - xxdx(n) = dexp(real(n-1,kind=R8KIND)/real(nrbins,kind=R8KIND) & - * dlog(xxdx(nrbins+1)/xxdx(1)) +dlog(xxdx(1))) - enddo - do n = 1, nrbins - xxds(n) = dsqrt(xxdx(n)*xxdx(n+1)) - xdts(n) = xxdx(n+1) - xxdx(n) - enddo - -!..create bins of graupel (from 100 microns up to 5 cm). - xxdx(1) = 100.d-6 - xxdx(nrbins+1) = 0.05d0 - do n = 2, nrbins - xxdx(n) = dexp(real(n-1,kind=R8KIND)/real(nrbins,kind=R8KIND) & - * dlog(xxdx(nrbins+1)/xxdx(1)) +dlog(xxdx(1))) - enddo - do n = 1, nrbins - xxdg(n) = dsqrt(xxdx(n)*xxdx(n+1)) - xdtg(n) = xxdx(n+1) - xxdx(n) - enddo - - -!.. The calling program must set the m(D) relations and gamma shape -!.. parameter mu for rain, snow, and graupel. Easily add other types -!.. based on the template here. For majority of schemes with simpler -!.. exponential number distribution, mu=0. - - xcre(1) = 1. + xbm_r - xcre(2) = 1. + xmu_r - xcre(3) = 4. + xmu_r - xcre(4) = 7. + xmu_r - do n = 1, 4 - xcrg(n) = wgamma(xcre(n)) - enddo - xorg2 = 1./xcrg(2) - - xcse(1) = 1. + xbm_s - xcse(2) = 1. + xmu_s - xcse(3) = 4. + xmu_s - xcse(4) = 7. + xmu_s - do n = 1, 4 - xcsg(n) = wgamma(xcse(n)) - enddo - xosg2 = 1./xcsg(2) - - xcge(1) = 1. + xbm_g - xcge(2) = 1. + xmu_g - xcge(3) = 4. + xmu_g - xcge(4) = 7. + xmu_g - do n = 1, 4 - xcgg(n) = wgamma(xcge(n)) - enddo - xogg2 = 1./xcgg(2) - - xobmr = 1./xbm_r - xoams = 1./xam_s - xobms = 1./xbm_s - xocms = xoams**xobms - xoamg = 1./xam_g - xobmg = 1./xbm_g - xocmg = xoamg**xobmg - - end subroutine radar_init - -!================================================================================================================= - subroutine rayleigh_soak_wetgraupel(x_g,a_geo,b_geo,fmelt,meltratio_outside,m_w,m_i,lambda,c_back, & - mixingrule,matrix,inclusion,host,hostmatrix,hostinclusion) - implicit none -!================================================================================================================= - -!--- input arguments: - character(len=*), intent(in):: mixingrule, matrix, inclusion, & - host, hostmatrix, hostinclusion - - complex(kind=R8KIND),intent(in):: m_w, m_i - - double precision, intent(in):: x_g, a_geo, b_geo, fmelt, lambda, meltratio_outside - -!--- output arguments: - double precision,intent(out):: c_back - -!--- local variables: - integer:: error - - complex(kind=R8KIND):: m_core, m_air - - double precision, parameter:: pix=3.1415926535897932384626434d0 - double precision:: d_large, d_g, rhog, x_w, xw_a, fm, fmgrenz, & - volg, vg, volair, volice, volwater, & - meltratio_outside_grenz, mra - -!----------------------------------------------------------------------------------------------------------------- - -!refractive index of air: - m_air = (1.0d0,0.0d0) - -!Limiting the degree of melting --- for safety: - fm = dmax1(dmin1(fmelt, 1.0d0), 0.0d0) -!Limiting the ratio of (melting on outside)/(melting on inside): - mra = dmax1(dmin1(meltratio_outside, 1.0d0), 0.0d0) - -!The relative portion of meltwater melting at outside should increase -!from the given input value (between 0 and 1) -!to 1 as the degree of melting approaches 1, -!so that the melting particle "converges" to a water drop. -!Simplest assumption is linear: - mra = mra + (1.0d0-mra)*fm - - x_w = x_g * fm - - d_g = a_geo * x_g**b_geo - - if(D_g .ge. 1d-12) then - - vg = PIx/6. * D_g**3 - rhog = DMAX1(DMIN1(x_g / vg, 900.0d0), 10.0d0) - vg = x_g / rhog - - meltratio_outside_grenz = 1.0d0 - rhog / 1000. - - if (mra .le. meltratio_outside_grenz) then - !..In this case, it cannot happen that, during melting, all the - !.. air inclusions within the ice particle get filled with - !.. meltwater. This only happens at the end of all melting. - volg = vg * (1.0d0 - mra * fm) - - else - !..In this case, at some melting degree fm, all the air - !.. inclusions get filled with meltwater. - fmgrenz=(900.0-rhog)/(mra*900.0-rhog+900.0*rhog/1000.) - - if (fm .le. fmgrenz) then - !.. not all air pockets are filled: - volg = (1.0 - mra * fm) * vg - else - !..all air pockets are filled with meltwater, now the - !.. entire ice sceleton melts homogeneously: - volg = (x_g - x_w) / 900.0 + x_w / 1000. - endif - - endif - - d_large = (6.0 / pix * volg) ** (1./3.) - volice = (x_g - x_w) / (volg * 900.0) - volwater = x_w / (1000. * volg) - volair = 1.0 - volice - volwater - - !..complex index of refraction for the ice-air-water mixture - !.. of the particle: - m_core = get_m_mix_nested (m_air, m_i, m_w, volair, volice, & - volwater, mixingrule, host, matrix, inclusion, & - hostmatrix, hostinclusion, error) - if (error .ne. 0) then - c_back = 0.0d0 - return - endif - - !..rayleigh-backscattering coefficient of melting particle: - c_back = (abs((m_core**2-1.0d0)/(m_core**2+2.0d0)))**2 & - * pi5 * d_large**6 / lamda4 - - else - c_back = 0.0d0 - endif - - end subroutine rayleigh_soak_wetgraupel - -!================================================================================================================= - real(kind=kind_phys) function wgamma(y) - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: y - -!----------------------------------------------------------------------------------------------------------------- - - wgamma = exp(gammln(y)) - - end function wgamma - -!================================================================================================================= - real(kind=kind_phys) function gammln(xx) - implicit none -!(C) Copr. 1986-92 Numerical Recipes Software 2.02 -!================================================================================================================= - -!--- inout arguments: - real(kind=kind_phys),intent(in):: xx - -!--- local variables: - integer:: j - - double precision,parameter:: stp = 2.5066282746310005d0 - double precision,dimension(6), parameter:: & - cof = (/76.18009172947146d0, -86.50532032941677d0, & - 24.01409824083091d0, -1.231739572450155d0, & - .1208650973866179d-2, -.5395239384953d-5/) - double precision:: ser,tmp,x,y - -!----------------------------------------------------------------------------------------------------------------- - -!--- returns the value ln(gamma(xx)) for xx > 0. - x = xx - y = x - tmp = x+5.5d0 - tmp = (x+0.5d0)*log(tmp)-tmp - ser = 1.000000000190015d0 - do j = 1,6 - y=y+1.d0 - ser=ser+cof(j)/y - enddo - - gammln=tmp+log(stp*ser/x) - - end function gammln - -!================================================================================================================= - complex(kind=R8KIND) function get_m_mix_nested (m_a, m_i, m_w, volair, & - volice, volwater, mixingrule, host, matrix, & - inclusion, hostmatrix, hostinclusion, cumulerror) - implicit none -!================================================================================================================= - -!--- input arguments: - character(len=*),intent(in):: mixingrule, host, matrix, & - inclusion, hostmatrix, hostinclusion - - complex(kind=R8KIND),intent(in):: m_a, m_i, m_w - - double precision,intent(in):: volice, volair, volwater - -!--- output arguments: - integer,intent(out):: cumulerror - -!--- local variables: - integer:: error - - complex(kind=R8KIND):: mtmp - - double precision:: vol1, vol2 - -!----------------------------------------------------------------------------------------------------------------- - -!..Folded: ( (m1 + m2) + m3), where m1,m2,m3 could each be air, ice, or water - cumulerror = 0 - get_m_mix_nested = cmplx(1.0d0,0.0d0) - - if (host .eq. 'air') then - if (matrix .eq. 'air') then - write(radar_debug,*) 'GET_M_MIX_NESTED: bad matrix: ', matrix -! call physics_message(radar_debug) - cumulerror = cumulerror + 1 - else - vol1 = volice / MAX(volice+volwater,1d-10) - vol2 = 1.0d0 - vol1 - mtmp = get_m_mix (m_a, m_i, m_w, 0.0d0, vol1, vol2, & - mixingrule, matrix, inclusion, error) - cumulerror = cumulerror + error - - if (hostmatrix .eq. 'air') then - get_m_mix_nested = get_m_mix (m_a, mtmp, 2.0*m_a, & - volair, (1.0d0-volair), 0.0d0, mixingrule, & - hostmatrix, hostinclusion, error) - cumulerror = cumulerror + error - elseif (hostmatrix .eq. 'icewater') then - get_m_mix_nested = get_m_mix (m_a, mtmp, 2.0*m_a, & - volair, (1.0d0-volair), 0.0d0, mixingrule, & - 'ice', hostinclusion, error) - cumulerror = cumulerror + error - else - write(radar_debug,*) 'GET_M_MIX_NESTED: bad hostmatrix: ', hostmatrix -! call physics_message(radar_debug) - cumulerror = cumulerror + 1 - endif - endif - - elseif (host .eq. 'ice') then - - if (matrix .eq. 'ice') then - write(radar_debug,*) 'GET_M_MIX_NESTED: bad matrix: ', matrix -! call physics_message(radar_debug) - cumulerror = cumulerror + 1 - else - vol1 = volair / MAX(volair+volwater,1d-10) - vol2 = 1.0d0 - vol1 - mtmp = get_m_mix (m_a, m_i, m_w, vol1, 0.0d0, vol2, & - mixingrule, matrix, inclusion, error) - cumulerror = cumulerror + error - - if (hostmatrix .eq. 'ice') then - get_m_mix_nested = get_m_mix (mtmp, m_i, 2.0*m_a, & - (1.0d0-volice), volice, 0.0d0, mixingrule, & - hostmatrix, hostinclusion, error) - cumulerror = cumulerror + error - elseif (hostmatrix .eq. 'airwater') then - get_m_mix_nested = get_m_mix (mtmp, m_i, 2.0*m_a, & - (1.0d0-volice), volice, 0.0d0, mixingrule, & - 'air', hostinclusion, error) - cumulerror = cumulerror + error - else - write(radar_debug,*) 'GET_M_MIX_NESTED: bad hostmatrix: ', hostmatrix -! call physics_message(radar_debug) - cumulerror = cumulerror + 1 - endif - endif - - elseif (host .eq. 'water') then - - if (matrix .eq. 'water') then - write(radar_debug,*) 'GET_M_MIX_NESTED: bad matrix: ', matrix -! call physics_message(radar_debug) - cumulerror = cumulerror + 1 - else - vol1 = volair / MAX(volice+volair,1d-10) - vol2 = 1.0d0 - vol1 - mtmp = get_m_mix (m_a, m_i, m_w, vol1, vol2, 0.0d0, & - mixingrule, matrix, inclusion, error) - cumulerror = cumulerror + error - - if (hostmatrix .eq. 'water') then - get_m_mix_nested = get_m_mix (2*m_a, mtmp, m_w, & - 0.0d0, (1.0d0-volwater), volwater, mixingrule, & - hostmatrix, hostinclusion, error) - cumulerror = cumulerror + error - elseif (hostmatrix .eq. 'airice') then - get_m_mix_nested = get_m_mix (2*m_a, mtmp, m_w, & - 0.0d0, (1.0d0-volwater), volwater, mixingrule, & - 'ice', hostinclusion, error) - cumulerror = cumulerror + error - else - write(radar_debug,*) 'GET_M_MIX_NESTED: bad hostmatrix: ', hostmatrix -! call physics_message(radar_debug) - cumulerror = cumulerror + 1 - endif - endif - - elseif (host .eq. 'none') then - - get_m_mix_nested = get_m_mix (m_a, m_i, m_w, & - volair, volice, volwater, mixingrule, & - matrix, inclusion, error) - cumulerror = cumulerror + error - - else - write(radar_debug,*) 'GET_M_MIX_NESTED: unknown matrix: ', host -! call physics_message(radar_debug) - cumulerror = cumulerror + 1 - endif - - if (cumulerror .ne. 0) then - write(radar_debug,*) 'get_m_mix_nested: error encountered' -! call physics_message(radar_debug) - get_m_mix_nested = cmplx(1.0d0,0.0d0) - endif - - end function get_m_mix_nested - -!================================================================================================================= - complex(kind=R8KIND) function get_m_mix (m_a, m_i, m_w, volair, volice, & - volwater, mixingrule, matrix, inclusion, & - error) - implicit none -!================================================================================================================= - -!--- input arguments: - character(len=*),intent(in):: mixingrule, matrix, inclusion - - complex(kind=R8KIND), intent(in):: m_a, m_i, m_w - - double precision, intent(in):: volice, volair, volwater - -!--- output arguments: - integer,intent(out):: error - -!----------------------------------------------------------------------------------------------------------------- - error = 0 - get_m_mix = cmplx(1.0d0,0.0d0) - - if (mixingrule .eq. 'maxwellgarnett') then - if (matrix .eq. 'ice') then - get_m_mix = m_complex_maxwellgarnett(volice, volair, volwater, & - m_i, m_a, m_w, inclusion, error) - elseif (matrix .eq. 'water') then - get_m_mix = m_complex_maxwellgarnett(volwater, volair, volice, & - m_w, m_a, m_i, inclusion, error) - elseif (matrix .eq. 'air') then - get_m_mix = m_complex_maxwellgarnett(volair, volwater, volice, & - m_a, m_w, m_i, inclusion, error) - else - write(radar_debug,*) 'GET_M_MIX: unknown matrix: ', matrix -! call physics_message(radar_debug) - error = 1 - endif - - else - write(radar_debug,*) 'GET_M_MIX: unknown mixingrule: ', mixingrule -! call physics_message(radar_debug) - error = 2 - endif - - if (error .ne. 0) then - write(radar_debug,*) 'GET_M_MIX: error encountered' -! call physics_message(radar_debug) - endif - - end function get_m_mix - -!================================================================================================================= - complex(kind=R8KIND) function m_complex_maxwellgarnett(vol1, vol2, vol3, & - m1, m2, m3, inclusion, error) - implicit none -!================================================================================================================= - -!--- input arguments: - character(len=*),intent(in):: inclusion - - complex(kind=R8KIND),intent(in):: m1,m2,m3 - - double precision,intent(in):: vol1,vol2,vol3 - - -!--- output arguments: - integer,intent(out):: error - -!--- local variables: - complex(kind=R8KIND) :: beta2, beta3, m1t, m2t, m3t - -!----------------------------------------------------------------------------------------------------------------- - - error = 0 - - if (dabs(vol1+vol2+vol3-1.0d0) .gt. 1d-6) then - write(radar_debug,*) 'M_COMPLEX_MAXWELLGARNETT: sum of the ', & - 'partial volume fractions is not 1...ERROR' -! call physics_message(radar_debug) - m_complex_maxwellgarnett = CMPLX(-999.99d0,-999.99d0) - error = 1 - return - endif - - m1t = m1**2 - m2t = m2**2 - m3t = m3**2 - - if (inclusion .eq. 'spherical') then - beta2 = 3.0d0*m1t/(m2t+2.0d0*m1t) - beta3 = 3.0d0*m1t/(m3t+2.0d0*m1t) - elseif (inclusion .eq. 'spheroidal') then - beta2 = 2.0d0*m1t/(m2t-m1t) * (m2t/(m2t-m1t)*LOG(m2t/m1t)-1.0d0) - beta3 = 2.0d0*m1t/(m3t-m1t) * (m3t/(m3t-m1t)*LOG(m3t/m1t)-1.0d0) - else - write(radar_debug,*) 'M_COMPLEX_MAXWELLGARNETT: ', 'unknown inclusion: ', inclusion -! call physics_message(radar_debug) - m_complex_maxwellgarnett=cmplx(-999.99d0,-999.99d0,kind=R8KIND) - error = 1 - return - endif - - m_complex_maxwellgarnett = sqrt(((1.0d0-vol2-vol3)*m1t + vol2*beta2*m2t + vol3*beta3*m3t) / & - (1.0d0-vol2-vol3+vol2*beta2+vol3*beta3)) - - end function m_complex_maxwellgarnett - -!================================================================================================================= - complex(kind=R8KIND) function m_complex_water_ray(lambda,t) - implicit none -!================================================================================================================= - -!complex refractive Index of Water as function of Temperature T -![deg C] and radar wavelength lambda [m]; valid for -!lambda in [0.001,1.0] m; T in [-10.0,30.0] deg C -!after Ray (1972) - -!--- input arguments: - double precision,intent(in):: t,lambda - -!--- local variables: - double precision,parameter:: pix=3.1415926535897932384626434d0 - double precision:: epsinf,epss,epsr,epsi - double precision:: alpha,lambdas,sigma,nenner - complex(kind=R8KIND),parameter:: i = (0d0,1d0) - -!----------------------------------------------------------------------------------------------------------------- - - epsinf = 5.27137d0 + 0.02164740d0 * T - 0.00131198d0 * T*T - epss = 78.54d+0 * (1.0 - 4.579d-3 * (T - 25.0) & - + 1.190d-5 * (T - 25.0)*(T - 25.0) & - - 2.800d-8 * (T - 25.0)*(T - 25.0)*(T - 25.0)) - alpha = -16.8129d0/(T+273.16) + 0.0609265d0 - lambdas = 0.00033836d0 * exp(2513.98d0/(T+273.16)) * 1e-2 - - nenner = 1.d0+2.d0*(lambdas/lambda)**(1d0-alpha)*sin(alpha*PIx*0.5) & - + (lambdas/lambda)**(2d0-2d0*alpha) - epsr = epsinf + ((epss-epsinf) * ((lambdas/lambda)**(1d0-alpha) & - * sin(alpha*PIx*0.5)+1d0)) / nenner - epsi = ((epss-epsinf) * ((lambdas/lambda)**(1d0-alpha) & - * cos(alpha*PIx*0.5)+0d0)) / nenner & - + lambda*1.25664/1.88496 - - m_complex_water_ray = sqrt(cmplx(epsr,-epsi)) - - end function m_complex_water_ray - -!================================================================================================================= - complex(kind=R8KIND) function m_complex_ice_maetzler(lambda,t) - implicit none -!================================================================================================================= - -!complex refractive index of ice as function of Temperature T -![deg C] and radar wavelength lambda [m]; valid for -!lambda in [0.0001,30] m; T in [-250.0,0.0] C -!Original comment from the Matlab-routine of Prof. Maetzler: -!Function for calculating the relative permittivity of pure ice in -!the microwave region, according to C. Maetzler, "Microwave -!properties of ice and snow", in B. Schmitt et al. (eds.) Solar -!System Ices, Astrophys. and Space Sci. Library, Vol. 227, Kluwer -!Academic Publishers, Dordrecht, pp. 241-257 (1998). Input: -!TK = temperature (K), range 20 to 273.15 -!f = frequency in GHz, range 0.01 to 3000 - -!--- input arguments: - double precision,intent(in):: t,lambda - -!--- local variables: - double precision:: f,c,tk,b1,b2,b,deltabeta,betam,beta,theta,alfa - -!----------------------------------------------------------------------------------------------------------------- - - c = 2.99d8 - tk = t + 273.16 - f = c / lambda * 1d-9 - - b1 = 0.0207 - b2 = 1.16d-11 - b = 335.0d0 - deltabeta = exp(-10.02 + 0.0364*(tk-273.16)) - betam = (b1/tk) * ( exp(b/tk) / ((exp(b/tk)-1)**2) ) + b2*f*f - beta = betam + deltabeta - theta = 300. / tk - 1. - alfa = (0.00504d0 + 0.0062d0*theta) * exp(-22.1d0*theta) - m_complex_ice_maetzler = 3.1884 + 9.1e-4*(tk-273.16) - m_complex_ice_maetzler = m_complex_ice_maetzler & - + cmplx(0.0d0, (alfa/f + beta*f)) - m_complex_ice_maetzler = sqrt(conjg(m_complex_ice_maetzler)) - - end function m_complex_ice_maetzler - -!================================================================================================================= - end module mp_radar -!================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_mmm/mp_wsm6.F b/src/core_atmosphere/physics/physics_mmm/mp_wsm6.F deleted file mode 100644 index ca345b3ba..000000000 --- a/src/core_atmosphere/physics/physics_mmm/mp_wsm6.F +++ /dev/null @@ -1,2441 +0,0 @@ -!================================================================================================================= - module mp_wsm6 - use ccpp_kinds,only: kind_phys - use module_libmassv,only: vrec,vsqrt - - use mp_radar - - implicit none - private - public:: mp_wsm6_run, & - mp_wsm6_init, & - mp_wsm6_final, & - refl10cm_wsm6 - - real(kind=kind_phys),parameter,private:: dtcldcr = 120. ! maximum time step for minor loops - real(kind=kind_phys),parameter,private:: n0r = 8.e6 ! intercept parameter rain -!real(kind=kind_phys),parameter,private:: n0g = 4.e6 ! intercept parameter graupel - real(kind=kind_phys),parameter,private:: avtr = 841.9 ! a constant for terminal velocity of rain - real(kind=kind_phys),parameter,private:: bvtr = 0.8 ! a constant for terminal velocity of rain - real(kind=kind_phys),parameter,private:: r0 = .8e-5 ! 8 microm in contrast to 10 micro m - real(kind=kind_phys),parameter,private:: peaut = .55 ! collection efficiency - real(kind=kind_phys),parameter,private:: xncr = 3.e8 ! maritime cloud in contrast to 3.e8 in tc80 - real(kind=kind_phys),parameter,private:: xmyu = 1.718e-5 ! the dynamic viscosity kgm-1s-1 - real(kind=kind_phys),parameter,private:: avts = 11.72 ! a constant for terminal velocity of snow - real(kind=kind_phys),parameter,private:: bvts = .41 ! a constant for terminal velocity of snow -!real(kind=kind_phys),parameter,private:: avtg = 330. ! a constant for terminal velocity of graupel -!real(kind=kind_phys),parameter,private:: bvtg = 0.8 ! a constant for terminal velocity of graupel -!real(kind=kind_phys),parameter,private:: deng = 500. ! density of graupel ! set later with hail_opt - real(kind=kind_phys),parameter,private:: lamdarmax = 8.e4 ! limited maximum value for slope parameter of rain - real(kind=kind_phys),parameter,private:: lamdasmax = 1.e5 ! limited maximum value for slope parameter of snow -!real(kind=kind_phys),parameter,private:: lamdagmax = 6.e4 ! limited maximum value for slope parameter of graupel - real(kind=kind_phys),parameter,private:: dicon = 11.9 ! constant for the cloud-ice diamter - real(kind=kind_phys),parameter,private:: dimax = 500.e-6 ! limited maximum value for the cloud-ice diamter - real(kind=kind_phys),parameter,private:: pfrz1 = 100. ! constant in Biggs freezing - real(kind=kind_phys),parameter,private:: pfrz2 = 0.66 ! constant in Biggs freezing - real(kind=kind_phys),parameter,private:: qcrmin = 1.e-9 ! minimun values for qr, qs, and qg - real(kind=kind_phys),parameter,private:: eacrc = 1.0 ! Snow/cloud-water collection efficiency - real(kind=kind_phys),parameter,private:: dens = 100.0 ! Density of snow - real(kind=kind_phys),parameter,private:: qs0 = 6.e-4 ! threshold amount for aggretion to occur - - real(kind=kind_phys),parameter,public :: n0smax = 1.e11 ! maximum n0s (t=-90C unlimited) - real(kind=kind_phys),parameter,public :: n0s = 2.e6 ! temperature dependent intercept parameter snow - real(kind=kind_phys),parameter,public :: alpha = .12 ! .122 exponen factor for n0s - - real(kind=kind_phys),save:: & - qc0,qck1, & - bvtr1,bvtr2,bvtr3,bvtr4,g1pbr, & - g3pbr,g4pbr,g5pbro2,pvtr,eacrr,pacrr, & - bvtr6,g6pbr, & - precr1,precr2,roqimax,bvts1, & - bvts2,bvts3,bvts4,g1pbs,g3pbs,g4pbs, & - n0g,avtg,bvtg,deng,lamdagmax, & !RAS13.3 - set these in wsm6init - g5pbso2,pvts,pacrs,precs1,precs2,pidn0r, & - xlv1,pacrc,pi, & - bvtg1,bvtg2,bvtg3,bvtg4,g1pbg, & - g3pbg,g4pbg,g5pbgo2,pvtg,pacrg, & - precg1,precg2,pidn0g, & - rslopermax,rslopesmax,rslopegmax, & - rsloperbmax,rslopesbmax,rslopegbmax, & - rsloper2max,rslopes2max,rslopeg2max, & - rsloper3max,rslopes3max,rslopeg3max - - real(kind=kind_phys),public,save:: pidn0s,pidnc - - - contains - - -!================================================================================================================= - subroutine mp_wsm6_init(den0,denr,dens,cl,cpv,hail_opt,errmsg,errflg) -!================================================================================================================= - -!input arguments: - integer,intent(in):: hail_opt ! RAS - real(kind=kind_phys),intent(in):: den0,denr,dens,cl,cpv - -!output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - -! RAS13.1 define graupel parameters as graupel-like or hail-like, -! depending on namelist option - if(hail_opt .eq. 1) then !Hail! - n0g = 4.e4 - deng = 700. - avtg = 285.0 - bvtg = 0.8 - lamdagmax = 2.e4 - else !Graupel! - n0g = 4.e6 - deng = 500 - avtg = 330.0 - bvtg = 0.8 - lamdagmax = 6.e4 - endif -! - pi = 4.*atan(1.) - xlv1 = cl-cpv -! - qc0 = 4./3.*pi*denr*r0**3*xncr/den0 ! 0.419e-3 -- .61e-3 - qck1 = .104*9.8*peaut/(xncr*denr)**(1./3.)/xmyu*den0**(4./3.) ! 7.03 - pidnc = pi*denr/6. ! syb -! - bvtr1 = 1.+bvtr - bvtr2 = 2.5+.5*bvtr - bvtr3 = 3.+bvtr - bvtr4 = 4.+bvtr - bvtr6 = 6.+bvtr - g1pbr = rgmma(bvtr1) - g3pbr = rgmma(bvtr3) - g4pbr = rgmma(bvtr4) ! 17.837825 - g6pbr = rgmma(bvtr6) - g5pbro2 = rgmma(bvtr2) ! 1.8273 - pvtr = avtr*g4pbr/6. - eacrr = 1.0 - pacrr = pi*n0r*avtr*g3pbr*.25*eacrr - precr1 = 2.*pi*n0r*.78 - precr2 = 2.*pi*n0r*.31*avtr**.5*g5pbro2 - roqimax = 2.08e22*dimax**8 -! - bvts1 = 1.+bvts - bvts2 = 2.5+.5*bvts - bvts3 = 3.+bvts - bvts4 = 4.+bvts - g1pbs = rgmma(bvts1) !.8875 - g3pbs = rgmma(bvts3) - g4pbs = rgmma(bvts4) ! 12.0786 - g5pbso2 = rgmma(bvts2) - pvts = avts*g4pbs/6. - pacrs = pi*n0s*avts*g3pbs*.25 - precs1 = 4.*n0s*.65 - precs2 = 4.*n0s*.44*avts**.5*g5pbso2 - pidn0r = pi*denr*n0r - pidn0s = pi*dens*n0s -! - pacrc = pi*n0s*avts*g3pbs*.25*eacrc -! - bvtg1 = 1.+bvtg - bvtg2 = 2.5+.5*bvtg - bvtg3 = 3.+bvtg - bvtg4 = 4.+bvtg - g1pbg = rgmma(bvtg1) - g3pbg = rgmma(bvtg3) - g4pbg = rgmma(bvtg4) - pacrg = pi*n0g*avtg*g3pbg*.25 - g5pbgo2 = rgmma(bvtg2) - pvtg = avtg*g4pbg/6. - precg1 = 2.*pi*n0g*.78 - precg2 = 2.*pi*n0g*.31*avtg**.5*g5pbgo2 - pidn0g = pi*deng*n0g -! - rslopermax = 1./lamdarmax - rslopesmax = 1./lamdasmax - rslopegmax = 1./lamdagmax - rsloperbmax = rslopermax ** bvtr - rslopesbmax = rslopesmax ** bvts - rslopegbmax = rslopegmax ** bvtg - rsloper2max = rslopermax * rslopermax - rslopes2max = rslopesmax * rslopesmax - rslopeg2max = rslopegmax * rslopegmax - rsloper3max = rsloper2max * rslopermax - rslopes3max = rslopes2max * rslopesmax - rslopeg3max = rslopeg2max * rslopegmax - -!+---+-----------------------------------------------------------------+ -!.. Set these variables needed for computing radar reflectivity. These -!.. get used within radar_init to create other variables used in the -!.. radar module. - xam_r = PI*denr/6. - xbm_r = 3. - xmu_r = 0. - xam_s = PI*dens/6. - xbm_s = 3. - xmu_s = 0. - xam_g = PI*deng/6. - xbm_g = 3. - xmu_g = 0. - - call radar_init - - errmsg = 'mp_wsm6_init OK' - errflg = 0 - - end subroutine mp_wsm6_init - -!================================================================================================================= - subroutine mp_wsm6_final(errmsg,errflg) -!================================================================================================================= - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - errmsg = 'mp_wsm6_final OK' - errflg = 0 - - end subroutine mp_wsm6_final - -!================================================================================================================= - subroutine mp_wsm6_run(t,q,qc,qi,qr,qs,qg,den,p,delz,delt, & - g,cpd,cpv,rd,rv,t0c,ep1,ep2,qmin,xls, & - xlv0,xlf0,den0,denr,cliq,cice,psat, & - rain,rainncv,sr,snow,snowncv,graupel, & - graupelncv,rainprod2d,evapprod2d, & - its,ite,kts,kte,errmsg,errflg & - ) -!=================================================================================================================! -! This code is a 6-class GRAUPEL phase microphyiscs scheme (WSM6) of the -! Single-Moment MicroPhyiscs (WSMMP). The WSMMP assumes that ice nuclei -! number concentration is a function of temperature, and seperate assumption -! is developed, in which ice crystal number concentration is a function -! of ice amount. A theoretical background of the ice-microphysics and related -! processes in the WSMMPs are described in Hong et al. (2004). -! All production terms in the WSM6 scheme are described in Hong and Lim (2006). -! All units are in m.k.s. and source/sink terms in kgkg-1s-1. -! -! WSM6 cloud scheme -! -! Coded by Song-You Hong and Jeong-Ock Jade Lim (Yonsei Univ.) -! Summer 2003 -! -! Implemented by Song-You Hong (Yonsei Univ.) and Jimy Dudhia (NCAR) -! Summer 2004 -! -! further modifications : -! semi-lagrangian sedimentation (JH,2010),hong, aug 2009 -! ==> higher accuracy and efficient at lower resolutions -! reflectivity computation from greg thompson, lim, jun 2011 -! ==> only diagnostic, but with removal of too large drops -! add hail option from afwa, aug 2014 -! ==> switch graupel or hail by changing no, den, fall vel. -! effective radius of hydrometeors, bae from kiaps, jan 2015 -! ==> consistency in solar insolation of rrtmg radiation -! bug fix in melting terms, bae from kiaps, nov 2015 -! ==> density of air is divided, which has not been -! -! Reference) Hong, Dudhia, Chen (HDC, 2004) Mon. Wea. Rev. -! Hong and Lim (HL, 2006) J. Korean Meteor. Soc. -! Dudhia, Hong and Lim (DHL, 2008) J. Meteor. Soc. Japan -! Lin, Farley, Orville (LFO, 1983) J. Appl. Meteor. -! Rutledge, Hobbs (RH83, 1983) J. Atmos. Sci. -! Rutledge, Hobbs (RH84, 1984) J. Atmos. Sci. -! Juang and Hong (JH, 2010) Mon. Wea. Rev. -! - -!input arguments: - integer,intent(in):: its,ite,kts,kte - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: & - den, & - p, & - delz - real(kind=kind_phys),intent(in):: & - delt, & - g, & - cpd, & - cpv, & - t0c, & - den0, & - rd, & - rv, & - ep1, & - ep2, & - qmin, & - xls, & - xlv0, & - xlf0, & - cliq, & - cice, & - psat, & - denr - -!inout arguments: - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - t -real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - q, & - qc, & - qi, & - qr, & - qs, & - qg -real(kind=kind_phys),intent(inout),dimension(its:ite):: & - rain, & - rainncv, & - sr - -real(kind=kind_phys),intent(inout),dimension(its:ite),optional:: & - snow, & - snowncv -real(kind=kind_phys),intent(inout),dimension(its:ite),optional:: & - graupel, & - graupelncv - - - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte), & - optional:: & - rainprod2d, & - evapprod2d - -!output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!local variables and arrays: - real(kind=kind_phys),dimension(its:ite,kts:kte,3):: & - rh, & - qsat, & - rslope, & - rslope2, & - rslope3, & - rslopeb, & - qrs_tmp, & - falk, & - fall, & - work1 - real(kind=kind_phys),dimension(its:ite,kts:kte):: & - fallc, & - falkc, & - work1c, & - work2c, & - workr, & - worka - real(kind=kind_phys),dimension(its:ite,kts:kte):: & - den_tmp, & - delz_tmp - real(kind=kind_phys),dimension(its:ite,kts:kte):: & - pigen, & - pidep, & - pcond, & - prevp, & - psevp, & - pgevp, & - psdep, & - pgdep, & - praut, & - psaut, & - pgaut, & - piacr, & - pracw, & - praci, & - pracs, & - psacw, & - psaci, & - psacr, & - pgacw, & - pgaci, & - pgacr, & - pgacs, & - paacw, & - psmlt, & - pgmlt, & - pseml, & - pgeml - real(kind=kind_phys),dimension(its:ite,kts:kte):: & - qsum, & - xl, & - cpm, & - work2, & - denfac, & - xni, & - denqrs1, & - denqrs2, & - denqrs3, & - denqci, & - n0sfac - real(kind=kind_phys),dimension(its:ite):: & - delqrs1, & - delqrs2, & - delqrs3, & - delqi - real(kind=kind_phys),dimension(its:ite):: & - tstepsnow, & - tstepgraup - integer,dimension(its:ite):: & - mstep, & - numdt - logical,dimension(its:ite):: flgcld - real(kind=kind_phys):: & - cpmcal, xlcal, diffus, & - viscos, xka, venfac, conden, diffac, & - x, y, z, a, b, c, d, e, & - qdt, holdrr, holdrs, holdrg, supcol, supcolt, pvt, & - coeres, supsat, dtcld, xmi, eacrs, satdt, & - qimax, diameter, xni0, roqi0, & - fallsum, fallsum_qsi, fallsum_qg, & - vt2i,vt2r,vt2s,vt2g,acrfac,egs,egi, & - xlwork2, factor, source, value, & - xlf, pfrzdtc, pfrzdtr, supice, alpha2, delta2, delta3 - real(kind=kind_phys):: vt2ave - real(kind=kind_phys):: holdc, holdci - integer:: i, j, k, mstepmax, & - iprt, latd, lond, loop, loops, ifsat, n, idim, kdim - -!Temporaries used for inlining fpvs function - real(kind=kind_phys):: dldti, xb, xai, tr, xbi, xa, hvap, cvap, hsub, dldt, ttp - -! variables for optimization - real(kind=kind_phys),dimension(its:ite):: dvec1,tvec1 - real(kind=kind_phys):: temp - -!----------------------------------------------------------------------------------------------------------------- - -! compute internal functions -! - cpmcal(x) = cpd*(1.-max(x,qmin))+max(x,qmin)*cpv - xlcal(x) = xlv0-xlv1*(x-t0c) -!---------------------------------------------------------------- -! diffus: diffusion coefficient of the water vapor -! viscos: kinematic viscosity(m2s-1) -! Optimizatin : A**B => exp(log(A)*(B)) -! - diffus(x,y) = 8.794e-5 * exp(log(x)*(1.81)) / y ! 8.794e-5*x**1.81/y - viscos(x,y) = 1.496e-6 * (x*sqrt(x)) /(x+120.)/y ! 1.496e-6*x**1.5/(x+120.)/y - xka(x,y) = 1.414e3*viscos(x,y)*y - diffac(a,b,c,d,e) = d*a*a/(xka(c,d)*rv*c*c)+1./(e*diffus(c,b)) - venfac(a,b,c) = exp(log((viscos(b,c)/diffus(b,a)))*((.3333333))) & - /sqrt(viscos(b,c))*sqrt(sqrt(den0/c)) - conden(a,b,c,d,e) = (max(b,qmin)-c)/(1.+d*d/(rv*e)*c/(a*a)) -! -! - idim = ite-its+1 - kdim = kte-kts+1 -! -!---------------------------------------------------------------- -! paddint 0 for negative values generated by dynamics -! - do k = kts, kte - do i = its, ite - qc(i,k) = max(qc(i,k),0.0) - qr(i,k) = max(qr(i,k),0.0) - qi(i,k) = max(qi(i,k),0.0) - qs(i,k) = max(qs(i,k),0.0) - qg(i,k) = max(qg(i,k),0.0) - enddo - enddo -! -!---------------------------------------------------------------- -! latent heat for phase changes and heat capacity. neglect the -! changes during microphysical process calculation emanuel(1994) -! - do k = kts, kte - do i = its, ite - cpm(i,k) = cpmcal(q(i,k)) - xl(i,k) = xlcal(t(i,k)) - enddo - enddo - do k = kts, kte - do i = its, ite - delz_tmp(i,k) = delz(i,k) - den_tmp(i,k) = den(i,k) - enddo - enddo -! -!---------------------------------------------------------------- -! initialize the surface rain, snow, graupel -! - do i = its, ite - rainncv(i) = 0. - if(present(snowncv) .and. present(snow)) snowncv(i) = 0. - if(present(graupelncv) .and. present(graupel)) graupelncv(i) = 0. - sr(i) = 0. -! new local array to catch step snow and graupel - tstepsnow(i) = 0. - tstepgraup(i) = 0. - enddo -! -!---------------------------------------------------------------- -! compute the minor time steps. -! - loops = max(nint(delt/dtcldcr),1) - dtcld = delt/loops - if(delt.le.dtcldcr) dtcld = delt -! - do loop = 1,loops -! -!---------------------------------------------------------------- -! initialize the large scale variables -! - do i = its, ite - mstep(i) = 1 - flgcld(i) = .true. - enddo -! -! do k = kts, kte -! do i = its, ite -! denfac(i,k) = sqrt(den0/den(i,k)) -! enddo -! enddo - do k = kts, kte - do i = its,ite - dvec1(i) = den(i,k) - enddo - call vrec(tvec1,dvec1,ite-its+1) - do i = its, ite - tvec1(i) = tvec1(i)*den0 - enddo - call vsqrt(dvec1,tvec1,ite-its+1) - do i = its,ite - denfac(i,k) = dvec1(i) - enddo - enddo -! -! Inline expansion for fpvs -! qsat(i,k,1) = fpvs(t(i,k),0,rd,rv,cpv,cliq,cice,xlv0,xls,psat,t0c) -! qsat(i,k,2) = fpvs(t(i,k),1,rd,rv,cpv,cliq,cice,xlv0,xls,psat,t0c) - hsub = xls - hvap = xlv0 - cvap = cpv - ttp=t0c+0.01 - dldt=cvap-cliq - xa=-dldt/rv - xb=xa+hvap/(rv*ttp) - dldti=cvap-cice - xai=-dldti/rv - xbi=xai+hsub/(rv*ttp) - do k = kts, kte - do i = its, ite - tr=ttp/t(i,k) - qsat(i,k,1)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr)) - qsat(i,k,1) = min(qsat(i,k,1),0.99*p(i,k)) - qsat(i,k,1) = ep2 * qsat(i,k,1) / (p(i,k) - qsat(i,k,1)) - qsat(i,k,1) = max(qsat(i,k,1),qmin) - rh(i,k,1) = max(q(i,k) / qsat(i,k,1),qmin) - tr=ttp/t(i,k) - if(t(i,k).lt.ttp) then - qsat(i,k,2)=psat*exp(log(tr)*(xai))*exp(xbi*(1.-tr)) - else - qsat(i,k,2)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr)) - endif - qsat(i,k,2) = min(qsat(i,k,2),0.99*p(i,k)) - qsat(i,k,2) = ep2 * qsat(i,k,2) / (p(i,k) - qsat(i,k,2)) - qsat(i,k,2) = max(qsat(i,k,2),qmin) - rh(i,k,2) = max(q(i,k) / qsat(i,k,2),qmin) - enddo - enddo -! -!---------------------------------------------------------------- -! initialize the variables for microphysical physics -! -! - do k = kts, kte - do i = its, ite - prevp(i,k) = 0. - psdep(i,k) = 0. - pgdep(i,k) = 0. - praut(i,k) = 0. - psaut(i,k) = 0. - pgaut(i,k) = 0. - pracw(i,k) = 0. - praci(i,k) = 0. - piacr(i,k) = 0. - psaci(i,k) = 0. - psacw(i,k) = 0. - pracs(i,k) = 0. - psacr(i,k) = 0. - pgacw(i,k) = 0. - paacw(i,k) = 0. - pgaci(i,k) = 0. - pgacr(i,k) = 0. - pgacs(i,k) = 0. - pigen(i,k) = 0. - pidep(i,k) = 0. - pcond(i,k) = 0. - psmlt(i,k) = 0. - pgmlt(i,k) = 0. - pseml(i,k) = 0. - pgeml(i,k) = 0. - psevp(i,k) = 0. - pgevp(i,k) = 0. - falk(i,k,1) = 0. - falk(i,k,2) = 0. - falk(i,k,3) = 0. - fall(i,k,1) = 0. - fall(i,k,2) = 0. - fall(i,k,3) = 0. - fallc(i,k) = 0. - falkc(i,k) = 0. - xni(i,k) = 1.e3 - enddo - enddo -!------------------------------------------------------------- -! Ni: ice crystal number concentraiton [HDC 5c] -!------------------------------------------------------------- - do k = kts, kte - do i = its, ite - temp = (den(i,k)*max(qi(i,k),qmin)) - temp = sqrt(sqrt(temp*temp*temp)) - xni(i,k) = min(max(5.38e7*temp,1.e3),1.e6) - enddo - enddo -! -!---------------------------------------------------------------- -! compute the fallout term: -! first, vertical terminal velosity for minor loops -!---------------------------------------------------------------- - do k = kts, kte - do i = its, ite - qrs_tmp(i,k,1) = qr(i,k) - qrs_tmp(i,k,2) = qs(i,k) - qrs_tmp(i,k,3) = qg(i,k) - enddo - enddo - call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, & - work1,its,ite,kts,kte) -! - do k = kte, kts, -1 - do i = its, ite - workr(i,k) = work1(i,k,1) - qsum(i,k) = max( (qs(i,k)+qg(i,k)), 1.E-15) - if( qsum(i,k) .gt. 1.e-15 ) then - worka(i,k) = (work1(i,k,2)*qs(i,k) + work1(i,k,3)*qg(i,k)) & - / qsum(i,k) - else - worka(i,k) = 0. - endif - denqrs1(i,k) = den(i,k)*qr(i,k) - denqrs2(i,k) = den(i,k)*qs(i,k) - denqrs3(i,k) = den(i,k)*qg(i,k) - if(qr(i,k).le.0.0) workr(i,k) = 0.0 - enddo - enddo - call nislfv_rain_plm(idim,kdim,den_tmp,denfac,t,delz_tmp,workr,denqrs1, & - delqrs1,dtcld,1,1) - call nislfv_rain_plm6(idim,kdim,den_tmp,denfac,t,delz_tmp,worka, & - denqrs2,denqrs3,delqrs2,delqrs3,dtcld,1,1) - do k = kts, kte - do i = its, ite - qr(i,k) = max(denqrs1(i,k)/den(i,k),0.) - qs(i,k) = max(denqrs2(i,k)/den(i,k),0.) - qg(i,k) = max(denqrs3(i,k)/den(i,k),0.) - fall(i,k,1) = denqrs1(i,k)*workr(i,k)/delz(i,k) - fall(i,k,2) = denqrs2(i,k)*worka(i,k)/delz(i,k) - fall(i,k,3) = denqrs3(i,k)*worka(i,k)/delz(i,k) - enddo - enddo - do i = its, ite - fall(i,1,1) = delqrs1(i)/delz(i,1)/dtcld - fall(i,1,2) = delqrs2(i)/delz(i,1)/dtcld - fall(i,1,3) = delqrs3(i)/delz(i,1)/dtcld - enddo - do k = kts, kte - do i = its, ite - qrs_tmp(i,k,1) = qr(i,k) - qrs_tmp(i,k,2) = qs(i,k) - qrs_tmp(i,k,3) = qg(i,k) - enddo - enddo - call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, & - work1,its,ite,kts,kte) -! - do k = kte, kts, -1 - do i = its, ite - supcol = t0c-t(i,k) - n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.) - if(t(i,k).gt.t0c) then -!--------------------------------------------------------------- -! psmlt: melting of snow [HL A33] [RH83 A25] -! (T>T0: S->R) -!--------------------------------------------------------------- - xlf = xlf0 - work2(i,k) = venfac(p(i,k),t(i,k),den(i,k)) - if(qs(i,k).gt.0.) then - coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2)) - psmlt(i,k) = xka(t(i,k),den(i,k))/xlf*(t0c-t(i,k))*pi/2. & - *n0sfac(i,k)*(precs1*rslope2(i,k,2) & - +precs2*work2(i,k)*coeres)/den(i,k) - psmlt(i,k) = min(max(psmlt(i,k)*dtcld/mstep(i), & - -qs(i,k)/mstep(i)),0.) - qs(i,k) = qs(i,k) + psmlt(i,k) - qr(i,k) = qr(i,k) - psmlt(i,k) - t(i,k) = t(i,k) + xlf/cpm(i,k)*psmlt(i,k) - endif -!--------------------------------------------------------------- -! pgmlt: melting of graupel [HL A23] [LFO 47] -! (T>T0: G->R) -!--------------------------------------------------------------- - if(qg(i,k).gt.0.) then - coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3)) - pgmlt(i,k) = xka(t(i,k),den(i,k))/xlf & - *(t0c-t(i,k))*(precg1*rslope2(i,k,3) & - +precg2*work2(i,k)*coeres)/den(i,k) - pgmlt(i,k) = min(max(pgmlt(i,k)*dtcld/mstep(i), & - -qg(i,k)/mstep(i)),0.) - qg(i,k) = qg(i,k) + pgmlt(i,k) - qr(i,k) = qr(i,k) - pgmlt(i,k) - t(i,k) = t(i,k) + xlf/cpm(i,k)*pgmlt(i,k) - endif - endif - enddo - enddo -!--------------------------------------------------------------- -! Vice [ms-1] : fallout of ice crystal [HDC 5a] -!--------------------------------------------------------------- - do k = kte, kts, -1 - do i = its, ite - if(qi(i,k).le.0.) then - work1c(i,k) = 0. - else - xmi = den(i,k)*qi(i,k)/xni(i,k) - diameter = max(min(dicon * sqrt(xmi),dimax), 1.e-25) - work1c(i,k) = 1.49e4*exp(log(diameter)*(1.31)) - endif - enddo - enddo -! -! forward semi-laglangian scheme (JH), PCM (piecewise constant), (linear) -! - do k = kte, kts, -1 - do i = its, ite - denqci(i,k) = den(i,k)*qi(i,k) - enddo - enddo - call nislfv_rain_plm(idim,kdim,den_tmp,denfac,t,delz_tmp,work1c,denqci, & - delqi,dtcld,1,0) - do k = kts, kte - do i = its, ite - qi(i,k) = max(denqci(i,k)/den(i,k),0.) - enddo - enddo - do i = its, ite - fallc(i,1) = delqi(i)/delz(i,1)/dtcld - enddo -! -!---------------------------------------------------------------- -! rain (unit is mm/sec;kgm-2s-1: /1000*delt ===> m)==> mm for wrf -! - do i = its, ite - fallsum = fall(i,kts,1)+fall(i,kts,2)+fall(i,kts,3)+fallc(i,kts) - fallsum_qsi = fall(i,kts,2)+fallc(i,kts) - fallsum_qg = fall(i,kts,3) - if(fallsum.gt.0.) then - rainncv(i) = fallsum*delz(i,kts)/denr*dtcld*1000. + rainncv(i) - rain(i) = fallsum*delz(i,kts)/denr*dtcld*1000. + rain(i) - endif - if(fallsum_qsi.gt.0.) then - tstepsnow(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. & - + tstepsnow(i) - if(present(snowncv) .and. present(snow)) then - snowncv(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. & - + snowncv(i) - snow(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. + snow(i) - endif - endif - if(fallsum_qg.gt.0.) then - tstepgraup(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. & - + tstepgraup(i) - if(present (graupelncv) .and. present (graupel)) then - graupelncv(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. & - + graupelncv(i) - graupel(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. + graupel(i) - endif - endif - if(present (snowncv)) then - if(fallsum.gt.0.)sr(i)=(snowncv(i) + graupelncv(i))/(rainncv(i)+1.e-12) - else - if(fallsum.gt.0.)sr(i)=(tstepsnow(i) + tstepgraup(i))/(rainncv(i)+1.e-12) - endif - enddo -! -!--------------------------------------------------------------- -! pimlt: instantaneous melting of cloud ice [HL A47] [RH83 A28] -! (T>T0: I->C) -!--------------------------------------------------------------- - do k = kts, kte - do i = its, ite - supcol = t0c-t(i,k) - xlf = xls-xl(i,k) - if(supcol.lt.0.) xlf = xlf0 - if(supcol.lt.0.and.qi(i,k).gt.0.) then - qc(i,k) = qc(i,k) + qi(i,k) - t(i,k) = t(i,k) - xlf/cpm(i,k)*qi(i,k) - qi(i,k) = 0. - endif -!--------------------------------------------------------------- -! pihmf: homogeneous freezing of cloud water below -40c [HL A45] -! (T<-40C: C->I) -!--------------------------------------------------------------- - if(supcol.gt.40..and.qc(i,k).gt.0.) then - qi(i,k) = qi(i,k) + qc(i,k) - t(i,k) = t(i,k) + xlf/cpm(i,k)*qc(i,k) - qc(i,k) = 0. - endif -!--------------------------------------------------------------- -! pihtf: heterogeneous freezing of cloud water [HL A44] -! (T0>T>-40C: C->I) -!--------------------------------------------------------------- - if(supcol.gt.0..and.qc(i,k).gt.qmin) then -! pfrzdtc = min(pfrz1*(exp(pfrz2*supcol)-1.) & -! * den(i,k)/denr/xncr*qc(i,k)**2*dtcld,qc(i,k)) - supcolt=min(supcol,50.) - pfrzdtc = min(pfrz1*(exp(pfrz2*supcolt)-1.) & - * den(i,k)/denr/xncr*qc(i,k)*qc(i,k)*dtcld,qc(i,k)) - qi(i,k) = qi(i,k) + pfrzdtc - t(i,k) = t(i,k) + xlf/cpm(i,k)*pfrzdtc - qc(i,k) = qc(i,k)-pfrzdtc - endif -!--------------------------------------------------------------- -! pgfrz: freezing of rain water [HL A20] [LFO 45] -! (TG) -!--------------------------------------------------------------- - if(supcol.gt.0..and.qr(i,k).gt.0.) then -! pfrzdtr = min(20.*pi**2*pfrz1*n0r*denr/den(i,k) & -! * (exp(pfrz2*supcol)-1.)*rslope3(i,k,1)**2 & -! * rslope(i,k,1)*dtcld,qr(i,k)) - temp = rslope3(i,k,1) - temp = temp*temp*rslope(i,k,1) - supcolt=min(supcol,50.) - pfrzdtr = min(20.*(pi*pi)*pfrz1*n0r*denr/den(i,k) & - *(exp(pfrz2*supcolt)-1.)*temp*dtcld, & - qr(i,k)) - qg(i,k) = qg(i,k) + pfrzdtr - t(i,k) = t(i,k) + xlf/cpm(i,k)*pfrzdtr - qr(i,k) = qr(i,k)-pfrzdtr - endif - enddo - enddo -! -! -!---------------------------------------------------------------- -! update the slope parameters for microphysics computation -! - do k = kts, kte - do i = its, ite - qrs_tmp(i,k,1) = qr(i,k) - qrs_tmp(i,k,2) = qs(i,k) - qrs_tmp(i,k,3) = qg(i,k) - enddo - enddo - call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, & - work1,its,ite,kts,kte) -!------------------------------------------------------------------ -! work1: the thermodynamic term in the denominator associated with -! heat conduction and vapor diffusion -! (ry88, y93, h85) -! work2: parameter associated with the ventilation effects(y93) -! - do k = kts, kte - do i = its, ite - work1(i,k,1) = diffac(xl(i,k),p(i,k),t(i,k),den(i,k),qsat(i,k,1)) - work1(i,k,2) = diffac(xls,p(i,k),t(i,k),den(i,k),qsat(i,k,2)) - work2(i,k) = venfac(p(i,k),t(i,k),den(i,k)) - enddo - enddo -! -!=============================================================== -! -! warm rain processes -! -! - follows the processes in RH83 and LFO except for autoconcersion -! -!=============================================================== -! - do k = kts, kte - do i = its, ite - supsat = max(q(i,k),qmin)-qsat(i,k,1) - satdt = supsat/dtcld -!--------------------------------------------------------------- -! praut: auto conversion rate from cloud to rain [HDC 16] -! (C->R) -!--------------------------------------------------------------- - if(qc(i,k).gt.qc0) then - praut(i,k) = qck1*qc(i,k)**(7./3.) - praut(i,k) = min(praut(i,k),qc(i,k)/dtcld) - endif -!--------------------------------------------------------------- -! pracw: accretion of cloud water by rain [HL A40] [LFO 51] -! (C->R) -!--------------------------------------------------------------- - if(qr(i,k).gt.qcrmin.and.qc(i,k).gt.qmin) then - pracw(i,k) = min(pacrr*rslope3(i,k,1)*rslopeb(i,k,1) & - * qc(i,k)*denfac(i,k),qc(i,k)/dtcld) - endif -!--------------------------------------------------------------- -! prevp: evaporation/condensation rate of rain [HDC 14] -! (V->R or R->V) -!--------------------------------------------------------------- - if(qr(i,k).gt.0.) then - coeres = rslope2(i,k,1)*sqrt(rslope(i,k,1)*rslopeb(i,k,1)) - prevp(i,k) = (rh(i,k,1)-1.)*(precr1*rslope2(i,k,1) & - + precr2*work2(i,k)*coeres)/work1(i,k,1) - if(prevp(i,k).lt.0.) then - prevp(i,k) = max(prevp(i,k),-qr(i,k)/dtcld) - prevp(i,k) = max(prevp(i,k),satdt/2) - else - prevp(i,k) = min(prevp(i,k),satdt/2) - endif - endif - enddo - enddo -! -!=============================================================== -! -! cold rain processes -! -! - follows the revised ice microphysics processes in HDC -! - the processes same as in RH83 and RH84 and LFO behave -! following ice crystal hapits defined in HDC, inclduing -! intercept parameter for snow (n0s), ice crystal number -! concentration (ni), ice nuclei number concentration -! (n0i), ice diameter (d) -! -!=============================================================== -! - do k = kts, kte - do i = its, ite - supcol = t0c-t(i,k) - n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.) - supsat = max(q(i,k),qmin)-qsat(i,k,2) - satdt = supsat/dtcld - ifsat = 0 -!------------------------------------------------------------- -! Ni: ice crystal number concentraiton [HDC 5c] -!------------------------------------------------------------- -! xni(i,k) = min(max(5.38e7*(den(i,k) & -! * max(qi(i,k),qmin))**0.75,1.e3),1.e6) - temp = (den(i,k)*max(qi(i,k),qmin)) - temp = sqrt(sqrt(temp*temp*temp)) - xni(i,k) = min(max(5.38e7*temp,1.e3),1.e6) - eacrs = exp(0.07*(-supcol)) -! - xmi = den(i,k)*qi(i,k)/xni(i,k) - diameter = min(dicon * sqrt(xmi),dimax) - vt2i = 1.49e4*diameter**1.31 - vt2r=pvtr*rslopeb(i,k,1)*denfac(i,k) - vt2s=pvts*rslopeb(i,k,2)*denfac(i,k) - vt2g=pvtg*rslopeb(i,k,3)*denfac(i,k) - qsum(i,k) = max( (qs(i,k)+qg(i,k)), 1.E-15) - if(qsum(i,k) .gt. 1.e-15) then - vt2ave=(vt2s*qs(i,k)+vt2g*qg(i,k))/(qsum(i,k)) - else - vt2ave=0. - endif - if(supcol.gt.0.and.qi(i,k).gt.qmin) then - if(qr(i,k).gt.qcrmin) then -!------------------------------------------------------------- -! praci: accretion of cloud ice by rain [HL A15] [LFO 25] -! (TR) -!------------------------------------------------------------- - acrfac = 2.*rslope3(i,k,1)+2.*diameter*rslope2(i,k,1) & - + diameter**2*rslope(i,k,1) - praci(i,k) = pi*qi(i,k)*n0r*abs(vt2r-vt2i)*acrfac/4. -! reduce collection efficiency (suggested by B. Wilt) - praci(i,k) = praci(i,k)*min(max(0.0,qr(i,k)/qi(i,k)),1.)**2 - praci(i,k) = min(praci(i,k),qi(i,k)/dtcld) -!------------------------------------------------------------- -! piacr: accretion of rain by cloud ice [HL A19] [LFO 26] -! (TS or R->G) -!------------------------------------------------------------- - piacr(i,k) = pi**2*avtr*n0r*denr*xni(i,k)*denfac(i,k) & - * g6pbr*rslope3(i,k,1)*rslope3(i,k,1) & - * rslopeb(i,k,1)/24./den(i,k) -! reduce collection efficiency (suggested by B. Wilt) - piacr(i,k) = piacr(i,k)*min(max(0.0,qi(i,k)/qr(i,k)),1.)**2 - piacr(i,k) = min(piacr(i,k),qr(i,k)/dtcld) - endif -!------------------------------------------------------------- -! psaci: accretion of cloud ice by snow [HDC 10] -! (TS) -!------------------------------------------------------------- - if(qs(i,k).gt.qcrmin) then - acrfac = 2.*rslope3(i,k,2)+2.*diameter*rslope2(i,k,2) & - + diameter**2*rslope(i,k,2) - psaci(i,k) = pi*qi(i,k)*eacrs*n0s*n0sfac(i,k) & - * abs(vt2ave-vt2i)*acrfac/4. - psaci(i,k) = min(psaci(i,k),qi(i,k)/dtcld) - endif -!------------------------------------------------------------- -! pgaci: accretion of cloud ice by graupel [HL A17] [LFO 41] -! (TG) -!------------------------------------------------------------- - if(qg(i,k).gt.qcrmin) then - egi = exp(0.07*(-supcol)) - acrfac = 2.*rslope3(i,k,3)+2.*diameter*rslope2(i,k,3) & - + diameter**2*rslope(i,k,3) - pgaci(i,k) = pi*egi*qi(i,k)*n0g*abs(vt2ave-vt2i)*acrfac/4. - pgaci(i,k) = min(pgaci(i,k),qi(i,k)/dtcld) - endif - endif -!------------------------------------------------------------- -! psacw: accretion of cloud water by snow [HL A7] [LFO 24] -! (TS, and T>=T0: C->R) -!------------------------------------------------------------- - if(qs(i,k).gt.qcrmin.and.qc(i,k).gt.qmin) then - psacw(i,k) = min(pacrc*n0sfac(i,k)*rslope3(i,k,2)*rslopeb(i,k,2) & -! reduce collection efficiency (suggested by B. Wilt) - * min(max(0.0,qs(i,k)/qc(i,k)),1.)**2 & - * qc(i,k)*denfac(i,k),qc(i,k)/dtcld) - endif -!------------------------------------------------------------- -! pgacw: accretion of cloud water by graupel [HL A6] [LFO 40] -! (TG, and T>=T0: C->R) -!------------------------------------------------------------- - if(qg(i,k).gt.qcrmin.and.qc(i,k).gt.qmin) then - pgacw(i,k) = min(pacrg*rslope3(i,k,3)*rslopeb(i,k,3) & -! reduce collection efficiency (suggested by B. Wilt) - * min(max(0.0,qg(i,k)/qc(i,k)),1.)**2 & - * qc(i,k)*denfac(i,k),qc(i,k)/dtcld) - endif -!------------------------------------------------------------- -! paacw: accretion of cloud water by averaged snow/graupel -! (TG or S, and T>=T0: C->R) -!------------------------------------------------------------- - if(qsum(i,k) .gt. 1.e-15) then - paacw(i,k) = (qs(i,k)*psacw(i,k)+qg(i,k)*pgacw(i,k)) & - /(qsum(i,k)) - endif -!------------------------------------------------------------- -! pracs: accretion of snow by rain [HL A11] [LFO 27] -! (TG) -!------------------------------------------------------------- - if(qs(i,k).gt.qcrmin.and.qr(i,k).gt.qcrmin) then - if(supcol.gt.0) then - acrfac = 5.*rslope3(i,k,2)*rslope3(i,k,2)*rslope(i,k,1) & - + 2.*rslope3(i,k,2)*rslope2(i,k,2)*rslope2(i,k,1) & - + .5*rslope2(i,k,2)*rslope2(i,k,2)*rslope3(i,k,1) - pracs(i,k) = pi**2*n0r*n0s*n0sfac(i,k)*abs(vt2r-vt2ave) & - * (dens/den(i,k))*acrfac -! reduce collection efficiency (suggested by B. Wilt) - pracs(i,k) = pracs(i,k)*min(max(0.0,qr(i,k)/qs(i,k)),1.)**2 - pracs(i,k) = min(pracs(i,k),qs(i,k)/dtcld) - endif -!------------------------------------------------------------- -! psacr: accretion of rain by snow [HL A10] [LFO 28] -! (TS or R->G) (T>=T0: enhance melting of snow) -!------------------------------------------------------------- - acrfac = 5.*rslope3(i,k,1)*rslope3(i,k,1)*rslope(i,k,2) & - + 2.*rslope3(i,k,1)*rslope2(i,k,1)*rslope2(i,k,2) & - +.5*rslope2(i,k,1)*rslope2(i,k,1)*rslope3(i,k,2) - psacr(i,k) = pi**2*n0r*n0s*n0sfac(i,k)*abs(vt2ave-vt2r) & - * (denr/den(i,k))*acrfac -! reduce collection efficiency (suggested by B. Wilt) - psacr(i,k) = psacr(i,k)*min(max(0.0,qs(i,k)/qr(i,k)),1.)**2 - psacr(i,k) = min(psacr(i,k),qr(i,k)/dtcld) - endif -!------------------------------------------------------------- -! pgacr: accretion of rain by graupel [HL A12] [LFO 42] -! (TG) (T>=T0: enhance melting of graupel) -!------------------------------------------------------------- - if(qg(i,k).gt.qcrmin.and.qr(i,k).gt.qcrmin) then - acrfac = 5.*rslope3(i,k,1)*rslope3(i,k,1)*rslope(i,k,3) & - + 2.*rslope3(i,k,1)*rslope2(i,k,1)*rslope2(i,k,3) & - + .5*rslope2(i,k,1)*rslope2(i,k,1)*rslope3(i,k,3) - pgacr(i,k) = pi**2*n0r*n0g*abs(vt2ave-vt2r)*(denr/den(i,k)) & - * acrfac -! reduce collection efficiency (suggested by B. Wilt) - pgacr(i,k) = pgacr(i,k)*min(max(0.0,qg(i,k)/qr(i,k)),1.)**2 - pgacr(i,k) = min(pgacr(i,k),qr(i,k)/dtcld) - endif -! -!------------------------------------------------------------- -! pgacs: accretion of snow by graupel [HL A13] [LFO 29] -! (S->G): This process is eliminated in V3.0 with the -! new combined snow/graupel fall speeds -!------------------------------------------------------------- - if(qg(i,k).gt.qcrmin.and.qs(i,k).gt.qcrmin) then - pgacs(i,k) = 0. - endif - if(supcol.le.0) then - xlf = xlf0 -!------------------------------------------------------------- -! pseml: enhanced melting of snow by accretion of water [HL A34] -! (T>=T0: S->R) -!------------------------------------------------------------- - if(qs(i,k).gt.0.) & - pseml(i,k) = min(max(cliq*supcol*(paacw(i,k)+psacr(i,k)) & - / xlf,-qs(i,k)/dtcld),0.) -!------------------------------------------------------------- -! pgeml: enhanced melting of graupel by accretion of water [HL A24] [RH84 A21-A22] -! (T>=T0: G->R) -!------------------------------------------------------------- - if(qg(i,k).gt.0.) & - pgeml(i,k) = min(max(cliq*supcol*(paacw(i,k)+pgacr(i,k)) & - / xlf,-qg(i,k)/dtcld),0.) - endif - if(supcol.gt.0) then -!------------------------------------------------------------- -! pidep: deposition/Sublimation rate of ice [HDC 9] -! (TI or I->V) -!------------------------------------------------------------- - if(qi(i,k).gt.0.and.ifsat.ne.1) then - pidep(i,k) = 4.*diameter*xni(i,k)*(rh(i,k,2)-1.)/work1(i,k,2) - supice = satdt-prevp(i,k) - if(pidep(i,k).lt.0.) then - pidep(i,k) = max(max(pidep(i,k),satdt/2),supice) - pidep(i,k) = max(pidep(i,k),-qi(i,k)/dtcld) - else - pidep(i,k) = min(min(pidep(i,k),satdt/2),supice) - endif - if(abs(prevp(i,k)+pidep(i,k)).ge.abs(satdt)) ifsat = 1 - endif -!------------------------------------------------------------- -! psdep: deposition/sublimation rate of snow [HDC 14] -! (TS or S->V) -!------------------------------------------------------------- - if(qs(i,k).gt.0..and.ifsat.ne.1) then - coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2)) - psdep(i,k) = (rh(i,k,2)-1.)*n0sfac(i,k)*(precs1*rslope2(i,k,2) & - + precs2*work2(i,k)*coeres)/work1(i,k,2) - supice = satdt-prevp(i,k)-pidep(i,k) - if(psdep(i,k).lt.0.) then - psdep(i,k) = max(psdep(i,k),-qs(i,k)/dtcld) - psdep(i,k) = max(max(psdep(i,k),satdt/2),supice) - else - psdep(i,k) = min(min(psdep(i,k),satdt/2),supice) - endif - if(abs(prevp(i,k)+pidep(i,k)+psdep(i,k)).ge.abs(satdt)) & - ifsat = 1 - endif -!------------------------------------------------------------- -! pgdep: deposition/sublimation rate of graupel [HL A21] [LFO 46] -! (TG or G->V) -!------------------------------------------------------------- - if(qg(i,k).gt.0..and.ifsat.ne.1) then - coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3)) - pgdep(i,k) = (rh(i,k,2)-1.)*(precg1*rslope2(i,k,3) & - + precg2*work2(i,k)*coeres)/work1(i,k,2) - supice = satdt-prevp(i,k)-pidep(i,k)-psdep(i,k) - if(pgdep(i,k).lt.0.) then - pgdep(i,k) = max(pgdep(i,k),-qg(i,k)/dtcld) - pgdep(i,k) = max(max(pgdep(i,k),satdt/2),supice) - else - pgdep(i,k) = min(min(pgdep(i,k),satdt/2),supice) - endif - if(abs(prevp(i,k)+pidep(i,k)+psdep(i,k)+pgdep(i,k)).ge. & - abs(satdt)) ifsat = 1 - endif -!------------------------------------------------------------- -! pigen: generation(nucleation) of ice from vapor [HL 50] [HDC 7-8] -! (TI) -!------------------------------------------------------------- - if(supsat.gt.0.and.ifsat.ne.1) then - supice = satdt-prevp(i,k)-pidep(i,k)-psdep(i,k)-pgdep(i,k) - xni0 = 1.e3*exp(0.1*supcol) - roqi0 = 4.92e-11*xni0**1.33 - pigen(i,k) = max(0.,(roqi0/den(i,k)-max(qi(i,k),0.))/dtcld) - pigen(i,k) = min(min(pigen(i,k),satdt),supice) - endif -! -!------------------------------------------------------------- -! psaut: conversion(aggregation) of ice to snow [HDC 12] -! (TS) -!------------------------------------------------------------- - if(qi(i,k).gt.0.) then - qimax = roqimax/den(i,k) - psaut(i,k) = max(0.,(qi(i,k)-qimax)/dtcld) - endif -! -!------------------------------------------------------------- -! pgaut: conversion(aggregation) of snow to graupel [HL A4] [LFO 37] -! (TG) -!------------------------------------------------------------- - if(qs(i,k).gt.0.) then - alpha2 = 1.e-3*exp(0.09*(-supcol)) - pgaut(i,k) = min(max(0.,alpha2*(qs(i,k)-qs0)),qs(i,k)/dtcld) - endif - endif -! -!------------------------------------------------------------- -! psevp: evaporation of melting snow [HL A35] [RH83 A27] -! (T>=T0: S->V) -!------------------------------------------------------------- - if(supcol.lt.0.) then - if(qs(i,k).gt.0..and.rh(i,k,1).lt.1.) then - coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2)) - psevp(i,k) = (rh(i,k,1)-1.)*n0sfac(i,k)*(precs1 & - * rslope2(i,k,2)+precs2*work2(i,k) & - * coeres)/work1(i,k,1) - psevp(i,k) = min(max(psevp(i,k),-qs(i,k)/dtcld),0.) - endif -!------------------------------------------------------------- -! pgevp: evaporation of melting graupel [HL A25] [RH84 A19] -! (T>=T0: G->V) -!------------------------------------------------------------- - if(qg(i,k).gt.0..and.rh(i,k,1).lt.1.) then - coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3)) - pgevp(i,k) = (rh(i,k,1)-1.)*(precg1*rslope2(i,k,3) & - + precg2*work2(i,k)*coeres)/work1(i,k,1) - pgevp(i,k) = min(max(pgevp(i,k),-qg(i,k)/dtcld),0.) - endif - endif - enddo - enddo -! -! -!---------------------------------------------------------------- -! check mass conservation of generation terms and feedback to the -! large scale -! - do k = kts, kte - do i = its, ite -! - delta2=0. - delta3=0. - if(qr(i,k).lt.1.e-4.and.qs(i,k).lt.1.e-4) delta2=1. - if(qr(i,k).lt.1.e-4) delta3=1. - if(t(i,k).le.t0c) then -! -! cloud water -! - value = max(qmin,qc(i,k)) - source = (praut(i,k)+pracw(i,k)+paacw(i,k)+paacw(i,k))*dtcld - if (source.gt.value) then - factor = value/source - praut(i,k) = praut(i,k)*factor - pracw(i,k) = pracw(i,k)*factor - paacw(i,k) = paacw(i,k)*factor - endif -! -! cloud ice -! - value = max(qmin,qi(i,k)) - source = (psaut(i,k)-pigen(i,k)-pidep(i,k)+praci(i,k)+psaci(i,k) & - + pgaci(i,k))*dtcld - if (source.gt.value) then - factor = value/source - psaut(i,k) = psaut(i,k)*factor - pigen(i,k) = pigen(i,k)*factor - pidep(i,k) = pidep(i,k)*factor - praci(i,k) = praci(i,k)*factor - psaci(i,k) = psaci(i,k)*factor - pgaci(i,k) = pgaci(i,k)*factor - endif -! -! rain -! - value = max(qmin,qr(i,k)) - source = (-praut(i,k)-prevp(i,k)-pracw(i,k)+piacr(i,k)+psacr(i,k) & - + pgacr(i,k))*dtcld - if (source.gt.value) then - factor = value/source - praut(i,k) = praut(i,k)*factor - prevp(i,k) = prevp(i,k)*factor - pracw(i,k) = pracw(i,k)*factor - piacr(i,k) = piacr(i,k)*factor - psacr(i,k) = psacr(i,k)*factor - pgacr(i,k) = pgacr(i,k)*factor - endif -! -! snow -! - value = max(qmin,qs(i,k)) - source = -(psdep(i,k)+psaut(i,k)-pgaut(i,k)+paacw(i,k)+piacr(i,k) & - * delta3+praci(i,k)*delta3-pracs(i,k)*(1.-delta2) & - + psacr(i,k)*delta2+psaci(i,k)-pgacs(i,k) )*dtcld - if (source.gt.value) then - factor = value/source - psdep(i,k) = psdep(i,k)*factor - psaut(i,k) = psaut(i,k)*factor - pgaut(i,k) = pgaut(i,k)*factor - paacw(i,k) = paacw(i,k)*factor - piacr(i,k) = piacr(i,k)*factor - praci(i,k) = praci(i,k)*factor - psaci(i,k) = psaci(i,k)*factor - pracs(i,k) = pracs(i,k)*factor - psacr(i,k) = psacr(i,k)*factor - pgacs(i,k) = pgacs(i,k)*factor - endif -! -! graupel -! - value = max(qmin,qg(i,k)) - source = -(pgdep(i,k)+pgaut(i,k) & - + piacr(i,k)*(1.-delta3)+praci(i,k)*(1.-delta3) & - + psacr(i,k)*(1.-delta2)+pracs(i,k)*(1.-delta2) & - + pgaci(i,k)+paacw(i,k)+pgacr(i,k)+pgacs(i,k))*dtcld - if (source.gt.value) then - factor = value/source - pgdep(i,k) = pgdep(i,k)*factor - pgaut(i,k) = pgaut(i,k)*factor - piacr(i,k) = piacr(i,k)*factor - praci(i,k) = praci(i,k)*factor - psacr(i,k) = psacr(i,k)*factor - pracs(i,k) = pracs(i,k)*factor - paacw(i,k) = paacw(i,k)*factor - pgaci(i,k) = pgaci(i,k)*factor - pgacr(i,k) = pgacr(i,k)*factor - pgacs(i,k) = pgacs(i,k)*factor - endif -! - work2(i,k)=-(prevp(i,k)+psdep(i,k)+pgdep(i,k)+pigen(i,k)+pidep(i,k)) -! update - q(i,k) = q(i,k)+work2(i,k)*dtcld - qc(i,k) = max(qc(i,k)-(praut(i,k)+pracw(i,k) & - + paacw(i,k)+paacw(i,k))*dtcld,0.) - qr(i,k) = max(qr(i,k)+(praut(i,k)+pracw(i,k) & - + prevp(i,k)-piacr(i,k)-pgacr(i,k) & - - psacr(i,k))*dtcld,0.) - qi(i,k) = max(qi(i,k)-(psaut(i,k)+praci(i,k) & - + psaci(i,k)+pgaci(i,k)-pigen(i,k)-pidep(i,k)) & - * dtcld,0.) - qs(i,k) = max(qs(i,k)+(psdep(i,k)+psaut(i,k)+paacw(i,k) & - - pgaut(i,k)+piacr(i,k)*delta3 & - + praci(i,k)*delta3+psaci(i,k)-pgacs(i,k) & - - pracs(i,k)*(1.-delta2)+psacr(i,k)*delta2) & - * dtcld,0.) - qg(i,k) = max(qg(i,k)+(pgdep(i,k)+pgaut(i,k) & - + piacr(i,k)*(1.-delta3) & - + praci(i,k)*(1.-delta3)+psacr(i,k)*(1.-delta2) & - + pracs(i,k)*(1.-delta2)+pgaci(i,k)+paacw(i,k) & - + pgacr(i,k)+pgacs(i,k))*dtcld,0.) - xlf = xls-xl(i,k) - xlwork2 = -xls*(psdep(i,k)+pgdep(i,k)+pidep(i,k)+pigen(i,k)) & - -xl(i,k)*prevp(i,k)-xlf*(piacr(i,k)+paacw(i,k) & - +paacw(i,k)+pgacr(i,k)+psacr(i,k)) - t(i,k) = t(i,k)-xlwork2/cpm(i,k)*dtcld - else -! -! cloud water -! - value = max(qmin,qc(i,k)) - source=(praut(i,k)+pracw(i,k)+paacw(i,k)+paacw(i,k))*dtcld - if (source.gt.value) then - factor = value/source - praut(i,k) = praut(i,k)*factor - pracw(i,k) = pracw(i,k)*factor - paacw(i,k) = paacw(i,k)*factor - endif -! -! rain -! - value = max(qmin,qr(i,k)) - source = (-paacw(i,k)-praut(i,k)+pseml(i,k)+pgeml(i,k)-pracw(i,k) & - -paacw(i,k)-prevp(i,k))*dtcld - if (source.gt.value) then - factor = value/source - praut(i,k) = praut(i,k)*factor - prevp(i,k) = prevp(i,k)*factor - pracw(i,k) = pracw(i,k)*factor - paacw(i,k) = paacw(i,k)*factor - pseml(i,k) = pseml(i,k)*factor - pgeml(i,k) = pgeml(i,k)*factor - endif -! -! snow -! - value = max(qcrmin,qs(i,k)) - source=(pgacs(i,k)-pseml(i,k)-psevp(i,k))*dtcld - if (source.gt.value) then - factor = value/source - pgacs(i,k) = pgacs(i,k)*factor - psevp(i,k) = psevp(i,k)*factor - pseml(i,k) = pseml(i,k)*factor - endif -! -! graupel -! - value = max(qcrmin,qg(i,k)) - source=-(pgacs(i,k)+pgevp(i,k)+pgeml(i,k))*dtcld - if (source.gt.value) then - factor = value/source - pgacs(i,k) = pgacs(i,k)*factor - pgevp(i,k) = pgevp(i,k)*factor - pgeml(i,k) = pgeml(i,k)*factor - endif -! - work2(i,k)=-(prevp(i,k)+psevp(i,k)+pgevp(i,k)) -! update - q(i,k) = q(i,k)+work2(i,k)*dtcld - qc(i,k) = max(qc(i,k)-(praut(i,k)+pracw(i,k) & - + paacw(i,k)+paacw(i,k))*dtcld,0.) - qr(i,k) = max(qr(i,k)+(praut(i,k)+pracw(i,k) & - + prevp(i,k)+paacw(i,k)+paacw(i,k)-pseml(i,k) & - - pgeml(i,k))*dtcld,0.) - qs(i,k) = max(qs(i,k)+(psevp(i,k)-pgacs(i,k) & - + pseml(i,k))*dtcld,0.) - qg(i,k) = max(qg(i,k)+(pgacs(i,k)+pgevp(i,k) & - + pgeml(i,k))*dtcld,0.) - xlf = xls-xl(i,k) - xlwork2 = -xl(i,k)*(prevp(i,k)+psevp(i,k)+pgevp(i,k)) & - -xlf*(pseml(i,k)+pgeml(i,k)) - t(i,k) = t(i,k)-xlwork2/cpm(i,k)*dtcld - endif - enddo - enddo -! -! Inline expansion for fpvs -! qsat(i,k,1) = fpvs(t(i,k),0,rd,rv,cpv,cliq,cice,xlv0,xls,psat,t0c) -! qsat(i,k,2) = fpvs(t(i,k),1,rd,rv,cpv,cliq,cice,xlv0,xls,psat,t0c) - hsub = xls - hvap = xlv0 - cvap = cpv - ttp=t0c+0.01 - dldt=cvap-cliq - xa=-dldt/rv - xb=xa+hvap/(rv*ttp) - dldti=cvap-cice - xai=-dldti/rv - xbi=xai+hsub/(rv*ttp) - do k = kts, kte - do i = its, ite - tr=ttp/t(i,k) - qsat(i,k,1)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr)) - qsat(i,k,1) = min(qsat(i,k,1),0.99*p(i,k)) - qsat(i,k,1) = ep2 * qsat(i,k,1) / (p(i,k) - qsat(i,k,1)) - qsat(i,k,1) = max(qsat(i,k,1),qmin) - tr=ttp/t(i,k) - if(t(i,k).lt.ttp) then - qsat(i,k,2)=psat*exp(log(tr)*(xai))*exp(xbi*(1.-tr)) - else - qsat(i,k,2)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr)) - endif - qsat(i,k,2) = min(qsat(i,k,2),0.99*p(i,k)) - qsat(i,k,2) = ep2 * qsat(i,k,2) / (p(i,k) - qsat(i,k,2)) - qsat(i,k,2) = max(qsat(i,k,2),qmin) - enddo - enddo -! -!---------------------------------------------------------------- -! pcond: condensational/evaporational rate of cloud water [HL A46] [RH83 A6] -! if there exists additional water vapor condensated/if -! evaporation of cloud water is not enough to remove subsaturation -! - do k = kts, kte - do i = its, ite - work1(i,k,1) = conden(t(i,k),q(i,k),qsat(i,k,1),xl(i,k),cpm(i,k)) - work2(i,k) = qc(i,k)+work1(i,k,1) - pcond(i,k) = min(max(work1(i,k,1)/dtcld,0.),max(q(i,k),0.)/dtcld) - if(qc(i,k).gt.0..and.work1(i,k,1).lt.0.) & - pcond(i,k) = max(work1(i,k,1),-qc(i,k))/dtcld - q(i,k) = q(i,k)-pcond(i,k)*dtcld - qc(i,k) = max(qc(i,k)+pcond(i,k)*dtcld,0.) - t(i,k) = t(i,k)+pcond(i,k)*xl(i,k)/cpm(i,k)*dtcld - enddo - enddo -! -! -!---------------------------------------------------------------- -! padding for small values -! - do k = kts, kte - do i = its, ite - if(qc(i,k).le.qmin) qc(i,k) = 0.0 - if(qi(i,k).le.qmin) qi(i,k) = 0.0 - enddo - enddo - enddo ! big loops - - if(present(rainprod2d) .and. present(evapprod2d)) then - do k = kts, kte - do i = its,ite - rainprod2d(i,k) = praut(i,k)+pracw(i,k)+praci(i,k)+psaci(i,k)+pgaci(i,k) & - + psacw(i,k)+pgacw(i,k)+paacw(i,k)+psaut(i,k) - evapprod2d(i,k) = -(prevp(i,k)+psevp(i,k)+pgevp(i,k)+psdep(i,k)+pgdep(i,k)) - enddo - enddo - endif -! -!---------------------------------------------------------------- -! CCPP checks: -! - - errmsg = 'mp_wsm6_run OK' - errflg = 0 - - end subroutine mp_wsm6_run - -!================================================================================================================= - real(kind=kind_phys) function rgmma(x) -!================================================================================================================= -!rgmma function: use infinite product form - - real(kind=kind_phys),intent(in):: x - - integer:: i - real(kind=kind_phys),parameter:: euler=0.577215664901532 - real(kind=kind_phys):: y - -!----------------------------------------------------------------------------------------------------------------- - - if(x.eq.1.)then - rgmma=0. - else - rgmma=x*exp(euler*x) - do i = 1,10000 - y = float(i) - rgmma=rgmma*(1.000+x/y)*exp(-x/y) - enddo - rgmma=1./rgmma - endif - - end function rgmma - -!================================================================================================================= - real(kind=kind_phys) function fpvs(t,ice,rd,rv,cvap,cliq,cice,hvap,hsub,psat,t0c) -!================================================================================================================= - - integer,intent(in):: ice - real(kind=kind_phys),intent(in):: cice,cliq,cvap,hsub,hvap,psat,rd,rv,t0c - real(kind=kind_phys),intent(in):: t - - real(kind=kind_phys):: tr,ttp,dldt,dldti,xa,xb,xai,xbi - -!----------------------------------------------------------------------------------------------------------------- - - ttp=t0c+0.01 - dldt=cvap-cliq - xa=-dldt/rv - xb=xa+hvap/(rv*ttp) - dldti=cvap-cice - xai=-dldti/rv - xbi=xai+hsub/(rv*ttp) - tr=ttp/t - if(t.lt.ttp.and.ice.eq.1) then - fpvs=psat*(tr**xai)*exp(xbi*(1.-tr)) - else - fpvs=psat*(tr**xa)*exp(xb*(1.-tr)) - endif - - end function fpvs - -!================================================================================================================= - subroutine slope_wsm6(qrs,den,denfac,t,rslope,rslopeb,rslope2,rslope3,vt,its,ite,kts,kte) -!================================================================================================================= - -!--- input arguments: - integer:: its,ite,kts,kte - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: den,denfac,t - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte,3):: qrs - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte,3):: & - rslope,rslopeb,rslope2,rslope3,vt - -!--- local variables and arrays: - integer:: i,k - - real(kind=kind_phys),parameter:: t0c = 273.15 - real(kind=kind_phys):: lamdar,lamdas,lamdag,x,y,z,supcol - real(kind=kind_phys),dimension(its:ite,kts:kte):: n0sfac - -!----------------------------------------------------------------------------------------------------------------- - -!size distributions: (x=mixing ratio, y=air density): -!valid for mixing ratio > 1.e-9 kg/kg. - lamdar(x,y)= sqrt(sqrt(pidn0r/(x*y))) ! (pidn0r/(x*y))**.25 - lamdas(x,y,z)= sqrt(sqrt(pidn0s*z/(x*y))) ! (pidn0s*z/(x*y))**.25 - lamdag(x,y)= sqrt(sqrt(pidn0g/(x*y))) ! (pidn0g/(x*y))**.25 - - do k = kts, kte - do i = its, ite - supcol = t0c-t(i,k) -!--------------------------------------------------------------- -! n0s: Intercept parameter for snow [m-4] [HDC 6] -!--------------------------------------------------------------- - n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.) - if(qrs(i,k,1).le.qcrmin)then - rslope(i,k,1) = rslopermax - rslopeb(i,k,1) = rsloperbmax - rslope2(i,k,1) = rsloper2max - rslope3(i,k,1) = rsloper3max - else - rslope(i,k,1) = 1./lamdar(qrs(i,k,1),den(i,k)) - rslopeb(i,k,1) = rslope(i,k,1)**bvtr - rslope2(i,k,1) = rslope(i,k,1)*rslope(i,k,1) - rslope3(i,k,1) = rslope2(i,k,1)*rslope(i,k,1) - endif - if(qrs(i,k,2).le.qcrmin)then - rslope(i,k,2) = rslopesmax - rslopeb(i,k,2) = rslopesbmax - rslope2(i,k,2) = rslopes2max - rslope3(i,k,2) = rslopes3max - else - rslope(i,k,2) = 1./lamdas(qrs(i,k,2),den(i,k),n0sfac(i,k)) - rslopeb(i,k,2) = rslope(i,k,2)**bvts - rslope2(i,k,2) = rslope(i,k,2)*rslope(i,k,2) - rslope3(i,k,2) = rslope2(i,k,2)*rslope(i,k,2) - endif - if(qrs(i,k,3).le.qcrmin)then - rslope(i,k,3) = rslopegmax - rslopeb(i,k,3) = rslopegbmax - rslope2(i,k,3) = rslopeg2max - rslope3(i,k,3) = rslopeg3max - else - rslope(i,k,3) = 1./lamdag(qrs(i,k,3),den(i,k)) - rslopeb(i,k,3) = rslope(i,k,3)**bvtg - rslope2(i,k,3) = rslope(i,k,3)*rslope(i,k,3) - rslope3(i,k,3) = rslope2(i,k,3)*rslope(i,k,3) - endif - vt(i,k,1) = pvtr*rslopeb(i,k,1)*denfac(i,k) - vt(i,k,2) = pvts*rslopeb(i,k,2)*denfac(i,k) - vt(i,k,3) = pvtg*rslopeb(i,k,3)*denfac(i,k) - if(qrs(i,k,1).le.0.0) vt(i,k,1) = 0.0 - if(qrs(i,k,2).le.0.0) vt(i,k,2) = 0.0 - if(qrs(i,k,3).le.0.0) vt(i,k,3) = 0.0 - enddo - enddo - - end subroutine slope_wsm6 - -!================================================================================================================= - subroutine slope_rain(qrs,den,denfac,t,rslope,rslopeb,rslope2,rslope3,vt,its,ite,kts,kte) -!================================================================================================================= - -!--- input arguments: - integer:: its,ite,kts,kte - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: qrs,den,denfac,t - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - rslope,rslopeb,rslope2,rslope3,vt - -!--- local variables and arrays: - integer:: i,k - - real(kind=kind_phys),parameter:: t0c = 273.15 - real(kind=kind_phys):: lamdar,x,y - real(kind=kind_phys),dimension(its:ite,kts:kte):: n0sfac - -!----------------------------------------------------------------------------------------------------------------- - -!size distributions: (x=mixing ratio, y=air density): -!valid for mixing ratio > 1.e-9 kg/kg. - lamdar(x,y)= sqrt(sqrt(pidn0r/(x*y))) ! (pidn0r/(x*y))**.25 - - do k = kts, kte - do i = its, ite - if(qrs(i,k).le.qcrmin)then - rslope(i,k) = rslopermax - rslopeb(i,k) = rsloperbmax - rslope2(i,k) = rsloper2max - rslope3(i,k) = rsloper3max - else - rslope(i,k) = 1./lamdar(qrs(i,k),den(i,k)) - rslopeb(i,k) = rslope(i,k)**bvtr - rslope2(i,k) = rslope(i,k)*rslope(i,k) - rslope3(i,k) = rslope2(i,k)*rslope(i,k) - endif - vt(i,k) = pvtr*rslopeb(i,k)*denfac(i,k) - if(qrs(i,k).le.0.0) vt(i,k) = 0.0 - enddo - enddo - - end subroutine slope_rain - -!================================================================================================================= - subroutine slope_snow(qrs,den,denfac,t,rslope,rslopeb,rslope2,rslope3,vt,its,ite,kts,kte) -!================================================================================================================= - -!--- input arguments: - integer:: its,ite,kts,kte - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: qrs,den,denfac,t - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - rslope,rslopeb,rslope2,rslope3,vt - -!--- local variables and arrays: - integer:: i,k - - real(kind=kind_phys),parameter:: t0c = 273.15 - real(kind=kind_phys):: lamdas,x,y,z,supcol - real(kind=kind_phys),dimension(its:ite,kts:kte):: n0sfac - -!----------------------------------------------------------------------------------------------------------------- - -!size distributions: (x=mixing ratio, y=air density): -!valid for mixing ratio > 1.e-9 kg/kg. - lamdas(x,y,z)= sqrt(sqrt(pidn0s*z/(x*y))) ! (pidn0s*z/(x*y))**.25 -! - do k = kts, kte - do i = its, ite - supcol = t0c-t(i,k) -!--------------------------------------------------------------- -! n0s: Intercept parameter for snow [m-4] [HDC 6] -!--------------------------------------------------------------- - n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.) - if(qrs(i,k).le.qcrmin)then - rslope(i,k) = rslopesmax - rslopeb(i,k) = rslopesbmax - rslope2(i,k) = rslopes2max - rslope3(i,k) = rslopes3max - else - rslope(i,k) = 1./lamdas(qrs(i,k),den(i,k),n0sfac(i,k)) - rslopeb(i,k) = rslope(i,k)**bvts - rslope2(i,k) = rslope(i,k)*rslope(i,k) - rslope3(i,k) = rslope2(i,k)*rslope(i,k) - endif - vt(i,k) = pvts*rslopeb(i,k)*denfac(i,k) - if(qrs(i,k).le.0.0) vt(i,k) = 0.0 - enddo - enddo - - end subroutine slope_snow - -!================================================================================================================= - subroutine slope_graup(qrs,den,denfac,t,rslope,rslopeb,rslope2,rslope3,vt,its,ite,kts,kte) -!================================================================================================================= - -!--- input arguments: - integer:: its,ite,kts,kte - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: qrs,den,denfac,t - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: & - rslope,rslopeb,rslope2,rslope3,vt - -!--- local variables and arrays: - integer:: i,k - - real(kind=kind_phys),parameter:: t0c = 273.15 - real(kind=kind_phys):: lamdag,x,y - real(kind=kind_phys),dimension(its:ite,kts:kte):: n0sfac - -!----------------------------------------------------------------------------------------------------------------- - -!size distributions: (x=mixing ratio, y=air density): -!valid for mixing ratio > 1.e-9 kg/kg. - lamdag(x,y)= sqrt(sqrt(pidn0g/(x*y))) ! (pidn0g/(x*y))**.25 - - do k = kts, kte - do i = its, ite -!--------------------------------------------------------------- -! n0s: Intercept parameter for snow [m-4] [HDC 6] -!--------------------------------------------------------------- - if(qrs(i,k).le.qcrmin)then - rslope(i,k) = rslopegmax - rslopeb(i,k) = rslopegbmax - rslope2(i,k) = rslopeg2max - rslope3(i,k) = rslopeg3max - else - rslope(i,k) = 1./lamdag(qrs(i,k),den(i,k)) - rslopeb(i,k) = rslope(i,k)**bvtg - rslope2(i,k) = rslope(i,k)*rslope(i,k) - rslope3(i,k) = rslope2(i,k)*rslope(i,k) - endif - vt(i,k) = pvtg*rslopeb(i,k)*denfac(i,k) - if(qrs(i,k).le.0.0) vt(i,k) = 0.0 - enddo - enddo - - end subroutine slope_graup - -!================================================================================================================= - subroutine nislfv_rain_plm(im,km,denl,denfacl,tkl,dzl,wwl,rql,precip,dt,id,iter) -!================================================================================================================= -! -! for non-iteration semi-Lagrangain forward advection for cloud -! with mass conservation and positive definite advection -! 2nd order interpolation with monotonic piecewise linear method -! this routine is under assumption of decfl < 1 for semi_Lagrangian -! -! dzl depth of model layer in meter -! wwl terminal velocity at model layer m/s -! rql cloud density*mixing ration -! precip precipitation -! dt time step -! id kind of precip: 0 test case; 1 raindrop -! iter how many time to guess mean terminal velocity: 0 pure forward. -! 0 : use departure wind for advection -! 1 : use mean wind for advection -! > 1 : use mean wind after iter-1 iterations -! -! author: hann-ming henry juang -! implemented by song-you hong -! - -!--- input arguments: - integer,intent(in):: im,km,id,iter - - real(kind=kind_phys),intent(in):: dt - real(kind=kind_phys),intent(in),dimension(im,km):: dzl,denl,denfacl,tkl - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(im):: precip - real(kind=kind_phys),intent(inout),dimension(im,km):: rql,wwl - -!---- local variables and arrays: - integer:: i,k,n,m,kk,kb,kt - real(kind=kind_phys):: tl,tl2,qql,dql,qqd - real(kind=kind_phys):: th,th2,qqh,dqh - real(kind=kind_phys):: zsum,qsum,dim,dip,c1,con1,fa1,fa2 - real(kind=kind_phys):: allold,allnew,zz,dzamin,cflmax,decfl - real(kind=kind_phys),dimension(km):: dz,ww,qq,wd,wa,was - real(kind=kind_phys),dimension(km):: den,denfac,tk - real(kind=kind_phys),dimension(km):: qn,qr,tmp,tmp1,tmp2,tmp3 - real(kind=kind_phys),dimension(km+1):: wi,zi,za - real(kind=kind_phys),dimension(km+1):: dza,qa,qmi,qpi - -!----------------------------------------------------------------------------------------------------------------- - - precip(:) = 0.0 - - i_loop: do i=1,im - dz(:) = dzl(i,:) - qq(:) = rql(i,:) - ww(:) = wwl(i,:) - den(:) = denl(i,:) - denfac(:) = denfacl(i,:) - tk(:) = tkl(i,:) -! skip for no precipitation for all layers - allold = 0.0 - do k=1,km - allold = allold + qq(k) - enddo - if(allold.le.0.0) then - cycle i_loop - endif -! -! compute interface values - zi(1)=0.0 - do k=1,km - zi(k+1) = zi(k)+dz(k) - enddo -! -! save departure wind - wd(:) = ww(:) - n=1 - 100 continue -! plm is 2nd order, we can use 2nd order wi or 3rd order wi -! 2nd order interpolation to get wi - wi(1) = ww(1) - wi(km+1) = ww(km) - do k=2,km - wi(k) = (ww(k)*dz(k-1)+ww(k-1)*dz(k))/(dz(k-1)+dz(k)) - enddo -! 3rd order interpolation to get wi - fa1 = 9./16. - fa2 = 1./16. - wi(1) = ww(1) - wi(2) = 0.5*(ww(2)+ww(1)) - do k=3,km-1 - wi(k) = fa1*(ww(k)+ww(k-1))-fa2*(ww(k+1)+ww(k-2)) - enddo - wi(km) = 0.5*(ww(km)+ww(km-1)) - wi(km+1) = ww(km) -! -! terminate of top of raingroup - do k=2,km - if( ww(k).eq.0.0 ) wi(k)=ww(k-1) - enddo -! -! diffusivity of wi - con1 = 0.05 - do k=km,1,-1 - decfl = (wi(k+1)-wi(k))*dt/dz(k) - if( decfl .gt. con1 ) then - wi(k) = wi(k+1) - con1*dz(k)/dt - endif - enddo -! compute arrival point - do k=1,km+1 - za(k) = zi(k) - wi(k)*dt - enddo -! - do k=1,km - dza(k) = za(k+1)-za(k) - enddo - dza(km+1) = zi(km+1) - za(km+1) -! -! computer deformation at arrival point - do k=1,km - qa(k) = qq(k)*dz(k)/dza(k) - qr(k) = qa(k)/den(k) - enddo - qa(km+1) = 0.0 -! call maxmin(km,1,qa,' arrival points ') -! -! compute arrival terminal velocity, and estimate mean terminal velocity -! then back to use mean terminal velocity - if( n.le.iter ) then - call slope_rain(qr,den,denfac,tk,tmp,tmp1,tmp2,tmp3,wa,1,1,1,km) - if( n.ge.2 ) wa(1:km)=0.5*(wa(1:km)+was(1:km)) - do k=1,km -!#ifdef DEBUG -! print*,' slope_wsm3 ',qr(k)*1000.,den(k),denfac(k),tk(k),tmp(k),tmp1(k),tmp2(k),ww(k),wa(k) -!#endif -! mean wind is average of departure and new arrival winds - ww(k) = 0.5* ( wd(k)+wa(k) ) - enddo - was(:) = wa(:) - n=n+1 - go to 100 - endif -! -! estimate values at arrival cell interface with monotone - do k=2,km - dip=(qa(k+1)-qa(k))/(dza(k+1)+dza(k)) - dim=(qa(k)-qa(k-1))/(dza(k-1)+dza(k)) - if( dip*dim.le.0.0 ) then - qmi(k)=qa(k) - qpi(k)=qa(k) - else - qpi(k)=qa(k)+0.5*(dip+dim)*dza(k) - qmi(k)=2.0*qa(k)-qpi(k) - if( qpi(k).lt.0.0 .or. qmi(k).lt.0.0 ) then - qpi(k) = qa(k) - qmi(k) = qa(k) - endif - endif - enddo - qpi(1)=qa(1) - qmi(1)=qa(1) - qmi(km+1)=qa(km+1) - qpi(km+1)=qa(km+1) -! -! interpolation to regular point - qn = 0.0 - kb=1 - kt=1 - intp : do k=1,km - kb=max(kb-1,1) - kt=max(kt-1,1) -! find kb and kt - if( zi(k).ge.za(km+1) ) then - exit intp - else - find_kb : do kk=kb,km - if( zi(k).le.za(kk+1) ) then - kb = kk - exit find_kb - else - cycle find_kb - endif - enddo find_kb - find_kt : do kk=kt,km - if( zi(k+1).le.za(kk) ) then - kt = kk - exit find_kt - else - cycle find_kt - endif - enddo find_kt - kt = kt - 1 -! compute q with piecewise constant method - if( kt.eq.kb ) then - tl=(zi(k)-za(kb))/dza(kb) - th=(zi(k+1)-za(kb))/dza(kb) - tl2=tl*tl - th2=th*th - qqd=0.5*(qpi(kb)-qmi(kb)) - qqh=qqd*th2+qmi(kb)*th - qql=qqd*tl2+qmi(kb)*tl - qn(k) = (qqh-qql)/(th-tl) - else if( kt.gt.kb ) then - tl=(zi(k)-za(kb))/dza(kb) - tl2=tl*tl - qqd=0.5*(qpi(kb)-qmi(kb)) - qql=qqd*tl2+qmi(kb)*tl - dql = qa(kb)-qql - zsum = (1.-tl)*dza(kb) - qsum = dql*dza(kb) - if( kt-kb.gt.1 ) then - do m=kb+1,kt-1 - zsum = zsum + dza(m) - qsum = qsum + qa(m) * dza(m) - enddo - endif - th=(zi(k+1)-za(kt))/dza(kt) - th2=th*th - qqd=0.5*(qpi(kt)-qmi(kt)) - dqh=qqd*th2+qmi(kt)*th - zsum = zsum + th*dza(kt) - qsum = qsum + dqh*dza(kt) - qn(k) = qsum/zsum - endif - cycle intp - endif -! - enddo intp -! -! rain out - sum_precip: do k=1,km - if( za(k).lt.0.0 .and. za(k+1).lt.0.0 ) then - precip(i) = precip(i) + qa(k)*dza(k) - cycle sum_precip - else if ( za(k).lt.0.0 .and. za(k+1).ge.0.0 ) then - precip(i) = precip(i) + qa(k)*(0.0-za(k)) - exit sum_precip - endif - exit sum_precip - enddo sum_precip -! -! replace the new values - rql(i,:) = qn(:) - enddo i_loop - - end subroutine nislfv_rain_plm - -!================================================================================================================= - subroutine nislfv_rain_plm6(im,km,denl,denfacl,tkl,dzl,wwl,rql,rql2,precip1,precip2,dt,id,iter) -!================================================================================================================= -! -! for non-iteration semi-Lagrangain forward advection for cloud -! with mass conservation and positive definite advection -! 2nd order interpolation with monotonic piecewise linear method -! this routine is under assumption of decfl < 1 for semi_Lagrangian -! -! dzl depth of model layer in meter -! wwl terminal velocity at model layer m/s -! rql cloud density*mixing ration -! precip precipitation -! dt time step -! id kind of precip: 0 test case; 1 raindrop -! iter how many time to guess mean terminal velocity: 0 pure forward. -! 0 : use departure wind for advection -! 1 : use mean wind for advection -! > 1 : use mean wind after iter-1 iterations -! -! author: hann-ming henry juang -! implemented by song-you hong -! - -!--- input arguments: - integer,intent(in):: im,km,id,iter - - real(kind=kind_phys),intent(in):: dt - real(kind=kind_phys),intent(in),dimension(im,km):: dzl,denl,denfacl,tkl - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(im):: precip1,precip2 - real(kind=kind_phys),intent(inout),dimension(im,km):: rql,rql2,wwl - -!---- local variables and arrays: - integer:: i,ist,k,n,m,kk,kb,kt - real(kind=kind_phys):: tl,tl2,qql,dql,qqd - real(kind=kind_phys):: th,th2,qqh,dqh - real(kind=kind_phys):: zsum,qsum,dim,dip,c1,con1,fa1,fa2 - real(kind=kind_phys):: allold,allnew,zz,dzamin,cflmax,decfl - real(kind=kind_phys),dimension(km):: dz,ww,qq,qq2,wd,wa,wa2,was - real(kind=kind_phys),dimension(km):: den,denfac,tk - real(kind=kind_phys),dimension(km):: qn,qr,qr2,tmp,tmp1,tmp2,tmp3 - real(kind=kind_phys),dimension(km+1):: wi,zi,za - real(kind=kind_phys),dimension(km+1):: dza,qa,qa2,qmi,qpi - real(kind=kind_phys),dimension(im):: precip - -!----------------------------------------------------------------------------------------------------------------- - - precip(:) = 0.0 - precip1(:) = 0.0 - precip2(:) = 0.0 - - i_loop: do i=1,im - dz(:) = dzl(i,:) - qq(:) = rql(i,:) - qq2(:) = rql2(i,:) - ww(:) = wwl(i,:) - den(:) = denl(i,:) - denfac(:) = denfacl(i,:) - tk(:) = tkl(i,:) -! skip for no precipitation for all layers - allold = 0.0 - do k=1,km - allold = allold + qq(k) + qq2(k) - enddo - if(allold.le.0.0) then - cycle i_loop - endif -! -! compute interface values - zi(1)=0.0 - do k=1,km - zi(k+1) = zi(k)+dz(k) - enddo -! -! save departure wind - wd(:) = ww(:) - n=1 - 100 continue -! plm is 2nd order, we can use 2nd order wi or 3rd order wi -! 2nd order interpolation to get wi - wi(1) = ww(1) - wi(km+1) = ww(km) - do k=2,km - wi(k) = (ww(k)*dz(k-1)+ww(k-1)*dz(k))/(dz(k-1)+dz(k)) - enddo -! 3rd order interpolation to get wi - fa1 = 9./16. - fa2 = 1./16. - wi(1) = ww(1) - wi(2) = 0.5*(ww(2)+ww(1)) - do k=3,km-1 - wi(k) = fa1*(ww(k)+ww(k-1))-fa2*(ww(k+1)+ww(k-2)) - enddo - wi(km) = 0.5*(ww(km)+ww(km-1)) - wi(km+1) = ww(km) -! -! terminate of top of raingroup - do k=2,km - if( ww(k).eq.0.0 ) wi(k)=ww(k-1) - enddo -! -! diffusivity of wi - con1 = 0.05 - do k=km,1,-1 - decfl = (wi(k+1)-wi(k))*dt/dz(k) - if( decfl .gt. con1 ) then - wi(k) = wi(k+1) - con1*dz(k)/dt - endif - enddo -! compute arrival point - do k=1,km+1 - za(k) = zi(k) - wi(k)*dt - enddo -! - do k=1,km - dza(k) = za(k+1)-za(k) - enddo - dza(km+1) = zi(km+1) - za(km+1) -! -! computer deformation at arrival point - do k=1,km - qa(k) = qq(k)*dz(k)/dza(k) - qa2(k) = qq2(k)*dz(k)/dza(k) - qr(k) = qa(k)/den(k) - qr2(k) = qa2(k)/den(k) - enddo - qa(km+1) = 0.0 - qa2(km+1) = 0.0 -! call maxmin(km,1,qa,' arrival points ') -! -! compute arrival terminal velocity, and estimate mean terminal velocity -! then back to use mean terminal velocity - if( n.le.iter ) then - call slope_snow(qr,den,denfac,tk,tmp,tmp1,tmp2,tmp3,wa,1,1,1,km) - call slope_graup(qr2,den,denfac,tk,tmp,tmp1,tmp2,tmp3,wa2,1,1,1,km) - do k = 1, km - tmp(k) = max((qr(k)+qr2(k)), 1.E-15) - if( tmp(k) .gt. 1.e-15 ) then - wa(k) = (wa(k)*qr(k) + wa2(k)*qr2(k))/tmp(k) - else - wa(k) = 0. - endif - enddo - if( n.ge.2 ) wa(1:km)=0.5*(wa(1:km)+was(1:km)) - do k=1,km -!#ifdef DEBUG -! print*,' slope_wsm3 ',qr(k)*1000.,den(k),denfac(k),tk(k),tmp(k),tmp1(k),tmp2(k), & -! ww(k),wa(k) -!#endif -! mean wind is average of departure and new arrival winds - ww(k) = 0.5* ( wd(k)+wa(k) ) - enddo - was(:) = wa(:) - n=n+1 - go to 100 - endif - - ist_loop : do ist = 1, 2 - if (ist.eq.2) then - qa(:) = qa2(:) - endif -! - precip(i) = 0. -! -! estimate values at arrival cell interface with monotone - do k=2,km - dip=(qa(k+1)-qa(k))/(dza(k+1)+dza(k)) - dim=(qa(k)-qa(k-1))/(dza(k-1)+dza(k)) - if( dip*dim.le.0.0 ) then - qmi(k)=qa(k) - qpi(k)=qa(k) - else - qpi(k)=qa(k)+0.5*(dip+dim)*dza(k) - qmi(k)=2.0*qa(k)-qpi(k) - if( qpi(k).lt.0.0 .or. qmi(k).lt.0.0 ) then - qpi(k) = qa(k) - qmi(k) = qa(k) - endif - endif - enddo - qpi(1)=qa(1) - qmi(1)=qa(1) - qmi(km+1)=qa(km+1) - qpi(km+1)=qa(km+1) -! -! interpolation to regular point - qn = 0.0 - kb=1 - kt=1 - intp : do k=1,km - kb=max(kb-1,1) - kt=max(kt-1,1) -! find kb and kt - if( zi(k).ge.za(km+1) ) then - exit intp - else - find_kb : do kk=kb,km - if( zi(k).le.za(kk+1) ) then - kb = kk - exit find_kb - else - cycle find_kb - endif - enddo find_kb - find_kt : do kk=kt,km - if( zi(k+1).le.za(kk) ) then - kt = kk - exit find_kt - else - cycle find_kt - endif - enddo find_kt - kt = kt - 1 -! compute q with piecewise constant method - if( kt.eq.kb ) then - tl=(zi(k)-za(kb))/dza(kb) - th=(zi(k+1)-za(kb))/dza(kb) - tl2=tl*tl - th2=th*th - qqd=0.5*(qpi(kb)-qmi(kb)) - qqh=qqd*th2+qmi(kb)*th - qql=qqd*tl2+qmi(kb)*tl - qn(k) = (qqh-qql)/(th-tl) - else if( kt.gt.kb ) then - tl=(zi(k)-za(kb))/dza(kb) - tl2=tl*tl - qqd=0.5*(qpi(kb)-qmi(kb)) - qql=qqd*tl2+qmi(kb)*tl - dql = qa(kb)-qql - zsum = (1.-tl)*dza(kb) - qsum = dql*dza(kb) - if( kt-kb.gt.1 ) then - do m=kb+1,kt-1 - zsum = zsum + dza(m) - qsum = qsum + qa(m) * dza(m) - enddo - endif - th=(zi(k+1)-za(kt))/dza(kt) - th2=th*th - qqd=0.5*(qpi(kt)-qmi(kt)) - dqh=qqd*th2+qmi(kt)*th - zsum = zsum + th*dza(kt) - qsum = qsum + dqh*dza(kt) - qn(k) = qsum/zsum - endif - cycle intp - endif -! - enddo intp -! -! rain out - sum_precip: do k=1,km - if( za(k).lt.0.0 .and. za(k+1).lt.0.0 ) then - precip(i) = precip(i) + qa(k)*dza(k) - cycle sum_precip - else if ( za(k).lt.0.0 .and. za(k+1).ge.0.0 ) then - precip(i) = precip(i) + qa(k)*(0.0-za(k)) - exit sum_precip - endif - exit sum_precip - enddo sum_precip -! -! replace the new values - if(ist.eq.1) then - rql(i,:) = qn(:) - precip1(i) = precip(i) - else - rql2(i,:) = qn(:) - precip2(i) = precip(i) - endif - enddo ist_loop - - enddo i_loop - - end subroutine nislfv_rain_plm6 - -!================================================================================================================= - subroutine refl10cm_wsm6(qv1d,qr1d,qs1d,qg1d,t1d,p1d,dBZ,kts,kte) - implicit none -!================================================================================================================= - -!..Sub arguments - integer,intent(in):: kts,kte - real(kind=kind_phys),intent(in),dimension(kts:kte):: qv1d,qr1d,qs1d,qg1d,t1d,p1d - real(kind=kind_phys),intent(inout),dimension(kts:kte):: dBz - -!..Local variables - logical:: melti - logical,dimension(kts:kte):: l_qr,l_qs,l_qg - - INTEGER:: i,k,k_0,kbot,n - - real(kind=kind_phys),parameter:: R=287. - real(kind=kind_phys):: temp_c - real(kind=kind_phys),dimension(kts:kte):: temp,pres,qv,rho - real(kind=kind_phys),dimension(kts:kte):: rr,rs,rg - real(kind=kind_phys),dimension(kts:kte):: ze_rain,ze_snow,ze_graupel - - double precision:: fmelt_s,fmelt_g - double precision:: cback,x,eta,f_d - double precision,dimension(kts:kte):: ilamr,ilams,ilamg - double precision,dimension(kts:kte):: n0_r, n0_s, n0_g - double precision:: lamr,lams,lamg - -!----------------------------------------------------------------------------------------------------------------- - - do k = kts, kte - dBZ(k) = -35.0 - enddo - -!+---+-----------------------------------------------------------------+ -!..Put column of data into local arrays. -!+---+-----------------------------------------------------------------+ - do k = kts, kte - temp(k) = t1d(k) - temp_c = min(-0.001, temp(k)-273.15) - qv(k) = max(1.e-10, qv1d(k)) - pres(k) = p1d(k) - rho(k) = 0.622*pres(k)/(R*temp(k)*(qv(k)+0.622)) - - if (qr1d(k) .gt. 1.e-9) then - rr(k) = qr1d(k)*rho(k) - n0_r(k) = n0r - lamr = (xam_r*xcrg(3)*n0_r(k)/rr(k))**(1./xcre(1)) - ilamr(k) = 1./lamr - l_qr(k) = .true. - else - rr(k) = 1.e-12 - l_qr(k) = .false. - endif - - if (qs1d(k) .gt. 1.e-9) then - rs(k) = qs1d(k)*rho(k) - n0_s(k) = min(n0smax, n0s*exp(-alpha*temp_c)) - lams = (xam_s*xcsg(3)*n0_s(k)/rs(k))**(1./xcse(1)) - ilams(k) = 1./lams - l_qs(k) = .true. - else - rs(k) = 1.e-12 - l_qs(k) = .false. - endif - - if (qg1d(k) .gt. 1.e-9) then - rg(k) = qg1d(k)*rho(k) - n0_g(k) = n0g - lamg = (xam_g*xcgg(3)*n0_g(k)/rg(k))**(1./xcge(1)) - ilamg(k) = 1./lamg - l_qg(k) = .true. - else - rg(k) = 1.e-12 - l_qg(k) = .false. - endif - enddo - -!+---+-----------------------------------------------------------------+ -!..Locate K-level of start of melting (k_0 is level above). -!+---+-----------------------------------------------------------------+ - melti = .false. - k_0 = kts - do k = kte-1, kts, -1 - if ( (temp(k).gt.273.15) .and. L_qr(k) & - .and. (L_qs(k+1).or.L_qg(k+1)) ) then - k_0 = MAX(k+1, k_0) - melti=.true. - goto 195 - endif - enddo - 195 continue - -!+---+-----------------------------------------------------------------+ -!..Assume Rayleigh approximation at 10 cm wavelength. Rain (all temps) -!.. and non-water-coated snow and graupel when below freezing are -!.. simple. Integrations of m(D)*m(D)*N(D)*dD. -!+---+-----------------------------------------------------------------+ - - do k = kts, kte - ze_rain(k) = 1.e-22 - ze_snow(k) = 1.e-22 - ze_graupel(k) = 1.e-22 - if (l_qr(k)) ze_rain(k) = n0_r(k)*xcrg(4)*ilamr(k)**xcre(4) - if (l_qs(k)) ze_snow(k) = (0.176/0.93) * (6.0/pi)*(6.0/pi) & - * (xam_s/900.0)*(xam_s/900.0) & - * n0_s(k)*xcsg(4)*ilams(k)**xcse(4) - if (l_qg(k)) ze_graupel(k) = (0.176/0.93) * (6.0/pi)*(6.0/pi) & - * (xam_g/900.0)*(xam_g/900.0) & - * n0_g(k)*xcgg(4)*ilamg(k)**xcge(4) - enddo - - -!+---+-----------------------------------------------------------------+ -!..Special case of melting ice (snow/graupel) particles. Assume the -!.. ice is surrounded by the liquid water. Fraction of meltwater is -!.. extremely simple based on amount found above the melting level. -!.. Uses code from Uli Blahak (rayleigh_soak_wetgraupel and supporting -!.. routines). -!+---+-----------------------------------------------------------------+ - - if (melti .and. k_0.ge.kts+1) then - do k = k_0-1, kts, -1 - -!..Reflectivity contributed by melting snow - if (L_qs(k) .and. L_qs(k_0) ) then - fmelt_s = MAX(0.005d0, MIN(1.0d0-rs(k)/rs(k_0), 0.99d0)) - eta = 0.d0 - lams = 1./ilams(k) - do n = 1, nrbins - x = xam_s * xxDs(n)**xbm_s - call rayleigh_soak_wetgraupel (x,dble(xocms),dble(xobms), & - fmelt_s, melt_outside_s, m_w_0, m_i_0, lamda_radar, & - cback, mixingrulestring_s, matrixstring_s, & - inclusionstring_s, hoststring_s, & - hostmatrixstring_s, hostinclusionstring_s) - f_d = n0_s(k)*xxds(n)**xmu_s * dexp(-lams*xxds(n)) - eta = eta + f_d * cback * simpson(n) * xdts(n) - enddo - ze_snow(k) = sngl(lamda4 / (pi5 * k_w) * eta) - endif - - -!..Reflectivity contributed by melting graupel - - if (l_qg(k) .and. l_qg(k_0) ) then - fmelt_g = max(0.005d0, min(1.0d0-rg(k)/rg(k_0), 0.99d0)) - eta = 0.d0 - lamg = 1./ilamg(k) - do n = 1, nrbins - x = xam_g * xxdg(n)**xbm_g - call rayleigh_soak_wetgraupel (x,dble(xocmg),dble(xobmg), & - fmelt_g, melt_outside_g, m_w_0, m_i_0, lamda_radar, & - cback, mixingrulestring_g, matrixstring_g, & - inclusionstring_g, hoststring_g, & - hostmatrixstring_g, hostinclusionstring_g) - f_d = n0_g(k)*xxdg(n)**xmu_g * dexp(-lamg*xxdg(n)) - eta = eta + f_d * cback * simpson(n) * xdtg(n) - enddo - ze_graupel(k) = sngl(lamda4 / (pi5 * k_w) * eta) - endif - - enddo - endif - - do k = kte, kts, -1 - dBZ(k) = 10.*log10((ze_rain(k)+ze_snow(k)+ze_graupel(k))*1.d18) - enddo - - - end subroutine refl10cm_wsm6 - - -!================================================================================================================= - end module mp_wsm6 -!================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_mmm/mp_wsm6_effectRad.F b/src/core_atmosphere/physics/physics_mmm/mp_wsm6_effectRad.F deleted file mode 100644 index d54cf74b6..000000000 --- a/src/core_atmosphere/physics/physics_mmm/mp_wsm6_effectRad.F +++ /dev/null @@ -1,188 +0,0 @@ -!================================================================================================================= - module mp_wsm6_effectrad - use ccpp_kinds,only: kind_phys - - - use mp_wsm6,only: alpha,n0s,n0smax,pidn0s,pidnc - - - implicit none - private - public:: mp_wsm6_effectRad_run, & - mp_wsm6_effectrad_init, & - mp_wsm6_effectRad_final - - - contains - - -!================================================================================================================= - subroutine mp_wsm6_effectRad_init(errmsg,errflg) -!================================================================================================================= - -!output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - errmsg = 'mp_wsm6_effectRad_init OK' - errflg = 0 - - end subroutine mp_wsm6_effectRad_init - -!================================================================================================================= - subroutine mp_wsm6_effectRad_final(errmsg,errflg) -!================================================================================================================= - -!output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - errmsg = 'mp_wsm6_effectRad_final OK' - errflg = 0 - - end subroutine mp_wsm6_effectRad_final - -!================================================================================================================= - subroutine mp_wsm6_effectRad_run(do_microp_re,t,qc,qi,qs,rho,qmin,t0c,re_qc_bg,re_qi_bg,re_qs_bg, & - re_qc_max,re_qi_max,re_qs_max,re_qc,re_qi,re_qs,its,ite,kts,kte, & - errmsg,errflg) -!================================================================================================================= -! Compute radiation effective radii of cloud water, ice, and snow for -! single-moment microphysics. -! These are entirely consistent with microphysics assumptions, not -! constant or otherwise ad hoc as is internal to most radiation -! schemes. -! Coded and implemented by Soo ya Bae, KIAPS, January 2015. -!----------------------------------------------------------------------------------------------------------------- - - -!..Sub arguments - logical,intent(in):: do_microp_re - integer,intent(in):: its,ite,kts,kte - real(kind=kind_phys),intent(in):: qmin - real(kind=kind_phys),intent(in):: t0c - real(kind=kind_phys),intent(in):: re_qc_bg,re_qi_bg,re_qs_bg - real(kind=kind_phys),intent(in):: re_qc_max,re_qi_max,re_qs_max - real(kind=kind_phys),dimension(its:ite,kts:kte),intent(in):: t - real(kind=kind_phys),dimension(its:ite,kts:kte),intent(in):: qc - real(kind=kind_phys),dimension(its:ite,kts:kte),intent(in):: qi - real(kind=kind_phys),dimension(its:ite,kts:kte),intent(in):: qs - real(kind=kind_phys),dimension(its:ite,kts:kte),intent(in):: rho - real(kind=kind_phys),dimension(its:ite,kts:kte),intent(inout):: re_qc - real(kind=kind_phys),dimension(its:ite,kts:kte),intent(inout):: re_qi - real(kind=kind_phys),dimension(its:ite,kts:kte),intent(inout):: re_qs - -!...Output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!..Local variables - integer:: i,k - integer:: inu_c - real(kind=kind_phys),dimension(its:ite,kts:kte):: ni - real(kind=kind_phys),dimension(its:ite,kts:kte):: rqc - real(kind=kind_phys),dimension(its:ite,kts:kte):: rqi - real(kind=kind_phys),dimension(its:ite,kts:kte):: rni - real(kind=kind_phys),dimension(its:ite,kts:kte):: rqs - real(kind=kind_phys):: temp - real(kind=kind_phys):: lamdac - real(kind=kind_phys):: supcol,n0sfac,lamdas - real(kind=kind_phys):: diai ! diameter of ice in m - logical:: has_qc, has_qi, has_qs -!..Minimum microphys values - real(kind=kind_phys),parameter:: R1 = 1.E-12 - real(kind=kind_phys),parameter:: R2 = 1.E-6 -!..Mass power law relations: mass = am*D**bm - real(kind=kind_phys),parameter:: bm_r = 3.0 - real(kind=kind_phys),parameter:: obmr = 1.0/bm_r - real(kind=kind_phys),parameter:: nc0 = 3.E8 - -!----------------------------------------------------------------------------------------------------------------- - - if(.not. do_microp_re) return - -!--- initialization of effective radii of cloud water, cloud ice, and snow to background values: - do k = kts,kte - do i = its,ite - re_qc(i,k) = re_qc_bg - re_qi(i,k) = re_qi_bg - re_qs(i,k) = re_qs_bg - enddo - enddo - -!--- computation of effective radii: - has_qc = .false. - has_qi = .false. - has_qs = .false. - - do k = kts,kte - do i = its,ite - ! for cloud - rqc(i,k) = max(R1,qc(i,k)*rho(i,k)) - if (rqc(i,k).gt.R1) has_qc = .true. - ! for ice - rqi(i,k) = max(R1,qi(i,k)*rho(i,k)) - temp = (rho(i,k)*max(qi(i,k),qmin)) - temp = sqrt(sqrt(temp*temp*temp)) - ni(i,k) = min(max(5.38e7*temp,1.e3),1.e6) - rni(i,k)= max(R2,ni(i,k)*rho(i,k)) - if (rqi(i,k).gt.R1 .and. rni(i,k).gt.R2) has_qi = .true. - ! for snow - rqs(i,k) = max(R1,qs(i,k)*rho(i,k)) - if (rqs(i,k).gt.R1) has_qs = .true. - enddo - enddo - - if (has_qc) then - do k = kts,kte - do i = its,ite - if (rqc(i,k).le.R1) CYCLE - lamdac = (pidnc*nc0/rqc(i,k))**obmr - re_qc(i,k) = max(2.51E-6,min(1.5*(1.0/lamdac),re_qc_max)) - enddo - enddo - endif - - if (has_qi) then - do k = kts,kte - do i = its,ite - if (rqi(i,k).le.R1 .or. rni(i,k).le.R2) CYCLE - diai = 11.9*sqrt(rqi(i,k)/ni(i,k)) - re_qi(i,k) = max(10.01E-6,min(0.75*0.163*diai,re_qi_max)) - enddo - enddo - endif - - if (has_qs) then - do i = its,ite - do k = kts,kte - if (rqs(i,k).le.R1) CYCLE - supcol = t0c-t(i,k) - n0sfac = max(min(exp(alpha*supcol),n0smax/n0s),1.) - lamdas = sqrt(sqrt(pidn0s*n0sfac/rqs(i,k))) - re_qs(i,k) = max(25.E-6,min(0.5*(1./lamdas),re_qs_max)) - enddo - enddo - endif - -!--- limit effective radii of cloud water, cloud ice, and snow to maximum values: - do k = kts,kte - do i = its,ite - re_qc(i,k) = max(re_qc_bg,min(re_qc(i,k),re_qc_max)) - re_qi(i,k) = max(re_qi_bg,min(re_qi(i,k),re_qi_max)) - re_qs(i,k) = max(re_qs_bg,min(re_qs(i,k),re_qs_max)) - enddo - enddo - - errmsg = 'mp_wsm6_effectRad_run OK' - errflg = 0 - - end subroutine mp_wsm6_effectRad_run - -!================================================================================================================= - end module mp_wsm6_effectrad -!================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_mmm/mynn_shared.F b/src/core_atmosphere/physics/physics_mmm/mynn_shared.F deleted file mode 100644 index ee74077ba..000000000 --- a/src/core_atmosphere/physics/physics_mmm/mynn_shared.F +++ /dev/null @@ -1,133 +0,0 @@ -!================================================================================================================= - module mynn_shared - use mpas_kind_types,only: kind_phys => RKIND - - implicit none - private - public:: esat_blend,qsat_blend,xl_blend - - -!> Constants used for empirical calculations of saturation vapor pressures (in function "esat") and -!! saturation mixing ratios (in function "qsat"), reproduced from module_mp_thompson.F. - real(kind=kind_phys),parameter:: j0 = .611583699e03 - real(kind=kind_phys),parameter:: j1 = .444606896e02 - real(kind=kind_phys),parameter:: j2 = .143177157e01 - real(kind=kind_phys),parameter:: j3 = .264224321e-1 - real(kind=kind_phys),parameter:: j4 = .299291081e-3 - real(kind=kind_phys),parameter:: j5 = .203154182e-5 - real(kind=kind_phys),parameter:: j6 = .702620698e-8 - real(kind=kind_phys),parameter:: j7 = .379534310e-11 - real(kind=kind_phys),parameter:: j8 =-.321582393e-13 - - real(kind=kind_phys),parameter:: k0 = .609868993e03 - real(kind=kind_phys),parameter:: k1 = .499320233e02 - real(kind=kind_phys),parameter:: k2 = .184672631e01 - real(kind=kind_phys),parameter:: k3 = .402737184e-1 - real(kind=kind_phys),parameter:: k4 = .565392987e-3 - real(kind=kind_phys),parameter:: k5 = .521693933e-5 - real(kind=kind_phys),parameter:: k6 = .307839583e-7 - real(kind=kind_phys),parameter:: k7 = .105785160e-9 - real(kind=kind_phys),parameter:: k8 = .161444444e-12 - - -contains - - -!================================================================================================================= -!>\ingroup gsd_mynn_edmf -!! \author JAYMES- added 22 Apr 2015 -!! This function calculates saturation vapor pressure. Separate ice and liquid functions are used (identical to -!! those in module_mp_thompson.F, v3.6). Then, the final returned value is a temperature-dependent "blend". -!! Because the final value is "phase-aware", this formulation may be preferred for use throughout bl_mynn.F and -!! sf_mynn.F (replacing "svp"). - - function esat_blend(t,t0c,tice) - implicit none - - real(kind=kind_phys),intent(in):: t,t0c,tice - real(kind=kind_phys):: esat_blend,xc,esl,esi,chi - - xc = max(-80.,t-t0c) - -!For 253 < t < 273.16 K, the vapor pressures are "blended" as a function of temperature, using the approach of -!Chaboureau and Bechtold (2002), JAS, p. 2363. The resulting values are returned from the function. - if(t .ge. t0c) then - esat_blend = j0+xc*(j1+xc*(j2+xc*(j3+xc*(j4+xc*(j5+xc*(j6+xc*(j7+xc*j8))))))) - else if(t .le. tice) then - esat_blend = k0+xc*(k1+xc*(k2+xc*(k3+xc*(k4+xc*(k5+xc*(k6+xc*(k7+xc*k8))))))) - else - esl = j0+xc*(j1+xc*(j2+xc*(j3+xc*(j4+xc*(j5+xc*(j6+xc*(j7+xc*j8))))))) - esi = k0+xc*(k1+xc*(k2+xc*(k3+xc*(k4+xc*(k5+xc*(k6+xc*(k7+xc*k8))))))) - chi = (273.16-t)/20.16 - esat_blend = (1.-chi)*esl + chi*esi - end if - - end function esat_blend - -!================================================================================================================= -!>\ingroup gsd_mynn_edmf -!! \author JAYMES- added 22 Apr 2015 -!! This function extends function "esat" and returns a "blended" saturation mixing ratio. - - function qsat_blend(t,t0c,tice,p,waterice) - implicit none - - real(kind=kind_phys),intent(in):: t,t0c,tice,p - character(len=1),intent(in),optional:: waterice - character(len=1):: wrt - real(kind=kind_phys):: qsat_blend,xc,esl,esi,rslf,rsif,chi - - if(.not. present(waterice) ) then - wrt = 'b' - else - wrt = waterice - endif - - xc=max(-80.,t-t0c) - - if((t .ge. t0c) .or. (wrt .eq. 'w')) then - esl = j0+xc*(j1+xc*(j2+xc*(j3+xc*(j4+xc*(j5+xc*(j6+xc*(j7+xc*j8))))))) - qsat_blend = 0.622*esl/(p-esl) - else if(t .le. tice) then - esi = k0+xc*(k1+xc*(k2+xc*(k3+xc*(k4+xc*(k5+xc*(k6+xc*(k7+xc*k8))))))) - qsat_blend = 0.622*esi/(p-esi) - else - esl = j0+xc*(j1+xc*(j2+xc*(j3+xc*(j4+xc*(j5+xc*(j6+xc*(j7+xc*j8))))))) - esi = k0+xc*(k1+xc*(k2+xc*(k3+xc*(k4+xc*(k5+xc*(k6+xc*(k7+xc*k8))))))) - rslf = 0.622*esl/(p-esl) - rsif = 0.622*esi/(p-esi) - chi = (t0c-t)/(t0c-tice) - qsat_blend = (1.-chi)*rslf + chi*rsif - end if - - end function qsat_blend - -!================================================================================================================= -!>\ingroup gsd_mynn_edmf -!! \author jaymes- added 22 apr 2015 -!! this function interpolates the latent heats of vaporization and sublimation into a single, temperature- -!! dependent "blended" value, following chaboureau and bechtold (2002) \cite chaboureau_2002, appendix. - - function xl_blend(t,t0c,tice,cice,cliq,cpv,xls,xlv) - implicit none - - real(kind=kind_phys),intent(in):: t,t0c,tice - real(kind=kind_phys),intent(in):: cice,cliq,cpv,xls,xlv - real(kind=kind_phys):: xl_blend,xlvt,xlst,chi - - if(t .ge. t0c) then - xl_blend = xlv + (cpv-cliq)*(t-t0c) !vaporization/condensation - else if (t .le. tice) then - xl_blend = xls + (cpv-cice)*(t-t0c) !sublimation/deposition - else - xlvt = xlv + (cpv-cliq)*(t-t0c) !vaporization/condensation - xlst = xls + (cpv-cice)*(t-t0c) !sublimation/deposition - chi = (t0c-t)/(t0c-tice) - xl_blend = (1.-chi)*xlvt + chi*xlst !blended - end if - - end function xl_blend - -!================================================================================================================= - end module mynn_shared -!================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_mmm/sf_mynn.F b/src/core_atmosphere/physics/physics_mmm/sf_mynn.F deleted file mode 100644 index 9e14099eb..000000000 --- a/src/core_atmosphere/physics/physics_mmm/sf_mynn.F +++ /dev/null @@ -1,2340 +0,0 @@ -!================================================================================================================= - module sf_mynn - - use module_sprayHFs, only: sprayHFs -!------------------------------------------------------------------- -!Modifications implemented by Joseph Olson NOAA/GSL -!The following overviews the current state of this scheme:: -! -! BOTH LAND AND WATER: -!1) Calculation of stability parameter (z/L) taken from Li et al. (2010 BLM) -! for first iteration of first time step; afterwards, exact calculation -! using a brute force iterative method described in Olson et al. (2021 NOAA -! Tech memorandum). This method replaces the iterative technique used in -! module_sf_sfclayrev.F (Jimenez et al. 2013) with mods. Either technique -! gives about the same result. The former technique is retained in this -! module (commented out) for potential subsequent benchmarking. -!2) Fixed isflux=0 option to turn off scalar fluxes, but keep momentum -! fluxes for idealized studies (credit: Anna Fitch). -!3) Kinematic viscosity varies with temperature according to Andreas (1989). -!4) Uses the blended Monin-Obukhov flux-profile relationships COARE (Fairall -! et al 2003) for the unstable regime (a blended mix of Dyer-Hicks 1974 and -! Grachev et al (2000). Uses Cheng and Brutsaert (2005) for stable conditions. -!5) The following overviews the namelist variables that control the -! aerodynamic roughness lengths (over water) and the thermal and moisture -! roughness lengths (defaults are recommended): -! -! LAND only: -! "iz0tlnd" namelist option is used to select the following options: -! (default) =0: Zilitinkevich (1995); Czil now set to 0.085 -! =1: Czil_new (modified according to Chen & Zhang 2008) -! =2: Modified Yang et al (2002, 2008) - generalized for all landuse -! =3: constant zt = z0/7.4 (original form; Garratt 1992) -! -! WATER only: -! "isftcflx" namelist option is used to select the following options: -! (default) =0: z0, zt, and zq from the COARE algorithm. Set COARE_OPT (below) to -! 3.0 (Fairall et al. 2003, default) -! 3.5 (Edson et al 2013) - now with bug fix (Edson et al. 2014, JPO) -! =1: z0 from Davis et al (2008), zt & zq from COARE 3.0/3.5 -! =2: z0 from Davis et al (2008), zt & zq from Garratt (1992) -! =3: z0 from Taylor and Yelland (2004), zt and zq from COARE 3.0/3.5 -! -! SNOW/ICE only: -! Andreas (2002) snow/ice parameterization for thermal and -! moisture roughness is used over all gridpoints with snow deeper than -! 0.1 m. This algorithm calculates a z0 for snow (Andreas et al. 2005, BLM), -! which is only used as part of the thermal and moisture roughness -! length calculation, not to directly impact the surface winds. -! -! Misc: -!1) Added a more elaborate diagnostic for u10 & V10 for high vertical resolution -! model configurations but for most model configurations with depth of -! the lowest half-model level near 10 m, a neutral-log diagnostic is used. -! -!2) Option to activate stochastic parameter perturbations (SPP), which -! perturb z0, zt, and zq, along with many other parameters in the MYNN- -! EDMF scheme. -! -!NOTE: This code was primarily tested in combination with the RUC LSM. -! Performance with the Noah (or other) LSM is relatively unknown. -!------------------------------------------------------------------- - use ccpp_kinds,only: kind_phys - use mynn_shared,only: esat_blend,qsat_blend,xl_blend - - implicit none - private - public:: sf_mynn_run, & - sf_mynn_init, & - sf_mynn_finalize - - - logical,parameter:: debug_code = .false. - integer,parameter:: psi_opt = 0 ! 0 = stable: Cheng and Brustaert - ! unstable: blended COARE - ! 1 = GFS - real,parameter:: wmin = 0.1 - real,parameter:: vconvc = 1.25 - real,parameter:: snowz0 = 0.011 - real,parameter:: coare_opt = 3.0 ! 3.0 or 3.5 - !For debugging purposes: - - real,dimension(0:1000),save:: psim_stab,psim_unstab, & - psih_stab,psih_unstab - - - contains - - -!================================================================================================================= -!>\section arg_table_sf_mynn_init -!!\html\include sf_mynn_init.html -!! - subroutine sf_mynn_init(errmsg,errflg) -!================================================================================================================= - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - call psi_init(psi_opt) - - errmsg = ' ' - errflg = 0 - - end subroutine sf_mynn_init - -!================================================================================================================= -!>\section arg_table_sf_mynn_finalize -!!\html\include sf_mynn_finalize.html -!! - subroutine sf_mynn_finalize(errmsg,errflg) -!================================================================================================================= - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - errmsg = ' ' - errflg = 0 - - end subroutine sf_mynn_finalize - -!================================================================================================================= -!>\section arg_table_sf_mynn_run -!!\html\include sf_mynn_run.html -!! - subroutine sf_mynn_run( & - u1d,v1d,t1d,qv1d,p1d,dz8w1d,rho1d, & - u1d2,v1d2,dz2w1d,cp,g,rovcp,r,xlv, & - psfcpa,chs,chs2,cqs2,cpm,pblh,rmol, & - znt,ust,mavail,zol,mol,regime,psim, & - psih,xland,hfx,qfx,tsk,u10,v10,th2, & - t2,q2,flhc,flqc,snowh,qgh,qsfc,lh, & - gz1oz0,wspd,br,isfflx,dx,svp1,svp2, & - svp3,svpt0,ep1,ep2,karman,ch,qcg, & - itimestep,wstar,qstar,ustm,ck,cka, & - cd,cda,spp_pbl,rstoch1d,isftcflx, & - iz0tlnd,its,ite,errmsg,errflg, & - sgsgustcu,hfx_spr,lh_spr, & - config_gf_gustf & - ) - implicit none -!================================================================================================================= - -!----------------------------- -! scalars: -!----------------------------- - integer,intent(in):: its,ite - integer,intent(in):: itimestep - - real(kind=kind_phys),intent(in):: svp1,svp2,svp3,svpt0,ep1,ep2 - real(kind=kind_phys),intent(in):: karman,cp,g,rovcp,r,xlv - - real(kind=kind_phys),parameter:: prt=1. !prandlt number - real(kind=kind_phys),parameter:: xka=2.4e-5 !molecular diffusivity - - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------- -! namelist options -!----------------------------- - logical,intent(in):: spp_pbl - - integer,intent(in):: isfflx - integer,intent(in),optional:: isftcflx,iz0tlnd - - integer,intent(in):: config_gf_gustf -!----------------------------- -! 1d arrays -!----------------------------- - real(kind=kind_phys),intent(in),dimension(its:ite):: mavail, & - pblh, & - xland, & - tsk, & - psfcpa, & - qcg, & - snowh, & - dx - - real(kind=kind_phys),intent(in),dimension(its:ite):: u1d, & - v1d, & - u1d2, & - v1d2, & - qv1d, & - p1d, & - t1d, & - dz8w1d, & - dz2w1d, & - rho1d - real(kind=kind_phys),intent(in),dimension(its:ite):: & - rstoch1d - - real(kind=kind_phys),intent(in),dimension(its:ite):: & - sgsgustcu - - real(kind=kind_phys),intent(inout),dimension(its:ite):: & - regime, & - hfx, & - qfx, & - lh, & - mol, & - rmol, & - qgh, & - qsfc, & - znt, & - zol, & - ust, & - cpm, & - chs2, & - cqs2, & - chs, & - ch, & - flhc, & - flqc, & - gz1oz0, & - wspd, & - br, & - psim, & - psih - -!----------------------------- -! diagnostic outputs: -!----------------------------- - real(kind=kind_phys),intent(out),dimension(its:ite):: & - u10, & - v10, & - th2, & - t2, & - q2 - - real(kind=kind_phys),intent(out),dimension(its:ite):: & - wstar, & - qstar - - real(kind=kind_phys),intent(out),dimension(its:ite):: hfx_spr,& - lh_spr - - real(kind=kind_phys),intent(out),dimension(its:ite),optional:: & - ck, & - cka, & - cd, & - cda, & - ustm - -!----------------------------- -! local variables -!----------------------------- - integer:: n,i,k,l,yesno - - real(kind=kind_phys):: ep3 - real(kind=kind_phys):: pl,thcon,tvcon,e1 - real(kind=kind_phys):: dthvdz,dthvm,vconv,zol2,zol10,zolza,zolz0,zolzt - real(kind=kind_phys):: dtg,psix,dtthx,dthdz,psix10,psit,psit2, & - psiq,psiq2,psiq10,dzdt - real(kind=kind_phys):: fluxc,vsgd - real(kind=kind_phys):: restar,visc,dqg,oldust,oldtst - - real(kind=kind_phys),dimension(its:ite) :: & - za, & !height of lowest 1/2 sigma level(m) - za2, & !height of 2nd lowest 1/2 sigma level(m) - thv1d, & !theta-v at lowest 1/2 sigma (K) - th1d, & !theta at lowest 1/2 sigma (K) - tc1d, & !t at lowest 1/2 sigma (Celsius) - tv1d, & !tv at lowest 1/2 sigma (K) - qvsh, & !qv at lowest 1/2 sigma (spec humidity) - psih2, & !m-o stability functions at z=2 m - psim10, & !m-o stability functions at z=10 m - psih10, & !m-o stability functions at z=10 m - wspdi, & - z_q, & !moisture roughness length - z_t, & !thermalroughness length - ZNTstoch, & - govrth, & !g/theta - thgb, & !theta at ground - thvgb, & !theta-v at ground - psfc, & !press at surface (Pa/1000) - qsfcmr, & !qv at surface (mixing ratio, kg/kg) - gz2oz0, & !log((2.0+znt(i))/znt(i)) - gz10oz0, & !log((10.+znt(i))/znt(i)) - gz2ozt, & !log((2.0+z_t(i))/z_t(i)) - gz10ozt, & !log((10.+z_t(i))/z_t(i)) - gz1ozt, & !log((za(i)+z_t(i))/z_t(i)) - zratio !z0/zt - -!----------------------------------------------------------------------------------------------------------------- -!--- Parameterization of "Seastate-Dependent Air-Sea Heat -!--- Fluxes with Sea Spray in High Winds. Ref: Barr et al. (2023)" -!--- Implemented by Saulo Freitas (Oct 2024) - - character(len=50) :: whichssgf - logical :: paramWaves - real(kind=kind_phys):: z_1,t_1,q_1,U_1,gf,p_0,t_0,eps,dcp,swh,mss,Lmo,z0,z0t,z0q,& - z_ref,dHS1_spr,dHL1_spr,dthstar_spr,dqstar_spr,& - dtref_spr,dqref_spr,dsref_spr,tau,H_S0pr,H_L0pr,thvstar,M_spr,& - H_Tspr,H_Rspr,H_SNspr,H_Lspr,alpha_S,beta_S,beta_L,gamma_S,& - gamma_L,dthvstar_spr,dthref_spr -!----------------------------------------------------------------------------------------------------------------- - ep3 = 1.-ep2 - - do i=its,ite - !convert ground & lowest layer temperature to potential temperature: - !psfc cmb - psfc(i)=psfcpa(i)/1000. - thgb(i)=tsk(i)*(100./psfc(i))**rovcp !(K) - !PL cmb - pl=p1d(i)/1000. - thcon=(100./pl)**rovcp - th1d(i)=t1d(i)*thcon !(Theta, K) - tc1d(i)=t1d(i)-273.15 !(T, Celsius) - - !convert to virtual temperature - qvsh(i)=qv1d(i)/(1.+qv1d(i)) !convert to spec hum (kg/kg) - tvcon=(1.+ep1*qvsh(i)) - thv1d(i)=th1d(i)*tvcon !(K) - tv1d(i)=t1d(i)*tvcon !(K) - - !rho1d(i)=psfcpa(i)/(r*tv1d(i)) !now using value calculated in sfc driver - za(i)=0.5*dz8w1d(i) !height of first half-sigma level - za2(i)=dz8w1d(i) + 0.5*dz2w1d(i) !height of 2nd half-sigma level - govrth(i)=g/th1d(i) - enddo - - do i=its,ite - if (tsk(i) .lt. 273.15) then - !saturation vapor pressure wrt ice (svp1=.6112; 10*mb) - e1=svp1*exp(4648*(1./273.15 - 1./tsk(i)) - & - & 11.64*log(273.15/tsk(i)) + 0.02265*(273.15 - tsk(i))) - else - !saturation vapor pressure wrt water (Bolton 1980) - e1=svp1*exp(svp2*(tsk(i)-svpt0)/(tsk(i)-svp3)) - endif - !for land points, qsfc can come from lsm, only recompute over water - if (xland(i).gt.1.5 .or. qsfc(i).le.0.0) then !water - qsfc(i)=ep2*e1/(psfc(i)-ep3*e1) !specific humidity - qsfcmr(i)=ep2*e1/(psfc(i)-e1) !mixing ratio - else !land - qsfcmr(i)=qsfc(i)/(1.-qsfc(i)) - endif - - !qgh changed to use lowest-level air temp consistent with myjsfc change - !q2sat = qgh in LSM - if (tsk(i) .lt. 273.15) then - !saturation vapor pressure wrt ice - e1=svp1*exp(4648*(1./273.15 - 1./t1d(i)) - & - & 11.64*log(273.15/t1d(i)) + 0.02265*(273.15 - t1d(i))) - else - !saturation vapor pressure wrt water (Bolton 1980) - e1=svp1*exp(svp2*(t1d(i)-svpt0)/(t1d(i)-svp3)) - endif - pl=p1d(i)/1000. - !qgh(i)=ep2*e1/(pl-ep_3*e1) !specific humidity - qgh(i)=ep2*e1/(pl-e1) !mixing ratio - cpm(i)=cp*(1.+0.84*qv1d(i)) - enddo - - do i=its,ite - wspd(i)=sqrt(u1d(i)*u1d(i)+v1d(i)*v1d(i)) - - !tgs:thvgb(i)=thgb(i)*(1.+ep1*qsfc(i)*mavail(i)) - thvgb(i)=thgb(i)*(1.+ep1*qsfc(i)) - - dthdz=(th1d(i)-thgb(i)) - dthvdz=(thv1d(i)-thvgb(i)) - - !-------------------------------------------------------- - ! Calculate the convective velocity scale (WSTAR) and - ! subgrid-scale velocity (VSGD) following Beljaars (1995, QJRMS) - ! and Mahrt and Sun (1995, MWR), respectively - !------------------------------------------------------- - !Use Beljaars over land and water - fluxc = max(hfx(i)/rho1d(i)/cp & - & + ep1*thvgb(i)*qfx(i)/rho1d(i),0.) - !wstar(i) = vconvc*(g/tsk(i)*pblh(i)*fluxc)**.33 - if (xland(i).gt.1.5 .or. qsfc(i).le.0.0) then !water - wstar(i) = vconvc*(g/tsk(i)*pblh(i)*fluxc)**.33 - else !land - !increase height scale, assuming that the non-local transoport - !from the mass-flux (plume) mixing exceedsd the pblh. - wstar(i) = vconvc*(g/tsk(i)*min(1.5*pblh(i),4000.)*fluxc)**.33 - endif - !-------------------------------------------------------- - ! Mahrt and Sun low-res correction - ! (for 13 km ~ 0.37 m/s; for 3 km == 0 m/s) - !-------------------------------------------------------- - vsgd = 0.32 * (max(dx(i)/5000.-1.,0.))**.33 - - !-srf: adding sgs gustiness from convection scheme, currently only for GF MONAN - !-srf: orig "wspd(i)=sqrt(wspd(i)*wspd(i)+wstar(i)*wstar(i)+vsgd*vsgd)" - wspd(i)=sqrt(wspd(i)*wspd(i)+wstar(i)*wstar(i)+vsgd*vsgd+sgsgustcu(i)*sgsgustcu(i)) - ! - wspd(i)=max(wspd(i),wmin) - - !-------------------------------------------------------- - ! calculate the bulk richardson number of surface layer, - ! according to Akb(1976), Eq(12). - !-------------------------------------------------------- - br(i)=govrth(i)*za(i)*dthvdz/(wspd(i)*wspd(i)) - if (itimestep == 1) then - !set limits according to Li et al. (2010) boundary-layer meteorol (p.158) - br(i)=max(br(i),-2.0) - br(i)=min(br(i),2.0) - else - br(i)=max(br(i),-4.0) - br(i)=min(br(i), 4.0) - endif - - ! if previously unstable, do not let into regimes 1 and 2 (stable) - ! if (itimestep .gt. 1) then - ! if(mol(i).lt.0.)br(i)=min(br(i),0.0) - !endif - - enddo - - 1006 format(a,f7.3,a,f9.4,a,f9.5,a,f9.4) - 1007 format(a,f2.0,a,f6.2,a,f7.3,a,f7.2) - -!-------------------------------------------------------------------- -!-------------------------------------------------------------------- -!--- begin i-loop -!-------------------------------------------------------------------- -!-------------------------------------------------------------------- - - do i=its,ite - - !compute kinematic viscosity (m2/s) Andreas (1989) CRREL Rep. 89-11 - !valid between -173 and 277 degrees C. - visc=1.326e-5*(1. + 6.542e-3*tc1d(i) + 8.301e-6*tc1d(i)*tc1d(i) & - - 4.84e-9*tc1d(i)*tc1d(i)*tc1d(i)) - - if ((xland(i)-1.5).ge.0) then - !-------------------------------------- - ! water - !-------------------------------------- - ! calculate z0 (znt) - !-------------------------------------- - if ( present(isftcflx) ) then - if ( isftcflx .eq. 0 ) then - if (coare_opt .eq. 3.0) then - !COARE 3.0 (misleading subroutine name) - call charnock_1955(znt(i),ust(i),wspd(i),visc,za(i)) - else - !COARE 3.5 - call edson_etal_2013(znt(i),ust(i),wspd(i),visc,za(i)) - endif - elseif ( isftcflx .eq. 1 .or. isftcflx .eq. 2 ) then - call davis_etal_2008(znt(i),ust(i)) - elseif ( isftcflx .eq. 3 ) then - call taylor_yelland_2001(znt(i),ust(i),wspd(i)) - elseif ( isftcflx .eq. 4 ) then - if (coare_opt .eq. 3.0) then - !COARE 3.0 (MISLEADING SUBROUTINE NAME) - call charnock_1955(znt(i),ust(i),wspd(i),visc,za(i)) - else - !COARE 3.5 - call edson_etal_2013(znt(i),ust(i),wspd(i),visc,za(i)) - endif - endif - else - !default to COARE 3.0/3.5 - if (coare_opt .eq. 3.0) then - !COARE 3.0 - call charnock_1955(znt(i),ust(i),wspd(i),visc,za(i)) - else - !COARE 3.5 - call edson_etal_2013(znt(i),ust(i),wspd(i),visc,za(i)) - endif - endif - - !add stochastic perturbaction of ZNT - if (spp_pbl) then - zntstoch(i) = max(znt(i) + znt(i)*1.0*rstoch1d(i), 1e-6) - else - zntstoch(i) = znt(i) - endif - - !compute roughness reynolds number (restar) using new znt - ! AHW: Garrattt formula: Calculate roughness Reynolds number - ! Kinematic viscosity of air (linear approx to - ! temp dependence at sea level) - restar=max(ust(i)*zntstoch(i)/visc, 0.1) - - !-------------------------------------- - !calculate z_t and z_q - !-------------------------------------- - if ( present(isftcflx) ) then - if ( isftcflx .eq. 0 ) then - if (coare_opt .eq. 3.0) then - call fairall_etal_2003(z_t(i),z_q(i),restar,ust(i),visc,rstoch1d(i),spp_pbl) - else - !presumably, this will be published soon, but hasn't yet - call fairall_etal_2014(z_t(i),z_q(i),restar,ust(i),visc,rstoch1d(i),spp_pbl) - endif - elseif ( isftcflx .eq. 1 ) then - if (coare_opt .eq. 3.0) then - call fairall_etal_2003(z_t(i),z_q(i),restar,ust(i),visc,rstoch1d(i),spp_pbl) - else - call fairall_etal_2014(z_t(i),z_q(i),restar,ust(i),visc,rstoch1d(i),spp_pbl) - endif - elseif ( isftcflx .eq. 2 ) then - call garratt_1992(z_t(i),z_q(i),zntstoch(i),restar,xland(i)) - elseif ( isftcflx .eq. 3 ) then - if (coare_opt .eq. 3.0) then - call fairall_etal_2003(z_t(i),z_q(i),restar,ust(i),visc,rstoch1d(i),spp_pbl) - else - call fairall_etal_2014(z_t(i),z_q(i),restar,ust(i),visc,rstoch1d(i),spp_pbl) - endif - endif - else - !default to COARE 3.0/3.5 - if (coare_opt .eq. 3.0) then - call fairall_etal_2003(z_t(i),z_q(i),restar,ust(i),visc,rstoch1d(i),spp_pbl) - else - call fairall_etal_2014(z_t(i),z_q(i),restar,ust(i),visc,rstoch1d(i),spp_pbl) - endif - endif - - else - - !add stochastic perturbaction of znt - if (spp_pbl) then - zntstoch(i) = max(znt(i) + znt(i)*1.0*rstoch1d(i), 1e-6) - else - zntstoch(i) = znt(i) - endif - - !-------------------------------------- - ! land - !-------------------------------------- - !compute roughness reynolds number (restar) using default znt - restar=max(ust(i)*zntstoch(i)/visc, 0.1) - - !-------------------------------------- - ! get z_t and z_q - !-------------------------------------- - !check for snow/ice points over land - if ( snowh(i) .ge. 0.1) then - call andreas_2002(zntstoch(i),visc,ust(i),z_t(i),z_q(i)) - else - if ( present(iz0tlnd) ) then - if ( iz0tlnd .le. 1 ) then - call zilitinkevich_1995(zntstoch(i),z_t(i),z_q(i),restar,& - ust(i),karman,xland(i),iz0tlnd,spp_pbl,rstoch1d(i)) - elseif ( iz0tlnd .eq. 2 ) then - call yang_2008(zntstoch(i),z_t(i),z_q(i),ust(i),mol(i),& - qstar(i),restar,visc,xland(i)) - elseif ( iz0tlnd .eq. 3 ) then - !original mynn in wrf-arw used this form: - call garratt_1992(z_t(i),z_q(i),zntstoch(i),restar,xland(i)) - endif - else - !default to zilitinkevich - call zilitinkevich_1995(zntstoch(i),z_t(i),z_q(i),restar,& - ust(i),karman,xland(i),0,spp_pbl,rstoch1d(i)) - endif - endif - - endif - zratio(i)=zntstoch(i)/z_t(i) !needed for Li et al. - - gz1oz0(i)= log((za(i)+zntstoch(i))/zntstoch(i)) - gz1ozt(i)= log((za(i)+zntstoch(i))/z_t(i)) - gz2oz0(i)= log((2.0+zntstoch(i))/zntstoch(i)) - gz2ozt(i)= log((2.0+zntstoch(i))/z_t(i)) - gz10oz0(i)=log((10.+zntstoch(i))/zntstoch(i)) - gz10ozt(i)=log((10.+zntstoch(i))/z_t(i)) - - !-------------------------------------------------------------------- - !--- DIAGNOSE BASIC PARAMETERS FOR THE APPROPRIATE STABILITY CLASS: - ! - ! THE STABILITY CLASSES ARE DETERMINED BY BR (BULK RICHARDSON NO.). - ! - ! CRITERIA FOR THE CLASSES ARE AS FOLLOWS: - ! - ! 1. BR .GE. 0.2; - ! REPRESENTS NIGHTTIME STABLE CONDITIONS (REGIME=1), - ! - ! 2. BR .LT. 0.2 .AND. BR .GT. 0.0; - ! REPRESENTS DAMPED MECHANICAL TURBULENT CONDITIONS - ! (REGIME=2), - ! - ! 3. BR .EQ. 0.0 - ! REPRESENTS FORCED CONVECTION CONDITIONS (REGIME=3), - ! - ! 4. BR .LT. 0.0 - ! REPRESENTS FREE CONVECTION CONDITIONS (REGIME=4). - ! - !-------------------------------------------------------------------- - if (br(i) .gt. 0.0) then - if (br(i) .gt. 0.2) then - !---class 1; stable (nighttime) conditions: - regime(i)=1. - else - !---class 2; damped mechanical turbulence: - regime(i)=2. - endif - - !compute z/l first guess: - if (itimestep .le. 1) then - call li_etal_2010(zol(i),br(i),za(i)/zntstoch(i),zratio(i)) - else - zol(i)=za(i)*karman*g*mol(i)/(th1d(i)*max(ust(i)*ust(i),0.0001)) - zol(i)=max(zol(i),0.0) - zol(i)=min(zol(i),20.) - endif - - !Use Pedros iterative function to find z/L - !zol(i)=zolri(br(i),za(i),zntstoch(i),z_t(i),zol(i),psi_opt) - !Use brute-force method - zol(i)=zolrib(br(i),za(i),zntstoch(i),z_t(i),gz1oz0(i),gz1ozt(i),zol(i),psi_opt) - zol(i)=max(zol(i),0.0) - zol(i)=min(zol(i),20.) - - zolzt = zol(i)*z_t(i)/za(i) ! zt/l - zolz0 = zol(i)*zntstoch(i)/za(i) ! z0/l - zolza = zol(i)*(za(i)+zntstoch(i))/za(i) ! (z+z0/l - zol10 = zol(i)*(10.+zntstoch(i))/za(i) ! (10+z0)/l - zol2 = zol(i)*(2.+zntstoch(i))/za(i) ! (2+z0)/l - - !compute psim and psih - if ((xland(i)-1.5).ge.0) then - ! water - !call psi_suselj_sood_2010(psim(i),psih(i),zol(i)) - !call psi_beljaars_holtslag_1991(psim(i),psih(i),zol(i)) - !call psi_businger_1971(psim(i),psih(i),zol(i)) - !call psi_dyerhicks(psim(i),psih(i),zol(i),z_t(i),zntstoch(i),za(i)) - !call psi_cb2005(psim(i),psih(i),zolza,zolz0) - ! or use tables - psim(i)=psim_stable(zolza,psi_opt)-psim_stable(zolz0,psi_opt) - psih(i)=psih_stable(zolza,psi_opt)-psih_stable(zolzt,psi_opt) - psim10(i)=psim_stable(zol10,psi_opt)-psim_stable(zolz0,psi_opt) - psih10(i)=psih_stable(zol10,psi_opt)-psih_stable(zolz0,psi_opt) - psih2(i)=psih_stable(zol2,psi_opt)-psih_stable(zolz0,psi_opt) - else - ! land - !call psi_beljaars_holtslag_1991(psim(i),psih(i),zol(i)) - !call psi_businger_1971(psim(i),psih(i),zol(i)) - !call psi_zilitinkevich_esau_2007(psim(i),psih(i),zol(i)) - !call psi_dyerhicks(psim(i),psih(i),zol(i),z_t(i),zntstoch(i),za(i)) - !call psi_cb2005(psim(i),psih(i),zolza,zolz0) - ! or use tables - psim(i)=psim_stable(zolza,psi_opt)-psim_stable(zolz0,psi_opt) - psih(i)=psih_stable(zolza,psi_opt)-psih_stable(zolzt,psi_opt) - psim10(i)=psim_stable(zol10,psi_opt)-psim_stable(zolz0,psi_opt) - psih10(i)=psih_stable(zol10,psi_opt)-psih_stable(zolz0,psi_opt) - psih2(i)=psih_stable(zol2,psi_opt)-psih_stable(zolz0,psi_opt) - endif - - !psim10(i)=10./za(i)*psim(i) - !psih10(i)=10./za(i)*psih(i) - !psim2(i)=2./za(i)*psim(i) - !psih2(i)=2./za(i)*psih(i) - - ! 1.0 over monin-obukhov length - rmol(i)= zol(i)/za(i) - - elseif(br(i) .eq. 0.) then - !========================================================= - !-----class 3; forced convection/neutral: - !========================================================= - regime(i)=3. - - psim(i)=0.0 - psih(i)=psim(i) - psim10(i)=0. - psih10(i)=0. - psih2(i)=0. - - zol(i)=0. - !if (ust(i) .lt. 0.01) then - ! zol(i)=br(i)*gz1oz0(i) - !else - ! zol(i)=karman*govrth(i)*za(i)*mol(i)/(max(ust(i)*ust(i),0.001)) - !endif - rmol(i) = zol(i)/za(i) - - elseif(br(i) .lt. 0.)then - !========================================================== - !-----class 4; free convection: - !========================================================== - regime(i)=4. - - !compute z/l first guess: - if (itimestep .le. 1) then - call li_etal_2010(zol(i),br(i),za(i)/zntstoch(i),zratio(i)) - else - zol(i)=za(i)*karman*g*mol(i)/(th1d(i)*max(ust(i)*ust(i),0.001)) - zol(i)=max(zol(i),-20.0) - zol(i)=min(zol(i),0.0) - endif - - !Use Pedros iterative function to find z/L - !zol(I)=zolri(br(I),ZA(I),ZNTstoch(I),z_t(I),ZOL(I),psi_opt) - !Use alternative method - zol(i)=zolrib(br(i),za(i),zntstoch(i),z_t(i),gz1oz0(i),gz1ozt(i),zol(i),psi_opt) - zol(i)=max(zol(i),-20.0) - zol(i)=min(zol(i),0.0) - - zolzt = zol(i)*z_t(i)/za(i) ! zt/l - zolz0 = zol(i)*zntstoch(i)/za(i) ! z0/l - zolza = zol(i)*(za(i)+zntstoch(i))/za(i) ! (z+z0/l - zol10 = zol(i)*(10.+zntstoch(i))/za(i) ! (10+z0)/l - zol2 = zol(i)*(2.+zntstoch(i))/za(i) ! (2+z0)/l - - !compute psim and psih - if ((xland(i)-1.5).ge.0) then - ! water - !call psi_suselj_sood_2010(psim(i),psih(i),zol(i)) - !call psi_hogstrom_1996(psim(i),psih(i),zol(i), z_t(i), zntstoch(i), za(i)) - !call psi_businger_1971(psim(i),psih(i),zol(i)) - !call psi_dyerhicks(psim(i),psih(i),zol(i),z_t(i),zntstoch(i),za(i)) - ! use tables - psim(i)=psim_unstable(zolza,psi_opt)-psim_unstable(zolz0,psi_opt) - psih(i)=psih_unstable(zolza,psi_opt)-psih_unstable(zolzt,psi_opt) - psim10(i)=psim_unstable(zol10,psi_opt)-psim_unstable(zolz0,psi_opt) - psih10(i)=psih_unstable(zol10,psi_opt)-psih_unstable(zolz0,psi_opt) - psih2(i)=psih_unstable(zol2,psi_opt)-psih_unstable(zolz0,psi_opt) - else - ! land - !call psi_hogstrom_1996(psim(i),psih(i),zol(i), z_t(i), zntstoch(i), za(i)) - !call psi_businger_1971(psim(i),psih(i),zol(i)) - !call psi_dyerhicks(psim(i),psih(i),zol(i),z_t(i),zntstoch(i),za(i)) - ! use tables - psim(i)=psim_unstable(zolza,psi_opt)-psim_unstable(zolz0,psi_opt) - psih(i)=psih_unstable(zolza,psi_opt)-psih_unstable(zolzt,psi_opt) - psim10(i)=psim_unstable(zol10,psi_opt)-psim_unstable(zolz0,psi_opt) - psih10(i)=psih_unstable(zol10,psi_opt)-psih_unstable(zolz0,psi_opt) - psih2(i)=psih_unstable(zol2,psi_opt)-psih_unstable(zolz0,psi_opt) - endif - - !psim10(i)=10./za(i)*psim(i) - !psih2(i)=2./za(i)*psih(i) - - !---limit psih and psim in the case of thin layers and - !---high roughness. this prevents denominator in fluxes - !---from getting too small - psih(i)=min(psih(i),0.9*gz1ozt(i)) - psim(i)=min(psim(i),0.9*gz1oz0(i)) - psih2(i)=min(psih2(i),0.9*gz2ozt(i)) - psim10(i)=min(psim10(i),0.9*gz10oz0(i)) - psih10(i)=min(psih10(i),0.9*gz10ozt(i)) - - rmol(i) = zol(i)/za(i) - - endif - - !------------------------------------------------------------ - !-----compute the frictional velocity: - !------------------------------------------------------------ - ! Za(1982) Eqs(2.60),(2.61). - psix=gz1oz0(i)-psim(i) - psix10=gz10oz0(i)-psim10(i) - ! to prevent oscillations average with old value - oldust = ust(i) - ust(i)=0.5*ust(i)+0.5*karman*wspd(i)/psix - !non-averaged: ust(i)=karman*wspd(i)/psix - - ! compute u* without vconv for use in hfx calc when isftcflx > 0 - wspdi(i)=max(sqrt(u1d(i)*u1d(i)+v1d(i)*v1d(i)), wmin) - if ( present(ustm) ) then - ustm(i)=0.5*ustm(i)+0.5*karman*wspdi(i)/psix - endif - - if ((xland(i)-1.5).lt.0.) then !land - ust(i)=max(ust(i),0.005) !further relaxing this limit - no need to go lower - !keep ustm = ust over land. - if ( present(ustm) ) ustm(i)=ust(i) - endif - - !------------------------------------------------------------ - !-----compute the thermal and moisture resistance (psiq and psit): - !------------------------------------------------------------ - ! lower limit added to prevent large flhc in soil model - ! activates in unstable conditions with thin layers or high z0 - gz1ozt(i)= log((za(i)+zntstoch(i))/z_t(i)) - gz2ozt(i)= log((2.0+zntstoch(i))/z_t(i)) - - psit =max(gz1ozt(i)-psih(i) ,1.) - psit2=max(gz2ozt(i)-psih2(i),1.) - - psiq=max(log((za(i)+zntstoch(i))/z_q(i))-psih(i) ,1.0) - psiq2=max(log((2.0+zntstoch(i))/z_q(i))-psih2(i) ,1.0) - psiq10=max(log((10.0+zntstoch(i))/z_q(i))-psih10(i) ,1.0) - !---------------------------------------------------- - !compute the temperature scale (or friction temperature, T*) - !---------------------------------------------------- - dtg=thv1d(i)-thvgb(i) - oldtst=mol(i) - mol(i)=karman*dtg/psit/prt - !t_star(i) = -hfx(i)/(ust(i)*cpm(i)*rho1d(i)) - !t_star(i) = mol(i) - !---------------------------------------------------- - !compute the moisture scale (or q*) - dqg=(qvsh(i)-qsfc(i))*1000. !(kg/kg -> g/kg) - qstar(i)=karman*dqg/psiq/prt - - !if () then - ! write(*,1001)"regime:",regime(i)," z/l:",zol(i)," u*:",ust(i)," tstar:",mol(i) - ! write(*,1002)"psim:",psim(i)," psih:",psih(i)," w*:",wstar(i)," dthv:",thv1d(i)-thvgb(i) - ! write(*,1003)"cpm:",cpm(i)," rho1d:",rho1d(i)," l:",zol(i)/za(i)," dth:",th1d(i)-thgb(i) - ! write(*,1004)"z0/zt:",zratio(i)," z0:",zntstoch(i)," zt:",z_t(i)," za:",za(i) - ! write(*,1005)"re:",restar," mavail:",mavail(i)," qsfc(i):",qsfc(i)," qvsh(i):",qvsh(i) - ! print*,"visc=",visc," z0:",zntstoch(i)," t1d(i):",t1d(i) - ! write(*,*)"=============================================" - !endif - - enddo ! end i-loop - - 1000 format(a,f6.1, a,f6.1, a,f5.1, a,f7.1) - 1001 format(a,f2.0, a,f10.4,a,f5.3, a,f11.5) - 1002 format(a,f7.2, a,f7.2, a,f7.2, a,f10.3) - 1003 format(a,f7.2, a,f7.2, a,f10.3,a,f10.3) - 1004 format(a,f11.3,a,f9.7, a,f9.7, a,f6.2, a,f10.3) - 1005 format(a,f9.2,a,f6.4,a,f7.4,a,f7.4) - - !---------------------------------------------------------- - ! compute surface heat and moisture fluxes - !---------------------------------------------------------- - do i=its,ite - - !For computing the diagnostics and fluxes (below), whether the fluxes - !are turned off or on, we need the following: - psix=gz1oz0(i)-psim(i) - psix10=gz10oz0(i)-psim10(i) - - psit =max(gz1ozt(i)-psih(i), 1.0) - psit2=max(gz2ozt(i)-psih2(i),1.0) - - psiq=max(log((za(i)+z_q(i))/z_q(i))-psih(i) ,1.0) - psiq2=max(log((2.0+z_q(i))/z_q(i))-psih2(i) ,1.0) - psiq10=max(log((10.0+z_q(i))/z_q(i))-psih10(i) ,1.0) - - if (isfflx .lt. 1) then - - qfx(i) = 0. - hfx(i) = 0. - flhc(i) = 0. - flqc(i) = 0. - lh(i) = 0. - chs(i) = 0. - ch(i) = 0. - chs2(i) = 0. - cqs2(i) = 0. - if(present(ck) .and. present(cd) .and. & - &present(cka) .and. present(cda)) then - ck(i) = 0. - cd(i) = 0. - cka(i)= 0. - cda(i)= 0. - endif - else - - !------------------------------------------ - ! calculate the exchange coefficients for heat (flhc) - ! and moisture (flqc) - !------------------------------------------ - flqc(i)=rho1d(i)*mavail(i)*ust(i)*karman/psiq - flhc(i)=rho1d(i)*cpm(i)*ust(i)*karman/psit - - !---------------------------------- - ! compute surface moisture flux: - !---------------------------------- - qfx(i)=flqc(i)*(qsfcmr(i)-qv1d(i)) - !joe: qfx(i)=max(qfx(i),0.) !originally did not allow neg qfx - qfx(i)=max(qfx(i),-0.02) !allows small neg qfx, like myj - lh(i)=xlv*qfx(i) - - !---------------------------------- - ! compute surface heat flux: - !---------------------------------- - if(xland(i)-1.5.gt.0.)then !water - hfx(i)=flhc(i)*(thgb(i)-th1d(i)) - if ( present(isftcflx) ) then - if ( isftcflx.ne.0 ) then - ! ahw: add dissipative heating term - hfx(i)=hfx(i)+rho1d(i)*ustm(i)*ustm(i)*wspdi(i) - endif - endif - elseif(xland(i)-1.5.lt.0.)then !land - hfx(i)=flhc(i)*(thgb(i)-th1d(i)) - hfx(i)=max(hfx(i),-250.) - endif - - !chs(i)=ust(i)*karman/(alog(karman*ust(i)*za(i) & - ! /xka+za(i)/zl)-psih(i)) - - chs(i)=ust(i)*karman/psit - - ! the exchange coefficient for cloud water is assumed to be the - ! same as that for heat. ch is multiplied by wspd. - - !ch(i)=chs(i) - ch(i)=flhc(i)/( cpm(i)*rho1d(i) ) - - !these are used for 2-m diagnostics only - cqs2(i)=ust(i)*karman/psiq2 - chs2(i)=ust(i)*karman/psit2 - - if(present(ck) .and. present(cd) .and. & - &present(cka) .and. present(cda)) then - ck(i)=(karman/psix10)*(karman/psiq10) - cd(i)=(karman/psix10)*(karman/psix10) - cka(i)=(karman/psix)*(karman/psiq) - cda(i)=(karman/psix)*(karman/psix) - endif - - endif !end isfflx option - - !----------------------------------------------------- - !compute diagnostics - !----------------------------------------------------- - !compute 10 m wnds - !----------------------------------------------------- - ! If the lowest model level is close to 10-m, use it - ! instead of the flux-based diagnostic formula. - if (za(i) .le. 7.0) then - ! high vertical resolution - if(za2(i) .gt. 7.0 .and. za2(i) .lt. 13.0) then - !use 2nd model level - u10(i)=u1d2(i) - v10(i)=v1d2(i) - else - u10(i)=u1d(i)*log(10./zntstoch(i))/log(za(i)/zntstoch(i)) - v10(i)=v1d(i)*log(10./zntstoch(i))/log(za(i)/zntstoch(i)) - endif - elseif(za(i) .gt. 7.0 .and. za(i) .lt. 13.0) then - !moderate vertical resolution - !u10(i)=u1d(i)*psix10/psix - !v10(i)=v1d(i)*psix10/psix - !use neutral-log: - u10(i)=u1d(i)*log(10./zntstoch(i))/log(za(i)/zntstoch(i)) - v10(i)=v1d(i)*log(10./zntstoch(i))/log(za(i)/zntstoch(i)) - else - ! very coarse vertical resolution - u10(i)=u1d(i)*psix10/psix - v10(i)=v1d(i)*psix10/psix - endif - - !----------------------------------------------------- - !compute 2m t, th, and q - !these will be overwritten for land points in the lsm - !----------------------------------------------------- - dtg=th1d(i)-thgb(i) - th2(i)=thgb(i)+dtg*psit2/psit - !*** be certain that the 2-m theta is bracketed by - !*** the values at the surface and lowest model level. - if ((th1d(i)>thgb(i) .and. (th2(i)th1d(i))) .or. & - (th1d(i)thgb(i) .or. th2(i) 1200. .or. hfx(i) < -700.)then - print*,"suspicious values in mynn sfclayer",& - i, "hfx: ",hfx(i) - yesno = 1 - endif - if (lh(i) > 1200. .or. lh(i) < -700.)then - print*,"suspicious values in mynn sfclayer",& - i, "lh: ",lh(i) - yesno = 1 - endif - if (ust(i) < 0.0 .or. ust(i) > 4.0 )then - print*,"suspicious values in mynn sfclayer",& - i, "ust: ",ust(i) - yesno = 1 - endif - if (wstar(i)<0.0 .or. wstar(i) > 6.0)then - print*,"suspicious values in mynn sfclayer",& - i, "wstar: ",wstar(i) - yesno = 1 - endif - if (rho1d(i)<0.0 .or. rho1d(i) > 1.6 )then - print*,"suspicious values in mynn sfclayer",& - i, "rho: ",rho1d(i) - yesno = 1 - endif - if (qsfc(i)*1000. <0.0 .or. qsfc(i)*1000. >40.)then - print*,"suspicious values in mynn sfclayer",& - i, "qsfc: ",qsfc(i) - yesno = 1 - endif - if (pblh(i)<0. .or. pblh(i)>6000.)then - print*,"suspicious values in mynn sfclayer",& - i, "pblh: ",pblh(i) - yesno = 1 - endif - - if (yesno == 1) then - print*," other info:" - write(*,1001)"regime:",regime(i)," z/l:",zol(i)," u*:",ust(i),& - " tstar:",mol(i) - write(*,1002)"psim:",psim(i)," psih:",psih(i)," w*:",wstar(i),& - " dthv:",thv1d(i)-thvgb(i) - write(*,1003)"cpm:",cpm(i)," rho1d:",rho1d(i)," l:",& - zol(i)/za(i)," dth:",th1d(i)-thgb(i) - write(*,*)" z0:",zntstoch(i)," zt:",z_t(i)," za:",za(i) - write(*,1005)"re:",restar," mavail:",mavail(i)," qsfc(i):",& - qsfc(i)," qvsh(i):",qvsh(i) - print*,"psix=",psix," z0:",zntstoch(i)," t1d(i):",t1d(i) - write(*,*)"=============================================" - endif - endif - - enddo !end i-loop - ! - !------------------------------------------------------------ - !--- Implemented in MPAS/MONAN models by S.R.Freitas (INPE @ Jan 2025) - !--- Including the parameterization "Seastate-Dependent Air-Sea Heat - !--- " Fluxes with Sea Spray in High Winds. Ref: Barr et al. (2023, JAMES)" - !--- GitHub ref: https://github.com/bwbarr/sprayHFs - !--- a) if using the seastate-based model BCF23_Seastate, all wave - !--- parameters are required (eps, dcp, swh, mss). - !--- b) if using a wind-based model (F94_MOM80 or F94_BCF23), swh is still required - !--- (for calculating the droplet settling timescale), but the remaining wave - !--- parameters (eps, dcp, mss) are not used (should set to zero) - if(config_gf_gustf == 2) then - whichSSGF = 'BCF23_Seastate' - paramWaves = .TRUE. - do i=its,ite - hfx_spr(i) = 0.0 - lh_spr (i) = 0.0 - if ((xland(i)-1.5) < 0.) cycle ! if xland < 1.5 => land -! for test if ((xland(i)-1.5) < 0. .or. sqrt( u10(i)*u10(i) + v10(i)*v10(i)) < 10.0 ) cycle ! if xland < 1.5 => land - - !-------------------------------------- - ! water - !-------------------------------------- - z_1 = za (i) - t_1 = t1d (i) - q_1 = qvsh(i) - U_1 = wspd(i) ! check - p_0 = psfcpa(i) - t_0 = tsk (i) - gf = 1. ! use gf = wspd(i)/U_1. - eps = 0. - dcp = 0. - swh = 0. - mss = 0. - ! Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation. - !Lmo = 1.0/rmol (i) - Lmo = 1.0/(rmol (i) + 1.e-12) - z0 = zntstoch(i) !_or_ znt(i) - z0t = z_t(i) - z0q = z_q(i) - z_ref = 2. - - !dHS1_spr = 0.; dHL1_spr = 0.; dthstar_spr = 0.; dqstar_spr = 0.; dthvstar_spr = 0. - !dthref_spr = 0.; dtref_spr = 0.; dqref_spr = 0.; dsref_spr = 0.; tau = 0.; H_S0pr = 0.; H_L0pr = 0.; M_spr = 0. - !H_Tspr = 0.; H_Rspr = 0.; H_SNspr = 0.; H_Lspr = 0.; alpha_S = 0.; beta_S = 0.; beta_L = 0.; gamma_S = 0.; gamma_L = 0. - - call sprayHFs(z_1,t_1,q_1,U_1,gf,p_0,t_0,eps,dcp,swh,mss,Lmo,z0,z0t,z0q,& - z_ref,whichSSGF,paramWaves,dHS1_spr,dHL1_spr,dthstar_spr,& - dqstar_spr,dthvstar_spr,dthref_spr,dtref_spr,dqref_spr,dsref_spr,& - tau,H_S0pr,H_L0pr,M_spr,H_Tspr,H_Rspr,H_SNspr,H_Lspr,alpha_S,& - beta_S,beta_L,gamma_S,gamma_L) - !if(abs(dHL1_spr)>0.0001) then - ! print*,"INP",z_1,t_1,q_1,U_1,p_0,t_0,Lmo,z0,z0t,z0q,z_ref,whichSSGF,paramWaves - ! print*,"FLX",U_1,dHS1_spr,dHL1_spr,dthvstar_spr - !endif - - !-- limit max/min to 300 W/m2 (Ben Barr recomendation 2025) - dHS1_spr = min(300., abs(dHS1_spr))*sign(1.,dHS1_spr) - dHL1_spr = min(300., abs(dHL1_spr))*sign(1.,dHL1_spr) - - hfx_spr(i) = dHS1_spr ! W/m2 - lh_spr (i) = dHL1_spr ! W/m2 - hfx (i) = hfx(i) + hfx_spr(i) - lh (i) = lh (i) + lh_spr (i) - qfx (i) = qfx(i) + lh_spr (i)/xlv ! kg/kg - mol (i) = mol(i) + dthvstar_spr - !_OR_ recalculate T* Q* T2 Q2 with the updated heat fluxes? ask - - !tstar(i) = tstar(i) + dthstar_spr/((1.e5/p_0)**0.286) ! check - qstar(i) = qstar(i) + dqstar_spr*1000. - t2 (i) = t2 (i) + dtref_spr ! 2-m temp - q2 (i) = q2 (i) + dqref_spr ! 2-m qv - th2 (i) = th2 (i) + dthref_spr - ! M_spr : spray generated mass flux [kg m-2 s-1] ! only output - - enddo !end i-loop 2 - endif - !---srf end of the "sea-spray" implementation - !------------------------------------------------------------ - - errmsg = ' ' - errflg = 0 - - end subroutine sf_mynn_run - -!================================================================================================================= - subroutine zilitinkevich_1995(z_0,zt,zq,restar,ustar,karman,landsea,iz0tlnd2,spp_pbl,rstoch) -!this subroutine returns the thermal and moisture roughness lengths -!from Zilitinkevich (1995) and Zilitinkevich et al. (2001) over -!land and water, respectively. -! -!MODS: -!20120705 : added IZ0TLND option. Note: This option was designed -! to work with the Noah LSM and may be specific for that -! LSM only. Tests with RUC LSM showed no improvements. - implicit none -!================================================================================================================= - -!--- input arguments: - logical,intent(in):: spp_pbl - integer,optional,intent(in):: iz0tlnd2 - - real(kind=kind_phys),intent(in):: rstoch - real(kind=kind_phys),intent(in):: z_0,restar,ustar,karman,landsea - -!--- output arguments: - real(kind=kind_phys),intent(out):: zt,zq - -!--- local variables: - real(kind=kind_phys):: czil !=0.100 in Chen et al. (1997) - !=0.075 in Zilitinkevich (1995) - !=0.500 in Lemone et al. (2008) - -!----------------------------------------------------------------------------------------------------------------- - - if (landsea-1.5 .gt. 0) then !water - -!this is based on Zilitinkevich, Grachev, and Fairall (2001): -!their equations 15 and 16). - if (restar .lt. 0.1) then - zt = z_0*exp(karman*2.0) - zt = min( zt, 6.0e-5) - zt = max( zt, 2.0e-9) - zq = z_0*exp(karman*3.0) - zq = min( zq, 6.0e-5) - zq = max( zq, 2.0e-9) - else - zt = z_0*exp(-karman*(4.0*sqrt(restar)-3.2)) - zt = min( zt, 6.0e-5) - zt = max( zt, 2.0e-9) - zq = z_0*exp(-karman*(4.0*sqrt(restar)-4.2)) - zq = min( zt, 6.0e-5) - zq = max( zt, 2.0e-9) - endif - - else !land - -!option to modify czil according to Chen & Zhang (2009): - if ( iz0tlnd2 .eq. 1 ) then - czil = 10.0 ** ( -0.40 * ( z_0 / 0.07 ) ) - else - czil = 0.085 !0.075 !0.10 - end if - - zt = z_0*exp(-karman*czil*sqrt(restar)) - zt = min( zt, 0.75*z_0) - - zq = z_0*exp(-karman*czil*sqrt(restar)) - zq = min( zq, 0.75*z_0) - -!stochastically perturb thermal and moisture roughness length. -!currently set to half the amplitude: - if (spp_pbl) then - zt = zt + zt * 0.5 * rstoch - zt = max(zt, 0.0001) - zq = zt - endif - - endif - - end subroutine zilitinkevich_1995 - -!================================================================================================================= - subroutine davis_etal_2008(Z_0,ustar) -!a.k.a. : Donelan et al. (2004) -!this formulation for roughness length was designed to match -!the labratory experiments of Donelan et al. (2004). -!this is an update version from Davis et al. 2008, which -!corrects a small-bias in Z_0 (AHW real-time 2012). - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: ustar - -!--- output arguments: - real(kind=kind_phys),intent(out):: z_0 - -!--- local variables: - real(kind=kind_phys):: zw, zn1, zn2 - real(kind=kind_phys),parameter:: g=9.81,ozo=1.59e-5 - -!----------------------------------------------------------------------------------------------------------------- - -!old form: z_0 = 10.*exp(-10./(ustar**(1./3.))) -!new form: - - zw = min((ustar/1.06)**(0.3),1.0) - zn1 = 0.011*ustar*ustar/g + ozo - zn2 = 10.*exp(-9.5*ustar**(-.3333)) + & - 0.11*1.5e-5/amax1(ustar,0.01) - z_0 = (1.0-zw) * zn1 + zw * zn2 - - z_0 = max( z_0, 1.27e-7) !these max/mins were suggested by - z_0 = min( z_0, 2.85e-3) !Davis et al. (2008) - - end subroutine davis_etal_2008 - -!================================================================================================================= - subroutine taylor_yelland_2001(z_0,ustar,wsp10) -!this formulation for roughness length was designed account for -!wave steepness. - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: ustar,wsp10 - -!--- output arguments: - real(kind=kind_phys),intent(out):: z_0 - -!--- local variables: - real(kind=kind_phys),parameter:: g=9.81, pi=3.14159265 - real(kind=kind_phys):: hs, tp, lp - -!----------------------------------------------------------------------------------------------------------------- - -!hs is the significant wave height - hs = 0.0248*(wsp10**2.) -!Tp dominant wave period - tp = 0.729*max(wsp10,0.1) -!lp is the wavelength of the dominant wave - lp = g*tp**2/(2*pi) - - z_0 = 1200.*hs*(hs/lp)**4.5 - z_0 = max( z_0, 1.27e-7) !these max/mins were suggested by - z_0 = min( z_0, 2.85e-3) !Davis et al. (2008) - - end subroutine taylor_yelland_2001 - -!================================================================================================================= - subroutine charnock_1955(Z_0,ustar,wsp10,visc,zu) -!This version of Charnock's relation employs a varying -!Charnock parameter, similar to COARE3.0 [Fairall et al. (2003)]. -!The Charnock parameter CZC is varied from .011 to .018 -!between 10-m wsp = 10 and 18. - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: ustar,visc,wsp10,zu - -!--- output arguments: - real(kind=kind_phys),intent(out):: z_0 - -!--- local variables: - real(kind=kind_phys),parameter:: G=9.81, CZO2=0.011 - real(kind=kind_phys):: czc !variable charnock "constant" - real(kind=kind_phys):: wsp10m ! logarithmically calculated 10 m - -!----------------------------------------------------------------------------------------------------------------- - - wsp10m = wsp10*log(10./1e-4)/log(zu/1e-4) - czc = czo2 + 0.007*min(max((wsp10m-10.)/8., 0.), 1.0) - - z_0 = czc*ustar*ustar/g + (0.11*visc/max(ustar,0.05)) - z_0 = max( z_0, 1.27e-7) !these max/mins were suggested by - z_0 = min( z_0, 2.85e-3) !Davis et al. (2008) - - end subroutine charnock_1955 - -!================================================================================================================= - subroutine edson_etal_2013(z_0,ustar,wsp10,visc,zu) -!This version of Charnock's relation employs a varying -!Charnock parameter, taken from COARE 3.5 [Edson et al. (2001, JPO)]. -!The Charnock parameter CZC is varied from about .005 to .028 -!between 10-m wind speeds of 6 and 19 m/s. -!11 Nov 2021: Note that this was finally fixed according to the -! Edson et al (2014) corrigendum, where "m" was corrected. - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: ustar,visc,wsp10,zu - -!--- output arguments: - real(kind=kind_phys),intent(out):: z_0 - -!--- local variables: - real(kind=kind_phys),parameter:: g=9.81 - real(kind=kind_phys),parameter:: m=0.0017, b=-0.005 - real(kind=kind_phys):: czc ! variable charnock "constant" - real(kind=kind_phys):: wsp10m ! logarithmically calculated 10 m - -!----------------------------------------------------------------------------------------------------------------- - - wsp10m = wsp10*log(10/1e-4)/log(zu/1e-4) - wsp10m = min(19.,wsp10m) - czc = m*wsp10m + b - czc = max(czc, 0.0) - - z_0 = czc*ustar*ustar/g + (0.11*visc/max(ustar,0.07)) - z_0 = max( z_0, 1.27e-7) !These max/mins were suggested by - z_0 = min( z_0, 2.85e-3) !Davis et al. (2008) - - end subroutine edson_etal_2013 - -!================================================================================================================= - subroutine garratt_1992(zt,zq,z_0,ren,landsea) -!This formulation for the thermal and moisture roughness lengths -!(Zt and Zq) relates them to Z0 via the roughness Reynolds number (Ren). -!This formula comes from Fairall et al. (2003). It is modified from -!the original Garratt-Brutsaert model to better fit the COARE/HEXMAX -!data. The formula for land uses a constant ratio (Z_0/7.4) taken -!from Garratt (1992). - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: ren, z_0,landsea - -!--- output arguments: - real(kind=kind_phys),intent(out):: zt,zq - -!--- local variables: - real(kind=kind_phys):: rq - real(kind=kind_phys),parameter:: e=2.71828183 - -!----------------------------------------------------------------------------------------------------------------- - - if (landsea-1.5 .gt. 0) then !water - - zt = z_0*exp(2.0 - (2.48*(ren**0.25))) - zq = z_0*exp(2.0 - (2.28*(ren**0.25))) - - zq = min( zq, 5.5e-5) - zq = max( zq, 2.0e-9) - zt = min( zt, 5.5e-5) - zt = max( zt, 2.0e-9) !same lower limit as ecmwf - - else !land - - zq = z_0/(e**2.) !taken from Garratt (1980,1992) - zt = zq - - endif - - end subroutine garratt_1992 - -!================================================================================================================= - subroutine fairall_etal_2003(zt,zq,ren,ustar,visc,rstoch,spp_pbl) -!This formulation for thermal and moisture roughness length (Zt and Zq) -!as a function of the roughness Reynolds number (Ren) comes from the -!COARE3.0 formulation, empirically derived from COARE and HEXMAX data -![Fairall et al. (2003)]. Edson et al. (2004; JGR) suspected that this -!relationship overestimated the scalar roughness lengths for low Reynolds -!number flows, so an optional smooth flow relationship, taken from Garratt -!(1992, p. 102), is available for flows with Ren < 2. -! -!This is for use over water only. - implicit none -!================================================================================================================= - -!--- input arguments: - logical,intent(in):: spp_pbl - real(kind=kind_phys),intent(in):: ren,ustar,visc,rstoch - -!--- output arguments: - real(kind=kind_phys),intent(out):: zt,zq - -!----------------------------------------------------------------------------------------------------------------- - - if (ren .le. 2.) then - - zt = (5.5e-5)*(ren**(-0.60)) - zq = zt - !for smooth seas, can use Garratt - !zq = 0.2*visc/max(ustar,0.1) - !zq = 0.3*visc/max(ustar,0.1) - - else - - !for rough seas, use coare - zt = (5.5e-5)*(ren**(-0.60)) - zq = zt - - endif - - if (spp_pbl) then - zt = zt + zt * 0.5 * rstoch - zq = zt - endif - - zt = min(zt,1.0e-4) - zt = max(zt,2.0e-9) - - zq = min(zt,1.0e-4) - zq = max(zt,2.0e-9) - - end subroutine fairall_etal_2003 - -!================================================================================================================= - subroutine fairall_etal_2014(zt,zq,ren,ustar,visc,rstoch,spp_pbl) -!This formulation for thermal and moisture roughness length (Zt and Zq) -!as a function of the roughness Reynolds number (Ren) comes from the -!COARE 3.5/4.0 formulation, empirically derived from COARE and HEXMAX data -![Fairall et al. (2014? coming soon, not yet published as of July 2014)]. -!This is for use over water only. - implicit none -!================================================================================================================= - -!--- input arguments: - logical,intent(in):: spp_pbl - real(kind=kind_phys),intent(in):: ren,ustar,visc,rstoch - -!--- output arguments: - real(kind=kind_phys),intent(out):: Zt,Zq - -!----------------------------------------------------------------------------------------------------------------- - -!zt = (5.5e-5)*(ren**(-0.60)) - zt = min(1.6e-4, 5.8e-5/(ren**0.72)) - zq = zt - - if (spp_pbl) then - zt = max(zt + zt*0.5*rstoch,2.0e-9) - zq = max(zt + zt*0.5*rstoch,2.0e-9) - else - zt = max(zt,2.0e-9) - zq = max(zt,2.0e-9) - endif - - - end subroutine fairall_etal_2014 - -!================================================================================================================= - subroutine yang_2008(z_0,zt,zq,ustar,tstar,qst,ren,visc,landsea) -!This is a modified version of Yang et al (2002 QJRMS, 2008 JAMC) -!and Chen et al (2010, J of Hydromet). Although it was originally -!designed for arid regions with bare soil, it is modified -!here to perform over a broader spectrum of vegetation. -! -!The original formulation relates the thermal roughness length (Zt) -!to u* and T*: -! -! Zt = ht * EXP(-beta*(ustar**0.5)*(ABS(tstar)**0.25)) -! -!where ht = Renc*visc/ustar and the critical Reynolds number -!(Renc) = 70. Beta was originally = 10 (2002 paper) but was revised -!to 7.2 (in 2008 paper). Their form typically varies the -!ratio Z0/Zt by a few orders of magnitude (1-1E4). -! -!This modified form uses beta = 1.5 and a variable Renc (function of Z_0), -!so zt generally varies similarly to the Zilitinkevich form (with Czil ~ 0.1) -!for very small or negative surface heat fluxes but can become close to the -!Zilitinkevich with Czil = 0.2 for very large HFX (large negative T*). -!Also, the exponent (0.25) on tstar was changed to 1.0, since we found -!Zt was reduced too much for low-moderate positive heat fluxes. -! -!This should only be used over land! - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: z_0,ren,ustar,tstar,qst,visc,landsea - -!--- output arguments: - real(kind=kind_phys),intent(out):: zt,zq - -!--- local variables: - real(kind=kind_phys):: ht, &! roughness height at critical Reynolds number - tstar2, &! bounded T*, forced to be non-positive - qstar2, &! bounded q*, forced to be non-positive - z_02, &! bounded Z_0 for variable Renc2 calc - renc2 ! variable Renc, function of Z_0 - - real(kind=kind_phys),parameter:: renc=300., & !old constant Renc - beta=1.5, & !important for diurnal variation - m=170., & !slope for Renc2 function - b=691. !y-intercept for Renc2 function - -!----------------------------------------------------------------------------------------------------------------- - - z_02 = min(z_0,0.5) - z_02 = max(z_02,0.04) - renc2= b + m*log(z_02) - ht = renc2*visc/max(ustar,0.01) - tstar2 = min(tstar, 0.0) - qstar2 = min(qst,0.0) - - zt = ht * exp(-beta*(ustar**0.5)*(abs(tstar2)**1.0)) - zq = ht * exp(-beta*(ustar**0.5)*(abs(qstar2)**1.0)) -!zq = zt - - zt = min(zt, z_0/2.0) - zq = min(zq, z_0/2.0) - - end subroutine yang_2008 - -!================================================================================================================= - subroutine andreas_2002(z_0,bvisc,ustar,zt,zq) -! This is taken from Andreas (2002; J. of Hydromet) and -! Andreas et al. (2005; BLM). -! -! This should only be used over snow/ice! - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: z_0,bvisc,ustar - -!--- output arguments: - real(kind=kind_phys),intent(out):: zt, zq - -!--- local variables: - real(kind=kind_phys):: ren2,zntsno - - real(kind=kind_phys),parameter:: bt0_s=1.25, bt0_t=0.149, bt0_r=0.317, & - bt1_s=0.0, bt1_t=-0.55, bt1_r=-0.565, & - bt2_s=0.0, bt2_t=0.0, bt2_r=-0.183 - - real(kind=kind_phys),parameter:: bq0_s=1.61, bq0_t=0.351, bq0_r=0.396, & - bq1_s=0.0, bq1_t=-0.628, bq1_r=-0.512, & - bq2_s=0.0, bq2_t=0.0, bq2_r=-0.180 - -!----------------------------------------------------------------------------------------------------------------- - -!calculate zo for snow (Andreas et al. 2005, BLM): - zntsno = 0.135*bvisc/ustar + & - (0.035*(ustar*ustar)/9.8) * & - (5.*exp(-1.*(((ustar - 0.18)/0.1)*((ustar - 0.18)/0.1))) + 1.) - ren2 = ustar*zntsno/bvisc - -!Make sure that Re is not outside of the range of validity -!for using their equations - if (ren2 .gt. 1000.) ren2 = 1000. - - if (ren2 .le. 0.135) then - - zt = zntsno*exp(bt0_s + bt1_s*log(ren2) + bt2_s*log(ren2)**2) - zq = zntsno*exp(bq0_s + bq1_s*log(ren2) + bq2_s*log(ren2)**2) - - else if (ren2 .gt. 0.135 .and. ren2 .lt. 2.5) then - - zt = zntsno*exp(bt0_t + bt1_t*log(ren2) + bt2_t*log(ren2)**2) - zq = zntsno*exp(bq0_t + bq1_t*log(ren2) + bq2_t*log(ren2)**2) - - else - - zt = zntsno*exp(bt0_r + bt1_r*log(ren2) + bt2_r*log(ren2)**2) - zq = zntsno*exp(bq0_r + bq1_r*log(ren2) + bq2_r*log(ren2)**2) - - endif - - end subroutine andreas_2002 - -!================================================================================================================= - subroutine psi_hogstrom_1996(psi_m,psi_h,zl,zt,z_0,za) -!this subroutine returns the stability functions based off -!of hogstrom (1996). - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: zl,zt,z_0,za - -!--- output arguments: - real(kind=kind_phys),intent(out):: psi_m,psi_h - -!--- local variables: - real(kind=kind_phys):: x,x0,y,y0,zml,zhl - -!----------------------------------------------------------------------------------------------------------------- - - zml = z_0*zl/za - zhl = zt*zl/za - - if (zl .gt. 0.) then !stable (not well tested - seem large) - - psi_m = -5.3*(zl - zml) - psi_h = -8.0*(zl - zhl) - - else !unstable - - x = (1.-19.0*zl)**0.25 - x0= (1.-19.0*zml)**0.25 - y = (1.-11.6*zl)**0.5 - y0= (1.-11.6*zhl)**0.5 - - psi_m = 2.*log((1.+x)/(1.+x0)) + & - &log((1.+x**2.)/(1.+x0**2.)) - & - &2.0*atan(x) + 2.0*atan(x0) - psi_h = 2.*log((1.+y)/(1.+y0)) - - endif - - end subroutine psi_hogstrom_1996 - -!================================================================================================================= - subroutine psi_dyerhicks(psi_m,psi_h,zl,zt,z_0,za) -!This subroutine returns the stability functions based off -!of Hogstrom (1996), but with different constants compatible -!with Dyer and Hicks (1970/74?). This formulation is used for -!testing/development by Nakanishi (personal communication). - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: zl,zt,z_0,za - -!--- output arguments: - real(kind=kind_phys),intent(out):: psi_m,psi_h - -!--- local variables: - real(kind=kind_phys):: x,x0,y,y0,zml,zhl - -!----------------------------------------------------------------------------------------------------------------- - - zml = z_0*zl/za !zo/l - zhl = zt*zl/za !zt/l - - if (zl .gt. 0.) then !stable - - psi_m = -5.0*(zl - zml) - psi_h = -5.0*(zl - zhl) - - else !unstable - - x = (1.-16.*zl)**0.25 - x0= (1.-16.*zml)**0.25 - - y = (1.-16.*zl)**0.5 - y0= (1.-16.*zhl)**0.5 - - psi_m = 2.*log((1.+x)/(1.+x0)) + & - &log((1.+x**2.)/(1.+x0**2.)) - & - &2.0*atan(x) + 2.0*atan(x0) - psi_h = 2.*log((1.+y)/(1.+y0)) - - endif - - end subroutine psi_dyerhicks - -!================================================================================================================= - subroutine psi_beljaars_holtslag_1991(psi_m,psi_h,zl) -!this subroutine returns the stability functions based off -!of Beljaar and Holtslag 1991, which is an extension of Holtslag -!and Debruin 1989. - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: zl - -!--- output arguments: - real(kind=kind_phys),intent(out):: psi_m, psi_h - -!--- local variables: - real(kind=kind_phys):: a=1.,b=0.666,c=5.,d=0.35 - -!----------------------------------------------------------------------------------------------------------------- - - if (zl .lt. 0.) then !unstable - - write(*,*)"WARNING: Universal stability functions from" - write(*,*)" Beljaars and Holtslag (1991) should only" - write(*,*)" be used in the stable regime!" - psi_m = 0. - psi_h = 0. - - else !stable - - psi_m = -(a*zl + b*(zl -(c/d))*exp(-d*zl) + (b*c/d)) - psi_h = -((1.+.666*a*zl)**1.5 + & - b*(zl - (c/d))*exp(-d*zl) + (b*c/d) -1.) - - endif - - end subroutine psi_beljaars_holtslag_1991 - -!================================================================================================================= - subroutine psi_zilitinkevich_esau_2007(psi_m,psi_h,zl) -!this subroutine returns the stability functions come from -!Zilitinkevich and Esau (2007, BM), which are formulatioed from the -!"generalized similarity theory" and tuned to the LES DATABASE64 -!to determine their dependence on z/L. - IMPLICIT NONE -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: zl - -!--- output arguments: - real(kind=kind_phys),intent(out):: psi_m, psi_h - -!--- local variables: - real(kind=kind_phys),parameter:: cm=3.0,ct=2.5 - -!----------------------------------------------------------------------------------------------------------------- - - if (zl .lt. 0.) then !unstable - -! write(*,*)"WARNING: Universal stability function from" -! write(*,*)" Zilitinkevich and Esau (2007) should only" -! write(*,*)" be used in the stable regime!" - psi_m = 0. - psi_h = 0. - - else !stable - - psi_m = -cm*(zl**(5./6.)) - psi_h = -ct*(zl**(4./5.)) - - endif - - end subroutine psi_zilitinkevich_esau_2007 - -!================================================================================================================= - subroutine psi_businger_1971(psi_m,psi_h,zl) -!this subroutine returns the flux-profile relationships -!of Businger el al. 1971. - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: zl - -!--- output arguments: - real(kind=kind_phys),intent(out):: psi_m, psi_h - -!--- local variables: - real(kind=kind_phys):: x, y - real(kind=kind_phys),parameter:: pi180 = 3.14159265/180. - -!----------------------------------------------------------------------------------------------------------------- - - if (zl .lt. 0.) then !unstable - - x = (1. - 15.0*zl)**0.25 - y = (1. - 9.0*zl)**0.5 - - psi_m = log(((1.+x)/2.)**2.) + & - & log((1.+x**2.)/2.) - & - & 2.0*atan(x) + pi180*90. - psi_h = 2.*log((1.+y)/2.) - - else !stable - - psi_m = -4.7*zl - psi_h = -(4.7/0.74)*zl - - endif - - end subroutine psi_businger_1971 - -!================================================================================================================= - subroutine psi_suselj_sood_2010(psi_m,psi_h,zl) -!this subroutine returns flux-profile relatioships based off -!of Lobocki (1993), which is derived from the MY-level 2 model. -!Suselj and Sood (2010) applied the surface layer length scales -!from Nakanishi (2001) to get this new relationship. These functions -!are more agressive (larger magnitude) than most formulations. They -!showed improvement over water, but untested over land. - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: zl - -!--- output arguments: - real(kind=kind_phys),intent(out):: psi_m, psi_h - -!--- local variables: - real(kind=kind_phys),parameter:: rfc=0.19, ric=0.183, phit=0.8 - -!----------------------------------------------------------------------------------------------------------------- - - if (zl .gt. 0.) then !stable - - psi_m = -(zl/rfc + 1.1223*exp(1.-1.6666/zl)) - !psi_h = -zl*ric/((rfc**2.)*phit) + 8.209*(zl**1.1091) - !their eq for psi_h crashes the model and does not match - !their fig 1. this eq (below) matches their fig 1 better: - psi_h = -(zl*ric/((rfc**2.)*5.) + 7.09*(zl**1.1091)) - - else !unstable - - psi_m = 0.9904*log(1. - 14.264*zl) - psi_h = 1.0103*log(1. - 16.3066*zl) - - endif - - end subroutine psi_suselj_sood_2010 - -!================================================================================================================= - subroutine psi_cb2005(psim1,psih1,zl,z0l) -!this subroutine returns the stability functions based off -!of Cheng and Brutseart (2005, BLM), for use in stable conditions only. -!the returned values are the combination of psi((za+zo)/L) - psi(z0/L) - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: zl,z0l - -!--- output arguments: - real(kind=kind_phys),intent(out):: psim1,psih1 - -!----------------------------------------------------------------------------------------------------------------- - - psim1 = -6.1*log(zl + (1.+ zl **2.5)**0.4) & - -6.1*log(z0l + (1.+ z0l**2.5)**0.4) - psih1 = -5.5*log(zl + (1.+ zl **1.1)**0.90909090909) & - -5.5*log(z0l + (1.+ z0l**1.1)**0.90909090909) - - end subroutine psi_cb2005 - -!================================================================================================================= - subroutine li_etal_2010(zl,rib,zaz0,z0zt) -!this subroutine returns a more robust z/l that best matches -!the z/l from hogstrom (1996) for unstable conditions and beljaars -!and holtslag (1991) for stable conditions. - implicit none -!================================================================================================================= - -!--- input arguments: - real(kind=kind_phys),intent(in):: rib,zaz0,z0zt - -!--- output arguments: - real(kind=kind_phys),intent(out):: zl - -!--- local variables: - real(kind=kind_phys):: alfa,beta,zaz02,z0zt2 - - real(kind=kind_phys),parameter:: au11=0.045, bu11=0.003, bu12=0.0059, & - &bu21=-0.0828, bu22=0.8845, bu31=0.1739, & - &bu32=-0.9213, bu33=-0.1057 - real(kind=kind_phys),parameter:: aw11=0.5738, aw12=-0.4399, aw21=-4.901, & - &aw22=52.50, bw11=-0.0539, bw12=1.540, & - &bw21=-0.669, bw22=-3.282 - real(kind=kind_phys),parameter:: as11=0.7529, as21=14.94, bs11=0.1569, & - &bs21=-0.3091, bs22=-1.303 - -!----------------------------------------------------------------------------------------------------------------- - -!set limits according to Li et al (2010), p 157. - zaz02=zaz0 - if (zaz0 .lt. 100.0) zaz02=100. - if (zaz0 .gt. 100000.0) zaz02=100000. - -!set more limits according to Li et al (2010) - z0zt2=z0zt - if (z0zt .lt. 0.5) z0zt2=0.5 - if (z0zt .gt. 100.0) z0zt2=100. - - alfa = log(zaz02) - beta = log(z0zt2) - - if (rib .le. 0.0) then - zl = au11*alfa*rib**2 + ( & - & (bu11*beta + bu12)*alfa**2 + & - & (bu21*beta + bu22)*alfa + & - & (bu31*beta**2 + bu32*beta + bu33))*rib - - !if(zL .LT. -15 .OR. zl .GT. 0.)print*,"VIOLATION Rib<0:",zL - zl = max(zl,-15.) !limits set according to Li et al (2010) - zl = min(zl,0.) !Figure 1. - elseif (rib .gt. 0.0 .and. rib .le. 0.2) then - zl = ((aw11*beta + aw12)*alfa + & - & (aw21*beta + aw22))*rib**2 + & - & ((bw11*beta + bw12)*alfa + & - & (bw21*beta + bw22))*rib - - !if(zl .lt. 0 .or. zl .gt. 4)print*,"violation 00.2:",zl - zl = min(zl,20.) !limits according to Li et al (2010), their Figure 1c. - zl = max(zl,1.) - endif - - end subroutine li_etal_2010 - -!================================================================================================================= - real(kind=kind_phys) function zolri(ri,za,z0,zt,zol1,psi_opt) - implicit none -! This iterative algorithm is a two-point secant method taken from the revised -! surface layer scheme in WRF-ARW, written by Pedro Jimenez and Jimy Dudhia and -! summarized in Jimenez et al. (2012, MWR). This function was adapted -! to input the thermal roughness length, zt, (as well as z0) and use initial -! estimate of z/L. -!================================================================================================================= - -!--- input arguments: - integer, intent(in):: psi_opt - real(kind=kind_phys),intent(in):: ri,za,z0,zt,zol1 - -!--- local variables and arrays: - integer:: n - integer,parameter:: nmax = 20 - real(kind=kind_phys):: x1,x2,fx1,fx2 - -!----------------------------------------------------------------------------------------------------------------- - - if (ri.lt.0.)then - x1=zol1 - 0.02 !-5. - x2=0. - else - x1=0. - x2=zol1 + 0.02 !5. - endif - - n=0 - fx1=zolri2(x1,ri,za,z0,zt,psi_opt) - fx2=zolri2(x2,ri,za,z0,zt,psi_opt) - - do while (abs(x1 - x2) > 0.01 .and. n < nmax) - if(abs(fx2) .lt. abs(fx1))then - x1=x1-fx1/(fx2-fx1)*(x2-x1) - fx1=zolri2(x1,ri,za,z0,zt,psi_opt) - zolri=x1 - else - x2=x2-fx2/(fx2-fx1)*(x2-x1) - fx2=zolri2(x2,ri,za,z0,zt,psi_opt) - zolri=x2 - endif - n=n+1 - enddo - - if (n==nmax .and. abs(x1 - x2) >= 0.01) then - !if convergence fails, use approximate values: - call li_etal_2010(zolri, ri, za/z0, z0/zt) - !print*,"failed, n=",n," ri=",ri," zt=",zt - else - !print*,"success,n=",n," ri=",ri," z/l=",zolri - endif - - end function zolri - -!================================================================================================================= - real(kind=kind_phys) function zolri2(zol2,ri2,za,z0,zt,psi_opt) - implicit none -! input: ================================= -! zol2 - estimated z/l -! ri2 - calculated bulk richardson number -! za - 1/2 depth of first model layer -! z0 - aerodynamic roughness length -! zt - thermal roughness length -! output: ================================ -! zolri2 - delta ri -!================================================================================================================= - -!--- input arguments: - integer,intent(in):: psi_opt - real(kind=kind_phys),intent(in):: ri2,za,z0,zt - -!--- inout arguments: - real(kind=kind_phys),intent(inout):: zol2 - -!--- local variables and arrays: - real(kind=kind_phys):: zol20,zol3,psim1,psih1,psix2,psit2,zolt - -!----------------------------------------------------------------------------------------------------------------- - - if(zol2*ri2 .lt. 0.) then - !print*,"wrong quadrants: z/l=",zol2," ri=",ri2 - zol2=0. - endif - - zol20=zol2*z0/za ! z0/l - zol3=zol2+zol20 ! (z+z0)/l - zolt=zol2*zt/za ! zt/l - - if (ri2.lt.0) then - psit2=max(log((za+z0)/zt)-(psih_unstable(zol3,psi_opt)-psih_unstable(zolt,psi_opt)), 1.0) - psix2=max(log((za+z0)/z0)-(psim_unstable(zol3,psi_opt)-psim_unstable(zol20,psi_opt)),1.0) - else - psit2=max(log((za+z0)/zt)-(psih_stable(zol3,psi_opt)-psih_stable(zolt,psi_opt)), 1.0) - psix2=max(log((za+z0)/z0)-(psim_stable(zol3,psi_opt)-psim_stable(zol20,psi_opt)),1.0) - endif - - zolri2=zol2*psit2/psix2**2 - ri2 -!print*," target ri=",ri2," est ri=",zol2*psit2/psix2**2 - - end function zolri2 - -!================================================================================================================= - real(kind=kind_phys) function zolrib(ri,za,z0,zt,logz0,logzt,zol1,psi_opt) - implicit none -!this iterative algorithm to compute z/L from bulk-Ri -!================================================================================================================= - -!--- input arguments: - integer,intent(in):: psi_opt - real(kind=kind_phys),intent(in):: ri,za,z0,zt,logz0,logzt - -!--- inout arguments: - real(kind=kind_phys),intent(inout):: zol1 - -!--- local variables and arrays: - integer:: n - integer,parameter :: nmax = 20 - real(kind=kind_phys):: zol20,zol3,zolt,zolold - real(kind=kind_phys):: psit2,psix2 -!real(kind=kind_phys),dimension(nmax):: zlhux - -!----------------------------------------------------------------------------------------------------------------- - - if(zol1*ri .lt. 0.) then -! print*,"WRONG QUADRANTS: z/L=",zol1," ri=",ri - zol1=0. - endif - - if (ri .lt. 0.) then - zolold=-99999. - zolrib=-66666. - else - zolold=99999. - zolrib=66666. - endif - - n=1 - do while (abs(zolold - zolrib) > 0.01 .and. n < nmax) - - if(n==1)then - zolold=zol1 - else - zolold=zolrib - endif - zol20=zolold*z0/za ! z0/L - zol3=zolold+zol20 ! (z+z0)/L - zolt=zolold*zt/za ! zt/L - - if (ri.lt.0) then - psit2=MAX(logzt-(psih_unstable(zol3,psi_opt)-psih_unstable(zolt,psi_opt)), 1.0) - psix2=MAX(logz0-(psim_unstable(zol3,psi_opt)-psim_unstable(zol20,psi_opt)), 1.0) - else - psit2=MAX(logzt-(psih_stable(zol3,psi_opt)-psih_stable(zolt,psi_opt)), 1.0) - psix2=MAX(logz0-(psim_stable(zol3,psi_opt)-psim_stable(zol20,psi_opt)), 1.0) - endif - - zolrib=ri*psix2**2/psit2 - !zLhux(n)=zolrib - n=n+1 - enddo - - if (n==nmax .and. abs(zolold - zolrib) > 0.01 ) then - !print*,"iter FAIL, n=",n," Ri=",ri," z/L=",zolri - !if convergence fails, use approximate values: - call li_etal_2010(zolrib,ri,za/z0,z0/zt) - !zLhux(n)=zolri - !print*,"FAILED, n=",n," Ri=",ri," zt=",zt - !print*,"z/L=",zLhux(1:nmax) - else - !print*,"SUCCESS,n=",n," Ri=",ri," z/L=",zolrib - endif - - end function zolrib - -!================================================================================================================= - subroutine psi_init(psi_opt) - implicit none -!define tables from -10 <= z/L <= 10 -!================================================================================================================= - - integer,intent(in):: psi_opt - integer:: n - real(kind=kind_phys):: zolf - -!----------------------------------------------------------------------------------------------------------------- - - if (psi_opt == 0) then - do n = 0,1000 - !stable function tables - zolf = float(n)*0.01 - psim_stab(n)=psim_stable_full(zolf) - psih_stab(n)=psih_stable_full(zolf) - - !unstable function tables - zolf = -float(n)*0.01 - psim_unstab(n)=psim_unstable_full(zolf) - psih_unstab(n)=psih_unstable_full(zolf) - enddo - else - do n = 0,1000 - !stable function tables - zolf = float(n)*0.01 - psim_stab(n)=psim_stable_full_gfs(zolf) - psih_stab(n)=psih_stable_full_gfs(zolf) - - !unstable function tables - zolf = -float(n)*0.01 - psim_unstab(n)=psim_unstable_full_gfs(zolf) - psih_unstab(n)=psih_unstable_full_gfs(zolf) - enddo - endif - - end subroutine psi_init - -!================================================================================================================= -! ... Full equations for the integrated similarity functions ... -!================================================================================================================= - real(kind=kind_phys) function psim_stable_full(zolf) - implicit none - - real(kind=kind_phys),intent(in):: zolf - - psim_stable_full=-6.1*log(zolf+(1+zolf**2.5)**(1./2.5)) - - end function psim_stable_full - -!================================================================================================================= - real(kind=kind_phys) function psih_stable_full(zolf) - implicit none - - real(kind=kind_phys),intent(in):: zolf - - psih_stable_full=-5.3*log(zolf+(1+zolf**1.1)**(1./1.1)) - - end function psih_stable_full - -!================================================================================================================= - real(kind=kind_phys) function psim_unstable_full(zolf) - implicit none - - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: x,ym,psimc,psimk - - x=(1.-16.*zolf)**.25 - psimk=2*ALOG(0.5*(1+X))+ALOG(0.5*(1+X*X))-2.*ATAN(X)+2.*ATAN(1.) - - ym=(1.-10.*zolf)**0.33 - psimc=(3./2.)*log((ym**2.+ym+1.)/3.)-sqrt(3.)*ATAN((2.*ym+1)/sqrt(3.))+4.*ATAN(1.)/sqrt(3.) - - psim_unstable_full=(psimk+zolf**2*(psimc))/(1+zolf**2.) - - end function psim_unstable_full - -!================================================================================================================= - real(kind=kind_phys) function psih_unstable_full(zolf) - implicit none - - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: y,yh,psihc,psihk - - y=(1.-16.*zolf)**.5 - psihk=2.*log((1+y)/2.) - - yh=(1.-34.*zolf)**0.33 - psihc=(3./2.)*log((yh**2.+yh+1.)/3.)-sqrt(3.)*ATAN((2.*yh+1)/sqrt(3.))+4.*ATAN(1.)/sqrt(3.) - - psih_unstable_full=(psihk+zolf**2*(psihc))/(1+zolf**2.) - - end function psih_unstable_full - -!================================================================================================================= -! ... integrated similarity functions from GFS... -! -!================================================================================================================= - real(kind=kind_phys) function psim_stable_full_gfs(zolf) - implicit none - - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: aa - real(kind=kind_phys),parameter:: alpha4 = 20. - - aa = sqrt(1. + alpha4 * zolf) - psim_stable_full_gfs = -1.*aa + log(aa + 1.) - - end function psim_stable_full_gfs - -!================================================================================================================= - real(kind=kind_phys) function psih_stable_full_gfs(zolf) - implicit none - - real(kind=kind_phys):: zolf - real(kind=kind_phys):: bb - real(kind=kind_phys),parameter:: alpha4 = 20. - - bb = sqrt(1. + alpha4 * zolf) - psih_stable_full_gfs = -1.*bb + log(bb + 1.) - - end function psih_stable_full_gfs - -!================================================================================================================= - real(kind=kind_phys) function psim_unstable_full_gfs(zolf) - implicit none - - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: hl1,tem1 - real(kind=kind_phys),parameter:: a0=-3.975, a1=12.32, & - b1=-7.755, b2=6.041 - - if (zolf .ge. -0.5) then - hl1 = zolf - psim_unstable_full_gfs = (a0 + a1*hl1) * hl1 / (1.+ (b1+b2*hl1) *hl1) - else - hl1 = -zolf - tem1 = 1.0 / sqrt(hl1) - psim_unstable_full_gfs = log(hl1) + 2. * sqrt(tem1) - .8776 - end if - - end function psim_unstable_full_gfs - -!================================================================================================================= - real(kind=kind_phys) function psih_unstable_full_gfs(zolf) - implicit none - - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: hl1,tem1 - real(kind=kind_phys),parameter:: a0p=-7.941, a1p=24.75, & - b1p=-8.705, b2p=7.899 - - if (zolf .ge. -0.5) then - hl1 = zolf - psih_unstable_full_gfs = (a0p + a1p*hl1) * hl1 / (1.+ (b1p+b2p*hl1)*hl1) - else - hl1 = -zolf - tem1 = 1.0 / sqrt(hl1) - psih_unstable_full_gfs = log(hl1) + .5 * tem1 + 1.386 - end if - - end function psih_unstable_full_gfs - -!================================================================================================================= -! These functions use the look-up table functions when |z/L| <= 10 -! but default to the full equations when |z/L| > 10. -!================================================================================================================= - real(kind=kind_phys) function psim_stable(zolf,psi_opt) - implicit none - - integer,intent(in):: psi_opt - integer:: nzol - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: rzol - -!----------------------------------------------------------------------------------------------------------------- - - nzol = int(zolf*100.) - rzol = zolf*100. - nzol - if(nzol+1 .le. 1000)then - psim_stable = psim_stab(nzol) + rzol*(psim_stab(nzol+1)-psim_stab(nzol)) - else - if (psi_opt == 0) then - psim_stable = psim_stable_full(zolf) - else - psim_stable = psim_stable_full_gfs(zolf) - endif - endif - - end function psim_stable - -!================================================================================================================= - real(kind=kind_phys) function psih_stable(zolf,psi_opt) - implicit none - - integer,intent(in):: psi_opt - integer:: nzol - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: rzol - -!----------------------------------------------------------------------------------------------------------------- - - nzol = int(zolf*100.) - rzol = zolf*100. - nzol - if(nzol+1 .le. 1000)then - psih_stable = psih_stab(nzol) + rzol*(psih_stab(nzol+1)-psih_stab(nzol)) - else - if (psi_opt == 0) then - psih_stable = psih_stable_full(zolf) - else - psih_stable = psih_stable_full_gfs(zolf) - endif - endif - - end function psih_stable - -!================================================================================================================= - real(kind=kind_phys) function psim_unstable(zolf,psi_opt) - implicit none - - integer,intent(in):: psi_opt - integer:: nzol - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: rzol - -!----------------------------------------------------------------------------------------------------------------- - - nzol = int(-zolf*100.) - rzol = -zolf*100. - nzol - if(nzol+1 .le. 1000)then - psim_unstable = psim_unstab(nzol) + rzol*(psim_unstab(nzol+1)-psim_unstab(nzol)) - else - if (psi_opt == 0) then - psim_unstable = psim_unstable_full(zolf) - else - psim_unstable = psim_unstable_full_gfs(zolf) - endif - endif - - end function psim_unstable - -!================================================================================================================= - real(kind=kind_phys) function psih_unstable(zolf,psi_opt) - implicit none - - integer,intent(in):: psi_opt - integer:: nzol - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: rzol - -!----------------------------------------------------------------------------------------------------------------- - - nzol = int(-zolf*100.) - rzol = -zolf*100. - nzol - if(nzol+1 .le. 1000)then - psih_unstable = psih_unstab(nzol) + rzol*(psih_unstab(nzol+1)-psih_unstab(nzol)) - else - if (psi_opt == 0) then - psih_unstable = psih_unstable_full(zolf) - else - psih_unstable = psih_unstable_full_gfs(zolf) - endif - endif - - end function psih_unstable - -!================================================================================================================= - end module sf_mynn -!================================================================================================================= - diff --git a/src/core_atmosphere/physics/physics_mmm/sf_sfclayrev.F b/src/core_atmosphere/physics/physics_mmm/sf_sfclayrev.F deleted file mode 100644 index 6ca81441a..000000000 --- a/src/core_atmosphere/physics/physics_mmm/sf_sfclayrev.F +++ /dev/null @@ -1,1161 +0,0 @@ -!================================================================================================================= - module sf_sfclayrev - use ccpp_kinds,only: kind_phys - - implicit none - private - public:: sf_sfclayrev_run, & - sf_sfclayrev_init, & - sf_sfclayrev_final, & - sf_sfclayrev_timestep_init, & - sf_sfclayrev_timestep_final - - - real(kind=kind_phys),parameter:: vconvc= 1. - real(kind=kind_phys),parameter:: czo = 0.0185 - real(kind=kind_phys),parameter:: ozo = 1.59e-5 - - real(kind=kind_phys),dimension(0:1000 ),save:: psim_stab,psim_unstab,psih_stab,psih_unstab - - - contains - - -!================================================================================================================= - subroutine sf_sfclayrev_timestep_init(dz2d,u2d,v2d,qv2d,p2d,t2d,dz1d,u1d,v1d,qv1d,p1d,t1d, & - its,ite,kts,kte,errmsg,errflg) -!================================================================================================================= - -!--- input arguments: - integer,intent(in):: its,ite,kts,kte - - real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: & - dz2d,u2d,v2d,qv2d,p2d,t2d - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - - real(kind=kind_phys),intent(out),dimension(its:ite):: & - dz1d,u1d,v1d,qv1d,p1d,t1d - -!--- local variables: - integer:: i - -!----------------------------------------------------------------------------------------------------------------- - - do i = its,ite - dz1d(i) = dz2d(i,kts) - u1d(i) = u2d(i,kts) - v1d(i) = v2d(i,kts) - qv1d(i) = qv2d(i,kts) - p1d(i) = p2d(i,kts) - t1d(i) = t2d(i,kts) - enddo - - errmsg = 'sf_sfclayrev_timestep_init OK' - errflg = 0 - - end subroutine sf_sfclayrev_timestep_init - -!================================================================================================================= - subroutine sf_sfclayrev_timestep_final(errmsg,errflg) -!================================================================================================================= - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - errmsg = 'sf_sfclayrev_timestep_final OK' - errflg = 0 - - end subroutine sf_sfclayrev_timestep_final - -!================================================================================================================= - subroutine sf_sfclayrev_init(errmsg,errflg) -!================================================================================================================= - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!local variables: - integer:: n - real(kind=kind_phys):: zolf - -!----------------------------------------------------------------------------------------------------------------- - - do n = 0,1000 -! stable function tables - zolf = float(n)*0.01 - psim_stab(n)=psim_stable_full(zolf) - psih_stab(n)=psih_stable_full(zolf) - -! unstable function tables - zolf = -float(n)*0.01 - psim_unstab(n)=psim_unstable_full(zolf) - psih_unstab(n)=psih_unstable_full(zolf) - enddo - - errmsg = 'sf_sfclayrev_init OK' - errflg = 0 - - end subroutine sf_sfclayrev_init - -!================================================================================================================= - subroutine sf_sfclayrev_final(errmsg,errflg) -!================================================================================================================= - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - -!----------------------------------------------------------------------------------------------------------------- - - errmsg = 'sf_sfclayrev_final OK' - errflg = 0 - - end subroutine sf_sfclayrev_final - -!================================================================================================================= - subroutine sf_sfclayrev_run(ux,vx,t1d,qv1d,p1d,dz8w1d, & - cp,g,rovcp,r,xlv,psfcpa,chs,chs2,cqs2, & - cpm,pblh,rmol,znt,ust,mavail,zol,mol, & - regime,psim,psih,fm,fh, & - xland,hfx,qfx,tsk, & - u10,v10,th2,t2,q2,flhc,flqc,qgh, & - qsfc,lh,gz1oz0,wspd,br,isfflx,dx, & - svp1,svp2,svp3,svpt0,ep1,ep2, & - karman,eomeg,stbolt,p1000mb, & - shalwater_z0,water_depth,shalwater_depth, & - isftcflx,iz0tlnd,scm_force_flux, & - ustm,ck,cka,cd,cda, & - its,ite,errmsg,errflg & - ) -!================================================================================================================= - -!--- input arguments: - integer,intent(in):: its,ite - - integer,intent(in):: isfflx - integer,intent(in):: shalwater_z0 - integer,intent(in),optional:: isftcflx, iz0tlnd - integer,intent(in),optional:: scm_force_flux - - real(kind=kind_phys),intent(in):: svp1,svp2,svp3,svpt0 - real(kind=kind_phys),intent(in):: ep1,ep2,karman,eomeg,stbolt - real(kind=kind_phys),intent(in):: P1000mb - real(kind=kind_phys),intent(in):: cp,g,rovcp,r,xlv - real(kind=kind_phys),intent(in):: shalwater_depth - - real(kind=kind_phys),intent(in),dimension(its:ite):: & - mavail, & - pblh, & - psfcpa, & - tsk, & - xland, & - water_depth - - real(kind=kind_phys),intent(in),dimension(its:ite):: & - dx, & - dz8w1d, & - ux, & - vx, & - qv1d, & - p1d, & - t1d - -!--- output arguments: - character(len=*),intent(out):: errmsg - integer,intent(out):: errflg - - real(kind=kind_phys),intent(out),dimension(its:ite):: & - lh, & - u10, & - v10, & - th2, & - t2, & - q2 - - real(kind=kind_phys),intent(out),dimension(its:ite),optional:: & - ck, & - cka, & - cd, & - cda - -!--- inout arguments: - real(kind=kind_phys),intent(inout),dimension(its:ite):: & - regime, & - hfx, & - qfx, & - qsfc, & - mol, & - rmol, & - gz1oz0, & - wspd, & - br, & - psim, & - psih, & - fm, & - fh, & - znt, & - zol, & - ust, & - cpm, & - chs2, & - cqs2, & - chs, & - flhc, & - flqc, & - qgh - - real(kind=kind_phys),intent(inout),dimension(its:ite),optional:: & - ustm - -!--- local variables: - integer:: n,i,k,kk,l,nzol,nk,nzol2,nzol10 - - real(kind=kind_phys),parameter:: xka = 2.4e-5 - real(kind=kind_phys),parameter:: prt = 1. - - real(kind=kind_phys):: pl,thcon,tvcon,e1 - real(kind=kind_phys):: zl,tskv,dthvdz,dthvm,vconv,rzol,rzol2,rzol10,zol2,zol10 - real(kind=kind_phys):: dtg,psix,dtthx,psix10,psit,psit2,psiq,psiq2,psiq10 - real(kind=kind_phys):: fluxc,vsgd,z0q,visc,restar,czil,gz0ozq,gz0ozt - real(kind=kind_phys):: zw,zn1,zn2 - real(kind=kind_phys):: zolzz,zol0 - real(kind=kind_phys):: zl2,zl10,z0t - - real(kind=kind_phys),dimension(its:ite):: & - za, & - thvx, & - zqkl, & - zqklp1, & - thx, & - qx, & - psih2, & - psim2, & - psih10, & - psim10, & - denomq, & - denomq2, & - denomt2, & - wspdi, & - gz2oz0, & - gz10oz0, & - rhox, & - govrth, & - tgdsa, & - scr3, & - scr4, & - thgb, & - psfc - - real(kind=kind_phys),dimension(its:ite):: & - pq, & - pq2, & - pq10 - -!----------------------------------------------------------------------------------------------------------------- - - do i = its,ite -!PSFC cb - psfc(i)=psfcpa(i)/1000. - enddo -! -!----CONVERT GROUND TEMPERATURE TO POTENTIAL TEMPERATURE: -! - do 5 i = its,ite - tgdsa(i)=tsk(i) -!PSFC cb -! thgb(i)=tsk(i)*(100./psfc(i))**rovcp - thgb(i)=tsk(i)*(p1000mb/psfcpa(i))**rovcp - 5 continue -! -!-----DECOUPLE FLUX-FORM VARIABLES TO GIVE U,V,T,THETA,THETA-VIR., -! T-VIR., QV, AND QC AT CROSS POINTS AND AT KTAU-1. -! -! *** NOTE *** -! THE BOUNDARY WINDS MAY NOT BE ADEQUATELY AFFECTED BY FRICTION, -! SO USE ONLY INTERIOR VALUES OF UX AND VX TO CALCULATE -! TENDENCIES. -! - 10 continue - -!do 24 i = its,ite -! ux(i)=u1d(i) -! vx(i)=v1d(i) -!24 continue - - 26 continue - -!.....SCR3(I,K) STORE TEMPERATURE, -! SCR4(I,K) STORE VIRTUAL TEMPERATURE. - - do 30 i = its,ite -!PL cb - pl=p1d(i)/1000. - scr3(i)=t1d(i) -! thcon=(100./pl)**rovcp - thcon=(p1000mb*0.001/pl)**rovcp - thx(i)=scr3(i)*thcon - scr4(i)=scr3(i) - thvx(i)=thx(i) - qx(i)=0. - 30 continue -! - do i = its,ite - qgh(i)=0. - flhc(i)=0. - flqc(i)=0. - cpm(i)=cp - enddo -! -!if(idry.eq.1)goto 80 - do 50 i = its,ite - qx(i)=qv1d(i) - tvcon=(1.+ep1*qx(i)) - thvx(i)=thx(i)*tvcon - scr4(i)=scr3(i)*tvcon - 50 continue -! - do 60 i=its,ite - e1=svp1*exp(svp2*(tgdsa(i)-svpt0)/(tgdsa(i)-svp3)) - !for land points qsfc can come from previous time step - if(xland(i).gt.1.5.or.qsfc(i).le.0.0)qsfc(i)=ep2*e1/(psfc(i)-e1) -!QGH CHANGED TO USE LOWEST-LEVEL AIR TEMP CONSISTENT WITH MYJSFC CHANGE -!Q2SAT = QGH IN LSM - e1=svp1*exp(svp2*(t1d(i)-svpt0)/(t1d(i)-svp3)) - pl=p1d(i)/1000. - qgh(i)=ep2*e1/(pl-e1) - cpm(i)=cp*(1.+0.8*qx(i)) - 60 continue - 80 continue - -!-----COMPUTE THE HEIGHT OF FULL- AND HALF-SIGMA LEVELS ABOVE GROUND -! LEVEL, AND THE LAYER THICKNESSES. - - do 90 i = its,ite - zqklp1(i)=0. - rhox(i)=psfc(i)*1000./(r*scr4(i)) - 90 continue -! - do 110 i = its,ite - zqkl(i)=dz8w1d(i)+zqklp1(i) - 110 continue -! - do 120 i = its,ite - za(i)=0.5*(zqkl(i)+zqklp1(i)) - 120 continue -! - do 160 i=its,ite - govrth(i)=g/thx(i) - 160 continue - -!-----CALCULATE BULK RICHARDSON NO. OF SURFACE LAYER, ACCORDING TO -! AKB(1976), EQ(12). - do 260 i = its,ite - gz1oz0(i)=alog((za(i)+znt(i))/znt(i)) ! log((z+z0)/z0) - gz2oz0(i)=alog((2.+znt(i))/znt(i)) ! log((2+z0)/z0) - gz10oz0(i)=alog((10.+znt(i))/znt(i)) ! log((10+z0)z0) - if((xland(i)-1.5).ge.0)then - zl=znt(i) - else - zl=0.01 - endif - wspd(i)=sqrt(ux(i)*ux(i)+vx(i)*vx(i)) - - tskv=thgb(i)*(1.+ep1*qsfc(i)) - dthvdz=(thvx(i)-tskv) -!-----CONVECTIVE VELOCITY SCALE VC AND SUBGRID-SCALE VELOCITY VSG -! FOLLOWING BELJAARS (1994, QJRMS) AND MAHRT AND SUN (1995, MWR) -! ... HONG AUG. 2001 -! -! vconv = 0.25*sqrt(g/tskv*pblh(i)*dthvm) -! USE BELJAARS OVER LAND, OLD MM5 (WYNGAARD) FORMULA OVER WATER - if(xland(i).lt.1.5) then - fluxc = max(hfx(i)/rhox(i)/cp & - + ep1*tskv*qfx(i)/rhox(i),0.) - vconv = vconvc*(g/tgdsa(i)*pblh(i)*fluxc)**.33 - else - if(-dthvdz.ge.0)then - dthvm=-dthvdz - else - dthvm=0. - endif -! vconv = 2.*sqrt(dthvm) -! V3.7: REDUCING CONTRIBUTION IN CALM CONDITIONS - vconv = sqrt(dthvm) - endif -! MAHRT AND SUN LOW-RES CORRECTION - vsgd = 0.32 * (max(dx(i)/5000.-1.,0.))**.33 - wspd(i)=sqrt(wspd(i)*wspd(i)+vconv*vconv+vsgd*vsgd) - wspd(i)=amax1(wspd(i),0.1) - br(i)=govrth(i)*za(i)*dthvdz/(wspd(i)*wspd(i)) -!-----IF PREVIOUSLY UNSTABLE, DO NOT LET INTO REGIMES 1 AND 2 - if(mol(i).lt.0.)br(i)=amin1(br(i),0.0) - rmol(i)=-govrth(i)*dthvdz*za(i)*karman - 260 continue - -! -!-----DIAGNOSE BASIC PARAMETERS FOR THE APPROPRIATED STABILITY CLASS: -! -! -! THE STABILITY CLASSES ARE DETERMINED BY BR (BULK RICHARDSON NO.) -! AND HOL (HEIGHT OF PBL/MONIN-OBUKHOV LENGTH). -! -! CRITERIA FOR THE CLASSES ARE AS FOLLOWS: -! -! 1. BR .GE. 0.0; -! REPRESENTS NIGHTTIME STABLE CONDITIONS (REGIME=1), -! -! 3. BR .EQ. 0.0 -! REPRESENTS FORCED CONVECTION CONDITIONS (REGIME=3), -! -! 4. BR .LT. 0.0 -! REPRESENTS FREE CONVECTION CONDITIONS (REGIME=4). -! - - do 320 i = its,ite -! - if(br(i).gt.0) then - if(br(i).gt.250.0) then - zol(i)=zolri(250.0,za(i),znt(i)) - else - zol(i)=zolri(br(i),za(i),znt(i)) - endif - endif -! - if(br(i).lt.0) then - if(ust(i).lt.0.001)then - zol(i)=br(i)*gz1oz0(i) - else - if(br(i).lt.-250.0) then - zol(i)=zolri(-250.0,za(i),znt(i)) - else - zol(i)=zolri(br(i),za(i),znt(i)) - endif - endif - endif -! -! ... paj: compute integrated similarity functions. -! - zolzz=zol(i)*(za(i)+znt(i))/za(i) ! (z+z0/L - zol10=zol(i)*(10.+znt(i))/za(i) ! (10+z0)/L - zol2=zol(i)*(2.+znt(i))/za(i) ! (2+z0)/L - zol0=zol(i)*znt(i)/za(i) ! z0/L - zl2=(2.)/za(i)*zol(i) ! 2/L - zl10=(10.)/za(i)*zol(i) ! 10/L - - if((xland(i)-1.5).lt.0.)then - zl=(0.01)/za(i)*zol(i) ! (0.01)/L - else - zl=zol0 ! z0/L - endif - - if(br(i).lt.0.)goto 310 ! go to unstable regime (class 4) - if(br(i).eq.0.)goto 280 ! go to neutral regime (class 3) -! -!-----CLASS 1; STABLE (NIGHTTIME) CONDITIONS: -! - regime(i)=1. -! -! ... paj: psim and psih. follows cheng and brutsaert 2005 (cb05). -! - psim(i)=psim_stable(zolzz)-psim_stable(zol0) - psih(i)=psih_stable(zolzz)-psih_stable(zol0) -! - psim10(i)=psim_stable(zol10)-psim_stable(zol0) - psih10(i)=psih_stable(zol10)-psih_stable(zol0) -! - psim2(i)=psim_stable(zol2)-psim_stable(zol0) - psih2(i)=psih_stable(zol2)-psih_stable(zol0) -! -! ... paj: preparations to compute psiq. follows cb05+carlson boland jam 1978. -! - pq(i)=psih_stable(zol(i))-psih_stable(zl) - pq2(i)=psih_stable(zl2)-psih_stable(zl) - pq10(i)=psih_stable(zl10)-psih_stable(zl) -! -! 1.0 over monin-obukhov length - rmol(i)=zol(i)/za(i) -! - goto 320 -! -!-----CLASS 3; FORCED CONVECTION: -! - 280 regime(i)=3. - psim(i)=0.0 - psih(i)=psim(i) - psim10(i)=0. - psih10(i)=psim10(i) - psim2(i)=0. - psih2(i)=psim2(i) -! -! paj: preparations to compute PSIQ. -! - pq(i)=psih(i) - pq2(i)=psih2(i) - pq10(i)=0. -! - zol(i)=0. - rmol(i) = zol(i)/za(i) - - goto 320 -! -!-----CLASS 4; FREE CONVECTION: -! - 310 continue - regime(i)=4. -! -! ... paj: PSIM and PSIH ... -! - psim(i)=psim_unstable(zolzz)-psim_unstable(zol0) - psih(i)=psih_unstable(zolzz)-psih_unstable(zol0) -! - psim10(i)=psim_unstable(zol10)-psim_unstable(zol0) - psih10(i)=psih_unstable(zol10)-psih_unstable(zol0) -! - psim2(i)=psim_unstable(zol2)-psim_unstable(zol0) - psih2(i)=psih_unstable(zol2)-psih_unstable(zol0) -! -! ... paj: preparations to compute PSIQ -! - pq(i)=psih_unstable(zol(i))-psih_unstable(zl) - pq2(i)=psih_unstable(zl2)-psih_unstable(zl) - pq10(i)=psih_unstable(zl10)-psih_unstable(zl) -! -!-----LIMIT PSIH AND PSIM IN THE CASE OF THIN LAYERS AND HIGH ROUGHNESS -!-----THIS PREVENTS DENOMINATOR IN FLUXES FROM GETTING TOO SMALL - psih(i)=amin1(psih(i),0.9*gz1oz0(i)) - psim(i)=amin1(psim(i),0.9*gz1oz0(i)) - psih2(i)=amin1(psih2(i),0.9*gz2oz0(i)) - psim10(i)=amin1(psim10(i),0.9*gz10oz0(i)) -! -! AHW: mods to compute ck, cd - psih10(i)=amin1(psih10(i),0.9*gz10oz0(i)) - rmol(i) = zol(i)/za(i) - - 320 continue -! -!-----COMPUTE THE FRICTIONAL VELOCITY: -! ZA(1982) EQS(2.60),(2.61). -! - do 330 i = its,ite - dtg=thx(i)-thgb(i) - psix=gz1oz0(i)-psim(i) - psix10=gz10oz0(i)-psim10(i) - -! LOWER LIMIT ADDED TO PREVENT LARGE FLHC IN SOIL MODEL -! ACTIVATES IN UNSTABLE CONDITIONS WITH THIN LAYERS OR HIGH Z0 -! PSIT=AMAX1(GZ1OZ0(I)-PSIH(I),2.) - psit=gz1oz0(i)-psih(i) - psit2=gz2oz0(i)-psih2(i) -! - if((xland(i)-1.5).ge.0)then - zl=znt(i) - else - zl=0.01 - endif -! - psiq=alog(karman*ust(i)*za(i)/xka+za(i)/zl)-pq(i) - psiq2=alog(karman*ust(i)*2./xka+2./zl)-pq2(i) - -! AHW: mods to compute ck, cd - psiq10=alog(karman*ust(i)*10./xka+10./zl)-pq10(i) - -! v3.7: using fairall 2003 to compute z0q and z0t over water: -! adapted from module_sf_mynn.f - if((xland(i)-1.5).ge.0.) then - visc=(1.32+0.009*(scr3(i)-273.15))*1.e-5 - restar=ust(i)*znt(i)/visc - z0t = (5.5e-5)*(restar**(-0.60)) - z0t = min(z0t,1.0e-4) - z0t = max(z0t,2.0e-9) - z0q = z0t - -! following paj: - zolzz=zol(i)*(za(i)+z0t)/za(i) ! (z+z0t)/L - zol10=zol(i)*(10.+z0t)/za(i) ! (10+z0t)/L - zol2=zol(i)*(2.+z0t)/za(i) ! (2+z0t)/L - zol0=zol(i)*z0t/za(i) ! z0t/L -! - if(zol(i).gt.0.) then - psih(i)=psih_stable(zolzz)-psih_stable(zol0) - psih10(i)=psih_stable(zol10)-psih_stable(zol0) - psih2(i)=psih_stable(zol2)-psih_stable(zol0) - else - if(zol(i).eq.0) then - psih(i)=0. - psih10(i)=0. - psih2(i)=0. - else - psih(i)=psih_unstable(zolzz)-psih_unstable(zol0) - psih10(i)=psih_unstable(zol10)-psih_unstable(zol0) - psih2(i)=psih_unstable(zol2)-psih_unstable(zol0) - endif - endif - psit=alog((za(i)+z0t)/z0t)-psih(i) - psit2=alog((2.+z0t)/z0t)-psih2(i) - - zolzz=zol(i)*(za(i)+z0q)/za(i) ! (z+z0q)/L - zol10=zol(i)*(10.+z0q)/za(i) ! (10+z0q)/L - zol2=zol(i)*(2.+z0q)/za(i) ! (2+z0q)/L - zol0=zol(i)*z0q/za(i) ! z0q/L -! - if(zol(i).gt.0.) then - psih(i)=psih_stable(zolzz)-psih_stable(zol0) - psih10(i)=psih_stable(zol10)-psih_stable(zol0) - psih2(i)=psih_stable(zol2)-psih_stable(zol0) - else - if(zol(i).eq.0) then - psih(i)=0. - psih10(i)=0. - psih2(i)=0. - else - psih(i)=psih_unstable(zolzz)-psih_unstable(zol0) - psih10(i)=psih_unstable(zol10)-psih_unstable(zol0) - psih2(i)=psih_unstable(zol2)-psih_unstable(zol0) - endif - endif -! - psiq=alog((za(i)+z0q)/z0q)-psih(i) - psiq2=alog((2.+z0q)/z0q)-psih2(i) - psiq10=alog((10.+z0q)/z0q)-psih10(i) - endif - - if(present(isftcflx)) then - if(isftcflx.eq.1 .and. (xland(i)-1.5).ge.0.) then -! v3.1 -! z0q = 1.e-4 + 1.e-3*(max(0.,ust(i)-1.))**2 -! hfip1 -! z0q = 0.62*2.0e-5/ust(i) + 1.e-3*(max(0.,ust(i)-1.5))**2 -! v3.2 - z0q = 1.e-4 -! -! ... paj: recompute psih for z0q -! - zolzz=zol(i)*(za(i)+z0q)/za(i) ! (z+z0q)/L - zol10=zol(i)*(10.+z0q)/za(i) ! (10+z0q)/L - zol2=zol(i)*(2.+z0q)/za(i) ! (2+z0q)/L - zol0=zol(i)*z0q/za(i) ! z0q/L -! - if(zol(i).gt.0.) then - psih(i)=psih_stable(zolzz)-psih_stable(zol0) - psih10(i)=psih_stable(zol10)-psih_stable(zol0) - psih2(i)=psih_stable(zol2)-psih_stable(zol0) - else - if(zol(i).eq.0) then - psih(i)=0. - psih10(i)=0. - psih2(i)=0. - else - psih(i)=psih_unstable(zolzz)-psih_unstable(zol0) - psih10(i)=psih_unstable(zol10)-psih_unstable(zol0) - psih2(i)=psih_unstable(zol2)-psih_unstable(zol0) - endif - endif -! - psiq=alog((za(i)+z0q)/z0q)-psih(i) - psit=psiq - psiq2=alog((2.+z0q)/z0q)-psih2(i) - psiq10=alog((10.+z0q)/z0q)-psih10(i) - psit2=psiq2 - endif - if(isftcflx.eq.2 .and. (xland(i)-1.5).ge.0.) then -! AHW: Garratt formula: Calculate roughness Reynolds number -! Kinematic viscosity of air (linear approc to -! temp dependence at sea level) -! GZ0OZT and GZ0OZQ are based off formulas from Brutsaert (1975), which -! Garratt (1992) used with values of k = 0.40, Pr = 0.71, and Sc = 0.60 - visc=(1.32+0.009*(scr3(i)-273.15))*1.e-5 -! visc=1.5e-5 - restar=ust(i)*znt(i)/visc - gz0ozt=0.40*(7.3*sqrt(sqrt(restar))*sqrt(0.71)-5.) -! -! ... paj: compute psih for z0t for temperature ... -! - z0t=znt(i)/exp(gz0ozt) -! - zolzz=zol(i)*(za(i)+z0t)/za(i) ! (z+z0t)/L - zol10=zol(i)*(10.+z0t)/za(i) ! (10+z0t)/L - zol2=zol(i)*(2.+z0t)/za(i) ! (2+z0t)/L - zol0=zol(i)*z0t/za(i) ! z0t/L -! - if(zol(i).gt.0.) then - psih(i)=psih_stable(zolzz)-psih_stable(zol0) - psih10(i)=psih_stable(zol10)-psih_stable(zol0) - psih2(i)=psih_stable(zol2)-psih_stable(zol0) - else - if(zol(i).eq.0) then - psih(i)=0. - psih10(i)=0. - psih2(i)=0. - else - psih(i)=psih_unstable(zolzz)-psih_unstable(zol0) - psih10(i)=psih_unstable(zol10)-psih_unstable(zol0) - psih2(i)=psih_unstable(zol2)-psih_unstable(zol0) - endif - endif -! -! psit=gz1oz0(i)-psih(i)+restar2 -! psit2=gz2oz0(i)-psih2(i)+restar2 - psit=alog((za(i)+z0t)/z0t)-psih(i) - psit2=alog((2.+z0t)/z0t)-psih2(i) -! - gz0ozq=0.40*(7.3*sqrt(sqrt(restar))*sqrt(0.60)-5.) - z0q=znt(i)/exp(gz0ozq) -! - zolzz=zol(i)*(za(i)+z0q)/za(i) ! (z+z0q)/L - zol10=zol(i)*(10.+z0q)/za(i) ! (10+z0q)/L - zol2=zol(i)*(2.+z0q)/za(i) ! (2+z0q)/L - zol0=zol(i)*z0q/za(i) ! z0q/L -! - if(zol(i).gt.0.) then - psih(i)=psih_stable(zolzz)-psih_stable(zol0) - psih10(i)=psih_stable(zol10)-psih_stable(zol0) - psih2(i)=psih_stable(zol2)-psih_stable(zol0) - else - if(zol(i).eq.0) then - psih(i)=0. - psih10(i)=0. - psih2(i)=0. - else - psih(i)=psih_unstable(zolzz)-psih_unstable(zol0) - psih10(i)=psih_unstable(zol10)-psih_unstable(zol0) - psih2(i)=psih_unstable(zol2)-psih_unstable(zol0) - endif - endif -! - psiq=alog((za(i)+z0q)/z0q)-psih(i) - psiq2=alog((2.+z0q)/z0q)-psih2(i) - psiq10=alog((10.+z0q)/z0q)-psih10(i) -! psiq=gz1oz0(i)-psih(i)+2.28*sqrt(sqrt(restar))-2. -! psiq2=gz2oz0(i)-psih2(i)+2.28*sqrt(sqrt(restar))-2. -! psiq10=gz10oz0(i)-psih(i)+2.28*sqrt(sqrt(restar))-2. - endif - endif - if(present(ck) .and. present(cd) .and. present(cka) .and. present(cda)) then - ck(i)=(karman/psix10)*(karman/psiq10) - cd(i)=(karman/psix10)*(karman/psix10) - cka(i)=(karman/psix)*(karman/psiq) - cda(i)=(karman/psix)*(karman/psix) - endif - if(present(iz0tlnd)) then - if(iz0tlnd.ge.1 .and. (xland(i)-1.5).le.0.) then - zl=znt(i) -! CZIL RELATED CHANGES FOR LAND - visc=(1.32+0.009*(scr3(i)-273.15))*1.e-5 - restar=ust(i)*zl/visc -! Modify CZIL according to Chen & Zhang, 2009 if iz0tlnd = 1 -! If iz0tlnd = 2, use traditional value - - if(iz0tlnd.eq.1) then - czil = 10.0 ** ( -0.40 * ( zl / 0.07 ) ) - elseif(iz0tlnd.eq.2) then - czil = 0.1 - endif -! -! ... paj: compute phish for z0t over land -! - z0t=znt(i)/exp(czil*karman*sqrt(restar)) -! - zolzz=zol(i)*(za(i)+z0t)/za(i) ! (z+z0t)/L - zol10=zol(i)*(10.+z0t)/za(i) ! (10+z0t)/L - zol2=zol(i)*(2.+z0t)/za(i) ! (2+z0t)/L - zol0=zol(i)*z0t/za(i) ! z0t/L -! - if(zol(i).gt.0.) then - psih(i)=psih_stable(zolzz)-psih_stable(zol0) - psih10(i)=psih_stable(zol10)-psih_stable(zol0) - psih2(i)=psih_stable(zol2)-psih_stable(zol0) - else - if(zol(i).eq.0) then - psih(i)=0. - psih10(i)=0. - psih2(i)=0. - else - psih(i)=psih_unstable(zolzz)-psih_unstable(zol0) - psih10(i)=psih_unstable(zol10)-psih_unstable(zol0) - psih2(i)=psih_unstable(zol2)-psih_unstable(zol0) - endif - endif -! - psiq=alog((za(i)+z0t)/z0t)-psih(i) - psiq2=alog((2.+z0t)/z0t)-psih2(i) - psit=psiq - psit2=psiq2 -! -! psit=gz1oz0(i)-psih(i)+czil*karman*sqrt(restar) -! psiq=gz1oz0(i)-psih(i)+czil*karman*sqrt(restar) -! psit2=gz2oz0(i)-psih2(i)+czil*karman*sqrt(restar) -! psiq2=gz2oz0(i)-psih2(i)+czil*karman*sqrt(restar) - endif - endif -! TO PREVENT OSCILLATIONS AVERAGE WITH OLD VALUE - ust(i)=0.5*ust(i)+0.5*karman*wspd(i)/psix -! TKE coupling: compute ust without vconv for use in tke scheme - wspdi(i)=sqrt(ux(i)*ux(i)+vx(i)*vx(i)) - if(present(ustm)) then - ustm(i)=0.5*ustm(i)+0.5*karman*wspdi(i)/psix - endif - - u10(i)=ux(i)*psix10/psix - v10(i)=vx(i)*psix10/psix - th2(i)=thgb(i)+dtg*psit2/psit - q2(i)=qsfc(i)+(qx(i)-qsfc(i))*psiq2/psiq - t2(i) = th2(i)*(psfcpa(i)/p1000mb)**rovcp -! - if((xland(i)-1.5).lt.0.)then - ust(i)=amax1(ust(i),0.001) - endif - mol(i)=karman*dtg/psit/prt - denomq(i)=psiq - denomq2(i)=psiq2 - denomt2(i)=psit2 - fm(i)=psix - fh(i)=psit - 330 continue -! - 335 continue - -!-----COMPUTE THE SURFACE SENSIBLE AND LATENT HEAT FLUXES: - if(present(scm_force_flux) ) then - if(scm_force_flux.eq.1) goto 350 - endif - do i = its,ite - qfx(i)=0. - hfx(i)=0. - enddo - 350 continue - - if(isfflx.eq.0) goto 410 - -!-----OVER WATER, ALTER ROUGHNESS LENGTH (ZNT) ACCORDING TO WIND (UST). - do 360 i = its,ite - if((xland(i)-1.5).ge.0)then -! znt(i)=czo*ust(i)*ust(i)/g+ozo - ! PSH - formulation for depth-dependent roughness from - ! ... Jimenez and Dudhia, 2018 - if(shalwater_z0 .eq. 1) then - znt(i) = depth_dependent_z0(water_depth(i),znt(i),ust(i)) - else - !Since V3.7 (ref: EC Physics document for Cy36r1) - znt(i)=czo*ust(i)*ust(i)/g+0.11*1.5e-5/ust(i) - ! v3.9: add limit as in isftcflx = 1,2 - znt(i)=min(znt(i),2.85e-3) - endif -! COARE 3.5 (Edson et al. 2013) -! czc = 0.0017*wspd(i)-0.005 -! czc = min(czc,0.028) -! znt(i)=czc*ust(i)*ust(i)/g+0.11*1.5e-5/ust(i) -! AHW: change roughness length, and hence the drag coefficients Ck and Cd - if(present(isftcflx)) then - if(isftcflx.ne.0) then -! znt(i)=10.*exp(-9.*ust(i)**(-.3333)) -! znt(i)=10.*exp(-9.5*ust(i)**(-.3333)) -! znt(i)=znt(i) + 0.11*1.5e-5/amax1(ust(i),0.01) -! znt(i)=0.011*ust(i)*ust(i)/g+ozo -! znt(i)=max(znt(i),3.50e-5) -! AHW 2012: - zw = min((ust(i)/1.06)**(0.3),1.0) - zn1 = 0.011*ust(i)*ust(i)/g + ozo - zn2 = 10.*exp(-9.5*ust(i)**(-.3333)) + & - 0.11*1.5e-5/amax1(ust(i),0.01) - znt(i)=(1.0-zw) * zn1 + zw * zn2 - znt(i)=min(znt(i),2.85e-3) - znt(i)=max(znt(i),1.27e-7) - endif - endif - zl = znt(i) - else - zl = 0.01 - endif - flqc(i)=rhox(i)*mavail(i)*ust(i)*karman/denomq(i) -! flqc(i)=rhox(i)*mavail(i)*ust(i)*karman/( & -! alog(karman*ust(i)*za(i)/xka+za(i)/zl)-psih(i)) - dtthx=abs(thx(i)-thgb(i)) - if(dtthx.gt.1.e-5)then - flhc(i)=cpm(i)*rhox(i)*ust(i)*mol(i)/(thx(i)-thgb(i)) -! write(*,1001)flhc(i),cpm(i),rhox(i),ust(i),mol(i),thx(i),thgb(i),i - 1001 format(f8.5,2x,f12.7,2x,f12.10,2x,f12.10,2x,f13.10,2x,f12.8,f12.8,2x,i3) - else - flhc(i)=0. - endif - 360 continue - -! -!-----COMPUTE SURFACE MOIST FLUX: -! -!IF(IDRY.EQ.1)GOTO 390 -! - if(present(scm_force_flux)) then - if(scm_force_flux.eq.1) goto 405 - endif - - do 370 i = its,ite - qfx(i)=flqc(i)*(qsfc(i)-qx(i)) - qfx(i)=amax1(qfx(i),0.) - lh(i)=xlv*qfx(i) - 370 continue - -!-----COMPUTE SURFACE HEAT FLUX: -! - 390 continue - do 400 i = its,ite - if(xland(i)-1.5.gt.0.)then - hfx(i)=flhc(i)*(thgb(i)-thx(i)) -! if(present(isftcflx)) then -! if(isftcflx.ne.0) then -! AHW: add dissipative heating term (commented out in 3.6.1) -! hfx(i)=hfx(i)+rhox(i)*ustm(i)*ustm(i)*wspdi(i) -! endif -! endif - elseif(xland(i)-1.5.lt.0.)then - hfx(i)=flhc(i)*(thgb(i)-thx(i)) - hfx(i)=amax1(hfx(i),-250.) - endif - 400 continue - - 405 continue - - do i = its,ite - if((xland(i)-1.5).ge.0)then - zl=znt(i) - else - zl=0.01 - endif -!v3.1.1 -! chs(i)=ust(i)*karman/(alog(karman*ust(i)*za(i) & -! /xka+za(i)/zl)-psih(i)) - chs(i)=ust(i)*karman/denomq(i) -! gz2oz0(i)=alog(2./znt(i)) -! psim2(i)=-10.*gz2oz0(i) -! psim2(i)=amax1(psim2(i),-10.) -! psih2(i)=psim2(i) -! v3.1.1 -! cqs2(i)=ust(i)*karman/(alog(karman*ust(i)*2.0 & -! /xka+2.0/zl)-psih2(i)) -! chs2(i)=ust(i)*karman/(gz2oz0(i)-psih2(i)) - cqs2(i)=ust(i)*karman/denomq2(i) - chs2(i)=ust(i)*karman/denomt2(i) - enddo - - 410 continue - -!jdf -! do i = its,ite -! if(ust(i).ge.0.1) then -! rmol(i)=rmol(i)*(-flhc(i))/(ust(i)*ust(i)*ust(i)) -! else -! rmol(i)=rmol(i)*(-flhc(i))/(0.1*0.1*0.1) -! endif -! enddo -!jdf - - errmsg = 'sf_sfclayrev_run OK' - errflg = 0 - - end subroutine sf_sfclayrev_run - -!================================================================================================================= - real(kind=kind_phys) function zolri(ri,z,z0) - real(kind=kind_phys),intent(in):: ri,z,z0 - - integer:: iter - real(kind=kind_phys):: fx1,fx2,x1,x2 - - - if(ri.lt.0.)then - x1=-5. - x2=0. - else - x1=0. - x2=5. - endif - - fx1=zolri2(x1,ri,z,z0) - fx2=zolri2(x2,ri,z,z0) - iter = 0 - do while (abs(x1 - x2) > 0.01) - if (iter .eq. 10) return -!check added for potential divide by zero (2019/11) - if(fx1.eq.fx2)return - if(abs(fx2).lt.abs(fx1))then - x1=x1-fx1/(fx2-fx1)*(x2-x1) - fx1=zolri2(x1,ri,z,z0) - zolri=x1 - else - x2=x2-fx2/(fx2-fx1)*(x2-x1) - fx2=zolri2(x2,ri,z,z0) - zolri=x2 - endif - iter = iter + 1 - enddo - - return - end function zolri - -!================================================================================================================= - real(kind=kind_phys) function zolri2(zol2,ri2,z,z0) - real(kind=kind_phys),intent(in):: ri2,z,z0 - real(kind=kind_phys),intent(inout):: zol2 - real(kind=kind_phys):: psih2,psix2,zol20,zol3 - - if(zol2*ri2 .lt. 0.)zol2=0. ! limit zol2 - must be same sign as ri2 - - zol20=zol2*z0/z ! z0/L - zol3=zol2+zol20 ! (z+z0)/L - - if(ri2.lt.0) then - psix2=log((z+z0)/z0)-(psim_unstable(zol3)-psim_unstable(zol20)) - psih2=log((z+z0)/z0)-(psih_unstable(zol3)-psih_unstable(zol20)) - else - psix2=log((z+z0)/z0)-(psim_stable(zol3)-psim_stable(zol20)) - psih2=log((z+z0)/z0)-(psih_stable(zol3)-psih_stable(zol20)) - endif - - zolri2=zol2*psih2/psix2**2-ri2 - - return - end function zolri2 - -!================================================================================================================= -! -! ... integrated similarity functions ... -! - real(kind=kind_phys) function psim_stable_full(zolf) - real(kind=kind_phys),intent(in):: zolf - psim_stable_full=-6.1*log(zolf+(1+zolf**2.5)**(1./2.5)) - - return - end function psim_stable_full - -!================================================================================================================= - real(kind=kind_phys) function psih_stable_full(zolf) - real(kind=kind_phys),intent(in):: zolf - psih_stable_full=-5.3*log(zolf+(1+zolf**1.1)**(1./1.1)) - - return - end function psih_stable_full - -!================================================================================================================= - real(kind=kind_phys) function psim_unstable_full(zolf) - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: psimc,psimk,x,y,ym - x=(1.-16.*zolf)**.25 - psimk=2*ALOG(0.5*(1+X))+ALOG(0.5*(1+X*X))-2.*ATAN(X)+2.*ATAN(1.) - - ym=(1.-10.*zolf)**0.33 - psimc=(3./2.)*log((ym**2.+ym+1.)/3.)-sqrt(3.)*ATAN((2.*ym+1)/sqrt(3.))+4.*ATAN(1.)/sqrt(3.) - - psim_unstable_full=(psimk+zolf**2*(psimc))/(1+zolf**2.) - - return - end function psim_unstable_full - -!================================================================================================================= - real(kind=kind_phys) function psih_unstable_full(zolf) - real(kind=kind_phys),intent(in):: zolf - real(kind=kind_phys):: psihc,psihk,y,yh - y=(1.-16.*zolf)**.5 - psihk=2.*log((1+y)/2.) - - yh=(1.-34.*zolf)**0.33 - psihc=(3./2.)*log((yh**2.+yh+1.)/3.)-sqrt(3.)*ATAN((2.*yh+1)/sqrt(3.))+4.*ATAN(1.)/sqrt(3.) - - psih_unstable_full=(psihk+zolf**2*(psihc))/(1+zolf**2.) - - return - end function psih_unstable_full - -!================================================================================================================= -! ... look-up table functions ... - real(kind=kind_phys) function psim_stable(zolf) - real(kind=kind_phys),intent(in):: zolf - integer:: nzol - real(kind=kind_phys):: rzol - nzol = int(zolf*100.) - rzol = zolf*100. - nzol - if(nzol+1 .lt. 1000)then - psim_stable = psim_stab(nzol) + rzol*(psim_stab(nzol+1)-psim_stab(nzol)) - else - psim_stable = psim_stable_full(zolf) - endif - - return - end function psim_stable - -!================================================================================================================= - real(kind=kind_phys) function psih_stable(zolf) - real(kind=kind_phys),intent(in):: zolf - integer:: nzol - real(kind=kind_phys):: rzol - nzol = int(zolf*100.) - rzol = zolf*100. - nzol - if(nzol+1 .lt. 1000)then - psih_stable = psih_stab(nzol) + rzol*(psih_stab(nzol+1)-psih_stab(nzol)) - else - psih_stable = psih_stable_full(zolf) - endif - - return - end function psih_stable - -!================================================================================================================= - real(kind=kind_phys) function psim_unstable(zolf) - real(kind=kind_phys),intent(in):: zolf - integer:: nzol - real(kind=kind_phys):: rzol - nzol = int(-zolf*100.) - rzol = -zolf*100. - nzol - if(nzol+1 .lt. 1000)then - psim_unstable = psim_unstab(nzol) + rzol*(psim_unstab(nzol+1)-psim_unstab(nzol)) - else - psim_unstable = psim_unstable_full(zolf) - endif - - return - end function psim_unstable - -!================================================================================================================= - real(kind=kind_phys) function psih_unstable(zolf) - real(kind=kind_phys),intent(in):: zolf - integer:: nzol - real(kind=kind_phys):: rzol - nzol = int(-zolf*100.) - rzol = -zolf*100. - nzol - if(nzol+1 .lt. 1000)then - psih_unstable = psih_unstab(nzol) + rzol*(psih_unstab(nzol+1)-psih_unstab(nzol)) - else - psih_unstable = psih_unstable_full(zolf) - endif - - return - end function psih_unstable - -!================================================================================================================= - real(kind=kind_phys) function depth_dependent_z0(water_depth,z0,ust) - real(kind=kind_phys),intent(in):: water_depth,z0,ust - real(kind=kind_phys):: depth_b - real(kind=kind_phys):: effective_depth - if(water_depth .lt. 10.0) then - effective_depth = 10.0 - elseif(water_depth .gt. 100.0) then - effective_depth = 100.0 - else - effective_depth = water_depth - endif - - depth_b = 1 / 30.0 * log (1260.0 / effective_depth) - depth_dependent_z0 = exp((2.7 * ust - 1.8 / depth_b) / (ust + 0.17 / depth_b) ) - depth_dependent_z0 = MIN(depth_dependent_z0,0.1) - - return - end function depth_dependent_z0 - -!================================================================================================================= - end module sf_sfclayrev -!================================================================================================================= diff --git a/src/core_atmosphere/physics/physics_noahmp/README.md b/src/core_atmosphere/physics/physics_noahmp/README.md new file mode 100644 index 000000000..de0a3fb93 --- /dev/null +++ b/src/core_atmosphere/physics/physics_noahmp/README.md @@ -0,0 +1,88 @@ +![noahmp_logo_update](https://github.com/NCAR/noahmp/assets/43385564/1fb47fc2-99bd-4360-9ed0-6d5656c29626) + + +[![DOI](https://zenodo.org/badge/236657733.svg)](https://zenodo.org/badge/latestdoi/236657733) + + +# Noah-MP® Community Model Repository + +Noah-MP® is a widely-used state-of-the-art land surface model used in many research and operational weather/climate models (e.g., HRLDAS, WRF, MPAS, WRF-Hydro/NWM, NOAA/UFS, NASA/LIS, etc.). + +This is the official Noah-MP land surface model unified repository for code downloading and contribution. Noah-MP is a community open-source model developed with the contributions from the entire scientific community. For development, maintenance, and release of the community Noah-MP GitHub code, please contact: Cenlin He (cenlinhe@ucar.edu) and Fei Chen (feichen@ucar.edu). + +Noah-MP model website: https://ral.ucar.edu/solutions/products/noah-multiparameterization-land-surface-model-noah-mp-lsm + + +## New: Release of Noah-MP version 5.0 (Refactored/Modernized version) + +The latest Noah-MP model version (version 5.0) has been released in March 9, 2023, which is a modernized/refactored version by re-writing the entire model with modern Fortran code infrastructure and data structures. All future Noah-MP developments and updates will be made only to this modernized/refactored version. The version 5.0 has the same model physics as the version 4.5, but with a different code infrastructure. More details about the Noah-MP version 5.0 can be found in the model description paper (He et al., 2023b, in review) and the technical documentation (He et al. 2023a). Currently, the Noah-MP version 5.0 coupling with HRLDAS has been completed, but its coupling with other host models (e.g., WRF-Hydro, NASA/LIS, WRF, MPAS, UFS, etc.) is still on-going. + + +## Noah-MP technical documentation and model description papers + +Technical documentation freely available at http://dx.doi.org/10.5065/ew8g-yr95 + +**To cite the technical documentation**: He, C., P. Valayamkunnath, M. Barlage, F. Chen, D. Gochis, R. Cabell, T. Schneider, R. Rasmussen, G.-Y. Niu, Z.-L. Yang, D. Niyogi, and M. Ek (2023): The Community Noah-MP Land Surface Modeling System Technical Description Version 5.0, (No. NCAR/TN-575+STR). doi:10.5065/ew8g-yr95 + +**Original Noah-MP model description paper**: Niu, G. Y., Yang, Z. L., Mitchell, K. E., Chen, F., Ek, M. B., Barlage, M., ... & Xia, Y. (2011). The community Noah land surface model with multiparameterization options (Noah‐MP): 1. Model description and evaluation with local‐scale measurements. Journal of Geophysical Research: Atmospheres, 116(D12). + +**Noah-MP version 5.0 model description paper**: He, C., Valayamkunnath, P., Barlage, M., Chen, F., Gochis, D., Cabell, R., Schneider, T., Rasmussen, R., Niu, G.-Y., Yang, Z.-L., Niyogi, D., and Ek, M.: Modernizing the open-source community Noah with multi-parameterization options (Noah-MP) land surface model (version 5.0) with enhanced modularity, interoperability, and applicability, Geosci. Model Dev., 16, 5131–5151, https://doi.org/10.5194/gmd-16-5131-2023, 2023. + + +## Noah-MP GitHub structure + +**The folders**: + +1. docs/: Noah-MP variable glossary and technical documentation; + +2. drivers/: Noah-MP driver and interface code to connect to different host models (each host model will has its own subdirectory under this driver/); + +3. parameters/: Noah-MP parameter table (note that the original 3 parameter tables have been merged into one NoahmpTable.TBL starting from version 5.0); + +4. src/: Noah-MP source code modules; + +5. utility/: Noah-MP utility code. + +**The branches**: + +1. "master" branch: (currently version 5.0), most stable & latest version, updated whenever there are bug fixes or major model update/release (by merging from the "develop" branch); + +2. "develop" branch: (currently version 5.0), used for continuous NoahMP development, keep updated by including bug fixes and code updates (e.g., new physics options, processes, etc.); + +3. other version release branches: store different released code versions. + + +## Important notes + +This GitHub repository only provides the Noah-MP source code and driver/interface code. To run Noah-MP in either offline or online mode, users need to have the host model system/framework coupled with Noah-MP. + +NCAR also maintains and releases the HRLDAS (High Resolution Land Data Assimilation System) coupled with Noah-MP to allow offline Noah-MP simulations. Please see the HRLDAS GitHub repository (https://github.com/NCAR/hrldas) for details. For users who are interested in other host models that couple with Noah-MP, please refer to those host model GitHub repositories. + +For users who are interested in previous Noah-MP code versions (prior to version 5.0), please refer to the different GitHub branches in this repository. Particularly, the "release-v4.5-WRF" branch has the same model physics as the Noah-MP version 5.0, but with an old model code structures, which is consistent with the Noah-MP code released along with WRF version 4.5. + + +## Code contribution via GitHub + +Users are welcome to make code development and contributions through GitHub pull requests. The pull request will be reviewed by the Noah-MP model physics and code release team, and if everything looks good, the pull request of new code development or bug fixes will be merged into the develop branch. During each year's major version release period, the updated develop branch will be further merged into the master branch for official release of a new Noah-MP model version. + +Some suggestions for model developers to contribute to Noah-MP code through the GitHub repository (typical procedures): + +1. Step (1) Create a fork of this official Noah-MP repository to your own GitHub account; + +2. Step (2) Create a new branch based on the latest "develop" branch and make code updates/changes in the forked repository under your own account; + +3. Step (3) Finalize and test the code updates you make; + +4. Step (4) Submit a pull request for your code updates from your own forked Github repository to the "develop" branch of this official Noah-MP repository; + +5. Step (5) The Noah-MP physics and code review committee reviews and tests the model updates in the submitted pull request and discusses with the developer if there is any problem; + +6. Step (6) The Noah-MP physics and code review committee confirms the pull request and merges the updated code to the "develop" branch in this official Noah-MP repository; + +7. Step (7) The Noah-MP physics and code review committee merges the updated "develop" branch to the master branch during the annual release of new model versions. + + +## License + +The license and terms of use for this software can be found [here](https://github.com/NCAR/noahmp/blob/develop/LICENSE.txt) + diff --git a/src/core_atmosphere/physics/physics_noahmp/RELEASE_NOTES.md b/src/core_atmosphere/physics/physics_noahmp/RELEASE_NOTES.md new file mode 100644 index 000000000..ae45c39f5 --- /dev/null +++ b/src/core_atmosphere/physics/physics_noahmp/RELEASE_NOTES.md @@ -0,0 +1,426 @@ +# Noah-MP model release notes + +## Noah-MP version 5.0 release + +### LSM capabilities/enhancements + +- Modernization/refactoring: + + - Major re-structure/refactoring of the entire Noah-MP code with modern Fortran standards without physics changes. + +### LSM bug fixes + +- None + +### External modules capabilities/enhancements + +- None + +### Driver capabilities/enhancements + +- Refactored driver to work with the modernized Noah-MP version 5.0 + +### Driver bug fixes + +- None + + +## Noah-MP version 4.5 release + +### LSM capabilities/enhancements + +- Urban modeling: + + - Update the local climate zone numbers + +- Canopy heat storage: + + - bring hard-coded tunable canopy heat capacity parameter to MPTABLE + +### LSM bug fixes + +- Several bug fixes in urban, runoff, canopy, crop processes + +### External modules capabilities/enhancements + +- None + +### Driver capabilities/enhancements + +- None + +### Driver bug fixes + +- None + + +## Noah-MP version 4.4 release + +### LSM capabilities/enhancements + +- Tile drainage: + + - Add new tile drainage physics and options + +- Snowpack process enhancement: + + - Improved snow viscosity to enhance snowpack compaction + +- Canopy heat storage: + + - add canopy heat storage in vegetation temperature calculation + +- Runoff scheme: + + - Updated formulation in runoff option =1 (TOPMODEL with groundwater) + +- Soil processes: + + - Add new capabilities to allow using a different soil timestep with main Noah-MP timestep using namelist control + +- Input/output: + + - Add new capabilities to output additional detailed Noah-MP water budget terms using namelist control + +### LSM bug fixes + +- Several bug fixes in inout variables, energy, water, and canopy processes + +### External modules capabilities/enhancements + +- None + +### Driver capabilities/enhancements + +- None + +### Driver bug fixes + +- None + + +## Noah-MP version 4.3 release + +### LSM capabilities/enhancements + +- Snow-related updates: + + - Add wet-bulb temperature snow-rain partitioning scheme (OPT_SNF=5) based on Wang et al. 2019 (NWM) + - Add snow retention process at the snowpack bottom to improve streamflow modeling (NWM) + - Modify wind-canopy absorption coefficient (CWPVT) parameter values in MPTABLE to be vegetation dependent based on Goudriaan1977 + - Bring hard-coded snow emissivity and parameter (2.5*z0) in snow cover formulation to tunable MPTABLE parameters + - Update MFSNO in snow cover formulation with optimized vegetation-dependent values + - Limit the bulk leaf boundary layer resistance (RB) to a more realistic range (5~50) + +- New irrigation scheme: + + - multiple irrigation methods: sprinkler, micro, and surface flooding + +- Crop scheme update: + + - separate the original generic crop physiology parameters in the modis vegetation section into C3/C4 specific parameters in the crop section + +- New urban physics working with Noah-MP: + + - Local climate zone (LCZ), solar panel, green roof, new building drag parameterization + +### LSM bug fixes + +- None + +### External modules capabilities/enhancements + +- None + +### Driver capabilities/enhancements + +- None + +### Driver bug fixes + +- None + + +## Noah-MP version 4.1 release + +### LSM capabilities/enhancements + +- Consolidate NWM changes into WRF version (#18) + - add unpopulated header required by NOAA + - add BATS parameters to data structure and output band snow albedo + - update MPTABLE for BATS albedo parameters + - add BATS albedo local variables to noahmpdrv + - transfer new BATS table values to parameters data structure in noahmpdrv + - add RSURF_EXP parameter to data structure and update MPTABLE + - change snow water equivalent limit to 5000mm + - assume LAI is stand LAI and doesn't need to be rescaled by FVEG + - conserve snow pack heat when layer melts completely + - change output messages and Fortran open/read unit numbers to WCOSS standard + - include a few missed changes from WRF + +### LSM bug fixes + +- Define and declare a few variables in physics routines + +- Noah-MP bulk urban roughness length set to table values + +### External modules capabilities/enhancements + +- Air conditioning fraction for BEM model + +- Improve urban memory by allowing different dimensions for urban variables + +### Driver capabilities/enhancements + +- None + +### Driver bug fixes + +- None + + +## Noah-MP version 4.0.1 release + +### LSM capabilities/enhancements + +- None + +### LSM bug fixes + +- Noah-MP frozen soil initialization- An incorrect sign change was introduced in v4.0, impacting soil moisture and soil temperature initialization. + +- Array out of bounds Noah-MP - Fix possible/likely array out of bounds by assuming homogeneous soil with depth.Only applies to opt_run=2. + +- Noah-MP snow liquid water movement - prevent excessive gravitational water movement. Fixes unrealistic snow density values during melt season. + +- Noah-MP divide by zero - Bug fix in v4.0 introduced a possible divide by zero when LAI is zero. + +- Noah-MP leaf aerodynamic resistance - limit leaf aerodynamic resistance to prevent very large canopy exchange coefficients with high wind speed. + +### Driver capabilities/enhancements + +- Add new single point driver based on Bondville data + +### Driver bug fixes + +- Missing quotation mark in spatial_filename check print statement + + +## Noah-MP version 4.0 release + +### LSM capabilities/enhancements + +- Add pedotransfer function option for soil propertis + - add optional read for soil composition and multi-layer soil texture from setup/input file + - activated with opt_soil and opt_pedo + - update MPTABLE.TBL with pedotransfer function coefficients + +- Add Gecros crop model + - activated with opt_crop=2 (Liu et al. crop now opt_crop=1) + - some modifications for crop initialization + +- Groundwater module (opt_run=5) updates + - move init to driver for parallel capability + - remove rivermask/nonriver from input + +- EPA modifications to output total stomatal resistance + +### LSM bug fixes + +- None + +### Driver capabilities/enhancements + +- Change some predefined defaults in user_build_options.compiler files based on some Cheyenne tests + +- Add ISLAKE to the preprocessing and driver to accommodate WRF files that define a distinct lake category + +### Driver bug fixes + +- Change PGSXY and CROPCAT to be initialized undefined_int + + +## Noah-MP version 3.9 release + +### LSM capabilities/enhancements + +- Crop modifications in v3.9 to read in crop datasets and initialize properly + +- Modifications in v3.9 to read in groundwater datasets + +- Noah-MP can now run with single-layer and multi-layer urban models + +### LSM bug fixes + +- Several fixes in Section 1 of SOILPARM.TBL + +- Fix strange Noah-MP behavior in soil water in certain conditions + +- Fix uninitialized variable in Noah-MP surface exchange option + +### Driver capabilities/enhancements + +- Add capability to include snow in forcing files + - Need to set FORCING_NAME_SN and PCP_PARTITION_OPTION = 4 + - Snow is assumed to be <= incoming precipitation + +- Add capability to define name of forcing variables in namelist.hrldas + +- Add spinup option to namelist + - controlled by spinup_loops in namelist.hrldas + - will run kday/khour spinup_loops times before starting the simulation + +- Add capability to exclude the first output file since this file contains only initial states + - and no computed fluxes + - activated by namelist.hrldas option: SKIP_FIRST_OUTPUT = .true. + +- Added README.namelist to describe all the namelist.hrldas options + +### Driver bug fixes + +- None + + +## Noah-MP version 3.8.1 release + +### LSM capabilities/enhancements + +- None + +### LSM bug fixes + +- Change C3C4 in MPTABLE to integer + +- Set some limits on stability function for OPT_SFC = 2 + +- Change limit for minimum wood pool in dynamic vegetation + +- Fix bug in QSFC calculation + +- Prevent divide by zero when soil moisture is zero + +- Fix a few bugs in the crop code; make DVEG = 10 activate crop model + +### Driver capabilities/enhancements + +- Added configure script for generating user_build_options file + +### Driver bug fixes + +- None + + +## Noah-MP version 3.8 release + +### LSM capabilities/enhancements + +- Added 3 new dveg option for reading LAI from forcing and 1 new dveg option for reading FVEG; + + - Also added initial commit of crop model; currently runs crop everywhere + - dveg = 6 -> dynamic vegetation on (use FVEG = SHDFAC from input) + - dveg = 7 -> dynamic vegetation off (use input LAI; use FVEG = SHDFAC from input) + - dveg = 8 -> dynamic vegetation off (use input LAI; calculate FVEG) + - dveg = 9 -> dynamic vegetation off (use input LAI; use maximum vegetation fraction) + - dveg = 10 -> crop model on (use maximum vegetation fraction) + +- Added glacier options: + + - opt_gla = 1 -> original Noah-MP version + - opt_gla = 2 -> no ice phase change or sublimation (like Noah glacier) + +- Added surface resistance as an option (now four options) + + - opt_sfc = 1 -> Sakaguchi and Zeng, 2009 (has been Noah-MP default) + - opt_sfc = 2 -> Sellers (1992) + - opt_sfc = 3 -> adjusted Sellers to decrease RSURF for wet soil + - opt_sfc = 4 -> option 1 for non-snow; rsurf = rsurf_snow for snow (set as RSURF_SNOW in MPTABLE) + +- Made the specification of urban types more general + + - (LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL), + - now set in the MPTABLE dependent on classification scheme (i.e., not limited to 31,32,33); + - this is for future coupling with urban models. + +### LSM bug fixes + +- Fixed two bugs with OPT_STC=3 + +- Fixed bug in new surface resistance option causing divide by 0 + +- Write a message if incoming snow water and snow depth are inconsistent; + Reduce SWE to 2000mm if input is >2000mm, Noah-MP limits SWE internally to 2000mm + +- Recalculate ESTG in glacier code when snow is melting, will decrease sublimation, but likely increase melting + +### Driver capabilities/enhancements + +- Added instructions and scripts for extraction of single point forcing and setup files from + 2D datasets (e.g., NLDAS) + +- Structure for spatially-varying soil properties added to DRV and LSM; + Use of the 2D/3D fields in the driver and DRV commented to be consistent with WRF + +### Driver bug fixes + +- Zero forcing where not land to prevent overflow with ifort + + +## Noah-MP version 3.7.1 release + +### LSM capabilities/enhancements + +- Added depth dimension to soil parameters. + +### LSM bug fixes + +- Reorganized parameters to fix problems with OpenMP in WRF simulations. + +### Driver capabilities/enhancements + +- none + +### Driver bug fixes + +- Initialized some accumulated fields at 0 (instead of undefined). + + +## Noah-MP version 3.7 release + +### New capabilities: + +- A parallel capability has been added by Wei Yu (weiyu@ncar.edu) to support mpi only. + + - To compile with parallel version, edit the file 'user_build_options', + uncommment the compiler section with MPI (available for pgf90 and ifort compilers) + - To compile with sequential version, edit the file 'user_build_options', uncommment the compiler section without MPI + +- System setup and execution now requires only a WRF/WPS geo_em file, Dependence on the wrfinput file has been removed. + +- As part of #2, initialization no longer occurs in the first forcing file, + + - but in the file listed in the namelist as: HRLDAS_SETUP_FILE = " + - The initialization fields are: SNOW,CANWAT,TSK,TSLB,SMOIS + - This file also contains the static grid/domain information: XLAT,XLONG,TMN,HGT,SEAICE,MAPFAC_MX,MAPFAC_MY,SHDMAX,SHDMIN,XLAND,IVGTYP,ISLTYP,DZS,ZS + - This file can also contains some optional fields: LAI + - NOTE: a WRF input file can be used as a HRLDAS_SETUP_FILE + +- The timing structure has changed: + + - The initial conditions are the states at START time. + - First forcing file used is START time + FORCING_TIMESTEP + - First integration is START time + NOAH_TIMESTEP + +- First output file is now START time + OUTPUT_TIMESTEP + +- RESTART file states are consistent with OUTPUT file states with the same time stamp + +- Instructions for using GLDAS and NLDAS as forcing has been provided in addition to the NARR instructions (see /docs) + - Also, a NCL script has been included for preparing single- or multi-point forcing + +- Initial LAI (if present in the HRLDAS_SETUP_FILE) will be used to initialize the leaf and stem carbon pools + +- Removed dependence on external GRIB tables for forcing creation; now in namelist only + + + +Updated: March 10, 2023 diff --git a/src/core_atmosphere/physics/physics_noahmp/docs/NoahMP_refactored_variable_name_glossary_Feb2023.xlsx b/src/core_atmosphere/physics/physics_noahmp/docs/NoahMP_refactored_variable_name_glossary_Feb2023.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8008b630b61ea845284e9daa37ea0f2bf1fe4d94 GIT binary patch literal 374306 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

dnm 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 literal 0 HcmV?d00001 diff --git a/src/core_atmosphere/physics/physics_noahmp/docs/NoahMP_v5_technote.pdf b/src/core_atmosphere/physics/physics_noahmp/docs/NoahMP_v5_technote.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ba1095ba12f097d0be09c80a91fcb867e937919c GIT binary patch literal 1572864 zcmagF19W6fyEYu#b~+Q=wr$(CZF^#8VrP;}G_mbuV%xU=%=5hGKi{|3IqU1ay1MUO zRoAUr>%O{bH>rY%7%d|mJ3Q&m?$jJS3?mySBO8DLU~gmv&%;A6V`*n<=w#_-Y64)S zmjSSGFtKp3G0@8c{*L3I7X`4hFmf=`%K?};Sm{;%_A@cDvd~Kav;nNFOkblISatdM z;7#pJ{sIF2zW&j{!u;PlL`;qCO-vOGoot=IGz#0>xZ2t|16b)5oJ>tDja}@W0E|q0 zeDq?LHZG=4^kO!KE~fuZp_dfV<`EQOW*1^)V-gi%Wng4tVPjxt7G)A*5n>WzWaeaK zVdUcx6=i1?VHOi+6J=mw6=PxJU||ybx;Qx4SeZFE7?}8U=_Tz0nB)p=4@C zuddAqU!wB$jHP1$-uzKU@HPVA%PlN5x(0>a&aJq++raAEhbhe$ps zy+~p^zBT8a8Zr@|*pnTX8_tvO>zllf?XO<2KqyM900@CxP_83X{9yq(f`N|-y&k#n zW3=ObF*Hgz6mFjH!x!$Nzh$@MnBf@+19B(f$Y=ts=fu>3&LgY?$SP%^&4r z%+T`FK>9%*)mDW%bsw7EKwn^<6I^>~#*Z*j9?`y>?|SgsLanzB;E5Ln6VkQ<*jcq8 zu+n|LD;)D3=lqlUF!cU2Pp&1omTOFO~cRijT|< zk@oBWpFwk`x?q#`4clG2(;Y_`*%b7Z;KpXc74}N0} z4#HvVnA~8Mau^Xa94xQBJ^wr;`%Wn|;#fV?Y6HeNbuez2p8aMCmW(fkLNEAzUPr6o zkXeRpT^=iKOp1>-l0N=tUHAuUUbTcqQs zmHv`{OS!g!RM$z_-J*KV>7fm+)d^eF%he5q3`;DsK&faqRLHwHWZ-8#Q$NbbNl_V} z!O?6cQ7Iz&?8(wM#qv#u)!*fn`C?Tmu(XY_UG1y$3Su`7K{m{?Br=tpm(e zbSK1J_;NVd)irGH5pYIckD`Xv+`Xrrn;V$<{E71vha>o)1@9e|t-XXlK{ul#t~WnB zUk*~6LJD!@wG1G~c>k|dh=f1ZVYLzRs6h}qs{k%*|T>iF1o8$01D^lxivXFTnD zcu7OY8*_w-Gadn+NU4Jma8ih5L|wu{&;ZZW?Ffbq znFPq7k?-{e%=lMxbSFc>ne~#kCTWC*Xv_dmTKo)9bnHY}Ber1#L7ng-LQN-xzB6VE zj976vDx=VGsRAJAdK**wUnn41$bX|5V2GQ1v#9?4ZDt}whU#~bwRc}ES^_&x^b%mv z|FH#S)`^MHefR(grG6L&sV{*hxvzQn{iKwGuQ@=RCxfT3zmE@_rM6qeBdRY7<624nE zeH3TyMs7Z9_Pu84hS^RCQX@CLchumGi9+j-U)^1djkVcfFTXIOcT;=98jU^YO1s@$ zXzZ%Mz^a)zKaC_ST8%qW=-U(JZNxhcns;-U?FeEA1x8f!PckV`33a-QclsX)q&UJ@ z(V6~WSU?;=7%Klmsrg%A|CY-C6cIsVCwnn_C)>X@lZEBqN^59mPGM?CtEx;%FKg&z z{kIT*k%GTpzbJ^Ap^dZY7Zs2-bulzCbTI_5b8`MOP2SbT=8LH~12~x({<)!GX#OQJ zvT<#x5#Orl$YaYzC%(@BdS$g}Eh5rhlsE3QVvdb5Z`oa|d7xRm&{o5z@^C|1W(C zPWHyirY_p_Up$mv#ni)vUefj}cf$XENb1sS$QxOi8vnIP()J%9=6_)&ZU1%uUsy@o zf8GBN?3a^D_J2JDF#IR=|3=vvz|KgoVrb+{ulz4X`@2s5@4WvF*?;o>KQK-)ODAU+ z05i)M8UB|Ovaqsoe$ij%FWA47@5@+a7u)}f+-Td{;|(QzP~XlB=G4D`fM9`8%tVEX zG|^Bg8U+z9>}Zk2eFJyOssDJNzg2lWJ3C8UGY-iPgbgv8dbpEz?NGlTF2U(FfS|U; ztAh8D3cgQ}*ZeT!OX*4NE#=}+zDAqa3OY=}*V$P+f>1~O@wQdDtBfTy-Rw9#ctZ(4 zfd!RGkE9~OoL#3_wx=c=hC2h{?o%)KBgE4V`k9!oUOA8@PpBSk@2CBFZPKArgK?Rf?f$NK z$m{v-)ZgE^vlaQo?|R3_wXsvf|HbLr>;7ZM&G+^=y72b&hnhZ}oZtJ?wbQ+z9%7ht zoZaSjIO{TPZU+aSX0@lnPP<3b+tc~U&O7}nQCmBQ-tkgR`*rkT+Sp^WFyJwlujAwV zu96~ruu`yy(Yc4Y)3@`@!SVSxy6dOiWSaUIedFbhlc=p@9B%$)+kW``j(m;2-|GYY z=M2Q>;oRw%b0?4HX4S%_-?57D;%Zn1V>IUJ{{BE)VdZ05We<(qLM5U!H(KZ%*Z{4M^%4A(mR;Hn6P8%3DN&}tz615zU%N|>BY zm}Utml+s8dI%Z_UTHB;^Kxescl-VW~-L_9SRq`7I57c+DRe4y60#C_t4Vo3Q3{(-T zt8ClS#Bp@6E1TGK)piNeQ?Nh<@VS$4Kv?=ESY>8idcabPhHD=stEW>yHeTsPX)kod z9|AyP&=wjOHFwPK3842?gOQhao!dRR@D0TF>hiz{7}66AdCpPRUs14BPA@c*v|c^! zRA|5HjH3%kg&5FdIz<^JC3|%HMcuUOf;aw&QF80GVJgjHW9PoFR6`{UL`0 z;C!<_3Z_wB*yeRsYYM>c09Sw_pLRSwJIUMQm!U*iLRWPl;!0MGK;A=*0_+Gc?-P9+ zs3NRFMK!3Fct1dtlz34uSV;>{7WDF}+^If1R1}!gw7e=8S9f254;5MFy4SJA0gOWBp4~R_FT?4Yp!#+4K)_rSTC~a$#%ka(AuG;c2Z}5RCMm-}*;O2QG&njv07D^^o%xD%axRk6w&+@c1NLjU27+GOfbg7O<7IU> z4>ToSRyj1`ljV##!Iqy?OWy=Yy-1jUOdViHkDKY$_^d`cYptF#zR;$h-Fds@uX-%)0L;Qg zU}@p(VUFIiTT@#5t!LVD1PE%vAKL4e~NYmI-nRs@U~S}c4^p4&yaGM1-aX!(5eJmi%^1RbFc_#z78ToU z1v1Ar@B#_EQU*XO1MzdYd<>=Pe*c7$5g@N=FyK#W{$qiAPvanp;B=18ui5q_(uoNs zUjURH?`v$yqu8os7nEv}^61$gd~L$bEY(k0G&4bJVn9bl2R{@Cxes<*_8uiJ_G7v^ zm4HE=L!cdQoGRnqKqU1jSp}+fR0X6z@>_El-0Y_IMWAmaz0m@JOz+OpfdMjbLFlIZ z#CE}cek~MMd@_#W2XMCy2Jqlp4$=)B#pLEI0aCw!k6ZwBw%MZufa!*ZBn|2;e;7JS z>xqV^d#p+^61bTOd8#(9>O;c8s2JT3O#;Zt!T~e`ltlP<{HQ&$-Zrl^oDV$)6%lR} z4jOStO(t3|sjL2W{|i@p7@5f4%PlQUiaMhOx4z;a%heg{?zBAOc?`ksc{NuL3WnKm$o%d-#5L9* zY%~_=*w#>2L4B7(?``b06Vi#472u$5)SnFCp;T{^nM zdFYjwS_TA_Ri8fjJS&#@Yy1TYxnB7^TvOnPl*!@eLeHE2KJV{8kLyMm1rY!c#bD#okvLcCbaesd^$q!GV|p6;Quj(7qrB zb|Nes0YW%$k5!~GBL`Gy1Bm|wf@2`;pG?QZYIzqBw+$nckp~I>knrgg1#KeSdC^zlvlMs z1wKZictWrN*&t#qC_%x;?L8U8dLXFT1Q0isH@b!bRTqCq!mHh>JW&DeTmi=L$tU5I zARwNLa>cJ=QsM@>7_$|_w@7f`-$V>`!kIC5D9dwW@hrp(WllymPAGm8()F=dvwKGE^F@#VDn|6t{BquCrN%3yARxPKsN%%52T~yZ+ zrkQmAT+#IvDoLsS(wH%h8nw{7ya=F?%{YW+`F%s-BekSCWD18DwgS>|u6@0_YW*MlAm@C*c@2IuA-Z=@c18hqX1(Z0eevQ2Y^GLF8`WLgV ztbVCXeTDTvKvU{_(DV@~^G$tB5Ix@u^Y0K0lAt%B-wlBTzG9by6phr$1GYbv`zByY z1kZWmU`CJ(40BVik`L4N;`~LuF7{LU< z|2WHiPE5r)`1yE+#6t&#>8QBr7%_p>)AWc8nst*~6ldu{cvah$eFs))<-Hb6VZ8YO z+LTdM!v(EK@U<@rXcw5Ljv5X?*_2hu33rY_jNz#tD30f#{%Tw)s z)pG~FnxpccahB;xn`n6e(s@+d+&d$_a#!M#+3r4Z?$J!hOKuH>ocv?y4HfX93_vVl zSZ}`O&jX5fLH14&Bljy#xO-!bZ7*%#qUk)LmA1Qmaup`pWd4S*<|jBQyc%wu1dHsF5@dtLZHlr+Y;rLzJZx%dmf(qqTk6Np^AgYr>I9J%DObu2PYR!Gj_qEju zKDp<3`wZ(p4$A!H75$;Ry30&naAd2rFsm!SObQk8rwm`dnTe3qnQ0MB8UL8o7 ze7h9_oWufPL8~8P0eG8x#cC7`9odE&wsA5im7T#KM6@W+j&D}Fvv3@k+x$m?b*!iA z(8-)nio;B(2C==zB^Kh}rOc|6HQsYF@lNm~35N_~1G0w2N;6pl)Ux(CJDa*QMIrn& z_bg72KL^4v^D#SZ9wpbyTsyzr@OvqXaFG z`9AhlcKJKggM27Lg@7VIZHIU9`UZepD?;^8g$wwhfmlw3_Acyq3%dhv@ZK;5gns(l z4s>0zp&XwN%+Ji94?Mj-4@{iDEYpu=8R}c|TUvfjjj;_5{LVk0sHtSn8Ll4mckKMw zR~vil+U5UTbVrOD_*`5K*E<$pt@KoubHR$?$F;C@Kxc4@i8@u*3C9UC^uKXSo zs27QvlUM@V! z)sX>g&uaDvo{WsE?Yp_=xf)z?CdkfL{qXB@A^dI4`E_p2#&W7D)?QM1*Lv>H(}C|G zCL#B(ZmE@|_Tb~ufsrStPjh=q%g1FTxLNaqo#uAZe0a3^qWX@go%&%o*6v#XW0UJD zmOQ&(k>KP5BLueo{5xHqmfz>l=TPuvz*Pz*J%9&TUl~BPr*YTl={qUR5I5xtT9$a_ zuWcG?mw7dQQ<6zNX)H?A{K+{Zf_^DXFm&(v&RG~VvzYpE?8!S}zoRL}V;WD{`JSPF zNi3ZFXi@h$`CJ>y-Mje>AS%&~?wxhRG|od;4K^!_J>?{NsUF z-2zHP3Z;H1F4&f`ogBQJP9n#uvTfQb_hC<>$I_uyWGkjy`vGAWh5ChQp>coHT>hrs z(PR)ap@MBe-CEn$z40l72tm>{34dX)HsyPazLP!_cK z@u0$n#Xo;E!xd&-G9E05hGcPH;_R`@zQsgsi9+km?N*jVJo+n`-9qH;#d&wn^M3aY z?vZw8s2&^*;D&R!M6eV+st_8YPu1HxX}1~k?;c+mufEf8$8H-n)m2ln^ri!$fbn3J zAz^UFt5jsBU6Ni@$SosX%CR}Fm%KZf@^gF z?f#&5A|QtAt}O1^mcCCL)A7ulW4%@*e1EY&&k2qEx%XYooy)Jzz*UmcwE05l2Qy;> z_E>SXwKdgoxi(+i`hIy^mt|c-YXb8+MR^CDyf`W0h>ea2xrgz3BI%cV= z-{m+iq(HHDs4^uJ#Lbb*cM8CSPo_JQ9j4$dhDF~256l$!s>Gzkx&1_i6WAtbT&Ao*df(u?Z1BrCyFiJ`V4(?*wPQ842RjK@S4cT8hH*%?UIzBN8rXPVjzBlMEG$& z*jp7Eg&7A564*#C*24->sw1o__%lZMYQ5i`w@!*-y$FaN5qdFG!Ps=liYBg1N)=BS zC`p!WWUUsP*Zjr;PtKF*>gU<$Yi;R?9iImMp>cwel?1Ru9embfGWx_|oGD3a%s9=h z+;GcfXUX@YXQM%OcR3zwv4vw*0k+CxvBn#hdgzTYhP%CRvv-ri{w#5!gi;$RKCD1% z;a+*bgTVOYZuEdLqsaG`uzGK0-SKIKq!esswf|Bk+5?M z8$`qjB~D89BWXP`Sx^y0;X3hbh)50y@Nifh3X76tCDJ!w*_c_6l4K3hVNI4g%$;oP zA!Is(cPzQXo8r*~R3@TpkXcTmfe4(&ZCPs6rM>lT;29-5n?#+8$L3`FZ|OKz-p`PQ z=Yn2v@rWYokw^4)shk?oai0kU1rfq_9*r>)5tz7jo-cDw#lXuiwO-6IJckL<&VESd zU3BC!pSZtWr^7>dcri*w@Ge$0#_Dc;G-p4N`$I%(LTdGQ8eOjY1`;n^fQcRI%j45N z#VJ5iw`fqteLm0)fPVe~{QO@^+uzfp|7U4qV*fu2TV}V1Kji1;rTLw||7RZ%BmxjH z1W?!+l1OXc@dlMa4j64|I+m>CP|0e z&BlnkigJaqjafd;$_Pt&&TfPXXoXoKM*jGlLH7+UQ>Pa zqwoE@aWl};9hcrYAy;N29+$5aumGwb)VYM&W>4Fzx)M->22kGRCGHQLjBJCALGv_V zhsQVs#IyH3{cAj+9I3s_uA-eGM!%!T< z`BdG)1fl|Xg9&)=8NWq?aDgVig*^SCGT_s`U+6^(X)|MhNC5U>&7h%JZI>;ROjRMh*Gx{CC^NfLx(zKO zD;LCxychazSAcBGbRa@6XzGbTkq5Fl_A)TGTdw+cyHJvcA!)Iqw(Y>Bz>o(WF68%P zBX3b5rcX_OEy)Z%}q*Z*;82H`!*Lf`^%nnVF4`l{N08g=S3# z5$+rxFQjQ-zwai$r)Rq(xEFFv;eI>3S9iN-C|v=H@q7>FUOW$?2TZ(!OIkQnZJNpm zxA9Ejch$r1~U15t>+SOe-bDMgZF&Yni}JA#HvH zNU3r^dH_Ymi{K&nV-{{WIk7m6Kwt7GI-LQiSR#`a0zWEtq7W-wEuw8)xmBZROUo-hNzh^DTN zsBKf|q=Cgu$f!6Gk-QTjWwk^sH*49~wzL@g1S1cbOYX;U+nxyhI-y7N?QpzXj7-Cj z0dDhlQdVhb%f(!=QA24hm(3sD??8tr89oi|9K-t|Q#6ZDYd1J01%n6CqlG5|vfY?v z_9^xctn>E4ZF{RStEUgWjL&*=-7kd>TDiLR8w&cJf8w1Bn-=Pa(ZNZiNZT|_oW{ku zTUf$5YKRW^3+{`80BjgVp((|TB5Iy|1IB@d96Om%1dLJ%5`1>-Vzo%c)x8%c?_P>J z;CR^x;S+-&Q+Loz1$eh+TphXXd$Df!E}I`0rrUyP^@o!Rcb=WI%7^!pLrs@UOvg7K zRyLE2L%CgNm1_vnli8g!4Zf$(yB~c=m_KE#K5^l%2g~r;AXlPkOAZFZ%vgm5GGvtT zYHAReaYTiAZ5kH5E89yS@LppzNgcOiPW|2@q?9j#uoZ&(BIBr_i&DHu=_RGusNE%7 zQ+5-P_Z#*ilzuK%oT-~7hoCr1U<&Ss%Gt0>Bcq8*SQIFyrV?coNeI#n15}(@;**#W zGYAWJQ7gg3s1Z{T)uTBNI?z19OO&R`q;d!L`{Ko^d}TT62Mfm>E>>1l^HDF*=z94y zgzosc!lf2I0$Hz^76M>jPa!h;F+6kq$~CoUtJPj2(^*Qc>fuEy8v-GOQBVG^sFthh)P$uVjZNSvrE3LoiW{wMC=HQ@YjM=rhGMP8}YH zf?MIoeU`FKks^pZih9l{|IE>CyQKNJ>%mapBox~HDYCU?PHUQK zZ)~v#^UHnLb@rx)Q}13-kj@B}W`S6NQ^PMM(+XLAMCxhl<;QI73SnN4-7OImFGvjl zq63JKTtPVI79f)d;GPH%hwhZ27SDiX3bORtf=U2Gj|90fzER@gn;A`{jV9G{xq}N; zYP3;4t`Owo($*mFv5%+|UXb`hj5(YWc)jt>3$B9}=RugSr}QHfNNMl0FL>j|;BVNa zr=Algt;XRB)6bp(* zhLg}p4t{9;sh)ww8351_qUhTi z71A9pdW0GaEOXRMrjcOK4@X=N)L~qd@q6P#-RXb2G&J))=9rfn!X^vQ#$@~W9cMGR zm~?Lprf}k{N<(H^EjZF*pE@?T9fwLvBbq;U+w1!_l+!&_ca9_C9<{QQ`QJ33*2MbK zOAYzOFEl<{X|UNu+cr?yyeLeqT&J2;uk>+{XNs9eHHN_(ndABT;GTXUl!4vn@y}qD zm(?$-l2U7(SF3i&)R0w6r`=^fiXe*ATSR$@@pfEjs1!C<=`(qx!ZnBnh584wS>lU| znj%y^{-#$?6-OPzhXpkdMQeyVl+PriWSjV;;(Zgv9LNK<&JXn~eNsJ)t&vT+vXxs2-n! zEV51?s*msWVi^mjRzV}Dey_8FS>-ge!Q~C9*4%Ut^>|pK@1!j?vG7@|dtN82YyQS_ z!TV^sYt22$T^F0=vOUN_vIi`ARXtW1SV9?+3}%IbMUoFY5IBRLZjE|+ELD@rO80`) z>ay9fB^w}+Wi%wNKj1?`wHCnWNI%Sm&X^C9WFo36f*$!zaF_WN^7<9G*C9 zF-%mh+G3cY07%#XgTJ^EPrPV0NUNVCDq5%kRUGlOJQ|a}MEv>Nn-5!60|l5U_q!jA z{@EfFb(7nD$;YhqfF$-u3L{%s@Phcx-kn=w&I_b_2xcBkjBqM}N>Ig&SG}RC8l>jw zvRIRcQB%6Fxqw?6m7dsu7vnLVUu8NPrnD$A6MUS+vV0pA9zr=w+@N(7HOg#D=*xr( zI#w48&~IGW+p(kWs&rE;e3h`aedtYUlM8SAfooSpSD!nt6G;@#*Lv1-Tkh8|c`eQ2 ze9!B^#6kFx+0f2d*MzNj0$uH=7g+dM!MC9g_EX~f9TU42Mzr(KW1kiaw9j&vV(HQa z?(vMd?3ddpjOHATO=3?^+jfWt5XfAhX60A}S%C3DH+}w#_aL+R;nVo#xZ8jlrWQ!B zPO>&yo~cj^o|2GgpaA(X+Cq6wXng8fi8s3VFuvQR1NmCeY7V~%s!z|Tfja{RT2Rj~ zqCGdrA!`L$Ygu*p`+?;pA&sIkzj`WKsF^z;STG}dtZ&0_Rn^(^*LdWM;h(19SEVZ> zDM>Rw*{kH6?bffK7G#%R4+aYlKv&18VOFhA6DKOe(^y!V+1T(c^*+vaz^!3B6*rYP zvuRe^Em3p5w^<(U{pvS&UBZ7=6}BM%s3~YQoOu?e&#tM4ouH&&B>6-C+-Axz?`!;oF?D;YH_+-~h6N<|q4PVW0o02bO_R9{#Skf)32QpeXq(WHZ zU}tNZ*Yy{G*u-24vCq`Zt-eD zjgSer=s1mISz>xomVyuo4~cT5Qok`5IyZ+gZBe6DNJK3cRs3k^pE3mCIeW+fcOgC5 z#suH;;DtN`sM6}G>alWAq|n_5`yKRdTWBt(Ks@Yrt6k=_36uaU0TvQsa)s%Hj;31i zH8S`JN6Q-Pylysk4zwj?05D&MsKFd4aA??>;VXi7FWu6)W?z&7i_m($0ChW>z_{Hb zf2=}=X4viSx7%7Jv1N^NKV~o5bL$FWIlkQn6OfSS*o2GkK*PngBYb;*kT(x&h_G_! z7q0L6skN(SerP~eu|C1^F$B${iW&OP@2D@{wn$u_x0w$J?yDeFQ)EoX zbV$_;RY-;3^UF;~R>0Z~Pf@0P{h(2OMb@EJ$Sc+(D>bu1%3Ywm!llfL{L!l$#LM($ z=?~g@R%S1gFYeevS7{%f{;k>1S$85ix(X&(Zs>=YJq4sK!-L5YMczmfdyQMvW_)t{ zUqaa6oo=N!8-*RLJd7_FH>MMWc&GSZdt%GYUaJCj2=#J_@z*UA0nw%(t5pdwvqYg~olLtFE8JU|HV8qL6IBb^ zPHUx@xz@M|c*=Qea#nO!n9f(^SOt-Y2=4pu=I&OYCb3xRLTAo5`{=*kvXLf@;Eg@+y?_Fck)~&5thH6%`sZJcG6^n1C@iN+QtiA=wm?A zdG@>w^t{*#Sthlfekr{t#S^~*UyC9f#5~$m_8#6o1`$XI_u*?Jb87W^GXs(AHk!By zn!mbM+^N#5etP01)Q+S~xJ)Vnv*XD^>UTLXrgmWVmNJR}V@x%X0UM=&ua&adVOxte ze&P-Qk|9A=N=UR&3D$CSL{r1GOdl_iNCcsm_+9{P!T=btAd?nA@`zTRRJG=kk?jqE zW1@r&IlS`Ob$CO}*%DT8F(^%#??S?#YN(72j$4J!mB&VPD5@$S$Lqmlaagc}PN= z4Sj8NyNU{~2B&?Zn~eKR^a1iK43FdA^C>s9IT3_hUBBzx42|EpgCYIbrxm)OOz#wZ zzJ6(m>rLmjvvmyBY3F(NB^K==fF5OE4_J_54mH3n2|&E*bsdv?DhY8O&Xt;(2ArB` zL0lBrw!)6P1n4u1PtkXE-PVwQn39et(|`EQztCAP&Km4a{v1ZlLKQ3jv9WTq`pUha z4O9;fi!=BG*4|-1N{ytsf02{hcp*W}g?`2OXWj9$SLjAj^HKcqxo7;|<0%ueV=FHLygr+!lWgJf2y z875mCRH`CF^mD?w5HavV;W7rY)?|K*J~j0G^8Q8cA2~5inKasyjZT-Go6k9$ePLNU zuD)ItR%)vNLa)-ofa30|Zb2t0k%1*uwD*Mf;116XI=2XxO#PjcGQL{xb==#vmOUI% zH8y<(h>`8>cpSB^moa253QbECPSdtYv)FO8goh>H1GA=0f3M4B-1%Bf?OlDQ^YO*4 zOFLPl2M>P@(7eOf?cfm%mVt$_Yx-VYJU{=Eb;Y7U7?VKU~5M767&E#mbSxQDx~98tSUf>O3l_F;dl z$0XqN0w9q^kY2mOJywc2@IAZCK}eU_&Ti%`HR-zm;QRYZjcYWlqd7`hZ>gF(WJ0yY?L%ll@a}U|pl)p*!wxEcY$AOhwRfHFmvDDS* zbCDz@CS%A6`w;fv@5%K+wM!O)Xro8Tg@ZVJlCX9Y-=%{KfMu+XUZy~M=n4b}izB?F z!6#yDolGebNEOmeRPl4V?dhKAdT_}Fv+(4QijhGAx zH1`{_@wT61Aq^K(b*HM922DwE9i%Cy#)z0l)`{z9?&&t5-ie1U%osB7CsV`sxI8T{ z+I2zqe0&!9;NfYK;0(=bCDcZ^2KxajPtFg3O%Q!QSAS2#B60(3XwfkmQF4%(Ij=62 z9H|@_^&uWINh?tv>$H3bE0}x#TJ$>j?!CGTvTA|Rbo_Z;<(|(8oKKje`oy%Vrx0u5 z_AemxEvw;yKSpu+9Jz!5N?u7Ntyw8ANnDnG#Q?#?Jw#$HB#O*Z2@QoeVo5R@R5a8p zuR8KRiGI&BTC#k5ip=R-5m}k%dYT)cW*3v^lb2Kqh4xiy%SSMkjRSOPyV*1qQ`oV5)Hm?n{CD2(5~oeAlFeDTazALm z7{MAyv#SWlpe}?{5Bf=lKLmhe&#K7b=zw+{FhHFR3LGSmxNRGN+YNmuJmnS3M{Qu# z(QSXE-7D$Uww)}xH#ORdT+A7FS+pLEP>NarfqyT`7HNss2o}>qbMd%)VVRnWLFcMJ zmM7QyR23A=?G{T5BPp6c_`KGN3A>mYB4k9bB4}WOWn0#at*BqHSZ(x`(dVk<|A`FV z%Or;FX&Ld`$W*qx?@h$5fc#og2wyl~Ghrw!wJ(^G3g*d`VmToBD6U-LV#C*yq)K%% zKQ3(Z;%QZQ|L|NmkT&!uX(;3-8D=2iYcO|B$ovprO_loJe=ia?n+<#vNO~eVG-8z0 z2NRI!^ncX$iHC;#x)YL4uPCv8*2-t=7)7aT(%`PPUt;lOV@P=!yI$q+v%KQN-U^D) zO_diZu)tA`BqDbriy_l-;i?ydE|lO9HUE+1>HZ53-9? zON#_1=gc&iCG^ImD-6%Q?%i0+A^yk&Pe?IflkjuA&nmTl2=K=3Y2rG;d8p#`0Odi& z2jVoOt9!7Ce^>OZh{@q_eEb*{kxK)fM$YCp$dYk7hE=`5|RQOS+aT#Fp^{A@1 zvju<2nuR5bpVU5=Io{?M<5livgbz5ED;w9*jhGtz0JeOiv?aP8B;#>n4uiZU9w`f> zU96y<}3(ifS$Lvc~oOe=n>aDu#a4(zn=L z!&g9^tkk3f*UHPoz^c5Ub}%;!mxZ4w&b^>t%}%Yub6j0W8-byUyzY&3s_6QmStD^J zlxzno=jGaUec}A2dE+4G4d1_cYWkrvC`VOF9`0Zn zA?xuA0wfBCHq`GZQ}Kw(qF-jnlWUUcS}*gWUy~B-U~T}r0o1yg`~1-@s`VPlZ)PK& zpWEa|V({GRwJrC~g8Uo8uTV<2%)RSoGoeGTkdiOHZEO7QS3fCG?h{*br-`(MmQU5@cSBR+2tJb)38>&@SpNlDInir9Vlb^3xh@5_1` z`x$!Q@`-;+L>hiqQ2LpmDj>h8Ncl_YW9?9N4usPn0EYsxFOSCg1&ZQDGEiAXFHAkQ8vHzBEx>Y&vs99F18+-F%RyF%wtJieChwbtUhJa=3$} zXIIKhIE2W*!irZ(6R9%6-(r3$vH!*-ojuCfmPHGh-0vb&vLjnGViDDZdmgAO=Dx+i zPoOAl?prcM!9{*}ybU1H+kvkX&V?RJVGK~e$&Gn-Kgc8BxV?S@b~ zSTTR7=M5JeO>P_tNq)YlPF-jkb@B$zI)dbokTz)i86<{gg5+33wB zKs-{SiqnJQf#EgAYRz{F35oqgi*#!)>_|jvExF4gfV<0aawIYuBUPWNQQx0x{W#Y2E6`x;Ogwv- zL<}_#f`6(Y6^1I|dSDa%ps9Ql$}f*l0lg|L@SvCQR69Ec*_=}g4C+73JOR&AT~&@o zH@_GN3`mNUbXOSCh2MAPg*ZaOD^hdo{9WZxzEf7gL`_}3wvFOsmk;`Y{z_`hH zTL~__V4Xhd10vWskr~$+;yA(jNS4csP)_9X=DDmQY0E3mXyl7%Z|40xOmaL2Dq7`I z%3Hyv>&=zF6-Bu9Edg?Hw^QX47y(HZZ({;P+^SAQyLrusbX$5lI#~@vul;cGDtJ;q*`C3rawO(R){&Qu!|qr`w+z zL_;X_cdCt~eA7`#G#mal$_1-6nTVWWRyxgR2G_m7QJroo>w3`vH0;DfGXKf+*x^^~ zDX$=hG3-Ms9}%Be4H3u``j{!$QzO=8XyzxWFRj#4C;975mY|Ug(~U+c&8}a*YF%@u zlU!W0B4H1^A=OcR+4fzUbE7#>1fNX6Q%SHuB1ZUPlt7i_QVoXA0-lSNp4E%sXxeip zuo{!V+Ews+&SckB4KO3Y4dn%z2@xgJZ6rEICmDW{=%cx0uKPh&T4!!^deyh-HmApnR*lvX!(uXf~JUXtM27!1Gmw=?Yk!pro1cuqaE(1cu z-$0E7g-e8RAXjdpkor&6fuEa>yB z)$0Z7v8d;7c2H!p2&5`sfmVc9BwZ;D?fwpoL=Hq3NSg!)oed;)znkQ?DaRW)#IE?* zN{x|@K?d@~bL2c7G(UvclG^wDB6#iag$jTt`1VC9=+Hdk_(Z89ZhPT!nDiy{LS&@? zo1p%e1|8bmD_Q&?F$9>?S+}SPxlYI01_4?i+=otNBn9*0ua2c1B@SnxrZc3;III=k z9FI@*w+`edz7$K4~; zK#~U1KhQ|L37v8S_T8zhfdpmi_lCSu9gy|bfl?|EX;c=6mL;SQj0w)By;v*Id-DTw z3QqRU9PeJ=BEC@TA5z3%f=6Q$*-Mo-Bt57>OAVFL&U1;LxV^}wit%LB<;bh0qKhd5 zVI53EHPteJU{kBYAfV~3Lg}MDU*h3@@O+Rl@{n~~Z*Sz6(z{6HEh(fvD@qAz119-E zx%-9WFoOF@i+WST8$@G_tUOG~>g*$w6k z++q7qkOIAehir6)DD476P0%lg4o1&KT|&)X{zQAt#euBT_Cgg&v5&%Mnq(l+1nb1u z67Nb-U3iY5ECwq{!yQIIrL~J}JC|G$iJUYlf?p{EXMV+eS0~tCbRVAeBaS-@IH3rD zggf;~zPX?X$Y@U~osBgCmsN>4?Q`cv$Jv`i__9L>#nnx(MkipFR-5F}wA)mv!HDU2 z%D*5Z$!-ve+OA29%I&OHsU%U+;9fV!OX&jx&URn%P(s@sjt1U01_1N#d9JtouiHmw zuj%AK>9>$t&Jac?u0Z)G+T(;{em7 zdMR~%PsyuC<#f3eKQ@t10BMt#WvM6P^{)IU>b*5`>$Au0^?_S!PYdNzTI}n}pmkwp z$x0){YRNK`bfgHQn<$|P=M(9fXceZ97_KlylnUl@;R*AY93u!;z=(F3?O1awVU@u=xecK10`>4O#dyM>XSk0M-(!-DQuN=;?qhG4M7U(44N0C!gJd!T z6mnv_0`WRr155?VeV!sS0cwg+tJ2WpA$k>Qj3k!gK+tF0f3B)t{dAi-W}sjCC>z1V zqqujxoiK#L*=QqN{+oBKAPxIF;*{uS*xsRb;R((!VgCSlDoz-F{$Zv+U~5Lf>(aE? zL=f-sYGn4wI*SdtZxhH>%H3sjL43`MH01UV+%75W6L`&Fb3xtH=$$A_mlq=?v18HwEy@kj%=!lq<3qqjEKsAqSr;z#8e5Ia~KL5$A#xk_)cR zA4Wdo0iG0|mqf1kmf4Ua=XvK!9|}H#c)_9_1+!noem@E;b(Spb*qHf+5*UZrR8F|_ z`!ITA+d*7)C?*kXdJ)dfD({Iwf+iM_3wz5H2aM^zV7-WIPIAOHpOeTl4g8Nq9SqAT z+b?2AN4gwq{?6YcmjpUJ7SGk$7c}!z=+hbWb$Z2qL-LrKbUOcZmlpnVNBc_QO!yj;7TL|7i7`DmK6OYjMSrUa(V|2SurCP?_AQ z1&vg^AI4wMNO8j`(FsBO0aVEDsE~uv?i{70jTo!zP09!;)IYd4vplI{gEbOZi^{I* z&FNeZ{<)#S4?|C(eZqF1ZnRZ<^MIE+iL1J zA22Ga)Z>g1Plb0}{H=4?4HqeLfm^?`i7%deoEpQXwOzT#(FL&cgn?>@k*hWpQUz2E1tm1?1g3y*v?Py^XNw9G&W%?l3)imV-T0A!o>^ z>9E?Pbw*Y-@;>6KXqd2VD|!(cm)oR< z8~tT^|5<)8IdOtjpiM>y{+-Rg+WE8GVdkh;$#MQSLh(IK1k@VJB<;wroS`gfL|4_o z#Y?xwe>Dn`DI(+pJ4&kGNuR0>%>F|gW*@zFR9nF%%q47oIW}7Vt!K^$7$Qs^Idq}K z6b#IA-UY1KG5cqob%+_%Rd;-U@k*cbNZc_V|Y zkSBbKM_?)tv?!t?rbmspLidlEC3EVvTP{KP=`I_Yz@e+hO}0ir2Z~FswNnXy;O<5> ze^BiL=lL(zBgeTRB6+M+jFxWRVTiUi9*QkR!h1W}EBk zn6y*Y@3`RA`U~~#9<{^UR^5?jJbGR;p{U`{u4zB1u`Qz%Cn(xl@%MSLs_L!IYS~Sj zE}FnJ%tYIrtvQ;)CdIyZ+K{j$JD+0@gkhS(kTf~ifKYGv*Opa)W;aas7vSIUkL87{ z6VN+B8ZzXIC9)*4@Mw)M!RRZpvKYu(XRy^M_Z#1@(6-VK%=m*p4CDH$XjdKH*h)v? z>;`nXtfQMsWOxr2bbn&76Yi1z0`e`a+he_zTSKN_T}~;RMPn zln;h9v&8s4X-52+nmA$obqMNg#WM64>NQ1hm;T|t_Mo82q4zZL+zGE>1kaf|xk6iz@x6X#rame>%^j-Qbl^@FOxuPaDm?wV6_=U+0 z91)yBZS{3&9%!e=aL~SBSl&zL*S(dzg&s^gd;crglni|(k=^34XFgWKbaude3++KR zZM`z#92lm020R=|xfP)377{v|z}XItjfQwl%bxxynxv>66eQ%1+I_-Uu$F(*5hG5% zSby=kK*)mm))Qxheh$cM#;b@gvh_-vWRIfb zuVLx3f$+cDt27uc--eF)*w@aF(J?EJlbaeQjpS}!8Gh;bs`~1#CT8OM?`0kxoqG!7 znSZ^ZF=FM^61SsBZVXU2{z~!syUtKQF>=HIkTV_{s;K{vzY;a2avd5L*Bd~)28{yM z-JS#)wB4G6_hXL*s7IV^B8uP6fL6nyiX)QbjQYLm_mbU9e1=TW_7k_Gjy}n>fj3n9 zEq9Hc-3#|r4?b>Yz`6l&@#nFouh&8{%N|EXnq%$ZPZ&ldIw&R1J8A75+9FezFT764OYTo#8=vx`T zKv-AMZrF1^4a41<0I#l_cMQjsq;|X}ZcnnUroHRs2syc~T4y8nFOHzUXgl4GOOE7- z`4)S4GY@F4RsezDlxBLe*MrwHrls%9`4+DmZyrtasm&MdInhsy0A&1_0k7+Yx#5A^^Dke<&OTOdYxaI0 zd+1+xk0qBu0_;`4jrrbL`sp=u-X6`j*UubGPkG1c*UlAJq5#^YcCU=p*Gb^O!HPn=lCv*z*A5+Ov*Sh%8<92(Kfq%TCv(|v0D z%M#Tq2U79sgX{chZPex~><8wje+gL`GJOkg9XOAkLCZ02i9Q!!Qy}n&cS#Yz=Q(Zd zQdkv`2UvSU*3Z<4rU4mTvpO%m{j}+g?OJxfkXfmU-16T>7PeNuGT?ObkfOL- zBi;Q5=mxG7Ml62}={<5+XY3a^Ns)D6<+BrAcR_F)lR097cr5eP`-Wgvb@p?lziHTRkz3;0Ex7-2g4nrOMHe*;{U^XkMm6` zdg;_ruUxZSpiJVE_}wygjg-%CTkq0WG3#3azrNB+nUvtl%TAT*>RHY00D6PDbK%|< zFMwJC;5XRhB+{Ku9O)N|pS_TWLzrLEAIj#4d6td+K<68}-8JUZ!I*gl=N?rMi#Kb9 zK2aKP^*`$(ES`#4@E<>5ezm@F2U>(L=_5OTZQxEQtXUQ2XV=4TDn-byy1ZG$BALmy3aS^jR3>0~WtE#}PV-k#kQ!qy zW^9W8C(=sJgNi+BbeQNn@^O;MzdB&o?}*ECYq>H?LPGDdKA`YLYIVeK({>Ysl=J=* zWzG3L5a47(_7CnH?SyN8cwekCVCT`!Fm6&oAiWwH>v}uF=`!mS`qnAZ4_?`t5rx|o-r0w%;U_MUS}p$7?esP{f1!C zdRI7@7Q3S4tM2sT^hM;Y_IXpnS8HyT2G57q&igKY`bqMwu;%Q}+b!wr6zBCG=U1_M zq=p?~)Oa1TFClVki#hVzfDQfrr>}p?pLA~x?(W3t_uXK=wbuEjsYC^aBY@+Dz;ceEaNMXD1|pKk z*We)hUbHaE$n+1(FDL8gPs>J@+0*=!>J+qN66b{NG5Q0FcRb&W+Mxcif<(|(7R^Ly z?;XEB1mY4wXBxurtQ+~ZP+f&JPDKmhlg||BnhK4c{CiMor8Sy-+QjENRjf@(@k?ql zvbUHKxJ7qn7IHSqm}Ek>#VEEvzndEgkW{Bq&KD2`-d-P z!u|RkH!pTg8EKB~Ju;jdSy!zaR|vZIV<H+Eg`RWN16uk+jQd51oCxB8wz^qzo&8?{Nt|Ll#0g#7*g2YciHV4nYP z(31Zz9Ds%Of4Uj}mxB`eKL@4b+i$=xD3TEnJwFuq|6%(71>^j`yC*rh*#AHGBr7{7 z3)lZ#&rQSL4s9GeKVj#2clYMHj+?RlK;UJLBeO+&>x}oTainet=@ZXRsu3L0R&>xe zQ%Uba1-BL_O+{oyL?9H5thlODrAknQ4ENB#tWsUAie6BPWSN7gOx;EW8gjWf)M&5k zww4>x-_4!#bLNJZm3N+Ro;QR^WFjt}B-)0jfb$Z;fe%l}Y95Mjr~PQb$jVi*0r7$p znZ)r5XT5JgP2dS#$pWkoGbN8p+8>T2I?vAbrlAto+ zZtydRP`J--{%5G@%@g1t`i&nNE#PxM7=QgXy!!ed{2A*aU}wP3YS3Md2;!Bpsi z1Hu?-St!!q_^b)Qz+7$J5XV>&I9Xbb@3Z~Yynjlrg)Rbqj zLOPid;Q%c*_lQ=APaFL;1I!HC07 zfa3*)RE*8B2$^OyO02ivL|R;&j1CP-BuUY*^0KKL%+rVGmB{mVI$}NSgwfSdTt;S! zWTcN@a%z~|CyTka#WM7Z*OSN-C1IcNkno7KYcXpYS3n@(B_-Y+A3yJWUa{|f=n;S3 z9cWf70^R=5kqG_UTy9eFPYPu8S{5oF@Io!uw$orr@F~-*DQ(ih8ceVpe=B-SHO4ZO zVla({`o>Y?fwGzQzlTt%Xo5n}RF#cOa(y?G7u4xltYRM1NS5U9SaKYry2?T-B_DM0 zz~pD4*?%R|@xYFgJbyV%Ib_T)RhUzvtZ&MIvzKDM^oxm;tRk%;*4Q3Bb0@y3pIzP` zxL$ecxn(I0X&%yQZT;T>O52J-VVZ9Ms!(y;k&pd$qJyf!^HwR^zc}v|shyN3ir~pZ z9{uXtN9RwT5Szh$%cpk!F*UlE^yk`Uj5p7(5Fh6XMT&r;e?mrqa5g1nB{7nqCrnlI zV;dc)`PSMy;IKHU^p9*`Z=f!UtWxqaZ$fK}kz+-Mo#& zK`H;LNTxNHjB={l&}5Q4yr=C-Z}DQs*}$e46#iwKPS+f-u1P3o zwVgLGFu?XRHouKCXvg~8)7i=Hf6B{7cA@|1+v)L7(&_1DcKNP)YM!e8fxmo(2!`Fm z;m=)H(z&qJ_U2#eY^^>mqbL0@Sr*AWQF=LuX!_+&7SzER7xnJ8KLwf#NrpJ;TkdoM zJO`Q#Npi=JnF7g$IDywVjID4_Z7$QdR18NItT&UHo~D76ONZ8($}yujV_<%W(e0Iw zp+r+&st`4}i=-wUG!yhRzJUY$)^K8MtS99{Em9F^jQYOp!Wv=}6(;n3z@-WlIA6zu z5z|Bi7M3a$29ur-c1U)6IG)@=iZ}F5H#9>@0=XVGnVFKD%yDH$t>wYGnOa9HM?p-R zcW2R6qiiQh*yAJ?BNRW(OmAV8iQD7Oz9m$zxIJ|}@q=JEv+;IFW}n9`wL9Zrn*Yx3 zb;?yc$>L@^Gx3PwKdNgkfg<~-@~stXEq`_E4+cG{L+uqNVodX%;pUhJO-*jPuIu8T zEEiIJ2CzsP@F3pF6pT_OEw>i)?qui)p6_)*X23X&h3dD2A9(ZDTq#oK9~ zO71;2)v+gW1@wn>nhts`N&Q-hE5u^5>yOiVc67Gk=Sb|Pwnus+vER|}ErL_11sb-_ zF533JrDogD{rW+GhgW{j#_!DiNA*Rgc7VlYc}(1sRXcY!b9e(^k3Z_qR{m@DTKo8v zK&_*$4krGE-Wp*w6vnjKi;6?y5zQs;E`#_feWI&kaTI!fXt9rOsd^ zHJXR32b0Yd2S1No;GhXn6P9%kEM{9{zy}Fl>fl}()IC4b8i>=|EOYui9=o%*QCH?X z0as6YA|$w-F17^~eJwQ+Lk3wgDpNUPx3lyUSOhoWJS^#O2MknQ2Hh#qq)BsC5}mbB zak4B5)oDzh!SbJ&>e!*h)C}c~U#iBo1vO^*awgt&Xq$PTnuD0oqyeAMp{SU@;DrLTf+qWk0Fcpky2*B$`$y_tSgQ< zN>zE_>E)qL(1$x)O?5Bx0iF#cg#jN6M9v=Mw>R%|p8b#bMFw7AjXS^+s>q@GIKC%j z&MKm-N%EyRe2QpGCm;wz%OGFFXnk+Z;U7K|914$eqJXmbJYLK1ihNT)3MHu$auYQ$ zrEjRDx&hwYjes}4cp~=!Zc~Ml+Z=o|7Z1iCQwoU69}uP}PzqtMe4D4t15zC&+BJ@Y z*`WiFjSS7CNTu_873oN^)OTogU#_CcB2F*b-fS3fKXe}PsH)ihz}e@fE?$Yi;=&AN zT+#XAiu%#QC;{hOW`Fd%gr>s5ZDg%E+HHV=c{RikK7}??ub>R022m`YYCCd;) zu+e>-lTagOZ%k!&(0eflVwl(IuiX~mS>F2bWdgRP1a{%Ed{5LvSchp@HPTB zl8AV`5EDi%bUj>a_3WI5Vois;a?d*Qzj0BYfI&hSbP8Xu`@`nYD>!J-LZ`@RJ#%qU zaYJzJ!6HK=de910*x+o7g1>6hTi&WVfvZ9}l1XbmhZwOyB;;=_<_MKP1Xx~ej1j9L$a3QD^28f)#f+WuCL%#Vb5*M0nX_7mSFeT4X{1p}^5`zvGWmmGC^ z-xBjh=Xv?NUw@1Plx-z(qrdIo=&vr;f6mJ<6&>w$Ue_V_cwD-i?M*EySD-c#DT@gC zhJ6o`k!xSs-}8s~9jL)Z5kc=Gz)CH<5T(zBhbFaXTga{LZd^PZam*jYvdmMwqCLQr zJQ}qa>*+WKon(y>^tq-t?|viNk`%Q7DGhpb3a)uz;U;rR)OZinx!J2v#FPOaao4N^ z90So1j3mn}4-by{TWfsIch75x`c~(cBZU3-`409#hwRJkS&n_5Q`hS1C#;Ng^^UzT zc%W!yq=Ch2=I#)0;_%VbMp-kd?31FWe(#FT^<%(OvV|1x{D`y3dKx* zN|pi4tJ-j4+6bpZGBY7mm?g_0En#VOH8tU{+!%%arY=voytMA=vK}M~K6aCeQ+edk zne71eOTkB-y++&XUP|HY1GV1h4QAQI!gUQ7BHkq@iE&7lPm0ksspV}K5>K!Saeiq9bln}_`FVPe{uW_aH(>zj11f2B|Ie?pCB<$ z1fErqXVD0*{sDxy=f(p;*gCw$X0-f>qH6RD49X=|!w$2j_jvEG(72pyTLE(>Bx*kW z-|1Kuy$N9Y<7ibZH!JM{2WkbXled`cEk@bt%{W}%$gL(i>T~vMiwQ<>#nC|pyRWz?SeZA@x{Bw$8YToUX}hUw0?h2 z3l>nwItuhn5%%GGE;w2{JPVVZm*e8;9J}*>H---*W?D|^ACtY?>4H57I=m#(mu`e( z6r!cm9_R*%RQmo4e-FX_imO2y{P!4Po_VRxNM2Q;A#@(xzCYy>v{7CySHl0G$Jhr? z6>*webqHtx$Bgi~z8Tk&?RTIA%5jTKXq#3D7#R7tS*7d*~=9X{HrMO}URn2m8 zX$jnohKT)p++RM6-SZW?&{%7XooXHUzzZ`|UXCbGGr1HcH#7?N;{@_ctg1l4YU%}F z_(3x930^K;LMsDC4avhyneJkQ=4wJc-WI8SX$WJYP9CGs1XFdBr?8Ud0wETxO5(~w zqMJY3)b)xrB0lE?C70eI^|wqalDFktLEW46uAhX>ta_hNX@Q3@j$&w)qD0unp3zKV zeEk0C=!kS_F)1mFqgnyob?u)0^tj*R&7<%e>a#kexVRIgc;xnVqknp8X`Gce?E!p! zq1l^x7I2So`$xAIlMx3TgB6RC>1Y&l*avHJhq(Lv_({c`-0wq%$Gj50+p(qyKBU3V z&3_WnMi24Ye!aP+QHnDl9@*!h&hw#_HGkspK|CZOW@qmxn-@$Q`C#9gPKJp!^VO8M zo`|YDm`p*0nwPWm*WN*|#%ff` z!K0W*PtqpWuT%eu^m@*Cn-L+!zrr@fw1xEqrDs(5UV9xhSIcceYcP4JBT2zlH?D%L zT~-Rh&nU_sjVO1iWJv3rOXw#_$86AnF_c;z{^%JM2H6v|f z(nfFMCTaenMw|b3k^fIVB_E0M^*Cwo>vfjJj4X1Td)pX~w#m+=X7BI2R?pb@COx3G z>vpK1f9W-U5_ZiMU8*I8mXjlaq7)xRp+m^4Sytp6V?DPr{uX1YN0{7btyC4Mh^mX% z*aIPJ$1)Mp58n^@J&Nly`EAAxqP@h~xl4bMhv#-NUlnR>JO@tI+hIxt)>K?ZH99S{ zS;kxCTnPfrTuOpx*o7Hp3i@5yJLJoInE|oHf1`|8dW^bNy4*lG%uh+hJQSU3Td*Ze z)ddFfz7l>J4bo;a_|N?Dr$7FHoiB~#IQ=t&>9d(@f=1>l>Q&^yu+~Z~$)O!G^QY)c zbfo!*=~adnGP!{mwXRsyx7ML}suwc3t#ZnS=9P7so}t_uU2H^hbmtc}ql#O4z`(h)fEobs7_6*d<6~ z9{|HI&Ov2gZ{g``kP{%fj*FMmV}JZN7mu!mc)Xv8K?cm3?ZD}@MaSvu(e;?XBwf~D z$=CJ9=4KhI?fDxf<9S+d)e%>?{1RZ|19#qZs3j^FE9HSGZnwNs1!bEdrF3>(X4^}| z^T^;6X`r2PZtnhK+E>A532Z*C`VyFh`47zEMzp{19g(P3#duD(`047dc2 zSi%JG`|5iZTEAKRINjndu=o8t@Ox{D&(ilKQ%%qPI=PnuEyiFVmTWyacKqjWMM?lZ z77hV6o|w3$0`YJ8xFiQ9!~)53;+Ok_$pdL*iMx*v3c|?fIyd2iRZIpqZXf;}f@8)r z@>Zh!RE$%y{vo-vha?&uYR=x-8GbiYneFw27_IEg0nK4GR~+sUn1k^_m-q7Cidwj5 zOT98De92>%FxIu22Si;q(~e z;3+Ev!h2LPV@2%NM-LY|;!e!?^ZuU)`@qAVY>5pI^vRwNNK4b$~+4*9u`Qz|5x_y&pJucL8Evdft?gDejF>*C_0$&;WBthy2~;=GDsB_4 z@(L45%jO@!$ISa!Y|Qtt8|*V(rCB=eHMK{-YWRcYIYDL9_?fa*TLcg-FFl=#$mPkrxJfRS}&?yXEN)3*RpHFx*r zdcnnl?dCp-qr+jZpjtb6K7i#pD=NZFJxrtEV3@}}0uG^}G}t%sX8UT$bt8L31JgB0 zA*`P0Re&K;F}Gg@#SQZ_dgQru^+(8KSyQ(?xpk9p&f&R^&YD_x{Pp7nJBHN2K)DuK`5qFU67wn{y%2x6`wj!?7bgu;ov(zizN~XzSQiPgsWv+olk9chGd3HjaODuKmIAn zOeE|TiCMkd%~T!a$*SHZUf&S%c=p3snE-p|gU(Rfb6d~Znl@1^-& z(`x>)Aj0>42JVa1+UnQc_&={(TzH+&hwz^7k@;J!t5+`mx#m}coS(CY=$h*UepVDh z`bG$SbVuQY1I12YRZ8da9M|VsBke@=AIbIwK4vm8@z^N&m&qFQnL0_n$4UjIMP4^E zA+5Cr4&rDpdGo)*Pm7&AW%HwTzu8gCXgN`hbHW`#sRCtmsZnUw6O!MlBg{bZ-+rkiK|<<>yngVk z$9myap+7UlOg$4P|5E*AY0W5UVC|+l=T9Hs*$CUQ#f)W-9?WJ=*$NcC$@L*xgc|JT zLbX_XSb7IWs*O3G2IV5+4DubY)H6HKc5kn50g~o!-aOq*zRY4lN0v-1B64w6t#v(* zU#^h5j+YKO_Zez<*gGyUi= z2`u_7YA5kLpv#=>a$B+TRbDy0iv7cerYuFyIz?HI(*0Z;)mG$DXg)+1)puALDNd=k zMF!nBTp9>YdCDwIUm0RJek-JSPhxq=@v1?~Cd zZbAx$fSz$gbu%RD1rp;`0wyXOCxKUaF0pte+Obyo{TQ1`DAxYedZ$>R`r@`%dVPHWrQ>A+z0bvh8_zL?yvhjpE5 z1rZb~nEZi6tvM(r5??Q-GXtQ4)^(kjkzJdh{i+S_obtyXbRu2@&I%p|%`!VB5VVY+ zp++l^K#7g3G-T4zKle-i;j19!=(flQ4cIX3!U{MH(UNxXEgd=_mmZBl882#(JEJHW z44o6QKU){e>?bb>QM>V1CVuI#2}X?=tgNz>Sbm|D!CDL}B^8f3AvIFCS>uXS^pJ`; zR727Y}%9MaO5KBs8Vo{5%s!#C*Si~_JEZVZ-dDdY$ zGWiX*@?rki5*7K7A5j^0GOVf&YkB+bPnGgNHnxTlW}?h%g&(VcDHdTuznDkP&>GQ&|7JG;0VF{%Ixs;W zNq+K*OMuN&N{f{G)b$QQ5}7(v;ag)M znYFze2pz36CpxrjR!n&GRDAb*8NYoF{mUM_IPI=}&x9KQHyRCz!8NjHeV^GqZ~I}g z(+R91S)Y*D+|_naK0Ih1T8t%7%pUN@1<_4F{^Pvf0UQNgwtqb!ZvA=q<)3G!Ki32mZCeQsKkor#VSP@ zl$XfLgrMZF-3M;xe24!8tR1Pm_Zqli$r6%@bs6r%|T%dPl}hkiDy zY`kFEfp#>q73N5syAofa=5e}Exu3+bcb`6+JpMmgzcH_xc+}5$->2^bd0VbV*F|%? z6&l}fm{*6GKbt#$Q);yT!6@i4@M-m{^>ci9j3-Ck&MWARI&_#n_}x$pgh(@U#yL2a zQ;t|D>(s%{uVxfcxNCPx8;1EDd$dvNEpQgPUtl~{@=QC8~)G$%C;)O)~rIT@#HGsf-eYpI8Bw z69x91-Z)n@v$WeP>Zzo9*}JjJDrNrpUzy=E(@3woZY9%tSc?hW?TMZ3H;LcBm^_-# z#oLyk6`IqCd0!8T3I$&F=bjg59^uDnUA~f*X8_2=@N~NDM+Mz8LPq^J*D`|YS5rT} z_~%87bJG^(9Xwkpx~hw)HVU4a)t>&-&C?XN(GT#x!Uw5ZJ9M*v#6O!(KIiVbxPSeg z4H&938L~O(qP96$jLI8nm;@vr>OsTJrWFL4QTB@s7GloxKIQ91&snf4M*ql9Vg;Gt zc~P9zyWe+8X`@ox7Ef+Y7FVWVBHfpAHXoCVc|k8iN_Iv~q-Y`wTOCWhb#l5Zp1FP5 z2UkZFnOG0y28&xP)fT*wVigZ0J@RUuY{}Th+Yx+!W`Axe+UW>xtJApOUU7Muy`Ai? zwKwYzmiG@xKf zZ)41pT0c#^jI&oAJMu~mf>wPwSI!4@TC_Jp?1pLvDxv33OdlC|2otzU)RH)PG-efb zbxA8YTo+axvwC{I12*vfX;~^~np|6HCs}bVk&W3zvT9*uVKdY!HQE{#KTersiv-g@-AJUwJrr~+%r)v-9gchX>na@A1!-06RCP^fs`Dq z_E9t;*6&WVIIN-1Kiyl##Lsy_<)22r=;n@ke;*WluXo9Dn)SE;YU8l6@$uc7T$7}V z64N!VKIG-N3w~`Z@{^UdvBFh!(O}~f=LY-6UwB`mwH9K5(vQMfHS90#djySSb&-#H zEu$A3Dv3cz`e;1J&}cwkyCc@6jbA)l@GZ{XBZd(6j)Bfz2s6Ez8VHu)L_0R&P(-WN zOsJ}NO0-!9^Az-k$vi<+iLXrf-MtUUpH!u!~+iBNMjx=3mM1$4H^G)^U~qVvX^YxlKM!euCn^lK_^8F%V&ASvl6G! zBUFTbcJe#hH=kqkhg4q9E1Ls)qf>&hvu+*#)sJF!Xl+0mg1tpEj|J^< zGOI|1Mk8eG_Ljxqg9tm}=y_scyT<6SqvLAaYJ$H*h~*u*!8#sffW)ApXfRP8H+5R= zwgLNX0I{XBv2?biv*6AkiWEgjei3Dy4dKAv58@<{Ivv{gCdx`6PQQzW2nQom>Ictp z1g=M=+5Rb;FGph8nblx|r#rEhbfAl+aYEp^5mQc>t+2R7%}M&5y$& z60J@Na~Aqz`I>=Eh!#6MgjNcbBJU6uln3|w`p;-gX!#K`OYcOsTVT)D}or2KHryBsk-0e#}Bs`=Vd{!dSZFy%5Sx*sRmbKlp>BIRpgjwBiXt9lUOS!8^JVAXyc93G%p%KSWJ8jSjQ-r=5#jB?A-|VTPB9 z)4p=oSg5pu+_a~jPu{o#LM(Fa?nBQyxEUAeYqjw%*nyc z#LwI^STS&Ip8K|7uU43oiA-AEWD}GX>JPO#R$^I8WOeE5vgbaCk)BB+!yz6$F**_9 zS%CINPErHT4Q2{jgLqROE`EUsg@mie6(&MYCvKh8yq5N|_IOf(2hcytqV@e2_34%<%K}_~!6$bb!0mkF^~^7z@Jsf7pA=;7Xb#TToDvO3YAVW@ctC zF*B>g%v>rlGcz+YGcz+YGt*Pgo1L%6?0r4GyS9JUWOkLAmiJ~T%+n+CoID=xz@Ty~ zx_Qu2*64sHxZjGm6O%auWsyitOY#}Xqn@MD1*7YWj>%UP@?J$}^2M@{fu7-t#bE*l>_Yn*EOaj$ZaM-EL-vApcYoyMKG3kSgN9y76VW_K9ERQJtdYney-Fd==I zkSS(=^M?f`&5W`h7Nv7d|5h=p%mTiKyO1C|@ZJy#$<;n=cq5-bTz*)TG$r_++IhM^UZBlucgx4`&~p?J zUdub$+89YWmPkaHX2s45?bweB;$!tKd7LcSyUF{rtyyZt({QS^f^KJaJ# zmOI@cwsMd3zWjuSQ`anAWzU!1k?liGX%^z-mw4fLC5eK*sW~uoL~xY6+*RX={;c<` z_m0*sL^?%lw6j(^_>qqZK}<5SURvFds|Cp@vBD1GXe$_G@}!Esq;u>}*_#=Sir29A(&xtA=n23W z6>|u=J`q>ODR)#^Nj08qMV1)k5f`cuWE==&e7G7gC=MQAAE;9aSD1Cc_oB8})sTwe zXLl(fg5d@}`3p)ET9_}Dl3^*iUS)J(Z+f4na0OU4i@Kcn_mo}pDaCl0PE2~=W%Mqq z?`2|u1>*O!BBxFp8MPnY_%RnbheN0t9M5m49q)BJ+gP7TQ;?1YJ)fw0NmCe8AE@F!-mBG33YbpYJg8^$Ri0n{T2;*ydiX~7`W;fk! zQbNMSPyV2++SKuG!Ue%$L=BaF*;&Q(huj)>|8^pZfshWR0RxZNghs?2s;cj zSxsh=3R0^51-+XMXm={HDN&I>K9`R=lTnV^Y!U2~lEd9*JjPDR#O?-s*d3HKlF9t0 zb2m0Cyyxh^?8ew4@n=49Q6`e~8<3-{DPVwTAFQ`Jd$pzFLWDmU?A`87TZM(&&GwK{ zd+ioS+X>Fu(>{gXL08C$l2xHqZOUH6gTeDz!!D=vtk!STz?Uz8R(QrBPM|`XTao0La(Um2fJn&zih!I+0gCiY zG3Ck1paj?()n0W}3LVE;yIV9M zpHW~vOIR{CT-;}}_kX$f=9Ou>zFo+jw=8L?W-W4Z-mthUJ^z^u4p;LLoYljtqExD& zD*S1h=AgNp-0Zfe@pyjh9X~vFpsYw=J!YZi2wMo<~`mW#ixDaTk0=I7) zv-S8imcJ6WFB^zw8{&1)6aWNU>Sa3aNW#_5m6D2L(?uK&z1!E{ncYwW2(m>1K^POO zHkMrtvW`)lQp5J0_nWifG3gT5Oc5w^!XZhTUI-}x`>r((gm8D1b)x3w(h+2iRfW9; zI}hixxyPG8SVTd`waQCDLh2&-t5U;B`G%#-rL|sHThRcbbh(;eb9nl3Ay-Yd)f=y} zq@+TKD@MB8<9L)Gl|_iDSKRrLx|5NGg-S#-xvSDlxGM8aIx7_pqF(n!DZ3`~o^R-y zfA#2&<4~0fp-)}=b(QTD1*dwsE0k1m*PcGou6zm;FFa`NZ@|yE!!VuCl-^aG!Wb5* zJnEjp{&IbU3X>QKk#ez-2u28Un?G*PJ5q-V1<_cByPS_0#fU@DP3iKZ8Q*0A4b{|- z;`F$1BuLLHBparYYuOdfVCi|ujxEZz?OivrcX%){Msf;HWtq^mR-6W`7x%6~i9M+- zIsM~TczAy8xYZM)9}F-C&%hc3q2-n%ey)1qV0OOm7;v-IUr^0!%5}7G-PHewGh?>y^a2jiKKQc*o-_4 zBlAaH;+f*3VVr#4HCsNtqt5Tb%kOamOsI|ohrD?^rCVl(0w|DoItN^+uFqxJQq3@Hw*?9`}{Vpz7vqc%qr{wBtn z`>f!5#rX=b?n8uW#O#wHQ&_Zn=sZRzpA|`{lbgNTNGHhybO#GY?Q1Ga!9Sh2_Qb$( zgAprK%TeK>KCFo|;AUb1{D=2se9FmuWTx{8r-13GmB8}h#1F~UPe0R{4fJ`GDcl?1 zjkBUlGH!Yd9iS%hIFa-gLN}is<_a@m=T|MSdG}48Ym<~@qkN&jxp3PxZnMZTA#5`b z$vO>m$x5y6g5!f$t@J9^*{gE$X5)?{LBY~ zsPLigQ4+lji^3b_O&76A7eQI^avf?n{cVwZs^$VCz(!&;VGK+i&T z*s&~1v8QNTR#Qf~+bLbGFsSoVy}&jomuEWNOgEDlf%b?rKc-JQ%c=xWcD|uZbeTu2=9z{% zQ~B&JrV!ZSed?T#h_I(LAY4J($$N9^mM`!TKXVBBeiTv`nZ%lD&F^A-o zp187r4yb%ix>0?Fo7Ak2bmHbEjWQ*4RsOY8i;T?uV(a27fHOmri9?Z$W5%gNjA!=j zCZg=)w>?L_Nm9OR=`ZVlKJ_}O=Zp3|rwg_YyYr@lbhiz#dd4YgFUeG5)S9_$)RZM| zI?2i#JJN|rK@+B6BEW21Sy8-RG()_O0jt^&e_-dJLjzybB2=GVxESYhde8&b~5hn48ytGx)(Y{ zTjp?53x;RTk0-F1!RISj_X|T z0y*pe*zct>kY7FZ@}R?J{kA*#lk|ZN*NPPkB|iWJPo<2YjnX)vlI(iPkk=S)W&ICQ4`An0Nu9NMBsoz$zyH&w0+iJn6l%UM zQfCOCUaZC-$iPXiKI&CPu6{>XA&MksS`>0yL@Wsp(kZ6;w*)g4S;(NCT}-v$^>wZ} zK@&UKN>##{o0ul67oWG0>dCB{ zD~%;&l`UD+(E$mWa?BJq2RVm!!( zy>kSD^?^lmvf3i+Zbi`11+a0wcEMYNS%X7in%@i|b#Q;%xU+ zZHtyPWFt>oMwf6%!Yh*1`Fq1PBV6UJvVx)97UViY?70Penw~jtTE!3-#Rg?|sh{xJ zeeKG$I3tv{vVrh=h=ZyL!KYmo5iASUjYDH#DXEkd+0#t*2AL_&dpN{F-Go3mjIdWt zpFkbR1y?9n44&%U1=vXyL%g;L5WOVbk*vbNcDS#|Mu{sv3m|K?`aRIPzoAEHLhW#O#1Ov#VWlZghLto5Yj8-xzc6TE?=1xCKjNkL zxvUy6#H=#u($~;8f&^Im2rYt-@=^yMmWOP@h0AHZnN!(BAT*>e(yCn%R<#`tcxgvW z-z({ZA#)33chEI~1(ju5tm)d$*MYs*U{37dYvr`w%l|5vWD;&A`6fAOoWhe8bx~R1 z*I+D!dgZZVkPEEvwB!ypx{QAX4+l$pJ{dm$Jp&xoSKe81(Yr3ECuyg9zp>;R`sw~H zCMn9bOf*Nm-Dlq1#~}!IC!k{vC(fP*8j|TXbd;V*}-Z$k&+yW_vM{ z#)iVvW6-04D=HyTsKv$Gu|CD|h7=~!J;?Ec@@$8V9Zb`nU#%$EXflX^uq`y@k>SjO zX0AEozQX6%V`Od5d6J?!xkn1KQfxx`vtw8HYpYAslAV!sI-^ZDYXBv9Q!(E7-61v? zTySxEB>G&)tI&<@&*9c|{Dl0c{k>vA)FRNE66_pjD`VH$9<0zHHh6Ax;A{5x!Y{_v`3PNj1k>mb>QThO?YsYALs z){ZWY<>IUPgB!_?3aCEUDjsyI`MK>v9`r-8+PTAG`G|gT@oY)#4pW`B1)W~)GwUCH zY1}3lkL$Rghzp?Xpz65(^s$u%RgVR&-Ue5kMNx*hEvn;7RW&k?yrhU(`B6$)HbHoE z6G-GZ^mQ(rN+qlXbBvwA^@EqA?aU(Ul}B5l3pDtI>6fGRQ8FB1&!habYoUx_zP46> zYOrceSnLAI^ z)!@vuW>Uzo?kJR&af!7Yz2oqGD%w_HcprWSwPjkQPoXTTxk}P%?om8U@|inKbWLWC zoQAEhl70j=toU}Oh`%nSRcS<$k|hNH=`$<7uC{W#G)^A7aiL3NOU+{uM$%d5rMYf$ z806H}QRp(AQO+rJyTEY+5R#8gkhzlP1Hj>!28y$mFCw1_BvkBNyWR zglr8Pou&Qqc#9pJCg6lS_cr^&L%?;fNLAaH^Qo+vaCag>@(-=rcB&#p`fbBomuIKy z3!B{t_Z(uHCLuAoZU;y`=9#{c$EGsGh20`&r6;=d_zD7igB_47AWtz?$ycH34w}_& zlj)2sPtn%MN64#zy&`k+y9qlSezGm55D`>e9^D9MZ^h|GX)@td>w)ZWe3Hri`13}Ht-2iS~xvXXF&*GWl(a_&-`i$ zK=r(34OB#VCSLrvvhTGy`~{ElR=BL zoC=3m>M!XrTGVn3I~(aqR_%88c4u|-T4q=Q8hvjQ2)fz+^s^_77xac5l5Z%mg(HE* z-jC=_{8++lcXId_>>#on5o{007m?3wT3auG4~l|$nr&gW3=up0d%xaSWq6P(txyNT zx3J-D+gnSvNar-G!dwdpadb8S?JNN&sEqC>ZX*Y+44$pvevoN%lFHYm9eD7j9<*4- zQ32vFC}yT9^e!F>ZD^^R#1yucKn6}T(?G25JSIuiFcg)T=y5z?*(0RYT!_5B3ykI~ zfsL0;woUPR20QqrUcEdMjUGJgXgCp6`C8bmN^%aYknTOWUvXVg=pmokM7xLE-P}Si z@|zzxS!9yb96VeGy8ST{>tR^^NSaitNNR8CdT(8j@G84sST?nnYFW8(vE`oJzw5<= zjx|o%TMl$Kf;|BhSS$rbK&Nc6I&SV6ovQuiUDUEb#@|5qakTEO*C)Z zH3|&gP|!Csy^K@Q@7xh>Ev#eOsP{8}bT7-{P1>x>M1+|)9&nTB2?AZBjKj)a;Kw!Q)&W+y9JazRi#up@QAk+z*5W>6cF z9e4qz&cB{ZAJseerGhK2xQEj&T{LkcR;8N=05RTzXh2U-@OA3g9Xrx4o}F%_WAnhU zXU}A@n|&R}%VIMQWU=q$f{kKG>|TYQtq>g#8_+h^1#;AUg@a7)LG6{oRE#=;;(*#O z@Ofs71HNez9pi5DPApgtF7SO{+ErM_OK__8zM)Q!hK{XS>%@O;doEXVZc$%NtiOP65acVv_^+1=gL{YHtMS zDa31(v&MNr9ik!KM?*_wSDVJbKFaO5?i=nPU^dD9 z-S_PdY=4k`mPHyD-h{1_Y%rengh^OOd8H;;MPaQgoU1eyiHdow9|b=Sb}_RO^s2Nx z49x918wSwU80IT55o?Bj@MM$wwd2`6=oi*tbEF|BTA34D(EC$b;CI-y90b9h9H7w{ zQ}CoK1f9jGO%jP+FCeBHx&Nj|$APftO>9D)lA5>G7N|GvR~XpF>^|JVvWNE=Y%Q_J z<32s%KM$W0VX0rxvycPSl1v`IBARt0TS0-F$e|>YSpTCDV>GUl#qMi-_L- z1GPsHJDBl<1VmT_HL7Ugii0cO4(g{A)WCVckk4HriA&@a=dg4Ad>y=lo3#}4XXL55 zTXZ9sw#|LCSD4Ly`Oq7i-ttIaha^mX_+ERXe59BtjFd%P%;`_fAf{S72Q=oDg0p(`E1RMgAmn$wLeTo3maNrILuTjOb zzI-aYd9AVamW?v&=A=2BjWDKYvsquLEj;dy8r{MSvpw*96q8HT3#-Lq;5bevBmw_ZV9D^*c$ zu&5jPX)iM@jBjtmML$P9f->=@$}_k#xIZRh65T3(UEDgnpw@>W+Bv{^y`z$>H<=|q zg;$ld&29`)f2w;GVhf9kbl)ztVt{OO{jW|=yY|nCW|2d|Q&bqRnOy>^GOnz-s|Z|v zm|d&Oo~P@bt9pa1p2V_!sMa@?N-JfXb>^qhgE0A)M>@Q>4G(R3HlfAb(&pD71^Uj@ z!N5Dx%+GP733O221(N^r=>3rMMyzHzvVRdi0o<>Gpros&KWNnLkAxiM^5mvvQlg|T z_*Cq)Lk@;qc0YXSd|ZG&bK+DzM3|j6rdE**V$g@*i3PbuvUamR(7a3AcbhUn%pIGI zDs1SkfQN3s8#Y76mx$QZutx}$LXywEymI?V9t$WGcT}HoOUPodk=(DTuN`Sl16LB; zgPtUr85MKTD!iqeQDvtVB*g^i__F&ismUg6Y^v=!D@g7v!ETcrGjZk%>$Enbh75sZ z-K?YBu^(7%CcOuebA@Y&HHH@HQqKJtz3@}PX$J0FI!0$D~N?7NJMM^k9v+Jz;e)_UIF=zOjzm9gqEmxqPc_&;D3f z?`Px}H~q}0zJw}8m@CAn9nWL($ehG8lFDh_v7`IF$Gt&^{OYoF<8E{1lpA)}AFk+F zj7d!U&+oL-rx){jg)K>T86wh48>JgF32{z-Hru}Xs?sNvW>6=Y{PQ?+Bwk{POjACg zb#e{y;5VENiA?ub8*%0dJJ9$civqa_OM)cX7*YI;a2-=Pn_-ihm9JMzWt=ErK{#+? z_bL+v4J7xFCr$Yi#PwAd(LD8S6Z>4XXe@{?fiLc%B;-Nhy$wMeLD}`;F|KOI0{u_r zy(7;M$G5WExZTeKr4Q?SFL<2USl4v3Y{uxKROa@!+35u{!}ugo3ZHn%%p8Z6BuIO#H3GLpf*auEW~=H#tgE2 z@Pow?T#;A{u;?JD8N)u3oJ(4dn@ov~d7G7Qcf)izcHHlwU5H*? z$8b2OVaqTRhk-iVYrf|C%}v78$u|6snLSS_(Xat#htz#0oJoz1mCVKs9TN0IipU|& zA6(E#Gk})z*c?8-vk%jFQM3y#mL7+D$Q1Y634mn{vF>lCDq1dE>I$N1Jtkr9(>b&! zk(>mkoIUf9v^l-A2FpUj8_$vrOSyyW2{ocYd~=EVejA@5CAwd5^@;|2dPpy}w5!J< zfpg0H$R7RVwf%ayD+6jEXkyfr*L1%*{W*hDwK?wdOW%}~&Nlp9=b0f5=heKn@-s>l zu{-EZ>k<@Wb?-7Oj{xr#rFsZMFu4%7HuVt=9wG(Mnn*2*0H}Es##{i786;o&>HAv1d^RG5VCr_%3V^;)-$3b62qZTGdhwoBw>yDvNysd zhFL1S!n(I_=k)1OgtFKCp=BtfC=5>$Beqd#vcBPz=Ad93ayoai?YKE1MjdJGLH}r{ zdm6Eb>F9)Z!w8fJhrm|wqfpHfS5n@C(yMRr=>UI?a}FOdmyh`{VR%AqjJs=ev_hB-(_ z1&+HO?CU<(H>(>lbyyL3WyZ;Y@K0@d}nA z3djmDCFBizic-o7Qc!V_BjnoJke70Foyu{7T@%XJp6%w3Ps`6V<9bI`HI>hUQQ9tt zwDEQ@%6OWY;@oKkqk(7zVJ5(dQ$e>7)7e$JiNca)Z)mKkwGf42a`=-BijT6A*-V9h z&@X0IAIs)cHs10xb4?Ma+DGqBsFtCbT%~?Cq)yCb?xzYf(mQFD$m%1Li^k{W%aNJj z%$WPAeJ<^wD{HpEH3V@`l38H>EvS!TWC4sY)!P-49C%uTU-Tg7QJ3qN!OVLcPXpi49v`ySqAY}`p|XmkNg3tOT;NQ64_x>K;9$b7CthX zfhAa@W^R(7e{O&P2JPoKG@fBFVxd82@(Aaeh1=8=Ejw5DuoFoc6+(%~PD)}yeP{)U zD`Jn36LZyaVoWdq6FY8FS@W0moTGe%K1;{*d*MuR_&ryobjakdkI%%6Hl_2uLRwky z94K=^{B}mE7<+E0pQZu`t@ze?y|11!@&Z76)sEHvIPUS7??T3cX0O}ces_1rZJM__ zpfJhuoB`9pd(k>EV85Djtz$DxpHwycJL#CXqP&>-xJoTeqP*9a2Wwj!>+#0L*@$c; z)-?|$Vz8$`qD*n?Y@U1;)S(VV-t0pj(aUgAnvrLru~EMQuwoIclKL9px&abkZyG?Z z7J9>b{gx^&8jSvuX=7{sb#(&#`9Xe*dnQMzEIA~`U{A+3r`^(X;#L(1C=-Zy6Ocj& zHr1O04#*1*sGE;55Nrq+Yxg%$CDI@t+av&2AsAIAmc2K2CAK+Gj}8YKa7&k`HC(7q zL>Ks_h&8r5c)7Q_4uXVFfDR}pNCob9d_Jf^NL4+<(z*k2!)p7GYz16W0>Pnoi(taz;R_Rrvdaa=;<@G`9|?m- z$r|w3La~Kt@DWFe3_`{R+R8#9XKxuJB!>)7q1Pgx2?b1P9_rpQx`L$f8%-{J1MQ06 z6#7me3Lf&EoS!QzgjRG>>@m>V-#Uy|(pj7k;YkpX&Noqz5?2W>C8({ptQWXkh#dMqL^%H+4NsjXE*>=5NE69D({ut6Xyf>gZ(4VFHI=aZ(1*`&og8M zWrEUzGKVTIek~r1vO=}Jw!3t@jJ%9lB}{#-O1O-xjG^qLtU)!S%G02y2D~9^#eM~| zw#fu?#dZ1D67!0uj$4=G{P;Tcl$23J-+AmBfm^#rt%u*+@3(?`SjYZKz<>$N z_uwRbIu&GQ-?aW;m=;(um|@`@m?W6mY~ZQ3Y3!*mtZO#;>>+6*sbHzn>=TWwjk!&= zji(MxN8&cfE%7auj$9|tqmrBP7xlvyt7q+m~Qu{xS50 z^WNc#>UM3@ZT_K7J5oDtBXNTYUL=VKSjj`-SAj?Ic@wKm0w**@fewFscv^BQFXg? z{VRQRy5NP7WOlDMBvKaHXVq7#TRq_PSO3ZM$yV~&%GrMcok3y2CVBwE@g9kLv^ zoY_Sa@~tE~V(vTs11}TD$fJgy_s8`YH4ipNH6Pr$+y$U7LNEJ6 zhNXv@p>OLI~tE?-?SoX@*xt|E7zyPrEWy*mzK0yL{Hby+Jre9s=JFseKV z&~mvzH4`!mn1639H(wLfw%(|}>%CjPTVN5iSe%s`42FL|ee@|>oB20=*dQCP?o=f3RsYu044N84TGf10G=S?rqz{&{8 zc+ND*T+9;5s?R3Qj?V$jam?AzRmvU6W6dkdN6!z*e=D#o*esMQ>@8v`Dk{b-jwk^t zaVR+|)hL}T6D(^irz+2?K&c3+1gLbVJg(BIny>y@-Ce_4Q(j9{n_7oh7hDfm?^1u+ zVBE0TsM4$;vwbQNLz0#x7 zGutcMJKp!RZ?Ipuzh{7Npkt70uyu%isA-sWxM75Oq<)lXv~G-PtZtlnyncdZqH&UK zvU!Sgs(qSgx@$&orhis!c4SU!Zfag}esMu#VRO-7@o>p}>1x?=`DNwz>SsCUHMq6- zbPxk{rCf%gQ7$F!`36=qse3S zlb2KfGx)RAbJFwL3*L*-OO?yLE8DA&>(HAYHwCwhx7~L#ckA~S_b(5@k3Sv@pIDy; zo|T^uUYuURUK8KQ-kRTkzOQ~*e0%^w0X+ELy!;KeWc~|V{%7h!=D#ut67Xo_aclj} zl`MZ<`7iPy(lLL6Qo6sI6b;hT(MjDp+}<4~?Cgw8QI^}q-bMQX|0A!{Gu=DPI|&d9 zAtnS86Bx*y_q6r3RRI+0@(dlAAh5j@k{(hXn?^^Hnv@)H8tnHXDN!Bk4^c0`?a}LK zpiEYMph&9dSm<9qvq1&{-`Iecuy~oZ#Y{m&L%Y~IGOI}$xN-!$Ca0(6y6A{_$Q1D! zs~ZWK8dSO%XxKUmaXUz>2$?_%QB1+UU$&qUDUmml?C%qkqaFQ-I<&mSL`RVED@$vED;o<)N z{_`E=?d|Q&-R;fi_U7jL?)Lij_WJtz>gww9^77*1;{5#l?Ck9H^z`K9gvkM%JTB^($do6;^M-> z!uU@X*lE;NalEz(9Y0e_vl; zZ*Ol;PfvGucUMpWmN9e}4b|?dj?1?(XjD>gwX+ z;_U3~=;-L+;9zZSZDnO;VPRovYHDI)VrXb+U|^u9_sMQ_KC=L;tE;Q3swyff%FD~k z$;rvc$Vf>^NlHpeNJ#wr`BPk6Tue+%SXfvEc%|4ByZ=>Os(Bs|)LJldaf0uGP%-+)v4zZ&>^aLUN?PXtFaNF#PFIENQb_`)N& zJ+%pKw!YX6^iQN1b7aVyF2f6eFo&vcj^3!yx~IByq8~C8W^FNyc7X)T%UQb_Nz6Oi z%QGCYooUN2sD*dt`7X?!rnBhP63gO{{zA|Zf0HcmKvAmIyTOfTWbt|o-KstA%lEMNkpltsRh$VCCxu#3DpT6h#3tt zZ$$I2ZaX{N-}F((ql#XLH3EuZ^ykt9s)x4~ljo?l3=x|5I}VOXIns|e<{DeIdKYR& zf9>&e7}v<8^Qn^twDZm)&+Y;3Me?KA$^g2EW-5zjG3{nK9U?FDT0yGrgWpiz_`1Zq zbaRey>ZTi}(@wPW!RUSN=%ul5>L=0hiSY9N#QMfU$RWrD!&BD!3`z`@cB)lTS1Of4 zmLi`3nf0k17TqF6TNC2l+TS9%vb#cXVR8ATpHIaQVv2n~*klF6LlvRsrw-Tf{X9V` z#u_d2`Qt1Vj?y?nPBGGXY_q;){W2A|Qe?A;I=!;JN{|s(TfRf+M!EhozZu zuR|AI>=e2Rsa5Nnri42S%pGy+3~xi!11j^D%cnfF=dRx3C#iP`S^(Ex5YfN!l7F-K z)<0=jpI#Cv?mtaGsOzOt4`yvn#6Vdun<}vG87$A9*y#`J z!E+^cy}Z7>$uQ^?T;Bub0~>A~4yo#kErKJc=ySuoq4;!W5FH8SbdqXg+5;yv^ZRvk zKh?yqr>_q?g1NT_q|j`bqX$_;;JCx>4Raz=R}&8Npjl}-!H zehGdef-P`1&9+epW{|tU+~M(hK>76~o*-xdq=L3me`B!UMPgWrj=GomFwOm4m`IFfK3TT8BD77`q=Iy;etdH_MUInH8AkA>gjk z;WiKq>b@{w(#4#AZkR1J+s}-%r-2$qVy(>!VT+4-y@FYZv~(V}`2*bYXig)!petXv z8{8((Fn3_XMZqBo&8!zkGMx~4Mgub$9F0>Cxv9W(-!Zj+3bO9Eze4N#^pK&4m>csd zBFix;SjpA#+kV`J9lN?Qv^I|z*`W5#khL^C#Kl~65yYk?5lOG}!Bh)h`bIGI!SNN| z6}A8X1LV|MrTvY){;haB1{S8j=C@BLi(U)%p@sANoQgE+QTs9y7yo?MYyqLU4{&$@ zG^cm;V-l}LZGY=eo%Vw!bvGCvWi#lmW>?HlQGK)oQ=A!H9yk6uV_g%x=vSTwzU_M? zHRg2fHOHb4$8OUm!EhI65`a6Q`nW}1utaTcH{0V^&-eI?X=z+zX}_ejfwI(U=TU$w zDM_f5G%ouks_VLj zLx@-SqvZhHAVJB4Wj?`98Cyu~v(~mqCL$>)mygWQMVwpYWvr+)8JJ-vl09f#IxBH* zVkaG5-?wmZAVgMIh}+#mvdI`6-su>O+UQWeNwGt@LqdBpjh~HDQ$p)4n0!AD!E3?d zGJ(Gb5h8#SMvD?gisDC!@*2Ti8xE3uBL(bo09^noXJ|yRPV1`sop8E|^Y|WpBHt2b z5WywKVzvhHRCm`>V<~BLShci6OJAVYv8ntU5WxO-&+XsbzkkxS|HY$({=Yv;V!BLs zXpw{--XW+~gsSwphM>O*Br`?|8TpI70EU<4`U^7$*9>kbPl02h2>^i|J+HaBj4Q9) z%|FBpfB0stHHl%lZh$ypQ)fAtUWB(z{K`9ic5Ie^wvrx8+>>o>Nhfhye(s5+LLvXa zfSr(UEDkVaIbG9_|A0w@Y~v{oh?qN<-D??P^=yi{i6K|eEE&hz4p~pWQns@tm#!|b zK%ICwdPZXUux!;9DH!f$7_AjJ7}uX^o_x$1K@oB{ty}CZ7*D-;=RoDF=c&z*6kTv= z)j~3qC0XVz5v&1H6Nna_zy*$r^kY=u1L6`OmJO1cj63|M`5(L8@)Q9SHGbsV&u

  • Ix{Um!eI_6>{I$qk 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

    @?|5! z@Ni2Q#Ra~`o$wljyl^_iF-{uqT?0H^?AA&-d&s#r@44V;0>A=2a*Ifh`MCZ0<#{%o z!o=b!dN0EJ_X}X8HV(MRcaSx8-#*P*bmdj&HSs0}vBqr6V^a#yejN`KyHa#h))Jhh zl9yKtSo8n+rDjQq5#M31Y#OM**%QCReEx8A(P9~^>4w9)7Qps`pF+34x`L;P%**^1 z28c(b)-^^6ERSQQWW)<`(2rDe-zLgE4`E~QGgnPeA#gPT4#g-6A5?RM31GrLm+kMV zA|_HyV78Oe*p#ClCnC~E?GoGh7C1@OC9B`~?LWJ3qS~zXjwx(eBXEc?)2{xt-08;z z)dkEZNKBZz`@tXe*nRJ!rhxzw{S_RFCxUz}mJ`uy)3`-?aKSe=D?v*y%obVL2S*ux zGtcRd;Oglg0$>0sFE2TKg$A~rFVTW5Aunh(AMq|oi=C#q{mswzG^W9w6pxh3u&pi7hMl(p(Ok|V7^%=8&cvJ(*ocbD5!rgHimWu#mB2{2;ZYV z$6m{++MzQlRj;^|ee$Qt6(W5~ZgD-^v_O!7`c1uhYA!0;0XT4RSBm~&hU}lc;3(lh z-T@S$y$Jq8;|cr$u%46&rbcr21{~0VBh~+&rIUAD7EC2#=aNaVGp* zW>IPBF*`pWN?LYyHb1`tlpRQkYdzP;%!_k?R_MlJe}A|fs%sA5Gcw~M>HpXAKP}tr zuKfA_V>rse<*MXa$>Br*edN^OH%K1KD4~BoP2=^zgzO)Mc0VNshkHh2`DrjAq6$$) zy%kVHf}~|TI{qy(?Y@6YcfoisT`aG~7-xcRY4F}|mn03pnCz{akj+(^86Yn((v=Ag z!GKun7eKhsT7`>Ly&3iH-M>sN5?Sjw91egOEM;vDLB7?F*6&cqSA*?ukiEatU+6J@ zZeK|B`jq7mN_F3Z{q^G%xiiZbnb9fn_dK#tA*b3y&}gs_^esv>w!gC|Y3rsNe1pTE zp}^`N+qC9P+6P*t=&01AU>IUL-S7GXq~&?iIn;^_@0})5K{l)#!D4MAU0r06O(2B> zql)}qOJJ>e3_!<#Nv8|Gd$-RQsd%LK=vMf_sYw;lLD2NHulIAmuYMCWrU_kFcQD;B z3b{VN6E~2VMsa#YEj9Z|b`P!9eH}~r=d=1UdYOyz{8IlVZSaTRutLMqXU}^J$^wWJ zyk9&Q9;>onl){O_V)aTxwJ0uEh@n~ZMh@tI5qouNFJ#`qgaoRPE9XBtd|I+HMEa6s z)ey7#km&JuuGRfp6M{L5?l&KlT@7>{+0s6!zb_q9tqilu3zJ;+gk23Hp5qM^PWk(xdNPC{jfxyF{bCJBmG2rFeSSeA27!y?hF8-ED;4%274k(1AN>nr2FGiJS!^MTRR za<9)3PLq9{fI@sU;Qa|Yi8DN|ggl$R>wHJBD7nT5r;pN}3p!nme*iN`0QX_)^;C&> zkI0yum8G1hqSQS&SZZ%zHTa+Wty58+)?-k)M++$2{6MBAN~#$VSnfS3ChQ-$o%|#1T3{IK7{xU!1XFZ z<>f|X=VVF+3csj^*TbN1Bj1!xqq^PG{?r|Ik?v-2lV*EEhwy-Lk4W~C+ZhyNy0l0d z{#)`hrCuH+Zdqq1DOnDiR6{N&bUf6s7l5fBws0FkWG09P#Di?Y0T zN@doJpuCMlv+8=4y|oD5Tv5h@gbx4nxYz*^TB+k25SoOXx))@?GIhQVIL|8p0_9OL z&eE!K_?-nhl=l`I-;r5+?MT}4GU-!Ee&KVNcrUWc{wRh-b!kVy%+7N)SNqCYzoJRt znZ-tk>9D5tB(w!Q`B3Tz6CZZ}hoxFn&#%)iCybUoyG9?#W27OxOyM2PK_>Qo&8y9D z;gxjT#W8T7e0AioZx;$vqzQZ;zz{ij&I@JQKbHzeMu;Cf+8QS=`q&o+DGjM6`=&qB zA#xuo7I1G-tBJ(QQT9b6l)&c;0y8SsGrM?U+>;|*PTb(+iMGPXweS7uvM1rcpwt3F zs+-Rm#wk+x*iRqy6h}o7kGSTB8F-BzFOSigZP#mcoUBk6@}$-!JTSbULzJ;!CUQD; z9bvkZY6N>cd$G~y_||4Ni?y=~kivTA0i=6GBC4#O)CsKA3!UInr@uSi+JR@;Uxvdk z%HZvA#MXTMj!N)?jhGZf2)8Noxc{qnx7c9IYr~p|dG~d4-tfg8lzZK^R2o!T z4&2g)n@^$@M)iAD?;0Z#xq{-P4}n~nm((pY=6p|LBhVo!>bU8`{P$_N6#c6;H%q@T z97RC9o0IAR=Q&}BEukW4>N_Bj9U%E>okqC$;CJE2jTXIQ0i5stn;~0c>QG=H%1YUkf|-U(2mVw^wHM4Aqg(fXA!xv15dNy*ai-8} zFXHw%w9171E~vYgLhxPQhL2fUJNgQ3YXjM$D*Z z{Q+_5tH`lxn?Zm*5)5lMBg)ZI7k{MG$P!$s3b~f6lblC3g5nC3N}HE;C>?`vX2v$4 zhq0i;x;=H~t>QJ5T4fm!PlO4sAtJ@Y*4t8iqz$bwKS8rJGhMD&vO<7eib?Z>#spg^ z2ammIEBa^(9GOD@^QY722*otoA79v$SPcp|(+h-m7r?T(GElBN$1+ZT8t}0=nc1(D z(cPccM#jd#wvz0|ijv9_Xd!_q)X#N`wrzh=7|9$LAx}5#>TCS#NC7I+0kR22qP|B4 z`>5B)DWhul)DI`h4%1-Zz7LJW9t`x%Bdam&phA8b!#bG%RRh&D`H;_7C@E~uiE$2i zIei@MEv;D=KE2;XOOOj%Q);`7QXPAJeRTpyu}yii-tG?(x4&s;PzaQ`o!!e8dMf)D zHCdPvyU2hM1ABAKE`I;8)IVylnT({Mt|P^(sDt5fnJWK7-ry5uMX~{++ggnm<)11h$ZBKoU9>r z)()*t>_MJy?hZi`&ka>ZyoBkbBb#+SMna6Ne9zkv4qUU2235Q~(rhDIYdDd%TUsk5-5xu$pOsoH-!MVceJ_Y=NimspiI5FsOS}U3pj$h8aCgz`%12Jh_PrLpqVefVK0OX~gd{lS~UPF}*rM#(^ z%Uh5zX>-8)7?3Oex(L3;E-o$xoVjcj;V4alHbB?n=l6Jg)d)!UI&Qw7|58nX^cuS; z6C>{N@v+I_&&(l6My5BN!+0hdO$blKdcECSr!Wz=;nG@CQljZ~wkGCtR`b4tM?fGV zl8lPHJyIqcFqqRO@)D&I*NTL-1ipwr8=BrDCU)A+mP}7i!-c!My8*lqz&0trSOm`( zLnOoZS>~d$oHm4Y8L^0yImt6&E&cMWeg-)2ImiD7*Ju{1(qgat`Kt^M?^s&|W4L=l z=0>we5@^g#in&Q^=+dE74_j4mlr1cZmT{A4O@AZVTc$T3%=Ed)>eFFAw{z61c1FyV z7QQMiD3wXwZ_)f_L~@7MsVx+*9vM-GLbASyqJy@ssp z)hN7}&01JXj^=GxX8X(-@E(kzGH<+2_>S6`MV6?Q!YJ|MPe|ZBwU`I38&<`|y5LEf zH>J3_Y1eF+?8ot(W@KMsdvKF&J#d=il{l0}3F=h{fhaQJxVISkiAU%kY@iegvzh5@ zQTyfrdC%~XP;us}KW~DZgyaiyID$#{iuSds?__Xj5wOZAsS~?ZW%P1dN`% zRZ&-Otrne12O;NTsG!q-eC@uIi5CVcoloL?>8llb_J-Uq8(x`|E0tVQf6JuvXBAA@ zadHO)2ObI_ux2+0!ACGPqHBAdV|IzFJBN$Bq@p3MZnVKq# zE6cG;J}(_V1qMI~V!j0(p8?();IA_$#)6AhZPGf^{DIU|xXcmOGj2{1QIguU7rqXQx>OajZKXZwN+%G-FZ1ZnP|8VqxZ=EWCPXkQW%IgXw-kCW*f2m@|e+*Q`9u6;28O&2DLi`#9 zA(mxkc&5(zTX!SsnqHlM4eMlkr@)wY*!*%(vo3YclwmVad}88yvm>>7fox=S^zaX( z`p+vZ2;|v7!56!}OcC0K0R-3nC&o(0gCcil^x;;mi??y@rac8b?YR-_?GByJiS8V4 z6H||&7E_$Lk&LFD$9|7+6d*M{w>z!QN+1%-`<&tkC8+E#iaSZTZ2isO)^Da3Pf+7P zK%vl8A5@rBGDg8;9&(}}Oj74Ycf!R@M-0zf+v=G!DH@X=cNJ)w`h8e$u+kypgbhl5 zF9}C^+zgy)4%F4&jQ6chS5P-LZAZU$7DAyceqZ@){MVvW@2S+45a{Lqn>7?g^*zpw z#J!H2667L=h0N!r&!Z?L0zcs}Fzgh7IocbGAq zzivm1K2bT?S#$9l)Z~SY@u;%X*L&Z5e*QVvOf4Ftw!J~Y29$p17w3)(kpcB>9)sxb zN*+JwH4eh^r?lLZ@%$U7qj&T~>|H^OF3)EoT(h5+iGo{ux#7d-kz8N3BDL98y`MJ8bal3`@0=)D{bPpk;fpx2>H;La^)f8v41R4 zRLM`7T1M3S%l&r35X|%4ZQTmq(D2OJsTpvBP1tIOS0}xq$AFUfr6g0&IlWajGHhfq z?ck2g-+V{e4fyWW$?*P9{=f|l+|teT{?1L`VQ+SJe3qR{QE9-*^uZ&G@dxKE1sPXP zn?rAMp{QtyOe(hnDs4Um!Cxha2uB+x=#WV6L!{L5J{*EDENV$^Dhmn;qiy`9Z+17X(slE-?;nCrQ=ma-c_Z9zxPgOJE zUHS;*1}zWt5v37Mt)QGT4IP4D=@>c*%`98_e7=;&O)5deLE#JD&F$mxys{4&%tNr$ zuR{}3l_)xJIY2~kdq!w!$1CrHk5uttsPOkmxh5>rwk$G!+pSZAWTUc=U5+z?T3*AK z+{b8`aTHZK^Cj^{`SC1SOe6G#&iWNPKVIeU#l{mX?h;HJ8Fs`L8aP4c4$GECObt}4 zH02X}Fy`~1E$?+{cp{lQ6P%{qeJ1H4WowW1a~NI7yclj7Xt&kbw!0XF{ufs{q0Be7 z=-wcj8<|`DF0*sQty%XHnenKjVpc)pc>u3W!;^)h6 zR{!7&Y8{d}5kAa&#OmdfKh3QspH00QE4#<&5D*Y%OErE+8>|Ck49&GeK~}dmfcr~8 zKw#26G-Ly?HUUGiP(kzWP<|esIzZZFZ*Q+szpCP=*zw%($ViOc4nW$~{Etc~Y#HS0 zOreee=(WC0YtoY$SOOYW0s*vc_7R|rT&Ok$RV^(oZ3+V)`JZW3_4)03pn`%zZ!^Fu z9?;ESt9D#%LkWi;P@kTj3eB>G1CvLf|I#AbV4zkf74i7wE@N&o^o4BMm8l&#kTfR6 z`Jm~^NC>cAd!`7_Cm7b9IsmQX>k5r@(vmCX$X=UfmR(s=jiNK0-Eo>U(CK4hTyJS6 zdAwh$tEL)aLcBn|SrIsG?^Q}pDc6>Hof<~id}2^=a5~(}*VFjPNGNWQ)Lo66NlSFs z073cykze`}=j95}#O4WAMJFUn|45Vn$}-4yhM+XUIn6aBylO>@QQtuaJFNWmS%w#S zTCJ`MR0x-?SI$)QUrSaksFqe$*F>F;{!)))b=ZW1@18cH^wX(4{Cq1dDO_-g=fGb| zu^4NiLlb-Zkw;Pm`U4wGx~%6FYoi!a7S1-k80{-&oX#QN;a0U0t5!0G={<|_9=YipqVLl@_opo`zfXaGpC&jfbSu&$sdlYGr6S=z;Sf}a+ridDcs^$JXyK*a3l zmzO;-rZ@#9e*`(`*a|-MowjCLa|n(J;PrdHu(|cO<#^*)9^@!$>M-`dVcWd1wmIRG z^Ucwzzd~f9>;yXi)SXso;?njEQ-|tKtCzsgN+3N2_^}vY9ZupAeV-ps&Z1xdi~ou$s73m7(w_Dk}x-?>t)~Jx<4WD@^}SYy@J+DQStHq=NrM<*`^j21rhKn zMI|M?SglL6a$Sr;pezYvb=`ih8mNpLv5bwZ!zZx16 za=PAmc5o0?k2TZT|8J`nqT2YX!Y4*DP3JV0M$6U-S7GCf&~}(5 z^)iyTgR2j>wJP}W!Y<9LDd-ziSt=*6lG-H;T*fl~><@4MOS@00oLb4JyvH?HEN_s8AzoLf=;b1k|1tPgGXuIs50pC(;eZrVM z{oq&tsZ$|@#{GUypUdA?NPK#)w+atQx}{}S9S#J`usVpv(Okp&k1@BI_R7t> zW7$Xs1;F13*?otZX+mBJUuW)z+*Bj4?nxEtev^z; z`cWenTuyH%dm0P~f^7DLs~$}Fyl(Npp%&k9X>D|K)CFPsUv&4-%8&VIE{vyma?9)) z6#N`b(Lg7x`Aae45XG;UQ+43F?tSm7tL6*&wUsIJ-? zsee*-_Bg$IRi}+vz6j}@2%+*kG$mii2uF(o6<$Nx+$p%;Sw!{vy=FOoVJ^swlM~aw zdjo0US1E+KOC(ym+^T-*cMWvVyTpwPzy|^2G-U}Z7w9um z+*|(W$$>7rCf*(E8h)`vo{N{Fi~-1@I3#CDuqkn)p}cIT^Sg^}e*1+6hd(#h=Q)~G z6cm{5nddp~$iV*Abb1D?p3q6r^n6_a`IX7dYZjK&#{5U4EmDDr8{TiclO29qq(Js4 z30x+zGcz*`D(PIc5CD|f6(r@b(J>1qIgbPM`dnH?85#G6lIQ?J%PbAIs;cThJh|t? z%}Gy>G{suI{y=x0o!LR`5r!O;LiBUTHk@wYJ_JwxD641>1HaD8I6-8Pp@fL&zp8UL z+XxD9=tceRaC7d?9^?*J^8th@AovEH4B*KENDWj>J0$loSl%1rSUpyv_P1>8rf54^y(9@&Gk5*-@jE^kTynCi@ai{q2#|C%S9F#GGKkoDD?;D)f#*e>& z57b(P;mNOM6z!siTE;d}cn+EG6T;3Y3pq!B#rbmwKKn7=$aNqk4*qF!Ft)X20p@u<&6lPlMXL#$SqTqNd2*h(HrJ3H4wuFZZza$`9+ z0^S+$eqf&moL6zgwYrts#J6t*`Cno@SIspHL|MNrnN zK3|Mi|8XXj^`Wv1>PDk;m#)L;pQO9Yc>Y9AkfCdM{_Gjo#(p;DT~t;!w6KuwOjVwU z8`}@Olsp8 zfpa1CGPvg5rJ&^yDEj3UIx%jT0zqvM%BZh4vNs~FtW*ptZXc6ek{v#-=5i<+nVhWF zOGpnAz2ut?uyzn!6626aTQF_>^zZ4|U*K;q@Km*KX*KMN4a$4z2=i4cQR@4YS!~ z$;rt9hTg!`A@GaGx4D-XT>^1nUZ1YNf}dFt2vHk6;83Ys!M&X;Yq_0BB60g>HE^T(sm3d z(#+aLCyeu(C02N!!H21s5b`Ib+=N7db7xRMX06ZAdbBm0bVTlAr$A_i#@I-9bJe)5 zvJC}>OJ8&gOy{DbqkV7wk_vwQj@NfETROSY>bknJ0`NvQu5wF^R}C1{mPC9sOu<6F z#(#JCbErSNPP8&u=w*A3o9dB3S0ba8RqE^Os>334U0v?CZ`T(ByzlB?+FBy^_R?9E zE7CS3iS#UbBdWGB0}i`fVu(II&1Co=y6w&ECKrV8;0=Ipe`3eNz9`ZIWv|!v+-Ig* zL(H`XmQ7GH{c9X5c2PS{!=HJ>l}*jfU<}o4;cF>*jVk?4_>79ChN7Y(NCOaE54vPC zsP_Bs#VmhoSdtr#6f9fFxjS}9TS6KBPEv;@f;7R?(k6pw<$SGvoEu)2_I27}?Cof3 z)?pF`uV?w!Z*ya@2m30S-uMTNuel`>et2(G8TgORb5%@6jv604yDl%I|0evviN79G zA~PLQF*nt*-%EruL@>9!JWb=W+4E60Nlm{AVr;t?gAvzRpebSK+6gW*qY!Ti`2CAb zs^_bB_s=VW=|xT@6Iu7T{*E|*QOSYHq`9$gK~&;fDqSb}&~H!_ks)Y=@R{5j*R%wT zGjj!q$;+(RKaFPkPm4d@gD5>!gdaWsP88DE-w4&LyN)ou z`LUs&Q`XQhE5Y0bb2mJVO-@b*gqk*1z^nfm;f-cM1iAgVU3L^V(OswVq-c}MoDo*n z=gjb_t>7Eo?tmJOriPc77f9pZ>94cA$K^(Q>Y`P~MwT>G$eBcR)d1N11lM26Ww}&l z_d||s2;ik+vRw$lZnTA?ccL@jwF!O zqX7LoVQ2djxwOhZbdUuhP3>WsX5Nk@J@CB)k{>sxDyP>i&cESH!hvq|A0;>DyUZ=y0YGv_M}j=Ngaf#hfiuxxE?m7Py+=U(1ysaVTwSMx4#e7 zsz5euN`@!rW^eCW_m$%fH2g9~gL*}{B=xKRYDPBqo}=*br4NE}{?TZ3UeqOcp?};| zgI^p9`I&FZi2jAJm3%Yat>p-f@Fpc^t@%JE3^%RD$DW8|3|ANKS!q@ND9_SzPm5gX zFOC_WB_x<-^P{@vG!}x4eki8Ls;94?URb!@`Fstjm(Sw1902fBn^KB}(_Nuct4F~v z5=*<6XKMNNopE^QC>mTAYjug4?U#>hg~8e^!8+z>J$GBMDph(`R`xM~dPYT!gChzP z7pI~+r8=!1S}_6SAr{v54o@-mws-L;4ycKoPd>P~1iYvE0On}M?gayTBEUKR{Aq0o zN12jowhJ7h%Hm!c1OZBJ@yBx+uL_d}nb$S^P8MtFBqRcl=E{ZrXz-(fO>4lziC}{L`BG(NB@P83q6z6l zbE*Mc60y2#CVkI3n$5aHfCMGXz##WhdU0_9T;jnV-!$Uw!yr66D{HFOUX9B&$^H^K z?{Xyn>HTCu9(jw)qVJnp8@p9Tgg&>+daZ_-=0?OX6tN-K^G8ony3@kABW+$-kANivsPtkDzr$q zS0j}C-_c4TQFP6vY}*W2*Oh$BP)A;c&)gerIV}1dzk-F48c}ow<}{V|VRHHWAoV zbcyX9Zn|@?dAkQbGR=jnG@TJDa1I$%QV{kL`y6`R8F z-Mfkh7Af39`S_4XRbUR~@0UMq1DFb00^*nr)@y+G-G+iRX_-P0QQrFwpY9hxZ-`3Z zQzkYPm@#zO+n7pVvhed0VPli>04}7z1$w|hx#avSQS@>snt;iT|G&Yo6K)$;#=@8` z*=DRO1A99qHD~jsOgYjRXMP__sTUJ`m(2yP;4S2(b*Y4p0(<-D7GSa(%~y)Tq@`#v zHTq3*iKsmq+_S5>))c@o&?s^=-R*aesL`XXD2UMLt=u^-2c|M9mjCFD$6O!$+Wb%< zsPoa2+YaT?Iv>?3<7D<=&F>wOX+S7Uyw9`MJ%PguP6rvS^0S^TBy{)2zbhi{5Jg`V z1}9hgC%hE4yJMnPcT5Kb{jS+LTJTdeJo)+N?cHy#H=0UNXn|m^ySYse`_G(6WP^gw ziJ%l5%#C_ZlVlia@vBM7_s2H93937?okUeZ3Fu1#VJq0Pv_w2PulNSQFXP$;)90x< zTcnEH2Oy`lQrYw02b^+OJ&BKf_A$oS6nU8oUG&)4U&IJPK6H=C-T%z}5w?)0bdj3F zt{sn-ZuAfTt3lf0OKEGJ(iYH%R;MTIoAh~Kx~%;S;) zr11$h1I<(wm2U8 zy*)QYm?|YSDc#_ZjbGY}-t=$ZdIM9>Nztn~yuP1xb@zadW_x@4Myy_-Ty#wS?F$v( zKb`frY8#-nrv7%=g5&d^>o94!o!%@Bg_r^fRJ0{6BQ1KPyBN?tY$2gw{;%99>OP}< zyh)3e6*?$rTrj^wEV{b%iBd&^25J1~k(@H-k4H}a%d8tQ*zzEN3;^~k02)JnH-C-% z{hW{HSiJs&(E^l-Vqp7TTh)9eU+{rYto!7?D9!bWij3;wvEzm?MmDB^upbzp%FXQ^C z`W0-c1G#eA`VVes&~K$~3K5qA<-=c`V{3GrXffs9La7E`Ul40-)xIK~tLF~)V6&`Q z)9MZHq|#C#_xPCq1+_czrdl%NMn`;h9W0gO%24)4*blF7JJ!)f^IxPNnyFJP9?Xny z*=U+xbtTr^WgSC6Bfr(8DyQq=j<-_oUYJP0azO7U9|>V49p}xDGLD3Cnq!N#I{1EHo9=A?#}+s@Z0c0#Y}W$ z$xdG6jpT=21wxX~{P;Sd11E=?Z!fwI4QquB86zOb-GU`w)^zCcpYD%q08|J83bonz!fI#w z@0ho{-=75tHewr#BIYIl_k4e>LR)s9#l^!}r(^ORU?p`3Fk8+ofH6T^ZnY8M8EDes zGe1166bad2fzKO2iGD@|=m9Vh?rq*Nnc(l=zXN)9M(^GY^z|KJwEX%7NE1E4E>P5F z0ok$0W;>V8M7Q%#D;?n`UPI8%s>uMgt%fH-cU=2oW6+d(lE z?r4j}nYZGoU|-6;GdDO_v#q~y?9W=Il9;=M0UO;D&B2Q#B64lA8OQXQEGYyVHD%TK z?iozN^bIXA8iIispXQB}C{cxHy!%~`>3vcT5~smcwp+@x2e~PG54imgw&{Etdc~(O z$VxF?=Z|1bQVDxtl3n5)!Cc zZv>X{WJ7}LYOB|U#rL-QKhfryv0#WYAg9tM_^!CA9}JX(*4EZI5|8J=gl*&b$8NI` zslca2fQzZeIuDe|z}plQY{sb>8&iF%0F)|#AslcDvvYF;H+xW+B>?L76QWbE1fb1y z8xPUe(b-f0MumV6BO5C#>kbM8*vm47d3Vt{kCxV<`)vlNOHY}E{)#*g{{^3~ME!~j z_+s6Y1MPaj7n0|AUu%39TNFQp{e`jy{_FSjcTGze@vh}|ny-4mJ*VmPrT)Q#;I?c9 z_=Q|S>hW&4iEbfZ;;?pgv!FQ;j9O#|H--Uc$!|L7@qu=&n9W8I%b!ncw3pz_)9QNtwtIwTmM9CPmWk$;T<3g64vmvpT;Tnejnz3>yj@ zvs4FHeyT2vA_E1?$JvvDz@Tf5oO$Ah?G$xw%1g%w?aqFtfwFZdX0sj}=5kMcrtK1D~!lu%WW@@)&`11Zbgvd|@0Z zuYB22X>LFWm`(o&m)$8K>(uJ#hlh_(TQvQ%p`l?$XC3ArPQ(D5K91ZzM&Lxa`J_s< zVFGbmbT&XnF*gXVrgdAeHz1P7yMOI12<-wlJ`T_Vm$*jCp%PwD2FzK4|0Rx2Xr7pot<#X7a+PnO7Su2-3+doq9CN^I7uM!d}!6=Iz;2cfE<;*J8kwq5Gl@tVd-&&w~NMwr-{iGy#mnZX&!K9e&`U0g> z`ZY?J7rwMOZg$*x{|s{KhdxA(Up8E_W}0@`(YS2dJ%iu7F8n&8P$*$&I~Nm|$bHla zYx1!?njV^-4KB!PHbzLWAku5VLz$vXKZ{6D2!l3Md5e$qv~TzRGy9=)3_0MBDRhDN2}H4 zMsgK73S3;UE^3^5xq+cLXfK3lVCT_%Rg%E@&DHrDC~ z3yEmMY{+wYi4edXGfedR`B*uW$W2Lclo$;51aMhiwEzsHa1U8@1{0>Jrp7NQ=!g$R zixvXzj{Wg(ufAzluamh~3>F@Te1x`uVi-PXwg<9UD2-LI`!(4&zKE#Y@=n3>xh zV*7);pe;=gg5S}8&(0aN6gI4djg#EWbuZlo)(jH(R1!0d4U(s!h@L_9OLFt{b3RE} z<~ClUAHl6`c-i7rTrABO2Le5X#>FWne#YWEn;!aa0L=?||I5zlL~Se9;kFOVEEV~Q zH+Q^uWbln0P@eg9?XSP8p%`$I@(b<$gR?c13s^GuB$FQaal0G%Z4Ow*G~XSrrG_kQ zcwMpSXLW&3X9(m5?s|fA*NLK2qvXE@8Qzc75uqaO8svYbfekr&?BhwL#qAjek8sAX zWfaG?6h{2nSkg?bzG@3gDWI?9aiym1cM>EG3`oO@Bfkm~nXqtg@gaoa7HKjAg5G|3 zKwNzW0akFeMe`f&zNA8Wo(EcO=J+pulE`FyTP0X;e> zH1`F~f;4{%D^e^uUH*h4*sAz#a*7#;9CY`1DKE;)Hk%9r@6Uq(iygB@YhRCyuc+rO z14kElKJJEE>hd{2HYCiKRaTs~<@3KpaoDTzSeaObn-8Rs!&O`0*WF$fd{I=AIE9$t zL<-2KZ}B?jv^-WOjhl#H+(>`_jwFdYeeE{Pg);TAP)<Q~r#U1bO=I>t z*}1EKPPks)<~^w%f38DeQy{~OJA{V4_{PuXf(vb8iiRd$N=`}4{el6g)hDr8VN__) zKB)R@WhEORvk{QWP4pEN78Gq8HsdjUXT6VQ=uvg6kW-WM6say8-itxgrPXGy4{?K9romo`^lRF}>8 zJSit4`%^jiWwom>OTuK#p%OiT+D0s^ya=D-!f3A$=EgUQ2FhX3rVB$UO5jV*Gw;9}=W_Gber8 zN^?knRGQ)^ket+A$5V`u^)rD+0eL6^TySBF4l5(#iE2|>k7h8RT9{{Ao7)5-rBc?@#0YT`Eu*sI1_~g4vW!II>-Sq#eIRdpEF#*a#zXkyN%{#Iv-y} ztfQuMZc`EY%5dYOMe(5)eXdnw>$vC7wh|v6*eh;jR#5@pqb!wM)#W8sp2_AWS+%>n zm0-*6Ei!bq>nN+7|F5X9NBy+`$qP%%P*m5xIG7qSkTk}ukmjCkT)hKCSl`x-}=CBe0_brM7++;m|6bzfe8uu+zvE_{v$-? zs{)vgkGcL$fTYykh1s_a&{XqVW%KR17dEp?!mKGfexXk0c$uex@{PYT!KKnWMlL&L zA=DHsdpX26&*#;DW@U>v--bpK+WnHV%Nrx@jn_GuokEN>59V3N;2+NK(4Qo(oO%X- zb`O(UL-a!sziUw3nSb{W-=iE3%u%G3k;c7KYaQijBDjR|K68YA-ky_s4)c5qV$!eV zYqGU5n9UEaqpb+oo@?p_BV6kuIN%)z`;d$e76UI{S^lceIt=@VF)91iDKov=gI6u=!87YP)|5~zb)BnF+91es?N?xdms|< ztHH*mB*hMwiWRw`BlWmmPbMllsQLk3>_BS!=Hrkf0zKnu6aO}!wg~4<> z;6)GzKR^F!Pjp})c&%BXS9w@&rq9=vx7J!L!M(t zcB?L>+e7^W0iFzJV0LP%`TpWhlWVTt@;Sf(J9|ixk&y+Xp3fF=&1~{o*G48-oR6Px zD(G-R`qSg1<+^FY)pkbSB5W<)H8kN`E29~GO%-g#EQJj8TOUXwvwUCr4pB{0Yqx40 zhlQ=#Rx4=3eZZ!Z6s&Agz}%dTu10T74PFWzEE z3vzWUGY>fF(*`)w&G8boI%0|0H_H0A5)B5B28DPQMgIZ~o72lU)| z-tV<>wYTYA4LGHDLsYK`a-CR{Xj}~FzBd0zKI>x+tVYG7>2NdgYPi#dDpJ_5NLXV= z9B|T{n|q1JM+789@RN)H#pNB?U(()$Jr@o1w)gM98#EAPS8%ul_#Y#H&|iJ7xLe&# z4V38tEXKxV@(*lEfg*@Bvi1sB5~Z3xKs$40X6EK+&cQ+pNlb>2hq~KKIy&SSBbN|ZTbw0e5Toa0lxP*5QR`Q^1Sf2>sR5ssB8&2iP@#=;+dfm@lbXAIs}tvM3Y!*_85fi0a{?jF zg_{_*^>lq*0%?jfgS&Lvwy_Y7!|wR8MC|qxcFGg^Sv*0GBoEJi+Tgzs0+A)SGJ?e% z8HB-XjCf!7z^IwQqd2DZoOccC_s!44w{ki}Dh`$wX&4%M5<_f_ng_;%AG-vXRNvbQ zpi^h(K)4bl98S&pf2)~W)eF3i(fe)w3pHvJ3{9@su0;dPM}r6KR_O1&3fwg3Xn0Gc zk2UKTjPf$R6Da#bw|UR(SelT0W+Y+NxVL!xA}3VbiDi*OQp+hKa&@dBJq~V0OE= zeRXdvnU1GixrAUukans9f;rM}j8UU#GQq7sAi6Z_9-X!Q|~oaA^*K_{fN=D-t0 zM`vDBn829sv-x}Vg?2ulqLkcc{Oz{!5t0- z__Tmy1Olzzue~d1_>#W9ROTne3wHHR1?*jZ19smtMu!+p-xP7!oc~{$@Dd7)bLe}( zIG*7%1L$cdIT@P>=MXCGt6UF#G^NvmU2i*km4%tuiTzzLRI7h_jyJ!rSaOXYHHx*m zT0m16*EkOKI#ZB4axcU3mys>RRqaRI%MWumFLuwB{bwgM6~3a~;pYuIQ(WbJt;ws& zYpx-EDp0Cjgab!6BM7`x++ISfYipkwH`G!j2`GcW2@euviAh{2 zuLTl|herw(qXpMK+fD4&Oj)ldD-m@4TW2<|~F>sw+6DqyG)ILQFF(Of}8ZI?Jr$mV_W1G(k zW@Wr&4y~ygMg}ZTwkkaD4Tm{S7mmo^UHU6oVirtpstyri`>HTn4Xmb$6umCe4n12Qm3WWc=6v_91H6*NqKVDTof z>K+qnd(l+!cmKOr=wN~!3)&vb$Pbs)+U1UNml6AN5nhY);8|@$cklDU{xVi2-Bl5f z`r9>?mRA+WX?LlMySDd5Y~i+@RZ?jspNokR&!g8&<+tDnD!D5*m& zBP&$?qqp_j^2zR?@1HuC#q}4ysfs<0q|z>fCQ(|;XlmB-HVQisBm*0BXUoOIr^lnC z6sF3Sj@j_HId$T$Q!Mle3KSU$I-EvP8g8zF<6PbkcOKzVPwxd-TIpp-D`@PAK%25Ev@b1~3EC$_D{+Pht+7a@EnbJ2`a33mw znurnxgy!F8;UbTX`Yyk-J1D52GVq_10Z6(XOY`C@&xZ$tHBG*gdetF^iU3C}VWWf^ zMPx`Rc#CXozRFByUTVEB1Vg#DPDLQ0EsnMC zY+v`3EQ2kUn!*Nkcc9;aL9P)%l!#9vzlV8CL=2V0#a-dGpF3LHihmaZL{#)ZK^z&0 zCRE`_Dm!WDoy7jnTf;%)!tF)5i6Ubes~|hbbtJ8%Gz@6Djt6J}RKZk!fz<;cqc2qN zuX*p`ac%5-&kY*YA3uJij$sF2Y%qBS@b$83n-EihpRI2A|Gw%)1(hMJZKoAqzn&Z& zE%8;>_7<(0b6lAnuXO+Kr2rjJ_xP8kT4mt+=?tT_WhW9KhRwuXi3-< zw^ZFzr8D!T$GI#Fe0~Mpn{TaI659LcZSj`XIRb10h){`z<$Zgqu>FR zip&#tzkhbp7y44P6|{gCP9HxW_mn=JOTT)0if)Sz{<`*sPFnqYh|kt_aG2dgPr(Iq ztKoImFbOq#czRaq)$hd1lCuX8s)$^#0n+u#>Z)~GNCMei-2Xni?CFent)QS)uH*j{ zU#F+0fW%JurEsF2;KvFVGPK?u^5>kGR6EXS3@gY#&xVJM6Fy8?hIML;mV zXBzxEz4K(k_vc3}3GWE9*^~Phz&ebKjKGVFeZzQt82;aDv0aHQe4T9OHNM~FXaF9E z(3iT&mT`u9RAW2{{yYGtZr>G3ir!!BUy71Bcl{eU2BEhPeXOnImzS5LeR925d5maT zi%T9kz-fJ|R09C5czAhvR|uNA_y6q>VgKa+E0!zB1As% z@Y4QhE{__6xMJvxEEi-JD`y5s8v-^{g(~LUO8L|V=S=hXn&D- z`-`h3^#j`8_eKvZiZg`KQ&384lxkx9@POCqK)AjxrKdjzTou19D=MilEJ`zN91`4* zEbQ#y5NjwY$!pFSgJ8hwV7ASP;dPgnmjh&!CrG@sUdn*a0hp9~Fj}3Ro}SM+%L;dXzHgHBVB0g( zH}bfNZ=u}=8CCHTN4vPVfIXigRPSh?Tk|IBUg7i_2XwI}Ge312M*R#sN(>gwA4K>dk9_&fwq!0*7o{i+7wkyWxq zz$XDK#|E04UqJ&VdY`*5Ff{}-b26LhU(#-U3Lv7>Jc;?y-kiX_K+@50rSAV`279B5 z*2>V!T3b}0K`$;jvgjuHZ9U7v)DI8l!bZI2?Z=wmFLwm8WYXy-hz|MW-H;17w|1=} zuoV~AoZ?+NjJ4}Y4AdjDEqAQjkF!et5M9U{4`uKtg1v?+t2i(JwD+avqOoo|)N&@b z+jfzRMF86hSkms#)t9|td*U|`uo`8=#ld`TUw!zrE&M0qpLRW;!wV|}&lnQkgFsA? z6cO*HYp-8Vqz|t`cuByv68-x*HT8GV>*_Bny%fGd3+>;pCKQd=Ha8b>ywg@AX0C>G z(es$@w#LWPFelF_ig#sut(I_5jU#6#5Rp!K#piu{t;MgWlbJ{}6lQ*L205M-W_p!a zK$x?doMwIr6MEz2TVYeaNZX;M$z$oT)qnj0Z#yb8&}tJ#;NEj9(oMrzIV;JsvC|yJ z&-4Prq6ujdK$#@&J8pZCO?S7HmT7f$&Q z1w??~pz8pp66JEw-Q3)CUR~eZXlZLl=JnO=xzsOeopl4`uXt)Gg%9Bw7o;O?Gf_pv z|Ky2oER-ZssE$s^*7p1NwbnSqoe4mSdy^3ZVG&)xcv|rHP)Ef1+m(2d1>Pi-5{?u% zO}|e*IYEbbVM6zBbYm_VH$w~v5YKIzwGJ3=wTUy7RlOxrF&@qm)ohG5?la0|DA4%| zKjeNy|M9@7@a%_Febhk%Vq4WAj?_;BT5tbrqD6(!TvnFSZVcEnZ_}s{AZUiS7Y$W? zZEXHyj)9kCKM<zl<0k|dq^%>cMRY$05`%(4)az_gMRXZw3;37xM48DHhFn@z*ecMto$+?$_{!wD=?qe*32`eG@&aB^70^s8XO$Ng>U~#ZKYsD1hX$j z+1&9dA`euVh^W42f}wO?Oc57X zSD)2rUXx~%Y@nyM+(HYZtvw5jsYJNArv8ot3ICjY@Bz{bw?HT=#{uAzkH~l4+8`UX zrvMsEsB*T~Nq;E0X9;K){^ch01!SOix1A(by3pF6MMdwx_5n7>9L0v2+_nTCV4u}B z9YSxx2-1^#r}I@ClJ_daZllOXk>14}j436pn-}U3_5LV&m>`#uY z&%Xy0Nu|^#x?pCQ#e6xgqOlskNW`s+6cyen@3GN9yqcG!o>E7c>J#ml7R5i=kO}zu z{1Ra@a^gJOaLNtUs^rwXV2<>CHGS+pnN(|LL9J7u=-`y(^<^@@!^CZHY3BV_ZS-$S zzPI|GwC>A7jlO$r_UwXyH_7i4bd`g5Eo!dcc;_B|o;%EgTRD-* zqDihOD2p&q<1>ohi1lXiLvI_tppL3!lArN6HN3N88);o#GKS$Wt&?!)t~{0z^&GQ4 zkJaX@wUgGk9~mT7M=D@8jL7)|E<-6S;#C z2B72^FqfDBK)WhBC;q$U+k>B~VJPq!O_RTW6Da_nj7ql!kIiA;MQ0b6;6X6CTzRLG zDG+>F&}Iu1lLXujgzOiD2)98DVM{-rv#n~mT=)d$A??#%US1Ber<gl31~@38X09Z?y?v*we3n`3a>3M9}jVkE`3X{ z_3kh`Y~0N1yctd7Mw0=!PEp!zn7=0{P6oZeQ}>64p5EL^_e(oAe_r&FqThC{JSW^e zBC3n&o@Y@vom}^KT=%Qk>fcq2cg$S^IR$x)&?;?d`?V1cf2}qj9AG&Qb}rkT+8^kj z@`vN*WQETRy`FBt%9oD5;wt>gXY`@183`{YW~RK)T&>z4bNxUiJE_JoAREKTHCc>U zlcP+#ljsn|w2i$rN8;da>Qs-Gb;lP0J)YmXZfi#cGh8)rwfScl(&ty%lPj?dx*DTc zJi6ipPLA>XVP2{H% z#|qdV95JO%5q`L#7vx%az2)8R@y$?cjr}lXs%Kp+b=X$HSbJuIP8ZZ4?D4p%i*DeG zVU>c`hM?g5rH_=(mr0^UC{emDrOV~cAdL8!g;$88!k=B@@a;<7Am{loh7V=6#xGiM z0$-zeFFW|L8pw2@d-7DGflMDHsPTU^kiEyVa%OiC#9=J?+1QSvc^80<2}s!;0sI_f z`5doag{<<2DNb zs{kI+j=|sv2J_#>hK467%{plPILaozQet3b9UU17(Jl!@f#uW{pF9&hYz}Nh4witW z0onq7gFqC$@6+Q-Bx{EGwKUj$n8{Cy5Kzz-*a46YP&GO1D1V%N+U6I#g?2C8_rS1_ zO62W2pn-H{0&w%PjLEqO5JjQ`vlx07dS>SNR^La^6R2>lF(3)v8bZU9#V&rYMtDIB zIal`m+SaJWje~8|ex@g6hO(eyw{>|A&&*e`M3(NBpP?N-uR@j3WqjhwTH4K$fONn3 zp5V~aFWC-(v;=lRV5Y0~uV1F|(WT>&U%SpDEEQ5)@NBgV?wKe9aUsdP)>xhWmI*!P z!717|;=92Ia4waw)w5TxAvK)k5m>$u<|NA3hneeBrCo33Gh`Gqrq1KyBaz{@>~d~r z4OS{wmZ}(|iF3RtX5|VIh!Tk8iS6P^W642PV`1aUjzBCnVocj8%wxl>Cd5#IWo&0= zc{p1zgNAS#s)mof{RW^j?jkaQADz3nPsqnU&5CttOK~G6M!gnWrh<)z4=~~qrdc=6 z{9M3ke~(#RNfr4s8rMg#lnWNqom&)7bJnj=2T!qOUC8gFJPLXuy4Jh$IgQPkH{*n03;f^AP9(RAT-Ox$N8b*A4;kvUgW5Wkedsx&LBOFnaL2%CqnU^7H~+_a{} z+FzYAIa|nBhaYyS4*Vu^Vg#U{y^|NkaN&i8>GEByHNO3}(I&y*;v63rg47>6H9hNc-dQ=1= z;JQo1`w7TG*h0Lv5_#$8ygh*+t2Ff^3JQ9CexUWbMPF457|xPyU;!ElvVBgiGjLT&zAL+-9jp z>9FA)VCt`bTtlctby)tMHXjyq8{S5gPOkm458N%G-&uVdZ!&gJDPxnEIp7tz3-X43hbhyYGTdt4QcR#j8Sxv%I!XF6d&dSAv<?9xCk&S%Z=rY;n|}`pTQ&G3m~y;=d;!YST9-A zK;Pn3TdgPR5vqF*P-rw z2F#)k@P)9)66LQ?OM3^N$4Z6s5hs-EMGuC~r9?)>Zlke^1{aXz3VBgtiJ3#iy`C4e1Ann@=4UW|AH(JVE z4ZlG1H!XQ{ygQvmK-kl9rMS^I9f}NmSos{5UbD7zo$`3usHmvW(qqGmqyn!Ftx`eD z;WP_;@8yF73`Qf5OmOlO?X;y;L*pe0+0BAdCH;;8N(~t`FfgzJF9qnYCE3r_l|tj8 z)e7^C;7s@qD&-}hs?9gB0ze@^b(B3iEH+l<%UBwpjRUpt$Zp!F`*)i1{LDX*CPEd) z4Ztgd#!?GPjq8jLuSGVstsC+yM`BWJ? zRaPSxtKM>)>wu?s)JA_k@m!eiiXAmq%2MhWANqY8Z9ymY!*MQjV0|SCZmJij46ChP zrKrn>J{YNp^+9{=;;j3zpn|KDirZ0P{I6giKmLyJYX$i>Sj(Xl*knQ1y|~%-O=q2TXtm8gfE$Jas3_#Ak)il% z5-|N?g2A|}{*Fb5ACp{&Z~*+H!%FrC^>DUApSFq<@Q^mny20G)c->_jB9N(Es(AtO zQ2zK1wjnUH5fT<2CNX*-$M{U#hIB}56_42-WnZ{>CI~-96xBzlsGbvCf7v30+qkBo zCuY0{;^rIO^5N`T$Ad6T_2EX=5?ZS13^0p{;XOxryJngD6=5>R!I@wuiwgQ0i*u_^ zk6EXoho5+y8Aci*DrTIIcTn}lMo1w2*?QN}w=l%tZ^BCaV2h_toUs@Jw-;3F#$OF3 zK*Qc^ZWue#1#dTz+9ul=qqMdLv0BU1x7KWe6_T3 zMk&6D>U~GrNN{Pgdj;>Pb!diGVE55Gin0uHKWdAR#mH+3!)M;GH%40;_%hnT{CobHpzequHXEgMDCH zuo%&ma`j+ZC~XP!RR4_3yX<@#BtM)j3M+dBBDK?1MzQ6ws7wlkfYD#GU9u7gM zLyCP=Y;5c4h~U$2n<>M38lEAf5VI7kWMd>#%fY6jiOs1^-^H=nVm}81D}XT*YD&nhc>#&of5LK8Q+e^u!)@D)<61v z(tf9>frR+>K8#KYNwg_n^xlNi=`ET->*oVPv7a}SC>-zJ*4AOJTMt%Xk$mKD4yBS) zi1&}-{VW%f^EHG-4KIS%MFlyLWiZfFPT+ZWe{4rE7y&H3FF|@uveUNrmpcCSNf$Bd zLXh(JdyU{x{crNdCC`f-@)%dC8n&H!&hK7k-oZiURr5DEMRCg^WWsUM)VRqzZcNrOl3 zERYGjf3!^t30WlQl%6P_%$o(x*%up;Oc$dZosa9)!U6GcRkSwe2}Hyg z%IDI5I|i8U<2ii9(~Jg~#K~Cdt@wj+=ARMUyi(&SNmt=GL+wu9l+ZrKIn7W#q3o8-5*pkAbY-)oQRAN2kZg!+Fl$-$p<`KSY{}s>GhK zmOl2pl+BNIksH}!^s0f~ITw8!tq!R-otU)JD5Yrh%SFhG2Y5A_v!Rz{I@_0K4@C4= zxhiyt#p3uNt@q1DRf~$Q6-Ac`*}h`Q4%A=j8Kn`BV@xp$n_l^-Xix|KBxYES=V)qx{{%j+Y{mYjjZ`&}o(b~>W>SAIp z#Et3jP_HWMvj0Nh|6M;wOt9ew`~Lp@%l~m>DFrEtJyG-xLsA95$4e2Bhr(o|ow3|N zp^|4Tz0oAe@$sgW@7MrYSm%YxhwBbBR+B7K(0M(_@g4_sV~2gm5me5lnxY~^UME0m zrt<)lTT;LY*Fkfo(e-b{NW=l4c0iCuZ81|#AG+@-LTXrkXX&uqCVc9Z$iFm-Qh!oBe5$olNH@Yf9hnJpmBSR4_r(}#)nHm@sf zpG-3sgI+k=$i5v=nlnjD&O6*%jC;g2TE5>i&%7Q}@p53`n^TddL?V4Xns_$CnDKcM zErw6PaXJ((*|>Tg>sG;TnrI2vzu9#|q*-&MNi0dzVe1W(b*oBFU`UZ2cCSJD2IPqMgpx$H>OU5wJzJ8c>> zX9!VlZ&}9XbOAXwl;4=K66Unf<}YG`RCp!qSxfHF;J37pUP(`% zwy2Fx%iQEkEVQ5^k{bk%VQ1JEhqg(ON(OH4rn$BwAX>az~!i%Y$NKFyd8Me z@NeB8#9DK7zEyllq<3_~RzLhf^^kzKpxT?BbAs@hNjZc-{M)KUvxn7~ymMytDM!t+ zKaNP}L`Wksb=?cgAei!Tyb3HadAs}&6Cza|>&AXKlJ9!&bW(BxY3{zM8&y79R2;{d zvyV|0=*4{$F!ApbNE(`aw`F7Ttb@hO{7`tswD-poI^*A4&D_F)PGB&JNou5(&}ykq)TP{fSP+`=o*-X z4)>px?k64g0y&w*5a5>LP6=YsiS7o5gq340>o(S~;ouaFn{h5@b>-1qddO+VzZGj` zz_bs;7qKE{e&T4vN4)% zZ20D4{lG>Cs(iPG1MnXYJP!#_7}jg6RMT1f4@pT2%lYp%&A{)aY@_`laYrU4da7`^ z(wdr@l9KS!L(qOK$pPe_$g|R|5~O2B@AcxGj3WTj`jezX#n8Mpjk`JnRl~GpMxT zD`YEsu9R3VEwAgT)}{2%5br;SJTKmrdprP_fZTd8kOfRae1Mm&j^vKBfB}F6JpHGA6!0lP z35%SZ{N-hEr+?8lfC({tR`?eQ^7I$K0J9XvXaF$+98MK-=O^`_fdPfU_7_!(TWH|! z1zf=27O)m6XDV!=$-*m5{$Gk34TI4H!ao^MY7^Qr1Lnbb!%#9)B+rT;Idx&;2hB$x_7%H>A%1pP^Zk1R`>YLg0Ei$kpbMY;o*I7%WTP= zO%eYG{`qfTszM7b|3%|Jkf5jE#L`AJz#m6PlswHr<3#or7ZVd3%Q6W)3sxv( zprd>7zjnrdphQoXBJg@bA;30od8`igP__|#(n848ZeVLMGiR7G5 zYNyd5Yz{-9Jni?I)AVSD@BR0T<3!p9=E;^djJ3aPMlOB@mIbd9dB#n0R|p?3|1cxp z;En!n$C1)QmfX0WAj0!f@{nFI0r3?>&OkL)qG3|yVn(k8+xI_;#ohK!zhfuQ%W8g2 z*8dm}$FB$lj|Iry)YUnUWbl*r{tKugxiRaBBKlu6uo5;=qC=KYRD8~qSRTL<5D-vF z=4>jXKMr~7`yY7s#ZmIimO!D<1__|<0K66TYjZqr_kZMOg6y)cT14mB4zSu>t=K*z z{-xbb4rMBxb?*0ps)Bh+!Ma zZfJ%YwfB*+|7TJSrJrMMIy1*b@|$&Aqg`d<*CViJH>9@YySIY|vu#BJs=hvH&~8qz zpPeGxk>HJcYLy~oZB9;1SfxS5M-l(2+hE)6;B+(rBn4m@-F9b`e46{}ISsjF!F>Z` znQj4RKwPGz%)MrK(kyC_0Oa)DogKZ}oHSrnTUQJGNeN~!QBeGER7CHcZ3TecB7s96 zL{PjHEC09gP%i`g(M{{{=8arX&ys^n?nrwEi^I$8$Qi#A{ZnSEk|mqKM2hG&`1+m+ zGK@-soN8mjd>evlQ{1J_1>6q4>q&&U8Dd&JO27Nu`W*tnAA0R)stv?NOzRBa;9bM2 ziJuMiOVf6iv1mx zssS@mPUL3RCuMSHcEI~- z9daHgwR>&c(Ae0%yE9!@AyQFVx;_7s*K2KW?{C&tq*S4wP#5kLXwKNz9sNzD|K^5# z(kP#V*Ii+0oyBm3@0fGJVOnI3X-f{0(YMILYqE z@>c(+$C~{ZWJxMt6;|{nVa{|bvQOZd(7Vwdok>U~Y~S#qPXhgio&>v*%_V{ohtn-I ziXE}iXuh~tnQ!vIMXtzFBuP64X_5%sjJHUns0$Or4UPPApPKbG$NQaa(HzM-f0(4# zF1Qv_p8gz^gfLu608_7Tmy#X<4*6=P-PKh|wW;V&|Lx|?u{(@)Ya4sJ^pd&hkg=+( zsg0k2;|`o!Pv{*h4uCcWH0$SN0#gifza}SfMacM_%)!X+=4_j~m=zDTJ6AGP1n71H z{oVHq%|M2$^ct0cogGNEN2@+1`an7k4Z^}T2_fxmU)cddyley?y~VMBrBIG;v&naP z@{@5J5!NnRm! z=2&^TysrJ^MhnO}0EM-eJ})JB9_>?1w+?^Az$=F0zP?-YyLLlep?&UpfGM4DxVe`$28Z9>=aW3iF4{s`K5?;xmO&u4BDqP{G?oB+uzkp-;lVAi> z0l*;j&DJW|kJceRDwMKBir>DRA#l0mO~CZPc6Ztab0`0zA-Z9{Hh8yc!l+CAH^%Jk z-By*8?x<6s@^^d6ugZS%uw@<5{%;Tiqi_Ji?=ddwi()ti(yU{Y@11|ZZKPiLa z#w1RBY*o{%Ff)95@2;qD>7Pj||A@K)fJQy#!fu6`x_m$VgqWJhj7mG3m*Vs<4*HUb z@hTB-rCy`RV0kaUz7*|_ijiq^4;nT%OVydEQVrt^Z$N?tes(6LGl+j%3{%6W`{$g7koTMMdZ<_aK0v8icMlDSHG>s`6l~&5DV3VDHC;9 zVO*|8u`+-j0Snn^P_nzBH=zZMPb6ypxC#v=1%}eET-O2g!?C!-r_8;_WB8V|y zVtqsm4hY(Yg(_A8pT)_+Mc?r`Is`^?tj5W`FJX;&&L*t;#@vIwg+(J$=q2@Ayb5b6 z4E3ZkR-~kii5|?+(sAtm!DFo+e5b(c-)#JN$mJAUu4ONXxZbELv-C$-`WPhRI?+bA{aS@*iKxm9lCmOraoQYsz5PH+_JPyI>nMo_J!xEf zNA>X3^ve}Wfw2;td8@%H4R#+pmjcQU#W3xYmW!m21x^@T$RI@8^E9!&hM?DiGvN)} z_d7z*mAsgR9(0W6$QHJsx!r3=-u~CVsqI4ggs%1?p8Y|5>tyIEdHx2H52oW0GvXZ1 znyAnCL@;FYU=Bn%ga5iuIpt&WQcKgM6u(q>F07(=J~$k!pRQ)+=5)rx(r6r%_pu=Z zGdti>VYA?CQb8OMy@Io50Lk-V5vo)<18E$&-k(8(yg)GkfA_agr>P)PU%2498kKQL zbT>t2EtA9`o2wvYEJ3$HunXT~dDBawZZ-P4RuVPL14iS$0TvagPF75X^Mb;+`ia!E zD3WWS1KEc~mFXf%|05h|)QV@Fr^d!zwo7)7uc4Vh0j>gYC-9-aC=jNIu2%qX!{h|v z**~lEnLn{15W9LdNI+uf1>9^f@wPk2KZ9?XtKS7EiMnHoMnIwmT3rCUK}JNhy|>5I z2LXh9kT3-efqe@)^;Upj4cxTuY;`+B;g zE^RZJUi=Wz1I2DCF*w{_ApzBk)i=!5(k8pv8QMQrej%v03Jsz9^IX6rY<0?V!f5R} z>Wfkl*LGawHlrZ1-IE8QiBhmEdT6*&Emj{#eAj*Ph2D=tqeHd@F(;0vz2=_3$voWA zF629uBBrM?xq9%5Du0mu;20*A?+kw9d_kSgK+==bpAT)Xx_L76*^AhZqe~u-C;}^# z-hU({I*}Lm92JzM2^-u0?&A5RKB$*Z@M=?NoAWup7WH%ZvrvrJCU0-6DCU%oyBlez z+hk(q>!fSy8PFw0NKqU#?$>_37eI{Mkchb{Erq%D`>~sDd+B+Urk8`vdA2)E^{tNW zZX{Jp<6A=4=l+oziJA*;XA=8k+=b&_Dz+ji`L+E;!CfE zsNu8>9^r-gZW9(etW9nYr7A}F-~cy9+^}$d8dmXN6;c|4IFek!^eP)_wCBEyQ^MjI zAy)2jr1hnebQw;a`S@e;iPs_aEY@2F$ZvN&WK~G^He%P)%u5|_UC1&g@sk}WOVw9r zw|@a6+WFJ(BJu&2VS2_wB(FkUew{TupP5FFe+;{|V8Uy29;F=yr<4VRTlM`j(StH) zbj82R`ksV}4HG;%Uo3Q=+j2T&$-vf}r~X2Qm+5B~lezUVzFxUyoO@r7qDNJ*%aB;D zGVGRmWo%-QVOJ0n&)$IkQT;e#Eva{_CB22&C*UQq?M8wjPO>^?eI6tEx0&7O%FZf|?O@1XQ% z{X9!oln@q~)ROguI5XCftYa1U()N{~&;S00P~&TgwVeb*d{|W~xVNyRKQkD+%P%T1dvs^N;*^*k@%c-% zQV+}P`Xk00Rycr15=~NyB+5u5tvWXR2UpnpVu^J$!nGEHXU`HF`6NwkmPUm)1`+0& zm(N4(w{u`eL;77_okqNN|Aiz)XP&1+*=n(!^J}xyW06!G`irLK+wb%Wx0Cqqs0rg_ zZxmv^mpg^YA}a8Vl-kPV#w1M|ZZg!lFyhv&hYqvozd`-TxiQ)VSKkjZq+Y^hHVR^Q ziM0Bi;^CxI(eC!R&yT+ijJ_R!h!}YL-ccMk@LfBRa9m5{d(Dbz5+4*;ZKj36NlNBz zD$@Q;ymKXEZPv!MTSsdq6e_6Ic%04}j726@g_;P)PT5ogkAi;}KCG&BxYWwQ0ZWYY zIABQuNpC!S{CkpoG+1z`zF&mSo3IIiq!zHDfV0$DKA2~;Z|lM_7>lh^>d#ghE<1z5 zbj2x09yAw1cSS@*z|TIqxY*6rZG)e5dl>m#uZMnN1wBa@?ca?bX@xY=R^z^W0Ro*` zK+qgO{I!q5F$itD*U>l~caYMUs&xw6pF5unzbv=*O8r1%?EaU9GQ6$+c3GIrJwPb6 zkL)$;uNcvVS)9QaDPPR4J8;v{!#MwHruw~Zx^d(}h37^fA|95d?3*@0!dg0n%a5h! zf(hMsLA8wA@}C$WL2x*`hfY`>z@07166*(Xs)TiZ4RB*we0PP1+OK)Eo-&;B0%@L` z3nPj9d7NRwD$a?^hN~1b#|F`vG+n@5{t;Rl_{V>05?;v#ZHfGJlLfZ|aS)P41BVve z;x$hBT)#Rj7@7NcK)kmhMdB|*aQhuxJZn&#>W)4rn9IkpjhBYC&{io~{0dsu^vV zQLPqz*4mY2iS}*ZLwH=P=t^XAU?Vh_lrPN-Hcp`sC>E`kw7X!sNJ80C6+wt)a;E(^ zNK0Pl#Iu;0ne9chP*GDaQ>rSqJfbsbL$CIKEH1eNyspFD`K)p0@o+jXID4jwRVdt1 z0o5q)1VIQ5z#yyMlxcyu8ZbcV_ra_NK%BO=tZe#BYv&gr#$Lx`C*1(owxv}&76pLG zt}pzaeNBY{;$;k12FVQF`l2w6MM=$6aa+S;?weU^u`zGpBAqW*=^SelSiSr#^t)-h zqDJ*SGx{LUkR$(E{%Gwiw*CdbGOsDbniBO%F4>?u@7hMg(NZF`6S=B2mxCKUsqy9n z&j+&Hy1JSq(IBU6@52But2(5W?)OfjkU9^)qj(IVWJR`Pz~2YXx~1?tG5m|eMWYEt zc`ft^O_(>m^FkpNtX5pgB-bl3J@7PQh$i)9ooi%r0soJxw~UH1Y}bZS8l+?BE&&-N zB&EAST5xD7DFK!4?oR3MMx;BGMp`-rNvT2jE_|N7zx~cHmy3Jdah)B<;eV0Si`5&> zN1t=rxAt1w6Dr+~mMC=X^j3Q9xv#;-IMx6^+4(NZKn}e&nGx^)$22rLxEZGP}8)NL;L2obJVSmehJqy zDq^-J?N`Ljf~3$5|t<&lBgK2o348q*ddEMkZB>i-QU*F zw<0-soY7(@t|B{^gn~!z({ss)E2-*{px1*?sd@ca?n54e(%IL~F_)og=OTSYB1MEy8CH}Gjb4b}CMI;R z#-OZyaRhQGS;OHhet~e>m!V0Nu*4-sU19T;I%Y6tTW z4?h;7?h85)gV#N8@d;0~bf(Q_-NZ~(_yc;O{6a#^On|VLXQ;1l3&1S*(OvuXKLS|* zWkyhN@FL+%hqrgL7pUv)+fKH)*pz6pj&g!c0rKm|`}jhhoqeFvEGQr_KLR;c2OOAd z31l@S?7%94?MfxJ6WOn!W;odHB64fWmQNj&j8;0I3lZFh#6Azp{u-3d8Xre;?Csnh zkdO$4A>q#(BcVGr^NzUQBe&`esXt|0AP@1V*=?PnkZ0FSL-9ho+FIYn3en6TakNCc zN*HE;?2v(lvv=x@Ma$4z%9Q~UWo>M0(#)j zsWe|TKD5=$SGJp&{Cy`cJ(^!#qmU5!Gd}X2NvmFo)I(d=<2^+#7~_oIUXNR#-Ba#! zd;gp=L9$>7!t;AT^A|D#=_ReMM%$U47RRzSfNR~87oYw+V#RW`bLHYsV|%2 z+D~RCTbsb1sbqbvrRlsQi79j|99Fef@VtKg#E0 zXeEnB>S$o&hSt(cmJ1 zH#5M`*XhOazzYU7+l0YId$tcz9p3A2E*OT4lcc0!=QyeG@bgtS z`nQE~5fu(et-9Su%*<^UD@*1P<(VXCe#@zW>Z1m_ITcG3!D#1 z@W()jYSN(O=?!dA1(WM_%}3}j$Y~UtTtB#F>1r#{-I0-E5U_{dcp3QRo2eMvE(U5^ zZcGC!yQ^5lIqxGEs8G*Ez=%>@x##%vERcReF~g&oQ~f;7HnC*hF*Tg}!)NyZKW1Sb z5N7%uX)(d3Wm3Ldq=*x@#DhT<@DqPx?TiN+(Eur+W}>gzal@xiClCk*YaA3r3!vD{ z{Bx~dmjN~&`D(AQ7~rl5JFFti@PV;PnFx|c5I_v1v|-4uUyr5&+UI~y3zy6OK^?#w7r{L+&3CcLEnf%z;h9=_6v) z({s_{@(W+W*zP z@MnZ!tZgXNItC{S;rMw?LUD)(-fK%A37;j;ZRVU`hQ zHahkPdkB#M3#avkMH0u26(IL^exhvAs#DG#)!G&9QF0n6rTW;`O7Pw)pSvMwZI5#=%$;U!>7}{vpAACPk%JnNdED!)vRFYjp+0Uj*m%uqzx!U#ZeO`^{x463 znK{Q7pXBlI*syeBaZ{8NQ#XM(R`t9~Ml8rtOkflz3NH05@O~yP_aMP%$ran4@JQuGcz+A4+ja5LxK57()IPVL+Ok) z;LDJQ3t5h5qZ2T7$~r88u|8n5+!TSV9sO)uGXXWIfoSRn>R5g+z^k!(wEaEZ>T}24 zO*k>AJ|%-N2vEVz_4O6#)mbakSCPQ|*S<)(2jaGcnhyo}|mC9@IAQpBgy$}}}1``0G# z3DXG3f|`!b6S@;a(G_g5*8Lm8RY%Vjohb$U)j$g?n$CEtFHYfczHAbiT9 zZO`F#^dt%sqv0}Ktu?K<*HOs01j(W6!?j-FDRO3&it*`vFPmehDvnh!?zQxY45tnu zla9CWtH@h3XT{i$p?HFKW@@1xjwy1CYFA(BB-5HSGQTkT%mX{!?Ma?i3~D*gccgk zUKZbP0=UVJGNqP;Oh3yTRZZg}+V!!xDmFYOCtfBN(#jr96=e+vt=NlNBU5XCpV0s6nY^bKq^uy_>lH9!aR<y5b9o0pTC_EE z1DXSBNljK$V2ZK;AlGDhUd)57|C|iad7XH|sir0e23*K^ED^SzQ1El|@SNvGi}(p^ zdW3|A`fh-pFQ$2^X6aGKJr#$97t6zn%W(;Rh^2-GzQ+RCb^}vYOP7yS&3oaY5h2?3 zSp5@E$*a(y@PDLUNr zr6$azzelZtWBOlNm|mdp9QcUYzgvwj3oi9deWSkclWihhwvXj&;4sc|t$BI-mm2`` z$mGk#48y*9TEEHu)*wCSkeKd6Q}4ZSsyzvQ$wv^%i%6*`b4~ZJW2G+qX08^+tS3bw zuoHe}Qr(}UC(^o))FJCeSPdNP9 zSO^~OXfEa$pC{8Yc$H=}-($cJcl?fMUe(JMgZnB`x1;c>;`nLQ}cKncnZEUc_) zV9NpMMcpcbhP>VHWlC8B;%Bh0M@2bBIQ4DYGq*t>;>mw1>zRZW=*QaK@W_i!PQHJ= z5~wI*cw#fR{P>H^_ivme)}-fdf5Bi;5{Dt6+w%l53ZO_`OU3|jXgqnfo0uOtcvF>L zs22G-(6*a+tLIIa0mOR?3qZk8OO*?#B)Pb_0IfoRlkL7=FdNIG;hc-1`j-XK#2_@TSI|K=Toid6|-{Bafm(@+KY` zJI8=Qf3;3bX18VMexNsTYEG+=(@>1Y2dbd3hZYW5%NZ#3SkyqRDKRiH!LCEsW;hv= zFfK9SChUuw=ZV`<#jk-O32L?|$-d{s{Ar9yx}||niBsv+R;ibhJucn*|9J4e0tbSw z$*LtF1JNRTX!0<^IQg+bFng(#`rfRO1wEanDET}QX^Z|`W%@*H3)8)c5G5$s-*gxP zU^?EON>})6mw}--cFtW^eex$;h%$EoibzkV%Hza;CyV?Jr;J#=m_P2}-dj(pG6k+S zcYa+G$!{uASU7l)JVCj74)Ds*u~x+YP#))kt#H~y1 z-SPJ+(cdG=3f0Stfxc^NtCpvM8NKZ+-jJe};1*g~r(}3?a* zz*EPyu*^`nkkM2)8M6U39qjb_JDo76 zCia6OQ;WAK{>k$Pj{^1^+fVw**)OF3_@})wXi50(!hV%!KH|chk-CVc$Uf6R82rMM zkN4u>9q}Xo9H&R3^VW%ze=k=9>SlSYXCxD{wafP4;b7@MB$A^)np!oIqm+9x@a2Ef zQnh68>d3bd+gn=|u#V3H(bIyQ*SUqAjs_rJb8?!b{@R-KENegs3Zg~qLS5(MH$DIZin<#dlZCg|p|G@7qseoR<9WKxZ@vklF&O6*XJu2l04lfD1N3o>m3^r`S;} z`Jcv4_t7dq`O*UwG1NqbhPPu>p;FzO;npaBC_+P{7V7_ur)k+g`d;#>^xw(bg-L&Y zjY@$gXL^b($tY2#F3tS*iRXuvlrdA(Zvr=qIV_%mkQ7kU*mDLWbihMD_-?9~f={0g z8F5aRPXr<`!8pNhnvp--BQ`$1XES^OleneshBj6XfcbjuPY?a+pwK-M$sB^P*Jz@? zVn3a`S@#tKS80;flg(_EHT6H66WZS(*hub=zGk<$a(7pS4f_4MY)d9HWY?|k?CX>M z7cHyM8}j@8-}|L`~> zE&%^`Fjot1=jOv8L{JNoY&_KGdV6OF4u^|sq(_6sw8_8PR}biz?L)#9lY6ndj#$jgPCIQazC$~Cenhb|Oco%kqHKQ+~5XGRq} z;+7>MsI^+v;cuUS?8Qy*uX<}A?Xo`?7nLqDkjMY4a6YHf06qltC{xem-USSqnVd@h z>7gx$ny5Kau&RjlP4Ip{WldS9YAsRUtR%Dl)WEo~f>G;Eo9++wLETS~WCUk-YxA&l z5qYYao{^<6RBiSjZG=vVUgKtk&8l2j-(}KqcY-m;W>m+P67EHqTab zEN4o!03Y^^dc~HEvRx-HN4hvqJbXJ^ zW?$`mWx~>d&-qiw!H_9BR(2 z>}t!pchi(=uKH&jGCl;Xy(o^~71OcN{V!i$b590n`5X-7Mj(E~5~KINZZ<*0_qU@E z?{Ux738vLka|xxI7?cw%z+%n}lm4}{_JaDRF^suJ10Q&hJKl5sKP{pXu#ETh9*2Hp zMiIIsTz}$40rTh67cD6OKrE3>$NK+y`D_m`{Oj<%(b2j>(%5+IL7;X=_hlP~At$>H z#>Es*JRWU*)Kb#@*qq>VXW++1wp;~DU*q>Lo*h3!@7TCV&zrcp9;^_-SkN?{B=fJN zmhN%O78#>`g#?8~97K*RwPnm@XfFH6(#s>P-1!_Gl2Q2E-TK2Hhtxs%?xYKlA6cHN zO*b;GN9l;YmXj)5X=qJ-_v*O-9r3ScK0m&z<#;y?LMB*NsN1+mUj9YW7$@#G{*HCL zjH)FZnivPf=lCdls??)r4EuAPce!C}I2U0=fbS8N)#H*ySNA6!8>{hn7;$u)~xn1F6kdsKVDjWY4WQgv|%}dG~JPM&rTP zFJVu=KgpivyCMorGK!}q&iv_{q$KN}l-&R65Hmue#i4#rvfde`xXu~z= zUNg-@-I^!*BjGt>`&M7&AVt^Pxj&3{{qvdT&W&_`OG7XbW1$P8p*EuJHH6pe+j!IE z&z+nk&=(csp}$`%mi&#Be*0mKEX!K!(K9-X5{U`SL-n2;-Eag7J*`SI+`iW$`A3qK z9J)#@ZfMu*wAv~Z3iH0{v+cYZDDkSMF-1a+xuG`=|0^QM&SWn8fxqZiR^XHObp6jN zVm!oi-TMEeo+{>9yjw}V{sBrIV0`=Ct*1BtwM6CgkMmbV54}3cr)tH2s4HFBuj!bX zQFS@vLBtjz^N@rUXjlQL^U;FCpe4~XfH`&Glg zr+SPkycfO$B~#H?s4ig%Qd=d-7ZMLsz@69cjV+B=u%zU87IYg)cWrvTfghFX7xqg2 zv*qmvOPnPYC4JS`wG&KzrY;f$GCW}))yv}4d!biJ;?NNNbTiUN=`UpQRs!Ul*guEw z#!dJjZVc7JsjOUPdj=s%cvFF|Z%jH^*RLn*jpqs^_zRwOcp%tdj@2`5=(U?m2xHtm z;=_@d`TNp?b4}WIT|+^oRwbLmz>w>L?`bS_y&Tn`cfNv*TC0{-sc5*FF(|sr?==;D z*g#we$AR?d=$r@=O4gArU8>YcvCLVMWzS)fujSrkkU05qcl!~8wgNEsJv|Z?8Wt-p zLWgIPJ&?ekv+sKQ1I@02#p8GEV~5NdMt3DT{f8kXC2xP;Td(MdqE`MSZVdwgr%5QI ztitj4+rH>WnA*RE+%F^N#zZ-yx%cX zI&XP*ubJ*~()Zf6`~?;2TLhl+XpY}qMcy3ZM{N;Se}b!W?lLFH>CyV42JRri9nw`e z1MMV#1@lrjLTIJR2=69YWeYYl~!9Ak(J` z@uP^I3!-JA^^a(0%z3*N0r&m6%P?aY5yBF`jquI8=k3i~1WOUUqU@W3*zVuU-5`;> zk!~X4{^}ktunLYE)HZYz8p*$3;|Mn6XD$XVA|Ot7U~)WadG#~lWq=1>_$KY{?EM;c zwIOyi{_^4Id^{)|BH}^Rlyh`u zd83#gQ2IUve*}_~?9#VQc0XFeE8mw-MWL!xq2bjyVZUn7fjY@?RnKF0{Pq4oD5-e1 z)TV_ECloaiI+`WabRRRjfc3h=apm^UzA^~ZLH;11;%C3jOWx%6@g_f06m?}TiUx+@ za}O}H)4p$~F|E%$g#EjJ+yJvY82rHPFJMi)IX15N`qlMtK`<-f_wT0mTQ0Y|)=2wN zSckQKuHs}A5n5r~dTyVFS>C!rP|cS*`IM{Yl>AEofGesL{+y62P^PgF1sJ?Ji1z9z(;^QAm2;oKg(CClOABlcoA&h@6j68WX zt%xO@(8Y2J@nUfjW)~DA#{dCbQsP|_>Oj9jK*0(}Mt_&YOn49Dp7`~SOU@o4g{Mjj z!X53i zoZL+Q4nNhh8L*3mwtEFPoA$mg|Ftom=zY9sEp|UDC%Z)VldOlk>qCEzHi!bq7pS*bstfe?hQi59l>5+&6mfKo{u#DHd1r-uEwN< zkVGEbqYxp{4LK$>BhF%HD+DqSQeL5CU3g(1>1Yu8lz9cJ?fJ7g64e^r)>6d|7NC2t zN=#m?jVC8q-ix~LJff0rxVuM0W1(SX5uI?~dL!26=Qo+Ik$~CA7C>{)#+XB|6*i1a zNY|DpR;*rvo*x`z;YN>+&L}3KxXh4mtJrwNG;-g{U6-!>2w&N?u{CQ4zA4XC$G!9I z+vq5K`LcDVT_}PFeW|}8zLK;xobX2S$j!x{ajIXWtKH}jvan?yWfm&gkfh=#71dZl zOZD~;)02V%b@-PzJ?+H8GxCHegKYR)RL#)7?iPFxB&co5I+w zvg00_OxL}gL^9UBdpS4*3uPf0MRwoU@sc;2h-sIAaxXM4GN-CAIzYxotBm3Ma$Glt zS7)%QSka4^NinA#c8WI_3vw?pn4e$czAc>KUT=scyoqJAi#d}_G5b7h@hlKeb(E6o z_a6`HpZ5IP3e>l9_{I z1ECqfPGfxb>;-_qr}M)Q$3?2aom+G=usxVz)2Xei-KAW_KfolrPD)4s>l~!0(Ylnx zZ($MCI5~f9s!Bv}KAHK1}SRL?LtSB$tCt-eQVO?E7@-^lS&L6A7-Uxj=3cF(ytKS?VKh z44=187S-~vUkhX2F$iw)=6}T(bnhOurMOZWV*prjcIETCjP!WPqnY!lcjy;^ z1{`A}Bk4R=_({L(1$V!ICB7AQljD$3Pg?jLJU1*1wXg35ySTXc&G&R)Ux?Sz??$V( zRBPC@;-yZC{n$pcWq1R$9d7^Ua!W+!t1S1zokf zm(?=75yNtE?%1a+=b@ZCa)xk|ws>Rcx2Vdm;t|&ps3fm*p77Q{@pFu}SKk~LId0>5 z626k=PTHmGVrzDJjPkg;2Lq+8@AelyAs|jk4nk1-;)O_x7wb+t zUP*OlUk&woV}iy^Fcer3T`$7&?lplPZo+*2x9e}cQ6bxfU(7lZs%G1>v5Mb_MiG7# z7a!5CFml5rdnNj_-6s}WWb7e+&nH(DHA93?W&+F5LzO4ARqeR9|Na8zXUuNkKsln^ zCYTRNL6L#`egCxkH=214VtW{Vy!_24Q;|u5woinq0Xmtjv1NKSYxC_Vfm{wBiHM}T zKW%4JkkPel-a)wHX8O=^Y0|SU>yPlP><@08FP^G4n3cwHz3Pl`gCsSBE-`zrpN;s~ zL>ZJUj(9y3@fExI2!%ty?v_*vEoUw6F)nu1M}v+QSEd`1;#CFfRE9zwm2T6+a5l~c zjzGJ78T4=|jxT;xq~bBjkMO`vB$FgG+&h23}LM+nYy%?x>_|Bb0&D-3uplST18oD9&sghJOr^pFhEV_u0>ipF)IY5#sRP=f!yY)qc;-K{$h5 z#>n{3@sBUyCYI11VlsP}@Tcuqo?5FH<=2-SX4ji!vMG1+J!gh6$&{=umAgKQ7~+7| zlMko!oa!?AUOPyql5NAA2@@*XM?EQ@) z-am7Y*E>H*gyWn@h}+MF1Ny@Tu&Hv4p+b87#~-qP7IMVRAMsXR^mTfRkKZ7{*IAY7 z#pi}|c~PUs)zVIfaEs%OsNn0n3c6=)pOv6-rP0-_PYOe{0y?v}MT1;^?#tjCrqY$2 z;I`Jq|D2?(kreoB3p4OrC~}C&qTjPq^ZVo5B<^c)i05`2-nu5GN{Z!Od0X4R8hZ{? zMv3nAWA)2MLpLO8B=E|?@=42xc(=9Ho&VC=Tp>2)JpA+b$Ey8Ga*yBobIyn>E919( zCxZEP&|>+nu||^$*Z#7(^6V9AK#iu*?@DFu|Aldg8J@Jf2qA0Wda-q}y2sq_K`@*D z6L}6opDg8B^X+9-wk~Z`8ZCn*EL)8w!E@Ml9s(Me!0EX1UWa_2gG5C|S;A6a+NLm| zswb@6&-RkOC~fudSBB+{D6y<^?i+FvtY1oMBVY~XJh9-?X*uH}cri&6D-%-m+8ARhk3gd@CuU;qMI??}OeLn`jie6>Z4b)v0No z;q&<+n9O~w6f3scQyIfDz<-=TZocRd8iF`P?(M(D$y}b}{Pt`CGQ=ssj&;B1yKb%6 z@3@@Gg%Wk_ci(v==}xZF#Vg4;Nm%K&zXCJKD3CfP-j&%M@>8I6QFVTzQ#h zPL$V;J|;!Lnc$y?Tws<)F~pz!`ht~ot(E-yiBVzVbq6Fwm{2%X``MaN?M}V+-e@yy zwL9;%;+#DTa8LEIOEZsW#8W3TEn&JX2aD}$WrTc3o6)Zw*8Qc|Oz%y;jFJ@y5u}K- zpyws^pWmErUVepUd-?)L!Gf7AU;|T1;e2ER)1?GtUSMRNE*9+&lY7Ma0CRiGc3c6_ z(uEuU9zlJCyV&TR7D@*Z6Dtkf>?eET5#ReYt`?KwnuL$BY>FR^mYUbG^z5V4SSFgs z;Ke7-CjsG?(3yH@ik05n;n+<|FNM!N2qy1t#~d_P5gR1mzZ`OswM(~mLG<>w3#h2M z_CV!SwYz&W)h@?GM4NA~I=T`vk5d=><~lL__g7)n+LxuwD(~LF=^k0=8?(u^-p~m& z`3fHg`?tE1&1PmFIv^Br?wDKJr;yaMVp!ap1!v$g!Pb5G4z_+;u?)^P^3HcW={FEd zxB0yEjUfLoH|`OtZOK%rB`4nh6f88Q=gZwY*YDM zRwr#!y*FOqTd3EGKr_NFF@}dR{+mXJfxU+6LY|Pa3jtRI`S<>rGJm@T0>|P zFQK!#DZdfGUgXK-Pi%b89v^&mvm!T+t#P2rrP7trNVqV?HqadUYNEZ`dA`PzHhDyf zZm9Lo8_8`HUhyH!(ONl*1|GNF+Zb`~wjhD5wARUu0YqBy2|fl5%;NVmoa60c-~izX z0*9EWsHpYO@+biGQKM@cS|BvhZm9uZugk&hdiLI<*7JF6Xr8y8ex6Ytdjz?H*xp>F zTg%LzY0fcn`fbc742xY(lxcSVpL94Lv}i9I!!XsA4>4VN$x>ZyaXQAU-Tb-vdP>++ z*d}5Qh9jknFjZ;;eltLt-n$OGKcwaIEX2CKn?RT&WBjZ0Q9c%j1dqM#{*fd}|GEE) z_dWIHORxRslN(xg$YdsUTcTES?#66}7cxHHt=fNSVhO?%G zy|EM@Do@myxgSNnX@{gRuxAR!z0LB4={GQtzZK`eFl4?%I8We=5170YS;Y48?!ei* zrMLyeL~c@xl3#}=ztH3TNW(wJ*DRn>ijBOHO*U9(iZ2kOl4C_*k$mIz=+2{*=;~R( zP{`_w-}ZA7PbQ?_6C_T$7_G`1xTq>3HXDl^c+YdFX{*pCqFmD7(eQ+}Aw=kmUWudSJ=~nvVe#EY1VspUzD{`E&OHZY|G5yV+K~H&f-y!|4{q&awYb)5)BIPsI*VqI9;s(M@mEeoOYjbTl9o4o^3Y_%hE>zf9 zwq|p#soLV(81HNZ;{ppw$r?X?dm8mEaWm--AFg47{BE+C!Y$3xUA1UHd=@sX5HaqM zv>l7oy7=6IuYL2m*N^r&;b00qX_mMUL!b4>@ZH(-$XG4HGY4%MZ6k#Uv%@!SzTj-#2@L zelm(R|D94otAStmr0VUe9A)v6V4rOE+gIN;elo}ym1&>GYW6LF=WJ7KAUx; z4brO1imP;IjFEH%?j33I&9O)R%^aAmftn0f297hNDCPegp-D=B1%#D5`@iA%hC*N* zq}^h6waEFxYz@MhU^+vXa;S-CGWnsf|LHPU^BYIrCQ?~KW6sDu2>qaYRlG5P=CT;a zE;MF>77eUW37J7Fr*&lO5c%@OVGt=_vT@W?+yxPMgi<%hP*F76t1s}Bka(yRprW!kJnPIq-| zYmK}CoSi_06~6r74K}M{6d##v*TwR`~_1pZxJ6lEtQU{?Lf& zlPWHh3G|?OEqo<6$Yscj0TNaTsaadsiiE_u8{!`?4dh)ev@Sbpc=<*SG8>WNUgH1C zfEGfv)Rnw9zF5qPz)qO{R*)w$r)2~V@O|Az*;8SoZx(jVZnM^g3Is&fYyY5U(-dn6ge_?XO$? z>g|nQ4^?9!92PNu0nY{GtpMqoS*1ZRKqANAA2I1SPsg`+FrFNf&x9v^!d8_2o;9Yv zv}*4@qUnA39@N@O%f?emDonM;v}Zr{qNL=-X>Syt8JyS&UoXdVLTo&xNE;2^bC!1_uyskUP6!4B`@61qo>mBC&4%>XQX~f;p=+Wv2LXQ zd920-2r@Dad_EL4D}-MKz9qIhfB8E##_7;2RV`opDUiDE{WJD` zV7vYkBY$rn92?6L{>1fgJMA)MMaB64BrA{Wp&xM?zL8A5`;6E?I9l$0AcjIXybyRH zjcBfV5m=rpQK4xoNcduW&*0gSAKTj+x;6hkb;)fcZ0A!F?#uIU)U943q?GX)sW9DK zwQ5tz^4bjPJTdrVkSiU$vZ#Y1J?;WjHPhC-D{IZy)mU&pWW^6@FxPi5DM>7(%5KD! zXW}_&>XtAbwF@(t<@B)6v5o)RjO}5U%FX_u2z@ec=QrbGZ>#XQRfQ@YRvb8cMc4JU z?ePBEPFpwE(0Vj2d;BL1x_J8jM>}qKpIh7KBe5lqxgd~lvj83t27L5;*w$Q)XU(U! zyta7=u}&UBpf&ctlMH_F*laFobNT7?8Q#=w>=p;5iqw@M)ORj(ov9*{87kfCqENu>X|XWcx6@ariD)k2sjEg=S=H3?~eeuL(DuGMZ_;rwc^ z6#^fk7PXHcIt%rFKhf`^kH8G|B2XqTR)JCI!#$VL`t~K{?{haRse7v;RPQapmA;*7 zSp$=W4OEyd+ZDhgyT zExwH$sT^`Uu8>oEu9WP^9!0~w*VIo~3%Xwv3cl0lhp$H_#Mar%Fl-|afE<8un1c}P zpmmj#Zz{h}_?_`T<*B`g@)QHUJhvfvWasEX_+#JI?MQM6BH|@A|9Y!)1;Z67g_5tt zeA;@*h+9#y;s-@VPWa!NT0^*>d`k>KmHhK%M=<=?$xt>{LQ7uj zc5=&{U7p&bi>;U@4Y~X2Bt-RxZ@@Q{II>~#Le0b?XdCcj1q=p$N!JD%__;O4|@dx$r79zD!M-0;{QcZ z`TabED;2=Kv4g3q%3&CgI(02AuzX~g!9R1$%Ffd4ee_1j`Me~a`Ng}%`UxENRd z0HnZLygu9;*Sm|aRvmBy4z{)Xhi4Ih1Mal(o!kbS*+%=7pOyyo?-pIbKuTXYXTAZV5f+H;AA@qmG7Z>X;l;^RUbCLc}4$MyM{bxo;7v6o#%F6!j`;fe% z@}EB^0&a6IC;KpM&!hYZ%Sc{fb(S(6iiv?Z`o*8HI%ct$WOz1i9rQB;c`bBK0fL8z z*AT~X^XC_Yj0`LJJ0WL}`GM{D0wDa6yVPH(|IeP?eZ1=o4z>JmK z+}#biK!&p7qWxZKr=%ou**>?LMTGBo!bft6Fillk^`v{UkXUYlC34D@&{qvNZ`!Ke z{!AynZUe)xn3zbdE7s*=jV7>ac?bZveXiW{5ny)cROoAIX!yxP(EMo7Owg+vpcE7o z)fa&?w22B3c3q!`8-f=d`L5jI^^%?E9E{M(8sL;)Tix%xzvR%b+3oz{D1wR_MCr~< z7$~9V-yPLlTVK9x8+8X7TNb+`Ky5$PiO?~4T%E9)|1IM6xpL%BX?nAU z3*>ZXJW^7DkHtLi5h)eoZBrS?&amG{p0Z4 zw_mfB1qFp~ROE9caC=XUR{-Ky$@%y6)KvME!SlliQyDVmU-i&^Y!}!Y zU$lLLKkFMdd-qTfpS5m?jg4(6gpj_l)dkyp=H`rszDFFBvdMQ!t%Ot=n@sK+e7}7sJSO5f>LKeI3PaJmxlmAT>ykXkdKM< z&61s!PEQ{c(Ya^_KyEHCE%ll_UxDELCuFUv6^2Wc%}i=P)2qz~$RRQt z>j2-l`@f&cbuLwwf|3#>%^KCt%>TJ7<2)o5}y6o5(7`a(T|BsckjJ%LmH(rx~sPbivKytYs=l=7}pTb73zVo^4SsbBC2PWCV z#*31{;4ff#XtJIewlr|wpMKal|L@_wKzR)}nar05mUer_|6aO)$b(t}9R6l3TG+^5+l`6^N}K)bvV8Ev2F4P&zG1ug=CrvOa4E^LOY=l?X*WYGvD0|l+E9$>-Eq$cHFwgGfGuCHgS z3=5)rEn(nBx?Fzir-9_7OL84{v=_*KtEa3R0AFaG#dj{?08aWKfZ$Ne_rDs03N*%7 z3=k0dR7c47pJ@QDM_g48G(`C8R_7coU^(~VKo4wOYO@?WnwBzB>Z?pwKUH`SAek3{3NOZ9*&!5-S*2W#7GM*WeUm$ztjtmcX zhrYslc;C(^;6KoEqN#x&cXf8=c{TwwQWc!(0db%~q4v`Rg+L`H*&H>CWCfa4C1jA$w!lbN{)M1Y3z zqg`P%+P>wv2CRvNKM5&BlIw^5bVs|t^jg}8lF0d%-Z`8U=z3+K;e~^hW&ef?u)>@Jo<$P7a{k4+~Yy19_$1##4p{>9X@=}DbWP-HAjwL zQg6W8?!tWU?asme*EQ#;OJsKRcEz)5rw&*n95;@w%`(}>XoF@q|MW3lfxt^k%;%jy z+Ox-S9!w5Ml|ZZleBVE5q)}Gko`+aBv;d}Yfa+A$ep9-4P6u#&Y$uWLsjbmWWOf&Q zMJ5uH2nU$Vzv*6&^hw(9EL=eKCf2fjtVsmMjpkU4))hiJ* zvIX{Efe9unDJ^AXW9ymB{Lfo$KExlfNl6y~!g5x*rBeYC;z>swPEAO}WT=wWZUXB* zy3fa(>ahgz0BP7G=*jU9Jk(K!Qmrd=bG*T=QxKd<24jQhi>>eC0Q2T*e{b&^pu|k= zJcu&jVDSVjMgSNt@+B9bz6O-qfF2t@GH^8}nI-QmNC|hhwA=;JZC+m9C)?;){06Tn z%EXaFvRp;4(aC_sT{A(?_k7t3_s1VAEhK|jWhcgsZDtD+$?ZynG3pC31Iav17fUPM zbd7hj#Y#R5X@0RNOK%)_i>$vet(#N%yTj5xXQN58B(AVyYtpM^f3Z|9Z^cPg`2(4u zwrV_8AL*ld?!4|LYOMMOi=XtTENMSLxqs$-=lAkgnA;xXKZ#;?b;INKvZM_u`2TqN zs;DZrHe5owOS-$eySqV}MM;WucXyY7Al)EcBHaQ~qJWYcX{klHs5AY~8Ry2aFTB{p zZ_PKJ_X(ODwWOpZe*U*jKXwA_&$i+cf>8j?y)Lz`Y%1|v64z#MiNWOGeg_(gU}?I1 z^7Ur!gM{^NkMa~ODv+2t2W*;DDE}EN5in~B9Nh(jWepmWM9lrRZ13L$!_-IcUg6p>t;Su)u zPa-uHrQ%}m%V`}(%XhlJDAj!n3)8>8U<@d?`DN#^hr-*sgfNGgfcI*V%MXjo$Ux}z zq=cB3(x*FuSBB7^%49*mV6>rcq_{& z9-eD+{0OI6My_;;28L~mgl$bMvz^NST?pj->t8^=|N3XQN0smm_~+Y&(#1>aTUv4v zqMvOJ_|b}Z-dqY^HVd5_a&Kmkp~uuU`s0T@d{|FabX>l3dW|<<=m5%9|H7uVDKBUy z^J#qv1k7uChgvY)`ymwSd51M15Na^%npDsh55Bv9 z`0f@-q}%+JxbiSwATTpCH-uRG{MeWQWHvNT({}%xRR@r0#fVe!Ta))rRC~0WbH{VAhf83e7myOfjfJt+h@W;klWRT#=6pUhm(}* zJ3uC`7f zD$~g+_b#_Z`>70!3OwFo7QZTzz-Vk!iSeS=s?HLqTt>%~KCXGM?d}g5Ujx*}?y=e0 z!@g4|f=J?TEaxxL|E&`Z*f3-N!$n4*%(_)vw!0YvPwXJ;6olGZcC`TkzuRX2(-Xl(qZhO_4&dsj@|(F*u}F%03eMrQ6t7x)x|uL{qo#5|Z#LtY7AnlzfMf z{IyGQm5$+Skvp97Y42jBHNC3&2#xAn)M8PVBJU7ebd+B&U5_^IkIvrKz4~SF_`Xso_g(riv|n-Uw#;tS ztd+q+Rh)70pwjff!Z=}0;BT2mxitNJ!{^E}a*x?p-^CO>~Lby`qtLZaJ?|gRzAVo%WTd zis(ho+ktv){}RLeDs$rIe%&n0D4+e@Rge z?{_%Kz{G-;_`XY8NtcZnQ(I2Fz>fK)M|otggVyES|E^C|EYX;UW2SCI3(9$4N+;kQ zy5NMKJfYi^k*Y-QN)en zRKXQE_FxUnZJ-w7n4Xloj|_9vd8MPn<1j}7j*En5Y`;`(y?oOrL6b}-;x;*m`qOCE z1%!A%bhUwL36{e~5MHDlRv>f+l937Rp<1CV z@uH;AQENb7$b||14`O}&Z63?4SBoXxMhc2yWZwMOyp~v;)!WXsO3z3Zv&!g-M15AG zSSkDFy3?8n`|*6g%(jUH()U*`vL86R-y?s=$zLPhV(?cRR@+wC%r)$|$$OHl2-c8z z@ib~S{Pe(MX=&vy@$*u^oBM+~0`(NHqSjnO!iVh66#sZ9bt*naYG%eS)(O^r(7ev4 z#p`_cf&KK(IdE|b9s zsk~}pJ6zbUi<$p?r`lD(P~Utr_FMdV(*R{+xszLK&!rbg$AavZ`5Po=D%ez%6!&;w zY;IL98|LedBR_@-q3Of*!TC)AY6lrJ{3L`>jq7Mx#&iYQpgS!FimP9@F8kkV>Yzy< z+07R6KI{fc(wMG@BUm1cbrZ}>a3?@?Q#3F?&~aMaeQicx=~ux$+$iO~sFU(8LimDX z|NVziqVcU|g*D}GhrA?nZe%6?JoKPciBWd9wFTwOvCDlhZkZ2habJSH>fOetz}r8k zpfb4?{#$v7W`3Nuw(`N=c=7UB4HeK^Pi!dt1HkQgZxl(_h;!jShrJ{ww*9wz0eSNM zebSiC)4+%`-F>9gN-C9PLC8F%g#S5k*#YOemYprWqfe9WBFl zNc%ZF`vs~X7U~Q9o42z!k6-h9J_Y%;p~JUmop#{SD-C*G1EZ>vD&R^DM3=npJA95``5(oS0g(ig z27oV0^Pi%jimzVf78aV_-<*o3iibTtfY2}J?@hl-WTSvpQFLsqTog#}8#Xx^Ccu^i zwlDz62e_Zh`PR^RCvc5XR8*WtE`A1v@oJ6?>HlJ%IXF)8AfXYqHTjZ3LWLsci1XUz zN-0*^LB0MQP{mNv{fw;l{Z2L6&YLy<#lN9Gku2)&@#J|`Bv}o2P|PFPZVjXRKJ46eh4XDv0uxo;6+G>zBL%c*i33f}a&FGm_FG}c^8u*{DU|c5+a(N%i^RnL z#Uj({Et}z}ZAjK8erj9~F}gRpz{tejg@5 z#bK}^3e>;mWx-z!v1<1D)7bM3%r5;qt-aA1U9mks+wK*53Iu(0hN!$6G)sSOUHxIj z;q&S4Y;*dZS??rWA%e>{K~ts*Zn{M8jtt#xOUWt;^P0V}Dh!`oQ<@sAs(se_EARI| zyJQgcqrN-Tpeg6EhTlUU(n=f~6_tTa0!G5hs zk3~b;9&z&qy$bAFR3Ol#z`~S0eGwI&!i(zfxj=z?U+B;AMq9Es2k=v6ZFijElCJ8k zsj_IEKmL@Euia|bn`3+EJj^tS39DgsSBGXwdDAr$wrR1*_65o=>c6M@eLc?GCkJDm zwAR+nLEE9-S=gnXCw6vD>;%4O)`584MROmd2b!C81bT64hY^$@;D^b?Afi*jJxZ5* z1nK{~+1HlmmH<`sfs;^wsPD$m*DU1*WCJGcV)HB;2po7z(Ve(({>W6Kp8tV~<8>sV zXihaZ2z}h$+2L>{iQ;wNlJQSmIlfMoKfkz$7!z3dQ3`BV>Wn^8833oE70-W?Kykl6 zm^mQcjyFde0!+2RHeKwK^WlRV@jWo#<@G+$QI7(?iU8_DXB!zF-g4E@&{$QW;Zd%E zw-~fR*E2A9k;DXbt;GcLQZd<|XFUb!g=<^n#xf2M4;rjbUqjPf$i~@st3^L6;~t$| zXXEJ$ty^$b@(!> zg}Zf6$W*$ZoTB;9FVXzcw>*02+XzdkHYqKd-OG&O>+jilP#2GFiR-bq zUX*L&oiWTQ^{8o2H3>(`ujEO39yRMCZ$1fTo$2bz=QQ!aQ_Zw&;VX5)Z2BfO>v1AOv!Jbd``6irpozwo$kY-&rOM8bqet{TDXT8E%9SL zi7F5Sg7DuMM_<9gL9hUYRJp03+U8B`T6+` zntO*yU|T{Lm-aa#Ja__)e0FLoqAOWG{CIQG3TUi#c27?m^;Q)`%sZTkyl5kK+uPee zEfVj4{Sc=MJha|UN$jNeH>)e~*-hfs{2T}yn0kMAJw^;!cJ5%~-wF}~xx+QjAe{Wq zsb>q410c>+&Gm!7$1^>Y!_EtC5{KcOKT(G0aw{BJi=$i7ed`}6-Jte`Do$!va3eFE z8)d9GiqS7&?7FdBE6rcr>+l9&1@Ky`DZ+*`14iW_j+m2j?PbfFTUg}82?#l*x-4Wu zJTG4h_+b9s5Nbkd#R|>57Da&V(0m8wF$JR1$x5F^gq2aVeTea{+kxlz3)Ro%+=ARy zYch{~*kv9_GjgTE#aqzfWTBPL|%Mj2YU?YE;hq zwag%`t)7~$k#e#{<|Tcm$KlG4-X=S>Ym_EuE*<77P?=x5N+=l6vS~x!_4*0pUasF= z%&xV!{A>qsJ_j&Td7x*MQ@D;&fy66v%o!@c$_fBo?Z5qf?P3X&^T+J|^O63Si~{h#jakfh zl;z$V0sBSM<_vogCXj9q*ak1jizuVNhRF(wR1-%RvRzTb zTPhBAQ?N@83`i$ESfR`x952@*rj3G2T$Sema0^*V?Kkdl&S|E`?F3M{&WCsJ9Ql_1 zosV;oPyS_~t)s!6lKx{^P%aXKqVXKwkBjXJ{stI}qISU+GVB5F0-ryB{)9UJImquF zJqA21%{n0@W0yrZT2mc6A+>W`Ps_#PXdgeL-!W7H9o;F9#U+4G>BcVm&0ob1bB8yC ziJkC!duc4{5dRlm^HD3WD4hBkhB)17 zasQwM4FZf#+bMjkmUw0eUQaT@{EFu=MX!$yy(S;U``*8zp?)j#K+WO8E?c6X#OqUg zT6zRe!Wj717pP$f(S4ui*A(QZUXuh)(Hv%-$-5$rugtzlYtbnfKtvcr@U(SQUQN4X zIljdWOZ&yN(dDn|$DTu6+nW>ZX`g*CljYe-w@Cc$MM+XbAW~gE50YJq@@xsW%qEZ* zMJbQg^~Y0ThLpal2lfzXY5f3@_Ym0xnXzP2*VosA`G*)a)}nf(z?B;f>n(Q$_lZz% zb2GpbW1E_qfI|zDGIR_yj8gl%^KIX9lou~>3szqAvjXX7w9;jJbR%5zG>ROA=Qs)6 zTZS$`Trv)uOf6iqj*iy{$d5$+v>)x>3J@AJcbUt*RlP=_b$g3oyo`*=ht?>gn{$+W zO3y>+px1&G0zWOna>Cwra{LSY|X>1T!PP`_kBIjn>$o<3{Vx1=qa zQkR<(UB+9Y9J>);Yh`VoC;y&Z6C|BX{W_K;yRPg^nf=xVJ4j z3K+Ukv&boQL|-isUntkCN=yXd?6+#bK4m?5a7fTquOTScm)!f$SXG zs&;bUc-1{1Ac|JDQft3O$<1H$^<2sO?~J*Z#750yE%%S( zUVM6h@x}a4PQNioQYoFXKIJI42PZ5rLP|>yd@`pd+5vfPALp#!kB44($~M0+&~OAyt^&aX z@mc*ycTV@Hg>cwi%L2RmvQsw_AXV>7FbEdu$*oic!O$;3uz7pvO!-?P>aOM;PHum9 z6<-M+lG0@Rg%aAQT1sz&r#aP}1;=3uc9fGMaXob%wjZO*_~fwR;m*U$@RI@GGwhj?vZ8M?|<%t@eW?%>ga@zwx1gQjL`~CNFjGXa9GSbrrZOs1}GP1CshOPj1!GuT2E|5Td zm?xy=BfH-L(e%Z|#Q@9%cu(8=b+FR6LSyRdkHLQ!7tYMg09ajSkNHEe4gTm?LQm9l zk%dMx;Tj6y)(C9=OUE4rU@%yqzrS&O3|J|IUDpUVnk+vT1bn2B4t-zA)G|+O)MV~7 zUm^=^t+KMRtY20IRdcttwVAy87fcdmz(lqT{SFCxEp0sW7s**h2zM8}rd#iepUfd1 znM*-0$`FV59n?r;;JMkkYVvIn)RkLVjYi7C#|uc&YTV?#T>g~T^_I`j{|wvNQ?80Dh{K|M1BwKLci#fSwW)&R$haO9^iG9g5T&d?lJR4bt(9KbeN$| zmRmH=h8zisr2f7)`8Sd4OQsaQFPM?nDe_|vF?LA&TK>&YBrB%tg#!xK+3pdX0#0G8 z;p`AU%W8O`fhs%QGm)OrJ|s~!#6=_&(Yz6JiR&@Azr6mxW#8T!Hm+H5*z~0g{C8`v zX+kP610B=8^d#eAnn}`h_RlO!7mFI)nGr3uQD?5;wiDYW(B=D`zDSS!a(0cm756E# zS9axwk&OO#z-ripxal}oCgOMZG%{qfsPbWr7J2EZz+P{&%ku)#cQgZ)Le8geWEBjM z*i<2edwZZ&e`@8~FE!KN6vba>b#;vZ}vSG^Pwc zCqFyxg@saAzxs~ou&^#s^d~JVkm|wt|Flz`ieyrp{I4Y@N5raRgZ4<3zT-nZXsvu!!mJUrLMR49x0Kh*n1;7_>yO^t3Ur$nW<{Mh3 zWjA?XWEZ>;_yANKM~VMQhmMn@?#6BVy$gxO3kJPYvA z5)m_lJ;d*LB+^g)P=)K#15~K zlV?Z=1+jA@3&QkW4-|;DeeqiTwCXmbN`v1knL4VKTXRhQ*N7lhk&EeWbIfy?QP{hS zFWC-{Rj@$JGqF#go8gD^pAtj)s!WznHfirPpP68?#<=P!S92-1<&;k5VXb^E(`=IVtx8!iS(4ZevlH%&VnGj0V+Ouj zDE^OwZB>z_D(|Xh^W@EVmPKCVhJbizRzui=wqA$gUXe0Xz{43(JJ2Rlhi2=*LgE{S zcXO~{`}cAW#3_9{z6Q7Rqp(g;lAT4wLoObcMy+ns!pQzUxw;^NW~1n)Ql&`JLR+jN zuX=>+X&={tOx}i^&>n){SSur>2Js%9KN$@pT^J?M%#O10@mJ;XBXP^E>!ZPc+43cJ zu6Z)w>W}Q5ZrK*cb~65p3139f25IL?ZscnQ=XWXsb4b{Pcnm=}q%qp96{_-jTMosF zkpc6qHq2sc2%q#W3MTRfX#6aAx2Fv_+P=s$sk{Fd@_jw9$iYx$|FAiavM^2jSE3!i!ZnffY%5}C>(5TrY$x|$$%MD%B)#n z;ClcPtK}+rD5rpLKR8b4e6*Cb`*pl>3L*!A11o0)w@k%9kd_s^$j{YD`+ep(VnJyn z0mYYG(6NAgD(C?`nkTt3UZRDO;8&`ga{CZeEYZM;>CSzp=#&c6U1A3{@#rt+I9@ty zaq0tNW^DXsE*cv8fidb?wP%P)Aq#XGuw5h{<$_lu{3>EBmQ zB79ze4!k)qhZ#3}>qJtBX%3WA=d#3gaWE=xiu6!pU2pj)!1UP8^gVUol4LNry<~I6 zpK+a9viovviPx$-h2HUZ;0ZtFVu{1je!f+rV@j~trKi*;o8I~M&tBDQP6 zYWje}P7}YeakMcyA+3ja@3g^CdLyTBeN#$Vgo*7Eo+POj?^;9=f69yskwCNCD@H-g z-uaoC(O)aqDLKN}Ii1*fu+eF2*Gy!MowO{|?YvueYFta^^rAdWe4VOQ z^2v*wj_GN_oLc_Y=^m!=uowuT=W5O3TBy`f0YJbzx&Qn+CW-3LAb^6NLGa6Zmz$fi z&7h_~fSKH*4B2wr@9|YJ@t*BPxI-42M4fI(E^1tlrSY}fc`LMy8r&9s}bG|FCPg6veC!M=3Po`0fb5e<8NIp$(jd=ef5sR&r3wNGa_RC@S zMJl@Mn`C;w$d+*A#zcnvb=Av2&j6gq<|B))>+`_2ju$r|N%MVM>v|6tr z^Om(*F%ef;6ssuIStGnBiuxuZFH9C2+t}`u9{&irVxADnYS$D=MK>_k^9y#{tvNZszdrN0gEgJ*7D-wVB>m@{oY#2!_f`gnm{DCm#60svlJ!Up3K#- z;1dyH;ae~jeg6pQ5~n1SFT5PKdPztqvk#mmInsVc?fW{qgG2X9RIJ<&II4xKtE;o0 zJ+=a5`4TU=IpgHT8>02CBHt9`lA6HLqkn2-kg+fzpHJ9oLWbq$VwdvU1S8G|d+`=m z>u$10|yAiWLC zLY4&hpb*nK2US%Hgd2=1G!F-OG95svIV&JXd*@j;c`2I79x-ePx}fSk+G4F#1A z1)IWA*#?lz9Zr6g&8?O|y9XIhYvE_%kO#L4P5sM7xVppY%n$pSE1HuqB)dOf`fRYnm;AW6 zAm51QiEGA;RJ>K>7IZ70v+OqYE)5*|!$=PHA{hJz@`vJ?VdejQ|NCD;XD}i$F<&!t zg7Ir#X;s?IS-Qr;OzKVfMP!|?Q4LSw?@}{%%{=g&d#;#MPnAOhiOoWv*oyBjX(XOb zaUm7N^m$nyhddo~UZyT3Vg=gJzRQScI& zjvfA3@s;?Bb>B8}zkD_Cr@;5H`y;&mKE9u1gPbUA+?Hgg@k8h%q~Yf!Dd~o?41^&g zjY(f}tw@7HPqjJ*5w`Z%syt-r-95DQ3*pZ5wy=vgBNaoVGLmG;36nxR$$_ymRA0Ra zOV;9^R1BXCTF;3r*<`*jjs8lZfEAmsrk%Vfu~p}@#T+2SbW4#9v>p@p|M|Vpkt0IN z@mx=4Ur6DIM>sLRpJXj*j&4DsNWo4We`RM4p@iVzIWNHfME0@SOlUly@hMzoSaq}M zp-ziRttySq)v0~&m1cUYm8h|{>%LR^gjr_3?G*dh?PR#-#>turD}St5+Ru~kFI0ZR z{WMQF!|$bGofN@S+wBue4!%QI`!YBqN0{M11lK2?e#>NqbL!ZC$}FBKUh3zCT}QQ7 z`1h&$dVm zkSltyhFL#_r1Sd%Xlb{|Z^K%&BKlytb_r~a+V4e5mkvi2>a{R`beGX}Bdc}2VFg@u z4nNL1PBR8_;bKS&-9uIkwFZQu=W|}$JaJS|*}eRg62fzazaE)laqxSAhBzwtSI0@V z{|$3J6^3qwWgDuDeGgIBJ#9RewGdi#mG>)f!Zji`i1WGV+mrdIWpB753B&XB&z9*g!7gUg9LM=^xD+e%3hn_<)J=3MgC3r53@rFgMi zj(2k3PA3v1C|soS$F)!Qdn#C76!9%D*uhYH6{IT8d9<+RVoaKoY25}?G)NB&7E8GJ z5DyC*Vkz1tY@!(5vJ+yR)ghP%5ly7#ELtz^Gxn9SA7y%dN`x0z{?kHDy*m!JWWznP zN4@@p#++n1QP4R%|2oQ5wqKg`2O_)jjiNY#KHZ|o$?5foL9)QkClVJcye8PT)bP%r z!mGJTOl>k=h7w(@5+8lfD;{1d#z&q@$-l?scDf}IQV}y0DT2WFF@d?Ux ztrisOuJ5X-SFI(Q+-onZ4(oJAi}-KjA-G3-VjIjDB2?uz3;<&`iDf z?)|}gjjxfDFos1&#Eh|Ua6AC2n^G!;Q#GW!yBm{~&khjT=HUuhbEcKA=$Url!xxCJ zk4JJ!j(?i0*XONFD02`Irlh6yDW|D#Y-Ctc?qBB<_Ox~JFAyI(YRYmv(cA04c-WUD zCC8OL!LWnV;~BO)M{m8bHE@&N^Yc=C{r8L$Ana$U#1HfzlvZ>agU4$=EfH_dFwoYk zOr{AjI*L-V7guu|2gfFF&VC-VrNglwPj7x1N3I}AA1kGpJHwDvwRDMW!WUI7vJ$GG z!Tgu?Yse~x1D~7Kd?)Feit%UK#VPGGw1Xsr(8Jz#`b77K>_)caO6kD78Tux!Nh@Qu z5N)V%{*6S!{Wl3b{*VisFfYqAh4$O?hNy~ZQAnXqePxEf7!6bz^EcYLa|*n)tBnuS zrN-EQr9VpCjD{jLm?5+O5uYY~cbDzw-!F1nC292Gv;R@?|8 zWhG9=4xACPaqi$uusfXKZ@R-=G`wysH_fXq<`Zy=gpLiz;N$`_3}U{_%!k{Pf~!MQ=ERT)s3N`_fA|yqC!U;r z0#}u#SYx!rI;@Zk4gBv}`$1;%CI}_3PfaUc#Xyme-)nSWWA(Z-9wyPV*Ivmv=Vy*~ zy~yd2SNA5GTC>IyuT7x)MLn@Z@V%^Tt)8G3?pc^zlvD}A5jw)*fQ}ph2ZgpW!Y@vC zeq{~e%{{tAQ+dnt#1PELhiLm8HBl(VHR1JNO-_F}cSdE3^ug{MN1=hLz`J)e!f<>mbxyI~h z>2p~)eb-~UEjbmhe`sGB)#OX=Rv7zP`Iat&Mr<59R8}{!Ef4DVgXb* zSd=m?$Y+=bwPvI0Vw?R~&o6ctC!!w}7IFK^T_^QbYX2lnR@~M_U&8VgV?GWY{A=K~ zmrvMnoy-SSq?=lgtJQGs(KltvIU}7b;+X^+Dw7kr2aIRut3VOT!DZ_H>*CO!1pQMr z6Br#ly?Xmw`wbe|vh}1-3y&{WwwHxG-!e}xHFFi2W_HXrv`jj^_(=0XV~nZ_vvPr7 zZw4b%3p*5WLRy~{%0~Qn?L`-qu6}bBh$JWIu2V*py}x4I_qDD1l}_~g3k~URQNI>_ zjl^xX*IgP-h=&-?YEoT)kioj1vH1h)0nkCi%QsqnHm(2m>N;w%Tt20gdvv}C)OlRm z9op@T1!7E&1!o|e02+yCG=iVMkUD=80`|wR7F%UYODX|<$@cW$bWgMjupP?}S4Bnr zDud6f>q7FvxbuIspDmBPVVf+O5wQ&9C<)Z)O3)H^NVs-d0wH!Hwc)WkO zK%$BgOUsbpznd>A8RKsjx`B@AYE1DaTvFM>GR%eyw6$qJ<({YVzk<;fAM8wq_0ro8 zYUuNE?P8j$?d*8;y;u8jG`Cy8OoV{J=>kAcK@q==AWOVY7VeEz>?j=O!; z%Ym-Dy}Ccd(wuZ59=GdjOIkrMb)QD`Ym0QM!Mahrbqwhd@SdNRcN54t(!>#(sfxI%4Vfo!(C5!y;=G6A ziOEc){5apu>D80n|L3u_f|zJoI0_O%o_YgA5u3BM_S+Q+lSRC}97 zn!Az51!9_SwWk%Thz()mg>N3RPt1qOqr1D)KdT3fWQJ_w7i{MA@n)WwsI71gsuTlb zsc=!f4vz=cYso3#_b_laIen{2e)I_Mk~GAwH;F=UM`U&*1WS8(BBiePg0{U=xDJG) zerel`v)Uj3f{Pi_mzv5ST^a82avu*|Q|~%&Y7UYf9)fwV;;+iU2TM*!xVX9b16Fu2 zviuXT&iMhn$$}Ng_57rdeJ}r0C2;}zT7cv7oo;&sf{OvqTT|1u$7HjYEnPkv8LdqV ztz5b*i=3t_+?G_<(?71EaNT$Jz0Exo^% z4YU6JEgR)_&>O414`L8pn2BUuc~aF4y;IVWf4N&(_$s?l6x4)|X|pXz56Z%umLCFF z_oMhEQ9Xq&alKCdf!1Y{+944p#cfK)FWFL7qU_^NwNkb3sPVi5)8R+|kkOiXtzH;0 zRVtv!$rZAaPT&6rcLP}(M(X6L{|Tw|;)~L5m|4Fu1Eljsm7#AW!SeTdiNox2E4+F_ zLMGc`zlO%(j3(dN#TZp!7HFy%j{Xch*c7jp$(bj9IXG)ly=2kn?*S~uw59%5P$n$2 zJ1v3HV)!Gn#OJ|B6ODG$Yp}Toh0OWM!EE+zruqE~1rG=f972kjnRQ zNed;M=zdgG)aIY_fIDyCI}J#_vxQf9DZ+1lxJ%dPy?>8c~2a#yq6z z!KKT8Kft)RjtSDr*dA{q-hb-pruaQ6i*}Kl9QTy+S z2J5QV{-b`MFR7o|cQFHWHJ3dUr0bh}M+PN^?$Epv`XgfT8iHqeAD@%E45Se5#_#fe#))qm&5DX>3RFzFe#-R4TLk={ zo6q;hMB%D+05+!U4aKA6`k(y%Q0WK+uwBFl+eK|hUFs|&$JL#*!h zG{EmCe>5X-AcXTEB%svA4}de}TC8ki*mKVsCJx@VA@**{rthMr|EcRVam=|NFJG(v zxl7fTEBC~h!Q(N)h(3XzTmK+=<;UQ)SflJ`yP2ZI=V^$zH^PI{6~Ywt@!ezrs%`{J z0xiN}HF%NrwO!m<6C2l_596it-%h^hKV~;(3W4j|4(cLV<;FNC(v>9*CKHo`Z7N8(ST~o zTn(Wq%53wsb+DUrv|Gv#yI>5fGT-g|K_u2h{1~dhOSzbv1UTfX=w=uacGzIypB>fb z-1^A!Ewl4$A4ZDHkKwUsEcJ3hCEPsjW#5jDj!H^O(xjh$tgNh@ph$J+i;Ic^mG{ON5gEgsH03`QpP& zJH^-@d7Ej(tPQTJX8mY`~Oq5)p~ibdZ~>OHo`o*8xt2HMwX9PAh0 zzjqXrT{zB8^=LZouYbHKW$C)!EI+;uUScFasi`rwzz7z_img{DwESo?a^$C?j-l{P ztt6gV9)(v9^7E;4#k8J#D}+Ww#JJk!+v_P;j4vhJR$KP71+N33ir~};CjGx#Q8*w~ ztB~j&Aixub4+yD12ETAB>T1Tx4vF*pX2&NWI3o&y->-D)&6j1ljyOzmh_bsT{u!nG zoX+jpf&JYq96rYI`UPdS7-A!@K-E?F0tFHrFG-{9FYgpV!TU?Ytv8`7xFPV>kxWxZ z0c~QRt=&m3eYu537~@9Vj&WR|2MYE^z7tR+gAqqe%{ZBwYr*XC!4((d76cDMoWHz= z&R5cpxlv-yT6|r6hVbN9nS}*GJpJ99?Xlw3+$Ebwe*L6Y@yEm_L7KE4Rh@SEi^RoH z>442J{n)=UxUcGWqJyb|ADYbe;h8iZ8Lwo7}sS&39PW2E2g^l2z_#8Aq(4Z zO)#L3;YjNz0n~2ru&s81vTJ7`7s$PVz-DVO0@xe~m2+QSUamA*+#l6{99};Ohewop zy4#(cRB4-*l#nP{1Jz+=Ztg9(ue)=RlaojEi-bOOfByUkNTp+OAgz0NZX^!pyMP?z zzu&(@flGuA+WT8T9yf2c8Uk8{F~Q)!dwIb0L$H1Y^IiV|HA6YM>BD)Th-Z2K?&mQ( zwcEE8$Jrk@3abNYjfHp=Iz{ypBu{GCPEV33PEPz}g%~ujH}*L7H%Wg^Nhd86*rX$b zTcn>n?--|%kNaS6Re#mqwzstVa<^IVk+=7D=f?*xgQvZM7G2L8+~9pAR`Y^}IX@}= zGJqteT?{}zYU}rpKA${|B8^MsN*dZU2vwQxrw@OoU^^ye31ZSge%iX>AR2@0`Y54b z9ULZwPE!-HKJz5hzaqD(_tCdqoz3?VrmJlFEz=*U(f&Yc**&Esx#v=SeKo z+@bBSNK+dLuVZ5WUKGXdhL?2ZRkFR9AQg&LELo5+X-LRBdLwb5{P5035plzht+6m` z<}*n$3`>mdB=;tVM}ac@Ycbc7W{Sf;qgOJkY`VhXMw)G&rLL78#*?UJMKQ_9&Axb; zxxl?qhA4)Q{_8s_c~Jp#?8h6u_>(quisdwM*M-+({1KSY84TLiT8}rAoZfsI5RRTm zxzO0;>YgA$np~N=$+ox_9c&*g3NFORt$EFb$9pCB^Wu1d?~>-h3;T zAo4cwI!JmGpbs5$ERNwJIA$?CqQ0@U3UB(Nlb4)qXC3>Vm6vo6;$L`$);KlzdWQou*z?eV_S-=Bpv^D5)@A^rA@@9J^ z&e|626+3qsfGj;U2ZUgKw;Mq=FhG*n211A25=`@=)030HTO~OaaMcC(TKv>sEhFzv zj(|-<*rh51`Es>3H92{qY!tFJ%m!G4HD7`D__Avs+pjm;oB^MFJT4Td@9lN?^)T`@GXmIx?J$bXr?_#Zxh;4-a zsb&syg8;L?GR6i6##hv*^A2tq(Nf6ZP63X-A=~&vRrdSJSC)#xSoi*&>j4T1-q%$@ zK}+jxIzi6z`0*{`A=4x7(Xa`*`IE7BLSpoOpJ7B5nwy{w0D-77s95kj`j zSKvb6rM#s9mD{{l8T%s!Qr=Z?Gp0`m`?q`?_L@Q>QZ+~Xk6AQ9j0V`mkzBJWuo&v{ z@|dIIK5sN*ZtCADDm|^fXv*F>FY6E{dK5~Hj$JI#6lcek6X3^Su+poWbL)APfW^)Y zfj54?<%KH95PLO@rY8)Np;zqaQznNFQ|O3avp7_?{fp2Ae%6HDA#;>L zGdfZnz~vb6kvdTySv3qq#Dq!T@ha-_ND26!;)QH$6|pT0QXKC%;Y%avcTr1!d}7g& zCFKqAs8jg0M6RjQ{o<1qsRq8tg6&gsNeY@~r2TG0?26Ph&WDTU=$y~X<6NJt@^f=*-vNbzzU!MeT$X)~Zf@N3#5@rwI8>O_$|+>Pjcd5|jjHMt z;OtqaH8#3}l<(|_$6tVm4339@gvgzvRyuKWwz&!P$}IHr#DGH-l?Ecf3A^^e`-v|4 zlFM0Ns|*=b+`ZB&5MZUJM`UB=;wt8MNR8G$0_%H%OE~{rvE=&fY$JFh9RC01PB+sL zJ(gkh6W!f6Puy0$lu$dr9K47wA2dw$GG>NbM{_) ztu@!2^9=bFg&vX!sdu_G>fHu^KTRjz*jh~9uhOFP3%kpHEVUmO_Gia^(S|L9`7=c^ zWOwk1LYIGAMl-jm^X-by#szg~?qkF3oPE6;KdMg!AodXIoSIi}->4#qKq7Ch% zDk)?$iaWe%4*!fg`^sOfC46YXjnoo=%h)^%aYpQ}($Qtk z9;%-{zf4}9Ar85K(W$!HTF0C8244jzIuMC7VORRVt4yT;(a_WT4)UydV_)T}S(R*l z^?V3WLp6D%P`!NlQsR}`))=3<=U$0odhZaB`$7FEdb#rSxE*9&j*@!PTm?qaXSY%sM`2X$_Q&udE%uRB-gBv5WDdXe*|&XFoflyV%92V@ zttt#vLovrcxx&f3PGcGpFF`zP8&Xh$wrLPg?`3PQzs18841I8c=0luSc};Sy5s^zF zuKNC%l$BSLII`_bb?8 z$ATEsK#vDbwr4lr;eOMj4DH>wzxm{tCXVl=sD1QNQZkUH3D^;GUhTr}m3$mtZfo=h zb>YY1lBINH^_W_>1#-n^ToyfPKu7Dhig&3Qy@0i7| zmg?H9Dbt-^6)HyG9nK$sfWtrG1V)s%&}rQ{(UbKk5#FL;)Dn9XW4SOUo9R;uqdtAF zvf;(64DF_syOfr-#)$f!%}ALurn(SG{dPDVrNZd9xQ!aV0Vw8j1YcJ&s_&R?iSF3d zHf4R;$#*4;{POm?N+;~OICMrNEP(}SsT=|Tdb{~ruq>Bj`n@k#BY-qRdPYX%Zk+GQ zQmCMoLhV>y_W@!k%zD>XqyQ56VqfillK*H}K0{@5a|(?L5b+=K0ZNQ%W&Rx26BOS? zT-Febe*{^TCMVxEoK!j8nm zF+#YIA7Ue=U`+h;J*~|v+h(Vbc?!sKtn2533az4F={}yl7Cyp7JoSPz?X6npJ7}11 zP0E!VI+z0e(9tk{q(>O4a9x{WszPVRh2h7l)n3+e362wIVb~~GhZm=jsO`m^g(dh% zDM1Z40&fmCt!NMsHX5!EmxmKolXrnVT@|F?Mm5$jRtWKx8aRIrX9`E(;|%PrOM6^+ zHN1u9qJ{;`)WV#Zr&sC`t!pNd#qkVi4u(H%ti7gb-VfKvli2;1YMXy5*2|m(a^}Iq4)zO>e|PbcF+HXJ?%ZjahR?B6QyoRDxQcAqnqD z9LBtivR*|nPD$$XN*wdK7K0hIq1HRaw(1W^#rROOYH` zK}?1_c%-0)1uy)MHxNr3bMGs)3!Y9Az}K_L=<6?lYy+J0mgeTvbR6~$4!?Z1Nv*7` zyieOlrK*mWQZ?MY{gC?D?LUZy{doFsTK>Ynq5n94DA;uD3$u6(VFPcY(`RVFE)(cB zb=I_`T}ZpQ9N%7@{^56$kPRIGJ?%^%glU2!jK{_8d$tq2E(^@xfvDs*vu^E7#uNca z5pZ<$BZGA<0lP(wDRqqj^E)-0nw}mq9_;pH)Jq2H2Q+Du29E)z&KpSLa)iwPSr%>9 zN|DD(A;D*9LQ2clsZuH1OA6XnL_QJb>_=Po5LAwdNyN-P^AdX~fs94%9Un%39rOVS z+th?x3OZw>hJ2agC2(A~(OLp2w(YxM*{pZ=ampnZvyUN8(yzB6^Iwfmd4{EKp4J0@ zyI*!mOQNoAa5>to=6-Nodc~h$_ebR_YBzez2Fkx#6pAZj^r9)(y(B-{IYkz(4C>f_74!WW{rs^$ds<1B6^(cl zyHuvE=XRkqqTW?;q$Ha8+sg@k;a6c9P<54&~^3=XWF*Z1c)x*1BXG)P+B`92)H1rLN(h(i?b3VDKrp-gI0s6$2=V|q(3&IxEEaqF>P>mC=S1Ad z%k*}()5SnHp%}2&0U4QEHm-lyf8ZbHqp2^zMc!zyuEYTmH8&DIz>53s>FJ42F#PS? z;Y>yH!d^5e@ghf8N=TI_2>QY?9(ho2UVH>(5A&hty1MgQ@kROm1+ZB1H^q?U$m)GQ zDJTME*+~)2;SkI0)>pwFi8YJ46&*_Z-TqC-h2-Z>XI>jfyV1uWa5?k#Y~Ch5M18io z4w)o$mU_Y;^saZKiOp5?O=YK}HT(1w$u(6ue9e*r;>gD#cV}He9 zC`@V~k+8wjRz1l+U6#Zvm+iB7TQr@MU5y-+pPxTrmVgvDjsB+qIQ5h?vqk)gL>`q0 z0oqu9d^#?=Zf16E26)f)uN;^7n<_mImr!noVqQM|kxZ`|?!dsvhJ}w$_nhqNWE8Tx z4i-wkWg3hA6rulQelF6J<&CDMCYvnBdt}}me(jj+voJWJkF_()!fu!xA7(mh|?#U7)NB5AY1kn=j}px;#0|yn^N+#za_9uo1R$t zFk$2RGfE-l*0CG3wZvZ&H|5WjLDan3smjQhOq=OG9&uJWi$%KRjKKWxAc?jovk5lp z_2F2;A;Am9cUP4U(Xt8|R*JC%8KZj+{u9n+nb`0_`9XbsxmHFGYNi<@qZsD6gk zy36SpZf?s@pM@#CHYZ?t*L1l&bITRv!_m(m#xy~Y;n}Oss+Ov+=)7+F`8i|ZN(L^@ z!4A~TiCp+`?MKWCrCYO2(-{R1Nal8So9KVzyP~C%pm{#H^)=jw#!gbU41xf(bZc}z zq@{hd8YlDa&qyQ$3Y!@`b~;*GxJw-cdT!V?jjle@mgi@)R)e+gGtMk;k)Qq9tx}7VespOlm@&?F^?BemMuY8*BDo*87@j#6EVxW8j zpF4kaE#3?fe2g(-Vo#*i|2jEx6a0;UF#rvFkjsO$0{TDTGfJhJb1Jt(> ze5wUx8B!7qce|MmHMs$Qydjif-~tr5D7g-tZ8*t|PKe6F$! zWKRA3I-Mg8*&Y?)O&`GU(Ggi27C#n*&Ia8}5;}9lM$Zqe3(YE)Ym?f2dp%(^KHV@o z98WSJWNn55|6NE}f=z(=RYH7{CO5^;U3uT-@>7O)OwC4}2|;4d$LVL152bpLAF4_q zyeEMsk$i;qxQ?FS$Tla=v#18&eQQ3D#Cg;TTVRmxoY`P_|%Gt~D=l;lBb-Lh_HCtNc7^@2~m z|4xLH>SL(&gA*|OOMeYI&n4>EDc830hNNnGxscC{yqB5x&xvkzPw~cF5v9*)N*)J0 zl0(loqv#?=>1z4j^SSVq%8qQGVO~zK=ZEB5VxTsPDN5z@vHLe%WNBm@_s77VRCiXc z2w=?w$F=lX$Utv%qw$-?PWy@I)I>GJUCMr5pp%8a|6o?}boQ!#z!}g8Fta%6zhMBtD?pdjB4^M(2lnp>~VHD!GeC|58)(+<>wn@zV#`)m2#Q z7U^Gfg~`fP9i}jG5UO6=$ji&Tee0|?as2sysop2AuTuMD<&cILk;Cj@)QmP=%lQlS!oM&ZSgDogLl!ofl&2v^d=bjLBJLR$s{*XXIo+5 z!#xmz1xl(M92|c-PoMwx0aPvkY3D0}Y;9Uq6vMYvB_}H-B_%f(=CUqhSR)2CY;%VD z412V707UkJf`Vi^cCcJ8}VKr;cl#!7i2q!+>`!_=3ZL4dT2NiK2= zU;^csb)zW)eb-lCly_y`#UqJ0B}$O172NUtxrvWTTgSs)dFTyZ!F|Xm`I4|dWzjK^ zp7>`0lF(i-qgzF+ki94Vz#IhU#GO9-DcvR)CB-xzlW#Hxc3Cx1uISULmP0wcu9X3r ziz`W7L@6n!YH)d{Go*|uYcs?vv2h#c^rBt;!Sv5X&R|TGV^+}FwZM(n zQVb5YO59BMx>V!W5c!C@qnu{AuI-EQm8dB{vGEzFcQQ_2(YScX+Q%nYo073!n-S2Q zc2ta*o=>oxJ}PhNepS89_$$NB6Gv6HJBsAe zokIK*J zTItl0J(dC|r=SLztKx^DJ<~H6SjOrLSCW^wuWO`jlwOsm>f*6~(X}R};=cS!0nV;~ z_h#PZzttQ_6u5SymD+0~Fdf$A9Y(b9oZnuy?Qo)c_=Kw3MURSAk)2yP^YsRmj=D$w z5<}74i19#!&ghZ&2M1entdKqbdj%#)E_SDf>^TM%AzjTt?(FMVC2#Bstx6L6bAY~#eiC_W`DLbS#Jdb^QAfPFfUgx za&7=?8|B5={r!C}82qGE6+T9|$GIOk2qQ4=-gsIHnXx_p^amD=1_ae#67=;)zI!K$ zp$c8WBLxzRZQp=d2%tNzNrE7MjMRzZ>*Is6Jz%BZ_0|JtJ<<$6yCfcwedb^%`joF( z&DA;MtGy`y@B_lbXxJJ~JyCL~1V>NP(_e1>S&cY##>gsA`XhX!@}b+8*+eZ8mOGmf zw?ppwr2dmX;#c)wphk0QZDX}sx{&Kn z=(P7JxzbkfhU*v>$@S+&R#CVcdqxp-BMPS&*p|QiE;tA& zCf@Ws79CoybTDH1{qkfavo7GGwmOLk&ntJXSTbaSz{}!j^NXBnL?)PILn*tv zNfS8C>2fa`h4Cr)lW~Sp_lRwX0a|QzDyV)i(=9qgKAuKk;@67e5@l)`YB?8GSC9Q6 zJXiu*N@01qHR#_+bu{$_ueX7m18D9?7eJ<_r%6dk10U|ZC{v;efh*nl{(O3RI@$nG zZbTgb$a~nUiKh{m3=%L2RK`q!agUU{Bd=2E7$^Q zja`cjJtFKM!B7!@L8W+b49LpLO1|Wu1bOnxLMoEH=i#yZL|7Q3+ZXWkjqju%s?GFQs6WV<=%DJQW&qOU4eyN)LiZks| ze3ejF`8kdHGR^bY67h2K&p^|!Vn#PROWJPCpSd;g5d@<`CI`_4t0%ZbtW(}XS$8{B zUY&BRj$~S!-rB45CvYyCc{DD*rwL`MHt3>ORc~lr%`f{NShV`|u}cK`_naNbP-W~c zd1MhISQJ*LECi3NR`>2XQz_cif~S&HB2CNs8&*2r-?_&wAHA;qa@?VD)W-3AqpBd6 zCAVXe2>nyRSDpd9MMGqG=w+O}mSmiq>C;=sdCsv;3r9nAA)eg3-m_vJKYQdeva{9i zgr1I#y+ukzT=~C=<0??UWE|p7u=;3ABr34#E{i&IuFFFs=P{wnKJjO$DG6;84B2ZCZ|~ z5XPqgocbY=5GY6cJly@gyS-geXC5}Qo_Q~6RTMGiF_1`IiZA41v~+ZJ*z{S@_f-|4 z!pHOT7Ak;9SvlQw23gtK+NznX>}r-he^_nypI;t_eg8W-RTHgSx6tOYT6YkC&+?! zqkBv(+>w#1N$13%Ce9>f)4L4sf%(f4$gsk~{0Mn@dF#3^7VqzFR?S)rSaI+BkCy_| zB9y9QNjRG1p@Xpoznwn+wy-b@*D&Q#cs%bknVDHxft!@)xh)WiE-TvxhEj2NJ{v1N zeV_i4EnJLFvWk-49b1|8N48|$wI9rXzTnRhcKO1}z<%WVr6l|J@1!K`#>fW^z!^do2;9P@+*ado#&^a z)A6XFp!^o#M39!4o12^iY)ml6MH+VsE&n#m6+((NY@D5eA-f62W47GU@pi6SKNLpM z*4oy)vm9j#h8=dQU+u%g1-JCs{sW+{%p$WL0RYo{Fopvu$^DRbr;8NFX~-yYmfbjS zy~91)SKTH|!DiAd7ra$j9UTJ$1C5aCwhZt{9873wk9cVM2T1koY@tB}N{@9S7?T4U zB9Au?E@x4b&3_IIRAL~m8zI}VIwwd`Jwep%Fy+rPLcg7{ly*p zV~3tv=4;1)`F^hnyOxd)_O1#%xI%8=B%sLMjf8?VZ+028O!`!xviY(zTdq zd#Di}ufHUrFf7R;jo+_caQNlQMpMZu*&F>1<>BZP5o$8~U?rb9AP-ho2zXfi)jtek zVfj4^oj%hh^;9_`;NyTFd#P%kN;3q^*dikzK124We3ILQs~p&NxRimns$8bzph7Wn zbY+~!pZh6S-$ET7>Awe513Zp_Uh3Aj9L2|{4n9e4>&3qh2?0DLHOBUp@6CyBDy=lz za+>IaJGA%a+vI4GZMFiBFOotghLB_bZ0t?c$&0aeQqD9g48QcwgHmf!I4Wubv@1eYEOvVU-a4x@?>{qqm&esyWa z83w;2eQMo!J1n+Rd!rVw4gSFYcdNWfJ{$KvoI7Y#Kjr^fm=E9{(c@ABVGE}7&tW#_Py^EK?bpV}Fd#JFV(@bgqEPb;^ptPwb}Z z_&}|vFln3GctC#0DlxhneL~Dv$;@1wiZ=_^JV=+ih?Yv6v{PF7uFZg?WhiVXf2VCK zXEp{;S>SOGJ&$;;@$JhlT3YI_>hiZvvkR@CBeR;>93P99?{lc0s`4=&4LEcCu=~u@ zy@Oo&bT%&Tl1Xbp^r%URYk1?Z=xD|G?C9Hrx`bcx;OhW@;b}7@xxz+DndV zucfUmEhPnpl>VKYK=Ox^1nsFAN}Mv|_RgaZ$$>s}zTu@lkE@2T;lj!}P-Mf^WyFiV z7W&DyTisw48M20^ATzLu+z+1&}7~-SPRQ#jU}bIPH3#rOOeCqa+j*2 zp?5V=nNPxPF#0{Xty>U=J7iF>7%m1S{^-(3Wak6(OR%+)p7ZT9nNO!9UX`r^W)b1vfeIae*ay&aT z^D`nlUGPx9`C>cFE`aKB|Ck+&t=xCo-{n47{ZZ=vP~P#7S6eNup6HKbjG!*AC3QBS zi=~B|`myckSxY1XMfB(>)qSe8=L=k8Tm(dmil2NP(|D*31*|0{%oC-o4mQb|_Q~>e znYZ6I(zun;nwuwRvd7(WMKVV+eaDqfx&H?E9=1P=N7w-Eit#T5F$z9{Mc(s?#Rt#U z=O4(rJiTTb9ZaE)s8{yNE4MA;O*+>B^gK17lK?PvLce=#;!kGKyn`WlDdE^Pea_3Gc{K>uZfwY$ZTB1qs{?_T;q)ePS= z#JVE$H)MWqw|XXXg+5{CQea0RVUpdB@%<_;DY1!Ze)t<;ZomLdi5@^1srY4&;`pZr z7ub`zausU6pSxXyu(fNc8#`j0AXfOpHJJd*5jS8|0^mFanxqTz!DclO7+92ExdDw? zAQHiXi;N;J39cq4Au@b?9MYWJG|!5*%Qw{czUh!GDRCunC9x9R7~PYn%<2Z>|de z7W+-o84`#gq?jo5XnDX#CQUcuZCXZPl4jg~k&=~tmiQ7lIRgDaA-_xZ7`Wccm*tLW#Y*kD9r$k9f+AngoVk2 z6~h=Ed;7(pB~Ku zW0rkz*L!=mY-ap|f^jdo-hiqV4-d~`b>wF>`sSm(oNqtsCR&4@u=yZ*3dH_-+PcJYa-HOFQ=DiXO$Xhg2 zR3R+F?M=)IYB1nt*C1Q13`+o33?C4~so3d&aqd51;ouDeR1c0R6*U||TU#3x`+w0O zohv&#)(wRlv${|q(K(Ux(;DypZYtyU<6q78AKxSVC==zDe*SE@c)T4VgHJEN5a_(q zsMz3Fp-T=63meOQ^$EC9;g1l4Q{oZ;7yV`pGDYfDvkt=E;IRVNKC%YhD|lEZ04b25 zR!2s2%i~*zrsOAxhySjKxo_boVX5N02DAUj6^y1s$hoZ(!Xh87NPJGWEZ@B0M1Sh& zz#IC1pC(bE1@iiiPoExd^J#!T5U}qbp#H!6WM;2j=dZ17ss4p$qoDf#_ab*yK1egA ze#_z+-Lr*O8)z3y8kR8pvsG{SvTCbqw`Ag^u6nP7C*emM1#{TAxZK9Fc;a7OWPm3K zgy8{HR90MEu2qSjKJb4J5FYly2XVp-8&o@TzUQ4^*s~2>J2v`l&PE7)zt-U(;Lw8Z~AWC0w$h80|-n(M*`bK{@Qj+ zj>8~7@o9Gz6%_*mqT5gtNAqHY)(X%H!*}#5pB)qvW`FZ;``2>tOu-y6E=eHH^rDn6dhwgQXKP1IqwSq&Zl<01fsCNH$i>T80ULaQG13 z;}1Mo=6>@K05%_T<0O-`I)F34OLuc~Ymyrz1UBq|1RDMRJ&05>*iMs%AHF>5i(cKH zjsvx)oxMHO#P0EcyKDcmNm&4euo5voaw3NlDA$MLoraXmy*q&fAZ;BNCnr#8=C+xl zVSef1YgvvY{pFd=$TM!67mZN1g>G1=;4=Ge3bvz#TByAy<&R=jS5`iLh36tpxjMYi zxQxtNB3!oU>a9f<9fSt)YE4-8<3T{^0V*~F#a)#Wjni4(4ip@BNEdJq2@m(g%wpoy z_||xE7Z%!#4sNQCoqgaQkSQJs@swsDc-U=zNd>|lETbXY7!T%Co+r|vf&KaZ95Uq# z6qLZ64Ub9p6HWHVAbBtMI1F362aHdZrycn2ZQ+3Is+Wt)6~L`W9uKkp=~gEwvwXKV zk2K>+5$U_#Zw2mUGIJb}%X$;dL?+rh-hBy#?ZbIUzMLurHcaLl(Wf!P@$eDqE~vE& zCj)L#sEMs-d9Dt`GSL*g5iKJGM?4_0JqI7(r>o&B`r%WA|1iOm@lzd2C{{H+HVBy; zhtr1@LBj{|MdH94a(WjP4UNxf`F2KARX>stIEI}c9Ysb*QwtCuO*ck;Ooo6{B7X>2 zc!x$rBo`J<7=auaNL8=gwz;h9eQbBz0}uo7X#_o&)^tA(%P+W*R{(mWivS^B$n*E3 zBz-E&Lhf4w#*-5KT&wpf*AihRcnoJ6H5e?}6UX7Q=9`623~=Ryo=sa7r;Y3M9EZT* zp2MAGT;dNC+~Y0gMSoXRAl8?7N8yD8Hpd3AJbV-EbPC*+3YwbZzkdsx_J)Ff=={tKuqQ?$uKAeg2j?IHu(65s*4Ea6*T7hw z!W1M#JZ{AnNf5a>4)jb5&IRS$)j?t_YE4{3g5}(mqpc5465RklY%if7Kjp*3gntt8 zan>}_uYvBfCCc~e+&WVy9VrP1ceQ0Ly8M>TN>emvirJ%+t!T9Qiew1B2qyTEOTb4A0BA*-ttg)pfq<*{6D%Zzrw6aCg|LL1n?PccX3HW4yQKUx zcQQ~Jy{D_0V#WCLug{*W`Npe0OG)z$w5AN#(w?&dv4RKTywPcxCrCBiB`7(rn#` zrsU@?Y75M;QL?DC&mT$^YHRA;8-#T+;PR4?Th*#oe@<(ij&p5Wc4Y2W!l}DPdMb6A zz2^9_;fjaQKn${mpt>kP-2y2E!ee5@@MvZW67mQN;+oz|tgW9_x^=vG`RvDls@IzW zjC@}rB^%`GT3WRl!&ZFmfnrq1plR;?52w$mX=%&Wxc%(tjESZq3)}pT0BLjPq@wCI zNr4!~f`OXu5l~VJpG`;}6@o_&(6fysK+{RMCM>-H9fB>_M$06D7u@i2fdEI9 zN&5aQ-tatR$V4IzZ#@1kU z`r4AeZimn!o&dS6D6-62ZE!6UyN+o#4#{u!%adE6<~R{m&{Kb6nFL|dzuVy#=wBzI z!tM8_Qdz}jSyFFh*RSn7Of#0#keC+%9@u6wzj&19Xtl5eDLw`yHs(50V|^rV=?L3p zMmBp5GD}MQXrSjBd=fSWB)k4gR58Hr2LEN)_1SkdH@gF92ONGNyUfnXd6Xr`CR53K zWw*09JF&O;X!HQ|LTF>bsQDeR{RZz!9}J@dH|4KCDJm1GWkce9I8@`-A3-AeqQXKs zO`tX#)CczziH3%zp5?W=`s(T`oK^U9QUzY~pTKH!*A6IExwyCl-X1?gk6Be&RRZG@ z;KY6=X-P;UDAOanT21lJJO#53J>5-1kqHu9jA@Mg?f!OCr2aW!6nXB49O;qKN}msbaS)PbtMsKno72 z*VBs}IfL`%QBY}0%T^qAghLZ~j`%ws!@)@8<_0g;W_@N}1L3NdF>={(c+NW11OG;m zhcv_{qFWG7{M&KS8ZP@?;45kU>Y2W<+3J9Rw0y<0*c9!`u<+;UHi)ymd1QITkzIp# z+La@T`?pNZRDqR>k-tqU!Y5IpWk2FIOuXzVd{0 zcVz8_=$;hD-%UiB4au4gJ<$pj7?U+!bkpomRcM^j$-sNVmf_ceEHb&$`}r?omz~q5 zUJ+3v6a6y!e7l+4dwR@w@p^E_moN;iEhj-iW#riTUEWJ4XOrga#xN>MWLMvRYmE!g z*(~%kEz(opRrzNr{Kn1TcN>g#>FVlw_39PSf?E_DaCRpAd$}%@lVfLOWcRwu#Wo<| z9!OQmm4-(BOF8Xr_A9zN0rtj^-XBULpv0h=?*#$Y*+>$&4nK>DP>ziu;z3mbLUBvN zm4Ln=p$YmS)B==z>5$=7pgpm21l%<@>gBJ@Kv}ef#|rxKPw9UJGY0iMX$pQu?l%F> zg<>r%omxW_5g=ncM#8*|EDpmuLqILPP4kS|dqK&iU5K@T2Hop&PrcfFP{CKZ_mtLy zz3|q?dUh@Qg(eFL=c*wpq_kmZM{*;Yjne&Nb%69pil#((AD;k5DP_~Q%1A-+YiJT{ zBsSO7p0AgxW=|%obnkoYpB`6KKxoErRNzu`>n8pyFK?>WXc$ilL}$AqFIJO;(JrCx z#6OoP>-ke1daRqV5ZZ+jYQ%!h&dweq@S8hOQMn1ZC(zPpeN=%_0G8Fw^);J8^Ui`* z-oa8kmrdYWe-!%(2ls23v!^Gp$mMJA?~i%OHB9xQ&jZ60un|kW6crRY+;`V@b}~{^ zEdx@O==P_}F!_ObC{Y$YG+`>IG)Fco1+x5hpY;^~{`ORrABBLZR+rhs%}ogSh8=kT zw>}drW=_X%Q(po_P*1`{?BWk@hb(n6Cj>Oj%q<`Mn&OA`?RYxm+$(f zQQp@xv9)O^vQ#T5&Xs-TK!p$STa}HC)6LMpV=%>ttWVo04&`zZXx6Y}gMxsnB7XLC zwUJYXpUw2_XQ&5>d!mafR@urOM!?84k7E4 z1amV!Q+FDidEQ3i7e}}mEl;0XiqBSsKv`(c;NM_+At6}8^@~<&lsK1bbnUxOR2c6s zLCyI%c`yis?H)cbsD;t^5a|?F?`k3c@u+!(3D50{YNhgGR`W|lpQVTCjYc5_CBY`$ ziFCT!0-pArmHgoG9n~f{?k{3N{?2|{Q(X?lDA)1AL*<8#X93In=TiyD;;Xr4cun9#)hhGuUj%7{cm zM){y|v!(aJ5AK&xNl6Ll7Xc6Ut%MN^5IB1Ws2?+^kR@eY)G(DYMP=n2Zkr?@k#6Kf zhH}Y>ES+Hj0B8`r{JRwdXS<$=xj?%C`g45Xm4nQhC{H@NaRK$^UDQ@vIN?(?~AJL+r}Vr5RDSV#E}zGr);8kF6JW* z9F7v54p56laj34t)*IKg4Y$=gpv6mC7JU+rDjR)fn=0bm%~#H$_LnFE<|+6}Ct=Gb z3D#G}FC-|V2NuvBbUaQ!kgT%3$&&_MpuGl_tKR8poJ}-hL`5&Ee-g`i6Mg(aGWNgp zZayJJO{ZnkrAGTx11o!rSvj&`5)r7%BVe!@woOR%1RXQUw*p=VIr8s01Yi|;-S(B;sU}2m`vQLFFBERa9~{s-2|JN@9(2qI^$FLf~24kgWT88iCC@g z2P;}rAca+7*%2x|?uN?#g00!>vbhN#=E}gr4hq{2YaxT=X?>|x#GBW~hQOlJr!k5l zdnL$CCGjEMYG*Ok>3pyP&|RptgnXsOk+RFB}tS22P#wpw$=y*aC60oS=Ju+mRKZ9Ki zZF-{&i~v`^f^8W!4hXuK5fke`wLiZI^mC(sSKG2dJHaP8BloH7bOEv<4^NBq31WS~ z-CO?9Prz49TSsROxTLPACwy0uCk2&auoaKpTylp*B75*t5*c}UcsFDnj}&2K=hBNsbHw;3%_0<&sE|0bGO{QY%dFj-y< z4mU!fR>mkn?-m`Lgbzj;g<$)~dllkQ0{NEgBA0#bbQ3{s1A3MjE9enYW*RvmtA+np zC0%iQY>dFd@EfnBkh7aX8*q9Qll@oq7clGru0ijA$A=9!5r*FDSr$p8&01gmBLzedsQV5DlUM3LZhFef`3kOq1iJw7?502y|2 zk)`W1x zKmh!`eg!^sRpbwyY>q}TO-&)hMA3&SD~2VdK5$zOm4g#@YA7%Xuh4wz-5S!#z?oL+ zPWf3`VaGF#!l}<XJ^N)>J8|y0tD^`Q_m`~DR85RP6BHITsqLSvrRwX^2 zr=r-(Ke@9nl(3?M4)X`-RcFuiPh{Lp@%wol0MXdzS8UO;@ZAHr#~4o zU&~%w+y8u1@2kjNE6(k{N226~frFpqj+TsqCk(%HIAl3ny~53=4mXxWMGPt(4lTLw zZT57~2@=e2&JIXnCx~XPk71Y#TA`Jdks(L3uOlknDk-54xiFf zE9{{65KGKAH!}kO7^m;`aNqhqJnfb?}>U;vQKLQ6$1SKfg-DO0yoNm23X1HdQ- zIV>zJstsCDi2`p9S|4tHJ>&}eO!dOa?1Kda@P{W6K-vV5Eo(m9dSX;36U5)p5|6iGs_mYVxr=6j2`dV#8~RO|pA?43@$I(XuxqL^Tjgmx zFj^>PUMIM2USnL@{yCxJ#y1$1B=~@~@L)8z!F)zJ7_0ft47`qIeCQO)*%p%k}$>Z!{@=V_PC|#eY8o+irzfo&~>; zT=Eh8Q^Q4s?*DH~0;n-!M&sUi-I;1~9S17qG7K0D9?6CWrdp zn;+05#AEcWh<{hP#^UWccw&@{S)w9{A9Cw3Kv%v|^P-NQ9&z;i&z^1;04t$r5)60< z|6Ow1k|%(`F3rr$sD@nF!>j+wT*0@qZdq|qIqiOzl7>l)?_ns!iR#oI;L~aK@$0Z{ z1nhWA($xsD&Z3m?`c?d$e%+$W5<NT*GtG8BanqL>LV27a2E$HDY}xzxiZ-&6m46MR~uj z{dYq2^^1OmdWox$(p?bHHLuou;rZ5x?_M_6(`YXt0WYl%pca650tCJ5NriiZ^(574 zaWsgFPK(XE`0@mF|3PD#u*=K!c#fN1832quW+5R)AdhTTwL^8_5r}-KS%f!6=C?KHMfX}h-5fAI7a}^@z&9? z*0|2;c%m?N18ql;lasSMQjf*a^_DtSAxaViD7!&*;cF{4Vz>?nzi_%vCU}de=NRt|3~;KKv2+-v&~*IYF=eM#=kgaTeE5XOG(=oj zCE)$M`D6QoeT|vVl%ihhh0LZ{lcnIAoBnL26&eTa9O`G7-EWM(Ph!^{JrIIJ6(>)d z0*yb=f>#Em0{WvI9i=}~tS`UYEhTa)d*gW($;MJRggin3=Kum|aobj@xgcA7KkT>x z%CCP~3kh3K&5`2PfvEiU*UWVQK4P;y!oDE3r7D!@R5_LXh z1^EQC3n8DQA-HeBoH+aE#CUkKUlr%-pqTefZ^mquKgX)?WAvGAP>F(#5#{%R(`nbV z0Rw%eN)M)4uC$>l`L*gatG4p5QLaH7HTmAybmbdf=JiWh;si^o3XkqFa?OSmtQkxG z2_CeM$8+K|oFEyGCh1_H#z4Go9m9MLZ$d>%8;A4-z9p9g^j`VS)xSKV*D~h#+l=6S z6`B&CclhAxiYT4R3%9Yxg`lcM(@EFW={4$Rb_xwoxoVp+R*GTedfuylAW)l_`25;I#Fz|-@JwQON|Nc=e1f5O> zZu`~z`F&`>mE{^c02bzAidF(Z8isZNLKgRF5@=foe@;)=wYzqRF>vy}4JFxHR2^Vm z($xNw-O${snNmhGmebx!J!(xBx8*cWzehCqR7`_Y(ga>aqp zD5LG^Nf;nvn43~UAawwUcA$dpoWI>qgvjJ#-Dd{0ef{_lVGMyHOxE_CwabiPGh*jx zs^wTu_+5qYeKahXa~oru(FOlL5kL4PH8#z}p3MTW0GP^ep!sucqLJ_2oqhP}nx(bP zf}kXBUz+@jI9WSaQ7hpLy)C|?EOlb0EHlQYYed7`b|`w}%a$lPf{n-=9khEsQ;I4o zE^cnuUTnsJ8BFb9MGtT*|0)3oC836I(8GSM#mTQ9ExN#G&Hi7H0zq10SJ5svJM*?8!%4~U<|se z5Yr5RxrBtkpW0qb$N>Nr$U48I=VOEhVY)xddF$(2R#qn2wDqT#U5J^vs=j_=ty6&R zYAsFi2}QF+*nOcPa%s|LA5*(zN!E^SoNXmTKVGUxn}%<_7DK#qi|KBR9g#@%93ww0 zWs;nES_Zmq0d)70QFxY28|a!fUKg#J%J>-Q)90`kev5M@V^<$eBU%f>U6NKsj zE8P7>bVg>tC``MfJ5D@E&!Y(Q{!@A~5RVw5!9gc(dLOjU6egLEU^AdSG# z@Af(8{I7RDi*wJt_gZ`HwSG~^?ZoW_R(D2E*#qjup}|2XFlu;m zBCDj-4_Znt{_$XLuBxKK_hS1Woo-qJOhXtSgDuRI>y3DB{;9OoYj5T)fGXl>w@p2u zrt*rwvVZfbTF!!6)ll|d zjd^MscE6OgDm-qg4SWt2GBq#|RpQquq79HbRQipxVu_pb@c020MGUOC@U3y~kRd*` z;c*tK7Jm-eOVzkJh6u(p8cNiiY3-EM>1YF@%het4(2;cf`oB`a83k0OlD;P_8x*Cf zu3r`5&l3Mem&Jc_kJwvtXFbizag{#$>r2^ocZ6!^`i#xeh{gQZ01<4twCfUFZJq@* zJ%c+JuissdHLl-;QYfc8bI5G75Lb}3FrR9)=9$?6rKYF_W#zI zV`TM4xV*=}@i9B?HNn5C9yp;lsE&n3HkgS5Ud$p~_URnq>= z!Lf0ty>2%oHLR*x^NsE2zhtKrMjw5}1@T8V{%VuTW}5aAWTggYgWlF>NRDkYhNlpV zc1hXm-@nG3`OZoF+A&C~Y>Pm}mJFKi-tw&O(NujJE2&<-&|_?`zpz3}!#Lk5 zL(+NnZMMjY4({zx2b{_SOJ#*>Lb@T@xf=x!@FXBM=84q6o7UEH}X`NjH0I5WvAeJXCE zvaKU26YcsX#L_6tU?i0zH5B2)0C$aGXfDV$DlL65oMlxwSlH}Ot8Icb){4-1 z!sjtgqa$N+x*ADwxsSG?Ra3nv*Bu7#rI^WmA|JwfYmh)ldQYjVCeE{7__26M^ttN`=c7bge|oX0HWF3 zCX)#wI90o53U)iIy&_x^DCb_#k<=FUSR=ub!=!MRR}tQ5X| z?lTEm817%irW5sAxpvhp*rIx#T#& z2w#GXI~kOD8}4-6(nm`Ye?*ZnnUgAW9grzd(}&Y%rq)D1f?^Y~+PwY3INH=d9V;ucT!90)Df=-g1{ZW_=)6!>1i19YK8DrnzlMy?ZIK zP5tnZh7T@^c|srNMB5#9YO{d9ly5AccIbW_)B#@1Ji->*DuhhyJ^t z5s*!@pfGX7*0(GCJ}F$2@2zbZs(&Ssh5B5_*>(GvgeUhJ!dna_2CsLA?gg^QXmrqt zSFp*ngo@uMD44)e7@Ie$3M0;!S?6`8B?()V7`@e=|7>wP!N|0b618q_BASJksmAI2 zKEZ2OXOxLpp|;?X#-8-+W3Yd<#Y$v;BeOV=)ESkr`gp95zmLrP)nrQyf%(s3(0N9u z!3v|!z9?-DgeDyI)5|e$%%UajUGwn^u0LP-`N3hIqO=l^Eaj-^4Zx{K2M(inU2qrAc8<_ zZEOSpjAiDXn_J7i0)Zm;8?FOJ-+-uAy)-wMrG(~FT-HbbIB!5(HVZ3_Zj4Lmk3rgUv{F5Dcp{rQ z(k&8tnq2gp8NZ!Y&%xY*_jR#M#Qv}QNR{MgN1?m{&al~!;v{w|Vv&DwDho}H{1Xd4 ztwl5Eb|ZrE2WQ+0XD3bQ)@exfh>o?9tK|yVmGAIK485^d6*rgj)Q=ve2uSL5yH+-y zVDMct$zLj0z-)3za+prpl#&ENW|}!5F>uCHZkBno!(sPFe^r9YT;^D5D?TCe>2ECz zl;zH6Ttg(}aLE)@^sk8Vw>E^@Hoj<)9(J1%ya5g>vV45pS|__>A30&!3VpzO7iX~0 zXP2q4_L5&s#ac|=vNFMK8|=on3JaA4*L zEvZ0$!|${6GPbuXlX`B5x~-^BC)slnEHsqB40Ez19lq0?n;+v98|kUW&Me=5FavO! zp79VoJq^)XiO#uJI=g=H+DIh^GzkE}xi8zX0#^F3a-CU9b0- zS>2GbT}GI3uoI~NXBKN-KhAnl2#tpVyvwT}045_!9lw|=L$@>e8A6GLiTMIxz8!x7 z@GW8k5Nyu7k^jc+Atnox{r&w(CBS3A(AfCp5LZ`> zrixw(tE-;--XoeIUyl?7gvCk$9+e{zv}sA;u3~a2PKoFU-Z+*GlTi-2r)H29QWZnX znmMe+j;mF>s|O%_fDu17?p*kiv`OJ!b0s>o(RJwF>%<~ zbcb+y^*g+SP+boK`4Fd>sRTVSk00^)TJJ}{IIc2d6DX4u<1j+OFEq~YT?ypNtujnf z$a(*P-O5+A73&05ia6lBxOEb%+Q2}!ALAGeHq-u|$1k-^xC#VkR8*7=fWW*lCktMV z$AI&by1C;wLgGXUuh?YnQfP-ZqB37mI?hy2G6uKJd!)@U$em9ro~c)25gyYxNw;;q zvS`&IDE&OS+uPd<8nk1{{~8#7K)h;|Kcf!VQfr}r5z^4OSXlhCy+@W{eShubG-z4# zcjFlCTRG1)ig^0yd;%C&N!;HM3oxo=Xso!|b+V=$e1Z}tB_zDEvC(6IH+mgXSKwjc zS&enR;#xKqO&|E`uY0o#&AD=e1=d0x=^_(gD~?BS;Lm!oS*8_2-X!;(>!niakT(UafX-CfowMOn@7g7~YacvCV&u5% z9AafY|EvxQ$Dl3ozIhqf-53$2YtSRFLw~)h%N9SvFuGl4Ss=5crY~M$wW?St%Cnto zpe^ovokZF3rin&_Q*7#ea?J|1cQm*e{X+y+`f2{r(b2K8wGBTGZI^xUvye`J*L@nd zWRQEZLj{uK_g4>pIMBkz-w=C04R#9W=s!j`aA}U@2cQjxw04Bo#ryGI- z0h1I^==jknLQ)oS|54NGh+tTOcK*j*pG|5nt-W~#x-*!M{|kdolro~e0l4NJ_-1bpJxN348& zDgF!V>sIpeJpen!MlyM;?|lYQ`-%sbJjKv(dfa?o%Hpq(RzS?QhV5@}s0LMQBFJEN z-qFG{w^FX3f+ON@LONy8r`>3M&|tKBf11&v$i1=s)l#L0KP$8GjvUKAkMDIVJLHHd z{;F9BHFZX{c5V@aKkK*l#<&WN&?Jg*x7XAbhBy9t*89LjK?i=0)=&GASS})n`XDI& zreC#&Maw}18NKMgGV#1%GaxYuYlo(~E;l_tvWhF)O2#!C*DoX%_ULI+?TTgJw?P+T zY`EwXc(o||lPQV;5JJg)926R<)0{^^v^)ydoOcpF`=%;9LzpH#D$RYhs(AbZ5$ko`S-0pN0 zzJ$wsW8k~7V=y4E`~E#V9dtqq(%3kdnaRX_`Sx;ntg-kWJO<*Xcu)W?Ro|d+S!hm$ zpC|wW^ZNRF07$E=K*wH8+D$V+tnL=yV?Z=zp_qzq+S?xcx-H}ob;m%fan00 zzN4d~+t#UtM_r+gXdyR+N{l*x*4Jkz+aZByoqPoD>JM96wp7!`IzQs4OJcj~bVKrE z<2M*NWfH?>YVnvJ-GTalliHdsUZXZXRmz1xJDAC1Uh|>(hbcy42DU%%u~oz#wHKcW zgGh|%8MpHkx*yWaN}QHW6<(w^XRdF4SU{)k6_}cy|Fx~U+M}IF82(BD6XSvHzCx<@ z?IMSU;4$qxGsZX8ADF~~BADtq4dt4YKRG2>zhHqqydcV`@@Hm#zY3mqxKjotrnvN3 z%Qs(#8ZBGmm);6r)e5ESRZWlsH2us>k@ir|o415SlaEuB;?M4^a*!yC;h*Cp{(RU) zhf5-gMR3`~^M);Js2RFdByv3G%~J>XVZZ(rpINn(aY&;O#{+X#7PII_1HB?l;O)I5h-TJ|}mW%1*2 z5@jOmvzEx91Z84no9BCs$6Zk;$RM_9KSH{o+gMl#0rmwx!xi7@^EB}qws>d+3(h*? zX`Ms5?S4}_wL2M#vg5Si!nvttISSrPo{ zLrk_sCGGh$nxAV-jmTrHp$}RW4~f+2V(h@E7y`v3_fp0fUNggLcoc2iqM3m&wOz-W z8(V`8%SW}g6qu_kL?pL&rJe9|kMOAkE{V1Bz>J!AVzYRY^WFqmUms5BJ}QgQ_)ld5 z6ODyFB?E&hhSwdCBQq?T02RjZ5!6#NUBM$X*b7WNys)E7s$1t*ty*QyDsy$V)Nn5+ zyeACSio6D4_>KR{o#3<~qG6=;8M{7v*A2?&uulofOEzPrGIU_L0jOi7Nu207WXt>e zxA0_6=1EF8ay?o7%a<>pC>^B+Efz1V_i3D_O8fwQasMhlHWs&j3t*@IKIG=-r;_l8 zff;S$c|dUTf;aPWY`SYZ^X_&IKmjbgUhIPdSuJvSZ;BnoHI^`1#EBwoCB3S_ZR-M?R2xaBnQy;GA5!q6gM*^k z9{>4rU(=V``<2{5t#{{4)2tj+f@BP4m*2tyGAk+{7CX&j%JI=kS#Ho`u%cnOMisN& zXP4D7!5L)HAy;?0#Uf~|3rRBeV$hd;!KVZ;DwYDMYLG{CDCM)?jmHw0Bny^n6%d0% zCD7E6dEU8_z=@G7w-aL-}dN&(}9Zc!w0+PoAUW*ZkcY`deK=!4-gty}ZEh( zYNMhOqxYGEo&Ad|2iXdkKG^|`OL|@&{`(9SSAoamfBKqeM{><1Q9lyV&>RBS9ROCw z`>A}T=}MsnSbBbni7=rAwxZP8FZ~)?4<~D3eyU=|YI`ZERa?DDZ%|Jr1q~~fQ9LWZ z%wxh*@#Y|`19Kfy?%bM-#0?e!X(W{jj>L-CL!>Xmb&BryDti${ilOeBnzQZRK# zE4wubrVDMAFnT|a56ELoHb>C$%WQmq!7688@{-Zemt-jToytk&Xb%1nc7p}}t#iRs zWDfm!A$Nj9g!1~>+)p{Y9SXmM1Q*0f7pJ$9sa?Spy7I=bF0Zw&eloM(P7qc^O)QIE z2mhmjW`4l<>*bpV{B1_j;?D^q@Qwd+pX~?9BQR z@rm^XXlS{xrD{DP$UO;NcpCrn`34YRe3{A#;$Bnnu@X4x|0Nd7T7>^^(UGO^{o41B2Xc{m&~*;xN-&xSG2Whzd3y0oX&DcLV{mb91X> zAM4dDYmfjh2=EtV=447-NKh6Oyu8a+n>XC~WMv5p#5MlN%P8M+S%P3u0r$EoVvj$Y^ZQUcaG>prer;c5NM=;>lQf4_(3lP1p)?Y3vB@sFd|S~dhPnuhaAi9 zLo{tp_1^Y8SjklBT0lATOmj04ssW5b;L06Vp8m1+{VWY+PsEYNLu{&+5}^u)r)49H41cuF2bu~R*AnqscI4n%Bjqg z@q4s;e*X}Xu1>32t^?|;&w5`g^sA`RIJ5ZQGz8rHi|4tJfa;qIUPe5&`?nx;mv|@2 zNqznO_&T)@tFI|WtlB+P`%*jV21~m9=N=07pN<4@At2;jFnohna|)awKx+&Y>%W)N z0v_hQKfDY{f8Fh33tmj_-_+lmlSgU3fj@xY3s z`w>VKY;5e$oc-V)-w%(7h>#>rl^~dW3bSx=i9Zf~7#+LmHUAYiXOQC+-f9OtXw4S?ENeOAK4!bS!LIsg`srUXd^e+#Y>dZsDhsdcUq z?d=c$^>Puj5OjT~cE}Dp=FIQ!<*@!A=li%VJP~<^;|WY2yp779zyEz3MW1!j#8%T% z<*m!FtYyV)x*a6S#w(o6fJw1un#JsyQgq3EDN4nqrM9Vx5ILQl!dmcGU~5)H^GLzk zt$2?6>FYJgW5c>ESLPt-I$wW6bP}@L)AXM1YK2D>O~!?4u8~_{hv@o!Lr0vFpNvOH zzO)8w3(fv)MN;8@qKocTb@23Ge6mN%;N*=)dkNzkZ;F&V&MCZralbR&Cg};NBcser zF@W$33VH!XDd5|ZG*&k>ECL0NQQhV;cCazPXSWb^z^Z5W0HPleUQ*Drd0P%TCC_7^ zILvE3kY7@R2dHiMWPCV|%?mlDFK)27g<4bwS#t$mKj9-2@_)g)xlacrm14=fiHK4y?RAIO(Rg@yjc+@qehHGZIYN2ne-$jF~eq06L zdi^;++^WQ(62}tj9GGr($I_|t$OpjrMIY3n%%oGI4kXGS+)rA)2R-5xO-ColvkN9Y z&6C0wr>LCj75@vxwyfzoxx;SID+Tu(V5KJD2Y>y4FTxQC5b@OpU%*{wZ4Oee2JAjT ztx+3zA6Pd1yk2vq0jDxm9S-b7^@SSQIdFjHXE+bfobRPnx39@R1zP zjMkAr^k;=ZPR^#;F<~Mo0#Y_FV^oP$)Z_j}>zrmfB)CmXZbj^OGAh6qoLkqoBe49O z{4-XE6wdp==6)7d57>&kV3_Hb@b2E_mpu{|p4aQVjkB5VPq_OYhliouggC91M10f& zDu~#>mwozT_1#eA(9b)%>nI;`pA^%Z2<#Pq*Aq7B$GX5P?NGCO(8dviq8r*wxlH=P zG6bLNlkU~4=V3=(XUyehY&^*KaopKa-pYJ`w-VlhH)+M&)Id=gYec1^+cZ>Bnh;~U zwp7sOH_iDGYTEpq$$IyyFH`4|74fTLC^;3WBkL>x?#xeW7Y53r(4!r9s+!b>%t8Q%|kpGFAN z-pqR;V{Z4*?kZH#Qaf^mD#^qyr0#J&Fo8+DA{1#N;^no;;hfF8FFa2~Wne)Arm#WT7GJJHwGqlNebQ66Syl>-wpLa?{f&^FK=Ug5m zm@(@2fzt2K53V;dFh%@DQZo97IL~miUcQ1~jO=i)F}}>}kc&ZAf91VzGbrJ)s*dq{ z+G+lwKFFE-CxLBtYg0?FURg-8LP!hNqWj04W?;8_KFZ5B7B>Y9F*g^{dd_$Df}%Z% zMLicZLRLE!XOZfs8M0XkWhtp|1aZlQ3+1bZALCQ)G&&EoX6Oi;eQ+YXX~Irxhsx!_ zZ<+kW&emzv>{SSZSY6)?lOc-Q?wxoqvllyEaclGHmrHs~g|KPykQ+Y8l)Bq=)YskW zyOY^u>WxLp(=BDqlp|x~P|Lg3)Zj1zaS;9vXZXhL;d_E#i%!&H`$%0p_554uUDif% zg4?#p>e{aZ3}AsKHY7p|ACeO8H4N^u|9~?e%HpGGjo1C*1?1ixd+Lv;+=+SQH1Yq; zXFWCLBA`I$62fT`aV*P`%AImRLVWK?6mOpCaANpHvC1I%fF@2h)8ohMvAY~aFDCjP z2*FqBFSryEj`NCxG=U25`l39m-M1<`Oq>0bRH`MEOsXt8YqDzTffMY7FN)Yw5sb?$40;gKy%qhpNtDAH z&9ZfPVVej>n3^=0h)>HT&u-LAUK!{6ilhu`dKU80>9?nX%3v^FxfBgRq|`i9zVLcp z^J|@Dyj>9^Pd<(uA1dN?8Iq;pez!U(KisrzYoB;u@~^dH;p|-V_BZEtU8g!Z{Dbl0 z`)!Zlu-IOkP1S6E`7QrZ7lO{^5o*Luiprw?k_vRE&YqX=!~UGtGlyfYCgfBySEGB*Q^9;nk7MW=r4l$ox~?ry~Ou%Mo{AS9w12H_@pH8+_ z1VV)G5aZ#t;YR-R<=8&ca`IdmCdUGh;=bil#=K6lE8L!luU=mi<7c9&9qVhKbT9BT z)nq8N3i)!|ZPRT{zlK<$#c;m~wsmZ5-y~6DsCOmf{=aHX07gsq#vF(-np}hS=~unS zXlPHRcho|laI8&^YHmHpr1NPqe!HU}lHX!5@&Io-BjZZeG z?mo@t7u3P&_t`e#M`(`u&nEn*U~LJ=vd)l5k2j{DRF1RL0^jqKx76kV;LIK|E*&zZ5ns#admtA$=e&7Q?Y=RmibiyM z87-*U*?PNm%iT9iu=6`feg_$Z^|`Gs+kJJ9p~ushx)?GuOs63AdCJLOV(ag-%(wUL z<6Uf1nMqftV;t{l;^LqgvgG=C?+Lzkur%PE2GLP>iQC+q=84EGRonhTDuPTC5HuIAo2Q7xjQ?PUQ~W)Hm$bBu+A5oW6H{zD0A5vAsA|%q^NPyWubhT^s&U zleVsq2Y!U>o4_#WZXdMomXFreC#$g-_Vs*~Jz@KSCwpPDt)?IQn});$&sKW&6`! z*T7Ul(J0DXhdYhfJGz&JXt_XP*!5bQ#5sI+i){iD@F$JT-?92!Y;Q>1$_rdJ&i>y8g>V%c z!yi|S_0ZT8)%?g?R76DNb(x=L7*srZ;q6tE$*&DkSMf({>l-B{&#$i=ze?;`tRqoS z_L(wU-tCJdoXR8WA`#dXY=V9(Bj29#CXY34=Ph$C7WlvxLI*f$ybgqIZq{+=#wAme ztJsrvX}d$pnpCqJz=qhf^h-rr_EtlAXS9Su**Oa+#ociBLS{1i)5~I@u=>N`}zmfi$@h9#gu6oIl zET_7N`w*SbBQXivD4G zu=Nv%eAOj?)Rm1m({Kw|1gT?P^!tlTl=GY8VNW?-O;H2{Ak^jP+q``+k1|)dT$YzD znA?lo)18-}Bh^=;X#@_IvCf)gjgHo*TYFR^tWwXx#l=srYL_tN6?toJ{yl&YR zZqQ~iP*wKW+kuP6Rrn_8#V@l)$BnDT9+k$ygS@ja^bu4(n`4hly4#I6W(~Y;;3RK( z2zlp23tx^9T++Iu(qU#9;sx~i*U~)@rBHUByUWI6wKe}n{n$yl z3W4lcLg}r03W9Tk@-nAKsB73ja_vhqGiV?XT!Kq*u85afxemFn<6<6|FmUCj%5Nhr zuMdYqyK>U+ou{9^=E>|+RD|bN{=p*`fg^{U)dCwo37~Y=5qy(ce&IsP{c-)KE4yzP zn;G^{^PV@1i~qAwEK3kIwfNd2dGVkbSkoFhhLQ32OJ-K?HCd!3)vUYXh<@4IXIt`) zGdHKoN3!%h=?|nf^ZdmcJ-5XB{jc_yK^dYo3$dzKJex-whSqb(T~ zhcQr4_p5%OY4lMOkl#yP8G<2BUfDLYkk2MUm)I??ujnsI#Vf|WHrPV6LZ96vBW)@b z1VW2DZ$kMBo*i$WV15M`3L2d6=GK=Zz%cNX}%KqoTeUCkg~Omzc`n&B}+ zqEd=QR}x>i$K?1p6tREqC%AMCe~B;Pw4`cd^0)t2^6kcYkO?`T)uVZOKJOgOPSV{M zC}JLHa9X~J#<#>|QN*^;z|YmZ=3nHyq+$mN;7H#5>c$UFM;Daze4I@2?XNCsuSbqU zby)k>Nak+6_Xl(Xt0bI4az7Bh@bygSD51DS6II;Lk~)z?S`H9Gr2{fSw*rCi&6Ijw z_l}yM?w^Vn8BW;OuN?m-y^rD#LBFn>-{;X9wsg1=xRH$S+dv}DAXUB@1gG*>(l~cV zPfPv6X?@{y_VgoA%X6p2_;9f;e!D+YT5m z(Ds4d-ab|b1yQAb8~ncYQ3cBLM|)*L-Jmc6yLc(Fj#(=#uWer>P>W?-8D{gAbU7(i zw>1oxB2-R-w!|?3i4w-Z&0l4D9p@S~j!T2?q=nNcIQZ_#p7{@pYupRTneDMNZHL?e zcemKNTlrxvB#N_y&6lQ6MsD3Fp26eLzFR|#;7g@}=HJ}P^YN=KJ@cOs^qOH^r z4EU&e?#`1oR5e|Vm)`tr8o~S~`tB+(y|f=}yWsQFC+za|+A6&jkUamXH?tLIWi70% z$D?&#=DX}=ew)Jj=KhM*RTllanrGIWX3+ew`Vynt z`{(#W*Uyf-77`*Ze^;8G`9%O%EXSFck;+T)7Jm`@YsLH4Qd6GsSZwo|*;xyirn0qY zu?RPu%MI4fIrY+R_IPcGKz|W4PMTMK&ldXX*rO(%j0FDbi9KR1_kuN+Q{rI4`fsCR z+@FTMdC$(Vv0B|f>DK0Za{(uVN3xzz)EG+jkFH^h_*XZ#Iobw$K(UOR&uL0jloJ)>X5Ax92qOb0a{4Qi@>Emk~lXc3i%RVTzze=!+fW(=$(&( z4pt~sVej-U3tVHIQcv~PnQ`y_?VlWWC44a zH1K?@Dje6$_4TT89kv5jU$3nGifN?)Va#+VBqk@PtSsY}sq)Kjf5h8?MBVHf03gN9 z9-ZC&+S73OBH%Zai(}B>2rWyLh=3q})DDL#qD=y{h{2q;$%L~Tg8pqT6gm<@`0cJY z?c;mR$l$hn&)3J_JYemFyKUwzM1j$tIsI8OMI!{8EL*)KNn{4Wi5{ua`|1?;19Us^ z-0R%^oQjs`X^EPbxCOsUX5vq1k#h}Ur&pG&VcQgtoBAy$ ztUx%4i8-%u$#S|0^qMpVPW3r*j0&tl|ER_4BqA8oFgaP*#Q&t%#PTF!;n$(X%;*Vs zkNW*-!1)mBm-4#(H4CBNMqgJez82|zo0~I||Ju+HcjfR$pLECj^D@Gr-V^e}M0d9W zwVu_8DS{o%idh*A?ID^>SZ%F>L8cWx!iy=svrNc4H0Swz+n<293`|U0qFVq1)O0^T zd`rd=m*i$`1yZyBMIf;_x=5LOdgW|r>XDq52+35-0FimCCdL-l)bKB8wBoO3Qv)=% zb>1#+eV*x?71>Q&!<8oLDfK?~NY!REribD`Vqlf`vl+u}IS(HL6Y)1|woWgku2=h{ zuBD3fWXy)B1x`B~trcTeO}Fb$=H#Q-;6@wfhSp-z3gpfJw{9hqi!bu_W}7fCI9!vN z1k2h-_^L`><3oU!rKN>MLFf!*66l{f5Mn&~Pv;;=$}rsz+(KwyiM|uYS?$biUHpLY zcaplw7L+g)tuE#{ZI5X09~X81d>v1dc1lujHSs`S=ZE(!xxq|Lvi4XkO2r;FQn|uT z*z@3O>UXd`pGd@&VydzoYI)fa;3<4C?Z~QrL@r^u-lJX(#i95Wgo}uKcOW9y?06!U;2_ zA)uV{83@V_4)m^_ZyyUg=BV5s|7qsf>xrRc@pcCItkCAMk5y&^%t2J7Z~qpHSfDXU zcL+Ew7}J(Bcye{C-=JivDtRI7X^HpLazyzV>W~`%VExPGXwH;zDz9>t2h9Zk6vFvt zp=59dGg+yBy>h9s-eJLacDH`xiu7;O6PPSV3#8$JKD~+KLi2^)5?orvk}SJ9fq7t}U5r@fSTBfG(3R;_b8)AQqkbF8i{ld!NI2SG^a#Y9TerNK5ULU$}k? zer|K3u`h3Y-Tl!H9+fZx;TL|p9PE8~OL&AV;$ABx8ml`TdUa0^_f6t8q-3H=v* z4nyamDp+F7D_*&_a-0$VcS#WZU2;d)`KUJ?w$$-I(mp3Bmy1u?<_Dgmc?4(T$XUF6 zX$EM`YItB33)nSWqk*70XRum;!>;Vpv;#*a$8LBAuPxq<>~#>UVW=N>kMw=OsiJlX zG5*85q$6S>QUWy107Cg(-{^^gu~5>95E&C%cjpG@g%bTdLB+ZIAJSo-dlQ*5 ze+dfjnw_ylbC2?%5q=Nxmv;^+8nWjgolgvI#)sqUpq50u`+H~Oeql0<;tuAI!n($B zh#fl32LF;X5PJBmpV9sSUR>OOepTpgS_;LSz3pQ{U$Ad#{CNx~!`j|`cUU0T zdox?R!A2#LcmWqf-iD;)5c!>aAkn*CDa`{61$)n*eS5ZKo+zbVcIG2&I=1x0#^k>e zB9q%-ZmSQu8TR(hdZ;PiZuFhY-qing#mMjcCel5tu(Bq85U^P84jKCt_c5n8SpR)X zCG?#|S<^%Li|g+FI1ZzqZbIQzEpCU~PwpDA#Cc{W21SQ5YKZ%!8U=b&QDMC9i>7+~ zCTcHaThzN%`3?$`wQWzlD+a!MWmwvwn%Jy=n*A-}v48GhEX_RzG4p+K%kp}ASQ%F=l8y7b8VY16vIl|q8%h7kJ~jsF#TBv{ zCidp^{FZ=)!V+dZ6Z)pw>L7@w4x0^I**dg%%-D-<)9;>`J!G5A5@x`}cUAF6(D@MW z>EiU|SM_eSkndZ(j{=;J-(5O9>CB)kxU!Ob{-y2h0ChwP?Wf7Mzh_^x14pf(ohmc% zp2tt9g`ZfN*s(^qSJ|fCOgr7_FAc$SvRrU#un(HBt~99TxW@fnItX+iX?zTFQ_Myx z7Y5?uu2^2Ge#d!?!XdE>5x%@PLC1k@wO+`7IWmEe|RVmo*#&f6A~!!2#!A5ztp&5LX; z7(zvt5^6giZd=hUy8l@*<|bSJawYu<^faUh3APW^q`Ap)l7^skIH&ce!6|V=n)a{v zYpS+Mnc&|}T)&w5$ZcpOaN6cf%?p3a`-|yhhBdv~#z7!?VzMRE*dc59LAuQRq%n1L z8a@SgMc%0~y?j8e$A(L!y;p3gFm9=)r!W%XF@1>Mdb;@YWiXR^rvJ9Vv-11$dyIaP zCI*zM{p%jpjQRVo-!p42QTyd@7;f|2CHf%SMk>QuwdG@6`@15&iEY zpU^-Rk+1G9Ee>qEIgUPFzdy=NPOtj3k*<4GCO%?YvT~00FUvS8+E9pU0qX|OKYFQ3 zvYtZD;*K5gXZe0F3)q+7%&+vNnT`6VGw-x13Ox-Fo0DY9G6+;}EbQ2~oGsCYYIB7qH2@001b<)hw{BbbgRa;3==+(QE z!+PSoBv#7D@#w&s4VUWJ;$`{zC~Nu%ksZt|@&Wnqmoa@8E}gu_X*HYT&Cz#B;9_JH z@xxsic_palpfXHmU%K;@jjMCH`W6<3v54ZrhtrXm_-^yb=@!(eVY_EC^U~US)oA8* zxuia01(k$mUQzAUbZj-$O{jV{VrD|`tI>t`SKCeAnCy`Nt$2yo@s;+X?@Q=tm|+nk zYTl&O5D7P_<)amq&GAql4_eVMV!LLlMlyv!!bZ_$95TI;j7rHNCX?r`Zp(GdEc&}p z+GNtd$~Zt7v#X_9y`QKx8s!@_w`9}a+)n2t<8u?uFJbX_v#G~yi*3< zZZ9XQXWMB8&u-7RKAc@cLwamUd7Fq7>x~%nd#$x9>ewhA%t1gcHrZl5H1-it;CGql zzs!XB(I)r3J6z--z;Hdn(5*$kUTu=uB=Vb=A+vGr`x+Dlk{w~qbl(J-@jL1-UMf-c z1B0$D@o?Gu4Bdq#uG2lr_%4ElWcIkPBKQrCv;FPuw9okBG|R&p#ktSaZYKBCd(?yY zA-CVIFl9x`uUzwL5#!%qnH1c4;#Bpsub{jS`ma1G@S{yvJS0i=uj#xf>N;Md(5TdQ zG5pZYsZ3taY%`NnN7Hz%X1aTL=@k+n<0~-FB14y|Rif4VH#d|&SN0neh#Xb;3^<;n zX=rMWexdxA&%8w!fgE792UBRR&o#oWvrOX}UGDpv3pZtH-M+wJbXy4U)`^ub%1GVi z5W!Cf!f##LzCJD`23aIr^y6BMjJbM|3Sj{Mk7R9#mhHbzTo@K<8ovc|6vlou)90pH zh*r7GbE2kua%7-U{GF`|jg?Y*1J^Eb;oCtG-dufGWy{kXpA#;YAu#RSL%Xu*G&^@XxS=bFOSC_QxkT~ql#w+ z?EcO}y%T@8V>#x8{=N8 zB4p_5l`8pSa0{-4ve5r;*>ldjyq5gJ&qGs#ibYsb%KeVT<{+w7baB6g?n8AWR7|vf z>5@!NJDzA26ypWHBrNbdw&EwgmSRk{*NLjmn26uZL3-F*e)QAS9|8gv+p;wsTR9Xf z{=O%cZ8U=6)VPX6zlu-2QBtK!wEC^Jvis}GX#VfJ9qXYobcFvMoOB&8#g~ry)YF;1C<&-} z3R~V?7C7InwOxGtF5sQ#VyQJp{UAHM~Z6LF8l42GJuG;@lkXTCFg`SF{VeyzK|N`kq!*6O03PQ944U;BUS-vj^9 z`~Az8z2){`02$hKornGV{;kuun}iNsHZ`>_3&J!{nqS8cmu9oNXVeyI?G|x>gcA`2 zJ^R*L(aG*?{o?F`5<3O=H)I5A$wdZK7V5uyZBMwYVtBQ+o6}q#wJo;oMPbFj6F&|w zV~2oni7FL#GEv!&?v$yN)X+1F1HZm(lfF`;EJI)rryiQ2vI$fiYR*F^fhMij{#ku0XO} zM`J-wxp)X(R$n*%ZoguGRQh`NGkAnh2f5u*>FJ8pMYuupH^s;CfF1#ump~(2gDN^3 zALKwFSD!vW8Y!dd;l#Jh>QH%(mflg2p7N=<1RV{H>dJN)($+aFq@n#YjhpK+YG|$7 zXp=98M3I^Ax0nugmbF(a(O1^W=bLNevfMQHTt z%5}AW&(UJT{#zUN$&(F(=DN2vxYq#X1LV6QZ_G8=1hPNor9)^SUc2j&e(&G;ZDtDj zho3k$H<#%c8PQs#DrZ=nBbk2zKTh%) zP_USCsMiT!+w2h7!xqnz04^Kfpk<`#9Tp=yhMAd~nwm^;G$Pe57YN)tX|ZUgg9J{o zue0REixj2jak2#(dikw2yKQunZ-V&D57T4K^x?-ca%S()qZPNn!>w7Po`)hnw6(PX z3--~*>hIt4ggqUAWX9h(=KI8Y@@1KFo&O%|z(MIyiZ!*?fITAUzdcKU0Sqxl;rS*x zV`E9HtG{AmGBPqg@Y=@Rzdy?JdmpgiYk3f+G3|+Ie)sllpk5KYqZ5A5{Ye)=GqXkx z=iiCg+}v+{W(9YEF&tXy4dd&+T8C>Cf3bQaC*T6{`Sa%;yF|d2L0(?=ZMbcdYc9zB zC!cc=%o}e21tmb2rNutBGQlGu9APnF0tB4+Hdnhw+-;>%hC?19$vytv{^3LD$T0Me zaah=JN{ZCntem`bY;%XdoVl!j>Y@3+>67~aZFQxdIsGAWZV^xq zhX;b8Jg|>%fA!Y&lJ8?Dc_bz#{!``GUi+tu1lY*n**Md+|MwT|K34WJVj1Z=IX~Y# zy-c|e$JocF!+0lI>?jc3XT?K?BTNN;O5*aH0h^j-HWm0l%97R>DLq?r;O~wcod={3 z0Q*;MjRwBMPau%jWBd15!N+Ej7b_}Mj3U_lr6KgDuc zQvD1BD-^|_?P70s4G_PCTO$B1Ot1MrJ*YQQTKw;W6L!K~-Q7F(u-Sk}CU~nPQLKiIeh>X9kbm~~ z7l08-(c6{fon|1csjMt4n05bZD=gVm z_9^)PN7Gk^MfrVQD@b<^-6_)DCDN^kgftQoN;lHo-Q5V%IUwDQASvD5{T_b*=k@ZN zmoxW0XP+Hw@4Z%(T)tNMC17fN=Cn1R=mwlKpfkfo6s|y*+Z6sE2^JSYnoE})pu~E% z_Z*D`b3LGD5G`{KBpBZIygA!^>8r*7(WTaLjf(Kv#TqRNCS_CJRk6Er+sIV z`=L9Ng}ELE;oJ5CZx(}rFJmY%rUXEWDHjo-R~Z6}1`4q(|IELBEz>Fwz+*5c_>X@l z9Hb;GC(gh)kDHYp-hgVS2m0@OBUNlVfB=W zC|bAy%^k&9mH<>jY+_;**8e;6Sptb{HdFQ#!Ul>Ns*RFVB;)qM@PgaSC25s<(p$ z!ut1LW@0Stm6d$u^K-t-MM6Pw+e&u=$1U=7e+KxG$~8jc|2w2Seie0fNe9;c{|cvQ z89;MEkBL}jc`U;i>cGTgd2&0MiC6uCt=;byxivX^a$?0v55&F5gqV)_219=-$4zVx;Z-o-&P_hx7lg> zf42SXlDOdF<{>mYIhB>Rz*##wI=)-$0E4OX^TeOK^PYvMUYTqB8>0Rbsz3)+v~s57 z5C8X_ud~4YAKUm8U|p&}76PO(dj9XfWMJNP3=gAKvzFnOGA#yQJ}YE>5R3OP zP-sfxw<`b)@Ziuhgx&sq@RvBbcLU!7USrqW`bFj_DiR2cGZ zsU-e;QTXgGC>xzFP^#G*&jY+wq5pGL6KOv(UQFxK*cpMOAafL`(EN{hQAS5gCrAvj014wMIY0@b%?DhLtJf9Rzun- zq!gFKUq|lZpsT<;LL5-$8ynNuV;3DVBtN?WAYu%p?Z*D&7)5sq=i~8-M(IY_Lj&llhM8$ zS$4Lc{E@VmY!CNVZo7w<4776OKr08Z>AQ<$o>svA$AVcWJ^2>`c1&on4`zSm0*)$R zXiH0;kM}pI@RGUXTo|FgKH;h>gtvj7XSY>|L5&Mxewg(1TL4q2W7k* zNQ1Pr=DuWln5Ni|gU!*bEDCU>Df}R;S5;MIW!dgzii_^wah4fdy|UER>~H$-Ydw5e zZD{0eOv>(^)_Pze#%d%|6NpiB5Iv6zJRlw=aP1BSLHfU!lu;ksz65$TxS`!3?3D8E zNR(@+KiUOQ;7YWFuIBg*yGcS07VR?{@xxJY2jKH~*=H>wNAvp-Pxbt_p^q+LIQ|X( zV0Sm%vr8?Vmhi&x+%JNHj?J_Fnm7^YO-zOY2CqnB-oxy?P{3&(FXs=efm8Yo{+V-2 zOw8(;Dv}<{JYG^8OPG?!>~p;*Wk9<(vi`VIcc{Xc7$_-|fl~}pY^~jm4WKIe|9>n* zo=;7jjEumwD4uN&+X33R^K(>mbbQ2DXu_O8MCttGL{?GJ1B!F6BbK?q_ht_;i;ZQ3 zg`pzPOZMTKd&s@d*13=z#GBI+ts4mZ8S=*Knzs0zQ&_PV;4g5yBxSU;Ag*-uXrGtl z+wHWUUcvrQ*YJ4S0aJUZ7l8bSfAGVM(Ai_oAh#{{c9kiY8M-);oY7xMPhKc!h7g2@ zCNOKW=r+am8yn`Myej6&`wSNB%fg6>9n&s_elf)#_2 zPG1pgXMIu>RI_Bd1k)vp^)}>P7ja+ad2&2{Z+vgNKb4=OMkQdQc>TIWd}|BjBLTcD zpQ`erN1QsnkKW73^!Xv-09D_<7{HPv;g-2l;|L4d`8L-Fa&{tqHut0Mw-u3&tIw1n5?PU+OB z@t*z^*>-7fABLLm*inpe{D0wJ!+nhSQRVGp?UR>wSc`iqx4-4mbY7h(pB0MT`e7OqW?~u z0mnye{v2d1{$VwgHR}to%z2=GayVZ<+S`k;`Y`j^4Gq7}a^?`MPLF~_`tE?&c?N8_ z5?z#uGJ*6R@b5p1+pNG+J+osjx4K=C3OcGxkg12{akIV)+8+)6c|v~7T#w6OPAM_R zAHB%0`qh7PCDF$(Qzu@?$W;3=9eeckEpOk9qboaN3vqTY*}4IY4Is z!YQLxLMcQ{QjngAK<^<D)6srq z&h}L8AzlEHm6N+Y?!*AW=id%kT>nSQsG%o~iIe4~qM_lq_O7YTtDU#h@y@iOHz%DT zE}St9dML9y7cb~jdD(3zA?MTt60;qpQdpQ3u!oneB6A@%Wp*j0uTN3De!2bo@NaeR z$cQyy`tJJTn;RfvYie4sBY+)D17z-~seR*8DK5Lgy4@?7A8l<&U9px-@)-dpccH9kr4o7k;(-+wNT>1-yeYvul%J z_8Lf$eZ}XpIzjp-9S2cb$%1L!;t3LiqDPkZw__h~cP{PoKo6 zr0w4ElS$Mbx+l*yYc{rN!m%c!Gpo)_6&%+lQO1!Et zyH+XuS=H1l?rt(3O{ZC&fyVh*fDzn3jr;-Sq`$KTVDB{3(`2lB-^9tn5)noMGz>hp zX}8ZMqR@W}enVyX++z0S3$OjQ%A~k5BO_y_?O2vLN3uvC?IoQ1AD}A7<(Lh44?NfV zu&SW%atYZD-vW(^XQ>gLmvb-X@AoR&($c^@gE=3NQ_IPrI_&`ja`W@^Z8w{#16ZQBb9H0m7MmK-i$KpY<*Ed!zf# zM82&=7}K)|7g+G**pw5e7^~0|)dUQ5m+-ngSSCbTL14~N>+=^iKilaV{gs;cgkAgT zIbG$QQgAVDCy(6Fp2M{5+R*8oCM`mw4=KM-rfV>I$D`>oKD~lNa&0uX@d^xNtcWJ6{t`Ppz7V29hHq^RyF0}kRl|;0t5oL0 zf=Jl2*MDG40%cB^R1GzUopHxfe$C{KO^Kf3RkEtztzt^v+`@H2eGY3YO_KT!3KUeg z4BQFJ(Exc zNdEexC?&Hh=1V@5g1qte`Woc?ga~>`-&Z=|G!I&@mN;u!V`5`vqm|X~e7;(348-4E z9c2o+a0mf)i?HzUa&BitKwCh+cfSAkY%NlhOvt%X^UV^}L-5nHdgYOid_K6~$G8IP zc~O8_6j|tCvM{pPpiac@GzKIb$Im(d581j` z2lEieUtl-hj9=&gFiRzy!l8%1zXQUl!^)x$_SeS-voOCn!Y)KVyq*R^8!JKJy8q1z z4J;jN#ik8Vd8oTyf_SMWh>&+SYubcum&(3E!r(j%pPKz#*3d1xZSw!y8Nd$GaQ zOCx)gSQNqWA=IW{kFP?n>b~yLuS>(ibUAKZLP}|Twbo^T6F!t8y3mDEM*-zeGvS?F zoM332B+Cv$Web+Nt_7PgUr5TxxS`+!8>Rzf^@P+w9$3Hq?4)6H@NK1N?j^E^|~|RUihv^`mv$yxoj6Ae7@bO zkU2=WOzTRv)&J_5Om?FH=4ogVchU>$cVTRf9$-cxEj@j4aS`asDsJ^sUUmaxAgldP zZ%O?Q90)!oC8aSC)PeniiXTBP3N0vr=aIRb2D_#L=}JnBsl#+1Hf2&?Q382OK!#E| zHaJ*XHv)BD3+E-PVg>nzp4$QUETWLfFU`D5|8Jy*dQm8m#(J0t1wbyj%oc#z0O9M9 zSpC`lS>G2>u<#5^Az@$y(t<<*&>56-Ymzt}F7yK-#u1y-eKCFXl^a=K;;gYhP(0Re zhk6AP(VElYnOY>9i=)LG$Xf>}NO^`k%uuM&i z1jExVlzO~G>806mx>9T!N}`~AzxR$-PJb{XK!BJ;Dtw6@5i6qgb@`ud3;SC<`@Bo3 zO13&RyQFNNc*WkxeXbfiy{ykIB>%)LB$9KmEfC@O}o>$ikmn`}8F3`qMZ`+Bq zOw?E^T^mcaz)^_aon7Mn8>@GJSbUNuFz;6J4_d>NT6m zP5(Q|WupDX%w6S>m^Kn_yyqr2|Vs+ssWBNFpkbNvJi5(x63Z@`Qns<_->&YZXd2o8D9}L`2edoFI3uSl_4b!q=j~aa9f|+TmoIxRmDBi6vd=iJ7x*-xfUK%e zhg{j{OxI(-jX|D#^-U%o`k`Tqu0-S&C^iuA#N6n=M1E3x2#WumcwQi# zEHT5cr69H8UKDpQm#d>1 z)f;s2vNcW9{K$Mu$-GA{L~DD4(4dMIy#?RG35Q^OL6HelKz+^C4o!-dw?ohSTT5AQ z*>C}D4aqv-`4~oFo;zy8CDYlpTD@7UXM4D;goLf03zJ@?gC22 zvw4W|ao^3^mf{tMLB}gipe>3KsSEVi0}M%Rr!uG5fz%ghZFHW3VnJly0NdxSlzuN(0;8XHy>??RnOpbB}4q1uA;-laFcJ2Y!L{7Y)?KH-&F&@9PY;O3J*_ zmX^KCThnbTl6oXBrM~8S>M?gnk<-bEG`^<2Juf+LmA`GmC#C9^sQsx^Y!`wp7!dls z>k3HTdWZ{!j~<$YZIgFeL}cf%2Xqi^HDJs_{PtiDA|y62>epjq@`a5``WI-I7mJp` zCVD+G!4e&5+r(5w*2_*2zs~QdO3HO;Rda!ohd1@PQ8?% z___U^QeLm}lsvv?4Dxi`PiTkG%xAZWdYG`Wu~D`M$5iI7CXx!389CfvveXT>iwxXr7b0@df;Ggt}G>+JlJ zlHEe2#o)$;HZOAJmTRo7WV-gp-RV+)KfmMm?jZB5C(mNFwbH$%5)w*lW-^=4mPD8W zA@tOW*&{k3p~oEX4uumD6BCn>DrJg4u{qmdR-&Q^2}leg(I4vP>D4u}4cZIT&-BlN?EPp$cUqwo0`R(CsKpKiH|3D?MPZTKap?9MrZpnHR7jHq}ni-Ui3$|P$yLxlbPwz=YskaOV2gGk(4-B|~hmjwY;M+Ll7J&7hW zCZi2KoRpd7cEB{`02CdQm@5moh_ZfKD|zqMm0etd$$94CVP;iu*|jD`1`p#xO|ySXlS z+q*_f5CjzMJlthwN-nrUAun~^_n&pu#AO%;DBaVb&c{`90zab2KAB9zDklW>&S0XG z+~(wjbp0jpir_P^kz+(}zPp{R4mqEA%^!d|GPzSXO!Z#E>bi_afdBU3KHm`+V}KWz7dc%F5e~`i)!e z#Mj$@ar75YwXLeO{DQMn$s|ssM)OCKUQnByn0uO8=hrUIoHf&Op4d|_hPKHo2bIdD zOWSp0W2;0Kp(}8$aME+?mRI9@1ie|FBZa}Aei*1u9!JNOT}OnXtde^YQ5%gLO+0Mg zb3i>H-HP;E05d+hh{Hf#JbH1lt}Vm9-s!fxa`0OaN;-u%F4kLwKr~a08R>hjz|}W- zjX6Df?0?+?gCn(kW`{&HFRp7o&wq6tkQ{`qI2W)OMhb7(yn1kXc1UH|q2g&ZHx${B z=)Tx70nt;P9ZMH2!o|e}eEs(dzgUNchHUA_Cnwiv;5YiJzl?&O{INMGqL;`-+>;{v z|NcIBssw$grgJz9EG%N;!O_v>k`GL?=B*?uc4 z8(e^xUFCLV?b_rQ2>n-M{>EcvYb$VOEQ+2fDl#&%wwAlL6Ecu;XY*o3I+GbMjCn%z z;j`aBSmFmYq;695))#(>imyF&Qh(M|-CB(r(HQl`%pcuYMl+5UY!x@RsDGjk$j^-i_ijmEG(0f0=|l1jMfI?0U@4x^63{2~G`s810fJj_;uIDMI*cgszBLX3=JA z?B*bq81+poT@Ss>`z7<29Ye$rgf_I>wV}Dc%b0e_o16kWC-g0>FFJFNZc7~L$7g&U zy*zFWca|8_n$xPE2&^p_*qM$KeItr&3TUd&)O@!?{Q_SC&m$`nij0I}Eh5}jyc24I zfY_Wfr2%E}_~Fy2fI)$DXN*g;iw)--D)$Lamg{&b$Bw}#z0;=Jh$##xBhzqY%O!cELtC8F1 zKuxzh0Wp*O>s_zF6SdUZuSX7w@}=+HqwAZP`lGtTw{KseeUW4B zn&F|Pg*!M}Xgnj-Mr_yN`x%spgp756MlBFOZDZb{p6RtT z4*3}JTDuVcjP%X!_jNc$;nSHjWczu6gKnIFtD=&hvORNGqY#YGe-w9LLFJs=qRNbr)n=ug}q=(iS|9M5?DXqu$&_{!P3lpE_iEf-2%ARP8omly7V(w~0 z(t7sI4ZZEIRHdlchmr(LPX zN4z?(-IXr}+x(A|!MonB3W0Tjv?o->=)Yjo?cNRx-z#{;)fCbrgy zw5QFqQ8HtzeH?YQD41DUUbD2Et@_jyQgW*gZlZ~aGx7I+$U-XXG9!L_^@5w?>hz@S zAN>x>Kz?7Jd{+1#>zYfN9Yv>1^a(f)79(;{;yRq) zPE7`|<9@b-q8I)B{zp+q?X8@W&}q|0WTPA+-!BuxI&OF~8bUGTrUyJ>UuTM8Bk|tk zYW>zZ!C1P>>Hfy7xcKiiiLff)9e*(tZFB;n$n5O=qJWc^_luFv7zzP})`Sx1Km?{tO})3~rlO`cPYVZQEe%agptFIDf`d@~OrcCo zJcbkRKD1)pQdwPXxzxfhDk}O@O;t7fTnY@s#Kd5eqS`)nEa@tRT-rU|_@y%XovPn4M2G>Px+U}#%w0vcK=56qcI&oEa1#as5&My12Xkb5x^oTZu)&+tn|pW01F(b>2qoNqo{%$f}J^y7l#gV=)++g-wGg8)U zbjsU8*;J3(bGQKf(5-w{twQL(Q0Att2}s%f#|_Ty&=B7BD@0y{g$)SH01e`y1PvuN92r8>@wmvX}j(Nfs7omOlT+Oro_NS&GKJY;SCTFZNFaipzk zbja4?qWV?Po}X{Y!y#M#n2)P6C3ma2TYzpcl1Yr}$LJpV=yxqczNK$b8*fNQYmMXH zZnD9MbX$%(Bv85)khJVIZ(jxDb2_}y3CP-PCncxo5>*;X-{hR@l69L~9d9GekXkXm z_x0v3=44Nt?q`X^5fj#GV&UxBC>WWWgzeE!DKdWSgJLq{&G$)u7#eq5>+;}jtxro< zR{ZtaJitFRqP!UjQroNP&1=Zn2G82%8ClWQvO%bP?r@UQpj5w#Vw?5XD2BxjsElX?49EcM~+({%lRZ0AQonNyaMnX|GA1p##k_F61 zQOW9e)`hIq5Z|?nQAVrl+u`(zPr~+o6+MdZx79XzlrD$7TEXYI_oY6tS~xeLx(_}0 z9i{ZL!F?^5e-^tVN5T-BYS!UV@F3?X`XM2SFi4l3+N`W`5Hq(J_5dFhW5FbF2j_0# zOwtBc+R4AJ)nU5jkMgYT5FYu>*Sem)R}FZ zd?-`;_9J6{w9!UzE8<5bGkwGEtyOISa^-nzo*nVZ&*dw-a{J>=d*3920}fp)_lAk_wa9mal45|TGyM{;xX zT`)Q#SvDFfsx9TgOXV4Ws)?n7j`Yd4?eRZxq9EVTU@l;PXQw}1j+>eq_OOG0e=(`v(RJP%_IYB%3h6Wqk zocTFjC^?u?Tp2ojCsxk4O(kn95V_*+WY*;{E7RrV(tezV4A@d)MFBi)*I(J@W&2r6Mx6W|Af8R!!b9Jt(}iA zx=utix&N)^EoI}iKq_B+{8NcLkB2xM1_7vn8}vv8?ECuri-Amt&!LB_@b^-38vn9e#_*6vatu4f zTu^s0WIRcX&Ey|H!?wrAkfQFp97j})PrW=3Ly{J-S4WQgmV*la?{&M|6P9iRF(MKQ z3|wp(Ab;BqWogxBs*7H;&b3@PYi|=#@O~>1qi{*WLPbU-mT3i=1_;4NWN;g_FC++gef25qp(%Du;zcL(7Sy>EzdaiLYPPxb ze5VR2xmsZB?;p2FBDra*wXYrzaB(eR&D9NKTrd7!6(Qt%`H?uIiypOSDX*6y=h`t{q{9)9%XOb#wm<&8; zhh;V4ktU30y9EnBvVnfN{|v%&F00-#VTQKX)yTuw;W@Jb=OCFI6oMl7h74_(SVB*K z{`#o0yR)((uP-3Cn*WEIK{z)f3mar$*BD|!a^7g1%Ivz9JlCS9xD(M~+Aemx+1fzN zP#aqaWv`YDFXDXHHSO=)YrmzcZR0-L>cuKIs4LKIN#o>!V)D0WK6Jb>c#Q&!oid}e z2CeBgAA@Lm$&cn3-%nPhxFn4-B-H@> zpP4WHR#W=gr(1yQH0%PVSu^$em+u-K_V9`B!8{n3w}J@uLchxKMw9!^_jm8$-{;@j zqUTKs+N-K!y>^iRtd8vB0*VSz(r81FM0ZD;(Zu*^mx@x9L6^qRdQ=DR$kV0wGj2ao zWuC69LpojXt}KM{Lk46&=Eom3xxUwM$gkw6E-NXiLw{OkEbjQ=#ev1`5-{l1iFyTP zfm5irX_!mk5NKN`Ld?u5@V3OCREybabc?KzlLJbjy^-X-HF}OlGNW zDc&=VpIZgh`M)-HC!4<<=?OYhxpe86!o0I_wXn zGj7C?%KC4_@C|ZNrb#E!TLy7Z3N$SlMS#IvM+WDX*S>nyx9qX-F;$)16I5;PT}TOD zVOF9q3?jKVb?@p{jE)~8Ldnc3569lHBVo-&W?QvM5z`a#qvB%XW^tDb@?@WfQS-%QI(Ehr76F<}7@SZi=zlA%@2;(q>;ins7ZEvHSHW>|< z@*ZU-JP#?w|Cwof91(f<+HOwtMa9o=qlXXk!>ELTUaFjb?OvH6trCNnPrFAuV1ZSx-XRgAPI^PMdJ zEh`poDxQ&|`631*c5FgZ%W=ryBAjT>{ks)Nt#1t{?z7z$Xb|M|>`e(?1ZhQTB&k;X zF7e(HcqiP4R+sLx$6*w<(Kw1h3upid?KfW@e};%v;$D<229dCmU5<&11nPPR#4Ek5J0* z+Cjyg1{+87@a4@oj|zQiNixkl)CKOp<1;S=qyDb9{<7hHAF2n_s87~^jRj$CI)%hQ+gCGYyWzNr@w+Z~h zu0%~%F2Il_UV4dKoe-g2HT-A61aU(W)v6Yo6ITC=o#~7?u9lqQ3DK`@r_yK*kLzT# zHs{H_Ci=+TeAc=&z16C(SK&t_f!c=b)Ag8|dJ22BfCXMLc z9a}ADFqd@ldty#t=V-#j3mDzI8rgpI47SuUNX&#G(`x!SeK?O;D>o>8l|6_^T&xTR z|M>A%ek1PTLKGKO2{yFSc6yL(%m%2+EF1F|^W8~Iu_-dxdCr>PDRTPF)tJtkZ22q2 zjjb)qB{|b8Jms2|F~}IF{qlP`inq&Wg117bnLWbCGZRN;6WN57%u95p@QxFCzgS5k z)&s?r>*Gzs#;;A8xqS@Tcl?698CCwOO7h?SWaU3QO#;mw;f{N^K>hN4N&gS>Nw9TyW=5J2pl`3x^uhQt48lDEbw4FaMYn+@a#y)Nz-}hht zhdH;GB&Vc2Dr5_OdbV%Po2O`yEvRJE%YkS|hKFZjU_ePl)zN7La?;0>UUD#l3uflO zbQ<1^scD>^x>`5AZNby4iPld`mPzxsP2<-l(lQ+OzlwlpajNxMs^}%Yn}ob*E1ynb zax#M-TB@ogS&9*T7mBzOJ~P`ZW@CN3YWBOzWu?GfVXXV1e(9xMR-HK%zUV0H=PMo4 z?zB__F0J&~Vw%TnQQP|Y*PK~06i&MyFX8w;alhQ&CtUVyJrVvv?(3+$NgXKC^~A@1 z^{-9j&f4Y3C?K`T8F#lC!%VuvkR%1J2;J`)t3NJ{9pYlm>xS5gW~9)EE@cIU;Or~Il#5)-swIGZ*ldpVSM4u@I`8VX#_ zMuw&@;^Lz4ad2_3Y3Hy~vSL+n?vB|-h#ARc$~zSG+GEBRzMSQyP}6wAOK13hpM)SK zzl@$~=~zqqlQ*JZ;*4}&xfPIjgili5c$%}uHN=9p%>XL@Z%7qNEluc2U>K>4xi_{PVA`rk45mG z>yYIP-sm;LORi{yrJQ>IJ^FvIoBn`|D500HBQI(3r##AbaymeI)O><=gQv59a{n9* z16T{EfsW!W`hg$MU9!?K>)e<++hqnd`i8&SDOzfpDcNr=Fm826I)*)|JcKM{JOAa* z#c7{h;>|2Z7NvptCYC!&5qHB5%1{u8sm4#&Vt&fn4Eo3M9Z#+=!(5r;W8o7J*mn*a zd|I{*=_~jtXtEZPJE3HsL;a10p-;kv=E#TlAjrBSplyDB$gS$%MiG($dP<{d{ITI4 zC!MlDE;cwA33T~7keSLVCvYcl&!vVd-pL{jXSo77^N$}tnwXf7VM{71S{*Jl)>|*S zKHPGrnq359%IV3_X(IKcSV5ERPaorRcOZW!+P|+K-uUhH^3orjJXtmNx0pnS3kkuD zArzr>5nYU~KGfrb0#QWR7WKjcz<2T-I<}LL(ay3h9D3w(gY*VTfh@ZcpSmOnS9qC^COLe5*W>hCZh}+=)6ZKoLM`rR{2QB35S{U-3=}teK;<8LaUr# zpL$ojsIMpQ?xj#j5E6*{Ho|)vb|bWcvwa2>7rj~Dq!;a{t7SM-v-e*FriCl(JTs{4u+kYyUebp=r0(wBVfM5&93ia371k6o>nvVnw6HWpBG~_ym z#Y228j%Y5XeP8YSDse>PPno2VUc5UWV&&hnSmowale-%s1-BB1z>hi*76DJ{| zo|%20P#Apu=iObGxX59>Ezu6p7f#6Cc>sh(k+mPB8aev-t^l+6WHN2YElJv-gDMlRkxU1 ztCZ*C<{YOzXJpl`uSd6}-dK1bV?#L?IcKA&qeJruGrzcQPz-rK>mTy;aMGL{xrk%u z^33*hID(46jNC2!Nyi> zK`tww#G0D=scRi6THoMh4ppK(m@v4{EF&cb|z82*r%3=1c!p&POl$WX_^Z zqw+dJ-4EaybUe+BwxQ$cvTrFAuwzaG?H^vsZ>dSp_a7-`L!ee!n4>7{uM!sZxi-cS}M8)%_9^dSD!%W@v`;cH`I2E zCcm)U-wcSsG*pOd7=$zFw=%$~d7FT|SWIEA7%r@FZvv(fpJrm`lt5bUZF^s-x(*ww zr{_d!hy~}!ccYzo2lL?Cb_r!;#8)0?S5YE76Dl}p0Z;;r_-%Gfa~Gu9D7R64;#{1s z{QK|7ZhdIRf}IL@3Mb0q!~Rq%>E6~@Q+QxGxUmcKY}9uPBs2NJAvs%0_7#1*gpF9A z8G{U&$2k#0f1P(Hpm?5jUWz;|@un3pv3}1;%|u=iWLqU3gT&G)8t#OWzxNy%OE3G+ z%J}ttN<|d3a1cT|ANc;5gBG;LtEyh3hb9}+o48qgAALy zOKrMTA9)nSghG~oh^>)bW7JP|S?X`a6&@|@VBGJmHFw`8nn`nI{bB{SFr;T7_tzWX z?NSeWI2WUaT4P8rj6f|BWc};d#|LR@3@t|l|dBwtd(Nb2}G)NFZXJNdXVgX z)21p9gn%XcoL?Gv`4bm;BRs8VbWSe}feP>1!cEsRKq5a^aP#8tHV z&ozWQDTUgO3(0hA^d*k-H(WsCgZo1&lHs5c)2}ZGQN2;)Yqr~++jEc?EnA-;N#(O zFD{v7{nrkv>=+oOUk-z2Npu>56`;brJU|vGE7OvQ6dft6+G^O1Ec7cbF%irt?=n4x z{5suuZr`ebrjRr1x7}PZSFN`;LN~dNpvNdC1Cm|l2dCLnc9vV>h>-%#ung`jenAkC z;}V+V0;=|>j))if^6Y@fkMX!nD9T- z2swUQF7p(O_-5~dQa57;YUB_OI!uv_mJtk5Bk-;CR0u@A@q#3S<_>BLS5K2Dl_6qLei76$xJtftF|GR@NnXHY;CclhsxNdzh>N;d_|tNt(JPFNLps z9;!x!Tfc{tCbPTH@uMa8^-Zo8PYWI~VuhtiJn`kILWC#;Eu=c^%PuHjFZwJ|yn-Fq zA^&=RYI_+w?#5!y>06bcdnQJ&x3R6=@mMSr@PZkJa2lQA_2gh7zb{ow-qm0W;2fi-9QR%BA8*3 zv4^2U>d$kLG)Gqld1z%Fr~$p1$z$nZ_|W@MqO7bNg4tpr4v)y3?Yn5wy4{32=E7c@ z=fa|4U>-%@(u^Lt{iUj?r}L|A*3As^;dgVYl7zD)S;X-Ms_0e7udua-reuv^Y&?-X zzO8@Sjr7DNML4>iXeSjLP9mDh`m06ifd+!StSiYi9*&1jP+7o{>q1@tw&1cQJv_)AR%i-6&_@}FvvIG+?qoRKR=1 z#$k1SMvJJ4RMe|_EMiIs)ARNkKhl_0on2y!MvJ8i^yH2qxb65OnQ473Jky#rG!lBW zjZ)@6x+#18UPY$;uNP`{)eo$X5OlKn^tq_bW`mv3fH)gTy?;)k^z>i${*(iJdihR# zXTE<_Tu;dBF>P4rzm&B@4yWG-S{y? zF~@?2{p*W%J_{O??pw5@1t(2|H!=10>C7RCLHweI6N>|DP{oAv<&CEN zs@6HlY(^k7i|1&mjXC{dRg{ia^zmOmmYkm7KILyE5CFeTLWbV>Bz&#MGd9Bn3G9?| zyHhE5KB<5OL*%bLQCs_ulvv^b3|9SS@Sf$bsc$3s^-Q6IbWAMnMN(e`3R!a!MUHz| zy#o1S#6eTk-+mtI5p(!IT5-_r*<8E>%3_|6gFS0@#;I5-GQYwX0A3uJVlh_FB@|TN z{J7#CQym|PRCgnL3!@?7o1x%}-X~KkvcOJdXo-=eQisgB&z>dx72WbI`c*^B$~UDc zRx{l>g%tTjz`Bf67Z zA*^-Kuq`etbnZJ%ZdER&?9;~)fpZ>(;#!b~_x7E5$B3lYr~@k@oGj{F*gP?>h)#vV z&#z&n9juC}nA5 z0%04VYy|d5|C^#BmnZtJanxp?5gGraegg#=jBCz15E=vub6{ZD(9lpwC?F$a2@IE! zi@0lk`qWRS^$_tt>x+fu7(_tJ zROSbL)>Rek!Uq`FWRNN5j}-Xl0jwckt?t}8E@vAO)VZ? z7_X*fvxy{p9W!%iL0c4!kDY?G#3eCbuC*cFmGHgzFk`XTw&-~H9j9iBbQz~WJDHEP z!VUc^xx@Sx&N*ClgEdqCYMn&|X47)^Pd#Kulmhcrz9Rn+5?w@1w|{0Acu14xMyTJe zKW!&)p7kmnE{p5R{;Jin(XH)HrBh8rwa-W+9olaa8$#cs?HT&`UWY*b2wNyZjbUnk zHi0cSu1pgJ@9%Ko7BJgv%LSZHRl~Q9tv;QrsstaU%3bbQLbQ{N_%w$N3R=OS+waN% zp03(l`6Hg!CBwWKNxlx0FZCxM3T}vM%7?XlMrs2bR)=smQzV?yw-67}j)+XdXiN1s2%YY=&It6%;V-T}TrRq+a-Y919tp-?_Hq_&($p+= z%jw##nDF66>#k>gT{0?CaWC;9l&Pfm@k5DS6>e_fdfd!B9dkWQro=(F!_;F`OG#N> z>$%#M@lG4<2eg)TiI;CwO6*GP*OMoPs%|TgoA0y&$JfOiA4+&s^jAO4433R9`rJND z4iG#z5P0k|_R9ZR@~Z#M@mb>`vUSfpGG}fnTMqL3bgb}brTPaIl@tY{#M}E&8HfkA zD}@ZoD>$s3?OeF`0?4mm@}ibxkNl(ja3|a<1n0k4K5mWB3>r&HQ1sLNO*^`JI89A& zwL3}|tmeFOZ`?{Fm7QSx-Es1x!(Y`fRid%#H@6?hX7EHYW!@0)xMAc3OAQP9`1lys zIto79$LPTgiEPZzI0Xd-qrz8d2|*`wmKC6v%D~KwMz+JHST9A6sR+9fnsB_cj*{hZ z%UZAQWI6sL*j6S?JmTV@Jmn~x2PHnTO*oJ;l$BOOexwYihnbMj+(%!_c ztC4uL@N%Cje=9XEcR0_{9SLkn_ncYe@rR-AEp-SB60kQTh(6&pO~1aBF3Oyy(qD6b zVfQ|cUx%;GbeK;P=Qx_Vj4})fw*mL7wyf1fl%u9JvGvouFGon@=pH~ z!bTUbt<0sa;GMa}gP#t(s0-${0`pIruL@r{(Ye9N>V&3w?7PN1%!F~9t7m1h(LsFc z#70@+ZGJ3SEGDZIT5+I8Cx2K#=R*O*pHx>#fjflD;rr>R+{;SyR*6;f(T&kMNo+*6 zusZ0=@Nj*6dF)0R#r%R*GDuK?y=E){7k)!xl8)BU6qin3@i@RrJ4$t4N9 z?TQR(e{FAXKE|=umPgxEzmwQgnxf36SIc+;-ciVReyVf{=10!b$H2)v+rEYu**Pw| zQZZsT*=_o!4MqOC%!$Q!ji+e)jN7v_Jq5r98 z5B)!)-a0I*HS8XiQc{|sQM!kc4ke^hx&{y>rJDg1r9ry8yF+qlrKC#~B&9oKq`rsq zzQ6Z7*ZGrc-22)0bLYC(f^okq6I!a)ap@^1srES@ycE{>`0MiFnZiRI>%BsmDz}9z|qC8mdgBa?lI|ngko5wHS6_3*GQK{|0 zSyQ`ag2-}Aiv8A?CaIkK6*#z&mFoSDONAjF!;jMqMgTj6Q76inwVa~g{OQYskzkqi z$z?T%d84g3Wrug51E$>J>~Qqj<`(bwz(5Xs!nSKXGm}J|cC4>YHroOwEFxm_HWzH% z+j$Lr{`@%&6_5_u4Q_Q`ld*drcKl6)!r+%HAx@#4odL=VGtza>XMP6lY^yLG?NS`V zWJ9~!_g7TTo${pFcW>_e)Cw?1ewutYU2+nMW@W5rFl2{m4@{4Jc(Jd50y|kxo>&O9 zVyg_kDR?j8=wRuZ9$#wvxJXH8DS2I}?sMML_8}5kRwsHqKU!|vl2xxH_EwRTc~lmD zBX$`1L!4aNzc0x$FiCd4z%ew;9K!`_q*q|s{u|*cgd)%^V~L(pzob(^j>SL} zn}ee_+c%TuIQLP1s02nG#+XtKod@YNf&S;!x<5AfRv$GN^t9=hI#3$olu1EZFlbLeh-@w^?nPgS-ekHJ6d>}Er zm{!t;p)Aoav(#!=tvg@)G1_HXa!%kHSp&PSh1swX&CiN9k`LAKtjUba_wDQ@KfL1`_2 zo~1!ak#26oVos7~Q=im-zh%N98+*LpX*nejat6yt$K}tXlSSq=K5)DPI}+8Mx0J78 zZlcssYUpJp0_o`p=`0uv$s0T2o3(T#*nKbn&o1<^)lq5R2hrceN#S+CSvew z!+411Q|WS&Me5Szj>|-MGH(6VrXZI!^5gX*Ah`tl!EWY2(MP(;i5wS0~U zIi2wD!R~dVDmV(P``cKr+-tN?bdMrNh!_ncOl?Cw3Pe-bGYRP_@%O)mzV;eYmriGb z3D8)sg)p)izu_Xp;s%j71IO27B$dx@b%%`J0YVUO zO`5e1U~XW6)DJAIH^@c;kq5wn4`@Wfinfzj41;==huDYN%la%d?J@)XAAlQ7un}?5 z#PQeU^L*3V$Xpw@zbk{oBkm4shF0EEncE}d&a25Ue>$PRtXfEdGrxacIPjZ7(L`8t z)#QrZtKyx=6@OGJ92y;+EuM!|z>g>7>27YX4r_Ql4~!4K%+Ai%xB`ZL*FPgGLl6LA z2hy=sI?maCNsHusmZ6~M^JiW;nY-3b5Uf>xcW4KcKEO8Up4pOc!0eaWDLifg-NG+2 zz`TYg29SGbKV4dkm4PiiYq`!5@pyfCv;wfPfEfScr(>^Lil&e=&AXJl;pmmVx_P&3 zOiD9ry`kx`*5gM`WaRpm<3}^sC59X+x-)R)K6GqbuhC4YzK{4G0`q%gzDMyGeLUGR zedu4u0*?#y$3hv+`iVCaeu`g|n2wT6BP%%GnCO?I$?9=*Tlx>itM@?XPjKzM9Ivpk zDUf+zaNNr^mVPJR1wQIbSd-FX)x>jIi^e0NRf%_j_;%eotL$N-J;HwcltU;bhD0N7 zjFXITw!bvg@|t13=x&?K>wCJa|JH^yT*qvUf<=kgFE9~m);DSyAHD?M^*|47EJ5rY^gcC7r-sV1* z_v$_k2FB!3tbE`fo%fM8=u!HpV4(fem9HMdQqO~1w_+Z#gxcvn8G=+|c&&j=uEXD* zovBF38QQ<6u$uAW5rzsl%G78>L&NROmDJx~t{4~?X^s#sdT&4n@(}>aDr2E$2+=p# zVT3oMVuxP7zP;b!Aawy7puJh$A0O4*@qi^UpbCTTtD>q}Usnfo5>|HVi4CLRK-2Is z9bg{q-yZ{iXub(t9&GA4V!Qz;&Ckcg#DKN=%gal^^bqK-@FAjS7VyXg1Ku5z7MH>> zjuZx6JTrlCPG*Hbl}g$T=-z>X+-YdbKgAM-)89zSx}FdE&1OyYbaz9EgjBzx9F16^ zg*t@|lqy$qhnP8$2B;#?c~^mt!IVWI*!*(r9^W4t9GZW-Du(<7)5>d_-GEG&sB1^%ql_030PWLi8C`?TXnB+L_$RutlWQoT8B=9E{KXfKPI zKfdrJ8C=w=>?bk>f!ugbh4Z^!s9=mh6p$3?%K_3{KEQh_X%?d?T*S zLU+_cIlj^H(2~qSE!H)|lNj!Pm#Bk=D-;6* z6u)I!4o$vq3&&>HD{Jy2O1R%veeiVZ52V$!8G}2YZ&7C|AjTiiZYvemwYJ`)0r{;) z0UVG;uWxInd=Aj!0dG(Z@Vv!Gtc2JY@bJ4uwe*SK2G9i${xgR(YSKtiki8M*!9U3E zNEje3_<>=e0OnaN%yGFKx)TijakCyh9i8p$(@>>Cz?(v5Z-;xgy1EK1p!0N8Oh6R` zI0hK_?lmiXdHMOz&O>GM@Fg!FTmXu&xoNIE9zMR+rA@op3Y#$a%J#Nm9)8D>w1-Di zQM*3p+hiksBO{?ZQT89pF<-pZA{VjWx;t9!d>6I)AY)_M(yzpPh62mI{Y&#gon^;A zbGUa5zW~~H{I_V@NYtJFBPOQn4mx@{YMt!LaO-%c**3n@+FzFf@u8j6L6|dr;H)j? zMZ0T8J1uFQA(H-8foP^&U$~?2Ed$6f+r*CIE{A^C(+)wf-M{y+P7EKwi~li;OyJpj zKhjb(icW%3vx$9%2ID*DiX#@MWSf^j<;VpwPPC~8mS zGzw97_SRH_Tvl_GbZl4K%!hw=l{{jTp5f=#h7qxxny0?UmV*|58-Ntt*^d&weK9O! zs7I$*ZKAZIy6S$EQ%051Py1~}DHhG!jv^%XZ_0d@=g^MavkyNXaErPC7+|0(O6@PDWWN7opPMe*upV5+{s^QP9+WE<)wBZL@*gL_32l(QR}4g9aoda^f{YW- zgO-bnw6wH6jhXLKyLU|h&{R@)WAkK;5BPqUB0J)}N?<;0L~2xy`$?NgM{V(+BE3UV_rvF zO&j^4EGCsH;BS#*mwa;CiZmTJ!WC8~) zZ!>yO-+IjelCAGU@lcVI{t34{R6puG8jUmi$0BgtsZ*-RQGQ8<0a91Jy}k%8;Fyc@5%g(v_j4bi+A{aR%~bU-;Lid$(8){}Gbzs)-Ci zLO%zNa=>cLdM(BU@W!mX+B+{6?C>O%1Ra;CNlE*C62vdwu;=&7b0gLC_r<5gsV@ha z@0^vnqG1=1h);3cblCR+r>3Na=c9q2^ZrhvqhPi;9pd-1FE^E3j6^@eKhd4Db#}C= ziRvT>zF~E@-Qm0dJ4Pt_Mo0dRhhcFCIYKA>ffzVvI*5Vq-)V%MmH}h7!Cfrq_ImEl z;xVT_JKu;n?7X9GnyWM_)=8|d=ij3fabc9x+*87>yi5iA1rk1IUVtwqTMeP#WS{zC z4d}Ft5}PQEX<@AWei6Bgq1hL(@-`FpkclPtsgJNG1^o=hR~<`}n@cQw^s-8w{3mjrRy#V5DE)(P@?xR$PRab_u*mcg z!@&9*$U2cvmgtk#2~BG)4{eK*;;3w9Q>$3$T+&&$Faf3aZL2P^vmcG zyTcH6cf39C&udb3!fAc~FyC_eRl#eyVlidM@hW4j;#1lW7-Gt8Ir#<+I3xXK6|}4m zYHOhl8IqKFvSsv7<*5}%@T7fhZ6Z@b$vxU>R1UO>($)mW3JY>iG3mI!nb3+xKLOXA z8)n@V-2Z+qJSeCiknJ{P&EHcGg*26ybEFRy)Pj13*?MyiZ?5>=<7+n~)?DwDiP>@I zuR@-N%^Rc%6LH*`xuBv;s%b7^r1IK|;{W%bAmqD%;XZx=v{b=)ae0_3HSZ~#Z{)>l~ z*Py?90c@K9Lui~_t7R>mkrBUydY?>vD${F6M>F1KLc0leZmb!JuMB4@s^Vf<{S**n z!AfjW|Aimp&vgc7-1O_$fdyeR5Eec~)=2Qt?N%AfE$Aj0)#|v_PL#v7E8ni;u{<^7r9H@YPiD7%AW z;&QR1@~i&x+tgp;$zi8+x#6xM2q+TzXCRp*{~)cd(CEexEGEF3PF-Jw8s*WHpk4@{>g^W0~xJ!BI5Y{x^a~vIpjn3icHQ znPDlZsofWVo~L1f6gvpS2X#VB&$lUX z@)-6O&`|UiOs0@BD-p47xXil{obf!ac&#@X0Rkb?P;7KJKI3(*f3i+;IMXHL9zx8-$(NNg~YJ-J8Yau+NXg zP|+UIa=fuudh$bYo+pbEU7NL4Bu1Z=NF^hDT;xmzVTPh^Gpo)hE)ECm#%XXJ%Ii(3 zI}xYlE^tY6QOU(2t5e5xbVTjW0k$258f?-!bP%G)dCC0Gp2-&Q z0*1gmmM%>cQv7`SuEY6IMVu1@eTfcf1{mXU;#jkW1PvRPtM9uE%l8ae!x~fKNL0k7 zfXejuSbAsqeeZAlw%?LCVCcFrjd*CkY-JqkSc_+>ed4Dq-Gh^cAxsTB-uSn!2iN%5 zK~AOPTJVdcY)RQ~jk@KQRddV?hpoQM4z19=aJEtV6AQ90 zLLEkQ){Nv(S5t7uotDKAjV!yy(pp=Hl~-fV!QY!(ud|wzaZq#7whH0hsLWDFF(Dxy zT3STnwZFaA@VE$H1BN*;`+1Co^`QswveT0lTR~J|u6|!xyHb4QOW5CtcKs_RgigK0E^CX&7C~?H$Dmt-;_+`%qtjlJ)@*lXznl7aSa%mT8QXrjJ$0 z5GIuTOe-PE$_hx_*}1r)&iBZLot~6?0q!&jut#5G1!&Shs4Xlk47fg)2ff{vlc41i*aqtm_CFZ0l#{-WHrD2Qk-5@d*XfYDtg^Ql&4BvaU{s}>F3cEcBMkrI4-j+ZffiG1!} ziK~7A^rKE25jY}sKXUV6w9}@cf2t8)A6xX(i5Pj7;Vu7s5cWA7Ek(&Lc5^#j8tsSb zCndLktD2wZ<*o13|EROdD9utMIa_!3BtV_`H~tzajV3r@>+F0CvLJJZ@k%41s?cs` z!^XzOM5X@ZeFo+V7wct_9vz;ZB1bIBwrSfrMbGe6WhN7j6c*qU7|EZth=_n;xkFV| z^4;xl&+0Tbe?*X2^zGPw&N*6~{0tK$OxA;0^vz+Tf6d>N&D(w{nyc;5cP?5k<}dQ0 zuWoWibzupKi6#hmY83mp-1`$bj^A>XjIjBiKYQJdqlA{mSxEs7b&vYw@^~%H0$5Vb zCh!@SQp}8u?dP*b_V==;wFe_(l2@G63wIs`CIra4}zw)wDBg${60y1C>;->L9UI&g<)HGPKLZSRUhC==!j}^(p`5CDy-I zqLtNn4I(<19IDPx-V4xZx?lPR?zgj^bRG(27#zO5= zfLwk2O({NPegqdn@vBVI@CzrSTn_cNavusgH92=(QBRUkSI}h1qxbZsKJ@WQq(j%e z@%RD0JQVuNtg5o#Noy_8%57(V7X%N!y<$K6-Lz12#2c-#N#q>>A$o}Z@H*QRuItFF zT(L=lI_FtJ)q?l1?G$!Q--|l8;baIo*^_Z&b;Cdg1}QKGhKRRg0+}2@dHW3kZBDVb z7Jj!~s;)4u_HK-@QkcB!cz9n0f8Od3+0-OA$p|q>6YD|x&%w_xD!MS!-+!``=xTNQ zt7UUqh)Run-sQTpExPLVHz6nn44O}lV($(ln+C4eTTPOyemNg%tO$mNgtKq#4jm>BKZ-Px2n z<;vp)kW50TC0*7BfbITTS^_k!w3MwL`;>4X`g7mxqr&0jHaeIsSq&59YaQWlA*z0o4W7dEb zRw*L#seJ7h9Cl62O36#4ELgVg4?`@F*9ymx1QQpGSia&+df6idRzYE)VckU(f@UIu z1$F5!+xXk3f%P2=?WuN&>KfDVL2M98+AMyNQdEAQLm|E#>DGgc{?d_!dIFA_nj3=@ z>rdHc_V339)QIHSA_{FwtV}Y{?E_j2Z(i3;3%?wB$q`hvQvU8dox6CZ+@ha~n9-g& zK^8%jHXmCtNT;k-m)5786Nfv|dzs`EI4*Qp7vjfJIP>V$_V&{}LPVhAi=L?CIDI9t zO!-EY8#_t~u1{{4r%r?!qp9{TCIWV9RU5-O3wMQcSx?+nzk!ZeI^nS;dV+zYnm5zj+^m`|SZgR0 zk%bl1pzS&?eH|z{bfsFf`Kcd6)%Yj7?2V zb6nNN2)C89?Nb)cQ5s2?0|KJ3J#_Ja%K>CQ3wNf3qmA7z0VQ=xMnX({rir%x`~iMy z6Y~({-Tk=BmOR}sTiUaU+KH-MTb0Q=hTl5x0q*vzYckrO4n{IXWw8=ES6YdNx$!kZ zqIM-BG3+yC-`rm=yv^k^r>6C-U03&gK?r7ddiS$C`Bo6URaGVY{++cQBJ9k}j)opZ z6gi&QkvG(1VZ0vlIb`Fg(r=L+v<@rjxEszv18p=zbgD<3nU4ksCp0xbpr9-PVVnbp z1Bd5&;PP~DqqupVo;m$(S)(DMCh>(bb3J>qb;qdaC39}B;@|z?5-mg z3hv1nn;Q%2hv!d3AGcP(y94neG&M~<`cJ+#_ZLS}VlDh|V~xc6I;UoYfrSpQ)gO~F z2agcW$;}=}XQBppwtResK0X>$1dK{y3XFC21pf7RfnypobFKm>mZICIk%+ZE?R#pxJdsyuQvd5YkNr^iF(kC$q-ygoMl^=;pHjzkTUrEe2{rwx+fyh)9NC;TCmxW&g`iFm^veIGAt|2}D z_cP3}^^FZKlU5Qvn46Z_|NTZ4{3)Y<#x2_`m@4mHT#-8>~yfM z$z|^PA*xrp2I|JnyZMPt z#JcmJjr@IoVP9dDXE0ZIWLd91&S;o*ttVl8_>X^KO4F)1B zbB(uU7~XgN9&3_U5yJ6y>`sl1?=)?jW#r*`&K%E1f*o7p+SlhLip*fs6~#P1y3wc#p@Xh8GFB;45y0MUHWGo^t~_91H8Xq!;twer4U7C z+HCu?piJoJf351BFMy+HsH+S7(tfXaA?BkWSsVimj|hKFJSmeO-wQ4s(T`)yvCTGT zo1h>$8Vv+cvjdZaOhO=fbQ*lXSxVCQ_wwnzQ_v(y!U9I{^a=JuLf!}TIiVUO>yKiU z-dh;5C!yGc88gRD5m7v?msdidO7pU+Xlm<_Ru?qXH8;?+bTV>$5oThL5|M!NaWkwt zq*-a?$(sd6U76VZZ3AV*?Ed9xcK#-wpYMg#Hwt`z_Y9Peysy7zhO!tD6&sO{NMpn+3$?L0AVGZhv&yT<<)8F=|J-8IeX%eWt|7i{Re?M;$I#s^FjA# zVuyW+RB7O+Wb@~3R%nTnan<)eGr%x;+^mY_+}#^XOKpl>Y1u}`)SKx#z3at&*o}brGRGL|0 zD7cT06W;vMjLeL}Vr?0ct_NGZ5e)L`Phx@R%_qznvl=x$I&)G7^lSF;rN9$8BM@zX z9vAozkjYa~QeGS^rgK=FZB492KoQM=jRQpFZ&(q>1t)SZOtT!H&tK$^{_i35<>ywF zg2@X-*33~KH@D9_gnpeR)>p)q8>sCKTitAmj1)>FK;4fOK)gPss&$QZk#4fB@iregPu-%6@Xd3nc8kDyyrT zWXv66V0@+aFiRUTFgARCfyXPgI{m-rA`reWpSf(1nVtSKcRd2YUH}Jh9(-c^L46t^ z!wk<`*jlod%u+zSw{ZgbhK01Wwxy+)J~_dCtf0X=ast3FH8rK7?}IOpc{ERf%ne_v zF?V!m=seg&l#SFg_3odZ7Lb%QrH_4HdqKpTr4Qx^;3;1I=Z8i4M2p~>`ufcQ zcm7@*jen1}?k%%s%MGlKV=zcTp)8<9#ewsmMaP5w1_lzTY7Jq9Z4qgeY8Pq&0s$~< zumneMNdGnG#m7IRnY-)j=%=k7$E+{@$I;`1yZhk%&CkMy2ueRN84m{}EB!k=JEI%o zJw*Pf|5^Mpe6N>!1BXV2lZ=BT95h%SJ$l5zkPqnmZMVs%iq$)vR-{c$v$RU5-{k2e z+^0~|cjLSpI1l7Bfjj63k@o~~2FRbefZ0|i_XWni>7EC(!WwXvJD|zKa`c+k)+J$K zgCM5>M-p&%^*iJ-jgpGWCkp}9U9+tBCm6s+x9Gr}7Ud8DkoKVE+VivWzu%=oT7ZI! z751Mob^sWO80yk3kM}E9lG@r@(DCyE;$8s10)fGuktZ8K+rpx@xw6;df5Q2{kk4!| zumA`B-;V!)C7+d*746~O4>98AlCq0v{3lg~+vQ|`vQpn(l$F{f6(uGa9vGzkyD)sK z>tJ95VBo0;gNv~tB~?EYf**1*s)R3O<(|tC$O`^QZ5tWM+#fv(7?t4pW$=Vx8YTO1 z6aF>TbxdOOm+RqxxBqFzCeN3xA0-m3FteUdSW^JDig0>ptse>aFJS)2H=sYw&CTsX zn6Fc=%d`Ijh}@`n=XGCQcnJW_lI_!Y+N`^!(<@}lbE;utF5hjtLfmkl=f`CO^=J;(j z{IUIf8_-a_0orpihd3%JJmx)a#Y97p(T9uHI{6cfEG*UfwRu3&Ly$f=B;*??K-bpR z+==iS^Uybdq*zQ*i0csKD0x>6e`LQ1{1Vs>2YvLOdC2`QecD!IN`Ph%r;uAW8s<-= zq@}ewuf4pA(glD>(-i3pVdubq_FZ-oMzTnteO9o&^63QQ`UBdPC!nSGoLMSWl|j4* zoG1U>5}^0LhBcL`1YTAI2$1FJ>*_Xvt|0i%6N`%`+!kHmzy!tzFof|W^H4^e|F93u+Z z`St|>$u<)5ihArdTl9ygq>#TL$g#}yrv?}D|6ckXkns|QU)HdO zd-`}e(191{N&k-9E1V2Jw!Yp9g6R2WH^BjWAvo1moXI~8e+3Jg=+bk%a5o}eqM2yM zrKTc#@ueckd3#>=S^ucp03)=(j~{a__y03}pqh2&B#jLGHl7(p7Hm$&Ww+2&|jp{j7;IfFb2-!$AanK-P70>o1I^St_gU;scpCOERRJ-pi^p2 z{!da&%oj9*0Smud@Ovar(w*vDrNV4gyMC;$@wC5-Vw;Ews7?c8wSdqLP{JA&(cLDP|-`3@5JL z%N)GpoRVx5ivML-#crZM+*kOpw%H`>czYQ~He|0bwXNDn6Wm!hxRIf`BzJokMaYr> zowjvXQyT@4N1hA0{CvPs2bz>l50Qa+nx}>@g0Swt^}(q2VTVwxSeP0;*c*u44WacJ z0H1fRYEkU4otT1R(3v`A>4HOvQUmdxVmppW+1SK{)MF$|BK^&eg|P%s5#d|itkK=o zU}Anr-P+m${i(wr^&$R%_nh%;^TQ+Baccq30x6fSp*`ZS9PQ+Bk9C;UPj+^OMYeqkKJkJVTn<^9oDv#vmN+=jN4L=IZ;C7IOD} z4sFVj;kY2@;^{Aji20<_5US~(?C%<4w-X}m^CiL~tneR}RZpLN_{QM<&kI*7mx#t> z{eW7+FGgHicqx{3J?5C#w*M~SF8PNUKB)_blNyp9e7~=e6s#}-QM22atgHiEP_X|e zWQaOmLoVd->k{al0EDSsJ}n>&{Y=6Cb$B?!p#fXaYbFej1qNDf7z=<1^J=d1c4KV~ z9NG5nZky9e&)e^5FK$=+BkZJJwK}b!PEUcsq-Yo|-heW+1Kn?_%@ca#1;Qe*G;o?m z)t#rz>4V0SJX#pD2P0nJ|F|uB>bX-*y4i8tv1IDDA#2UTtJ+!hv3svp2;mBvA4Q@@ zM2b;dFYl@rQIM-rHljg7wZ}#nHN|_sr2JcpKH7!6DDew=8uU>3&3u>VT-H zo9il<^2g>r4r=7iG(R5aX9w60or0s=|Scf?x>Z=E7*eak14M%(S^S708gNKJyP=RkiX1ZQiZ=;^Ivj zn~t~a>p0Lq0WD3;UCDY4X3HN7jq^Hn9%GC?fpzW1tg%x$en^jj(nsKF%nZbTVMtnD zl|^Y4+9^PThFW9}GJN`&b-6B7^W^zP#2*yPK7?w0#~TC6DZdvP5ssM~I0c%^AO`eP zBrPwhr3J%Lh=YMX8SpAb|LpIzTrpiB(n5woY!+Htlfd4^#l`JqBM%na0syogfNX*+ zm_Mc%!z*u3FdCGpz>Kg#L>v4i=+%P(;7d8VZh1`-u;v7?pC&+wlGBTp?jEs#Xd-92kQ}emHxS+oP5RoomrjO_9tS9n7A}D=l zKKjrRuuX3H2Y>)G?goesG&Lsx%a!$CaS4fiiM-tS@elX#YT&w@l$@PwuUXy5`Br*% zNvQhhVS5b`r%tJm#p^-!{q4jElF!NHcSEzVxs>(d5C~OgbDp1&roNxSZn`7E9;a=i z^##KG@~rOSBjZZvcB`zx7A`yN+QTHfi0^~kwP{?9pd6L%Ue{R^8-JDh6t^OYWJ^KN zLPMP{wmb8dPP-O*yf^TT26aahOq0Zvek;@r{_b*L1Qaiy%CH=Y#6lnQcgP?g%ZIV_ z8tyVNKHi8>iP|3Hy!n>g5J8OLwU}+kT2A6&F&xPehY^H7B^LQRu~N!F>6gf7Qi_!u zyviA(=unHbs)}&lPmg7oa^=1ncc0CW?uQHp!VoX4%E3;so?l6OdtOtnrG-rhLc&Q17J8@4RrD{{POMkz}Wm^`c8F|)q)T7_cQ}>YH&0YPo zseyNtHsU?6^YI(`mp|B9epc_2F5xEF{2A*h8QO@@PQ0`$y6uhV5ew@{8#b(_df1|m z{u%?#!T{4XiE!n0?kH|Pp8D{W;`--DWaJu;Tk3@?;oUqcCizdF+1?vzK=nOqH;AbJ zak=f##{JtLrvfy5PIOjLj_H z1Mq*YJcLvK0TSRC4krsEt}A>&ZuQf#vyk|$CJD%@u~X$gQ^)>|scJqxJNxwS-9vU! z(SN^MT#t(Ms!hkeS+5s8e|LXldsPGmRr01TU^?DDVqyuP*FY;T5%T`T#oKCsp)uxu z)-QTPZ4(Ra(r6TMy9|D@^4&w~D}ONd?sAZRW6vw3Ug5ZAo{+j!J~IyXV_wGjz%x;H zrNkjUiao^);l1Xv)e<4^cWYw~?S{ucCGPEJOt$QMWIxz_ zLpatS!}}{;hHq+y*)yQZiuEr#ZY&Fy$Ru|t$3&{~2HLI(FZ0xB372hHx3=USdW#** zxK_(#`KWJdocQheM%gueW-8}y%-o;vqvH9xlx2~UTUfX`8_Yex4VF246BZsOx;s@Y z?fSdjYMKjo4G>gp@<(U)k$j1l`rBlt#c&wHGy3%6)62~g1c zuT8K6dCa;VuzLJEvr#UZu%?!T3tQ5Pc~lt3K@A(MU)ULeDqLTmTw6^p3`mqoo3ozY z{QW(J3VbtsxAF^64Tk`51{IYuaFEV<+1W5BCm!m&{+wVJMFcs(zQM(P&Pv+#*1koD zjC_2A-_tJoAmuZ)zm`zO_uyE^6|KrE;%(P@XK9AsDI_0| z*N6GGF`aIAXE>N7R*eYRlRiIu7pc8JGW)Sm3gS}m0H;`qqiVG`qA%;6@24wfRnPXm z%T8m7u&3Mo;_h0i5)XR9qqK#rX%vPoA>?GtnAkR?Xxit$*v@msdtpCF{e1ZWP%H1G ze}td1qZB@^IH`yvBBDZ~enq!;E!kg`MX3@fo5t*&B;2!uzBSNQ`&)y$2cDKM#bcj{2exGM zpF0f#XBQUd6zaWS@ilM9zT@SpWzW$Njpn3wk>Ce=oB+YnNe(m>|2z|F3tHS2|5)3r z^H$m=nbG!B%AJq7#NYGt6{~Yj+g#7Sg-0GTVV!X|KdRYWKM8`YrCR0GJ`)_6jV>rx ztwf#IWSPm8dnr6j59=}s_F4WM;HF4rVDV{ou6SozS6bq(RNU_$#p;Js-#6m(_;DEQ zZf96)U*5#Yqo%ngIxzj(T9BGo=v@WDA8#>CELz~@auV|DiXYcCA`9=oJcdAo$Fbm; z8`QXDochZvE9UvH8&VbyWk-X295Via`0BAUJ*ZXO)+Uy6eb|1g28Xv7s${N5;7eVP zYcccj5%Del`n46NE%Tl_g1}rb9bj{1JD#lPt|UQWk5lm_&IrCaYZN_1u7ak-S-$FC z1n7tPB3FTj1toW6VeoyIA_fW8coUV=tF$~J-i!pzUqPDw{11>2vw2Ly!O2;%d%#Y5 zf-zs_Ux!Y|M2A+Byy5V}1&OMn$)nv}BE`->_R8y(ybae^K^ulJ8iT&Rhpz?Io8AXn z<7ACcZH7kj=$#<8h=+{)BOaCi#Tu-B|Fsa^x8428&yi$_1icw0#H?&XXzz$WTfH>m z$lOy;G-gY6!>`wS>u!0C-M!FVT~7yO)p>$qiO?d&W3F!LPL>!qU)92?z$o~!PT8zK z*I+b7!3ap}cUm2YuX?n7fq{SE&6UrsH~Z6e$@32F$9x_8-(Xoa`+!eq97}PjTrv8@ zF~mArZ>Aj;7)*Sg>b^6ea*4#m9P#^L4^Wgk%}Y%mjQOPmO&6*JYTlo<%Mf^mRkNS2 z$Ppp?OhN5VsAZXR!2Pf#$t4siDdTCVc!nJTKlUez%_7VAqD5mK^VHSWxZg}P2E+sW zhps1ylF&W^j6bjBefyq#d9;}T1$inEuZ%j8W5AH{r2j7iOwZjV0ahRi7KNBhn^_Iv zqC2t<780QQ^tKrA!GPFk2-*i+GXTi*uk-E(%B7)<>{(pw09Cl)gygpiPkQNwjmc{0SNZ@*DkSNbh9; zH51OGh0A&~wH=Oqg%)_Npd1ca;mvH`Ff=av4=grvYHo~Z*e$AYCbf_kxk*)3rcfww z(H|b6i?J1bm90EX@870|9)l9wuI2bAid2!{dmp!C-?g$!;ggdfsBZv|US2hy7c89V z;bC%JBWdlMzPbad(Wzx3V0@R%QTn@FHwKhVJueZgv+2a-war?uKX^D;t5OwgQ6#Yv zbO$}8yzb_!X^e#~(5@KY%ufxmFD}OquTL`fl|8eVVe0j5Ww-RRO&mj`S;CJ)SFV1j zyz92U``*kx7uPt{%!G;*eT$tIX=d15_0-Sx^h+Z2Hd&@8-3@Ey7sp(5*GBYbU7^1W zR4qMQgBua3nMiSlxNXUQ|p|@4&>eDu@^@}y&1)vy+W}ox2 zK{p5&hb`qvkZCp8Ddill`*QFD=x2k%ruIegR5vL2jo#(SG>f~zB6_FPEt#ibh?)me z(|{!wEG)KyM85zF0->DCOFF?wxdXXXBkw5$YFbh9>tmuVCTLXEQFnM9=Ybpxn2o(G zeu}5W#r$hB$ME1dC{SW$s5S?t6e9w{sn_A|F3w^4GrL)k!Dl7j%hrQ+wUBEdY7HoO z^p!zqtvfSwoJkHW0cUD)cZJt#ENW^;1+=A+kW}ILI&D0I5Njj$^WHm8A)Fj@iuIQ z#4_ogU{r2uWSJ}G@jTVNu}1$*pJVaMHVG}V-nhxNPr$tgEmo#_LtZBbj5j~ zUkC=1M{{IgaQolg_I=M5!Wxc+g+#0>$RNP!$ z?S3OVnA(d~H^zHUY}X?ore3*KCqeDoE_O%@uoLEHKD;)IODSNzHJ%F~HeeQZ{d3#G zU4K2o#6v9lLH$_V78z8#RexXur%b$}#eTQRk0-iIe&$dypmvkJ%mJD5ZZYOwuYUV>aXK8cjXE=l?ym5Mj!JO#N>=U8-~D4ULbo~K<^Os z7MGNatmm%WJ^W&7-iGo-&cNUYs2RXm|Nc6z3+7C1n+?^z874yp5<(!!V1&MIJf^mG zxIXq3(tf#J+`fLE=_}nOK#0a7=O_;tLq?ew4 zlPDnRgzc91lea1rN>$vjpyci$Ub?@?_`)>Z+JveDCtIIG^No+|rdeH0e=ZzFsP>At z?oNT8Lz1}CmZEEtMxXN}$WWjcQ$vrK{1mMv*sU?lCu|(!1u@vF)fUc$zmV|^B#o?v zQqph^_rSahwZiVF2H;wKdA#H1477x)iX%)reD;5S!B?^QsGF^wFv0BPA+Zq=6GKqa z1QZ@Xljwp!8=QRi1Q>hu_*$Q3-(9o7&rZwB7$qb+Kn?4H%xn21F8J2jnOEm&dq>AG zjSVJcR8hd)ZPGG1*=K4IX$DQ>HV?deXfEZ@-mjJ^tsKB1{qTEDEcD{=x4P7<4k9NR zEow-P$ZRZ20&M3SG+1l;`NP4d(taTz#r1CRSjjjj3L5QKdm|e5=?6ywG@eW6!Rhsn zSGG1%k6mosCzR;iqBDqbm$${^0>eQ29~R}Ku3?i&#L z;vxNzAE-3-1hlx$!6L=;8&IBKfrUq~l`k8Ruc)Blb+!M6bdoF&%)T}zZ=Y1RpJ1=I zU#>;~PrISjpw13q-SeQO5c9AHOHJ#bwFbWY3$@<}zinNb$IsBM4WGU%^f}wo+*yxF zNm0m@FdJ2I1sV4PI{7F{IlJIF&@IbsasX|89=LI%t&V{~>Y$}47|~>|<5*iSG}xSx z3|DagC@)xvd}7IM)D-zgR$jgu*6BZ2W#W!)Y4t<+e3)Yary}J^VSVIQyyFv#AbkDf zkq<-5q%KH$b-Pxnl)YKryY?bkEuOARrqKtI6>YHohZMYTUJ6Mywa{JtbeCw%nwly4 zMz3uaKKTYGpv~(OZ^|Goy(weDo2CM@l&}YRA)<=pgT|Bb4-=q6gwKy9~O=qE{EP=mkt`M9)Q!TkZzlR*2UvZ3VZFzL$FOA)X5 z0eo-X)R5E!fiHC>`R&m~uLQ6V|nALR#1-ou1!_-t8h6KY(PpTZ6NCS%C@45NJLeh!UCae{(4zu?KurbTL_-T*uv`B_ z(x3U8Ghj8MHlgIVoi1@+`>I*|+5hI>8%xV^K45f7Y2QB6DEHb-zIg^3SNU(OWAK7V z-tzPC99<(%v2AvB*kQuJKu;=;M5|AYhrF8vbUSMXP}g41V2_o(C%XFo zh3WyfbAQLT4}bY% z1M6Jpj4{U;)8Uf&AvkP|D$aYa`m4~Z3e|NS204|#`;`e_&^~0PxN6D0AgJjLB#wGaQGjZ&bmiNu5v8aH_)nQM!R&G6w>OBQd-p#$5#KVnB8 z{YKWAPxbGO7IGE^a<05W+2f~@YF*^(bF+z0Z#C)iCc3ZpE3yzrsZJwqn2f^o@H`oG9?P*Hxb3LYl-4-m4hr zbApu1v%|qy8dQgZ+ro}=0N(`#z*4R#%k!rCnpXf#?4HB_SIhZv@_cP>$;mMS;{?4! z?eC##zqEd7R>7l~l*euR69W=L=CV!8?H5pK0T{`0JX;(T^B?&6^JJ5;u&^kBiDmL{ zn^gh8nW7ik)c)%3?tL|HqSx2k(~}@0-RA=X``Pny8tVO61B!fbmjPV)hTB?4MI|mb z23SFe-cA>*FOF8~mCk`p=>_#5$N|-*MuTIa9P20$Euj;#=YWK!xE3u*3RHV1d2&B8 z--W)5iI2Y=U@TLF+xb`heZ6ELNdthEe137MnYXuh-*?1xnqA;d8;Zxgzfe;Q+6DlW z0;`*P^Xa0F4iOn&@LROMwN1`8#eK~D(&m$DFEJ??c7i`5_$iq*d`&VVz;EON8mFOpT- zvG54Si402_7TX-<>qThnwF5fr8*v+PJaW4~b8uO&$U@g@a}F2|$gOe5o(a#+bJ2}B z6bri4@mwf_vF`&fuoa36|D4@BeZbL3ITXUc5W8?Bh&6m@3|4iI@rup!q>r;qUEe|2 z;jO)^d?#c0l~;Zl5{C|<6+mHCT+KhY3ph{vR>wAuyO>GR$AuESwfM?@_;Fsc8U?@@p7@asc*_iCz$ zel$M2A=P`H^r`ss?0s&dqL4}~V^0yRFFCRcb3xbpaa+aevzoJ4Y9TwC{z;ULA&g0e zHr`cL;2m*kOk}G@FXkhhwHj-xJN_?B+jptTEqVmBZ{H#|gPIBO7Jv%(KOO>LHNcDg z9483x0S=FVMlq1a5`a#ImTW8aOKmZAq8!ZDi2m^yq@|^`v{Je!+en2mNeeZf;XtT$~IHLWS{2Fz2=j4V;;{MH`SYIXGH%Xu*g|+V(ot`dWv%(LSL4Ze~Ao%!7QeR$UmhZn_(CjOi zjx>N zZ#(o@si~>gdJ6yhi4V+Edtfi9A=o!zzy6Pk1Z;{_i>JBQ9rd$dwvodne#R6~l=CwK ztH%%dpAp_ytQzgUsNFQaVy;t=^#M!b@p*p=F zrF6|sQ*FMeZGLE5&Tm34io)ja6q0^>TklP-%fhpDosPE-HB z-tnqG)(}Nz;Oy8Or%LiZvaIo}f*HC<+?-N0k=1-d%5X>0p?OeLFKj1Wf$zxmos6t_ zW>&!(G(Z6)>X(s<#ug;#JE}E>P#&8L)FNp~Ucq@PyPJUZdS!-4y<=ZJYn8bDQKshR zmY9yvi&3+$f#+!v_OKndkW$mzfaxqEba{Gc8?+cO1OX^V6z;O-{p-CrU}s6o$bjvU z5&w%o)B3@VXFbF=eg2_<5eM3(&_oZ!{Z(nvete?vp3cs1SEq&f=~&_jS5u%uHS<;a zDKTwA3KuVU)`hL8U}|d0tT11$4;vSVHkGgIE`7Ok@5kehzR2%m^`=i4wB`*r6(OBr z9ieWVsiQ^J3vE6}Z+aNf*yv=4zpS7IES}QiR%5BS4$67C~msjg$b>?9%B%=)s8-n_ zU)tTmn*#B9E3{wVCOEy`fR`v*deC$gysf@FUivfxVt$Plu;Kau?&3dMoeyF^Fho&R zQw#Xtp~gP`}yaO6!O%Y~E~_Q!e3f|8C1_Eoj0w*Pvv~2^JZy|A9nAtZYbAdf4x$%+D2wwLf;|ulAYZ~baE|dE2Trdtt|B_X-`t_~jX)vOnIT0?;6+UGJX~;$K*v zdx6dWbKG^k!ygQ2LB#^9)ZOjv+}Q&-Vbiu9BDI!(9UW0OsBu7Wl)L7>_yorT`tT?}2YB{j2 zn5q$#ynGFCQA2UD4?dGwF+^c7){sXlNP9#|M z_*RU*NEeom)ypekxzoF1a-?2GC4;^iO&3v2B*kSZ3jnsPPlcf50}LIzGbzJYPih80 zmGdv4Z-J|xL<(BtdN5!BIkk4>>%TElo(JlRLFWKI*y0HI_*sLZmNSunO-39s@#m-g ztw`}S2u4m@ebLXOD^5P*cGdbJA-EPeGGRRh!4+Mk+6F3P)I`X0Ttr+c8to~WesJ!8 z6%06~ndahGLg}TH8VY<0=qH31jxN2PR)=f{?K9aBKka(%tj{n0NIM@UX*_9M^#EJt zCqMxUq|I*xJP4#WKf42r8(@22tL`uGy8;b7siFQ3Z57{oA=G8eqEK z0#XiWn$B(?5^?+S6;Ga@u3N!ZiR3C?0xJoTh&$G#?YJnK95SQINC=(_Duxinav3sSZ}29eE|v?k4BOf7g3#8s zu1LYHgwxr4_P1XmXwLnSM=5k$Xg)4%He@zKTCY*t173X;o_EE$Cd7?H*%oD9E=9)c z4nDb%u{ax6jzGr!JQN2V{)B>x=jfC0>UBb|OvqM>PT^Parmf`{!gPY|1sD{wgD?B> z<(tf+3p99qBA18;2k{|BDZ2d=`n8H{FDEoZ>FvtjnIlvaHh*+6UbsK&4L};r8EpTu z+7mo%9a_hR-4-yo(VbT--sMi=Tb6>svT(0)Ct1{_{i0RdM{gMxQNNItWJif6;E0f3 z!vWfnTdn6T$}N^$?@TVl$V1|`8h?aV?I4juaQH&DNjBwqo%!Ep_Y+m5ksnr;d&mr33*Oew)JWp~3L4=oW?M0mj9KE_eMAzP%RcPwd~vAnJFxFPK$bX5ob4bt=zO%eW(Czl8~SJWHqkHmSGa2}4Kx zm6a?Zc6Nqer~_vzd$*Jky7czba4=@8OS4e}OBil%0`k_&HyKzIUib>LWye7epXvGT zTBALpHLRKH2=F787_J20Qr&M2a=v-ExjRNN>p4>)++u4~mU!@uAa=hXc4JleektEt z;Ct@x6L4HoXc5BP584#dBHduW>~tR<-L9@Kzy-HYV*%@0whs?wXJVSd zzcPBB1;xfH17IjTEDS&Zb2fnM1WLVS0RI5yh{HCrX&aD9e^hV>@&-^z+FO44(!+|< z4_KXM1_m$b!o$Pw!9b#1UlbPh8_@*g zrw`oc{q}ZxN|-oSa*fw-gxAqh-G-Zz5R$4>B!g4jvS%NK3>WWN5z_l|iW1*ED!E|s zl;By;Q7LBbz8n^!`*sm;8}{{knouUbVFw0>y%dCv$yWOh`_xNS*ieNjBuV?r!7Lt2 z;J84@mr5o6(`>B=c|%OJMj@8FLm$s4Qgrag#>7`Rq!?buxnsM2)^?1)V$55FZrQnn zJpvDwBrWl}{4dq^vB-U_Y3*hrh0+rQ9u)kd-@*BppNki1EMxb|_(~(dBkRWyta;U3 zZ^kAujA7=8^PH7h7(!+1m|y;IL>4-L25E`!plAf7Vg11}S-C~wCFpI7N8EN)%baR^ z<%21h7SSYJci!DCE3T{%Ae+-7{L+xWFszxt+H}}L6KUq$6fT5#vMbhCIB>|D5z3F- zBHuy~+I}8I7cozOK!pu*#dVwF-nqDu(H3at*7N`je^?6!)ZaNyUjyGs zF5vrWvStXPH7K5>uQcqOoUCR`-=u===u}2ggWJFrH6Ri&#er%YP86VCHo&T-OH8aK zC?v#h6VPIT5kyW-P5>&gGw7W%GuMoHZ#!mY5~Q$!aeyN26f&ymbP;aq_q-T>Fh3i^ z?CW>hAM?znI`=2$crVdJp;SpBY!FYbX|K-zqIC`aE~ChE51lil>5_I(mJ~^)=dH`^JwRPw#!FEUI0dBluPh+kF?t#3JqsrX)ugh{w{ zF`&i;sQK5i4maJf%p+y4>=|4ZD0Y!)iu?89|G>snO~s=LDD!z+h0Nl(6?)YFskylO zLn-nxJ3|3>3g&3R-IAC!v386i;-{LO#C+4UAn|IAAa|r893`7;cF1;n0NJuwPLgFc z=BLal7di@hxE8mN;^gyF5t=b0LmM3Gc6Q+uh^TmO&{SUSc;o$9t++IEpoEAocA0m% zPh(yispRDYb)BQX$V=$-5_0@+HYF_|?hOwnl}J?4T)772%075mR8hUPfkQ9q%}pzZ zv`XBdWkZt~l2VWL0Wthyy{@c$1l|M55#zq~p$N%JyD-zyI*Y_1!`ib)kk4{-)3QW@3Ac-;;YM?;UzH#AoC= zmAc!bb!xin#2>3g%TB@m%|}swwU!sfl!(ag#zxX(j&j(=CSqB^MjO4OU8Qe8N@RJG zdZ&p8p(wU|c@dvxClon5h%eWa1W$@Gl)IYVucuS@R;JMY& zC-lz}fo>;OSdT>si?Nz$P}06QY8=o_D}DL01C$-6hoM@5pi2YpFv_$IjTlc3Ju>N7UD6O7G1hWSz> zo%`}7+TYXz$8mt!)?)5u^E2rFn;~DFo%wzPZ2j`GxjgwaB$JKJO|Uv}XaHXk7+)-} zZ-UCDP8<^*6&o8nKp*&SfTb5&HRkatDFa`8Vu8BsY4#j0viAUBx-BhFxiX1$mw;w~ zaUMp@eav;n?Ffv-+J5=)#phW35$7-eP2*a9*s3y={^}& z;O})rff$WtS+-pZp5wo$ngqE#xHdHw28r0Ge^0du+DSOn>$~jWY%A^-<+wKF&~;J* zQiNajhb{ANgeaF>2GHxIU~ea$BKt8ZEB0pK7ngZ|9e#oVJh~dn@&Y zMacJ-A`ab{s8-%?{ggip<&J}pfAb|CjjTH9QERg4tE*h6^3fDUKwTnqo)>R;b!I18 zI}xtulNXDN6v*@7B16ewWiWsFS`*8OxNat`K9q}c@D<`L`z!Y>7nY{;b8!-d?d0MY z+Tlpd%ic!z-!)d_uYJluVu**V$*@A^6CdI#%m#6WbdNjWZ(56=E5b!Llj+3#Wvsx-o{w0^vVQA@QdTU&+sKePqcO6 zs822QDQ*7TB80}w*Ge8!n(#G#PEeA9DaGx4xq5{3bn=HIf*F_X6ZKPb8%CR|N- zNo3%qidJ*ziYCW)Xjm8uC>R)^Q+#d9{4_NFJuR-qK7rT)>IB%&Mm1@he#`gQZu99) zhMO4w1?kf2M~#Bv1c&##R?kO~q3a$3OZNqS!b&dWiG#NuPe1_%rkR~c_~Arcm6er1 z8T^SJM|CVfIuX**+37E$52jq8PyzSk1=RSHwI)$ zrJOK*{rwb}0>HNTWNqyQ0@UNof5c%bibC|M#sia>82M7<;_2Z+0UaIP1%+o0$o{tW z#W1osq*Z)_T!%MdEQ^h=h5`CPmQ`0Oyef%J%45X3c9tFGMe{*1x4< zKizKG@CZHZ2YH%d)8cFmp_#J-#;%0(9==gExk=#>h}dr13`-8uG3x0CC_7ce^vynzVy%B!XJ>~<%%Z%(i>E-do`r`x5YQ;-Fp42s8=CG ziSGTK&$7?tSrP|NN&=21>9QA!nOFVFq^^_)fhKSjN5xyn&Kzidymk4l0?fQ0w~%K^ z{6AfscM_Y*2drIE@%zJv&Ch3`JJUvMYup-q#bMAl%szJ1b%J(;$QPfT6;(EF@AOYu zdEO2`kKA{RrTI#fx{>=1%1nMhY+Po57T)6gA`|u^Ql=Ci+@LXieQHlf&;=&!eLihnLW3D>wl?M1tt z|C+n#n!or}AU~Kk#a#2;)%qa*%R#K!=HIz5!x@bwXmz-_98(D2ve8}yy|X<9=F&je zZVM(4sKh(FyZI^%6r$7BITPE+e{lXYFI;y8t(>i;jg5j@L>pT)RgecJ5fM_aZi6FO zc(8>B7g-0kl=zid0|oA%F$$if_b#RKPRe<*x3lNsLP9<(#rmeEN$KfN0i*VohoSW8 z#{*yW;!JU27c#NOCDdB#z7=w>H(iZ7Wvsh=5Mf&3N7_MHS)D{}E-NcHS8F+ad++RJ zFIMQ``#KHz99DRReCZY48?ZHU@5R49tB_3c zq^%TG#7}Q-Uurxjx`-VG=Ob~p1?LA|w?CYm!<{pa^P$J_WUR>vGX6QQ*+`3&Ms)pX zIeqX_;EKLnP69P)c>Yf8C0>l}V-klxEmR8DvBRB`E;nl8X@+r1=+-auvl%|*AjAXa+PKd1!j=CHt`lCdZ8H8-RQNozesd! zEbJ)9a0-{9rUPKJSy@?yhJ+OL?D=(T$3Q?EzU~Tu1crF?jjmvLczD3RfDD4c?C}ys zs8~=(+e__#Wj)4!thykHaEb%m0ryrY%vyWBO=51$oy(HvjI zMXS-GH~apNPdvl}$_$ka7mMkbV;z4^AMiD++^aP?UritAizxoiJ{rWpwcH9cw1t#4 z!DJbytCz;x$oHJ}EsWWz%doG&3#T2EW6c{99&CC$v^s#l1gu1J^VBm-J;o(vDxe#1 zO`F@R%Z72pRK=gRWW~~m#K=IfH$bz?(bRg zi+_->-$-V9xGC8g+(jLSvAgJT*T>gMQ)A&2??*uY)YcU(zu`yeFCU6!<4%7$pvn>o zxwLeP_pn*e5lBf@NXS!2q$8M{;_0I z-Bse=3I#4SU@6z+9KH=KKPh@TA~xv~)XbrM#x4$L zkZ?mj#jqp}uA_kNSW@!f;6U_9XMP>9Z^1UQCJ#(9GW7U&RtqYL-3+`U1P=`+DM)>LE>1f>mRgYxQDtci)h8{YvinZ%0OFPw?JJ-CsHGtk{b3t^pAlmtV`ZEX#YM17O#=4 zMzSX_8RE1AsVw6W9_u9%7tr?->!_*C0Iz#vcHOrnXx|3#amrx$Yul6uVtXTXmmW=? zJ-TSR;cw(?99aHU(UmbS4Z|=ti_KTQ_VbIVU!;VUNRg7MId|;5LpK+_t`k2#ha+Q@ zZ!Rq@0W~9+`BV@t3sCy#8yYIBsJx16npk|Gb(J}X)0?j}K0O1{@~O>35fCia5S@YB z>Q~psPu5DnPtmqgAwwXF0;rQ^jr8=^wzj&yoSvS7Wz7H$1Z$C4!7>E7*qE3(em#@E z7jg^`Xd4x$*)%ZKue$`9iBKMmko`Nq7BH_17CZkcxT|iJiex*e#M!w>iLp>X1${V^ zl^|K0Ja4Xs|eUH^cg|Mv|v09}NfnmWDM`TrIo9hZk8{>W8X~&ElJ(lqKL1P3d zjz9VC0}1)x(cJ?5czWoI$uvwF5j0rqTx62;&}q4*DB^xyd17#v>@3U2;FGEEYeyyq z@D1YOkDB&6Y^mH|Fe1Pbxi-nS2$3SoHz<+?%s9OYPD9nuNEHkJgrsv7 zN~s5ENB=G*2c*mLAWT(z zL(V<8!x=lEGalys>L$JXeK{;5w?d$Ec9IxolIg-+$;My4|fr*Ro=w# z!m75_abD?B@(A`E@kktZy{D|n)5&sr!=>EP*VmWC>p+XTtaE_ukD-$D_>xj`OcUTKcsWZSGEEb{~09f`m+1^z=!ECI@T0Gj8Z@F(gdW&G1hL za!W1g0~IQ2L9Dk%dYOCPv-aqpfp{wF_v7K(H0r*P@6%jxv*8A|s0!VqrXrkmyg`#z^RWhmF^?kU8s^PLd8B^WT9^iV@ z`}<1EkT=H$@atx1Bw-%muEML+0Ijt$*SxakPn5Qv#x{1=0$49gW;4OZFIKRrlQn+K zxzLv8+d+ot1RXPxn(A^gx?#>zAZ0*>Kln*Z(LHmv(00CQ^V26| z?DuRR{z^TP5si9YA$}|qePJRav?*%6aJ!=fM8;ygKCTwG0bdQb7mG2tALA(j5L&D# zgs6@q$Wc-*COQ@k2?<{Mel>vUy4B{W+PO`(LSMl__I|o=IwhFLk}2%94%#Gc$@rYI z%jQ(K-GeQp5J17X*?rq) zS^z^D)?$&&C47kh?x>W4LI!Y{x@;-P&CGhw_@=wN8!(2E>v5}BuBNVvomE;ggYz1a zEL&Ee?_*8e3>x4N#Z`r=u{xODlfy4gjaTxBsRXp0E)G<8IUGJWty5D+vpA-*goTHL z;t3fUxp;8TPn>1|-{?6mGn4#^_n(wdELT6#FqO{4W z^lDB{oiHGo%@F=p8VV(QY5~hY#M)1 zyVwWC8-PX!%Xi?(OrccvZRe_;0cUs^#^!xZG$~_j$WeOaY;`}Tzs8h{iA3P*`954B zC(KY6rsYD8B8^+j8AhKt7#cb@3Q7Oh^^m$z6M8M-+laZ0_BU?`+}VvX;4()tULpT2 z#e>b-d1oe4r+6ZLhG+%6Ia0oT^Utvr9r~0NWewx;o6tLFfZ|!*WuOnAzN@QdBh&BG zgbRf-%)CTkg6qy`Wc(jphR@fTe(D9Lh`}5omLF$uUX0`ohA&0OXTr=if1m9Ljr>Em z!t3XH2@5XanjSdRZQBn$r|Hiu0R% z>|8o?ZLo-MqpXCYSTz-4gj-^QjR*<2u)Hhz+g>lj^5m}HB!BbskL1;oj1l^P5_Z@T zC;P$$UfN(nKc~jRvAn7IEt3n2Oi14?N~`XE6%c=? z8LcIyO+RLq%H%q1!a#F(dnO&WKj=NtUIF0Q%|Sthw&)E$+N7vt;tPvNL}s%W1gK~z zOG)SQT$isvCdWYXx1E)dmYy)(kLH#IK=N81(7*O>o~=wQ71a7b#q8}XTQf!@1vBOj z>KEUq4d8Q*t6XEnL+FceL@1ElDvr2U^+VHSxtEg51xTLI9!G|+3Nm!AxMigJCcd4^ z3T;qsdN%1T-@!vT`yYmL;7qE3#m{LO{`*p z@j0d3zI(MdB~{@T=Q?UQk1adz?H%wtWq9JceWviv-y>v8pMLaG2J)6@M0^)eSi$Xw?{<`8d!e3Qmq>-_)VR?+Hq*gra>;3eZVYA zWV=!CVI4*g_Isy=x*+?lmVzQ6oWZEE7A>->hBr_^ad2^mQ+Z>1S_*Wc+VF#egI7M2 zGX5r6-4)+P2BX2)U{KPkBGt=o{2}HrYWGJxuu;$;lb^V`T&HSn#34C5RYihdT2*CG z{rZ)U)w_U;SZAs!0X%K$LceJs$#` zIBpg&{IorRt#sZVz@6#;C6H;|hwtz2&+%m_^IUuzcu0Z|aO`Uv?EJqs&ILOLLMk|n zt90wPaU@C+yABhGTS(CurZ1b`Sj6FXW$3ifHlvP#4V~KJ$(@h2nysC zkUWJ9c~O@cz8B*GpTSv87a$}ppfNzl#FQVUK(Z^Kl$SAaXBjN%c9d;|7_52|bi%R{BAc*ILw(9m8!aWDA+TIyp1()oKSJ_fNlE}_%UK5JEqt@Gy@D&Wbq@X_yEO| zG*WUqbO0_M0$Ld_YH)}uaG>nWQsxd|Zn$DNdYSw00iaZuH^g0MEB;hc|Kn%}ppTS2 z$96w(jd0@Of~BdL@rPslvbFxZhM?57P}0!>jBfJ=*BpDLjBVtyzi9%=jZQHxJuIWU z?;RcTvQnd3D~qm54qsY`PnUfp9d!{ZeyBWpa5!9pkhsSY!=*fFX9I5rFj(2IY6FN%a~F`G^|d*96AT>rsSTkc${=5l!9 zD9Omm#cVv%89G`+a{qIAYdH~*m)6SvLe(s_Assx>GiQoKY0AwEua++T!-X|OV(Zq= zEp2;Or~YVi3yy~V|F(OA#dM5ZOM8CcG0=n0KB;-82L)CzJ3BkD6_haqKs&gn?QKf8 z+4f2{+sLh!jiW7l`RbSpPMqn@R}Q<9i$Q+tKdem7HVJqH-NtQK52eYc6fd)xu`}C7 z^DnOpwF1yoA#*&WMNbBI#Hy%xJY-dSKWH+Jd0NNl9Mp4b5eBZM7wfOqrmnx%&Jy~g z-#JzO&e;6%5jSi=8r)6SP>j&;yl!w++@DErMSb>&&G1bT`|F%2n&rGFCOItiOzQwO zWol}Qh!_ltz#k1hO4o{p+sOZ$69CUj;8qr(4>Io!KE})w_1XpU`33fVt_Pd5mUm{q z6<;+0>;9t`Rm0_Dwf2dx?m`Ly_8tFrqe3$WhW_>N?;nlUmZCr5In=_6m~IWu6!N4* zlh`u%!TzU`;Y7<*}h2J54f%Ql(Mzc&B}#|iykr#CS0k_DZ6VE>)MbQXws zuej(O^I!X`;|E)~VIh9^hw~3cL=;FT6|}tlw-+vU2lZ@pSya9uZ%)VUbTSP0=US7} zWS>YluX-&JZ4c8b2DvS26=oPkKe}c|p*50!bNON>70!Mx z{x0M<451=_NHr1?Ma@l9HXhGra2X{gbDi59a+bL>1xjj@s|)hqZVGd%Mf^w=D}pGd zDT1q}T?d@MKTq=eY8LOx>R}*Pb@|y?in*gMnWngP^NL)lZ&zJES^B3@BFfg<`yY>XX7V!uDXGHKxmd9qVx4es{zRp`pFpiaSgWI6N%2ij07f zAxbsZX8)Xw`<=TG0UYq#(eoSwyPD_4LSn?HXZ35{f;=HgytFzjzQ2o%&r*%_^Zs4z zhZn|)Ctdji#x)-sG5!TKKfi32Y>-i29x_8>`->LesfK_Q*Ctx~?VBjT*lOGpkj5QC zO&1@L^Rl#uJ1i|+kZO``9S#V3YraJe9n=~uLsr}mvOF-OYG+}w9Yk&+JvL^OEpQu$ zR}LOkM{C85*WP!GL+9ts8EZ*8Xn*I=)@M3NS8ZxC8aJ0ZVrysi6`kmjlFoB)m=RJF zt?w<4g=dXzW&L=|&%1AuVSRs*p=#70O)cr-w|wwiL`ve)hNC_i(q&Qj{k;DOYgF!} zVM}R>TC6T)?^*d+rZ~ufd9Yqog?ZqT4mAZne8HJDD|^&h{==AMxVGyQv&OSACBbxv zI9^=qCV!AQ160HoJRWw;>pT_<-6Z)FMO%Y9VO6Zi8cMI*SjMKv4qF6>>sM~i-rZbv z{i?C8H;mzOTsl6d4D3T4^EBn3ZBnco+&r>(zT^7>m^Us`Q$R+c`P+QkJLNuGA0ecp0Jd zuS|ko!+Mv|YGl0r?0);Ca9sFXFY1@~@bYfmtD;ha)_wYLxVcGOYpq0 z%|!atGXB!nm*a_Yn`0q6*tZ4u~dW=xcj`om>i6O1(XbrqFt9y~X{W+lM=6 zBUrAsTIdkL8b)(8k01t{QT9^5SVY; z;K^wdpgtVJ*5VMC&Psm_C|TBy`1uQqnA^(nu*W>R)Hc?oXGGOKpK0FQdCHr{!+mGu z&V{e`@I(3F>?)d}Xq*omf5wSMweicwt-uoammJyB8C1rGn@XXy!{I&2-skh&o-(}~ z&F|DCzr>YQqtT5{y_s~L-%Cr+-eu3adp?>v{{Fn)=#{(6ed;0YEf~08`#CMmYo&Nae5ksOc$6Ofb`kOG*)sl;;^f1n9N^l1cr8_{e6A)H zfnNJkE`TGc`v(uLCKXbu6}Q7S0SPLs|M4q{hl^ldRAR!8O`;z59MLG4js-DN5}qrM>gWnUK=A@4g9$T5zr$EUy@BC(T<3JZF-b zOI##`ABoPUg|3+LxhobsOZD&Fn{ik1ejAanF8|OdgbugBLEa$_?%L1}+VMP@ZjI$V zH9c7}K7^R?0d9gjGoOZTkoI}$gK}cH4@xtFvz@z^Z_9cF97$b*DHkYsQfe&?^nCah zE3K-2)AlqYIN5ps{)QuRX!+DhuU4I0>B^(?+OYOGaj&E>F#H7dh{CN+S}-F?*ZUp! znN&?$>+V>}L4NJZuP5*KHT=8}I4(V1Cei5!>SzkE2UVb^K@1IX3$5kzYFN64G7+!m z*{SJM;irYRT&vLHs=L&#;DBlady1e`#_ftjd6WDz4a^1bWbbKgE=Lz(_c90BMJ{%=B2Zl` zu8sQm=p~`h=l2#I8AG~JFi&3fdh|vw^3dZv&PKlk2^0VEZrzl*VIa3DyZC8EJ@9?+ zP}pm}(bp1<;8H+;TOHdAtq**q##&K?ZuI-!>vyqhF|8d;+SS$~uc9mvXJ(;?PHvTH zC6_)$+>dONf-VYr?E(j}4uFZ~l9Ca+^4i~{k!xkeo$&C(+V6PrYt|*! zy>9UK_g8vfv6rkoqjD0bNT*ah4n6$nzR$W}R2ZfD^diodx&Kb3jz&jhDoH@Jp&_v= zW$w~sETu<|n9FSDkJ#w~66`l0E5VEqXD{DYR=hGYCQ2y5b4K&U3yb})&pd;^bqnS- zGY$JizkkoD9+lUaKL$TChG27RRfJHosE7$Eg(6qrBA}^6Q4nL|;Eo|7(c`>=`_AMn zg2mqF_q6&W)J(-vSaj#!ttC>SseUsxc5B6zTvo-mjPHFjOvG>1RSfORkGB zyk1yUXw^KC#_-N5*CT!it=~VfSI|>d%~f}k+r?PRm{K)`Q+}oAdYo5+_Q=C%S?vsx z*AD=SUMnk$`mrop|9vNPpRL5#JZn9F)qgG<51GSfC0X$_V{5XW&0{VQzJ-$ySF!i3HYO=*oron>#$T5Pjc-#Z@1;WqugiD975=S)hsBAA8&ZEoXfW2B{`KJhJvsj?xVA4< zzyK6@t8*^%?~4i^BH#3Z=4oxyqW(kzTliiCJ*OPf^JvpYhG-GlRr2yp*n{ydAu+*1 zEN#z#uCl>)Jp|{fTW-dyak#D=89R|T z_8#7IPoJ+NDC*yPJX7x|SDPDN-G_6Ht8DPw*1H|_#vZ>)&VvoO#h>7IIX2Lr8JOBl zXs+}WK4#s&wG4G>_#HU=`+Yu%f(G$o`71=Fa*3nR&#;XmFgP3n*@f0d3}N+Gn^~v& za4fKb&lpdQw{wScvtnv(^L@@wU-!pmhu6qwMD-5?7^1Gk14nigk!{=;VDorwv?lFwyMh{scyI8xOIUqxG#uv^VfLAW(y2e7lY=;IF*{P^ zUW7~JK3gKal!J}yq*#2Hu0-Keu**2Bf7kj*9nJ1!RmL=ulO7V{!ap73U7+&5rzUU>al@xyOS8P&bV_Y|9 zXatdri}-`T6%u}+kVz`(;9kLz9C%vQXj)7(n|M(MA%uD~(KU^}_7ENSI zbq9JkNZ87oEFbu81sCobXrzPHYMvufQLyeDcZ=&G+4RrYdfrp4RgjvO4I2sVxWOwUC9>mWvQi{YjPkjj!7) zHzCbl=HTIly?R{XPK%Yio-D=z<3Bm4sNro60(00 z4>NBL4JLl3mak(ot{dJKe2DcIX~{ddBWp_btoY(W-`oW657zo<<%bZN6V8q>Z{5iq zRYGn&1mdOrl~{LL#&~&1(5C#l4YEA5M6x{3COQgPv09btBT*_`YqbMI_q5}FLa>tV zozrT4XWy)vxm>0HG}xE)s1N+b?;w66d;&6tRhl=YJ$u-`IBjN7)aW;!9~*POOm@-l zTU?%=BO?zI5EXnW>CxbyeH7Z(ARE$$`jSMZu3dP zP%k4(%O*ji+t!@;ASP$jf%zw;=TeFD!!#oz)b2*RT(SASuAE7$UXgCxar}XJn#4D^ z8$Tkm-1?mZytA_U#1)tl!_>A~{(LxnWON$|;indxbTYRvFt;bSG)7q#N>C675rp07 z{$+Zz2+ZnHWZk&TH`OiOsD$ojvKhKaZCviJZgaDPEW@_1=Un#T!6pCu^GVPZ_MY-B zud#pZ31u%fGB-)BolutI|KsVat6GqF)iBD{>m4R)$26pGWf;7)@A-aq^IsTJudVGCGCq~&7Y{Kj8B zcL0{R&8xh}-@V^LCvb{ij1*T26s$Ec)<>wG&JIYnQLpk71<_8 zTI@~0eJZ+ZO7C7e(m3ziPysv%D6Rk z6q)gD^Y{DlGC2{3%Z!4`BfK{6u=LU3W6mIebI3-@Jg58<(y7+kb|;A;7FsY1+1E`; zZTZsZtm3fu$sdN#&(n17X|ddcsaj#BAYI39kE*}qB#Erjcs;EVO4=76{3-3I?=Yyg z+$Zu`E#PA}=sYq+!`T-5u`q5If6qz#{#8|F2vqAsVjMOEw{+)_4T{y5W@Wu)2 zbw20FUlH(y-CszbsHcey8_Ni;JJk9Rek|-R=PbU1mzDco{oU8@o9Ioqka#PmyHp`3 z?LLIgJ!}l3f8Pg33g-85-W_FcNra9eH1zr8P?nYJ#j*J^jYNBL9^s;wouM#WO(G~O zJ~YLr5Sc9?xVcbMFOL^dyC2UssO)lAZeza;tQw=E5uV#^4YGX+_S^joa)9CdS7pz{D}-9O`^3m=vYhSR;ZEx05$97$Uo}rhiFJ4#h6~ z_kx*ZU~cZ2hTAtSG#k)J(sZ@p$_EDBnJY>@`p)Y(vzu|I+T@swP){G9^L8`==S}?d ziLnlx%C5S4Kj7`2hKZjypEYsRx>?a)|3)b1#r*e07nh`rrhJfK@L@KH)2E|+3VzxV zYv3sEzI<=VWGj?fugp(lDOwO;ve+@@RWN(c1GisNCrykmz%pPxDXu=Rosu!r4i)|* zM}Z7^0KqwbDaW!h@=2FsHYfq|WQ+MV z-~6TL>8aX42SU$jYr_>uA6FXoNp8SL{GBtOX`CoCA(o4AKyT}q!8LMM)`XQNW1@IA z5hPcYo=E;T%DII=^e@T%9L4Acs3q4NnATxC4<2qe=K!?werLhf?<&uvf^O`u@{|q( ziuNkXPsyaHdV1A}>L9$0?f9fUJ5{t^OMiNMq_^45LJ7FyM*OSvFCCml$!}LM<$kW_ zXQ9qKl|G!74=ceh4{(}|_{crOEOoD@>BRdzXe~d{jdH?}kf}%9aLtjt;umtiie~mq z;{0X4cn68oZVVNT7a$h5dm|i*qhZxZ9d6wiZ+F`K26jXAtYoKTS1|!rY>Rar&`U4w z+1ZTi2@#0A{A8#2=UL4$s763T6)8+&;A^Y6=hbvA_3zokFv60&*J-ZR!! za%%7W8R&&pm`7NncFp5wL{(d+^HxHMVhsPYFNI&GXjLu#DcjiC)IeQut8~)A?rwl; zmZ(4e0aayG!!s=sD8|nMDb+S(A~3N$FH2Y z*0c1M_EEzW%6&eryP0p1jWP$J2O?%m>iT=wZCTBct*70HqOvkTnQQ9m>Kf_8`vn>N zM1uI3CNDVF8jw$48ZA#2+TQ6U;&Dc-d|WweoN8im%cu^Y{N#r}g!y2H9CondiheYI z=C&|v<7>L;OH+Ss*T`!E{JGX5X)SZQ&Oev3)>V5o1l2jk8`k%4tEFm>Tu83SEXMf2 zyMoBdUm@cRRTT!S*jlc?8pXQ~=rbQqVSnuWzmH)wrdel`FZmCLqpV1a0X#&RsA2mFqu&(*d%4taqdjTW;LzTAZ0=+QG)> zcdPx9c6I2GFu&8?md`5h*^PHkPe$l5R*|^?Ho4(H&Dt!uKZr!oSX~SD(%*RT6zom% z2Z@`=%3`DqeaPOIo*2`YLy^|})BOyX!RLyNZ6!;g68_vRS3d$11tQC{27=pPtGxHD~)z^Oh?zCg8pb*eR=5s9{Mdq$iMG5b#Rj^ ztG9g4Yi0QsXF%b-{M)wxiU80W(ot{u`$t)Bu9+1Bn&Hj!{xhlG_}{4s%`Wn|4~G&* z#$h8fq5f%4AWKGLbxsa7J-zJfc)))2->Vx}={(ShU5l@qj&6B0H1L+gMBL7zs(;6A zeL`p5sF&8@7WoVIfPIBd$N<7p8$HJOS#Zu_Q#6IF{SG#e6HJtkkBuER`Hb%AjNi#_WWWalZPwh%if zeh945=-p9jA}(5$QZ2?1sw^P2pPZhS$i&ic`w_IsrDybEuPluhYS`?46Jv(^8&^f& zxp&NMzt3y0UFBmigz#~W0})m}4c5>iaYEDffoom2*IC8K!=~iV(z)vL3i4b&C1a1b z8sTDShFv{9xX*bM`8ScTF#G!YI8t#M<-V}yerPLMep{L9CVwZ-*e5UjkcMS5#>MHj zwjG0id_G;#S+ROj{1hFR!f?yI%X4U1 z_Y=BZIv%sjp=7pdV~&S1`UW3`?y}3uxkmOD9tF`GCT0`k&0y=iiL+oy>g9cRWmn{+<+T{EW#I+HpM^B>*1<`$%AYeb?(>4a`BccQ*}FHx&;X z8;jJXv1gynlZLz&8U%#9Ut!_mQgB(uI*oRBg+B!`TAn)Cw-0ez*hl2tB_KU-!1s2; zm?QPquU{#R)$5vi>f*WT$C<)I-Y1(QV0QfVtFE8j-G)uCwVAPk$DO)iO(ZYfcK=3i zyM2xypBO)Ka%Sl6CUwi!+sc7cCCW!eMuJXS7*->YH+qyjKpgIpg#~VgVVZJq>HRF4 z#}_y=c(!w;PAQ-f$%c>RFtRY1jBaUSt?QaBgBBT+i$KaST%^|7LY1#XBt)tak;`>a zm#mtsf4)Dwj}9{~7S_MT)>iO7K+JA@d>mwFJ(-0Mw+Ohw&V!rS*+riP536Zwp9As| z+|b-DXq@nG2v&PhVNko@G9GvbmUbw_r`6J+Cf21Jv2^IJUYsDF%?v}#gV6*N1DE}U zTcGt&`S^cd>8x|(*hJ?CV6b*~u=(FHrfi?g03I-SJi(>o!SfMg1p^I|$7ndJxQ&%y zD0FD3JL^B0tudB7_2L4VWosz_^Tx@#0J>$xKj9DQrjp#iF1EWc=u!ieRKuy9GPCs$ z@^*lw2bg?2yRw3Tu!lvG-V@D_$mm^s!yKn3xAK#jL!{=xr(yVuM<+&y?Bx1z!x zv_TX11OxRRJQk72WgKq?W|9_4qgkiS^+6#KCDBgSl z!(ZTw{(R}Xv%jx0OgrX6M({vlW5tuwsNqI{fdXF7mgo5{_JeJ;lGL+=#me!4-kKp+4 z_9guTOGaf(5B^|zef<>h?K4GT1DYBzplv$(9~s`}lLOI*i~Io>X*aDZEh}?nKbP{* zWe64@fvYE6uaP~N>YBGwBN0V&_Au~?iZ#D{{rbVmsub<4)k#jEMqfJva}CqU~oL(2F36%-27Y zvXaA$mj6=;jZ*JOlHCSh4=X=|(Nt6Lj-)4RVhK?OA`BPfSA=pv$L!*8H8GG?I{H~+ zY%FjPKqPezEAZj^Vb3Ucu>t20h*1gRWb>Sh1r3JRHwOibOTRh|+5sR@M%EFZeReft)Siv@i3D-e|b zCjlJOrx!}T;a@CZY?~+PJ3F;|{`rZP57hmZ&=aRUy}E%0etw6=Ulb3E4|sv2!9+ei zx?$7{enOrO{YnXiWTXeaBzz_RVnJ7;iybgNR_NRSCFRo7djI#?wBI;m;Pna>M!+UM zxLQT|-K_7sF)J>XDrlFf7E9SdjowEJ+V^JqsYuEoL37HJfV{*M~F-&(+EY>t|Mkrm)QIRDSK`nPQy zTXB7O(WDxM@nSqFB<5PSj0Mm&fIBK|!DMB7j^70YjS?m2{ z{#&}arQ=H+w9dXhIc5@@#@xJzz=?9KAyEcIR`@7mm|Qln19zcfO+8J`8tW-W4GoQ8 z$FVYfUZ9-h{=YNT#l~JV`d@Gku61{JXUn6%>gy%`KsP9PKbi#xLd4k?4>G@CgoY8_ z5RiwlaB_kj6Ehr$M=Ef9kK8K|x#fKG5?r&ECOELRQvQ*ZBLk2Xk_7T7YEp4Ymd9!E_k7R*&?K&kCXB5M;-!+ z;5br7naBXGswtiD^#0nEkV zg~}2q#KDIgQ=V~JrEaaXJoY~zUvSh_QF!O-`UOEoiE;G0*W7g$b)B^pwzy2JudYRl zf4~h79DAB|oV7Kg^*`GOdNLy$9u(+eld|%6fe-3hcLECq4h=6b+}76CHa7YO22rW3 z_>Y5z-fL?nSZu77&n)lzp2ijIBVhy-g&d^C036l0n*YMU%d2-Yl1aN;LW$ z_KL$RCahUJDPgWtz>3U@`kX4eJ062X#?6jfxY@}pccd{I01&JAv|_HxM&^{-kl#{S{S!CI03HAi!Nz41*y~CpEA%CR%+^#57g*s; zhl_g$bXQ8ged}fU`0=AE1%0A)|1qK5TlHKf+g#NjY6p>6t2lB+4O)jI?);(p7DPQC zAVbC8L-b7zszI)0xqJn2FWj>~KSdx>(SBATv<~}+UKK6AhV{Pg(;D+IzNW&Y$v1Py zcU@EKyS~k`^P9reFEQ3$%Ad|Ln@o%daR=M4!FF#;51pxHt5p->?HkAMIA#IMH=WAY zQg5@DJhnQvwxyEP?OE7eZOcv#iHV82y1E3*CXqZ}%Zo@Xucl)t!~U6QI%MF&rcUaW zHvHr4L16+&%{eS<{^t_Da4Tf0yLH4a0y}n9LqbBrq*V%r9S=`W{{TKG;1EoJf)sfg zabqR$>wNuVV`}+j3z~o;3J6mDF4myC@ats(B;`O~RLEsB_Tk&OrKsn!DW}o1l6f5{ z6gbREWWU2|-R3SIBmTHS`hllzdE^}RrV)wP8qqwYF;)MSv2@!z@i$e7!c;8Wv0l}j zaM<4(w?()5TF&l~p;HK>Q7kK4;=Hl^`9{f&laKfaQlSmnuh@S&D9|MQ`b1%d!a!35p) zN_!wWm`3{h7chR0_5Wrd>Zi-}Mt-vZXa>1k;J~qg{&AqSx(BGRv?Y1PUQ!rIzzk{D zJut@+n}h>p9*#v{p}b7SMEfa!93=eeF28&F|9kCe`3q4$knlx@;A>lijQC!ptBA_e zx^PO{Xfu|VjiPgqyudN`5dBx~4GgTKU6QualGVG|YKCuA^cIiMa7^)=^WjwZ7)zg$ z6B4)p!myr&eF3#ikk79SM9Vb5$a&+ym;U+l=j(F~s8M5$Efa9$IhmkAK`Ht#-Q6}< z9-Q6g7bwxX;BJ!K0S4ZK-U(n1-knJS#lsU@bR5zH>vt_JEkJBYI*JrD%ikrbq(96{ zb%x?4p8J0WG;{@ph4EXjWv@H>`ojCnudc6O3b<^7DJ)IKw^hDy_?z@)FgPfl%_bl) zH!#3NMJ0A9LC?yHi-E!CevlOtgSSHy-z(iH>{MHfQ1CfC zx*O{Apvr)}_?naixFK240>={eqmaiD?$9Lt)Bc25yBM43fN)BbqgHX<+f3%ITkF)L zFdg-CH`BzE80y1pWHo#Var?orCE0%!NeV5Q1Y6`E-pUb&#)FFgtb)xpN5l80-77S~ zIS1-;xntxE%%L5|3ujJDR5indE? znem|9$rPXO*f5DJP>D}iPSFx6P9=`?nL&f+tU;<8N}&z&`M_@>V4dhU6lgE`6YWXb z$vmsk7T|pdW4V77Z)Ia3;cu`d3mH}>ty7&g=bsvpCo~vH+6EBLS0r`d9thMG3@1|y z>ri5ui!x<5`E!NWRe|C7w|aX2mX?e^d?;sQ1(@0X$_nziImpNQLP-KF$@1Vxh8Q(a ze90Kl{6h;Is6Ym;gb>SRZl&h~kSPgF44`XydQ}HFiouAg*A@#&WFiR6laplx(15k6 z+z2C}NuYa^pO@Fx11PPqP`dKe#u20PBeudX8bDy z0rx|5NO{xBIIwrW>+H3MP0_otad0%#pE8=-+gHqAhW7X$$5IS09)*1ZY)KtwkI`|t zwrz4Np+?+KlHR;hXTAA6%Vs`YQp_2%;?jB+GZxpK2u~j5#Pa&eN)vP|#(cgRNr0{P z?z0$gShicIaCSPT+hwr#N_8&Q_Cnlm2+tPsgzWG!`HTdi^?2fEi}4`W`($d$_bMp7 zYXzGW1Gl-dc{A-K{bW6ky(DKXMiUO7nRa6AC+E%NrtfKk>UyJJFQ-TIiyzsD6XPd` z*cj$N0*mSpDpd z$Il_vx6BA%u_4LB&RTiW6zo{4j+$3;z-t8yau$xLICN(Wm{4x`seMP96)qs@Ec5Cp zNrbSY3ZR9L4CkRn3zZ`pA4M@O<{=JWeLtD^M8!LapzxeE7){WWzaLoDJEmui+mtYh z6n5msOhij4A@eX>7(`G8vI0LVe1GG-F1TFpxVprH>n5`4Zh2K4461IxB$;Al!Lu2S zZ=xryV2^WbVUO5u0P$c`Ma4eg&s=T=CL3%vUy*bCUij77?loY4Xv17~0t&-) zymK=%>B4YNfI$FX7Ig0eG&#&El*j3|rYkbP!{ahCo>+vuSw=_gUI5fr4}Aa3%nu?m z01lY};UUr|r;i_fw#I=5?AgHqFlbAKnLb$eyI|ur3}OLF<^IIHcU2z8??psff$UcY zrU`a>dUKHub4c!zIM6Y+`js4712s-~vbymGLJk&j*}M9(HI0IEF1L_Z9X`qNg+{g4>!Q}a zuZ#J+cAUm#-^~%MGDB&Sj#utTw*VMzNjn5YzNM7zpJ*aY?iu@A#(Fmn$sEpG98HL$ zE(T+T5U{YFQiz06UHYCO9y3Rjc=_UcMWSkQCFy(~`Ji}XdJbtSVo!ovM}@}`d41!) z+oi4Qp-?cbC?Y~t6D8P@)u@V$ZcHd^`yPDT${9)?I{VK55n*rhh>+00A1{mH7U%O} z{{3{X;Q~6cC*C@rP?dTy12?fx1av+Wt>*{Hs-RGtXsUV4KHgPv`#uJl);OsbB(1yu zBm3uA$ZS6nC%Ll5iGo=oU|2mP?gjiXG!AK<(PU4gr~(FCeDUPb;c*EG zKm?Tw^iBf}fZ(RQfdqz$9I42|)t{Msj^Zi5lQ$!QxVzps1XwV_aR}Qkka;Z%Xg9uC zyuSTr@H{YNvxoEM1<+A> zNmv3%_5owEr0|ju(RDzD#0jdB&`B_BG;6Op$F~CjX#stX+ymfZC&|6Mt|N$Mi0=A9@kb~StVsHopC#ybUR+A zENS|nhw7IOFDT)XS%&uhqGw@j-O6n)^mI*3#H$^|^uQJ&?k@FP{}j*X$wV_GCypm$ zQJL3{*}(QzW`y#Ia_u3e&7YUv#S-yo7Kt7>!~ARC&`!7AnP}=o3m6&|`8P)VIvAF% znosXJhGcIBiH6_NMrQI;y>yZ4bUSeRo*hxxv6r_ZPAwQ6j-cF6UY^#)yu791+xBC6 zb{+3@vVHw~b~AE|z-lm#XrpA-fO}Mz>;A&?*ZWMh*{#U;>3D-}1J8t&cGu059y4rb zV`$6vy`^0XxEX_d7)FN~3Hkm~S#x$KsaBfRrc(VxQmL}urZ+mXqqEA^{Bo(ztZ_`j@hra*kwo2mx!qMz4rl@h@70< z!?c|det5m#id``d@@OK8H=ab98$)R_XOut&-htt8C_0~fL^_|d`Z))wPZ$p}rZ~QjL_I2e~Vn{;>>wHgy zBQH#?!tHGc*4GFpiU>A;6Jh@JGM-Gqsmu`$O7B(YZ$i@4@3yeDFU^t2R-k6Lylh%I z4lkSPIeEbtXf$)0TI6$ozb@P7TwyvXuAzxRh0w{X!N*Y7`u<19cX4#jKGqF;Az3T# zG7x|@l}&8t)}uR_kmWT0{#(UhJ+NG_5c=in`=yCW*JhB?%w{Rcid?L5xc4aJZXzY{ zag*{3^c4>S$2eI|8AAAKCPWgpMlgC61g(B`qX0A`gV;CaSzle{sETF_ z0);u+;5}x?HWopbO;y0P?x>O@UI2Apvic;$U$Y1R*3TUCKqPW*Gr{dDz*Om=&4FJ) zAm@bzPwG}AAdfj9CV?77eWsEK2@A?*0wTZo$bcy~cj*Mxj)Gua2l%L$SYTv4Y6K9U zcY%rv-AQ98*@fbf$`>vM`-v`r?>sT?O#3C#9Coiip|CWSt!k#29do`RG zPzY6bN&SwK8(23!tmH_mTPk$3Nc(Gik+2)>6a8wrgHW#G4-72%tQp8#Wrmm7gAO`} z_Fv!5Iv5zik}y-iC+9GOdQ+lnQ{3MSj*gz!`d*? zBT4RL#8Z}UW!}9;E>1ywXQ=qhyruBG48pj--ft(? z()$-O-ld}%Rw=_O1>y6=?EzWTSBe^G$JSi@&@l+1lZ4S$WYA`kuXoR6MaNT!4h}l* z3-{x{O7!WUCxDr5$niVr22ebrCY)9wiD-=Ra1IQ_02m4=3rqv2AN^8X+vLU=!jo!p;HsL&3~1L9YT$s>?i)&aUr5br)n#Q{42M2CW1!Ciyn4v&wS z)aB0h{s@|M1c4$f(SZ;lT#cUc3i&wOd}sqX$7K`}r2e$=slp*JG+>nT03UKnfOYU7 z0fr~R1TrnQby1iB!h7~JLZ|wD^nqsVSy|nJxCc-i?NfxQ(&Hds3IS$V@=5U!tKbY0+XbFqG$F#x4P6z^mIaA zR!6~s?~*>FIpG@Rq}v`3=7^0q)ze={1Z+;Y-u4M<7wbm*-lv8yrWu_o{k`)iuV^Uc zRQAXuVLJr2`Llz&)?0908f*8=7A^%bAthiLTn?08=D%)=`Pul>R^MV+32g8%S(Eda z6#mfrrab>3w|a8+HGz%^2)=!nE6*2nsU_z9V#}?He?(dDmDj{!80X=@VFxwSRGdi7 z4za)^ zhq$C9pw85i{$X=-ELTda*)Av~B!}2VR)PFF6LYf<(C?J!)iRz=FD!iB_W}}z)YQ}$ zUuu{P@^&Eth>I2M*G+Y2i-D3bB9b*H{`amv9?gW&<6^L-B*2k~T~|?Wp}IT@anEYL z-fPl%K|h*LTWNH-NC+PTL{!<(R6uTG7Uv;J+JP)9D_f+N8}CJwebp= z$k-GRu_I+IW(ooHQ`61|;*KO++KODm;W>Kz-0V1SB`0|OdNHzeq(_+54t-aSz=KanfjgxC z31266+6k%$tY(Rt$JRFqDbVn}@B!HwpS8LuW)4(KHy3KoKML8B)?g~P$+2S)I%^%x zcJhc}K5P4on7Ix(MOeBSu{^8YW4Q6@~di}(T zQw*21L5r6v$uU(PRFzFQXg%yjbE3k2VW!Gt?swsdnq!9FAG0K3vh>JniHI=x?D(<% z-=Y3y&+vC2dt<3WamhP8gWo<=c;_fm@JjYVCKp%@;KTbIaC08W{Z0HqS5s3{69m`~ zPtis)qQajsFF_reUr=y$5d?X^KS+738@pp+cXoC%X%>kxO@Rn37$(Natp9^Kp$;f0 ztxGXxD9dE~+}z$C&t}hq?ICT@4>)VwfHAnP2a0?^B#`)*K+A9%r-kyuNQhDHTX05? zq&$geWG&DDOyl@(l3_-Wii!$!_hji@4W;q=p6!rL-RxA4s0LI-Xi`Mv#~ebJJb;&~ ze56sNx@U_izLffVK`$C1BaY7FtnLulry~PuLLx%$Sr1;B!6X=i?)#E7q>~I%?uNAfCH`!id{gaCc8Z$52f zM90->_jps%TvdX_7>eUer_9}IfAdxh&L-1y12qQ7lPi2n6W^K7WkKm}0UyM#=gZrb zwrQ``pQJt&9~W*-m7nie%!2v_pO2@mGCy{ZVfff4JKXDij;!#(1#j@^MO7ZOynwX7 zp5a@1f5cdOAhK$WNCk&EA_7kJ0x6-oLGx4Jv=f84X+?a;>}bXjaLBFJkpk`{4sxWm~)X{!DIG`Vpa%<*MwVG2TmK~C$l8qEtJ z6Z+g2CV(KO#(MotGg@(6G88s!5$c4l0t4Br-pLfe$;epm4Hp{1K1;!}2F}jTMr*Xo z4H&K%U%kpx&JftV1A=Qsk~z@3V83;2n{7~e706&c7lX3Ulb@h|c(HRkE(rszl4y~{ zoxxv$P(7pCQ}-}nh;U!<#V()O;6KMFBh$?m4|ZDbKQv(iYZhn^mVA=m{eW`H0}$YW zW6_)6{wge!VGW<{o6;99DlJ%U9|vYjb91l%lV`{o=qfE7@A_|m-_u+M$6)ORFvIl4 zAbQpNgMg>~TT4b@01`8uIM*JddIzfe<5!=9*e&STpGC($A#Vl&EaEj@Cg16&e$t=8 zHf@K@Q=4RkHh90!P;8boT;$dM#!bcO2(~089|g=_B&IoA)EsGB)qfw6(7|r>%6i@N zBCtb54K@|8Wc-Ypw@tH73^w|M=vUuzeREFek)?~)Pm{aq1?=)8#=`Hk1IdB(1Z|PBpxD>gSI8Hy_!7&FPHR@;_!+}u5vrRU8N-#I_dU<# zDfZprwHiCMcl)0ojE?sjjZ5LaW{=rsvqsv+Q2O@L5+ybJzv&7QAVIe|qB8|Llp}6a zX~jB3o&<}-Ty|y%TA{zWv*SzkYO#2h29lwm!hN*`aEQCh4RBgtO-W%C8L`C!&;#??f@}d)1hRgM!a7<{IEXd?Gv)y3v>C(yVPs&C-qdsr^1|%W6`cB$ z;S51367*L0Y*bDH=7W7j$v3mJX)q2zJ2+XIiA8Pe=wgA2dh&?qwJ4;|-pd(NEM0fZ4XtqQS zZ&W=>5B|iX)j-FYY74vyq2pZtuSdCY+tSZ*pj$UNGuJ{SEP9#(y}JVbI>!nvc=q@2=c|v|DF;E`?%*tC(L>&)f;lt>anaq>G?RlZ=||xe z)Euy`VTB{;iI#qKk^~YncO&Q>+n#-r!fUNH)kejRM6`XDO5o_sSG*nZy_;xo-T>^g z#;M|RwboPaSkFq{0pm%=%7wx*`L;x>yI-*^43R}o;s<;+MJ`yx5A*fx4e4rg1T993 zpgJ?wi4Dk(WgDEO>Qljs5yE%_v;uj2Cgz zzuCXJGd8bOetj$dx%o)b17jksnwyg|$U&=wbxuW$G@kOt^JCk&tjs7g9D{ZH>*CkJh0!gk zQ%&Xm|ICLIX(JI18f-sjF^b|lXGzl%#uAgylEy_(2vlG%!iPmsxwd@Q-x^KYHwfPu zF9;o7Dt%P^_Ek$cQZ_I>6Q$abZN{PCLj;MB?v|#s@%*R$I*`is7!bu(?wm+5`SKWq zw1QLK`{Ys~-P3fmeFG__7zjG(xB9%XLnF!otuQ)WU~nf(M8QK-fp(IyRyn?W+A^P} zRVIXygZ_awuJIC0liUX(%5G^G^C5>3`@Ng}ZL4vH zqBdl?Kn)z(u{J{{?rcGi7lI#4L3rj}Pq7ruyKn*YmdXtps7ukFGyv(*F5A(L^?(1a z&VJhin(|aF!qP!*n_pe4R&9Prn&=93)zzHO#>pzFmvM@m0eBpT1FENdRGB|cL1vf^ zxa{R)XAn4GW0lstTz2#mBhw{)2CXj z&4o&(*KL2`7-%jfA4KV)*czglfFGbVGN50B~db5lpRZbovMv3xM565*A%&G@^a=_>@M z{q-ghDR6OKyZh%)+0kcl;S>Hk#Az)*)_(f zJ%s4n#^98?&mEO;wc>(5J^!Vpu1=W5r^&iUmlD+BFP-m`N+?2SI&z*Zh`{^JKz=EJ zz@8OeA1^p8k3_5Z%60N{G4Y#0I=v+2)e7kUXaGE3t~RQv#3>?o7lGPz2mEYo_>EY) zkVLbvxk(@2r|WuK7s7HE=p8ubt}(32&UZ*E%R6ocH*%F^anX#<##01Y>a ziZ~tzUr484e1cjd?Ca|* zA|hgd`&ba@>sodvGQM4bxq@z{A#RY!NTG&3BO;P?6v-+8amBQ`7%W}H_v?p45X}NV z-PzFr@DC};2~fn5axz89N;Uho#H1c|*)D_GsV2AiURE}&u#oNvMlfx7baX!J$&Th*gGZexc=p#iD%Y92>yE!iE{tK5^Ks2Jg72p~8kDOLQKJP1m zbY9Nt=VNRvq0Zg5ql1Gszf!}dq)l?u-JlcHMmgzz5Et7ze9$6D&Z4NY{du1KI}$#` zFm5K@`-4UeY3pB(C!%D^np6uY^W19ZtFdyQpeFT?%fM3V^Dh7azB?9ZY9;aQ)9tY4 zE*%FkeCKD`VOt&FO8ha?fOa`WMJ|Un(_m|Np738}!Q%b`T5ihk%*{c$d&$IKrqaPC z4-OE%wRI%Vdm+{5x8_$ieV!(a z_-3!4_aJR>VSQPqDaR#~-1z*?+(_=%>Z`iMkjb6J;?q>VGSww!HO}wh-`Fds)XVz9 zzSJdz9EW?}OTLlh*3(pTN*>jVw2nHK`i6txxLr4g8+iVB2CW~goKj(0oror-_5FZC zG;0<`T7L)$|5izgL}--IzE;)aPNn9{u694ZgP@*{OSk1FrsI@Lm?-LR5RWXPBYYKh zc)p44$!h%e6$G0;9wduD=GBm&TL4H~Cn>*@H2<;HzsZ9jnKKHSl-0nL)!Woncs8M| zj1k^6V(<^w#14W1+)x;e!t4v zY_{XzP1J@rqpxiU;8n)$0l-;;=vT{KDuNRIY4{y2zaybZItCX&v1ERBeBZ*5I}_O<`bN4>fHyt}xuhK&XN8Hs1ek>KNMQ)$K(D;J z$Z>u-`b2sRc-*OrYDw)2P#DW*o34Pt@`9$ny|n>S)1cN`TwJWK6Ga%!ot9}6BHE8fr3^VdYo&}Iat)eyXf6%j>l_)Nt&{@BVak2b-v(*_tKbr0=pO>G_Ifm z&EI0i;poq8Z2PN7?eS+)oDjD~crv8Nd{|Y*WC%>29C(1nh?7L+!pQLOWiqsz=j7zO z+uI5!sHhHF66xZvz267_q)ZF5*zf=Wpu8vl^u>p9z38?ec4ym1> z`(Y}oczVqql1t;JFz1NPi?#6zC2z!gWtcu*VH z{UYuL5LYbGRFe{UfUA6t37CKgS;}B0L<2Cj&4n_>TKD|Zv)h8j?9Ddv=T0B)*;8!~%#IVDnyIxjy znOwxTqTqZqP}tn60_?5c+$J3;nl@lCtEC0*;80n43Dnz+A)S^|&`QNag`~GvKvwerqno;Qzxc8=F_(HJhGU z$K=ff{kOWRKMSLpYXTg1_47_p-|vGR1r9LHe+ln*SU+Lm!=kqRL_8EiX~~0SVfgAA zU^rUTSJ?A}esTxE&e+7_I*OI3JRjysArSOi-8nV&@058^cCSo-mA5Lv*1kxCsw!yF$G{Fg=>|~4=DKj{ozZ&`7d-vq42~nfsJ^79 zE1sbK!xn4-y|gzsU<@qWFCK zM1-H5ln*LCX6KZGA1K_P?EOg#!^lAe`^)TFdA3&w+52Qn=E53C9i8k00`dz>TR=42 z9(#AtiO16nby&UF><0mp_3Za`kk<7*76U7{Ml=oqeZ%JU#^1Eoe%fA7P^$37&OzZ8GQkFXyqJ60_80P7U+B3KHxHg?^C_VDo~2mROxF#UOVO?W`(gZZuxXz%TK4QAm^ z9&c=6%gR0%6%rDnSK9)06k80%CSrHNj7pzdPbU#S;s(3lJiiUkPEVzVfWp}5`q}>C zh%Zn=1Rc!Iqyu30y&n{&@@7hZ@meHm5wv|xNTUg7p}cE>j6sC7C7RTN{NlPbxB!%< zDy!c3PDhsgS?ot(;Y>_SyfH8$1_0`FpdkeXUQU{+tf|Qh1i`a@z&!Oq;9|}I**2n{ z1+Y(uhRJ8ug(SnKkF%st6hxbW4dwi6N1n9QIikLR|NJC4_I-AXns`>4H=z#oB0#)Y zO8w%xYQ4R^DOq-%sLKO6FhP0uV0|E&|CE{zw2Ndvx{|Q9-2u^wl$EyvFX$T)`>%80 zm29jk5k2)4^>%xtx4yYTSfUd|KWKJ<^_Pgc(`_$sF zHCjjO@)OijWps4(nGWjb-k{|P=x<3#+>kPy1&1MKn%tnBs6Vq#4ui-AKQ3tks|unI z4*OYBHe=CT>1gZ8B9q@}dHqEUI1c_(eu`e{^Wy>}NKZglK}LGIaWg=hbrb$}c6SGx zhDI16p!z>>Xzy?LeS;GvBqaL!{6ClcJN49TYehmr()3r{5(`Ab)Ndco8FbNZh^o5G zhccTvvs6C35+&gBYhnZtLxt{@2AeoWjGAzT+-5P$gk| zDR8N%uR5+Ku!&u!X=!PY6bb2Wq*3YaZeh|$Nh2WLjYvpH?1%4P>)OjB54dK% zPmFQbum^INeiX6hg@pu*#(5R{pk__!+hBlvA z8>2SDO|`4Z)m7?4hDb9otq)C|Iix5!7=c;}kzWkSZ7q{JWCh|Qk@&mwF)Pmzh=ZM$ z+fo>QgJIM}JBlVbM8~bpKr(lGVGEqp!h+!P8=z2!pPCZ#zuAV6VU1EKiYylvn81s5fP!7 z!YcWzKN?alh?4Ts<79$4w=Y@Lr7Uu!K6nSH_(6Tw;7ctFHbf7+BbyEa%X{lc1f585 zo$CRvM=}Tz4L=ILIvhp=^4imht}z;&N7K36-Fx%Fu2!ea7Wc>gK|E}|F4oULNC61= zPfx@j*!t;95|S*<4huo!0Q)B5-+ik-(OE-ay9x&YW)z>WLgk;?z(?cqT<8xzS5oLM zX#MdSwJck7cQKpM3IUyB!#O&Qj!7++vF^hZA|&7j&;EMGq6M<|yZsznKQk^a?koR0 zx_T{{cs+Aa?=TP*j^e_95IEBD33WvOjK$8!RU1j% z1r>iQSTdJC0C2Tedy~P)h&xSbX%N0#T!Q5GS!7^99hC23HJv-}7AL^Rj}Yvs+dn#5 zY6dwrXtqO2W*`Q*gn*b>E?BM>dJX6Gcz-R(P9j2fg z-RPz_=AVHEC$+(=ppTY?#df~N4FCUsgh{YL?=Q|~+&RtiGBOgi4KpiX{qh3mW4Ug% zl{53-@7ah{|K|ZB#dMERhz-I4Eio+=-owK~i$MQR%{Pr#A2?~B%05p}64}p`z>PG3 zatec(ea$2d$ZS9z-2(VgZfbqM2S{be1=s^G-+^->@8d6UWdnuv1DJ%EXUG8%g~RIG;iV-Yq;9sKa|AsB7_kDFmTqm(w5nV8 zM-ipEI?mU?h4y&T13ZaT+|LKlI1~DJp(J@9-+knDpb-`I1B+-5(=X*R682Ka7JFqHx|T9H1G-GX)Z z{ddSMU=LlS*8kEeKLDM#$H9yOVbxFmC$Uw|q)nE%KPM1dMRwsg03i)Hpv~u28E&Pd zx^t(j2MWlOcpg;zObfBY+LuN4iPH$%{ceL$-s5MgUIE)Nz)O3>Ktlnlt)Ol&YdK$w zwNR$~5f@y3iJh6V&(9d=i07G!SfhH&hXOU@mLsy@oj{i|XC)T-3C9pZqM)F_&rb>NMnkqa<`#dPC+*KC zp7`YV$wd>HU;@ChAh0Cju%*mCfPr@r2Q5H)V6k+X(XRmH*5@Le>UxVthK3Uiyu1xG zbB%qUJ&l^5xi@#|%3n#iua0~n#j_1mSfFAS*bZ}q%yOF9dhz1B$rcO;jKpH8&XPs{ z$Wa!spz=)MzK#OXQU_R2O9bj!6u1K-oGAih-IchJA#XDO7_awVE~7bHt1S-^OP0;u zbk|W^puClfN0cwez1@r zRCPB#6?4yNujd6nYlKj*qVX41{U3wH54HCnR-UPS39QR3xY zlxlAXxs!UjjPG9TNBgXUm3FPoZ#xxY&6;DP0Sg0UXHsAcK6v1w!$U)*fGh)M*M8PI zM6_!1r{7+^e3pfU1(b(P!7Ir;$=J72#nT`|nUye#?hE-%x@@S7$wYm8&BrUp5l(Pc zY$nJPf&R_#)8sdB@~fT!f?zjcr2j?Qnc2h-xk@+PabDyuOi)0V>!x0jGd ze>INDKGzDG_fAB6XttusD~sN322swr>k8J!8q@@zjf8>utHdy&vA@kh#d+)c+E`G= z`^70;clk?UV#X^yqo3E*X`9A+I-d@C$gfM%H_^2guNkTx+Q)2ezC5tfnrooSMO5? z0qs*)Dm6GSZKHhGPfo_l^LxXv>W}I^tq$@{H@{Pd6$5T{D-#B$%FurSfHMs23q*Ta zs;qj z{zl|NR#VRE-#Ke~t$RmGr}$4X6~3Z9p3R1Vd+2*C{Wgh}VUx^sjjbTBfqgyLV5Vhk zm~o@|$j82e^dx;ESJ$YT5bo)QliCm7p1%;>#T<42Vc4aTI=@aPSn{9}&fmX(##f6{ zd558BVj5?58g4j}00UZUEwO&Zv)%KUE`|?Q=2UU1jnHOBFznZHY6LKOH+h z9V5P?+N-zze4xPk^4{`GZCo>c=<2HC#{{cBZpNU>=`MMquMbf3F(rxz+6yF{D33p& zl>h*~hL$Mp!OzN>=E;}r2Q z+ki)%(4FXYbFE9E$t8Sx7)UifpsZM0dJz9O2S+8_*o1&eCmV%TeZ@+{ikg6(#>%Jx zWsRa4uErOJ*OZb#B0}u&CQ>J4Q&gcTNLXRpXQ1s!s#D-EaQyJW+S;RO=W#5<;`1^g zyzSQ?UfI6`7ZzR=t6Gg+o#-yb;-h^Q7!8AY9#%Gw#=}T>Z6-hrhCHyV5u(SUuc3|$ z?tiGi=%-wMaj7E*#G90_Od9$*8W?GAdt@C*?T)wxZQiHm^7^<7?vBM7<*=`6q`fnc zP%|kJ6hK_gWDSHanqN;gDAyZfH|1=#MN$7vF?7l+{vN?A-N8saw&8U4Wub>}Q9+wL zdCdyichOJdG$aAFYpE`1h-r{p3okd9`ZIRoNZI_>JOny*AwJG;eAOrX z;~CC@AGFVjSII;|?W9HGHk#s>oQZ^6>-%UYl+SWkhNv4kAFN64C^@2&y3h8VmLIq4 z)vYudlz%&*-)E33xFK_hx~8otnc7_-A&WH3+VQp1faHdkK)p|o{}zysITGDfzyO0> z%(H*=fNP3-nPV3?_#l;tyvBIDR#hSg2m^%?1>ZB- zbaxymfIkN@LSn$JClq=Dz8?m({TT)#%IsybZv<|Te?nj>Wmk#m`gj*H&feSZ0~#f~ns!76%dPm^#htnRb2&65hpyv$w3srk)k9$GQyMH&GSi zJ{vWny68N0wUwB(8|^$r9)>Tm0$b|G(Ha-s?6U9j`DFRZ$%z8)WMD&1eo4qgaevZ$ zhGnguXP!#lHIG^Q0f6?#AnBd~# zHXs6F6Dlf*4h2C(rn93g@0p6AR^wUsz_s1m{nQPt3JVMO3<1kl`@`*_&n?}{mv6GW zy+BngX#au&AaMKDPk##vSU-nWZkq|3qpxU;>r%=lN5F`v3I>E{uWo>9cx?;Rm4`zA z(CKf3R;yMZAHkH@yRFT6oSC0Ln^N4L*1FliPl#0L-+h`bX&2e~oONWa(%h{+F0#iS z?8g&TU7Aj0hy{7TCYoN0#&1UM+qEpZ6zmykLX{qEksjT%00_F+>8EOjAbREvnFCnX zOt4sD0t}xbxvPhgh-6Q}>uknOy$!`PCjePJhn7E-t&#KdB-@-DUBXnXmXj{GO&2N}F~z(MS+9nKj2+nVNroK}+f%Zxvf1(S&qxuyR6At#5Dv4LnV zJMh6Rk&?xn$+pFzlh^d`E1+{jX2yifzpr~p637e!tHW++K8E=tE222R;CilJW-Y|! z%l#rqOgn@f(fGv$wF`0HAj!9>ZMG_M<~6E2?3++GjeoKh12tLpC42D{@y0|7o z1m|wtK;~IxXsO@4TF}oKSCfLbi7? zT&bZN#^Izk$ml+=0w(y>@w>fffU%uRhqvXf+fAWC}$ahoE3fT^$cSJwh4<(65YP0q_ZAXsHX<1LyR{hIz?3(ENH@ zmls2UV|i^8X#a2SZ@^2OYG11CVfcOnXJkxdWNB5Es+yYrapThf2rNePn-P93Sheo<-s? zr#Nk>5zYJu``DPk8|lw@?ddG5z*A@r5tEkdwW?gVc-qlAE| zj5XqLek;08`J3VUqDP0CnNCG4%8^97pA2~ zC$us0Y>=!;1NNg?)-O~(6VIHQiD{vY`y;BPeHE{Se{KJ+1n^-=pE-nrj70UaZvZHSprQ(0w+NwsNB;|uyXt^XdmM@ z`Ye^6pf$o{!kz)&Op|azAUa1?)a6C!ThcZxQ*#_E7DUW8tg%#Pc~`@qCvx9116bXu zJ0Cu*Bc3!E_Hxmr-v)do_&!0yC7CYfn~O41cbd$}$|~%Av6s&MHs%$k=T`?H z_hV*`FiZdN+(3Kq^I>UdoLFQ!Yd2EF?xf_zbU%Lft$cUzfnCrG7=6hTfaNc z`Fw*nZw~h{=Hq&v%0n>2`tq_18PF7^&VB&%IK}%(76*o@Uh8KGIIS#E-S&)+ zUTA=LLnw~6B+k0XUjbWsTwhR!TH#=Aj7F04^~mRqtLTsCLnYoJRr(tUZjgQ`Anl_N z9O&2Z5s_fkJdnxQl+G?UZ$4WrA|ygT-jiV2i}7mUSBTlePHP*SfaIb0ea<$xJ&asMtU07&?o^c5u*@!1(%tk&<(+M0^Zl< z+nF~ffulc;T}!;o#H;i*GpRH>p*nMPbAB@P-y)YK$W-dgVl*m*Gcxx#$v^X&X2j*sj^+-NE^jjW1D9H~etGk* zS8eE;TYB4nhX1@%D#5ZOEA4~JN2_HMe*5a=Do>FF;TE2FLrl%CAY0~Dp2rtfZ(QHN zz=cS_-U6FEKt8JdA0K@1^8siAWIQ}R+8P?UlQuc0qP*S1pU3^qnhkIMnT$=A$l|}r z$9p<2lQBXC&d=$4dZEUG_Vv5p4@n1VJ5fU?-P$DC-ij;3yc=(%BDUTHn-#Afc7yISq^qI5*t~dsX3j-@?Zs#r%bHD$7Pmu_JNINu15?iq|bg ztPOL^%*nz`CbKj^;;7S!wBEx6ul`P)ux2P3dFI_Ga`RaK zLhnxkx1yBtvRxPbEXJ4vpAN#3EAWk{2V?tXW3(UWTL*99c~_g16S816yOT((yZM7? z82K@czgMFZUX0B+8-(v+U}2t`1ZpZ;av?mf!z*pHf?7Rc ziLJ+bH|)&{Xo%}Eu2UTBlYq2|$QBa|(?w`$-uFoei6DEJ4BelrD`0fE3dbZhw}|<3 zcRo%n?q|qM*b{7&tKQIIB`24LUS84stFz^W`7KJ^w}(SxBYJb9E2-dgYES`EwQ3t1 z>#5^X61gv|Z>)^R-FtG^eS5q`Lq!#)T74keAxM0+7ySW#<;>F3@^{A-Riy9aCJlZh zpxEA3U4V!*5|BnxW7eyvq_n;X1n$89|Mk-+b*EP*4y!QAIAGYZ(@Fsr{DnCw^jZQhpK>i!FxH^3O1bLY^?gTa3$0s% z`dAD6B&3~$GC;kmJgKMPt^|3$39g>o-?i=h1+Aw3NGZ>S3GW2NaYH=|-tlX0jWhA$ z5|=7PaKpdynR!zSo&@#cz^btbuB^by(m`c&ChO=bmkEfU0o9sQM-w>{*Qx=7GdJEC&(eJ0Y;O`rs;AvQlci`lz8Uooj}QcWp;(O$b-7QmW2&FB(hl9OmZU#0VzF zG-x4jHq&iO3o@faK3gc~T>SGP=JZ*j{=<=iPKkLZrp8(=w3`5G&TllLoZTI{;ZqQj zQ!5L7ok|_1=g&_7eqLIf#pA6Ga3F7>K@xCW3NU|%8J%mftqO~L@h+qCc%$Oj+`7`^ z&3WxxgQjO=9^Dbj6i)}z5-Su!2w^hpJUQCBI9C&|{N=)0T+;N7`WYf3B4y;oUDUCB zh9Y8+qyO6btoNk8a0lyU+T~zzZ2~+Bh!6VBU6_{1-^qthL*|JArfzvUxv~N)E3*U4 z84%YG+$h}q$MmdSgHG3>sSIN53HPBO9p>!fvJL@*WNiRAbBHbK91&x+AN?c(nx>z) zu%cSq1TyO{DhI#t4TeM#m4Y84{N8+L<;sS&(8`sq_U2%dPeEK&?$2|1A4=~JD)}cN z=h_wInB{6l*thmLljiC#y#RG*9-xk80+b8f#@} z1#zJE!NU5*_s{5&2E{Y{eXxivB)ysunT!6m=NF;kyLV>}s647&7qZi&^T~A0&iKEF zxN@M*x+c3BmZlmK#Z(6>`eBoT*_^qs{|Uv((R1UkjZj_bZYc@4}#A>E1>O@ z-r7x{VW^U-bj&oY?;Ui7qs%r2Zmv)FqbbNHA<{lya-mkP7yU%EQP+PyWy?^z%ivhh zPM?g@d!v#ZuflH&cpYu?q`WHa9fKydE+p}Xo$&JDp*_!isRA-QVG{^V0(OmLO~SyX z5}X!<7x@%r*}UqvxVZR+ENqZW%D15G_S>=iX-!izjALD`^OeGoI19p-kVdE zo3{N+3vomSbq&j@ZfZi-$?oCDo!`^c{w||CUE5{CJ7fNZU@eHkH75IvH=lIlp;=K} z=jCDSN1vU!f)Xh8SXSZ7XfUjct8*d~B#a1tIsy`}wast8VbM6?LW+v!bEopU*-ncs z>lvd598d7uBN5lTYZt%3k`iXv`5@5VtkK_%K!aNotoAXklL9w^PlL1(qh7AGe3%#KF2dZ-v0MV=`iqovew{))8_Z8wM^2AikJ`8r?k#;b@b97vi%)R#N@uLbg#;V3@jp z-OvMJ+i4cMq&jA7E{`$^sj;i!^%X6tvEv&hYGB@|AiTH;RYV!7lpQ%%?T^BAL{KdJ znBhhh7#eUQ`a>w*Q=5dHZtUGJzgxODWuZD2VK00bAPGvp8F-I6YCle{!UwCiZtVYwjJIBRu z_vkT<_f#oX+yEPPr|4`v1D?OGt}X_rs6EK5@|WEi&lU&TK%lW~^ra-vke7m*IuRo2g8LXBQPe^%W>sF zLzW6ex7cbi^K)@nV)3Z1FJxH-oUXhy``h)B@f#g|P!->Q<12i-hw*G!e1kO%@6x51 zpI=UGb{bMaJSmUSGLb1)tNnzKa?Er9>m| z73Bn6v7CQi^*QcWIF5r68}i_|2la_>D`KJ;00=S#oR?>MZ|C~@I-o--gj@^oBL8e9 zsZj~JJ|$a5b+ZNgS8CEe?u@VLlZ$}6p%RlMCY|wPo>jZk<0W-qW1g_kv{JAa{%zhp zyuZzYzP?#*ZW;x}!}a}KaCm%2$ENk-qnGe)aeq-NP^)ec63|K&puBQ)d1oa_bhpqJ zZnfz9yKz0~g`;tIf2csHrRDNN#=h3R;%%O;SKQ233}1~mZ!iv;^ao%Q#ebe4%Ri~E zAn)on$>$c{(I}&fuqx=7c~nkSbqsLTYooz9V(D2~*p@(CN9DDJC;0a5+t+$}dKwxo zXIlys3C3zBYegtnWbXmfadvjr(9i(Xq7Z>)c3-&s0l7hN5rut_1&1L`*Mc&Y=Ng>o zw7I?gH-`lt5Za>ivzFGyE?_I(e0yIGu91@EUk3W4BVDlns(@lfRF8a1)bFc;hqUq3 zp++Kfiw^OOk#w&b?)9A}t*!T`S~)Yt_?B(#$+mOO*x1u_>H|}U?v;~}6vHm8X4jN{ z?PL;5r!b0!OW_pG0)yC|C}Da6qzd;{a$mSu&Ip-b!o1C*Dt?tZnT)eCKg)8*5kw}t zcIBqhU)!X@OdBtwTUIZaLS6;89u;~u{M}Kyp)uTR-*AY3F2l!-^uF<(K zsb-)vnW-8_CvEe}wb{`71|}{GMrUIu4n)jw71u;4%*^xIf-Rm_6_&JDcU;>;yFC8~CuF!rW2Vi~c)Od3J^$NJB3wD#AY6zi_kk zxzqoCduCT&&7tX~O?>RAVHYFz`I{sUTsxegam#nQ`fQyQnDp`Q zk*y`AMia(vTUbqa*wkF+ty)Dzo<^s%B#V*6q~k>Cx=C{BIcrqcvtPW-J$k;znS*@9Lvk&)H8sp{1`>t;yvZjJ{A%*$O zHDuk~K@~0OAXv6#Ra0{JJM!{a!bVqXtc3RbUxZCr^&!ebKUNvO-jrAOyP6RXFVv%q zL~?Q&DPn{7X-KXya(OE%#N}UZP5u(2+K^l!6bD?(AB2ulF{+}|4BZ!@I^Vaowu!eTsfVPm`JH7|Nx`%l+}pLT!0L{_U%>bXBO}UDxmU_R zM;p^(m7$nFxXd3rCeJHH)946XwL75cOkm~742SlBRn7GBr5GnC7tOQ3vZ`@ul+Z3ajuS7)&WckS&{_%A%jyQQQ&K2U*jET9qL*qEL8 zE0%9UVxsxmw+Kr4YMXD2j5@&T1)h44c)1r1#EO_vq2b|&<61g8pmlf;kOHtB0k8W2 zM3^^XlurT*AffsK1h~Kh5B4WWAbe8Qjf?%m3`gjH=L>w&&Nm>EA81Q=PEJ5#Br=v6 z8Ddk5iQf&Q&*;$54*QE6}iQ$n)H&-0((S$>{BeP2xEx$Nqnyq>yBSbM@iz?^ugH{)eg8nNB zs}YIpqKh2iHJkc+ZYyZ36^&o;DJ~Zg-kiJ_65q8oO}Pzbu<{msNBZ1|nC+!TSCnVj zpR1b+6*{+I2q{mvoYB3=o9^F_L-0SJ2XaSEJ)6DODf!9tLMh)esdsN5j~DZMu5#&G zil+S`&Ng#SkI%2`v|E5Tu8I&>g--s6F7PNGx@r4hNExLfEG9!{P-*O*`I(T_h)~u) zvv{qzE#Pdz%TITGk)!m?U0@47%V`j;>f9{0tV1)Jg4Z}Ur8}gn!9g|k`<(58R@)Dj zv)Cb52Xhx*$nB_w%K)Z!g`<7hT|W3GksK7iUnTY4ur{qTkXg|s4SpS}XH>MgQp>WJ zYeU>g6-uvEKY!j^EOqHf_ku4Yi$b*%5Bg27OpBk}4z*0PGpVbKVLUFUb5x^mE|>hb z#oM;UH|WRSCoA6;1c#ihFw%x}J(&>D6bt{Eh}jcyd?kEtgwGfpcpj_l=#gX4AspyM z8G`>b0M^vRPeb$M>a-yvMlhz>9nW0!-Wy)RK`_XL zas_kye;n+&-0hHhox(nS?6g~j2v)eF#P`6?mb{*xii(OYa)FJ_4fD6==6L{@@J3#% zCVH?Us4`JgQ5gC$ghvR$7#a3P@BnA@1rl=@P@z4)ki`iFY^sB}Uh3?=!H9W|PWh#e zZ2g2?;}tIYPTcVaek}ur%6y^Fvy*3EJYE;JAmlpqG8@3hRP7h0!#tnsmF?&h-@lk3 zoUooA`U+R?@g3=42D^FtZvYPm(+DFM#|8c^JVJPXK!-Z;@>f<`_R5W#gNq zOW4mA3}5CL*>7}Key09M%FOinAJv#K0qIr|P=~;(7Ac`_sHLT)_bLQ6A&W6+V`C~Y zaYfqDbf4@tsK_?q6%bbyJa&8&=n~n(nCLq{J7bPIDEPR^c|wU{SZ23{`J{`Si4ym8v_Z~2i|Mt5B(J}?y zs~R;_axYpHf5JBcmv)Mva50<82x>&!MqvDNxkL8AE*-@e1kpYLJgT+e-Gqs2-I;^- z_9UbLb-0A#O$#t{>}W7X11Qpj*bdVM-W;3M?S4rCG4XrRa`|Awi9 zHiAY9d`V+YBP(Bx*RMCXw+nU3f48S_L%_R$^6s1Kw&K(4HiTf7T6rUOYzX(-q4`Qm zIM40<0EGLkuY9q}E4GaKvF@_iB1l*+*N)?5{fhS_8?Sa@vd6!Xw%3w-7<4ibxcl2v zDYZ}_yH&yem-ihm^>>n*7+$2zGK`+?0x8f|Dtyxx_aG=>ElXk#BOuXI>~YBHuUvJL zcO0)77qK59zxDA=r;)h@uS45tYB$XV5*~Qb3s+E!f|vs$KvqS58rf!e&ji%faFW&m z6A&I!j&|)1hwp{5->R1pJaTb%T0O5CZGW4Hod(CJ=Z*3a4v0=bQiz)E%GvD8zz;1I z60sjuItk%b0o@C5EH+)f$FxGO&xM*IJ$+&DZ-SKOA~Z4O8}d@R?dE%@B8W(2ZC!L` zPw%dybEydV!nvwtI7* zVU=@?9WR^Z+oG-EM-#f<25#nZ*AGb~b2?n)rX- zV31VbyK1dpB`xjb_}PinxasIB6|d7W63Y0YqK>0#F4svatc8(qfT;+uCB@&I+<+k; zK8X0wK8~0Rn(b*HKjp2|^CXbD-SPPFkKwOueDEs<@DTs|>6voVrXj3_cgektr2LM@ ze<`@FxQKtpWn6amXLHKUMD@AK{ai*kCRyU}rDf;9ijP^n>aYew$N&5KKcsa{Iv>-S zM9M=soDkYVVayyHNF3=C5K(NqMqv()*t`dX!G^nSGJ~Wv*=YwV_K<^IhTEC1zBIyTDRT5TcKLw z0}+~)UCCx&E|79`EmbN7Ah&r)C% z!43n@Gw>!CyqcnpU$>~=jxglV_s^hLALq~8roI5Z{X*#;^Z9=E+So6xf2VR^`-S!w z0xVU%X8FOY^9}C*KIxq)_@rpd3({~O$$<~ER&Pn+N^bH0zPWUDA=HAmW8JNI=yyhD zefRe2VJ5&gzqXFO8xX$wOfF*Wbar!Pwc7dyVaJa|(CN)Y5G5^!N7xfoK3QcS?IF*( zK!8*?LyWZBz)vF@(--lq`+IFYzvrm_W;%x9MaJK(%%_t|qfd9s8 zH`4=rP3cKDX%C&5;kJ)w|2+)@8LyNEk15D02xK7)>9atRv$_o{e)*4a;iIwmF`@67 z)U}6yxZmZ+iDL2V-{L3#)-|rMOjZbl~yZbdZ0)2#HNb3C{;BabZ-i+~F@h%y&?f@#ul2u|vy z9!kma_Pg2q{NnbrM0arZfVn~jm0^_z9%@6GlcX0&BXu?MKYsiO_1|{A=~y1%3M7l& zS*be4OxN<~ZS!u--TS5cwMcZ%1D=-y2i>>u-9!0bFb)~6Qn$9v2RMPNw0S)`8+aPx zj*%Pk_-ZW~_Y~7xfVDJt=OE@YSZO5nEK|Hm}RdnFCz@sZ- z5$bPz19RR3_qoK_pdM1NZ2z#fVyi)600Lw5*cuH{Oib#~C*Kemy3#V@6kRPyiWVWd zqvcLYktKwwU?oOr3@2vz6kEydLbYWh={n7Av^tHxQtfM=$>X0c6*bl6 z^;*uz7qyJE-)$m?nMvcYv&QYO;xYc)r(NL#K+-xlHFcI|;#XQy@+?y~SN;7}MMGFz zA+)TlOzhv$3z7$L-vTA9xWjx6h{8Eq{-#TVyELoHA|T)~oXi64xWKP?Eq~O0f&^sU z`uh6Uf*c%J$c;WXuCJXJ!eSqX5eIlenlSU3fFD>+4K2UY+`?psS;8Jx{%d&am%mB= zuIvZ6w*uS4GISb0MWpeN|O%_)gPHem!p!Gl<#8F1Z*5%_*`^lN3NgIL=d$KIXdfw*Si=7ynAHQDsFxNJTd<`NV0bjni{Et@+pzRIFZK^Pes zpCSd`QiHj6fT5R*qlgp-z7T#szQ*I1g` z$gt-<_*(86Qf(nsauN9q%{bW~>D9&|nGRx`2p>EVM#&M^uLAu$y)FYoyw1#t`(`#t zk8Z?$3{SM6hr{h{q~CofSy@%V05qjbumR3{(Kz6scb4;RODn#Dc0RZqUE{1$zm)tx zcm3MU-J+BK?Z2C+5ppBL;HV+ZAuowXHX}l393h54eD5zoT7=vi5_90(0L>XXD(a^p z3)Yn384*R{Pq6u>cjPfwkxW_6@84HcRfP@P+u4B(v@D-91wouQEls;4N(u@f{dBeS z;j;Q94{Gea&$w6L(INVvr=#;>Zz2~InV);A$Y;@0R1yVzcvFgCVEc=$ z#Mw?z^KLwOi7H>cihPHjl#;iRaqj8-5C=TRq=^Dr`UoS4r z-$)?MRQ||PeUk6 zLnxVGEW>_{Nu&4?Q9Vc!jNl?fB0@q;ex9R7k9wVqQbL1%kY50qdKpM4g^u>T;415A zbnIlT>GSgMrPi-z^=R!|^q*8(9#_4*UU>Xo`gpRO(y`lFTmV?j0i)LcE)1E`*NGwN z_jx^1QYK6OU4N9zXL~}kvsa(OwgEKO^EL(`7oY+GN67>hHo|eG)7ME*mpD9)Esy}N zq@*-cHQ?(y0~#^&TX^<+VCI4S86al#+%&JDLm#YJYhMJwgl^%L*Xs)p`Xi(M;EmR( zTS+0F?`X@K&T@=@7FV2!CfIVhTw2il5ujeF|u&Zt!_x0>ZTcMQ;caFF;9yS3@OK$n!Z)i^E2f#H^AQEA6NH% zXm*uit`|@$CD_M+4p%B~eyQ|+j{a^;+}xsSK~aB`i_~+Dzp!3Sekcpo^11A=n2L4m z>gyOEp~nTRZMVr+i$jwV=1yW@>RMJ0Cg38!lvGuTd7W8| zi2f0V6Grg`l3GG^+3FW>L4bzMlj9v^{2@bdL@(4mJq7)?fL7m=so!Y1#f5(S zyk`CSZ-P7(DVOOp*auhFJZAK)4Z)Kq44D`t3B9eX=^ec}-(_QEU1I?w$67)cfMgep z)=dYQ`pu_e=42LN6QxJuGxb1DO(iAasBr)OTv#A&4u0_cmsh|HnBA(Xs*Qqd{|6ze zV(oCR1lV=?Ofu~HtO);Cc5G@SA2gB0(fJc0+3}qXmn%wFBa>pnAM=Xbcr;%){)=B) z#Ed^r3y@Ki!o#`wVa$QSu>!{?w(4i}fqEp=-2tSI+e+g2Hm}aO_=8IA2OsrE&yqqJ zaERf{pKbQKXFs!5&Xjx+@2cYDPc~3{RZNXx#_l_D`8q+_4*_L^_7jns?6AyS+|}#J z_U{-omt@Pma8oA_nziT6LW2hW_1y+(w(hD@>}aFd!QxcIITti1T5A5bWw^0**JVp` zgB0dq8=dDiFH1PthbCrw4{7aI!7i$0!+cefoliAaC2V!Y$=(N(nw2MH8EfJAm!f^7 zhrfX6lS-dP2pm6i3PG7wn)l*Oe%W~UMT&vT{IDT7=+k&uB{kM?uSts^yPo%t2(O6p z-7w^QF&(js8ufuO9HV$N0f!tkUzaMaX>CvH=4Ex(AC;q+-5r6XQxHsrFLeq$BUtJfDEX91amucfR?YUtmKGa1Qt7h-lejVo{r9$+QZ`tjEXv*ug%wH z)bC#cqCWIFhgpGzvg&&6#Ydg7=%hDZ(+CKK30MlWIZTSgE`eX%WV7fuw=-1pCNtSJ zJ|#awQY2yW?e(1rLV!s`p|41#+&c?y;qlw3135f(eX^62#idTO#&)qcj*E&kb> zW>3`?F?#wss1Rp)rLE}Mxz~FVgyC0>ZTPA3c+`$FFEj>6fJNjAOXhyApe7VOYw|#o z`2?xva9N!P-N6`AFQRw#_kp(vscVmla%`U0qF3V3wfMmSHCrDy-cgPJ6m#Cw12wsa z%*+{=>+g5;eHQ)#koZ?NdH*TAF5uyXDmDg6CeR!NjnPYgjvy;=D~wvbX`Y&jMy8xX z>P%pWI;3-0?xNZMjDHCYJ?LWP80I-pjg9}bEHsbUD`Dc9+dx&dFpSP(DZ#Vql<&(9v zwePPwAHfVic!ZzneKidY89bKgBx4hBZGnM4;_mi~J*9wIINu#_Zf+KcOan={IV49* zuD9?Xc0jOzc{b2_E6ZHp-0YJJh5+tiYkPYgo8r6Z)sox9HMph8?cD+GOM>p5nv&9e zoVkzT^AFtaJsj;O*ZiEERV=>TAe8DYQxeDnmfp0l?m(X7V{)fc zK}Fu@B*Yqg2-VKiwqu}u;_iYT1MsnTV zsk)W2AOin4d;UB~k)d6mJrT=wI8^bSk4*(f@pLCiv>sVC`qpKFvJ3ypMGI;=;eO;Y z$BL@lPOD5lIR(gsDttj2EM>B+6^m`9oF}BtjV)kj7Sv6<9`os+xta9A*jFA{IrY0; z`!AxK?t$(L9}s-K$pKiaFAp1(p@PPx8C-m=3xqk#x5v(-E=KV9duxgX`H$?I^Hq4u z=;fEO@l-nMF<<0D(HWJb$`VGt2hfy~AQnLAY>*LOSsTjTjZeY@r;DP-wXW^az0G{v zy->(E&l=OP3nU++)a2v}AWWrTRbLf&kA0h0RrMq`{U0!lM|TYV*YeoKfIQ!so0|(# z6o@E^WMW9T&4H&BlwZybugib0|27%0d2xE=B+>s@f3ug zpC3FpXFVROh5mk|TTl&2uXfRnW(d9ZA;KOI^}Ya$OIcNw-!CeUnL-x+WwjHj@1J3| zYCRHdD%(_;UX5wsAJk&i%pf^W+^YP%ytOu9J_iG^Cb1$SBVF9xL;r%}ZAE2A7_0(? z@z|tb{f^5pSEaDCUfvIq?d{=f@PCvE^H7zu^7z`|k*M{{@3~DbJyC~ePuI$PqoAl}n1~RT zPJgXhp{&#Q(>C883;%U_KQ_L3&A^y4?~YEO@U@sOV;oLIwfqpLTxdSaMreARLWB|b zy@GD{zA0OkVvD%a40A>w!p*0(G(V^uu$OslbrweCky6lMRly3U3WblY0?R)WM~k&7 z5Grz*Cz29ra0i*lDEX=KPe7<<7N+FZr97pbc_&`7FyrkVvAJ&k2s}(P*Pxy!aA{UK z$a59;EsWAVAN+@OlkKUl7Q)jJx|Zzmnyf<~5eI%W73K-*V}*k;Y!tzyE(n{-^wnPd zq$|Meo{(xPWgsv32v^)cVZ&>>2~z&OfC>LOSO7VQC&5znWg4iOn)AW^;l7~~`15Ev9`Bicf1X97#yZeht8f6DBJpuHMgW-ACbJ>mbM;g zc?>A^3%q6MND!+bDz9RZ3*}zEv(5N|aDQ3gByZxA9e(7SOqXA(crvq@i+Ry1=aMSM z%n_#L7F~X=LSn7QOh3!7X1aHw;%efl*&T~fyrE2)4wGQJEO2ZVnqS|NroA65CT(V9 z1kM0k&wR9Y_~nDtNsA00D>;*dh0AuyLRV+ zH0J_=JSY(N_F>cYnkt)sfTC^&nOksq2Z>SpoCd-Ir2`cDb*HDN-#IvdOeJkCEsHxs ziWC=Pbgc3(Phk#rcs1n zSkCt2H~9OLuRs2#?6<47DZKb>I&9weUjxn@Jk?=D&3B}0ZQrQ# z*r~8T2^&kvs;Lr|fx2y_``?Ch75c~jkE^#1i#qJKh5_mBp}T89kOrkwO6eG+krt4a z?rxL@=|(_6y1PM2B&Afk>$~xJ&N=V(&7WRgj`NFs@4eRAYr%f=X`mtUEhm-)y_~>U zfq=W3TDTlm;wMWETkH!}N#e`yV8~Gv;fnGQ2(HlHf8nJJ3tGu)OM`xHawJ6WA+b3Q zt`-tZvM?mGaq?eG`mmH;&EqpU8Y`Yw)+O{hm5G%q$K?s4g#rxD>Qh^~@0~E+<4p3J z4H(6;lZQGg#|D=HC>8 zO(h!EP4@}wZQuDl7(~txe0YGNL}PS#IG)IWSuJyxdl!Sd8R*Cw4Z={tM*a>^YW>_v z-@pZ#?Z7v~&f1#PVe@+~%hjhlk6ms@ngM)*vVlzfs!2zeDIkevOwM)xW9=(?;=rrotVtGNg6Mh9fa z`j6DXpoX63G%r-3)|308nnQtyEn}DRMdZ;_jw))1f1W8ZOq1jr1r2^*rk*4D_4+t| zT^|o#RJbBX5qsQ8QneR&q}WtKe`0TtRrR?`4P^0%CaGJww)|BAaTN$YHB3lnuxWd$nCP+;i2le4F<#lN?!fQ2UU zk@IDO>aT&zzxOT&ks3DCo?}E!f@%dCq4?tNlc`Y&j-?)VNlF7-ruG^BRUIWFGL}*4 zPb<@(+x?LtFWN$E`S`i|oO=`1E~Rb4)PX>CXfD-Wk%bbfmXBURHG|_J@9`32C-P_T zOs3D1f`wZBzZAt33ZSyT%*K^xc3`pj1xqPy^iY9@$sJ^x(FcO z%JNa5(FGP!d?57$C96(BFN%M}=LndSn}`*?On(oIXn;Lob#?VY+YPpM)SsX2?K*Uu zAS^dD1?XQAKe?hE#=lCZ=6-sVnzp5$+4-X;CU>|;fGZjtJoHXcS!-oXOg6(qP z9t;*fI#mLg9&;P}z{$EH-uQVJ1UdsxHRJaV4hO)VbZr4V0HB$36aiLNAWic6`nsp5 zM{5$|2bPYyfaBsFcrqoTfrSrAc4vXey!Z1? z&-a8TQ{pnzALe|!nheJ`qlA@gbF^5CP?JUJ>g7K{E1n7yx*x=JQ-h5=GCnO z;~1q=4Z6>!y&SCAL+UNIyXykToi1RK=(^H=t7Y)YZ*f9=qn5(!WnEBP@%NoRSsHw6 z4F&>(3Qq0g626NFZt<3OL7U=)?;=JCZv@hd^=6n`WaYj0WbN?rO(;OMLNC_bmkr6~ zNj1>q8+1^d5PI|2Z(9;UAc-@Xlz4|Josbl1x+XaQyafKgC7%>M7G{5VAr%mc;ec(Tp!`j<``2_Jx?suC5VPU8>mXC66fApQjdiGnN z-!=V?l9(Clyh1_?lJZXBf#TpW4;FcT^ZSd5Q6#YFlp0Q8R8pRKjD2{&3HP#E70DR* z8|6^_jY~}x0K2*y3yAD2$oKRgLMeQzWSgW*n`rAbVSllJCxL`&Y#M(NB-j_#+RdC=yx z!s6;2XiP9e5P8EC8foAYNii1;gdBF2+>Y|uk**QSSE(fDP(_}5s&Uhs-F${Hv3MFK zb;$(8t-xT)0gi|?FZGmBwy69pGD96{fwBI>+%!hQba+*_;ND= zV2QMXZ`pM^#&EUf-Z;LSB_>W(<|w_wv$vod1| zoQ^*4`?f7Bgs2!z@L|Qc@dyD1@8fBhw0`>eFl(KKHfd<1yr-9?88JEVNRo|`-QDlQ z<%hU8S*J1z3WMYhEkGuOjh^t|*03%W_qyxWf7+zO8Xof@nO!>~r4g0e>(PS{LP+R$ zgi+M_@RP&N$b*54%N}@skByB1+U}#ckMR5@@UM9F@@2HbS3t>u?!Aq{7;GT*_V$7y zYa#(;z*eQCrUriW1qBSqvcZPW_~hhcZV}*CQ{@@fQ9-uI1T}Fay|>l$G5vA8c?`?Qln$h5*F_p*VjiTlLJtQLd?4HPfPCH2C~6g$yJPOg@y^O-n#ep==<6wJX%;; zH*QodZniPylZr=ViM#qUSS>G6-o38s%OCZ4W&}^33>Em1K}Lk*L)^uo?v8>sS7(i%~0y$R-dn*4x z%*O*TG6tb$;;py$Ens^cKPZ`El0G#9e!9kPfxTEi^vF{^573Jm_zSx4NJ|Zkv9G`8 zBR@Fro&U^aYE(*Ibd=#F9l{id%lQGGXC!Z_`is702k;!EXd0-NFjZruo2#pOHiOFieCG+s+1VLzM&*ZIcR8=jPs9@Uc<&N^N&PosiK0Fg z@%-BQQv;(42?)zxbXfDOqOR@livSUKAs!=84NL)V-H6CYp%@#5T+ROoOI*akxA;55 z{D?p!=pv{_SPu^9>uXP5uol+$yWud+bWI3y$M}y7!-;Vp`{MYpU9yY|6o(ugw7C7@ zAf3YJnk`wY4AgEAuYpsk`W6!fCG;^w zr@#LThu62dM+qSK?09oafm~fJVutU}bajHQ>zv>0A$7ADDQ6l`lWISYWDGBb?>q1Z!#kq)yZ$ zac#!(0Cm9lRQOnMoKdN0AHN!WIYmdX79+lbqvK(V#|c>Uf3qIN<8izRtnPnpZ8=de z6YDYl6C_D&2YO6FjFEtbDqV`F@FrwT0+yz__fMw_GW$|t_TpdNSNFS*8oPefE;p}8>i^d{2bKVqz$=?>f7NN_l2PCzKJ*^=3WggzGT zdYvx(=ar+Ay>|s2w=lfyJx}G1g920buqbE>4xy{*70A3GV$a3E$#ikT&u9~;-Ryy6|CR`6q}T;yMFv=wT4dugXcQ%?Who@ zFDNYR3Vh7bv~K1cGpLX?H2eXQYVK}t5C4F3>QGWA#SY>V)wzGVL1#vs#fOiB9?pz! z1M~D2JkhUd*391;yt2QaqJk7?vYphL1(wzm8`T91L~CtNN-vj)0~Tej#ii{@Qp?}6 z^wL~fOpTS7xNbvJp;^?-s<{sFB$KXIv!-37M7}tweY>ZL`Q|wa#vmM0-9$1 zLfz|N)JJAJ2MXSl)YMealNDuSJ<8)AKX{E3r5Yt80|USy_#lo}DoO$Q+m@z#p2wkUCj`=PLGV65Zc6Na&Z6Dwk6W z3_iS^yvdvC$|NIXcxmt09abV$Mn&y3z8eWKS*4do!n@8p=@JFfhxz#xFK5`K&`xA? zb2DIQ;+Ov;7ez$8pcc&gTwVQ`k`0_#C0#Xbz7d?{M`}F$JVhEm0hXfv@kSn7$%~76 zHIzl{q357G>~O_URs5p@88h7o}Y$ls(LD|lgRcORZ% z5oQ(+(PAgOsFq%PG>exo_sPJ(k9zeUtaEyP=hQ})Yj?F5aw7>m8wrZe^xY)xyTK$M z6;YLd+EhZn6Og;r-eskw@Bc0<1jq?f{HIVp*2*?D7DBxWt-gT|*LOjGL{t}zyf^IM z!8+nCfS|zmI5adgy(K9zG0@pwT28LJLZyfuth{q@ye=abLIYbA#Ds*a)W3iu5NLx_ z%uh~Eo;-O1_^Vacjr(ducQoOd@85wEfSG}TMDBgZXAl$xq>>=5A=G@uo(>O;*b}H; zT}}p0PDh~Sd9eoG`?lg@RFy@t=)&@H%xka~uZoqqCd|uAFoS`C5s3XV)|*?;(^I$@ zkBkgGHmyZ*nvX9){Hq9{H2^=`8lKv#iDtPa<#tkZvK9T#gms^2 zueB7LrngJQT$M&5&E(T)R!DqX@eK^9o2Q9b+%x*%xg^W#jgz+r)5kRu=r<%w>-{ws z+ds-yk~8nr2HoOGbf+xK!+r17(ta>WJ0dr58|Ew@~|ww_~O>UaQ(Gb>AVq z7h&bw02wETP-0Vo*_Tt9Rx&&K-}?RG1GJ3<-~a(K@53r~z^vlI|8xVKK!QBOe`-3Y zw^nj2Teif8i}dbShFVnq8#~~s?cDs?>h*O{3D~;?_?4EjEl*EQ9_5BofiPcpWxQ{-0+cMeb@vB^sSy}z*GGMFdR;y zz#>Ljhzp4=bEx1rzl9LQ`W;TcoL zVwo-vV=c`mwZUQB&ANNIJugYKTF;G~njJ(h?R>HFvE=ub67`TKr(#n6n>Wg;o{n*+ zsa>+ye!6$INh919iuNjcg$+a<_IO6us?ZbL)qADCroHcJsKFiYk@tJ^_i{S$7tzE43gf4|P>c6U3^ zyxOu_+1*iDFyD%628rVBGn2 z0M!_1`f_MWM8GD?<7W|4uI$t*Jig+)`vao#qs4=lWY>5MNI4z=i3wUxrh6h1j^Xvw zEWp#7(9a)?i(OFgA)}z|gXd{%3|s$BRs3obq*3mzuLn2)-{DAVA(tIot}Fy!;Ltb; zh9m&GfSMCS_6*&b5*T=_04;#1=c$ze3%|Iy5p)9baM}MnhmnS+L#GUMa8esU|G^sZ zh|d75XZ1a>sRs7Iz^~{V$Shrs0cnpS?i8Z#xaJsmd>K5Z$fpq2q=^YNQDZQ6fu}CV z9Be}7Jb)l$N(zcq;+R^KU&4aZlEYyAOIoFn5qB4ZTN`YeO84$}^0m=!Ss141H>x`@ zvrFHcY)d|?b!^@Jj!y)}ndfa|;#5OA?h^oBE8y5OmxRp}yBLdf)8u!3ROL+);Y~K) z$iMygcSc|VdD}mllq1S|Kl1qPSZr#0c3({73)97`$z6>=q61h-&51-$@5y9sg+P)6 z^Ou1qoq_L&ko_6Um0oqE@wc5$G4xsrB*{Cg4)vwKXXmvAff)dWoM&~Qj{((*8CPHHSVUt|k-*{Lx?8QDAA;%BL%pYlEG3ZiXyQMx#c76@oasj%e9aaZm z2(?>{i_9M}xAS2{I~VIT57IL%V963cd*FXgpx43{SNg@c5@Tjtfb65`{*;c@a+1F| zC+{2Uzl3#lo1@Vs(|XqvDP40fBNBY#`o>#rrgs*)v4=kbYGbdE*J*EYo8qGTaw>&$$_ zh;FB~VK4`A#*Du>fE$4SISG7k3(q%y-tgSEj< zPVmZPWo3bh|E;DX7LV(8KJCb>_>ms@UxV@%?j+Nr)C(=f9FfnbzhrzsB-w=&LmgJo z_2F!M!Vb&snx2~NeVTw6Kj>wo`fb@$?AI_pxx!IyV(9++BpnpOGU%U45YUxB^)l>5 z)KI%U9fAJfepZa+*Mra1ChtdK=(7`3A}`oxcj#>Jp25=_Bfo&UhkM6|E5Fl0<&>ZpB!46$ffJdxBV%vpyy_b5UE#pD#Auj_jVeKG~>JuuyLd{VH)a-TPL} z>$M=gRz=0DeNg=>e0CVnQ1(O_9bZ2G^_69wdK$tlZkxGNQA5hV{Dg;>Y|S}A()oQ` zUA=(a@4pBe`krsJA|UpY_BdD;J+({|;v7l-0vE+Ec8#y;N{Nw@MX3UoMN^nrKb_&w z?&N?eC&1%yDCQqc0fRjNE8+iZ?fyjae}NpQX;^u2+adRT@_v<&!Uv(iT$TcLm==32lEb`JFEoPy z5sJ5gSJ(2von&1zpfp|yt`IswCRSq6lPSD_%Z|t34im*^sd)Y46Bi-X#pixGnoM)O z9|XotUQ=0H(Q~dPDi}-;ak#9%V?ROO&vtio7~ksV`KJI#G2j2poa3kJDzFg(4g1@Y{-kKF9l%}j)e16NJUciIMqwRoNOq8fpV*qtlUFC;%U}$oOD`o+jL#As4bn!?AY@^DW69~*YcnK-#(ZsKVN1=SV`HEd z5E{sYLsOs;Xp%<|8W7t3yW8Yh_-*^H>}}yR@5dJgPe>(wKzYbgadp*nO+S4Qc-Vkh zMpb*N3RONoG)A9NkpDsYE>a*>$cpLt_q3m5JRL(F^n7ASVv_p9%5J^+dX-h%J5ZZi zwV~vGtSyX7q8~Fegruab5tY+Tr}Car-aH`JkPQYJZh%_v8Z~RRsTEgMJqJ-nEnh~{ zcmf%GL4v6cz%A;hkAuH{y#O@H%z~hQfl{huIzSO>VCZD z$e)y7rjnGDEH`9+93x)*0KP-Fa46XxzewkwzuQD*+ny>K2k`Yu^~tYv2jDJ&5fe-H zZ12Jw$vP1lkcOiaB~?#m%NYZnFzx)%W6+x{V%(%!tW~NOw30t zV{~ahbhjkiX#9k5`YtQk-bm#-X*Jus^P&7f2sZ$fsV{g#h_Mny_i5dF3;VEvIn)nBi^k;TT7Z-GJ2J=F)aGSBKtmTcwH-%$6IiU?vw0Ml$68q zd^FA~dDl-j2;6me&h}`xBVJe-(hhkAoCkh1<*alr4SRouz&ZS8P9*82Z6Tw)Cz(A9 zY+@Or4F#$JkgrlyA_6wOgC%oapoWaFH044t4HgzM6>TIi1P2HIaNmeFZm2T+Hn(Vf z)ipe9(-nlKqD}<3tV;YG3BDk}N$Xy*;)x++kpWF%zBq<3^A#7^7cu@LeDz2|?NNOI zWk9Cwaw`=kD%|n?yBmO$_ZDm0i5M?>@851iPowj0aqrRZgO$^J4ZD=SsO)$KuX!iK zvxIhsk=S#;qjKbgz1U74Ru+)iPzHazwc)zP(GZ-u75N~vVeIFv_f}&wl2S83=>jgG zx8MSG#W+K}bHviT*pdzw6*Ku3njGyv0D1Mwz5b?SP%C}_Vlnt>ID&;P|HqcRBf2to zDuK*R@ziUk=STRu`m45Y#nN+M4MU7?ypX=oo5n%4d^6;cv47A=bcHb1rK_-Tli*$% zxX74PMtG6*XcfIZnl85$S%!W23j1qp;or~yUZbg2mt=2v;yYkB2?L8AsSe_gG3MbM z>V5O) zEBmf+xHldtX$fDP`PHNx^&iPAItB*BbI^YR=as>hmKFmM85tQsClV16wU^9<5kz>` zR2gpJ8Piuf^DvTnh+83g;NS20x?p~-oN&*P9k3c$ ze!(J5@OOHj)s>#HAqY43&coVk%Y#TJi4a=h3WA+TTpyaZDH7~|SvF)I_v#WTpU(+$9w>&!S9^uH;hqRkxJ{E@narW-b4^HA zd>&y;B~Uutd-ln!0*UdbU(;tBiu((Hp*hk?GrMCM+%HeZ)rKOg2PW3Mf-@BXjHTzO zdbQpai~)em+)jFJ`orzmA;`bCL#;WrG64!=ws4SdKo6dQAb<+QI)T}b8rq27Ah2oH zA?La~_3M{~Mv+uJ6!5XPx3^#=Er~yXW*P7o6BdBW*U~1Fw6WO-Yw4@2z=?TAdwhKS z05n`xMy>Cho!2%1bTDHrR3Uiu3rwC%!;l{R?(3zk$lt$h0ksQ;QZ`cQ6Efjn5dC2PYL>Z?m@%gUR)x}KE@ z&G2-(>SDdpc<4%>wY;UJpvYHmH>1n)8TSYx z&RR~KzOTvHssk%0UBLG*jGunQ!0Clc81~SR1Ku4)7Nu^hAM)e)7AU(WQ zHXq!j|K6T>aC^we$w5{%*7*&f*L{Ie+1Btg30xp|<}>bqyPO0UuzVgRxly=W_lvBM z45U(e`y1kKOqO)W)NQWgc|4oRK)MKt`N8slZbcZil$kse5Hjv&KE4hy`6v(19Uyi z;Ts9X7)76))?RCf)ORx2u?t+SUw{5QV68@(0F{+?F5mNd_(K$+jar+k5P??jO-pMI zR96qZ3;a^w`e>q+UXVWPjQH-R(q=p=sA++FGQQrxpL=F;V4Rdxs~d+ioA<8Lr+Xo- zkDr&?yrsulXj=bIiHN#%NW&Nl`?SmAKsgr|ERF#m<4c_JI|mbe8KTSa+G*t2zzVmX ze2T*eXjQ+dm{X@u!(H zei*%ZTAZLKJ(C_P<5aDNQ+Q}*CqfVFd6pZM-zvF~UAlzqST`A976->v4$O#E1UCpK z_TrH@<>&&t~R<8xne zpijdiRFr^UJYfqg41wsL(G$Vj z77BxlB<5TMbIX2J``GGh2>n^n-BU&I~BfTG%_f1|79E5+YA zmQS~Opg^^Q->i|xXKfM@o_OuTk`*TAV^*EFjbYwSsfKN!HzLnhd-&RKEs#voUO{MK zxwFb~fXkml%-JT9)c-XR>US`Xk=2P=qJJ$}NTm|$Gp=TN)ujl;4zi2tHwL6px*y2K zA!HpcM&mpn{ay5fa_F%(;!^<`XGM=!bg<(E)%4I9DDVWT&QH=x<>F2y!(>v012oiDh>Hvp9g2DCe7;SpX<*QCw%|s_ z@gSS$(;q3Dr-MqhXWxStph2H8|Nij~T=|Yx20^g0Ml@}t4EWWh zygCjg`Q1t1zofZ;S)xZmU3Jz&OC=!dL>?JU;1rEtONQ?6TKu8RjRYgr-uHVQ@zovO zMlnfxPta5z^3&Gth3%&zdR8YWsqW5B3J2>Q9r4Y2 z=^g& zVTG1~lK*+(d0jl#UPtyK^oi^I1@VbqZ!Bs#EX~Y*1N;_XqCMpBpSCtP z;|8qUn}Y9v{IrYx)w_4cAf)&N03<@@vsQ242JnN>4u_vY8Cjn`p=TZdp$si;r+M8O z;B&zp6R~mx)?n<|AN*Hl$S_(gx>teR#@N_Q6bKKqzUJd@br=I4J8 z;0_?82n=WOX9x-jK^82itD7n57-D2yE1=MN?Z9xrxXmVH7A=8Z!3$o_TRl^*UTa3> z1R|BeZE5a!q(SuUuC{ljx($W(I_Fsg@3qhrMu|=Cvu72AqUM7bV}$7!s|17^eFZ+5 z2^MRqlnfu$n2D6Pt-j8lFAX7WB6huij^7 zsp`w50!dI?(2IW8icZg>g{6)D0?wIpb6RAg|9xP{bB~dNr|__tJWykNb(1Q9kz9r? zky|!_Z2w!QXPWvkF{Yd;s!CA|B?AK_oKE98YR!~ilcDnHTQ;HK9|Q`QkxY@)U;kT3 z)UE;~n^3`Y9J*GX#u6^aJ*MlF_AxQnp<$TtrxrR@dqbB~74Dolt3G;xK4?n<5MysQ zs2>^&2{Hd?FwS)$dMr#_D)kcA&61b;S!=V?Avh6Ha^#$Qg!Eg&yP4h_V3Zs{{&bYE zE(VjF3H?eQE)yA`rh9LAYl}HJ0(lLas&QC|EBL^Zwc_u zh~a=Miu!Am z#{T#>`N&2=-)sFB<8c&JWBGxR41GL!x7R|Bk#yRC>jaSdaKje^W}rRD0PMNT2%6hQ4#&jBX6yU7Z2dnP`BCEoV! z=0B6Vn_o{bhgC>ZGVPaEMtHn+Y?ZC=M_pMIJ2OXUAb)B1`Yg{1ke!1Ro+zUu0a3h}~ z{QpM4-0%CqG<@A3IPt~|r)GmZf;eQLvA7e1s^_r)@)++rJUkp+5o+ICo;n!VeLrZj z_xgm?e#W;e{7Y?AD-DS;=Q=x-kKYLD zwB6-z#xT0`1nYkLM_ID$6AdNYrJD-6!cY5V@_61ZqBC8YQ!4X7J%VcQ=;l2W_m?UN zwj|^PYyD1C_6!?zwXLKhNe7gbX79$1ybaz4=(aB&l@p|MQiYP%)qB|wVnz4au*e?| zi3VD7M`9yypwNVQtT$H9?QoBVd7h}HQPv5KB#8GjA2QxPBcxo-YRvWSJn=R)-2keh z5esKG=y-B|{{ZArJL~`EFRmo0ee*6;o(hm0eXgt=EAgMSYT3^6k`I&v*$Wpf(&2f6 zKsvd@3^vIUi@qeb$ij z5aKYE*jbGE=0IhlIoDX1v302$; zqM^z$0Z_V2##<(k6vWp)1^{e6GI?P3tqK|J*p2O zAA;z8YCb7NvR?+uJFEYFrIk{LA;5Pk#Mk$Fm$?YJq@=_Mkd!Mc?XWhu<(F*(R<1Fq za2t5a?KcURW8_ZuoG_XyxUbbB?}R3y_&&oAT9uvFb~e#dVrY6Kdx`z73{l+`n;7G` z4Q_(?EFVgow7gd5yn<_6yDD?M0Z2vCTkmpPT>oh+-K72yvx?Q~q-g> zEkGW7g!kmc#NmPOgBM8g*t0z+i|zy4GJv0B7+5Uuj!#T{k{TEZ0ws5VPZ?OXcD{a$ z-Ufoho5)Kc_G6^^K$Yha_S}I;ZYSz0nK=GD!_PG_*iSGqo}NK1b_EE@2tF-+_^ko1 zWWD!mTfKye?9>w9KXq>`3no6-#!Erd9=@S%J+*;b6t{cDGi6G}X^u<(%b^LwieK6ZQ7XTNIc4D6j! z?yEd@$gen%DLFQK{De>PIPR7_LX`X77oiI}y$Z*}<{FvuRWloTUGjpvBijbC(WPEu zQODLGspO}@+bPuJJp_8pUzP3^!;=)H&u)UMH`eR7&#dsmz2UoAzAHS4ntJoRYQIf- zqn$i)zpR&k>buoI`Emua{K;>-tl0S^^-@G0~FR_(sjC)SKUcy9K3|XVQA{l)BRg(lT5{` z2Rim%vCR+uJDErwU9Rf5+8i`NtjyW!E~$N?V4@ z$ke%Fz~c^jA7F?DwBU~;ft-@k@W0~vcr5;#9p4>90=+yY$n*w8|K25@`&!eVh9zKJ zD`SRO?_C2#dtlAQqj+b!XdH01rF@`i^xP{cn!) zP^_(XIyTP&!0!7W5Tf0zZ{@w(0bkGwGQ8JTfwuKcvaomlmtn~6pBAV%2M<2Pb4!2M zTP4HK=ZPA&zgh+(jo%Tv1%L89f^xU9$TOC6k3fY_u9B9+1`?l;cvQ0|>K9Mg`=06AhfgLD3~IJW&bwhm zM}(_xMxwmp`r}hmPeD31t>K>SD7pyK@65SxA*A$XNxne;LV3&1Z+picbdOj5r`dh; zdvJ|$>F{N<<5_t4PSUO*iT{XLZ6^ZC8a+qVFnk(A-B|g@Q~#|<8ViGf_l|^?-*Eq; z{KYV}f5n|g#vve7>F0*}Ew`A{Ih=w1%a7FMNMrqw(3%=O{DO4`*bc|>$w$vvKP`8D zjT%golQvZIiwuHWIw6t~B+c8fIl5S((pJ`#o5mhQv9hg5PV>UHHyNJc*FnzNBEQaW z%V*4}Nyv!!+~JhaGmqM=e$NZAG~jLZ`}yxu7GycR#*u1O4{5p#s%eVJ8~W>9JnBn1 zJ;)bqd9jvtEaU2W1_IGkAHmiy3mM7Dy|us1J^BCjO}T2qQlK7MTU(Edo?!mI1*t1T zsv8>{YXe~I_#D6nrCS)scmVwthyl?ZK+*;@YYFsVuoDA-D(P52>?4YR4YaX$cXvch zfddd`)vTbq8q@yLt;oDQI%?`{AclV?AfUfA2nofe42T7_77U`n(`(J#aDr1{qyezd zlm&2Z05&-L*$=mtfw@w=YVpuEL7NDN+K%^igZSQ^ElfWr1TxMrEc1U`Gju9vcqoUK zUlNKpPil08500j6tL}+me|Zw?_)I6pF##H|H)0%gj&0f*A~qUPZC8bhyy2Z3addAR zg1xO|mMvI`Q6>;rbGv7KD%R#ek{-yZ$lU=k4`dyU3j1}Q1z9yV&Ll-bLgX$xQD-(6 z&iF9(! zBRg01yG}#OT43lxja)r>M3gh{DR=6CXC$-AS@rKE@d_E`?_p&pSVpw+r1QGLiWVRbhd)k>*`>jzWWz-Ted25K-3#jG z>?80#*b*Mkbah5PTht){cHpjS61}5GA-&Z&mfFHwa-p3bg2z+Q8xWNL!onnPjzxET z&-NHe6bD(|D6XV`9XZuhV9%}z8nCcIHk_@RLxA)8YZE(7F6dHt`wva)Uob%5-ENcd z4u-%#7p}xpwdx^iLawDz)QqRcD#j{bT122<4jVu|AuKoSu!6F}Fa^6h2{2;wYPXzC zXqgk%Ijgm@Xzg%{5X#|BA3_B=MfIv(z6a;?pT!ta$dSdJ^3cW~%r^zTTX0gn$}24V zmFc#E7c{JoIZ&}fdW_`%|BwPr-to!FXFuG23e8gM)|eo%623cJm5^!k6PQP#a?kNm zMp5SmPS#XF@vE!502D{y8=!A7e|y5mWc znw+y;op04_$1&y0=QIzKnK%_Bs zk}VH~Ms7zZpFF^N2V8wC#jfE7A^wTCw?{0f=LhndT*$6I-Kr zhKTirx_@UE(OPq4EoB$W9C1z%EjPCgLihkgV!%!c%~fbLZ`VDzR%TI!sDWk$5*X{) zTWSvTMBf#v+MXvqukt_!mMvrs>J=UK<=TGn*cYfNrz_HY39+xasKJcr&bLk3_1T7F z8&kf`FV=V$Iwre_q)eM_L!L_q%dqG%)C_oa7Y`0-$Dv8t;SZqDf3;A=*US6PMRwX@20B^&S&?Dmv@nU6T@zI$11~_*yx8W$eRI4<&a3rj>KdC-={Mc7@y&?hJ_1kQ0x^B*GhvN|Qje zYSikv_3KyZH#Sbr;0@5^0ip-srxPE51>W9kheImYeoD97{$r%u0Z3v-#`669yq`bi zdIFEd2#HekCn#S5xv) z={A}+M3ogtly2pO0@F9V<+mxFmEIWX&EppHZ8^-xy-fY`5y83xq7N{G)1V$7(GMfE zf4f-*2RT!oW+I9tCd9pItH)%VfJ@AmSiiuEUog8T!*L5>p3a)Cwl8!>-Yc0^~c^GWOW=K4KioHUYDbzr&riS{rvz^Y9qXz024A#4I&v8 zRCD3-$wc0B><<0>N&Vi)eGRE-SPZ1tKGb*vKOxi`pwVHF3k}H5rlzkvxK!<3lRL2ER6IJ}fmWRvDnoy@buDkNMu@^+U%N(# zTVY(Mr&%J>t3;X)o~a?fe>8kS(IU1*Lj?D}L<}npTq{c;64o$&2qfAaR$Nva@aHEK zA)2$MX}XghexxjBS}vaEJq~eWpj5s=1)NhUnpqw>Cv&GfjztHFzUq3fhIpKF5>v!I;IrE}Z`6^Un`Rn*jxyIxsmOe{^0Ij|@ zv6VN))X^I>8|i9?s1fB&n*>r#wqVc&UQ}S+N&Is437P1-S&6OxLN0$h%oCtsmp->A zHZCU$bKq<<# zg+YQA&-$3L;a=lCG6r~#Z1?qWARhb3GlH-Gya-CbdCMY>eO-u zNVmxSRa&>CnijM8*%5$DaMM0@+4Jis7Yva*@{8dB#G#ZgC{d@4g!qqv^$g9>27yPK zLl7N|LROtf@ku5NJ&NB8i!Y|vib$<2?a4Ot?tMCiHf5sguLaLUlD*X(62i227tYXk zR2uZ+YN&gbNvr;_j2FCYL$#om|CQaPtHI1{U0>>sF4IPX^s=o)nhvMrIiN0khvUfd z-(Cguz?Lb>z*fTWgx==!p4>_eeGYTc1Sm4aS}ElgMiO7XbF$o?aC`<`b7!sa&+6ZN zik*77iIQAt$r4(-4DIrjFvRWGnVYF(Ne$+*Y*6*Hyc@s@=QTHzeaN1k$<(HFygC2- zW0-s7|7j(=!L0*iFCY<+ai}t~v!4U=OMUw$nMnGlGsiMO1fQC!oh|M&mMK#7x3sP8 zK7`!f&*Bkbz60+3GgxN2S;DTR;AKf&y=q8%Bn*M=Lh3P6$!mmEKu85lb8uzt=81vh zg?J<5V-FF$ts^&y*V=Mya3de`r?6R16n>e^O$>EeR*tZ1cneqM{DMw~_@IcTnynjK zPs^>y*lHK<@frSia z&fMIJgvdTB(RCJ>j>2&$93M%li6nkGEmw!ctpFD*%u4+lZxh-1b8a`$fEAIL)I9l; zkR$`Y{s%#3KN%eIw8K04c@3igMj32Q32at+Fy&CtcXukE2sue(qI~r$FV|}u*ih38 z|A1GX$fs_ZbQ|MHm1_&n%#U$=7SGbv%i3Y4?*SoH35I|6X%oHGInWIw?)kWWqjSDh zE0$P?a)2q*tnWG|r;_SqSILiXKqml@A69J)pA4Dq}U0#&bCN^C#@bELh4|T?H&(j)aOz%-64OKrlOV#e6G+=6?@$!`ZD6t?RIV-RllSFVMq2FM z2Fg;CuDNIGVV)|>P#N6&(~Lxx+08Bvlur1OL#Ly~@NiKD9*NCJ>ylKij75bjgmTx< zONc!B6qzg^q*ilh4FosQ1Vd0^NuF6(`FR_|%jKt@Oo{FIR zZs^U3W!<`=)1rccD2EI?cFhr{Mfd)aECO@h_2M@LGg09=q>J+-0nVKwrEDx&r z)rS?@suPmZJ29KnJAdyXEFI1qBblZ+#K=4y&?ds3UiKHEChD$7uVv9MS}UyugwmdW zE}1~8;tvmnt1bpzYQ-%S>G|Vq+*N;O&s6+LslCN=R;zEs9Jfydt;1g_6KtVx0I+%d z`Ub=TDH(T*NO+zOh;HwHey?sQSYJ{So>2=@ z*f}eSz=qc|U>6*-i2*0fY%M?s);^jKO@P4-KhR_gHk$OJPa($u)qn+%-9XT$wKg#x z&|kg#!ieVJ^pcoc=s;G8Vt!?f<$}I$*`LU7vStx~#R8Mqas6&URPI=YKov+bbx@5j&zBIt+3Pxf!i0X7g&30{^RL^9sRgj+wS-yc_zs@4k zURgGaOVetAv! zi$cO^!n54Lcg~olJJ-ne*1Ip-UVMd8Z$Zy6-{hL})4xS*(v8a}=j7Fx^z=mHWiSt| zCpbnrwBf`@Y?0E{;i2<Rp4P&F{a2^<6Wft9T2;*ar`!x~LmSi|NrxB;=Eg(C5W7 zovXCj$%-6Rkdh1r8*yXcd&-Lkhay_8sclAn5w^B#Tf3vnr+ecn+XiPeHs?hlsi#Z- z{;tV5DXTYFg-W*G*w)U3Y$U7m_Zc1s=8L|2l48K!@(PF8JT;VJDkXoUhl$xqezbCH ze|ltffI*H?OWOajIxe~15`<4=N{UNLXa~6un)kVSv)=$L(9sMe{A|*9bE}FTAx_eP z^-@6~Vy%6cH;u(x=#22;v~SuX7JS4M0c(g&#usK*>E{cKIuz1@ur;2*;oF}Er;R>5 z>pYOQ4OTfBJtQ7?9R(Y~e&G}q_E;K^RMTIOgtY^t2shQ!6B92MaeGa{{@7v+Mm+9; z4}%0^Swpwr_#2w(=NWf}Q%oEg(@HF(pxI@JNY9MXUaP&4BR(Nh-F2ZNm#~ z->@%RZI>bqM!DVAthc_FJNDgw(Fd$)gD6S!%^fe%o+jc5`HtRcG<0ql>%R}XWE%F9 zH#=D&85K(!itP}m73jB$bmUa$?u#e$+i&e+?0AZlND+O4S~R~1)AG~(BPdtI88q7Y zfsDm=jV3{HW@AAo3cJm7Q9=stTNdG6&@?l{+s-Mu0?{YxA7_wl$@9^x!*`T!(~vE% zB%wo9+azjns45IkMaeYpUUZ{MKhtk#5h&rZlTLmAS|v`=G45lgJvl=;oCfnD`Yn7_ zM+ZH{B$moNB~Hh?_UGZD!&f0+UL{_AtD)PZ?809w4oYq576fPWihcF}N8X#qQ`Noy z!$*o+LfwkW*r*~WnP;VFLS+s|l6jtI$DK+MnxrxnA!H`A6GF&Tnde!@JRBSj=UHo= z?$7V@{XM_e^Zfrj{%CXBYp-=(*ZX>3@3qd}YjavxbKP#tHn{g>Ead$S$DL7knx(vP z;XlEwtR>?4p5>k^bhG16w4!`ltzS_eZJuzn;+iRYeCxTI>$nJx$#l=rDR6ho5A&OU zYy2G-Kb`cC9r+emU4Lhw7kAi))OnQhp(4OW_>^&U>y=Ax=W@6hj~w6)G#5Lr6O|mS z{f|@W1Dm2s%wWITmwo1b=eq*Mn<}JU3O)ggkhjU!VsC+L3rW;W@j%~o25?FKk1xrJ zuauv8a}6w6gXiyyW$I1A)(egoc(?%j>`>LoFihbdl9~l8&u^rhhQR}@jBLDe;Bi=R z_p}YqzQ7+petufU#X8Qhnmc5u?QSS?DT5A5TvJhHUoBn5G6Hq)`W5iTzie_;1RO~Tk?$zvE*iF->?GDzhaV= zbOE`I3oU+f?OWdK|JK^)XlUGv_dQy7gdD$LdRi6iBDzH=lVyIMTE8SUTP4>RqH^tm z$Jg&)m#aEOMMPTJd6vc-o|t^SwyY_r-NJ5iHI04f-p+f$gJ%!V4lCRmemMNlNARXl zPRN6R0DgP^N9`*6p6W+vzsc7R%(bxKAGtaPZ@cG)pg5UncBB39dWwY z&wo8Aqo#>6S5R>Bd%;sle4kT)&2(y$O@&;;+hf#$RZpY6(m-P)gOhVj7iwhl1{% z;_|Nd$lLt6-fsM9mP#_twAuWbv7&)r-*@I}TFLsr`k+RCan5@}tij>tq{)Ujy_u!$goAm?6Jq>a2)5K(w{#2eA&K~k+WXePWij)?ug|MgJC+!x)>>Ny zzrv}~e`^0BCd-rAIf)#3wD2bkUX11f8FWa%?fZQ_XHTyC&TA21=x53{>C}u& zJu~Bsb##rlzI~BCQz`7eLgIYId(|W%^7pKULgkwyJoG!b`Qo-Y9{jt+SH!G-?o~U|k!vqZ90Wr9u0ZcghqHdC-u+vZTdSbRO zxC7t@SYzz%mGhrqz+k?djOkyj?!DL$BL8L^W|z&Zazn?btG$aCC8A=q2HtwdYoTF1 z;KY5)1uju?im6$wE)LbkM{f`{8$SQA6gzm@Dt$OKU87V-d~-Zf(t#{?qk*${$P0GdGam7mst(JMCVn%Nq zN;g|AUJ3P-xlDvBQl3VSg%}F!0_$>^CtYqFARxOE=DW=AHxZ0bSq#6IzHn^dhm=HrC)? zU;_B+h&0vim&bs4DpY*dL66{HyD~GtBXwQZAS!x{*$O-eo|;OWnK``@>N)hXX7Qpz z9N5&CKYVsOKmoMp2#F-#))oYIbIZb03orqrtt9e>auB$@$`V#}CuOqf&cGwiTUJ8G zVv>@^&UMG+Heh ze0jM)sJ7tk0@dX_*yta6vbLNWjE0@> z=e4|1oRrYjzEG@4TD+*Qf1rVreJ{f0#pF6`pU)5_z=>luOVo6W+%8ucBW>+A@M7v| zu7%2zAZ-A^z&Bt^)hWO+n1DL|s78(rmC_byc#OJ6oI(sV9Q<5~o%IdpQ!EGHu!1{n z5hm+|j9*4Z=K9jX|3Bg7zw%)Ap4UqC{hz;niGkaFTxA*oJ%XQid1KB+Z{Hr|?UUXE zwr=@N10jHM9eBYH_yAxJyi57t$UbdqQit|}pBERh=PH@g0jOLD?aN3yTMK`|k8hs^ zw-u+Pr#DV4{oCkL;!Tv(7|fXiqs~QOVZA}P^5# zYO+&3LHffkucbPu$=^5y=IgG-Ald$P8BRD7?6qiI=x74og79yC0ET~gQWG&D2J=!* zu{gK1G#avdm#sT^ewi||2VN8T2HaWcyY%gAb%HE%@iA;vBiMcLw87_P;4}~=M-Zj+ zL7xCXUexW~I0`TZoYSlJIg>}4HkfsA*Ti@iC;U9%`2=7Tld6Z{JA{7?ocscI%=oYP zRfBTd>ifa6H*OZ+uboXXbMcE$P;*}|+el_wA~&aJRw9jfp3} z_=E?OKPi3&MJAuCUFA|%6^Y1Y}zs>A5(dUZSp6=A4zG>u(8H@ql2C9GCvl#A=Z@#qIy5?A^ zDsV};U9mSns-CIt+h)Qp@W(pS<<==hv#sHFzNmL$;so3Quk&Y}w_2Aqrnm1G#(%UZ zTu-1M9$bslr=FZTAdR2e&$zs2aY_;7aYKDQ5DTvZTv3x#7I>scROoUgN=Zg1Q;5 zln8oWpJ|b5K3R8gdz4pLW@e@?1>7i`e!DCO+)h)C2X6&!qE04+ySuraq=J13jlzfb z&G))AUt9u{dAL!M1x?H#f1?%7$su@2SCOv23V3=D6!(~6 z_`p;xmE4Tip@2u5$JY74i=zGHw3}xN1~MAKjdb8;L*cF7aKU|Z9o!l`LIJzs$E|CU z-Ry0az@|$clpl##mHn&n;8piw1hCPWUxh36BcwOMLGaj`JH=wu{Feeb<^ z@Wq+s(p#I1g{|^+VpokLG}iTxI7oa3 z9?`YdybN{+Vyq6Ltg}_)!N@a=$$ru-3+vCe;lNhFPmKu~l5YMHGlKKrOX3-C?#vuz z|G7;6QBUJyPVjzt3fQhqmlEYr{(B9~AFY;J-Yd(9Wzo}7PV-K|=dpdR&^j(CF4xOVEy14=L(=>+)SZ(6UX$iQp+GJk$q z$Shq9mT0S!dHJ4qW)3`bld0yGv#Oh%I6^vi-9JWaR)Yu7rFk3sup9Bz78oB3h#X}d zY<%7Jn7G-ddU>HC66-+;!IpnyD_oKMDo9W`+iwiwti1p>Q1So7>-Vyh5Z3Xaa-rYY zh=ZG2$&5XL<2=AO09>Tahie=0Y)w>N5Y+kf7Z@5R-9(4k&&?F(2mYyB6u@A6GaHgd z+)T7K-}6={|FkNLXMQ%-nkeYFL2QsEEf0YQ}Verx{gr3`yk!-Z{dT=>yv zs)hvNzF^~g>j=CNC(cZh5-shLm(ozUu9^vUcUAhRT6KR)ztl6^Kh^tuDFe1FfnnPO zxIsO6sf4$BD!KUE0Jv+U-?-L>--WJ;3Ld?a-bzW1y}4CWqp}*lXfyv~!JD#B%R?}& zWv%tm+?ev5=!lz*6NvNuLBfM)hJwMnN6JPbjJxs(VT9jFQE~yN2vgwJ*OFoI0NIrH zOI1bfCx?x~N5qv%l%w(BF_ta2naF;ljmfRn63YQ)dG9fh(ApGm=U-_`hj#d|d;qZ^ zk6;p@vl%u}>XkbpPj{W=P(S_0l?FO(ZSAHx?>yu6ltrHaP5Ic{_nE4|!!LUYW(^#* zQ*t-_N$)pQ$?_(DEd*;(zz!AD1)Bb~K9%nhl1zt~0_edO7wpwj%}2D87<3(JxMpeWv2ZDF10Qs_=QXg_QplY>b+d|BT2!` zWZS!uGz#yaR``fpUsyZ)@s9_SUmADJpE>tqyAq%zqXY5mT56uYfg_ZI;-v)McbVK` z=d}Hgv5`D0-vylchlzdg4Bh^|stY`P|D4DWrRr{PDX3~3o#xi!q zGxSOKuM^Yj+To1LX9B$O%Ko9Hsm2K(mTY)GcD*Ay`My4LpXrIf$M?K3E9FZhFj~u5 zPM&uW#!-g|!x6^G(W|;7&uzPppUGxQCAQXmQl4fC#JT!6rt!=%rOI@H5MGab=&7;4 za=S7)fnCeU-8XHPDd4%3!mgHXC%aPw0lDCg`{($`XNDH;9~uo;yAE)ZPbh97-(T2% znJkZ~KK`*jGbCJKzrsCUCAWk3DJJ()3tG$uHh+VDT2nGS`y!?L*|o-2@7J<3w9Qe1 zSMQ%A8-<&XcmKMak z<&_m{j?|?K$r;ogPu0VX=*8Yhi_AaTrHA$Ma3wm?LX?gc893qUw7>f%MaIJ9}#;dZel=b`G zqN5(0GHs**?~5B_>!1W^>h7A*jcLlP&rhL*v602~o&9Um_(}=y@ynMV&(1w1gH5qt z4s1+qweCOIm?;<_3Hg=iLH!yQ`A}eDb>Ze_@n1HYWF!2y%(`R%|HukUe5!xuW!A`n z%{R>x5d(m3q@Rz7A7Gvc+~%s!yqThAwBD;I6V^JCxJRHnj>s2^%^29=TC{QIYGQ27 z`a9itGvS$FG2sxQUuKkz6twk=`}@M%-gVEStro>F-M?2gJ}HXJ6@gJK+Q|Jdm*QiX z@YviL63dpVni3DLQ{q3txfu@(x8li^+*#W|)_$__GqVtXr}nDsK6$=nL82ar`KpJb ze_Mj_jc!Xk@uFKku9aKit+7L@R#WEfvSG@5MK?X3Oygaf2hs;N1ZU%(4on2fRBVnc zog>6cI&bz5==sO7)hFc`g>R^0*R$2LM-mSk5f)|p$@}Ig-Dp1{Bw(s_ONPMs$WdX^bblisv7@#fc%)TT_ANjk-KD76=1I)nhB>;*&EH!KJ9IXt zM0?4mwSv2px{W7RF?*XBjTlVHRRQ~^_>6Alr-a)rdwOAhm``d<==ur~82_4anB+6Q zolnRZAe&Ao?+>UX4>Eg7;SN6Jo})YbOVLxQqeWuPcb=s(;~f3^AcdD-3qQ%%!N=gL zHqOYGdFBukeK8!{eWuIb_!xRE{mbINRgnGY^KEV`d2E_sobeBt>IUih=K>2TsD*A zYjFDV8O#Gp70aZu`lUP2z&q^EC%3mn@df}$3uZH2w!L@o_)%WRs_ocaO07)9r}W;o z=l_m+ry_8)gn^;A^Zrqpf4H5`pB=p~aP4{!S4$9ZwNYgNZ`4yM{Ic(U=ktFvJeu4t zF7qykPEz7s5R>DwuauMX7Z&!?GfEc(KDGkC07p(c*xr-ry?=BxT>W|#G-Fq!;`AKo zYd?QH`>#Wc%boX4=C`*kRH@>5#>*DHcW@5(zesj2E z%_1hre}*6aA}5DccCdFfvv+mj7n1@X-oz?9J2;+q@H99B{*n+m%P%Q?)(ETW?BM1I zPu9d|m;C=4ybwenADRW#;LMy=-S5g8 z&tNrOo!v}bX+v}2mp+TtGP&adjf3`F2aOdJ{^K_|ia&l+v9fhFbH=LJf~#CGGj+IY zhP`HHZ{cdmFLL&bxPrnTkMH!1F4OC=?~&T=Cpm~8Ovw9aiF2b1-lq0rZ;4XyUhyop zb9{gIIPF?{e(FjOW%If6&G^&VZa2*XzlMF>V=*3GbmPUUTW)b#toYVp>G4J2L1vVU{5|7Ez>Aikj;eQ=pPmbTU z=Ve-R{GE@uC#uw~2cJh;>s;mDMr&R;DSTC|j3@l#^COSq@0lFF^7U$A_KiDyguRyJ zcb_j@Ej%^TR=Y5H>fCQ#u}urP^>-2!Io?fN?w;qLzTP_`>?EAGXWtFuZR~Dsk9h?- z-D~7=Cda=Vn5Vm@x?S^_T*;LabL9DC>m3z_yHa`1Pm5CG**KH`QWF+m;7rEH9a_95 zq5rz^p4RL7*pm|}*K~*uZ_KrhhM!EloW6CeZks|}qg^NK6--M2&$LG|f`&nJ&ZSt+;=PhPiaSk;*2Tur%_LHAF|qlaTVSi2)G{?fcIwD>eWM9a%9 z<*~}nV4r!a`o_j~s=|ji*Y~{7eq*JzYp2b=!vW#XGCk(Smk#d$j~TtWZ^y=Kr2O)? ze8K$S&8fi6gKnxjxIKC>>{7fOhKbo94hiA*_Xh?`RhRBODWjiUR4>fR>dT`x{(K|q2O~~z)QL5}P{cl=8pk^0%=G$@yg&a;0k=56J&^HNfWjtn6x&^yPr*-Oar>vW1+g zm4lBkfA+oCs8f6vME1Y&+XP@za}R4-MlHD5pVoU!72fltgW*nWAWYa>$2w` zTh$-#?ZUljy<)0%QkUtecFlyB?%sB#$8UrVt20~Q+jYR5Lo@seF;YM zLp5IZGE0>NN-*#m^kgJ<;4PC6H$7buT3xp-b{5?EeG{TJ^wPtcv7mGMUc39q^e@dpxkn2;`N`mMs-aJ{GxRIdD-Usx*f!3!*{Qb zf0hlgHDy)e79}fgfB5a3veJ#-+mB*rglbC_dAIJgc+v-|SiSOJ*||}6a?cE1iSB`G zU%RVT{XcxHp6lPnUtq}`Y#iL9eEzGa$)_J!;cbsDJmIX7<`DYu5tpZywbc2kOSGFg ztRWy>%`>WQWe``Auy1$9>Uw{Lg2TYeLIxtwzN@*Uj2PQqll~S{Qcc6ziyDXSee@#z z_U9jA#gr~Iw~pb$DqmX>Uk1Ks_^X#`MI5)c=(yr^FI{jMXTDg!&1&=|!?+oL{mX18DXOZ>cP&P|^1nWJI%pB9Eh=>79CkL^*=&GQD2 zC2SAsGz`qG{rz|Mg&h(?_nvl|#(|Zxn#-=&bwYyb@(%m>w4T#eOIo7D_Ff3OsJ*YD z$C9%6QZ@2L*B$W`j_Omz{^e=QEmk+Qyov}Ktl{C`umh$qf5+{TGC5jd^VaF+c=_rQ zmp-|FsB<-5lOLmX@~r>7yppU+z=!CwDUYt3-+63q(Q)!ky3^IOq8jz`G30(VrAmXd zTeCg_g+mc@Gb*1|M0B-w9=`MT(#(aL`M3|e;tu{??Itm5Vw+Dy9^cO%=oE8ir=?sO zlahV)d}h}38;4{~O7@qWC5(;^KYBWOQ($X&lJYu>F6X!0(3789GtOoW^lR@JON}+& z-PxHnR$;ZDk(mk#X4&)SyTQq9kw9KRfAkwEv)&2#MiEEiPtJh`up z85#PYt%!N|=0gitOxw>?lajpWJ_nlUn%EDnp7Q&0spw2u8sp?;8^(}JX9N?h(qh|h z8BRT|y=5y>D}DFQoh07uoqVB3-Q;h@n|qfEgFb!uHfuKE0imn8?XR`0OX)(ct(} z-~3Z+j!3b?U%ysn%yLH&NXQ!Pg`x4(6HEZ0FiZh=*J(*MC5Pho0Jqc&$ zpA=RjV{F#P{5E~&TU?{N$*s#IqOQ^2^k25>cJnJeES4ksqWTYJcx<@?btAqONIvzm z;>}7uT0U`(kM%i=zTo8u_Rw;I$6KZNezBS3R#8S9cH@pQ4Zdk2_;c?s$u;I?d=tZ^ zb@z0+XP=xHO1)8Xno63oQ9oj8XCFuWt2N8^a&}*wkbHCzZ$d|Z5&P!8Q64px^kuJ( z?r>Jm>&XYS^}#Lt{pDmwW0x<|+Oo~a zwhqpkjwYsNe-yH+vxyh>{~!`CnORv_0u3xKDTTcZq_?x91C)^b<|ei-|4TxOiAqUh z)l6Jn&5#g3V}#XoyWINSY4~TPNb1*hpL6=Spr-lD8gCzT{o2)bZ~upZUMD zeRlWHB6_@4ZDf(4Gz?9pKMFi;EvEjK&sP66m+cLgEs{=CxHPxz!cfI03wh$8l@_VD%!ut6+|or@;LG6G_px}e+9d}OpKD5GD81R z8K;hZBs0a%x91)hAT*3CiY^$H$*{IdaW8=@{2&v!)g8%06*^)Q3~7q*8YP>@yUD8# zdTZmikC^ypdEZ-_qf{^9rG3jH9OR=!#_L@8W{NrtMEESFI-gesRtL7_^RY@$Ecs+5 zJD<7TmC}=o68Nq$|48O02$ChAJT;OzTqu>@x2{kJ8>{C6DoJ zyRqJi%*Zj_)F6ZUVTwSiw5^bYqSodQvYAM9m99ZLR{OF&#kVLyW^FAg-pwIX*2Sr- z*h(r$hn)ZB%`A^;^(*3FRaE_gPqFAm6V^adhmoMa_eI-OuhA}3cfS5xwuK)1bA<>u zb&}NiPZ_jV5 zux6D_>r&L?h~i7xW{17yq1BAjc^Ro4=vQ!pASIWQ?(E|B%zGko?98}s!(v)nRb%?_ zJ%Q9*FO?g;#-Uy~{au+=y0_A?Y#MI*wrLrIrd%NljNW~IvJH#l#6iiLdf+;HF2T>U zY3jrp=S{W}7ne1_79TonRIdXm$ZV0 z@TL9b~TlFW*7y}L^4oo(En@g8V; zzuwnSzgSNk^f0K-ARg|M$3<(GU0n5h&mC35n%+KN=DPWNEW?`BrzV7j&Amh;TK8pv zPP2cCHcq?ji()h`T9e23wqMagIg#GmUfN@x%S_+zxpx6i#*wNiM-%;B6Z0e;X`^FB z_Y;@)k3vJGnlCswuM~!5t2TI>-yQVVr6W&{DN3K4$8|$1ujlY~G zE_7DAwfhE-Z=tsB6SvXNLjox$2wG)LYM_(y)G)2M5B(3!$bCaTDMHvZUi)<7w|=6n z{mGithMqosj*jNG%JySzEgl8q^?m)K58dvXo9lKJ1D}%gq@$Hd9DRmr^Up-<7gDdY zPB^NO=F{W%>*V>Q%G@j~;v2xRzK~mwY^#EcDRAw6{Ka4s_|E&g0uq|#{VEBof!Lnunw#${-k;zRMrC&D0a?H1y zsgdBbN(#rr31V*BG1fD;&m9i1y=MIwv>P0N2NlI=Ukl3 z2lFw%Lkap!^!p6#tiwF2Q%f{oGQ9s0qysvblrX{bW0(`GUFZaQg zZqu!dPeYYC(ZHyECKABpc%0PlV%S;n`)mdHH$633Bo;U)zs{`WrYh!L`)5@?C53J< z>YRn?AV06|{9Kz^!z-|fcg4L6m@dy5_D~%#%wO(UX;I{b)>_z5qU~4muBRb<_**v^ zzNz3{`;blRCKV51+gS3`zE5ZNj=kEj3zmD@Fc2>Y==}UoF92-BPdi}_WJifBDa2CrCKI8}Y-zJ<;PM~&4sto_OgD^*JN&>-iZe_lD9AR$JPC|XhH}HHeg1A?u8|)(&3`|7^!bfCd z>&zuMDo*us5!iu!E)8;$TRITmNnz58$ZuI#cwkrKO5Qd)Os2&ro=>Om1%TxZMX?&x z8Oap(lI_!)gk07k9}UNM68NIa^S8^Z+3mo|PyTp;!~QbpcQVDe!0D8df-v_<6jFU3 zADDwOYRrGrjSiErmM~veV;cRT6Z#x~?Sl??8!-8;4lpNI@CS1v!Wz(ne=s+H2X;8Q zW!~~P1+~wsu)WR`Wm9kc80sM&mvXfoGh^2;)Nxsu_pF z#I2da;l1YWdJTuSa&k2h+H_@ghmr(t-LM5x1kNQi9vuAjJdx`){FMOm6^_rCvpfx7 zsW*UKNtlEyfGG6Z!(i<4uZuaWB(ZMt+YEYuJT@Kha6{Zk)fdq2)CSFQNW=UIu7{h@?wbAXLb&ZxzcU%*}g3mnXeN2?4g)Zn+AP%BNnW2$AZ)zw0F| z7!7=_Fi^iAOd5IS3A$=#Tj4uDUn{}pU9y>Sqx-i07{v0#|# zZaM=9sbOHRhn#FY;;d!=qTe9PIm;ZE+Yo*_8xQjHIoN7Li@c_1kwsOupsx!-D3w~N zPq84(37oI+XngiRPeI(1GN+->QmT!wL5%wJ^~07kkimhowSa@1MYwbnkSY9P5)c#1 z6haGIKB>t7sE#ZS z&!4(~4i1jdV-gfamASk#Q7~0Ay?S*K7Gk>fP`#~KcnIlB#H%urhPW~~J~b;?FE#mC zHW99eK14yzddm`;jR3Un0?206boIv!?8!zl?h>%AI}fIj+-i!sB#O^}nE0DMEh!w3 z*MG@Ct5ki)`jAz5&>Wn8rUqa;QIiv8zB(&n}XWnJ8k_5rMC~+1C5X=5RC8< zYfL6!LN1Lh7ms?7?Lnp)*AO}oyuMiM1ES#?-_jTgQ#u4lA1asM3C<9B=cLAH<^27P z576U8d=4b*q*pX9E+Jo{L2m`fjq0n^V<+k{MUz3|Y)EFXF*m`!Cac+QK{9^9>*{Rt9X*t;>o13F{*mldKP3B)K;3pOyQu)Zj;8hwBP+B8O)4kV2M zjHz2xCc6#L$@Z21t3(3K|8>sAs|S<2iifv!;L}@Lzl(uD?mZ2L@J4N z4c1K4@tFh=Bv3O$kV(IMB4I{2Sz4I-!4b*`fP1t6PpZF0y6_^x(Ju#(USMdOS<^JB zb`C0o6>0uE-smhNf~bDtx}exio1msHK%7oxVuOEQ(?hD3ylsuz-Z8>@Yytid(vkQVCg+CsQ{V3^F6422`=?9h#9gVMY2X)!Sb>^fF#$Zg@9E4!z=bN-9!IfERLQA@*c(3sMM|LiIA=$MmngC}B>n5!akUb=u(6i9p%A9{H zjC!#M!e0xdvPqH)bbP`_MiSK0u2nxWVJ`jh^PvTazK5$FjK1cplksJ6`Yl-`rqk15 zJ~jJyMykSm7wCsLx`9Oz$@Du9Ju!QX6Q#R+F_LREHC;{ZorYyajH`VHYA(y&9JWyN zO;(4anijJIcBbOf#|Ggf(KZb;Wch`L4aDt#Nt-a}$XK6DkQ|FnCZ;I)Vj?7w>)D~} zck^_jU;(*L(>BZv!btLNe6CrCjaLc|LNQ)5dN~piAI~R1%puB%#}-ECir_F5qdn2& zEcXvH*HiN#o48|TWT6A?`Zxi6bpWR>e2?1!Qzw4FaPvA!#g@)!;E`5lJR}~z7e}}d z02Rhi#Z|lY^e=v{4M`&Gq@YL#xa%TTs28$i>vRcMIvC$aJ49T^b$Xvea6CS93C3!$ z2+^#k#w3anTdh$9Y{QRWRv`jZI-h2P49fQnAc%ag(Ml&_24>S{77yPHU? z_1%Wa@x3&GCRMUL5$L*BkzA};qSf2u>TBi@xH7Pq)ojH;b6R~gXf!_b+6GepTPq2n zOWU7@{7Vn+GSJyGKr;YGFdwu;-e%qG?QEmLqNUOw9oL5X>~cA}s6ss3Hc7g4*K|j_)T_Iu#+Gfhs;>16yee9aiR8sf|eDJ`Hua4O^5})|vu_D6sBX zKwU}v5u%E_Ao?#V3K5WM>ADT4v!!dsG|j-=3^8!aXL*5EK1nC(M~90DK(*zxI%I$X zgoLQHEIdwZ@a5-dA}B z;hILhf#!1@4v0}o$d0hDByg3xBZ7^jUI-T=k|`m=vHz+ugRIEmF%m>HjTwJ_6$Q7f5%k|BCDo7Qe|{Z%CISR) z?mUAusOP#QZB5DXhZ=OcTi}kzU|vMUi`@c$UXQ~4nV%)iyaU00j8s2W7058)gutwo z3OG0hldsTDPx3$)oHxB-rqv1gbtM?w<9{+;A8B||lRh~0-A$^D$3j$yty!R4&-jnP zxr!R0rLxTlC`hRd67pr=bc0e!BC zaNPYHuoEcFXxgU8?M9nAmvw-NAX!QSR2)@{wgO0x5<@h}FGS0UQj`-_*}BMjpVV1q zpl!N8!lYPSyNaq9E12{IP@DVv6#I|%hHiWf*v(&8^x=x^uAwR*8IDAAw=hx0p!InGX zcAvX6yHqwezxS_0M@RoD(o!bTYms6YI9>8&?&Nk%s^6Rwkg*3t zCdi9_DIGM@Us`}|`#7aRKtmIHo`89Z2yP=3oa&wMw0IxUT^E*1~ z>xQoMn6}{-yLOBf_m*N{I_Pxycyd1)n%1iXcFbgG=vTTA3u{vl?V%abUb?Wwr$Qic zL+PnqtuYucA#UnFsE<%K6#-0(fg{kQ2Ym*tH5o3M7TJ38Lm#AkDi;DrVx8hyz&N#@ z`O;ZNI1OMP#E^#XzEWs5!S)e|+soBt;u7()s)Yd7+DB#A)&}NDX zbcK_CFz|$oZ&}YLx*wgS=F*e&A4CL`{g1)!7UYgNVXWi|xu7NOqgXA<&JZ7A54z2@`qap zpM+^qZRxqX$d_nC6L*^aPjs)Iq;Yu$Nkf95}O(`7?5Q{CTj6Msjd1#*t z+#n%m#@&Ze%BKWZyaG0PcXWaZZHe=>ftDn>g6_0bGei+~9`wJY`!QK>W&Fe*^Nv_Q zSO#$rG++k;X1aLq25j(*Z<%g%NWvySj+e|vJH5CBjtfNmXwK?s39|sX;{rH#h%YVP zM-VUvgh6Po%aaJf5M~+COV`2pwRLrZOg$s=g!7E>781%9vP<_$~qwi|g7moa!V{HQ)ZsF%%f|TKCFU11K z_FGo@!N71l41o^Y5EcPYs&VdGbA;#Kl%7Q?qfzQkOPMh3NC-!+xQ#wIx{>#?U*JtsJs`5svmkn0^-oUAy_wPPEe*exT31ddOGZ;#_S~MlsM^5Yml@Cl8hraXQc-Wj2;*==Lvwhdk@QF{JT{miA6U;BKs47@5?2vq?0nCl zCOm!st{bdiUJD>IwMp8c#9^fGrUngT&pZoT)Y{c!yq+`{%YyT9BM@S&_-`Qntc12y z^kMMcvS@5x01dP~wr(TuwF<`2%sGwBfdiH*ZbUhTJq6>gt=ryDiz@5UZI?z`WEti{ zAqwQlrm%%d5*D-gx*NdJa~cZ;Td2Kf6N01B0mFj;4W!ZPafst^JRXtLd^vRVi=jK< zueP6a5->crh5aB0FY1PsC=`RlT)n6c)JcL9n6B_9h|WRo>v)+6nx)d~a>2};*ntuT zP}2rX{@HEN``qRAFp*t|7Ko83@7VamA44YN^-7lnL{jWbEI_!qv%U?|QZ+cccJzZC zv;yYD9hk()TY2BnNzP3g2{4Ish{3Q6KRm>2_-`lFao$!xG~(y`-^>9*D}st{+gpyY;5WJtm+o{oTgQS&K!@iFYeNEumC z`~zCC5pMwKZZfp~CUjahB4kClhyl!~@qi=a2!io2r49hD`evFlUWKB;#R~~f(hag} zIMpm0XrOGZreZ8~Ys#*EPB6m!i90R;CB239aM%f?Eud;b+hN2Rv2L_dVb^;AoG8wf zv1JLtm5{j~W&Y~3ibRAGi{3pkfHtPX6avJ;e80oCxdW#fAcS*=LhKjs2-+q;@!bvtpKqk0sj-wbCw`;feTWg z3t~MtTHriq^5N862PZ42-6!!wE!_H>GD}p(CzVgWV3Srl~F-g~$gGYN5#k zI-nfgZH;i5gV!h4JMlp_@7|DsE%MSNQSQgMc)*SxL!Ol?tb-vlS^x+Eu*o|OqDp+m z3~KMFQw%UJeEd@;YP4|TX$`6~w%*gvWS zs0I*=jA(KdJT`&Y@^17?bi&Hy;N07WP&S1>07Ln&ELph&g+fa7rV>QUO?^@YY+BoY z8>Y+y8fH``dLf}_x`9>IgF(U`5NNqeNH26bHlp~eHla^dGa+TG=B|83gM*r+rNSs4vrDzH*#ZeImmm(`{4g{uSjp8}-xV?V;!W65sKNv`{?M|y94HdF?0wGw_ofP_VPSNPo|`Hp2EyPO1k8aWpVVssO#v=-&X!l@&L+6ESVsLN^u#Clc1d)GDaFK4ed| znVkgPSnJ@{+E5NG!H=EhZvv9%ow=-rKn7~kVqq)HG9O{#CYrCePXo;q=h7cJXM<}LBB9<9;tjeTS&GBy7kpR9KjLz$cP8pOV{g!<(FtXh=1z7xp zCQHnqthAPpON1GHtNb>qPW^4LoW145AA$|P!C|Q$gw!Qe)&xtFk@O5=f~&AvTTSC5 zAu@k6e@6Tl0X;@bW?r(!A6XIygXw1G=mp`UiI<^)EoZ$R1;@po1A+~)c5=Ty2cl)? zrYaatBYi(R*ysq-)U{t>RG+l_DT0yVMj$(}8jpdPh!rzK<<}a)&H;V!s#z2)7u2*i zz-pP7?1vco8yoPlB?`($d=B(#TZE_s%KQkV$5JP@N&pD~(ey`~7qaf;4|SgeWF-_^ zT1YD!IkU0QyBVLlA^GJ~8$k>f_4Hi4pxLbtLGQc1C-BWnZvopv38(lsN$| zi@I1%H-mLQ-w;Rn32jOo1~N-5mU0AEk0-juyf7+xLkMwy%6aZw9_T*Xrf^{hwy^i4 z)Ixv97PdgF^`7a3MC0H)E(t62AF`d#r@0~VU$Bv0KzH;tFreHH!wty+xOM-eDj>K) z4a98+ryJQDp^3C2(CzR)^f}m-YBbw%Q56-?Yhd0l0u<|qg-(MIFbe>+V`A$t@N24I z;41X<4EaUHI2f(>Olkva(Nsm(tN+}C-?S+GvM!Y%`vP|;Q2(gNtz)(;X=hA8moq__oM5PG;1dAQpg z5^h)8p9zyMnlN?zE71jQQR3vGVqhi>n&C|0`LiTQIg|AV24G;`vY^S>$Jip2m)F`2 zk)+QX(uM8*BhXI*w+Ovz&?h{CNIn%Ph#=#c4kmwc?w{aHu*P$<86pNv13(dk)(FKS zr*+MLI1Y>_wlYUU{p%Lk2(MjZ(R&ag&F~d)-^VZu2B$V?#81CHl>5@5S02NFq-c@;H2?&tS@aP zpapEpV_ES(^ap}y48ppM;k0Tz|jIq9N0n@+RH6-lmqY7Er-)iqWYCDaUYW`G?%~ps2RcbZO12X`o;Ox-m!XuzDPO})&27L#FfoTVs z3%L4jww^i#a#P#1q!Cyyt$7yCN<&)aCY+dog%emh3i@E!!pi}Y<0ms3)^VL{Tf03{6l!J4HM-;GkNIWnp;46X8T!#x({lI*{vgpf(j3 zOh$_i<`Zn6VKw0Kj)M+dsg6UlZa6!xc~%3>X~4sY09d73iGf~A9EP)v6+#tE>1!G^ zo&F7wpcgGXlW{<^KoW1-f(fIo%YddH-bBT>(EgnDU}7Yg_?{~$Y3*PU8$A`BK# zHqfHOr%zkxc!cvHn5vD)!1~k*$R5V#k4Tw8B1P8|P%MS&!(MReJTfm%TR(iOskjI5g~NZZAAaRR3kVs}{xplE zz!#07^!Qoe9663Ksvg2XO%TNPX_{7d082|BvJEBV_5%pyYv~yCf+J~^4~3?*8)iuY ziz01t3#}irQXCLJrP-n>ZX1h6AzX4GF6hd@l5Q8MMyntF2&A<7!Rmk(-7<86a)(6g zHPi@k9WucJQ|3BPsVmBDTuHmJG3JBFDM*gPlW2jbgxU$|z({&C2&Duqw|z>Wa?sQJ zA8I`blA9+bv;Gc5nWWt67VIoz7hJ~(k*9V8=<+t6g7Qw})@lO899nyma!rJ*r0y&o zQE*})AvgOFwi{!nEz@}9!>%lGlo{AUjkX-RxCc=cA=MQQ3g~q-t1?0bWQb}5VZC^d z2jLCcQU&u?Zk>@<+lxz3VMAFH>z4+>S@&3%Chi$&z?lV%J^aRl)kB_|nABCa7&m7f z#g{3^`&M1SWu80{_xkfl8Q6DVS+g;WT(aEU^V>t0x8cQjgDQ9rQPBhQp`wTZigU?` zfFO0bi=M9hqr&d1$k03Dvl|73t-lLOjTwGj&)fX+b z=42@^Db{SjqmF~^>W}9UvP*^`PljyXc3=&@r`5silo}wcs@{GzZy*kyw#fjv>^W%> zHt+0%Doymq1_8E~w3n2pp5CqVN=u`Jp7*%NH{$BvcddDM2cSxqi-?aAefcAM>d%;D zjg1Q|z@wC7Gw^&w{#5y+M`g-xo2Fpk%bbi)y}WV6s|GdRx3aW?Lrr?S*iRz&2zF z^R;^IoX_W^0bHOlFuNJl*Jc}r$S#(be@Rc{%;07RmYDDPu)E4cJbk?7I5t%ylMhWH z*$eS%O&VUq^q#I0O!dLAeyF|6fXW_+--+KYn6LwnMkOzg4MRA9+#svUfoH>vF0*HG z$1x{f;8CU`AMhxt?$fNyDbW4VU~-iQHh};arqFg4yLV3g%khJiB1e5tYw_ zX=%3RvIk>%a=FG8tTE-%_Wek_@7av@vM0Tzas_6KsgZEQklMcI5pmiPSZ8f*tEP)J zp8IQ;K2T+I-qf8z8*x1sc{*TL=Gh0=cxp%iPjrHOBZH)VqW+eLSTcK2Av8yVu`~2D zmahm6H8F4_NWeA2aQvLKWc#Q&Ue57V!XH90o=bGpn*~Gd3hNJg>}e*mqHT%OR)4ZX z$Z>pin{1x~{=izGV{x37yxtk+dvn8PBwbPI-dVALj99pG^y9vbE_A|n;R7A0#`hnriQl9_-2eT!kZb7IspH?5^x-yT^YCW;Ct^P$Ncv=0w!?w2k%uPyPUL-*P| z!PTa)XUn?ojixyOPDcs~*3p2_PD1dRKLE7xzyE!j1F9COOiWs2l~2itH=AdWk#aT9 zTRYTg8(2%^gzplGd92IeLGKewb{1*|F2zu&niN^3R&~Gs;%Y$~E+T4C6Oy@whud#Jari zc*|>iQ-_Z7h0RlO*tKh?oprw8mLcFDOlLAHXZLJJ>7dk^pb6ABx#xRpB%zC(u`S% zlMz3Y@+qwH61RFfZBLuk8~yax(IplOU{+^NL7UUs(KDYeLx>{?uB~Uyw>Vm8rNXu9 zoEKuZ@10g;ssxsg+ELQGOuV@yxYtst2p20&i+7}LGWhP<72gu%%RIvBpCQa!5FY;u z7)HL5!KUb`z{)lOZsjd?)q0g=T}sO}XN$P-Lyfscow?R8qg>m1rd8TAx*!{c-}w0m zWm+Wg?a2Uq$`^Zj4n?%;4H=ZQu(z|NRhgwz?{jv7tyiRM7Ys&4)HR%0)Dr1|N4yUm za58wMY&Bd5#-GqicR^?flLj3X=5yL$H*Epb=m zxX5K?ou0&^O zT2~VUiQZkqNT9R0Ixv@MYO6l}VCfh?-%)T)EG~^@mD^?20I$5|dk2yywt^e?*07;H_g{<2=AvP1SyTS#XQ4@*((PH;K#BF%BPf{D~UnL;qN5k zKI25V#(qsC2n<=)`j&$IaC+|)=xH7+iN%4a1f5$4=fN6C!=sWm}P`5+i{uR zbI;N=yV%s*aIh$TCNslhd_{z>gW!EqV?Y)fC=+%jY{8kAttoGd%8U?)a6Ot~%*Zv7 z_xY1OtwsH?H{!blr-t;^Z=RLMDvU%b;-3)22Kq0`z}Psi*eyn5tik5O)mr&mt!PtIjMVd1# zYIsZM;m|F0JmGCk_Un6@%LlTktxl!f9L@er-mjuz)8^Qlna|55v#zTBxaWE@9-oov zlsuBk8$is1ZeKD#(dCZo&*Ps|AUSt4UZv1EDLR#8BV<+eW`j0cfIl=TDEb=CG|O<{ zeP1#5Zu7|Uds806FC?OTE@rJJcV8rQz(xcGv9e-o3v$`IlR1ujvoxmiB(e!&*?|l) zc)c{dR7)cnIpuw~SD$*V_5b|JD0iu0H(N@beZyqk6TOi0P+obkkWIy=NR&{3^Cw9I zg1*1x49E3O2oP|ugnO(v-D{kSZ+hpbZ(xvJaQuahwTfp6gKRtu1rhSjA}fXtL!Xw{ zNWpcH=6F{=4~|a)4X5)f(wr~nraDDx(Bd#n7zWK51c`T9_PtaBO$C`@5Wh?)r(;hi zyO32-F`>poQLdh}%lLj8Z;k#n4Ft(FtGDARiP=1yXfoyWfM6>T$HRq9t9g;Qtk$hV zg=oed*E+k+W5H@)LC?g>F2I%bQ&hSQ*Z0qTVPrxwc$1RZmgf6|bC@s>@K^nyEm&ig z`L@%R7Pr;eb#baubo$7A%MF)wG6bK`#mJ}0%#Y?1#G~TP#%$JS%V8GwbvmjFkj-Ju z(z+3x?k`!IWf6HPtWkTodzZ{hG#U1i%Wokink*S?6G;IT1Up(tT5BENy!m32A5HRp z72?p!DwK#K-LPfS^19x@^WSA*)4CemRha4UtR-4H8D!mS{as&8dJ2L)c3fVpC89w= z(KKbC*6FSs{(V&VU--yu6E58%dsw*6sc0UvJF+TEE~`csSzi4jV}yJ*!(WSf7pD5E zL^Sm5_>-X=rHR0)GJM??p7M&ruOU00_Zo{&2wTy#=oHf;`U_n$HLejDkXfuYlc*7u z!#O)$r4*9X#&jD4m5K6qA2mE9NLhX)?_V)c?a&tKTTKU)w5C}LeIW`rt7MkUb`0sA zQKQveI;Sm~8;*u@%2jkpFrcy^PcTIvGs2 z@ZN7rOy<5qxUmIC74)*|9NG|PvxY@FSPO%~NqN3*FkGF;tOy7C6O3G^REky&F^-BP zj6uf1waX&4ge+}&<(=iP<$tFuvs-aykk)`W3Bj@CuaBR z;NEUpK~$bAE@i)@FkAD({O4;+y#`B^x^8BCt@?4@y5CF(nH%%0p->LCUYM)`4TLF~ zy`hKVx~JyBwe;tBZrb-YE=%zqEzBHqyNISs&Xy%jLnLWzimT;6qm;*aTRf2wnNFjL z(?Z{xRepB;JY)+ey(~Hv6jT=5ysCrJt-QW0yvfi{M|Fl*5af$A;)Ir+v|OHK+-5sTRiA4MZ z6T>DV^|$9MZdXmk&yPAcjPx`Y1Rv|DhXM&wt~Ujk38d&_1+sj1a@{5kHi}F99=7+& zMa!$xt1_gsY|eWK5c2z0b7`o9Z2KLa3iK8vF>$wjTSq}s2p^?^uN6L?2c z00^jKcaS2xJHJX^Stld!#F{)f^aQhRu4tklh-hKwi><+bUxX--I+Pj|i75f;->V?a z&;{*GCq5^d?B?vmMaGEC5WQJrr8%?k8`?Q*LWu6+l8mwM@r{QXP}%h7z8#2htD0qy zxy+NIS1juFeWh0NEv(#ka=XbNCzvfmq2oKPK;+yUGgr?q3qIo!|!BPmDxq~wj zWvWRS-33S5({7Gg@rbf2nmkxO^nk*H#9`uG%jWvZ4v zTF*0DEwL~zHx5);_D#eqjOc3mM9Gf|h7x7%B0`iPF9Zvju%;2FjKU~(O)}doQ8_;Sq&Aok&qn!&+oV z5Y7BqQBG?@+tb5kAzd!S3m-lsDd@t2y2;s8%8lmq0LBnhU7}fGJCqX(SUCb(WE2u% ziZJ{2-{}bA-#BFwCk1sjbmQ=ti^8<(+4KkexUPf8gq=tau&(?KQ2^mP1l1UO@PZHs z`VWVg$Z7e02C1nSB43RJ)1v;O#QmX8#pO&J&!Xr9&L5gV-m$|a$1YJY%fbQtBwiUT zh&nx}AH2OXz$Q`MwxI6m{4p#OD0O zOTefc1c+6%R6Q4AWeQX+m$++|*veFx1*giq~*O1v{E_vajIL+iE7&+Vr{InT6omz*;VQ3e?Cuq0p|y{ zH+08FO3p~A@d+I589CF{gYv{OgLaW+Vl$xaFo%eOD3oXrNxI?Um$<-NpbvoTBa+O# zixR$u4U3$fvpM|y7WU}dqESd3q({Nb29pvW%|TQ?pO%=CT@kF2*DF#*u_s#tgWNkK zolSx;fENxGV?pKTiqM@QS(OGeronaDSmyqXkDCm!s#Jozmm$4>rW5&sEhh>unJxTg z3^h5TySd)rGDGH&W!U9cr;><+fR`FUz?huRFxTDo^pJ`jFLxh&;6Oobqm59fV(M>& zy)mBA=q(RwE{3TM2-jJGzqWM4MbI{W!n4vyf_NcWfwMgOb!=g(_z6^IQZYPQ z2|m$}R%)ZwDeKKzm&t^b+F^QWcL6StUIhh4(VNq#CT~9It9aTT?CEwo5o|fn>9^}=%ctx zg~ZW;OX2(f&}j=T63dq*T{L2^Pt{W==_bc%FPV^zyf0qAIO2xQxY5$*<86 zG7vJ3jm$3@@bkr|FFo~?ei#+=(T-s_d{_;`2r`EE%**k+<(lwytsUi)WtUd~?$F*J z5Vtz?Fj_kaRZ7i3qb9-f+3KC~0>dINXj{>&aGtjfS3+TBDq6YmFSaTBePPl&_XkLc z`+*VCaa<_wRuAcgGU6ajdtO{BApSn!8eFy0`x@f6#d%&JL z_fBEY9nu~ZgO0)&*}&ag z_pMdJzvEwE!s6xu;j`9eiT`+n0%}qy`vm`w=Fx1tGJ%_RxmAn)6T8v7o=oI z9D7^vchBV7Fe!$upc^MUQ~W$I1Ba3gMSi4>2Tx7(WE5PVDVAQ42Rcor<+qZA^8WJ4a{>T%i1mZsdt@ zI{n>bE6P8DMjA{s&CEJM0#R4+y@U#I&f<@UuxXU*<+Q2LUQ(yFH|XF0`_`?j^@%G z9-oa^78-YkZkhhIR!`P-vGv)y%HMa2gD`&PZ@zk9e{xQl;PT?&HgGQ(9G#w!=jUY~ zh$qD8FN2egjsIond_IiN#)v!=uu}c^oN^{xP(2(@-C8|r8-FRE|LX{f3NWjr-cf(t z5GvUZo;xbUaX-KlXkm8P^7Mza}JK;bk8?@9XMYF`C45Es$2~jPd=V>uSvdw)Hge zi});~7!B`jydM{Xw6Wy(DuRprxUQ>qvNN4*srmRZDg$jxlxE=cx&}?>cHy`U^K=n? zx!JDD;OZ4CbhYW#nr~{9{7H)>{+`G~#&R3nvr2{MP>`3Pj)41TmT}xir`&{q?yHJ? z@f(nj(XCq0zGCBjXMO$i7gY5iSi@py3pRQZ^&8|SALExg=OMz;3@+=*NrZSi^U7Oh zO)Wfpve+cz&8MaGQo@KArC6+s^ub3Yn+&Sj5Kos=W&a{ZMWA{2Y{s*I)1hz4E3PvU znDN1!-x1RIz@;W5hi-O^e^CROVdTauZa0nCk*@zCbm^`&=E!B$!4t}|fp)fIo53e` zo1$fI%PbwC=7$j7g}U{t*~JPIxbk@U`>YuAT8ZlE^tLD&=ajq6^aE(vD9TqG!dy&tN9iBiFqT zBb+|>+mkBxLF@??S<#B5sy`$KITCXUOy?I#7(*+qx2a`mFkd z98m$VHvvu<`r>X6ytmBo&*j#b_nbLCw)DqW4&QB1 zQL`3mT%Bp9Y1Nt`;%N5=du_Z_=s$T_SXj)m<(Ft#Rd=ph^n5GsQL9G0K9;N|U2SYs z(R${=(=6g{e^RQoP(AP;C10Q$`W?>)r3SIMK=q)9!{wd=Kxh`bYAVtGL~S;<0n-$RKuDgRjCABvU8i3k1V$9>7Ma_J15Y|>yPzY1qd5j+*eqoe@<>YLAlR*<< z1Y~10dB$dHTe@J6dizfh0t>(+<=0tc#xQ|{{=+J!z|@4~l+Aa99@i7cRHpKepF2zv zZlB}{z(3U04YNa$f%nVZOPz$v@n{o9!U5CBn!M17ofpk9Th-U^sIiw#z57t~p&$4L zf${j#V1&u+myQRMjgTVMnGG-h*0|3euLu`w?ce4U7Zss)5xzZ~DOD@A@NElZdhlmr zi$7yMah7U0PBo7lsgNB?-T&dhrH9-_xQr?Spd8O;k6V)wHivG?N)aKC6@Oqx6)`rB zCZXou`MM&Ru96pAKO6hVNdsD~k+h53ZQ{L!H7Pxw!xokrrGD@Roz|ciE#&BT738~S zis5$=+V1C(+vzsM`{5Q^LHctylM%ZSN6=ywVzHEHq)CDas+aH})Z z)9s$jZj@Ohtf|nuK-w_kNn02u2syeyriE}enTLL(w753f9BW1X>_wWloNosMsGefU zy*^+9nbHM|eacTLGWX&H_b;hf&2!e$LJkiP^QZ!o!-+0V&O}Xye}%ODY7Zl3mw0>r z$(4r~{KIys*4+8#OkTCPsB6!$%+vVY1k8h33%PF=_#*=cVJ7uoV>b-oX{;0>PQu$> zsIkxHb+&Nb;KbA~|4y5>@i8}DK*ublnri!Cs@1X*q#aR(9r}A6NnQ9$*S{u@@9r?cL!Vy7PWtat(+a4u~B5~45NVt9Ojgr61g1L|jKJg8ftKhIW*!e&& zJEJlNj^9o8BPGby+Ae9$kB?ilkFPq%`V~JWK7q4UST7t%dqx-u=a);!i3Is=wxAaEPi%oVW?Wksvf7nItkg)J6IilO z9?sq?l`O-M-GL{*WOmx0X)7tS^eYk~@!0&%okU>YcPyQpA70~1jiP|TQJpo;87(d2~i2+s{RG>?S~HRpwJe1=ctt1k~mOKQv%##@6l z3RMRZI4_M(kFP-Segd3kvfyMcYo&sG?V5-OPE**zESf1-SHC(VuAyT87^daK!MWHl zsQ-+9>Gva$yyXS)Ke!_jf*M@24$a-Y=1!yh%WP%rZhPo3fle^Dk0(F~FA66}@*zFm z{mG?E3yMmyyPl@RKUt28yM8$MR56Ak#g-OFaVg0i0tyu3nq4Jj-vN=^x{O6TdZ2)Kj68%r1Bfra_x zl4x0mi)xcG(pzB7_>_ONa)zM!Tps>*ed_%&34=SY7&f?H*6qjzLx9VAnSK~T+ZH5# z6B5#g`E@4QoLv_ELguZPOc$YNJ@=3UPQNS~4}h~w=M4iJU5dk!acpTJdlfr#G+Abq zX*F($ZLCBm3_~90NJ)PFdXMBiZ+H4;fk2oDOfLr#@Eq(8KVB4Qa#4#QQrcmi?!*dyTXhlBAydtv{^uZ^F~k)9^$Gi-}LW? z+Yys|g#SpPf`BE|_sdh%J4Y*kyI+o27_sX!FKvtneJ7zi?BdH(WFU8mNu?(og|O5a z6~A?9GKU5HS{q|baK|~|H`*xP1LA7)(M=#^we%CeEN@3SjCJI0guvL-p(6%|R|(vg zHPU6>*FyxuamKy(Ypqvj7v^IheO_S#(lEU3;`{-B{3b&a$#g^S_Qb#U3cB#+=M`D7 z*jp8{I~-MXFdEB~DJtH)LCSc~mt}PeBNx8QW0CJ1cecxCiqv+aeBp*;@mvsKmd+37MXbX;8)IoD>meSJ9O-&m`apPPNITE{{HFeq)R$q z4)&xIe#c;sIL2|_$vydR{AF`xs><1t**SXhMRzzCc9Hay>-sLSGBddV7~RLxYPd!7Vi!j2pUTg z<>~gXi%U1g005l7{QVILy1Ws>HK0$!u%Rp?KDGBoNx0?V_NX@ya1oQ25*9ed$5q1U z+F)@zN=liwj1!4VzV7WFf7fk7EDLLy>QBan2AnQY?CSp`YvL!*a9i>kuhw*mSO64- zKi4SCw^1H&b;>M_U+$^{pONq_pfmO~Ek3I6r8$AM2fVHJI=6_P1Wb{lpC`I#PZt*{F7bw+Hk@oQ5b#~{ zeaW63m!C#;GxzTsrA~2gwy*w6LYv0hY+j_L0dEgO$k+1n9r`D;M;lLQHbTy`jT%vK z#V~Parz@O?TISmqlqHtiVJJvI!5AmfUarPmWq&{FQkwn5_2eNOpt*}X=ns%m?rCKC zDOd)a$<)=ZJ4f(3fLP=Q-nr@WXBQP&EU$i+ehlT`5qhImxTz$`jRw>au*XtDygtZe zhr*T5GGB$@eEal%1v7&#j08on`wZc4Zs`-YzOIseQ%XHiZ+zEq`}Z?n(9Idbo^)`w z*Rpe?xCD$X@%(XhB>-1saKQ=K>Q<|`{kCw4^`WB@mhb^RS#3`>dn{@(F2m6((}k}z z7z~tFi^H%o4h`t^*(&AT#)B9cc)nE;8~m!TB|&m;b*1Um+3Pa;7%|4b%h0PN~4lUfNy?S-xWA+sIb4Alps$wj1zMvx)t!YpEAD?d#8(V z;rt_^CYmL$ap!&~Vb(7}8((z9Qmq`ca0AL{Vdfvc+pXFk-nYHZHxydpbK=WwFs z7e2^B->r3}IZLQr3_cr939AmFj0Xhbm@jkVRi z1<7Y<@Ibo|=XAB@o*%pJs07=hM8=x|CUWVoME_d}ZFw3s-W)!5MRhJy-4&1qXS%=I z?|+UvLy#N}6*#}dgtZ`7EmkYlEshU<+`uL_rC4>E*qi3;$6i>FJTnn1B+BkwM1o0ZPFG& z&<}zK+t1{ZvJck=_2m6Io3I#|W|DlUTI2>4Ou;_6l;1!zH`+jps>nmI@1Xcv6VWUd z(;L}myzos^487I**Gd58knDVuiDu84sNy#X7_D`-oI_lRZsnT#V616B{(a0QCelAV zK971EdpyTp*ennERNKy3Nw0{z_x8KGAr&mz0mTGTxV6ByJws50YUcIJMdO<)b)4~6 zlni8SnP#M47f)iN=@cyai^uO?lc09P2=9oqv9GGnmP{D#c^0zzJPC^=3 zYH)>ze*a-3DW(O9#!gyZ)tV-oRO9Oq>kZ%*X4eNY4wZh z?T7dQs(^liO*0ijPeq4^`ItxBHetU%#s$wYQQn5vSuQbhaek)he#qz|#J7~Pt(hM< zE_!XiRGmh$cl+Z@S2VFABZ@rg#l3k*b$lKoAr}z<9f(IKaNFb|CaWr&ExEN#AzzhX zqIOiAqcBux5~(R&ZEo49KGmwx4+6iHP_RJ zfm%k{180fGa*m>~)|=aIcog7t!S}SKhi};6`5u2j|1YAXN-1iY2nWrk$f0(BK#l=@ zj!S8BD zI8pzX9Qm@d(bz1ku3FHYmQY;vCJCV?I zxD*q+D)z%_!Y_(9QBE*MqrBYD6lr}+G7U@eVD}}hda+APcUqay%g>U<8Sm4A0eLE(7wH-Yk&A8i82=P zcCo<$1x>2Jjt}&m$31dYP63Os#cXvL#(64iJ04tCYID7xnyee2-hbm?hE*@nFu0e# z;=JF30pdE&$D`6!0`Po;0ZRrY?8`#*K8J#vTGy)wqOFdjabtuG2&+kR@rv1dvg@2 zoBFF4D&>k3Zo#TWtW=-_p<;0Tr>}@++>r#RZ7zqALd673ZQ$@(7=eT3p)lK%FI@5m z3FHRbrrwP-w7wpisx!V6#5f6$jM0E+2K|5F1mQKMz@AfWzlUCRHS>Q(l2~~%uv^-D#8KOtv6b$x5vZITnv;3bj1Rzaw5BCeH^gb^4i1w{C8)N*-pVGKrt=2%#tbZsrB~NHEf==g4?Rq1Qc08c`Jbd9o+}bpy7E zlK63*k!O^HDtXO~jfY9_6LO9$^3|V7SlwG$n0)Q!;TD$2XRJK)@gFf51-Le3sg&_z zof_w4ysU)4@>Wc(&u=esF0B(jc);^GX2Y3{DoMg)-5v=bze@75NgoTsSSLwVrS5*9 zf+PI*st?#BSagY#Nl95*Sy6Fe+b9Gn|L@fYP!&9ykgytJcXzWDsqzb`fSu#^o^0ruUf!cKfLP`78z zTav?PVz@BlQvK!|7OY|B5Bw=R&Qi_xP?h&AB^i^rk9KUGN6s^c}`5Ud{{$CB1-TNA9C0cuk?D@Q>`Hcl?zv?OB&qxuU@sopCddz zP=H~Be9ZeT9d>TV{t5SVeVp@@MeJ{j&T%YYdmH8^tZiq7!BuCWcUmgxKEj;XTLJ<< z1=eA&*D#@=Z=U`Cl}@>PhuYJXy_b-W(_8+a!j2I(!0{R$a38gyX|IeN^+o=_iR8Z2 zSQ=-m6IW@J9Fu^vYkmV@N1DC(LVdqCR5Sfzl$^r1yGGD4Q5`27WZ9O5-ijqvz%d16oU3b*+GH7EJsFRx-D=vML2T{5BHCCDoqLGtP?VVY1Z?k5Y+hGH!4sAkqNBURA%3Gq{)>0VDy#0C|Bl)@_(9EY6%QUC*k`#YV3)0}k zQaBF>p2n~>rE`Cco6Xi|oT(@HMyx z_6R&KFPg{+>#Hnq#Inyn{O7 zLSM(`6s`O9$bjq~JNOrSwObEK@ob*8@`&Fm7OXCzzBcX*=F}0Xx|T9LuzQ(0*vmID zkgG#t$kc)XPQA@SWpdV`Uj5iIUFv^V%d2S|Q5~UVAG!pLZ9~_uFRQscKV#qjV+RdO zn1?>+-yBnrL(+6oFL22fXynPu$KTO)C!Q}rF{>c!R2TxGI z2y(bX4(2l29{;(W`vaGDD0r>fePlnXtDnJJhnt#ln zO(5m-(TaDqK!%&gi*1pP+zkA$AbUiLC7nk#tH0ONT6v;9>dRp48l zRwM5}4~?Ur zO4yp0>MDGog(1^4+$=FLHb<81mgPp;XFoP zffo*TF9Lb5adJZ6^O`LeU~h-?h7q%9-?v_hXfSo~ad}+-ZuR^{CixE<{&6Y5DNA3Ss4{lEsBE@gas3BziDrpl*h~gNZG2jDj{%ir z%vXG|_`Q6{{L)T7_DCx`OY*h(`3l5SPMgCyK7t_Hl8lCZWGfe-ZN-*ce`+Z96F z#(y4oltJh8?On6IyMngh(QZPSIz3CvYFo(S8@a@>p0>mwc9O+Kvc<|wsC{?o5Z%$z zglUWW2@%a!%oIyy`!)+XjsN`)T|k+3W#WiQj4N!~cSXZ|`n>*gcY^tH#Fif3en(1s zj)9oo^~NE)Lg|D}PELit0o^=(&-2~g7=#fgpZ53%!%>pCF43xTrRhu^24d+whXB$8 zLpEuAtG6u_!@n=vJc_cbv+Zr(BJqN;OfvYPNKca;tCz#r`eIBxopV#PB!)>pt5QWA zaQ|JNh;L1wiritPhf1^L?{NyZvM@I*Kq_GYj}zwoo-+7;IuUjvo56GOxXP{?U+LHd z$k`R|3N%A)P{DpmMW7j6IETm^ZJl+%U5S2~On3oohMew=Qnz{+C5q$cdVc{CEwK8` zsz@b@jyX||CSC5}Rqgbjk}w#*#sxY#x!~D#CJxZx@dSCT9m;Y}W>cky0f)EH+CI_& zUK$fXEM3q?WFA7g{(So_u`NL|&3+U|`=jwH(aY^fZ7rd}b?+;M$X`oyQOZ+<5^_-~ z?9&aP0dT2h+~YQv=e6DxOTU1_u@i#*s6SQnyj5NHFRz>Ihr`Fdr&aG?BTP(L%y}XU zvFs5zIX9=mrXsKB0XsK!z4+vtjuIk{P@@D}{ynC7G_X!2; zb4oiTEw^8Hd+SQx|9SS(s>Hi$`Hmw<8`DYwUc_4Wxe zc|fX$3yd{^@u_9#RbMmlR%C$bO}yz7*oNjH!iU!+HaX)94D#ix{6p!^MJ>d(S7u#u zZr5ZY@yHZ(LH2#eR-z!qXo3^RxDk_-O|-mDT|@umK0?Q~RHaG*^RO+n`w1fV=N_tN zjoxd09--B@*4Ax_+yRVZ!y#xaVc`B?4C;i<{c!=VPl>F|&RWU#pj)+zUWP4kL5#+0 zsjdKBUS2}l0L3@7;B{2@iIrxTysZ$wao9QB?YL(l1ENN87h8h+SFJE*G47=WsJDKLn z=N_3f_S5~-FQ+9moNt~kkZ%H4b4=P2l9%y-KZMiJjU~<4&nYOp^!l@5)#BE~>~5vn z>Y8eg$CmPY;BovfWY^DF7Z<$?RC!FD*WItHa!<8eArxS&z3m?V`FiWA#_Y?-^1SFU z^_NBQaNA%&1LkA*LFKl`KxxC4OTfF3Z)<@U!?t-|y;*&7!>~I654Vrz3no75uc{|b zDdrxa+_oljSWk9*xS+@+l82=fEpT2nnO)AM8;Y z;L3sIcrjJ5MLGVREy%_UZ9ab zpH?ZI3A~<+bK}I(MO%`TX(JP+Xv0*uX_R-8{3Z3fkTCyjh19PV{DNjNO({fkJ}G-V zVUv)M5Q+zOb|a~nH!*-EFwS!atHBv;F)BnXMt>;oDEZG#+~aQ%O!)C`jxF=)B|lY% z_Cq7YgC`9c?88|BcaXvu&Ad4ALDoIuJ>n<5d5VrLdL-1KOK8;4Lw(=TvKrNJ;`0f=H{ca3ZEmRz*4>dRsp7Ur+8a6ft)&9X3u<`}Y4GBd(o=E-yD(4uwM0RgggFHK;n3}0w}}kI z9&NKvQ!LqH7$n^#`iqOBC$l@aIoYK{d(p{`rXV@aXk9kJj0U&SP%>SP3TgjaJjKH2jd1_SbB ziN))5xT}WnfJ|%{ck|6j=}nj2tJb}Z00FiLK(9CVGI#HmS?zgGe1}++P z?s;*HJxD-8l9xteBm~Xg$!x7fQ&}z&P#A-YJH6tjSbn>I^R%1L_(GOhOsp3)Gvrk+ zVhRmbbL96;?aDHEjquNVc8Z@N7|^!Rj0CCN3K3pNLiGZ}PefQYCLaY$P+mr@cA}g= zwu$})z}atfp_8!zfru-Kt-H}GnRRY^()m-8)X|}#q3i23N;J(Z21%sG7vB5YMqIPkPv=C2?V4FE`5QO z(2d_L?E74+n>}>e_Dnq{HBPd3NG%)IxOI1amid-sQu*gXtyQD_4yG{D)$z=e z>Xrj_;WqN}*%D9&nj=~rOvPPeTW_-PO;HQI6|aQi8e$&vF>m zO%(X-luUA(&ww@;0?R~!=&%BXhsk*lq_rt_2VUu7zRC7)b;I#p_r&6bL?gv^cpKzs zCcy~618z7u;dCC@*fRAhr2*?rB2K0y7GPcPo%g!F`QKjG+H1`iagTe9ITu(% z&Mx2LK0?hAlM6>8pO@?pm2;bG$xWy=VZMQ4UV81R2a#U^jL2242vHSXWZV|Q%6aSK zY(*qn@W4hkI9rh>S+>5ePE<@xfd7Z4{e$ya8;T1ETJ4<&{^YVOW1dAUt1>#Rr5(0q z*(l1JN;C!bp-=BBZjAQ~e{|L(WDZ}&9vz&iGXx>-{iNw<&OZ09U-Q3kAFv!G=H zbeI)wATOj9W0p9j6?W7>-&Jbzc?`3Hv)u1Hh+p#;_1JsIdjr#qet(0C6uplgOXrDG z7}X=lVh!6Ket>&;GSBD}x~Vb?32<|9``S|uP+V{1&w^`iicB_5BFDEmTkeK** zZ|`hAd|J%>5TpI(D}6~9Oj!iIBGP4-kn`+^aCsvZJjN#qwel_GKDE@`C{)Kp+`m+n zoH9UZJ#h0aYDGakqNe^ZXmDw_qN80W7i^m-#j4uM%CE7pH;;~d_cnq(yNC=f4_l$E{HPo_l zJ#_eUzu;j4?yGS(P=dPirYweshlz#!d~S|ctmmt9cwO%k?J*wxCKKsp^WzKyu1MEv zD>}Avn+y!X?ccd!1y(yz#L8y;uGif@AnX1CZ02e7_+3B@9-Synncb)JFIxpr=Ib-;;oh(GXDgE{6be);|VjtxkjmLL! zC_M6ssOxmWop4;g-4jg1r$&iYG26&~87TV4rsGO|1EHkd_H^en{Y4~|%GN;0b70x1 zQ?9O~tbBTVwt0H$;P3B`fq?-Sc&!>eUjL_!T$=GCeh0IM)oGZkz8GI~zh(dH$+M9i zX75)&kmSQ+$A-q~85q>)lN;Y1z^VObXkGSCAH%_anbY@?I+5Tq8fTAT)4Gj~4Zwli z-rk;`o_gOL!@YWSdv|yDaJO>Z1*Z)DaZPc&+Ug5FJr0_TOG}f|V@{peK?xR3mMxy% zGgyt4nf=QFFv{cS61aEzw$A}aqfX`95`zl=3d@X{kB9(%P`*071bMtL>EQVIuQQLK zp&=r48cew2oaCY+O6Jte`1tOfi;>}BQ?_)Ss_N~-|I7_IYkzI17&fv$gZtQ*OeieD zp2c^@)`7difZ zpR&ae`7b@q;<_=_SxK<8q}d13`AZXO=2dT?sIda?J5e1G!qh{MLbzJ!C@zJvSAiURbp=aDEi)WNOp+c3o+v+^1OJn7=!sqEFh zxoG|;Cdzs4At zn5vAx^2MrGd()vEtel*4PQLB_%sN$b)6>q2bst7Y4i9bk_}bCm@*=(pT(Su%HyycR z^6g`EU*D2Wua@=qG58$ls?hRO`<;9T%L-NhB_$`9gk!;e;-^#HvQ1mZ z+KP;TjRQQMR-ZZ7sU{o^1$2*^_j2@IzDgBkUR_TlIRD7pexF#o=F-wq!rCw|FQ4IG zfkp;;?sl@OAo!Dj-GasKa3LCykCisp{h4xwOin678pW(K%}VREz7N-pwYBBj zw}HLuaVa;zpgf0mF4jCYqy2v0CnqJ%n7xyy(yg}NWH9sm{`PTmG1-14kQ;79qb1(D z_O@X8tqcWN#fNDCgz#?W^8xuB8fL5HMBwn6%FE>L?WRwyk8jI4BEZBcmV7_3V$oCS zo+0R6!vAX8X6ZdEN+~aIL;o(IWnYjv!ofwVdzCd%S;3#^MBIkZm64H18J5S#N2~8B z@A^TGj*hr{bF*J4DJkP5(TVxfJjR;Ol- ztgWqeXiU&8I{8{dYRAx2mUWF&+AWOx-o?hL6GHfDXP>&&m}JxsWz>RGG;`|2DmZT6 zSl*OWLY0(1|D>JRD!WL2BW1b~NxfPiC8{qR?l7M#zhAU9JJvHwswv#@$2Kt;HIq`w2Ti3FDU`HN!>Sa^GQ!=t(&v*d~A7_O@BFL_Rh>lLJ z8-hkyGJh~@<=W-<+s4*56obSrLpW&63=Dy0?cK^zCJ+mFHCRjq&X`{V79-WB%kzSI z(N6GaAPkd&n+V+*`8$2xhY=uhOauVKYNz+|!osOX$C}^6*kd$<=I7Uluc~yLskQn> zeMOq$j_S?EtQPBv%XQ|f^<_pB5L{ecT^$`+g~qdZoCj@gU zZjPuJv3<{(TEEP7xzO8dcEN}f|2-z3KldLuj@@kk{zu*m!oOG`o?zU!79iS7mRH-| zPl8cE2CYuPBimN&6YA7p1Po&N{WJ_kL?k4m@9@;n-8CSl$hy1OL3s6wh|g_wHOKGR z37F+1Rw(H=bNVO}p{LDQAwj1tX(uNqKtqR87VFK|puWq1!fp-5Z*4Ezca53SWpdh* zgPU!a&3Mb@sVTex`DRP53Rh#%xWuJ{vO`V z!#oLkF>}?mAip^i$BsZE(>V&B-``udA71s3y&P+HbZROsD{rRN7Ttjra!k5hJt%Mw zD)M`2Ygl{T%ffr_L807(x^K7<2`=15U{l|UtRWWg_1p4c?mS4P+bB2Virw399ivvstx_MdF?>&Zla@nVv zEW&>>^Z@d+9DDieCKp4hg8__GYWk14ZYLN3$rd{S9vU4Ty<{ChA%h*C-C}Y)n@=G& zVg{f~c$`bh1KZoZgW%EHT=vLukhh(9upx}^zkF3+Kd9+4TQ$z80PMk|(DNO}VvGN? z-+t?vgt0NXXL?eSsUYyJ6-C9_+rX^(OAC1y7nev}rlm$}DXWCU7(%WX^@TRq%Dr13 z!7k^W@vYlYq9Wex81|eW2-IV@-+KB$(H-Kz#D+%@zZHqq@OXcQ81CsKV#RrZ%XNyQ zKj_QLzex`k#qSn!HUE_x$=U%8Q}TZ;SBt zVRxJLh6|U6`ao)hTm0$J@YKOYh~A}X_(C{l9XxT*pwr5ah0?Qr4robdvxR!vs1I8L zUHs)jY!%(5Zy5l!LFgFC={e@DS*1qaVQp*i(pHYX3pxycBh8-C4HO!wzf8qke#jY| z8ep3yas>FS=RVIv{5y?$Lqdz+b=xv8mXb#)bpl4J&Yww=Dkyp>!1gMOY1xU3?;$Vo0Y z%aw646z_=(OwwJ})_@$2K_1!iS{sc<<~F&Gz${pLxQ*Fm(;9W4flMi%=Iyg+F_}z3 zJJsYU3wo{xxPcr>n(ft8y6ZPIjsMOL*XsSegqT$8En`{Az_3}b+zPzpSK3XfXZP-G}x^~Ae$?QVlMtchFQGqFNi%= z0*Z$Sao=?f8vR9qxL_PeT7*1xWK@)1yBpIxNMC_OBr1H6X65g1w*~fVPyiK<4-c~m zEv2!VNWTTbW2a9B0DiDpm~5z{&z+ztwE!?Rh^aWL(<< zn7FYF4vHgrMMb;S4xWpvB(9D&$4|8HDTQ0V1T89QnXAcId8~)OkcI?HoYdE=#!3 zvu(-vtZ#rVe=#XyX{iHqaRM(R19#D962%HVWsd}-n+w)kAYNn*_95OE$@`pHQm!1X zSYBRh4_rwpnpG-bRE>IFvO`I!G%6qodArU^OLJQCLU_hmwn4Ycw;Nvl(ikNURQDyT z#(%>&7>@j?Sd6Y8O$rQAf9tMP6K{LQ#*Y4s%;U^>Rv!VKh?K;q)9Xr=7Kb;x+RDfA z`RTXpnM5MBf|Ike!W&fh-rcFfbW9LnwE?_1Gox-+BTV|Gxw*N%eq?ZvMaW)QSh)DM z=W!i9T>Si3rae^I#|TROnGX6Vws+v(;@&y{oY>RtW-LQa(w{1GgU(WYfuYHQm4(!i_1@o{}iR4?$ zY8sUZyRCE~_|r&JiNR`{V;d;X^k))sB#y(0-;|QPdSOg_FfV`HZtT{d^)s8upQW?b zvBZM8jrHGwYwNpO#EVHDl+89}YCehz5JKXbSQE9_Z!m9A68x^D{kYXQ$O4It&$4cN z1fKV9=>G)F0idspS^M8VJ|eT*U3z1Q(Eb8uGT^?3`mF!{>R_mJc`{!NEo9iYH!KX1 zGjpX%mn&T!Kv$ut_@Y)JAt4#`fWTI%`b_1C1Pu;KtHGTQ0O)FAX^EPenm$>U8Y(R# zV{|>deeS;M8QQV^ywHx$O&9UG>yTMnIN=p0PJC2AL>MKNXC9&#`Jj6QIlMSd=jQmQ zK&OI0#8N!Wk77N)h!*_yk|Rspp8#}kq<3U>*VISTi)HZQ+8V8 zq)X#Od*B6Y<9F&xt(uSt0I+|YP?o+}xxc>$ERmR?eks_Li=ZxTFS4MZ0O-3)q2v%B zDS>Ugv%+g_7swURKBpk@hJkJb0%-!>)SK*tfxblJZe>#&813bd$9Sp9r( zL1AHbb~Z4WyICy=K$Ts%h8UT4WdJ1R8!GKuV>qARfD<3JoU4I=rOv*%thCxLb2oHr3j?)7jP0!~d;>N%Hc2MHhLfxLQw?;+I-ffy=Rmbm#jD*Zlb>Hd zviZgX4s^A`sEy#hATJN*T(8ZAj?&}dsCf(t*oI0ip9TX0JOv8GGpDAe#@@oBMQ1)c zOzSf&~cp#_YFi?Zyf^OFr1j4(}&j5iW z$lS4=DQc*E*CnIS3L_zH=& zbCZ*kzaMTe@K|7=Pfrgg)O(Xs=J(_@H0D7376Op;C`Lgt~cZ0;7Bj}TCP?i-@5d*JbN#aH=CPIJi=&67LrFjCKk$ee;@Zeyun|A z`aC>yeL*(nr~+$+W;lOyNiH-xXJCaju0epSXZm3cge|6m6Jsp_kq*wnRD9N{5K{e| z8dUnY&BmZr2J0K&OB$PfD(w$pE1c~Oq4GV8MQwQ4xF+3yUruc0SfQPTu+%M#}yN=mLAIAXT?2V|FkdR%x%Y8+;#vqr;v(qu>jYb zPoN_rvd~mkR~vMA)ZW>}5(_lhuO091-k$bij9dm2Ntyx$?!VZ92^Mnr2{S<PZpGh$8_wO!Q$(w{AxOO4OQs)4?@-db|TL$N5TH8s42T z!gGPFY6a`{Sw2xm7`^Sc6@sV65aOJoAi4U(H7s$8FcMSi2f3u+C_lliYxbCU@=pX& zgGZ%>r7k0Azxn!dm(s&yECV`8ln}E>1645ER2g?8zw*KsWjW^uL-B}(Z_e|bboNlP zRkHA7$YbBP9qYM;yK+w-8qCTDj$<~74|*oOV*;%3QL4GCg8I=ZvV zOMZ{jpQX8eUI70A#5qC5Yh-A>EcyBQYtmRC5KV-!xVX5gYJ$x9cO)%ly_T)D@fepkE)ytaXnD#aV`Ap^T=E3y>5&t=su_>zE=GPvR+~(+)Fz34qjjLY|E9q zOnIOcCPn#j{H#{?TqnGvVH-yhWsf^Pf9A@&_4ySWs`bz1FxbTMMbbdz#o&@|iwG+$ zasm&9N^dj|cw&t59j0;^W#m})-KjT=H~l$!w$x0I>YtzKAt1eP2aLnI`5dAfE)`W- zcb{2{Qn>6-VTKA+LW-+qi#(?4mteGgb&D{ncIbl2xH9qWt4LwxA9lZ! zzw|p^>jE$NvUL#DPGEKEbF~4Ueq4SUuQx{ z0@zHa#&f%nx$a`BBD$0VQsBa$ri_n!*-vxQX}qQSd`oWhrz3`XNPq7JbVQQ;N=bO9xWQ18DtGU~Y>`#ji7x;VW; zQ0)KnvX-fjdnkE5VLqKHx`y&9zOh)+D&Sh67Uzp)^50I5Z<3g4|@dl zkSGD$k@ynE@CW|!mVkYaybPudx1~6UK&qy_-kG$;6vyt3)amwm!7Va_SdlzVoAKUY z2EWGogUDO;*Lg*nV5(g&4m3&Zu}Gg(h8MQ9ps#K(74uQr$WJL5Xx$35;g*p!+jH0# zhLJz9g}KZh*oXdiK6j_}l>8P;-IdazWuyK7^m{-dpn4Jn*lQrJ@%{M`;n#R}W_I=p zkBEp!_v76KSvSCq(j$uA*fanJXK?+*|Jhp$i;IJ!N~h5ZU=^;eu2$6MMffXG)h4Df z#97KsrDBuDyd3X7xar_!Pq@@uz1>nxWMTT`M<&w?0q>+rPBl;kXA+2ty~P0S^U}by zKh-!gQhNM+nYhwu<)@#QNg(eJv7u@n7v1gu#$2x^W~q#+Z2ciB*)j?PV*2yA0xyN# zB@uhD=o9|><*&IK4@crM#NyIVQ;A}H#{C~OsgpdWTpHB7C^I@A_ywqv{8(iY zMcr&(-&pms(RKH|zE9^K+opzk!yOm=cW&N`6Q?`eq(u<<1D@hf`*FLA?5m=x>NLXC zJjjPC^l(@|j)YDk$helxWluceKAm)Na}!FWS*^F2+y~5GFF@C^TPRCNNZic0#zAB+ z(W{Gs2wN|)(rSht+(k08qAg^Z5^AP1NdtHmb#NlQlbcUL*RL+_6 zT^wkxtr4}$wkWak}EFB_Jl zpR%ZDr7x|QC9h(s?um2Css?gPLlIO}U!EIpa+tFGe`3EI+0}K&C6H)p{N+ILAN6|+ zU^!ViIRH45W8(nEmJ4sG81vP7ycBW#3A0W^+47}?p&{wk=~kkW8)Wk)RROl@?oT(QH=u@P6_}EnmJ9YDvRdI##EMOkk)E;xSqNi$U!dxj<8Jj> z+v5ePlMj|ER{}CDr-^NnkUox!wKw|-Va!z3^Wp9ygkI!t++R&Mw#9Jx^Gi~I3`M1H z_9Ac1x`#5eh)bj)sOP1m-L0}>%oOj*Lop*b%A}8Hy=a3HL3baZ)goZgTA|U96taQP zNmtc$IgWw+7fFQ(wP2;?BG3r;W}8QJ5JT-FmiG}ltkJ*N;e&;miKsuJ;Fcy4_nW^? zh*}i17ug+zaC5W_dO8A_dM~fG?Ukq~)RtL*agdVwHhw9gq4B1uro6n?D%Fxbnv{c`%aKNgfYgfXf)b!OcZO1`Qs{W z;773c$3gR`)QnH^Z3-NCOAb_#xQxG<1FGSN_G!?J$v?6cG1_JBMZSPi;%&A&FWIIW z!kw);l!PKIPGtQsS7z5-X z!WXL>kva>VZTcrTUk19LlIlSlXuOl4IA^j*wo#*3m3FKa2J#8}Bj;s&)zT1d??g`8 z)Mz9E1klD^QPXd-xak7gx$b0c?HKsgk1yZ)7nGGh z$V}#ibYGVGU9VgJYxi5|CME7S=5+1fa#+m(DHGmYk~`o_0zWs}To1CcvT&L8EK0!4 z5NL!TfdIB4+i+&Td-TZEia@)4L!~-_*YhTEWZT5+|D$xKizrx>5*R9!QW`|a(zvG z>Fu8fZX^>?D`4&E*Zr+i%}?B$;w(+KaK*sP`i^23eBrt&_FC@eu7o05u~JgA>4GSv z1$%(mlkzd`!m5!{`J5!2+nsMwr}J(DcN8 zIZ=g-Eg`7-Uq6e-Ipun9e7QRXuyO!}iXm_r=V=c+apC-H6d%Y=0eLd`cX{bR5%t*y z5baN9d93*YWcnxn^>?ONSXksjw*WWG%gfu-4}>*9hD1>jwa#pephfO=-&^+|Q_c2k zJw2k%tU%tFtb1BX$aY^GV$rztjl`emc-3v$mXOmXK>q%6&t#}U_zgTN9?T!aX*eq? zei_VA%c+Sy-FI^)nS%x$wy%}sn*1T4)?B6|Q5Swj#Z+t+%_K7v=XXJM~}pRmIgF-O%L8H+x>5`!&ENTEQ5rxgZ= z6MlTfz+Bsji5BRAb?ZJ3XLd)`6bnY8H;|LyyVv+|$dI6*AjP33cqXd4%NGGo4ulch*_(HvW^` z&*T)?d?%))g??I`OM~&fc=l(-MFjar*p()WXJidqGKIkmaeF8<_U9hyet9H3ykS5I z4GZe&T7m^G{eylyaRXp@pil~}Jzw9wE}U8+FuWdqU_cEy)&-Wc;VV;P!X*JSynwqZ-6u$HSU4tlKnS2V$TLpMaPaS9m;{N1 zqBAitWU`us)Ym)f=w$dXu(H+yK?AtsG|=bLWW6Uikko;Q%X*IS7BESg+35J0I#t(I z&8rEEs3AtQ5p5UaeCr1vVG*``R8>_6qVP>*AV5~g4~Xs0Td}l%087waKOtxhNE%>x zFdR^ZQ*v{`G$H4x#QYwUc_Qa3Ald|g$*8QfHZdvGKv5|H6St4{?D(5mb&JC-^Jv#O z1Ckczb4vQ)m1s_{yHpXtI*u;o&DkVt+B4)NuyC~*SWe#bAyO=R9Fdb_p??i`Pu}dl zCukv|X9$7(98cuhhVEn%<^WIS1#w?He%9z4pOi|89EKm^+37lqCIkKvE^&s&i08dX zbN81lrYlNF#oG#`l2ex{;rH!hL>f(?VEaF-Cbhq20t4GBC$eT}-&2XwRpI9`P zeB&9XKois!MB|)7*b^DB9U(JhqJ>@HWU@xsrNp002};aCivGf9bA5FRSa-_Z_~ufi za?ifuYk+i>sUy=diYSUN(+1k;?CvNqM;Mb6dYYf$-oK>(4V+L#p0r>_C)PsF@sf2W zm)7PM3oIhl&JT6KAaK%5i&a z0!R@KJWR6mc6mNr8#P!=2E_#pRkYEM!>4n@T20sTWF&oX*g{&VDy;p`^Y{?uWU&Ao z0?(!7KKXvqZXNkn$p@x&&>$Q7sDV@P9-6!Rb%#-B&v9y~=NDNX**xc)aDTT1Jmj2iZyQ_MY0@mwu5kk(dCBI%d5)^>L zOg`9_5?3?~tiQ0R7l~?k7AXP$s6bVT9=sU%Ja<8nf5p##>r+r7170Pbk%WAjxqxi% z$ucVT6(#iSk|r6wGz$JBXHMtjOk!bv8If2vG9pPa0NP6eRE?1?&>lJd$p4FSsw8rZ zK^Qb{`AZjgb}eJP?3o z5a@>!>fqGy7fm!S6j7MPhtZxNDqA0( z#)-~=_l_p;I4IzXqV6t=Z0;X$A=Hx<$=CsQl};W6_DoULQ}37v!qE)>HkU2hdyH zyg=MR%5{fES0+7CHLJPuWUsQiP95Cy{AU|c@cKAK1e_dy|ApsubN{u~M$AlsK zD(lNL;d zBh&P#Ft29$|SO*tO_Xyu}#Ts!FF_9DKeD%hYhzFblIW+9K#1t({T%o*i$6`N{Q)M zhqRfgVdO&?C*WDK2#4PD<_Tv~>4o|4G=2viZw1m0*aXvH1r~DgrW#!js`TSONMFJ+ zO@Y*U<8smDOmaaIcSXHCmZ@R#kgO{9-6--c6G0(zl22z9oUcQ0?|Tj(M6GcID$q#G ztaHPse-J8SB>5-{zpT83`|)

    sBH~3=3S#)B4soUV-oeKR*|Phd!)gn(W)>3vgX$ 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 kNM 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%0A5Vi<0=JcXS*JxCIj!aMuTFj#r#u{X`e8-y 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

    1q-qllLXt-qDS10t)XVYDw6c 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

    v7+X*7-o%MgI0?1)pGiDl2ny#Z7}kT zWY`i-x9~NJ|1Sau1e0kvZqAY=1bZ8C<+rwHzn093t0N<*Bx=ckDN&PLS18OlE{*__ zN8f}dXL5w!Pv^kXS#fWmXm=z#fFGSHrc}Y}{lFbTTId8r#d6lGS%5c0Ep4wf>;|WD zTHLZ$pr>yFattfwBN^#`CqJw%2&ucIenJxv5SDm|DgGZ-ZyAlyUTD*U6xxG=b-AHbJbAytx2>Z)e{2jk&WPHXffp zqc^$jfl-PZ@>*Pw$;#~F>hokp7bVPTfIup+0HF*W6a>jS>*cE7zuDQ?h6V?fEL}$O zKBo?12L}g3MWMq3G!0;as9xL4utygKyiCfvIG$?<2eP#T^@N#5{^h{0{6i8M53+2F z|3%N`%lr_Rs!iqnwWd-V8X7iD`PV`L6Gx#PyT)tTkTEak0z6{)J<>%t_&{N*m}!hb zsMBl_RCt2z1d6}n>&jmY%kowbB`dBgB&(?k2*ejYN14nT@*l;Z;!ohtMY^c-VU zttBVT-IFh5S#YkhN)F&GIOpENctvSX&V-3qp;0o7Lx+ZyM(q?M(hO&)Cu7APElbOa z2ZI^3{bRZ@z1{zPFB^lCspv=OPxM}iMn7dekR{l@A#cwbTV%=KU2qm={taD+eFefR z4Nf1mh*mP9>-?GY)#@rMN%?v$!pwQOx!dtreTq&mxE;1+xx2&(0EAAvXd|$nmR5(y8)#`|Tp(5AT zUId3hQKbtU=9b~8fPjFrvoo_f#$Q9gDe}gi+8huE&&|Vi0>3vBE09 zX|f6C*}U<&er*)df&Dssu{Xj%Gf)bhPUYUAJ5{9OJ`D#+d7jH$*cwwMp}4R6U53dY zo)OQ)>1$Dt=j3cf3}M7qp{qVM-P#Fi*YH+<1EW*pz(jMVKwTAhB0P#SbQGM?EC+?5 z`Jv?X@BpX4FbW=r9BhPOyl~(W49u3r_cx^MBMa2+56urh3%){;wFH!Pb|iU_#mArb z(NCFLtAy%&tCFEXnQ~K;DUB^^4cqkROzm@fV5x*Q3#9jyQiZ=?^voIZAWIj*wN2ly za-$Wt6b$nHSRJkKD>$62BtJdyT)%XU?4$-`=RkQQiVQ;D4|8GhC1?($?hN`e+Z!Df z6Kjj#wc6$fiJcRnzv;G|;PIW0rZs#$RK$`~O{%-Zh}xq>YJ)8R72g1j>4O`||B*)| zbx0ktW#l{8^zip5!K<>@d_RgTsdG@Fg=sP|l7yjn{T|XuI;r37QA5*t!_&~I(vpq% zzAGs3^>ch9_DWIOotj8eSn8O9v?ZpNP21Geh4ZDI?qcaJQ=9$!uWiv4no4w?P;MJ480KtUo zFX5MrOo@`q}6yux8TOH8;jIQZR8TwL6AJcBl<=^snwFw+5>*)c!y)p_YZ&pKs&H`2FQke~)4*>VOJ5WE+(_3lvx(_fv1ZgnK8+j)` z4VEvxVMBZY?`^(mtcLdF!jmid52>%m2ghOuM{?U(!wDn_=4L3oz z9=p2BEnVKg{{BO{OHDR)4T~z4ym=QLyE0jbH1i2G5{4kDFxBt?!N|YL*yp$Ge%y*X zOVaoG#n&mdY$PnY z2D6ab*s)W(lpc;9xS{lZ&K*DT*?#XJ%N+Ei>5d`jw;el^4GPuY?8@8VNu7V!OXN~k zCLxWnTLex=J&->H?qCF)A&P(cs*q4FC*h3`31`7?L4BnZ&KQW&WZ?Kw;-;6c{uGO_CVweC^zww zKXw@7H!WxhBjQz)&7#hEn5(h;Ww6iOMkMI%`8f33-rgSFG#P*t>uPJUBNi4GJ_EqU zuzno8RWNlYqBF2LD;}>`eP&OdNGtfQm$0oAVs&?PLTAD{jXSrmU6M-PAccf{TS-m~e_v2jMY;z zcF^?arZSmGnLSod$8;HY{u9IyZ)WPZx5s&!xDnqLr4@CFg|9i{uScz0&^skwkpDiQ zFF=Lq+psFSVyPZ13Qs`6n^|onowK4znH-=o%j>a^(Nr&`?@Ec3AN{VIze^>Px6ZRt z(v_Xz@rL2+P*Ee-E%Z0Da@5UGx64#LEg~f(snScLV=K7ha`8YW(R-*t97&2QFC_(r z-?S<0JWSK~?GgLikH@Otg}jm{=!b_(N=thAdG8iS(shvUbj!8c9U>wSqz%nn37aKu zg@H)G3;>aL{7x72c>;)mwx>Hw1Ij8=6}q_U>hmBZ0&IGX3IG8BC{IvJ{TdcoMMb53 zJRt#hZnVGu9Xz}iKrsORFz_0w2+?i-4PwzmCM1}tl!}slblL;4&Hao8P>1%3B^!Ee zZ4I!4eb4^m2%7Nr7MLP8aSYT;<#U@D7}&i(Zu?&3=kLE}=IqQ#2+amvyS%i7_{;m< zGU`JlOnd($Kv`POl-!+sUf#;?vMLH5>yhNoyK0Jm_mw}y zP6xkosr`?EnwA1jtO_r!^>ywH8E6- zGO53?rJQ$5m8ywatdW|-7gf%wL~Is*bj^1;;rj3F%|A%so(>FbDoa>?=B9+rmm+v^ zTyd!0HG_v0|9U3oIM35dDz9}F@N$2!JskV&e14PFvW`l^dA__;8^`p7BRA7|($Gi| zB*cq$h(ZH-AJy+HCRFoR>7)6@$eZieO>M4U7Z6(97dT3_9QPND&$=slTlMgW9d(qw zQu+2pr-hC72XNlK0ZR@uFPaG?qG_6uW#hQ9z!KzE?nb`IpQT#0bic?uRZQue@!$I= zM+>MdUL1@cUaCWunjCaZ{Jx9Z zx1^PeiDY?x`}7|5E245w>$?*^quE0=Hgu?JmvN+6Ce&cH*ZJf_)C7$%wTzpdOJQV) zG>@qN9dx%SdGxj7aT;Az<`jy}7N_&Sw+gY@^pY>`*BCZ2l2hb`vSjN^ElAP-A-oLY zO9I`wq`8`Jq?^%ZFlj~j84RdQu0fFe z(?yBl;LUUv^Kt~m=jpsiQHl{8%>Qlfb8G$kejM!-?0qfHWihZdKfPZd{%@Xr5V4vq zI;fO$*M#)G&z8FTfVrKSQIjjietm!KZ8;OGHBI(Zriu^+K8^ZLl%R|KERe3_{J@&G ziScCc=4vRno3dOiF5`cu14OlD zo@YvEx8;v$F#RfOG-^;o{u|wI7TGlJ>D_Y_ZSMd71H#5$s)qKEj1u!0eVY6U=;4Wi zkcduhf4Jc+p{U>lMB%d!To-8ti~i4`aH-@|?&h+Qu^KuU-0c3(Q=$C#RIf!f5fj;G zim<<>ji@q+3vk{HT_T7){8YmU*qcln+|X*U`QI@*uHb|Q;tcveT?KM^vN%%zzu8Yp z6JAhu?PLzg<$BFGdZc+ap4@dLT*KX~rdww2LNUc^N*Wf`iZ^va=hLeaNNia15#}Aui~q5P zmP{Np3_Li-oHBjUE*|Ce`)5(6Zpo--22UU}7*D&w7;kBPTDXO!rR$nYrIs~aYY|%wPWU0sLu_GdyyQLKPwzp_p$4Qtvvy;8BwnvxF)KLL2T%YoOnA~9$A;Hg9Y@+-8 zi*WUb&{}v3#FHd%`vAbz+S*iWv61AUfeiHYdCIZb+moXQ$?`+FeI)L%A3dE;!+#r zc{-zQwW)m3$hDi=A=cw}FzG5!#p90khMK-AM+^ zGExoQ5p^z=tJdF%AB?x?Ngbmc&$71qXrxuH=?qgC6&78U6f);E2R7f$d$Adl7yr)D z<+7M@a_bV`?xp$5>N7y;jyCrDI4$#PJ28b zF_{3J(J|uXqZ}=baFY9*89A9Qe;;*qy?@G)OE}>4v+T#IHXXxeGzDQdrNXHlGf`1d zpqlWvptKYqFsz2Co-xJ32|reWP&lyE1@3mp%}zlPfR&~LQYF8L7`>d!9^{vCIyLQV zK21I(%AW}7?bDF@=AehIw68<@yST&#={(W?HhI%#>Em>~CO$=}DO{JLP_ERa_Aech ztrf0Nn+TSAt-h5Du@(otua}dYyU-{XZt5{tV7h(s9JR++%F@OZAx-~$#1k#Ig6>y1)*3;*e(R8zFjJ3Vs=|F z-@l2rYSdilA~kDjo!B?Tc%qTu+#jw~+b{_-d+erZhWaFhh>}J1H?5UW3U-`3jGjGu zcz?tpaw7WA)~v-;MbI1`c@sg>_UyS33+JN309Zus2B&-umm3)QPU`dS8U@OF9#t4b zYl}QVJ<8hgv5li6@Vq+50fxFxqcu`G_vg=_5qxLCQkw`B^F+`&`gPVVnXK%q&-4n~ z=PL--lnk?km|Dxe2<#f&h1V6EnJ_f!`)^?+o9-v%1Eo9kSLZ&VnoZpcFYHu>$7fNl z;52V{C7>2Y8L1R({?!^jn!jJa<{iW-i|%+eQMK5#G#pN~aV4AZJHuIOw3WVhNtKmV zgN`2kW0Fh~E*AZWdL%SrzIIYZfbz;urN8*mSMbV|pXEaAk7k>w`4H=Do^r%vCaR>9 zqM53yH#XLx8E?`BoX+|){qL_2m+P)gDbPbiSFlis_+0n8NxWMHSjNXsbOQ4~{AZlS z0oy!=r^RCJY2!LwKAp8AFWYIdDA23?sJ!Lu*o$}8n5y1E1ykz1A>IF3fhHq<#U6LN z`D?2{xQT!`dcX)w7eGzb)YTnN6~<(G3Qaod>;DDrsyD!M?(CR__ufo8eEvKNTu*OM zo_lg~a&~qG+}GeUF>n-UXy9I`(<9~sRfb1kbt867Er|n7S!s~QngXTz0L(>+9DDXRwT6L=3%7ftaLaT zGkYu(F-p`H9rw1OvqRFJYZ_0sP&U2Kx2Ea@1}+tal2{hvGIT6hYHMlL$F%&n``(Jp z6OygK{YuL{aKS6Gx#=imei!=6tKy8}Cz;p7E;2DDVvWIwg#EOMb@a-UXa{pNQ<ssswHdx`VS(1}GLBq+|sssV4jgoMe!p?)q(Gmoe9 z`Ht`L2jSbRZF+I~NQUhL&)v}#$N1*ytit!iGzoN$+guPvj1_^!6zmw$MTUaSt1}oK zF+FQ*dnF|evx3m-^8pO%pRc_|fK||~3q_pFyv*a;Jrs)wy2KVc|r-cijXFDTHZ+w!QR5>bSf;?5Q=h8eYfp8w6B?ne&f}KKYvg*I|v(!T>b@hNmo}_>*GL-3BUo{0FAYuXQg2e z{G8inKU$@yn_GjwzeofzzrBNlC4N5+plSf8AJ$C8J6sM66-mip*E;|@M&iv}5NE0g z8=t=)H?f|&!;Fgx_fa1GMx@*AV+#A>GEo5!6M;$UtUi>&Gh4ct0E@onDyuhW zAYcd2wL&dDDqlVJW%VdgMeWh3eyGQYbh7x=XMZ+ETugNq%lAo8hEZqTjpP?H=@B(B<(wYo#;3(_q*e}_N^_)cq01lh>vC`NQR|}A}zqN;w0lu1a!SKH&G)$oyMJZ+Coi$7s+RrILGtM z7`N}=Jz-{_p^?6Db0~R(x~0gGi_84LOyJjhQgRU{W}=pDNjsCWTa# zhzGZ^P$=x_bvoPTi{q7$3`9GCyBvpc=*qY-QxRxif79w@8r(UOu^H3P7~5A;nehx( z!NtoQD?h~_t@yM%u5-B>xaXrA4>!)16wh=Ai4<3fKA<3*G*0;&q1e0g7FLpB>GE2* z`$mS0AcT#tDdE7}q`7Z~`plgm-8#4TThx{0@_4p*8Y3Tm zU*gQ(VRCXZ1|4I=@XMF1>?ldF)anAZsrkf!5?24nz_$>WjpKL!ISfRF!Q^AGU!|Q+ za}`#zE!9Q|?uThCEsOJ1Ltj0*w{chw-p23}oBfaT37BAkC>9%=hM=(G6reH}55rZ| z(Ro4G0|X=KdH=&Ls8aDbZpokClWPXbF*I*^eLyAT4d7Lloztr}37_i*(FhRP(rI*r zOLDfg?H?V*9plKlE1*Qfcw;tJXqYF`Sf)@u+hIYUgWjluc4tB7MO zLQ*rK2?SIfM2c!IvxrZ#81YIXha`ikvRDf$w(Gb1QL$ex35)XJDQK z6!$h&sUe;*W#AV9l0%k&sa>(|S&LUE%A?GDj(H-7NyTg)TSB z`o0iE>M{<6*V?@3w)y(5nZrdClwl}K`zue5LXSo@=eOf4i399bnB&O$bhn1rF6oKM z$z9dfe|!Z>)3{Y_+i4i-{66^6x*+ozR98j*pVeWiXU)hbV^gdP97<8LuGdhttJb0A6fxN&!5jbgunWfg;eq1Srd(xOdP!fKGrCeE_JZ0h8xV zU{5xPC-U8HlZDutw$WI7?M!bl`c zn6>FhF?jCMMnesM?d3v#V35fRU{DQh>O#K>inX+ADJ1s3V|r2wZzcHdF!hJ9Yd6DT zOqW9ZdXOSlBR|U1;85)HG9RhBJ4oG}p1)vCNQv7^1Rjk9*r=bz0>#;k2+=T>3i7** zY}eRazxDL<`P{;vN^y5`38ir9P$-{d_#-=vtC9gjRuzs{hK5`=QX{>1V6jJNv zmT}JT90yqQKdG8hX)PX?zOedj0{n}e_niveP@VT65JMK_BD01DKQ@uKg8bsNNs0^_ zT4J8o6p5Kd&PItLnDFyhDS(It&?w6mN7k)2OiLdUkQx^wrSBCK0bv67vmS`gBg`V; z5yY8|c!%E!fXK1Zx$hwql$0HOvtUWAth8oi=zRs*8-<(PUwVV1qeoMPlOXwtNbXQH zy=R*4r6!x=u71`7ZZvvHSt2BT1EGro0ETD}Yl7*OjMKu=DZ6DCGT#uxCig@wo;n@u zBKjA~LaKB_OJ9$wPXU3-m|G(>(aL!ke{U{PzVHs$I`%!}AySGDX-kyD8p4}fbaC{` zNH-`a9c1H16UVXWi%S+xV*q~1&BqiTf)}>g@VY`(^&&B9vkXI}Z zs=I~$p7bjK<}|`z3M2oD^6s#N)^WfXy>-|6gL%-)4v*>wRgNG)t)x|~byCUx;Y`H8 z8JX!$e>HzWyp3bv4^+n!{^h5?dC5OXu*UZgxKri2O|?~3XFv1$z~%UHcC+sspM{|=zqmb(2w##9^*2w8 zCz{23NI*Og3MS$!*q^S8V`~3Q{R&Sf_~|d|`&4w&)r6uu_9)T11au+#3*86dXcud8 zNQo5HBOW@9ZghqYX8CrsD<$r(0-VO3(I-h25GDV8o$Yb6H{X|@qxMbh=X4O%R~iVP zk76(W+|s;#*>@5oXZOtLWV>+DMpqu$+NliPIlZ(3o#c`tmHnGPu~YMRXFZLvJhz7I zOb5Z=cwi__&&2BP&H{CcztktOkX9idsr(itFCj!jcOx7qjA3eR6pAmVFJgk&@_2(i@aEIZ$=^+Qf zoIfQrkat~GjDZCh`%1CTA(1W@Spf>9L1#VXZboqj={!T>zh$cw(o+|`_x&#% z*_yilMxO1(Jfk>EmjmDXzeiSSuwwYrrqFY8^>{o-5Nr*nxl2rUE(}_9*7tFh-g9@C z&&*~K6=0KTYq$R8K5Bb@EYHpT*Z%D_2#o=pwguuQ0;ywuWUeE~lp7)eKXHuj9Pt2@ zkT5-XZiI8`dmJv*7``f4T3Tub$Xq|qwav{pFreC-37gyfg63csW$`$bvf%;=0Bh@l5ySG(D7Xtfx_` z-SXVUvRFT7)m&uoxXn0x;g&K~kUV(YQ4*)#A<*v(C1n?LjjPzQj*a^+K#>>aIUX{` zN7k6JV}bB4{)twAOakJ=GtyqD|AkHwxA#oy%k`N6`WIm%teU8g8?>dV^13^tyg_lsfF5g@Y+sFFp!gHxL)eYB#SW8*-+8H;C2X3X8lIIqt!#LN|@OiV5ESE^7omww}>*@?%xjne-4&1fO6T zJ8x4!R>l`#q=m4*qKuCI0e|U3l?@K?TAv?9fqaboGfu1W1SU@|N)boPNoox4m%s04 zZ>YI!G;s0U{R*(H?v+5?q1N*i>RAL7m2ATM8_wXfz({Tm9-ako{f3Px+F$Oe`uIEp z7;)zqs8s-v36XDr-}eJCsABW$1gqh2rKKrRXbX*mgd~ezQybXpq!biJ_g9CY{J$a9 zGgGNBPcHebV7lko!1?wVH6`WYe6<7(pp^5@90P!EAe?&vVv7VVpDJj#&*txr@{=>z#_e(?os6StVcktvQ5iuIcVi@}!CncF`&+8fm{Kz;cY@pxGd4Geuvq zhs@l?Rw>^k#4EtfwWa*rc{_w5rSkm=XUBhDRfv{sr zzghq`=@WXPn`q>PMjB6va5bZt`L59Cj|n1#bU##=Dn6kzIV#l;=O*xLW>6u+m7y!P z(kR)zW|DM^6L+qaJXGv#wF{@uB0Ym{!|ju7)vr&=@49gN95KV_$`Z?@UxMAU`yKi% zTY=7NuAcY^$|}x8o%hAXZr|0@-@^P+@K>k3-&1W+T%Y3C4D%=9-)?*|b=VAL+eB8< zZ87J@!Po5q#=lGU6Wx>xt8P&sV@GaB`ga>Vgbnk3xh~qaO~a*8X9VQ|oJGzVs?Uc$ zC?U$^&s&6VrDscWxok4q9^hZhI;y{0;EjUOJ&y`C7qNNVn_L>X5)pUbnNHlWL$q1#-|8rXb7F zNlcpf?jYpnPwcCdj}E;Z9UZotec=Su#HDL3vCo11Iw?(U9ME(wsr zvnLmTBgE_EZ$~PR6S@w4fGZAQ6hyV~PX#Jh%=9*vmiIk4kctvLXVjmJnpK<5Gq4F) zAJF5RSDa39I~b{~5x-5e!S4$kZPRhDu z-4;pqP!g_1%T>E>GYf2e`?NZ`a#8grx0K8H=yQ*<=!XK8{gsF{5o4ZnMgB1v_uFxw z&Hd61?XaITC`V2by!FZz5_#jgg%c+~zHKT6=H;=V`h+-4>q=s)|KyHODa7`Z5|{aH zs|E~tIDU6M$X61S<-m*-;hd z#_KOgL7ke08&VANDnE+trBxf%%TJ;MZQGV;Ne_3EYutO>y_Zohq;I6&o_IRh2sXmq z`u%fEr!J;P>}^Zt8ka|Wq-&PZ{EkpVzDr+ulA%UjJjWX_`RTzQm>27du&WhJ7Lio-8-mtAgc_fD*r{3YlWjw9X#j^# z{VVZeNMdhwtm+h_%r}0$+=IGZM7uQ_h1I{mzO;uh_RuFRu7@aWKUwwCsyeZ&r_yr$ zOtdW&cHou($)+(bJjD_k1$#y@dUn%xD#&Mh7(=f()(K7@Nld&YOu>cOD3?3 z>oIQktxUsoLD&V+ifZ3Zs~Krt~=PKrz%>g zm)U$9SD`(jB4~taie>O7i}KFUT#5DF`d+j}JmFCUK%J-^76?1Yl zhAJ#0iZ$%xVI%8&D$)fcfI#5j1iFsIqOeD+<+&?3>)Kc^s{{r5AIdj3KT!chmF}qL zajPnEbSx}q``N28ATPG+IZa00(J zdyyhPzF1dJn^ISWaJHM}-$$T5;O8);45RTjG5PI|#{}1uQ zibIAZWx4+~2HLy^nR0xw=D(JTs<_yjPB$AUCLe#|PW(1{F@OWH(JF$l&abu>^knk>Z*y|Wk{*NQ$24Pb_O}kRStzCvRzVi0-MB3l znPtt=pVg_S`&l&R5C1Prff8a>c-d;^wyyG$K6^>v9?}$HpVbe$y3DqDdpc$3l2XgG#07Vd}5m4Lj7MzhIp$!`ts*zz*^ts0l5%?vl+) z^ra5?EwU7|4UY{~R1R9MH5Ac=-c)911S{nnGd8img83qX9%ubJXZCS>c$7{9$^c8J z^}ZQpES}co?OfvhQNuPxOJs-EChQIZJ3IStrX~1NTZ>2qw;bK3cr+odOeUz8uQT~2 zhTNKyHjkn8la;tfcc;;5t*J82QlE6jJ6LrOo^)yNjy^5hFDI@Vp`Ne2z6AvZT?J}q z?uR0MFg2yP6FGhj8p%MF{CoUq9lnX+c1yP;@L4x~2;MUDo$W~GbfNB-xxd7BuxhJq z#!+Y+BE=3OHcMexsQ>q&Bp?*a&W#2Nb)V&qpc}s~LugXqL6g4aa)ewf7u8jjECN2N zX*Z?DIbr9y9rhObdmrShul`Yui`E@30@d{;4N#!} zfUnk;__U~x4qll#M=9C$(PcV(9NF)apnoKK=n?fB~i* z`okN`(}f`kN0U|L<@BcC#VUouM>B@DD7iKD>w zHfdBPhI$H9cV}U#HbfvU1(9<Xr`)kP*Z>qtF_fi!X{_&hnV}_*SY^7~=OHuT88OrC{jIKe@jmwkZ`0E`FTOM%WIwnawjURHAgK#V+-^(c2&Ez>#%+ z@;H85(xXmkbJy9oc)y-o42w+gbKHC3ntf{;_k0(;}W7_xr-?Pb%e^`ksMET4T9seqs`{*k6 zRrcvDAN-RNBY!RK_pEKXrk^Y5u+UGU%`v2@NmJ63<+fp?vC|U}Vn#Ufl@x7eeLp(6 z^&JAzBNz7^NIi9|9ChAS_fm)bBp?LKF;XH7F(RFl*Vt=hP=w0k=C4qHwJD_SOtR~3 zjmXjBC&R^9x*NF*X);~$9SMsA{&3c z_4$mfc2}Jj{&4EkpdI@2P@6%Qy=QrClh+ar!cHN}LVM;9Ej^s&%FLFO=%l1RK0f%72qGiF4b1BnC_(tDY!>Q?UFK7HEgjF2wfo(X zz(4phNoJ*YFK5oiX6xqZky&Os;_ywhhU$38u_406V+upd9|cJpFg!UmJGzhk4r!~q zX|*FR=|PdfiLQ}!XUvATuD}-iwsaxps-Xdf9pUc>eYA9XcH!va@+-IpbZ{2jB)U!- zvwU^!bMv=jl3Kn~Sfnkf_2gGtIiwuh<#D;yn;1U-Wsm%o>A;b!X)#}PdKian>5%-E zjTh5-hp5H4&we`Gfw2X#d3p!=B%1cuXZ86<;u?18xW7XUHhAlg4Khs}L#EQ!_|&b{ z*f-Dx{gKJ73UBlS_&ly`Y)`VkqckiY!(P7}9sT4>eN@+L16~1iOJZeg5-JIe4vTkf z(y=tJyud04)A8<@aa5;u!MNFbtbvon3Fn7?SenoLReC1LrOK6Ypl_!Z#T~3Ggs0JG zI@rL=VyYmix~4$2TB~g(b(TKaPR5byv;ngcTkIF#4nknZJ0v(bw=4S1UFADCFhYmF z0>WKgooDNeDg^*zhz6g3buiAtI6%z-|4sSKGDC8^%B5@iZbdB)G;H`xt`=6yB8*5PidnZs>F`L(rNTZT6gM2Ad zSo*k4e3vK=D3LEeZhK#EZ-%6oGhxnGem$&LvT2aULJ@n&-k?vQ~Ce zOBVB`$ZG03K{x#mIX%8L3a?$gq817#9dPQlk0!R!T|m=;GO=|oOP)lxn`X01EX}#8ko}(zx#^(TnCytc7}{o*2w2ye+pi< zc8yh1agEtxUf`$>gZ5CD{PD7D@^JOZ7=Z%TQcLAf;V>ry8;?u>&H_s|!pmUuEc1ss zOE*85VD0!Nquc7wMzb1Av;EJ@`_!?v+!Od=w(;leai$k}+fk?2A6D~-hT5(zVtKcJ za*LieOmN2~fy;5^)ozwi)m4AB@{tAi_GGJS_y{qm$SkAKp)51gx^D*|ZiD_rn-K?K zAedNw2mjXABXlOuKgSP}`#g;c()JPz6oNlNMar)ie%d45kV(?&b04W5tNCOxil{+% z$hVtQUA)}%CJo*)YKP>qJmyiAbcQTqMtI9C8kI6G|5;>)?3J?dG|^EIX9o#*P2*X< zg>*`<>q=6K>+8A96cGMrsYlAAdu?Pj$6Ik(a&3u%rSA5DHChIGjB%1t9%7t=w=F+I z)^Q9DS{(Vqq>sj;)p*q8UN%a`XNuKRTh3CgTy!zWl*q-)@1O+IDcY!oqTyu17b3U_DnuXL#Ki3p z+IKR&N)_(~?Q5|)iq!Gu>h{yVf~2|WM)r~c!^^*MP>c)m^|zXD+%4s{Z8N3n1=bsK z()`z;KZT%6;cG0(RA(tP)=WAVA^Mmr$idy@G4G&S(ItzeqEmOpO3?S&#|WZ|NO8NYf+?B$HT9T`ykX+&U4y$I@+iI~ zi>H~* zFj3)iw4BCyv?8Gk-4X=J4vRPDs>-cFkTeM8P;6$MWJOB>E_yN0hxlbICr*+`OZ67D z>rG)F*~D}E?h8+U;UrcH5aOv2#(RtNMXeyjf~BBWU;ekup-fn9aA$=Ssx4e(G<841z3wiX-WPUOV%#g==c zVYulRX2(Ngu%34@J|eaM44U+o~|uS@DU!D4;i}n>&g-2|jH2{HH%fiFdo9!y4&e zRG_Pq@3pffqfWC6L`Iqs1n&LIV2+_AHT;z46|3VLex$M_K=%ZS3WhXw`QqI{az0rc zolE4jY|URM<~<)&zIlZU8vkTR5!$Me%gewZ)Dk`3bC)CGK`Gk!oxiGW+sojVv#XRq zyh|4fO2wbInlG!;YW5a!nB-N@HzRO^-jFYw=siw^@Hiw0PdFb849(1(VbyxD#b8KwTuZd36O;BQuO8DwqY zidwOt^nT?U!JWirKfTpEhH=^CGXRz^T>DPhSGF&g15;)s50fvurRV2V`{f5yS|t~2 zt!%lTe)txdB69Lx>eB}Hhp3kH&4V}uck&vSd&tdC0z1s70$8Ywx54w(#T@xNMpHIqnQACNs`q zq>%SDw#$KJP$GFBFQbn**>c)Ivrs>XRJfgLg(2)#8oZmW;R`uO!izn)9!=RS2)R_H8B555YY!%uUAu16m*eA)dRmDxnrIhv&vQ9b8y8=-7}zHrg^Vx zqN2OL94|d#u}~QPa=9|U48u6gRpeXfB5rb8u6`h4z$~}!nV7o1y%U~(%{53y_Rr^s zN}XnueRbfO<(*2V?6mcBS0Bt0CJlWCldo3iBTN3vlHfdrZ&QZbi_&+u^Rm^D@kTf^j3;ig+1WPl)LApYP5{`?Drt9M&pK7XlYB{YY?l zK|2Hoqf%RLVUG?!dKS++g-ZN7^n*S$nTjWSImYMmcpZw!RG8X1&;Lbc7)kW0Yllr( z6DE+gM@^$z$;nSFOLthv?fhcRP*$w7D)7bWgwnSaYVXZ8R|+8G_eLa?%U+s^_e@*O2gM9epvy`|S^>e?g5&rD#X%s}{!Eh79SK4meGW5L#zV^|h_4NCZcT7Rq=q)(L?UmQ zR2R=Qfy<4-T-njWjGK(}X=@U00)vsTFeyf;jysd>!R@cdvFdV{RP$-Kq`= zv(N04DYns50r5h!aD8vbSO~Mea@)-hz$DA>T5&FW?kurX4~d&HlrPS^y7Ant*t=h8 zpkJ!ov8r5AO|bC;-*fE0i=>rGs?J7cY_?R_pMcpKA}HSipDzq4@UFo24y>{H?4D_5 zK9kE4-hn0GFjG$M;gtOoX=Pw*q=AfQYRj!42&cbiN({urM!Afb>qbG4<(NFtJ}T**hiq4Iy56C z;lVbepmys37|2Y2pTy$e}1Bo|6aK`lR6jFmEv4=aNXuY~>3Jvc2l_v89Yqmtf7~I{KGAP*$h9W$kcx zXP-Pkwi#JDNVZ#1>Cg4Fs4zAMnu|=vpRt!K4eAGG;kV>jGlbQ&>zOb(r)-a8;o~?9 z-&O@$&$504!O8R=1JYF2swNSey*&a}_w?>9@~~@S)_+M%I<~uAn;JiOxP^DVrHKm& zo)8Go24Wn|($#dt>84Cy=K`L7M|Fj2OgY7u;3mkJ-{x=0+9!NGG({Ozun)6p6LKNd z4LX0d<(0x}-zH6z_pmg+b{Yq*ON9fpF#n5OR=M~ih5PJ&1!HjvUv}%GlvTm9a z+qS-jhmL0LPQMxb7ked@kv6n(u={)Amx0l#uDUxv?Z4p+mz-T<4b8EmZ(Tkc-3{9b ziW%o{!#~Q~=N&p6_T~MCg2}C~)F8liAeT8p@E&+({1aUlwo_Unfp0n_&t{kHNVe3Z z^WA^!+-A)u)A!}P2<%?GxD-vXF{;@3H|g=)G|ZxXyLoV7Ft+?kceaqIkJ$2gyE0vz zXd2feXI90Z)FJ#yL!aHUbRetLiE| zNu#DCC;I++c^RLcfLU4PT&BQXBgEiDmjdsVX?VkQEpeG67zabH*_aR^5(!@}$YSb_ zK%3$lf1!WBrO4O&bSs_MZtAf!8^Wr!#NV^IVl_*sr9Um2RM=6|$f2>kSE3^2ttE}8 zR>;R&_j7??J4&Pjc{Ls8l-jF?fK3e(bw=EKP?Nhe`enjl{qIkEyp{ zi>nE?MiX3uyIXJz?hxF9h2Sy}+#$HT4({%5!QBZO+}#4fA;4gR-Tj_(zUR6756qt0 z-K(osRj+kX%oFBX)ZC`o@Uh$5?PX*@Vx!?0yiVV!a)g=CkUn|}&Oq^{DjZFMMYWU& zr+$yLY^`a=6<%*iV*GS$Z+j`cBqtzhxtYugRj*)wXq@eYwfUMRqDl%5X_D-XtyYjW z_PmJbXf{uzDGrNe$3w3(Mb@k*)#HurSgWVCxgisvmi{H3&q%VFrBOjyz17CMUZj-s zEyUS2SH|Kg9{qGxSvy~s_Rhiq|9e4HNYxP05vuAh`3_cczb^mP~1;8Fb)<(}TPR+pSyO|aN zW`n55yke@yO!)z~@l^Be#j?PzDa$A})ey%C@~N)ql}X=^+-<#+^}egaM7FPTOZjxH z|70;z>9B{-ZXdPU5?(7AZBLAdcbu#A*Tuv3X9XH)^`8#tTdX;=u9=xfst}3}R_Oy6 zMhn^7Cg)(rkH8=J+?;S??%U1lLi~T{oM$VkRB4$z%c^eEeZc%MXgCBRB0?q|npGm2 za2aVZA3r+75(#OXg$ikwa`&>U{B@Y9yk4hROR-CzN{u#ovyoB}YBs%^nz;Q$G9S+O zQDfz7dv$2?Y=~!^QMZc8+b#0$_ENeZ#?`hzHMR^BD-=QJQ{vmAM;)z+XZN7H$H~v) z@3@a@?LB7rAJ>_HltVg6ssTU4sR!ek1>@3y!&LQNm#4~iT$e#NWgIX3!%>Uh<2MZY zKW%crL?`;@2TIfbQnGi_QBrSDtt=!g;&_C*NcH`= z)|4Dq(p5VCGg!uU_>*~i3N|N_I4b$KvS1rM3-fsbGTp?_ZIh>9*Q7_1zflv$6yA2f zF$P~kHwe;rIUeoSM*m$vTn4{w#dyrS;3bgb30kQpjXOFPy;cNU1*&yx7vl5=qDY*x_cQzR)CgKbLR|le z<87kCJiJy{dV7?@te5eO-)lpGO`uP*kkN8Cm&vQq0LP^>=21!;r-RX+lx}Zp%_?013!8q{PcEt$_PgGqX^cM9=e5F*vBHLSf8+oA8lSs? zoX*>Hy9oZvp$acX>~<^8u_x zgB>k?ha7E7pkRb!?swCTJr6GgW~s=caz=L!kiBD`0o^TxvkfoNz%ayfzQs__qek6D z2BbiesgbpYOA=N7@DUC(?$8ivoq7@Hj9WJ16uxTd!MD%qsZ<4U#K%)C>Qal6Z8Ayv z#g`OX(P*LEK21QrgnzK;O66`DMdQ3N!sdW=ZED_84@b|5r++#diypo%y3GAL@--)= zk*mv+X>#N?G+J~gK8Z$r%r()cbdMhEs_0f*Zm92Jye_GgUl z>W6+KT+}@ut1vn1fH~djqfPb3O6u&>`5NmKg`%)~F8(gIvjQ@^k38|b*x^Xj|E+yo zJM0&LiJUDqHn{LJ9~t)KmgfbLBy6{)s1Q+6@TiJ>h=`6T*O>i*s;R;)BUpZoRj`lFmi4W7$^P-aHSP%2 zUWkKt!WOL}(RdS1r@vWnQD@XFN@Yi88_n7*jso+B#>F8sR;?XoNUX_vV2#^5yfDxE zFB9Um!x*-&aaT}r;Aw&T7&9IE$J;CWboRoQg)Bsq`hA(Ep-|=D-QnI+6;e z$*>_dMczQ^AY|VA9p#SVYN6vUd8~>?20bl~O(D;(2w`mGmFd1i z3N%6h)j;q;-t#%Acz>N7P<+_%ZW=7aJ9Rm)*l3+HU5}6a>N0fbH=z4poOkr7Xm^f! z@D6^@8(AF=!#^$%$hRKMIUi4E4V|qJ)wuIR;|;NPhhAZ)-7c^6dUuCma{j1Wyoma# z2M83hUyFSO19IZ*HEs+bEMzqt(v6uc5*z0~mY09H4PRA3zgFw-Shto5im^mX*f%nc zKG|%kww=~~4gBF@eOpwF)?7KapYUY9Pu&J@sQ=sWaxhqsQuK@br?yQep+!sSKuna5 zW;%##`cQKpW`*d(K+~gMJ4M!#52~*VZQ;jF;Bc2FTg3gf^QNF~U zFVGfxRF+7Fl-||@#De>*rFzBJ(CixNK?K*~xW~o)hrd8o3vq@0AA<2+kJ?vQzM9;k zw!v9q9)?%59_$&~&D733#nUBPYJPrULBZ$6D(Zp8^73$%ym3IStj+DbE@8}}@g70n z7REP0r8wCu=t`QI`lq={I%UC5V9VsO!IQ|B3;HAQmf+IV@I*uTmxE z=p@1>?8)ItgLLNq+{az0r^pIt%yJqdQSLt{&%}eU*6K}JQ2C{k6gWRl+)}d6ceB>m zbV*n-Nh$oHGU2-ih_Jmpb(biaJKTkl$roJJgd;h11MY`Gcd^8z9;DXdZFqNO>u<(y zxzlrY7${`BYa#D1A)(}u(D8yX8Xme6^0pU#7EY*Zf&U(Immk^dv!}v#&kw~TR9Epj z{P#{+iCN2NsqC3^ElS`-TE+c*7KK!XE8j*Lb^2HP?{$n!D}f4yW&QuVwn^v}cNe@| zZ4S6xf$YWQoYeEuP|DO)%EJSTY9E-@izD|OHBH6GmxZADXWjBaq+b*2%Bw!YwE?x1 z*k6rg;)I0Qe;mbFE<-;g*v2>4npTPf2RuL*N>PS*0KZ+@H({EPk zXt_VMu8H5O*k~HZO*ekwIK8G}b?Asvv1BYX7F|ZG<*AZgD!g@vJWS|{cG7_ixF<6T zv51$=m&FpE_Gq9IzvedJy8F6Gd;;&xdLnb(tjA=9{smHRfSKuMz+$bX-v|RsaU;GK zak3){KMr-JPcayROs9RFwxhf2OQiBQoaE!arYa8|U-Ox#ct}#u6_s5=;6Y3KH9bh( z6JHHhr+t3R(tsauhO`uv+{`!q3kfRRSRq4ck_GJem%TUBy=n^+{z_4rppBe7=o)%T?@AHzcc@vWo11WBVv26 zKMpIueS3fCEG3t*Y40_T))$l7h^hFuR91tF5M=!^4!Tz%fHvJO-rbL#y8jECEPayv zjtq1eOyaUFru3VkvW>UmxBXe^7-L{r#Szo8%g78H#0BoK@0M#gHB`SqqEH_P#m%Si zdh`i85JN7;uVg0FR=ODH67t8-YodGaNBnmQ!}Yo%u+_x}qOiZX?-Qx;qh))QadZ1w z9epZPTW&>sou;E{g=S4^Yw`xR_-E8tIgHtmmx)GvU5caN2%0M!Zb(-CfcFy`G|2@T zQ}O?9iFC%^-L7O$0*=&)JmsZKt?z(9!$4ttkg=bS2+~}HL=&q+*&JAZsNy@+gkA(i zew9sXJN#NnK4AAAh-Gsa$qqoQTKw`blk(oYau@pU=KDC+sMwN+@XlxOjKAAugeaDF zeVQ=0(~0l%KpOkVqA;p_EA8FzVwIK|w@8cIsIL?#K!xTzBU`cqmrZ{{tKG^p%RtoI z9q88{S-Dq5A!CCXZw2$h?LQ&$t9Q)9^MB48fy#!_hw58W3gmlfNKGb#ZGk))RmESG zNro}lWj5QLc>}@5UKym{->QD$Zp+^-8?pbKj~DI_oFrxH(rYf9In-Tz*dUvWBh_s} zTg5vmxI(1y!k{9dU!Krx{HUcsTWL8-JX71gR3%cSoeTZ9^MUp40p=7U=9S}J@&n%M zU+*x)*^xjT#4zUtmmY7(U#eIbcGXa#M&>os#AeoqshmK+iZJwzc$h%W*C|Fql_`aO zY|xcwF_e{@hSVw{7wN**8qn0)p;;(v#8}MC1Cffakc{-V3?%xR8=^ZG$%jkA0 zX0Z0yy-8qeY8a@D&Yin9|GLu1PU^JEUn;P;J>yP2-&hw?>CRi;vm9xtU7%ul?Q^Kbw)jx1p)_u%j0{!pFha zV_Y#(wcu@GSIWxL`9k#NLb{5g2G4k`>%)r?>k(AxuWhQ!_n`98|0hy z87*@zLnt-NcX)V18^;nD?^IzQW~EkcPi|bxYBrojc~Uzq7@jfmsKpEYS7?MndsfQ$cEQyeRtFln;`g>jd?7XJ2`H9hUuf_83j^HCU zr=lrC>OC&D5R#dA1KXc|cgcaWwb3=SgU$hyI8qw4hchAx3}+85qQ1|1I5$tXs^mSg zcdy`-7cAtmpsicgp3@9p5T_u6;Marp5=29tLiLT5mo!Gcqm&mTvvKP>YP0c#RtH~* zt$!Q*zjlClc`m5KKYlCjZNELb(@+mql0X;9?_VDXQVsGPO8I;UIGiX^K&MGPiN z7@PN>uYjh8&|~P?qI#Oen>PEpy`cXU#59fbfez-~t<*$f_V4FrkFZ%!5>L)TX3xaS z^t?5VZl=Ys4PfHK4EgtnOg?)QeIZK<&kw`W9ied(iylk9>(!%Qcr5x>-uHlr zY!A9$dyB^0Sit2jQePP(r1x%t2-(}E{i6I4u`t(jPY9Ko$8oT7HOjkq2;e2@X#N{K zxJCe)0jN$rE-4>vc5z(7tA_%5fbpA34W^jq?#tQWs>|($(S6=TVoH^+m?!*qQ3A)a zhF1xRGl(tj#TKpSVm&?wrXTBIKEGf!R@}H|Z)6`tBK3`GdhS165{DtKR=J-{eZCo< z0cN!p-}%1(L7Cf%UlGX2E&?Mw8F!(_lkc!R?%9Yhi(ZZHZK@*AKYuwVO;iswdd!Z7 zPA%9ld|8LwMh>xRj9zfLsZ*MB5w05QAKT38|<*w=ht{k z-*srb^UksQZ?HubZH8b+^8XS^pW=^wr*l(EsLIHL-l zN(-;$ZZ1he#lE(V(TD@7^mWK?-c8)eIbqba=eq!FM~hThZgac3=qMy+NSx3SctG5W zb#GvZS1a~tDsQF5_5WpbDNL)CX7d8`vO3w1LO@36BfVze31c1sOi@t*E1POuWIwPb z?Kk5o*jpZS7T)tNpRn%~6~~#xliD6n4kRVqqICpr{%vmhaeHi9CaSmx2?G@s4cU_v zcmLqnb8`HoxPBID=OtO{5Zh)*b|d@l9lZ3!9@+0{?N1{QiD#asyZ(FPARi6vXWXSd zGzZpHmh^>Ur|xW6*70Pv7s)E~#CeoUM9??$8FK4ufO*AbfKWu%O_{OK;f;WpOu~SDa#aT!;6lL$){T?-E=nsdPWuI?C4KTcx*KP z*w?nyWL24mst-y?zM-Mt-P|@eHj9{9dqE<$Jjg_9+7+qozm>&NCa1%_^I?mcMnhI~ zV{G&pdLXi4B}asp4WWV-5@H@Ia$qyQSzHSDWp=E+^TCzg(7kV2sBG5Ilhtc=y|gCt zs&KYh0WE4!)JAIXoILfgP+99PH32^*9I$di2@_3!b*fOdyL91 zE3!a9yAz=2aTC%8q8wiPwI_z{2aX^k+*Q58@I^;%M;=-urLT|ywcMX8aIzp>QtgT` z<#3yPJ$h!ORm_&lMD{fQK!R6Y(1&fEZg;b5n6i>kEKJQlf$OFjiB%a{2OYq?g%9R; z`MIQUr?+H3X*OQQo`{VDM9&~Q2kmlud2v?2849UhJbcqGu&NbOwcMuMmY3esM-;~_ z&fXVXz!Bs|>e_Z)h5F-L6FS05eDxfgRs}I|=;)`bXHd}LArwpLiOh&~IBx9&lYahv zz)a@7fy1qcF0-(+HfE~QqVWJ1%i@6Dji`sk6h&VVP<2dO;>_=8%m9WTIRR>bh<1b z`ziI-1ht|T3V1V0J+-kicG3fZ?ypO@%BHK={rm>z8s}5bU%X$2HL{kf*P8If zG53R?8?7dvdDhKYwz*#NZe-aqp-+$W!y{LTY9I!h>gMMsecNX!2zNW>S9^qb>s z*KR|ugOOY9N%P~QvGnawsen`oTYJO7AT-DuFZnn7b^@th8&4LF<8Gcw#KIveuN4|R z5RbhX-*vMhc0o5=Ns7qvQ(r5+Mjo;)FdxD zKb!PpR1vkol=^05)jq_5QDti9PFX8QDXo7Bd8zuo=JDfl=>A&DXH(hhGrVz^v}p%3=D!81 z>+W~^LIct1`6Ls#BwC@^OsR<3TL88o7T`v)ean_G6fg)(liHvQcwGDvh?57@!o zjy8()Sd90Q%X@G*3j|RSk}k?Ni#2*_uW!c-6*-Bl*_m_{0STBC6!`dm500%YY;3Hp zp?xzmJ6j^b-tLURpszS493yIQXENeFS~P`7-6#LEv!k8MLlQiqjO29f^9}eDuu9Rs zHkbx+DUOJzO--`7p+*|~SII)@?R<{0Cf$hZ?+rI@4SWz~9tNLZu1rhRMa@mi(%oDjv_4qEVu+_Zf_z}T-baV69B}$R#25#&Rx$O5G zB2pjjB~lbfeNo$cR=U%#FltNsH%7DQ^JzkO9Jpw0R=&>jbJ$gf2bQpQiuE^Tr+5u;-aCow1&Vn z+*CJEtsuPc^7HOc>yAQhmN<ETinF|@C&jD#=^dpOlt7BscVZpFL zl%t47xp)mYq)8PtT+ z4oOY_rgNL`*FiN)vw0K;ky!ZyCadRXl|9c$ffMnT2^zF-V@j;oS#M(*=Z4AcF)EsO2b5SPVeMJWji$t7s zV!O>|oa%?W>1(lH8LxTQWYu1$VCvw6>||UD0@)|B1i)1dQ12)xc!z+1AhU`^tdK{D zwY#g9kWkOTfqZqf=ro0N0=}mC5Ri%$9tHAt-n=|t@Aqs5t34U0!elu5P_Yim_pmw8soHAYe`L98R?}r=g?52X>6SCp!S~!xO zB8d^@GC|g1qSn$5BCe8I~gK>;(;xl(}-b4Xq2V{8a_Aqk({4tK(((<24wc@t;W z8*Elj>X(PNLZPisD6*jZ9tL@3BineLk-PY+`$aILtor-$b3jqQrsLr%&%^zJ)6C?CK&4z3k>|*SSyv_)G87z!2fv8AtG)^If7erR4+mG1E5BZnd?0VAYNOhi5 zRRTX=&5kRA0N@Oma)0zux2KUTPTaffb({z`+N@lS`&it+_kNuBcYa+mWBzt@dO z3`kt5ShGpBG@%J=CDaf&vcw?nV*TP?hv^Wg_%WJU{=ZDO*r}~#ob@jET29dY;oh5F zFOY0oc<}| zSk;+wDCCef@!?&^`D1K|gEaNU=rGev5AS)eLpIuarax14X@8)E<#u-NL`MV}s(dNU zSlv4~^!T!%;b#t%c9y94Q!u{LC|}N2sh-gHx~vQqnq`6}x`sE5++WW~XOCA|dp@~T ze8$r%A__;~ec9rf;4h>f!et<|t?t1NjHX)#XYV{Et__SU)QL^}sqgO+l4Tnd8f2~1 zhM)skrt3le<$8!;0kvB+S_ji2-y>#P=sivy|^abKsV8g6SIGf}d zN5L3q&@91|`SymNL}i)50Y;%pxM-9Ed1}XY)zNmquYxD{>hJy|;V)}>d4Ca9p5j=G zOOH|E#4$_YZ>80yL$~}ywNX)voSEM;S4*6|mlk`sbr;SHw#;ri;L-mI{>08O`*ky` zODPu5om6)qa?pvT62RVU>Ej$Xrh6WK0C0MA~pHqVAXEM!!0wruj6&qoV;p3lYqH*i+nO`$ko1LE;vf-(2PbwhLmM8KWJY`KS5WT?IFdxc) z(MAh@rOq-KCE=iE6(Ayy)_8TS{RE)hm6MY`+w$I6lAage-5%u;k+6yV#T=z=<52X}ej-Tp5hof3%fp!mHQ;b%lFT;WNpG-JbJlr+DdAVU|@ zmpYyyB1*OFJIV*pfy`Ng`LJY3P+LEV^cIy6eto1F7;*D9qyT36zed5P^M0m>tviCnt-YDGEhW}rPRY7&Xb2(2_ONUp| zx5S#SFLexrTG`cg>y`@Ff#9<7E<1xf`wyy{%dgjg67ws=9Dy*ok5J8HLS`m01;sQP z(q~_)LA-0;8S>T%@`q&M6J`?qdeg!$pz?}=g~Tt+o^e~K&?kxlc46bd4+FL1PPs_c z=^CQGqfr%gHxR*e;eoq@xZ1Df(L%*tGuap!wD?@BjO;IZ->v0yMJAR<>sZbafSX0j zg`8@^Pj-hFcGODpFfg#6|)HAhp4796_A-HYg19KL`j>(!lQW%+;WR>q*k3nBS zZSfN58NWWldbZ_3G!TifofLVM|G+{ALgn-+c@XtGF|aLX^0bOYD;D1d!N5Ob&(pef zKAQidBNO(ylM@okzz}7#aKcQ8y-;AlZ1^#@=QB_TjTJ8v`}XUCgFZ#}v2#3+v2MPg z{#8DiYd2V3Dh#xK$wTz()pHI7pWk*-+XPndV@W;s%@Q=fXTQEA^=P?2k)XE!eXR}C zv!4>mVl_C%^N$mXZnXuMC^v(4#O^KOHAd0HZNm-5uDs1apL2Y5RhlDK6nrR_wuk&}+uxe=qIq=+9{FY`Yh@ zSH_N2@jV{qAFhi{Y}&vC=3nY_rHDV+)XlB%lUzH`&3n1i`Y3v?Bm7PtYVj;NLiHNR zF=)t(uoh7zf+y9vj%kGqy-@pNF;EEnfgh7YZmgCMhQ=pIUfX9aC?}gkq)U##*?kLy zBzHf*ag|1o$~gsk_E6{{od94NZyhvuin^pLH$a==hg_gCm9vm7?5AC&dF|PL8Hqoc zg-$+m_;0KE0^RG8NE9eDr5=F{ki;?gl}G4XzJcOV?|cuJ*);Z1*?fNYk6f&z^?CFK zIJ7lJH$ho`g0X1h28@VnpcQ^S{UO62X_20tB_Fe65}~^11oe@+=M;tgEmtbYA>qh7 zek|}4s`dU#0=N2TtGvmS+@3eyoO!Mxb5^XePkwcZY}m`^JJ#S<4}v<5p1fLik2ty7 z#xpi^bo!0ckBhi-er_fRpNKC)i)=ezF8Q#F5oKeVHK z;|4)tfUT98UkxoB)kS*#9z5|nzxBy)g8gi!pR-0f$tp=UTc{R`0Bu_NtgctpiDfXN<~cpNqtOR|^49>1TlHWv+WMXvKyOTzotu zoo)5FUA(xCj8q~X=q1xj@GLSm`Q}e;uDR#fD+hI9SBoLf$q%z7{&Lv(4?n6vmx8Wc zj=y9xlTU}YLXK`$~$emup~=72ST7`3!M9*RQMx z!$4a+TilX1LxGfiehC^!wt!QQ)1xpkxm+AlgQ16v8xlMSn0_JTlf-d*hL33|;?-hc zPLor9sEFLg%ieeKu2C+d>P$MDmBZ5Oahh^=1<`f(yxB@nFS+rpv|o)jKb|6vY4giO$riIO@@E4TzNPlOEAEJQqFFT zK^`AJ|BMt}q%8_BBWgKGABXspg?Kw@%zpvOvC&8QDlbO?miqT(&tJ>r+WJw7n_$f1M_F!&-B4RZ*v6lpNXrQ~ zO|n$f1y?%p7?k4_?Fn*n?#FaWTn-KGtp80<2J!aj?EU1 zvEG#W<6c0sQU)jE1wsCbqc8j-V8!;qsO&&3G>7y$(azZJ>kflrD6tRD!sHh1ue*@0 z$Sx{Aq!>JP$L;%etL>+G~aY%wwEg`h?X$`2oQ;zxi|g8uAHP7d}ZB2e?Xa^p~vbsny%9H;aV> z-nI^0+hE|D=WfpIXd20hE0j1y>+!o(c$CdWqb*9u23EnZl~`JKwQ&5R*n8AjzYBw} z^!j3=MK*)SU87B0%M%7|Ir08rN`JJa_*BUKe9G1%m1RlN5G^h7@TrT7?C&PN`TB_Z z7V(zjl!I75V#kdRK+&$@+)8uo&A;FnM%A zNU-@+d#Zj>RlVyX=LS`>XcYP5(HPGG&FO-=Dzg2$rvA@}L_w4a2tYI{7~A?QD+qW8 zM~R3B{f&O)eVAOHo{C|mpEnyca7 z^D@7VKcIIrAfKR0{|N5Nf#~u&$h@_>oXrT*UN;_r53Qz^^;@$#b^Pm>M1ah6Kk0Eh zb$wkWv+Up3qoNiFMg(y&yS9xQ=3UgGt=$jf$HZ;#+q2Tb!mnWsfGL8eZ4HK8%bLwJhjZkJ2-XMy;)-@f&n-rg>ufzKw`%>QMtBGdgxJ2Ilu zE)n44w?gb$p!ajDgX(of;S9*q$nuUG(pE9fmeUiB&~kRdA29QOY;}C={YRLr3~AZ3 z6?%=z{&|c=BA+%>WD15Va(n_FCd`e9Wa&(IKtk=fsM#f0P2?6{8~nLEj^U`NTKY0~ z^WL(?v8A2P?+@!FS{Qc7dkudf;6wT+Yk{Jf0XaevYl7^ zaBkt_NqpXhcZbmyj|hf>J2kbS0~L^US3q|Bi_5}E_kHyFU?mhR_8(C)iJqsr^<2{` zAu*7cgng{F`c;&&GNos9Zy-bpI+jTC%rZO-d98SKrt_Q8Eg!83P2w?O{YB+S(-!a_ zp&QD10uFh22ncw`tf=^+$H#LI%5L}RoT+_p&M$>&7A85znyF;qH#*3E;^~Fvm#p#q zWJ)BHdBq`GkB?(E*N5tInE)c6l^&0YPu%dmtfwCK1ogv*578*04h#-ky?oEl zZ4gD<+eHE${Re#pB<2Z-B9ixyi?-oBXF9h_=zE)jO5L|Kaj~-{{aw>w09NBsilU)G zeii5_C=Jc^?KMCBUpF3|{B!t(#o!RvX(HzKP`G4c&+{N9K zV=LeSZwTIyc;I`*W{4`t2zb7I@{#m(<}jSa)*vEAHWu(+=fo*h7g!TWf9Y} zg(?K><|2OT@-naM`Ybj)9$~@8k!>7ZIC8zkU;t!=I1^&YJi+u=bwDy1xcr_?N_I&? zcx2d9+EE=qm<_S}(-pH0^y~nLMaAW$w+fA<`+&i#k}?#7o3 z-2*6dbR!#=m(zJS zFdAx6#=hNZdAv9O7l$$&VEa)FZypN#};r6%v zYvgcva7+aF0Z|Z)C@R+;OR~=~sevMbHqISd9M+?JazoYsZ;5^PvGPqILkh(W>HYGf zfv2<0>}3F$y;@dRWBiZ&`5&5Ls@f^eoO3wSvT3!tFph7hdA3|?K`p`(0=j*U`?h${o#CHEN=YgnI5y$EU6Zwt6v zv#?H}y(UZi?{4%-c#wcf^y{vO^fdX5U2gkqwgXV@db)Ie<@(>*p_7$8E$0LeqC%Gj zSarFSf-Wd^3{kMS7!1&~Jhl-3;^Oi#1~8-j=lH)rFTljf$xBB^B`OLuq1;MR1`UdR zfxrFa`*sfY@P1f=)`xz}?ZHF|{b|@eK0XeG=?+-K{CSO{E}fX>8JajS&XUR=_8oMH z_gBlhzC>nM=$qGLiM>`G!-wc;+&nelSlMpD2mdx`H0tuC(=HTMW;&U*3dwl`aHUY6jA-lCEKn?K_IOE^+x`TrUqlviKKt1|I1|f0a z(NQ^Q|ET@x>FK<6dRCVIqcyH{u9TMuheKDm>Ly!bOiF&I!CyVb_($cS;{V3XA|Dsna z8?`d!ye-h>g7#liUybKAk}ahF5|2d`vt@#z9GGDfAROG^9@P&Tg)5j8LHnWEVm-}< zBI%Cc_^@^FUJ$w_3IO1!>Q>%b=7c z6$X%gr(2Cu7B8SodG;HytDmR zAvUL!o~uU{YGcU>oSe5H6vhiHp{DQDWAcGdOw?8YBakcTZ2{{KE zel?UHf6K~}{J^C={CCdo_u=Ed@i2yRhG*gr1Dkv5-lR|?*^mh>efd$EFb6uXoj$7Q zX_AyuAT#RU7m7mV<>KMz@t=~qy~r7F!LO{m?FG`1DZA)qk3Xz<;qTf4BIeZO-tge% z8n5WV3#QgF|HA^je%l+T>0(fH+g(6E*S(^yG=hY7cl!dehYJe}=oF%)`1mqn#)XB2 zYz7?*h0>_HRe(W5@{Qh03<=-SBePa*byuuJ`**<50pfdXP{$4^yK?jJhzJY!IPydd zFlc;vdTPr0NtQyw#Na`fC}obH?VGs{L54v2LifM@0$IvNT2h&8hzI{0N)e_%*z`!J zrjsGs7BGie?9Y1}U-_y#rll<}b0iVo2(2M~mCiGaObHZ#xLN+0Ip;4hm2Eq+mM|1> zI5GOh#xb!%z&KA3_#AX@EO76MH^)dwND&=%0%llJO~jY{wyW8QnX&>dolF85)Uo>e}KQUm>e3kXTt6EMIGXo8-b zjl7h@rqe+Du7GMJWHXIb?{4W8(3+fm0R%-EG9|uhYb%U2SkhOq1GYL89XY_0o6DBa z^#bVfCLJH9%YFNv-TRp`|2#7*OD~r^o|MDWagDr01^knr$Azv#2ENK`eFx+`lpc=lKpjrcjh-vBW(rsnBEC6 z`dSn%&Zd*-j;;7$f!kDviD}Yf<`v2Kv8m;_T{S5=yH(MICU{8-DN^X@?j--a@B3DL z-O1xe$eq;z7alQ~cOr09|C-W7HiSWo`spee>eeKF)a-D*C7MdlIAO+?U!!m-@+iU@ z9C)SaQ`iHv>J#*faAbMo$X;%MDV0-AR=Q}iA6Ln#Wx?dp%|;dxMk<=eW2inx=391q z8OC7O=4m2+{?&-B2L)%?Vu|Nj8XlAd0w9lE3{zMjFz$&HY;ln6tsvj(ELFf)-fS>K z^}VN6OzmnG6A;L_0G6@oZ73N0+oAWx?RsB+$Qjt}((X_wQ~{vlb_YVkF(@to2Nb|U z0C0|QdVPL;_R+at`t>U$_lt^Nlcic3n*jm_`Ps#V^8M4}<7A##ulwZ|pt(W9ZHZZ< z;^igiJ@z||-2!l{a@gvMj*c$mYi?>H1y;ilm;fH8f1}-bRgHQZu$-94-~tSllzx}V z#zaRSWeAfyj3+a$x7c|Tlr zTa0RH;bm2ol`YHeCOJwJn|K(!xAVoKPiFaR?tnUJToNK*=@GB~H*j>1uQ2D|ZNETp z4(Fz!I9S9~nV*yux+&CIQj*^)`Bzn0lZ5#_$3bg7KE!=Om;kZ+wVY+_Iw1R1SqDPO zN}F9AtX*W^O=)3fQ9 zYh@`~*ej~;Av{Va|nmN;PvRZ`? z?WB?FKIbA4*{xbPvqu@rIH36`!|A)5rS`8;acTUs&IRfk@n5Sw`P>1A^Mb!hEO0NR zT<&4u2GqXdYUFXNX>NGmwD(gPTMj6shWqoS>sW@_HA62NuU{ODwe&nX$=x#iq2}SE zhigbTsBizqa`$L`;;BpVO7FME6+ZJ_T>r}R{){T46c;y7@L2HArxe4@_;azCHrT1i z-+tzEv#rf+?YWjZT}+$fS1#VsZv*$i5;M9BOj7SVT4Vh59UUMthyDH}_gTJ={#ieT z>zjR&{<2Q?6Vb{|zP|-dBDv-QY-bSZYHO|iW`{;Odvr`pM*mnPvu3rUtE=zTo^(YS z5g}ohjQ}8j{MlVsTU+h`T4+2N2H6H2w*E6>>i!9|nCs~C1YM(gOmS@L!k=GW05r+s z2^JHttg6DG5be^a(sbzr)|5(~XbLAvXzqV%q|^oClCrYlxs6`8)}nc0_8V<g zoB#$p5m+=UbAP9D^tjPYulL8!)>9hYB|H0?)IrP9V(au-Zd*8wikFz6h~KmrTz{YN z^w7PwgkQMR2(L8AZwk1fKaqR$)Xhn3jv8BAup#xoyD-xT*pppa#){Ki z>hPoQG0}HTD>4UhQ+Bgiu;$hMbF}#9Siu)oMr?$`W5hez($SB%Umo3)j1xmY>+{dz zY^hCVi)GV1&oY90z){F=w%KP}I=&n$Jf}5gB9LSsWL`#_F@ncLL z(ors33(Okvd5v*rO-kP%yl-@p`YW4kNruYI^L^Rd+mQnO43b014k>J@-;KJ&#w*xS zWMh*>+gYa2Bld~&Oow%of9rlB^?RyxlW2oyp&a;lBW0sTGPe8bKI_=Ghxn(}GiLil zz>VuLt%MHt@2QfW?*XJ4@oJWoFfw5<#azQx1gqFq74#p0L&D^AknlfgvB5~pBhORG zVOeqP&-9-B7ne0Yb|^|sZLKI^T#iGp3YB9EsoCZgmN8ajB0#L^=H# zo)rP(vnI-Y6ej-(B-=Sc?tZ|Pq1h}zf0WK0w6E2p)96z@xTS!#8_AyMt$$R27s(= z6~;mrffQ_4UZ53pWVq^O~C&d@AmFUgTkB)#BY45LViV zm#;fcd;bD4;b?Cn&apM65&VT+fxz`rT;@yHy*HuGUuln6L{K~t{Xw@1YW}>G8g#_M z5I^ZF-g)OuBZXM>gKYnoK_;O;oy~PtE##C zl9HFRL|XGZ(wM+8nx}(7EqmI7+0v|YSZEMC+nI5myo%v|-b-SJQW8_*ms=P$uIMCb zRDuXpZ_d|{7Qno$e4i9qL`ucOeF+00?0d2-NLWSrj!0ndh~iH;`is0$jX2O7^6k`& zZsw3g)BN)I; z+q~#zgr1qj<5j~*^-u{wJs#t5GOMhnhBfD#`^APQu!817iWT<2STr(q+GwbsnVFgS z+x*{NJG^{2d>$OF_#=P*WIw*6^i}}aiLkI?0+5fIwldCFHtx3GMu{rI4+A{vP+`B9K`ufnx1Shfu)OSS*$C2=N+!a;#zOjmBhL{Aj zs}uahPi1vN(BcefW%FkKeNnOk2s~++n<)+K#alc<+QZn^h(y5x<|)%kA7ntBdsa~J&>UV zn5=BOhgr{S{7V7E?{Yp=^{^a{ro*-I^)?ilHO{&w=lf(k;Fh5s+CLH4wt0odKL1Ty z0iV@Z%4hdq5*|yc#u~d*Wi<*aYIk=x2AQCg7bRt0{A#1T77Fdv5FqPshAQm$Oo%>} zCq`iiYIA&V$ZpW_4SEcuQM;o6VwtM!-aO*aeF+eajEbtPthA=;Ia;d8%FQMBF`1hm zGe28z#W1|w>?ANGAt7Y1{nx5>cj0{Y-e;e)7ijC!EoGh=6OOIBT=~{AAcVni zqAa0;B^XD4_u()lt+K{y%sV{=EjUN@lm)nxX8p5eT%+4#N3nucv{GvXV_Fb`>x?b4 zY-p!0V?##s*i*sLE@ASYL5-chVm2QkexbX2sXZ3x15p%I%+xMUj)p}$ zHcal;Z0m1d>QT^mObB26d>rWsJbyFB*&j%PZzBBex%`gsoZluaCMmATeTUdbQ9VO| z3o_)S`f)8TZ)rKuV0lJ#kPzyn*{Dnbvrf21c;Z*aCe%{RgphU(-G_6H3u{6}VS=8) zu~(b$Swme+#kk`4<18+B)#)i8+?bzpn}D}>&h>z8cyVcJ>T&b-kAv8kCdKKbA)Mb> zHFW^qLDKzKnIC%tO+!WTp_~H*J&nHx4e$5je**B?Nn4~vue!b-;8$5iE+W!CM%LC0 zx}=npP{<0IJayIC1Q(m_nlGo>0^U0#Kv>Lyj<{Xf?&YPvzW%0&PhMG>rKu@p`@du0 zPZd2G10f@YIg!9Q=GD35I-M;5i$biYqfeh`kT$$-hVbsa>3`I$9+DP?ni zof?s?6vLd&F@zIOcTO`G$3d%g^ zRV?5)q}cGtT}kLO*9W8FOI)g&ueutt1shxkT&cW4VjLH~!Wa=L{Gz&AcQ*xtqe^Jm zrB@Cxu!rPiSseVOFo7IUgl9K{xD9|^AZI92-qyfrE0p<-;c4jL1D6&ie6Bx*i!@@Z zSCr1jNHk={Mk)~n@|h_cy5#NmGzRJuL|gPmOK=j(5RR6NRM}3#oJ#TYgrojpzXamz zX|?Y2B;7hu$`o;z$I(uI2D06wUpz|pJ^z`4+n@CcwfM2Oov{wXp>qpAdBU|Pkvj<6 z2&f^&6x=kQkd*QO55tX{Z59dgMt--eqw#t7Q2HU9dkMQ})(thnAL>y+K(U^r{NZM-zcz0A8rBCI)&IIx<4Q`gTBZ1YWBcjD#ru=(`ruU`bO1 z9v+^KOW)o@CwY1KU0{{&3LtKI-Jcbel+d)h(li{K>>`vx8T{Sq{Kn1A-EJ_01>`_c zQBlp2;vD`~z$o{e=krpT$3hFH8@Pf;=Cx>4*o#(YdkSK%&LA9BaVka8w;GyFly;1_*F)+3Sv3*X@|&SRGLD(cyY+Ra?c_+xb()JzF?AtGE3+> z^A{6RTtlBegSmfQN3Y<3-okMxV~dkw4k+Fe;fyxs!M-Nnf{W53e`*efb(M;s{AYvl zw5LLhQr$>fjTV8LuY}+5KA2@pOtOzqc_cGh_3ivXNF!Xx(FB@c1{?Q(V(h;y3Jw%KbJ2z$c>~)NvkP>E# zI+-c!`4?4qIVp7~@wJb;X@N4<#USYfxDvey>kv#EHeTm^+$pi7;db;A7&Uk`0VT$X zWK-rWrxjZ zF^*VemaGlb-~k+=A9Ou9rs_H$4d@E}IeQ3gwHYXVoQhU6TR8vKcg3;2=;wdPC?tja zT^3=eH&3?+V*D@Xv0Qk@T$Xp-AbIF|y?>W+U&sCUUivLxH~q6E1}HYBS>vv6Mr2&R zPCnF(Ae1w~AF2=MS5~5Lkje7T;YYy2V#ITCyBV8#JuSE@9C?#(jWgkk#+1}QQ|hiW3z}YIv15di}JN*@?dW^Cu{%k2CzLEz}eVGFg2AhVK zMuz^A*1S{HrK0Uj+n%F)_u( z#_G2^6~QN%Bq44@#K->y0`Gw|4gmoHXb53>d8F2_C1bj2k_!KEgmI&mW&>C#Q1-AgJhs{E$69_kfg% zw&3JNOv9y-G>2}?6z-k=*?G1LTWu3ehqta6xfLeip=_gTQRWSo-?7!f@;XpiqZKJA5=xYo5p+MgCVEg>aOh?@=VwcpL zE)xVq=bME=%`-n*l#e6Rfh)O)G7#X!PNagSTEHC=I(L; zEeZWYu;_wHNzRg!Hz}xM;b_#Obm;@XTXV{ z;?VZum^-ylqKukF&EA>3i@=r9>G$sS2Z`vL8wU%^ z$$SaQa}z*Jx3;!SS&8E%tIxl=o^jZ1@Q8|v{sDVKKzM6=`AP@KFKTe%QKP?T`lA7o z@OC@SY>MRnb`uVdRz~LSTG|Z=FAf_cBNj`Q+NNh19)NtTfK3W1_gyp$kxV%(E)Myv z-Su4KPY=LrMiGR60lDoX%|JR$U_20PsHUzCya~+F%pY(66lo2A{1ESQb#YNsRaGTZ z$p>yc0O2|1RBNbVt~*Bl)&b+Qu}#Aqg9 zB=Vl)snq^DXQ==AEx{HzA^mZ}o61j4q=`s+apelvXYPt&&>SF>pZ{g|jMr;&I^o~eEtZnoXZ5~}Ky=3B2zl_A@AI3NJ z1vHy}{48MREhX6~r4Tu#y$L4}pG3GvPt)eiRRPO_i4Ezq_aMj2xlO$-BC)kY#P}iQ zSmL)EobOZ^$Q!S$fms?mxA^O&CB{96^eci1)iqhE%*;BDerLRptqA45>|SFN$=6$? zHb;2S2KUeEJz@F8UL1o%B}i8%N&sESOH2FoHmBZO?CYXVwG{^P$NZaYSZ7rR``nlf~AyS#LN9 zSj30*t^oP3xn__OD}!t1gl&y@Jkb7YmDO(gJm2V9+he)PD6#m7jt-<$3d@~`=> zE@m@ynRb8QPT2m&fWbQ#!VZ&W;d*eJVP^f&^zBnoO^q~1uHogg!@I7rs1pa2l#Gpq zU0hUD!|%Y()!5RRbEO4*eX=<|i;VB1ka&dPU>z`ICp95=)qZ<{G8OnDB0TD3J7!p+_@)6e+*UX@c7t%t>H`ZGmwwV%F5ab=seH=j!Wdy&~b1y zB~67xms6NQO^uC2Y^D*_)mIIc^CLYNDojjFN;`8!vQC+9KlUaogV zpGpf0O{X$>0fCiNfI+IYtxY5_8i!dXJ|r~st4@OjkmWT4W@2Ij#771NL7bLwadE+C zY=#(K`j@0W$}>7!!0B@bn4wAqL%%key1_TjhT*Ov?!Jg&S3Vl0*`v#JYm9u$>d!*& zCB+DBNxCTsVK?0u{H|msLo1rz9ZZc%;ya3mHWncM5T_cvAdBUp!xG)1SBpYMOeHFoY{q7r!CxYH2mZ4(PrtjGX zq^-gT6u1u6IJ-q;E;=^j{PL@!yF#XIQ==~CTbN`A6+xp zs#eB2X%QMhRzYSDVe9VHH9JMg7|m(^3yT4MH+7r=wstl_YR=I!{UQbHnO#VZNx-Xk z&agjUmXO=&#V!RbW4w<2hE=P_sXMmWFA4cH4y&Zdgd5cUE||479RW_x#dg$cube*% z?d7iXYT+=Cf1@LYpIG~WjHdU+OgaZiAsaoLPVdVaw|3MUhdjj94gvh^h?u);c*k+uTlX zM=?-bIS=-YayM&g;#hb0S%-c0^rEH5ai%w|p1b?Kmp`41kAb@coZZi@1|H}>0@P1l z5*-7>1$*kG?QF$?9wWQRynDSL+^8rDbBF6p1)7@~&O4T}H=%O*i`ula;L9dU%!S7a!~E}A>v$U zFKwuJ{O{&rC$m|h0VtOfHQuxVEQNx&qd`IfJ^pNEZLc;6@oyiFprs=UdcjrLD<6#K zhwt#{)@k3(FRpdKj^)u~HJN@0V%FxcK1*W#B`1lD?fniJ>7te>@oAK~G1ru-HE zexScLXDd}%bQoj6WU4Z9JY{0D?g!mQ!TZf+$}~}{^L=6Wdgux1aq7w1ql!!I4p70*I^9D;~MchT<3NHPXyYHlIH7O zWVn|mr)^dCJE9BX>v=35uj$*0QT-&1kHE6ce4F?>H?x4JPy1$_t>y>6*ZQbn&!w^2 zPGjMTH`L8F6NOV_ErZDur=vZuM~66n4`qf2M~X)+di}r$3EYh5RZ4?^Qg_n=;6ya+xmCM@vf{2 z4dzd;CB*qtRkRxxJT8mto~|}N^u5{LdgRMkj`T#U5{0uft2LcY!vKjgOG#u_qHhz% zMmgp(atk9V7fKY-hGd+j zs|O&gR`QJ~T|32ILi{CVfoveuC-P3---bScfYPx@{el9(>r~1@ak3k!U)wH0F>ZN6 z<{Dy}IAPcc0~A-nHYc%4Ipbs_!~Gwb{eBt!8Mer_O?vGPmr>70^TX4rTy}jeyA(07 z_$QX9=a#;!1-hDzOu+xWRWMba1(fGgi$}JZWqiX@p|ODxmy23$b~&7h44B78=kv#h z;pTTS)c9d{1<9vx;!nKfduXq@*P)8i#UOP*mUeoWmw)R-ajNc6lXmJpWCY58n8z+) zKUo>;Wp4lE&pbx|_sX{d^6!8DOu7|`Phitk5~V`pTASX0orW#IV}YC77|GIQ zQQRrd?_mkwfo2*J9+BQd8&5xZ%P@L7uHYo^=_SNDog8YsKHRs#d3iiOpP8e`07Foxvrx|Eon6oQnoeBI!JhAW&A6W}wHp!heiH zQ3Ds$kd-hX`X@4+LwUTNkq91m)NyMHWd6L#)V~2_M%Co65K=4g)!zfB~bD=rh&)SCT#<`g*T-JSSx;*KP%~<-X z!(v}PIPqnEawv|N7fQSl_;8%x2Sn8y=OqhqtUxDm+Fp(iT_;>-I7kvU(MEOLPWeUa zE$ZCIc5QF}24A6hmEnvX63;!#*ofKK^yx*eyucqm!UIsIJl*QZe zxlmIJdA0c(!i3&H)75Eh;4f2w$PknB+vDb3&q z7>y``VSE@JLyVi0oG^SGi9|`UxgO(k)hDnsnP^I3@P{bVAFJ7BupGn<5V~}DewXHz zan)j`^_{Cc8w>xk4TO;2KwhGujbZ+eSUH$Ri0jOMt2c!1Mx$8o`c3 zhxO5qyU|VHnI~y%+GwzweXA*+;>zLKw7E!45QVv0J~z)Ts9IDN)t7IaKmO~|^_0Ke zf)$5-8No~$Mmlr>$*S568>8oEQd~4YmetMpWH-9@8-c4b-T!T;*kp;|li$|&GCy|s zy}oxV#YEIzMCgFB9jEg;Fxw~zgTSJr^R&VyrB64`WnE=Yx2N6qZTMn;7lCJeaBy&I z>tm-kxclR!qPf{!UVai*psl{Xesg03NJZD-g5Zz@!VgJNf7av(`CnaKA&*Bi*@sm+ zrR7&ZcL-Qs$V*=Y;{i(c8~Vd=n&i+TJn|2RT%C0}1?Xni67DpYJZJE~UJ1tS>I1=a z8tmnvWtq#?AF1$D*y&#={Xf}Voh>ZY~ zj@El;ly{d$hQvi5V}w0eEAyjdcI)$}jYuQ^jizE61_d58;{tQHnR7VoTo!_-Og3`! zM@tMyO$aW(7-n{J{Q0Y8q8cya?i1Wlgwji@178fBJx)X!b_{$$JY3%A&ptb@p6jw5 z(Tv9;XH38JQPlL1ImwXO@bLVa+yv<7;jQzHoNVC{|K9U(Th|%)KED$ZRP@ ze{VCfz}=Z0(+7s5VG1R!Dmvit_a(gYr=W^*8xS=Rkz%ya(ce%f<;jY$ox!5T#SR$CtY3kZHB{_K3 z{5cG&%i~tcPsZ7T#xrOfG>Y)}UXy4*IEIRHt84Kn1Y;w=BH4%Yc(uvS!IAX(3uxA* zrlh3Y#@hk?GoEvOjLoI_dh=<3K++CU11-`ZvyE>5?$``6EV;O;V@L1TIW=Nc{E1Lw z)bHK;l^3Re^}Q6(9_}ct{KNv&+>i@gX}G!%oz#h!%3D%sg5EBf<;dp zyaot_5p*q52Gv_Z?R1gvTZt^^VZ`Tq;*%6+!H9uRrd;mQ{0M;LRJ?fgWc)d`$p7;1 z=t;K;5d<`kQV9PW8lc6D+9+vkY;0?5GX)nC>OQ)!QljNxXAj0Fr=a*v=YMyiOlxCr zzuht3S!Lb`LFB&|c_vImh-j@Sf#TuPuB4_{CRA9fbJ7N8tyrqPnZYL*Q%Bdj=r0Q* zoDLfARaKw~D87uB8_y{|k{55@7YSUKvsl_sSA*89#QCmypWj(nps%eHSE z8cNt^s3T)&4z)^XDY)H&LbgTHDWgd_v04j=wjVR9JMu?1>AlA#5h018Hoe=vY59(t*z48S$w>(w>8tC#KW-PI1>S z4=E8HmKzJ2SKKFZYU*NHoCesM*4F3$OnmPzuBn7^cpZWTec?07X4@ROX+3Pxa-l{Z`_~6M#sNnukR4x+q#LXx~d1ZlJM=B^O@M!Vtb#1^>(nUf=6aoT@FHC?P9jES%+H!R%~pcnU(1dS0e0e6NANCfA)=O}4;p+6J{LGRI17Vq_|U#Ic5@M`+1c5#q~^xP z&^|y(cK*jiL!&j~2YY@poaBfWQ)(rQq&R^ZVN?buI}&$wf`^RqFL^>+3G4$Nyv{r4`R?1YEB%x)IjWV_N(10oS5NpO}luUJtKPqFXWg1kMhYCf@ zbyS9&`UAKfVNly1uQ(gPGxFy1Y$t6MD2h}ryJMTNZJP%zWIP^myU36sanlb?Bti?@e-aRj8Q`H}pb|l&o?ae;GA=g{Hk8*GL}id4AOIkL5`IH4wntairT=W+l4?7QF=rAp!?F>VRna znI@T7-@rb_+Hen!Zc{GOo<@zqy3{G&J;q zE^+*@DVun{+iRoo4~Um9HmmH(HZ9gznjCZxlcLFjs{GH&D#_BNxBomhu(?&~$b16* z?2Y~I(p$xp9LCM>M986Z(@?S5xU})xi9ieiX_OPLx*JfHpDkao>u@e$gJKfQa3 zDM$CynNa&*^xd{0J=!$?i8cC+{tKZ-?cU8xsipSSU|>9sU})Lf&2!OG_3k`cz8;*L z1se(#!KR1QD5uRw%{F5`>1)w3q81(Sx2{7{?C?pZ?b1jcMjvf;{`u6WknjqQi06>u z1>S&fP~dFfJUFUmWE0C0o@Y3WVj<0k)L5TR6SjBu3GD#2_SPWrQv_@7 zjATq?L3z(84-WLCnXBH4>k2{7xa?=4OE3SFNuGod6_RcUMwO+Rd%kA{H3L&E=Pd1W z(@LWrd+jD=iKq_20G-pSs@_?8tv>=ZhAA@w`Pe_JrYNDeEg{5Hg)#a{P-LI~4&uCk zH;lQzm4dk&!8->GC;ie!`lKuO$o~+&o8BljecL}Wy+g87v~-{j5ejB9Q0oMHIbZsy zf~XkmdxFqqz-PD_X!Reeaks_sVU>(xd=OXM#$$8*b)35BK3v&i)ivulDSSK`KJ`_% z{YQH1;FBZ8E8gAJcC+H&Y|tBn$~<5?vbL6v2(JtAh|zoKUXAd$(DwG&e#xA_!>zXAsI!!m+-OFR7B^oJ}2?OdOi5|{BPI0!|%Oq z!%lI|BP;IM%2uc+kvq>_-HIJP9< z*b|mD{3BB`|97LcprizLS-|xy3FyX8cpKp(mSAFG36GAA$+Q^z`1ojRueLfLH`#4^ z0mB15J>Od=w{!7Oi1~SZo~{ACx9B)A=-kWOyZ_LTt9s%Ix+)VZm}L-T-#WNOcXa=d zHx--k_5tnOF~7QznjU7!E(d3i_3y)DunOqn%`OIQJMplvwkHkiX7~IVJHSGG&u<-dh-! z1KBGhvYxRf{i^~i=%JYb9pr=YO6;TDgPt|IE2iFGsRD11m8jv}{L+s>8XarRF?~+fc=eDWzR7p^-fBN6P3;#m;z}ttgd4_c^*Y1BMpM zBSPhY?0TvcTK42_Ur}E1IJ6!u3%`+s#vP+15#nm z=;2Gp(KoDHzvLG zFw8SP6c6-??#~vjpRRXJPr@-l-|@V?U&%znN-HX?EiAr+1Aa{G3Zp?y6_r1Bn|wf< z9I#Xo;N!2YtN`teR?%=|%B}z-3&7NIJe`x0eEjbj5Zzf=S;>Y&n{UL$!~n$|8c|)z zsN3%y@UDZU{PgpBxX>=PZ7{7HJtO1M&l$K!1pzqC40Q3zqf@&AgWBF0V?|! z3*QO!49EFRs6KW{H_4?;VBz+Tbl1070osT-WAzQ%a)X7u-n(chvv6S}2bOnd6lqPl zDAOLW2IefJ_vaS1xlWfr+@ah+ppHZm&!gn(QvZ=Xmkckp$}|Yk9CIxg&Pqj@BQNemn*h5A+{s#927tnvq)G(`I9?xnsjj z!U?O5NQtIY?hDh!S-Gh4ywZnoX2jtW)QIZPqJ&913t&0x>ZW(!v=)w{J^695hkKr` zL;`1Jn((g8VPGNYZ&>ci0F-P~Wic^8VSc5sva_V|B+|#wV|E$KwvNrxJLfwwwqB5| zpVmHTSuyDvK8|8+5*%e9jzIgxwc~(K0loR`O9gq`p1Ps9fs$Xkxx`z+$_zoB5qBp^ zR=exqRPWRoz>r}pmu$8>Tt>;GYmU<=(>N^wfk`y>1?8k>SrgQ*%Y9#Ml_Pj_vVepZ zpN+m}w9p;s!I&qkYQZArWf0q&d(b~> zQw!rauD9@70Y&FyTmYtc`5fr)Wjp)7tv~V9O@@10?BV~mt}ZSv_@_F%pD(}aYFw*@4V(x_}JRT#C6fxm&?8NB} zMW5nB`>r!M+kVmCZ-D_a!wf|srUWS`XJ_!@#F~(-m1cXAMPW*GBs?}KsN1HY&2Bjw}6&;RY6(a;bD z1;t5&{x>oq4=QptV4+H&Mts-_kO1^HAK63WH3Fg)&SUuBKh_>)+UEzo+|<9#l?P%= zRzsx1t}vFP3%n+)u^K9?zB&D*Ob<{Ufy8#m#gLpv1}E+btS5)2Ji^ISqQRtJj~V2> zm#WtbP;V}bLex6pftXOB{cu-F&4miqDpPs)4QmOFeyF5qL(428ws2m)10_1XU~^V=+rMLNh?N0MP^APog(N3>&2xNoRH8f^{`nFWYT(cmj?@+xg;HV(RY^ zqT)Y(P$@S7mJqE5i&+2{-v697cV@v0=>oc?sD!Ka<|wWdGjEiM38^LcchJ#;b>GEpE9k(;O*2YCk}-2(Az_-vrkxg)sDpg*!04n`w!oTN z9&U4QUV`^X9?@+j7qGz|01-2DNRowLRBvs#OyF)XClIvf)#pInqzoYl_3CaS6KB@K zPr9Yf;57acGQIgt;dp$L=X2|#tPXEgT7wb#&jjky@lUZMnU8V(_j5P0G`u%Yt~%No zlv9U^G}IS}+3v@c?p^Ol%rm-O3l!uO#z+jm-=u`NU}n*fy7wnC;(=1ULJ}+3^-v~3 z&lTumKCM>Dgz4p%7=;zWuKrmOLF5_jPG(~8*aL9VDsc7Ri5>f|>3;|Bidr8|5Mz(z z;8C6I#TpwK-h2U9I6-yQqok#cNVo@iev2k0SrL3Zly+I2YO4^JXecB#F_-Neo6ti=evN)Qf zY9ue$IxSAbC)CNm%{xub-XP;WZ$UnBh85lg)O6O}|bC^O24( zmv3K*$>dNBAzLoUeqNB|;i=a8)omy&tjgeL;8RJ_k8y0GH3D}|;TTDw`Rt>9m>4`x z(>E>5#Xo+NeVgkVSL=0WZ;_iRQ=~(X`22o8CzFzNOuVB^Me*-E;=MA+u{S>#jQLGJ z75-P^0MSjqEtiFgf}%iC=p7T4&SvZ1?X8syAaBDaebVLrKZ4$Jvsc>-=bC=P^Lj5xVWp4shfAv(G*I~93( zWQ2}xZW<5yQD5B>&?tQ&^+(JR7#ObtLZ5E)7j1rm;m6Z zG4i@@1nf54b{i3KaWLQQ3=P3d`a-SVsvS;d@@BwmIWj|wR@&W}UH*e6v$Sk!HjCxz zV6EUZ+;bt~nsj_S2llngz*F_wO?fb<^o@wm<`TT&LcS&}9jpONtXF*?-o-o}Hvvn* z2F!#YQ5-agU{Zled9$4Dg4QDvFc|^aI(&6G?o6Kyo*7rF28J3c`|^AvgunQlwDERI>D1p}`DKqQ1EKo5{ezGJ8WR3HdDHaa?k%Qihb zxvRzFhFrNxZKx2KB~RS?b)X{Xc7f}|#m!CgAWr`~2&?BoUli2SxpNLUJIe?H6G;TT zI8IDiXsz^L@;f@-0ORG-@^ZLQq$m+?I&=3MIv+4zl%|)Ro(|s}X1VaVe}wQGL-ZLx zY9$hq9wMnHn}c<;Lbz&EWQ(q{n3>H3-UP)Cg#^i$m1us1+CUGK^zvOAQ_v>X=o8q# z9ELt(-`H)7%b#dNmK6zvUqk&j#Fdql)iH6hBSwQrJBZyZv)6MdG& z_q2@}Bs69^59dzAW7AZ^shS>mG`FRkJXllJyTM{iF&@Gp>F}$Re14HE{?;TA_=JxL zZTe+A9zLYx8;oj8y1MvXD8(xqlU|<}eZN`6e&xMu;35H>+gM;H0>(GNBBwrm8->M6 zM6D>hEn3ZE*G#00864`Z4M_+pMkiT(@tq);;~pD((oc+s1~{?76zL>dPzA;qhDeZ- zhZ9yRZYuf&hF=+Z9eTFfcABrss|ob)@r3=8l8?|*F20Cv6kX3U6;2fl zeihrh9Jm{~>uGrI%ZtIwlhLY#QVdobWScN?|JTqw=G2Fy^e6&u?|1R&`>vYS+Xw}< zi0u_lVhW8FB;C8^r$e0N%MPEN0eKw7$I3gyhk4ooHKnA%b1x=gh&4Ne#!#K?VUHe( zY!>38c;Dzh9rfs0^TwAZLH1DIt7{-3r^~+H0wH_BkMm?(f)qPFYj*#sgH?7$xc%8~ zP)!%f{nK@D_2oK2vz`8X*!v}B|5BA)o6Fg)!7#9T0hxt1QQ`uwe<>c;z1lxNO-uaFTOM=H9b8!Dd{INA#(Un$N`+7863bk6}Ddp89f+8 z@&5W4-m2P9Ea-!a97n*dkf%gRO}!)u0=5Z+_;3PpGoWy`9#|v21a+(-AR`wuU59}+YC5RUV+wEYR$@c?&K@l-{{@w7ph-UF`wp&RgcqxsO z)f~<@~&i!6b`HrIdM)r+IzV_U(lX;1H=u;`G4qlq3!M8e8TGQ)_<6r6X4<918~o+ zEa?TRsTwCos#p?kCT>N0pB_echf`W4JNb((rtfY5SDqTIJR?{%Mwn}vRN&TA&Pak1 zv8Pkfi(MWfAL59Pux?0ha@DFtv^;~76@yxL8 zWr~-+NO=#FvAdq5&6O+@qAB+RZIW)b=L9*{tW^1ZIwrsHazKAw|Wgd{pW z5VR8-ES+s9(Rz8e7Zi~KlZb&|Utzwf*(@jH5n)H1M5mVXokZW$MRa{oD~DsZD3dO_ z8>7H~*K4q+^Kx5R6Dojy^o_K%?Sn>pfmmo)s@6$~ktmSKNBxWc$@Y9Hf+r4Y5&G3j z?|U#_z-$&M^(Fd?8Nvl~s+txzfW!m>7tJ!c+l^j=W}f&avjt=cd;z?SzxN1TrYG(Y zN~q0EbFd6P&(zaIFrief1Zz{-dvA>_XnGRetdIK=WNBai1${-apt!2juyyux@f3kR zA@shf_RG1ignvJN*F|#LWT>SzvoB!qFTlCPew~osI?ot#8!2Rxtf_6^oIqxf&QYS%~PZH<#1mnfBWM z{JK`>`5dTUF-^36zufwF^Fnc(CPwmPGSf8Wf>Prd!{5yaRmY&uBf_$bzjUyWo!EH7 zqa#0f*gBtiVFlQ^$8_~{vk#21fL};1K{@PH={8G+OU&W4yItm^$d;E~ZFTBa6)`VW z>&s?QiS+`?%xMZR0pmIZfs&M&`KI?0RCqNpF+mBkp1}cj6+pruqQaH;lZ?nKX7Lp* zndJo22~Qg`0>iNbfu3gzW#yVHEf5!hu`Idm)A>*Wz8+92T<*J>%VwK4n7+ygj8#1e zbZP^2Vv$?Xk&a9)rSzdDb%;t-V69EWCjyu~WC1<_yr*3xY(;#!xlkinqpEIqVqKN~ z$I=3_riGi#zvGAgK1oS`+w;BY;&%7!xMtXFqSUx{&kj@heizDaE@jww4q@1eZ3pL| z@>DC9Z?iuI?SQS;tUhEAg3e)FL{Y^PYyd-^Sd!g5RUvpAnQ zs-81cRkP+zPmB1Ojkg*E>w7b=DAa3Si*UU^6_-Ozs z4#`l@YrKwvx4Xs8)@`4G=x*NBudJdSvR zd%0QjSP%xGO7GDs97-)wM>6(530(b?daklXn!_0gis`%8u0Gemnm#Bvgcj8xQ-4k& zdx4OH>AYi%GH^8fpiDvd0)XUsrXl zwzL~@=}w>go*X$bw%isIC8}INAMf#dq$foAYg}w%WuhR!=Ij~*SY%m@PPT`#g87NF zcnsa)#Yf29Z_A}YsDGnPRuO$~nh^fuQ1YD0A_@`_gJZG)camTI*t>(S(ui10-nrTK ziq$(c49gd>5!yCwzXGD*YIq04RF%o3@yGT^{D?lo(!*|~=8X8QLJUW)k+WEcZ#kg9 zg|QI-R}SvRWSkV>ICJQ|Gc6h6Slj-^?dCy#+;64x zW#eWOnLEC1>-AmmT(9sGODjCnRKqRNS-ZNslo6tYQoj83NICe1)ZDt{tFP}Jw7wyw zrlw}%uPVUWKfsxva5o4%Unio#kcv1;xLIlA-C&+*cxnBCZ5A-2{EnWdBqfqMKQ{-A zDuEKZ0;YjM)m$9)Rlq(D0BTas*Rv#G&Z!TQ%W2R`3TbJ-OzTSoTrfvN0nPd`P+-2z zyFjD?MWc57gF+LYrwL;eTGF7oj_2}*AQM&(I(O#rT$&nNkBr81j^poXY1n(|sBXQ) zQ5WeQbgoA0gP`=2Jb90PU{F4@n(apGrRymI#Dy%SOp?=NnkY3`i=7xM$qZvFI(7W5 zx5YGmTb`B^*s-Y=pKqRqb?rGo9X80DWM&a*vKWTJ7m((0NT*i9@tV+$p~o&)`$Ff} zQ#2`*g(&{!a;WbvG~jw;{F=&*_Ivm9#n2!oyMvxRp!72ZWBj(!#Lpu&HcLsy(Zk}D4!P4!&9j`iQy7Il9S!MQ!Y zzj@@2-RYzHf{W(%VJp~FI0$D^X&B`oA3@$dhYNNP3)WH{C!qMgdlU=uYZAH%JAr0Q zFr1*r$UY*%h|mTKGzX-P=%vmOGiBh4?g&Z7?2iLiY*xa|uaj~!m9b^g_em@UjRJir z9{ElX@mCai$JAL;dDD zhhr$(%BGG&D0C~8D@MPW@UBn)2ibu+s_ThNRBwG7($ua&=`ZoCMBp9RRV|Y?EZ9>o z2R<@!Z!7Z{J|h~0(ADa2B5*XAh(2+#_Fc>HI-c=leid$IzA8vthU26{D{%P~1+*}u z6NKWOP5rdz9B2xbd81EGa)L9EiRJWKnJ=L(vGBd8dEN_``+ppCB zVHYVc5D}~4q(1;{TCo#1in5p{1xxao@f&+8ijHSL0XSMfL6`~Yi&67lzujx=yQTZ( zby@$qBGKx{`_*E`GP8D<>C$mMjkY2or(eu!E!q1^+5^X>C~mxeV0?IjvUQ)w-PNM+ zPJkdq7)l72d-7q>bXB)*v&Z>Rkr2=wyLz%4)*aTnP}nlhioffAVcBA3m@OmiuP-N6 z(!(w*>w%Ch_bYwq$n}AKA?M_D9Rehg@?!MS>1l3O*4cSJnB`)iV;b1n>WTESw>KDl zCoIKrceYrusPhtZrPEH?Z1-o zad`5fnYa5=84%wdQh*dWV`xbOOb zOuoXn&|r%W%oOg(69*n~2dPb2o{YTjQs{csNW_+6hiD=oIpmTScqHH1X2(0|ga9XA z!%auBwp+E13A4%Xhcsq!)+>qFNjlhoc@8VbT-#HPz`N z=JG=NRF)0y4v~+2QJ2f31wN-I_SNMRuN1w)OxvCCP7?8yyRx=6FR-g)<`^(HEUfZ%GM{{S_z3!s{3M&q z;I5Ge1t2f?8_}^irD@R9)62-p?n;?7aGwYWwA0Us&*_};WtD(!!etoG&~g3TMzi>u%Q<6)Fm@wljf@P&j>d8g+b2c-+O|l(c4{M-i6h3rpQY-Ripkr=T?e-V zHO$p3zRxG2?Sda$t9ZSAe{dV`zDC18H**VqwY7wlrh(hflMA1^Eyp!*lmejcfJb55 z5oH~EpZzeDzWFAvevHRso9vOxZKu~FvxXs0jt>civkJx6f@ZJ!l5ipQ{W?9*rB>V zDQ!3vz~3k)!19=-WZ=TZ1VzC@6t81mp_nYreU|6_ExJ3g1&v2N z*QA8n-F^b^i46@LJ)^)t9wQTzg0wXF4*Yy>%9d`MOPRsfmmqqZHK~`q$8G=cY3rrR zJQVT5^766C$***Dr&K|bhRc=56HDffK~{lCD|pP_h!0f)mt9mLY+=LK9f;ezqV#BsNX@gIAqc0xkyy7sgO<| zYfU7<5~!YR(S(@XN^W^j58=Uxwa&va23?@D1O4v`(tssCh#$$2ES{&4L$DA50x|qZ zua?ts5})V*tZYoi(aE9>(d96&qYFD|y@NJzhKgLKj@%np(UkLy1TpY;`e{Y9rrTMH{k5G_geeO z`OG<6X(XMCDegP`Jge%&34xSGlcV>$rX)pIY0MdB&m}^E>BEY<8G^ajEFM8y3^12l~Ii+c`hO^*7f+ z%A?N%KeE`DZEtj9jggU}8NGjOXca`aj)5qXb#%pJY2{`th#?Wokj0T`1@*IsvD`lBVhiegId6Ki*JP9CU>gpJ@W zQnGrP3@yWaG5O3?!uVU*@s_NBFqaV4;+Jfd*YR>t8DT|hpSGADPosgF4bf&g{*qcI zL@#8~VQoGmS}zmFzTV6PVl7ZBZ4o=dI5j@__NQdUs9tU8F0E-t?;JUbS9>+rWRBDq zXxc}s$Flfq5o)^iai_)LN_F>6%ay>{y(i79wRi_LqO5FBWQWcTmESfxWMM817_TC? z*oe(0f4mYD{({rVh*sE(O!N0*K-TH6+*eBR`4F_`KaCEji#4735&PT@j$2To;#w>1 z#tGv;_YJD5SQ4`MCIXJ~ORx{_UK4i#azu0EO4?A=O0RoYfr9?TEJ)W^7GHk+uCcKg zVg`nIX~3FB6>qvL}*63F~^dxO{mTTvA0H%>C&T01wM@`H565>D3AI;p!+? zD@^faUKp&B({>Uo<R!(0%7D+H+GK-?Y~BH5V!@y!Co3x)+sff#+0>@_;Y492yhuwd5{eF8FGHY6iFnpjm=HDBvvtW z6DG1nJb*6Lsl21=6CkR#ex)smJwdAgn=@hmnS?ln z5t~-yv(bXxM%bTmJesnH9QIK_oXQQ&_);?Z`SO&^Rc(UED zz!ByXXMRhk32yV_CksYT5G#;xpYl+}rrR>#&6g6^An|ICH!DgwuOFtz&F+#|I66B| zRbW9b#Ed>?US>WICBdPl^mh4f7t>evMLW@i6`xRMOnyFdsGr=z&bkjV)3dTWi1F#A zWl)Af%1hd!Q?DTIq-6CqGY^n{fEzGp+#}oBm;i@EI-i4;fsZ!{s#k_^m@`;_LPja zX7-`bW146$9LTkb)|(ubbA(WsN)z;Av;cV03@-(t7Zc9w;bi}+}^2$dHeyK`wzFb-O0YcsF;PB+gxrUOCm zvs->u?Ghg`yBs;?ULW%4?xuNjX5y@%w~>xruE(nz`}o!hl1AP_I|fVhudLCtjwrkIX+>1y3wrjFj>A59xNyK$Or>4Jw7%zI z@#ecS+Ch%W$RPF2W|jj)mz#r0RUn7j7)S(_kl1#qs6c|VmpM5*fc*FIdMy&vJ771z zl>_G!1==!TF5nRmY=K{cfH>scN2^=7H~WAsa9IzeW)Z;EZVeHgKB8HRHb=wyYier7 zu%H|GrL8kzdkLSa{Q!+uJx)DiMQ-2*5YDL+ulA`He9+bFh*; ~e4g&-d`Id{)$Gf2_2?qDB- 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

    x&oht(;os!g8dTg%X_} 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%0A&4b5w+I4&lyWSN!45mO(4r;Zy;>- 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