MCPcopy Create free account
hub / github.com/OpenSees/OpenSees / newStep

Method newStep

SRC/analysis/integrator/TRBDF3.cpp:89–174  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87
88
89int TRBDF3::newStep(double deltaT)
90{
91 // check the vectors have been created
92 if (U == 0) {
93 opserr << "TRBDF3::newStep() - domainChange() failed or hasn't been called\n";
94 return -3;
95 }
96
97 // mark step as Trapezoidal (=0), Backward Euler (=1), or Houbolt (=2)
98 if (deltaT != dt || step == 2) {
99 step = 0;
100 } else if (step == 0) {
101 step = 1;
102 } else {
103 step = 2;
104 }
105
106 // get a pointer to the AnalysisModel
107 AnalysisModel *theModel = this->getAnalysisModel();
108
109 // set response at t to be that at t+deltaT of previous step
110 dt = deltaT;
111
112 (*Utm2) = *Utm1;
113 (*Utm2dot) = *Utm1dot;
114
115 (*Utm1) = *Ut;
116 (*Utm1dot) = *Utdot;
117
118 (*Ut) = *U;
119 (*Utdot) = *Udot;
120 (*Utdotdot) = *Udotdot;
121
122 // set the constants
123 if (step == 0) { // trapezoidal
124 c1 = 1.0;
125 c2 = 2.0/deltaT;
126 c3 = 4.0/(deltaT*deltaT);
127
128 (*Udot) *= -1.0;
129
130 double a3 = -4.0/deltaT;
131 double a4 = -1;
132 Udotdot->addVector(a4, *Utdot, a3);
133
134 } else if (step == 1) { // backward euler
135 c1 = 1.0;
136 c2 = 1.5/deltaT;
137 c3 = 2.25/(deltaT*deltaT);
138
139 (*Udot) = *Utm1;
140 Udot->addVector(0.5/deltaT, *Ut, -1/(2.0*deltaT));
141
142 (*Udotdot) = *Utm1dot;
143 Udotdot->addVector(0.5/deltaT, *Utdot, -4.0/(2.0*deltaT));
144 Udotdot->addVector(1.0, *Udot, 3.0/(2.0*deltaT));
145
146 } else { // Houbolt

Callers

nothing calls this directly

Calls 6

getAnalysisModelMethod · 0.45
addVectorMethod · 0.45
setVelMethod · 0.45
setAccelMethod · 0.45
getCurrentDomainTimeMethod · 0.45
updateDomainMethod · 0.45

Tested by

no test coverage detected