Transient electromagnetics example
Mario Berljafa and Stefan Güttel, May 2016Download PDF or m-file
Contents
Introduction
This example relates to the modeling of a transient electromagnetic field in a geophysical application [2]. We consider here the first test problem in [2, Sec 5.1], the discretization of a layered half space using Nedelec elements of order . We are given a symmetric positive semidefinite matrix and a symmetric positive definite matrix , both of order , and the task is to solve an initial value problem
for the electric field . The time parameters of interest are .
First let us load the matrices and , and the initial vector :
if exist('tem.mat') ~= 2 disp('File tem.mat not found. Can be downloaded from:') disp('http://guettel.com/tem/TEM27623.mat') % TEM152078.mat return end load tem A = Problem.C; B = Problem.M; b = B\Problem.q; N = size(A,1);
Rational Arnoldi approximation
The approach suggested in [2] is to build a -orthonormal rational Krylov basis of , where is never formed explicitly, and to extract Arnoldi approximants
for all desired time parameters . Here . Following [2, Table 1] we use mutually distinct poles each repeated cyclically times, resulting in a rational Krylov space of order .
p = 4; rep = 9; Xi = [-2.76e+04,-4.08e+04,-2.45e+06,-6.51e+06];
Sequential reference solution
The problem is large enough so that using MATLAB's expm is impractical for obtaining an accurate reference solution. We therefore run the Arnoldi method with the above poles for a few more cycles to obtain a high-order rational Arnoldi decomposition.
xi = repmat(Xi, 1, rep+9); ip = @(x,y) y'*B*x; b = b/sqrt(ip(b, b)); param = struct('continuation', 'ruhe', ... 'orth', 'MGS', ... 'reorth', 1, ... 'waitbar', 1, ... 'inner_product', ip); [V, K, H, out] = rat_krylov(A, B, b, xi, param);
We now use the basis V to extract the high-order Arnoldi approximants, which we consider as the "exact" reference solution:
Am = V'*A*V; t = logspace(-6, -3, 31); for j = 1:length(t) exact(:, j) = V*(expm(-t(j)*Am)*eye(size(Am, 1), 1)); end
Parallel Arnoldi variants
Since version 2.4 of the RKToolbox, the rat_krylov function can simulate the parallel construction of a rational Krylov basis. This is done by imposing various nonzero patterns in the so-called "continuation matrix" [1]. Simply speaking, the -th column of this matrix contains the coefficients of the linear combination of rational Krylov basis vectors which have been used to compute the next -th basis vector. It is therefore an upper triangular matrix.
The following experiment tests and compares three different continuation strategies, including the "near-optimal" strategy proposed in [1]. This strategy is tested for both (sequential case) and . The other strategies almost-last and last are tested for . The predicting method is FOM(5), i.e., five iterations of the full orthogonalisaton method are used to predict the next Krylov basis vectors before actually computing them. The displayed quantities are indicators for the accuracy of the computed rational Arnoldi decomposition, and they are explained in details in [1]. The numbers should be comparable to this in Table 5.1 in [1]. Generally, smaller numbers are better. We also show the sparsity patterns of the various continuation matrices .
xi = repmat(Xi, 1, rep); m = length(xi); strat = {'near-optimal', 'near-optimal', 'almost-last', 'last'}; ucf = @(AB, nu, mu, x, param) ... util_continuation_fom(AB, nu, mu, x, param); param.orth = 'CGS'; param.reorth = 0; param.continuation_m = 5; param.continuation_root = inf; param.continuation_solve = ucf; for s = 1:length(strat) if s == 1 p = 1; disp(['Sequential strategy ' strat{s}]) else p = 4; disp(['Parallel strategy ' strat{s}]) end param.p = p; param.continuation = strat{s}; [V, K, H, out] = rat_krylov(A, B, b, xi, param); % Continuation matrix. figure(1), subplot(1, 4, s) spy(out.T), axis ij, title(strat{s}) % Numerical quantities (cf. [1, Table 5.1]). BV = B*V; AV = A*V; S = B\AV; S = S-V*(V\S); ss = svd(S); R = out.R; D = fminsearch(@(x) cond(R*diag(x)), ones(size(R, 2), 1), ... struct('Display','off')); nrm = norm(ip(V,V) - eye(size(V,2))); fprintf(' Cond number (scaled): %.3e\n', cond(R*diag(D))) fprintf(' Orthogonality check: %.3e\n', nrm) fprintf(' sigma_2/sigma_1: %.3e\n\n', ss(2)/ss(1)) % Arnoldi approximations. Am = V'*A*V; t = logspace(-6, -3, 31); for j = 1:length(t) appr = V*(expm(-t(j)*Am)*eye(size(Am, 1), 1)); d = appr - exact(:,j); err(j,s) = sqrt(ip(d,d)); end end
Sequential strategy near-optimal Cond number (scaled): 7.531e+00 Orthogonality check: 1.019e-14 sigma_2/sigma_1: 3.843e-15 Parallel strategy near-optimal Cond number (scaled): 9.122e+02 Orthogonality check: 1.306e-05 sigma_2/sigma_1: 2.937e-14 Parallel strategy almost-last Cond number (scaled): 2.544e+18 Orthogonality check: 1.596e+01 sigma_2/sigma_1: 5.580e-07 Parallel strategy last Cond number (scaled): 1.289e+06 Orthogonality check: 3.552e-01 sigma_2/sigma_1: 2.663e-14
Finally, we show the absolute errors of the Arnoldi approximants depending on the time paramter . By construction in [2], these errors are guaranteed to satisfy for all , independent of the spectral interval of :
figure(2), loglog(t, err), legend(strat) title('Arnoldi approximants to exp(-tA)b') xlabel('time t'), ylabel('M-norm error') axis([1e-6, 1e-3, 1e-12, 1e-4])
We clearly see that both the strategies last and almost-last suffer from numerical instability, whereas the near-optimal strategy works well both in the sequential and parallel case.
Links to other examples
Here is a list of other numerical illustrations of parallelization strategies:
Overview of the parallelization options
Numerical illustration from [1, Sec. 3.4]
Inlet example from [1, Sec. 5.2]
Waveguide example from [1, Sec. 5.3]
References
[1] M. Berljafa and S. Güttel. Parallelization of the rational Arnoldi algorithm, SIAM J. Sci. Comput., 39(5):S197--S221, 2017.
[2] R.-U. Börner, O. G. Ernst, and S. Güttel. Three-dimensional transient electromagnetic modeling using rational Krylov methods, Geophys. J. Int., 202(3):2025--2043, 2015.
[3] A. Ruhe. Rational Krylov: A practical algorithm for large sparse nonsymmetric matrix pencils, SIAM J. Sci. Comput., 19(5):1535--1551, 1998.