# PCApplyBAorABTranspose
Applies the transpose of the preconditioner and operator to a vector. That is, applies tr(B) * tr(A) with left preconditioning, NOT tr(B*A) = tr(A)*tr(B). 
## Synopsis
```
#include "petscksp.h" 
PetscErrorCode PCApplyBAorABTranspose(PC pc, PCSide side, Vec x, Vec y, Vec work)
```
Collective


## Input Parameters

- ***pc -*** the preconditioner context
- ***side -*** indicates the preconditioner side, one of `PC_LEFT`, `PC_RIGHT`, or `PC_SYMMETRIC`
- ***x -*** input vector
- ***work -*** work vector



## Output Parameter

- ***y -*** output vector



## Note
This routine is used internally so that the same Krylov code can be used to solve A x = b and A' x = b, with a preconditioner
defined by B'. This is why this has the funny form that it computes tr(B) * tr(A)




## See Also
 `PC`, `PCApply()`, `PCApplyTranspose()`, `PCApplyBAorAB()`

## Level
developer

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/pc/interface/precon.c.html#PCApplyBAorABTranspose">src/ksp/pc/interface/precon.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/pc/interface/precon.c)


[Index of all PC routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
