Skip to main content
`Ctrl`+`K`

# 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 this variable 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