@@ -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