From 09610a8ffe72b3400e8a99fb3e8bbb198654a402 Mon Sep 17 00:00:00 2001 From: Florian Boergel Date: Wed, 13 Jan 2021 11:45:39 +0100 Subject: [PATCH] changes --- MOM_code/.cproject | 55 + MOM_code/.gitignore | 5 + MOM_code/.project | 27 + MOM_code/LICENSE | 339 + MOM_code/README | 71 + MOM_code/README.md | 9 + MOM_code/annex.py | 43 + MOM_code/bin/.prepare_pubrel.csh.swp | Bin 0 -> 16384 bytes MOM_code/bin/combine_blobs.py | 46 + MOM_code/bin/combine_blobs.pyc | Bin 0 -> 2066 bytes MOM_code/bin/diag_table_chk | 598 + MOM_code/bin/environs.gfdl_ws_32.intel | 17 + MOM_code/bin/environs.gfdl_ws_64.gnu | 14 + MOM_code/bin/environs.gfdl_ws_64.intel | 16 + MOM_code/bin/environs.gfortran | 0 MOM_code/bin/environs.hpcs.intel | 16 + MOM_code/bin/environs.ibm.xlf | 3 + MOM_code/bin/environs.ifc | 0 MOM_code/bin/environs.ifc.RNP | 0 MOM_code/bin/environs.ifc.pocNP | 0 MOM_code/bin/environs.ifc.pocNP-OMPI | 0 MOM_code/bin/environs.ifc.test | 0 MOM_code/bin/environs.nci | 8 + MOM_code/bin/environs.ncrc1.intel | 21 + MOM_code/bin/environs.ncrc2.gnu | 15 + MOM_code/bin/environs.ncrc2.intel | 21 + MOM_code/bin/environs.workstation.gfort | 2 + MOM_code/bin/environs.workstation.intel | 17 + MOM_code/bin/list_files_with_tag | 73 + MOM_code/bin/list_paths | 98 + MOM_code/bin/mkmf | 472 + .../bin/mkmf.debugtemplate.gfdl_ws_32.intel | 182 + MOM_code/bin/mkmf.debugtemplate.ia64 | 106 + MOM_code/bin/mkmf.debugtemplate.ia64_hdf | 106 + MOM_code/bin/mkmf.debugtemplate.sgi | 96 + MOM_code/bin/mkmf.html | 476 + MOM_code/bin/mkmf.template.gfdl_ws_32.intel | 182 + MOM_code/bin/mkmf.template.gfdl_ws_64.gnu | 184 + .../bin/mkmf.template.gfdl_ws_64.gnu.debug | 184 + MOM_code/bin/mkmf.template.gfdl_ws_64.intel | 181 + MOM_code/bin/mkmf.template.gfortran | 229 + MOM_code/bin/mkmf.template.hpcs.intel | 167 + MOM_code/bin/mkmf.template.ia64 | 106 + MOM_code/bin/mkmf.template.ia64_flt | 106 + MOM_code/bin/mkmf.template.ia64_flt_hdf | 106 + MOM_code/bin/mkmf.template.ibm | 13 + MOM_code/bin/mkmf.template.ibm.xlf | 15 + MOM_code/bin/mkmf.template.ifc | 21 + MOM_code/bin/mkmf.template.nci | 146 + MOM_code/bin/mkmf.template.ncrc1.intel | 183 + MOM_code/bin/mkmf.template.ncrc2.gnu | 177 + MOM_code/bin/mkmf.template.ncrc2.intel | 183 + MOM_code/bin/mkmf.template.nec | 87 + MOM_code/bin/mkmf.template.pgi | 110 + MOM_code/bin/mkmf.template.pscale | 112 + MOM_code/bin/mkmf.template.sgi | 112 + MOM_code/bin/mkmf.template.t3e | 79 + MOM_code/bin/mkmf.template.t90 | 86 + MOM_code/bin/mkmf.template.workstation.gfort | 18 + MOM_code/bin/mkmf.template.workstation.intel | 182 + MOM_code/bin/mppnccombine.gfdl_ws_64.intel | Bin 0 -> 33416 bytes MOM_code/bin/prepare_pubrel.csh | 119 + MOM_code/bin/time_stamp.csh | 122 + MOM_code/build | 15 + MOM_code/doc/web/config.json | 23 + MOM_code/doc/web/quickstart.md | 97 + MOM_code/doc/web/user_guide.md | 596 + MOM_code/exp/FMS_compile.csh | 108 + MOM_code/exp/MOM_compile.csh | 167 + MOM_code/exp/MOM_run.csh | 319 + MOM_code/exp/atmos_null_compile.csh | 15 + MOM_code/exp/ice_compile.csh | 16 + MOM_code/exp/land_null_compile.csh | 15 + MOM_code/exp/mom5_ebm_compile.csh | 423 + MOM_code/exp/ocean_compile.csh | 15 + MOM_code/exp/preprocessing.csh | 33 + MOM_code/mppnccombine/a.out | Bin 0 -> 9307295 bytes .../mppnccombine/mppnccombine.c.chunking.c | 1487 +++ .../documentation/decomposition.jpg | Bin 0 -> 70542 bytes .../atmos_bgrid/documentation/flowchart.jpg | Bin 0 -> 92365 bytes .../documentation/global_temp_grid.jpg | Bin 0 -> 29752 bytes .../documentation/global_vel_grid.jpg | Bin 0 -> 35673 bytes .../atmos_bgrid/documentation/north_pole.jpg | Bin 0 -> 56525 bytes .../atmos_bgrid/documentation/south_pole.jpg | Bin 0 -> 49616 bytes .../src/atmos_bgrid/documentation/text.xbm | Bin 0 -> 118 bytes .../atmos_bgrid/documentation/time_steps.jpg | Bin 0 -> 8473 bytes .../atmos_bgrid/driver/coupled/atmosphere.F90 | 514 + .../driver/coupled/bgrid_physics.F90 | 778 ++ .../atmos_bgrid/driver/shallow/atmosphere.F90 | 363 + .../atmos_bgrid/driver/solo/atmosphere.F90 | 424 + .../src/atmos_bgrid/model/bgrid_advection.F90 | 1662 +++ .../model/bgrid_conserve_energy.F90 | 189 + MOM_code/src/atmos_bgrid/model/bgrid_core.F90 | 655 ++ .../atmos_bgrid/model/bgrid_core_driver.F90 | 475 + .../atmos_bgrid/model/bgrid_horiz_adjust.F90 | 684 ++ .../atmos_bgrid/model/bgrid_horiz_diff.F90 | 1028 ++ .../src/atmos_bgrid/model/bgrid_sponge.F90 | 498 + .../atmos_bgrid/model/bgrid_vert_adjust.F90 | 203 + .../atmos_bgrid/tools/bgrid_change_grid.F90 | 716 ++ .../atmos_bgrid/tools/bgrid_cold_start.F90 | 272 + .../atmos_bgrid/tools/bgrid_diagnostics.F90 | 833 ++ MOM_code/src/atmos_bgrid/tools/bgrid_halo.F90 | 450 + .../src/atmos_bgrid/tools/bgrid_horiz.F90 | 956 ++ .../src/atmos_bgrid/tools/bgrid_integrals.F90 | 920 ++ .../src/atmos_bgrid/tools/bgrid_masks.F90 | 258 + .../atmos_bgrid/tools/bgrid_polar_filter.F90 | 976 ++ .../src/atmos_bgrid/tools/bgrid_prog_var.F90 | 802 ++ MOM_code/src/atmos_bgrid/tools/bgrid_vert.F90 | 786 ++ MOM_code/src/atmos_coupled/atmos_model.F90 | 1004 ++ MOM_code/src/atmos_ebm/atmosphere.F90 | 1470 +++ MOM_code/src/atmos_ebm/ebm_diagnostics.F90 | 275 + .../driver/coupled/atmosphere.F90 | 593 + .../driver/coupled/fv_physics.F90 | 782 ++ .../driver/solo/atmosphere.F90 | 282 + .../atmos_fv_dynamics/driver/solo/fv_phys.F90 | 119 + .../atmos_fv_dynamics/driver/solo/hswf.F90 | 294 + .../src/atmos_fv_dynamics/model/dyn_core.F90 | 1123 ++ .../src/atmos_fv_dynamics/model/ecmfft.F90 | 603 ++ .../atmos_fv_dynamics/model/fill_module.F90 | 362 + .../src/atmos_fv_dynamics/model/fv_arrays.F90 | 628 ++ .../src/atmos_fv_dynamics/model/fv_arrays.h | 36 + .../atmos_fv_dynamics/model/fv_dynamics.F90 | 804 ++ .../src/atmos_fv_dynamics/model/fv_pack.F90 | 1523 +++ .../src/atmos_fv_dynamics/model/fv_point.inc | 96 + .../atmos_fv_dynamics/model/mapz_module.F90 | 2701 +++++ .../atmos_fv_dynamics/model/pft_module.F90 | 1121 ++ .../atmos_fv_dynamics/model/shr_kind_mod.F90 | 14 + .../src/atmos_fv_dynamics/model/sw_core.F90 | 1204 +++ .../src/atmos_fv_dynamics/model/tp_core.F90 | 2025 ++++ .../src/atmos_fv_dynamics/model/tracer_2d.F90 | 449 + .../model/update_fv_phys.F90 | 365 + .../atmos_fv_dynamics/tools/age_of_air.F90 | 42 + .../tools/fv_diagnostics.F90 | 1025 ++ .../atmos_fv_dynamics/tools/fv_restart.F90 | 1427 +++ .../src/atmos_fv_dynamics/tools/getmax.F90 | 20 + .../src/atmos_fv_dynamics/tools/gmean.F90 | 22 + .../atmos_fv_dynamics/tools/init_dry_atm.F90 | 856 ++ .../atmos_fv_dynamics/tools/init_sw_ic.F90 | 379 + .../src/atmos_fv_dynamics/tools/mod_comm.F90 | 3872 +++++++ .../atmos_fv_dynamics/tools/par_vecsum.F90 | 35 + .../src/atmos_fv_dynamics/tools/pmaxmin.F90 | 148 + .../src/atmos_fv_dynamics/tools/pv_module.F90 | 329 + .../src/atmos_fv_dynamics/tools/set_eta.F90 | 599 + .../atmos_fv_dynamics/tools/timingModule.F90 | 308 + .../src/atmos_fv_dynamics/tools/upper.F90 | 39 + MOM_code/src/atmos_null/atmos_model.F90 | 805 ++ .../src/atmos_null/atmos_tracer_driver.F90 | 370 + .../atmos_param/betts_miller/betts_miller.F90 | 892 ++ .../atmos_param/betts_miller/bm_massflux.F90 | 1606 +++ .../src/atmos_param/betts_miller/bm_omp.F90 | 1515 +++ MOM_code/src/atmos_param/cg_drag/cg_drag.F90 | 1306 +++ .../cloud_generator/betaDistribution.F90 | 457 + .../cloud_generator/cloud_generator.F90 | 1466 +++ .../src/atmos_param/cloud_obs/cloud_obs.F90 | 330 + .../src/atmos_param/cloud_rad/cloud_rad.F90 | 5285 +++++++++ .../atmos_param/cloud_zonal/cloud_zonal.F90 | 531 + MOM_code/src/atmos_param/clouds/clouds.F90 | 824 ++ .../atmos_param/clubb/CLUBB_driver_SCM.F90 | 129 + .../src/atmos_param/clubb/MG_microp_3D.F90 | 76 + .../cosp/MISR_simulator/MISR_simulator.F | 541 + .../cosp/MODIS_simulator/modis_simulator.F90 | 1107 ++ .../cosp/actsim/lidar_simulator.F90 | 565 + .../cosp/actsim/lmd_ipsl_stats.F90 | 506 + MOM_code/src/atmos_param/cosp/cosp.F90 | 734 ++ .../src/atmos_param/cosp/cosp_constants.F90 | 185 + MOM_code/src/atmos_param/cosp/cosp_defs.H | 39 + .../src/atmos_param/cosp/cosp_diagnostics.F90 | 2359 ++++ MOM_code/src/atmos_param/cosp/cosp_driver.F90 | 882 ++ MOM_code/src/atmos_param/cosp/cosp_io.F90 | 2322 ++++ .../atmos_param/cosp/cosp_isccp_simulator.F90 | 127 + MOM_code/src/atmos_param/cosp/cosp_lidar.F90 | 114 + .../atmos_param/cosp/cosp_misr_simulator.F90 | 103 + .../atmos_param/cosp/cosp_modis_simulator.F90 | 598 + .../atmos_param/cosp/cosp_rttov_simulator.F90 | 169 + .../src/atmos_param/cosp/cosp_simulator.F90 | 248 + MOM_code/src/atmos_param/cosp/cosp_stats.F90 | 341 + MOM_code/src/atmos_param/cosp/cosp_types.F90 | 1684 +++ MOM_code/src/atmos_param/cosp/cosp_utils.F90 | 415 + .../cosp/icarus-scops-3.7/congvec.H | 66 + .../cosp/icarus-scops-3.7/congvec.inc | 61 + .../cosp/icarus-scops-3.7/icarus.F90 | 1819 ++++ .../cosp/icarus-scops-3.7/isccp_cloud_types.F | 446 + .../atmos_param/cosp/icarus-scops-3.7/scops.F | 354 + .../src/atmos_param/cosp/llnl/cosp_radar.F90 | 222 + .../src/atmos_param/cosp/llnl/llnl_stats.F90 | 147 + MOM_code/src/atmos_param/cosp/llnl/pf_to_mr.F | 140 + .../src/atmos_param/cosp/llnl/prec_scops.F | 280 + .../atmos_param/cosp/quickbeam/array_lib.F90 | 177 + .../atmos_param/cosp/quickbeam/atmos_lib.F90 | 147 + .../src/atmos_param/cosp/quickbeam/dsd.F90 | 371 + .../cosp/quickbeam/format_input.F90 | 144 + .../src/atmos_param/cosp/quickbeam/gases.F90 | 194 + .../quickbeam/load_hydrometeor_classes.F90 | 66 + .../cosp/quickbeam/load_mie_table.F90 | 109 + .../atmos_param/cosp/quickbeam/math_lib.F90 | 407 + .../src/atmos_param/cosp/quickbeam/mrgrnk.F90 | 631 ++ .../atmos_param/cosp/quickbeam/optics_lib.F90 | 759 ++ .../cosp/quickbeam/radar_simulator.F90 | 557 + .../cosp/quickbeam/radar_simulator_types.F90 | 67 + .../src/atmos_param/cosp/quickbeam/zeff.F90 | 173 + .../atmos_param/cu_mo_trans/cu_mo_trans.F90 | 814 ++ .../damping_driver/damping_driver.F90 | 639 ++ .../src/atmos_param/diag_cloud/diag_cloud.F90 | 3475 ++++++ .../diag_cloud_rad/diag_cloud_rad.F90 | 3241 ++++++ .../diag_integral/diag_integral.F90 | 1696 +++ .../atmos_param/diffusivity/diffusivity.F90 | 709 ++ .../donner_deep/cumulus_closure_k.F90 | 472 + .../atmos_param/donner_deep/donner_cape_k.F90 | 1636 +++ .../donner_deep/donner_cloud_model_k.F90 | 4166 +++++++ .../atmos_param/donner_deep/donner_deep.F90 | 1905 ++++ .../atmos_param/donner_deep/donner_deep_k.F90 | 9598 +++++++++++++++++ .../donner_deep/donner_deep_miz.F90 | 5 + .../atmos_param/donner_deep/donner_lite_k.F90 | 6194 +++++++++++ .../donner_deep/donner_lscloud_k.F90 | 695 ++ .../atmos_param/donner_deep/donner_meso_k.F90 | 2710 +++++ .../src/atmos_param/donner_deep/donner_nml.h | 302 + .../atmos_param/donner_deep/donner_rad_k.F90 | 806 ++ .../atmos_param/donner_deep/donner_types.F90 | 14 + .../atmos_param/donner_deep/donner_types.h | 823 ++ .../donner_deep/donner_utilities_k.F90 | 1366 +++ .../atmos_param/donner_deep/fms_donner.F90 | 3935 +++++++ .../atmos_param/donner_deep/nonfms_donner.F90 | 709 ++ .../donner_deep/wet_deposition_0D.F90 | 253 + MOM_code/src/atmos_param/dry_adj/README | 48 + MOM_code/src/atmos_param/dry_adj/dry_adj.F90 | 309 + MOM_code/src/atmos_param/edt/edt.F90 | 4773 ++++++++ MOM_code/src/atmos_param/entrain/entrain.F90 | 2391 ++++ MOM_code/src/atmos_param/fsrad/co2_data.F90 | 833 ++ MOM_code/src/atmos_param/fsrad/co2int.F90 | 1021 ++ MOM_code/src/atmos_param/fsrad/fs_profile.F90 | 315 + MOM_code/src/atmos_param/fsrad/fsrad.F90 | 202 + MOM_code/src/atmos_param/fsrad/hconst.F90 | 31 + MOM_code/src/atmos_param/fsrad/longwave.F90 | 4366 ++++++++ MOM_code/src/atmos_param/fsrad/mcm_lw.F90 | 1783 +++ .../src/atmos_param/fsrad/mcm_sw_driver.F90 | 291 + MOM_code/src/atmos_param/fsrad/mcm_swnew.F90 | 506 + MOM_code/src/atmos_param/fsrad/mcm_swtbls.F90 | 324 + MOM_code/src/atmos_param/fsrad/rad_diag.F90 | 534 + MOM_code/src/atmos_param/fsrad/rdparm.F90 | 98 + MOM_code/src/atmos_param/fsrad/shortwave.F90 | 1231 +++ .../grey_radiation/grey_radiation.F90 | 429 + .../lin_cloud_microphys.F90 | 136 + .../atmos_param/lscale_cond/lscale_cond.F90 | 289 + MOM_code/src/atmos_param/mg_drag/mg_drag.F90 | 1103 ++ .../src/atmos_param/moist_conv/moist_conv.F90 | 964 ++ .../moist_processes/detr_ice_num.F90 | 216 + .../moist_processes/moist_processes.F90 | 5293 +++++++++ .../moist_processes/moist_processes_utils.F90 | 564 + .../moist_processes/moistproc_kernels.F90 | 1235 +++ .../monin_obukhov/monin_obukhov.F90 | 951 ++ .../monin_obukhov/monin_obukhov_interfaces.h | 164 + .../monin_obukhov/monin_obukhov_kernel.F90 | 1078 ++ .../src/atmos_param/my25_turb/my25_turb.F90 | 910 ++ .../physics_driver/physics_driver.F90 | 4290 ++++++++ .../radiation_driver/radiation_driver.F90 | 8477 +++++++++++++++ MOM_code/src/atmos_param/ras/ras.F90 | 2637 +++++ .../src/atmos_param/rh_clouds/rh_clouds.F90 | 620 ++ .../src/atmos_param/sea_esf_rad/aerosol.F90 | 1663 +++ .../sea_esf_rad/aerosolrad_package.F90 | 3654 +++++++ .../atmos_param/sea_esf_rad/bulkphys_rad.F90 | 739 ++ .../atmos_param/sea_esf_rad/cloud_spec.F90 | 2914 +++++ .../sea_esf_rad/cloudrad_diagnostics.F90 | 6288 +++++++++++ .../sea_esf_rad/cloudrad_package.F90 | 1599 +++ .../atmos_param/sea_esf_rad/diag_clouds_W.F90 | 877 ++ .../sea_esf_rad/donner_deep_clouds_W.F90 | 541 + .../atmos_param/sea_esf_rad/esfsw_driver.F90 | 3777 +++++++ .../sea_esf_rad/esfsw_parameters.F90 | 307 + .../src/atmos_param/sea_esf_rad/gas_tf.F90 | 3289 ++++++ .../atmos_param/sea_esf_rad/isccp_clouds.F90 | 2367 ++++ .../atmos_param/sea_esf_rad/lhsw_driver.F90 | 1573 +++ .../sea_esf_rad/longwave_clouds.F90 | 899 ++ .../sea_esf_rad/longwave_driver.F90 | 684 ++ .../sea_esf_rad/longwave_fluxes.F90 | 908 ++ .../sea_esf_rad/longwave_params.F90 | 236 + .../sea_esf_rad/longwave_tables.F90 | 1552 +++ .../sea_esf_rad/lw_gases_stdtf.F90 | 5687 ++++++++++ .../sea_esf_rad/mgrp_prscr_clds.F90 | 1142 ++ .../sea_esf_rad/microphys_cloud.F90 | 262 + .../atmos_param/sea_esf_rad/microphys_rad.F90 | 7145 ++++++++++++ .../atmos_param/sea_esf_rad/optical_path.F90 | 3839 +++++++ .../sea_esf_rad/original_fms_rad.F90 | 865 ++ .../src/atmos_param/sea_esf_rad/ozone.F90 | 1762 +++ .../sea_esf_rad/rad_output_file.F90 | 2056 ++++ .../atmos_param/sea_esf_rad/rad_utilities.F90 | 3477 ++++++ .../sea_esf_rad/radiation_diag.F90 | 2129 ++++ .../sea_esf_rad/radiative_gases.F90 | 4237 ++++++++ .../sea_esf_rad/rh_based_clouds.F90 | 1333 +++ .../atmos_param/sea_esf_rad/sea_esf_rad.F90 | 656 ++ .../src/atmos_param/sea_esf_rad/sealw99.F90 | 7389 +++++++++++++ .../sea_esf_rad/shortwave_driver.F90 | 969 ++ .../sea_esf_rad/specified_clouds_W.F90 | 756 ++ .../sea_esf_rad/standalone_clouds.F90 | 1664 +++ .../sea_esf_rad/strat_clouds_W.F90 | 1238 +++ .../atmos_param/sea_esf_rad/uw_clouds_W.F90 | 571 + .../sea_esf_rad/zetac_clouds_W.F90 | 431 + .../atmos_param/shallow_conv/shallow_conv.F90 | 566 + .../atmos_param/shallow_cu/conv_closures.F90 | 450 + .../atmos_param/shallow_cu/conv_plumes.F90 | 29 + .../atmos_param/shallow_cu/conv_plumes_k.F90 | 1771 +++ .../atmos_param/shallow_cu/conv_utilities.F90 | 67 + .../shallow_cu/conv_utilities_k.F90 | 1834 ++++ .../src/atmos_param/shallow_cu/deep_conv.F90 | 376 + .../src/atmos_param/shallow_cu/uw_conv.F90 | 1627 +++ .../stable_bl_turb/stable_bl_turb.F90 | 558 + .../atmos_param/strat_cloud/aerosol_cloud.F90 | 938 ++ .../src/atmos_param/strat_cloud/check_nan.F90 | 157 + .../strat_cloud/cldwat2m_micro.F90 | 6063 +++++++++++ .../src/atmos_param/strat_cloud/gamma_mg.F90 | 324 + .../src/atmos_param/strat_cloud/mg_const.F90 | 76 + .../atmos_param/strat_cloud/microphysics.F90 | 693 ++ .../strat_cloud/morrison_gettelman_microp.F90 | 4301 ++++++++ .../src/atmos_param/strat_cloud/nc_cond.F90 | 2207 ++++ .../src/atmos_param/strat_cloud/polysvp.F90 | 541 + .../strat_cloud/rotstayn_klein_mp.F90 | 2689 +++++ .../atmos_param/strat_cloud/simple_pdf.F90 | 235 + .../atmos_param/strat_cloud/strat_cloud.F90 | 3265 ++++++ .../strat_cloud/strat_cloud_legacy.F90 | 4950 +++++++++ .../strat_cloud/strat_cloud_utilities.F90 | 493 + .../atmos_param/strat_cloud/strat_netcdf.F90 | 3401 ++++++ .../src/atmos_param/strat_cloud/strat_nml.h | 311 + .../src/atmos_param/topo_drag/topo_drag.F90 | 761 ++ .../src/atmos_param/vert_diff/vert_diff.F90 | 1187 ++ .../vert_diff_driver/vert_diff_driver.F90 | 522 + .../vert_turb_driver/vert_turb_driver.F90 | 868 ++ .../atmos_shared/atmos_nudge/atmos_nudge.F90 | 410 + .../interpolator/interpolator.F90 | 3675 +++++++ .../tracer_driver/aer_ccn_act/aer_ccn_act.F90 | 275 + .../aer_ccn_act/aer_ccn_act_k.F90 | 959 ++ .../tracer_driver/aer_ccn_act/aer_in_act.F90 | 130 + .../aer_ccn_act/aerosol_params.F90 | 113 + .../tracer_driver/aer_ccn_act/ice_nucl.F90 | 787 ++ .../tracer_driver/atmos_age_tracer.F90 | 314 + .../tracer_driver/atmos_carbon_aerosol.F90 | 2714 +++++ .../atmos_shared/tracer_driver/atmos_ch3i.F90 | 310 + .../atmos_shared/tracer_driver/atmos_co2.F90 | 695 ++ .../tracer_driver/atmos_convection_tracer.F90 | 330 + .../atmos_shared/tracer_driver/atmos_dust.F90 | 363 + .../tracer_driver/atmos_radon.F90 | 333 + .../tracer_driver/atmos_sea_salt.F90 | 457 + .../atmos_shared/tracer_driver/atmos_soa.F90 | 350 + .../tracer_driver/atmos_sulfate.F90 | 2264 ++++ .../tracer_driver/atmos_sulfur_hex.F90 | 433 + .../tracer_driver/atmos_tracer_driver.F90 | 1685 +++ .../tracer_driver/atmos_tracer_utilities.F90 | 2140 ++++ .../stratchem/strat_chem_driver.F90 | 543 + .../stratchem/strat_chem_model.F90 | 2419 +++++ .../tracer_driver/tropchem/m_tracname.F90 | 22 + .../tracer_driver/tropchem/mo_chem_utls.F90 | 508 + .../tracer_driver/tropchem/mo_chemdr.F90 | 636 ++ .../tracer_driver/tropchem/mo_chemini.F90 | 186 + .../tracer_driver/tropchem/mo_exp_slv.F90 | 292 + .../tracer_driver/tropchem/mo_fastjx.F90 | 3680 +++++++ .../tracer_driver/tropchem/mo_fphoto.F90 | 1117 ++ .../tracer_driver/tropchem/mo_hook.F90 | 355 + .../tracer_driver/tropchem/mo_imp_slv.F90 | 919 ++ .../tracer_driver/tropchem/mo_jpl.F90 | 41 + .../tracer_driver/tropchem/mo_photo.F90 | 1357 +++ .../tropchem/mo_read_sim_chm.F90 | 371 + .../tracer_driver/tropchem/mo_rodas_slv.F90 | 390 + .../tracer_driver/tropchem/mo_setinv.F90 | 64 + .../tracer_driver/tropchem/mo_setsox.F90 | 555 + .../tracer_driver/tropchem/mo_usrrxt.F90 | 578 + .../tracer_driver/tropchem/moz.mat.F90 | 6574 +++++++++++ .../tracer_driver/tropchem/moz.mods.F90 | 514 + .../tracer_driver/tropchem/moz.subs.F90 | 583 + .../tropchem/strat_chem_utilities.F90 | 1384 +++ .../tropchem/tropchem_driver.F90 | 3448 ++++++ .../vert_advection/vert_advection.F90 | 693 ++ .../driver/coupled/atmosphere.F90 | 466 + .../driver/coupled/mcm_mca_lsc.F90 | 890 ++ .../driver/coupled/mcm_moist_processes.F90 | 583 + .../driver/coupled/spectral_physics.F90 | 397 + .../atmos_spectral/driver/solo/atmosphere.F90 | 350 + .../driver/solo/idealized_moist_phys.F90 | 576 + .../driver/solo/mixed_layer.F90 | 349 + .../init/ic_from_external_file.F90 | 140 + .../atmos_spectral/init/jablonowski_2006.F90 | 234 + .../src/atmos_spectral/init/polvani_2004.F90 | 291 + .../src/atmos_spectral/init/polvani_2007.F90 | 716 ++ .../init/spectral_init_cond.F90 | 286 + .../init/spectral_initialize_fields.F90 | 117 + .../init/topog_regularization.F90 | 347 + .../atmos_spectral/init/vert_coordinate.F90 | 292 + .../model/every_step_diagnostics.F90 | 249 + .../src/atmos_spectral/model/fv_advection.F90 | 575 + .../atmos_spectral/model/global_integral.F90 | 62 + .../src/atmos_spectral/model/implicit.F90 | 497 + .../src/atmos_spectral/model/leapfrog.F90 | 217 + .../atmos_spectral/model/matrix_invert.F90 | 129 + .../atmos_spectral/model/press_and_geopot.F90 | 446 + .../atmos_spectral/model/spectral_damping.F90 | 240 + .../model/spectral_dynamics.F90 | 1667 +++ .../src/atmos_spectral/model/tracer_type.F90 | 17 + .../atmos_spectral/model/water_borrowing.F90 | 119 + .../tools/gauss_and_legendre.F90 | 165 + .../src/atmos_spectral/tools/grid_fourier.F90 | 311 + .../src/atmos_spectral/tools/spec_mpp.F90 | 131 + .../src/atmos_spectral/tools/spherical.F90 | 844 ++ .../tools/spherical_fourier.F90 | 547 + .../src/atmos_spectral/tools/transforms.F90 | 1066 ++ MOM_code/src/coupler/coupler_main.F90 | 1757 +++ MOM_code/src/coupler/flux_exchange.F90 | 4514 ++++++++ MOM_code/src/coupler/surface_flux.F90 | 885 ++ MOM_code/src/ice_param/ice_albedo.F90 | 171 + MOM_code/src/ice_param/ocean_albedo.F90 | 464 + MOM_code/src/ice_param/ocean_rough.F90 | 254 + MOM_code/src/ice_sis/fig1.txt | 25 + MOM_code/src/ice_sis/fig2.txt | 16 + MOM_code/src/ice_sis/fig3.txt | 56 + MOM_code/src/ice_sis/ice_bergs.F90 | 5469 ++++++++++ MOM_code/src/ice_sis/ice_dyn.F90 | 389 + MOM_code/src/ice_sis/ice_grid.F90 | 956 ++ MOM_code/src/ice_sis/ice_model.F90 | 1848 ++++ MOM_code/src/ice_sis/ice_spec.F90 | 147 + MOM_code/src/ice_sis/ice_thm.F90 | 601 ++ MOM_code/src/ice_sis/ice_type.F90 | 1115 ++ MOM_code/src/ice_sis/mask.F90 | 107 + MOM_code/src/ice_sis/rot.F90 | 505 + MOM_code/src/land_lad/land_model.F90 | 1011 ++ MOM_code/src/land_lad/land_types.F90 | 590 + MOM_code/src/land_lad/numerics.F90 | 583 + .../src/land_lad/soil/land_properties.F90 | 2439 +++++ MOM_code/src/land_lad/soil/rivers.F90 | 1161 ++ MOM_code/src/land_lad/soil/soil.F90 | 2116 ++++ .../src/land_lad/vegetation/vegetation.F90 | 680 ++ .../src/land_lad2/canopy_air/cana_tile.F90 | 157 + .../src/land_lad2/canopy_air/canopy_air.F90 | 564 + .../src/land_lad2/doc/glac_tile_diagram.png | Bin 0 -> 22858 bytes .../src/land_lad2/doc/soil_tile_diagram.png | Bin 0 -> 24814 bytes MOM_code/src/land_lad2/doc/style.css | 102 + MOM_code/src/land_lad2/glacier/glac_tile.F90 | 710 ++ MOM_code/src/land_lad2/glacier/glacier.F90 | 983 ++ MOM_code/src/land_lad2/lake/lake.F90 | 1142 ++ MOM_code/src/land_lad2/lake/lake_tile.F90 | 646 ++ MOM_code/src/land_lad2/land_constants.F90 | 32 + MOM_code/src/land_lad2/land_data.F90 | 644 ++ MOM_code/src/land_lad2/land_model.F90 | 2888 +++++ MOM_code/src/land_lad2/land_tile.F90 | 864 ++ MOM_code/src/land_lad2/river/river.F90 | 1547 +++ .../src/land_lad2/river/river_physics.F90 | 1396 +++ MOM_code/src/land_lad2/river/river_type.F90 | 102 + MOM_code/src/land_lad2/shared/debug.inc | 10 + MOM_code/src/land_lad2/shared/land_debug.F90 | 350 + MOM_code/src/land_lad2/shared/land_io.F90 | 482 + .../src/land_lad2/shared/land_numerics.F90 | 919 ++ .../src/land_lad2/shared/land_tile_diag.F90 | 697 ++ .../land_lad2/shared/land_tile_diag_buff.F90 | 95 + .../land_lad2/shared/land_tile_diag_sel.F90 | 180 + .../src/land_lad2/shared/land_tile_io.F90 | 993 ++ MOM_code/src/land_lad2/shared/land_utils.F90 | 79 + .../src/land_lad2/shared/nf_utils/getput.inc | 487 + .../shared/nf_utils/getput_compressed.inc | 452 + .../land_lad2/shared/nf_utils/nf_utils.F90 | 30 + .../src/land_lad2/shared/nf_utils/nfc.F90 | 213 + .../src/land_lad2/shared/nf_utils/nfu.F90 | 738 ++ MOM_code/src/land_lad2/shared/sphum.F90 | 46 + .../src/land_lad2/shared/table_printer.F90 | 305 + MOM_code/src/land_lad2/snow/snow.F90 | 1047 ++ MOM_code/src/land_lad2/snow/snow_tile.F90 | 406 + MOM_code/src/land_lad2/soil/soil.F90 | 2260 ++++ MOM_code/src/land_lad2/soil/soil_tile.F90 | 1515 +++ MOM_code/src/land_lad2/soil/uptake.F90 | 569 + .../src/land_lad2/topo_rough/topo_rough.F90 | 190 + .../src/land_lad2/transitions/transitions.F90 | 901 ++ .../vegetation/read_remap_cohort_data.inc | 112 + .../src/land_lad2/vegetation/vegetation.F90 | 1513 +++ .../src/land_lad2/vegetation/vegn_cohort.F90 | 526 + .../land_lad2/vegetation/vegn_cohort_io.F90 | 255 + .../land_lad2/vegetation/vegn_cohort_io.inc | 188 + .../src/land_lad2/vegetation/vegn_data.F90 | 660 ++ .../land_lad2/vegetation/vegn_disturbance.F90 | 295 + .../land_lad2/vegetation/vegn_dynamics.F90 | 599 + .../land_lad2/vegetation/vegn_harvesting.F90 | 294 + .../vegetation/vegn_photosynthesis.F90 | 384 + .../land_lad2/vegetation/vegn_radiation.F90 | 366 + .../vegetation/vegn_static_override.F90 | 470 + .../src/land_lad2/vegetation/vegn_tile.F90 | 612 ++ MOM_code/src/land_null/land_model.F90 | 543 + MOM_code/src/land_param/climap_albedo.F90 | 236 + MOM_code/src/mom5/doc/MOM_practice.html | 1644 +++ MOM_code/src/mom5/doc/MOM_practice.xml | 1666 +++ MOM_code/src/mom5/doc/README | 24 + MOM_code/src/mom5/doc/quickstart_guide.html | 266 + MOM_code/src/mom5/doc/quickstart_guide.xml | 278 + .../src/mom5/drivers/mom_oasis3_interface.F90 | 606 ++ MOM_code/src/mom5/drivers/ocean_solo.F90 | 691 ++ .../src/mom5/drivers/ocean_solo_nuopc.inc | 1779 +++ .../src/mom5/ocean_bgc/ocean_bgc_restore.F90 | 4727 ++++++++ .../mom5/ocean_bgc/ocean_generic_tracer.F90 | 623 ++ MOM_code/src/mom5/ocean_bgc/ocean_ibgc.F90 | 4017 +++++++ .../src/mom5/ocean_bgc/ocean_pert_co2.F90 | 1135 ++ MOM_code/src/mom5/ocean_bgc/ocean_po4_pre.F90 | 1028 ++ .../src/mom5/ocean_bgc/ocmip2_abiotic.F90 | 1707 +++ MOM_code/src/mom5/ocean_bgc/ocmip2_biotic.F90 | 3093 ++++++ MOM_code/src/mom5/ocean_bgc/ocmip2_cfc.F90 | 1272 +++ .../src/mom5/ocean_bgc/ocmip2_co2calc.F90 | 729 ++ MOM_code/src/mom5/ocean_bgc/ocmip2_he.F90 | 1806 ++++ MOM_code/src/mom5/ocean_blobs/ocean_blob.F90 | 2821 +++++ .../src/mom5/ocean_blobs/ocean_blob_diag.F90 | 795 ++ .../ocean_blobs/ocean_blob_dynamic_bottom.F90 | 3134 ++++++ .../ocean_blobs/ocean_blob_dynamic_free.F90 | 2839 +++++ .../ocean_blobs/ocean_blob_static_bottom.F90 | 1022 ++ .../ocean_blobs/ocean_blob_static_free.F90 | 459 + .../src/mom5/ocean_blobs/ocean_blob_util.F90 | 2021 ++++ .../ocean_core/ocean_advection_velocity.F90 | 1141 ++ .../src/mom5/ocean_core/ocean_barotropic.F90 | 6521 +++++++++++ MOM_code/src/mom5/ocean_core/ocean_bbc.F90 | 1022 ++ .../src/mom5/ocean_core/ocean_coriolis.F90 | 613 ++ .../src/mom5/ocean_core/ocean_density.F90 | 4770 ++++++++ .../src/mom5/ocean_core/ocean_domains.F90 | 437 + MOM_code/src/mom5/ocean_core/ocean_grids.F90 | 2241 ++++ MOM_code/src/mom5/ocean_core/ocean_memory.h | 58 + MOM_code/src/mom5/ocean_core/ocean_model.F90 | 3180 ++++++ MOM_code/src/mom5/ocean_core/ocean_obc.F90 | 4351 ++++++++ .../mom5/ocean_core/ocean_obc_barotrop.F90 | 3613 +++++++ .../src/mom5/ocean_core/ocean_operators.F90 | 1397 +++ .../src/mom5/ocean_core/ocean_parameters.F90 | 299 + .../src/mom5/ocean_core/ocean_pressure.F90 | 1669 +++ MOM_code/src/mom5/ocean_core/ocean_sbc.F90 | 5503 ++++++++++ .../src/mom5/ocean_core/ocean_thickness.F90 | 4904 +++++++++ MOM_code/src/mom5/ocean_core/ocean_topog.F90 | 387 + MOM_code/src/mom5/ocean_core/ocean_types.F90 | 1351 +++ MOM_code/src/mom5/ocean_core/ocean_util.F90 | 1185 ++ .../src/mom5/ocean_core/ocean_velocity.F90 | 1906 ++++ .../mom5/ocean_core/ocean_velocity_advect.F90 | 964 ++ .../src/mom5/ocean_core/ocean_workspace.F90 | 155 + MOM_code/src/mom5/ocean_core/oda_driver.F90 | 941 ++ .../mom5/ocean_diag/ocean_adv_vel_diag.F90 | 1360 +++ .../src/mom5/ocean_diag/ocean_diagnostics.F90 | 172 + .../src/mom5/ocean_diag/ocean_drifters.F90 | 932 ++ .../src/mom5/ocean_diag/ocean_tracer_diag.F90 | 4764 ++++++++ .../src/mom5/ocean_diag/ocean_tracer_util.F90 | 1172 ++ .../mom5/ocean_diag/ocean_velocity_diag.F90 | 3077 ++++++ MOM_code/src/mom5/ocean_param/gotm-4.0/README | 41 + .../mom5/ocean_param/gotm-4.0/doc/Makefile | 153 + .../src/mom5/ocean_param/gotm-4.0/doc/README | 34 + .../src/mom5/ocean_param/gotm-4.0/doc/a4.tex | 153 + .../ocean_param/gotm-4.0/doc/airseaIntro.tex | 52 + .../ocean_param/gotm-4.0/doc/bioIntro.tex | 374 + .../mom5/ocean_param/gotm-4.0/doc/cases.tex | 1131 ++ .../ocean_param/gotm-4.0/doc/definitions.tex | 71 + .../ocean_param/gotm-4.0/doc/extraIntro.tex | 14 + .../mom5/ocean_param/gotm-4.0/doc/gotm.bib | 4625 ++++++++ .../ocean_param/gotm-4.0/doc/gotm_pub.bib | 420 + .../ocean_param/gotm-4.0/doc/guiIntro.tex | 10 + .../mom5/ocean_param/gotm-4.0/doc/html.tex | 132 + .../ocean_param/gotm-4.0/doc/introduction.tex | 167 + .../mom5/ocean_param/gotm-4.0/doc/letter.tex | 147 + .../ocean_param/gotm-4.0/doc/mainIntro.tex | 16 + .../ocean_param/gotm-4.0/doc/make_pub_list | 6 + .../gotm-4.0/doc/meanflowIntro.tex | 231 + .../gotm-4.0/doc/observationsIntro.tex | 39 + .../ocean_param/gotm-4.0/doc/outputIntro.tex | 27 + .../gotm-4.0/doc/turbulenceIntro.tex | 1073 ++ .../ocean_param/gotm-4.0/doc/utilIntro.tex | 21 + .../ocean_param/gotm-4.0/include/cppdefs.h | 74 + .../ocean_param/gotm-4.0/include/version.h | 1 + .../ocean_param/gotm-4.0/turbulence/Makefile | 96 + .../gotm-4.0/turbulence/algebraiclength.F90 | 308 + .../gotm-4.0/turbulence/alpha_mnb.F90 | 88 + .../gotm-4.0/turbulence/cmue_a.F90 | 237 + .../gotm-4.0/turbulence/cmue_b.F90 | 133 + .../gotm-4.0/turbulence/cmue_c.F90 | 213 + .../gotm-4.0/turbulence/cmue_d.F90 | 185 + .../gotm-4.0/turbulence/cmue_ma.F90 | 113 + .../gotm-4.0/turbulence/cmue_rf.F90 | 130 + .../gotm-4.0/turbulence/cmue_sg.F90 | 114 + .../gotm-4.0/turbulence/compute_cpsi3.F90 | 152 + .../gotm-4.0/turbulence/compute_rist.F90 | 241 + .../gotm-4.0/turbulence/dissipationeq.F90 | 296 + .../gotm-4.0/turbulence/epsbalgebraic.F90 | 83 + .../gotm-4.0/turbulence/fk_craig.F90 | 77 + .../gotm-4.0/turbulence/genericeq.F90 | 346 + .../gotm-4.0/turbulence/gotm_lib_version.F90 | 69 + .../gotm-4.0/turbulence/internal_wave.F90 | 97 + .../gotm-4.0/turbulence/ispralength.F90 | 206 + .../gotm-4.0/turbulence/kbalgebraic.F90 | 91 + .../ocean_param/gotm-4.0/turbulence/kbeq.F90 | 184 + .../ocean_param/gotm-4.0/turbulence/kpp.F90 | 2093 ++++ .../gotm-4.0/turbulence/lengthscaleeq.F90 | 299 + .../gotm-4.0/turbulence/potentialml.F90 | 234 + .../gotm-4.0/turbulence/production.F90 | 162 + .../gotm-4.0/turbulence/q2over2eq.F90 | 208 + .../gotm-4.0/turbulence/r_ratio.F90 | 64 + .../gotm-4.0/turbulence/tkealgebraic.F90 | 135 + .../ocean_param/gotm-4.0/turbulence/tkeeq.F90 | 226 + .../gotm-4.0/turbulence/turbulence.F90 | 3606 +++++++ .../gotm-4.0/turbulence/variances.F90 | 128 + .../mom5/ocean_param/gotm-4.0/util/Makefile | 47 + .../ocean_param/gotm-4.0/util/adv_center.F90 | 435 + .../gotm-4.0/util/convert_fluxes.F90 | 112 + .../ocean_param/gotm-4.0/util/diff_center.F90 | 237 + .../ocean_param/gotm-4.0/util/diff_face.F90 | 164 + .../ocean_param/gotm-4.0/util/eqstate.F90 | 560 + .../gotm-4.0/util/gridinterpol.F90 | 108 + .../ocean_param/gotm-4.0/util/lagrange.F90 | 179 + .../ocean_param/gotm-4.0/util/ode_solvers.F90 | 1372 +++ .../mom5/ocean_param/gotm-4.0/util/time.F90 | 548 + .../gotm-4.0/util/tridiagonal_gotm.F90 | 273 + .../mom5/ocean_param/gotm-4.0/util/util.F90 | 92 + .../lateral/ocean_bih_friction.F90 | 522 + .../ocean_param/lateral/ocean_bih_tracer.F90 | 515 + .../lateral/ocean_bihcgrid_friction.F90 | 1876 ++++ .../lateral/ocean_bihcst_friction.F90 | 643 ++ .../lateral/ocean_bihgen_friction.F90 | 2049 ++++ .../lateral/ocean_lap_friction.F90 | 513 + .../ocean_param/lateral/ocean_lap_tracer.F90 | 591 + .../lateral/ocean_lapcgrid_friction.F90 | 1447 +++ .../lateral/ocean_lapcst_friction.F90 | 627 ++ .../lateral/ocean_lapgen_friction.F90 | 2047 ++++ .../lateral/ocean_mixdownslope.F90 | 1294 +++ .../lateral/ocean_sigma_transport.F90 | 1866 ++++ .../lateral/ocean_submesoscale.F90 | 4277 ++++++++ .../ocean_param/neutral/ocean_nphysics.F90 | 365 + .../ocean_param/neutral/ocean_nphysicsA.F90 | 4025 +++++++ .../ocean_param/neutral/ocean_nphysicsB.F90 | 3636 +++++++ .../ocean_param/neutral/ocean_nphysicsC.F90 | 4120 +++++++ .../neutral/ocean_nphysics_diff.F90 | 1182 ++ .../neutral/ocean_nphysics_flux.F90 | 933 ++ .../neutral/ocean_nphysics_new.F90 | 910 ++ .../neutral/ocean_nphysics_skew.F90 | 790 ++ .../neutral/ocean_nphysics_tensor.F90 | 529 + .../neutral/ocean_nphysics_util.F90 | 4803 +++++++++ .../neutral/ocean_nphysics_util_new.F90 | 397 + .../sources/ocean_increment_eta.F90 | 285 + .../sources/ocean_increment_tracer.F90 | 318 + .../sources/ocean_increment_velocity.F90 | 320 + .../sources/ocean_momentum_source.F90 | 488 + .../sources/ocean_overexchange.F90 | 1211 +++ .../ocean_param/sources/ocean_overflow.F90 | 1154 ++ .../sources/ocean_overflow_OFP.F90 | 2896 +++++ .../ocean_param/sources/ocean_rivermix.F90 | 2749 +++++ .../ocean_param/sources/ocean_riverspread.F90 | 672 ++ .../ocean_param/sources/ocean_shortwave.F90 | 517 + .../sources/ocean_shortwave_csiro.F90 | 563 + .../sources/ocean_shortwave_gfdl.F90 | 1268 +++ .../sources/ocean_shortwave_jerlov.F90 | 826 ++ .../ocean_param/sources/ocean_sponges_eta.F90 | 276 + .../sources/ocean_sponges_tracer.F90 | 335 + .../sources/ocean_sponges_velocity.F90 | 400 + .../ocean_param/sources/ocean_xlandinsert.F90 | 1492 +++ .../ocean_param/sources/ocean_xlandmix.F90 | 1437 +++ .../ocean_param/vertical/ocean_convect.F90 | 1859 ++++ .../ocean_param/vertical/ocean_form_drag.F90 | 1158 ++ .../ocean_param/vertical/ocean_vert_chen.F90 | 969 ++ .../ocean_param/vertical/ocean_vert_const.F90 | 310 + .../ocean_param/vertical/ocean_vert_gotm.F90 | 1587 +++ .../vertical/ocean_vert_kpp_mom4p0.F90 | 2739 +++++ .../vertical/ocean_vert_kpp_mom4p1.F90 | 3230 ++++++ .../vertical/ocean_vert_kpp_test.F90 | 2922 +++++ .../ocean_param/vertical/ocean_vert_mix.F90 | 5749 ++++++++++ .../ocean_param/vertical/ocean_vert_pp.F90 | 513 + .../ocean_param/vertical/ocean_vert_tidal.F90 | 2085 ++++ .../vertical/ocean_vert_tidal_test.F90 | 2529 +++++ .../ocean_param/vertical/ocean_vert_util.F90 | 466 + .../src/mom5/ocean_tracers/fabm_driver.F90 | 28 + MOM_code/src/mom5/ocean_tracers/fabm_driver.h | 9 + MOM_code/src/mom5/ocean_tracers/mom4p1.tex | 8 + .../mom5/ocean_tracers/ocean_age_tracer.F90 | 965 ++ .../src/mom5/ocean_tracers/ocean_fabm.F90 | 2360 ++++ .../src/mom5/ocean_tracers/ocean_frazil.F90 | 654 ++ .../src/mom5/ocean_tracers/ocean_passive.F90 | 1223 +++ .../mom5/ocean_tracers/ocean_residency.F90 | 1373 +++ .../ocean_residency_integrand.F90 | 421 + .../ocean_tracers/ocean_residency_meta.F90 | 1088 ++ .../mom5/ocean_tracers/ocean_residency_ml.F90 | 415 + .../ocean_tracers/ocean_residency_range.F90 | 390 + .../src/mom5/ocean_tracers/ocean_tempsalt.F90 | 1342 +++ MOM_code/src/mom5/ocean_tracers/ocean_tpm.F90 | 1946 ++++ .../src/mom5/ocean_tracers/ocean_tpm_util.F90 | 1891 ++++ .../src/mom5/ocean_tracers/ocean_tracer.F90 | 4765 ++++++++ .../ocean_tracers/ocean_tracer_advect.F90 | 7803 ++++++++++++++ .../mom5/ocean_tracers/transport_matrix.F90 | 568 + MOM_code/src/mom5/ocean_wave/ocean_wave.F90 | 978 ++ .../src/mom5/ocean_wave/ocean_wave_type.F90 | 43 + .../generic_tracers/FMS_coupler_util.F90 | 152 + .../generic_tracers/FMS_ocmip2_co2calc.F90 | 1197 ++ .../generic_tracers/generic_BLING.F90 | 3482 ++++++ .../generic_tracers/generic_CFC.F90 | 482 + .../generic_tracers/generic_COBALT.F90 | 7966 ++++++++++++++ .../generic_tracers/generic_TOPAZ.F90 | 6791 ++++++++++++ .../generic_tracers/generic_miniBLING.F90 | 3847 +++++++ .../generic_tracers/generic_tracer.F90 | 706 ++ .../generic_tracers/generic_tracer_utils.F90 | 3446 ++++++ MOM_code/src/path_names_shared | 88 + .../src/postprocessing/land_utils/COPYING | 159 + .../src/postprocessing/land_utils/Makefile | 86 + .../postprocessing/land_utils/Makefile.static | 86 + .../postprocessing/land_utils/combine-ncc.F90 | 246 + .../src/postprocessing/land_utils/compile.csh | 18 + .../land_utils/decompress-ncc.F90 | 288 + .../src/postprocessing/land_utils/do_make | 16 + .../postprocessing/land_utils/do_make.static | 16 + .../src/postprocessing/land_utils/env.gaea | 3 + .../src/postprocessing/land_utils/env.gfdl-ws | 1 + .../src/postprocessing/land_utils/env.pan | 4 + .../src/postprocessing/land_utils/env.zeus | 0 .../postprocessing/land_utils/fre-nctools.mk | 62 + .../postprocessing/land_utils/is-compressed.c | 81 + .../src/postprocessing/land_utils/nfu.F90 | 1299 +++ .../land_utils/nfu_compress.F90 | 574 + .../src/postprocessing/list_ncvars/COPYING | 159 + .../src/postprocessing/list_ncvars/Makefile | 16 + .../list_ncvars/Makefile.static | 16 + .../src/postprocessing/list_ncvars/do_make | 15 + .../postprocessing/list_ncvars/do_make.static | 15 + .../src/postprocessing/list_ncvars/env.gaea | 3 + .../postprocessing/list_ncvars/env.gfdl-ws | 1 + .../src/postprocessing/list_ncvars/env.pan | 4 + .../src/postprocessing/list_ncvars/env.zeus | 0 .../postprocessing/list_ncvars/fre-nctools.mk | 43 + .../list_ncvars/list_ncvars.csh | 122 + .../list_ncvars/list_ncvars.f90 | 94 + .../src/postprocessing/mppnccombine/COPYING | 159 + .../src/postprocessing/mppnccombine/do_make | 15 + .../mppnccombine/do_make.static | 15 + .../src/postprocessing/mppnccombine/env.gaea | 3 + .../postprocessing/mppnccombine/env.gfdl-ws | 1 + .../src/postprocessing/mppnccombine/env.pan | 4 + .../src/postprocessing/mppnccombine/env.zeus | 0 .../mppnccombine/fre-nctools.mk | 44 + .../postprocessing/mppnccombine/makefile_icc | 27 + .../mppnccombine/makefile_icc.static | 17 + .../postprocessing/mppnccombine/mppnccombine | Bin 0 -> 200504 bytes .../mppnccombine/mppnccombine.c | 1448 +++ .../mppnccombine/mppnccombine.c.chunking.c | 1484 +++ .../mppnccombine/mppnccombine.c.chunking.o | Bin 0 -> 53576 bytes .../mppnccombine/mppnccombine_Compile.csh | 13 + MOM_code/src/postprocessing/nccatm/nccatm.c | 645 ++ MOM_code/src/postprocessing/plevel/COPYING | 159 + MOM_code/src/postprocessing/plevel/Makefile | 28 + .../src/postprocessing/plevel/Makefile.r4 | 28 + .../postprocessing/plevel/Makefile.r4.static | 28 + .../src/postprocessing/plevel/Makefile.static | 28 + MOM_code/src/postprocessing/plevel/compile | 27 + MOM_code/src/postprocessing/plevel/do_make | 18 + .../src/postprocessing/plevel/do_make.static | 18 + MOM_code/src/postprocessing/plevel/env.gaea | 3 + .../src/postprocessing/plevel/env.gfdl-ws | 1 + MOM_code/src/postprocessing/plevel/env.pan | 4 + MOM_code/src/postprocessing/plevel/env.zeus | 0 .../src/postprocessing/plevel/fre-nctools.mk | 85 + .../plevel/moisture_convert.F90 | 453 + .../plevel/pinterp_utilities.F90 | 403 + .../postprocessing/plevel/plev_constants.F90 | 16 + MOM_code/src/postprocessing/plevel/plevel.sh | 184 + .../postprocessing/plevel/pressure_interp.F90 | 315 + .../plevel/run_pressure_interp.F90 | 1755 +++ MOM_code/src/postprocessing/regrid/regrid.F90 | 1169 ++ MOM_code/src/postprocessing/regrid/regrid.csh | 93 + .../regrid_MESO/Resample_on_Z.c | 998 ++ .../postprocessing/regrid_hfls/fre-nctools.mk | 39 + .../regrid_hfls/regrid_hfls.F90 | 749 ++ MOM_code/src/postprocessing/timavg/COPYING | 159 + MOM_code/src/postprocessing/timavg/Makefile | 16 + .../src/postprocessing/timavg/Makefile.r4 | 16 + .../postprocessing/timavg/Makefile.r4.static | 16 + .../src/postprocessing/timavg/Makefile.static | 16 + MOM_code/src/postprocessing/timavg/do_make | 18 + .../src/postprocessing/timavg/do_make.static | 18 + MOM_code/src/postprocessing/timavg/env.gaea | 3 + .../src/postprocessing/timavg/env.gfdl-ws | 1 + MOM_code/src/postprocessing/timavg/env.pan | 4 + MOM_code/src/postprocessing/timavg/env.zeus | 0 .../src/postprocessing/timavg/fre-nctools.mk | 52 + MOM_code/src/postprocessing/timavg/timavg.csh | 154 + .../postprocessing/timavg/time_average.f90 | 1198 ++ .../generate_grids/atmos/atmos_grid.f90 | 519 + .../atmos/atmos_grid_generator.csh | 92 + .../atmos/atmos_grid_generator.f90 | 93 + .../grid_transfer/grid_transfer.F90 | 429 + .../grid_transfer/grid_transfer.csh | 92 + .../generate_grids/make_xgrids/make_xgrids.c | 2168 ++++ .../make_xgrids/make_xgrids.csh | 60 + .../generate_grids/ocean/check_mask.F90 | 321 + .../generate_grids/ocean/check_mask.csh | 86 + .../generate_grids/ocean/compare_grid.csh | 91 + .../generate_grids/ocean/compare_grid.f90 | 274 + .../generate_grids/ocean/edit_grid.F90 | 527 + .../generate_grids/ocean/edit_grid.csh | 98 + .../generate_grids/ocean/grids_type.f90 | 100 + .../generate_grids/ocean/grids_util.f90 | 777 ++ .../generate_grids/ocean/hgrid.f90 | 2134 ++++ .../ocean/ocean_grid_generator.csh | 170 + .../ocean/ocean_grid_generator.f90 | 163 + .../generate_grids/ocean/topog.f90 | 2030 ++++ .../generate_grids/ocean/vgrid.f90 | 393 + .../mom4_prep/idealized_bc/idealized_bc.csh | 102 + .../mom4_prep/idealized_bc/idealized_bc.f90 | 547 + .../idealized_bc/idealized_bc_driver.f90 | 53 + .../mom4_prep/idealized_ic/idealized_ic.csh | 99 + .../mom4_prep/idealized_ic/idealized_ic.f90 | 1285 +++ .../idealized_ic/idealized_ic_driver.f90 | 51 + MOM_code/src/preprocessing/regrid/regrid.F90 | 1505 +++ MOM_code/src/preprocessing/regrid/regrid.csh | 106 + .../src/preprocessing/regrid_2d/regrid_2d.csh | 102 + .../src/preprocessing/regrid_2d/regrid_2d.f90 | 786 ++ .../src/preprocessing/regrid_3d/regrid_3d.csh | 100 + .../src/preprocessing/regrid_3d/regrid_3d.f90 | 846 ++ .../river_regrid/river_regrid.csh | 85 + .../river_regrid/river_regrid.f90 | 1998 ++++ .../runoff_regrid/create_grid.F90 | 276 + .../runoff_regrid/runoff_regrid.F90 | 624 ++ .../runoff_regrid/runoff_regrid.csh | 157 + .../test_time_interp_ext.csh | 71 + .../test_time_interp_ext.pl | 57 + .../src/shared/amip_interp/amip_interp.F90 | 1525 +++ .../shared/amip_interp/amip_interp.rey_oi.txt | 84 + MOM_code/src/shared/astronomy/astronomy.F90 | 3581 ++++++ MOM_code/src/shared/axis_utils/axis_utils.F90 | 873 ++ .../column_diagnostics/column_diagnostics.F90 | 565 + MOM_code/src/shared/constants/constants.F90 | 268 + .../src/shared/coupler/atmos_ocean_fluxes.F90 | 1227 +++ MOM_code/src/shared/coupler/coupler_types.F90 | 1247 +++ .../src/shared/coupler/ensemble_manager.F90 | 369 + .../shared/data_override/data_override.F90 | 1582 +++ .../src/shared/diag_manager/diag_axis.F90 | 848 ++ .../src/shared/diag_manager/diag_data.F90 | 643 ++ .../src/shared/diag_manager/diag_grid.F90 | 1206 +++ .../src/shared/diag_manager/diag_manager.F90 | 3862 +++++++ .../src/shared/diag_manager/diag_output.F90 | 676 ++ .../src/shared/diag_manager/diag_table.F90 | 993 ++ .../src/shared/diag_manager/diag_util.F90 | 2241 ++++ .../shared/drifters/cloud_interpolator.F90 | 549 + MOM_code/src/shared/drifters/drifters.F90 | 1674 +++ MOM_code/src/shared/drifters/drifters_combine | 168 + .../src/shared/drifters/drifters_comm.F90 | 1025 ++ .../src/shared/drifters/drifters_compute_k.h | 298 + .../src/shared/drifters/drifters_core.F90 | 351 + .../src/shared/drifters/drifters_input.F90 | 448 + MOM_code/src/shared/drifters/drifters_io.F90 | 430 + MOM_code/src/shared/drifters/drifters_push.h | 168 + .../src/shared/drifters/drifters_set_field.h | 125 + MOM_code/src/shared/drifters/fms_switches.h | 7 + MOM_code/src/shared/drifters/quicksort.F90 | 79 + MOM_code/src/shared/drifters/readme.txt | 336 + .../src/shared/exchange/stock_constants.F90 | 304 + MOM_code/src/shared/exchange/test_xgrid.F90 | 699 ++ MOM_code/src/shared/exchange/xgrid.F90 | 4323 ++++++++ MOM_code/src/shared/fft/fft.F90 | 1046 ++ MOM_code/src/shared/fft/fft99.F90 | 1213 +++ .../shared/field_manager/field_manager.F90 | 6769 ++++++++++++ MOM_code/src/shared/field_manager/fm_util.F90 | 3392 ++++++ MOM_code/src/shared/field_manager/parse.inc | 49 + MOM_code/src/shared/fms/fms.F90 | 1018 ++ MOM_code/src/shared/fms/fms_io.F90 | 5790 ++++++++++ MOM_code/src/shared/fms/read_data_2d.inc | 39 + MOM_code/src/shared/fms/read_data_3d.inc | 39 + MOM_code/src/shared/fms/read_data_4d.inc | 38 + MOM_code/src/shared/fms/test_fms_io.F90 | 615 ++ MOM_code/src/shared/fms/write_data.inc | 10 + .../src/shared/horiz_interp/horiz_interp.F90 | 1502 +++ .../horiz_interp/horiz_interp_bicubic.F90 | 751 ++ .../horiz_interp/horiz_interp_bilinear.F90 | 1188 ++ .../horiz_interp/horiz_interp_conserve.F90 | 988 ++ .../horiz_interp/horiz_interp_spherical.F90 | 993 ++ .../shared/horiz_interp/horiz_interp_type.F90 | 217 + MOM_code/src/shared/include/fms_platform.h | 147 + MOM_code/src/shared/memutils/memuse.c | 26 + MOM_code/src/shared/memutils/memutils.F90 | 342 + MOM_code/src/shared/mosaic/constant.h | 2 + MOM_code/src/shared/mosaic/create_xgrid.c | 2462 +++++ MOM_code/src/shared/mosaic/create_xgrid.h | 56 + MOM_code/src/shared/mosaic/gradient.F90 | 133 + MOM_code/src/shared/mosaic/gradient_c2l.c | 438 + MOM_code/src/shared/mosaic/gradient_c2l.h | 17 + MOM_code/src/shared/mosaic/grid.F90 | 889 ++ MOM_code/src/shared/mosaic/interp.c | 379 + MOM_code/src/shared/mosaic/interp.h | 25 + MOM_code/src/shared/mosaic/mosaic.F90 | 506 + MOM_code/src/shared/mosaic/mosaic_util.c | 1351 +++ MOM_code/src/shared/mosaic/mosaic_util.h | 92 + MOM_code/src/shared/mosaic/read_mosaic.c | 801 ++ MOM_code/src/shared/mosaic/read_mosaic.h | 23 + MOM_code/src/shared/mpp/affinity.c | 63 + MOM_code/src/shared/mpp/include/mpp_chksum.h | 11 + .../src/shared/mpp/include/mpp_chksum_int.h | 8 + .../shared/mpp/include/mpp_chksum_scalar.h | 14 + MOM_code/src/shared/mpp/include/mpp_comm.inc | 315 + .../src/shared/mpp/include/mpp_comm_mpi.inc | 1100 ++ .../shared/mpp/include/mpp_comm_nocomm.inc | 960 ++ .../src/shared/mpp/include/mpp_comm_sma.inc | 1094 ++ .../src/shared/mpp/include/mpp_data_mpi.inc | 25 + .../shared/mpp/include/mpp_data_nocomm.inc | 25 + .../src/shared/mpp/include/mpp_data_sma.inc | 33 + .../mpp/include/mpp_define_nest_domains.inc | 1259 +++ .../src/shared/mpp/include/mpp_do_check.h | 226 + .../src/shared/mpp/include/mpp_do_checkV.h | 509 + .../shared/mpp/include/mpp_do_get_boundary.h | 996 ++ .../shared/mpp/include/mpp_do_global_field.h | 242 + .../shared/mpp/include/mpp_do_redistribute.h | 93 + .../src/shared/mpp/include/mpp_do_update.h | 327 + .../src/shared/mpp/include/mpp_do_updateV.h | 1519 +++ .../shared/mpp/include/mpp_do_updateV_ad.h | 950 ++ .../mpp/include/mpp_do_updateV_nonblock.h | 1442 +++ .../src/shared/mpp/include/mpp_do_update_ad.h | 351 + .../shared/mpp/include/mpp_do_update_nest.h | 371 + .../mpp/include/mpp_do_update_nonblock.h | 407 + .../shared/mpp/include/mpp_domains_comm.inc | 730 ++ .../shared/mpp/include/mpp_domains_define.inc | 8278 ++++++++++++++ .../shared/mpp/include/mpp_domains_misc.inc | 1733 +++ .../shared/mpp/include/mpp_domains_reduce.inc | 951 ++ .../shared/mpp/include/mpp_domains_util.inc | 1677 +++ .../src/shared/mpp/include/mpp_error_a_a.h | 14 + .../src/shared/mpp/include/mpp_error_a_s.h | 10 + .../src/shared/mpp/include/mpp_error_s_a.h | 10 + .../src/shared/mpp/include/mpp_error_s_s.h | 10 + MOM_code/src/shared/mpp/include/mpp_gather.h | 51 + .../src/shared/mpp/include/mpp_get_boundary.h | 731 ++ .../src/shared/mpp/include/mpp_global_field.h | 75 + .../shared/mpp/include/mpp_global_reduce.h | 125 + .../src/shared/mpp/include/mpp_global_sum.h | 112 + .../shared/mpp/include/mpp_global_sum_ad.h | 32 + .../shared/mpp/include/mpp_global_sum_tl.h | 15 + .../src/shared/mpp/include/mpp_io_connect.inc | 924 ++ .../src/shared/mpp/include/mpp_io_misc.inc | 281 + .../src/shared/mpp/include/mpp_io_read.inc | 1160 ++ .../src/shared/mpp/include/mpp_io_util.inc | 834 ++ .../src/shared/mpp/include/mpp_io_write.inc | 1529 +++ .../shared/mpp/include/mpp_read_2Ddecomp.h | 134 + .../src/shared/mpp/include/mpp_reduce_mpi.h | 18 + .../shared/mpp/include/mpp_reduce_nocomm.h | 9 + .../src/shared/mpp/include/mpp_reduce_sma.h | 32 + MOM_code/src/shared/mpp/include/mpp_sum.inc | 74 + MOM_code/src/shared/mpp/include/mpp_sum_mpi.h | 28 + .../src/shared/mpp/include/mpp_sum_nocomm.h | 15 + MOM_code/src/shared/mpp/include/mpp_sum_sma.h | 37 + .../src/shared/mpp/include/mpp_transmit.inc | 345 + .../src/shared/mpp/include/mpp_transmit_mpi.h | 182 + .../shared/mpp/include/mpp_transmit_nocomm.h | 136 + .../src/shared/mpp/include/mpp_transmit_sma.h | 240 + .../shared/mpp/include/mpp_update_domains2D.h | 627 ++ .../mpp/include/mpp_update_domains2D_ad.h | 402 + .../include/mpp_update_domains2D_nonblock.h | 1078 ++ .../mpp/include/mpp_update_nest_domains.h | 314 + MOM_code/src/shared/mpp/include/mpp_util.inc | 1506 +++ .../src/shared/mpp/include/mpp_util_mpi.inc | 236 + .../shared/mpp/include/mpp_util_nocomm.inc | 100 + .../src/shared/mpp/include/mpp_util_sma.inc | 199 + MOM_code/src/shared/mpp/include/mpp_write.h | 11 + .../shared/mpp/include/mpp_write_2Ddecomp.h | 247 + .../src/shared/mpp/include/system_clock.h | 73 + MOM_code/src/shared/mpp/mpp.F90 | 1216 +++ MOM_code/src/shared/mpp/mpp_data.F90 | 50 + MOM_code/src/shared/mpp/mpp_domains.F90 | 2524 +++++ MOM_code/src/shared/mpp/mpp_io.F90 | 1037 ++ MOM_code/src/shared/mpp/mpp_memutils.F90 | 139 + MOM_code/src/shared/mpp/mpp_parameter.F90 | 128 + MOM_code/src/shared/mpp/mpp_pset.F90 | 626 ++ MOM_code/src/shared/mpp/mpp_utilities.F90 | 137 + MOM_code/src/shared/mpp/nsclock.c | 38 + MOM_code/src/shared/mpp/test_mpp.F90 | 276 + MOM_code/src/shared/mpp/test_mpp_domains.F90 | 6795 ++++++++++++ MOM_code/src/shared/mpp/test_mpp_io.F90 | 516 + MOM_code/src/shared/mpp/test_mpp_pset.F90 | 118 + MOM_code/src/shared/mpp/threadloc.c | 70 + MOM_code/src/shared/oda_tools/oda_core.F90 | 1857 ++++ .../src/shared/oda_tools/oda_core_ecda.F90 | 3601 +++++++ MOM_code/src/shared/oda_tools/oda_types.F90 | 253 + .../src/shared/oda_tools/write_ocean_data.F90 | 391 + .../shared/oda_tools/xbt_drop_rate_adjust.f90 | 91 + MOM_code/src/shared/platform/platform.F90 | 10 + .../shared/random_numbers/MersenneTwister.F90 | 291 + .../shared/random_numbers/random_numbers.F90 | 105 + .../shared/sat_vapor_pres/sat_vapor_pres.F90 | 2568 +++++ .../sat_vapor_pres/sat_vapor_pres_k.F90 | 1984 ++++ .../src/shared/station_data/station_data.F90 | 956 ++ .../src/shared/time_interp/time_interp.F90 | 1174 ++ .../time_interp/time_interp_external.F90 | 1505 +++ .../src/shared/time_manager/get_cal_time.F90 | 361 + .../src/shared/time_manager/time_manager.F90 | 3962 +++++++ .../src/shared/topography/gaussian_topog.F90 | 313 + MOM_code/src/shared/topography/topography.F90 | 1025 ++ .../shared/tracer_manager/tracer_manager.F90 | 1553 +++ .../src/shared/tridiagonal/tridiagonal.F90 | 206 + MOM_code/src/tools/check_mask/check_mask.c | 689 ++ MOM_code/src/tools/check_mask/env.gaea | 4 + MOM_code/src/tools/check_mask/env.gfdl-ws | 6 + MOM_code/src/tools/check_mask/env.pan | 6 + MOM_code/src/tools/check_mask/env.zeus | 0 MOM_code/src/tools/check_mask/fre-nctools.mk | 72 + MOM_code/src/tools/edit_landXocean/Makefile | 49 + .../tools/edit_landXocean/edit_landXocean.c | 374 + MOM_code/src/tools/fregrid/COPYING | 159 + MOM_code/src/tools/fregrid/bilinear_interp.c | 1137 ++ MOM_code/src/tools/fregrid/bilinear_interp.h | 10 + MOM_code/src/tools/fregrid/conserve_interp.c | 789 ++ MOM_code/src/tools/fregrid/conserve_interp.h | 13 + MOM_code/src/tools/fregrid/env.gaea | 4 + MOM_code/src/tools/fregrid/env.gfdl-ws | 6 + MOM_code/src/tools/fregrid/env.pan | 6 + MOM_code/src/tools/fregrid/env.zeus | 0 MOM_code/src/tools/fregrid/fre-nctools.mk | 87 + MOM_code/src/tools/fregrid/fregrid.c | 880 ++ MOM_code/src/tools/fregrid/fregrid_util.c | 2302 ++++ MOM_code/src/tools/fregrid/fregrid_util.h | 36 + MOM_code/src/tools/fregrid/globals.h | 186 + .../src/tools/make_coupler_mosaic/env.gaea | 4 + .../src/tools/make_coupler_mosaic/env.gfdl-ws | 6 + .../src/tools/make_coupler_mosaic/env.pan | 6 + .../src/tools/make_coupler_mosaic/env.zeus | 0 .../tools/make_coupler_mosaic/fre-nctools.mk | 81 + .../make_coupler_mosaic/make_coupler_mosaic.c | 3679 +++++++ MOM_code/src/tools/make_hgrid/COPYING | 159 + .../make_hgrid/create_conformal_cubic_grid.c | 815 ++ .../make_hgrid/create_gnomonic_cubic_grid.c | 1300 +++ .../tools/make_hgrid/create_grid_from_file.c | 442 + MOM_code/src/tools/make_hgrid/create_hgrid.h | 53 + .../src/tools/make_hgrid/create_lonlat_grid.c | 619 ++ MOM_code/src/tools/make_hgrid/env.gaea | 4 + MOM_code/src/tools/make_hgrid/env.gfdl-ws | 6 + MOM_code/src/tools/make_hgrid/env.pan | 6 + MOM_code/src/tools/make_hgrid/env.zeus | 0 MOM_code/src/tools/make_hgrid/fre-nctools.mk | 98 + MOM_code/src/tools/make_hgrid/make_hgrid.c | 974 ++ MOM_code/src/tools/make_quick_mosaic/env.gaea | 4 + .../src/tools/make_quick_mosaic/env.gfdl-ws | 6 + MOM_code/src/tools/make_quick_mosaic/env.pan | 6 + MOM_code/src/tools/make_quick_mosaic/env.zeus | 0 .../tools/make_quick_mosaic/fre-nctools.mk | 73 + .../make_quick_mosaic/make_quick_mosaic.c | 743 ++ .../src/tools/make_regional_mosaic/env.gaea | 4 + .../tools/make_regional_mosaic/env.gfdl-ws | 6 + .../src/tools/make_regional_mosaic/env.pan | 7 + .../src/tools/make_regional_mosaic/env.zeus | 0 .../tools/make_regional_mosaic/fre-nctools.mk | 72 + .../make_regional_mosaic.c | 284 + MOM_code/src/tools/make_solo_mosaic/COPYING | 159 + MOM_code/src/tools/make_solo_mosaic/env.gaea | 4 + .../src/tools/make_solo_mosaic/env.gfdl-ws | 6 + MOM_code/src/tools/make_solo_mosaic/env.pan | 6 + MOM_code/src/tools/make_solo_mosaic/env.zeus | 0 .../src/tools/make_solo_mosaic/fre-nctools.mk | 76 + .../src/tools/make_solo_mosaic/get_contact.c | 531 + .../src/tools/make_solo_mosaic/get_contact.h | 17 + .../tools/make_solo_mosaic/make_solo_mosaic.c | 329 + MOM_code/src/tools/make_topog/Makefile | 48 + MOM_code/src/tools/make_topog/Makefile_mpi | 49 + MOM_code/src/tools/make_topog/env.gaea | 4 + MOM_code/src/tools/make_topog/env.gfdl-ws | 6 + MOM_code/src/tools/make_topog/env.pan | 6 + MOM_code/src/tools/make_topog/env.zeus | 0 MOM_code/src/tools/make_topog/fre-nctools.mk | 82 + MOM_code/src/tools/make_topog/make_topog.c | 840 ++ MOM_code/src/tools/make_topog/topog.c | 1153 ++ MOM_code/src/tools/make_topog/topog.h | 25 + MOM_code/src/tools/make_vgrid/create_vgrid.c | 45 + MOM_code/src/tools/make_vgrid/create_vgrid.h | 12 + MOM_code/src/tools/make_vgrid/env.gaea | 4 + MOM_code/src/tools/make_vgrid/env.gfdl-ws | 6 + MOM_code/src/tools/make_vgrid/env.pan | 6 + MOM_code/src/tools/make_vgrid/env.zeus | 0 MOM_code/src/tools/make_vgrid/fre-nctools.mk | 83 + MOM_code/src/tools/make_vgrid/make_vgrid.c | 238 + MOM_code/src/tools/mppncscatter/common.h | 52 + MOM_code/src/tools/mppncscatter/env.gaea | 3 + MOM_code/src/tools/mppncscatter/env.gfdl-ws | 1 + MOM_code/src/tools/mppncscatter/env.pan | 4 + MOM_code/src/tools/mppncscatter/env.zeus | 0 .../src/tools/mppncscatter/fre-nctools.mk | 41 + MOM_code/src/tools/mppncscatter/main.c | 27 + .../src/tools/mppncscatter/mppncscatter.c | 1408 +++ .../src/tools/mppncscatter/mppncscatter.h | 49 + MOM_code/src/tools/mppncscatter/opt.c | 186 + MOM_code/src/tools/mppncscatter/opt.h | 80 + MOM_code/src/tools/mppncscatter/scatterdim.c | 34 + MOM_code/src/tools/mppncscatter/scatterdim.h | 24 + MOM_code/src/tools/mppncscatter/strlist.c | 264 + MOM_code/src/tools/mppncscatter/strlist.h | 58 + MOM_code/src/tools/mppncscatter/util.h | 11 + MOM_code/src/tools/mppncscatter/xmalloc.c | 60 + MOM_code/src/tools/mppncscatter/xmalloc.h | 55 + MOM_code/src/tools/ncexists/COPYING | 159 + MOM_code/src/tools/ncexists/env.gaea | 1 + MOM_code/src/tools/ncexists/env.gfdl-ws | 6 + MOM_code/src/tools/ncexists/env.pan | 2 + MOM_code/src/tools/ncexists/env.zeus | 0 MOM_code/src/tools/ncexists/fre-nctools.mk | 44 + MOM_code/src/tools/ncexists/ncexists.c | 138 + MOM_code/src/tools/remap_land/env.gaea | 4 + MOM_code/src/tools/remap_land/env.gfdl-ws | 6 + MOM_code/src/tools/remap_land/env.pan | 6 + MOM_code/src/tools/remap_land/env.zeus | 0 MOM_code/src/tools/remap_land/fre-nctools.mk | 82 + MOM_code/src/tools/remap_land/remap_land.c | 1814 ++++ MOM_code/src/tools/river_regrid/env.gaea | 4 + MOM_code/src/tools/river_regrid/env.gfdl-ws | 6 + MOM_code/src/tools/river_regrid/env.pan | 6 + MOM_code/src/tools/river_regrid/env.zeus | 0 .../src/tools/river_regrid/fre-nctools.mk | 72 + .../src/tools/river_regrid/river_regrid.c | 1555 +++ MOM_code/src/tools/runoff_regrid/env.gaea | 4 + MOM_code/src/tools/runoff_regrid/env.gfdl-ws | 6 + MOM_code/src/tools/runoff_regrid/env.pan | 6 + MOM_code/src/tools/runoff_regrid/env.zeus | 0 .../src/tools/runoff_regrid/fre-nctools.mk | 81 + .../src/tools/runoff_regrid/runoff_regrid.c | 742 ++ MOM_code/src/tools/scripts/run.csh | 1080 ++ MOM_code/src/tools/shared/COPYING | 159 + MOM_code/src/tools/shared/mpp.c | 335 + MOM_code/src/tools/shared/mpp.h | 29 + MOM_code/src/tools/shared/mpp_domain.c | 901 ++ MOM_code/src/tools/shared/mpp_domain.h | 54 + MOM_code/src/tools/shared/mpp_io.c | 1218 +++ MOM_code/src/tools/shared/mpp_io.h | 59 + MOM_code/src/tools/shared/tool_util.c | 751 ++ MOM_code/src/tools/shared/tool_util.h | 26 + .../tools/transfer_to_mosaic_grid/env.gaea | 4 + .../tools/transfer_to_mosaic_grid/env.gfdl-ws | 6 + .../src/tools/transfer_to_mosaic_grid/env.pan | 6 + .../tools/transfer_to_mosaic_grid/env.zeus | 0 .../transfer_to_mosaic_grid/fre-nctools.mk | 72 + .../transfer_to_mosaic.c | 1425 +++ MOM_code/test/MOM_SIS.om3_core3.checksums.txt | 139 + MOM_code/test/__init__.py | 0 MOM_code/test/test_bit_reproducibility.py | 119 + MOM_forcing/README.md | 0 .../Untitled-checkpoint.ipynb | 6 + .../INPUT/grid_spec.nc | Bin 0 -> 10015691 bytes .../INPUT/lwdn.mom.dta.nc | 1 + .../INPUT}/mask_table.121.14x17 | 0 .../INPUT}/mask_table.14.6x7 | 0 .../INPUT}/mask_table.36.9x10 | 0 .../INPUT/obc_clin_west.dta.nc | 1 + .../INPUT/obc_tr.nc | Bin 0 -> 2138328 bytes .../INPUT/obc_trop_west.dta.nc | 1 + .../INPUT/ocean_ergom.res.nc | Bin 0 -> 130102748 bytes .../INPUT/ocean_temp_salt.res.nc | Bin 0 -> 15002792 bytes .../INPUT/pressure.mom.dta.nc | 1 + .../INPUT/rain.mom.dta.nc | 1 + .../INPUT/roughness_cdbot.nc | Bin 0 -> 49716 bytes .../INPUT/runoff.nc | 1 + .../INPUT/shumi.mom.dta.nc | 1 + .../INPUT/snow.mom.dta.nc | 1 + .../INPUT/sst_ice_clim.nc | Bin 0 -> 7015308 bytes .../INPUT/swdn.mom.dta.nc | 1 + .../INPUT/tair.mom.dta.nc | 1 + .../INPUT/windxy.mom.dta.nc | 1 + .../RESTART/coupler.res | 3 + .../RESTART/ice_model.res.nc | Bin 0 -> 7741933 bytes .../RESTART/ocean_barotropic.res.nc | Bin 0 -> 1033490 bytes .../RESTART/ocean_density.res.nc | Bin 0 -> 52601313 bytes .../RESTART/ocean_frazil.res.nc | Bin 0 -> 7527706 bytes .../RESTART/ocean_lap_friction.res.nc | Bin 0 -> 93123 bytes .../RESTART/ocean_obc.res.nc | Bin 0 -> 327913 bytes .../RESTART/ocean_pot_temp.res.nc | Bin 0 -> 7527712 bytes .../RESTART/ocean_sbc.res.nc | Bin 0 -> 487486 bytes .../RESTART/ocean_temp_salt.res.nc | Bin 0 -> 15039487 bytes .../RESTART/ocean_thickness.res.nc | Bin 0 -> 45318978 bytes .../RESTART/ocean_tracer.res | 4 + .../RESTART/ocean_velocity.res.nc | Bin 0 -> 15039471 bytes .../RESTART/ocean_velocity_advection.res.nc | Bin 0 -> 30053954 bytes .../RESTART/ocean_wave.res.nc | Bin 0 -> 171380 bytes .../balt-8nm-skag-v01-r05_1961/Untitled.ipynb | 75 + .../balt-8nm-skag-v01-r05_1961/data_table | 70 + .../balt-8nm-skag-v01-r05_1961/data_table~ | 70 + .../diag_integral.out | 0 .../balt-8nm-skag-v01-r05_1961/diag_table | 39 + .../diag_table_transect | 1356 +++ .../diag_table_transect~ | 1357 +++ .../balt-8nm-skag-v01-r05_1961/diag_table~ | 1357 +++ .../balt-8nm-skag-v01-r05_1961/ergom.out | 2497 +++++ .../balt-8nm-skag-v01-r05_1961/field_table | 44 + .../balt-8nm-skag-v01-r05_1961/fms_MOM_SIS.x | Bin 0 -> 24944336 bytes .../balt-8nm-skag-v01-r05_1961/gridinfo.nc | Bin 0 -> 326839 bytes .../balt-8nm-skag-v01-r05_1961/input.nml | 730 ++ .../balt-8nm-skag-v01-r05_1961/input.nml_2 | 907 ++ .../balt-8nm-skag-v01-r05_1961/input.nml~ | 907 ++ .../logfile.000000.out | 2559 +++++ .../balt-8nm-skag-v01-r05_1961/obc_b_west.out | 30 + .../obc_b_west.out.0000 | 0 .../obc_b_west.out.0002 | 0 .../obc_b_west.out.0004 | 0 .../balt-8nm-skag-v01-r05_1961/obc_west.out | 49 + .../obc_west.out.0000 | 0 .../obc_west.out.0002 | 202 + .../obc_west.out.0004 | 202 + .../balt-8nm-skag-v01-r05_1961/ocean_day3d.nc | Bin 0 -> 1604345308 bytes .../ocean_day3d.nc.0000 | Bin 0 -> 33485555 bytes .../ocean_day3d.nc.0001 | Bin 0 -> 33485555 bytes .../ocean_day3d.nc.0002 | Bin 0 -> 29145235 bytes .../ocean_day3d.nc.0003 | Bin 0 -> 28513219 bytes .../ocean_day3d.nc.0004 | Bin 0 -> 29145235 bytes .../ocean_day3d.nc.0005 | Bin 0 -> 28513219 bytes .../ocean_day3d.nc.0006 | Bin 0 -> 29145235 bytes .../ocean_day3d.nc.0007 | Bin 0 -> 28513219 bytes .../ocean_day3d.nc.0008 | Bin 0 -> 30598851 bytes .../ocean_day3d.nc.0009 | Bin 0 -> 29935235 bytes .../postprocessing.sh | 18 + .../roughness_cdbot.nc_old | Bin 0 -> 49716 bytes .../balt-8nm-skag-v01-r05_1961/time_stamp.out | 2 + MOM_setup/binary/fms_MOM_SIS.x | Bin 0 -> 24944336 bytes MOM_setup/cp_forcing | 34 + MOM_setup/cp_new_input.nml | 20 + MOM_setup/do_post_hlrn.sh | 20 + MOM_setup/init/ocean_ergom.res.nc | Bin 0 -> 130102748 bytes MOM_setup/init/ocean_temp_salt.res.nc | Bin 0 -> 15002792 bytes MOM_setup/init/sst_ice_clim.nc | Bin 0 -> 7015308 bytes MOM_setup/input.nml | 730 ++ MOM_setup/input/data_table | 70 + MOM_setup/input/data_table~ | 70 + MOM_setup/input/diag_table | 569 + MOM_setup/input/diag_table_transect | 1356 +++ MOM_setup/input/diag_table_transect~ | 1357 +++ MOM_setup/input/diag_table~ | 1357 +++ MOM_setup/input/field_table | 44 + MOM_setup/input/grid_spec.nc | Bin 0 -> 10015691 bytes MOM_setup/input/input.nml | 908 ++ MOM_setup/input/input.nml_2 | 907 ++ MOM_setup/input/input.nml~ | 907 ++ MOM_setup/input/mask_table.121.14x17 | 123 + MOM_setup/input/mask_table.14.6x7 | 16 + MOM_setup/input/mask_table.36.9x10 | 38 + MOM_setup/input/postprocessing.sh | 18 + MOM_setup/input/roughness_cdbot.nc | Bin 0 -> 49716 bytes MOM_setup/input/roughness_cdbot.nc_old | Bin 0 -> 49716 bytes .../input/xbt-gen/diag_table.stats | 0 .../input/xbt-gen/gen_xbts.sh | 0 .../input/xbt-gen/xbts.balt01 | 0 MOM_setup/job_driver | 26 + MOM_setup/job_v01_r02 | 225 + MOM_setup/job_v01_r02~ | 225 + MOM_setup/postprocess_for_validator.py | 157 + MOM_setup/postprocess_for_validator_merge.sh | 70 + MOM_setup/preprocessing/input.nml | 972 ++ MOM_setup/preprocessing/input.nml~ | 0 .../preprocessing/ocean_temp_salt.res.nc | Bin 0 -> 15047716 bytes MOM_setup/preprocessing/prep_init.py | 28 + MOM_setup/preprocessing/prep_init.py~ | 26 + MOM_setup/preprocessing/single_job.sh | 50 + MOM_setup/preprocessing/single_job.sh~ | 47 + MOM_setup/prod_driver | 49 + MOM_setup/single_job.sh | 47 + Untitled.ipynb | 2146 ++++ docker-compose.yml | 2 +- docker_run.sh | 7 +- dockerfile | 13 +- model_setup/binary/fms_MOM_SIS.x | Bin 24627264 -> 24944392 bytes model_setup/forcing_file.yaml | 35 +- model_setup/git_submit.py | 3 - model_setup/init/init.tar.gz | Bin 14890011 -> 0 bytes model_setup/input/data_table | 22 +- model_setup/input/diag_table | 2191 +--- model_setup/input/diag_table~ | 1332 ++- model_setup/input/field_table | 39 +- model_setup/input/input.nml | 211 +- model_setup/input/input.nml~ | 32 +- model_setup/input/postprocessing.sh | 21 +- model_simulations/README.md | 1 + 1249 files changed, 921465 insertions(+), 2591 deletions(-) create mode 100644 MOM_code/.cproject create mode 100644 MOM_code/.gitignore create mode 100644 MOM_code/.project create mode 100644 MOM_code/LICENSE create mode 100644 MOM_code/README create mode 100644 MOM_code/README.md create mode 100644 MOM_code/annex.py create mode 100644 MOM_code/bin/.prepare_pubrel.csh.swp create mode 100755 MOM_code/bin/combine_blobs.py create mode 100644 MOM_code/bin/combine_blobs.pyc create mode 100755 MOM_code/bin/diag_table_chk create mode 100644 MOM_code/bin/environs.gfdl_ws_32.intel create mode 100644 MOM_code/bin/environs.gfdl_ws_64.gnu create mode 100644 MOM_code/bin/environs.gfdl_ws_64.intel create mode 100644 MOM_code/bin/environs.gfortran create mode 100644 MOM_code/bin/environs.hpcs.intel create mode 100644 MOM_code/bin/environs.ibm.xlf create mode 100644 MOM_code/bin/environs.ifc create mode 100644 MOM_code/bin/environs.ifc.RNP create mode 100644 MOM_code/bin/environs.ifc.pocNP create mode 100644 MOM_code/bin/environs.ifc.pocNP-OMPI create mode 100644 MOM_code/bin/environs.ifc.test create mode 100644 MOM_code/bin/environs.nci create mode 100644 MOM_code/bin/environs.ncrc1.intel create mode 100644 MOM_code/bin/environs.ncrc2.gnu create mode 100644 MOM_code/bin/environs.ncrc2.intel create mode 100644 MOM_code/bin/environs.workstation.gfort create mode 100644 MOM_code/bin/environs.workstation.intel create mode 100755 MOM_code/bin/list_files_with_tag create mode 100755 MOM_code/bin/list_paths create mode 100755 MOM_code/bin/mkmf create mode 100644 MOM_code/bin/mkmf.debugtemplate.gfdl_ws_32.intel create mode 100644 MOM_code/bin/mkmf.debugtemplate.ia64 create mode 100644 MOM_code/bin/mkmf.debugtemplate.ia64_hdf create mode 100644 MOM_code/bin/mkmf.debugtemplate.sgi create mode 100644 MOM_code/bin/mkmf.html create mode 100644 MOM_code/bin/mkmf.template.gfdl_ws_32.intel create mode 100644 MOM_code/bin/mkmf.template.gfdl_ws_64.gnu create mode 100644 MOM_code/bin/mkmf.template.gfdl_ws_64.gnu.debug create mode 100644 MOM_code/bin/mkmf.template.gfdl_ws_64.intel create mode 100644 MOM_code/bin/mkmf.template.gfortran create mode 100644 MOM_code/bin/mkmf.template.hpcs.intel create mode 100644 MOM_code/bin/mkmf.template.ia64 create mode 100644 MOM_code/bin/mkmf.template.ia64_flt create mode 100644 MOM_code/bin/mkmf.template.ia64_flt_hdf create mode 100644 MOM_code/bin/mkmf.template.ibm create mode 100644 MOM_code/bin/mkmf.template.ibm.xlf create mode 100644 MOM_code/bin/mkmf.template.ifc create mode 100644 MOM_code/bin/mkmf.template.nci create mode 100644 MOM_code/bin/mkmf.template.ncrc1.intel create mode 100644 MOM_code/bin/mkmf.template.ncrc2.gnu create mode 100644 MOM_code/bin/mkmf.template.ncrc2.intel create mode 100644 MOM_code/bin/mkmf.template.nec create mode 100644 MOM_code/bin/mkmf.template.pgi create mode 100644 MOM_code/bin/mkmf.template.pscale create mode 100644 MOM_code/bin/mkmf.template.sgi create mode 100644 MOM_code/bin/mkmf.template.t3e create mode 100644 MOM_code/bin/mkmf.template.t90 create mode 100644 MOM_code/bin/mkmf.template.workstation.gfort create mode 100644 MOM_code/bin/mkmf.template.workstation.intel create mode 100755 MOM_code/bin/mppnccombine.gfdl_ws_64.intel create mode 100755 MOM_code/bin/prepare_pubrel.csh create mode 100755 MOM_code/bin/time_stamp.csh create mode 100755 MOM_code/build create mode 100644 MOM_code/doc/web/config.json create mode 100644 MOM_code/doc/web/quickstart.md create mode 100644 MOM_code/doc/web/user_guide.md create mode 100644 MOM_code/exp/FMS_compile.csh create mode 100755 MOM_code/exp/MOM_compile.csh create mode 100755 MOM_code/exp/MOM_run.csh create mode 100644 MOM_code/exp/atmos_null_compile.csh create mode 100644 MOM_code/exp/ice_compile.csh create mode 100644 MOM_code/exp/land_null_compile.csh create mode 100755 MOM_code/exp/mom5_ebm_compile.csh create mode 100644 MOM_code/exp/ocean_compile.csh create mode 100755 MOM_code/exp/preprocessing.csh create mode 100755 MOM_code/mppnccombine/a.out create mode 100644 MOM_code/mppnccombine/mppnccombine.c.chunking.c create mode 100644 MOM_code/src/atmos_bgrid/documentation/decomposition.jpg create mode 100644 MOM_code/src/atmos_bgrid/documentation/flowchart.jpg create mode 100644 MOM_code/src/atmos_bgrid/documentation/global_temp_grid.jpg create mode 100644 MOM_code/src/atmos_bgrid/documentation/global_vel_grid.jpg create mode 100644 MOM_code/src/atmos_bgrid/documentation/north_pole.jpg create mode 100644 MOM_code/src/atmos_bgrid/documentation/south_pole.jpg create mode 100644 MOM_code/src/atmos_bgrid/documentation/text.xbm create mode 100644 MOM_code/src/atmos_bgrid/documentation/time_steps.jpg create mode 100644 MOM_code/src/atmos_bgrid/driver/coupled/atmosphere.F90 create mode 100644 MOM_code/src/atmos_bgrid/driver/coupled/bgrid_physics.F90 create mode 100644 MOM_code/src/atmos_bgrid/driver/shallow/atmosphere.F90 create mode 100644 MOM_code/src/atmos_bgrid/driver/solo/atmosphere.F90 create mode 100644 MOM_code/src/atmos_bgrid/model/bgrid_advection.F90 create mode 100644 MOM_code/src/atmos_bgrid/model/bgrid_conserve_energy.F90 create mode 100644 MOM_code/src/atmos_bgrid/model/bgrid_core.F90 create mode 100644 MOM_code/src/atmos_bgrid/model/bgrid_core_driver.F90 create mode 100644 MOM_code/src/atmos_bgrid/model/bgrid_horiz_adjust.F90 create mode 100644 MOM_code/src/atmos_bgrid/model/bgrid_horiz_diff.F90 create mode 100644 MOM_code/src/atmos_bgrid/model/bgrid_sponge.F90 create mode 100644 MOM_code/src/atmos_bgrid/model/bgrid_vert_adjust.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_change_grid.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_cold_start.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_diagnostics.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_halo.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_horiz.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_integrals.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_masks.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_polar_filter.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_prog_var.F90 create mode 100644 MOM_code/src/atmos_bgrid/tools/bgrid_vert.F90 create mode 100644 MOM_code/src/atmos_coupled/atmos_model.F90 create mode 100644 MOM_code/src/atmos_ebm/atmosphere.F90 create mode 100644 MOM_code/src/atmos_ebm/ebm_diagnostics.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/driver/coupled/atmosphere.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/driver/coupled/fv_physics.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/driver/solo/atmosphere.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/driver/solo/fv_phys.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/driver/solo/hswf.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/dyn_core.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/ecmfft.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/fill_module.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/fv_arrays.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/fv_arrays.h create mode 100644 MOM_code/src/atmos_fv_dynamics/model/fv_dynamics.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/fv_pack.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/fv_point.inc create mode 100644 MOM_code/src/atmos_fv_dynamics/model/mapz_module.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/pft_module.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/shr_kind_mod.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/sw_core.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/tp_core.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/tracer_2d.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/model/update_fv_phys.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/age_of_air.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/fv_diagnostics.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/fv_restart.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/getmax.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/gmean.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/init_dry_atm.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/init_sw_ic.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/mod_comm.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/par_vecsum.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/pmaxmin.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/pv_module.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/set_eta.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/timingModule.F90 create mode 100644 MOM_code/src/atmos_fv_dynamics/tools/upper.F90 create mode 100644 MOM_code/src/atmos_null/atmos_model.F90 create mode 100644 MOM_code/src/atmos_null/atmos_tracer_driver.F90 create mode 100644 MOM_code/src/atmos_param/betts_miller/betts_miller.F90 create mode 100644 MOM_code/src/atmos_param/betts_miller/bm_massflux.F90 create mode 100644 MOM_code/src/atmos_param/betts_miller/bm_omp.F90 create mode 100644 MOM_code/src/atmos_param/cg_drag/cg_drag.F90 create mode 100644 MOM_code/src/atmos_param/cloud_generator/betaDistribution.F90 create mode 100644 MOM_code/src/atmos_param/cloud_generator/cloud_generator.F90 create mode 100644 MOM_code/src/atmos_param/cloud_obs/cloud_obs.F90 create mode 100644 MOM_code/src/atmos_param/cloud_rad/cloud_rad.F90 create mode 100644 MOM_code/src/atmos_param/cloud_zonal/cloud_zonal.F90 create mode 100644 MOM_code/src/atmos_param/clouds/clouds.F90 create mode 100644 MOM_code/src/atmos_param/clubb/CLUBB_driver_SCM.F90 create mode 100644 MOM_code/src/atmos_param/clubb/MG_microp_3D.F90 create mode 100644 MOM_code/src/atmos_param/cosp/MISR_simulator/MISR_simulator.F create mode 100644 MOM_code/src/atmos_param/cosp/MODIS_simulator/modis_simulator.F90 create mode 100644 MOM_code/src/atmos_param/cosp/actsim/lidar_simulator.F90 create mode 100644 MOM_code/src/atmos_param/cosp/actsim/lmd_ipsl_stats.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_constants.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_defs.H create mode 100644 MOM_code/src/atmos_param/cosp/cosp_diagnostics.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_driver.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_io.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_isccp_simulator.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_lidar.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_misr_simulator.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_modis_simulator.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_rttov_simulator.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_simulator.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_stats.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_types.F90 create mode 100644 MOM_code/src/atmos_param/cosp/cosp_utils.F90 create mode 100644 MOM_code/src/atmos_param/cosp/icarus-scops-3.7/congvec.H create mode 100644 MOM_code/src/atmos_param/cosp/icarus-scops-3.7/congvec.inc create mode 100644 MOM_code/src/atmos_param/cosp/icarus-scops-3.7/icarus.F90 create mode 100644 MOM_code/src/atmos_param/cosp/icarus-scops-3.7/isccp_cloud_types.F create mode 100644 MOM_code/src/atmos_param/cosp/icarus-scops-3.7/scops.F create mode 100644 MOM_code/src/atmos_param/cosp/llnl/cosp_radar.F90 create mode 100644 MOM_code/src/atmos_param/cosp/llnl/llnl_stats.F90 create mode 100644 MOM_code/src/atmos_param/cosp/llnl/pf_to_mr.F create mode 100644 MOM_code/src/atmos_param/cosp/llnl/prec_scops.F create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/array_lib.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/atmos_lib.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/dsd.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/format_input.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/gases.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/load_hydrometeor_classes.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/load_mie_table.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/math_lib.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/mrgrnk.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/optics_lib.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/radar_simulator.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/radar_simulator_types.F90 create mode 100644 MOM_code/src/atmos_param/cosp/quickbeam/zeff.F90 create mode 100644 MOM_code/src/atmos_param/cu_mo_trans/cu_mo_trans.F90 create mode 100644 MOM_code/src/atmos_param/damping_driver/damping_driver.F90 create mode 100644 MOM_code/src/atmos_param/diag_cloud/diag_cloud.F90 create mode 100644 MOM_code/src/atmos_param/diag_cloud_rad/diag_cloud_rad.F90 create mode 100644 MOM_code/src/atmos_param/diag_integral/diag_integral.F90 create mode 100644 MOM_code/src/atmos_param/diffusivity/diffusivity.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/cumulus_closure_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_cape_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_cloud_model_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_deep.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_deep_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_deep_miz.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_lite_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_lscloud_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_meso_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_nml.h create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_rad_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_types.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_types.h create mode 100644 MOM_code/src/atmos_param/donner_deep/donner_utilities_k.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/fms_donner.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/nonfms_donner.F90 create mode 100644 MOM_code/src/atmos_param/donner_deep/wet_deposition_0D.F90 create mode 100644 MOM_code/src/atmos_param/dry_adj/README create mode 100644 MOM_code/src/atmos_param/dry_adj/dry_adj.F90 create mode 100644 MOM_code/src/atmos_param/edt/edt.F90 create mode 100644 MOM_code/src/atmos_param/entrain/entrain.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/co2_data.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/co2int.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/fs_profile.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/fsrad.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/hconst.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/longwave.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/mcm_lw.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/mcm_sw_driver.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/mcm_swnew.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/mcm_swtbls.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/rad_diag.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/rdparm.F90 create mode 100644 MOM_code/src/atmos_param/fsrad/shortwave.F90 create mode 100644 MOM_code/src/atmos_param/grey_radiation/grey_radiation.F90 create mode 100644 MOM_code/src/atmos_param/lin_cloud_microphys/lin_cloud_microphys.F90 create mode 100644 MOM_code/src/atmos_param/lscale_cond/lscale_cond.F90 create mode 100644 MOM_code/src/atmos_param/mg_drag/mg_drag.F90 create mode 100644 MOM_code/src/atmos_param/moist_conv/moist_conv.F90 create mode 100644 MOM_code/src/atmos_param/moist_processes/detr_ice_num.F90 create mode 100644 MOM_code/src/atmos_param/moist_processes/moist_processes.F90 create mode 100644 MOM_code/src/atmos_param/moist_processes/moist_processes_utils.F90 create mode 100644 MOM_code/src/atmos_param/moist_processes/moistproc_kernels.F90 create mode 100644 MOM_code/src/atmos_param/monin_obukhov/monin_obukhov.F90 create mode 100644 MOM_code/src/atmos_param/monin_obukhov/monin_obukhov_interfaces.h create mode 100644 MOM_code/src/atmos_param/monin_obukhov/monin_obukhov_kernel.F90 create mode 100644 MOM_code/src/atmos_param/my25_turb/my25_turb.F90 create mode 100644 MOM_code/src/atmos_param/physics_driver/physics_driver.F90 create mode 100644 MOM_code/src/atmos_param/radiation_driver/radiation_driver.F90 create mode 100644 MOM_code/src/atmos_param/ras/ras.F90 create mode 100644 MOM_code/src/atmos_param/rh_clouds/rh_clouds.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/aerosol.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/aerosolrad_package.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/bulkphys_rad.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/cloud_spec.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/cloudrad_diagnostics.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/cloudrad_package.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/diag_clouds_W.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/donner_deep_clouds_W.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/esfsw_driver.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/esfsw_parameters.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/gas_tf.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/isccp_clouds.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/lhsw_driver.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/longwave_clouds.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/longwave_driver.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/longwave_fluxes.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/longwave_params.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/longwave_tables.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/lw_gases_stdtf.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/mgrp_prscr_clds.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/microphys_cloud.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/microphys_rad.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/optical_path.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/original_fms_rad.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/ozone.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/rad_output_file.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/rad_utilities.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/radiation_diag.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/radiative_gases.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/rh_based_clouds.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/sea_esf_rad.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/sealw99.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/shortwave_driver.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/specified_clouds_W.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/standalone_clouds.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/strat_clouds_W.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/uw_clouds_W.F90 create mode 100644 MOM_code/src/atmos_param/sea_esf_rad/zetac_clouds_W.F90 create mode 100644 MOM_code/src/atmos_param/shallow_conv/shallow_conv.F90 create mode 100644 MOM_code/src/atmos_param/shallow_cu/conv_closures.F90 create mode 100644 MOM_code/src/atmos_param/shallow_cu/conv_plumes.F90 create mode 100644 MOM_code/src/atmos_param/shallow_cu/conv_plumes_k.F90 create mode 100644 MOM_code/src/atmos_param/shallow_cu/conv_utilities.F90 create mode 100644 MOM_code/src/atmos_param/shallow_cu/conv_utilities_k.F90 create mode 100644 MOM_code/src/atmos_param/shallow_cu/deep_conv.F90 create mode 100644 MOM_code/src/atmos_param/shallow_cu/uw_conv.F90 create mode 100644 MOM_code/src/atmos_param/stable_bl_turb/stable_bl_turb.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/aerosol_cloud.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/check_nan.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/cldwat2m_micro.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/gamma_mg.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/mg_const.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/microphysics.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/morrison_gettelman_microp.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/nc_cond.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/polysvp.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/rotstayn_klein_mp.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/simple_pdf.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/strat_cloud.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/strat_cloud_legacy.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/strat_cloud_utilities.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/strat_netcdf.F90 create mode 100644 MOM_code/src/atmos_param/strat_cloud/strat_nml.h create mode 100644 MOM_code/src/atmos_param/topo_drag/topo_drag.F90 create mode 100644 MOM_code/src/atmos_param/vert_diff/vert_diff.F90 create mode 100644 MOM_code/src/atmos_param/vert_diff_driver/vert_diff_driver.F90 create mode 100644 MOM_code/src/atmos_param/vert_turb_driver/vert_turb_driver.F90 create mode 100644 MOM_code/src/atmos_shared/atmos_nudge/atmos_nudge.F90 create mode 100644 MOM_code/src/atmos_shared/interpolator/interpolator.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/aer_ccn_act/aer_ccn_act.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/aer_ccn_act/aer_ccn_act_k.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/aer_ccn_act/aer_in_act.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/aer_ccn_act/aerosol_params.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/aer_ccn_act/ice_nucl.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_age_tracer.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_carbon_aerosol.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_ch3i.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_co2.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_convection_tracer.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_dust.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_radon.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_sea_salt.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_soa.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_sulfate.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_sulfur_hex.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_tracer_driver.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/atmos_tracer_utilities.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/stratchem/strat_chem_driver.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/stratchem/strat_chem_model.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/m_tracname.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_chem_utls.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_chemdr.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_chemini.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_exp_slv.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_fastjx.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_fphoto.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_hook.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_imp_slv.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_jpl.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_photo.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_read_sim_chm.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_rodas_slv.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_setinv.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_setsox.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/mo_usrrxt.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/moz.mat.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/moz.mods.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/moz.subs.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/strat_chem_utilities.F90 create mode 100644 MOM_code/src/atmos_shared/tracer_driver/tropchem/tropchem_driver.F90 create mode 100644 MOM_code/src/atmos_shared/vert_advection/vert_advection.F90 create mode 100644 MOM_code/src/atmos_spectral/driver/coupled/atmosphere.F90 create mode 100644 MOM_code/src/atmos_spectral/driver/coupled/mcm_mca_lsc.F90 create mode 100644 MOM_code/src/atmos_spectral/driver/coupled/mcm_moist_processes.F90 create mode 100644 MOM_code/src/atmos_spectral/driver/coupled/spectral_physics.F90 create mode 100644 MOM_code/src/atmos_spectral/driver/solo/atmosphere.F90 create mode 100644 MOM_code/src/atmos_spectral/driver/solo/idealized_moist_phys.F90 create mode 100644 MOM_code/src/atmos_spectral/driver/solo/mixed_layer.F90 create mode 100644 MOM_code/src/atmos_spectral/init/ic_from_external_file.F90 create mode 100644 MOM_code/src/atmos_spectral/init/jablonowski_2006.F90 create mode 100644 MOM_code/src/atmos_spectral/init/polvani_2004.F90 create mode 100644 MOM_code/src/atmos_spectral/init/polvani_2007.F90 create mode 100644 MOM_code/src/atmos_spectral/init/spectral_init_cond.F90 create mode 100644 MOM_code/src/atmos_spectral/init/spectral_initialize_fields.F90 create mode 100644 MOM_code/src/atmos_spectral/init/topog_regularization.F90 create mode 100644 MOM_code/src/atmos_spectral/init/vert_coordinate.F90 create mode 100644 MOM_code/src/atmos_spectral/model/every_step_diagnostics.F90 create mode 100644 MOM_code/src/atmos_spectral/model/fv_advection.F90 create mode 100644 MOM_code/src/atmos_spectral/model/global_integral.F90 create mode 100644 MOM_code/src/atmos_spectral/model/implicit.F90 create mode 100644 MOM_code/src/atmos_spectral/model/leapfrog.F90 create mode 100644 MOM_code/src/atmos_spectral/model/matrix_invert.F90 create mode 100644 MOM_code/src/atmos_spectral/model/press_and_geopot.F90 create mode 100644 MOM_code/src/atmos_spectral/model/spectral_damping.F90 create mode 100644 MOM_code/src/atmos_spectral/model/spectral_dynamics.F90 create mode 100644 MOM_code/src/atmos_spectral/model/tracer_type.F90 create mode 100644 MOM_code/src/atmos_spectral/model/water_borrowing.F90 create mode 100644 MOM_code/src/atmos_spectral/tools/gauss_and_legendre.F90 create mode 100644 MOM_code/src/atmos_spectral/tools/grid_fourier.F90 create mode 100644 MOM_code/src/atmos_spectral/tools/spec_mpp.F90 create mode 100644 MOM_code/src/atmos_spectral/tools/spherical.F90 create mode 100644 MOM_code/src/atmos_spectral/tools/spherical_fourier.F90 create mode 100644 MOM_code/src/atmos_spectral/tools/transforms.F90 create mode 100644 MOM_code/src/coupler/coupler_main.F90 create mode 100644 MOM_code/src/coupler/flux_exchange.F90 create mode 100644 MOM_code/src/coupler/surface_flux.F90 create mode 100644 MOM_code/src/ice_param/ice_albedo.F90 create mode 100644 MOM_code/src/ice_param/ocean_albedo.F90 create mode 100644 MOM_code/src/ice_param/ocean_rough.F90 create mode 100644 MOM_code/src/ice_sis/fig1.txt create mode 100644 MOM_code/src/ice_sis/fig2.txt create mode 100644 MOM_code/src/ice_sis/fig3.txt create mode 100644 MOM_code/src/ice_sis/ice_bergs.F90 create mode 100644 MOM_code/src/ice_sis/ice_dyn.F90 create mode 100644 MOM_code/src/ice_sis/ice_grid.F90 create mode 100644 MOM_code/src/ice_sis/ice_model.F90 create mode 100644 MOM_code/src/ice_sis/ice_spec.F90 create mode 100644 MOM_code/src/ice_sis/ice_thm.F90 create mode 100644 MOM_code/src/ice_sis/ice_type.F90 create mode 100644 MOM_code/src/ice_sis/mask.F90 create mode 100644 MOM_code/src/ice_sis/rot.F90 create mode 100644 MOM_code/src/land_lad/land_model.F90 create mode 100644 MOM_code/src/land_lad/land_types.F90 create mode 100644 MOM_code/src/land_lad/numerics.F90 create mode 100644 MOM_code/src/land_lad/soil/land_properties.F90 create mode 100644 MOM_code/src/land_lad/soil/rivers.F90 create mode 100644 MOM_code/src/land_lad/soil/soil.F90 create mode 100644 MOM_code/src/land_lad/vegetation/vegetation.F90 create mode 100644 MOM_code/src/land_lad2/canopy_air/cana_tile.F90 create mode 100644 MOM_code/src/land_lad2/canopy_air/canopy_air.F90 create mode 100644 MOM_code/src/land_lad2/doc/glac_tile_diagram.png create mode 100644 MOM_code/src/land_lad2/doc/soil_tile_diagram.png create mode 100644 MOM_code/src/land_lad2/doc/style.css create mode 100644 MOM_code/src/land_lad2/glacier/glac_tile.F90 create mode 100644 MOM_code/src/land_lad2/glacier/glacier.F90 create mode 100644 MOM_code/src/land_lad2/lake/lake.F90 create mode 100644 MOM_code/src/land_lad2/lake/lake_tile.F90 create mode 100644 MOM_code/src/land_lad2/land_constants.F90 create mode 100644 MOM_code/src/land_lad2/land_data.F90 create mode 100644 MOM_code/src/land_lad2/land_model.F90 create mode 100644 MOM_code/src/land_lad2/land_tile.F90 create mode 100644 MOM_code/src/land_lad2/river/river.F90 create mode 100644 MOM_code/src/land_lad2/river/river_physics.F90 create mode 100644 MOM_code/src/land_lad2/river/river_type.F90 create mode 100644 MOM_code/src/land_lad2/shared/debug.inc create mode 100644 MOM_code/src/land_lad2/shared/land_debug.F90 create mode 100644 MOM_code/src/land_lad2/shared/land_io.F90 create mode 100644 MOM_code/src/land_lad2/shared/land_numerics.F90 create mode 100644 MOM_code/src/land_lad2/shared/land_tile_diag.F90 create mode 100644 MOM_code/src/land_lad2/shared/land_tile_diag_buff.F90 create mode 100644 MOM_code/src/land_lad2/shared/land_tile_diag_sel.F90 create mode 100644 MOM_code/src/land_lad2/shared/land_tile_io.F90 create mode 100644 MOM_code/src/land_lad2/shared/land_utils.F90 create mode 100644 MOM_code/src/land_lad2/shared/nf_utils/getput.inc create mode 100644 MOM_code/src/land_lad2/shared/nf_utils/getput_compressed.inc create mode 100644 MOM_code/src/land_lad2/shared/nf_utils/nf_utils.F90 create mode 100644 MOM_code/src/land_lad2/shared/nf_utils/nfc.F90 create mode 100644 MOM_code/src/land_lad2/shared/nf_utils/nfu.F90 create mode 100644 MOM_code/src/land_lad2/shared/sphum.F90 create mode 100644 MOM_code/src/land_lad2/shared/table_printer.F90 create mode 100644 MOM_code/src/land_lad2/snow/snow.F90 create mode 100644 MOM_code/src/land_lad2/snow/snow_tile.F90 create mode 100644 MOM_code/src/land_lad2/soil/soil.F90 create mode 100644 MOM_code/src/land_lad2/soil/soil_tile.F90 create mode 100644 MOM_code/src/land_lad2/soil/uptake.F90 create mode 100644 MOM_code/src/land_lad2/topo_rough/topo_rough.F90 create mode 100644 MOM_code/src/land_lad2/transitions/transitions.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/read_remap_cohort_data.inc create mode 100644 MOM_code/src/land_lad2/vegetation/vegetation.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_cohort.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_cohort_io.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_cohort_io.inc create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_data.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_disturbance.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_dynamics.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_harvesting.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_photosynthesis.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_radiation.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_static_override.F90 create mode 100644 MOM_code/src/land_lad2/vegetation/vegn_tile.F90 create mode 100644 MOM_code/src/land_null/land_model.F90 create mode 100644 MOM_code/src/land_param/climap_albedo.F90 create mode 100644 MOM_code/src/mom5/doc/MOM_practice.html create mode 100644 MOM_code/src/mom5/doc/MOM_practice.xml create mode 100644 MOM_code/src/mom5/doc/README create mode 100644 MOM_code/src/mom5/doc/quickstart_guide.html create mode 100644 MOM_code/src/mom5/doc/quickstart_guide.xml create mode 100644 MOM_code/src/mom5/drivers/mom_oasis3_interface.F90 create mode 100644 MOM_code/src/mom5/drivers/ocean_solo.F90 create mode 100644 MOM_code/src/mom5/drivers/ocean_solo_nuopc.inc create mode 100644 MOM_code/src/mom5/ocean_bgc/ocean_bgc_restore.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocean_generic_tracer.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocean_ibgc.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocean_pert_co2.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocean_po4_pre.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocmip2_abiotic.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocmip2_biotic.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocmip2_cfc.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocmip2_co2calc.F90 create mode 100644 MOM_code/src/mom5/ocean_bgc/ocmip2_he.F90 create mode 100644 MOM_code/src/mom5/ocean_blobs/ocean_blob.F90 create mode 100644 MOM_code/src/mom5/ocean_blobs/ocean_blob_diag.F90 create mode 100644 MOM_code/src/mom5/ocean_blobs/ocean_blob_dynamic_bottom.F90 create mode 100644 MOM_code/src/mom5/ocean_blobs/ocean_blob_dynamic_free.F90 create mode 100644 MOM_code/src/mom5/ocean_blobs/ocean_blob_static_bottom.F90 create mode 100644 MOM_code/src/mom5/ocean_blobs/ocean_blob_static_free.F90 create mode 100644 MOM_code/src/mom5/ocean_blobs/ocean_blob_util.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_advection_velocity.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_barotropic.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_bbc.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_coriolis.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_density.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_domains.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_grids.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_memory.h create mode 100644 MOM_code/src/mom5/ocean_core/ocean_model.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_obc.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_obc_barotrop.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_operators.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_parameters.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_pressure.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_sbc.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_thickness.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_topog.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_types.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_util.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_velocity.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_velocity_advect.F90 create mode 100644 MOM_code/src/mom5/ocean_core/ocean_workspace.F90 create mode 100644 MOM_code/src/mom5/ocean_core/oda_driver.F90 create mode 100644 MOM_code/src/mom5/ocean_diag/ocean_adv_vel_diag.F90 create mode 100644 MOM_code/src/mom5/ocean_diag/ocean_diagnostics.F90 create mode 100644 MOM_code/src/mom5/ocean_diag/ocean_drifters.F90 create mode 100644 MOM_code/src/mom5/ocean_diag/ocean_tracer_diag.F90 create mode 100644 MOM_code/src/mom5/ocean_diag/ocean_tracer_util.F90 create mode 100644 MOM_code/src/mom5/ocean_diag/ocean_velocity_diag.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/README create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/Makefile create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/README create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/a4.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/airseaIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/bioIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/cases.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/definitions.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/extraIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/gotm.bib create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/gotm_pub.bib create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/guiIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/html.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/introduction.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/letter.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/mainIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/make_pub_list create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/meanflowIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/observationsIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/outputIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/turbulenceIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/doc/utilIntro.tex create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/include/cppdefs.h create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/include/version.h create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/Makefile create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/algebraiclength.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/alpha_mnb.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/cmue_a.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/cmue_b.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/cmue_c.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/cmue_d.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/cmue_ma.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/cmue_rf.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/cmue_sg.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/compute_cpsi3.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/compute_rist.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/dissipationeq.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/epsbalgebraic.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/fk_craig.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/genericeq.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/gotm_lib_version.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/internal_wave.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/ispralength.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/kbalgebraic.F90 create mode 100755 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/kbeq.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/kpp.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/lengthscaleeq.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/potentialml.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/production.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/q2over2eq.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/r_ratio.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/tkealgebraic.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/tkeeq.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/turbulence.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/turbulence/variances.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/Makefile create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/adv_center.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/convert_fluxes.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/diff_center.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/diff_face.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/eqstate.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/gridinterpol.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/lagrange.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/ode_solvers.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/time.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/tridiagonal_gotm.F90 create mode 100644 MOM_code/src/mom5/ocean_param/gotm-4.0/util/util.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_bih_friction.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_bih_tracer.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_bihcgrid_friction.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_bihcst_friction.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_bihgen_friction.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_lap_friction.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_lap_tracer.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_lapcgrid_friction.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_lapcst_friction.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_lapgen_friction.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_mixdownslope.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_sigma_transport.F90 create mode 100644 MOM_code/src/mom5/ocean_param/lateral/ocean_submesoscale.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysics.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysicsA.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysicsB.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysicsC.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysics_diff.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysics_flux.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysics_new.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysics_skew.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysics_tensor.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysics_util.F90 create mode 100644 MOM_code/src/mom5/ocean_param/neutral/ocean_nphysics_util_new.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_increment_eta.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_increment_tracer.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_increment_velocity.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_momentum_source.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_overexchange.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_overflow.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_overflow_OFP.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_rivermix.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_riverspread.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_shortwave.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_shortwave_csiro.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_shortwave_gfdl.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_shortwave_jerlov.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_sponges_eta.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_sponges_tracer.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_sponges_velocity.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_xlandinsert.F90 create mode 100644 MOM_code/src/mom5/ocean_param/sources/ocean_xlandmix.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_convect.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_form_drag.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_chen.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_const.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_gotm.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_kpp_mom4p0.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_kpp_mom4p1.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_kpp_test.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_mix.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_pp.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_tidal.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_tidal_test.F90 create mode 100644 MOM_code/src/mom5/ocean_param/vertical/ocean_vert_util.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/fabm_driver.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/fabm_driver.h create mode 100644 MOM_code/src/mom5/ocean_tracers/mom4p1.tex create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_age_tracer.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_fabm.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_frazil.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_passive.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_residency.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_residency_integrand.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_residency_meta.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_residency_ml.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_residency_range.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_tempsalt.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_tpm.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_tpm_util.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_tracer.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/ocean_tracer_advect.F90 create mode 100644 MOM_code/src/mom5/ocean_tracers/transport_matrix.F90 create mode 100644 MOM_code/src/mom5/ocean_wave/ocean_wave.F90 create mode 100644 MOM_code/src/mom5/ocean_wave/ocean_wave_type.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/FMS_coupler_util.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/FMS_ocmip2_co2calc.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/generic_BLING.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/generic_CFC.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/generic_COBALT.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/generic_TOPAZ.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/generic_miniBLING.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/generic_tracer.F90 create mode 100644 MOM_code/src/ocean_shared/generic_tracers/generic_tracer_utils.F90 create mode 100644 MOM_code/src/path_names_shared create mode 100644 MOM_code/src/postprocessing/land_utils/COPYING create mode 100644 MOM_code/src/postprocessing/land_utils/Makefile create mode 100644 MOM_code/src/postprocessing/land_utils/Makefile.static create mode 100644 MOM_code/src/postprocessing/land_utils/combine-ncc.F90 create mode 100755 MOM_code/src/postprocessing/land_utils/compile.csh create mode 100644 MOM_code/src/postprocessing/land_utils/decompress-ncc.F90 create mode 100755 MOM_code/src/postprocessing/land_utils/do_make create mode 100755 MOM_code/src/postprocessing/land_utils/do_make.static create mode 100644 MOM_code/src/postprocessing/land_utils/env.gaea create mode 100644 MOM_code/src/postprocessing/land_utils/env.gfdl-ws create mode 100644 MOM_code/src/postprocessing/land_utils/env.pan create mode 100644 MOM_code/src/postprocessing/land_utils/env.zeus create mode 100644 MOM_code/src/postprocessing/land_utils/fre-nctools.mk create mode 100644 MOM_code/src/postprocessing/land_utils/is-compressed.c create mode 100644 MOM_code/src/postprocessing/land_utils/nfu.F90 create mode 100644 MOM_code/src/postprocessing/land_utils/nfu_compress.F90 create mode 100644 MOM_code/src/postprocessing/list_ncvars/COPYING create mode 100644 MOM_code/src/postprocessing/list_ncvars/Makefile create mode 100644 MOM_code/src/postprocessing/list_ncvars/Makefile.static create mode 100755 MOM_code/src/postprocessing/list_ncvars/do_make create mode 100755 MOM_code/src/postprocessing/list_ncvars/do_make.static create mode 100644 MOM_code/src/postprocessing/list_ncvars/env.gaea create mode 100644 MOM_code/src/postprocessing/list_ncvars/env.gfdl-ws create mode 100644 MOM_code/src/postprocessing/list_ncvars/env.pan create mode 100644 MOM_code/src/postprocessing/list_ncvars/env.zeus create mode 100644 MOM_code/src/postprocessing/list_ncvars/fre-nctools.mk create mode 100755 MOM_code/src/postprocessing/list_ncvars/list_ncvars.csh create mode 100644 MOM_code/src/postprocessing/list_ncvars/list_ncvars.f90 create mode 100644 MOM_code/src/postprocessing/mppnccombine/COPYING create mode 100755 MOM_code/src/postprocessing/mppnccombine/do_make create mode 100755 MOM_code/src/postprocessing/mppnccombine/do_make.static create mode 100644 MOM_code/src/postprocessing/mppnccombine/env.gaea create mode 100644 MOM_code/src/postprocessing/mppnccombine/env.gfdl-ws create mode 100644 MOM_code/src/postprocessing/mppnccombine/env.pan create mode 100644 MOM_code/src/postprocessing/mppnccombine/env.zeus create mode 100644 MOM_code/src/postprocessing/mppnccombine/fre-nctools.mk create mode 100644 MOM_code/src/postprocessing/mppnccombine/makefile_icc create mode 100644 MOM_code/src/postprocessing/mppnccombine/makefile_icc.static create mode 100755 MOM_code/src/postprocessing/mppnccombine/mppnccombine create mode 100644 MOM_code/src/postprocessing/mppnccombine/mppnccombine.c create mode 100644 MOM_code/src/postprocessing/mppnccombine/mppnccombine.c.chunking.c create mode 100644 MOM_code/src/postprocessing/mppnccombine/mppnccombine.c.chunking.o create mode 100755 MOM_code/src/postprocessing/mppnccombine/mppnccombine_Compile.csh create mode 100644 MOM_code/src/postprocessing/nccatm/nccatm.c create mode 100644 MOM_code/src/postprocessing/plevel/COPYING create mode 100644 MOM_code/src/postprocessing/plevel/Makefile create mode 100644 MOM_code/src/postprocessing/plevel/Makefile.r4 create mode 100644 MOM_code/src/postprocessing/plevel/Makefile.r4.static create mode 100644 MOM_code/src/postprocessing/plevel/Makefile.static create mode 100755 MOM_code/src/postprocessing/plevel/compile create mode 100755 MOM_code/src/postprocessing/plevel/do_make create mode 100755 MOM_code/src/postprocessing/plevel/do_make.static create mode 100644 MOM_code/src/postprocessing/plevel/env.gaea create mode 100644 MOM_code/src/postprocessing/plevel/env.gfdl-ws create mode 100644 MOM_code/src/postprocessing/plevel/env.pan create mode 100644 MOM_code/src/postprocessing/plevel/env.zeus create mode 100644 MOM_code/src/postprocessing/plevel/fre-nctools.mk create mode 100644 MOM_code/src/postprocessing/plevel/moisture_convert.F90 create mode 100644 MOM_code/src/postprocessing/plevel/pinterp_utilities.F90 create mode 100644 MOM_code/src/postprocessing/plevel/plev_constants.F90 create mode 100755 MOM_code/src/postprocessing/plevel/plevel.sh create mode 100644 MOM_code/src/postprocessing/plevel/pressure_interp.F90 create mode 100644 MOM_code/src/postprocessing/plevel/run_pressure_interp.F90 create mode 100644 MOM_code/src/postprocessing/regrid/regrid.F90 create mode 100755 MOM_code/src/postprocessing/regrid/regrid.csh create mode 100644 MOM_code/src/postprocessing/regrid_MESO/Resample_on_Z.c create mode 100644 MOM_code/src/postprocessing/regrid_hfls/fre-nctools.mk create mode 100644 MOM_code/src/postprocessing/regrid_hfls/regrid_hfls.F90 create mode 100644 MOM_code/src/postprocessing/timavg/COPYING create mode 100644 MOM_code/src/postprocessing/timavg/Makefile create mode 100644 MOM_code/src/postprocessing/timavg/Makefile.r4 create mode 100644 MOM_code/src/postprocessing/timavg/Makefile.r4.static create mode 100644 MOM_code/src/postprocessing/timavg/Makefile.static create mode 100755 MOM_code/src/postprocessing/timavg/do_make create mode 100755 MOM_code/src/postprocessing/timavg/do_make.static create mode 100644 MOM_code/src/postprocessing/timavg/env.gaea create mode 100644 MOM_code/src/postprocessing/timavg/env.gfdl-ws create mode 100644 MOM_code/src/postprocessing/timavg/env.pan create mode 100644 MOM_code/src/postprocessing/timavg/env.zeus create mode 100644 MOM_code/src/postprocessing/timavg/fre-nctools.mk create mode 100755 MOM_code/src/postprocessing/timavg/timavg.csh create mode 100644 MOM_code/src/postprocessing/timavg/time_average.f90 create mode 100644 MOM_code/src/preprocessing/generate_grids/atmos/atmos_grid.f90 create mode 100755 MOM_code/src/preprocessing/generate_grids/atmos/atmos_grid_generator.csh create mode 100644 MOM_code/src/preprocessing/generate_grids/atmos/atmos_grid_generator.f90 create mode 100644 MOM_code/src/preprocessing/generate_grids/grid_transfer/grid_transfer.F90 create mode 100755 MOM_code/src/preprocessing/generate_grids/grid_transfer/grid_transfer.csh create mode 100644 MOM_code/src/preprocessing/generate_grids/make_xgrids/make_xgrids.c create mode 100755 MOM_code/src/preprocessing/generate_grids/make_xgrids/make_xgrids.csh create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/check_mask.F90 create mode 100755 MOM_code/src/preprocessing/generate_grids/ocean/check_mask.csh create mode 100755 MOM_code/src/preprocessing/generate_grids/ocean/compare_grid.csh create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/compare_grid.f90 create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/edit_grid.F90 create mode 100755 MOM_code/src/preprocessing/generate_grids/ocean/edit_grid.csh create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/grids_type.f90 create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/grids_util.f90 create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/hgrid.f90 create mode 100755 MOM_code/src/preprocessing/generate_grids/ocean/ocean_grid_generator.csh create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/ocean_grid_generator.f90 create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/topog.f90 create mode 100644 MOM_code/src/preprocessing/generate_grids/ocean/vgrid.f90 create mode 100755 MOM_code/src/preprocessing/mom4_prep/idealized_bc/idealized_bc.csh create mode 100644 MOM_code/src/preprocessing/mom4_prep/idealized_bc/idealized_bc.f90 create mode 100644 MOM_code/src/preprocessing/mom4_prep/idealized_bc/idealized_bc_driver.f90 create mode 100755 MOM_code/src/preprocessing/mom4_prep/idealized_ic/idealized_ic.csh create mode 100644 MOM_code/src/preprocessing/mom4_prep/idealized_ic/idealized_ic.f90 create mode 100644 MOM_code/src/preprocessing/mom4_prep/idealized_ic/idealized_ic_driver.f90 create mode 100644 MOM_code/src/preprocessing/regrid/regrid.F90 create mode 100755 MOM_code/src/preprocessing/regrid/regrid.csh create mode 100755 MOM_code/src/preprocessing/regrid_2d/regrid_2d.csh create mode 100644 MOM_code/src/preprocessing/regrid_2d/regrid_2d.f90 create mode 100755 MOM_code/src/preprocessing/regrid_3d/regrid_3d.csh create mode 100644 MOM_code/src/preprocessing/regrid_3d/regrid_3d.f90 create mode 100755 MOM_code/src/preprocessing/river_regrid/river_regrid.csh create mode 100644 MOM_code/src/preprocessing/river_regrid/river_regrid.f90 create mode 100644 MOM_code/src/preprocessing/runoff_regrid/create_grid.F90 create mode 100644 MOM_code/src/preprocessing/runoff_regrid/runoff_regrid.F90 create mode 100755 MOM_code/src/preprocessing/runoff_regrid/runoff_regrid.csh create mode 100755 MOM_code/src/preprocessing/test_time_interp_ext/test_time_interp_ext.csh create mode 100755 MOM_code/src/preprocessing/test_time_interp_ext/test_time_interp_ext.pl create mode 100644 MOM_code/src/shared/amip_interp/amip_interp.F90 create mode 100644 MOM_code/src/shared/amip_interp/amip_interp.rey_oi.txt create mode 100644 MOM_code/src/shared/astronomy/astronomy.F90 create mode 100644 MOM_code/src/shared/axis_utils/axis_utils.F90 create mode 100644 MOM_code/src/shared/column_diagnostics/column_diagnostics.F90 create mode 100644 MOM_code/src/shared/constants/constants.F90 create mode 100644 MOM_code/src/shared/coupler/atmos_ocean_fluxes.F90 create mode 100644 MOM_code/src/shared/coupler/coupler_types.F90 create mode 100644 MOM_code/src/shared/coupler/ensemble_manager.F90 create mode 100644 MOM_code/src/shared/data_override/data_override.F90 create mode 100644 MOM_code/src/shared/diag_manager/diag_axis.F90 create mode 100644 MOM_code/src/shared/diag_manager/diag_data.F90 create mode 100644 MOM_code/src/shared/diag_manager/diag_grid.F90 create mode 100644 MOM_code/src/shared/diag_manager/diag_manager.F90 create mode 100644 MOM_code/src/shared/diag_manager/diag_output.F90 create mode 100644 MOM_code/src/shared/diag_manager/diag_table.F90 create mode 100644 MOM_code/src/shared/diag_manager/diag_util.F90 create mode 100644 MOM_code/src/shared/drifters/cloud_interpolator.F90 create mode 100644 MOM_code/src/shared/drifters/drifters.F90 create mode 100755 MOM_code/src/shared/drifters/drifters_combine create mode 100644 MOM_code/src/shared/drifters/drifters_comm.F90 create mode 100644 MOM_code/src/shared/drifters/drifters_compute_k.h create mode 100644 MOM_code/src/shared/drifters/drifters_core.F90 create mode 100644 MOM_code/src/shared/drifters/drifters_input.F90 create mode 100644 MOM_code/src/shared/drifters/drifters_io.F90 create mode 100644 MOM_code/src/shared/drifters/drifters_push.h create mode 100644 MOM_code/src/shared/drifters/drifters_set_field.h create mode 100644 MOM_code/src/shared/drifters/fms_switches.h create mode 100644 MOM_code/src/shared/drifters/quicksort.F90 create mode 100644 MOM_code/src/shared/drifters/readme.txt create mode 100644 MOM_code/src/shared/exchange/stock_constants.F90 create mode 100644 MOM_code/src/shared/exchange/test_xgrid.F90 create mode 100644 MOM_code/src/shared/exchange/xgrid.F90 create mode 100644 MOM_code/src/shared/fft/fft.F90 create mode 100644 MOM_code/src/shared/fft/fft99.F90 create mode 100644 MOM_code/src/shared/field_manager/field_manager.F90 create mode 100644 MOM_code/src/shared/field_manager/fm_util.F90 create mode 100644 MOM_code/src/shared/field_manager/parse.inc create mode 100644 MOM_code/src/shared/fms/fms.F90 create mode 100644 MOM_code/src/shared/fms/fms_io.F90 create mode 100644 MOM_code/src/shared/fms/read_data_2d.inc create mode 100644 MOM_code/src/shared/fms/read_data_3d.inc create mode 100644 MOM_code/src/shared/fms/read_data_4d.inc create mode 100644 MOM_code/src/shared/fms/test_fms_io.F90 create mode 100644 MOM_code/src/shared/fms/write_data.inc create mode 100644 MOM_code/src/shared/horiz_interp/horiz_interp.F90 create mode 100644 MOM_code/src/shared/horiz_interp/horiz_interp_bicubic.F90 create mode 100644 MOM_code/src/shared/horiz_interp/horiz_interp_bilinear.F90 create mode 100644 MOM_code/src/shared/horiz_interp/horiz_interp_conserve.F90 create mode 100644 MOM_code/src/shared/horiz_interp/horiz_interp_spherical.F90 create mode 100644 MOM_code/src/shared/horiz_interp/horiz_interp_type.F90 create mode 100644 MOM_code/src/shared/include/fms_platform.h create mode 100644 MOM_code/src/shared/memutils/memuse.c create mode 100644 MOM_code/src/shared/memutils/memutils.F90 create mode 100644 MOM_code/src/shared/mosaic/constant.h create mode 100644 MOM_code/src/shared/mosaic/create_xgrid.c create mode 100644 MOM_code/src/shared/mosaic/create_xgrid.h create mode 100644 MOM_code/src/shared/mosaic/gradient.F90 create mode 100644 MOM_code/src/shared/mosaic/gradient_c2l.c create mode 100644 MOM_code/src/shared/mosaic/gradient_c2l.h create mode 100644 MOM_code/src/shared/mosaic/grid.F90 create mode 100644 MOM_code/src/shared/mosaic/interp.c create mode 100644 MOM_code/src/shared/mosaic/interp.h create mode 100644 MOM_code/src/shared/mosaic/mosaic.F90 create mode 100644 MOM_code/src/shared/mosaic/mosaic_util.c create mode 100644 MOM_code/src/shared/mosaic/mosaic_util.h create mode 100644 MOM_code/src/shared/mosaic/read_mosaic.c create mode 100644 MOM_code/src/shared/mosaic/read_mosaic.h create mode 100644 MOM_code/src/shared/mpp/affinity.c create mode 100644 MOM_code/src/shared/mpp/include/mpp_chksum.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_chksum_int.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_chksum_scalar.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_comm.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_comm_mpi.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_comm_nocomm.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_comm_sma.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_data_mpi.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_data_nocomm.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_data_sma.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_define_nest_domains.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_check.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_checkV.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_get_boundary.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_global_field.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_redistribute.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_update.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_updateV.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_updateV_ad.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_updateV_nonblock.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_update_ad.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_update_nest.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_do_update_nonblock.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_domains_comm.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_domains_define.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_domains_misc.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_domains_reduce.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_domains_util.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_error_a_a.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_error_a_s.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_error_s_a.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_error_s_s.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_gather.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_get_boundary.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_global_field.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_global_reduce.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_global_sum.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_global_sum_ad.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_global_sum_tl.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_io_connect.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_io_misc.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_io_read.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_io_util.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_io_write.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_read_2Ddecomp.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_reduce_mpi.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_reduce_nocomm.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_reduce_sma.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_sum.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_sum_mpi.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_sum_nocomm.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_sum_sma.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_transmit.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_transmit_mpi.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_transmit_nocomm.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_transmit_sma.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_update_domains2D.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_update_domains2D_ad.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_update_domains2D_nonblock.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_update_nest_domains.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_util.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_util_mpi.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_util_nocomm.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_util_sma.inc create mode 100644 MOM_code/src/shared/mpp/include/mpp_write.h create mode 100644 MOM_code/src/shared/mpp/include/mpp_write_2Ddecomp.h create mode 100644 MOM_code/src/shared/mpp/include/system_clock.h create mode 100644 MOM_code/src/shared/mpp/mpp.F90 create mode 100644 MOM_code/src/shared/mpp/mpp_data.F90 create mode 100644 MOM_code/src/shared/mpp/mpp_domains.F90 create mode 100644 MOM_code/src/shared/mpp/mpp_io.F90 create mode 100644 MOM_code/src/shared/mpp/mpp_memutils.F90 create mode 100644 MOM_code/src/shared/mpp/mpp_parameter.F90 create mode 100644 MOM_code/src/shared/mpp/mpp_pset.F90 create mode 100644 MOM_code/src/shared/mpp/mpp_utilities.F90 create mode 100644 MOM_code/src/shared/mpp/nsclock.c create mode 100644 MOM_code/src/shared/mpp/test_mpp.F90 create mode 100644 MOM_code/src/shared/mpp/test_mpp_domains.F90 create mode 100644 MOM_code/src/shared/mpp/test_mpp_io.F90 create mode 100644 MOM_code/src/shared/mpp/test_mpp_pset.F90 create mode 100644 MOM_code/src/shared/mpp/threadloc.c create mode 100644 MOM_code/src/shared/oda_tools/oda_core.F90 create mode 100644 MOM_code/src/shared/oda_tools/oda_core_ecda.F90 create mode 100644 MOM_code/src/shared/oda_tools/oda_types.F90 create mode 100644 MOM_code/src/shared/oda_tools/write_ocean_data.F90 create mode 100644 MOM_code/src/shared/oda_tools/xbt_drop_rate_adjust.f90 create mode 100644 MOM_code/src/shared/platform/platform.F90 create mode 100644 MOM_code/src/shared/random_numbers/MersenneTwister.F90 create mode 100644 MOM_code/src/shared/random_numbers/random_numbers.F90 create mode 100644 MOM_code/src/shared/sat_vapor_pres/sat_vapor_pres.F90 create mode 100644 MOM_code/src/shared/sat_vapor_pres/sat_vapor_pres_k.F90 create mode 100644 MOM_code/src/shared/station_data/station_data.F90 create mode 100644 MOM_code/src/shared/time_interp/time_interp.F90 create mode 100644 MOM_code/src/shared/time_interp/time_interp_external.F90 create mode 100644 MOM_code/src/shared/time_manager/get_cal_time.F90 create mode 100644 MOM_code/src/shared/time_manager/time_manager.F90 create mode 100644 MOM_code/src/shared/topography/gaussian_topog.F90 create mode 100644 MOM_code/src/shared/topography/topography.F90 create mode 100644 MOM_code/src/shared/tracer_manager/tracer_manager.F90 create mode 100644 MOM_code/src/shared/tridiagonal/tridiagonal.F90 create mode 100644 MOM_code/src/tools/check_mask/check_mask.c create mode 100644 MOM_code/src/tools/check_mask/env.gaea create mode 100644 MOM_code/src/tools/check_mask/env.gfdl-ws create mode 100644 MOM_code/src/tools/check_mask/env.pan create mode 100644 MOM_code/src/tools/check_mask/env.zeus create mode 100644 MOM_code/src/tools/check_mask/fre-nctools.mk create mode 100644 MOM_code/src/tools/edit_landXocean/Makefile create mode 100644 MOM_code/src/tools/edit_landXocean/edit_landXocean.c create mode 100644 MOM_code/src/tools/fregrid/COPYING create mode 100644 MOM_code/src/tools/fregrid/bilinear_interp.c create mode 100644 MOM_code/src/tools/fregrid/bilinear_interp.h create mode 100644 MOM_code/src/tools/fregrid/conserve_interp.c create mode 100644 MOM_code/src/tools/fregrid/conserve_interp.h create mode 100644 MOM_code/src/tools/fregrid/env.gaea create mode 100644 MOM_code/src/tools/fregrid/env.gfdl-ws create mode 100644 MOM_code/src/tools/fregrid/env.pan create mode 100644 MOM_code/src/tools/fregrid/env.zeus create mode 100644 MOM_code/src/tools/fregrid/fre-nctools.mk create mode 100644 MOM_code/src/tools/fregrid/fregrid.c create mode 100644 MOM_code/src/tools/fregrid/fregrid_util.c create mode 100644 MOM_code/src/tools/fregrid/fregrid_util.h create mode 100644 MOM_code/src/tools/fregrid/globals.h create mode 100644 MOM_code/src/tools/make_coupler_mosaic/env.gaea create mode 100644 MOM_code/src/tools/make_coupler_mosaic/env.gfdl-ws create mode 100644 MOM_code/src/tools/make_coupler_mosaic/env.pan create mode 100644 MOM_code/src/tools/make_coupler_mosaic/env.zeus create mode 100644 MOM_code/src/tools/make_coupler_mosaic/fre-nctools.mk create mode 100644 MOM_code/src/tools/make_coupler_mosaic/make_coupler_mosaic.c create mode 100644 MOM_code/src/tools/make_hgrid/COPYING create mode 100644 MOM_code/src/tools/make_hgrid/create_conformal_cubic_grid.c create mode 100644 MOM_code/src/tools/make_hgrid/create_gnomonic_cubic_grid.c create mode 100644 MOM_code/src/tools/make_hgrid/create_grid_from_file.c create mode 100644 MOM_code/src/tools/make_hgrid/create_hgrid.h create mode 100644 MOM_code/src/tools/make_hgrid/create_lonlat_grid.c create mode 100644 MOM_code/src/tools/make_hgrid/env.gaea create mode 100644 MOM_code/src/tools/make_hgrid/env.gfdl-ws create mode 100644 MOM_code/src/tools/make_hgrid/env.pan create mode 100644 MOM_code/src/tools/make_hgrid/env.zeus create mode 100644 MOM_code/src/tools/make_hgrid/fre-nctools.mk create mode 100644 MOM_code/src/tools/make_hgrid/make_hgrid.c create mode 100644 MOM_code/src/tools/make_quick_mosaic/env.gaea create mode 100644 MOM_code/src/tools/make_quick_mosaic/env.gfdl-ws create mode 100644 MOM_code/src/tools/make_quick_mosaic/env.pan create mode 100644 MOM_code/src/tools/make_quick_mosaic/env.zeus create mode 100644 MOM_code/src/tools/make_quick_mosaic/fre-nctools.mk create mode 100644 MOM_code/src/tools/make_quick_mosaic/make_quick_mosaic.c create mode 100644 MOM_code/src/tools/make_regional_mosaic/env.gaea create mode 100644 MOM_code/src/tools/make_regional_mosaic/env.gfdl-ws create mode 100644 MOM_code/src/tools/make_regional_mosaic/env.pan create mode 100644 MOM_code/src/tools/make_regional_mosaic/env.zeus create mode 100644 MOM_code/src/tools/make_regional_mosaic/fre-nctools.mk create mode 100644 MOM_code/src/tools/make_regional_mosaic/make_regional_mosaic.c create mode 100644 MOM_code/src/tools/make_solo_mosaic/COPYING create mode 100644 MOM_code/src/tools/make_solo_mosaic/env.gaea create mode 100644 MOM_code/src/tools/make_solo_mosaic/env.gfdl-ws create mode 100644 MOM_code/src/tools/make_solo_mosaic/env.pan create mode 100644 MOM_code/src/tools/make_solo_mosaic/env.zeus create mode 100644 MOM_code/src/tools/make_solo_mosaic/fre-nctools.mk create mode 100644 MOM_code/src/tools/make_solo_mosaic/get_contact.c create mode 100644 MOM_code/src/tools/make_solo_mosaic/get_contact.h create mode 100644 MOM_code/src/tools/make_solo_mosaic/make_solo_mosaic.c create mode 100644 MOM_code/src/tools/make_topog/Makefile create mode 100644 MOM_code/src/tools/make_topog/Makefile_mpi create mode 100644 MOM_code/src/tools/make_topog/env.gaea create mode 100644 MOM_code/src/tools/make_topog/env.gfdl-ws create mode 100644 MOM_code/src/tools/make_topog/env.pan create mode 100644 MOM_code/src/tools/make_topog/env.zeus create mode 100644 MOM_code/src/tools/make_topog/fre-nctools.mk create mode 100644 MOM_code/src/tools/make_topog/make_topog.c create mode 100644 MOM_code/src/tools/make_topog/topog.c create mode 100644 MOM_code/src/tools/make_topog/topog.h create mode 100644 MOM_code/src/tools/make_vgrid/create_vgrid.c create mode 100644 MOM_code/src/tools/make_vgrid/create_vgrid.h create mode 100644 MOM_code/src/tools/make_vgrid/env.gaea create mode 100644 MOM_code/src/tools/make_vgrid/env.gfdl-ws create mode 100644 MOM_code/src/tools/make_vgrid/env.pan create mode 100644 MOM_code/src/tools/make_vgrid/env.zeus create mode 100644 MOM_code/src/tools/make_vgrid/fre-nctools.mk create mode 100644 MOM_code/src/tools/make_vgrid/make_vgrid.c create mode 100755 MOM_code/src/tools/mppncscatter/common.h create mode 100644 MOM_code/src/tools/mppncscatter/env.gaea create mode 100644 MOM_code/src/tools/mppncscatter/env.gfdl-ws create mode 100644 MOM_code/src/tools/mppncscatter/env.pan create mode 100644 MOM_code/src/tools/mppncscatter/env.zeus create mode 100644 MOM_code/src/tools/mppncscatter/fre-nctools.mk create mode 100755 MOM_code/src/tools/mppncscatter/main.c create mode 100755 MOM_code/src/tools/mppncscatter/mppncscatter.c create mode 100755 MOM_code/src/tools/mppncscatter/mppncscatter.h create mode 100755 MOM_code/src/tools/mppncscatter/opt.c create mode 100755 MOM_code/src/tools/mppncscatter/opt.h create mode 100755 MOM_code/src/tools/mppncscatter/scatterdim.c create mode 100755 MOM_code/src/tools/mppncscatter/scatterdim.h create mode 100755 MOM_code/src/tools/mppncscatter/strlist.c create mode 100755 MOM_code/src/tools/mppncscatter/strlist.h create mode 100755 MOM_code/src/tools/mppncscatter/util.h create mode 100755 MOM_code/src/tools/mppncscatter/xmalloc.c create mode 100755 MOM_code/src/tools/mppncscatter/xmalloc.h create mode 100644 MOM_code/src/tools/ncexists/COPYING create mode 100644 MOM_code/src/tools/ncexists/env.gaea create mode 100644 MOM_code/src/tools/ncexists/env.gfdl-ws create mode 100644 MOM_code/src/tools/ncexists/env.pan create mode 100644 MOM_code/src/tools/ncexists/env.zeus create mode 100644 MOM_code/src/tools/ncexists/fre-nctools.mk create mode 100644 MOM_code/src/tools/ncexists/ncexists.c create mode 100644 MOM_code/src/tools/remap_land/env.gaea create mode 100644 MOM_code/src/tools/remap_land/env.gfdl-ws create mode 100644 MOM_code/src/tools/remap_land/env.pan create mode 100644 MOM_code/src/tools/remap_land/env.zeus create mode 100644 MOM_code/src/tools/remap_land/fre-nctools.mk create mode 100644 MOM_code/src/tools/remap_land/remap_land.c create mode 100644 MOM_code/src/tools/river_regrid/env.gaea create mode 100644 MOM_code/src/tools/river_regrid/env.gfdl-ws create mode 100644 MOM_code/src/tools/river_regrid/env.pan create mode 100644 MOM_code/src/tools/river_regrid/env.zeus create mode 100644 MOM_code/src/tools/river_regrid/fre-nctools.mk create mode 100644 MOM_code/src/tools/river_regrid/river_regrid.c create mode 100644 MOM_code/src/tools/runoff_regrid/env.gaea create mode 100644 MOM_code/src/tools/runoff_regrid/env.gfdl-ws create mode 100644 MOM_code/src/tools/runoff_regrid/env.pan create mode 100644 MOM_code/src/tools/runoff_regrid/env.zeus create mode 100644 MOM_code/src/tools/runoff_regrid/fre-nctools.mk create mode 100644 MOM_code/src/tools/runoff_regrid/runoff_regrid.c create mode 100755 MOM_code/src/tools/scripts/run.csh create mode 100644 MOM_code/src/tools/shared/COPYING create mode 100644 MOM_code/src/tools/shared/mpp.c create mode 100644 MOM_code/src/tools/shared/mpp.h create mode 100644 MOM_code/src/tools/shared/mpp_domain.c create mode 100644 MOM_code/src/tools/shared/mpp_domain.h create mode 100644 MOM_code/src/tools/shared/mpp_io.c create mode 100644 MOM_code/src/tools/shared/mpp_io.h create mode 100644 MOM_code/src/tools/shared/tool_util.c create mode 100644 MOM_code/src/tools/shared/tool_util.h create mode 100644 MOM_code/src/tools/transfer_to_mosaic_grid/env.gaea create mode 100644 MOM_code/src/tools/transfer_to_mosaic_grid/env.gfdl-ws create mode 100644 MOM_code/src/tools/transfer_to_mosaic_grid/env.pan create mode 100644 MOM_code/src/tools/transfer_to_mosaic_grid/env.zeus create mode 100644 MOM_code/src/tools/transfer_to_mosaic_grid/fre-nctools.mk create mode 100644 MOM_code/src/tools/transfer_to_mosaic_grid/transfer_to_mosaic.c create mode 100644 MOM_code/test/MOM_SIS.om3_core3.checksums.txt create mode 100644 MOM_code/test/__init__.py create mode 100644 MOM_code/test/test_bit_reproducibility.py create mode 100644 MOM_forcing/README.md create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/.ipynb_checkpoints/Untitled-checkpoint.ipynb create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/grid_spec.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/lwdn.mom.dta.nc rename {model_setup/input => MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT}/mask_table.121.14x17 (100%) rename {model_setup/input => MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT}/mask_table.14.6x7 (100%) rename {model_setup/input => MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT}/mask_table.36.9x10 (100%) create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/obc_clin_west.dta.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/obc_tr.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/obc_trop_west.dta.nc create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/ocean_ergom.res.nc create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/ocean_temp_salt.res.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/pressure.mom.dta.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/rain.mom.dta.nc create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/roughness_cdbot.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/runoff.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/shumi.mom.dta.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/snow.mom.dta.nc create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/sst_ice_clim.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/swdn.mom.dta.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/tair.mom.dta.nc create mode 120000 MOM_setup/balt-8nm-skag-v01-r05_1961/INPUT/windxy.mom.dta.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/coupler.res create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ice_model.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_barotropic.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_density.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_frazil.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_lap_friction.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_obc.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_pot_temp.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_sbc.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_temp_salt.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_thickness.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_tracer.res create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_velocity.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_velocity_advection.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/RESTART/ocean_wave.res.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/Untitled.ipynb create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/data_table create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/data_table~ create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/diag_integral.out create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/diag_table create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/diag_table_transect create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/diag_table_transect~ create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/diag_table~ create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ergom.out create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/field_table create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/fms_MOM_SIS.x create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/gridinfo.nc create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/input.nml create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/input.nml_2 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/input.nml~ create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/logfile.000000.out create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/obc_b_west.out create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/obc_b_west.out.0000 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/obc_b_west.out.0002 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/obc_b_west.out.0004 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/obc_west.out create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/obc_west.out.0000 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/obc_west.out.0002 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/obc_west.out.0004 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0000 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0001 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0002 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0003 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0004 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0005 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0006 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0007 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0008 create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/ocean_day3d.nc.0009 create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/postprocessing.sh create mode 100755 MOM_setup/balt-8nm-skag-v01-r05_1961/roughness_cdbot.nc_old create mode 100644 MOM_setup/balt-8nm-skag-v01-r05_1961/time_stamp.out create mode 100755 MOM_setup/binary/fms_MOM_SIS.x create mode 100755 MOM_setup/cp_forcing create mode 100755 MOM_setup/cp_new_input.nml create mode 100755 MOM_setup/do_post_hlrn.sh create mode 100755 MOM_setup/init/ocean_ergom.res.nc create mode 100755 MOM_setup/init/ocean_temp_salt.res.nc create mode 100755 MOM_setup/init/sst_ice_clim.nc create mode 100755 MOM_setup/input.nml create mode 100755 MOM_setup/input/data_table create mode 100755 MOM_setup/input/data_table~ create mode 100755 MOM_setup/input/diag_table create mode 100644 MOM_setup/input/diag_table_transect create mode 100644 MOM_setup/input/diag_table_transect~ create mode 100644 MOM_setup/input/diag_table~ create mode 100755 MOM_setup/input/field_table create mode 100755 MOM_setup/input/grid_spec.nc create mode 100755 MOM_setup/input/input.nml create mode 100755 MOM_setup/input/input.nml_2 create mode 100644 MOM_setup/input/input.nml~ create mode 100755 MOM_setup/input/mask_table.121.14x17 create mode 100755 MOM_setup/input/mask_table.14.6x7 create mode 100755 MOM_setup/input/mask_table.36.9x10 create mode 100755 MOM_setup/input/postprocessing.sh create mode 100755 MOM_setup/input/roughness_cdbot.nc create mode 100755 MOM_setup/input/roughness_cdbot.nc_old rename {model_setup => MOM_setup}/input/xbt-gen/diag_table.stats (100%) rename {model_setup => MOM_setup}/input/xbt-gen/gen_xbts.sh (100%) rename {model_setup => MOM_setup}/input/xbt-gen/xbts.balt01 (100%) create mode 100755 MOM_setup/job_driver create mode 100755 MOM_setup/job_v01_r02 create mode 100644 MOM_setup/job_v01_r02~ create mode 100755 MOM_setup/postprocess_for_validator.py create mode 100755 MOM_setup/postprocess_for_validator_merge.sh create mode 100644 MOM_setup/preprocessing/input.nml create mode 100644 MOM_setup/preprocessing/input.nml~ create mode 100755 MOM_setup/preprocessing/ocean_temp_salt.res.nc create mode 100644 MOM_setup/preprocessing/prep_init.py create mode 100644 MOM_setup/preprocessing/prep_init.py~ create mode 100644 MOM_setup/preprocessing/single_job.sh create mode 100644 MOM_setup/preprocessing/single_job.sh~ create mode 100755 MOM_setup/prod_driver create mode 100755 MOM_setup/single_job.sh create mode 100644 Untitled.ipynb delete mode 100644 model_setup/git_submit.py delete mode 100644 model_setup/init/init.tar.gz mode change 100755 => 100644 model_setup/input/diag_table~ mode change 100755 => 100644 model_setup/input/input.nml~ create mode 100644 model_simulations/README.md diff --git a/MOM_code/.cproject b/MOM_code/.cproject new file mode 100644 index 0000000..02fc401 --- /dev/null +++ b/MOM_code/.cproject @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MOM_code/.gitignore b/MOM_code/.gitignore new file mode 100644 index 0000000..4da79f0 --- /dev/null +++ b/MOM_code/.gitignore @@ -0,0 +1,5 @@ +*~ +exec/ +work/ +bin/mppnccombine.gfortran +.sh_history* diff --git a/MOM_code/.project b/MOM_code/.project new file mode 100644 index 0000000..2bee08a --- /dev/null +++ b/MOM_code/.project @@ -0,0 +1,27 @@ + + + mom_5.1 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/MOM_code/LICENSE b/MOM_code/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/MOM_code/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/MOM_code/README b/MOM_code/README new file mode 100644 index 0000000..54877d3 --- /dev/null +++ b/MOM_code/README @@ -0,0 +1,71 @@ + +Where to start +~~~~~~~~~~~~~~ +A good place to start is the "doc" directory, where you +will find "user" guides for the MOM. + +How to run the MOM tests +~~~~~~~~~~~~~~~~~~~~~~~~~ +MOM tests provided in exp directory divide in two types, +both using the GFDL shared infrastructure (FMS) : + +1. Solo models : Run stand alone MOM Ocean model. +2. Coupled models: Run MOM coupled with GFDL ice model + (besides null versions of atmosphere and land models). + +To run Solo models: + a. cd to exp and run mom4p1_solo_compile.csh first. + b. Modify the 'name' variable in the script + mom4p1_solo_run.csh to be the name of the test you + want to run. A list of available tests is included in the script. + c. Get the required input data for the test from GFDL ftp site. + You can get the info by running the script mom4p1_solo_run.csh + and following the instructions. + d. Run mom4p1_solo_run.csh + e. The results go into subdir name/workdir + +To run Coupled models: + Do the same steps above to mom4p1_coupled_compile.csh and mom4p1_coupled_run.csh + +To run EBM models: + Do the same steps above to mom4p1_ebm_compile.csh and mom4p1_ebm_run.csh + + + +Warning: The Solo and Coupled run scripts have been tested only on 10 and 24, ia64 + processors respectively. +Warning: Some of these tests require a large disk space to save the input data. + Choose a partition with enough space (1-2 G) to untar the code and data bundels. +Warning: If you want to use the same root directory for all three experiments we suggest to + compile in the order of increasing complexity: solo -> coupled -> ebm . + You may have to remove some of the existing .o and .mod files + if you want to compile ebm experiment after the coupled experiment. + E.g., you probably have to: cd ../exec; rm mpp*.o mpp*.mod fms_io*.o fms_io*.mod + +Note: IBM platform users might want to add the following line to the top of the run scripts + setenv LDR_CNTRL MAXDATA=0xD0000000@DSA + + +Note: The compile scripts provide the basic capability to use static memory allocation + which might be faster on some platforms. In that case you need to adjust the values + of domain bounds properly according to the number of processors and layout. + + +Summary of directory contents +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +bin/ + -- mkmf script for creating Makefiles + -- template files for the mkmf script + -- assorted other scripts + +exp/ + -- all MOM experiments (test cases) + +src/ + -- source code for all models + +src/postprocessing/ + -- source code for postprocessing programs + +src/preprocessing/ + -- source code for preprocessing programs diff --git a/MOM_code/README.md b/MOM_code/README.md new file mode 100644 index 0000000..55febd0 --- /dev/null +++ b/MOM_code/README.md @@ -0,0 +1,9 @@ +# The Modular Ocean Model + +MOM is a numerical ocean model based on the hydrostatic primitive equations. Development of the model is managed through the Model Development Lab at + +[http://www.mom-ocean.org](http://www.mom-ocean.org) + +Contributions from users and developers are always welcomed. Any questions should be directed to the [mailing list](https://groups.google.com/forum/#!forum/mom-users). + +To get started with MOM please consult the [quickstart guide](http://www.mom-ocean.org/web/docs/project/quickstart). More information can be found in the [online documentation](http://www.mom-ocean.org/web/docs) diff --git a/MOM_code/annex.py b/MOM_code/annex.py new file mode 100644 index 0000000..e24e79f --- /dev/null +++ b/MOM_code/annex.py @@ -0,0 +1,43 @@ +""" +Add a file to the git annex. + +Usage: + +python annex.py + + gets added to the local git annex and also uploaded to the cloud based annex on Amazon S3. +""" + +import os +import sys + + +def main(): + filename = sys.argv[-1] + project = "mom" + + ## Add a file to the local annex + cmd = "git annex add %s --backend=WORM" % filename + print cmd + os.system(cmd) + print + ## Upload the file to the cloud annex + cmd = "git annex copy %s --to cloud" % filename + print cmd + os.system(cmd) + print + target = os.path.realpath(filename).split(os.path.sep)[-1] + + ## Make the file public + cmd = "s3cmd setacl --acl-public s3://breakawaylabs-%s-data/%s" % (project, target) + print cmd + os.system(cmd) + print + ## Add the file to the web annex + cmd = "git annex addurl http://s3.amazonaws.com/breakawaylabs-%s-data/%s --file=%s" % (project, target, filename) + print cmd + os.system(cmd) + print + +if __name__ == '__main__': + main() diff --git a/MOM_code/bin/.prepare_pubrel.csh.swp b/MOM_code/bin/.prepare_pubrel.csh.swp new file mode 100644 index 0000000000000000000000000000000000000000..d655e66061963f7db35feacb690b80b2ae8fddc0 GIT binary patch literal 16384 zcmeHN&5s;M6)$YZ0h{m@xDX`D?v>VFcDvWRwjv9e_+vjwc_;hbnghjseHO zAq+f078fqe8zJxP8T#Z$ZXF`;E;|Ms1C9a5fMdWh;23ZWI0hU8|4R($@)-Ft3_8{r zRW-lwdFc0ebKc609=hI~x*x}YW56-s7;p?Y1{?#90mp!2z%k$$a11yG-h~WA2_dgz zUay)Pdp!Sd@Bjb)K|=lp`~dhIumM~KJm8%V5b{^xkH8;*Ujjb?UIQ{<4mb(C`2->N zftP`o01A8(I1YUC{e;{G-abvpTfnz~F9G*~&jPE!3h)$g8aM^KbBd6k1K$O{3Va2q z01d1F^T5Y}$AOc;@7_nq&w#gq9|NxfJHSogEbuYlqreH^7w?5$;0@q);12K^-~uoY zoCbdSIP?HN0$u|OAOda!F99zCi@+)1w0Gt2_@UO=(Kj3@78$brk z1IK}500I7af{=dze*yjs{0Vpq_y!<=F90t9Yrr|+Dd6|`qvkun*MJv+1>oCQTeH4j zZ~wf3`giHai;9HiV#KH(vYhgQCL#_fCEjLL&@HBi(~4>#GJMfeilmAe^@lpoXv#CD zXeuPtJZE7Z714mn_8QBQ$)ENf{Tgk03ev8c+7Nl5a-wh%8Eik#W^Sj?*` z`8Hk3e=9%%pDjw2n>+9epVY5^Tx+5w&jEwgRs+rQWop1D=^c*N$hqDxl`DI4u zQaU%6aCybYuVis06(2G1KFmcz=Qio5#?&X?7JRR9b-W-|FCRW#S`ib~V5s z$($=?mcqk8{2rqb=Dc!w-Y#=o>mY;`37NWo^ZBJ$0<*1D08hh8+PARk!+KhD%Iq(K z?ZqNkZBFPp7;bk5RYOcB3A%f#ZNp}254-!aZA&5@h1l;>VlQAvGi>UZVdBN06-jw# z^IC_a=Lu0vvtmSF=&dhp+z2-}HlCyV*kP7@*Kuom!Z>455vruJfuyzAtSp!nStiD2 zaI7*2p?y9ui`i$OIL@ksCB&;r%=*Djt%Hs-3zJ7*gcI3F1ZwYcOi}1$0D_m8%Cmd{nCsV`9i%6ZW-dkS3YGtG=1+k!_pkeU#z; z@m`XqvG3VJEb%T9wLp zV5k-j&wjywZk+eAGEJA=yUG$yS74+xlRSbzkdDSZv zosuaZt2Y^zY~Y1Am_$`DX5vvN!WC7P@pLDYQQxv2>0GD~uhK?&knsYcPgJObcq~OZ z+)?|r`8Gv#`XTD|`@xO%Ti36LiJfG)b)$EHSZ}q_9xg5!kzL0+Y$h|bD^ZU*vv2P^ zsOdUayzxs+iGhWS_-8*nQAg`)eC)K-)4n7%Qm69w#Ce)nRcCA+mjL|%P4zv@BRSk zwCPa~*PgL{-n6HqFxkP50|$>*X5A-@^2LM1GLRQ$pxGYSncE}Vv2MiGg@d}I1_~8i z+Wgus2MIPrpgu79+m;+%(TB@YQ#+aB7DW+aIx0U?0-{{!(jK9Jpq*%Wr5m}rFQl7F z!xq#{$$LffZSZeeJ08)rqOdgk6}uDnBBns&1n3#qt8hTk;u4BxERDP%PRZ6mkL78>xCQ?1G^fn_2}5>I(;T zC*B!b-U3Cm-Bdk^l13%zp!5+bEI% literal 0 HcmV?d00001 diff --git a/MOM_code/bin/combine_blobs.py b/MOM_code/bin/combine_blobs.py new file mode 100755 index 0000000..973a0c0 --- /dev/null +++ b/MOM_code/bin/combine_blobs.py @@ -0,0 +1,46 @@ + +import os +import numpy +#import netCDF4 +import sys +sys.path.append('/net2/nnz/opt/python/netCDF4-0.9.9/build/lib.linux-i686-2.4/') +import netCDF4 + +class ncFile(object): + def __init__(self,path): + self.path = path + + self.open() + for dimname, dim in self.dims.iteritems(): + if dim.isunlimited(): + self.len = len(dim) + + def close(self): + self.root.close() + del self.root, self.dims, self.vars, self.gatts + + def delete(self): + self.close() + os.remove(self.path) + + def open(self): + self.root = netCDF4.Dataset(self.path,'r') + self.dims = self.root.dimensions + self.vars = self.root.variables + self.gatts = self.root.ncattrs() + +class newFile(object): + def __init__(self,path,seed): + self.path = path + self.root = netCDF4.Dataset(self.path, 'w', format='NETCDF3_CLASSIC') + self.vars = self.root.variables + self.dims = self.root.dimensions + + for att in seed.root.ncattrs(): + self.root.setncattr(att,seed.root.getncattr(att)) + + def close(self): + self.root.close() + del self.root, self.vars, self.dims + + diff --git a/MOM_code/bin/combine_blobs.pyc b/MOM_code/bin/combine_blobs.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d42fc505278c80e885a71ddb078969b72f39b28a GIT binary patch literal 2066 zcma)6ZEqVz5Z*o8iER=Z@zNHMN>M>FsPUyCiiiZ_#i0^XWuy(L!lJsK?>5cBy|~_W zo1*ZA@|FL{Z{Qd3Jae`$LIe?K#xv{L-I;lwo#L8KRHZKzX(w$$%Ry;SOl$)-x%tJThWwae2^ z1{=6&>^_AKOY8T;viv2iW`XK(`_6 z$q3>eLS1Nep;QDzsVrc9`usC-q#f{&AKg_y2I^P*x6}nzHyKsEuC(vcN4t1JS3SL> zG~}VQfys^sJ!sE6XR$vM!`b{)jA~{}G19DXo`IRSa|pamcvvpu!unQi`&Ss@7G<6l z2ufu=x8;DR8Y0_sUzv&orZ%_UUdPU5 zLj9&|1XvP!z|*B`OaoNLQw*45B<(_CSx4Lr$s6vbxL~2Ao%Kje#`o*SGSjhVd*=hv zM|ib-fMOrVK6ch$q7Sk4>>%i8OP5uptD8@PqWM`o&8;)9u1`yV!`zu`Sh%tUh9$lY zapaQHH}y4qWKt~IMW#oQTpUG3l`e9)hB*t8hEU2W4bEcKVDnJsC&zE-UbolowU@;{ z|MwBXY_1w17#K`=oKTZLB)|ybeuG*MjD|7j7Df?<5QagZ{|{j2hw1`^1B88IcKqlA z87?)9TbwG(pSPD221L+LzhBN4=2YYQT-bG5%?rRl48~u7hw=JxG5<+S=ugqDSnwwaXDTAYBK7lEvz%AaBmG{pH^e&IO4b@;(!$dgW zgE-!Z0ith_2f>coXdVN}Dy_Z)gS7sS5t25;qj{oI7vE`J7h82TFB$g{WIZM7THfMz zGNfT(Q_CgZy@Qb35ZMmi^<>_g9W2R=Di;OjXNwUpoS-0Z#WRflRIm`gn*L-HZxE&o okCcZ|yMh \$help, + "verbose|v" => \$verbose, + "xml|x=s" => \$xmlFile) or pod2usage(2); +pod2usage(1) if $help; + +# Variable to hold the location of the diag_table file. +my $diag_table_file = ''; + +# diag_table_chk can be called one of two ways. Either, the +# diag_table file is given on the command line, or we will extract the +# information from an XML file and experiment. +if ( ! $xmlFile ) { # If no XML file specified. + if ( $#ARGV < 0 ) { + pod2usage( { -message => "$0: diag_table file must be given as an argument.", + -verbose => 0, + } ); + } else { + $diag_table_file = $ARGV[0] + } +} else { # We are using an XML file. + # Set up the XML Parser. + if ( $#ARGV < 0 ) { + pod2usage( { -message => "$0: experiment must be given as an argument.", + -verbose => 0, + } ); + } else { + # Make sure the $xmlFile exists and is readable + die "File $xmlFile does not exist.\n" unless ( -e $xmlFile ); + die "File $xmlFile exists, but is unreadable.\n" unless ( -r $xmlFile ); + die "$xmlFile is not a file.\n" unless ( -f $xmlFile ); + our $parser = XML::LibXML -> new(); + our $root = $parser -> parse_file($xmlFile) -> getDocumentElement; + our $inputExperiment = $ARGV[0]; + die "$0: Experiment $inputExperiment does not exist in file $xmlFile.\n" unless ( experimentExistsInXML($inputExperiment) ); + $diag_table_file = getDiagTableFromXML($inputExperiment); + } +} + +# Check if the diag table file exists, is not a directory and is readable. +die "$0: File $diag_table_file does not exist.\n" unless ( -e $diag_table_file ); +die "$0: File $diag_table_file exists, but is unreadable.\n" unless ( -r $diag_table_file ); +die "$0: $diag_table_file is not a file.\n" unless ( -f $diag_table_file ); + +# Announce what file we are going to read. +print "Reading file $diag_table_file\n\n"; + +# Open the file handler for the filename. +open(DIAG_TABLE, "<", $diag_table_file); + +# Arrays to hold files and fields. +my @files = ( { + file_name => '', + output_frequency => 0, + output_frequency_units => 0, + output_format => 0, + time_units => 0, + long_name => '', + new_file_frequency => 0, + new_file_frequency_units => 0, + start_time_string => '', + file_duration => 0, + file_duration_units => 0, + } ); + +my @fields = ( { + file_name => '', + module_name => '', + field_name => '', + output_name => '', + time_sampling => '', + time_method => '', + spatial_ops => '', + packing => 0, + } ); + +# Other variables to hold useful information. +my %fields_per_file; +my @warnings = ( { line_number => 0, + message => '', + } ); +my $tableName; +my @globalDate; +# Parse the data from the diag table file, and put it in the +# appropiate array. +while ( ) { + my $line = sanitizeString($_); + next if ( $line =~ /^#/ or $line =~ /^$/ ); + my @line_data = split(/,/,$line,11); + + my $num_warnings = 0; + + if ( $#line_data == 0 ) { # No Commas in string + # Find the descriptor and base date. Neither should have a comma. + my @date = split(/\s+/, sanitizeString($line_data[0])); + if ( $#date >= 1 ) { # We have a date. + my $message = verifyDate(@date); + if ( $message ) { + push @warnings, ( { + line_number => $., + message => "Invalid global date. $message", + } ); + } else { + @globalDate = @date; + } + } else { # We have the the descriptor / table name or the date may be set by the script + if ( $line_data[0] =~ /^\$.*[dD]ate$/ ) { + @globalDate[0] = $line_data[0]; + } else { + $tableName = sanitizeString($line_data[0]); + } + } + } elsif ( $#line_data > 1 ) { + if ( $tableName =~ /^$/ or $globalDate[0] =~ /^$/ ) { + push @warnings, ( { + line_number => $., + message => 'The table descriptor and the base date must be set before any files or fields.', + } ); + $tableName = 'NOT SET' if ( $tableName =~ /^$/ ); + $globalDate[0] = 'NOT SET' if ( $globalDate[0] =~ /^$/ ) ; + } + if ( lc($line_data[5]) =~ /time/ ) { # This is a file. + # Check output_frequency :: Must be >= -1 + if ( $line_data[1] < -1 ) { + $num_warnings++; + push @warnings, ( { + line_number => $., + message => 'Invalid output frequency. Must be >= -1.', + } ); + } + # check output_frequency units :: return from find_unit_ivalue() > 0 + if ( find_unit_ivalue($line_data[2]) < 0 ) { + $num_warnings++; + $line_data[2] =~ s/"//g; + push @warnings, ( { + line_number => $., + message => "Invalid output frequency unit. ($line_data[2]).", + } ); + } + # check output_format :: Must be in the range 1 <= output_format <= 2 + if ( $line_data[3] < 1 or $line_data[3] > 2 ) { + $num_warnings++; + push @ warnings, ( { + line_number => $., + message => "Output_format out of range. Must be in the range [1,2].", + } ); + } + # check time_units :: return from find_unit_ivalue() > 0 + if ( find_unit_ivalue($line_data[4]) < 0 ) { + $num_warnings++; + $line_data[4] =~ s/"//g; + push @warnings, ( { + line_number => $., + message => "Invalid time unit. ($line_data[4]).", + } ); + } + # The following are optional. (There may be a slight problem if the line ends with a ','.) + if ( $#line_data > 6 ) { + # Check new_file_frequency :: Must be > 0 + if ( $line_data[6] < 0 ) { + $num_warnings++; + push @warnings, ( { + line_number => $., + message => "Invalid new file frequency. Must be > 0.", + } ); + } + # Check new_file_frequency_units :: return from find_unit_ivalue() > 0 + if ( find_unit_ivalue($line_data[7]) < 0 ) { + $num_warnings++; + $line_data[7] =~ s/"//g; + push @warnings, ( { + line_number => $., + message => "Invalid new file frequency unit. ($line_data[7]).", + } ); + } + # More optional inputs + if ( $#line_data >= 8 ) { + $num_warnings++; + # remove quotes, beginning and ending space. + $line_data[8] =~ s/"//g; + $line_data[8] =~ s/^\s+//; + $line_data[8] =~ s/\s+$//; + my @start_time = split(/\s+/,$line_data[8]); + # Check start_time_string :: Must be valid date string + my $message = verifyDate(@start_time); + if ( $message ) { + push @warnings, ( { + line_number => $., + message => "Invalid start time format. $message", + } ); + } + # The last two optional inputs + if ( $#line_data > 8 ) { + # Check file_duration :: Must be > 0 + if ( $line_data[9] < 0 ) { + $num_warnings++; + push @warnings, ( { + line_number => $., + message => "Invalid file duration. Must be > 0.", + } ); + } + # Check file_duration_units :: return from find_unit_ivalue() > 0 + if ( find_unit_ivalue($line_data[10]) < 0 ) { + $num_warnings++; + $line_data[10] =~ s/"//g; + push @ warnings, ( { + line_number => $., + message => "Invalid file duration unit. ($line_data[10]).", + } ); + } + } + } + } + if ( $num_warnings == 0 ) { + push @files, ( { + file_name => sanitizeString($line_data[0]), + output_frequency => sanitizeString($line_data[1]), + output_frequency_units => sanitizeString($line_data[2]), + output_format => sanitizeString($line_data[3]), + time_units => sanitizeString($line_data[4]), + long_name => sanitizeString($line_data[5]), + new_file_frequency => sanitizeString($line_data[6]), + new_file_frequency_units => sanitizeString($line_data[7]), + start_time_string => sanitizeString($line_data[8]), + file_duration => sanitizeString($line_data[9]), + file_duration_units => sanitizeString($line_data[10]), + } ); + $fields_per_file{$files[$#files]{file_name}} = 0; + # print "File found (",$files[$#files]{file_name},"), line ",$.,".\n"; + } + } else { # This is a field. + # Make sure there are enough fields on the description line :: must be = 8. + if ( $#line_data != 7 ) { + $num_warnings++; + my $message; + # Are there too many? + if ( $#line_data > 7 ) { + $message = "Too many fields on field description line."; + } else { # Nope, too few. + $message = "Not enough fields on field description line."; + } + push @warnings, ( { + line_number => $., + message => $message, + } ); + } + + # Verify that file_name exists in the files array + $line_data[3] =~ s/"//g; + $line_data[3] =~ s/^\s+//; + $line_data[3] =~ s/\s+$//; + my $notfound = 1; + for (my $i=0; $i <= $#files; $i++) { + if ( $files[$i]{file_name} =~ $line_data[3] ) { + $notfound = 0; + last; + } + } + if ( $notfound ) { + $num_warnings++; + push @warnings, ( { + line_number => $., + message => "File ($line_data[3]) not defined. It must be defined before any fields.", + } ); + } + # Verify time_method / time_avg is valid + if ( invalid_timeSample(sanitizeString($line_data[5])) ) { + $ num_warnings++; + push @warnings, ( { + line_number => $., + message => "Time sampling method must be one of (.true., mean, average, avg, .false., none, point, maximum, max, minimum, min, diurnal[#]).", + } ); + } + # Verify packing is valid :: must be in range [1,8] + if ( $line_data[7] < 1 or $line_data[7] > 8 ) { + $num_warnings++; + push @warnings, ( { + line_number => $., + message => "Packing is out of the valid range. Must be in the range [1,8]." + } ); + } + if ( $num_warnings == 0 ) { + push @fields, ( { + file_name => sanitizeString($line_data[3]), + module_name => sanitizeString($line_data[0]), + field_name => sanitizeString($line_data[1]), + output_name => sanitizeString($line_data[2]), + time_sampling => sanitizeString($line_data[4]), + time_method => sanitizeString($line_data[5]), + spatial_ops => sanitizeString($line_data[6]), + packing => sanitizeString($line_data[7]), + } ); + $fields_per_file{$fields[$#fields]{file_name}}++; + } + } + } +} + +if ( $verbose ) { + my $files2output; + my $fields2output; + open(FILES, '>', \$files2output); + open(FIELDS, '>', \$fields2output); + + my $file_name; + my $output_frequency; + my $output_frequency_units; + my $output_format; + my $time_units; + my $module_name; + my $field_name; + my $output_name; + my $time_sampling; + my $time_method; + my $spatial_ops; + my $packing; + +format FILES_TOP = + Files + Output Axis +File Name Frequency FMT Units +------------------------------------------------------------ +. + +format FILES = +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>> @<<<<<<< @||| @<<<< +$file_name, $output_frequency, $output_frequency_units, $output_format, $time_units +. + + for ( my $file=1; $file <= $#files; $file++ ) { + $file_name = $files[$file]{file_name}; + $output_frequency = $files[$file]{output_frequency}; + $output_frequency_units = $files[$file]{output_frequency_units}; + $output_format = $files[$file]{output_format}; + $time_units = $files[$file]{time_units}; + write FILES; + } + +format FIELDS_TOP = + + Fields + Output Sample Spatial +Field Name Module File Name Name Samples Method Ops Packing +------------------------------------------------------------------------------------------------------------- +. + +format FIELDS = +@<<<<<<<<<<<<<<< @<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<< @<<<<< @<<<<<< @<<< @< +$field_name, $module_name, $file_name, $output_name, $time_sampling, $time_method, $spatial_ops, $packing +. + + for ( my $field=1; $field <=$#fields; $field++ ) { + $module_name = $fields[$field]{module_name}; + $field_name = $fields[$field]{field_name}; + $output_name = $fields[$field]{output_name}; + $file_name = $fields[$field]{file_name}; + $time_sampling = $fields[$field]{time_sampling}; + $time_method = $fields[$field]{time_method}; + $spatial_ops = $fields[$field]{spatial_ops}; + $packing = $fields[$field]{packing}; + write FIELDS; + } + # Output the files and fields + close(FILES); + close(FIELDS); + print $files2output; + print $fields2output; + print "\n"; +} + +print "Table Descriptor:\t",$tableName,"\n"; +print "Base Date:\t\t",join(' ',@globalDate),"\n"; +print "Number of files:\t",$#files,"\n"; +print "Max fields per file:\t",max(values(%fields_per_file)),"\n"; +print "Number of warnings:\t",$#warnings,"\n"; + +if ( $#warnings ) { + for ( my $warning=1; $warning <= $#warnings; $warning++ ) { + print STDERR "WARNING($warnings[$warning]{line_number}): $warnings[$warning]{message}\n"; + } +} + +# Verify that the given unit is understood. +# A return value of -1 indicated an unknown unit. +sub invalid_timeSample { + my $timeSample = $_[0]; + + switch ($timeSample) { + case (/^\.true\.$/i) { return 0; } + case (/^\.false\.$/i) { return 0; } + case (/^mean|average|avg$/) { return 0; } + case (/^none|point$/) { return 0; } + case (/^maximum|max$/) { return 0; } + case (/^minimum|min$/) { return 0; } + case (/^diurnal\d+$/) { return 0; } + else { return 1 }; + } +} + +# Verify that the given unit is understood. +# A return value of -1 indicated an unknown unit. +sub find_unit_ivalue { + my $unit_string = $_[0]; + + switch ($unit_string) { + case (/seconds/) { return 1; } + case (/minutes/) { return 2; } + case (/hours/) { return 3; } + case (/days/) { return 4; } + case (/months/) { return 5; } + case (/years/) { return 6; } + else { return -1 } + } +} + +sub experimentExistsInXML { + my $experiment = shift(@_); + my $experimentNode = $::root -> findnodes("experiment[\@label='$experiment' or \@name='$experiment']") -> get_node(1); + + return $experimentNode; +} + +sub getDiagTableFromXML { + my $experiment = shift(@_); + my $diagTableNode = $::root -> findnodes("experiment[\@label='$experiment' or \@name='$experiment']/input/diagTable") -> get_node(1); + + # If the diagTable node is empty, then recursivly check the parent experiment until it is found. + if ( $diagTableNode ) { + return $diagTableNode -> findvalue("\@file"); + } else { + my $parent = $::root -> findvalue("experiment[\@label='$experiment' or \@name='$experiment]/\@inherit"); + if ( $parent) { + &getDiagTable($parent); + } else { + die "$0: Cannot find diagTable tag in the XML file $::xmlFile.\n" + } + } +} + +sub verifyDate { + # The date must already be in an array. We will check the size here. + # The format should be (year, month, day, hour, min, sec) + my @date = @_; + my $leapYear = 0; + + my @months = ( { month => 'January', + days => 31 }, + { month => 'February', + days => 28 }, + { month => 'March', + days => 31 }, + { month => 'April', + days => 30 }, + { month => 'May', + days => 31 }, + { month => 'June', + days => 30 }, + { month => 'July', + days => 31 }, + { month => 'August', + days => 31 }, + { month => 'September', + days => 30 }, + { month => 'October', + days => 31 }, + { month => 'November', + days => 30 }, + { month => 'December', + days => 31 } ); + + if ( scalar(@date) != 6 ) { + # Wrong number of elements in date. Are we too big? + return 'Too many elements in date string.' if ( scalar(@date) > 6 ) ; + return 'Too few elements in date string.' if ( scalar(@date) < 6 ); + } + + return 'Year must be > 0.' if ( $date[0] < 0 ); + + # Correct number of days in February if this is a leap year. + $months[1]{days} = $months[1]{days} + 1 if ( isLeapYear($date[0]) ); + + return 'Month must be in the range [1,12].' if ( $date[1] < 1 or $date[1] > 12 ) ; + + return "Days must be in the range [1,$months[$date[1]-1]{days}] for $months[$date[1]-1]{month} in year $date[0]." if ( $date[2] < 1 or $date[2] > $months[$date[1]-1]{days} ); + + return 'Hours must be in the range [0,24].' if ( $date[3] < 0 or $date[3] > 24 ); + + return 'Minutes must be in the range [0,60].' if ( $date[4] < 0 or $date[4] > 60 ); + + return 'Seconds must be in the range [0,60].' if ( $date[5] < 0 or $date[5] > 60 ); + + return ''; +} + +sub isLeapYear { + my $year = shift(@_); + + if ( ($year % 4 == 0) and ($year % 100 != 0) or ($year % 400 == 0) ) { + return 1; + } else { + return 0; + } +} + +sub sanitizeString { + # Remove the quote marks and any additional space before and after + # the string. + my $string = shift(@_); + + $string =~ s/"//g; + $string =~ s/^\s+//; + $string =~ s/\s+$//; + + return $string; +} + +__END__ + +=head1 NAME + +diag_table_chk - Parse a diag_table, and report the number of files, max fields, and parse errors + +=head1 SYNOPSIS + +diag_table_chk [-h|--help] + +diag_table_chk [-v|--verbose] I + +diag_table_chk [-v|--verbose] -x I I + +=head1 DESCRIPTION + +B will parse a diag_table and report on the number of +files in the diag_table, the max fields used per file, and will give +warnings on any parse errors found in the format of 'WARNING()'. + +=head1 OPTIONS + +=over 8 + +=item B<-h>, B<--help> + +Display usage information + +=item B<-v>, B<--verbose> + +Display the files and fields that were found. + +=item B<-x>, B<--xml> + +Read the diagnostic table file from I<> from the I<>. + +=item + +The file name of the diagnostic table to check + +=back + +=head1 EXAMPLE + + > diag_table_chk -x SM2.1U-LM3V.xml SM2.1U_Control-1990_lm3v_pot_A1 + + Table Descriptor: NOT SET + Base Date: 0101 01 01 0 0 0 + Number of files: 14 + Max fields per file: 93 + Number of warnings: 2 + WARNING(3): The table descriptor and the base date must be set before any files or fields. + WARNING(206): Time sampling method must be one of (.true., mean, average, avg, .false., none, point, maximum, max, minimum, min, diurnal[#]). + +=head1 AUTHOR + +Seth Underwood + +=head1 BUGS + +No known bugs at this time. +Report any bug to the author. + +=cut diff --git a/MOM_code/bin/environs.gfdl_ws_32.intel b/MOM_code/bin/environs.gfdl_ws_32.intel new file mode 100644 index 0000000..cd80b1f --- /dev/null +++ b/MOM_code/bin/environs.gfdl_ws_32.intel @@ -0,0 +1,17 @@ + source $MODULESHOME/init/csh + module use -a /home/fms/local/modulefiles + module purge + module load ifort.11.0.074 + module load icc.11.0.074 + module load idb.10.1.35 + module load hdf5-1.8.3 + module load netcdf-4.0.1 + setenv OMP_NUM_THREADS 1 +# + setenv NC_BLKSZ 64K + setenv FMS_ARCHIVE /archive/fms + setenv PATH ${PATH}:. + setenv netcdf3_inc_dir "/usr/local/netcdf-3.6.2/include" + setenv netcdf3_lib_dir "/usr/local/netcdf-3.6.2/lib" + setenv mpirunCommand "mpirun -np" + diff --git a/MOM_code/bin/environs.gfdl_ws_64.gnu b/MOM_code/bin/environs.gfdl_ws_64.gnu new file mode 100644 index 0000000..a4a20fa --- /dev/null +++ b/MOM_code/bin/environs.gfdl_ws_64.gnu @@ -0,0 +1,14 @@ + source $MODULESHOME/init/csh + module purge + module rm netcdf hdf5 + module load mpich2/1.2.1p1 + module use -a /home/fms/local/modulefiles + module load hdf5/1.8.5-patch1-gnu-4 + module load netcdf/4.1.1-gnu-4 +# + setenv PATH ${PATH}:. + setenv mpirunCommand "/net2/nnz/opt/mpich2-1.3_ifort11_x64/bin/mpirun -np" + setenv FMS_ARCHIVE /archive/fms + setenv PATH ${PATH}:. + + diff --git a/MOM_code/bin/environs.gfdl_ws_64.intel b/MOM_code/bin/environs.gfdl_ws_64.intel new file mode 100644 index 0000000..6e63048 --- /dev/null +++ b/MOM_code/bin/environs.gfdl_ws_64.intel @@ -0,0 +1,16 @@ + source $MODULESHOME/init/csh + module use -a /home/fms/local/modulefiles + module purge + module rm netcdf hdf5 + module load ifort/11.1.073 + module load icc/11.1.073 + module load hdf5/1.8.6 + module load netcdf/4.1.2 + module load mpich2/1.2.1p1 +# + setenv PATH ${PATH}:. + setenv mpirunCommand "/net2/nnz/opt/mpich2-1.3_ifort11_x64/bin/mpirun -np" + setenv FMS_ARCHIVE /archive/fms + setenv PATH ${PATH}:. + + diff --git a/MOM_code/bin/environs.gfortran b/MOM_code/bin/environs.gfortran new file mode 100644 index 0000000..e69de29 diff --git a/MOM_code/bin/environs.hpcs.intel b/MOM_code/bin/environs.hpcs.intel new file mode 100644 index 0000000..214c2bc --- /dev/null +++ b/MOM_code/bin/environs.hpcs.intel @@ -0,0 +1,16 @@ + source /opt/modules/default/init/tcsh + module purge + module load ifort.11.0.074 + module load icc.11.0.074 + module load idb.11.0.034 + module load scsl-1.5.1.0 + module load mpt-1.18 + module load hdf5-1.8.1 + module load netcdf-4.0.1 + setenv NC_BLKSZ 64K + setenv FMS_ARCHIVE /archive/fms + setenv PATH ${PATH}:. + setenv netcdf3_inc_dir "/usr/local/netcdf-3.6.2/include" + setenv netcdf3_lib_dir "/usr/local/netcdf-3.6.2/lib" + setenv mpirunCommand "mpirun -np" + diff --git a/MOM_code/bin/environs.ibm.xlf b/MOM_code/bin/environs.ibm.xlf new file mode 100644 index 0000000..57deddb --- /dev/null +++ b/MOM_code/bin/environs.ibm.xlf @@ -0,0 +1,3 @@ +export OMP_NUM_THREADS=1 +export BG_APPTHREADDEPTH=1 + diff --git a/MOM_code/bin/environs.ifc b/MOM_code/bin/environs.ifc new file mode 100644 index 0000000..e69de29 diff --git a/MOM_code/bin/environs.ifc.RNP b/MOM_code/bin/environs.ifc.RNP new file mode 100644 index 0000000..e69de29 diff --git a/MOM_code/bin/environs.ifc.pocNP b/MOM_code/bin/environs.ifc.pocNP new file mode 100644 index 0000000..e69de29 diff --git a/MOM_code/bin/environs.ifc.pocNP-OMPI b/MOM_code/bin/environs.ifc.pocNP-OMPI new file mode 100644 index 0000000..e69de29 diff --git a/MOM_code/bin/environs.ifc.test b/MOM_code/bin/environs.ifc.test new file mode 100644 index 0000000..e69de29 diff --git a/MOM_code/bin/environs.nci b/MOM_code/bin/environs.nci new file mode 100644 index 0000000..a492176 --- /dev/null +++ b/MOM_code/bin/environs.nci @@ -0,0 +1,8 @@ + source /etc/profile.d/nf_csh_modules + module purge + module load intel-fc + module load intel-cc + module load hdf5 + module load netcdf + module load openmpi + setenv mpirunCommand "mpirun -np" diff --git a/MOM_code/bin/environs.ncrc1.intel b/MOM_code/bin/environs.ncrc1.intel new file mode 100644 index 0000000..d4bdcaa --- /dev/null +++ b/MOM_code/bin/environs.ncrc1.intel @@ -0,0 +1,21 @@ +#This file should set all the necessary system environment variables +#and/or load all the necessary modules for the code to compile and run on the specific platform. +#Users need to find these for their systems. +# + source $MODULESHOME/init/csh + module rm PrgEnv-pgi PrgEnv-pathscale netcdf + module load PrgEnv-intel/3.1.29 + module load hdf5/1.8.4.1 + module load netcdf/4.0.1.3 + module load nco + module list + setenv MPICH_MAX_SHORT_MSG_SIZE 8000 + setenv NC_BLKSZ 1M + setenv F_UFMTENDIAN big + setenv OMP_NUM_THREADS 1 +# + setenv FMS_ARCHIVE /lustre/fs/archive/fms + setenv mpirunCommand "aprun -n" + setenv PATH ${PATH}:. + setenv netcdf3_inc_dir "/opt/cray/netcdf/3.6.2/netcdf-gnu/include" + setenv netcdf3_lib_dir "/opt/cray/netcdf/3.6.2/netcdf-gnu/lib" diff --git a/MOM_code/bin/environs.ncrc2.gnu b/MOM_code/bin/environs.ncrc2.gnu new file mode 100644 index 0000000..6460981 --- /dev/null +++ b/MOM_code/bin/environs.ncrc2.gnu @@ -0,0 +1,15 @@ + source $MODULESHOME/init/csh + module use -a /ncrc/home2/fms/local/modulefiles + module unload PrgEnv-pgi PrgEnv-pathscale PrgEnv-intel PrgEnv-gnu PrgEnv-cray + module unload netcdf fre fre-commands + module load PrgEnv-gnu + module load hdf5/1.8.8 + module load netcdf/4.2.0 + module list + setenv MPICH_MAX_SHORT_MSG_SIZE 8000 + setenv KMP_STACKSIZE 512m + setenv NC_BLKSZ 1M + + setenv mpirunCommand "aprun -n" + setenv PATH ${PATH}:. + diff --git a/MOM_code/bin/environs.ncrc2.intel b/MOM_code/bin/environs.ncrc2.intel new file mode 100644 index 0000000..fda798e --- /dev/null +++ b/MOM_code/bin/environs.ncrc2.intel @@ -0,0 +1,21 @@ +#This file should set all the necessary system environment variables +#and/or load all the necessary modules for the code to compile and run on the specific platform. +#Users need to find these for their systems. +# + source $MODULESHOME/init/csh + module rm PrgEnv-pgi PrgEnv-pathscale netcdf + module load PrgEnv-intel + module swap intel intel/12.0.5.220 + module load hdf5/1.8.7 + module load netcdf/4.1.3 + module list + setenv MPICH_MAX_SHORT_MSG_SIZE 8000 + setenv NC_BLKSZ 1M + setenv F_UFMTENDIAN big +# setenv OMP_NUM_THREADS 1 +# +# setenv FMS_ARCHIVE /lustre/fs/archive/fms + setenv mpirunCommand "aprun -n" + setenv PATH ${PATH}:. +# setenv netcdf3_inc_dir "/opt/cray/netcdf/3.6.2/netcdf-gnu/include" +# setenv netcdf3_lib_dir "/opt/cray/netcdf/3.6.2/netcdf-gnu/lib" diff --git a/MOM_code/bin/environs.workstation.gfort b/MOM_code/bin/environs.workstation.gfort new file mode 100644 index 0000000..124be6e --- /dev/null +++ b/MOM_code/bin/environs.workstation.gfort @@ -0,0 +1,2 @@ + setenv mpirunCommand "mpirun -np" + diff --git a/MOM_code/bin/environs.workstation.intel b/MOM_code/bin/environs.workstation.intel new file mode 100644 index 0000000..cd80b1f --- /dev/null +++ b/MOM_code/bin/environs.workstation.intel @@ -0,0 +1,17 @@ + source $MODULESHOME/init/csh + module use -a /home/fms/local/modulefiles + module purge + module load ifort.11.0.074 + module load icc.11.0.074 + module load idb.10.1.35 + module load hdf5-1.8.3 + module load netcdf-4.0.1 + setenv OMP_NUM_THREADS 1 +# + setenv NC_BLKSZ 64K + setenv FMS_ARCHIVE /archive/fms + setenv PATH ${PATH}:. + setenv netcdf3_inc_dir "/usr/local/netcdf-3.6.2/include" + setenv netcdf3_lib_dir "/usr/local/netcdf-3.6.2/lib" + setenv mpirunCommand "mpirun -np" + diff --git a/MOM_code/bin/list_files_with_tag b/MOM_code/bin/list_files_with_tag new file mode 100755 index 0000000..08a8cfc --- /dev/null +++ b/MOM_code/bin/list_files_with_tag @@ -0,0 +1,73 @@ +#!/usr/bin/perl +#Contact: arl, pjk +#Usage: list_files_with_tag tagname +# Returns list of files under CVS control, relative to current +# directory, which can be updated or checked out with the tag tagname. +#Modified to also list files not currently checked out (arl, 4/2002) +#Version: $Id: list_files_with_tag,v 1.1.2.1 2013/12/18 17:47:54 Niki.Zadeh Exp $ + +#test that a tagname was given as an argument +if( "$#ARGV" ne "0" ) { + print "\nUsage: list_files_with_tag tagname\n\n"; + print " Returns list of files under CVS control, relative to current\n"; + print " directory, which can be updated or checked out with the tag tagname.\n\n"; + exit; +} +$tag = @ARGV[0]; + +#use cvs status on files in the current directory to determine which +#have the given tag. This includes those files which have been deleted +#on the branch tag. Then parse the output into %files. + +@cvsstatus = `cvs status -v 2>&1`; +$i = 0; +while($i <= $#cvsstatus) { + if( $cvsstatus[$i] =~ /cvs status: Examining (\S+)/ ) { + $thisdir = $1; + } + elsif( $cvsstatus[$i] =~ /^File: \w/ ) { + @thisline = split ' ',$cvsstatus[$i]; + $currentfile = $thisline[1]; + } + elsif( $cvsstatus[$i] =~ /Existing Tags/ ) { +#skip a line + $i++; +#Each tag line is of the form tag (branch/revision...) + while ($cvsstatus[$i] =~ s/\(.+\)//g) { +#remove blanks + $cvsstatus[$i] =~ s/\s+//g; +#create hash of files (unique list). Don't print "./" in front of files. + if ($tag =~ /^$cvsstatus[$i]$/) { + if( "$thisdir" eq "." ) { + $files{"$currentfile"} = 1; + } + else { + $files{"$thisdir/$currentfile"} = 1; + } + } + $i++; + } + } + $i++; +} + +#Add list of files that would be checked out with this tag. +#This will include new files not currently checked out. + +@cvsupdate = `cvs update -p -d -r $tag 2>&1`; +$i = 0; +while($i <= $#cvsupdate ) { + if( $cvsupdate[$i] =~ /Checking out/ ) { + @line = split(' ', $cvsupdate[$i]); + $files{"$line[2]"} = 1; + } + $i++; +} + +@unique_files = sort(keys(%files)); + +if( @unique_files ) { + foreach $file (@unique_files) { + print "$file\n"; + } +} diff --git a/MOM_code/bin/list_paths b/MOM_code/bin/list_paths new file mode 100755 index 0000000..1cb890b --- /dev/null +++ b/MOM_code/bin/list_paths @@ -0,0 +1,98 @@ +#!/bin/csh -ef +# $Id: list_paths,v 1.1.2.1 2013/12/18 17:47:54 Niki.Zadeh Exp $ +#----------------------------------------------------------------------- +# list_paths: CVS administrative script +# +# AUTHOR: V. Balaji (vb@gfdl.gov) +# SGI/GFDL Princeton University +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# For the full text of the GNU General Public License, +# write to: Free Software Foundation, Inc., +# 675 Mass Ave, Cambridge, MA 02139, USA. +#----------------------------------------------------------------------- +# script to be run from the CVSROOT/modules file to create path lists +# $1 contains the name of the archive being checked out +# this script creates two files: +# path_names contains all the source files ( *.{c,C,f,F,fh,f90,F90,h,H,inc} ) +# path_names.html contains all the doc files ( *.{html,ps,txt}, README, readme ) +# NOTE: if these files exist, they are appended to. +# This is necessary, since for aliases that checkout multiple +# directories you need to keep the results from earlier checkouts. +# This could yield unexpected results if you use the same working +# directory for different experiments using different modules. You +# must remove these files if beginning a fresh experiment. + +set argv = (`getopt o: $*`) +set out = "$cwd/path_names" +#--------------------------------------------------- +while ("$argv[1]" != "--") + switch ($argv[1]) + case -o: + set out = $argv[2]; shift argv; breaksw + endsw + shift argv +end +shift argv +#--------------------------------------------------- + +unset noclobber +if( $?DEBUG )echo Running $0 in $cwd, args $* + +set src = "$out.src.tmp" +set doc = "$out.doc.tmp" +set outdoc = "$out.html" + +touch $out # create the file if it doesn't exist +cp $out $src +find $* -type f \ + \( -name \*.c \ + -o -name \*.C \ + -o -name \*.f \ + -o -name \*.fh \ + -o -name \*.F \ + -o -name \*.f90 \ + -o -name \*.F90 \ + -o -name \*.h \ + -o -name \*.H \ + -o -name \*.inc \ + \) -print >> $src + +sed 's:.*/\(.*\):\0 \1:' $src | nl | sort --key 3 -u | sort -n | awk '{print $2}' > $out +echo "A list of the files you checked out is in the file $out ..." + +touch $doc # create the file if it doesn't exist +find $* -type f \ + \( -name \*.html \ + -o -name \*.ps \ + -o -name \*.txt \ + -o -name \*.pdf \ + -o -name \*.jpg \ + -o -name readme \ + -o -name read_me \ + -o -name README \ + \) -print > $src +if ( -z $src ) then + rm -f $doc $src + exit +endif +# $src has non-zero size (i.e some doc exists) +cat $src >> $doc + +#write path_names.html file +echo "Documentation in current working directory" > $outdoc +echo "

Documentation in current working directory

" >> $outdoc +sort -u $doc | awk '{print "

" $1 ""}' >> $outdoc +echo '


This file was automatically generated by list_paths.' >> $outdoc +echo '$Revision: 1.1.2.1 $ $Date: 2013/12/18 17:47:54 $' >> $outdoc + +rm -f $doc $src diff --git a/MOM_code/bin/mkmf b/MOM_code/bin/mkmf new file mode 100755 index 0000000..75f3cd5 --- /dev/null +++ b/MOM_code/bin/mkmf @@ -0,0 +1,472 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------- +# mkmf: Perl script for makefile construction +# +# AUTHOR: V. Balaji (v.balaji@noaa.gov) +# Princeton University/GFDL +# +# Full web documentation for mkmf: +# http://www.gfdl.noaa.gov/~vb/mkmf.html +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# For the full text of the GNU General Public License, +# write to: Free Software Foundation, Inc., +# 675 Mass Ave, Cambridge, MA 02139, USA. +#----------------------------------------------------------------------- + +$ENV{'LANG'} = 'C'; +require 5; +use strict; +use File::Basename; +use Getopt::Std; +use Config; # use to put in platform-specific stuff +use vars qw( $opt_a $opt_c $opt_d $opt_f $opt_l $opt_m $opt_o $opt_p $opt_t $opt_v $opt_x $opt_I ); # declare these global to be shared with Getopt:Std + +#subroutines +sub ensureTrailingSlash { +#ensure trailing slash on directory names + local $/ = '/'; chomp @_[0]; @_[0] .= '/'; +} + +my $version = '$Id: mkmf,v 1.1.2.1 2013/12/18 17:47:54 Niki.Zadeh Exp $ '; + +# initialize variables: use getopts for these +getopts( 'a:I:c:dfm:o:l:p:t:vx' ) || die "\aSyntax: $0 [-a abspath] [-c cppdefs] [-d] [-f] [-m makefile] [-o otherflags] ][-p program] [-t template] [-v] [-x] [-I \"space separated include dirs\"] [targets]\n"; +$opt_v = 1 if $opt_d; # debug flag turns on verbose flag also +print "$0 $version\n" if $opt_v; + +my $mkfile = $opt_m || 'Makefile'; +print "Making makefile $mkfile ...\n" if $opt_v; + +$opt_p = 'a.out' unless $opt_p; # set default program name +my @targets = '.'; # current working directory is always included in targets +push @targets, @ARGV; # then add remaining arguments on command line + +ensureTrailingSlash($opt_a) if $opt_a; + +#some generic declarations +my( $file, $include, $line, $module, $name, $object, $path, $source, $suffix, $target, $word ); +my @list; +#some constants +my $endline = $/; +my @src_suffixes = ( q/\.F/, q/\.F90/, q/\.c/, q/\.f/, q/\.f90/ ); +my @inc_suffixes = ( q/\.H/, q/\.fh/, q/\.h/, q/\.inc/, q/\.h90/ ); +# push @inc_suffixes, @src_suffixes; # sourcefiles can be includefiles too: DISALLOW, 6 May 2004 +# suffixes for the target (mkmf -p): if isn't on the list below it's a program +my @tgt_suffixes = ( q/\.a/ ); + +my %compile_cmd = ( # command to create .o file from a given source file suffix + q/.F/ => q/$(FC) $(CPPDEFS) $(CPPFLAGS) $(FPPFLAGS) $(FFLAGS) $(OTHERFLAGS) -c/, + q/.F90/ => q/$(FC) $(CPPDEFS) $(CPPFLAGS) $(FPPFLAGS) $(FFLAGS) $(OTHERFLAGS) -c/, + q/.c/ => q/$(CC) $(CPPDEFS) $(CPPFLAGS) $(CFLAGS) $(OTHERFLAGS) -c/, + q/.f/ => q/$(FC) $(FFLAGS) $(OTHERFLAGS) -c/, + q/.f90/ => q/$(FC) $(FFLAGS) $(OTHERFLAGS) -c/ ); +my %delim_match = ( q/'/ => q/'/, # hash to find includefile delimiter pair + q/"/ => q/"/, + q/ q/>/ ); + +#formatting command for MAKEFILE, keeps very long lines to 256 characters +format MAKEFILE = +^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \~ +$line +. + +sub print_formatted_list{ +#this routine, in conjunction with the format line above, can be used to break up long lines +# it is currently used to break up the potentially long defs of SRC, OBJ, CPPDEFS, etc. +# not used for the dependency lists + $line = "@_"; + local $: = " \t\n"; # the default formatting word boundary includes the hyphen, but not here + while ( $opt_f && length $line > 254 ) { + write MAKEFILE, $line; + } + print MAKEFILE $line unless $line eq ''; + print MAKEFILE "\n"; +} + +#begin writing makefile +open MAKEFILE, ">$mkfile" or die "\aERROR opening file $mkfile for writing: $!\n"; +printf MAKEFILE "# Makefile created by %s $version\n\n", basename($0); +print MAKEFILE "SRCROOT = $opt_a\n\n" if $opt_a; # make abspath a variable +if ( $opt_c ) { + $opt_c =~ s/\s+$//; + if ( $Config{osname} eq 'aix' ) { + $opt_c .= ' -D__aix'; +#AIX fortran (xlf) requires -WF, in front, comma delimiter, no spaces + my $cppdefs_xlf = '-WF "' . $opt_c . '"'; + $cppdefs_xlf =~ s/,/\\,/g; # escape any commas already there + $cppdefs_xlf =~ s/\s+/,/g; # replace whitespace with commas + &print_formatted_list("CPPDEFS_XLF = $cppdefs_xlf"); + $compile_cmd{'.F'} = q/$(FC) $(CPPDEFS_XLF) $(FFLAGS) $(OTHERFLAGS) -c/; + $compile_cmd{'.F90'} = q/$(FC) $(CPPDEFS_XLF) $(FFLAGS) $(OTHERFLAGS) -c/; + } + &print_formatted_list("CPPDEFS = $opt_c") if $opt_c; +} +print MAKEFILE "\nOTHERFLAGS = $opt_o" if $opt_o; +#vb 2009-12-17, include now comes after vardefs, so that it can modify make variables +print MAKEFILE "\n\ninclude $opt_t\n\n" if $opt_t; #include template if supplied +print MAKEFILE "\n.DEFAULT:\n\t-echo \$@ does not exist.\n"; +print MAKEFILE "all: $opt_p\n"; # first target should be program, so you can type just 'make' + +#if cppdefs flag is present, look for changes in cppdefs +my %chgdefs; +if ( $opt_c ) { +#split argument of -c into newdefs + my %newdefs; + foreach ( split /\s*-D/, $opt_c ) { + $newdefs{$_} = 1; + } +#get olddefs from file .cppdefs + my %olddefs; + my $cppdefsfile = ".$opt_p.cppdefs"; + if ( -f $cppdefsfile ) { + open CPPFILE, $cppdefsfile or die "\aERROR opening cppdefsfile $cppdefsfile: $!\n"; + while ( ) { + foreach $word ( split ) { + $olddefs{$word} = 1; + } + } + close CPPFILE; +#get words that are not in both newdefs and olddefs +#if you move this foreach{} outside the enclosing if{} then +# all cppdefs will be considered changed if there is no .cppdefs file. + foreach ( keys %newdefs, keys %olddefs ) { + $chgdefs{$_} = 1 unless( $newdefs{$_} && $olddefs{$_} ); + } + } +#write current cppdefs list to file .cppdefs + open CPPFILE, ">$cppdefsfile"; + my @newdefs = keys %newdefs; + print CPPFILE " @newdefs\n"; + close CPPFILE; + if( $opt_d ) { + @list = keys %newdefs; print "newdefs= @list\n"; + @list = keys %olddefs; print "olddefs= @list\n"; + @list = keys %chgdefs; print "chgdefs= @list\n"; + } +} +delete $chgdefs{''}; + +# get a list of sourcefiles to be treated from targets +# (a sourcefile is any regular file with a suffix matching src_suffixes) +# if target is a sourcefile, add to list +# if target is a directory, get all sourcefiles there +# if target is a regular file that is not a sourcefile, look for a +# sourcefile on last work of each line, rest of line (if present) is the +# compile command to apply to this file. +#@sources will contain a unique list of sourcefiles in targets +#@objects will contain corresponding objects + +#separate targets into directories and files +my %scanned; # list of directories/files already scanned +my %actual_source_of; # hash returning sourcefile from object +my %source_of; # sourcefile from object, using SRCROOT variable if present +my @includepaths; +my $scanOrder = 0; # used to remember order of directory scan +foreach $target ( @targets ) { + print STDERR '.' unless $opt_v; # show progress on screen (STDERR is used because it is unbuffered) + if ( $opt_a and substr($target,0,1) ne '/' ) { + # if an abs_path exists, attach it to all relative paths + $target = $opt_a . $target; + } + ensureTrailingSlash($target) if( -d $target ); + print "target=$target\n" if $opt_v; +#directory + if ( -d $target && !$scanned{$target} ) { + print "Processing directory $target\n" if $opt_v; + opendir DIR, $target; + my @files = readdir DIR; +#find all sourcefiles in directory DIR + foreach ( @files ) { + ( $name, $path, $suffix ) = fileparse( "$target$_", @inc_suffixes ); + push @includepaths, $target if $suffix; # is this line doing anything? looks like includepaths='' later... + ( $name, $path, $suffix ) = fileparse( "$target$_", @src_suffixes ); + $object = "$name.o"; + if( $suffix && !$actual_source_of{$object} ) { + if ( $opt_a and substr($path,0,1) ne '/' ) { # if an abs_path exists, attach it to all relative paths + ensureTrailingSlash($path); + $path = '' if $path eq './'; + $source_of{$object} = '$(SRCROOT)' . "$path$name$suffix"; + $path = $opt_a . $path; + } + $actual_source_of{$object} = "$path$name$suffix"; + $source_of{$object} = $actual_source_of{$object} unless $source_of{$object}; + } + } + closedir DIR; + $scanned{$target} = $scanOrder++; + } elsif ( -f $target ) { +#file: check if it is a sourcefile + ( $name, $path, $suffix ) = fileparse( $target, @src_suffixes ); + $object = "$name.o"; + if ( !$actual_source_of{$object} ) { + if ( $suffix ) { + $path = '' if $path eq './'; + if ( $opt_a and substr($path,0,1) ne '/' ) { # if an abs_path exists, attach it to all relative paths + ensureTrailingSlash($path); + $source_of{$object} = '$(SRCROOT)' . "$path$name$suffix"; + $path = $opt_a . $path; + } + $actual_source_of{$object} = "$path$name$suffix"; + $source_of{$object} = $actual_source_of{$object} unless $source_of{$object}; + } else { + ( $name, $path, $suffix ) = fileparse( $target, @inc_suffixes ); + if ( ! $suffix ) { +#not a sourcefile: assume it contains list of sourcefiles +#specify files requiring special commands (e.g special compiler flags) thus: +# f90 -Oaggress a.f90 +#if last word on line is not a valid sourcefile, line is ignored + open CMDFILE, $target; + print "Reading commands from $target...\n" if $opt_v; + while ( ) { + next if ( $_ eq "\n"); + $line = $_; + my @wordlist = split; + $file = @wordlist[$#wordlist]; # last word on line + ( $name, $path, $suffix ) = fileparse( $file, @src_suffixes ); + print "file=$file suffix=$suffix in $target\n" if $opt_d; + $object = "$name.o"; + if ( $suffix && !$actual_source_of{$object} ) { + $path = '' if $path eq './'; + if ( $opt_a and ( substr($path,0,1) ne '/' ) ) { # if an abs_path exists, attach it to all relative paths + ensureTrailingSlash($path); + $source_of{$object} = '$(SRCROOT)' . "$path$name$suffix"; + $path = $opt_a . $path; + } + $actual_source_of{$object} = "$path$name$suffix"; + $source_of{$object} = $actual_source_of{$object} unless $source_of{$object}; + $scanned{$path} = $scanOrder++ unless $scanned{$path}; +#command for this file is all of line except the filename + $line =~ /\s+$file/; $line=$`; + if ( $line ) { + $compile_cmd{"$name$suffix"} = $line; + print "Special command for file $name$suffix: ($line)\n" if $opt_v; + } + } + if ( ! $suffix ) { # look for include files + ( $name, $path, $suffix ) = fileparse( $file, @inc_suffixes ); + if ( $opt_a and ( substr($path,0,1) ne '/' ) ) { # if an abs_path exists, attach it to all relative paths + ensureTrailingSlash($path); + $path = $opt_a . $path; + } + print "file=$file path=$path suffix=$suffix order=$scanOrder in $target\n" if $opt_d; +# anything that's found here is an includefile but not a sourcefile... +# just include directory in scan + $scanned{$path} = $scanOrder++ + if ( $suffix && !$scanned{$path} ); + } + } + close CMDFILE; + } + } + } + } +} +delete $actual_source_of{''}; +# sort scanned directories by scan order +sub ascendingScanOrder { $scanned{$a} <=> $scanned{$b}; } +my @dirs = sort ascendingScanOrder keys %scanned; +my @sources = values %source_of; +my @objects = keys %source_of; +if( $opt_d ) { + print "DEBUG: dirs= @dirs\n"; + print "DEBUG: sources= @sources\n"; + print "DEBUG: objects= @objects\n"; +} + +my %obj_of_module; # hash returning name of object file containing module +my %modules_used_by; # hash of modules used by a given source file (hashed against the corresponding object) +my %includes_in; # hash of includes in a given source file (hashed against the corresponding object) +my %has_chgdefs; # hash of files contains cppdefs that have been changed +#subroutine to scan file for use and module statements, and include files +# first argument is $object, second is $file +sub scanfile_for_keywords { + my $object = shift; + my $file = shift; + local $/ = $endline; +#if file has already been scanned, return: but first check if any .o needs to be removed + if( $scanned{$file} ) { + if( $has_chgdefs{$file} and -f $object ) { + unlink $object or die "\aERROR unlinking $object: $!\n"; + print " Object $object is out-of-date because of change to cppdefs, removed.\n" if $opt_v; + } + return; + } + print "Scanning file $file of object $object ...\n" if $opt_v; + open FILE, $file or die "\aERROR opening file $file of object $object: $!\n"; + foreach $line ( ) { + if ( $line =~ /^\s*module\s+(\w*)/ix ) { + if ( $1 ) { + my $module = lc $1; + if ( $obj_of_module{$module} && $module ne "procedure" ) { + die "\a\nAMBIGUOUS: Module $module is associated with $file as well as $actual_source_of{$obj_of_module{$module}}.\n"; + } + $obj_of_module{$module} = $object; + } + } + if ( $line =~ /^\s*use\s*(\w*)/ix ) { + $modules_used_by{$object} .= ' ' . lc $1 if $1; + } + if ( $line =~ /^[\#\s]*include\s*(['""'<])([\w\.\/]*)$delim_match{\1}/ix ) { + $includes_in{$file} .= ' ' . $2 if $2; + } + foreach ( keys %chgdefs ) { + $_ .= '='; /\s*=/; $word=$`; #cut string at =sign, else whole string + if ( $line =~ /\b$word\b/ ) { + $has_chgdefs{$file} = 1; + if ( -f $object ) { + unlink $object or die "\aERROR unlinking $object: $!\n"; + print " Object $object is out-of-date because of change to cppdef $word, removed.\n" if $opt_v; + } + } + } + } + close FILE; + $scanned{$file} = 1; + print " uses modules=$modules_used_by{$object}, and includes=$includes_in{$file}.\n" if $opt_d; +} + +foreach $object ( @objects ) { + &scanfile_for_keywords( $object, $actual_source_of{$object} ); +} + +my %off_sources; # list of source files not in current directory +my %includes; # global list of includes +my %used; # list of object files that are used by others +my @cmdline; +# for each file in sources, write down dependencies on includes and modules +foreach $object ( sort @objects ) { + print STDERR '.' unless $opt_v; # show progress on screen (STDERR is used because it is unbuffered) + my %is_used; # hash of objects containing modules used by current object + my %obj_of_include; # hash of includes for current object + $is_used{$object} = 1; # initialize with current object so as to avoid recursion + print "Collecting dependencies for $object ...\n" if $opt_v; + @cmdline = "$object: $source_of{$object}"; + ( $name, $path, $suffix ) = fileparse( $actual_source_of{$object}, @src_suffixes ); + $off_sources{$source_of{$object}} = 1 unless( $path eq './' or $path eq '' ); +#includes: done in subroutine since it must be recursively called to look for embedded includes + @includepaths = ''; + &get_include_list( $object, $actual_source_of{$object} ); +#modules + foreach $module ( split /\s+/, $modules_used_by{$object} ) { + $target = $obj_of_module{$module}; +#we need to check target ne '' also below, since it is not mkmf's privilege +#to complain about modules not found. That should be left to the compiler. + if( $target and !$is_used{$target} ) { + $is_used{$target} = 1; + push @cmdline, $target; + $used{$target} = 1; + print " found module $module in object $target ...\n" if $opt_v; + } + } +#write the command line: if no file-specific command, use generic command for this suffix + &print_formatted_list(@cmdline); + $file = $actual_source_of{$object}; + if ( $compile_cmd{$name.$suffix} ) { + print MAKEFILE "\t$compile_cmd{$name.$suffix}"; + } else { + print MAKEFILE "\t$compile_cmd{$suffix}"; + } + foreach ( @includepaths ) { # include files may be anywhere in directory array + print MAKEFILE " -I$_" if $_; + } + if ( $opt_I ){ + foreach ( split /\s+/, $opt_I ){ + print MAKEFILE " -I$_"; + } + } + print MAKEFILE "\t$source_of{$object}\n"; + +# subroutine to seek out includes recursively + sub get_include_list { + my( $incfile, $incname, $incpath, $incsuffix ); + my @paths; + my $object = shift; + my $file = shift; + foreach ( split /\s+/, $includes_in{$file} ) { + print "object=$object, file=$file, include=$_.\n" if $opt_d; + ( $incname, $incpath, $incsuffix ) = fileparse( $_, @inc_suffixes ); + if( $incsuffix ) { # only check for files with proper suffix + undef $incpath if $incpath eq './'; + if( $incpath =~ /^\// ) { + @paths = $incpath; # exact incpath specified, use it + } else { + @paths = @dirs; + } + foreach ( @paths ) { + local $/ = '/'; chomp; # remove trailing / if present + my $newincpath = "$_/$incpath" if $_; + undef $newincpath if $newincpath eq './'; + $incfile = "$newincpath$incname$incsuffix"; + if ( $opt_a and ( substr($newincpath,0,1) ne '/' ) ) { + $newincpath = '$(SRCROOT)' . $newincpath; + } + print "DEBUG: checking for $incfile in $_ ...\n" if $opt_d; + if ( -f $incfile and $obj_of_include{$incfile} ne $object ) { + print " found $incfile ...\n" if $opt_v; + push @cmdline, "$newincpath$incname$incsuffix"; + $includes{$incfile} = 1; + chomp( $newincpath, $path ); + $off_sources{$incfile} = 1 if $newincpath; + $newincpath = '.' if $newincpath eq ''; + push @includepaths, $newincpath unless( grep $_ eq $newincpath, @includepaths ); + &scanfile_for_keywords($object,$incfile); + $obj_of_include{$incfile} = $object; + &get_include_list($object,$incfile); # recursively look for includes + last; + } + } + } + } + } +} + +#lines to facilitate creation of local copies of source from other directories +#commented out because it makes make default rules kick in +foreach ( keys %off_sources ) { + my $file = basename($_); + $file =~ s/\$\(SRCROOT\)//; + print MAKEFILE "./$file: $_\n\tcp $_ .\n"; +} + +#objects not used by other objects +#if every object is a module, then only the unused objects +#need to be passed to the linker (see commented OBJ = line below). +#if any f77 or C routines are present, we need complete list +my @unused_objects; +foreach $object ( @objects ) { + push @unused_objects, $object unless $used{$object}; +} + +&print_formatted_list( "SRC =", @sources, keys %includes ); +&print_formatted_list( "OBJ =", @objects ); +# &print_formatted_list( "OBJ =", @unused_objects ); +my $noff = scalar keys %off_sources; +&print_formatted_list( "OFF =", keys %off_sources ) if $noff > 0; + +#write targets +print MAKEFILE "clean: neat\n\t-rm -f .$opt_p.cppdefs \$(OBJ) $opt_p\n"; +print MAKEFILE "neat:\n\t-rm -f \$(TMPFILES)\n"; +print MAKEFILE "localize: \$(OFF)\n\tcp \$(OFF) .\n" if $noff > 0; +print MAKEFILE "TAGS: \$(SRC)\n\tetags \$(SRC)\n"; +print MAKEFILE "tags: \$(SRC)\n\tctags \$(SRC)\n"; +( $name, $path, $suffix ) = fileparse( $opt_p, @tgt_suffixes ); +if( $suffix eq '.a' ) { + print MAKEFILE "$opt_p: \$(OBJ)\n\t\$(AR) \$(ARFLAGS) $opt_p \$(OBJ)\n"; +} else { +# opt_l is a new flag added to take care of libraries + print MAKEFILE "$opt_p: \$(OBJ) $opt_l\n\t\$(LD) \$(OBJ) -o $opt_p $opt_l \$(LDFLAGS)\n"; +} +close MAKEFILE; +print " $mkfile is ready.\n"; + +exec 'make', '-f', $mkfile if $opt_x; diff --git a/MOM_code/bin/mkmf.debugtemplate.gfdl_ws_32.intel b/MOM_code/bin/mkmf.debugtemplate.gfdl_ws_32.intel new file mode 100644 index 0000000..6f5c44a --- /dev/null +++ b/MOM_code/bin/mkmf.debugtemplate.gfdl_ws_32.intel @@ -0,0 +1,182 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = ifort +CC = icc +LD = ifort +######### +# flags # +######### +DEBUG = on +REPRO = +VERBOSE = +OPENMP = + +############################################## +# Need to use at least GNU Make version 3.81 # +############################################## +need := 3.81 +ok := $(filter $(need),$(firstword $(sort $(MAKE_VERSION) $(need)))) +ifneq ($(need),$(ok)) +$(error Need at least make version $(need). Load module gmake/3.81) +endif + +MAKEFLAGS += --jobs=2 + +NETCDF_ROOT = /home/nnz/local/build/netcdf-4.1.1_ifort11_HDF +MPICH_ROOT = /home/nnz/local/build/mpich2-1.3_ifort11 +#MPICH_ROOT = /usr/local/mpich +HDF5_ROOT = /home/nnz/local/build/hdf5-1.8.5-patch1_zlib-1.2.5_ifort11/lib +ZLIB_ROOT = /home/nnz/local/build/zlib-1.2.5 +INCLUDE = -I$(NETCDF_ROOT)/include -I$(MPICH_ROOT)/include + + +FPPFLAGS := -fpp -Wp,-w $(INCLUDE) + +FFLAGS := -fno-alias -automatic -safe-cray-ptr -ftz -assume byterecl -i4 -r8 -nowarn +FFLAGS_OPT = -O3 -debug minimal -fp-model precise -override-limits +FFLAGS_DEBUG = -g -O0 -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fpe0 -traceback -ftrapuv +FFLAGS_REPRO = -O2 -debug minimal -no-vec -fp-model precise -override-limits +FFLAGS_OPENMP = -openmp +FFLAGS_VERBOSE = -v -V -what + + +CFLAGS := -D__IFC $(INCLUDE) +CFLAGS_OPT = -O2 -debug minimal -no-vec +CFLAGS_OPENMP = -openmp +CFLAGS_DEBUG = -O0 -g -ftrapuv -traceback + +LDFLAGS := +LDFLAGS_VERBOSE := -Wl,-V,--verbose,-cref,-M + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +#else +#CFLAGS += $(CFLAGS_OPT) +#FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +ifneq ($(findstring netcdf-4.0.1,$(LOADEDMODULES)),) + LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf -L$(HDF5_ROOT)/lib -lhdf5_hl -lhdf5 -lcurl -L$(ZLIB_ROOT)/lib -lz +else + LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf +endif + +LIBS += -L$(MPICH_ROOT)/lib -lmpich -lpthread -lmpl +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.debugtemplate.ia64 b/MOM_code/bin/mkmf.debugtemplate.ia64 new file mode 100644 index 0000000..7c411f5 --- /dev/null +++ b/MOM_code/bin/mkmf.debugtemplate.ia64 @@ -0,0 +1,106 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +CPPFLAGS = +FFLAGS_BASE = -v -V -what -fpp -fno-alias -stack_temps -safe_cray_ptr -ftz -i_dynamic -assume byterecl -g -i4 -r8 -Wp,-w +FFLAGS_REPRO = -fltconsistency +FFLAGS_DEBUG = -check -check noarg_temp_created -warn -warn noerrors -debug variable_locations -inline_debug_info -fpe0 -traceback -ftrapuv +FFLAGS = $(FFLAGS_BASE) $(FFLAGS_REPRO) $(FFLAGS_DEBUG) -O0 +FC = ifort +CC = icc +CFLAGS_BASE = -g -D__IFC +CFLAGS_DEBUG = -ftrapuv -traceback +CFLAGS = $(CFLAGS_BASE) $(CFLAGS_DEBUG) -O0 +LD = ifort +LDFLAGS = -Wl,-V,--verbose,-cref,-Map linker.map -lnetcdf -lmpi -lsma +MAKEFLAGS+=--jobs=8 + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.debugtemplate.ia64_hdf b/MOM_code/bin/mkmf.debugtemplate.ia64_hdf new file mode 100644 index 0000000..d4ee7de --- /dev/null +++ b/MOM_code/bin/mkmf.debugtemplate.ia64_hdf @@ -0,0 +1,106 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +CPPFLAGS = +FFLAGS_BASE = -v -V -what -fpp -fno-alias -stack_temps -safe_cray_ptr -ftz -i_dynamic -assume byterecl -g -i4 -r8 -Wp,-w +FFLAGS_REPRO = -fltconsistency +FFLAGS_DEBUG = -check -check noarg_temp_created -warn -warn noerrors -debug variable_locations -inline_debug_info -fpe0 -traceback -ftrapuv +FFLAGS = $(FFLAGS_BASE) $(FFLAGS_REPRO) $(FFLAGS_DEBUG) -O0 +FC = ifort +CC = icc +CFLAGS_BASE = -g -D__IFC +CFLAGS_DEBUG = -ftrapuv -traceback +CFLAGS = $(CFLAGS_BASE) $(CFLAGS_DEBUG) -O0 +LD = ifort +LDFLAGS = -Wl,-V,--verbose,-cref,-Map linker.map -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz -lmpi -lsma +MAKEFLAGS+=--jobs=8 + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.debugtemplate.sgi b/MOM_code/bin/mkmf.debugtemplate.sgi new file mode 100644 index 0000000..63ffe6e --- /dev/null +++ b/MOM_code/bin/mkmf.debugtemplate.sgi @@ -0,0 +1,96 @@ +# Makefile template for SGI MIPSpro f90 +#typical use with netCDF: +# mkmf -t template.sgi -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include + +FC = f90 +CPPFLAGS = -macro_expand +#FFLAGS = -64 -mips4 -i4 -r8 -d8 -O2 -OPT:Olimit=0 #optimized +FFLAGS = -64 -mips4 -i4 -r8 -d8 -woff134,200,787,1670 -ansi -DEBUG:conform_check=YES:subscript_check=ON:trap_uninitialized=ON:verbose_runtime=ON -g #for debugging +LIST = -listing + +#to debug shmem codes, you need the dbfork library +#TOTALVIEW = -L/opt/totalview/4.1.0-3/irix6-mips/lib -ldbfork_n64 +#TOTALVIEW = -ldbfork_n64 +#TOTALVIEW = -L/sw/mel/totalview/lib -ldbfork_n64 + +LD = f90 +LDFLAGS = -64 -mips4 -v -show $(LIBS) # this is verbose +#LDFLAGS = -64 -mips4 -dont_warn_unused $(LIBS) +#LIBS must be customized for your site +LIBS = $(TOTALVIEW) -L/usr/local/lib -lnetcdf -lmpi -lsma -lexc -lscs + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .T create a CIF file +# make .L create a compiler listing +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source + +# make .i create a preprocessed file (only for .F and .F90 +# extensions) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh +TMPFILES = .*.m *.B *.L *.i *.l *.s *.mod + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .o .s .x + +.f.L: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(CPP) $(CPPDEFS) $(CPPFLAGS) $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(CPP) $(CPPDEFS) $(CPPFLAGS) $*.F90 > $*.f90 +.F90.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.html b/MOM_code/bin/mkmf.html new file mode 100644 index 0000000..007db3b --- /dev/null +++ b/MOM_code/bin/mkmf.html @@ -0,0 +1,476 @@ + + + + + + + + + + +mkmf user's guide + + + + + +
+

mkmf - a tool for making makefiles

+
+mkmf is a tool written in perl5 that will construct a +makefile from distributed source. A single executable program is the +typical result, but I dare say it is extensible to a makefile for any +purpose at all. + +

Author: Balaji, SGI/GFDL. +


+
+ +

Features of mkmf include: + +

    + +
  • It understands dependencies in f90 (modules and +use), the fortran include statement, +and the cpp #include statement in any type of source; +
  • There are no restrictions on filenames, module names, etc.; +
  • It supports the concept of overlays (where source is maintained in +layers of directories with a defined precedence); +
  • It can keep track of changes to cpp flags, and +knows when to recompile affected source (i.e, files +containing #ifdefs that have been changed since the +last invocation); +
  • It will run on any unix platform that has perl version 5 installed; +
  • It is free, and released under GPL. GFDL users can copy (or, +better still, directly invoke) the file +/net/vb/public/bin/mkmf. External users can download the +source here. Current +public revision is 4.12. + +
+ +

mkmf is pronounced make-make-file or +make-m-f or even McMuff (Paul Kushner's suggestion). + +

The calling syntax is: + +

mkmf [-a abspath] [-c cppdefs] [-d] [-f] [-m makefile] [-p program] [-t template] [-v] [-x] [args] + +

    + +
  1. -a abspath attaches the abspath at +the front of all relative paths to sourcefiles; + +
  2. cppdefs is a list of cpp +#defines to be passed to the source files: affected +object files will be selectively removed if there has been a change in +this state; + +
  3. -d is a debug flag to mkmf (much +more verbose than -v, but probably of use only if you +are modifying mkmf itself); + +
  4. -f is a formatting flag to restrict lines in the +makefile to 256 characters. This was introduced in response to a +customer who wanted to edit his makefiles using +vi). Lines longer than that will use continuation +lines as needed; + +
  5. makefile is the name of the makefile written (default +Makefile); + +
  6. template is a file containing a list of make +macros or commands written to the beginning of the makefile; + +
  7. program is the name of the final target (default +a.out); + +
  8. -v is a verbosity flag to mkmf; + +
  9. -x executes the makefile immediately; + +
  10. args are a list of directories and files to be +searched for targets and dependencies. + +
+ +

Makefile structure:

+ +

A sourcefile is any file with a source file suffix +(currently .F, .F90, .c, .f. .f90). An includefile is +any file with an include file suffix (currently .H, .fh, .h, +.inc). A valid sourcefile can also be an includefile. + +

Each sourcefile in the list is presumed to produce an object file +with the same basename and a .o extension in the current +working directory. If more than one sourcefile in the list would produce +identically-named object files, only the first is used and the rest +are discarded. This permits the use of overlays: if dir3 +contained the basic source code, dir2 contained bugfixes, and +dir1 contained mods for a particular run, mkmf dir1 dir2 +dir3 would create a makefile for correct compilation. Please note +that precedence descends from left to right. This is the +conventional order used by compilers when searching for libraries, +includes, etc: left to right along the command line, with the first +match invalidating all subsequent ones. See the Examples section for a closer look at precedence rules. + +

The makefile currently runs $(FC) on fortran files +and $(CC) on C files. Flags to the compiler can be set +in $(FFLAGS) or $(CFLAGS). The final +loader step executes $(LD). Flags to the loader can be +set in $(LDFLAGS). Preprocessor flags are used by +.F, .F90 and .c files, +and can be set in $(CPPFLAGS). These macros have a +default meaning on most systems, and can be modified in the template +file. The predefined macros can be discovered by running make +-p. + +

In addition, the macro $(CPPDEFS) is applied to the +preprocessor. This can contain the cpp #defines which +may change from run to run. cpp options that do not +change between compilations should be placed in +$(CPPFLAGS). + +

Includefiles are recursively searched for embedded includes. + +

For emacs users, the make target +TAGS is always provided. This creates a TAGS file in +the current working directory with a cross-reference table linking all +the sourcefiles. If you don't know about emacs tags, please consult +the emacs help files! It is an incredibly useful feature. + +

The default action for non-existent files is to touch them +(i.e create null files of that name) in the current working directory. + +

All the object files are linked to a single executable. It is +therefore desirable that there be a single main program source among +the arguments to mkmf, otherwise, the loader is likely to +complain. + +

Treatment of [args]:

+ +

The argument list args is treated sequentially from +left to right. Arguments can be of three kinds: + +

    +
  • If an argument is a sourcefile, it is added to the list of sourcefiles. +
  • If an argument is a directory, all the sourcefiles in +that directory are added to the list of sourcefiles. +
  • If an argument is a regular file, it is presumed to contain a list +of sourcefiles. Any line not containing a sourcefile is discarded. If +the line contains more than one word, the last word on the line should +be the sourcefile name, and the rest of the line is a file-specific +compilation command. This may be used, for instance, to provide +compiler flags specific to a single file in the sourcefile list: + +

    +a.f90
    +b.f90
    +f90 -Oaggress c.f90
    +
    + +

    This will add a.f90, b.f90 and c.f90 to the +sourcefile list. The first two files will be compiled using the +generic command $(FC) $(FFLAGS). But when the make requires +c.f90 to be compiled, it will be compiled with f90 +-Oaggress. +

+ +

The current working directory is always the first (and +top-precedence) argument, even if args is not supplied. + +

Treatment of [-c cppdefs]:

+ +

The argument cppdefs is treated as +follows. cppdefs should contain a comprehensive list +of the cpp #defines to be +preprocessed. This list is compared against the current "state", +maintained in the file .cppdefs in the current +working directory. If there are any changes to this state, +mkmf will remove all object files +affected by this change, so that the subsequent make +will recompile those files. Previous versions of mkmf +attempted to touch the relevant source, an operation +that was only possible with the right permissions. The current version +works even with read-only source. + +

The file .cppdefs is created if it does not exist. If you +wish to edit it by hand (don't!) it merely contains a list of the +cpp flags separated by blanks, in a single record, with no +newline at the end. + +

cppdefs also sets the make macro +CPPDEFS. If this was set in a template file and also +in the -c flag to mkmf, the value in +-c takes precedence. Typically, you should set only +CPPFLAGS in the template file, and +CPPDEFS via mkmf -c. + +

Treatment of includefiles:

+ +

Include files are often specified without an explicit path, e.g +

+#include "config.h"
+
+ +

mkmf first attempts to locate the includefile in the same +directory as the source file. If it is not found there, it looks in +the directories listed as arguments, maintaining the same +left-to-right precedence as described above. + +

This follows the behaviour of most f90 compilers: includefiles +inherit the path to the source, or else follow the order of include +directories specified from left to right on the f90 command +line, with the -I flags descending in precedence from +left to right. + +

If you have includefiles in a directory dir other than +those listed above, you can specify it yourself by including +-Idir in $(FFLAGS) in your template +file. Includepaths in the template file take precedence over those +generated by mkmf. (I suggest using +FFLAGS for this rather than CPPFLAGS +because fortran includes can occur even in source +requiring no preprocessing). + +

Examples:

+
    +

  1. The template file for the SGI MIPSpro compiler contains: + +

    +

    +FC = f90
    +LD = f90
    +CPPFLAGS = -macro_expand
    +FFLAGS = -d8 -64 -i4 -r8 -mips4 -O3
    +LDFLAGS = -64 -mips4 $(LIBS)
    +LIST = -listing
    +
    + +The meaning of the various flags may be divined by reading the +manual. A line defining the make macro LIBS, e.g: + +

    +LIBS = -lmpi
    +
    + +may be added anywhere in the template to have it added to the link +command line. + +

    +Sample template files for different OSs and compilers are available in +the directory /net/vb/public/bin. + +

  2. This example illustrates the effective use of mkmf's +precedence rules. Let the current working directory contain a file +named path_names containing the lines: + +

    +updates/a.f90
    +updates/b.f90
    +
    + +

    The directory /home/src/base contains the files: + +

    +a.f90
    +b.f90
    +c.f90
    +
    + +

    Typing

    mkmf path_names /home/src/base
    produces the +following Makefile: + +

    +# Makefile created by mkmf $Id: mkmf.html,v 1.1.2.1 2013/12/18 17:47:54 Niki.Zadeh Exp $ 
    +
    +
    +.DEFAULT:
    +	-touch $@
    +all: a.out
    +c.o: /home/src/base/c.f90
    +	$(FC) $(FFLAGS) -c	/home/src/base/c.f90
    +a.o: updates/a.f90
    +	$(FC) $(FFLAGS) -c	updates/a.f90
    +b.o: updates/b.f90
    +	$(FC) $(FFLAGS) -c	updates/b.f90
    +./c.f90: /home/src/base/c.f90
    +	cp /home/src/base/c.f90 .
    +./a.f90: updates/a.f90
    +	cp updates/a.f90 .
    +./b.f90: updates/b.f90
    +	cp updates/b.f90 .
    +SRC = /home/src/base/c.f90 updates/a.f90 updates/b.f90
    +OBJ = c.o a.o b.o
    +OFF = /home/src/base/c.f90 updates/a.f90 updates/b.f90
    +clean: neat
    +	-rm -f .cppdefs $(OBJ) a.out
    +neat:
    +	-rm -f $(TMPFILES)
    +localize: $(OFF)
    +	cp $(OFF) .
    +TAGS: $(SRC)
    +	etags $(SRC)
    +tags: $(SRC)
    +	ctags $(SRC)
    +a.out: $(OBJ)
    +	$(LD) $(OBJ) -o a.out $(LDFLAGS)
    +
    +
    + +

    Note that when files of the same name recur in the target list, the +files in the updates directory (specified in +path_names) are used rather than those in the base source +repository /home/src/base. + +Assume that now you want to test some changes to c.f90. You +don't want to make changes to the base source repository itself prior +to testing; so you make yourself a local copy. + +

    +make ./c.f90
    +
    + +

    You didn't even need to know where c.f90 originally was. + +Now you can make changes to your local copy ./c.f90. To +compile using your changed copy, type: + +

    +mkmf path_names /home/src/base
    +make
    +
    + +The new Makefile looks like this: + +

    +# Makefile created by mkmf $Id: mkmf.html,v 1.1.2.1 2013/12/18 17:47:54 Niki.Zadeh Exp $ 
    +
    +
    +.DEFAULT:
    +	-touch $@
    +all: a.out
    +c.o: c.f90
    +	$(FC) $(FFLAGS) -c	c.f90
    +a.o: updates/a.f90
    +	$(FC) $(FFLAGS) -c	updates/a.f90
    +b.o: updates/b.f90
    +	$(FC) $(FFLAGS) -c	updates/b.f90
    +./a.f90: updates/a.f90
    +	cp updates/a.f90 .
    +./b.f90: updates/b.f90
    +	cp updates/b.f90 .
    +SRC = c.f90 updates/a.f90 updates/b.f90
    +OBJ = c.o a.o b.o
    +OFF = updates/a.f90 updates/b.f90
    +clean: neat
    +	-rm -f .cppdefs $(OBJ) a.out
    +neat:
    +	-rm -f $(TMPFILES)
    +localize: $(OFF)
    +	cp $(OFF) .
    +TAGS: $(SRC)
    +	etags $(SRC)
    +tags: $(SRC)
    +	ctags $(SRC)
    +a.out: $(OBJ)
    +	$(LD) $(OBJ) -o a.out $(LDFLAGS)
    +
    +
    + +

    Note that you are now using your local copy of c.f90 for +the compile, since the files in the current working directory always +take precedence. To revert to using the base copy, just remove the +local copy and run mkmf again. + +

  3. This illustrates the use of mkmf -c: + +

    +mkmf -c "-Dcppflag -Dcppflag2=2 -Dflag3=string ..."
    +
    + +

    will set CPPDEFS to this value, and also save this +state in the file .cppdefs. If the argument to +-c is changed in a subsequent call: + +

    +mkmf -c "-Dcppflag -Dcppflag2=3 -Dflag3=string ..."
    +
    + +mkmf will scan the source list for sourcefiles that make +references to cppflag2, and the corresponding object files +will be removed. + +
+ +

Caveats:

+
    +

  1. In F90, the module name must occur on the same source line as +the module or use keyword. That is to +say, if your code contained: + +

    use &
    +
    this_module
    + +

    it would confuse mkmf. Similarly, a fortran +include statement must not be split across lines. + +

  2. Two use statements on the same line is not +currently recognized, that is: + +

    use module1; use module2
    + +

    is to be avoided. + +

  3. I currently provide a default action for files listed as +dependencies but not found: in this case, I touch the +file, creating a null file of that name in the current directory. I am +willing to debate the wisdom of this, if you are disturbed. But it is +currently the least annoying way I've found to take care of a +situation when cpp #includes buried within obsolete +ifdefs ask for files that don't exist: + +

    +#ifdef obsolete
    +#include "nonexistent.h"
    +#endif
    +
    + +

  4. If the formatting flag -f is used, long lines +will be broken up at intervals of 256 characters. This can lead to +problems if individual paths are longer than 256 characters. + +
+ +

Changes

+ +The RCS log for +mkmf contains a comprehensive list of changes. In the +unlikely event that you should wish to check out a retro version, +please get in touch with me, Balaji. + +

TODO:

+ +
    +
  1. An option to write a dependency graph, perhaps in HTML. +
+ +

Please address all inquires to Balaji, +SGI/GFDL. + + +


+
+Author: V. Balaji +
Document last modified
+
+ + + + + + diff --git a/MOM_code/bin/mkmf.template.gfdl_ws_32.intel b/MOM_code/bin/mkmf.template.gfdl_ws_32.intel new file mode 100644 index 0000000..47bc3de --- /dev/null +++ b/MOM_code/bin/mkmf.template.gfdl_ws_32.intel @@ -0,0 +1,182 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = ifort +CC = icc +LD = ifort +######### +# flags # +######### +DEBUG = +REPRO = on +VERBOSE = +OPENMP = + +############################################## +# Need to use at least GNU Make version 3.81 # +############################################## +need := 3.81 +ok := $(filter $(need),$(firstword $(sort $(MAKE_VERSION) $(need)))) +ifneq ($(need),$(ok)) +$(error Need at least make version $(need). Load module gmake/3.81) +endif + +MAKEFLAGS += --jobs=2 + +NETCDF_ROOT = /home/nnz/local/build/netcdf-4.1.1_ifort11_HDF +MPICH_ROOT = /home/nnz/local/build/mpich2-1.3_ifort11 +#MPICH_ROOT = /usr/local/mpich +HDF5_ROOT = /home/nnz/local/build/hdf5-1.8.5-patch1_zlib-1.2.5_ifort11/lib +ZLIB_ROOT = /home/nnz/local/build/zlib-1.2.5 +INCLUDE = -I$(NETCDF_ROOT)/include -I$(MPICH_ROOT)/include + + +FPPFLAGS := -fpp -Wp,-w $(INCLUDE) + +FFLAGS := -fno-alias -automatic -safe-cray-ptr -ftz -assume byterecl -i4 -r8 -nowarn +FFLAGS_OPT = -O3 -debug minimal -fp-model precise -override-limits +FFLAGS_DEBUG = -g -O0 -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fpe0 -traceback -ftrapuv +FFLAGS_REPRO = -O2 -debug minimal -no-vec -fp-model precise -override-limits +FFLAGS_OPENMP = -openmp +FFLAGS_VERBOSE = -v -V -what + + +CFLAGS := -D__IFC $(INCLUDE) +CFLAGS_OPT = -O2 -debug minimal -no-vec +CFLAGS_OPENMP = -openmp +CFLAGS_DEBUG = -O0 -g -ftrapuv -traceback + +LDFLAGS := +LDFLAGS_VERBOSE := -Wl,-V,--verbose,-cref,-M + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +#else +#CFLAGS += $(CFLAGS_OPT) +#FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +ifneq ($(findstring netcdf-4.0.1,$(LOADEDMODULES)),) + LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf -L$(HDF5_ROOT)/lib -lhdf5_hl -lhdf5 -lcurl -L$(ZLIB_ROOT)/lib -lz +else + LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf +endif + +LIBS += -L$(MPICH_ROOT)/lib -lmpich -lpthread -lmpl +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.gfdl_ws_64.gnu b/MOM_code/bin/mkmf.template.gfdl_ws_64.gnu new file mode 100644 index 0000000..9f7a06e --- /dev/null +++ b/MOM_code/bin/mkmf.template.gfdl_ws_64.gnu @@ -0,0 +1,184 @@ +# $Id: mkmf.template.gfdl_ws_64.gnu,v 1.1.2.1 2013/12/18 17:47:54 Niki.Zadeh Exp $ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = gfortran +CC = gcc +LD = gfortran $(MAIN_PROGRAM) +######### +# flags # +######### +DEBUG = +REPRO = +VERBOSE = +OPENMP = + +MAKEFLAGS += --jobs=$(shell grep '^processor' /proc/cpuinfo | wc -l) + +FPPFLAGS := + +FFLAGS := -fcray-pointer -fdefault-real-8 -Waliasing -ffree-line-length-none -fno-range-check +FFLAGS += -I/net2/nnz/opt/netcdf-4.1.1/include +#FFLAGS += -I/home/fms/local/opt/netcdf/4.1.1-gnu-4/include +#The above fails with USE netcdf, ONLY: NF_FILL_REAL => NF90_FILL_REAL +# 1 +# Fatal Error: Parse error when checking module version for file 'netcdf.mod' opened at (1) +# +#FFLAGS += $(shell nc-config --fflags) +# +FFLAGS += -I/net2/nnz/opt/mpich2-1.3_ifort11_x64/include +#FFLAGS += -I/usr/local/x64/mpich2-1.2.1p1/include # I do not trust this package, mpirun does not work +#$(shell pkg-config --cflags-only-I mpich2-c) +FFLAGS_OPT = -O2 +FFLAGS_REPRO = +FFLAGS_DEBUG = -O0 -g -W -fbounds-check +FFLAGS_OPENMP = -fopenmp +FFLAGS_VERBOSE = + +CFLAGS := -D__IFC +CFLAGS += $(shell nc-config --cflags) +CFLAGS += -I/net2/nnz/opt/netcdf-4.1.1/include -I/net2/nnz/opt/mpich2-1.3_ifort11_x64/include +#CFLAGS += $(shell pkg-config --cflags-only-I mpich2-c) +CFLAGS_OPT = -O2 +CFLAGS_OPENMP = -fopenmp +CFLAGS_DEBUG = -O0 -g + +# Optional Testing compile flags. Mutually exclusive from DEBUG, REPRO, and OPT +# *_TEST will match the production if no new option(s) is(are) to be tested. +FFLAGS_TEST = -O2 +CFLAGS_TEST = -O2 + +LDFLAGS := +LDFLAGS_OPENMP := -fopenmp +LDFLAGS_VERBOSE := + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +else ifneq ($(TEST),) +CFLAGS += $(CFLAGS_TEST) +FFLAGS += $(FFLAGS_TEST) +else +CFLAGS += $(CFLAGS_OPT) +FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +LDFLAGS += $(LDFLAGS_OPENMP) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +LIBS := $(shell nc-config --flibs) -L/net2/nnz/opt/mpich2-1.3_ifort11_x64/lib -lmpich -lmpl -lpthread +#$(shell pkg-config --libs mpich2-f90) #does not work +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.gfdl_ws_64.gnu.debug b/MOM_code/bin/mkmf.template.gfdl_ws_64.gnu.debug new file mode 100644 index 0000000..1744c6c --- /dev/null +++ b/MOM_code/bin/mkmf.template.gfdl_ws_64.gnu.debug @@ -0,0 +1,184 @@ +# $Id: mkmf.template.gfdl_ws_64.gnu.debug,v 1.1.2.1 2013/12/18 17:47:54 Niki.Zadeh Exp $ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = gfortran +CC = gcc +LD = gfortran $(MAIN_PROGRAM) +######### +# flags # +######### +DEBUG = on +REPRO = +VERBOSE = +OPENMP = + +MAKEFLAGS += --jobs=$(shell grep '^processor' /proc/cpuinfo | wc -l) + +FPPFLAGS := + +FFLAGS := -fcray-pointer -fdefault-real-8 -Waliasing -ffree-line-length-none -fno-range-check +FFLAGS += -I/net2/nnz/opt/netcdf-4.1.1/include +#FFLAGS += -I/home/fms/local/opt/netcdf/4.1.1-gnu-4/include +#The above fails with USE netcdf, ONLY: NF_FILL_REAL => NF90_FILL_REAL +# 1 +# Fatal Error: Parse error when checking module version for file 'netcdf.mod' opened at (1) +# +#FFLAGS += $(shell nc-config --fflags) +# +FFLAGS += -I/net2/nnz/opt/mpich2-1.3_ifort11_x64/include +#FFLAGS += -I/usr/local/x64/mpich2-1.2.1p1/include # I do not trust this package, mpirun does not work +#$(shell pkg-config --cflags-only-I mpich2-c) +FFLAGS_OPT = -O2 +FFLAGS_REPRO = +FFLAGS_DEBUG = -O0 -g -W -fbounds-check +FFLAGS_OPENMP = -fopenmp +FFLAGS_VERBOSE = + +CFLAGS := -D__IFC +CFLAGS += $(shell nc-config --cflags) +CFLAGS += -I/net2/nnz/opt/netcdf-4.1.1/include -I/net2/nnz/opt/mpich2-1.3_ifort11_x64/include +#CFLAGS += $(shell pkg-config --cflags-only-I mpich2-c) +CFLAGS_OPT = -O2 +CFLAGS_OPENMP = -fopenmp +CFLAGS_DEBUG = -O0 -g + +# Optional Testing compile flags. Mutually exclusive from DEBUG, REPRO, and OPT +# *_TEST will match the production if no new option(s) is(are) to be tested. +FFLAGS_TEST = -O2 +CFLAGS_TEST = -O2 + +LDFLAGS := +LDFLAGS_OPENMP := -fopenmp +LDFLAGS_VERBOSE := + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +else ifneq ($(TEST),) +CFLAGS += $(CFLAGS_TEST) +FFLAGS += $(FFLAGS_TEST) +else +CFLAGS += $(CFLAGS_OPT) +FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +LDFLAGS += $(LDFLAGS_OPENMP) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +LIBS := $(shell nc-config --flibs) -L/net2/nnz/opt/mpich2-1.3_ifort11_x64/lib -lmpich -lmpl -lpthread +#$(shell pkg-config --libs mpich2-f90) #does not work +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.gfdl_ws_64.intel b/MOM_code/bin/mkmf.template.gfdl_ws_64.intel new file mode 100644 index 0000000..486afa1 --- /dev/null +++ b/MOM_code/bin/mkmf.template.gfdl_ws_64.intel @@ -0,0 +1,181 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = ifort +CC = icc +LD = ifort +######### +# flags # +######### +DEBUG = +REPRO = on +VERBOSE = +OPENMP = + +############################################## +# Need to use at least GNU Make version 3.81 # +############################################## +need := 3.81 +ok := $(filter $(need),$(firstword $(sort $(MAKE_VERSION) $(need)))) +ifneq ($(need),$(ok)) +$(error Need at least make version $(need). Load module gmake/3.81) +endif + +MAKEFLAGS += --jobs=2 + +NETCDF_ROOT = /usr/local/x64/netcdf-4.1.2 +MPICH_ROOT = /usr/local/x64/mpich2 +HDF5_ROOT = /usr/local/x64/hdf5-1.8.6/lib +ZLIB_ROOT = +INCLUDE = -I$(NETCDF_ROOT)/include -I$(MPICH_ROOT)/include + + +FPPFLAGS := -fpp -Wp,-w $(INCLUDE) + +FFLAGS := -fno-alias -automatic -safe-cray-ptr -ftz -assume byterecl -i4 -r8 -nowarn +FFLAGS_OPT = -O3 -debug minimal -fp-model precise -override-limits +FFLAGS_DEBUG = -g -O0 -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fpe0 -traceback -ftrapuv +FFLAGS_REPRO = -O2 -debug minimal -no-vec -fp-model precise -override-limits +FFLAGS_OPENMP = -openmp +FFLAGS_VERBOSE = -v -V -what + + +CFLAGS := -D__IFC $(INCLUDE) +CFLAGS_OPT = -O2 -debug minimal -no-vec +CFLAGS_OPENMP = -openmp +CFLAGS_DEBUG = -O0 -g -ftrapuv -traceback + +LDFLAGS := +LDFLAGS_VERBOSE := -Wl,-V,--verbose,-cref,-M + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +#else +#CFLAGS += $(CFLAGS_OPT) +#FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +ifneq ($(findstring netcdf-4.0.1,$(LOADEDMODULES)),) + LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf -lnetcdff -L$(HDF5_ROOT)/lib -lhdf5_hl -lhdf5 -lcurl -L$(ZLIB_ROOT)/lib -lz +else + LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf -lnetcdff +endif + +LIBS += -L$(MPICH_ROOT)/lib -lmpich -lpthread +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.gfortran b/MOM_code/bin/mkmf.template.gfortran new file mode 100644 index 0000000..66a84cc --- /dev/null +++ b/MOM_code/bin/mkmf.template.gfortran @@ -0,0 +1,229 @@ +# $Id: gnu.mk,v 1.1.2.1.2.1 2012/03/07 15:08:54 sdu Exp $ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = mpif90 +CC = mpicc +CXX = mpic++ +LD = mpif90 $(MAIN_PROGRAM) +######### +# flags # +######### +DEBUG = +REPRO = +VERBOSE = +OPENMP = + +MAKEFLAGS += --jobs=$(shell grep '^processor' /proc/cpuinfo | wc -l) + +# Required Preprocessor Macros: +CPPDEFS += -Duse_netCDF + +# Additional Preprocessor Macros needed due to Autotools and CMake +CPPDEFS += -DHAVE_SCHED_GETAFFINITY + +# Macro for Fortran preprocessor +FPPFLAGS := $(INCLUDES) +# Fortran Compiler flags for the NetCDF library +FPPFLAGS += $(shell nf-config --fflags) +# Fortran Compiler flags for the MPICH MPI library +FFPFLAGS += -I/usr/lib/x86_64-linux-gnu/openmpi/lib +FFPFLAGS += -I/usr/lib/x86_64-linux-gnu/openmpi/include +FFPFLAGS += -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi +# Base set of Fortran compiler flags +FFLAGS := -fcray-pointer -fdefault-double-8 -fdefault-real-8 -Waliasing -ffree-line-length-none -fno-range-check + +# Flags based on perforance target (production (OPT), reproduction (REPRO), or debug (DEBUG) +FFLAGS_OPT = -O3 +FFLAGS_REPRO = -O2 -fbounds-check +FFLAGS_DEBUG = -O0 -g -W -fbounds-check -fbacktrace -ffpe-trap=invalid,zero,overflow + +# Flags to add additional build options +FFLAGS_OPENMP = -fopenmp +FFLAGS_VERBOSE = +FFLAGS_COVERAGE = + +# Macro for C preprocessor +CPPFLAGS := $(INCLUDES) +# C Compiler flags for the NetCDF library +CPPFLAGS += $(shell nc-config --cflags) +# C Compiler flags for the MPICH MPI library +CPPFLAGS += -I/usr/lib/x86_64-linux-gnu/openmpi/lib +CPPFLAGS += -I/usr/lib/x86_64-linux-gnu/openmpi/include +CPPFLAGS += -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi + +# Base set of C compiler flags +CFLAGS := -D__IFC +# Flags based on perforance target (production (OPT), reproduction (REPRO), or debug (DEBUG) +CFLAGS_OPT = -O2 +CFLAGS_REPRO = -O2 +CFLAGS_DEBUG = -O0 -g + +# Flags to add additional build options +CFLAGS_OPENMP = -fopenmp +CFLAGS_VERBOSE = +CFLAGS_COVERAGE = + +# Optional Testing compile flags. Mutually exclusive from DEBUG, REPRO, and OPT +# *_TEST will match the production if no new option(s) is(are) to be tested. +FFLAGS_TEST := $(FFLAGS_OPT) +CFLAGS_TEST := $(CFLAGS_OPT) + +# Linking flags +LDFLAGS := +LDFLAGS_OPENMP := -fopenmp +LDFLAGS_VERBOSE := +LDFLAGS_COVERAGE := + +# Start with a blank LIBS +LIBS = +# NetCDF library flags +LIBS += $(shell nf-config --flibs) +# MPICH MPI library flags +LIBS += -L/usr/lib/x86_64-linux-gnu/openmpi/lib -lmpi +LIBS += -lnetcdff +# Get compile flags based on target macros. +ifdef REPRO +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +else ifdef DEBUG +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +else ifdef TEST +CFLAGS += $(CFLAGS_TEST) +FFLAGS += $(FFLAGS_TEST) +else +CFLAGS += $(CFLAGS_OPT) +FFLAGS += $(FFLAGS_OPT) +endif + +ifdef OPENMP +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +LDFLAGS += $(LDFLAGS_OPENMP) +endif + +ifdef SSE +CFLAGS += $(SSE) +FFLAGS += $(SSE) +endif + +ifdef NO_OVERRIDE_LIMITS +FFLAGS += $(FFLAGS_OVERRIDE_LIMITS) +endif + +ifdef VERBOSE +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +ifdef COVERAGE +ifdef BUILDROOT +PROF_DIR=-prof-dir=$(BUILDROOT) +endif +CFLAGS += $(CFLAGS_COVERAGE) $(PROF_DIR) +FFLAGS += $(FFLAGS_COVERAGE) $(PROF_DIR) +LDFLAGS += $(LDFLAGS_COVERAGE) $(PROF_DIR) +endif + +LDFLAGS += $(LIBS) +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.hpcs.intel b/MOM_code/bin/mkmf.template.hpcs.intel new file mode 100644 index 0000000..c7c6136 --- /dev/null +++ b/MOM_code/bin/mkmf.template.hpcs.intel @@ -0,0 +1,167 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = ifort +CC = icc +LD = ifort +######### +# flags # +######### +DEBUG = +REPRO = +VERBOSE = +OPENMP = + +MAKEFLAGS += --jobs=8 + +FPPFLAGS := -fpp -Wp,-w + +FFLAGS := -fno-alias -stack_temps -safe_cray_ptr -ftz -i_dynamic -assume byterecl -i4 -r8 -nowarn -g +FFLAGS_OPT = -O2 +FFLAGS_REPRO = -fltconsistency +FFLAGS_DEBUG = -O0 -check -check noarg_temp_created -check nopointer -warn -warn noerrors -debug variable_locations -fpe0 -traceback -ftrapuv +FFLAGS_OPENMP = -openmp +FFLAGS_VERBOSE = -v -V -what + + +CFLAGS := -D__IFC +CFLAGS_OPT = -O2 +CFLAGS_OPENMP = -openmp +CFLAGS_DEBUG = -O0 -g -ftrapuv -traceback + +LDFLAGS := +LDFLAGS_OPENMP := -openmp +LDFLAGS_VERBOSE := -Wl,-V,--verbose,-cref,-M + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +else +CFLAGS += $(CFLAGS_OPT) +FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +LDFLAGS += $(LDFLAGS_OPENMP) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +ifneq ($(findstring netcdf-4.0.1,$(LOADEDMODULES)),) + LIBS := -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz +else + LIBS := -lnetcdf +endif + +LIBS += -lmpi -lsma +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.ia64 b/MOM_code/bin/mkmf.template.ia64 new file mode 100644 index 0000000..e30cbf3 --- /dev/null +++ b/MOM_code/bin/mkmf.template.ia64 @@ -0,0 +1,106 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +CPPFLAGS = +FFLAGS_BASE = -v -V -what -fpp -fno-alias -stack_temps -safe_cray_ptr -ftz -i_dynamic -assume byterecl -g -i4 -r8 -Wp,-w +FFLAGS_REPRO = -fltconsistency +FFLAGS_DEBUG = -check -check noarg_temp_created -check nopointer -warn -warn noerrors -debug variable_locations -inline_debug_info -fpe0 -traceback -ftrapuv +FFLAGS = $(FFLAGS_BASE) -O2 -nowarn +FC = ifort +CC = icc +CFLAGS_BASE = -g -D__IFC +CFLAGS_DEBUG = -ftrapuv -traceback +CFLAGS = $(CFLAGS_BASE) -O2 +LD = ifort +LDFLAGS = -Wl,-V,--verbose,-cref,-Map linker.map -lnetcdf -lmpi -lsma +MAKEFLAGS+=--jobs=8 + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.ia64_flt b/MOM_code/bin/mkmf.template.ia64_flt new file mode 100644 index 0000000..e30db39 --- /dev/null +++ b/MOM_code/bin/mkmf.template.ia64_flt @@ -0,0 +1,106 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +CPPFLAGS = +FFLAGS_BASE = -v -V -what -fpp -fno-alias -stack_temps -safe_cray_ptr -ftz -i_dynamic -assume byterecl -g -i4 -r8 -Wp,-w +FFLAGS_REPRO = -fltconsistency +FFLAGS_DEBUG = -check -check noarg_temp_created -check nopointer -warn -warn noerrors -debug variable_locations -inline_debug_info -fpe0 -traceback -ftrapuv +FFLAGS = $(FFLAGS_BASE) $(FFLAGS_REPRO) -O2 -nowarn +FC = ifort +CC = icc +CFLAGS_BASE = -g -D__IFC +CFLAGS_DEBUG = -ftrapuv -traceback +CFLAGS = $(CFLAGS_BASE) -O2 +LD = ifort +LDFLAGS = -Wl,-V,--verbose,-cref,-Map linker.map -lnetcdf -lmpi -lsma +MAKEFLAGS+=--jobs=8 + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.ia64_flt_hdf b/MOM_code/bin/mkmf.template.ia64_flt_hdf new file mode 100644 index 0000000..51a416d --- /dev/null +++ b/MOM_code/bin/mkmf.template.ia64_flt_hdf @@ -0,0 +1,106 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +CPPFLAGS = +FFLAGS_BASE = -v -V -what -fpp -fno-alias -stack_temps -safe_cray_ptr -ftz -i_dynamic -assume byterecl -g -i4 -r8 -Wp,-w +FFLAGS_REPRO = -fltconsistency +FFLAGS_DEBUG = -check -check noarg_temp_created -check nopointer -warn -warn noerrors -debug variable_locations -inline_debug_info -fpe0 -traceback -ftrapuv +FFLAGS = $(FFLAGS_BASE) $(FFLAGS_REPRO) -O2 -nowarn +FC = ifort +CC = icc +CFLAGS_BASE = -g -D__IFC +CFLAGS_DEBUG = -ftrapuv -traceback +CFLAGS = $(CFLAGS_BASE) -O2 +LD = ifort +LDFLAGS = -Wl,-V,--verbose,-cref,-Map linker.map -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz -lmpi -lsma +MAKEFLAGS+=--jobs=8 + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.ibm b/MOM_code/bin/mkmf.template.ibm new file mode 100644 index 0000000..b279544 --- /dev/null +++ b/MOM_code/bin/mkmf.template.ibm @@ -0,0 +1,13 @@ +# Template for IBM xlf and xlc compilers +#typical use with netCDF: +# mkmf -t template.ibm -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +FC = mpxlf90_r +LD = mpxlf90_r +CC = mpcc_r +#CC was xlc_r +FFLAGS = -qsuffix=f=f90:cpp=F90 -qarch=auto -qmaxmem=-1 -qdpc -qrealsize=8 -qintsize=4 -qstrict -O3 -q64 +CFLAGS = -q64 +#LDFLAGS = -brename:.flush,.flush_ -brename:.mld_id_,.mld_id $(LIBS) +LDFLAGS = -q64 -brename:.flush,.flush_ -brename:.mld_id_,.mld_id $(LIBS) +# LIBS will need site-specific customization +LIBS = -L /usr/local/lib -lnetcdf -lmass diff --git a/MOM_code/bin/mkmf.template.ibm.xlf b/MOM_code/bin/mkmf.template.ibm.xlf new file mode 100644 index 0000000..97cd20d --- /dev/null +++ b/MOM_code/bin/mkmf.template.ibm.xlf @@ -0,0 +1,15 @@ +# Template for IBM xlf and xlc compilers +#typical use with netCDF: +# mkmf -t template.ibm -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +FC = mpxlf90_r +LD = mpxlf90_r +CC = mpcc_r + CPPFLAGS = + NETCDF = /usr/local + FFLAGS = $(CPPFLAGS) -I$(NETCDF)/include -O2 -qalias_size=1207959552 -qmaxmem=256000 -g -d -qsuffix=cpp=F90 -qintsize=4 -qrealsize=8 -qdpc -qextname=flush -qextname=mld_id -qsmp=omp:noauto -qnohot -qsimd=noauto -qnoipa + GFLAGS = $(CPPFLAGS) -I$(NETCDF)/include -O2 -qalias_size=1207959552 -qmaxmem=256000 -g -d -qsuffix=cpp=F90 -qintsize=4 -qrealsize=8 -qdpc -qextname=flush -qextname=mld_id -qsmp=omp:noauto -qnohot -qsimd=noauto + PFLAGS = $(CPPFLAGS) -I$(NETCDF)/include -O0 -qalias_size=1207959552 -qmaxmem=256000 -g -d -qsuffix=cpp=F90 -qintsize=4 -qrealsize=8 -qdpc -qextname=flush -qextname=mld_id -qsmp=omp:noauto -qnohot -qsimd=noauto + QFLAGS = $(CPPFLAGS) -I$(NETCDF)/include -O2 -qalias_size=1207959552 -qmaxmem=256000 -g -d -qsuffix=cpp=F90 -qintsize=4 -qrealsize=8 -qdpc -qextname=flush -qextname=mld_id -qsmp=omp:noauto -qnohot -qsimd=noauto -qfixed + CFLAGS = -I$(NETCDF)/include + LDFLAGS = -L$(NETCDF)/lib -lnetcdf -lmass -qsmp + diff --git a/MOM_code/bin/mkmf.template.ifc b/MOM_code/bin/mkmf.template.ifc new file mode 100644 index 0000000..9694526 --- /dev/null +++ b/MOM_code/bin/mkmf.template.ifc @@ -0,0 +1,21 @@ +# template for the Intel fortran compiler version 8 +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include + +# -traceback +# +INCL := $(shell pkg-config --cflags-only-I netcdf-fortran) +LIBS := $(shell pkg-config --libs netcdf) +LIBS += $(shell pkg-config --libs netcdf-fortran) +#LIBS += -L/scratch/usr/mvkthne2/libs/hdf5/1.8.20/skl/intel.18.0.3/lib +#LIBS += -L/scratch/usr/mvkthne2/libs/szip/2.1/skl/intel.18.0.3/lib +LFLAGS := -Wl,-rpath,$(shell pkg-config --variable=libdir netcdf) +#LFLAGS += -Wl,-rpath,/scratch/usr/mvkthne2/libs/hdf5/1.8.20/skl/intel.18.0.3/lib +#LFLAGS += -Wl,-rpath,/scratch/usr/mvkthne2/libs/szip/2.1/skl/intel.18.0.3/lib +FFLAGS := -O3 -xCORE-AVX512 -qopt-zmm-usage=high -r8 -fp-model precise -align array64byte ${INCL} +CPPFLAGS := ${INCL} +FC = mpiifort +LD = mpiifort +LDFLAGS := ${LIBS} ${LFLAGS} +CC = mpiicc + diff --git a/MOM_code/bin/mkmf.template.nci b/MOM_code/bin/mkmf.template.nci new file mode 100644 index 0000000..a26b0c4 --- /dev/null +++ b/MOM_code/bin/mkmf.template.nci @@ -0,0 +1,146 @@ +# Template for the NCI (nf.nci.org.au) machines. Uses intel compiler and OpenMPI. +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = mpif90 +CC = icc +LD = mpif90 +######### +# flags # +######### +DEBUG = +REPRO = on +VERBOSE = + +MAKEFLAGS += --jobs=4 + +INCLUDE = -I$(NETCDF_ROOT)/include + +FPPFLAGS := -fpp -Wp,-w $(INCLUDE) +FFLAGS := -fno-alias -safe-cray-ptr -ftz -assume byterecl -i4 -r8 -nowarn +FFLAGS_OPT = -O3 -debug minimal -fp-model precise +FFLAGS_DEBUG = -g -O0 -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fpe0 -traceback -ftrapuv +FFLAGS_REPRO = -O2 -debug minimal -no-vec -fp-model precise +FFLAGS_VERBOSE = -v -V -what + +CFLAGS := -D__IFC $(INCLUDE) +CFLAGS_OPT = -O2 -debug minimal -no-vec +CFLAGS_DEBUG = -O0 -g -ftrapuv -traceback + +LDFLAGS := +LDFLAGS_VERBOSE := -Wl,-V,--verbose,-cref,-M + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +else +CFLAGS += $(CFLAGS_OPT) +FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf -lnetcdff -L$(HDF5_ROOT)/lib -lhdf5_hl -lhdf5 -lcurl -L$(ZLIB_ROOT)/lib -lz + +LIBS += $(OPENMPI_F90LIBS) -lpthread +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.ncrc1.intel b/MOM_code/bin/mkmf.template.ncrc1.intel new file mode 100644 index 0000000..3cc0a6c --- /dev/null +++ b/MOM_code/bin/mkmf.template.ncrc1.intel @@ -0,0 +1,183 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = ftn +CC = cc +LD = ftn +######### +# flags # +######### +DEBUG = +REPRO = +VERBOSE = +OPENMP = + +############################################## +# Need to use at least GNU Make version 3.81 # +############################################## +need := 3.81 +ok := $(filter $(need),$(firstword $(sort $(MAKE_VERSION) $(need)))) +ifneq ($(need),$(ok)) +$(error Need at least make version $(need). Load module gmake/3.81) +endif + +MAKEFLAGS += --jobs=2 + +NETCDF_ROOT = $(NETCDF_DIR) +MPI_ROOT = $(MPICH_DIR) +INCLUDE = -I$(NETCDF_ROOT)/include + +FPPFLAGS := -fpp -Wp,-w $(INCLUDE) + +FFLAGS := -fno-alias -automatic -safe-cray-ptr -ftz -assume byterecl -i4 -r8 -nowarn +FFLAGS_OPT = -O3 -debug minimal -fp-model precise -override-limits +FFLAGS_DEBUG = -g -O0 -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fpe0 -traceback -ftrapuv +FFLAGS_REPRO = -O2 -debug minimal -fp-model precise -override-limits +FFLAGS_OPENMP = -openmp +FFLAGS_VERBOSE = -v -V -what + +CFLAGS := -D__IFC +CFLAGS_OPT = -O2 -debug minimal +CFLAGS_OPENMP = -openmp +CFLAGS_DEBUG = -O0 -g -ftrapuv -traceback + +LDFLAGS := +LDFLAGS_OPENMP := -openmp +LDFLAGS_VERBOSE := -Wl,-V,--verbose,-cref,-M + +# start with blank LIBS +LIBS := + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +else ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +else +CFLAGS += $(CFLAGS_OPT) +FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +LDFLAGS += $(LDFLAGS_OPENMP) +# to correct a loader bug on gaea: envars below set by module load intel +LIBS += -L$(INTEL_PATH)/$(INTEL_MAJOR_VERSION)/$(INTEL_MINOR_VERSION)/lib/intel64 -lifcoremt +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +ifneq ($(findstring netcdf-4.0.1,$(LOADEDMODULES)),) + LIBS += -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz +else + LIBS += -lnetcdf +endif + +LIBS += +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.ncrc2.gnu b/MOM_code/bin/mkmf.template.ncrc2.gnu new file mode 100644 index 0000000..035b81e --- /dev/null +++ b/MOM_code/bin/mkmf.template.ncrc2.gnu @@ -0,0 +1,177 @@ +# $Id: mkmf.template.ncrc2.gnu,v 1.1.2.1 2013/12/18 17:47:55 Niki.Zadeh Exp $ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = ftn +CC = cc +LD = ftn $(MAIN_PROGRAM) +######### +# flags # +######### +DEBUG = +REPRO = +VERBOSE = +OPENMP = + +MAKEFLAGS += --jobs=2 + +FPPFLAGS := + +FFLAGS := -fcray-pointer -fdefault-real-8 -fdefault-double-8 -Waliasing -ffree-line-length-none -fno-range-check +FFLAGS_OPT = -O2 -fno-expensive-optimizations +FFLAGS_REPRO = +FFLAGS_DEBUG = -O0 -g -W -fbounds-check +FFLAGS_OPENMP = -fopenmp +FFLAGS_VERBOSE = + +CFLAGS := -D__IFC +CFLAGS_OPT = -O2 +CFLAGS_OPENMP = -fopenmp +CFLAGS_DEBUG = -O0 -g + +# Optional Testing compile flags. Mutually exclusive from DEBUG, REPRO, and OPT +# *_TEST will match the production if no new option(s) is(are) to be tested. +FFLAGS_TEST = -O2 +CFLAGS_TEST = -O2 + +LDFLAGS := +LDFLAGS_OPENMP := -fopenmp +LDFLAGS_VERBOSE := + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +else ifneq ($(TEST),) +CFLAGS += $(CFLAGS_TEST) +FFLAGS += $(FFLAGS_TEST) +else +CFLAGS += $(CFLAGS_OPT) +FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +LDFLAGS += $(LDFLAGS_OPENMP) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +LIBS := + +ifneq ($(findstring netcdf,$(LOADEDMODULES)),) + LIBS += -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz +else + LIBS += -lnetcdf +endif + +LIBS += +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.ncrc2.intel b/MOM_code/bin/mkmf.template.ncrc2.intel new file mode 100644 index 0000000..bac5674 --- /dev/null +++ b/MOM_code/bin/mkmf.template.ncrc2.intel @@ -0,0 +1,183 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = ftn +CC = cc +LD = ftn +######### +# flags # +######### +DEBUG = +REPRO = on +VERBOSE = +OPENMP = + +############################################## +# Need to use at least GNU Make version 3.81 # +############################################## +need := 3.81 +ok := $(filter $(need),$(firstword $(sort $(MAKE_VERSION) $(need)))) +ifneq ($(need),$(ok)) +$(error Need at least make version $(need). Load module gmake/3.81) +endif + +MAKEFLAGS += --jobs=2 + +NETCDF_ROOT = $(NETCDF_DIR) +MPI_ROOT = $(MPICH_DIR) +INCLUDE = -I$(NETCDF_ROOT)/include + +FPPFLAGS := -fpp -Wp,-w $(INCLUDE) + +FFLAGS := -fno-alias -automatic -safe-cray-ptr -ftz -assume byterecl -i4 -r8 -nowarn +FFLAGS_OPT = -O3 -debug minimal -fp-model precise -override-limits +FFLAGS_DEBUG = -g -O0 -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fpe0 -traceback -ftrapuv +FFLAGS_REPRO = -O2 -debug minimal -fp-model precise -override-limits -g -traceback +FFLAGS_OPENMP = -openmp +FFLAGS_VERBOSE = -v -V -what + +CFLAGS := -D__IFC +CFLAGS_OPT = -O2 -debug minimal +CFLAGS_OPENMP = -openmp +CFLAGS_DEBUG = -O0 -g -ftrapuv -traceback + +LDFLAGS := +LDFLAGS_OPENMP := -openmp +LDFLAGS_VERBOSE := -Wl,-V,--verbose,-cref,-M + +# start with blank LIBS +LIBS := + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +else ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +else +CFLAGS += $(CFLAGS_OPT) +FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +LDFLAGS += $(LDFLAGS_OPENMP) +# to correct a loader bug on gaea: envars below set by module load intel +LIBS += -L$(INTEL_PATH)/$(INTEL_MAJOR_VERSION)/$(INTEL_MINOR_VERSION)/lib/intel64 -lifcoremt +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +ifneq ($(findstring netcdf-4.0.1,$(LOADEDMODULES)),) + LIBS += -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz +else + LIBS += -lnetcdf +endif + +LIBS += +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.nec b/MOM_code/bin/mkmf.template.nec new file mode 100644 index 0000000..6d842d0 --- /dev/null +++ b/MOM_code/bin/mkmf.template.nec @@ -0,0 +1,87 @@ + + + +# Makefile template for SX cross compiler +#typical use with netCDF: +# mkmf -t template.nec -c"-Duse_libMPI -Duse_netCDF" path_names /opt/sx/netcdf/include +FC = sxmpif90 +LD = sxmpif90 +CC = sxmpic++ +TOTALVIEW = +NETCDF = /SX/opt/netcdf +CPPFLAGS = -D__SX +FFLAGS = -Wf"-A idbl4" -R2 -ts. -Chopt -I$(NETCDF)/include +CFLAGS = -Xa +LDFLAGS = $(LIBS) +LIST = -R2 +# LIBS needs to be customized per site +LIBS = $(TOTALVIEW) -L$(NETCDF)/lib -lnetcdf + +# you should never need to change any lines below. + +# see the SX F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .T create a CIF file +# make .L create a compiler listing +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh +TMPFILES = *.L i.* *.s *.mod + +.SUFFIXES: .F .F90 .L .T .f .f90 .h .o .s .x + +.f.L: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(CPP) $(CPPDEFS) $(CPPFLAGS) $*.F > $*.f +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(CPP) $(CPPDEFS) $(CPPFLAGS) $*.F90 > $*.f90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) + diff --git a/MOM_code/bin/mkmf.template.pgi b/MOM_code/bin/mkmf.template.pgi new file mode 100644 index 0000000..2572e48 --- /dev/null +++ b/MOM_code/bin/mkmf.template.pgi @@ -0,0 +1,110 @@ +# template for the PGI compiler +# typical use with mkmf +# mkmf -t mkmf.template.pgi -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +# next two definitions are site-dependent, set by environment +NETCDF_ROOT = $(NETCDF_DIR) +MPI_ROOT = $(MPICH_DIR) +VERBOSE = -v +INCLUDE = -I$(NETCDF_ROOT)/include +CPPFLAGS = # -Wp,-C,$(VERBOSE) +CFLAGS = $(INCLUDE) $(VERBOSE) +FFLAGS_OPT = -O2 -fast -Mcray=pointer +FFLAGS_DEBUG = -g -traceback $(VERBOSE) +# use that -D flag to detect if we can use 03 allocatable in fms_platform.h +FFLAGS = $(INCLUDE) -i4 -r8 -byteswapio -Ktrap=fp -Mallocatable=03 -D_F2000 $(FFLAGS_OPT) $(FFLAGS_DEBUG) +FC = ftn +CC = cc +#CFLAGS = -D__IFC +LD = $(FC) +#LDFLAGS = -byteswapio -lpathfortran -L$(NETCDF_ROOT)/lib -lnetcdf -L$(MPI_ROOT)/lib -lmpich +LDFLAGS = $(VERBOSE) -byteswapio -L$(NETCDF_ROOT)/lib -lnetcdf + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.pscale b/MOM_code/bin/mkmf.template.pscale new file mode 100644 index 0000000..48c68f7 --- /dev/null +++ b/MOM_code/bin/mkmf.template.pscale @@ -0,0 +1,112 @@ +# template for the pathscale compiler +# typical use with mkmf +# mkmf -t mkmf.template.pscale -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +# next two definitions are site-dependent, set by environment +NETCDF_ROOT = $(NETCDF_DIR) +MPI_ROOT = $(MPICH_DIR) +VERBOSE = -v +INCLUDE = -I$(NETCDF_ROOT)/include +CPPFLAGS = # -Wp,-C,$(VERBOSE) +CFLAGS = $(INCLUDE) $(VERBOSE) +FFLAGS_OPT = -O0 # -O2 -OPT:Ofast +FFLAGS_DEBUG = -g -trapuv $(VERBOSE) +FFLAGS = $(INCLUDE) -i4 -r8 -byteswapio -fno-second-underscore -OPT:IEEE_arith=2 $(FFLAGS_OPT) $(FFLAGS_DEBUG) +FC = ftn +CC = cc +#CFLAGS = -D__IFC + +# pathscale wants main program outside libraries, do +# setenv MAIN_PROGRAM coupler_main.o or something before make +LD = $(FC) $(MAIN_PROGRAM) +#LDFLAGS = -byteswapio -lpathfortran -L$(NETCDF_ROOT)/lib -lnetcdf -L$(MPI_ROOT)/lib -lmpich +LDFLAGS = $(VERBOSE) -byteswapio -L$(NETCDF_ROOT)/lib -lnetcdf + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.sgi b/MOM_code/bin/mkmf.template.sgi new file mode 100644 index 0000000..e14a172 --- /dev/null +++ b/MOM_code/bin/mkmf.template.sgi @@ -0,0 +1,112 @@ +# Makefile template for SGI MIPSpro f90 + +FC = f90 +CPPFLAGS = -macro_expand +FFLAGS = -64 -mips4 -i4 -r8 -d8 -woff134,200,787,1670 -ansi -O2 -OPT:Olimit=0 #optimized +# FFLAGS = -64 -mips4 -i4 -r8 -d8 -woff134,200,787,1670 -ansi -DEBUG:conform_check=YES:subscript_check=ON:trap_uninitialized=ON:verbose_runtime=ON -g #for debugging +LIST = -listing + +#to debug shmem codes, you need the dbfork library +#TOTALVIEW = -L/opt/totalview/4.1.0-3/irix6-mips/lib -ldbfork_n64 +#TOTALVIEW = -ldbfork_n64 +#TOTALVIEW = -L/sw/mel/totalview/lib -ldbfork_n64 + +LD = f90 +# LDFLAGS = -64 -mips4 -v -show $(LIBS) # this is verbose +LDFLAGS = -64 -mips4 -dont_warn_unused $(LIBS) +#LIBS must be customized for your site +LIBS = $(TOTALVIEW) -L/usr/local/lib -lnetcdf -lmpi -lsma -lexc -lscs + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .T create a CIF file +# make .L create a compiler listing +# make .l create an assembler listing +# make .w2f create an flist listing +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source + +# make .i create a preprocessed file (only for .F and .F90 +# extensions) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh +TMPFILES = .*.m *.B *.L *.i *.l *.s *.mod *.w2f + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .l .o .s .w2f .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.w2f: + $(FC) $(FFLAGS) -c -FLIST:ftn_file=$*.w2f $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.w2f: + $(FC) $(FFLAGS) -c -FLIST:ftn_file=$*.w2f $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.w2f: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -FLIST:ftn_file=$*.w2f $*.F +.F.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(CPP) $(CPPDEFS) $(CPPFLAGS) $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.w2f: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -FLIST:ftn_file=$*.w2f $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(CPP) $(CPPDEFS) $(CPPFLAGS) $*.F90 > $*.f90 +.F90.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mkmf.template.t3e b/MOM_code/bin/mkmf.template.t3e new file mode 100644 index 0000000..8b9b8d9 --- /dev/null +++ b/MOM_code/bin/mkmf.template.t3e @@ -0,0 +1,79 @@ +# Makefile template for t3e + +FC = f90 +LD = f90 +CPPFLAGS = -F +FFLAGS = -dp -O2,unroll2 +LDFLAGS = -Wl"-Dpreset=nan;streams=on;permok=yes -Xm $(LIBS)" +LIST = -O negmsgs -rs + +# you should never need to change any lines below. + +# see the CF90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .T create a CIF file +# make .lst create a compiler listing +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source + +# make .i create a preprocessed file (only for .F and .F90 +# extensions) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh +TMPFILES = .*.m *.T *.TT *.i *.lst *.s + +.SUFFIXES: .F .F90 .H .T .f .F90 .h .i .lst .o .s .x + +.f.T: + $(FC) $(FFLAGS) -c -Ca $*.f +.f.lst: + $(FC) $(FFLAGS) $(LIST) -c $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -eS $*.f +.f.x: + $(FC) $(FFLAGS) $(LDFLAGS) -o $*.x $*.f +.f90.T: + $(FC) $(FFLAGS) -c -Ca $*.f90 +.f90.lst: + $(FC) $(FFLAGS) $(LIST) -c $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -eS $*.f90 +.f90.x: + $(FC) $(FFLAGS) $(LDFLAGS) -o $*.x $*.f90 +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -Ca $*.F +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -eP $*.F +.F.lst: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) $(LIST) -c $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -eS $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) $(LDFLAGS) -o $*.x $*.F +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -Ca $*.F90 +.F90.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -eP $*.F90 +.F90.lst: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) $(LIST) -c $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -eS $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) $(LDFLAGS) -o $*.x $*.F90 diff --git a/MOM_code/bin/mkmf.template.t90 b/MOM_code/bin/mkmf.template.t90 new file mode 100644 index 0000000..5acf6a9 --- /dev/null +++ b/MOM_code/bin/mkmf.template.t90 @@ -0,0 +1,86 @@ +# Makefile template for t90 + +FC = f90 +LD = f90 +CPPFLAGS = -F +FFLAGS = -O2 +LDFLAGS = -Wl"-Dpreset=nan $(LIBS)" +LIST = -O negmsgs -rs + +# you should never need to change any lines below. + +# see the CF90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .T create a CIF file +# make .lst create a compiler listing +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source + +# make .i create a preprocessed file (only for .F and .F90 +# extensions) + +# make .hpm produce hpm output from .x +# make .proc produce procstat output from .x + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh +TMPFILES = .*.m *.T *.TT *.hpm *.i *.lst *.proc *.s + +.SUFFIXES: .F .F90 .H .T .f .F90 .h .hpm .i .lst .proc .o .s .x + +.f.T: + $(FC) $(FFLAGS) -c -Ca $*.f +.f.lst: + $(FC) $(FFLAGS) $(LIST) -c $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -eS $*.f +.f.x: + $(FC) $(FFLAGS) $(LDFLAGS) -o $*.x $*.f +.f90.T: + $(FC) $(FFLAGS) -c -Ca $*.f90 +.f90.lst: + $(FC) $(FFLAGS) $(LIST) -c $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -eS $*.f90 +.f90.x: + $(FC) $(FFLAGS) $(LDFLAGS) -o $*.x $*.f90 +.F.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -Ca $*.F +.F.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -eP $*.F +.F.lst: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) $(LIST) -c $*.F +.F.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -eS $*.F +.F.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) $(LDFLAGS) -o $*.x $*.F +.F90.T: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -Ca $*.F90 +.F90.i: + $(FC) $(CPPDEFS) $(CPPFLAGS) -eP $*.F90 +.F90.lst: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) $(LIST) -c $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) -c -eS $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FFLAGS) $(LDFLAGS) -o $*.x $*.F90 +.x.proc: + procstat -R $*.proc $*.x +.x.hpm: + hpm -r -o $*.hpm $*.x diff --git a/MOM_code/bin/mkmf.template.workstation.gfort b/MOM_code/bin/mkmf.template.workstation.gfort new file mode 100644 index 0000000..a8118c6 --- /dev/null +++ b/MOM_code/bin/mkmf.template.workstation.gfort @@ -0,0 +1,18 @@ +# template for the Gnu Fortran (gfortran) compiler version (GCC) 4.4.0 20090514 when using libMPI +# this template was tested with FRE on the workstation nnz on 10/06/2010 +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +# +#We need to locate the netcdf.mod that was compiled with gfort and pass it BEFORE any other location that might have a netcdf.mod +NETCDF_MOD_FILE_LOCATION = /home/nnz/local/include/gfort +MPICH_LOCATION = /net2/nnz/opt/mpich2-1.3_gfort44 +#MPICH_LOCATION = /usr/local/mpich +# +FFLAGS_BASE = -fcray-pointer -g -fdefault-real-8 -O2 -Waliasing -ffree-line-length-none -fno-range-check +FFLAGS = $(FFLAGS_BASE) +CPPFLAGS = -I/usr/include -I$(MPICH_LOCATION)/include -I$(NETCDF_MOD_FILE_LOCATION) -I/usr/local/netcdf4/include +FC = gfortran44 +LD = gfortran44 $(MAIN_PROGRAM) +LDFLAGS = -L/usr/local/netcdf4/lib -lnetcdf -L/usr/local/hdf5/lib -lhdf5_hl -lhdf5 -lz -L$(MPICH_LOCATION)/lib -lmpich -lpthread -lmpl +CFLAGS = -D__IFC + diff --git a/MOM_code/bin/mkmf.template.workstation.intel b/MOM_code/bin/mkmf.template.workstation.intel new file mode 100644 index 0000000..47bc3de --- /dev/null +++ b/MOM_code/bin/mkmf.template.workstation.intel @@ -0,0 +1,182 @@ +# template for the Intel fortran compiler +# typical use with mkmf +# mkmf -t template.ifc -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include +############ +# commands # +############ +FC = ifort +CC = icc +LD = ifort +######### +# flags # +######### +DEBUG = +REPRO = on +VERBOSE = +OPENMP = + +############################################## +# Need to use at least GNU Make version 3.81 # +############################################## +need := 3.81 +ok := $(filter $(need),$(firstword $(sort $(MAKE_VERSION) $(need)))) +ifneq ($(need),$(ok)) +$(error Need at least make version $(need). Load module gmake/3.81) +endif + +MAKEFLAGS += --jobs=2 + +NETCDF_ROOT = /home/nnz/local/build/netcdf-4.1.1_ifort11_HDF +MPICH_ROOT = /home/nnz/local/build/mpich2-1.3_ifort11 +#MPICH_ROOT = /usr/local/mpich +HDF5_ROOT = /home/nnz/local/build/hdf5-1.8.5-patch1_zlib-1.2.5_ifort11/lib +ZLIB_ROOT = /home/nnz/local/build/zlib-1.2.5 +INCLUDE = -I$(NETCDF_ROOT)/include -I$(MPICH_ROOT)/include + + +FPPFLAGS := -fpp -Wp,-w $(INCLUDE) + +FFLAGS := -fno-alias -automatic -safe-cray-ptr -ftz -assume byterecl -i4 -r8 -nowarn +FFLAGS_OPT = -O3 -debug minimal -fp-model precise -override-limits +FFLAGS_DEBUG = -g -O0 -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fpe0 -traceback -ftrapuv +FFLAGS_REPRO = -O2 -debug minimal -no-vec -fp-model precise -override-limits +FFLAGS_OPENMP = -openmp +FFLAGS_VERBOSE = -v -V -what + + +CFLAGS := -D__IFC $(INCLUDE) +CFLAGS_OPT = -O2 -debug minimal -no-vec +CFLAGS_OPENMP = -openmp +CFLAGS_DEBUG = -O0 -g -ftrapuv -traceback + +LDFLAGS := +LDFLAGS_VERBOSE := -Wl,-V,--verbose,-cref,-M + +ifneq ($(REPRO),) +CFLAGS += $(CFLAGS_REPRO) +FFLAGS += $(FFLAGS_REPRO) +endif +ifneq ($(DEBUG),) +CFLAGS += $(CFLAGS_DEBUG) +FFLAGS += $(FFLAGS_DEBUG) +#else +#CFLAGS += $(CFLAGS_OPT) +#FFLAGS += $(FFLAGS_OPT) +endif + +ifneq ($(OPENMP),) +CFLAGS += $(CFLAGS_OPENMP) +FFLAGS += $(FFLAGS_OPENMP) +endif + +ifneq ($(VERBOSE),) +CFLAGS += $(CFLAGS_VERBOSE) +FFLAGS += $(FFLAGS_VERBOSE) +LDFLAGS += $(LDFLAGS_VERBOSE) +endif + +ifeq ($(NETCDF),3) + # add the use_LARGEFILE cppdef + ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) + CPPDEFS += -Duse_LARGEFILE + endif +endif + +ifneq ($(findstring netcdf-4.0.1,$(LOADEDMODULES)),) + LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf -L$(HDF5_ROOT)/lib -lhdf5_hl -lhdf5 -lcurl -L$(ZLIB_ROOT)/lib -lz +else + LIBS := -L$(NETCDF_ROOT)/lib -lnetcdf +endif + +LIBS += -L$(MPICH_ROOT)/lib -lmpich -lpthread -lmpl +LDFLAGS += $(LIBS) + +#--------------------------------------------------------------------------- +# you should never need to change any lines below. + +# see the MIPSPro F90 manual for more details on some of the file extensions +# discussed here. +# this makefile template recognizes fortran sourcefiles with extensions +# .f, .f90, .F, .F90. Given a sourcefile ., where is one of +# the above, this provides a number of default actions: + +# make .opt create an optimization report +# make .o create an object file +# make .s create an assembly listing +# make .x create an executable file, assuming standalone +# source +# make .i create a preprocessed file (for .F) +# make .i90 create a preprocessed file (for .F90) + +# The macro TMPFILES is provided to slate files like the above for removal. + +RM = rm -f +SHELL = /bin/csh -f +TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt + +.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x + +.f.L: + $(FC) $(FFLAGS) -c -listing $*.f +.f.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f +.f.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f +.f.T: + $(FC) $(FFLAGS) -c -cif $*.f +.f.o: + $(FC) $(FFLAGS) -c $*.f +.f.s: + $(FC) $(FFLAGS) -S $*.f +.f.x: + $(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) +.f90.L: + $(FC) $(FFLAGS) -c -listing $*.f90 +.f90.opt: + $(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 +.f90.l: + $(FC) $(FFLAGS) -c $(LIST) $*.f90 +.f90.T: + $(FC) $(FFLAGS) -c -cif $*.f90 +.f90.o: + $(FC) $(FFLAGS) -c $*.f90 +.f90.s: + $(FC) $(FFLAGS) -c -S $*.f90 +.f90.x: + $(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) +.F.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F +.F.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F +.F.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F +.F.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F +.F.f: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f +.F.i: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F +.F.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F +.F.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F +.F.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) +.F90.L: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 +.F90.opt: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 +.F90.l: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 +.F90.T: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 +.F90.f90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 +.F90.i90: + $(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 +.F90.o: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 +.F90.s: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 +.F90.x: + $(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) diff --git a/MOM_code/bin/mppnccombine.gfdl_ws_64.intel b/MOM_code/bin/mppnccombine.gfdl_ws_64.intel new file mode 100755 index 0000000000000000000000000000000000000000..c6388f05c0d6bda766cdbde099f2921615c09fd9 GIT binary patch literal 33416 zcmcJ23t&{$wf31LNJPj)jT!~@h!YJ;Vo;QXht9wRPjtWt(W0WsWM)D}^6ES=SjwXl zdYKLZ+R~QW-`<<{x4pErN_)K&5ffe#s;%Oq7OhokwVg3OP+LX4HUIbRefH$ckZF7S z|NntGd+)W^T6^ua*IIj@eNN6~KroT7%Q%&By*$y%j_CSE?$0_O8fK%P@(%yg10X)09`GG%)shttf;bZUz% zs#Mc-0U#Y^tupJYTABo0rPUM&hf@f}oX(RFk912+x+Nx^N_UVk4wb6@kqv*7%>GTv zbE3qulZoaQ=aE!3TmMGH&wSD+5t2Tq$f&eIf;E*Yx|=~qIsef^$$3Rvu=$$lSG4&n z+JYU??uzc}YbvgpUK#GJyi&+t42JCD^$Twitl1s5a|V8Fy97U~j`a(E{`6z#yt(D~ zKdh@h7Vf)daP5Yx#<1=({K$iJ8}{iot-v{vu&MZ6f#2NPU%&O}AHKF~SMPg8)$b=J zz4-YhllDCJuzl#ccZ*Ox>d_2_lp*{01^}bM^K;-ongjnkIpDA4fPW)t^{1iFZ(zx2cNIyfPV%CqmBF0 z9PnS|fO~TAKQ{;d!5r|<=iqaG4*0z}_;_>RpPmE0AP1jyIpCM);M1K0elhsy_+=lA z6Qk+>_8feEngjnofM2Y=H{2R*%4lM@3Gcc)6aFW`=QM4{1ZM{RV&I>yovUpy`KWmJ zU=IHCK~4O%CccWRw+jA6TCy&azlONk5s3KwEsT{jv<{y)5?L0A$V`W~J)kuEtGfXOwM1vvbA}hNBZ2}){fOI8b z;3?6Okuv*(?XneS{6IlUlt#!CVPAdh<~3S467qpXpc~L|7bJ_cXe~k>h!WPK9hgOy z6D!i$run>WZJj>oAsFuT)zmb$gnizQ77ZhNpVd+O%SYrL}Z%F3(L`581I&Tnc-!d#x1-I&VS(Q>Lr;h}G!j2AjbGT>B=9)5ULtbxr0ke$CC;(x zQ2s!8g#sciH~EZ3-V{aDR$1U9deO9M3!HPjI-C}`@*&n47C75hN4*8kKB!}f1x}gN z(PV)upJrXF1rCL#k1h**TpFrr-4^(17Wi5Ve7ps|!2-vCq>n8YxOK6z%>uWlu{EvF z0#{?q>g^Wz=@$GQ7PvLO?y|towBYZxz|XS44_n}8Ti{15@N+EiqZW9n1%Au|=bWgH zqy>JS0wO(bflsu+Pgvk;jW4Rr_{%Xr--2IgfnQ*O7hB*LTHvJ?xNd>#7WhRLc)0~W z*#fV!z&ZD+quK&@C?Ha&1zu)>8y5Jb7I?h{UT%RevB0NT;707N!sG#XVsa7OF8TH> zxK`|7;ep|+Z@698hRZxS+b?t?$8swvQ^$sJl+9(CuAMp}$}?G}OQ-gV@|7&pl~X%J z`7)O2!l^z{p3E{`H?>8S&tsV`n_4T%XRyp+OLd9zIF{+6sU}g*W0|g*su$%?ZbNw- z%T7^#pXJk7t`g-pS*8o7bWwhdWx8IfSd?F4nJ$;oMEO~k>1wItp8-(z1j}@>)G<-s z&oW&rbwreRvrLyt?G@#pu}oJ=?GWW3vCPYxRG%n+k7c@4YKtg;n`OFEYON@Ljb*w} zs!No=!g49gO``lImgzF7dQrZYWx7hrDas+1C$d~6%6GF&*GTE2+{`jvB2_HPx3f%F zNNJ+Hh-JD!>iA#T{~K7=Sw1Gpb6KXzr;dp7OqOZtslB3nCCfDN)DBU;jAfd3s!xw~e_<=8iGv z5O^Ns&SS2dIgWq7ACe6mMp3pq9_>n4=>i2i@hK>pP)xpp5gORe-1E#GXYL8+oC}fT z_z!GhZYOicn0tV^@|%$R9&=sHZDVc+bDNku!CVh>&U)nTWo`>|UCbS0u7$a(n~__} zTsL!zm^;Fp!JNJbxoeqgVs1KfJD9tSxf9Ik%sCe$cQ$hym>bXBQRecPD{nyV1a;rd z+&j!2X6|+7N^e2#CFWY0JHp&9<_#JguS{x=epH(i>u+5#m2g~45y~m#s3;_a8$)Tj_K|VZin5q_JnQ48Hsxe2Yw7f zIbKUY86I}UzF4T)HyuV$uIpW2vi71pBkp#TF6e!%WUUU+EhPr{=*FPiQBFfdTEf)R z8*w-dpW9JI{Awf7;3!=?Q?vIh0;jdB9Cq7^QUdiv#8EQvNV?7B$87UDG}#9(WKd%4 zJ2rkn@BL#+w2QPy$s28m@cI}F#$eARr_P+Fxe^5q*R0y&Xi?o@!3AhYi?=z7hl-4C zb%~zGOZS%L)x`@gkgcCrml%J+Zc@eH8CVOo$v(HD{n+F1x&wuEv4aJ!nk&|PCxP~2 zCx#>E8rvvxwGrQXkWCJqtt5%9f<)1=NUF3oVcEdAfx{evu`qBDRmG3&`{crpRyn2{ zzGo2`4mZHf69q@eu-uaF~O8U1$NFy<41t_Jg z_n~?hdpR^M20cM&jEp#!L-@f0W1ZW92m*$vb=A}s+BZkwmV($=caUaq$DOXFt~*_K zxf%~-m`Jh-nvJhwUmtetKods%Nl*Oo1@T|H6Aw6aFE+`xI-UaDzO%miCq9CGuk@Z1(lv13Z2v$7}uG)eSZKzj#6Xnf{}) zgWp)JI`}9CBa!cl7dR4Exf0_Y@%Q7$sl|`iKN~qcT|g9#*J?vk(g2nw#y;^s!uVrf z_=GDy-jO&{4#3B##Q2<}MQ(H_@)HYSGbN7x@+CsG6Volb(DKlfn*EV7BQc=>;N91P zS3kQm&;;b<79a@Sr_MYB+KJ8iaFMQQkrD&Cu8wuXXEsyMsT5{&S8$S}5aS@)jh-5t z^Q^!vjlb02Cma4A0CG$ZpTLmM`7ePm&hQ;DY-4_cg5mpAG@jh>5j;9RCJvY|UIhMV zZJn>gVeEUYxc|6hw-~j_)!-zq*pjc4CNbd_!RI9-{)(~hj}u_ay#=S>x6gknj*XM7(k0S4wr;R!lMy56d3pM;uK9ufQjzrdR(3-2^RJ^I$%yi>$~W zx8zT#JRGqwwp&{Zv^5t(;7QOGxFGo10Ai+!nbbu%GkCcfyo`j$QSIq{*k+AjIVfEN zAV=5Q5L4s7^2GfP!?lMj-2g3hJ;tmnaSDUnnGAi$P?puJ9FvA>8KDsA;AqgEsPxz$ zN(w|LFmcrRP7x@_fD%h${Q)#xfPs0x2$E89mtn|6m66ywiTd^=Bu97rvjP1!rN$Y5 zX22e_)x{1KFly2P3f(oks3ZI4n}sc*GweyZ2YsmWB+w^!0==nS|MqHc#_$NUNz6=s z2}~JrFA%Dmra}aMQ4cmKeLV?Y;uC2C3%F{@jXAnuu zGOcT8+9E}3_lS@M^793S$5EK5N#2UK4BrXE{t%*fGRac>0NrY#;aiFUq(dk6Y@;P7 zFB7#d8vA}f~%Gqka8OToRour*^y0&&~x(KQE&_sh_7w06Dvi%eR{00ZRjS{7rW}iGc6=XtqO6 zn_mU7m^Ndx%h8EHvWe8*wM5l6WQwXlUb%Rrz-E`$x6L7>6W2((*Z~<-vmT_Yg!N3d*cot;iF9zrRcB=bK=V+=tFc)jW)5XoCi3f*+#_M$E|-E2)3C znMzx`yHvj<50G8~p*n1E?bwMi_J6q-p!nWl$Kzc-r}hX5>2Q5WQ@5Zh6Ef~3$UY!u z;0$$V7Ar&)T=k38@4muJX z80T{P&u3S*#AnxM(tdw*+DImCVs>SG_7*GUlS3V&G&$$*lg$`~?37G01I-!n*+;DH z{bCfdr*EKg&_P;ol*^0n1G1YJ&2oA135+W_4aOoT?@N!^*R*#c2^|;dI}6 zH`8f%r49Q#@1TYgR^m$x#)j{(^2u>V@7B}vorMqtGZUa+Er5eOBd3k6jt!8-6@LK> zwbfT-Q{^eD1c+*GE{;rqW4aT21o6-*E+KU6MBeHvvng%al*OPlTjiz5P@$SVV<+-g zBhJAF69Jm;P5;e57N=^5%Pi(8F7`{yMw1U8N zU4cmrs&Y{2lrQ#4-pN#HS2FhH)Wt05V!W})M4W$kg4+aK~cR$(bt4sGf7hxS2GBg1BnB(^?(R7bxX9Np-_5_CYL zVH9C}P<2FBEkRX-tjbeWhhTRn=ZurOPStdYDV33a2$^g0l!O_F9jl8)9`2 zT?S)_oF6+;u!}tGwO|Gr^`SGAFk;|E+p@o=Oai>B1_lr*PGIrj zM$uWjet6B1p%;O+#0G&48w3UV(i-$EG6~(S(pJAl?LqsK5^`lN6#ke{ul>s}72p!+ z8tSJ4Hk5i2MXC641B(bf2T)UM+;9W$ERCVje@6 zOME)#4l3?;0|vPS@TD-wh7qNqdo(XB z&v*?-{iT)Gg~i>#eN@kZ6qM#gQ7P?bg#H9jtJ0)@!UY-bz!TvtLt|DwqRoF+X+`t? zuazdrSX}afnQQRo03r4R1}rcUMI90P^;3w z*P^g&-~6Ab>~FZ|Z(T}d_7V3q64O60;?ucc`upw)OOx)&$&BuqQ)$vYmjIpaX;B)? z59XzhxTjLuig5$ORLz}#!sHNtHTnHNLPc14h@G@noF6ab&RQWZZ{3bA8+X;3#Du^L zF|<=%Q;(gsO<0E=8uPGI*W`5tHrSF)xi{F3Vqmzz)>;>To_isN!Go=K8^Vj zVExB}O`6zUNah2I%aC)h57~+uT2~gxU*k1}!fl5e+5lfb!B948` z;b;ZJbZh@HpySH_4Pf zX%{ZsPS}J*o55`N)oF=b#4cRj;Nz4m_Jsm%O-oZ%xjbbVog5SbD$LaSm>nYi9c|lRJ$Y(d-pZV z3+$V}z&`A8=x`V5f{7aXlHF|U|uaqJ7cyYULJr~}+!fSR!9i6BxJ ze_H5cLHrHF_jq0WVBNmg3vcRmTuO7?_ZoD$F(!65dml#1+al8)3wp<&?dk1_@z#hZ z{+j6V45{SkH1znW?D501RgYgnC3>81_V{uXr4D0Qm3rcTMBP28bHxurY4#pYku)Mc z$h-TxW+!f4P+ziz$gK-}uVc&~MkThyFUPhFa>lkB;yr($wopahCsjd#sNx>uNmbD2 z(BensQ2{#SnLrq z!9EGXhukv8bzL1gMj*BC^z=R|Mgwc;Ds)l}@1T&V6^`SK=g|{ZUn0olj(cKbKJ{4_-&nvDTj#iuTUfKWV9o2XFKXKAD%Ikc zVqs98{DQjPh5~s7lb9C260IAteGqkjK~1f;<}H_fCtJg%_y!wy-wXp=)m4l&^+rB7 zB@evHD2AEl(At7NEVx~4>tVu?%POcqWIDQW4&kDQf38@Zu2 zew??vJltIr4PFUshD{iS+@9$#yc2y)%n4SjP_h{^8S!_Me?mWG47mzR653*iQA3INPojY3!Wa5inSk8_5S{9Ye@ydkdjCP=qh~zORFk{c zHT(#JwZTq*CWho?U=LkuDnr28!X@Y^b-}H(yJuitng%L4ZC67n$qzv#6>u%a-vwiH z&ssj-zVTLwYxo{^RG}5uE_jjL*xb#WXzo|PMKFFqOc_*jDe&wMT_!v4w(pEM8gZ7+ zf-&XHf~6~hRW(z~#nIu!!ZW~=NwpLJvVS9fELR|@oUpaZv1tBv@=K45|w{ z5Wy<>otK2G(UiLr+@z?cEy`}4UbEl6aDPp5^*C{hHsykHpxb*v!nVH$RUj%ojz#QI zDA974n9q}}AC6$PGUhCZfz@F5*bfZ*WqXIt;>7sOo3Udy;5hq?oLIXzjD6$j@S-QTNJz{3Lx;~6ND`La8H6>EH_rI*HY(@zp z1c?syIDSq%%vlXIDiAVyXikx(@ACk(4~g0K4uWuic0iCKF>Ur(`ZXQ zM(iij*kuy?W?~45W=@#T`~-85Y^jYT_*I&qToPPNB#rL;&)cGP$mJoI_c!&>19s-6YRU#yQV(aOMf!d**uVHsvoDkEw@}jW;UwArCp02^ zJfG}ePP518o6=v9mc9hJeDnjpB%%QZYv}ezj{T2lpx2>G9(g@YGsV8M-Zt}Q;k3@Y znXbI(IcCJMnFDFxJoG6-DIO<6jKGZ2ry=ZNPRC@ngW0W)`;pjpwqXO|)8VK&lrN#X zvSaObta~GlC9!vG2$c5$w|Abc=7ZggRd&x2&~FFK@cov|8Aq{&bJXa)&vC2}`S`0+ zQS+Y{bBHM5nMx9iX}!^{HQ)zc*cX`aR3&)9&rDg18zIl_;N^)AC+7l9^89!LS!@(j4Adf6Er_2G zR~i_LhU5&Oa=Am6Um(khG)pI0jx|}n`$O4YIwMyJ^~R2K+5S-WW} zDi8%9ATAEqV>Ac2#41tR!!u%V1FpWIMHK8iaeqGcT0U0#^{_V@k$c1a!WKR8J&v^~ z%O_;yFrNt(tr~c{*=aiIkDkFY1}meQhoz}+{y97k_grZHkKqUYa*{^)*ovZjvqLlYU6*B3Y?2kTgBbN)6u3RYXR9%DIOBwpiOyape$YEK@C+fGYy#u z2o{$07%r?3utG*)pkBEG2CN*#EwZTN(VtSFt^&B&=#@(?u9UGMWj@vwFL8L_2}ePI zO%$<0qi2ZVf)KWra6CuxU$|G&v$xh>``=jF&w4=MMaIoq>M-oxdm^ zA`UhrZ}^K^bG!^`*=^ej`@r$EnpQlGK5P_0Cb879%Kp%cXpBO*@u1QwSL~oIe%NJy z=wQte`%U|64t((r+-Vht8Gi{%dKriYmSby?Ccg=<(d4E)LNd_E#^fD;0!*Hl%kHCV z9vv!iZ}1}yAFv6@H+BCNS|1;OKxkboOE9*=ZK7Ag^VeMlAH5XZWZ=`A;G+|Sahc<* zqZiUPKSa*-j@X=5&@mbsBv^(1yM)hyH-oCSX5rB7Sa{C@7WZ`#0&(XoF}u{j62CNg zA2^}*eAcpJu%MJg;wi6npK@Ij-B10vYwj29Ru|Rz-ZJ*RkuNTohkk%7$yGLbDBO|p zz`l7to=3(-lyqqK1`H3EvTIS7sv8Sc^$54c{)jofr{jeI6nHDoB3`ICfyWg1U|fA_ z5R1f-m|$39!Z&|~@s;raa`b_NeNz#zajD0!AY`?Kg|&e3=`@2^j_{6p%^nvfJ>s8? z450Knv>D1s9C?)zJ4B}2ARpY zk;DaKeMaEOK8U7;IAG_3*;`(b;IJm;*AR zNhyd#H0c9EMl|{CNs1=Jz9ppm31D71uafaZ`aOaMp5usQ29%{Dpm0;@e;!ag@lTYZ zl78H-=-Df#W13Ziz4i$1u{5YooeQg^m*YX@qI_wfrghSJ@00Q893ZiWc&b1+Z%tAz zzhiUWyhJxc(W>OYaTSVghFWAOIz9f1B^afium&UCG%7)M+R*(05M{`of$Cr>_MSs4B*kXa+ah|^ma0^j`w z^oV=BH9ca*V()dsZ7!DuOgi;$L%Xh3g=otV6vQD;fJQoSB&uWt|1%H~ zjjgVUzTml>D$DFXaG366y5?k1NZ0%!v?N>;Q^{J$pu9+gFnAGyWyY*5o#>yNmFYxM zup0@sT1oM)f|*wEkN-$L2hJu@2WbTg{%|eOr0QRp`!W z-ti>%9J8isImcrA(f-ggY432wlNsLe8O?YU@5mrCy@R`?G1wby6qiD)%`Jit;UdCs z(tc7Tgg5tpccd-evIPF{+sUJP%WMu|V$5T#{fE3|yy-2T_y9nr}eg?K?4lVtbWala}pO4%}Z3%7Hr{jmhDpLu;uU zu^TV`?C=BrHK6tH0pZj~`GEZ~qqpMINjk=^?9WU9Px2w;hoVZ@g@@Yv~F)t)JD zxZ;1Ui+^bB`)ht({5Q!P(W0^b?Z~8QzvbWM!mqK+cgNp#4VS!()gJz4aVYerfz>gd z?#CZg@d^G?4|2K(VNq;1RAJM#8h>^uj`ZI{!nnI2hk+~2$hnX5HAd#&Jq{J(?8X7>_AShtgO6KilplmD@an$cT?!$&h~)b z73y3T3WURYu%o3j)b5Q0J3A^(@ipMzI)c9<5DKGq6inbP7{O}~w0DM9>f$XHI$uwL zw|WG9VQ>Xr3-RW6hI|2CDKyflw|cwq+73Oi0;gaLTARDK-{yddsoI~~jPjzDCdd%hso%R4$FdTYSDBG|T4j|A{~5kJ&1#pDEeLgcdu z60Zp8k=B4dx$mkS$@=LYgEhvyK)Y;DNkLXPIMj&S-*d7?+$6o6Ct=_hvUti&Ei<*jU4n*z= zK<8E9;MdFil^hxnFAIv1V0WepwX}P?gYD6F)3PNuUGEBn#LzUi1teD;HUuGqVGLPE zd89MqZBzY47fsoxqM<33WTp5l4n)MrE$2|)8whnmQ*CWJUg{zmZ_ZQ$ks_^ZLkcy* z=OlS5^$gZtQ_9xhvQ`X1q!oG-oPw|kdMlfXMvB7t^2*xuC^^hIDtluL+8 zgAu&Kk&|@+<*WX=%yyxJX{L(&!LS!<3+t+Lm3jmFg#YA<*UNaLZ4tdW& z^?N!)%i+-X1YleUWbNLLm8Rc}&S!BTpjUJY1_&KNMn{O95#MO=8U8}+81cIb1aV!j z?eLS(>iN(kVo6uP7i#4*JqB>Zjk7`sc`7~67m<i1_zV+sm!npYxdQm!tqU-SX7g$*+70?I6+ zD_%_`cp`3HGaW+C6YpnIfmlvRW*8MAkYv|PuV@a^fLiEI!fdU2>-al-(D8+}4T$s8 z8|Qgkix=0;)7v}!0S0`1#dOFA-}W(h<4sXfOmHIPL%w$EunzBS3L+NX3zdu668;$q zN`DjrdiBZXoYN>m!(pc=Hw~1&o3>1j`J0v4$CO1ana_GPvQXdcf;z75w045xi}SKHi0S zUN{V79a%#7q2pl3R16$6=hdSf((6s876*|d>FUTBzxF813gb5tE*MVXJeVx-s|FXg`z)=H120~*Mgb8{fz%PHgy~DCwKS=F+qjTeDHl-a7MNg8;c5k8k^u!x!?%RU zqPu*P8JCP~4Xii5W}iS88^IJLSc~ZZylWM1U&Qf~IlYtWB6ByOK?y!d%l* zz3F*Djpsv5#NG}dVNDx-`l$RsuWfy{;xSk1xyem~Vw0WIT=$1M( zIR`K(W=IBKG53_UMJ0Dond1{|N0S&K8au+D9H753Tv_9lZmX;ft;-b$CAY*+HR)n7 z!`Xv*()cr)S%?2*3Mn`3gdS&U7Q;&0R|@$%c6AbC$=5O}7S`+$E*jf(ITvu8(!DAR z%N8@+%cU1YEWEvPg!*Ki{H^}U;gs!3JgjTGVUfCix5_M6nKqeG`WV4yPtr8$0_oBP z(wc=Vdb#G4Pgm@?l?niCVzo%kw05iW>7{yuv3N$ZDIFf1ssBnaM8q$&nXiZ$I=YUk*+nD%YIz> zrY~)?*2?9}=S-WT&(zB*r?uz{<_gOB@I}i7-J->dMRV5WWqK-F4kJ@bN^di_iR8wX zSW!~>IMU-Rwmx`0gFwQKfl7T|YiFmp>O~;Ma#s&~v4xmsZq6ZChhw$`9agcpZp+&4 zP>UgxFIFlIFop^&wdEQ`)vE>dI8E#%;4)pVbJC08oJy+vdshsyn`&IGi?47X(9YE} z=67trskNkOnpt)rEeuSb%G)jU-%>K=45O+Tw<9C|4KVT?V?3DEgJDQT&uQW z_ankBTd_?>W+O8w^ob=|Ev}!yL(Jv6{yDy0H*MS|Syw24Js2!95hQ7fX0*19J1)3J z_(HfS*XJE_^#;y-`z~i1b1GGVUEqk(HuamfBddnny(_sC#%k4EH>JC)b)rL|dxBwX z^f5Gdz=^ro7$-_A7+}lG!c$~X7waNQfx+Uoi$pT7d-XX`(m2hJsk1qNR~y%Hbu@udi6f`;0H>!0E?5wjx zFcteFRGK-?oWaLw89NSQO)oCs$||c`#%UER@E^ZhwTz2bb59=O4Ws9wtw*~sHw3U8 zBcx)1R?)3hc(sa1BQh-yuDKMzpLGTj@Gr$}KEFDhQW|?4#_Q&Ye&Ajs-{Tx{qMM2R5DW6rP~cHD-O3pqXoOBtJesvwFwyu=mV=fM4H!TYl}Cf0N&z!DjP;;o-+Q)BZjAwiM+5 za9mDyLQih!s{qe3aSW)By#HNPNV)mSm92pPhRXbV?d-TX|9_Q?+K}rskdws&;HTqR z0(0m9(KH8s2LUeyoX@apH*XyC#*_#1JY;F4ETQtb zeCEMg94dV~tNbmqV!R1g@A1d8t>RGc-T%vH!`wdCn(~}Dk9-5BdaNw-COMD3JSWbY zW-gz!Uz_}?10LcjJEZ)xFzb6Hmi0eZ(wKQq&!A_>31 zOe@XwS~Fc}rgxcXhncQ6(@kdjZ)W#nZ9GDpP6Zq-E7}XE6wy;GhJw= zcbRF2nXWd|O=kLUX8NF+_M7QbX8MYmzGJ4JnQ2k6*}j=pn(4J>N~O^Rub($>re2P( zRo(kiio z5vX*{t*eN5mzkwy9ns3>Xb_+B!517VS;7sWR;|*%vIG2N8VSi7b5hMHG@>pPX!DZ5 z%yqRzv`Xyy;vB)PUaeAmpQ19<$%`|sGSJ%C62fj~W2+yus-#u&PHq?t%H(bzD#6p+ z9`vEXPO!nLQt+01@NotZVFw-8{Z!chgJU9iQ18m0v^*zDI7|TNA?sm=i8Sb97q1pDj3O%9JlwZ^t1Dv0zTVh$hd1gvgzHZ{17ofwcnKI1cdQVB$`tu z>2G1Fcw>UKg~*(SpQ7)}bE3rfC=zX(*&yR4`>yC!e7Y4dhCW5F;%v1U=u}(`x0hXh4!E>ECBK^2)pzW;p65Xv9*SP|>t(>K?H9H-5lt&>6-gRjmPY6mpWmax zO0U*c#U_2d*?uniH?!!Qf=vRoDJUsaJF;}L{~SjJaa8};n)IzEJ?pK9ZY?1H7yKw< zRTf;)PtAg>?x+-x9;Vy2qHZ~|mXK%513$d}d8{`)PtvGWnD?&v{Z!J|tH2q_r|1lBoGF6JC&B&u7BNq}TD8 z@KZE34`sr~YHEJTgcoXR-pGWXs;T)P6FyE;aXu4%^7qA9pO46|;&LYbg!K0_GvT9r zM@;asBQ83vs3M<_D52t>wK5-HDpT<+6MhE1Z`ou8iG03xCgRR$@Djw6(cov{dzYiZ z&xZex20uqr{;gS#e9UsnZ!KWx?OaXyVKTP0;$X+Py>IpQ~*#U?bAouSAezN>O2AuNm$g-<_fRCoPBZ7}z<7)?asCnTi z@-~cDUsk_fHR0P$xSD_8HQ^6r!9O+OJF@tUhXToeR~Gy{0Wa13CLBd^l$rR4v+((6 z$Kz2K8@uI+e41pH*b_#)u^^5N91@!FIF z{$0W6WPkZN;AfCk*1_+-jRt=%2RxYr{vP0?eOK{B4*Wb!KKdyBI|1<1wUKzG#+~1} z9Zk+Mfj{E!3V&)2{24jmHwyR!jo%OAA@;(A~z=o{(J#HdEWE@t_u#Cr=}cy!a3mUbHKkP;II=j-l{nK zzjEO7MJ%J)?L#@>2XerF1^8&+8~uF_{5JtF9>u>t68ICed1pF>g2Wy;as_Z4`fv94 zPfrDWH2KfZ0iTuw&Q}YJ#%BTGqs5Kea^No)@Ch0}_r)VF&YFf7y^YGhCkMP2aO(4z z8Mn8Xe7@Y?RL!G>T2O zMsKuRQ#VijmDgM~y+&h2W6T9OW(CS^+*ETM$yS=vZn(FGSH4~lps2lMp41v?lmMlEcQu-l(tqu1H8_oNK zTBG~6g{}p4^U!hbWj1>GM40#tYz9EwAk`YL_uMqsHLqt-A?1Jai6i1uS3PO@9_R{bgVIVcpCo z#Mf_4E0H5+-jc*ugmG&({h8fND)C+1Oi*K^Kit`fr^)>w6QBOY2D15C-AqgxZ>KL4 zroLH>XARIUzfY__Im}P?cCF09mRgoy{>`eAU;51isxI-qKUgE-cZ%g_iAVdQviKNr zCJR2AkO|=f<(UxtEf2U`KD&&Ei`bC-G;t=b_*%2LZ!N!AoLvhU`B7zPb!4Pl@BnYC zd7E5*fmnXeIFpu}{GDx?F!OWI=I4+z>#UzO#@{i8vunktl6~Q*R9E^d(?X5F*YFu; yex^E&CU*C;KG!_LbB00{LkK4hc8pZ=L&{knycX?I6Y`7BnYc1M2oyd-q5U7S2W?LP literal 0 HcmV?d00001 diff --git a/MOM_code/bin/prepare_pubrel.csh b/MOM_code/bin/prepare_pubrel.csh new file mode 100755 index 0000000..73fadab --- /dev/null +++ b/MOM_code/bin/prepare_pubrel.csh @@ -0,0 +1,119 @@ +#!/bin/csh +# +#These are the notes on how to make the MOM4p1 public release. +#The notes are intended only for the GFDL people responsible for making the MOM4p1 public release. +# +set FMS_RELEASE=tikal +set MOM_RELEASE=tikal +set PUB_RELEASE=mom5_pubrel_December2013 +mkdir src +cd src + +#check outs +cvs co -r $MOM_RELEASE mom5 +cvs co -r $FMS_RELEASE shared ocean_shared +cvs co -r $FMS_RELEASE ice_sis ice_param +cvs co -r $FMS_RELEASE land_lad land_null land_param land_lad2 +cvs co -r $FMS_RELEASE atmos_param_am3 +cvs co -r $FMS_RELEASE atmos_bgrid atmos_coupled atmos_ebm atmos_fv_dynamics +cvs co -r $FMS_RELEASE atmos_null atmos_shared atmos_spectral +cvs co -r $FMS_RELEASE coupler + +cvs co -r $FMS_RELEASE postprocessing preprocessing tools + +#cut and nullify some stuff +\rm -rf atmos_param/qe_moist_convection atmos_param/two_stream_gray_rad atmos_param/shallow_physics +\rm -rf atmos_param/lin_cloud_microphys/* atmos_param/clubb/* +cvs co -r nullify_rab_nnz atmos_param/lin_cloud_microphys/lin_cloud_microphys.F90 atmos_param/clubb/CLUBB_driver_SCM.F90 atmos_param/clubb/MG_microp_3D.F90 + +#The following file is not needed +\rm -rf mom5/drivers/coupler_types.* + +\rm -rf tools/xmlDoc tools/fremetar tools/fbrowser + + +cvs up -r mom5_pubrel_dec2013_nnz mom5/doc +mv mom5/doc ../ + +#No pdf,ps,html +find . -name '*.pdf' -exec rm -f {} \; +find . -name '*.ps' -exec rm -f {} \; +find . -name '*.html' -exec rm -f {} \; + +#bin/ and exp/ + +cvs co -r mom5_pubrel_dec2013_nnz mom5/utils/ +mv mom5/utils/bin ../ +mv mom5/utils/exp ../ +\rm -rf mom5/utils + +#Date tag (sticky) the whole thing +#cvs tag $(PUB_RELEASE)_nnz * + +exit +#The following cleanups is done after tagging. +#No www.gfdl.noaa.gov +foreach file ( `grep -l -r noaa.gov .` ) +foreach? sed '/.*www.*.noaa.gov.*/d' -i $file +foreach? end + +#No work emails +foreach file ( `grep -l -r @noaa.gov .`) +foreach? sed 's/@noaa.gov/@no.gov/g' -i $file +foreach? end + +foreach file ( `grep -l -r @gfdl.noaa.gov .`) +foreach? sed 's/@gfdl.noaa.gov/@no.gov/g' -i $file +foreach? end + +foreach file ( `grep -l -r EMAIL .`) +sed 's/EMAIL=.*.gov/EMAIL="GFDL.Climate.Model.Info@noaa.gov/g' -i $file +end + +foreach file ( `grep -l -r @no.gov .` ) +foreach? sed 's/@.*no.gov//g' -i $file +foreach? end + +exit + +#update the htmls for some major files +#The following is too big to be included +cvs co -r xmlDoc_clean_sdu tools/xmlDoc + + +setenv XMLDOC_ROOT ${PWD}/tools/xmlDoc + +foreach file ( coupler shared/diag_manager shared/mpp shared/time_manager shared/data_override preprocessing shared/field_manager mom5 ) +${PWD}/tools/xmlDoc/bin/xmlDoc --dir $file +end + +#GNUize all F90 and c files +#Some files are checked in without write permission +#chmod -R +w . +#/home/nnz/bin/GNULicense.pl -f --dir=. --recursive +#This will touch ALL code, so you have to test, test, test! +# cvs ci or not ci , I wouldn't do it GNU!! + +# +#tar up +# +cd ../ + + +tar cvf $PUB_RELEASE.tar $PUB_RELEASE/src +tar rvf $PUB_RELEASE.tar $PUB_RELEASE/bin +tar rvf $PUB_RELEASE.tar $PUB_RELEASE/exp +gzip $PUB_RELEASE.tar + +#Documentation +#cvs co -r $MOM_RELEASE mom5/doc +#cd mom5/doc +##Work on the doc/README check it in and move it up +##Work on the doc/quickstart_guide.xml and MOM_practice.xml +##Generate the html and pdf from xml +#/home/nnz/bin/mkdocbk quickstart_guide.xml +#/home/nnz/bin/mkdocbk MOM_practice.xml +#Run Seth's tool to produce .html files for time_manager.html field_manager.html diag_manager.html mpp.html mpp_io.html coupler_main.html +#and move them in doc/ +#cvs ci README quickstart_guide.xml quickstart_guide.html MOM_practice.xml MOM_practice.html time_manager.html field_manager.html diag_manager.html mpp.html mpp_io.html coupler_main.html +#mv README ../ diff --git a/MOM_code/bin/time_stamp.csh b/MOM_code/bin/time_stamp.csh new file mode 100755 index 0000000..4843718 --- /dev/null +++ b/MOM_code/bin/time_stamp.csh @@ -0,0 +1,122 @@ +#!/bin/csh -f +unalias * + +set argv = (`getopt Hbehmsf:t: $*`) + +#----------------------------------------------------------------------- + + set sep = + set format = standard + + set rec = tail + set help = 0 + + set hours = 0 + set minutes = 0 + set seconds = 0 + +#----------------------------------------------------------------------- + +while ("$argv[1]" != "--") + switch ($argv[1]) + case -H: + set help = 1; breaksw + case -b: + set rec = 2; breaksw + case -e: + set rec = 1; breaksw + case -h: + set hours = 1; breaksw + case -m: + set hours = 1; set minutes = 1; breaksw + case -s: + set hours = 1; set minutes = 1; set seconds = 1; breaksw + case -f: + set format = $argv[2]; shift argv; breaksw + case -t: + set sep = $argv[2]; shift argv; breaksw + endsw + shift argv +end +shift argv + +# --- help output --- + + if ( $help ) then + cat << END + time_stamp.csh [ -behms -f format -t separator ] + + -H help (no execution) + -b beginning date + -e ending date (default) + -h hours + -m hours,minutes + -s hours,minutes,seconds + -f format=standard(default),european,digital + -t separator (default=blank) + +END + exit + endif + +# --- check format --- + + if ( $format != "standard" && \ + $format != "european" && $format != "digital" ) then + echo ERROR invalid format + exit (4) + endif + + set hsep = $sep + if ( $format == "standard" || $format == "european" ) set hsep = h + +#----------------------------------------------------------------------- + + if ( -e time_stamp.out ) then + set time_stamp = `tail -$rec time_stamp.out` + + set month_name = `echo $time_stamp[7] | tr "[A-Z]" "[a-z]"` + set month_num = `printf "%.2d" $time_stamp[2]` + +# ---- day can have more than 2 digits ---- + + set day_num = `printf "%.2d" $time_stamp[3]` + if ( $month_name == "day" && $format == "standard" ) \ + set day_num = `printf "%.4d" $time_stamp[3]` + +# ---- hours,min,sec can have only 2 digits ---- + + set hour_num = `printf "%.2d" $time_stamp[4]` + set min_num = `printf "%.2d" $time_stamp[5]` + set sec_num = `printf "%.2d" $time_stamp[6]` + +# ---- pad ISO years to 4 digits ---- + if ( $format == "digital" ) then + set year = `printf %.4d $time_stamp[1]` # will work even if year>9999 + endif + +# ---- create date label ---- + + set date_name + + if ( $format == "standard" ) then + if ( $month_name != "day" ) set date_name = $time_stamp[1] + set date_name = $date_name$month_name$day_num + else if ( $format == "european" ) then + set date_name = $day_num$month_name$time_stamp[1] + else if ( $format == "digital" ) then + set date_name = $year$sep$month_num$sep$day_num + endif + + if ( $hours ) set date_name = $date_name$hsep$hour_num + if ( $minutes ) set date_name = $date_name$sep$min_num + if ( $seconds ) set date_name = $date_name$sep$sec_num + + else +# --- dummy values --- + set month_name = "xxx" + set date_name = "no_time_stamp" + endif + + echo $date_name + diff --git a/MOM_code/build b/MOM_code/build new file mode 100755 index 0000000..bacc8b4 --- /dev/null +++ b/MOM_code/build @@ -0,0 +1,15 @@ +#!/bin/csh + + +# hack weil pkg-config nicht funktioniert, variable nicht gesetzt +# hier: netcdf-cxx4.pc netcdf-fortran.pc netcdf.pc +#setenv PKG_CONFIG_PATH '/sw/dataformats/netcdf/4.6.1/skl/intel.18.0.3/lib/pkgconfig' +#setenv PKG_CONFIG_PATH '/scratch/usr/mvkthne2/libs/netcdf/4.6.1/skl/intel.18.0.3/lib/pkgconfig' +# hier: ompi-c.pc ompi-cxx.pc ompi-f77.pc ompi-f90.pc ompi-fort.pc ompi.pc orte.pc +#setenv PKG_CONFIG_PATH ${PKG_CONFIG_PATH}:/sw/comm/openmpi/3.1.2/skl/intel/lib/pkgconfig + +cp ERGOM/pocNP_Kcdom/generic_ERGOM.F90 src/ocean_shared/generic_tracers/generic_ERGOM.F90 +cd exp/ +./MOM_compile.csh +cd ../.. + diff --git a/MOM_code/doc/web/config.json b/MOM_code/doc/web/config.json new file mode 100644 index 0000000..763ae1b --- /dev/null +++ b/MOM_code/doc/web/config.json @@ -0,0 +1,23 @@ +{ + "project_heading": "Modular Ocean Model (MOM)", + "project_title": "MOM", + "tags": [{"tag": "5.0.2", "commit": "8e524daedf27c1aaa35b4069efb38abc7575b4b5"}, + {"tag": "5.0.1", "commit": "2534bdc3b4bce6d08424174abda7b1ab6be0c29d"}, + {"tag": "5.0.1-beta0", "commit": "09cae4e1bd838efcb862d45bfc61ff074f849f9b"}, + {"tag": "5.0.0", "commit": "305729e4f67c239802d38eb2446c3cee8fc5276a"}, + {"tag": "5.0.0-beta0", "commit": "7ffd65ae4dd6a4a6c06ebff910326c1bc35c8f01"} + ], + "project_desc": "MOM is a numerical ocean model based on the hydrostatic primitive equations. MOM development is funded by NOAA and led by scientists at NOAA/GFDL in collaboration with scientists worldwide. Version 5 of MOM (MOM5) is an open source project released under the GPL license.", + "project_about": "The Modular Ocean Model (MOM) is a hydrostatic generalized level coordinate numerical ocean code with mass conserving non-Boussinesq or volume conserving Boussinesq kinematics. The model equations are discretized with generalized horizontal coordinates on the sphere using either an Arakawa B-grid or C-grid. MOM has a broad suite of physical parameterizations, diagnostic features, test cases, and documentation. It has been utilized for research and operations from the coasts to the globe. MOM is institutionally sanctioned by NOAA’s Geophysical Fluid Dynamics Laboratory (GFDL), where development is centered. Additional development and use occurs through hundreds of international scientists and engineers comprising the MOM community. MOM is free software distributed under GPLv2 and it is part of an open source community.", + "google_groups": "mom-users", + "docs": [{"file": "quickstart", "title": "Quickstart"}, + {"file": "user_guide", "title": "User Guide"}], + "pdfs": [{"file": "MOM5_elements", "title": "Elements of MOM 5"}, + {"file": "MOM4_guide", "title": "MOM 4 Technical Guide"}, + {"file": "testcase_atl_regional", "title": "Test Case: Atlantic"}, + {"file": "testcase_baltic", "title": "Test Case: Baltic"}, + {"file": "testcase_ICCM", "title": "Test Case: ICCM"}, + {"file": "testcase_ocean_cpld", "title": "Test Case: Coupled Ocean"}, + {"file": "testcase_ocean_solo", "title": "Test Case: Solo Ocean"} + ] +} diff --git a/MOM_code/doc/web/quickstart.md b/MOM_code/doc/web/quickstart.md new file mode 100644 index 0000000..3e95e72 --- /dev/null +++ b/MOM_code/doc/web/quickstart.md @@ -0,0 +1,97 @@ +# MOM Quickstart Guide + +Brief instructions for running MOM5 experiments + +Author: Niki Zadeh (Niki.Zadeh@@noaa.gov) + + +## Where to start? + +A good place to start is the online [User Guide](http://www.mom-ocean.org/web/docs/project/user_guide), which gives full details on all the steps involved in running a complete experiment. + +This document gives a short outline of how to get a very basic example experiment running. + +## How to get the source code and scripts + +You can access the source code by following these [download instructions](http://www.mom-ocean.org/web/downloads) + +In the sections below, `TEST_CASE` is a generic name referring to the name of a specific experiment you are working on. After you clone the repository from github you will have a directory called `mom/` in your working directory, which will be referred to as `$root_dir` in this guide. + +## How to compile and run the MOM tests + +MOM requires that NetCDF and MPI libraries be installed on users' platform. + +Ensure that you have the right environment variable for your platform in the file `bin/environs.PLATFORM_ID`. `PLATFORM_ID` could be any string that identifies your platform. The file `bin/environs.PLATFORM_ID` gets sourced at the beginning of all compile and run scripts and is there to make sure all compile and run time library paths are found. + +There are a few types of test models provided for this release all using the GFDL shared infrastructure (FMS) but have different FMS component models for atmosphere and/or land. +We refer to these types as `MODEL_TYPE` in this guide: + + +* `MOM_solo`: stand alone MOM ocean model. +* `MOM_SIS`: MOM coupled with GFDL ice model (SIS) besides null versions of atmosphere and land models. +* `EBM`: `MOM_SIS` coupled with `land_lad` and energy balanced atmosphere model +* `ICCM`: `MOM_SIS` coupled with `land_lad` and `bgrid` atmosphere model in low resolution setup. +* `CM2M`: GFDL CM2.1 model which is `MOM_SIS` coupled with `land_lad` and finite volume atmosphere model (with `am2` physics). +* `ESM2M`: GFDL Earth System Model which is `MOM_SIS` coupled with `land_lad2` and finite volume atmosphere model (with `am2` physics). + +### To compile the models: + +Find out what `MODEL_TYPE` you want to work on and what is `PLATFORM_ID` then + + $ cd $root_dir/exp + $ ./MOM_compile.csh --platform PLATFORM_ID --type MODEL_TYPE + +NOTE: The Energy Balanced Model (`EBM`) cannot be compiled by the above procedure and a separate compile script is provided for it. + +### To run an experiment + +Make sure you have a large enough working directory (`WORKDIR`) and made a symbolic link to it called `work` in your top directory, i.e., + + $ cd $root_dir + $ ln -s WORKDIR work + +Find out what test cases are available for a particular `MODEL_TYPE` + + $ cd $root_dir/exp + $ ./MOM_run.csh --platform PLATFORM_ID --type MODEL_TYPE -h + +To run a `TEST_CASE` + + $ ./MOM_run.csh --platform PLATFORM_ID --type MODEL_TYPE --experiment TEST_CASE + +If you do not have the right input data in the `WORKDIR` for the `TEST_CASE` the above command would ask you to download it and try again. You may need to specify the number of processor for the `TEST_CASE`, in that case the above command errors out with the right info. Note: The script `exp/preprocessing.csh` is called by the `MOM_run.csh` to modify the mom4p1 namelists of these old test cases to make them compatible with MOM5. The results go into `WORKDIR`. + +### Notes + +* The scripts have been tested fully only with Intel Fortran and PGI compilers on ia64 platform. They are partially tested with pathscale compiler on x86\_64 and also gfortran4.3 compiler on Core2Duo processor. +* Some of these test cases require a large disk space to save the input data. Choose a partition with enough space (1-2 G) to untar the code and data bundels. +* IBM platform users might want to add the following line to the top of the run scripts + + + setenv LDR_CNTRL MAXDATA=0xD0000000@DSA + + +* The compile script provides the basic capability with dynamic memory allocation. To use static memory allocation which might be faster on some platforms you need to adjust the values of domain bounds properly according to the number of processors and layout. +* The compile script use netcdf3 by default. If you want to use netcdf4 libraries instead you can do so by deleting the `-Duse_netCDF3` from the CPPs in compile script and then recompile. + +## How to prepare input data + +The input data needed to run the selected experiments (tests) that are included in this release are available in the `data/` directory. + +Note that data in `ASCII/`, `HISTORY/`, `RESTART/` directories are NOT needed for running experiments. They are the outputs of the experiments and are provided for the purpose of comparing your results with results produced at GFDL. Tools are provided so that users can create data from scratch for their own experiments. For more details refer to `src/preprocessing`. + + +## Examine the output + +To keep the runscript simple all output files of a model run will be in the work directory. There are three types of output files: + +* ascii file with `.fms.out` extension: the description of the setup of the run and verbose comments printed out during the run. +* restart files in `RESTART` directory: the model fields necessary to initialize future runs of the model. +* history files with `.nc.tar` extension: output of the model, both averaged over specified time intervals and snapshots. + +The ascii file contains everything written to the screen during model execution. The total time for model execution as well as the times of separate modules are reported here. All `.tar` files should be decompressed for viewing. The decompress command is: + + tar -xvf filename.tar + +Users will see result files in NetCDF format. Postprocessing tools such as Ferret, ncview, grads or matlab can be used to view data in these files. +The outputs of the selected experiments are available in the `data/` directory for the purpose of comparing your results with results produced at GFDL. diff --git a/MOM_code/doc/web/user_guide.md b/MOM_code/doc/web/user_guide.md new file mode 100644 index 0000000..d96e0a1 --- /dev/null +++ b/MOM_code/doc/web/user_guide.md @@ -0,0 +1,596 @@ +# The MOM User Guide + +Authors: + +* Stephen Griffies - Stephen.Griffies@noaa.gov +* Niki Zadeh - Niki.Zadeh@noaa.gov + +## Introduction + +The purpose of this section is to provide an overview of MOM and the contents of this web page. + +### What is MOM? + +The Modular Ocean Model (MOM) is a numerical representation of the ocean's hydrostatic primitive equations. It is designed primarily as a tool for studying the global ocean climate system, as well as capabilities for regional and coastal applications. The latest release of MOM occurred in 2012, and is named MOM5. This code has origins that date back to the pioneering work of Kirk Bryan and Mike Cox in the 1960s-1980s. It is developed and supported by researchers at NOAA's [Geophysical Fluid Dynamics Laboratory](http://gfdl.noaa.gov/) (GFDL), with critical contributions also provided by researchers worldwide who comprise the MOM community. The purpose of this web guide is to provide general information about MOM, and particular information for how to download and run the code. Here is a table summarizing the algorithmic history of MOM. + +### MOM Releases + +MOM has had the following releases (note that MOM4p1 releases are distinguished by release dates). + +* MOM4p0a: January 2004 +* MOM4p0b: March 2004 +* MOM4p0c: August 2004 +* MOM4p0d: May 2005 +* MOM4p1: 28 September 2007 +* MOM4p1: 28 December 2007 +* MOM4p1: Dec 2009 +* MOM5: 2012 + +For each release, we aim to update MOM by enhancing features and documentation, and correcting bugs. Each version is generally compatible with the previous versions. However, as updates are made, we cannot guarantee that all features will bitwise agree across releases. Nonetheless, we do maintain a small selection of "bitwise-legacy" code to allow for certain modules to bitwise agreement across versions. As the maintenance of bitwise-legacy features represents an onerous task (e.g., bits change when A+B is altered to B+A), we recommend that researchers beginning new projects start with the most recent version, and that researchers with mature projects carefully test the new code prior to moving forward. + +### MOM email list + +Email concerning MOM should be directed to the [MOM mailing list](https://groups.google.com/forum/#!forum/mom-users). All questions, comments, and suggestions are to be referred to this list. + +### The MOM community + +There is a sizable user community for MOM. This community has proven to be a great resource, especially for new users, and those with portability questions, some of which are beyond the abilities of GFDL scientists to answer. + +### Efficiency and Portability + +The MOM team aims to provide code that is efficient, flexible, and transparent for use across a broad range of computer platforms. Balancing these aims is not always simple. For example, some of the most efficient code is also the least transparent. The MOM developers are scientists whose main concern is to support MOM as a tool for science research. This focus then leads us to weight transparency and portability over efficiency. However, we readily make efficiency modifications that are of a general nature, so please do feel free to volunteer any such changes. + +Given the above aims, we have continued to support one avenue for code efficiency involving the allocation of arrays. MOM can be compiled in two ways: with static allocation of arrays or dynamic allocation. Static allocation is enabled at compile time via the cpp-preprocessor option `MOM_STATIC_ARRAYS`. At GFDL, we have generally found that static allocation executables are faster than dynamic, since compilers like to know before-hand the size of the model arrays. Work on the SGI machines at GFDL has reduced the difference in efficiency between these two compilations. However, details of the model configuration strongly impact the differences in model speed. Additionally, we understand that on some platforms, the dynamic allocation results in faster code than static. Consequently, we have decided to maintain both the static and dynamic options, given the ambiguous results across platforms, compilers, model configurations, etc. + +## An Outline of MOM + +The purpose of this section is to outline certain features of MOM. + +### Documentation + +In addition to this online user guide, documentation for MOM is provided by the following LaTeX generated PDF documents: + +* [A Technical Guide to MOM4](http://www.mom-ocean.org/web/docs/project/MOM4_guide.pdf) by Stephen.Griffies@noaa.gov, Matthew.Harrison@noaa.gov, Ronald.Pacanowski@noaa.gov, and Tony.Rosati@noaa.gov. This is the primary reference for MOM4p0. It contains details about some of the numerical algorithms and diagnostics. Reference to MOM4p0 in the literature should refer to this document: + + + A Technical Guide to MOM4 + GFDL Ocean Group Technical Report No. 5 + S.M. Griffies, M.J. Harrison, R.C. Pacanowski, and A. Rosati + NOAA/Geophysical Fluid Dynamics Laboratory + August 2004 + Available on-line at http://www.mom-ocean.org/web/docs + + +* [Elements of MOM](http://www.mom-ocean.org/web/docs/project/MOM5_elements.pdf) by Stephen.Griffies@noaa.gov is the primary reference for MOM4p1 and MOM5. It contains details about some of the numerical algorithms and diagnostics. Reference to MOM in the literature should refer to this document: + + + Elements of the Modular Ocean Model (MOM) + GFDL Ocean Group Technical Report No. 7 + Stephen M. Griffies + NOAA/Geophysical Fluid Dynamics Laboratory + June 2012 + 620 + xiii pages + Available on-line at http://www.mom-ocean.org/web/docs + + +A theoretical rationalization of ocean climate models is provided by [Fundamentals of Ocean Climate Models](http://www.amazon.com/Fundamentals-Climate-Models-Stephen-Griffies/dp/0691118922). This book by Stephen.Griffies@noaa.gov was published by Princeton University Press in August 2004. + +### Embedded Documentation + +The documentation of most Fortran modules in FMS is inserted right in the source code to enable consistency between the code and documentation. A Perl software tool is used to extract documentation from the source code to create a corresponding html module. For example, documentation for `shared/diag_manager/diag_manager.F90 module` is `shared/diag_manager/diag_manager.html`. In general, the embedded documentation is a good starting point to understand the Fortran module, though ultimately the Fortran code is the final source for information. + +### MOM5 Characteristics + +Although MOM5 shares much in common with earlier versions of MOM, it possesses a number of computational, numerical, and physical characteristics that are noteworthy. The main characteristics of MOM5 can be found in the introduction to [Elements of MOM](http://www.mom-ocean.org/web/docs/project/MOM5_elements.pdf). + +### MOM and FMS + +MOM has been coded within GFDL's [Flexible Modeling System](http://gfdl.noaa.gov/fms) (FMS). Doing so allows for MOM developers to use numerous FMS infrastructure and superstructure modules that are shared amongst various atmospheric, ocean, sea ice, land, vegetative, etc. models. Common standards and shared software tools facilitate the development of high-end earth system models, which necessarily involves a wide variety of researchers working on different computational platforms. Such standards also foster efficient input from computational scientists and engineers as they can more readily focus on common computational issues. + +The following list represents a sample of the FMS shared modules used by MOM. + +* time manager: keeps model time and sets time dependent flags +* coupler: used to couple MOM to other component models +* I/O: to read and write data in either NetCDF, ASCII, or native formats +* parallelization tools: for passing messages across parallel processors +* diagnostic manager: to register and send fields to be written to a file for later analysis +* field manager: for integrating multiple tracers and organizing their names, boundary conditions, and advection schemes + +The FMS infrastructure (the "Siena" version) forms the basis for the 2012 release of MOM. + +The Flexible Modeling System (FMS), including MOM, is free software; you can redistribute it and/or modify it and are expected to follow the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +FMS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with MOM; if not, write to: + + Free Software Foundation, Inc. + 59 Temple Place, Suite 330 + Boston, MA 02111-1307 + USA + +### MOM test cases + +MOM is distributed with a suite of test cases, with these tests detailed in [Elements of MOM](http://www.mom-ocean.org/web/docs/project/MOM5_elements.pdf). + +Many of the test cases are NOT sanctioned for their physical relevance. They are instead provided for the user to learn how to run MOM, and to verify the numerical and/or computational integrity of the code. PLEASE do not assume that the experiments will run for more than the short time selected in the sample runscripts. + +## Contributing to MOM + +MOM developers aim to provide the international climate research community with a repository for robust and well documented methods to simulate the ocean climate system. Consequently, we encourage interested researchers to contribute to MOM by commenting on code features, and providing new modules that enhance simulation integrity (e.g., a new physical parameterization or new advection scheme) or increase the model's functionality. + +The [Model Development Lab](http://www.mom-ocean.org) (MDL) provides infrastructure to facilitate contributions from the MOM community. + +## Source code and data sets + +The purpose of this section is to outline methods required to obtain the source code and associated datasets. + +### Obtaining source code and data sets + +The source code and test case data sets for MOM are hosted on [github](https://github.com/BreakawayLabs/mom). Follow [these instructions](http://www.mom-ocean.org/web/downloads) to download the code and (optionally) the test case data sets. + +### Description of the data sets + +There are many datasets provided with the various MOM test cases. All datasets released with MOM are in [NetCDF](http://www.unidata.ucar.edu/software/netcdf/) format, since this format is widely used in the community. A number of useful tools are available as part of the [NCO](http://nco.sourceforge.net/) suite that allow the user to perform some necessary operations (editting attributes, merging, etc.) on a NetCDF file. + +## Setting up an experiment with MOM + +MOM is distributed with code used to generate model grids, initial conditions, and boundary conditions. Each step must be performed prior to running the ocean model. The steps used during this experimental setup stage are generally termed "preprocessing", and the code used for these purposes is under the `preprocessing/` directory in the MOM distribution. The purpose of this section of the User Guide is to outline this code and its usage. Further details of usage and algorithms can be found in the internal documentation within the various preprocessing code modules. + +### General comments + +We start this section with some general comments regarding the setup of a model experiment. + +* Setting up an experiment is critical part to the success of a research or development project with MOM. It is important that the user take some time to understand each of the many steps, and scrutinize the output from this code. We have endeavored over the years to provide tools facilitating the ready setup of a new experiment. However, we remain unable to provide code that does everything possible under the sun. Additionally, all features that are provided here may not be fully tested. For these reasons, the preprocessing code continues to evolve as use and functionality evolve. We sincerely appreciate ALL comments about code and documentation, especially comments regarding clarity, completeness, and correctness. Your input is essential for the improvement of the code and documentation. + +* Many steps in idealized experiments that were formerly performed while running earlier MOM versions have been extracted from MOM and placed into preprocessing. Hence, even if you are running an idealized experiment, it is likely that you will need to perform some if not all of the preprocessing steps discussed here. + +* If you have a problem that is not addressed here, then please feel free to query the [MOM mailing list](https://groups.google.com/forum/#!forum/mom-users). No question is too silly, so please ask! + +* All code used to setup an experiment with MOM is written in Fortran 90/95 except `make_xgrids`, which is written in C. Most code is dependent on FMS shared code for the purpose of parallization and interpolation. In addition to the documentation provided here, there are comments within the code to help users debug and to make modifications to suit their purpose. + +* Some users make nontrivial changes of general use. With your support, assistance, and maintenance, we will endeavour to include your changes in future releases. + +### Creation of the ocean/ice grid (mosaics) + +Mosaics is the name given to a general framework to define structured grids at GFDL. The details of this scheme are being incorporated by others outside of GFDL as well. Most of the recent global models developed at GFDL employ the conventions of Mosaic. However, MOM is backwards compatible, so that it still supports grids generated with older software. + +### Creation of the ocean/ice grid (pre-mosaics) + +Within GFDL FMS, ocean and ice are assumed to share the same grid. This means that the two models read in the same grid specification file. Even so, the domain decomposition on parallel systems may be different, and indeed they generally are due to different load balance issues between the two models. + +Even though the ocean and ice models read the same grid specification file, they use the information from the grid file in a slightly different manner when setting up the respective model's tracer grid. In particular, the ocean model reads the tracer location directly from the arrays (`x_T/geolon_t`, `y_T/geolat_t`) written in the grid specification file. In contrast, the GFDL ice model reads (`x_vert_T/geolon_vert_t`, `y_vert_T/geolat_vert_t`) from the grid specification file and then averages these four vertex locations to get the tracer location used in the ice model. The result is that diagnostics output from the two models have ocean and ice fields at slightly different locations for cases such as the tripolar grid when the grid is not spherical. + +The ocean/ice grid specification file is generated by executing the `ocean_grid_generator` utility. The `ocean_grid_generator` utility generates the horizontal grid, vertical grid, and topography. A C-shell script is provided to compile relevant code to generate and run the executable to produce the grid file. To create the desired grid and topography, setting namelist options within the runscript is needed. + +The horizontal grid can be conventional lon-lat spherical grid or a reprojected rotated tripolar grid (R. Murray, [Explicit generation of orthogonal grids for ocean models](http://www.sciencedirect.com/science/article/pii/S0021999196901369), 1996, J.Comp.Phys., v. 126, p. 251-273.). The choice is controlled by the namelist option `tripolar grid` (true for tripolar grid and false for lon-lat spherical grid). Note that Cartesian beta-plane and f-plane geometries are set up within MOM, not within the grid generation preprocessing steps discussed here (see `ocean_core/ocean_grids.F90` for beta-plane and f-plane namelist options). + +The `grid_spec` file contains the following horizontal grid information: geographic location of T, E, C and N-cell (Tracer, East, Corner, and North cells), half and full cell lengths (in meters), rotation information between logical (i.e., grid oriented) and geographic east of cell. The complete description of the horizontal grid and namelist option is available in hgrid + +The vertical grid information includes depth of tracer points and tracer boundaries. The complete description of namelist option is available in vgrid + +The topography can be idealized (various examples are provided and others can be easily added through emulating those provided) or remapped from a source topography dataset. The type of topography is specified by the namelist variable `topography`. Namelist `topog_depend_on_vgrid` specifies if the topography will depend on the vertical grid or not. To generate a grid for MOM, `topog_depend_on_vgrid` should always be true. A useful option for those upgrading older models to MOM is `adjust_topo`. If this option is set to false, there will be no adjustments made to the topography. See topog for further details about topography namelist options. + +### The exchange grid for coupled models + +"Exchange grid" information is required for coupled models (i.e., ocean/ice coupled to land and/or atmosphere) that employ the GFDL coupler technology. The exchange grid is defined by taking the union of the ocean/ice grid with the atmosphere and land grids. This union is then used to compute area integrals to allow for conservative mapping of fluxes between the component models. + +### The Sutherland-Hodgman polygon clipping algorithm for model cell interaction calculation + +The exchange grid information is generated by executing the `make_xgrids` utility. The execution of the `make_xgrids` utility will generate a netcdf file with the name `grid_spec.nc`. The `grid_spec.nc` contains the component model grids as well as the exchange grid information. In particular, the utility `make_xgrids` generates two exchange grids used by the FMS coupler: one grid for surface fluxes and another for runoff. `make_xgrids` is created by compiling its C source: + + cc -O -o make_xgrids make_xgrids.c -I/usr/local/include -L/usr/local/lib -lnetcdf -lm + +creates the `make_xgrids` executable from C source and the netCDF and standard math libraries. It is executed with the command + + make_xgrids -o ocean_grid.nc -a atmos_grid.nc -l land_grid.nc + +This execution produces a `grid_spec.nc` file (input files containing grid information for the ocean/sea-ice, atmosphere and land component models are indicated by the `-o`, `-a` and `-l` flags, respectively). The grid files `ocean_grid.nc`, `atmosphere_grid.nc`, and `land_grid.nc` all can be generated separately through the `ocean_grid_generator` utility. Normally at GFDL we select the same atmosphere and land model grid, but such is not necessary. When the land and atmosphere grids are the same, then we can reduce the execute command to + + make_xgrids -o ocean_grid.nc -a atmos_grid.nc + +If you further decide to choose same ocean, atmosphere and land grid, the execute command will be + + make_xgrids -o ocean_grid.nc -a ocean_grid.nc + +`make_xgrids` expects a netCDF format input specification for each of the component model grid files. For the ice/ocean grid (`ocean_grid.nc`), the following three fields are required: + +* `wet` - a 2D array of double precision numbers set to 1.0 where the ice and ocean models are active and 0.0 elsewhere. `wet` has `im` indices in the `i`-direction (pseudo east-west) and `jm` indices in the `j`-direction (pseudo north-south). These correspond to the size of the global arrays of temperature, salinity and ice thickness in the coupled climate model. +* `x_vert_T` and `y_vert_T` - 3D double precision arrays (dimensioned `im * jm * 4`) that contain the longitudes and latitudes (respectively) of the four corners of T- cells. The numbers are in degrees. + +For the netCDF format input specification for the atmosphere and land grid (`atmos_grid.nc` and/or `land_grid.nc`), `x_vert_T` and `y_vert_T` are required. + +`make_xgrids` copies all fields of the ice/ocean grid specification file to its output file, `grid_spec.nc`, and then appends fields that specify the atmosphere and land model grids and then the surface and runoff exchange grids. + +Using the Sutherland-Hodgman polygon clipping algorithm (reference in next paragraph) for model cell interaction calculation, `make_xgrids` takes care that the land and ocean grids perfectly tile the sphere. The land model's domain is defined as that part of the sphere not covered by ocean (where `wet=0` on the ocean grid). To accomplish this, the land cells must be modified to remove the ocean parts. This is done in `make_xgrids` by first taking the intersections of atmosphere and land cells. The overlap area between these cells and active ocean cells are then subtracted. Finally, the modified atmosphere/land intersections are aggregated into land cell areas and atmosphere/land exchange cell areas. + +Model cell intersections are calculated using the Sutherland-Hodgman polygon clipping algorithm (Sutherland, I. E. and G. W. Hodgman, 1974: [Reentrant polygon clipping](http://dl.acm.org/citation.cfm?id=360767.360802), CACM, 17(1), 32-42.). This algorithm finds the intersection of a convex and arbitrary polygon by successively removing the portion of the latter that is "outside" each boundary of the former. It can be found in many computer graphics text books (e.g., Foley, J. D., A. van Dam, S. K. Feiner, and J. F. Hughes, 1990: [Computer graphics: principles and practice](http://books.google.com.au/books/about/Computer_Graphics.html?id=-4ngT05gmAQC&redir_esc=y), second edition. Addison Wesley, 1174 pp.). The implementation in `make_xgrids` is particularly simple because the clipping polygon is always a rectangle in longitude/latitude space. For the purpose of finding the line intersections in the clipping operations, the cell boundaries are assumed to be straight lines in longitude/latitude space. This treatment is only perfectly accurate for cells bounded by lines of longitude and latitude. + +Spherical areas are calculated by taking the integral of the negative sine of latitude around the boundary of a polygon (Jones, P. W., 1999: [First- and second-order conservative remapping schemes for grids in spherical coordinates](http://journals.ametsoc.org/doi/pdf/10.1175/1520-0493(1999)127%3C2204%3AFASOCR%3E2.0.CO%3B2). Monthly Weather Review, 127, 2204-2210.). The integration pathways are again straight lines in longitude/latitude space. `make_xgrids` checks that the sphere and the individual cells of the atmosphere and ocean grids are tiled by the surface exchange cells. The fractional tiling errors are reported. + +### Initial and Boundary Conditions + +After generating the model grid, it is time to generate the initial and boundary conditions (ICs and BCs). These conditions are specific to the details of the model grid, so it is necessary to have the grid specificiation file in hand before moving to the IC and BC generation. + +There are two options for ICs and BCs. + +* Idealized Conditions. These conditions are based on subroutines that design idealized setups for either initial conditions (e.g., exponential temperature profile) or boundary conditions (e.g., cosine zonal wind stress). Code for these purposes is found in the `src/preprocessing/mom4_prep/idealized_ic` and `src/preprocessing/mom4_prep/idealized_bc` directories in the MOM distribution. Details of available namelist choices are in the documentation file `idealized_ic.html` as well as the comments within the source code itself. Users can readily incorporate their favorite idealized IC or BC into the MOM idealized preprocessing step by emulating the code provided. +* Realistic Conditions. These ICs and BCs generally result from a regridding routine to bring, say, the Levitus analysis onto the model grid for initializing a model, or for mapping surface fluxes onto the grid for boundary conditions. Code enabling the regridding functions is found in the `preprocessing/regrid_2d`, `preprocessing/regrid_3d` and `preprocessing/regrid` directories in the MOM distribution. + +In the remainder of this section, we detail code to generate the ICs and BCs of use for MOM. + +### 2d Regridding: the common approach + +It is typical for air-sea fluxes of momentum, heat, and mosture to live on a grid distinct from the ocean model grid. In particular, most analysis are placed on a spherical latitude-longitude grid, whereas most global ocean models configured from MOM are run with tripolar grids. + +When running an ocean or ocean-ice model, it is useful to map the boundary fluxes onto the ocean model grid prior to the experiment. This preprocessing step saves computational time that would otherwise be needed if the fluxes were mapped each time step of a running experiment. To enable this regridding, one should access code in the `preprocessing/regrid_2d` directory. The original data must be on a latitude-longitude grid to use `regrid_2d`. The target/destination grid can be either latitude-longitude with arbitrary resolution, or tripolar with arbitrary resolution. + +### 2d Regridding: the less common approach + +In some cases, one may wish to take a set of forcing fields from one tripolar MOM experiment and regrid them onto another tripolar MOM experiment with different grid resolution. In this case, it is necessary to regrid before running the experiment. + +As of the MOM4p0d distribution, there is a regridding tool within the `preprocessing/regrid` directory that enables one to regrid fields on one tripolar grid to another tripolar grid. Indeed, one can regrid source data from any logically rectangular grid (e.g., latitude-longitude grid or tripolar grid) to a target/destination grid that is any logically rectangular grid. + +Note that this is new code, and so has been tested only for particular cases. So the user should be extra careful to scrutinize the results. + +### Setting the `on_grid` logical in the `data_table` + +The `on_grid` logical in the `data_table` indicates whether an input file is on the grid of the model or not. + +`on_grid=.true.` means that the input file is on the same grid as the ocean model. This is the recommended setting for models running with specified atmospheric forcing from data or an analysis product. + +`on_grid=.false.` means the input file has data on a grid differing from the ocean model. This feature is allowed ONLY if the input data lives on a spherical grid. This is a relevant setting if one wishes to keep the input data on their native spherical grid. If the input data is non-spherical, then `on_grid=.false.` is NOT supported. Instead, it is necessary to preprocess the data onto the ocean model grid. + +### Regridding river runoff data + +The tool `preprocessing/runoff_regrid` is of use to grid river runoff data onto the ocean model grid. In this case, runoff is moved to a nearest ocean/land boundary point on the new grid. Note that the source runoff dataset must be on a spherical latitude-longitude grid, whereas the target/destination grid can be spherical or tripolar. The regridding algorithm is conservative. + +The conservative regridding scheme used in `runoff_regrid` is an area average scheme, which is similiar to the algorithm used in coupler flux exchange. If any land point has runoff data, after remapping runoff data onto destination grid, the runoff value of that land point will be moved to the nearest ocean point. Before using this tool, you must use `make_xgrids` to generate exchange grid information between the source grid and destination grid. The complete description can be found in `runoff_regrid.html`. + +### Two ways to specify surface boundary fluxes + +There are two ways to specify surface boundary fluxes when using the coupler feature of FMS. One is through flux exchange, and this employs a conservative algorithm as appropriate for running a coupled ocean-atmosphere model. It is assumed that the atmospheric model grid is spherical with arbitrary resolution. The other method is through data override, and this uses a non-conservative scheme. Data override is of use to selectively remove, say, one of the fluxes coming from an atmospheric model and replace this flux with that from data. GFDL modelers have found this feature to be very useful in diagnosing problems with a coupled model. + +### 3d Regridding for initial conditions or sponges + +When generating realistic initial conditions for an ocean experiment, one generally requires the gridding of temperature and salinity, such as from the Levitus analysis product, onto the model's grid. For this purpose, we are in need of vertical grid information in addition to horizontal 2d information required for the surface boundary conditions. Hence, we use the `preprocessing/regrid_3d`. A similar procedure is required to develop sponge data. + +The original data must be on a spherical grid in order to use `regrid_3d`. If the original data is on a tripolar grid, we should use `preprocessing/regrid`, which can map data from any logical rectangular grid onto any logical rectangular grid. + +### Comments on the regridding algorithms + +For `preprocessing/regrid_3d`, `preprocessing/regrid_2d` and `preprocessing/regrid`, regridding is accomplished non-conservatively using a nearest neighbor distance weighting algorithm, or bilinear interpolation. The interpolation algorithm is controlled through the namelist option `interp_method`. + +Bilinear interpolation is recommanded for most cases since it provides a smooth interpolation when regridding from coarse grid to fine grid (the usual situation with model destination grids typically having resolution more refined than source data products), and it is more efficient. Efficiency can become a particularly important issue when developing initial and boundary conditions for a refined resolution model. + +If the original data is on a tripolar grid, nearest neighbor distance weighting interpolation found in `preprocessing/regrid` must be used, since bilinear interpolation assumes the original data is on a latitude-longitude grid. For `preprocessing/regrid_2d`, `preprocessing/regrid_3d` and `preprocessing/regrid` using the nearest neighbor distance weighting algorithm, a maximum distance (in radians) can be selected using the namelist value `max_dist`. Namelist option `num_nbrs` can be adjusted for speed, although for most applications this refinement is not necessary. + +The complete namelist description for these algorithms can be found in `regrid_2d.html`, `regrid_3d.html` and `regrid.html`. + +### Acceptable data formats + +When the input data is on a latitude-longitude grid, `preprocessing/regrid_2d` and `preprocessing/regrid_3d` can be used. + +When the input data is on a tripolar grid or a latitude-longitude grid, `postprocessing/regrid` can be used. + +For sponge generation, acceptable input data sets must have NetCDF format with [COARDS](http://ferret.wrc.noaa.gov/noaa_coop/coop_cdf_profile.html)-compliance. + +### Time-related issues in forcing files + +There are many ways that data can be formatted in time. The FMS tools used to read in time information, and to time interpolate, are quite sophisticated and flexible. Nonetheless, these tools cannot do everything, nor can they know a priori what the modeler intends. It is therefore necessary to maintain certain conventions when preparing the time information for datasets. This section aims to outline some of the common issues involved with time, and to provide a guide for resolving possible problems. + +### How it works and what to do if it fails + +Previous versions of MOM used IEEE binary formats and MOM-specific headers to process forcing data. As of MOM4, data are stored in portable formats (NetCDF currently), and contain standardized metadata per the CF1.0 convention. Understading the functions of Fortran modules that handle metadata and time-related problems will be very helpful in identifying some user's problems. Some of the most frequently used modules are listed below: + +* `mpp_io_mod`: Low level I/O (open, close file, write, read,...) +* `axis_utils_mod`: process metadata: identify cartesian axis information (X/Y/Z/T) +* `time_manager_mod`: basic time operations, calendar, increment/decrement time +* `time_interp_mod`: Computes a weight for linearly interpolating between two dates +* `time_interp_external_mod`: top level routines for requesting data +* `data_override_mod`: top level routines for requesting data + +### Test your forcing files before use + +It is likely that you will encounter an error using "off-the-shelf" NetCDF files to force your ocean model. This could be due to inadequate metadata in the forcing files, mis-specification of the DataTable, or errors in the parsing of the axis information by `axis_utils` or `get_cal_time`. You'll need some tools to help you diagnose problems and apply the required fix. + +The first thing you should do to setup a new forcing file is use the test program: `time_interp_external_mod:test_time_interp_external`. This test program calls `time_interp_external` at user-specified model times and returns information on how the times were decoded and the resulting interpolation indices and weights. It is STRONGLY suggested that you pass your forcing files through this program before including them in your model configuration. As you gain familiarity with the metadata requirements, you will more easily be able to identify errors and save a lot of time debugging. + +The forcing test program is located in `src/preprocessing/test_time_interp_ext`. There is a csh version and a Perl version. Compilation + + mkmf -m Makefile -p test_time_interp_ext.exe -t $TEMPLATE -c -Dtest_time_interp_external -x shared/{time_manager,fms,mpp,clocks,time_interp,axis_utils,platform,horiz_interp,constants,memutils} + +running csh version + +namelist options: + + filename='foo.nc' ! name of forcing file + fieldname='foo' ! name of variable in file + year0=[integer] ! initial year to start model calendar + month0=[integer] ! initial month to start model calendar + day0=[integer] ! initial day to start model calendar + days_inc=[integer] ! increment interval for model calendar + ntime=[integer] ! number of model "timesteps" + cal_type=['julian','noleap','360day'] ! model calendar + +running perl version + + test_time_interp_ext.pl -f 'foo.nc' -v 'foo' [--nt [int] --year0 [int] --month0 [int] --day0 [int] --inc_days [int] --cal_type [char]] + +Modifying the file metadata should hopefully prove straightforward. The NCO operators need to be installed on your platform. The utility `ncatted` is most useful for modifying or adding metadata. If for some reason, you are unable to install the NCO operators, you can use the NetCDF utilities `ncgen` and `ncdump` which come with the NetCDF package. + +### Common metadata problems + +Can't identify cartesian axis information: axis_utils_mod:get_axis_cart should return the cartesian information. If this fails, you will get a somewhat cryptic error message: `file/fieldname could not recognize axis atts in time_interp_external`. The best solution is to add the `cartesian_axis` attribute to the axes, e.g. `ncatted -a cartesian_axis,axis_name,c,c,"X" foo.nc`. + +Calendar attribute does not exist: This is a required attribute. `time_manager_mod:get_cal_time` converts time units appropriate to the specified calendar to the model time representation. If the `calendar` attribute does not exist, an error message appears "get_cal_time: calendar attribute required. Check your dataset to make sure calendar attribute exists " Use a ncatted command such as: + + ncatted -a calendar,time_axis_name,c,c,"julian" foo.nc + +Currently, the FMS time_manager does not support the Gregorian calendar. So, for instance if you have forcing data that are encoded using the Gregorian calendar which has an average year length of 365.2425 days compared with the Julian calendar with an average year length of 365.25 days, assuming Julian calendar encoding will result in a drift of 0.75 days/100 years. If your forcing times are referenced to an early date such as "0001-01-01" your times will drift by 15 days by the year 2000. Until the Gregorian calendar is implemented in the FMS code, the recommended solution is to change the reference date in the forcing dataset using an application such as [Ferret](http://ferret.pmel.noaa.gov/Ferret/home). + +## Scalability of MOM code + +Scalability of a complex model like MOM is the correlation between the number of processing elements (PE) and the run time. One would expect that run time decreases as the number of PEs increases. It is important, however, to note that there are a number of important factors that can affect scalability considerably. The reader is referred to the paper "[A benchmark for the parallel code used in FMS and MOM4](http://www.sciencedirect.com/science/article/pii/S1463500306001107)" Ocean Modelling, Volume 17, Issue 1, 2007, Pages 49-67, Martin Schmidt. + +MOM test cases are designed for testing the code integrity, they are not set for scalability study or "production" purpose. Changes should be made if one wants to study scalability of the code. + +`diag_step` set the time steps at which numerical diagnostics (e.g., energy, tracer budgets) are computed. The user needs to set this value to be equal to the time step at the end of the experiment, so that only a single instance of the diagnostics is evaluated. For example, if time step is 1 hour and run length is 4 days, `diag_step` (or `diag_freq` in MOM4p0) should be set to 96. + +`diag_table` contains all fields that will be saved in history files. The frequency of saving and number of fields can afect the total run time greatly. So when testing performance, it is recommended that the researcher reduce the output of history files. + +Scalability is also dependent on the configuration of the computing platform: Ethernet card, interconnect between PEs, implementation of MPI, memory hierarchy, version of compiler, ... + + +In examining the total run time the overheads due to initialization and termination should be extracted from total runtime for scalability study since they contain a lot of I/O activities. + + +### Minimizing idle processors + + +When running an ocean-ice model with atmospheric data forcing, it may happen that some ocean-ice tasks contain only land points, in which case these processors stand idle. FMS provides a feature to mask land-only tasks and to thus run the model without allocating a processor for these land-only domains. For example, if a processor domain layout 30x50 is specified, but say 500 subdomains are land only, you may run the model with 1500-500=1000 MPI tasks only. Note that you do not get your results faster when eliminating land-only processors, but compute costs may be reduced. + +In the following example, an "x" represents a land-only subdomain, whereas a dot indicates a domain with a nonzero number of "wet" ocean points: + + + x . x + x . . + . . . + + +In this example, three idle processors could be left out (two in the northern-most row, and one in the second row) since there are no wet ocean points on these "x" domains. The ocean-ice model may thus be run with only 6 MPI tasks rather than nine. To enable this feature of FMS, the following variables in the namelist `coupler_nml` must be specified. + + + coupler_nml + ... + do_atmos = .false. + .... + n_mask = 3 + layout_mask = 3, 3 + mask_list = 1,2, 1,3, 3,3 + +If a mask list is specified, the domain layout of the ocean and the ice model is automatically the same, as specified with `layout_mask`. Running the model, only 6 MPI tasks need to be started. + +For large and complex model topography, it is very tedious to specify the mask list by hand. To simplify this task, the preprocessing tool `check_mask` can be used after the model grid and topography are specified, i.e., when `grid_spec.nc` is generated. To do so requires adding the following to `topog_nml` during the preprocessing stage + + + topog_nml + ... + check_mask=.true. + + +The preprocessing code prints out a number of proposals for possible domain layouts, number of land-only subdomains, and templates for setting the `mask_list`. You may copy these layouts to `coupler_nml`, but note that you must replace spaces by a comma in `mask_list`. + +You may configure `check_mask` from the namelist `check_mask_nml`. There are two variables `max_pe` and `halo` required to perform the mask checking. The default settings are + + max_pe = 128 + halo = 1 + +If you intend to employ more processors, then increase `max_pe`. If you want to use higher order advection schemes, then increase `halo` to `halo=2` or even `halo=3`. Otherwise, the halo information of masked domains may leak into ocean domains, in which case the model will fail, with errors reporting land values at ocean points. + +In the postprocessing step, the single netCDF-output files from the MPI tasks can be combined into one file using the tool `mppnccombine`. The latest version adds "missing" values at the location of land-only domains. Hence, the only remaining trace of masking out land-only processors is in your account files, where some compute time is saved. + +## Postprocessing regrid tool + +### Introduction to postprocessing + +For many analysis applications, it is sufficient, and often preferable, to have output on the model's native grid (i.e., the grid used to run the simulation). Accurate computation of budgets, for example, must be done on the model's native grid, preferably online during integration. MOM provides numerous online diagnostics for this purpose. + +Many applications, such as model comparison projects, require results on a common latitude-longitude spherical grid. Such facilitates the development of difference maps. For this purpose, we have developed a tool to regrid scalar and vector fields from a tripolar grid to a spherical grid. In principle, this tool can be used to regrid any logically rectangular gridded field onto a spherical grid. However, applications at GFDL have been limited to the tripolar to spherical regrid case. + +In general, regridding is a difficult task to perform accurately and without producing noise or spurious results. The user should carefully examine regridding results for their physical integrity. Problems occur, in particular, with fields near MOM's partial bottom step topography in the presence of realistic topography and land/sea geometry. Indeed, we were unable to find a simple algorithm to handle regridding in the vertical that did not produce egregious levels of noise. Hence, the regridding tool provided with MOM only handles horizontal regridding. The regridded data will thus be on the source vertical grid. + +Model comparisons should ideally be performed only after regridding output using the same regridding algorithm. Unfortunately, such is not generally the case since there is no standard regridding algorithm used in the modeling community. + + +### How to use the regridding tool + +The regridding algorithm provided with the MOM distribution is located in the directory `postprocessing/regrid`. + +The algorithm accepts data from any logically rectangular grid (e.g., tripolar or latitude-longitude) and regrids to a spherical latitude-longitude grid. When the data is on the tracer cell (T-cell), the regridding interpolation is conservative. Thus, total heat, salt, and passive tracer remain the same on the two grids. However, when data is located at another position: + +* corner or C-cell as for a B-grid horizontal velocity component +* east or E-cell as for an eastward tracer flux +* north or N-cell as for a northward tracer flux + +then regridding is accomplished non-conservatively using a nearest neighbor distance weighting algorithm. It is for this reason that computationally accurate results are only available when working on the model's native grids. The regridding tool reads grids information from a netcdf file, specified by the namelist `grid_spec_file`. `grid_spec_file` contains source grid, destination grid and exchange grid information. + +* source grid: `src_grid.nc`. This is the model's native grid. It results from running preprocessing grid generation code. +* destination grid: `dst_grid.nc`. This is the spherical latitude-lontitude grid. This grid can also be obtained from running preprocessing grid generation code. Be sure that the tripolar option is set to false to ensure that `dst_grid.nc` is spherical. +* exchange grid: `grid_spec.nc`. This is the union of the source grid and destination grid. The exchange grid is needed for conservative regridding. The same conservative regridding algorithm is used for coupled models with FMS. The tool to construct the exchange grid is know as `make_xgrids`. It is located in the `preprocessing/` directory. After `grid_spec.nc` is generated, it should be passed to the `regrid` tool through namelist `grid_spec_file` (No need to pass `src_grid.nc` and `dst_grid.nc` to the `regrid` tool). + +To create the exchange grid, execute the command + + make_xgrids -o src_grid.nc -a dst_grid.nc + +The exchange grid creates a file `grid_spec.nc`. It has new fields with names: + + AREA_ATMxOCN, DI_ATMxOCN, DJ_ATMxOCN, I_ATM_ATMxOCN, J_ATM_ATMxOCN, + I_OCN_ATMxOCN, J_OCN_ATMxOCN, AREA_ATMxLND, DI_ATMxLND, DJ_ATMxLND, + I_ATM_ATMxLND, J_ATM_ATMxLND, I_LND_ATMxLND, J_LND_ATMxLND, + AREA_LNDxOCN, DI_LNDxOCN, DJ_LNDxOCN, I_LND_LNDxOCN, J_LND_LNDxOCN, + I_OCN_LNDxOCN, J_OCN_LNDxOCN, xba, yba, xta, yta, AREA_ATM, xbl, ybl, + xtl, ytl, AREA_LND, AREA_LND_CELL, xto, yto, AREA_OCN + +It is critical that `src_grid.nc` DO NOT already have any of the above new exchange grid fields. If they do, then these fields should be removed using netcdf tools such as `ncks`. After the `grid_spec.nc` file is generated, it is passed into the `regrid` program through the nml option `grid_spec_file`. + +The `regrid` program reads model data from a netcdf file, which is specfied by the namelist variable `src_data`. Again, `src_data` fields are gridded according to `src_grid.nc`. The number of fields to be regridded is specified by `num_flds`. The name of the fields (e.g., `temp`, `salt`) to be regridded is specified by the namelist variable `fld_name`. Each field can be a scalar or vector. If a vector, then specify by `vector_fld`. Vector fields should always be paired together (e.g., u,v components to the horizontal current). The output file is a netcdf file specified by the namelist variable `dst_data`. + +The complete namelist option description is available in `regrid.html` or the code itself. + +## Preparing the runscript + +### The runscript + +A runscript is provided in each test case directory (`exp/$test_case`) for each test case. Details can be found in [quickstart guide](http://www.mom-ocean.org/web/docs/project/quickstart). + +Incorporated in the FMS infrastructure is MPP (Massively Parallel Processing), which provides a uniform message-passing API interface to the different message-passing libraries. If MPICH is installed, the user can compile the MOM source code with MPI. If the user does not have MPICH or the communications library, the MOM source code can be compiled without MPI by omitting the `CPPFLAGS` value `-Duse_libMPI` in the example runscript. + +### The diagnostics table + +The diagnostics table allows users to specify the sampling rates and choose the output fields prior to executing the MOM source code. It is included in the input directory for each test case (`exp/$test_case/input`). A portion of a sample MOM diagnostic table is displayed below. Reference `diag_manager.html` for detailed information on the use of `diag_manager`. + + + "Diagnostics for MOM test case" + 1980 1 1 0 0 0 + #output files + "ocean_month",1,"months",1,"hours","Time" + "ocean_snap",1,"days",1,"hours","Time" + #####diagnostic field entries#### + #=============================================================== + # ocean model grid quantities (static fields and so not time averaged)) + "ocean_model","geolon_t","geolon_t","ocean_month" "all",.false.,"none",2 + "ocean_model","geolat_t","geolat_t","ocean_month","all",.false.,"none",2 + #================================================================ + # prognostic fields + "ocean_model","temp","temp","ocean_month","all", "max", "none",2 + "ocean_model","age_global","age_global","ocean_month","all","min","none",2 + #================================================================ + # diagnosing tracer transport + "ocean_model","temp_xflux_sigma","temp_xflux_sigma","ocean_month","all",.true.,"none",2 + "ocean_model","temp_yflux_sigma","temp_yflux_sigma","ocean_month","all",.true.,"none",2 + #================================================================ + # surface forcing + "ocean_model","sfc_hflux","sfc_hflux","ocean_month","all",.true.,"none",2 + "ocean_model","sfc_hflux_adj","sfc_hflux_adj","ocean_month","all",.true.,"none",2 + #================================================================ + # ice model fields + "ice_model", "FRAZIL", "FRAZIL", "ice_month", "all", .true., "none", 2, + "ice_model", "HI", "HI", "ice_month", "all", .true., "none", 2 + #----------------------------------------------------------------- + + +The diagnostics manager module, `diag_manager_mod`, is a set of simple calls for parallel diagnostics on distributed systems. It provides a convenient set of interfaces for writing data to disk in NetCDF format. The diagnostics manager is packaged with the MOM source code. The FMS diagnostic manager can handle scalar fields as well as arrays. For more information on the diagnostics manager, reference `diag_manager.html`. + + +### The field table + +The MOM field table is used to specify tracers and their advection schemes, cross-land tracer mixing, cross-land insertion, and other options. The field table is included in the runscript as a namelist and is written to an output file upon execution of the runscript. + + "prog_tracers","ocean_mod","temp" + + horizontal-advection-scheme = quicker + vertical-advection-scheme = quicker + restart_file = ocean_temp_salt.res.nc + / + + "prog_tracers","ocean_mod","salt" + + horizontal-advection-scheme = mdfl_sweby + vertical-advection-scheme = mdfl_sweby + restart_file = ocean_temp_salt.res.nc + / + + "tracer_packages","ocean_mod","ocean_age_tracer" + + names = global + horizontal-advection-scheme = mdfl_sweby + vertical-advection-scheme = mdfl_sweby + restart_file = ocean_age.res.nc + min_tracer_limit=0.0 + / + + "namelists","ocean_mod","ocean_age_tracer/global" + + slat = -90.0 + nlat = 90.0 + wlon = 0.0 + elon = 360.0 + / + + "xland_mix","ocean_mod","xland_mix" + "xland","Gibraltar","ixland_1=274,ixland_2=276,jxland_1=146,jxland_2=146,kxland_1=1,kxland_2=28,vxland=0.55e6" + "xland","Gibraltar","ixland_1=274,ixland_2=276,jxland_1=147,jxland_2=147,kxland_1=1,kxland_2=28,vxland=0.55e6" + "xland","Black-Med","ixland_1=305,ixland_2=309,jxland_1=151,jxland_2=152,kxland_1=1,kxland_2=6,vxland=0.01e6" + "xland","Black-Med","ixland_1=306,ixland_2=309,jxland_1=151,jxland_2=153,kxland_1=1,kxland_2=6,vxland=0.01e6"/ + + "xland_insert","ocean_mod","xland_insert" + "xland","Gibraltar","ixland_1=274,ixland_2=276,jxland_1=146,jxland_2=146,kxland_1=1,kxland_2=18,tauxland=86400.0" + "xland","Gibraltar","ixland_1=274,ixland_2=276,jxland_1=147,jxland_2=147,kxland_1=1,kxland_2=18,tauxland=86400.0" + "xland","Black-Med","ixland_1=305,ixland_2=309,jxland_1=151,jxland_2=152,kxland_1=1,kxland_2=6,tauxland=86400.0" + "xland","Black-Med","ixland_1=306,ixland_2=309,jxland_1=151,jxland_2=153,kxland_1=1,kxland_2=6,tauxland=86400.0"/ + + "diff_cbt_enhance","ocean_mod","diff_cbt_enhance" + "diffcbt","Gibraltar","itable=274,jtable=146,ktable_1=1,ktable_2=18,diff_cbt_table=0.01" + "diffcbt","Gibraltar","itable=276,jtable=146,ktable_1=1,ktable_2=18,diff_cbt_table=0.01" + "diffcbt","Gibraltar","itable=274,jtable=147,ktable_1=1,ktable_2=18,diff_cbt_table=0.01" + "diffcbt","Gibraltar","itable=276,jtable=147,ktable_1=1,ktable_2=18,diff_cbt_table=0.01" + "diffcbt","Black-Med","itable=305,jtable=151,ktable_1=1,ktable_2=6,diff_cbt_table=0.01" + "diffcbt","Black-Med","itable=309,jtable=152,ktable_1=1,ktable_2=6,diff_cbt_table=0.01" + "diffcbt","Black-Med","itable=306,jtable=151,ktable_1=1,ktable_2=6,diff_cbt_table=0.01" + "diffcbt","Black-Med","itable=309,jtable=153,ktable_1=1,ktable_2=6,diff_cbt_table=0.01"/ + +In the first section of the field table, the user can specify tracers to be used in the simulation. Although there is no limit to the number of tracers specified, temperature (temp) and salinity (salt) must be included. The user may also define the horizontal and vertical tracer advection schemes. For more information on the field manager, reference `field_manager.html`. + +In climate modeling, it is often necessary to allow water masses that are separated by land to exchange tracer and surface height properties. This situation arises in models when the grid mesh is too coarse to resolve narrow passageways that in reality provide crucial connections between water masses. The cross-land mixing and cross-land insertion establishes communication between bodies of water separated by land. The communication consists of mixing tracers and volume between non-adjacent water columns. Momentum is not mixed. The scheme conserves total tracer content, total volume, and maintains compatibility between the tracer and volume budgets. The grid points where this exchange takes place, and the rates of the exchange, are specified in the field table. + +For some cases, it is necessary to set a large vertical tracer diffusivity at a specified point in the model, say next to a river mouth to ensure fresh water is mixed vertically. These diffusivities are specified in the field table. + +For a technical description of cross-land tracer mixing and insertion, please reference [A Technical Guide to MOM4](http://www.mom-ocean.org/web/docs/project/MOM4_guide.pdf). + +### `mppnccombine` + +Running MOM in a parallel processing environment will produce one output NetCDF diagnostic file per processor. `mppnccombine` joins together an arbitrary number of data files containing chunks of a decomposed domain into a unified NetCDF file. If the user is running the model on one processor, the domain is not decomposed and there is only one data file. `mppnccombine` will still copy the full contents of the data file, but this is inefficient and `mppnccombine` should not be used in this case. Executing `mppnccombine` is automated through the runscripts. The data files are NetCDF format for now, but IEEE binary may be supported in the future. + +`mppnccombine` requires decomposed dimensions in each file to have a `domain_decomposition` attribute. This attribute contains four integer values: + +* starting value of the entire non-decomposed dimension range (usually 1) +* ending value of the entire non-decomposed dimension range +* starting value of the current chunk's dimension range +* ending value of the current chunk's dimension range. + +`mppnccombine` also requires that each file have a `NumFilesInSet` global attribute which contains a single integer value representing the total number of chunks (i.e., files) to combine. + +The syntax of `mppnccombine` is: + + mppnccombine [-v] [-a] [-r] output.nc [input ...] + + -v print some progress information + + -a append to an existing NetCDF file + + -r remove the '.####' decomposed files after a successful run + +An output file must be specified and it is assumed to be the first filename argument. If the output file already exists, then it will not be modified unless the option is chosen to append to it. If no input files are specified, their names will be based on the name of the output file plus the extensions '.0000', '.0001', etc. If input files are specified, they are assumed to be absolute filenames. A value of 0 is returned if execution is completed successfully and a value of 1 indicates otherwise. + +The source of `mppnccombine` is packaged with the MOM module in the postprocessing directory. `mppnccombine.c` should be compiled on the platform where the user intends to run the FMS MOM source code so the runscript can call it. A C compiler and NetCDF library are required for compiling `mppnccombine.c`: + + cc -O -o mppnccombine -I/usr/local/include -L/usr/local/lib mppnccombine.c -lnetcdf + +## Examining the output + +### Sample model output + +Sample MOM model output data files are available in the `data/` directory. Output files are classified into three subdirectories: + +* `ascii/`: the description of the setup of the run and verbose comments printed out during the run. +* `restart/`: the model fields necessary to initialize future runs of the model. +* `history/`: output of the model, both averaged over specified time intervals and snapshots. + +Note that these output files are compressed using `tar`. All `.tar` files should be decompressed for viewing. The decompress command is: + + tar -xvf filename.tar + +### Analysis tools + +There are several graphical packages available to display the model output. These packages vary widely depending on factors, such as the number of dimensions, the amount and complexity of options available and the output data format. The data will first have to be put into a common format that all the packages can read. FMS requires the data to be stored in NetCDF format since it is so widely supported for scientific visualization. The graphical package is also dependent upon the computing environment. For ocean modeling, [ncview](http://meteora.ucsd.edu/~pierce/ncview_home_page.html), [Ferret](http://ferret.pmel.noaa.gov/Ferret/home) and [GrADS](http://www.iges.org/grads/) are most commonly used. diff --git a/MOM_code/exp/FMS_compile.csh b/MOM_code/exp/FMS_compile.csh new file mode 100644 index 0000000..5465fd0 --- /dev/null +++ b/MOM_code/exp/FMS_compile.csh @@ -0,0 +1,108 @@ +# Build the shared FMS component library +# The list of source files that should be compiled for this component. + +set pathnames_shared = $code_dir/path_names_shared # path to file containing list of source paths + +cat > $pathnames_shared < 1 +# if ( ! -f $mppnccombine ) then +# cc -O -o $mppnccombine -I/usr/local/include -L/usr/local/lib $code_dir/postprocessing/mppnccombine/mppnccombine.c -lnetcdf +# endif + +set mkmf_lib = "$mkmf -f -m Makefile -a $code_dir -t $mkmfTemplate" +set lib_include_dirs = "$root/include $code_dir/shared/include $code_dir/shared/mpp/include" + +source ./FMS_compile.csh +if ( $status ) exit $status + +cd $root/exp +source ./ocean_compile.csh +if ( $status ) exit $status + +if( $type != MOM_solo) then + cd $root/exp + source ./ice_compile.csh + if ( $status ) exit $status +endif +if( $type == MOM_SIS) then + cd $root/exp + source ./land_null_compile.csh + if ( $status ) exit $status + + cd $root/exp + source ./atmos_null_compile.csh + if ( $status ) exit $status +endif +if( $type == EBM) then + cd $root/exp + source ./atmos_ebm_compile.csh + if ( $status ) exit $status +endif +if( $type == CM2M | $type == ESM2M | $type == ICCM ) then + cd $root/exp + source ./atmos_phys_compile.csh + if ( $status ) exit $status +endif +if( $type == CM2M | $type == ESM2M ) then + cd $root/exp + source ./atmos_fv_compile.csh + if ( $status ) exit $status +endif +if( $type == CM2M | $type == ICCM | $type == EBM ) then + cd $root/exp + source ./land_lad_compile.csh + if ( $status ) exit $status +endif +if( $type == ESM2M ) then + cd $root/exp + source ./land_lad2_compile.csh + if ( $status ) exit $status +endif +if( $type == ICCM ) then + cd $root/exp + source ./atmos_bg_compile.csh + if ( $status ) exit $status +endif + +# Build the executable +set mkmf_exec = "$mkmf -f -m Makefile -a $code_dir -t $mkmfTemplate -p $executable:t" +mkdir -p $executable:h +cd $executable:h +if( $type == MOM_solo ) then + set srcList = ( mom5/drivers ) + set includes = "-I$executable:h:h/lib_FMS -I$executable:h:h/lib_ocean" + set libs = "$executable:h:h/lib_ocean/lib_ocean.a $executable:h:h/lib_FMS/lib_FMS.a" +else if( $type == MOM_SIS ) then + set srcList = ( coupler ) + set includes = "-I$executable:h:h/lib_FMS -I$executable:h:h/lib_ocean -I$executable:h:h/lib_ice -I$executable:h:h/lib_atmos_null -I$executable:h:h/lib_land_null" + set libs = "$executable:h:h/lib_ocean/lib_ocean.a $executable:h:h/lib_ice/lib_ice.a $executable:h:h/lib_atmos_null/lib_atmos_null.a $executable:h:h/lib_land_null/lib_land_null.a $executable:h:h/lib_FMS/lib_FMS.a" +else if( $type == EBM ) then + set srcList = ( coupler ) + set includes = "-I$executable:h:h/lib_FMS -I$executable:h:h/lib_ocean -I$executable:h:h/lib_ice -I$executable:h:h/lib_atmos_ebm -I$executable:h:h/lib_land_lad" + set libs = "$executable:h:h/lib_ocean/lib_ocean.a $executable:h:h/lib_ice/lib_ice.a $executable:h:h/lib_atmos_ebm/lib_atmos_ebm.a $executable:h:h/lib_land_lad/lib_land_lad.a $executable:h:h/lib_FMS/lib_FMS.a" +else if( $type == CM2M ) then + set srcList = ( coupler ) + set includes = "-I$executable:h:h/lib_FMS -I$executable:h:h/lib_ocean -I$executable:h:h/lib_ice -I$executable:h:h/lib_atmos_fv -I$executable:h:h/lib_atmos_phys -I$executable:h:h/lib_land_lad" + set libs = "$executable:h:h/lib_ocean/lib_ocean.a $executable:h:h/lib_ice/lib_ice.a $executable:h:h/lib_atmos_fv/lib_atmos_fv.a $executable:h:h/lib_atmos_phys/lib_atmos_phys.a $executable:h:h/lib_land_lad/lib_land_lad.a $executable:h:h/lib_FMS/lib_FMS.a" +else if( $type == ESM2M ) then + set srcList = ( coupler ) + set includes = "-I$executable:h:h/lib_FMS -I$executable:h:h/lib_ocean -I$executable:h:h/lib_ice -I$executable:h:h/lib_atmos_fv -I$executable:h:h/lib_atmos_phys -I$executable:h:h/lib_land_lad2" + set libs = "$executable:h:h/lib_ocean/lib_ocean.a $executable:h:h/lib_ice/lib_ice.a $executable:h:h/lib_atmos_fv/lib_atmos_fv.a $executable:h:h/lib_atmos_phys/lib_atmos_phys.a $executable:h:h/lib_land_lad2/lib_land_lad2.a $executable:h:h/lib_FMS/lib_FMS.a" +else if( $type == ICCM ) then + set srcList = ( coupler ) + set includes = "-I$executable:h:h/lib_FMS -I$executable:h:h/lib_ocean -I$executable:h:h/lib_ice -I$executable:h:h/lib_atmos_bg -I$executable:h:h/lib_atmos_phys -I$executable:h:h/lib_land_lad" + set libs = "$executable:h:h/lib_ocean/lib_ocean.a $executable:h:h/lib_ice/lib_ice.a $executable:h:h/lib_atmos_bg/lib_atmos_bg.a $executable:h:h/lib_atmos_phys/lib_atmos_phys.a $executable:h:h/lib_land_lad/lib_land_lad.a $executable:h:h/lib_FMS/lib_FMS.a" +endif +$mkmf_exec -o "$includes" -l "$libs" $srcList +make +if( $status ) then + echo "Make failed to create the $type executable" + exit 1 +endif + +exit diff --git a/MOM_code/exp/MOM_run.csh b/MOM_code/exp/MOM_run.csh new file mode 100755 index 0000000..2a7329c --- /dev/null +++ b/MOM_code/exp/MOM_run.csh @@ -0,0 +1,319 @@ +#!/bin/csh -f +# Minimal runscript for MOM experiments + +set type = MOM_solo # type of the experiment +set name = box1 +set platform = ncrc2.intel # A unique identifier for your platform +set npes = 8 # number of processor + # Note: If you change npes you may need to change + # the layout in the corresponding namelist +set valid_npes = 0 +set help = 0 +set download = 0 +set argv = (`getopt -u -o h -l type: -l platform: -l npes: -l experiment: -l debug -l help -l download_input_data -- $*`) +while ("$argv[1]" != "--") + switch ($argv[1]) + case --type: + set type = $argv[2]; shift argv; breaksw + case --platform: + set platform = $argv[2]; shift argv; breaksw + case --npes: + set npes = $argv[2]; shift argv; breaksw + case --experiment: + set name = $argv[2]; shift argv; breaksw + case --debug: + set debug = 1; breaksw + case --help: + set help = 1; breaksw + case -h: + set help = 1; breaksw + case --download_input_data: + set download = 1; breaksw + endsw + shift argv +end +shift argv + +if ( $help ) then + echo "The optional arguments are:" + echo "--type followed by the type of the experiment, currently one of the following:" + echo " MOM_solo : solo ocean model" + echo " MOM_SIS : ocean-seaice model" + echo " CM2M : ocean-seaice-land-atmosphere coupled climate model" + echo " ESM2M : ocean-seaice-land-atmosphere coupled climate model with biogeochemistry, EarthSystemModel" + echo " ICCM : ocean-seaice-land-atmosphere coupled model" + echo + echo "--experiment followed by the name of the experiment of the specified type" + echo " To see the list of available experiments for each type use -h --type type_name" + if ( $type == MOM_solo ) then + echo " Available expeiments for MOM_solo:" + echo " box1, box_channel1, bowl1, dome1, gyre1, iom1, mk3p51, symmetric_box1, torus1, dome_bates_blobs1" + endif + if ( $type == MOM_SIS ) then + echo " Available expeiments for MOM_SIS:" + echo " om3_core1, om3_core3, MOM_SIS_TOPAZ, MOM_SIS_BLING, atlantic1" + endif + if ( $type == CM2M ) then + echo " Available expeiments for CM2M:" + echo " CM2.1p1, CM2M_coarse_BLING" + endif + if ( $type == ESM2M ) then + echo " Available expeiments for ESM2M:" + echo " ESM2M_pi-control_C2" + endif + if ( $type == ICCM ) then + echo " Available expeiments for ICCM:" + echo " ICCMp1" + endif + if ( $type == EBM ) then + echo " Available expeiments for EBM:" + echo " mom4p1_ebm1" + endif + echo + echo + echo "--platform followed by the platform name that has a corresponfing environ file in the ../bin dir, default is ncrc.intel" + echo + echo "--npes followed by the number of pes to be used for this experiment" + echo + echo Note that the executable for the run should have been built before calling this script. This could be done by calling the appropriate compile script for this experiment \"type\" beforehand. + echo + echo + exit 0 +endif + +set root = $cwd:h # The directory in which you checked out src +set code_dir = $root/src # source code directory +set workdir = $root/work # where the model is run and model output is produced + # This is recommended to be a link to the $WORKDIR of the platform. +set expdir = $workdir/$name +set inputDataDir = $expdir/INPUT # This is path to the directory that contains the input data for this experiment. + # You should have downloaded and untared this directory from MOM4p1 FTP site. +set diagtable = $inputDataDir/diag_table # path to diagnositics table +set datatable = $inputDataDir/data_table # path to the data override table. +set fieldtable = $inputDataDir/field_table # path to the field table +set namelist = $inputDataDir/input.nml # path to namelist file + +set executable = $root/exec/$platform/$type/fms_$type.x # executable created after compilation + +#set archive = $ARCHIVE/$type #Large directory to host the input and output data. + + + +#=========================================================================== +# The user need not change any of the following +#=========================================================================== + +# +# Users must ensure the correct environment file exists for their platform. +# +source $root/bin/environs.$platform # environment variables and loadable modules + +set mppnccombine = $root/bin/mppnccombine.$platform # path to executable mppnccombine +set time_stamp = $root/bin/time_stamp.csh # path to cshell to generate the date + +# Check if the user has extracted the input data + if ( ! -d $inputDataDir ) then + + if( $download ) then + cd $workdir + wget ftp.gfdl.noaa.gov:/perm/MOM4/mom4p1_pubrel_dec2009/exp/$name.input.tar.gz + tar zxvf $name.input.tar.gz + else + + echo "ERROR: the experiment directory '$inputDataDir' does not exist or does not contain input and preprocessing data directories!" + echo "Please download and extract the tar ball corresponding to this experiment from GFDL anonymous ftp site!" + echo " cd $workdir" + echo " wget ftp.gfdl.noaa.gov:/perm/MOM4/mom5_pubrel_dec2013/exp/$name.input.tar.gz" + echo " tar zxvf $name.input.tar.gz" + echo "Then rerun this script." + echo "Or use the --download option to do this automatically" + exit 1 + + endif + endif + +set echo + +# setup directory structure + if ( ! -d $expdir ) mkdir -p $expdir + if ( ! -d $expdir/RESTART ) mkdir -p $expdir/RESTART + +# +#Check the existance of essential input files +# +# if ( ! -e $inputDataDir/grid_spec.nc ) then +# echo "ERROR: required input file does not exist $inputDataDir/grid_spec.nc " +# exit 1 +# endif +# if ( ! -e $inputDataDir/ocean_temp_salt.res.nc ) then +# echo "ERROR: required input file does not exist $inputDataDir/ocean_temp_salt.res.nc " +# exit 1 +# endif + + + +# --- make sure executable is up to date --- + set makeFile = Make_$type + cd $executable:h + make -f $makeFile + if ( $status != 0 ) then + unset echo + echo "ERROR: make failed" + exit 1 + endif +#------------------------------------------- + +#Change to expdir + + cd $expdir + +# Create INPUT directory. Make a link instead of copy +# +if ( ! -d $expdir/INPUT ) mkdir -p $expdir/INPUT + + if ( ! -e $namelist ) then + echo "ERROR: required input file does not exist $namelist " + exit 1 + endif + if ( ! -e $datatable ) then + echo "ERROR: required input file does not exist $datatable " + exit 1 + endif + if ( ! -e $diagtable ) then + echo "ERROR: required input file does not exist $diagtable " + exit 1 + endif + if ( ! -e $fieldtable ) then + echo "ERROR: required input file does not exist $fieldtable " + exit 1 + endif + + cp $namelist input.nml + cp $datatable data_table + cp $diagtable diag_table + cp $fieldtable field_table + +#Preprocessings + $root/exp/preprocessing.csh + +if ( $type == CM2M & $npes != 45 ) then + set valid_npes = 45 +endif + +if ( $type == ESM2M & $npes != 90 ) then + set valid_npes = 90 +endif +if ( $type == ICCM & $npes != 54 ) then + set valid_npes = 54 +endif +if ( $name == atlantic1 & $npes != 24) then + set valid_npes = 24 +endif +if ( $name == mom4p1_ebm1 & $npes != 17) then + set valid_npes = 17 +endif +set runCommand = "$mpirunCommand $npes $executable >fms.out" +echo "About to run the command $runCommand" + +if ( $valid_npes ) then + echo "ERROR: This experiment is designed to run on $valid_npes pes. Please specify --npes $valid_npes " + echo "Note: In order to change the default npes for an expeiment the user may need to edit the values of layouts and atmos_npes and ocean_npes in the input.nml and run the mpi command manually in the working dir" + exit 0 +endif + +# --- run the model --- + +$runCommand + +#---------------------------------------------------------------------------------------------- +# generate date for file names --- + set begindate = `$time_stamp -bf digital` + if ( $begindate == "" ) set begindate = tmp`date '+%j%H%M%S'` + set enddate = `$time_stamp -ef digital` + if ( $enddate == "" ) set enddate = tmp`date '+%j%H%M%S'` + if ( -f time_stamp.out ) rm -f time_stamp.out +#---------------------------------------------------------------------------------------------- +# get a tar restart file + cd RESTART + cp $expdir/input.nml . + cp $expdir/*_table . +# combine netcdf files + if ( $npes > 1 ) then + #Concatenate blobs restart files. mppnccombine would not work on them. + ncecat ocean_blobs.res.nc.???? ocean_blobs.res.nc + rm ocean_blobs.res.nc.???? + set file_previous = "" + set multires = (`ls *.nc.????`) + foreach file ( $multires ) + if ( $file:r != $file_previous:r ) then + set input_files = ( `ls $file:r.????` ) + if ( $#input_files > 0 ) then + $mppnccombine $file:r $input_files + if ( $status != 0 ) then + echo "ERROR: in execution of mppnccombine on restarts" + exit 1 + endif + rm $input_files + endif + else + continue + endif + set file_previous = $file + end + endif + + cd $expdir + mkdir history + mkdir ascii +#---------------------------------------------------------------------------------------------- +# rename ascii files with the date + foreach out (`ls *.out`) + mv $out ascii/$begindate.$out + end + +#---------------------------------------------------------------------------------------------- +# combine netcdf files + if ( $npes > 1 ) then + #Don't combine blobs history files. They need special handling. + mv ocean_blobs.nc.???? history/ + set file_previous = "" + set multires = (`ls *.nc.????`) + foreach file ( $multires ) + if ( $file:r != $file_previous:r ) then + set input_files = ( `ls $file:r.????` ) + if ( $#input_files > 0 ) then + $mppnccombine $file:r $input_files + if ( $status != 0 ) then + echo "ERROR: in execution of mppnccombine on restarts" + exit 1 + endif + rm $input_files + endif + else + continue + endif + set file_previous = $file + end + endif + +#---------------------------------------------------------------------------------------------- +# rename nc files with the date + foreach ncfile (`/bin/ls *.nc`) + mv $ncfile history/$begindate.$ncfile + end + + unset echo + + +echo end_of_run +echo "NOTE: Natural end-of-script." + +#Archive the results + +#cd $workdir +#tar cvf $name.output.tar --exclude=data_table --exclude=diag_table --exclude=field_table --exclude=fms_$type.x --exclude=input.nml --exclude=INPUT $name +#gzip $name.output.tar +#mv $name.output.tar.gz $archive/ + +exit 0 + diff --git a/MOM_code/exp/atmos_null_compile.csh b/MOM_code/exp/atmos_null_compile.csh new file mode 100644 index 0000000..c7654e4 --- /dev/null +++ b/MOM_code/exp/atmos_null_compile.csh @@ -0,0 +1,15 @@ +# Build the null atmos library + +set srcList = ( atmos_null atmos_param/diag_integral atmos_param/monin_obukhov ) + +set lib_name = "lib_atmos_null" + +mkdir -p $executable:h:h/$lib_name +cd $executable:h:h/$lib_name +$mkmf_lib -p $lib_name.a -c "$cppDefs" -o "-I$executable:h:h/lib_FMS" $srcList $lib_include_dirs +make + +if( $status ) then + echo "Make failed to create $lib_name.a" + exit 1 +endif diff --git a/MOM_code/exp/ice_compile.csh b/MOM_code/exp/ice_compile.csh new file mode 100644 index 0000000..daa5e26 --- /dev/null +++ b/MOM_code/exp/ice_compile.csh @@ -0,0 +1,16 @@ +# Build the Ice library +# The list of source files that should be compiled for this component. + +set srcList = ( ice_sis ice_param ) + +set lib_name = "lib_ice" + +mkdir -p $executable:h:h/$lib_name +cd $executable:h:h/$lib_name +$mkmf_lib -p $lib_name.a -c "$cppDefs" -o "-I$executable:h:h/lib_FMS" $srcList $lib_include_dirs +make + +if( $status ) then + echo "Make failed to create $lib_name.a" + exit 1 +endif diff --git a/MOM_code/exp/land_null_compile.csh b/MOM_code/exp/land_null_compile.csh new file mode 100644 index 0000000..6894663 --- /dev/null +++ b/MOM_code/exp/land_null_compile.csh @@ -0,0 +1,15 @@ +# Build the null land library + +set srcList = ( land_null ) + +set lib_name = "lib_land_null" + +mkdir -p $executable:h:h/$lib_name +cd $executable:h:h/$lib_name +$mkmf_lib -p $lib_name.a -c "$cppDefs" -o "-I$executable:h:h/lib_FMS" $srcList $lib_include_dirs +make + +if( $status ) then + echo "Make failed to create $lib_name.a" + exit 1 +endif diff --git a/MOM_code/exp/mom5_ebm_compile.csh b/MOM_code/exp/mom5_ebm_compile.csh new file mode 100755 index 0000000..fe34d56 --- /dev/null +++ b/MOM_code/exp/mom5_ebm_compile.csh @@ -0,0 +1,423 @@ +#!/bin/csh -f +# Minimal compile script for mom4p1 solo experiments + +set echo +set platform = ncrc2.intel # A unique identifier for your platform + # This corresponds to the mkmf templates in $root/bin dir. +# +# User does not need to change anything below! +# +set type = EBM # Name of the experiment +set root = $cwd:h # The directory you created when you checkout +set code_dir = $root/src # source code directory +set executable = $root/exec/$platform/$type/fms_$type.x # executable created after compilation +set pathnames = $code_dir/path_names_$type # path to file containing list of source paths +set mppnccombine = $root/bin/mppnccombine.$platform # path to executable mppnccombine +set mkmfTemplate = $root/bin/mkmf.template.$platform # path to template for your platform +set mkmf = $root/bin/mkmf # path to executable mkmf +set cppDefs = ( "-Duse_netCDF -Duse_netCDF3 -Duse_libMPI -DLAND_BND_TRACERS -DOVERLOAD_C8 -DOVERLOAD_C4 -DOVERLOAD_R4" ) + +# +# Users must ensure the correct environment file exists for their platform. +# +source $root/bin/environs.$platform # environment variables and loadable modules + +# setup directory structure + if ( ! -d $executable:h ) mkdir -p $executable:h + +# +# compile mppnccombine.c, needed only if $npes > 1 +#NOTE: On some platforms you may need to specify the location for netcdf.h and libnetcdf.a +# by modifying the following -I and -L + if ( ! -f $mppnccombine ) then + cc -O -o $mppnccombine -I/usr/local/include -L/usr/local/lib $code_dir/postprocessing/mppnccombine/mppnccombine.c -lnetcdf + endif + + + +# The list of source files that should be compiled for this experiment. +cat > $pathnames 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�Zc@_udQRPw(p zrj^6H+lwsQP79|FPZEqN4#suAh$*VOPcg0{#;h2OmcXEkhCvttX5HUUCE$Naoa|T2 z)RU!P@iOkwYMN??q&n5KP*TfK4I79)*&vNUJ41_6-H6DZ`Quffc_F~E6zmSA`5&-< z+HSRY*Vr^a45ZM47@BVeM(qG7J%*(nr^MKd5SX;-HcZw8;E*K-BY&`Rb4=sv~Qrz zVgWDFw%uYA^#Wlg#t=0VFb+{nITZi23S)|6%=!S$j@CR?i{|?T`Cvv(Ok0CVY2m($Wa=gtm?uMb_ZE~Qo&tGyktb^h_MeJx_ z)0coL=Y!Cky_4VZBhE^H2)-bWPJ{YU7ju7tH+1jA9piW%PGv=cFX2bHXxLALpf97d zgW^3E{hCztOYjEPCVF%0Fw;XY!5TCHNq%ykiX+>QqlG6#j?Nb$PU{BlNS9qHV_E)7 zzhh6Ldi1`EKd1;LAv_i3*;HMjou_92)crw*0rhXrK+PTh=Jyb%{}=z}@C+Ge)xY`j zxDdQrD9e}yNYS7ECq?Iv-=l&*6_Ol6(m|Ae)6OO{#=i-`wLk{4223*jwk{!K(ak58_Q z|1+$Oo)yn)RX41MVGO$#X)VbY>N!tSWDa;9$99S1P8|-pUo733Gy+tkn|k4Gk^2W^ zo}NG6HdS7ls%wA{>BoPZtF5uCtX&6Mp< ztl~ooOD!reBkZE zq}D-YS9m5F$8ic$r>bNHHI5rM}{ixxy_`y|3xb=5x6{-Lq^g%XsopIl|!Og zN1i)??U-**}3b zj9J?=< zT-1>7{Bi-lAc+AJ_b25CA1+p@L;*^0(BA~upQqWmcAGzW-03t zkU-|8RjU)S!nPzYQTv+OEp_sjF6p9ufhN>(F{cbw!9C$>2z>L?Xy9m=DZP=H^U&@1 zCU%-hGD!Sp#Duv>SxB!wNGdbBGyR%!*C_Hu=$K}I30D!(j=5+btkZylcC!zn1jM`3IPHd!uuGx+G0lD) zndclEoMzkWQ^*IUMJh6Ia85=w%$?8p1ojsUbI7^YCI>NS?g8RiH(&dM+^Ch242$nK z7>R|qYSsJ?WE$6*Lc)fj> zXg{gj_A+>vE`v~3t?(&pIH1YCjF;gHqSLzrY=rV}7V%ye{;8{CJs$}sM#mY5!ttV! zquk6fNZZUFVx;Jp&8v(;@Q*@pu@4s3IXEIHZj71H0>hQn0sD2)cBHJ--*l_)AwEst zo0~Arq|qo(O7s6zCzMv)c`c&ttYl9T(_e2HFJefDEH4jcX(sQ}GZ@ah12n)AAB73|f%$`5dCdN)$gV=#k>7ZY5lQ@^?Wr!$#J_P^QGNGY{H>6gV?~h3P#)tc z=3RJ<@*4c{8*&h+m3sq6*K!?{u_it{1%hL2=yA-Hx2=NPx?*q?Fs9*}eI|boMn2V> zrLZE3oJ^YLO;c}&rrf=ce9PLOODXEu3~i8(U!+oW?Hw8*cpW+tS_%?q!rnT}JmBqPLJ|vUPNWzbGSgWY_7i@IRYtOfGHx3TAS@GD@VV;=l$bcpB%xj$MDK0KjDo#sz7{`aeZC0dhQ%o z0{Dw3I*C(H` z0_p51?x@E{&9fk40?K=sM|@%ob4(23Qs^c{`rFc z?8iSK8$W_>d_;@x_?)0Uw}OH?@Z%2fW6Gx>Y{Ivs_h-IKI#JZ)I(ix(zQLnUe#Bcp zvFZES;;tKAbKihZb>a^11V@s9^Kt&+H#Q^c3uwg4Dd>{Pp93Mw^{= z36wu%hhUuyv+X>j1!f|URSL_OGyyIo5+K^d1=eKN^>HoVj%TCs43E;0wq19*mPEgtjv8vMYdFw|b!JTtf2om=He z*yGNvEK1l2(@~W0ISbKzxQ`z(svS#F4I2?_J*r_c+(t<%?MGju=f(Edl;9{F2(qlC zdAc`Y2iHfKrCxo$JOFx|Scaf6uNPtk{G_3g#j78f#7N+y7g=ts7|lDNMBFE z>#10|)>=~Pke+i`zEmAdK#FcfX=>m>29!$69^`r5#ZF%KD!*emL-?QLr zUo-V$h*Ge(&s+6Ff_2+j?{#)bg1x(;+G89mD)`AYcNnCYk#3Ar_WVhXaI)5PPevW@ z(ki}`U3$J`=a_8+d(Q+;HK$L41IV}4HR-Xv;wdj)@tUJD;qhZs8;WoEGa7$NTOn%E zfD`x2r}GuC_)b}dO@|}n?DEOm`wa)7q_ww-D^pf$yE3`(;^2L}bBnq%UB+S%`VO^5 zPEjsu7wO8ph{*T7$jZjRwoov$o)*lG-2@XJ&1d)k%(1{^mLVE#;iv4ux&Lkqcn7BzHRnZPMjoVyg~ z>oJ0p?BM)HiMraxd4)JQkRcjpDRE9<*hk~qE6xj-3eM^uY)%y^JqO{ZlAb$>^IR;> zXyUv99La}8hCFgo7~?n77Q=UOcJ|S0L>wcnIk55BRbB-gU*P?mO8jjo9SIxtWDb2O zCOL3$$Abkq8}Y!4qzEsPBKj8iTPKz__XRZ}16jd5pWvWH4-sDGtT00O4Oq(`oG-G~ zZ?D(*+}hYtLxH#$ot0>@J5;6_Eo!RZpHbC*~fQ$d6H_O1o*fF8VH-F2AW(u~pe zrEClb!L8p>!|qGETXkVNS}$(>3iWR%;4!D`FTsNiord2RsSB;KW0#d^P~jzj849+1 zFuNoz*8w}FU2>5Pb_>CpBe)p}R^2uNtQM0*#uBboyu%_YX}iC(iCgofh};%DCUGr@ z7axN+EebCMc*-Q)KEnfVYKn1gO85JOtHC|6N2u+?uY?sVwYGbm+Df#x+wIz($K)iG z6jNJDRBeAyyoVI8vvMQL!JB~(P?%OWUNP~0iec@_j7V{nh8$T8og_+m;R zzgx|^GY+}NZ-}#tjLE4(!Jk+52!Fa|OYi1?ZTH3}GBM0|+h%hirbHo*+L66$wTUpB zwfA8)9<<1Tw2cF_4&WGthXhl7J|yO1=z2|Df!y^TQ~da%g!%zU5^80+bJrFn)X7-= zll%BFx3Sh9q;=RXaxGgMJ6Q7>M&|)W`&Rvol2#nBi;SJ_hP57J=OEWIPpcYVLM2w+ zd{qas@gCnvDJnlO$ndmEFMR-e5q(t$F=ihty#|{%um)G!)*sAU1jmJGOG!AOV{Nb6 zDlivc4`R+Y4Znca_PO|>n`CUFSZBM~O_9Yq*K#or#SWm@4H3n%>q?cLbkHHyVx7G- z!;O`}U{>3R7c=Vy6&ZCPCth)nkV*L@DZTD0g5(1~!MZl)7}V*}~KH z;ipyb_8Qg>s2I}QMT!dJ_XEsCWCv6Z3id|6He8I;*F_Q` zA_|cK5y<5hB3i-a;HkrY^C=o*xEYY_*Z9#Ne65my^yV5&B<-V>nVfCl8q8V=(jZM8 z84SE3gn?AfFzJfG)YY>DU*$b7XD{tpStntp5E-3FaHMxP6a(~hH zJjn+2pia!#E1AHUUThrl8$;#UbPvViu4wHD>*DlAvtG`2$RXrBK?Z5{ z_A!`2(t$wMQ#&vTA392GzDs-{Cgg^FpgmOkVAAOurH5w2&`J-vFx0^~mEtjbsEYnd zGMEsl%onzb=%Kn7F%&;0U|Bl^EU$-v!TFi2maY>Xb0{t)SiFEa&JRv`_*Z%aTJ7a( z_zRV~zbJKk9r-yaVwJxGVnymMCEzKrHj=uBqwo?Gul{ps?Zb-qxPx~{EOh=n8}DQK z3ddsb@}ltGR@1&z@xB}(+`AlP3HM%5ysK@z0PzmS;C<&V8zsYE(iD6zg z2-#0x*N69;jKF@A5vdg;TE4dw)t|lJWDXx=Z%HfeH)+NFCat*Nq!ss@w8DOqeb{e; zluGMnxk%Zy;AQkJwqVgJ;7ISgxDNwo8&m>>djOFp**x324?|1jmJBYZ7Hb*Al(;{v z$1!X(;~b!`*@jcr;px`rgStAv+{Z?w&Q^{hahe9Tca=SdBC$yQ0pV^~18U%o?M<*2 z0Z7(SF*SCZk1|>WUBfva7Ez#qDX83TX+ycZ8~MuQj*yz9u<-W~XEYe+U>ee+t`=Q?d^oxML;0UN!9IE`MAh%SY zBN($ow+TIs2DrCPj=FVRZ+%O^@}58|(6|x-gL=QM+UNxs*IWNeu+g!NJD3Vjy93=X zGwUA3=`=`ij_$OX^aPw0*qk^U=QiSaVsZXT99{troJ$nvLdAL2!5O4DD~BsRZHaS3 zEY5AjS*SR>K9x?pMsa5Bw&{5efS_lhjq?#^B%xlhIBkj3A2@J~9v7UX=hPas7kaR~ zy-KEX`JI77X3rzeRf5yV>@6*{?}gd5-GR4g#K=*I^umI-pcL(9xSETp<@hE_&b=#e z*tYTy+>t9VJWx?56u}V+15=6Q+kbZDPl@o^uH^K^Uk!SD4F>I zE3n#sCt{Z&$&G!!hZ|_UoP#AxE*5Y`QTB<5UKN@R%XOKk0=SW++-NsUxv>yFKhymv1^FV+sy#H<&oI@h7Z9OJ*pzMn`xE z47EDKC-DN_>xI{_+Kl9T`5_@8s|Us=vG{0Uaj`m&pX(XFUNXcmXZ6~?*B z{scQX)5W2@HzIQ$G^}@Bl74lq_(ab4^PA7HOZ_lrj9$U~|ryk+dyek=;!6pt+Z zTL4(HE2X&Lvnd^5sK7CgfvIU#k+IPlc%gbpFQE-}R}~q!uoIW3;IPf%;Wy#t__!X2 z4zO-v%-o)wZcIXh;0I-kccomjxv6I+lAD;Uyj_DfVb_6h*o=2x4&G_Ihb6R!4&wt%gvy`wWB~ z<}jC4yG<0K1^UiJ}^r9Iup ztI&0ErMcloL3Fqlfp%qEOK((3yBzQ6z8)49OXM7V_56o$m9VaAl?=#jm^9%P@=x#E3|={(A^bQlzDY6tf!SPY&?3K6raL(& zz`-Fao~yx2)W7!j%0}cFrs4OCv61^!{LEPm@8neA{RV7^YS^qo#7zfYkLf#My@4RB zO8E?IPAWq2|L^_S=6?wU3jDtvkA?ph2DVU>=IX>DEm4HK zDcjotI9el?JRq3eD597{FA$2XwYN}sAAST?jn%4(wW=mgRkfR?s$)L8s)t!sa!gfA z5>VCK5_QhcRGc~D!Ss0#UZIH0P3Sq0{JMjaPn>-*T~tDx-zm=4e@fH8E0Cs7c5qJ0 zP@X@|!8w4zJ7mS+q!Q;+#i>x7Yn7hM9h~2acbwnB!TAeuHpSqqYXY3zr^TZx1P*(*a+FZbdJ2cEFbn z1^8<*t^Oz;t^SVZ;+gpa6=xX=zyR!rt(D$P(B7;WU=w*aasCv8GmkjW11I9VI`5qQ zoVyfZ0~0iAVzGgdFaKRw2jsc>jWUr+I7?n+3C_lQt`+;dc)AoH{l=5x0Wk`K^pPbw zFUi9(In#~Zv#%G2H2)}o@Yz*92&95DM;u?TpH1PzB8hiIpclA1uj7K{?<`SU=1&cMF<44HG%;>Zp z@&%^7!6pQI-r{BAVK7zhr5a?mNf~7J>`Z3jAW1)*9lW^`Z+eY)#4&`tBCxr_lak`x zat?mZ#tR%9v#ooE=-5nKnj-$^0^9!-GK3)@!!App%aN0)2wt$8ou^3IL;}iqYKRxE z=V-W|2jP#oXTP7rMKxrm+3l+H+N>sz%=TyvDt9;pW1fy}_PZ?CP#uuR0K+aw7G~q} z&Tf9l640D9o>uXS99f7@|AJG1k&YozDM z0H@PbRM4kRcUrBAmA&cGNxy4Bp4h#EWuHS1_naPjQaaz-?blMHoeudL2Iw3e(hrwV zkaN-@h=O2LW8lzhP8thY-)6NQuFV~W;{UEMaEQbhr!RtXd9QSW&3#``?qn0@qZdxt zGmDS-j+d0DWAaeB&BDn(RAuUK?$(CQzJ%*M!O`)MtwO)i9_RkxTy`k%E=S!pkh8Rx z9y>i0`pAv8-dU-<#1lm@VW=DEM{vgv4WqzvSM7AE6sz{b6))KH<050Nlqk;KC56!P zTO_noFbBQlF`X&ED8Oh-z%>G9)4OV~04L#DFW?)2(=5kU8C`Erl{oz{bE9 zFipaDlmWQlaKUu&Gc_g_Y{1H?2oqot)2Ox zWNRVvL8|zqWb0@?8MAdFo~+@MC0i>%0w2D(bt#E)eX^F%U);JZ{j?c zCWFncCuZJ7J5TL3_Sv=?g5o(5VXOT)<0*RS)&oA;1f2T;GtH@JZ?Kz?W8o&OTFtTM zot&j02RBT53+8OZCs!Ho(W)D)_>QS@D)8gV#wlLKB;Ma6@Gh)8H{MP-=h6)4qEifw zWP{XezAsx72AZiStbKiSfIJ2QSO7QI9BWt$X=$iJ{9*1PPD^0R$NRCLVG&5>H2^T0 z?ZKomIb(Shz-Vqu8_%uo6LC6j=~dVRgSBk8?3nf0Rk3OguZ+%6FsvzdwFsyq5_Z5Y zW&L`oXIQF_UFs2VKyHLvfTv=3c)o+$9_Mm4Z7T-4;SLc#GxbC3RBvf-aGkU_sow_i zEv;_iwv|`eZreKe=5YVITu--6vsu^Typ7PC6cyw(V(QS;+HxEl1{=NA2C#~A)j8|f zr4iFr#MQb27(TJDkkzDpRBijj52N=`&6+;y6OUyT+>;o&Ci2^;TI!w$+8!yE)DP4F zZMK8<^jbkHwb9Na+JP9f3!~6#{g}G}FsOisQ4)YxI)MEZ@KPJFstAB}F@T$oMKR$t zr;TP_Zw1_>fO{}b%N(E&kkQ`ly|uj)3Ai@~@WE)nzXK2hW$j0B*KsIgOPOQ99q}5X zIS@7uHe;>r9uAQ+ zlemn}JorYb4?TtsAK4i3M`+^npQ0LkC>nl94}tIPz<;w&;A>=ZmhsE`{FX624FBj^ z@V}3Se>@s~sF0cUC9DXi7kOn0KS$vgip)(eOQ@;lIuk>SsFe9Tol( zgkIK* z0V2X0|K*XW=B0@+CN-=P#0AnfecTS>Y(@O;+D61#M0_n0(Tqmyq=>I6;&qDnBcw(q zlUFF>6A_4cM0_O@@!Dv_KVe!4g?vRMFKMInWLh!sMInD)C9QS?k;@!kxq;SJ&>AP@ z*5Rl|Umzsr-K>B&2piLW7Q=~^g4Pgxs8f9}1zbqLRxyB2M+0tD3Y#h5!CdxB+A9v= z8VCyj|6~L9A)qS;uzxh*0}8lO+Lm;IHu+`;FeFNnKiCG`50e~9jsg7XP*jsI17PfW z26i=V!5YP-5Zdtm)5fy|)1JU{Eb+R^p8_{zQ|?W zL0Hxulv**UrKHfuF6+8oUFIx>y~JNnGh~|L-x~RMtNe@1AUwh1Ztc*iIKSZs>*38h zxHBHi^NnN)!uWF~AiU;-+1B%Iq8D_{i1)CfTZ|$!A=oX@3UdHVr&F)6*I?lWx$&zm z!ftYOkA5)LV0Qw)aqYE6zR3kq){?=ryz>zngk9J^2)@X>arC?~ib`qj?A7B`3u$F;T3;{jskf3oeV)a$M9W28gT#in7 zHk&*-$HDs*Ay%4{FSMjxE*2aTy$!ko0qg);s3My%=!R;9mPQp>|D%#3bjZQ`1p=0r zt_^eSbq2=;fNjGd#AVkR1ltwcum^xvdkI>Eaq7rQ7Rc*$r7-AWh_o=MJ=_-H7&cB% z;%tb;xso`$=)jp-uP9E6Sm2Juwgt|ZVC%n)vmfJis4^Dkhl9X*TnF|$1t)1Vvm^uW`Aw zgHJPcym}Coi12kTrn|}VC~ohqgsfTDY?K~GxCSS<^od7LSnHZ1?I>a+?UEJbU()C5 z3|w!U?6fRxMt8dzKf?ZozL9lKcZ0K$_VWX_ZFrwTR~Nf~P)}^e4xl;vsRoiJo%IXY z4BaR)Dt*R38H1ROpO6cJ1**dg<}JlnhVSS&GV&sklyDeNLk)~jRmkrMrg$)@R^p4? zuXi!HcPY3Bc9mv$kWnya9jlJ;K$$ccID^BkUe&4?+2f?kweTJ2j1Lnjp*1*|%9r^T zrxX~s)n&)_I^=B}L>LL@PH5=MiR*X_oCu6*5t`vS7#aTJM8TTa8;#-|2;l^;1XbK= z@&wbU2F~8qOnhxmr!cwm?2_peOLG)oiN89d>PV#txPKc>$sx z!4LGjAgZ`J{i7jCYwxvM5{|gj9fhv4mOya2qxAP2KeUtS!ZYTD#q~)z>Ay{_b;%9N zR5P7*#=cjG_X_de=hi7Xf5NrkJiHffG?-ubADE9w4t3~)IXM9n?8ds3leInyY zqg6{pxo{pi$4m-tHm4@YN_a;U+LMb?xEXE@Lu=fiLzryK*O5E$Pys6GMq<*r6n3r9 zU_%QGh=F$W#9=cZ4@#J^ImMTN&2>_hFF2w>Lv+97bOkw&DmnIQ0GN=D`v^%BhiSH) zFd(FAP(tap6FwYrWv!Eff`<3U;}CIT2q@YtEkVs@FK@ybM)t}36zhIaPP5`#cspK} z3@i#5l@QVCZgH-8pV=P~b9xra!}wdb9>)+qg2XfI#N{=LbdT+Jeso}s#-H2>KpjE= zYAd!$opj7mEOcwV3vI`OU7ooLEN909+xjsZYiCfz_?dmf1t0=r@ z>vn*suns{{M(R703<=}X1_10rs7>L(VDBBwk%8)bnTh9vgQ==Q27LaX0YWPRZP7F@ zM`JJw=dkpkVCl9@>!*vfah3tF2~f;PnaGy3uQFL%H|vKsYj)4iFxeczp({4 zxQ2?tei#z$dKV_Lum=Op_WL4j0k+>nEK}}_@YP_x)E3O>j%plR@CT+wp-p2Ee^~ps zb1UwA#D5)I0Q?BW<#HA4VDx+HRY0OG_#5=xfy{pS+>kh7Rcrwp^KWgzAQQgeJ{%ZL zTTl;TVFo+}cfk(KWhR#we%G&Pf1}<*rO|ZAl<0muj>$hv?sIi~C+f%IlxszEoUiD& zQd}!qdTsvMNBzKgz^aAe-WNNAG}!4 zr7;>yJA~M~dS{HGcbCXJuG+CPqN79ZT*I$Kh1Llqx3R^qfKNQFh{dp}>Kw&h!t3E; zRdz9)et^EfEqIR~p@n3uAH5b)n%0)VH}cLhwN&socp1UBPnJoj?7<5-eavh7cb(2= zjl{$p)7kefYYdeIFyjr)gdw$qZ$)v|{~$4t!sXT(WHU^^AX(ce2En9*on=Nk1r^AQ z^b&cTe>WgGZSP6A0gSm+Hcs1HMgvx1lN|tOE8z1Ac!>kJ?IoeHtqu4MX40Xe7{Cv{ zilT6$0$!i-6x23H}+H8U=o3H27M^e~qqKd(UbH7J>4`4tO60zfQr2KrBIdd?YxNc%#6# ze;GyjxJK|LZ3X;V2fXH0Vau1;>k78q^R|G$$hfJ)mOZiHQ=`F~HG*$Z@Gt&qvn8P5 zvlaX)k+h5fk>EV~KZ^3qXz*7N&*cKkv7;&qn9xOv!dPp1Zj>mDwr&*Ja0Q=coD~d} zh}1w(gw8*H2^*iaUqmruHG;Wl^Y?E|g067E%`vILtj!l)__&KQ-QiOGe+eFmza#4xM@jY(}pSE1wXzHH19Ev(U%G8xcLoQIr#R}O% zA$PuLL!PgYGa?|12steZ^5SU7CXp-%0t%gX9T3oYSK9Iq40K+Ioi{L=1)mdxfE-5z&{DZuf01qf33z7=;Dl(vixhB=kdn0aJOP~T06wjN zr8c0OfVam0UKkDdQ5||h zFYJ!Pe84!u^AW}}+)?NbcI~k301nginWYDCkaQ_FB{X2FfzW-S+iXe)=8teNg12I> zyJt#bdF9lNq{(lh4jxu3XXP>}A(NQd%vQi|lP5c5?gf#WH`2+%j6PzkAx!H; zI`glRkqsyq23mIFE1)*S`eG1qP+zebFGj4n^^ecA_g9h&wKZ@d-NwO!FI{tacW&)% z_$NBQb2@x-WLvma>|!EV#!hq}b_{wDV9=TSFZ{@PmLH+vdU{p(&SXk2zGvHiGwr|W z^4^m<aW;=LXkKi%siU=MT1#fTQHVEUz zoEm^IK26sav5C7l2cercB$(qvc2VFocANC}xfcErQir%bU&F3joSA~mO|W_ObCco* zo2h38nr*5Fo9(|RRA;WM_)9{7OCz&aL575YA$_`%PZb zEl?~fA{|`FmnbQf^3p<~2{xtBZ^{)bUd_@Z$0rIEP8PI;-^bAQEU>lZ$sG23?d6cp zVpGlt66wV4j+D-=f0%>}=AI{zHM((#*}jGo(2bHc3xe4|hiPmudoWg1t&c9@LxlfC zetx_-lJlq|qECrUNqkZ`Xgy^Y94`fb^B)RQ@Ra4&7%8an$HqYXXjj?R>)P67EyTw>Pai# zesw^^s}bTg`u~r3F-kI>LOGrt%PucAAEQwCf{%&ZqIW1>PA)9!5%Gd_F2Z9<-%|YL z%8VBx$Rf0_mHcbs(qi**l`w3@Vl=*x4I$pjQ6oo=bOK=HAxj`)$OsxH?^q6foT~;8IVO5>CIZ{*OXyv1uZl7l&+Jzxuwb1|MaumYS!5IuflKBC- zCM9%bK?9N2@1z)RqBWmleF&wanvEXlZ#SQL9lH@VoQB#V2^pimE}?*(t$n%MP@P~) z=0TG*g!E2ht$~l&4eS#JC&)VXQ8u0fJF_VFL&9SrN6$}oLh*J?QDTYV5PUicSsPk( zg{Ol+Sqg0OYQXU$;)Rd5m!LXKKqb3@?*{gs;0}BY+852ni?{{_>As1DNBUvCqAI=M z@VI_huBhtF?Dt5hs zNwc_`J!MK3hb(wFj)_bhj&1S@rE9QYvTbs`!$s1}(VqE{V9bS{+%Y)CGMIQ34hZob z|J|p%Wq>>35sQb0NiQrCU`^&^>=Iqp3fED)jVi1^ zbl3HV348}xwduhT%&K)39k@d*oBm&CnlW}8od%}bo@T1;shRg+)a3XbwfsPf89CxE z$eE3jI(8>_fCxBI$2sRw9yB`4eK}8XHTxa$i+HMsvj}k~Rx0amL=_x)!;26cZ=IUd zxL7A41!9&vVsB^!@C#3#8@M@u*)?pKlYDEtZFo8!PwnGA5Pm#m{q8&s#@$1=1yr;9 zxf%hMVplWP-s1ZQOOoSp4}@#(zw9N6vB02Hi&!yMBDgOvn+|Gcz;8tH)eI{#Di6ED z?`ZsJl)#@tsob$#=N0Hut}B=+_C^%h1I>B~gh{i^inn z(jt;_1X8E1ngBU8TR`lF#oopIqsCKe3HfR2mv09Cy zBHa%OhxObqE>d9P^N#oq)T95nNO2?DLq4(zj*?Qs$g^{FS(S%@wKsd50HL{a>~1 zO5@_@*p`uYWp9kn$C~UNr7vUxkHF0`qJVvi&JElYzz$oT9QR+dD~GMtE!D0JZbN&r z!Bc=C%{BKMu^=zXXaxuGsggF)x){v&cmr!!p&a|LG@g^Mh zc6mp<6L0)GVkN@XVKN#c*5SAK0P7Iu!cF-89}R?d!~ctcSPH7uKm@6}j^ptbvdO63 z6InarlJn24$4?>=rqS^@w}DuM8m!q+T`>?j=~2L)7n~co0Kg72|FeNOjO8;%6MhS` zCI&*e=bFp76=OaB#>iH_x?D@=d4Y_Ow`xq@{+c-(=23R;VI%T71 zfEo}IoiNqQx*m0k!1_c)FvDbunz&6Wjj3?2QW5RxIUGjeUjWA}cE%A&7UFnjWubPc zJEnrr^=kagk5Kd_X_QDX;oL5Q2R&fVSN<>k1J!p>HKl{_#2LNL(sXhGRuzFh+e@O+ z>;?Nc+@G+TO_Bvc(@?CZ@pJe>zJ4XOS{JxRJ#H< z<0lAaiZdml7tLfSaUO7{j?7EAuO7Y2K7sFmgotT_&76I|?muWM1bc}3zZCtV=HWg} z1;XZmM=v;oKQ^AcHIG{SzU@D32+vD4r~Etfz?yVwW8F@xK>xuFy^jEHR&j3NNdRs% z4<{lV6Sg&aUb4^nI7!XJJZ@*k>CXk=*?;dpz#54EKzESN1A2v3lQa0kks0G4{VZfZ zw8H=0IWAV>yQBAP&sP5KF_Mw=y%QhddUtWc9C$ooa|)ic8`s|$vzOy*GCpB~IJ2wQ z_>iS76d`IHdnMk#D}7*m>0YR)3en(r&#CmfEWF#-wW4${ax?t9aCZP-Gw|AAK&6u{ z^+3U{QRZCu%@^%p=BswR@_h})W89%Rh%3DY7j=Y>a(q%lgrH<7eq_CTiG$u~{I#Ye zDt|vguh>Z#xa6be9L2lY#W;DhdfUaAxrPmp%-ujS>m0>8+r`)qR+3$84bx|syU`k_ z{-LPmZbXz;F<2nR-`axZ90*wO`yaS2mXt}4H<>0GSwL%FO4eqjh;C_$V2IswP8lY)M& zgFZSS=y{Fk7e%7;($Z-34XdJ>y#<*IK)=?eoiJv{-S7q_PvWr3;+FU@?N!YqXdiYK z`fsDrC&~6ZokND1ihV9NQ$NHgqfC`&6|hUz--OYw;A$lMIG!E2>OIAFXFXP?ly&R{ z62aAcQf6j!f0W-ca)h|9IU%fV#x#5Ddr{5aiG+d(^!_IVy@!LoOXcUYI6*%;N6@RA zvFSkn^eptr(dfUAM)wMlS)Zb-$kmQB6#YR(UnnA+G2TI6einM0X!Q1yUtwpIYWj<8 z9#YG0O@poL)bTB;__=6$c>CIVL-stEh%=hdnd&* z^&xDVk1&)0UMyg!Gmb7hbWE7KXRh7saz&r3=zp3m=#w1u>&`;Yibn4kjebO6vSvHz zofJJs(N&%^T07_$o`wF8l~J^BV5S(xJF+V*sTd&jSO)82j77>+c_vK#MHuZ0mhhH< z#%BLfhMcS)AT-k33sr~AGs4sgm?$vy_Z&rx-Z`PAXAyQ;G+|eOun6=eKM7L}2fdr3 z=PCNYS%Ti)LI2}f=o?o=HG69e?E;gP>!7Q>&foHj(EhF1nvB&PUr76`v(WE}MxP9H zjKvEe;TVhKMGf*lLdVNkoF?*>KN;Z8CgwW<9ZHEDi!-AU_bcLcinvTPD1U~7xJsCt zpB;hNiipXPh}BTA2%)`G5iJ-%(0HpNUhW|NRuMn?xsk?yBmpro60tNIaTij3B6{q) zAEn1WL)VBr%oJ0b{}3RdWGN~S_W)FQ`j@kK+BO=!Lp1sXMSsvi&sOv-Meh#nfV8DL z=#QR-zVh8DZdCrH=}L!@yBX1jX$PeZt({ulgQ0}=T_HnVh6jTYYWXWib=pVwS+xw0 zuH|Ob5`q4bqQ5)S=Fk{Lze&;WQ|s$>&~wj1Kl)Bo8-9k7W6IU_9F`mP@~s2Xh9OQZ z$8_X8A_GgtY#C27_R^7H8<2t*GlDFPu4QqwDg9Q_4?S$R;Tc7LO40wW#;(jkuRaUC zTQqtvyA6YD(FQZ?4}gV5{c%5=(9yBi86WCE(v6j!6qb8H{q#0 zC}tZQmOIPi{CiOe-RC<{L+IxiPpwTfZsHdLI8On$h@_`=b^t$nNJO)}4cLl+r(yut zz7@rWw|5I*z5>ovz|X`6g2H(U_#wthQdkKq7CI3FI5`^d4h8&HN+xZplP1q|0H22h zLV12~1Kv--BQby%M+3G}z$X-Nx&r1qfPMw+Vgq&{;Gr16t#3v(xpJ2@xvv6tQowJ; z>Y>S}MIiEbVkBde{{^EM`Y{G@Ry5%K0Ceu-d>?|tY%Si$*$bHbjQco`p1}ldMsoNX z(&wj(L~IuA&sgz$dsw(lbS3{5yYjnO`MlOTJ#)4-H*qR|pV@12MX(3sc3^*JpMm{C zS=Ui?jcs-|AnAC+rl|+6618NE#~K4p4Z!3aJDL2!M1*rP9(sVqu>OxIS-Mrc|BPJ8 znS{}zGx7%0zEuG^SWrzAB!ttgk@UywVo2|zq^}m2EMw4vHm?t>1AMDI6mj}_dg*nPJerWsQrD=is|p5n8c)++TR<{`{D-Nr!@S| zrXd6uBs4Cjzs~~=GG<5hcl7-Q#l|}Hd?7{G_?Pjq&p3>&`tB9+SgV(uP)I@A-$^O% zGPn>s>#!L-L`jG%y{M?HVQPxcUSq?3oTv&{B8N}8U)=<6`Hk&vGsu-r?A&KLiPBor z(bEzaCG)+3-Z>3Zhe0@MDM`Vs!Rla}sFpM5yv^#Z%{tmk?y2|z#xQg#);%Iq%P)I9 zN>j%|zqpuL8J*<*%x~wN?wAJT+RV+>Wdj+VkW{4w}Bh%R`4)$ zb0c`-HAaTdGM6)I5k(>K-hvaQIGHMA`!r$8HE2JmD1}f8TTI9!EaLbh%9gFLz@c6- zY;nD&Y$2R|nQ2c1+ZdlhCu5I&>G@vcX;tm_7zy(kAMnSzmR>`)7}?*gX$L5mu3%Fx z9hez6C`mhYvhp}Jh@(-c}H&5DS&_Ydufyt_%o(Hq;{f3&<@&DuP zPoSf!miBQtAqhkvo-jls5{(+JXpEvEiUuSN9q7gm1Q}IO1jJlLK}`@9F^~juXc|ya zQLl>gd~pPtK?2Au3aEgh2%>nJIN%5umHt0Z)j2((_rBj+zxA;e=`-zT*REYvyLRpA zY}=q`xm3zdIjD8VXi@Ol#6rINq9YOArJRiyc@aHkHI?pCbIsdch zQqEHfI0}XVrF1)hEu`>8U2MRGu(H7?5&?I=5MRnrUs0u;zKWTzm^N1Gw2K8622BKc$@I~EkRR&J3zyq{R8$z6BD0Uy`i6SDx;HNL(%WF%qVaVPW z7{=AUdMX9xUowkaYxw(`MJ^SJYSA2cXdy8g$T9HAEiv?%8eR!6Cbcn@*B(D+9~g_~ zkb>fkw_WCJt?CZAl1(hTe{Bn17tZ4i_rl@3;cAlPstKnUwJFGv`@*JT z4M~;9b!Z(VHC)x5eBmIpr!I_XnYiE%R^*LW$>thc=GsTbX3I0J@Ltl$=@taTjKq58 z5#Hb~-fGl6&g>4YgK&k7x_e0s;AOaj@S>Cd1Ae{(-&hX8xN@Ax=W6NUb^8MbQe^(o z@qAo#5bi%^z8WrAum@tY(Qve3J@l-qk1jh3U;IM+@LW$H%C<62>EP z>JKi`@wr$}nY+8c6iX|#X@?u2BO`Xl!}^x%n_(-tDnm{3^&A3)!yR+_PiM!@1_olz zzkj(Zhs;&sxa}Nd<}-2n&llKN%rU&15Us@Ii;l3opTow%^1Ac#!VSnK50)2y@p61h z@^lm`Uy{ecNHJGtxdQg@}WEB)6(KkZ@mzwF>=mEZe%PxtJQUC zOE-L_9_4-90rJxf8;48p*aPKA_V+l$o_po>FQJFP85YzJH2JI7 zHc1NWS{usAAQS~0l zf)n8GIcl4|`-QtVUvG2wRpoB$uOi%i9qoT`Oe}YUk0o+9lnwm_=ngfizgPl#k^}l0 zL zCo84n9MI>~xoHyxeFNe1U}h}nl7Agj{FBst>|u4>Ay@8+*Rt z=wd8X;e*%YJse@qZR=tg)TNqtb5Z$$JAN0I)=C?mlct2Oh001B`lq&2H+&gk>2V~q zZ7iX!jwO^v84dkCfI(c{hgwFL^E6~3b2MI)9!XIaK-thQg4Yv#P!OXH{jx`68~UfT zF+ET4a`FVPVCxMwk=0u7YxaUj;9XC=Suqrr@gS@l;{Y>+z_eL_K;NkN8>#axz>!j) zC(+-cN&>3xw;|@w7^#lv{>e6;=!f=??nM6x(s{9hKK`MA-sOP4A)-)pY83Pxn4F*$ z3%d4^W9qzvf`0W+q4Z&-hIIbJ0sRgV1(DylCqn5z3CgoGB9z{8Ea(H6{)zK1 zI%4}!_ziPl3vqw|_eH`9tlF#llUwt`uR!;u=rG>P**E(jPcZ12&`ykMA@+u2NSq)6 zJP9PX{=ht`sP8Ze<7Cn9TpOgNWkYuk-)4rm*&W0aOY_8ou)A~WM!oN%J{C{dU9%n%kJ>a z7gV?vE=;*W`>st{wBr|^LZxpki$F`eVq<%>|46{`Xi?U)MH!e^L1TZZHYcO=k}-vW z1^>!!Kio#?-kRUhi~JWJM|zR&L#ydvRdq#W*c}X`_A`gJNKs_TlgIx$n=(xCMOPfV zuPy#CUx9?raoxx&;KG=3|y}+k@7mrA*Ex@o~ehB*8x({*xHSAIW1jx6r=JI z5j{BxCtJFD967NDpu8;iZ@_ldppiR1wvlUu4+t5+3b9DM8PbYab<3-@eQW!fIxW{D zxg0UuF{XWkj{Iwc=;dD3%S*+;!}4`Na_Hp+=y1^_9YFIJyjzqqx=+g|55_3_a_UY9 zTWBGWCW|$(CvT?ppvUf1F8`}O!?vph4^X=S2XjOxA6LR1Az%dNy zz!uJ5&`Utm-h^30!(oZFLl5zG?Pz|6J{cR1xdeSvK`}qQ6e@L`RbzuHL%qtP-=sQn zrVC!qJR7f|x7N~3;E_dc;=PpT?hO2xk=;IFP+afbX z_t~I*2-+h7^x|VdrvWr^|8}0wE#q4mBSs=GbF(LLfXfc6Z@_DY)jMzuC=ypci<5TK zTx(PFl4PjMv#u021QzK3r=hOEk1Zf67<=-VPPiRoIypy&N$E#P+@r&M5FqXQ7upoh z{X|*X8gAIJ;r2`J*NU=-5w3x1di-}wuP)tsY-7yu)46E=634pUy8=1;TTm+5^-H%l z?TAV79IOch`x|%)aYJ1XN~$(?3|KPs7YGcjW ztE4g>5C0|S@KwTv&o@!9Iy`c%&4t%h`e*G_F0_O@c5FPp^L@$%7F{{Pi2MWPw5B?= zg^<8Qdr)C^K)$hABoM!xUqz}n*_yXaBl2xUDRZt>vZhLCq(h2BR%`KeiVp2ivZ|nC z$42BIyEm?KR*44X7>c+>Vm2LKhm1>gPn5?+&)SG*5b>Ch{AD&`w4fmzoeIw91g{kK zJ*cQxIj9FzFZ_ZX>&hHOuItVF6|=pG~@L3LP>Ayt17xebbB`u;vax;#;9okb&R@H z#;AK@F^aifbf}FJaJy@_`m~fsN0HAPDlD4|-hgFWVcLadmWWc(nvaxa1-rpA9ion5 z*^RRjB~cW4XuKj*0-(qT@gs`NdwXy?Mv*^wUlsXtRl9jZgsk&nNI=#l4q0C5treYX zll35susuv2L)J%uxSI4UVlPE(rid1-xD<4OJTCeSJu7LiiKye$F^E%b#A6lt;9#M1 zGc*=--shm6hDH&-+B6&Wd)Om;pgIQioMTaKMSet4A63+@4(iiv3{Ve$ zRHJqkItz$7ZY=XZ$IcWox}-k}=nv52_aGd~b@&WCG8zqRXx?T1NoRDlY8EsF(eFZf zjM@T#An$%0`Sa+mRtQ9SxkN7;FxK>S`SAZ|X$B;~KdE`HBp!DKTjhanT^le7%9by?lqTBqC zTU#I+1fmgA&rYgri7=9tx``~9R7UN_dioV5yh)Ct6;;qE} zhQ{}cY6pm}orHFb@e0^_ab}Cq%0nyKZBY&W3dTQ}j4)*EB%_t4Duo7BMxg}ePLS^b z`QY?XDMlR*V?;rWy7TcG#mU9WSazPsYY^87LXOio(P1+?V^vH065%$EtoTeB{Wug2 zfenTXb{PRoxr`u0`h2-ne!Ew>*bRx~a%S1HnSmz2~ zROWAPW!N-_c-A}$yj&6$oGX?(?RFp&E8`R~;6*0`YY-N60qskexZp1~8aptmgUjnv zrR$92Y2VEZovxr23i_W05}03gNUCYaew?gqEUCWMfcuj$48`48+OI<-4QJ7N>4_VE((~P#wqZP$4 zbOEg=%;uYA$UkZ}#aueJQ_N=Qh^(P0=%Iw3DYc#P)gYVD-%;(Tn4Rw_p-(}bW5O{_W{>3>Cf#shg=&K~S|NaPqpfJ7B|0#558H8^34GlJd3g0K;W}@*4=w z#B>wGo*wKc(#fd98U(ggm8ZMSJWNqRi&kpx7E0K_WSYNnhoVj)u4MnOU+}yOY>9C> z#`OknOD`+_Xu>H@VSmCwUZv)G>!}BI@&k9EYP^v9Q6i>V;p&g0-=%ikoSeFn^5#DTveJOr*b4T4W2b=@ z&t_-fbtYxs1YTBMH{SeHt$hz46}@2HMjEOPU%?ED4}6BWn?*a<^D#Z2K-TNqVEKdj z*w)60`Qza6JnN3BY6V=&P*k)&BC8FR9l;!rf2jqo!yHxira8jKvK;QKusR^vz)GHu zw`Fy|8MQk6AYV&5-IvPQj%y&#A!=d$fX)_D1rB3a0VcNoGE$!Q`4Ta)XA9*pu|aL8 zP66dKvA=JH<$6enjt={*nG#EL=y?F5HN8jx3sRL8pTIB*D=HLl^EwnCfG-j7-b60k z7LRzQup;N{KEm7^HVAX4JBVx9p9>V-1w@Cr1A#gycwr)Jd%%Vs*P5EAV8bQG*5MKd z><*Z0fSnry)=a>P6Tv>H23UUuyG+5hNd0#BuAg1jbCj~Z(yVH=FM$&^DA*$rY%0N0 z73`>2in$t%1!QQx1NMc2&5Z%ONx*t1f)x>L5n4LhqK>qwxxyIs4`3Se^28GCgG%c> zhE3FI3^+=!ATSno1w#szUg&#Oj?UZA@dTZ|;kKu3jA%U5wgYb1fs=L8h7J%Ud`Nek zlFNn(7K;5;$#~Z16z7_Ev8(}&>|EJ14(f{DjRXYgpW8>a(VTL(#1U+45h#HxFC8gL zH#=4sMkPQs@Hl6s9>3NKF2JmLw*-!Irx`d3t9Dz}arA+40!*Jwr&VdGZ;U#gG>gIi ziqud&t{}b>JyHwT2Bj9-!HW~|U8&CC@$hUYzK!rmf_EiWz+0110T%+N|6nygUbBH& zcY?Z(=dKWBfpspn19c3_RVv{rnrW_P`YgN-$<(KrKK!m`I)RzqlbC6DX1Y?9*$*>R zeK-0ct)SUW0mB=kj;)x--?lj!h{ll3I_)xok+3rzwGB<*%;p<{q62?$)4A!`%@7gz zL_Ytc+M8M0i4Xh_I2}o^zmR(s`R`{ZPn$rVdUIniA78!9G|~xpl&>W?lESllFgE1X zFSKt6JM^Xk56ZO8!yBm)rA7#;>b3Va)js&6kPl-hFz{wbrno-%*eMxV}gHR^tZ^uSMln8d{PJrE^#v?jU&f$R!VtWFU@+Lvp zg&z_dP)^xwkZ7XVUhAbNRhw`^mhBOPEd|P!6CJjwdkLIO+{yew&)tPw87Si#p%f6yrhhNMsZd`a?rB$a&Ug_A-uW7#yOEV z>4`Xd?f}k6S=&5E+-dWWvFKLJuI`hYg6T=AcSEz2yu}BN={>O2v~U{-b1PtDF7FSO zh1ZULeT;{y+!=NX8y>b%wwu}tZ4&M)YBn~pEp%1kl#NO7vth9+XhLB=-%xK}J11rS zQ+#GSbS$n;$NIG^(?hgz{Fp6_ByjwH?6A#*UVj^Wjo_`Bi3BC-lZQ~&O9OqN6KW7Y ziF9W`ne_suJw|Bsz+tMLD>e)h9J!&YKkJ)r;2v@;_Y^N)j|`037xA~z6@jCD#rtgQ z)pd?(CCumXFy-CjVJgRP4iG5@{~XuNb^wu?*WW@xJ1&n{I%B3wFu6~uotA}f0LI!T z$zti)5ln{vKLXE^LZc|<<~&l3ZAcWaeyvR;1ob*8gZ<(fn-MUnMu3aRAeaMOBA9ZV|c-o({xRzXor5z; z8QIMfSZsa9BO2%929XFk(BTEX2#mf-h^m*HRBY0t6QOY$-x@qZv2^EcW0s43SpS=< zr-yLXgU9@&j01TEA6$$&19&>})*~OnoUI_FV# zpJvazgvb;FIqzXSN()Of^D;n06JatezU%~(8uRg&R!{rm%@XgC+F)^6mwo-Im;rkZ zj#zmmvfDR(6?P{&Nnn{avKmjk{`*x3(aLxOFYeJtQnP_--m&J^^H*2k*q)@%Kj<*S zMCB9;dapFJ6Bz*-;SIdZbY=c23JfQPqRnT-B6R2*q=2;ahqQnxj=-QE;WzUG6xEpw z3hCysSY}ru{32C5aMdbzaFDLbOn7dn6W&+2E4nCo$Y4;Mb^P z6;11R&e21{E|PF3H}q4gr2d>;W)lIj1b{MaEfE0aZ;V`Y15#8j7`KSUovAxZ!h!Jc z=mlFU`UD1UPO?I4R4iV~j7`JO@Ht|8Dna=6>m+Nr{cVAK`+t%O8FFCYvs!2x$dMj7 zbHhG0xy(5-0rl+(yu=D3x24m9ezsP-C-85P8a?=$BY)#56Bx$vu?M@36d#_-V~`~ zKP%-G&agxO81MK!dqSB&FQkiE;Y)FI=VeSQWPHq%f^GBG*&sd>v2H!^V4Jo4<$TEM zEC&F~Ah2M<|2Q+_hQ)&5Nmf@mF8iQU>Mr*TFLCxusQLfrexSy7l#iQ*SKQW-tQ@L! z16d1XQ(1 z!%y~rGY%&>V7-qhFI%9#pqCXkBD@AvSK!bScffr<4tcPQsh=`rXFekb?#BlFI^DYgft?0wX;C4${i(; za)}jKu4HV9+$-QdzKNX8&6QLCN8uwKal$9(W1#){AHr9UbSixNm&6EP7Alj)tHx`U zzcV}ig`~9npYjL!wLS~l!gqrRUo7gB^Zx>MA(qWi{#d5}Eq{F%sQkSpBtwnDYZ&G# zhiyF0SaiP4O$Z@o=tYF^uO$$5u%sz^(b(CZ;)E;s69$?@Ej(PYorg1@X{#^0WZRrhT&WbcdBD);f zoR4n^TaRCCXAweUvej;k?3U2_{8>(2e@1W|e;6s}AVn#>gC^cU*8?22g~0mv@L~RY zJcI%xSg^igPOV1(VN)00IK~t*nY%Q&$bB)A)s!WrjtTckr$5tx`=rVibeMQ4o8{8` zLy~ITbJtukFZh(^N_NTJADPuMSGUlGIA-D{qiFnytKq2pR@tj603#qa*teG3-R{Sp zwSSTPAfTB{{QDE^WZTo2Om@jdGV3prS#~m3uJy$$nwt;FWPo6SY}vM71vMshE@-29 z??@V7)Kr0~ayD<;PZ!FrcMr{H2eY6vlz<)HoZA>9!T9&9(OvI$EJ7#qc8E5IzY5DR z<<`3UdV3rRtp$RST&)hz_y_7|Ag!hJp)>A91~T?vB9Dve0Lg)=dcu`KYh$;`JtrP; zw;cCd@VEjlmCk)ei39k4jG13o}NcLLzW@qmp7g@-RIV5S0= zIe?=T&}9R<3D_e6(7G&eA05ZQ z&m_d2b&>+#{FneQg{TNC`dlKw3toz2#mjGz6?+nZ`^E#;C~!l8u;N(-9_awzq3SX? z9{6$r-k1RV>!>)2&jv6X9&~QxXk?D$puVqpL+blxsqaZ>4KEb|Faqsl^djpbC1j7* z$tMssDdEnGq=cJaj4R;=gti9+&k=JFovSo9o{%Ro#|G0^c1x}1>=PT4Q|$mhakccnY!+t2n%iP`v7es8w9~22_xH)km%3_3@C`%0#0yQz4IvU>0o3w;`J= z)=>d(QNWFmDY7Ex4h4MYIR#vaRxUUp0r0wbz!Md4honqf_OMWRhXXiAZQe~b;CKSw zk^tB?9&qgep>Uc4-l%{b9l-7i*xm*_m4M?C09RiVSL7-MEK|gXGY8?9)nVY=k4zKx}*ZdRH-Xi-KwLqS_ ze^EJ{TKKHjAOQCRCi`KyBeI2&2fbfiwbSz7G%y3XAPFPM(ybha5h?a|%ginI+E=b@ z&2?6@28MBu23hfn1vV1#FmYVun|0tQw1M5nuaPq%6KydF+YcTSr&d(Jnr32lMV`G* zvwd`(W@V-|p;b$CP3lJAV}2*2+8|v<-7r(ah1nM8*b6b4cLm+Cx^QK-)lC!ffh4lm zNoubUyKv>BgO?duswtZlNgx8f%THY4Z6x*yCoQ^u_4M<@8;nJtpsOl3*u-GQ0}SRG zvv`t7Y3;Vkvt>yHn0bT&IN7MDmoyB<%pZ`Po3WWZlN$U4q?Cb$!fs3#d;PD{t;U*M zJ8O0r}ID0aFV@FU^qSTmB7f|!1ZAG*0?I4C@J6c0hvmZ@CaA+bm zlZIi4g?q#W*;!i-!6A>aeI4n-%=Qp3kjG~Nmh(AGGV+-0m-fzP4UvYrOC*^rKE)>Zybc zohyWW4U;G1U1QZOfAXXjK7I*;^OpMpd6)YF z9B4w2FgnVF$gweN7?i|WcwrubvGef2=7Mpj-okOE{Wwbe1RnnI0y1+4ZbZCZ``*|W zh-XsI!($pSM)vo|o*+ISFRYC(s-dF6>nH}VJuET5mk9p@EP-UFg$AZQILVO^?-=wVjYJ@`9Y&M+^Kfr%eqIZ&gKEPhCghZr z^o|F3Oj(tMIDOTcYbPvmIQBt$499RzaKPr6J;p77gTOu+XWf#E>r{ezr-Ia5mnAWN_>xyRb+^93hGl1!I~%)3kr^jJzkABT>F#DL$ENU;=|-^ zm-((66T8vwkHx(0&pCXpQd0A06CBSwS`OwNZL5U@9uLImfga2|9|W_T1?8v8pT?*j>f!aOj*W&QJ6z!EZ9 zVu=yRRyltG`6M72Gpj~E&S6KkRkH(Dc34La%*i{H)6{Y0z?}Qz8CI7uyHXmX0QUW%tYNkz3sga@atvi{gzSFmNzp^QZ4sV-FN23VRROy^iGm=_ z(9*!5CRh!ysUIvfiXnNH=6{U9;XXKHP(rR>NU^R(a{DaT4n1Ma=W1_3(xJcBH z)Y?%)UP{z(EG^k+&fL+6r5(BZK0b2y0zPN#?KS)|;70~q9Uj(->w)U#k}$*xF=J>? zOvuhjHqTBrpUJ+Tr^y)am1D7bv(siGN8Q-dUV5jIO=h~DsTON0>E)wqn+(SYUEAko zvc>P#6H+K$+o|IE7kvZQ-#LmS4N;%qpO9L+Yun5U46uEO6>vwwq2}t8gxj-`Piy}# zaY~*%-R?D%%j2R4fJmog5!||9e?f~nC0*kIZ|C$Tf5E>Mu#NN;Gs+#n>tW;JExB#L zF$DA_05)D8N8vvdaJT}l(tb_&G@HT`6!7PHN?{fO`y>E95)b&X%%|hPwT4za=5B^o zQZZ`~p|o+h<%mreYaixRLg@qNNmMH5GujW#alBXDtjR(E0wZ^e>sfRw2ynC$oC?5= z8x&k(Gd|+^X2w%;7p9BDvz)5P(`O5Eo`c-;B;i$dJaVBRFHS^W*guYGrzvtrMGg?c z-(h2}?HcZ--3k=FL+9PLD4?01;-KKeiO9p^k=KD65W&g7f(ZUB_1mqXoh^c4<;G|r zJ0dt0u)#w%Dq_yftmg5EzbfK6iuj}=-s~X0s)(&)5IYg^=UBwW<#DASt2K5uFi>On zm{R)pASvP)U!{l*55|>#7b07Of-4eBe|0?a28s9OY>}!dcw3Qgb&yR}mof3kQv~_N zMC8rP*`4a#fn*ca69`G>*{76Vi3)YjX85119fCAoN1I{Gi4GDm) z;sJdCOz1DrR+i%M2aJUe^_rWZ97T{-tPtjWp@VqI9s|aA*is-A0jGBa{04Xw<#d26 zxX23jm`m@*OAMmwG(g-52nHl7+hYCgly{j&Oa}oiW;LGhALsn+;V-6kVYN6He77OE zhfW9@WbQsNQ@)6qt(s{ac}!<-W^%4ATyV}wViQxwwOi{kF#<_t(@h*TJFNt5le6_? zsef3?PL{O+y$CZFBrm)r-<+-aSEjXKuV;8A1eQgfFFg{=mnYXByC+267XC<#7)$sB7o$8PMH z&kN~%sHN57*=03q)A6csTX++S)x=oT7rAdX>i!K$L0OF2RAdLQS2ja+7k^rHlPkQb zZr6l!-Ix!CF-p+8Md;0q&|uR$4ZE19J#@#RWbEa*Pvo=BH(Rx&)A!MC%UERx%GK#zvt4--=M4G$P zE>nxN6r=%A1(%_od@v{CDP^_G1R&f#IPuyAvDVL4FKHSID4Qzu6pOBtNSGEo74WKZXrn_&kf5;_d+49H(OM=jq$v^T*kGD&&VlvebK zAw0BJjsC7S!j2d26L#D!cyIt(D&8%?V~}Y+@dgN93@1*E13XLEkuyU94Fx>M0lZOL z=Uf0f{JjjI1A?C=@^_^dQI|)xvbrf)6Sh764qw1XOJjG6R@R5`EgZ0;Xj=vZ_a=f> z60EO+9c(Q{tx{j-J_l^8wr|s7z+M+HD-rBWf+Z{1(+XCBmI0KNI$*V0%!^~dMhn>OXbr%^%aJ6>a36rRn%I~ZYXDA^b#;f;c-GE76ep+cf-{Rc1x7tLA_B4bcL~xa1toCf7B{5NHMX@T+da6xa?$GVJjDQ z*D-h=75WFL?17v&rU(reIW+86Ey}lPxRNxu5^31l3pBhej#5@mmPGxyy=K(&Dgu)S=LO$XdqmWO)HM9^#u(xVY~IA{vlEB@5PnrbOp(q8F&iy#9-2^ARuSitf-a*hiMJkc9;C z`mqzsa=dZsN$3$$bD>tH9d8O}i%6s34#1{b1m-TkCfoVHIG;7z%g z&AbR%=zFdHc80LNyY@4d!90qIxJ*5_*Zf-jPeV_SU1>MCR4pQ!g%6Jxm_O7wR5>tR zMYxLoX~WDTOozl8GyoF{$v9<>Uvb7y7D*^@aNLS>nvK(zILEBCTjvH2SK2|`vmx%a zEl@mCn$q6+7u(9@C#Pdvq(t5|nG?(s1p zlj&SlARA6L706H(-hz!YGlY%(Vdh~L&xQGx+PF#F>!QYm^M zhh|X{Q%bVInAYhx(2wpbi0h2(_M-#?JD~(SZtLI)uaXiRaTkA*Py#VOp+B)MND4+f z+tGs{56WWU;op`;)2+cLD9}=hXCP-MDh>r24y!K(YAKJ4`lAEF_OTk?MDUTsvK;Dx zvTOxo>^Jo?OeFQT$myH3fqqt3xA;-W~=Wjo8gqZQPIWiLB*wfWcTLcVcr+zSZ<2)8o@u zVw?5<;Zk*~bZu|Ap(M&^Cyr&wOpYeEGfg z!fg7elZJp&kNLf2qMY!Xr$A_?H5Z{duUdqrBN_)0nloY1(ImB>u0nGeY)$ZvM4?$# z0-^br3g4xQ(^HMf9#}fT2{#j*kESV33UO{v#JQ6=0~P1DrKnTT^GaXKr`cFGX; z0Y?GApNS66>=wf3u{O@5#3@X~X-%AOWigu@Ci&D_ib}%#0&G`+QkTFsy3I{44!eDf zQ#!nyVGxeYFnAHKb%p_l&JiFU&KU+g`3{pcW2P8jQUTXjW?C-<>>j$u#B_dY$84Ab ztX55_ybfOBd9Fj;7c*S-kC-_D?KJ6d?3YR(51o6N9pLe&=0%3-i$AIAfVA`zt2m#) znHG>~{R7F6LLMMRWI6zH2#CWM-FJFu%v6A%On!;_`8 zyX=_&`#t6XbQbe4Qe}0!Pr8FMzozPO`&hJu2wMrvV`n&lBL#!f=hU^IU)seQ;Mo zp3RTV6SIe*?O78Qba)lDE2o_UdcG)K(eXCul>}`_0DZey*%DKbp#Y7GuQ~eRF-Myu8v`{+8mA+o|p zSU=C8`yhM8$;igPp<+y8EP8VfQu_kFJS?U0v$606(0V{@VPDV1*Z^1IV&<LAJCu;8L(Hr}j?N&CJ%I&WMXTL4JRW5Aye2GAL5`Aki9_0HO4_+LY4^ib3^tK+#)MEl>Jn4X(7g)STLFjNB4rJs zwU@Gv7jK~Gb9e*Xq@f1^8xzY~69-try7U+PmMk@K6-YsJd!7Iy{=OhpYGNh;Srb1( z>x26RFd8%}jKj+Uo^dMLx%l~WrCf=aH3A09Yrf|J`@H7%c-4Ck??m;;Kd2tM&`=mT zD?+!;gYxlA$rG$?(?Bv5jxo&MQDvi*r?Rz=QMT-3l?|Z@DBI+#rHaKxeghdo*|7D@ ztm(Lfn75RJ{aTh{rrW7dCTTx5-gZt@*ETx3mR+}DLfbGxa`qWkdCnWz&h#6QB#MUZ zOtBf~P%6w+JWEiR&ae+z%l@Rk9B;jQ*Wc?)d6LvpKx^qISWVHFDe4vNpQN=k3av}< z^@LgqTo@xpqAw`|R^XF3VTWf040SY9+oFd7Mj1MRU@s=hQ1@80PyzG>3it*z9#USY zfCC-CVg>ZrfNRiN1z$-7{JtoLyb#CytFpMTtICL0N9Yzj=51&cE|8&1GaP)gXu&?n zs%XIt>iq7wOG_}28Qzze;oWf=-UvWw!NH>}LE6Uxm~o!~LJM9L0cR!f zw;&F$JMbJw@2~dj?TE=>;B`4n7TY6Z5hfh{?B!0qk;7B6mg1!-#BC5t9A9C~+HDIv zx)V?aY;4OBTx{95MNX%XRtdsojjY814Z2Be88(Tn9n56@te5|T!oe-fF5KqT)xxeY zw*Kyl{R}Y?#cO^?Lk5QuXPu2kD`jFQ)Jb_Gu&pZEGLOGb)QdeXuJ0*h$PdRl<18`w zh@G&9-%jgfwVI+*lR&busBRC)39k+}6z{w>=z(!WYkR=wM>_L6u31E=Y9FT_T!{v$ zUwYv-=u$rq!aLXvSZKnLbuw3$OBg1d06^COpI@3TdUD5Ei!Mloy$0c+)R_*i^DWcz6nm>+7xV?BFh64% zgqdoBU4{ciZ%)L3^#B)EK_H{XBfgRsI**Jf$kL{C8o<>C#clxJJOC zG806TiUt6m4EYKzeDHzNWq6zM39=l=UZGiS{0afKr7ZzbM^cD3~5-y9K9@qcvk31o~;cswHGSiqhUM z8uTILdIq%!p4#L)3U`IEKC)|G8CykoSXZ z=paA`?@f@2D}WjU*jWKLiFT%S0!?t0ZgK!?MfQrWwEYuX?5LEh%rfR4b;4zC`NGcyg9n%{=zs%pH44ZY1JXebi5*lBL(1+ax zvB7xSV=ya7M8eWeB4KhJ==Q4%gst!06i8RB=C%iTe@o1_-`UqqJ^rR1vsqySKGK5Q zYKHG!G2btDzV|oFZ)!IA%kNv+-@yA$3+S~`Hxs3q(WGl?<*2UdRsDQ^%vaum5fC3o zr?x{@%gn9r`V&1Xt#r@I1DT$cp={5}?{mE?t&ZN6p-$eF2fEbvPOcx)q`qHDN&W4q z?)u(o?)rXB-StD7H5PVlQgxocX??R9gYijn;~Bj6_)h>*I_^FG-?se<4t_ z0gxh;!yg8X*Fr?dFVg$DUK@2jC_3piYO`?FHQlKD1tsvT!yFR)1co&86#p~hm`xIDvfrJ z%NUJgef@YSs&6;J9)kZy-3qj}s&BcrzWs-a=IC2L=-ZFBzF}6A>f8GhMtSnz_tg9+ zee#u2ed`B(izr!IjFLg&oaaNJaH5k`GANv_WMFgTlV(h5Hf_8qPTLebqB6Y&KXTho zvWVPjE|FW!NNa7H!)b=K> zm3uOkZrrLMxK{4XX2H#-%H9q(dz;|bv#yu)=RE=NHvm;B-bx;C@#IH%ym7)9PyR;X z@$e{*|6kg)Ug@D#sA^?%FNjOjXqwKgZPxTQYS$w7wqc9h+m=9=6f~AgHH@rGu*xwhAqxOw=Q3J=jsDZQnBBFGcO!bllO(bO_&)9zGui z?f`sVSho*v6YKU7?qJz&84|T@k@g+>vho*A&9=Rpjg;Z>qlKH(Kpinp5c8(Z_Ta_z zvarCw&r~?ItsSnLF_oU?mUbJSuT4sBY=Vt}5u~@S0t5o%O^rpVc~@X?GlTsd^tP`8 zQE*r)e^3`C=VV~e=d-=_=kXhS5lS2DqO9nUnxy$7#12ma?Q2}T$%FH)ki)^B=}gi) z7uQ^g%o<688RVUTnK1CLHsUMpS?NF1;~$sqs$Q1I!3G3l=E^K|^v+k6VL1+2;PvaM zpBK}IE!;21fB3+dFz7W(zh#%CBMu6cZKC1qzm@kDUK_P!!qU3}&)grD5_usc;n`wDQZxq`?15!rK3GaXO45)F{pb_D z#otzD^3axk*U|MhW^&q3;dg{Y$O(OkMSDmuf@I}h|LiTe_FzraKrc3W(vY+>D+gQa z4#VMQ%z-dC8Hy1ykT~lb@C-fq5;=gq1XSWUoteTgY~hXVI~WtsB_P>@?njB&Kb@fi zY$3N3E#$zw^uGSKJ9(G6m?i;-ilRM-508pCE`;u|iRfHIg_3_3GINFBk5matu-)jG zng?cM*vpM|t=o*V5OZbZqLVRuA^d5s48d8nSX2Yf3hxkW`9`^^aYV8*m-Ca-t@>LT zN5U1_Q0aAz2fxV4Gs(%*Hhtc%tTN&38&3EUoRu|Vp1|0@ z;_Nwq8??+i>SfL>w$0)!usG70ien-eGarnxUcO$Lau@QI%BX6MGaT|dVk4cxG3J0K zp{1-(e?k7Y)St9m2{vbJ{?YF6yrn(zw{KI=|DSjryp!S)JOA(W*bYzQP3Vt(-YEUF z3x-ii3+@p#XzLh7yB=s9V>+2={}41MbX}HYofHR0zMf3Jo&dgTAI*Axq?QTC&q5(M zVCIRLqKxdX*6i=UlG%4iaNPISqjugffgN9 zW0SR3x=BS(*gyjabYmh=e;X*&Q!HM=h6BRkQv@sHM!`bN0D`!Q0+=&g01MhV#GU`005-9STZrEv5ABK$U4Y4NDCk3OG~&zy98q^RbW-h{opeTG%NB?3w^r9S=AafT)F^ET+u)T>uN_3Lr%N zWs#hsNdTm%cOqb?#9BBPh@ng+>?OfT`(lWc)aMX(mDWOMn=lK%!MX&(zBwhXq#>{# zCA~rcZ&twHAr%tBm)c3kQcfOZ18=6<#jK# zn?v_WT@42!81U&gsw_EsHN&gz5}eEN*rBjSu`P24J40!m83}OqKV*JgV)FY8X3ELW z`cm@y4kbZ;H#qs-qWOJq7jQQwaRf&v=84*z%SBxBQ02kxgE?_4{-dCYHKLVmxV{9nqK9+TfIw(L+o7w?hsEx$?R zr2Yaah}rp+sn($enVYr zdyhzVnY~Bj;|iZSWIp~Q%HMmu%beZ`MBuU#m!0);A}+h=HKYa93tN zRF6A=ynz2ZaqGcTTvp@%YxuthkIMB?J#H7{KL+L=8mf=x;I;w(v75|8BlOWc+^)y} z!+2DIN3Qzmx%zXO{+zBqXYj|Io`)ZN*%3e10oznP_MRh_k!<9CFh2J=>=drq9PuQc^A}>IGbu znbTjBpV^D?WA>(yKq{`8Qb-iCeZz>75ulUSyubI6UyUp8wF?%02d;eiQ zF(5x_FKM0i z^p`On70Pz~G{zYF9RPN1;-6Lgvx|SW@lPZF ze91pZf(v8Z$}vVG3N!9kWZX#l8b9S9lF<0a7~{5`smNvfigHLh?!HLJpWW&BV*BhZ zsd(fvZu>-TpD1stx4Yza!Ioxv`?=h%C_heb0pKzw&!+P5VtSH-Y+sRSUo5EBSKAkr z=#$B_8|;he)oDn@tmp6oWGzUtFBUcE1(1~tAd>)m{6wZwvVB3dz5=p70kVBDy&4My z`SF4|ybxsjVo`%$09lIwIrA zo)aGgzU-en`M9VZ9@Cp{hT01*P^UFAIdN|rZNt3&72~0tg$>+tDuZEpYufA+Aeo2& z_*YcpRrJM8_6sx^_npbjc8~j*EuiF^k~laI%q5gi}z2P#5XlWj&%W_bbf59GHFL6c%OL zFn?lYP_TId%#PN8;eJQRc7VX7?aU!H8K3WFBaP18B={*{=!Vhi6f7i6s=`EeiJJo$ za4~*5s^cg-{Q-R7&w3EBPLq5IygFWU401A_BSwZ`-VNk=yD8n-N>;VT**oS#4PYOB z*5gM4dnfH6Noh+!5(MGVUA8;%6#N)ada6z7iKNt!>73EA$NjAm+?Nuk|ById7~@}* zneTH^TnW4jnO*if2F8r(^)PpcFbA@>VfLD_sBI6Bgg_Zau2+TkAXeE19)~CJGVA^) zBhybK3+leE>w>ZzP-E!7*edOTSgAj4KRh+O4Udwy9)A~MXL?keLhbd#<@|8UYNF!% z-{t#H@%>`4sWtD$CJDI&dq!N6B(TS0{#}xVk|bkDT#__RqFI3EdlmNrrTL5q;4w5; zDB5xIVIn7X)y8w8SW!QNCZl9O{yisJ<3oQ<1Ni9+EF~jo70!l8)*Mc*tg1QOr0NXF z?OetA1UT5x&8EHB`ncrJaER+WY7VDVVLe;cSpDu*P{V3kPgr~pI7DMFv7W{Ejbnl5 z*6&s(;MMWH4>)=He$C(D499o)>L|1mrCS6P!)E7vU>N!%qF`bhF)__4Njmt1a*(t;BI?_3^1 zG8CaWnoEpaXVfU49lqV9c^t2K`2VjZxlohspejeCybh`VUSv}=$un_DrbUt*Ba|Or z%F^dlsuG==Sz$=rwdXGddq(02U#ATY+G> zKkId*@%j5@&uCtY*+o~3!0vlhm^GT^WqS5O{0PS4-o$sWC&TR3EIo{RLG+tFhuRIY z__Dq8@gI;4zrQou@5P~~{O5W`ZSak%^{3-Lyz)>8YdN+aajiUZsw;n+JJ5bxX`t-@ zSN=v*5`_I-@tIL?z%C)ko&5)LNjBd{%-SURuVdWX*)la3Nz}ShFIc08?V{v^Y_kn^F-r{5ng{C z{dz9D$SN+c2$bPv^?cBe9SZTVs?lYB)U#&Nv*S@Y+t9zmNCL)wCSl|H`nTDe!4G>g zG7T7-_063pfLYp&^T|C#YeK82G~_H{hT_eaN9poP+Tv4?B zDs_390X6vVli9hC2HGEsqO?<#)rvyB75ZLQlsPuaXPBxO{1EjOi!#JUS&ov18*dM< zsyUKo%q)~RFQuKQR#G~{evIp&(y&CCQXeT8c3AzW7Lu~AhTriYk~og*NoWKv#LC>l zZPtpZ@)6(2M}cmex#xhn+p0RfX_73Rs2F|~wsW&pwhr3s--)j)vpnmjP{;YtF$<09 z&XsKujJgBJ$2J0GoHzd`?qjS$=sVnl;XiDZs(kHgVfc?wPhpj3vsC4E7@uI^X$gm9 z&utgas&mpK)%K#IOjVSZ9h4@Da;l9|PL$^os%?KWIJ|CkctiHhelGNq5=`E2{Y6;C&zF*PV$T8z~) zMjiJCpyorxnuS+~a_!p@NtKt1o_$%k!BH|U1?Xh;d`ZT^C%USa(=;VjUUQ5o2wjTm z(A05SssK#{z?k_Ys@wrFYO8T~EYPpm!5iPu6ed+Y6q>5loW4b>`QqVH&CSuwNi{zV z)qqS+mH`lD$-S~9i!9mk_bfRdTkM6rQgF@5sKdZ&IMh~idqfOD+7Ds~GX4b{FS+Gw zZkaK;oe{|`>F@2s>NMoGOQ2z$JmCgUH^fhpjG0@wvpU-!Sk-8|!P)H6JK#p9u&`)Y zD$hbic#6kY1O`Q$lLOM6&?wh^H#xmHWCRAn?$+&^+}u?>e6&%!1N^mHn%PfaB|ipl zu>yr_&dVoX1=V@$ec@?=mU1DwKvK$5^nSq8vt{f?dD=}zX35hHe_zVaQ&CFR9$J`L zwaUo;n#BQFEc5^eI9YrNkwzBl2J^9I@hQe0#S{fM{e2d9GK>3ki}%MxE$rk)lLQJB zLceAU6fAXcu|TmQ$J!`3nyaACm@-!*xN5f zN}BL2b!55odG)f3Y(JLUieL)JJ>Hf3n)VIMJw^T42ia~JwT;LTQ)~+9dV2k}h4f=R z=G6Ik>??jy{n#?RSO4}twsDQEJ*K?ztdsBX2-{nEP3I#83(uk-%cS&UeP=yLKXz@c z5S8Q?E`&cY<+m38w@EK=5hazI@Qdi9%X_K&EW;DbRW(EL0e`hf}+2(qPaL3gwsuZyf5ffnno9?Mj z)9rAg5i8uZ7&a4(xmM5_eh9o3i1SnQ z(&gG(hB4M?H{H>o%PmRTbOYsTMNwOlwP%Bk^3668;?XwB14PlLJBpGYMJcB(2&AnM zqnGuFgYu-JoMNLqL6o*|C}YR3z7D6zJcJ;sB^+9zWn2HQ;0@BU^>Og}E8hG4wQOe) zPd$MsRSy6!bSkh=xFB>AWIZCPn3dwdG*_7EfRP%64S7pOGEt4Pq@)3*=1LgFL7S+YTMBo{$kqwav7cdb7)C3_^+k9Ko%HyJVCvU;PlvV`kADSII* z=z27`rfe8dO}B+El6Cfz;usAKW#c2{Ia2dnq183o$@2`&b7w!za}@LJAD`#^KV$RU zphDC};btmamIL>Z+Go>-YfHGX@o@d);O+#Ro)0lZVhUY2mg&zLMzUnT239tQG>@RN z#U{TF?&AIud?A%T2nM;&2#>$N2bGEiP1wUB0JlX?MJR&_oiQ-4Q)9Ck{mbidfeo+v zqU9R6R%&4HKuT%GVE9y01Fx=>8raxZxp6(lYJ+{zPmJxw-1~>JL+AE1c0lm+-zc?g zO+P66f(Fdk#Kuk|NOVRiiM}|g@_3z&)kPwl!&aAE0Dp8F+7Xl%M+)|-@a1pt6u<9( zgtpe_pGtdOX7t4JBuu|c*+mZFEKd7!drtuXT)|UV>N!i3fDrk z%DuawSXJ4Ly~>Ig5U}!VzQQxUs_ax+`&-osr87zgm0t30RYqCy1M^V=qxLj{`5z*? zOE37Xu?07Qt2-SJ*$%Em6-m9UXH{VLqR{=2Rme`Z+RqIzypWxCFi0Xhx2zD^ndMX2 z$-e=z<4%yBK}TX`C$wL>z6I-6i!jbrzzy(x1aPSID~h@Skd0tRSkmwQ$!kbK@ZK}9 z#XziB9{G<#gTUJrZZu!2`45crmjVozKv1%a;WyN5soK0@Jf zIRckr0?Y%Uoyw1N&F*8d_!-Te>>k#L#bjjXkbiE3{OUyVi;;1tD@>J4Ih6!b(9kOM zgs}evtb=Uen$?4CDkeMZqG31%hF~u&5wAJ0(g81F6dIcvbyHBooFsYvl)IB;bfqJr zK9yAnH+ceYmmv7IgoEf-O=ldUxwdyE#B~s~aY%OKW#C}ZDyflPLVE_=8L5$3%Y}n4 z_fZbsj#Y5MFA_L-D?*C!Q8L9sn>(rTh%^-J6U&lj!L~zaz7~f9E_hc(yuwE8K*X;S z5Oaap_)7fx$-xLZ;oJ{MqKh-cb8+(tOq$$e;HEv_U}Gh6!W2$~D=)T(na=mr{Z`ow zA=@rK^LW}!Oi91J#A9CIsoTKoAr&686*t%%;2$#DWoF7K)cwnZBb`Ag+T|>iMjWE{ zCUAf`q;e^=V0aOXuiOyT;mW47@cZY~QO`84P z2I2MEX3+1u5DU6y1cEJYanUy0v z8rnltsp|W+$w{tZoGia)sg!06$OaL;8|>2b)y8m>M@zE_!>YmA38lI3x0uoZ&0G9O z<&_@)B65L(RT=kf&zJZrRT=j@h`_PZXecFs6BlI@gz8$Eyxx78Ta9hoaYN8tt ztN(K3XI&DWaJMHhCkSIsZ-obOKS(B>K9KUR93sy^(e;`RX zL1gBdCBo$-uoGO~3-co~V~OifbX{-d@|_s64em|g@;Sf8a9O}wE7@E$FP5xxkxA+A^1RKUm3+C#=AN!F@81we5l zqRgoM+oTD*uw^Ef)>r1W!gp5k#&eTGv+*2OEJw^$+DK`VGERlIid~$rSggSPrCOt_ zFv=9XopYLELdaMCj7sPMj8D{(T&Nf~I<~ckwod(QjLF2POu#q+7__a+A+KT6il1PR zQ!T&+{}H3z;V1FwAa@}(QNOu$1B(s>enNnq$@Q4szU-$MATtr1V!Xf z%b955z`bVy$dKtrBLP^KKy?e1lVs5O2{i$Kh}F(HAI4hp zNSA6V%Chqq!aUX_@c@b%dMM#d z2)ZQ!bUHvAUj#-|#Wb^>Qhm+x7A%6%&z{+TU=YcG#$U4A<57WF}P(sJ^EaR>`jI-6~m(=;pV?B0s3@ zUcaCcnlo4n`=LtWIBoO+@4i!xD|eC^9Y? zn7|Co0J4jMVG)BX!UPmq0+~P#hX8&8ZlLI=h>D81d<>gmF>H!}pNimuqB2875fucN zx$j$bPBIz&-Jk#a+~+=*M>A*6IrDaPb#--hb#?Vj0E0O*6{fkuG_+wH3Ny!o`5H?^ zp_6ei{Qy(l1sHvmXP4{Xumu`K28WwfpL;BfrNsC-4#NQqssYQO09dkuO;E6jHdqq{ z`z>GV)sJ95#({169t6E6<6X+PfT20XsoQMGKCfX`rtHFf8dLR(M{~RzX^nSHX7^4l zZ<0TIV$=Ncj>6w5Uhv70Fx)$W56CEU{GSY1S6|BktBR(@l=Sd5t^SC* zoyP**(SGlUnn=Dtt9rGi+p?Fb_Hf>y?Y9mqETPF#RXRi%;npZz4^@p&;05%`k414f zf|xueL}+mV{dPs)*G*bw4CZMZwX!Q;6W#RL^@=`>=z%!&XTP(=wT)twV0c2yzA5?* z7<14nw0|v(3y7hIz}8Y&2n@DtjqVw0>7JBbZ;H4KQo`~@p#k(&xt-^>K;OY4NN8#t zVU0-`bWh4`#kgECX!lFyep1#YSQyiZp=Wm261KJ4(mjCbsxVh-{XT>tBQPrzCUl+h zs54>ii6f|(BlMYN0D>r;*F`^relz!E41J0{R*mwlF ziYI4g_{|B0C?_?X6lerFg=MoFRC`c*Mc%W`5MWc$A18fXb;;S{cOHdjJa%dNLCz+6 znsahEoA4lUD6Hld-qPQrh*NNmNOc6ShW3bYAszvduaQMqze-1lBvEH@5UX_fT;S39+xqwPj!8-IT7I&C%qND`>z2~Lbxp|NhfGp6&*Psl>XjJsha&3&91+oW`_Q46Rt=(^7MGDHh7rM*46jgN@ zgX`WS@o+#Q{tQGdurLpLSm=*NXIVV#)o%{O zj27v*dKG!v?}3}i>)hdUblC(W1%B82{fJTWCT;gQ_l(0)s*6~pH)*%mIWT|xEq>?5 zi49#+2%lTCAPF&i5=9HcngYfyyeU6z;de3bUEJY)u$X^NtMrub%-CljxKQO zL8`+`dMa7><2P_brFy1+Ny+MAF1SJ@i*9DG@dz2=GuCj<*UMNZk6h7iqokgR1B<*P z;oXY5=Z^J{>|W$G?@jNSxT30DSTb!uLZGF-x9A}5ct_rgH&DUEIp2rzy}G&eP^ua8 zaJBv%aV`y9(V6!{dR!#{D{g>B9Fb5x%vJhLBBTIj*u5h#b3i&T##)3I-NnqGZ`hLWzWsxB}#KegRkV^+K(Fe5r5P>F}TZv?$_N=z$;Z!$lkxZ`ES)n_%$*SakRSi{4fX zYqwtJ!*eTb?|?C4{HYC}gjpNT{3+d{?pxT6m>_fPE1M19ln49BDfTiAvokH`?v0G& zGc&vTRZ;OPFI{GxXP%4RX0$n9`-u2ZtilQq9R@S8fir4OUObX4E!!UJ(s&0z6^J=AP1o4i= zQS~q2MQ+oXO%sK2C|RjCS@(*0m>0BQ+7iZtBZ6Yd>RE@ZCF)7s@QN_&UW_&%s}j@* zS*;cCN(=83tT}{+#o_(-b!;{Lig%CV^;5jDHs1TM3-iCeN~>uQZ$=#6OLg%6P)BVm z#p@1x1oUOtc=L3STwvi{L%e^-;oV#Z?`6f?^|I8rz2fZ#jMVpPVQZe-!i!*$A~ZJ+ zuW=o`p^7(E@eVZ>`WmjZ@J^~-{&Swz_c7v~6Nk6YHQJH*2}@ z?^z4aOT5!@Vs~d9y!Gr1&OL#fu$o4tC*CNJIfI(dV@#J1`&&6*s2zhJ;=`WiVrxi# zTz+1=&eqddAWyu`j{|+sQyyF)EN!7APk~hul_2Q1&y@- zwpYBcicq$VH%IZFw(z{6WD9)@V1+{;+-TvQfa^YV zAPz6R4&EJ#XDVLduhNq%Y`n=T;)xdCGU9z4hqvv^*!o@oyxRT6mh}b~!TWG_QBEbr zGgje^-z2RjJYEcW7zG&30XUZfbK!(n(##b>IJt%nx54N#-oX&&i8sR>vvlJXHR;MZec*5?(P( z$2-PVcGks$gS5bZIl!l6^i3Hcqd$1?2(%A|Q#rtJ>+0&0oZd0bOm_kmg%Fj+m$ z-k#$6NSlU4S8r>#ixwY|baK&6p6Q5ENlciGvs=SAVUa@SBq)ygTfmNR4-|*0wAZQ> zI;9D+?WzQym8v{_g;r${mNi0=x>XtTMQjsPKMJtVMR6pLJVIejD}v~1d+M;$-vVny zutRmhTGRoH=rKSka~1D!XCZFBJ-8nJw-8s~!drvI=+KXK@!tJBmbl2T7%%GhhhzM` zULHr3vJ;|+q?A~8!d#h>e+T-6NdEJ*@ti+8O8eo$*B&{<5y|Mqf?X$XMYAhB&LfV} zAf6zECbJ0UrI$Cx;|6m;F2@Z-B6Nr1+Vnh$PVO#sN!eoS?&eyTPC3fxlUSJ!eHIs= z8T|}H@_B$nUQ0(=Im{L0tAx$H-PgX#dvc#YX(LX9^E8ge<0hO^3&OD9q2*-w^Bh@w99f%>J8t>lxMR~s_@bv) zP5&1CqNF$pkB<8s9gg6Pm<%Z}>3d(&QNQy;ly-!rz30gK5`OI|EhWe8_ntl9drQAe z^fi{!g`C3{J z!eLxCz3+nFEu?oR=-o8^E1Ng(;s+gm#J+D+2M;G(g*cZEGV0HKs(3zm?UEe}_s7Sf2JR6G7R}L4@uNNoS4Bj8CJVk#*y^SGgp7n_bdhHX3UXxika%~pau@fltt zwMgFIfecDpi~cT-&`n}^j?esNwOsQA()N;yT=AA zRK-0-62mLSm+b=8J3_f36|#uP7F+9(sn@f+{uBg8GG8m@3 zipQ%G;W+e~w<6=$Gz4!qqE8?(axY$xIiDkVJ}+nY9uVAa`wW;r@ZTtlb4O2Gb0scy zqB||UN85FqIaB4F-Ir({lt;H>Dmf^WZH0Rm5!5Q%#UF!$i%pGpc)DsUUgzz{xIjo(NcR_>`64UIJ+DOD5aK%0BZGeD1t1-n68wy zvoRi16ZlDBkVTNu=K#|uG`wwH>V}g#Gy5y)@W~?;0IglEZ%08@U&@g18Mp|JB`k-U+W2i~i{{~z)#~V;t$Y@{ddumI|&})25 zUrD-`>uYEGo!wIdEv)TN+)4F40Nu=dECwN?C7h=NH(`UgWk14iWj>TKI3h^)5{FXS44U7De^4vF8{&ZrPMel<`>Tqo#80E5`Ic%-kyF~on><_7gM&z z4U3=-xM9b^4O;=%Vyqh$0JoukPGkMdc}glaBTh?=A@?DcZIdfeFUD+nQ;X~6Tqng9 zJMfOw#aJLW7z-vh@IeSy)DI6GTy1Ur@X$?zugkX{9=hJ@=xQ5$ubeN@sb+cT+AciE zlJTnkY|bClUzUfi?ZTCD4_D(mey$!m-RdUVC-^j9y-?J5 z)~N5{F7#IPRZRR+Mxz$?T2vzlFt1(Mf1(QftYc=#QsDAg@<6NtKNb#S21^D084O^8 zx}sHX=kaly!1WjhtcV?Zz+WA(^2ik}upF=hYzJ(G<$y(16W6^H-@J)+n>Vpe^Cs49 zUOcSRyt2{I8d2@RfBj~}zh`&@_Nn=SID zVbMFZK90PL>XKKeTYg$#6vk+CRE@@&HeiJUHnISl5m3kD+Wx-h{Ui{PvR^0mA1H#` zM(C*s+b&d&eFxWW=&d-C<^ci2UWTPH-s6s){}bn457XA{qLVR7h@$lwGejTPI`5CuG;=zL1{dB11OTs5!0T>XI{V|$zRj}(~YYI5PA z9la{KA6mS*tMruG;YY$3;_z9j@ui~1X@|eVqiELqOdy#P(@WOta$tL(^TdQpaQG>c zi90KDFsB}Oo`l994`27aVx$3szY#X_u#<|FR7Y^qB<=DT^2K_LISU`pkA2K9e2n8e zitOL`i|nDkmo?P;M-D3LmH5Vo92XFuid8vIXDT?X>vZN;OlKCqL%q*2UmhNedl<%d zX#^ZWk@zN`a_!HT_{MvDQhg3?s+piSWel0!dw6hrAP+>#P|%*Mo2(SS#TLxLfHZ?f z9T@OKjMC}B?T#{<6g3kXu`I%?ygK}FqH9fPWb}#F3_c!v@VONenk6|_an^)JEP-kt zB=yGyBB||UevtB$m?T)U8nTGD^KNgcUF&i9NJEX{B=xeLv3(Whs6C~DlM+jBX7)nG zJ`TGEo%j(O`_F}f-Pppup4hj?Vej36Y0WdhxKS~d$&iuK&&F6aUof_|Q2I{8@fo@{ z4r4AbA~$nHFtZye%*acHl(TG@2h~AZ0vHM|?EYCm`s?hdE1-a~^yO-_HI2XKTS`Ikj&9o4d8)paD-<0+T7$vzl7$1Hv zlz`|LBz8%;Sq;e*LP%OR$dYNym7oZ%_F8l0$}jLzh7JiKwFArj+mm9_h+Bz0x@xJ8 zGRm*mA;Bkj^)|Z;tc-u*FN*zI{T6;L_N{+e#jcleGq1B%>>?KXY+SL4C>99MC_)=W z2-pY@D#EW9DB;%<;cy(n+uLdh&)UqqgH^Lg9%AO~cwu|~CGjlx<5XE}23*aS=UzrP zT)oD}Ji8c*@`M~+v{#OqMqM_GG#rVw5{1HZyD@m;Jw!i=jM+F$&bO{N?B zE>3{X!YoL`S;A-f&ASUxLQeRa8?C^Q7cZeH#z>a^KVFSi>7RL5_^u?449S;gk-yCO z_R`{Q;VJzCQz)_gg4 zlF;DbNb338&NJaW4Gq1p?g0346}tX?vdJ8o+OI>e!4&vhfybKD?(qn${@Bz056O7K zn95n=>@%}3)gn{1$hLNo^Bdw04yMd6v<2l3 zh`ZzsWvP7}!EAhYncbT$ujeSc5ZB8gK`YJ^3F;13*%DN((&Q-Prn0|EkjFq!_n?E2 zBCL}kAH7IYzza!o1V4nhVHIX#Duf_KgrNA&NF{EfPhUHijg)-~2DHz-?t1iHs=u`7 zr0w!noeS3uxR?QTo+&O?FjB+}oPa}ycSetVCK{wWE*q-|(ZG^n)Z`t{nHMjE0hsjorrg%-Wanl?7QvxQ@M zkEGSI=FA#;*&Y5uZ=cQDCxH3h9N|GL#e5&5lJMXv#q0`9o|^eCe1@U+7qK(fGPn^? zWQ_qk{4zv74}e%p>O2g{>lEEhO;m)s!=vX2uEld#^gTz}nT&2=GYV5lA4utO!AZw0R{S zu^!_Qxennq?tlv7F4_KwjWj0Z)9u*DJ==%Qi24`0XHU)?<2Cx`aBklNQG|D-7nJwF zn?tf(Rb4t^Gsq-tIqEwQ|6{*V-@z`U?=AQ&#Q%ud>pKGfBW|xR;`aI?Zm-K&NQ^}I zb&-HSnbtAjZ^lyV{tQ|Jaz@0LoG_aycR{#7+g$|U{D|(%hETgSSnkEO56{J&spBFK zQXCw>0b67l&>&twDx~EgP&+kq3HA=&v7G$6=vlH^TWWaQVT(rV1 zpyZ?Gh@I>Ut@(quqK8IJdd+c&qGVx5KIeoHS43HY1up>TM5L|P?2EX>g*ljkOlW~$ z_Bo}>@G z&H?%3$9bI*1}T~|q;53uC6R8l9*kqG80#H*2M8E~n~RUqz;ba7hBGFeg*cwhThSLhlv$0|@8fIJYU?)#0~O~t z6yUn7Lwc> z><}KrNXT{R(g2wF-Ug+W!^CGLlLjXQ&U8h)+#(@5P+J{liQ4*7rZFj(p+}0^`o<8o z^^8N+R_Dv1wjM~StG33huhEK;%NbpcPtgDXt&{ic`UF$RR=csvDrG_#QrZ8!cAOr`lrkd8ew&phRtk6v>|g z!Bj0<)ny=FtYA9W*@#)k;h|o5LGdk!jk{iWN^of@knLyzXeFl0rc0${J=17|1Fzw} z*I98tzB%SRi!T5g3n%<#UQ?Aw%l|=%jKYbV)eT*<2QYO)Q7z!l7@<&KQUSfExCiAP z#?pe0+cBIz0l~q!C8B~n=ADJewc*Rmky!#KOj$BNYKj*xnoVbs6Elh@fnd=ruCA3q zk-deOx?z5|3L}8X-kBvLdzYlB?CpT-F0>3S7`q~RbPbGyD5iN<2zNtwc`ul~-Ef>! zuXJe2KHrdEYKxdAK|IEkz8)w2>t|g*K3J5MBY)x z)1A;x!4!PbvMc)(q)DhtLol&y8{ix>v9Atn?1XFK3-)a!L=fQv)S;a`=EAXffN^jl zScZvgLS!Qzktx_>E_`9c61L7B5SASV%aH3_S@yBbvfY3n%LZTaw=CQ0ntnK*WrxAC zFFelu9!IzRCF}Q*xWIWR2m~D@LG4d_l0E=gUPt#YTyKM5FwDlhV9cgzoB?d;}430Mow6mtqf2Mm{$fYez^<~!y# zhh*brzL-3pFLH{125w5AkokH|Dl5;(6aJBJyv|fs(W;Z*8z=Xi-WYA&{^N>k_g2&& z)c%;ukat~nGSnx>UO>An(yUNyW!bcihupe`LMvF{0Ofkei;V?g0o#@)Ars@tMX?N7fF+v)xj93^0gL+ULkRgl@l+@odQLKXq4atluGa z{4I>X^CVS)f^m(tnvtMX{|Q#zCxhdX1d3M02)n zcAczt8=phg|7_jVWmo7j>T509V@j8y}Wlt3omoNQEqxvywNfr0_}0Wsa@s=3?)8eA2O6? zQP4f+f-Ft(_V7})30`C0a0HigC^YNCAF0oM#^dZglq^ZJ?A;n{&)@MMuZhKfQCZ3L zn~U3P_O~UpdBCMkc#e!X!j&)TXaMC3pM!zj3}v9(6b`wf8{LLpm7Z$knD;LzBA;2o znlPC~8L%6&K3FlIc~+(xzaX)#keDbW78s{orC?ZHVFEbc-YYgq=LWr5qD9A59Q>ShT)hW1@RNSDd zjFwuWHH}2(V?cmY%W)H@KZ*(T@`EBj9h->!ybAp;@^i*Sk)Jm8RerXj7l)R`b&4ae zL4JOxsuw1F0dUmhxz#|IAlsOr)wmkG%aGnrv<9E}j3qhv37W}+4>Xg{I4d)d3!mmO z*j6&oq)U9Mn@QDilmvwl(`%}a%;U@}hkE>`RD|(K?Oi`F#unp1Er`a$c6${Ky^%Uk2!mNse zS+f!_%)S9?u2Pr>Qw64z4Kq(+R#-515oU2*w;c}{%i()WdU>*6QI5~B>f}|F(H08V z>O+&_h{+}~H-H#q6)Ra!eS%ILhE3#+Zthj#YY80NoBCMa71L|K7hAeJrvwou^PtG>&gTm_J=0&WfJ66YRxWMsxQ z0Wq)Yo2hP%Gr2tN_v7Ijbh`xjc=mgfmWT_(IW&Jfwwurx$lWWmBkdG-Vyac+d%+nq z(CWJ(NB7sBiGd))mP@4LXWt|G;JT+U6B2*vJ*W`|$#YN<+dchgYjTV};=z zEK_R}4f?x^w*_$IIR$-AK{@AzbNYE3bc2F6j{#j;1Nz5>f79;&eF>m_6ts_m=3%}H z(7rb46_|vf_Emq>Qrfcy^q0Q_okq~#!ou3$q-Q4oo=nh`KVbhzr+-67tor~;MSdm# zL&sq*#dft$fT8L{SBw0qyYF6Bv@Swo%BwcoXhmydp{<2?D%2#d;~sgj7Hy@X-KuD* ziZO+mC_)F_~ls;k)hFlGj$tYpwJ( z8aezIX~OSj_U7@TEFV=x_s(RCZ13!daUVraRb<@7nE;6xm;1)igJaGQm!b^Stwr8G%Ri$xC}l-E5R4in8XkGHee#KB4+?44V#= z$PQV?$o}I#A?7qShnW(E86m_BRG9G=%rk_U9!E@P!Z67`EH2u%at{gmoRPTDXp%F z#q`jFan=17_Pa$cI4Lkq6z1kLrL(8nFt;mA(1LLj=FT{no`m@Tp(;K3A&)SAfHHw3f~c&&OC0tF_L=_c~gO0*34<)b25Ht(B_n zQZ%YE_$)wlQ(E^@yP@RmJITQ7p+V6m26wgmGD8g>iWn+Iv_T z4-JV!`~BJ4nr;IBAmjHb+V`p$#@lE+#t7Qs6H41OqDA6HqE}+j0z^ZS#IjEgkp+nL zfmyDBllYQP9ggv;k`HknpLF!(P1>)ffjd%zx5T%RH{L3<5!SW;lI@|hRVGmWqbQ3N zB_uWpB1Q6b;*f2jyhD_4;wb<5-?e;L^NY|lM$xWcBRc6fTeS^Qv@d>9K1_h$i&8?xsp z%x54%%%gP}TwrwEXu<3!HM?MI#KNQ#W&vQpq6Gqz{D7Jniv$KN@{7MEuaQ-$hY7P; zU~12@+4GFDC^DK9G5NRGe0)Bd5q<$~7m;O5kMZ!MxK;B_Ug!ZQ19znO^kENkg?#lI zFY@Q!+PLMKMNqSEkrS)h#l!s0N%;XLo<1O2Ao){F-O*z{gGC||@~#ZEc{l#7tr0l~ zgg+S9w&@n(w2wZA9>>aUR$}CuuZ1C{in~;C%WT|FM+;w1{iL`L5qDx7ZspUpGBZ=h zhdf1V1Op3HUTvd&58**8y=0+vCED;fv~e+LofPfx9sF7Hy8j4T1XYzf?^6vn)I$5^ zY@iK|L(7aoJAwhp6PFOQtxkkS!yi7eV+NMnD-;a?J19=p!^`d2Qi1Z6V2)|=Tj$Q(Zmrv18-x-0B0@wIK4%1XpG9t zC@BAw!Bbd53ebN$nF*J$yQ~FfbXZ?uj%J);BaYHdxbT^)I6@<^ z+h@MG6jw~XJzA4*pC>EVNV$uQ1aIOIQV~R+#i!gJh`73%LvQjmq-twfDhTC2&(^YZ z>oVM_t8QQ%#=4ZQ=PQX*8vwPqU-fXG^G&`OIL7bU)i(mw&fU#W5(_wKNP76kE(-G$ zVDNI_64&g316-Z|%e>jIEJc});Ar8NEIyN4WoL5z!3blXmE*&y4H=x(Af|>q0yg%^ zwSec5+yUb?QYnVj5?(~+3TJWZq%aq!P{#7t_{nCk&+MD;D(wvZCWEa!$!q5CAjfAu zL;jLw#jQ{|gkfNcZC5ee!m1Pxy!RPjAscJ)TcFtZ{C}m_g@i@eNsE)2Cy_* zJrB97n0$L4OaVz_g~dr+Qb3U67^YoHuF^4B>6mi6MMqG_%)}TvZmyxD>p!65r6nC@`#uWdAI*i%b|_pmm!B1{R7IH)}ibU zVFNhLrUZmg`1gX>5wF_%L*jWgI~^+ZD>f}0VG|z6FMrQ#K$C#d!Pqs>3F~PiaiZY? zSwWi!ttg?q^B`$nNOlp67|Y%+cG#npfd-+qJk#M2O37E=`6>`9V^qa$7fOLm&L zmg)7Sqh+`yLsgEriXp#j3H#m*Neov8i>=5NIdLp-X;gC-l*l z_@YM$oFiB0okP4hLZGxhzQ*aGEUs|SPlJ_uFe+ShJ-Z98sPy3S(N!=neki<$Zi?Z3 zq&@Ddreqj0bs8e#f=FbH#U^}G`NiQk{9F9t#7B+>RiEc+Grx(g?O-@{=S7i?!k9M% zGVn!RTI9TDNCkEg&+Z1Txs_V;Nixb2{04t16l?;ppPa8giyAf={TW9dBJ^&%-DEyA z5l$Sq7a|LzVcAF-K*t}K0dzTR9~nTe)=u8yJKkn8MTAOXD%K~|DwDjZHF-XNOgpn{ zEwxHyH{u_q^f|!pq1fjsw$H{spxv~xx)yt^U_aERF7}MN*a2?(RHc=QvMi;=gvzKS z3yqwMYm~cpgw*LNgs?+d{1;tI>NHZz^~99>D`q}@LM3tKHmY0h?{Lb*<~v31N$bFX zrnk{R_){|+W8YQUN+?O`#&pi&`>|0HTga9uv@;tI;=mI86X6-I(i;#X_y}GFnJty* zChJIaT5F5w>GWis3aO+*LuDq%}i9*DL5MG?ajzsi2E2&`g33 zhyxu8&`1{%g6IZBZ6t)Nv6#VpC&1lSC=7X8afjHruc4Vh?DZBdB|9`U4mX*&M>qt4 zURp%qhXvPB_9&KvUqg7`+$^YISNV2aFgJh@t!#d>0<)9k~60b-p0CLC71NO zd&alo8u)}X2^Dz`A7+hrO8MIM6h5OH%d>} zEAHYdd3yz}5#oUb_S9KasEAKV&H%8Z^mly23!G&@H=M#>9BZ;vzRf&{kI1+9Q+hh7 zc)j&D{&V46*!Fpu-kG_B`O6D%QG^So`D}vgv2u-bUAk>Ut0U%TI~RQSOhFtR zfOkmNpDz(Kv4c;!OpJ^~2$MqApGAfEDJwk^%Xjf{QgxF5NR-r0P5!gP@7y+?`9)>H z7n^(hMlWm`>Xjey+UznsD==rq1Ta+g964tuU1P{_;W`<{ky<=-?i3E4+vBcihQpIv z^et$=xxkR$xa?Es=A(ahDOq=g_~IO8KZ7z~MKgpTe04_eir~5QocWzI)h+Y@9`-ip zbfmMfr@5db{gPgLANfoUbb+S!eV-KzdA8q}%O~Eg)0d*<_%C-a()h`b`AINPLyM)i z8SF@Jo4@VM-T2z2Dkx-uRl=a?c9$U+HiPE<23-(gK2CUS=C;5mIFt%Gx4HEObeM1} z0nh&5;MRh=+`>^U|1-Cy{Qrbo;LW@QC}TUbt|Pb-yP=^Fi?9(a1!5|3?U5&N6AG>P zLG}V9#YN!6Uh82ZJH=i`8SUZ2+745v(&0D;+u z+Z?(_6XtlFwtI>&L4|3qFdjH+pfp?BFad>m$bxB2m}zk^g9&q;!ubA&7RrtZryuq1&?KIm*VsSh9K{bRV{L zb49DRJ4Wupcd+boCGyxeQr9b>XoU0S{e@-EeW@(_FBajgrIp&$;&;tcO9d#A!BW+; z#n4NuMh6s>E{bxig>sZA_2Sy^5}-sHqpE;;Mq!>(VxF~Oe(NX1q+2lE2{T=mR%(g) zVlH5~wDSL)W4Fa|?EW~86)DI57$kMw@U?I(iq@364pbt?A5@NQgImoyHnNt;&LEPu z9jf{tMVYTCAsZ!CQL-(RwU}6k&WhvM&lRZZCvf}%W~{>8tuW(knC*RqW8Z$E#5hTe zp7U5s%*%w4#V9kSt-|zJC3R|V!^}{ar!1IkQsasf)zO6M32NqRezlnpC~9KnS8I2R zUNdFaJ-Bb>S94kXE50{$%u1Cpbx;lyVnUfaW~|1GUgvJd zEM^ClV>AYMxNYCLV_Y)kt`lgpE>NbFiGL;S44a}Qm`cEAo&CA;_8L<3K^#RllA@lV z2xdg@45-ga8cB{>uY(+1r6j@*cFcMX-*6OHC+togHMu`%%kScV0q`P7Lh)%@d>1W# z7L<=Lq?H!m*eZSv77#+;#1+5SMDg#!-UZAq(V@xbC``T$^RY|`^R|4ZwHQwrZeNP! zt4WwLg_)%=UyDm8?G!q;P%~d)rdTi?2(v#9#!Z;(6((O{K2(@hHjGzcuCidhp}f8q z2lK~lz??)NH!5{XRB`e%3Uj9oQ%_-j_*5(PBw=>M!MsJ7l?t;;VeVC!OdDpc%mDM2 zTQGwNvo#LpUc!t4%*iUq7Gy35A2Qv5V;K!7Q;xUrgc9JfC17G9z9uJOJr7c_ZDL>i z?cT>R^FzFcTD4Jfe*Rv%z(S}3;c*8g=X{HtZNGz@Q*q=RG(gUNh&Et8MLjU?e5NqH zY?yDLP9e8@4=8h{6Xrx5%wvRkSYZ|_%npTVV8cAAFs235nJ_=Z!Sp4J4=`eGID*Y= zhHO!WbRSFe`YbH=2^;Rf-{dp!P1w`@e!1C%H$Q>PvxYtOl_0+oGy(cT*ps3Jo!+nY zdI8Y@p{5A4j+Nw%R|M5A1o}f*C=WMsYBc2oq442@2C% zVZt|B)J#*DyDXUIggGw`CYLbTfH_$O9zk~ApzO>m!8J$fR^-;H#K29Zr|LO^T#PC` zmE;IEzy-+vQ}yKAYATJj%Wa_L{``q@;ond&p-bY*T{{cqzKOEP{i#?#!{@AWlnPdF zoH!ES9+SX3oVMD7Z`u9-;-G>|<4Ut}5sUt%BRJ;49+_?!tnvMZti% zUSYZ_%t{-kyTV*)!5qSbHIy9(^V>|o`~o%@J1~KgnNu3RY2qqO&*xTx($dq7rUk4? zxg+=s?x0@tta*7#IgGKIx^1ixtrx&XbeX;4WlL*r6SZoX$i!3ol&QT)ls}HB(Il!+ z+h&Bqysa?*?QOB>PK6n4!89O@Cl01HVVFM?ENZSWk19-s4U?%bO)Z#8XpvCYIGBB9 zfZ0nnoJuODvYBVKZ^~RO!A)#rE20VXAia)yqSk}8oQv&p)~T23g^#t?gIUf^apjCf zIn{Tctik}E5V)swT7F`2k-AArzxsm{iXkYwJM`Y=B4FcsqByq}ccB*dRxgV?el4!E zRa^vmAT&0vxI`33!)Y}Pyr^VUJ?s_QAALb|V}DjGi|5es_I@D{qlNS)SXZ228nf7Ys{QW>gYpER*YqM8MBaCHpX1VXl!A8 zcmf!{IE=leb=YN{4~4vv$FL3i8@BTaZouZzP_xh-d5tQk?8Fo6Xefq~GX?JTR+X>v z!;yCd4PyH}^uW&H#M{ASw66rldgn>_(pGCL~H~R^HG9H%N3_pgHarhr{R7U4+-p z>bPAVd86BkPgKqN0T>C!F{XZTL;to80?o>&lTrmyB17m!z5^Z6mWNkxpYl+zco-Se zP#F`Dd^+8wiqFD}iI)1Tr&YzTWxUE8{$H(Pe<<8gVrt!iDQiY;TAFkoI1+f3RF%}w zlXex#mHa+PQI+vd zDY55yWfd4z=)J2U%m{z*8Xw}!b_8SO9xa&Nv;g~xTS8y-w4lmz;gH97q})w#Ns{OS z<43n~9NTm1yOC{VW27F=?($-_we(;r&Q$6>(6tuQli+T=-4!Bj2MD^5f;(JKRLeJ;4zU9ZNrxx#4 z;du-m4oi4ym)=HBrSJgbD^&ys6ys}jR>62!F$P;01Bju*Q;X3W7!)3$ELN25it?n5 z;#ZWjEfgnFJ{94qMfn8o$H-#LJ8hOMhrSh-%*Rb(i9>R8*=*6|TqyKXEp#Q!dNg}m zyU-k!`z7yd^-satwUTqy7CH)r0^yr(q6KFv!eOx{z`*ZS=5MwTf|!Sf_QjEX5fMs} z-s~I964^R9ZcJJyF|rSL0A8-(d&JL?GTR0ZDfpkel)Os`{(c~44HMkSKB!saA8Fr*%{bzC>tL2NSw1Xj7JfU52$z98~CiP z_cDHylD&sq>%vdU8jG`=3lsj#d3l!yx zok~eVqFf`^aBc5h29(GcOh&f}(K*X5d^$Nl`x4EwPh0l%)Ve>j)?~47MK>ln)w#=SZY8 ztR_9EoOd9~Dm?d>W@t~SE%v+fAs<|6?>)TStUdX_I=LYWrBS7Hi3T6eArX=%{Z<_6 zuz073l-Mq^v(Rn)#u4xIubBJYZ_c?uBW-zH4Ugbt;zFNu3=$WXNCz|MjQ}T@xG;NW zzKB^h{GJdq_FEZS{{vZvnEk#@Mf_rl*{yLxvUvhTd?vBX>>CuOQej*+%vgna(}MXN zrhMp(IGD+RkzxL~8-x_MV*G)QBBXRsjQcE%$BFSx++frR80@oFbO$c8Vs`(5zNZxX zSD1*X=F>KIDh6a!GtI(o4a3q(`dr(SKP{HtG*l5jSA<(_gk2ajf$+grWz_FsAY2$% z!^erhad;>uTu2`mxXEWe#zw$Clt2@oX*|kn!{kTJH+{ieERE^ahkkQ~)wVB48*ZJ> zpYWg8&{p?4-_^uhCs`o0D$M0j}+0|}_T*rK)0P@r!l05Pht}jB)XzRtl{h&Ek03;?`Ri4 zT#H{;rObMt?7lay_`6wrj>1H)lUj6xk%L-PV}Oxb^p&Q_yVZgzCyX}^<`Tk0V2eXJ zQO7{uJ%*`@X)gtHalVVIn#Rx=x+R1wN8gx9_WLUvrWdJ}=7bT+CM zcb>;cu*IHMH-PTv^_}*49ypQoAD!m`Q=#@ek2IPJdYs21h;H5EJhuE#$9b%k4x5}V z7HitY*Rs_Rz1jhzAQ<$*7S>vh^Y{#=xE|+0M*a0Tj}hafvg)3yURrw|_n>~T?l4!s z4`Svu{=i0WRF$5ERF_oSQ8r&RU0NT!0Plj|`G+GYL)q*Bg~<4Xgy8*PQVs_9XF5g1 z9)@EXQ_6C;C1RJNQ9$hPo3%ClpfvQRc+a@fm&?<$x7?@Ht)&|!(i#N<5|f|;nAto7 z#~d`-xdZ!}IXg-mHxlsy9dJh6E^HCqkdIs8;5;6t*L|#q^Q|!M;Gkfh&@C2V_0>sx z@%B=@jX0Pjq|zQ69yvGW2Xj##i%8llg&Bh;^W5U@W04=L1Qge9D0m=VEqQj5IUXM#GOhCgM`aA6m!1R2lntR^CvCfTwmAuHOi^G`Rk_hzN|E zYoJxZ^_iQL>mMUPA@p8duJ;-n!}aPFkgF}%@JB6MzDKO=DhNKsEiF%VO=n>BLv(^0 zHe5|U|Bik$$#41-!U;q(lh4GvxzT>0V4{HK)yJh?5l zbFpQ{X1wJ$Hsbs`M*)JXVV0cZI?2fg{A17KnM;!CyDA>2=X~EWVfW(Y-_uzR#)?2gw)I}RYM zrq5o^Pr4AfbYnfYvBT|rf82-8Q{&GD$ghszg?NIqtWG;mjr-oY#}PaaR&K=uQRm0w z+Zub@?{HW2NQ`dxZ2U6GTXF4foMqm#;>vB|z>Dpys!A0ZK!ut{cNtQBN16El)|aDF zsMQAirJm8`-CpObt7S-;E=;Z9kb=BbOZlN8UwDI-t0UM+-;hVcjGzmVIm z=sa4v$jXxLZ99)vF3!}T<;q}lH~?SdZ|z(9ORw=NU#Q0MEpmYm+PJRhEE>5;l7{S! zkI=}44ogtQ1ygr&Ce%Y?7vj2uKunl0!O|Z)RDG!SfOZ=OaXJWzwUtK@lEdq6HM-+k zPhH)yD@J#uBR;&DsE!VZU7~Tk3>vOhdu(wboE?YV1bUGBlS@w_-5Ybt!3l;IoW%%I z=*zJs5NEU-+KgvOjtyUKP-j9~Maw$ymTTi(nUm{9PNORL!43F_=Y}QXW%`UKYk$Vr0f)qyd8_vS=9l zG(R~Jpj1J(d?27HS6iSfMET{NTBr3JP0%rMpp|!kuou9i8-U@fxHwZV(p)xSD>0se zM{fed)gM~88U|sURn#c_AV8pmgZ9|_lQOmhKLYYE7##4+!}z7EKeX^rApu$#d5IFj zH}JQ#hc1Q&MwgNf!=SE5v^!NHxF~jy?pyqB^*nh^`{fjUjlbr<$ldsEoQ@p)4T^K! zURTnd$cMPhjYd}E14Q)^5|f82%lg{mSJNw`x>akHWx1^FC2=gPfKwncUNo}wCszFh zhz2&y(1c0$vkT!GD@Vx>;XV`H*F(mmSsCb4KEO56!RTFBf<3iI2I6PXEMkJb zAZAD2C2O>O=#>rKe<^MB+J(ZSw`)IpVRLOf(tx|3JZ`A?KDx~`_iIWwHblu5)XB)A54q0wn0am#1RK_44lXR{c(lMc zh||$Zu9r@iN4<(`N7*B=1n_P;-mN+#5y=x)Cc4Z2eG$4IKHA`;blvN8#vq>Tc@O{# zAl+5I#a)gD=bo^JZuFBPH*Oc=Vz9@+@g+EDF!;42*cY#RaF8v#PeDf<6d24bXPw?m zEC?PA;FxJ~5`nVt&i~?YI%BJBqge)eut6hyQts)=+f4J%636)Hy9}FGp+Ic1sw_ZH?Mj1SWI~{c zY2FV$I8C0_Ir$=*2c#pRIHkZD$SlG}SN>>e*-=NZ5v;B1MfkC!>>OU2gcy-f{ATrZ zwA5fX{(xnm8e983rgF$VTk4}c@?aAl!EN48Jrna%oWcZogDrsVfj_usqXBsQBGf=b zH!KCP0d0Vb!5*_iX6f2;w%OEV~?NsYpxm)T=n4rCp9C z5NO)MY^y&;wX1ynCU3L9m%+OlN^31Tq_2xJ!-VjQBUOb!gI}#M^%drP8)mh_EUAI< z6DA7oKo!|ABQ2N^I&ZYPJyHN7A6@d4Gd*Va^hkTm|Nlq&(M1xBZJy~{mZFwJaq3U< ztLSy8&KuIjlOO6}Rp-}BWxz@U9pn@0^Ckiy1UFRNiX38Bs>>W#U(}o$Q|h{51bV&$ z1lF{isf`xth2}xYd0KL3E%`jV% zReBrnM|fm1j+~gj^dKF?DYwO;h2xS znOOcXRYCc~yyto&G2()q@b|y}7Hvr@b~#$W!f*uX3iw-`Q!pz^))G6Rcu_S*!{k3< zVW7cUuNL_`*v@LOX|T>

p)MhHdr5EFG1Z5vuw}Y)csqwhaS!tnwUXccAqm6Ql`~ zXKArTSR8=ZkFkqwsKp*#Ra0z*n4l~+@{fvLRES~^gIzTf2}f`*Y8{z`KdKNMWpDAu z82sU2(FTJ<{^izS(GCRTdkMq`gN3`?U*BEcsJcGKf|@j>3|iw4u>h6U!2ThJ3Aed0 zW^2!0|jk19wG>y{?L8{oL*Mx()e_ou8E2tR_FH14;9l zTvT`V^r~2##+^Mrr(_gz1YyBoPO+dJH{*ECU_0*Y@fb6f;x^vlj4RL-X@=y!*Lau` zQhl~Z6Vk`ns@&ANz#PbQRSAuEjE@wf~@|dY1t((n34)8gv4%DOYh8+c-`o zEJJY6gTW|2kVMyqUO_egZx#M~x1azfcedlZ>YVT8@f$exyXC&Du?fa|G|lq8I8DO% zod+d46S#<`kd%Kb`WZyc_`y|rI0MUS*a*Jyhh&;} zoiOGHQck{;kLPf+V*ZeX{g2ju={`VmRdpK$TdESDBN80Jd1pY`J;6)ah zio38%JAppxZA|skQ5Ecgbu)v{Xn2UGgRWJrW_vCl*MCI(s7PaW`?Ve>&8BPv6I_lj)j5iIfng~ zsC6$`s(r$)=m*@cpT(&xM~xehqscW}P7-#5J2}D10FN)>0D(O2uzh}q7`aYX{>pYJ z8^JFnQ!^5Zo8cb1D(d_aKDf@9QQZXh@Ipf1W`57|np1NaY1iCma8lSmvtjsjN@Ki> zE1$_MwB2&B(xXo*aS*0F;a#x>yI>9{BwDbsBC{&DP$QZ+dd1-u%RGEXm?4F}3u__n2DphLi?@52Uaz-jkn5IgR|ruynK$ zCEpQz5FdVXV5$$vk5V0FcgfeeoHTGX7dvoga>>tc$jYDn4Lt+LWR&wQYZbV+^Nn_# zycaw04)6Cif^q}$?Kk8OJ_yA#xs|nSr-4OXqrQbWw7HwzVDHqlPXO%$k!@Rc5I^Iq z{8{g|b3POvqkZI|vbgpk*$fV2%FqC3jd0Fj9W3Lmn2_o*uFMQKZ^*;At7P5s+mnJtPcP1unzyML$8s&L(b;$m`K-p?T5|8()^(Ts=gBE zO?4YyP%f$iYeAfyN$cvdJlep)g`C3Hv~l8MIeAoiwWTXGnvK0C3oOZsJcJ6v?R8Uz zw9X`~JU}hp+?E3qTIUF?G8m=rFW1(2Xa`#7SFGs8w$7q~_IR0nj-vEYlr$UVU5t7_ zF)Wl@iSmO?tZLi14^Se{L5HJGSp~DZWkBC!do5zX4%=$k>nPX**5~7NTdz4G#})0H zPmQ{a+$mYlD2s$zU5ZBTlnAW+0@Fp^Nj+J7EiO`dkt<3S*j{#5M?tSFmw6w~MH&cY z-wV@4V&tiz-q1e$(Zlw4C!cdM>8!CtP}z8j~vU1diaqRRcBt^Ddqtn>EK1OBN_NY2iE4?1P91i`q3@9hx zNhqPNV~AUfG65rl)IgVI^F~lhqWsXXqP;RBhf;}Dj{=)piNYJAm9}=nU)*rGxB3l9hemS@fle5=16WQSm=F2~ zfInRZlRVHx&#yJ{0AehSKfs969*PI3himH@KWupUbM(|cHKm`8(j$Y>g{+4WAFnx3 zJIX!)AvKLtsoh1GZCcEpzEt1fRLc>ZsBg$UQ`!NeC*Mcypwi{OA@>V#Ruo%5if$)! zs{$Ms#Rh9X5SCgQCo-rU4x(by1v>bRm0GMmv7zL+1q;f;;jv?K8y_SJt{fXW3D61{ z+Y=fl)((kZUm)F};uYxz-(n;brR#4Y-C)SSwHxFhY9ur_qi#32@J4il2{A(={GSj) z9TY?evp@~`0Mq4v8W=I4AXsZFlK2Bew(gb4)tomlw`Zx zWkk>wI$3o6i62!X`Y?OU`NH}ttQUZkJ2C$f*6$F-l=sEc%KA4qgY~Q8Myh4Kb-Y{4 z>4hX1^VE$w7@muv`cZ?1zw=O&R3sOE|#&tZ{y@;0t?(JUasup=W3fO-9MuTNcBhR zz*l6!Tu+#uaa_EdFhPZRNnsi)%*!?m@gQLrS}-Ro0rPPjOxOpQ>l9{`!hEBZ8g0W6 z4>0?m)Jm-+%)vOArwMZcPCtl7ONH5?Fs*HvSJbKTumv-QF!e61tHy>9=2eCHC{1|t zgu?7=W%1^Ah4EQ17ZJu02XhW#m~8^1xF~LzS4M>n68+E(V$*nZ#dmwKm)EHLv6P{& z@z?wpIjw@`Qlh^9k95MWHc@*a|6tL7mMDuV-Ud;RWz?V-023cscr{>vuv!rwQ$p6*2yGSNG7F(T33(=tkY9R;!peyB zP-5;@s0j*nuMPF5YJ@|JwN4=t(<+Y9F9IqOg)a+pPh~U)%`#>5Ea70uQgDy|A`^wt zItp`am9f+jyk1|cVf1DAZpZ&2t?LOy)dwI@Ze3TzzP*$*=u-|FlW=_#9&t@E5sTlw zG5L2D=3+=+uuYe<_XaNYI{SKxk(!KWs5Zd?k|PqU8@OaSx;o}y_fNQs3#UeUrX$B# zV#4Hg^e%G~>kCkG3~gz$rX&%Oe2tL78fyh-a8nkN${|mk^o`_!Z&4o7+ML6NgjcMc z4%yE?p}bqT9=!YLQp!W^^7B33Br5Vp6d_9yzC7DP2sal|xXnViiwOR#x(FSBKtGae z1BV{TL0xA*CLD~{Kwj+_gU_I|c2f!U_z2=dSe!Dbj;z)bFd&05#u!HuH;I1{k>62!TlTjN@Lh)=Z;a&do7(sbb{YahoxdATZ zNbEO&kr+sxjOGfXiLu^Ihi58;6A=~Zu(T+Sj7psZag-(R3t`0K`x?A0>)r4T`fy^e zaoh_L^_k_Xp=9XhNiT4^irf`LFg2Ae6)uPS1KckT`$ul;QaZVOES8_U!ANl#JDCo( z^iaO>fouBCj1sI!|H5z%zws`Yqp{l%`=Q`J#H6B=tNa!E5Ang(E3dg>EIz`+-l|<} zE<=sE@H-p#z-vdaA1rkrwpVdw8zgAUyP+g|Djl9nX%5h6nOD2DaKBa0Gjz z8L?h`pk&HOZsT4LvN+x2qDgfs@{iF8gtTKcL#KR+73kuZ+z3v|$vw(#R$RelnYmGx z%JoMn)^D!+Qza8~XgbNrYT`9irQ6Ck3B98RAHkoP}HUtY8Fuw;u>gQSD+37swVu7ZuLx$QsX)1i~=^6 zn6q+`&3G>RFLn?}B`L=|&<(w(I?zF!Yi{)FiU*7Zo?rZ#l$b5t-% z2_hw?HY#x5GYZM&z`U-dlb4~x&$||uOM!93*w1(;%ygzQnbN&Fi^$hHh0d}#RVfBZ z-gOI=Q~j}S8`>UMr~0hZOpuR-wz;#EMHvd$RN?Nh;qFto?-wXsGU0Z{!M)i9a90aV z%TFltrCSa{-(La@Pesb%$HX+s0ubupHP3-%V>Cm+LEd8k4guUjFm9vuBE*a)*` zI8ADJ2%tHlMLq=!AY7e{{UyS?u+Bl!+?sUDa^DpL|J4$Dzcbp!!%TwG7DxgVS;fI z?jy`D7-_aWR682MpZ*KXpCJ%!uYsN^=_oJ)rThwQgwe=RW`JM#-U)BOIuh>Xo(P}6 zt{Hyt4kGc8CI`Az^zQ+``Ro^}@xG?N=?5>?var_mZFt89^*BEXFuasW{mZoQ2h?8L z?3w1o^`mEP%FC3A)G9gYuhJKh?A<+szWzPK7X087-aemuQ0x6<)e zap6En$a3xL5fq143I@6Q6qrq2eWS$~hYM2iuE%RS!~4gAw$d#*EU}kT0g^lw#i`+Y zk(0^ee5bfSPrOLs3q$3FcQD=^g_FU$Yj2S@grq$aml);vbz0Ze9ERiag`8p0gXAu0FG8o; z^n8D&(sKrm&ZUsj#eV`9N|&Q-39cm(UcZuQO%noVRCRBvSv98A6FL`(^s1t zskpEq4?UR|D>-T;4zt3}Ja>~2cUgh0um$SDu4}8ExQbgo*y(22z z3sUk`L*pCVM@WX8{NW{Bq>;evN9zUJ+oZ$%fPjZ3nkks+1oNx`CKNEdB~D?n=0&s? zz)00GiVN#MoFk&NAdJcej31g6P#FZ;0F7e?ueu0SLkFY09|EmWV0VexDjC2=0W5bd z8jX)2kluM{4sN91#c+KZu5;&MO1K}XDYlqNAUZP*33}cf^n54%`4_`?;$yjVynU z$WP#5P@*;vLm{A2Z(}@-ke(#vKhvDce_b!1;th7Ir^*kd@<$uW-`o`bIDuhIyQyUX z`e!(_fY9%A(q#Gum+_I-rZ$XT3T2VETSHI`(2v5kAVO&_%en;Y++{Zoijr~yTWfZv za>}3_bU0)y^nN>w!dkLa))c$+y6QLLF;@73vO0|L>XNzD19t>ARBR{tKt{;)F4+&D)q2aqlAj zM$>0W-vT5)vK$R0PkU$$w-ki|xJTrr_5P@CdFCeDbvQp>g8_L&m-zm+4cr zC7As7%@-Y~p@BsnQe5laL~Km1v-t?GE%cUP-Nx(`3iy^$&1Qva>%*7rX}CbelKC~5 zjRoC>qEJGHDxnvZ;4zdCK_whT3I=BgBV)KPQVDLogu_yYky65DDIruZ;Z-T2sw&|D z8cZK?O0Y)1#{8~-IF}GpTVUQ3n62C+L`YW@nDdy>Ays@!Fp~^0uM2{Fuk1v7+T;FJZVi6WTGoGZ2hTTaDo;XfI@h@!)GJ*HxSOmhDO2c1f6L#M4^ zDJ@oQVHF(~q|=ln4s<~S%=~9E@E>ZE&wu(oo&Vy9|E|$QrS_vm_-_sP4~ErFW-0z_ zq4+OvIMs3;5=G)a?&1>vNo;(B%cQJ1)NY?J)Us(Ki482!P0HB?e!%)sq+zG}+ z^&FT1>1-F&_7gM^%zpz4@}HFdOk*zpb-nz_s1m%Yo+`g2m4DDs{$@M0tn;5VIof9> z3-TWu%eKkE=%rAW@Sh}1N0A;9|8ZH?FTjS(e^O2m|4})_e@yh+FGPnGgXyr-_5dBy z`Q=Q9?+P8-A3?t!w0D=8%mUnp-oAY*bfW#TTDY$~zYvBm7j7Y$cDm2dN(UszwA9|y zSQ`c>qqDlGvq0ZKFzex2VZ9a`NrYX*iJ3&AWahR@`R%l{zuofO@8`uu)jx5g6fzdmNaIL7&$xgJ!+(LR|k+ZW(6`NbH}laIdX3y#HS8$v<9 zAf!RIi}`t5J!m?`Q%%zwpvuy`b_5JjZ#{zflVKcr@|AFjXzeWAn20{$U;Zwnc26}Y zP_e?Y6r;w>Q>eB=V%EQr+c`P|_B2A*cSpfu*?bs|8O6tI)Bh9qGAa#e@BBlRwqR@qRbZ?N=1(w$@0bB*DZ%syOz?hiJ-T4v7+>1`0Wx|A zXy~c~*F;1|LlG$+uolK4c=(tYHy(=RjFUD%#@_?r4m#sj*6+QDd&oE|KSzw4$Bf&h zm@w`(VS-c>t-$SxqUQb0>UFiE3R$D|3O(X_+7r|QtOit}D1zOQzvsb`ScwECpro7} zL_wbR66iM<`%C=A#6shNyy(?qr@Th82Ay(iMBMEFWU#Gl~bJvvVK7&+=l=7 zD+tOPf-;eXvu@B)&ck2OBH9#6aYCtC5M?!?oM7TLR}+**tTXFy9i=*xi2bKe#UMW- zMtyYnNRUAW5Xu}ux%hx<)JjlBa<39KIs!Pz@~%ReLMSwZ8iZma6emyu{Xg3L0N=q{ z=fTQywiS&moPb0~a#B0ucL<19B|O%xa@~@?n1VY`+gh8Gn(fp9)h?pB;{mA{luEgI zU!*m#L?#i6Tk9n`hqWg8Q{h6|o!;cElNKQe%~GSU>#>a6^q z+a@(iLwBHIC^CH2}*wLW5U7Yx6#bf%BOoo0q zOlc|#Cd2R4&iHMIi|A~57sQ9(GJFVA-mM8mx-W_;%WhDnr{F?ACGL!2B*;4Pj z7e%v?I~PTbdorAh>KP{1bc!|m<1*5Nq0h55&!JXq&CP$ZHC-qU)?CT$lXVgbWge1( z1J(>f$+_te-o>w(ETC**@AKyOvxzE zNu1waCMviM*6@ujh%$jt*p@t=Lo=(gz0dCy-TLMv6r%M(v=pMWPtD8l5uKsIz{J*ZD4C+DRSz~X zOcC?)A8g_$by(*w>hsi&-Dw8%6?oc$i`cst~{*<$eZK!1L%iJ8dF#- zOxlFur?A>=v+P{j<=>Tsk4OTzY$^8_t}wM)S0R2VT&379f&Rj?C^vToWM78&DW77; zFy}&Kw#{;B54r%2@~M8n@zI!ma3XX8A;R$rnBD^OIqC|xxdBRHn6~05B@|3~g8A40 zvw&a<#H$rPtjB9FaG@Tr84|nP*L2AB{CIU#3yRl)NDr8L^>}^npMQ_nHSiRQ*U{bb z<8|&`R!IHY?DFIFn!L-LY;UcWMhyUw`L=RR@-v`A65_TyNzgn0dv+cN7d1Q5ro6dZ`xt|*z~_4pkYJ{I~$ zyxL$yHp2-WbuiX3Z);RWEDi&UtPB) z$E)JsM0l)jPdDgLx90|mO*K9`Qm*IQb7a*Zd%pjT!JaPd-|cx09zsf9(IwxWJ8rW| z`q$*jd;!zRD^$@-N4!oW@O>FvOm~2sFhY% z5OqF(LE$MLbbD^Q#VRN!C>>OrZ2MZgVz@&2giwAfi1H}<-|U$NpVjT@1NZ6n{8eI- z<8zr@&$s8YDna(#^_9V%p}+sTJ&UWLIgXAYk|SzQ@7(0dyjz{^c^0n4D!I!XY+sIb z0p#MpAOd`}cT-Th_Z%woANKSS5t2P?LU^)gIOb}C>{*KA-c})&?dd@&Y|o)Ag*^_% z!Jb{2lC5u{P`0NO9I)qlI5XQbPK3Y2b9mNCXct-d8}0GU}_i9sw_* z>k;^UK(1TTzmvxFK;@u(_x2iP)CBkt8p^}OZ0;PVr-9RpZ;_&2lh%~_{Z0&XkR@c) zt-6Y&TOHWQ9vHc*G$&t1vymU?iq>s6m@MtvFvCuIDor(P!8Hu%+WD+l*_jg-jiN$i zKC$lu0Qc{tFC4rpB6fQ#Ck{ZtBZ& z-ID&knEJAf;#cKOVP7aypC@Cwb6)mO--jPLJ0Nu)Zz|ClMUa{+v}c1Toxza4SM$AAdNrw0L6NH!K_inp5Avo#J5)%wzr>c^#Fl+o zX)&+YrGm_-Q4tQ=@BLK1eJTn<$Sz}^w$fr%?$Ah)0XHgyB6GG+v{S zjTtEobOR;!Lg4sbH;BCr;o(n!P=WrXBd{U^y8b7GdIUAPZsl-|wlrifxHo`)#jX8nS z4Rn@Qh!F;2W|sW&9NgBooof?FRc}8NWCTf7CxTJ`Z62{J9El85DTSN;3 zgk>Q3Mv8{my(RG3wUz_xQKa?4`p5ne+RD_jA?}_2Xx{h5{>6fi(nXfxsLPm|8l_EP+WqHmA?&6!n5}eFm-Tu@HcvYrN$uSOts$(>QANX2 z;E3}gY!+;bgt`5%il%>MBC?lM!p=p|`Eps<0MC3>F(|6EIv{OXVnTvHzQv;CY&n#H8>0DLmzn6>f z;(K-A*cb)NwZc0wi2TAza(ELC?2u;UjVr8_BkTy~$7nq`k3E5E(fF^b%{Pb#ANs!q zxMCGzh;zRUg}4!+rPWS4hN+a((|qU8!$Y*{&zVqY0UCq3}aUUkA2jOS}qg!4mHQpUA%& zN&l8X`e%R|YzaS$jA_0cF3L^OEDMQI08OM~!b4bTdD6AddqD%JiRO4p@X$Fh%* z?bN)&{SwX*1*GEJ{lX1(AA~K_vk;N`GfNRJ+Anc(8{UcA9dH|QwwQt%pC2{WR;HI? z4~BaAD8+95o>ZVeOs34_c+t5#&3WCXO;gh4r_U(D@@{S^gy7w+imXn?$4#vmmf z4F<^G0y#h+&qHR0Tp@&5LP0Jj$P@$Q0wW}?b^zp40@+X?-_4e_CX5rAt=w+#sGP@w4vh51+u?Del3t?POFN4 z!3~7HjDq}>ARPwC#YV^ufCM3zWJuE+P#Wl*Y$lL#SfUL- zDyp>wq<=AXi3Us#KX1|mrWfkStg=Z=^0tC0PB2&&QGiv#2&RX?Ocj_70#jOt87VLg z6wEGI$%m<#0x;W30VYCVnh4AcC5x_2$ony#E8YX)<%kTlM#)sgO4z15HraTW}|zrvEyhB_o;sC{5M0Hq)!w zg&E!+rmDFH-r}3d)yy9~pBo_##!Z}bFKr-qo(ai>mZ+d%NLj#-Ub{58X{Cvg&tP8>2`XvXN4|1QPH_l*==h3-~qDKWrf@wX1BQ4*?6eO9C3T zq<6q!zIg>jKWTx1S}|RjI|<4uLHPv@JELr7z1Tw)$`^z(ry$BZgz`7XzPY%d^n|`p zp+!2%KcdEMGenkwgpyehC5ceh1BHftg8Dy*2SzmHsQcjP)YCf%E4ETGwyIU(&>xev~_ETJ8A( zW^Uv#Z;5;j2c6vjegY=M^}L>3t29IUQjruQRQFTego+J%izpa9tD z(+tr|Z^Wu^4eKRf=UDhXw=WwDIko{UFLyf1X@DGq$|;StQsh}>aRW_xMO>!-59fro zNvfP`!=#+%CcH`bC=Ys z^)lDiekfh4O6As@1p*RgDKGuRnW^K-Vi! zOgj^gmefN31Jy2$IbIC#gJ@tNz}Ntfq&1FKlAZx8`o1+t`b`O=GM<3%d7elgAH&%b zJVI$L13wH93^onnsC#I0xo%1SLOis2QIw#MQTCg!s7*0iD-sc_hG`?= zQd;R>#6!uqdB=Nlx<$$vUTea9_AVNc=_g5Drm7{$;^tw%;Ba;^o7)?@#4^7_$-bjp z-@tg;4~Q3XxFAAH0h7~YgLMnkNN%_As<>TCal4hQUE5brb7@6THg^{8Nh7g)I(HVH z;P0T*H)2Q(tIMkM=LgY2Qe(5H5% z2+RT06)>eB3&V`yR@z=)!Q2M3`A!*NwiW{nO*iQ4i}7tV#$t$z>VwMYD>PX;Y#jx{ z!*5HvEM&8OEaXF@FxKw+Jtr6gMAZGMAR>DEJ!R%+ISF^hdfuhglyp>iIvt~qvunoI zb@9T@P|J)ZxB|q6l%4R@gjN(|2$XWuVif;Wejzk<0-}4?an{~^_Hy%*pafo@c*3MdaNCP5X))R5_kt=$l=XdH*O^yMw^A(qSae zv#(MxBMGLk0Va-Mh6v0z0`m`7#OC039)?{CJk+nhf~id~j||$o0nhV43mDy>yV80T zIxOc^Y76xBDCD%uK#lCsG*yPb_aXt%ojpUpcMtdA&>3MtytQhsa_ClY2JC(i>)K2X zT{yJ|=;)6ltb(Z$iy55pAT_=!mj86JXmTnv$*;D7k#jBR;HMVz z%p=EipvUN@l`gaz-a1G5NB4%}eKJ)RGhAedC`#5e_tIq;Aq`6vCBr`u(HCQo;mab> zAAJ)K^i9w=dEbYa5Tus(PpB2%w~WnT`+^flb12FpU$Oo!q_uMrQ(zdEW&IFkP);Ys z1g&mKpmHo+PRx$OtTHp~3UNCFhv{oA8d;co6aa|@+mW~p4B|dE0cH=II~^u~e(2i> znnJVwO&uLRTa1jo9u!H&&Y+P@934{^pOb5cEi^_TOWP^1al%cAHvXBg5Kp`C?Sz-$ zNi1R6cm(4P&8X+;?h@`Up5T5VQp>1H=gr8l1&vB0>)K2&I6e5xw5FprE=-65ihEzy z^$6@4T06@hiLD_bP>(M_$Ciy{i@CBRbDQGh>W}&F>$p_Ql^u~=gI)>8D|psCS)MKB z$_~#hY1z0JufLK1dbkf?;Dz9L=)7#F>+f)Inxq zq~7^R{{FDHo=E8N*@GJ!QwoetL!30>84g~j-_bZYEs6#gak2Rpv})Sd}P(pAgb<9e8vT0X_|R7!l2QMR#V z^Y%DhIpI#%?r_{lyXG#2ElzyE3d#M`2NmSy-b~+1C*mc*U!}eM2}LJC4s7Y|bT^A8 ziQ%=TCm=%nwq(d=i&OBKeM4yF1NyLAE448cCuB{D3>h=U>1h}px0k0S4EoL6k(ZU^ zDZAT=J;JkYW6!H2t!7Owl;l2|`k!TnEL*4> z?Rr!KhnL}!`z!*Fj@ZLz@XwNI_hO2520lT-M*T^iu*3N38%K;_qeXAKBF?N!;VIsi zP55-YNK)|~N$#-2dD$u0Qh;vI$LF}3O;=OgmG~MyJ2yFt@1{$@2_qbO)UvTr;403l z`j@MP|MhC2f4S<$u?>uw76MSG>ql59>~Q>X_fgCAcw$F9fF=0|L|)wJKFwpCM>QPL zwqs1gxV_$nr4zgfr3>X{#~(>@mw3?DT_R`Hb#E%J9E$&Abk&S=NjYJdhlTcL`azSq z>*Dt2US*%Q%sfpOmO*1P5795|lG7@`KT2OY;2>^f;-<9-N6gMS+$Y?BAXv#aE8+61 zU~T+PjS%_hbU-y7=Gt`!-1S+zICNCzlWoaJUVAMx=kBvOx&^5V{l<0zXw0t9gMu8M%xLmv z&;{-KJEr`sV$QrB&MbepGcTJSamMc+l}oprp}#wD1_${(xy!5~P7gd3hlk95KibR} zOGMAYJPf|Wz>fa2*GJ<^H9XlYy49@bQ}AdKHm97O9&N!@^6kV~*sug1ng;?vw7Moi zc_ZWYZYCCD{>jTGeh523X)g1_4&jHaBsYR#Coaz_^6&hh{X0LjG4Mk>#Sb)58pID+ zOaYa4r$i6CUIeMM_(7#o2YL%h9-=(5Shu>iZOLiFQP{er9;fG>-qs9?me{hfb6!I6 zZ1rMNovcL96znKp7CRom*4{oirO2|ebc*){oK`fSjqYs=_NWwX+1R=epc0B7Q8#Gg zSIfrHg`BRPp;^C0BosfTzd>fUY;+cKWL=I-EPhm7#&*SoGv*l_`vA7Y5=iu0@IByd zMVEgxsZCoNZzk1QW}Lu(p(sznNf7a9#hGmtXTGF!CZ_yOhU8@hk!BYnO}-pp&C$e~ zd<{?r+SD%_cvHV@AWr?VfjQ-JK1;_jbM8cY1nC^{hu!-u(;F~%Rto0M1ouO3gB5u` z10V91D9uy}^2A452N5v|_d-Vby(ys2y+9gWinN%6JM=&Q5wIjK6wEjE{RjelISr)n zFMQcx-~Y~+W1I%Q{A+xGFX^}9%fIW;9wd2*p83ouIRAPAJqOBc2n3ls6%^L5-kgR#xd8x#`~dnJ*`ozv!HEf5~ulPz!!lu|KJ`dnbQ0Nh)oc3h_d$58!v+p~TrA9>k9%*NzfYX?G`Z5Y=cDlEpL}YnB|IFspM!!mQq< zobK^h)z-SE_T8w*n2}9Ge!au#ZWComuR)_ToYv)NjV3>)RbiRCbS=)02n$&imHIaH zwR}IVRmh{BGEHi{l*1aw0iyUeP&3CChuYgk(H~GZey8DF3I}!zd^*MbVz{=*f%|G& z*T&%8&_d%h=uuJHGHggjg>HcEY5wzQ0)JopN@9B6#FD&Pz^Rf9+NIHx#eJKe9N12 zuqqJNDrhMPYm&n9(=kjq!1&${9@5RmD=D7lEg1;|Djz^+kg6gs^N{Z0G(fFjDE=Oh zhIB1jtO9dEjnH zq)75K(hh%4G15KCiF>q5HjX4fudG{?!{bD2^L{js|G028O@cQG=apqfJMr$Aa-MEA zJ!!GH-xz=5(73kW5qZQtp+LHzj61=@|z!v&8GxkAc4pxQJi&HV3 zb#8gf9>nw_b_Lt(jK7{}>9CJdpa(z8AK8h;_gK>Dn1=*v2xx5u`b65&*xFPRqJmg( z_*$qM{XbM9TuU2Eu{N;`CUtPo9BE2lh=XCJn0njU>mI@xVCuJjR9@E;YJ?YegHg%r zs*HwlWnLmMhBfR@aXU4Ev&3;UH*as;F&y1DrndXw(VGe0F!Wfua*yR?dryho?cFK6 zV%vKvooesyb0T)sMZSr>!4q&Wu&V{Coa||MD%qWSBGw;^zm)lY%~s}n4VA)<;K-@4 z!9kLz1=TLmGmS{x;pr8g64 z95#?4rdOe6b|>1m1cdkPN+CQNF`=b9ms%3xSu&U6Z;+nFJ5^@emu_Wqya|279M^X$ zb2t!mFvspuVvf&7!WBfW<_tE;`_5gem~*DZr~E04S^(0BoZGdF3I9a{CshO%L9IY~c(A+I&UW z||C?AhPovzHZz(QsFJ zP$_k)F=m31l2gKJSL@0^RsL%9X*WiYhhlsP-+SS0WIv#@Vk#a^{-EL^9zNC%6qV!| z58uXiX0)^kt#F7|c*SEx3f)PIj60@i$eELcpvuEvL{gsa;n)Y4n9zYCEbti<9RBTx zqUp@j!T2||H_@QO^$WA!(3X#3${OzU=*0Us=&XBGYCPq2 zoYReo#62QibhoKKxLwoXZXcVAbF;cdI&#{?qTCSAY+{EboQ#tjfuk{M(lz}a(;+E3 zm=2?S>`pJk*znHIP&K>LYH8Hl3>SB5{1$uwX%bqmfIGd6<*d{SZzC<|F2e!2aeI$m zM}M?#g11D`1aF_Bh4QlE_qF$wJ=EU){sB^Adrz|q?cH0?)9+Dd_z_3m{zU9A>iQW9 z0UcgQcCY8#{sXw6JmB~?&RiwCZiI5_-%S4L%n+hq?ydaZe zV__f9_iU7&&^nBA5-pbGe~3`9&)PS|DDMt~QH-Rx2g`TKC?Lf|L1_dV0_7bYWuvro zZzzeyGs=8E`EqEkdBmi|TvpP^Gv%us2driD7Q-Wpo8hQ#Y`tewM23gBYx-`kPqkpFs}P z?3p)kF8kkPri`*of_}c^GDZ>Ry^!yUPs9gjZr<4d16i>spr#QiInK{ zbU})!_%@UL))S|_x9Bl+MK?yHGltF@KjF1j1Q9shwNl(e!Zpjt$9WF-?!=7y6LA1F zZ713)pLfuyS+$-jV5`sdvi**hh+I78t~6tZP$62Xd20wNHdS~hf2roL*HyJv2|bwB zgTr{Fau~`_@w63saC+iNzWjvA!3h%%nGYxaZ{l_Y5~dYHP#<@;)AIrd0w;rZR5=qM zw6U1XrJSh*)eZK5M-V@#NsK0X(KpF`h##(1LHv_$@Q2eA$|}N6>P|NXo;rkUrA!nK;K053>(w(UZl!QRs2vadVn8}!4`#k83+?KOEajfy3C+!6RkJCs}u z88w~la0$cD(D(*u9BxsB-NO1J1ZAatAXG5{wPXF0XrBpJC57FK;NYY_bGegZ&U<% zSUb=2NW)UlfuvM`(l6>>rglNNsPyZ6P&bhnCO`e+ZXzXK`!FWQsh7jj;cPk)bpvAF8PIDsx>Rs5wAq;+6Z?(xq-?b>;I=m}Cws$HTag^8Zl zV8Cp28M|PUeWE~g7{P%_=rneU(3W7oc-SeBA(iC}siijNaVQ8d%}h5_JVT@WwK?3a zW8hb6Ehn`Y^+bfU)69aGD^Zrz0Sc$FvZqB&nt7tB;bb6rmYOaI`|xlcd})xsrbhlwF6q!8B_xrJ(Ni2b7TnYXVA=Bpw3d zj-$?p{9Rd1S>X~1QV9%wA480>f2VT>f{fZVK0J?xY}2sw<0Pm$G2AnUx<2UUVW77} z9+rzVi^j-z35+X)d$3_H4>i;Nby3<1ZJ9!)0#SrW44D;L1gfD5p3 z40xAtEpZ-`f|W+coH?z-;eK*%TFsYf*QJ=B*RVEri#BSYS!GA8E-7Ou6iOz4g|rck zkCuYFP!+C-nPj;33tbWVe4d(r>E@hvV=C%~eV-9%PoQoPFj|ZJ9`bkJD)qER%p&}w zl3e4XLM-Wb;ju}cH&OrF+l!FqFj_XwnL}q}=V?#sOPo!>LxBApu+-$xNYDTs?;_0zUjb(u4*{YzXD~d-wyXN2bK%rbcoc3GV2gYV}qC;w5IiaKIBEq z#uCLGuB^!11WZ2+z!l6koTaPfaWx|MIe8~sf5#E@j!Zcm!+Ukq)lzsT+_9OK5Mg>F z6o(o*Tz_Gzv-MHL;X@^oY?a(!7+M(b7G40^|-=-a!^)^g9kn`))4nMpm z>Yl83JfC?;yqY=%`mO_?37U4e3Qi(Z45YR!Qk(y@-s8ky=uW~S1t%V&YXx%36Kt`- z#6!(@rPyJ(PAy^2y27TV@Hb69q`@~ZlHo~>9;e-?$BteW83hJTr$T!#=P!JK;_j_t zKcDwUBLt7NC47YZJZ3U}fGR7#B7W|H4Saps&jX8s8(dU$B>BZ+pnWcAsdx=&chR;o znv=6q`$3>k)V%dF&;oND)CVZ0T?L<0YYLS9g7PYY3n*)JlvkP6?K2h1148L-kZG|( zaj;DOrw|hWj1a(5B35r5FbhPEN;Xn}xqSdA{2i!dI|Zl){$hUoocVhm-a(hw!cges z4ic8kg-p!fO9(57zh%B8M3)X(Yyzb$9&;M-kl!t5JnIjrqUc{Vwh(xvv5o{M1RfA= z-Or*ize}KM3zSQsQgx_bB#Z5+pzgi|sKA7YDF1ap`6mm^FQ2hQ;{+x~hpEdgjlHOX z`GQ~q6D0x@MKI3`%qIfVM1$8(g#k!|{dz-#@GCWAC5BjVE^VC4+}V>`fKQ7lcCRZ^i8hI9MlzqJnAjBNl7tN)~Gu-UOgo2TYX+@B@g%THFhO z#$XCjfGU{m;{b)WB9Wn*XG6)H43(D}E(R0_Q)j{o3MM2&7H$1mi8ts`S;|l2j!{Iz*Mj0L@hlc(S<#p))P-v_Ty2zgp;s?8GSg188_Y4aZwM5%8828Ujkg z2$8-{pf_a*D3OPNMn-9GyCvZNP|fw~XbJcQ(p+0Iud@L3!gaz;@rD@!0_+!?->pS^^vp7{pzTFCDkk}(U^t2_>-S69e-nDh zNZhsVu;3=PpuYb&_6hI(Q?NfQ0NN3L%@!kQ$5f+dbxSAtK2T^}?;}F{&WKhb7|lwrIz!b;<@%BQ~EM62W0BZYG0cLaqpioOAF`+AJC;vV!=peL~J) zI(>zbHuKw17o{Awj;v1mUib*y18MI3yQ~Uv6td`>LIcYNKp`&J)lV zlPQqQ(K@J0JSkKI*kS^RfiWrI{n$Wj5`MWoL z2QA}hG%L-=YS4%(B)PBv2Er*r9@8#(1=fkf*@sfI?7j|O*aJJIxczyth|whX8Qvhj zohMWaFNK%kOVAjv7}|=87To;)erJ3kCi$v&sSv}tkI5HezI2k=s#Sx&n4@oqFKj~$ zb%Ww=!hGuVAe|U+gvHaS6qkni&D1R6Z>z%BD00S)Kf685X^J~%xr?$2pIW(2l*Ekqek+=4AT%+HowEW;sd^wlDLqyRrOB&5S0#kSvGm>b8xb_yPog#hX zBOwv`&=|EiOkw9WjW|M)Zlm(JJvp+7F5B03l3LuLMsky(79~&%zuH_P64oO0ho4DE z$V`^05H4e&tJqmaAAqt5J*G2?0eTmpLxh1`mUR}&kgsF)g5>L1x0`u`1*4uu#GQ-pshN`Gwx)aPc1I!qL!NLvff1>wCrrr1!-XiOju2ERI zA0@`|s$m*Etp?4}$U}O0CSq$lq+pbs(7mGiz2OoWMfXwzrS|!++by42({Vxyg@+}5 zGqO><7*1)SC+06nblQ2|6g(fejmpX(0;CpolZ&m8*^FOHi=~xF-_pHlyN_TzbaM#G z)doC;YxNM3I!1-}6A7z61l)H@K+}C4y*8 z6q-Tr`|LT-9ptuhENaYbI!9=Kczf}j?_e{Z2JB$I-nTD^2OK{z4Rj}loq(SxF&q9v zB`#kfzB*n)U=0V1ZT%@O(TwuRJFNdm!~eJ)x6UQGd}}<)<(PQX@`w}bGBWp@*OG!qLHm$Exb z+1>QAOGw!_Q=|s*RQ5uoPJ?p}?15mJF&NKbx+Mjp^7cXf z@M&@xS9W9nYP^Xr9>&q z%8o#p_3>6D-YN}gyw=~LGL!_!$lTVnjM;VxSMZ_4F?=CG0z~B2k$1!KZfQ3GZ_j^+ zzmF!#)~HJ_xZj`lA&!Xsu8^uYCOF)C9P#)#Xc1WuJh0r-%euC*?nfWm0STfzP<#zVV_h(+;8{&eRq&=WU$4WV|tpE?H`j&GV~!SAJ{ z4|h2~wY@2xMlu;-o=0!cDdRZHBt+}lA<)k5Mb8#tfm~t^bvoU@YxnbH7sSDGC&`N$ zWsITYu69n{!u}5Q5^hD{)=0XwL)}^lo|Rh|gtWg(w?0+3XmVC=p<%W6pj)%mtxHr9 z25gL59qHC^b!&3|txCA%pj%zltxEZ~TH#g$y46J8+6)&+a_#O2P~57DTU50zkEm)B zad`bhp4p>SLzTVko)Pp2_6>n5$tPk?bCYPd;WCBpT3QxB2cZQI`uEwXvOkacOeUlJ z4L1ZzRc=9nGEY!`Qr?+PDBl}U$|)3Su6cJDh&4+9e-yxCx>ybYoS^_K5Ma6i@W*Vp z`#>~7fN==SX9BYmb>-Uq%{_g4O9gYB=H{mwU?vlcO`Tuopq2+Zd?%mpMYKLM@nNdR>H&T5F|%g;(FR1! ze8N*{ay6XNR^#Q_**P|pa*>9hr-Ya zfSiH-KlJ_gu&>Poev5Pu#iclJv`xJiQUvT}UUV1{$oAykJ(t6Y=4Jza5Oy1QBzJhmNR27zC$BucP{c#%Qt7}Ebs?+o$*>~Cs4*av)G+tW%S|v z94UYs(MzUkxd|}F0C;a(fojnLMgYDpfL%qxwTd8ZQ3Cjy0&GlxHUr?wf`E+xDC0dc z|A+}Tc9NfH9?1*umIXstZAp_#IcAxmq62m@pfUo!NuGqxt+_6OmRnhjS>WEJSkF7; zO|HMtQT&U46iR(HV=v_y?~H&~CAlrRlU;v>rj9~bEto+HvTc%%ey#Z`aA%=n(D?ip zWTIj+EdnT2jP0I=#UQ+Q?+NVWPj;7C$+|!fcHK_ox)84&+;FuNTQB#iq#Ou9V>%D0 ztBaxT+a-9Opjd&a(!wm1X$cSJn8S3ddAQBAhd?N@njcfYKC1|ozZYyvB@{Lp`tn~S zvZRkE_tOtr&_*~YC%1UtAgA?M-5IQn?J|0DTxY}9l6%fY}PP#e3q1ZhJ~ zVfI*?2;Ql~JpSR*@v`v)+I?Q(MG@W|1KyYdcm=*!*Y^jY1!^?L)Cxy(P@HT@wWtP}El*qAupAw}p4u0|&^w*#VT$MKnQwqAm^9i-^?D-pCOh@Oq@?dK z#xR0OW5H%o7fVT_6jYHQQbSQVyBhBt(@Hcd7lNHCoF43nt-aEZHxQ?(kn=7s-2rz% zY`>+Kp2#}4pKT?jpP|JBKN(6dkJ59e;%oUmhp+|ImdjyKO?vb!l;?D9<$uvH9#|cJ zVky`-`iQ{W5fjNhFn_cV7W0ujjZ5KH} z^K6L5Lmd637t#na(mbG@WW35U>O=GvEzO5^u@w5*5HpFyOx;Oh25qW7t{UC6ADBNP zWOHMlK*-VZ{;U<^!ekM?(u>Aj=qy}2_X2k!Ea?`y1u(^9gh$VAmRk?gTmM@3nayTxR z!Da5TI6dNQ+Vo>MIVLRHoxO=jAB{oc5j5lccxovIODiVAe@*Ix3(#}g{?62d<>adu z8)#sMJlb}^l71ciaTt@Tx}H5+yLrn>A)V>Q9Rf?W<-bU8QJZ+yUXC9bRGHorqy2!+ z1&!2roOotrq&A}o^;WX<+h{+fP}W&;ge7wknZ{%K4VlmEklcod7wC0FJ2{r%NRuZh|BE7` zEa^{kiKZSXi5wHLY$^j9rQfeRz3XT|(K#*q2)74tG}kbb4#lQH-HL*BICw|B4J; zeiNi$s=o3DJTZ8Q7WrFxFh&q zVn|M}j^MAQr#I^OM}V*GQx7-B!@JX&z_E$XgvKFbkjf=Qhr1dVPJI#Vvw1QU=(UaJ z!Hec$a0h0es#EE*eG`&(VxRA6YA3S5>I;kZU_ICeyR1T(uxJmC>OlIKO?4CekhB!n zUxm1kZc<1KDP)OGaoeYGAzf4Umh_LPJgSyu z#vJ@ah5VDaLPeykIK8aSeA#}jsZ{7UnlOS~1p3 zaS?f`f>}Z^l?)71Tcv93)tE*fT;zK5S25#{u5 zV)yWNjMcv1$wR-HgJ44c=XhXyL@-`Y#!HO~;EjVf=8!jPbqkeb&mV|0`%Pp(W%H?CPoh?ev1It)tIK*sO8{sr{@!C$-Jr2Bb=U>P}U0= z7n*=jYctpBo_t4p*xkZaT2mfXl01VpK+~4SP|J{N^}I0A^$_`UZB!ZAjwSspM#a%y zj=(-#_qqP~2OK=HAfUw&&6*Vf9TOLhb z#zuIQTnKSZn23hDKQ2t2hzg|!xevEgHMOW_s_BlmqFSJStPI`NEgCQ%Jq~xY#tC_a*2jq94-AedY5kI;r2%}6Hf=~RYJflcNDS1YYZ1}#y@_EuE93Npmc;6mCTdziFp{HtRy zqBi$}IK)XV)AW}_8D|$8K%x|V2CR^lRZW4J;3Gb9Md+&zpR zP-3x)K zTsejDX-eVrV`*37cI28W?r`lXL}gv1!Z9M_H7`S1n~9RNo&VHgcU;DTk%8Suovtf) z==`rimej(7EI;jVUA7$8EL)LCI^9Q{p+~i6@DdUh+VTFsc>2yGJdHgAk<7=qeqcqBGh}|>h{nAz%GOgGmR>g`w+#WTV*q^6 z%>bD7oGSpM0FaB}y5_(B)gVO6{2!jG!akO7L1cO1m`@91;vkOJeL}fwV|sx6LECal z9>NMK$SICRCqp@Nhyz3X3-40r-u7i0ClAdrlZ{sYK9Wmr^}izXd+lE|kmO+lP30U1 zKhcsyS-D}+{AUTf>E>)W31CLs_=k?eUQQ!Nf?I>7@q=zhD(6*tf2g1XOv+& zN>!00N}*IHl=g=F;}wOXch-2GW>hS80mb>eck=RDrQgIPsAtAQ_L)|6R8?vf+NoEu zxHPNJ5)0-t_lQ`Wpq5$&9%z9l z@25TsUyo(t)2ge-c7uz80kN|vQ9ZH<65t5IqWKEZ?tdTxv^6~M#6o-8C%L?KwU9I_ z7lQJ4_yjT@?B_}c%T12Zmc~neY3Gp%3Cv z?~Hq!r)(#Ff{ooX=n3tgY>WfIoMbG-l!kP6CC79tn zL}&YLBv7XE3(RbR>7m2y zrsmIUFRoyU5lnFdOftdzh6!s(vwH;V=OuxO&|#(s%&r*G&rXbA`<^nugc8gWfteyO z4F#qYdPc095x|2qlN8KEf+=i(+4>n^dJ0TqfhjLA)5j{9CgOmN6pWo$A~a=y9?%zcY{8Z`YMd-NGQY?{5Rla|E-Gzt^&TAutyO=1&O0Fl$D0 zrB*4J&k3fvp;FgA1q^*#1{DtwnDqkll@2pdVEQYVegsq30JD@}nh8uLfmtLlgLD|1 zz*JB$O#o=Z@UPp9u3`5$!#s-+u1oO4P%n_JZ zcmk;TX=s*p^WaU^O{RibKrq>cmTf;~-~CkpLmebqc9e1I_q@EE7bX&6Qdg~z|3_Sa zthJ<&`>|}t(Rv}ZQ@M~Ds*na$2(1tZZh{9-1;{!;DZc!wE({ zK@LRmHw4pGq^Tn?|A6X2-Dx_^4R#89Ed^7PVEPy;HJD(+1m@}+T&W>nai!kE+boS) zDs`o%=q7?-(hZfWLNFg;;teWZBrtPCn#xc(!*r)XN3VUMg4v5n4By)Zn6t|O(^+7; z3(V^RvlK&X40Dk$+q){5=>#*@0P`Nf6c-qaz%&z>UaFp6@Fr=aH;?rRTTLbnn-@VE2u*Ix(m z0T-a6;8MvP5Vjgp;rA7kwJj69-3d4vZ|wpsU%a8hGX;ftX&3T%y@Rah?OKsZ)H%z_ zue&}UF?$EH@YIP?cj~;UYM=Unsyz|o=z$z__w+q@xR8GU3V^r^2eX-1q7{Z7e%09_ z3{41X|4}s&_YwwMeccUge0s66PZ42=jsi7bpgz{2dI_<&S5Wf_sOXGG;dd@6#o#3 z!g9_?HfMyui#7p)z!sW+GG*1(QH9egn)nf;l8^`sZt0w;=*E z26|&@?n&$O`?FHF$CzmFT{6JbCzzQ6^OeB73fe)XTIx;eVo~@S1+$T0XcMg9+~fK} zz_jA1j2Xl*rrTD6F@KA?@SOKGX_*HChUUBn5RCCN?iGMxQVT;igbD150`(=U+5DOg zHBhqJ@(L=Fpr$eB2fhgJsY5MbK8!gskaT34CQuc0s3CmWeyEB_br3_xzR3nCvknz0 zP#FSMt_)Z3Fo=>XSVSu5Qc%+gYN7!u`(stXO`@x&0`>iBYN^fXI@Iw2?Bk6U)bj-O zwgGCa4%J4WZu2{)vI5mahngi&H>0G2H<|!ytO2U74)qh_7;0ZBP-#fTAk{52Qe44% zudr0h71T0?(T9Tn`H5kg) zQ$fYNB2Xm&MQulMf*LMR`3rH{>QIveYUisQFb|PXfdtJuR9S(_sw_}DFevI9W`GLO zp~3}foIo93rX9?G86_Co@0`* z*HKW(1oge4<31En{^7#HzxC(JwdBe*9}KNA8!QoSy84V%?luNdecu_vxGKTCeS@W0 zA~2N%#*a3KVU{v0+ZQRAPY5QND;6O0^9ukoPGEWp%wyzdAeH4hOfP}yu3)+mOdA8t ze1fSjFr@_MtiZga!<1%%uv-+&AcBc9RH{8-h*V&n{ry-q-wKLVM>!xG-fI)p?7`Tj z?}nkd3nyV#=CW$i1!n#l&aV&Yd@Hh!U|3=x>m1m-&(rZ&5_{dEO11LL~B9fmr6Mlfr{ z+|LTk1cAA#8>*_9J4(T{BpCG23rO<{!3-3bbA8#~4FzVA4s%{e|4c>E&%=g*K^LI_ zOeDeB1m=B#86x(st~b*e;x_XXOc|2qEd$Ka_r>{W#2=aFI3D9Hs@2Af0dmiB7@d4) zHDtuJS)`WuHO3{+oMjiQB1O()T50|U>dod@E}21PRpe5Ve7vE^zN*OFK?>ka73|JHf6PE}u@&Fh#Jvv-|nov!G7sSTxrO7Mo6+b5u6b(7|GOyf|t_pDpGNrHRRj z&*IWUsFJFc@f`O{t>40DxSG%4@7&FpO+1As@Tu^{MPvh8jNBvN?4-9b_&$H^yW%10e1wo%8Gm3hgRWs+4IM?Egju{;+INDVMK77YLDfDe zEVC<_xPZw9dOrS+C8I9>j5~%y5$}(wfwhtc!U-p}EV`=)c)@`yFE6!-Grrk@)bPA) z_tE%Mqt3*iO6`P1>no@N&UqhcEi_OWkxSuXdy7?Juk*Ax=LU>1`8=YJ{2f1r&Mlyf zjv!;Upo9H{roC~}Z-{#x`4n}SBk-5gJ)4}$>0U<;McwHTzPg$GCE1f%mLyMhXO<=x zOZKcUOEttU_@xOX*|W9mL)0|cy|r`%{%-F{FM9`nw|A$P4(Go!%WC|0X6X?8o#eV+ zGwll&1SnKAF8Wu=w-M`!q`W4ZRJ?jGRq-^Tn+D~i;#)ED577@T#1@IdrVQ(XLA*+TSTfeZO`TrsQJjM9p;Fu}onC6O+^wRt=18Y$ z%HDko8*|Vke{4JV9qj?~b(;K}04sAerAD`+Z@DUG$pjyL1cqfWt*|tRp*=C}dT^aT zE<#E)FF*^&-HI06*4x{b6|3Atf8V!VQsw+b>$AP0M4HSc88!D9Dt#gri9SR#(NSL) z4N{8vtveU<&d1F0v3fD@unFx~;S*&18C1+ZLornY#pHg955`3wsMK{RM^;0oc~OK* zia3vy95p!z9db?5xplEmQ$%J~Xi%c5}sE9uV{eymLyZcqPS+t%R{y=l@>t5<^dWCx$+x_A#m% zjgrdQNJlAjJy=zSlee&Hg+EBL9)G_P9`MKQ&^GkPvX$phPwi2B;H7%7Z7$XdHgEb9 zma1G1x&uSAF({7-*PdQac9%U&Xh@g}@ob>^`F3s`ua%US_}?ooH5u(-$u8v2F)ewN z%ia?%z}e&!$=yms$Yws<&|mdcQIsjGQ%Y)W-QwnPH*=ejyNHBoSX+kGA88k?*h`zH#e9ijZK#M1SBZf3qnd!=94Nx)9cqq^G9!IW&g@xuKb6xbwm z)C}`%CAB#K^ADDq6%&|uknaPgt1i<7>0X8_7$3p>Ki1wnKB{5~8xBh#EMdYj8j;bc zK|#$m7>C8M4JI%HiGZ>xE+`6!D2NH5>?A>kA;{*Aii%f66i`HlHLL*?SyVs}4JvSk z$RaAMlJ9w{`Xn>s{l548x*Ily$656*Rd)6L$@}5r+Zf zq_OpHURD!_%5qcVgh?=VI9Kuw>WQP)(s?+^lC52jE>&4}OsEDg=pExkjvUwC+l;5khm0%wUt`$Y_zJhXsH;d2X z%2u$GFi5EVD>m5PECK6c!2ZVkMX-7l*whNJQ3@8LV4FMA=(#)FV19L$FV|Aa789&W z6j+-IFdl=7cKPgXsbhA7N~TEUZ` zP+%IXkPkL6uM#G5!nBU{Az|_qrm?~_SD2x80PhpI?Y_albSF&YglQe?QNpxVm>;vH zQtx5h01h>QlOWXGCb!)`)Km@?66S1F|GgS8bPLi>glcGh$xHx(f4--_;lkvA6_W2DEFW_qhQGDKI8Vl|*xgR~P?!8d=)S*TT!3WpPp z{sWovz{{YY92v*rO~!g>Cb-FBvo6mk0JAFG?qk_h7Ct{x&6_V$i}VAMZ1F%&TuIxL<-cH! zc_JQVv)dLF;Z-d1dPWm*SHes|4c(D!)d=buue$m%OuJR>Qe8X~#Z`orYnT%L7>SIi zN+v`@DvDL)u`#BiSQEv>-iT#U^Z%$T8pc8%stzw@A(UTMH;rhHZFKGq%#rm_deW2+ zsV*bpva1}-PCqdG{N4V!vLMP+R+Q;qpJCQS?LgvQqFGvIrB$gBUNNj8Yc55NYGSpl z&2hcD69<^aO3jDU!Vh3fVg=q*)%UzUKo&0616jF<&?C7M>wKJhIY(H3Rpa|e!z=u#yjHpe(DLCF_=$ZJLx<;GNNVy@1e^Bm!v z8`(^JMaa5feLE02>`=-1*zFPZLJ%Rujg|Nogor?v$9#V~zIPPdgs1Wzj?_7gH!}G# z4>|JWafwA4ZsDqOZtdc`ywLVBp)2tL?o`P+iAtV;NTQNI%Ba`XLbMn>h+cBrU5a5B zCrIAML`kq3eeR-)O5Qv{`>2mg4a>Mw?=kD;k5v8^pd_jA8ra}6*?jQ;ip|7ksEx6f zB0P`QsjZ?Zw3|_BWmI6aB&61}?%k&X^sxOX3(HOfHk&og1FSbNIstj0j_KHb5$7k? z)$G(C@g&4u8c=cEk14&*W};#B6IdoBtbP~GCoGh8QP`uj_^y_uyMm*+_47u1E9KsT z(_ohX3ZOBiO_jmD@G%+e$Zw-pRUG-rxH7NeO)$94$9;#Pg@0Vx2S2TnPq@}7rTVbZrwxnYZhlS24>iF%eewXbITa9#v}&2h^Mwx>zASthNg9=M`uea;2H7ZY3scP& z2lpmm6{JU&714TI(_fV(MYkdRc~I;yHql}w7<7`ovu@Juv&JV{dFVZ0>@@7&1;)A_ zfJiW>A4?xyi4c8WBhm+1*2OWXcMBo7jLSTiiL$hYeyv(@2QcLLAu7}`hZlmE(@6xc zu&(s3wXjptyHeDV9bQ!h?^aCG1doE7;exkxEP59XH-Z&*rYOw9X*3J2kv7bhjzo9g zVqlJ7UL@E)N`40ehBiiIDU^=(2Hqk0&{bLSZnE)4DBi&;O4dunYaNBx(BOrzUpb*> zDbz8TCXn_6cqcVXN2m&<%`i}%33X=_)Xp(VTIe**GD7cbYs=c&!k5G|cD7LHWdW)6 zL>qcnra-$5^eIev1T&(ba}2cBI#cnE$%iibW+1hhjWpZ>H1W#T-O?`l)cLHZ(>v;3IP^u7R9W3KneZA{8urz z*1Nqq%%Sn)PV{+_Sv4%YUK3xJq^i2|(w02Urus-5EnDg6rF6UklPn^%Tn0t%E{2X- z7;BhpstWrw^*PgtQnYJVR;W%2m1RTKl0ktx#z1ue%Ai-MF-(dl0sFo zp@!+0?DMkbVm1H9w1ml~s(|`)l%eVsK*6ZMT6_Rrg?8W{{rM_?uGOE=u73VpjDOH7 z?X=uJ+E4vx4B^Ik9a^<9<(^}?C!>_+7?c~zmP}vgd5@4^pfDY5n57DH_Og<{gfOL1 zFmA$BQ<$X+(^g?Fc?~s#6=t!4d4e#%M8TXK37B<~dFmXjFjp$fG8^Uwg&AaEt|!cQ zQ7|76W|YF*pfLNkQ063`T;xqhR_GrkTS0&|Y}613d;XH`>&k zkY4XT@Q?Cl4q~HZJtH_z z@4QzLaunfB8)1GsLFjG}YLSp_QH0C@0(3%B=n*9*PNBY2OLUJ7RYQ$hH3L;dVm3!X zWdbU6g~F_tqFv3^Hs;x4vqAK#d)?p4n&$|!AqwVlE?{;_0;}_Rg&D2XYyuI&n$Zd~ z%D`|2C%7&O<_p41QJ6G^Nl+U&)`pp{nxUD2DMchIxGD-}7-2jL^IKbK@AV2Z&NhAO z2e^-4(n>u^7@eoDXsD)up*rVc{)%b(ylOH_-VaWnKwWP`HB_kA6{^J)sobyV zI0AKpw(qM3>K;NZiK^VbXHmHYe_&1_ay;IIKCk~WhMGIr&Iftqc_Qw4{O52YdJ?X% zTTgc2KbUObpcH2%=#Ihzp)Vzb>XPvYHt&+d^SGPFqFUJX1HrchaosruA)9;Utt??1 zIbOhV!|16~Iiku4R8m)e1}q(2{hVhp$jYtn%?nOJ1z@_r!OI~e$H=(Kk&g)yV5iJ% zO`gVXz(^6ELb_pu>tZ@@yI;J}Tqc!zW9Sup0E5u*jeNcyuFYfb{w08)s)xUUo0xh1 zwGo2fSB6a+G1UNPA8~+FIPV>^Z2bOZ7Qf@1+;d4$c9Dc}UzDnB!=g-+-es{$-Q#Z;AQ43xAQU&_4G7 zr;;f)*mpy=1DlhafN#8x%-tBcP>QS(Wj9E9%W*%nnI8sHw%;kucqvwzF$W?=d3L4A zZTHr5+KlgEAQSv9su`<4V{3?%d_~#zr?`z@n=bDv5Y_CSWKcR2WlR*x`eEV1P}-xM zPdp-IM55JQw!n2vqwif>Kks7Y+&aibVB?`ZAAp;YiItt#a1HBK5E2vb!FS&y>_7?W zjW_j}JodA&VVXA}bLSXZkF2p};wZ{`>1QHfb*{&R1_Vr8x{2%sIqnLwu966qH!zbk z@ACeCKE{e@yss!KjG=stlfd7>t%Sc{V6292@+W$S@OQS1?A(LSDt}WkR};kkG7;V6 zgQ4M^3AKO%0^n5&__6}_H@eK#P%Y<`2Jj5V0l{rifV}`1>I{|vW=~6@YqY{NvSGdv zrR(1Hm(ukSVU|R}I0#ckVFC&>(kdj zr%Rt+Dv!hawD!vX)u#*aZn;o63OEJ9KK zY{QIJm{A6%Jz*M0!F&Ojuny5l#)y-|EEcX*vnYq-Vt7ln<0eCO_STDh8u;X`l}W-7wnrdOT_ z=W6MD7{S#RG*`T^v~e#%g9m=%cIo*wfyMy$xf(!QE@)xtg5C(YP$pyqh%4n&*D;JJ zaX?U28}SWATyaVf-zVb7(THaUg%cS1Lp#v%>W=$j_xJmf~Xq5 z9|_1a+``XaY5*VLthE4QUX93~lh?kl!*l5 zyp@b}AvE8FbL z+tfZQJv4l!udLWNaZ3q`$VwNo9h3TkmJCGNu_OQ_2S9S@6Fi3&SePpEdJw}c$ZHQ+ zXOY+Xa@)P>p$>7zG4Zql)43dTanXZJKa<`p%*r=X8znj+oE_9Z}LB+3`{A1 z?pa&ce$Jcv{L>lo{A>|vhe9TeT(+Bx zYDt%kUzsF@jH~GBJ&WJ*_uYzD1HGD8Vgs;*n4GJ{<;7-L=8eNE^^K45EhdvvJrh9Dn0C?LIz_LI$||7;@H>>|LIcHK<+lN+T*qL*0mY6&U@B@ zE>Mxqx=Qt`&S46MW7<}ZV*>G?(}uHNH~=)z%&Im+pZ4cdBpy|pq14poZ{)c>$G6d# z#h?zvRv*V1=(|!&vu)nIj}_~Le-YfX?@dIJaP+YY8W5MgsE8$~H%P{v>u2g6CqB`( z!KQGD)}@D-l7~W9jzXdSA2S_Um#vq_R>cHmSxy)9o8c+AUl?0OhsUeIVd*!|io$je zJFfj^Al&a@0yrDqZx*9|^aIwQQ2F}}C(N%=Fz*uPr1<%6sP45g5*fM4EtJV5fUo zeE~z6f-s~i%4=eeUE6OqD9_*myxx1P9A!IP;o$x-c3Vz^!mcmU8LA?#eC!X+L>?Yj z%n>%`W|fCY6_^ufv2OlJ zd@ehspnR8>e_YO#a}Tu3zuZKc?rKwhJ(fQ_s{H#+`Pyt(U^)PDxkEmTy&XXV822j$ z5545;{|MffN3@r0fOi=z6TFIEQWJQgUc%;-$qI7`gLA;_x{YiB%x$V(@(s*r!c>jY zbsG_H4LKC1ox=Q}K_tHoV`*!(F)()!=3*2zV+gYqjTA9HfPV-#j9cV0g&CuB`cazX zBnQs^_Y*ahvI+%xQ{X&@3owb!T2SA-<}tOY6P}NY$!+8f%#yKK;GXtObgZpIg|a=+ z!cPO62?7X)-y@h~>M-QQ;D(-L3bs^2eP9qSKSL%t@4ZQ7$92CtQV;*CynYsbchF%R z>t<%x{I?!d+0jTz>3lfm_3=GsLl+6JQXWKuQ4(GA)x6XNnw&kHOt@MG4%=&0O_r(9 z>57x!OWF^3z|#}79DIy0Z)2DMw;XeSsRYT;ceYd{z}++U!W`Uj9THGvVUOX z12gG)asQzFukjV4gE+PT2S%)yy9oHKzy+B9SYu(n6Jty;e=mLsy9&feyMM;XxEzCU zt|<6`NNB}z9oO0QT1#^rdI5lp9G3g5>-RNKqKYS0__M(ZfA*Qrm}CZ`izin2vrEJM z+40cd*8S-5=CulccBTqc9byZdXW{hI6KJX|DPL=b z$@E%%O=~Mxo)HO(Z=->zJ+MSz^H2lsS}W$yJsRL-^V@(8J{ra5mG?&gCIQeJSX!f+_^88XyMnh@LQt_ZxdPg zds3LQI<&2beLhbPGMu5=yaRgfXf-c$@dcR`KGXN*yYF5zuopciEJ zPRQ&D{1Vr=?^4bCIs=i0@?bXNs67-Eyvam@4oQxDA@T;^h)Zf6qDUcp_Q6h;}P z=Xx4#M+x24tlV>@eU;=uP88QM(z-n>y6{7NRJPRiJ)yF?`#Mnxlf{{GUM;=>OyVAp05@pok18%T zff;;B04qGlY+X#2bZTIOzTD@CH&h#j9Zc}oS zlwEf!Mei!!&{Co3H!)wR-g~eaVAni@caRiKjl%n>S2+8Rqcfpl7Yd(KMm{brm;rQY z*h|`5y8+MmvQr2-Ss--~VZ9iEw-z4g3>aT*KI_Q1==Gn+$#n30`Ma=pB0}dIHV&A9 zbJ;N@ZJ&r|6Cjm{iuo@=Bp;+dRa}GyEI$&q9&Ce%B&C<5$-s0ZhGE;cR za-Q#2Z{FGx+>6Pni7SRy%W@vWu+kcb;js>Pr%J%J%KE-MGwR`MrAdbD78d>vy&-N= zHtf6yjb0%t7P0cncdEvgdt#H?w(*;6@aXzjbPJf9mbPJ3C<7&{Y9T)sjPD;sgF zJSwS2wTZ^4g8}s&P{|nS=M2kzkYjz0ldXO~R#@03=+^LSyoEW*Ev-(~^)!Tycnd8y z1(K|)D$D;f_x8mBc(s!yB8m~P2QlgU60EdE^%=?FDY6JR^;P>Mi-6)!qn=wTq5r4Y z7ApP_Zh;&}!BDh-s7jQxRrulB-H&XF?_i9G^SWz9(wZL>fuVl}Q!*Parwmpf6^2!G z`6qiQ$IMZ6L$r?`lFk^rT!r{;6eKP1vU)fN;a1Z=wFPK!Xk-gq9f{XS@d_1h!wzZD zYoVwGZ=84=?tsBN2`4T1WF+2~_eRjiZja`932Ke}$bT5WLto$@+n?=yFAfGfhgTM| z!y(dH#DEQhH;?Eyxk<>fg@wEsrW=a}ldR`xCHZ;sMe9PeucOeeh(HVVP$AeVgRJ)FEy6$NZ3q{NEW;tV>%rSG z{zY`GeD%T1ZW!tvkt+OT<$yN2!+t1V3H=rRk2AEdoyO^TL?5wynPJIxr_@i1$48F* z`Gg9LPQ`cxa|xNZ@4>+Wfme7s4V>-~ZFQr4Y}UUcrgQqVua=+&nT`&pGaa4In-lmP z`TY?a#I^uCdG3v`Y`uP+mA-xW*78>-BA}>0Feq6DE-_A6GjIGTFzp8XG%w~3$t*aV z15@?yBmJ(1!j=WtCS$(FUpf)Y{04&E&MKarR24rfVHrZ+$|7=mMD%B$p3=`ab)kro zEMqPFRi_fV;``7HJVYyff{u+=s)e`FgUs_0uuejYGBQVg$R{Dqne3#KW?hX&&g zVl0iqu(Bbjt))vlA5)ko#Pqv9v0)xZ--Zf%)WDp;q;YUf6wEt>;Y1HO|Bv*Kup`2+ z^%mMkglEDyn=``S`krk$rUu12^e+4@ROII?gc+|OiUMZbYE$qFv?(Yk!JvsVg-?=# z_oFDdmJ~co3J?#U)Txs6xF^7F;$w|PkvDIhnf+P{!Qt#zA{LirFdNP1-;&{f3^QQN z&knrESuk|N&Vkm=tQDo&4Zo!%N(cN^rn}^&4#oM+D5CUGumq=0znBsK!KNd1`smk9 zt>@+IF2y z+?dc4e+#EpIE7O)5kmo|D#OG}lLxh}mha(hNj7hbFyOtxIZ@pDy$iUNsZ4)Lp*kwm z7h<{4j87}nlNC^ZVA1@&!Rb*@|0UE#rRsWxsxQM8*D@L10xBTQ>P`X_+wUXb1gAv7 zJWQC+0E70+n9?BGy8EHzn2f0nkU%%)u}mB*p@Q-tqi~{QtR1&8QDdwHxmnmixN+@H z;l`h0j99MRb}xWHv)nY6J29%O$+H>Y_is(x(=jmjMIKI%gXue`=kL^m>2vY4vtNIC(_bh*m_Bwy70;)YMAdn* za;)NH`p)TdcFM{0HATmV?hyFh-u0oR&VGG_xy1jMbLrzVV8C!JeBH2f>9>O&DSEr+ zzt5$QuUGzsoJ+qAZ9t*W(I! z;A^ek;{;5OqU$Qs^%P(n*R~gbs;3Dr!yj^jGI-8(j~G1u8l95Y{Uvz3k|)uD-odH4 z_sAjNh!QXQP0!i9jNQ>zslhsr1|iF4Lkfdcq=prd zgBG2_Stic%B1PLFaTaG=+k`r$UEB)|S|-shi7Q%x7U~#|CeCtLJh+FaHwHAP!L0AW zdkF`Zv+qTyIfU($9(qpBBsU*dVTTFk2K}Ae@ell}pdGA&H<$t8$JV2Ssu3Oy9NsbfN%uVKW zH}?;VW0J--kntohympd+qT@7AV=;=ASZLnLVR%rM(@qXIVJYTaoO4ab|8~5{7$ow! z$qqIFk*rm{Xu%xQ)`F`76qrR9#T&S16l3Z22*VFFnx28TfFdExm8_Fwe`Wj6TUAtuV1T# zHWY@K<*JlMt7x_g-(pl!x2&Vch7GVAZ>cR4Kk4F~rX)ZjWp-qw4AR`2wwZ~a$#7$W zdHhe26Pi}NCjXfIzSz3Nr!N}P$?Ww z$m8`2IZ$aFVng1d7A47s{28-U!9f*}X2R=%NX&zZ`E@O+_iYkVO4%jG4ldu7>Jxvp z)zo`BG5h}uGcFR7hkb+2=N0pkOwp!nLXCx&8`WPLWnP#uRQ+n7f&jTOA_Uzq(OF@F-*wDF#rQumJ(vyqMYjVOHgu3}U7S;Xw|FU;DJ zm;uEcrzMc4?E+C|)ZH2MLx0{ga@ioZt05&t5xekA5B z@opOzDCYG-WXev|SBR`5w7c_c%uHf7{TJrCb`ceC3rtTBuYWIsd#lkdbSz9nF1L;v z4rD`J;Z46Xry9(g1Xp2WY8>XEZ!C`Wjz1YEhHm3Z;hBYBLQV^9hd(zf&%VTrSnyaB z&(dsKR!e7oyCVK*+#SRqoi~Ci96g_QkVXt)W#^%Ip(`gX_r`TFacr48@ja5#Fz@d5 z-;9Hcz~$4PL;hb9 z>dZRDH!yW_R#Cqu33YlVzDc+1%Wd4DZwzKT7$3tC*9>+g8h!ox+HvH&>R67Z+egIbsAy`e-yUv{e ztFt8=DJ0XdlNpVX<>H%uO>aJo;k-db!94L~CLH z4c(~WYCJ-|045{l1XZ*GcI^P=7(L}+2vs?^E$sb#+~$9B1UhYhPD7!J=9Mmk_02R5 zH$hj5gCI-F@Ls74dvxR`(r4g%1 zZ+!L&9`~{SaBLZWVUIv;x`T(2qtyO;nj!G6c!L+;+H&HUfVrUS@ zbo3~8&8r(o*W`Y-O;iav3i?B#;&%y@pUC^Y_+7djvQ|yHq07-pdeoq*s(+llRcGg{ zm%jQ0R5|)8r@dqb=QinE6@B%?JGHNx{t>z#%!L!*5NL==_D0AITKh3rMj4=9EokmU zU~_<49jL)R+FQ#b$GsyF*<+?xB`SJM-|eED3jai(g-%#jg{8#ar`qPSSRLpDHx*x@ z`_m%T3Gcvh2yTkf3BR|Br2Ad5;m$_|(X~^u6I_c7VoHBeKJI=%B;8$!xGIY7w}BYC z3xuW>g`A4kK+)b;w1;f89m?T)2CWj&K8Zr>PBg|7!OR_%g_+|N=1Lpp>uOTXFV`ti zD`C%r3!`9a5{3!+R8L5N4~$B*dVRwwAsix##g%qf$zjjqD|=Ahq03KWBQ~Dgi`S9d zWX;KQLV4*PMpeXfJ!K91*cro>ELpIFjLBm*Li@3Gc8@bgHbz1rX?v_ISC&s)PNTMD zF{*t?%(lpvkHZJ|`txO6M8&WRx+2CgjXU<1;~!l_`tx-pp;|Z5+RdBkdh=OF`MWD| zyENYD=0xiw`E(;^%2Gi;=G+i?{}Gd8!_iXKKlgGjPIvrVNJ_D#1%?BVs4xF{8r|;{ zPuytC}t zbwICOvdd^CM9;8yAISLyEpDC6!nW!s5Mn`-Y>yEU7%F|$rFIn^po_XgTi2)ve1S=) z;JZ;GP`w32;3M&XoOueNg;M`R9G_}gi zT>@9fhT9w~9bv<2<-$_TO9iJ!!BryM`-BTP$0|%`g=q)HC|nq)Fry93V8ZZN_3&w} zm2SX1q%h4D<|c)ifZixDZ=?4>``lq*ZXnF)D41snbEU$ZlJ{K=6sDC8b6Pa0`@|}( z)DL?BGcpS1R>JIpgp{|*)GgX3llV8_oUPc2?S)~7P(dLvM>M~Croo;->{(IRyY2vX zj!Iva!n`8`Mc2zVOstAcX9LrUFhiqY{DetSm{^6;@usV*4O30jo4bmEIfKcj;FD1> z9SCz2VLjHA-ieiZ47<@m3-CwzGHg02SavNzkI+N9nZ}FgyAYZNO8oa?=FoM#%7a39 z-&E;iSgI$g)UVP|>M)H-dKKm{f{(Chvuv133e(ZRxCzrH3Z{TCO%#i(yt9)Wt?!_v>GQ9LEtzn_N7vH$f zyip=l*>7-@QM^$EQMJl&elgT|Js%e=o`+k;YRXs%^3m{;2;J3y!WOx6!CQ{)oL7s= za3`+NW^M$F9*l$cXD9OuXK%`g> zAtJriaC$!gVyKJ4+@LT+6y|*!CRt&wGcb(_6B7l~k1+J}&=8ytVv`iQn*+&usk64$ z^AW8ThnMh165n{%yiqsejYNH;Cg138-dG^*iPcBgG&fGxdj}@#;R4fns6bX=vK%Tf zaSQkP_jfwa&?qxRv!H6YQG+$=Nk$S$+gWIrZ921y|UhqdsWG~?KC;HW6ir7jBi$7}&l&hx__NYM|K*S?a zi0?!phG5*We+=`%{>JF*bvi=D8zJ7J_&EL46*X3+{K4 zwLgG-W8;*5g;!+BB0Me42U+)jZ!6-h=-h>8O+zgL zk07|OeFhHe5~Rg2Ai-8)UD4WqtFi{0qZxv&p7~4x82dJKO$R{1?hH&PuyYz%Emq>- zUjp17z~uRTL~SRi94Sh2Yn-uzld!!?D$p$}v*6+b}>3?Uqg8f-@+NDU@xf#XbpuRw7Jn?)A5 z_7>%gU4v-=G=Voe{?^0O3k{A%lFkpI@_fac!W;Y{aGwp1y{tQ?`U1^mFm_>~?st0$ z&CdIr34#5?$Y}9q4!R^_lphccbk4|y_3I=05f=+!Se$m&s@Glb?4pFg2IBTvm5^5# z(K>QaGX@*wBW3R)6_H&q7Fe3{eJk>z@!&sIL|lI9;_eYk8DLczc@6qAI7E1X4cxgp z#ro`KTS(5CN?P+)l7g{w!BiK(ASAB~v}>TT0`bfL5Fxo5&=ismgnh=q+QH!a4X{BC zbp`_=&o=-A#3pwTV%GqOipTYpC|UQmB^AW}2Hg~VB7)dzz!Y%<&^-_^0G(?mKsh#0 zo&rq>1A31@k4FHlX$l~otAjeWlFGy`_YlaHC&~x?<4y%?0U*}#A%Z*-RmTy4VO-U& z;{YAyA3Gyl8>5KLY(z^N_eow9^_p&V8CWo zhzy&E^+qT@ie_K?zzR;r<;fX5P)VmKlHA@AyF2;u?`2F%`T}<&C3FN}@jq`|wtrZH z6^~gb9r2ENnmheq+>LEtTez5tG{#X8Og4*QQvUi~YCIXiJg}~vm=h@Q5i)3W|M7{| z_$KK0;0IFU3I%?96XoG5b}%lraxD-r*K6+)EaeQiCbp@Sx*q=p7(JK+&@;g|4f}N0 ze=L*v^`v+Xy^IyV`WM`0?v+NiYo$7)l)v&4r3zC zr{{W@d$Ds_z**DiBF=4ZfktFxu%I4e9))dsEqOY|dgKkA26zJ_D%|T(Wf-keOSnkZ z(f&--bng5Oga+=kdM~AdQ9X4H-Uh2+W1e`3L1E`bd}saji283!G3lUBzkoF3>1saR zXP#!1KP}X!mn-9G&^+CTQGk9sP@lHsw{MuI+*tvB_MhMu$AUN7FVq}$sfN4dW(781(l&!t?^4L>a|INUaVK}BQ!Mj zLA}nD{FpxR752u8UiU|MYE?6jG*WgBj}q``E+3WlQ%<}KPNOz>gab+3g?zNjJi?Tn zd6a}lllbU!^Qc7CJ-$Ltzk4(vy>1?jFMreskB0Ekc=PC*@<;9Q=s`Yu%sg5H(eULJ zcT>jRjYq87(Feqxb!>_4Qh!)XCI5a|AHby%87DG-6V+F&KgPvJ(PQdxL;Xv_V!V$Uh4eq%CISf;&N97)TofBAwo>agSf3a3}B` zXu92odqUwpF>oD7Q+^~(Cy~(`8Yt>Kez2nKRFvOPPpR1riZaNc{0*9e6CzO-5al{W zNmi7P73IG+${|$-*Bg}OM9GOnd6XzR-yQ!WJ62)r3yRXuMtMb1e)v!sG>j<2B2gL< z8dFAC`u^Dq^M*)S_UxoN>iOa^99+#>$LMR_X{FDthU*SR@Xw_~e+?GhV zrV()66mG78UnxYiMH{S|Jp!hM@6a2H@c z1#Ss60fg&g19y@Q`dK90iEG0v+W>I(!cp5^_Koon%w zlW%V!GzSkDLyy>xa0|j;I;0iev&9nBh?CFI$G z0PLBOWe7AY$_wp$Hbm8APo-ahvI0hn%Y*#beg=z!xVb3iEpcLA>*O?ecplOXdG;C9t0h@qaV-^Zph|3kvcH6zC2EwuYuv? z0YlTCk_$|0(-iVxqOtH3%{dVWjx4~}S%C)0_89h@*tcVnRkeC>eR;;o>Q3-|emy3V z;YQO#PG0`SH02Jk98K8)w`pIN7o#a(7G702gx6hz&N&e`IbWDxhzl6C3M#HQRM^w) z7!qLIjKCczY#v5MZ&2}&Qn48A0xA-0Dmp0@t8trDq>>8me;&Rk%o{G1sCD3DjP!7; z33PI4^K6_9QP4#>e+BTfkX+{9hnzEpH@MK`PEb zCW*cW8xs@#6qF|9`JjlZ>(?fN-UelfbA79frQIK5A`^UTD`h#aL>V$wtmRZp6^~;% zKPtHwj|jOV@g;biVe9hx3fKp?$>XmuG6*uWB%H@B2*Zub@!={6KZ0>=Mjv(_T7=nh z${OU!kv~^UnxQ4tcv(ui9v=u}CZb5l)JbSumh>n~`fpT8JJ1b6DGK9Ln5oKvgEDZ0 z*|<|-J}@v>6Xx|On8}1WDvV62tT1;e%p4o$4{fG?2IgBh|3({BNO(KKysa>+eiiop zeUnrw+lE=BFjpCvLc&asqUL-h>)#eIU6^gV(T5}}A^M6I<7sp)Q_I-elH`@2ZHIH5^vjz>;yvjR}CVpuO{hszFrwB;Pvg8>k-&%;(h0ysp z1=n>G6a{vjS%yhXsQPDMGo_D|fUDp_0d8~GnM&ls8&tE%Th;+66n+1zRBx;y$)ONb zKsJ)2(~5B1q%ZJ%qV?HpPRcpfj$%GK3yXRO3E#h8LoUrOEF zMVQlMC0f%qQ^!SA;w@}z9NI;6Fl}Z9W*x;mh>yXTc{b)q#T;TVEvTsA`e@9~#2llT zJl5{`i26)z!og7(EwVb3=YUyQwu+q_)|H^`F?ySXJ6RD+^E^mHX0E~@`&}%YZX%mX zZ(pq${?+73r&KViNlb3{bM41Kw9AAgT@MROyh{FS5E*ILL8u4X^*ial#^5RP*v!)! z=IJm#t&OKLp-U;o;>dXG_*1&t3_HNFpXpLU_IhjH0PV+3@kFwqs2{?zpis~Ee-dUj z)Owz>t<+jI+*M3H$3r^?%cARf*ol^^k2VL+gNn0U+_c6&fqTOAE40N|VJejTYC)Xe zqj6p%&X;1HT<=3xvb2%&rKchREeTZfKPLS*!L^5H8BrIthZ3b?auhTMCNuLVfJIq_ z47z2G)<=k+=%J8+L+#h`|)X&nAS z3_N&@bs@NFFIP#Z_h}3#!1JZhmwYopzL=Ywh`*)R;5qF#o=-%ZL_bG96K3&JSMGvp zx4L!5yj)<8Rtswfnr0z~68Vi2P*RrvFg11zsq>%C!cL8;9$ixKvoyv3*NbIyl35Ex zFbA=(vbIeKakK@+zF=bA7)f|KX1$5a^s31?>5cgvoG;ST zj;(w=z`Nx66!6Z!A*+z5Q@}`PfrY7Hp|$%t*<|1fx@%d`7JN?(Qs_oW7IE!AC>(fG zIdHvA@b{{;nj3;YMPCo@kM4vGNHF&-gjYI4aAH$#Bq!r%2`AyWU8UCNB<3vX;|wNF zYpHmJ$F-wwI3r&m0|Ku0N|#&dBLAd?C!(*z9J~cQGLkwdh(yN7mKhTP*hm3S9gvDP zP{39;;Av6X?ra0N4caUCZgfR&i2z)xoO??Fe*%jjJE>;yiDXNm@NdjwlEP60d^sBM zKtgzx`zc_y0v=Bmz*o=$Qsuqc6dxJDn+P~98qgmB=l~!W=9Q1H%V#LCLJOZ_xDBB^ zf-ax!$NDIolz^LF|Ce6+eE#nw%ML!_7U)qt!0RXM@vSok3WDl0e?7R4ae5Opuo?S0 zfBn%sV@MX`+h1$*1X{CoS@qXAyw$DChQqz{<+TIKb-3bCvS2y0l>^R4zNZ?xojqUx zHXxP+?;d=_!zSIYpq1#Kk}9j3B!)Pq@${pNsng_UX8txu0XKu^3Cz=mgAATWIPD3! zIFU0PV^JBbTF)T~#p}<2V<0{o&Q4@?u#v}%zT)}FIC=GcHf5|Er9!5k{+0~_nO6Jf zZfIs<=b^6$dGunq!+oI+x<-}|axmv9m{={gGK#fF=vYJt?i{nO2`jO)mUs$njS~O< z#*~;QmeRez%$oj(B~}M`c!@8t!~-D1<^{MJfautb(+Mh5?A{-2QSd2$BQD73e}or$ zY`> zit;(cMHreTx82*!jAd7%a4mCq^%fWu8S;BX=UR6_1DD<;1JlDWINWhioIPqkO0;z^ zM1zC;d^j^^u@`QKc{AYAPtXJmD}8XM4)mMABL%5Nd!@pUIHV;OqN@n0>$P`ZV@REk z&L2D&)%O2D>_gpP4}e|+>V@c`BRbIM`Q8}lpAo*fE+qoNaITZu_mspOa^6p!9c>Ci-IYt z1(^DT;qcGh6AqQTF7sG2iuRhv+_J|P z7>X@Uwgukg&L#y1N3^5QL6ExxjkevLK6l41+;_YXk{+_3tLx_!QX+ll&S1f$qk!Y< zyZw#6@|5AA+AoK16B&e?R67~25oygp3NuT!MG-ce8#rM8DO;9+6h5V5b{~`qRLrN4 zC$<}mo`~6uhpe!qcF`CW}U5m&#FuDhJm@6Fs-9to+k`F33Q{gd!$k~D9k7u zX0gKbFfhMBRDyR#!K4wUy}~S3m>GG}QXa9+(17#AXuIPL%v{2xMZx?Q2bc@6$)IMC z!Z4Qt4gM+2o$$sdx7}MX(ZQ}ku@Cl%f_a}XW=H4i6y{}xdCxW!2h`6TZ(w2xa|U7; z-rx@rhCU3aIj~!Jvucu1Gem}9sMMDr3oX^sz^n!9f+wS3t|ZK0fpNZp59x^F^ne+6 zCTQfKm1fY6(h`23C?(XiOL#&{*lXr8A7BZ`qe}R^I!cIBLYpbf9;gnmZ6nmDuBZn8VAntt8 z>iZ-|ony&{Q9FbUZIlfgjP^}=PIS9_FD5m~h8(ER;Ez!>e_jPN-%6UXxR8ZqVNn9{ z(I=Kdq(BzK7a{_P<1pmI$OJ{8yzg{}p47h66z^s8Xj+ChBw7Ktf*}q5)=*D?8w_V* zz19pCg1;K-!P(ubB`A~~=#Eg&9255Gj!+MFAH%D-k5JDX6ZYwz#OorxkMPVK6ZYvY zCGXPv2=!pOre3$_b%|ah)HBC~eYzvmgZ&%yeo}V82dw!L;^TdWfH-nv&;)^=X85Tg zpH#U@0+0TI5vJYapVuaWax(>pZGV?26#RlEfoE{Lc}Le2CyDGZX&W7U(BhRwx_g#?*D+L zaOv9fJdTXrx|a#p%c2@-+pNQd;x|v*j@Dxws&%r4p|-WvFw_dXh8feGlq`Qpmf7OB z5A%5tPgMyT{>y@AWi^9kUM!9-s-W3|y4kCM@BeSVx=^L>^TB zbd!17k57y7ltE;6L=7Up-&=#o$H4*E0SzM4^jUq8AVK9j0Z;yS5ZT#po3JWgb=gAL zWvS*Ps>{~Cr>uGaY9lDogfJ`gCZfur1`=;`UZpTcp+}$+``a*+go*Bv2F6L43sKza zMVK8JX@Kc_whA?U!Ck;KvSI4WsLGvcV7>;i!CRn^!W+&(n8^wgP?+B&qV4()b&*O9 zk=yRjyQcjK(;y0F>*Y!nZ5Nt`(E-RxSG-?QKFBJt@mh-=aKC2oS`e>B6y7M{g>+gu z<OR1YRgkVd53$ zcI8%Yo2)uwf!t3Tm>Ptc90k)kf-I-vt=S?%u|Zr{S37v1Qq6ISceTL_g6d#S6y8Nl z2bTB5&}Iya(3(#vUd_7FnqL4$@XjjUm-DomPY`cN6yCxJyj@YFDWBC)iziDPF@^OmS}xFLQIx}Ux1dFHTj4CS5Pj1 zH*XZ+5sQFh~4H~VF&#|~SR%IYkmyRu6 z+B~uuWjQ*Xu`HMuuwxk6QQfnp)2K?N>p)8@rDd|xvJr1fB_EaHp!=0KwUX^g%gs@= zjJN>Rz^$}V%ti3Zdi+W$q92Q>gCYi1@&tx<3(aD%DUh;rgVeg4mUN$8(s^i0D9IF4 z(q23cUL93ZZI;9Z3uI&hh6>!P+Ux&1#03I?&Qa*b3cVJ5lu8_0FVK7DY9&S!dQX)8 zU3wnS3l%0sVNO<)c3Eeu@oTif0|w>}!UUsW1{0<~V50Iru;caDP!|2s#yp<@$b_oM zgsRAds>tl;_3u@ooF-~t^{<;Jj8geuxsNpP;?V-NL|yOfX_O2`hpEfpN1mhzp~w1S;UNOZ5C@E0U~xc2(0_|O_!Uy87MeMk2C zr@KjJ8%p|qtyKAbEvdg|WdqZWFwvbpmoNiCO)u_9 z;vA=)S@v1H6KYjDc8;`sSF=Sqx0KC)9JhFM&T&a`;Y&QQy3aRpkD1 z>K$`G1@|E`wWM;fo1iSARmS2Mr!`z(iKTLHHaawyf~om(6?;l<{R6}v68U!KpmKpA z2ln2)vRG4w zgJ)AR$D>5%_}FXij-JsjvKAs!=0APkMtcwV5y%^Mj#5H6t}gucOY zM1lSp1&6yW^N|KbC4;=JBcv&i(on&Q6^!vQQ537#%7yM82JC8rRYLLMV7)8AUIiG5 zZ2)5Z8$5wdiR()$JC^V977j_MQaYAv`$(m#Qy zNa<~~^u0!3z6n_ga>aaj>EEBWt5S+nmd{zQ0osoZbIw_BOCjGlmKU-3%Gip^C{uYl zQJ(TqV$IMS=-X@Hi^Sv~%-QD)Eao1hAg*fZb~7+2A0J45ef${qdR>Yb-xA%0*9pa) zsuIE)h<}iMV>Z!)sPEOz{5GnA&b$QjD572_#>ai$sK)Og@ z`3=uMMdl%W4~X(1_%|ZT|L`<4rPDbB`VX?4Tiug4Hl}ip6UTgE4+wq~W@2dcM?QoA z=0?u;gGDhTko1kbp*xZhB;>pv{s)Ob@Qdwm!n)W`Ll=d>$-7k9F=;F=yv6IKYaYNz zXiwVNyq|H574|5@&k@@OcpXo#$JS*Tj-mO#5d;rH{8jrmjEzQE12P>W*5hi}`K7pf zuo%CG6~zs33_Bvfiv~Cj{^oIX!=7iu{=)5p@S!gLXb#Y>o*BsaxKU{p;iBUNhs<=>IM-7%>d>WWHi#Oj4@W$O#hVkfp;Ndp|0_d7B|{zbyH z0giEp{JYb?dA2>LGs#8-fWBhwp_j`Fb1OMAaE8PkUwPBd<<|5BvI-l))5&2y$~N%3 z;kz;rT<3T6>!zUz^8Trm>w|{s3=JQo*m?Zf2_AnTHmMdunJpP^ldP#u_1*lknxZ$q(>M{I1gs+=~ zmg8&ghX>MPa&B13KNvbKLjQ=sd6PIHKVJ6X?HPD02FD=7$@f;uxdo-CL;b9Tv_*cU zrE4{6hPo)B`(cY1^ZOsKhM01YwkI@G9fyv~MXPjrMHJ)=F`^)@OfCL|msLTILH`Rr z4Z_2ou2K+<;Z!>_m5Rm)dg#+Fm2{>K?50U4m&_enA zJ9(@m_MTz%8aJTGIBQUXOLi&tJYF-8Jlnr16KkSRSj}5&knlauwgh5-LPwXAnK0!Q z`#Ll$e>e(8g1sCKWEW074Fm?Ncj2!muT|yj!VUd?<>kX?D)oVtS-u}<@Li#?zZN&!e-QE#mJgY$}5WV-moRBN>O(D<>70Y zy+>S5f)LcM8~kOZ$cnA0Yl+)K#Pum7EturM+g753ahVOwUdZ219&jG$Y><+lRTw+H z#qGF**$lqws?RZ*{_w3}`{8bkFCAXQwUm#uX+>d-TEl0C3(y-x@cIvBOj(q?LM|~U zYIC7D+kXTHaorurXoY!{4gWXnnAsAGps{}=*APL#4q!(|YivEx7qsc}rmuJ8_dsj; z0)=b|9DmW-U$qt1+a_hFzh8no!>4CVwW&E!!M@UfP3=DGPVA*g>DY|=!NWLB?tlXn z5^@O=8l!WK+=|ZM0BJ^;fx%5{{VG|DFB?{S@NwxluYaFanjqVPjro)v&lQ}_p6uEp z78Gtn>=NE~FQ26WzdbLZ;~|rY9j|<*HE3y1Uc+i;Vv+xFu9)x!USp}=K$mXZF8m?b zIFP6F5TCL1EL*fyt{G(J&UzI!D#7QhQ5^n8*X6I36?K^ndeDhArq7S87h0Oca6FNi zJ}C*e!Puu{snqv(R1EdqyF&e;l)^8hzFTH$eSe;V`f|=7yuRCx!Tqm=y291SRG2*q z^P&yYQDMd#m^TQ6twJJTCJ|;6^eA913!7bED2&&JxlP;}cS{4)gD^Kn!K4#rEY&e3 zZl5haw(MB7(3w!eTrJ^yK%u@zK_C6Ul*XS(efQ4L`kq1a2VGGme18-raHI&Bo(i)t zM_}HzVJ=I!$Ni##`G_#>qF`nLh90qqNvMnBseHMPDp_4^ytN{Y?sf*RFY%Bw7{R{| zBr6~02xP5YEUj6rFmX1_IzY~bX^OkOd47=0HrY}$9LCM%WY+9>S{y9bY{L8BQeg;hdR{_(LiWlJB1lRlNyCu>1(-z&<2%o$be%{8%aB*~0Uie!Gj~~WtmU+B-CtX@ zbz>O1oQ__e4}vU(i5ti=^U`5!by&tyfqHI29dsQ)<55%dPe#u&fGZ)#~0cXO+iO%;b-kE4~r zkh^umRx#G%zqQix6jS!={-b+RF913I{YIg4cdL{&A5lDFZ-#iF=T?WXu(@5T7u@Fp z+H;$t#{~yR_1uexwdcw_KFoywD)UOI5tX(**B% z8?TwtH`w6KCEkQ6yr&}Y5*4rHL#gkDX9e$O8}Bsl z%AI$ki;xW|M`U2_w)@_XcpQ8cIJ#>HUGJKf$56foTA_@gH|*jzL*fH;qsPaU@dRb= z4}l8&g+%_Qr~tA*F;wNQ6|p}JjI!*AP&^sC#PA3t>?jBugneh`FEkRAFxNj z6!^qNtLuSFAF=H{`1TG)s zrj3m|2Qq$0z(BIIAAfN`-j6hQ!|QY|#!u4iEBo@fgW{W%6=$VOJsp!qfSp+Ztww8Q;j9A30;J!IltQd7R?0IlhR3-9xXs-m$IfR@aUOVpt2yFZKqw`Ex>hWgI}N?@ zp0Z|mVKA%9CxB`hQ0>^~g*&~2c_Ry%1$IJr0jp6a!Be-e582VLkj zC>aEM*`v6N%01Acyl#^n$kxsTE++Y)P%;A($-QjH;)(NEe@sI90-fWm)HXF326o~` zlDD`6tz%gR_cLTqfDgFfJyt4qBDz0(z%#H)tW^B(YIh$pTH#~-4L$)rginAR`Chex zi3)!>Ae?@4pbGkw^E+UfI#4T2hf))*Ko#Ubz=$<`E80GSoy2>kt*p80-%B_iCf2z~ns!h9Q{ujp}ifL zVlTz1V&imBoS_Ei8~ink94iPsyHA^2&Z>xzSM-hFAvm_u{P@3mUEN#EW`)ey2XmYG z3%tKR?ESIk{rL9zXLI7b#hpY*bv{q|6@yEl>GBHoawru?0jTq1uF#lv6g3=-BE znBos+UCTqn=J(^b!~yY_`((h{mAx%3*CSudw@QNGSInyH%;1(_P8v;C30CZ5c9O;GMZ1?cHCZ|4;r0j@-*I~m60~R z<%lovU>{%l56F_(fi}x>boeF9kN?e2Zi4r-17rK~+az31XeVA%o2Q|XaqTF;_V55i zlJx527_`&MB@js~HG#WGVyXjoV5jHd5C3COc0mz^W@JldgH(-)8Cfq2VfvT}cu0hK z8cuAp4*rF;{Ztin0^OTxPaV>Wc^&z@&A_=Fry{ z$ysPYR;Gx|!E%A~!lXV$UjLw7S#%JF?Z@OFT?UFawu8wE^ha~-9|`eA{}_pk`M4Bfj^Q! zcvcX(`+`y%IK&!2PUS<_jwv1qtYEtmXe;; z+;?n6iT0WRl=OW(9fTP+HQ@AGzaFc?6)Wb2d3>RaFJR;3HcMW|3mfqQWX(~~4xts8 zM=xhhYI^cG@lqKsE9P9gVKTof1PhpI+#WK94awT{h1X&YI6)cH1>!u6o-(F-txXjW`~R@_F3?dH$=`57 zjDip*0>K0cL=75*AOfSn5KJ(@Oqd`FYLG?aB8bXuF#*JYKoVq_1QGF$D=NF9qIdyi zR>Xi@y@8;B;05sZ3;_hWdm-=dSJlsCW}^SyeZTX4=R5CtIfu;5bNN+ub#--hb#=Gs zRxdo`hRq=Y*C_B4A-spqHtHn@O@h4@ybtwy4QxWSkU2Ik%~mR}uMlZqYrX!F<0xo> zf^@}<`Nw6mk{S6%JDQ(94psyyt5h;&B_9hn(ow;1`lxM**20up1*^nFB!>wr(^o)w zVIxdNxK#wRyx{kD@*ZSLIMbpVVe-||N{qDHq)`Ui!30j*Uciih* zB#7g85k*8_xk$=Juasy+(E=DM?J&0ibVqq6^~tbd^C0>K3H^KJvUMjL57+9>5_quI z1K*=6>?$a_Bvijx%t4VBHAB7jdmJ_#1?2_nM!X=(_Ax4#QpU^#)Tt0*HaMl@nAPXM zCE4w3iFV8}kbg>|c<^vUy^wdJmDD|n?@3#J3Zl-LHYF#f7;`ZTwCuipc)rl%&j-!> z23T)Borb>9QPCKW%FZO1vH>5!Efk)p!A8Z{m9i47dT0lH$AuLS!IPrPseRx|_3l)| z4P;DB!pjv_b^*8Tgb!n)f24(P4T z1Matc%&7Sgc?O3dv1%b>enQQID2cRE|IiFrQ%DUtbyEsC-RYQ#>>}W*m7wZdC@U*m ztOc&qp61S)v=L3r?VE&1L-tOuZ@?a}ufVbmvSf*1m;-9IVsW@5nveSGd;(2@ts;3f z#n`_qo5cV=?CXIhF^aYq^~B~+t7(-tuWcGj(ZSF`p{dNrHZj=RW#%s^6gd=pPDdJD z_93YNVg>)S?_i(`U!|R}NbD))bG}p=6U*1-`On(yK6$*qzsD!}alde4c9a`dq6$Uk zgs~e$c?_4DW9*6}Jfm5BjbMv)r~%vAI#1k}-niert|ju?_;08ae3A2K;6dI+$>d%1 zZd4b$K%Sb_Ue_ka3@+uQaU|<*-*H=pm>0Lj2;Y&0PwECul%J0Bg^b9d@FI63kKEZS z(_b^i{h#bV2De2R6+`~6Z*az+9I};w(Sv2})#gdi7&gxZ=`m?w%e6r0Nb_7WUz;bN zvEIfDy~}DG70*GhJ#h!zkOW;4$BbKX&J3r(=;mbOlRi!^L}B5Rx?afFlP~6yKS#y$ zsAz6Vp2RzBZ`PTM^iEgY!Az#3?B`=BFYeMsv-arS%CC6QpXqsoUSE8Z$>Oy>4BtW` zSo8ia&fweks@FPk3YRUr!dWi?YjY1UL@aqCe&@9Svuhlf^?_+ud;t4w#tgLC%;!?u1cRRQ9`qmE z>d8D^>itS#&|Z!}+iXG)E)f>PYK zM=0K8Q*8W%P`nQmDIga}nR(B!frKZL0#8uE2=aZ11IHLF#;e%&{FQlHhSYR?LH)JG zWxL%1I3B>ZISX6>@9Ezuj~x6!Ng^_Fj=n?u5Oz|X+J1LKL~TEzlaH4x zg;O$tlzK0kwFFxxp_(C#r*WCJI~34?D*+ik`8X;PaH5Li>$xJ17X+|Ph5%yRd8q<= z4PYYza%2^u@+~3}8!BRjB3>wS7HzJy5&t0rT<0&C8VM7^n`mPpA;i}a!ix0~LYS`x zWxro|-ljtE0$9cf@l8OP0=EZN&PouIE>moD(liibA4F#$@H=`0_D%E%215HddZULX zwk+QtWAy-Sj^KFF*r54GMI+x3%};$yQx#f1Xw#pEZxQqpBI(D3)8__6|0DgC>*~;N zru5gS61bH9U*L+7YJ5|WhY~!F$sHC5dhj3=F<=QH7-$sAE~Is9UGTSm79IY0jtKW` z0nfS#q(p~Lpc4YPi{LjnIWzGO3^1N-2CRGg@s%+7wz#H{q-R1+wb}bl^}#e*lwxb0p%G zK>V}#mphw&*aozWEV`$@kLgj>$3@Bbo1fklU$Kz|eBDHRg9{m2XZSgkMFO`zkVooY z$U|=IhDYqKTp}Jxbr*QPH$#)H;osDH#@Nmb`kQrb1wG=4T`iB?(=(hG0#5cMr6T3} z7RfkLwyFgK`M%%i;lf>&K^#0*kKdavu4*A}N4u)?(+hCb+SRbuRXq$;_<}!3$j@G#t zNQUR5Pr^1^;<2aZqb2q3^quVN^0CHy5mREk*Xu8hj`vzHL7ZuciuV#NOwOze)cKaJ zY!KWKqAa~o=wTp*Pd2Rr`JA6V5}#H*mqsS}g98%YXt^6vdkp)|VlDbU&YiU=eJ;M{`#xgW_i=o!WdWfm`K|Ry zZ*iggMthg4Tq5=CMmr}e=e!HNu63Bb-GU1AIC{Z)<)#<9ebpS#cEl?l48bwPtisdg zSb_M_Xa<-|ag=X{#v=q0va<;2n!q5o!-!dkVA~*Af2Tl7W>?BN3HWtXCS|LUA~TYiO3+Ed8=}X7Q;XE zl-EBx(d!>>x!Wy}YmV}6v`8qh)}t1b9v4eVM~s3n!Phbqojqj-U+;!%X!XIeKWu$T zYmEm`J6_jeK7h4)Sxw6EKpQ;Zc75e2FF{m_df-N6qo_e?S8U6;{#-_9vCbXg*&EPG zFk1LK8xRUg)u2pfN!$HPI^wlU(&yp_KSghlpnxb%yc5P$^yX{;$ZP>^Q%n`nmWke4 zKc9qnpdR&cF>LmL@QdZSaUo@E?5*sQE((_hMeBh=l*3=J=Az57kFEMw144&p4l>Kg zFlG!!$uk=Hy_(NZp}2`!twN#xObJB3rk=4esn-J1fB1jseN6#X{3C-LFw=bX6vS)Yfv>VgBqOaw%jJ|R! z=8(QJN*2=BUdL5mSKuP_bpVPI8^hXLmR^AG)V8qME+~68Zqhgw8lC+VeZKYOXSFjC z%Or4FrZWoutb3;$on0Z%s1dw|&roN%4PnUAp|T55QQD(O8 zq(Q>WmWUi(8`;vCt=S7CVEpIGD-#aTPu5GVe!39Zv6_DzZZA<`VH&>gemrpeqd2UD zbX0J-K{K_g0Za{uTMasMshE|{M*wIS4PMksBl%NH z82CG?1p~|4MJ9tH3B-zzowOdZgn#xRkl>#s8jdp^%5fK5rhhg7$bscR3i2)r6a;JM`yBH`(2jFU|kj?YuTvw$L_2nV!7Q6p*L%ScW5l|Z4q$l0-!-G&jMSBBrB2B zNFsg0iOhip{UMRhmT74~q@EJlrIP^cGm2fi_F2Qmnn&@$f@}8pvwgU+Ss%-){EALBhi{O1N zDn7(Jv%MpD9}`L70uX@CESx05@hO3=C8j!0>u|R}2!!d3wqBz%8a`7q9-%Ywh7eai z&V`}izu+j?8j!nJb^aFMqCCTFa=Y#mfqhdLL2j!wJwr~TWq&~K(Kl3Z5#)ZyTn)%Q zDO#D@RLLC!6;al9GDdWc139BdcYu_{$wGQ`^&i3h6R_a>Wnnk?}o8CBBdenrmEx3M`(hG}j8Dk~f@nQk>Y#1PDe{J3MDxUamf-^YIk*s-8uw@TX{ zfT|D)J^)nxHbqLF^tzguPEzvJA@G+(;pfR^XX{%d^sx(CTu2|wqxJFY*CG_&&&56d z_ySe@$On%B0!QT3bCs^HdygMCfC&A%rQUdo+An3cZ7A z|BYz=)USXoM4G{|LbDx=%SJ8QfB>=!&d1H=r91*h+t5L zZ=ixv^HGhh-Ah#j;OqhcOS(?MS}12v*|zFQ2pVAT4OOt+1T)Fzp{0^@445$>cS&?K zDMkU;DPW!r7^|Jk7y~$)fa9Y&nXE{_{m_8u{S?B^Q{YCkovUDOAEiQZ3@cFyOl#xQ z>l62*3SY6W%Y(lnWQLGZC~Eo)6oFCGvN2!_iG&-_?=Y~0F-uaZeNSA4 z8mshW$Prr}lwAl{gv$!x2gX=WU&TWP)HPiOHy(?B^z?x;xuN5%zPP~#RJLDS?xX=l zlr&}t$P|tn?ixHJTR2X{Z6I4aFTy@b0$Pk9Lgup*`FQ+GkRzf^)nWC>Kj;Jzhd-%d93EH21meQ1Cv(SsU~orS0g!K3Tb31ja!t) z12&DbCx}kGjGS50IEWS#V19i#jmdRr@T_5GK2`RBGyOAD0t--5>)A`;MKiF59~^*m z5m$bbV-D>%gFL*!7;_;$J-#n#esKCDhcmc9r;l|@!EMB6PR(Zo=?iWcRN*DBuZml} z9c5O8ssV!7*cfj!Y8Tm7jxuUr=ppVcpTIk=LyiXq5r!<|=oVkl;|mg#^ZPc>GH|;>H_V+W!R`aZwskzAS^a212ka?mJg=o%j_1lAUx&mq ziaAp;T@VT|w@BX$%pLbg0ge?Y=9R?!G79tkm!f6WT`@Z;W~pMXHQi6@Q&KI?g$8pU znq6Rf6z14EnC6VcuZ5xbTNQJhjoDW*y#{j*F)`MSXkHi8!JMahGFve_D`ra@^Qf@z zJavCm1W$qg< z`n*l+y$DLr?mV@h@;Sg@&Lbu_O9(eDt?OVus+e;W^G(IvDV-}Y9~4K^`P+?J_MXIC z8-@Ad;^?vuRLt&*xxp*CRAyry)oyXI!Q2ng1Xe_0POO7jgIQ{{oge-tWxrbac4T9gN+;}$F_^uG`9>7x<`<&Nev@MMRLq*? zVhFa#s1EYHTrrp2pz=I~Vgz1`!o05zW}IT~A17rW2IWTEEU_^MikO`R2J=Z`z8Zyj zX&ua^n3H$ZnLq04q18r|JGC6|(JY5AJXtwajJWSBT7lAAeHrC`xIWVXqM~EW2A7d(S|58l|%*k+Yh7 zo2|7i=o3^)H})pP<@H(EGUX%=U*svC#XM^G-mxO^=4eq6ctg7n-zW9p{BfXGVi(j$ z;8JiA-q7Cq2ki7dz{*x7WjJ;j#{0IzO#q}n)Kzd)?13xeaeX}Ddd}HW$T33t%oriP z1Ih=|bKyFPp5LLQM;X!qa2DtoMcPHucL-@&pAnPI!ePS_cz05nhMQrnIg@0#ffvD> z6wo>1T)~SdMPHuF;3ID2&O)jjJ{cg~A}C0y!>3HC+a+3%Zpp1h>3jGIr-6^;yM98o zyi0$GEMdi~DP3pFSoJ_2G~hjH1cN&L-d%o5s%(n`=Z6!yg2dwYcO7UO?ANh543>s+OF0|a#Qsx4>vKb;h5iI{uE);BYXx|eS)`(JC?0j#8h^TpywDn=4L%H^qKR$?190WPxlY7Iw3CaX+DTKKlvmvg81oe4c{D1twRF3W{#6W#Gsa-#6C*haV>9wB#Xo#I zHfI%_H0*YRGrW&K58b~0UgKVpQw)tSC#!*W94D#^U`0OvinMhbR*7^ zYqcDkz+#|L6c7EtL(sUTH^B!W`c;$FEqzQgud>B8NcFrT=+E6nDPhp}koHEcfDRU( z7u%9F95lo&RXVk9>9=3nj<%zF*y`s;y7n;&j%-E}ZGK#`Dg@ityYUdSTp+MTbX zMp^LGG{tPg%cdEE-6K*OZ4DBb$hkf&1*5UG?-}JBJznq=xH!PSN%2Q2{$5m~;7^mm zpL1QlNfUVt$f1Y?5+<2<(%708hBsARrgMa`_-w&Tcu4TzHgr_HV&GA(Zo+ArZ0*Q2 z*PsPoSFd~JNU5T7yaREbjmniOidS#pG6OY{P&A9-;ynF#)U;-iW)>^VlUgh9p+^*$ z3DQ3~zlCo{jye*C!_RP-Hwg2!7OaE9T&o3}WW$^sA(gwpzy#6O0_~z;?k3D*3iIO~ zQmCR{Qm89z7>$QIZ!j>=5vElXOgdq3v;$k)LWMc4+;qa2Tng1d)uOS18A6yAQ7~U& z#c8ksV01h-1};o6QBm_0wc!$JWnaSC5mc9W5zZC;R8;XqZ61aC08!smH!n_Mx~Rk- zv0+Au1f72~FspDo&@2ijn=qpkW~GQWe)TmXs{S_2D_U`v8JLNLX%YoF_us~gl|u{>F#WC|gP)kE zLs#MD?~$POoAe4<8`)lTz8uS_Kt)zj;?r97HaasnI~#>G)=}wwaW*rMmY^iFuDzWA z=-fe_MU23h9EKq&A?7~akGTzO44JJrcUT6vUnFYvhT((Shq2|G9RHUm9>@N&&t z;q1dt*Js2L#@PkfbBV_y4WPuaormv`HRq7_nWxw_GnWpo0%UDXFxTnh$qo^i_2wRW zTSQn05aE+<{~q&c;S)=CAUiBX;x)%otX;VQre!FV_2cbc6@74*9H@qr)kz|BN( z;sLr)lD;UqS)0BXON3^4V76*{+18RfbwxGXQ<#5%d5QR8(qp~qmS+3*Ei@wNv0ACw z-iBr?nT#`FqXJJsHl~LiL41VIXI1zyX(}G!09=i?LE!1w>=QYuIEZe!=G?C!wM(H{z17nqe zJ%2F_TrRfW`J2a-?q%E$yc)&8U0@)X3dyq}vGp=C`ln1(ocBjeI4Z=*W9fGl1W&_@ zmE~CG%w~yCHgA5i+1qBoF%vx|{8)s3aTQtAwh7}fPF_S#0$&(Egw1mm9)^j4#m0Dw zmyvD6<~9iucLQ(KK@hOZsS25R{lyAY|V7x|Yl-8Uv7F!NbXfj8~sOF*$0uWX#B# zkOJLq7H&rvuCD=Go%_FsQfsu10fixWwV>X1ryS+n+K~w#tQA`&ts61)g{&i53uJ9$GkWi^D`MEIUiQc&+sxZd)t`v)tKLAVy zr!#SWkZmnfmjVa#GF92+C$pQuN!qCn{}kYGx;K+BlMM`4Mat@c>W8ArcuZ#1Q->(# ze8v18waz{zsZ2538q6>78JHA}`B*gOLSUBd4t|DppZ3N=q5bc}=4)&H@6qVP{>=YQ zfzH+OzdQa%{`c3n>Z||H{BJiyCx7UF_goV0!2YTKy%}2gr~daZFV|xH_x|_Fh`0Ys z|NH*1mnCrb@BHt^-~O@xePW+p|G)lsOSEO{-f4_et9@s7q{IUPN3oXuCjtBnC z|DH~S`FP+z@W0D%5{uIzODxw_1C53Ky9O!-qOps`sRxTx$Nyek8D%Mq|9u58;eQ*< zZ?7jN{O=}m*;#Y71_m|*JK#kB9qxaRF_0!d#Q5KPP#|;zU-b|s=LsMN39E4#UCgTh z6efofG1~ub8O@~ezbh1T3SLGxFw^dCkKZ7eH`|yEh#BpFZ>)$ccpd-yas_uQcv~C% zaRvXqr(t*r?$`0Z?*{mP=6^rLl@?}jALW0)3QCaJPoRX-6<%kmRr>{JiOoPeG7#;5 z@Av;V{&%B4Wa9tV{`V8xY8~VM7ya)}VPyVK^S`(6`JesoxAea4f47ERfjZ982K;G% zqmCOf>O})S=rZkL0qzH){qG@25x4#C9ccQ%nbuX*+Gpb&)^Y7WfD`6__Xiq$&1nC- zA@Kgl|GrPLCn`@n&QOTI13f0w~ccQU+VbZZxYA& z-ni-^q2ig} zHNnwk$eC+^pe&=aWlRBOQesp4&TY6Lcg~YLKUv+jz#bzD0}plJ*V5lHsW=lV%Kd^J z-9)qr)1&~}C)9lcn1FZmJa_{uA7Mat1Jmx73Olt&+{J;N;3$bb zB-}4=#(U+>q)lQ&P%1YXCji@+QcdUB?vtoettQ6W#&&Quo8M|zln-%6U19KFCk^qn14BryE17RLhn3ojhCxtmCQbM7I zK?6{z0S0CXVcw2{`Edqd1}Mxhg&C`VexhD z(svf4sG7QSjR+$CGqss&&*AMa(b@{4TVlb6Av_c~Bl4-8!<{xA1?y_KIEtuf>8W}} z%tZPrkHU=~p#A0F03{=c0>ym9U^<9d53h%hAlei2I}j>;XD4}dlLekXd8ZV`d9HEWllE#=w*uK4P?X0x7D^Pd_NGLQt>x29 z<6ecPfE~iVu{!Teln~_)AYWYwk%{moo@)zlf)@onTMK%V3U3w&NkPXd#U;2*;ax(C z(Nh)IL{LQjg?;oO>iue{7Y#}4!68G^9+$+BoC|#negmdpNY2Ma^iydSVo2`wn0{&` z!x1<~8RWs^WU*~Y&tfDbi4sRC&#GGW{MY@ExSrygc_koFahtU~D^NNq&t|s(e%VFK zb0Y^;+=V>6;_e{~x6WYw%k%LI73Oa?%wp6C_^I0(})3Z^|_zC#%yh8P%Y(f8(P zC&4dpal~BRKVskw*q1#9{g3PnpX5Mqik;y*?`BJ(*ndxs5YLRiz*AFo ztxtbMznELuH@3HHOHq2*%k|C6i}`Xx^D=+btS;S9&-Kap>A97;4PtXD2h_OsPssKl z-HN>ARW>p#e(YYoH{LbBEjcSn%O6&i=byj!6n^w`&0qVtpt@_;^z-QtoJ&4^Eh`Gs zhM|745O$2}oqeOI_eH3%d}G?m2Wi#E!&FEG=HhpC0J`2zI{efwKGF5cK1SC|bWEPp zNpyXVSeT^G5DpPtccHZ5y8cOtHuHDb%7eG6w&nl}O5dupc%Oc#jwt;v8lL#^3RU`P zzzkd~c(oRAY6PCiHagN<@D70`cpNSp?Z*ELaiU*8vAUXD0I?WgoWHqOj|=(nPk(J?gZUi@gSlzch2k@Wgsd5z2B zH>{z+-2SIm@R#oqx#)XDe);7nNgQ_P^)IKYOiaQIkna&`7`{iS5y6w3;onfsOZLJPJ@aQi{S3)ehjHV)^VJ59I~ zDYN`275he%&*Oh<7QU5j?e8n=#%p=LW!-p%B~HV0kK??DuxThN88)?z!Y#xvlwvVH zpffm0zJ>+lRTh|+i#mH;Q=wMOsl*G@aLLVF)4SLLTs<9Sx8X~ke_1!)@%qp1@5A|w zz{274HS#W$?s9!sNb}tlFrV`7QhedNykp)?%<;eV8h#?#wij5Dul~0-;tDzACmz^| z58mZxZ~siHXuf~W3i)`nNh+_2La$2NWB9iU*-A0im>6WuQ#l*KP`TN3t=(fB z_*O0!1%oCpg0UqXnPx99WZ5s=9eUvTBQ=-kuG0 zs!aVyCXI2MSNoc7WBJv*>^!%<4&~p2ry59xcsT>9Q)$?GW8nm~o;aC82YuEYln^Nr zkHN=jD8TW55#WRy1Q>qvAn~A_ueZ})V+4US1h}@>a2s5+Bu}H{ss9p|QXdp&u8kK~ zS%MBP0~wqa0+2z6Bmy>%=JZ4{yr%15qEX`Uit{ash7zx|JIeQa3Qn@Y`54}CfV+Q2 zl=xNRG*Fz&6sN||4!6xp>BcZ&c!Bb>A^?IfHD+GaZEkNfga^5EO={(i8mgqfBo$X`V&6XM3Xr1H-Pn3u#pOOo`St$g9WAXosGl5-h*#BFo2CUBf*{_*e{aX zka~fFEm5%HHrS}{QUR+ksV(Ms0jr7zyPjaLDA*_RR%)q&CEH+2WjO6D0vKz