79 bool converged, errorOutOfRangeFlag;
83 if (
rtolf.at(1) > 0.0 ) {
86 if (
rtold.at(1) > 0.0 ) {
89 OOFEM_LOG_INFO(
"\n----------------------------------------------------------------------------\n");
115 for (
auto &elem :
domain->giveElements() ) {
116 double size = elem->computeMeanSize();
117 if ( Le < 0 || Le >= size ) {
122 for ( nite = 0; ; ++nite ) {
127 converged = this->
checkConvergence(RT, F, rhs, ddX, X, RRT, internalForcesEBENorm, nite, errorOutOfRangeFlag);
128 if ( errorOutOfRangeFlag ) {
132 OOFEM_WARNING(
"Divergence reached after %d iterations", nite);
137 }
else if ( nite >=
nsmax ) {
144 double lambda = 210e9;
146 double c = sqrt((lambda + 2*mu) / density);
147 double dt = 0.25 * Le / c;
148 double alpha = 0.1 / dt;
149 printf(
"dt = %e\n", dt);
150 for (
int j = 0; j < neq; ++j ) {
152 X[j] = rhs[j] * dt * dt / M[j] - ( -2*X_n1[j] + X_n[j] ) - alpha * (X_n1[j] - X_n[j]) * dt;
bool checkConvergence(FloatArray &RT, FloatArray &F, FloatArray &rhs, FloatArray &ddX, FloatArray &X, double RRT, const FloatArray &internalForcesEBENorm, int nite, bool &errorOutOfRange)
double localNorm(const FloatArray &src)