Skip to main content
`Ctrl`+`K`

# PetscObjectCompose

Associates another PETSc object with a given PETSc object.

## Synopsis

    #include "petscsys.h"
    PetscErrorCode PetscObjectCompose(PetscObject obj, const char name[], PetscObject ptr)

Not Collective

## Input Parameters

- obj - the PETSc object; this must be cast with (`PetscObject`), for example, `PetscObjectCompose`((`PetscObject`)mat,…);

- name - name associated with the child object

- ptr - the other PETSc object to associate with the PETSc object; this must also be cast with (`PetscObject`)

## Notes

The second objects reference count is automatically increased by one when it is composed.

Replaces any previous object that had been composed with the same name.

If `ptr` is `NULL` and `name` has previously been composed using an object, then that entry is removed from `obj`.

`PetscObjectCompose()` can be used with any PETSc object (such as `Mat`, `Vec`, `KSP`, `SNES`, etc.) or any user-provided object.

`PetscContainerCreate()` or `PetscObjectContainerCompose()` can be used to create an object from a user-provided pointer that may then be composed with PETSc objects using `PetscObjectCompose()`

## Fortran Note

Use

      call PetscObjectCompose(obj, name, PetscObjectCast(ptr), ierr)

## See Also

`PetscObjectQuery()`, `PetscContainerCreate()`, `PetscObjectComposeFunction()`, `PetscObjectQueryFunction()`, `PetscContainer`, `PetscContainerSetPointer()`, `PetscObject`, `PetscObjectContainerCompose()`

## Level

advanced

## Location

src/sys/objects/inherit.c

## Examples

src/ts/tutorials/ex29.c
src/snes/tutorials/ex48.c
src/snes/tutorials/ex35.c
src/ts/tutorials/ex30.c
src/snes/tutorials/ex56.c
src/ksp/ksp/tutorials/ex73.c
src/ts/tutorials/ex46.c
src/snes/tutorials/ex62.c
src/snes/tutorials/ex77.c
src/snes/tutorials/ex69.c

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