Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 127 additions & 24 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,133 @@ if (isSubproject)
endif ()
endif ()

# Run configure/make as external project
include (ExternalProject)
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
set(CMAKE_Fortran_FLAGS "-ffree-line-length-none -ffixed-line-length-none")
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
set(CMAKE_Fortran_FLAGS "-extend-source 132")
else()
message(WARNING "Fortran compiler with ID ${CMAKE_Fortran_COMPILER_ID} will be used with CMake default options")
endif()

# set install directory
set (aqm_dir ${CMAKE_CURRENT_BINARY_DIR}/aqm)
include("aqm_files.cmake")

# add configure flag for debug build type
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set (configure_options "--enable-debug")
endif ()
# src/shr
add_library(shr OBJECT ${aqm_shr_files})
#add_dependencies(shr drv aqmio ioapi CCTM)
set_target_properties(shr PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod)
target_include_directories(shr PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/mod>)
target_include_directories(shr PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/model/CMAQ/CCTM/src/ICL/fixed/filenames>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/model/CMAQ/CCTM/src/ICL/fixed/const>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/io/ioapi>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/io/aqmio>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/model>)
target_compile_definitions(shr PUBLIC SUBST_CONST="CONST.EXT"
SUBST_FILES_ID="FILES_CTM.EXT")
#target_link_libraries(shr PRIVATE drv aqmio ioapi CCTM)
target_link_libraries(shr PRIVATE esmf)

# src/drv
add_library(drv OBJECT ${aqm_drv_files})
#add_dependencies(drv shr CCTM aqmio ioapi)
add_dependencies(drv shr)
set_target_properties(drv PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod)
target_include_directories(drv PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/mod>)
target_include_directories(drv PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/shr>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/io/ioapi>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/io/aqmio>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/model>)
target_compile_definitions(drv PUBLIC verbose_driver)
target_link_libraries(drv PRIVATE shr, CCTM)
target_link_libraries(drv PRIVATE esmf)

# src/io/aqmio
add_library(aqmio OBJECT ${aqm_aqmio_files})
set_target_properties(aqmio PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod)
target_include_directories(aqmio PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/mod>)
target_link_libraries(aqmio PRIVATE esmf)

# src/io/ioapi
add_library(ioapi OBJECT ${aqm_ioapi_files})
set_target_properties(ioapi PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod)
target_include_directories(ioapi PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/mod>)
target_include_directories(ioapi PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/model/CMAQ/CCTM/src/ICL/fixed/filenames>)
target_compile_definitions(ioapi PUBLIC SUBST_FILES_ID="FILES_CTM.EXT")
target_link_libraries(ioapi PRIVATE esmf)

# src/model
add_library(CCTM OBJECT ${aqm_CCTM_files})
#add_dependencies(CCTM shr aqmio ioapi)
set_target_properties(CCTM PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod)
target_include_directories(CCTM PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/mod>)
target_include_directories(CCTM PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/model/CMAQ/CCTM/src/ICL/fixed/filenames>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/model/CMAQ/CCTM/src/ICL/fixed/const>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/model/CMAQ/CCTM/src/ICL/fixed/emctrl>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/model/CMAQ/CCTM/src/ICL/fixed/mpi>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/shr>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/io/ioapi>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/io/aqmio>)
target_compile_definitions(CCTM PUBLIC SUBST_FILES_ID="FILES_CTM.EXT"
SUBST_CONST="CONST.EXT"
SUBST_EMISPRM="EMISPRM.EXT"
SUBST_PE_COMM="PE_COMM.EXT"
SUBST_COMM=NOOP_COMM
SUBST_BARRIER=NOOP_BARRIER
SUBST_SUBGRID_INDEX=NOOP_SUBGRID_INDEX
MOSAIC_MOD=MOSAIC_MODULE
Mosaic_Mod=Mosaic_Module
EDDYX=DUMMY_EDDYX
OPCONC=DUMMY_OPCONC
OPACONC=DUMMY_OPACONC
OPWDEP=DUMMY_OPWDEP
WR_INIT=DUMMY_WR_INIT
verbose_aero
verbose_gas
mpas
_AQM_)
#target_link_libraries(CCTM PRIVATE shr aqmio ioapi)
ADD_CUSTOM_TARGET(link_target ALL
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_BINARY_DIR}/mod/mosaic_module.mod
${CMAKE_CURRENT_BINARY_DIR}/mod/mosaic_mod.mod)
target_link_libraries(CCTM PRIVATE esmf)

