diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml new file mode 100644 index 00000000..7d92830f --- /dev/null +++ b/.github/workflows/mac.yml @@ -0,0 +1,36 @@ +name: Mac + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true + +jobs: + macos_lateset: + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + runs-on: macos-latest + strategy: + matrix: + compiler: + - { cpp: g++-11, c: gcc-11} + - { cpp: g++-12, c: gcc-12} + - { cpp: clang++, c: clang} + build_type: [Debug, Release] + env: + CC: ${{ matrix.compiler.c }} + CXX: ${{ matrix.compiler.cpp }} + + steps: + - uses: actions/checkout@v3 + + - name: Run Cmake + run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} + + - name: Build + run: cmake --build build --parallel 10 + + - name: Run tests + run: | + cd build + ctest -C ${{ matrix.build_type }} --rerun-failed --output-on-failure . --verbose -j 10 \ No newline at end of file diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml new file mode 100644 index 00000000..064f6afb --- /dev/null +++ b/.github/workflows/ubuntu.yml @@ -0,0 +1,32 @@ +name: Ubuntu + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true + +jobs: + gcc: + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + runs-on: ubuntu-latest + strategy: + matrix: + build_type: [Debug, Release] + env: + CC: gcc + CXX: g++ + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Run Cmake + run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} + + - name: Build + run: cmake --build build --parallel 10 + + - name: Run tests + run: | + cd build + ctest -C ${{ matrix.build_type }} --rerun-failed --output-on-failure . --verbose -j 10 \ No newline at end of file diff --git a/include/musica/micm.hpp b/include/musica/micm.hpp index 6f3c18ff..7d890a7e 100644 --- a/include/musica/micm.hpp +++ b/include/musica/micm.hpp @@ -6,6 +6,19 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + +void create_micm(void** micm); +void delete_micm(void** micm); +int micm_create_solver(void** micm, const char* config_path); +void micm_solve(void** micm, double time_step, double temperature, double pressure, int num_concentrations, + double* concentrations); + +#ifdef __cplusplus +} +#endif class MICM { diff --git a/include/musica/micm_c.h b/include/musica/micm_c.h deleted file mode 100644 index 3b92545a..00000000 --- a/include/musica/micm_c.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifdef __cplusplus -extern "C" { -#endif - -void create_micm(void** micm); -void delete_micm(void** micm); -int micm_create_solver(void** micm, const char* config_path); -void micm_solve(void** micm, double time_step, double temperature, double pressure, int num_concentrations, - double* concentrations); - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/src/micm/micm.cpp b/src/micm/micm.cpp index 34ef5755..663547d9 100644 --- a/src/micm/micm.cpp +++ b/src/micm/micm.cpp @@ -1,10 +1,35 @@ -#include +#include +#include +#include #include #include +#include +#include -#include -#include +void create_micm(void **micm) +{ + *micm = new MICM(); +} + +void delete_micm(void **micm) +{ + if (*micm) + { + delete static_cast(*micm); + *micm = nullptr; + } +} + +int micm_create_solver(void **micm, const char *config_path) +{ + return static_cast(*micm)->create_solver(std::string(config_path)); +} + +void micm_solve(void **micm, double time_step, double temperature, double pressure, int num_concentrations, double *concentrations) +{ + static_cast(*micm)->solve(time_step, temperature, pressure, num_concentrations, concentrations); +} MICM::MICM() : solver_(nullptr) {} @@ -24,13 +49,10 @@ int MICM::create_solver(const std::string &config_path) { micm::SolverParameters solver_params = solver_config.GetSolverParams(); auto params = micm::RosenbrockSolverParameters::three_stage_rosenbrock_parameters(NUM_GRID_CELLS); - // solver_ = std::make_unique>(solver_params.system_, - // solver_params.processes_, - // params); - // Create the RosenbrockSolver object using a raw pointer first - solver_ = new micm::RosenbrockSolver<>(solver_params.system_, - solver_params.processes_, - params); + solver_ = std::make_unique>(solver_params.system_, + solver_params.processes_, + params); + Create the RosenbrockSolver object using a raw pointer first } else { diff --git a/src/micm/micm_c_api.cpp b/src/micm/micm_c_api.cpp deleted file mode 100644 index fbbd35fd..00000000 --- a/src/micm/micm_c_api.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include - -#include - -void create_micm(void **micm) -{ - *micm = new MICM(); -} - -void delete_micm(void **micm) -{ - if (*micm) - { - delete static_cast(*micm); - *micm = nullptr; - } -} - -int micm_create_solver(void **micm, const char *config_path) -{ - return static_cast(*micm)->create_solver(std::string(config_path)); -} - -void micm_solve(void **micm, double time_step, double temperature, double pressure, int num_concentrations, double *concentrations) -{ - static_cast(*micm)->solve(time_step, temperature, pressure, num_concentrations, concentrations); -} \ No newline at end of file