@@ -13,14 +13,13 @@ module m_hypoelastic
13
13
14
14
use m_global_parameters !< Definitions of the global parameters
15
15
16
- use m_finite_differences
17
- use m_helper
16
+ use m_mpi_proxy !< Message passing interface (MPI) module proxy
17
+
18
18
! ==========================================================================
19
19
20
20
implicit none
21
21
22
22
private; public :: s_initialize_hypoelastic_module, &
23
- s_finalize_hypoelastic_module, &
24
23
s_compute_hypoelastic_rhs
25
24
26
25
real (wp), allocatable, dimension (:) :: Gs
@@ -34,16 +33,11 @@ module m_hypoelastic
34
33
real (wp), allocatable, dimension (:, :, :) :: rho_K_field, G_K_field
35
34
!$acc declare create(rho_K_field, G_K_field)
36
35
37
- real (wp), allocatable, dimension (:, :) :: fd_coeff_x_h
38
- real (wp), allocatable, dimension (:, :) :: fd_coeff_y_h
39
- real (wp), allocatable, dimension (:, :) :: fd_coeff_z_h
40
- !$acc declare create(fd_coeff_x_h,fd_coeff_y_h,fd_coeff_z_h)
41
-
42
36
contains
43
37
44
38
subroutine s_initialize_hypoelastic_module
45
39
46
- integer :: i, k, r
40
+ integer :: i
47
41
48
42
@:ALLOCATE(Gs(1 :num_fluids))
49
43
@:ALLOCATE(rho_K_field(0 :m,0 :n,0 :p), G_K_field(0 :m,0 :n,0 :p))
@@ -61,29 +55,6 @@ contains
61
55
end do
62
56
!$acc update device(Gs)
63
57
64
- @:ALLOCATE(fd_coeff_x_h(- fd_number:fd_number, 0 :m))
65
- if (n > 0 ) then
66
- @:ALLOCATE(fd_coeff_y_h(- fd_number:fd_number, 0 :n))
67
- end if
68
- if (p > 0 ) then
69
- @:ALLOCATE(fd_coeff_z_h(- fd_number:fd_number, 0 :p))
70
- end if
71
-
72
- ! Computing centered finite difference coefficients
73
- call s_compute_finite_difference_coefficients(m, x_cc, fd_coeff_x_h, buff_size, &
74
- fd_number, fd_order)
75
- !$acc update device(fd_coeff_x_h)
76
- if (n > 0 ) then
77
- call s_compute_finite_difference_coefficients(n, y_cc, fd_coeff_y_h, buff_size, &
78
- fd_number, fd_order)
79
- !$acc update device(fd_coeff_y_h)
80
- end if
81
- if (p > 0 ) then
82
- call s_compute_finite_difference_coefficients(p, z_cc, fd_coeff_z_h, buff_size, &
83
- fd_number, fd_order)
84
- !$acc update device(fd_coeff_z_h)
85
- end if
86
-
87
58
end subroutine s_initialize_hypoelastic_module
88
59
89
60
!> The purpose of this procedure is to compute the source terms
@@ -99,7 +70,7 @@ contains
99
70
100
71
real (wp) :: rho_K, G_K
101
72
102
- integer :: i, k, l, q, r !< Loop variables
73
+ integer :: i, k, l, q !< Loop variables
103
74
integer :: ndirs !< Number of coordinate directions
104
75
105
76
ndirs = 1 ; if (n > 0 ) ndirs = 2 ; if (p > 0 ) ndirs = 3
@@ -112,91 +83,82 @@ contains
112
83
do q = 0 , p
113
84
do l = 0 , n
114
85
do k = 0 , m
115
- du_dx(k, l, q) = 0._wp
86
+ du_dx(k, l, q) = &
87
+ (q_prim_vf(momxb)%sf(k - 2 , l, q) &
88
+ - 8._wp * q_prim_vf(momxb)%sf(k - 1 , l, q) &
89
+ + 8._wp * q_prim_vf(momxb)%sf(k + 1 , l, q) &
90
+ - q_prim_vf(momxb)%sf(k + 2 , l, q)) &
91
+ / (12._wp * dx(k))
116
92
end do
117
93
end do
118
94
end do
119
- !$acc end parallel loop
120
-
121
- !$acc parallel loop collapse(3 ) gang vector default(present)
122
- do q = 0 , p
123
- do l = 0 , n
124
- do k = 0 , m
125
- !$acc loop seq
126
- do r = - fd_number, fd_number
127
- du_dx(k, l, q) = du_dx(k, l, q) &
128
- + q_prim_vf(momxb)%sf(k + r, l, q)* fd_coeff_x_h(r, k)
129
- end do
130
-
131
- end do
132
- end do
133
- end do
134
- !$acc end parallel loop
135
95
136
96
if (ndirs > 1 ) then
137
97
!$acc parallel loop collapse(3 ) gang vector default(present)
138
98
do q = 0 , p
139
99
do l = 0 , n
140
100
do k = 0 , m
141
- du_dy(k, l, q) = 0._wp ; dv_dx(k, l, q) = 0._wp ; dv_dy(k, l, q) = 0._wp
101
+ du_dy(k, l, q) = &
102
+ (q_prim_vf(momxb)%sf(k, l - 2 , q) &
103
+ - 8._wp * q_prim_vf(momxb)%sf(k, l - 1 , q) &
104
+ + 8._wp * q_prim_vf(momxb)%sf(k, l + 1 , q) &
105
+ - q_prim_vf(momxb)%sf(k, l + 2 , q)) &
106
+ / (12._wp * dy(l))
107
+ dv_dx(k, l, q) = &
108
+ (q_prim_vf(momxb + 1 )%sf(k - 2 , l, q) &
109
+ - 8._wp * q_prim_vf(momxb + 1 )%sf(k - 1 , l, q) &
110
+ + 8._wp * q_prim_vf(momxb + 1 )%sf(k + 1 , l, q) &
111
+ - q_prim_vf(momxb + 1 )%sf(k + 2 , l, q)) &
112
+ / (12._wp * dx(k))
113
+ dv_dy(k, l, q) = &
114
+ (q_prim_vf(momxb + 1 )%sf(k, l - 2 , q) &
115
+ - 8._wp * q_prim_vf(momxb + 1 )%sf(k, l - 1 , q) &
116
+ + 8._wp * q_prim_vf(momxb + 1 )%sf(k, l + 1 , q) &
117
+ - q_prim_vf(momxb + 1 )%sf(k, l + 2 , q)) &
118
+ / (12._wp * dy(l))
142
119
end do
143
120
end do
144
121
end do
145
- !$acc end parallel loop
146
-
147
- !$acc parallel loop collapse(3 ) gang vector default(present)
148
- do q = 0 , p
149
- do l = 0 , n
150
- do k = 0 , m
151
- !$acc loop seq
152
- do r = - fd_number, fd_number
153
- du_dy(k, l, q) = du_dy(k, l, q) &
154
- + q_prim_vf(momxb)%sf(k, l + r, q)* fd_coeff_y_h(r, l)
155
- dv_dx(k, l, q) = dv_dx(k, l, q) &
156
- + q_prim_vf(momxb + 1 )%sf(k + r, l, q)* fd_coeff_x_h(r, k)
157
- dv_dy(k, l, q) = dv_dy(k, l, q) &
158
- + q_prim_vf(momxb + 1 )%sf(k, l + r, q)* fd_coeff_y_h(r, l)
159
- end do
160
- end do
161
- end do
162
- end do
163
- !$acc end parallel loop
164
122
165
123
! 3D
166
124
if (ndirs == 3 ) then
167
-
168
- !$acc parallel loop collapse(3 ) gang vector default(present)
169
- do q = 0 , p
170
- do l = 0 , n
171
- do k = 0 , m
172
- du_dz(k, l, q) = 0_wp ; dv_dz(k, l, q) = 0_wp ; dw_dx(k, l, q) = 0_wp ;
173
- dw_dy(k, l, q) = 0_wp ; dw_dz(k, l, q) = 0_wp ;
174
- end do
175
- end do
176
- end do
177
- !$acc end parallel loop
178
-
179
125
!$acc parallel loop collapse(3 ) gang vector default(present)
180
126
do q = 0 , p
181
127
do l = 0 , n
182
128
do k = 0 , m
183
- !$acc loop seq
184
- do r = - fd_number, fd_number
185
- du_dz(k, l, q) = du_dz(k, l, q) &
186
- + q_prim_vf(momxb)%sf(k, l, q + r)* fd_coeff_z_h(r, q)
187
- dv_dz(k, l, q) = dv_dz(k, l, q) &
188
- + q_prim_vf(momxb + 1 )%sf(k, l, q + r)* fd_coeff_z_h(r, q)
189
- dw_dx(k, l, q) = dw_dx(k, l, q) &
190
- + q_prim_vf(momxe)%sf(k + r, l, q)* fd_coeff_x_h(r, k)
191
- dw_dy(k, l, q) = dw_dy(k, l, q) &
192
- + q_prim_vf(momxe)%sf(k, l + r, q)* fd_coeff_y_h(r, l)
193
- dw_dz(k, l, q) = dw_dz(k, l, q) &
194
- + q_prim_vf(momxe)%sf(k, l, q + r)* fd_coeff_z_h(r, q)
195
- end do
129
+ du_dz(k, l, q) = &
130
+ (q_prim_vf(momxb)%sf(k, l, q - 2 ) &
131
+ - 8._wp * q_prim_vf(momxb)%sf(k, l, q - 1 ) &
132
+ + 8._wp * q_prim_vf(momxb)%sf(k, l, q + 1 ) &
133
+ - q_prim_vf(momxb)%sf(k, l, q + 2 )) &
134
+ / (12._wp * dz(q))
135
+ dv_dz(k, l, q) = &
136
+ (q_prim_vf(momxb + 1 )%sf(k, l, q - 2 ) &
137
+ - 8._wp * q_prim_vf(momxb + 1 )%sf(k, l, q - 1 ) &
138
+ + 8._wp * q_prim_vf(momxb + 1 )%sf(k, l, q + 1 ) &
139
+ - q_prim_vf(momxb + 1 )%sf(k, l, q + 2 )) &
140
+ / (12._wp * dz(q))
141
+ dw_dx(k, l, q) = &
142
+ (q_prim_vf(momxe)%sf(k - 2 , l, q) &
143
+ - 8._wp * q_prim_vf(momxe)%sf(k - 1 , l, q) &
144
+ + 8._wp * q_prim_vf(momxe)%sf(k + 1 , l, q) &
145
+ - q_prim_vf(momxe)%sf(k + 2 , l, q)) &
146
+ / (12._wp * dx(k))
147
+ dw_dy(k, l, q) = &
148
+ (q_prim_vf(momxe)%sf(k, l - 2 , q) &
149
+ - 8._wp * q_prim_vf(momxe)%sf(k, l - 1 , q) &
150
+ + 8._wp * q_prim_vf(momxe)%sf(k, l + 1 , q) &
151
+ - q_prim_vf(momxe)%sf(k, l + 2 , q)) &
152
+ / (12._wp * dy(l))
153
+ dw_dz(k, l, q) = &
154
+ (q_prim_vf(momxe)%sf(k, l, q - 2 ) &
155
+ - 8._wp * q_prim_vf(momxe)%sf(k, l, q - 1 ) &
156
+ + 8._wp * q_prim_vf(momxe)%sf(k, l, q + 1 ) &
157
+ - q_prim_vf(momxe)%sf(k, l, q + 2 )) &
158
+ / (12._wp * dz(q))
196
159
end do
197
160
end do
198
161
end do
199
- !$acc end parallel loop
200
162
end if
201
163
end if
202
164
@@ -213,7 +175,7 @@ contains
213
175
G_K_field(k, l, q) = G_K
214
176
215
177
!TODO: take this out if not needed
216
- if (G_K < verysmall ) then
178
+ if (G_K < 1000 ) then
217
179
G_K_field(k, l, q) = 0
218
180
end if
219
181
end do
@@ -338,21 +300,4 @@ contains
338
300
339
301
end subroutine s_compute_hypoelastic_rhs
340
302
341
- subroutine s_finalize_hypoelastic_module () ! --------------------
342
-
343
- @:DEALLOCATE(Gs)
344
- @:DEALLOCATE(rho_K_field, G_K_field)
345
- @:DEALLOCATE(du_dx)
346
- @:DEALLOCATE(fd_coeff_x_h)
347
- if (n > 0 ) then
348
- @:DEALLOCATE(du_dy,dv_dx,dv_dy)
349
- @:DEALLOCATE(fd_coeff_y_h)
350
- if (p > 0 ) then
351
- @:DEALLOCATE(du_dz, dv_dz, dw_dx, dw_dy, dw_dz)
352
- @:DEALLOCATE(fd_coeff_z_h)
353
- end if
354
- end if
355
-
356
- end subroutine s_finalize_hypoelastic_module
357
-
358
303
end module m_hypoelastic
0 commit comments