@@ -35,41 +35,86 @@ set(PyPartMC_sources
3535)
3636add_prefix(src/ PyPartMC_sources)
3737
38- set (camp_sources
39- util.F90 constants.F90 mpi.F90
38+ set (camp_SOURCES
39+ Jacobian.c
40+ aero_phase_data.F90
41+ aero_phase_solver.c
42+ aero_rep_data.F90
43+ aero_rep_solver.c
44+ aero_rep_factory.F90
45+ camp_core.F90
46+ camp_solver_data.F90
47+ camp_solver.c
48+ camp_state.F90
49+ chem_spec_data.F90
50+ constants.F90
51+ debug_diff_check.F90
4052 env_state.F90
53+ mechanism_data.F90
54+ mpi.F90
55+ property.F90
4156 rand.F90
42- property.F90 chem_spec_data.F90
43- rxn_data.F90 camp_state.F90 mechanism_data.F90
44- camp_core.F90 camp_solver_data.F90 aero_rep_data.F90
45- aero_phase_data.F90 aero_rep_factory.F90
46- rxn_factory.F90 sub_model_data.F90 sub_model_factory.F90
57+ rxn_data.F90
58+ rxn_factory.F90
59+ rxn_solver.c
4760 solver_stats.F90
48- debug_diff_check.F90
61+ sub_model_data.F90
62+ sub_model_solver.c
63+ sub_model_factory.F90
64+ time_derivative.c
65+ util.F90
4966 aero_reps/aero_rep_modal_binned_mass.F90
5067 aero_reps/aero_rep_single_particle.F90
5168 aero_reps/aero_rep_modal_binned_mass.c
5269 aero_reps/aero_rep_single_particle.c
70+ rxns/rxn_aqueous_equilibrium.c
5371 rxns/rxn_aqueous_equilibrium.F90
72+ rxns/rxn_ternary_chemical_activation.c
73+ rxns/rxn_ternary_chemical_activation.F90
74+ rxns/rxn_arrhenius.c
5475 rxns/rxn_arrhenius.F90
76+ rxns/rxn_CMAQ_H2O2.c
5577 rxns/rxn_CMAQ_H2O2.F90
78+ rxns/rxn_CMAQ_OH_HNO3.c
5679 rxns/rxn_CMAQ_OH_HNO3.F90
80+ rxns/rxn_condensed_phase_arrhenius.c
5781 rxns/rxn_condensed_phase_arrhenius.F90
82+ rxns/rxn_emission.c
5883 rxns/rxn_emission.F90
84+ rxns/rxn_first_order_loss.c
5985 rxns/rxn_first_order_loss.F90
86+ rxns/rxn_HL_phase_transfer.c
6087 rxns/rxn_HL_phase_transfer.F90
88+ rxns/rxn_photolysis.c
6189 rxns/rxn_photolysis.F90
90+ rxns/rxn_SIMPOL_phase_transfer.c
6291 rxns/rxn_SIMPOL_phase_transfer.F90
63- rxns/rxn_ternary_chemical_activation.F90
92+ rxns/rxn_troe.c
6493 rxns/rxn_troe.F90
94+ rxns/rxn_wennberg_no_ro2.c
6595 rxns/rxn_wennberg_no_ro2.F90
96+ rxns/rxn_wennberg_tunneling.c
6697 rxns/rxn_wennberg_tunneling.F90
98+ rxns/rxn_wet_deposition.c
6799 rxns/rxn_wet_deposition.F90
100+ sub_models/sub_model_PDFiTE.c
68101 sub_models/sub_model_PDFiTE.F90
102+ sub_models/sub_model_UNIFAC.c
69103 sub_models/sub_model_UNIFAC.F90
70104 sub_models/sub_model_ZSR_aerosol_water.F90
105+ sub_models/sub_model_ZSR_aerosol_water.c
71106)
72- add_prefix(gitmodules/camp/src/ camp_sources)
107+ add_prefix(gitmodules/camp/src/ camp_SOURCES)
108+
109+ set (json_fortran_SOURCES
110+ json_kinds.F90
111+ json_parameters.F90
112+ json_string_utilities.F90
113+ json_value_module.F90
114+ json_file_module.F90
115+ json_module.F90
116+ )
117+ add_prefix(gitmodules/json-fortran/src/ json_fortran_SOURCES)
73118
74119set (partmclib_SOURCES condense_solver.c aero_state.F90 integer_varray.F90 integer_rmap.F90
75120 integer_rmap2.F90 aero_sorted.F90 aero_binned.F90 bin_grid.F90 constants.F90 scenario.F90
@@ -84,7 +129,47 @@ set(partmclib_SOURCES condense_solver.c aero_state.F90 integer_varray.F90 intege
84129)
85130add_prefix(gitmodules/partmc/src/ partmclib_SOURCES)
86131list (APPEND partmclib_SOURCES src/fake_mpi.F90 src/fake_netcdf.F90 src/fake_spec_file.F90)
87- list (APPEND partmclib_SOURCES ${camp_sources} )
132+
133+ set (klu_SOURCES
134+ KLU/Source /klu_analyze.c
135+ KLU/Source /klu_memory.c
136+ KLU/Source /klu_tsolve.c
137+ KLU/Source /klu_solve.c
138+ KLU/Source /klu.c
139+ KLU/Source /klu_kernel.c
140+ KLU/Source /klu_dump.c
141+ KLU/Source /klu_factor.c
142+ KLU/Source /klu_free_numeric.c
143+ KLU/Source /klu_scale.c
144+ KLU/Source /klu_refactor.c
145+ KLU/Source /klu_diagnostics.c
146+ KLU/Source /klu_sort.c
147+ KLU/Source /klu_extract.c
148+ KLU/Source /klu_analyze_given.c
149+ COLAMD/Source /colamd.c
150+ SuiteSparse_config/SuiteSparse_config.c
151+ AMD/Source /amd_order.c
152+ BTF/Source /btf_order.c
153+ BTF/Source /btf_maxtrans.c
154+ BTF/Source /btf_strongcomp.c
155+ )
156+ add_prefix(gitmodules/SuiteSparse/ klu_SOURCES)
157+
158+ set (KLU_INCLUDE_DIRS
159+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/KLU/Include
160+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/AMD/Include
161+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/SuiteSparse_config
162+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/COLAMD/Include
163+ ${CMAKE_SOURCE_DIR} /gitmodules/SuiteSparse/BTF/Include
164+ )
165+
166+ ### KLU ############################################################################################
167+
168+ add_library (klulib STATIC
169+ ${klu_SOURCES}
170+ )
171+ target_compile_definitions (klulib PRIVATE DLONG="1" )
172+ target_include_directories (klulib PRIVATE ${KLU_INCLUDE_DIRS} )
88173
89174### SUNDIALS #######################################################################################
90175
@@ -105,9 +190,13 @@ macro(sundials_add_library target)
105190 )
106191 add_library (${target} STATIC ${sundials_add_library_SOURCES} )
107192 target_compile_definitions (${target} PRIVATE SUNDIALS_STATIC_DEFINE)
108- target_include_directories (${target} PRIVATE ${SUNDIALS_SOURCE_DIR} /src/sundials)
109- target_include_directories (${target} PRIVATE ${SUNDIALS_SOURCE_DIR} /include )
110- target_include_directories (${target} PRIVATE ${CMAKE_BINARY_DIR} /include )
193+ target_compile_definitions (${target} PRIVATE SUNDIALS_INT64_T="1" )
194+ target_include_directories (${target} PRIVATE
195+ ${SUNDIALS_SOURCE_DIR} /src/sundials
196+ ${SUNDIALS_SOURCE_DIR} /include
197+ ${KLU_INCLUDE_DIRS}
198+ ${CMAKE_BINARY_DIR} /include
199+ )
111200endmacro ()
112201
113202function (print_error)
@@ -129,31 +218,50 @@ scoped_sundials_setup_config()
129218set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${SUNDIALS_SOURCE_DIR} /cmake)
130219include (${SUNDIALS_SOURCE_DIR} /cmake/SundialsSetupCompilers.cmake)
131220
132- foreach (item cvode;sunmatrix;sunlinsol;sunnonlinsol;nvector;sundials)
133- add_subdirectory (${SUNDIALS_SOURCE_DIR} /src/${item} )
221+ foreach (item cvode;sunmatrix;sunlinsol;sunnonlinsol;nvector;sundials;sunlinsol/klu )
222+ add_subdirectory (${SUNDIALS_SOURCE_DIR} /src/${item} )
134223endforeach ()
135224
136225set (SUNDIALS_items
137- cvode nvecserial
226+ cvode
227+ nvecserial
138228 sunmatrixband
139229 sunmatrixdense
230+ sunmatrixsparse
140231 sunlinsolband
232+ sunlinsolklu
141233 sunnonlinsolnewton
142234 sunlinsolspgmr
143235 generic
144236)
145237add_prefix(sundials_ SUNDIALS_items)
146238
239+ ### CAMP ###########################################################################################
240+
241+ add_library (camplib STATIC ${camp_SOURCES} ${json_fortran_SOURCES} )
242+ target_compile_definitions (camplib PRIVATE CAMP_USE_JSON="1" )
243+ target_compile_definitions (camplib PRIVATE CAMP_USE_SUNDIALS="1" )
244+ target_compile_definitions (camplib PRIVATE SUNDIALS_INT64_T="1" )
245+ target_include_directories (camplib PRIVATE
246+ ${KLU_INCLUDE_DIRS}
247+ ${SUNDIALS_SOURCE_DIR} /include
248+ ${CMAKE_BINARY_DIR} /include
249+ )
250+
147251### partmclib ######################################################################################
148252
149253add_library (partmclib STATIC ${partmclib_SOURCES} )
150254target_compile_definitions (partmclib PRIVATE PMC_USE_SUNDIALS="1" )
151255target_compile_definitions (partmclib PRIVATE PMC_USE_MPI="1" )
152256target_compile_definitions (partmclib PRIVATE PMC_USE_CAMP="1" )
153257add_dependencies (partmclib ${SUNDIALS_items} )
154- target_include_directories (partmclib PRIVATE ${SUNDIALS_SOURCE_DIR} /include )
155- target_include_directories (partmclib PRIVATE ${CMAKE_BINARY_DIR} /include )
258+ target_include_directories (partmclib PRIVATE
259+ ${SUNDIALS_SOURCE_DIR} /include
260+ ${CMAKE_BINARY_DIR} /include
261+ )
156262target_link_libraries (partmclib PRIVATE ${SUNDIALS_items} )
263+ target_link_libraries (partmclib PRIVATE klulib)
264+ target_link_libraries (partmclib PRIVATE camplib)
157265
158266### PYBIND11 & PyPartMC ############################################################################
159267
0 commit comments