@@ -15,6 +15,9 @@ set(CMAKE_CXX_EXTENSIONS OFF)
1515
1616if (CMAKE_Fortran_COMPILER_ID STREQUAL GNU)
1717 add_compile_options ($<$<COMPILE_LANGUAGE:Fortran>:-fimplicit-none>)
18+ add_compile_options ($<$<COMPILE_LANGUAGE:Fortran>:-ffree-line-length -none>)
19+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58175
20+ add_compile_options ($<$<COMPILE_LANGUAGE:Fortran>:-Wno-surprising>)
1821endif ()
1922
2023macro (add_prefix prefix rootlist)
@@ -25,6 +28,11 @@ macro(add_prefix prefix rootlist)
2528 set (${rootlist} ${outlist} )
2629endmacro (add_prefix)
2730
31+ add_definitions ("-DSuiteSparse_long=long" )
32+ add_definitions ("-DSuiteSparse_long_max=LONG_MAX" )
33+ add_definitions ("-DSuiteSparse_long_idd=ld" )
34+ add_definitions ("-DSUNDIALS_INT64_T=1" )
35+
2836### sources ########################################################################################
2937
3038set (PyPartMC_sources
@@ -34,6 +42,87 @@ set(PyPartMC_sources
3442)
3543add_prefix(src/ PyPartMC_sources)
3644
45+ set (camp_SOURCES
46+ Jacobian.c
47+ aero_phase_data.F90
48+ aero_phase_solver.c
49+ aero_rep_data.F90
50+ aero_rep_solver.c
51+ aero_rep_factory.F90
52+ camp_core.F90
53+ camp_solver_data.F90
54+ camp_solver.c
55+ camp_state.F90
56+ chem_spec_data.F90
57+ constants.F90
58+ debug_diff_check.F90
59+ env_state.F90
60+ mechanism_data.F90
61+ mpi.F90
62+ property.F90
63+ rand.F90
64+ rxn_data.F90
65+ rxn_factory.F90
66+ rxn_solver.c
67+ solver_stats.F90
68+ sub_model_data.F90
69+ sub_model_solver.c
70+ sub_model_factory.F90
71+ time_derivative.c
72+ util.F90
73+ aero_reps/aero_rep_modal_binned_mass.F90
74+ aero_reps/aero_rep_single_particle.F90
75+ aero_reps/aero_rep_modal_binned_mass.c
76+ aero_reps/aero_rep_single_particle.c
77+ rxns/rxn_aqueous_equilibrium.c
78+ rxns/rxn_aqueous_equilibrium.F90
79+ rxns/rxn_ternary_chemical_activation.c
80+ rxns/rxn_ternary_chemical_activation.F90
81+ rxns/rxn_arrhenius.c
82+ rxns/rxn_arrhenius.F90
83+ rxns/rxn_CMAQ_H2O2.c
84+ rxns/rxn_CMAQ_H2O2.F90
85+ rxns/rxn_CMAQ_OH_HNO3.c
86+ rxns/rxn_CMAQ_OH_HNO3.F90
87+ rxns/rxn_condensed_phase_arrhenius.c
88+ rxns/rxn_condensed_phase_arrhenius.F90
89+ rxns/rxn_emission.c
90+ rxns/rxn_emission.F90
91+ rxns/rxn_first_order_loss.c
92+ rxns/rxn_first_order_loss.F90
93+ rxns/rxn_HL_phase_transfer.c
94+ rxns/rxn_HL_phase_transfer.F90
95+ rxns/rxn_photolysis.c
96+ rxns/rxn_photolysis.F90
97+ rxns/rxn_SIMPOL_phase_transfer.c
98+ rxns/rxn_SIMPOL_phase_transfer.F90
99+ rxns/rxn_troe.c
100+ rxns/rxn_troe.F90
101+ rxns/rxn_wennberg_no_ro2.c
102+ rxns/rxn_wennberg_no_ro2.F90
103+ rxns/rxn_wennberg_tunneling.c
104+ rxns/rxn_wennberg_tunneling.F90
105+ rxns/rxn_wet_deposition.c
106+ rxns/rxn_wet_deposition.F90
107+ sub_models/sub_model_PDFiTE.c
108+ sub_models/sub_model_PDFiTE.F90
109+ sub_models/sub_model_UNIFAC.c
110+ sub_models/sub_model_UNIFAC.F90
111+ sub_models/sub_model_ZSR_aerosol_water.F90
112+ sub_models/sub_model_ZSR_aerosol_water.c
113+ )
114+ add_prefix(gitmodules/camp/src/ camp_SOURCES)
115+
116+ set (json_fortran_SOURCES
117+ json_kinds.F90
118+ json_parameters.F90
119+ json_string_utilities.F90
120+ json_value_module.F90
121+ json_file_module.F90
122+ json_module.F90
123+ )
124+ add_prefix(gitmodules/json-fortran/src/ json_fortran_SOURCES)
125+
37126set (partmclib_SOURCES condense_solver.c aero_state.F90 integer_varray.F90 integer_rmap.F90
38127 integer_rmap2.F90 aero_sorted.F90 aero_binned.F90 bin_grid.F90 constants.F90 scenario.F90
39128 env_state.F90 aero_mode.F90 aero_dist.F90 aero_weight.F90 aero_weight_array.F90
@@ -48,6 +137,60 @@ set(partmclib_SOURCES condense_solver.c aero_state.F90 integer_varray.F90 intege
48137add_prefix(gitmodules/partmc/src/ partmclib_SOURCES)
49138list (APPEND partmclib_SOURCES src/fake_mpi.F90 src/fake_netcdf.F90 src/fake_spec_file.F90)
50139
140+ set (klu_SOURCES
141+ KLU/Source /klu_analyze.c
142+ KLU/Source /klu_memory.c
143+ KLU/Source /klu_tsolve.c
144+ KLU/Source /klu_solve.c
145+ KLU/Source /klu.c
146+ KLU/Source /klu_kernel.c
147+ KLU/Source /klu_defaults.c
148+ KLU/Source /klu_dump.c
149+ KLU/Source /klu_factor.c
150+ KLU/Source /klu_free_numeric.c
151+ KLU/Source /klu_free_symbolic.c
152+ KLU/Source /klu_scale.c
153+ KLU/Source /klu_refactor.c
154+ KLU/Source /klu_diagnostics.c
155+ KLU/Source /klu_sort.c
156+ KLU/Source /klu_extract.c
157+ KLU/Source /klu_analyze_given.c
158+ COLAMD/Source /colamd.c
159+ SuiteSparse_config/SuiteSparse_config.c
160+ AMD/Source /amd_aat.c
161+ AMD/Source /amd_1.c
162+ AMD/Source /amd_2.c
163+ AMD/Source /amd_dump.c
164+ AMD/Source /amd_postorder.c
165+ AMD/Source /amd_defaults.c
166+ AMD/Source /amd_post_tree.c
167+ AMD/Source /amd_order.c
168+ AMD/Source /amd_control.c
169+ AMD/Source /amd_info.c
170+ AMD/Source /amd_valid.c
171+ AMD/Source /amd_preprocess.c
172+ BTF/Source /btf_order.c
173+ BTF/Source /btf_maxtrans.c
174+ BTF/Source /btf_strongcomp.c
175+ )
176+ add_prefix(gitmodules/SuiteSparse/ klu_SOURCES)
177+
178+ set (KLU_INCLUDE_DIRS
179+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/KLU/Include
180+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/AMD/Include
181+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/SuiteSparse_config
182+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/COLAMD/Include
183+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/BTF/Include
184+ )
185+
186+ ### KLU ############################################################################################
187+
188+ add_library (klulib STATIC
189+ ${klu_SOURCES}
190+ )
191+ target_compile_definitions (klulib PRIVATE DLONG="1" )
192+ target_include_directories (klulib PRIVATE ${KLU_INCLUDE_DIRS} )
193+
51194### SUNDIALS #######################################################################################
52195
53196set (SUNDIALS_SOURCE_DIR "${CMAKE_SOURCE_DIR} /gitmodules/sundials" )
@@ -67,9 +210,12 @@ macro(sundials_add_library target)
67210 )
68211 add_library (${target} STATIC ${sundials_add_library_SOURCES} )
69212 target_compile_definitions (${target} PRIVATE SUNDIALS_STATIC_DEFINE)
70- target_include_directories (${target} PRIVATE ${SUNDIALS_SOURCE_DIR} /src/sundials)
71- target_include_directories (${target} PRIVATE ${SUNDIALS_SOURCE_DIR} /include )
72- target_include_directories (${target} PRIVATE ${CMAKE_BINARY_DIR} /include )
213+ target_include_directories (${target} PRIVATE
214+ ${SUNDIALS_SOURCE_DIR} /src/sundials
215+ ${SUNDIALS_SOURCE_DIR} /include
216+ ${KLU_INCLUDE_DIRS}
217+ ${CMAKE_BINARY_DIR} /include
218+ )
73219endmacro ()
74220
75221function (print_error)
@@ -91,30 +237,49 @@ scoped_sundials_setup_config()
91237set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${SUNDIALS_SOURCE_DIR} /cmake)
92238include (${SUNDIALS_SOURCE_DIR} /cmake/SundialsSetupCompilers.cmake)
93239
94- foreach (item cvode;sunmatrix;sunlinsol;sunnonlinsol;nvector;sundials)
95- add_subdirectory (${SUNDIALS_SOURCE_DIR} /src/${item} )
240+ foreach (item cvode;sunmatrix;sunlinsol;sunnonlinsol;nvector;sundials;sunlinsol/klu )
241+ add_subdirectory (${SUNDIALS_SOURCE_DIR} /src/${item} )
96242endforeach ()
97243
98244set (SUNDIALS_items
99- cvode nvecserial
245+ cvode
246+ nvecserial
100247 sunmatrixband
101248 sunmatrixdense
249+ sunmatrixsparse
102250 sunlinsolband
251+ sunlinsolklu
103252 sunnonlinsolnewton
104253 sunlinsolspgmr
105254 generic
106255)
107256add_prefix(sundials_ SUNDIALS_items)
108257
258+ ### CAMP ###########################################################################################
259+
260+ add_library (camplib STATIC ${camp_SOURCES} ${json_fortran_SOURCES} )
261+ target_compile_definitions (camplib PRIVATE CAMP_USE_JSON="1" )
262+ target_compile_definitions (camplib PRIVATE CAMP_USE_SUNDIALS="1" )
263+ target_include_directories (camplib PRIVATE
264+ ${KLU_INCLUDE_DIRS}
265+ ${SUNDIALS_SOURCE_DIR} /include
266+ ${CMAKE_BINARY_DIR} /include
267+ )
268+
109269### partmclib ######################################################################################
110270
111271add_library (partmclib STATIC ${partmclib_SOURCES} )
112272target_compile_definitions (partmclib PRIVATE PMC_USE_SUNDIALS="1" )
113273target_compile_definitions (partmclib PRIVATE PMC_USE_MPI="1" )
274+ target_compile_definitions (partmclib PRIVATE PMC_USE_CAMP="1" )
114275add_dependencies (partmclib ${SUNDIALS_items} )
115- target_include_directories (partmclib PRIVATE ${SUNDIALS_SOURCE_DIR} /include )
116- target_include_directories (partmclib PRIVATE ${CMAKE_BINARY_DIR} /include )
276+ target_include_directories (partmclib PRIVATE
277+ ${SUNDIALS_SOURCE_DIR} /include
278+ ${CMAKE_BINARY_DIR} /include
279+ )
280+ target_link_libraries (partmclib PRIVATE camplib)
117281target_link_libraries (partmclib PRIVATE ${SUNDIALS_items} )
282+ target_link_libraries (partmclib PRIVATE klulib)
118283
119284### PYBIND11 & PyPartMC ############################################################################
120285
@@ -142,7 +307,7 @@ foreach(target _PyPartMC)
142307 target_compile_options (${target} PRIVATE
143308 $<$<CXX_COMPILER_ID:MSVC >:/W4 /WX>
144309 $<$<NOT :$<CXX_COMPILER_ID:MSVC >>:-Wall -Wextra -Wpedantic -Werror>
145- $<$<NOT :$<CXX_COMPILER_ID:MSVC >>:-Wno-unused-parameter>
310+ $<$<NOT :$<CXX_COMPILER_ID:MSVC >>:-Wno-unused-parameter>
146311 )
147312endforeach ()
148313
0 commit comments