XALM  1.0
 Vše Třídy Prostory jmen Soubory Funkce Proměnné Výčty Hodnoty výčtu Friends Definice maker
xalm.h
Zobrazit dokumentaci tohoto souboru.
1 
6 #ifndef XALM_H
7 #define XALM_H
8 
9 #include "arrays.h"
10 
11 using namespace gelibspace;
12 
13 namespace xalm {
14 
20 };
21 
27 };
28 
29 #define XALM_RESET_STEP_REDUCE 0.25
30 #define XALM_MAX_RESTARTS 4
31 #define XALM_DEFAULT_NRM_TICKS 2
32 #define XALM_MAX_REL_ERROR_BOUND 1.e10
33 
34 #define XALM_SMALL_NUM 1.e-20
35 #define XALM_SMALL_ERROR_NUM 1.e-6
36 
50 class XALM
51 {
52  // *****************************************************************************************
53  // ************************* VEŘEJNÉ METODY ************************
54  // *****************************************************************************************
60  // @{
61  public:
63  XALM (void);
65  virtual ~XALM (void);
66 
70  int solve (void);
71 
73  const double* give_totalDisplacement (void) const { return totalDisplacement.a; }
75  double give_loadLevel (void) const { return loadLevel; }
76 
77  // @}
78 
79 
80 
81  // *****************************************************************************************
82  // ************************* SOUKROMÉ METODY A ATRIBUTY ************************
83  // *****************************************************************************************
90  // @{
91  private:
92  int step;
93  double loadLevel;
97  int status;
100 
102  int computeDeltaLambda (double &deltaLambda, const Dvctr &dX, const Dvctr &deltaXt,
103  const Dvctr &deltaX_, const Dvctr &R, double RR, double eta,
104  double deltaL, double DeltaLambda0, int neq);
105 
106  void solve_step(Dvctr *R, Dvctr *R0, Dvctr *X, Dvctr *dX, Dvctr *F, long step);
107  //double giveCurrentStepLength() { return deltaL; }
108  //void setStepLength(double s) { deltaL = s; }
109 
111  void initialize_and_check_consistency (void);
113  bool checkConvergence (const Dvctr &R, const Dvctr *R0, const Dvctr &F, const Dvctr &X, const Dvctr &ddX,
114  double Lambda, double RR0, double RR, double drProduct, int nite, bool &errorOutOfRange);
115 
116 
117  // Docasne nepouzivane. - experimentalni podpora
118  // Dvctr internalForcesEBENorm; pocita se pri vypoctu vektoru vnitrnich sil
119  //int xalm_hpc_init; /// HyperPlaneControl.
125 
126  // @}
127 
128 
129 
130  // *****************************************************************************************
131  // ************************* CHRÁNĚNÉ METODY A ATRIBUTY ************************
132  // *****************************************************************************************
146  // @{
147  protected:
148 
149  //* *** Chráněné atributy ***
150 
151  // Základní proměnné, které řídí běh ALM metody. Jsou volené "uživatelem".
152  // Tyto atributy se musí nastavit na začátku výpočtu ve funkci "initialize" ve zděděné třídě rozhraní.
155  long nsteps;
156  double minStepLength;
157  double maxStepLength;
159  int nsMin;
160  int nsReq;
161  int nsMax;
162  double Psi;
163  int verbose;
164  double rtolf;
165  double rtold;
166 
167  // Tyto argumenty se nevolí, ale závisí na zadání právě počítané úlohy.
168  // Tyto atributy se musí nastavit na začátku výpočtu ve funkci "initialize" ve zděděné třídě rozhraní.
169  long neq;
172 
173 
174  //* *** Chráněné metody ***
175 
176  // Metody pro přístup k aktuálním stavovým hodnotám.
178  int give_step (void) { return step; }
179 
180 
181  //* *** Chráněné metody s návodem na implementaci v zděděné třídě: */
182 
185  virtual void initialize (void) = 0;
186 
189  virtual void update_step (void) = 0;
190 
192  virtual void update_stiffness_matrix (const Dvctr *X) = 0;
194  virtual void update_internal_forces (Dvctr *internalForces, const Dvctr *X) = 0;
196  virtual void lineq_solve (Dvctr *X, const Dvctr *R) = 0;
197 
198  // @}
199 };
200 
201 } // end namespace xalm
202 
203 #endif // XALM_H
xalm_ControlType
XALM mody; urcuji typ kontroly delky kroku.
Definition: xalm.h:16
int xalm_NR_ModeTick
Počet kroků zbývajících do konce dočasné změny iteračního schématu.
Definition: xalm.h:99
double minStepLength
Minimalní délka kroku.
Definition: xalm.h:156
int nsMin
Minimální počet kroků dorovnání nerovnováhy v jednom iteračním přitěžovacím kroku.
Definition: xalm.h:159
Linearized ALM (only displacements), taking into account only selected dofs with given weight...
Definition: xalm.h:19
int verbose
Pokud je větší než nule - budou vypisovány informace.
Definition: xalm.h:163
Definition: xalm.cpp:9
int nsReq
Požadovaný počet kroků dorovnání nerovnováhy v jednom iteračním přitěžovacím kroku.
Definition: xalm.h:160
Modifikovaná NR metoda (defaultní hodnota) - matice se počítá jen na začátku každého zatěžovacího kro...
Definition: xalm.h:24
Dvctr initialLoadVector
Vektor pocatecniho zatizeni, nemeni se behem vypoctu, je aplikovan cely.
Definition: xalm.h:171
Lvctr xalm_HPCIndirectDofMask
Definition: xalm.h:122
Dvctr totalDisplacement
Vektor celkových posunutí.
Definition: xalm.h:94
Dvctr incrementOfDisplacement
Vektor přírůstku posunutí.
Definition: xalm.h:95
xalm_NR_ModeType xalm_NR_OldMode
Záloha proměnné xalm_NR_Mode.
Definition: xalm.h:98
Structs Elem3D, PoinT and VectoR; classes Array, Array1d, Xscal, Dscal, Xvctr, Lvctr, Dvctr, Xmtrx, Lmtrx and Dmtrx.
long nsteps
Počet zatěžovacích kroků.
Definition: xalm.h:155
const double * give_totalDisplacement(void) const
Funkce vrátí konstantní ukazatel na vektor celkových posunů.
Definition: xalm.h:73
double rtold
Tolerance relativní chyby nevyrovnaných posunů.
Definition: xalm.h:165
double Psi
Parametr kontroly kroku. Pokud je rovno 0, tak se jedná o kontrolu přírůstkem posunutí, pokud je rovno nekonečnu, tak se jedná o kontrolu přírůstkem zatížení.
Definition: xalm.h:162
double rtolf
Tolerance relativní chyby nevyrovnaných sil.
Definition: xalm.h:164
int nsMax
Maximální počet kroků dorovnání nerovnováhy v jednom iteračním přitěžovacím kroku.
Definition: xalm.h:161
double maxStepLength
Maximalní délka kroku.
Definition: xalm.h:157
Full ALM with quadratic constrain and all dofs.
Definition: xalm.h:17
Dvctr incrementalLoadVector
Vektor prirustkoveho zatizeni, meni se se stupnem lambda.
Definition: xalm.h:170
xalm_NR_ModeType xalm_NR_Mode
Proměnná určující strategii, kdy se bude počítat tečná matice tuhosti soustavy.
Definition: xalm.h:153
int give_step(void)
Funkce vrací číslo aktuálního zatěžovacího kroku.
Definition: xalm.h:178
double give_loadLevel(void) const
Funkce vrátí loadLevel - dosažený stupeň přírůstkového zatížení.
Definition: xalm.h:75
double initialStepLength
Počáteční délka kroku.
Definition: xalm.h:158
Plná NR metoda - matice se během zatěžovacího kroku počítá při každé iteraci.
Definition: xalm.h:25
Dvctr xalm_HPCDmanWeightSrcArray
Input array containing dofmanagers and corresponding dof numbers under indirect control.
Definition: xalm.h:124
int status
0 - nedopočítáno, 1- spočítáno, 2 - počítáno s problémy, změněn krok
Definition: xalm.h:97
Lvctr xalm_HPCDmanDofSrcArray
Array containing equation numbers of dofs under indirect control.
Definition: xalm.h:123
Hlavní, a jedíná, třída knihovny XALM.
Definition: xalm.h:50
double loadLevel
Dosažený stupeň přírůstkového zatížení.
Definition: xalm.h:93
Dvctr xalm_HPCWeights
Definition: xalm.h:121
xalm_NR_ModeType
Strategie výpočtu matice tuhosti, převzato z Newton-Raphson metody iteračního výpočtu.
Definition: xalm.h:23
Akcelerovaná NR metoda - matice se počítá jen na začátku každého n-tého zatěžovacího kroku...
Definition: xalm.h:26
Dvctr internalForces
Vektor vnitřních sil v uzlech.
Definition: xalm.h:96
int step
Aktuální krok.
Definition: xalm.h:92
Full ALM with quadratic constrain, taking into account only selected dofs.
Definition: xalm.h:18
int xalm_MANRMSteps
Počet kroků, po kterých se má znovu počítat matice, pouze pokud xalm_NR_Mode == xalm_accelNRM.
Definition: xalm.h:154
long neq
Pocet rovnic v matici soustavy = pocet neznamych.
Definition: xalm.h:169
xalm_ControlType xalm_Control
Definition: xalm.h:120