FESystem<dim> (
FESystem<dim>(FE_Q<dim> (parameters.degree_of_fe_velocity),dim), 1, // velocity
FE_Q<dim>(parameters.degree_of_fe_velocity), 1, // normal velocity
FE_Q<dim>(parameters.degree_of_fe_velocity), 1, // curvature
FE_Q<dim>(parameters.degree_of_fe_velocity), 1 // willmore force
)
Spencer,
I think that passing around the entire system is the way to go but what I would do is to use component mask (http://dealii.org/developer/doxygen/deal.II/DEALGlossary.html#GlossComponentMask) and block mask (http://dealii.org/developer/doxygen/deal.II/DEALGlossary.html#GlossBlockMask) to work on a subset of the whole system. Instead of having a bunch classes working on small blocks that will be added together at the ends, you have an entire system but each class works on a small block without knowing what the others do. For example, the velocity class can have access to the global dof_handler and a FEValuesExtractors for the velocity. It doesn't need to know what is its block number or how many blocks there are.
Best,
Bruno
TrilinosWrappers::MPI::Vector & get_velocity()
FESystem<dim> & get_fe_velocity()
DoFHandler<dim> & get_dof_handler_velocity()
how would I go about using the Block or Component Mask to return the proper things?
For velocity, I can return solution.block{velocity_block} which gives a TrilinosWrappers::MPI::Vector and I could possibly change the interface to return an FiniteElement<dim> instead of FESystem<dim> so that I could return fe_system.base_element(velocity_block) but the mask just allows me to extract dofs into a vector, how do I get that back into a dofhandler?
My velocity model is created using the factory method which keep to the abstract velocity interface class and I have several other velocity models that all obey this interface above. The other transport class expect this interface, so it would be very cumbersome to change it for this specific block structure since the others do not use it. Internally it has a block structure but externally, it represents only a velocity which is one of the blocks.
Bruno,Thanks for responding!
On Tuesday, August 16, 2016 at 11:16:41 AM UTC-5, Bruno Turcksin wrote:Spencer,
I think that passing around the entire system is the way to go but what I would do is to use component mask (http://dealii.org/developer/doxygen/deal.II/DEALGlossary.html#GlossComponentMask) and block mask (http://dealii.org/developer/doxygen/deal.II/DEALGlossary.html#GlossBlockMask) to work on a subset of the whole system. Instead of having a bunch classes working on small blocks that will be added together at the ends, you have an entire system but each class works on a small block without knowing what the others do. For example, the velocity class can have access to the global dof_handler and a FEValuesExtractors for the velocity. It doesn't need to know what is its block number or how many blocks there are.Are there examples of how to do what you describe? Looking at the documentation, it is not apparent how to do this.
The first two yes. If you do it right, i.e., ensure that the velocity
DoFHandler numbers degrees of freedom in the same order as the system
DoFHandler does, then you won't need a separate solution vector -- you can
just use a block of your block vector.