Skip to main content
`Ctrl`+`K`

# VecSetOperation

Allows the user to override a particular vector operation.

## Synopsis

    #include "petscvec.h"
    PetscErrorCode VecSetOperation(Vec vec, VecOperation op, void (*f)(void))

Logically Collective; No Fortran Support

## Input Parameters

- vec - The vector to modify

- op - The name of the operation

- f - The function that provides the operation.

## Notes

`f` may be `NULL` to remove the operation from `vec`. Depending on the operation this may be allowed, however some always expect a valid function. In these cases an error will be raised when calling the interface routine in question.

See `VecOperation` for an up-to-date list of override-able operations. The operations listed there have the form `VECOP_<OPERATION>`, where `<OPERATION>` is the suffix (in all capital letters) of the public interface routine (e.g., `VecView()` -> `VECOP_VIEW`).

Overriding a particular `Vec`’s operation has no affect on any other `Vec`s past, present, or future. The user should also note that overriding a method is “destructive”; the previous method is not retained in any way.

## Example Usage

      // some new VecView() implementation, must have the same signature as the function it seeks
      // to replace
      PetscErrorCode UserVecView(Vec x, PetscViewer viewer)
      {
        PetscFunctionBeginUser;
        // ...
        PetscFunctionReturn(PETSC_SUCCESS);
      }

      // Create a VECMPI which has a pre-defined VecView() implementation
      VecCreateMPI(comm, n, N, &x);
      // Calls the VECMPI implementation for VecView()
      VecView(x, viewer);

      VecSetOperation(x, VECOP_VIEW, (void (*)(void))UserVecView);
      // Now calls UserVecView()
      VecView(x, viewer);

## See Also

Vectors and Parallel Data, `Vec`, `VecCreate()`, `MatShellSetOperation()`

## Level

advanced

## Location

src/vec/vec/interface/vector.c

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