diff --git a/CMakeLists.txt b/CMakeLists.txt index 0013f0f..d4b50c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 $) +target_include_directories(shr PRIVATE $ + $ + $ + $ + $) +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 $) +target_include_directories(drv PRIVATE $ + $ + $ + $) +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 $) +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 $) +target_include_directories(ioapi PRIVATE $) +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 $) +target_include_directories(CCTM PRIVATE $ + $ + $ + $ + $ + $ + $) +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} $ + $ + $ + $ + $) +set_target_properties(aqm PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) +add_library(aqm::aqm ALIAS aqm) +target_include_directories(aqm PUBLIC $ + $) +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) diff --git a/aqm_files.cmake b/aqm_files.cmake new file mode 100644 index 0000000..c3f7420 --- /dev/null +++ b/aqm_files.cmake @@ -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 +) diff --git a/src/io/ioapi/PARMS3.EXT b/src/io/ioapi/PARMS3.EXT index e443353..ebb412c 100644 --- a/src/io/ioapi/PARMS3.EXT +++ b/src/io/ioapi/PARMS3.EXT @@ -101,8 +101,7 @@ INTEGER, PARAMETER :: M3INT8 = 10 ! variable type value "INTEGER*8" = nf_int64 INTEGER, PARAMETER :: NM3TYPES = 4 - INTEGER, PARAMETER :: M3TYPES( NM3TYPES ) = & - & (/ M3INT, M3REAL, M3DBLE, M3INT8 /) + INTEGER, PARAMETER :: M3TYPES( NM3TYPES ) = (/ M3INT, M3REAL, M3DBLE, M3INT8 /) !!...... File storage modes: