Skip to content

Latest commit

 

History

History

MATLAB_dependencies

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
WARNING: This code is depreciated. Check https://github.com/egavazzi/AURORA.jl for an updated version. It is faster, has more functionalities, less bugs and is in active development.






=========================================================================
=========================================================================
=========================================================================
=========================================================================









AURORA Version 1.0 20191106
===========================

AURORA is a time-dependent multi-stream electron transport code,
suitable for modeling ionospheric electron-fluxes during periods of
rapidly varying electron-precipitation. Tools for calculating the
volume and column excitation and ionisation-rates are included.

1 Outline:
----------
This is a time-dependent multi-stream discrete-ordinate
electron-transport code, that solves the time-dependent electron
transport problem by integrating the coupled transport equations (for
the give number of pitch-angle-streams) using the Crank-Nicholson
scheme modified to use up-stream spatial differences. For a more
detailed description see AURORA_Documentation.pdf in the Documentation
directory. 

2, Installation:
----------------
1, Put the .zip-file where it suits you, typically in the directory
   where you have your personal matlab-files, projects and toolboxes.
2, Unpack it: unzip AURORA.zip
3, To Use the code in matlab it is necessary to have the matlab-path
   set. This can be done by changing the working directory to the
   AURORA directory (in unix this would be something like: 
   cd /home/myname/matlab/AURORA) and then run add_AURORA at the
   command-line. If one wants to start matlab to always be ready to
   use AURORA the convenient way would be to add the AURORA-directory
   to the matlab-path in the personal startup.m and then call
   add_AURORA later in that file. This would be done something like
   this in a unix-like environment:
   addpath('/home/myname/matlab/AURORA','-end')
   add_AURORA

3, Requirements:
----------------
The time-dependent multi-stream electron transport requires some
memory to run. The code calculates the electron flux as a function of
time (n_t time-steps), altitude (n_z steps in distance along B),
energy (n_E energy intervals) for a finite number of
pitch-angle-streams (n_mu), this results in a matrix with total size
of: [(n_z * n_mu) x n_t x n_E ], and during the calculations another
equal-sized array is needed. With typical sizes this requires two
arrays of size (400 * 10) x 210 x 1000, i.e. approximately 2 x 1e9
doubles, this put some constraints on how small computers one can use
for this. Further, the resulting electron-fluxes will be saved to
disk, which also requires some disk-space. The example-script,
Loop_finalRun_PnL_flickering10beams.m produces approximately 70 GB of
data, results for one 10-stream calculation covering 0.7 s with 3.3 ms
time-resolution, with peak-energy of 7 keV takes 3.5 GB. Given that,
some patience is needed, since the calculations takes some time.

4, Use
------
Typical use is to run the electron transport from a script like
Loop_finalRun_PnL_flickering10beams.m to produce electron-fluxes. This
script illustrates the electron-transport-calculation-part well. The
first step is set-up-calculations, specifying atmospheric
density-profiles, collision-cross-sections, phase-functions,
secondary-electron-spectra etc. For cleanliness of the calculations
the energy-grid should be smaller than the smallest
ionisation-threshold, i.e. less than 12 eV. Then the precipitating
electron-spectra has to be specified. The electron-precipitation is
stored as function-handles, @(t,E), for each pitch-angle-stream in a
cell-array. Then the time-dependent multi-stream electron-transport
commences. For computational efficiency it is preferable to split the
calculations into shorter time-slice, in order to keep the
variable-sizes small enough to avoid unnecessary swapping to disk. To
keep everything neat and tidy it is advisable to save input-data and
results in one directory for each run as is done in the
Loop_finalRun_PnL_flickering10beams.m example-script, where one
directory is generated for each input-precipitation-spectra. 

To help reproducible work additional scripts for working with the
electron-transport results are made: make_all_Q_lambda.m,
make_all_I_lambda.m, make_all_IQ_lambda_plots.m,
make_all_animations.m, make_all_Ie_top.m and make_all_IeEnQion.m. 

