Actual source code: ex34f.F

  2:       program ex34f
  3: #include "include/finclude/petscall.h90"

  5:       Interface DMCompositeGetEntries
  6:         Subroutine DMCompositeGetEntries1(dm, d1,ierr)
  7:           DM  dm
  8:           PetscErrorCode ierr
  9:         End Subroutine

 11:         Subroutine DMCompositeGetEntries2(dm, d1,d2,ierr)
 12:           DM  dm
 13:           DM d1,d2
 14:           PetscErrorCode ierr
 15:         End Subroutine

 17:         Subroutine DMCompositeGetEntries3(dm, d1,d2,d3,ierr)
 18:           DM  dm
 19:           DM d1,d2,d3
 20:           PetscErrorCode ierr
 21:         End Subroutine

 23:         Subroutine DMCompositeGetEntries4(dm, d1,d2,d3,d4,ierr)
 24:           DM  dm
 25:           DM d1,d2,d3,d4
 26:           PetscErrorCode ierr
 27:         End Subroutine
 28:       End Interface

 30:       DMMG             dmmg
 31:       PetscErrorCode   ierr
 32:       DA               da
 33:       DM               dm
 34:       external         FormInitialGuess,FormFunction


 37:       call PetscInitialize(PETSC_NULL_CHARACTER,ierr)

 39: !      Unknowns consist of a one-dimensional field, a zero dimensional pool
 40: !          another one-dimensional field and a final zero dimensional pool

 42:       call DMCompositeCreate(PETSC_COMM_WORLD,dm,ierr)
 43:       call DACreate1d(PETSC_COMM_WORLD,DA_NONPERIODIC,5,1,1,              &
 44:      &                PETSC_NULL_INTEGER,da,ierr)
 45:       call DMCompositeAddDA(dm,da,ierr)
 46:       call DMCompositeAddArray(dm,0,10,ierr)
 47:       call DMCompositeAddDA(dm,da,ierr)
 48:       call DMCompositeAddArray(dm,0,10,ierr)
 49:       call DADestroy(da,ierr)

 51: !       Create solver object and associate it with the unknowns

 53:       call DMMGCreate(PETSC_COMM_WORLD,1,PETSC_NULL_OBJECT,dmmg,ierr)
 54:       call DMMGSetDM(dmmg,dm,ierr)
 55:       call DMCompositeDestroy(dm,ierr)
 56:       call DMMGSetInitialGuess(dmmg,FormInitialGuess,ierr)
 57:       call DMMGSetSNES(dmmg,FormFunction,PETSC_NULL_OBJECT,ierr)

 59:       call DMMGSolve(dmmg,ierr)

 61:       call DMMGDestroy(dmmg,ierr)
 62:       call PetscFinalize(ierr)
 63:       end

 65:       subroutine FormInitialGuess(dmmg,v,ierr)
 66: #include "include/finclude/petscall.h90"
 67:       DMMG dmmg
 68:       Vec  v
 69:       PetscErrorCode ierr

 71:       return
 72:       end

 74:       subroutine FormFunction(dmmg,x,f,dummy,ierr)
 75: #include "include/finclude/petscall.h90"
 76:       DMMG dmmg
 77:       Vec  x,f
 78:       PetscErrorCode ierr
 79:       PetscObject dummy

 81:       return
 82:       end