![]() |
MechSys
1.0
Computing library for simulations in continuum and discrete mechanics
|
#include <stdsolver.h>
Public Types | |
enum | Scheme_t { FE_t, ME_t, NR_t } |
enum | TScheme_t { TH_t } |
enum | DScheme_t { GN22_t, RK_t } |
enum | Damping_t { None_t, Rayleigh_t, HMCoup_t } |
Public Member Functions | |
STDSolver (Domain &Dom, SDPair const &Flags, pOutFun OutFun=NULL, void *OutDat=NULL, pOutFun DbgFun=NULL, void *DbgDat=NULL) | |
Allocate solver object. | |
String | Name () const |
void | Solve (size_t NInc=1, char const *FileKey=NULL) |
Solve quasi-static problem. | |
void | TransSolve (double tf, double dt, double dtOut, char const *FileKey=NULL) |
Solve transient problem. | |
void | DynSolve (double tf, double dt, double dtOut, char const *FileKey=NULL) |
Solve dynamic problem. | |
void | AssembleKA () |
A = K11. | |
void | AssembleKMA (double Coef1, double Coef2) |
A = Coef1*M + Coef2*K. | |
void | AssembleKCMA (double Coef1, double Coef2, double Coef3) |
A = Coef1*M + Coef2*C + Coef3*K. | |
void | TgIncs (double dT, Vec_t &dU, Vec_t &dF) |
Tangent increments: dU = inv(K)*dF. | |
void | UpdateNodes (bool Transient=false) |
Copy U, V and F values into Nodes' U, V and F structures. | |
void | UpdateElements (Vec_t const &dU, bool CalcFint) |
Update elements. | |
void | Initialize (bool Transient=false) |
Initialize global matrices and vectors. | |
void | SetIncsW (size_t NInc, bool NonLinWei=false) |
Set weights for quasi-static problem (If Weights.Size()==0: generate weights) | |
bool | ResidOK () const |
Check if the residual is OK. | |
void | DebugPrintMatrices (bool Stop=true) |
Debug method. | |
Public Attributes | |
size_t | Inc |
Current increment. | |
size_t | Stp |
Current (sub) step. | |
size_t | It |
Current iteration. | |
size_t | NEq |
Total number of equations (DOFs) | |
size_t | NIv |
Total number of internal variables of elements. | |
size_t | NLag |
Number of Lagrange multipliers. | |
Array< long > | pEQ |
prescribed equations | |
Array< long > | pEQproc |
prescribed equations: processor which will handle the equation (in case of shared nodes) | |
Array< bool > | pU |
prescribed U | |
double | NormR |
Euclidian norm of residual (R) | |
double | MaxNormF |
Max(Norm(F), Norm(Fint)) | |
Scheme_t | Scheme |
Scheme: FE_t (Forward-Euler), ME_t (Modified-Euler) | |
bool | CalcWork |
Calc work done == twice the stored (elastic) strain energy ? | |
size_t | nSS |
FE and NR: number of substeps. | |
double | STOL |
ME: | |
double | dTini |
ME: | |
double | dTlast |
ME: | |
double | mMin |
ME: | |
double | mMax |
ME: | |
size_t | MaxSS |
ME: | |
bool | SSOut |
SubSteps ouput in ME ? | |
bool | CteTg |
Constant tangent matrices (linear problems) => K will be calculated once. | |
bool | ModNR |
Modified Newton-Rhapson ? | |
double | TolR |
Tolerance for the norm of residual. | |
bool | CorR |
Correct residual ? | |
size_t | MaxIt |
Max iterations (for Newton-Rhapson) | |
TScheme_t | TScheme |
Transient scheme. | |
double | TransTh |
Transient scheme constant (theta) | |
DScheme_t | DScheme |
Dynamic scheme. | |
Damping_t | DampTy |
Damping type. | |
double | DampAm |
Rayleigh damping Am coefficient (C = Am*M + Ak*K) | |
double | DampAk |
Rayleigh damping Ak coefficient (C = Am*M + Ak*K) | |
double | DynTh1 |
Dynamic coefficient Theta 1. | |
double | DynTh2 |
Dynamic coefficient Theta 2. | |
Array< double > | IncsW |
Increments weights used in Solve. | |
bool | WithInfo |
Print information ? | |
bool | WarnRes |
Warning if residual exceeds limit ? | |
double | WrnTol |
Warning tolerance. | |
String | RKScheme |
Runge-Kutta scheme. | |
double | RKSTOL |
Runge-Kutta tolerance. | |
SDPair | NLSteps |
Nonlinear steps. | |
Sparse::Triplet< double, int > | K11 |
Sparse::Triplet< double, int > | K12 |
Sparse::Triplet< double, int > | K21 |
Sparse::Triplet< double, int > | K22 |
Stiffness matrices. | |
Sparse::Triplet< double, int > | C11 |
Sparse::Triplet< double, int > | C12 |
Sparse::Triplet< double, int > | C21 |
Sparse::Triplet< double, int > | C22 |
Damping matrices. | |
Sparse::Triplet< double, int > | M11 |
Sparse::Triplet< double, int > | M12 |
Sparse::Triplet< double, int > | M21 |
Sparse::Triplet< double, int > | M22 |
Mass matrices. | |
Sparse::Triplet< double, int > | A11 |
A=K or A=C1*M+C2*K or A=C1*M+C2*C+C3*K. | |
Vec_t | R |
Residual. | |
Vec_t | F0 |
External force at the beginning of the stage. | |
Vec_t | F |
Vec_t | F_int |
External and internal forces. | |
Vec_t | W |
Vec_t | U |
Workspace, displacement. | |
Vec_t | V |
Vec_t | A |
(Transient/Dynamic) velocity and acceleration | |
Vec_t | dU |
Vec_t | dF |
Increments of U and F. | |
Vec_t | Us |
Vec_t | Vs |
starred variables (for GN22) | |
Vec_t | TmpVec |
Temporary vector (for parallel Allreduce) |
FEM::STDSolver::STDSolver | ( | Domain & | Dom, |
SDPair const & | Flags, | ||
pOutFun | OutFun = NULL , |
||
void * | OutDat = NULL , |
||
pOutFun | DbgFun = NULL , |
||
void * | DbgDat = NULL |
||
) | [inline] |
Allocate solver object.
void FEM::STDSolver::AssembleKA | ( | ) | [inline] |
A = K11.
void FEM::STDSolver::AssembleKCMA | ( | double | Coef1, |
double | Coef2, | ||
double | Coef3 | ||
) | [inline] |
A = Coef1*M + Coef2*C + Coef3*K.
void FEM::STDSolver::AssembleKMA | ( | double | Coef1, |
double | Coef2 | ||
) | [inline] |
A = Coef1*M + Coef2*K.
void FEM::STDSolver::DebugPrintMatrices | ( | bool | Stop = true | ) | [inline] |
Debug method.
void FEM::STDSolver::DynSolve | ( | double | tf, |
double | dt, | ||
double | dtOut, | ||
char const * | FileKey = NULL |
||
) | [inline, virtual] |
Solve dynamic problem.
Reimplemented from FEM::Solver.
void FEM::STDSolver::Initialize | ( | bool | Transient = false | ) | [inline] |
Initialize global matrices and vectors.
String FEM::STDSolver::Name | ( | ) | const [inline, virtual] |
Implements FEM::Solver.
bool FEM::STDSolver::ResidOK | ( | ) | const [inline] |
Check if the residual is OK.
void FEM::STDSolver::SetIncsW | ( | size_t | NInc, |
bool | NonLinWei = false |
||
) | [inline] |
Set weights for quasi-static problem (If Weights.Size()==0: generate weights)
void FEM::STDSolver::Solve | ( | size_t | NInc = 1 , |
char const * | FileKey = NULL |
||
) | [inline, virtual] |
Solve quasi-static problem.
Reimplemented from FEM::Solver.
void FEM::STDSolver::TgIncs | ( | double | dT, |
Vec_t & | dU, | ||
Vec_t & | dF | ||
) | [inline] |
Tangent increments: dU = inv(K)*dF.
void FEM::STDSolver::TransSolve | ( | double | tf, |
double | dt, | ||
double | dtOut, | ||
char const * | FileKey = NULL |
||
) | [inline] |
Solve transient problem.
void FEM::STDSolver::UpdateElements | ( | Vec_t const & | dU, |
bool | CalcFint | ||
) | [inline] |
Update elements.
void FEM::STDSolver::UpdateNodes | ( | bool | Transient = false | ) | [inline] |
Copy U, V and F values into Nodes' U, V and F structures.
(Transient/Dynamic) velocity and acceleration
Sparse::Triplet<double,int> FEM::STDSolver::A11 |
A=K or A=C1*M+C2*K or A=C1*M+C2*C+C3*K.
Sparse::Triplet<double,int> FEM::STDSolver::C11 |
Sparse::Triplet<double,int> FEM::STDSolver::C12 |
Sparse::Triplet<double,int> FEM::STDSolver::C21 |
Sparse::Triplet<double,int> FEM::STDSolver::C22 |
Damping matrices.
Calc work done == twice the stored (elastic) strain energy ?
bool FEM::STDSolver::CorR |
Correct residual ?
Constant tangent matrices (linear problems) => K will be calculated once.
double FEM::STDSolver::DampAk |
Rayleigh damping Ak coefficient (C = Am*M + Ak*K)
double FEM::STDSolver::DampAm |
Rayleigh damping Am coefficient (C = Am*M + Ak*K)
Damping type.
Increments of U and F.
Dynamic scheme.
double FEM::STDSolver::dTini |
ME:
double FEM::STDSolver::dTlast |
ME:
double FEM::STDSolver::DynTh1 |
Dynamic coefficient Theta 1.
double FEM::STDSolver::DynTh2 |
Dynamic coefficient Theta 2.
External force at the beginning of the stage.
External and internal forces.
size_t FEM::STDSolver::Inc |
Current increment.
Array<double> FEM::STDSolver::IncsW |
Increments weights used in Solve.
size_t FEM::STDSolver::It |
Current iteration.
Sparse::Triplet<double,int> FEM::STDSolver::K11 |
Sparse::Triplet<double,int> FEM::STDSolver::K12 |
Sparse::Triplet<double,int> FEM::STDSolver::K21 |
Sparse::Triplet<double,int> FEM::STDSolver::K22 |
Stiffness matrices.
Sparse::Triplet<double,int> FEM::STDSolver::M11 |
Sparse::Triplet<double,int> FEM::STDSolver::M12 |
Sparse::Triplet<double,int> FEM::STDSolver::M21 |
Sparse::Triplet<double,int> FEM::STDSolver::M22 |
Mass matrices.
size_t FEM::STDSolver::MaxIt |
Max iterations (for Newton-Rhapson)
double FEM::STDSolver::MaxNormF |
Max(Norm(F), Norm(Fint))
size_t FEM::STDSolver::MaxSS |
ME:
double FEM::STDSolver::mMax |
ME:
double FEM::STDSolver::mMin |
ME:
Modified Newton-Rhapson ?
size_t FEM::STDSolver::NEq |
Total number of equations (DOFs)
size_t FEM::STDSolver::NIv |
Total number of internal variables of elements.
size_t FEM::STDSolver::NLag |
Number of Lagrange multipliers.
Nonlinear steps.
double FEM::STDSolver::NormR |
Euclidian norm of residual (R)
size_t FEM::STDSolver::nSS |
FE and NR: number of substeps.
Array<long> FEM::STDSolver::pEQ |
prescribed equations
Array<long> FEM::STDSolver::pEQproc |
prescribed equations: processor which will handle the equation (in case of shared nodes)
Array<bool> FEM::STDSolver::pU |
prescribed U
Residual.
Runge-Kutta scheme.
double FEM::STDSolver::RKSTOL |
Runge-Kutta tolerance.
Scheme: FE_t (Forward-Euler), ME_t (Modified-Euler)
SubSteps ouput in ME ?
double FEM::STDSolver::STOL |
ME:
size_t FEM::STDSolver::Stp |
Current (sub) step.
Temporary vector (for parallel Allreduce)
double FEM::STDSolver::TolR |
Tolerance for the norm of residual.
double FEM::STDSolver::TransTh |
Transient scheme constant (theta)
Transient scheme.
Workspace, displacement.
starred variables (for GN22)
Warning if residual exceeds limit ?
Print information ?
double FEM::STDSolver::WrnTol |
Warning tolerance.