module_diffstar_base.f90 Source File


This file depends on

sourcefile~~module_diffstar_base.f90~~EfferentGraph sourcefile~module_diffstar_base.f90 module_diffstar_base.f90 sourcefile~module_id_base.f90 module_id_base.f90 sourcefile~module_diffstar_base.f90->sourcefile~module_id_base.f90 sourcefile~module_utility.f90 module_utility.f90 sourcefile~module_diffstar_base.f90->sourcefile~module_utility.f90 sourcefile~module_id_base.f90->sourcefile~module_utility.f90

Files dependent on this one

sourcefile~~module_diffstar_base.f90~~AfferentGraph sourcefile~module_diffstar_base.f90 module_diffstar_base.f90 sourcefile~module_diffstar_lorene.f90 module_diffstar_lorene.f90 sourcefile~module_diffstar_lorene.f90->sourcefile~module_diffstar_base.f90 sourcefile~submodule_diffstar_base_access.f90 submodule_diffstar_base_access.f90 sourcefile~submodule_diffstar_base_access.f90->sourcefile~module_diffstar_base.f90 sourcefile~submodule_diffstar_base_io.f90 submodule_diffstar_base_io.f90 sourcefile~submodule_diffstar_base_io.f90->sourcefile~module_diffstar_base.f90 sourcefile~module_sphincs_id_full.f90 module_sphincs_id_full.f90 sourcefile~module_sphincs_id_full.f90->sourcefile~module_diffstar_lorene.f90 sourcefile~module_sphincs_id_lorene.f90 module_sphincs_id_lorene.f90 sourcefile~module_sphincs_id_lorene.f90->sourcefile~module_diffstar_lorene.f90 sourcefile~submodule_diffstar_lorene_access.f90 submodule_diffstar_lorene_access.f90 sourcefile~submodule_diffstar_lorene_access.f90->sourcefile~module_diffstar_lorene.f90 sourcefile~submodule_diffstar_lorene_constructor.f90 submodule_diffstar_lorene_constructor.f90 sourcefile~submodule_diffstar_lorene_constructor.f90->sourcefile~module_diffstar_lorene.f90 sourcefile~submodule_diffstar_lorene_io.f90 submodule_diffstar_lorene_io.f90 sourcefile~submodule_diffstar_lorene_io.f90->sourcefile~module_diffstar_lorene.f90 sourcefile~submodule_diffstar_lorene_memory.f90 submodule_diffstar_lorene_memory.f90 sourcefile~submodule_diffstar_lorene_memory.f90->sourcefile~module_diffstar_lorene.f90 sourcefile~submodule_diffstar_lorene_properties.f90 submodule_diffstar_lorene_properties.f90 sourcefile~submodule_diffstar_lorene_properties.f90->sourcefile~module_diffstar_lorene.f90 sourcefile~submodule_diffstar_lorene_read.f90 submodule_diffstar_lorene_read.f90 sourcefile~submodule_diffstar_lorene_read.f90->sourcefile~module_diffstar_lorene.f90 sourcefile~convergence_test.f90 convergence_test.f90 sourcefile~convergence_test.f90->sourcefile~module_sphincs_id_full.f90 sourcefile~convergence_test.f90->sourcefile~module_sphincs_id_lorene.f90 sourcefile~sphincs_id.f90 sphincs_id.f90 sourcefile~sphincs_id.f90->sourcefile~module_sphincs_id_full.f90 sourcefile~sphincs_id.f90->sourcefile~module_sphincs_id_lorene.f90

Contents


Source Code

