diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..f8ab9235ef --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,122 @@ +name: CI + +on: + # allows us to run workflows manually + workflow_dispatch: + + pull_request: + branches: + - develop + - master + push: + branches: + - develop + - master + +env: + MPI_DIR: /usr + HDF5_ROOT: /usr + OMP_NUM_THREADS: 2 + COVERALLS_PARALLEL: true + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + +jobs: + main: + runs-on: ubuntu-16.04 + strategy: + matrix: + python-version: [3.8] + mpi: [n, y] + omp: [n, y] + dagmc: [n] + event: [n] + vectfit: [n] + + include: + - python-version: 3.6 + omp: n + mpi: n + - python-version: 3.7 + omp: n + mpi: n + - dagmc: y + python-version: 3.8 + mpi: y + omp: y + - event: y + python-version: 3.8 + omp: y + mpi: n + - vectfit: y + python-version: 3.8 + omp: n + mpi: y + + env: + MPI: ${{ matrix.mpi }} + PHDF5: ${{ matrix.mpi }} + OMP: ${{ matrix.omp }} + DAGMC: ${{ matrix.dagmc }} + EVENT: ${{ matrix.event }} + VECTFIT: ${{ matrix.vectfit }} + + steps: + - + uses: actions/checkout@v2 + + - + name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - + name: Environment Variables + run: | + echo "DAGMC_ROOT=$HOME/DAGMC" + echo "OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml" >> $GITHUB_ENV + echo "OPENMC_ENDF_DATA=$HOME/endf-b-vii.1" >> $GITHUB_ENV + + - + name: Apt dependencies + shell: bash + run: | + sudo apt -y update + sudo apt install -y mpich \ + libmpich-dev \ + libhdf5-serial-dev \ + libhdf5-mpich-dev \ + libeigen3-dev + - + name: install + shell: bash + run: | + echo "$HOME/NJOY2016/build" >> $GITHUB_PATH + $GITHUB_WORKSPACE/tools/ci/gha-install.sh + - + name: before + shell: bash + run: $GITHUB_WORKSPACE/tools/ci/gha-before-script.sh + + - + name: test + shell: bash + run: $GITHUB_WORKSPACE/tools/ci/gha-script.sh + + - + name: after_success + shell: bash + run: | + cpp-coveralls -i src -i include --exclude-pattern "/usr/*" --dump cpp_cov.json + coveralls --merge=cpp_cov.json + + finish: + needs: main + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6eee7f7429..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,60 +0,0 @@ - -sudo: required -dist: xenial -language: python -addons: - apt: - packages: - - mpich - - libmpich-dev - - libhdf5-serial-dev - - libhdf5-mpich-dev - - libeigen3-dev - config: - retries: true -services: - - xvfb -cache: - directories: - - $HOME/nndc_hdf5 - - $HOME/endf-b-vii.1 -env: - global: - - MPI_DIR=/usr - - DAGMC_ROOT=$HOME/DAGMC - - HDF5_ROOT=/usr - - OMP_NUM_THREADS=2 - - OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml - - OPENMC_ENDF_DATA=$HOME/endf-b-vii.1 - - PATH=$PATH:$HOME/NJOY2016/build - - COVERALLS_PARALLEL=true - - NUMPY_EXPERIMENTAL_ARRAY_FUNCTION=0 -matrix: - include: - - python: "3.6" - env: OMP=n MPI=n PHDF5=n - - python: "3.7" - env: OMP=n MPI=n PHDF5=n - - python: "3.8" - env: OMP=n MPI=n PHDF5=n - - python: "3.8" - env: OMP=y MPI=n PHDF5=n - - python: "3.8" - env: OMP=n MPI=y PHDF5=n VECTFIT=y - - python: "3.8" - env: OMP=n MPI=y PHDF5=y - - python: "3.8" - env: OMP=y MPI=y PHDF5=y DAGMC=y - - python: "3.8" - env: OMP=y MPI=n PHDF5=n EVENT=y -notifications: - webhooks: https://coveralls.io/webhook?repo_token=$COVERALLS_REPO_TOKEN -install: - - ./tools/ci/travis-install.sh -before_script: - - ./tools/ci/travis-before-script.sh -script: - - ./tools/ci/travis-script.sh -after_success: - - cpp-coveralls -i src -i include --exclude-pattern "/usr/*" --dump cpp_cov.json - - coveralls --merge=cpp_cov.json diff --git a/README.md b/README.md index f0bb67989d..a905a501c0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # OpenMC Monte Carlo Particle Transport Code [![License](https://img.shields.io/github/license/openmc-dev/openmc.svg)](http://openmc.readthedocs.io/en/latest/license.html) -[![Travis CI build status (Linux)](https://travis-ci.org/openmc-dev/openmc.svg?branch=develop)](https://travis-ci.org/openmc-dev/openmc) +[![GitHub Actions build status (Linux)](https://github.com/openmc-dev/openmc/workflows/CI/badge.svg?branch=develop)](https://github.com/openmc-dev/openmc/actions) [![Code Coverage](https://coveralls.io/repos/github/openmc-dev/openmc/badge.svg?branch=develop)](https://coveralls.io/github/openmc-dev/openmc?branch=develop) The OpenMC project aims to provide a fully-featured Monte Carlo particle diff --git a/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py index 8f35d58799..f511579528 100644 --- a/openmc/mgxs/mdgxs.py +++ b/openmc/mgxs/mdgxs.py @@ -2044,13 +2044,9 @@ class DecayRate(MDGXS): num_delayed_groups) else: new_shape = (num_subdomains, num_delayed_groups) + new_shape += xs.shape[1:] xs = np.reshape(xs, new_shape) - # Reverse data if user requested increasing energy groups since - # tally data is stored in order of increasing energies - if order_groups == 'increasing': - xs = xs[..., ::-1, :] - if squeeze: # We want to squeeze out everything but the polar, azimuthal, # delayed group, and energy group data. diff --git a/src/material.cpp b/src/material.cpp index dd3f7ffd7a..89d5d5add2 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -149,7 +149,7 @@ Material::Material(pugi::xml_node node) // Set density for macroscopic data if (units == "macro") { - densities.push_back(1.0); + densities.push_back(density_); } else { fatal_error("Units can only be macro for macroscopic data " + name); } @@ -169,7 +169,7 @@ Material::Material(pugi::xml_node node) // Check if no atom/weight percents were specified or if both atom and // weight percents were specified if (units == "macro") { - densities.push_back(1.0); + densities.push_back(density_); } else { bool has_ao = check_for_node(node_nuc, "ao"); bool has_wo = check_for_node(node_nuc, "wo"); diff --git a/src/tallies/tally_scoring.cpp b/src/tallies/tally_scoring.cpp index 894cdecea4..e936c10d90 100644 --- a/src/tallies/tally_scoring.cpp +++ b/src/tallies/tally_scoring.cpp @@ -1995,13 +1995,13 @@ score_general_mg(Particle& p, int i_tally, int start_index, int filter_index, for (auto d_bin = 0; d_bin < filt.n_bins(); ++d_bin) { auto d = filt.groups()[d_bin] - 1; if (i_nuclide >= 0) { - score += atom_density * flux + score = atom_density * flux * nuc_xs.get_xs(MgxsType::DECAY_RATE, p_g, nullptr, nullptr, &d) * nuc_xs.get_xs(MgxsType::DELAYED_NU_FISSION, p_g, nullptr, nullptr, &d); } else { - score += flux + score = flux * macro_xs.get_xs(MgxsType::DECAY_RATE, p_g, nullptr, nullptr, &d) * macro_xs.get_xs(MgxsType::DELAYED_NU_FISSION, p_g, nullptr, diff --git a/tests/regression_tests/cpp_driver/driver.cpp b/tests/regression_tests/cpp_driver/driver.cpp index f6fde30fd3..3b4bd1daa2 100644 --- a/tests/regression_tests/cpp_driver/driver.cpp +++ b/tests/regression_tests/cpp_driver/driver.cpp @@ -2,6 +2,7 @@ #include "openmc/capi.h" #include "openmc/cell.h" #include "openmc/geometry.h" +#include "openmc/message_passing.h" #include "openmc/summary.h" #include "openmc/tallies/filter.h" #include "openmc/tallies/filter_cell.h" @@ -48,7 +49,11 @@ int main(int argc, char** argv) { // the summary file will be used to check that // temperatures were set correctly so clear // error output can be provided +#ifdef OPENMC_MPI + if (openmc::mpi::master) openmc::write_summary(); +#else openmc::write_summary(); +#endif openmc_run(); openmc_finalize(); diff --git a/tests/regression_tests/mg_convert/inputs_true.dat b/tests/regression_tests/mg_convert/inputs_true.dat index e2c3a01fa7..9db9b7d7c3 100644 --- a/tests/regression_tests/mg_convert/inputs_true.dat +++ b/tests/regression_tests/mg_convert/inputs_true.dat @@ -10,7 +10,7 @@ ./mgxs.h5 - + diff --git a/tests/regression_tests/mg_convert/results_true.dat b/tests/regression_tests/mg_convert/results_true.dat index a52b929dcf..5a17fe1073 100644 --- a/tests/regression_tests/mg_convert/results_true.dat +++ b/tests/regression_tests/mg_convert/results_true.dat @@ -1,24 +1,24 @@ k-combined: -9.930873E-01 2.221904E-03 +9.834385E-01 7.095193E-03 k-combined: -9.948148E-01 1.216270E-03 +9.936965E-01 4.118371E-03 k-combined: -9.930873E-01 2.221904E-03 +9.834385E-01 7.095193E-03 k-combined: -9.755034E-01 6.178296E-03 +9.977232E-01 1.084193E-02 k-combined: -9.738059E-01 4.529068E-03 +9.945011E-01 5.571771E-03 k-combined: -9.866847E-01 9.485912E-03 +9.982627E-01 2.662444E-03 k-combined: -9.755024E-01 6.179047E-03 +9.977232E-01 1.084193E-02 k-combined: -9.738061E-01 4.529462E-03 +9.945007E-01 5.571589E-03 k-combined: -9.866835E-01 9.485832E-03 +9.982620E-01 2.662746E-03 k-combined: -9.719024E-01 4.213166E-03 +1.000071E+00 3.364791E-03 k-combined: -9.930873E-01 2.221904E-03 +9.834385E-01 7.095193E-03 k-combined: -9.930873E-01 2.221904E-03 +9.834385E-01 7.095193E-03 diff --git a/tests/regression_tests/mg_convert/test.py b/tests/regression_tests/mg_convert/test.py index 4cc6b656a2..f22c15dc07 100755 --- a/tests/regression_tests/mg_convert/test.py +++ b/tests/regression_tests/mg_convert/test.py @@ -67,7 +67,7 @@ class MGXSTestHarness(PyAPITestHarness): # Instantiate some Materials and register the appropriate objects mat = openmc.Material(material_id=1, name='UO2 fuel') - mat.set_density('macro', 1.0) + mat.set_density('macro', 1.1) mat.add_macroscopic(uo2_data) # Instantiate a Materials collection and export to XML diff --git a/tests/regression_tests/mgxs_library_hdf5/results_true.dat b/tests/regression_tests/mgxs_library_hdf5/results_true.dat index 4a796b0a51..4aa243b9e3 100644 --- a/tests/regression_tests/mgxs_library_hdf5/results_true.dat +++ b/tests/regression_tests/mgxs_library_hdf5/results_true.dat @@ -193,10 +193,18 @@ domain=1 type=beta [1.21876271e-04 8.77101834e-05] [4.95946084e-05 3.67414816e-05]] domain=1 type=decay-rate -[1.33568413e-02 3.25887984e-02 1.21105565e-01 3.06139633e-01 - 8.62763808e-01 2.89789222e+00] -[9.57055016e-04 2.28222032e-03 8.35436401e-03 2.06734948e-02 - 5.63019289e-02 1.89486538e-01] +[[1.33568413e-02] + [3.25887984e-02] + [1.21105565e-01] + [3.06139633e-01] + [8.62763808e-01] + [2.89789222e+00]] +[[9.57055016e-04] + [2.28222032e-03] + [8.35436401e-03] + [2.06734948e-02] + [5.63019289e-02] + [1.89486538e-01]] domain=1 type=delayed-nu-fission matrix [[[0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00]] diff --git a/tools/ci/travis-before-script.sh b/tools/ci/gha-before-script.sh similarity index 100% rename from tools/ci/travis-before-script.sh rename to tools/ci/gha-before-script.sh diff --git a/tools/ci/travis-install-dagmc.sh b/tools/ci/gha-install-dagmc.sh similarity index 100% rename from tools/ci/travis-install-dagmc.sh rename to tools/ci/gha-install-dagmc.sh diff --git a/tools/ci/travis-install-njoy.sh b/tools/ci/gha-install-njoy.sh similarity index 100% rename from tools/ci/travis-install-njoy.sh rename to tools/ci/gha-install-njoy.sh diff --git a/tools/ci/travis-install-vectfit.sh b/tools/ci/gha-install-vectfit.sh similarity index 100% rename from tools/ci/travis-install-vectfit.sh rename to tools/ci/gha-install-vectfit.sh diff --git a/tools/ci/travis-install.py b/tools/ci/gha-install.py similarity index 97% rename from tools/ci/travis-install.py rename to tools/ci/gha-install.py index a2b1b61753..2f573b1a97 100644 --- a/tools/ci/travis-install.py +++ b/tools/ci/gha-install.py @@ -47,6 +47,7 @@ def install(omp=False, mpi=False, phdf5=False, dagmc=False): if dagmc: cmake_cmd.append('-Ddagmc=ON') + cmake_cmd.append('-DCMAKE_PREFIX_PATH=~/DAGMC') # Build in coverage mode for coverage testing cmake_cmd.append('-Dcoverage=on') diff --git a/tools/ci/travis-install.sh b/tools/ci/gha-install.sh similarity index 82% rename from tools/ci/travis-install.sh rename to tools/ci/gha-install.sh index 7bbe160aa5..debf833145 100755 --- a/tools/ci/travis-install.sh +++ b/tools/ci/gha-install.sh @@ -1,31 +1,31 @@ #!/bin/bash set -ex -# Install NJOY 2016 -./tools/ci/travis-install-njoy.sh - -# Install DAGMC if needed -if [[ $DAGMC = 'y' ]]; then - ./tools/ci/travis-install-dagmc.sh -fi - -# Install vectfit for WMP generation if needed -if [[ $VECTFIT = 'y' ]]; then - ./tools/ci/travis-install-vectfit.sh -fi - # Upgrade pip, pytest, numpy before doing anything else pip install --upgrade pip pip install --upgrade pytest pip install --upgrade numpy +# Install NJOY 2016 +./tools/ci/gha-install-njoy.sh + +# Install DAGMC if needed +if [[ $DAGMC = 'y' ]]; then + ./tools/ci/gha-install-dagmc.sh +fi + +# Install vectfit for WMP generation if needed +if [[ $VECTFIT = 'y' ]]; then + ./tools/ci/gha-install-vectfit.sh +fi + # Install mpi4py for MPI configurations if [[ $MPI == 'y' ]]; then pip install --no-binary=mpi4py mpi4py fi # Build and install OpenMC executable -python tools/ci/travis-install.py +python tools/ci/gha-install.py # Install Python API in editable mode pip install -e .[test,vtk] diff --git a/tools/ci/travis-script.sh b/tools/ci/gha-script.sh similarity index 100% rename from tools/ci/travis-script.sh rename to tools/ci/gha-script.sh