MCPcopy Create free account
hub / github.com/SZAILAB/MaterialDFT-Demo / density_weighted_average_spin

Function density_weighted_average_spin

cpp_core/src/scf.cpp:2920–2944  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2918}
2919
2920double density_weighted_average_spin(
2921 const std::vector<double>& rho_up_r,
2922 const std::vector<double>& rho_dn_r,
2923 const std::vector<double>& v_up_r,
2924 const std::vector<double>& v_dn_r,
2925 double dv
2926) {
2927 if (rho_up_r.size() != rho_dn_r.size()
2928 || rho_up_r.size() != v_up_r.size()
2929 || rho_up_r.size() != v_dn_r.size()) {
2930 throw std::invalid_argument("density_weighted_average_spin: size mismatch");
2931 }
2932 double rho_int = 0.0;
2933 double rho_v_int = 0.0;
2934 for (std::size_t i = 0; i < rho_up_r.size(); ++i) {
2935 const double rho_up = std::max(0.0, rho_up_r[i]);
2936 const double rho_dn = std::max(0.0, rho_dn_r[i]);
2937 rho_int += (rho_up + rho_dn) * dv;
2938 rho_v_int += (rho_up * v_up_r[i] + rho_dn * v_dn_r[i]) * dv;
2939 }
2940 if (!(rho_int > 1e-14)) {
2941 return 0.0;
2942 }
2943 return rho_v_int / rho_int;
2944}
2945
2946OverlapNormMetrics compute_overlap_norm_metrics(
2947 const std::vector<NonlocalMatvecOp>& overlap_ops_by_k,

Calls 1

sizeMethod · 0.80

Tested by

no test coverage detected