# AQM
add_library(aqm STATIC ${aqm_files} $<TARGET_OBJECTS:shr>
$<TARGET_OBJECTS:drv>
$<TARGET_OBJECTS:aqmio>
$<TARGET_OBJECTS:ioapi>
$<TARGET_OBJECTS:CCTM>)
set_target_properties(aqm PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod)
add_library(aqm::aqm ALIAS aqm)
target_include_directories(aqm PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/mod>
$<INSTALL_INTERFACE:mod>)
target_link_libraries(aqm PUBLIC esmf NetCDF::NetCDF_Fortran)
list(APPEND LIB_TARGETS aqm)

###############################################################################
### Install
###############################################################################

install(
TARGETS ${LIB_TARGETS}
EXPORT AQMExports
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
COMPONENT Library)

export(EXPORT AQMExports
NAMESPACE aqm::
FILE aqm-targets.cmake)

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod DESTINATION ${CMAKE_INSTALL_PREFIX}/AQM)

install(EXPORT AQMExports
NAMESPACE aqm::
FILE aqm-targets.cmake
DESTINATION lib/cmake)

ExternalProject_Add (aqm_gnu
PREFIX aqm
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/configure
--prefix=${aqm_dir} --libdir=${aqm_dir} --includedir=${aqm_dir}
FC=${CMAKE_Fortran_COMPILER} F77=${CMAKE_Fortran_COMPILER} CC=${CMAKE_C_COMPILER}
${configure_options}
BUILD_ALWAYS True
)

# create target
add_library(aqm STATIC IMPORTED GLOBAL)
set_property(TARGET aqm PROPERTY IMPORTED_LOCATION ${aqm_dir}/libaqm.a)
add_dependencies(aqm aqm_gnu)
target_include_directories(aqm INTERFACE ${aqm_dir})
target_link_libraries(aqm INTERFACE esmf NetCDF::NetCDF_Fortran)
# # create target
# add_library(aqm OBJECT ${aqm_files})
# set_property(TARGET aqm PROPERTY IMPORTED_LOCATION ${aqm_dir}/libaqm.a)
# add_dependencies(aqm aqm_gnu)
# target_include_directories(aqm INTERFACE ${aqm_dir})
# target_link_libraries(aqm INTERFACE esmf NetCDF::NetCDF_Fortran)
234 changes: 234 additions & 0 deletions aqm_files.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,234 @@
# Author: Brian Curtis
# This list was taken from the file Makefile.am found in subdirectories

list(APPEND aqm_files
src/aqm_cap.F90
src/aqm_comp_mod.F90
)

list(APPEND aqm_shr_files
src/shr/aqm_config_mod.F90
src/shr/aqm_const_mod.F90
src/shr/aqm_domain_mod.F90
src/shr/aqm_emis_mod.F90
src/shr/aqm_fires_mod.F90
src/shr/aqm_internal_mod.F90
src/shr/aqm_model_mod.F90
src/shr/aqm_rc_mod.F90
src/shr/aqm_methods.F90
src/shr/aqm_species_mod.F90
src/shr/aqm_state_mod.F90
src/shr/aqm_tools_mod.F90
src/shr/aqm_types_mod.F90
)

list(APPEND aqm_drv_files
src/drv/cmaq_model_mod.F90
src/drv/cmaq_mod.F90
)

list(APPEND aqm_aqmio_files
src/io/aqmio/aqmio.F90
)

