Modules

ModuleSource FileDescription
mod_arpack_type mod_arpack_type.f08

Contains a dedicated type for the various settings of the ARPACK solvers. All variables that are used in different solver settings are defined, initialised and set in this module.

mod_arrays mod_arrays.f08

Module to handle imported numerical equilibria. Contains subroutines to retrieve the equilibrium arrays from a file specified in the parfile.

mod_assert mod_assert.f08

Module defining the assertion routine used by assert.fpp.

Read more…
mod_atmosphere_curves mod_atmosphere_curves.f08

Contains data for a realistic solar atmosphere model taken from Avrett, E. H., & Loeser, R. (2008). Models of the solar chromosphere and transition region from SUMER and HRTS observations: formation of the extreme-ultraviolet spectrum of hydrogen, carbon, and oxygen. ApJS, 175(1), 229. link.

mod_background mod_background.f08
mod_banded_matrix mod_banded_matrix.f08

Contains types and routines to handle banded matrices. We use the same conventions as explained in the LAPACK guide http://www.netlib.org/lapack/lug/node124.html.

mod_banded_matrix_hermitian mod_banded_matrix_hermitian.f08

Contains types and routines to handle banded Hermitian matrices. We use the same conventions as explained in the LAPACK guide http://www.netlib.org/lapack/lug/node124.html.

mod_banded_operations mod_banded_operations.f08
mod_base_efs mod_base_efs.f08
mod_basis_function_names mod_basis_function_names.f08
mod_basis_functions mod_basis_functions.f08
mod_bg_density mod_bg_density.f08
mod_bg_magnetic mod_bg_magnetic.f08
mod_bg_temperature mod_bg_temperature.f08
mod_bg_velocity mod_bg_velocity.f08
mod_boundary_manager mod_boundary_manager.f08
mod_build_quadblock mod_build_quadblock.f08
mod_check_values mod_check_values.f08

This module contains various methods to check for small, NaN or negative values, equal values or inf values. Interfaces are provided for functionality with real and complex variables.

mod_conduction_settings mod_conduction_settings.f08
mod_console mod_console.f08
mod_cooling_curve_names mod_cooling_curve_names.f08
mod_cooling_curves mod_cooling_curves.f08
mod_cooling_settings mod_cooling_settings.f08
mod_data_colgan mod_data_colgan.f08
mod_data_dalgarno mod_data_dalgarno.f08
mod_data_dalgarno2 mod_data_dalgarno2.f08
mod_data_jccorona mod_data_jccorona.f08
mod_data_mlsolar mod_data_mlsolar.f08

log10 temperature values from Melemma and Lundqvist (2002), solar metallicity

Read more…
mod_data_rosner mod_data_rosner.f08
mod_data_spex mod_data_spex.f08
mod_data_spex_enh mod_data_spex_enh.f08
mod_derived_ef_names mod_derived_ef_names.f08
mod_derived_efs mod_derived_efs.f08
mod_dims mod_dims.f08
mod_ef_assembly mod_ef_assembly.f08
mod_eigenfunctions mod_eigenfunctions.f08
mod_equilibrium mod_equilibrium.f08

Parent module governing all equilibrium types and submodules. This module contains all equilibrium types and the initial declarations of the module subroutines. Every equilibrium submodule extends this module, implementing one of the module subroutines declared here. All "main" equilibrium configurations are set in the submodules. The ones that depend on "main" arrays, like radiative cooling, are set here through calls to their respective modules.

Read more…
   smod_equil_adiabatic_homo smod_equil_adiabatic_homo.f08

This submodule defines a simple, adiabatic homogeneous medium in Cartesian geometry. The geometry can be overridden using the parfile.

Read more…
   smod_equil_constant_current smod_equil_constant_current.f08

This submodule defines an equilibrium in cylindrical geometry with a constant axial current. The geometry can be overridden using the parfile.

Read more…
   smod_equil_coronal_flux_tube smod_equil_coronal_flux_tube.f08

This submodule defines a magnetic flux tube embedded in a uniform magnetic environment. In this case the flux tube is under coronal conditions where the subscript e denotes the outer region. More specifically the equilibrium is defined as . The geometry can be overridden in the parfile, and is cylindrical by default for .

