コード例 #1
0
GlobalStrainUserObject::GlobalStrainUserObject(const InputParameters & parameters)
  : ElementUserObject(parameters),
    _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
    _Cijkl(getMaterialProperty<RankFourTensor>(_base_name + "elasticity_tensor")),
    _stress(getMaterialProperty<RankTwoTensor>(_base_name + "stress")),
    _dim(_mesh.dimension()),
    _ndisp(coupledComponents("displacements")),
    _disp_var(_ndisp),
    _periodic_dir()
{
  for (unsigned int i = 0; i < _ndisp; ++i)
    _disp_var[i] = coupled("displacements", i);

  for (unsigned int dir = 0; dir < _dim; ++dir)
  {
    _periodic_dir(dir) = _mesh.isTranslatedPeriodic(_disp_var[0], dir);

    for (unsigned int i = 1; i < _ndisp; ++i)
      if (_mesh.isTranslatedPeriodic(_disp_var[i], dir) != _periodic_dir(dir))
        mooseError("All the displacement components in a particular direction should have same "
                   "periodicity.");
  }

  if (isParamValid("applied_stress_tensor"))
    _applied_stress_tensor.fillFromInputVector(
        getParam<std::vector<Real>>("applied_stress_tensor"));
  else
    _applied_stress_tensor.zero();
}
コード例 #2
0
Real
GlobalDisplacementAux::computeValue()
{
  RankTwoTensor strain;
  strain.fillFromScalarVariable(_scalar_global_strain);

  for (unsigned int dir = 0; dir < _dim; ++dir)
    if (!_periodic_dir(dir))
      for (unsigned int var = 0; var < _ndisp; ++var)
        strain(dir, var) = 0.0;

  const RealVectorValue & global_disp = strain * (*_current_node);

  if (_output_global_disp)
    return global_disp(_component);
  else
    return global_disp(_component) + (*_disp[_component])[_qp];
}