libjupitermag

Code for obtaining magnetic field vectors and traces from within Jupiter's magnetosphere.

https://github.com/mattkjames7/libjupitermag

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 34 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.4%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

Code for obtaining magnetic field vectors and traces from within Jupiter's magnetosphere.

Basic Info
  • Host: GitHub
  • Owner: mattkjames7
  • License: mit
  • Language: C++
  • Default Branch: main
  • Size: 11.7 MB
Statistics
  • Stars: 3
  • Watchers: 2
  • Forks: 1
  • Open Issues: 1
  • Releases: 8
Created over 3 years ago · Last pushed over 1 year ago
Metadata Files
Readme License Citation

README.md

libjupitermag

DOI

Code for obtaining magnetic field vectors and traces from within Jupiter's magnetosphere using various magnetic field models.

This is part of a community code project :

Magnetospheres of the Outer Planets Group Community Code

Journal Paper DOI: https://doi.org/10.1007/s11214-023-00961-3 (PDF via DOI, or https://rdcu.be/c5I71, see Journal Publication.)

Authors

  • Matt James - University of Leicester

  • Gabby Provan - University of Leicester

  • Aneesah Kamran - University of Leicester

  • Rob Wilson - LASP

  • Marissa Vogt - Boston University

  • Marty Brennan - NASA JPL

  • Stan Cowley - University of Leicester

This module forms part of the JupiterMag package for Python.

Cloning and Building

This module requires a few submodules to be fetched, so the following command should clone everything:

bash git clone --recurse-sumodules https://github.com/mattkjames7/libjupitermag.git

This library requires g++, make and ld (Linux) or libtool (Mac) in order to be compiled. On Windows these tools can be provided by TDM-GCC.

To build in Linux and Mac simply run

```bash cd libjupitermag make

optionally install the library

sudo make install ```

where the installation defaults to /usr/local but can be changed using the PREFIX argument, e.g.:

bash sudo make install PREFIX=/usr

It can also be uninstalled,

bash make uninstall

Under Windows powershell/command line,

powershell cd libjupitermag ./compile.bat

or under Linux but building for Windows

bash cd libjupitermag make windows

After a successful build, a new library (libjupitermag.so) or DLL (libjupitermag.dll) should appear in the lib/libjupitermag directory.

Usage

The shared object library created by compiling this project should be accessible by various programming languages. This section mostly covers C++, other languages should be able to use the functions defined in the extern "C" section of the header file quite easily. For Python, it is straightforward to use ctypes to access this library, similarly IDL could use the CALL_EXTERNAL function.

Linking to the library

Here is a very basic example of how to link to the code using C++ and print the version of the library:

```cpp /* test.cc */

include

include

int main() { /* simply print the version of the library */ printf("libjupitermag version: $%d.%d.%d\n", LIBJUPITERMAGVERSIONMAJOR, LIBJUPITERMAGVERSIONMINOR, LIBJUPITERMAGVERSIONPATCH); return 0; } ```

If the library was installed using sudo make install then the library can be linked to during compiling time with:

bash g++ test.c -o test -ljupitermag

Otherwise, the header should be included using a relative or absolute path, e.g:

```cpp /* instead of this */

include

/* use seomthing like this */

include "include/jupitermag.h"

```

then compile, e.g.

```gcc

absoulte path

g++ test.cc -o test -L:/path/to/libjupitermag.so

or relative path

g++ test.cc -o test -Wl,-rpath='$$ORIGIN/../lib/libjupitermag' -L ..lib/libjupitermag -ljupitermag ```

Calling Field Models

Internal field models can be called using the InternalModel object, e.g.

```cpp

include

include

int main () { /* create an instance of the object */ InternalModel modelobj = InternalModel();

/* set the model to use */
modelobj.SetModel("jrm09");

/* get the model vectors at some position */
double x = 10.0, y = 0.0, z = 0.0;
double Bx, By, Bz;
modelobj.Field(x,y,z,&Bx,&By,&Bz);

printf("B at [%f,%f,%f] = [%f,%f,%f]\n",x,y,z,Bx,By,Bz);

} ```

There are also simple functions for each of the models included in the library, see the table below.

