scivision/glowaurora

View on GitHub
glowaurora/runmsisGLOW.py

Summary

Maintainability
A
1 hr
Test Coverage
from pathlib import Path
import logging
from numpy import repeat, empty
from xarray import DataArray
from numpy import atleast_1d
from os import chdir
#
from sciencedates import datetime2gtd
#
from glowfort import tselec, meters, csw, gtd7
glowpath = Path(__file__).resolve().parents[1]
oldcwd = Path.cwd()


def rungtdGLOW(dtime, altkm, glat, glon, f107a, f107, ap, mass, tselecopts):
    chdir(str(glowpath))
    ap = atleast_1d(ap)
    if ap.size == 1:
        ap = repeat(ap, 7)
    species = ['He', 'O', 'N2', 'O2', 'Ar', 'Total', 'H', 'N', 'AnomalousO']
    ttypes = ['exotemp', 'heretemp']

    tselec(tselecopts)  # like the msis_driver example
    logging.debug(f'tselec options used:   {csw.sw}')  # don't use tretrv, it doesn't work

    iyd, utsec, stl = datetime2gtd(dtime, glon)

    altkm = atleast_1d(altkm)
    dens = empty((altkm.size, 9))
    temp = empty((altkm.size, 2))

    meters(1)  # makes output in m^-3 and kg/m^-3
    for i, a in enumerate(altkm):
        dens[i, :], temp[i, :] = gtd7(iyd, utsec, a, glat, glon, stl, f107a, f107, ap, mass)

    densd = DataArray(dens, dims=['z_km', 'species'],
                      coords={'z_km': altkm, 'species': species})
    tempd = DataArray(temp, dims=['z_km', 'temperature'],
                      coords={'z_km': altkm, 'temperature': ttypes})
    return densd, tempd