extern_spiral

Module

Description

This module contains everything related to

Clare and Alex’s galactic potentials:

References:

Cox and Gomez (2002), ApJS 142, 261-267 Pichardo et al. (2003), ApJ 582, 230-245 Freeman (1970), ApJ 160, 811-830 Miyamoto and Nagi (1975), PASJ 27, 533-543 Dobbs, Bonnell & Pringle (2006), MNRAS 371, 1663-1674 Cladwell and Ostriker (1981), APJ 251, 61-87 Allen and Martos (1986), RMAA 13, 137-147 Khorperskov et al. (2012), arXiv:1207.5162v1 Long and Murali (1992), APJ 397, 44-48 Voigt and Letelier (2011), MNRAS 411, 2371-2382 and other basic forms (see Binney and Tremaine 1987)

Owner:

Daniel Price

Runtime parameters:
  • NN : No of arms in stellar spiral potential

  • a_bar : Major axis of galactic bar (in x, kpc)

  • b_bar : Minor axis of galactic bar (in y, kpc)

  • c_bar : Minor axis of galactic bar (in z, kpc)

  • iarms : type of arm potential (1:C&G 2:4 P&M spheroids+linear)

  • ibulg : type of bulge potential (1:Plummer 2:Hernquist 3:Hubble)

  • idisk : type of disk potential (1:log 2:flattened 3:Freeman w. bar/arm)

  • ihalo : type of halo potential (1:C&O 2:Flat 3:A&M 4:K&B 5:NFW)

  • iread : Read in potential from file (1=y,0=n)

  • phib : Bar(s) potential pattern speed (km/s/kpc)

  • phir : Spiral potential pattern speed (km/s/kpc)

  • pitchA : Pitch angle of spiral arms (deg)

Dependencies:

infile_utils, io, mathfunc, physcon, units

Quick access

Variables:

a_0, a_02, adisk, alphabar, ammhalo, amrhalo, barmass, bdisk, betabar, c_0, c_02, cnfw, co, cotalpha, cz, d_0, den0, dxpot, dypot, dzpot, dzq, e_0, e_02, ebar, epsbar, eta_khop, gcode, haloci, hubbci, hz, i, iarms, ibar, ibulg, idisk, ihalo, initialsp, ios, iread, j, jj, lmabar, lmbbar, lmcbar, mbulge, mdisk, mhalo, mhubbbulge, mnadisk, mnbdisk, mnfw, mnmdisk, mspiral, newpot3d, nn, nni, nshape, nt, p0, p1, phi0, phibar, phir, potfilename, potlenx, potleny, potlenz, potxmax, potymax, potzmax, r0, ra1, ra2, ra3, radiusofbar, rbars, rbulge, rc, rc2, rc21, rcore, rdcore, rhalo, rhalomax, rho0b, rhubbbulge, rhubbmax, ri, rl, rlhalo, rlim, rnfw, rob, rs, rsarms, rsk, rspheroids, rtot, rtotterm, shapefn, sinalpha, spiralsum, strbard, strbarw, strength, t0, tau_arm, vhalo, vob, zdisk

Routines:

amhalo(), betafn(), binreadpot3d(), cohalo(), dehnenbar(), flathalo(), hernbul(), hubbbul(), initialise_spiral(), kbhalo(), kfdiscsp(), lmtbar(), lmxbar(), logdisc(), mndisc(), nfwhalo(), orthog_basisbar(), pichardo_potential(), plumbul(), read_options_spiral(), s_potential(), schmidt_potential(), softpot(), vogtsbar(), wadabar(), wang_bar(), write_options_spiral()

