@@ -13,14 +13,13 @@ module m_hypoelastic
1313
1414 use m_global_parameters !< Definitions of the global parameters
1515
16- use m_finite_differences
17- use m_helper
16+ use m_mpi_proxy !< Message passing interface (MPI) module proxy
17+
1818 ! ==========================================================================
1919
2020 implicit none
2121
2222 private; public :: s_initialize_hypoelastic_module, &
23- s_finalize_hypoelastic_module, &
2423 s_compute_hypoelastic_rhs
2524
2625 real (wp), allocatable, dimension (:) :: Gs
@@ -34,16 +33,11 @@ module m_hypoelastic
3433 real (wp), allocatable, dimension (:, :, :) :: rho_K_field, G_K_field
3534 !$acc declare create(rho_K_field, G_K_field)
3635
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-
4236contains
4337
4438 subroutine s_initialize_hypoelastic_module
4539
46- integer :: i, k, r
40+ integer :: i
4741
4842 @:ALLOCATE(Gs(1 :num_fluids))
4943 @:ALLOCATE(rho_K_field(0 :m,0 :n,0 :p), G_K_field(0 :m,0 :n,0 :p))
@@ -61,29 +55,6 @@ contains
6155 end do
6256 !$acc update device(Gs)
6357
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-
8758 end subroutine s_initialize_hypoelastic_module
8859
8960 !> The purpose of this procedure is to compute the source terms
@@ -99,7 +70,7 @@ contains
9970
10071 real (wp) :: rho_K, G_K
10172
102- integer :: i, k, l, q, r !< Loop variables
73+ integer :: i, k, l, q !< Loop variables
10374 integer :: ndirs !< Number of coordinate directions
10475
10576 ndirs = 1 ; if (n > 0 ) ndirs = 2 ; if (p > 0 ) ndirs = 3
@@ -112,91 +83,82 @@ contains
11283 do q = 0 , p
11384 do l = 0 , n
11485 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))
11692 end do
11793 end do
11894 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
13595
13696 if (ndirs > 1 ) then
13797 !$acc parallel loop collapse(3 ) gang vector default(present)
13898 do q = 0 , p
13999 do l = 0 , n
140100 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))
142119 end do
143120 end do
144121 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
164122
165123 ! 3D
166124 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-
179125 !$acc parallel loop collapse(3 ) gang vector default(present)
180126 do q = 0 , p
181127 do l = 0 , n
182128 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))
196159 end do
197160 end do
198161 end do
199- !$acc end parallel loop
200162 end if
201163 end if
202164
@@ -213,7 +175,7 @@ contains
213175 G_K_field(k, l, q) = G_K
214176
215177 !TODO: take this out if not needed
216- if (G_K < verysmall ) then
178+ if (G_K < 1000 ) then
217179 G_K_field(k, l, q) = 0
218180 end if
219181 end do
@@ -338,21 +300,4 @@ contains
338300
339301 end subroutine s_compute_hypoelastic_rhs
340302
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-
358303end module m_hypoelastic
0 commit comments