LCOV - code coverage report
Current view: top level - const/public - const_def.f90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 70.0 % 20 14
Test Date: 2026-08-20 21:51:39 Functions: 100.0 % 1 1

            Line data    Source code
       1              : ! ***********************************************************************
       2              : !
       3              : !   Copyright (C) 2010-2020  The MESA Team
       4              : !
       5              : !   This program is free software: you can redistribute it and/or modify
       6              : !   it under the terms of the GNU Lesser General Public License
       7              : !   as published by the Free Software Foundation,
       8              : !   either version 3 of the License, or (at your option) any later version.
       9              : !
      10              : !   This program is distributed in the hope that it will be useful,
      11              : !   but WITHOUT ANY WARRANTY; without even the implied warranty of
      12              : !   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      13              : !   See the GNU Lesser General Public License for more details.
      14              : !
      15              : !   You should have received a copy of the GNU Lesser General Public License
      16              : !   along with this program. If not, see <https://www.gnu.org/licenses/>.
      17              : !
      18              : ! ***********************************************************************
      19              : 
      20              : module const_def
      21              : 
      22              :    implicit none
      23              : 
      24              :    public
      25              : 
      26              :    ! real number precision options: single, double, quad
      27              :    integer, parameter :: sp = selected_real_kind(p=5)   ! real32
      28              :    integer, parameter :: dp = selected_real_kind(p=15)  ! real64
      29              :    integer, parameter :: qp = selected_real_kind(p=30)  ! real128
      30              : 
      31              :    ! integer precision options
      32              :    integer, parameter :: i1 = selected_int_kind(2)   ! int8
      33              :    integer, parameter :: i2 = selected_int_kind(4)   ! int16
      34              :    integer, parameter :: i4 = selected_int_kind(9)   ! int32
      35              :    integer, parameter :: i8 = selected_int_kind(18)  ! int64
      36              : 
      37              :    integer, parameter :: strlen = 256  ! for character (len=strlen)
      38              : 
      39              : !
      40              : ! mathematical and physical constants (in cgs)
      41              : !
      42              : 
      43              : ! math constants
      44              :    real(dp), parameter :: pi = 3.1415926535897932384626433832795028841971693993751d0
      45              :    real(dp), parameter :: pi2 = pi*pi
      46              :    real(dp), parameter :: pi4 = 4*pi
      47              :    real(dp), parameter :: eulercon = 0.577215664901532861d0
      48              :    real(dp), parameter :: eulernum = 2.71828182845904523536028747135266249d0
      49              :    real(dp), parameter :: ln2 = 6.9314718055994529D-01  ! = log(2d0)
      50              :    real(dp), parameter :: ln3 = 1.0986122886681096D+00  ! = log(3d0)
      51              :    real(dp), parameter :: lnPi = 1.14472988584940017414343_dp  ! = log(pi)
      52              :    real(dp), parameter :: ln10 = 2.3025850929940455_dp  ! = log(10d0)
      53              :    real(dp), parameter :: iln10 = 0.43429448190325187_dp  ! = 1d0/log(10d0)
      54              :    real(dp), parameter :: a2rad = pi/180.0d0  ! angle to radians
      55              :    real(dp), parameter :: rad2a = 180.0d0/pi  ! radians to angle
      56              :    real(dp), parameter :: one_third = 1d0/3d0
      57              :    real(dp), parameter :: two_thirds = 2d0/3d0
      58              :    real(dp), parameter :: four_thirds = 4d0/3d0
      59              :    real(dp), parameter :: five_thirds = 5d0/3d0
      60              :    real(dp), parameter :: one_sixth = 1d0/6d0
      61              :    real(dp), parameter :: four_thirds_pi = four_thirds*pi
      62              :    real(dp), parameter :: ln4pi3 = 1.4324119583011810d0  ! = log(4*pi/3)
      63              :    real(dp), parameter :: two_13 = 1.2599210498948730d0  ! = pow(2d0,1d0/3d0)
      64              :    real(dp), parameter :: four_13 = 1.5874010519681994d0  ! = pow(4d0,1d0/3d0)
      65              :    real(dp), parameter :: sqrt2 = 1.414213562373095d0  ! = sqrt(2)
      66              :    real(dp), parameter :: sqrt_2_div_3 = 0.816496580927726d0  ! = sqrt(2/3)
      67              : 
      68              : ! exact physical constants
      69              : 
      70              :    ! CODATA 2018
      71              :    real(dp), parameter :: avo = 6.02214076d23  ! Avogadro constant (mole^-1)
      72              :    real(dp), parameter :: amu = 1d0/avo  ! atomic mass unit (g)
      73              :    real(dp), parameter :: clight = 2.99792458d10  ! speed of light in vacuum (cm s^-1)
      74              :    real(dp), parameter :: qe = (clight/10d0)*1.602176634d-19  ! elementary charge (esu == (g cm^3 s^-2)^(1/2))
      75              :    real(dp), parameter :: kerg = 1.380649d-16
      76              :    real(dp), parameter :: boltzm = kerg  ! Boltzmann constant (erg K^-1)
      77              :    real(dp), parameter :: planck_h = 6.62607015d-27  ! Planck constant (erg s)
      78              :    real(dp), parameter :: hbar = planck_h/(2*pi)
      79              :    real(dp), parameter :: cgas = boltzm*avo  ! ideal gas constant (erg K^-1)
      80              :    real(dp), parameter :: ev2erg = 1.602176634d-12  ! electron volt (erg)
      81              :    real(dp), parameter :: mev_to_ergs = 1d6*ev2erg
      82              :    real(dp), parameter :: mev_amu = mev_to_ergs/amu
      83              :    real(dp), parameter :: mev2gr = 1d6*ev2erg/(clight*clight)  ! MeV to grams
      84              :    real(dp), parameter :: Qconv = mev_to_ergs*avo
      85              :    real(dp), parameter :: kev = kerg/ev2erg  ! converts temp to ev (ev K^-1)
      86              :    real(dp), parameter :: boltz_sigma = (pi*pi*boltzm*boltzm*boltzm*boltzm)/(60*hbar*hbar*hbar*clight*clight)  ! Stefan-Boltzmann constant (erg cm^-2 K^-4 s^-1)
      87              :    real(dp), parameter :: crad = boltz_sigma*4/clight  ! radiation density constant, AKA "a" (erg cm^-3 K^-4); Prad = crad * T^4 / 3
      88              : 
      89              :    ! IAU
      90              :    real(dp), parameter :: au = 1.49597870700D13  ! (cm) - exact value defined by IAU 2009, 2012
      91              :    real(dp), parameter :: pc = (3.600D3*rad2a)*au  ! (cm) parsec, by definition
      92              :    real(dp), parameter :: dayyer = 365.25d0  ! days per (Julian) year
      93              :    real(dp), parameter :: secday = 24*60*60  ! seconds in a day
      94              :    real(dp), parameter :: secyer = secday*dayyer  ! seconds per year
      95              :    real(dp), parameter :: ly = clight*secyer  ! light year (cm)
      96              : 
      97              : ! inexact but very well measured physical constants
      98              : 
      99              :    real(dp), parameter :: mn = 1.67492749804d-24  ! neutron mass (g)
     100              :    real(dp), parameter :: mp = 1.67262192369d-24  ! proton mass (g)
     101              :    real(dp), parameter :: me = 9.1093837015d-28  ! electron mass (g)
     102              : 
     103              :    real(dp), parameter :: rbohr = 5.29177210903d-9  ! Bohr radius (cm)
     104              :    real(dp), parameter :: fine = 7.2973525693d-3   ! fine-structure constant
     105              :    real(dp), parameter :: hion = 13.605693122994d0  ! Rydberg constant (eV)
     106              : 
     107              :    real(dp), parameter :: sige = 6.6524587321d-25  ! Thomson cross section (cm^2)
     108              : 
     109              :    real(dp), parameter :: weinberg_theta = 0.22290d0  ! sin**2(theta_weinberg)
     110              :    real(dp), parameter :: num_neu_fam = 3.0d0  ! number of neutrino flavors = 3.02 plus/minus 0.005 (1998)
     111              : 
     112              : ! the following quantities are not exact
     113              : 
     114              :    real(dp), parameter :: standard_cgrav = 6.67430d-8  ! gravitational constant (g^-1 cm^3 s^-2)
     115              : 
     116              :    ! IAU 2015 Resolution B3
     117              :    ! standard gravitational parameters = G*M, units cm^3 s^-2
     118              :    real(dp), parameter :: mu_sun = 1.3271244d26
     119              :    real(dp), parameter :: mu_earth = 3.986004d20
     120              :    real(dp), parameter :: mu_jupiter = 1.2668653d23
     121              : 
     122              :    ! astronomical constants
     123              :    real(dp), parameter :: agesun = 4.57d9  ! solar age (years) from Bahcall et al, ApJ 618 (2005) 1049-1056.
     124              :    real(dp), parameter :: Msun = mu_sun/standard_cgrav  ! solar mass (g); gravitational mass, not baryonic
     125              :    real(dp), parameter :: Rsun = 6.957d10  ! solar radius (cm), IAU 2015 Resolution B3
     126              :    real(dp), parameter :: Lsun = 3.828d33  ! solar luminosity (erg s^-1), IAU 2015 Resolution B3
     127              :    real(dp), parameter :: Teffsun = 5772.0d0  ! solar effective temperature (K), IAU 2015 Resolution B3
     128              :    real(dp), parameter :: loggsun = 4.4380676273031332_dp  ! log10(mu_sun/(Rsun*Rsun)), can't call log10 because we don't have math_lib at this point
     129              :    real(dp), parameter :: mbolsun = 4.74d0  ! Bolometric magnitude of the Sun, IAU 2015 Resolution B2
     130              : 
     131              :    real(dp), parameter :: m_earth = mu_earth/standard_cgrav  ! earth mass (g)
     132              :    real(dp), parameter :: r_earth = 6.3781d8  ! earth equatorial radius (cm)
     133              :    real(dp), parameter :: r_earth_polar = 6.3568d8  ! earth polar radius (cm)
     134              : 
     135              :    real(dp), parameter :: m_jupiter = mu_jupiter/standard_cgrav  ! jupiter mass (g)
     136              :    real(dp), parameter :: r_jupiter = 7.1492d9  ! jupiter equatorial radius (cm)
     137              :    real(dp), parameter :: r_jupiter_polar = 6.6854d9  ! jupiter polar radius (cm)
     138              :    real(dp), parameter :: semimajor_axis_jupiter = 7.7857d13  ! jupiter semimajor axis (cm)
     139              : 
     140              :    ! many routines allow either a value, a log value, or both as args
     141              :    ! omitted args are indicated by passing 'arg_not_provided'
     142              : 
     143              :    real(dp), parameter :: arg_not_provided = -9d99
     144              :    real(dp), parameter :: missing_value = arg_not_provided
     145              : 
     146              :    character(len=strlen) :: mesa_dir
     147              :    character(len=strlen) :: mesa_data_dir  ! = trim(mesa_dir) // '/data'
     148              :    character(len=strlen) :: mesa_caches_dir
     149              :    character(len=strlen) :: mesa_temp_caches_dir  !Temp storage must be local to run
     150              : 
     151              :    logical :: use_mesa_temp_cache  ! If false then dont use mesa_temp_caches_dir
     152              : 
     153              :    ! mixing types
     154              :    ! NOTE: some packages may depend on the order
     155              :    integer, parameter :: crystallized = -1
     156              :    integer, parameter :: no_mixing = 0
     157              :    integer, parameter :: convective_mixing = 1
     158              :    integer, parameter :: overshoot_mixing = 2
     159              :    integer, parameter :: semiconvective_mixing = 3
     160              :    integer, parameter :: thermohaline_mixing = 4
     161              :    integer, parameter :: rotation_mixing = 5
     162              :    integer, parameter :: rayleigh_taylor_mixing = 6
     163              :    integer, parameter :: minimum_mixing = 7
     164              :    integer, parameter :: anonymous_mixing = 8  ! AKA "WTF_mixing"
     165              :    integer, parameter :: leftover_convective_mixing = 9  ! for regions with non-zero conv_vel that are not unstable to convection
     166              :    ! used for time dependent convection
     167              :    integer, parameter :: phase_separation_mixing = 10
     168              : 
     169              :    integer, parameter :: number_of_mixing_types = phase_separation_mixing + 1
     170              : 
     171              : contains
     172              : 
     173           16 :    subroutine do_const_init(mesa_dir_init, ierr)
     174              :       character(len=*), intent(in) :: mesa_dir_init
     175              :       integer, intent(out) :: ierr
     176              : 
     177              :       character(len=strlen) :: temp_caches_disable
     178              : 
     179           16 :       ierr = 0
     180              : 
     181           16 :       call get_environment_variable("MESA_CACHES_DIR", mesa_caches_dir)
     182              :       !write(*,*) 'MESA_CACHES_DIR "' // trim(mesa_caches_dir) // '"'
     183              : 
     184           16 :       mesa_dir = mesa_dir_init
     185           16 :       if (len_trim(mesa_dir) == 0) then
     186            0 :          call get_environment_variable("MESA_DIR", mesa_dir)
     187              :       end if
     188              : 
     189           16 :       if (len_trim(mesa_dir) > 0) then
     190           16 :          mesa_data_dir = trim(mesa_dir)//'/data'
     191              :       else
     192            0 :          write (*, *) 'ERROR: you must provide the path to your mesa directory,'
     193            0 :          write (*, *) 'either in your inlist or by setting the MESA_DIR environment variable.'
     194            0 :          ierr = -1
     195            0 :          return
     196              :       end if
     197              : 
     198              :       !write(*,*) 'mesa_data_dir ' // trim(mesa_data_dir)
     199              : 
     200           16 :       call get_environment_variable("MESA_TEMP_CACHES_DIR", mesa_temp_caches_dir)
     201              : 
     202           16 :       if (len_trim(mesa_temp_caches_dir) == 0) then
     203           16 :          mesa_temp_caches_dir = './.mesa_temp_cache'
     204              :       end if
     205              : 
     206              :       !Opt out for temp caches
     207           16 :       use_mesa_temp_cache = .true.
     208           16 :       call get_environment_variable("MESA_TEMP_CACHES_DISABLE", temp_caches_disable)
     209              : 
     210           16 :       if (len_trim(temp_caches_disable) > 0) then
     211            0 :          use_mesa_temp_cache = .false.
     212              :       end if
     213              : 
     214           16 :    end subroutine do_const_init
     215              : 
     216              : end module const_def
        

Generated by: LCOV version 2.0-1