19 use_skyrme_(conf.has_value({
"Skyrme"})),
20 use_symmetry_(conf.has_value({
"Symmetry"})) {
73 skyrme_a_ = conf.take({
"Skyrme",
"Skyrme_A"});
74 skyrme_b_ = conf.take({
"Skyrme",
"Skyrme_B"});
75 skyrme_tau_ = conf.take({
"Skyrme",
"Skyrme_Tau"});
90 symmetry_s_ = conf.take({
"Symmetry",
"S_Pot"});
94 Potentials::~Potentials() {}
96 double Potentials::skyrme_pot(
const double baryon_density)
const {
100 const int sgn = tmp > 0 ? 1 : -1;
102 return 1.0e-3 *
sgn *
103 (skyrme_a_ * std::abs(tmp) +
104 skyrme_b_ * std::pow(std::abs(tmp), skyrme_tau_));
107 double Potentials::symmetry_pot(
const double baryon_isospin_density)
const {
108 return 1.0e-3 * 2. * symmetry_s_ * baryon_isospin_density /
nuclear_density;
111 double Potentials::potential(
const ThreeVector &r,
const ParticleList &plist,
113 double total_potential = 0.0;
114 const bool compute_gradient =
false;
115 const auto scale = force_scale(acts_on);
118 return total_potential;
122 const double rho_eck = std::get<0>(
123 rho_eckart(r, plist, param_, DensityType::Baryon, compute_gradient));
124 total_potential += scale.first * skyrme_pot(rho_eck);
127 const double rho_iso = std::get<0>(
rho_eckart(
128 r, plist, param_, DensityType::BaryonicIsospin, compute_gradient));
129 const double sym_pot = symmetry_pot(rho_iso) * acts_on.
isospin3_rel();
130 total_potential += scale.second * sym_pot;
132 return total_potential;
135 std::pair<double, int> Potentials::force_scale(
const ParticleType &data)
const {
136 double skyrme_scale = data.
is_baryon() ? 1.0 : 0.0;
139 skyrme_scale = 1. / 3.;
143 skyrme_scale = 2. / 3.;
148 return std::make_pair(skyrme_scale, symmetry_scale);
151 std::pair<ThreeVector, ThreeVector> Potentials::skyrme_force(
154 const double MeV_to_GeV = 1.0e-3;
155 ThreeVector E_component(0.0, 0.0, 0.0), B_component(0.0, 0.0, 0.0);
157 const double dV_drho =
158 (skyrme_a_ + skyrme_b_ * skyrme_tau_ *
161 E_component -= dV_drho * (grad_rho + dj_dt);
162 B_component += dV_drho * rot_j;
164 return std::make_pair(E_component, B_component);
167 std::pair<ThreeVector, ThreeVector> Potentials::symmetry_force(
170 const double MeV_to_GeV = 1.0e-3;
171 ThreeVector E_component(0.0, 0.0, 0.0), B_component(0.0, 0.0, 0.0);
173 const double dV_drho = MeV_to_GeV * 2. * symmetry_s_ /
nuclear_density;
174 E_component -= dV_drho * (grad_rho + dj_dt);
175 B_component += dV_drho * rot_j;
177 return std::make_pair(E_component, B_component);
180 std::tuple<ThreeVector, ThreeVector, ThreeVector, ThreeVector>
181 Potentials::all_forces(
const ThreeVector &r,
const ParticleList &plist)
const {
182 const bool compute_gradient =
true;
189 const auto density_and_gradient =
190 rho_eckart(r, plist, param_, DensityType::Baryon, compute_gradient);
191 const double rho = std::get<0>(density_and_gradient);
192 const ThreeVector grad_rho = std::get<1>(density_and_gradient);
193 const ThreeVector dj_dt = std::get<2>(density_and_gradient);
194 const ThreeVector rot_j = std::get<3>(density_and_gradient);
195 F_skyrme = skyrme_force(rho, grad_rho, dj_dt, rot_j);
200 r, plist, param_, DensityType::BaryonicIsospin, compute_gradient);
201 const ThreeVector grad_rho = std::get<1>(density_and_gradient);
202 const ThreeVector dj_dt = std::get<2>(density_and_gradient);
203 const ThreeVector rot_j = std::get<3>(density_and_gradient);
204 F_symmetry = symmetry_force(grad_rho, dj_dt, rot_j);
207 return std::make_tuple(F_skyrme.first, F_skyrme.second, F_symmetry.first,
The ThreeVector class represents a physical three-vector with the components .
Collection of useful constants that are known at compile time.
std::tuple< double, ThreeVector, ThreeVector, ThreeVector > rho_eckart(const ThreeVector &r, const ParticleList &plist, const DensityParameters &par, DensityType dens_type, bool compute_gradient)
Calculates Eckart rest frame density and optionally the gradient of the density in an arbitary frame...
Potentials(Configuration conf, const DensityParameters ¶meters)
Potentials constructor.
double isospin3_rel() const
Particle type contains the static properties of a particle species.
constexpr double nuclear_density
Ground state density of symmetric nuclear matter [fm^-3].
int baryon_number() const
int sgn(T val)
Signum function.