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

Generated by: LCOV version 2.0-1