Pre-calculations¶
preCalc.f90
¶
Description
This module is used to handle some pre-calculations of constants (moment of inertia, mass, volumes), determine the timesteps for I/O and fix boundary values for temperature/entropy and chemical composition
Quick access
- Routines
Needed modules
iso_fortran_env
(output_unit()
)constants
: module containing constants and parameters used in the code.num_param
: Module containing numerical and control parametersoutput_data
: This module contains the parameters for output controlprecision_mod
: This module controls the precision used in MagICtruncation
(n_r_max()
,l_max()
,minc()
,n_r_ic_max()
,nalias()
,n_cheb_ic_max()
,m_max()
,n_cheb_max()
,m_min()
,lm_max()
,n_phi_max()
,n_theta_max()
): This module defines the grid points and the truncationinit_fields
(bots()
,tops()
,s_bot()
,s_top()
,n_s_bounds()
,l_reset_t()
,topxi()
,botxi()
,xi_bot()
,xi_top()
,n_xi_bounds()
): This module is used to construct the initial solution.parallel_mod
(rank()
,n_procs()
,rank_with_r_lcr()
): This module contains the blocking informationlogic
(l_mag()
,l_cond_ic()
,l_non_rot()
,l_mag_lf()
,l_newmap()
,l_anel()
,l_heat()
,l_anelastic_liquid()
,l_cmb_field()
,l_save_out()
,l_to()
,l_tomovie()
,l_r_field()
,l_movie()
,l_lcr()
,l_dt_cmb_field()
,l_non_adia()
,l_temperature_diff()
,l_chemical_conv()
,l_probe()
,l_precession()
,l_finite_diff()
,l_full_sphere()
): Module containing the logicals that control the runradial_data
(radial_balance()
): This module defines the MPI decomposition in the radial direction.radial_functions
(rscheme_oc()
,temp0()
,r_cmb()
,ogrun()
,r_surface()
,visc()
,or2()
,r()
,r_icb()
,dltemp0()
,beta()
,rho0()
,rgrav()
,dbeta()
,alpha0()
,dentropy0()
,sigma()
,lambda()
,dlkappa()
,kappa()
,dlvisc()
,dllambda()
,divktemp0()
,radial()
,transportproperties()
,l_r()
): This module initiates all the radial functions (transport properties, density, temperature, cheb transforms, etc.)physical_parameters
(nvareps()
,pr()
,prmag()
,ra()
,rascaled()
,ek()
,ekscaled()
,opr()
,opm()
,o_sr()
,radratio()
,sigma_ratio()
,corfac()
,lffac()
,buofac()
,polind()
,nvarcond()
,nvardiff()
,nvarvisc()
,rho_ratio_ic()
,rho_ratio_ma()
,epsc()
,epsc0()
,ktops()
,kbots()
,interior_model()
,r_lcr()
,n_r_lcr()
,mode()
,tmagcon()
,oek()
,bn()
,imagcon()
,ktopxi()
,kbotxi()
,epscxi()
,epscxi0()
,sc()
,osc()
,chemfac()
,raxi()
,po()
,prec_angle()
): Module containing the physical parametershorizontal_data
(horizontal()
): Module containing functions depending on longitude and latitude plus help arrays depending on degree and orderintegration
(rint_r()
): Radial integration functionsuseful
(logwrite()
,abortrun()
): This module contains several useful routines.special
(l_curr()
,fac_loop()
,loopradratio()
,amp_curr()
,le()
,n_imp()
,l_imp()
): This module contains all variables for the case of an imposed IC dipole, an imposed external magnetic field and a special boundary forcing to excite inertial modestime_schemes
(type_tscheme()
): This module defines an abstract class type_tscheme which is employed for the time advance of the code.
Variables
Subroutines and functions
-
subroutine
precalculations/
precalc
(tscheme)¶ Purpose of this subroutine is to initialize the calc values, arrays, constants that are used all over the code.
- Parameters
tscheme [real ]
- Called from
- Call to
radial()
,transportproperties()
,horizontal()
,rint_r()
,abortrun()
,logwrite()
-
subroutine
precalculations/
precalctimes
(time, n_time_step)¶ Precalc. after time, time and dt has been read from startfile.
- Parameters
time [real ,out]
n_time_step [integer ,out]
- Called from
- Call to
-
subroutine
precalculations/
get_hit_times
(t, n_t_max, n_t, l_t, t_start, t_stop, dt, n_tot, n_step, string_bn, time, tscale)¶ This subroutine checks whether any specific times t(*) are given on input. If so, it returns their number n_r and sets l_t to true. If not, t(*) may also be defined by giving a time step dt or a number n_tot of desired output times and
t_stop>t_start
.- Parameters
t (n_t_max) [real ,inout] :: Times for output
n_t_max [integer ,in,optional/default=len(t)] :: Dimension of t(*)
n_t [integer ,out] :: No. of output times
l_t [logical ,out] :: =.true. if output times are defined
t_start [real ,inout] :: Starting time for output
t_stop [real ,inout] :: Stop time for output
dt [real ,inout] :: Time step for output
n_tot [integer ,inout] :: No. of output (times) if no times defined
n_step [integer ,inout] :: Ouput step in no. of time steps
string_bn [character(len=*),in]
time [real ,in] :: Time of start file
tscale [real ,in] :: Scale unit for time
- Called from
- Call to
-
subroutine
precalculations/
writeinfo
(n_out)¶ Purpose of this subroutine is to write the namelist to file unit n_out. This file has to be open before calling this routine.
- Parameters
n_out [integer ,in] :: Normalized OC surface :’‘,ES14.6)’) surf_cmb
- Called from
- Call to
radial.f90
¶
Description
This module initiates all the radial functions (transport properties, density, temperature, cheb transforms, etc.)
Quick access
- Variables
alpha0
,alpha1
,alpha2
,beta
,cheb_ic
,cheb_int
,cheb_int_ic
,cheb_norm_ic
,chebt_ic
,chebt_ic_even
,d2cheb_ic
,d2temp0
,dbeta
,dcheb_ic
,ddbeta
,ddlalpha0
,ddltemp0
,ddlvisc
,dentropy0
,divktemp0
,dlalpha0
,dlkappa
,dllambda
,dltemp0
,dlvisc
,dr_fac_ic
,dr_top_ic
,dxicond
,epscprof
,jvarcon
,kappa
,l_r
,lambda
,ndd_costf1
,ndd_costf1_ic
,ndd_costf2_ic
,ndi_costf1_ic
,ndi_costf2_ic
,o_r_ic
,o_r_ic2
,ogrun
,or1
,or2
,or3
,or4
,orho1
,orho2
,otemp1
,r
,r_cmb
,r_ic
,r_icb
,r_surface
,rgrav
,rho0
,sigma
,temp0
,visc
- Routines
finalize_radial_functions()
,getbackground()
,getentropygradient()
,initialize_radial_functions()
,polynomialbackground()
,radial()
,transportproperties()
Needed modules
iso_fortran_env
(output_unit()
)truncation
(n_r_max()
,n_cheb_max()
,n_r_ic_max()
,fd_ratio()
,rcut_l()
,fd_stretch()
,fd_order()
,fd_order_bound()
,l_max()
): This module defines the grid points and the truncationconstants
(sq4pi()
,one()
,two()
,three()
,four()
,half()
,pi()
): module containing constants and parameters used in the code.physical_parameters
: Module containing the physical parameterslogic
(l_mag()
,l_cond_ic()
,l_heat()
,l_anelastic_liquid()
,l_isothermal()
,l_anel()
,l_non_adia()
,l_centrifuge()
,l_temperature_diff()
,l_single_matrix()
,l_var_l()
,l_finite_diff()
,l_newmap()
,l_full_sphere()
,l_chemical_conv()
): Module containing the logicals that control the runradial_data
(nrstart()
,nrstop()
): This module defines the MPI decomposition in the radial direction.cosine_transform_odd
: This module contains the built-in type I discrete Cosine Transforms. This implementation is based on Numerical Recipes and FFTPACK. This only works forn_r_max-1 = 2**a 3**b 5**c
, with a,b,c integers….radial_scheme
(type_rscheme()
): This is an abstract type that defines the radial scheme used in MagICchebyshev
(type_cheb_odd()
)finite_differences
(type_fd()
): This module is used to calculate the radial grid when finite differences are requestedradial_der
(get_dr()
): Radial derivatives functionsmem_alloc
(bytes_allocated()
): This little module is used to estimate the global memory allocation used in MagICuseful
(logwrite()
,abortrun()
): This module contains several useful routines.parallel_mod
(rank()
): This module contains the blocking informationoutput_data
(tag()
): This module contains the parameters for output controlnum_param
(alph1()
,alph2()
): Module containing numerical and control parameters
Variables
-
radial_functions/
alpha0
(*) [real,allocatable/public]¶ Thermal expansion coefficient
-
-
radial_functions/
alpha1
[real,public]¶ Input parameter for non-linear map to define degree of spacing (0.0:2.0)
-
-
radial_functions/
alpha2
[real,public]¶ Input parameter for non-linear map to define central point of different spacing (-1.0:1.0)
-
-
radial_functions/
beta
(*) [real,allocatable/public]¶ Inverse of density scale height drho0/rho0
-
-
radial_functions/
cheb_ic
(*,*) [real,allocatable/public]¶ Chebyshev polynomials for IC
-
-
radial_functions/
cheb_int
(*) [real,allocatable/public]¶ Array for cheb integrals
-
-
radial_functions/
cheb_int_ic
(*) [real,allocatable/public]¶ Array for integrals of cheb for IC
-
-
radial_functions/
cheb_norm_ic
[real,public]¶ Chebyshev normalisation for IC
-
-
radial_functions/
chebt_ic
[costf_odd_t,public]¶
-
-
radial_functions/
chebt_ic_even
[costf_even_t,public]¶
-
-
radial_functions/
d2cheb_ic
(*,*) [real,allocatable/public]¶ Second radial derivative cheb_ic
-
-
radial_functions/
d2temp0
(*) [real,allocatable/private]¶ Second rad. derivative of background temperature
-
-
radial_functions/
dbeta
(*) [real,allocatable/public]¶ Radial gradient of beta
-
-
radial_functions/
dcheb_ic
(*,*) [real,allocatable/public]¶ First radial derivative of cheb_ic
-
-
radial_functions/
ddbeta
(*) [real,allocatable/public]¶ 2nd derivative of beta
-
-
radial_functions/
ddlalpha0
(*) [real,allocatable/public]¶ \(d/dr(1/alpha d\alpha/dr)\)
-
-
radial_functions/
ddltemp0
(*) [real,allocatable/public]¶ \(d/dr(1/T dT/dr)\)
-
-
radial_functions/
ddlvisc
(*) [real,allocatable/public]¶ 2nd derivative of kinematic viscosity
-
-
radial_functions/
dentropy0
(*) [real,allocatable/public]¶ Radial gradient of background entropy
-
-
radial_functions/
divktemp0
(*) [real,allocatable/public]¶ Term for liquid anelastic approximation
-
-
radial_functions/
dlalpha0
(*) [real,allocatable/public]¶ \(1/\alpha d\alpha/dr\)
-
-
radial_functions/
dlkappa
(*) [real,allocatable/public]¶ Derivative of thermal diffusivity
-
-
radial_functions/
dllambda
(*) [real,allocatable/public]¶ Derivative of magnetic diffusivity
-
-
radial_functions/
dltemp0
(*) [real,allocatable/public]¶ Inverse of temperature scale height
-
-
radial_functions/
dlvisc
(*) [real,allocatable/public]¶ Derivative of kinematic viscosity
-
-
radial_functions/
dr_fac_ic
[real,public]¶ For IC: \(2/(2 r_i)\)
-
-
radial_functions/
dr_top_ic
(*) [real,allocatable/public]¶ Derivative in real space for r=r_i
-
-
radial_functions/
dxicond
(*) [real,allocatable/public]¶ Radial gradient of chemical composition
-
-
radial_functions/
epscprof
(*) [real,allocatable/public]¶ Sources in heat equations
-
-
radial_functions/
jvarcon
(*) [real,allocatable/public]¶ Analytical solution for toroidal field potential aj (see init_fields.f90)
-
-
radial_functions/
kappa
(*) [real,allocatable/public]¶ Thermal diffusivity
-
-
radial_functions/
l_r
(*) [integer,allocatable/public]¶ Variable degree with radius
-
-
radial_functions/
lambda
(*) [real,allocatable/public]¶ Array of magnetic diffusivity
-
-
radial_functions/
ndd_costf1
[integer,public]¶ Radii for transform
-
-
radial_functions/
ndd_costf1_ic
[integer,public]¶ Radii for transform
-
-
radial_functions/
ndd_costf2_ic
[integer,public]¶ Radii for transform
-
-
radial_functions/
ndi_costf1_ic
[integer,public]¶ Radii for transform
-
-
radial_functions/
ndi_costf2_ic
[integer,public]¶ Radii for transform
-
-
radial_functions/
o_r_ic
(*) [real,allocatable/public]¶ Inverse of IC radii
-
-
radial_functions/
o_r_ic2
(*) [real,allocatable/public]¶ Inverse of square of IC radii
-
-
radial_functions/
ogrun
(*) [real,allocatable/public]¶ \(1/\Gamma\)
-
-
radial_functions/
or1
(*) [real,allocatable/public]¶ \(1/r\)
-
-
radial_functions/
or2
(*) [real,allocatable/public]¶ \(1/r^2\)
-
-
radial_functions/
or3
(*) [real,allocatable/public]¶ \(1/r^3\)
-
-
radial_functions/
or4
(*) [real,allocatable/public]¶ \(1/r^4\)
-
-
radial_functions/
orho1
(*) [real,allocatable/public]¶ \(1/\tilde{\rho}\)
-
-
radial_functions/
orho2
(*) [real,allocatable/public]¶ \(1/\tilde{\rho}^2\)
-
-
radial_functions/
otemp1
(*) [real,allocatable/public]¶ Inverse of background temperature
-
-
radial_functions/
r
(*) [real,allocatable/public]¶ radii
-
-
radial_functions/
r_cmb
[real,public]¶ OC radius
-
-
radial_functions/
r_ic
(*) [real,allocatable/public]¶ IC radii
-
-
radial_functions/
r_icb
[real,public]¶ IC radius
-
-
radial_functions/
r_surface
[real,public]¶ Surface radius for extrapolation in units of (r_cmb-r_icb)
-
-
radial_functions/
rgrav
(*) [real,allocatable/public]¶ Buoyancy term dtemp0/Di
-
-
radial_functions/
rho0
(*) [real,allocatable/public]¶ Inverse of background density
-
-
radial_functions/
sigma
(*) [real,allocatable/public]¶ Electrical conductivity
-
-
radial_functions/
temp0
(*) [real,allocatable/public]¶ Background temperature
-
-
radial_functions/
visc
(*) [real,allocatable/public]¶ Kinematic viscosity
-
Subroutines and functions
-
subroutine
radial_functions/
initialize_radial_functions
()¶ Initial memory allocation
- Called from
-
subroutine
radial_functions/
finalize_radial_functions
()¶ Memory deallocation of radial functions
- Called from
-
subroutine
radial_functions/
radial
()¶ Calculates everything needed for radial functions, transforms etc.
- Called from
- Call to
logwrite()
,getentropygradient()
,getbackground()
,polynomialbackground()
,cheb_grid()
,get_chebs_even()
-
subroutine
radial_functions/
transportproperties
()¶ Calculates the transport properties: electrical conductivity, kinematic viscosity and thermal conductivity.
- Called from
- Call to
-
subroutine
radial_functions/
getentropygradient
()¶ This subroutine allows to calculate the background entropy gradient in case stable stratification is required
- Called from
horizontal.f90
¶
Description
Module containing functions depending on longitude and latitude plus help arrays depending on degree and order
Quick access
- Variables
cosn_theta_e2
,costheta
,dlh
,dphi
,dpl0eq
,dtheta1a
,dtheta1s
,dtheta2a
,dtheta2s
,dtheta3a
,dtheta3s
,dtheta4a
,dtheta4s
,gauss
,hdif_b
,hdif_s
,hdif_v
,hdif_xi
,n_theta_cal2ord
,n_theta_ord2cal
,o_sin_theta
,o_sin_theta_e2
,phi
,sintheta
,sintheta_e2
,theta_ord
- Routines
finalize_horizontal_data()
,gauleg()
,horizontal()
,initialize_horizontal_data()
Needed modules
truncation
(l_max()
,n_theta_max()
,n_phi_max()
,nlat_padded()
,lm_max()
,n_m_max()
,minc()
,m_min()
,m_max()
,l_axi()
): This module defines the grid points and the truncationradial_functions
(r_cmb()
): This module initiates all the radial functions (transport properties, density, temperature, cheb transforms, etc.)physical_parameters
(ek()
): Module containing the physical parametersnum_param
(difeta()
,difnu()
,difkap()
,ldif()
,ldifexp()
,difchem()
): Module containing numerical and control parametersblocking
(lm2l()
,lm2m()
): Module containing blocking informationlogic
(l_non_rot()
): Module containing the logicals that control the runfft
: This module contains the native subroutines used to compute FFT’s. They are based on the FFT99 package from Temperton: http://www.cesm.ucar.edu/models/cesm1.2/cesm/cesmBbrowser/html_code/cam/fft99.F90.htmlconstants
(pi()
,zero()
,one()
,two()
,half()
): module containing constants and parameters used in the code.precision_mod
: This module controls the precision used in MagICmem_alloc
(bytes_allocated()
): This little module is used to estimate the global memory allocation used in MagIC
Variables
-
horizontal_data/
cosn_theta_e2
(*) [real,allocatable/public]¶ \(\cos\theta/\sin^2\theta\)
-
-
horizontal_data/
costheta
(*) [real,allocatable/public]¶ \(\cos\theta\)
-
-
horizontal_data/
dlh
(*) [real,allocatable/public]¶ \(\ell(\ell+1)\)
-
-
horizontal_data/
dphi
(*) [complex,allocatable/public]¶ \(\mathrm{i} m\)
-
-
horizontal_data/
dpl0eq
(*) [real,allocatable/public]¶
-
-
horizontal_data/
dtheta1a
(*) [real,allocatable/public]¶
-
-
horizontal_data/
dtheta1s
(*) [real,allocatable/public]¶
-
-
horizontal_data/
dtheta2a
(*) [real,allocatable/public]¶
-
-
horizontal_data/
dtheta2s
(*) [real,allocatable/public]¶
-
-
horizontal_data/
dtheta3a
(*) [real,allocatable/public]¶
-
-
horizontal_data/
dtheta3s
(*) [real,allocatable/public]¶
-
-
horizontal_data/
dtheta4a
(*) [real,allocatable/public]¶
-
-
horizontal_data/
dtheta4s
(*) [real,allocatable/public]¶
-
-
horizontal_data/
gauss
(*) [real,allocatable/public]¶
-
-
horizontal_data/
hdif_b
(*) [real,allocatable/public]¶
-
-
horizontal_data/
hdif_s
(*) [real,allocatable/public]¶
-
-
horizontal_data/
hdif_v
(*) [real,allocatable/public]¶
-
-
horizontal_data/
hdif_xi
(*) [real,allocatable/public]¶
-
-
horizontal_data/
n_theta_cal2ord
(*) [integer,allocatable/public]¶
-
-
horizontal_data/
n_theta_ord2cal
(*) [integer,allocatable/public]¶
-
-
horizontal_data/
o_sin_theta
(*) [real,allocatable/public]¶ \(1/\sin\theta\)
-
-
horizontal_data/
o_sin_theta_e2
(*) [real,allocatable/public]¶ \(1/\sin^2\theta\)
-
-
horizontal_data/
phi
(*) [real,allocatable/public]¶
-
-
horizontal_data/
sintheta
(*) [real,allocatable/public]¶ \(\sin\theta\)
-
-
horizontal_data/
sintheta_e2
(*) [real,allocatable/public]¶ \(\sin^2\theta\)
-
-
horizontal_data/
theta_ord
(*) [real,allocatable/public]¶ Gauss points (unscrambled)
-
Subroutines and functions
-
subroutine
horizontal_data/
initialize_horizontal_data
()¶ Memory allocation of horizontal functions
- Called from
-
subroutine
horizontal_data/
finalize_horizontal_data
()¶ Memory deallocation of horizontal functions
- Called from
- Call to
-
subroutine
horizontal_data/
horizontal
()¶ Calculates functions of \(\theta\) and \(\phi\), for example the Legendre functions, and functions of degree \(\ell\) and order \(m\) of the legendres.
- Called from
- Call to
-
subroutine
horizontal_data/
gauleg
(sinthmin, sinthmax, theta_ord, gauss, n_th_max)¶ Subroutine is based on a NR code. Calculates N zeros of legendre polynomial P(l=N) in the interval [sinThMin,sinThMax]. Zeros are returned in radiants theta_ord(i) The respective weights for Gauss-integration are given in gauss(i).
- Parameters
sinthmin [real ,in] :: lower bound in radiants
sinthmax [real ,in] :: upper bound in radiants
theta_ord (n_th_max) [real ,out] :: zeros cos(theta)
gauss (n_th_max) [real ,out] :: associated Gauss-Legendre weights
n_th_max [integer ,in] :: desired maximum degree
- Called from