Hello Till,
I would propose the following way:
Create one triangulation for the entire domain and set the material_id
for all cells in the first part of the domain to 1 and let them be set
to 0 (the default value) on the second part.
Then you can create an hp::FECollection containing both FESystems, where
the first FESystem is set active on the first part of the domain and the
second on the second part of the domain.
With this idea you can assemble the system and sparsity pattern as
usual, because you do not have to take care of the two different
FESystems anymore. Anyway, if you want to assemble the system
differently on the two parts of the domain, you can simply check,
whether the cell you are currently processing has material_id 0 or 1,
and then do the assembling procedure you want.
Best Regards,
Markus
Till Heinemann schrieb:
Hello!
I fear the solution to my problem is obvious, but I think my approach is
way too complicated and a dead-end.
I have two different FE systems, one domain surrounding the other one at
its outer boundary, but they are codependent. On their common interface
they are supposed to "share" dofs, those shall be equal in value at
least. (Imagine maybe from structure mechanics a strained body in the
middle, somewhat effected by a electrical field / heat and supported on
its boundary by strings connecting it to a wall, that behave just
differently and aren't effected by this electrical field.)
Now what I did is basically create two triangulations with coinciding
nodes on the interface and upon that a mapping that can refer from the
FEM_A dof_numbers to the FEM_B dof_numbers that have the same position
on the interface. Then I assemble a single common system_matrix where I
put entries from the FEM_B interface dofs to the mapped FEM_A ones and
equal the undefined FEM_B dofs to their partners on FEM_A.
This works for my purposes, but I've come to realize that I cannot
generate an effective sparsity_pattern this way; my bandwidth of course
explodes and I don't know how to renumber dofs effectively...
Anyhow I think my approach is not best practice and I was wondering how
I can use more deal.ii own methods for my purpose...
I guess I could define two DoFHandlers on a single large tria that
covers the entire domain and when I iterate over the cells, I use
preconditioners to guarantee I only cover those belonging to the
respective domain.
Then I assemble the system, where I somehow replace the entries from the
redundant dofs with the ones from the second DoFHandler (how do I map
dof_numbers?) ?
Is this the way to go and how would I do that?
Or would I use an entirely different approach and maybe create two
system_matrices with some kind of connection?
Any hint on which way to go would be great, or some tips on where
something similar has been done, because I don't recognize an analogue
problem within the tutorials...
Thank you very much greetings
Till
_______________________________________________
dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii
_______________________________________________
dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii