Neko  0.8.99
A portable framework for high-order spectral element flow simulations
prgm_lib.F90
Go to the documentation of this file.
1 
3  use opencl_intf
4  use utils, only : neko_error
5  use, intrinsic :: iso_c_binding, only : c_ptr, c_null_ptr
6  implicit none
7 
8 #ifdef HAVE_OPENCL
9 
11  type(c_ptr), bind(c) :: math_program = c_null_ptr
12 
14  type(c_ptr), bind(c) :: mathops_program = c_null_ptr
15 
17  type(c_ptr), bind(c) :: dirichlet_program = c_null_ptr
18 
20  type(c_ptr), bind(c) :: inflow_program = c_null_ptr
21 
23  type(c_ptr), bind(c) :: no_slip_wall_program = c_null_ptr
24 
26  type(c_ptr), bind(c) :: symmetry_program = c_null_ptr
27 
29  type(c_ptr), bind(c) :: facet_normal_program = c_null_ptr
30 
32  type(c_ptr), bind(c) :: inhom_dirichlet_program = c_null_ptr
33 
35  type(c_ptr), bind(c) :: dudxyz_program = c_null_ptr
36 
38  type(c_ptr), bind(c) :: cdtp_program = c_null_ptr
39 
41  type(c_ptr), bind(c) :: conv1_program = c_null_ptr
42 
44  type(c_ptr), bind(c) :: cfl_program = c_null_ptr
45 
47  type(c_ptr), bind(c) :: opgrad_program = c_null_ptr
48 
50  type(c_ptr), bind(c) :: gs_program = c_null_ptr
51 
53  type(c_ptr), bind(c) :: ax_helm_program = c_null_ptr
54 
56  type(c_ptr), bind(c) :: jacobi_program = c_null_ptr
57 
59  type(c_ptr), bind(c) :: rhs_maker_program = c_null_ptr
60 
62  type(c_ptr), bind(c) :: pnpn_res_program = c_null_ptr
63 
65  type(c_ptr), bind(c) :: fdm_program = c_null_ptr
66 
68  type(c_ptr), bind(c) :: tensor_program = c_null_ptr
69 
71  type(c_ptr), bind(c) :: schwarz_program = c_null_ptr
72 
74  type(c_ptr), bind(c) :: dong_program = c_null_ptr
75 
77  type(c_ptr), bind(c) :: coef_program = c_null_ptr
78 
80  type(c_ptr), bind(c) :: scalar_residual_program = c_null_ptr
81 
83  type(c_ptr), bind(c) :: lambda2_program = c_null_ptr
84 
85 contains
86 
88 
89  if (c_associated(math_program)) then
90  if(clreleaseprogram(math_program) .ne. cl_success) then
91  call neko_error('Failed to release program')
92  end if
93  math_program = c_null_ptr
94  end if
95 
96  if (c_associated(mathops_program)) then
97  if(clreleaseprogram(mathops_program) .ne. cl_success) then
98  call neko_error('Failed to release program')
99  end if
100  mathops_program = c_null_ptr
101  end if
102 
103  if (c_associated(dirichlet_program)) then
104  if(clreleaseprogram(dirichlet_program) .ne. cl_success) then
105  call neko_error('Failed to release program')
106  end if
107  dirichlet_program = c_null_ptr
108  end if
109 
110  if (c_associated(inflow_program)) then
111  if(clreleaseprogram(inflow_program) .ne. cl_success) then
112  call neko_error('Failed to release program')
113  end if
114  inflow_program = c_null_ptr
115  end if
116 
117  if (c_associated(no_slip_wall_program)) then
118  if(clreleaseprogram(no_slip_wall_program) .ne. cl_success) then
119  call neko_error('Failed to release program')
120  end if
121  no_slip_wall_program = c_null_ptr
122  end if
123 
124  if (c_associated(symmetry_program)) then
125  if(clreleaseprogram(symmetry_program) .ne. cl_success) then
126  call neko_error('Failed to release program')
127  end if
128  symmetry_program = c_null_ptr
129  end if
130 
131  if (c_associated(facet_normal_program)) then
132  if(clreleaseprogram(facet_normal_program) .ne. cl_success) then
133  call neko_error('Failed to release program')
134  end if
135  facet_normal_program = c_null_ptr
136  end if
137 
138  if (c_associated(inhom_dirichlet_program)) then
139  if(clreleaseprogram(inhom_dirichlet_program) .ne. cl_success) then
140  call neko_error('Failed to release program')
141  end if
142  inhom_dirichlet_program = c_null_ptr
143  end if
144 
145  if (c_associated(dudxyz_program)) then
146  if(clreleaseprogram(dudxyz_program) .ne. cl_success) then
147  call neko_error('Failed to release program')
148  end if
149  dudxyz_program = c_null_ptr
150  end if
151 
152  if (c_associated(cdtp_program)) then
153  if(clreleaseprogram(cdtp_program) .ne. cl_success) then
154  call neko_error('Failed to release program')
155  end if
156  cdtp_program = c_null_ptr
157  end if
158 
159  if (c_associated(conv1_program)) then
160  if(clreleaseprogram(conv1_program) .ne. cl_success) then
161  call neko_error('Failed to release program')
162  end if
163  conv1_program = c_null_ptr
164  end if
165 
166  if (c_associated(cfl_program)) then
167  if(clreleaseprogram(cfl_program) .ne. cl_success) then
168  call neko_error('Failed to release program')
169  end if
170  cfl_program = c_null_ptr
171  end if
172 
173  if (c_associated(opgrad_program)) then
174  if(clreleaseprogram(opgrad_program) .ne. cl_success) then
175  call neko_error('Failed to release program')
176  end if
177  opgrad_program = c_null_ptr
178  end if
179 
180  if (c_associated(gs_program)) then
181  if(clreleaseprogram(gs_program) .ne. cl_success) then
182  call neko_error('Failed to release program')
183  end if
184  gs_program = c_null_ptr
185  end if
186 
187  if (c_associated(ax_helm_program)) then
188  if(clreleaseprogram(ax_helm_program) .ne. cl_success) then
189  call neko_error('Failed to release program')
190  end if
191  ax_helm_program = c_null_ptr
192  end if
193 
194  if (c_associated(jacobi_program)) then
195  if(clreleaseprogram(jacobi_program) .ne. cl_success) then
196  call neko_error('Failed to release program')
197  end if
198  jacobi_program = c_null_ptr
199  end if
200 
201  if (c_associated(rhs_maker_program)) then
202  if(clreleaseprogram(rhs_maker_program) .ne. cl_success) then
203  call neko_error('Failed to release program')
204  end if
205  rhs_maker_program = c_null_ptr
206  end if
207 
208  if (c_associated(pnpn_res_program)) then
209  if(clreleaseprogram(pnpn_res_program) .ne. cl_success) then
210  call neko_error('Failed to release program')
211  end if
212  pnpn_res_program = c_null_ptr
213  end if
214 
215  if (c_associated(fdm_program)) then
216  if(clreleaseprogram(fdm_program) .ne. cl_success) then
217  call neko_error('Failed to release program')
218  end if
219  fdm_program = c_null_ptr
220  end if
221 
222  if (c_associated(tensor_program)) then
223  if(clreleaseprogram(tensor_program) .ne. cl_success) then
224  call neko_error('Failed to release program')
225  end if
226  tensor_program = c_null_ptr
227  end if
228 
229  if (c_associated(schwarz_program)) then
230  if(clreleaseprogram(schwarz_program) .ne. cl_success) then
231  call neko_error('Failed to release program')
232  end if
233  schwarz_program = c_null_ptr
234  end if
235 
236  if (c_associated(dong_program)) then
237  if(clreleaseprogram(dong_program) .ne. cl_success) then
238  call neko_error('Failed to release program')
239  end if
240  dong_program = c_null_ptr
241  end if
242 
243  if (c_associated(coef_program)) then
244  if(clreleaseprogram(coef_program) .ne. cl_success) then
245  call neko_error('Failed to release program')
246  end if
247  coef_program = c_null_ptr
248  end if
249 
250  if (c_associated(scalar_residual_program)) then
251  if(clreleaseprogram(scalar_residual_program) .ne. cl_success) then
252  call neko_error('Failed to release program')
253  end if
254  scalar_residual_program = c_null_ptr
255  end if
256 
257  if (c_associated(lambda2_program)) then
258  if(clreleaseprogram(lambda2_program) .ne. cl_success) then
259  call neko_error('Failed to release program')
260  end if
261  lambda2_program = c_null_ptr
262  end if
263 
264  end subroutine opencl_prgm_lib_release
265 
266 #endif
267 
268 end module opencl_prgm_lib
Fortran OpenCL interface.
Definition: opencl_intf.F90:34
OpenCL JIT program library.
Definition: prgm_lib.F90:2
type(c_ptr), bind(C) scalar_residual_program
Device scalar residual kernels.
Definition: prgm_lib.F90:80
type(c_ptr), bind(C) ax_helm_program
Device Ax helm kernels.
Definition: prgm_lib.F90:53
type(c_ptr), bind(C) symmetry_program
Device Symmetry kernels.
Definition: prgm_lib.F90:26
type(c_ptr), bind(C) cfl_program
Device CFL kernels.
Definition: prgm_lib.F90:44
type(c_ptr), bind(C) mathops_program
Device mathops kernels.
Definition: prgm_lib.F90:14
type(c_ptr), bind(C) no_slip_wall_program
Device No-slip wall kernels.
Definition: prgm_lib.F90:23
type(c_ptr), bind(C) lambda2_program
Device lambda2 kernels.
Definition: prgm_lib.F90:83
subroutine opencl_prgm_lib_release
Definition: prgm_lib.F90:88
type(c_ptr), bind(C) conv1_program
Device onvective kernels.
Definition: prgm_lib.F90:41
type(c_ptr), bind(C) jacobi_program
Device jacobi kernels.
Definition: prgm_lib.F90:56
type(c_ptr), bind(C) coef_program
Device coef kernels.
Definition: prgm_lib.F90:77
type(c_ptr), bind(C) gs_program
Device Gather-Scatter kernels.
Definition: prgm_lib.F90:50
type(c_ptr), bind(C) rhs_maker_program
Device rhs_maker kernels.
Definition: prgm_lib.F90:59
type(c_ptr), bind(C) dudxyz_program
Device Derivative kernels.
Definition: prgm_lib.F90:35
type(c_ptr), bind(C) cdtp_program
Device kernels.
Definition: prgm_lib.F90:38
type(c_ptr), bind(C) facet_normal_program
Device Facet normal kernels.
Definition: prgm_lib.F90:29
type(c_ptr), bind(C) schwarz_program
Device schwarz kernels.
Definition: prgm_lib.F90:71
type(c_ptr), bind(C) fdm_program
Device fdm kernels.
Definition: prgm_lib.F90:65
type(c_ptr), bind(C) dirichlet_program
Device Dirichlet kernels.
Definition: prgm_lib.F90:17
type(c_ptr), bind(C) inflow_program
Device Inflow kernels.
Definition: prgm_lib.F90:20
type(c_ptr), bind(C) tensor_program
Device tensor kernels.
Definition: prgm_lib.F90:68
type(c_ptr), bind(C) opgrad_program
Device Velocity gradient kernels.
Definition: prgm_lib.F90:47
type(c_ptr), bind(C) math_program
Device math kernels.
Definition: prgm_lib.F90:11
type(c_ptr), bind(C) inhom_dirichlet_program
Device Blasius profile kernel.
Definition: prgm_lib.F90:32
type(c_ptr), bind(C) pnpn_res_program
Device pnpn residual kernels.
Definition: prgm_lib.F90:62
type(c_ptr), bind(C) dong_program
Device dong kernels.
Definition: prgm_lib.F90:74
Utilities.
Definition: utils.f90:35