[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Getfem-users] Using a custom finite element
From: |
Yves Renard |
Subject: |
Re: [Getfem-users] Using a custom finite element |
Date: |
Sat, 2 Feb 2019 17:12:36 +0100 (CET) |
Dear Petr,
A pfem as to be stored before it can be used in order to register its
depedencies.
Without declaring its dependencies (on bgeot::simplex_of_reference(nc) here)
which is not completely safe, this can be done as follows :
struct my_method_key : virtual public dal::static_stored_object_key {
std::string name;
bool compare(const static_stored_object_key &oo) const override{
auto &o = dynamic_cast<const method_key &>(oo);
return name < o.name;
}
bool equal(const static_stored_object_key &oo) const override{
auto &o = dynamic_cast<const method_key &>(oo);
return name == o.name;
}
method_key(const std::string &name_) : name(name_) {}
};
int main() {
using bgeot::base_node;
getfem::mesh mesh;
mesh.add_point(base_node(0, 0));
mesh.add_point(base_node(0, 0.1));
mesh.add_point(base_node(0.1, 0));
mesh.add_point(base_node(0.1, 0.1));
mesh.add_point(base_node(0.2, 0));
mesh.add_point(base_node(0.2, 0.1));
mesh.add_triangle(0, 1, 3);
mesh.add_triangle(0, 2, 3);
mesh.add_triangle(2, 3, 5);
mesh.add_triangle(2, 4, 5);
mesh.region(1).add(0, 2);
mesh.region(2).add(3, 0);
getfem::mesh_fem fem(mesh, 2);
getfem::pfem my_fem = std::make_shared<t_my_fem>();
auto pnname = std::make_shared<my_method_key>("MY_FEM_NAME");
add_stored_object(pnname, my_fem, dal::PERMANENT_STATIC_OBJECT);
fem.set_finite_element(my_fem);
...
Off course, if your fem can be of interest for somebody else, you can include
it in getfem_fem.cc, give it a name and submit your contribution !
Best regards,
Yves.
----- Original Message -----
From: "Александров Петр" <address@hidden>
To: "getfem-users" <address@hidden>
Sent: Friday, February 1, 2019 4:45:26 PM
Subject: [Getfem-users] Using a custom finite element
Hello.
I want to use a custom finite element type.
I have tried to run a following program in attachment, but have got the error
terminate called after throwing an instance of 'gmm::gmm_error'
what(): Error in dal_static_stored_objects.cc, line 259 :
Failed to add dependent between 0x558eb6a57570 of type
N5bgeot17geotrans_precomp_E and 0x558eb6a494d0 of type 8t_my_fem.
What is the problem?