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.