MAKE_ALL_Q_LAMBDA.M is a script that loops through directories with
results and calculates the time-altitude variation of
excitation/emission-rates for a number of emissions (currently 4278,
6730 7774 and 8446 and excitation of O1S and O1D), and saves them to
file. 

MAKE_ALL_I_LAMBDA.M is a script that integrates the column-emission
(excitation) rates (taking photon-time-of-flight) into account, this
script also loops into sub-directories and does the calculations in
each results-directory.

MAKE_ALL_IQ_LAMBDA_PLOTS.M is a script that produces plots of
altitude-time variation of volume-emission(excitation)-rates and
time-variation of normalised column-emission(excitation)-rates, for
all results-directories in a list of sub-directories. 

MAKE_ALL_ANIMATIONS.M is a script that produces animations of the
electron-fluxes, (three movies with cuts through the Ie(z,t,E) volume
with the fluxes for each pitch-angle-stream in sub-plots, and one with
time-variation of energy - pitch-angle-distribution at 4
altitudes). This script also loops through results-directories.

MAKE_ALL_IE_TOP.M is a script that extracts the electron-fluxes at the
highest altitude, providing a convenient means to generate checks on
the primary electron-spectra. This script also loops through
results-directories. 

Typical organised working with AURORA goes like this, with the
example-run from the Flickering-aurora modeling:

>> mkdir('/some/useful/storage/AURORA/RunDir-Ex1')
>> cd /some/useful/storage/AURORA/RunDir-Ex1
>> Loop_first_example_AURORA
>> % ...some time later...
>> results_dir = '/some/usefule/storage/AURORA/';
>> RunDirs = {'RunDir-Ex1'};
>> make_all_Q_lambda
>> make_all_I_lambda
>> make_all_IQ_lambda_plots
>> cxmax = 12;
>> make_all_animations
>> % If necessary to check the primary electron-fluxes:
>> % make_all_Ie_top

First time the set-up-script is run it pre-calculates the
pitch-angle-2-pitch-angle arrays, and the energy-degradation
distribution-array for primary electrons causing ionisation. These two
steps takes some time. Therefore the results are saved in
e_s_bd_180_170_150_120_100_90_80_60_30_10_0.mat (for the
pitch-angle-scattering arrays), and CascadingSpecN2ionization.mat
CascadingSpecO2ionization.mat and CascadingSpecOionization.mat. These
will be constant for all runs as long as the pitch-angle-distribution
remains fixed (for the pitch-angle-2-pitch-angle arrays) and the
energy-grid remains constant (for the CascadingSpecXionization.mat). 
Therefore it is worthwhile to keep track of those files once suitable
pitch-angle-limits and energy-grids are decided on. The
AURORA-distribution contains a file for the pitch-angle arrays, for
pitch-angle limits of 0, 10, 30, 60, 80, 90, 100, 120, 150, 170, 180
degrees and files for cascading for the energy-grid set up in
setup4etrptd10streams.m.

The make_all_*.m scripts then allows batch-processing of
electron-transport-results. These scripts look through all directories
in the RunDirs cell-array that exists in results_dir, and tries to
perform their tasks. These scripts are written such that they will
look through all directories in the RunDirs variable (that should be a
cell-array with directory-names) that lies in/under the directory
specified with the variable results_dir. The make_all_Q_lambda script
requires some time to run when there are a large number of directories
with results, therefore it will attempt to make some cunning checks
and skip directories that has already been processed. The
make_all_I_lambda.m script is not time-consuming enough to warrant
such capability, it will convert the altitude-time variations of
volume emission and excitation-rates to column emission and
excitation-rates. The make_all_Q_lambda.m make_all_I_lambda.m and
make_all_IQ_lambda_plots.m should be run in that order, since they
depend on the results from the scripts in that order. The
make_all_IQ_lambda_plots.m script will produce figures of the volume
emission-rates and normalised column emission(excitation) rates in a
directory 'Figures', this is currently hard-coded on line 20 in the
script. The make_all_animations script is producing animations
(uncompressed .avi-files) of the electron flux variation with
altitude-energy-time. As currently written the script is tailored for
the 10-stream-setup used in the Loop-examples. For other pitch-angle
set-ups other sub-plot layouts might be preferable. To adjust the
sub-plot-layout the variable to modify is: spp, at line 29 in the
script. To change the figure-size the variable to modify is: figPwide,
on line 33. Alternatively the user might prefer the more square
figure-size of: figPsquare.

