xref: /petsc/src/vec/vec/tutorials/ex7f.F90 (revision 749c190bad46ba447444c173d8c7a4080c70750e)
1!
2!
3#include <petsc/finclude/petscvec.h>
4       subroutine ex7f(vec, comm)
5         use petscvec
6         implicit none
7!
8!  Demonstrates how a computational module may be written
9!  in Fortran and called from a C routine, passing down PETSc objects.
10!
11
12         PetscScalar, parameter ::  two = 2.0
13         Vec vec
14         MPIU_Comm comm
15         PetscErrorCode ierr
16         PetscMPIInt rank
17
18!
19!     The Objects vec,comm created in a C routine are now
20!     used in Fortran routines.
21!
22         PetscCall(VecSet(vec, two, ierr))
23         PetscCallMPI(MPI_Comm_rank(comm, rank, ierr))
24         PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, rank, ierr))
25
26!
27!  Now call routine from Fortran, passing in the vector, communicator
28!
29         PetscCall(ex7c(vec, comm, ierr))
30!
31!     IO from the Fortran routines may cause all kinds of
32!
33! 100   format ('[',i1,']',' Calling VecView from Fortran')
34!       write(6,100) rank
35!
36!  Now Call a PETSc Routine from Fortran
37!
38         PetscCall(VecView(vec, PETSC_VIEWER_STDOUT_WORLD, ierr))
39       end
40