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