LCOV - code coverage report
Current view: top level - src/userobjects - ComputeGrainCenterUserObject.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 0 42 0.0 %
Date: 2025-09-04 07:55:36 Functions: 0 8 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.14