Panzer
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
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
void
56
convertMeshPartitionToWorkset(
const
panzer::LocalMeshPartition & partition,
57
const
Teuchos::RCP<const OrientationsInterface> & orientations,
58
panzer::Workset & workset)
59
{
60
WorksetOptions
options;
61
options.
side_assembly_
=
false
;
62
options.align_side_points_ =
false
;
63
options.orientations_ = orientations;
64
65
// Construct the workset from the partition
66
workset.
setup
(partition, options);
67
68
}
69
}
70
71
Teuchos::RCP<std::vector<panzer::Workset> >
72
buildPartitionedWorksets
(
const
panzer::LocalMeshInfo
& mesh_info,
73
const
panzer::WorksetDescriptor
& description,
74
const
Teuchos::RCP<const OrientationsInterface> & orientations)
75
{
76
Teuchos::RCP<std::vector<panzer::Workset> > worksets = Teuchos::rcp(
new
std::vector<panzer::Workset>());
77
78
// Make sure it makes sense to partition
79
TEUCHOS_ASSERT(description.
requiresPartitioning
());
80
81
// Each partition represents a chunk of the mesh
82
std::vector<panzer::LocalMeshPartition> partitions;
83
panzer::generateLocalMeshPartitions
(mesh_info, description, partitions);
84
85
int
i=0;
86
for
(
const
auto
& partition : partitions){
87
worksets->push_back(
panzer::Workset
());
88
convertMeshPartitionToWorkset(partition, orientations, worksets->back());
89
90
// We hash in a unique id the the given workset
91
size_t
id
= std::hash<WorksetDescriptor>()(description);
92
panzer::hash_combine
(
id
, i++);
93
worksets->back().setIdentifier(
id
);
94
}
95
96
return
worksets;
97
}
98
99
}
Panzer_LocalPartitioningUtilities.hpp
Panzer_SetupPartitionedWorksetUtilities.hpp
Panzer_WorksetDescriptor.hpp
Panzer_WorksetNeeds.hpp
Panzer_Workset.hpp
panzer::WorksetDescriptor
Definition
Panzer_WorksetDescriptor.hpp:82
panzer::WorksetDescriptor::requiresPartitioning
bool requiresPartitioning() const
Do we need to partition the local mesh prior to generating worksets.
Definition
Panzer_WorksetDescriptor.hpp:252
panzer::WorksetDetails::setup
void setup(const LocalMeshPartition &partition, const WorksetOptions &options)
Constructs the workset details from a given chunk of the mesh.
Definition
Panzer_Workset.cpp:126
panzer::Workset
Definition
Panzer_Workset.hpp:358
panzer
Computes .
Definition
Panzer_BasisValues_Evaluator_decl.hpp:54
panzer::hash_combine
void hash_combine(std::size_t &seed, const T &v)
Definition
Panzer_HashUtils.hpp:30
panzer::buildPartitionedWorksets
Teuchos::RCP< std::vector< panzer::Workset > > buildPartitionedWorksets(const panzer::LocalMeshInfo &mesh_info, const panzer::WorksetDescriptor &description, const Teuchos::RCP< const OrientationsInterface > &orientations)
Definition
Panzer_SetupPartitionedWorksetUtilities.cpp:72
panzer::generateLocalMeshPartitions
void generateLocalMeshPartitions(const panzer::LocalMeshInfo &mesh_info, const panzer::WorksetDescriptor &description, std::vector< panzer::LocalMeshPartition > &partitions)
Definition
Panzer_LocalPartitioningUtilities.cpp:756
panzer::LocalMeshInfo
Definition
Panzer_LocalMeshInfo.hpp:121
panzer::WorksetOptions
Used to define options for lazy evaluation of BasisValues and IntegrationValues objects.
Definition
Panzer_Workset.hpp:80
panzer::WorksetOptions::side_assembly_
bool side_assembly_
Build integration values for sides.
Definition
Panzer_Workset.hpp:90
Generated by
1.17.0