Skip to content

Commit 3948e71

Browse files
K20shoresclaudeCopilot
authored
Type erasure (#771)
* Implement type-erased MICM solvers with runtime CUDA loading This refactors the MICM wrapper to use type erasure for solver and state classes, enabling a uniform ABI regardless of CUDA availability. CUDA solvers are now loaded at runtime via dlopen/dlsym on Linux. Key changes: - Add IMicmSolver and IState interfaces for type erasure - Create CpuSolver/CpuState implementations using internal std::variant - Add CudaLoader singleton for runtime CUDA plugin loading - Create separate libmusica_cuda.so plugin with factory functions - Remove #ifdef MUSICA_ENABLE_CUDA from public headers - Simplify Python bindings to single _musica module - Update tests to use runtime CUDA detection with GTEST_SKIP Benefits: - Single libmusica.so works with or without CUDA - No ABI differences between CUDA and non-CUDA builds - Single Python wheel can optionally use CUDA at runtime - Reduced recompilation needed for different build variants Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Refactor CMake to use target_sources and link Python against musica - Replace source variable collection with direct target_sources() calls - Python module now links against musica library instead of compiling all sources directly - Remove unused MODE parameter from musica_setup_target function - Remove MUSICA_ONLY_PYTHON option (musica library always built) This simplifies the build and ensures Python bindings use the same compiled library as C/C++ users. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Inline musica_setup_target into src/CMakeLists.txt Move the musica target configuration directly into src/CMakeLists.txt and remove the now-unused setup_musica_target.cmake file. This simplifies the build system by keeping all musica library configuration in one place. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Remove musica_cuda_abi_version function The ABI version checking is not necessary for the CUDA plugin. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * removing unused options, simplifying cmake * Add prebuilt musica support for faster Python wheel builds On Linux, the musica library is now prebuilt once during cibuildwheel's before-all hook, then reused for all Python version builds. This avoids rebuilding the C++/Fortran code 5 times (once per Python version). Changes: - Add MUSICA_USE_PREBUILT CMake option to use find_package(musica) - Update dependencies.cmake to skip fetching deps when using prebuilt - Update prepare_build_environment_linux.sh to prebuild musica - Update pyproject.toml with Linux override for prebuilt - Update repair_wheel_gpu.sh for new CUDA plugin architecture - Update python/bindings/CMakeLists.txt for prebuilt CUDA plugin Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add prebuilt musica support for Windows and macOS wheel builds Extends the prebuilt library optimization (previously Linux-only) to Windows and macOS. The C++/Fortran code is now compiled once per platform in the before-all hook, then reused for all Python versions. - Update prepare_build_environment_macos.sh to prebuild musica - Add prepare_build_environment_windows.sh for MSYS2 environment - Configure scikit-build to use prebuilt libraries on all platforms Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix prebuilt musica dependencies for CARMA When using a prebuilt musica library with CARMA enabled, the exported targets reference BLAS::BLAS and LAPACK::LAPACK. The musicaConfig.cmake must find these dependencies before loading the exported targets. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Hide yaml-cpp from public API using opaque pointer Refactor Configuration struct to use void* instead of YAML::Node* to hide yaml-cpp as an implementation detail. This removes yaml-cpp from the public header, eliminating the need to expose it as a dependency when using prebuilt musica libraries. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * using different mech config hash * applyig MUSICA_USE_PREBUILT only for cibuildwheel * temporarily disable cli tests * correcting javascript bindings, enabling carma? * not building carma on windows arm * adding build shared libs option * bundling sources * correcting wheel repair * Fix macOS wheel delocate by bundling dylib files The install_prebuilt_so function only handled .so files (Linux), missing macOS .dylib files. Added platform-specific handling and a custom repair script that ensures dylibs are bundled before delocate runs. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix Windows duplicate symbol error by building yaml-cpp as shared lib When MUSICA_BUILD_SHARED_LIBS=ON, yaml-cpp is now also built as shared to prevent duplicate symbols. mechanism_configuration links yaml-cpp as PUBLIC, so when it was a DLL with yaml-cpp statically linked, musica would see duplicate symbols from both libyaml-cpp.a and the DLL. Also added Windows DLL support to install_prebuilt_libs and updated the Windows repair script to include prebuilt and clangarm64 paths. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * trying to fix yaml links * attempting to fix wheel and cmake build errors * installing libraries when not prebuilt * logging * removing python build from linux runner * removing python builds from other tests * micm conditions correction * Fix Windows wheel repair by installing DLLs to bin/ Add RUNTIME DESTINATION to CMake install rules so that .dll files are installed alongside import libraries on Windows. Without this, only .dll.a files were installed to lib/ and delvewheel could not find the actual DLLs needed for wheel repair. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * correcing nvidia dockerfile * Fix CudaLoader thread safety with std::call_once (#777) * Initial plan * Implement thread-safe CudaLoader using std::call_once Co-authored-by: K20shores <13836216+K20shores@users.noreply.github.com> * Make LoadLibrary() const to eliminate const_cast Co-authored-by: K20shores <13836216+K20shores@users.noreply.github.com> * bumping mech config tag * adding const --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: K20shores <13836216+K20shores@users.noreply.github.com> Co-authored-by: Kyle Shores <kyle.shores44@gmail.com> * Fix ODR violation in CUDA plugin by separating header from implementation (#779) * Initial plan * Fix ODR violation by separating CUDA solver header from implementation Co-authored-by: K20shores <13836216+K20shores@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: K20shores <13836216+K20shores@users.noreply.github.com> * pr comments, updating micm api * micm commit * correcting map type * removing log * bumping micm tag, not saving animation in CI --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: K20shores <13836216+K20shores@users.noreply.github.com>
1 parent 3d8f7a6 commit 3948e71

56 files changed

Lines changed: 2046 additions & 703 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/mac.yml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,12 @@ jobs:
3838
- name: Install dependencies
3939
run: brew install netcdf netcdf-fortran
4040

41-
- uses: actions/setup-python@v5
42-
- run: pip install numpy --user
43-
4441
- name: Run Cmake
4542
run: |
46-
PYTHON_PATH=$(which python)
4743
cmake -S . -B build \
4844
-D CMAKE_CXX_FLAGS=-Wl,-ld_classic \
4945
-D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
50-
-D MUSICA_GIT_TAG=${{ github.sha }} \
51-
-D MUSICA_ENABLE_PYTHON_LIBRARY=ON \
52-
-D Python3_EXECUTABLE=$PYTHON_PATH
46+
-D MUSICA_GIT_TAG=${{ github.sha }}
5347
5448
- name: Build
5549
run: cmake --build build --verbose

.github/workflows/ubuntu.yml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@ jobs:
2121
- { cpp: g++-13, c: gcc-13, fc: gfortran-13}
2222
- { cpp: g++-14, c: gcc-14, fc: gfortran-14}
2323
- { cpp: clang++, c: clang, fc: gfortran-12}
24-
options:
25-
- {micm: ON, tuvx: OFF, carma: OFF, python: ON}
26-
- {micm: OFF, tuvx: ON, carma: OFF, python: OFF}
2724
build_type: [Release]
2825
env:
2926
CC: ${{ matrix.compiler.c }}
@@ -37,16 +34,11 @@ jobs:
3734
run: |
3835
sudo apt-get update
3936
sudo apt-get install -y liblapack-dev libblas-dev build-essential libnetcdf-dev libnetcdff-dev
40-
sudo apt-get install -y python3-numpy
4137
4238
- name: Run Cmake
4339
run: |
4440
cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
4541
-D MUSICA_GIT_TAG=${{ github.sha }} \
46-
-D MUSICA_ENABLE_MICM=${{ matrix.options.micm }} \
47-
-D MUSICA_ENABLE_TUVX=${{ matrix.options.tuvx }} \
48-
-D MUSICA_ENABLE_CARMA=${{ matrix.options.carma }} \
49-
-D MUSICA_ENABLE_PYTHON_LIBRARY=${{ matrix.options.python }} \
5042
-D CMAKE_POLICY_VERSION_MINIMUM=3.5
5143
5244
- name: Build

.github/workflows/windows.yml

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,8 @@ jobs:
2323
steps:
2424
- uses: actions/checkout@v4
2525

26-
- name: Set up Python
27-
uses: actions/setup-python@v5
28-
if: ${{ matrix.architecture == 'Win32' }}
29-
with:
30-
python-version: '3.x'
31-
architecture: x86
32-
3326
- name: Run CMake
34-
run: cmake -S . -B build -A ${{ matrix.architecture }} -D MUSICA_GIT_TAG=${{ github.sha }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_CARMA=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
27+
run: cmake -S . -B build -A ${{ matrix.architecture }} -D MUSICA_GIT_TAG=${{ github.sha }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_CARMA=OFF -D CMAKE_POLICY_VERSION_MINIMUM=3.5
3528

3629
- name: Build
3730
run: cmake --build build --config ${{ matrix.build_type }} --parallel
@@ -53,7 +46,7 @@ jobs:
5346
run: curl -fsSL -o LLVM${{ matrix.version }}.exe https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.version }}/LLVM-${{ matrix.version }}-win64.exe ; 7z x LLVM${{ matrix.version }}.exe -y -o"C:/Program Files/LLVM"
5447

5548
- name: Run CMake
56-
run: cmake -S . -B build -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang++.exe" -DCMAKE_C_COMPILER="C:/Program Files/LLVM/bin/clang.exe" -G"MinGW Makefiles" -D MUSICA_GIT_TAG=${{ github.sha }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_CARMA=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
49+
run: cmake -S . -B build -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang++.exe" -DCMAKE_C_COMPILER="C:/Program Files/LLVM/bin/clang.exe" -G"MinGW Makefiles" -D MUSICA_GIT_TAG=${{ github.sha }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_CARMA=OFF -D CMAKE_POLICY_VERSION_MINIMUM=3.5
5750

5851
- name: Build
5952
run: cmake --build build --parallel
@@ -71,15 +64,8 @@ jobs:
7164
steps:
7265
- uses: actions/checkout@v4
7366

74-
- name: Set up Python
75-
uses: actions/setup-python@v4
76-
if: ${{ matrix.architecture == 'Win32' }}
77-
with:
78-
python-version: '3.x'
79-
architecture: x86
80-
8167
- name: Run CMake
82-
run: cmake -S . -B build -A ${{ matrix.architecture }} -T ClangCL -D MUSICA_GIT_TAG=${{ github.sha }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_CARMA=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
68+
run: cmake -S . -B build -A ${{ matrix.architecture }} -T ClangCL -D MUSICA_GIT_TAG=${{ github.sha }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_CARMA=OFF -D CMAKE_POLICY_VERSION_MINIMUM=3.5
8369

8470
- name: Build
8571
run: cmake --build build --config Debug --parallel
@@ -96,10 +82,6 @@ jobs:
9682
strategy:
9783
fail-fast: false
9884
matrix:
99-
# for some reason the debug build fails with an error in the python library
100-
# something about the usage of mechanism configuration and variants causes missing type information
101-
# This commit for mechanism configuration works: 903150064277e024b0afcfc879df419e1cefc87b
102-
# This one doesn't: a3ef728c69f619f80c272d634bc2a17ca5ab4de9
10385
build_type: [Release]
10486

10587
steps:
@@ -122,7 +104,6 @@ jobs:
122104
-D MUSICA_ENABLE_MICM=ON \
123105
-D MUSICA_ENABLE_TUVX=OFF \
124106
-D MUSICA_ENABLE_CARMA=ON \
125-
-D MUSICA_ENABLE_PYTHON_LIBRARY=ON \
126107
-D MUSICA_BUILD_FORTRAN_INTERFACE=ON \
127108
-D CMAKE_POLICY_VERSION_MINIMUM=3.5
128109

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,5 @@ javascript/wasm/musica.wasm
4545
# Julia build artifacts
4646
julia/Manifest.toml
4747
julia/deps/lib/
48+
49+
.claude

CMakeLists.txt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ option(MUSICA_BUILD_DOCS "Build the documentation" OFF)
3030
option(MUSICA_ENABLE_MICM "Enable MICM" ON)
3131
option(MUSICA_ENABLE_TUVX "Enable TUV-x" ON)
3232
option(MUSICA_ENABLE_CARMA "Enable CARMA" ON)
33-
option(MUSICA_ENABLE_PIC "Build the library with position independent code" OFF)
3433
option(MUSICA_ENABLE_COVERAGE "Enable code coverage output" OFF)
3534
option(MUSICA_BUNDLE_DEPENDENCIES "Bundle dependencies with the library" ON)
3635
option(MUSICA_ENABLE_JAVASCRIPT "Build the JavaScript addon" OFF)
3736
option(MUSICA_ENABLE_JULIA "Build the Julia wrapper" OFF)
3837
option(MUSICA_CREATE_ENVIRONMENT_MODULE "Create an Lmod environment module file" OFF)
38+
option(MUSICA_USE_PREBUILT "Use a prebuilt musica library instead of building from source" OFF)
39+
option(MUSICA_BUILD_SHARED_LIBS "Build MUSICA as shared libraries" OFF)
3940

4041
set(MUSICA_GPU_TYPE "None" CACHE STRING "The GPU type being targeted")
4142

@@ -44,9 +45,6 @@ set(MUSICA_SET_MICM_DEFAULT_VECTOR_SIZE "4" CACHE STRING "Set MICM vector-ordere
4445
cmake_dependent_option(
4546
MUSICA_ENABLE_PYTHON_LIBRARY "Adds pybind11, a lightweight header-only library that exposes C++ types in Python and vice versa" OFF "MUSICA_BUILD_C_CXX_INTERFACE" OFF)
4647

47-
cmake_dependent_option(
48-
MUSICA_ONLY_PYTHON "Build only the Python bindings. This option is used when building Python wheels primarily" OFF "MUSICA_ENABLE_PYTHON_LIBRARY" OFF)
49-
5048
################################################################################
5149
# Projet wide setup variables
5250
set(MUSICA_INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
@@ -116,7 +114,13 @@ endif()
116114
################################################################################
117115
# MUSICA
118116
if(MUSICA_BUILD_C_CXX_INTERFACE)
119-
add_subdirectory(src)
117+
if(MUSICA_USE_PREBUILT)
118+
# Use prebuilt musica library - useful for faster Python wheel builds
119+
find_package(musica REQUIRED)
120+
message(STATUS "Using prebuilt musica library")
121+
else()
122+
add_subdirectory(src)
123+
endif()
120124
endif()
121125

122126
if(MUSICA_BUILD_DOCS)

cmake/dependencies.cmake

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ endif()
2222

2323
################################################################################
2424
# Mechanism Configuration
25+
# Skip if using prebuilt musica (already includes mechanism_configuration)
2526

26-
if(MUSICA_BUILD_C_CXX_INTERFACE)
27+
if(MUSICA_BUILD_C_CXX_INTERFACE AND NOT MUSICA_USE_PREBUILT)
2728
set_git_default(MECH_CONFIG_GIT_REPOSITORY https://github.com/NCAR/MechanismConfiguration.git)
28-
set_git_default(MECH_CONFIG_GIT_TAG v1.1.1)
29+
set_git_default(MECH_CONFIG_GIT_TAG fcf550e5b3e97cb13d93a382cd4230578eb923f0)
2930

3031
FetchContent_Declare(mechanism_configuration
3132
GIT_REPOSITORY ${MECH_CONFIG_GIT_REPOSITORY}
@@ -34,12 +35,8 @@ if(MUSICA_BUILD_C_CXX_INTERFACE)
3435
FIND_PACKAGE_ARGS NAMES mechanism_configuration
3536
)
3637

37-
set(MECH_CONFIG_ENABLE_PYTHON_LIBRARY OFF CACHE BOOL "" FORCE)
3838
set(MECH_CONFIG_ENABLE_TESTS OFF CACHE BOOL "" FORCE)
39-
40-
if (MUSICA_ENABLE_PYTHON_LIBRARY OR MUSICA_ENABLE_PIC)
41-
set(MECH_CONFIG_ENABLE_PIC ON CACHE BOOL "" FORCE)
42-
endif()
39+
set(MECH_CONFIG_BUILD_SHARED_LIBS ${MUSICA_BUILD_SHARED_LIBS} CACHE BOOL "" FORCE)
4340

4441
FetchContent_MakeAvailable(mechanism_configuration)
4542
endif()
@@ -72,10 +69,11 @@ endif()
7269

7370
################################################################################
7471
# MICM
72+
# Skip if using prebuilt musica (already includes micm)
7573

76-
if (MUSICA_ENABLE_MICM AND MUSICA_BUILD_C_CXX_INTERFACE)
74+
if (MUSICA_ENABLE_MICM AND MUSICA_BUILD_C_CXX_INTERFACE AND NOT MUSICA_USE_PREBUILT)
7775
set_git_default(MICM_GIT_REPOSITORY https://github.com/NCAR/micm.git)
78-
set_git_default(MICM_GIT_TAG v3.11.0)
76+
set_git_default(MICM_GIT_TAG e854d2cf4d0abc7c6fb243e5406e751c462f3679)
7977

8078
FetchContent_Declare(micm
8179
GIT_REPOSITORY ${MICM_GIT_REPOSITORY}
@@ -87,6 +85,7 @@ if (MUSICA_ENABLE_MICM AND MUSICA_BUILD_C_CXX_INTERFACE)
8785
set(MICM_ENABLE_TESTS OFF)
8886
set(MICM_ENABLE_EXAMPLES OFF)
8987
set(MICM_DEFAULT_VECTOR_SIZE ${MUSICA_SET_MICM_DEFAULT_VECTOR_SIZE})
88+
set(MICM_BUILD_SHARED_LIBS ${MUSICA_BUILD_SHARED_LIBS} CACHE BOOL "" FORCE)
9089
if(NOT APPLE)
9190
set(MICM_GPU_TYPE ${MUSICA_GPU_TYPE})
9291
endif()
@@ -96,8 +95,9 @@ endif()
9695

9796
################################################################################
9897
# TUV-x
98+
# Skip if using prebuilt musica (already includes tuvx)
9999

100-
if (MUSICA_ENABLE_TUVX AND MUSICA_BUILD_C_CXX_INTERFACE)
100+
if (MUSICA_ENABLE_TUVX AND MUSICA_BUILD_C_CXX_INTERFACE AND NOT MUSICA_USE_PREBUILT)
101101
set(TUVX_ENABLE_TESTS OFF CACHE BOOL "" FORCE)
102102
set(TUVX_MOD_DIR ${MUSICA_MOD_DIR} CACHE STRING "" FORCE)
103103
set(TUVX_INSTALL_MOD_DIR ${MUSICA_INSTALL_MOD_DIR} CACHE STRING "" FORCE)
@@ -123,13 +123,20 @@ endif()
123123

124124
################################################################################
125125
# CARMA
126-
if(MUSICA_ENABLE_CARMA AND MUSICA_BUILD_C_CXX_INTERFACE)
126+
# Skip if using prebuilt musica (already includes carma)
127+
128+
if(MUSICA_ENABLE_CARMA AND MUSICA_BUILD_C_CXX_INTERFACE AND NOT MUSICA_USE_PREBUILT)
127129
set_git_default(CARMA_GIT_REPOSITORY https://github.com/NCAR/CARMA-ACOM-dev.git)
128130
set_git_default(CARMA_GIT_TAG develop-carma-box)
131+
129132
set(CARMA_MOD_DIR ${MUSICA_MOD_DIR} CACHE STRING "" FORCE)
130133
set(CARMA_INSTALL_MOD_DIR ${MUSICA_INSTALL_MOD_DIR} CACHE STRING "" FORCE)
131134
set(CARMA_INSTALL_INCLUDE_DIR ${MUSICA_INSTALL_INCLUDE_DIR} CACHE STRING "" FORCE)
132135

136+
# CARMA needs these
137+
find_package(BLAS REQUIRED)
138+
find_package(LAPACK REQUIRED)
139+
133140
FetchContent_Declare(carma
134141
GIT_REPOSITORY ${CARMA_GIT_REPOSITORY}
135142
GIT_TAG ${CARMA_GIT_TAG}

cmake/musicaConfig.cmake.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ if("@MUSICA_ENABLE_TUVX@" STREQUAL "ON" OR "@MUSICA_ENABLE_CARMA@" STREQUAL "ON"
88
pkg_check_modules(netcdff IMPORTED_TARGET REQUIRED netcdf-fortran)
99
endif()
1010

11+
if("@MUSICA_ENABLE_CARMA@" STREQUAL "ON")
12+
find_dependency(BLAS)
13+
find_dependency(LAPACK)
14+
endif()
15+
1116
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@_Exports.cmake")
1217

1318
check_required_components("@PROJECT_NAME@")

cmake/setup_musica_target.cmake

Lines changed: 0 additions & 97 deletions
This file was deleted.

docker/Dockerfile.nvhpc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ RUN cd musica \
4242
-D MUSICA_ENABLE_INSTALL=OFF \
4343
-D MUSICA_ENABLE_TUVX=OFF \
4444
-D MUSICA_ENABLE_CARMA=OFF \
45+
-D MUSICA_BUILD_SHARED_LIBS=ON \
4546
-D MUSICA_SET_MICM_DEFAULT_VECTOR_SIZE=1 \
4647
&& cd build \
47-
&& make -j 2
48+
&& make

fortran/micm/state.F90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ end subroutine get_user_defined_rate_parameters_strides_c
117117
real(c_double) :: temperature
118118
real(c_double) :: pressure
119119
real(c_double) :: air_density
120+
real(c_double) :: pH
120121
end type conditions_t
121122

122123
type :: strides_t

0 commit comments

Comments
 (0)