On Thu, 14 Apr 2011, Vikram Garg wrote:

All,
     We have recently added adjoint capability to libMesh. In matrix terms, this implies 
that after solving a system "Ax = b", PETSc will have to
solve "A^{t} z = q", where A^{t} is transpose(A).

However, PETSc can use information it generated while solving "Ax = b" to quickly solve "A^{t} 
z = q". For example, if we solve "Ax = b" using LU
factorization, we have z = (A^{t})^{-1} q = (A^{-1})^{t} q = (L^{-1})^{T} 
(U^{-1})^{T} q. In this case, the transpose solution reduces to matrix
vector multiplies.

The PETSc function that provides this kind of functionality is 
KSPSolveTranspose and it would be good to add an interface to it. Currently we 
have
the following interface planned:

1) Declare a new virtual function in linear_solver.h: virtual bool 
reuse_preconditioner()

Two new virtual functions, to get into more detail: by default
LinearSolver::adjoint_solve() would do the same get_transpose()
hackery that we've currently got in the System::adjoint_solve()
implementations, but the PetscLinearSolver specialization would just
use KSPSolveTranspose directly.

2) Define it in petsc_linear_solver.h as accessing a flag
3) Rework petsc_linear_solver.C to accomodate the use of KSPSolveTranspose
4) Add to examples, and verify performance improvement in adjoint_solve call
---
Roy
------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
Libmesh-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to