list(APPEND aqm_ioapi_files
src/io/ioapi/FDESC3.EXT
src/io/ioapi/PARMS3.EXT
src/io/ioapi/crlf.F
src/io/ioapi/currec.f
src/io/ioapi/currstep.f
src/io/ioapi/dt2str.f
src/io/ioapi/findc.f
src/io/ioapi/getefile.F
src/io/ioapi/index1.f
src/io/ioapi/julian.F
src/io/ioapi/junit.F
src/io/ioapi/hhmmss.f
src/io/ioapi/mmddyy.F
src/io/ioapi/nextime.F
src/io/ioapi/poly.f
src/io/ioapi/promptmfile.f
src/io/ioapi/sec2time.f
src/io/ioapi/secsdiff.F
src/io/ioapi/setlam.f
src/io/ioapi/sortic.f
src/io/ioapi/str2real.f
src/io/ioapi/time2sec.f
src/io/ioapi/upcase.f
src/io/ioapi/wkday.F
src/io/ioapi/yr2day.F
src/io/ioapi/m3exit.F90
src/io/ioapi/m3mesg.F90
src/io/ioapi/m3msg2.F90
src/io/ioapi/m3warn.F90
src/io/ioapi/m3utilio.F90
)

set(CCTM_ROOT "src/model/CMAQ/CCTM/src")
set(AERO "${CCTM_ROOT}/aero/aero6")
set(BIOG "${CCTM_ROOT}/biog/beis3")
set(CLOUD "${CCTM_ROOT}/cloud/acm_ae6")
set(DEPV "${CCTM_ROOT}/depv/m3dry")
set(EMIS "${CCTM_ROOT}/emis/emis")
set(GAS "${CCTM_ROOT}/gas/ebi_cb6r3_ae6_aq")
set(GRID "${CCTM_ROOT}/grid/cartesian")
set(ICL "${CCTM_ROOT}/ICL/fixed")
set(INIT "${CCTM_ROOT}/init/yamo")
set(MECHS "${CCTM_ROOT}/MECHS/cb6r3_ae6_aq")
set(PA "${CCTM_ROOT}/procan/pa")
set(PHOT "${CCTM_ROOT}/phot/inline")
set(PLRISE "${CCTM_ROOT}/plrise/smoke")
set(SPCS "${CCTM_ROOT}/spcs/cgrid_spcs_nml")
set(STENEX "${CCTM_ROOT}/STENEX/noop")
set(UTIL "${CCTM_ROOT}/util/util")
set(VDIFF "${CCTM_ROOT}/vdiff/acm2")
set(localCCTM "src/model/src")
list(APPEND aqm_CCTM_files
${AERO}/AERO_DATA.F
${AERO}/aero_depv.F
${AERO}/aero_driver.F
${AERO}/AERO_EMIS.F
${AERO}/AEROMET_DATA.F
${AERO}/AEROSOL_CHEMISTRY.F
${AERO}/aero_subs.F
${AERO}/AOD_DEFN.F
${AERO}/coags.f
${AERO}/getpar.f
${AERO}/isocom.f
${AERO}/isofwd.f
${AERO}/isorev.f
${AERO}/isrpia.inc
${AERO}/opvis.F
${AERO}/opavis.F
${AERO}/oppmdiag.F
${AERO}/opapmdiag.F
${AERO}/PRECURSOR_DATA.F
${AERO}/PMDIAG_DATA.F
${AERO}/SOA_DEFN.F
${BIOG}/beis3.F
${BIOG}/checkmem.f
${BIOG}/czangle.F
${BIOG}/getparb.f
${BIOG}/hrno.F
${BIOG}/parsline.f
${BIOG}/tmpbeis.F
${BIOG}/wrdaymsg.f
${CLOUD}/hlconst.F
${DEPV}/ABFLUX_MOD.F
${DEPV}/BIDI_MOD.F
${DEPV}/cgrid_depv.F
${DEPV}/DEPV_DEFN.F
${DEPV}/DEPVVARS.F
${DEPV}/gas_depv_map.F
${DEPV}/HGSIM.F
${DEPV}/LSM_MOD.F
${DEPV}/MOSAIC_MOD.F
${DEPV}/opdepv_diag.F
${DEPV}/opdepv_mos.F
${DEPV}/opdepv_fst.F
${DEPV}/m3dry.F
${EMIS}/BEIS_DEFN.F
${EMIS}/BIOG_EMIS.F
${EMIS}/cropcal.F
${EMIS}/DUST_EMIS.F
${EMIS}/EMIS_DEFN.F
${EMIS}/LTNG_DEFN.F
${EMIS}/LUS_DEFN.F
${EMIS}/MGEMIS.F
${EMIS}/opemis.F
${EMIS}/PTBILIN.F
${EMIS}/SSEMIS.F
${EMIS}/STK_EMIS.F
${EMIS}/STK_PRMS.F
${EMIS}/tfabove.F
${EMIS}/tfbelow.F
${EMIS}/UDTYPES.F
${GAS}/degrade_data.F
${GAS}/degrade.F
${GAS}/DEGRADE_SETUP_TOX.F
${GAS}/final_degrade.F
${GAS}/find_degraded.F
${GAS}/hrdata_mod.F
${GAS}/hrdriver.F
${GAS}/hrg1.F
${GAS}/hrg2.F
${GAS}/hrg3.F
${GAS}/hrg4.F
${GAS}/hrinit.F
${GAS}/hrprodloss.F
${GAS}/hrrates.F
${GAS}/hrsolver.F
${GAS}/init_degrade.F
${GRID}/GRID_CONF.F
${GRID}/HGRD_DEFN.F
${GRID}/VGRD_DEFN.F
${GRID}/PAGRD_DEFN.F
${GRID}/PCGRID_DEFN.F
${ICL}/const/CONST.EXT
${ICL}/emctrl/EMISPRM.EXT
${ICL}/filenames/FILES_CTM.EXT
${ICL}/mpi/PE_COMM.EXT
${INIT}/initscen.F
${INIT}/load_cgrid.F
${MECHS}/RXNS_DATA_MODULE.F90
${MECHS}/RXNS_FUNC_MODULE.F90
${PA}/PA_DEFN.F
${PA}/pa_update.F
${PHOT}/AERO_PHOTDATA.F
${PHOT}/CLOUD_OPTICS.F
${PHOT}/complex_number_module.F90
${PHOT}/CSQY_DATA.F
${PHOT}/OMI_1979_to_2015.dat
${PHOT}/opphot.F
${PHOT}/phot.F
${PHOT}/PHOT_MET_DATA.F
${PHOT}/PHOT_MOD.F
${PHOT}/PHOTOLYSIS_ALBEDO.F
${PHOT}/PHOT_OPTICS.dat
${PHOT}/SEAS_STRAT_O3_MIN.F
${PHOT}/twoway_rrtmg_aero_optics.F90
${PLRISE}/delta_zs.f
${PLRISE}/fire_plmris.F
${PLRISE}/openlayout.F
${PLRISE}/oppt3d_diag.F
${PLRISE}/plmris.F
${PLRISE}/plsprd.f
${PLRISE}/preplm.f
${PLRISE}/ungridb2.f
${PLRISE}/write3_distr.f
${SPCS}/CGRID_SPCS.F
${STENEX}/noop_comm_module.f
${STENEX}/noop_data_copy_module.f
${STENEX}/noop_gather_module.f
${STENEX}/noop_global_max_module.f
${STENEX}/noop_global_min_module.f
${STENEX}/noop_global_sum_module.f
${STENEX}/noop_init_module.f
${STENEX}/noop_modules.f
${STENEX}/noop_slice_module.f
${STENEX}/noop_term_module.f
${STENEX}/noop_util_module.f
${UTIL}/bmatvec.F
${UTIL}/findex.f
${UTIL}/get_envlist.f
${UTIL}/setup_logdev.F
${UTIL}/subhdomain.F
${UTIL}/UTILIO_DEFN.F
${VDIFF}/aero_sedv.F
${VDIFF}/ASX_DATA_MOD.F
${VDIFF}/conv_cgrid.F
${VDIFF}/matrix1.F
${VDIFF}/opddep.F
${VDIFF}/opddep_fst.F
${VDIFF}/opddep_mos.F
${VDIFF}/rddepv.F
${VDIFF}/SEDIMENTATION.F
${VDIFF}/tri.F
${VDIFF}/VDIFF_DIAG.F
${VDIFF}/VDIFF_MAP.F
${VDIFF}/vdiffproc.F
${localCCTM}/o3totcol.f
${localCCTM}/vdiffacmx.F
${localCCTM}/PTMAP.F
${localCCTM}/PT3D_DEFN.F
)
Loading