Hi Denis,
I'm sure there is someone more knowledgable than me, but I'll take a crack 
at a couple of these:

(2/3) Maybe I'm misunderstanding your circumstances, but if all you need is 
different update flags for different fields you can do that with a single 
MatrixFree object, but set different flags for each field with the 
FEEvaluation::evaluate 
method 
<https://dealii.org/8.4.0/doxygen/deal.II/classFEEvaluation.html#acc376d2cc45d850a86f5b76a39ec50de>.
 
I'm not quite sure what you mean with regards to solving a problem in a 
staggered way, so you maybe you do actually need multiple MatrixFree 
objects.

(5) That's how I do it and it certainly works, although if there's a more 
elegant way built into the code, I'd be interested to hear it.

Best,
Steve

On Thursday, September 29, 2016 at 7:25:47 AM UTC-4, Denis Davydov wrote:
>
> Dear all,
>
> I have accumulated a few matrix-free related questions which i would like 
> to clarify ask.
>
> (1) FEEvaluation has read_dof_values (const std::vector< VectorType > 
> &src, const unsigned int first_index=0),
> but i don’t see a function to get to values of each DoF vector at 
> quadrature points.
>
> (2) For non-linear problems solved in staggered way one has several 
> matrix-free operators which need to exchange
> some data on quadrature points. Each of those operators has a separate 
> MatrixFree object assigned as they generally
> may require different update flags (values, gradients, etc). In order to 
> loop over cells during update of quadrature point
> data one needs to use MatrixFree object together with FEEvaluation. So the 
> questions is about this loop (cell/quadrature points)
> guaranteed to be the same for slightly different MatrixFree data objects.
>
> Supposedly if 
>
> MPI_Comm                     mpi_communicator
> TasksParallelScheme tasks_parallel_scheme
> unsigned int                   tasks_block_size
>
> as well as DoFHandler, Constraints and Quadrature 
> are the same among all the MatrixFree objects, then the loop over block of 
> local cells and quadrature points 
> is guaranteed to be the same, right?
>
> As an example, say one operator needs shape values only, another -- only 
> gradients, finally in order to initialize quadrature point data i 
> need the locations of quadrature points in real space. I suppose in this 
> case I can keep and use an auxiliary MatrixFree object 
> to setup quadrature point data granted that all three objects use the same 
> mpi_comm, task parallel scheme, block size,
> dof_handler, constraints and quadrature.
>
> (3) It appears that vectors which are used with matrix-free need to be 
> initialized with MatrixFree<dim,number::initialize_dof_vector().
> I suppose if the only difference between two different MatrixFree objects 
> is UpdateFlags, it does not matter which one to use for initialization?
> Supposedly only mpi_communicator and DoFHandler influence the result.
>
> (4) LinearAlgebra::distributed::Vector<double> seems to be different from 
> those in Trilinos and PETSc in that it can be used both 
> during solution of SLAE (writing into) and for evaluation of FE fields 
> (i.e. error estimator). That is, it behaves both as fully distributed 
> vector and the one with
> ghost entries. 
>
> My understanding is the following should work:
>
> // solve SLAE
> constraints.distribute (solution);
> solution.update_ghost_values();
> // do something like evaluate solution at quadrature points
> // solve SLAE again with the same vector
> constraints.distribute (solution);
> ...
>
> (5) I guess if evaluation of a function with VectorizedArray has some 
> branches (ie if x > 0 ... else...), then this part has to be evaluated 
> manually without SIMD
> by looping over VectorizedArray<double>::n_array_elements. At least that's 
> what i would expect.
>
> Regards,
> Denis.
>

-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to