@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.20)
2
2
3
3
project (Microphysics
4
4
VERSION 1.0.0
5
- DESCRIPTION "building primordial_chemistry network in Microphysics with CMake"
5
+ DESCRIPTION "building primordial_chemistry or metal_chemistry networks in Microphysics with CMake"
6
6
LANGUAGES CXX C)
7
7
8
8
#----------------------------------------------------------------------------------------------------------------------
@@ -23,11 +23,11 @@ function(setup_target_for_microphysics_compilation network_name output_dir)
23
23
set (integrationparamfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /integration/_parameters" )
24
24
set (unittestparamfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /unit_test/_parameters" )
25
25
26
- set (networkpropfile "${output_dir} /network_properties.H" )
27
26
28
27
if (${network_name} STREQUAL "gamma_law" )
29
28
set (EOSparamfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /EOS/gamma_law/_parameters" )
30
29
30
+ set (networkpropfile "${output_dir} /network_properties.H" )
31
31
set (networkfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/gammalaw.net" )
32
32
set (networkdir "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/" )
33
33
set (networkheadertemplatefile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/network_header.template" )
@@ -44,6 +44,7 @@ function(setup_target_for_microphysics_compilation network_name output_dir)
44
44
set (gamma_law_sources ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /interfaces/eos_data.cpp
45
45
${CMAKE_CURRENT_FUNCTION_LIST_DIR} /interfaces/network_initialization.cpp
46
46
${output_dir} /extern_parameters.cpp PARENT_SCOPE)
47
+ execute_process (COMMAND python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/write_network.py" --header_template "${networkheadertemplatefile} " --header_output "${networkpropfile} " -s "${networkfile} " WORKING_DIRECTORY ${output_dir} /)
47
48
48
49
elseif (${network_name} STREQUAL "primordial_chem" )
49
50
#need these to write extern_parameters.H
@@ -52,6 +53,7 @@ function(setup_target_for_microphysics_compilation network_name output_dir)
52
53
set (networkpcparamfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/primordial_chem/_parameters" )
53
54
54
55
#similarly, we want network_properties.H
56
+ set (networkpropfile "${output_dir} /network_properties.H" )
55
57
set (networkfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/primordial_chem/pynucastro.net" )
56
58
set (networkdir "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/primordial_chem/" )
57
59
set (networkheadertemplatefile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/network_header.template" )
@@ -71,7 +73,7 @@ function(setup_target_for_microphysics_compilation network_name output_dir)
71
73
#so, if any of the _parameter files are changed, one needs to re-run 'cmake'
72
74
#to generate updated header files
73
75
74
- if (BUILD_UNIT_TEST )
76
+ if (BUILD_UNIT_TEST_PC )
75
77
execute_process (COMMAND python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /util/build_scripts/write_probin.py" --pa "${paramfile} ${EOSparamfile}
76
78
${networkpcparamfile} ${networkparamfile} ${VODEparamfile} ${integrationparamfile} ${unittestparamfile} " --use_namespace WORKING_DIRECTORY ${output_dir} /)
77
79
else ()
@@ -83,18 +85,67 @@ function(setup_target_for_microphysics_compilation network_name output_dir)
83
85
set (primordial_chem_sources ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /interfaces/eos_data.cpp
84
86
${CMAKE_CURRENT_FUNCTION_LIST_DIR} /interfaces/network_initialization.cpp
85
87
${CMAKE_CURRENT_FUNCTION_LIST_DIR} /EOS/primordial_chem/actual_eos_data.cpp
88
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/primordial_chem/actual_network_data.cpp
86
89
${output_dir} /extern_parameters.cpp PARENT_SCOPE)
87
90
88
91
89
92
#below for NAUX
90
93
execute_process (COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH} :${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null" python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/get_naux.py" --net "${networkdir} " --microphysics_path "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /" WORKING_DIRECTORY ${output_dir} /)
94
+ execute_process (COMMAND python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/write_network.py" --header_template "${networkheadertemplatefile} " --header_output "${networkpropfile} " -s "${networkfile} " WORKING_DIRECTORY ${output_dir} /)
95
+
96
+ elseif (${network_name} STREQUAL "metal_chem" )
97
+ #need these to write extern_parameters.H
98
+ set (paramfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /unit_test/burn_cell_metal_chem/_parameters" )
99
+ set (EOSparamfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /EOS/metal_chem/_parameters" )
100
+ set (networkmcparamfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/metal_chem/_parameters" )
101
+
102
+ #similarly, we want network_properties.H
103
+ set (networkpropfile "${output_dir} /network_properties.H" )
104
+ set (networkfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/metal_chem/pynucastro.net" )
105
+ set (networkdir "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/metal_chem/" )
106
+ set (networkheadertemplatefile "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/network_header.template" )
107
+
108
+ #DO NOT change the order of the directories below!
109
+ set (metal_chem_dirs ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /util ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /util/gcem/include
110
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /integration/VODE ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /integration/utils
111
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /integration ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /interfaces
112
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /EOS ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /EOS/metal_chem
113
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/metal_chem ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks
114
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /constants
115
+ PARENT_SCOPE)
116
+
117
+ #we need to have extern_parameters.cpp be available at configure time
118
+ #the script write_probin.py writes this .cpp file so we call it here
119
+ #note, execute_process only works on 'cmake' and not 'make'
120
+ #so, if any of the _parameter files are changed, one needs to re-run 'cmake'
121
+ #to generate updated header files
122
+
123
+ if (BUILD_UNIT_TEST_MC)
124
+ execute_process (COMMAND python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /util/build_scripts/write_probin.py" --pa "${paramfile} ${EOSparamfile}
125
+ ${networkmcparamfile} ${networkparamfile} ${VODEparamfile} ${integrationparamfile} ${unittestparamfile} " --use_namespace WORKING_DIRECTORY ${output_dir} /)
126
+ else ()
127
+ #do not need paramfile and unittestparamfile
128
+ execute_process (COMMAND python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /util/build_scripts/write_probin.py" --pa "${EOSparamfile} ${networkmcparamfile}
129
+ ${networkparamfile} ${VODEparamfile} ${integrationparamfile} " --use_namespace WORKING_DIRECTORY ${output_dir} /)
130
+ endif ()
131
+
132
+ #unlike primordial chem, we also include actual_network_data.cpp here because it is in there that we read in the Semenov opacity table
133
+ set (metal_chem_sources ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /interfaces/eos_data.cpp
134
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /interfaces/network_initialization.cpp
135
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /EOS/metal_chem/actual_eos_data.cpp
136
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/metal_chem/actual_network_data.cpp
137
+ ${output_dir} /extern_parameters.cpp PARENT_SCOPE)
138
+
139
+
140
+ #below for NAUX
141
+ execute_process (COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH} :${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null" python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/get_naux.py" --net "${networkdir} " --microphysics_path "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /" WORKING_DIRECTORY ${output_dir} /)
142
+ execute_process (COMMAND python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/write_network.py" --header_template "${networkheadertemplatefile} " --header_output "${networkpropfile} " -s "${networkfile} " WORKING_DIRECTORY ${output_dir} /)
91
143
92
144
else ()
93
- message (FATAL_ERROR "Given network_name " ${network_name} " currently not supported. Use either 'gamma_law' or 'primordial_chem' " )
145
+ message (FATAL_ERROR "Given network_name " ${network_name} " currently not supported. Use either 'gamma_law' or 'primordial_chem' or 'metal_chem' " )
94
146
95
147
endif ()
96
148
97
- execute_process (COMMAND python3 "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /networks/general_null/write_network.py" --header_template "${networkheadertemplatefile} " --header_output "${networkpropfile} " -s "${networkfile} " WORKING_DIRECTORY ${output_dir} /)
98
149
99
150
endfunction ()
100
151
@@ -126,8 +177,9 @@ endif()
126
177
127
178
#set a cache variable that controls whether
128
179
#we want to build the unit test or not
129
- set (BUILD_UNIT_TEST false CACHE BOOL "Do you want to build the unit test? (true/false)" )
130
- message ("Building unit test -- ${BUILD_UNIT_TEST} " )
180
+ set (BUILD_UNIT_TEST_PC false CACHE BOOL "Do you want to build the primordial chem unit test? (true/false)" )
181
+
182
+ set (BUILD_UNIT_TEST_MC false CACHE BOOL "Do you want to build the metal chem unit test? (true/false)" )
131
183
132
184
add_compile_options (-Werror -Wall -Wextra)
133
185
@@ -140,19 +192,28 @@ add_compile_options(-Werror -Wall -Wextra)
140
192
#this will generate a warning but it will build successfully
141
193
#do not need unit_test paramfiles when unit_test is not built
142
194
143
- if (BUILD_UNIT_TEST)
144
- setup_target_for_microphysics_compilation("primordial_chem" ${CMAKE_BINARY_DIR} )
195
+ if (BUILD_UNIT_TEST_PC AND BUILD_UNIT_TEST_MC)
196
+ message (FATAL_ERROR "Cannot build both primordial chem and metal chem tests at the same time!" )
197
+ endif ()
145
198
199
+ if (BUILD_UNIT_TEST_PC)
200
+ #Build primordial chem unit test
201
+ setup_target_for_microphysics_compilation("primordial_chem" ${CMAKE_BINARY_DIR} )
146
202
include_directories (${primordial_chem_dirs} )
147
203
148
- #adding unit_test as subdirectories
204
+ #adding unit_tests as subdirectories
149
205
add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /unit_test)
150
- message ("Building primordial chem unit test" )
151
206
152
- else ()
207
+ elseif (BUILD_UNIT_TEST_MC)
208
+ #Build metal chem unit test
209
+ setup_target_for_microphysics_compilation("metal_chem" ${CMAKE_BINARY_DIR} )
210
+ include_directories (${metal_chem_dirs} )
211
+
212
+ #adding unit_tests as subdirectories
213
+ add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /unit_test)
153
214
154
215
message ("Not building primordial chem unit test" )
155
216
endif ()
156
217
157
-
218
+ #Sample command: cmake .. -DBUILD_UNIT_TEST_MC=True -DBUILD_AMReX=True -DAMReX_SPACEDIM=1
158
219
0 commit comments