[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