39 use,
intrinsic :: iso_c_binding, only : c_int, c_ptr, c_null_ptr
47 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
48 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
49 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
50 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
51 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
52 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
53 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
54 periodic_len1, periodic_len2, periodic_len3, strm) &
55 bind(c, name =
'hip_lpt_periodic_bc_wrap_translational')
56 use,
intrinsic :: iso_c_binding
59 integer(c_int) :: n, n_periodic_dirs
60 real(c_rp) :: periodic_dir_x1, periodic_dir_y1, periodic_dir_z1
61 real(c_rp) :: periodic_dir_x2, periodic_dir_y2, periodic_dir_z2
62 real(c_rp) :: periodic_dir_x3, periodic_dir_y3, periodic_dir_z3
63 real(c_rp) :: periodic_min1, periodic_min2, periodic_min3
64 real(c_rp) :: periodic_max1, periodic_max2, periodic_max3
65 real(c_rp) :: periodic_shift_x1, periodic_shift_y1, periodic_shift_z1
66 real(c_rp) :: periodic_shift_x2, periodic_shift_y2, periodic_shift_z2
67 real(c_rp) :: periodic_shift_x3, periodic_shift_y3, periodic_shift_z3
68 real(c_rp) :: periodic_len1, periodic_len2, periodic_len3
69 type(c_ptr),
value :: x, y, z, strm
74 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
75 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
76 acc_ylaglag, acc_zlaglag, strm) &
77 bind(c, name =
'hip_lpt_periodic_bc_wrap_rotational')
78 use,
intrinsic :: iso_c_binding
82 real(c_rp) :: theta_min, theta_max, theta_len
83 type(c_ptr),
value :: x, y, z, u, v, w, u_lag, v_lag, w_lag
84 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
85 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
86 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag, strm
93 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
94 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
95 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
96 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
97 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
98 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
99 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
100 periodic_len1, periodic_len2, periodic_len3, strm) &
101 bind(c, name =
'cuda_lpt_periodic_bc_wrap_translational')
102 use,
intrinsic :: iso_c_binding
105 integer(c_int) :: n, n_periodic_dirs
106 real(c_rp) :: periodic_dir_x1, periodic_dir_y1, periodic_dir_z1
107 real(c_rp) :: periodic_dir_x2, periodic_dir_y2, periodic_dir_z2
108 real(c_rp) :: periodic_dir_x3, periodic_dir_y3, periodic_dir_z3
109 real(c_rp) :: periodic_min1, periodic_min2, periodic_min3
110 real(c_rp) :: periodic_max1, periodic_max2, periodic_max3
111 real(c_rp) :: periodic_shift_x1, periodic_shift_y1, periodic_shift_z1
112 real(c_rp) :: periodic_shift_x2, periodic_shift_y2, periodic_shift_z2
113 real(c_rp) :: periodic_shift_x3, periodic_shift_y3, periodic_shift_z3
114 real(c_rp) :: periodic_len1, periodic_len2, periodic_len3
115 type(c_ptr),
value :: x, y, z, strm
120 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
121 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
122 acc_ylaglag, acc_zlaglag, strm) &
123 bind(c, name =
'cuda_lpt_periodic_bc_wrap_rotational')
124 use,
intrinsic :: iso_c_binding
128 real(c_rp) :: theta_min, theta_max, theta_len
129 type(c_ptr),
value :: x, y, z, u, v, w, u_lag, v_lag, w_lag
130 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
131 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
132 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag, strm
139 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
140 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
141 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
142 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
143 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
144 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
145 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
146 periodic_len1, periodic_len2, periodic_len3, strm) &
147 bind(c, name =
'opencl_lpt_periodic_bc_wrap_translational')
148 use,
intrinsic :: iso_c_binding
151 integer(c_int) :: n, n_periodic_dirs
152 real(c_rp) :: periodic_dir_x1, periodic_dir_y1, periodic_dir_z1
153 real(c_rp) :: periodic_dir_x2, periodic_dir_y2, periodic_dir_z2
154 real(c_rp) :: periodic_dir_x3, periodic_dir_y3, periodic_dir_z3
155 real(c_rp) :: periodic_min1, periodic_min2, periodic_min3
156 real(c_rp) :: periodic_max1, periodic_max2, periodic_max3
157 real(c_rp) :: periodic_shift_x1, periodic_shift_y1, periodic_shift_z1
158 real(c_rp) :: periodic_shift_x2, periodic_shift_y2, periodic_shift_z2
159 real(c_rp) :: periodic_shift_x3, periodic_shift_y3, periodic_shift_z3
160 real(c_rp) :: periodic_len1, periodic_len2, periodic_len3
161 type(c_ptr),
value :: x, y, z, strm
166 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
167 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
168 acc_ylaglag, acc_zlaglag, strm) &
169 bind(c, name =
'opencl_lpt_periodic_bc_wrap_rotational')
170 use,
intrinsic :: iso_c_binding
174 real(c_rp) :: theta_min, theta_max, theta_len
175 type(c_ptr),
value :: x, y, z, u, v, w, u_lag, v_lag, w_lag
176 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
177 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
178 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag, strm
184 subroutine metal_lpt_periodic_bc_wrap_translational(x, y, z, n, &
185 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
186 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
187 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
188 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
189 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
190 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
191 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
192 periodic_len1, periodic_len2, periodic_len3, strm) &
193 bind(c, name =
'metal_lpt_periodic_bc_wrap_translational')
194 use,
intrinsic :: iso_c_binding
197 integer(c_int) :: n, n_periodic_dirs
198 real(c_rp) :: periodic_dir_x1, periodic_dir_y1, periodic_dir_z1
199 real(c_rp) :: periodic_dir_x2, periodic_dir_y2, periodic_dir_z2
200 real(c_rp) :: periodic_dir_x3, periodic_dir_y3, periodic_dir_z3
201 real(c_rp) :: periodic_min1, periodic_min2, periodic_min3
202 real(c_rp) :: periodic_max1, periodic_max2, periodic_max3
203 real(c_rp) :: periodic_shift_x1, periodic_shift_y1, periodic_shift_z1
204 real(c_rp) :: periodic_shift_x2, periodic_shift_y2, periodic_shift_z2
205 real(c_rp) :: periodic_shift_x3, periodic_shift_y3, periodic_shift_z3
206 real(c_rp) :: periodic_len1, periodic_len2, periodic_len3
207 type(c_ptr),
value :: x, y, z, strm
208 end subroutine metal_lpt_periodic_bc_wrap_translational
211 subroutine metal_lpt_periodic_bc_wrap_rotational(x, y, z, n, theta_min, &
212 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
213 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
214 acc_ylaglag, acc_zlaglag, strm) &
215 bind(c, name =
'metal_lpt_periodic_bc_wrap_rotational')
216 use,
intrinsic :: iso_c_binding
220 real(c_rp) :: theta_min, theta_max, theta_len
221 type(c_ptr),
value :: x, y, z, u, v, w, u_lag, v_lag, w_lag
222 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
223 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
224 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag, strm
225 end subroutine metal_lpt_periodic_bc_wrap_rotational
241 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
242 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
243 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
244 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
245 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
246 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
247 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
248 periodic_len1, periodic_len2, periodic_len3, strm)
249 type(
vector_t),
intent(inout) :: x, y, z
250 integer,
intent(in) :: n
251 integer,
intent(in) :: n_periodic_dirs
252 real(kind=rp),
intent(in) :: periodic_dir_x1, periodic_dir_y1
253 real(kind=rp),
intent(in) :: periodic_dir_z1, periodic_dir_x2
254 real(kind=rp),
intent(in) :: periodic_dir_y2, periodic_dir_z2
255 real(kind=rp),
intent(in) :: periodic_dir_x3, periodic_dir_y3
256 real(kind=rp),
intent(in) :: periodic_dir_z3
257 real(kind=rp),
intent(in) :: periodic_min1, periodic_min2, periodic_min3
258 real(kind=rp),
intent(in) :: periodic_max1, periodic_max2, periodic_max3
259 real(kind=rp),
intent(in) :: periodic_shift_x1, periodic_shift_y1
260 real(kind=rp),
intent(in) :: periodic_shift_z1, periodic_shift_x2
261 real(kind=rp),
intent(in) :: periodic_shift_y2, periodic_shift_z2
262 real(kind=rp),
intent(in) :: periodic_shift_x3, periodic_shift_y3
263 real(kind=rp),
intent(in) :: periodic_shift_z3
264 real(kind=rp),
intent(in) :: periodic_len1, periodic_len2, periodic_len3
265 type(c_ptr),
optional :: strm
268 if (n .lt. 1 .or. n_periodic_dirs .lt. 1)
return
270 if (
present(strm)) strm_ = strm
274 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
275 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
276 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
277 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
278 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
279 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
280 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
281 periodic_len1, periodic_len2, periodic_len3, strm_)
284 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
285 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
286 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
287 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
288 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
289 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
290 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
291 periodic_len1, periodic_len2, periodic_len3, strm_)
294 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
295 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
296 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
297 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
298 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
299 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
300 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
301 periodic_len1, periodic_len2, periodic_len3, strm_)
303 call metal_lpt_periodic_bc_wrap_translational(x%x_d, y%x_d, z%x_d, n, &
304 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
305 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
306 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
307 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
308 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
309 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
310 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
311 periodic_len1, periodic_len2, periodic_len3, strm_)
313 call neko_error(
'No device backend configured')
326 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
327 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
328 acc_ylaglag, acc_zlaglag, strm)
329 type(
vector_t),
intent(inout) :: x, y, z
330 integer,
intent(in) :: n
331 real(kind=rp),
intent(in) :: theta_min
332 real(kind=rp),
intent(in) :: theta_max
333 real(kind=rp),
intent(in) :: theta_len
334 type(
vector_t),
intent(inout),
optional :: u, v, w
335 type(
vector_t),
intent(inout),
optional :: u_lag, v_lag, w_lag
336 type(
vector_t),
intent(inout),
optional :: u_laglag, v_laglag, w_laglag
337 type(
vector_t),
intent(inout),
optional :: acc_xlag, acc_ylag, acc_zlag
338 type(
vector_t),
intent(inout),
optional :: acc_xlaglag
339 type(
vector_t),
intent(inout),
optional :: acc_ylaglag
340 type(
vector_t),
intent(inout),
optional :: acc_zlaglag
341 type(c_ptr),
optional :: strm
343 type(c_ptr) :: u_d, v_d, w_d
344 type(c_ptr) :: u_lag_d, v_lag_d, w_lag_d
345 type(c_ptr) :: u_laglag_d, v_laglag_d, w_laglag_d
346 type(c_ptr) :: acc_xlag_d, acc_ylag_d, acc_zlag_d
347 type(c_ptr) :: acc_xlaglag_d, acc_ylaglag_d, acc_zlaglag_d
351 if (
present(strm)) strm_ = strm
359 u_laglag_d = c_null_ptr
360 v_laglag_d = c_null_ptr
361 w_laglag_d = c_null_ptr
362 acc_xlag_d = c_null_ptr
363 acc_ylag_d = c_null_ptr
364 acc_zlag_d = c_null_ptr
365 acc_xlaglag_d = c_null_ptr
366 acc_ylaglag_d = c_null_ptr
367 acc_zlaglag_d = c_null_ptr
369 if (
present(u)) u_d = u%x_d
370 if (
present(v)) v_d = v%x_d
371 if (
present(w)) w_d = w%x_d
372 if (
present(u_lag)) u_lag_d = u_lag%x_d
373 if (
present(v_lag)) v_lag_d = v_lag%x_d
374 if (
present(w_lag)) w_lag_d = w_lag%x_d
375 if (
present(u_laglag)) u_laglag_d = u_laglag%x_d
376 if (
present(v_laglag)) v_laglag_d = v_laglag%x_d
377 if (
present(w_laglag)) w_laglag_d = w_laglag%x_d
378 if (
present(acc_xlag)) acc_xlag_d = acc_xlag%x_d
379 if (
present(acc_ylag)) acc_ylag_d = acc_ylag%x_d
380 if (
present(acc_zlag)) acc_zlag_d = acc_zlag%x_d
381 if (
present(acc_xlaglag)) acc_xlaglag_d = acc_xlaglag%x_d
382 if (
present(acc_ylaglag)) acc_ylaglag_d = acc_ylaglag%x_d
383 if (
present(acc_zlaglag)) acc_zlaglag_d = acc_zlaglag%x_d
387 theta_min, theta_max, theta_len, u_d, v_d, w_d, u_lag_d, v_lag_d, &
388 w_lag_d, u_laglag_d, v_laglag_d, w_laglag_d, acc_xlag_d, &
389 acc_ylag_d, acc_zlag_d, acc_xlaglag_d, acc_ylaglag_d, &
390 acc_zlaglag_d, strm_)
393 theta_min, theta_max, theta_len, u_d, v_d, w_d, u_lag_d, v_lag_d, &
394 w_lag_d, u_laglag_d, v_laglag_d, w_laglag_d, acc_xlag_d, &
395 acc_ylag_d, acc_zlag_d, acc_xlaglag_d, acc_ylaglag_d, &
396 acc_zlaglag_d, strm_)
399 theta_min, theta_max, theta_len, u_d, v_d, w_d, u_lag_d, v_lag_d, &
400 w_lag_d, u_laglag_d, v_laglag_d, w_laglag_d, acc_xlag_d, &
401 acc_ylag_d, acc_zlag_d, acc_xlaglag_d, acc_ylaglag_d, &
402 acc_zlaglag_d, strm_)
404 call metal_lpt_periodic_bc_wrap_rotational(x%x_d, y%x_d, z%x_d, n, &
405 theta_min, theta_max, theta_len, u_d, v_d, w_d, u_lag_d, v_lag_d, &
406 w_lag_d, u_laglag_d, v_laglag_d, w_laglag_d, acc_xlag_d, &
407 acc_ylag_d, acc_zlag_d, acc_xlaglag_d, acc_ylaglag_d, &
408 acc_zlaglag_d, strm_)
410 call neko_error(
'No device backend configured')
HIP kernel entry point for rotational periodic wrapping.
HIP kernel entry point for translational periodic wrapping.
void opencl_lpt_periodic_bc_wrap_translational(void *x, void *y, void *z, int *n, int *n_periodic_dirs, real *periodic_dir_x1, real *periodic_dir_y1, real *periodic_dir_z1, real *periodic_dir_x2, real *periodic_dir_y2, real *periodic_dir_z2, real *periodic_dir_x3, real *periodic_dir_y3, real *periodic_dir_z3, real *periodic_min1, real *periodic_min2, real *periodic_min3, real *periodic_max1, real *periodic_max2, real *periodic_max3, real *periodic_shift_x1, real *periodic_shift_y1, real *periodic_shift_z1, real *periodic_shift_x2, real *periodic_shift_y2, real *periodic_shift_z2, real *periodic_shift_x3, real *periodic_shift_y3, real *periodic_shift_z3, real *periodic_len1, real *periodic_len2, real *periodic_len3, void *strm)
void opencl_lpt_periodic_bc_wrap_rotational(void *x, void *y, void *z, int *n, real *theta_min, real *theta_max, real *theta_len, void *u, void *v, void *w, void *u_lag, void *v_lag, void *w_lag, void *u_laglag, void *v_laglag, void *w_laglag, void *acc_xlag, void *acc_ylag, void *acc_zlag, void *acc_xlaglag, void *acc_ylaglag, void *acc_zlaglag, void *strm)
void cuda_lpt_periodic_bc_wrap_rotational(void *x, void *y, void *z, int *n, real *theta_min, real *theta_max, real *theta_len, void *u, void *v, void *w, void *u_lag, void *v_lag, void *w_lag, void *u_laglag, void *v_laglag, void *w_laglag, void *acc_xlag, void *acc_ylag, void *acc_zlag, void *acc_xlaglag, void *acc_ylaglag, void *acc_zlaglag, cudaStream_t strm)
void cuda_lpt_periodic_bc_wrap_translational(void *x, void *y, void *z, int *n, int *n_periodic_dirs, real *periodic_dir_x1, real *periodic_dir_y1, real *periodic_dir_z1, real *periodic_dir_x2, real *periodic_dir_y2, real *periodic_dir_z2, real *periodic_dir_x3, real *periodic_dir_y3, real *periodic_dir_z3, real *periodic_min1, real *periodic_min2, real *periodic_min3, real *periodic_max1, real *periodic_max2, real *periodic_max3, real *periodic_shift_x1, real *periodic_shift_y1, real *periodic_shift_z1, real *periodic_shift_x2, real *periodic_shift_y2, real *periodic_shift_z2, real *periodic_shift_x3, real *periodic_shift_y3, real *periodic_shift_z3, real *periodic_len1, real *periodic_len2, real *periodic_len3, cudaStream_t strm)
Device abstraction, common interface for various accelerators.
type(c_ptr), bind(C), public glb_cmd_queue
Global command queue.
Device dispatch for LPT periodic boundary-condition wrapping.
subroutine, public lpt_periodic_bc_wrap_rotational_device(x, y, z, n, theta_min, theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, acc_ylaglag, acc_zlaglag, strm)
Launch device kernel for rotational periodic wrapping.
subroutine, public lpt_periodic_bc_wrap_translational_device(x, y, z, n, n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, periodic_min3, periodic_max1, periodic_max2, periodic_max3, periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, periodic_len1, periodic_len2, periodic_len3, strm)
Launch device kernel for translational periodic wrapping.
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.