module test_m implicit none #include "finclude/petscdef.h" type solver_t end type solver_t contains subroutine FunctionJacobianWithDM(dm,X,jac,preconJac,flag,this,ierr) implicit none #include "finclude/petsc.h90" DM dm Vec X Mat Jac,preconJac MatStructure flag type(Solver_t), intent(inout) :: this PetscErrorCode ierr end subroutine FunctionJacobianWithDM subroutine FunctionResidualWithDM(dm,X,F,this,ierr) implicit none #include "finclude/petsc.h90" DM :: dm Vec :: X Vec :: F type(Solver_t), intent(inout) :: this PetscErrorCode :: ierr end subroutine FunctionResidualWithDM subroutine initSolver() implicit none #include "finclude/petsc.h90" DM :: dm SNES :: snes PetscErrorCode :: ierr type(solver_t) :: this call DMSNESSetFunction(dm,FunctionResidualWithDM,this,ierr) call DMSNESSetJacobianLocal(dm,FunctionJacobianWithDM,this,ierr) end subroutine initSolver end module test_m program test use test_m implicit none call initSolver() end program test