ADflow  v1.0
ADflow is a finite volume RANS solver tailored for gradient-based aerodynamic design optimization.
stencils.f90
Go to the documentation of this file.
1 module stencils
2 
3  ! stencils defines indices for several types of stencils. These
4  ! are useful for setting blocks in dRdw and dRdwPre depending
5  ! on the type of equations being solved
6 
7  use constants, only: inttype, realtype
8  implicit none
9 
10  ! Euler stencils
11  integer(kind=intType), parameter :: n_euler_pc = 7
12  integer(kind=intType), parameter :: n_euler_drdw = 13
13 
14  integer(kind=intType), dimension(7, 3), target :: euler_pc_stencil
15  integer(kind=intType), dimension(13, 3), target :: euler_drdw_stencil
16 
17  ! Viscous stencils
18  integer(kind=intType), parameter :: n_visc_pc = 27
19  integer(kind=intType), parameter :: n_visc_drdw = 33
20 
21  integer(kind=intType), dimension(27, 3), target :: visc_pc_stencil
22  integer(kind=intType), dimension(33, 3), target :: visc_drdw_stencil
23 
24 end module stencils
25 
27 
28  use stencils
29 
30  implicit none
31  integer(kind=intType) :: i, j, k, ii
32 
33  ! -------- Euler PC Stencil ---------
34  euler_pc_stencil(1, :) = (/0, 0, 0/)
35  euler_pc_stencil(2, :) = (/-1, 0, 0/)
36  euler_pc_stencil(3, :) = (/1, 0, 0/)
37  euler_pc_stencil(4, :) = (/0, -1, 0/)
38  euler_pc_stencil(5, :) = (/0, 1, 0/)
39  euler_pc_stencil(6, :) = (/0, 0, -1/)
40  euler_pc_stencil(7, :) = (/0, 0, 1/)
41 
42  ! ---------- Euler drdw Stencil ---------
43  euler_drdw_stencil(1, :) = (/0, 0, 0/)
44  euler_drdw_stencil(2, :) = (/-2, 0, 0/)
45  euler_drdw_stencil(3, :) = (/-1, 0, 0/)
46  euler_drdw_stencil(4, :) = (/1, 0, 0/)
47  euler_drdw_stencil(5, :) = (/2, 0, 0/)
48  euler_drdw_stencil(6, :) = (/0, -2, 0/)
49  euler_drdw_stencil(7, :) = (/0, -1, 0/)
50  euler_drdw_stencil(8, :) = (/0, 1, 0/)
51  euler_drdw_stencil(9, :) = (/0, 2, 0/)
52  euler_drdw_stencil(10, :) = (/0, 0, -2/)
53  euler_drdw_stencil(11, :) = (/0, 0, -1/)
54  euler_drdw_stencil(12, :) = (/0, 0, 1/)
55  euler_drdw_stencil(13, :) = (/0, 0, 2/)
56 
57  ! ---------- Visc PC Stencil -------
58 
59  ! Set the first 7 to the euler pc stencil
61 
62  ! And now for the remaining 20
63  visc_pc_stencil(8, :) = (/-1, -1, -1/)
64  visc_pc_stencil(9, :) = (/0, -1, -1/)
65  visc_pc_stencil(10, :) = (/1, -1, -1/)
66  visc_pc_stencil(11, :) = (/-1, 0, -1/)
67  visc_pc_stencil(12, :) = (/1, 0, -1/)
68  visc_pc_stencil(13, :) = (/-1, 1, -1/)
69  visc_pc_stencil(14, :) = (/0, 1, -1/)
70  visc_pc_stencil(15, :) = (/1, 1, -1/)
71 
72  visc_pc_stencil(16, :) = (/-1, -1, 0/)
73  visc_pc_stencil(17, :) = (/1, -1, 0/)
74  visc_pc_stencil(18, :) = (/-1, 1, 0/)
75  visc_pc_stencil(19, :) = (/1, 1, 0/)
76 
77  visc_pc_stencil(20, :) = (/-1, -1, 1/)
78  visc_pc_stencil(21, :) = (/0, -1, 1/)
79  visc_pc_stencil(22, :) = (/1, -1, 1/)
80  visc_pc_stencil(23, :) = (/-1, 0, 1/)
81  visc_pc_stencil(24, :) = (/1, 0, 1/)
82  visc_pc_stencil(25, :) = (/-1, 1, 1/)
83  visc_pc_stencil(26, :) = (/0, 1, 1/)
84  visc_pc_stencil(27, :) = (/1, 1, 1/)
85 
86  ! ------------ Visc dRdw Stencil -------------
87  ! Dense 3x3x3 cube
88  ii = 1
89  do k = -1, 1
90  do j = -1, 1
91  do i = -1, 1
92  visc_drdw_stencil(ii, :) = (/i, j, k/)
93  ii = ii + 1
94  end do
95  end do
96  end do
97 
98  ! Plus the 6 double halos
99  visc_drdw_stencil(28, :) = (/-2, 0, 0/)
100  visc_drdw_stencil(29, :) = (/2, 0, 0/)
101  visc_drdw_stencil(30, :) = (/0, -2, 0/)
102  visc_drdw_stencil(31, :) = (/0, 2, 0/)
103  visc_drdw_stencil(32, :) = (/0, 0, -2/)
104  visc_drdw_stencil(33, :) = (/0, 0, 2/)
105 
106 end subroutine initialize_stencils
integer(kind=inttype), parameter n_visc_drdw
Definition: stencils.f90:19
integer(kind=inttype), dimension(7, 3), target euler_pc_stencil
Definition: stencils.f90:14
integer(kind=inttype), dimension(13, 3), target euler_drdw_stencil
Definition: stencils.f90:15
integer(kind=inttype), parameter n_euler_drdw
Definition: stencils.f90:12
integer(kind=inttype), parameter n_euler_pc
Definition: stencils.f90:11
integer(kind=inttype), dimension(27, 3), target visc_pc_stencil
Definition: stencils.f90:21
integer(kind=inttype), dimension(33, 3), target visc_drdw_stencil
Definition: stencils.f90:22
integer(kind=inttype), parameter n_visc_pc
Definition: stencils.f90:18
subroutine initialize_stencils
Definition: stencils.f90:27