Read more…
   smod_equil_couette_flow smod_equil_couette_flow.f08

This submodule defines a steady plane Couette flow in a Cartesian geometry with flow and viscosity.

Read more…
   smod_equil_discrete_alfven smod_equil_discrete_alfven.f08

This submodule defines an equilibrium in cylindrical geometry with an axial current profile (), modelling a solar coronal loop in which discrete Alfvén waves are present. The geometry can be overridden in the parfile.

Read more…
   smod_equil_flow_driven_instabilities smod_equil_flow_driven_instabilities.f08

This submodule defines flow driven instabilities in a Cartesian geometry. This equilibrium can not be called explicitly from the parfile, but rather acts as a "parent setup" for the Rayleigh-Taylor and Kelvin-Helmholtz submodules which use this specific kind of equilibrium but with different parameters. This submodule is called within its implicit children.

Read more…
   smod_equil_gold_hoyle smod_equil_gold_hoyle.f08

This submodule defines a Gold-Hoyle equilibrium in cylindrical geometry. This equilibrium configuration models a filament with a uniform twist such that all fieldlines perform an equal amount of turns around the cylinder axis. The geometry can be overridden in the parfile.

Read more…
   smod_equil_gravito_acoustic smod_equil_gravito_acoustic.f08

This submodule defines an equilibrium in Cartesian geometry with a stratified equilibrium profile, giving rise to gravito-acoustic waves. No magnetic fields are included, such that this treats the hydrodynamic regime. The geometry can be overridden using the parfile.

Read more…
   smod_equil_gravito_mhd smod_equil_gravito_mhd.f08

This submodule defines an equilibrium in Cartesian geometry with a stratified equilibrium profile, giving rise to gravito-MHD waves. The geometry can be overridden using the parfile.

Read more…
   smod_equil_harris_sheet smod_equil_harris_sheet.f08

This submodule defines a resistive equilibrium with tearing modes created by a Harris sheet.

Read more…
   smod_equil_interchange_modes smod_equil_interchange_modes.f08

This submodule defines an exponentially stratified medium in Cartesian geometry with a constant gravity term and magnetic shear. The geometry can be overridden in the parfile.

Read more…
   smod_equil_internal_kink_instability smod_equil_internal_kink_instability.f08

This submodule defines internal kink modes in force-free magnetic fields. The geometry is cylindrical with parabolic density and velocity profiles, The geometry can be overridden in the parfile.

Read more…
   smod_equil_isothermal_atmosphere smod_equil_isothermal_atmosphere.f08

This submodule defines an equilibrium in Cartesian geometry with a stratified equilibrium profile, representing a solar magnetic atmosphere. The equilibrium is isothermal with a constant magnetic field. The scale height is given by The geometry is fixed to Cartesian, boundaries can be overridden using the parfile.

Read more…
   smod_equil_kelvin_helmholtz_cd smod_equil_kelvin_helmholtz_cd.f08

This submodule defines an unperturbed magnetised jet model in cylindrical geometry, giving rise to Kelvin-Helmholtz and current-driven instabilities. The geometry is fixed for this problem; the cylinder wall is dependent on the equilibrium parameters and is given by 2rj.

Read more…
   smod_equil_KHI smod_equil_KHI.f08

This submodule defines Kelvin-Helmholtz instabilities in Cartesian geometry. This equilibrium is a specific case of the flow driven instabilities. No magnetic fields are considered in this case (pure HD).

Read more…
   smod_equil_magnetothermal_instabilities smod_equil_magnetothermal_instabilities.f08

This submodule defines an equilibrium containing magnetothermal instabilities in a cylindrical geometry. The geometry can be overridden in the parfile.

Read more…
   smod_equil_MRI smod_equil_MRI_accretion.f08

This submodule defines magneto-rotational instabilities in an accretion disk. Due to the special nature of this equilibrium x_start is hardcoded to one and can not be overridden in the parfile, the same goes for the geometry which is hardcoded to 'cylindrical'. The outer edge can be chosen freely. This equilibrium is chosen in such a way that the angular rotation is of order unity, implying Keplerian rotation. The thin-disk approximation is valid with small magnetic fields, but still large enough to yield magneto-rotational instabilities. Gravity is assumed to go like .

