xref: /petsc/src/sys/tutorials/ex5f90.F90 (revision 4e8208cbcbc709572b8abe32f33c78b69c819375)
1c4762a1bSJed Brown#include <petsc/finclude/petscsys.h>
2c4762a1bSJed Brown#include <petsc/finclude/petscbag.h>
3c4762a1bSJed Brown#include <petsc/finclude/petscviewer.h>
4c4762a1bSJed Brown
5b06eb4cdSBarry Smithmodule ex5module
6ce78bad3SBarry Smith  use petscsys
7ce78bad3SBarry Smith  use petscbag
8c4762a1bSJed Brown!     Data structure used to contain information about the problem
9c4762a1bSJed Brown!     You can add physical values etc here
10c4762a1bSJed Brown
11c4762a1bSJed Brown  type tuple
12c4762a1bSJed Brown    PetscReal:: x1, x2
13c4762a1bSJed Brown  end type tuple
14c4762a1bSJed Brown
15c4762a1bSJed Brown  type bag_data_type
16c4762a1bSJed Brown    PetscScalar :: x
17c4762a1bSJed Brown    PetscReal :: y
18c4762a1bSJed Brown    PetscInt  :: nxc
19c4762a1bSJed Brown    PetscReal :: rarray(3)
20c4762a1bSJed Brown    PetscBool  :: t
21c4762a1bSJed Brown    PetscBool  :: tarray(3)
22c4762a1bSJed Brown    PetscEnum :: enum
23c4762a1bSJed Brown    character*(80) :: c
24c4762a1bSJed Brown    type(tuple) :: pos
25c4762a1bSJed Brown  end type bag_data_type
26b06eb4cdSBarry Smithend module ex5module
27c4762a1bSJed Brown
28c4762a1bSJed Brownprogram ex5f90
29*2a8381b2SBarry Smith  use ex5module
30c4762a1bSJed Brown  use petsc
31c4762a1bSJed Brown  implicit none
32c4762a1bSJed Brown
33c4762a1bSJed Brown  PetscBag bag
34c4762a1bSJed Brown  PetscErrorCode ierr
35c4762a1bSJed Brown  type(bag_data_type), pointer :: data
36c4762a1bSJed Brown  type(bag_data_type)          :: dummydata
37c4762a1bSJed Brown  character(len=1), pointer     :: dummychar(:)
38c4762a1bSJed Brown  PetscViewer viewer
39c4762a1bSJed Brown  PetscSizeT sizeofbag
4002c639afSMartin Diehl  character(len=99) list(6)
41c4762a1bSJed Brown  PetscInt three, int56
42c4762a1bSJed Brown  PetscReal value
43c4762a1bSJed Brown  PetscScalar svalue
44c4762a1bSJed Brown
45d8606c27SBarry Smith  PetscCallA(PetscInitialize(ierr))
46c4762a1bSJed Brown  list(1) = 'a123'
47c4762a1bSJed Brown  list(2) = 'b456'
48c4762a1bSJed Brown  list(3) = 'c789'
49c4762a1bSJed Brown  list(4) = 'list'
50c4762a1bSJed Brown  list(5) = 'prefix_'
51c4762a1bSJed Brown  list(6) = ''
52c4762a1bSJed Brown!     cannot just pass a 3 to PetscBagRegisterXXXArray() because it is expecting a PetscInt
53c4762a1bSJed Brown  three = 3
54c4762a1bSJed Brown
55c4762a1bSJed Brown!   compute size of the data
56c4762a1bSJed Brown!
57c4762a1bSJed Brown  sizeofbag = size(transfer(dummydata, dummychar))
58c4762a1bSJed Brown
59c4762a1bSJed Brown! create the bag
60f8402805SBarry Smith  PetscCallA(PetscBagCreate(PETSC_COMM_WORLD, sizeofbag, bag, ierr))
61f8402805SBarry Smith  PetscCallA(PetscBagGetData(bag, data, ierr))
62f8402805SBarry Smith  PetscCallA(PetscBagSetName(bag, 'demo parameters', 'super secret demo parameters in a bag', ierr))
63f8402805SBarry Smith  PetscCallA(PetscBagSetOptionsPrefix(bag, 'pbag_', ierr))
64c4762a1bSJed Brown
65c4762a1bSJed Brown! register the data within the bag, grabbing values from the options database
667de69702SBarry Smith!     Need to put the value into a variable for 64-bit indices
67c4762a1bSJed Brown  int56 = 56
68f8402805SBarry Smith  PetscCallA(PetscBagRegisterInt(bag, data%nxc, int56, 'nxc', 'nxc_variable help message', ierr))
69f8402805SBarry Smith  PetscCallA(PetscBagRegisterRealArray(bag, data%rarray, three, 'rarray', 'rarray help message', ierr))
70c4762a1bSJed Brown!     Need to put the value into a variable to pass correctly for 128 bit quad precision numbers
71c4762a1bSJed Brown  svalue = 103.20
72f8402805SBarry Smith  PetscCallA(PetscBagRegisterScalar(bag, data%x, svalue, 'x', 'x variable help message', ierr))
73f8402805SBarry Smith  PetscCallA(PetscBagRegisterBool(bag, data%t, PETSC_TRUE, 't', 't boolean help message', ierr))
74f8402805SBarry Smith  PetscCallA(PetscBagRegisterBoolArray(bag, data%tarray, three, 'tarray', 'tarray help message', ierr))
75f8402805SBarry Smith  PetscCallA(PetscBagRegisterString(bag, data%c, 'hello', 'c', 'string help message', ierr))
76c4762a1bSJed Brown  value = -11.00
77f8402805SBarry Smith  PetscCallA(PetscBagRegisterReal(bag, data%y, value, 'y', 'y variable help message', ierr))
78c4762a1bSJed Brown  value = 1.00
79f8402805SBarry Smith  PetscCallA(PetscBagRegisterReal(bag, data%pos%x1, value, 'pos_x1', 'tuple value 1 help message', ierr))
80c4762a1bSJed Brown  value = 2.00
81f8402805SBarry Smith  PetscCallA(PetscBagRegisterReal(bag, data%pos%x2, value, 'pos_x2', 'tuple value 2 help message', ierr))
82f8402805SBarry Smith  PetscCallA(PetscBagRegisterEnum(bag, data%enum, list, 1, 'enum', 'tuple value 2 help message', ierr))
83f8402805SBarry Smith  PetscCallA(PetscBagView(bag, PETSC_VIEWER_STDOUT_WORLD, ierr))
84c4762a1bSJed Brown
85c4762a1bSJed Brown  data%nxc = 23
86c4762a1bSJed Brown  data%rarray(1) = -1.0
87c4762a1bSJed Brown  data%rarray(2) = -2.0
88c4762a1bSJed Brown  data%rarray(3) = -3.0
89c4762a1bSJed Brown  data%x = 155.4
90c4762a1bSJed Brown  data%c = 'a whole new string'
91c4762a1bSJed Brown  data%t = PETSC_TRUE
92c4762a1bSJed Brown  data%tarray = (/PETSC_TRUE, PETSC_FALSE, PETSC_TRUE/)
93f8402805SBarry Smith  PetscCallA(PetscBagView(bag, PETSC_VIEWER_BINARY_WORLD, ierr))
94c4762a1bSJed Brown
95f8402805SBarry Smith  PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_WORLD, 'binaryoutput', FILE_MODE_READ, viewer, ierr))
96f8402805SBarry Smith  PetscCallA(PetscBagLoad(viewer, bag, ierr))
97f8402805SBarry Smith  PetscCallA(PetscViewerDestroy(viewer, ierr))
98f8402805SBarry Smith  PetscCallA(PetscBagView(bag, PETSC_VIEWER_STDOUT_WORLD, ierr))
99c4762a1bSJed Brown
100f8402805SBarry Smith  PetscCallA(PetscBagSetFromOptions(bag, ierr))
101f8402805SBarry Smith  PetscCallA(PetscBagView(bag, PETSC_VIEWER_STDOUT_WORLD, ierr))
102f8402805SBarry Smith  PetscCallA(PetscBagDestroy(bag, ierr))
103c4762a1bSJed Brown
104f8402805SBarry Smith  PetscCallA(PetscFinalize(ierr))
105c4762a1bSJed Brownend program ex5f90
106c4762a1bSJed Brown
107c4762a1bSJed Brown!
108c4762a1bSJed Brown!/*TEST
109c4762a1bSJed Brown!
110c4762a1bSJed Brown!   test:
111c4762a1bSJed Brown!      args: -pbag_rarray 4,5,88
112c4762a1bSJed Brown!
113c4762a1bSJed Brown!TEST*/
114