[dune-pdelab] SOLVED! SOLVED: Output component gradients for PowerGridfunctionSpace
Michael Wenske
m_wens01 at wwu.de
Fri Nov 15 16:54:36 CET 2019
Dear Santiago,
you were totally correct! Thank you again
(Working version attached)
Michael
On 15.11.19 16:44, Michael Wenske wrote:
>
> 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
>>
>
> _______________________________________________
> dune-pdelab mailing list
> 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/bb00e527/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dune-powerGFS-output.cc
Type: text/x-c++src
Size: 7185 bytes
Desc: not available
URL: <https://lists.dune-project.org/pipermail/dune-pdelab/attachments/20191115/bb00e527/attachment.cc>
More information about the dune-pdelab
mailing list