35module device_ramp_mapping
36 use utils,
only: neko_error
37 use num_types,
only: rp, c_rp
38 use,
intrinsic :: iso_c_binding, only: c_ptr, c_int
42 public :: device_convex_up_ramp_mapping_apply, &
43 device_convex_up_ramp_mapping_apply_backward, &
44 device_convex_down_ramp_mapping_apply, &
45 device_convex_down_ramp_mapping_apply_backward
50 subroutine hip_convex_down_ramp_mapping_apply(f_min, f_max, q, &
52 bind(c, name =
'hip_convex_down_RAMP_mapping_apply')
53 import c_rp, c_ptr, c_int
57 type(c_ptr),
value :: X_out_d
58 type(c_ptr),
value :: X_in_d
60 end subroutine hip_convex_down_ramp_mapping_apply
64 subroutine hip_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
65 sense_out_d, sens_in_d, X_in_d, n) &
66 bind(c, name =
'hip_convex_down_RAMP_mapping_apply_backward')
67 import c_rp, c_ptr, c_int
71 type(c_ptr),
value :: sense_out_d
72 type(c_ptr),
value :: sens_in_d
73 type(c_ptr),
value :: X_in_d
75 end subroutine hip_convex_down_ramp_mapping_apply_backward
79 subroutine hip_convex_up_ramp_mapping_apply(f_min, f_max, q, &
81 bind(c, name =
'hip_convex_up_RAMP_mapping_apply')
82 import c_rp, c_ptr, c_int
86 type(c_ptr),
value :: X_out_d
87 type(c_ptr),
value :: X_in_d
89 end subroutine hip_convex_up_ramp_mapping_apply
93 subroutine hip_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
94 sense_out_d, sens_in_d, X_in_d, n) &
95 bind(c, name =
'hip_convex_up_RAMP_mapping_apply_backward')
96 import c_rp, c_ptr, c_int
100 type(c_ptr),
value :: sense_out_d
101 type(c_ptr),
value :: sens_in_d
102 type(c_ptr),
value :: X_in_d
104 end subroutine hip_convex_up_ramp_mapping_apply_backward
110 subroutine cuda_convex_down_ramp_mapping_apply(f_min, f_max, q, &
111 X_out_d, X_in_d, n) &
112 bind(c, name =
'cuda_convex_down_RAMP_mapping_apply')
113 import c_rp, c_ptr, c_int
117 type(c_ptr),
value :: X_out_d
118 type(c_ptr),
value :: X_in_d
120 end subroutine cuda_convex_down_ramp_mapping_apply
124 subroutine cuda_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
125 sense_out_d, sens_in_d, X_in_d, n) &
126 bind(c, name =
'cuda_convex_down_RAMP_mapping_apply_backward')
127 import c_rp, c_ptr, c_int
131 type(c_ptr),
value :: sense_out_d
132 type(c_ptr),
value :: sens_in_d
133 type(c_ptr),
value :: X_in_d
135 end subroutine cuda_convex_down_ramp_mapping_apply_backward
139 subroutine cuda_convex_up_ramp_mapping_apply(f_min, f_max, q, &
140 X_out_d, X_in_d, n) &
141 bind(c, name =
'cuda_convex_up_RAMP_mapping_apply')
142 import c_rp, c_ptr, c_int
146 type(c_ptr),
value :: X_out_d
147 type(c_ptr),
value :: X_in_d
149 end subroutine cuda_convex_up_ramp_mapping_apply
153 subroutine cuda_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
154 sense_out_d, sens_in_d, X_in_d, n) &
155 bind(c, name =
'cuda_convex_up_RAMP_mapping_apply_backward')
156 import c_rp, c_ptr, c_int
160 type(c_ptr),
value :: sense_out_d
161 type(c_ptr),
value :: sens_in_d
162 type(c_ptr),
value :: X_in_d
164 end subroutine cuda_convex_up_ramp_mapping_apply_backward
173 subroutine device_convex_down_ramp_mapping_apply(f_min, f_max, q, &
175 real(kind=rp),
intent(in) :: f_min
176 real(kind=rp),
intent(in) :: f_max
177 real(kind=rp),
intent(in) :: q
178 type(c_ptr) :: X_out_d
179 type(c_ptr) :: X_in_d
182 call hip_convex_down_ramp_mapping_apply(f_min, f_max, q, &
185 call cuda_convex_down_ramp_mapping_apply(f_min, f_max, q, &
188 call neko_error(
'No device backend configured')
190 end subroutine device_convex_down_ramp_mapping_apply
192 subroutine device_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
193 sense_out_d, sens_in_d, X_in_d, n)
194 real(kind=rp),
intent(in) :: f_min
195 real(kind=rp),
intent(in) :: f_max
196 real(kind=rp),
intent(in) :: q
197 type(c_ptr) :: sense_out_d
198 type(c_ptr) :: sens_in_d
199 type(c_ptr) :: X_in_d
202 call hip_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
203 sense_out_d, sens_in_d, x_in_d, n)
205 call cuda_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
206 sense_out_d, sens_in_d, x_in_d, n)
208 call neko_error(
'No device backend configured')
210 end subroutine device_convex_down_ramp_mapping_apply_backward
212 subroutine device_convex_up_ramp_mapping_apply(f_min, f_max, q, &
214 real(kind=rp),
intent(in) :: f_min
215 real(kind=rp),
intent(in) :: f_max
216 real(kind=rp),
intent(in) :: q
217 type(c_ptr) :: X_out_d
218 type(c_ptr) :: X_in_d
221 call hip_convex_up_ramp_mapping_apply(f_min, f_max, q, &
224 call cuda_convex_up_ramp_mapping_apply(f_min, f_max, q, &
227 call neko_error(
'No device backend configured')
229 end subroutine device_convex_up_ramp_mapping_apply
231 subroutine device_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
232 sense_out_d, sens_in_d, X_in_d, n)
233 real(kind=rp),
intent(in) :: f_min
234 real(kind=rp),
intent(in) :: f_max
235 real(kind=rp),
intent(in) :: q
236 type(c_ptr) :: sense_out_d
237 type(c_ptr) :: sens_in_d
238 type(c_ptr) :: X_in_d
241 call hip_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
242 sense_out_d, sens_in_d, x_in_d, n)
244 call cuda_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
245 sense_out_d, sens_in_d, x_in_d, n)
247 call neko_error(
'No device backend configured')
249 end subroutine device_convex_up_ramp_mapping_apply_backward
250end module device_ramp_mapping