diff --git a/.github/workflows/AT2.yml b/.github/workflows/AT2.yml index f081d16c9b3d..9f261f9b438f 100644 --- a/.github/workflows/AT2.yml +++ b/.github/workflows/AT2.yml @@ -13,13 +13,27 @@ on: - develop workflow_dispatch: +# actions: write needed by skip-duplicate-actions permissions: + actions: write contents: read jobs: + # Jobs depend on the output of pre-checks to run + pre-checks: + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@v5 + with: + skip_after_successful_duplicate: 'true' + gcc10-openmpi416-EXPERIMENTAL: + needs: pre-checks runs-on: [self-hosted, gcc-10.3.0_openmpi-4.1.6] - if: ${{ github.event.action == 'synchronize' || github.event.action == 'opened' || github.event.review.state == 'APPROVED' }} + if: ${{ needs.pre-checks.outputs.should_skip != 'true' && (github.event.action == 'synchronize' || github.event.action == 'opened' || github.event.review.state == 'APPROVED') }} steps: - name: env env: @@ -71,19 +85,14 @@ jobs: export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/packages/framework/GenConfig export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/packages/framework/pr_tools - sed -i "/\[rhel8\]/a `cat /etc/hostname`" /home/runner/_work/Trilinos/Trilinos/packages/framework/ini-files/supported-systems.ini printf "\n\n\n" echo "image: ${AT2_IMAGE:-unknown}" python3 ${GITHUB_WORKSPACE}/packages/framework/pr_tools/PullRequestLinuxDriverTest.py \ - --source-repo-url ${GITHUB_WORKSPACE} \ - --target-repo-url ${GITHUB_WORKSPACE} \ --target-branch-name ${{ github.event.pull_request.base.ref }} \ - --pullrequest-build-name PR-${{ github.event.pull_request.number }} \ --genconfig-build-name rhel8_gcc-openmpi_debug_shared_no-kokkos-arch_no-asan_complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables \ --pullrequest-number ${{ github.event.pull_request.number }} \ - --jenkins-job-number 0 \ --pullrequest-env-config-file ${GITHUB_WORKSPACE}/packages/framework/pr_tools/trilinos_pr.ini \ --pullrequest-gen-config-file ${GITHUB_WORKSPACE}/packages/framework/GenConfig/src/gen-config.ini \ --workspace-dir /home/runner/_work/Trilinos \ @@ -96,8 +105,9 @@ jobs: --filename-packageenables ./packageEnables.cmake gcc830-serial-EXPERIMENTAL: + needs: pre-checks runs-on: [self-hosted, gcc-8.3.0_serial] - if: ${{ github.event.action == 'synchronize' || github.event.action == 'opened' || github.event.review.state == 'APPROVED' }} + if: ${{ needs.pre-checks.outputs.should_skip != 'true' && (github.event.action == 'synchronize' || github.event.action == 'opened' || github.event.review.state == 'APPROVED') }} steps: - name: env env: @@ -149,19 +159,14 @@ jobs: export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/packages/framework/GenConfig export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/packages/framework/pr_tools - sed -i "/\[rhel8\]/a `cat /etc/hostname`" /home/runner/_work/Trilinos/Trilinos/packages/framework/ini-files/supported-systems.ini printf "\n\n\n" echo "image: ${AT2_IMAGE:-unknown}" python3 ${GITHUB_WORKSPACE}/packages/framework/pr_tools/PullRequestLinuxDriverTest.py \ - --source-repo-url ${GITHUB_WORKSPACE} \ - --target-repo-url ${GITHUB_WORKSPACE} \ --target-branch-name ${{ github.event.pull_request.base.ref }} \ - --pullrequest-build-name PR-${{ github.event.pull_request.number }} \ --genconfig-build-name rhel8_gcc-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables \ --pullrequest-number ${{ github.event.pull_request.number }} \ - --jenkins-job-number 0 \ --pullrequest-env-config-file ${GITHUB_WORKSPACE}/packages/framework/pr_tools/trilinos_pr.ini \ --pullrequest-gen-config-file ${GITHUB_WORKSPACE}/packages/framework/GenConfig/src/gen-config.ini \ --workspace-dir /home/runner/_work/Trilinos \ @@ -174,8 +179,9 @@ jobs: --filename-packageenables ./packageEnables.cmake cuda11-uvm-EXPERIMENTAL: + needs: pre-checks runs-on: [self-hosted, cuda-11.4.2_gcc-10.3.0_openmpi-4.1.6] - if: ${{ github.event.action == 'synchronize' || github.event.action == 'opened' || github.event.review.state == 'APPROVED' }} + if: ${{ needs.pre-checks.outputs.should_skip != 'true' && (github.event.action == 'synchronize' || github.event.action == 'opened' || github.event.review.state == 'APPROVED') }} steps: - name: env env: @@ -226,19 +232,14 @@ jobs: export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/packages/framework/GenConfig export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/packages/framework/pr_tools - sed -i "/\[rhel8\]/a `cat /etc/hostname`" /home/runner/_work/Trilinos/Trilinos/packages/framework/ini-files/supported-systems.ini printf "\n\n\n" echo "image: ${AT2_IMAGE:-unknown}" type python python3 ${GITHUB_WORKSPACE}/packages/framework/pr_tools/PullRequestLinuxDriverTest.py \ - --source-repo-url ${GITHUB_WORKSPACE} \ - --target-repo-url ${GITHUB_WORKSPACE} \ --target-branch-name ${{ github.event.pull_request.base.ref }} \ - --pullrequest-build-name PR-${{ github.event.pull_request.number }} \ --genconfig-build-name rhel8_cuda-gcc-openmpi_release_static_Ampere80_no-asan_complex_no-fpic_mpi_pt_no-rdc_uvm_deprecated-on_no-package-enables \ --pullrequest-number ${{ github.event.pull_request.number }} \ - --jenkins-job-number 0 \ --pullrequest-env-config-file ${GITHUB_WORKSPACE}/packages/framework/pr_tools/trilinos_pr.ini \ --pullrequest-gen-config-file ${GITHUB_WORKSPACE}/packages/framework/GenConfig/src/gen-config.ini \ --workspace-dir /home/runner/_work/Trilinos \ diff --git a/.github/workflows/clang_format.yml b/.github/workflows/clang_format.yml index 07339d6f819c..316adc939e9c 100644 --- a/.github/workflows/clang_format.yml +++ b/.github/workflows/clang_format.yml @@ -22,7 +22,7 @@ jobs: - run: git diff HEAD > format_patch.txt - run: if [ "$(cat format_patch.txt)" == "" ] ; then rm format_patch.txt ; else cat format_patch.txt; fi - - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 id: upload-artf if: ${{ hashFiles('format_patch.txt') != '' }} with: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 4b9a58337ea4..1c950be5ed44 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -62,7 +62,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 + uses: github/codeql-action/init@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} @@ -85,6 +85,6 @@ jobs: make -j 2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 + uses: github/codeql-action/analyze@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 1a77e450bd96..f895708c5971 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -58,7 +58,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 with: name: SARIF file path: results.sarif @@ -66,6 +66,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 + uses: github/codeql-action/upload-sarif@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 with: sarif_file: results.sarif diff --git a/packages/amesos2/src/Amesos2_Umfpack_FunctionMap.hpp b/packages/amesos2/src/Amesos2_Umfpack_FunctionMap.hpp index acd14fd1a4b8..6ad530cf4450 100644 --- a/packages/amesos2/src/Amesos2_Umfpack_FunctionMap.hpp +++ b/packages/amesos2/src/Amesos2_Umfpack_FunctionMap.hpp @@ -98,16 +98,16 @@ namespace Amesos2 { #ifdef HAVE_TEUCHOS_COMPLEX template <> - struct FunctionMap> + struct FunctionMap> { - typedef TypeMap> type_map; + typedef TypeMap> type_map; /** * \brief Binds to the appropriate Umfpack solver driver based on data type */ static double * stdComplexToUmfpackDoubleConversion( - const std::complex v [ ]) + const Kokkos::complex v [ ]) { return (double*)(&v[0]); } @@ -116,9 +116,9 @@ namespace Amesos2 { int sys, const int Ap [ ], const int Ai [ ], - const std::complex Ax [ ], - std::complex X [ ], - const std::complex B [ ], + const Kokkos::complex Ax [ ], + Kokkos::complex X [ ], + const Kokkos::complex B [ ], void *Numeric, const double Control [UMFPACK_CONTROL], double Info [UMFPACK_INFO]) @@ -133,7 +133,7 @@ namespace Amesos2 { static int umfpack_numeric( const int Ap [ ], const int Ai [ ], - const std::complex Ax [ ], + const Kokkos::complex Ax [ ], void *Symbolic, void **Numeric, const double Control[UMFPACK_CONTROL], @@ -147,7 +147,7 @@ namespace Amesos2 { int n_col, const int Ap [ ], const int Ai [ ], - const std::complex Ax [ ], + const Kokkos::complex Ax [ ], void **Symbolic, const double Control [UMFPACK_CONTROL], double Info [UMFPACK_INFO]) diff --git a/packages/amesos2/src/Amesos2_Umfpack_TypeMap.hpp b/packages/amesos2/src/Amesos2_Umfpack_TypeMap.hpp index 9b882d08540d..260d7e68f9fa 100644 --- a/packages/amesos2/src/Amesos2_Umfpack_TypeMap.hpp +++ b/packages/amesos2/src/Amesos2_Umfpack_TypeMap.hpp @@ -117,14 +117,14 @@ struct TypeMap template <> struct TypeMap > // provide conversion from std::complex to std::complex { - typedef std::complex type; + typedef Kokkos::complex type; typedef double magnitude_type; }; template <> struct TypeMap > { - typedef std::complex type; + typedef Kokkos::complex type; typedef double magnitude_type; }; diff --git a/packages/framework/ini-files/config-specs.ini b/packages/framework/ini-files/config-specs.ini index 1a76ae6fd5b5..e6f99810e080 100644 --- a/packages/framework/ini-files/config-specs.ini +++ b/packages/framework/ini-files/config-specs.ini @@ -21,7 +21,7 @@ # which flags appear in that file), all separated by underscores. # For instance, # -# rhel7_cee-intel-19.0.3-mpich2-3.2-release_static_no-kokkos-arch_mpi_no-rdc_empire +# rhel8_cee-intel-19.0.3-mpich2-3.2-release_static_no-kokkos-arch_mpi_no-rdc_empire # ^__fully_qualified_env_name_____^ ^ ^ ^ ^ ^ ^-- package-enables # | | | | |-- use-rdc # | | | |-- use-mpi @@ -53,21 +53,21 @@ # complete configuration (we call these partial configurations), but rather are # intended to be `use`d within other sections. In such cases, the recommended # convention for the section name is to use ALL-CAPS, and pick something -# representative of where it will be used, e.g., use `[RHEL7]` to collect -# operations that are common to all `[rhel7_*]` complete configurations. +# representative of where it will be used, e.g., use `[RHEL8]` to collect +# operations that are common to all `[rhel8_*]` complete configurations. # For instance, # -# [RHEL7] -# # TODO: list of commands common to to all rhel7 configurations +# [RHEL8] +# # TODO: list of commands common to to all rhel8 configurations # -# [RHEL7_USE-MPI|YES_USE-RDC|NO] # Reads as "RHEL7 and USE-MPI is YES and USE-RDC is NO" +# [RHEL8_USE-MPI|YES_USE-RDC|NO] # Reads as "RHEL8 and USE-MPI is YES and USE-RDC is NO" # opt-set-cmake-var TPL_ENABLE_MPI BOOL : ON -# # TODO: mpi commands common to all rhel7 configurations +# # TODO: mpi commands common to all rhel8 configurations # -# [rhel7_cee-intel-19.0.3-mpich2-3.2-release_static_no-kokkos-arch_mpi_no-rdc_empire] -# use RHEL7 +# [rhel8_cee-intel-19.0.3-mpich2-3.2-release_static_no-kokkos-arch_mpi_no-rdc_empire] +# use RHEL8 # # TODO: set kokkos arch -# use RHEL7_USE-MPI|YES_USE-RDC|NO # uses rhel7 `mpi_no-rdc` settings +# use RHEL8_USE-MPI|YES_USE-RDC|NO # uses rhel8 `mpi_no-rdc` settings # # ERROR: opt-set-cmake-var TPL_ENABLE_MPI BOOL : OFF # # TODO: finish list of commands # @@ -856,6 +856,7 @@ opt-set-cmake-var Xpetra_ENABLE_DEPRECATED_CODE BOOL : OFF opt-set-cmake-var Trilinos_ENABLE_ALL_PACKAGES BOOL : ON [PACKAGE-ENABLES|PR-FRAMEWORK] +opt-set-cmake-var Trilinos_ENABLE_ALL_PACKAGES BOOL FORCE : OFF opt-set-cmake-var Trilinos_ENABLE_TrilinosFrameworkTests BOOL : ON [PACKAGE-ENABLES|RDC-MINIMAL] @@ -908,7 +909,6 @@ opt-set-cmake-var Trilinos_ENABLE_Zoltan BOOL : ON opt-set-cmake-var Trilinos_ENABLE_Zoltan2 BOOL : ON opt-set-cmake-var Trilinos_ENABLE_Zoltan2Core BOOL : ON - [PACKAGE-ENABLES|ALL-NO-EPETRA] opt-set-cmake-var Trilinos_ENABLE_ALL_PACKAGES BOOL FORCE : ON opt-set-cmake-var Trilinos_ENABLE_Amesos BOOL FORCE : OFF @@ -1151,421 +1151,27 @@ use ATS2-RUN-SERIAL-TESTS # -# RHEL7 +# RHEL8 # # Partial configurations intended to be `use`d within others. -[RHEL7] -use COMMON -opt-set-cmake-var SEACASAprepro_lib_aprepro_lib_array_test_DISABLE BOOL : ON - [RHEL8] use COMMON - -[RHEL7_POST] +opt-set-cmake-var SEACASAprepro_lib_aprepro_lib_array_test_DISABLE BOOL : ON [RHEL8_POST] -[RHEL7_TEST_DISABLES|INTEL] -#Failing tests under C++14 -#Remove line if test has been fixed -opt-set-cmake-var Piro_AnalysisDriver_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Piro_AnalysisDriverTpetra_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_adapters_epetra_test_sol_EpetraSROMSampleGenerator_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_adapters_minitensor_test_function_test_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_adapters_minitensor_test_sol_test_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_adapters_teuchos_test_sol_solSROMGenerator_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_burgers-control_example_01_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_diode-circuit_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_parabolic-control_example_01_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_parabolic-control_example_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_parabolic-control_example_03_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_parabolic-control_example_04_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_parabolic-control_example_05_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_0ld_adv-diff-react_example_02_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_0ld_poisson_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_0ld_stoch-adv-diff_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_adv-diff-react_example_02_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_navier-stokes_example_02_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_nonlinear-elliptic_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_nonlinear-elliptic_example_02_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_obstacle_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_topo-opt_poisson_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_poisson-control_example_01_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_poisson-control_example_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_poisson-inversion_example_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_tensor-opt_example_01_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_NonlinearProblemTest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_algorithm_OptimizationSolverStatusTestInput_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_elementwise_BoundConstraint_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_function_BinaryConstraintCheck_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_function_ExplicitLinearConstraintCheck_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_AugmentedLagrangianStep_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_BoxConstrained_LineSearch_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_BoxConstrained_LM_TrustRegion_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_BoxConstrained_PrimalDualActiveSet_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_BoxConstrained_TrustRegion_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_CubicTest_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_fletcher_ALLPROBLEMS_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_fletcher_BOUNDFLETCHER_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_FletcherStep_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_interiorpoint_PrimalDualNewtonKrylov_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_InteriorPointStep_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_LineSearch_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_MoreauYosidaPenaltyStep_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_TrustRegion_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_tutorial_BoundAndInequality_MPI_1_DISABLE BOOL : ON - -# Misc options typically added by CI testing mode in TriBITS - -# Use the below option only when submitting to the dashboard -#opt-set-cmake-var CTEST_USE_LAUNCHERS ON CACHE BOOL "Set by default for PR testing") - -opt-set-cmake-var MueLu_UnitTestsEpetra_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var MueLu_UnitTestsEpetra_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var MueLu_UnitTestsTpetra_MPI_1_DISABLE BOOL : ON - -# (Temporarily) Disable randomly failing ROL test (#3103) -opt-set-cmake-var ROL_example_poisson-inversion_example_01_MPI_1_DISABLE BOOL : ON - -# These three tests are disabled due to a similar error during testing -# see issue #9077 -opt-set-cmake-var Amesos2_SolverFactory_UnitTests_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Amesos2_SuperLU_DIST_Solver_Test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Stratimikos_test_single_amesos2_tpetra_solver_driver_SuperLU_DIST_MPI_1_DISABLE BOOL : ON - -#opt-set-cmake-var Anasazi_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Belos_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Domi_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Epetra_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var EpetraExt_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var FEI_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Ifpack_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Ifpack2_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -opt-set-cmake-var Intrepid2_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Kokkos_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var KokkosKernels_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var ML_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var MueLu_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var NOX_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Panzer_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Phalanx_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -opt-set-cmake-var Pike_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Piro_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var ROL_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Sacado_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var SEACAS_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Shards_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Stokhos_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -opt-set-cmake-var Tempus_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Teuchos_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Tpetra_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Triutils_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror -#opt-set-cmake-var Zoltan2_CXX_FLAGS STRING FORCE : ${CMAKE_CXX_FLAGS|CMAKE} -Werror - -[RHEL7_TEST_DISABLES|INTEL-19] -use RHEL7_TEST_DISABLES|INTEL -opt-set-cmake-var Zoltan2_scotch_example_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_VWeights_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_OneProc_VWeights_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_OneProc_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_OneProc_EWeights_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_EWeights_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_pamgenMeshAdapterTest_scotch_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Phalanx_dynamic_data_layout_MPI_1_DISABLE BOOL : ON - -[RHEL7_TEST_DISABLES|CLANG] +[TEST_DISABLES|CLANG] # Disable three ShyLu_DD tests - see #2691 opt-set-cmake-var ShyLU_DDFROSch_test_frosch_laplacian_epetra_2d_gdsw_MPI_4_DISABLE BOOL : ON opt-set-cmake-var ShyLU_DDFROSch_test_frosch_laplacian_epetra_2d_rgdsw_MPI_4_DISABLE BOOL : ON opt-set-cmake-var ShyLU_DDFROSch_test_frosch_interfacesets_2D_MPI_4_DISABLE BOOL : ON # Disable for clang -opt-set-cmake-var FEI_elemDOF_Aztec_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var FEI_lagrange_20quad_old_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var FEI_lagrange_20quad_old_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var FEI_multifield_vbr_az_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var FEI_multifield_vbr_az_MPI_3_DISABLE BOOL : ON opt-set-cmake-var ROL_example_PinT_parabolic-control_example_01_MPI_1_DISABLE BOOL : ON opt-set-cmake-var Rythmos_StepperBuilder_UnitTest_MPI_1_DISABLE BOOL : ON -[WEAVER_TEST_DISABLES|CUDA] -opt-set-cmake-var MueLu_ParameterListInterpreterTpetra_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var MueLu_ParameterListInterpreterTpetraHeavy_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var STKUnit_tests_stk_ngp_test_utest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_0ld_adv-diff-react_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_0ld_adv-diff-react_example_02_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_0ld_poisson_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_0ld_stefan-boltzmann_example_03_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_navier-stokes_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_navier-stokes_example_02_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_nonlinear-elliptic_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_nonlinear-elliptic_example_02_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_obstacle_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_topo-opt_poisson_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_elementwise_TpetraMultiVector_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_NonlinearProblemTest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_CurlLaplacianExample-ConvTest-Quad-Order-4_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_MixedPoissonExample-ConvTest-Hex-Order-3_DISABLE BOOL : ON -opt-set-cmake-var TrilinosCouplings_Example_Maxwell_MueLu_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var TrilinosCouplings_Example_Maxwell_MueLu_MPI_4_DISABLE BOOL : ON - -# Disable some tests that should not need to be disabled but do because the -# Trilinos PR tester is using too high a parallel level for ctest. (If the -# ctest parallel test level is dropped from 29 to 8, all of these will pass.) -opt-set-cmake-var MueLu_UnitTestsIntrepid2Tpetra_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_main_driver_energy-ss-blocked-tp_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_MixedCurlLaplacianExample-ConvTest-Tri-Order-1_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_PoissonInterfaceExample_3d_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var PanzerMiniEM_MiniEM-BlockPrec_Augmentation_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var PanzerMiniEM_MiniEM-BlockPrec_RefMaxwell_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_poisson-boltzmann_example_01_MPI_4_DISABLE BOOL : ON - -# Disable a couple of unit tests in test Kokkos_CoreUnitTest_Cuda_MPI_1 that -# are randomly failing in PR test iterations (#6799) -opt-set-cmake-var Kokkos_CoreUnitTest_Cuda_MPI_1_EXTRA_ARGS STRING : "--gtest_filter=-cuda.debug_pin_um_to_host:cuda.debug_serial_execution" - -# Disable a few failing tests for initial release of Cuda 10.1.105 PR build -opt-set-cmake-var EpetraExt_inout_test_LL_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var EpetraExt_inout_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Teko_testdriver_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_fix4785_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Discretization_Basis_HierarchicalBases_Hierarchical_Basis_Tests_MPI_1_DISABLE BOOL : ON - -# Tests turned off to be able to move the CUDA PR build to weaver -opt-set-cmake-var Kokkos_ENABLE_HEADER_SELF_CONTAINMENT_TESTS BOOL : OFF -opt-set-cmake-var Anasazi_BlockDavidson_complex_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_BlockDavidson_complex_test_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_BlockDavidsonThyra_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_BlockKrylovSchur_complex_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_BlockKrylovSchur_complex_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_BlockKrylovSchur_complex_test_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_BlockKrylovSchur_complex_test_3_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_BlockKrylovSchurThyra_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BKS_nh_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BKS_nh_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BKS_norestart_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BKS_solvertest_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BKS_solvertest_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BKS_sym_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BKS_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BKS_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_auxtest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_solvertest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_3_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_4_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_5_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_6_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_7_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_BlockDavidson_test_8_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_GeneralizedDavidson_nh_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_GeneralizedDavidson_solvertest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_auxtest_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_auxtest_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_auxtest_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_auxtest_3_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_auxtest_4_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_test_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_IRTR_test_3_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_LOBPCG_auxtest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_LOBPCG_simpletest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_LOBPCG_solvertest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_LOBPCG_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_LOBPCG_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerGenTester_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerMatTester_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerMatTester_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerMatTester_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerMatTester_3_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerMatTester_4_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerMatTester_5_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerTester_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerTester_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerTester_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerTester_3_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerTester_4_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Epetra_OrthoManagerTester_5_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_IRTRThyra_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_IRTRThyra_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_IRTRThyra_test_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_IRTRThyra_test_3_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_LOBPCG_complex_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_LOBPCGThyra_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Tpetra_BlockDavidson_Complex_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Tpetra_BlockKrylovSchur_Complex_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Tpetra_BlockKrylovSchur_Complex_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Tpetra_BlockKrylovSchur_Lap_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Tpetra_BlockKrylovSchur_Lap_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Tpetra_LOBPCG_Complex_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Anasazi_Tpetra_LOBPCG_Complex_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_bl_fgmres_hb_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_bl_pgmres_hb_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_bl_pgmres_hb_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_bl_pgmres_hb_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_bl_pgmres_hb_3_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_bl_pgmres_hb_4_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_bl_pgmres_hb_5_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_BlockGmres_Galeri_Ex_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_BlockGmresPoly_Epetra_File_Ex_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_BlockPrecGmres_Galeri_Ex_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_Epetra_OrthoManager_test_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_Epetra_OrthoManager_test_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_gcrodr_complex_hb_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_gcrodr_hb_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_prec_gcrodr_hb_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_prec_gcrodr_hb_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_pseudo_gmres_hb_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_pseudo_gmres_multi_hb_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_pseudo_pcg_hb_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_pseudo_pcg_hb_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_pseudo_pcg_hb_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_pseudo_pgmres_hb_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_pseudo_stochastic_pcg_hb_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_pseudo_stochastic_pcg_hb_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_resolve_gmres_hb_0_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_resolve_gmres_hb_1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_SolverFactory_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_Tpetra_gcrodr_complex_hb_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Belos_Tpetra_gcrodr_hb_test_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Ifpack2_Diagonal_gcrodr_belos_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Ifpack2_Jacobi_gcrodr_hb_belos_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Discretization_Basis_DeRHAM_TET_FEM_Serial_Test_01_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Discretization_Basis_DeRHAM_TRI_FEM_Serial_Test_01_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Discretization_Basis_HGRAD_TET_Cn_FEM_Cuda_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Discretization_Basis_HGRAD_TET_Cn_FEM_Serial_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Discretization_Basis_HGRAD_TRI_Cn_FEM_Cuda_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Discretization_Basis_HGRAD_TRI_Cn_FEM_Serial_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_MonolithicExecutable_Intrepid2_Tests_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Orientation_Serial_Test_Orientation_TET_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Projection_Cuda_Test_Convergence_TET_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Projection_Cuda_Test_InterpolationProjection_TRI_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Projection_Serial_Test_Convergence_TET_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Projection_Serial_Test_DeRhamCommutativity_TET_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid2_unit-test_Projection_Serial_Test_InterpolationProjection_TRI_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HCURL_HEX_In_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HCURL_TET_In_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HDIV_HEX_In_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HDIV_QUAD_In_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HDIV_TET_In_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HDIV_TRI_In_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_HEX_C1_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_HEX_C2_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_HEX_Cn_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_HEX_I2_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_PYR_C1_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_PYR_I2_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_QUAD_C2_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_QUAD_Cn_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_TET_C2_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_TET_Cn_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_TRI_Cn_FEM_ORTH_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_TRI_Cn_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_WEDGE_C1_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Intrepid_test_Discretization_Basis_HGRAD_WEDGE_I2_FEM_Test_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Kokkos_CoreUnitTest_CudaTimingBased_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var MueLu_UnitTestsTpetra_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var MueLu_UnitTestsTpetra_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_AnasaziJacobianInverse_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_AnasaziNotConverged_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_Brusselator_Cayley2Matrix_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_Brusselator_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_Brusselator_ShiftInvert2Matrix_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_MultiPointTcubed_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_Pitchfork_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_Tcubed_Continuation_Example_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var NOX_LOCA_Tcubed_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var NOX_Thyra_1DFEM_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_main_driver_energy-ss-loca-eigenvalue_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_algorithm_TypeU_TrustRegion_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_step_TrustRegion_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDBDDC_bddc_simple_interface_test_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDBDDC_bddc_standard_interface_test_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var STKUnit_tests_stk_util_unit_tests_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Stokhos_DivisionOperatorUnitTest_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Stokhos_Linear2D_Diffusion_GMRES_KLR_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var Stokhos_QuadraturePseudoSpectralExpansionUnitTest_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Stokhos_SacadoUQPCEUnitTest_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Stokhos_SDMUtilsUnitTest_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Stokhos_SmolyakPseudoSpectralExpansionUnitTest_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Stokhos_TensorProductPseudoSpectralOperatorUnitTest_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Stokhos_TpetraCrsMatrixUQPCEUnitTest_Serial_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Stratimikos_Belos_GCRODR_strattest_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Stratimikos_test_amesos_thyra_driver_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Stratimikos_Thyra_Belos_StatusTest_UnitTests_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ThyraCore_MultiVector_RowStatScaledOp_UnitTests_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var TrilinosCouplings_Example_Maxwell_Tpetra_MueLu_MPI_1_DISABLE BOOL : ON - -[WEAVER_TEST_DISABLES|CUDA_USE-UVM|NO] -opt-set-cmake-var MiniTensor_test_Test_01_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var MueLu_Maxwell3D-Tpetra_2_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var MueLu_ReitzingerPFactory_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_parallel_apply_orientations_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_LocalMesh_ParallelPeriodicTests_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_LocalMesh_ParallelTests_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_PoissonInterfaceExample_2d_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_PoissonInterfaceExample_2d_MPI_4-ConvTest_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_PoissonInterfaceExample_3d_MPI_4-ConvTest_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_projection_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_tDomainInterface_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var Piro_AnalysisDriverTpetra_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Piro_ThyraSolverTpetra_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_solverfactory_froschpreconditioner_twolevelblockpreconditioner_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_solverfactory_froschpreconditioner_twolevelpreconditioner_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_GDSWP_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_RGDSWP_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_TLP_GDSW_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_TLP_IPOUHarmonic_GDSW_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_TLP_IPOUHarmonic_GDSW_ML_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_TLP_IPOUHarmonic_GDSWStar_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_TLP_IPOUHarmonic_RGDSW_DIM2_TPETRA_DropCoupling_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_TLP_IPOUHarmonic_RGDSW_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_TLP_IPOUHarmonic_RGDSW_ML_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_elasticity_TLP_RGDSW_DIM2_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_GDSWP_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_GDSWP_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_GDSWP_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_one_rank_TLP_GDSW_DIM2_TPETRA_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_one_rank_TLP_GDSW_DIM3_TPETRA_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_one_rank_TLP_IPOU_DIM2_TPETRA_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_one_rank_TLP_IPOU_DIM3_TPETRA_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_one_rank_TLP_RGDSW_DIM2_TPETRA_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_one_rank_TLP_RGDSW_DIM3_TPETRA_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_RGDSWP_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_RGDSWP_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_RGDSWP_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLBP_NB2_GDSW_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLBP_NB2_GDSW_DIM2_DPN1_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLBP_NB2_GDSW_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLBP_NB2_GDSW_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLBP_NB3_GDSW_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLBP_NB3_GDSW_DIM2_DPN1_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLBP_NB3_GDSW_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLBP_NB3_GDSW_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_GDSW_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_GDSW_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_GDSW_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_GDSW_MUELU_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_GDSW_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_GDSW_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_GDSW_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_GDSW_ML_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_GDSWStar_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_GDSWStar_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_GDSWStar_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_RGDSW_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_RGDSW_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_IPOUHarmonic_RGDSW_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_RGDSW_DIM2_DPN1_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_RGDSW_DIM2_DPN2_ORD0_TPETRA_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ShyLU_DDFROSch_test_thyra_xpetra_laplace_TLP_RGDSW_DIM2_DPN2_ORD1_TPETRA_MPI_4_DISABLE BOOL : ON - -[RHEL7_COMPILER|CUDA] +[RHEL_COMPILER|CUDA] use NODE-TYPE|CUDA opt-set-cmake-var MPI_EXEC FILEPATH : mpiexec opt-set-cmake-var TPL_BLAS_LIBRARY_DIRS STRING FORCE : ${CBLAS_ROOT|ENV}/lib @@ -1576,107 +1182,9 @@ opt-set-cmake-var TPL_LAPACK_LIBRARIES STRING FORCE : -L${LAPACK_ROOT|ENV}/ [COMPILER|GNU] opt-set-cmake-var MPI_EXEC FILEPATH : mpirun -[RHEL7_COMPILER|GNU] -use COMPILER|GNU - -[RHEL7_COMPILER|INTEL] +[COMPILER|INTEL] opt-set-cmake-var MPI_EXEC FILEPATH : mpirun -[RHEL7_NODE-TYPE|OPENMP] -use NODE-TYPE|OPENMP -opt-set-cmake-var CTEST_PARALLEL_LEVEL STRING : 10 - -[RHEL7_NODE-TYPE|SERIAL] -use NODE-TYPE|SERIAL -opt-set-cmake-var CTEST_PARALLEL_LEVEL STRING : 10 - -[RHEL7_COMPILER|CUDA_USE-COMPLEX|YES] -use RHEL7_COMPILER|CUDA -use USE-COMPLEX|YES -opt-set-cmake-var Teuchos_ENABLE_COMPLEX BOOL : ON -opt-set-cmake-var Tpetra_INST_COMPLEX_DOUBLE BOOL : ON - -[RHEL7_SEMS_COMPILER|CLANG] - -[RHEL7_SEMS_COMPILER|CUDA] -use RHEL7_COMPILER|CUDA - -[RHEL7_SEMS_COMPILER|GNU] -use RHEL7_COMPILER|GNU - -[RHEL7_SEMS_COMPILER|INTEL] -use RHEL7_COMPILER|INTEL -opt-set-cmake-var TPL_BLAS_LIBRARIES STRING : -mkl -opt-set-cmake-var TPL_LAPACK_LIBRARIES STRING : -mkl - -[RHEL8_COMPILER|CUDA] -use RHEL7_COMPILER|CUDA - -[RHEL7_SEMS_LIB-TYPE|STATIC] -use LIB-TYPE|STATIC -# Use .so's rather than .a's here due to missing HDF5 symbols -opt-set-cmake-var TPL_HDF5_LIBRARIES STRING : ${SEMS_HDF5_LIBRARY_PATH|ENV}/libhdf5_hl.so;${SEMS_HDF5_LIBRARY_PATH|ENV}/libhdf5.so;${SEMS_ZLIB_LIBRARY_PATH|ENV}/libz.so;-ldl - -[RHEL7_SEMS_LIB-TYPE|SHARED] -use LIB-TYPE|SHARED -opt-set-cmake-var TPL_HDF5_LIBRARIES STRING : ${SEMS_HDF5_LIBRARY_PATH|ENV}/libhdf5_hl.so;${SEMS_HDF5_LIBRARY_PATH|ENV}/libhdf5.so;${SEMS_ZLIB_LIBRARY_PATH|ENV}/libz.so;-ldl - -[RHEL8_SEMS_LIB-TYPE|STATIC] -use LIB-TYPE|STATIC - -[RHEL8_SEMS_LIB-TYPE|SHARED] -use LIB-TYPE|SHARED - -[RHEL8_LIB-TYPE|SHARED] -use LIB-TYPE|SHARED - -[RHEL7_SEMS_V2_LIB-TYPE|STATIC] -use LIB-TYPE|STATIC -opt-set-cmake-var TPL_HDF5_LIBRARIES STRING : ${HDF5_LIB|ENV}/libhdf5_hl.a;${HDF5_LIB|ENV}/libhdf5.a;${ZLIB_LIB|ENV}/libz.a;-ldl - -[RHEL7_SEMS_V2_LIB-TYPE|SHARED] -use LIB-TYPE|SHARED -opt-set-cmake-var TPL_HDF5_LIBRARIES STRING : ${HDF5_LIB|ENV}/libhdf5_hl.so;${HDF5_LIB|ENV}/libhdf5.so;${ZLIB_LIB|ENV}/libz.so;-ldl - -[RHEL7_SEMS_COMPILER|CUDA_LIB-TYPE|SHARED_USE-COMPLEX|YES] -opt-set-cmake-var CXX_USE_RESPONSE_FILE_FOR_OBJECTS BOOL : OFF - -[RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO] -use RHEL7 -use USE-ASAN|NO -use USE-FPIC|NO -use USE-MPI|YES -use USE-PT|NO - -[RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|YES_USE-MPI|YES_USE-PT|NO] -use RHEL7 -use USE-ASAN|NO -use USE-FPIC|YES -use USE-MPI|YES -use USE-PT|NO - -[RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|YES_USE-MPI|YES_USE-PT|YES] -use RHEL7 -use USE-ASAN|NO -use USE-FPIC|YES -use USE-MPI|YES -use USE-PT|YES - -[RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|NO_USE-PT|NO] -use RHEL7 -use USE-ASAN|NO -use USE-FPIC|NO -use USE-MPI|NO -use USE-PT|NO - -[RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|NO_USE-PT|NO_PACKAGE-ENABLES|PR-FRAMEWORK] -use RHEL7 -use USE-ASAN|NO -use USE-FPIC|NO -use USE-MPI|NO -use USE-PT|NO -use PACKAGE-ENABLES|PR-FRAMEWORK - [SEMS_COMMON_CUDA_11] # TPL ENABLE/DISABLE settings opt-set-cmake-var TPL_ENABLE_BLAS BOOL FORCE : ON @@ -1790,20 +1298,24 @@ opt-set-cmake-var Percept_CXX_FLAGS STRING : ${CMAKE_CXX_FLAGS|CMAKE} -Wno-error # Full configurations intended to be loaded. -[rhel7_sems-gnu-7.2.0-anaconda3-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_pr-framework] -#uses sems-archive modules -use RHEL7_SEMS_COMPILER|GNU +[rhel8_aue-gnu-12.1.0-anaconda3-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_pr-framework] +use COMMON + +use COMPILER|GNU use NODE-TYPE|SERIAL use BUILD-TYPE|DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED +use LIB-TYPE|SHARED use KOKKOS-ARCH|NO-KOKKOS-ARCH -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|NO_USE-PT|NO_PACKAGE-ENABLES|PR-FRAMEWORK +use USE-ASAN|NO +use USE-FPIC|NO +use USE-MPI|NO +use USE-PT|NO use USE-COMPLEX|NO use USE-RDC|NO use USE-UVM|NO use USE-DEPRECATED|YES -use COMMON +use PACKAGE-ENABLES|PR-FRAMEWORK # Use the below option only when submitting to the dashboard #opt-set-cmake-var CTEST_USE_LAUNCHERS BOOL FORCE : ON @@ -1845,91 +1357,79 @@ opt-set-cmake-var TPL_ENABLE_Scotch BOOL FORCE : OFF # No build stats for Python-only PR (#7376) opt-set-cmake-var Trilinos_ENABLE_BUILD_STATS BOOL FORCE : OFF -use RHEL7_POST - -[rhel8_aue-gnu-12.1.0-anaconda3-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_pr-framework] -use COMMON - -use COMPILER|GNU +[rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] +# uses sems-v2 modules use NODE-TYPE|SERIAL -use BUILD-TYPE|DEBUG +use BUILD-TYPE|RELEASE-DEBUG use LIB-TYPE|SHARED +opt-set-cmake-var TPL_HDF5_LIBRARIES STRING : ${HDF5_LIB|ENV}/libhdf5_hl.so;${HDF5_LIB|ENV}/libhdf5.so;${ZLIB_LIB|ENV}/libz.so;-ldl use KOKKOS-ARCH|NO-KOKKOS-ARCH use USE-ASAN|NO use USE-FPIC|NO -use USE-MPI|NO +use USE-MPI|YES use USE-PT|NO use USE-COMPLEX|NO use USE-RDC|NO use USE-UVM|NO use USE-DEPRECATED|YES +use PACKAGE-ENABLES|NO-PACKAGE-ENABLES -use PACKAGE-ENABLES|PR-FRAMEWORK - -# Use the below option only when submitting to the dashboard -#opt-set-cmake-var CTEST_USE_LAUNCHERS BOOL FORCE : ON - -opt-set-cmake-var TFW_Python3_Testing BOOL FORCE : ON -opt-set-cmake-var TFW_Python_Testing BOOL FORCE : ON +use COMMON_SPACK_TPLS -opt-set-cmake-var PYTHON_PIP_EXECUTABLE STRING FORCE : pip3 -opt-set-cmake-var PYTHON_EXECUTABLE_SEARCH_PATHS STRING FORCE : ${PYTHON_EXECUTABLE_SEARCH_PATHS|ENV} +opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self +opt-set-cmake-var Teko_DISABLE_LSCSTABALIZED_TPETRA_ALPAH_INV_D BOOL : ON -# Note: there is no way to capture the below cmake logic in our ini files. -# Instead, we just set the PYTHON_EXECUTABLE to the result of -# 'envvar-find-in-path PYTHON_EXECUTABLE : python3' from environment-specs.ini +use TEST_DISABLES|CLANG -# find_program(PYTHON_EXECUTABLE -# NAMES python3 python -# PATHS ${PYTHON_EXECUTABLE_SEARCH_PATHS} -# PATH_SUFFIXES bin -# DOC "Set by default for PR testing" -# NO_DEFAULT_PATH -# ) -# if(DEFINED PYTHON_EXECUTABLE_NOTFOUND) -# message(FATAL_ERROR "Unable to locate Python in ${PYTHON_EXECUTABLE_SEARCH_PATHS}") -# else() -# message(STATUS "PYTHON FOUND: ${PYTHON_EXECUTABLE}") -# endif() -opt-set-cmake-var PYTHON_EXECUTABLE STRING FORCE : ${PYTHON_EXECUTABLE|ENV} +opt-set-cmake-var SuperLU_LIBRARY_NAMES STRING : superlu;m +opt-set-cmake-var ML_ENABLE_SuperLU BOOL FORCE : OFF +opt-set-cmake-var Pliris_vector_random_MPI_3_DISABLE BOOL : ON +opt-set-cmake-var Pliris_vector_random_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var TPL_ENABLE_Boost BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_BoostLib BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_ParMETIS BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_Zlib BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_HDF5 BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_Netcdf BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_SuperLU BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_Scotch BOOL FORCE : OFF +[rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] +# uses sems-v2 modules +use rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables +use PACKAGE-ENABLES|ALL -# No build stats for Python-only PR (#7376) -opt-set-cmake-var Trilinos_ENABLE_BUILD_STATS BOOL FORCE : OFF +[rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] +# uses sems-v2 modules +use rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables +use PACKAGE-ENABLES|ALL +use USE-ASAN|YES -[rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -#uses sems-archive modules -use RHEL7_SEMS_COMPILER|GNU -use NODE-TYPE|SERIAL -use BUILD-TYPE|DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED +[rhel8_sems-intel-2021.3-sems-openmpi-4.1.6_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] +# uses sems-v2 modules +use COMPILER|INTEL +use BUILD-TYPE|RELEASE-DEBUG +use LIB-TYPE|SHARED +opt-set-cmake-var TPL_HDF5_LIBRARIES STRING : ${SEMS_HDF5_LIBRARY_PATH|ENV}/libhdf5_hl.so;${SEMS_HDF5_LIBRARY_PATH|ENV}/libhdf5.so;${SEMS_ZLIB_LIBRARY_PATH|ENV}/libz.so;-ldl use KOKKOS-ARCH|NO-KOKKOS-ARCH -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO +use USE-ASAN|NO use USE-COMPLEX|NO +use USE-FPIC|YES +use USE-MPI|YES +use USE-PT|NO use USE-RDC|NO use USE-UVM|NO use USE-DEPRECATED|YES use PACKAGE-ENABLES|NO-PACKAGE-ENABLES +use COMMON_SPACK_TPLS -use COMMON +opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self -opt-set-cmake-var Teko_DISABLE_LSCSTABALIZED_TPETRA_ALPAH_INV_D BOOL : ON -opt-set-cmake-var KokkosKernels_blas_serial_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_helmholtz_example_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var CMAKE_CXX_FLAGS STRING FORCE : -Wall -Wno-clobbered -Wno-vla -Wno-pragmas -Wno-unknown-pragmas -Wno-unused-local-typedefs -Wno-literal-suffix -Wno-deprecated-declarations -Wno-misleading-indentation -Wno-int-in-bool-context -Wno-maybe-uninitialized -Wno-nonnull-compare -Wno-address -Wno-inline -Wno-error +opt-set-cmake-var TPL_Netcdf_LIBRARIES STRING FORCE : -L${NETCDF_C_LIB|ENV}/lib;${NETCDF_C_LIB|ENV}/libnetcdf.so;${PARALLEL_NETCDF_LIB|ENV}/libpnetcdf.a +opt-set-cmake-var TPL_HDF5_LIBRARIES STRING FORCE : ${HDF5_LIB|ENV}/libhdf5_hl.so;${HDF5_LIB|ENV}/libhdf5.a;${ZLIB_LIB|ENV}/libz.a;-ldl -# Test failures as of 11-28-22 -opt-set-cmake-var ROL_example_PDE-OPT_navier-stokes_example_01_MPI_4_DISABLE BOOL : ON +# I get the following error if I do not disable ML_ENABLE_SuperLU: +# ML CONFIGURATION ERROR: SuperLU_5.0 detected - only SuperLU version < 5.0 currently supported for this package. +opt-set-cmake-var ML_ENABLE_SuperLU BOOL FORCE : OFF + +opt-set-cmake-var Zoltan_ch_simple_parmetis_parallel_DISABLE BOOL FORCE : ON +opt-set-cmake-var Zoltan_ch_7944_parmetis_parallel_DISABLE BOOL FORCE : ON +opt-set-cmake-var Zoltan_ch_simple_scotch_parallel_DISABLE BOOL FORCE : ON +opt-set-cmake-var Epetra_Directory_test_LL_MPI_1_DISABLE BOOL FORCE : ON +opt-set-cmake-var SEACASAprepro_lib_aprepro_lib_array_test_DISABLE BOOL FORCE : ON # Under loading and debug, these Tempus run too long and timeout (fail). 2023-12-21 opt-set-cmake-var Tempus_BackwardEuler_CDR_MPI_1_DISABLE BOOL FORCE : ON @@ -1949,556 +1449,28 @@ opt-set-cmake-var Tempus_HHTAlpha_MPI_1_DISABLE BOOL FORCE : ON opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Combined_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_General_Partioned_IMEX_RK_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Tangent_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Newmark_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Test_NewmarkImplicitAForm_HarmonicOscillator_Damped_FirstOrder_MPI_1_DISABLE BOOL FORCE : ON - -use GCC_PACKAGE_SPECIFIC_WARNING_FLAGS - -use RHEL7_POST - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -#uses sems-archive modules -use rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all-no-epetra] -#uses sems-archive modules -use rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL-NO-EPETRA - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug-coverage_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -#uses sems-archive modules -use rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use BUILD-TYPE|DEBUG-COVERAGE-GNU -use PACKAGE-ENABLES|ALL - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_complex-float_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -#uses sems-archive modules -use rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -opt-set-cmake-var Trilinos_ENABLE_DOUBLE BOOL FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_COMPLEX_DOUBLE BOOL FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_FLOAT BOOL FORCE : ON -opt-set-cmake-var Trilinos_ENABLE_COMPLEX_FLOAT BOOL FORCE : ON - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_complex-float_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -#uses sems-archive modules -use rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_complex-float_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_sems-gnu-8.3.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -#uses sems-archive modules -use RHEL7_SEMS_COMPILER|GNU -use NODE-TYPE|SERIAL -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|NO_USE-PT|NO -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES -use USE-COMPLEX|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES - -use COMMON_USE-MPI|NO - -opt-set-cmake-var Trilinos_ENABLE_Fortran OFF BOOL : OFF -opt-set-cmake-var CMAKE_CXX_FLAGS STRING : -Wall -Wno-clobbered -Wno-vla -Wno-pragmas -Wno-unknown-pragmas -Wno-parentheses -Wno-unused-local-typedefs -Wno-literal-suffix -Wno-deprecated-declarations -Wno-misleading-indentation -Wno-int-in-bool-context -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-nonnull-compare -Wno-address -Wno-inline -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unused-label -Werror -Werror=shadow -opt-set-cmake-var TPL_ENABLE_ParMETIS BOOL FORCE : OFF - -use GCC_PACKAGE_SPECIFIC_WARNING_FLAGS - -use RHEL7_POST - -[rhel7_sems-gnu-8.3.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -#uses sems-archive modules -use rhel7_sems-gnu-8.3.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_sems-gnu-8.3.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_all-no-epetra] -#uses sems-archive modules -use rhel7_sems-gnu-8.3.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL-NO-EPETRA - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.1-openmp_release-debug_static_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -#uses sems-archive modules -use RHEL7_SEMS_COMPILER|GNU -use NODE-TYPE|OPENMP -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_LIB-TYPE|STATIC -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO -use USE-COMPLEX|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES -use COMMON - -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self -opt-set-cmake-var CMAKE_CXX_EXTENSIONS BOOL : OFF -opt-set-cmake-var Teko_DISABLE_LSCSTABALIZED_TPETRA_ALPAH_INV_D BOOL : ON -opt-set-cmake-var ROL_test_algorithm_TypeP_CompareTypeU_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var CMAKE_CXX_FLAGS STRING : -fno-strict-aliasing -Wall -Wno-clobbered -Wno-vla -Wno-pragmas -Wno-unknown-pragmas -Wno-parentheses -Wno-unused-local-typedefs -Wno-literal-suffix -Wno-deprecated-declarations -Wno-misleading-indentation -Wno-int-in-bool-context -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-inline -Wno-nonnull-compare -Wno-address -Wno-error -Werror=shadow - -use GCC_OPENMP_PACKAGE_SPECIFIC_WARNING_FLAGS - -use RHEL7_POST - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.1-openmp_release-debug_static_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -#uses sems-archive modules -use rhel7_sems-gnu-8.3.0-openmpi-1.10.1-openmp_release-debug_static_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_sems-clang-11.0.1-openmpi-1.10.1-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -#uses sems-archive modules -use RHEL7_SEMS_COMPILER|CLANG -use NODE-TYPE|SERIAL -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO -use USE-COMPLEX|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -use COMMON - -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self -opt-set-cmake-var Teko_DISABLE_LSCSTABALIZED_TPETRA_ALPAH_INV_D BOOL : ON - -use RHEL7_TEST_DISABLES|CLANG - -use RHEL7_POST - -[rhel7_sems-clang-11.0.1-openmpi-1.10.1-serial_release-debug_shared_no-kokkos-arch_asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -use rhel7_sems-clang-11.0.1-openmpi-1.10.1-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL -use USE-ASAN|YES - -opt-set-cmake-var Trilinos_ENABLE_Domi BOOL CACHE FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_TriKota BOOL CACHE FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_Moertel BOOL CACHE FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_Komplex BOOL CACHE FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_Rythmos BOOL CACHE FORCE : OFF - -# Under loading and debug, these Tempus run too long and timeout (fail). 2023-12-21 -opt-set-cmake-var Tempus_BackwardEuler_CDR_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_VanDerPol_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BDF2_CDR_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BDF2_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_ASA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Combined_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Combined_FSA_SDIRK_5_Stage_5th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_5th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_ExplicitRK_ASA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_HHTAlpha_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Combined_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_General_Partioned_IMEX_RK_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Tangent_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Newmark_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Test_NewmarkImplicitAForm_HarmonicOscillator_Damped_FirstOrder_MPI_1_DISABLE BOOL FORCE : ON - -[rhel7_sems-clang-11.0.1-openmpi-1.10.1-openmp_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -use rhel7_sems-clang-11.0.1-openmpi-1.10.1-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -opt-set-cmake-var Trilinos_ENABLE_OpenMP BOOL FORCE : ON -opt-set-cmake-var Kokkos_ENABLE_OPENMP BOOL FORCE : ON - -[rhel7_sems-clang-11.0.1-openmpi-1.10.1-openmp_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -use rhel7_sems-clang-11.0.1-openmpi-1.10.1-openmp_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_sems-clang-11.0.1-openmpi-1.10.1-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -#uses sems-archive modules -use rhel7_sems-clang-11.0.1-openmpi-1.10.1-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses sems-v2 modules -use RHEL7_SEMS_COMPILER|CLANG -use NODE-TYPE|SERIAL -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_V2_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO -use USE-COMPLEX|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -use COMMON_SPACK_TPLS - -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self -opt-set-cmake-var Teko_DISABLE_LSCSTABALIZED_TPETRA_ALPAH_INV_D BOOL : ON - -use RHEL7_TEST_DISABLES|CLANG - -opt-set-cmake-var SuperLU_LIBRARY_NAMES STRING : superlu;m -opt-set-cmake-var ML_ENABLE_SuperLU BOOL FORCE : OFF - -opt-set-cmake-var Pliris_vector_random_MPI_3_DISABLE BOOL : ON -opt-set-cmake-var Pliris_vector_random_MPI_4_DISABLE BOOL : ON - -use RHEL7_POST - -[rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses sems-v2 modules -use rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses sems-v2 modules -use rhel8_sems-clang-11.0.1-openmpi-4.0.5-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL -use USE-ASAN|YES - -[rhel7_sems-intel-19.0.5-mpich-3.2-serial_release-debug_static_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# JFRYE which modules is this using? -use RHEL7_SEMS_COMPILER|INTEL -use NODE-TYPE|SERIAL -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|YES_USE-MPI|YES_USE-PT|NO -use USE-COMPLEX|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -use COMMON -# Override TPL_ENABLE_SCOTCH from [COMMON] -opt-set-cmake-var TPL_ENABLE_Scotch BOOL FORCE : OFF - -# Additional intel-19 package disables beyond COMMON -opt-set-cmake-var Tpetra_INST_INT_INT BOOL : ON -opt-set-cmake-var Trilinos_ENABLE_STKBalance BOOL FORCE : OFF -#STK-TODO: try to remember to come back and remove this when stk-balance -#is able to tolerate int as a global-index. -# opt-set-cmake-var Trilinos_ENABLE_Zoltan2 BOOL FORCE : OFF -# opt-set-cmake-var Trilinos_ENABLE_Zoltan2Core BOOL FORCE : OFF -# opt-set-cmake-var Trilinos_ENABLE_Zoltan2Sphynx BOOL FORCE : OFF - -opt-set-cmake-var Zoltan_ENABLE_Scotch BOOL FORCE : OFF -opt-set-cmake-var CMAKE_CXX_FLAGS STRING : -fPIC -Wall -Warray-bounds -Wchar-subscripts -Wcomment -Wenum-compare -Wformat -Wuninitialized -Wmaybe-uninitialized -Wmain -Wnarrowing -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type -Wsign-compare -Wsequence-point -Wtrigraphs -Wunused-function -Wunused-but-set-variable -Wunused-variable -Wwrite-strings - -use RHEL7_TEST_DISABLES|INTEL - -# Additional intel-19 test disables -opt-set-cmake-var Phalanx_dynamic_data_layout_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_EWeights_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_OneProc_EWeights_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_OneProc_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_OneProc_VWeights_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_Partitioning1_VWeights_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_pamgenMeshAdapterTest_scotch_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var Zoltan2_scotch_example_MPI_4_DISABLE BOOL : ON - -use RHEL7_POST - -[rhel7_sems-intel-2021.3-sems-openmpi-4.0.5_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses sems-v2 modules -use RHEL7_COMPILER|INTEL -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|YES -use USE-MPI|YES -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES -use COMMON_SPACK_TPLS - -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self - -opt-set-cmake-var TPL_Netcdf_LIBRARIES STRING FORCE : -L${NETCDF_C_LIB|ENV}/lib;${NETCDF_C_LIB|ENV}/libnetcdf.so;${PARALLEL_NETCDF_LIB|ENV}/libpnetcdf.a -opt-set-cmake-var TPL_HDF5_LIBRARIES STRING FORCE : ${HDF5_LIB|ENV}/libhdf5_hl.so;${HDF5_LIB|ENV}/libhdf5.a;${ZLIB_LIB|ENV}/libz.a;-ldl - -# I get the following error if I do not disable ML_ENABLE_SuperLU: -# ML CONFIGURATION ERROR: SuperLU_5.0 detected - only SuperLU version < 5.0 currently supported for this package. -opt-set-cmake-var ML_ENABLE_SuperLU BOOL FORCE : OFF - -opt-set-cmake-var Zoltan_ch_simple_parmetis_parallel_DISABLE BOOL FORCE : ON -opt-set-cmake-var Zoltan_ch_7944_parmetis_parallel_DISABLE BOOL FORCE : ON -opt-set-cmake-var Zoltan_ch_simple_scotch_parallel_DISABLE BOOL FORCE : ON -opt-set-cmake-var Epetra_Directory_test_LL_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var SEACASAprepro_lib_aprepro_lib_array_test_DISABLE BOOL FORCE : ON - -# Under loading and debug, these Tempus run too long and timeout (fail). 2023-12-21 -opt-set-cmake-var Tempus_BackwardEuler_CDR_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_VanDerPol_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BDF2_CDR_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BDF2_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_ASA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Combined_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Combined_FSA_SDIRK_5_Stage_5th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_5th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_ExplicitRK_ASA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_HHTAlpha_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Combined_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_General_Partioned_IMEX_RK_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Tangent_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Newmark_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Test_NewmarkImplicitAForm_HarmonicOscillator_Damped_FirstOrder_MPI_1_DISABLE BOOL FORCE : ON - -[rhel7_sems-intel-2021.3-sems-openmpi-4.0.5_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses sems-v2 modules -use rhel7_sems-intel-2021.3-sems-openmpi-4.0.5_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_sems-intel-2021.3-sems-openmpi-4.0.5_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-off_no-package-enables] -use rhel7_sems-intel-2021.3-sems-openmpi-4.0.5_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use USE-DEPRECATED|NO - -[rhel7_sems-intel-2021.3-sems-openmpi-4.0.5_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-off_all] -use rhel7_sems-intel-2021.3-sems-openmpi-4.0.5_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-off_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel8_sems-intel-2021.3-sems-openmpi-4.1.6_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses sems-v2 modules -use RHEL7_COMPILER|INTEL -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|YES -use USE-MPI|YES -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES -use COMMON_SPACK_TPLS - -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self - -opt-set-cmake-var TPL_Netcdf_LIBRARIES STRING FORCE : -L${NETCDF_C_LIB|ENV}/lib;${NETCDF_C_LIB|ENV}/libnetcdf.so;${PARALLEL_NETCDF_LIB|ENV}/libpnetcdf.a -opt-set-cmake-var TPL_HDF5_LIBRARIES STRING FORCE : ${HDF5_LIB|ENV}/libhdf5_hl.so;${HDF5_LIB|ENV}/libhdf5.a;${ZLIB_LIB|ENV}/libz.a;-ldl - -# I get the following error if I do not disable ML_ENABLE_SuperLU: -# ML CONFIGURATION ERROR: SuperLU_5.0 detected - only SuperLU version < 5.0 currently supported for this package. -opt-set-cmake-var ML_ENABLE_SuperLU BOOL FORCE : OFF - -opt-set-cmake-var Zoltan_ch_simple_parmetis_parallel_DISABLE BOOL FORCE : ON -opt-set-cmake-var Zoltan_ch_7944_parmetis_parallel_DISABLE BOOL FORCE : ON -opt-set-cmake-var Zoltan_ch_simple_scotch_parallel_DISABLE BOOL FORCE : ON -opt-set-cmake-var Epetra_Directory_test_LL_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var SEACASAprepro_lib_aprepro_lib_array_test_DISABLE BOOL FORCE : ON - -# Under loading and debug, these Tempus run too long and timeout (fail). 2023-12-21 -opt-set-cmake-var Tempus_BackwardEuler_CDR_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_VanDerPol_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BDF2_CDR_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BDF2_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_ASA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Combined_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Combined_FSA_SDIRK_5_Stage_5th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_5th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_ExplicitRK_ASA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_HHTAlpha_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Combined_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_General_Partioned_IMEX_RK_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Tangent_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Newmark_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Test_NewmarkImplicitAForm_HarmonicOscillator_Damped_FirstOrder_MPI_1_DISABLE BOOL FORCE : ON - -opt-set-cmake-var Trilinos_ENABLE_TrilinosFrameworkTests BOOL FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_TrilinosBuildStats BOOL FORCE : OFF - -[rhel8_sems-intel-2021.3-sems-openmpi-4.1.6_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses sems-v2 modules -use rhel8_sems-intel-2021.3-sems-openmpi-4.1.6_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.0.5_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses sems-v2 modules -use RHEL7_SEMS_COMPILER|CUDA -use NODE-TYPE|CUDA -use BUILD-TYPE|RELEASE -use RHEL7_SEMS_LIB-TYPE|STATIC -use KOKKOS-ARCH|VOLTA70 -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO -use USE-COMPLEX|YES -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES -use COMMON_SPACK_TPLS -use SEMS_COMMON_CUDA_11 - -# TPL ENABLE/DISABLE settings -opt-set-cmake-var TPL_ENABLE_BLAS BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_BinUtils BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_Boost BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_CGNS BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_CUDA BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_CUSPARSE BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_DLlib BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_HDF5 BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_HWLOC BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_LAPACK BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_METIS BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_Matio BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_MPI BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_Netcdf BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_ParMETIS BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_Pthread BOOL FORCE : ON -opt-set-cmake-var TPL_ENABLE_Scotch BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_SuperLU BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_SuperLUDist BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_Zlib BOOL FORCE : ON - -#TPL_*_LIBRARIES -# see https://github.com/trilinos/Trilinos/issues/11109#issuecomment-1272146298 -opt-set-cmake-var TPL_BLAS_LIBRARIES STRING FORCE : /lib64/libblas.so.3 -opt-set-cmake-var TPL_BoostLib_LIBRARIES STRING FORCE : ${BOOST_LIB|ENV}/libboost_program_options.a;${BOOST_LIB|ENV}/libboost_system.a -opt-set-cmake-var TPL_Boost_LIBRARIES STRING FORCE : ${BOOST_LIB|ENV}/libboost_program_options.a;${BOOST_LIB|ENV}/libboost_system.a -opt-set-cmake-var TPL_DLlib_LIBRARIES FILEPATH FORCE : "-ldl" -opt-set-cmake-var TPL_HDF5_LIBRARIES STRING FORCE : ${HDF5_LIB|ENV}/libhdf5_hl.so;${HDF5_LIB|ENV}/libhdf5.a;${ZLIB_LIB|ENV}/libz.a;-ldl -# see https://github.com/trilinos/Trilinos/issues/11109#issuecomment-1272146298 -opt-set-cmake-var TPL_LAPACK_LIBRARIES STRING FORCE : /lib64/liblapack.so.3 -opt-set-cmake-var TPL_METIS_LIBRARIES STRING FORCE : ${METIS_LIB|ENV}/libmetis.so -opt-set-cmake-var TPL_Netcdf_LIBRARIES STRING FORCE : -L${NETCDF_C_ROOT|ENV}/lib64;${NETCDF_C_ROOT|ENV}/lib/libnetcdf.a;${PARALLEL_NETCDF_ROOT|ENV}/lib/libpnetcdf.a;${TPL_HDF5_LIBRARIES|CMAKE} - -#TPL_[INCLUDE|LIBRARY]_DIRS -opt-set-cmake-var Netcdf_INCLUDE_DIRS STRING FORCE : ${NETCDF_C_INC|ENV} -opt-set-cmake-var ParMETIS_INCLUDE_DIRS STRING FORCE : ${PARMETIS_INC|ENV} -opt-set-cmake-var ParMETIS_LIBRARY_DIRS STRING FORCE : ${PARMETIS_LIB|ENV} -opt-set-cmake-var Scotch_INCLUDE_DIRS STRING FORCE : ${SCOTCH_INC|ENV} -opt-set-cmake-var Scotch_LIBRARY_DIRS STRING FORCE : ${SCOTCH_LIB|ENV} -opt-set-cmake-var SuperLU_INCLUDE_DIRS STRING FORCE : ${SUPERLU_INC|ENV} -opt-set-cmake-var SuperLU_LIBRARY_DIRS STRING FORCE : ${SUPERLU_LIB|ENV} - -#CXX Settings -opt-set-cmake-var CMAKE_CXX_FLAGS STRING : -fPIC -Wall -Warray-bounds -Wchar-subscripts -Wcomment -Wenum-compare -Wformat -Wuninitialized -Wmaybe-uninitialized -Wmain -Wnarrowing -Wnonnull -Wparentheses -Wreorder -Wreturn-type -Wsign-compare -Wsequence-point -Wtrigraphs -Wunused-function -Wunused-but-set-variable -Wunused-variable -Wwrite-strings - -#Package Options -opt-set-cmake-var EpetraExt_ENABLE_HDF5 BOOL FORCE : OFF -opt-set-cmake-var Kokkos_ENABLE_CUDA BOOL FORCE : ON -opt-set-cmake-var Kokkos_ENABLE_CUDA_LAMBDA BOOL FORCE : ON -opt-set-cmake-var Kokkos_ENABLE_CXX11_DISPATCH_LAMBDA BOOL FORCE : ON -#opt-set-cmake-var Kokkos_ENABLE_Debug_Bounds_Check BOOL FORCE : ON -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none -opt-set-cmake-var Panzer_FADTYPE STRING FORCE : "Sacado::Fad::DFad" -opt-set-cmake-var Phalanx_KOKKOS_DEVICE_TYPE STRING FORCE : CUDA -opt-set-cmake-var Sacado_ENABLE_HIERARCHICAL_DFAD BOOL FORCE : ON -opt-set-cmake-var Tpetra_INST_SERIAL BOOL FORCE : ON -opt-set-cmake-var Zoltan_ENABLE_Scotch BOOL FORCE : OFF - -# Test failures as of 11-28-22 -opt-set-cmake-var PanzerAdaptersSTK_tQuad8ToQuad4Factory_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var PanzerAdaptersSTK_tQuadraticToLinearMeshFactory_MPI_2_DISABLE BOOL : ON -opt-set-cmake-var Pliris_vector_random_MPI_3_DISABLE BOOL : ON -opt-set-cmake-var Pliris_vector_random_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_navier-stokes_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_nonlinear-elliptic_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_nonlinear-elliptic_example_02_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_obstacle_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_topo-opt_poisson_example_01_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var ROL_test_elementwise_TpetraMultiVector_MPI_4_DISABLE BOOL : ON -opt-set-cmake-var STKUnit_tests_stk_mesh_unit_tests_MPI_4_DISABLE BOOL : ON -# This was failing fairly reliably and Nate said it should be okay to disable (https://github.com/trilinos/Trilinos/issues/11678) -opt-set-cmake-var Kokkos_CoreUnitTest_CudaTimingBased_MPI_1_DISABLE BOOL : ON - -# This is run serially to try to prevent some unpredictable issues where these tests may be trying -# overlap other executing tests on the same GPU after introducing usage for multiple GPUs for testing. -# (https://github.com/trilinos/Trilinos/pull/11391) -opt-set-cmake-var Kokkos_CoreUnitTest_Cuda1_MPI_1_RUN_SERIAL BOOL FORCE : ON -# Test has been unstable, disabling with Sam B's approval.i -# (https://github.com/trilinos/Trilinos/pull/11391) -opt-set-cmake-var Adelus_vector_random_npr3_rhs1_MPI_3_DISABLE BOOL : ON - -use PACKAGE-ENABLES|NO-EPETRA - -use RHEL7_POST - -use CUDA11-RUN-SERIAL-TESTS - -[rhel7_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.0.5_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_no-uvm_deprecated-on_all] -# uses sems-v2 modules -use rhel7_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.0.5_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL-NO-EPETRA - -[rhel7_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.0.5_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_uvm_deprecated-on_no-package-enables] -# uses sems-v2 modules -use RHEL7_SEMS_COMPILER|CUDA -use NODE-TYPE|CUDA -use BUILD-TYPE|RELEASE -use RHEL7_SEMS_LIB-TYPE|STATIC -use KOKKOS-ARCH|VOLTA70 -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO -use USE-COMPLEX|YES -use USE-RDC|NO -use USE-UVM|YES -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES -use PACKAGE-ENABLES|NO-EPETRA -use COMMON_SPACK_TPLS -use SEMS_COMMON_CUDA_11 -use RHEL7_POST -use CUDA11-RUN-SERIAL-TESTS - -opt-set-cmake-var Trilinos_ENABLE_TESTS BOOL FORCE : OFF +opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_General_Partioned_IMEX_RK_MPI_1_DISABLE BOOL FORCE : ON +opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON +opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Tangent_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON +opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON +opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON +opt-set-cmake-var Tempus_Newmark_MPI_1_DISABLE BOOL FORCE : ON +opt-set-cmake-var Tempus_Test_NewmarkImplicitAForm_HarmonicOscillator_Damped_FirstOrder_MPI_1_DISABLE BOOL FORCE : ON -[rhel7_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.0.5_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_uvm_deprecated-on_all] -use rhel7_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.0.5_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL-NO-EPETRA +opt-set-cmake-var Trilinos_ENABLE_TrilinosFrameworkTests BOOL FORCE : OFF +opt-set-cmake-var Trilinos_ENABLE_TrilinosBuildStats BOOL FORCE : OFF -[rhel7_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.0.5_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_rdc_uvm_deprecated-on_all] +[rhel8_sems-intel-2021.3-sems-openmpi-4.1.6_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] # uses sems-v2 modules -use rhel7_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.0.5_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_uvm_deprecated-on_no-package-enables -use NODE-TYPE|CUDA_USE-RDC|YES_USE-PT|YES -use USE-RDC|YES -use PACKAGE-ENABLES|ALL-NO-EPETRA - -opt-set-cmake-var CMAKE_CXX_FLAGS STRING FORCE : -Wall -Wunused-parameter -Werror=unused-parameter -Wshadow -Werror=shadow -pedantic -Werror=pedantic -Werror=sign-compare -Werror=sign-compare -Wtype-limits -Werror=type-limits -Wuninitialized -Werror=uninitialized +use rhel8_sems-intel-2021.3-sems-openmpi-4.1.6_release-debug_shared_no-kokkos-arch_no-asan_no-complex_fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables +use PACKAGE-ENABLES|ALL [rhel8_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.1.4_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_no-uvm_deprecated-on_no-package-enables] # uses sems-v2 modules -use RHEL8_COMPILER|CUDA +use RHEL_COMPILER|CUDA use NODE-TYPE|CUDA use BUILD-TYPE|RELEASE -use RHEL8_SEMS_LIB-TYPE|STATIC +use LIB-TYPE|STATIC use KOKKOS-ARCH|VOLTA70 use USE-ASAN|NO use USE-FPIC|NO @@ -2595,8 +1567,6 @@ opt-set-cmake-var Adelus_vector_random_npr4_rhs1_MPI_4_DISABLE BOOL : ON use PACKAGE-ENABLES|NO-EPETRA -use RHEL7_POST - use CUDA11-RUN-SERIAL-TESTS [rhel8_sems-cuda-11.4.2-sems-gnu-10.1.0-sems-openmpi-4.1.4_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_no-uvm_deprecated-on_all] @@ -2607,10 +1577,10 @@ use PACKAGE-ENABLES|ALL-NO-EPETRA [rhel8_sems-cuda-11.4.2-gnu-10.1.0-openmpi-4.1.6_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_uvm_deprecated-on_no-package-enables] # uses sems-v2 modules use RHEL8 -use RHEL8_COMPILER|CUDA +use RHEL_COMPILER|CUDA use NODE-TYPE|CUDA use BUILD-TYPE|RELEASE -use RHEL8_SEMS_LIB-TYPE|STATIC +use LIB-TYPE|STATIC use KOKKOS-ARCH|VOLTA70 use USE-ASAN|NO @@ -2627,7 +1597,6 @@ use PACKAGE-ENABLES|NO-EPETRA use COMMON_SPACK_TPLS use SEMS_COMMON_CUDA_11 -use RHEL7_POST use CUDA11-RUN-SERIAL-TESTS opt-set-cmake-var Trilinos_ENABLE_TESTS BOOL FORCE : OFF @@ -2639,10 +1608,10 @@ use PACKAGE-ENABLES|ALL-NO-EPETRA [rhel8_sems-cuda-11.4.2-gnu-10.1.0-openmpi-4.1.6_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_no-uvm_deprecated-on_no-package-enables] # uses sems-v2 modules use RHEL8 -use RHEL8_COMPILER|CUDA +use RHEL_COMPILER|CUDA use NODE-TYPE|CUDA use BUILD-TYPE|RELEASE -use RHEL8_SEMS_LIB-TYPE|STATIC +use LIB-TYPE|STATIC use KOKKOS-ARCH|VOLTA70 use USE-ASAN|NO @@ -2740,8 +1709,6 @@ opt-set-cmake-var Adelus_vector_random_npr4_rhs1_MPI_4_DISABLE BOOL : ON use PACKAGE-ENABLES|NO-EPETRA -use RHEL7_POST - use CUDA11-RUN-SERIAL-TESTS [rhel8_sems-cuda-11.4.2-gnu-10.1.0-openmpi-4.1.6_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_no-uvm_deprecated-on_all] @@ -2749,344 +1716,6 @@ use CUDA11-RUN-SERIAL-TESTS use rhel8_sems-cuda-11.4.2-gnu-10.1.0-openmpi-4.1.6_release_static_Volta70_no-asan_complex_no-fpic_mpi_pt_no-rdc_no-uvm_deprecated-on_no-package-enables use PACKAGE-ENABLES|ALL-NO-EPETRA - -[rhel7_ascdo-gnu-10.3.0-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses asc-do modules -use NODE-TYPE|SERIAL -use BUILD-TYPE|DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|NO -use USE-MPI|NO -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -opt-set-cmake-var Trilinos_ENABLE_TESTS BOOL FORCE : ON - -# There is no netcdf available via ascdo -opt-set-cmake-var TPL_ENABLE_Netcdf BOOL : OFF - -# PyTrilinos config fails with: -# -- Found NumPy: 1.21.5 (found suitable version "1.21.5", minimum required is "1.0") -# CMake Error at packages/PyTrilinos/CMakeLists.txt:206 (MESSAGE): -# SWIG version 2.0.10 is less than minimum version 3.0.11 -opt-set-cmake-var Trilinos_ENABLE_PyTrilinos BOOL : OFF - -[rhel7_ascdo-gnu-10.3.0-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses asc-do modules -use rhel7_ascdo-gnu-10.3.0-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_ascdo-gnu-10.3.0-openmp_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses asc-do modules -use NODE-TYPE|OPENMP -use BUILD-TYPE|DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|NO -use USE-MPI|NO -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -opt-set-cmake-var Trilinos_ENABLE_TESTS BOOL FORCE : ON - -# There is no netcdf available via ascdo -opt-set-cmake-var TPL_ENABLE_Netcdf BOOL : OFF - -# PyTrilinos config fails with: -# -- Found NumPy: 1.21.5 (found suitable version "1.21.5", minimum required is "1.0") -# CMake Error at packages/PyTrilinos/CMakeLists.txt:206 (MESSAGE): -# SWIG version 2.0.10 is less than minimum version 3.0.11 -opt-set-cmake-var Trilinos_ENABLE_PyTrilinos BOOL : OFF - -opt-set-cmake-var CMAKE_GENERATOR STRING : Ninja - -[rhel7_ascdo-gnu-10.3.0-openmp_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses asc-do modules -use rhel7_ascdo-gnu-10.3.0-openmp_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_ascdo-gnu-10.3.0-openmpi-4.1.4-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses asc-do modules -use NODE-TYPE|SERIAL -use BUILD-TYPE|DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|NO -use USE-MPI|YES -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -opt-set-cmake-var Trilinos_ENABLE_TESTS BOOL FORCE : ON - -# There is no netcdf available via ascdo -opt-set-cmake-var TPL_ENABLE_Netcdf BOOL : OFF - -# PyTrilinos config fails with: -# -- Found NumPy: 1.21.5 (found suitable version "1.21.5", minimum required is "1.0") -# CMake Error at packages/PyTrilinos/CMakeLists.txt:206 (MESSAGE): -# SWIG version 2.0.10 is less than minimum version 3.0.11 -#opt-set-cmake-var Trilinos_ENABLE_PyTrilinos BOOL : OFF - -opt-set-cmake-var CMAKE_GENERATOR STRING : Ninja - -[rhel7_ascdo-gnu-10.3.0-openmpi-4.1.4-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses asc-do modules -use rhel7_ascdo-gnu-10.3.0-openmpi-4.1.4-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - - -[rhel7_ascdo-gnu-12.1.0-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses asc-do modules -use NODE-TYPE|SERIAL -use BUILD-TYPE|DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|NO -use USE-MPI|NO -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -opt-set-cmake-var Trilinos_ENABLE_TESTS BOOL FORCE : ON - -# There is no netcdf available via ascdo -opt-set-cmake-var TPL_ENABLE_Netcdf BOOL : OFF - -# PyTrilinos config fails with: -# -- Found NumPy: 1.21.5 (found suitable version "1.21.5", minimum required is "1.0") -# CMake Error at packages/PyTrilinos/CMakeLists.txt:206 (MESSAGE): -# SWIG version 2.0.10 is less than minimum version 3.0.11 -opt-set-cmake-var Trilinos_ENABLE_PyTrilinos BOOL : OFF - -[rhel7_ascdo-gnu-12.1.0-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses asc-do modules -use rhel7_ascdo-gnu-12.1.0-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_ascdo-gnu-12.1.0-openmp_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses asc-do modules -use NODE-TYPE|OPENMP -use BUILD-TYPE|DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|NO -use USE-MPI|NO -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -opt-set-cmake-var Trilinos_ENABLE_TESTS BOOL FORCE : ON - -# There is no netcdf available via ascdo -opt-set-cmake-var TPL_ENABLE_Netcdf BOOL : OFF - -# PyTrilinos config fails with: -# -- Found NumPy: 1.21.5 (found suitable version "1.21.5", minimum required is "1.0") -# CMake Error at packages/PyTrilinos/CMakeLists.txt:206 (MESSAGE): -# SWIG version 2.0.10 is less than minimum version 3.0.11 -opt-set-cmake-var Trilinos_ENABLE_PyTrilinos BOOL : OFF - -opt-set-cmake-var CMAKE_GENERATOR STRING : Ninja - -[rhel7_ascdo-gnu-12.1.0-openmp_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses asc-do modules -use rhel7_ascdo-gnu-12.1.0-openmp_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_ascdo-gnu-12.1.0-openmpi-4.1.4-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses asc-do modules -use NODE-TYPE|SERIAL -use BUILD-TYPE|DEBUG -use RHEL7_SEMS_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|NO -use USE-MPI|YES -use USE-PT|NO -use COMMON_SPACK_TPLS - -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self -opt-set-cmake-var Teko_DISABLE_LSCSTABALIZED_TPETRA_ALPAH_INV_D BOOL : ON -opt-set-cmake-var KokkosKernels_blas_serial_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_helmholtz_example_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var CMAKE_CXX_FLAGS STRING : -Wall -Wno-clobbered -Wno-vla -Wno-pragmas -Wno-unknown-pragmas -Wno-unused-local-typedefs -Wno-literal-suffix -Wno-deprecated-declarations -Wno-misleading-indentation -Wno-int-in-bool-context -Wno-maybe-uninitialized -Wno-nonnull-compare -Wno-address -Wno-inline - -# Test failures as of 11-28-22 -opt-set-cmake-var ROL_example_PDE-OPT_navier-stokes_example_01_MPI_4_DISABLE BOOL : ON - -use RHEL7_POST - -[rhel7_ascdo-gnu-12.1.0-openmpi-4.1.4-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses asc-do modules -use rhel7_ascdo-gnu-12.1.0-openmpi-4.1.4-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - - -####### under Testing ####### -[rhel7_sems-gnu-8.5.0-openmpi-4.1.6-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses sems-v2 modules -use RHEL7_SEMS_COMPILER|GNU -use NODE-TYPE|SERIAL -use BUILD-TYPE|DEBUG -use RHEL7_SEMS_V2_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|NO -use USE-MPI|YES -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -use COMMON_SPACK_TPLS - -#opt-set-cmake-var Amesos_ENABLE_SuperLU BOOL FORCE : OFF -#opt-set-cmake-var Amesos_ENABLE_SuperLUDist BOOL FORCE : OFF -#opt-set-cmake-var Amesos2_ENABLE_SuperLU BOOL FORCE : OFF -#opt-set-cmake-var Amesos2_ENABLE_SuperLUDist BOOL FORCE : OFF -#opt-set-cmake-var Stokhos_ENABLE_EpetraExt BOOL FORCE : OFF -#opt-set-cmake-var Piro_ENABLE_EpetraExt BOOL FORCE : OFF -#opt-set-cmake-var Piro_ENABLE_Epetra BOOL FORCE : OFF -opt-set-cmake-var PIRO_HAVE_EPETRA_STACK BOOL FORCE : OFF - -opt-set-cmake-var Trilinos_ENABLE_Ifpack BOOL FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_Amesos BOOL FORCE : OFF -opt-set-cmake-var Trilinos_ENABLE_Epetra BOOL FORCE : OFF - -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self -opt-set-cmake-var Teko_DISABLE_LSCSTABALIZED_TPETRA_ALPAH_INV_D BOOL : ON -opt-set-cmake-var KokkosKernels_blas_serial_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var ROL_example_PDE-OPT_helmholtz_example_02_MPI_1_DISABLE BOOL : ON -opt-set-cmake-var CMAKE_CXX_FLAGS STRING FORCE : -Wall -Wno-clobbered -Wno-vla -Wno-pragmas -Wno-unknown-pragmas -Wno-unused-local-typedefs -Wno-literal-suffix -Wno-deprecated-declarations -Wno-misleading-indentation -Wno-int-in-bool-context -Wno-maybe-uninitialized -Wno-nonnull-compare -Wno-address -Wno-inline - -use RHEL7_POST - -[rhel7_sems-gnu-8.5.0-openmpi-4.1.6-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses sems-v2 modules -use rhel7_sems-gnu-8.5.0-openmpi-4.1.6-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_cxx-20-sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -use rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL -opt-set-cmake-var CMAKE_CXX_STANDARD STRING FORCE : 20 - -[rhel7_sems-v2-gnu-8.3.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses sems-v2 modules -use RHEL7_SEMS_COMPILER|GNU - -use NODE-TYPE|SERIAL -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_V2_LIB-TYPE|SHARED -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-ASAN|NO -use USE-COMPLEX|NO -use USE-FPIC|NO -use USE-MPI|NO -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -use COMMON_SPACK_TPLS - -opt-set-cmake-var Trilinos_ENABLE_Fortran OFF BOOL : OFF -opt-set-cmake-var CMAKE_CXX_FLAGS STRING : -Wall -Wno-clobbered -Wno-vla -Wno-pragmas -Wno-unknown-pragmas -Wno-parentheses -Wno-unused-local-typedefs -Wno-literal-suffix -Wno-deprecated-declarations -Wno-misleading-indentation -Wno-int-in-bool-context -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-nonnull-compare -Wno-address -Wno-inline -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unused-label -Wno-error -opt-set-cmake-var TPL_ENABLE_ParMETIS BOOL FORCE : OFF -opt-set-cmake-var TPL_ENABLE_Pnetcdf BOOL FORCE : OFF -opt-set-cmake-var TPL_Netcdf_LIBRARIES STRING FORCE : -L${NETCDF_C_LIB|ENV};${NETCDF_C_LIB|ENV}/libnetcdf.a;${TPL_HDF5_LIBRARIES|CMAKE} - -# Under loading and debug, these Tempus run too long and timeout (fail). 2023-12-21 -opt-set-cmake-var Tempus_BackwardEuler_CDR_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_VanDerPol_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BackwardEuler_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BDF2_CDR_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_BDF2_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_ASA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Combined_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Combined_FSA_SDIRK_5_Stage_5th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_5th_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_ExplicitRK_ASA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_HHTAlpha_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Combined_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Combined_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_General_Partioned_IMEX_RK_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Partitioned_Staggered_FSA_Tangent_Partitioned_IMEX_RK_1st_Order_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_IMEX_RK_Staggered_FSA_Tangent_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Newmark_MPI_1_DISABLE BOOL FORCE : ON -opt-set-cmake-var Tempus_Test_NewmarkImplicitAForm_HarmonicOscillator_Damped_FirstOrder_MPI_1_DISABLE BOOL FORCE : ON - -use RHEL7_POST - -[rhel7_sems-v2-gnu-8.3.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses sems-v2 modules -use rhel7_sems-v2-gnu-8.3.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.7-openmp_release-debug_static_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] -# uses sems-v2 modules -use RHEL7_SEMS_COMPILER|GNU -use NODE-TYPE|OPENMP -use BUILD-TYPE|RELEASE-DEBUG -use RHEL7_SEMS_V2_LIB-TYPE|STATIC -use KOKKOS-ARCH|NO-KOKKOS-ARCH -use USE-COMPLEX|NO -use USE-ASAN|NO -use USE-FPIC|NO -use USE-MPI|YES -use USE-PT|NO -use USE-RDC|NO -use USE-UVM|NO -use USE-DEPRECATED|YES -use PACKAGE-ENABLES|NO-PACKAGE-ENABLES - -use COMMON_SPACK_TPLS -opt-set-cmake-var MPI_EXEC_PRE_NUMPROCS_FLAGS STRING : --bind-to;none --mca btl vader,self -opt-set-cmake-var CMAKE_CXX_EXTENSIONS BOOL : OFF -opt-set-cmake-var Teko_DISABLE_LSCSTABALIZED_TPETRA_ALPAH_INV_D BOOL : ON -opt-set-cmake-var CMAKE_CXX_FLAGS STRING : -fno-strict-aliasing -Wall -Wno-clobbered -Wno-vla -Wno-pragmas -Wno-unknown-pragmas -Wno-parentheses -Wno-unused-local-typedefs -Wno-literal-suffix -Wno-deprecated-declarations -Wno-misleading-indentation -Wno-int-in-bool-context -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-inline -Wno-nonnull-compare -Wno-address -Werror - -use RHEL7_POST - -[rhel7_sems-gnu-8.3.0-openmpi-1.10.7-openmp_release-debug_static_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_all] -# uses sems-v2 modules -use rhel7_sems-gnu-8.3.0-openmpi-1.10.7-openmp_release-debug_static_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables -use PACKAGE-ENABLES|ALL - [rhel8_sems-gnu-8.5.0-serial_release-debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_no-mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables] use COMPILER|GNU use NODE-TYPE|SERIAL @@ -3270,7 +1899,7 @@ use COMPILER|GNU use NODE-TYPE|SERIAL use BUILD-TYPE|DEBUG -use RHEL8_LIB-TYPE|SHARED +use LIB-TYPE|SHARED use KOKKOS-ARCH|NO-KOKKOS-ARCH use USE-ASAN|NO @@ -3326,7 +1955,7 @@ use COMPILER|GNU use NODE-TYPE|SERIAL use BUILD-TYPE|RELEASE-DEBUG -use RHEL8_LIB-TYPE|SHARED +use LIB-TYPE|SHARED use KOKKOS-ARCH|NO-KOKKOS-ARCH use USE-ASAN|NO @@ -3367,7 +1996,7 @@ use COMPILER|GNU use NODE-TYPE|SERIAL use BUILD-TYPE|DEBUG -use RHEL8_LIB-TYPE|SHARED +use LIB-TYPE|SHARED use KOKKOS-ARCH|NO-KOKKOS-ARCH use USE-ASAN|NO @@ -3508,7 +2137,10 @@ use BUILD-TYPE|RELEASE opt-set-cmake-var BUILD_SHARED_LIBS BOOL : OFF opt-set-cmake-var TPL_FIND_SHARED_LIBS BOOL : OFF use KOKKOS-ARCH|AMPERE80 -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO +use USE-ASAN|NO +use USE-FPIC|NO +use USE-MPI|YES +use USE-PT|NO use USE-COMPLEX|YES use USE-RDC|NO use USE-UVM|NO @@ -3522,7 +2154,10 @@ use BUILD-TYPE|RELEASE opt-set-cmake-var BUILD_SHARED_LIBS BOOL : OFF opt-set-cmake-var TPL_FIND_SHARED_LIBS BOOL : OFF use KOKKOS-ARCH|AMPERE80 -use RHEL7_SEMS_USE-ASAN|NO_USE-FPIC|NO_USE-MPI|YES_USE-PT|NO +use USE-ASAN|NO +use USE-FPIC|NO +use USE-MPI|YES +use USE-PT|NO use USE-COMPLEX|YES use USE-RDC|NO use USE-UVM|YES diff --git a/packages/framework/pr_tools/PullRequestLinuxDriver.sh b/packages/framework/pr_tools/PullRequestLinuxDriver.sh index cecf35f9b989..f2d29e90f7b6 100755 --- a/packages/framework/pr_tools/PullRequestLinuxDriver.sh +++ b/packages/framework/pr_tools/PullRequestLinuxDriver.sh @@ -190,10 +190,7 @@ print_banner "Launch the Test Driver" # Prepare the command for the TEST operation test_cmd_options=( - --source-repo-url=${TRILINOS_SOURCE_REPO:?} - --target-repo-url=${TRILINOS_TARGET_REPO:?} --target-branch-name=${TRILINOS_TARGET_BRANCH:?} - --pullrequest-build-name=${JOB_BASE_NAME:?} --genconfig-build-name=${GENCONFIG_BUILD_NAME:?} --pullrequest-env-config-file=${LOADENV_CONFIG_FILE:?} --pullrequest-gen-config-file=${GENCONFIG_CONFIG_FILE:?} diff --git a/packages/framework/pr_tools/PullRequestLinuxDriverTest.py b/packages/framework/pr_tools/PullRequestLinuxDriverTest.py index f571478bdd4f..10a391f1cf18 100755 --- a/packages/framework/pr_tools/PullRequestLinuxDriverTest.py +++ b/packages/framework/pr_tools/PullRequestLinuxDriverTest.py @@ -70,14 +70,16 @@ def parse_args(): required.add_argument('--source-repo-url', dest="source_repo_url", action='store', + default="UNKNOWN", help='Repo with the new changes', - required=True) + required=False) required.add_argument('--target-repo-url', dest="target_repo_url", action='store', + default="UNKNOWN", help='Repo to merge into', - required=True) + required=False) required.add_argument('--target-branch-name', dest="target_branch_name", @@ -88,8 +90,9 @@ def parse_args(): required.add_argument('--pullrequest-build-name', dest="pullrequest_build_name", action='store', + default="UNKNOWN", help='The Jenkins job base name', - required=True) + required=False) required.add_argument('--genconfig-build-name', dest="genconfig_build_name", @@ -106,8 +109,9 @@ def parse_args(): required.add_argument('--jenkins-job-number', dest="jenkins_job_number", action='store', + default="UNKNOWN", help='The Jenkins build number', - required=True) + required=False) optional.add_argument('--dashboard-build-name', dest="dashboard_build_name", diff --git a/packages/framework/pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py b/packages/framework/pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py index 99b30697985b..bb503b9d17a9 100644 --- a/packages/framework/pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py +++ b/packages/framework/pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py @@ -480,10 +480,12 @@ def pullrequest_build_name(self): """ Generate the build name string to report back to CDash. - PR--test-- + PR--test-- """ if "Pull Request" in self.arg_pullrequest_cdash_track: - output = "PR-{}-test-{}-{}".format(self.arg_pullrequest_number, self.arg_pr_genconfig_job_name, self.arg_jenkins_job_number) + output = f"PR-{self.arg_pullrequest_number}-test-{self.arg_pr_genconfig_job_name}" + if not self.arg_jenkins_job_number or "UNKNOWN" not in str(self.arg_jenkins_job_number): + output = f"{output}-{self.arg_jenkins_job_number}" elif self.arg_dashboard_build_name != "__UNKNOWN__": output = self.arg_dashboard_build_name else: diff --git a/packages/framework/pr_tools/unittests/test_PullRequestLinuxDriverTest.py b/packages/framework/pr_tools/unittests/test_PullRequestLinuxDriverTest.py index 4b3d7209a686..2d8ead2e8d4f 100755 --- a/packages/framework/pr_tools/unittests/test_PullRequestLinuxDriverTest.py +++ b/packages/framework/pr_tools/unittests/test_PullRequestLinuxDriverTest.py @@ -116,12 +116,13 @@ def setUp(self): ''') self.help_output = dedent('''\ - usage: programName [-h] --source-repo-url SOURCE_REPO_URL --target-repo-url - TARGET_REPO_URL --target-branch-name TARGET_BRANCH_NAME - --pullrequest-build-name PULLREQUEST_BUILD_NAME + usage: programName [-h] [--source-repo-url SOURCE_REPO_URL] + [--target-repo-url TARGET_REPO_URL] --target-branch-name + TARGET_BRANCH_NAME + [--pullrequest-build-name PULLREQUEST_BUILD_NAME] --genconfig-build-name GENCONFIG_BUILD_NAME --pullrequest-number PULLREQUEST_NUMBER - --jenkins-job-number JENKINS_JOB_NUMBER + [--jenkins-job-number JENKINS_JOB_NUMBER] [--dashboard-build-name DASHBOARD_BUILD_NAME] [--source-dir SOURCE_DIR] [--build-dir BUILD_DIR] [--use-explicit-cachefile] [--ctest-driver CTEST_DRIVER] @@ -225,12 +226,12 @@ def setUp(self): ''') self.usage_output = dedent('''\ - usage: programName [-h] --source-repo-url SOURCE_REPO_URL --target-repo-url TARGET_REPO_URL + usage: programName [-h] [--source-repo-url SOURCE_REPO_URL] [--target-repo-url TARGET_REPO_URL] --target-branch-name TARGET_BRANCH_NAME - --pullrequest-build-name PULLREQUEST_BUILD_NAME + [--pullrequest-build-name PULLREQUEST_BUILD_NAME] --genconfig-build-name GENCONFIG_BUILD_NAME --pullrequest-number PULLREQUEST_NUMBER - --jenkins-job-number JENKINS_JOB_NUMBER + [--jenkins-job-number JENKINS_JOB_NUMBER] [--dashboard-build-name DASHBOARD_BUILD_NAME] [--source-dir SOURCE_DIR] [--build-dir BUILD_DIR] [--use-explicit-cachefile] [--ctest-driver CTEST_DRIVER] @@ -246,7 +247,7 @@ def setUp(self): [--max-cores-allowed MAX_CORES_ALLOWED] [--num-concurrent-tests NUM_CONCURRENT_TESTS] [--enable-ccache] [--dry-run] [--extra-configure-args EXTRA_CONFIGURE_ARGS] - programName: error: the following arguments are required: --source-repo-url, --target-repo-url, --target-branch-name, --pullrequest-build-name, --genconfig-build-name, --pullrequest-number, --jenkins-job-number + programName: error: the following arguments are required: --target-branch-name, --genconfig-build-name, --pullrequest-number ''') self.m_cwd = mock.patch('PullRequestLinuxDriverTest.os.getcwd', diff --git a/packages/intrepid2/src/Cell/CMakeLists.txt b/packages/intrepid2/src/Cell/CMakeLists.txt index 2ba21e538c3d..5cc1857b63da 100644 --- a/packages/intrepid2/src/Cell/CMakeLists.txt +++ b/packages/intrepid2/src/Cell/CMakeLists.txt @@ -2,4 +2,8 @@ SET(HEADERS_IN_THIS_DIR "") FILE(GLOB HEADERS_IN_THIS_DIR *.hpp) +FILE(GLOB SOURCES_IN_THIS_DIR *.cpp) + SET(HEADERS ${HEADERS} ${HEADERS_IN_THIS_DIR} PARENT_SCOPE) + +SET( SOURCES ${SOURCES} ${SOURCES_IN_THIS_DIR} PARENT_SCOPE) diff --git a/packages/intrepid2/src/Cell/Intrepid2_CellData.cpp b/packages/intrepid2/src/Cell/Intrepid2_CellData.cpp new file mode 100644 index 000000000000..7fd508035a2f --- /dev/null +++ b/packages/intrepid2/src/Cell/Intrepid2_CellData.cpp @@ -0,0 +1,91 @@ +// @HEADER +// ***************************************************************************** +// Intrepid2 Package +// +// Copyright 2007 NTESS and the Intrepid2 contributors. +// SPDX-License-Identifier: BSD-3-Clause +// ***************************************************************************** +// @HEADER + +/** \file Intrepid2_CellData.cpp + \brief Definition file for CellData + \author Mauro Perego + */ + +#ifndef __INTREPID2_CELLDATA_CPP__ +#define __INTREPID2_CELLDATA_CPP__ + +#include "Intrepid2_CellData.hpp" + +const CellTopologyData* +Intrepid2::getCellTopologyData(const unsigned& cellTopologyKey){ + const CellTopologyData* cellTopologyData; + switch (cellTopologyKey) { + case shards::Line<2>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Triangle<3>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Quadrilateral<4>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Tetrahedron<4>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Hexahedron<8>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Wedge<6>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Pyramid<5>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + + case shards::Line<3>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Triangle<6>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Quadrilateral<8>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Quadrilateral<9>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Tetrahedron<10>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Tetrahedron<11>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Hexahedron<20>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Hexahedron<27>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Wedge<15>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Wedge<18>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Pyramid<13>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + case shards::Pyramid<14>::key: + cellTopologyData = shards::getCellTopologyData>(); + break; + default: { + INTREPID2_TEST_FOR_EXCEPTION( true, std::invalid_argument, + ">>> ERROR (Intrepid2::getBaseCellTopology): invalid cell topology."); + } + } + return cellTopologyData; +} + +#endif + diff --git a/packages/intrepid2/src/Cell/Intrepid2_CellData.hpp b/packages/intrepid2/src/Cell/Intrepid2_CellData.hpp index a4bcad3b089a..6a762248430a 100644 --- a/packages/intrepid2/src/Cell/Intrepid2_CellData.hpp +++ b/packages/intrepid2/src/Cell/Intrepid2_CellData.hpp @@ -410,6 +410,8 @@ template check(const PointViewType &point, const ScalarType threshold); }; + const CellTopologyData* getCellTopologyData(const unsigned& cellTopologyKey); + } #include "Intrepid2_CellDataDef.hpp" diff --git a/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp b/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp index 6d9070dfda32..7e14c0e9bb4b 100644 --- a/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp +++ b/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp @@ -831,6 +831,7 @@ refCenterDataStatic_ = { bool PointInclusion::key>:: check(const PointViewType &point, const ScalarType threshold) { + //this implementation should work when PointType is a Sacado Fad const ScalarType minus_one = -1.0 - threshold, plus_one = 1.0 + threshold; return (minus_one <= point(0) && point(0) <= plus_one); } @@ -840,7 +841,10 @@ refCenterDataStatic_ = { bool PointInclusion::key>:: check(const PointViewType &point, const ScalarType threshold) { - const ScalarType distance = max( max( -point(0), -point(1) ), point(0) + point(1) - 1.0 ); + //this implementation should work when PointType is a Sacado Fad + using PointType = typename PointViewType::value_type; + const PointType one = 1.0; + const PointType distance = max( max( -point(0), -point(1) ), point(0) + point(1) - one ); return distance < threshold; } @@ -848,8 +852,8 @@ refCenterDataStatic_ = { KOKKOS_INLINE_FUNCTION bool PointInclusion::key>:: - check(const PointViewType &point, - const ScalarType threshold) { + check(const PointViewType &point, const ScalarType threshold) { + //this implementation should work when PointType is a Sacado Fad const ScalarType minus_one = -1.0 - threshold, plus_one = 1.0 + threshold; return ((minus_one <= point(0) && point(0) <= plus_one) && (minus_one <= point(1) && point(1) <= plus_one)); @@ -860,8 +864,11 @@ refCenterDataStatic_ = { bool PointInclusion::key>:: check(const PointViewType &point, const ScalarType threshold) { - const ScalarType distance = max( max(-point(0),-point(1)), - max(-point(2), point(0) + point(1) + point(2) - 1) ); + //this implementation should work when PointType is a Sacado Fad + using PointType = typename PointViewType::value_type; + const PointType one = 1.0; + const PointType distance = max( max(-point(0),-point(1)), + max(-point(2), point(0) + point(1) + point(2) - one) ); return distance < threshold; } @@ -870,6 +877,7 @@ refCenterDataStatic_ = { bool PointInclusion::key>:: check(const PointViewType &point, const ScalarType threshold) { + //this implementation should work when PointType is a Sacado Fad const ScalarType minus_one = -1.0 - threshold, plus_one = 1.0 + threshold; return ((minus_one <= point(0) && point(0) <= plus_one) && (minus_one <= point(1) && point(1) <= plus_one) && @@ -881,9 +889,11 @@ refCenterDataStatic_ = { bool PointInclusion::key>:: check(const PointViewType &point, const ScalarType threshold) { - const ScalarType minus_one = -1.0 - threshold, plus_one = 1.0 + threshold, minus_zero = -threshold; - const ScalarType left = minus_one + point(2); - const ScalarType right = plus_one - point(2); + //this implementation should work when PointType is a Sacado Fad + using PointType = typename PointViewType::value_type; + const PointType minus_one = -1.0 - threshold, plus_one = 1.0 + threshold, minus_zero = -threshold; + const PointType left = minus_one + point(2); + const PointType right = plus_one - point(2); return ((left <= point(0) && point(0) <= right) && (left <= point(1) && point(1) <= right) && (minus_zero <= point(2) && point(2) <= plus_one)); @@ -894,8 +904,11 @@ refCenterDataStatic_ = { bool PointInclusion::key>:: check(const PointViewType &point, const ScalarType threshold) { + //this implementation should work when PointType is a Sacado Fad + using PointType = typename PointViewType::value_type; const ScalarType minus_one = -1.0 - threshold, plus_one = 1.0 + threshold; - const ScalarType distance = max( max( -point(0), -point(1) ), point(0) + point(1) - 1 ); + const PointType one = 1.0; + const PointType distance = max( max( -point(0), -point(1) ), point(0) + point(1) - one ); return (distance < threshold && (minus_one <= point(2) && point(2) <= plus_one)); } diff --git a/packages/intrepid2/src/Cell/Intrepid2_CellToolsDefInclusion.hpp b/packages/intrepid2/src/Cell/Intrepid2_CellToolsDefInclusion.hpp index 1d9ecfe94b63..dfb3e04b0cf0 100644 --- a/packages/intrepid2/src/Cell/Intrepid2_CellToolsDefInclusion.hpp +++ b/packages/intrepid2/src/Cell/Intrepid2_CellToolsDefInclusion.hpp @@ -184,6 +184,10 @@ namespace Intrepid2 { checkPointwiseInclusion::key,decltype(inCell),decltype(points)>(inCell, points, threshold); break; + case shards::Tetrahedron<>::key : + checkPointwiseInclusion::key,decltype(inCell),decltype(points)>(inCell, points, threshold); + break; + case shards::Hexahedron<>::key : checkPointwiseInclusion::key,decltype(inCell),decltype(points)>(inCell, points, threshold); break; @@ -197,13 +201,7 @@ namespace Intrepid2 { break; default: - INTREPID2_TEST_FOR_EXCEPTION( !( (key == shards::Line<>::key ) || - (key == shards::Triangle<>::key) || - (key == shards::Quadrilateral<>::key) || - (key == shards::Tetrahedron<>::key) || - (key == shards::Hexahedron<>::key) || - (key == shards::Wedge<>::key) || - (key == shards::Pyramid<>::key) ), + INTREPID2_TEST_FOR_EXCEPTION( false, std::invalid_argument, ">>> ERROR (Intrepid2::CellTools::checkPointInclusion): Invalid cell topology. "); } diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_Basis.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_Basis.hpp index be9356cb9741..74b34efb6681 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_Basis.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_Basis.hpp @@ -24,6 +24,7 @@ #include "Intrepid2_CellTopologyTags.hpp" #include "Intrepid2_TensorPoints.hpp" #include "Shards_CellTopology.hpp" +#include "Intrepid2_CellData.hpp" #include #include @@ -164,14 +165,14 @@ using HostBasisPtr = BasisPtrShards package for definition of base cell topology. For TensorBasis subclasses, by default this the cell topology that is extruded (i.e., it is a lower-dimensional CellTopology than the space on which the tensor basis is defined). This allows tensor bases to be defined in higher dimensions than shards::CellTopology supports. TensorBasis subclasses can - opt to use an equivalent shards CellTopology for basisCellTopology_, as well as using Intrepid2's tagging for tensor bases in dimensions up to 3, by calling + opt to use an equivalent shards CellTopology for base topology, as well as using Intrepid2's tagging for tensor bases in dimensions up to 3, by calling TensorBasis::setShardsTopologyAndTags(). */ - shards::CellTopology basisCellTopology_; + unsigned basisCellTopologyKey_; /** \brief Type of the basis */ @@ -776,7 +777,7 @@ using HostBasisPtr = BasisPtrgetCardinality(); - const int spaceDim = basisCellTopology_.getDimension() + this->getNumTensorialExtrusions(); + const int spaceDim = this->getBaseCellTopology().getDimension() + this->getNumTensorialExtrusions(); using OutputViewAllocatable = Kokkos::DynRankView; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_DirectSumBasis.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_DirectSumBasis.hpp index fbdd584bb51d..23ddf54dc173 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_DirectSumBasis.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_DirectSumBasis.hpp @@ -77,9 +77,9 @@ namespace Intrepid2 name_ = basisName.str(); } - this->basisCellTopology_ = basis1->getBaseCellTopology(); - this->basisType_ = basis1->getBasisType(); - this->basisCoordinates_ = basis1->getCoordinateSystem(); + this->basisCellTopologyKey_ = basis1->getBaseCellTopology().getKey(); + this->basisType_ = basis1->getBasisType(); + this->basisCoordinates_ = basis1->getCoordinateSystem(); if (this->basisType_ == BASIS_FEM_HIERARCHICAL) { @@ -126,7 +126,7 @@ namespace Intrepid2 OrdinalTypeArray1DHost tagView("tag view", cardinality*tagSize); - shards::CellTopology cellTopo = this->basisCellTopology_; + shards::CellTopology cellTopo(getCellTopologyData(this->basisCellTopologyKey_)); unsigned spaceDim = cellTopo.getDimension(); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_I1_FEM.hpp index 63f68324537a..299054557fca 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_I1_FEM.hpp @@ -196,7 +196,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_HEX_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_HEX_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_I1_FEMDef.hpp index 3c21395cdaa0..7eff91667e1b 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_I1_FEMDef.hpp @@ -242,12 +242,13 @@ namespace Intrepid2 { template Basis_HCURL_HEX_I1_FEM:: Basis_HCURL_HEX_I1_FEM() { - this->basisCardinality_ = 12; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 12; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Hexahedron<8>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; // initialize tags { @@ -287,7 +288,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; dofCoords(1,2) = -1.0; @@ -308,7 +309,7 @@ namespace Intrepid2 { // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); // for HCURL_HEX_I1 dofCoeffs are the tangents on the hexahedron edges dofCoeffs(0,0) = 1.0; dofCoeffs(0,1) = 0.0; dofCoeffs(0,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_In_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_In_FEMDef.hpp index 4afde3a8a730..1d18b7887096 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_In_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_HEX_In_FEMDef.hpp @@ -343,12 +343,13 @@ namespace Intrepid2 { lineBasis.getVandermondeInverse(this->vinvLine_); bubbleBasis.getVandermondeInverse(this->vinvBubble_); - this->basisCardinality_ = 3*cardLine*cardLine*cardBubble; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 3*cardLine*cardLine*cardBubble; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Hexahedron<8>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; pointType_ = pointType; // initialize tags @@ -523,11 +524,11 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoordsHost("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoordsHost("dofCoordsHost", this->basisCardinality_, spaceDim); // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoeffsHost("dofCoeffsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoeffsHost("dofCoeffsHost", this->basisCardinality_, spaceDim); Kokkos::DynRankView dofCoordsLine("dofCoordsLine", cardLine, 1), diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_I1_FEM.hpp index 061fe47b1260..15f266e2db91 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_I1_FEM.hpp @@ -189,7 +189,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_I1_FEMDef.hpp index ad9d32f75a48..548929fb74cc 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_I1_FEMDef.hpp @@ -154,12 +154,13 @@ namespace Intrepid2 { template Basis_HCURL_QUAD_I1_FEM:: Basis_HCURL_QUAD_I1_FEM() { - this->basisCardinality_ = 4; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = 4; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; // initialize tags { @@ -192,7 +193,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; @@ -205,7 +206,7 @@ namespace Intrepid2 { // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); // for HCURL_QUAD_I1 dofCoeffs are the tangents on the quadrilateral edges (with tangents magnitude equal to edges' lengths) dofCoeffs(0,0) = 1.0; dofCoeffs(0,1) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_In_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_In_FEMDef.hpp index 5a07e795a89e..13a732abb88d 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_In_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_QUAD_In_FEMDef.hpp @@ -233,12 +233,13 @@ namespace Intrepid2 { lineBasis.getVandermondeInverse(this->vinvLine_); bubbleBasis.getVandermondeInverse(this->vinvBubble_); - this->basisCardinality_ = 2*cardLine*cardBubble; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = 2*cardLine*cardBubble; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; pointType_ = pointType; // initialize tags @@ -338,11 +339,11 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoordsHost("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoordsHost("dofCoordsHost", this->basisCardinality_, spaceDim); // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffsHost("dofCoeffsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoeffsHost("dofCoeffsHost", this->basisCardinality_, spaceDim); Kokkos::DynRankView dofCoordsLine("dofCoordsLine", cardLine, 1), diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_I1_FEM.hpp index 53e7c8c69bf2..6d90318a4961 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_I1_FEM.hpp @@ -195,7 +195,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_TET_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_TET_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_I1_FEMDef.hpp index 5797f13e7d32..9c3d2b2d1c23 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_I1_FEMDef.hpp @@ -187,12 +187,13 @@ namespace Intrepid2 { template< typename DT, typename OT, typename PT > Basis_HCURL_TET_I1_FEM:: Basis_HCURL_TET_I1_FEM() { - this->basisCardinality_ = 6; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 6; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; // initialize tags { @@ -226,7 +227,7 @@ namespace Intrepid2 { } // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.5; dofCoords(0,1) = 0.0; dofCoords(0,2) = 0.0; dofCoords(1,0) = 0.5; dofCoords(1,1) = 0.5; dofCoords(1,2) = 0.0; @@ -240,7 +241,7 @@ namespace Intrepid2 { // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); dofCoeffs(0,0) = 0.5; dofCoeffs(0,1) = 0.0; dofCoeffs(0,2) = 0.0; dofCoeffs(1,0) = -0.5; dofCoeffs(1,1) = 0.5; dofCoeffs(1,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_In_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_In_FEMDef.hpp index 58b5948aaced..8bb82254291f 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_In_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TET_In_FEMDef.hpp @@ -164,12 +164,12 @@ Basis_HCURL_TET_In_FEM( const ordinal_type order, const EPointType pointType ) { constexpr ordinal_type spaceDim = 3; - this->basisCardinality_ = CardinalityHCurlTet(order); - this->basisDegree_ = order; // small n - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + this->basisCardinality_ = CardinalityHCurlTet(order); + this->basisDegree_ = order; // small n + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; pointType_ = pointType; const ordinal_type card = this->basisCardinality_; @@ -292,24 +292,25 @@ Basis_HCURL_TET_In_FEM( const ordinal_type order, Kokkos::DynRankView V2("Hcurl::Tet::In::V2", card ,cardVecPn); - const ordinal_type numEdges = this->basisCellTopology_.getEdgeCount(); - const ordinal_type numFaces = this->basisCellTopology_.getFaceCount(); + shards::CellTopology cellTopo(shards::getCellTopologyData >()); + const ordinal_type numEdges = cellTopo.getEdgeCount(); + const ordinal_type numFaces = cellTopo.getFaceCount(); // first numEdges * degree nodes are normals at each edge // get the points on the line - shards::CellTopology edgeTop(shards::getCellTopologyData >() ); - shards::CellTopology faceTop(shards::getCellTopologyData >() ); + shards::CellTopology edgeTopo(shards::getCellTopologyData >() ); + shards::CellTopology faceTopo(shards::getCellTopologyData >() ); - const int numPtsPerEdge = PointTools::getLatticeSize( edgeTop , + const int numPtsPerEdge = PointTools::getLatticeSize( edgeTopo , order+1 , 1 ); - const int numPtsPerFace = PointTools::getLatticeSize( faceTop , + const int numPtsPerFace = PointTools::getLatticeSize( faceTopo , order+1 , 1 ); - const int numPtsPerCell = PointTools::getLatticeSize( this->basisCellTopology_ , + const int numPtsPerCell = PointTools::getLatticeSize( cellTopo , order+1 , 1 ); @@ -322,12 +323,12 @@ Basis_HCURL_TET_In_FEM( const ordinal_type order, PointTools::getLattice( linePts, - edgeTop, + edgeTopo, order+1, offset, pointType ); PointTools::getLattice( triPts, - faceTop, + faceTopo, order+1, offset, pointType ); @@ -343,13 +344,13 @@ Basis_HCURL_TET_In_FEM( const ordinal_type order, for (ordinal_type i=0;i::getReferenceEdgeTangent( edgeTan , i , - this->basisCellTopology_ ); + cellTopo ); CellTools::mapToReferenceSubcell( edgePts , linePts , 1 , i , - this->basisCellTopology_); + cellTopo ); Impl::Basis_HGRAD_TET_Cn_FEM_ORTH::getValues(typename Kokkos::HostSpace::execution_space{}, phisAtEdgePoints, @@ -389,13 +390,13 @@ Basis_HCURL_TET_In_FEM( const ordinal_type order, CellTools::getReferenceFaceTangents( faceTan1 , faceTan2, i , - this->basisCellTopology_ ); + cellTopo ); CellTools::mapToReferenceSubcell( facePts , triPts , 2 , i , - this->basisCellTopology_ ); + cellTopo ); Impl::Basis_HGRAD_TET_Cn_FEM_ORTH::getValues(typename Kokkos::HostSpace::execution_space{}, phisAtFacePoints, @@ -444,7 +445,7 @@ Basis_HCURL_TET_In_FEM( const ordinal_type order, Kokkos::DynRankView cellPoints( "Hcurl::Tet::In::cellPoints", numPtsPerCell , spaceDim ); PointTools::getLattice( cellPoints , - this->basisCellTopology_ , + cellTopo , order + 1 , 1 , pointType ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_I1_FEM.hpp index e26cc62e2d3a..816b999560a6 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_I1_FEM.hpp @@ -198,7 +198,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_TRI_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_TRI_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_I1_FEMDef.hpp index 8e3243601416..85e639ea8f10 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_I1_FEMDef.hpp @@ -148,12 +148,13 @@ namespace Intrepid2 { template< typename DT, typename OT, typename PT > Basis_HCURL_TRI_I1_FEM:: Basis_HCURL_TRI_I1_FEM() { - this->basisCardinality_ = 3; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = 3; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; // initialize tags { @@ -185,7 +186,7 @@ namespace Intrepid2 { } // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.5; dofCoords(0,1) = 0.0; dofCoords(1,0) = 0.5; dofCoords(1,1) = 0.5; @@ -196,7 +197,7 @@ namespace Intrepid2 { // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); dofCoeffs(0,0) = 0.5; dofCoeffs(0,1) = 0.0; dofCoeffs(1,0) = -0.5; dofCoeffs(1,1) = 0.5; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_In_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_In_FEMDef.hpp index 46765e86610f..7d10682a5e45 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_In_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_TRI_In_FEMDef.hpp @@ -158,12 +158,12 @@ namespace Intrepid2 { const EPointType pointType ) { constexpr ordinal_type spaceDim = 2; - this->basisCardinality_ = CardinalityHCurlTri(order); - this->basisDegree_ = order; // small n - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + this->basisCardinality_ = CardinalityHCurlTri(order); + this->basisDegree_ = order; // small n + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; pointType_ = (pointType == POINTTYPE_DEFAULT) ? POINTTYPE_EQUISPACED : pointType; const ordinal_type card = this->basisCardinality_; @@ -250,11 +250,12 @@ namespace Intrepid2 { Kokkos::DynRankView V2("Hcurl::Tri::In::V2", card ,cardVecPn); - const ordinal_type numEdges = this->basisCellTopology_.getEdgeCount(); + const shards::CellTopology cellTopo(shards::getCellTopologyData>()); + const ordinal_type numEdges = cellTopo.getEdgeCount(); - shards::CellTopology edgeTop(shards::getCellTopologyData >() ); + shards::CellTopology edgeTopo(shards::getCellTopologyData >() ); - const int numPtsPerEdge = PointTools::getLatticeSize( edgeTop , + const int numPtsPerEdge = PointTools::getLatticeSize( edgeTopo , order+1 , 1 ); @@ -265,7 +266,7 @@ namespace Intrepid2 { // construct lattice const ordinal_type offset = 1; PointTools::getLattice( linePts, - edgeTop, + edgeTopo, order+1, offset, pointType_ ); @@ -278,13 +279,13 @@ namespace Intrepid2 { for (ordinal_type edge=0;edge::getReferenceEdgeTangent( edgeTan , edge , - this->basisCellTopology_ ); + cellTopo ); CellTools::mapToReferenceSubcell( edgePts , linePts , 1 , edge , - this->basisCellTopology_ ); + cellTopo ); Impl::Basis_HGRAD_TRI_Cn_FEM_ORTH::getValues(typename Kokkos::HostSpace::execution_space{}, phisAtEdgePoints, @@ -325,7 +326,7 @@ namespace Intrepid2 { // the degree == 1 space corresponds classicaly to RT0 and so gets // no internal nodes, and degree == 2 corresponds to RT1 and needs // one internal node per vector component. - const ordinal_type numPtsPerCell = PointTools::getLatticeSize( this->basisCellTopology_ , + const ordinal_type numPtsPerCell = PointTools::getLatticeSize( cellTopo , order + 1 , 1 ); @@ -333,7 +334,7 @@ namespace Intrepid2 { Kokkos::DynRankView internalPoints( "Hcurl::Tri::In::internalPoints", numPtsPerCell , spaceDim ); PointTools::getLattice( internalPoints , - this->basisCellTopology_ , + cellTopo , order + 1 , 1 , pointType_ ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_WEDGE_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_WEDGE_I1_FEM.hpp index f9b1736f2350..c7587cf3eec1 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_WEDGE_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_WEDGE_I1_FEM.hpp @@ -196,7 +196,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_WEDGE_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HCURL_WEDGE_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_WEDGE_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_WEDGE_I1_FEMDef.hpp index 3a6ad50c564c..59ad4da436e8 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_WEDGE_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HCURL_WEDGE_I1_FEMDef.hpp @@ -197,12 +197,13 @@ namespace Intrepid2 { template Basis_HCURL_WEDGE_I1_FEM:: Basis_HCURL_WEDGE_I1_FEM() { - this->basisCardinality_ = 9; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 9; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Wedge<6>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; // initialize tags @@ -240,7 +241,7 @@ namespace Intrepid2 { } // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.5; dofCoords(0,1) = 0.0; dofCoords(0,2) = -1.0; dofCoords(1,0) = 0.5; dofCoords(1,1) = 0.5; dofCoords(1,2) = -1.0; @@ -257,7 +258,7 @@ namespace Intrepid2 { // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); // for HCURL_WEDGE_I1 dofCoeffs are the tangents on the hexahedron edges dofCoeffs(0,0) = 0.5; dofCoeffs(0,1) = 0.0; dofCoeffs(0,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_I1_FEM.hpp index 7ebb9ec778f7..1de1d7c654c7 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_I1_FEM.hpp @@ -201,7 +201,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_HEX_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_HEX_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_I1_FEMDef.hpp index 826e04dbaaa2..79e9aaef60f8 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_I1_FEMDef.hpp @@ -168,12 +168,13 @@ namespace Intrepid2 { template Basis_HDIV_HEX_I1_FEM:: Basis_HDIV_HEX_I1_FEM() { - this->basisCardinality_ = 6; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 6; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Hexahedron<8>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; // initialize tags { @@ -206,7 +207,7 @@ namespace Intrepid2 { } // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = 0.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; dofCoords(1,2) = 0.0; @@ -220,7 +221,7 @@ namespace Intrepid2 { // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); // for HDIV_HEX_I1 dofCoeffs are the normals on the hexahedron faces (with normals magnitude equal to faces' areas) dofCoeffs(0,0) = 0.0; dofCoeffs(0,1) = -1.0; dofCoeffs(0,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_In_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_In_FEMDef.hpp index b08e4c20e3c5..0bae2c8b1b3d 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_In_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_HEX_In_FEMDef.hpp @@ -309,12 +309,13 @@ namespace Intrepid2 { lineBasis.getVandermondeInverse(this->vinvLine_); bubbleBasis.getVandermondeInverse(this->vinvBubble_); - this->basisCardinality_ = 3*cardLine*cardBubble*cardBubble; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 3*cardLine*cardBubble*cardBubble; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Hexahedron<8>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; pointType_ = pointType; // initialize tags @@ -443,11 +444,11 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoordsHost("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoordsHost("dofCoordsHost", this->basisCardinality_, spaceDim); // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffsHost("dofCoeffsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoeffsHost("dofCoeffsHost", this->basisCardinality_, spaceDim); Kokkos::DynRankView dofCoordsLine("dofCoordsLine", cardLine, 1), diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_I1_FEM.hpp index 59d8c144f06a..fab13618142c 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_I1_FEM.hpp @@ -190,7 +190,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_QUAD_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_QUAD_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_I1_FEMDef.hpp index b8cfe0da1908..1924df01978b 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_I1_FEMDef.hpp @@ -153,12 +153,13 @@ namespace Intrepid2 { template Basis_HDIV_QUAD_I1_FEM:: Basis_HDIV_QUAD_I1_FEM() { - this->basisCardinality_ = 4; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = 4; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; // initialize tags { @@ -190,7 +191,7 @@ namespace Intrepid2 { } // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; @@ -202,7 +203,7 @@ namespace Intrepid2 { // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); // for HDIV_QUAD_I1 dofCoeffs are the normals on the quadrilateral edges (with normals magnitude equal to edges' lengths) dofCoeffs(0,0) = 0.0; dofCoeffs(0,1) = -1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_In_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_In_FEMDef.hpp index 9034dae2a63b..f6958e8152c2 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_In_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_QUAD_In_FEMDef.hpp @@ -232,12 +232,13 @@ namespace Intrepid2 { lineBasis.getVandermondeInverse(this->vinvLine_); bubbleBasis.getVandermondeInverse(this->vinvBubble_); - this->basisCardinality_ = 2*cardLine*cardBubble; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = 2*cardLine*cardBubble; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; pointType_ = pointType; // initialize tags @@ -333,11 +334,11 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoordsHost("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoordsHost("dofCoordsHost", this->basisCardinality_, spaceDim); // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffsHost("dofCoeffsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoeffsHost("dofCoeffsHost", this->basisCardinality_, spaceDim); Kokkos::DynRankView dofCoordsLine("dofCoordsLine", cardLine, 1), diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_I1_FEM.hpp index d180f8ee4558..a5b72c79d540 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_I1_FEM.hpp @@ -188,7 +188,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_TET_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_TET_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_I1_FEMDef.hpp index 9fcd516d1289..febd2f87333c 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_I1_FEMDef.hpp @@ -160,12 +160,13 @@ namespace Intrepid2 { template Basis_HDIV_TET_I1_FEM:: Basis_HDIV_TET_I1_FEM() { - this->basisCardinality_ = 4; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + this->basisCardinality_ = 4; + this->basisDegree_ = 1; + constexpr ordinal_type spaceDim = 3; + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; // initialize tags { @@ -205,7 +206,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 1.0/3.0; dofCoords(0,1) = 0.0; dofCoords(0,2) = 1.0/3.0; dofCoords(1,0) = 1.0/3.0; dofCoords(1,1) = 1.0/3.0; dofCoords(1,2) = 1.0/3.0; @@ -217,7 +218,7 @@ namespace Intrepid2 { // dofCoeffs on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); // dofCoeffs are normals to faces, having magnitude equal to faces' measures dofCoeffs(0,0) = 0.0; dofCoeffs(0,1) = -1.0; dofCoeffs(0,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_In_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_In_FEMDef.hpp index 976b5704e98a..e8c97199198f 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_In_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TET_In_FEMDef.hpp @@ -157,12 +157,12 @@ Basis_HDIV_TET_In_FEM( const ordinal_type order, const EPointType pointType ) { constexpr ordinal_type spaceDim = 3; - this->basisCardinality_ = CardinalityHDivTet(order); - this->basisDegree_ = order; // small n - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + this->basisCardinality_ = CardinalityHDivTet(order); + this->basisDegree_ = order; // small n + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; pointType_ = pointType; const ordinal_type card = this->basisCardinality_; @@ -249,11 +249,12 @@ Basis_HDIV_TET_In_FEM( const ordinal_type order, Kokkos::DynRankView V2("Hdiv::Tet::In::V2", card ,cardVecPn); - const ordinal_type numFaces = this->basisCellTopology_.getFaceCount(); + const shards::CellTopology cellTopo(shards::getCellTopologyData>()); + const ordinal_type numFaces = cellTopo.getFaceCount(); - shards::CellTopology faceTop(shards::getCellTopologyData >() ); + shards::CellTopology faceTopo(shards::getCellTopologyData >() ); - const int numPtsPerFace = PointTools::getLatticeSize( faceTop , + const int numPtsPerFace = PointTools::getLatticeSize( faceTopo , order+2 , 1 ); @@ -263,7 +264,7 @@ Basis_HDIV_TET_In_FEM( const ordinal_type order, // construct lattice const ordinal_type offset = 1; PointTools::getLattice( triPts, - faceTop, + faceTopo, order+2, offset, pointType ); @@ -279,13 +280,13 @@ Basis_HDIV_TET_In_FEM( const ordinal_type order, // these are normal scaled by the appropriate face areas. CellTools::getReferenceSideNormal( faceNormal , face , - this->basisCellTopology_ ); + cellTopo ); CellTools::mapToReferenceSubcell( facePts , triPts , 2 , face , - this->basisCellTopology_ ); + cellTopo ); // get phi values at face points Impl::Basis_HGRAD_TET_Cn_FEM_ORTH::getValues(typename Kokkos::HostSpace::execution_space{}, @@ -324,7 +325,7 @@ Basis_HDIV_TET_In_FEM( const ordinal_type order, // points of a lattice of degree+2 // This way, RT0 --> degree = 1 and internal lattice has no points // RT1 --> degree = 2, and internal lattice has one point (inside of quartic) - const ordinal_type numPtsPerCell = PointTools::getLatticeSize( this->basisCellTopology_ , + const ordinal_type numPtsPerCell = PointTools::getLatticeSize( cellTopo , order + 2 , 1 ); @@ -332,7 +333,7 @@ Basis_HDIV_TET_In_FEM( const ordinal_type order, Kokkos::DynRankView internalPoints( "Hdiv::Tet::In::internalPoints", numPtsPerCell , spaceDim ); PointTools::getLattice( internalPoints , - this->basisCellTopology_ , + cellTopo , order + 2 , 1 , pointType ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_I1_FEM.hpp index cc28f68f5e19..6f6596778567 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_I1_FEM.hpp @@ -186,7 +186,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_I1_FEMDef.hpp index cc525b87f76e..a7c13864b3a2 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_I1_FEMDef.hpp @@ -148,12 +148,13 @@ namespace Intrepid2 { template Basis_HDIV_TRI_I1_FEM:: Basis_HDIV_TRI_I1_FEM() { - this->basisCardinality_ = 3; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + this->basisCardinality_ = 3; + this->basisDegree_ = 1; + constexpr ordinal_type spaceDim = 2; + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; // initialize tags { @@ -192,7 +193,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.5; dofCoords(0,1) = 0.0; dofCoords(1,0) = 0.5; dofCoords(1,1) = 0.5; @@ -203,7 +204,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); // dofCoeffs are normals to edges, having magnitude equal to edges' measures dofCoeffs(0,0) = 0.0; dofCoeffs(0,1) = -0.5; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_In_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_In_FEMDef.hpp index 727705db459f..e412989caa56 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_In_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_TRI_In_FEMDef.hpp @@ -159,12 +159,12 @@ Basis_HDIV_TRI_In_FEM( const ordinal_type order, INTREPID2_TEST_FOR_EXCEPTION( order > Parameters::MaxOrder, std::invalid_argument, "polynomial order exceeds the max supported by this class"); constexpr ordinal_type spaceDim = 2; - this->basisCardinality_ = CardinalityHDivTri(order); - this->basisDegree_ = order; // small n - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + this->basisCardinality_ = CardinalityHDivTri(order); + this->basisDegree_ = order; // small n + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; pointType_ = (pointType == POINTTYPE_DEFAULT) ? POINTTYPE_EQUISPACED : pointType; const ordinal_type card = this->basisCardinality_; @@ -245,11 +245,11 @@ Basis_HDIV_TRI_In_FEM( const ordinal_type order, Kokkos::DynRankView V2("Hdiv::Tri::In::V2", card ,cardVecPn); - const ordinal_type numEdges = this->basisCellTopology_.getEdgeCount(); + const shards::CellTopology cellTopo(shards::getCellTopologyData>()); + const ordinal_type numEdges = cellTopo.getEdgeCount(); + shards::CellTopology edgeTopo(shards::getCellTopologyData >() ); - shards::CellTopology edgeTop(shards::getCellTopologyData >() ); - - const int numPtsPerEdge = PointTools::getLatticeSize( edgeTop , + const int numPtsPerEdge = PointTools::getLatticeSize( edgeTopo , order+1 , 1 ); @@ -260,7 +260,7 @@ Basis_HDIV_TRI_In_FEM( const ordinal_type order, // construct lattice const ordinal_type offset = 1; PointTools::getLattice( linePts, - edgeTop, + edgeTopo, order+1, offset, pointType_ ); @@ -273,13 +273,13 @@ Basis_HDIV_TRI_In_FEM( const ordinal_type order, for (ordinal_type edge=0;edge::getReferenceSideNormal( edgeNormal , edge , - this->basisCellTopology_ ); + cellTopo); CellTools::mapToReferenceSubcell( edgePts , linePts , 1 , edge , - this->basisCellTopology_ ); + cellTopo ); Impl::Basis_HGRAD_TRI_Cn_FEM_ORTH::getValues(typename Kokkos::HostSpace::execution_space{}, phisAtEdgePoints, @@ -322,7 +322,7 @@ Basis_HDIV_TRI_In_FEM( const ordinal_type order, // the degree == 1 space corresponds classicaly to RT0 and so gets // no internal nodes, and degree == 2 corresponds to RT1 and needs // one internal node per vector component. - const ordinal_type numPtsPerCell = PointTools::getLatticeSize( this->basisCellTopology_ , + const ordinal_type numPtsPerCell = PointTools::getLatticeSize( cellTopo , order + 1 , 1 ); @@ -330,7 +330,7 @@ Basis_HDIV_TRI_In_FEM( const ordinal_type order, Kokkos::DynRankView internalPoints( "Hdiv::Tri::In::internalPoints", numPtsPerCell , spaceDim ); PointTools::getLattice( internalPoints , - this->basisCellTopology_ , + cellTopo , order + 1 , 1 , pointType_ ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_WEDGE_I1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_WEDGE_I1_FEM.hpp index d7c96ff89c40..d30c7d1ee4a3 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_WEDGE_I1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_WEDGE_I1_FEM.hpp @@ -170,7 +170,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_WEDGE_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HDIV_WEDGE_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_WEDGE_I1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_WEDGE_I1_FEMDef.hpp index ac76e567ccf2..79dabbc6bfa6 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_WEDGE_I1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HDIV_WEDGE_I1_FEMDef.hpp @@ -118,12 +118,13 @@ namespace Intrepid2 { template Basis_HDIV_WEDGE_I1_FEM:: Basis_HDIV_WEDGE_I1_FEM() { - this->basisCardinality_ = 5; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 5; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Wedge<6>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; // initialize tags { @@ -158,7 +159,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.5; dofCoords(0,1) = 0.0; dofCoords(0,2) = 0.0; dofCoords(1,0) = 0.5; dofCoords(1,1) = 0.5; dofCoords(1,2) = 0.0; @@ -171,7 +172,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoeffs("dofCoeffsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoeffs("dofCoeffsHost", this->basisCardinality_,spaceDim); // dofCoeffs are normals to edges dofCoeffs(0,0) = 0.0; dofCoeffs(0,1) = -0.5; dofCoeffs(0,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_C1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_C1_FEMDef.hpp index c4dca0098601..96a5fcf39429 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_C1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_C1_FEMDef.hpp @@ -348,9 +348,10 @@ namespace Intrepid2 { template Basis_HGRAD_HEX_C1_FEM:: Basis_HGRAD_HEX_C1_FEM() { + constexpr ordinal_type spaceDim = 3; this->basisCardinality_ = 8; this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); + this->basisCellTopologyKey_ = shards::Hexahedron<8>::key; this->basisType_ = BASIS_FEM_DEFAULT; this->basisCoordinates_ = COORDINATES_CARTESIAN; this->functionSpace_ = FUNCTION_SPACE_HGRAD; @@ -397,7 +398,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; dofCoords(1,2) = -1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_C2_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_C2_FEMDef.hpp index 406ea80af202..22e1a54b74b4 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_C2_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_C2_FEMDef.hpp @@ -1526,12 +1526,13 @@ namespace Intrepid2 { template Basis_HGRAD_HEX_DEG2_FEM:: Basis_HGRAD_HEX_DEG2_FEM() { - this -> basisCardinality_ = serendipity ? 20 : 27; - this -> basisDegree_ = 2; - this -> basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this -> basisType_ = BASIS_FEM_DEFAULT; - this -> basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this -> basisCardinality_ = serendipity ? 20 : 27; + this -> basisDegree_ = 2; + this -> basisCellTopologyKey_ = shards::Hexahedron<8>::key; + this -> basisType_ = BASIS_FEM_DEFAULT; + this -> basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -1588,7 +1589,7 @@ namespace Intrepid2 { } // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_, spaceDim); dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; dofCoords(1,2) = -1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_Cn_FEMDef.hpp index 298b8e36d4e7..ac50cde72fb3 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_HEX_Cn_FEMDef.hpp @@ -243,12 +243,13 @@ namespace Intrepid2 { this->vinv_ = Kokkos::DynRankView("Hgrad::HEX::Cn::vinv", cardLine, cardLine); lineBasis.getVandermondeInverse(this->vinv_); - this->basisCardinality_ = cardLine*cardLine*cardLine; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = cardLine*cardLine*cardLine; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Hexahedron<8>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; pointType_ = pointType; // initialize tags @@ -357,7 +358,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoordsHost("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoordsHost("dofCoordsHost", this->basisCardinality_, spaceDim); Kokkos::DynRankView dofCoordsLine("dofCoordsLine", cardLine, 1); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C1_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C1_FEM.hpp index 84a8178156b0..c07fdfd71f04 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C1_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C1_FEM.hpp @@ -172,7 +172,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C1_FEMDef.hpp index 29afd0241607..4572b5b5c899 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C1_FEMDef.hpp @@ -123,12 +123,13 @@ namespace Intrepid2 { template Basis_HGRAD_LINE_C1_FEM:: Basis_HGRAD_LINE_C1_FEM() { - this->basisCardinality_ = 2; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 1; + this->basisCardinality_ = 2; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Line<2>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -167,7 +168,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = -1.0; dofCoords(1,0) = 1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C2_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C2_FEM.hpp index 50d790143820..595cc815e9be 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C2_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C2_FEM.hpp @@ -172,7 +172,7 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION( static_cast(dofCoords.extent(0)) != this->basisCardinality_, std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C2_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array"); // Verify 1st dimension of output array. - INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->basisCellTopology_.getDimension(), std::invalid_argument, + INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->getBaseCellTopology().getDimension(), std::invalid_argument, ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C2_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array"); #endif Kokkos::deep_copy(dofCoords, this->dofCoords_); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C2_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C2_FEMDef.hpp index 5e6b3ecedc77..c08bd3692a27 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C2_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_C2_FEMDef.hpp @@ -125,12 +125,13 @@ namespace Intrepid2 { template Basis_HGRAD_LINE_C2_FEM:: Basis_HGRAD_LINE_C2_FEM() { - this->basisCardinality_ = 3; - this->basisDegree_ = 2; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 1; + this->basisCardinality_ = 3; + this->basisDegree_ = 2; + this->basisCellTopologyKey_ = shards::Line<2>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -162,7 +163,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = -1.0; dofCoords(1,0) = 1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_Cn_FEMDef.hpp index a1febc3b4e50..fc116eb32ebe 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_Cn_FEMDef.hpp @@ -164,13 +164,13 @@ namespace Intrepid2 { Basis_HGRAD_LINE_Cn_FEM:: Basis_HGRAD_LINE_Cn_FEM( const ordinal_type order, const EPointType pointType ) { - this->pointType_ = pointType; - this->basisCardinality_ = order+1; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->pointType_ = pointType; + this->basisCardinality_ = order+1; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Line<2>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; const ordinal_type card = this->basisCardinality_; @@ -186,9 +186,10 @@ namespace Intrepid2 { case POINTTYPE_WARPBLEND: { // lattice ordering { + shards::CellTopology cellTopo(shards::getCellTopologyData>()); const ordinal_type offset = 0; PointTools::getLattice( dofCoords, - this->basisCellTopology_, + cellTopo, order, offset, pointT ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_Cn_FEM_JACOBIDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_Cn_FEM_JACOBIDef.hpp index 581307428b97..a357e03effa6 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_Cn_FEM_JACOBIDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_LINE_Cn_FEM_JACOBIDef.hpp @@ -181,12 +181,12 @@ namespace Intrepid2 { Basis_HGRAD_LINE_Cn_FEM_JACOBI( const ordinal_type order, const double alpha, const double beta ) { - this->basisCardinality_ = order+1; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = order+1; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Line<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // jacobi this->alpha_ = alpha; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_PYR_C1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_PYR_C1_FEMDef.hpp index 9f85b948ffa7..e25212499fbd 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_PYR_C1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_PYR_C1_FEMDef.hpp @@ -204,12 +204,13 @@ namespace Intrepid2 { template Basis_HGRAD_PYR_C1_FEM:: Basis_HGRAD_PYR_C1_FEM() { - this->basisCardinality_ = 5; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 5; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Pyramid<5>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -243,7 +244,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = 0.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; dofCoords(1,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_PYR_I2_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_PYR_I2_FEMDef.hpp index 56771e5f3faa..3247c5aaa0b7 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_PYR_I2_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_PYR_I2_FEMDef.hpp @@ -302,12 +302,13 @@ namespace Intrepid2 { template Basis_HGRAD_PYR_I2_FEM:: Basis_HGRAD_PYR_I2_FEM() { - this->basisCardinality_ = 13; - this->basisDegree_ = 2; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 13; + this->basisDegree_ = 2; + this->basisCellTopologyKey_ = shards::Pyramid<5>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -349,7 +350,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = 0.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; dofCoords(1,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_C1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_C1_FEMDef.hpp index 1cdc2ba48e20..39504493f063 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_C1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_C1_FEMDef.hpp @@ -188,12 +188,13 @@ namespace Intrepid2 { template Basis_HGRAD_QUAD_C1_FEM:: Basis_HGRAD_QUAD_C1_FEM() { - this->basisCardinality_ = 4; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = 4; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -233,7 +234,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_C2_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_C2_FEMDef.hpp index bfe0b72c5556..4ec411a0ffc1 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_C2_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_C2_FEMDef.hpp @@ -493,12 +493,13 @@ namespace Intrepid2 { template Basis_HGRAD_QUAD_DEG2_FEM:: Basis_HGRAD_QUAD_DEG2_FEM() { - this->basisCardinality_ = serendipity ? 8 : 9; - this->basisDegree_ = 2; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = serendipity ? 8 : 9; + this->basisDegree_ = 2; + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; { // Basis-dependent intializations @@ -536,7 +537,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_Cn_FEMDef.hpp index a48a41976966..582b465a6c57 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_QUAD_Cn_FEMDef.hpp @@ -255,13 +255,14 @@ namespace Intrepid2 { this->vinv_ = Kokkos::DynRankView("Hgrad::Quad::Cn::vinv", cardLine, cardLine); lineBasis.getVandermondeInverse(this->vinv_); - - this->basisCardinality_ = cardLine*cardLine; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + + const ordinal_type spaceDim = 2; + this->basisCardinality_ = cardLine*cardLine; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; pointType_ = pointType; // initialize tags @@ -335,7 +336,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoordsHost("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoordsHost("dofCoordsHost", this->basisCardinality_, spaceDim); Kokkos::DynRankView dofCoordsLine("dofCoordsLine", cardLine, 1); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_C1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_C1_FEMDef.hpp index 9ee6174a4f22..65d632b1b578 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_C1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_C1_FEMDef.hpp @@ -145,12 +145,13 @@ namespace Intrepid2 { template Basis_HGRAD_TET_C1_FEM:: Basis_HGRAD_TET_C1_FEM() { - this->basisCardinality_ = 4; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 4; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -190,7 +191,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = 0.0; dofCoords(0,2) = 0.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; dofCoords(1,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_C2_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_C2_FEMDef.hpp index a7336b472914..36aa3d7df7b8 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_C2_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_C2_FEMDef.hpp @@ -260,12 +260,13 @@ namespace Intrepid2 { template Basis_HGRAD_TET_C2_FEM:: Basis_HGRAD_TET_C2_FEM() { - this->basisCardinality_ = 10; - this->basisDegree_ = 2; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 10; + this->basisDegree_ = 2; + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // intialize tags { @@ -304,7 +305,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = 0.0; dofCoords(0,2) = 0.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; dofCoords(1,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_COMP12_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_COMP12_FEMDef.hpp index 927ea903a196..ca7c10d67005 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_COMP12_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_COMP12_FEMDef.hpp @@ -349,12 +349,13 @@ namespace Intrepid2 { template Basis_HGRAD_TET_COMP12_FEM:: Basis_HGRAD_TET_COMP12_FEM() { - this->basisCardinality_ = 10; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 10; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; { // Basis-dependent intializations @@ -391,7 +392,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_, spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = 0.0; dofCoords(0,2) = 0.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; dofCoords(1,2) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_Cn_FEMDef.hpp index 80b707a1e5e0..c2c5aaf6cbe3 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_Cn_FEMDef.hpp @@ -196,12 +196,12 @@ Basis_HGRAD_TET_Cn_FEM( const ordinal_type order, const EPointType pointType ) { constexpr ordinal_type spaceDim = 3; - this->basisCardinality_ = Intrepid2::getPnCardinality(order); // bigN - this->basisDegree_ = order; // small n - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = Intrepid2::getPnCardinality(order); // bigN + this->basisDegree_ = order; // small n + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; pointType_ = (pointType == POINTTYPE_DEFAULT) ? POINTTYPE_EQUISPACED : pointType; const ordinal_type card = this->basisCardinality_; @@ -221,25 +221,26 @@ Basis_HGRAD_TET_Cn_FEM( const ordinal_type order, // construct lattice - const ordinal_type numEdges = this->basisCellTopology_.getEdgeCount(); - const ordinal_type numFaces = this->basisCellTopology_.getFaceCount(); + shards::CellTopology cellTopo(shards::getCellTopologyData >() ); + const ordinal_type numEdges = cellTopo.getEdgeCount(); + const ordinal_type numFaces = cellTopo.getFaceCount(); - shards::CellTopology edgeTop(shards::getCellTopologyData >() ); - shards::CellTopology faceTop(shards::getCellTopologyData >() ); + shards::CellTopology edgeTopo(shards::getCellTopologyData >() ); + shards::CellTopology faceTopo(shards::getCellTopologyData >() ); - const int numVertexes = PointTools::getLatticeSize( this->basisCellTopology_ , + const int numVertexes = PointTools::getLatticeSize( cellTopo , 1 , 0 ); - const int numPtsPerEdge = PointTools::getLatticeSize( edgeTop , + const int numPtsPerEdge = PointTools::getLatticeSize( edgeTopo , order , 1 ); - const int numPtsPerFace = PointTools::getLatticeSize( faceTop , + const int numPtsPerFace = PointTools::getLatticeSize( faceTopo , order , 1 ); - const int numPtsPerCell = PointTools::getLatticeSize( this->basisCellTopology_ , + const int numPtsPerCell = PointTools::getLatticeSize( cellTopo , order , 1 ); @@ -252,17 +253,17 @@ Basis_HGRAD_TET_Cn_FEM( const ordinal_type order, PointTools::getLattice( vertexes, - this->basisCellTopology_ , + cellTopo , 1, 0, this->pointType_ ); PointTools::getLattice( linePts, - edgeTop, + edgeTopo, order, offset, this->pointType_ ); PointTools::getLattice( triPts, - faceTop, + faceTopo, order, offset, this->pointType_ ); @@ -287,7 +288,7 @@ Basis_HGRAD_TET_Cn_FEM( const ordinal_type order, linePts , 1 , i , - this->basisCellTopology_ ); + cellTopo ); // loop over points (rows of V2) @@ -315,7 +316,7 @@ Basis_HGRAD_TET_Cn_FEM( const ordinal_type order, triPts , 2 , i , - this->basisCellTopology_ ); + cellTopo ); for (ordinal_type j=0;j cellPoints( "Hcurl::Tet::In::cellPoints", numPtsPerCell , spaceDim ); PointTools::getLattice( cellPoints , - this->basisCellTopology_ , + cellTopo , order, 1 , this->pointType_ ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_Cn_FEM_ORTHDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_Cn_FEM_ORTHDef.hpp index 2aac605f5c5c..32b3f7c00a96 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_Cn_FEM_ORTHDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TET_Cn_FEM_ORTHDef.hpp @@ -440,12 +440,12 @@ Basis_HGRAD_TET_Cn_FEM_ORTH:: Basis_HGRAD_TET_Cn_FEM_ORTH( const ordinal_type order ) { constexpr ordinal_type spaceDim = 3; - this->basisCardinality_ = Intrepid2::getPnCardinality(order); - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = Intrepid2::getPnCardinality(order); + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_C1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_C1_FEMDef.hpp index a455ad6d52d8..e771ae7a3ee0 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_C1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_C1_FEMDef.hpp @@ -149,12 +149,13 @@ namespace Intrepid2 { template Basis_HGRAD_TRI_C1_FEM:: Basis_HGRAD_TRI_C1_FEM() { - this->basisCardinality_ = 3; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = 3; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -193,7 +194,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = 0.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_C2_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_C2_FEMDef.hpp index bf50cf55441b..87bb96e2bbe0 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_C2_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_C2_FEMDef.hpp @@ -210,12 +210,13 @@ namespace Intrepid2 { template< typename DT, typename OT, typename PT> Basis_HGRAD_TRI_C2_FEM:: Basis_HGRAD_TRI_C2_FEM() { - this->basisCardinality_ = 6; - this->basisDegree_ = 2; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = 6; + this->basisDegree_ = 2; + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -249,7 +250,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = 0.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_Cn_FEMDef.hpp index 934bce676398..681148713a06 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_Cn_FEMDef.hpp @@ -222,12 +222,12 @@ Basis_HGRAD_TRI_Cn_FEM( const ordinal_type order, const EPointType pointType ) { constexpr ordinal_type spaceDim = 2; - this->basisCardinality_ = Intrepid2::getPnCardinality(order); // bigN - this->basisDegree_ = order; // small n - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = Intrepid2::getPnCardinality(order); // bigN + this->basisDegree_ = order; // small n + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; pointType_ = (pointType == POINTTYPE_DEFAULT) ? POINTTYPE_EQUISPACED : pointType; const ordinal_type card = this->basisCardinality_; @@ -237,9 +237,10 @@ Basis_HGRAD_TRI_Cn_FEM( const ordinal_type order, dofCoords("Hgrad::Tri::Cn::dofCoords", card, spaceDim); // construct lattice + const shards::CellTopology cellTopo(shards::getCellTopologyData>()); const ordinal_type offset = 0; PointTools::getLattice( dofCoords, - this->basisCellTopology_, + cellTopo, order, offset, pointType_ ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_Cn_FEM_ORTHDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_Cn_FEM_ORTHDef.hpp index 1f9971f7e4a8..6f5e5abb1dd0 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_Cn_FEM_ORTHDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_TRI_Cn_FEM_ORTHDef.hpp @@ -361,12 +361,12 @@ Basis_HGRAD_TRI_Cn_FEM_ORTH:: Basis_HGRAD_TRI_Cn_FEM_ORTH( const ordinal_type order ) { constexpr ordinal_type spaceDim = 2; - this->basisCardinality_ = Intrepid2::getPnCardinality(order); - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = Intrepid2::getPnCardinality(order); + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_WEDGE_C1_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_WEDGE_C1_FEMDef.hpp index 002d77ed1706..9d2c461edca2 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_WEDGE_C1_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_WEDGE_C1_FEMDef.hpp @@ -190,12 +190,13 @@ namespace Intrepid2 { template Basis_HGRAD_WEDGE_C1_FEM:: Basis_HGRAD_WEDGE_C1_FEM() { - this->basisCardinality_ = 6; - this->basisDegree_ = 1; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = 6; + this->basisDegree_ = 1; + this->basisCellTopologyKey_ = shards::Wedge<6>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -231,7 +232,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = 0.0; dofCoords(0,2) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; dofCoords(1,2) = -1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_WEDGE_C2_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_WEDGE_C2_FEMDef.hpp index 22cb91daa0a3..363d21ad19ea 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_WEDGE_C2_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HGRAD_WEDGE_C2_FEMDef.hpp @@ -998,12 +998,13 @@ namespace Intrepid2 { template Basis_HGRAD_WEDGE_DEG2_FEM:: Basis_HGRAD_WEDGE_DEG2_FEM() { - this->basisCardinality_ = serendipity ? 15 : 18; - this->basisDegree_ = 2; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_DEFAULT; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = serendipity ? 15 : 18; + this->basisDegree_ = 2; + this->basisCellTopologyKey_ = shards::Wedge<6>::key; + this->basisType_ = BASIS_FEM_DEFAULT; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; // initialize tags { @@ -1051,7 +1052,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension()); + dofCoords("dofCoordsHost", this->basisCardinality_,spaceDim); dofCoords(0,0) = 0.0; dofCoords(0,1) = 0.0; dofCoords(0,2) = -1.0; dofCoords(1,0) = 1.0; dofCoords(1,1) = 0.0; dofCoords(1,2) = -1.0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_C0_FEM.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_C0_FEM.hpp index eb6f73125efa..7e58d8bd3013 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_C0_FEM.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_C0_FEM.hpp @@ -176,7 +176,7 @@ namespace Intrepid2 { virtual HostBasisPtr getHostBasis() const override{ - return Teuchos::rcp(new Basis_HVOL_C0_FEM(this->basisCellTopology_)); + return Teuchos::rcp(new Basis_HVOL_C0_FEM(this->getBaseCellTopology())); } }; } diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_C0_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_C0_FEMDef.hpp index 86026d20482c..7f5932fba7e6 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_C0_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_C0_FEMDef.hpp @@ -101,12 +101,12 @@ namespace Intrepid2 { Basis_HVOL_C0_FEM(const shards::CellTopology& cellTopo) { const ordinal_type spaceDim = cellTopo.getDimension(); - this->basisCardinality_ = 1; - this->basisDegree_ = 0; - this->basisCellTopology_ = cellTopo; - this->basisType_ = Intrepid2::BASIS_FEM_DEFAULT; - this->basisCoordinates_ = Intrepid2::COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + this->basisCardinality_ = 1; + this->basisDegree_ = 0; + this->basisCellTopologyKey_ = cellTopo.getKey(); + this->basisType_ = Intrepid2::BASIS_FEM_DEFAULT; + this->basisCoordinates_ = Intrepid2::COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; basisName_ = "Intrepid2_HVOL_"; basisName_ += cellTopo.getName(); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_HEX_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_HEX_Cn_FEMDef.hpp index 10acaba0444e..652df8ee2689 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_HEX_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_HEX_Cn_FEMDef.hpp @@ -236,12 +236,13 @@ namespace Intrepid2 { this->vinv_ = Kokkos::DynRankView("HVOL::HEX::Cn::vinv", cardLine, cardLine); lineBasis.getVandermondeInverse(this->vinv_); - this->basisCardinality_ = cardLine*cardLine*cardLine; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + const ordinal_type spaceDim = 3; + this->basisCardinality_ = cardLine*cardLine*cardLine; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Hexahedron<8>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; // initialize tags { @@ -290,7 +291,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoordsHost("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoordsHost("dofCoordsHost", this->basisCardinality_, spaceDim); Kokkos::DynRankView dofCoordsLine("dofCoordsLine", cardLine, 1); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_LINE_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_LINE_Cn_FEMDef.hpp index 1e2f90f4be0d..3d742d4a30a4 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_LINE_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_LINE_Cn_FEMDef.hpp @@ -163,13 +163,13 @@ namespace Intrepid2 { Basis_HVOL_LINE_Cn_FEM:: Basis_HVOL_LINE_Cn_FEM( const ordinal_type order, const EPointType pointType ) { - this->pointType_ = pointType; - this->basisCardinality_ = order+1; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + this->pointType_ = pointType; + this->basisCardinality_ = order+1; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Line<2>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; const ordinal_type card = this->basisCardinality_; @@ -185,9 +185,10 @@ namespace Intrepid2 { case POINTTYPE_WARPBLEND: { // lattice ordering { + const shards::CellTopology cellTopo(shards::getCellTopologyData >()); const ordinal_type offset = 1; PointTools::getLattice( dofCoords, - this->basisCellTopology_, + cellTopo, order+1+offset, offset, pointT ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_QUAD_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_QUAD_Cn_FEMDef.hpp index 40bcaab9b6d2..2a9e2678b771 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_QUAD_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_QUAD_Cn_FEMDef.hpp @@ -209,12 +209,13 @@ namespace Intrepid2 { this->vinv_ = Kokkos::DynRankView("HVOL::Quad::Cn::vinv", cardLine, cardLine); lineBasis.getVandermondeInverse(this->vinv_); - this->basisCardinality_ = cardLine*cardLine; - this->basisDegree_ = order; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + const ordinal_type spaceDim = 2; + this->basisCardinality_ = cardLine*cardLine; + this->basisDegree_ = order; + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; // initialize tags { @@ -260,7 +261,7 @@ namespace Intrepid2 { // dofCoords on host and create its mirror view to device Kokkos::DynRankView - dofCoordsHost("dofCoordsHost", this->basisCardinality_, this->basisCellTopology_.getDimension()); + dofCoordsHost("dofCoordsHost", this->basisCardinality_, spaceDim); Kokkos::DynRankView dofCoordsLine("dofCoordsLine", cardLine, 1); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_TET_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_TET_Cn_FEMDef.hpp index 8d779553259c..a0945a008159 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_TET_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_TET_Cn_FEMDef.hpp @@ -199,13 +199,13 @@ namespace Intrepid2 { const EPointType pointType ) { constexpr ordinal_type spaceDim = 3; - this->pointType_ = pointType; - this->basisCardinality_ = Intrepid2::getPnCardinality(order); // bigN - this->basisDegree_ = order; // small n - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + this->pointType_ = pointType; + this->basisCardinality_ = Intrepid2::getPnCardinality(order); // bigN + this->basisDegree_ = order; // small n + this->basisCellTopologyKey_ = shards::Tetrahedron<4>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; const ordinal_type card = this->basisCardinality_; @@ -215,8 +215,9 @@ namespace Intrepid2 { // construct lattice (only internal nodes for HVOL element) const ordinal_type offset = 1; + const shards::CellTopology cellTopo(shards::getCellTopologyData >()); PointTools::getLattice( dofCoords, - this->basisCellTopology_, + cellTopo, order+spaceDim+offset, offset, pointType ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_TRI_Cn_FEMDef.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_TRI_Cn_FEMDef.hpp index 1a901eace6ea..f870940f506b 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_TRI_Cn_FEMDef.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HVOL_TRI_Cn_FEMDef.hpp @@ -193,13 +193,13 @@ Basis_HVOL_TRI_Cn_FEM( const ordinal_type order, constexpr ordinal_type spaceDim = 2; - this->pointType_ = (pointType == POINTTYPE_DEFAULT) ? POINTTYPE_EQUISPACED : pointType; - this->basisCardinality_ = Intrepid2::getPnCardinality(order); // bigN - this->basisDegree_ = order; // small n - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_LAGRANGIAN; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + this->pointType_ = (pointType == POINTTYPE_DEFAULT) ? POINTTYPE_EQUISPACED : pointType; + this->basisCardinality_ = Intrepid2::getPnCardinality(order); // bigN + this->basisDegree_ = order; // small n + this->basisCellTopologyKey_ = shards::Triangle<3>::key; + this->basisType_ = BASIS_FEM_LAGRANGIAN; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; const ordinal_type card = this->basisCardinality_; @@ -209,8 +209,9 @@ Basis_HVOL_TRI_Cn_FEM( const ordinal_type order, // construct lattice (only internal nodes for HVOL element) const ordinal_type offset = 1; + const shards::CellTopology cellTopo(shards::getCellTopologyData >()); PointTools::getLattice( dofCoords, - this->basisCellTopology_, + cellTopo, order+spaceDim+offset, offset, this->pointType_ ); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HCURL_TET.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HCURL_TET.hpp index 7b482a50fa6c..cabeede98bf8 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HCURL_TET.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HCURL_TET.hpp @@ -704,9 +704,10 @@ namespace Intrepid2 : polyOrder_(polyOrder) { - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - const int numEdges = this->basisCellTopology_.getEdgeCount(); - const int numFaces = this->basisCellTopology_.getFaceCount(); + this->basisCellTopologyKey_ = shards::Tetrahedron<>::key; + const shards::CellTopology cellTopo(shards::getCellTopologyData>()); + const int numEdges = cellTopo.getEdgeCount(); + const int numFaces = cellTopo.getFaceCount(); const int numEdgeFunctions = polyOrder * numEdges; const int numFaceFunctions = polyOrder * (polyOrder-1) * numFaces; // 4 faces; 2 families, each with p*(p-1)/2 functions per face diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HCURL_TRI.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HCURL_TRI.hpp index e415f7e9c466..6865bb656767 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HCURL_TRI.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HCURL_TRI.hpp @@ -353,14 +353,14 @@ namespace Intrepid2 : polyOrder_(polyOrder) { - const int numEdgeFunctions = polyOrder * 3; - const int numFaceFunctions = polyOrder * (polyOrder-1); // two families, each with p*(p-1)/2 functions - this->basisCardinality_ = numEdgeFunctions + numFaceFunctions; - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HCURL; + const int numEdgeFunctions = polyOrder * 3; + const int numFaceFunctions = polyOrder * (polyOrder-1); // two families, each with p*(p-1)/2 functions + this->basisCardinality_ = numEdgeFunctions + numFaceFunctions; + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Triangle<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HCURL; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Hierarchical H(curl) triangle polynomial degree lookup", this->basisCardinality_, degreeLength); @@ -371,8 +371,9 @@ namespace Intrepid2 // no vertex functions in H(curl) // **** edge functions **** // + const shards::CellTopology cellTopo(shards::getCellTopologyData >()); const int numFunctionsPerEdge = polyOrder; // p functions associated with each edge - const int numEdges = this->basisCellTopology_.getEdgeCount(); + const int numEdges = cellTopo.getEdgeCount(); for (int edgeOrdinal=0; edgeOrdinalbasisCardinality_ = p * p + 2 * p * (p+1) + 3 * p * p * (p-1); - this->basisDegree_ = p; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HDIV; + const auto & p = polyOrder; + this->basisCardinality_ = p * p + 2 * p * (p+1) + 3 * p * p * (p-1); + this->basisDegree_ = p; + this->basisCellTopologyKey_ = shards::Pyramid<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HDIV; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Integrated Legendre H(div) pyramid polynomial degree lookup", this->basisCardinality_, degreeLength); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HDIV_TET.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HDIV_TET.hpp index 7fefa7b16e4c..9d8f287ddf23 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HDIV_TET.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_HierarchicalBasis_HDIV_TET.hpp @@ -722,9 +722,9 @@ namespace Intrepid2 : polyOrder_(polyOrder) { - - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - const int numFaces = this->basisCellTopology_.getFaceCount(); + const shards::CellTopology cellTopo(shards::getCellTopologyData >()); + this->basisCellTopologyKey_ = shards::Tetrahedron<>::key; + const int numFaces = cellTopo.getFaceCount(); const int numVertexFunctions = 0; const int numEdgeFunctions = 0; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_IntegratedLegendreBasis_HGRAD_LINE.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_IntegratedLegendreBasis_HGRAD_LINE.hpp index c3b77e1a10ba..d58951a8f10f 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_IntegratedLegendreBasis_HGRAD_LINE.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_IntegratedLegendreBasis_HGRAD_LINE.hpp @@ -237,12 +237,12 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION(pointType!=POINTTYPE_DEFAULT,std::invalid_argument,"PointType not supported"); - this->basisCardinality_ = polyOrder+1; - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = polyOrder+1; + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Line<2>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Integrated Legendre H(grad) line polynomial degree lookup", this->basisCardinality_, degreeLength); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_IntegratedLegendreBasis_HGRAD_PYR.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_IntegratedLegendreBasis_HGRAD_PYR.hpp index 38d0f7cb28d8..9d5cda452824 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_IntegratedLegendreBasis_HGRAD_PYR.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_IntegratedLegendreBasis_HGRAD_PYR.hpp @@ -701,12 +701,12 @@ namespace Intrepid2 pointType_(pointType) { INTREPID2_TEST_FOR_EXCEPTION(pointType!=POINTTYPE_DEFAULT,std::invalid_argument,"PointType not supported"); - this->basisCardinality_ = polyOrder * polyOrder * polyOrder + 3 * polyOrder + 1; - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = polyOrder * polyOrder * polyOrder + 3 * polyOrder + 1; + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Pyramid<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Integrated Legendre H(grad) pyramid polynomial degree lookup", this->basisCardinality_, degreeLength); @@ -714,7 +714,7 @@ namespace Intrepid2 int fieldOrdinalOffset = 0; // **** vertex functions **** // - const int numVertices = this->basisCellTopology_.getVertexCount(); + const int numVertices = this->getBaseCellTopology().getVertexCount(); for (int i=0; ibasisCellTopology_.getEdgeCount(); + const int numEdges = this->getBaseCellTopology().getEdgeCount(); for (int edgeOrdinal=0; edgeOrdinalbasisCardinality_ = ((polyOrder+1) * (polyOrder+2) * (polyOrder+3)) / 6; - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = ((polyOrder+1) * (polyOrder+2) * (polyOrder+3)) / 6; + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Tetrahedron<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Integrated Legendre H(grad) tetrahedron polynomial degree lookup", this->basisCardinality_, degreeLength); @@ -623,7 +623,7 @@ namespace Intrepid2 int fieldOrdinalOffset = 0; // **** vertex functions **** // - const int numVertices = this->basisCellTopology_.getVertexCount(); + const int numVertices = this->getBaseCellTopology().getVertexCount(); const int numFunctionsPerVertex = 1; const int numVertexFunctions = numVertices * numFunctionsPerVertex; for (int i=0; ibasisCellTopology_.getEdgeCount(); + const int numEdges = this->getBaseCellTopology().getEdgeCount(); for (int edgeOrdinal=0; edgeOrdinalbasisCardinality_ = ((polyOrder+2) * (polyOrder+1)) / 2; - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HGRAD; + this->basisCardinality_ = ((polyOrder+2) * (polyOrder+1)) / 2; + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Triangle<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HGRAD; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Integrated Legendre H(grad) triangle polynomial degree lookup", this->basisCardinality_, degreeLength); @@ -388,7 +388,7 @@ namespace Intrepid2 int fieldOrdinalOffset = 0; // **** vertex functions **** // - const int numVertices = this->basisCellTopology_.getVertexCount(); + const int numVertices = this->getBaseCellTopology().getVertexCount(); const int numFunctionsPerVertex = 1; const int numVertexFunctions = numVertices * numFunctionsPerVertex; for (int i=0; ibasisCellTopology_.getEdgeCount(); + const int numEdges = this->getBaseCellTopology().getEdgeCount(); for (int edgeOrdinal=0; edgeOrdinalbasisCardinality_ = polyOrder+1; - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + this->basisCardinality_ = polyOrder+1; + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Line<2>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Integrated Legendre H(grad) line polynomial degree lookup", this->basisCardinality_, degreeLength); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_PYR.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_PYR.hpp index f1a28acc621e..d96d82e6130c 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_PYR.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_PYR.hpp @@ -287,12 +287,12 @@ namespace Intrepid2 pointType_(pointType) { INTREPID2_TEST_FOR_EXCEPTION(pointType!=POINTTYPE_DEFAULT,std::invalid_argument,"PointType not supported"); - this->basisCardinality_ = (polyOrder + 1) * (polyOrder + 1) * (polyOrder + 1); - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + this->basisCardinality_ = (polyOrder + 1) * (polyOrder + 1) * (polyOrder + 1); + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Pyramid<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Legendre H(vol) pyramid polynomial degree lookup", this->basisCardinality_, degreeLength); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_TET.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_TET.hpp index 6e357af9fa30..daa13d08faa2 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_TET.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_TET.hpp @@ -212,12 +212,12 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION(pointType!=POINTTYPE_DEFAULT,std::invalid_argument,"PointType not supported"); - this->basisCardinality_ = ((polyOrder+3) * (polyOrder+2) * (polyOrder+1)) / 6; - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + this->basisCardinality_ = ((polyOrder+3) * (polyOrder+2) * (polyOrder+1)) / 6; + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Tetrahedron<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Integrated Legendre H(vol) triangle polynomial degree lookup", this->basisCardinality_, degreeLength); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_TRI.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_TRI.hpp index df4f28d47cca..b42a86407b17 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_TRI.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_LegendreBasis_HVOL_TRI.hpp @@ -183,12 +183,12 @@ namespace Intrepid2 { INTREPID2_TEST_FOR_EXCEPTION(pointType!=POINTTYPE_DEFAULT,std::invalid_argument,"PointType not supported"); - this->basisCardinality_ = ((polyOrder+2) * (polyOrder+1)) / 2; - this->basisDegree_ = polyOrder; - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); - this->basisType_ = BASIS_FEM_HIERARCHICAL; - this->basisCoordinates_ = COORDINATES_CARTESIAN; - this->functionSpace_ = FUNCTION_SPACE_HVOL; + this->basisCardinality_ = ((polyOrder+2) * (polyOrder+1)) / 2; + this->basisDegree_ = polyOrder; + this->basisCellTopologyKey_ = shards::Triangle<>::key; + this->basisType_ = BASIS_FEM_HIERARCHICAL; + this->basisCoordinates_ = COORDINATES_CARTESIAN; + this->functionSpace_ = FUNCTION_SPACE_HVOL; const int degreeLength = 1; this->fieldOrdinalPolynomialDegree_ = OrdinalTypeArray2DHost("Legendre H(vol) triangle polynomial degree lookup", this->basisCardinality_, degreeLength); diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_SerendipityBasis.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_SerendipityBasis.hpp index 57ec31d0ef5e..c589b6d5ed21 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_SerendipityBasis.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_SerendipityBasis.hpp @@ -111,9 +111,9 @@ public BasisBaseClass Kokkos::deep_copy(ordinalMap_, ordinalMapHost); // set cell topology - this->basisCellTopology_ = fullBasis_->getBaseCellTopology(); + this->basisCellTopologyKey_ = fullBasis_->getBaseCellTopology().getKey(); this->numTensorialExtrusions_ = fullBasis_->getNumTensorialExtrusions(); - const ordinal_type spaceDim = this->basisCellTopology_.getDimension() + numTensorialExtrusions_; + const ordinal_type spaceDim = fullBasis_->getBaseCellTopology().getDimension() + numTensorialExtrusions_; this->basisCoordinates_ = COORDINATES_CARTESIAN; @@ -141,7 +141,7 @@ public BasisBaseClass const ordinal_type posDfCnt = 3; // position in the tag, counting from 0, of DoF count for the subcell OrdinalTypeArray1DHost tagView("tag view", cardinality*tagSize); - auto cellTopo = CellTopology::cellTopology(this->basisCellTopology_, numTensorialExtrusions_); + auto cellTopo = CellTopology::cellTopology(fullBasis_->getBaseCellTopology(), numTensorialExtrusions_); const OrdinalTypeArray2DHost fullBasisOrdinalToTag = fullBasis->getAllDofTags(); using std::map; diff --git a/packages/intrepid2/src/Discretization/Basis/Intrepid2_TensorBasis.hpp b/packages/intrepid2/src/Discretization/Basis/Intrepid2_TensorBasis.hpp index af2dff126f32..c3701688f736 100644 --- a/packages/intrepid2/src/Discretization/Basis/Intrepid2_TensorBasis.hpp +++ b/packages/intrepid2/src/Discretization/Basis/Intrepid2_TensorBasis.hpp @@ -680,7 +680,7 @@ struct OperatorTensorDecomposition } // set cell topology - this->basisCellTopology_ = tensorComponents_[0]->getBaseCellTopology(); + this->basisCellTopologyKey_ = tensorComponents_[0]->getBaseCellTopology().getKey(); this->numTensorialExtrusions_ = tensorComponents_.size() - 1; this->basisType_ = basis1_->getBasisType(); @@ -748,7 +748,7 @@ struct OperatorTensorDecomposition OrdinalTypeArray1DHost tagView("tag view", cardinality*tagSize); // we assume that basis2_ is defined on a line, and that basis1_ is defined on a domain that is once-extruded in by that line. - auto cellTopo = CellTopology::cellTopology(this->basisCellTopology_, numTensorialExtrusions_); + auto cellTopo = CellTopology::cellTopology(tensorComponents_[0]->getBaseCellTopology(), numTensorialExtrusions_); auto basis1Topo = cellTopo->getTensorialComponent(); const ordinal_type spaceDim = spaceDim1 + spaceDim2; @@ -825,25 +825,25 @@ struct OperatorTensorDecomposition const int numTensorialExtrusions = basis1_->getNumTensorialExtrusions() + basis2_->getNumTensorialExtrusions(); if ((cellKey1 == shards::Line<2>::key) && (cellKey2 == shards::Line<2>::key) && (numTensorialExtrusions == 0)) { - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); + this->basisCellTopologyKey_ = shards::Quadrilateral<4>::key; } else if ( ((cellKey1 == shards::Quadrilateral<4>::key) && (cellKey2 == shards::Line<2>::key)) || ((cellKey2 == shards::Quadrilateral<4>::key) && (cellKey1 == shards::Line<2>::key)) || ((cellKey1 == shards::Line<2>::key) && (cellKey2 == shards::Line<2>::key) && (numTensorialExtrusions == 1)) ) { - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); + this->basisCellTopologyKey_ = shards::Hexahedron<8>::key; } else if ((cellKey1 == shards::Triangle<3>::key) && (cellKey2 == shards::Line<2>::key)) { - this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData >() ); + this->basisCellTopologyKey_ = shards::Wedge<6>::key; } else { INTREPID2_TEST_FOR_EXCEPTION(true, std::invalid_argument, "Cell topology combination not yet supported"); } - // numTensorialExtrusions_ is relative to the basisCellTopology_; what we've just done is found a cell topology of the same spatial dimension as the extruded topology, so now numTensorialExtrusions_ should be 0. + // numTensorialExtrusions_ is relative to the baseCellTopology; what we've just done is found a cell topology of the same spatial dimension as the extruded topology, so now numTensorialExtrusions_ should be 0. numTensorialExtrusions_ = 0; // initialize tags @@ -858,7 +858,7 @@ struct OperatorTensorDecomposition OrdinalTypeArray1DHost tagView("tag view", cardinality*tagSize); - shards::CellTopology cellTopo = this->basisCellTopology_; + shards::CellTopology cellTopo = this->getBaseCellTopology(); ordinal_type tensorSpaceDim = cellTopo.getDimension(); ordinal_type spaceDim1 = cellTopo1.getDimension(); diff --git a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectLineGaussJacobi20Def.hpp b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectLineGaussJacobi20Def.hpp index 54b759bf74cc..ce8ec02ed565 100644 --- a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectLineGaussJacobi20Def.hpp +++ b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectLineGaussJacobi20Def.hpp @@ -18,7 +18,7 @@ namespace Intrepid2 { template CubatureDirectLineGaussJacobi20:: CubatureDirectLineGaussJacobi20(const ordinal_type degree) - : CubatureDirect
(degree, 1) { + : CubatureDirect(degree, 1) { INTREPID2_TEST_FOR_EXCEPTION( degree < 0 || degree > static_cast(Parameters::MaxCubatureDegreePyr), std::out_of_range, diff --git a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTetDefaultDef.hpp b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTetDefaultDef.hpp index 6a87323e8991..7a046840c9f3 100644 --- a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTetDefaultDef.hpp +++ b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTetDefaultDef.hpp @@ -18,7 +18,7 @@ namespace Intrepid2 { template CubatureDirectTetDefault:: CubatureDirectTetDefault(const ordinal_type degree) - : CubatureDirect
(degree, 3) { + : CubatureDirect(degree, 3) { INTREPID2_TEST_FOR_EXCEPTION( degree < 0 || degree > static_cast(Parameters::MaxCubatureDegreeTet), std::out_of_range, diff --git a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTetSymmetricDef.hpp b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTetSymmetricDef.hpp index 13231571a545..a13db740758a 100644 --- a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTetSymmetricDef.hpp +++ b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTetSymmetricDef.hpp @@ -18,7 +18,7 @@ namespace Intrepid2 { template CubatureDirectTetSymmetric:: CubatureDirectTetSymmetric(const ordinal_type degree) - : CubatureDirect
(degree, 3) { + : CubatureDirect(degree, 3) { INTREPID2_TEST_FOR_EXCEPTION( degree < 0 || degree > static_cast(Parameters::MaxCubatureDegreeTet), std::out_of_range, diff --git a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTriDefaultDef.hpp b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTriDefaultDef.hpp index c3c7b135a38c..378c0c44c7bf 100644 --- a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTriDefaultDef.hpp +++ b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTriDefaultDef.hpp @@ -18,7 +18,7 @@ namespace Intrepid2 { template CubatureDirectTriDefault:: CubatureDirectTriDefault(const ordinal_type degree) - : CubatureDirect
(degree, 2) { + : CubatureDirect(degree, 2) { INTREPID2_TEST_FOR_EXCEPTION( degree < 0 || degree >= cubatureDataStaticSize, std::out_of_range, diff --git a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTriSymmetricDef.hpp b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTriSymmetricDef.hpp index aa11a1212d08..0a4635738709 100644 --- a/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTriSymmetricDef.hpp +++ b/packages/intrepid2/src/Discretization/Integration/Intrepid2_CubatureDirectTriSymmetricDef.hpp @@ -18,7 +18,7 @@ namespace Intrepid2 { template CubatureDirectTriSymmetric:: CubatureDirectTriSymmetric(const ordinal_type degree) - : CubatureDirect
(degree, 2) { + : CubatureDirect(degree, 2) { INTREPID2_TEST_FOR_EXCEPTION( degree < 0 || degree >= cubatureDataStaticSize, std::out_of_range, diff --git a/packages/intrepid2/src/Shared/Intrepid2_Types.hpp b/packages/intrepid2/src/Shared/Intrepid2_Types.hpp index 8afcc665653d..8491dd36c376 100644 --- a/packages/intrepid2/src/Shared/Intrepid2_Types.hpp +++ b/packages/intrepid2/src/Shared/Intrepid2_Types.hpp @@ -56,7 +56,7 @@ namespace Intrepid2 { flt_32 s; s.f32 = 1; - s.f32++; + s.i32++; return (s.i32 < 0 ? 1 - s.f32 : s.f32 - 1); } diff --git a/packages/intrepid2/unit-test/Cell/CMakeLists.txt b/packages/intrepid2/unit-test/Cell/CMakeLists.txt index 6a72dc7540ee..a9250c464617 100644 --- a/packages/intrepid2/unit-test/Cell/CMakeLists.txt +++ b/packages/intrepid2/unit-test/Cell/CMakeLists.txt @@ -8,6 +8,10 @@ LIST(APPEND Intrepid2_TEST_ETI_VALUETYPE_NAME "DOUBLE") LIST(APPEND Intrepid2_TEST_ETI_VALUETYPE "double") LIST(APPEND Intrepid2_TEST_ETI_SACADO "0") +LIST(APPEND Intrepid2_TEST_ETI_VALUETYPE_NAME "FLOAT") +LIST(APPEND Intrepid2_TEST_ETI_VALUETYPE "float") +LIST(APPEND Intrepid2_TEST_ETI_SACADO "0") + IF (HAVE_INTREPID2_SACADO) # LIST(APPEND Intrepid2_TEST_ETI_VALUETYPE_NAME "DFAD_DOUBLE") # LIST(APPEND Intrepid2_TEST_ETI_VALUETYPE "Sacado::Fad::DFad") diff --git a/packages/intrepid2/unit-test/Cell/test_01.hpp b/packages/intrepid2/unit-test/Cell/test_01.hpp index 30a77cb71a7f..cd173cd269c8 100644 --- a/packages/intrepid2/unit-test/Cell/test_01.hpp +++ b/packages/intrepid2/unit-test/Cell/test_01.hpp @@ -200,7 +200,7 @@ namespace Intrepid2 { typedef CellTools ct; typedef Kokkos::DynRankView DynRankView; - const value_type tol = tolerence()*100.0; + const value_type tol = tolerence()*100.0; int errorFlag = 0; diff --git a/packages/intrepid2/unit-test/Cell/test_02.hpp b/packages/intrepid2/unit-test/Cell/test_02.hpp index b765e1881c46..701bcf6b96e9 100644 --- a/packages/intrepid2/unit-test/Cell/test_02.hpp +++ b/packages/intrepid2/unit-test/Cell/test_02.hpp @@ -81,7 +81,7 @@ namespace Intrepid2 { using ct = CellTools; using DynRankView = Kokkos::DynRankView; - const ValueType tol = tolerence()*100.0; + const ValueType tol = tolerence()*100.0; int errorFlag = 0; @@ -112,7 +112,7 @@ namespace Intrepid2 { { // Define cubature on the edge parametrization domain: const auto testAccuracy = 6; - CubatureDirectLineGauss edgeCubature(testAccuracy); + CubatureDirectLineGauss edgeCubature(testAccuracy); const auto cubDim = edgeCubature.getDimension(); const auto numCubPoints = edgeCubature.getNumPoints(); diff --git a/packages/intrepid2/unit-test/Cell/test_03.hpp b/packages/intrepid2/unit-test/Cell/test_03.hpp index e3bec14e9011..0170eea1d22f 100644 --- a/packages/intrepid2/unit-test/Cell/test_03.hpp +++ b/packages/intrepid2/unit-test/Cell/test_03.hpp @@ -85,7 +85,7 @@ namespace Intrepid2 { using DynRankView = Kokkos::DynRankView; using DynRankViewHost = Kokkos::DynRankView; - const ValueType tol = tolerence()*100.0; + const ValueType tol = tolerence()*100.0; int errorFlag = 0; diff --git a/packages/intrepid2/unit-test/Cell/test_04.hpp b/packages/intrepid2/unit-test/Cell/test_04.hpp index dbf8c96c68c0..b7eb9c1b61cf 100644 --- a/packages/intrepid2/unit-test/Cell/test_04.hpp +++ b/packages/intrepid2/unit-test/Cell/test_04.hpp @@ -79,7 +79,7 @@ namespace Intrepid2 { using ct = CellTools; using DynRankView = Kokkos::DynRankView; - const ValueType tol = tolerence()*100.0; + const ValueType tol = tolerence()*100.0; int errorFlag = 0; @@ -132,7 +132,7 @@ namespace Intrepid2 { continue; // 1. Define a single reference point set using cubature factory with order 4 cubature - const auto cellCubature = cubFactory.create(cell, testAccuracy); + const auto cellCubature = cubFactory.create(cell, testAccuracy); const auto cubDim = cellCubature->getDimension(); const auto cubNumPoints = cellCubature->getNumPoints(); diff --git a/packages/intrepid2/unit-test/Cell/test_06.hpp b/packages/intrepid2/unit-test/Cell/test_06.hpp index b548efc8a589..8344c0a8b5a6 100644 --- a/packages/intrepid2/unit-test/Cell/test_06.hpp +++ b/packages/intrepid2/unit-test/Cell/test_06.hpp @@ -130,7 +130,7 @@ namespace Intrepid2 { << "| |\n" << "===============================================================================\n"; - const ValueType tol = tolerence()*100.0; + const ValueType tol = tolerence()*100.0; int errorFlag = 0; diff --git a/packages/intrepid2/unit-test/Cell/test_07.hpp b/packages/intrepid2/unit-test/Cell/test_07.hpp index e6b989d32d53..813797a4475a 100644 --- a/packages/intrepid2/unit-test/Cell/test_07.hpp +++ b/packages/intrepid2/unit-test/Cell/test_07.hpp @@ -14,8 +14,6 @@ */ #include "Intrepid2_config.h" -#include "Intrepid2_CellTopologyTags.hpp" - #include "Intrepid2_DefaultCubatureFactory.hpp" #include "Teuchos_oblackholestream.hpp" @@ -37,10 +35,8 @@ namespace Intrepid2 { }; -#define INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, expected, shtopo, celltag) \ +#define INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, expected, shardsTopology) \ { \ - typedef shtopo shardsTopology; \ - typedef celltag CellTopologyTag; \ \ const auto order = 3; \ const auto cellTopo = shards::CellTopology(shards::getCellTopologyData< shardsTopology >()); \ @@ -55,14 +51,14 @@ namespace Intrepid2 { cub->getCubature(pts, wts); \ \ Kokkos::RangePolicy policy(0, P); \ - typedef F_checkPointInclusion FunctorType; \ + typedef F_checkPointInclusion FunctorType; \ Kokkos::parallel_for(policy, FunctorType(offset, check, pts)); \ \ auto check_host = Kokkos::create_mirror_view(check); \ Kokkos::deep_copy(check_host, check); \ \ for (ordinal_type i=0;i tol) { \ *outStream << "Error : checkPointInclusion at (" \ << i \ @@ -72,18 +68,19 @@ namespace Intrepid2 { } \ } \ - template + typename InputViewType> struct F_checkPointInclusion { - double _offset; + using ValueType = typename InputViewType::value_type; + ValueType _offset; OutputViewType _output; - inputViewType _input; + InputViewType _input; KOKKOS_INLINE_FUNCTION - F_checkPointInclusion(const double offset_, + F_checkPointInclusion(const ValueType offset_, OutputViewType output_, - inputViewType input_) + InputViewType input_) : _offset(offset_), _output(output_), _input(input_) {} @@ -92,9 +89,8 @@ namespace Intrepid2 { void operator()(const ordinal_type i) const { const auto in = Kokkos::subview(_input,i,Kokkos::ALL()); - for (int k=0;k<3;++k) in(k)+=_offset; - const auto check = cellTopologyTagType::checkPointInclusion(in, 0.0); - + for (int k=0;k<3;++k) in(k)+=_offset; + const auto check = PointInclusion::check(in, threshold()); _output(i) = check; } }; @@ -102,67 +98,67 @@ namespace Intrepid2 { // We provide maps belonging to the functional spaces generated by the finite element basis functions associated to the each topology - template + template struct MapPoints; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int /*comp*/) {const auto& x = coords[0]; return 2.0+3*x;} + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int /*comp*/) {const auto& x = coords[0]; return 2.0+3*x;} }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int /*comp*/) {const auto& x = coords[0]; return 2.0+3*x-0.1*x*x;} + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int /*comp*/) {const auto& x = coords[0]; return 2.0+3*x-0.1*x*x;} }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { const auto& x = coords[0]; const auto& y = coords[1]; return (comp == 0) ? 2.0+3*x+2*y : -2.0+2*x+5*y; } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> linearMap; + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> linearMap; const auto& x = coords[0]; const auto& y = coords[1]; return linearMap(coords, comp) -0.1*x*x+0.05*x*y+0.2*y*y; } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { const auto& x = coords[0]; const auto& y = coords[1]; return (comp == 0) ? 2.0+3*x+2*y+0.1*x*y : -2.0+2*x+5*y-0.1*x*y; } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> bilinearMap; + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> bilinearMap; const auto& x = coords[0]; const auto& y = coords[1]; return bilinearMap(coords, comp)-0.1*x*x -0.2*y*y +0.05*x*y*(x-y); } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> bilinearMap; + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> bilinearMap; const auto& x = coords[0]; const auto& y = coords[1]; return bilinearMap(coords, comp)-0.1*x*x -0.2*y*y +0.05*x*y*(x-y+x*y); } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { const auto& x = coords[0]; const auto& y = coords[1]; const auto& z = coords[2]; return (comp == 0) ? 2.0+3*x+2*y+4*z : (comp == 1) ? -2.0+2*x+5*y+4*z : @@ -170,39 +166,39 @@ namespace Intrepid2 { } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> linearMap; + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> linearMap; const auto& x = coords[0]; const auto& y = coords[1]; const auto& z = coords[2]; return linearMap(coords, comp)-0.1*x*x -0.2*y*y +0.3*z*z +0.05*x*y +0.07*x*z -0.06*y*z; //for simplicity we choose the same higher-order terms for all components } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> linearMap; - const double eps = epsilon(); + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> linearMap; + const ValueType eps = epsilon(); const auto& x = coords[0]; const auto& y = coords[1]; const auto z = (1.0 - coords[2] < eps) ? 1.0-eps : coords[2]; return linearMap(coords, comp)-0.1*x*y/(1.0-z); //for simplicity we choose the same higher-order terms for all components } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> quadraticMap; - const double eps = epsilon(); + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> quadraticMap; + const ValueType eps = epsilon(); const auto& x = coords[0]; const auto& y = coords[1]; const auto z = (1.0 - coords[2] < eps) ? 1.0-eps : coords[2]; return quadraticMap(coords, comp)-0.1*x*y/(1.0-z)*(1.0-x+y); //for simplicity we choose the higher-order terms for all components } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { const auto& x = coords[0]; const auto& y = coords[1]; const auto& z = coords[2]; return (comp == 0) ? 2.0+3*x+2*y+4*z +0.07*x*z -0.06*y*z : (comp == 1) ? -2.0+2*x+5*y+4*z +0.07*x*z -0.06*y*z : @@ -210,27 +206,27 @@ namespace Intrepid2 { } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> wedge6Map; + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> wedge6Map; const auto& x = coords[0]; const auto& y = coords[1]; const auto& z = coords[2]; return wedge6Map(coords, comp)-0.05*(x*x - y*y + z*z + x*y + x*y*z + y*z*z + x*x*z + y*y*z + x*z*z); //for simplicity we choose the same higher-order terms for all components } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> wedge15Map; + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> wedge15Map; const auto& x = coords[0]; const auto& y = coords[1]; const auto& z = coords[2]; return wedge15Map(coords, comp)+0.04*(x*x*z*z - x*y*z*z + y*y*z*z); //for simplicity we choose the same higher-order terms for all components } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { const auto& x = coords[0]; const auto& y = coords[1]; const auto& z = coords[2]; return (comp == 0) ? 2.0+3*x+2*y+4*z +0.05*x*y +0.07*x*z -0.06*y*z + 0.05*x*y*z : (comp == 1) ? -2.0+2*x+5*y+4*z +0.05*x*y +0.07*x*z -0.06*y*z + 0.05*x*y*z : @@ -238,55 +234,51 @@ namespace Intrepid2 { } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> trilinearMap; + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> trilinearMap; const auto& x = coords[0]; const auto& y = coords[1]; const auto& z = coords[2]; return trilinearMap(coords, comp)-0.05*(x*x - y*y + z*z + x*y*z*(x-y-z)+ x*x*y + y*z*z + x*x*z + y*y*z+ x*y*y + x*z*z); //for simplicity we choose the same higher-order terms for all components } }; - template <> - struct MapPoints::key> { - double operator()(const double* coords, int comp) { - MapPoints::key> hex20Map; + template + struct MapPoints::key, ValueType> { + ValueType operator()(const ValueType* coords, int comp) { + MapPoints::key, ValueType> hex20Map; const auto& x = coords[0]; const auto& y = coords[1]; const auto& z = coords[2]; return hex20Map(coords, comp)+0.07*(x*x*y*y + x*x*z*z + y*y*z*z + x*x*y*y*z*z + x*y*z*(x*y-x*z+y*z)); //for simplicity we choose the same higher-order terms for all components } }; - - - double mapLine2(const double* coords, int /*comp*/) {const auto& x = coords[0]; return 2.0+3*x;} - // This macro computes the reference cell nodes and maps them to the physical space (according to functional space associated to the topology). // It also maps four input points to the same physical sapce. #define INTREPID2_COMPUTE_POINTS_AND_CELL_NODES_IN_PHYS_SPACE(inCell, host_points, physPoints, physNodes, shtopo, cellTools) \ { \ - MapPoints mapPoints; \ - Intrepid2::HostBasisPtr basisPtr; \ + MapPoints mapPoints; \ + Intrepid2::HostBasisPtr basisPtr; \ using HostDeviceType = Kokkos::HostSpace::device_type; \ shards::CellTopology topo( shards::getCellTopologyData()); \ switch (topo.getKey()) { \ - case shards::Line<2>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_LINE_C1_FEM ()); break; \ - case shards::Line<3>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_LINE_C2_FEM ()); break; \ - case shards::Triangle<3>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TRI_C1_FEM ()); break; \ - case shards::Quadrilateral<4>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_QUAD_C1_FEM ()); break; \ - case shards::Tetrahedron<4>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TET_C1_FEM ()); break; \ - case shards::Hexahedron<8>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_HEX_C1_FEM ()); break; \ - case shards::Wedge<6>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_WEDGE_C1_FEM ()); break; \ - case shards::Pyramid<5>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_PYR_C1_FEM ()); break; \ - case shards::Triangle<6>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TRI_C2_FEM ()); break; \ - case shards::Quadrilateral<8>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_QUAD_I2_FEM ()); break; \ - case shards::Quadrilateral<9>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_QUAD_C2_FEM ()); break; \ - case shards::Tetrahedron<10>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TET_C2_FEM ()); break; \ - case shards::Tetrahedron<11>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TET_COMP12_FEM()); break; \ - case shards::Hexahedron<20>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_HEX_I2_FEM ()); break; \ - case shards::Hexahedron<27>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_HEX_C2_FEM ()); break; \ - case shards::Wedge<15>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_WEDGE_I2_FEM ()); break; \ - case shards::Wedge<18>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_WEDGE_C2_FEM ()); break; \ - case shards::Pyramid<13>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_PYR_I2_FEM ()); break; \ + case shards::Line<2>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_LINE_C1_FEM ()); break; \ + case shards::Line<3>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_LINE_C2_FEM ()); break; \ + case shards::Triangle<3>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TRI_C1_FEM ()); break; \ + case shards::Quadrilateral<4>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_QUAD_C1_FEM ()); break; \ + case shards::Tetrahedron<4>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TET_C1_FEM ()); break; \ + case shards::Hexahedron<8>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_HEX_C1_FEM ()); break; \ + case shards::Wedge<6>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_WEDGE_C1_FEM ()); break; \ + case shards::Pyramid<5>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_PYR_C1_FEM ()); break; \ + case shards::Triangle<6>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TRI_C2_FEM ()); break; \ + case shards::Quadrilateral<8>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_QUAD_I2_FEM ()); break; \ + case shards::Quadrilateral<9>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_QUAD_C2_FEM ()); break; \ + case shards::Tetrahedron<10>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TET_C2_FEM ()); break; \ + case shards::Tetrahedron<11>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_TET_COMP12_FEM()); break; \ + case shards::Hexahedron<20>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_HEX_I2_FEM ()); break; \ + case shards::Hexahedron<27>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_HEX_C2_FEM ()); break; \ + case shards::Wedge<15>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_WEDGE_I2_FEM ()); break; \ + case shards::Wedge<18>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_WEDGE_C2_FEM ()); break; \ + case shards::Pyramid<13>::key: basisPtr = Teuchos::rcp(new Basis_HGRAD_PYR_I2_FEM ()); break; \ default: {}; \ } \ \ @@ -294,10 +286,10 @@ namespace Intrepid2 { auto refNodes_h = Kokkos::DynRankView("refNodes",basisPtr->getCardinality(),dim); \ basisPtr->getDofCoords(refNodes_h); \ physNodes = Kokkos::DynRankView("physNodes",1,basisPtr->getCardinality(),dim); \ - physPoints = Kokkos::DynRankView("physPoints", host_points.extent(0),dim); \ + physPoints = Kokkos::DynRankView("physPoints", host_points.extent(0),dim); \ auto physNodes_h = Kokkos::create_mirror_view(physNodes); \ auto physPoints_h = Kokkos::create_mirror_view(physPoints); \ - double coords[3]={}; \ + ValueType coords[3]={}; \ for(size_t i=0; i< refNodes_h.extent(0);++i) { \ for (size_t d=0; d()); \ assert(ct::hasReferenceCell(topo)); \ std::string label = "reference"; \ @@ -379,7 +372,7 @@ namespace Intrepid2 { << "| |\n" << "===============================================================================\n"; - const ValueType tol = tolerence()*100.0; + const ValueType tol = tolerence()*100.0; int errorFlag = 0; @@ -392,30 +385,30 @@ namespace Intrepid2 { << "===============================================================================\n\n"; { - double offset = 0.0; - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Line<>, Impl::Line<2>); + ValueType offset = 0.0; + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Line<2>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Triangle<>, Impl::Triangle<3>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Quadrilateral<>, Impl::Quadrilateral<4>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Triangle<3>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Quadrilateral<4>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Tetrahedron<>, Impl::Tetrahedron<4>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Hexahedron<>, Impl::Hexahedron<8>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Tetrahedron<4>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Hexahedron<8>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Pyramid<>, Impl::Pyramid<5>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Wedge<>, Impl::Wedge<6>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Pyramid<5>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, true, shards::Wedge<6>); } { - double offset = 3.0; - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Line<>, Impl::Line<2>); + ValueType offset = 3.0; + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Line<2>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Triangle<>, Impl::Triangle<3>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Quadrilateral<>, Impl::Quadrilateral<4>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Triangle<3>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Quadrilateral<4>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Tetrahedron<>, Impl::Tetrahedron<4>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Hexahedron<>, Impl::Hexahedron<8>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Tetrahedron<4>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Hexahedron<8>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Pyramid<>, Impl::Pyramid<5>); - INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Wedge<>, Impl::Wedge<6>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Pyramid<5>); + INTREPID2_TEST_CHECK_POINT_INCLUSION(offset, false, shards::Wedge<6>); } @@ -433,7 +426,7 @@ namespace Intrepid2 { *outStream << "\n" << "===============================================================================\n" - << "| Test 2: test Point wise inclusion points\n" + << "| Test 2: test Point wise inclusion \n" << "===============================================================================\n\n"; @@ -453,7 +446,7 @@ namespace Intrepid2 { auto pts1d_h = Kokkos::create_mirror_view(pts1d); auto pts2d_h = Kokkos::create_mirror_view(pts2d); auto pts3d_h = Kokkos::create_mirror_view(pts3d); - double eps = 1e-4; + ValueType eps = 1e-4; using ct = Intrepid2::CellTools; // line topologies diff --git a/packages/minitensor/src/MiniTensor_Geometry.h b/packages/minitensor/src/MiniTensor_Geometry.h index 8c1c1978fb46..8c2eb153cba5 100644 --- a/packages/minitensor/src/MiniTensor_Geometry.h +++ b/packages/minitensor/src/MiniTensor_Geometry.h @@ -95,7 +95,6 @@ volume(Vector const & p0, Vector const & p1, /// WARNING: This is not the center of mass. /// template -KOKKOS_INLINE_FUNCTION Vector centroid(std::vector> const & points); diff --git a/packages/piro/src/Piro_PerformAnalysis.cpp b/packages/piro/src/Piro_PerformAnalysis.cpp index faa27f4d95ff..7f603b9a8340 100644 --- a/packages/piro/src/Piro_PerformAnalysis.cpp +++ b/packages/piro/src/Piro_PerformAnalysis.cpp @@ -644,72 +644,72 @@ if(useCustomDotProduct) { } } - // Run Algorithm - Teuchos::RCP > boundConstraint; - bool boundConstrained = rolParams.get("Bound Constrained", false); - - if(boundConstrained) { - Teuchos::RCP> p_lo = model->getLowerBounds().get_p(0)->clone_v(); - Teuchos::RCP> p_up = model->getUpperBounds().get_p(0)->clone_v(); + int return_status = 0; + if(rolParams.get("Perform Optimization", true)) { + // Run Algorithm + Teuchos::RCP > boundConstraint; + bool boundConstrained = rolParams.get("Bound Constrained", false); - //ROL::Thyra_BoundConstraint boundConstraint(p_lo->clone_v(), p_up->clone_v(), eps_bound); - boundConstraint = rcp( new ROL::Bounds(ROL::makePtr >(p_lo), ROL::makePtr >(p_up))); - } + if(boundConstrained) { + Teuchos::RCP> p_lo = model->getLowerBounds().get_p(0)->clone_v(); + Teuchos::RCP> p_up = model->getUpperBounds().get_p(0)->clone_v(); - int return_status = 0; + //ROL::Thyra_BoundConstraint boundConstraint(p_lo->clone_v(), p_up->clone_v(), eps_bound); + boundConstraint = rcp( new ROL::Bounds(ROL::makePtr >(p_lo), ROL::makePtr >(p_up))); + } - RolOutputBuffer rolOutputBuffer; - std::ostream rolOutputStream(&rolOutputBuffer); - Teuchos::RCP rolOutput = Teuchos::getFancyOStream(Teuchos::rcpFromRef(rolOutputStream)); - rolOutput->setOutputToRootOnly(0); + RolOutputBuffer rolOutputBuffer; + std::ostream rolOutputStream(&rolOutputBuffer); + Teuchos::RCP rolOutput = Teuchos::getFancyOStream(Teuchos::rcpFromRef(rolOutputStream)); + rolOutput->setOutputToRootOnly(0); - + - if ( useFullSpace ) { - //using default dot product for x - ROL::Vector_SimOpt sopt_vec(ROL::makePtrFromRef(rol_x),rol_p_primal); - auto r_ptr = rol_x.clone(); - double tol = 1e-5; - constr.solve(*r_ptr,rol_x,rol_p,tol); - if(boundConstrained) { - *out << "Piro::PerformROLSteadyAnalysis: Solving Full Space Bound Constrained Optimization Problem" << std::endl; - ROL::BoundConstraint u_bnd(rol_x); - ROL::Ptr > bnd = ROL::makePtr >(ROL::makePtrFromRef(u_bnd),boundConstraint); - ROL::Problem prob(ROL::makePtrFromRef(obj), ROL::makePtrFromRef(sopt_vec)); - prob.addBoundConstraint(bnd); - prob.addConstraint("Constraint", ROL::makePtrFromRef(constr),r_ptr); - bool lumpConstraints(false), printToStream(true); - prob.finalize(lumpConstraints, printToStream, *rolOutput); - ROL::Solver optSolver(ROL::makePtrFromRef(prob), rolParams.sublist("ROL Options")); - optSolver.solve(*out); - return_status = optSolver.getAlgorithmState()->statusFlag; + if ( useFullSpace ) { + //using default dot product for x + ROL::Vector_SimOpt sopt_vec(ROL::makePtrFromRef(rol_x),rol_p_primal); + auto r_ptr = rol_x.clone(); + double tol = 1e-5; + constr.solve(*r_ptr,rol_x,rol_p,tol); + if(boundConstrained) { + *out << "Piro::PerformROLSteadyAnalysis: Solving Full Space Bound Constrained Optimization Problem" << std::endl; + ROL::BoundConstraint u_bnd(rol_x); + ROL::Ptr > bnd = ROL::makePtr >(ROL::makePtrFromRef(u_bnd),boundConstraint); + ROL::Problem prob(ROL::makePtrFromRef(obj), ROL::makePtrFromRef(sopt_vec)); + prob.addBoundConstraint(bnd); + prob.addConstraint("Constraint", ROL::makePtrFromRef(constr),r_ptr); + bool lumpConstraints(false), printToStream(true); + prob.finalize(lumpConstraints, printToStream, *rolOutput); + ROL::Solver optSolver(ROL::makePtrFromRef(prob), rolParams.sublist("ROL Options")); + optSolver.solve(*out); + return_status = optSolver.getAlgorithmState()->statusFlag; + } else { + *out << "Piro::PerformROLSteadyAnalysis: Solving Full Space Unconstrained Optimization Problem" << std::endl; + ROL::Problem prob(ROL::makePtrFromRef(obj), ROL::makePtrFromRef(sopt_vec));//, ROL::makePtrFromRef(constr), r_ptr); + prob.addConstraint("Constraint", ROL::makePtrFromRef(constr),r_ptr); + bool lumpConstraints(false), printToStream(true); + prob.finalize(lumpConstraints, printToStream, *rolOutput); + ROL::Solver optSolver(ROL::makePtrFromRef(prob), rolParams.sublist("ROL Options")); + optSolver.solve(*out); + return_status = optSolver.getAlgorithmState()->statusFlag; + } } else { - *out << "Piro::PerformROLSteadyAnalysis: Solving Full Space Unconstrained Optimization Problem" << std::endl; - ROL::Problem prob(ROL::makePtrFromRef(obj), ROL::makePtrFromRef(sopt_vec));//, ROL::makePtrFromRef(constr), r_ptr); - prob.addConstraint("Constraint", ROL::makePtrFromRef(constr),r_ptr); - bool lumpConstraints(false), printToStream(true); - prob.finalize(lumpConstraints, printToStream, *rolOutput); - ROL::Solver optSolver(ROL::makePtrFromRef(prob), rolParams.sublist("ROL Options")); - optSolver.solve(*out); - return_status = optSolver.getAlgorithmState()->statusFlag; - } - } else { - Teuchos::RCP> customSecant = useCustomSecant ? Teuchos::rcp(new CustomLBFGSSecant (H_sec, invH_sec, secantMaxStorage, secantScaling)) : Teuchos::null; - if(boundConstrained) { - *out << "Piro::PerformROLSteadyAnalysis: Solving Reduced Space Bound Constrained Optimization Problem" << std::endl; - auto algo = ROL::TypeB::AlgorithmFactory(rolParams.sublist("ROL Options"),customSecant); - algo->run(*rol_p_primal, reduced_obj, *boundConstraint, *rolOutput); - return_status = algo->getState()->statusFlag; - } else { - *out << "Piro::PerformROLSteadyAnalysis: Solving Reduced Space Unconstrained Optimization Problem" << std::endl; - auto algo = ROL::TypeU::AlgorithmFactory(rolParams.sublist("ROL Options"),customSecant); - algo->run(*rol_p_primal, reduced_obj, *rolOutput); - return_status = algo->getState()->statusFlag; + Teuchos::RCP> customSecant = useCustomSecant ? Teuchos::rcp(new CustomLBFGSSecant (H_sec, invH_sec, secantMaxStorage, secantScaling)) : Teuchos::null; + if(boundConstrained) { + *out << "Piro::PerformROLSteadyAnalysis: Solving Reduced Space Bound Constrained Optimization Problem" << std::endl; + auto algo = ROL::TypeB::AlgorithmFactory(rolParams.sublist("ROL Options"),customSecant); + algo->run(*rol_p_primal, reduced_obj, *boundConstraint, *rolOutput); + return_status = algo->getState()->statusFlag; + } else { + *out << "Piro::PerformROLSteadyAnalysis: Solving Reduced Space Unconstrained Optimization Problem" << std::endl; + auto algo = ROL::TypeU::AlgorithmFactory(rolParams.sublist("ROL Options"),customSecant); + algo->run(*rol_p_primal, reduced_obj, *rolOutput); + return_status = algo->getState()->statusFlag; + } } - } - if(analysisVerbosity > 1) //write recap of optimization convergence - *out << rolOutputBuffer.getStringStream().str(); - + if(analysisVerbosity > 1) //write recap of optimization convergence + *out << rolOutputBuffer.getStringStream().str(); + } return return_status; #else (void)piroModel; @@ -917,7 +917,7 @@ Piro::PerformROLTransientAnalysis( if(useTempusDriver) { - Piro::ThyraProductME_TempusFinalObjective tempus_obj(model, forward_integrator, adjoint_integrator, adjointModel, g_index, piroParams, nt, analysisVerbosityLevel, observer); + Piro::ThyraProductME_TempusFinalObjective tempus_obj(model, piroTempusSolver, forward_integrator, adjoint_integrator, adjointModel, g_index, piroParams, nt, analysisVerbosityLevel, observer); ROL::Ptr > obj_ptr = ROL::makePtrFromRef(tempus_obj); @@ -937,15 +937,39 @@ Piro::PerformROLTransientAnalysis( if(boundConstrained) { *out << "Piro::PerformROLTransientAnalysis: Solving Reduced Space Bound Constrained Optimization Problem" << std::endl; auto algo = ROL::TypeB::AlgorithmFactory(rolParams.sublist("ROL Options")); - algo->run(rol_p_primal, *obj_ptr, *boundConstraint, *rolOutput); + + std::streambuf *coutbuf; + if(rolParams.get("Redirect Tempus Output", true)) { + std::ofstream out_file(rolParams.get("Tempus Output Filename", "log_tempus.txt")); + coutbuf = std::cout.rdbuf(); + std::cout.rdbuf(out_file.rdbuf()); + } + algo->run(rol_p_primal, *obj_ptr, *boundConstraint, *rolOutput); + if(rolParams.get("Redirect Tempus Output", true)) { + std::cout.rdbuf(coutbuf); + } + return_status = algo->getState()->statusFlag; } else { *out << "Piro::PerformROLTransientAnalysis: Solving Reduced Space Unconstrained Optimization Problem" << std::endl; auto algo = ROL::TypeU::AlgorithmFactory(rolParams.sublist("ROL Options")); + + std::streambuf *coutbuf; + if(rolParams.get("Redirect Tempus Output", true)) { + std::ofstream out_file(rolParams.get("Tempus Output Filename", "log_tempus.txt")); + coutbuf = std::cout.rdbuf(); + std::cout.rdbuf(out_file.rdbuf()); + } algo->run(rol_p_primal, *obj_ptr, *rolOutput); + if(rolParams.get("Redirect Tempus Output", true)) { + std::cout.rdbuf(coutbuf); + } + return_status = algo->getState()->statusFlag; } if (return_status == ROL::EExitStatus::EXITSTATUS_STEPTOL) return_status = 0; + if(analysisVerbosity > 1) //write recap of optimization convergence + *out << rolOutputBuffer.getStringStream().str(); } //! check correctness of Gradient prvided by Model Evaluator @@ -1007,21 +1031,31 @@ Piro::PerformROLTransientAnalysis( ROL::Vector_SimOpt sopt_vec_direction2_p(rol_x_zero,ROL::makePtrFromRef(rol_p_direction2)); *out << "Piro::PerformROLTransientAnalysis: Checking Reduced Gradient Accuracy" << std::endl; - ROL::Ptr> rol_p_direction1_transient = ROL::PartitionedVector::create(rol_p_direction1, nt); - Thyra::DetachedVectorView rol_p_primal_view(rol_p_primal.getVector()); - Thyra::DetachedVectorView rol_p_direction1_view(rol_p_direction1.getVector()); - - *out << "rol_p_primal = [ " << rol_p_primal_view(0) << " " << rol_p_primal_view(1) << " ] " << std::endl; - *out << "rol_p_direction1 = [ " << rol_p_direction1_view(0) << " " << rol_p_direction1_view(1) << " ] " << std::endl; - *out << "Piro::PerformROLAnalysis: Checking Reduced Gradient Accuracy" << std::endl; + RolOutputBuffer rolOutputBuffer; + std::ostream rolOutputStream(&rolOutputBuffer); + Teuchos::RCP rolOutput = Teuchos::getFancyOStream(Teuchos::rcpFromRef(rolOutputStream)); + rolOutput->setOutputToRootOnly(0); const double ten(10); std::vector steps(ROL_NUM_CHECKDERIV_STEPS); for(int i=0;i(-i-1)); } - obj_ptr->checkGradient(rol_p_primal, rol_p_primal.dual(), rol_p_direction1, steps, true, *out, 1); + + std::streambuf *coutbuf; + if(rolParams.get("Redirect Tempus Output", true)) { + std::ofstream out_file(rolParams.get("Tempus Output Filename", "log_tempus.txt")); + coutbuf = std::cout.rdbuf(); + std::cout.rdbuf(out_file.rdbuf()); + } + obj_ptr->checkGradient(rol_p_primal, rol_p_primal.dual(), rol_p_direction1, steps, true, *rolOutput, 1); + if(rolParams.get("Redirect Tempus Output", true)) { + std::cout.rdbuf(coutbuf); + } + + if(analysisVerbosity > 1) //write recap of optimization convergence + *out << rolOutputBuffer.getStringStream().str(); } } @@ -1061,6 +1095,8 @@ Piro::PerformROLTransientAnalysis( return_status = algo->getState()->statusFlag; } if (return_status == ROL::EExitStatus::EXITSTATUS_STEPTOL) return_status = 0; + if(analysisVerbosity > 1) //write recap of optimization convergence + *out << rolOutputBuffer.getStringStream().str(); } //! check correctness of Gradient prvided by Model Evaluator @@ -1122,21 +1158,21 @@ Piro::PerformROLTransientAnalysis( ROL::Vector_SimOpt sopt_vec_direction2_p(rol_x_zero,ROL::makePtrFromRef(rol_p_direction2)); *out << "Piro::PerformROLTransientAnalysis: Checking Reduced Gradient Accuracy" << std::endl; - ROL::Ptr> rol_p_direction1_transient = ROL::PartitionedVector::create(rol_p_direction1, nt); - Thyra::DetachedVectorView rol_p_primal_view(rol_p_primal.getVector()); - Thyra::DetachedVectorView rol_p_direction1_view(rol_p_direction1.getVector()); - - *out << "rol_p_primal = [ " << rol_p_primal_view(0) << " " << rol_p_primal_view(1) << " ] " << std::endl; - *out << "rol_p_direction1 = [ " << rol_p_direction1_view(0) << " " << rol_p_direction1_view(1) << " ] " << std::endl; - *out << "Piro::PerformROLAnalysis: Checking Reduced Gradient Accuracy" << std::endl; + RolOutputBuffer rolOutputBuffer; + std::ostream rolOutputStream(&rolOutputBuffer); + Teuchos::RCP rolOutput = Teuchos::getFancyOStream(Teuchos::rcpFromRef(rolOutputStream)); + rolOutput->setOutputToRootOnly(0); const double ten(10); std::vector steps(ROL_NUM_CHECKDERIV_STEPS); for(int i=0;i(-i-1)); } - reduced_stationarycontrols_obj.checkGradient(rol_p_primal, rol_p_primal.dual(), rol_p_direction1, steps, true, *out, 1); + reduced_stationarycontrols_obj.checkGradient(rol_p_primal, rol_p_primal.dual(), rol_p_direction1, steps, true, *rolOutput, 1); + + if(analysisVerbosity > 1) //write recap of optimization convergence + *out << rolOutputBuffer.getStringStream().str(); } } } @@ -1214,6 +1250,8 @@ Piro::getValidPiroAnalysisROLParameters(int num_parameters) validPL->set("Bound Constrained", true, "Whether to enforce bounds to the parameters during the optimization"); validPL->set("Full Space", true, "Whether to use a full-space or a reduced-space optimization approach"); validPL->set("Tempus Driver", false, "Whether to use Tempus to compute the derivative"); + validPL->set("Redirect Tempus Output", true, "Whether to redirect Tempus output to file"); + validPL->set("Tempus Output Filename", "log_tempus.txt", "Filename for the Tempus output"); validPL->set("Response Depends Only On Final Time", true, "Whether the response depends only on the solution and parameters at the final time"); validPL->set("Use NOX Solver", true, "Whether to use NOX for solving the state equation or the native ROL solver"); diff --git a/packages/piro/src/Piro_TempusIntegrator.hpp b/packages/piro/src/Piro_TempusIntegrator.hpp index def049a158f2..38e4928e90a4 100644 --- a/packages/piro/src/Piro_TempusIntegrator.hpp +++ b/packages/piro/src/Piro_TempusIntegrator.hpp @@ -60,6 +60,8 @@ class TempusIntegrator void setObserver(Teuchos::RCP> obs = Teuchos::null); + void clearSolutionHistory(); + void initialize(); void initializeSolutionHistory(Scalar t0, diff --git a/packages/piro/src/Piro_TempusIntegrator_Def.hpp b/packages/piro/src/Piro_TempusIntegrator_Def.hpp index 11831f8e3e05..beb0d58be185 100644 --- a/packages/piro/src/Piro_TempusIntegrator_Def.hpp +++ b/packages/piro/src/Piro_TempusIntegrator_Def.hpp @@ -239,6 +239,21 @@ Piro::TempusIntegrator::setObserver(Teuchos::RCP +void +Piro::TempusIntegrator::clearSolutionHistory() +{ + if (basicIntegrator_ != Teuchos::null) { + basicIntegrator_->getNonConstSolutionHistory()->clear(); + } + if (fwdSensIntegrator_ != Teuchos::null) { + fwdSensIntegrator_->getNonConstSolutionHistory()->clear(); + } + if (adjSensIntegrator_ != Teuchos::null) { + adjSensIntegrator_->getNonConstSolutionHistory()->clear(); + } +} + template void Piro::TempusIntegrator::initialize() diff --git a/packages/piro/src/Piro_TempusSolver.hpp b/packages/piro/src/Piro_TempusSolver.hpp index 159625173815..6912d13806cd 100644 --- a/packages/piro/src/Piro_TempusSolver.hpp +++ b/packages/piro/src/Piro_TempusSolver.hpp @@ -132,6 +132,9 @@ class TempusSolver Teuchos::RCP> getPiroTempusIntegrator() const {return piroTempusIntegrator_;} + Teuchos::RCP> + getNonconstPiroTempusIntegrator() const {return piroTempusIntegrator_;} + Teuchos::RCP > getSubModel() {return model_;} Teuchos::RCP > @@ -148,7 +151,9 @@ class TempusSolver //@} /** \brief . */ - Teuchos::RCP getValidTempusParameters() const; + Teuchos::RCP getValidTempusParameters( + const std::string integratorName = "Tempus Integrator", + const std::string stepperName = "Tempus Stepper") const; Teuchos::RCP> piroTempusIntegrator_; Teuchos::RCP > fwdStateStepper_; diff --git a/packages/piro/src/Piro_TempusSolver_Def.hpp b/packages/piro/src/Piro_TempusSolver_Def.hpp index 94a1206fd14f..333e9824705b 100644 --- a/packages/piro/src/Piro_TempusSolver_Def.hpp +++ b/packages/piro/src/Piro_TempusSolver_Def.hpp @@ -108,7 +108,7 @@ void Piro::TempusSolver::initialize( RCP tempusPL = sublist(appParams, "Tempus", true); abort_on_failure_ = tempusPL->get("Abort on Failure", true); - RCP integratorPL = sublist(tempusPL, "Tempus Integrator", true); + RCP integratorPL = sublist(tempusPL, tempusPL->get("Integrator Name", "Tempus Integrator"), true); //IKT, 10/31/16, FIXME: currently there is no Verbosity Sublist in Tempus, but //Curt will add this at some point. When this option is added, set Verbosity //based on that sublist, rather than hard-coding it here. @@ -162,7 +162,7 @@ void Piro::TempusSolver::initialize( t_final_ = timeStepControlPL->get("Final Time", t_initial_); } //*out_ << "tempusPL = " << *tempusPL << "\n"; - RCP stepperPL = sublist(tempusPL, "Tempus Stepper", true); + RCP stepperPL = sublist(tempusPL, integratorPL->get("Stepper Name", "Tempus Stepper"), true); //*out_ << "stepperPL = " << *stepperPL << "\n"; const std::string stepperType = stepperPL->get("Stepper Type", "Backward Euler"); //*out_ << "Stepper Type = " << stepperType << "\n"; @@ -180,7 +180,10 @@ void Piro::TempusSolver::initialize( #endif linearSolverBuilder.setParameterList(sublist(tempusPL, "Stratimikos", true)); - tempusPL->validateParameters(*getValidTempusParameters(),0); + tempusPL->validateParameters(*getValidTempusParameters( + tempusPL->get("Integrator Name", "Tempus Integrator"), + integratorPL->get("Stepper Name", "Tempus Stepper") + ), 0); RCP > lowsFactory = createLinearSolveStrategy(linearSolverBuilder); // @@ -544,7 +547,7 @@ void Piro::TempusSolver::evalModelImpl( template Teuchos::RCP -Piro::TempusSolver::getValidTempusParameters() const +Piro::TempusSolver::getValidTempusParameters(const std::string integratorName, const std::string stepperName) const { Teuchos::RCP validPL = Teuchos::rcp(new Teuchos::ParameterList("ValidTempusSolverParams")); @@ -564,9 +567,9 @@ Piro::TempusSolver::getValidTempusParameters() const validPL->set("Invert Mass Matrix", true, "Boolean to tell code whether or not to invert mass matrix"); validPL->set("Constant Mass Matrix", false, "Boolean to tell code if mass matrix is constant in time"); validPL->set("Abort on Failure", true, ""); - validPL->set("Integrator Name", "Tempus Integrator", ""); - validPL->sublist("Tempus Integrator", false, ""); - validPL->sublist("Tempus Stepper", false, ""); + validPL->set("Integrator Name", integratorName, ""); + validPL->sublist(integratorName, false, ""); + validPL->sublist(stepperName, false, ""); validPL->sublist("Time Step Control", false, ""); validPL->sublist("Sensitivities", false, ""); return validPL; diff --git a/packages/piro/src/Piro_ThyraProductME_Tempus_FinalObjective.hpp b/packages/piro/src/Piro_ThyraProductME_Tempus_FinalObjective.hpp index 89d6d362e7d6..d2ddac64e1b8 100644 --- a/packages/piro/src/Piro_ThyraProductME_Tempus_FinalObjective.hpp +++ b/packages/piro/src/Piro_ThyraProductME_Tempus_FinalObjective.hpp @@ -30,6 +30,8 @@ #include "ROL_Vector.hpp" #include "ROL_ThyraVector.hpp" +#include "Piro_TempusIntegrator.hpp" + namespace Piro { template @@ -38,6 +40,7 @@ class ThyraProductME_TempusFinalObjective : public virtual ROL::Objective ThyraProductME_TempusFinalObjective( const Teuchos::RCP> & model, + const Teuchos::RCP> & piroTempusSolver, const Teuchos::RCP >& integrator, const Teuchos::RCP> & adjoint_integrator, const Teuchos::RCP> & modelAdjoin, @@ -50,9 +53,9 @@ class ThyraProductME_TempusFinalObjective : public virtual ROL::Objective virtual ~ThyraProductME_TempusFinalObjective() {} //! Compute value of objective - Real value( const ROL::Vector &p, Real &tol ); + Real value( const ROL::Vector &p, Real &tol ) override; - void gradient( ROL::Vector &grad, const ROL::Vector &p, Real &tol ) const; + void gradient( ROL::Vector &grad, const ROL::Vector &p, Real &tol ) override; //! Helper function to run tempus, computing responses and derivatives void run_tempus(ROL::Vector& r, const ROL::Vector& p) const; @@ -87,6 +90,7 @@ class ThyraProductME_TempusFinalObjective : public virtual ROL::Objective const Teuchos::RCP > integrator_; const Teuchos::RCP> thyra_model_; const Teuchos::RCP> thyra_adjoint_model_; + Teuchos::RCP> piroTempusIntegrator_; std::string sensitivity_method_; const int g_index_; int Nt_; @@ -108,6 +112,7 @@ template ThyraProductME_TempusFinalObjective:: ThyraProductME_TempusFinalObjective( const Teuchos::RCP> & model, + const Teuchos::RCP> & piroTempusSolver, const Teuchos::RCP >& integrator, const Teuchos::RCP> & adjoint_integrator, const Teuchos::RCP> & modelAdjoin, @@ -119,6 +124,7 @@ ThyraProductME_TempusFinalObjective( integrator_(integrator), thyra_model_(model), thyra_adjoint_model_(modelAdjoin), + piroTempusIntegrator_(piroTempusSolver->getNonconstPiroTempusIntegrator()), sensitivity_method_("Adjoint"), g_index_(g_index), Nt_(Nt), @@ -160,7 +166,7 @@ value( const ROL::Vector &p, Real &tol ) template void ThyraProductME_TempusFinalObjective:: -gradient( ROL::Vector &grad, const ROL::Vector &p, Real &tol ) const +gradient( ROL::Vector &grad, const ROL::Vector &p, Real &tol ) { *out_ << "Piro::ThyraProductME_TempusFinalObjective::gradient" << std::endl; @@ -260,20 +266,48 @@ run_tempus(const Thyra::ModelEvaluatorBase::InArgs& inArgs, RCP > x, x_dot; RCP > dxdp, dxdotdp; RCP > g = outArgs.get_g(g_index_); + const bool compute_dgdp = !outArgs.get_DgDp(g_index_, 0).isEmpty(); - // Create and run integrator - SENS_METHOD sens_method = Piro::NONE; - Teuchos::RCP > integrator - = Teuchos::rcp(new Piro::TempusIntegrator(tempus_params_, wrapped_model, sens_method)); - const bool integratorStatus = integrator->advanceTime(time_final_); - TEUCHOS_TEST_FOR_EXCEPTION( - !integratorStatus, std::logic_error, "Integrator failed!"); - // Get final state - t = integrator->getTime(); - x = integrator->getX(); - x_dot = integrator->getXDot(); + RCP > dgdp_mv = + outArgs.get_DgDp(g_index_, 0).getMultiVector(); + MEB::EDerivativeMultiVectorOrientation dgdp_orientation = + outArgs.get_DgDp(g_index_, 0).getMultiVectorOrientation(); + Teko::BlockedLinearOp dgdp_op = + Teuchos::rcp_dynamic_cast>(outArgs.get_DgDp(g_index_, 0).getLinearOp()); + + piroTempusIntegrator_->clearSolutionHistory(); + // Create and run integrator + if (compute_dgdp && sensitivity_method_ == "Adjoint") { + const bool integratorStatus = piroTempusIntegrator_->advanceTime(time_final_); + TEUCHOS_TEST_FOR_EXCEPTION( + !integratorStatus, std::logic_error, "Integrator failed!"); + + // Get final state + t = piroTempusIntegrator_->getTime(); + x = piroTempusIntegrator_->getX(); + x_dot = piroTempusIntegrator_->getXDot(); + if(!dgdp_mv.is_null()) + Thyra::assign(dgdp_mv.ptr(), *(piroTempusIntegrator_->getDgDp())); + else { + //dgdp_op->setBlock(0, 0, piroTempusIntegrator->getDgDp()); + dgdp_mv = Teuchos::rcp_dynamic_cast>( Teuchos::rcp_dynamic_cast>(dgdp_op->getNonconstBlock(0, 0))->getNonconstOp() ); + Thyra::assign(dgdp_mv.ptr(), *(piroTempusIntegrator_->getDgDp())); + } + } + else { + RCP > integrator = + Tempus::createIntegratorBasic(tempus_params_, wrapped_model); + const bool integratorStatus = integrator->advanceTime(); + TEUCHOS_TEST_FOR_EXCEPTION( + !integratorStatus, std::logic_error, "Integrator failed!"); + + // Get final state + t = integrator->getTime(); + x = integrator->getX(); + x_dot = integrator->getXDot(); + } // Evaluate response at final state MEB::InArgs modelInArgs = inArgs; @@ -282,8 +316,30 @@ run_tempus(const Thyra::ModelEvaluatorBase::InArgs& inArgs, if (modelInArgs.supports(MEB::IN_ARG_x_dot)) modelInArgs.set_x_dot(x_dot); if (modelInArgs.supports(MEB::IN_ARG_t)) modelInArgs.set_t(t); RCP > dgdx, dgdxdot; + if (compute_dgdp && sensitivity_method_ == "Adjoint") { + // Clear dg/dp as an out arg since it was already computed by the adjoint + // integrator + modelOutArgs.set_DgDp(g_index_, 0, + MEB::Derivative()); + } thyra_model_->evalModel(modelInArgs, modelOutArgs); + + // dg/dp = dg/dp + dg/dx*dx/dp + dg/dx_dot*dx_dot/dp + // We assume dg/dx, dg/dxdot are in gradient form while dxdp, dxdotdp are in + // Jacobian form + if (compute_dgdp && dgdx != Teuchos::null) { + if (dgdp_orientation == MEB::DERIV_MV_JACOBIAN_FORM) + dgdx->apply(Thyra::TRANS, *dxdp, dgdp_mv.ptr(), Real(1.0), Real(1.0)); + else + dxdp->apply(Thyra::TRANS, *dgdx, dgdp_mv.ptr(), Real(1.0), Real(1.0)); + } + if (compute_dgdp && dgdxdot != Teuchos::null) { + if (dgdp_orientation == MEB::DERIV_MV_JACOBIAN_FORM) + dgdxdot->apply(Thyra::TRANS, *dxdotdp, dgdp_mv.ptr(), Real(1.0), Real(1.0)); + else + dxdotdp->apply(Thyra::TRANS, *dgdxdot, dgdp_mv.ptr(), Real(1.0), Real(1.0)); + } } diff --git a/packages/piro/test/Main_AnalysisDriver_Tempus.cpp b/packages/piro/test/Main_AnalysisDriver_Tempus.cpp index b9692e2c6a4f..09ed216b0c95 100644 --- a/packages/piro/test/Main_AnalysisDriver_Tempus.cpp +++ b/packages/piro/test/Main_AnalysisDriver_Tempus.cpp @@ -46,47 +46,11 @@ #endif const Teuchos::RCP > solverNew( + const Teuchos::RCP piroParams, const Teuchos::RCP > &thyraModel, - const Teuchos::RCP > &thyraAdjointModel, - double finalTime, - const std::string sens_method_string) + const Teuchos::RCP > &thyraAdjointModel) { - Teuchos::RCP analysisPL = - Teuchos::rcp(new Teuchos::ParameterList("Analysis")); - auto tempusPL = analysisPL->sublist("Tempus"); - analysisPL->sublist("Tempus").sublist("Tempus", false, ""); - /* - analysisPL->sublist("Tempus").sublist("Albany Time Step Control Options", false, ""); - analysisPL->sublist("Tempus").sublist("Albany Time Step Control Options", false, "").set("Initial Time", 0.0, ""); - analysisPL->sublist("Tempus").sublist("Albany Time Step Control Options", false, "").set("Initial Time Step", 0.1, ""); - analysisPL->sublist("Tempus").sublist("Albany Time Step Control Options", false, "").set("Minimum Time Step", 0.1, ""); - analysisPL->sublist("Tempus").sublist("Albany Time Step Control Options", false, "").set("Maximum Time Step", 0.1, ""); - analysisPL->sublist("Tempus").sublist("Albany Time Step Control Options", false, "").set("Final Time", 1.0, ""); - analysisPL->sublist("Tempus").sublist("Albany Time Step Control Options", false, "").set("Reduction Factor", 1.0, ""); - analysisPL->sublist("Tempus").sublist("Albany Time Step Control Options", false, "").set("Amplification Factor", 1.0, ""); - */ - analysisPL->sublist("Tempus").sublist("Stratimikos", false, ""); - analysisPL->sublist("Tempus").sublist("NonLinear Solver", false, ""); - //analysisPL->sublist("Tempus").set("Verbosity Level", "", ""); - analysisPL->sublist("Tempus").set("Lump Mass Matrix", false, "Boolean to tell code whether to lump mass matrix"); - analysisPL->sublist("Tempus").set("Invert Mass Matrix", true, "Boolean to tell code whether or not to invert mass matrix"); - analysisPL->sublist("Tempus").set("Constant Mass Matrix", false, "Boolean to tell code if mass matrix is constant in time"); - analysisPL->sublist("Tempus").set("Abort on Failure", true, ""); - analysisPL->sublist("Tempus").set("Integrator Name", "Tempus Integrator"); - analysisPL->sublist("Tempus").sublist("Tempus Integrator").set("Integrator Type", "Integrator Basic"); - analysisPL->sublist("Tempus").sublist("Tempus Integrator").set("Stepper Name", "Tempus Stepper"); - analysisPL->sublist("Tempus").sublist("Tempus Integrator").sublist("Solution History").set("Storage Type", "Unlimited"); - analysisPL->sublist("Tempus").sublist("Tempus Integrator").sublist("Solution History").set("Storage Limit", 20); - analysisPL->sublist("Tempus").sublist("Tempus Integrator").sublist("Time Step Control").set("Initial Time", 0.0); - analysisPL->sublist("Tempus").sublist("Tempus Integrator").sublist("Time Step Control").set("Final Time", finalTime); - analysisPL->sublist("Tempus").sublist("Tempus Stepper").set("Stepper Type", "Backward Euler"); - analysisPL->sublist("Tempus").sublist("Tempus Stepper").set("Zero Initial Guess", false); - analysisPL->sublist("Tempus").sublist("Tempus Stepper").set("Solver Name", "Demo Solver"); - analysisPL->sublist("Tempus").sublist("Tempus Stepper").sublist("Demo Solver").sublist("NOX").sublist("Direction").set("Method","Newton"); - analysisPL->sublist("Tempus").sublist("Sensitivities", false, ""); - analysisPL->set("Sensitivity Method", "Adjoint"); - - return Teuchos::rcp(new Piro::TempusSolver(analysisPL, thyraModel, thyraAdjointModel)); + return Teuchos::rcp(new Piro::TempusSolver(piroParams, thyraModel, thyraAdjointModel)); } @@ -251,7 +215,11 @@ int main(int argc, char *argv[]) { if(Teuchos::nonnull(adjointModel)) adjointModelWithSolve= rcp(new Thyra::DefaultModelEvaluatorWithSolveFactory(adjointModel, lowsFactory)); - const RCP> piro = solverNew(Teuchos::rcp_dynamic_cast>(modelWithSolve), Teuchos::rcp_dynamic_cast>(adjointModelWithSolve), 10., "Adjoint"); + const RCP> piro = + solverNew( + piroParams, + Teuchos::rcp_dynamic_cast>(modelWithSolve), + Teuchos::rcp_dynamic_cast>(adjointModelWithSolve)); // Call the analysis routine RCP> p; @@ -260,6 +228,7 @@ int main(int argc, char *argv[]) { if (Teuchos::nonnull(p)) { //p might be null if the package ROL is not enabled Thyra::DetachedVectorView p_view(p); double p_exact[2]; + double tol = 1e-5; if (mockModel=="MockModelEval_A_Tpetra") { p_exact[0] = 1; p_exact[1] = 3; @@ -275,8 +244,8 @@ int main(int argc, char *argv[]) { if (mockModel=="MassSpringDamperModel") { p_exact[0] = 1.; p_exact[1] = 0.5; + tol = 1e-3; } - double tol = 1e-5; double l2_diff = std::sqrt(std::pow(p_view(0)-p_exact[0],2) + std::pow(p_view(1)-p_exact[1],2)); if(l2_diff > tol) { diff --git a/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient.xml b/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient.xml index b67be3220574..ab993dfbc981 100644 --- a/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient.xml +++ b/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient.xml @@ -3,6 +3,12 @@ + + + + + + diff --git a/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_2_parameters.xml b/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_2_parameters.xml index ce0da7353e12..415b60c1c070 100644 --- a/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_2_parameters.xml +++ b/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_2_parameters.xml @@ -3,6 +3,12 @@ + + + + + + diff --git a/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_Integrated_Response_MSD.xml b/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_Integrated_Response_MSD.xml index fe3d9e19b2e3..0c65e1e4203a 100644 --- a/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_Integrated_Response_MSD.xml +++ b/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_Integrated_Response_MSD.xml @@ -6,6 +6,12 @@ + + + + + + diff --git a/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_MSD.xml b/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_MSD.xml index 4524bf65eb45..4996835f547b 100644 --- a/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_MSD.xml +++ b/packages/piro/test/_input_Analysis_ROL_ReducedSpace_Transient_MSD.xml @@ -6,6 +6,12 @@ + + + + + + diff --git a/packages/piro/test/_input_Analysis_ROL_Tempus_Transient_MSD.xml b/packages/piro/test/_input_Analysis_ROL_Tempus_Transient_MSD.xml index a53b65a16a7f..8787721d9ddf 100644 --- a/packages/piro/test/_input_Analysis_ROL_Tempus_Transient_MSD.xml +++ b/packages/piro/test/_input_Analysis_ROL_Tempus_Transient_MSD.xml @@ -3,6 +3,16 @@ + + + + + + + + + + @@ -18,7 +28,7 @@ - + @@ -178,6 +188,7 @@ + diff --git a/packages/shylu/shylu_node/tacho/src/impl/Tacho_NumericTools_Base.hpp b/packages/shylu/shylu_node/tacho/src/impl/Tacho_NumericTools_Base.hpp index fc3609dd0089..aafda0482428 100644 --- a/packages/shylu/shylu_node/tacho/src/impl/Tacho_NumericTools_Base.hpp +++ b/packages/shylu/shylu_node/tacho/src/impl/Tacho_NumericTools_Base.hpp @@ -46,9 +46,9 @@ template class NumericToolsBase { using host_space = typename host_device_type::execution_space; using host_memory_space = typename host_device_type::memory_space; - using ordinal_type_array_host = typename ordinal_type_array::HostMirror; - using size_type_array_host = typename size_type_array::HostMirror; - using supernode_type_array_host = typename supernode_type_array::HostMirror; + using ordinal_type_array_host = Kokkos::View; + using size_type_array_host = Kokkos::View; + using supernode_type_array_host = Kokkos::View; protected: /// diff --git a/packages/stk/CHANGELOG.md b/packages/stk/CHANGELOG.md index ea776354f2ad..57f2d9d358e1 100644 --- a/packages/stk/CHANGELOG.md +++ b/packages/stk/CHANGELOG.md @@ -1,5 +1,11 @@ # CHANGELOG +5.21.4-1 (STK_VERSION 5210401) 9/04/2024 + Fix cmake configuration errors that occurred on AMD MI300A platform + +5.21.4 (STK_VERSION 5210400) 8/29/2024 + minor fixes, no signficant API changes + 5.21.3-1 (STK_VERSION 5210301) 8/19/2024 stk_mesh: fix ~65K limitation on per-bucket size of upward-connectivity tables - This is an implementation detail that only arises if user sets large bucket diff --git a/packages/stk/cmake/Dependencies.cmake b/packages/stk/cmake/Dependencies.cmake index 4c973a5c278e..0193382a3723 100644 --- a/packages/stk/cmake/Dependencies.cmake +++ b/packages/stk/cmake/Dependencies.cmake @@ -12,7 +12,7 @@ SET(SUBPACKAGES_DIRS_CLASSIFICATIONS_OPTREQS Middle_mesh stk_middle_mesh EX OPTIONAL Transfer stk_transfer PT OPTIONAL Mesh stk_mesh PT OPTIONAL - SearchUtil stk_search_util EX OPTIONAL + SearchUtil stk_search_util PT OPTIONAL TransferUtil stk_transfer_util EX OPTIONAL IO stk_io PT OPTIONAL Middle_mesh_util stk_middle_mesh_util EX OPTIONAL diff --git a/packages/stk/stk_balance/stk_balance/balanceUtils.cpp b/packages/stk/stk_balance/stk_balance/balanceUtils.cpp index 5222e9780e23..9bbb9a121181 100644 --- a/packages/stk/stk_balance/stk_balance/balanceUtils.cpp +++ b/packages/stk/stk_balance/stk_balance/balanceUtils.cpp @@ -532,12 +532,24 @@ int GraphCreationSettings::getGraphVertexWeight(stk::topology type) const return 4; case stk::topology::SHELL_TRI_6: return 8; + case stk::topology::SHELL_TRI_3_ALL_FACE_SIDES: + return 3; + case stk::topology::SHELL_TRI_4_ALL_FACE_SIDES: + return 4; + case stk::topology::SHELL_TRI_6_ALL_FACE_SIDES: + return 8; case stk::topology::SHELL_QUAD_4: return 6; case stk::topology::SHELL_QUAD_8: return 8; case stk::topology::SHELL_QUAD_9: return 9; + case stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES: + return 6; + case stk::topology::SHELL_QUAD_8_ALL_FACE_SIDES: + return 8; + case stk::topology::SHELL_QUAD_9_ALL_FACE_SIDES: + return 9; case stk::topology::TET_4: return 1; case stk::topology::TET_8: @@ -680,8 +692,11 @@ int GraphCreationSettings::getConnectionTableIndex(stk::topology elementTopology case stk::topology::TRI_4_2D: case stk::topology::QUAD_4_2D: case stk::topology::SHELL_TRI_3: + case stk::topology::SHELL_TRI_3_ALL_FACE_SIDES: case stk::topology::SHELL_TRI_4: + case stk::topology::SHELL_TRI_4_ALL_FACE_SIDES: case stk::topology::SHELL_QUAD_4: + case stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES: tableIndex = 2; break; case stk::topology::TET_4: @@ -694,8 +709,11 @@ int GraphCreationSettings::getConnectionTableIndex(stk::topology elementTopology case stk::topology::QUAD_8_2D: case stk::topology::QUAD_9_2D: case stk::topology::SHELL_TRI_6: + case stk::topology::SHELL_TRI_6_ALL_FACE_SIDES: case stk::topology::SHELL_QUAD_8: + case stk::topology::SHELL_QUAD_8_ALL_FACE_SIDES: case stk::topology::SHELL_QUAD_9: + case stk::topology::SHELL_QUAD_9_ALL_FACE_SIDES: tableIndex = 4; break; case stk::topology::TET_8: @@ -746,8 +764,11 @@ int GraphCreationSettings::getEdgeWeightTableIndex(stk::topology elementTopology case stk::topology::TRI_4_2D: case stk::topology::QUAD_4_2D: case stk::topology::SHELL_TRI_3: + case stk::topology::SHELL_TRI_3_ALL_FACE_SIDES: case stk::topology::SHELL_TRI_4: + case stk::topology::SHELL_TRI_4_ALL_FACE_SIDES: case stk::topology::SHELL_QUAD_4: + case stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES: tableIndex = 2; break; case stk::topology::TET_4: @@ -762,10 +783,13 @@ int GraphCreationSettings::getEdgeWeightTableIndex(stk::topology elementTopology case stk::topology::QUAD_8_2D: case stk::topology::QUAD_9_2D: case stk::topology::SHELL_TRI_6: + case stk::topology::SHELL_TRI_6_ALL_FACE_SIDES: case stk::topology::SHELL_QUAD_9: + case stk::topology::SHELL_QUAD_9_ALL_FACE_SIDES: tableIndex = 5; break; case stk::topology::SHELL_QUAD_8: + case stk::topology::SHELL_QUAD_8_ALL_FACE_SIDES: case stk::topology::TET_8: case stk::topology::TET_10: case stk::topology::TET_11: diff --git a/packages/stk/stk_doc_tests/stk_io/CMakeLists.txt b/packages/stk/stk_doc_tests/stk_io/CMakeLists.txt index e6b488265330..31f248f4718b 100644 --- a/packages/stk/stk_doc_tests/stk_io/CMakeLists.txt +++ b/packages/stk/stk_doc_tests/stk_io/CMakeLists.txt @@ -60,7 +60,9 @@ else() add_test(NAME "stk_io_doc_tests" COMMAND stk_io_doc_tests) endif() -target_include_directories(stk_io_doc_tests PRIVATE - $ - $ -) +if(TARGET stk_io_doc_tests) + target_include_directories(stk_io_doc_tests PRIVATE + $ + $ + ) +endif() diff --git a/packages/stk/stk_doc_tests/stk_mesh/CMakeLists.txt b/packages/stk/stk_doc_tests/stk_mesh/CMakeLists.txt index 267584d712d4..c4d76d0a4811 100644 --- a/packages/stk/stk_doc_tests/stk_mesh/CMakeLists.txt +++ b/packages/stk/stk_doc_tests/stk_mesh/CMakeLists.txt @@ -56,8 +56,10 @@ else() add_test("stk_mesh_doc_tests" sh -c "mpiexec --np 1 ${CMAKE_CURRENT_BINARY_DIR}/stk_mesh_doc_tests --gtest_filter=StkMeshHowTo.iterate*") endif() -target_include_directories(stk_mesh_doc_tests PRIVATE - $ - $ -) +if(TARGET stk_mesh_doc_tests) + target_include_directories(stk_mesh_doc_tests PRIVATE + $ + $ + ) +endif() diff --git a/packages/stk/stk_doc_tests/stk_middle_mesh/CMakeLists.txt b/packages/stk/stk_doc_tests/stk_middle_mesh/CMakeLists.txt index 96070f6aeeea..4aa0e8d72bf2 100644 --- a/packages/stk/stk_doc_tests/stk_middle_mesh/CMakeLists.txt +++ b/packages/stk/stk_doc_tests/stk_middle_mesh/CMakeLists.txt @@ -24,7 +24,9 @@ else() add_test(NAME "stk_middle_mesh_doc_tests" COMMAND stk_middle_mesh_doc_tests) endif() -target_include_directories(stk_middle_mesh_doc_tests PRIVATE - $ - $ -) +if(TARGET stk_middle_mesh_doc_tests) + target_include_directories(stk_middle_mesh_doc_tests PRIVATE + $ + $ + ) +endif() diff --git a/packages/stk/stk_doc_tests/stk_search/CMakeLists.txt b/packages/stk/stk_doc_tests/stk_search/CMakeLists.txt index 2eddf3a8b94a..ef8d33d3a69f 100644 --- a/packages/stk/stk_doc_tests/stk_search/CMakeLists.txt +++ b/packages/stk/stk_doc_tests/stk_search/CMakeLists.txt @@ -58,7 +58,9 @@ else() add_test(NAME "stk_search_doc_tests" COMMAND stk_search_doc_tests) endif() -target_include_directories(stk_search_doc_tests PRIVATE - $ - $ -) +if(TARGET stk_search_doc_tests) + target_include_directories(stk_search_doc_tests PRIVATE + $ + $ + ) +endif() diff --git a/packages/stk/stk_doc_tests/stk_simd/CMakeLists.txt b/packages/stk/stk_doc_tests/stk_simd/CMakeLists.txt index ec2c7c338cef..a18161c1c687 100644 --- a/packages/stk/stk_doc_tests/stk_simd/CMakeLists.txt +++ b/packages/stk/stk_doc_tests/stk_simd/CMakeLists.txt @@ -26,7 +26,9 @@ else() target_link_libraries(stk_simd_doc_test stk_unit_main) endif() -target_include_directories(stk_simd_doc_test PRIVATE - $ - $ -) +if(TARGET stk_simd_doc_test) + target_include_directories(stk_simd_doc_test PRIVATE + $ + $ + ) +endif() diff --git a/packages/stk/stk_expreval/stk_expreval/Eval.cpp b/packages/stk/stk_expreval/stk_expreval/Eval.cpp index f46ff7b01d14..6c118a2f7621 100644 --- a/packages/stk/stk_expreval/stk_expreval/Eval.cpp +++ b/packages/stk/stk_expreval/stk_expreval/Eval.cpp @@ -212,10 +212,7 @@ bool Eval::undefinedFunction() const { /* Check for an undefined function in any allocated node */ - for (const auto& node : m_nodes) { - if (node->m_data.function.undefinedFunction) return true; - } - return false; + return !m_undefinedFunctionSet.empty(); } bool diff --git a/packages/stk/stk_expreval/stk_expreval/Function.hpp b/packages/stk/stk_expreval/stk_expreval/Function.hpp index d8b91f959bdb..d04d74632406 100644 --- a/packages/stk/stk_expreval/stk_expreval/Function.hpp +++ b/packages/stk/stk_expreval/stk_expreval/Function.hpp @@ -121,6 +121,15 @@ enum class FunctionType { UNDEFINED }; +constexpr bool is_function_supported_on_device(FunctionType type) +{ + return type != FunctionType::RAND && + type != FunctionType::SRAND && + type != FunctionType::RANDOM && + type != FunctionType::TIME && + type != FunctionType::UNDEFINED; +} + KOKKOS_INLINE_FUNCTION double cycloidal_ramp(double t, double t1, double t2) { diff --git a/packages/stk/stk_expreval/stk_expreval/NgpNode.hpp b/packages/stk/stk_expreval/stk_expreval/NgpNode.hpp index e55671dc92da..8f378be36940 100644 --- a/packages/stk/stk_expreval/stk_expreval/NgpNode.hpp +++ b/packages/stk/stk_expreval/stk_expreval/NgpNode.hpp @@ -54,9 +54,6 @@ class DeviceVariableMap; class NgpNode { public: - enum { MAXIMUM_NUMBER_OF_OVERLOADED_FUNCTION_NAMES = 5 }; - enum { MAXIMUM_FUNCTION_NAME_LENGTH = 32 }; - KOKKOS_FUNCTION NgpNode() : m_opcode(OPCODE_UNDEFINED), @@ -684,7 +681,7 @@ class NgpNode break; } } - + return 0.0; } }; diff --git a/packages/stk/stk_expreval/stk_expreval/Node.cpp b/packages/stk/stk_expreval/stk_expreval/Node.cpp index 0e47b8490716..8d73bc036a19 100644 --- a/packages/stk/stk_expreval/stk_expreval/Node.cpp +++ b/packages/stk/stk_expreval/stk_expreval/Node.cpp @@ -53,10 +53,7 @@ Node::Node(Opcode opcode, Eval* owner) m_owner(owner), m_hasBeenEvaluated(false) { - m_data.function.undefinedFunction = false; - for (unsigned i=0; im_right) { argv[argc++] = arg->getResult(); } - bool foundMatchingFunction = false; - unsigned i = 0; - while (!foundMatchingFunction && (i < Node::MAXIMUM_NUMBER_OF_OVERLOADED_FUNCTION_NAMES)) { - if (nullptr == m_data.function.function[i]) { - throw expression_undefined_exception(m_data.function.functionName, argc); - } - - if ( m_data.function.function[i]->getArgCount() == argc) { - setResult() = (*m_data.function.function[i])(argc, argv); - foundMatchingFunction = true; - } - - ++i; - } - - STK_ThrowRequireMsg(foundMatchingFunction, "Function had wrong number of arguments"); + setResult() = (*m_data.function.function)(argc, argv); break; } default: { diff --git a/packages/stk/stk_expreval/stk_expreval/Node.hpp b/packages/stk/stk_expreval/stk_expreval/Node.hpp index c941e39ad46d..0c93c9f89d0f 100644 --- a/packages/stk/stk_expreval/stk_expreval/Node.hpp +++ b/packages/stk/stk_expreval/stk_expreval/Node.hpp @@ -145,8 +145,8 @@ using NodeWeightMap = std::map; class Node { public: - enum { MAXIMUM_NUMBER_OF_OVERLOADED_FUNCTION_NAMES = 5 }; - enum { MAXIMUM_FUNCTION_NAME_LENGTH = 32 }; + static constexpr int MAXIMUM_FUNCTION_NAME_LENGTH = 32; + static constexpr int MAXIMUM_NUMBER_OF_FUNCTION_ARGS = 20; explicit Node(Opcode opcode, Eval* owner); @@ -163,6 +163,8 @@ class Node void computeNodeWeight(NodeWeightMap & nodeWeights); void evalTrace(const NodeWeightMap & nodeWeights, EvalNodesType & evaluationNodes); + int countNumFunctionArgs(); + int getNextNodeIndex(); double getResult() const; @@ -185,8 +187,7 @@ class Node struct _function { - CFunctionBase * function[MAXIMUM_NUMBER_OF_OVERLOADED_FUNCTION_NAMES]; - bool undefinedFunction; + CFunctionBase * function; char functionName[MAXIMUM_FUNCTION_NAME_LENGTH]; FunctionType functionType; } function; diff --git a/packages/stk/stk_expreval/stk_expreval/ParsedEval.hpp b/packages/stk/stk_expreval/stk_expreval/ParsedEval.hpp index 48d917a4c5f3..911901045355 100644 --- a/packages/stk/stk_expreval/stk_expreval/ParsedEval.hpp +++ b/packages/stk/stk_expreval/stk_expreval/ParsedEval.hpp @@ -36,6 +36,7 @@ #define PARSEDEVAL_HPP #include "Kokkos_Core.hpp" +#include "stk_expreval/Function.hpp" #include "stk_util/ngp/NgpSpaces.hpp" #include "stk_expreval/Eval.hpp" #include "stk_expreval/ParsedEvalBase.hpp" @@ -80,6 +81,20 @@ class ParsedEval : public ParsedEvalBase virtual int get_result_buffer_size() override { return RESULT_BUFFER_SIZE; } + void check_for_errors(bool will_run_on_device) const override + { + for (size_t i=0; i < m_hostNodes.size(); ++i) + { + const NgpNode& node = m_hostNodes(i); + if (node.m_opcode == OPCODE_FUNCTION) + { + FunctionType funcType = node.m_data.function.functionType; + STK_ThrowRequireMsg(funcType != FunctionType::UNDEFINED, "user defined functions are not supported by ParsedEval"); + STK_ThrowRequireMsg(will_run_on_device && is_function_supported_on_device(funcType), "random number generation and time functions not supported on device"); + } + } + } + KOKKOS_INLINE_FUNCTION int get_num_variables() const { return m_numVariables; } diff --git a/packages/stk/stk_expreval/stk_expreval/ParsedEvalBase.hpp b/packages/stk/stk_expreval/stk_expreval/ParsedEvalBase.hpp index 0eaba0ca1a3d..5f54b52ed888 100644 --- a/packages/stk/stk_expreval/stk_expreval/ParsedEvalBase.hpp +++ b/packages/stk/stk_expreval/stk_expreval/ParsedEvalBase.hpp @@ -50,6 +50,8 @@ class ParsedEvalBase KOKKOS_DEFAULTED_FUNCTION virtual ~ParsedEvalBase() = default; virtual int get_result_buffer_size() = 0; + + virtual void check_for_errors(bool will_run_on_device) const = 0; }; } diff --git a/packages/stk/stk_expreval/stk_expreval/Parser.cpp b/packages/stk/stk_expreval/stk_expreval/Parser.cpp index 21c181c6455c..9f454b35eb5c 100644 --- a/packages/stk/stk_expreval/stk_expreval/Parser.cpp +++ b/packages/stk/stk_expreval/stk_expreval/Parser.cpp @@ -54,6 +54,7 @@ Node *parseFunction(Eval & eval, LexemVector::const_iterator from, LexemVector:: Node *parseFunctionArg(Eval & eval, LexemVector::const_iterator from, LexemVector::const_iterator to); Node *parseRValue(Eval & eval, LexemVector::const_iterator from, LexemVector::const_iterator to); Node *parseIndex(Eval & eval, LexemVector::const_iterator from, LexemVector::const_iterator lbrack, LexemVector::const_iterator rbrack, LexemVector::const_iterator to); +int countFunctionArgs(Node* function); Node * parseStatements(Eval &eval, @@ -539,57 +540,43 @@ parseFunction(Eval & eval, LexemVector::const_iterator rparen, LexemVector::const_iterator to) { + using CFunctionIterPair = std::pair; + if ((*from).getToken() != TOKEN_IDENTIFIER) { throw std::runtime_error("syntax error parsing function"); } const std::string &function_name = (*from).getString(); - CFunctionBase *c_function = nullptr; - CFunctionMap::iterator it = getCFunctionMap().find(function_name); Node *function = eval.newNode(OPCODE_FUNCTION); - FunctionType functionType = eval.get_function_type(function_name); - function->m_data.function.functionType = functionType; + function->m_right = parseFunctionArg(eval, lparen + 1, rparen); + int argc = countFunctionArgs(function); + if (argc > Node::MAXIMUM_NUMBER_OF_FUNCTION_ARGS) + { + throw std::runtime_error(std::string("too many arguments to function, limit is ") + + std::to_string(Node::MAXIMUM_NUMBER_OF_FUNCTION_ARGS)); + } - // only 1 function found with that function name. - if ( getCFunctionMap().count(function_name) == 1 ) { - if (it != getCFunctionMap().end()) { - c_function = (*it).second; - } - function->m_data.function.function[0] = c_function; - std::strncpy(function->m_data.function.functionName, - function_name.c_str(), - function_name.length() < Node::MAXIMUM_FUNCTION_NAME_LENGTH-1 ? function_name.length() : Node::MAXIMUM_FUNCTION_NAME_LENGTH-1); + FunctionType functionType = eval.get_function_type(function_name); - if (!c_function) { - eval.getUndefinedFunctionSet().insert(function_name); - } - } - else { - std::pair ppp; - ppp = getCFunctionMap().equal_range(function_name); - int iCount=0; - for (CFunctionMap::iterator it2 = ppp.first; it2 != ppp.second; ++it2, ++iCount) { - c_function = (*it2).second; - function->m_data.function.function[iCount] = c_function; + CFunctionIterPair iteratorPair = getCFunctionMap().equal_range(function_name); + function->m_data.function.function = nullptr; + for (auto it = iteratorPair.first; it != iteratorPair.second; ++it) + { + CFunctionBase* c_function = it->second; + if (c_function->getArgCount() == argc) + { + function->m_data.function.function = c_function; + function->m_data.function.functionType = functionType; std::strncpy(function->m_data.function.functionName, function_name.c_str(), function_name.length() < Node::MAXIMUM_FUNCTION_NAME_LENGTH-1 ? function_name.length() : Node::MAXIMUM_FUNCTION_NAME_LENGTH-1); - - if (!c_function) { - eval.getUndefinedFunctionSet().insert(function_name); - } - } - if( iCount == Node::MAXIMUM_NUMBER_OF_OVERLOADED_FUNCTION_NAMES) { - throw std::runtime_error(std::string("Exceeded maximum number of overloaded function names for function named= ") + function_name); + break; } } - function->m_right = parseFunctionArg(eval, lparen + 1, rparen); - - if (!c_function) { - function->m_data.function.undefinedFunction = true; + if (!(function->m_data.function.function)) { eval.getUndefinedFunctionSet().insert(function_name); } @@ -713,6 +700,21 @@ parseRValue(Eval & eval, } } +int countFunctionArgs(Node* function) +{ + if (function->m_opcode != OPCODE_FUNCTION) + { + throw std::runtime_error("Node must be a function to count its arguments"); + } + + int argc = 0; + for (Node *arg = function->m_right; arg; arg = arg->m_right) { + argc++; + } + + return argc; +} + } } } diff --git a/packages/stk/stk_integration_tests/cmake_install_test/build_stk_no_stk_io_using_cmake b/packages/stk/stk_integration_tests/cmake_install_test/build_stk_no_stk_io_using_cmake index 39c3a1164915..52ebf2186893 100755 --- a/packages/stk/stk_integration_tests/cmake_install_test/build_stk_no_stk_io_using_cmake +++ b/packages/stk/stk_integration_tests/cmake_install_test/build_stk_no_stk_io_using_cmake @@ -74,7 +74,7 @@ if [ $? -ne 0 ] ; then fi printf "Now building trilinos/stk using make...\n"; -exe "make VERBOSE=1 -j8 >& ${stk_make_log}"; +exe "make VERBOSE=1 -j16 >& ${stk_make_log}"; if [ $? -ne 0 ] ; then echo "!! error in make, check output in ${stk_make_log} !!"; exit 1; diff --git a/packages/stk/stk_integration_tests/cmake_install_test/build_stk_using_cmake b/packages/stk/stk_integration_tests/cmake_install_test/build_stk_using_cmake index 503fa56863b3..bfdbb7887dc4 100755 --- a/packages/stk/stk_integration_tests/cmake_install_test/build_stk_using_cmake +++ b/packages/stk/stk_integration_tests/cmake_install_test/build_stk_using_cmake @@ -72,7 +72,7 @@ fi fi printf "Now building trilinos/stk using make...\n"; -exe "make VERBOSE=1 -j8 >& ${stk_make_log}"; +exe "make VERBOSE=1 -j16 >& ${stk_make_log}"; if [ $? -ne 0 ] ; then echo "!! error in make, check output in ${stk_make_log} !!"; exit 1; diff --git a/packages/stk/stk_integration_tests/cmake_install_test/run_cmake_stk_no_stk_io b/packages/stk/stk_integration_tests/cmake_install_test/run_cmake_stk_no_stk_io index 9943a53ae203..323dda3ef606 100755 --- a/packages/stk/stk_integration_tests/cmake_install_test/run_cmake_stk_no_stk_io +++ b/packages/stk/stk_integration_tests/cmake_install_test/run_cmake_stk_no_stk_io @@ -42,6 +42,7 @@ cmake \ -DKokkos_ARCH_VOLTA70=${cuda_on_or_off} \ -DTpetra_ENABLE_CUDA:BOOL=${cuda_on_or_off} \ -DSTK_ENABLE_TESTS:BOOL=ON \ +-DTrilinos_ENABLE_Intrepid2:BOOL=ON \ -DTrilinos_ENABLE_STK:BOOL=ON \ -DTrilinos_ENABLE_STKMesh:BOOL=ON \ -DTrilinos_ENABLE_STKIO:BOOL=OFF \ diff --git a/packages/stk/stk_io/stk_io/MeshField.hpp b/packages/stk/stk_io/stk_io/MeshField.hpp index cb7316fd3da7..10f320e17f30 100644 --- a/packages/stk/stk_io/stk_io/MeshField.hpp +++ b/packages/stk/stk_io/stk_io/MeshField.hpp @@ -41,6 +41,7 @@ #include // for string #include // for vector #include "stk_mesh/base/Types.hpp" // for EntityRank +#include "stk_mesh/base/Entity.hpp" namespace Ioss { class GroupingEntity; } namespace Ioss { class Region; } namespace stk { namespace io { class DBStepTimeInterval; } } diff --git a/packages/stk/stk_mesh/stk_mesh/base/BulkData.cpp b/packages/stk/stk_mesh/stk_mesh/base/BulkData.cpp index f3f033f3497d..7fcbc2b88efd 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/BulkData.cpp +++ b/packages/stk/stk_mesh/stk_mesh/base/BulkData.cpp @@ -1310,10 +1310,10 @@ uint64_t BulkData::get_max_allowed_id() const { const RelationVector& BulkData::aux_relations(Entity entity) const -{ - STK_ThrowAssert(add_fmwk_data()); +{ + STK_ThrowAssert(m_add_fmwk_data); STK_ThrowAssert(entity.local_offset() > 0); - + if (m_fmwk_aux_relations[entity.local_offset()] == NULL) { m_fmwk_aux_relations[entity.local_offset()] = new RelationVector(); } @@ -1322,10 +1322,10 @@ BulkData::aux_relations(Entity entity) const RelationVector& BulkData::aux_relations(Entity entity) -{ - STK_ThrowAssert(add_fmwk_data()); +{ + STK_ThrowAssert(m_add_fmwk_data); STK_ThrowAssert(entity.local_offset() > 0); - + if (m_fmwk_aux_relations[entity.local_offset()] == NULL) { m_fmwk_aux_relations[entity.local_offset()] = new RelationVector(); } diff --git a/packages/stk/stk_mesh/stk_mesh/base/BulkData.hpp b/packages/stk/stk_mesh/stk_mesh/base/BulkData.hpp index 276f2758d426..6d1da2382806 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/BulkData.hpp +++ b/packages/stk/stk_mesh/stk_mesh/base/BulkData.hpp @@ -1993,7 +1993,7 @@ BulkData::in_send_ghost( Entity entity) const inline void BulkData::internal_check_unpopulated_relations(Entity entity, EntityRank rank) const { -#ifndef NDEBUG +#if !defined(NDEBUG) && !defined(__HIP_DEVICE_COMPILE__) if (m_check_invalid_rels) { const MeshIndex &mesh_idx = mesh_index(entity); const Bucket &b = *mesh_idx.bucket; diff --git a/packages/stk/stk_mesh/stk_mesh/base/CreateEdges.cpp b/packages/stk/stk_mesh/stk_mesh/base/CreateEdges.cpp index 1e0833b40413..e6fbf2664600 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/CreateEdges.cpp +++ b/packages/stk/stk_mesh/stk_mesh/base/CreateEdges.cpp @@ -6,15 +6,15 @@ // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: -// +// // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. -// +// // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. -// +// // * Neither the name of NTESS nor the names of its contributors // may be used to endorse or promote products derived from this // software without specific prior written permission. @@ -30,7 +30,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +// #include "stk_mesh/base/CreateEdges.hpp" @@ -53,6 +53,9 @@ #include "stk_mesh/base/Bucket.hpp" // for Bucket #include "stk_mesh/base/EntityKey.hpp" // for EntityKey #include "stk_mesh/base/Part.hpp" // for Part +#include "stk_mesh/baseImpl/CreateEdgesOnFaces.hpp" +#include "stk_mesh/baseImpl/DeleteEdgesOnFaces.hpp" + #include "stk_mesh/baseImpl/ConnectEdgesImpl.hpp" #include "stk_topology/topology.hpp" // for topology, etc #include "stk_util/util/ReportHandler.hpp" // for ThrowAssert @@ -393,5 +396,19 @@ void create_edges( BulkData & mesh, const Selector & element_selector, Part * pa } } + +Part* create_edges_on_faces( BulkData& mesh, const Selector& element_selector, Part* part_to_insert_new_edges) +{ + impl::EdgesOnFacesCreator edgeCreator(mesh, element_selector, part_to_insert_new_edges); + return edgeCreator.create_edges(); +} + +void delete_edges_on_faces( BulkData& mesh, Part* edgePart) +{ + impl::EdgesOnFacesDeleter edgeDeleter(mesh, edgePart); + edgeDeleter.delete_surface_edges(); +} + + } } diff --git a/packages/stk/stk_mesh/stk_mesh/base/CreateEdges.hpp b/packages/stk/stk_mesh/stk_mesh/base/CreateEdges.hpp index 41fc8fab5046..995429a5a7af 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/CreateEdges.hpp +++ b/packages/stk/stk_mesh/stk_mesh/base/CreateEdges.hpp @@ -6,15 +6,15 @@ // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: -// +// // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. -// +// // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. -// +// // * Neither the name of NTESS nor the names of its contributors // may be used to endorse or promote products derived from this // software without specific prior written permission. @@ -30,7 +30,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +// #ifndef stk_mesh_CreateEdges_hpp #define stk_mesh_CreateEdges_hpp @@ -53,6 +53,10 @@ namespace stk { */ void create_edges( BulkData & mesh, const Selector & element_selector, Part * part_to_insert_new_edges = nullptr ); + Part* create_edges_on_faces( BulkData& mesh, const Selector& element_selector, Part* part_to_insert_new_edges = nullptr); + + void delete_edges_on_faces( BulkData& mesh, Part* edgePart); + void create_edges( BulkData & mesh ); } } diff --git a/packages/stk/stk_mesh/stk_mesh/base/DeviceField.hpp b/packages/stk/stk_mesh/stk_mesh/base/DeviceField.hpp index 93056081af0b..95843b71c459 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/DeviceField.hpp +++ b/packages/stk/stk_mesh/stk_mesh/base/DeviceField.hpp @@ -623,59 +623,66 @@ class DeviceField : public NgpFieldBase Kokkos::deep_copy(get_execution_space(), unInnerDestView, unInnerSrcView); } + struct BackwardShiftIndices { + BackwardShiftIndices(unsigned _oldIndex, unsigned _newIndex) + : oldIndex(_oldIndex), + newIndex(_newIndex) + {} + unsigned oldIndex; + unsigned newIndex; + }; + void move_unmodified_buckets(const BucketVector& buckets, unsigned numPerEntity) { - for(unsigned i = 0; i < buckets.size(); i++) { + std::vector backwardShiftList; + + for (unsigned i = 0; i < buckets.size(); ++i) { unsigned oldBucketId = buckets[i]->get_ngp_field_bucket_id(get_ordinal()); unsigned newBucketId = buckets[i]->bucket_id(); - if(oldBucketId == INVALID_BUCKET_ID) { continue; } + const bool isNewBucket = (oldBucketId == INVALID_BUCKET_ID); + if (isNewBucket) { + continue; + } unsigned oldBucketOffset = hostSelectedBucketOffset(oldBucketId); unsigned newBucketOffset = newHostSelectedBucketOffset(newBucketId); - if(oldBucketOffset != newBucketOffset && !buckets[i]->get_ngp_field_bucket_is_modified(get_ordinal())) { - if(oldBucketOffset > newBucketOffset) { - copy_moved_device_bucket_data, UnmanagedDevInnerView>(deviceData, deviceData, oldBucketId, newBucketId, numPerEntity); - } else { - move_unmodified_buckets_in_range_from_back(buckets, numPerEntity, i); - } - } - } - } - - void move_unmodified_buckets_in_range_from_back(const BucketVector& buckets, unsigned numPerEntity, unsigned& currBaseIndex) - { - int startIndex = currBaseIndex; - int endIndex = buckets.size() - 1; - unsigned oldBucketId, newBucketId; - unsigned oldBucketOffset, newBucketOffset; + const bool bucketNotForThisField = (newBucketOffset == INVALID_BUCKET_ID); + const bool bucketHasNotMoved = (oldBucketId == newBucketId); + const bool bucketIsUnmodified = not buckets[i]->get_ngp_field_bucket_is_modified(get_ordinal()); - for(unsigned j = currBaseIndex; j < buckets.size(); j++) { - oldBucketId = buckets[j]->get_ngp_field_bucket_id(get_ordinal()); - newBucketId = buckets[j]->bucket_id(); - - if(oldBucketId == INVALID_BUCKET_ID) { - endIndex = j - 1; - break; + if (bucketNotForThisField || (bucketHasNotMoved && bucketIsUnmodified)) { + continue; } - oldBucketOffset = hostSelectedBucketOffset(oldBucketId); - newBucketOffset = newHostSelectedBucketOffset(newBucketId); - - if(oldBucketOffset >= newBucketOffset || buckets[j]->get_ngp_field_bucket_is_modified(get_ordinal())) { - endIndex = j - 1; - break; + if (newBucketOffset < oldBucketOffset) { + shift_bucket_forward(oldBucketId, newBucketId, numPerEntity); + } + else { + backwardShiftList.emplace_back(oldBucketId, newBucketId); } } - for(int j = endIndex; j >= startIndex; j--) { - oldBucketId = buckets[j]->get_ngp_field_bucket_id(get_ordinal()); - newBucketId = buckets[j]->bucket_id(); + shift_buckets_backward(backwardShiftList, numPerEntity); + } + + void shift_bucket_forward(unsigned oldBucketId, unsigned newBucketId, unsigned numPerEntity) + { + copy_moved_device_bucket_data, UnmanagedDevInnerView>(deviceData, deviceData, + oldBucketId, newBucketId, + numPerEntity); + } - copy_moved_device_bucket_data, UnmanagedDevInnerView>(deviceData, deviceData, oldBucketId, newBucketId, numPerEntity); + void shift_buckets_backward(const std::vector & backwardShiftList, unsigned numPerEntity) + { + for (auto it = backwardShiftList.rbegin(); it != backwardShiftList.rend(); ++it) { + const BackwardShiftIndices& shiftIndices = *it; + copy_moved_device_bucket_data, UnmanagedDevInnerView>(deviceData, deviceData, + shiftIndices.oldIndex, + shiftIndices.newIndex, + numPerEntity); } - currBaseIndex = endIndex; } void copy_new_and_modified_buckets_from_host(const BucketVector& buckets, unsigned numPerEntity) diff --git a/packages/stk/stk_mesh/stk_mesh/base/Field.hpp b/packages/stk/stk_mesh/stk_mesh/base/Field.hpp index b351d23738ae..e3cf3a05eb3f 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/Field.hpp +++ b/packages/stk/stk_mesh/stk_mesh/base/Field.hpp @@ -232,7 +232,7 @@ class Field : public FieldBase { const int len_suffix = std::strlen(reserved_state_suffix[i]); const int offset = len_name - len_suffix ; if ( 0 <= offset ) { - const char * const name_suffix = name().c_str() + offset; + [[maybe_unused]] const char * const name_suffix = name().c_str() + offset; STK_ThrowErrorMsgIf(equal_case(name_suffix , reserved_state_suffix[i]), "For name = \"" << name_suffix << "\" CANNOT HAVE THE RESERVED STATE SUFFIX \"" << reserved_state_suffix[i] << "\""); diff --git a/packages/stk/stk_mesh/stk_mesh/base/ForEachEntity.hpp b/packages/stk/stk_mesh/stk_mesh/base/ForEachEntity.hpp index 1c25efd35cb6..96a4b492225f 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/ForEachEntity.hpp +++ b/packages/stk/stk_mesh/stk_mesh/base/ForEachEntity.hpp @@ -62,6 +62,24 @@ void for_each_entity_run(const BulkData &mesh, impl::for_each_selected_entity_run(mesh, rank, selectAll, functor); } +template +void for_each_entity_run_no_threads(const BulkData &mesh, + stk::topology::rank_t rank, + const Selector& selector, + const ALGORITHM_TO_RUN_PER_ENTITY &functor) +{ + impl::for_each_selected_entity_run_no_threads(mesh, rank, selector, functor); +} + +template +void for_each_entity_run_no_threads(const BulkData &mesh, + stk::topology::rank_t rank, + const ALGORITHM_TO_RUN_PER_ENTITY &functor) +{ + Selector selectAll = mesh.mesh_meta_data().universal_part(); + impl::for_each_selected_entity_run_no_threads(mesh, rank, selectAll, functor); +} + template void for_each_entity_run_with_nodes(const BulkData &mesh, stk::topology::rank_t rank, diff --git a/packages/stk/stk_mesh/stk_mesh/base/GetNgpField.hpp b/packages/stk/stk_mesh/stk_mesh/base/GetNgpField.hpp index 06be684954e1..920e47fde7d0 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/GetNgpField.hpp +++ b/packages/stk/stk_mesh/stk_mesh/base/GetNgpField.hpp @@ -94,3 +94,4 @@ NgpField & get_updated_ngp_field(const FieldBase & stkField) }} #endif // GETNGPFIELD_HPP + diff --git a/packages/stk/stk_mesh/stk_mesh/base/MetaData.cpp b/packages/stk/stk_mesh/stk_mesh/base/MetaData.cpp index 4d7995f8e1e8..67ac6017ab89 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/MetaData.cpp +++ b/packages/stk/stk_mesh/stk_mesh/base/MetaData.cpp @@ -606,9 +606,16 @@ void MetaData::internal_declare_known_cell_topology_parts() register_topology(stk::topology::SHELL_TRI_3); register_topology(stk::topology::SHELL_TRI_6); + register_topology(stk::topology::SHELL_TRI_3_ALL_FACE_SIDES); + register_topology(stk::topology::SHELL_TRI_6_ALL_FACE_SIDES); + register_topology(stk::topology::SHELL_QUAD_4); register_topology(stk::topology::SHELL_QUAD_8); register_topology(stk::topology::SHELL_QUAD_9); + + register_topology(stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES); + register_topology(stk::topology::SHELL_QUAD_8_ALL_FACE_SIDES); + register_topology(stk::topology::SHELL_QUAD_9_ALL_FACE_SIDES); } } @@ -1261,22 +1268,32 @@ stk::topology get_topology( shards::CellTopology shards_topology, unsigned spati //else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::Spring<3> >()) ) // t = stk::topology::SPRING_3; - else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellTriangle<3> >()) ) + else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellTriangle<3> >()) ) { t = stk::topology::SHELL_TRI_3; + // t = stk::topology::SHELL_TRI_3_ALL_FACE_SIDES; + } //NOTE: shards does not define a shell triangle 4 //else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellTriangle<4> >()) ) // t = stk::topology::SHELL_TRI_4; - else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellTriangle<6> >()) ) + else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellTriangle<6> >()) ) { t = stk::topology::SHELL_TRI_6; + // t = stk::topology::SHELL_TRI_6_ALL_FACE_SIDES; + } - else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellQuadrilateral<4> >()) ) + else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellQuadrilateral<4> >()) ) { t = stk::topology::SHELL_QUAD_4; - else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellQuadrilateral<8> >()) ) + // t = stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES; + } + else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellQuadrilateral<8> >()) ) { t = stk::topology::SHELL_QUAD_8; - else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellQuadrilateral<9> >()) ) + // t = stk::topology::SHELL_QUAD_8_ALL_FACE_SIDES; + } + else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::ShellQuadrilateral<9> >()) ) { t = stk::topology::SHELL_QUAD_9; + // t = stk::topology::SHELL_QUAD_9_ALL_FACE_SIDES; + } else if ( shards_topology == shards::CellTopology(shards::getCellTopologyData< shards::Tetrahedron<4> >()) ) t = stk::topology::TET_4; @@ -1389,12 +1406,25 @@ shards::CellTopology get_cell_topology(stk::topology t) //return shards::CellTopology(shards::getCellTopologyData>()); case stk::topology::SHELL_TRI_6: return shards::CellTopology(shards::getCellTopologyData>()); + case stk::topology::SHELL_TRI_3_ALL_FACE_SIDES: + return shards::CellTopology(shards::getCellTopologyData>()); + case stk::topology::SHELL_TRI_4_ALL_FACE_SIDES: break; + //NOTE: shards does not define a topology for a 4-noded triangular shell + //return shards::CellTopology(shards::getCellTopologyData>()); + case stk::topology::SHELL_TRI_6_ALL_FACE_SIDES: + return shards::CellTopology(shards::getCellTopologyData>()); case stk::topology::SHELL_QUAD_4: return shards::CellTopology(shards::getCellTopologyData>()); case stk::topology::SHELL_QUAD_8: return shards::CellTopology(shards::getCellTopologyData>()); case stk::topology::SHELL_QUAD_9: return shards::CellTopology(shards::getCellTopologyData>()); + case stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES: + return shards::CellTopology(shards::getCellTopologyData>()); + case stk::topology::SHELL_QUAD_8_ALL_FACE_SIDES: + return shards::CellTopology(shards::getCellTopologyData>()); + case stk::topology::SHELL_QUAD_9_ALL_FACE_SIDES: + return shards::CellTopology(shards::getCellTopologyData>()); case stk::topology::TET_4: return shards::CellTopology(shards::getCellTopologyData>()); case stk::topology::TET_8: diff --git a/packages/stk/stk_mesh/stk_mesh/base/MetaData.hpp b/packages/stk/stk_mesh/stk_mesh/base/MetaData.hpp index cafd67981813..b33b572b66a9 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/MetaData.hpp +++ b/packages/stk/stk_mesh/stk_mesh/base/MetaData.hpp @@ -829,7 +829,7 @@ MetaData::declare_field(stk::topology::rank_t arg_entity_rank, const int len_suffix = std::strlen( reservedStateSuffix[i] ); const int offset = len_name - len_suffix; if ( 0 <= offset ) { - const char * const name_suffix = name.c_str() + offset; + [[maybe_unused]] const char * const name_suffix = name.c_str() + offset; STK_ThrowErrorMsgIf(equal_case( name_suffix , reservedStateSuffix[i]), "For name = \"" << name_suffix << "\" CANNOT HAVE THE RESERVED STATE SUFFIX \"" << diff --git a/packages/stk/stk_mesh/stk_mesh/base/NgpFieldBLAS.hpp b/packages/stk/stk_mesh/stk_mesh/base/NgpFieldBLAS.hpp index ff94b25073f0..84d8132f08bf 100644 --- a/packages/stk/stk_mesh/stk_mesh/base/NgpFieldBLAS.hpp +++ b/packages/stk/stk_mesh/stk_mesh/base/NgpFieldBLAS.hpp @@ -110,6 +110,37 @@ void field_copy(const FieldBase& xField, ngp_field_blas::impl::field_copy_impl(xField, yField, &selector, execSpace, isDeviceExecSpaceUserOverride); } +template +inline void field_axpby(const stk::mesh::BulkData& mesh, + const DataType alpha, + const stk::mesh::FieldBase & xField, + const DataType beta, + const stk::mesh::FieldBase & yField, + const stk::mesh::Selector & selector, + const EXEC_SPACE& execSpace, + bool IsDeviceExecSpaceUserOverride = (!std::is_same_v)) +{ + // y = a*x + b*y + + if constexpr (ngp_field_blas::impl::operate_on_ngp_mesh()) { + ngp_field_blas::impl::apply_functor_on_field( + mesh, yField, xField, yField, alpha, beta, selector); + } + else { + xField.sync_to_host(); + yField.sync_to_host(); + stk::mesh::field_axpby(alpha, xField, beta, yField, selector); + } + + yField.clear_sync_state(); + if (ngp_field_blas::impl::mark_modified_on_device(execSpace, IsDeviceExecSpaceUserOverride)) { + yField.modify_on_device(); + } + else { + yField.modify_on_host(); + } +} + template inline void field_axpbyz(const stk::mesh::BulkData& mesh, const DataType alpha, diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/AuraGhosting.cpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/AuraGhosting.cpp index 840f92e883ed..6333b0c2f69b 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/AuraGhosting.cpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/AuraGhosting.cpp @@ -102,7 +102,7 @@ void AuraGhosting::fill_send_aura_entities(BulkData& bulkData, } } } - } + } ); // for_each_entity_run } diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/BucketConnDynamic.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/BucketConnDynamic.hpp index e3d433d028d1..f5fa92071b4a 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/BucketConnDynamic.hpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/BucketConnDynamic.hpp @@ -85,9 +85,9 @@ class BucketConnDynamic const ConnectedEntities get_connected_entities(unsigned bktOrdinal) const { STK_ThrowAssertMsg(bktOrdinal < m_bucketCapacity,"BucketConnDynamic::get_connected_entities: bktOrdinal("< +#include "stk_mesh/base/Entity.hpp" +#include "stk_mesh/base/Types.hpp" +#include "stk_topology/topology.hpp" +#include "stk_util/util/ReportHandler.hpp" +#include "stk_mesh/base/GetEntities.hpp" +#include "stk_mesh/base/EntityLess.hpp" + + +namespace stk { +namespace mesh { +namespace impl { + +Part* EdgesOnFacesCreator::create_edges() +{ + m_edgePart = create_edge_part_if_needed(); + if (m_edgePart) + { + check_edge_part_topology(); + create_surface_edges(); + attach_edges_to_non_owned_faces(); + } + + return m_edgePart; +} + +void EdgesOnFacesCreator::create_surface_edges() +{ + std::vector newEntityIds; + m_bulk.generate_new_ids(stk::topology::EDGE_RANK, compute_upper_bound_on_num_edges(), newEntityIds); + + std::vector addParts = {m_edgePart}; + std::vector edgeNodes; + size_t newEntityIdx = 0; + for (stk::mesh::Bucket* bucket : m_bulk.get_buckets(stk::topology::FACE_RANK, m_surfaceAndOwned)) + { + stk::topology faceTopo = bucket->topology(); + check_face_topology(faceTopo); + + for (stk::mesh::Entity face : *bucket) + { + stk::mesh::Entity const* faceNodes = m_bulk.begin_nodes(face); + for (unsigned int i=0; i < faceTopo.num_edges(); ++i) + { + edgeNodes.clear(); + faceTopo.edge_nodes(faceNodes, i, std::back_inserter(edgeNodes)); + + stk::mesh::Entity edge = get_common_edge(edgeNodes[0], edgeNodes[1]); + if (!m_bulk.is_valid(edge)) + { + stk::mesh::EntityId entityId = newEntityIds.at(newEntityIdx++); + edge = m_bulk.declare_edge(entityId, addParts); + + sort_nodes_for_global_consistency(edgeNodes); + for (size_t j=0; j < edgeNodes.size(); ++j) + { + m_bulk.declare_relation(edge, edgeNodes[j], j); + } + } + + m_bulk.declare_relation(face, edge, i); + } + } + } +} + +void EdgesOnFacesCreator::attach_edges_to_non_owned_faces() +{ + stk::mesh::Selector surfaceAndNotOwned = m_surfaceSelector & + (m_bulk.mesh_meta_data().universal_part() - m_bulk.mesh_meta_data().locally_owned_part()); + + std::vector faceNodes, edgeNodes; + for (stk::mesh::Bucket* bucket : m_bulk.get_buckets(stk::topology::FACE_RANK, surfaceAndNotOwned)) + { + stk::topology faceTopo = bucket->topology(); + check_face_topology(faceTopo); + for (stk::mesh::Entity face : *bucket) + { + faceNodes.assign(m_bulk.begin_nodes(face), m_bulk.end_nodes(face)); + for (unsigned int i=0; i < faceTopo.num_edges(); ++i) + { + edgeNodes.clear(); + faceTopo.edge_nodes(faceNodes, i, std::back_inserter(edgeNodes)); + stk::mesh::Entity edge = get_common_edge(edgeNodes[0], edgeNodes[1]); + if (m_bulk.is_valid(edge)) + { + m_bulk.declare_relation(face, edge, i); + } + } + } + } +} + +stk::topology EdgesOnFacesCreator::get_edge_topology() const +{ + stk::topology edgeTopo = stk::topology::INVALID_TOPOLOGY; + for (stk::mesh::Bucket* bucket : m_bulk.get_buckets(stk::topology::FACE_RANK, m_surfaceAndOwned)) + { + edgeTopo = bucket->topology().edge_topology(); + break; + } + + int edgeTopoLocal = static_cast(edgeTopo); + int edgeTopoGlobal = 0; + MPI_Allreduce(&edgeTopoLocal, &edgeTopoGlobal, 1, MPI_INT, MPI_MAX, m_bulk.parallel()); + + return static_cast(edgeTopoGlobal); +} + +stk::mesh::Part* EdgesOnFacesCreator::create_edge_part_if_needed() const +{ + stk::mesh::Part* edgePart = m_edgePart; + if (!m_edgePart) + { + stk::topology edgeTopo = get_edge_topology(); + if (edgeTopo == stk::topology::INVALID_TOPOLOGY) + { + return nullptr; + } + + edgePart = &(m_bulk.mesh_meta_data().declare_part_with_topology("face_edges_part", edgeTopo)); + } + + return edgePart; +} + +void EdgesOnFacesCreator::check_edge_part_topology() +{ + stk::topology topo = m_edgePart->topology(); + STK_ThrowRequireMsg(topo.rank() == stk::topology::EDGE_RANK, "edge part topology must have EDGE_RANK"); + STK_ThrowRequireMsg(topo.num_vertices() <= 3, "edge part topology must have 3 or fewer vertices"); +} + +int EdgesOnFacesCreator::compute_upper_bound_on_num_edges() const +{ + std::vector localEntityCounts; + stk::mesh::count_entities(m_surfaceAndOwned, m_bulk, localEntityCounts); + const int maxEdgesPerFace = 4; + + return maxEdgesPerFace * localEntityCounts[stk::topology::FACE_RANK] - localEntityCounts[stk::topology::EDGE_RANK]; +} + +void EdgesOnFacesCreator::check_face_topology(stk::topology faceTopo) +{ + for (unsigned int i=0; i < faceTopo.num_edges(); ++i) + { + STK_ThrowRequireMsg(faceTopo.edge_topology(i) == m_edgePart->topology(), "edge part topology does not match face edge topology"); + } +} + +[[nodiscard]] stk::mesh::Entity EdgesOnFacesCreator::get_common_edge(stk::mesh::Entity entity1, stk::mesh::Entity entity2) const +{ + stk::mesh::Entity const* endEdge1 = m_bulk.end_edges(entity1); + stk::mesh::Entity const* endEdge2 = m_bulk.end_edges(entity2); + for (stk::mesh::Entity const * edge1 = m_bulk.begin_edges(entity1); edge1 != endEdge1; ++edge1) + { + for (stk::mesh::Entity const * edge2 = m_bulk.begin_edges(entity2); edge2 != endEdge2; ++edge2) + { + if (*edge1 == *edge2) + { + return *edge1; + } + } + } + + return stk::mesh::Entity(); +} + +void EdgesOnFacesCreator::sort_nodes_for_global_consistency(std::vector& edgeNodes) const +{ + stk::mesh::EntityLess entityLess(m_bulk); + if (!entityLess(edgeNodes[0], edgeNodes[1])) + { + stk::mesh::Entity tmp = edgeNodes[0]; + edgeNodes[0] = edgeNodes[1]; + edgeNodes[1] = tmp; + } +} + +} +} +} \ No newline at end of file diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/CreateEdgesOnFaces.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/CreateEdgesOnFaces.hpp new file mode 100644 index 000000000000..9cde2756f882 --- /dev/null +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/CreateEdgesOnFaces.hpp @@ -0,0 +1,90 @@ +// Copyright 2002 - 2008, 2010, 2011 National Technology Engineering +// Solutions of Sandia, LLC (NTESS). Under the terms of Contract +// DE-NA0003525 with NTESS, the U.S. Government retains certain rights +// in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// * Neither the name of NTESS nor the names of its contributors +// may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef STK_MESH_BASE_CREATE_EDGES_ON_FACES_H +#define STK_MESH_BASE_CREATE_EDGES_ON_FACES_H + +#include "stk_mesh/base/BulkData.hpp" +#include "stk_mesh/base/MetaData.hpp" + + +namespace stk { +namespace mesh { +namespace impl { + +class EdgesOnFacesCreator +{ + public: + EdgesOnFacesCreator(BulkData& bulkData, const Selector& surfaceSelector, Part* edgePart=nullptr) : + m_bulk(bulkData), + m_surfaceSelector(surfaceSelector), + m_surfaceAndOwned(m_surfaceSelector & bulkData.mesh_meta_data().locally_owned_part()), + m_edgePart(edgePart) + {} + + Part* create_edges(); + + public: + + void create_surface_edges(); + + void attach_edges_to_non_owned_faces(); + + [[nodiscard]] stk::topology get_edge_topology() const; + + stk::mesh::Part* create_edge_part_if_needed() const; + + void check_edge_part_topology(); + + int compute_upper_bound_on_num_edges() const; + + void check_face_topology(stk::topology faceTopo); + + [[nodiscard]] stk::mesh::Entity get_common_edge(stk::mesh::Entity entity1, stk::mesh::Entity entity2) const; + + void sort_nodes_for_global_consistency(std::vector& edgeNodes) const; + + BulkData& m_bulk; + Selector m_surfaceSelector; + Selector m_surfaceAndOwned; + Part* m_edgePart; + +}; + + +} +} +} + +#endif \ No newline at end of file diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/DeleteEdgesOnFaces.cpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/DeleteEdgesOnFaces.cpp new file mode 100644 index 000000000000..9386303e9cf9 --- /dev/null +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/DeleteEdgesOnFaces.cpp @@ -0,0 +1,82 @@ +#include "stk_mesh/baseImpl/DeleteEdgesOnFaces.hpp" + +#include +#include "stk_mesh/base/GetEntities.hpp" +#include "stk_mesh/base/Types.hpp" +#include "stk_topology/topology.hpp" +#include "stk_util/util/ReportHandler.hpp" + +namespace stk { +namespace mesh { +namespace impl { + +EdgesOnFacesDeleter::EdgesOnFacesDeleter(BulkData& bulk, Part* edgePart) : + m_bulk(bulk), + m_edgePart(edgePart) +{ + STK_ThrowRequire(edgePart->topology().rank() == stk::topology::EDGE_RANK); +} + +void EdgesOnFacesDeleter::delete_surface_edges() +{ + stk::mesh::Selector edgesSelector = *m_edgePart; + std::vector edges; + stk::mesh::get_entities(m_bulk, stk::topology::EDGE_RANK, edgesSelector, edges); + + std::vector nodes, faces; + std::vector ordinals; + for (stk::mesh::Entity edge : edges) + { + nodes.assign(m_bulk.begin_nodes(edge), m_bulk.end_nodes(edge)); + ordinals.assign(m_bulk.begin_node_ordinals(edge), m_bulk.end_node_ordinals(edge)); + delete_edge_to_node_relations(edge, nodes, ordinals); + + faces.assign(m_bulk.begin_faces(edge), m_bulk.end_faces(edge)); + delete_face_to_edge_relations(faces, edge); + + bool didDelete = m_bulk.destroy_entity(edge); + STK_ThrowRequireMsg(didDelete, "failed to destroy entity"); + } +} + +void EdgesOnFacesDeleter::delete_edge_to_node_relations(Entity edge, const std::vector& nodes, const std::vector& ordinals) +{ + for (size_t i=0; i < nodes.size(); ++i) + { + bool didDelete = m_bulk.destroy_relation(edge, nodes[i], ordinals[i]); + STK_ThrowRequireMsg(didDelete, "failed to destroy relation"); + } +} + +void EdgesOnFacesDeleter::delete_face_to_edge_relations(const std::vector& faces, Entity edge) +{ + for (stk::mesh::Entity face : faces) + { + int idx = get_edge_idx(face, edge); + bool didDelete = m_bulk.destroy_relation(face, edge, idx); + STK_ThrowRequireMsg(didDelete, "failed to destroy relation"); + } +} + +int EdgesOnFacesDeleter::get_edge_idx(Entity face, Entity edge) +{ + int idx = -1; + stk::mesh::ConnectivityOrdinal const* downEdgeOrdinal = m_bulk.begin_edge_ordinals(face); + for (stk::mesh::Entity const * downEdge = m_bulk.begin_edges(face); downEdge != m_bulk.end_edges(face); ++downEdge) + { + if (*downEdge == edge) + { + idx = *downEdgeOrdinal; + break; + } + + downEdgeOrdinal++; + } + STK_ThrowRequireMsg(idx >= 0, "unable to find edge"); + + return idx; +} + +} +} +} \ No newline at end of file diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/DeleteEdgesOnFaces.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/DeleteEdgesOnFaces.hpp new file mode 100644 index 000000000000..2552af61e9ef --- /dev/null +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/DeleteEdgesOnFaces.hpp @@ -0,0 +1,67 @@ +// Copyright 2002 - 2008, 2010, 2011 National Technology Engineering +// Solutions of Sandia, LLC (NTESS). Under the terms of Contract +// DE-NA0003525 with NTESS, the U.S. Government retains certain rights +// in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// * Neither the name of NTESS nor the names of its contributors +// may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef STK_MESH_BASE_DELETE_EDGES_ON_FACES_H +#define STK_MESH_BASE_DELETE_EDGES_ON_FACES_H + +#include "stk_mesh/base/BulkData.hpp" + +namespace stk { +namespace mesh { +namespace impl { + +class EdgesOnFacesDeleter +{ + public: + EdgesOnFacesDeleter(BulkData& bulk, Part* edgePart); + + void delete_surface_edges(); + + private: + void delete_edge_to_node_relations(Entity edge, const std::vector& nodes, const std::vector& ordinals); + + void delete_face_to_edge_relations(const std::vector& faces, Entity edge); + + int get_edge_idx(Entity face, Entity edge); + + BulkData& m_bulk; + Part* m_edgePart; +}; + + +} +} +} + +#endif \ No newline at end of file diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/DeletedElementInfo.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/DeletedElementInfo.hpp index 7f20a3c1359c..d1d6a180dd7b 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/DeletedElementInfo.hpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/DeletedElementInfo.hpp @@ -49,6 +49,15 @@ struct DeletedElementInfo stk::mesh::Entity entity; stk::mesh::EntityId identifier; bool isShell; + + bool operator<(const DeletedElementInfo& rhs) const + { + return identifier < rhs.identifier; + } + bool operator==(const DeletedElementInfo& rhs) const + { + return identifier == rhs.identifier; + } }; typedef std::vector DeletedElementInfoVector; diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/ForEachEntityLoopAbstractions.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/ForEachEntityLoopAbstractions.hpp index 5bb5dafe263a..ba7a470f30ff 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/ForEachEntityLoopAbstractions.hpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/ForEachEntityLoopAbstractions.hpp @@ -106,8 +106,8 @@ void for_each_selected_entity_run_with_nodes(const BulkData &mesh, stk::topology } } -template -void for_each_selected_entity_run_no_threads(const BulkData &mesh, stk::topology::rank_t rank, const stk::mesh::Selector &selector, const ALGORITHM_PER_ENTITY &functor) +inline +void for_each_selected_entity_run_no_threads(const BulkData &mesh, stk::topology::rank_t rank, const stk::mesh::Selector &selector, const std::function &functor) { const stk::mesh::BucketVector & buckets = mesh.get_buckets(rank, selector); for(size_t j=0; j& functor) +{ + const stk::mesh::BucketVector & buckets = mesh.get_buckets(rank, selector); + const size_t numBuckets = buckets.size(); + + for(size_t j=0; jsize(); i++) + { + functor(mesh, (*bucket)[i]); + } + } +} + template void for_each_entity_run_no_threads(const BulkData &mesh, stk::topology::rank_t rank, const ALGORITHM_PER_ENTITY &functor) { diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/MeshImplUtils.cpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/MeshImplUtils.cpp index 2c0b21aeba93..a1a0cbfd8afe 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/MeshImplUtils.cpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/MeshImplUtils.cpp @@ -6,15 +6,15 @@ // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: -// +// // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. -// +// // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. -// +// // * Neither the name of NTESS nor the names of its contributors // may be used to endorse or promote products derived from this // software without specific prior written permission. @@ -30,7 +30,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +// #include #include @@ -485,7 +485,7 @@ bool shared_entities_modified_on_any_proc(const BulkData& mesh, stk::ParallelMac } } } - else { + else { local_any_shared_entities_modified = true; break; } @@ -858,7 +858,7 @@ bool check_permutations_on_all(stk::mesh::BulkData& mesh) int verified_ok = all_ok ? 1 : 0; - if (mesh.parallel_size() > 1) + if (mesh.parallel_size() > 1) { all_reduce( mesh.parallel() , ReduceMin<1>( & verified_ok ) ); } @@ -952,7 +952,7 @@ void comm_sync_send_recv(const BulkData & mesh , // Erase it from my processor's ghosting responsibility: // The iterator passed to the erase method will be invalidated. entProc.first = Entity(); - } + } } auto shouldRemove = [&](const EntityProc& ep){ return ep.first.local_offset() == 0; }; @@ -1056,14 +1056,14 @@ class GhostCommHelper m_commSparse.allocate_buffers(); } - + void pack_and_communicate_buffers(const std::vector& removeRecvGhosts) { unsigned idx = 0; for(int p=0; p(m_rmRecvCounts[p]); if (m_rmRecvCounts[p] > 0) { for(Entity entity : removeRecvGhosts) { @@ -1073,7 +1073,7 @@ class GhostCommHelper } } } - + buf.pack(m_nonOwnedSendCounts[p]); if (m_nonOwnedSendCounts[p] > 0) { for(unsigned i=idx; i& removeSendGhosts) { @@ -1098,13 +1098,13 @@ class GhostCommHelper CommBuffer & buf = m_commSparse.recv_buffer(p); unsigned numRemoveSends = 0; buf.unpack(numRemoveSends); - + for(unsigned i=0; i(key); removeSendGhosts.insert(EntityKeyProc(key,p)); } - + unsigned numReferredSends = 0; buf.unpack(numReferredSends); for(unsigned i=0; iupdate_num_ranks(m_bulkData.mesh_meta_data().entity_rank_count()); - const unsigned numRanks = m_bulkData.mesh_meta_data().entity_rank_count(); + const unsigned numRanks = m_bulkData.mesh_meta_data().entity_rank_count(); if (numRanks > m_bulkData.m_selector_to_buckets_maps.size()) { m_bulkData.m_selector_to_buckets_maps.resize(numRanks); } @@ -592,7 +592,7 @@ void MeshModification::internal_resolve_shared_modify_delete( internal_resolve_formerly_shared_entities(entitiesNoLongerShared); stk::util::sort_and_unique(auraEntitiesToDestroy, EntityLess(m_bulkData)); - + for(EntityVector::const_reverse_iterator iter = auraEntitiesToDestroy.rbegin(); iter != auraEntitiesToDestroy.rend(); ++iter) { m_bulkData.destroy_entity(*iter); @@ -636,7 +636,7 @@ void MeshModification::internal_update_parts_for_shared_entity(Entity entity, } else { parts_to_remove_entity_from.push_back(m_bulkData.mesh_meta_data().globally_shared_part().mesh_meta_data_ordinal()); - } + } if (should_remove_aura_part) { parts_to_remove_entity_from.push_back(m_bulkData.mesh_meta_data().aura_part().mesh_meta_data_ordinal()); @@ -644,11 +644,11 @@ void MeshModification::internal_update_parts_for_shared_entity(Entity entity, if ( did_i_just_become_owner ) { parts_to_add_entity_to.push_back(m_bulkData.mesh_meta_data().locally_owned_part().mesh_meta_data_ordinal()); - } + } if ( ! parts_to_add_entity_to.empty() || ! parts_to_remove_entity_from.empty() ) { m_bulkData.internal_change_entity_parts( entity , parts_to_add_entity_to , parts_to_remove_entity_from, scratchOrdinalVec, scratchSpace ); - } + } } void MeshModification::destroy_dependent_ghosts(Entity entity, @@ -661,21 +661,21 @@ void MeshModification::destroy_dependent_ghosts(Entity entity, { int num_rels = m_bulkData.num_connectivity(entity, irank); const Entity* rels = m_bulkData.begin(entity, irank); - + for (int r = num_rels - 1; r >= 0; --r) - { + { Entity e = rels[r]; const bool upwardRelationOfEntityIsInClosure = m_bulkData.owned_closure(e); STK_ThrowRequireMsg( !upwardRelationOfEntityIsInClosure, m_bulkData.entity_rank(e) << " with id " << m_bulkData.identifier(e) << " should not be in closure." ); - + // Recursion if (m_bulkData.is_valid(e) && m_bulkData.bucket(e).in_aura()) { destroy_dependent_ghosts(e, entitiesToRemoveFromSharing, auraEntitiesToDestroy); } } - } - + } + for(EntityRank downwardRank=stk::topology::NODE_RANK; downwardRank < entity_rank; ++downwardRank) { const unsigned numConnected = m_bulkData.num_connectivity(entity, downwardRank); const Entity* connected = m_bulkData.begin(entity, downwardRank); @@ -707,9 +707,9 @@ void MeshModification::remove_dependent_ghosts(Entity entity, { int num_rels = m_bulkData.num_connectivity(entity, irank); const Entity* rels = m_bulkData.begin(entity, irank); - + for (int r = num_rels - 1; r >= 0; --r) - { + { Entity e = rels[r]; // Recursion @@ -717,8 +717,8 @@ void MeshModification::remove_dependent_ghosts(Entity entity, remove_dependent_ghosts(e, remoteProc, entitiesToRemoveFromSharing, auraEntitiesToDestroy); } } - } - + } + for(EntityRank downwardRank=stk::topology::NODE_RANK; downwardRank < entity_rank; ++downwardRank) { const unsigned numConnected = m_bulkData.num_connectivity(entity, downwardRank); const Entity* connected = m_bulkData.begin(entity, downwardRank); @@ -752,7 +752,7 @@ void MeshModification::delete_shared_entities_which_are_no_longer_in_owned_closu for ( EntityCommListInfoVector::const_reverse_iterator i = m_bulkData.internal_comm_list().rbegin() ; - i != m_bulkData.internal_comm_list().rend() ; ++i) + i != m_bulkData.internal_comm_list().rend() ; ++i) { Entity entity = i->entity; if (m_bulkData.is_valid(entity) && !m_bulkData.owned_closure(entity)) { @@ -796,7 +796,7 @@ void MeshModification::internal_resolve_ghosted_modify_delete(const std::vector< // Resolve modifications for ghosted entities: const size_t ghosting_count = m_bulkData.m_ghosting.size(); - const size_t ghosting_count_minus_shared = ghosting_count - 1; + const size_t ghosting_count_minus_shared = ghosting_count - 1; std::vector promotingToShared; @@ -822,9 +822,9 @@ void MeshModification::internal_resolve_ghosted_modify_delete(const std::vector< // remove from ghost-send list for ( size_t j = ghosting_count_minus_shared ; j>=1 ; --j) { - m_bulkData.entity_comm_map_erase( key, EntityCommInfo( j , remote_proc ) ); + m_bulkData.entity_comm_map_erase( key, EntityCommInfo( j , remote_proc ) ); } - } + } else { const bool shouldPromoteToShared = !isAlreadyDestroyed && i->remote_owned_closure==1 && key.rank() < stk::topology::ELEM_RANK; if ((shouldPromoteToShared || !isAlreadyDestroyed) && m_bulkData.state(entity)==Unchanged) { @@ -835,8 +835,8 @@ void MeshModification::internal_resolve_ghosted_modify_delete(const std::vector< m_bulkData.entity_comm_map_insert(entity, EntityCommInfo(BulkData::SHARED, remote_proc)); promotingToShared.push_back(entity); } - } - } + } + } else if (remote_proc_is_owner) { // Receiving from 'remote_proc' for ghosting const bool hasBeenPromotedToSharedOrOwned = m_bulkData.owned_closure(entity); @@ -922,7 +922,7 @@ void MeshModification::add_entity_to_same_ghosting(Entity entity, Entity connect for(PairIterEntityComm ec(m_bulkData.internal_entity_comm_map(connectedGhost)); ! ec.empty(); ++ec) { if (ec->ghost_id > BulkData::AURA) { to_insert.emplace_back(ec->ghost_id, ec->proc); - } + } } if(!to_insert.empty()) { m_bulkData.entity_comm_list_insert(entity); diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/Visitors.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/Visitors.hpp index 86347533b143..ecb1ad214946 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/Visitors.hpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/Visitors.hpp @@ -6,15 +6,15 @@ // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: -// +// // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. -// +// // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. -// +// // * Neither the name of NTESS nor the names of its contributors // may be used to endorse or promote products derived from this // software without specific prior written permission. @@ -30,7 +30,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +// #ifndef stk_mesh_base_impl_Visitors_hpp #define stk_mesh_base_impl_Visitors_hpp diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.cpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.cpp index 892c83baaf90..9d75a0a23a96 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.cpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraph.cpp @@ -1090,8 +1090,10 @@ bool ElemElemGraph::communicate_if_shell_connectivity(std::vector &deletedShells) { unsigned localNumShells = shellConnectivityList.size(); - unsigned globalMaxShells = 0; - stk::all_reduce_max(m_bulk_data.parallel(), &localNumShells, &globalMaxShells, 1); + unsigned globalMaxShells = localNumShells; + if (m_bulk_data.parallel_size() > 1) { + stk::all_reduce_max(m_bulk_data.parallel(), &localNumShells, &globalMaxShells, 1); + } if (globalMaxShells == 0) { return false; } diff --git a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraphUpdater.hpp b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraphUpdater.hpp index 6f025beb9dd4..316b3f88fb78 100644 --- a/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraphUpdater.hpp +++ b/packages/stk/stk_mesh/stk_mesh/baseImpl/elementGraph/ElemElemGraphUpdater.hpp @@ -41,6 +41,7 @@ #include // for topology, etc #include // for ThrowRequire #include +#include #include // for allocator, vector #include "stk_mesh/base/Bucket.hpp" // for Bucket #include "stk_mesh/base/Entity.hpp" // for Entity @@ -77,9 +78,30 @@ class ElemElemGraphUpdater : public stk::mesh::ModificationObserver } } + virtual void relation_destroyed(Entity from, Entity to, ConnectivityOrdinal ordinal) + { + if (bulkData.entity_rank(from) == stk::topology::ELEM_RANK && + bulkData.entity_rank(to) == stk::topology::NODE_RANK && + bulkData.bucket(from).owned()) { + elementsDeleted.push_back({from, bulkData.identifier(from), bulkData.bucket(from).topology().is_shell()}); + } + } + + virtual void relation_declared(Entity from, Entity to, ConnectivityOrdinal ordinal) + { + if (bulkData.entity_rank(from) == stk::topology::ELEM_RANK && + bulkData.entity_rank(to) == stk::topology::NODE_RANK && + bulkData.bucket(from).owned()) { + elementsDeleted.push_back({from, bulkData.identifier(from), bulkData.bucket(from).topology().is_shell()}); + elementsAdded.push_back(from); + } + } + virtual void finished_modification_end_notification() { if (changeEntityOwnerInProgress) { + elementsAdded.clear(); + elementsDeleted.clear(); elemGraph.fill_from_mesh(); changeEntityOwnerInProgress = false; } @@ -91,6 +113,7 @@ class ElemElemGraphUpdater : public stk::mesh::ModificationObserver virtual void started_modification_end_notification() { + stk::util::sort_and_unique(elementsDeleted); if (get_global_sum(bulkData.parallel(), elementsDeleted.size()) > 0) { elemGraph.delete_elements(elementsDeleted); elementsDeleted.clear(); @@ -100,6 +123,7 @@ class ElemElemGraphUpdater : public stk::mesh::ModificationObserver virtual void fill_values_to_reduce(std::vector &valuesToReduce) { valuesToReduce.clear(); + stk::util::sort_and_unique(elementsAdded); unsigned value = any_added_elements_are_owned(elementsAdded) ? 1 : 0; if (value == 0) { elementsAdded.clear(); diff --git a/packages/stk/stk_ngp_test/stk_ngp_test/GlobalReporter.hpp b/packages/stk/stk_ngp_test/stk_ngp_test/GlobalReporter.hpp index ab04af07978a..617d1d095b46 100644 --- a/packages/stk/stk_ngp_test/stk_ngp_test/GlobalReporter.hpp +++ b/packages/stk/stk_ngp_test/stk_ngp_test/GlobalReporter.hpp @@ -16,7 +16,7 @@ using HostReporter = Reporter; void initialize_reporters(); void finalize_reporters(); -NGP_TEST_FUNCTION HostReporter* get_host_reporter(); +inline HostReporter* get_host_reporter(); NGP_TEST_FUNCTION DeviceReporter* get_device_reporter(); DeviceReporter* get_device_reporter_on_host(); diff --git a/packages/stk/stk_search/stk_search/arborx/LocalCoarseSearchArborX.hpp b/packages/stk/stk_search/stk_search/arborx/LocalCoarseSearchArborX.hpp index ba38362a6fab..e95c6f4223b5 100644 --- a/packages/stk/stk_search/stk_search/arborx/LocalCoarseSearchArborX.hpp +++ b/packages/stk/stk_search/stk_search/arborx/LocalCoarseSearchArborX.hpp @@ -186,6 +186,9 @@ inline void local_coarse_search_arborx(const std::vector &tree, ExecutionSpace const& execSpace) { - if constexpr (std::is_same_v) { + if constexpr (Kokkos::SpaceAccessibility::accessible) { SortByCodeIdPair::apply(tree); } else { diff --git a/packages/stk/stk_search_util/Jamfile b/packages/stk/stk_search_util/Jamfile index dd020dab7fd5..133dca0e88d5 100644 --- a/packages/stk/stk_search_util/Jamfile +++ b/packages/stk/stk_search_util/Jamfile @@ -143,6 +143,7 @@ lib stk_search_util_base /sierra/stk_search//stk_search /sierra/stk_mesh//stk_mesh_base /sierra/stk_util//stk_util_diag + /tpl/trilinos//intrepid2 : [ ifuserbuild # Any parameters within this 'ifuserbuild' block apply to user diff --git a/packages/stk/stk_tools/stk_tools/CMakeLists.txt b/packages/stk/stk_tools/stk_tools/CMakeLists.txt index 92669929f25b..1e23d08ad8e2 100644 --- a/packages/stk/stk_tools/stk_tools/CMakeLists.txt +++ b/packages/stk/stk_tools/stk_tools/CMakeLists.txt @@ -44,7 +44,7 @@ FILE(GLOB BLOCK_EXTRACTOR_HEADERS block_extractor/*.hpp) FILE(GLOB BLOCK_EXTRACTOR_SOURCES block_extractor/*.cpp) FILE(GLOB TRANSFER_UTILS_HEADERS transfer_utils/*.hpp) FILE(GLOB TRANSFER_UTILS_SOURCES transfer_utils/*.cpp) -FILE(GLOB PMESH_LIB_HEADERS pmesh_lib/*.hpp) +FILE(GLOB PMESH_LIB_HEADERS pmesh_lib/*.hpp pmesh_lib/*.H) FILE(GLOB PMESH_LIB_SOURCES pmesh_lib/*.cpp) LIST(REMOVE_ITEM BLOCK_EXTRACTOR_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/block_extractor/main.cpp) @@ -133,7 +133,9 @@ if (STK_HAS_SEACAS_NEMESIS) ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR}/stk_tools/pmesh_lib) endif() -INSTALL(TARGETS stk_block_extractor COMPONENT ${PACKAGE_NAME} RUNTIME DESTINATION ${${PROJECT_NAME}_INSTALL_RUNTIME_DIR}) +if(TARGET stk_block_extractor) + INSTALL(TARGETS stk_block_extractor COMPONENT ${PACKAGE_NAME} RUNTIME DESTINATION ${${PROJECT_NAME}_INSTALL_RUNTIME_DIR}) +endif() if(NOT HAVE_STK_Trilinos) INSTALL(TARGETS stk_transfer_utils_lib EXPORT stkTargets DESTINATION ${STK_INSTALL_LIBDIR}) diff --git a/packages/stk/stk_topology/stk_topology/apply_functor.hpp b/packages/stk/stk_topology/stk_topology/apply_functor.hpp index b9b1a73e8360..299d5972a1fb 100644 --- a/packages/stk/stk_topology/stk_topology/apply_functor.hpp +++ b/packages/stk/stk_topology/stk_topology/apply_functor.hpp @@ -60,54 +60,60 @@ struct topology::apply_host_functor { switch(t) { - case INVALID_TOPOLOGY: return m_functor( topology_type< INVALID_TOPOLOGY >() ); - case NODE: return m_functor( topology_type< NODE >() ); - case LINE_2: return m_functor( topology_type< LINE_2 >() ); - case LINE_3: return m_functor( topology_type< LINE_3 >() ); - case TRI_3: return m_functor( topology_type< TRI_3 >() ); - case TRI_4: return m_functor( topology_type< TRI_4 >() ); - case TRI_6: return m_functor( topology_type< TRI_6 >() ); - case QUAD_4: return m_functor( topology_type< QUAD_4 >() ); - case QUAD_6: return m_functor( topology_type< QUAD_6 >() ); - case QUAD_8: return m_functor( topology_type< QUAD_8 >() ); - case QUAD_9: return m_functor( topology_type< QUAD_9 >() ); - case PARTICLE: return m_functor( topology_type< PARTICLE >() ); - case LINE_2_1D: return m_functor( topology_type< LINE_2_1D >() ); - case LINE_3_1D: return m_functor( topology_type< LINE_3_1D >() ); - case BEAM_2: return m_functor( topology_type< BEAM_2 >() ); - case BEAM_3: return m_functor( topology_type< BEAM_3 >() ); - case SHELL_LINE_2: return m_functor( topology_type< SHELL_LINE_2 >() ); - case SHELL_LINE_3: return m_functor( topology_type< SHELL_LINE_3 >() ); - case SHELL_SIDE_BEAM_2: return m_functor( topology_type< SHELL_SIDE_BEAM_2 >() ); - case SHELL_SIDE_BEAM_3: return m_functor( topology_type< SHELL_SIDE_BEAM_3 >() ); - case SPRING_2: return m_functor( topology_type< SPRING_2 >() ); - case SPRING_3: return m_functor( topology_type< SPRING_3 >() ); - case TRI_3_2D: return m_functor( topology_type< TRI_3_2D >() ); - case TRI_4_2D: return m_functor( topology_type< TRI_4_2D >() ); - case TRI_6_2D: return m_functor( topology_type< TRI_6_2D >() ); - case QUAD_4_2D: return m_functor( topology_type< QUAD_4_2D >() ); - case QUAD_8_2D: return m_functor( topology_type< QUAD_8_2D >() ); - case QUAD_9_2D: return m_functor( topology_type< QUAD_9_2D >() ); - case SHELL_TRI_3: return m_functor( topology_type< SHELL_TRI_3 >() ); - case SHELL_TRI_4: return m_functor( topology_type< SHELL_TRI_4 >() ); - case SHELL_TRI_6: return m_functor( topology_type< SHELL_TRI_6 >() ); - case SHELL_QUAD_4: return m_functor( topology_type< SHELL_QUAD_4 >() ); - case SHELL_QUAD_8: return m_functor( topology_type< SHELL_QUAD_8 >() ); - case SHELL_QUAD_9: return m_functor( topology_type< SHELL_QUAD_9 >() ); - case TET_4: return m_functor( topology_type< TET_4 >() ); - case TET_8: return m_functor( topology_type< TET_8 >() ); - case TET_10: return m_functor( topology_type< TET_10 >() ); - case TET_11: return m_functor( topology_type< TET_11 >() ); - case PYRAMID_5: return m_functor( topology_type< PYRAMID_5 >() ); - case PYRAMID_13: return m_functor( topology_type< PYRAMID_13 >() ); - case PYRAMID_14: return m_functor( topology_type< PYRAMID_14 >() ); - case WEDGE_6: return m_functor( topology_type< WEDGE_6 >() ); - case WEDGE_12: return m_functor( topology_type< WEDGE_12 >() ); - case WEDGE_15: return m_functor( topology_type< WEDGE_15 >() ); - case WEDGE_18: return m_functor( topology_type< WEDGE_18 >() ); - case HEX_8: return m_functor( topology_type< HEX_8 >() ); - case HEX_20: return m_functor( topology_type< HEX_20 >() ); - case HEX_27: return m_functor( topology_type< HEX_27 >() ); + case INVALID_TOPOLOGY: return m_functor( topology_type< INVALID_TOPOLOGY >() ); + case NODE: return m_functor( topology_type< NODE >() ); + case LINE_2: return m_functor( topology_type< LINE_2 >() ); + case LINE_3: return m_functor( topology_type< LINE_3 >() ); + case TRI_3: return m_functor( topology_type< TRI_3 >() ); + case TRI_4: return m_functor( topology_type< TRI_4 >() ); + case TRI_6: return m_functor( topology_type< TRI_6 >() ); + case QUAD_4: return m_functor( topology_type< QUAD_4 >() ); + case QUAD_6: return m_functor( topology_type< QUAD_6 >() ); + case QUAD_8: return m_functor( topology_type< QUAD_8 >() ); + case QUAD_9: return m_functor( topology_type< QUAD_9 >() ); + case PARTICLE: return m_functor( topology_type< PARTICLE >() ); + case LINE_2_1D: return m_functor( topology_type< LINE_2_1D >() ); + case LINE_3_1D: return m_functor( topology_type< LINE_3_1D >() ); + case BEAM_2: return m_functor( topology_type< BEAM_2 >() ); + case BEAM_3: return m_functor( topology_type< BEAM_3 >() ); + case SHELL_LINE_2: return m_functor( topology_type< SHELL_LINE_2 >() ); + case SHELL_LINE_3: return m_functor( topology_type< SHELL_LINE_3 >() ); + case SHELL_SIDE_BEAM_2: return m_functor( topology_type< SHELL_SIDE_BEAM_2 >() ); + case SHELL_SIDE_BEAM_3: return m_functor( topology_type< SHELL_SIDE_BEAM_3 >() ); + case SPRING_2: return m_functor( topology_type< SPRING_2 >() ); + case SPRING_3: return m_functor( topology_type< SPRING_3 >() ); + case TRI_3_2D: return m_functor( topology_type< TRI_3_2D >() ); + case TRI_4_2D: return m_functor( topology_type< TRI_4_2D >() ); + case TRI_6_2D: return m_functor( topology_type< TRI_6_2D >() ); + case QUAD_4_2D: return m_functor( topology_type< QUAD_4_2D >() ); + case QUAD_8_2D: return m_functor( topology_type< QUAD_8_2D >() ); + case QUAD_9_2D: return m_functor( topology_type< QUAD_9_2D >() ); + case SHELL_TRI_3: return m_functor( topology_type< SHELL_TRI_3 >() ); + case SHELL_TRI_4: return m_functor( topology_type< SHELL_TRI_4 >() ); + case SHELL_TRI_6: return m_functor( topology_type< SHELL_TRI_6 >() ); + case SHELL_TRI_3_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_3_ALL_FACE_SIDES >() ); + case SHELL_TRI_4_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_4_ALL_FACE_SIDES >() ); + case SHELL_TRI_6_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_6_ALL_FACE_SIDES >() ); + case SHELL_QUAD_4: return m_functor( topology_type< SHELL_QUAD_4 >() ); + case SHELL_QUAD_8: return m_functor( topology_type< SHELL_QUAD_8 >() ); + case SHELL_QUAD_9: return m_functor( topology_type< SHELL_QUAD_9 >() ); + case SHELL_QUAD_4_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_4_ALL_FACE_SIDES >() ); + case SHELL_QUAD_8_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_8_ALL_FACE_SIDES >() ); + case SHELL_QUAD_9_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_9_ALL_FACE_SIDES >() ); + case TET_4: return m_functor( topology_type< TET_4 >() ); + case TET_8: return m_functor( topology_type< TET_8 >() ); + case TET_10: return m_functor( topology_type< TET_10 >() ); + case TET_11: return m_functor( topology_type< TET_11 >() ); + case PYRAMID_5: return m_functor( topology_type< PYRAMID_5 >() ); + case PYRAMID_13: return m_functor( topology_type< PYRAMID_13 >() ); + case PYRAMID_14: return m_functor( topology_type< PYRAMID_14 >() ); + case WEDGE_6: return m_functor( topology_type< WEDGE_6 >() ); + case WEDGE_12: return m_functor( topology_type< WEDGE_12 >() ); + case WEDGE_15: return m_functor( topology_type< WEDGE_15 >() ); + case WEDGE_18: return m_functor( topology_type< WEDGE_18 >() ); + case HEX_8: return m_functor( topology_type< HEX_8 >() ); + case HEX_20: return m_functor( topology_type< HEX_20 >() ); + case HEX_27: return m_functor( topology_type< HEX_27 >() ); default: break; } return m_functor( topology_type() ); @@ -117,54 +123,60 @@ struct topology::apply_host_functor { switch(t) { - case INVALID_TOPOLOGY: return m_functor( topology_type< INVALID_TOPOLOGY >() ); - case NODE: return m_functor( topology_type< NODE >() ); - case LINE_2: return m_functor( topology_type< LINE_2 >() ); - case LINE_3: return m_functor( topology_type< LINE_3 >() ); - case TRI_3: return m_functor( topology_type< TRI_3 >() ); - case TRI_4: return m_functor( topology_type< TRI_4 >() ); - case TRI_6: return m_functor( topology_type< TRI_6 >() ); - case QUAD_4: return m_functor( topology_type< QUAD_4 >() ); - case QUAD_6: return m_functor( topology_type< QUAD_6 >() ); - case QUAD_8: return m_functor( topology_type< QUAD_8 >() ); - case QUAD_9: return m_functor( topology_type< QUAD_9 >() ); - case PARTICLE: return m_functor( topology_type< PARTICLE >() ); - case LINE_2_1D: return m_functor( topology_type< LINE_2_1D >() ); - case LINE_3_1D: return m_functor( topology_type< LINE_3_1D >() ); - case BEAM_2: return m_functor( topology_type< BEAM_2 >() ); - case BEAM_3: return m_functor( topology_type< BEAM_3 >() ); - case SHELL_LINE_2: return m_functor( topology_type< SHELL_LINE_2 >() ); - case SHELL_LINE_3: return m_functor( topology_type< SHELL_LINE_3 >() ); - case SHELL_SIDE_BEAM_2: return m_functor( topology_type< SHELL_SIDE_BEAM_2 >() ); - case SHELL_SIDE_BEAM_3: return m_functor( topology_type< SHELL_SIDE_BEAM_3 >() ); - case SPRING_2: return m_functor( topology_type< SPRING_2 >() ); - case SPRING_3: return m_functor( topology_type< SPRING_3 >() ); - case TRI_3_2D: return m_functor( topology_type< TRI_3_2D >() ); - case TRI_4_2D: return m_functor( topology_type< TRI_4_2D >() ); - case TRI_6_2D: return m_functor( topology_type< TRI_6_2D >() ); - case QUAD_4_2D: return m_functor( topology_type< QUAD_4_2D >() ); - case QUAD_8_2D: return m_functor( topology_type< QUAD_8_2D >() ); - case QUAD_9_2D: return m_functor( topology_type< QUAD_9_2D >() ); - case SHELL_TRI_3: return m_functor( topology_type< SHELL_TRI_3 >() ); - case SHELL_TRI_4: return m_functor( topology_type< SHELL_TRI_4 >() ); - case SHELL_TRI_6: return m_functor( topology_type< SHELL_TRI_6 >() ); - case SHELL_QUAD_4: return m_functor( topology_type< SHELL_QUAD_4 >() ); - case SHELL_QUAD_8: return m_functor( topology_type< SHELL_QUAD_8 >() ); - case SHELL_QUAD_9: return m_functor( topology_type< SHELL_QUAD_9 >() ); - case TET_4: return m_functor( topology_type< TET_4 >() ); - case TET_8: return m_functor( topology_type< TET_8 >() ); - case TET_10: return m_functor( topology_type< TET_10 >() ); - case TET_11: return m_functor( topology_type< TET_11 >() ); - case PYRAMID_5: return m_functor( topology_type< PYRAMID_5 >() ); - case PYRAMID_13: return m_functor( topology_type< PYRAMID_13 >() ); - case PYRAMID_14: return m_functor( topology_type< PYRAMID_14 >() ); - case WEDGE_6: return m_functor( topology_type< WEDGE_6 >() ); - case WEDGE_12: return m_functor( topology_type< WEDGE_12 >() ); - case WEDGE_15: return m_functor( topology_type< WEDGE_15 >() ); - case WEDGE_18: return m_functor( topology_type< WEDGE_18 >() ); - case HEX_8: return m_functor( topology_type< HEX_8 >() ); - case HEX_20: return m_functor( topology_type< HEX_20 >() ); - case HEX_27: return m_functor( topology_type< HEX_27 >() ); + case INVALID_TOPOLOGY: return m_functor( topology_type< INVALID_TOPOLOGY >() ); + case NODE: return m_functor( topology_type< NODE >() ); + case LINE_2: return m_functor( topology_type< LINE_2 >() ); + case LINE_3: return m_functor( topology_type< LINE_3 >() ); + case TRI_3: return m_functor( topology_type< TRI_3 >() ); + case TRI_4: return m_functor( topology_type< TRI_4 >() ); + case TRI_6: return m_functor( topology_type< TRI_6 >() ); + case QUAD_4: return m_functor( topology_type< QUAD_4 >() ); + case QUAD_6: return m_functor( topology_type< QUAD_6 >() ); + case QUAD_8: return m_functor( topology_type< QUAD_8 >() ); + case QUAD_9: return m_functor( topology_type< QUAD_9 >() ); + case PARTICLE: return m_functor( topology_type< PARTICLE >() ); + case LINE_2_1D: return m_functor( topology_type< LINE_2_1D >() ); + case LINE_3_1D: return m_functor( topology_type< LINE_3_1D >() ); + case BEAM_2: return m_functor( topology_type< BEAM_2 >() ); + case BEAM_3: return m_functor( topology_type< BEAM_3 >() ); + case SHELL_LINE_2: return m_functor( topology_type< SHELL_LINE_2 >() ); + case SHELL_LINE_3: return m_functor( topology_type< SHELL_LINE_3 >() ); + case SHELL_SIDE_BEAM_2: return m_functor( topology_type< SHELL_SIDE_BEAM_2 >() ); + case SHELL_SIDE_BEAM_3: return m_functor( topology_type< SHELL_SIDE_BEAM_3 >() ); + case SPRING_2: return m_functor( topology_type< SPRING_2 >() ); + case SPRING_3: return m_functor( topology_type< SPRING_3 >() ); + case TRI_3_2D: return m_functor( topology_type< TRI_3_2D >() ); + case TRI_4_2D: return m_functor( topology_type< TRI_4_2D >() ); + case TRI_6_2D: return m_functor( topology_type< TRI_6_2D >() ); + case QUAD_4_2D: return m_functor( topology_type< QUAD_4_2D >() ); + case QUAD_8_2D: return m_functor( topology_type< QUAD_8_2D >() ); + case QUAD_9_2D: return m_functor( topology_type< QUAD_9_2D >() ); + case SHELL_TRI_3: return m_functor( topology_type< SHELL_TRI_3 >() ); + case SHELL_TRI_4: return m_functor( topology_type< SHELL_TRI_4 >() ); + case SHELL_TRI_6: return m_functor( topology_type< SHELL_TRI_6 >() ); + case SHELL_TRI_3_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_3_ALL_FACE_SIDES >() ); + case SHELL_TRI_4_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_4_ALL_FACE_SIDES >() ); + case SHELL_TRI_6_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_6_ALL_FACE_SIDES >() ); + case SHELL_QUAD_4: return m_functor( topology_type< SHELL_QUAD_4 >() ); + case SHELL_QUAD_8: return m_functor( topology_type< SHELL_QUAD_8 >() ); + case SHELL_QUAD_9: return m_functor( topology_type< SHELL_QUAD_9 >() ); + case SHELL_QUAD_4_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_4_ALL_FACE_SIDES >() ); + case SHELL_QUAD_8_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_8_ALL_FACE_SIDES >() ); + case SHELL_QUAD_9_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_9_ALL_FACE_SIDES >() ); + case TET_4: return m_functor( topology_type< TET_4 >() ); + case TET_8: return m_functor( topology_type< TET_8 >() ); + case TET_10: return m_functor( topology_type< TET_10 >() ); + case TET_11: return m_functor( topology_type< TET_11 >() ); + case PYRAMID_5: return m_functor( topology_type< PYRAMID_5 >() ); + case PYRAMID_13: return m_functor( topology_type< PYRAMID_13 >() ); + case PYRAMID_14: return m_functor( topology_type< PYRAMID_14 >() ); + case WEDGE_6: return m_functor( topology_type< WEDGE_6 >() ); + case WEDGE_12: return m_functor( topology_type< WEDGE_12 >() ); + case WEDGE_15: return m_functor( topology_type< WEDGE_15 >() ); + case WEDGE_18: return m_functor( topology_type< WEDGE_18 >() ); + case HEX_8: return m_functor( topology_type< HEX_8 >() ); + case HEX_20: return m_functor( topology_type< HEX_20 >() ); + case HEX_27: return m_functor( topology_type< HEX_27 >() ); default: break; } return m_functor( topology_type() ); @@ -193,54 +205,60 @@ struct topology::apply_functor { switch(t) { - case INVALID_TOPOLOGY: return m_functor( topology_type< INVALID_TOPOLOGY >() ); - case NODE: return m_functor( topology_type< NODE >() ); - case LINE_2: return m_functor( topology_type< LINE_2 >() ); - case LINE_3: return m_functor( topology_type< LINE_3 >() ); - case TRI_3: return m_functor( topology_type< TRI_3 >() ); - case TRI_4: return m_functor( topology_type< TRI_4 >() ); - case TRI_6: return m_functor( topology_type< TRI_6 >() ); - case QUAD_4: return m_functor( topology_type< QUAD_4 >() ); - case QUAD_6: return m_functor( topology_type< QUAD_6 >() ); - case QUAD_8: return m_functor( topology_type< QUAD_8 >() ); - case QUAD_9: return m_functor( topology_type< QUAD_9 >() ); - case PARTICLE: return m_functor( topology_type< PARTICLE >() ); - case LINE_2_1D: return m_functor( topology_type< LINE_2_1D >() ); - case LINE_3_1D: return m_functor( topology_type< LINE_3_1D >() ); - case BEAM_2: return m_functor( topology_type< BEAM_2 >() ); - case BEAM_3: return m_functor( topology_type< BEAM_3 >() ); - case SHELL_LINE_2: return m_functor( topology_type< SHELL_LINE_2 >() ); - case SHELL_LINE_3: return m_functor( topology_type< SHELL_LINE_3 >() ); - case SHELL_SIDE_BEAM_2: return m_functor( topology_type< SHELL_SIDE_BEAM_2 >() ); - case SHELL_SIDE_BEAM_3: return m_functor( topology_type< SHELL_SIDE_BEAM_3 >() ); - case SPRING_2: return m_functor( topology_type< SPRING_2 >() ); - case SPRING_3: return m_functor( topology_type< SPRING_3 >() ); - case TRI_3_2D: return m_functor( topology_type< TRI_3_2D >() ); - case TRI_4_2D: return m_functor( topology_type< TRI_4_2D >() ); - case TRI_6_2D: return m_functor( topology_type< TRI_6_2D >() ); - case QUAD_4_2D: return m_functor( topology_type< QUAD_4_2D >() ); - case QUAD_8_2D: return m_functor( topology_type< QUAD_8_2D >() ); - case QUAD_9_2D: return m_functor( topology_type< QUAD_9_2D >() ); - case SHELL_TRI_3: return m_functor( topology_type< SHELL_TRI_3 >() ); - case SHELL_TRI_4: return m_functor( topology_type< SHELL_TRI_4 >() ); - case SHELL_TRI_6: return m_functor( topology_type< SHELL_TRI_6 >() ); - case SHELL_QUAD_4: return m_functor( topology_type< SHELL_QUAD_4 >() ); - case SHELL_QUAD_8: return m_functor( topology_type< SHELL_QUAD_8 >() ); - case SHELL_QUAD_9: return m_functor( topology_type< SHELL_QUAD_9 >() ); - case TET_4: return m_functor( topology_type< TET_4 >() ); - case TET_8: return m_functor( topology_type< TET_8 >() ); - case TET_10: return m_functor( topology_type< TET_10 >() ); - case TET_11: return m_functor( topology_type< TET_11 >() ); - case PYRAMID_5: return m_functor( topology_type< PYRAMID_5 >() ); - case PYRAMID_13: return m_functor( topology_type< PYRAMID_13 >() ); - case PYRAMID_14: return m_functor( topology_type< PYRAMID_14 >() ); - case WEDGE_6: return m_functor( topology_type< WEDGE_6 >() ); - case WEDGE_12: return m_functor( topology_type< WEDGE_12 >() ); - case WEDGE_15: return m_functor( topology_type< WEDGE_15 >() ); - case WEDGE_18: return m_functor( topology_type< WEDGE_18 >() ); - case HEX_8: return m_functor( topology_type< HEX_8 >() ); - case HEX_20: return m_functor( topology_type< HEX_20 >() ); - case HEX_27: return m_functor( topology_type< HEX_27 >() ); + case INVALID_TOPOLOGY: return m_functor( topology_type< INVALID_TOPOLOGY >() ); + case NODE: return m_functor( topology_type< NODE >() ); + case LINE_2: return m_functor( topology_type< LINE_2 >() ); + case LINE_3: return m_functor( topology_type< LINE_3 >() ); + case TRI_3: return m_functor( topology_type< TRI_3 >() ); + case TRI_4: return m_functor( topology_type< TRI_4 >() ); + case TRI_6: return m_functor( topology_type< TRI_6 >() ); + case QUAD_4: return m_functor( topology_type< QUAD_4 >() ); + case QUAD_6: return m_functor( topology_type< QUAD_6 >() ); + case QUAD_8: return m_functor( topology_type< QUAD_8 >() ); + case QUAD_9: return m_functor( topology_type< QUAD_9 >() ); + case PARTICLE: return m_functor( topology_type< PARTICLE >() ); + case LINE_2_1D: return m_functor( topology_type< LINE_2_1D >() ); + case LINE_3_1D: return m_functor( topology_type< LINE_3_1D >() ); + case BEAM_2: return m_functor( topology_type< BEAM_2 >() ); + case BEAM_3: return m_functor( topology_type< BEAM_3 >() ); + case SHELL_LINE_2: return m_functor( topology_type< SHELL_LINE_2 >() ); + case SHELL_LINE_3: return m_functor( topology_type< SHELL_LINE_3 >() ); + case SHELL_SIDE_BEAM_2: return m_functor( topology_type< SHELL_SIDE_BEAM_2 >() ); + case SHELL_SIDE_BEAM_3: return m_functor( topology_type< SHELL_SIDE_BEAM_3 >() ); + case SPRING_2: return m_functor( topology_type< SPRING_2 >() ); + case SPRING_3: return m_functor( topology_type< SPRING_3 >() ); + case TRI_3_2D: return m_functor( topology_type< TRI_3_2D >() ); + case TRI_4_2D: return m_functor( topology_type< TRI_4_2D >() ); + case TRI_6_2D: return m_functor( topology_type< TRI_6_2D >() ); + case QUAD_4_2D: return m_functor( topology_type< QUAD_4_2D >() ); + case QUAD_8_2D: return m_functor( topology_type< QUAD_8_2D >() ); + case QUAD_9_2D: return m_functor( topology_type< QUAD_9_2D >() ); + case SHELL_TRI_3: return m_functor( topology_type< SHELL_TRI_3 >() ); + case SHELL_TRI_4: return m_functor( topology_type< SHELL_TRI_4 >() ); + case SHELL_TRI_6: return m_functor( topology_type< SHELL_TRI_6 >() ); + case SHELL_TRI_3_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_3_ALL_FACE_SIDES >() ); + case SHELL_TRI_4_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_4_ALL_FACE_SIDES >() ); + case SHELL_TRI_6_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_6_ALL_FACE_SIDES >() ); + case SHELL_QUAD_4: return m_functor( topology_type< SHELL_QUAD_4 >() ); + case SHELL_QUAD_8: return m_functor( topology_type< SHELL_QUAD_8 >() ); + case SHELL_QUAD_9: return m_functor( topology_type< SHELL_QUAD_9 >() ); + case SHELL_QUAD_4_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_4_ALL_FACE_SIDES >() ); + case SHELL_QUAD_8_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_8_ALL_FACE_SIDES >() ); + case SHELL_QUAD_9_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_9_ALL_FACE_SIDES >() ); + case TET_4: return m_functor( topology_type< TET_4 >() ); + case TET_8: return m_functor( topology_type< TET_8 >() ); + case TET_10: return m_functor( topology_type< TET_10 >() ); + case TET_11: return m_functor( topology_type< TET_11 >() ); + case PYRAMID_5: return m_functor( topology_type< PYRAMID_5 >() ); + case PYRAMID_13: return m_functor( topology_type< PYRAMID_13 >() ); + case PYRAMID_14: return m_functor( topology_type< PYRAMID_14 >() ); + case WEDGE_6: return m_functor( topology_type< WEDGE_6 >() ); + case WEDGE_12: return m_functor( topology_type< WEDGE_12 >() ); + case WEDGE_15: return m_functor( topology_type< WEDGE_15 >() ); + case WEDGE_18: return m_functor( topology_type< WEDGE_18 >() ); + case HEX_8: return m_functor( topology_type< HEX_8 >() ); + case HEX_20: return m_functor( topology_type< HEX_20 >() ); + case HEX_27: return m_functor( topology_type< HEX_27 >() ); default: break; } return m_functor( topology_type() ); @@ -251,54 +269,60 @@ struct topology::apply_functor { switch(t) { - case INVALID_TOPOLOGY: return m_functor( topology_type< INVALID_TOPOLOGY >() ); - case NODE: return m_functor( topology_type< NODE >() ); - case LINE_2: return m_functor( topology_type< LINE_2 >() ); - case LINE_3: return m_functor( topology_type< LINE_3 >() ); - case TRI_3: return m_functor( topology_type< TRI_3 >() ); - case TRI_4: return m_functor( topology_type< TRI_4 >() ); - case TRI_6: return m_functor( topology_type< TRI_6 >() ); - case QUAD_4: return m_functor( topology_type< QUAD_4 >() ); - case QUAD_6: return m_functor( topology_type< QUAD_6 >() ); - case QUAD_8: return m_functor( topology_type< QUAD_8 >() ); - case QUAD_9: return m_functor( topology_type< QUAD_9 >() ); - case PARTICLE: return m_functor( topology_type< PARTICLE >() ); - case LINE_2_1D: return m_functor( topology_type< LINE_2_1D >() ); - case LINE_3_1D: return m_functor( topology_type< LINE_3_1D >() ); - case BEAM_2: return m_functor( topology_type< BEAM_2 >() ); - case BEAM_3: return m_functor( topology_type< BEAM_3 >() ); - case SHELL_LINE_2: return m_functor( topology_type< SHELL_LINE_2 >() ); - case SHELL_LINE_3: return m_functor( topology_type< SHELL_LINE_3 >() ); - case SHELL_SIDE_BEAM_2: return m_functor( topology_type< SHELL_SIDE_BEAM_2 >() ); - case SHELL_SIDE_BEAM_3: return m_functor( topology_type< SHELL_SIDE_BEAM_3 >() ); - case SPRING_2: return m_functor( topology_type< SPRING_2 >() ); - case SPRING_3: return m_functor( topology_type< SPRING_3 >() ); - case TRI_3_2D: return m_functor( topology_type< TRI_3_2D >() ); - case TRI_4_2D: return m_functor( topology_type< TRI_4_2D >() ); - case TRI_6_2D: return m_functor( topology_type< TRI_6_2D >() ); - case QUAD_4_2D: return m_functor( topology_type< QUAD_4_2D >() ); - case QUAD_8_2D: return m_functor( topology_type< QUAD_8_2D >() ); - case QUAD_9_2D: return m_functor( topology_type< QUAD_9_2D >() ); - case SHELL_TRI_3: return m_functor( topology_type< SHELL_TRI_3 >() ); - case SHELL_TRI_4: return m_functor( topology_type< SHELL_TRI_4 >() ); - case SHELL_TRI_6: return m_functor( topology_type< SHELL_TRI_6 >() ); - case SHELL_QUAD_4: return m_functor( topology_type< SHELL_QUAD_4 >() ); - case SHELL_QUAD_8: return m_functor( topology_type< SHELL_QUAD_8 >() ); - case SHELL_QUAD_9: return m_functor( topology_type< SHELL_QUAD_9 >() ); - case TET_4: return m_functor( topology_type< TET_4 >() ); - case TET_8: return m_functor( topology_type< TET_8 >() ); - case TET_10: return m_functor( topology_type< TET_10 >() ); - case TET_11: return m_functor( topology_type< TET_11 >() ); - case PYRAMID_5: return m_functor( topology_type< PYRAMID_5 >() ); - case PYRAMID_13: return m_functor( topology_type< PYRAMID_13 >() ); - case PYRAMID_14: return m_functor( topology_type< PYRAMID_14 >() ); - case WEDGE_6: return m_functor( topology_type< WEDGE_6 >() ); - case WEDGE_12: return m_functor( topology_type< WEDGE_12 >() ); - case WEDGE_15: return m_functor( topology_type< WEDGE_15 >() ); - case WEDGE_18: return m_functor( topology_type< WEDGE_18 >() ); - case HEX_8: return m_functor( topology_type< HEX_8 >() ); - case HEX_20: return m_functor( topology_type< HEX_20 >() ); - case HEX_27: return m_functor( topology_type< HEX_27 >() ); + case INVALID_TOPOLOGY: return m_functor( topology_type< INVALID_TOPOLOGY >() ); + case NODE: return m_functor( topology_type< NODE >() ); + case LINE_2: return m_functor( topology_type< LINE_2 >() ); + case LINE_3: return m_functor( topology_type< LINE_3 >() ); + case TRI_3: return m_functor( topology_type< TRI_3 >() ); + case TRI_4: return m_functor( topology_type< TRI_4 >() ); + case TRI_6: return m_functor( topology_type< TRI_6 >() ); + case QUAD_4: return m_functor( topology_type< QUAD_4 >() ); + case QUAD_6: return m_functor( topology_type< QUAD_6 >() ); + case QUAD_8: return m_functor( topology_type< QUAD_8 >() ); + case QUAD_9: return m_functor( topology_type< QUAD_9 >() ); + case PARTICLE: return m_functor( topology_type< PARTICLE >() ); + case LINE_2_1D: return m_functor( topology_type< LINE_2_1D >() ); + case LINE_3_1D: return m_functor( topology_type< LINE_3_1D >() ); + case BEAM_2: return m_functor( topology_type< BEAM_2 >() ); + case BEAM_3: return m_functor( topology_type< BEAM_3 >() ); + case SHELL_LINE_2: return m_functor( topology_type< SHELL_LINE_2 >() ); + case SHELL_LINE_3: return m_functor( topology_type< SHELL_LINE_3 >() ); + case SHELL_SIDE_BEAM_2: return m_functor( topology_type< SHELL_SIDE_BEAM_2 >() ); + case SHELL_SIDE_BEAM_3: return m_functor( topology_type< SHELL_SIDE_BEAM_3 >() ); + case SPRING_2: return m_functor( topology_type< SPRING_2 >() ); + case SPRING_3: return m_functor( topology_type< SPRING_3 >() ); + case TRI_3_2D: return m_functor( topology_type< TRI_3_2D >() ); + case TRI_4_2D: return m_functor( topology_type< TRI_4_2D >() ); + case TRI_6_2D: return m_functor( topology_type< TRI_6_2D >() ); + case QUAD_4_2D: return m_functor( topology_type< QUAD_4_2D >() ); + case QUAD_8_2D: return m_functor( topology_type< QUAD_8_2D >() ); + case QUAD_9_2D: return m_functor( topology_type< QUAD_9_2D >() ); + case SHELL_TRI_3: return m_functor( topology_type< SHELL_TRI_3 >() ); + case SHELL_TRI_4: return m_functor( topology_type< SHELL_TRI_4 >() ); + case SHELL_TRI_6: return m_functor( topology_type< SHELL_TRI_6 >() ); + case SHELL_TRI_3_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_3_ALL_FACE_SIDES >() ); + case SHELL_TRI_4_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_4_ALL_FACE_SIDES >() ); + case SHELL_TRI_6_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_TRI_6_ALL_FACE_SIDES >() ); + case SHELL_QUAD_4: return m_functor( topology_type< SHELL_QUAD_4 >() ); + case SHELL_QUAD_8: return m_functor( topology_type< SHELL_QUAD_8 >() ); + case SHELL_QUAD_9: return m_functor( topology_type< SHELL_QUAD_9 >() ); + case SHELL_QUAD_4_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_4_ALL_FACE_SIDES >() ); + case SHELL_QUAD_8_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_8_ALL_FACE_SIDES >() ); + case SHELL_QUAD_9_ALL_FACE_SIDES: return m_functor( topology_type< SHELL_QUAD_9_ALL_FACE_SIDES >() ); + case TET_4: return m_functor( topology_type< TET_4 >() ); + case TET_8: return m_functor( topology_type< TET_8 >() ); + case TET_10: return m_functor( topology_type< TET_10 >() ); + case TET_11: return m_functor( topology_type< TET_11 >() ); + case PYRAMID_5: return m_functor( topology_type< PYRAMID_5 >() ); + case PYRAMID_13: return m_functor( topology_type< PYRAMID_13 >() ); + case PYRAMID_14: return m_functor( topology_type< PYRAMID_14 >() ); + case WEDGE_6: return m_functor( topology_type< WEDGE_6 >() ); + case WEDGE_12: return m_functor( topology_type< WEDGE_12 >() ); + case WEDGE_15: return m_functor( topology_type< WEDGE_15 >() ); + case WEDGE_18: return m_functor( topology_type< WEDGE_18 >() ); + case HEX_8: return m_functor( topology_type< HEX_8 >() ); + case HEX_20: return m_functor( topology_type< HEX_20 >() ); + case HEX_27: return m_functor( topology_type< HEX_27 >() ); default: break; } return m_functor( topology_type() ); diff --git a/packages/stk/stk_topology/stk_topology/topology.cpp b/packages/stk/stk_topology/stk_topology/topology.cpp index 5977cc282822..ed32cd86f0e8 100644 --- a/packages/stk/stk_topology/stk_topology/topology.cpp +++ b/packages/stk/stk_topology/stk_topology/topology.cpp @@ -67,54 +67,60 @@ const char * topology::char_name() const { switch (m_value) { - case INVALID_TOPOLOGY: return "INVALID_TOPOLOGY"; - case NODE: return "NODE"; - case LINE_2: return "LINE_2"; - case LINE_3: return "LINE_3"; - case SHELL_LINE_2: return "SHELL_LINE_2"; - case SHELL_LINE_3: return "SHELL_LINE_3"; - case TRI_3: return "TRIANGLE_3"; - case TRI_4: return "TRIANGLE_4"; - case TRI_6: return "TRIANGLE_6"; - case QUAD_4: return "QUADRILATERAL_4"; - case QUAD_6: return "QUADRILATERAL_6"; - case QUAD_8: return "QUADRILATERAL_8"; - case QUAD_9: return "QUADRILATERAL_9"; - case SHELL_SIDE_BEAM_2: return "SHELL_SIDE_BEAM_2"; - case SHELL_SIDE_BEAM_3: return "SHELL_SIDE_BEAM_3"; - case PARTICLE: return "PARTICLE"; - case LINE_2_1D: return "LINE_2_1D"; - case LINE_3_1D: return "LINE_3_1D"; - case BEAM_2: return "BEAM_2"; - case BEAM_3: return "BEAM_3"; - case SPRING_2: return "SPRING_2"; - case SPRING_3: return "SPRING_3"; - case TRI_3_2D: return "TRIANGLE_3_2D"; - case TRI_4_2D: return "TRIANGLE_4_2D"; - case TRI_6_2D: return "TRIANGLE_6_2D"; - case QUAD_4_2D: return "QUADRILATERAL_4_2D"; - case QUAD_8_2D: return "QUADRILATERAL_8_2D"; - case QUAD_9_2D: return "QUADRILATERAL_9_2D"; - case SHELL_TRI_3: return "SHELL_TRIANGLE_3"; - case SHELL_TRI_4: return "SHELL_TRIANGLE_4"; - case SHELL_TRI_6: return "SHELL_TRIANGLE_6"; - case SHELL_QUAD_4: return "SHELL_QUADRILATERAL_4"; - case SHELL_QUAD_8: return "SHELL_QUADRILATERAL_8"; - case SHELL_QUAD_9: return "SHELL_QUADRILATERAL_9"; - case TET_4: return "TETRAHEDRON_4"; - case TET_8: return "TETRAHEDRON_8"; - case TET_10: return "TETRAHEDRON_10"; - case TET_11: return "TETRAHEDRON_11"; - case PYRAMID_5: return "PYRAMID_5"; - case PYRAMID_13: return "PYRAMID_13"; - case PYRAMID_14: return "PYRAMID_14"; - case WEDGE_6: return "WEDGE_6"; - case WEDGE_12: return "WEDGE_12"; - case WEDGE_15: return "WEDGE_15"; - case WEDGE_18: return "WEDGE_18"; - case HEX_8: return "HEXAHEDRON_8"; - case HEX_20: return "HEXAHEDRON_20"; - case HEX_27: return "HEXAHEDRON_27"; + case INVALID_TOPOLOGY: return "INVALID_TOPOLOGY"; + case NODE: return "NODE"; + case LINE_2: return "LINE_2"; + case LINE_3: return "LINE_3"; + case SHELL_LINE_2: return "SHELL_LINE_2"; + case SHELL_LINE_3: return "SHELL_LINE_3"; + case TRI_3: return "TRIANGLE_3"; + case TRI_4: return "TRIANGLE_4"; + case TRI_6: return "TRIANGLE_6"; + case QUAD_4: return "QUADRILATERAL_4"; + case QUAD_6: return "QUADRILATERAL_6"; + case QUAD_8: return "QUADRILATERAL_8"; + case QUAD_9: return "QUADRILATERAL_9"; + case SHELL_SIDE_BEAM_2: return "SHELL_SIDE_BEAM_2"; + case SHELL_SIDE_BEAM_3: return "SHELL_SIDE_BEAM_3"; + case PARTICLE: return "PARTICLE"; + case LINE_2_1D: return "LINE_2_1D"; + case LINE_3_1D: return "LINE_3_1D"; + case BEAM_2: return "BEAM_2"; + case BEAM_3: return "BEAM_3"; + case SPRING_2: return "SPRING_2"; + case SPRING_3: return "SPRING_3"; + case TRI_3_2D: return "TRIANGLE_3_2D"; + case TRI_4_2D: return "TRIANGLE_4_2D"; + case TRI_6_2D: return "TRIANGLE_6_2D"; + case QUAD_4_2D: return "QUADRILATERAL_4_2D"; + case QUAD_8_2D: return "QUADRILATERAL_8_2D"; + case QUAD_9_2D: return "QUADRILATERAL_9_2D"; + case SHELL_TRI_3: return "SHELL_TRIANGLE_3"; + case SHELL_TRI_4: return "SHELL_TRIANGLE_4"; + case SHELL_TRI_6: return "SHELL_TRIANGLE_6"; + case SHELL_TRI_3_ALL_FACE_SIDES: return "SHELL_TRIANGLE_3_ALL_FACE_SIDES"; + case SHELL_TRI_4_ALL_FACE_SIDES: return "SHELL_TRIANGLE_4_ALL_FACE_SIDES"; + case SHELL_TRI_6_ALL_FACE_SIDES: return "SHELL_TRIANGLE_6_ALL_FACE_SIDES"; + case SHELL_QUAD_4: return "SHELL_QUADRILATERAL_4"; + case SHELL_QUAD_8: return "SHELL_QUADRILATERAL_8"; + case SHELL_QUAD_9: return "SHELL_QUADRILATERAL_9"; + case SHELL_QUAD_4_ALL_FACE_SIDES: return "SHELL_QUADRILATERAL_4_ALL_FACE_SIDES"; + case SHELL_QUAD_8_ALL_FACE_SIDES: return "SHELL_QUADRILATERAL_8_ALL_FACE_SIDES"; + case SHELL_QUAD_9_ALL_FACE_SIDES: return "SHELL_QUADRILATERAL_9_ALL_FACE_SIDES"; + case TET_4: return "TETRAHEDRON_4"; + case TET_8: return "TETRAHEDRON_8"; + case TET_10: return "TETRAHEDRON_10"; + case TET_11: return "TETRAHEDRON_11"; + case PYRAMID_5: return "PYRAMID_5"; + case PYRAMID_13: return "PYRAMID_13"; + case PYRAMID_14: return "PYRAMID_14"; + case WEDGE_6: return "WEDGE_6"; + case WEDGE_12: return "WEDGE_12"; + case WEDGE_15: return "WEDGE_15"; + case WEDGE_18: return "WEDGE_18"; + case HEX_8: return "HEXAHEDRON_8"; + case HEX_20: return "HEXAHEDRON_20"; + case HEX_27: return "HEXAHEDRON_27"; default: break; } diff --git a/packages/stk/stk_topology/stk_topology/topology_decl.hpp b/packages/stk/stk_topology/stk_topology/topology_decl.hpp index 75f7937c358d..1eba9ead4cff 100644 --- a/packages/stk/stk_topology/stk_topology/topology_decl.hpp +++ b/packages/stk/stk_topology/stk_topology/topology_decl.hpp @@ -83,9 +83,15 @@ struct topology SHELL_TRI_3, SHELL_TRIANGLE_3 = SHELL_TRI_3, SHELL_TRI_4, SHELL_TRIANGLE_4 = SHELL_TRI_4, SHELL_TRI_6, SHELL_TRIANGLE_6 = SHELL_TRI_6, + SHELL_TRI_3_ALL_FACE_SIDES, SHELL_TRIANGLE_3_ALL_FACE_SIDES = SHELL_TRI_3_ALL_FACE_SIDES, + SHELL_TRI_4_ALL_FACE_SIDES, SHELL_TRIANGLE_4_ALL_FACE_SIDES = SHELL_TRI_4_ALL_FACE_SIDES, + SHELL_TRI_6_ALL_FACE_SIDES, SHELL_TRIANGLE_6_ALL_FACE_SIDES = SHELL_TRI_6_ALL_FACE_SIDES, SHELL_QUAD_4, SHELL_QUADRILATERAL_4 = SHELL_QUAD_4, SHELL_QUAD_8, SHELL_QUADRILATERAL_8 = SHELL_QUAD_8, SHELL_QUAD_9, SHELL_QUADRILATERAL_9 = SHELL_QUAD_9, + SHELL_QUAD_4_ALL_FACE_SIDES, SHELL_QUADRILATERAL_4_ALL_FACE_SIDES = SHELL_QUAD_4_ALL_FACE_SIDES, + SHELL_QUAD_8_ALL_FACE_SIDES, SHELL_QUADRILATERAL_8_ALL_FACE_SIDES = SHELL_QUAD_8_ALL_FACE_SIDES, + SHELL_QUAD_9_ALL_FACE_SIDES, SHELL_QUADRILATERAL_9_ALL_FACE_SIDES = SHELL_QUAD_9_ALL_FACE_SIDES, TET_4, TETRAHEDRON_4 = TET_4, TET_8, TETRAHEDRON_8 = TET_8, TET_10, TETRAHEDRON_10 = TET_10, diff --git a/packages/stk/stk_topology/stk_topology/topology_defn.hpp b/packages/stk/stk_topology/stk_topology/topology_defn.hpp index 8e113f69d2e6..201ab5cc41a9 100644 --- a/packages/stk/stk_topology/stk_topology/topology_defn.hpp +++ b/packages/stk/stk_topology/stk_topology/topology_defn.hpp @@ -10,6 +10,21 @@ namespace stk { +namespace impl { + +// Temporary function used to identify the new SHELL_[TRI|QUAD]_ALL_FACE_SIDES +// Will be removed once a proper conversion is available +STK_INLINE_FUNCTION +bool is_temporary_shell_with_all_face_sides(topology::topology_t m_value) { + return (m_value == topology::topology_t::SHELL_QUAD_4_ALL_FACE_SIDES || + m_value == topology::topology_t::SHELL_QUAD_8_ALL_FACE_SIDES || + m_value == topology::topology_t::SHELL_QUAD_9_ALL_FACE_SIDES || + m_value == topology::topology_t::SHELL_TRI_3_ALL_FACE_SIDES || + m_value == topology::topology_t::SHELL_TRI_4_ALL_FACE_SIDES || + m_value == topology::topology_t::SHELL_TRI_6_ALL_FACE_SIDES); +} +} + STK_INLINE_FUNCTION unsigned topology::num_nodes() const { @@ -165,7 +180,8 @@ unsigned topology::num_sides() const if (side_rank() != INVALID_RANK) { num_sides_out = side_rank() > NODE_RANK? num_sub_topology(side_rank()) : num_vertices(); - if (is_shell_with_face_sides()) + if (is_shell_with_face_sides() && + !impl::is_temporary_shell_with_all_face_sides(m_value)) num_sides_out += num_sub_topology(EDGE_RANK); } return num_sides_out; @@ -174,7 +190,7 @@ unsigned topology::num_sides() const STK_INLINE_FUNCTION topology topology::side_topology(unsigned side_ordinal) const { - if (is_shell_side_ordinal(side_ordinal)) + if (is_shell_side_ordinal(side_ordinal) && !impl::is_temporary_shell_with_all_face_sides(m_value)) return shell_side_topology(side_ordinal-num_faces()); return sub_topology(side_rank(), side_ordinal); diff --git a/packages/stk/stk_topology/stk_topology/topology_detail/meta_functions.hpp b/packages/stk/stk_topology/stk_topology/topology_detail/meta_functions.hpp index 545b87ba0353..282b669ae220 100644 --- a/packages/stk/stk_topology/stk_topology/topology_detail/meta_functions.hpp +++ b/packages/stk/stk_topology/stk_topology/topology_detail/meta_functions.hpp @@ -41,6 +41,21 @@ namespace stk::topology_detail { +namespace impl { +// Temporary function used to identify the new SHELL_[TRI|QUAD]_ALL_FACE_SIDES +// Will be removed once a proper conversion is available +template +STK_INLINE_FUNCTION +constexpr bool is_temporary_shell_with_all_face_sides() { + return (Topology::value == topology::SHELL_QUAD_4_ALL_FACE_SIDES || + Topology::value == topology::SHELL_QUAD_8_ALL_FACE_SIDES || + Topology::value == topology::SHELL_QUAD_9_ALL_FACE_SIDES || + Topology::value == topology::SHELL_TRI_3_ALL_FACE_SIDES || + Topology::value == topology::SHELL_TRI_4_ALL_FACE_SIDES || + Topology::value == topology::SHELL_TRI_6_ALL_FACE_SIDES); +} +} + //------------------------------------------------------------------------------ template STK_INLINE_FUNCTION @@ -119,7 +134,8 @@ constexpr topology::topology_t shell_side_topology_() { if constexpr (Topology::is_shell && Topology::dimension == 3 && ShellSideOrdinal < Topology::num_edges) { - return Topology::shell_side_topology_vector[ShellSideOrdinal]; + if constexpr (!impl::is_temporary_shell_with_all_face_sides()) + return Topology::shell_side_topology_vector[ShellSideOrdinal]; } return topology::INVALID_TOPOLOGY; } diff --git a/packages/stk/stk_topology/stk_topology/topology_detail/topology_data.cpp b/packages/stk/stk_topology/stk_topology/topology_detail/topology_data.cpp index a961440390a3..9bedb1ffede3 100644 --- a/packages/stk/stk_topology/stk_topology/topology_detail/topology_data.cpp +++ b/packages/stk/stk_topology/stk_topology/topology_detail/topology_data.cpp @@ -96,90 +96,108 @@ constexpr topology::topology_t topology_data::edge constexpr topology::topology_t topology_data::edge_topology_vector[]; constexpr topology::topology_t topology_data::edge_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; +constexpr topology::topology_t topology_data::face_topology_vector[]; -constexpr topology::topology_t topology_data::shell_side_topology_vector[]; -constexpr topology::topology_t topology_data::shell_side_topology_vector[]; -constexpr topology::topology_t topology_data::shell_side_topology_vector[]; -constexpr topology::topology_t topology_data::shell_side_topology_vector[]; -constexpr topology::topology_t topology_data::shell_side_topology_vector[]; -constexpr topology::topology_t topology_data::shell_side_topology_vector[]; +constexpr topology::topology_t topology_data::shell_side_topology_vector[]; +constexpr topology::topology_t topology_data::shell_side_topology_vector[]; +constexpr topology::topology_t topology_data::shell_side_topology_vector[]; +constexpr topology::topology_t topology_data::shell_side_topology_vector[]; +constexpr topology::topology_t topology_data::shell_side_topology_vector[]; +constexpr topology::topology_t topology_data::shell_side_topology_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; +constexpr uint8_t topology_data::face_node_ordinals_offsets[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; -constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; +constexpr uint8_t topology_data::face_node_ordinals_vector[]; constexpr uint8_t topology_data::edge_node_ordinals_offsets[]; constexpr uint8_t topology_data::edge_node_ordinals_offsets[]; diff --git a/packages/stk/stk_topology/stk_topology/topology_detail/topology_data.hpp b/packages/stk/stk_topology/stk_topology/topology_detail/topology_data.hpp index 7e2c416711f7..ce22512c7afe 100644 --- a/packages/stk/stk_topology/stk_topology/topology_detail/topology_data.hpp +++ b/packages/stk/stk_topology/stk_topology/topology_detail/topology_data.hpp @@ -829,6 +829,89 @@ struct topology_data 0, 2, 1, 5, 4, 3}; }; +//*************************************************************************** + +template <> +struct topology_data + : public topology_data +{ + static constexpr topology::topology_t value = topology::SHELL_TRI_3_ALL_FACE_SIDES; + static constexpr topology::topology_t base = topology::SHELL_TRI_3_ALL_FACE_SIDES; + static constexpr topology::topology_t face_topology_vector[] = {topology::TRI_3, + topology::TRI_3, + topology::SHELL_SIDE_BEAM_2, + topology::SHELL_SIDE_BEAM_2, + topology::SHELL_SIDE_BEAM_2}; + + static constexpr topology::rank_t rank = topology::ELEMENT_RANK; + static constexpr topology::rank_t side_rank = topology::FACE_RANK; + static constexpr bool is_shell = true; + static constexpr bool has_homogeneous_faces = true; + static constexpr uint8_t dimension = 3; + static constexpr uint8_t num_faces = 5; + + static constexpr uint8_t face_node_ordinals_offsets[] = {0, 3, 6, 8, 10, 12}; + static constexpr uint8_t face_node_ordinals_vector[] = {0, 1, 2, + 0, 2, 1, + 0, 1, + 1, 2, + 2, 0}; +}; + +template <> +struct topology_data + : public topology_data +{ + static constexpr topology::topology_t value = topology::SHELL_TRI_4_ALL_FACE_SIDES; + static constexpr topology::topology_t base = topology::SHELL_TRI_3_ALL_FACE_SIDES; + static constexpr topology::topology_t face_topology_vector[] = {topology::TRI_4, + topology::TRI_4, + topology::SHELL_SIDE_BEAM_2, + topology::SHELL_SIDE_BEAM_2, + topology::SHELL_SIDE_BEAM_2}; + + static constexpr topology::rank_t rank = topology::ELEMENT_RANK; + static constexpr topology::rank_t side_rank = topology::FACE_RANK; + static constexpr bool is_shell = true; + static constexpr bool has_homogeneous_faces = true; + static constexpr uint8_t dimension = 3; + static constexpr uint8_t num_faces = 5; + + static constexpr uint8_t face_node_ordinals_offsets[] = {0, 4, 8, 10, 12, 14}; + static constexpr uint8_t face_node_ordinals_vector[] = {0, 1, 2, 3, + 0, 2, 1, 3, + 0, 1, + 1, 2, + 2, 0}; +}; + +template <> +struct topology_data + : public topology_data +{ + static constexpr topology::topology_t value = topology::SHELL_TRI_6_ALL_FACE_SIDES; + static constexpr topology::topology_t base = topology::SHELL_TRI_3_ALL_FACE_SIDES; + static constexpr topology::topology_t face_topology_vector[] = {topology::TRI_6, + topology::TRI_6, + topology::SHELL_SIDE_BEAM_3, + topology::SHELL_SIDE_BEAM_3, + topology::SHELL_SIDE_BEAM_3}; + + static constexpr topology::rank_t rank = topology::ELEMENT_RANK; + static constexpr topology::rank_t side_rank = topology::FACE_RANK; + static constexpr bool is_shell = true; + static constexpr bool has_homogeneous_faces = true; + static constexpr uint8_t dimension = 3; + static constexpr uint8_t num_faces = 5; + + static constexpr uint8_t face_node_ordinals_offsets[] = {0, 6, 12, 15, 18, 21}; + static constexpr uint8_t face_node_ordinals_vector[] = {0, 1, 2, 3, 4, 5, + 0, 2, 1, 5, 4, 3, + 0, 1, 3, + 1, 2, 4, + 2, 0, 5}; +}; + //*************************************************************************** // topology::QUADRILATERAL -- topology::FACE_RANK // defined on spatial dimension 3d @@ -1151,6 +1234,94 @@ struct topology_data 0, 3, 2, 1, 7, 6, 5, 4, 8}; }; +//*************************************************************************** + +template <> +struct topology_data + : public topology_data +{ + static constexpr topology::topology_t value = topology::SHELL_QUAD_4_ALL_FACE_SIDES; + static constexpr topology::topology_t base = topology::SHELL_QUAD_4_ALL_FACE_SIDES; + static constexpr topology::topology_t face_topology_vector[] = {topology::QUAD_4, + topology::QUAD_4, + topology::SHELL_SIDE_BEAM_2, + topology::SHELL_SIDE_BEAM_2, + topology::SHELL_SIDE_BEAM_2, + topology::SHELL_SIDE_BEAM_2}; + + static constexpr topology::rank_t rank = topology::ELEMENT_RANK; + static constexpr topology::rank_t side_rank = topology::FACE_RANK; + static constexpr bool is_shell = true; + static constexpr bool has_homogeneous_faces = true; + static constexpr uint8_t dimension = 3; + static constexpr uint8_t num_faces = 6; + + static constexpr uint8_t face_node_ordinals_offsets[] = {0, 4, 8, 10, 12, 14, 16}; + static constexpr uint8_t face_node_ordinals_vector[] = {0, 1, 2, 3, + 0, 3, 2, 1, + 0, 1, + 1, 2, + 2, 3, + 3, 0}; +}; + +template <> +struct topology_data + : public topology_data +{ + static constexpr topology::topology_t value = topology::SHELL_QUAD_8_ALL_FACE_SIDES; + static constexpr topology::topology_t base = topology::SHELL_QUAD_4_ALL_FACE_SIDES; + static constexpr topology::topology_t face_topology_vector[] = {topology::QUAD_8, + topology::QUAD_8, + topology::SHELL_SIDE_BEAM_3, + topology::SHELL_SIDE_BEAM_3, + topology::SHELL_SIDE_BEAM_3, + topology::SHELL_SIDE_BEAM_3}; + static constexpr topology::rank_t rank = topology::ELEMENT_RANK; + static constexpr topology::rank_t side_rank = topology::FACE_RANK; + static constexpr bool is_shell = true; + static constexpr bool has_homogeneous_faces = true; + static constexpr uint8_t dimension = 3; + static constexpr uint8_t num_faces = 6; + + static constexpr uint8_t face_node_ordinals_offsets[] = {0, 8, 16, 19, 22, 25, 28}; + static constexpr uint8_t face_node_ordinals_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, + 0, 3, 2, 1, 7, 6, 5, 4, + 0, 1, 4, + 1, 2, 5, + 2, 3, 6, + 3, 0, 7}; +}; + +template <> +struct topology_data + : public topology_data +{ + static constexpr topology::topology_t value = topology::SHELL_QUAD_9_ALL_FACE_SIDES; + static constexpr topology::topology_t base = topology::SHELL_QUAD_4_ALL_FACE_SIDES; + static constexpr topology::topology_t face_topology_vector[] = {topology::QUAD_9, + topology::QUAD_9, + topology::SHELL_SIDE_BEAM_3, + topology::SHELL_SIDE_BEAM_3, + topology::SHELL_SIDE_BEAM_3, + topology::SHELL_SIDE_BEAM_3}; + + static constexpr topology::rank_t rank = topology::ELEMENT_RANK; + static constexpr topology::rank_t side_rank = topology::FACE_RANK; + static constexpr bool is_shell = true; + static constexpr bool has_homogeneous_faces = true; + static constexpr uint8_t dimension = 3; + static constexpr uint8_t num_faces = 6; + + static constexpr uint8_t face_node_ordinals_offsets[] = {0, 9, 18, 21, 24, 27, 30}; + static constexpr uint8_t face_node_ordinals_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, + 0, 3, 2, 1, 7, 6, 5, 4, 8, + 0, 1, 4, + 1, 2, 5, + 2, 3, 6, + 3, 0, 7}; +}; + //*************************************************************************** // topology::TETRAHEDRON //*************************************************************************** diff --git a/packages/stk/stk_topology/stk_topology/types.hpp b/packages/stk/stk_topology/stk_topology/types.hpp index 897427e94c7f..282678530d84 100644 --- a/packages/stk/stk_topology/stk_topology/types.hpp +++ b/packages/stk/stk_topology/stk_topology/types.hpp @@ -39,50 +39,53 @@ namespace stk { struct topology::types { - typedef topology_type node; - typedef topology_type line_2; - typedef topology_type line_3; - typedef topology_type tri_3; - typedef topology_type tri_4; - typedef topology_type tri_6; - typedef topology_type quad_4; - typedef topology_type quad_6; - typedef topology_type quad_8; - typedef topology_type quad_9; - typedef topology_type particle; - typedef topology_type line_2_1d; - typedef topology_type line_3_1d; - typedef topology_type beam_2; - typedef topology_type beam_3; - typedef topology_type shell_line_2; - typedef topology_type shell_line_3; - typedef topology_type shell_side_beam_2; - typedef topology_type shell_side_beam_3; - typedef topology_type tri_3_2d; - typedef topology_type tri_4_2d; - typedef topology_type tri_6_2d; - typedef topology_type quad_4_2d; - typedef topology_type quad_8_2d; - typedef topology_type quad_9_2d; - typedef topology_type shell_tri_3; - typedef topology_type shell_tri_4; - typedef topology_type shell_tri_6; - typedef topology_type shell_quad_4; - typedef topology_type shell_quad_8; - typedef topology_type shell_quad_9; - typedef topology_type tet_4; - typedef topology_type tet_8; - typedef topology_type tet_10; - typedef topology_type tet_11; - typedef topology_type pyramid_5; - typedef topology_type pyramid_13; - typedef topology_type pyramid_14; - typedef topology_type wedge_6; - typedef topology_type wedge_15; - typedef topology_type wedge_18; - typedef topology_type hex_8; - typedef topology_type hex_20; - typedef topology_type hex_27; + typedef topology_type node; + typedef topology_type line_2; + typedef topology_type line_3; + typedef topology_type tri_3; + typedef topology_type tri_4; + typedef topology_type tri_6; + typedef topology_type quad_4; + typedef topology_type quad_6; + typedef topology_type quad_8; + typedef topology_type quad_9; + typedef topology_type particle; + typedef topology_type line_2_1d; + typedef topology_type line_3_1d; + typedef topology_type beam_2; + typedef topology_type beam_3; + typedef topology_type shell_line_2; + typedef topology_type shell_line_3; + typedef topology_type shell_side_beam_2; + typedef topology_type shell_side_beam_3; + typedef topology_type tri_3_2d; + typedef topology_type tri_4_2d; + typedef topology_type tri_6_2d; + typedef topology_type quad_4_2d; + typedef topology_type quad_8_2d; + typedef topology_type quad_9_2d; + typedef topology_type shell_tri_3; + typedef topology_type shell_tri_4; + typedef topology_type shell_tri_6; + typedef topology_type shell_quad_4; + typedef topology_type shell_quad_8; + typedef topology_type shell_quad_9; + typedef topology_type shell_quad_4_all_face_sides; + typedef topology_type shell_quad_8_all_face_sides; + typedef topology_type shell_quad_9_all_face_sides; + typedef topology_type tet_4; + typedef topology_type tet_8; + typedef topology_type tet_10; + typedef topology_type tet_11; + typedef topology_type pyramid_5; + typedef topology_type pyramid_13; + typedef topology_type pyramid_14; + typedef topology_type wedge_6; + typedef topology_type wedge_15; + typedef topology_type wedge_18; + typedef topology_type hex_8; + typedef topology_type hex_20; + typedef topology_type hex_27; }; } //namespace stk diff --git a/packages/stk/stk_unit_test_utils/stk_unit_test_utils/FaceTestingUtils.cpp b/packages/stk/stk_unit_test_utils/stk_unit_test_utils/FaceTestingUtils.cpp index f4cd44f56fb9..9ed6dc3d92ef 100644 --- a/packages/stk/stk_unit_test_utils/stk_unit_test_utils/FaceTestingUtils.cpp +++ b/packages/stk/stk_unit_test_utils/stk_unit_test_utils/FaceTestingUtils.cpp @@ -84,7 +84,7 @@ bool is_face_fully_connected(const stk::mesh::BulkData& mesh, stk::mesh::Entity bool fully_connected_elements_to_faces(const stk::mesh::BulkData& bulk) { bool fully_connected = true; - stk::mesh::for_each_entity_run(bulk, stk::topology::ELEMENT_RANK, + stk::mesh::for_each_entity_run_no_threads(bulk, stk::topology::ELEMENT_RANK, [&fully_connected](const stk::mesh::BulkData& mesh, stk::mesh::Entity elem) { fully_connected &= is_face_fully_connected(mesh, elem); @@ -121,7 +121,7 @@ bool is_face_shared_between_different_elements(const stk::mesh::BulkData& mesh, unsigned count_shared_faces_between_different_elements(const stk::mesh::BulkData& bulk) { unsigned shared_face_count = 0; - stk::mesh::for_each_entity_run(bulk, stk::topology::FACE_RANK, + stk::mesh::for_each_entity_run_no_threads(bulk, stk::topology::FACE_RANK, [&shared_face_count](const stk::mesh::BulkData& mesh, stk::mesh::Entity face) { if (is_face_shared_between_different_elements(mesh, face)) @@ -159,7 +159,7 @@ bool is_face_shared_between_same_element(const stk::mesh::BulkData& mesh, stk::m unsigned count_shared_faces_between_same_element(const stk::mesh::BulkData& bulk) { unsigned shared_face_count = 0; - stk::mesh::for_each_entity_run(bulk, stk::topology::FACE_RANK, + stk::mesh::for_each_entity_run_no_threads(bulk, stk::topology::FACE_RANK, [&shared_face_count](const stk::mesh::BulkData& mesh, stk::mesh::Entity face) { if (is_face_shared_between_same_element(mesh,face)) @@ -202,7 +202,7 @@ bool is_face_at_x_equal_half(const stk::mesh::BulkData& mesh, stk::mesh::Entity stk::mesh::EntityVector get_faces_at_x_equal_half(const stk::mesh::BulkData& bulk) { stk::mesh::EntityVector faces_at_x_equal_half; - stk::mesh::for_each_entity_run(bulk, stk::topology::FACE_RANK, + stk::mesh::for_each_entity_run_no_threads(bulk, stk::topology::FACE_RANK, [&faces_at_x_equal_half](const stk::mesh::BulkData& mesh, stk::mesh::Entity face) { if (is_face_at_x_equal_half(mesh, face)) @@ -281,7 +281,7 @@ unsigned read_file_count_sides(std::string filename) bool fully_connected_elements_to_faces(const stk::mesh::BulkData& bulk) { bool fully_connected = true; - stk::mesh::for_each_entity_run(bulk, stk::topology::ELEMENT_RANK, + stk::mesh::for_each_entity_run_no_threads(bulk, stk::topology::ELEMENT_RANK, [&fully_connected](const stk::mesh::BulkData& mesh, stk::mesh::Entity elem) { fully_connected &= is_face_fully_connected(mesh, elem); @@ -308,7 +308,7 @@ unsigned read_file_fully_connected_stk(std::string filename) unsigned count_shared_faces_between_different_elements(const stk::mesh::BulkData& bulk) { unsigned shared_face_count = 0; - stk::mesh::for_each_entity_run(bulk, stk::topology::FACE_RANK, + stk::mesh::for_each_entity_run_no_threads(bulk, stk::topology::FACE_RANK, [&shared_face_count](const stk::mesh::BulkData& mesh, stk::mesh::Entity face) { if (::is_face_shared_between_different_elements(mesh, face)) @@ -336,7 +336,7 @@ unsigned read_file_shared_faces_different_elements_stk(std::string filename) unsigned count_shared_faces_between_same_element(const stk::mesh::BulkData& bulk) { unsigned shared_face_count = 0; - stk::mesh::for_each_entity_run(bulk, stk::topology::FACE_RANK, + stk::mesh::for_each_entity_run_no_threads(bulk, stk::topology::FACE_RANK, [&shared_face_count](const stk::mesh::BulkData& mesh, stk::mesh::Entity face) { if (::is_face_shared_between_same_element(mesh,face)) diff --git a/packages/stk/stk_unit_test_utils/stk_unit_test_utils/getOption.h b/packages/stk/stk_unit_test_utils/stk_unit_test_utils/getOption.h index 6b6909bf4997..0a656cc57b52 100644 --- a/packages/stk/stk_unit_test_utils/stk_unit_test_utils/getOption.h +++ b/packages/stk/stk_unit_test_utils/stk_unit_test_utils/getOption.h @@ -75,4 +75,3 @@ T get_command_line_option(const std::string &option, const T &defaultValue) { } #endif - diff --git a/packages/stk/stk_unit_tests/stk_expreval/UnitTestEvaluator.cpp b/packages/stk/stk_unit_tests/stk_expreval/UnitTestEvaluator.cpp index ea98a54d788d..fe69dbaca5c5 100644 --- a/packages/stk/stk_unit_tests/stk_expreval/UnitTestEvaluator.cpp +++ b/packages/stk/stk_unit_tests/stk_expreval/UnitTestEvaluator.cpp @@ -1159,7 +1159,7 @@ TEST(UnitTestEvaluator, testFunctionSyntax) EXPECT_TRUE(isValidFunction("sin(1)")); EXPECT_TRUE(isValidFunction("SIN(1)")); EXPECT_TRUE(isValidFunction("rand()")); - EXPECT_TRUE(isValidFunction("srand()")); + EXPECT_TRUE(isValidFunction("srand(1)")); EXPECT_TRUE(isValidFunction("time()")); EXPECT_TRUE(isValidFunction("random()")); EXPECT_TRUE(isValidFunction("random(1)")); @@ -1175,6 +1175,43 @@ TEST(UnitTestEvaluator, testFunctionSyntax) EXPECT_TRUE(isInvalidFunction("gamma(1)")); } +class OneArgFunction : public stk::expreval::CFunctionBase +{ + public: + explicit OneArgFunction() : + CFunctionBase(1) + {} + + double operator()(int argc, const double * argv) override + { + STK_ThrowRequire(argc == 1); + return argv[0]; + } +}; + +TEST(UnitTestEvaluator, testFunctionArgumentCountCheck) +{ + stk::expreval::addFunction("my_function", new OneArgFunction()); + EXPECT_TRUE(isValidFunction("my_function(1)")); + EXPECT_TRUE(isInvalidFunction("my_function(1, 2)")); +} + +TEST(UnitTestEvaluator, testParsedEvalNoUserDefinedFunctions) +{ + stk::expreval::addFunction("my_function", new OneArgFunction()); + stk::expreval::Eval eval("my_function(1)"); + EXPECT_ANY_THROW(eval.get_parsed_eval().check_for_errors(false)); + EXPECT_ANY_THROW(eval.get_parsed_eval().check_for_errors(true)); +} + +TEST(UnitTestEvaluator, testParsedEvalNoRandom) +{ + stk::expreval::Eval eval("rand()"); + EXPECT_ANY_THROW(eval.get_parsed_eval().check_for_errors(false)); + EXPECT_ANY_THROW(eval.get_parsed_eval().check_for_errors(true)); +} + + #if !defined(STK_ENABLE_GPU) && !defined(KOKKOS_ENABLE_SYCL) && !defined(KOKKOS_ENABLE_OPENMP) TEST(UnitTestEvaluator, deviceVariableMap_too_small) { diff --git a/packages/stk/stk_unit_tests/stk_mesh/CMakeLists.txt b/packages/stk/stk_unit_tests/stk_mesh/CMakeLists.txt index dbd6c77761de..e5ad470e6aef 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/CMakeLists.txt +++ b/packages/stk/stk_unit_tests/stk_mesh/CMakeLists.txt @@ -106,6 +106,7 @@ LIST(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/UnitTest3Tets3Procs.cpp") LIST(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/change_parts/CustomGhostEntities.cpp") LIST(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/entitySorting/UnitTestEntitySorting.cpp") LIST(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/edge_creation/UnitTestEdgeConnection.cpp") +LIST(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/edge_creation/UnitTestEdgesOnFaces.cpp") LIST(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/face_creation/FaceCreatorFixture.cpp") LIST(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/face_creation/TwoHexesTwoProcs.cpp") LIST(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/face_creation/TwoHexesTwoProcsEGWithPermutations.cpp") diff --git a/packages/stk/stk_unit_tests/stk_mesh/UnitTestBulkData.cpp b/packages/stk/stk_unit_tests/stk_mesh/UnitTestBulkData.cpp index 0e50a4221bea..8c14ba656f71 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/UnitTestBulkData.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/UnitTestBulkData.cpp @@ -2768,11 +2768,8 @@ TEST(BulkData, newSharedNodeGetMergedPartsFromElements) TEST(BulkData, mayCreateRelationsToNodesDifferently) { stk::ParallelMachine communicator = MPI_COMM_WORLD; - int numProcs = stk::parallel_machine_size(communicator); - if(numProcs != 2) - { - return; - } + const int numProcs = stk::parallel_machine_size(communicator); + if(numProcs != 2) { GTEST_SKIP(); } stk::io::StkMeshIoBroker stkMeshIoBroker(communicator); const std::string generatedMeshSpecification = "generated:1x1x2"; @@ -2827,7 +2824,9 @@ TEST(BulkData, mayCreateRelationsToNodesDifferently) { stkMeshBulkData.declare_relation(element1, filler_node, filler_rel_id); } - }EXPECT_NO_THROW( stkMeshBulkData.modification_end()); + } + EXPECT_NO_THROW( stkMeshBulkData.modification_end()); + { stk::mesh::Bucket & nodeBucket = stkMeshBulkData.bucket(sharedNode0); EXPECT_TRUE( nodeBucket.member(partA)); @@ -2846,8 +2845,8 @@ TEST(BulkData, mayCreateRelationsToNodesDifferently) { stk::mesh::RelationIdentifier node_rel_id = 1; stkMeshBulkData.declare_relation(element1, sharedNode1, node_rel_id); - - }EXPECT_NO_THROW( stkMeshBulkData.modification_end()); + } + EXPECT_NO_THROW( stkMeshBulkData.modification_end()); { stk::mesh::Bucket & nodeBucket = stkMeshBulkData.bucket(sharedNode1); diff --git a/packages/stk/stk_unit_tests/stk_mesh/UnitTestMetaData.cpp b/packages/stk/stk_unit_tests/stk_mesh/UnitTestMetaData.cpp index cc4b335fcf74..3cfccd81b1d8 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/UnitTestMetaData.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/UnitTestMetaData.cpp @@ -506,7 +506,7 @@ TEST(UnitTestMetaData, InconsistentParallelDebugCheck_BadPartSubset) meta.declare_part_subset(part_1, part_2); } - STK_EXPECT_THROW_MSG(bulk.modification_begin(), bulk.parallel_rank(), 1, "[p1] Part part_1 subset ordinals (41 ) does not match Part part_1 subset ordinals () on root processor\n"); + STK_EXPECT_THROW_MSG(bulk.modification_begin(), bulk.parallel_rank(), 1, "[p1] Part part_1 subset ordinals (46 ) does not match Part part_1 subset ordinals () on root processor\n"); } TEST(UnitTestMetaData, InconsistentParallelDebugCheck_BadNumberOfParts_RootTooFew) diff --git a/packages/stk/stk_unit_tests/stk_mesh/UnitTestSideSet.cpp b/packages/stk/stk_unit_tests/stk_mesh/UnitTestSideSet.cpp index 02a3a3f3d0b4..3486f87b50b9 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/UnitTestSideSet.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/UnitTestSideSet.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -1468,6 +1469,103 @@ TEST_F(ParallelCoincidence, checkParallelNonCoincidenceWithElemElemGraph) } } +TEST(DeclareElementSide, baseScenario_sidesBetweenTwoTriangles) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) > 1) { GTEST_SKIP(); } + + std::shared_ptr bulk = stk::mesh::MeshBuilder(MPI_COMM_WORLD) + .set_spatial_dimension(2).create(); + stk::mesh::Part& mySidePart = bulk->mesh_meta_data().declare_part("mySidePart"); + std::string meshDesc = + "0,1,TRI_3_2D,1,2,3,block_1\n" + "0,2,TRI_3_2D,2,4,3,block_1\n" + "|dimension:2"; + + std::vector coords = {0,0, 0,1, 1,0, 1,1}; + + stk::unit_test_util::setup_text_mesh(*bulk, stk::unit_test_util::get_full_text_mesh_desc(meshDesc, coords)); + + const stk::mesh::MetaData& meta = bulk->mesh_meta_data(); + EXPECT_EQ(0u, stk::mesh::count_entities(*bulk, meta.side_rank(), meta.universal_part())); + + stk::mesh::Entity elem1 = bulk->get_entity(stk::topology::ELEM_RANK, 1); + stk::mesh::Entity elem2 = bulk->get_entity(stk::topology::ELEM_RANK, 2); + + stk::mesh::PartVector parts = {&mySidePart}; + stk::mesh::Entity side11, side22; + { + bulk->modification_begin(); + side11 = bulk->declare_element_side(elem1, 1, parts); + side22 = bulk->declare_element_side(elem2, 2, parts); + bulk->modification_end(); + } + + EXPECT_EQ(1u, stk::mesh::count_entities(*bulk, meta.side_rank(), meta.universal_part())); +} + +TEST(DeclareElementSide, destroyElemAndReconnectElem_sidesBetweenTwoTriangles) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) > 1) { GTEST_SKIP(); } + + std::shared_ptr bulk = stk::mesh::MeshBuilder(MPI_COMM_WORLD) + .set_spatial_dimension(2).create(); + stk::mesh::Part& mySidePart = bulk->mesh_meta_data().declare_part("mySidePart"); + std::string meshDesc = + "0,1,TRI_3_2D,1,2,3,block_1\n" + "0,2,TRI_3_2D,2,4,3,block_1\n" + "0,3,TRI_3_2D,1,3,5,block_1\n" + "0,4,TRI_3_2D,2,6,4,block_1\n" + "|dimension:2"; + + std::vector coords = {0,0, 0,1, 1,0, 1,1, -0.5,0.5, 1.5,0.5}; + + stk::unit_test_util::setup_text_mesh(*bulk, stk::unit_test_util::get_full_text_mesh_desc(meshDesc, coords)); + + const stk::mesh::MetaData& meta = bulk->mesh_meta_data(); + EXPECT_EQ(0u, stk::mesh::count_entities(*bulk, meta.side_rank(), meta.universal_part())); + + stk::mesh::Entity elem1 = bulk->get_entity(stk::topology::ELEM_RANK, 1); + stk::mesh::Entity elem2 = bulk->get_entity(stk::topology::ELEM_RANK, 2); + + stk::mesh::PartVector parts = {&mySidePart}; + stk::mesh::Entity side11, side22, side42; + { + bulk->modification_begin(); + side11 = bulk->declare_element_side(elem1, 1, parts); + side22 = bulk->declare_element_side(elem2, 2, parts); + bulk->modification_end(); + } + + EXPECT_EQ(1u, stk::mesh::count_entities(*bulk, meta.side_rank(), meta.universal_part())); + + //now we simulate a "collapse-edge" scenario from the NGS team: + //element 2 is between elements 1 and 4. We delete element 2 and + //reconnect element 4 (disconnect node 4 and connect to node 3) so + //that elements 1 and 4 should now share a "graph edge" in stk-mesh's + //elem-elem-graph. + stk::mesh::Entity elem4 = bulk->get_entity(stk::topology::ELEM_RANK, 4); + { + bulk->modification_begin(); + EXPECT_TRUE(bulk->destroy_entity(elem2)); + stk::mesh::Entity node4 = bulk->get_entity(stk::topology::NODE_RANK, 4); + EXPECT_TRUE(bulk->destroy_relation(elem4, node4, 2)); + stk::mesh::Entity node3 = bulk->get_entity(stk::topology::NODE_RANK, 3); + bulk->declare_relation(elem4, node3, 2); + bulk->modification_end(); + } + + { + bulk->modification_begin(); + side11 = bulk->declare_element_side(elem1, 1, parts); + side42 = bulk->declare_element_side(elem4, 2, parts); + bulk->modification_end(); + } + + //if the elem-elem-graph correctly knows that elements 1 and 4 share a + //graph edge, then there should still be just 1 side between them. + EXPECT_EQ(1u, stk::mesh::count_entities(*bulk, meta.side_rank(), meta.universal_part())); +} + TEST(Skinning, createSidesForBlock) { if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) { GTEST_SKIP(); } diff --git a/packages/stk/stk_unit_tests/stk_mesh/edge_creation/UnitTestEdgesOnFaces.cpp b/packages/stk/stk_unit_tests/stk_mesh/edge_creation/UnitTestEdgesOnFaces.cpp new file mode 100644 index 000000000000..3d53819941ea --- /dev/null +++ b/packages/stk/stk_unit_tests/stk_mesh/edge_creation/UnitTestEdgesOnFaces.cpp @@ -0,0 +1,385 @@ +// Copyright 2002 - 2008, 2010, 2011 National Technology Engineering +// Solutions of Sandia, LLC (NTESS). Under the terms of Contract +// DE-NA0003525 with NTESS, the U.S. Government retains certain rights +// in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// * Neither the name of NTESS nor the names of its contributors +// may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "gtest/gtest.h" +#include "stk_mesh/base/CreateEdges.hpp" +#include "stk_mesh/base/GetEntities.hpp" +#include "stk_mesh/base/MeshBuilder.hpp" +#include "stk_mesh/base/BulkData.hpp" +#include "stk_mesh/base/MetaData.hpp" +#include "stk_io/FillMesh.hpp" +#include "stk_util/parallel/ParallelReduce.hpp" + +namespace { + +class EdgesOnFacesFixture : public ::testing::Test +{ + public: + void setup(const std::string& meshSpec, bool enable_aura=true) + { + stk::mesh::MeshBuilder builder(stk::parallel_machine_world()); + builder.set_aura_option(enable_aura ? stk::mesh::BulkData::AUTO_AURA : stk::mesh::BulkData::NO_AUTO_AURA); + bulk = builder.create(); + + stk::io::fill_mesh(meshSpec, *bulk); + + stk::mesh::get_entities(*bulk, stk::topology::FACE_RANK, bulk->mesh_meta_data().locally_owned_part(), + ownedFaces); + + surfaceSelector = stk::mesh::Selector(*(bulk->get_sidesets()[0]->get_part())); + } + + std::shared_ptr bulk; + stk::mesh::EntityVector ownedFaces; + stk::mesh::Selector surfaceSelector; +}; + +std::pair countEdges(stk::mesh::BulkData& bulk, const stk::mesh::Selector& selector) +{ + int edgesInSelector = stk::mesh::count_entities(bulk, stk::topology::EDGE_RANK, + selector & bulk.mesh_meta_data().locally_owned_part()); + + int totalEdges = stk::mesh::count_entities(bulk, stk::topology::EDGE_RANK, + bulk.mesh_meta_data().locally_owned_part()); + + std::array edgeCountsLocal = {edgesInSelector, totalEdges}, edgeCountsGlobal; + stk::all_reduce_sum(stk::parallel_machine_world(), edgeCountsLocal.data(), edgeCountsGlobal.data(), 2); + + return std::make_pair(edgeCountsGlobal[0], edgeCountsGlobal[1]); +} + +void test_faces_have_edges(stk::mesh::BulkData& bulk, const std::vector& faces, + int numExpectedEdgesPerFace) +{ + for (stk::mesh::Entity face : faces) + { + stk::mesh::Entity const* beginEdges = bulk.begin_edges(face); + stk::mesh::Entity const* endEdges = bulk.end_edges(face); + ptrdiff_t numEdges = endEdges - beginEdges; + + EXPECT_EQ(numEdges, numExpectedEdgesPerFace); + for (int i=0; i < numEdges; ++i) + { + for (int j=0; j < numEdges; ++j) + { + if (i != j) + { + EXPECT_NE(beginEdges[i], beginEdges[j]); + } + } + } + } +} + +void test_third_node_is_midpoint(stk::mesh::BulkData& bulk) +{ + std::vector edgeNodes; + std::vector> edgeNodeCoords; + const stk::mesh::FieldBase* coordField = bulk.mesh_meta_data().coordinate_field(); + + for (stk::mesh::Bucket* bucket : bulk.buckets(stk::topology::EDGE_RANK)) + { + for (stk::mesh::Entity edge : *bucket) + { + edgeNodes.clear(); + for (stk::mesh::Entity const* node = bulk.begin_nodes(edge); node != bulk.end_nodes(edge); ++node) + { + edgeNodes.push_back(*node); + double* coordData = static_cast(stk::mesh::field_data(*coordField, *node)); + edgeNodeCoords.emplace_back(std::array{coordData[0], coordData[1], coordData[2]}); + } + + EXPECT_EQ(edgeNodes.size(), 3U); + for (int i=0; i < 3; ++i) + { + EXPECT_FLOAT_EQ(edgeNodeCoords[2][i], 0.5*(edgeNodeCoords[0][i] + edgeNodeCoords[1][i])); + } + } + } + +} + +} + +TEST_F(EdgesOnFacesFixture, Hex3x3MeshNoAura) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 3) + { + GTEST_SKIP(); + } + + setup("generated:3x3x3|sideset:x", false); + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector); + bulk->modification_end(); + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 24); + EXPECT_EQ(edgesTotal, 24); + test_faces_have_edges(*bulk, ownedFaces, 4); +} + +TEST_F(EdgesOnFacesFixture, Hex3x3MeshWithAura) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 3) + { + GTEST_SKIP(); + } + + setup("generated:3x3x3|sideset:x", true); + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector); + bulk->modification_end(); + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 24); + EXPECT_EQ(edgesTotal, 24); + test_faces_have_edges(*bulk, ownedFaces, 4); +} + +TEST_F(EdgesOnFacesFixture, Hex4x4MeshWithAuraAndCustomGhosting) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) != 2) + { + GTEST_SKIP(); + } + + setup("generated:4x4x4|sideset:x", false); // TODO: turn aura back on + + bulk->modification_begin(); + stk::mesh::Ghosting& ghosting = bulk->create_ghosting("my_custom_ghosting"); + bulk->modification_end(); + + bulk->modification_begin(); + int otherProc = 1 - stk::parallel_machine_rank(stk::parallel_machine_world()); + std::vector sendGhosts; + for (stk::mesh::Entity face : ownedFaces) + { + sendGhosts.emplace_back(face, otherProc); + } + bulk->change_ghosting(ghosting, sendGhosts); + bulk->modification_end(); + + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector); + bulk->modification_end(); + + // its unfortunate we have to do this, because stk does have enough information to update + // the downward adjacencies of the ghost faces + bulk->modification_begin(); + sendGhosts.clear(); + for (stk::mesh::Bucket* bucket : bulk->get_buckets(stk::topology::EDGE_RANK, *edgePart & bulk->mesh_meta_data().locally_owned_part())) + { + for (stk::mesh::Entity edge : *bucket) + { + sendGhosts.emplace_back(edge, otherProc); + } + } + bulk->change_ghosting(ghosting, sendGhosts); + bulk->modification_end(); + + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 40); + EXPECT_EQ(edgesTotal, 40); + + std::vector allFaces; + stk::mesh::get_selected_entities(surfaceSelector, bulk->buckets(stk::topology::FACE_RANK), allFaces); + EXPECT_EQ(allFaces.size(), 4*4U); + test_faces_have_edges(*bulk, allFaces, 4); +} + +TEST_F(EdgesOnFacesFixture, Hex3x3MeshEnableAuraLater) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 3) + { + GTEST_SKIP(); + } + + setup("generated:3x3x3|sideset:x", false); + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector); + bulk->modification_end(); + + bulk->set_automatic_aura_option(stk::mesh::BulkData::AUTO_AURA, true); + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 24); + EXPECT_EQ(edgesTotal, 24); + test_faces_have_edges(*bulk, ownedFaces, 4); +} + +TEST_F(EdgesOnFacesFixture, Hex6x6MeshWithAura) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 6) + { + GTEST_SKIP(); + } + + setup("generated:6x6x6|sideset:x", true); + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector); + bulk->modification_end(); + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 6*7*2); + EXPECT_EQ(edgesTotal, 6*7*2); + test_faces_have_edges(*bulk, ownedFaces, 4); +} + +TEST_F(EdgesOnFacesFixture, Hex3x3MeshProvidePart) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 3) + { + GTEST_SKIP(); + } + + setup("generated:3x3x3|sideset:x", true); + stk::mesh::Part* edgePart = &(bulk->mesh_meta_data().declare_part_with_topology("face_edges_part", stk::topology::LINE_2)); + + bulk->modification_begin(); + stk::mesh::Part* edgePart2 = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector, edgePart); + bulk->modification_end(); + EXPECT_EQ(edgePart, edgePart2); + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 24); + EXPECT_EQ(edgesTotal, 24); + test_faces_have_edges(*bulk, ownedFaces, 4); +} + +TEST_F(EdgesOnFacesFixture, Hex3x3MeshProvideIncorrectPart) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 3) + { + GTEST_SKIP(); + } + + setup("generated:3x3x3|sideset:x", true); + stk::mesh::Part* edgePart = &(bulk->mesh_meta_data().declare_part_with_topology("face_edges_part", stk::topology::QUAD_4)); + + EXPECT_ANY_THROW(stk::mesh::create_edges_on_faces(*bulk, surfaceSelector, edgePart)); +} + +TEST_F(EdgesOnFacesFixture, Hex3x3MeshNoAuraDeleteEdges) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 3) + { + GTEST_SKIP(); + } + + setup("generated:3x3x3|sideset:x", false); + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector); + bulk->modification_end(); + + bulk->modification_begin(); + stk::mesh::delete_edges_on_faces(*bulk, edgePart); + bulk->modification_end(); + + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 0); + EXPECT_EQ(edgesTotal, 0); + test_faces_have_edges(*bulk, ownedFaces, 0); +} + +TEST_F(EdgesOnFacesFixture, Hex3x3MeshWithAuraDeleteEdges) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 3) + { + GTEST_SKIP(); + } + + setup("generated:3x3x3|sideset:x", true); + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector); + bulk->modification_end(); + + bulk->modification_begin(); + stk::mesh::delete_edges_on_faces(*bulk, edgePart); + bulk->modification_end(); + + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 0); + EXPECT_EQ(edgesTotal, 0); + test_faces_have_edges(*bulk, ownedFaces, 0); +} + +TEST_F(EdgesOnFacesFixture, Hex2x1HighOrder) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 2) + { + GTEST_SKIP(); + } + std::string meshDesc = "textmesh:" + "0,1,HEX_20,1,3,11,9, 20,22,30,28, 2,7,10,6, 14,15,18,17, 21,26,29,25\n" + "0,2,HEX_20,3,5,13,11, 22,24,32,30, 4,8,12,7, 15,16,19,18, 23,27,31,26\n" + // bottom plane + "|coordinates: 0,0,0, 1,0,0, 2,0,0, 3,0,0, 4,0,0," + "0,1,0, 2,1,0, 5,1,0," + "0,2,0, 1,2,0, 2,2,0, 3,2,0, 4,2,0," + // middle plane + "0,0,1, 3,0,1, 5,0,1," + "0,2,1, 3,2,1, 5,2,1," + // top plane + "0,0,1, 1,0,1, 2,0,1, 3,0,1, 4,0,1," + "0,1,1, 2,1,1, 5,1,1," + "0,2,1, 1,2,1, 2,2,1, 3,2,1, 4,2,1\n" + "|sideset:name=surface_1; data=1,1, 2,1"; + setup(meshDesc, true); + + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, surfaceSelector); + bulk->modification_end(); + + const auto& [edgesInSelector, edgesTotal] = countEdges(*bulk, *edgePart); + EXPECT_EQ(edgesInSelector, 7); + EXPECT_EQ(edgesTotal, 7); + test_third_node_is_midpoint(*bulk); +} + +TEST_F(EdgesOnFacesFixture, NoFacesSelected) +{ + if (stk::parallel_machine_size(stk::parallel_machine_world()) > 3) + { + GTEST_SKIP(); + } + + setup("generated:3x3x3|sideset:x", false); + bulk->modification_begin(); + stk::mesh::Part* edgePart = stk::mesh::create_edges_on_faces(*bulk, stk::mesh::Selector()); + bulk->modification_end(); + EXPECT_EQ(edgePart, nullptr); +} \ No newline at end of file diff --git a/packages/stk/stk_unit_tests/stk_mesh/ngp/ngpFieldBLASTest.cpp b/packages/stk/stk_unit_tests/stk_mesh/ngp/ngpFieldBLASTest.cpp index 23fba07f811f..84207b6180b7 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/ngp/ngpFieldBLASTest.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/ngp/ngpFieldBLASTest.cpp @@ -425,5 +425,24 @@ TEST_F(NgpFieldBLAS, field_axpbyz) ngp_field_test_utils::check_field_data_on_host(get_bulk(), *stkField3, selector, expectedValue); } +TEST_F(NgpFieldBLAS, field_axpby) +{ + if (get_parallel_size() != 1) GTEST_SKIP(); + + stk::mesh::field_fill(3.0, *stkField1, stk::ngp::ExecSpace()); + stk::mesh::field_fill(10.0, *stkField2, stk::ngp::ExecSpace()); + + double alpha = 2.0; + double beta = 5.0; + stk::mesh::Selector selectRule(*stkField1); + + stk::mesh::field_axpby(get_bulk(), alpha, *stkField1, beta, *stkField2, selectRule, stk::ngp::ExecSpace()); + + stkField2->sync_to_host(); + stk::mesh::Selector selector(*stkField2); + constexpr double expectedValue = 56.0; + ngp_field_test_utils::check_field_data_on_host(get_bulk(), *stkField2, selector, expectedValue); +} + } diff --git a/packages/stk/stk_unit_tests/stk_mesh/ngp/ngpFieldTest.cpp b/packages/stk/stk_unit_tests/stk_mesh/ngp/ngpFieldTest.cpp index 8016a1a04583..4dc9cadf14c6 100644 --- a/packages/stk/stk_unit_tests/stk_mesh/ngp/ngpFieldTest.cpp +++ b/packages/stk/stk_unit_tests/stk_mesh/ngp/ngpFieldTest.cpp @@ -1838,7 +1838,7 @@ TEST_F(OptimizedNgpFieldFixture, CreateConsecutiveNgpFields) // ------------------------- ------------------------- // -TEST_F(OptimizedNgpFieldFixture, AddBucketInMiddleWithSingleComponentInternal) +TEST_F(OptimizedNgpFieldFixture, AddBucketInMiddleWithSingleComponent_FieldReference) { if (get_parallel_size() != 1) return; @@ -1847,7 +1847,7 @@ TEST_F(OptimizedNgpFieldFixture, AddBucketInMiddleWithSingleComponentInternal) run_add_bucket_in_middle_internal(numComponents); } -TEST_F(OptimizedNgpFieldFixture, AddBucketInMiddleWithSingleComponentCopy) +TEST_F(OptimizedNgpFieldFixture, AddBucketInMiddleWithSingleComponent_FieldCopy) { if (get_parallel_size() != 1) return; @@ -2048,4 +2048,586 @@ TEST(DeviceBucket, checkSizeof) EXPECT_TRUE(sizeof(stk::mesh::DeviceBucket) <= expectedNumBytes); } + +enum PartIds : int { + part_1 = 1, + part_2 = 2, + part_3 = 3, + part_4 = 4, + part_5 = 5, + part_6 = 6, + part_7 = 7, + part_8 = 8, + part_9 = 9, + part_10 = 10, + part_11 = 11, + part_12 = 12, + part_13 = 13, + part_14 = 14, + part_15 = 15 +}; + +struct NodeIdPartId { + int nodeId; + PartIds partId; +}; + +class NgpFieldUpdate : public ::ngp_testing::Test +{ +public: + NgpFieldUpdate() + : m_field(nullptr) + { + stk::mesh::MeshBuilder builder(MPI_COMM_WORLD); + builder.set_spatial_dimension(3); + m_meta = builder.create_meta_data(); + } + + void create_mesh_with_parts_and_nodes(std::vector partIds, std::vector nodes) + { + for (PartIds partId : partIds) { + stk::mesh::Part & part = m_meta->declare_part_with_topology("part_" + std::to_string(partId), + stk::topology::NODE); + m_parts[partId] = ∂ + } + + m_field = &m_meta->declare_field(stk::topology::NODE_RANK, "nodeField"); + stk::mesh::put_field_on_mesh(*m_field, m_meta->universal_part(), nullptr); + + stk::mesh::MeshBuilder builder(MPI_COMM_WORLD); + builder.set_aura_option(stk::mesh::BulkData::NO_AUTO_AURA); + m_bulk = builder.create(m_meta); + + m_bulk->modification_begin(); + for (NodeIdPartId node : nodes) { + const stk::mesh::Entity newNode = m_bulk->declare_node(node.nodeId, + stk::mesh::PartVector{m_parts.at(node.partId)}); + *stk::mesh::field_data(*m_field, newNode) = node.nodeId; + } + m_bulk->modification_end(); + + stk::mesh::get_updated_ngp_mesh(*m_bulk); + stk::mesh::get_updated_ngp_field(*m_field); + } + + void add_node(NodeIdPartId newNodeInfo) + { + m_bulk->modification_begin(); + const stk::mesh::Entity node = m_bulk->declare_node(newNodeInfo.nodeId, + stk::mesh::PartVector{m_parts.at(newNodeInfo.partId)}); + *stk::mesh::field_data(*m_field, node) = newNodeInfo.nodeId; + m_bulk->modification_end(); + } + + void remove_node(int removedNodeId) + { + m_bulk->modification_begin(); + const stk::mesh::Entity node = m_bulk->get_entity(stk::topology::NODE_RANK, removedNodeId); + m_bulk->destroy_entity(node); + m_bulk->modification_end(); + } + + void check_field_values() + { + const stk::mesh::BucketVector& buckets = m_bulk->buckets(stk::topology::NODE_RANK); + unsigned nodeIdx = 0; + for (const stk::mesh::Bucket* bucket : buckets) { + for (stk::mesh::Entity node : *bucket) { + const int* fieldValue = stk::mesh::field_data(*m_field, node); + const int expectedValue = m_bulk->identifier(node); + EXPECT_EQ(*fieldValue, expectedValue); + } + } + + const unsigned numNodes = stk::mesh::count_entities(*m_bulk, stk::topology::NODE_RANK, m_meta->universal_part()); + Kokkos::View deviceValues("deviceValues", numNodes); + Kokkos::View::HostMirror hostValuesFromDevice = Kokkos::create_mirror_view(deviceValues); + + stk::mesh::NgpMesh& ngpMesh = stk::mesh::get_updated_ngp_mesh(*m_bulk); + stk::mesh::NgpField& ngpField = stk::mesh::get_updated_ngp_field(*m_field); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), + KOKKOS_LAMBDA(size_t /*index*/) { + unsigned nodeGlobalIndex = 0; + const unsigned numBuckets = ngpMesh.num_buckets(stk::topology::NODE_RANK); + for (unsigned bucketId = 0; bucketId < numBuckets; ++bucketId) { + const stk::mesh::NgpMesh::BucketType & deviceBucket = ngpMesh.get_bucket(stk::topology::NODE_RANK, bucketId); + const unsigned numNodesInBucket = deviceBucket.size(); + for (unsigned nodeOrdinal = 0; nodeOrdinal < numNodesInBucket; ++nodeOrdinal) { + const stk::mesh::FastMeshIndex nodeIndex = ngpMesh.fast_mesh_index(deviceBucket[nodeOrdinal]); + deviceValues[nodeGlobalIndex++] = ngpField.get(nodeIndex, 0); + } + } + }); + + Kokkos::deep_copy(hostValuesFromDevice, deviceValues); + + nodeIdx = 0; + for (const stk::mesh::Bucket * bucket : buckets) { + for (stk::mesh::Entity node : *bucket) { + const int expectedValue = m_bulk->identifier(node); + EXPECT_EQ(hostValuesFromDevice[nodeIdx++], expectedValue); + } + } + } + +protected: + std::shared_ptr m_bulk; + std::shared_ptr m_meta; + std::map m_parts; + stk::mesh::Field * m_field; +}; + +// o = Node that persists through modification +// * = New node +// x = Node that will be deleted + +// | 2 | 3 | | 1 | 2 | 3 | +// | o | o | ==> | * | o | o | +// |part_2 |part_3 | |part_1 |part_2 |part_3 | +// +TEST_F(NgpFieldUpdate, AddBucketAtBeginning_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3}, + {{2, part_2}, {3, part_3}}); + add_node({1, part_1}); + + check_field_values(); +} + +// | 1 | 3 | | 1 | 2 | 3 | +// | o | o | ==> | o | * | o | +// |part_1 |part_3 | |part_1 |part_2 |part_3 | +// +TEST_F(NgpFieldUpdate, AddBucketInMiddle_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3}, + {{1, part_1}, {3, part_3}}); + add_node({2, part_2}); + + check_field_values(); +} + +// | 1 | 2 | | 1 | 2 | 3 | +// | o | o | ==> | o | o | * | +// |part_1 |part_2 | |part_1 |part_2 |part_3 | +// +TEST_F(NgpFieldUpdate, AddBucketAtEnd_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3}, + {{1, part_1}, {2, part_2}}); + add_node({3, part_3}); + + check_field_values(); +} + +// | 1 | 2 | 3 | | 2 | 3 | +// | x | o | o | ==> | o | o | +// |part_1 |part_2 |part_3 | |part_2 |part_3 | +// +TEST_F(NgpFieldUpdate, RemoveBucketAtFront_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3}, + {{1, part_1}, {2, part_2}, {3, part_3}}); + remove_node(1); + + check_field_values(); +} + +// | 1 | 2 | 3 | | 1 | 3 | +// | o | x | o | ==> | o | o | +// |part_1 |part_2 |part_3 | |part_1 |part_3 | +// +TEST_F(NgpFieldUpdate, RemoveBucketInMiddle_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3}, + {{1, part_1}, {2, part_2}, {3, part_3}}); + remove_node(2); + + check_field_values(); +} + +// | 1 | 2 | 3 | | 1 | 2 | +// | o | o | x | ==> | o | o | +// |part_1 |part_2 |part_3 | |part_1 |part_2 | +// +TEST_F(NgpFieldUpdate, RemoveBucketAtEnd_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3}, + {{1, part_1}, {2, part_2}, {3, part_3}}); + remove_node(3); + + check_field_values(); +} + +// | 1 | 3 | 4 | | 1 2 | 3 | 4 | 5 | +// | o | o | o | ==> | o * | o | o | * | +// |part_1 |part_3 |part_4 | |part_1 |part_3 |part_4 |part_5 | +// +TEST_F(NgpFieldUpdate, ModifyBucketAtBeginning_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_3, part_4, part_5}, + {{1, part_1}, {3, part_3}, {4, part_4}}); + add_node({2, part_1}); + add_node({5, part_5}); + + check_field_values(); +} + +// | 1 | 2 | 4 | | 1 | 2 3 | 4 | 5 | +// | o | o | o | ==> | o | o * | o | * | +// |part_1 |part_2 |part_4 | |part_1 |part_2 |part_4 |part_5 | +// +TEST_F(NgpFieldUpdate, ModifyBucketInMiddle_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_4, part_5}, + {{1, part_1}, {2, part_2}, {4, part_4}}); + add_node({3, part_2}); + add_node({5, part_5}); + + check_field_values(); +} + +// | 1 | 3 | 4 | | 1 | 2 | 3 | 4 5 | +// | o | o | o | ==> | o | * | o | o * | +// |part_1 |part_3 |part_4 | |part_1 |part_2 |part_3 |part_4 | +// +TEST_F(NgpFieldUpdate, ModifyBucketAtEnd_WhileReallocating) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4}, + {{1, part_1}, {3, part_3}, {4, part_4}}); + add_node({2, part_2}); + add_node({5, part_4}); + + check_field_values(); +} + +// | 1 | 2 | 4 | | 1 | 3 | 4 | +// | o | x | o | ==> | o | * | o | +// |part_1 |part_2 |part_4 | |part_1 |part_3 |part_4 | +// +TEST_F(NgpFieldUpdate, AddAndRemoveBucketSameLocation) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4}, + {{1, part_1}, {2, part_2}, {4, part_4}}); + remove_node(2); + add_node({3, part_3}); + + check_field_values(); +} + +// | 1 | 2 | 3 | 4 | 6 | +// | x | x | o | o | o | ==> +// |part_1 |part_2 |part_3 |part_4 |part_6 | +// ____/ ____/ +// ____/ ____/ +// ____/ ____/ +// / / +// V V +// | 3 | 4 5 | 6 | 7 | 8 | +// | o | o * | o | * | * | +// |part_3 |part_4 |part_6 |part_7 |part_8 | +// +TEST_F(NgpFieldUpdate, OverlapBackwardMovedRangesDueToModifiedBucket) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_6, part_7, part_8}, + {{1, part_1}, {2, part_2}, {3, part_3}, {4, part_4}, {6, part_6}}); + remove_node(1); + remove_node(2); + add_node({5, part_4}); + add_node({7, part_7}); + add_node({8, part_8}); + + check_field_values(); +} + +// | 1 | 2 | 3 | 4 | 5 | +// | o | x | o | x | o | ==> +// |part_1 |part_2 |part_3 |part_4 |part_5 | +// | __/ ____/ +// | _/ ____/ +// | _/ ____/ +// | / / +// V V V +// | 1 | 3 | 5 | 6 | 7 | +// | o | o | o | * | * | +// |part_1 |part_3 |part_5 |part_6 |part_7 | +// +TEST_F(NgpFieldUpdate, OverlapBackwardMovedRangesDueToDeletedBucket) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_5, part_6, part_7}, + {{1, part_1}, {2, part_2}, {3, part_3}, {4, part_4}, {5, part_5}}); + remove_node(2); + remove_node(4); + add_node({6, part_6}); + add_node({7, part_7}); + + check_field_values(); +} + +// | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 11 | +// | x | x | x | x | o | o | o | o | o | ==> +// |part_1 |part_2 |part_3 |part_4 |part_5 |part_6 |part_8 |part_9 |part_11| +// __________/ __________/ _________/ +// _________/ _________/ _________/ +// _________/ _________/ _________/ +// / / / +// V V V +// | 5 | 6 7 | 8 | 9 10 | 11 | 12 | 13 | 14 | 15 | +// | o | o * | o | o * | o | * | * | * | * | +// |part_5 |part_6 |part_8 |part_9 |part_11|part_12|part_13|part_14|part_15| +// +TEST_F(NgpFieldUpdate, DoubleOverlapBackwardMovedRangesDueToModifiedBucket) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_5, part_6, part_8, part_9, part_11, + part_12, part_13, part_14, part_15}, + {{1, part_1}, {2, part_2}, {3, part_3}, {4, part_4}, {5, part_5}, {6, part_6}, + {8, part_8}, {9, part_9}, {11, part_11}}); + remove_node(1); + remove_node(2); + remove_node(3); + remove_node(4); + add_node({7, part_6}); + add_node({10, part_9}); + add_node({12, part_12}); + add_node({13, part_13}); + add_node({14, part_14}); + add_node({15, part_15}); + + check_field_values(); +} + +// | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +// | x | x | o | o | x | o | x | o | ==> +// |part_1 |part_2 |part_3 |part_4 |part_5 |part_6 |part_7 |part_8 | +// ____/ ____/ _______/ __________/ +// ____/ ____/ _______/ _________/ +// ____/ ____/ ______/ _________/ +// / / / / +// V V V V +// | 3 | 4 | 6 | 8 | 9 | 10 | 11 | 12 | +// | o | o | o | o | * | * | * | * | +// |part_3 |part_4 |part_6 |part_8 |part_9 |part_10|part_11|part_12| +// +TEST_F(NgpFieldUpdate, DoubleOverlapBackwardMovedRangesDueToDeletedBucket) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_5, part_6, part_7, part_8, part_9, + part_10, part_11, part_12}, + {{1, part_1}, {2, part_2}, {3, part_3}, {4, part_4}, {5, part_5}, {6, part_6}, + {7, part_7}, {8, part_8}}); + remove_node(1); + remove_node(2); + remove_node(5); + remove_node(7); + add_node({9, part_9}); + add_node({10, part_10}); + add_node({11, part_11}); + add_node({12, part_12}); + + check_field_values(); +} + +// | 3 | 4 | 6 | 7 | 8 | +// | o | o | o | x | x | ==> +// |part_3 |part_4 |part_6 |part_7 |part_8 | +// \____ \____ +// \____ \____ +// \____ \____ +// \ \ . +// V V +// | 1 | 2 | 3 | 4 5 | 6 | +// | * | * | o | o * | o | +// |part_1 |part_2 |part_3 |part_4 |part_6 | +// +TEST_F(NgpFieldUpdate, OverlapForwardMovedRangesDueToModifiedBucket) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_6, part_7, part_8}, + {{3, part_3}, {4, part_4}, {6, part_6}, {7, part_7}, {8, part_8}}); + remove_node(7); + remove_node(8); + add_node({1, part_1}); + add_node({2, part_2}); + add_node({5, part_4}); + + check_field_values(); +} + +// | 3 | 4 | 5 | 6 | 7 | +// | o | x | o | x | o | ==> +// |part_3 |part_4 |part_5 |part_6 |part_7 | +// \____ \__ | +// \____ \_ | +// \____ \_ | +// \ \ | +// V V V +// | 1 | 2 | 3 | 5 | 7 | +// | * | * | o | o | o | +// |part_1 |part_2 |part_3 |part_5 |part_7 | +// +TEST_F(NgpFieldUpdate, OverlapForwardMovedRangesDueToDeletedBucket) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_5, part_6, part_7}, + {{3, part_3}, {4, part_4}, {5, part_5}, {6, part_6}, {7, part_7}}); + remove_node(4); + remove_node(6); + add_node({1, part_1}); + add_node({2, part_2}); + + check_field_values(); +} + +// | 5 | 6 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | +// | o | o | o | o | o | x | x | x | x | ==> +// |part_5 |part_6 |part_8 |part_9 |part_11|part_12|part_13|part_14|part_15| +// \__________ \__________ \__________ +// \_________ \_________ \_________ +// \_________ \_________ \_________ +// \ \ \ . +// V V V +// | 1 | 2 | 3 | 4 | 5 | 6 7 | 8 | 9 10 | 11 | +// | * | * | * | * | o | o * | o | o * | o | +// |part_1 |part_2 |part_3 |part_4 |part_5 |part_6 |part_8 |part_9 |part_11| +// +TEST_F(NgpFieldUpdate, DoubleOverlapForwardMovedRangesDueToModifiedBucket) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_5, part_6, part_8, part_9, part_11, + part_12, part_13, part_14, part_15}, + {{5, part_5}, {6, part_6}, {8, part_8}, {9, part_9}, {11, part_11}, {12, part_12}, + {13, part_13}, {14, part_14}, {15, part_15}}); + remove_node(12); + remove_node(13); + remove_node(14); + remove_node(15); + add_node({1, part_1}); + add_node({2, part_2}); + add_node({3, part_3}); + add_node({4, part_4}); + add_node({7, part_6}); + add_node({10, part_9}); + + check_field_values(); +} + +// | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | +// | o | x | o | x | o | o | x | x | ==> +// |part_5 |part_6 |part_7 |part_8 |part_9 |part_10|part_11|part_12| +// \__________ \_______ \____ \____ +// \_________ \_______ \____ \____ +// \_________ \______ \____ \____ +// \ \ \ \ . +// V V V V +// | 1 | 2 | 3 | 4 | 5 | 7 | 9 | 10 | +// | * | * | * | * | o | o | o | o | +// |part_1 |part_2 |part_3 |part_4 |part_5 |part_7 |part_9 |part_10| +// +TEST_F(NgpFieldUpdate, DoubleOverlapForwardMovedRangesDueToDeletedBucket) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_5, part_6, part_7, part_8, part_9, + part_10, part_11, part_12}, + {{5, part_5}, {6, part_6}, {7, part_7}, {8, part_8}, {9, part_9}, {10, part_10}, + {11, part_11}, {12, part_12}}); + remove_node(6); + remove_node(8); + remove_node(11); + remove_node(12); + add_node({1, part_1}); + add_node({2, part_2}); + add_node({3, part_3}); + add_node({4, part_4}); + + check_field_values(); +} + +// | 2 | 3 | 4 | 5 | 8 | 9 | +// | o | x | x | o | o | x | ==> +// |part_2 |part_3 |part_4 |part_5 |part_8 |part_9 | +// \__ __/ \__ +// \_ _/ \_ +// \_ _/ \_ +// \ / \ . +// V V V +// | 1 | 2 | 5 | 6 | 7 | 8 | +// | * | o | o | * | * | o | +// |part_1 |part_2 |part_5 |part_6 |part_7 |part_8 | +// +TEST_F(NgpFieldUpdate, MoveForwardBackwardForward) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_5, part_6, part_7, part_8, part_9}, + {{2, part_2}, {3, part_3}, {4, part_4}, {5, part_5}, {8, part_8}, {9, part_9}}); + remove_node(3); + remove_node(4); + remove_node(9); + add_node({1, part_1}); + add_node({6, part_6}); + add_node({7, part_7}); + + check_field_values(); +} + +// | 1 | 2 | 5 | 6 | 7 | 8 | +// | x | o | o | x | x | o | ==> +// |part_1 |part_2 |part_5 |part_6 |part_7 |part_8 | +// __/ \__ __/ +// _/ \_ _/ +// _/ \_ _/ +// / \ / +// V V V +// | 2 | 3 | 4 | 5 | 8 | 9 | +// | o | * | * | o | o | * | +// |part_2 |part_3 |part_4 |part_5 |part_8 |part_9 | +// +TEST_F(NgpFieldUpdate, MoveBackwardForwardBackward) +{ + if (stk::parallel_machine_size(MPI_COMM_WORLD) != 1) GTEST_SKIP(); + + create_mesh_with_parts_and_nodes({part_1, part_2, part_3, part_4, part_5, part_6, part_7, part_8, part_9}, + {{1, part_1}, {2, part_2}, {5, part_5}, {6, part_6}, {7, part_7}, {8, part_8}}); + remove_node(1); + remove_node(6); + remove_node(7); + add_node({3, part_3}); + add_node({4, part_4}); + add_node({9, part_9}); + + check_field_values(); +} + } diff --git a/packages/stk/stk_unit_tests/stk_middle_mesh/CMakeLists.txt b/packages/stk/stk_unit_tests/stk_middle_mesh/CMakeLists.txt index cd48669ad8d3..58e04969d3e0 100644 --- a/packages/stk/stk_unit_tests/stk_middle_mesh/CMakeLists.txt +++ b/packages/stk/stk_unit_tests/stk_middle_mesh/CMakeLists.txt @@ -24,7 +24,9 @@ else() add_test(NAME "stk_middle_mesh_utest" COMMAND stk_middle_mesh_utest) endif() -target_include_directories(stk_middle_mesh_utest PRIVATE - $ - $ -) +if(TARGET stk_middle_mesh_utest) + target_include_directories(stk_middle_mesh_utest PRIVATE + $ + $ + ) +endif() diff --git a/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearch.cpp b/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearch.cpp index 774322452b83..15f1ba9c0bf2 100644 --- a/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearch.cpp +++ b/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearch.cpp @@ -361,6 +361,8 @@ void host_local_test_coarse_search_for_algorithm(stk::search::SearchMethod algor LocalSearchResults intersections; stk::search::local_coarse_search(domain, range, algorithm, intersections); + std::sort(intersections.begin(), intersections.end()); + local_expect_search_results(intersections); } @@ -386,6 +388,7 @@ void device_local_test_coarse_search_for_algorithm(stk::search::SearchMethod alg auto intersections = Kokkos::View("intersections", 0); stk::search::local_coarse_search(domain, range, algorithm, intersections); + Kokkos::sort(intersections); Kokkos::View::HostMirror hostIntersections = Kokkos::create_mirror_view(intersections); Kokkos::deep_copy(hostIntersections, intersections); @@ -459,6 +462,7 @@ void local_test_coarse_search_for_algorithm_with_views(stk::search::SearchMethod auto intersections = Kokkos::View("intersections", 0); stk::search::local_coarse_search(domain, range, algorithm, intersections); + Kokkos::sort(intersections); auto hostIntersections = Kokkos::create_mirror_view(HostSpace{}, intersections); Kokkos::deep_copy(hostIntersections, intersections); diff --git a/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearchTwoBox.cpp b/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearchTwoBox.cpp index a742aeb80f42..9f785c2d470c 100644 --- a/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearchTwoBox.cpp +++ b/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearchTwoBox.cpp @@ -253,6 +253,7 @@ void host_local_runTwoBoxTest(stk::search::SearchMethod searchMethod, LocalSearchResults intersections; stk::search::local_coarse_search(domain, range, searchMethod, intersections); + std::sort(intersections.begin(), intersections.end()); ASSERT_EQ(intersections.size(), expectedNumOverlap); @@ -283,6 +284,7 @@ void device_local_runTwoBoxTest(stk::search::SearchMethod searchMethod, const do stk::search::local_coarse_search(domain, range, searchMethod, intersections); Kokkos::View::HostMirror hostIntersections = Kokkos::create_mirror_view(intersections); + Kokkos::sort(intersections); Kokkos::deep_copy(hostIntersections, intersections); ASSERT_EQ(intersections.extent(0), expectedNumOverlap); diff --git a/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearchTwoSpheres.cpp b/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearchTwoSpheres.cpp index b998f7ad0d83..f26d822a29e6 100644 --- a/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearchTwoSpheres.cpp +++ b/packages/stk/stk_unit_tests/stk_search/UnitTestCoarseSearchTwoSpheres.cpp @@ -255,6 +255,7 @@ void host_local_runTwoSpheresTest(stk::search::SearchMethod searchMethod, LocalSearchResults intersections; stk::search::local_coarse_search(domain, range, searchMethod, intersections); + std::sort(intersections.begin(), intersections.end()); ASSERT_EQ(intersections.size(), expectedNumOverlap); @@ -286,6 +287,7 @@ void device_local_runTwoSpheresTest(stk::search::SearchMethod searchMethod, cons stk::search::local_coarse_search(domain, range, searchMethod, intersections); Kokkos::View::HostMirror hostIntersections = Kokkos::create_mirror_view(intersections); + Kokkos::sort(intersections); Kokkos::deep_copy(hostIntersections, intersections); ASSERT_EQ(intersections.extent(0), expectedNumOverlap); diff --git a/packages/stk/stk_unit_tests/stk_search_util/CMakeLists.txt b/packages/stk/stk_unit_tests/stk_search_util/CMakeLists.txt index e2c6e42acf4f..c3830fe00aa5 100644 --- a/packages/stk/stk_unit_tests/stk_search_util/CMakeLists.txt +++ b/packages/stk/stk_unit_tests/stk_search_util/CMakeLists.txt @@ -5,7 +5,7 @@ if(HAVE_STK_Trilinos) TRIBITS_ADD_EXECUTABLE_AND_TEST(stk_search_util_utest SOURCES ${SOURCES} TESTONLYLIBS stk_unit_main - ARGS "" + ARGS "--gtest_filter=-SearchUtil.Intrepid2*" COMM serial mpi NUM_MPI_PROCS 1 ) diff --git a/packages/stk/stk_unit_tests/stk_topology/CMakeLists.txt b/packages/stk/stk_unit_tests/stk_topology/CMakeLists.txt index d69dcf09e901..c88d5aede14e 100644 --- a/packages/stk/stk_unit_tests/stk_topology/CMakeLists.txt +++ b/packages/stk/stk_unit_tests/stk_topology/CMakeLists.txt @@ -60,15 +60,23 @@ else() add_test(NAME "stk_topology_unit_tests_c" COMMAND stk_topology_unit_tests_c) endif() +if(TARGET stk_topology_unit_tests_a) target_include_directories(stk_topology_unit_tests_a PUBLIC $ $ ) +endif() + +if(TARGET stk_topology_unit_tests_b) target_include_directories(stk_topology_unit_tests_b PUBLIC $ $ ) +endif() + +if(TARGET stk_topology_unit_tests_c) target_include_directories(stk_topology_unit_tests_c PUBLIC $ $ ) +endif() diff --git a/packages/stk/stk_unit_tests/stk_topology/utest_b/unit_test_validate_topology_data.cpp b/packages/stk/stk_unit_tests/stk_topology/utest_b/unit_test_validate_topology_data.cpp index 62673827d698..ed7ffa782dee 100644 --- a/packages/stk/stk_unit_tests/stk_topology/utest_b/unit_test_validate_topology_data.cpp +++ b/packages/stk/stk_unit_tests/stk_topology/utest_b/unit_test_validate_topology_data.cpp @@ -165,53 +165,59 @@ bool validate_topology_data() TEST( stk_topology, validate_topology) { - EXPECT_TRUE( validate_topology_data< topology::NODE >() ); - EXPECT_TRUE( validate_topology_data< topology::LINE_2 >() ); - EXPECT_TRUE( validate_topology_data< topology::LINE_3 >() ); - EXPECT_TRUE( validate_topology_data< topology::TRI_3 >() ); - EXPECT_TRUE( validate_topology_data< topology::TRI_4 >() ); - EXPECT_TRUE( validate_topology_data< topology::TRI_6 >() ); - EXPECT_TRUE( validate_topology_data< topology::QUAD_4 >() ); - EXPECT_TRUE( validate_topology_data< topology::QUAD_6 >() ); - EXPECT_TRUE( validate_topology_data< topology::QUAD_8 >() ); - EXPECT_TRUE( validate_topology_data< topology::QUAD_9 >() ); - EXPECT_TRUE( validate_topology_data< topology::PARTICLE >() ); - EXPECT_TRUE( validate_topology_data< topology::LINE_2_1D >() ); - EXPECT_TRUE( validate_topology_data< topology::LINE_3_1D >() ); - EXPECT_TRUE( validate_topology_data< topology::BEAM_2 >() ); - EXPECT_TRUE( validate_topology_data< topology::BEAM_3 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_LINE_2 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_LINE_3 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_SIDE_BEAM_2 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_SIDE_BEAM_3 >() ); - EXPECT_TRUE( validate_topology_data< topology::SPRING_2 >() ); - EXPECT_TRUE( validate_topology_data< topology::SPRING_3 >() ); - EXPECT_TRUE( validate_topology_data< topology::TRI_3_2D >() ); - EXPECT_TRUE( validate_topology_data< topology::TRI_4_2D >() ); - EXPECT_TRUE( validate_topology_data< topology::TRI_6_2D >() ); - EXPECT_TRUE( validate_topology_data< topology::QUAD_4_2D >() ); - EXPECT_TRUE( validate_topology_data< topology::QUAD_8_2D >() ); - EXPECT_TRUE( validate_topology_data< topology::QUAD_9_2D >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_3 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_4 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_6 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_4 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_8 >() ); - EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_9 >() ); - EXPECT_TRUE( validate_topology_data< topology::TET_4 >() ); - EXPECT_TRUE( validate_topology_data< topology::TET_8 >() ); - EXPECT_TRUE( validate_topology_data< topology::TET_10 >() ); - EXPECT_TRUE( validate_topology_data< topology::TET_11 >() ); - EXPECT_TRUE( validate_topology_data< topology::PYRAMID_5 >() ); - EXPECT_TRUE( validate_topology_data< topology::PYRAMID_13 >() ); - EXPECT_TRUE( validate_topology_data< topology::PYRAMID_14 >() ); - EXPECT_TRUE( validate_topology_data< topology::WEDGE_6 >() ); - EXPECT_TRUE( validate_topology_data< topology::WEDGE_12 >() ); - EXPECT_TRUE( validate_topology_data< topology::WEDGE_15 >() ); - EXPECT_TRUE( validate_topology_data< topology::WEDGE_18 >() ); - EXPECT_TRUE( validate_topology_data< topology::HEX_8 >() ); - EXPECT_TRUE( validate_topology_data< topology::HEX_20 >() ); - EXPECT_TRUE( validate_topology_data< topology::HEX_27 >() ); + EXPECT_TRUE( validate_topology_data< topology::NODE >() ); + EXPECT_TRUE( validate_topology_data< topology::LINE_2 >() ); + EXPECT_TRUE( validate_topology_data< topology::LINE_3 >() ); + EXPECT_TRUE( validate_topology_data< topology::TRI_3 >() ); + EXPECT_TRUE( validate_topology_data< topology::TRI_4 >() ); + EXPECT_TRUE( validate_topology_data< topology::TRI_6 >() ); + EXPECT_TRUE( validate_topology_data< topology::QUAD_4 >() ); + EXPECT_TRUE( validate_topology_data< topology::QUAD_6 >() ); + EXPECT_TRUE( validate_topology_data< topology::QUAD_8 >() ); + EXPECT_TRUE( validate_topology_data< topology::QUAD_9 >() ); + EXPECT_TRUE( validate_topology_data< topology::PARTICLE >() ); + EXPECT_TRUE( validate_topology_data< topology::LINE_2_1D >() ); + EXPECT_TRUE( validate_topology_data< topology::LINE_3_1D >() ); + EXPECT_TRUE( validate_topology_data< topology::BEAM_2 >() ); + EXPECT_TRUE( validate_topology_data< topology::BEAM_3 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_LINE_2 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_LINE_3 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_SIDE_BEAM_2 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_SIDE_BEAM_3 >() ); + EXPECT_TRUE( validate_topology_data< topology::SPRING_2 >() ); + EXPECT_TRUE( validate_topology_data< topology::SPRING_3 >() ); + EXPECT_TRUE( validate_topology_data< topology::TRI_3_2D >() ); + EXPECT_TRUE( validate_topology_data< topology::TRI_4_2D >() ); + EXPECT_TRUE( validate_topology_data< topology::TRI_6_2D >() ); + EXPECT_TRUE( validate_topology_data< topology::QUAD_4_2D >() ); + EXPECT_TRUE( validate_topology_data< topology::QUAD_8_2D >() ); + EXPECT_TRUE( validate_topology_data< topology::QUAD_9_2D >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_3 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_4 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_6 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_3_ALL_FACE_SIDES >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_4_ALL_FACE_SIDES >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_TRI_6_ALL_FACE_SIDES >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_4 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_8 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_9 >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_4_ALL_FACE_SIDES >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_8_ALL_FACE_SIDES >() ); + EXPECT_TRUE( validate_topology_data< topology::SHELL_QUAD_9_ALL_FACE_SIDES >() ); + EXPECT_TRUE( validate_topology_data< topology::TET_4 >() ); + EXPECT_TRUE( validate_topology_data< topology::TET_8 >() ); + EXPECT_TRUE( validate_topology_data< topology::TET_10 >() ); + EXPECT_TRUE( validate_topology_data< topology::TET_11 >() ); + EXPECT_TRUE( validate_topology_data< topology::PYRAMID_5 >() ); + EXPECT_TRUE( validate_topology_data< topology::PYRAMID_13 >() ); + EXPECT_TRUE( validate_topology_data< topology::PYRAMID_14 >() ); + EXPECT_TRUE( validate_topology_data< topology::WEDGE_6 >() ); + EXPECT_TRUE( validate_topology_data< topology::WEDGE_12 >() ); + EXPECT_TRUE( validate_topology_data< topology::WEDGE_15 >() ); + EXPECT_TRUE( validate_topology_data< topology::WEDGE_18 >() ); + EXPECT_TRUE( validate_topology_data< topology::HEX_8 >() ); + EXPECT_TRUE( validate_topology_data< topology::HEX_20 >() ); + EXPECT_TRUE( validate_topology_data< topology::HEX_27 >() ); // check that the permutations define the same sides for (stk::topology topo = stk::topology::BEGIN_TOPOLOGY; topo < stk::topology::END_TOPOLOGY; ++topo) { diff --git a/packages/stk/stk_unit_tests/stk_topology/utest_c/unit_test_shell_quad_all_face_sides.cpp b/packages/stk/stk_unit_tests/stk_topology/utest_c/unit_test_shell_quad_all_face_sides.cpp new file mode 100644 index 000000000000..2f47304494f7 --- /dev/null +++ b/packages/stk/stk_unit_tests/stk_topology/utest_c/unit_test_shell_quad_all_face_sides.cpp @@ -0,0 +1,495 @@ +// Copyright 2002 - 2008, 2010, 2011 National Technology Engineering +// Solutions of Sandia, LLC (NTESS). Under the terms of Contract +// DE-NA0003525 with NTESS, the U.S. Government retains certain rights +// in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// * Neither the name of NTESS nor the names of its contributors +// may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +#include "Kokkos_Core.hpp" // for parallel_for, KOKKOS_LAMBDA +#include "gtest/gtest.h" // for AssertionResult, Message, TestPartResult +#include "stk_ngp_test/ngp_test.hpp" // for NGP_EXPECT_EQ, NGP_EXPECT_FALSE, NGP_EXPECT_... +#include "stk_topology/topology.hpp" // for topology, topology::QUAD_4, topology::QUAD_8 +#include "topology_test_utils.hpp" // for check_edge_node_ordinals, check_edge_node_or... +#include // for size_t +#include // for operator<<, basic_ostream, basic_ostream<>::... +#include // for vector + +namespace { + +std::vector> get_gold_edge_node_ordinals_shell_quad4() { + return std::vector> { + {0, 1}, + {1, 2}, + {2, 3}, + {3, 0} + }; +} + +std::vector> get_gold_face_node_ordinals_shell_quad4() { + return std::vector> { + {0, 1, 2, 3}, + {0, 3, 2, 1}, + {0, 1}, + {1, 2}, + {2, 3}, + {3, 0} + }; +} + +std::vector> get_gold_side_node_ordinals_shell_quad4() { + return std::vector> { + {0, 1, 2, 3}, + {0, 3, 2, 1}, + {0, 1}, + {1, 2}, + {2, 3}, + {3, 0} + }; +} + +TEST(stk_topology, shell_shell_quad4_all_face_sides) +{ + stk::topology t = stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES; + + EXPECT_TRUE(t.is_valid()); + EXPECT_TRUE(t.has_homogeneous_faces()); + EXPECT_TRUE(t.is_shell()); + + EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + EXPECT_EQ(t.side_rank(), stk::topology::FACE_RANK); + + EXPECT_EQ(t.num_nodes(),4u); + EXPECT_EQ(t.num_vertices(),4u); + EXPECT_EQ(t.num_edges(),4u); + EXPECT_EQ(t.num_faces(),6u); + EXPECT_EQ(t.num_sides(),6u); + + EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + EXPECT_EQ(t.base(),stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES); + + EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_2); + EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_2); + EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_2); + EXPECT_EQ(t.edge_topology(3), stk::topology::LINE_2); + + EXPECT_EQ(t.face_topology(0), stk::topology::QUAD_4); + EXPECT_EQ(t.face_topology(1), stk::topology::QUAD_4); + EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.face_topology(5), stk::topology::SHELL_SIDE_BEAM_2); + + EXPECT_EQ(t.side_topology(0), stk::topology::QUAD_4); + EXPECT_EQ(t.side_topology(1), stk::topology::QUAD_4); + EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.side_topology(5), stk::topology::SHELL_SIDE_BEAM_2); + + check_edge_node_ordinals(t, get_gold_edge_node_ordinals_shell_quad4()); + check_edge_nodes(t, get_gold_edge_node_ordinals_shell_quad4()); + + check_face_node_ordinals(t, get_gold_face_node_ordinals_shell_quad4()); + check_face_nodes(t, get_gold_face_node_ordinals_shell_quad4()); + + check_side_node_ordinals(t, get_gold_side_node_ordinals_shell_quad4()); + check_side_nodes(t, get_gold_side_node_ordinals_shell_quad4()); +} + +void check_shell_quad_4_all_face_sides_on_device() +{ + OrdinalType goldEdgeNodeOrdinals = fillGoldOrdinals(get_gold_edge_node_ordinals_shell_quad4()); + OrdinalType goldFaceNodeOrdinals = fillGoldOrdinals(get_gold_face_node_ordinals_shell_quad4()); + OrdinalType goldSideNodeOrdinals = fillGoldOrdinals(get_gold_side_node_ordinals_shell_quad4()); + + stk::topology t = stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES; + constexpr unsigned numNodes = stk::topology_detail::topology_data::num_nodes; + EXPECT_EQ(4u, numNodes); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + NGP_EXPECT_TRUE(t.is_valid()); + NGP_EXPECT_TRUE(t.has_homogeneous_faces()); + NGP_EXPECT_TRUE(t.is_shell()); + + NGP_EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + NGP_EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + NGP_EXPECT_EQ(t.num_nodes(),4u); + NGP_EXPECT_EQ(t.num_vertices(),4u); + NGP_EXPECT_EQ(t.num_edges(),4u); + NGP_EXPECT_EQ(t.num_faces(),6u); + NGP_EXPECT_EQ(t.num_sides(),6u); + + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + NGP_EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + NGP_EXPECT_EQ(t.base(),stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES); + + NGP_EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_2); + NGP_EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_2); + NGP_EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_2); + + NGP_EXPECT_EQ(t.face_topology(0), stk::topology::QUAD_4); + NGP_EXPECT_EQ(t.face_topology(1), stk::topology::QUAD_4); + NGP_EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.face_topology(5), stk::topology::SHELL_SIDE_BEAM_2); + + NGP_EXPECT_EQ(t.side_topology(0), stk::topology::QUAD_4); + NGP_EXPECT_EQ(t.side_topology(1), stk::topology::QUAD_4); + NGP_EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.side_topology(5), stk::topology::SHELL_SIDE_BEAM_2); + + check_edge_node_ordinals_ngp(t, goldEdgeNodeOrdinals); + check_edge_nodes_ngp(t, goldEdgeNodeOrdinals); + }); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + check_face_node_ordinals_ngp(t, goldFaceNodeOrdinals); + check_face_nodes_ngp(t, goldFaceNodeOrdinals); + + check_side_node_ordinals_ngp(t, goldSideNodeOrdinals); + check_side_nodes_ngp(t, goldSideNodeOrdinals); + }); +} + +NGP_TEST(stk_topology_ngp, shell_quad_4_all_face_sides) +{ + check_shell_quad_4_all_face_sides_on_device(); +} + +std::vector> get_gold_edge_node_ordinals_shell_quad8() { + return std::vector> { + {0, 1, 4}, + {1, 2, 5}, + {2, 3, 6}, + {3, 0, 7} + }; +} + +std::vector> get_gold_face_node_ordinals_shell_quad8() { + return std::vector> { + {0, 1, 2, 3, 4, 5, 6, 7}, + {0, 3, 2, 1, 7, 6, 5, 4}, + {0, 1, 4}, + {1, 2, 5}, + {2, 3, 6}, + {3, 0, 7} + }; +} + +std::vector> get_gold_side_node_ordinals_shell_quad8() { + return std::vector> { + {0, 1, 2, 3, 4, 5, 6, 7}, + {0, 3, 2, 1, 7, 6, 5, 4}, + {0, 1, 4}, + {1, 2, 5}, + {2, 3, 6}, + {3, 0, 7} + }; +} + +TEST(stk_topology, shell_shell_quad8_all_face_sides) +{ + stk::topology t = stk::topology::SHELL_QUAD_8_ALL_FACE_SIDES; + + EXPECT_TRUE(t.is_valid()); + EXPECT_TRUE(t.has_homogeneous_faces()); + EXPECT_TRUE(t.is_shell()); + + EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + EXPECT_EQ(t.num_nodes(),8u); + EXPECT_EQ(t.num_vertices(),4u); + EXPECT_EQ(t.num_edges(),4u); + EXPECT_EQ(t.num_faces(),6u); + EXPECT_EQ(t.num_sides(),6u); + + EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + EXPECT_EQ(t.base(),stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES); + + EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_3); + EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_3); + EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_3); + EXPECT_EQ(t.edge_topology(3), stk::topology::LINE_3); + + EXPECT_EQ(t.face_topology(0), stk::topology::QUAD_8); + EXPECT_EQ(t.face_topology(1), stk::topology::QUAD_8); + EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.face_topology(5), stk::topology::SHELL_SIDE_BEAM_3); + + EXPECT_EQ(t.side_topology(0), stk::topology::QUAD_8); + EXPECT_EQ(t.side_topology(1), stk::topology::QUAD_8); + EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.side_topology(5), stk::topology::SHELL_SIDE_BEAM_3); + + check_edge_node_ordinals(t, get_gold_edge_node_ordinals_shell_quad8()); + check_edge_nodes(t, get_gold_edge_node_ordinals_shell_quad8()); + + check_face_node_ordinals(t, get_gold_face_node_ordinals_shell_quad8()); + check_face_nodes(t, get_gold_face_node_ordinals_shell_quad8()); + + check_side_node_ordinals(t, get_gold_side_node_ordinals_shell_quad8()); + check_side_nodes(t, get_gold_side_node_ordinals_shell_quad8()); +} + +void check_shell_quad_8_all_face_sides_on_device() +{ + OrdinalType goldEdgeNodeOrdinals = fillGoldOrdinals(get_gold_edge_node_ordinals_shell_quad8()); + OrdinalType goldFaceNodeOrdinals = fillGoldOrdinals(get_gold_face_node_ordinals_shell_quad8()); + OrdinalType goldSideNodeOrdinals = fillGoldOrdinals(get_gold_side_node_ordinals_shell_quad8()); + + stk::topology t = stk::topology::SHELL_QUAD_8_ALL_FACE_SIDES; + constexpr unsigned numNodes = stk::topology_detail::topology_data::num_nodes; + EXPECT_EQ(8u, numNodes); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + NGP_EXPECT_TRUE(t.is_valid()); + NGP_EXPECT_TRUE(t.has_homogeneous_faces()); + NGP_EXPECT_TRUE(t.is_shell()); + + NGP_EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + NGP_EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + NGP_EXPECT_EQ(t.num_nodes(),8u); + NGP_EXPECT_EQ(t.num_vertices(),4u); + NGP_EXPECT_EQ(t.num_edges(),4u); + NGP_EXPECT_EQ(t.num_faces(),6u); + NGP_EXPECT_EQ(t.num_sides(),6u); + + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + NGP_EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + NGP_EXPECT_EQ(t.base(),stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES); + + NGP_EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_3); + NGP_EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_3); + NGP_EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_3); + + NGP_EXPECT_EQ(t.face_topology(0), stk::topology::QUAD_8); + NGP_EXPECT_EQ(t.face_topology(1), stk::topology::QUAD_8); + + NGP_EXPECT_EQ(t.side_topology(0), stk::topology::QUAD_8); + NGP_EXPECT_EQ(t.side_topology(1), stk::topology::QUAD_8); + NGP_EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.side_topology(5), stk::topology::SHELL_SIDE_BEAM_3); + + check_edge_node_ordinals_ngp(t, goldEdgeNodeOrdinals); + check_edge_nodes_ngp(t, goldEdgeNodeOrdinals); + }); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + check_face_node_ordinals_ngp(t, goldFaceNodeOrdinals); + check_face_nodes_ngp(t, goldFaceNodeOrdinals); + + check_side_node_ordinals_ngp(t, goldSideNodeOrdinals); + check_side_nodes_ngp(t, goldSideNodeOrdinals); + }); +} + +NGP_TEST(stk_topology_ngp, shell_quad_8_all_face_sides) +{ + check_shell_quad_8_all_face_sides_on_device(); +} + +std::vector> get_gold_edge_node_ordinals_shell_quad9() { + return std::vector> { + {0, 1, 4}, + {1, 2, 5}, + {2, 3, 6}, + {3, 0, 7} + }; +} + +std::vector> get_gold_face_node_ordinals_shell_quad9() { + return std::vector> { + {0, 1, 2, 3, 4, 5, 6, 7, 8}, + {0, 3, 2, 1, 7, 6, 5, 4, 8}, + {0, 1, 4}, + {1, 2, 5}, + {2, 3, 6}, + {3, 0, 7} + }; +} + +std::vector> get_gold_side_node_ordinals_shell_quad9() { + return std::vector> { + {0, 1, 2, 3, 4, 5, 6, 7, 8}, + {0, 3, 2, 1, 7, 6, 5, 4, 8}, + {0, 1, 4}, + {1, 2, 5}, + {2, 3, 6}, + {3, 0, 7} + }; +} + +TEST(stk_topology, shell_shell_quad9_all_face_sides) +{ + stk::topology t = stk::topology::SHELL_QUAD_9_ALL_FACE_SIDES; + + EXPECT_TRUE(t.is_valid()); + EXPECT_TRUE(t.has_homogeneous_faces()); + EXPECT_TRUE(t.is_shell()); + + EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + EXPECT_EQ(t.num_nodes(),9u); + EXPECT_EQ(t.num_vertices(),4u); + EXPECT_EQ(t.num_edges(),4u); + EXPECT_EQ(t.num_faces(),6u); + EXPECT_EQ(t.num_sides(),6u); + + EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + EXPECT_EQ(t.base(),stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES); + + EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_3); + EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_3); + EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_3); + EXPECT_EQ(t.edge_topology(3), stk::topology::LINE_3); + + EXPECT_EQ(t.face_topology(0), stk::topology::QUAD_9); + EXPECT_EQ(t.face_topology(1), stk::topology::QUAD_9); + EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.face_topology(5), stk::topology::SHELL_SIDE_BEAM_3); + + EXPECT_EQ(t.side_topology(0), stk::topology::QUAD_9); + EXPECT_EQ(t.side_topology(1), stk::topology::QUAD_9); + EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.side_topology(5), stk::topology::SHELL_SIDE_BEAM_3); + + check_edge_node_ordinals(t, get_gold_edge_node_ordinals_shell_quad9()); + check_edge_nodes(t, get_gold_edge_node_ordinals_shell_quad9()); + + check_face_node_ordinals(t, get_gold_face_node_ordinals_shell_quad9()); + check_face_nodes(t, get_gold_face_node_ordinals_shell_quad9()); + + check_side_node_ordinals(t, get_gold_side_node_ordinals_shell_quad9()); + check_side_nodes(t, get_gold_side_node_ordinals_shell_quad9()); +} + +void check_shell_quad_9_all_face_sides_on_device() +{ + OrdinalType goldEdgeNodeOrdinals = fillGoldOrdinals(get_gold_edge_node_ordinals_shell_quad9()); + OrdinalType goldFaceNodeOrdinals = fillGoldOrdinals(get_gold_face_node_ordinals_shell_quad9()); + OrdinalType goldSideNodeOrdinals = fillGoldOrdinals(get_gold_side_node_ordinals_shell_quad9()); + + stk::topology t = stk::topology::SHELL_QUAD_9_ALL_FACE_SIDES; + constexpr unsigned numNodes = stk::topology_detail::topology_data::num_nodes; + EXPECT_EQ(9u, numNodes); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + NGP_EXPECT_TRUE(t.is_valid()); + NGP_EXPECT_TRUE(t.has_homogeneous_faces()); + NGP_EXPECT_TRUE(t.is_shell()); + + NGP_EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + NGP_EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + NGP_EXPECT_EQ(t.num_nodes(),9u); + NGP_EXPECT_EQ(t.num_vertices(),4u); + NGP_EXPECT_EQ(t.num_edges(),4u); + NGP_EXPECT_EQ(t.num_faces(),6u); + NGP_EXPECT_EQ(t.num_sides(),6u); + + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + NGP_EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + NGP_EXPECT_EQ(t.base(),stk::topology::SHELL_QUAD_4_ALL_FACE_SIDES); + + NGP_EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_3); + NGP_EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_3); + NGP_EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_3); + + NGP_EXPECT_EQ(t.face_topology(0), stk::topology::QUAD_9); + NGP_EXPECT_EQ(t.face_topology(1), stk::topology::QUAD_9); + NGP_EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.face_topology(5), stk::topology::SHELL_SIDE_BEAM_3); + + NGP_EXPECT_EQ(t.side_topology(0), stk::topology::QUAD_9); + NGP_EXPECT_EQ(t.side_topology(1), stk::topology::QUAD_9); + NGP_EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.side_topology(5), stk::topology::SHELL_SIDE_BEAM_3); + + check_edge_node_ordinals_ngp(t, goldEdgeNodeOrdinals); + check_edge_nodes_ngp(t, goldEdgeNodeOrdinals); + }); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + check_face_node_ordinals_ngp(t, goldFaceNodeOrdinals); + check_face_nodes_ngp(t, goldFaceNodeOrdinals); + + check_side_node_ordinals_ngp(t, goldSideNodeOrdinals); + check_side_nodes_ngp(t, goldSideNodeOrdinals); + }); +} + +NGP_TEST(stk_topology_ngp, shell_quad_9_all_face_sides) +{ + check_shell_quad_9_all_face_sides_on_device(); +} + +} diff --git a/packages/stk/stk_unit_tests/stk_topology/utest_c/unit_test_shell_tri_all_face_sides.cpp b/packages/stk/stk_unit_tests/stk_topology/utest_c/unit_test_shell_tri_all_face_sides.cpp new file mode 100644 index 000000000000..f0678301ecd6 --- /dev/null +++ b/packages/stk/stk_unit_tests/stk_topology/utest_c/unit_test_shell_tri_all_face_sides.cpp @@ -0,0 +1,477 @@ +// Copyright 2002 - 2008, 2010, 2011 National Technology Engineering +// Solutions of Sandia, LLC (NTESS). Under the terms of Contract +// DE-NA0003525 with NTESS, the U.S. Government retains certain rights +// in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// * Neither the name of NTESS nor the names of its contributors +// may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +#include "Kokkos_Core.hpp" // for parallel_for, KOKKOS_LAMBDA +#include "gtest/gtest.h" // for AssertionResult, Message, TestPartResult +#include "stk_ngp_test/ngp_test.hpp" // for NGP_EXPECT_EQ, NGP_EXPECT_FALSE, NGP_EXPECT_... +#include "stk_topology/topology.hpp" // for topology, topology::QUAD_4, topology::QUAD_8 +#include "topology_test_utils.hpp" // for check_edge_node_ordinals, check_edge_node_or... +#include // for size_t +#include // for operator<<, basic_ostream, basic_ostream<>::... +#include // for vector + +namespace { + +std::vector> get_gold_edge_node_ordinals_shell_tri3() { + return std::vector> { + {0, 1}, + {1, 2}, + {2, 0} + }; +} + +std::vector> get_gold_face_node_ordinals_shell_tri3() { + return std::vector> { + {0, 1, 2}, + {0, 2, 1}, + {0, 1}, + {1, 2}, + {2, 0} + }; +} + +std::vector> get_gold_side_node_ordinals_shell_tri3() { + return std::vector> { + {0, 1, 2}, + {0, 2, 1}, + {0, 1}, + {1, 2}, + {2, 0} + }; +} + +TEST(stk_topology, shell_tri_3_all_face_sides) +{ + stk::topology t = stk::topology::SHELL_TRI_3_ALL_FACE_SIDES; + + EXPECT_TRUE(t.is_valid()); + EXPECT_TRUE(t.has_homogeneous_faces()); + EXPECT_TRUE(t.is_shell()); + + EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + EXPECT_EQ(t.num_nodes(),3u); + EXPECT_EQ(t.num_vertices(),3u); + EXPECT_EQ(t.num_edges(),3u); + EXPECT_EQ(t.num_faces(),5u); + EXPECT_EQ(t.num_sides(),5u); + + EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + EXPECT_EQ(t.base(),stk::topology::SHELL_TRI_3_ALL_FACE_SIDES); + + EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_2); + EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_2); + EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_2); + + EXPECT_EQ(t.face_topology(0), stk::topology::TRI_3); + EXPECT_EQ(t.face_topology(1), stk::topology::TRI_3); + EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + + EXPECT_EQ(t.side_topology(0), stk::topology::TRI_3); + EXPECT_EQ(t.side_topology(1), stk::topology::TRI_3); + EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + + check_edge_node_ordinals(t, get_gold_edge_node_ordinals_shell_tri3()); + check_edge_nodes(t, get_gold_edge_node_ordinals_shell_tri3()); + + check_face_node_ordinals(t, get_gold_face_node_ordinals_shell_tri3()); + check_face_nodes(t, get_gold_face_node_ordinals_shell_tri3()); + + check_side_node_ordinals(t, get_gold_side_node_ordinals_shell_tri3()); + check_side_nodes(t, get_gold_side_node_ordinals_shell_tri3()); +} + +void check_shell_tri_3_all_face_sides_on_device() +{ + OrdinalType goldEdgeNodeOrdinals = fillGoldOrdinals(get_gold_edge_node_ordinals_shell_tri3()); + OrdinalType goldFaceNodeOrdinals = fillGoldOrdinals(get_gold_face_node_ordinals_shell_tri3()); + OrdinalType goldSideNodeOrdinals = fillGoldOrdinals(get_gold_side_node_ordinals_shell_tri3()); + + stk::topology t = stk::topology::SHELL_TRI_3_ALL_FACE_SIDES; + constexpr unsigned numNodes = stk::topology_detail::topology_data::num_nodes; + EXPECT_EQ(3u, numNodes); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + NGP_EXPECT_TRUE(t.is_valid()); + NGP_EXPECT_TRUE(t.has_homogeneous_faces()); + NGP_EXPECT_TRUE(t.is_shell()); + + NGP_EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + NGP_EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + NGP_EXPECT_EQ(t.num_nodes(),3u); + NGP_EXPECT_EQ(t.num_vertices(),3u); + NGP_EXPECT_EQ(t.num_edges(),3u); + NGP_EXPECT_EQ(t.num_faces(),5u); + NGP_EXPECT_EQ(t.num_sides(),5u); + + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + NGP_EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + NGP_EXPECT_EQ(t.base(),stk::topology::SHELL_TRI_3_ALL_FACE_SIDES); + + NGP_EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_2); + NGP_EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_2); + NGP_EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_2); + + NGP_EXPECT_EQ(t.face_topology(0), stk::topology::TRI_3); + NGP_EXPECT_EQ(t.face_topology(1), stk::topology::TRI_3); + NGP_EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + + NGP_EXPECT_EQ(t.side_topology(0), stk::topology::TRI_3); + NGP_EXPECT_EQ(t.side_topology(1), stk::topology::TRI_3); + NGP_EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + + check_edge_node_ordinals_ngp(t, goldEdgeNodeOrdinals); + check_edge_nodes_ngp(t, goldEdgeNodeOrdinals); + }); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + check_face_node_ordinals_ngp(t, goldFaceNodeOrdinals); + check_face_nodes_ngp(t, goldFaceNodeOrdinals); + + check_side_node_ordinals_ngp(t, goldSideNodeOrdinals); + check_side_nodes_ngp(t, goldSideNodeOrdinals); + }); +} + +NGP_TEST(stk_topology_ngp, shell_tri_3_all_face_sides) +{ + check_shell_tri_3_all_face_sides_on_device(); +} + +std::vector> get_gold_edge_node_ordinals_shell_tri4() { + return std::vector> { + {0, 1}, + {1, 2}, + {2, 0} + }; +} + +std::vector> get_gold_face_node_ordinals_shell_tri4() { + return std::vector> { + {0, 1, 2, 3}, + {0, 2, 1, 3}, + {0, 1}, + {1, 2}, + {2, 0} + }; +} + +std::vector> get_gold_side_node_ordinals_shell_tri4() { + return std::vector> { + {0, 1, 2, 3}, + {0, 2, 1, 3}, + {0, 1}, + {1, 2}, + {2, 0} + }; +} + +TEST(stk_topology, shell_tri_4_all_face_sides) +{ + stk::topology t = stk::topology::SHELL_TRI_4_ALL_FACE_SIDES; + + EXPECT_TRUE(t.is_valid()); + EXPECT_TRUE(t.has_homogeneous_faces()); + EXPECT_TRUE(t.is_shell()); + + EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + EXPECT_EQ(t.num_nodes(),4u); + EXPECT_EQ(t.num_vertices(),3u); + EXPECT_EQ(t.num_faces(),5u); + EXPECT_EQ(t.num_edges(),3u); + EXPECT_EQ(t.num_sides(),5u); + + EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + EXPECT_EQ(t.base(),stk::topology::SHELL_TRI_3_ALL_FACE_SIDES); + + EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_2); + EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_2); + EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_2); + + EXPECT_EQ(t.face_topology(0), stk::topology::TRI_4); + EXPECT_EQ(t.face_topology(1), stk::topology::TRI_4); + EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + + EXPECT_EQ(t.side_topology(0), stk::topology::TRI_4); + EXPECT_EQ(t.side_topology(1), stk::topology::TRI_4); + EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + + check_edge_node_ordinals(t, get_gold_edge_node_ordinals_shell_tri4()); + check_edge_nodes(t, get_gold_edge_node_ordinals_shell_tri4()); + + check_face_node_ordinals(t, get_gold_face_node_ordinals_shell_tri4()); + check_face_nodes(t, get_gold_face_node_ordinals_shell_tri4()); + + check_side_node_ordinals(t, get_gold_side_node_ordinals_shell_tri4()); + check_side_nodes(t, get_gold_side_node_ordinals_shell_tri4()); +} + +void check_shell_tri_4_all_face_sides_on_device() +{ + OrdinalType goldEdgeNodeOrdinals = fillGoldOrdinals(get_gold_edge_node_ordinals_shell_tri4()); + OrdinalType goldFaceNodeOrdinals = fillGoldOrdinals(get_gold_face_node_ordinals_shell_tri4()); + OrdinalType goldSideNodeOrdinals = fillGoldOrdinals(get_gold_side_node_ordinals_shell_tri4()); + + stk::topology t = stk::topology::SHELL_TRI_4_ALL_FACE_SIDES; + constexpr unsigned numNodes = stk::topology_detail::topology_data::num_nodes; + EXPECT_EQ(4u, numNodes); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + NGP_EXPECT_TRUE(t.is_valid()); + NGP_EXPECT_TRUE(t.has_homogeneous_faces()); + NGP_EXPECT_TRUE(t.is_shell()); + + NGP_EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + NGP_EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + NGP_EXPECT_EQ(t.num_nodes(),4u); + NGP_EXPECT_EQ(t.num_vertices(),3u); + NGP_EXPECT_EQ(t.num_edges(),3u); + NGP_EXPECT_EQ(t.num_faces(),5u); + NGP_EXPECT_EQ(t.num_sides(),5u); + + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + NGP_EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + NGP_EXPECT_EQ(t.base(),stk::topology::SHELL_TRI_3_ALL_FACE_SIDES); + + NGP_EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_2); + NGP_EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_2); + NGP_EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_2); + + NGP_EXPECT_EQ(t.face_topology(0), stk::topology::TRI_4); + NGP_EXPECT_EQ(t.face_topology(1), stk::topology::TRI_4); + NGP_EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + + NGP_EXPECT_EQ(t.side_topology(0), stk::topology::TRI_4); + NGP_EXPECT_EQ(t.side_topology(1), stk::topology::TRI_4); + NGP_EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_2); + NGP_EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_2); + + check_edge_node_ordinals_ngp(t, goldEdgeNodeOrdinals); + check_edge_nodes_ngp(t, goldEdgeNodeOrdinals); + }); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + check_face_node_ordinals_ngp(t, goldFaceNodeOrdinals); + check_face_nodes_ngp(t, goldFaceNodeOrdinals); + + check_side_node_ordinals_ngp(t, goldSideNodeOrdinals); + check_side_nodes_ngp(t, goldSideNodeOrdinals); + }); +} + +NGP_TEST(stk_topology_ngp, shell_tri_4_all_face_sides) +{ + check_shell_tri_4_all_face_sides_on_device(); +} + +std::vector> get_gold_edge_node_ordinals_shell_tri6() { + return std::vector> { + {0, 1, 3}, + {1, 2, 4}, + {2, 0, 5} + }; +} + +std::vector> get_gold_face_node_ordinals_shell_tri6() { + return std::vector> { + {0, 1, 2, 3, 4, 5}, + {0, 2, 1, 5, 4, 3}, + {0, 1, 3}, + {1, 2, 4}, + {2, 0, 5} + }; +} + +std::vector> get_gold_side_node_ordinals_shell_tri6() { + return std::vector> { + {0, 1, 2, 3, 4, 5}, + {0, 2, 1, 5, 4, 3}, + {0, 1, 3}, + {1, 2, 4}, + {2, 0, 5} + }; +} + +TEST(stk_topology, shell_tri_6_all_face_sides) +{ + stk::topology t = stk::topology::SHELL_TRI_6_ALL_FACE_SIDES; + + EXPECT_TRUE(t.is_valid()); + EXPECT_TRUE(t.has_homogeneous_faces()); + EXPECT_TRUE(t.is_shell()); + + EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + EXPECT_EQ(t.num_nodes(),6u); + EXPECT_EQ(t.num_vertices(),3u); + EXPECT_EQ(t.num_faces(),5u); + EXPECT_EQ(t.num_edges(),3u); + EXPECT_EQ(t.num_sides(),5u); + + EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + EXPECT_EQ(t.base(),stk::topology::SHELL_TRI_3_ALL_FACE_SIDES); + + EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_3); + EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_3); + EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_3); + + EXPECT_EQ(t.face_topology(0), stk::topology::TRI_6); + EXPECT_EQ(t.face_topology(1), stk::topology::TRI_6); + EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + + EXPECT_EQ(t.side_topology(0), stk::topology::TRI_6); + EXPECT_EQ(t.side_topology(1), stk::topology::TRI_6); + EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + + check_edge_node_ordinals(t, get_gold_edge_node_ordinals_shell_tri6()); + check_edge_nodes(t, get_gold_edge_node_ordinals_shell_tri6()); + + check_face_node_ordinals(t, get_gold_face_node_ordinals_shell_tri6()); + check_face_nodes(t, get_gold_face_node_ordinals_shell_tri6()); + + check_side_node_ordinals(t, get_gold_side_node_ordinals_shell_tri6()); + check_side_nodes(t, get_gold_side_node_ordinals_shell_tri6()); +} + +void check_shell_tri_6_all_face_sides_on_device() +{ + OrdinalType goldEdgeNodeOrdinals = fillGoldOrdinals(get_gold_edge_node_ordinals_shell_tri6()); + OrdinalType goldFaceNodeOrdinals = fillGoldOrdinals(get_gold_face_node_ordinals_shell_tri6()); + OrdinalType goldSideNodeOrdinals = fillGoldOrdinals(get_gold_side_node_ordinals_shell_tri6()); + + stk::topology t = stk::topology::SHELL_TRI_6_ALL_FACE_SIDES; + constexpr unsigned numNodes = stk::topology_detail::topology_data::num_nodes; + EXPECT_EQ(6u, numNodes); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + NGP_EXPECT_TRUE(t.is_valid()); + NGP_EXPECT_TRUE(t.has_homogeneous_faces()); + NGP_EXPECT_TRUE(t.is_shell()); + + NGP_EXPECT_EQ(t.rank(),stk::topology::ELEMENT_RANK); + NGP_EXPECT_EQ(t.side_rank(),stk::topology::FACE_RANK); + + NGP_EXPECT_EQ(t.num_nodes(),6u); + NGP_EXPECT_EQ(t.num_vertices(),3u); + NGP_EXPECT_EQ(t.num_edges(),3u); + NGP_EXPECT_EQ(t.num_faces(),5u); + NGP_EXPECT_EQ(t.num_sides(),5u); + + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(1)); + NGP_EXPECT_FALSE(t.defined_on_spatial_dimension(2)); + NGP_EXPECT_TRUE(t.defined_on_spatial_dimension(3)); + + NGP_EXPECT_EQ(t.base(),stk::topology::SHELL_TRI_3_ALL_FACE_SIDES); + + NGP_EXPECT_EQ(t.edge_topology(0), stk::topology::LINE_3); + NGP_EXPECT_EQ(t.edge_topology(1), stk::topology::LINE_3); + NGP_EXPECT_EQ(t.edge_topology(2), stk::topology::LINE_3); + + NGP_EXPECT_EQ(t.face_topology(0), stk::topology::TRI_6); + NGP_EXPECT_EQ(t.face_topology(1), stk::topology::TRI_6); + NGP_EXPECT_EQ(t.face_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.face_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.face_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + + NGP_EXPECT_EQ(t.side_topology(0), stk::topology::TRI_6); + NGP_EXPECT_EQ(t.side_topology(1), stk::topology::TRI_6); + NGP_EXPECT_EQ(t.side_topology(2), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.side_topology(3), stk::topology::SHELL_SIDE_BEAM_3); + NGP_EXPECT_EQ(t.side_topology(4), stk::topology::SHELL_SIDE_BEAM_3); + + check_edge_node_ordinals_ngp(t, goldEdgeNodeOrdinals); + check_edge_nodes_ngp(t, goldEdgeNodeOrdinals); + }); + + Kokkos::parallel_for(stk::ngp::DeviceRangePolicy(0, 1), KOKKOS_LAMBDA(const int i) + { + check_face_node_ordinals_ngp(t, goldFaceNodeOrdinals); + check_face_nodes_ngp(t, goldFaceNodeOrdinals); + + check_side_node_ordinals_ngp(t, goldSideNodeOrdinals); + check_side_nodes_ngp(t, goldSideNodeOrdinals); + }); +} + +NGP_TEST(stk_topology_ngp, shell_tri_6_all_face_sides) +{ + check_shell_tri_6_all_face_sides_on_device(); +} + +} + + diff --git a/packages/stk/stk_util/stk_util/Version.hpp b/packages/stk/stk_util/stk_util/Version.hpp index e78c59ef4158..fd0d003e2e0a 100644 --- a/packages/stk/stk_util/stk_util/Version.hpp +++ b/packages/stk/stk_util/stk_util/Version.hpp @@ -44,7 +44,7 @@ //See the file CHANGELOG.md for a listing that shows the //correspondence between version numbers and API changes. -#define STK_VERSION 5210300 +#define STK_VERSION 5210401 namespace stk diff --git a/packages/stk/stk_util/stk_util/environment/Env.cpp b/packages/stk/stk_util/stk_util/environment/Env.cpp index 4b3298d9dbe7..00e106be96ad 100644 --- a/packages/stk/stk_util/stk_util/environment/Env.cpp +++ b/packages/stk/stk_util/stk_util/environment/Env.cpp @@ -311,11 +311,16 @@ void abort() // Cannot be sure of parallel synchronization status; therefore, no communications can // occur. Grab and dump all pending output buffers to 'std::cerr'. + const auto& log_file = get_param("output-log"); + std::string log_note; + if( !log_file.empty() ) { + log_note = " (" + log_file + ")"; + } std::cerr << std::endl << "*** SIERRA ABORT on P" << stk::EnvData::instance().m_parallelRank << " ***" << std::endl - << "*** check " << get_param("output-log") - << " file for more information ***" + << "*** check the log file" << log_note + << " for more information ***" << std::endl ; if (!env_data.m_output.str().empty()) { diff --git a/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp b/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp index f9f405a5fa8f..33d28485af59 100644 --- a/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp +++ b/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp @@ -42,7 +42,7 @@ //In Sierra, STK_VERSION_STRING is provided on the compile line by bake. //For Trilinos stk snapshots, the following macro definition gets populated with //the real version string by the trilinos_snapshot.sh script. -#define STK_VERSION_STRING "5.21.3-349-g841d4587" +#define STK_VERSION_STRING "5.21.4-85-gd1ee7818" #endif namespace stk { diff --git a/packages/stk/stk_util/stk_util/stk_kokkos_macros.h b/packages/stk/stk_util/stk_util/stk_kokkos_macros.h index 3362bc1af547..5d93320fc5d5 100644 --- a/packages/stk/stk_util/stk_util/stk_kokkos_macros.h +++ b/packages/stk/stk_util/stk_util/stk_kokkos_macros.h @@ -23,4 +23,3 @@ #define STK_FUNCTION KOKKOS_FUNCTION #endif - diff --git a/packages/stk/stk_util/stk_util/util/BlasLapack.hpp b/packages/stk/stk_util/stk_util/util/BlasLapack.hpp index 69cb3ac89628..539f38ab014c 100644 --- a/packages/stk/stk_util/stk_util/util/BlasLapack.hpp +++ b/packages/stk/stk_util/stk_util/util/BlasLapack.hpp @@ -6,15 +6,15 @@ // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: -// +// // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. -// +// // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. -// +// // * Neither the name of NTESS nor the names of its contributors // may be used to endorse or promote products derived from this // software without specific prior written permission. @@ -30,7 +30,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +// #ifndef STK_UTIL_UTIL_BlasLapack_hpp #define STK_UTIL_UTIL_BlasLapack_hpp @@ -101,8 +101,8 @@ void SIERRA_FORTRAN(dgecon)(const char* NORM,const int* N, const double* A, cons void SIERRA_FORTRAN(dgesvd)(const char* jobu, const char* jobvt, const int* m, const int* n, double* a, const int* lda, double* s, double* u, const int* ldu, double* vt, const int* ldvt, - double* work, const int* lwork, int* info ); - + double* work, const int* lwork, int* info ); + void SIERRA_FORTRAN(dgeqp3)(int* m, int* n, double* A, int* lda, int* jpvt, double* tau, double* work, int* lwork, int* info); #elif !defined(_MKL_LAPACK_H_)