From: Roy S. <ro...@st...> - 2008-04-10 20:15:54
|
On Thu, 10 Apr 2008, Mike L wrote: > I am currently starting a project that will involve some mixed FEM work. I > have two coupled equations- one equation is solved for each element (which > uses 3 or 4-node, elements, solving for an unknown at the centroid of the > element), If you're talking about discontinuous constant elements, this is a capability which libMesh already has; if not then I'd still guess that your element type would be simple to add. > and the second would be solved for each element edge (which I am > proposing to use a normal vector element such as an RT0 at each edge). This, unfortunately, is not a capability libMesh already has - its finite element APIs are designed for scalar-valued elements, and we build vector-valued mixed elements as tensor products of scalar spaces. For an inherently vector-valued element like the RT family where this isn't possible, you'd have to add not only the new element but some new base class methods as well. That's not an impossible task, and you'd have people willing to help you, but it's not something you could jump in and do yourself in a couple days. > Looking through the documentation it appears to be both flexible, > and powerful. In the past I have always coded up my own FEM codes, > but I would like to try giving a library like libmesh a try. Is a > mixed problem like the one I am proposing, something that would be > possible to do using libmesh or some other general FEM library? Or > is something of this nature better off coded on my own? If it does > sound like something that libmesh could tackle, are there any code > examples that solve a similar, mixed problem? Thanks in advance. Some mixed elements are fine (see the Navier-Stokes examples for some P_n^d velocity with P_{n-1} pressure examples), but for RT elements you'd have to do some library work within libMesh. I believe deal.II already has RT elements included, but only on quad and hex elements. And of course coding from scratch is always an option, if your needs are simple enough, but it would be significantly harder to add some of the libMesh features to your own code than it would be to add RT0 elements to libMesh. So I guess it depends on what you need. If you can get by without triangles or tetrahedra then I would suggest investigating deal.II. If you need simplices but you don't need parallelism, adaptivity, or any of the other more involved libMesh features then you can probably get by with writing your own code from scratch. In any other case, adding the RT0 elements to libMesh may be your best bet. --- Roy |