Read more…
   smod_equil_photospheric_flux_tube smod_equil_photospheric_flux_tube.f08

This submodule defines a magnetic flux tube embedded in a uniform magnetic environment. In this case the flux tube is under photospheric conditions where the subscript e denotes the outer region. More specifically the equilibrium is defined as . The geometry can be overridden in the parfile, and is cylindrical by default for .

Read more…
   smod_equil_resistive_homo smod_equil_resistive_homo.f08

This submodule defines a simple, homogeneous medium in Cartesian geometry with a constant resistivity value. The geometry can be overridden using the parfile.

Read more…
   smod_equil_resistive_tearing smod_equil_resistive_tearing.f08

This submodule defines an equilibrium in Cartesian geometry with a constant resistivity value. Parameters are taken in such a way as to allow for resistive tearing modes. The geometry can be overridden using the parfile.

Read more…
   smod_equil_resistive_tearing_flow smod_equil_resistive_tearing_flow.f08

This submodule defines an equilibrium in Cartesian geometry with a flow profile and a constant resistivity value. Parameters are taken in such a way as to allow for resistive tearing modes. The geometry can be overridden using the parfile.

Read more…
   smod_equil_resonant_absorption smod_equil_resonant_absorption.f08

This submodule defines an inhomogeneous medium in Cartesian geometry with a constant resistivity value. Two (constant) density profiles are defined which are connected by a sine profile, representing the interface inbetween. This density profile allows for resonant absorption, the geometry can be overridden in the parfile.

Read more…
   smod_equil_rotating_plasma_cylinder smod_equil_rotating_plasma_cylinder.f08

This submodule defines a cylindrical equilibrium, resembling a rotating plasma cylinder. The geometry can be overridden using the parfile.

Read more…
   smod_equil_RTI smod_equil_RTI.f08

This submodule defines Rayleigh-Taylor instabilities in Cartesian geometry. This equilibrium is a specific case of the flow driven instabilities.

Read more…
   smod_equil_RTI_KHI smod_equil_RTI_KHI.f08

This submodule defines Rayleigh-Taylor and Kelvin-Helmholtz instabilities in Cartesian geometry. This equilibrium is a specific case of the flow driven instabilities.

Read more…
   smod_equil_RTI_theta_pinch smod_equil_RTI_theta_pinch.f08

This submodule defines Rayleigh-Taylor instabilities in rotating theta pinches. The straight cylinder approximation is used with a constant angular frequency. Density and pressure profiles decrease over the domain, with a uni-directional increasing magnetic field profile. Mode numbers correspond to HD Rayleigh-Taylor instabilities, while represent MHD RTIs. The geometry is hardcoded to 'cylindrical', the domain is forced to through division by x_end.

Read more…
   smod_equil_suydam_cluster smod_equil_suydam_cluster.f08

This submodule defines a cylindrical equilibrium in which a Suydam surface is present, such that this gives rises to Suydam cluster modes. The geometry can be overriden using the parfile.

Read more…
   smod_equil_taylor_couette smod_equil_taylor_couette.f08

This submodule defines a steady Taylor-Couette flow in a cylindrical geometry where a fluid is confined between two (rotating) coaxial cylinders (without a magnetic field).

Read more…
   smod_equil_tc_pinch smod_equil_tc_pinch.f08

This submodule defines a steady Taylor-Couette flow in a cylindrical geometry where a plasma is confined between two (rotating) coaxial cylinders with an azimuthal magnetic field and constant resistivity.

Read more…
   smod_numerical smod_equil_numerical.f08

Example submodule for numerically-defined equilibria.

   smod_user_defined smod_user_defined.f08

Submodule for user-defined equilibria. Look at the examples in the equilibria subdirectory or consult the website for more information.

mod_equilibrium_params mod_equilibrium_params.f08

Module containing all equilibrium parameters. All parameters used in the equilibrium submodules are defined here for convenience, including the wave numbers and . All of these values are NaN initially, such that variables that are not properly set propagate their value and are easy to spot in follow-up checks.

