Rheolef  7.2
an efficient C++ finite element environment
 
Loading...
Searching...
No Matches
convect_error.cc

Convection-diffusion equation by the method of characteristics – error analysis.

Convection-diffusion equation by the method of characteristics – error analysis

#include "rheolef.h"
using namespace rheolef;
using namespace std;
#include "rotating-hill.h"
int main (int argc, char **argv) {
environment rheolef (argc,argv);
Float tol = (argc > 1) ? atof(argv[1]) : 1e-10;
din >> catchmark("nu") >> nu;
branch get ("t","phi");
branch put ("t","phi_h","pi_h_phi");
derr << "# t\terror_l2\terror_linf" << endl;
field phi_h;
Float err_l2_l2 = 0;
Float err_linf_linf = 0;
for (Float t = 0, t_prec = 0; din >> get (t, phi_h); t_prec = t) {
const space& Xh = phi_h.get_space();
size_t d = Xh.get_geo().dimension();
field pi_h_phi = lazy_interpolate (Xh, phi(d,nu,t));
trial phi (Xh); test psi (Xh);
form m = integrate (phi*psi);
field eh = phi_h - pi_h_phi;
Float err_l2 = sqrt(m(eh,eh));
Float err_linf = eh.max_abs();
err_l2_l2 += sqr(err_l2)*(t - t_prec);
err_linf_linf = max(err_linf_linf, err_linf);
dout << put (t, phi_h, pi_h_phi);
derr << t << "\t" << err_l2 << "\t" << err_linf << endl;
}
derr << "# error_l2_l2 = " << sqrt(err_l2_l2) << endl;
derr << "# error_linf_linf = " << err_linf_linf << endl;
return (err_linf_linf <= tol) ? 0 : 1;
}
void put(idiststream &in, odiststream &out, bool do_proj, bool do_lumped_mass, string use_proj_approx, bool def_fill_opt, size_type extract_id, const Float &scale_value, const std::pair< Float, Float > &u_range, render_type render, reuse_proj_form_type reuse)
Definition branch.cc:529
see the Float page for the full documentation
see the branch page for the full documentation
see the field page for the full documentation
see the form page for the full documentation
see the catchmark page for the full documentation
Definition catchmark.h:67
see the environment page for the full documentation
see the space page for the full documentation
see the test page for the full documentation
see the test page for the full documentation
int main()
Definition field2bb.cc:58
This file is part of Rheolef.
STL namespace.
rheolef - reference manual
Convection-diffusion equation – the rotating hill benchmark.
Definition nu.h:26
Definition phi.h:25