33module device_ramp_mapping
34 use utils,
only: neko_error
35 use num_types,
only: rp, c_rp
36 use,
intrinsic :: iso_c_binding, only: c_ptr, c_int
40 public :: device_convex_up_ramp_mapping_apply, &
41 device_convex_up_ramp_mapping_apply_backward, &
42 device_convex_down_ramp_mapping_apply, &
43 device_convex_down_ramp_mapping_apply_backward
48 subroutine hip_convex_down_ramp_mapping_apply(f_min, f_max, q, &
50 bind(c, name =
'hip_convex_down_RAMP_mapping_apply')
51 import c_rp, c_ptr, c_int
55 type(c_ptr),
value :: X_out_d
56 type(c_ptr),
value :: X_in_d
58 end subroutine hip_convex_down_ramp_mapping_apply
62 subroutine hip_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
63 sense_out_d, sens_in_d, X_in_d, n) &
64 bind(c, name =
'hip_convex_down_RAMP_mapping_apply_backward')
65 import c_rp, c_ptr, c_int
69 type(c_ptr),
value :: sense_out_d
70 type(c_ptr),
value :: sens_in_d
71 type(c_ptr),
value :: X_in_d
73 end subroutine hip_convex_down_ramp_mapping_apply_backward
77 subroutine hip_convex_up_ramp_mapping_apply(f_min, f_max, q, &
79 bind(c, name =
'hip_convex_up_RAMP_mapping_apply')
80 import c_rp, c_ptr, c_int
84 type(c_ptr),
value :: X_out_d
85 type(c_ptr),
value :: X_in_d
87 end subroutine hip_convex_up_ramp_mapping_apply
91 subroutine hip_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
92 sense_out_d, sens_in_d, X_in_d, n) &
93 bind(c, name =
'hip_convex_up_RAMP_mapping_apply_backward')
94 import c_rp, c_ptr, c_int
98 type(c_ptr),
value :: sense_out_d
99 type(c_ptr),
value :: sens_in_d
100 type(c_ptr),
value :: X_in_d
102 end subroutine hip_convex_up_ramp_mapping_apply_backward
108 subroutine cuda_convex_down_ramp_mapping_apply(f_min, f_max, q, &
109 X_out_d, X_in_d, n) &
110 bind(c, name =
'cuda_convex_down_RAMP_mapping_apply')
111 import c_rp, c_ptr, c_int
115 type(c_ptr),
value :: X_out_d
116 type(c_ptr),
value :: X_in_d
118 end subroutine cuda_convex_down_ramp_mapping_apply
122 subroutine cuda_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
123 sense_out_d, sens_in_d, X_in_d, n) &
124 bind(c, name =
'cuda_convex_down_RAMP_mapping_apply_backward')
125 import c_rp, c_ptr, c_int
129 type(c_ptr),
value :: sense_out_d
130 type(c_ptr),
value :: sens_in_d
131 type(c_ptr),
value :: X_in_d
133 end subroutine cuda_convex_down_ramp_mapping_apply_backward
137 subroutine cuda_convex_up_ramp_mapping_apply(f_min, f_max, q, &
138 X_out_d, X_in_d, n) &
139 bind(c, name =
'cuda_convex_up_RAMP_mapping_apply')
140 import c_rp, c_ptr, c_int
144 type(c_ptr),
value :: X_out_d
145 type(c_ptr),
value :: X_in_d
147 end subroutine cuda_convex_up_ramp_mapping_apply
151 subroutine cuda_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
152 sense_out_d, sens_in_d, X_in_d, n) &
153 bind(c, name =
'cuda_convex_up_RAMP_mapping_apply_backward')
154 import c_rp, c_ptr, c_int
158 type(c_ptr),
value :: sense_out_d
159 type(c_ptr),
value :: sens_in_d
160 type(c_ptr),
value :: X_in_d
162 end subroutine cuda_convex_up_ramp_mapping_apply_backward
171 subroutine device_convex_down_ramp_mapping_apply(f_min, f_max, q, &
173 real(kind=rp),
intent(in) :: f_min
174 real(kind=rp),
intent(in) :: f_max
175 real(kind=rp),
intent(in) :: q
176 type(c_ptr) :: X_out_d
177 type(c_ptr) :: X_in_d
180 call hip_convex_down_ramp_mapping_apply(f_min, f_max, q, &
183 call cuda_convex_down_ramp_mapping_apply(f_min, f_max, q, &
186 call neko_error(
'No device backend configured')
188 end subroutine device_convex_down_ramp_mapping_apply
190 subroutine device_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
191 sense_out_d, sens_in_d, X_in_d, n)
192 real(kind=rp),
intent(in) :: f_min
193 real(kind=rp),
intent(in) :: f_max
194 real(kind=rp),
intent(in) :: q
195 type(c_ptr) :: sense_out_d
196 type(c_ptr) :: sens_in_d
197 type(c_ptr) :: X_in_d
200 call hip_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
201 sense_out_d, sens_in_d, x_in_d, n)
203 call cuda_convex_down_ramp_mapping_apply_backward(f_min, f_max, q, &
204 sense_out_d, sens_in_d, x_in_d, n)
206 call neko_error(
'No device backend configured')
208 end subroutine device_convex_down_ramp_mapping_apply_backward
210 subroutine device_convex_up_ramp_mapping_apply(f_min, f_max, q, &
212 real(kind=rp),
intent(in) :: f_min
213 real(kind=rp),
intent(in) :: f_max
214 real(kind=rp),
intent(in) :: q
215 type(c_ptr) :: X_out_d
216 type(c_ptr) :: X_in_d
219 call hip_convex_up_ramp_mapping_apply(f_min, f_max, q, &
222 call cuda_convex_up_ramp_mapping_apply(f_min, f_max, q, &
225 call neko_error(
'No device backend configured')
227 end subroutine device_convex_up_ramp_mapping_apply
229 subroutine device_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
230 sense_out_d, sens_in_d, X_in_d, n)
231 real(kind=rp),
intent(in) :: f_min
232 real(kind=rp),
intent(in) :: f_max
233 real(kind=rp),
intent(in) :: q
234 type(c_ptr) :: sense_out_d
235 type(c_ptr) :: sens_in_d
236 type(c_ptr) :: X_in_d
239 call hip_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
240 sense_out_d, sens_in_d, x_in_d, n)
242 call cuda_convex_up_ramp_mapping_apply_backward(f_min, f_max, q, &
243 sense_out_d, sens_in_d, x_in_d, n)
245 call neko_error(
'No device backend configured')
247 end subroutine device_convex_up_ramp_mapping_apply_backward
248end module device_ramp_mapping