Read more…
mod_equilibrium_settings mod_equilibrium_settings.f08
mod_essential_boundaries mod_essential_boundaries.f08

zeroing out the corresponding row and column. Depends on the matrix that is used.

mod_exceptions mod_exceptions.f08

Module to explicitly handle exceptions. Depending on the application at hand we override what happens when an exception is raised, which is useful for testing purposes (no error stop if we expect something to fail). Loosely based on an example given in https://github.com/Goddard-Fortran-Ecosystem/pFUnit_demos/blob/main/Basic/src/throw.F90

mod_flow_settings mod_flow_settings.f08
mod_function_utils mod_function_utils.f08
mod_get_indices mod_get_indices.f08

Module defining convenient index retrieval functions on various arrays.

mod_global_variables mod_global_variables.f08
mod_gravity mod_gravity.f08
mod_gravity_settings mod_gravity_settings.f08
mod_grid mod_grid.f08

Module containing all grid-related things. Contains subroutines to create the base grid, Gaussian grid and scale factors. An integral of in can be approximated with where and are the weights and nodes of the Gaussian quadrature. The Gaussian grid is hence set up in every interval across the nodes as

mod_grid_settings mod_grid_settings.f08
mod_hall mod_hall.f08

Module containing Hall-related routines. Sets the Hall and electron inertia factors based on normalisations and specified profiles.

mod_hall_settings mod_hall_settings.f08
mod_heating mod_heating.f08
mod_heating_settings mod_heating_settings.f08
mod_heatloss mod_heatloss.f08
mod_input mod_input.f08

Module to handle parfile reading. Contains subroutines to retrieve the parfile based on the commandline arguments and to read the parfile, setting the global variables.

mod_inspections mod_inspections.f08

Module to inspect if certain conditions are fulfilled by doing additional sanity checks on the equilibrium configuration. For cylindrical geometries we check if is an integer and if the on-axis values obey regularity conditions. Equilibrium balance for both the Cartesian and cylindrical cases is checked.

mod_integration mod_integration.f08

Module responsible for integration of differential equations, useful when setting equilibria or integrating the equilibrium equation. Contains subroutines to numerically solve the following systems of differential equations: These are solved using a fifth-order Runge-Kutta method.

mod_interpolation mod_interpolation.f08

Module responsible for table interpolations and array lookups. Contains subroutines for table interpolations, numerical derivatives of arrays and lookup functions. Subroutines are loosely based on routines implemented in the MPI-AMRVAC code.

mod_io_settings mod_io_settings.f08
mod_linear_systems mod_linear_systems.f08

Module containing functions to solve linear systems .

mod_logging mod_logging.f08
mod_matrix_element_node mod_matrix_element_node.f08
mod_matrix_elements mod_matrix_elements.f08
mod_matrix_manager mod_matrix_manager.f08
   smod_conduction_matrix smod_conduction_matrix.f08
   smod_flow_matrix smod_flow_matrix.f08
   smod_hall_matrix smod_hall_matrix.f08
   smod_heatloss_matrix smod_heatloss_matrix.f08
   smod_regular_matrix smod_regular_matrix.f08
   smod_resistive_matrix smod_resistive_matrix.f08
   smod_viscosity_matrix smod_viscosity_matrix.f08
mod_matrix_node mod_matrix_node.f08

Module that contains the implementation of nodes in the linked-list matrix representation.

mod_matrix_row mod_matrix_row.f08

Module that contains the implementation of a single row of nodes in the linked-list matrix representation.

mod_matrix_structure mod_matrix_structure.f08

Module that contains the datastructure for a linked-list matrix representation.

mod_natural_boundaries mod_natural_boundaries.f08
   smod_natural_bounds_conduction smod_natural_bounds_conduction.f08
   smod_natural_bounds_flow smod_natural_bounds_flow.f08
   smod_natural_bounds_hall smod_natural_bounds_hall.f08
   smod_natural_bounds_regular smod_natural_bounds_regular.f08
   smod_natural_bounds_resistive smod_natural_bounds_resistive.f08
   smod_natural_bounds_viscosity smod_natural_bounds_viscosity.f08
