Line data Source code
1 : !{\src2tex{textfont=tt}}
2 : !!****f* m_abi_linalg/abi_xscal
3 : !! NAME
4 : !! abi_xscal
5 : !!
6 : !! FUNCTION
7 : !! abi_xscal is the generic function for BLAS-1 SCAL (x = alpha * x)
8 : !! with optional GPU dispatch.
9 : !!
10 : !! COPYRIGHT
11 : !! Copyright (C) 2001-2026 ABINIT group
12 : !! This file is distributed under the terms of the
13 : !! GNU General Public License, see ~abinit/COPYING
14 : !! or http://www.gnu.org/copyleft/gpl.txt .
15 : !!
16 : !! SOURCE
17 :
18 : !!***
19 :
20 : !----------------------------------------------------------------------
21 :
22 : !!****f* m_abi_linalg/abi_d2zscal
23 : !! NAME
24 : !! abi_d2zscal
25 : !!
26 : !! FUNCTION
27 : !! Real SCAL: x = alpha * x, with real(dp) alpha and real(dp) array.
28 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=1.
29 : !!
30 : !! INPUTS
31 : !!
32 : !! SOURCE
33 :
34 584452 : subroutine abi_d2zscal(n, alpha, x, incx, x_cplx, gpu_option)
35 :
36 : !Arguments ------------------------------------
37 : integer, intent(in) :: n
38 : complex(dpc), intent(in) :: alpha
39 : real(dp), target, intent(inout) :: x(*)
40 : integer, intent(in) :: incx
41 : !Optionals -----------------------------------
42 : integer, intent(in), optional :: x_cplx,gpu_option
43 :
44 : !Local variables-------------------------------
45 : integer :: cplx_,gpu_option_
46 :
47 : ! *********************************************************************
48 :
49 584452 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
50 584452 : cplx_=1 ; if(PRESENT(x_cplx)) cplx_ = x_cplx
51 :
52 : #if defined(DEBUG_VERBOSE) && defined(HAVE_OPENMP_OFFLOAD)
53 : if ( gpu_option_ == ABI_GPU_OPENMP ) then
54 : ABI_CHECK(xomp_target_is_present(c_loc(x)), "Array isn't mapped on GPU")
55 : end if
56 : #endif
57 :
58 584452 : if(gpu_option_/=ABI_GPU_DISABLED) then
59 0 : if(gpu_option_==ABI_GPU_OPENMP) then
60 : #ifdef HAVE_OPENMP_OFFLOAD
61 : !$OMP TARGET DATA USE_DEVICE_ADDR(x)
62 : call abi_gpu_xscal_cptr(cplx_, n, alpha, c_loc(x), incx)
63 : !$OMP END TARGET DATA
64 : #endif
65 : else
66 0 : call abi_gpu_xscal_cptr(cplx_, n, alpha, c_loc(x), incx)
67 : end if
68 : else
69 584452 : if(cplx_==1) then
70 584452 : call dscal(n, alpha, x, incx)
71 : else
72 0 : call zscal(n, alpha, x, incx)
73 : end if
74 : end if
75 :
76 584452 : end subroutine abi_d2zscal
77 : !!***
78 :
79 : !----------------------------------------------------------------------
80 :
81 : !!****f* m_abi_linalg/abi_d2zscal_3d
82 : !! NAME
83 : !! abi_d2zscal_3d
84 : !!
85 : !! FUNCTION
86 : !! Real SCAL: x = alpha * x, with real(dp) alpha and real(dp) array.
87 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=1.
88 : !!
89 : !! INPUTS
90 : !!
91 : !! SOURCE
92 :
93 0 : subroutine abi_d2zscal_3d(n, alpha, x, incx, x_cplx, gpu_option)
94 :
95 : !Arguments ------------------------------------
96 : integer, intent(in) :: n
97 : complex(dpc), intent(in) :: alpha
98 : real(dp), target, intent(inout) :: x(:,:,:)
99 : integer, intent(in) :: incx
100 : !Optionals -----------------------------------
101 : integer, intent(in), optional :: x_cplx,gpu_option
102 :
103 : !Local variables-------------------------------
104 : integer :: cplx_,gpu_option_
105 :
106 : ! *********************************************************************
107 :
108 0 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
109 0 : cplx_=1 ; if(PRESENT(x_cplx)) cplx_ = x_cplx
110 :
111 0 : call abi_d2zscal(n, alpha, x, incx, x_cplx=cplx_, gpu_option=gpu_option_)
112 :
113 0 : end subroutine abi_d2zscal_3d
114 : !!***
115 :
116 : !----------------------------------------------------------------------
117 :
118 : !!****f* m_abi_linalg/abi_d2zscal_4d
119 : !! NAME
120 : !! abi_d2zscal_4d
121 : !!
122 : !! FUNCTION
123 : !! Real SCAL: x = alpha * x, with real(dp) alpha and real(dp) array.
124 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=1.
125 : !!
126 : !! INPUTS
127 : !!
128 : !! SOURCE
129 :
130 0 : subroutine abi_d2zscal_4d(n, alpha, x, incx, x_cplx, gpu_option)
131 :
132 : !Arguments ------------------------------------
133 : integer, intent(in) :: n
134 : complex(dpc), intent(in) :: alpha
135 : real(dp), target, intent(inout) :: x(:,:,:,:)
136 : integer, intent(in) :: incx
137 : !Optionals -----------------------------------
138 : integer, intent(in), optional :: x_cplx,gpu_option
139 :
140 : !Local variables-------------------------------
141 : integer :: cplx_,gpu_option_
142 :
143 : ! *********************************************************************
144 :
145 0 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
146 0 : cplx_=1 ; if(PRESENT(x_cplx)) cplx_ = x_cplx
147 :
148 0 : call abi_d2zscal(n, alpha, x, incx, x_cplx=cplx_, gpu_option=gpu_option_)
149 :
150 0 : end subroutine abi_d2zscal_4d
151 : !!***
152 :
153 : !----------------------------------------------------------------------
154 :
155 : !!****f* m_abi_linalg/abi_d2zscal_5d
156 : !! NAME
157 : !! abi_d2zscal_5d
158 : !!
159 : !! FUNCTION
160 : !! Real SCAL: x = alpha * x, with real(dp) alpha and real(dp) array.
161 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=1.
162 : !!
163 : !! INPUTS
164 : !!
165 : !! SOURCE
166 :
167 0 : subroutine abi_d2zscal_5d(n, alpha, x, incx, x_cplx, gpu_option)
168 :
169 : !Arguments ------------------------------------
170 : integer, intent(in) :: n
171 : complex(dpc), intent(in) :: alpha
172 : real(dp), target, intent(inout) :: x(:,:,:,:,:)
173 : integer, intent(in) :: incx
174 : !Optionals -----------------------------------
175 : integer, intent(in), optional :: x_cplx,gpu_option
176 :
177 : !Local variables-------------------------------
178 : integer :: cplx_,gpu_option_
179 :
180 : ! *********************************************************************
181 :
182 0 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
183 0 : cplx_=1 ; if(PRESENT(x_cplx)) cplx_ = x_cplx
184 :
185 0 : call abi_d2zscal(n, alpha, x, incx, x_cplx=cplx_, gpu_option=gpu_option_)
186 :
187 0 : end subroutine abi_d2zscal_5d
188 : !!***
189 :
190 : !----------------------------------------------------------------------
191 :
192 : !!****f* m_abi_linalg/abi_d2zscal_7d
193 : !! NAME
194 : !! abi_d2zscal_7d
195 : !!
196 : !! FUNCTION
197 : !! Real SCAL: x = alpha * x, with real(dp) alpha and real(dp) array.
198 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=1.
199 : !!
200 : !! INPUTS
201 : !!
202 : !! SOURCE
203 :
204 0 : subroutine abi_d2zscal_7d(n, alpha, x, incx, x_cplx, gpu_option)
205 :
206 : !Arguments ------------------------------------
207 : integer, intent(in) :: n
208 : complex(dpc), intent(in) :: alpha
209 : real(dp), target, intent(inout) :: x(:,:,:,:,:,:,:)
210 : integer, intent(in) :: incx
211 : !Optionals -----------------------------------
212 : integer, intent(in), optional :: x_cplx,gpu_option
213 :
214 : !Local variables-------------------------------
215 : integer :: cplx_,gpu_option_
216 :
217 : ! *********************************************************************
218 :
219 0 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
220 0 : cplx_=1 ; if(PRESENT(x_cplx)) cplx_ = x_cplx
221 :
222 0 : call abi_d2zscal(n, alpha, x, incx, x_cplx=cplx_, gpu_option=gpu_option_)
223 :
224 0 : end subroutine abi_d2zscal_7d
225 : !!***
226 :
227 : !----------------------------------------------------------------------
228 :
229 : !!****f* m_abi_linalg/abi_dscal
230 : !! NAME
231 : !! abi_dscal
232 : !!
233 : !! FUNCTION
234 : !! Real SCAL: x = alpha * x, with real(dp) alpha and real(dp) array.
235 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=1.
236 : !!
237 : !! INPUTS
238 : !!
239 : !! SOURCE
240 :
241 0 : subroutine abi_dscal(n, alpha, x, incx, gpu_option)
242 :
243 : !Arguments ------------------------------------
244 : integer, intent(in) :: n
245 : real(dp), intent(in) :: alpha
246 : real(dp), target, intent(inout) :: x(*)
247 : integer, intent(in) :: incx
248 : !Optionals -----------------------------------
249 : integer, intent(in), optional :: gpu_option
250 :
251 : !Local variables-------------------------------
252 : integer :: gpu_option_
253 :
254 : ! *********************************************************************
255 :
256 0 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
257 :
258 0 : call abi_d2zscal(n, dcmplx(alpha, 0.0_dp), x, incx, x_cplx=1, gpu_option=gpu_option_)
259 :
260 0 : end subroutine abi_dscal
261 : !!***
262 :
263 : !----------------------------------------------------------------------
264 :
265 : !!****f* m_abi_linalg/abi_dscal_2d
266 : !! NAME
267 : !! abi_dscal_2d
268 : !!
269 : !! FUNCTION
270 : !! Real SCAL: x = alpha * x, with real(dp) alpha and real(dp) array.
271 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=1.
272 : !!
273 : !! INPUTS
274 : !!
275 : !! SOURCE
276 :
277 584452 : subroutine abi_dscal_2d(n, alpha, x, incx, gpu_option)
278 :
279 : !Arguments ------------------------------------
280 : integer, intent(in) :: n
281 : real(dp), intent(in) :: alpha
282 : real(dp), target, intent(inout) :: x(:,:)
283 : integer, intent(in) :: incx
284 : !Optionals -----------------------------------
285 : integer, intent(in), optional :: gpu_option
286 :
287 : !Local variables-------------------------------
288 : integer :: gpu_option_
289 :
290 : ! *********************************************************************
291 :
292 584452 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
293 :
294 584452 : call abi_d2zscal(n, dcmplx(alpha, 0.0_dp), x, incx, x_cplx=1, gpu_option=gpu_option_)
295 :
296 584452 : end subroutine abi_dscal_2d
297 : !!***
298 :
299 : !----------------------------------------------------------------------
300 :
301 : !!****f* m_abi_linalg/abi_zscal
302 : !! NAME
303 : !! abi_zscal
304 : !!
305 : !! FUNCTION
306 : !! Complex SCAL: x = alpha * x, with complex(dp) alpha and complex(dp) array.
307 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=2.
308 : !!
309 : !! INPUTS
310 : !!
311 : !! SOURCE
312 :
313 954109 : subroutine abi_zscal(n, alpha, x, incx, gpu_option)
314 :
315 : !Arguments ------------------------------------
316 : integer, intent(in) :: n
317 : complex(dp), intent(in) :: alpha
318 : complex(dp), target, intent(inout) :: x(*)
319 : integer, intent(in) :: incx
320 : !Optionals -----------------------------------
321 : integer, intent(in), optional :: gpu_option
322 :
323 : !Local variables-------------------------------
324 : integer :: gpu_option_
325 :
326 : ! *********************************************************************
327 :
328 954109 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
329 :
330 : #if defined(DEBUG_VERBOSE) && defined(HAVE_OPENMP_OFFLOAD)
331 : if ( gpu_option_ == ABI_GPU_OPENMP ) then
332 : ABI_CHECK(xomp_target_is_present(c_loc(x)), "Array isn't mapped on GPU")
333 : end if
334 : #endif
335 :
336 954109 : if(gpu_option_/=ABI_GPU_DISABLED) then
337 0 : if(gpu_option_==ABI_GPU_OPENMP) then
338 : #ifdef HAVE_OPENMP_OFFLOAD
339 : !$OMP TARGET DATA USE_DEVICE_ADDR(x) IF(gpu_option_==ABI_GPU_OPENMP)
340 : call abi_gpu_xscal_cptr(2, n, alpha, c_loc(x), incx)
341 : !$OMP END TARGET DATA
342 : #endif
343 : else
344 0 : call abi_gpu_xscal_cptr(2, n, alpha, c_loc(x), incx)
345 : end if
346 : else
347 954109 : call zscal(n, alpha, x, incx)
348 : end if
349 :
350 954109 : end subroutine abi_zscal
351 : !!***
352 :
353 : !----------------------------------------------------------------------
354 :
355 : !!****f* m_abi_linalg/abi_zscal_2d
356 : !! NAME
357 : !! abi_zscal
358 : !!
359 : !! FUNCTION
360 : !! Complex SCAL: x = alpha * x, with complex(dp) alpha and complex(dp) array.
361 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=2.
362 : !!
363 : !! INPUTS
364 : !!
365 : !! SOURCE
366 :
367 954109 : subroutine abi_zscal_2d(n, alpha, x, incx, gpu_option)
368 :
369 : !Arguments ------------------------------------
370 : integer, intent(in) :: n
371 : complex(dp), intent(in) :: alpha
372 : complex(dp), target, intent(inout) :: x(:,:)
373 : integer, intent(in) :: incx
374 : !Optionals -----------------------------------
375 : integer, intent(in), optional :: gpu_option
376 :
377 : !Local variables-------------------------------
378 : integer :: gpu_option_
379 :
380 : ! *********************************************************************
381 :
382 954109 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
383 :
384 954109 : call abi_zscal(n, alpha, x, incx, gpu_option=gpu_option_)
385 :
386 954109 : end subroutine abi_zscal_2d
387 : !!***
388 :
389 : !----------------------------------------------------------------------
390 :
391 : !!****f* m_abi_linalg/abi_zscal_3d
392 : !! NAME
393 : !! abi_zscal_3d
394 : !!
395 : !! FUNCTION
396 : !! Complex SCAL: x = alpha * x, with complex(dp) alpha and complex(dp) array.
397 : !! On GPU, calls abi_gpu_xscal_cptr with cplx=2.
398 : !!
399 : !! INPUTS
400 : !!
401 : !! SOURCE
402 :
403 0 : subroutine abi_zscal_3d(n, alpha, x, incx, gpu_option)
404 :
405 : !Arguments ------------------------------------
406 : integer, intent(in) :: n
407 : complex(dp), intent(in) :: alpha
408 : complex(dp), target, intent(inout) :: x(:,:,:)
409 : integer, intent(in) :: incx
410 : !Optionals -----------------------------------
411 : integer, intent(in), optional :: gpu_option
412 :
413 : !Local variables-------------------------------
414 : integer :: gpu_option_
415 :
416 : ! *********************************************************************
417 :
418 0 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
419 :
420 0 : call abi_zscal(n, alpha, x, incx, gpu_option=gpu_option_)
421 :
422 0 : end subroutine abi_zscal_3d
423 : !!***
|