summaryrefslogtreecommitdiff
path: root/tensor.hpp
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jaron@kent-dobias.com>2021-11-09 15:41:56 +0100
committerJaron Kent-Dobias <jaron@kent-dobias.com>2021-11-09 15:41:56 +0100
commitbcc5c327016a3d188a9bdcb0069cc63b0bb8163f (patch)
treeabf0d5f9cf2ac9fb2d83c81aa1228525786ccc72 /tensor.hpp
parentd1d89e3a1ef97cd6443d4b0f4890a388d106e32d (diff)
downloadcode-bcc5c327016a3d188a9bdcb0069cc63b0bb8163f.tar.gz
code-bcc5c327016a3d188a9bdcb0069cc63b0bb8163f.tar.bz2
code-bcc5c327016a3d188a9bdcb0069cc63b0bb8163f.zip
Moved some repeated code into the pSpinModel class.
Diffstat (limited to 'tensor.hpp')
-rw-r--r--tensor.hpp24
1 files changed, 6 insertions, 18 deletions
diff --git a/tensor.hpp b/tensor.hpp
index fc99042..1212bda 100644
--- a/tensor.hpp
+++ b/tensor.hpp
@@ -5,6 +5,8 @@
#include <eigen3/unsupported/Eigen/CXX11/Tensor>
+#include "factorial.hpp"
+
template <class Scalar>
using Vector = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>;
@@ -89,25 +91,11 @@ Tensor<Scalar, p> generateCouplings(unsigned N, Distribution d, Generator& r) {
return J;
}
-template <class Scalar, int p, class Distribution, class Generator>
-Tensor<Scalar, p> plantState(const Tensor<Scalar, p>& J, const Vector<Scalar>& z, double β) {
- Tensor<Scalar, p> JPlanted = J;
-
- std::function<void(Tensor<Scalar, p>&, std::array<unsigned, p>)> plant =
- [&z, β] (Tensor<Scalar, p>& JJ, std::array<unsigned, p> ind) {
- Scalar Ji = getJ<Scalar, p>(JJ, ind);
- Scalar zzz = 1;
-
- for (unsigned i : ind) {
- zzz *= z(i);
- }
-
- setJ<Scalar, p>(JJ, ind, Ji - β * zzz / pow(zzz.size(), p));
- };
-
- iterateOver<Scalar, p>(JPlanted, plant);
+template <class Real, int p, class Generator>
+Tensor<Real, p> generateRealPSpinCouplings(unsigned N, Generator& r) {
+ Real σp = sqrt(factorial(p) / ((Real)2 * pow(N, p - 1)));
- return JPlanted;
+ return generateCouplings<Real, p>(N, std::normal_distribution<Real>(0, σp), r);
}
template <class Scalar>