www.mooseframework.org
CrackDataSampler.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
10 #include "CrackDataSampler.h"
11 #include "PostprocessorInterface.h"
12 #include "SamplerBase.h"
13 
14 registerMooseObject("TensorMechanicsApp", CrackDataSampler);
15 
17 
18 InputParameters
20 {
21  InputParameters params = GeneralVectorPostprocessor::validParams();
22 
23  params += SamplerBase::validParams();
24 
25  params.addRequiredParam<std::vector<PostprocessorName>>(
26  "postprocessors", "The postprocessors whose values are to be reported");
27  params.addRequiredParam<UserObjectName>("crack_front_definition",
28  "The CrackFrontDefinition user object name");
29  MooseEnum position_type("Angle Distance", "Distance");
30  params.addParam<MooseEnum>(
31  "position_type",
32  position_type,
33  "The method used to calculate position along crack front. Options are: " +
34  position_type.getRawNames());
35  params.addClassDescription("Outputs the values of a set of domain integral postprocessors as a "
36  "vector, along with their positions along the crack front.");
37 
38  return params;
39 }
40 
41 CrackDataSampler::CrackDataSampler(const InputParameters & parameters)
42  : GeneralVectorPostprocessor(parameters),
43  SamplerBase(parameters, this, _communicator),
44  _crack_front_definition(&getUserObject<CrackFrontDefinition>("crack_front_definition")),
45  _position_type(getParam<MooseEnum>("position_type"))
46 {
47  std::vector<PostprocessorName> pps_names(
48  getParam<std::vector<PostprocessorName>>("postprocessors"));
49  for (unsigned int i = 0; i < pps_names.size(); ++i)
50  {
51  if (!hasPostprocessorByName(pps_names[i]))
52  mooseError("In CrackDataSampler, postprocessor with name: ", pps_names[i], " does not exist");
53  _domain_integral_postprocessor_values.push_back(&getPostprocessorValueByName(pps_names[i]));
54  }
55  std::vector<std::string> var_names;
56  var_names.push_back(name());
57  SamplerBase::setupVariables(var_names);
58 }
59 
60 void
62 {
65  mooseError("In CrackDataSampler, number of crack front nodes != number of domain integral "
66  "postprocessors");
68  mooseError(
69  "In CrackDataSampler, 'position_type = Angle' specified, but angle is not available. ",
70  "Must specify 'crack_mouth_boundary' in CrackFrontDefinition");
71  SamplerBase::initialize();
72 }
73 
74 void
76 {
77  if (processor_id() == 0)
78  {
79  std::vector<Real> values;
80  for (unsigned int i = 0; i < _domain_integral_postprocessor_values.size(); ++i)
81  {
82  values.clear();
83  const Point * crack_front_point = _crack_front_definition->getCrackFrontPoint(i);
84  Real position;
85  if (_position_type == "Angle")
87  else
89 
90  values.push_back(*_domain_integral_postprocessor_values[i]);
91  addSample(*crack_front_point, position, values);
92  }
93  }
94 }
95 
96 void
98 {
99  SamplerBase::finalize();
100 }
CrackDataSampler::validParams
static InputParameters validParams()
Definition: CrackDataSampler.C:19
CrackDataSampler::finalize
virtual void finalize()
Definition: CrackDataSampler.C:97
CrackFrontDefinition
Works on top of NodalNormalsPreprocessor.
Definition: CrackFrontDefinition.h:36
registerMooseObject
registerMooseObject("TensorMechanicsApp", CrackDataSampler)
CrackDataSampler.h
CrackFrontDefinition::hasAngleAlongFront
bool hasAngleAlongFront() const
Definition: CrackFrontDefinition.C:1102
CrackDataSampler::_position_type
MooseEnum _position_type
Definition: CrackDataSampler.h:58
CrackFrontDefinition::getCrackFrontPoint
const Point * getCrackFrontPoint(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1057
CrackDataSampler::CrackDataSampler
CrackDataSampler(const InputParameters &parameters)
Class constructor.
Definition: CrackDataSampler.C:41
CrackFrontDefinition::getNumCrackFrontPoints
unsigned int getNumCrackFrontPoints() const
Definition: CrackFrontDefinition.C:1117
validParams
InputParameters validParams()
name
const std::string name
Definition: Setup.h:21
CrackDataSampler::execute
virtual void execute()
Populates the postprocessor vector of values with the supplied postprocessors.
Definition: CrackDataSampler.C:75
CrackDataSampler
CrackDataSampler is a type of VectorPostprocessor that outputs the values of domain integrals,...
Definition: CrackDataSampler.h:27
CrackFrontDefinition::getDistanceAlongFront
Real getDistanceAlongFront(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1096
CrackDataSampler::_crack_front_definition
const CrackFrontDefinition *const _crack_front_definition
Definition: CrackDataSampler.h:56
defineLegacyParams
defineLegacyParams(CrackDataSampler)
CrackDataSampler::_domain_integral_postprocessor_values
std::vector< const PostprocessorValue * > _domain_integral_postprocessor_values
The vector of PostprocessorValue objects that are used to get the values of the domain integral postp...
Definition: CrackDataSampler.h:61
CrackDataSampler::initialize
virtual void initialize()
Initialize, clears the postprocessor vector.
Definition: CrackDataSampler.C:61
CrackFrontDefinition::getAngleAlongFront
Real getAngleAlongFront(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1108