MultiPlasticityLinearSystem computes the linear system and handles linear-dependence removal for use in FiniteStrainMultiPlasticity. More...
#include <MultiPlasticityLinearSystem.h>
Public Member Functions | |
MultiPlasticityLinearSystem (const MooseObject *moose_object) | |
UserObjectName | getUserObjectName (const std::string ¶m_name) const |
const T & | getUserObject (const std::string ¶m_name, bool is_dependency=true) const |
const T & | getUserObjectByName (const UserObjectName &object_name, bool is_dependency=true) const |
const UserObject & | getUserObjectBase (const std::string ¶m_name, bool is_dependency=true) const |
const UserObject & | getUserObjectBaseByName (const UserObjectName &object_name, bool is_dependency=true) const |
bool | hasUserObject (const std::string ¶m_name) const |
bool | hasUserObject (const std::string ¶m_name) const |
bool | hasUserObject (const std::string ¶m_name) const |
bool | hasUserObject (const std::string ¶m_name) const |
bool | hasUserObjectByName (const UserObjectName &object_name) const |
bool | hasUserObjectByName (const UserObjectName &object_name) const |
bool | hasUserObjectByName (const UserObjectName &object_name) const |
bool | hasUserObjectByName (const UserObjectName &object_name) const |
Static Public Member Functions | |
static InputParameters | validParams () |
Protected Member Functions | |
virtual void | calculateConstraints (const RankTwoTensor &stress, const std::vector< Real > &intnl_old, const std::vector< Real > &intnl, const std::vector< Real > &pm, const RankTwoTensor &delta_dp, std::vector< Real > &f, std::vector< RankTwoTensor > &r, RankTwoTensor &epp, std::vector< Real > &ic, const std::vector< bool > &active) |
The constraints. More... | |
virtual void | calculateRHS (const RankTwoTensor &stress, const std::vector< Real > &intnl_old, const std::vector< Real > &intnl, const std::vector< Real > &pm, const RankTwoTensor &delta_dp, std::vector< Real > &rhs, const std::vector< bool > &active, bool eliminate_ld, std::vector< bool > &deactivated_due_to_ld) |
Calculate the RHS which is rhs = -(epp(0,0), epp(1,0), epp(1,1), epp(2,0), epp(2,1), epp(2,2), f[0], f[1], ..., f[num_f], ic[0], ic[1], ..., ic[num_ic]) More... | |
virtual void | calculateJacobian (const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< Real > &pm, const RankFourTensor &E_inv, const std::vector< bool > &active, const std::vector< bool > &deactivated_due_to_ld, std::vector< std::vector< Real >> &jac) |
d(rhs)/d(dof) More... | |
virtual void | nrStep (const RankTwoTensor &stress, const std::vector< Real > &intnl_old, const std::vector< Real > &intnl, const std::vector< Real > &pm, const RankFourTensor &E_inv, const RankTwoTensor &delta_dp, RankTwoTensor &dstress, std::vector< Real > &dpm, std::vector< Real > &dintnl, const std::vector< bool > &active, std::vector< bool > &deactivated_due_to_ld) |
Performs one Newton-Raphson step. More... | |
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) More... | |
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. More... | |
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 objects assume there is exactly one internal param per yield function) More... | |
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. More... | |
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. More... | |
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 UserObjects explicitly assume that r[alpha] is only dependent on intnl[alpha]. More... | |
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 assumption in the Userobjects, the h[a][alpha] is nonzero only if the surface alpha is part of model a, so we only calculate those here. More... | |
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 Userobjects, the h[a][alpha] is nonzero only for a = alpha, so we only calculate those here. More... | |
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. More... | |
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. More... | |
unsigned int | modelNumber (unsigned int surface) |
returns the model number, given the surface number More... | |
bool | anyActiveSurfaces (int model, const std::vector< bool > &active) |
returns true if any internal surfaces of the given model are active according to 'active' More... | |
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=0 if there are no active surfaces of the given model. More... | |
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=0 if there are no active surfaces of the given model. More... | |
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. More... | |
virtual void | addUserObjectDependencyHelper (const UserObject &) const |
Protected Attributes | |
Real | _svd_tol |
Tolerance on the minimum ratio of singular values before flow-directions are deemed linearly dependent. More... | |
Real | _min_f_tol |
Minimum value of the _f_tol parameters for the Yield Function User Objects. More... | |
const InputParameters & | _params |
unsigned int | _num_models |
Number of plastic models for this material. More... | |
unsigned int | _num_surfaces |
Number of surfaces within the plastic models. More... | |
std::vector< std::vector< unsigned int > > | _surfaces_given_model |
_surfaces_given_model[model_number] = vector of surface numbers for this model More... | |
MooseEnum | _specialIC |
Allows initial set of active constraints to be chosen optimally. More... | |
std::vector< const SolidMechanicsPlasticModel * > | _f |
User objects that define the yield functions, flow potentials, etc. More... | |
Private Member Functions | |
virtual int | singularValuesOfR (const std::vector< RankTwoTensor > &r, std::vector< Real > &s) |
Performs a singular-value decomposition of r and returns the singular values. More... | |
virtual void | eliminateLinearDependence (const RankTwoTensor &stress, const std::vector< Real > &intnl, const std::vector< Real > &f, const std::vector< RankTwoTensor > &r, const std::vector< bool > &active, std::vector< bool > &deactivated_due_to_ld) |
Performs a number of singular-value decompositions to check for linear-dependence of the active directions "r" If linear dependence is found, then deactivated_due_to_ld will contain 'true' entries where surfaces need to be deactivated_due_to_ld. More... | |
MultiPlasticityLinearSystem computes the linear system and handles linear-dependence removal for use in FiniteStrainMultiPlasticity.
Note that if run in debug mode you might have to use the –no-trap-fpe flag because PETSc-LAPACK-BLAS explicitly compute 0/0 and 1/0, and this causes Libmesh to trap the floating-point exceptions
These routines are quite complicated, so here is an extended explanation.
SURFACES AND MODELS
Each plasticity model can have multiple surfaces (eg, Mohr-Coulomb has 6 surfaces), and one internal parameter. This is also described in MultiPlasticityRawComponentAssembler. The
VARIABLE NAMES
_num_surfaces = total number of surfaces _num_models = total number of plasticity models pm = plasticity multiplier. pm.size() = _num_surfaces intnl = internal variable. intnl.size() = _num_models
DEGREES OF FREEDOM
The degrees of freedom are: the 6 components of stress (it is assumed to be symmetric) the plasticity multipliers, pm. the internal parameters, intnl.
Note that in any single Newton-Raphson (NR) iteration, the number of pm and intnl may be different from any other NR iteration. This is because of deactivating surfaces because they are deemed unimportant by the calling program (eg, their yield function is < 0), or because their flow direction is linearly dependent on other surfaces. Therefore:
Hence, more exactly, the degrees of freedom, whose changes will be provided in the NR step are: the 6 components of stress (it is assumed to be symmetric) the plasticity multipliers, pm, belonging to linearly independent surfaces the internal parameters, intnl, belonging to models with at least one linearly-independent surface
THE CONSTRAINTS AND RHS
The variables calculated by calculateConstraints and calculateRHS are: epp = pm*r - E_inv*(trial_stress - stress) = pm*r - delta_dp f = yield function [all the active constraints, including the deactivated_due_to_ld. The latter ones will not be put into the linear system] ic = intnl - intnl_old + pm*h [only for models that contain active surfaces]
Here pm*r = sum_{active_alpha} pm[alpha]*r[alpha]. Note that this contains all the "active" surfaces, even the ones that have been deactivated_due_to_ld. in calculateConstraints, etc, r is a std::vector containing only all the active flow directions (including deactivated_due_to_ld, but not the "not active"). f = all the "active" surfaces, even the ones that have been deactivated_due_to_ld. However, the latter are not put into the RHS pm*h = sum_{active_alpha} pm[alpha]*h[alpha]. Note that this only contains the "active" hardening potentials, even the ones that have been deactivated_due_to_ld. In calculateConstraints, calculateRHS and calculateJacobian, h is a std::vector containing only these "active" ones. Hence, the sum_{active_alpha} contains deactivated_due_to_ld contributions. HOWEVER, if all the surfaces belonging to a model are either "not active" or deactivated_due_to_ld, then this ic is not included in the RHS
The RHS is rhs = -(epp(0,0), epp(1,0), epp(1,1), epp(2,0), epp(2,1), epp(2,2), f[0], f[1], ..., f[_num_active_f], ic[0], ic[1], ..., ic[num_active_ic]) Notice the appearance of only the i>=j "epp" components.
THE JACOBIAN
This is d(-rhs)/d(dof). Remember that the dofs are dependent on what is deactivated_due_to_ld, as specified above. In matrix form, the Jacobian is: ( depp_dstress depp_dpm depp_dintnl ) ( df_dstress 0 df_dintnl ) ( dic_dstress dic_dpm dic_dintnl ) For the "epp" terms, only the i>=j components are kept in the RHS, so only these terms are kept here too
Definition at line 119 of file MultiPlasticityLinearSystem.h.
MultiPlasticityLinearSystem::MultiPlasticityLinearSystem | ( | const MooseObject * | moose_object | ) |
Definition at line 32 of file MultiPlasticityLinearSystem.C.
|
protectedinherited |
Returns the internal surface number(s) of the active surfaces of the given model This may be of size=0 if there are no active surfaces of the given model.
model | the model number | |
active | array with entries being 'true' if the surface is active | |
[out] | active_surfaces_of_model | the output |
Definition at line 809 of file MultiPlasticityRawComponentAssembler.C.
Referenced by MultiPlasticityRawComponentAssembler::dflowPotential_dintnl(), MultiPlasticityRawComponentAssembler::dflowPotential_dstress(), MultiPlasticityRawComponentAssembler::dhardPotential_dintnl(), MultiPlasticityRawComponentAssembler::dhardPotential_dstress(), MultiPlasticityRawComponentAssembler::dyieldFunction_dintnl(), MultiPlasticityRawComponentAssembler::dyieldFunction_dstress(), MultiPlasticityRawComponentAssembler::flowPotential(), MultiPlasticityRawComponentAssembler::hardPotential(), and MultiPlasticityRawComponentAssembler::yieldFunction().
|
protectedinherited |
Returns the external surface number(s) of the active surfaces of the given model This may be of size=0 if there are no active surfaces of the given model.
model | the model number | |
active | array with entries being 'true' if the surface is active | |
[out] | active_surfaces | the output |
Definition at line 798 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateConstraints().
|
protectedinherited |
returns true if any internal surfaces of the given model are active according to 'active'
Definition at line 789 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateJacobian(), calculateRHS(), MultiPlasticityDebugger::checkSolution(), MultiPlasticityDebugger::dof_included(), nrStep(), and ComputeMultiPlasticityStress::residual2().
|
protectedvirtualinherited |
Constructs a set of active constraints, given the yield functions, f.
This uses SolidMechanicsPlasticModel::activeConstraints to identify the active constraints for each model.
f | yield functions (should be _num_surfaces of these) | |
stress | stress tensor | |
intnl | internal parameters | |
Eijkl | elasticity tensor (stress = Eijkl*strain) | |
[out] | act | the set of active constraints (will be resized to _num_surfaces) |
Definition at line 342 of file MultiPlasticityRawComponentAssembler.C.
Referenced by ComputeMultiPlasticityStress::returnMap().
|
protectedvirtual |
The constraints.
These are set to zero (or <=0 in the case of the yield functions) by the Newton-Raphson process, except in the case of linear-dependence which complicates things.
stress | The stress | |
intnl_old | old values of the internal parameters | |
intnl | internal parameters | |
pm | Current value(s) of the plasticity multiplier(s) (consistency parameters) | |
delta_dp | Change in plastic strain incurred so far during the return | |
[out] | f | Active yield function(s) |
[out] | r | Active flow directions |
[out] | epp | Plastic-strain increment constraint |
[out] | ic | Active internal-parameter constraint |
active | The active constraints. |
Definition at line 227 of file MultiPlasticityLinearSystem.C.
Referenced by calculateRHS(), and ComputeMultiPlasticityStress::lineSearch().
|
protectedvirtual |
d(rhs)/d(dof)
Definition at line 366 of file MultiPlasticityLinearSystem.C.
Referenced by MultiPlasticityDebugger::checkJacobian(), MultiPlasticityDebugger::checkSolution(), and nrStep().
|
protectedvirtual |
Calculate the RHS which is rhs = -(epp(0,0), epp(1,0), epp(1,1), epp(2,0), epp(2,1), epp(2,2), f[0], f[1], ..., f[num_f], ic[0], ic[1], ..., ic[num_ic])
Note that the 'epp' components only contain the upper diagonal. These contain flow directions and plasticity-multipliers for all active surfaces, even the deactivated_due_to_ld surfaces. Note that the 'f' components only contain the active and not deactivated_due_to_ld surfaces Note that the 'ic' components only contain the internal constraints for models which contain active and not deactivated_due_to_ld surfaces. They contain hardening-potentials and plasticity-multipliers for the active surfaces, even the deactivated_due_to_ld surfaces
stress | The stress | |
intnl_old | old values of the internal parameters | |
intnl | internal parameters | |
pm | Current value(s) of the plasticity multiplier(s) (consistency parameters) | |
delta_dp | Change in plastic strain incurred so far during the return | |
[out] | rhs | the rhs |
active | The active constraints. | |
eliminate_ld | Check for linear dependence of constraints and put the results into deactivated_due_to_ld. Usually this should be true, but for certain debug operations it should be false | |
[out] | deactivated_due_to_ld | constraints deactivated due to linear-dependence of flow directions |
Definition at line 287 of file MultiPlasticityLinearSystem.C.
Referenced by MultiPlasticityDebugger::checkSolution(), MultiPlasticityDebugger::fdJacobian(), and nrStep().
|
protectedvirtualinherited |
The derivative of the active flow potentials with respect to the active internal parameters The UserObjects explicitly assume that r[alpha] is only dependent on intnl[alpha].
stress | the stress at which to calculate the flow potential | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active derivatives are put into "dr_dintnl" | |
[out] | dr_dintnl | the derivatives. dr_dintnl[alpha](i, j) = dr[alpha](i, j)/dintnl[alpha] |
Definition at line 233 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateJacobian(), MultiPlasticityDebugger::checkDerivatives(), and ComputeMultiPlasticityStress::consistentTangentOperator().
|
protectedvirtualinherited |
The derivative of the active flow potential(s) with respect to stress.
stress | the stress at which to calculate the flow potential | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active derivatives are put into "dr_dstress" | |
[out] | dr_dstress | the derivative. dr_dstress[alpha](i, j, k, l) = dr[alpha](i, j)/dstress(k, l) |
Definition at line 205 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateJacobian(), MultiPlasticityDebugger::checkDerivatives(), and ComputeMultiPlasticityStress::consistentTangentOperator().
|
protectedvirtualinherited |
The derivative of the active hardening potentials with respect to the active internal parameters.
stress | the stress at which to calculate the hardening potentials | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active derivatives are put into "dh_dintnl" | |
[out] | dh_dintnl | the derivatives. dh_dintnl[a][alpha][b] = dh[a][alpha]/dintnl[b]. Note that the userobjects assume that there is exactly one internal parameter per yield function, so the derivative is only nonzero for a=alpha=b, so that is all we calculate |
Definition at line 315 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateJacobian().
|
protectedvirtualinherited |
The derivative of the active hardening potentials with respect to stress By assumption in the Userobjects, the h[a][alpha] is nonzero only for a = alpha, so we only calculate those here.
stress | the stress at which to calculate the hardening potentials | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active derivatives are put into "dh_dstress" | |
[out] | dh_dstress | the derivative. dh_dstress[a](i, j) = dh[a]/dstress(k, l) |
Definition at line 287 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateJacobian().
|
protectedvirtualinherited |
The derivative of active yield function(s) with respect to their internal parameters (the user objects assume there is exactly one internal param per yield function)
stress | the stress at which to calculate the yield function | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active derivatives are put into "df_dintnl" | |
[out] | df_dintnl | the derivatives. df_dstress[alpha] = dyieldFunction[alpha]/dintnl[alpha] |
Definition at line 151 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateJacobian(), MultiPlasticityDebugger::checkDerivatives(), and ComputeMultiPlasticityStress::consistentTangentOperator().
|
protectedvirtualinherited |
The derivative of the active yield function(s) with respect to stress.
stress | the stress at which to calculate the yield function | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active derivatives are put into "df_dstress" | |
[out] | df_dstress | the derivative (or derivatives in the case of multisurface plasticity). df_dstress[alpha](i, j) = dyieldFunction[alpha]/dstress(i, j) |
Definition at line 123 of file MultiPlasticityRawComponentAssembler.C.
Referenced by ComputeMultiPlasticityStress::buildDumbOrder(), calculateJacobian(), MultiPlasticityDebugger::checkDerivatives(), ComputeMultiPlasticityStress::consistentTangentOperator(), and eliminateLinearDependence().
|
privatevirtual |
Performs a number of singular-value decompositions to check for linear-dependence of the active directions "r" If linear dependence is found, then deactivated_due_to_ld will contain 'true' entries where surfaces need to be deactivated_due_to_ld.
stress | the current stress | |
intnl | the current values of internal parameters | |
f | Active yield function values | |
r | the flow directions that for those yield functions that are active upon entry to this function | |
active | true if active | |
[out] | deactivated_due_to_ld | Yield functions deactivated due to linearly-dependent flow directions |
Definition at line 106 of file MultiPlasticityLinearSystem.C.
Referenced by calculateRHS().
|
protectedvirtualinherited |
The active flow potential(s) - one for each yield function.
stress | the stress at which to calculate the flow potential | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active flow potentials are put into "r" | |
[out] | r | the flow potential (flow potentials in the multi-surface case) |
Definition at line 178 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateConstraints(), calculateJacobian(), ComputeMultiPlasticityStress::consistentTangentOperator(), MultiPlasticityDebugger::fddflowPotential_dintnl(), and MultiPlasticityDebugger::fddflowPotential_dstress().
|
protectedvirtualinherited |
The active hardening potentials (one for each internal parameter and for each yield function) by assumption in the Userobjects, the h[a][alpha] is nonzero only if the surface alpha is part of model a, so we only calculate those here.
stress | the stress at which to calculate the hardening potential | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active hardening potentials are put into "h" | |
[out] | h | the hardening potentials. h[alpha] = hardening potential for yield fcn alpha (and, by the above assumption we know which hardening parameter, a, this belongs to) |
Definition at line 260 of file MultiPlasticityRawComponentAssembler.C.
Referenced by calculateConstraints(), calculateJacobian(), and ComputeMultiPlasticityStress::consistentTangentOperator().
|
protectedinherited |
returns the model number, given the surface number
Definition at line 783 of file MultiPlasticityRawComponentAssembler.C.
Referenced by ComputeMultiPlasticityStress::applyKuhnTucker(), calculateJacobian(), ComputeMultiPlasticityStress::canAddConstraints(), ComputeMultiPlasticityStress::checkAdmissible(), ComputeMultiPlasticityStress::checkKuhnTucker(), ComputeMultiPlasticityStress::consistentTangentOperator(), MultiPlasticityDebugger::fddflowPotential_dintnl(), MultiPlasticityDebugger::fddyieldFunction_dintnl(), ComputeMultiPlasticityStress::residual2(), ComputeMultiPlasticityStress::returnMap(), and ComputeMultiPlasticityStress::singleStep().
|
protectedvirtual |
Performs one Newton-Raphson step.
The purpose here is to find the changes, dstress, dpm and dintnl according to the Newton-Raphson procedure
stress | Current value of stress | |
intnl_old | The internal variables at the previous "time" step | |
intnl | Current value of the internal variables | |
pm | Current value of the plasticity multipliers (consistency parameters) | |
E_inv | inverse of the elasticity tensor | |
delta_dp | Current value of the plastic-strain increment (ie plastic_strain - plastic_strain_old) | |
[out] | dstress | The change in stress for a full Newton step |
[out] | dpm | The change in all plasticity multipliers for a full Newton step |
[out] | dintnl | The change in all internal variables for a full Newton step |
active | The active constraints | |
[out] | deactivated_due_to_ld | The constraints deactivated due to linear-dependence of the flow directions |
Definition at line 614 of file MultiPlasticityLinearSystem.C.
Referenced by MultiPlasticityDebugger::checkSolution(), and ComputeMultiPlasticityStress::singleStep().
|
protectedinherited |
Performs a returnMap for each plastic model using their inbuilt returnMap functions.
Performs a returnMap for each plastic model.
This may be used to quickly ascertain whether a (trial_stress, intnl_old) configuration is admissible, or whether a single model's customized returnMap function can provide a solution to the return-map problem, or whether a full Newton-Raphson approach such as implemented in ComputeMultiPlasticityStress is needed.
There are three cases mentioned below: (A) The (trial_stress, intnl_old) configuration is admissible according to all plastic models (B) The (trial_stress, intnl_old) configuration is inadmissible to exactly one plastic model, and that model can successfully use its customized returnMap function to provide a returned (stress, intnl) configuration, and that configuration is admissible according to all plastic models (C) All other cases. This includes customized returnMap functions failing, or more than one plastic_model being inadmissible, etc
trial_stress | the trial stress | |
intnl_old | the old values of the internal parameters | |
E_ijkl | the elasticity tensor | |
ep_plastic_tolerance | the tolerance on the plastic strain | |
[out] | stress | is set to trial_stress in case (A) or (C), and the returned value of stress in case (B). |
[out] | intnl | is set to intnl_old in case (A) or (C), and the returned value of intnl in case (B) |
[out] | pm | Zero in case (A) or (C), otherwise the plastic multipliers needed to bring about the returnMap in case (B) |
[in/out] | cumulative_pm cumulative plastic multipliers, updated in case (B), otherwise left untouched | |
[out] | delta_dp | is unchanged in case (A) or (C), and is set to the change in plastic strain in case(B) |
[out] | yf | will contain the yield function values at (stress, intnl) |
[out] | num_successful_plastic_returns | will be 0 for (A) and (C), and 1 for (B) |
If all models actually signal "elastic" by returning true from their returnMap, and by returning model_plastically_active=0, then yf will contain the yield function values num_successful_plastic_returns will be zero intnl = intnl_old delta_dp will be unchanged from its input value stress will be set to trial_stress pm will be zero cumulative_pm will be unchanged return value will be true num_successful_plastic_returns = 0
If only one model signals "plastically active" by returning true from its returnMap, and by returning model_plastically_active=1, then yf will contain the yield function values num_successful_plastic_returns will be one intnl will be set by the returnMap algorithm delta_dp will be set by the returnMap algorithm stress will be set by the returnMap algorithm pm will be nonzero for the single model, and zero for other models cumulative_pm will be updated return value will be true num_successful_plastic_returns = 1
If >1 model signals "plastically active" or if >=1 model's returnMap fails, then yf will contain the yield function values num_successful_plastic_returns will be set appropriately intnl = intnl_old delta_dp will be unchanged from its input value stress will be set to trial_stress pm will be zero cumulative_pm will be unchanged return value will be true if all returnMap functions returned true, otherwise it will be false num_successful_plastic_returns is set appropriately
Definition at line 597 of file MultiPlasticityRawComponentAssembler.C.
Referenced by ComputeMultiPlasticityStress::quickStep().
|
privatevirtual |
Performs a singular-value decomposition of r and returns the singular values.
Example: If r has size 5 then the singular values of the following matrix are returned: ( r[0](0,0) r[0](0,1) r[0](0,2) r[0](1,1) r[0](1,2) r[0](2,2) ) ( r[1](0,0) r[1](0,1) r[1](0,2) r[1](1,1) r[1](1,2) r[1](2,2) ) a = ( r[2](0,0) r[2](0,1) r[2](0,2) r[2](1,1) r[2](1,2) r[2](2,2) ) ( r[3](0,0) r[3](0,1) r[3](0,2) r[3](1,1) r[3](1,2) r[3](2,2) ) ( r[4](0,0) r[4](0,1) r[4](0,2) r[4](1,1) r[4](1,2) r[4](2,2) )
r | The flow directions | |
[out] | s | The singular values |
Definition at line 45 of file MultiPlasticityLinearSystem.C.
Referenced by eliminateLinearDependence().
|
static |
Definition at line 20 of file MultiPlasticityLinearSystem.C.
Referenced by MultiPlasticityDebugger::validParams().
|
protectedvirtualinherited |
The active yield function(s)
stress | the stress at which to calculate the yield function | |
intnl | vector of internal parameters | |
active | set of active constraints - only the active yield functions are put into "f" | |
[out] | f | the yield function (or functions in the case of multisurface plasticity) |
Definition at line 96 of file MultiPlasticityRawComponentAssembler.C.
Referenced by ComputeMultiPlasticityStress::buildDumbOrder(), calculateConstraints(), ComputeMultiPlasticityStress::checkAdmissible(), MultiPlasticityDebugger::fddyieldFunction_dintnl(), MultiPlasticityDebugger::fddyieldFunction_dstress(), and ComputeMultiPlasticityStress::returnMap().
|
protectedinherited |
User objects that define the yield functions, flow potentials, etc.
Definition at line 70 of file MultiPlasticityRawComponentAssembler.h.
Referenced by MultiPlasticityRawComponentAssembler::activeModelSurfaces(), MultiPlasticityRawComponentAssembler::activeSurfaces(), MultiPlasticityRawComponentAssembler::anyActiveSurfaces(), ComputeMultiPlasticityStress::applyKuhnTucker(), MultiPlasticityRawComponentAssembler::buildActiveConstraints(), MultiPlasticityRawComponentAssembler::buildActiveConstraintsJoint(), MultiPlasticityRawComponentAssembler::buildActiveConstraintsRock(), ComputeMultiPlasticityStress::canAddConstraints(), ComputeMultiPlasticityStress::checkAdmissible(), ComputeMultiPlasticityStress::checkKuhnTucker(), MultiPlasticityRawComponentAssembler::dflowPotential_dintnl(), MultiPlasticityRawComponentAssembler::dflowPotential_dstress(), MultiPlasticityRawComponentAssembler::dhardPotential_dintnl(), MultiPlasticityRawComponentAssembler::dhardPotential_dstress(), MultiPlasticityRawComponentAssembler::dyieldFunction_dintnl(), MultiPlasticityRawComponentAssembler::dyieldFunction_dstress(), MultiPlasticityRawComponentAssembler::flowPotential(), MultiPlasticityRawComponentAssembler::hardPotential(), MultiPlasticityLinearSystem(), MultiPlasticityRawComponentAssembler::MultiPlasticityRawComponentAssembler(), ComputeMultiPlasticityStress::quickStep(), ComputeMultiPlasticityStress::residual2(), ComputeMultiPlasticityStress::returnMap(), MultiPlasticityRawComponentAssembler::returnMapAll(), ComputeMultiPlasticityStress::singleStep(), and MultiPlasticityRawComponentAssembler::yieldFunction().
|
protected |
Minimum value of the _f_tol parameters for the Yield Function User Objects.
Definition at line 131 of file MultiPlasticityLinearSystem.h.
Referenced by eliminateLinearDependence(), and MultiPlasticityLinearSystem().
|
protectedinherited |
Number of plastic models for this material.
Definition at line 52 of file MultiPlasticityRawComponentAssembler.h.
Referenced by MultiPlasticityRawComponentAssembler::buildActiveConstraints(), calculateConstraints(), calculateJacobian(), calculateRHS(), MultiPlasticityDebugger::checkSolution(), MultiPlasticityRawComponentAssembler::dflowPotential_dintnl(), MultiPlasticityRawComponentAssembler::dflowPotential_dstress(), MultiPlasticityRawComponentAssembler::dhardPotential_dintnl(), MultiPlasticityRawComponentAssembler::dhardPotential_dstress(), MultiPlasticityRawComponentAssembler::dyieldFunction_dintnl(), MultiPlasticityRawComponentAssembler::dyieldFunction_dstress(), MultiPlasticityDebugger::fddflowPotential_dintnl(), MultiPlasticityDebugger::fddyieldFunction_dintnl(), MultiPlasticityDebugger::fdJacobian(), MultiPlasticityRawComponentAssembler::flowPotential(), MultiPlasticityRawComponentAssembler::hardPotential(), ComputeMultiPlasticityStress::initQpStatefulProperties(), MultiPlasticityLinearSystem(), MultiPlasticityRawComponentAssembler::MultiPlasticityRawComponentAssembler(), nrStep(), MultiPlasticityDebugger::outputAndCheckDebugParameters(), ComputeMultiPlasticityStress::plasticStep(), ComputeMultiPlasticityStress::residual2(), ComputeMultiPlasticityStress::returnMap(), MultiPlasticityRawComponentAssembler::returnMapAll(), ComputeMultiPlasticityStress::singleStep(), and MultiPlasticityRawComponentAssembler::yieldFunction().
|
protectedinherited |
Number of surfaces within the plastic models.
For many situations this will be = _num_models since each model will contain just one surface. More generally it is >= _num_models. For instance, Mohr-Coulomb is a single model with 6 surfaces
Definition at line 61 of file MultiPlasticityRawComponentAssembler.h.
Referenced by ComputeMultiPlasticityStress::activeCombinationNumber(), ComputeMultiPlasticityStress::applyKuhnTucker(), MultiPlasticityRawComponentAssembler::buildActiveConstraints(), ComputeMultiPlasticityStress::buildDumbOrder(), calculateConstraints(), calculateJacobian(), calculateRHS(), ComputeMultiPlasticityStress::canAddConstraints(), ComputeMultiPlasticityStress::canIncrementDumb(), ComputeMultiPlasticityStress::changeScheme(), ComputeMultiPlasticityStress::checkAdmissible(), MultiPlasticityDebugger::checkDerivatives(), MultiPlasticityDebugger::checkJacobian(), ComputeMultiPlasticityStress::checkKuhnTucker(), MultiPlasticityDebugger::checkSolution(), ComputeMultiPlasticityStress::ComputeMultiPlasticityStress(), ComputeMultiPlasticityStress::computeQpStress(), ComputeMultiPlasticityStress::consistentTangentOperator(), MultiPlasticityRawComponentAssembler::dflowPotential_dintnl(), MultiPlasticityRawComponentAssembler::dflowPotential_dstress(), MultiPlasticityRawComponentAssembler::dhardPotential_dintnl(), MultiPlasticityRawComponentAssembler::dhardPotential_dstress(), MultiPlasticityDebugger::dof_included(), MultiPlasticityRawComponentAssembler::dyieldFunction_dintnl(), MultiPlasticityRawComponentAssembler::dyieldFunction_dstress(), eliminateLinearDependence(), MultiPlasticityDebugger::fddflowPotential_dintnl(), MultiPlasticityDebugger::fddflowPotential_dstress(), MultiPlasticityDebugger::fddyieldFunction_dintnl(), MultiPlasticityDebugger::fddyieldFunction_dstress(), MultiPlasticityDebugger::fdJacobian(), MultiPlasticityRawComponentAssembler::flowPotential(), MultiPlasticityRawComponentAssembler::hardPotential(), ComputeMultiPlasticityStress::incrementDumb(), ComputeMultiPlasticityStress::initQpStatefulProperties(), MultiPlasticityRawComponentAssembler::MultiPlasticityRawComponentAssembler(), nrStep(), ComputeMultiPlasticityStress::numberActive(), MultiPlasticityDebugger::outputAndCheckDebugParameters(), ComputeMultiPlasticityStress::plasticStep(), ComputeMultiPlasticityStress::reinstateLinearDependentConstraints(), ComputeMultiPlasticityStress::residual2(), ComputeMultiPlasticityStress::returnMap(), MultiPlasticityRawComponentAssembler::returnMapAll(), ComputeMultiPlasticityStress::singleStep(), and MultiPlasticityRawComponentAssembler::yieldFunction().
|
protectedinherited |
Definition at line 49 of file MultiPlasticityRawComponentAssembler.h.
Referenced by MultiPlasticityRawComponentAssembler::MultiPlasticityRawComponentAssembler().
|
protectedinherited |
Allows initial set of active constraints to be chosen optimally.
Definition at line 67 of file MultiPlasticityRawComponentAssembler.h.
Referenced by MultiPlasticityRawComponentAssembler::buildActiveConstraints(), and MultiPlasticityRawComponentAssembler::MultiPlasticityRawComponentAssembler().
|
protectedinherited |
_surfaces_given_model[model_number] = vector of surface numbers for this model
Definition at line 64 of file MultiPlasticityRawComponentAssembler.h.
Referenced by MultiPlasticityRawComponentAssembler::activeModelSurfaces(), MultiPlasticityRawComponentAssembler::activeSurfaces(), MultiPlasticityRawComponentAssembler::anyActiveSurfaces(), MultiPlasticityRawComponentAssembler::MultiPlasticityRawComponentAssembler(), ComputeMultiPlasticityStress::quickStep(), and MultiPlasticityRawComponentAssembler::returnMapAll().
|
protected |
Tolerance on the minimum ratio of singular values before flow-directions are deemed linearly dependent.
Definition at line 128 of file MultiPlasticityLinearSystem.h.
Referenced by eliminateLinearDependence().