DMGlobalToLocalSolve#

Solve for the global vector that is mapped to a given local vector by DMGlobalToLocalBegin()/DMGlobalToLocalEnd() with mode INSERT_VALUES.

Synopsis#

#include "petscdm.h" 
#include "petscdmda.h" 
#include "petscdmplex.h" 
#include "petscdmswarm.h" 
#include "petscksp.h" 
PetscErrorCode DMGlobalToLocalSolve(DM dm, Vec x, Vec y)

Collective

Input Parameters#

  • dm - The DM object

  • x - The local vector

  • y - The global vector: the input value of globalVec is used as an initial guess

Output Parameter#

  • y - The least-squares solution

Note#

It is assumed that the sum of all the local vector sizes is greater than or equal to the global vector size, so the solution is a least-squares solution. It is also assumed that DMLocalToGlobalBegin()/DMLocalToGlobalEnd() with mode ADD_VALUES is the adjoint of the global-to-local map, so that the least-squares solution may be found by the normal equations.

If the DM is of type DMPLEX, then y is the solution of \( L^T * D * L * y = L^T * D * x \), where \(D\) is a diagonal mask that is 1 for every point in the union of the closures of the local cells and 0 otherwise. This difference is only relevant if there are anchor points that are not in the closure of any local cell (see DMPlexGetAnchors()/DMPlexSetAnchors()).

What is L?

If this solves for a global vector from a local vector why is not called DMLocalToGlobalSolve()?

See Also#

DM Basics, DM, DMGlobalToLocalBegin(), DMGlobalToLocalEnd(), DMLocalToGlobalBegin(), DMLocalToGlobalEnd(), DMPlexGetAnchors(), DMPlexSetAnchors()

Level#

advanced

Location#

src/ksp/ksp/utils/dm/dmproject.c


Index of all DM routines
Table of Contents for all manual pages
Index of all manual pages