-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathCMakeLists.meson
More file actions
76 lines (60 loc) · 3.14 KB
/
Copy pathCMakeLists.meson
File metadata and controls
76 lines (60 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
cmake_minimum_required(VERSION 3.12)
# 3.9: MPI::MPI_Fortran 3.11 for FindLapack bug 3.12 for find_ROOT
project(gemini3d C Fortran) # MUST include C language for Intel / MKL to work
enable_testing()
if(NOT realbits)
set(realbits 64)
endif()
option(TRACE "dump variables to disk at certain locations in program" off)
option(USEGLOW "use NCAR GLOW instead of Fang")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules/)
include(${PROJECT_SOURCE_DIR}/cmake/compilers.cmake)
include(${PROJECT_SOURCE_DIR}/cmake/libraries.cmake)
include(${PROJECT_SOURCE_DIR}/cmake/mumps.cmake)
include(${PROJECT_SOURCE_DIR}/cmake/utils.cmake)
# --- pretests, to help catch missing libs
add_subdirectory(tests)
# --- vendor libraries
add_subdirectory(vendor/msis00)
# --- GEMINI
add_library(ionization ionization/ionization.f90 ionization/boundary_conditions/precipBCs_mod.f90)
target_link_libraries(ionization PRIVATE neutral calculus)
if(USEGLOW)
include(${PROJECT_SOURCE_DIR}/cmake/glow.cmake)
target_sources(ionization PRIVATE ionization/glow_run.f90)
target_link_libraries(ionization PRIVATE cglow)
target_include_directories(ionization PRIVATE ${ncarglow_BINARY_DIR})
else()
target_sources(ionization PRIVATE ionization/glow_dummy.f90)
endif(USEGLOW)
add_library(calculus numerical/constants/phys_consts.F90 numerical/calculus/calculus.f90 numerical/grid/grid.f90 numerical/mpimod/mpimod.F90 numerical/interpolation/interpolation.f90 vendor/lapack95/gbsv.F90)
target_link_libraries(calculus PRIVATE MPI::MPI_Fortran)
target_compile_definitions(calculus PRIVATE REALBITS=${realbits})
target_compile_options(calculus PRIVATE ${FFLAGS})
add_library(io io/io.F90 io/expanduser.f90)
target_link_libraries(io PRIVATE calculus)
target_compile_definitions(io PRIVATE TRACE=${TRACE})
target_compile_options(io PRIVATE ${FFLAGS})
add_library(neutral neutral/neutral.f90 temporal/timeutils.f90)
target_link_libraries(neutral PUBLIC msis calculus io MPI::MPI_Fortran)
target_compile_options(neutral PRIVATE ${FFLAGS})
# --- Main GEMINI executable
add_executable(gemini.bin gemini.f90
temporal/temporal.f90 numerical/potential/potential_comm_mumps.f90 numerical/potential/potential_mumps.F90 collisions/collisions.f90 numerical/potential/boundary_conditions/potentialBCs_mumps.f90 multifluid/multifluid.f90 sources/sources.f90 numerical/advection/advec_mpi.f90 numerical/diffusion/diffusion.F90)
target_link_libraries(gemini.bin PRIVATE io calculus ionization neutral
MPI::MPI_Fortran ${MUMPS_LIBRARIES} ${LAPACK_LIBRARIES})
target_include_directories(gemini.bin PRIVATE ${MUMPS_INCLUDE_DIRS})
target_compile_options(gemini.bin PRIVATE ${FFLAGS})
target_compile_definitions(gemini.bin PRIVATE REALBITS=${realbits})
#--------magnetic field calculation executable---------------
add_executable(magcalc.bin magcalc.f90)
target_link_libraries(magcalc.bin PRIVATE calculus neutral io)
target_compile_options(magcalc.bin PRIVATE ${FFLAGS})
# --- self-tests
if(USEGLOW)
include(${PROJECT_SOURCE_DIR}/cmake/test2d_glow.cmake)
include(${PROJECT_SOURCE_DIR}/cmake/test3d_glow.cmake)
else()
include(${PROJECT_SOURCE_DIR}/cmake/test2d.cmake)
include(${PROJECT_SOURCE_DIR}/cmake/test3d.cmake)
endif()