www.mooseframework.org
CrystalPlasticityStateVariable.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 <fstream>
13 
15 
17 
18 InputParameters
20 {
21  InputParameters params = CrystalPlasticityUOBase::validParams();
22  params.addParam<FileName>(
23  "state_variable_file_name",
24  "",
25  "Name of the file containing the initial values of slip system resistances");
26  MooseEnum intvar_read_options("file_input inline_input user_input", "inline_input");
27  params.addParam<MooseEnum>(
28  "intvar_read_type",
29  intvar_read_options,
30  "Read from options for initial value of internal variables: Default from .i file");
31  params.addParam<std::vector<unsigned int>>("groups",
32  "To group the initial values on different "
33  "slip systems 'format: [start end)', i.e.'0 "
34  "4 8 11' groups 0-3, 4-7 and 8-11 ");
35  params.addParam<std::vector<Real>>("group_values",
36  "The initial values corresponding to each "
37  "group, i.e. '0.0 1.0 2.0' means 0-4 = 0.0, "
38  "4-8 = 1.0 and 8-12 = 2.0 ");
39  params.addParam<std::vector<std::string>>("uo_state_var_evol_rate_comp_name",
40  "Name of state variable evolution rate component "
41  "property: Same as state variable evolution rate "
42  "component user object specified in input file.");
43  params.addParam<Real>("zero", 0.0, "Numerical zero for interval variable");
44  params.addParam<std::vector<Real>>("scale_factor", "Scale factor of individual component.");
45  params.addClassDescription(
46  "Crystal plasticity state variable class. Override the virtual functions in your class");
47  return params;
48 }
49 
51  : CrystalPlasticityUOBase(parameters),
52  _num_mat_state_var_evol_rate_comps(
53  parameters.get<std::vector<std::string>>("uo_state_var_evol_rate_comp_name").size()),
54  _mat_prop_state_var(getMaterialProperty<std::vector<Real>>(_name)),
55  _state_variable_file_name(getParam<FileName>("state_variable_file_name")),
56  _intvar_read_type(getParam<MooseEnum>("intvar_read_type")),
57  _groups(getParam<std::vector<unsigned int>>("groups")),
58  _group_values(getParam<std::vector<Real>>("group_values")),
59  _zero(getParam<Real>("zero")),
60  _scale_factor(getParam<std::vector<Real>>("scale_factor"))
61 {
63  mooseError("CrystalPlasticityStateVariable: Scale factor should be have the same size of "
64  "evolution rate components.");
65 
67 
68  for (unsigned int i = 0; i < _num_mat_state_var_evol_rate_comps; ++i)
69  _mat_prop_state_var_evol_rate_comps[i] = &getMaterialProperty<std::vector<Real>>(
70  parameters.get<std::vector<std::string>>("uo_state_var_evol_rate_comp_name")[i]);
71 }
72 
73 void
75  const Point & q_point) const
76 {
77  switch (_intvar_read_type)
78  {
79  case 0:
81  break;
82  case 1:
84  break;
85  case 2:
86  provideInitialValueByUser(val, q_point);
87  break;
88  default:
89  mooseError("CrystalPlasticityStateVariable: Read option for initial value of internal "
90  "variables is not supported.");
91  }
92 
93  for (unsigned int i = 0; i < _variable_size; ++i)
94  if (val[i] <= 0.0)
95  mooseError("CrystalPlasticityStateVariable: Value of state variables ", i, " non positive");
96 }
97 
98 void
100 {
101  MooseUtils::checkFileReadable(_state_variable_file_name);
102 
103  std::ifstream file;
104  file.open(_state_variable_file_name.c_str());
105 
106  for (unsigned int i = 0; i < _variable_size; ++i)
107  if (!(file >> val[i]))
108  mooseError("Error CrystalPlasticityStateVariable: Premature end of state_variable file");
109 
110  file.close();
111 }
112 
113 void
115 {
116  if (_groups.size() <= 0)
117  mooseError("CrystalPlasticityStateVariable: Error in reading initial state variable values: "
118  "Specify input in .i file or in state_variable file");
119  else if (_groups.size() != (_group_values.size() + 1))
120  mooseError(
121  "CrystalPlasticityStateVariable: The size of the groups and group_values does not match.");
122 
123  for (unsigned int i = 0; i < _groups.size() - 1; ++i)
124  {
125  unsigned int is, ie;
126 
127  is = _groups[i];
128  ie = _groups[i + 1] - 1;
129 
130  if (is > ie)
131  mooseError("CrystalPlasticityStateVariable: Start index is = ",
132  is,
133  " should be greater than end index ie = ",
134  ie,
135  " in state variable read");
136 
137  for (unsigned int j = is; j <= ie; ++j)
138  val[j] = _group_values[i];
139  }
140 }
141 
142 void
144  const Point & /*q_point*/) const
145 {
146  mooseError("Error CrystalPlasticityStateVariable: User has to overwrite "
147  "'provideInitialValueByUser' function"
148  "in order to provide specific initial values based on quadrature point location.");
149 }
150 
151 bool
153  Real dt,
154  std::vector<Real> & val,
155  std::vector<Real> & val_old) const
156 {
157  for (unsigned int i = 0; i < _variable_size; ++i)
158  {
159  val[i] = 0.0;
160  for (unsigned int j = 0; j < _num_mat_state_var_evol_rate_comps; j++)
161  val[i] += (*_mat_prop_state_var_evol_rate_comps[j])[qp][i] * dt * _scale_factor[j];
162  }
163 
164  for (unsigned int i = 0; i < _variable_size; ++i)
165  {
166  if (val_old[i] < _zero && val[i] < 0.0)
167  val[i] = val_old[i];
168  else
169  val[i] = val_old[i] + val[i];
170 
171  if (val[i] < 0.0)
172  return false;
173  }
174  return true;
175 }
registerMooseObject
registerMooseObject("TensorMechanicsApp", CrystalPlasticityStateVariable)
CrystalPlasticityStateVariable::_num_mat_state_var_evol_rate_comps
unsigned int _num_mat_state_var_evol_rate_comps
Definition: CrystalPlasticityStateVariable.h:43
CrystalPlasticityStateVariable::readInitialValueFromFile
virtual void readInitialValueFromFile(std::vector< Real > &val) const
Definition: CrystalPlasticityStateVariable.C:99
CrystalPlasticityStateVariable::provideInitialValueByUser
virtual void provideInitialValueByUser(std::vector< Real > &, const Point &) const
Definition: CrystalPlasticityStateVariable.C:143
CrystalPlasticityUOBase::validParams
static InputParameters validParams()
Definition: CrystalPlasticityUOBase.C:15
CrystalPlasticityStateVariable::_mat_prop_state_var_evol_rate_comps
std::vector< const MaterialProperty< std::vector< Real > > * > _mat_prop_state_var_evol_rate_comps
Definition: CrystalPlasticityStateVariable.h:45
CrystalPlasticityStateVariable::initSlipSysProps
virtual void initSlipSysProps(std::vector< Real > &val, const Point &q_point) const
Definition: CrystalPlasticityStateVariable.C:74
CrystalPlasticityStateVariable::_group_values
std::vector< Real > _group_values
The _group_values are the initial values corresponding to each group.
Definition: CrystalPlasticityStateVariable.h:66
CrystalPlasticityStateVariable::readInitialValueFromInline
virtual void readInitialValueFromInline(std::vector< Real > &val) const
Definition: CrystalPlasticityStateVariable.C:114
CrystalPlasticityStateVariable::_groups
std::vector< unsigned int > _groups
The _groups variable is used to group slip systems and assign the initial values to each group.
Definition: CrystalPlasticityStateVariable.h:60
CrystalPlasticityUOBase
Crystal plasticity system userobject base class.
Definition: CrystalPlasticityUOBase.h:22
CrystalPlasticityUOBase::_variable_size
unsigned int _variable_size
Definition: CrystalPlasticityUOBase.h:33
CrystalPlasticityStateVariable::validParams
static InputParameters validParams()
Definition: CrystalPlasticityStateVariable.C:19
CrystalPlasticityStateVariable::_zero
Real _zero
Numerical zero for internal variable.
Definition: CrystalPlasticityStateVariable.h:69
CrystalPlasticityStateVariable::CrystalPlasticityStateVariable
CrystalPlasticityStateVariable(const InputParameters &parameters)
Definition: CrystalPlasticityStateVariable.C:50
CrystalPlasticityStateVariable.h
CrystalPlasticityStateVariable::_scale_factor
std::vector< Real > _scale_factor
Scale factor of individual component.
Definition: CrystalPlasticityStateVariable.h:72
CrystalPlasticityStateVariable::_intvar_read_type
MooseEnum _intvar_read_type
Read from options for initial values of internal variables.
Definition: CrystalPlasticityStateVariable.h:53
CrystalPlasticityStateVariable::_state_variable_file_name
FileName _state_variable_file_name
File should contain initial values of the state variable.
Definition: CrystalPlasticityStateVariable.h:50
CrystalPlasticityStateVariable
Crystal plasticity state variable userobject class.
Definition: CrystalPlasticityStateVariable.h:22
CrystalPlasticityStateVariable::updateStateVariable
virtual bool updateStateVariable(unsigned int qp, Real dt, std::vector< Real > &val, std::vector< Real > &val_old) const
Definition: CrystalPlasticityStateVariable.C:152
defineLegacyParams
defineLegacyParams(CrystalPlasticityStateVariable)