Variables

  • extern_spiral/a_0 [real]
  • extern_spiral/a_02 [real]
  • extern_spiral/adisk [real]
  • extern_spiral/alpha [real,optional/default=15.0]

    The arm pitch angle in deg

  • extern_spiral/alphabar [real]
  • extern_spiral/ammhalo [real]
  • extern_spiral/amrhalo [real]
  • extern_spiral/barmass [real]
  • extern_spiral/bdisk [real]
  • extern_spiral/betabar [real]
  • extern_spiral/c_0 [real]
  • extern_spiral/c_02 [real]
  • extern_spiral/cnfw [real]
  • extern_spiral/co [real]
  • extern_spiral/cotalpha [real]
  • extern_spiral/cz (3) [real]
  • extern_spiral/d_0 [real]
  • extern_spiral/den0 (*,*) [real,allocatable]
  • extern_spiral/dxpot [real]
  • extern_spiral/dypot [real]
  • extern_spiral/dzpot [real]
  • extern_spiral/dzq [real]
  • extern_spiral/e_0 [real]
  • extern_spiral/e_02 [real]
  • extern_spiral/ebar [real]
  • extern_spiral/epsbar [real]
  • extern_spiral/eta_khop [real]
  • extern_spiral/gcode [real]
  • extern_spiral/haloci [real]
  • extern_spiral/hubbci [real]
  • extern_spiral/hz [real]
  • extern_spiral/i [integer]
  • extern_spiral/iarms [integer,optional/default=0]

    Arm id flag

  • extern_spiral/ibar [integer,optional/default=0]
  • extern_spiral/ibulg [integer,optional/default=0]

    Bulge id flag

  • extern_spiral/idisk [integer,optional/default=1]

    Disk id flag

  • extern_spiral/ihalo [integer,optional/default=0]

    DM halo id flag

  • extern_spiral/initialsp [integer,optional/default=1]

    Flag to track if the above are in code units (1=no, 0=yes)

  • extern_spiral/ios [integer]
  • extern_spiral/iread [integer,optional/default=0]

    Read in potential file?

  • extern_spiral/j [integer]
  • extern_spiral/jj [integer]
  • extern_spiral/lmabar [real,optional/default=4.0]

    Bar major axis (x1kpc)

  • extern_spiral/lmbbar [real,optional/default=1.0]

    Bar minor axis (x1kpc)

  • extern_spiral/lmcbar [real,optional/default=1.0]

    Bar minor axis (x1kpc), triaxial bar

  • extern_spiral/mbulge [real]
  • extern_spiral/mdisk [real]
  • extern_spiral/mhalo [real]
  • extern_spiral/mhubbbulge [real]
  • extern_spiral/mnadisk [real]
  • extern_spiral/mnbdisk [real]
  • extern_spiral/mnfw [real]
  • extern_spiral/mnmdisk [real]
  • extern_spiral/mspiral [real]
  • extern_spiral/newpot3d (*,*,*) [real,allocatable]
  • extern_spiral/nn [real,optional/default=2.0]

    should be integer, but used in real expressions

  • extern_spiral/nni [integer]
  • extern_spiral/nshape [real]
  • extern_spiral/nt [integer]
  • extern_spiral/p0 [real]
  • extern_spiral/p1 [real]
  • extern_spiral/phi0 [real]
  • extern_spiral/phibar [real,optional/default=40.0]

    km/s/kpc, for bars from Dehnen99

  • extern_spiral/phir [real,optional/default=20.0]

    km/s/kpc, for arms

  • extern_spiral/potfilename [character]
  • extern_spiral/potlenx [integer]
  • extern_spiral/potleny [integer]
  • extern_spiral/potlenz [integer]
  • extern_spiral/potxmax [real]
  • extern_spiral/potymax [real]
  • extern_spiral/potzmax [real]
  • extern_spiral/r0 [real]
  • extern_spiral/ra1 [real]
  • extern_spiral/ra2 [real]
  • extern_spiral/ra3 [real]
  • extern_spiral/radiusofbar [real]
  • extern_spiral/rbars [real]
  • extern_spiral/rbulge [real]
  • extern_spiral/rc [real]
  • extern_spiral/rc2 [real]
  • extern_spiral/rc21 [real]
  • extern_spiral/rcore [real]
  • extern_spiral/rdcore [real]
  • extern_spiral/rf [real]
  • extern_spiral/rhalo [real]
  • extern_spiral/rhalomax [real]
  • extern_spiral/rho0b [real]
  • extern_spiral/rhubbbulge [real]
  • extern_spiral/rhubbmax [real]
  • extern_spiral/ri [real]
  • extern_spiral/rl [real]
  • extern_spiral/rlhalo [real]
  • extern_spiral/rlim [real]
  • extern_spiral/rnfw [real]
  • extern_spiral/rob [real]
  • extern_spiral/rs [real]
  • extern_spiral/rsarms [real]
  • extern_spiral/rsk [real]
  • extern_spiral/rspheroids (*,*) [real,allocatable]
  • extern_spiral/rtot [real]
  • extern_spiral/rtotterm [real]
  • extern_spiral/shapefn (*,*) [real,allocatable]
  • extern_spiral/sinalpha [real]
  • extern_spiral/spiralsum (*) [real,allocatable]
  • extern_spiral/strbard [real]
  • extern_spiral/strbarw [real]
  • extern_spiral/strength [real]
  • extern_spiral/t0 [real]
  • extern_spiral/tau_arm [real]
  • extern_spiral/vhalo [real]
  • extern_spiral/vob [real]
  • extern_spiral/zdisk [real]

Subroutines and functions

subroutine  extern_spiral/write_options_spiral(iunit)
Parameters:

iunit [integer,in]

Use :

infile_utils (write_inopt()), units (utime(), udist()), physcon (pc(), solarm(), pi(), gg(), kpc(), km())

subroutine  extern_spiral/read_options_spiral(name, valstring, imatch, igotall, ierr)
Parameters:
  • name [character,in]

  • valstring [character,in]

  • imatch [logical,out]

  • igotall [logical,out]

  • ierr [integer,out]

Use :

io (fatal()), units (utime(), udist()), physcon (pc(), solarm(), pi(), gg(), kpc(), km())

