DISPATCH
solver_mod.f90
1 !===============================================================================
2 !> The solver_t data type extends the patch_t with a generic guard zone dnload
3 !> procedure, which covers the need for all simple, Cartesian mesh based
4 !> solvers, and eliminates the need for a dnload procedure in each one of them.
5 !> It also adds restart functionality when initializing patches.
6 !===============================================================================
7 MODULE solver_mod
8  USE io_mod
9  USE trace_mod
10  USE extras_mod
11  USE patch_mod
12  USE task_mod
13  implicit none
14  private
15  type, public, extends(extras_t):: solver_t
16  contains
17  procedure:: init
18  procedure, nopass:: cast2solver
19  procedure:: update
20  procedure:: void_fun
21  procedure:: void_fun1
22  procedure:: void_fun3
23  procedure:: gas_pressure => void_fun
24  procedure:: compression_magnitude => void_sub
25  procedure:: vorticity_magnitude => void_sub
26  procedure:: gas_velocity_vector => void_fun3
27  generic:: gas_velocity => void_fun1, void_fun3
28  end type
29  type(solver_t), public:: solver
30 CONTAINS
31 
32 !===============================================================================
33 !> Organize calls to the extras and the hydro solver
34 !===============================================================================
35 SUBROUTINE init (self)
36  class(solver_t) :: self
37  !.............................................................................
38  call trace%begin ('solver_t%init')
39  self%nw = 1
40  call self%patch_t%init
41  call self%extras_t%init
42  self%idx%d = 1
43  self%iit = 1
44  call trace%end
45 END SUBROUTINE init
46 
47 !===============================================================================
48 !> Cast a generic task_t to patch_t
49 !===============================================================================
50 FUNCTION cast2solver (task) RESULT(solver)
51  class(task_t), pointer:: task
52  class(solver_t), pointer:: solver
53  !.............................................................................
54  select type (task)
55  class is (solver_t)
56  solver => task
57  class default
58  nullify(solver)
59  call io%abort ('patch_t%cast: failed to cast a task to patch_t')
60  end select
61 END FUNCTION cast2solver
62 
63 !===============================================================================
64 !> Organize calls to the extras and the hydro solver
65 !===============================================================================
66 SUBROUTINE update (self)
67  class(solver_t) :: self
68  !.............................................................................
69 END SUBROUTINE update
70 
71 !===============================================================================
72 SUBROUTINE void_sub (self, pg)
73  class(solver_t):: self
74  real, dimension(:,:,:):: pg
75  !-----------------------------------------------------------------------------
76  pg = self%mem(:,:,:,1,1,1)
77 END SUBROUTINE void_sub
78 
79 !===============================================================================
80 FUNCTION void_fun (self) RESULT (pg)
81  class(solver_t):: self
82  real, dimension(self%gn(1),self%gn(2),self%gn(3)):: pg
83  !-----------------------------------------------------------------------------
84  pg = self%mem(:,:,:,1,1,1)
85 END FUNCTION void_fun
86 
87 !===============================================================================
88 FUNCTION void_fun1 (self, i) RESULT (v)
89  class(solver_t):: self
90  integer:: i
91  real(4), dimension(self%gn(1),self%gn(2),self%gn(3)):: v
92  !-----------------------------------------------------------------------------
93  v = self%mem(:,:,:,1,1,1)
94 END FUNCTION void_fun1
95 
96 !===============================================================================
97 FUNCTION void_fun3 (self) RESULT (v)
98  class(solver_t):: self
99  real(4), dimension(self%gn(1),self%gn(2),self%gn(3),3):: v
100  !-----------------------------------------------------------------------------
101  v = self%mem(:,:,:,1,1:3,1)
102 END FUNCTION void_fun3
103 
104 END MODULE solver_mod
Template version of a module intended for adding extra features, at a level between the basic task an...
Definition: extras_mod.f90:54
Template module for patches, which adds pointers to memory and mesh, and number of dimensions and var...
Definition: patch_mod.f90:6
Definition: io_mod.f90:4
This module contains all experiment specific information necessary to solve the heat diffusion proble...
Definition: solver_mod.f90:5
Template module for tasks.
Definition: task_mod.f90:4