Rheolef  7.1
an efficient C++ finite element environment
oldroyd_contraction.cc

The Oldroyd problem on the contraction benchmark

#include "rheolef.h"
using namespace rheolef;
using namespace std;
int main(int argc, char**argv) {
environment rheolef (argc, argv);
cin >> noverbose;
geo omega (argv[1]);
Float We_incr = (argc > 2) ? atof(argv[2]) : 0.1;
Float We_max = (argc > 3) ? atof(argv[3]) : 0.1;
Float delta_t0 = (argc > 4) ? atof(argv[4]) : 0.005;
string restart = (argc > 5) ? argv[5] : "";
pb.tol = 1e-3;
pb.max_iter = 50000;
pb.alpha = 8./9;
pb.a = 1;
pb.delta_t = delta_t0;
Float delta_t_min = 1e-5;
Float We_incr_min = 1e-5;
dout << catchmark("alpha") << pb.alpha << endl
<< catchmark("a") << pb.a << endl;
branch even ("We", "tau", "u", "p");
field tau_h, uh, ph;
pb.initial (omega, tau_h, uh, ph, restart);
dout << even (pb.We, tau_h, uh, ph);
bool ok = true;
do {
if (ok) pb.We += We_incr;
derr << "# We = " << pb.We << " delta_t = " << pb.delta_t << endl;
field tau_h0 = tau_h, uh0 = uh, ph0 = ph;
ok = pb.solve (tau_h, uh, ph);
if (ok) {
dout << even (pb.We, tau_h, uh, ph);
} else {
pb.delta_t /= 2;
tau_h = tau_h0; uh = uh0; ph = ph0;
if (pb.delta_t < delta_t_min) {
derr << "# solve failed: decreases We_incr and retry..." << endl;
pb.delta_t = delta_t0;
We_incr /= 2;
pb.We -= We_incr;
if (We_incr < We_incr_min) break;
} else {
derr << "# solve failed: decreases delta_t and retry..." << endl;
}
}
derr << endl << endl;
} while (true);
}
oldroyd_theta_scheme.h
The Oldroyd problem by the theta-scheme – class header.
oldroyd_theta_scheme::max_iter
size_t max_iter
Definition: oldroyd_theta_scheme.h:43
rheolef::catchmark
see the catchmark page for the full documentation
Definition: catchmark.h:67
oldroyd_theta_scheme::alpha
Float alpha
Definition: oldroyd_theta_scheme.h:42
field
see the field page for the full documentation
oldroyd_theta_scheme::solve
bool solve(field &tau_h, field &uh, field &ph)
Definition: oldroyd_theta_scheme2.h:26
oldroyd_theta_scheme::delta_t
Float delta_t
Definition: oldroyd_theta_scheme.h:42
oldroyd_theta_scheme::tol
Float tol
Definition: oldroyd_theta_scheme.h:42
rheolef.h
rheolef - reference manual
oldroyd_theta_scheme
Definition: oldroyd_theta_scheme.h:26
oldroyd_theta_scheme::initial
void initial(const geo &omega, field &tau_h, field &uh, field &ph, string restart)
Definition: oldroyd_theta_scheme2.h:47
main
int main(int argc, char **argv)
Definition: oldroyd_contraction.cc:30
rheolef::environment
see the environment page for the full documentation
Definition: environment.h:115
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::derr
odiststream derr(cerr)
see the diststream page for the full documentation
Definition: diststream.h:436
Float
see the Float page for the full documentation
branch
see the branch page for the full documentation
oldroyd_contraction.h
The Oldroyd problem on the contraction benchmark – boundary conditions.
oldroyd_theta_scheme::We
Float We
Definition: oldroyd_theta_scheme.h:42
rheolef::dout
odiststream dout(cout)
see the diststream page for the full documentation
Definition: diststream.h:430
oldroyd_theta_scheme::a
Float a
Definition: oldroyd_theta_scheme.h:42
rheolef::std
Definition: vec_expr_v2.h:402
geo
see the geo page for the full documentation