Version 188 (modified by 12 years ago) ( diff ) | ,
---|
- Physics of Radiation Transfer
- Numerics of Flux Limited Diffusion
Physics of Radiation Transfer
Spectral Intensity
Spectral Intensity
Typically when we discuss the radiation field we use the spectral intensity
which is a function of frequency, position, and direction. This is very similar to the phase space density used in deriving the fluid equations except that- light always travels at \(c\), so the velocity dependence is just a direction dependence.
- Furthermore, photons can have different frequencies, so there is an extra dimension to the phase space.
- Instead of storing the phase space density of photons, the spectral intensity is the phase space density of energy flux…
Going between photon number and energy just involves a factor of \( h \nu \) and going from energy density to energy flux density just involves a factor of \(c\) so we have
This can also be seen by considering the differential energy
where the number of photons traveling normal to the surface dA that cross the surface dA in time dt is just the number of photons in the volume dV = dA c dt (assuming the photons are headed normal to dA)…
so we also have
which gives
Deriving the Transport Equation
Deriving the Transport Equation
If we consider the Boltzmann transport equation for photons of a specific frequency \(f_\nu\) we have
Now photons don't experience body forces, always travel at the speed of light, and in general the "collision term" consists of photon emission and absorptions… so we have
where \(A_{\nu} \) is the emission rate of photons of frequency \(\nu\) and the mean free path length is given by \(\chi_\nu = \sigma_\nu n\) where \(\sigma_\nu\) is the particle scattering cross section and \(n\) is the number density of particles.
Now if we multiply through by \( h\nu\) we have
where \(\eta_\nu = h\nu A_{\nu}\) is the radiative power
If we solve the transport equation along a characteristic
we have
where \(f(s) = f(\mathbf{x}(s), t(s)) = f \left ( \mathbf{x_0}+\mathbf{n} s, \frac{s}{c} \right ) \) and then we can divide through by \(\chi_\nu(s)\) we get
Now if we define \(d\tau_\nu = \chi_\nu(s) ds \) which gives
and
we can write the transport equation in the simplest form
although the RHS is now more difficult to evaluate as
Also if we include scattering then the source function can depend on the mean radiative flux \(\frac{cE}{4 \pi}\) and the transport equation becomes an integro-differential equation that must be solved iteratively…
There are also a few important dimensionless numbers to consider:
streaming limit | |
static diffusion limit | |
dynamic diffusion limit |
Equations of Radiation Hydrodynamics
Equations of Radiation Hydrodynamics
Some of what follows is taken from Krumholz et al. 2007
where the moments of the specific intensity are defined as
Radiation Energy moments | Corresponding fluid moments |
and the radiation 4-force density is given by
If we had a closure relation for the radiation pressure then we could solve this system. For gas particles, collisions tend to produce a Boltzmann Distribution which is isotropic and gives a pressure tensor that is a multiple of the identity tensor. Photons do not "collide" with each other and they all have the same velocity 'c' but in various directions. If the field were isotropic than \(P{ij}=\delta{ij} 1/3 E\) but in general \(P{ij}=f{ij} E\) where 'f' is the Eddington Tensor.
Simplifiying assumptions
Simplifying assumptions
- If the flux spectrum of the radiation is direction-independent then we can write the radiation four-force density in terms of the moments of the radiation field
where
comoving-frame Planck function weighted opacity | |
comoving-frame radiation energy weighted opacity | |
comoving-frame radiation flux weighted opacity |
- If the radiation has a blackbody spectrum then \(\kappa_{0E}=\kappa_{0P}\)
- If the radiation is optically thick, then
which implies that
- In the optically thin regime, \(|\mathbf{F}_0(\nu_0)| \rightarrow cE_0(\nu_0)\) so we would have \(\kappa_{0F}=\kappa_{0E}\) however assuming a blackbody temperature in the optically thin limit may be any more accurate than assuming that \(\kappa_{0F}=\kappa_{0R}\)
Flux limited diffusion
Flux limited diffusion
The flux limited diffusion approximation drops the radiation momentum equation in favor of \(\mathbf{F}_0=-\frac{c\lambda}{\kappa_{0R}}\nabla E_0\) where \(\lambda\) is the flux-limiter and is given by
and
which corresponds to a pressure tensor
where
Here are \(\lambda®\) and \(R_2®\) plotted
If we Lorentz boost the comoving terms into the lab frame and keep terms necessary to maintain accuracy we get:
Numerics of Flux Limited Diffusion
If we plug the expressions for the radiation 4-momentum back into the gas equations and keep terms necessary to maintain accuracy we get:
For static diffusion, the terms in blue with \(\frac{v2}{c}\) can be dropped and the system can be split into the usual hydro update (black), radiative source terms (green), and a coupled implicit solve (red) for the radiation energy density and thermal energy density (ie temperature).
Operator Splitting 1
Operator splitting
Krumholz et al. perform Implicit Radiative, Explicit Hydro, Explicit Radiative
In AstroBEAR this would look like:
- Initialization
- Prolongate, \(\rho\), \(\rho\mathbf{v}\), \(e\), \(E\), and \(\dot{E}I\)
- Step 1
- Overlap \(\rho\), \(\rho \mathbf{v} \) , \(e\), \(E\) and do physical BC's
- Do IR which updates \(e_0\) and \(E_0\) using \(\rho_1\), \(e_1\), \(E_1\), and \(\dot{E}I_1\)
- Update \(E_{2\mbox{mbc}}\) using \(\dot{E}I_{2\mbox{mbc}}\)
- Update \(e_{2\mbox{mbc}}\) using \(E_{2\mbox{mbc}}\), \(\dot{E}I_{2\mbox{mbc}}\), and \(e_{2\mbox{mbc}}\)
- Update \(\dot{E}I_0\) using pre IR and post IR \(E_0\)
- Ghost \(e_{2\mbox{mbc}}\), \(E_{\mbox{mbc}+1}\), \(\dot{E}I_{\mbox{mbc}+1}\)
- Do first EHmbc
- Do ERmbc —- Terms with \(\nabla E\) can be done without ghosting since EH did not change \(E\). The \(\nabla \cdot \mathbf{v}E\) term needs time centered face centered velocities which can be stored during the hydro update.
- Store \(\dot{E}\) in child arrays to be prolongated
- Step 2
- Overlap \(\rho\), \(\rho \mathbf{v} \) , \(e\), \(E\) and do physical BC's
- Do IR which updates \(e_0\) and \(E_0\) using \(\rho_1\), \(e_1\), \(E_1\), and \(\dot{E}I_1\)
- Update \(\dot{E}I_0\) using pre IR and post IR \(E_0\)
- Update \(E_{1}\) using \(\dot{E}I_{1}\)
- Ghost \(e_{mbc}\), \(E_{1}\), \(\dot{E}I_{1}\)
- Do second EH0
- Do ERmbc —- Terms with \(\nabla E\) can be done without ghosting since EH did not
- Do ER0 —- Terms with grad E can be done without ghosting since EH did not change \(E\). The \(\nabla \cdot \mathbf{v}E\) term needs time centered face centered velocities which can be stored during the hydro update.
Explicit Update 1
Explicit Update 1
The extra terms in the explicit update due to radiation energy are as follows:
These can be discretized as follows:
where
where
and
and
and
and
and
Implicit Update 1
Implicit Update 1
For now we will assume that \(\kappa_{0P}\) and \(\kappa_{0R}\) are constant over the implicit update and we will treat the energy as the total internal energy ignoring kinetic and magnetic contributions. In this case we can solve the radiation energy equations:
where
Expanding about e0
Of course even if the opacity is independent of energy and radiation energy, the above combined system of equations is still non-linear due to the dependence on Temperature of the Planck Function \(B(T)\)
However we can expand the Plank Function about \(e_0\)
where
Then the system of equations becomes
which will be accurate as long as \(\left | 4\Gamma \frac{e-e_0}{T_0} \right | < \xi << 1\) or \(\Delta e = \left | e-e_0 \right | < \xi \frac{T_0}{4 \Gamma}\)
We can calculate the time scale for this to be true using the evolution equation for the energy density
which gives
Implicit Discretization 1
We can now discretize the equations
where the diffusion coefficient is given by
and where
and
represents the number of absorption/emissions during the time step
and
and we can think of the radiative flux as
Time Discretization
Now all the terms on the right hand side that are linear in E or e have been written as E* or e* because there are different ways to approximate E* (e*). For Backward Euler we have
and for Crank Nicholson we have or we can parameterize the solution where \(\bar{\psi} = 1-\psi\)Backward Euler has \(\psi=1\) and Crank Nicholson has \(\psi=½\)
Forward Euler has \(\psi=0\)
In any event in 1D we have the following matrix coefficients
Now since the second equation has no spatial dependence, we can solve it for
and plug the result into the first equation to get a matrix equation involving only one variable.
This equation decouples and can be solved on it's own, and then the solution plugged back into the second equation to solve for the new energy.
2D etc…
For 2D or 3D we have more connections to add to the matrix elements but it is very straight forward… There will be additional alpha terms for each dimension, but everything else stays the same.
Initial solution vector
For the initial solution vector, we can just use Edot from the parent update (or last time step if we are on the coarse grid) to guess E, and then we can solve for the new e given our guess at the new E using the same time stepping (Backward Euler, Crank Nicholson, etc…).
Coarse-Fine Boundaries
Since we are doing our implicit solves first, we can use time interpolated solutions for the implicit solve for non-refined ghost zones. To do this we just need Edot. The opacities etc… in the ghost zones can be obtained from the hydro terms.
And the radiative implicit heating in coarse ghost cells can be done along with the initial solution vector so they are available for the hydro update.
Physical Boundary Conditions
Open (Free streaming) boundaries
We would like the radiation to leave at the free streaming limit. So
Clearly if we set \(E_g = 0\) and \(\lambda_g =\kappa_g \Delta x\) we should get the correct flux.
This corresponds to an \(\alpha = c \frac{\Delta t}{\Delta x}\)
So we would just modify \(\alpha\) and zero out the matrix coefficient to the ghost zone
Constant Slope Boundary
Here we want the flux to be constant so energy does not pile up near the boundary. If we cancel all derivative terms on both sides of the cell, this will effectively match the incoming flux with the outgoing flux. This can also be done by setting \(\alpha_g = \alpha_i = 0\)
Periodic Boundary
This is the same as internal zones - it just maps the neighbor cell to be across the domain. Hypre has built in functionality for this under for the Struct Interface
User defined radiation field/Coarse Fine boundary
This will be the boundary at internal coarse-fine boundaries, but could also be used at the physical boundary if the radiation energy were specified.
Reflecting/ZeroSlope Boundary
Reflecting boundary should be fairly straightforward. This an be achieved by setting \(\alpha_g = 0\) which zeros out any flux - and has the same effect as setting \(E{*}_g=E{*}_i\) or \(E{n+1}_g=E{n+1}_i \mbox{ and } E{n}_g=E{n}_i\)
Constant radiative flux
To have a constant radiative flux we must zero out terms involving the gradient and just add \(F_0 \frac{\Delta t}{\Delta x}\) in the source vector
Summary
Numerical value | Boundary | ||||
0 | RAD_FREE_STREAMING | ||||
1 | RAD_EXTRAPOLATE_FLUX | ||||
2 | INTERNAL/PERIODIC | ||||
3 | RAD_REFLECTING | ||||
4 | RAD_USERDEFINED_BOUNDARY/AMR_BOUNDARY | ||||
5 | RAD_USERDEFINED_FLUX |
Alternative Splitting Method
While the previous method for splitting the equation technically works, it is likely to lead to large differences in the radiation field and the energy fields at coarse fine boundaries since there is no radiative flux to coarsen from the explicit updates to keep the various AMR levels consistent. There is one term that could potentially be coarsened and applied like any flux, but it is not the dominant term. As a result it might be better to treat the entire radiative energy equation implicitly (though keeping the velocity constant)
It is possible that with included the terms in magenta in a semi-implicit method, the dynamic diffusion regime may be stable… In any event, it costs very little to add all of the terms in magenta to the implicit solve (using the old velocity). Then the momentum update can be done explicitly - though using a time centered radiation field.
Operator Splitting 2
Operator splitting 2
In AstroBEAR this would look like:
- Initialization
- Prolongate, \(\rho\), \(\rho\mathbf{v}\), \(e\), \(E\), and \(\dot{E}\)
- Step 1
- Overlap \(\rho\), \(\rho \mathbf{v} \) , \(e\), \(E\) and do physical BC's
- Do IR which updates \(e_0\) and \(E_0\) using \(\rho_1\), \(e_1\), \(E_1\), and \(\dot{E}_1\)
- Update \(E_{2\mbox{mbc}}\) using \(\dot{E}_{2\mbox{mbc}}\)
- Update \(e_{2\mbox{mbc}}\) using \(E_{2\mbox{mbc}}\), \(\dot{E}_{2\mbox{mbc}}\), and \(e_{2\mbox{mbc}}\)
- Update \(\dot{E}_0\) using pre IR and post IR \(E_0\)
- Ghost \(e_{2\mbox{mbc}}\), \(E_{\mbox{mbc}+1}\), \(\dot{E}_{\mbox{mbc}+1}\)
- Do first EHmbc
- Do ERmbc —- Terms with \(\nabla E\) can be done without ghosting since EH did not change \(E\).
- Store \(\dot{E}\) in child arrays to be prolongated
- Step 2
- Overlap \(\rho\), \(\rho \mathbf{v} \) , \(e\), \(E\) and do physical BC's
- Do IR which updates \(e_0\) and \(E_0\) using \(\rho_1\), \(e_1\), \(E_1\), and \(\dot{E}_1\)
- Update \(\dot{E}_0\) using pre IR and post IR \(E_0\)
- Update \(E_{1}\) using \(\dot{E}_{1}\)
- Ghost \(e_{mbc}\), \(E_{1}\), \(\dot{E}_{1}\)
- Do second EH0
- Do ER0 —- Terms with \(\nabla E\) can be done without ghosting since EH did not change \(E\).
Explocit Update 2
Explicit Update 2
The extra terms in the explicit update due to radiation energy are as follows:
These can be discretized as follows:
and
Implicit Update 2
Implicit Update 2
For now we will assume that \(\kappa_{0P}\) and \(\kappa_{0R}\) are constant over the implicit update and we will treat the energy as the total internal energy ignoring kinetic and magnetic contributions. In this case we can solve the radiation energy equations:
which we can also write as
where
and
Now we can linearize f about e0
so that the first equation can be written as
and then discretized as
where
which can be solved for
Then if we take the semi-discretized equation for E
and then plugin the solution for en+1i we get
which simplifies to
Now we have 1 equation with 1 variable that we can solve implicitly using hypre, and then we can use \(E{n+1}\) and \(En\) to construct \(E*\) which we can plug into the equation for \(e{n+1}\)
Expanding f about e0
Expanding
where
and we can identify
Then the equation for e becomes
which will be accurate as long as \(4\Gamma \frac{\left | e-e_0 \right | }{T_0} < \xi << 1\) or \(\left | \Delta e \right | = \left | e-e_0 \right | < \xi \frac{T_0}{4 \Gamma}\)
We can calculate the time scale for this to be true using the evolution equation for the energy density
which gives
Implicit Discretization 2
Now we can discretize
as
which along with the other terms gives
where the diffusion coefficient is given by
and where
and
and
and
and
and
and
where
and
and
and
and
and
and
Which we can arrange into the following form
2D etc…
For 2D or 3D we have more connections to add to the matrix elements but it is very straight forward… There will be additional terms for each dimension - and the velocity components (vx) will change, but everything else stays the same.
Initial solution vector
For the initial solution vector, we can just use Edot from the parent update (or last time step if we are on the coarse grid) to guess E
Coarse-Fine Boundaries
Since we are doing our implicit solves first, we can use time interpolated solutions for the implicit solve for non-refined ghost zones. To do this we just need Edot. The opacities etc… in the ghost zones can be obtained from the hydro terms.
And the radiative implicit heating in coarse ghost cells can be done along with the initial solution vector so they are available for the hydro update.
Physical Boundary Conditions
For each boundary type we need to specify \(En_g, E{n+1}_g, \kappa_g, \mbox { and } v_g\) in terms of other quantities (ie including En+1_i). The vg and kappag terms should come from the hydro boundary conditions so we just need an equation for Eng
Open (Free streaming) boundaries
We would like the radiation to leave at the free streaming limit. But we could have to modify the opacity in the ghost zone to keep the radiation energy positive
Clearly if we set \(E_g = 0\) and \(\kappa_g << \frac{1}{\Delta x} \) we should get \(\lambda = \kappa_g \Delta x\) and a free streaming flux of \(c E \mathbf{n}\)
which also corresponds to an \(\alpha = c \frac{\Delta t}{\Delta x}\)
Constant Slope Boundary
Periodic Boundary
This is the same as internal zones - it just maps the neighbor cell to be across the domain. Hypre has built in functionality for this under for the Struct Interface
User defined radiation field/Coarse Fine boundary
This will be the boundary at internal coarse-fine boundaries, but could also be used at the physical boundary if the radiation energy were specified.
Reflecting/ZeroSlope Boundary
Constant radiative flux
Attachments (1)
- fld.png (28.2 KB ) - added by 12 years ago.
Download all attachments as: .zip