23 #include "libmesh/libmesh.h"    24 #include "libmesh/mesh.h"    25 #include "libmesh/equation_systems.h"    26 #include "libmesh/exact_solution.h"    27 #include "libmesh/mesh_function.h"    28 #include "libmesh/namebased_io.h"    29 #include "libmesh/numeric_vector.h"    30 #include "libmesh/enum_norm_type.h"    31 #include "libmesh/int_range.h"    35 unsigned char dim = 2; 
    37 int main(
int argc, 
char ** argv)
    45                << 
" coarsemesh coarsesolution finemesh finesolution [outputdiff]" << std::endl;
    50   coarse_mesh.read(argv[1]);
    51   libMesh::out << 
"Loaded coarse mesh " << argv[1] << std::endl;
    52   coarse_es.read(argv[2]);
    53   libMesh::out << 
"Loaded coarse solution " << argv[2] << std::endl;
    54   fine_mesh.read(argv[3]);
    55   libMesh::out << 
"Loaded fine mesh " << argv[3] << std::endl;
    56   fine_es.read(argv[4]);
    57   libMesh::out << 
"Loaded fine solution " << argv[4] << std::endl;
    62   std::vector<std::string> sysnames;
    63   sysnames.reserve(coarse_es.n_systems());
    65   for (
unsigned int i = 0; i != coarse_es.n_systems(); ++i)
    66     if (fine_es.has_system(coarse_es.get_system(i).name()))
    67       sysnames.push_back(coarse_es.get_system(i).name());
    70                    << coarse_es.get_system(i).name()
    71                    << 
" not found in fine solution!" << std::endl;
    73   for (
unsigned int i = 0; i != fine_es.n_systems(); ++i)
    74     if (!coarse_es.has_system(fine_es.get_system(i).name()))
    76                    << fine_es.get_system(i).name()
    77                    << 
" not found in coarse solution!" << std::endl;
    79   if (!coarse_es.n_systems() && !fine_es.n_systems())
    80     libMesh::out << 
"No systems found in fine or coarse solution!"    85       const std::string sysname = sysnames[i];
    86       const System & coarse_sys = coarse_es.get_system(sysname);
    87       const System & fine_sys = fine_es.get_system(sysname);
    89       for (
unsigned int j = 0; j != coarse_sys.
n_vars(); ++j)
    96                            << 
" variable " << varname
    97                            << 
" not found in coarse solution!" << std::endl;
   104           libMesh::out << 
"Errors in system " << sysname << 
", variable " << varname << 
":" << std::endl;
   116       for (
unsigned int j = 0; j != fine_sys.
n_vars(); ++j)
   123                            << 
" variable " << varname
   124                            << 
" not found in fine solution!" << std::endl;
   130         libMesh::out << 
"No variables found in fine or coarse solution system "   131                      << sysname << 
'!' << std::endl;
   136       libMesh::out << 
"Writing diff solution " << argv[5] << std::endl;
   140           const std::string sysname = sysnames[i];
   141           const System & coarse_sys = coarse_es.get_system(sysname);
   142           const System & fine_sys = fine_es.get_system(sysname);
   144           std::unique_ptr<NumericVector<Number>> fine_solution = fine_sys.
solution->clone();
   147           std::vector<unsigned int>
   150           for (
unsigned int j = 0; j != fine_sys.
n_vars(); ++j)
   160              coarse_sys.
get_dof_map(), std::move(var_remapping));
   161           coarse_solution.
init();
   163           coarse_solution.enable_out_of_mesh_mode(oom_value);
   166           *fine_sys.
solution -= *fine_solution;
 This class handles the computation of the L2 and/or H1 error for the Systems in the EquationSystems o...
This class supports simple reads and writes in any libMesh-supported format, by dispatching to one of...
virtual void write_equation_systems(const std::string &filename, const EquationSystems &es, const std::set< std::string > *system_names=nullptr) override
This method implements writing a mesh with data to a specified file where the data is taken from the ...
This is the EquationSystems class. 
Real h2_error(std::string_view sys_name, std::string_view unknown_name)
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
The LibMeshInit class, when constructed, initializes the dependent libraries (e.g. 
The libMesh namespace provides an interface to certain functionality in the library. 
unsigned int variable_number(std::string_view var) const
void project_solution(FunctionBase< Number > *f, FunctionBase< Gradient > *g=nullptr) const
Projects arbitrary functions onto the current solution. 
bool has_variable(std::string_view var) const
int main(int argc, char **argv)
Manages consistently variables, degrees of freedom, and coefficient vectors. 
void compute_error(std::string_view sys_name, std::string_view unknown_name)
Computes and stores the error in the solution value e = u-u_h, the gradient grad(e) = grad(u) - grad(...
std::unique_ptr< NumericVector< Number > > solution
Data structure to hold solution values. 
Real calculate_norm(const NumericVector< Number > &v, unsigned int var, FEMNormType norm_type, std::set< unsigned int > *skip_dimensions=nullptr) const
void init(triangulateio &t)
Initializes the fields of t to nullptr/0 as necessary. 
virtual void init() override
Override the FunctionBase::init() member function. 
const std::string & variable_name(const unsigned int i) const
Real l2_error(std::string_view sys_name, std::string_view unknown_name)
This class provides function-like objects for data distributed over a mesh. 
void attach_reference_solution(const EquationSystems *es_fine)
Attach function similar to system.h which allows the user to attach a second EquationSystems object w...
unsigned int n_vars() const
The Mesh class is a thin wrapper, around the ReplicatedMesh class by default. 
Real h1_error(std::string_view sys_name, std::string_view unknown_name)
const DofMap & get_dof_map() const
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...