Source code for gtsimulation.Medium.magnetosphere.ionosphere_iri

import numpy as np
import datetime
import pyproj
import iri2016

from gtsimulation.Medium import GTGeneralMedium


[docs] class GTiri2016(GTGeneralMedium):
[docs] def to_string(self): return self.model
def __init__(self, date: datetime.datetime): super().__init__() self.region = "Magnetosphere" self.model = "IRI-2016" self.model_elements = ['nO+', 'nN+', 'nH+', 'nHe+', 'nO2+', 'nNO+'] self.date = date self.transformer = pyproj.Transformer.from_crs({"proj":'geocent', "ellps":'WGS84', "datum":'WGS84'}, {"proj":'latlong', "ellps":'WGS84', "datum":'WGS84'})
[docs] def calculate_model(self, x, y, z): lon, lat, alt = self.convert_xyz_to_lla(x, y, z) alt *= 1e-3 # m -> km model_output = iri2016.IRI(self.date, [alt, alt, 1], lat, lon) self.density = [2.656, 2.325, 0.167, 0.664, 5.333, 4.983] @ \ model_output[['nO+', 'nN+', 'nH+', 'nHe+', 'nO2+', 'nNO+']].to_array().to_numpy() * 1e-23
[docs] def convert_xyz_to_lla(self, x, y, z): return self.transformer.transform(x, y, z, radians=False)
[docs] def get_density(self): return self.density[0]
[docs] def get_element_abundance(self): # return self.element_abundance pass