https://mooseframework.inl.gov
MultiPlasticityRawComponentAssembler.h
Go to the documentation of this file.
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 #pragma once
11 
12 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
13 /* */
14 /* All contents are licensed under LGPL V2.1 */
15 /* See LICENSE for full restrictions */
16 /****************************************************************/
17 
19 #include "UserObjectInterface.h"
20 
41 {
42 public:
44 
46 
48 
49 protected:
51 
53  unsigned int _num_models;
54 
62  unsigned int _num_surfaces;
63 
65  std::vector<std::vector<unsigned int>> _surfaces_given_model;
66 
69 
71  std::vector<const SolidMechanicsPlasticModel *> _f;
72 
80  virtual void yieldFunction(const RankTwoTensor & stress,
81  const std::vector<Real> & intnl,
82  const std::vector<bool> & active,
83  std::vector<Real> & f);
84 
93  virtual void dyieldFunction_dstress(const RankTwoTensor & stress,
94  const std::vector<Real> & intnl,
95  const std::vector<bool> & active,
96  std::vector<RankTwoTensor> & df_dstress);
97 
106  virtual void dyieldFunction_dintnl(const RankTwoTensor & stress,
107  const std::vector<Real> & intnl,
108  const std::vector<bool> & active,
109  std::vector<Real> & df_dintnl);
110 
118  virtual void flowPotential(const RankTwoTensor & stress,
119  const std::vector<Real> & intnl,
120  const std::vector<bool> & active,
121  std::vector<RankTwoTensor> & r);
122 
131  virtual void dflowPotential_dstress(const RankTwoTensor & stress,
132  const std::vector<Real> & intnl,
133  const std::vector<bool> & active,
134  std::vector<RankFourTensor> & dr_dstress);
135 
144  virtual void dflowPotential_dintnl(const RankTwoTensor & stress,
145  const std::vector<Real> & intnl,
146  const std::vector<bool> & active,
147  std::vector<RankTwoTensor> & dr_dintnl);
148 
159  virtual void hardPotential(const RankTwoTensor & stress,
160  const std::vector<Real> & intnl,
161  const std::vector<bool> & active,
162  std::vector<Real> & h);
163 
173  virtual void dhardPotential_dstress(const RankTwoTensor & stress,
174  const std::vector<Real> & intnl,
175  const std::vector<bool> & active,
176  std::vector<RankTwoTensor> & dh_dstress);
177 
188  virtual void dhardPotential_dintnl(const RankTwoTensor & stress,
189  const std::vector<Real> & intnl,
190  const std::vector<bool> & active,
191  std::vector<Real> & dh_dintnl);
192 
203  virtual void buildActiveConstraints(const std::vector<Real> & f,
204  const RankTwoTensor & stress,
205  const std::vector<Real> & intnl,
206  const RankFourTensor & Eijkl,
207  std::vector<bool> & act);
208 
210  unsigned int modelNumber(unsigned int surface);
211 
213  bool anyActiveSurfaces(int model, const std::vector<bool> & active);
214 
222  void activeModelSurfaces(int model,
223  const std::vector<bool> & active,
224  std::vector<unsigned int> & active_surfaces_of_model);
225 
233  void activeSurfaces(int model,
234  const std::vector<bool> & active,
235  std::vector<unsigned int> & active_surfaces);
236 
276  bool returnMapAll(const RankTwoTensor & trial_stress,
277  const std::vector<Real> & intnl_old,
278  const RankFourTensor & E_ijkl,
279  Real ep_plastic_tolerance,
280  RankTwoTensor & stress,
281  std::vector<Real> & intnl,
282  std::vector<Real> & pm,
283  std::vector<Real> & cumulative_pm,
284  RankTwoTensor & delta_dp,
285  std::vector<Real> & yf,
286  unsigned & num_successful_plastic_returns,
287  unsigned & custom_model);
288 
289 private:
291  std::vector<unsigned int> _model_given_surface;
292 
294  std::vector<unsigned int> _model_surface_given_surface;
295 
307  void buildActiveConstraintsRock(const std::vector<Real> & f,
308  const RankTwoTensor & stress,
309  const std::vector<Real> & intnl,
310  const RankFourTensor & Eijkl,
311  std::vector<bool> & act);
312 
324  void buildActiveConstraintsJoint(const std::vector<Real> & f,
325  const RankTwoTensor & stress,
326  const std::vector<Real> & intnl,
327  const RankFourTensor & Eijkl,
328  std::vector<bool> & act);
329 };
std::vector< std::vector< unsigned int > > _surfaces_given_model
_surfaces_given_model[model_number] = vector of surface numbers for this model
void activeModelSurfaces(int model, const std::vector< bool > &active, std::vector< unsigned int > &active_surfaces_of_model)
Returns the internal surface number(s) of the active surfaces of the given model This may be of size=...
std::vector< unsigned int > _model_surface_given_surface
given a surface number, this returns the corresponding-model&#39;s internal surface number ...
virtual void dyieldFunction_dstress(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< RankTwoTensor > &df_dstress)
The derivative of the active yield function(s) with respect to stress.
MooseEnum _specialIC
Allows initial set of active constraints to be chosen optimally.
unsigned int modelNumber(unsigned int surface)
returns the model number, given the surface number
virtual void buildActiveConstraints(const std::vector< Real > &f, const RankTwoTensor &stress, const std::vector< Real > &intnl, const RankFourTensor &Eijkl, std::vector< bool > &act)
Constructs a set of active constraints, given the yield functions, f.
virtual void dhardPotential_dintnl(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< Real > &dh_dintnl)
The derivative of the active hardening potentials with respect to the active internal parameters...
bool returnMapAll(const RankTwoTensor &trial_stress, const std::vector< Real > &intnl_old, const RankFourTensor &E_ijkl, Real ep_plastic_tolerance, RankTwoTensor &stress, std::vector< Real > &intnl, std::vector< Real > &pm, std::vector< Real > &cumulative_pm, RankTwoTensor &delta_dp, std::vector< Real > &yf, unsigned &num_successful_plastic_returns, unsigned &custom_model)
Performs a returnMap for each plastic model using their inbuilt returnMap functions.
std::vector< unsigned int > _model_given_surface
given a surface number, this returns the model number
virtual void yieldFunction(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< Real > &f)
The active yield function(s)
virtual void dhardPotential_dstress(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< RankTwoTensor > &dh_dstress)
The derivative of the active hardening potentials with respect to stress By assumption in the Userobj...
void buildActiveConstraintsRock(const std::vector< Real > &f, const RankTwoTensor &stress, const std::vector< Real > &intnl, const RankFourTensor &Eijkl, std::vector< bool > &act)
"Rock" version Constructs a set of active constraints, given the yield functions, f...
void buildActiveConstraintsJoint(const std::vector< Real > &f, const RankTwoTensor &stress, const std::vector< Real > &intnl, const RankFourTensor &Eijkl, std::vector< bool > &act)
"Joint" version Constructs a set of active constraints, given the yield functions, f.
unsigned int _num_surfaces
Number of surfaces within the plastic models.
MultiPlasticityRawComponentAssembler holds and computes yield functions, flow directions, etc, for use in FiniteStrainMultiPlasticity.
Real f(Real x)
Test function for Brents method.
virtual void dflowPotential_dintnl(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< RankTwoTensor > &dr_dintnl)
The derivative of the active flow potentials with respect to the active internal parameters The UserO...
bool anyActiveSurfaces(int model, const std::vector< bool > &active)
returns true if any internal surfaces of the given model are active according to &#39;active&#39; ...
virtual void flowPotential(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< RankTwoTensor > &r)
The active flow potential(s) - one for each yield function.
const PertinentGeochemicalSystem model(database, {"H2O", "H+", "HCO3-", "O2(aq)", "Ca++", ">(s)FeOH", "radius_neg1", "radius_neg1.5"}, {"Calcite"}, {}, {"Calcite_asdf"}, {"CH4(aq)"}, {">(s)FeOCa+"}, "O2(aq)", "e-")
unsigned int _num_models
Number of plastic models for this material.
MultiPlasticityRawComponentAssembler(const MooseObject *moose_object)
virtual void dflowPotential_dstress(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< RankFourTensor > &dr_dstress)
The derivative of the active flow potential(s) with respect to stress.
virtual void hardPotential(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< Real > &h)
The active hardening potentials (one for each internal parameter and for each yield function) by assu...
virtual void dyieldFunction_dintnl(const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< bool > &active, std::vector< Real > &df_dintnl)
The derivative of active yield function(s) with respect to their internal parameters (the user object...
std::vector< const SolidMechanicsPlasticModel * > _f
User objects that define the yield functions, flow potentials, etc.
void activeSurfaces(int model, const std::vector< bool > &active, std::vector< unsigned int > &active_surfaces)
Returns the external surface number(s) of the active surfaces of the given model This may be of size=...