EarthField.h

Classes

EarthField -- EarthField class model calculations (full description)

class EarthField

Types

enum EarthFieldTypes

IGRF
Standard IGRF model
NONE
Make the field equal to zero
STANDARD = IGRF
Standard default model if none specified

Interface

Public Members
EarthField()
EarthField(const EarthField &other)
explicit EarthField(EarthFieldTypes model, Double catepoch=51544.5)
EarthField &operator=(const EarthField &other)
~EarthField()
const Vector<Double> &operator()(const MVPosition &pos)
const Vector<Double> *derivative(const MVPosition &pos)
void init()
void init(EarthFieldTypes model, Double catepoch=51544.5)
void refresh()
Private Members
void copy(const EarthField &other)
void fillField()
void calcField(const MVPosition &pos)

Description

Review Status

Date Reviewed:
yyyy/mm/dd
Programs:
Tests:

Prerequisite

Etymology

Earth magnetic Field model

Synopsis

EarthField forms the class for Earth magnetic field calculations. It is a simple container with the selected model, and the mean epoch.
The method is selected from one of the following: Epochs can be specified as the MJD (with defined constants MeasData::MJD2000 and MeasData::MJD1950 or the actual MJD), leading to the following constructors: Actual EarthField for a certain position on Earth is calculated by the () operator. Arguments can be: The returned value is a 3D vector of the field (in nT) in ITRF coordinates. The derivative (d-1) can be obtained as well by derivative(MVPosition).
An EarthField can be re-initialised with a different method and/or other epoch with the init() functions (same format as constructors).

To bypass the full, lengthy calculation actual returned values are calculated using the derivative if within about 50 km (error less than about 10-2 G). A call to refresh() will re-initiate calculations from scratch.
The following details can be set with the Aipsrc mechanism:

The field model is assumed to be constant over the time-span the class is used.

The calculations are based on a routine provided by the IGRF community. See ftp.ngdc.noaa.gov/Solid_Earth/Mainfld_Mag/Models/IAGA, routine IGRFLIB.FOR. The values are in nT (10uG).

Example

	EarthField mine(EarthField::STANDARD,
                      45837.0);		// define EarthField type
						// for 84/05/17
	MPosition pos;
      MeasTable::Observatory(pos, "WSRT");	// Obervatory position
  // Make sure correct position frame used
      MVPosition x(MPosition::Convert(pos, MPosition::ITRF)().getValue());
	MVEarthMagnetic now = mine(x);		// get EarthField

Motivation

To have a container (with history) for field calculations

To Do

Member Description

enum EarthFieldTypes

Known EarthField calculation models

EarthField()

Default constructor, generates default J2000 EarthField identification

EarthField(const EarthField &other)

Copy constructor

explicit EarthField(EarthFieldTypes model, Double catepoch=51544.5)

Constructor with epoch in MJulian days (default is J2000)

EarthField &operator=(const EarthField &other)

Copy assignment

~EarthField()

const Vector<Double> &operator()(const MVPosition &pos)

Return the EarthField components. Note that the value returned has only a lifetime as long as the EarthField container exists, and no new derivative is asked for.

const Vector<Double> *derivative(const MVPosition &pos)

Return derivatives of field (to X, Y, Z). Note that the value returned has only a lifetime as long as the EarthField container exists, and no new components or derivative is calculated. The returned value should not be deleted.

void init()
void init(EarthFieldTypes model, Double catepoch=51544.5)

Re-initialise EarthField object with specified model and epoch, or defaults STANDARD and J2000.

void refresh()

Refresh calculations

void copy(const EarthField &other)

Make a copy

void fillField()

Create correct default fixedEpoch and catalogue field data

void calcField(const MVPosition &pos)

Calculate EarthField for longitude and latitude and altitude (m)