Panzer
Version of the Day
disc-fe
src
Panzer_SetupPartitionedWorksetUtilities.cpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Panzer: A partial differential equation assembly
5
// engine for strongly coupled complex multiphysics systems
6
// Copyright (2011) Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39
// Eric C. Cyr (eccyr@sandia.gov)
40
// ***********************************************************************
41
// @HEADER
42
43
#include "
Panzer_SetupPartitionedWorksetUtilities.hpp
"
44
45
#include "
Panzer_LocalPartitioningUtilities.hpp
"
46
#include "
Panzer_Workset.hpp
"
47
#include "
Panzer_WorksetNeeds.hpp
"
48
#include "
Panzer_WorksetDescriptor.hpp
"
49
50
namespace
panzer
51
{
52
53
namespace
54
{
55
56
template
<
typename
LO,
typename
GO>
57
void
58
convertMeshPartitionToWorkset(
const
panzer::LocalMeshPartition<LO,GO>
& partition,
59
const
panzer::WorksetNeeds
& needs,
60
panzer::Workset
& workset)
61
{
62
workset.
setup
(partition, needs);
63
64
workset.
num_cells
= partition.
num_owned_cells
+ partition.
num_ghstd_cells
+ partition.
num_virtual_cells
;
65
workset.
subcell_dim
= -1;
66
67
}
68
69
}
70
71
Teuchos::RCP<std::vector<panzer::Workset>
>
72
buildPartitionedWorksets
(
const
panzer::LocalMeshInfo<int,panzer::Ordinal64>
& mesh_info,
73
const
panzer::WorksetDescriptor
& description,
74
const
panzer::WorksetNeeds
& needs)
75
{
76
77
Teuchos::RCP<std::vector<panzer::Workset>
> worksets =
Teuchos::rcp
(
new
std::vector<panzer::Workset>());
78
79
// Make sure it makes sense to partition
80
TEUCHOS_ASSERT
(description.
requiresPartitioning
());
81
82
// Each partition represents a chunk of the mesh
83
std::vector<panzer::LocalMeshPartition<int,panzer::Ordinal64> > partitions;
84
panzer::generateLocalMeshPartitions<int,panzer::Ordinal64>(mesh_info, description, partitions);
85
86
for
(
const
auto
& partition : partitions){
87
worksets->push_back(
panzer::Workset
());
88
convertMeshPartitionToWorkset<int,panzer::Ordinal64>(partition, needs, worksets->back());
89
}
90
91
return
worksets;
92
93
}
94
95
}
panzer::Workset::subcell_dim
int subcell_dim
Definition:
Panzer_Workset.hpp:201
Panzer_Workset.hpp
TEUCHOS_ASSERT
#define TEUCHOS_ASSERT(assertion_test)
Teuchos::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
panzer::buildPartitionedWorksets
Teuchos::RCP< std::vector< panzer::Workset > > buildPartitionedWorksets(const panzer::LocalMeshInfo< int, panzer::Ordinal64 > &mesh_info, const panzer::WorksetDescriptor &description, const panzer::WorksetNeeds &needs)
Definition:
Panzer_SetupPartitionedWorksetUtilities.cpp:72
panzer::Workset
Definition:
Panzer_Workset.hpp:186
Panzer_LocalPartitioningUtilities.hpp
Teuchos::RCP
panzer::LocalMeshInfoBase::num_ghstd_cells
LO num_ghstd_cells
Definition:
Panzer_LocalMeshInfo.hpp:69
panzer::LocalMeshInfo
Definition:
Panzer_LocalMeshInfo.hpp:143
panzer::WorksetDescriptor::requiresPartitioning
bool requiresPartitioning() const
Do we need to partition the local mesh prior to generating worksets.
Definition:
Panzer_WorksetDescriptor.hpp:252
panzer::WorksetDescriptor
Definition:
Panzer_WorksetDescriptor.hpp:82
panzer::LocalMeshInfoBase::num_owned_cells
LO num_owned_cells
Definition:
Panzer_LocalMeshInfo.hpp:68
panzer::WorksetNeeds
Definition:
Panzer_WorksetNeeds.hpp:72
Panzer_WorksetNeeds.hpp
panzer::LocalMeshPartition
Definition:
Panzer_LocalMeshInfo.hpp:94
panzer::Workset::num_cells
index_t num_cells
Definition:
Panzer_Workset.hpp:200
panzer::LocalMeshInfoBase::num_virtual_cells
LO num_virtual_cells
Definition:
Panzer_LocalMeshInfo.hpp:70
Panzer_SetupPartitionedWorksetUtilities.hpp
panzer
Definition:
Panzer_BasisValues_Evaluator_decl.hpp:54
panzer::WorksetDetails::setup
void setup(const panzer::LocalMeshPartition< int, panzer::Ordinal64 > &partition, const panzer::WorksetNeeds &needs)
Constructs the workset details from a given chunk of the mesh.
Definition:
Panzer_Workset.cpp:63
Panzer_WorksetDescriptor.hpp
Generated by
1.8.16