32int main(
int argc,
char *argv[])
37 const char *source_mesh_file =
"../../data/inline-tri.mesh";
38 const char *destination_mesh_file =
"../../data/inline-quad.mesh";
40 int src_n_refinements = 0;
41 int dest_n_refinements = 0;
42 int source_fe_order = 1;
43 int dest_fe_order = 1;
44 bool visualization =
true;
45 bool use_vector_fe =
false;
49 args.
AddOption(&source_mesh_file,
"-s",
"--source_mesh",
50 "Mesh file to use for src.");
51 args.
AddOption(&destination_mesh_file,
"-d",
"--destination_mesh",
52 "Mesh file to use for dest.");
53 args.
AddOption(&src_n_refinements,
"-sr",
"--source_refinements",
54 "Number of src refinements");
55 args.
AddOption(&dest_n_refinements,
"-dr",
"--dest_refinements",
56 "Number of dest refinements");
57 args.
AddOption(&visualization,
"-vis",
"--visualization",
"-no-vis",
59 "Enable or disable GLVis visualization.");
60 args.
AddOption(&source_fe_order,
"-so",
"--source_fe_order",
61 "Order of the src finite elements");
62 args.
AddOption(&dest_fe_order,
"-do",
"--dest_fe_order",
63 "Order of the dest finite elements");
64 args.
AddOption(&verbose,
"-verb",
"--verbose",
"--no-verb",
"--no-verbose",
65 "Enable/Disable verbose output");
66 args.
AddOption(&use_vector_fe,
"-vfe",
"--use_vector_fe",
"-no-vfe",
67 "--no-vector_fe",
"Use vector finite elements");
71 shared_ptr<Mesh> src_mesh, dest_mesh;
75 imesh.open(destination_mesh_file);
78 dest_mesh = make_shared<Mesh>(imesh, 1, 1);
83 mfem::err <<
"WARNING: Destination mesh file not found: "
84 << destination_mesh_file <<
"\n"
85 <<
"Using default 2D quad mesh.";
90 const int dim = dest_mesh->Dimension();
93 dest_mesh->GetBoundingBox(box_min, box_max);
97 imesh.open(source_mesh_file);
101 src_mesh = make_shared<Mesh>(imesh, 1, 1);
106 mfem::err <<
"WARNING: Source mesh file not found: " << source_mesh_file
108 <<
"Using default box mesh.\n";
121 for (
int i = 0; i < src_mesh->GetNV(); ++i)
123 double *v = src_mesh->GetVertex(i);
125 for (
int d = 0; d <
dim; ++d)
132 for (
int i = 0; i < src_n_refinements; ++i)
134 src_mesh->UniformRefinement();
137 for (
int i = 0; i < dest_n_refinements; ++i)
139 dest_mesh->UniformRefinement();
142 shared_ptr<FiniteElementCollection> src_fe_coll, dest_fe_coll;
147 make_shared<RT_FECollection>(source_fe_order, src_mesh->Dimension());
149 make_shared<RT_FECollection>(dest_fe_order, dest_mesh->Dimension());
154 make_shared<L2_FECollection>(source_fe_order, src_mesh->Dimension());
156 make_shared<L2_FECollection>(dest_fe_order, dest_mesh->Dimension());
160 make_shared<FiniteElementSpace>(src_mesh.get(), src_fe_coll.get());
163 make_shared<FiniteElementSpace>(dest_mesh.get(), dest_fe_coll.get());
201 if (assembler.
Transfer(src_fun, dest_fun))
221 mfem::out <<
"l2 error: src: " << src_err <<
", dest: " << dest_err
224 plot(*src_mesh, src_fun,
"source", 0);
225 plot(*dest_mesh, dest_fun,
"destination", 1);
230 mfem::out <<
"No intersection -> no transfer!" << std::endl;
virtual real_t ComputeL2Error(Coefficient *exsol[], const IntegrationRule *irs[]=NULL, const Array< int > *elems=NULL) const
Returns ||exsol - u_h||_L2 for scalar or vector H1 or L2 elements.
void AddOption(bool *var, const char *enable_short_name, const char *enable_long_name, const char *disable_short_name, const char *disable_long_name, const char *description, bool required=false)
Add a boolean option and set 'var' to receive the value. Enable/disable tags are used to set the bool...