Quantum 3xplorer (Q3)
Loading...
Searching...
No Matches
factory.hpp
Go to the documentation of this file.
1
#pragma once
2
3
/**
4
* create_planewave_diagonalizer — factory function for planewave eigenvalue solvers.
5
*
6
* Supported solvers: "davidson" (iterative, O(N_pw·N_bands²)) and
7
* "direct" (dense LAPACK, O(N_pw³), default for small systems).
8
*
9
* An ExecutionPolicy is injected into the diagonalizer to provide
10
* band-group collective operations (dot_product, norm) — serial BLAS
11
* in serial builds; BLAS + MPI_Allreduce in MPI builds.
12
*/
13
14
#include <memory>
15
#include <stdexcept>
16
#include <string>
17
18
#include "
layer_0_core/execution/init.hpp
"
19
#include "
layer_0_core/execution/serial.hpp
"
20
#include "
layer_4_computation/diagonalizer/planewave/davidson.hpp
"
21
#include "
layer_4_computation/diagonalizer/planewave/direct.hpp
"
22
#include "
layer_4_computation/diagonalizer/planewave/init.hpp
"
23
24
namespace
q3
{
25
26
/**
27
* Create a diagonalizer by name with an optional execution policy.
28
*
29
* @param name "direct" or "davidson".
30
* @param execution_policy Band-group collective operations policy.
31
* Defaults to a static serial policy for backward compatibility.
32
*/
33
inline
std::unique_ptr<PlanewaveDiagonalizer>
34
create_planewave_diagonalizer
(
const
std::string& name,
35
const
execution::ExecutionPolicy
& execution_policy =
36
PlanewaveDavidsonDiagonalizer::default_serial_execution_policy
) {
37
if
(name ==
"davidson"
) {
38
return
std::make_unique<PlanewaveDavidsonDiagonalizer>(execution_policy);
39
}
40
if
(name ==
"direct"
) {
41
return
std::make_unique<PlanewaveDirectDiagonalizer>(execution_policy);
42
}
43
throw
std::runtime_error(
"Unknown diagonalizer: '"
+ name +
44
"'. Supported values: 'direct', 'davidson'."
);
45
}
46
47
}
// namespace q3
q3::PlanewaveDavidsonDiagonalizer::default_serial_execution_policy
static const execution::SerialExecutionPolicy default_serial_execution_policy
Definition
davidson.hpp:354
q3::execution::ExecutionPolicy
Definition
init.hpp:85
davidson.hpp
direct.hpp
init.hpp
serial.hpp
init.hpp
q3
Definition
q3_core_api.hpp:33
q3::create_planewave_diagonalizer
std::unique_ptr< PlanewaveDiagonalizer > create_planewave_diagonalizer(const std::string &name, const execution::ExecutionPolicy &execution_policy=PlanewaveDavidsonDiagonalizer::default_serial_execution_policy)
Definition
factory.hpp:34
src
layer_4_computation
diagonalizer
planewave
factory.hpp
Generated by
1.9.8