-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathharmonicoscillatorrenormalisation.hh
90 lines (85 loc) · 2.8 KB
/
harmonicoscillatorrenormalisation.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#ifndef HARMONICOSCILLATORRENORMALISATION_HH
#define HARMONICOSCILLATORRENORMALISATION_HH \
HARMONICOSCILLATORRENORMALISATION_HH
#include "action/renormalisation.hh"
#include "lattice/lattice1d.hh"
#include <memory>
/** @file harmonicoscillatorrenormalisation.hh
* @brief Header file for harmonic oscillator action renormalisation class
*/
/** @class RenormalisedHOParameters
* @brief Renormalised coarse grid parameters for the harmonic oscillator
*
* Calculate the renormalised coarse grid mass and harmonic oscillator
* potential parameter \f$\mu^2\f$
*
\f[
m_0^{(c)} = m_0\left(1+\frac{a^2\mu^2}{2}\right)^{-1}
\f]
*
\f[
\left(\mu^{(c)}\right)^2 = \mu^2\left(1+\frac{a^2\mu^2}{4}\right)^{-1}
\f]
*
* Instead of those exact formulae, the perturbative expansion in \f$\mu\f$
* can also be used.
*/
class RenormalisedHOParameters : public RenormalisedParameters {
public:
/** @brief Create new instance
*
* @param[in] lattice_ Underlying lattice
* @param[in] m0_ Mass \f$m_0\f$
* @param[in] mu2_ Harmonic oscillator potential parameter \f$\mu^2\f$
* @param[in] renormalisation_ Type of renormalisation to use
* (0: none, 1: perturbative, 2: nonperturbative)
*/
RenormalisedHOParameters(const std::shared_ptr<Lattice1D> lattice_,
const double m0_, const double mu2_,
const RenormalisationType renormalisation_)
: RenormalisedParameters(renormalisation_), lattice(lattice_), m0(m0_),
mu2(mu2_) {}
/** @brief Renormalised coarse level mass \f$m_0^{(c)}\f$*/
double m0_coarse() {
double a_lat = lattice->geta_lat();
double m0coarse;
switch (renormalisation) {
case RenormalisationNone:
m0coarse = m0;
break;
case RenormalisationPerturbative:
m0coarse = m0 * (1. - 0.5 * a_lat * a_lat * mu2);
break;
case RenormalisationNonperturbative:
m0coarse = m0 / (1. + 0.5 * a_lat * a_lat * mu2);
break;
}
return m0coarse;
}
/** @brief Renormalised coarse level oscillator parameter
* \f$\left(\mu^{(c)}\right)^2\f$ */
double mu2_coarse() {
double a_lat = lattice->geta_lat();
double mu2coarse;
switch (renormalisation) {
case RenormalisationNone:
mu2coarse = mu2;
break;
case RenormalisationPerturbative:
mu2coarse = mu2 * (1. + 0.25 * a_lat * a_lat * mu2);
break;
case RenormalisationNonperturbative:
mu2coarse = mu2 * (1. + 0.25 * a_lat * a_lat * mu2);
break;
}
return mu2coarse;
}
private:
/** @brief Mass \f$m_0\f$ */
const double m0;
/** @brief Harmonic oscillator potential parameter \f$\mu^2\f$*/
const double mu2;
/** @brief Underlying lattice */
const std::shared_ptr<Lattice1D> lattice;
};
#endif // HARMONICOSCILLATORRENORMALISATION_HH