subroutine  extern_spiral/initialise_spiral(ierr)
Parameters:

ierr [integer,out]

Use :

physcon (pc(), solarm(), pi(), gg(), kpc(), km()), units (udist(), umass(), utime()), io (id(), master())

subroutine  extern_spiral/logdisc(xi, yi, zi, d2, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • d2 [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/mndisc(xi, yi, zi, d2, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • d2 [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/kfdiscsp(xi, yi, zi, d2, r, phii, ti, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • d2 [real,in]

  • r [real,in]

  • phii [real,in]

  • ti [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

Use :

physcon (pi()), mathfunc (bessk0_s(), bessi0_s(), bessk1_s(), bessi1_s(), poly(), ik01a())

Call to:

ik01a()

subroutine  extern_spiral/plumbul(xi, yi, zi, r, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/hernbul(xi, yi, zi, r, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/hubbbul(xi, yi, zi, r, dr, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • dr [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/cohalo(xi, yi, zi, r, dr, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • dr [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/flathalo(xi, yi, zi, r, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/amhalo(xi, yi, zi, r, dr, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • dr [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/kbhalo(xi, yi, zi, r, dr, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • dr [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/nfwhalo(xi, yi, zi, r, dr, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • dr [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

subroutine  extern_spiral/s_potential(xi, yi, zi, ti, potout, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • ti [real,in]

  • potout [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

Use :

physcon (pi())

Call to:

softpot()

subroutine  extern_spiral/pichardo_potential(xi, yi, zi, rcyl2, ti, phii, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • rcyl2 [real,in]

  • ti [real,in]

  • phii [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

Use :

physcon (pc(), solarm(), pi(), gg(), kpc())

Call to:

betafn()

subroutine  extern_spiral/schmidt_potential(xi, yi, zi, rcyl2, ti, phii, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • rcyl2 [real,in]

  • ti [real,in]

  • phii [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

Use :

physcon (pc(), solarm(), pi(), gg(), kpc())

Call to:

betafn()

function  extern_spiral/betafn(om2, z2)

–Calcs beta using quad equation if particle is inside spheroid. –The difference here compared to betafnold is this only evaluates –the realistic outcomes to save computation time.

Parameters:
  • om2 [real,in]

  • z2 [real,in]

Return:

betafn (2) [real]

Use :

io (fatal())

Called from:

pichardo_potential(), schmidt_potential(), betafn()

Call to:

betafn()

subroutine  extern_spiral/lmxbar(offset, ascale, bscale, xi, yi, zi, ti, phi, fextxi, fextyi, fextzi)
Parameters:
  • offset [real,in]

  • ascale [real,in]

  • bscale [real,in]

  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • ti [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

Call to:

softpot()

subroutine  extern_spiral/lmtbar(xi, yi, zi, ti, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • ti [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

Call to:

softpot()

subroutine  extern_spiral/dehnenbar(xi, yi, d2, phii, ti, phi, fextxi, fextyi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • d2 [real,in]

  • phii [real,in]

  • ti [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

Use :

units (udist()), physcon (kpc(), pi())

subroutine  extern_spiral/wadabar(xi, yi, d2, phii, ti, hi, phi, fextxi, fextyi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • d2 [real,in]

  • phii [real,in]

  • ti [real,in]

  • hi [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

Call to:

softpot()

subroutine  extern_spiral/wang_bar(ri, phii, thetai, pot)
Parameters:
  • ri [real,in]

  • phii [real,in]

  • thetai [real,in]

  • pot [real,out]

Use :

physcon (pi()), mathfunc (legendre_associated(), gegenbauer_poly())

Called from:

orthog_basisbar()

Call to:

gegenbauer_poly(), legendre_associated()

subroutine  extern_spiral/orthog_basisbar(xi, yi, zi, r, dr, ti, hi, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • r [real,in]

  • dr [real,in]

  • ti [real,in]

  • hi [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

Call to:

wang_bar()

subroutine  extern_spiral/vogtsbar(xi, yi, zi, ti, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • ti [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

function  extern_spiral/softpot(pspeed, softfac, ti)

–Softens the potentials for bars/spirals to avoid “hard” activation. –Taken from Dehnen00. –The value for softpot reduces the density/mass of the potential.

Parameters:
  • pspeed [real,in]

  • softfac [real,in]

  • ti [real,in]

Return:

softpot [real]

Use :

io (fatal())

Called from:

s_potential(), lmxbar(), lmtbar(), wadabar()

subroutine  extern_spiral/binreadpot3d(xi, yi, zi, ti, phi, fextxi, fextyi, fextzi)
Parameters:
  • xi [real,in]

  • yi [real,in]

  • zi [real,in]

  • ti [real,in]

  • phi [real,inout]

  • fextxi [real,inout]

  • fextyi [real,inout]

  • fextzi [real,inout]

Use :

physcon (pi())