| Model | C String | Field Function | Reference | | ------------------ | ----------- | ---------------- | -------------------------------------------------------------------- | | JRM33 | jrm33 | jrm33Field | Connerney et al., 2022 | | JRM09 | jrm09 | jrm09Field | Connerney et al., 2018 | | ISaAC | isaac | isaacField | Hess et al., 2017 | | VIPAL | vipal | vipalField | Hess et al., 2011 | | VIP4 | vip4 | vip4Field | Connerney 2007 | | VIT4 | vit4 | vit4Field | Connerney 2007 | | O4 | o4 | o4Field | Connerney 1981 | | O6 | o6 | o6Field | Connerney 2007 | | GSFC15evs | gsfc15evs | gsfc15evsField | Connerney 1981 | | GSFC15ev | gsfc15ev | gsfc15evField | Connerney 1981 | | GSFC13ev | gsfc13ev | gsfc13evField | Connerney 1981 | | Ulysses 17ev | u17ev | u17evField | Connerney 2007 | | SHA | sha | shaField | Connerney 2007 | | Voyager 1 17ev | v117ev | v117evField | Connerney 2007 | | JPL15ev | jpl15ev | jpl15evField | Connerney 1981 | | JPL15evs | jpl15evs | jpl15evsField | Connerney 1981 | | P11A | p11a | p11aField | | | External Model | | | | | Con 2020 | con2020 | Con2020Field | Connerney et al., 1981; Edwards et al., 2001; Connerney et al., 2020 |

Field Tracing

Field tracing can be done using the Trace object, e.g.

```cpp

include

include

include

int main () { /* set initial position to start trace from (this can be an array for multiple traces) */ int n = 1; double x0 = 5.0; double y0 = 0.0; double z0 = 0.0; int nalpha = 1; double alpha = 0.0;

printf("Create field function vector\n");
/* store the function pointers for the components of the
model to be included in the trace */
std::vector<FieldFuncPtr> Funcs;

/* internal model */
Funcs.push_back(jrm09Field);

/* external model */
Funcs.push_back(Con2020Field);

/* initialise the trace object */
printf("Create Trace object\n");
Trace T(Funcs);

/* add the starting posiutions fo the traces */
printf("Add starting position\n");
T.InputPos(n,&x0,&y0,&z0);

/* configure the trace parameters, leaving this empty will
use default values for things like minimum and maximum step size  */
printf("Set the trace parameters \n");
T.SetTraceCFG();

/* set up the alpha calculation - the angles (in degrees) of each 
polarization angle. This is generally used for ULF waves */
printf("Initialize alpha\n");
T.SetAlpha(nalpha,&alpha);    

/* Trace */
printf("Trace\n");
T.TraceField();

/* trace distance, footprints, Rnorm */
printf("Footprints etc...\n");
T.CalculateTraceDist();
T.CalculateTraceFP();
T.CalculateTraceRnorm();

/* calculate halpha for each of the polarization angles 
   specified above*/
printf("H_alpha\n");
T.CalculateHalpha();

} ```

The above code traces along the magnetic field using the JRM09 internal and Con2020 external field models together. The trace coordinates and field vectors at each step can be obtained from the member variables T.x_, T.y_, T.z_, T.Bx_, T.By_ and T.Bz_, where each is a 2D array with the shape (T.n_,T.MaxLen_), where T.n_ is the number of traces and T.MaxLen_ is the maximum number of steps allowed in the trace. The number of steps takin in each trace is defined in the T.nstep_ array.