mod_output mod_output.f08
mod_painting mod_painting.f08

This module handles formatting of terminal-printed strings. Contains subroutines to colourise strings.

mod_physical_constants mod_physical_constants.f08

All physical constants used in the code are defined in this module. We include values both in SI units and in cgs units for convenience. All values are taken from the NRL Plasma Formulary.

mod_physics mod_physics.f08
mod_physics_settings mod_physics_settings.f08
mod_physics_utils mod_physics_utils.f08
mod_radiative_cooling mod_radiative_cooling.f08

Module containing radiative cooling-related routines. This module is responsible for initialising the radiative cooling variables and a correct handling of the cooling curves. If an interpolated cooling curve is selected this module calls the interpolation module to create one.

mod_resistivity mod_resistivity.f08

Module containing resistivity-related routines, calculates and sets the resistivity values based on the equilibrium configuration.

mod_resistivity_settings mod_resistivity_settings.f08
mod_settings mod_settings.f08
mod_solar_atmosphere mod_solar_atmosphere.f08

Module to set a realistic solar atmosphere, using tabulated density and temperature profiles (see mod_atmosphere_curves), in Cartesian geometries only.

mod_solver_settings mod_solver_settings.f08
mod_solvers mod_solvers.f08

Parent module for everything solver-related. Interfaces to the different submodules are defined here, and the solve_evp routine calls the correct solver based on parfile settings.

   smod_arpack_main smod_arpack_main.f08

Main module for the Arnoldi-type solvers. Contains interfaces to the general Arnoldi procedures (general, shift-invert, etc.).

      smod_arpack_general smod_arpack_general.f08

Module containing the implementation for the ARPACK general-type solver, that is, given the general eigenvalue problem find eigenvalues that satisfy a given criterion.

      smod_arpack_shift_invert smod_arpack_shift_invert.f08

Module containing the implementation for the ARPACK shift-invert-type solver, that is, given the general eigenvalue problem choose a shift and solve the problem thereby finding eigenvalues of the shifted problem that satisfy a given criterion.

   smod_inverse_iteration smod_inverse_iteration.f08

Submodule containing the implementation of the inverse iteration algorithm. TODO more docs

   smod_qr_cholesky smod_qr_cholesky.f08

Submodule containing the implementation of the QR-cholesky algorithm. Using LAPACKS's zpbtrf and BLAS's zgbtrs, the original problem is written as a standard eigenvalue problem as where is positive definite and . Eventually a call to LAPACK's zgeev routine is done to obtain all eigenvalues and eigenvectors.

   smod_qr_invert smod_qr_invert.f08

Submodule containing the implementation of the QR-invert algorithm. The original problem is written as a standard eigenvalue problem through . This is done using a LU decomposition via LAPACKS's zgbsv. Eventually a call to LAPACK's zgeev routine is done to obtain all eigenvalues and eigenvectors.

   smod_qz_direct smod_qz_direct.f08

Submodule containing the implementation of the QZ-direct algorithm. We keep the general form of the eigenvalue problem and solve this directly by calling LAPACK's zggev3 routine.

mod_state_vector mod_state_vector.f08
mod_state_vector_component mod_state_vector_component.f08
mod_state_vector_names mod_state_vector_names.f08
mod_thermal_conduction mod_thermal_conduction.f08

This module is responsible for calculating and setting the thermal conduction values based on the equilibrium configuration.

mod_timing mod_timing.f08

Module to provide timing facilities.

Read more…
mod_transform_matrix mod_transform_matrix.f08

Contains various subroutines and functions to switch between linked-list matrix representations, banded matrix representations, and full array matrices.

mod_units mod_units.f08
mod_version mod_version.f08

Simple module, containing only version-related stuff. Versioning is done in a separate module to avoid cluttering the commit history of for example mod_global_variables or mod_output every time an update to the code is done. The Legolas version is added to the datfile as a string and has common MAJOR.MINOR.PATCH formatting. This means:

Read more…
mod_viscosity_settings mod_viscosity_settings.f08