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