References

  • Connerney, J. E. P., Timmins, S., Herceg, M., & Joergensen, J. L. (2020). A Jovian magnetodisc model for the Juno era. Journal of Geophysical Research: Space Physics, 125, e2020JA028138. https://doi.org/10.1029/2020JA028138

  • Connerney, J. E. P., Acuña, M. H., and Ness, N. F. (1981), Modeling the Jovian current sheet and inner magnetosphere, J. Geophys. Res., 86( A10), 8370– 8384, doi:10.1029/JA086iA10p08370.

  • Connerney, J. E. P. (1981), The magnetic field of Jupiter: A generalized inverse approach, J. Geophys. Res., 86( A9), 7679– 7693, doi:10.1029/JA086iA09p07679.

  • Connerney, J. E. P., Acuña, M. H., and Ness, N. F. (1982), Voyager 1 assessment of Jupiter's planetary magnetic field, J. Geophys. Res., 87( A5), 3623– 3627, doi:10.1029/JA087iA05p03623.

  • Connerney, J.E.P.. (2007). Planetary Magnetism. Treatise on Geophysics. 10. 243-280. 10.1016/B978-044452748-6.00159-0.

  • Connerney, J. E. P., Kotsiaros, S., Oliversen, R. J., Espley, J. R., Joergensen, J. L., Joergensen, P. S., et al. (2018). A new model of Jupiter's magnetic field from Juno's first nine orbits. Geophysical Research Letters, 45, 2590– 2596. A New Model of Jupiter's Magnetic Field From Juno's First Nine Orbits - Connerney - 2018 - Geophysical Research Letters - Wiley Online Library

  • Connerney, J. E. P., Timmins, S., Oliversen, R. J., Espley, J. R., Joergensen, J. L., Kotsiaros, S., et al. (2022). A new model of Jupiter's magnetic field at the completion of Juno's Prime Mission. Journal of Geophysical Research: Planets, 127, e2021JE007055. A New Model of Jupiter's Magnetic Field at the Completion of Juno's Prime Mission - Connerney - 2022 - Journal of Geophysical Research: Planets - Wiley Online Library

  • Hess, S. L. G., Bonfond, B., Zarka, P., and Grodent, D. (2011), Model of the Jovian magnetic field topology constrained by the Io auroral emissions, J. Geophys. Res., 116, A05217, doi:10.1029/2010JA016262.Redirecting

  • Hess, S., Bonfond, B., Bagenal, F., & Lamy, L. (2017). A model of the Jovian internal field derived from in-situ and auroral constraints, doi:10.1553/PRE8s157

  • Edwards T.M., Bunce E.J., Cowley S.W.H. (2001), A note on the vector potential of Connerney et al.'s model of the equatorial current sheet in Jupiter's magnetosphere, Planetary and Space Science,49, 1115-1123,https://doi.org/10.1016/S0032-0633(00)00164-1.

Owner

  • Name: Dr Matt James
  • Login: mattkjames7
  • Kind: user
  • Location: Leicester, UK

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: libjupitermag
message: >-
  If you use this software, please cite it using the
  metadata from this file.
type: software
authors:
  - given-names: M. K.
    family-names: James
    email: mkj13@leicester.ac.uk
    affiliation: >-
      School of Physics and Astronomy, University of
      Leicester, Leicester, UK
    orcid: 'https://orcid.org/0000-0002-5699-6121'
  - given-names: G.
    family-names: Provan
    email: gp31@le.ac.uk
    affiliation: >-
      School of Physics and Astronomy, University of
      Leicester, Leicester, UK
    orcid: 'https://orcid.org/0000-0001-7442-4154'
  - given-names: A.
    family-names: Kamran
    email: ak741@leicester.ac.uk
    affiliation: >-
      School of Physics and Astronomy, University of
      Leicester, Leicester, UK
  - given-names: R. J.
    family-names: Wilson
    email: rob.wilson@lasp.colorado.edu
    affiliation: >-
      Laboratory for Atmospheric and Space Physics,
      University of Colorado Boulder, Boulder,
      Colorado, USA
    orcid: 'https://orcid.org/0000-0001-9276-2368'
  - given-names: M. F.
    family-names: Vogt
    email: mvogt@bu.edu
    affiliation: >-
      Center for Space Physics, Boston University,
      Boston, MA, USA
    orcid: 'https://orcid.org/0000-0003-4885-8615'
  - given-names: M. J.
    family-names: Brennan
    email: martin.brennan@jpl.nasa.gov
    affiliation: >-
      Jet Propulsion Laboratory, California Institute
      of Technology, Pasadena, CA, USA
    orcid: 'https://orcid.org/0000-0003-0796-4251'
  - given-names: S. W. H.
    family-names: Cowley
    email: swhc1@leicester.ac.uk
    affiliation: >-
      School of Physics and Astronomy, University of
      Leicester, Leicester, UK
    orcid: 'https://orcid.org/0000-0002-4041-0034'
identifiers:
  - type: doi
    value: 10.5281/zenodo.7306035
  - type: url
    value: 'https://github.com/mattkjames7/libjupitermag.git'

GitHub Events

Total
Last Year