(git:34ef472)
pexsi_interface.F
Go to the documentation of this file.
1 !--------------------------------------------------------------------------------------------------!
2 ! CP2K: A general program to perform molecular dynamics simulations !
3 ! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4 ! !
5 ! SPDX-License-Identifier: GPL-2.0-or-later !
6 !--------------------------------------------------------------------------------------------------!
7 
8 ! **************************************************************************************************
9 !> \brief Interface to the PEXSI library, providing wrappers for all PEXSI
10 !> routines that are called inside CP2K. Requires PEXSI version 0.10.x.
11 !> \par History
12 !> 2014.12 created [Patrick Seewald]
13 !> \author Patrick Seewald
14 ! **************************************************************************************************
16 
17 #if defined(__LIBPEXSI)
18  USE f_ppexsi_interface, ONLY: f_ppexsi_dft_driver, &
19  f_ppexsi_load_real_hs_matrix, &
20  f_ppexsi_options, &
21  f_ppexsi_plan_finalize, &
22  f_ppexsi_plan_initialize, &
23  f_ppexsi_retrieve_real_dft_matrix, &
24  f_ppexsi_set_default_options
25 #endif
26 #if defined(__HAS_IEEE_EXCEPTIONS)
27  USE ieee_exceptions, ONLY: ieee_get_halting_mode, &
28  ieee_set_halting_mode, &
29  ieee_all
30 #endif
31  USE kinds, ONLY: int_8, &
32  real_8
33  USE iso_c_binding, ONLY: c_intptr_t
34  USE message_passing, ONLY: mp_comm_type
35 #include "./base/base_uses.f90"
36 
37  IMPLICIT NONE
38 
39  PRIVATE
40 
41  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'pexsi_interface'
42 
43  PUBLIC :: cp_pexsi_options, cp_pexsi_plan_initialize, &
47 
48  TYPE cp_pexsi_options
49  PRIVATE
50 #if defined(__LIBPEXSI)
51  TYPE(f_ppexsi_options) :: options
52 #else
53  INTEGER :: unused = -1
54 #endif
55  END TYPE cp_pexsi_options
56 
57 CONTAINS
58 
59 ! **************************************************************************************************
60 !> \brief Set PEXSI internal options
61 !> \param pexsi_options ...
62 !> \param temperature ...
63 !> \param gap ...
64 !> \param deltaE ...
65 !> \param numPole ...
66 !> \param isInertiaCount ...
67 !> \param maxPEXSIIter ...
68 !> \param muMin0 ...
69 !> \param muMax0 ...
70 !> \param mu0 ...
71 !> \param muInertiaTolerance ...
72 !> \param muInertiaExpansion ...
73 !> \param muPEXSISafeGuard ...
74 !> \param numElectronPEXSITolerance ...
75 !> \param matrixType ...
76 !> \param isSymbolicFactorize ...
77 !> \param ordering ...
78 !> \param rowOrdering ...
79 !> \param npSymbFact ...
80 !> \param verbosity ...
81 ! **************************************************************************************************
82  SUBROUTINE cp_pexsi_set_options(pexsi_options, temperature, gap, deltaE, numPole, &
83  isInertiaCount, maxPEXSIIter, muMin0, muMax0, mu0, &
84  muInertiaTolerance, muInertiaExpansion, &
85  muPEXSISafeGuard, numElectronPEXSITolerance, &
86  matrixType, isSymbolicFactorize, ordering, rowOrdering, &
87  npSymbFact, verbosity)
88 
89  TYPE(cp_pexsi_options), INTENT(INOUT) :: pexsi_options
90  REAL(kind=real_8), INTENT(IN), OPTIONAL :: temperature, gap, deltae
91  INTEGER, INTENT(IN), OPTIONAL :: numpole, isinertiacount, &
92  maxpexsiiter
93  REAL(kind=real_8), INTENT(IN), OPTIONAL :: mumin0, mumax0, mu0, &
94  muinertiatolerance, muinertiaexpansion, mupexsisafeguard, &
95  numelectronpexsitolerance
96  INTEGER, INTENT(IN), OPTIONAL :: matrixtype, &
97  issymbolicfactorize, &
98  ordering, rowordering, npsymbfact, &
99  verbosity
100 
101 #if defined(__LIBPEXSI)
102  IF (PRESENT(temperature)) pexsi_options%options%temperature = temperature
103  IF (PRESENT(gap)) pexsi_options%options%gap = gap
104  IF (PRESENT(deltae)) pexsi_options%options%deltaE = deltae
105  IF (PRESENT(numpole)) pexsi_options%options%numPole = numpole
106  IF (PRESENT(isinertiacount)) pexsi_options%options%isInertiaCount = isinertiacount
107  IF (PRESENT(maxpexsiiter)) pexsi_options%options%maxPEXSIIter = maxpexsiiter
108  IF (PRESENT(mumin0)) pexsi_options%options%muMin0 = mumin0
109  IF (PRESENT(mumax0)) pexsi_options%options%muMax0 = mumax0
110  IF (PRESENT(mu0)) pexsi_options%options%mu0 = mu0
111  IF (PRESENT(muinertiatolerance)) &
112  pexsi_options%options%muInertiaTolerance = muinertiatolerance
113  IF (PRESENT(muinertiaexpansion)) &
114  pexsi_options%options%muInertiaExpansion = muinertiaexpansion
115  IF (PRESENT(mupexsisafeguard)) &
116  pexsi_options%options%muPEXSISafeGuard = mupexsisafeguard
117  IF (PRESENT(numelectronpexsitolerance)) &
118  pexsi_options%options%numElectronPEXSITolerance = numelectronpexsitolerance
119  IF (PRESENT(matrixtype)) pexsi_options%options%matrixType = matrixtype
120  IF (PRESENT(issymbolicfactorize)) &
121  pexsi_options%options%isSymbolicFactorize = issymbolicfactorize
122  IF (PRESENT(ordering)) pexsi_options%options%ordering = ordering
123  IF (PRESENT(rowordering)) pexsi_options%options%rowOrdering = rowordering
124  IF (PRESENT(npsymbfact)) pexsi_options%options%npSymbFact = npsymbfact
125  IF (PRESENT(verbosity)) pexsi_options%options%verbosity = verbosity
126 #else
127  mark_used(pexsi_options)
128  mark_used(temperature)
129  mark_used(gap)
130  mark_used(deltae)
131  mark_used(numpole)
132  mark_used(isinertiacount)
133  mark_used(maxpexsiiter)
134  mark_used(mumin0)
135  mark_used(mumax0)
136  mark_used(mu0)
137  mark_used(muinertiatolerance)
138  mark_used(muinertiaexpansion)
139  mark_used(mupexsisafeguard)
140  mark_used(numelectronpexsitolerance)
141  mark_used(matrixtype)
142  mark_used(issymbolicfactorize)
143  mark_used(ordering)
144  mark_used(rowordering)
145  mark_used(npsymbfact)
146  mark_used(verbosity)
147  cpabort("Requires linking to the PEXSI library.")
148 #endif
149 
150  ! Additional PEXSI parameters and their defaults not made available here
151  ! because CP2K should always use PEXSI's defaults:
152  ! isConstructCommPattern (=?, pexsi does not even use it)
153  ! symmetric (=1)
154  ! transpose (=0)
155  END SUBROUTINE cp_pexsi_set_options
156 
157 ! **************************************************************************************************
158 !> \brief Access PEXSI internal options
159 !> \param pexsi_options ...
160 !> \param temperature ...
161 !> \param gap ...
162 !> \param deltaE ...
163 !> \param numPole ...
164 !> \param isInertiaCount ...
165 !> \param maxPEXSIIter ...
166 !> \param muMin0 ...
167 !> \param muMax0 ...
168 !> \param mu0 ...
169 !> \param muInertiaTolerance ...
170 !> \param muInertiaExpansion ...
171 !> \param muPEXSISafeGuard ...
172 !> \param numElectronPEXSITolerance ...
173 !> \param matrixType ...
174 !> \param isSymbolicFactorize ...
175 !> \param ordering ...
176 !> \param rowOrdering ...
177 !> \param npSymbFact ...
178 !> \param verbosity ...
179 ! **************************************************************************************************
180  SUBROUTINE cp_pexsi_get_options(pexsi_options, temperature, gap, deltaE, numPole, &
181  isInertiaCount, maxPEXSIIter, muMin0, muMax0, mu0, &
182  muInertiaTolerance, muInertiaExpansion, &
183  muPEXSISafeGuard, numElectronPEXSITolerance, &
184  matrixType, isSymbolicFactorize, ordering, rowOrdering, &
185  npSymbFact, verbosity)
186  TYPE(cp_pexsi_options), INTENT(IN) :: pexsi_options
187  REAL(kind=real_8), INTENT(OUT), OPTIONAL :: temperature, gap, deltae
188  INTEGER, INTENT(OUT), OPTIONAL :: numpole, isinertiacount, &
189  maxpexsiiter
190  REAL(kind=real_8), INTENT(OUT), OPTIONAL :: mumin0, mumax0, mu0, &
191  muinertiatolerance, muinertiaexpansion, mupexsisafeguard, &
192  numelectronpexsitolerance
193  INTEGER, INTENT(OUT), OPTIONAL :: matrixtype, &
194  issymbolicfactorize, &
195  ordering, rowordering, npsymbfact, &
196  verbosity
197 
198 #if defined(__LIBPEXSI)
199  IF (PRESENT(temperature)) temperature = pexsi_options%options%temperature
200  IF (PRESENT(gap)) gap = pexsi_options%options%gap
201  IF (PRESENT(deltae)) deltae = pexsi_options%options%deltaE
202  IF (PRESENT(numpole)) numpole = pexsi_options%options%numPole
203  IF (PRESENT(isinertiacount)) isinertiacount = pexsi_options%options%isInertiaCount
204  IF (PRESENT(maxpexsiiter)) maxpexsiiter = pexsi_options%options%maxPEXSIIter
205  IF (PRESENT(mumin0)) mumin0 = pexsi_options%options%muMin0
206  IF (PRESENT(mumax0)) mumax0 = pexsi_options%options%muMax0
207  IF (PRESENT(mu0)) mu0 = pexsi_options%options%mu0
208  IF (PRESENT(muinertiatolerance)) &
209  muinertiatolerance = pexsi_options%options%muInertiaTolerance
210  IF (PRESENT(muinertiaexpansion)) &
211  muinertiaexpansion = pexsi_options%options%muInertiaExpansion
212  IF (PRESENT(mupexsisafeguard)) &
213  mupexsisafeguard = pexsi_options%options%muPEXSISafeGuard
214  IF (PRESENT(numelectronpexsitolerance)) &
215  numelectronpexsitolerance = pexsi_options%options%numElectronPEXSITolerance
216  IF (PRESENT(matrixtype)) matrixtype = pexsi_options%options%matrixType
217  IF (PRESENT(issymbolicfactorize)) &
218  issymbolicfactorize = pexsi_options%options%isSymbolicFactorize
219  IF (PRESENT(ordering)) ordering = pexsi_options%options%ordering
220  IF (PRESENT(rowordering)) rowordering = pexsi_options%options%rowOrdering
221  IF (PRESENT(npsymbfact)) npsymbfact = pexsi_options%options%npSymbFact
222  IF (PRESENT(verbosity)) verbosity = pexsi_options%options%verbosity
223 #else
224  mark_used(pexsi_options)
225  ! assign intent-out arguments to silence compiler warnings
226  IF (PRESENT(temperature)) temperature = 0.0_real_8
227  IF (PRESENT(gap)) gap = 0.0_real_8
228  IF (PRESENT(deltae)) deltae = 0.0_real_8
229  IF (PRESENT(numpole)) numpole = -1
230  IF (PRESENT(isinertiacount)) isinertiacount = -1
231  IF (PRESENT(maxpexsiiter)) maxpexsiiter = -1
232  IF (PRESENT(mumin0)) mumin0 = 0.0_real_8
233  IF (PRESENT(mumax0)) mumax0 = 0.0_real_8
234  IF (PRESENT(mu0)) mu0 = 0.0_real_8
235  IF (PRESENT(muinertiatolerance)) muinertiatolerance = 0.0_real_8
236  IF (PRESENT(muinertiaexpansion)) muinertiaexpansion = 0.0_real_8
237  IF (PRESENT(mupexsisafeguard)) mupexsisafeguard = 0.0_real_8
238  IF (PRESENT(numelectronpexsitolerance)) numelectronpexsitolerance = 0.0_real_8
239  IF (PRESENT(matrixtype)) matrixtype = -1
240  IF (PRESENT(issymbolicfactorize)) issymbolicfactorize = -1
241  IF (PRESENT(ordering)) ordering = -1
242  IF (PRESENT(rowordering)) rowordering = -1
243  IF (PRESENT(npsymbfact)) npsymbfact = -1
244  IF (PRESENT(verbosity)) verbosity = -1
245  cpabort("Requires linking to the PEXSI library.")
246 #endif
247  END SUBROUTINE cp_pexsi_get_options
248 
249 ! **************************************************************************************************
250 !> \brief ...
251 !> \param pexsi_options ...
252 ! **************************************************************************************************
253  SUBROUTINE cp_pexsi_set_default_options(pexsi_options)
254  TYPE(cp_pexsi_options), INTENT(OUT) :: pexsi_options
255 
256 #if defined(__LIBPEXSI)
257  CALL f_ppexsi_set_default_options(pexsi_options%options)
258 #else
259  cpabort("Requires linking to the PEXSI library.")
260 #endif
261  END SUBROUTINE cp_pexsi_set_default_options
262 
263 ! **************************************************************************************************
264 !> \brief ...
265 !> \param comm ...
266 !> \param numProcRow ...
267 !> \param numProcCol ...
268 !> \param outputFileIndex ...
269 !> \return ...
270 ! **************************************************************************************************
271  FUNCTION cp_pexsi_plan_initialize(comm, numProcRow, numProcCol, outputFileIndex)
272  TYPE(mp_comm_type), INTENT(IN) :: comm
273  INTEGER, INTENT(IN) :: numprocrow, numproccol, &
274  outputfileindex
275  INTEGER(KIND=C_INTPTR_T) :: cp_pexsi_plan_initialize
276 
277 #if defined(__LIBPEXSI)
278  CHARACTER(LEN=*), PARAMETER :: routinen = 'cp_pexsi_plan_initialize'
279  INTEGER :: info, handle
280 
281  CALL timeset(routinen, handle)
282  cp_pexsi_plan_initialize = f_ppexsi_plan_initialize(comm%get_handle(), numprocrow, &
283  numproccol, outputfileindex, info)
284  IF (info .NE. 0) &
285  cpabort("Pexsi returned an error. Consider logPEXSI0 for details.")
286  CALL timestop(handle)
287 #else
288  mark_used(comm)
289  mark_used(numprocrow)
290  mark_used(numproccol)
291  mark_used(outputfileindex)
293  cpabort("Requires linking to the PEXSI library.")
294 #endif
295  END FUNCTION cp_pexsi_plan_initialize
296 
297 ! **************************************************************************************************
298 !> \brief ...
299 !> \param plan ...
300 !> \param pexsi_options ...
301 !> \param nrows ...
302 !> \param nnz ...
303 !> \param nnzLocal ...
304 !> \param numColLocal ...
305 !> \param colptrLocal ...
306 !> \param rowindLocal ...
307 !> \param HnzvalLocal ...
308 !> \param isSIdentity ...
309 !> \param SnzvalLocal ...
310 ! **************************************************************************************************
311  SUBROUTINE cp_pexsi_load_real_hs_matrix(plan, pexsi_options, nrows, nnz, &
312  nnzLocal, numColLocal, colptrLocal, &
313  rowindLocal, HnzvalLocal, isSIdentity, &
314  SnzvalLocal)
315  INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: plan
316  TYPE(cp_pexsi_options), INTENT(IN) :: pexsi_options
317  INTEGER, INTENT(IN) :: nrows, nnz, nnzlocal, &
318  numcollocal, colptrlocal(*), &
319  rowindlocal(*)
320  REAL(kind=real_8), INTENT(IN) :: hnzvallocal(*)
321  INTEGER, INTENT(IN) :: issidentity
322  REAL(kind=real_8), INTENT(IN) :: snzvallocal(*)
323 
324 #if defined(__LIBPEXSI)
325  CHARACTER(LEN=*), PARAMETER :: routinen = 'cp_pexsi_load_real_symmetric_hs_matrix'
326  INTEGER :: handle, info
327 
328  CALL timeset(routinen, handle)
329  CALL f_ppexsi_load_real_hs_matrix(plan, pexsi_options%options, nrows, nnz, nnzlocal, &
330  numcollocal, colptrlocal, rowindlocal, &
331  hnzvallocal, issidentity, snzvallocal, info)
332  IF (info .NE. 0) &
333  cpabort("Pexsi returned an error. Consider logPEXSI0 for details.")
334  CALL timestop(handle)
335 #else
336  mark_used(plan)
337  mark_used(pexsi_options)
338  mark_used(nrows)
339  mark_used(nnz)
340  mark_used(nnzlocal)
341  mark_used(numcollocal)
342  mark_used(issidentity)
343  cpabort("Requires linking to the PEXSI library.")
344 
345  ! MARK_USED macro does not work on assumed shape variables
346  IF (.false.) then; DO
347  IF (colptrlocal(1) > rowindlocal(1) .OR. hnzvallocal(1) > snzvallocal(1)) EXIT
348  END do; END IF
349 #endif
350  END SUBROUTINE cp_pexsi_load_real_hs_matrix
351 
352 ! **************************************************************************************************
353 !> \brief ...
354 !> \param plan ...
355 !> \param pexsi_options ...
356 !> \param numElectronExact ...
357 !> \param muPEXSI ...
358 !> \param numElectronPEXSI ...
359 !> \param muMinInertia ...
360 !> \param muMaxInertia ...
361 !> \param numTotalInertiaIter ...
362 !> \param numTotalPEXSIIter ...
363 ! **************************************************************************************************
364  SUBROUTINE cp_pexsi_dft_driver(plan, pexsi_options, numElectronExact, muPEXSI, &
365  numElectronPEXSI, muMinInertia, muMaxInertia, &
366  numTotalInertiaIter, numTotalPEXSIIter)
367  INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: plan
368  TYPE(cp_pexsi_options), INTENT(IN) :: pexsi_options
369  REAL(kind=real_8), INTENT(IN) :: numelectronexact
370  REAL(kind=real_8), INTENT(out) :: mupexsi, numelectronpexsi, &
371  mumininertia, mumaxinertia
372  INTEGER, INTENT(out) :: numtotalinertiaiter, &
373  numtotalpexsiiter
374 
375 #if defined(__LIBPEXSI)
376  CHARACTER(LEN=*), PARAMETER :: routinen = 'cp_pexsi_dft_driver'
377  INTEGER :: handle, info
378 #if defined(__HAS_IEEE_EXCEPTIONS)
379  LOGICAL, DIMENSION(5) :: halt
380 #endif
381 
382  CALL timeset(routinen, handle)
383 
384  ! Unfortuntatelly, some PEXSI kernels raise IEEE754 exceptions.
385  ! Therefore, we disable floating point traps temporarily.
386 #if defined(__HAS_IEEE_EXCEPTIONS)
387  CALL ieee_get_halting_mode(ieee_all, halt)
388  CALL ieee_set_halting_mode(ieee_all, .false.)
389 #endif
390 
391  CALL f_ppexsi_dft_driver(plan, pexsi_options%options, numelectronexact, mupexsi, &
392  numelectronpexsi, mumininertia, mumaxinertia, &
393  numtotalinertiaiter, numtotalpexsiiter, info)
394 
395 #if defined(__HAS_IEEE_EXCEPTIONS)
396  CALL ieee_set_halting_mode(ieee_all, halt)
397 #endif
398 
399  IF (info .NE. 0) &
400  cpabort("Pexsi returned an error. Consider logPEXSI0 for details.")
401  CALL timestop(handle)
402 #else
403  mark_used(plan)
404  mark_used(numelectronexact)
405  mark_used(pexsi_options)
406  ! assign intent-out arguments to silence compiler warnings
407  mupexsi = 0.0_real_8
408  numelectronpexsi = 0.0_real_8
409  mumininertia = 0.0_real_8
410  mumaxinertia = 0.0_real_8
411  numtotalinertiaiter = -1
412  numtotalpexsiiter = -1
413  cpabort("Requires linking to the PEXSI library.")
414 #endif
415  END SUBROUTINE cp_pexsi_dft_driver
416 
417 ! **************************************************************************************************
418 !> \brief ...
419 !> \param plan ...
420 !> \param DMnzvalLocal ...
421 !> \param EDMnzvalLocal ...
422 !> \param FDMnzvalLocal ...
423 !> \param totalEnergyH ...
424 !> \param totalEnergyS ...
425 !> \param totalFreeEnergy ...
426 ! **************************************************************************************************
427  SUBROUTINE cp_pexsi_retrieve_real_dft_matrix(plan, DMnzvalLocal, EDMnzvalLocal, &
428  FDMnzvalLocal, totalEnergyH, &
429  totalEnergyS, totalFreeEnergy)
430  INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: plan
431  REAL(kind=real_8), INTENT(out) :: dmnzvallocal(*), edmnzvallocal(*), &
432  fdmnzvallocal(*), totalenergyh, totalenergys, &
433  totalfreeenergy
434 
435 #if defined(__LIBPEXSI)
436  CHARACTER(LEN=*), PARAMETER :: routinen = 'cp_pexsi_retrieve_real_symmetric_dft_matrix'
437  INTEGER :: handle, info
438 
439  CALL timeset(routinen, handle)
440  CALL f_ppexsi_retrieve_real_dft_matrix(plan, dmnzvallocal, edmnzvallocal, &
441  fdmnzvallocal, totalenergyh, &
442  totalenergys, totalfreeenergy, info)
443  IF (info .NE. 0) &
444  cpabort("Pexsi returned an error. Consider logPEXSI0 for details.")
445  CALL timestop(handle)
446 #else
447  mark_used(plan)
448  ! assign intent-out arguments to silence compiler warnings
449  dmnzvallocal(1) = 0.0_real_8
450  edmnzvallocal(1) = 0.0_real_8
451  fdmnzvallocal(1) = 0.0_real_8
452  totalenergyh = 0.0_real_8
453  totalenergys = 0.0_real_8
454  totalfreeenergy = 0.0_real_8
455 
456  cpabort("Requires linking to the PEXSI library.")
457 #endif
458  END SUBROUTINE cp_pexsi_retrieve_real_dft_matrix
459 
460 ! **************************************************************************************************
461 !> \brief ...
462 !> \param plan ...
463 ! **************************************************************************************************
464  SUBROUTINE cp_pexsi_plan_finalize(plan)
465  INTEGER(KIND=C_INTPTR_T), INTENT(IN) :: plan
466 
467 #if defined(__LIBPEXSI)
468  CHARACTER(LEN=*), PARAMETER :: routinen = 'cp_pexsi_plan_finalize'
469  INTEGER :: info, handle
470 
471  CALL timeset(routinen, handle)
472  CALL f_ppexsi_plan_finalize(plan, info)
473  IF (info .NE. 0) &
474  cpabort("Pexsi returned an error. Consider logPEXSI0 for details.")
475  CALL timestop(handle)
476 #else
477  mark_used(plan)
478  cpabort("Requires linking to the PEXSI library.")
479 #endif
480  END SUBROUTINE
481 
482 END MODULE pexsi_interface
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public int_8
Definition: kinds.F:54
integer, parameter, public real_8
Definition: kinds.F:41
Interface to the message passing library MPI.
Interface to the PEXSI library, providing wrappers for all PEXSI routines that are called inside CP2K...
integer(kind=c_intptr_t) function, public cp_pexsi_plan_initialize(comm, numProcRow, numProcCol, outputFileIndex)
...
subroutine, public cp_pexsi_plan_finalize(plan)
...
subroutine, public cp_pexsi_get_options(pexsi_options, temperature, gap, deltaE, numPole, isInertiaCount, maxPEXSIIter, muMin0, muMax0, mu0, muInertiaTolerance, muInertiaExpansion, muPEXSISafeGuard, numElectronPEXSITolerance, matrixType, isSymbolicFactorize, ordering, rowOrdering, npSymbFact, verbosity)
Access PEXSI internal options.
subroutine, public cp_pexsi_retrieve_real_dft_matrix(plan, DMnzvalLocal, EDMnzvalLocal, FDMnzvalLocal, totalEnergyH, totalEnergyS, totalFreeEnergy)
...
subroutine, public cp_pexsi_set_default_options(pexsi_options)
...
subroutine, public cp_pexsi_set_options(pexsi_options, temperature, gap, deltaE, numPole, isInertiaCount, maxPEXSIIter, muMin0, muMax0, mu0, muInertiaTolerance, muInertiaExpansion, muPEXSISafeGuard, numElectronPEXSITolerance, matrixType, isSymbolicFactorize, ordering, rowOrdering, npSymbFact, verbosity)
Set PEXSI internal options.
subroutine, public cp_pexsi_dft_driver(plan, pexsi_options, numElectronExact, muPEXSI, numElectronPEXSI, muMinInertia, muMaxInertia, numTotalInertiaIter, numTotalPEXSIIter)
...
subroutine, public cp_pexsi_load_real_hs_matrix(plan, pexsi_options, nrows, nnz, nnzLocal, numColLocal, colptrLocal, rowindLocal, HnzvalLocal, isSIdentity, SnzvalLocal)
...