[dune-pdelab] SOLVED: Output component gradients for PowerGridfunctionSpace

Michael Wenske m_wens01 at wwu.de
Fri Nov 15 16:44:18 CET 2019


Dear Santiago,

thank you for taking the time! What you suggest comes very close to what
I tried in my Code example (Option 3: line 128). I can indeed create the
DiscreteGridFunctionGradient from the subspace,
but for some reason the Adapter will fail!

I append an updated version of the MWE, the adapter will fail to
instantiate with the DGFGradient made from the subspace (line 137).

thank you again!

Michael


On 15.11.19 15:50, Santiago Ospina wrote:
> Hi Michael,
>
> Your first approach on extracting the child grid function space and
> using it for the power discrete grid function space will definitely
> not work as you already noticed. The reason is that local function
> spaces have to be created with the root tree, in your case, the power
> grid function space. This is because the binding process is only
> allowed to happen in root nodes. Now, there are two approaches to get
> gradients in a grid function out of complex grid function space trees.
> The first one is the one you implemented, that is, copying the
> discrete grid function gradient and get explicitly the correct child
> out of the local function space in the evaluate function. The second
> one is by using a subspace grid function space (i.e
> GridFunctionSubSpace<...>). This class overcomes the situation
> mentioned above and allows you to use functionalities that expect a
> root grid function space (e.g. LocalFunctionSpace<...> or
> DiscreteGridFunctionGradient<...>). Naturally, the second approach
> should be prefered as it reduces code duplication. The following is
> the way it should be used:
>
> // ...
> template<int comp>
> using ComponentGFS =
> GridFunctionSubSpace<PowerGFS,TypeTree::TreePath<comp>>;
> // I am not entirely sure on the type three path above. If this
> doesn't work, take a look at the type tree docs.
>
> ComponentGFS comp_gfs(power_gfs);
> DiscreteGridFunctionGradient<ComponentGFS<0>,X> dfg_grad_0(comp_gfs,x) ;
> // from here on, this should be pretty much the same as with the
> scalar component case.
> // ...
>
> Notice that you still use the same coefficient vector as you used to
> do for the power nodes. This is because the map from DOFIndex to
> ContainerIndex is generated by the leaf nodes of local function
> spaces, therefore, no restriction operation nor additional mappings
> are needed.
>
> Best,
> Santiago
>
> --------------------------------
> Santiago Ospina De Los Rios
> Interdisciplinary Center for Scientific Computing
> Heidelberg University
>
> On Fri, Nov 15, 2019 at 2:26 PM Michael Wenske <m_wens01 at wwu.de
> <mailto:m_wens01 at wwu.de>> wrote:
>
>     Dear all,
>
>     i managed to do the gradient outputs for the components of the
>     PowerGFS
>     by writing an aditional discrete Gridfunction which is compatible
>     with the adapters.
>     I am not sure if it is clean enough to make it into the gfs
>     utilities header, but
>     for closure I want to report it here. (see attached header)
>
>     Michael
>
>     On 14.11.19 15:36, Michael Wenske wrote:
>>     Dear wizards,
>>
>>     i am working on a system of one or two (or more) reaction-diffusion
>>     equations. I successfully
>>     refactored my codebase to use the PowerGridfunctionSpace for this
>>     application.
>>     This way I can extend my system to more fields, or fall back to the
>>     simple one-equation case.
>>     I can switch between a PowerGFS of size 1 (one equation), and size 2
>>     (two coupled equations),
>>     and export the results to VTK. So far so good.
>>
>>     Now I want to inspect the gradients of my field(s). In the normal case
>>     without the PowerGFS,
>>     I could make use of the functionality of DiscreteGridFunctionGradient,
>>     and then use the VTK adapter to write the gradient. This is very convenient!
>>
>>     How do I go about this when using a PowerGFS? I fail to get it to work
>>     even for the
>>     one-component PowerGFS. For the two component fields I can use the class
>>     VectorDiscreteGridFunction<..,size>, and force the return types size
>>     with the last
>>     template argument. The class VectorDiscreteGridFunctionGradient does not
>>     seem
>>     to have that option. Here, in the case where the powerGFS has size one, the
>>     Adapters can not convert the one-component Fieldvector to double (I think).
>>
>>     I tried a different route of extracting the sub-GFS-Type from the
>>     PowerGFS and
>>     create a handle on the first components subspace. The idea was to use
>>     use the existing
>>     functionality of the DGF's and adapters on the subGFS, but I also run
>>     into problems.
>>     How would I extract the (smaller) coefficient vector from the larger
>>     PowerGFs one?
>>
>>     I figure that this might be interesting for other applications too,
>>     where the GFS-Tree
>>     might be even more complex than in my case.
>>
>>     I am attaching a minimal working example (dune module) which outputs the
>>     two component fields
>>     sucessfully. The parts where I horribly fail to output the gradients of
>>     the first component are
>>     commented, starting from line 107. I would appreciate any hints or
>>     insights on how to do this.
>>
>>     Am I missing something? What would be the dune way to do this?
>>
>>     build with:
>>     ./dune-common/bin/dunecontrol --opts=./dune-powerGFS-output/debug_opts
>>     --only=dune-powerGFS-output all
>>
>>     I am working on dune 2.6
>>
>>     thanks in advance!
>>
>>     Michael
>>
>>
>>     _______________________________________________
>>     dune-pdelab mailing list
>>     dune-pdelab at lists.dune-project.org <mailto:dune-pdelab at lists.dune-project.org>
>>     https://lists.dune-project.org/mailman/listinfo/dune-pdelab
>     _______________________________________________
>     dune-pdelab mailing list
>     dune-pdelab at lists.dune-project.org
>     <mailto:dune-pdelab at lists.dune-project.org>
>     https://lists.dune-project.org/mailman/listinfo/dune-pdelab
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.dune-project.org/pipermail/dune-pdelab/attachments/20191115/8b2b2d4b/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dune-powerGFS-output.cc
Type: text/x-c++src
Size: 7179 bytes
Desc: not available
URL: <https://lists.dune-project.org/pipermail/dune-pdelab/attachments/20191115/8b2b2d4b/attachment.cc>


More information about the dune-pdelab mailing list