Program Listing for File UF26Field.h
↰ Return to documentation for file (include/crpropa/magneticField/UF26Field.h)
#ifndef CRPROPA_UF26FIELD_H
#define CRPROPA_UF26FIELD_H
#include <string>
#include "crpropa/magneticField/MagneticField.h"
#include "crpropa/Grid.h"
#include "crpropa/Units.h"
namespace crpropa {
class UF26Field : public MagneticField {
public:
enum ModelType {
expDisk,
ringDisk
};
UF26Field(const ModelType mt);
UF26Field() = delete;
#ifdef CRPROPA_HAVE_FFTW3F
void randomTurbulent(int seed = 0, double lc = 30 * parsec);
#endif
void setTurbulentGrid(ref_ptr<Grid3f> grid);
ref_ptr<Grid3f> getTurbulentGrid();
bool isUsingTurbulentField() const;
double getTurbulentStrength(const Vector3d &pos) const;
Vector3d getTurbulentField(const Vector3d &pos) const;
Vector3d getField(const Vector3d &pos) const;
ModelType getModelType() const;
std::string getModelName() const;
private:
// rms strengths in microgauss for positions in kpc
double rmsDisk(const Vector3d &posInKpc) const;
double rmsAnnulus(const Vector3d &posInKpc) const;
const ModelType fModelType;
// disk, Eqs. (12)-(14) [kpc, microgauss]
double fDiskB = 0;
double fDiskZ = 0;
double fDiskL = 0;
double fDiskRc = 0;
double fDiskRmax = 0;
double fDiskWmax = 0;
// annulus, Eq. (15) [kpc, microgauss]
double fAnnulusB = 0;
double fAnnulusR = 0;
double fAnnulusW = 0;
double fAnnulusZ = 0;
bool fHasAnnulus = false;
// pre-calculated: sqrt(R_sun^2 + r_c^2)
double fSunRadiusSmoothed = 0;
// turbulent grid with B_rms = 1
ref_ptr<Grid3f> turbulentGrid;
};
} // namespace crpropa
#endif // CRPROPA_UF26FIELD_H