-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSIMShellModal.C
More file actions
77 lines (62 loc) · 2.14 KB
/
SIMShellModal.C
File metadata and controls
77 lines (62 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// $Id$
//==============================================================================
//!
//! \file SIMShellModal.C
//!
//! \date Apr 28 2024
//!
//! \author Knut Morten Okstad / SINTEF
//!
//! \brief Solution driver for modal linear shell FEM analysis.
//!
//==============================================================================
#include "SIMShellModal.h"
#include "IntegrandBase.h"
bool SIMShellModal::assembleSystem (const TimeDomain& time,
const Vectors& mSol, bool, bool)
{
// Assemble the eigenvalue system
if (myProblem->getMode() == SIM::VIBRATION)
return this->SIM2D::assembleSystem(time,Vectors());
if (time.it > 0)
// Swap back to the full equation system for assembly of load vector
this->swapSystem(myEqSys,mySam);
else
{
// Assemble the load vector of this time step.
// We need to do this in the first iteration only, as for linear systems
// the load vector is not supposed to change during the iterations.
if (!this->SIM2D::assembleSystem(time,sol,false))
return false;
// Extract the load vector in DOF-order
if (!this->extractLoadVec(Rhs))
return false;
}
// Assemble the modal equation system
if (!this->assembleModalSystem(time,mSol,
myProblem->getIntegrationPrm(2),
myProblem->getIntegrationPrm(3)))
return false;
// Swap the equation systems such that the dynamic simulation driver
// operates on the modal system
return this->swapSystem(myEqSys,mySam);
}
const Vectors& SIMShellModal::expandSolution (const Vectors& mSol, bool swapBck)
{
// Swap back to the full equation system data for postprocessing
// and assembly of load vector for the next time step
if (swapBck)
this->swapSystem(myEqSys,mySam);
return this->expandSolution(mSol);
}
bool SIMShellModal::parse (const tinyxml2::XMLElement* elem)
{
return this->parseParams(elem) || this->SIMAndesShell::parse(elem);
}
bool SIMShellModal::preprocessB ()
{
parsed = true;
this->setIntegrationPrm(0,alpha1);
this->setIntegrationPrm(1,alpha2);
return this->SIMAndesShell::preprocessB();
}