From 0f602c8f3107b39857d8ea48ecb3b3d7cd0480a0 Mon Sep 17 00:00:00 2001 From: Victor Brunini Date: Sat, 13 Jul 2024 10:18:54 -0700 Subject: [PATCH 01/22] tacho: Fix compile errors with Kokkos_ENABLE_IMPL_HIP_UNIFIED_MEMORY=ON. --- .../shylu_node/tacho/src/impl/Tacho_NumericTools_Base.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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: /// From fd5dc88906788b822641186aec5976f957264944 Mon Sep 17 00:00:00 2001 From: Victor Brunini Date: Sat, 13 Jul 2024 10:33:48 -0700 Subject: [PATCH 02/22] amesos2: Fix UMFPACK building with HIP. --- .../amesos2/src/Amesos2_Umfpack_FunctionMap.hpp | 16 ++++++++-------- packages/amesos2/src/Amesos2_Umfpack_TypeMap.hpp | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) 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; }; From 826b8eee3672b40d4b8c634d87cf135f90d51d59 Mon Sep 17 00:00:00 2001 From: Victor Brunini Date: Thu, 15 Aug 2024 09:10:16 -0700 Subject: [PATCH 03/22] minitensor: Fix HIP build error from mismatched KOKKOS_INLINE_FUNCTION between declarationa nd definition. --- packages/minitensor/src/MiniTensor_Geometry.h | 1 - 1 file changed, 1 deletion(-) 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); From cc9944ed7e9b8176afd671c5ddda8c8b776b80df Mon Sep 17 00:00:00 2001 From: Anderson Chauphan Date: Thu, 22 Aug 2024 11:48:18 -0500 Subject: [PATCH 04/22] Add pre-check job to AT2 workflow to skip dupes Add a pre-check job in the AutoTester2 workflow file that will check if a previous run with the same hash has already run and passed and return a value as an output of that job step. Other jobs can depend on the output of the pre-check job to determine if they should run. The goal of this is to prevent duplicate runs from occuring. The primary case is when AT2 workflow is triggered by a pull request commit, the run passes, and the pull request gets an approved review which triggers AT2 again (needed for external review). This case consumes more resources than needed and this pre-check job should help allevate the resource inefficiency. Story-ref: TRILFRAME-667 Signed-off-by: Anderson Chauphan --- .github/workflows/AT2.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/AT2.yml b/.github/workflows/AT2.yml index f081d16c9b3d..788534afa719 100644 --- a/.github/workflows/AT2.yml +++ b/.github/workflows/AT2.yml @@ -17,6 +17,17 @@ permissions: 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: 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' }} @@ -174,8 +185,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: From f0b3185cd7d2673ee31c0486c2e8ebca5ff46abf Mon Sep 17 00:00:00 2001 From: Anderson Chauphan Date: Wed, 28 Aug 2024 23:23:44 -0500 Subject: [PATCH 05/22] Update workflow permissions skip-duplicate-actions requires actions:write permissions --- .github/workflows/AT2.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/AT2.yml b/.github/workflows/AT2.yml index 788534afa719..9ea18b592908 100644 --- a/.github/workflows/AT2.yml +++ b/.github/workflows/AT2.yml @@ -13,7 +13,9 @@ on: - develop workflow_dispatch: +# actions: write needed by skip-duplicate-actions permissions: + actions: write contents: read jobs: From 798fc70077f2bf8f211d8a1825b7cc6a3fe9ad35 Mon Sep 17 00:00:00 2001 From: malphil Date: Fri, 30 Aug 2024 13:23:21 -0600 Subject: [PATCH 06/22] Explicitly cast pt0 + pt1 - 1 term in intrepid2 to ScalarType --- packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp b/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp index 6d9070dfda32..d21e77553fac 100644 --- a/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp +++ b/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp @@ -840,7 +840,7 @@ 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 ); + const ScalarType distance = max( max( -point(0), -point(1) ), ScalarType( point(0) + point(1) - 1.0 ) ); return distance < threshold; } From f495f13e1afb36230cc274dbbea624c820b751b5 Mon Sep 17 00:00:00 2001 From: mperego Date: Sun, 1 Sep 2024 15:41:10 -0600 Subject: [PATCH 07/22] Intrepid2: replace CellTopology member in Basis class with its key (#13411) We want to be able to copy the Intrepid2::Basis class on device for calling virtual functions, but CellTopology member is not device friendly. For this reason we replace it with its identifier (the cell topology key) and add the function getCellTopologyData(unsigned key) in CellData file that allows to retrieve the Cell topology from its key. --- packages/intrepid2/src/Cell/CMakeLists.txt | 4 + .../intrepid2/src/Cell/Intrepid2_CellData.cpp | 91 +++++++++++++++++++ .../intrepid2/src/Cell/Intrepid2_CellData.hpp | 2 + .../Discretization/Basis/Intrepid2_Basis.hpp | 9 +- .../Basis/Intrepid2_BasisDef.hpp | 2 +- .../Basis/Intrepid2_DirectSumBasis.hpp | 8 +- .../Basis/Intrepid2_HCURL_HEX_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HCURL_HEX_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HCURL_HEX_In_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HCURL_QUAD_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HCURL_QUAD_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HCURL_QUAD_In_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HCURL_TET_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HCURL_TET_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HCURL_TET_In_FEMDef.hpp | 41 +++++---- .../Basis/Intrepid2_HCURL_TRI_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HCURL_TRI_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HCURL_TRI_In_FEMDef.hpp | 29 +++--- .../Basis/Intrepid2_HCURL_WEDGE_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HCURL_WEDGE_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HDIV_HEX_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HDIV_HEX_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HDIV_HEX_In_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HDIV_QUAD_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HDIV_QUAD_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HDIV_QUAD_In_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HDIV_TET_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HDIV_TET_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HDIV_TET_In_FEMDef.hpp | 29 +++--- .../Basis/Intrepid2_HDIV_TRI_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HDIV_TRI_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HDIV_TRI_In_FEMDef.hpp | 30 +++--- .../Basis/Intrepid2_HDIV_WEDGE_I1_FEM.hpp | 2 +- .../Basis/Intrepid2_HDIV_WEDGE_I1_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HGRAD_HEX_C1_FEMDef.hpp | 5 +- .../Basis/Intrepid2_HGRAD_HEX_C2_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_HEX_Cn_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_LINE_C1_FEM.hpp | 2 +- .../Basis/Intrepid2_HGRAD_LINE_C1_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_LINE_C2_FEM.hpp | 2 +- .../Basis/Intrepid2_HGRAD_LINE_C2_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_LINE_Cn_FEMDef.hpp | 17 ++-- .../Intrepid2_HGRAD_LINE_Cn_FEM_JACOBIDef.hpp | 12 +-- .../Basis/Intrepid2_HGRAD_PYR_C1_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_PYR_I2_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_QUAD_C1_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_QUAD_C2_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_QUAD_Cn_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HGRAD_TET_C1_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_TET_C2_FEMDef.hpp | 15 +-- .../Intrepid2_HGRAD_TET_COMP12_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_TET_Cn_FEMDef.hpp | 41 +++++---- .../Intrepid2_HGRAD_TET_Cn_FEM_ORTHDef.hpp | 12 +-- .../Basis/Intrepid2_HGRAD_TRI_C1_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_TRI_C2_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_TRI_Cn_FEMDef.hpp | 15 +-- .../Intrepid2_HGRAD_TRI_Cn_FEM_ORTHDef.hpp | 12 +-- .../Basis/Intrepid2_HGRAD_WEDGE_C1_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HGRAD_WEDGE_C2_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HVOL_C0_FEM.hpp | 2 +- .../Basis/Intrepid2_HVOL_C0_FEMDef.hpp | 12 +-- .../Basis/Intrepid2_HVOL_HEX_Cn_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HVOL_LINE_Cn_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HVOL_QUAD_Cn_FEMDef.hpp | 15 +-- .../Basis/Intrepid2_HVOL_TET_Cn_FEMDef.hpp | 17 ++-- .../Basis/Intrepid2_HVOL_TRI_Cn_FEMDef.hpp | 17 ++-- .../Intrepid2_HierarchicalBasis_HCURL_TET.hpp | 7 +- .../Intrepid2_HierarchicalBasis_HCURL_TRI.hpp | 19 ++-- .../Intrepid2_HierarchicalBasis_HDIV_PYR.hpp | 14 +-- .../Intrepid2_HierarchicalBasis_HDIV_TET.hpp | 6 +- ...id2_IntegratedLegendreBasis_HGRAD_LINE.hpp | 12 +-- ...pid2_IntegratedLegendreBasis_HGRAD_PYR.hpp | 16 ++-- ...pid2_IntegratedLegendreBasis_HGRAD_TET.hpp | 16 ++-- ...pid2_IntegratedLegendreBasis_HGRAD_TRI.hpp | 16 ++-- .../Intrepid2_LegendreBasis_HVOL_LINE.hpp | 12 +-- .../Intrepid2_LegendreBasis_HVOL_PYR.hpp | 12 +-- .../Intrepid2_LegendreBasis_HVOL_TET.hpp | 12 +-- .../Intrepid2_LegendreBasis_HVOL_TRI.hpp | 12 +-- .../Basis/Intrepid2_SerendipityBasis.hpp | 6 +- .../Basis/Intrepid2_TensorBasis.hpp | 14 +-- 80 files changed, 637 insertions(+), 495 deletions(-) create mode 100644 packages/intrepid2/src/Cell/Intrepid2_CellData.cpp 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/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(); From 3fa2a33e1107ee1937a3a65de39a39c02350a4de Mon Sep 17 00:00:00 2001 From: Kim Liegeois Date: Mon, 2 Sep 2024 08:19:35 -0600 Subject: [PATCH 08/22] Piro: update perfanalysis for transient analysis and modify `ThyraProductME_TempusFinalObjective` to override member functions (#13415) * Update perfanalysis * Remove const for the gradient member function and use the override keyword for the gradient member function * build warning free Signed-off-by: kliegeois --------- Signed-off-by: kliegeois --- packages/piro/src/Piro_PerformAnalysis.cpp | 192 +++++++++++------- packages/piro/src/Piro_TempusIntegrator.hpp | 2 + .../piro/src/Piro_TempusIntegrator_Def.hpp | 15 ++ packages/piro/src/Piro_TempusSolver.hpp | 7 +- packages/piro/src/Piro_TempusSolver_Def.hpp | 17 +- ...o_ThyraProductME_Tempus_FinalObjective.hpp | 84 ++++++-- .../piro/test/Main_AnalysisDriver_Tempus.cpp | 51 +---- ...ut_Analysis_ROL_ReducedSpace_Transient.xml | 6 + ...OL_ReducedSpace_Transient_2_parameters.xml | 6 + ...pace_Transient_Integrated_Response_MSD.xml | 6 + ...nalysis_ROL_ReducedSpace_Transient_MSD.xml | 6 + ...nput_Analysis_ROL_Tempus_Transient_MSD.xml | 13 +- 12 files changed, 264 insertions(+), 141 deletions(-) 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 @@ + From fda77db7c6944486e39e121ecbbafbf1d0bbb082 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 22:54:42 +0000 Subject: [PATCH 09/22] Bump actions/upload-artifact from 4.3.6 to 4.4.0 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.6 to 4.4.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/834a144ee995460fba8ed112a2fc961b36a5ec5a...50769540e7f4bd5e21e526ee35c689e35e0d6874) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/clang_format.yml | 2 +- .github/workflows/scorecards.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/scorecards.yml b/.github/workflows/scorecards.yml index 1a77e450bd96..942d1fd062ab 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 From 065978f4199cfb0a3840a46e97e07d3c11624b93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 22:54:52 +0000 Subject: [PATCH 10/22] Bump github/codeql-action from 3.26.5 to 3.26.6 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.5 to 3.26.6. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/2c779ab0d087cd7fe7b826087247c2c81f27bfa6...4dd16135b69a43b6c8efb853346f8437d92d3c93) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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..b28c7b0a206c 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -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 From 1ae6e2b3e3e43a37332eb55194527e11b8a2968c Mon Sep 17 00:00:00 2001 From: Alan Williams Date: Tue, 3 Sep 2024 08:11:27 -0600 Subject: [PATCH 11/22] STK: Snapshot 09-03-24 08:11 from Sierra 5.21.3-738-g0d57d6ac --- packages/stk/CHANGELOG.md | 3 + .../stk/stk_expreval/stk_expreval/Eval.cpp | 5 +- .../stk/stk_expreval/stk_expreval/NgpNode.hpp | 5 +- .../stk/stk_expreval/stk_expreval/Node.cpp | 24 +- .../stk/stk_expreval/stk_expreval/Node.hpp | 9 +- .../stk/stk_expreval/stk_expreval/Parser.cpp | 72 +-- packages/stk/stk_io/stk_io/MeshField.hpp | 1 + .../stk/stk_mesh/stk_mesh/base/BulkData.cpp | 12 +- .../stk/stk_mesh/stk_mesh/base/BulkData.hpp | 2 +- .../stk_mesh/stk_mesh/base/CreateEdges.cpp | 25 +- .../stk_mesh/stk_mesh/base/CreateEdges.hpp | 12 +- .../stk_mesh/stk_mesh/base/DeviceField.hpp | 79 +-- packages/stk/stk_mesh/stk_mesh/base/Field.hpp | 2 +- .../stk_mesh/stk_mesh/base/ForEachEntity.hpp | 18 + .../stk_mesh/stk_mesh/base/GetNgpField.hpp | 1 + .../stk/stk_mesh/stk_mesh/base/MetaData.hpp | 2 +- .../stk_mesh/baseImpl/AuraGhosting.cpp | 2 +- .../stk_mesh/baseImpl/BucketConnDynamic.hpp | 4 +- .../stk_mesh/baseImpl/CreateEdgesOnFaces.cpp | 184 ++++++ .../stk_mesh/baseImpl/CreateEdgesOnFaces.hpp | 90 +++ .../stk_mesh/baseImpl/DeleteEdgesOnFaces.cpp | 82 +++ .../stk_mesh/baseImpl/DeleteEdgesOnFaces.hpp | 67 ++ .../stk_mesh/baseImpl/DeletedElementInfo.hpp | 9 + .../ForEachEntityLoopAbstractions.hpp | 21 +- .../stk_mesh/baseImpl/MeshImplUtils.cpp | 46 +- .../stk_mesh/baseImpl/MeshModification.cpp | 42 +- .../stk_mesh/stk_mesh/baseImpl/Visitors.hpp | 8 +- .../baseImpl/elementGraph/ElemElemGraph.cpp | 6 +- .../elementGraph/ElemElemGraphUpdater.hpp | 24 + .../stk_ngp_test/GlobalReporter.hpp | 2 +- .../arborx/LocalCoarseSearchArborX.hpp | 3 + .../morton_lbvh/CoarseSearchMortonLBVH.hpp | 7 + .../LocalCoarseSearchMortonLBVH.hpp | 7 + .../MortonLBVH_TreeManipulationUtils.hpp | 2 +- .../stk/stk_tools/stk_tools/CMakeLists.txt | 2 +- .../stk_unit_test_utils/FaceTestingUtils.cpp | 14 +- .../stk_unit_test_utils/getOption.h | 1 - .../stk_expreval/UnitTestEvaluator.cpp | 24 +- .../stk_mesh/UnitTestBulkData.cpp | 15 +- .../stk_mesh/UnitTestSideSet.cpp | 98 +++ .../edge_creation/UnitTestEdgesOnFaces.cpp | 385 ++++++++++++ .../stk_mesh/ngp/ngpFieldTest.cpp | 586 +++++++++++++++++- .../stk_search/UnitTestCoarseSearch.cpp | 4 + .../stk_search/UnitTestCoarseSearchTwoBox.cpp | 2 + .../UnitTestCoarseSearchTwoSpheres.cpp | 2 + packages/stk/stk_util/stk_util/Version.hpp | 2 +- .../stk/stk_util/stk_util/environment/Env.cpp | 9 +- .../stk_util/registry/ProductRegistry.cpp | 2 +- .../stk/stk_util/stk_util/stk_kokkos_macros.h | 1 - .../stk/stk_util/stk_util/util/BlasLapack.hpp | 12 +- 50 files changed, 1828 insertions(+), 209 deletions(-) create mode 100644 packages/stk/stk_mesh/stk_mesh/baseImpl/CreateEdgesOnFaces.cpp create mode 100644 packages/stk/stk_mesh/stk_mesh/baseImpl/CreateEdgesOnFaces.hpp create mode 100644 packages/stk/stk_mesh/stk_mesh/baseImpl/DeleteEdgesOnFaces.cpp create mode 100644 packages/stk/stk_mesh/stk_mesh/baseImpl/DeleteEdgesOnFaces.hpp create mode 100644 packages/stk/stk_unit_tests/stk_mesh/edge_creation/UnitTestEdgesOnFaces.cpp diff --git a/packages/stk/CHANGELOG.md b/packages/stk/CHANGELOG.md index ea776354f2ad..f8931f947e61 100644 --- a/packages/stk/CHANGELOG.md +++ b/packages/stk/CHANGELOG.md @@ -1,5 +1,8 @@ # CHANGELOG +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/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/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/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_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.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/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_tools/stk_tools/CMakeLists.txt b/packages/stk/stk_tools/stk_tools/CMakeLists.txt index 92669929f25b..0881245011ee 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) 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..12fe09008b9b 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,28 @@ 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)")); +} + + #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/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/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/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_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_util/stk_util/Version.hpp b/packages/stk/stk_util/stk_util/Version.hpp index e78c59ef4158..12be53701b43 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 5210400 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..975965501caa 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.3-738-g0d57d6ac" #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_) From cfcdf6209b4ba75e8dfc3c67eb3d61cb0d320818 Mon Sep 17 00:00:00 2001 From: Anderson Chauphan Date: Tue, 3 Sep 2024 11:13:03 -0500 Subject: [PATCH 12/22] Add pre-checks job requirement to gcc-serial and gcc-openmpi Add pre-checks job requirement to gcc-serial and gcc-openmpi jobs that will allow jobs to be skipped if another workflow run was found to have already successfully run. Signed-off-by: Anderson Chauphan --- .github/workflows/AT2.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/AT2.yml b/.github/workflows/AT2.yml index 9ea18b592908..8b1d800cb025 100644 --- a/.github/workflows/AT2.yml +++ b/.github/workflows/AT2.yml @@ -31,8 +31,9 @@ jobs: 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: @@ -109,8 +110,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: From b4fd996bec437450c04d9b1855f45a2b7de38877 Mon Sep 17 00:00:00 2001 From: "Samuel E. Browne" Date: Tue, 3 Sep 2024 10:52:58 -0600 Subject: [PATCH 13/22] Remove modification of source tree Modifying the source tree prior to building causes warnings/errors in the update step for CDash. We should not need this modification because the genconfig step in the PR driver uses the `--force` option. Signed-off-by: Samuel E. Browne --- .github/workflows/AT2.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/AT2.yml b/.github/workflows/AT2.yml index f081d16c9b3d..22649b2c9806 100644 --- a/.github/workflows/AT2.yml +++ b/.github/workflows/AT2.yml @@ -71,7 +71,6 @@ 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}" @@ -149,7 +148,6 @@ 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}" @@ -226,7 +224,6 @@ 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}" From 22fd8f5d3831e7b4c46bc9bda05d910f2b314f73 Mon Sep 17 00:00:00 2001 From: "Samuel E. Browne" Date: Tue, 3 Sep 2024 11:03:51 -0600 Subject: [PATCH 14/22] Start to remove unused arguments Several arguments are unused by lower code: pullrequest_job_name source_repo_url target_repo_url So, start to remove them from calls. Also make the arguments not-required, but leave them to avoid changing/breaking the CLI for any direct usages not in PullRequestLinuxDriver.sh Allows for cleaning up calls into the PR scripts, which simplifies the AT2 workflow file. Signed-off-by: Samuel E. Browne --- .github/workflows/AT2.yml | 9 --------- packages/framework/pr_tools/PullRequestLinuxDriver.sh | 3 --- .../framework/pr_tools/PullRequestLinuxDriverTest.py | 9 ++++++--- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/.github/workflows/AT2.yml b/.github/workflows/AT2.yml index 22649b2c9806..7f3937e40de3 100644 --- a/.github/workflows/AT2.yml +++ b/.github/workflows/AT2.yml @@ -76,10 +76,7 @@ jobs: 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 \ @@ -153,10 +150,7 @@ jobs: 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 \ @@ -229,10 +223,7 @@ jobs: 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 \ 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..3b1fb7edc637 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", From 7b8ca19475edf8c3c940d24ab552d6bdee0f7521 Mon Sep 17 00:00:00 2001 From: "Samuel E. Browne" Date: Tue, 3 Sep 2024 11:26:28 -0600 Subject: [PATCH 15/22] Make job number argument optional Only "needed" from Jenkins. When not in Jenkins, avoid making the caller pass zero. If we need the names differentiated per-build, we'll have to figure out something else to pass (and then renaming the option may make more sense). Signed-off-by: Samuel E. Browne --- .github/workflows/AT2.yml | 3 --- packages/framework/pr_tools/PullRequestLinuxDriverTest.py | 3 ++- .../trilinosprhelpers/TrilinosPRConfigurationBase.py | 6 ++++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/AT2.yml b/.github/workflows/AT2.yml index 7f3937e40de3..73517c7e1d9d 100644 --- a/.github/workflows/AT2.yml +++ b/.github/workflows/AT2.yml @@ -79,7 +79,6 @@ jobs: --target-branch-name ${{ github.event.pull_request.base.ref }} \ --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 \ @@ -153,7 +152,6 @@ jobs: --target-branch-name ${{ github.event.pull_request.base.ref }} \ --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 \ @@ -226,7 +224,6 @@ jobs: --target-branch-name ${{ github.event.pull_request.base.ref }} \ --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/packages/framework/pr_tools/PullRequestLinuxDriverTest.py b/packages/framework/pr_tools/PullRequestLinuxDriverTest.py index 3b1fb7edc637..10a391f1cf18 100755 --- a/packages/framework/pr_tools/PullRequestLinuxDriverTest.py +++ b/packages/framework/pr_tools/PullRequestLinuxDriverTest.py @@ -109,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..6f0c0f0ced88 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 "UNKNOWN" not in 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: From 22d231a3a3e775fd8d0c4b0144e759b9e1eecfaf Mon Sep 17 00:00:00 2001 From: "Samuel E. Browne" Date: Wed, 4 Sep 2024 08:52:14 -0600 Subject: [PATCH 16/22] Force all packages off for Framework testing Signed-off-by: Samuel E. Browne --- packages/framework/ini-files/config-specs.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/ini-files/config-specs.ini b/packages/framework/ini-files/config-specs.ini index 1a76ae6fd5b5..cac62a754a22 100644 --- a/packages/framework/ini-files/config-specs.ini +++ b/packages/framework/ini-files/config-specs.ini @@ -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 From 5bf9ec25b040f6c81028e434c885b2dfe60d1403 Mon Sep 17 00:00:00 2001 From: "Samuel E. Browne" Date: Wed, 4 Sep 2024 10:12:52 -0600 Subject: [PATCH 17/22] Fix logic for "no jenkins build number" Signed-off-by: Samuel E. Browne --- .../pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py b/packages/framework/pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py index 6f0c0f0ced88..bb503b9d17a9 100644 --- a/packages/framework/pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py +++ b/packages/framework/pr_tools/trilinosprhelpers/TrilinosPRConfigurationBase.py @@ -484,7 +484,7 @@ def pullrequest_build_name(self): """ if "Pull Request" in self.arg_pullrequest_cdash_track: output = f"PR-{self.arg_pullrequest_number}-test-{self.arg_pr_genconfig_job_name}" - if "UNKNOWN" not in self.arg_jenkins_job_number: + 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 From 5c74c27010018e35d2d7784f3336eda0a835c21d Mon Sep 17 00:00:00 2001 From: "Samuel E. Browne" Date: Wed, 4 Sep 2024 10:40:11 -0600 Subject: [PATCH 18/22] Fix help message testing Signed-off-by: Samuel E. Browne --- .../test_PullRequestLinuxDriverTest.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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', From 6cf4a8e2ced28d1ac4649d592d8e92ac7af4a61c Mon Sep 17 00:00:00 2001 From: "Samuel E. Browne" Date: Wed, 4 Sep 2024 11:25:51 -0600 Subject: [PATCH 19/22] Clean up all RHEL7 configurations Collapse inherit sections as appropriate for clarity as well. Signed-off-by: Samuel E. Browne --- packages/framework/ini-files/config-specs.ini | 1566 ++--------------- 1 file changed, 100 insertions(+), 1466 deletions(-) diff --git a/packages/framework/ini-files/config-specs.ini b/packages/framework/ini-files/config-specs.ini index 1a76ae6fd5b5..ec4d7faa97e7 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 # @@ -908,7 +908,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 +1150,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 +1181,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 +1297,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 +1356,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 @@ -1946,559 +1445,31 @@ opt-set-cmake-var Tempus_DIRK_Staggered_FSA_SDIRK_5_Stage_4th_Order_MPI_1_DISABL 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 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_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-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 +1566,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 +1576,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 +1596,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 +1607,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 +1708,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 +1715,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 @@ -3508,7 +2136,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 +2153,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 From f6f479636a37f3eb09e685f1f2925f795785bf5b Mon Sep 17 00:00:00 2001 From: "Samuel E. Browne" Date: Wed, 4 Sep 2024 13:47:34 -0600 Subject: [PATCH 20/22] Finish removing unused section Signed-off-by: Samuel E. Browne --- packages/framework/ini-files/config-specs.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/framework/ini-files/config-specs.ini b/packages/framework/ini-files/config-specs.ini index ec4d7faa97e7..59d7aef5f3ce 100644 --- a/packages/framework/ini-files/config-specs.ini +++ b/packages/framework/ini-files/config-specs.ini @@ -1898,7 +1898,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 @@ -1954,7 +1954,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 @@ -1995,7 +1995,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 From 13092ecb26fb469ac088b42b9553e50face1f4e3 Mon Sep 17 00:00:00 2001 From: Mauro Perego Date: Thu, 5 Sep 2024 14:06:45 -0600 Subject: [PATCH 21/22] Intrepid2: Fix inclusion test Fixed some issues exposed by a Sierra test using float instead of double. Added Cell inclusion tests using the float type. --- .../src/Cell/Intrepid2_CellDataDef.hpp | 31 ++- .../Cell/Intrepid2_CellToolsDefInclusion.hpp | 12 +- ...id2_CubatureDirectLineGaussJacobi20Def.hpp | 2 +- .../Intrepid2_CubatureDirectTetDefaultDef.hpp | 2 +- ...ntrepid2_CubatureDirectTetSymmetricDef.hpp | 2 +- .../Intrepid2_CubatureDirectTriDefaultDef.hpp | 2 +- ...ntrepid2_CubatureDirectTriSymmetricDef.hpp | 2 +- .../intrepid2/src/Shared/Intrepid2_Types.hpp | 2 +- .../intrepid2/unit-test/Cell/CMakeLists.txt | 4 + packages/intrepid2/unit-test/Cell/test_01.hpp | 2 +- packages/intrepid2/unit-test/Cell/test_02.hpp | 4 +- packages/intrepid2/unit-test/Cell/test_03.hpp | 2 +- packages/intrepid2/unit-test/Cell/test_04.hpp | 4 +- packages/intrepid2/unit-test/Cell/test_06.hpp | 2 +- packages/intrepid2/unit-test/Cell/test_07.hpp | 247 +++++++++--------- 15 files changed, 164 insertions(+), 156 deletions(-) diff --git a/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp b/packages/intrepid2/src/Cell/Intrepid2_CellDataDef.hpp index d21e77553fac..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) ), ScalarType( 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/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 From cc74003172d9f677d37c5010a6777300513fd82a Mon Sep 17 00:00:00 2001 From: Alan Williams Date: Fri, 6 Sep 2024 06:21:22 -0600 Subject: [PATCH 22/22] STK: Snapshot 09-06-24 06:21 from Sierra 5.21.4-85-gd1ee7818 --- packages/stk/CHANGELOG.md | 3 + packages/stk/cmake/Dependencies.cmake | 2 +- .../stk_balance/stk_balance/balanceUtils.cpp | 24 + .../stk/stk_doc_tests/stk_io/CMakeLists.txt | 10 +- .../stk/stk_doc_tests/stk_mesh/CMakeLists.txt | 10 +- .../stk_middle_mesh/CMakeLists.txt | 10 +- .../stk_doc_tests/stk_search/CMakeLists.txt | 10 +- .../stk/stk_doc_tests/stk_simd/CMakeLists.txt | 10 +- .../stk_expreval/stk_expreval/Function.hpp | 9 + .../stk_expreval/stk_expreval/ParsedEval.hpp | 15 + .../stk_expreval/ParsedEvalBase.hpp | 2 + .../build_stk_no_stk_io_using_cmake | 2 +- .../cmake_install_test/build_stk_using_cmake | 2 +- .../run_cmake_stk_no_stk_io | 1 + .../stk/stk_mesh/stk_mesh/base/MetaData.cpp | 40 +- .../stk_mesh/stk_mesh/base/NgpFieldBLAS.hpp | 31 ++ packages/stk/stk_search_util/Jamfile | 1 + .../stk/stk_tools/stk_tools/CMakeLists.txt | 4 +- .../stk_topology/apply_functor.hpp | 408 ++++++++------- .../stk_topology/stk_topology/topology.cpp | 102 ++-- .../stk_topology/topology_decl.hpp | 6 + .../stk_topology/topology_defn.hpp | 20 +- .../topology_detail/meta_functions.hpp | 18 +- .../topology_detail/topology_data.cpp | 180 ++++--- .../topology_detail/topology_data.hpp | 171 ++++++ .../stk/stk_topology/stk_topology/types.hpp | 91 ++-- .../stk_expreval/UnitTestEvaluator.cpp | 15 + .../stk_unit_tests/stk_mesh/CMakeLists.txt | 1 + .../stk_mesh/UnitTestMetaData.cpp | 2 +- .../stk_mesh/ngp/ngpFieldBLASTest.cpp | 19 + .../stk_middle_mesh/CMakeLists.txt | 10 +- .../stk_search_util/CMakeLists.txt | 2 +- .../stk_topology/CMakeLists.txt | 8 + .../unit_test_validate_topology_data.cpp | 100 ++-- .../unit_test_shell_quad_all_face_sides.cpp | 495 ++++++++++++++++++ .../unit_test_shell_tri_all_face_sides.cpp | 477 +++++++++++++++++ packages/stk/stk_util/stk_util/Version.hpp | 2 +- .../stk_util/registry/ProductRegistry.cpp | 2 +- 38 files changed, 1863 insertions(+), 452 deletions(-) create mode 100644 packages/stk/stk_unit_tests/stk_topology/utest_c/unit_test_shell_quad_all_face_sides.cpp create mode 100644 packages/stk/stk_unit_tests/stk_topology/utest_c/unit_test_shell_tri_all_face_sides.cpp diff --git a/packages/stk/CHANGELOG.md b/packages/stk/CHANGELOG.md index f8931f947e61..57f2d9d358e1 100644 --- a/packages/stk/CHANGELOG.md +++ b/packages/stk/CHANGELOG.md @@ -1,5 +1,8 @@ # 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 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/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/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_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_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/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_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 0881245011ee..1e23d08ad8e2 100644 --- a/packages/stk/stk_tools/stk_tools/CMakeLists.txt +++ b/packages/stk/stk_tools/stk_tools/CMakeLists.txt @@ -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_tests/stk_expreval/UnitTestEvaluator.cpp b/packages/stk/stk_unit_tests/stk_expreval/UnitTestEvaluator.cpp index 12fe09008b9b..fe69dbaca5c5 100644 --- a/packages/stk/stk_unit_tests/stk_expreval/UnitTestEvaluator.cpp +++ b/packages/stk/stk_unit_tests/stk_expreval/UnitTestEvaluator.cpp @@ -1196,6 +1196,21 @@ TEST(UnitTestEvaluator, testFunctionArgumentCountCheck) 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/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/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_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_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 12be53701b43..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 5210400 +#define STK_VERSION 5210401 namespace stk diff --git a/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp b/packages/stk/stk_util/stk_util/registry/ProductRegistry.cpp index 975965501caa..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-738-g0d57d6ac" +#define STK_VERSION_STRING "5.21.4-85-gd1ee7818" #endif namespace stk {