32 double gamma_,
double lambda_, std::size_t n_fields_)
39 "Gamma must be > 1 so that the origin is a false vacuum.");
46 for (std::size_t i = 0; i <
n_fields; ++i) {
47 mu(i) =
lambda / std::sqrt(n_fields);
54 const Eigen::VectorXd&
mu)
const 56 double exponent = -0.5*std::pow((coords - mu).norm(), 2);
57 return std::pow(2 * Pi, -(
n_fields / 2.0)) * std::exp(exponent);
61 const Eigen::VectorXd& coords,
const Eigen::VectorXd&
mu,
int i)
const 63 double exponent = -0.5*std::pow((coords - mu).norm(), 2);
64 return -std::pow(2 * Pi, -(
n_fields / 2.0))
65 * (coords(i) -
mu(i)) * std::exp(exponent);
69 const Eigen::VectorXd& coords,
const Eigen::VectorXd&
mu,
72 double exponent = -0.5*std::pow((coords - mu).norm(), 2);
73 double delta_ij = i == j ? 1.0 : 0.0;
74 return -std::pow(2 * Pi, -(
n_fields / 2.0))
75 *(delta_ij - (coords(i) -
mu(i))*(coords(j) -
mu(j)))*std::exp(exponent);
80 Eigen::VectorXd transformed_coords =
88 Eigen::VectorXd transformed_coords =
92 Eigen::VectorXd orig_partials(
n_fields);
93 for (std::size_t j = 0; j <
n_fields; ++j) {
94 orig_partials(j) = (-1.0)*(
100 Eigen::VectorXd partials = (
basis_transform.transpose()) * orig_partials;
105 const Eigen::VectorXd& coords,
int i,
int j)
const 107 Eigen::VectorXd transformed_coords =
112 for (std::size_t k = 0; k <
n_fields; ++k) {
113 for (std::size_t l = 0; l <
n_fields; ++l) {
114 double orig_partial = -(
117 partial2 += orig_partial *
virtual void apply_basis_change(const Eigen::MatrixXd &) override
Apply a change of basis matrix.
virtual double operator()(const Eigen::VectorXd &coords) const override
Evaluate potential at point.
contains definitions of Gaussian_potential class
Eigen::VectorXd origin_translation
double gaussian_deriv(const Eigen::VectorXd &, const Eigen::VectorXd &, int i) const
virtual double partial(const Eigen::VectorXd &coords, int i) const override
Partial derivative WRT coordinate i at a point.
virtual void add_constant_term(double) override
Add a constant offset to the potential.
Gaussian_potential(double gamma_, double lambda_, std::size_t n_fields_)
instantiate a new Gaussian potential
Exception indicating general setup error.
double gaussian(const Eigen::VectorXd &, const Eigen::VectorXd &) const
Eigen::MatrixXd basis_transform
virtual std::size_t get_number_of_fields() const override
double gaussian_deriv2(const Eigen::VectorXd &, const Eigen::VectorXd &, int i, int j) const
virtual void translate_origin(const Eigen::VectorXd &) override
Shift the location of the origin by a specified vector.