diff --git a/.github/workflows/windows_build_test.yml b/.github/workflows/windows_build_test.yml index 442a931aea..ae6ff7061c 100644 --- a/.github/workflows/windows_build_test.yml +++ b/.github/workflows/windows_build_test.yml @@ -3,33 +3,33 @@ name: Windows Build/Test on: # allows us to run workflows manually workflow_dispatch: - pull_request: - branches: - - develop - paths-ignore: - - '.github/workflows/docker_publish.yml' - - '.github/workflows/linux_build_test.yml' - - '.github/workflows/linux_upstream_test_*' - - '.github/workflows/mac_build_test.yml' - - '.github/workflows/housekeeping.yml' - - '.github/workflows/changelog_test.yml' - - '.github/actions/**' - - 'CI/**' - - 'doc/**' + # pull_request: + # branches: + # - develop + # paths-ignore: + # - '.github/workflows/docker_publish.yml' + # - '.github/workflows/linux_build_test.yml' + # - '.github/workflows/linux_upstream_test_*' + # - '.github/workflows/mac_build_test.yml' + # - '.github/workflows/housekeeping.yml' + # - '.github/workflows/changelog_test.yml' + # - '.github/actions/**' + # - 'CI/**' + # - 'doc/**' - push: - branches: - - develop - paths-ignore: - - '.github/workflows/docker_publish.yml' - - '.github/workflows/linux_build_test.yml' - - '.github/workflows/linux_upstream_test_*' - - '.github/workflows/mac_build_test.yml' - - '.github/workflows/housekeeping.yml' - - '.github/workflows/changelog_test.yml' - - '.github/actions/**' - - 'CI/**' - - 'doc/**' + # push: + # branches: + # - develop + # paths-ignore: + # - '.github/workflows/docker_publish.yml' + # - '.github/workflows/linux_build_test.yml' + # - '.github/workflows/linux_upstream_test_*' + # - '.github/workflows/mac_build_test.yml' + # - '.github/workflows/housekeeping.yml' + # - '.github/workflows/changelog_test.yml' + # - '.github/actions/**' + # - 'CI/**' + # - 'doc/**' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -41,7 +41,8 @@ jobs: - uses: conda-incubator/setup-miniconda@v3 with: - auto-activate-base: true + auto-update-conda: true + auto-activate-base: false activate-environment: "" # yaml-cpp package has conflicting gtest headers and is not needed for this project @@ -49,8 +50,7 @@ jobs: shell: bash -l {0} run: | conda install curl eigen - conda install -c conda-forge hdf5=1.10.6 - conda remove -y yaml-cpp + conda install -c conda-forge hdf5==1.10.6 - name: Environment Variables shell: bash -l {0} @@ -114,12 +114,15 @@ jobs: -DMOAB_DIR=../install_dir \ -DHDF5_ROOT="${CONDA_LOC}" \ -DHDF5_hdf5_LIBRARY_RELEASE="${CONDA_LOC}/lib/libhdf5_hl.lib;${CONDA_LOC}/lib/libhdf5.lib;${CONDA_LOC}/lib/zlib.lib;${CONDA_LOC}/lib/libhdf5_cpp.lib" \ - -DCMAKE_INSTALL_PREFIX=../install_dir/ \ - -DCMAKE_EXE_LINKER_FLAGS="" \ - -DCMAKE_MODULE_LINKER_FLAGS="" \ - -DCMAKE_SHARED_LINKER_FLAGS="" \ + -DCMAKE_EXE_LINKER_FLAGS="/std:c++latest -DH5_BUILT_AS_DYNAMIC_LIB" \ + -DCMAKE_MODULE_LINKER_FLAGS="/std:c++latest" \ + -DCMAKE_SHARED_LINKER_FLAGS="/std:c++latest" \ -DCMAKE_STATIC_LINKER_FLAGS="" \ - -DCMAKE_BUILD_TYPE=Release + -DCMAKE_EXE_LINKER_FLAGS="" \ + -DCMAKE_INSTALL_PREFIX=../install_dir/ \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64/cl.exe" \ + -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64/cl.exe" cmake --build . --config Release cmake --install . --config Release diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ab2034a1a..cd6c24fcfd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,16 @@ project(DAGMC) -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.18) enable_language(CXX) # Set DAGMC version set(DAGMC_MAJOR_VERSION 3) set(DAGMC_MINOR_VERSION 2) -set(DAGMC_PATCH_VERSION 3) +set(DAGMC_PATCH_VERSION 4) set(DAGMC_VERSION ${DAGMC_MAJOR_VERSION}.${DAGMC_MINOR_VERSION}.${DAGMC_PATCH_VERSION}) if(MSVC) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + add_definitions( -DH5_BUILT_AS_DYNAMIC_LIB ) endif() @@ -29,22 +30,6 @@ if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") endif() option(GIT_SUBMODULE "Check submodules during build" ON) - if(GIT_SUBMODULE) - message(STATUS "Submodule update") - execute_process(COMMAND ${GIT_EXECUTABLE} "submodule" "update" "--init" "--recursive" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - RESULT_VARIABLE GIT_SUBMOD_RESULT) - if(NOT GIT_SUBMOD_RESULT EQUAL 0) - message(FATAL_ERROR "git submodule update --init --recursive failed with \ - ${GIT_SUBMOD_RESULT}, please checkout submodules") - endif() - endif() -endif() - -# Check to see if submodules exist (by checking one) -if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/pyne/pyne/readme.rst") - message(FATAL_ERROR "The git submodules were not downloaded! GIT_SUBMODULE was \ - turned off or failed. Please update submodules and try again.") endif() # Make the scripts in the "cmake" directory available to CMake diff --git a/doc/CHANGELOG.rst b/doc/CHANGELOG.rst index 2a3cd5c061..2480d32eff 100644 --- a/doc/CHANGELOG.rst +++ b/doc/CHANGELOG.rst @@ -7,10 +7,13 @@ DAGMC Changelog Next version ==================== +v3.2.4 +==================== + **Changed:** * Adding info messages to CMake output for double down (#962) - * Update hdf5 to v1.14.3 from v1.10.4 (#931 #933) + * Update hdf5 to v1.14.3 from v1.10.4 for linux builds (#931 #933) * Ensure implicit complement handle is placed at the back of DAGMC volume indices (#935) * Update MOAB to 5.5.1 from 5.3.0 (#939 #940) * Update README regarding OpenMC (#938) @@ -21,6 +24,9 @@ Next version * Update github actions to newer versions as necessary (#958) * CMake error message update (#960) * Updated documentation to build dependencies (#963) + * Pause support for Windows (#966) + * Localize invocation of git submodule for PyNE (#968) + * Fixed the name of the Graveyard and the Vaccuum to mat:Graveyard and mat:Vacuum (and lower case) (#971) v3.2.3 ==================== diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 11fe95e9d5..e9a2df0848 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -15,6 +15,23 @@ if (BUILD_MCNP5 OR BUILD_MCNP6 OR BUILD_GEANT4 OR BUILD_FLUKA OR BUILD_CI_TESTS) endif () if (BUILD_UWUW) add_subdirectory(uwuw) + + if(GIT_SUBMODULE) + message(STATUS "Submodule update") + execute_process(COMMAND ${GIT_EXECUTABLE} "submodule" "update" "--init" "--recursive" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_SUBMOD_RESULT) + if(NOT GIT_SUBMOD_RESULT EQUAL 0) + message(FATAL_ERROR "git submodule update --init --recursive failed with \ + ${GIT_SUBMOD_RESULT}, please checkout submodules") + endif() + endif() + + # Check to see if submodules exist (by checking one) + if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/pyne/pyne/readme.rst") + message(FATAL_ERROR "The git submodules were not downloaded! GIT_SUBMODULE was \ + turned off or failed. Please update submodules and try again.") + endif() add_subdirectory(pyne) endif () diff --git a/src/dagmc/dagmcmetadata.cpp b/src/dagmc/dagmcmetadata.cpp index b2753cf2f8..fcb23dae43 100644 --- a/src/dagmc/dagmcmetadata.cpp +++ b/src/dagmc/dagmcmetadata.cpp @@ -209,11 +209,9 @@ void dagmcMetaData::parse_material_data() { // set the material value volume_material_property_data_eh[eh] = grp_name; - - bool is_graveyard = - to_lower(grp_name).find(to_lower(graveyard_str)) != std::string::npos; - bool is_vacuum = - to_lower(grp_name).find(to_lower(vacuum_str)) != std::string::npos; + logger.message("Group name -- " + grp_name); + bool is_graveyard = (to_lower(grp_name) == to_lower(graveyard_mat_str())); + bool is_vacuum = (to_lower(grp_name) == to_lower(vacuum_mat_str())); // not graveyard or vacuum or implicit compliment if (!is_graveyard && !is_vacuum && !DAG->is_implicit_complement(eh)) { @@ -221,20 +219,20 @@ void dagmcMetaData::parse_material_data() { } // found graveyard else if (is_graveyard) { - volume_material_property_data_eh[eh] = "mat:Graveyard"; - volume_material_data_eh[eh] = graveyard_str; + volume_material_property_data_eh[eh] = graveyard_mat_str(); + volume_material_data_eh[eh] = graveyard_str(); } // vacuum else if (is_vacuum) { - volume_material_property_data_eh[eh] = "mat:Vacuum"; - volume_material_data_eh[eh] = vacuum_str; + volume_material_property_data_eh[eh] = vacuum_mat_str(); + volume_material_data_eh[eh] = vacuum_str(); } // implicit complement else if (DAG->is_implicit_complement(eh)) { if (implicit_complement_material == "") { logger.message("Implicit Complement assumed to be Vacuum"); - volume_material_property_data_eh[eh] = "mat:Vacuum"; - volume_material_data_eh[eh] = vacuum_str; + volume_material_property_data_eh[eh] = vacuum_mat_str(); + volume_material_data_eh[eh] = vacuum_str(); } else { volume_material_property_data_eh[eh] = "mat:" + implicit_complement_material; @@ -379,18 +377,18 @@ void dagmcMetaData::parse_boundary_data() { exit(EXIT_FAILURE); } // 2d entities have been tagged with the boundary condition property - // ie. both surfaces and its members triangles, + // ie. both surfaces and its member triangles std::string bc_string = to_lower(boundary_assignment[0]); - if (bc_string.find(to_lower(reflecting_str)) != std::string::npos) - surface_boundary_data_eh[eh] = reflecting_str; - if (bc_string.find(to_lower(white_str)) != std::string::npos) - surface_boundary_data_eh[eh] = white_str; - if (bc_string.find(to_lower(periodic_str)) != std::string::npos) - surface_boundary_data_eh[eh] = periodic_str; - if (bc_string.find(to_lower(vacuum_str)) != std::string::npos) - surface_boundary_data_eh[eh] = vacuum_str; + if (bc_string.find(to_lower(reflecting_str())) != std::string::npos) + surface_boundary_data_eh[eh] = reflecting_str(); + if (bc_string.find(to_lower(white_str())) != std::string::npos) + surface_boundary_data_eh[eh] = white_str(); + if (bc_string.find(to_lower(periodic_str())) != std::string::npos) + surface_boundary_data_eh[eh] = periodic_str(); + if (bc_string.find(to_lower(vacuum_str())) != std::string::npos) + surface_boundary_data_eh[eh] = vacuum_str(); } } diff --git a/src/dagmc/dagmcmetadata.hpp b/src/dagmc/dagmcmetadata.hpp index 90de31cf4a..137c990494 100644 --- a/src/dagmc/dagmcmetadata.hpp +++ b/src/dagmc/dagmcmetadata.hpp @@ -316,6 +316,21 @@ class dagmcMetaData { */ std::map> importance_map; + // Getting some constant keyword values + const std::string& graveyard_str() const { return graveyard_str_; } + const std::string& vacuum_str() const { return vacuum_str_; } + const std::string& vacuum_mat_str() const { return vacuum_mat_str_; } + const std::string& graveyard_mat_str() const { return graveyard_mat_str_; } + const std::string& reflecting_str() const { return reflecting_str_; } + const std::string& white_str() const { return white_str_; } + const std::string& periodic_str() const { return periodic_str_; } + + // Allowing modify some constant keyword values + void set_graveyard_str(std::string val) { graveyard_str_ = val; } + void set_vacuum_str(std::string val) { vacuum_str_ = val; } + void set_vacuum_mat_str(std::string val) { vacuum_mat_str_ = val; } + void set_graveyard_mat_str(std::string val) { graveyard_mat_str_ = val; } + // private member variables private: /** @@ -351,11 +366,14 @@ class dagmcMetaData { std::map keyword_synonyms; // Some constant keyword values - const std::string graveyard_str{"Graveyard"}; - const std::string vacuum_str{"Vacuum"}; - const std::string reflecting_str{"Reflecting"}; - const std::string white_str{"White"}; - const std::string periodic_str{"Periodic"}; + const std::string reflecting_str_{"Reflecting"}; + const std::string white_str_{"White"}; + const std::string periodic_str_{"Periodic"}; + // Some less constant keyword values + std::string graveyard_str_{"Graveyard"}; + std::string vacuum_str_{"Vacuum"}; + std::string vacuum_mat_str_{"mat:Vacuum"}; + std::string graveyard_mat_str_{"mat:Graveyard"}; DagMC_Logger logger; }; diff --git a/src/dagmc/tests/dagmc_unit_tests.cpp b/src/dagmc/tests/dagmc_unit_tests.cpp index a3eab17992..9633138b64 100644 --- a/src/dagmc/tests/dagmc_unit_tests.cpp +++ b/src/dagmc/tests/dagmc_unit_tests.cpp @@ -81,6 +81,63 @@ TEST_F(DagmcMetadataTest, TestMatAssigns) { } } //---------------------------------------------------------------------------// +// FIXTURE-BASED TESTS: Tests to make sure that vacuum detection is done +// properly +//---------------------------------------------------------------------------// +TEST_F(DagmcMetadataTest, TestVacuumName) { + // Test default behavior for vacuum name + { + // new metadata instance + dgm = std::make_shared(DAG.get()); + // process + dgm->load_property_data(); + + int num_vol = DAG->num_entities(3); + std::vector vol_ids = {1, 2, 3, 4}; + + std::vector vacuum_names = {"Hydrogen", "Hydrogen", "Hydrogen", + "Vacuum"}; + for (int id : vol_ids) { + std::string mat_prop = dgm->get_volume_property("material", id, false); + EXPECT_EQ(mat_prop, vacuum_names[id - 1]); + } + } + + // Changing the vacuum name to detect mat:Hydrogen as the vacuum + { + dgm = std::make_shared(DAG.get()); + + dgm->set_vacuum_mat_str("mat:Hydrogen"); + dgm->load_property_data(); + int num_vol = DAG->num_entities(3); + std::vector vol_ids = {1, 2, 3, 4}; + + std::vector vacuum_names = {"Vacuum", "Vacuum", "Vacuum", + "Vacuum"}; + for (int id : vol_ids) { + std::string mat_prop = dgm->get_volume_property("material", id, false); + EXPECT_EQ(mat_prop, vacuum_names[id - 1]); + } + } + + // Ensuring that partial name overlap don't affect vacuum detection + { + dgm = std::make_shared(DAG.get()); + + dgm->set_vacuum_mat_str("Hydro"); + dgm->load_property_data(); + int num_vol = DAG->num_entities(3); + std::vector vol_ids = {1, 2, 3, 4}; + + std::vector vacuum_names = {"Hydrogen", "Hydrogen", "Hydrogen", + "Vacuum"}; + for (int id : vol_ids) { + std::string mat_prop = dgm->get_volume_property("material", id, false); + EXPECT_EQ(mat_prop, vacuum_names[id - 1]); + } + } +} +//---------------------------------------------------------------------------// // FIXTURE-BASED TESTS: Tests to make sure that all densities have successfully // been assigned and successfully retreved from the metadata class // in this test there was no density data assigned, so it should be "" diff --git a/src/mcnp/mcnp_funcs.cpp b/src/mcnp/mcnp_funcs.cpp index 579b5a7f8c..29462ebfbd 100644 --- a/src/mcnp/mcnp_funcs.cpp +++ b/src/mcnp/mcnp_funcs.cpp @@ -46,9 +46,6 @@ static bool visited_surface = false; static bool use_dist_limit = false; static double dist_limit; // needs to be thread-local -static std::string graveyard_str = "Graveyard"; -static std::string vacuum_str = "Vacuum"; - void dagmcinit_(char* cfile, int* clen, // geom char* ftol, int* ftlen, // faceting tolerance int* parallel_file_mode, // parallel read mode @@ -203,8 +200,8 @@ void write_cell_cards(std::ostringstream& lcadfile, // that material numbers are assigned mat_num = DMD->volume_material_data_eh[entity]; // if we cant make an int from the mat_num - if (mat_num.find(graveyard_str) == std::string::npos && - mat_num.find(vacuum_str) == std::string::npos) { + if (mat_num.find(DMD->graveyard_str()) == std::string::npos && + mat_num.find(DMD->vacuum_str()) == std::string::npos) { if (!DMD->try_to_make_int(mat_num)) { std::cerr << "Failed to cast material number to an integer" << std::endl; @@ -220,15 +217,15 @@ void write_cell_cards(std::ostringstream& lcadfile, density = DMD->volume_density_data_eh[entity]; // if we have a vacuum problem - if (mat_num == graveyard_str || mat_num == vacuum_str) { + if (mat_num == DMD->graveyard_str() || mat_num == DMD->vacuum_str()) { mat_num = "0"; density = ""; } } else { std::string mat_name = DMD->volume_material_property_data_eh[entity]; // if we not vacuum or graveyard - if (mat_name.find(vacuum_str) == std::string::npos && - mat_name.find(graveyard_str) == std::string::npos) { + if (mat_name.find(DMD->vacuum_str()) == std::string::npos && + mat_name.find(DMD->graveyard_str()) == std::string::npos) { if (workflow_data->material_library.count(mat_name) == 0) { std::cerr << "Material with name " << mat_name << " not found " << std::endl; @@ -269,10 +266,10 @@ void write_cell_cards(std::ostringstream& lcadfile, } double imp = 1.0; // if we find graveyard always have importance 0.0 - if (mat_name.find(graveyard_str) != std::string::npos) { + if (mat_name.find(DMD->graveyard_str()) != std::string::npos) { imp = 0.0; // no splitting can happenin vacuum set to 1 - } else if (mat_name.find(vacuum_str) != std::string::npos) { + } else if (mat_name.find(DMD->vacuum_str()) != std::string::npos) { imp = 1.0; // otherwise as the map says } else { @@ -282,7 +279,7 @@ void write_cell_cards(std::ostringstream& lcadfile, } // its possible no importances were assigned if (set.size() == 0) { - if (mat_name.find(graveyard_str) == std::string::npos) { + if (mat_name.find(DMD->graveyard_str()) == std::string::npos) { importances = "imp:n=1"; } else { importances = "imp:n=0"; @@ -290,7 +287,7 @@ void write_cell_cards(std::ostringstream& lcadfile, } // add descriptive comments for special volumes - if (mat_name.find(graveyard_str) != std::string::npos) { + if (mat_name.find(DMD->graveyard_str()) != std::string::npos) { importances += " $ graveyard"; } else if (DAG->is_implicit_complement(entity)) { importances += " $ implicit complement"; diff --git a/src/uwuw/tests/uwuw_unit_tests.cpp b/src/uwuw/tests/uwuw_unit_tests.cpp index da876e9c96..d45a4c501f 100644 --- a/src/uwuw/tests/uwuw_unit_tests.cpp +++ b/src/uwuw/tests/uwuw_unit_tests.cpp @@ -146,7 +146,6 @@ TEST_F(UWUWTest, mat_write) { mat.metadata["mat_number"] = 1; // check openmc material write std::string openmc_rep = mat.openmc(); - std::cout << openmc_rep << std::endl; std::stringstream expected_rep; expected_rep << " \n"; expected_rep << " \n";