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 dealii+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to