! File:         module_diffstar_base.f90
! Authors:      Francesco Torsello (FT)
!************************************************************************
! Copyright (C) 2020-2023 Francesco Torsello                            *
!                                                                       *
! This file is part of SPHINCS_ID                                       *
!                                                                       *
! SPHINCS_ID is free software: you can redistribute it and/or modify    *
! it under the terms of the GNU General Public License as published by  *
! the Free Software Foundation, either version 3 of the License, or     *
! (at your option) any later version.                                   *
!                                                                       *
! SPHINCS_ID is distributed in the hope that it will be useful,         *
! but WITHOUT ANY WARRANTY; without even the implied warranty of        *
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the          *
! GNU General Public License for more details.                          *
!                                                                       *
! You should have received a copy of the GNU General Public License     *
! along with SPHINCS_ID. If not, see <https://www.gnu.org/licenses/>.   *
! The copy of the GNU General Public License should be in the file      *
! 'COPYING'.                                                            *
!************************************************************************

MODULE diffstar_base

  !********************************************************
  !
  !# This MODULE contains the definition of TYPE diffstarbase,
  !  which is an ABSTRACT TYPE representing any possible
  !  type of initial data (|id|) for a differentially rotating
  !  star (|drs|) to be set up for |sphincsbssn|. That is, |drs| |id|
  !  produced with |lorene|, with |fuka|, etc.
  !
  !  PROCEDURES and variables shared by all the types
  !  of |drs| |id| should belong to TYPE diffstarbase, as
  !  they are inherited by its EXTENDED TYPES that
  !  represent more specific types of |drs| |id|.
  !
  !  FT 22.10.2021
  !
  !********************************************************


  USE id_base, ONLY: idbase
  USE utility, ONLY: ios, err_msg, max_length


  IMPLICIT NONE


  !********************************************************************
  !                                                                   *
  !  Definition of TYPE diffstarbase  (differentially rotating star)  *
  !                                                                   *
  !********************************************************************

  TYPE, ABSTRACT, EXTENDS(idbase):: diffstarbase
  !# ABSTRACT TYPE for |drs| |id| (produced with |lorene|, or with
  !  |fuka|, etc.; or produced with the same tool, but read in different ways,
  !  for example by linking to the |lorene| library, or reading the |id| from
  !  a lattice, etc.)


    !-------------------------------!
    !--  Parameters of the |drs|  --!
    !-------------------------------!

    DOUBLE PRECISION:: omega_c
    !! Central angular velocity \([{\rm rad/s}]\)

    DOUBLE PRECISION:: mass
    !! Baryonic mass of |drs| \([M_\odot]\)

    DOUBLE PRECISION:: adm_mass
    !! ADM mass of the |drs| \([M_\odot]\)

    DOUBLE PRECISION:: mass_grav
    !! Gravitational mass of |drs| \([M_\odot]\)

    DOUBLE PRECISION:: angular_momentum= 0.0D0
    !! Angular momentum of the |drs| \([G M_\odot^2/c]\)

    DOUBLE PRECISION:: tsw
    !# Ratio between the rotational kinetic and gravitatial potential energy
    !  \(T/|W|\).
    !
    !  See Section 6 in
    !  [Gourgoulhon et al, Astron.Astrophys.349:851,1999](https://arxiv.org/abs/astro-ph/9907225v1){:target="_blank"}
    !
    !  For axisymmetric configurations as those considered here, the
    !  threshold for dynamical bar-mode instability is \(T/|W|\sim 0.25\)
    !  [[Masaru Shibata et al 2000 ApJ 542 453](https://arxiv.org/pdf/astro-ph/0005378.pdf){:target="_blank"}].
    !  See also [Manca et al., Classical and Quantum Gravity, 24, 171](https://arxiv.org/abs/0705.1826){:target="_blank"}, Sec.3.3 in [Galeazzi et al., Astron Astrophys 541:A156](https://arxiv.org/abs/1101.2664){:target="_blank"}, and Sec.5.1.3 in [Paschalidis, V., Stergioulas, N., _Rotating stars in relativity_. Living Rev Relativ 20, 7 (2017)](https://link.springer.com/article/10.1007%2Fs41114-017-0008-x){:target="_blank"}.

    DOUBLE PRECISION:: grv2
    !# Error on the virial identity \({\rm GRV2}\).
    !
    !  See Section 3.5 in
    !  [Gourgoulhon et al, Astron.Astrophys.349:851,1999](https://arxiv.org/abs/astro-ph/9907225v1){:target="_blank"}.

    DOUBLE PRECISION:: grv3
    !# Error on the virial identity \({\rm GRV3}\).
    !
    !  See Section 3.5 in
    !  [Gourgoulhon et al, Astron.Astrophys.349:851,1999](https://arxiv.org/abs/astro-ph/9907225v1){:target="_blank"} .
    !
    !  The error is computed as the integral defined
    !  by Eq. (43) of [Gourgoulhon and Bonazzola, Class. Quantum Grav. 11, 443 (1994)](https://iopscience.iop.org/article/10.1088/0264-9381/11/2/015?pageTitle=IOPscience){:target="_blank"}
    !  divided by the integral of the matter terms.

    DOUBLE PRECISION, DIMENSION(3):: center
    !# Array containing the centers of the stars
    !  @todo add details

    DOUBLE PRECISION, DIMENSION(3):: barycenter
    !# Array containing the barycenters of the stars
    !  @todo add details

    DOUBLE PRECISION, DIMENSION(6):: radii

    DOUBLE PRECISION:: r_circ
    !# Circumferential radius

    DOUBLE PRECISION:: r_mean
    !# Mean radius

    DOUBLE PRECISION:: r_eq
    !# Equatorial radius at \(\phi=0\)

    DOUBLE PRECISION:: r_eq_pi2
    !# Equatorial radius at \(\phi=\dfrac{\pi}{2}\)

    DOUBLE PRECISION:: r_eq_pi
    !# Equatorial radius at \(\phi=\pi\)

    DOUBLE PRECISION:: r_eq_3pi2
    !# Equatorial radius at \(\phi=\dfrac{3\pi}{2}\)

    DOUBLE PRECISION:: r_pole
    !# Polar radius

    DOUBLE PRECISION:: r_ratio
    !# Ratio [[diffstarbase:r_pole]]/[[diffstarbase:r_eq]]

    DOUBLE PRECISION:: r_isco
    !# Radius of the Innermost Stable Circular Orbit (ISCO)

    DOUBLE PRECISION:: f_isco
    !# Orbital frequency of the Innermost Stable Circular Orbit (ISCO)

    DOUBLE PRECISION:: specific_energy_isco
    !# Specific energy of a test particle at the Innermost Stable Circular
    !  Orbit (ISCO)

    DOUBLE PRECISION:: specific_angular_momentum_isco
    !# Specific angular momentum of a test particle at the Innermost Stable
    !  Circular Orbit (ISCO)

    DOUBLE PRECISION:: surface_area
    !# Surface area

    DOUBLE PRECISION:: area_radius
    !# Areal (or circumferential) radius of |drs| [Msun_geo]
    !  Note that these is the areal radius of the star in the binary system,
    !  which is different than that of an isolated star. The latter is used
    !  in the mass-radius diagrams, together with the gravitatonal mass

    DOUBLE PRECISION:: ent_center
    !! Central enthalpy \([c^2]\)

    DOUBLE PRECISION:: nbar_center
    !! Central baryon number density \([L_\odot^{-3}]\)

    DOUBLE PRECISION:: rho_center
    !! Central baryon mass density \([M_\odot L_\odot^{-3}]\)

    DOUBLE PRECISION:: energy_density_center
    !! Central energy density \([M_\odot c^2 L_\odot^{-3}]\)

    DOUBLE PRECISION:: specific_energy_center
    !! Central specific energy \([c^2]\)

    DOUBLE PRECISION:: pressure_center
    !! Central pressure \([M_\odot c^2 L_\odot^{-3}]\)

    DOUBLE PRECISION:: redshift_eqf
    !! Forward redshift factor at equator

    DOUBLE PRECISION:: redshift_eqb
    !! Backward redshift factor at equator

    DOUBLE PRECISION:: redshift_pole
    !! Redshift factor at North pole

    CHARACTER(LEN=:), ALLOCATABLE:: eos
    !! Name of the equation of state (EoS) of star 1

    INTEGER:: eos_id
    !! |sphincsid| identifier for the |eos| of star 1


    !
    !-- Parameters of single polytropic equations of state for the two NSs
    !

    DOUBLE PRECISION:: gamma
    !! Single polytrope: polytropic index

    DOUBLE PRECISION:: kappa
    !! Single polytrope: polytropic constant [pure number]

    !
    !-- Parameters of the piecewise polytropic equation of state for NS 1
    !

    INTEGER:: npeos
    !! Piecewise polytrope: Number of polytropic pieces

    DOUBLE PRECISION:: gamma0
    !! Piecewise polytrope: polytropic index \(\gamma_0\)

    DOUBLE PRECISION:: gamma1
    !! Piecewise polytrope: polytropic index \(\gamma_1\)

    DOUBLE PRECISION:: gamma2
    !! Piecewise polytrope: polytropic index \(\gamma_2\)

    DOUBLE PRECISION:: gamma3
    !! Piecewise polytrope: polytropic index \(\gamma_3\)

    DOUBLE PRECISION:: kappa0
    !# Piecewise polytrope: polytropic constant \(\kappa_0\)
    !  [pure number]

    DOUBLE PRECISION:: kappa1
    !# Piecewise polytrope: polytropic constant \(\kappa_1\)
    !  [pure number]

    DOUBLE PRECISION:: kappa2
    !# Piecewise polytrope: polytropic constant \(\kappa_2\)
    !  [pure number]

    DOUBLE PRECISION:: kappa3
    !# Piecewise polytrope: polytropic constant \(\kappa_3\)
    !  [pure number]

    DOUBLE PRECISION:: logP1
    !# Piecewise polytrope: Base 10 exponent of the pressure at the first
    !  fiducial density (between \(\gamma_0\) and \(\gamma_1\))
    !  \([{\rm dyne/cm^2}]\)

    DOUBLE PRECISION:: logRho0
    !# Piecewise polytrope: Base 10 exponent of the first fiducial density
    !  (between \(\gamma_0\) and \(\gamma_1\)) \([{\rm g/cm^3}]\)

    DOUBLE PRECISION:: logRho1
    !# Piecewise polytrope: Base 10 exponent of the second fiducial density
    !  (between \(\gamma_1\) and \(\gamma_2\)) \([{\rm g/cm^3}]\)

    DOUBLE PRECISION:: logRho2
    !# Piecewise polytrope: Base 10 exponent of the third fiducial density
    !  (between \(\gamma_2\) and \(\gamma_3\)) \([{\rm g/cm^3}]\)

    CHARACTER(LEN=max_length), DIMENSION(1):: eos_filename
    !# Array of string containing the names of the files containing the |eos|
    !  to be used for each matter object.

    CHARACTER(LEN=:), ALLOCATABLE:: eos_table
    !# String containing the path to the files containing the table of the |eos|


    !
    !-- Spacetime fields
    !

    !> 1-D array storing the lapse function
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: lapse
    !> 1-D array storing the x component of the shift vector [c]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: shift_x
    !> 1-D array storing the y component of the shift vector [c]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: shift_y
    !> 1-D array storing the z component of the shift vector [c]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: shift_z
    !> 1-D array storing the xx component of the spatial metric [pure number]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: g_xx
    !> 1-D array storing the xy component of the spatial metric [pure number]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: g_xy
    !> 1-D array storing the xz component of the spatial metric [pure number]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: g_xz
    !> 1-D array storing the yy component of the spatial metric [pure number]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: g_yy
    !> 1-D array storing the yz component of the spatial metric [pure number]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: g_yz
    !> 1-D array storing the zz component of the spatial metric [pure number]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: g_zz
    !& 1-D array storing the xx component of the extrinsic curvature
    !  [c/MSun_geo]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: k_xx
    !& 1-D array storing the xy component of the extrinsic curvature
    !  [c/MSun_geo]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: k_xy
    !& 1-D array storing the xz component of the extrinsic curvature
    !  [c/MSun_geo]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: k_xz
    !& 1-D array storing the yy component of the extrinsic curvature
    !  [c/MSun_geo]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: k_yy
    !& 1-D array storing the yz component of the extrinsic curvature
    !  [c/MSun_geo]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: k_yz
    !& 1-D array storing the zz component of the extrinsic curvature
    !  [c/MSun_geo]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: k_zz

    !
    !-- Hydro fields
    !

    !> 1-D array storing the baryon mass density in the fluid frame [kg m^{-3}]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: baryon_density
    !> 1-D array storing the energy density [kg c^2 m^{-3}]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: energy_density
    !> 1-D array storing the specific internal energy [c^2]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: specific_energy
    !> 1-D array storing the pressure
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: pressure
    !> 1-D array storing the x component of the fluid 3-velocity with respect to
    !  the Eulerian observer [c]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: v_euler_x
    !> 1-D array storing the y component of the fluid 3-velocity with respect to
    !  the Eulerian observer [c]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: v_euler_y
    !> 1-D array storing the z component of the fluid 3-velocity with respect to
    !  the Eulerian observer [c]
    DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE:: v_euler_z


    CONTAINS


    !-------------------!
    !--  SUBROUTINES  --!
    !-------------------!


    PROCEDURE(get_eos_id_int), DEFERRED:: get_eos_id
    !! Returns an integer that identifies the equation of state


    !-----------------!
    !--  FUNCTIONS  --!
    !-----------------!


    !
    !-- FUNCTIONS that access PRIVATE member variables
    !

    PROCEDURE:: return_mass                 => get_mass
    PROCEDURE:: return_adm_mass             => get_adm_mass
    PROCEDURE:: return_center               => get_center
    PROCEDURE:: return_barycenter           => get_barycenter
    PROCEDURE:: return_eos_name             => get_eos
    PROCEDURE:: return_spatial_extent       => get_radii
    PROCEDURE:: print_summary               => print_summary_drs


    PROCEDURE, PUBLIC:: get_omega_c
    !! Returns [[diffstarbase:omega_c]]
    !PROCEDURE, PUBLIC:: get_mass
    !! Returns [[diffstarbase:mass]]
    PROCEDURE, PUBLIC:: get_mass_grav
    !! Returns [[diffstarbase:mass_grav]]
    PROCEDURE, PUBLIC:: get_angular_momentum
    !! Returns [[diffstarbase:angular_momentum]]
    PROCEDURE, PUBLIC:: get_tsw
    !! Returns [[diffstarbase:tsw]]
    PROCEDURE, PUBLIC:: get_grv2
    !! Returns [[diffstarbase:grv2]]
    PROCEDURE, PUBLIC:: get_grv3
    !! Returns [[diffstarbase:grv3]]
    PROCEDURE, PUBLIC:: get_r_circ
    !! Returns [[diffstarbase:r_circ]]
    PROCEDURE, PUBLIC:: get_r_mean
    !! Returns [[diffstarbase:r_mean]]
    PROCEDURE, PUBLIC:: get_r_eq
    !! Returns [[diffstarbase:r_eq]]
    PROCEDURE, PUBLIC:: get_r_eq_pi2
    !! Returns [[diffstarbase:r_eq_pi2]]
    PROCEDURE, PUBLIC:: get_r_eq_pi
    !! Returns [[diffstarbase:r_eq_pi]]
    PROCEDURE, PUBLIC:: get_r_eq_3pi2
    !! Returns [[diffstarbase:r_eq_3pi2]]
    PROCEDURE, PUBLIC:: get_r_pole
    !! Returns [[diffstarbase:r_pole]]
    PROCEDURE, PUBLIC:: get_r_ratio
    !! Returns [[diffstarbase:r_ratio]]
    PROCEDURE, PUBLIC:: get_r_isco
    !! Returns [[diffstarbase:r_isco]]
    PROCEDURE, PUBLIC:: get_f_isco
    !! Returns [[diffstarbase:f_isco]]
    PROCEDURE, PUBLIC:: get_specific_energy_isco
    !! Returns [[diffstarbase:specific_energy_isco]]
    PROCEDURE, PUBLIC:: get_specific_angular_momentum_isco
    !! Returns [[diffstarbase:specific_angular_momentum_isco]]
    PROCEDURE, PUBLIC:: get_surface_area
    !! Returns [[diffstarbase:surface_area]]
    PROCEDURE, PUBLIC:: get_area_radius
    !! Returns [[diffstarbase:area_radius]]
    PROCEDURE, PUBLIC:: get_ent_center
    !! Returns [[diffstarbase:ent_center]]
    PROCEDURE, PUBLIC:: get_nbar_center
    !! Returns [[diffstarbase:nbar_center]]
    PROCEDURE, PUBLIC:: get_rho_center
    !! Returns [[diffstarbase:rho_center]]
    PROCEDURE, PUBLIC:: get_energy_density_center
    !! Returns [[diffstarbase:energy_density_center]]
    PROCEDURE, PUBLIC:: get_specific_energy_center
    !! Returns [[diffstarbase:specific_energy_center]]
    PROCEDURE, PUBLIC:: get_pressure_center
    !! Returns [[diffstarbase:pressure_center]]
    !PROCEDURE, PUBLIC:: get_eos
    !! Returns [[diffstarbase:eos]]

    !
    !-- PROCEDURES to be used for single polytropic EOS
    !
    PROCEDURE, PUBLIC:: get_gamma
    !! Returns [[diffstarbase:gamma]]
    PROCEDURE, PUBLIC:: get_kappa
    !! Returns [[diffstarbase:kappa]]

    !
    !-- PROCEDURES to be used for piecewise polytropic EOS
    !
    PROCEDURE, PUBLIC:: get_npeos
    !! Returns [[diffstarbase:npeos]]
    PROCEDURE, PUBLIC:: get_gamma0
    !! Returns [[diffstarbase:gamma0]]
    PROCEDURE, PUBLIC:: get_gamma1
    !! Returns [[diffstarbase:gamma1]]
    PROCEDURE, PUBLIC:: get_gamma2
    !! Returns [[diffstarbase:gamma2]]
    PROCEDURE, PUBLIC:: get_gamma3
    !! Returns [[diffstarbase:gamma3]]
    PROCEDURE, PUBLIC:: get_kappa0
    !! Returns [[diffstarbase:kappa0]]
    PROCEDURE, PUBLIC:: get_kappa1
    !! Returns [[diffstarbase:kappa1]]
    PROCEDURE, PUBLIC:: get_kappa2
    !! Returns [[diffstarbase:kappa2]]
    PROCEDURE, PUBLIC:: get_kappa3
    !! Returns [[diffstarbase:kappa3]]
    PROCEDURE, PUBLIC:: get_logP1
    !! Returns [[diffstarbase:logP1]]
    PROCEDURE, PUBLIC:: get_logRho0
    !! Returns [[diffstarbase:logRho0]]
    PROCEDURE, PUBLIC:: get_logRho1
    !! Returns [[diffstarbase:logRho1]]
    PROCEDURE, PUBLIC:: get_logRho2
    !! Returns [[diffstarbase:logRho2]]


  END TYPE diffstarbase


  ABSTRACT INTERFACE

    FUNCTION get_eos_id_int( this )

      IMPORT:: diffstarbase
      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      INTEGER:: get_eos_id_int

    END FUNCTION get_eos_id_int

  END INTERFACE


  INTERFACE


    !------------------------------!
    !--  OVERRIDING SUBROUTINES  --!
    !------------------------------!


    MODULE SUBROUTINE print_summary_drs( this, filename )
    !# Prints a summary of the physical properties the system
    !  to the standard output and, optionally, to a formatted file whose name
    !  is given as the optional argument `filename`


      CLASS(diffstarbase), INTENT(IN):: this
      CHARACTER( LEN= * ), INTENT(INOUT), OPTIONAL:: filename
      !! Name of the formatted file to print the summary to

    END SUBROUTINE print_summary_drs


    !----------------------------!
    !--  OVERRIDING FUNCTIONS  --!
    !----------------------------!


    MODULE FUNCTION get_mass( this, i_matter )
    !! Returns [[diffstarbase:mass]]

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      INTEGER, INTENT(IN):: i_matter
      ! Result
      DOUBLE PRECISION:: get_mass

    END FUNCTION get_mass


    MODULE FUNCTION get_adm_mass( this )
    !! Returns 0 (the ADM mass is not necessarily known for this TYPE)

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_adm_mass

    END FUNCTION get_adm_mass


    MODULE FUNCTION get_center( this, i_matter )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      INTEGER, INTENT(IN):: i_matter
      !! Index of the matter object whose parameter is to return
      DOUBLE PRECISION, DIMENSION(3):: get_center

    END FUNCTION get_center


    MODULE FUNCTION get_barycenter( this, i_matter )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      INTEGER, INTENT(IN):: i_matter
      !! Index of the matter object whose parameter is to return
      DOUBLE PRECISION, DIMENSION(3):: get_barycenter

    END FUNCTION get_barycenter


    MODULE FUNCTION get_radii( this, i_matter )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      INTEGER, INTENT(IN):: i_matter
      !! Index of the matter object whose string is to return
      DOUBLE PRECISION, DIMENSION(6):: get_radii

    END FUNCTION get_radii


    MODULE FUNCTION get_eos( this, i_matter )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      INTEGER, INTENT(IN):: i_matter
      !! Index of the matter object whose string is to return
      CHARACTER(LEN=:), ALLOCATABLE:: get_eos

    END FUNCTION get_eos


    !-----------------!
    !--  FUNCTIONS  --!
    !-----------------!


    MODULE FUNCTION get_eos_id( this, i_matter )

      CLASS(diffstarbase), INTENT(IN):: this
      !! [[diffstarbase]] object owning this PROCEDURE
      INTEGER,             INTENT(IN):: i_matter
      !! Index of the matter object whose string is to return
      INTEGER:: get_eos_id
      !! Result

    END FUNCTION get_eos_id


    MODULE PURE FUNCTION get_gamma( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_gamma

    END FUNCTION get_gamma


    MODULE PURE FUNCTION get_kappa( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_kappa

    END FUNCTION get_kappa


    MODULE PURE FUNCTION get_omega_c( this )
    !! Returns [[diffstarbase:omega_c]]

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_omega_c

    END FUNCTION get_omega_c


    MODULE PURE FUNCTION get_mass_grav( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_mass_grav

    END FUNCTION get_mass_grav


    MODULE PURE FUNCTION get_angular_momentum( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_angular_momentum

    END FUNCTION get_angular_momentum


    MODULE PURE FUNCTION get_tsw( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_tsw

    END FUNCTION get_tsw


    MODULE PURE FUNCTION get_grv2( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_grv2

    END FUNCTION get_grv2


    MODULE PURE FUNCTION get_grv3( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_grv3

    END FUNCTION get_grv3


    MODULE PURE FUNCTION get_r_circ( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_circ

    END FUNCTION get_r_circ


    MODULE PURE FUNCTION get_r_mean( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_mean

    END FUNCTION get_r_mean


    MODULE PURE FUNCTION get_r_eq( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_eq

    END FUNCTION get_r_eq


    MODULE PURE FUNCTION get_r_eq_pi2( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_eq_pi2

    END FUNCTION get_r_eq_pi2


    MODULE PURE FUNCTION get_r_eq_pi( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_eq_pi

    END FUNCTION get_r_eq_pi


    MODULE PURE FUNCTION get_r_eq_3pi2( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_eq_3pi2

    END FUNCTION get_r_eq_3pi2


    MODULE PURE FUNCTION get_r_pole( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_pole

    END FUNCTION get_r_pole


    MODULE PURE FUNCTION get_r_ratio( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_ratio

    END FUNCTION get_r_ratio


    MODULE PURE FUNCTION get_r_isco( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_r_isco

    END FUNCTION get_r_isco


    MODULE PURE FUNCTION get_f_isco( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_f_isco

    END FUNCTION get_f_isco


    MODULE PURE FUNCTION get_specific_energy_isco( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_specific_energy_isco

    END FUNCTION get_specific_energy_isco


    MODULE PURE FUNCTION get_specific_angular_momentum_isco( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_specific_angular_momentum_isco

    END FUNCTION get_specific_angular_momentum_isco


    MODULE PURE FUNCTION get_surface_area( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_surface_area

    END FUNCTION get_surface_area


    MODULE PURE FUNCTION get_area_radius( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_area_radius

    END FUNCTION get_area_radius


    MODULE PURE FUNCTION get_ent_center( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_ent_center

    END FUNCTION get_ent_center


    MODULE PURE FUNCTION get_nbar_center( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_nbar_center

    END FUNCTION get_nbar_center


    MODULE PURE FUNCTION get_rho_center( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_rho_center

    END FUNCTION get_rho_center


    MODULE PURE FUNCTION get_energy_density_center( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_energy_density_center

    END FUNCTION get_energy_density_center


    MODULE PURE FUNCTION get_specific_energy_center( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_specific_energy_center

    END FUNCTION get_specific_energy_center


    MODULE PURE FUNCTION get_pressure_center( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_pressure_center

    END FUNCTION get_pressure_center


    MODULE PURE FUNCTION get_npeos( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      INTEGER:: get_npeos

    END FUNCTION get_npeos


    MODULE PURE FUNCTION get_gamma0( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_gamma0

    END FUNCTION get_gamma0


    MODULE PURE FUNCTION get_gamma1( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_gamma1

    END FUNCTION get_gamma1


    MODULE PURE FUNCTION get_gamma2( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_gamma2

    END FUNCTION get_gamma2


    MODULE PURE FUNCTION get_gamma3( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_gamma3

    END FUNCTION get_gamma3


    MODULE PURE FUNCTION get_kappa0( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_kappa0

    END FUNCTION get_kappa0


    MODULE PURE FUNCTION get_kappa1( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_kappa1

    END FUNCTION get_kappa1


    MODULE PURE FUNCTION get_kappa2( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_kappa2

    END FUNCTION get_kappa2


    MODULE PURE FUNCTION get_kappa3( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_kappa3

    END FUNCTION get_kappa3


    MODULE PURE FUNCTION get_logP1( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_logP1

    END FUNCTION get_logP1


    MODULE PURE FUNCTION get_logRho0( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_logRho0

    END FUNCTION get_logRho0


    MODULE PURE FUNCTION get_logRho1( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_logRho1

    END FUNCTION get_logRho1


    MODULE PURE FUNCTION get_logRho2( this )

      !> [[diffstarbase]] object which this PROCEDURE is a member of
      CLASS(diffstarbase), INTENT(IN):: this
      ! Result
      DOUBLE PRECISION:: get_logRho2

    END FUNCTION get_logRho2

  END INTERFACE


END MODULE diffstar_base