Branch data Line data Source code
1 : : !{\src2tex{textfont=tt}}
2 : : !!****f* m_abi_linalg/abi_xpotrf
3 : : !! NAME
4 : : !! abi_xpotrf
5 : : !!
6 : : !! FUNCTION
7 : : !! abi_xpotrf is the generic function for computing the
8 : : !! Cholesky factorization of a real symmetric (or hermitian)
9 : : !! positive definite matrix A.
10 : : !! The factorization has the form
11 : : !! A = U**T * U, if UPLO = 'U', or
12 : : !! A = L * L**T, if UPLO = 'L',
13 : : !! where U is an upper triangular matrix and L is lower triangular.
14 : : !!
15 : : !! COPYRIGHT
16 : : !! Copyright (C) 2001-2026 ABINIT group (LNguyen,FDahm (CS))
17 : : !! This file is distributed under the terms of the
18 : : !! GNU General Public License, see ~abinit/COPYING
19 : : !! or http://www.gnu.org/copyleft/gpl.txt .
20 : : !!
21 : : !! SOURCE
22 : :
23 : : !!***
24 : :
25 : : !!****f* m_abi_linalg/abi_dpotrf
26 : : !! NAME
27 : : !! abi_dpotrf
28 : : !!
29 : : !! FUNCTION
30 : : !!
31 : : !! INPUTS
32 : : !!
33 : : !! SOURCE
34 : :
35 : 0 : subroutine abi_dpotrf(uplo,n,a,lda,info,gpu_option)
36 : :
37 : : !Arguments ------------------------------------
38 : : character(len=1), intent(in) :: uplo
39 : : integer, intent(in) :: n,lda
40 : : integer, intent(out) :: info
41 : : real(dp), target, intent(inout) :: a(*)
42 : : !Optionals -----------------------------------
43 : : integer, intent(in), optional :: gpu_option
44 : :
45 : : !Local variables ------------------------------
46 : : integer :: gpu_option_
47 : :
48 : : ! *********************************************************************
49 : :
50 [ # # ]: 0 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
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(a)), "Array isn't mapped on GPU")
55 : : end if
56 : : #endif
57 : :
58 [ # # ]: 0 : if(gpu_option_/=ABI_GPU_DISABLED) then
59 : : #ifdef HAVE_OPENMP_OFFLOAD
60 : : !$OMP TARGET DATA USE_DEVICE_ADDR(a) IF(gpu_option_==ABI_GPU_OPENMP)
61 : : #endif
62 : 0 : call abi_gpu_xpotrf_cptr(1, uplo, n, c_loc(a), lda, info)
63 : : #ifdef HAVE_OPENMP_OFFLOAD
64 : : !$OMP END TARGET DATA
65 : : #endif
66 : : else
67 : : #ifdef HAVE_LINALG_PLASMA
68 : : if (ABI_LINALG_PLASMA_ISON) then
69 : : call PLASMA_dpotrf(uplo_plasma(uplo),n,a,lda,info)
70 : : return
71 : : end if
72 : : #endif
73 : 0 : call dpotrf(uplo,n,a,lda,info)
74 : : end if
75 : :
76 : 0 : end subroutine abi_dpotrf
77 : : !!***
78 : :
79 : : !!****f* m_abi_linalg/abi_zpotrf_2d
80 : : !! NAME
81 : : !! abi_zpotrf_2d
82 : : !!
83 : : !! FUNCTION
84 : : !!
85 : : !! INPUTS
86 : : !!
87 : : !! SOURCE
88 : :
89 : 699322 : subroutine abi_zpotrf_2d(uplo,n,a,lda,info,gpu_option)
90 : :
91 : : !Arguments ------------------------------------
92 : : character(len=1), intent(in) :: uplo
93 : : integer, intent(in) :: lda,n
94 : : integer, intent(out) :: info
95 : : complex(dp), target, intent(inout) :: a(lda,*)
96 : : !Optionals -----------------------------------
97 : : integer, intent(in), optional :: gpu_option
98 : :
99 : : ! *********************************************************************
100 : :
101 : 699322 : call abi_zpotrf(uplo,n,a(1,1),lda,info,gpu_option=gpu_option)
102 : :
103 : 699290 : end subroutine abi_zpotrf_2d
104 : : !!***
105 : :
106 : : !!****f* m_abi_linalg/abi_d2zpotrf_3d
107 : : !! NAME
108 : : !! abi_d2zpotrf
109 : : !!
110 : : !! FUNCTION
111 : : !!
112 : : !! INPUTS
113 : : !!
114 : : !! SOURCE
115 : :
116 [ - + ]: 5578 : subroutine abi_d2zpotrf_3d(uplo,n,a,lda,info,x_cplx,gpu_option)
117 : :
118 : : !Arguments ------------------------------------
119 : : character(len=1), intent(in) :: uplo
120 : : integer, intent(in) :: n,lda
121 : : integer, intent(out) :: info
122 : : integer, intent(in), optional :: x_cplx
123 : : integer, intent(in), optional :: gpu_option
124 : : real(dp),target, intent(inout) :: a(:,:,:)
125 : :
126 : : !Local Variables -----------------------------
127 : : integer :: cplx_, gpu_option_
128 : :
129 : : ! *********************************************************************
130 : :
131 [ + - ]: 5578 : cplx_=1 ; if(PRESENT(x_cplx)) cplx_ = x_cplx
132 [ - + ]: 5578 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
133 : :
134 [ - + - - : 5578 : call abi_d2zpotrf(uplo,n,a,lda,info,x_cplx=cplx_,gpu_option=gpu_option_)
- - - - -
- - + - -
- - - - ]
135 : :
136 : 5578 : end subroutine abi_d2zpotrf_3d
137 : : !!***
138 : :
139 : : !!****f* m_abi_linalg/abi_d2zpotrf
140 : : !! NAME
141 : : !! abi_d2zpotrf
142 : : !!
143 : : !! FUNCTION
144 : : !!
145 : : !! INPUTS
146 : : !!
147 : : !! SOURCE
148 : :
149 : 158468 : subroutine abi_d2zpotrf(uplo,n,a,lda,info,x_cplx,gpu_option)
150 : :
151 : : !Arguments ------------------------------------
152 : : character(len=1), intent(in) :: uplo
153 : : integer, intent(in) :: n,lda
154 : : integer, intent(out) :: info
155 : : integer, intent(in), optional :: x_cplx
156 : : integer, intent(in), optional :: gpu_option
157 : : real(dp),target, intent(inout) :: a(lda,*) ! FIXME should be x_cplx * lda
158 : :
159 : : !Local Variables -----------------------------
160 : : integer :: cplx_, gpu_option_
161 : :
162 : : ! *********************************************************************
163 : :
164 [ + - ]: 158468 : cplx_=1 ; if(PRESENT(x_cplx)) cplx_ = x_cplx
165 [ + + ]: 158468 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
166 : :
167 : : #if defined(DEBUG_VERBOSE) && defined(HAVE_OPENMP_OFFLOAD)
168 : : if ( gpu_option_ == ABI_GPU_OPENMP ) then
169 : : ABI_CHECK(xomp_target_is_present(c_loc(a)), "Array isn't mapped on GPU")
170 : : end if
171 : : #endif
172 : :
173 [ - + ]: 100634 : if(gpu_option_/=ABI_GPU_DISABLED) then
174 : : #ifdef HAVE_OPENMP_OFFLOAD
175 : : !$OMP TARGET DATA USE_DEVICE_ADDR(a) IF(gpu_option_==ABI_GPU_OPENMP)
176 : : #endif
177 : 0 : call abi_gpu_xpotrf_cptr(cplx_, uplo, n, c_loc(a), lda, info)
178 : : #ifdef HAVE_OPENMP_OFFLOAD
179 : : !$OMP END TARGET DATA
180 : : #endif
181 : : else
182 : : #ifdef HAVE_LINALG_PLASMA
183 : : if (ABI_LINALG_PLASMA_ISON) then
184 : : if(cplx_ == 2) then
185 : : info = PLASMA_zpotrf_c(uplo_plasma(uplo),n,c_loc(a),lda)
186 : : else
187 : : info = PLASMA_dpotrf_c(uplo_plasma(uplo),n,c_loc(a),lda)
188 : : end if
189 : : return
190 : : end if
191 : : #endif
192 [ + + ]: 158468 : if(cplx_ == 2) then
193 : 59788 : call zpotrf(uplo,n,a,lda,info)
194 : : else
195 : 98680 : call dpotrf(uplo,n,a,lda,info)
196 : : end if
197 : : end if
198 : :
199 : 158468 : end subroutine abi_d2zpotrf
200 : : !!***
201 : :
202 : : !!****f* m_abi_linalg/abi_zpotrf
203 : : !! NAME
204 : : !! abi_zpotrf
205 : : !!
206 : : !! FUNCTION
207 : : !!
208 : : !! INPUTS
209 : : !!
210 : : !! SOURCE
211 : :
212 : 699322 : subroutine abi_zpotrf(uplo,n,a,lda,info,gpu_option)
213 : :
214 : : !Arguments ------------------------------------
215 : : character(len=1), intent(in) :: uplo
216 : : integer, intent(in) :: lda,n
217 : : integer, intent(out) :: info
218 : : complex(dp), target, intent(inout) :: a(*)
219 : : !Optionals -----------------------------------
220 : : integer, intent(in), optional :: gpu_option
221 : :
222 : : !Local variables ------------------------------
223 : : integer :: gpu_option_
224 : :
225 : : ! *********************************************************************
226 : :
227 [ + + ]: 699322 : gpu_option_=ABI_GPU_DISABLED ; if(PRESENT(gpu_option)) gpu_option_ = gpu_option
228 : :
229 : : #if defined(DEBUG_VERBOSE) && defined(HAVE_OPENMP_OFFLOAD)
230 : : if ( gpu_option_ == ABI_GPU_OPENMP ) then
231 : : ABI_CHECK(xomp_target_is_present(c_loc(a)), "Array isn't mapped on GPU")
232 : : end if
233 : : #endif
234 : :
235 [ - + ]: 699115 : if(gpu_option_/=ABI_GPU_DISABLED) then
236 : : #ifdef HAVE_OPENMP_OFFLOAD
237 : : !$OMP TARGET DATA USE_DEVICE_ADDR(a) IF(gpu_option_==ABI_GPU_OPENMP)
238 : : #endif
239 : 0 : call abi_gpu_xpotrf_cptr(2, uplo, n, c_loc(a), lda, info)
240 : : #ifdef HAVE_OPENMP_OFFLOAD
241 : : !$OMP END TARGET DATA
242 : : #endif
243 : : else
244 : : #ifdef HAVE_LINALG_PLASMA
245 : : if (ABI_LINALG_PLASMA_ISON) then
246 : : call PLASMA_zpotrf(uplo_plasma(uplo),n,a,lda,info)
247 : : return
248 : : end if
249 : : #endif
250 : 699322 : call zpotrf(uplo,n,a,lda,info)
251 : : end if
252 : :
253 : 699322 : end subroutine abi_zpotrf
254 : : !!***
|