data_mediator.F90 coverage: 66.67 %func 91.18 %block
1) module Data_Mediator_module
2)
3) use Data_Mediator_Base_class
4)
5) implicit none
6)
7) private
8)
9) #include "petsc/finclude/petscsys.h"
10)
11) public :: DataMediatorInit, &
12) DataMediatorUpdate, &
13) DataMediatorDestroy
14)
15) contains
16)
17) ! ************************************************************************** !
18)
19) subroutine DataMediatorInit(data_mediator_list, option)
20) !
21) ! Initializes data mediator object
22) !
23) ! Author: Glenn Hammond
24) ! Date: 03/25/15
25) !
26) use Option_module
27)
28) implicit none
29)
30) class(data_mediator_base_type) :: data_mediator_list
31) type(option_type) :: option
32)
33)
34) end subroutine DataMediatorInit
35)
36) ! ************************************************************************** !
37)
38) subroutine DataMediatorUpdate(data_mediator_list,vec,option)
39) !
40) ! Updates a data mediator object transfering data from
41) ! the buffer into the PETSc Vec
42) !
43) ! Author: Glenn Hammond
44) ! Date: 03/25/15
45) !
46) use Option_module
47)
48) implicit none
49)
50) #include "petsc/finclude/petscvec.h"
51) #include "petsc/finclude/petscvec.h90"
52)
53) class(data_mediator_base_type), pointer :: data_mediator_list
54) Vec :: vec
55) type(option_type) :: option
56)
57) class(data_mediator_base_type), pointer :: cur_data_mediator
58) PetscErrorCode :: ierr
59)
60) if (associated(data_mediator_list)) then
61) call VecZeroEntries(vec,ierr);CHKERRQ(ierr)
62) cur_data_mediator => data_mediator_list
63) do
64) if (.not.associated(cur_data_mediator)) exit
65) call cur_data_mediator%Update(vec,option)
66) cur_data_mediator => cur_data_mediator%next
67) enddo
68) endif
69)
70) end subroutine DataMediatorUpdate
71)
72) ! ************************************************************************** !
73)
74) subroutine DataMediatorDestroy(data_mediator_list)
75) !
76) ! Destroys a data mediator object list
77) !
78) ! Author: Glenn Hammond
79) ! Date: 03/25/15
80) !
81) implicit none
82)
83) class(data_mediator_base_type), pointer :: data_mediator_list
84)
85) if (.not.associated(data_mediator_list)) return
86)
87) call data_mediator_list%Strip()
88) deallocate(data_mediator_list)
89) nullify(data_mediator_list)
90)
91) end subroutine DataMediatorDestroy
92)
93) end module Data_Mediator_module