https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
42public:
44
46
48
49protected:
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
289private:
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};
Real f(Real x)
Test function for Brents method.
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-")
MultiPlasticityRawComponentAssembler holds and computes yield functions, flow directions,...
bool anyActiveSurfaces(int model, const std::vector< bool > &active)
returns true if any internal surfaces of the given model are active according to 'active'
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.
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...
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's internal surface number
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=...
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.
unsigned int _num_surfaces
Number of surfaces within the plastic models.
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.
std::vector< const SolidMechanicsPlasticModel * > _f
User objects that define the yield functions, flow potentials, etc.
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 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.
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< std::vector< unsigned int > > _surfaces_given_model
_surfaces_given_model[model_number] = vector of surface numbers for this model
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.
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.
unsigned int modelNumber(unsigned int surface)
returns the model number, given the surface number
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,...
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...
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...
std::vector< unsigned int > _model_given_surface
given a surface number, this returns the model number
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.
unsigned int _num_models
Number of plastic models for this material.
MooseEnum _specialIC
Allows initial set of active constraints to be chosen optimally.