https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MortarSegmentMeshReporter.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
12#include "FEProblemBase.h"
13
15
18{
21 "Reports mortar segment mesh statistics (element counts and volume statistics) for all "
22 "mortar interfaces. One entry per primary-secondary subdomain pair is appended to each "
23 "output vector.");
24 return params;
25}
26
28 : GeneralReporter(parameters),
29 _on_displaced(getParam<bool>("use_displaced_mesh")),
30 _secondary_lower_n_elems(declareValueByName<std::vector<unsigned int>>(
31 "secondary_lower_n_elems", REPORTER_MODE_ROOT)),
32 _secondary_lower_max_volume(
33 declareValueByName<std::vector<Real>>("secondary_lower_max_volume")),
34 _secondary_lower_min_volume(
35 declareValueByName<std::vector<Real>>("secondary_lower_min_volume")),
36 _secondary_lower_median_volume(
37 declareValueByName<std::vector<Real>>("secondary_lower_median_volume")),
38 _primary_lower_n_elems(declareValueByName<std::vector<unsigned int>>("primary_lower_n_elems")),
39 _primary_lower_max_volume(declareValueByName<std::vector<Real>>("primary_lower_max_volume")),
40 _primary_lower_min_volume(declareValueByName<std::vector<Real>>("primary_lower_min_volume")),
41 _primary_lower_median_volume(
42 declareValueByName<std::vector<Real>>("primary_lower_median_volume")),
43 _msm_n_elems(declareValueByName<std::vector<unsigned int>>("msm_n_elems")),
44 _msm_max_volume(declareValueByName<std::vector<Real>>("msm_max_volume")),
45 _msm_min_volume(declareValueByName<std::vector<Real>>("msm_min_volume")),
46 _msm_median_volume(declareValueByName<std::vector<Real>>("msm_median_volume"))
47{
48}
49
50void
52{
61 _msm_n_elems.clear();
62 _msm_max_volume.clear();
63 _msm_min_volume.clear();
64 _msm_median_volume.clear();
65
66 for (const auto & [key, config] : _fe_problem.getMortarInterfaces(_on_displaced))
67 {
68 const auto stats = config.amg->computeMsmStatistics();
69
70 for (const auto & s : stats)
71 {
72 _secondary_lower_n_elems.push_back(s.secondary_lower_n_elems);
73 _secondary_lower_max_volume.push_back(s.secondary_lower_max_volume);
74 _secondary_lower_min_volume.push_back(s.secondary_lower_min_volume);
75 _secondary_lower_median_volume.push_back(s.secondary_lower_median_volume);
76 _primary_lower_n_elems.push_back(s.primary_lower_n_elems);
77 _primary_lower_max_volume.push_back(s.primary_lower_max_volume);
78 _primary_lower_min_volume.push_back(s.primary_lower_min_volume);
79 _primary_lower_median_volume.push_back(s.primary_lower_median_volume);
80 _msm_n_elems.push_back(s.msm_n_elems);
81 _msm_max_volume.push_back(s.msm_max_volume);
82 _msm_min_volume.push_back(s.msm_min_volume);
83 _msm_median_volume.push_back(s.msm_median_volume);
84 }
85 }
86}
registerMooseObject("MooseApp", MortarSegmentMeshReporter)
const ReporterMode REPORTER_MODE_ROOT
void ErrorVector unsigned int
const std::unordered_map< std::pair< BoundaryID, BoundaryID >, MortarInterfaceConfig > & getMortarInterfaces(bool on_displaced) const
Reporter object that has a single execution of the "execute" method for each execute flag.
static InputParameters validParams()
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void addClassDescription(const std::string &doc_string)
This method adds a description of the class that will be displayed in the input file syntax dump.
Reports mortar segment mesh statistics (element counts and volume statistics) for all mortar interfac...
std::vector< unsigned int > & _primary_lower_n_elems
Element count in the primary lower-dimensional subdomain, one entry per mortar interface.
std::vector< Real > & _msm_min_volume
Minimum element volume in the mortar segment mesh.
std::vector< Real > & _secondary_lower_min_volume
Minimum element volume in the secondary lower-dimensional subdomain.
static InputParameters validParams()
const bool _on_displaced
Whether to report statistics for the displaced mortar interfaces.
std::vector< unsigned int > & _msm_n_elems
Element count in the mortar segment mesh, one entry per mortar interface.
std::vector< Real > & _msm_median_volume
Median element volume in the mortar segment mesh.
MortarSegmentMeshReporter(const InputParameters &parameters)
std::vector< unsigned int > & _secondary_lower_n_elems
Element count in the secondary lower-dimensional subdomain, one entry per mortar interface.
std::vector< Real > & _primary_lower_min_volume
Minimum element volume in the primary lower-dimensional subdomain.
std::vector< Real > & _msm_max_volume
Maximum element volume in the mortar segment mesh.
std::vector< Real > & _primary_lower_median_volume
Median element volume in the primary lower-dimensional subdomain.
std::vector< Real > & _secondary_lower_median_volume
Median element volume in the secondary lower-dimensional subdomain.
std::vector< Real > & _primary_lower_max_volume
Maximum element volume in the primary lower-dimensional subdomain.
std::vector< Real > & _secondary_lower_max_volume
Maximum element volume in the secondary lower-dimensional subdomain.
virtual void execute() override
Execute method.
FEProblemBase & _fe_problem
Reference to the FEProblemBase for this user object.