OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
AmrObject.cpp
Go to the documentation of this file.
1 #include "AmrObject.h"
2 
4  : AmrObject(CHARGE_DENSITY, 0.75, 1.0e-15)
5 { }
6 
7 
9  double scaling,
10  double chargedensity)
11  : tagging_m(tagging)
12  , scaling_m(scaling)
13  , chargedensity_m(chargedensity)
14  , maxNumPart_m(1)
15  , minNumPart_m(1)
16  , refined_m(false)
17  , amrSolveTimer_m(IpplTimings::getTimer("AMR solve"))
18  , amrRegridTimer_m(IpplTimings::getTimer("AMR regrid"))
19 { }
20 
21 
23 { }
24 
25 
27  tagging_m = tagging;
28 }
29 
30 
31 void AmrObject::setTagging(std::string tagging) {
32  tagging = Util::toUpper(tagging);
33 
34  if ( tagging == "POTENTIAL" )
35  tagging_m = TaggingCriteria::POTENTIAL;
36  else if (tagging == "EFIELD" )
37  tagging_m = TaggingCriteria::EFIELD;
38  else if ( tagging == "MOMENTA" )
39  tagging_m = TaggingCriteria::MOMENTA;
40  else if ( tagging == "MAX_NUM_PARTICLES" )
41  tagging_m = TaggingCriteria::MAX_NUM_PARTICLES;
42  else if ( tagging == "MIN_NUM_PARTICLES" )
43  tagging_m = TaggingCriteria::MIN_NUM_PARTICLES;
44  else if ( tagging == "CHARGE_DENSITY" )
45  tagging_m = TaggingCriteria::CHARGE_DENSITY;
46  else
47  throw OpalException("AmrObject::setTagging(std::string)",
48  "Not supported refinement criteria "
49  "[CHARGE_DENSITY | POTENTIAL | EFIELD | "
50  "MOMENTA | MAX_NUM_PARTICLES | MIN_NUM_PARTICLES].");
51 }
52 
53 
54 void AmrObject::setScalingFactor(double scaling) {
55  scaling_m = scaling;
56 }
57 
58 
59 void AmrObject::setChargeDensity(double chargedensity) {
60  chargedensity_m = chargedensity;
61 }
62 
63 
64 void AmrObject::setMaxNumParticles(size_t maxNumPart) {
65  maxNumPart_m = maxNumPart;
66 }
67 
68 
69 void AmrObject::setMinNumParticles(size_t minNumPart) {
70  minNumPart_m = minNumPart;
71 }
72 
73 
74 const bool& AmrObject::isRefined() const {
75  return refined_m;
76 }
77 
78 
79 std::string AmrObject::enum2string(int number) {
80  std::string tagging = "";
81  switch ( number ) {
82  case TaggingCriteria::CHARGE_DENSITY:
83  tagging = "CHARGE_DENSITY";
84  break;
85  case TaggingCriteria::POTENTIAL:
86  tagging = "POTENTIAL";
87  break;
88  case TaggingCriteria::EFIELD:
89  tagging = "EFIELD";
90  break;
91  case TaggingCriteria::MOMENTA:
92  tagging = "MOMENTA";
93  break;
94  case TaggingCriteria::MIN_NUM_PARTICLES:
95  tagging = "MIN_NUM_PARTICLES";
96  break;
97  case TaggingCriteria::MAX_NUM_PARTICLES:
98  tagging = "MAX_NUM_PARTICLES";
99  break;
100  default:
101  throw OpalException("AmrObject::enum2string(int)",
102  "Only numbers between 0 and 5 allowed.");
103  }
104  return tagging;
105 }
constexpr double e
The value of .
Definition: Physics.h:40
size_t minNumPart_m
Tagging value for MIN_NUM_PARTICLES.
Definition: AmrObject.h:178
static std::string enum2string(int number)
Definition: AmrObject.cpp:79
The base class for all OPAL exceptions.
Definition: OpalException.h:28
TaggingCriteria tagging_m
Tagging strategy.
Definition: AmrObject.h:170
std::string toUpper(const std::string &str)
Definition: Util.cpp:130
size_t maxNumPart_m
Tagging value for MAX_NUM_PARTICLES.
Definition: AmrObject.h:176
TaggingCriteria
Methods for tagging cells for refinement.
Definition: AmrObject.h:27
const bool & isRefined() const
Definition: AmrObject.cpp:74
void setMinNumParticles(size_t minNumPart)
Definition: AmrObject.cpp:69
void setScalingFactor(double scaling)
Definition: AmrObject.cpp:54
void setMaxNumParticles(size_t maxNumPart)
Definition: AmrObject.cpp:64
double scaling_m
Scaling factor for tagging [0, 1].
Definition: AmrObject.h:172
virtual ~AmrObject()
Definition: AmrObject.cpp:22
void setTagging(TaggingCriteria tagging)
Definition: AmrObject.cpp:26
double chargedensity_m
Tagging value for CHARGE_DENSITY.
Definition: AmrObject.h:174
bool refined_m
Only set to true in AmrObject::initFineLevels()
Definition: AmrObject.h:180
void setChargeDensity(double chargedensity)
Definition: AmrObject.cpp:59