Version: SMASH-3.4
alphaclusterednucleus.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024
3  * SMASH Team
4  *
5  * GNU General Public License (GPLv3 or later)
6  */
7 #ifndef SRC_INCLUDE_SMASH_ALPHACLUSTEREDNUCLEUS_H_
8 #define SRC_INCLUDE_SMASH_ALPHACLUSTEREDNUCLEUS_H_
9 
10 #include <map>
11 #include <vector>
12 
13 #include "angles.h"
14 #include "configuration.h"
15 #include "forwarddeclarations.h"
16 #include "input_keys.h"
17 #include "nucleus.h"
18 #include "threevector.h"
19 
20 namespace smash {
21 
22 /**
23  * Child of \c Nucleus for alpha clustered nuclei.
24  *
25  * All options from the nucleus will still apply. The alpha-clustered nucleus
26  * adds new or updated features which are outlined below.
27  */
29  public:
30  /**
31  * Constructor which takes a configuration and the number of test particles.
32  *
33  * \param[in] config the input configuration object
34  * \param[in] n_test number of test particles
35  * \param[in] automatic whether or not the alpha-clustering parameters should
36  * be set automatically
37  */
38  AlphaClusteredNucleus(Configuration &config, int n_test, bool automatic);
39 
40  /**
41  * Alpha-clustering sampling routine. This routine samples the nucleon using
42  * the Woods-Saxon routine with parameters for Helium and shifts them towards
43  * one of the vertices of the tetrahedron
44  *
45  * \return Resulting spatial position of the nucleon
46  */
48 
49  /**
50  * Scales the tetrahedron vertex positions to have the specified side length.
51  *
52  * \param[in] side_length Side length to be used to scale the tetrahedron
53  */
54  void scale_tetrahedron_vertex_positions(double side_length);
55 
56  private:
57  /**
58  * Side length of the tetrahedron used for alpha-clustering.
59  *
60  * \note The default is set to the default of the projectile key, although
61  * this class is instantiated for the target, too. However, this should be
62  * fine since the keys defaults are forced to be the same in the database.
63  */
66  .default_value();
67  /**
68  * Positions of the vertices of the regular tetrahedron with center at (0,0,0)
69  * used for alpha-clustering.
70  */
71  std::vector<ThreeVector> tetrahedron_vertex_positions_ = {
72  {1, 0.0, 0.0},
73  {-1.0 / 3, std::sqrt(8) / 3, 0.0},
74  {-1.0 / 3, -std::sqrt(8) / 6, std::sqrt(24) / 6},
75  {-1.0 / 3, -std::sqrt(8) / 6, -std::sqrt(24) / 6}};
76 
77  /**
78  * An index to iterate through the vertices of the tetrahedron. Used in the
79  * alpha-clustering sampling routine to shift every 4th nucleon to the same
80  * vertex.
81  */
83 };
84 
85 } // namespace smash
86 
87 #endif // SRC_INCLUDE_SMASH_ALPHACLUSTEREDNUCLEUS_H_
Child of Nucleus for alpha clustered nuclei.
AlphaClusteredNucleus(Configuration &config, int n_test, bool automatic)
Constructor which takes a configuration and the number of test particles.
int tetrahedron_vertex_index_
An index to iterate through the vertices of the tetrahedron.
void scale_tetrahedron_vertex_positions(double side_length)
Scales the tetrahedron vertex positions to have the specified side length.
double tetrahedron_side_length_
Side length of the tetrahedron used for alpha-clustering.
std::vector< ThreeVector > tetrahedron_vertex_positions_
Positions of the vertices of the regular tetrahedron with center at (0,0,0) used for alpha-clustering...
ThreeVector distribute_nucleon() override
Alpha-clustering sampling routine.
Interface to the SMASH configuration files.
default_type default_value() const
Get the default value of the key.
Definition: key.h:217
A nucleus is a collection of particles that are initialized, before the beginning of the simulation a...
Definition: nucleus.h:27
The ThreeVector class represents a physical three-vector with the components .
Definition: threevector.h:31
Definition: action.h:24
static const Key< double > modi_collider_projectile_alphaClustered_sideLength
See user guide description for more information.
Definition: input_keys.h:4661