Hi Wayne,

> The solution in HeatProblem is a non-complex one then(half size of src 
and dst processed in MatrixFree operator)?

We are solving equation (10) from the paper; it is the  reformulated 
version of equation (9), which is a complex system. The heat equation is 
indeed not complex; but the diagonalization approach in the case of fully 
implicit stage parallel IRK makes the system complex (inter term of 
equation (2) consists of complex blocks that need to be solved).

> In your github code, you actually assemble a block matrix system(in 
MatrixFree) but didn't renumber dofs as done in most Stokes examples? 
There's no multi dof_handlers.

I am not sure which lines you are referring to, but if I assemble the 
matrix it only happens for the coarse-grid problem; also I don't think I 
did setup the matrix for the complex system and instead used simply 
Chebyshev iterations around point Jacobi. I have another project, where we 
actually assemble the matrix.

I am not sure what happens in the Stokes examples. But my guess is that 
they use a FESystem consisting of a FE for pressure and a vectorial FE for 
velocity. To be able to use block vector in this case the DoFs need to be 
renumbered so that DoFs of a component are contiguous, which is not the 
case normally.

In my case, I am using a single a single scalar DoFHandler. This describes 
both the real and the imaginary part. As a consequence, one only has to 
pass a single DoFHander/AffineConstraints to MatrixFree. This is somewhat 
different approach than it is done in the other tutorials and has been 
adopted from our two-phase solver adaflo 
(https://github.com/kronbichler/adaflo), where we extensively use it reduce 
overhead for the level-set problem (single DoFHandler that describes the 
level-set field, normal, and curvature). MatrixFree works quite nicely 
(just like in the case if you would use FESystem) if you use it with a 
scalar DoFHandler and pass a BlockVector to the matrix-free loops. I think 
we don't have a tutorial for this way to work with block vectors in the 
context of MatrixFree. However, we made lot of progress in improving the 
usability in the last two years, since we use this feature in 2-3 projects 
with external collaboration partners. Unfortunately, we have not moved all 
utility functions to deal.II yet.

> Can I implement p-multigrid precondition with given 
MGTransferBlockGlobalCoarsening?

Yes. It is used in the code.

> It's a parallel version but vectors are not initialized with 
solution(locally_owned_dofs, locally_relevant_dofs, mpi_communicator). So 
matrix_free->initialize_dof_vector has same function done?

Yes, initialize_dof_vector() does the same just smarter. A general 
recommendation: always use initialize_dof_vector. If MatrixFree notices 
that you use the internal partitioner, it can do some short cuts. Else, it 
needs to do some additional checks to figure out if the vectors are 
comptible.

Hope this helps,
Peter

On Thursday, 3 November 2022 at 03:47:05 UTC+1 yy.wayne wrote:

> Thank you peter.
>
> It looks awesome! I've got a few question about it.
>
>    1. In your github code, you actually assemble a block matrix system(in 
>    MatrixFree) but didn't renumber dofs as done in most Stokes examples? 
>    There's no multi dof_handlers. The solution in HeatProblem is a 
> non-complex 
>    one then(half size of src and dst processed in MatrixFree operator)?
>    2. Can I implement p-multigrid precondition with given 
>    MGTransferBlockGlobalCoarsening?
>    3. It's a parallel version but vectors are not initialized with 
>    solution(locally_owned_dofs, locally_relevant_dofs, mpi_communicator). So 
>    matrix_free->initialize_dof_vector has same function done?
>
> Best,
> Wayne
> 在2022年11月3日星期四 UTC+8 04:44:53<peterr...@gmail.com> 写道:
>
>> Hi
>>
>> The block version of MGTransferGlobalCoarsening is 
>> MGTransferBlockGlobalCoarsening (see  
>> https://www.dealii.org/developer/doxygen/deal.II/classMGTransferBlockGlobalCoarsening.html
>> ).
>>
>> I don't know the details of step-29. But what I would recommend you to do 
>> is to take a look at 
>> https://github.com/peterrum/dealii-spirk/blob/bb52df5d1023f9c41ca51a082be769bc0171bf75/include/operator.h#L616-L660.
>>  
>> Here, I am solving a complex-valued Helmholtz operator (in my case a sum of 
>> mass and Laplace matrix, which arises from complex implicit Runge-Kutta 
>> formulation; see https://arxiv.org/abs/2209.06700). This complex code 
>> was the motivation for writing MGTransferBlockGlobalCoarsening in the fist 
>> place^^
>>
>> I think the code should answer most of your questions.
>>
>> Regarding
>>
>> > FEEvaluation<...,1> real(matrix_free_data, 0) and FEEvaluation<...,1> 
>> real(matrix_free_data, 1)
>>
>> I guess you have to replace the "1" by a "0" in the second FEEval.
>>
>> Hope this helps,
>> Peter
>>
>> On Wednesday, 2 November 2022 at 17:55:44 UTC+1 yy.wayne wrote:
>>
>>> Well a sad thing I notice is a function used for p-multigrid in step-75: 
>>> reinit() in MGTwoLevelTransfer, is imlpemented only for 
>>> LinearAlgebra::distributed::Vector, not  
>>> LinearAlgebra::distributed::BlockVector.
>>> [image: 202211-3.png]
>>>
>>> I'm fine with writing some unimplemented functions myself, but a 
>>> guidence is really helpful. While going through this problem I found 
>>> different choices and not sure what's the best way having this done. (For 
>>> example, LinearAlgebraTrilinos::MPI::BlockVector or 
>>> LinearAlgebra::distributed::BlockVector? Whether we need 
>>> locally_relevant_dofs when reinit solution vector?(It's not used here 
>>> stokes_computation 
>>> <https://github.com/dealii/dealii/blob/2376c62a4b89953b74801852983eb8556930d54d/tests/matrix_free/stokes_computation.cc>)
>>>  
>>> Or is the non-specialized MGTransferLevel Class works as well for p 
>>> coarsening?)
>>>
>>> In short, I'm solving step-29(2 components) with matrix-free and 
>>> p-multigrid technique. Is current dealii capable of solving it? If not 
>>> what's the fastest way to implement it? Thanks!
>>> 在2022年11月2日星期三 UTC+8 21:40:36<yy.wayne> 写道:
>>>
>>>> I tried to modify my code that FEEvaluation is constructed without 
>>>> matrix_free_data as in the above .cc in dealii/test, but get following 
>>>> error information:
>>>>         "FEEvaluation was initialized without a matrix-free object. 
>>>> Integer indexing is not possible".
>>>>
>>>> Guess the only method to do MatrixFree problem with multi-components 
>>>> now is through BlockVector in matrix_vector_Stokes test 
>>>> <https://github.com/dealii/dealii/blob/master/tests/matrix_free/matrix_vector_stokes_noflux.cc>?
>>>>  
>>>> Since I never write dealii prokect with blocked dofs before I'm affraid 
>>>> codes besides MatrixFree parts should be changed as well... Should I try 
>>>> rearrange step-29 like problem with block vector? 
>>>>
>>>> 在2022年11月2日星期三 UTC+8 17:24:23<yy.wayne> 写道:
>>>>
>>>>> In test/matrix-free/assemble_matrix_02.cc 
>>>>> <https://github.com/dealii/dealii/blob/d2d20fe3ca3a1390420c51420307a3ef680c503c/tests/matrix_free/assemble_matrix_02.cc>
>>>>>  a 
>>>>> Stokes matrix is assembled in MatrixFree form, and DoFs correspond to 
>>>>> velocity and pressure are called by FEEvaluation<...,dim> velocity(..., 
>>>>> 0) 
>>>>> and  FEEvaluation<...,1> velocity(..., dim), respectively.
>>>>>
>>>>> I have a multi-comp system two as in step-29 with real and imaginary 
>>>>> parts. But initializing the 2 FEEvaluations by FEEvaluation<...,1> 
>>>>> real(matrix_free_data, 0) and FEEvaluation<...,1> real(matrix_free_data, 
>>>>> 1) 
>>>>> gives error, because matrix_free_data.n_components() is 1 not 2. Maybe 
>>>>> it's 
>>>>> because I'm using fe_collection, not just FESystem in the 
>>>>> assemble_matrix_02 test.
>>>>>
>>>>> If I have a FEEvaluation<...,dim=2> integrator including real and 
>>>>> imaginary parts, is there a way to decouple them like in FEValues (for 
>>>>> example, fe.system_to_component_index, or fe_values_real = 
>>>>> fe_values[FEValuesExtractors])?
>>>>>
>>>>> Best,
>>>>> Wayne
>>>>>
>>>>

-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/79c71c2c-f322-4d31-9e1f-c73c388765e1n%40googlegroups.com.

Reply via email to