The state-of-art radiative magnetohydrodynamical codes (eg. MURaM and BIFROST) use a quadrature known as Set A by Carlson (1963). The advantage of this particular quadrature is that it is invariant with respect to 90o axis rotation.
Terminology
The quadrature is defined by directional cosines \mu_l and their weights w_l. They are combined into sets that define rays \Omega_m = (\mu_x, \mu_y, \mu_z) and their weights w_m. The order of quadrature n specifies the number of \mu levels in the [-1, 1] interval. Since the quadrature is symmetric in respect to axis, it is sufficient to find values of the angles in half of that range. Thus the number of \mu levels is l_{max} = n/2. The number of rays per octant in this scheme is n(n+2)/8. Each ray is labeled by three numbers indexing \mu level along one of the axes. The sum of indices of a ray is the same of all rays, l_{max}+2. For example, when n=8 and l_{max}=4, possible indices are 1, 2, 3 and 4. Their possible variations are those that have sum of 6. The number of these variations (and the rays) is n(n+2)/8 = 10. The number of different classes (variation without repetition with the specified sum) is l_{max}-1 = 3. In our example: (4, 1, 1), (3, 2, 1) and (2, 2, 2).
Requirements
The quadrature is constructed to fulfill the following requirements: \sum_{l=1}^{n/2} w_l = 1\;\;\;\;\;\;\sum_{l=1}^{n/2} w_l\mu_l = 0\;\;\;\;\;\;\sum_{l=1}^{n/2} w_l\mu_l^2 = \frac{1}{3}.
The actual computation of the quadrature starts from the values \mu_1 and w_1. The full derivation is available in Carlson (1963). Here I just summarize the algorithm. The directional cosines \mu_1 are given by: \mu_l^2 = \mu_1^2 + 2\frac{l-1}{n-1},\;\;\;\;\;l=1,...,n/2-1
where \mu_1^2 = 1/(3(n-1)). There is a similar equation for the weights (W_l = w_1 + \cdots +w_l):
W_l^2 = W_1^2 + 2\frac{l-1}{n-1},\;\;\;\;\;l=1,...,n/2-1.
However, the weights have to fulfill also:
\sum_{l=1}^{n/2-1} W_l = \frac{n-2}{3}.
These two equations give us the equation for w_1:
\sqrt{w_1^2} + \sqrt{w_1^2 + 2\frac{l-1}{n-1}} + \cdots + \sqrt{w_1^2 + \frac{n-4}{n-1}} = \frac{n-2}{3}.
This can be solved by using the Euler summation formula (see Carlson, 1963). Here I solve it numerically using the Newton-Raphson method. Once w_1 and \mu_1 are known, it is trivial to find other values of \mu_l and w_l. It still remains to find the weights of the rays. The procedure is simple. One linear equation can be written for every \mu level: the sum of the weights of the rays at the level l is equal to the weight of that level. The number of equations is equal to the number of levels, but the last equation is redundant. For example, for n=8 we write the following equations:
l=4: w_{411} = w_4,
l=3: w_{321} + w_{312} = w_3,
l=2: w_{231} + w_{222} + w_{213} = w_2,
where the weights of all rays that belong to one class is same (w_{321} =
w_{312} = w_{231} = w_{213}). The system can be solved by any of the standard methods.
IDL code
I coded the described recipe for the construction of the Set A quadrature of Carlson in IDL. The main procedure carlson_quadrature_a.pro calls two other w1nr_a.pro and variations3.pro (click on the procedure names to download them). The result of the procedure is equivalent to the numbers in Table 2 of Carlson (1963). For example,
carlson_quadrature_a, 8, wl=wl, mu=mu, wm=wm
gives the following values (Set A, n=8):
IDL> print, wl
0.43672982 0.25352174 0.18276705 0.12698138
IDL> print, wm
0.070754692 0.091383524 0.12698138
IDL> print, mu
0.21821789 0.57735027 0.78679579 0.95118973
IDL> print, variations
1 1 1 1 2 2 2 3 3 4
1 2 3 4 1 2 3 1 2 1
4 3 2 1 3 2 1 2 1 1
Note: The procedure in Carlson's original paper is a bit cryptic. The paper of Bruls et al (1999) is much more clear, although they take just an approximative expression for w_1.
No comments:
Post a Comment