From 72301b3d5c3a91ff2e7fc6eedcad7bce8e647efa Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Thu, 19 Jul 2018 18:22:15 -0400 Subject: efficient computation of the smallest fourier mode by doing a magnetization-style update anytime a bond with the external field changes --- lib/vector.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'lib/vector.h') diff --git a/lib/vector.h b/lib/vector.h index 2099d28..a1084e2 100644 --- a/lib/vector.h +++ b/lib/vector.h @@ -36,6 +36,20 @@ void add (vector_t *v1, vector_t v2) { } } +template +void scalar_add (vector_t *v1, T a, vector_t v2) { + for (q_t i = 0; i < q; i++) { + v1->x[i] += a * v2.x[i]; + } +} + +template +void scalar_subtract (vector_t *v1, T a, vector_t v2) { + for (q_t i = 0; i < q; i++) { + v1->x[i] -= a * v2.x[i]; + } +} + template void subtract (vector_t *v1, vector_t v2) { for (q_t i = 0; i < q; i++) { @@ -43,6 +57,16 @@ void subtract (vector_t *v1, vector_t v2) { } } +template +T norm_squared (vector_t v) { + T tmp = 0; + for (q_t i = 0; i < q; i++) { + tmp += v.x[i] * v.x[i]; + } + + return tmp; +} + template vector_t scalar_multiple(v_t a, vector_t v) { vector_t multiple; -- cgit v1.2.3-70-g09d2