www.mooseframework.org
FiniteStrainHyperElasticViscoPlastic.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 #include "libmesh/utility.h"
12 
14 
16 
17 InputParameters
19 {
20  InputParameters params = ComputeStressBase::validParams();
21  params.addParam<Real>(
22  "resid_abs_tol", 1e-10, "Absolute Tolerance for flow rate residual equation");
23  params.addParam<Real>(
24  "resid_rel_tol", 1e-6, "Relative Tolerance for flow rate residual equation");
25  params.addParam<unsigned int>("maxiters", 50, "Maximum iteration for flow rate update");
26  params.addParam<unsigned int>("max_substep_iteration", 1, "Maximum number of substep iteration");
27  params.addParam<std::vector<UserObjectName>>(
28  "flow_rate_user_objects",
29  "List of User object names that computes flow rate and derivatives");
30  params.addParam<std::vector<UserObjectName>>(
31  "strength_user_objects",
32  "List of User object names that computes strength variables and derivatives");
33  params.addParam<std::vector<UserObjectName>>(
34  "internal_var_user_objects",
35  "List of User object names that integrates internal variables and computes derivatives");
36  params.addParam<std::vector<UserObjectName>>(
37  "internal_var_rate_user_objects",
38  "List of User object names that computes internal variable rates and derivatives");
39  params.addClassDescription("Material class for hyper-elastic viscoplatic flow: Can handle "
40  "multiple flow models defined by flowratemodel type user objects");
41 
42  return params;
43 }
44 
46  const InputParameters & parameters)
47  : ComputeStressBase(parameters),
48  _resid_abs_tol(getParam<Real>("resid_abs_tol")),
49  _resid_rel_tol(getParam<Real>("resid_rel_tol")),
50  _maxiters(getParam<unsigned int>("maxiters")),
51  _max_substep_iter(getParam<unsigned int>("max_substep_iteration")),
52  _flow_rate_uo_names(isParamValid("flow_rate_user_objects")
53  ? getParam<std::vector<UserObjectName>>("flow_rate_user_objects")
54  : std::vector<UserObjectName>(0)),
55  _strength_uo_names(isParamValid("strength_user_objects")
56  ? getParam<std::vector<UserObjectName>>("strength_user_objects")
57  : std::vector<UserObjectName>(0)),
58  _int_var_uo_names(isParamValid("internal_var_user_objects")
59  ? getParam<std::vector<UserObjectName>>("internal_var_user_objects")
60  : std::vector<UserObjectName>(0)),
61  _int_var_rate_uo_names(
62  isParamValid("internal_var_rate_user_objects")
63  ? getParam<std::vector<UserObjectName>>("internal_var_rate_user_objects")
64  : std::vector<UserObjectName>(0)),
65  _pk2_prop_name(_base_name + "pk2"),
66  _pk2(declareProperty<RankTwoTensor>(_pk2_prop_name)),
67  _fp(declareProperty<RankTwoTensor>(_base_name + "fp")),
68  _fp_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "fp")),
69  _ce(declareProperty<RankTwoTensor>(_base_name + "ce")),
70  _elasticity_tensor_name(_base_name + "elasticity_tensor"),
71  _elasticity_tensor(getMaterialPropertyByName<RankFourTensor>(_elasticity_tensor_name)),
72  _deformation_gradient(getMaterialProperty<RankTwoTensor>(_base_name + "deformation_gradient")),
73  _deformation_gradient_old(
74  getMaterialPropertyOld<RankTwoTensor>(_base_name + "deformation_gradient")),
75  _rotation_increment(getMaterialProperty<RankTwoTensor>(_base_name + "rotation_increment"))
76 {
78 
80 
83  _resid.resize(_num_flow_rate_uos);
84 
86 }
87 
88 void
90 {
95 
100 
102 
107 
108  _int_var_old.resize(_num_int_var_uos, 0.0);
109 }
110 
111 void
113  const std::vector<UserObjectName> & uo_names, unsigned int & uo_num)
114 {
115  uo_num = uo_names.size();
116 }
117 
118 template <typename T>
119 void
120 FiniteStrainHyperElasticViscoPlastic::initProp(const std::vector<UserObjectName> & uo_names,
121  unsigned int uo_num,
122  std::vector<MaterialProperty<T> *> & uo_prop)
123 {
124  uo_prop.resize(uo_num);
125  for (unsigned int i = 0; i < uo_num; ++i)
126  uo_prop[i] = &declareProperty<T>(uo_names[i]);
127 }
128 
129 template <typename T>
130 void
132  const std::vector<UserObjectName> & uo_names,
133  unsigned int uo_num,
134  std::vector<const MaterialProperty<T> *> & uo_prop_old)
135 {
136  uo_prop_old.resize(uo_num);
137  for (unsigned int i = 0; i < uo_num; ++i)
138  uo_prop_old[i] = &getMaterialPropertyOld<T>(uo_names[i]);
139 }
140 
141 template <typename T>
142 void
143 FiniteStrainHyperElasticViscoPlastic::initUserObjects(const std::vector<UserObjectName> & uo_names,
144  unsigned int uo_num,
145  std::vector<const T *> & uo)
146 {
147  uo.resize(uo_num);
148 
149  if (uo_num == 0)
150  mooseError("Specify atleast one user object of type", typeid(T).name());
151 
152  for (unsigned int i = 0; i < uo_num; ++i)
153  uo[i] = &getUserObjectByName<T>(uo_names[i]);
154 }
155 
156 void
158 {
160  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
162 
164  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
166 
174 
178 
180 
181  computeDeeDce();
182 }
183 
184 void
186 {
187  _stress[_qp].zero();
188  _ce[_qp].zero();
189  _pk2[_qp].zero();
190  _fp[_qp].setToIdentity();
191 
192  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
193  (*_flow_rate_prop[i])[_qp] = 0.0;
194 
195  for (unsigned int i = 0; i < _num_strength_uos; ++i)
196  (*_strength_prop[i])[_qp] = 0.0;
197 
198  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
199  {
200  (*_int_var_stateful_prop[i])[_qp] = 0.0;
201  // TODO: remove this nasty const_cast if you can figure out how
202  const_cast<MaterialProperty<Real> &>(*_int_var_stateful_prop_old[i])[_qp] = 0.0;
203  }
204 
205  for (unsigned int i = 0; i < _num_int_var_rate_uos; ++i)
206  (*_int_var_rate_prop[i])[_qp] = 0.0;
207 }
208 
209 void
211 {
212  bool converge;
214  unsigned int num_substep = 1;
215  unsigned int substep_iter = 1;
216 
217  saveOldState();
218 
219  do
220  {
221  preSolveQp();
222 
223  converge = true;
224  _dt_substep = _dt / num_substep;
225 
226  for (unsigned int istep = 0; istep < num_substep; ++istep)
227  {
228  _dfgrd_tmp = (istep + 1.0) * delta_dfgrd / num_substep + _deformation_gradient_old[_qp];
229  if (!solveQp())
230  {
231  converge = false;
232  substep_iter++;
233  num_substep *= 2;
234  break;
235  }
236  }
237 
238  if (substep_iter > _max_substep_iter)
239  mooseError("Constitutive failure with substepping at quadrature point ",
240  _q_point[_qp](0),
241  " ",
242  _q_point[_qp](1),
243  " ",
244  _q_point[_qp](2));
245  } while (!converge);
246 
247  postSolveQp();
248 }
249 
250 void
252 {
253  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
255 }
256 
257 void
259 {
260  _fp_tmp_old_inv = _fp_old[_qp].inverse();
261 
262  // TODO: remove this nasty const_cast if you can figure out how
263  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
264  (*_int_var_stateful_prop[i])[_qp] =
265  const_cast<MaterialProperty<Real> &>(*_int_var_stateful_prop_old[i])[_qp] = _int_var_old[i];
266 
268 }
269 
270 bool
272 {
274  if (!solveFlowrate())
275  return false;
277 
278  return true;
279 }
280 
281 void
283 {
284  recoverOldState();
285 
286  _stress[_qp] = _fe * _pk2[_qp] * _fe.transpose() / _fe.det();
287  _fp[_qp] = _fp_tmp_inv.inverse();
288 
290 }
291 
292 void
294 {
295  // TODO: remove this nasty const_cast if you can figure out how
296  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
297  const_cast<MaterialProperty<Real> &>(*_int_var_stateful_prop_old[i])[_qp] = _int_var_old[i];
298 }
299 
300 void
302 {
303  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
304  {
305  _flow_rate(i) = 0.0;
306  (*_flow_rate_prop[i])[_qp] = 0.0;
307  }
308 
309  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
310  (*_int_var_stateful_prop[i])[_qp] = (*_int_var_stateful_prop_old[i])[_qp];
311 
314 }
315 
316 bool
318 {
319  Real resid0, rnorm;
320  unsigned int iter = 0;
321 
322 #ifdef DEBUG
323  std::vector<Real> rnormst(_maxiters + 1), flowratest(_maxiters + 1);
324 #endif
325 
327  return false;
328 
329  rnorm = computeNorm(_resid.get_values());
330  resid0 = rnorm;
331 
332 #ifdef DEBUG
333  rnormst[iter] = rnorm;
334  flowratest[iter] = computeNorm(_flow_rate.get_values());
335 #endif
336 
337  while (rnorm > _resid_abs_tol && rnorm > _resid_rel_tol * resid0 && iter < _maxiters)
338  {
340 
341  updateFlowRate();
342 
344 
346  return false;
347 
348  rnorm = computeNorm(_resid.get_values());
349  iter++;
350 
351 #ifdef DEBUG
352  rnormst[iter] = rnorm;
353  flowratest[iter] = computeNorm(_flow_rate.get_values());
354 #endif
355  }
356 
357  if (iter == _maxiters && rnorm > _resid_abs_tol && rnorm > _resid_rel_tol * resid0)
358  return false;
359 
360  return true;
361 }
362 
363 void
365 {
367 
368  // TODO: remove this nasty const_cast if you can figure out how
369  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
370  const_cast<MaterialProperty<Real> &>(*_int_var_stateful_prop_old[i])[_qp] =
371  (*_int_var_stateful_prop[i])[_qp];
372 }
373 
374 bool
376 {
377  if (!computeIntVarRates())
378  return false;
379 
380  if (!computeIntVar())
381  return false;
382 
383  if (!computeStrength())
384  return false;
385 
388 
390  return false;
391 
392  if (!computeFlowDirection())
393  return false;
394 
395  _resid += _flow_rate;
396 
397  return true;
398 }
399 
400 void
402 {
406 
407  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
408  for (unsigned int j = 0; j < _num_strength_uos; ++j)
409  _flow_rate_uo[i]->computeDerivative(_qp, _strength_uo_names[j], _dflowrate_dstrength(i, j));
410 
411  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
412  _flow_rate_uo[i]->computeTensorDerivative(_qp, _pk2_prop_name, _dflowrate_dpk2[i]);
413 
415 
416  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
417  {
420  }
421 
422  DenseMatrix<Real> dflowrate_dflowrate;
423  dflowrate_dflowrate = _dflowrate_dstrength;
424  dflowrate_dflowrate.right_multiply(_dstrength_dintvar);
425  dflowrate_dflowrate.right_multiply(_dintvar_dflowrate);
426 
427  _jac.zero();
428  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
429  for (unsigned int j = 0; j < _num_flow_rate_uos; ++j)
430  {
431  if (i == j)
432  _jac(i, j) = 1;
433  _jac(i, j) -= dflowrate_dflowrate(i, j);
434  _jac(i, j) -= _dflowrate_dpk2[i].doubleContraction(_dpk2_dflowrate[j]);
435  }
436 }
437 
438 bool
440 {
441  for (unsigned i = 0; i < _num_flow_rate_uos; ++i)
442  {
443  if (!_flow_rate_uo[i]->computeDirection(_qp, _flow_dirn[i]))
444  return false;
445  }
446  return true;
447 }
448 
449 bool
451 {
452  Real val = 0;
453  for (unsigned i = 0; i < _num_flow_rate_uos; ++i)
454  {
455  if (_flow_rate_uo[i]->computeValue(_qp, val))
456  _resid(i) = -val;
457  else
458  return false;
459  }
460  return true;
461 }
462 
463 void
465 {
467  _pk2[_qp] = _elasticity_tensor[_qp] * _ee;
468 
469  _dce_dfe.zero();
470  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
471  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
472  for (unsigned int k = 0; k < LIBMESH_DIM; ++k)
473  {
474  _dce_dfe(i, j, k, i) = _dce_dfe(i, j, k, i) + _fe(k, j);
475  _dce_dfe(i, j, k, j) = _dce_dfe(i, j, k, j) + _fe(k, i);
476  }
477 
479 }
480 
481 void
483 {
484  RankTwoTensor iden(RankTwoTensor::initIdentity);
485  _ee = 0.5 * (_ce[_qp] - iden);
486 }
487 
488 void
490 {
491  _dee_dce.zero();
492 
493  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
494  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
495  _dee_dce(i, j, i, j) = 0.5;
496 }
497 
498 void
500 {
501  _ce[_qp] = _fe.transpose() * _fe;
502 }
503 
504 void
506 {
507  RankTwoTensor iden(RankTwoTensor::initIdentity);
508 
509  RankTwoTensor val;
510  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
511  val += _flow_rate(i) * _flow_dirn[i] * _dt_substep;
512 
513  _fp_tmp_inv = _fp_tmp_old_inv * (iden - val);
514  _fp_tmp_inv = std::pow(_fp_tmp_inv.det(), -1.0 / 3.0) * _fp_tmp_inv;
516 }
517 
518 void
520 {
521  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
522  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
523  for (unsigned int k = 0; k < LIBMESH_DIM; ++k)
524  _dfe_dfpinv(i, j, k, j) = _dfgrd_tmp(i, k);
525 
527 }
528 
529 Real
531 {
532  Real val = 0.0;
533  for (unsigned int i = 0; i < var.size(); ++i)
534  val += Utility::pow<2>(var[i]);
535  return std::sqrt(val);
536 }
537 
538 void
540 {
541  _jac.lu_solve(_resid, _dflow_rate);
543 
544  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
545  (*_flow_rate_prop[i])[_qp] = _flow_rate(i);
546 }
547 
548 void
550 {
551  _tan_mod = _fe.mixedProductIkJl(_fe) * _dpk2_dfe;
552  _pk2_fet = _pk2[_qp] * _fe.transpose();
553  _fe_pk2 = _fe * _pk2[_qp];
554 
555  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
556  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
557  for (unsigned int l = 0; l < LIBMESH_DIM; ++l)
558  {
559  _tan_mod(i, j, i, l) += _pk2_fet(l, j);
560  _tan_mod(i, j, j, l) += _fe_pk2(i, l);
561  }
562 
563  _tan_mod /= _fe.det();
564 
565  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
566  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
567  for (unsigned int l = 0; l < LIBMESH_DIM; ++l)
568  _dfe_df(i, j, i, l) = _fp_tmp_inv(l, j);
569 
570  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
571  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
572  for (unsigned int k = 0; k < LIBMESH_DIM; ++k)
573  for (unsigned int l = 0; l < LIBMESH_DIM; ++l)
574  _df_dstretch_inc(i, j, k, l) =
575  _rotation_increment[_qp](i, k) * _deformation_gradient_old[_qp](l, j);
576 
578 }
579 
580 bool
582 {
583  Real val = 0;
584  for (unsigned int i = 0; i < _num_int_var_rate_uos; ++i)
585  {
586  if (_int_var_rate_uo[i]->computeValue(_qp, val))
587  (*_int_var_rate_prop[i])[_qp] = val;
588  else
589  return false;
590  }
591  return true;
592 }
593 
594 bool
596 {
597  Real val = 0;
598  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
599  {
600  if (_int_var_uo[i]->computeValue(_qp, _dt_substep, val))
601  (*_int_var_stateful_prop[i])[_qp] = val;
602  else
603  return false;
604  }
605  return true;
606 }
607 
608 bool
610 {
611  Real val = 0;
612  for (unsigned int i = 0; i < _num_strength_uos; ++i)
613  {
614  if (_strength_uo[i]->computeValue(_qp, val))
615  (*_strength_prop[i])[_qp] = val;
616  else
617  return false;
618  }
619  return true;
620 }
621 
622 void
624 {
625  Real val = 0;
626 
627  for (unsigned int i = 0; i < _num_int_var_rate_uos; ++i)
628  for (unsigned int j = 0; j < _num_flow_rate_uos; ++j)
629  {
630  _int_var_rate_uo[i]->computeDerivative(_qp, _flow_rate_uo_names[j], val);
631  _dintvarrate_dflowrate[j](i) = val;
632  }
633 }
634 
635 void
637 {
638  Real val = 0;
639 
640  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
641  for (unsigned int j = 0; j < _num_int_var_rate_uos; ++j)
642  {
643  _int_var_uo[i]->computeDerivative(_qp, _dt_substep, _int_var_rate_uo_names[j], val);
644  _dintvar_dintvarrate(i, j) = val;
645  }
646 
647  _dintvar_dintvar.zero();
648 
649  for (unsigned int i = 0; i < _num_int_var_uos; ++i)
650  for (unsigned int j = 0; j < _num_int_var_uos; ++j)
651  {
652  if (i == j)
653  _dintvar_dintvar(i, j) = 1;
654  for (unsigned int k = 0; k < _num_int_var_rate_uos; ++k)
656  }
657 
658  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
660 
661  for (unsigned int i = 0; i < _num_flow_rate_uos; ++i)
662  {
663  _dintvar_dintvar_x.zero();
665  for (unsigned int j = 0; j < _num_int_var_uos; ++j)
667  }
668 }
669 
670 void
672 {
673  Real val = 0;
674 
675  for (unsigned int i = 0; i < _num_strength_uos; ++i)
676  for (unsigned int j = 0; j < _num_int_var_uos; ++j)
677  {
678  _strength_uo[i]->computeDerivative(_qp, _int_var_uo_names[j], val);
679  _dstrength_dintvar(i, j) = val;
680  }
681 }
FiniteStrainHyperElasticViscoPlastic::_int_var_uo
std::vector< const HEVPInternalVarUOBase * > _int_var_uo
Internal variable user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:191
FiniteStrainHyperElasticViscoPlastic::solveFlowrate
virtual bool solveFlowrate()
Solve for flow rate and state.
Definition: FiniteStrainHyperElasticViscoPlastic.C:317
FiniteStrainHyperElasticViscoPlastic::_ce
MaterialProperty< RankTwoTensor > & _ce
Definition: FiniteStrainHyperElasticViscoPlastic.h:199
FiniteStrainHyperElasticViscoPlastic::_fp_tmp_inv
RankTwoTensor _fp_tmp_inv
Definition: FiniteStrainHyperElasticViscoPlastic.h:217
FiniteStrainHyperElasticViscoPlastic::computeNorm
virtual Real computeNorm(const std::vector< Real > &)
Computes norm of residual vector.
Definition: FiniteStrainHyperElasticViscoPlastic.C:530
FiniteStrainHyperElasticViscoPlastic::_dflowrate_dstrength
DenseMatrix< Real > _dflowrate_dstrength
Definition: FiniteStrainHyperElasticViscoPlastic.h:242
registerMooseObject
registerMooseObject("TensorMechanicsApp", FiniteStrainHyperElasticViscoPlastic)
FiniteStrainHyperElasticViscoPlastic::_fp_old
const MaterialProperty< RankTwoTensor > & _fp_old
Definition: FiniteStrainHyperElasticViscoPlastic.h:198
FiniteStrainHyperElasticViscoPlastic::updateFlowRate
virtual void updateFlowRate()
Update flow rate.
Definition: FiniteStrainHyperElasticViscoPlastic.C:539
FiniteStrainHyperElasticViscoPlastic::_dintvar_dintvar_x
DenseVector< Real > _dintvar_dintvar_x
Definition: FiniteStrainHyperElasticViscoPlastic.h:243
FiniteStrainHyperElasticViscoPlastic::postSolveQp
virtual void postSolveQp()
Update state for output (Outside substepping)
Definition: FiniteStrainHyperElasticViscoPlastic.C:282
ComputeStressBase::_stress
MaterialProperty< RankTwoTensor > & _stress
Stress material property.
Definition: ComputeStressBase.h:50
FiniteStrainHyperElasticViscoPlastic::_fp_tmp_old_inv
RankTwoTensor _fp_tmp_old_inv
Definition: FiniteStrainHyperElasticViscoPlastic.h:217
FiniteStrainHyperElasticViscoPlastic::_dflow_rate
DenseVector< Real > _dflow_rate
Definition: FiniteStrainHyperElasticViscoPlastic.h:229
FiniteStrainHyperElasticViscoPlastic::_dfe_df
RankFourTensor _dfe_df
Definition: FiniteStrainHyperElasticViscoPlastic.h:221
FiniteStrainHyperElasticViscoPlastic::computeFlowDirection
virtual bool computeFlowDirection()
Calls user objects to compute flow directions.
Definition: FiniteStrainHyperElasticViscoPlastic.C:439
FiniteStrainHyperElasticViscoPlastic::_num_int_var_rate_uos
unsigned int _num_int_var_rate_uos
Number of internal variable rate user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:184
FiniteStrainHyperElasticViscoPlastic::_dintvarrate_dflowrate
std::vector< DenseVector< Real > > _dintvarrate_dflowrate
Jacobian variables.
Definition: FiniteStrainHyperElasticViscoPlastic.h:234
FiniteStrainHyperElasticViscoPlastic::_strength_uo
std::vector< const HEVPStrengthUOBase * > _strength_uo
Strength user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:189
FiniteStrainHyperElasticViscoPlastic::computeElasticStrain
virtual void computeElasticStrain()
Computes elastic Lagrangian strain.
Definition: FiniteStrainHyperElasticViscoPlastic.C:482
FiniteStrainHyperElasticViscoPlastic::computeIntVarRateDerivatives
virtual void computeIntVarRateDerivatives()
This function call user objects to compute dintvar_rate/dintvar and dintvarrate/dflowrate.
Definition: FiniteStrainHyperElasticViscoPlastic.C:623
FiniteStrainHyperElasticViscoPlastic::_dstrength_dintvar
DenseMatrix< Real > _dstrength_dintvar
Definition: FiniteStrainHyperElasticViscoPlastic.h:241
FiniteStrainHyperElasticViscoPlastic::preSolveFlowrate
virtual void preSolveFlowrate()
Sets state for solve (Inside substepping)
Definition: FiniteStrainHyperElasticViscoPlastic.C:301
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
ComputeStressBase::_Jacobian_mult
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
Definition: ComputeStressBase.h:61
FiniteStrainHyperElasticViscoPlastic::_df_dstretch_inc
RankFourTensor _df_dstretch_inc
Definition: FiniteStrainHyperElasticViscoPlastic.h:222
defineLegacyParams
defineLegacyParams(FiniteStrainHyperElasticViscoPlastic)
FiniteStrainHyperElasticViscoPlastic::computeQpJacobian
virtual void computeQpJacobian()
This function computes the Jacobian.
Definition: FiniteStrainHyperElasticViscoPlastic.C:549
FiniteStrainHyperElasticViscoPlastic::_dintvar_dflowrate_tmp
std::vector< DenseVector< Real > > _dintvar_dflowrate_tmp
Definition: FiniteStrainHyperElasticViscoPlastic.h:235
FiniteStrainHyperElasticViscoPlastic::initQpStatefulProperties
virtual void initQpStatefulProperties()
Initializes state.
Definition: FiniteStrainHyperElasticViscoPlastic.C:185
FiniteStrainHyperElasticViscoPlastic::saveOldState
virtual void saveOldState()
This function saves the old stateful properties that is modified during sub stepping.
Definition: FiniteStrainHyperElasticViscoPlastic.C:251
FiniteStrainHyperElasticViscoPlastic::_rotation_increment
const MaterialProperty< RankTwoTensor > & _rotation_increment
Definition: FiniteStrainHyperElasticViscoPlastic.h:207
FiniteStrainHyperElasticViscoPlastic::_dintvar_dflowrate
DenseMatrix< Real > _dintvar_dflowrate
Definition: FiniteStrainHyperElasticViscoPlastic.h:240
FiniteStrainHyperElasticViscoPlastic::_dpk2_dflowrate
std::vector< RankTwoTensor > _dpk2_dflowrate
Definition: FiniteStrainHyperElasticViscoPlastic.h:226
FiniteStrainHyperElasticViscoPlastic::_dpk2_dce
RankFourTensor _dpk2_dce
Definition: FiniteStrainHyperElasticViscoPlastic.h:220
FiniteStrainHyperElasticViscoPlastic::computeIntVarRates
virtual bool computeIntVarRates()
This function call user objects to calculate rate of internal variables.
Definition: FiniteStrainHyperElasticViscoPlastic.C:581
FiniteStrainHyperElasticViscoPlastic::validParams
static InputParameters validParams()
Definition: FiniteStrainHyperElasticViscoPlastic.C:18
FiniteStrainHyperElasticViscoPlastic::_dintvar_dintvar
DenseMatrix< Real > _dintvar_dintvar
Definition: FiniteStrainHyperElasticViscoPlastic.h:239
FiniteStrainHyperElasticViscoPlastic::_flow_rate_uo
std::vector< const HEVPFlowRateUOBase * > _flow_rate_uo
Flow rate user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:187
FiniteStrainHyperElasticViscoPlastic::FiniteStrainHyperElasticViscoPlastic
FiniteStrainHyperElasticViscoPlastic(const InputParameters &parameters)
Definition: FiniteStrainHyperElasticViscoPlastic.C:45
FiniteStrainHyperElasticViscoPlastic::_flow_rate_prop
std::vector< MaterialProperty< Real > * > _flow_rate_prop
Definition: FiniteStrainHyperElasticViscoPlastic.h:209
FiniteStrainHyperElasticViscoPlastic::_jac
DenseMatrix< Real > _jac
Definition: FiniteStrainHyperElasticViscoPlastic.h:244
FiniteStrainHyperElasticViscoPlastic::_elasticity_tensor
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
Definition: FiniteStrainHyperElasticViscoPlastic.h:204
ComputeStressBase
ComputeStressBase is the base class for stress tensors.
Definition: ComputeStressBase.h:26
FiniteStrainHyperElasticViscoPlastic::_maxiters
unsigned int _maxiters
Maximum number of iterations.
Definition: FiniteStrainHyperElasticViscoPlastic.h:164
FiniteStrainHyperElasticViscoPlastic::initNumUserObjects
void initNumUserObjects(const std::vector< UserObjectName > &, unsigned int &)
This function calculates the number of each user object type.
Definition: FiniteStrainHyperElasticViscoPlastic.C:112
FiniteStrainHyperElasticViscoPlastic::computeFlowRateResidual
virtual bool computeFlowRateResidual()
Computes flow rate residual vector.
Definition: FiniteStrainHyperElasticViscoPlastic.C:375
ComputeStressBase::validParams
static InputParameters validParams()
Definition: ComputeStressBase.C:17
FiniteStrainHyperElasticViscoPlastic::preSolveQp
virtual void preSolveQp()
Sets state for solve.
Definition: FiniteStrainHyperElasticViscoPlastic.C:258
FiniteStrainHyperElasticViscoPlastic::postSolveFlowrate
virtual void postSolveFlowrate()
Update state for output (Inside substepping)
Definition: FiniteStrainHyperElasticViscoPlastic.C:364
FiniteStrainHyperElasticViscoPlastic::_dee_dce
RankFourTensor _dee_dce
Definition: FiniteStrainHyperElasticViscoPlastic.h:221
FiniteStrainHyperElasticViscoPlastic::_flow_rate
DenseVector< Real > _flow_rate
Definition: FiniteStrainHyperElasticViscoPlastic.h:230
FiniteStrainHyperElasticViscoPlastic::computeIntVar
virtual bool computeIntVar()
This function call user objects to integrate internal variables.
Definition: FiniteStrainHyperElasticViscoPlastic.C:595
FiniteStrainHyperElasticViscoPlastic::_dpk2_dfpinv
RankFourTensor _dpk2_dfpinv
Definition: FiniteStrainHyperElasticViscoPlastic.h:220
FiniteStrainHyperElasticViscoPlastic::_int_var_rate_uo
std::vector< const HEVPInternalVarRateUOBase * > _int_var_rate_uo
Internal variable rate user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:193
FiniteStrainHyperElasticViscoPlastic::_int_var_uo_names
std::vector< UserObjectName > _int_var_uo_names
Names of internal variable user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:173
FiniteStrainHyperElasticViscoPlastic::_tan_mod
RankFourTensor _tan_mod
Definition: FiniteStrainHyperElasticViscoPlastic.h:222
FiniteStrainHyperElasticViscoPlastic::_flow_rate_uo_names
std::vector< UserObjectName > _flow_rate_uo_names
Names of flow rate user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:169
FiniteStrainHyperElasticViscoPlastic::_fe_pk2
RankTwoTensor _fe_pk2
Definition: FiniteStrainHyperElasticViscoPlastic.h:219
FiniteStrainHyperElasticViscoPlastic::_pk2_prop_name
std::string _pk2_prop_name
Definition: FiniteStrainHyperElasticViscoPlastic.h:195
FiniteStrainHyperElasticViscoPlastic.h
FiniteStrainHyperElasticViscoPlastic::_dce_dfe
RankFourTensor _dce_dfe
Definition: FiniteStrainHyperElasticViscoPlastic.h:221
FiniteStrainHyperElasticViscoPlastic::computeStrength
virtual bool computeStrength()
This function call user objects to compute strength.
Definition: FiniteStrainHyperElasticViscoPlastic.C:609
FiniteStrainHyperElasticViscoPlastic::initJacobianVariables
virtual void initJacobianVariables()
This function initialize variables required for Jacobian calculation.
Definition: FiniteStrainHyperElasticViscoPlastic.C:157
FiniteStrainHyperElasticViscoPlastic::computeDeeDce
virtual void computeDeeDce()
Computes derivative of elastic strain w.r.t elastic Right Cauchy Green Tensor.
Definition: FiniteStrainHyperElasticViscoPlastic.C:489
FiniteStrainHyperElasticViscoPlastic::_num_strength_uos
unsigned int _num_strength_uos
Number of strength user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:180
FiniteStrainHyperElasticViscoPlastic::computeQpStress
virtual void computeQpStress()
This function computes the Cauchy stress.
Definition: FiniteStrainHyperElasticViscoPlastic.C:210
FiniteStrainHyperElasticViscoPlastic::_dfgrd_tmp
RankTwoTensor _dfgrd_tmp
Definition: FiniteStrainHyperElasticViscoPlastic.h:216
name
const std::string name
Definition: Setup.h:21
FiniteStrainHyperElasticViscoPlastic::_int_var_old
std::vector< Real > _int_var_old
Definition: FiniteStrainHyperElasticViscoPlastic.h:214
FiniteStrainHyperElasticViscoPlastic::_pk2_fet
RankTwoTensor _pk2_fet
Definition: FiniteStrainHyperElasticViscoPlastic.h:219
FiniteStrainHyperElasticViscoPlastic::recoverOldState
virtual void recoverOldState()
This function restores the the old stateful properties after a successful solve.
Definition: FiniteStrainHyperElasticViscoPlastic.C:293
FiniteStrainHyperElasticViscoPlastic::_dpk2_dfe
RankFourTensor _dpk2_dfe
Definition: FiniteStrainHyperElasticViscoPlastic.h:220
FiniteStrainHyperElasticViscoPlastic::_dflowrate_dpk2
std::vector< RankTwoTensor > _dflowrate_dpk2
Definition: FiniteStrainHyperElasticViscoPlastic.h:225
FiniteStrainHyperElasticViscoPlastic::_deformation_gradient
const MaterialProperty< RankTwoTensor > & _deformation_gradient
Definition: FiniteStrainHyperElasticViscoPlastic.h:205
FiniteStrainHyperElasticViscoPlastic::solveQp
virtual bool solveQp()
Solve state.
Definition: FiniteStrainHyperElasticViscoPlastic.C:271
FiniteStrainHyperElasticViscoPlastic::_num_int_var_uos
unsigned int _num_int_var_uos
Number of internal variable user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:182
FiniteStrainHyperElasticViscoPlastic::computeIntVarDerivatives
virtual void computeIntVarDerivatives()
This function call user objects to compute dintvar/dintvar_rate and dintvar/dflowrate.
Definition: FiniteStrainHyperElasticViscoPlastic.C:636
FiniteStrainHyperElasticViscoPlastic::_dfe_dfpinv
RankFourTensor _dfe_dfpinv
Definition: FiniteStrainHyperElasticViscoPlastic.h:220
FiniteStrainHyperElasticViscoPlastic::initPropOld
void initPropOld(const std::vector< UserObjectName > &, unsigned int, std::vector< const MaterialProperty< T > * > &)
This function initializes old for stateful properties associated with user object Only user objects t...
Definition: FiniteStrainHyperElasticViscoPlastic.C:131
FiniteStrainHyperElasticViscoPlastic::_strength_prop
std::vector< MaterialProperty< Real > * > _strength_prop
Definition: FiniteStrainHyperElasticViscoPlastic.h:210
FiniteStrainHyperElasticViscoPlastic::_int_var_stateful_prop_old
std::vector< const MaterialProperty< Real > * > _int_var_stateful_prop_old
Definition: FiniteStrainHyperElasticViscoPlastic.h:212
FiniteStrainHyperElasticViscoPlastic::_max_substep_iter
unsigned int _max_substep_iter
Maximum number of substep iterations.
Definition: FiniteStrainHyperElasticViscoPlastic.h:166
RankFourTensorTempl
Definition: ACGrGrElasticDrivingForce.h:20
FiniteStrainHyperElasticViscoPlastic::_ee
RankTwoTensor _ee
Definition: FiniteStrainHyperElasticViscoPlastic.h:218
FiniteStrainHyperElasticViscoPlastic::initUserObjects
void initUserObjects(const std::vector< UserObjectName > &, unsigned int, std::vector< const T * > &)
This function initializes user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.C:143
FiniteStrainHyperElasticViscoPlastic::computePK2StressAndDerivative
virtual void computePK2StressAndDerivative()
Computes PK2 stress and derivative w.r.t elastic Right Cauchy Green Tensor.
Definition: FiniteStrainHyperElasticViscoPlastic.C:464
FiniteStrainHyperElasticViscoPlastic::_flow_dirn
std::vector< RankTwoTensor > _flow_dirn
Definition: FiniteStrainHyperElasticViscoPlastic.h:224
FiniteStrainHyperElasticViscoPlastic::_num_flow_rate_uos
unsigned int _num_flow_rate_uos
Number of flow rate user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:178
FiniteStrainHyperElasticViscoPlastic::_dfpinv_dflowrate
std::vector< RankTwoTensor > _dfpinv_dflowrate
Definition: FiniteStrainHyperElasticViscoPlastic.h:227
FiniteStrainHyperElasticViscoPlastic::_fe
RankTwoTensor _fe
Definition: FiniteStrainHyperElasticViscoPlastic.h:218
FiniteStrainHyperElasticViscoPlastic::computeElasticRightCauchyGreenTensor
virtual void computeElasticRightCauchyGreenTensor()
Computes elastic Right Cauchy Green Tensor.
Definition: FiniteStrainHyperElasticViscoPlastic.C:499
FiniteStrainHyperElasticViscoPlastic::initProp
void initProp(const std::vector< UserObjectName > &, unsigned int, std::vector< MaterialProperty< T > * > &)
This function initializes properties for each user object.
Definition: FiniteStrainHyperElasticViscoPlastic.C:120
FiniteStrainHyperElasticViscoPlastic::_strength_uo_names
std::vector< UserObjectName > _strength_uo_names
Names of strength user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:171
FiniteStrainHyperElasticViscoPlastic::_deformation_gradient_old
const MaterialProperty< RankTwoTensor > & _deformation_gradient_old
Definition: FiniteStrainHyperElasticViscoPlastic.h:206
FiniteStrainHyperElasticViscoPlastic::computeFlowRateJacobian
virtual void computeFlowRateJacobian()
Computes flow rate Jacobian matrix.
Definition: FiniteStrainHyperElasticViscoPlastic.C:401
FiniteStrainHyperElasticViscoPlastic::_resid
DenseVector< Real > _resid
Definition: FiniteStrainHyperElasticViscoPlastic.h:231
FiniteStrainHyperElasticViscoPlastic::computeDpk2Dfpinv
virtual void computeDpk2Dfpinv()
Computes derivative of PK2 stress wrt inverse of plastic deformation gradient.
Definition: FiniteStrainHyperElasticViscoPlastic.C:519
RankTwoTensorTempl< Real >
FiniteStrainHyperElasticViscoPlastic::computeElasticPlasticDeformGrad
virtual void computeElasticPlasticDeformGrad()
Computes elastic and plastic deformation gradients.
Definition: FiniteStrainHyperElasticViscoPlastic.C:505
FiniteStrainHyperElasticViscoPlastic::_resid_abs_tol
Real _resid_abs_tol
Absolute tolerance for residual convergence check.
Definition: FiniteStrainHyperElasticViscoPlastic.h:160
FiniteStrainHyperElasticViscoPlastic::computeFlowRateFunction
virtual bool computeFlowRateFunction()
Calls user objects to compute flow rates.
Definition: FiniteStrainHyperElasticViscoPlastic.C:450
FiniteStrainHyperElasticViscoPlastic::_dt_substep
Real _dt_substep
Definition: FiniteStrainHyperElasticViscoPlastic.h:246
FiniteStrainHyperElasticViscoPlastic::_int_var_rate_uo_names
std::vector< UserObjectName > _int_var_rate_uo_names
Names of internal variable rate user objects.
Definition: FiniteStrainHyperElasticViscoPlastic.h:175
FiniteStrainHyperElasticViscoPlastic::_dintvarrate_dintvar
DenseMatrix< Real > _dintvarrate_dintvar
Definition: FiniteStrainHyperElasticViscoPlastic.h:237
FiniteStrainHyperElasticViscoPlastic::_pk2
MaterialProperty< RankTwoTensor > & _pk2
Definition: FiniteStrainHyperElasticViscoPlastic.h:196
FiniteStrainHyperElasticViscoPlastic::_resid_rel_tol
Real _resid_rel_tol
Relative tolerance for residual convergence check.
Definition: FiniteStrainHyperElasticViscoPlastic.h:162
FiniteStrainHyperElasticViscoPlastic::initUOVariables
virtual void initUOVariables()
This function initializes the properties, stateful properties and user objects The properties and sta...
Definition: FiniteStrainHyperElasticViscoPlastic.C:89
FiniteStrainHyperElasticViscoPlastic::_fp
MaterialProperty< RankTwoTensor > & _fp
Definition: FiniteStrainHyperElasticViscoPlastic.h:197
FiniteStrainHyperElasticViscoPlastic
This class solves the viscoplastic flow rate equations in the total form Involves 4 different types o...
Definition: FiniteStrainHyperElasticViscoPlastic.h:33
FiniteStrainHyperElasticViscoPlastic::_dintvar_dintvarrate
DenseMatrix< Real > _dintvar_dintvarrate
Definition: FiniteStrainHyperElasticViscoPlastic.h:238
FiniteStrainHyperElasticViscoPlastic::computeStrengthDerivatives
void computeStrengthDerivatives()
This function call user objects to compute dstrength/dintvar.
Definition: FiniteStrainHyperElasticViscoPlastic.C:671
FiniteStrainHyperElasticViscoPlastic::_int_var_stateful_prop
std::vector< MaterialProperty< Real > * > _int_var_stateful_prop
Definition: FiniteStrainHyperElasticViscoPlastic.h:211
FiniteStrainHyperElasticViscoPlastic::_int_var_rate_prop
std::vector< MaterialProperty< Real > * > _int_var_rate_prop
Definition: FiniteStrainHyperElasticViscoPlastic.h:213