oldroyd_contraction.cc

The Oldroyd problem on the contraction benchmark

#include "rheolef.h"
using namespace rheolef;
using namespace std;
#include "oldroyd_theta_scheme.h"
#include "oldroyd_contraction.h"
int main(int argc, char**argv) {
environment rheolef (argc, argv);
cin >> noverbose;
oldroyd_theta_scheme<oldroyd_contraction> pb;
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);
}
Float
see the Float page for the full documentation
branch
see the branch page for the full documentation
field
see the field page for the full documentation
geo
see the geo page for the full documentation
rheolef::dout
odiststream dout(cout)
see the diststream page for the full documentation
Definition: diststream.h:430
rheolef::derr
odiststream derr(cerr)
see the diststream page for the full documentation
Definition: diststream.h:436
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
main
int main(int argc, char **argv)
Definition: oldroyd_contraction.cc:30
oldroyd_contraction.h
The Oldroyd problem on the contraction benchmark – boundary conditions.
oldroyd_theta_scheme.h
The Oldroyd problem by the theta-scheme – class header.
rheolef.h
rheolef - reference manual
oldroyd_theta_scheme
Definition: oldroyd_theta_scheme.h:26
oldroyd_theta_scheme::a
Float a
Definition: oldroyd_theta_scheme.h:42
oldroyd_theta_scheme::We
Float We
Definition: oldroyd_theta_scheme.h:42
oldroyd_theta_scheme::delta_t
Float delta_t
Definition: oldroyd_theta_scheme.h:42
oldroyd_theta_scheme::alpha
Float alpha
Definition: oldroyd_theta_scheme.h:42
oldroyd_theta_scheme::tol
Float tol
Definition: oldroyd_theta_scheme.h:42
oldroyd_theta_scheme::solve
bool solve(field &tau_h, field &uh, field &ph)
Definition: oldroyd_theta_scheme2.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
oldroyd_theta_scheme::max_iter
size_t max_iter
Definition: oldroyd_theta_scheme.h:43