diff --git a/CMakeLists.txt b/CMakeLists.txt index 6281bee682..29cd4fd8d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,13 +15,19 @@ project(MOM6 #]==============================================================================] message(STATUS "Build options") -option(MOM6_ACCESS3 "Use ACCESS3 dependencies and install ACCESS3 libraries" OFF) -option(MOM6_OPENMP "Enable OpenMP threading" OFF) -option(MOM6_ASYMMETRIC "Use MOM asymmetric memory" OFF) -message(STATUS " - MOM6_ACCESS3 ${MOM6_ACCESS3}" ) -message(STATUS " - MOM6_OPENMP ${MOM6_OPENMP}" ) +option(MOM6_ACCESS3 "Build MOM6 library for use with ACCESS3" OFF) +option(MOM6_SOLO "Build MOM6 solo executable" ON) +option(MOM6_OPENMP "Enable OpenMP threading" OFF) +option(MOM6_ASYMMETRIC "Use MOM asymmetric memory" OFF) +message(STATUS " - MOM6_ACCESS3 ${MOM6_ACCESS3}") +message(STATUS " - MOM6_SOLO ${MOM6_SOLO}") +message(STATUS " - MOM6_OPENMP ${MOM6_OPENMP}") message(STATUS " - MOM6_ASYMMETRIC ${MOM6_ASYMMETRIC}") +if(NOT MOM6_ACCESS3 AND NOT MOM6_SOLO) + message(FATAL_ERROR "One of MOM6_ACCESS3 or MOM6_SOLO must be enabled") +endif() + #[==============================================================================[ # Project configuration # #]==============================================================================] @@ -63,10 +69,6 @@ endif() # See https://github.com/ACCESS-NRI/GFDL-generic-tracers/issues/29 add_compile_definitions(_USE_GENERIC_TRACER) # _USE_MOM6_DIAG) -if (MOM6_ACCESS3) - add_compile_definitions(CESMCOUPLED) -endif() - ## Fortran modules path; currently this is simply set to be the include dir set(CMAKE_INSTALL_MODULEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING @@ -84,7 +86,7 @@ if(NOT TARGET NetCDF::NetCDF_Fortran OR NOT TARGET NetCDF::NetCDF_C) #fms provid message(FATAL_ERROR "NetCDF interface missing from FMS package") endif() -if (MOM6_ACCESS3) +if(MOM6_ACCESS3) find_package(Access3Share REQUIRED cdeps timing share nuopc_cap_share) if(NOT TARGET ESMF::ESMF) message(FATAL_ERROR "ESMF interface missing from Access3Share package") @@ -99,446 +101,8 @@ endif() # Main definitions # #]==============================================================================] +## Build MOM6 shared library +add_subdirectory(src) -### Targets - -## MOM6 library - -# set paths for the source code and config source -set(SRC "${CMAKE_SOURCE_DIR}/src") -set(CONFIG_SRC "${CMAKE_SOURCE_DIR}/config_src") - -add_fortran_library(mom6lib mod STATIC) - -target_include_directories(mom6lib PRIVATE $) - -if(MOM6_ASYMMETRIC) - set(MOM_MEMORY_DIR $) -else() - set(MOM_MEMORY_DIR $) -endif() -target_include_directories(mom6lib PRIVATE ${MOM_MEMORY_DIR}) - -target_compile_options(mom6lib PRIVATE "$<$:${fortran_compile_flags}>") - -# link libraries -target_link_libraries(mom6lib PRIVATE FMS::fms_r8 GFDLGTracers::gtracers) - -if(MOM6_ACCESS3) - target_link_libraries(mom6lib - PRIVATE Access3::nuopc_cap_share Access3::share Access3::timing Access3::cdeps-common ESMF::ESMF - ) -endif() - -target_sources(mom6lib PRIVATE - ${SRC}/ALE/coord_adapt.F90 - ${SRC}/ALE/coord_hycom.F90 - ${SRC}/ALE/coord_rho.F90 - ${SRC}/ALE/coord_sigma.F90 - ${SRC}/ALE/coord_zlike.F90 - ${SRC}/ALE/MOM_ALE.F90 - ${SRC}/ALE/MOM_hybgen_regrid.F90 - ${SRC}/ALE/MOM_hybgen_remap.F90 - ${SRC}/ALE/MOM_hybgen_unmix.F90 - ${SRC}/ALE/MOM_regridding.F90 - ${SRC}/ALE/MOM_remapping.F90 - ${SRC}/ALE/P1M_functions.F90 - ${SRC}/ALE/P3M_functions.F90 - ${SRC}/ALE/PCM_functions.F90 - ${SRC}/ALE/PLM_functions.F90 - ${SRC}/ALE/polynomial_functions.F90 - ${SRC}/ALE/PPM_functions.F90 - ${SRC}/ALE/PQM_functions.F90 - ${SRC}/ALE/Recon1d_EMPLM_CWK.F90 - ${SRC}/ALE/Recon1d_EMPLM_WA.F90 - ${SRC}/ALE/Recon1d_EMPLM_WA_poly.F90 - ${SRC}/ALE/Recon1d_EPPM_CWK.F90 - ${SRC}/ALE/Recon1d_MPLM_CWK.F90 - ${SRC}/ALE/Recon1d_MPLM_WA.F90 - ${SRC}/ALE/Recon1d_MPLM_WA_poly.F90 - ${SRC}/ALE/Recon1d_PCM.F90 - ${SRC}/ALE/Recon1d_PLM_CW.F90 - ${SRC}/ALE/Recon1d_PLM_CWK.F90 - ${SRC}/ALE/Recon1d_PLM_hybgen.F90 - ${SRC}/ALE/Recon1d_PPM_CW.F90 - ${SRC}/ALE/Recon1d_PPM_CWK.F90 - ${SRC}/ALE/Recon1d_PPM_H4_2018.F90 - ${SRC}/ALE/Recon1d_PPM_H4_2019.F90 - ${SRC}/ALE/Recon1d_PPM_hybgen.F90 - ${SRC}/ALE/Recon1d_type.F90 - ${SRC}/ALE/regrid_consts.F90 - ${SRC}/ALE/regrid_edge_values.F90 - ${SRC}/ALE/regrid_interp.F90 - ${SRC}/ALE/regrid_solvers.F90 - - ${SRC}/core/MOM_barotropic.F90 - ${SRC}/core/MOM_boundary_update.F90 - ${SRC}/core/MOM_check_scaling.F90 - ${SRC}/core/MOM_checksum_packages.F90 - ${SRC}/core/MOM_continuity.F90 - ${SRC}/core/MOM_continuity_PPM.F90 - ${SRC}/core/MOM_CoriolisAdv.F90 - ${SRC}/core/MOM_density_integrals.F90 - ${SRC}/core/MOM_dynamics_split_RK2.F90 - ${SRC}/core/MOM_dynamics_split_RK2b.F90 - ${SRC}/core/MOM_dynamics_unsplit.F90 - ${SRC}/core/MOM_dynamics_unsplit_RK2.F90 - ${SRC}/core/MOM.F90 - ${SRC}/core/MOM_grid.F90 - ${SRC}/core/MOM_interface_heights.F90 - ${SRC}/core/MOM_isopycnal_slopes.F90 - ${SRC}/core/MOM_open_boundary.F90 - ${SRC}/core/MOM_porous_barriers.F90 - ${SRC}/core/MOM_PressureForce.F90 - ${SRC}/core/MOM_PressureForce_FV.F90 - ${SRC}/core/MOM_PressureForce_Montgomery.F90 - ${SRC}/core/MOM_stoch_eos.F90 - ${SRC}/core/MOM_transcribe_grid.F90 - ${SRC}/core/MOM_unit_tests.F90 - ${SRC}/core/MOM_variables.F90 - ${SRC}/core/MOM_verticalGrid.F90 - ${SRC}/core/MOM_forcing_type.F90 - - ${SRC}/diagnostics/MOM_debugging.F90 - ${SRC}/diagnostics/MOM_diagnose_KdWork.F90 - ${SRC}/diagnostics/MOM_diagnose_MLD.F90 - ${SRC}/diagnostics/MOM_diagnostics.F90 - ${SRC}/diagnostics/MOM_harmonic_analysis.F90 - ${SRC}/diagnostics/MOM_obsolete_diagnostics.F90 - ${SRC}/diagnostics/MOM_obsolete_params.F90 - ${SRC}/diagnostics/MOM_PointAccel.F90 - ${SRC}/diagnostics/MOM_spatial_means.F90 - ${SRC}/diagnostics/MOM_sum_output.F90 - ${SRC}/diagnostics/MOM_wave_speed.F90 - - ${SRC}/equation_of_state/MOM_EOS.F90 - ${SRC}/equation_of_state/MOM_EOS_base_type.F90 - ${SRC}/equation_of_state/MOM_EOS_Jackett06.F90 - ${SRC}/equation_of_state/MOM_EOS_linear.F90 - ${SRC}/equation_of_state/MOM_EOS_Roquet_rho.F90 - ${SRC}/equation_of_state/MOM_EOS_Roquet_SpV.F90 - ${SRC}/equation_of_state/MOM_EOS_TEOS10.F90 - ${SRC}/equation_of_state/MOM_EOS_UNESCO.F90 - ${SRC}/equation_of_state/MOM_EOS_Wright.F90 - ${SRC}/equation_of_state/MOM_EOS_Wright_full.F90 - ${SRC}/equation_of_state/MOM_EOS_Wright_red.F90 - ${SRC}/equation_of_state/MOM_temperature_convert.F90 - ${SRC}/equation_of_state/MOM_TFreeze.F90 - - ${SRC}/equation_of_state/TEOS10/gsw_chem_potential_water_t_exact.f90 - ${SRC}/equation_of_state/TEOS10/gsw_ct_freezing_exact.f90 - ${SRC}/equation_of_state/TEOS10/gsw_ct_freezing_poly.f90 - ${SRC}/equation_of_state/TEOS10/gsw_ct_from_pt.f90 - ${SRC}/equation_of_state/TEOS10/gsw_ct_from_t.f90 - ${SRC}/equation_of_state/TEOS10/gsw_entropy_part.f90 - ${SRC}/equation_of_state/TEOS10/gsw_entropy_part_zerop.f90 - ${SRC}/equation_of_state/TEOS10/gsw_gibbs.f90 - ${SRC}/equation_of_state/TEOS10/gsw_gibbs_ice.f90 - ${SRC}/equation_of_state/TEOS10/gsw_gibbs_pt0_pt0.f90 - ${SRC}/equation_of_state/TEOS10/gsw_mod_error_functions.f90 - ${SRC}/equation_of_state/TEOS10/gsw_mod_freezing_poly_coefficients.f90 - ${SRC}/equation_of_state/TEOS10/gsw_mod_gibbs_ice_coefficients.f90 - ${SRC}/equation_of_state/TEOS10/gsw_mod_kinds.f90 - ${SRC}/equation_of_state/TEOS10/gsw_mod_specvol_coefficients.f90 - ${SRC}/equation_of_state/TEOS10/gsw_mod_teos10_constants.f90 - ${SRC}/equation_of_state/TEOS10/gsw_mod_toolbox.f90 - ${SRC}/equation_of_state/TEOS10/gsw_pt0_from_t.f90 - ${SRC}/equation_of_state/TEOS10/gsw_pt_from_ct.f90 - ${SRC}/equation_of_state/TEOS10/gsw_pt_from_t.f90 - ${SRC}/equation_of_state/TEOS10/gsw_rho.f90 - ${SRC}/equation_of_state/TEOS10/gsw_rho_first_derivatives.f90 - ${SRC}/equation_of_state/TEOS10/gsw_rho_second_derivatives.f90 - ${SRC}/equation_of_state/TEOS10/gsw_sp_from_sr.f90 - ${SRC}/equation_of_state/TEOS10/gsw_sr_from_sp.f90 - ${SRC}/equation_of_state/TEOS10/gsw_specvol.f90 - ${SRC}/equation_of_state/TEOS10/gsw_specvol_first_derivatives.f90 - ${SRC}/equation_of_state/TEOS10/gsw_specvol_second_derivatives.f90 - ${SRC}/equation_of_state/TEOS10/gsw_t_deriv_chem_potential_water_t_exact.f90 - ${SRC}/equation_of_state/TEOS10/gsw_t_freezing_exact.f90 - ${SRC}/equation_of_state/TEOS10/gsw_t_freezing_poly.f90 - ${SRC}/equation_of_state/TEOS10/gsw_t_from_ct.f90 - - ${SRC}/framework/MOM_array_transform.F90 - ${SRC}/framework/MOM_checksums.F90 - ${SRC}/framework/MOM_coms.F90 - ${SRC}/framework/MOM_cpu_clock.F90 - ${SRC}/framework/MOM_data_override.F90 - ${SRC}/framework/MOM_diag_mediator.F90 - ${SRC}/framework/MOM_diag_remap.F90 - ${SRC}/framework/MOM_document.F90 - ${SRC}/framework/MOM_domains.F90 - ${SRC}/framework/MOM_dyn_horgrid.F90 - ${SRC}/framework/MOM_ensemble_manager.F90 - ${SRC}/framework/MOM_error_handler.F90 - ${SRC}/framework/MOM_file_parser.F90 - ${SRC}/framework/MOM_get_input.F90 - ${SRC}/framework/MOM_hor_index.F90 - ${SRC}/framework/MOM_horizontal_regridding.F90 - ${SRC}/framework/MOM_interpolate.F90 - ${SRC}/framework/MOM_intrinsic_functions.F90 - ${SRC}/framework/MOM_io.F90 - ${SRC}/framework/MOM_io_file.F90 - ${SRC}/framework/MOM_memory_macros.h - ${SRC}/framework/MOM_murmur_hash.F90 - ${SRC}/framework/MOM_netcdf.F90 - ${SRC}/framework/numerical_testing_type.F90 - ${SRC}/framework/MOM_random.F90 - ${SRC}/framework/MOM_restart.F90 - ${SRC}/framework/MOM_safe_alloc.F90 - ${SRC}/framework/MOM_string_functions.F90 - ${SRC}/framework/MOM_unique_scales.F90 - ${SRC}/framework/MOM_unit_scaling.F90 - ${SRC}/framework/MOM_write_cputime.F90 - ${SRC}/framework/posix.F90 - ${SRC}/framework/MOM_coupler_types.F90 - - ${SRC}/ice_shelf/MOM_ice_shelf_diag_mediator.F90 - ${SRC}/ice_shelf/MOM_ice_shelf_dynamics.F90 - ${SRC}/ice_shelf/MOM_ice_shelf.F90 - ${SRC}/ice_shelf/MOM_ice_shelf_initialize.F90 - ${SRC}/ice_shelf/MOM_ice_shelf_state.F90 - ${SRC}/ice_shelf/MOM_marine_ice.F90 - ${SRC}/ice_shelf/user_shelf_init.F90 - - ${SRC}/initialization/MOM_coord_initialization.F90 - ${SRC}/initialization/MOM_fixed_initialization.F90 - ${SRC}/initialization/MOM_grid_initialize.F90 - ${SRC}/initialization/MOM_shared_initialization.F90 - ${SRC}/initialization/MOM_state_initialization.F90 - ${SRC}/initialization/MOM_tracer_initialization_from_Z.F90 - - ${SRC}/ocean_data_assim/MOM_oda_driver.F90 - ${SRC}/ocean_data_assim/MOM_oda_incupd.F90 - - ${SRC}/parameterizations/CVmix/cvmix_background.F90 - ${SRC}/parameterizations/CVmix/cvmix_convection.F90 - ${SRC}/parameterizations/CVmix/cvmix_ddiff.F90 - ${SRC}/parameterizations/CVmix/cvmix_kinds_and_types.F90 - ${SRC}/parameterizations/CVmix/cvmix_kpp.F90 - ${SRC}/parameterizations/CVmix/cvmix_math.F90 - ${SRC}/parameterizations/CVmix/cvmix_put_get.F90 - ${SRC}/parameterizations/CVmix/cvmix_shear.F90 - ${SRC}/parameterizations/CVmix/cvmix_tidal.F90 - ${SRC}/parameterizations/CVmix/cvmix_utils.F90 - - ${SRC}/parameterizations/lateral/MOM_hor_visc.F90 - ${SRC}/parameterizations/lateral/MOM_interface_filter.F90 - ${SRC}/parameterizations/lateral/MOM_internal_tides.F90 - ${SRC}/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 - ${SRC}/parameterizations/lateral/MOM_load_love_numbers.F90 - ${SRC}/parameterizations/lateral/MOM_MEKE.F90 - ${SRC}/parameterizations/lateral/MOM_MEKE_types.F90 - ${SRC}/parameterizations/lateral/MOM_mixed_layer_restrat.F90 - ${SRC}/parameterizations/lateral/MOM_spherical_harmonics.F90 - ${SRC}/parameterizations/lateral/MOM_streaming_filter.F90 - ${SRC}/parameterizations/lateral/MOM_self_attr_load.F90 - ${SRC}/parameterizations/lateral/MOM_thickness_diffuse.F90 - ${SRC}/parameterizations/lateral/MOM_tidal_forcing.F90 - ${SRC}/parameterizations/lateral/MOM_wave_drag.F90 - ${SRC}/parameterizations/lateral/MOM_Zanna_Bolton.F90 - - ${SRC}/parameterizations/stochastic/MOM_stochastics.F90 - - ${SRC}/parameterizations/vertical/MOM_ALE_sponge.F90 - ${SRC}/parameterizations/vertical/MOM_bkgnd_mixing.F90 - ${SRC}/parameterizations/vertical/MOM_bulk_mixed_layer.F90 - ${SRC}/parameterizations/vertical/MOM_CVMix_conv.F90 - ${SRC}/parameterizations/vertical/MOM_CVMix_ddiff.F90 - ${SRC}/parameterizations/vertical/MOM_CVMix_KPP.F90 - ${SRC}/parameterizations/vertical/MOM_CVMix_shear.F90 - ${SRC}/parameterizations/vertical/MOM_diabatic_aux.F90 - ${SRC}/parameterizations/vertical/MOM_diabatic_driver.F90 - ${SRC}/parameterizations/vertical/MOM_diapyc_energy_req.F90 - ${SRC}/parameterizations/vertical/MOM_energetic_PBL.F90 - ${SRC}/parameterizations/vertical/MOM_entrain_diffusive.F90 - ${SRC}/parameterizations/vertical/MOM_full_convection.F90 - ${SRC}/parameterizations/vertical/MOM_geothermal.F90 - ${SRC}/parameterizations/vertical/MOM_internal_tide_input.F90 - ${SRC}/parameterizations/vertical/MOM_kappa_shear.F90 - ${SRC}/parameterizations/vertical/MOM_opacity.F90 - ${SRC}/parameterizations/vertical/MOM_regularize_layers.F90 - ${SRC}/parameterizations/vertical/MOM_set_diffusivity.F90 - ${SRC}/parameterizations/vertical/MOM_set_viscosity.F90 - ${SRC}/parameterizations/vertical/MOM_sponge.F90 - ${SRC}/parameterizations/vertical/MOM_tidal_mixing.F90 - ${SRC}/parameterizations/vertical/MOM_vert_friction.F90 - - ${SRC}/tracer/advection_test_tracer.F90 - ${SRC}/tracer/boundary_impulse_tracer.F90 - ${SRC}/tracer/DOME_tracer.F90 - ${SRC}/tracer/dyed_obc_tracer.F90 - ${SRC}/tracer/dye_example.F90 - ${SRC}/tracer/ideal_age_example.F90 - ${SRC}/tracer/ISOMIP_tracer.F90 - ${SRC}/tracer/MOM_CFC_cap.F90 - ${SRC}/tracer/MOM_generic_tracer.F90 - ${SRC}/tracer/MOM_hor_bnd_diffusion.F90 - ${SRC}/tracer/MARBL_forcing_mod.F90 - ${SRC}/tracer/MARBL_tracers.F90 - ${SRC}/tracer/MOM_neutral_diffusion.F90 - ${SRC}/tracer/MOM_OCMIP2_CFC.F90 - ${SRC}/tracer/MOM_offline_aux.F90 - ${SRC}/tracer/MOM_offline_main.F90 - ${SRC}/tracer/MOM_tracer_advect.F90 - ${SRC}/tracer/MOM_tracer_advect_schemes.F90 - ${SRC}/tracer/MOM_tracer_diabatic.F90 - ${SRC}/tracer/MOM_tracer_flow_control.F90 - ${SRC}/tracer/MOM_tracer_hor_diff.F90 - ${SRC}/tracer/MOM_tracer_registry.F90 - ${SRC}/tracer/MOM_tracer_types.F90 - ${SRC}/tracer/MOM_tracer_Z_init.F90 - ${SRC}/tracer/nw2_tracers.F90 - ${SRC}/tracer/oil_tracer.F90 - ${SRC}/tracer/pseudo_salt_tracer.F90 - ${SRC}/tracer/RGC_tracer.F90 - ${SRC}/tracer/tracer_example.F90 - - ${SRC}/user/adjustment_initialization.F90 - ${SRC}/user/baroclinic_zone_initialization.F90 - ${SRC}/user/basin_builder.F90 - ${SRC}/user/benchmark_initialization.F90 - ${SRC}/user/BFB_initialization.F90 - ${SRC}/user/BFB_surface_forcing.F90 - ${SRC}/user/circle_obcs_initialization.F90 - ${SRC}/user/dense_water_initialization.F90 - ${SRC}/user/DOME2d_initialization.F90 - ${SRC}/user/DOME_initialization.F90 - ${SRC}/user/dumbbell_initialization.F90 - ${SRC}/user/dumbbell_surface_forcing.F90 - ${SRC}/user/dyed_channel_initialization.F90 - ${SRC}/user/dyed_obcs_initialization.F90 - ${SRC}/user/external_gwave_initialization.F90 - ${SRC}/user/Idealized_Hurricane.F90 - ${SRC}/user/ISOMIP_initialization.F90 - ${SRC}/user/Kelvin_initialization.F90 - ${SRC}/user/lock_exchange_initialization.F90 - ${SRC}/user/MOM_controlled_forcing.F90 - ${SRC}/user/MOM_wave_interface.F90 - ${SRC}/user/Neverworld_initialization.F90 - ${SRC}/user/Phillips_initialization.F90 - ${SRC}/user/RGC_initialization.F90 - ${SRC}/user/Rossby_front_2d_initialization.F90 - ${SRC}/user/SCM_CVMix_tests.F90 - ${SRC}/user/seamount_initialization.F90 - ${SRC}/user/shelfwave_initialization.F90 - ${SRC}/user/sloshing_initialization.F90 - ${SRC}/user/soliton_initialization.F90 - ${SRC}/user/supercritical_initialization.F90 - ${SRC}/user/tidal_bay_initialization.F90 - ${SRC}/user/user_change_diffusivity.F90 - ${SRC}/user/user_initialization.F90 - ${SRC}/user/user_revise_forcing.F90 - - ${CONFIG_SRC}/external/database_comms/MOM_database_comms.F90 - ${CONFIG_SRC}/external/database_comms/database_client_interface.F90 - - ${CONFIG_SRC}/external/drifters/MOM_particles.F90 - ${CONFIG_SRC}/external/drifters/MOM_particles_types.F90 - - ${CONFIG_SRC}/external/ODA_hooks/kdtree.f90 - ${CONFIG_SRC}/external/ODA_hooks/ocean_da_core.F90 - ${CONFIG_SRC}/external/ODA_hooks/ocean_da_types.F90 - ${CONFIG_SRC}/external/ODA_hooks/write_ocean_obs.F90 - - ${CONFIG_SRC}/external/stochastic_physics/get_stochy_pattern.F90 - ${CONFIG_SRC}/external/stochastic_physics/stochastic_physics.F90 - - ${CONFIG_SRC}/infra/FMS2/MOM_coms_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_constants.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_couplertype_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_cpu_clock_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_data_override_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_diag_manager_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_domain_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_ensemble_manager_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_error_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_interp_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_io_infra.F90 - ${CONFIG_SRC}/infra/FMS2/MOM_time_manager.F90 - - ${CONFIG_SRC}/external/MARBL/marbl_constants_mod.F90 - ${CONFIG_SRC}/external/MARBL/marbl_interface.F90 - ${CONFIG_SRC}/external/MARBL/marbl_interface_public_types.F90 - ${CONFIG_SRC}/external/MARBL/marbl_logging.F90 -) - -if (MOM6_ACCESS3) - target_sources(mom6lib PRIVATE - ${CONFIG_SRC}/drivers/nuopc_cap/mom_cap_time.F90 - ${CONFIG_SRC}/drivers/nuopc_cap/mom_surface_forcing_nuopc.F90 - ${CONFIG_SRC}/drivers/nuopc_cap/ocn_comp_NUOPC.F90 - ${CONFIG_SRC}/drivers/nuopc_cap/time_utils.F90 - ${CONFIG_SRC}/drivers/nuopc_cap/mom_cap.F90 - ${CONFIG_SRC}/drivers/nuopc_cap/mom_cap_methods.F90 - ${CONFIG_SRC}/drivers/nuopc_cap/mom_cap_gtracer_flux.F90 - ${CONFIG_SRC}/drivers/nuopc_cap/mom_ocean_model_nuopc.F90 - ) -else() - target_sources(mom6lib PRIVATE - ${CONFIG_SRC}/drivers/solo_driver/MOM_surface_forcing.F90 - ${CONFIG_SRC}/drivers/solo_driver/MESO_surface_forcing.F90 - ${CONFIG_SRC}/drivers/solo_driver/user_surface_forcing.F90 - ) -endif() - -#[==============================================================================[ -# Install or Export # -#]==============================================================================] - -## Library -if(MOM6_ACCESS3) - set_target_properties(mom6lib PROPERTIES - OUTPUT_NAME access-mom6lib - EXPORT_NAME mom6lib - ) - install(TARGETS mom6lib - EXPORT Mom6libTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT AccessMOM6_runtime NAMELINK_COMPONENT AccessMOM6_Development - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT AccessMOM6_Development - ) - # Fortran module files are a special case, as currently there is no standard - # way of handling them in CMake - target_include_directories(mom6lib PUBLIC "$") - get_target_property(mom_moddir mom6lib Fortran_MODULE_DIRECTORY) - install(FILES ${mom_moddir}/ocn_comp_nuopc.mod ${mom_moddir}/mom_cap_mod.mod - DESTINATION ${CMAKE_INSTALL_MODULEDIR}/Mom6lib - COMPONENT AccessMOM6_Development - ) - install(EXPORT Mom6libTargets - FILE Mom6libTargets.cmake - NAMESPACE Access3:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib - ) - - configure_package_config_file( - cmake/Mom6libConfig.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/Mom6libConfig.cmake" - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib - ) - - install(FILES ${CMAKE_SOURCE_DIR}/cmake/FindNetCDF.cmake ${CMAKE_CURRENT_BINARY_DIR}/Mom6libConfig.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib - COMPONENT AccessMOM6_Development - ) - -else() - -# executable - add_executable(MOM6 ${CONFIG_SRC}/drivers/solo_driver/MOM_driver.F90) - target_link_libraries(MOM6 PRIVATE mom6lib) - - target_include_directories(MOM6 PRIVATE - ${SRC}/framework - ${MOM_MEMORY_DIR} - ${CONFIG_SRC}/drivers/solo_driver - ) - - set_target_properties(MOM6 PROPERTIES - LINKER_LANGUAGE Fortran - OUTPUT_NAME mom6 - ) - - install(TARGETS MOM6 - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ) -endif() +## Build MOM6 ACCESS3 library and/or MOM6 solo executable +add_subdirectory(config_src) diff --git a/cmake/FortranLib.cmake b/cmake/FortranLib.cmake index 6eaec978be..2e63caa73f 100644 --- a/cmake/FortranLib.cmake +++ b/cmake/FortranLib.cmake @@ -1,10 +1,20 @@ # Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details. -function(add_fortran_library LIB MOD_DIR) - add_library(${LIB} ${ARGN}) +function(add_fortran_target TARGET_NAME TYPE MOD_DIR) + if(${TYPE} STREQUAL "LIB") + add_library(${TARGET_NAME} ${ARGN}) + elseif(${TYPE} STREQUAL "EXE") + add_executable(${TARGET_NAME} ${ARGN}) + else() + message(FATAL_ERROR "Invalid TYPE '${TYPE}' for add_fortran_target. Use LIB or EXE.") + endif() - get_target_property(LIB_DIR ${LIB} BINARY_DIR) - set_target_properties(${LIB} PROPERTIES Fortran_MODULE_DIRECTORY ${LIB_DIR}/${MOD_DIR}) + # Set Fortran module directory + get_target_property(TGT_BUILD_DIR ${TARGET_NAME} BINARY_DIR) + set_target_properties(${TARGET_NAME} PROPERTIES + Fortran_MODULE_DIRECTORY "${TGT_BUILD_DIR}/${MOD_DIR}" + ) - target_include_directories(${LIB} INTERFACE "$") - endfunction(add_fortran_library) + # Add the module directory to the include path + target_include_directories(${TARGET_NAME} INTERFACE "$") +endfunction() diff --git a/config_src/CMakeLists.txt b/config_src/CMakeLists.txt new file mode 100644 index 0000000000..9596ad261d --- /dev/null +++ b/config_src/CMakeLists.txt @@ -0,0 +1,3 @@ +# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details. + +add_subdirectory(drivers) \ No newline at end of file diff --git a/config_src/drivers/CMakeLists.txt b/config_src/drivers/CMakeLists.txt new file mode 100644 index 0000000000..a72df15db7 --- /dev/null +++ b/config_src/drivers/CMakeLists.txt @@ -0,0 +1,11 @@ +# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details. + +if(MOM6_ACCESS3) + ## Build MOM6 library for use in ACCESS3 + add_subdirectory(nuopc_cap) +endif() + +if(MOM6_SOLO) + ## Build MOM6 solo executable + add_subdirectory(solo_driver) +endif() \ No newline at end of file diff --git a/config_src/drivers/nuopc_cap/CMakeLists.txt b/config_src/drivers/nuopc_cap/CMakeLists.txt new file mode 100644 index 0000000000..b5380bded3 --- /dev/null +++ b/config_src/drivers/nuopc_cap/CMakeLists.txt @@ -0,0 +1,60 @@ +# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details. + +add_fortran_target(mom6lib LIB mod STATIC) + +target_link_libraries(mom6lib PRIVATE + mom6shared + Access3::nuopc_cap_share + Access3::share + Access3::timing + Access3::cdeps-common + ESMF::ESMF +) + +target_compile_definitions(mom6lib PRIVATE CESMCOUPLED) + +target_sources(mom6lib PRIVATE + mom_cap_time.F90 + mom_surface_forcing_nuopc.F90 + ocn_comp_NUOPC.F90 + time_utils.F90 + mom_cap.F90 + mom_cap_methods.F90 + mom_cap_gtracer_flux.F90 + mom_ocean_model_nuopc.F90 +) + +# Install and export +set_target_properties(mom6lib PROPERTIES + OUTPUT_NAME access-mom6lib + EXPORT_NAME mom6lib +) +install(TARGETS mom6lib mom6shared + EXPORT Mom6libTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT AccessMOM6_runtime NAMELINK_COMPONENT AccessMOM6_Development + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT AccessMOM6_Development +) +# Fortran module files are a special case, as currently there is no standard +# way of handling them in CMake +target_include_directories(mom6lib PUBLIC "$") + get_target_property(mom_moddir mom6lib Fortran_MODULE_DIRECTORY) + install(FILES ${mom_moddir}/ocn_comp_nuopc.mod ${mom_moddir}/mom_cap_mod.mod + DESTINATION ${CMAKE_INSTALL_MODULEDIR}/Mom6lib + COMPONENT AccessMOM6_Development +) +install(EXPORT Mom6libTargets + FILE Mom6libTargets.cmake + NAMESPACE Access3:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib +) + +configure_package_config_file( + cmake/Mom6libConfig.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/Mom6libConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib +) + +install(FILES ${CMAKE_SOURCE_DIR}/cmake/FindNetCDF.cmake ${CMAKE_CURRENT_BINARY_DIR}/Mom6libConfig.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib + COMPONENT AccessMOM6_Development +) \ No newline at end of file diff --git a/cmake/Mom6libConfig.cmake.in b/config_src/drivers/nuopc_cap/cmake/Mom6libConfig.cmake.in similarity index 100% rename from cmake/Mom6libConfig.cmake.in rename to config_src/drivers/nuopc_cap/cmake/Mom6libConfig.cmake.in diff --git a/config_src/drivers/solo_driver/CMakeLists.txt b/config_src/drivers/solo_driver/CMakeLists.txt new file mode 100644 index 0000000000..7988799c76 --- /dev/null +++ b/config_src/drivers/solo_driver/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details. + +add_fortran_target(MOM6 EXE mod) + +target_link_libraries(MOM6 PRIVATE + mom6shared +) + +target_sources(MOM6 PRIVATE + MOM_surface_forcing.F90 + MESO_surface_forcing.F90 + user_surface_forcing.F90 + MOM_driver.F90 +) + +set_target_properties(MOM6 PROPERTIES + LINKER_LANGUAGE Fortran + OUTPUT_NAME mom6-solo +) + +# Install +install(TARGETS MOM6 + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000..0fd8b758bb --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,351 @@ +# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details. + +add_fortran_target(mom6shared LIB mod STATIC) + +target_link_libraries(mom6shared PUBLIC + FMS::fms_r8 + GFDLGTracers::gtracers +) + +if(OpenMP_Fortran_FOUND) + target_link_libraries(mom6shared PRIVATE OpenMP::OpenMP_Fortran) +endif() + +target_include_directories(mom6shared PUBLIC + $ + $, + ${CMAKE_CURRENT_SOURCE_DIR}/../config_src/memory/dynamic_nonsymmetric, + ${CMAKE_CURRENT_SOURCE_DIR}/../config_src/memory/dynamic_symmetric>> +) + +target_sources(mom6shared PRIVATE + ALE/coord_adapt.F90 + ALE/coord_hycom.F90 + ALE/coord_rho.F90 + ALE/coord_sigma.F90 + ALE/coord_zlike.F90 + ALE/MOM_ALE.F90 + ALE/MOM_hybgen_regrid.F90 + ALE/MOM_hybgen_remap.F90 + ALE/MOM_hybgen_unmix.F90 + ALE/MOM_regridding.F90 + ALE/MOM_remapping.F90 + ALE/P1M_functions.F90 + ALE/P3M_functions.F90 + ALE/PCM_functions.F90 + ALE/PLM_functions.F90 + ALE/polynomial_functions.F90 + ALE/PPM_functions.F90 + ALE/PQM_functions.F90 + ALE/Recon1d_EMPLM_CWK.F90 + ALE/Recon1d_EMPLM_WA.F90 + ALE/Recon1d_EMPLM_WA_poly.F90 + ALE/Recon1d_EPPM_CWK.F90 + ALE/Recon1d_MPLM_CWK.F90 + ALE/Recon1d_MPLM_WA.F90 + ALE/Recon1d_MPLM_WA_poly.F90 + ALE/Recon1d_PCM.F90 + ALE/Recon1d_PLM_CW.F90 + ALE/Recon1d_PLM_CWK.F90 + ALE/Recon1d_PLM_hybgen.F90 + ALE/Recon1d_PPM_CW.F90 + ALE/Recon1d_PPM_CWK.F90 + ALE/Recon1d_PPM_H4_2018.F90 + ALE/Recon1d_PPM_H4_2019.F90 + ALE/Recon1d_PPM_hybgen.F90 + ALE/Recon1d_type.F90 + ALE/regrid_consts.F90 + ALE/regrid_edge_values.F90 + ALE/regrid_interp.F90 + ALE/regrid_solvers.F90 + + core/MOM_barotropic.F90 + core/MOM_boundary_update.F90 + core/MOM_check_scaling.F90 + core/MOM_checksum_packages.F90 + core/MOM_continuity.F90 + core/MOM_continuity_PPM.F90 + core/MOM_CoriolisAdv.F90 + core/MOM_density_integrals.F90 + core/MOM_dynamics_split_RK2.F90 + core/MOM_dynamics_split_RK2b.F90 + core/MOM_dynamics_unsplit.F90 + core/MOM_dynamics_unsplit_RK2.F90 + core/MOM.F90 + core/MOM_grid.F90 + core/MOM_interface_heights.F90 + core/MOM_isopycnal_slopes.F90 + core/MOM_open_boundary.F90 + core/MOM_porous_barriers.F90 + core/MOM_PressureForce.F90 + core/MOM_PressureForce_FV.F90 + core/MOM_PressureForce_Montgomery.F90 + core/MOM_stoch_eos.F90 + core/MOM_transcribe_grid.F90 + core/MOM_unit_tests.F90 + core/MOM_variables.F90 + core/MOM_verticalGrid.F90 + core/MOM_forcing_type.F90 + + diagnostics/MOM_debugging.F90 + diagnostics/MOM_diagnose_KdWork.F90 + diagnostics/MOM_diagnose_MLD.F90 + diagnostics/MOM_diagnostics.F90 + diagnostics/MOM_harmonic_analysis.F90 + diagnostics/MOM_obsolete_diagnostics.F90 + diagnostics/MOM_obsolete_params.F90 + diagnostics/MOM_PointAccel.F90 + diagnostics/MOM_spatial_means.F90 + diagnostics/MOM_sum_output.F90 + diagnostics/MOM_wave_speed.F90 + + equation_of_state/MOM_EOS.F90 + equation_of_state/MOM_EOS_base_type.F90 + equation_of_state/MOM_EOS_Jackett06.F90 + equation_of_state/MOM_EOS_linear.F90 + equation_of_state/MOM_EOS_Roquet_rho.F90 + equation_of_state/MOM_EOS_Roquet_SpV.F90 + equation_of_state/MOM_EOS_TEOS10.F90 + equation_of_state/MOM_EOS_UNESCO.F90 + equation_of_state/MOM_EOS_Wright.F90 + equation_of_state/MOM_EOS_Wright_full.F90 + equation_of_state/MOM_EOS_Wright_red.F90 + equation_of_state/MOM_temperature_convert.F90 + equation_of_state/MOM_TFreeze.F90 + + equation_of_state/TEOS10/gsw_chem_potential_water_t_exact.f90 + equation_of_state/TEOS10/gsw_ct_freezing_exact.f90 + equation_of_state/TEOS10/gsw_ct_freezing_poly.f90 + equation_of_state/TEOS10/gsw_ct_from_pt.f90 + equation_of_state/TEOS10/gsw_ct_from_t.f90 + equation_of_state/TEOS10/gsw_entropy_part.f90 + equation_of_state/TEOS10/gsw_entropy_part_zerop.f90 + equation_of_state/TEOS10/gsw_gibbs.f90 + equation_of_state/TEOS10/gsw_gibbs_ice.f90 + equation_of_state/TEOS10/gsw_gibbs_pt0_pt0.f90 + equation_of_state/TEOS10/gsw_mod_error_functions.f90 + equation_of_state/TEOS10/gsw_mod_freezing_poly_coefficients.f90 + equation_of_state/TEOS10/gsw_mod_gibbs_ice_coefficients.f90 + equation_of_state/TEOS10/gsw_mod_kinds.f90 + equation_of_state/TEOS10/gsw_mod_specvol_coefficients.f90 + equation_of_state/TEOS10/gsw_mod_teos10_constants.f90 + equation_of_state/TEOS10/gsw_mod_toolbox.f90 + equation_of_state/TEOS10/gsw_pt0_from_t.f90 + equation_of_state/TEOS10/gsw_pt_from_ct.f90 + equation_of_state/TEOS10/gsw_pt_from_t.f90 + equation_of_state/TEOS10/gsw_rho.f90 + equation_of_state/TEOS10/gsw_rho_first_derivatives.f90 + equation_of_state/TEOS10/gsw_rho_second_derivatives.f90 + equation_of_state/TEOS10/gsw_sp_from_sr.f90 + equation_of_state/TEOS10/gsw_sr_from_sp.f90 + equation_of_state/TEOS10/gsw_specvol.f90 + equation_of_state/TEOS10/gsw_specvol_first_derivatives.f90 + equation_of_state/TEOS10/gsw_specvol_second_derivatives.f90 + equation_of_state/TEOS10/gsw_t_deriv_chem_potential_water_t_exact.f90 + equation_of_state/TEOS10/gsw_t_freezing_exact.f90 + equation_of_state/TEOS10/gsw_t_freezing_poly.f90 + equation_of_state/TEOS10/gsw_t_from_ct.f90 + + framework/MOM_array_transform.F90 + framework/MOM_checksums.F90 + framework/MOM_coms.F90 + framework/MOM_cpu_clock.F90 + framework/MOM_data_override.F90 + framework/MOM_diag_mediator.F90 + framework/MOM_diag_remap.F90 + framework/MOM_document.F90 + framework/MOM_domains.F90 + framework/MOM_dyn_horgrid.F90 + framework/MOM_ensemble_manager.F90 + framework/MOM_error_handler.F90 + framework/MOM_file_parser.F90 + framework/MOM_get_input.F90 + framework/MOM_hor_index.F90 + framework/MOM_horizontal_regridding.F90 + framework/MOM_interpolate.F90 + framework/MOM_intrinsic_functions.F90 + framework/MOM_io.F90 + framework/MOM_io_file.F90 + framework/MOM_memory_macros.h + framework/MOM_murmur_hash.F90 + framework/MOM_netcdf.F90 + framework/numerical_testing_type.F90 + framework/MOM_random.F90 + framework/MOM_restart.F90 + framework/MOM_safe_alloc.F90 + framework/MOM_string_functions.F90 + framework/MOM_unique_scales.F90 + framework/MOM_unit_scaling.F90 + framework/MOM_write_cputime.F90 + framework/posix.F90 + framework/MOM_coupler_types.F90 + + ice_shelf/MOM_ice_shelf_diag_mediator.F90 + ice_shelf/MOM_ice_shelf_dynamics.F90 + ice_shelf/MOM_ice_shelf.F90 + ice_shelf/MOM_ice_shelf_initialize.F90 + ice_shelf/MOM_ice_shelf_state.F90 + ice_shelf/MOM_marine_ice.F90 + ice_shelf/user_shelf_init.F90 + + initialization/MOM_coord_initialization.F90 + initialization/MOM_fixed_initialization.F90 + initialization/MOM_grid_initialize.F90 + initialization/MOM_shared_initialization.F90 + initialization/MOM_state_initialization.F90 + initialization/MOM_tracer_initialization_from_Z.F90 + + ocean_data_assim/MOM_oda_driver.F90 + ocean_data_assim/MOM_oda_incupd.F90 + + parameterizations/CVmix/cvmix_background.F90 + parameterizations/CVmix/cvmix_convection.F90 + parameterizations/CVmix/cvmix_ddiff.F90 + parameterizations/CVmix/cvmix_kinds_and_types.F90 + parameterizations/CVmix/cvmix_kpp.F90 + parameterizations/CVmix/cvmix_math.F90 + parameterizations/CVmix/cvmix_put_get.F90 + parameterizations/CVmix/cvmix_shear.F90 + parameterizations/CVmix/cvmix_tidal.F90 + parameterizations/CVmix/cvmix_utils.F90 + + parameterizations/lateral/MOM_hor_visc.F90 + parameterizations/lateral/MOM_interface_filter.F90 + parameterizations/lateral/MOM_internal_tides.F90 + parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 + parameterizations/lateral/MOM_load_love_numbers.F90 + parameterizations/lateral/MOM_MEKE.F90 + parameterizations/lateral/MOM_MEKE_types.F90 + parameterizations/lateral/MOM_mixed_layer_restrat.F90 + parameterizations/lateral/MOM_spherical_harmonics.F90 + parameterizations/lateral/MOM_streaming_filter.F90 + parameterizations/lateral/MOM_self_attr_load.F90 + parameterizations/lateral/MOM_thickness_diffuse.F90 + parameterizations/lateral/MOM_tidal_forcing.F90 + parameterizations/lateral/MOM_wave_drag.F90 + parameterizations/lateral/MOM_Zanna_Bolton.F90 + + parameterizations/stochastic/MOM_stochastics.F90 + + parameterizations/vertical/MOM_ALE_sponge.F90 + parameterizations/vertical/MOM_bkgnd_mixing.F90 + parameterizations/vertical/MOM_bulk_mixed_layer.F90 + parameterizations/vertical/MOM_CVMix_conv.F90 + parameterizations/vertical/MOM_CVMix_ddiff.F90 + parameterizations/vertical/MOM_CVMix_KPP.F90 + parameterizations/vertical/MOM_CVMix_shear.F90 + parameterizations/vertical/MOM_diabatic_aux.F90 + parameterizations/vertical/MOM_diabatic_driver.F90 + parameterizations/vertical/MOM_diapyc_energy_req.F90 + parameterizations/vertical/MOM_energetic_PBL.F90 + parameterizations/vertical/MOM_entrain_diffusive.F90 + parameterizations/vertical/MOM_full_convection.F90 + parameterizations/vertical/MOM_geothermal.F90 + parameterizations/vertical/MOM_internal_tide_input.F90 + parameterizations/vertical/MOM_kappa_shear.F90 + parameterizations/vertical/MOM_opacity.F90 + parameterizations/vertical/MOM_regularize_layers.F90 + parameterizations/vertical/MOM_set_diffusivity.F90 + parameterizations/vertical/MOM_set_viscosity.F90 + parameterizations/vertical/MOM_sponge.F90 + parameterizations/vertical/MOM_tidal_mixing.F90 + parameterizations/vertical/MOM_vert_friction.F90 + + tracer/advection_test_tracer.F90 + tracer/boundary_impulse_tracer.F90 + tracer/DOME_tracer.F90 + tracer/dyed_obc_tracer.F90 + tracer/dye_example.F90 + tracer/ideal_age_example.F90 + tracer/ISOMIP_tracer.F90 + tracer/MOM_CFC_cap.F90 + tracer/MOM_generic_tracer.F90 + tracer/MOM_hor_bnd_diffusion.F90 + tracer/MARBL_forcing_mod.F90 + tracer/MARBL_tracers.F90 + tracer/MOM_neutral_diffusion.F90 + tracer/MOM_OCMIP2_CFC.F90 + tracer/MOM_offline_aux.F90 + tracer/MOM_offline_main.F90 + tracer/MOM_tracer_advect.F90 + tracer/MOM_tracer_advect_schemes.F90 + tracer/MOM_tracer_diabatic.F90 + tracer/MOM_tracer_flow_control.F90 + tracer/MOM_tracer_hor_diff.F90 + tracer/MOM_tracer_registry.F90 + tracer/MOM_tracer_types.F90 + tracer/MOM_tracer_Z_init.F90 + tracer/nw2_tracers.F90 + tracer/oil_tracer.F90 + tracer/pseudo_salt_tracer.F90 + tracer/RGC_tracer.F90 + tracer/tracer_example.F90 + + user/adjustment_initialization.F90 + user/baroclinic_zone_initialization.F90 + user/basin_builder.F90 + user/benchmark_initialization.F90 + user/BFB_initialization.F90 + user/BFB_surface_forcing.F90 + user/circle_obcs_initialization.F90 + user/dense_water_initialization.F90 + user/DOME2d_initialization.F90 + user/DOME_initialization.F90 + user/dumbbell_initialization.F90 + user/dumbbell_surface_forcing.F90 + user/dyed_channel_initialization.F90 + user/dyed_obcs_initialization.F90 + user/external_gwave_initialization.F90 + user/Idealized_Hurricane.F90 + user/ISOMIP_initialization.F90 + user/Kelvin_initialization.F90 + user/lock_exchange_initialization.F90 + user/MOM_controlled_forcing.F90 + user/MOM_wave_interface.F90 + user/Neverworld_initialization.F90 + user/Phillips_initialization.F90 + user/RGC_initialization.F90 + user/Rossby_front_2d_initialization.F90 + user/SCM_CVMix_tests.F90 + user/seamount_initialization.F90 + user/shelfwave_initialization.F90 + user/sloshing_initialization.F90 + user/soliton_initialization.F90 + user/supercritical_initialization.F90 + user/tidal_bay_initialization.F90 + user/user_change_diffusivity.F90 + user/user_initialization.F90 + user/user_revise_forcing.F90 + + ../config_src/external/database_comms/MOM_database_comms.F90 + ../config_src/external/database_comms/database_client_interface.F90 + + ../config_src/external/drifters/MOM_particles.F90 + ../config_src/external/drifters/MOM_particles_types.F90 + + ../config_src/external/ODA_hooks/kdtree.f90 + ../config_src/external/ODA_hooks/ocean_da_core.F90 + ../config_src/external/ODA_hooks/ocean_da_types.F90 + ../config_src/external/ODA_hooks/write_ocean_obs.F90 + + ../config_src/external/stochastic_physics/get_stochy_pattern.F90 + ../config_src/external/stochastic_physics/stochastic_physics.F90 + + ../config_src/infra/FMS2/MOM_coms_infra.F90 + ../config_src/infra/FMS2/MOM_constants.F90 + ../config_src/infra/FMS2/MOM_couplertype_infra.F90 + ../config_src/infra/FMS2/MOM_cpu_clock_infra.F90 + ../config_src/infra/FMS2/MOM_data_override_infra.F90 + ../config_src/infra/FMS2/MOM_diag_manager_infra.F90 + ../config_src/infra/FMS2/MOM_domain_infra.F90 + ../config_src/infra/FMS2/MOM_ensemble_manager_infra.F90 + ../config_src/infra/FMS2/MOM_error_infra.F90 + ../config_src/infra/FMS2/MOM_interp_infra.F90 + ../config_src/infra/FMS2/MOM_io_infra.F90 + ../config_src/infra/FMS2/MOM_time_manager.F90 + + ../config_src/external/MARBL/marbl_constants_mod.F90 + ../config_src/external/MARBL/marbl_interface.F90 + ../config_src/external/MARBL/marbl_interface_public_types.F90 + ../config_src/external/MARBL/marbl_logging.F90 +)