www.mooseframework.org
ComputeGrainCenterUserObject.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 
11 
12 #include "libmesh/quadrature.h"
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<ElementUserObject>();
19  params.addClassDescription("Userobject for calculating the grain volumes and grain centers");
20  params.addRequiredCoupledVarWithAutoBuild("etas", "var_name_base", "op_num", "order parameters");
21  return params;
22 }
23 
25  : ElementUserObject(parameters),
26  _ncrys(coupledComponents("etas")), // determine number of grains from the number of names passed
27  // in. Note this is the actual number -1
28  _vals(_ncrys), // Size variable arrays
29  _ncomp(4 * _ncrys),
30  _grain_data(_ncomp),
31  _grain_volumes(_ncrys),
32  _grain_centers(_ncrys)
33 {
34  for (unsigned int i = 0; i < _ncrys; ++i)
35  _vals[i] = &coupledValue("etas", i);
36 }
37 
38 void
40 {
41  for (unsigned int i = 0; i < _ncomp; ++i)
42  _grain_data[i] = 0;
43 }
44 
45 void
47 {
48  for (unsigned int i = 0; i < _ncrys; ++i)
49  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
50  {
51  _grain_data[4 * i + 0] += _JxW[_qp] * _coord[_qp] * (*_vals[i])[_qp];
52  _grain_data[4 * i + 1] += _JxW[_qp] * _coord[_qp] * _q_point[_qp](0) * (*_vals[i])[_qp];
53  _grain_data[4 * i + 2] += _JxW[_qp] * _coord[_qp] * _q_point[_qp](1) * (*_vals[i])[_qp];
54  _grain_data[4 * i + 3] += _JxW[_qp] * _coord[_qp] * _q_point[_qp](2) * (*_vals[i])[_qp];
55  }
56 }
57 
58 void
60 {
61  gatherSum(_grain_data);
62 
63  for (unsigned int i = 0; i < _ncrys; ++i)
64  {
65  _grain_volumes[i] = _grain_data[4 * i + 0];
66  _grain_centers[i](0) = _grain_data[4 * i + 1] / _grain_volumes[i];
67  _grain_centers[i](1) = _grain_data[4 * i + 2] / _grain_volumes[i];
68  _grain_centers[i](2) = _grain_data[4 * i + 3] / _grain_volumes[i];
69  }
70 }
71 
72 void
74 {
75  const ComputeGrainCenterUserObject & pps = static_cast<const ComputeGrainCenterUserObject &>(y);
76  for (unsigned int i = 0; i < _ncomp; ++i)
77  _grain_data[i] += pps._grain_data[i];
78 }
79 
80 const std::vector<Real> &
82 {
83  return _grain_volumes;
84 }
85 
86 const std::vector<Point> &
88 {
89  return _grain_centers;
90 }
validParams< ComputeGrainCenterUserObject >
InputParameters validParams< ComputeGrainCenterUserObject >()
Definition: ComputeGrainCenterUserObject.C:16
ComputeGrainCenterUserObject::getGrainVolumes
const std::vector< Real > & getGrainVolumes() const
Definition: ComputeGrainCenterUserObject.C:81
ComputeGrainCenterUserObject::threadJoin
virtual void threadJoin(const UserObject &y)
Definition: ComputeGrainCenterUserObject.C:73
ComputeGrainCenterUserObject::_ncrys
unsigned int _ncrys
Definition: ComputeGrainCenterUserObject.h:38
ComputeGrainCenterUserObject::getGrainCenters
const std::vector< Point > & getGrainCenters() const
Definition: ComputeGrainCenterUserObject.C:87
ComputeGrainCenterUserObject::_grain_volumes
std::vector< Real > _grain_volumes
Definition: ComputeGrainCenterUserObject.h:43
ComputeGrainCenterUserObject::_qp
unsigned int _qp
Definition: ComputeGrainCenterUserObject.h:37
ComputeGrainCenterUserObject::initialize
virtual void initialize()
Definition: ComputeGrainCenterUserObject.C:39
ComputeGrainCenterUserObject
This UserObject computes a volumes and centers of grains.
Definition: ComputeGrainCenterUserObject.h:23
ComputeGrainCenterUserObject::finalize
virtual void finalize()
Definition: ComputeGrainCenterUserObject.C:59
ComputeGrainCenterUserObject::_vals
std::vector< const VariableValue * > _vals
Definition: ComputeGrainCenterUserObject.h:39
ComputeGrainCenterUserObject.h
ComputeGrainCenterUserObject::_grain_centers
std::vector< Point > _grain_centers
Definition: ComputeGrainCenterUserObject.h:44
ComputeGrainCenterUserObject::_ncomp
unsigned int _ncomp
Definition: ComputeGrainCenterUserObject.h:40
ComputeGrainCenterUserObject::ComputeGrainCenterUserObject
ComputeGrainCenterUserObject(const InputParameters &parameters)
Definition: ComputeGrainCenterUserObject.C:24
ComputeGrainCenterUserObject::execute
virtual void execute()
Definition: ComputeGrainCenterUserObject.C:46
ComputeGrainCenterUserObject::_grain_data
std::vector< Real > _grain_data
storing volumes and centers of all the grains
Definition: ComputeGrainCenterUserObject.h:42