diff --git a/GFDL_tools/Makefile.am b/GFDL_tools/Makefile.am new file mode 100644 index 000000000..16862b750 --- /dev/null +++ b/GFDL_tools/Makefile.am @@ -0,0 +1,33 @@ +# This is an automake file for the GFDL AM4 model. +# This builds directory ./GFDL_tools. +# +# Ed Hartnett 2019-09-10 + +# Build these uninstalled convenience libraries. +noinst_LTLIBRARIES = libread_climate_nudge_data.la libfv_cmip_diag.la \ +libfv_climate_nudge.la libfv_ada_nudge.la + +# Each convenience library depends on its source. +libread_climate_nudge_data_la_SOURCES = read_climate_nudge_data.F90 +libfv_cmip_diag_la_SOURCES = fv_cmip_diag.F90 +libfv_climate_nudge_la_SOURCES = fv_climate_nudge.F90 +libfv_ada_nudge_la_SOURCES = fv_ada_nudge.F90 + +# Each mod file depends on the .o file. +read_climate_nudge_data_mod.mod: read_climate_nudge_data.$(OBJEXT) +fv_cmip_diag_mod.mod: fv_cmip_diag.$(OBJEXT) +fv_climate_nudge_mod.mod: fv_climate_nudge.$(OBJEXT) +fv_ada_nudge_mod.mod: fv_ada_nudge.$(OBJEXT) + +# Some mods are dependant on other mods in this dir. +fv_climate_nudge.$(OBJEXT): read_climate_nudge_data_mod.mod + +# Mod files are built and then installed as headers. +MODFILES = read_climate_nudge_data_mod.mod fv_cmip_diag_mod.mod \ +fv_climate_nudge_mod.mod fv_ada_nudge_mod.mod +include_HEADERS = $(MODFILES) +BUILT_SOURCES = $(MODFILES) + +EXTRA_DIST = + +CLEANFILES = *.mod diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..d0e94d78e --- /dev/null +++ b/Makefile.am @@ -0,0 +1,11 @@ +# This is an automake file for the GFDL AM4 model. +# This builds directory .. +# +# Ed Hartnett 2019-09-10 + +# This directory stores libtool macros, put there by aclocal. +ACLOCAL_AMFLAGS = -I m4 + +# Run make targets in each of these subdirs +SUBDIRS = GFDL_tools model_nh tools driver model + diff --git a/configure.ac b/configure.ac new file mode 100644 index 000000000..102db54ef --- /dev/null +++ b/configure.ac @@ -0,0 +1,78 @@ +# This is the main configure file for the GFDL AM4 +# package. +# Ed Hartnett 7/29/2019 + +AC_PREREQ([2.59]) + +# Initialize with name, version, and support email address. +AC_INIT([AM4], [2.0-development], []) + +# Find out about the host we're building on. +AC_CANONICAL_HOST + +# Find out about the target we're building for. +AC_CANONICAL_TARGET + +AM_INIT_AUTOMAKE([foreign dist-zip subdir-objects]) + +# Keep libtool macros in an m4 directory. +AC_CONFIG_MACRO_DIR([m4]) + +# Set up libtool. +LT_PREREQ([2.4]) +LT_INIT() + +# Find the C compiler. +AC_PROG_CC +AM_PROG_CC_C_O +AC_C_CONST +AC_PROG_CPP + +# Find the Fortran compiler. +AC_PROG_FC +AC_PROG_F77 + +# Find the install program. +AC_PROG_INSTALL + +# Check to see if any macros must be set to enable large (>2GB) files. +AC_SYS_LARGEFILE + +# Require MPI. +AC_CHECK_FUNC([MPI_Init], [], [AC_MSG_ERROR([MPI C library required])]) + +# Require FMS. But this does not work because fms_platform.h is +# actually a fortran file, and AC_SEARCH_LIBS does not work with +# fortran mod files. I will swing round to this again, until then +# include the FMS library in FCFLAGS, LDFLAGS and LIBS. +# AC_CHECK_HEADERS([fms_platform.h], [], [AC_MSG_ERROR([Can't find fms_platform.h.])]) +# AC_SEARCH_LIBS([__mpp_mod_MOD_mpp_init], [FMS], [], +# [AC_MSG_ERROR([Can't find or link to the FMS Fortran library, set CPPFLAGS/LDFLAGS.])]) + + +# Check for netCDF C library. +AC_SEARCH_LIBS([nc_create], [netcdf], [], + [AC_MSG_ERROR([Can't find or link to the netcdf C library, set CPPFLAGS/LDFLAGS.])]) + +# Check for netCDF Fortran library. +AC_LANG_PUSH(Fortran) +AC_SEARCH_LIBS([nf_create], [netcdff], [], + [AC_MSG_ERROR([Can't find or link to the netcdf Fortran library, set CPPFLAGS/LDFLAGS.])]) +AC_LANG_POP(Fortran) + +# These defines are required for the build. +#AC_DEFINE([use_netCDF], [1]) +#AC_DEFINE([use_libMPI], [1]) +#AC_DEFINE([SPMD], [1]) + +# These files will be created when the configure script is run. +AC_CONFIG_FILES([Makefile + GFDL_tools/Makefile + model_nh/Makefile + tools/Makefile + driver/Makefile + driver/GFDL/Makefile + driver/SHiELD/Makefile + model/Makefile + ]) +AC_OUTPUT() diff --git a/driver/GFDL/Makefile.am b/driver/GFDL/Makefile.am new file mode 100644 index 000000000..ad40c4083 --- /dev/null +++ b/driver/GFDL/Makefile.am @@ -0,0 +1,24 @@ +# This is an automake file for the GFDL AM4 model. +# This builds directory ./driver/GFDL. +# +# Ed Hartnett 2019-09-10 + +# Build these uninstalled convenience libraries. +noinst_LTLIBRARIES = libatmosphere.la + +# Each convenience library depends on its source. +libatmosphere_la_SOURCES = atmosphere.F90 + +# Each mod file depends on the .o file. +atmosphere_mod.mod: atmosphere.$(OBJEXT) + +# Some mods are dependant on other mods in this dir. + +# Mod files are built and then installed as headers. +MODFILES = atmosphere_mod.mod +include_HEADERS = $(MODFILES) +BUILT_SOURCES = $(MODFILES) + +EXTRA_DIST = + +CLEANFILES = *.mod diff --git a/driver/Makefile.am b/driver/Makefile.am new file mode 100644 index 000000000..8e2102b4e --- /dev/null +++ b/driver/Makefile.am @@ -0,0 +1,8 @@ +# This is an automake file for the GFDL AM4 model. +# This builds directory ./driver. +# +# Ed Hartnett 2019-09-10 + +# Run make targets in each of these subdirs +SUBDIRS = GFDL SHiELD + diff --git a/driver/SHiELD/Makefile.am b/driver/SHiELD/Makefile.am new file mode 100644 index 000000000..eaebf1b4f --- /dev/null +++ b/driver/SHiELD/Makefile.am @@ -0,0 +1,30 @@ +# This is an automake file for the GFDL AM4 model. +# This builds directory ./driver/SHiELD. +# +# Ed Hartnett 2019-09-10 + +# Build these uninstalled convenience libraries. +noinst_LTLIBRARIES = libatmosphere.la libconstants.la liblin_cloud_microphys.la + +# Each convenience library depends on its source. +libatmosphere_la_SOURCES = atmosphere.F90 +libconstants_la_SOURCES = constants.F90 +liblin_cloud_microphys_la_SOURCES = lin_cloud_microphys.F90 + +# Each mod file depends on the .o file. +atmosphere_mod.mod: atmosphere.$(OBJEXT) +constants_mod.mod: constants.$(OBJEXT) +lin_cloud_microphys_mod.mod: lin_cloud_microphys.$(OBJEXT) + +# Some mods are dependant on other mods in this dir. +atmosphere.$(OBJEXT): constants_mod.mod +lin_cloud_microphys.$(OBJEXT): constants_mod.mod + +# Mod files are built and then installed as headers. +MODFILES = atmosphere_mod.mod constants_mod.mod lin_cloud_microphys_mod.mod +include_HEADERS = $(MODFILES) +BUILT_SOURCES = $(MODFILES) + +EXTRA_DIST = + +CLEANFILES = *.mod diff --git a/model/Makefile.am b/model/Makefile.am new file mode 100644 index 000000000..57c484392 --- /dev/null +++ b/model/Makefile.am @@ -0,0 +1,78 @@ +# This is an automake file for the GFDL AM4 model. +# This builds directory ./model. +# +# Ed Hartnett 2019-09-10 + +# Build these uninstalled convenience libraries. +noinst_LTLIBRARIES = libtp_core.la libboundary.la libfv_current_grid.la libfv_arrays.la \ +libfv_fill.la libfv_tracer2d.la libsw_core.la libfv_grid_utils.la \ +libfv_mapz.la libfv_control.la libfv_nesting.la libdyn_core.la \ +libfv_dynamics.la libfv_update_phys.la liba2b_edge.la libfv_sg.la \ +libfv_cmp.la + +# Each convenience library depends on its source. +libtp_core_la_SOURCES = tp_core.F90 +libboundary_la_SOURCES = boundary.F90 +libfv_current_grid_la_SOURCES = fv_current_grid.F90 +libfv_arrays_la_SOURCES = fv_arrays.F90 +libfv_fill_la_SOURCES = fv_fill.F90 +libfv_tracer2d_la_SOURCES = fv_tracer2d.F90 +libsw_core_la_SOURCES = sw_core.F90 +libfv_grid_utils_la_SOURCES = fv_grid_utils.F90 +libfv_mapz_la_SOURCES = fv_mapz.F90 +libfv_control_la_SOURCES = fv_control.F90 +libfv_nesting_la_SOURCES = fv_nesting.F90 +libdyn_core_la_SOURCES = dyn_core.F90 +libfv_dynamics_la_SOURCES = fv_dynamics.F90 +libfv_update_phys_la_SOURCES = fv_update_phys.F90 +liba2b_edge_la_SOURCES = a2b_edge.F90 +libfv_sg_la_SOURCES = fv_sg.F90 +libfv_cmp_la_SOURCES = fv_cmp.F90 + +# Each mod file depends on the .o file. +tp_core_mod.mod: tp_core.$(OBJEXT) +boundary_mod.mod: boundary.$(OBJEXT) +fv_current_grid_mod.mod: fv_current_grid.$(OBJEXT) +fv_arrays_mod.mod: fv_arrays.$(OBJEXT) +fv_fill_mod.mod: fv_fill.$(OBJEXT) +fv_tracer2d_mod.mod: fv_tracer2d.$(OBJEXT) +sw_core_mod.mod: sw_core.$(OBJEXT) +fv_grid_utils_mod.mod: fv_grid_utils.$(OBJEXT) +fv_mapz_mod.mod: fv_mapz.$(OBJEXT) +fv_control_mod.mod: fv_control.$(OBJEXT) +fv_nesting_mod.mod: fv_nesting.$(OBJEXT) +dyn_core_mod.mod: dyn_core.$(OBJEXT) +fv_dynamics_mod.mod: fv_dynamics.$(OBJEXT) +fv_update_phys_mod.mod: fv_update_phys.$(OBJEXT) +a2b_edge_mod.mod: a2b_edge.$(OBJEXT) +fv_sg_mod.mod: fv_sg.$(OBJEXT) +fv_cmp_mod.mod: fv_cmp.$(OBJEXT) + +# Some mods are dependant on other mods in this dir. +tp_core.$(OBJEXT): fv_arrays_mod.mod fv_grid_utils_mod.mod +boundary.$(OBJEXT): fv_arrays_mod.mod +fv_current_grid.$(OBJEXT): fv_arrays_mod.mod +fv_tracer2d.$(OBJEXT): tp_core_mod.mod boundary_mod.mod fv_arrays_mod.mod +sw_core.$(OBJEXT): tp_core_mod.mod fv_arrays_mod.mod a2b_edge_mod.mod +fv_grid_utils.$(OBJEXT): fv_arrays_mod.mod +fv_mapz.$(OBJEXT): fv_arrays_mod.mod fv_fill_mod.mod fv_grid_utils_mod.mod fv_cmp_mod.mod +fv_control.$(OBJEXT): fv_arrays_mod.mod fv_grid_utils_mod.mod +fv_nesting.$(OBJEXT): boundary_mod.mod fv_arrays_mod.mod sw_core_mod.mod fv_grid_utils_mod.mod fv_mapz_mod.mod fv_sg_mod.mod +dyn_core.$(OBJEXT): tp_core_mod.mod boundary_mod.mod fv_arrays_mod.mod sw_core_mod.mod fv_update_phys_mod.mod a2b_edge_mod.mod +fv_dynamics.$(OBJEXT): boundary_mod.mod fv_arrays_mod.mod fv_fill_mod.mod fv_tracer2d_mod.mod fv_grid_utils_mod.mod fv_mapz_mod.mod fv_nesting_mod.mod dyn_core_mod.mod fv_sg_mod.mod +fv_update_phys.$(OBJEXT): boundary_mod.mod fv_arrays_mod.mod fv_grid_utils_mod.mod fv_mapz_mod.mod +a2b_edge.$(OBJEXT): fv_arrays_mod.mod fv_grid_utils_mod.mod +fv_cmp.$(OBJEXT): fv_arrays_mod.mod + +# Mod files are built and then installed as headers. +MODFILES = tp_core_mod.mod boundary_mod.mod fv_current_grid_mod.mod \ +fv_arrays_mod.mod fv_fill_mod.mod fv_tracer2d_mod.mod sw_core_mod.mod \ +fv_grid_utils_mod.mod fv_mapz_mod.mod fv_control_mod.mod \ +fv_nesting_mod.mod dyn_core_mod.mod fv_dynamics_mod.mod \ +fv_update_phys_mod.mod a2b_edge_mod.mod fv_sg_mod.mod fv_cmp_mod.mod +include_HEADERS = $(MODFILES) +BUILT_SOURCES = $(MODFILES) + +EXTRA_DIST = + +CLEANFILES = *.mod diff --git a/model_nh/Makefile.am b/model_nh/Makefile.am new file mode 100644 index 000000000..5d1a1eaec --- /dev/null +++ b/model_nh/Makefile.am @@ -0,0 +1,27 @@ +# This is an automake file for the GFDL AM4 model. +# This builds directory ./model_nh. +# +# Ed Hartnett 2019-09-10 + +# Build these uninstalled convenience libraries. +noinst_LTLIBRARIES = libnh_utils.la libnh_core.la + +# Each convenience library depends on its source. +libnh_utils_la_SOURCES = nh_utils.F90 +libnh_core_la_SOURCES = nh_core.F90 + +# Each mod file depends on the .o file. +nh_utils_mod.mod: nh_utils.$(OBJEXT) +nh_core_mod.mod: nh_core.$(OBJEXT) + +# Some mods are dependant on other mods in this dir. +nh_core.$(OBJEXT): nh_utils_mod.mod + +# Mod files are built and then installed as headers. +MODFILES = nh_utils_mod.mod nh_core_mod.mod +include_HEADERS = $(MODFILES) +BUILT_SOURCES = $(MODFILES) + +EXTRA_DIST = + +CLEANFILES = *.mod diff --git a/tools/Makefile.am b/tools/Makefile.am new file mode 100644 index 000000000..07769cea5 --- /dev/null +++ b/tools/Makefile.am @@ -0,0 +1,75 @@ +# This is an automake file for the GFDL AM4 model. +# This builds directory ./tools. +# +# Ed Hartnett 2019-09-10 + +# Build these uninstalled convenience libraries. +noinst_LTLIBRARIES = libfv_surf_map.la libexternal_ic.la libfv_restart.la \ +libfv_grid_tools.la libfv_eta.la libinit_hydro.la libsim_nc_mod.la \ +libsorted_index.la libfv_mp_mod.la libexternal_sst.la libfv_timing.la \ +libfv_diagnostics.la libfv_nudge.la libfv_nggps_diag.la libfv_io.la \ +libtest_cases.la + +# Each convenience library depends on its source. +libfv_surf_map_la_SOURCES = fv_surf_map.F90 +libexternal_ic_la_SOURCES = external_ic.F90 +libfv_restart_la_SOURCES = fv_restart.F90 +libfv_grid_tools_la_SOURCES = fv_grid_tools.F90 +libfv_eta_la_SOURCES = fv_eta.F90 +libinit_hydro_la_SOURCES = init_hydro.F90 +libsim_nc_mod_la_SOURCES = sim_nc_mod.F90 +libsorted_index_la_SOURCES = sorted_index.F90 +libfv_mp_mod_la_SOURCES = fv_mp_mod.F90 +libexternal_sst_la_SOURCES = external_sst.F90 +libfv_timing_la_SOURCES = fv_timing.F90 +libfv_diagnostics_la_SOURCES = fv_diagnostics.F90 +libfv_nudge_la_SOURCES = fv_nudge.F90 +libfv_nggps_diag_la_SOURCES = fv_nggps_diag.F90 +libfv_io_la_SOURCES = fv_io.F90 +libtest_cases_la_SOURCES = test_cases.F90 + +# Each mod file depends on the .o file. +fv_surf_map_mod.mod: fv_surf_map.$(OBJEXT) +external_ic_mod.mod: external_ic.$(OBJEXT) +fv_restart_mod.mod: fv_restart.$(OBJEXT) +fv_grid_tools_mod.mod: fv_grid_tools.$(OBJEXT) +fv_eta_mod.mod: fv_eta.$(OBJEXT) +init_hydro_mod.mod: init_hydro.$(OBJEXT) +sim_nc_mod_mod.mod: sim_nc_mod.$(OBJEXT) +sorted_index_mod.mod: sorted_index.$(OBJEXT) +fv_mp_mod_mod.mod: fv_mp_mod.$(OBJEXT) +external_sst_mod.mod: external_sst.$(OBJEXT) +fv_timing_mod.mod: fv_timing.$(OBJEXT) +fv_diagnostics_mod.mod: fv_diagnostics.$(OBJEXT) +fv_nudge_mod.mod: fv_nudge.$(OBJEXT) +fv_nggps_diag_mod.mod: fv_nggps_diag.$(OBJEXT) +fv_io_mod.mod: fv_io.$(OBJEXT) +test_cases_mod.mod: test_cases.$(OBJEXT) + +# Some mods are dependant on other mods in this dir. +fv_surf_map.$(OBJEXT): fv_mp_mod_mod.mod fv_timing_mod.mod +external_ic.$(OBJEXT): fv_surf_map_mod.mod fv_eta_mod.mod init_hydro_mod.mod sim_nc_mod_mod.mod fv_mp_mod_mod.mod external_sst_mod.mod fv_timing_mod.mod fv_diagnostics_mod.mod fv_io_mod.mod test_cases_mod.mod +fv_restart.$(OBJEXT): fv_surf_map_mod.mod external_ic_mod.mod fv_eta_mod.mod init_hydro_mod.mod fv_mp_mod_mod.mod fv_timing_mod.mod fv_diagnostics_mod.mod fv_io_mod.mod test_cases_mod.mod +fv_grid_tools.$(OBJEXT): sorted_index_mod.mod fv_mp_mod_mod.mod fv_timing_mod.mod +fv_eta.$(OBJEXT): fv_mp_mod_mod.mod +init_hydro.$(OBJEXT): fv_mp_mod_mod.mod fv_diagnostics_mod.mod +fv_timing.$(OBJEXT): fv_mp_mod_mod.mod +fv_diagnostics.$(OBJEXT): fv_surf_map_mod.mod fv_eta_mod.mod fv_mp_mod_mod.mod +fv_nudge.$(OBJEXT): sim_nc_mod_mod.mod fv_mp_mod_mod.mod external_sst_mod.mod fv_timing_mod.mod fv_diagnostics_mod.mod +fv_nggps_diag.$(OBJEXT): fv_diagnostics_mod.mod +fv_io.$(OBJEXT): fv_eta_mod.mod fv_mp_mod_mod.mod external_sst_mod.mod +test_cases.$(OBJEXT): fv_surf_map_mod.mod fv_grid_tools_mod.mod fv_eta_mod.mod init_hydro_mod.mod fv_mp_mod_mod.mod fv_diagnostics_mod.mod + +# Mod files are built and then installed as headers. +MODFILES = fv_surf_map_mod.mod external_ic_mod.mod fv_restart_mod.mod \ +fv_grid_tools_mod.mod fv_eta_mod.mod init_hydro_mod.mod \ +sim_nc_mod_mod.mod sorted_index_mod.mod fv_mp_mod_mod.mod \ +external_sst_mod.mod fv_timing_mod.mod fv_diagnostics_mod.mod \ +fv_nudge_mod.mod fv_nggps_diag_mod.mod fv_io_mod.mod \ +test_cases_mod.mod +include_HEADERS = $(MODFILES) +BUILT_SOURCES = $(MODFILES) + +EXTRA_DIST = + +CLEANFILES = *.mod