5, Results
----------

AURORA produces results. If the time-dependent multi-stream electron
transport function Ie_Mstream_tz_2_aurora is called at the
matlab-prompt it will produce an array with size 
[(n_z * n_mu) x n_t x n_E], with the electron-fluxes in e^- per
energy-bin per m^2 per s. If run in a script like the Loop_*.m scripts
the results are saved to disk. Typical files in a results-directory
after post-processing with the make_all* scripts are:

-----------------------------------------------------------------------
 Size  filename                 contents           saved by
-----------------------------------------------------------
  15K  neutral_atm.mat          neutral atmosphere Loop_finalRun_PnL_flickering10beams
  271  curr_par.mat             precipitation pars Loop_finalRun_PnL_flickering10beams
 246M  IeFlickering-01.mat      e-fluxes and other Loop_finalRun_PnL_flickering10beams
 248M  IeFlickering-02.mat      related parameters Loop_finalRun_PnL_flickering10beams
 248M  IeFlickering-03.mat      energy, height,    Loop_finalRun_PnL_flickering10beams
 248M  IeFlickering-04.mat      time pitch-angle   Loop_finalRun_PnL_flickering10beams
 248M  IeFlickering-05.mat      limits and scat-   Loop_finalRun_PnL_flickering10beams
 247M  IeFlickering-06.mat      tering matrices    Loop_finalRun_PnL_flickering10beams
 248M  IeFlickering-07.mat                         Loop_finalRun_PnL_flickering10beams
 6.9M  Qzt_all_L.mat            column excitation  make_all_Q_lambda.m
 7.2K  J.mat                    electrical current make_all_Q_lambda.m
  14M  IeztE_3DEzoft.avi        differential flux  make_all_animations.m
  19M  IeztE_3DtzofE.avi        animations with    make_all_animations.m
 7.2M  IeztE_3DtEofz.avi        different scans    make_all_animations.m
  12M  IeztE_pitchangledist.avi and layouts        make_all_animations.m
 6.3M  Ie_top.mat               e-fluxes at top    make_all_Ie_top.m
  18K  I_lambda_of_t.mat        column intensities make_all_I_lambda.m
----------------------------------------------------------------------
For a total disk-space of ~1.8G, the total size varies with the peak
energy of the precipitation.

6, Primary electron spectra
---------------------------

For the primary electron-spectra there are a couple defined in the
e_spectra directory. Currently the spectra are defined, potentially
with some modulation, at the source-altitude from which
energy-dependent time-of-flight velocity-dispersion is applied down to
the top of the ionosphere. This should be possible to adapt to
arbitrary flux-variations, for example based on in-situ observations.

N, AURORA the name
------------------
The right to name this toolbox fell as is the tradition to my nearest
office-neighbour and he decided to use his right utilising his native
tongue to produce a rather extensive and exhaustive single-word-name:

Aikariippuvuusmonivirtaelektronikuljetusmatriisilaboratorio-
laskentaohjelmistokokonaisuus, 

which I have been informed "rolls very smoothly of the tongue". To
pander to a wider audience I have decided to shortened this to:

AURORA

i.e.:

AikariippUvuusmoniviRtaelektrOnikuljetusmatriisilaboRatorio-
laskentaohjelmistokokonAisuus,