For this problem, you will need FEniCSx installed alongside Bempp. If FEniCSx is not available on your system you can use the Docker image from bempp.com
In this tutorial, we will solve the problem of a wave travelling through a unit cube, $\Omega = [0,1]^3$ with different material parameters inside and outside the domain. The incident wave is given by
$$ u^\text{inc}(\mathbf{x})=\mathrm{e}^{\mathrm{i} k \mathbf{x}\cdot\mathbf{d}}, $$where $\mathbf{x}=(x,y,z)$ and $\mathbf{d}$ is the direction of the incident wave. In the implementation we use, $\mathbf{d} = \frac{1}{\sqrt{3}}(1,1,1)$.
The PDE is
$$ \Delta u + n(\mathbf{x})^2 k^2 u = 0, \quad \text{ in } \Omega\\ \Delta u + k^2 u = 0, \quad \text{ in } \mathbb{R}^3 \backslash \Omega $$In this example, we use
$$ n(\mathbf{x}) = 0.5 $$Since the interior wavenumber is constant one could have also used a BEM/BEM coupling approach. However, here we demonstrate the use of FEM for the interior problem using the FEniCSx finite element package.
In $\Omega$, the FEM part is formulated as
$$ \int_\Omega \nabla u\cdot\nabla v -k^2\int_\Omega n^2uv - \int_{d\Omega} v\frac{\partial u}{\partial \nu} = 0, $$or
$$ \langle\nabla u,\nabla v\rangle_\Omega - k^2\langle n^2u,v\rangle_\Omega - \langle \lambda,v\rangle_\Gamma=0, $$where $\lambda=\frac{\partial u}{\partial \nu}$.
Later, we will write this as the following operator equation
$$ \mathsf{A}u-k^2 \mathsf{M}u-\mathsf{M}_\Gamma \lambda = 0 $$In $\mathbb{R}^3 \backslash \Omega$, we let $u = u^\text{inc}+u^\text{s}$, where $u^\text{inc}$ is the incident wave and $u^\text{s}$ is the scattered wave. As given in Integral equation methods in scattering theory by Colton & Kress,
$$ 0 = \mathcal{K}u^\text{inc}-\mathcal{V}\frac{\partial u^{inc}}{\partial \nu},\\[2mm] u^\text{s} = \mathcal{K}u^\text{s}-\mathcal{V}\frac{\partial u^{s}}{\partial \nu}, $$where $\mathcal{K}$ and $\mathcal{V}$ are the double single layer potential operators. Adding these, we get
$$ u^\text{s} = \mathcal{K}u-\mathcal{V}\lambda. $$This representation formula will be used to find $u^\text{s}$ for plotting later.
Taking the trace on the boundary gives
$$ u-u^\text{inc} = \left(\tfrac{1}{2}\mathsf{Id}+\mathsf{K}\right)u -\mathsf{V}\lambda. $$This rearranges to
$$ u^\text{inc} = \left(\tfrac{1}{2}\mathsf{Id}-\mathsf{K}\right)u+\mathsf{V}\lambda. $$The full blocked formulation is
$$ \begin{bmatrix} \mathsf{A}-k^2 \mathsf{M} & -\mathsf{M}_\Gamma\\ \tfrac{1}{2}\mathsf{Id}-\mathsf{K} & \mathsf{V} \end{bmatrix} \begin{bmatrix} u\\ \lambda \end{bmatrix}=\begin{bmatrix} 0\\ u^\text{inc} \end{bmatrix}. $$This formulation is not stable for all frequencies due to the possibility of interior resonances. But it is sufficient for this example and serves as a blueprint for more complex formulations.
We begin by importing DOLFINx (the FEniCSx python library), UFL (FEniCS's unified form language), MPI, Bempp and NumPy.
import dolfinx
from dolfinx.fem import functionspace, function
from dolfinx.mesh import create_unit_cube
import dolfinx.geometry
import ufl
from mpi4py import MPI
import bempp.api
import numpy as np
Next, we set the wavenumber k
and the direction d
of the incoming wave.
k = 6.
d = np.array([1., 1., 1])
d /= np.linalg.norm(d)
We create a DOLFINx mesh. Later, the boundary mesh will be extracted from this.
mesh = create_unit_cube(MPI.COMM_WORLD, 10, 10, 10)
Next, we make the DOLFINx and Bempp function spaces.
The function fenics_to_bempp_trace_data
will extract the trace space from the DOLFINx space and create the matrix trace_matrix
, which maps between the dofs (degrees of freedom) in DOLFINx and Bempp.
from bempp.api.external import fenicsx
fenics_space = functionspace(mesh, ("CG", 1))
trace_space, trace_matrix = \
fenicsx.fenics_to_bempp_trace_data(fenics_space)
bempp_space = bempp.api.function_space(trace_space.grid, "DP", 0)
fem_size = fenics_space.dofmap.index_map.size_global
bem_size = bempp_space.global_dof_count
print("FEM dofs: {0}".format(fem_size))
print("BEM dofs: {0}".format(bem_size))
INFO:bempp:Created grid with id c8ce5f52-7d2c-4a7b-8127-ae6c4c774573. Elements: 1200. Edges: 1800. Vertices: 602 TIMING:bempp:Grid.__init__ : 3.452e+00s TIMING:bempp:_compute_p1_dof_map : 1.514e+00s TIMING:bempp:p1_continuous_function_space : 1.521e+00s TIMING:bempp:p0_discontinuous_function_space : 8.383e-04s
FEM dofs: 1331 BEM dofs: 1200
We create the boundary operators that we need.
id_op = bempp.api.operators.boundary.sparse.identity(
trace_space, bempp_space, bempp_space)
mass = bempp.api.operators.boundary.sparse.identity(
bempp_space, bempp_space, trace_space)
dlp = bempp.api.operators.boundary.helmholtz.double_layer(
trace_space, bempp_space, bempp_space, k)
slp = bempp.api.operators.boundary.helmholtz.single_layer(
bempp_space, bempp_space, bempp_space, k)
We create the DOLFINx function spaces and the function (or in this case constant) n
.
u = ufl.TrialFunction(fenics_space)
v = ufl.TestFunction(fenics_space)
n = 0.5
We make the vectors on the right hand side of the formulation.
@bempp.api.complex_callable
def u_inc(x, n, domain_index, result):
result[0] = np.exp(1j * k * np.dot(x, d))
u_inc = bempp.api.GridFunction(bempp_space, fun=u_inc)
# The rhs from the FEM
rhs_fem = np.zeros(fem_size)
# The rhs from the BEM
rhs_bem = u_inc.projections(bempp_space)
# The combined rhs
rhs = np.concatenate([rhs_fem, rhs_bem])
We are now ready to create a BlockedLinearOperator
containing all four parts of the discretisation of
$$
\begin{bmatrix}
\mathsf{A}-k^2 \mathsf{M} & -\mathsf{M}_\Gamma\\
\tfrac{1}{2}\mathsf{Id}-\mathsf{K} & \mathsf{V}
\end{bmatrix}.
$$
from bempp.api.assembly.blocked_operator import BlockedDiscreteOperator
from scipy.sparse.linalg.interface import LinearOperator
blocks = [[None,None],[None,None]]
trace_op = LinearOperator(trace_matrix.shape, lambda x:trace_matrix @ x)
A = fenicsx.FenicsOperator((ufl.inner(ufl.grad(u), ufl.grad(v)) - k**2 * n**2 * ufl.inner(u, v)) * ufl.dx)
blocks[0][0] = A.weak_form()
blocks[0][1] = -trace_matrix.T * mass.weak_form().to_sparse()
blocks[1][0] = (.5 * id_op - dlp).weak_form() * trace_op
blocks[1][1] = slp.weak_form()
blocked = BlockedDiscreteOperator(np.array(blocks))
TIMING:bempp:Start operation: TIMING:bempp:Finished Operation: : 3.2153611183166504s TIMING:bempp:assemble_sparse : 3.217e+00s TIMING:bempp:Start operation: TIMING:bempp:Finished Operation: : 2.544266700744629s TIMING:bempp:assemble_sparse : 2.545e+00s TIMING:bempp:Start operation: Regular assembler:helmholtz_double_layer_boundary:opencl INFO:bempp:OpenCL CPU Device set to: pthread-Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz TIMING:bempp:Finished Operation: Regular assembler:helmholtz_double_layer_boundary:opencl: 1.7337913513183594s TIMING:bempp:Start operation: Singular assembler:helmholtz_double_layer_boundary:opencl TIMING:bempp:Finished Operation: Singular assembler:helmholtz_double_layer_boundary:opencl: 0.5207102298736572s TIMING:bempp:Start operation: Regular assembler:helmholtz_single_layer_boundary:opencl TIMING:bempp:Finished Operation: Regular assembler:helmholtz_single_layer_boundary:opencl: 1.0467305183410645s TIMING:bempp:Start operation: Singular assembler:helmholtz_single_layer_boundary:opencl TIMING:bempp:Finished Operation: Singular assembler:helmholtz_single_layer_boundary:opencl: 0.49677538871765137s
Next, we solve the system, then split the solution into the parts assosiated with u and λ. For an efficient solve, preconditioning is required.
from bempp.api.assembly.discrete_boundary_operator import InverseSparseDiscreteBoundaryOperator
from scipy.sparse.linalg import LinearOperator
# Compute the sparse inverse of the Helmholtz operator
# Although it is not a boundary operator we can use
# the SparseInverseDiscreteBoundaryOperator function from
# BEM++ to turn its LU decomposition into a linear operator.
P1 = InverseSparseDiscreteBoundaryOperator(
blocked[0,0].to_sparse().tocsc())
# For the Laplace slp we use a simple mass matrix preconditioner.
# This is sufficient for smaller low-frequency problems.
P2 = InverseSparseDiscreteBoundaryOperator(
bempp.api.operators.boundary.sparse.identity(
bempp_space, bempp_space, bempp_space).weak_form())
# Create a block diagonal preconditioner object using the Scipy LinearOperator class
def apply_prec(x):
"""Apply the block diagonal preconditioner"""
m1 = P1.shape[0]
m2 = P2.shape[0]
n1 = P1.shape[1]
n2 = P2.shape[1]
res1 = P1.dot(x[:n1])
res2 = P2.dot(x[n1:])
return np.concatenate([res1, res2])
p_shape = (P1.shape[0] + P2.shape[0], P1.shape[1] + P2.shape[1])
P = LinearOperator(p_shape, apply_prec, dtype=np.dtype('complex128'))
# Create a callback function to count the number of iterations
it_count = 0
def count_iterations(x):
global it_count
it_count += 1
from scipy.sparse.linalg import gmres
soln, info = gmres(blocked, rhs, M=P, callback=count_iterations)
soln_fem = soln[:fem_size]
soln_bem = soln[fem_size:]
print("Number of iterations: {0}".format(it_count))
TIMING:bempp:_Solver.__init__ : 2.485e-02s TIMING:bempp:Start operation: TIMING:bempp:Finished Operation: : 1.1819589138031006s TIMING:bempp:assemble_sparse : 1.184e+00s WARNING:py.warnings:/usr/lib/python3/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py:296: SparseEfficiencyWarning: splu requires CSC matrix format warn('splu requires CSC matrix format', SparseEfficiencyWarning) TIMING:bempp:_Solver.__init__ : 3.294e-03s TIMING:bempp:_Solver.solve : 2.603e-03s TIMING:bempp:_Solver.solve : 3.290e-05s TIMING:bempp:_Solver.solve : 3.338e-05s TIMING:bempp:_Solver.solve : 8.276e-04s TIMING:bempp:_Solver.solve : 8.810e-04s TIMING:bempp:_Solver.solve : 2.587e-04s TIMING:bempp:_Solver.solve : 1.340e-04s TIMING:bempp:_Solver.solve : 1.208e-03s TIMING:bempp:_Solver.solve : 8.800e-04s TIMING:bempp:_Solver.solve : 2.425e-04s TIMING:bempp:_Solver.solve : 2.391e-04s TIMING:bempp:_Solver.solve : 1.192e-03s TIMING:bempp:_Solver.solve : 8.972e-04s TIMING:bempp:_Solver.solve : 2.308e-04s TIMING:bempp:_Solver.solve : 2.244e-04s TIMING:bempp:_Solver.solve : 1.179e-03s TIMING:bempp:_Solver.solve : 8.926e-04s TIMING:bempp:_Solver.solve : 2.258e-04s TIMING:bempp:_Solver.solve : 2.530e-04s TIMING:bempp:_Solver.solve : 1.243e-03s TIMING:bempp:_Solver.solve : 9.072e-04s TIMING:bempp:_Solver.solve : 2.186e-04s TIMING:bempp:_Solver.solve : 1.905e-04s TIMING:bempp:_Solver.solve : 1.084e-03s TIMING:bempp:_Solver.solve : 9.575e-04s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 2.680e-04s TIMING:bempp:_Solver.solve : 9.916e-04s TIMING:bempp:_Solver.solve : 1.271e-03s TIMING:bempp:_Solver.solve : 1.290e-04s TIMING:bempp:_Solver.solve : 1.674e-04s TIMING:bempp:_Solver.solve : 1.214e-03s TIMING:bempp:_Solver.solve : 9.804e-04s TIMING:bempp:_Solver.solve : 3.219e-05s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 9.716e-04s TIMING:bempp:_Solver.solve : 7.665e-04s TIMING:bempp:_Solver.solve : 1.566e-04s TIMING:bempp:_Solver.solve : 1.156e-04s TIMING:bempp:_Solver.solve : 1.028e-03s TIMING:bempp:_Solver.solve : 1.048e-03s TIMING:bempp:_Solver.solve : 1.366e-04s TIMING:bempp:_Solver.solve : 1.922e-04s TIMING:bempp:_Solver.solve : 1.075e-03s TIMING:bempp:_Solver.solve : 1.153e-03s TIMING:bempp:_Solver.solve : 1.676e-04s TIMING:bempp:_Solver.solve : 1.938e-04s TIMING:bempp:_Solver.solve : 1.096e-03s TIMING:bempp:_Solver.solve : 9.286e-04s TIMING:bempp:_Solver.solve : 9.680e-05s TIMING:bempp:_Solver.solve : 1.898e-04s TIMING:bempp:_Solver.solve : 1.013e-03s TIMING:bempp:_Solver.solve : 9.339e-04s TIMING:bempp:_Solver.solve : 1.729e-04s TIMING:bempp:_Solver.solve : 1.745e-04s TIMING:bempp:_Solver.solve : 1.074e-03s TIMING:bempp:_Solver.solve : 8.385e-04s TIMING:bempp:_Solver.solve : 1.476e-04s TIMING:bempp:_Solver.solve : 1.962e-04s TIMING:bempp:_Solver.solve : 1.004e-03s TIMING:bempp:_Solver.solve : 1.191e-03s TIMING:bempp:_Solver.solve : 1.345e-04s TIMING:bempp:_Solver.solve : 1.667e-04s TIMING:bempp:_Solver.solve : 1.216e-03s TIMING:bempp:_Solver.solve : 8.729e-04s TIMING:bempp:_Solver.solve : 1.292e-04s TIMING:bempp:_Solver.solve : 1.559e-04s TIMING:bempp:_Solver.solve : 9.711e-04s TIMING:bempp:_Solver.solve : 8.779e-04s TIMING:bempp:_Solver.solve : 1.321e-04s TIMING:bempp:_Solver.solve : 1.857e-04s TIMING:bempp:_Solver.solve : 1.228e-03s TIMING:bempp:_Solver.solve : 8.600e-04s TIMING:bempp:_Solver.solve : 1.309e-04s TIMING:bempp:_Solver.solve : 1.640e-04s TIMING:bempp:_Solver.solve : 9.894e-04s TIMING:bempp:_Solver.solve : 9.060e-04s TIMING:bempp:_Solver.solve : 1.671e-04s TIMING:bempp:_Solver.solve : 2.706e-04s TIMING:bempp:_Solver.solve : 1.153e-03s TIMING:bempp:_Solver.solve : 7.885e-04s TIMING:bempp:_Solver.solve : 1.364e-04s TIMING:bempp:_Solver.solve : 2.036e-04s TIMING:bempp:_Solver.solve : 9.329e-04s TIMING:bempp:_Solver.solve : 9.768e-04s TIMING:bempp:_Solver.solve : 1.335e-04s TIMING:bempp:_Solver.solve : 1.578e-04s TIMING:bempp:_Solver.solve : 9.742e-04s TIMING:bempp:_Solver.solve : 8.216e-04s TIMING:bempp:_Solver.solve : 1.314e-04s TIMING:bempp:_Solver.solve : 1.636e-04s TIMING:bempp:_Solver.solve : 9.387e-04s TIMING:bempp:_Solver.solve : 8.545e-04s TIMING:bempp:_Solver.solve : 3.242e-05s TIMING:bempp:_Solver.solve : 1.965e-04s TIMING:bempp:_Solver.solve : 9.096e-04s TIMING:bempp:_Solver.solve : 8.411e-04s TIMING:bempp:_Solver.solve : 1.564e-04s TIMING:bempp:_Solver.solve : 1.407e-04s TIMING:bempp:_Solver.solve : 9.649e-04s TIMING:bempp:_Solver.solve : 8.235e-04s TIMING:bempp:_Solver.solve : 1.719e-04s TIMING:bempp:_Solver.solve : 1.581e-04s TIMING:bempp:_Solver.solve : 9.449e-04s TIMING:bempp:_Solver.solve : 9.179e-04s TIMING:bempp:_Solver.solve : 1.583e-04s TIMING:bempp:_Solver.solve : 1.473e-04s TIMING:bempp:_Solver.solve : 8.063e-04s TIMING:bempp:_Solver.solve : 9.191e-04s TIMING:bempp:_Solver.solve : 2.220e-04s TIMING:bempp:_Solver.solve : 1.483e-04s TIMING:bempp:_Solver.solve : 9.310e-04s TIMING:bempp:_Solver.solve : 1.012e-03s TIMING:bempp:_Solver.solve : 1.302e-04s TIMING:bempp:_Solver.solve : 1.152e-04s TIMING:bempp:_Solver.solve : 8.609e-04s TIMING:bempp:_Solver.solve : 8.743e-04s TIMING:bempp:_Solver.solve : 3.338e-05s TIMING:bempp:_Solver.solve : 2.022e-04s TIMING:bempp:_Solver.solve : 7.946e-04s TIMING:bempp:_Solver.solve : 1.317e-03s TIMING:bempp:_Solver.solve : 1.807e-04s TIMING:bempp:_Solver.solve : 6.413e-05s TIMING:bempp:_Solver.solve : 1.010e-03s TIMING:bempp:_Solver.solve : 1.074e-03s TIMING:bempp:_Solver.solve : 1.519e-04s TIMING:bempp:_Solver.solve : 1.464e-04s TIMING:bempp:_Solver.solve : 8.152e-04s TIMING:bempp:_Solver.solve : 8.495e-04s TIMING:bempp:_Solver.solve : 1.750e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 1.019e-03s TIMING:bempp:_Solver.solve : 8.304e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 7.467e-04s TIMING:bempp:_Solver.solve : 1.166e-03s TIMING:bempp:_Solver.solve : 3.982e-05s TIMING:bempp:_Solver.solve : 3.505e-05s TIMING:bempp:_Solver.solve : 7.129e-04s TIMING:bempp:_Solver.solve : 8.085e-04s TIMING:bempp:_Solver.solve : 3.266e-05s TIMING:bempp:_Solver.solve : 3.123e-05s TIMING:bempp:_Solver.solve : 7.393e-04s TIMING:bempp:_Solver.solve : 7.834e-04s TIMING:bempp:_Solver.solve : 2.298e-04s TIMING:bempp:_Solver.solve : 1.037e-04s TIMING:bempp:_Solver.solve : 9.568e-04s TIMING:bempp:_Solver.solve : 9.155e-04s TIMING:bempp:_Solver.solve : 3.123e-05s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 6.881e-04s TIMING:bempp:_Solver.solve : 8.810e-04s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 6.635e-04s TIMING:bempp:_Solver.solve : 9.358e-04s TIMING:bempp:_Solver.solve : 3.910e-05s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 7.758e-04s TIMING:bempp:_Solver.solve : 8.059e-04s TIMING:bempp:_Solver.solve : 1.156e-04s TIMING:bempp:_Solver.solve : 1.330e-04s TIMING:bempp:_Solver.solve : 7.875e-04s TIMING:bempp:_Solver.solve : 7.737e-04s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 6.828e-04s TIMING:bempp:_Solver.solve : 1.284e-03s TIMING:bempp:_Solver.solve : 3.982e-05s TIMING:bempp:_Solver.solve : 3.886e-05s TIMING:bempp:_Solver.solve : 8.783e-04s TIMING:bempp:_Solver.solve : 1.065e-03s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 7.150e-04s TIMING:bempp:_Solver.solve : 9.940e-04s TIMING:bempp:_Solver.solve : 3.147e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 7.133e-04s TIMING:bempp:_Solver.solve : 8.228e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.821e-04s TIMING:bempp:_Solver.solve : 7.975e-04s TIMING:bempp:_Solver.solve : 1.431e-04s TIMING:bempp:_Solver.solve : 1.299e-04s TIMING:bempp:_Solver.solve : 7.699e-04s TIMING:bempp:_Solver.solve : 8.125e-04s TIMING:bempp:_Solver.solve : 1.333e-04s TIMING:bempp:_Solver.solve : 1.321e-04s TIMING:bempp:_Solver.solve : 7.551e-04s TIMING:bempp:_Solver.solve : 9.153e-04s TIMING:bempp:_Solver.solve : 3.123e-05s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 7.625e-04s TIMING:bempp:_Solver.solve : 7.913e-04s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 7.832e-04s TIMING:bempp:_Solver.solve : 9.110e-04s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 6.731e-04s TIMING:bempp:_Solver.solve : 7.787e-04s TIMING:bempp:_Solver.solve : 1.178e-04s TIMING:bempp:_Solver.solve : 1.371e-04s TIMING:bempp:_Solver.solve : 7.672e-04s TIMING:bempp:_Solver.solve : 8.984e-04s TIMING:bempp:_Solver.solve : 1.154e-04s TIMING:bempp:_Solver.solve : 1.299e-04s TIMING:bempp:_Solver.solve : 7.405e-04s TIMING:bempp:_Solver.solve : 1.014e-03s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 1.905e-04s TIMING:bempp:_Solver.solve : 7.696e-04s TIMING:bempp:_Solver.solve : 9.317e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 6.814e-04s TIMING:bempp:_Solver.solve : 1.054e-03s TIMING:bempp:_Solver.solve : 3.958e-05s TIMING:bempp:_Solver.solve : 1.614e-04s TIMING:bempp:_Solver.solve : 8.748e-04s TIMING:bempp:_Solver.solve : 8.898e-04s TIMING:bempp:_Solver.solve : 3.171e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 7.162e-04s TIMING:bempp:_Solver.solve : 8.552e-04s TIMING:bempp:_Solver.solve : 3.123e-05s TIMING:bempp:_Solver.solve : 7.629e-05s TIMING:bempp:_Solver.solve : 7.591e-04s TIMING:bempp:_Solver.solve : 1.103e-03s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 6.757e-04s TIMING:bempp:_Solver.solve : 9.403e-04s TIMING:bempp:_Solver.solve : 3.386e-05s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 7.639e-04s TIMING:bempp:_Solver.solve : 8.948e-04s TIMING:bempp:_Solver.solve : 2.313e-04s TIMING:bempp:_Solver.solve : 1.936e-04s TIMING:bempp:_Solver.solve : 1.116e-03s TIMING:bempp:_Solver.solve : 7.756e-04s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 7.844e-04s TIMING:bempp:_Solver.solve : 1.004e-03s TIMING:bempp:_Solver.solve : 8.106e-05s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 7.961e-04s TIMING:bempp:_Solver.solve : 8.743e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 1.931e-04s TIMING:bempp:_Solver.solve : 8.113e-04s TIMING:bempp:_Solver.solve : 9.673e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 5.364e-05s TIMING:bempp:_Solver.solve : 7.625e-04s TIMING:bempp:_Solver.solve : 7.482e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 7.658e-04s TIMING:bempp:_Solver.solve : 7.985e-04s TIMING:bempp:_Solver.solve : 3.743e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 7.753e-04s TIMING:bempp:_Solver.solve : 1.381e-03s TIMING:bempp:_Solver.solve : 3.314e-05s TIMING:bempp:_Solver.solve : 3.552e-05s TIMING:bempp:_Solver.solve : 7.865e-04s TIMING:bempp:_Solver.solve : 1.002e-03s TIMING:bempp:_Solver.solve : 3.338e-05s TIMING:bempp:_Solver.solve : 3.219e-05s TIMING:bempp:_Solver.solve : 8.779e-04s TIMING:bempp:_Solver.solve : 1.071e-03s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 6.752e-04s TIMING:bempp:_Solver.solve : 1.159e-03s TIMING:bempp:_Solver.solve : 3.386e-05s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 7.625e-04s TIMING:bempp:_Solver.solve : 1.010e-03s TIMING:bempp:_Solver.solve : 6.747e-05s TIMING:bempp:_Solver.solve : 5.937e-05s TIMING:bempp:_Solver.solve : 9.420e-04s TIMING:bempp:_Solver.solve : 8.259e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 6.890e-04s TIMING:bempp:_Solver.solve : 8.676e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 7.906e-04s TIMING:bempp:_Solver.solve : 9.704e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 6.683e-04s TIMING:bempp:_Solver.solve : 7.670e-04s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.487e-04s TIMING:bempp:_Solver.solve : 1.050e-03s TIMING:bempp:_Solver.solve : 3.219e-05s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 7.055e-04s TIMING:bempp:_Solver.solve : 9.456e-04s TIMING:bempp:_Solver.solve : 3.910e-05s TIMING:bempp:_Solver.solve : 3.290e-05s TIMING:bempp:_Solver.solve : 7.801e-04s TIMING:bempp:_Solver.solve : 1.014e-03s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 7.193e-04s TIMING:bempp:_Solver.solve : 8.996e-04s TIMING:bempp:_Solver.solve : 1.199e-04s TIMING:bempp:_Solver.solve : 1.156e-04s TIMING:bempp:_Solver.solve : 7.031e-04s TIMING:bempp:_Solver.solve : 7.637e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 7.741e-04s TIMING:bempp:_Solver.solve : 7.689e-04s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.800e-04s TIMING:bempp:_Solver.solve : 1.248e-03s TIMING:bempp:_Solver.solve : 1.805e-04s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 7.985e-04s TIMING:bempp:_Solver.solve : 8.991e-04s TIMING:bempp:_Solver.solve : 3.290e-05s TIMING:bempp:_Solver.solve : 2.069e-04s TIMING:bempp:_Solver.solve : 8.328e-04s TIMING:bempp:_Solver.solve : 8.013e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 7.248e-04s TIMING:bempp:_Solver.solve : 9.654e-04s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 6.781e-04s TIMING:bempp:_Solver.solve : 8.404e-04s TIMING:bempp:_Solver.solve : 5.388e-05s TIMING:bempp:_Solver.solve : 1.266e-04s TIMING:bempp:_Solver.solve : 7.939e-04s TIMING:bempp:_Solver.solve : 8.543e-04s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 6.206e-04s TIMING:bempp:_Solver.solve : 8.314e-04s TIMING:bempp:_Solver.solve : 1.214e-04s TIMING:bempp:_Solver.solve : 1.163e-04s TIMING:bempp:_Solver.solve : 7.126e-04s TIMING:bempp:_Solver.solve : 7.923e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 1.779e-04s TIMING:bempp:_Solver.solve : 8.543e-04s TIMING:bempp:_Solver.solve : 7.830e-04s TIMING:bempp:_Solver.solve : 1.476e-04s TIMING:bempp:_Solver.solve : 1.469e-04s TIMING:bempp:_Solver.solve : 8.256e-04s TIMING:bempp:_Solver.solve : 7.710e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 8.707e-04s TIMING:bempp:_Solver.solve : 9.985e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 6.664e-04s TIMING:bempp:_Solver.solve : 9.685e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 7.331e-04s TIMING:bempp:_Solver.solve : 9.124e-04s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 6.707e-04s TIMING:bempp:_Solver.solve : 8.008e-04s TIMING:bempp:_Solver.solve : 3.147e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 6.807e-04s TIMING:bempp:_Solver.solve : 7.713e-04s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 8.893e-04s TIMING:bempp:_Solver.solve : 8.109e-04s TIMING:bempp:_Solver.solve : 5.388e-05s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 7.088e-04s TIMING:bempp:_Solver.solve : 9.913e-04s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 1.893e-04s TIMING:bempp:_Solver.solve : 9.179e-04s TIMING:bempp:_Solver.solve : 8.721e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 7.043e-04s TIMING:bempp:_Solver.solve : 7.699e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 6.700e-04s TIMING:bempp:_Solver.solve : 8.259e-04s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 2.317e-04s TIMING:bempp:_Solver.solve : 9.050e-04s TIMING:bempp:_Solver.solve : 7.606e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.416e-04s TIMING:bempp:_Solver.solve : 1.021e-03s TIMING:bempp:_Solver.solve : 3.314e-05s TIMING:bempp:_Solver.solve : 2.410e-04s TIMING:bempp:_Solver.solve : 9.196e-04s TIMING:bempp:_Solver.solve : 7.873e-04s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 7.713e-04s TIMING:bempp:_Solver.solve : 8.078e-04s TIMING:bempp:_Solver.solve : 1.566e-04s TIMING:bempp:_Solver.solve : 1.392e-04s TIMING:bempp:_Solver.solve : 8.557e-04s TIMING:bempp:_Solver.solve : 7.634e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.127e-04s TIMING:bempp:_Solver.solve : 9.358e-04s TIMING:bempp:_Solver.solve : 3.219e-05s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 7.930e-04s TIMING:bempp:_Solver.solve : 8.845e-04s TIMING:bempp:_Solver.solve : 1.106e-04s TIMING:bempp:_Solver.solve : 1.678e-04s TIMING:bempp:_Solver.solve : 9.129e-04s TIMING:bempp:_Solver.solve : 8.597e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 1.089e-03s TIMING:bempp:_Solver.solve : 8.030e-04s TIMING:bempp:_Solver.solve : 3.147e-05s TIMING:bempp:_Solver.solve : 2.260e-04s TIMING:bempp:_Solver.solve : 9.875e-04s TIMING:bempp:_Solver.solve : 8.254e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 1.886e-04s TIMING:bempp:_Solver.solve : 7.875e-04s TIMING:bempp:_Solver.solve : 8.574e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 7.846e-04s TIMING:bempp:_Solver.solve : 8.905e-04s TIMING:bempp:_Solver.solve : 5.770e-05s TIMING:bempp:_Solver.solve : 7.892e-05s TIMING:bempp:_Solver.solve : 7.753e-04s TIMING:bempp:_Solver.solve : 8.838e-04s TIMING:bempp:_Solver.solve : 1.109e-04s TIMING:bempp:_Solver.solve : 1.447e-04s TIMING:bempp:_Solver.solve : 7.291e-04s TIMING:bempp:_Solver.solve : 9.143e-04s TIMING:bempp:_Solver.solve : 1.495e-04s TIMING:bempp:_Solver.solve : 1.504e-04s TIMING:bempp:_Solver.solve : 8.612e-04s TIMING:bempp:_Solver.solve : 7.725e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 1.674e-04s TIMING:bempp:_Solver.solve : 7.346e-04s TIMING:bempp:_Solver.solve : 8.109e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 7.334e-04s TIMING:bempp:_Solver.solve : 8.266e-04s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 3.242e-05s TIMING:bempp:_Solver.solve : 7.696e-04s TIMING:bempp:_Solver.solve : 8.099e-04s TIMING:bempp:_Solver.solve : 1.256e-04s TIMING:bempp:_Solver.solve : 1.121e-04s TIMING:bempp:_Solver.solve : 7.157e-04s TIMING:bempp:_Solver.solve : 7.975e-04s TIMING:bempp:_Solver.solve : 1.366e-04s TIMING:bempp:_Solver.solve : 1.233e-04s TIMING:bempp:_Solver.solve : 7.782e-04s TIMING:bempp:_Solver.solve : 7.451e-04s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 7.544e-04s TIMING:bempp:_Solver.solve : 9.091e-04s TIMING:bempp:_Solver.solve : 3.409e-05s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 7.663e-04s TIMING:bempp:_Solver.solve : 8.328e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 7.994e-04s TIMING:bempp:_Solver.solve : 9.403e-04s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 5.794e-05s TIMING:bempp:_Solver.solve : 1.014e-03s TIMING:bempp:_Solver.solve : 1.041e-03s TIMING:bempp:_Solver.solve : 3.552e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 6.859e-04s TIMING:bempp:_Solver.solve : 7.877e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 6.056e-05s TIMING:bempp:_Solver.solve : 7.474e-04s TIMING:bempp:_Solver.solve : 8.681e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.503e-05s TIMING:bempp:_Solver.solve : 7.019e-04s TIMING:bempp:_Solver.solve : 8.023e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.544e-04s TIMING:bempp:_Solver.solve : 8.557e-04s TIMING:bempp:_Solver.solve : 8.774e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.733e-04s TIMING:bempp:_Solver.solve : 8.707e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 7.441e-04s TIMING:bempp:_Solver.solve : 7.961e-04s TIMING:bempp:_Solver.solve : 1.431e-04s TIMING:bempp:_Solver.solve : 1.075e-04s TIMING:bempp:_Solver.solve : 8.585e-04s TIMING:bempp:_Solver.solve : 8.388e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.077e-04s TIMING:bempp:_Solver.solve : 7.350e-04s TIMING:bempp:_Solver.solve : 9.706e-04s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 2.072e-04s TIMING:bempp:_Solver.solve : 8.371e-04s TIMING:bempp:_Solver.solve : 8.144e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.566e-04s TIMING:bempp:_Solver.solve : 8.376e-04s TIMING:bempp:_Solver.solve : 3.767e-05s TIMING:bempp:_Solver.solve : 7.629e-05s TIMING:bempp:_Solver.solve : 8.314e-04s TIMING:bempp:_Solver.solve : 7.715e-04s TIMING:bempp:_Solver.solve : 1.252e-04s TIMING:bempp:_Solver.solve : 1.321e-04s TIMING:bempp:_Solver.solve : 7.391e-04s TIMING:bempp:_Solver.solve : 1.102e-03s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 7.222e-04s TIMING:bempp:_Solver.solve : 9.072e-04s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 7.939e-05s TIMING:bempp:_Solver.solve : 1.105e-03s TIMING:bempp:_Solver.solve : 8.852e-04s TIMING:bempp:_Solver.solve : 1.209e-04s TIMING:bempp:_Solver.solve : 1.409e-04s TIMING:bempp:_Solver.solve : 7.353e-04s TIMING:bempp:_Solver.solve : 8.545e-04s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 7.460e-04s TIMING:bempp:_Solver.solve : 7.846e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 6.840e-04s TIMING:bempp:_Solver.solve : 1.024e-03s TIMING:bempp:_Solver.solve : 3.481e-05s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 1.011e-03s TIMING:bempp:_Solver.solve : 8.836e-04s TIMING:bempp:_Solver.solve : 3.409e-05s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 7.524e-04s TIMING:bempp:_Solver.solve : 8.304e-04s TIMING:bempp:_Solver.solve : 1.159e-04s TIMING:bempp:_Solver.solve : 1.442e-04s TIMING:bempp:_Solver.solve : 7.365e-04s TIMING:bempp:_Solver.solve : 8.807e-04s TIMING:bempp:_Solver.solve : 1.700e-04s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 8.399e-04s TIMING:bempp:_Solver.solve : 8.776e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 6.721e-04s TIMING:bempp:_Solver.solve : 1.028e-03s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 7.219e-04s TIMING:bempp:_Solver.solve : 8.123e-04s TIMING:bempp:_Solver.solve : 1.709e-04s TIMING:bempp:_Solver.solve : 1.123e-04s TIMING:bempp:_Solver.solve : 8.078e-04s TIMING:bempp:_Solver.solve : 8.316e-04s TIMING:bempp:_Solver.solve : 1.166e-04s TIMING:bempp:_Solver.solve : 1.328e-04s TIMING:bempp:_Solver.solve : 7.341e-04s TIMING:bempp:_Solver.solve : 8.926e-04s TIMING:bempp:_Solver.solve : 1.616e-04s TIMING:bempp:_Solver.solve : 1.342e-04s TIMING:bempp:_Solver.solve : 7.768e-04s TIMING:bempp:_Solver.solve : 7.553e-04s TIMING:bempp:_Solver.solve : 1.092e-04s TIMING:bempp:_Solver.solve : 1.409e-04s TIMING:bempp:_Solver.solve : 7.980e-04s TIMING:bempp:_Solver.solve : 8.533e-04s TIMING:bempp:_Solver.solve : 7.772e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 7.429e-04s TIMING:bempp:_Solver.solve : 9.735e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.034e-04s TIMING:bempp:_Solver.solve : 8.402e-04s TIMING:bempp:_Solver.solve : 8.748e-04s TIMING:bempp:_Solver.solve : 1.204e-04s TIMING:bempp:_Solver.solve : 1.400e-04s TIMING:bempp:_Solver.solve : 7.346e-04s TIMING:bempp:_Solver.solve : 8.864e-04s TIMING:bempp:_Solver.solve : 3.290e-05s TIMING:bempp:_Solver.solve : 2.067e-04s TIMING:bempp:_Solver.solve : 8.714e-04s TIMING:bempp:_Solver.solve : 7.923e-04s TIMING:bempp:_Solver.solve : 1.223e-04s TIMING:bempp:_Solver.solve : 1.254e-04s TIMING:bempp:_Solver.solve : 7.582e-04s TIMING:bempp:_Solver.solve : 8.876e-04s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 8.633e-04s TIMING:bempp:_Solver.solve : 8.719e-04s TIMING:bempp:_Solver.solve : 1.130e-04s TIMING:bempp:_Solver.solve : 1.366e-04s TIMING:bempp:_Solver.solve : 7.782e-04s TIMING:bempp:_Solver.solve : 8.402e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.719e-04s TIMING:bempp:_Solver.solve : 8.302e-04s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 7.412e-04s TIMING:bempp:_Solver.solve : 7.615e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 1.683e-04s TIMING:bempp:_Solver.solve : 7.601e-04s TIMING:bempp:_Solver.solve : 1.001e-03s TIMING:bempp:_Solver.solve : 3.266e-05s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 7.408e-04s TIMING:bempp:_Solver.solve : 8.438e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 7.393e-04s TIMING:bempp:_Solver.solve : 8.175e-04s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 1.469e-04s TIMING:bempp:_Solver.solve : 6.795e-04s TIMING:bempp:_Solver.solve : 9.582e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 7.069e-04s TIMING:bempp:_Solver.solve : 7.644e-04s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 6.888e-04s TIMING:bempp:_Solver.solve : 8.492e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 7.894e-04s TIMING:bempp:_Solver.solve : 8.767e-04s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 2.327e-04s TIMING:bempp:_Solver.solve : 9.317e-04s TIMING:bempp:_Solver.solve : 7.668e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.886e-04s TIMING:bempp:_Solver.solve : 8.273e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 7.353e-04s TIMING:bempp:_Solver.solve : 8.230e-04s TIMING:bempp:_Solver.solve : 1.190e-04s TIMING:bempp:_Solver.solve : 1.605e-04s TIMING:bempp:_Solver.solve : 8.678e-04s TIMING:bempp:_Solver.solve : 8.283e-04s TIMING:bempp:_Solver.solve : 1.221e-04s TIMING:bempp:_Solver.solve : 1.402e-04s TIMING:bempp:_Solver.solve : 7.391e-04s TIMING:bempp:_Solver.solve : 9.961e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 7.477e-04s TIMING:bempp:_Solver.solve : 9.437e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.551e-05s TIMING:bempp:_Solver.solve : 6.814e-04s TIMING:bempp:_Solver.solve : 1.156e-03s TIMING:bempp:_Solver.solve : 3.219e-05s TIMING:bempp:_Solver.solve : 2.043e-04s TIMING:bempp:_Solver.solve : 8.123e-04s TIMING:bempp:_Solver.solve : 8.984e-04s TIMING:bempp:_Solver.solve : 1.557e-04s TIMING:bempp:_Solver.solve : 1.249e-04s TIMING:bempp:_Solver.solve : 7.737e-04s TIMING:bempp:_Solver.solve : 8.090e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 1.972e-04s TIMING:bempp:_Solver.solve : 7.770e-04s TIMING:bempp:_Solver.solve : 8.225e-04s TIMING:bempp:_Solver.solve : 2.394e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 1.014e-03s TIMING:bempp:_Solver.solve : 9.124e-04s TIMING:bempp:_Solver.solve : 1.113e-04s TIMING:bempp:_Solver.solve : 1.342e-04s TIMING:bempp:_Solver.solve : 7.157e-04s TIMING:bempp:_Solver.solve : 8.974e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.148e-04s TIMING:bempp:_Solver.solve : 8.397e-04s TIMING:bempp:_Solver.solve : 7.880e-04s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.855e-04s TIMING:bempp:_Solver.solve : 9.236e-04s TIMING:bempp:_Solver.solve : 3.576e-05s TIMING:bempp:_Solver.solve : 3.147e-05s TIMING:bempp:_Solver.solve : 7.629e-04s TIMING:bempp:_Solver.solve : 8.502e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.129e-04s TIMING:bempp:_Solver.solve : 8.337e-04s TIMING:bempp:_Solver.solve : 9.201e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 7.441e-04s TIMING:bempp:_Solver.solve : 8.171e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.809e-04s TIMING:bempp:_Solver.solve : 7.994e-04s TIMING:bempp:_Solver.solve : 9.131e-05s TIMING:bempp:_Solver.solve : 1.366e-04s TIMING:bempp:_Solver.solve : 8.008e-04s TIMING:bempp:_Solver.solve : 8.862e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 3.145e-04s TIMING:bempp:_Solver.solve : 1.088e-03s TIMING:bempp:_Solver.solve : 7.896e-04s TIMING:bempp:_Solver.solve : 3.195e-05s TIMING:bempp:_Solver.solve : 1.004e-04s TIMING:bempp:_Solver.solve : 1.154e-03s TIMING:bempp:_Solver.solve : 8.876e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 9.277e-04s TIMING:bempp:_Solver.solve : 9.077e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 7.095e-04s TIMING:bempp:_Solver.solve : 9.389e-04s TIMING:bempp:_Solver.solve : 3.290e-05s TIMING:bempp:_Solver.solve : 2.127e-04s TIMING:bempp:_Solver.solve : 8.843e-04s TIMING:bempp:_Solver.solve : 9.282e-04s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 6.180e-04s TIMING:bempp:_Solver.solve : 9.253e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 7.198e-04s TIMING:bempp:_Solver.solve : 8.132e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.266e-04s TIMING:bempp:_Solver.solve : 9.935e-04s TIMING:bempp:_Solver.solve : 3.505e-05s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 7.300e-04s TIMING:bempp:_Solver.solve : 8.905e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 7.117e-04s TIMING:bempp:_Solver.solve : 9.747e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 6.325e-04s TIMING:bempp:_Solver.solve : 1.001e-03s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 1.588e-04s TIMING:bempp:_Solver.solve : 7.246e-04s TIMING:bempp:_Solver.solve : 8.693e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 5.102e-05s TIMING:bempp:_Solver.solve : 7.000e-04s TIMING:bempp:_Solver.solve : 9.401e-04s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 7.117e-04s TIMING:bempp:_Solver.solve : 7.513e-04s TIMING:bempp:_Solver.solve : 3.648e-05s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 7.908e-04s TIMING:bempp:_Solver.solve : 7.832e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 6.981e-04s TIMING:bempp:_Solver.solve : 9.274e-04s TIMING:bempp:_Solver.solve : 3.171e-05s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 7.205e-04s TIMING:bempp:_Solver.solve : 7.789e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 6.397e-04s TIMING:bempp:_Solver.solve : 8.433e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 6.897e-04s TIMING:bempp:_Solver.solve : 7.684e-04s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 1.335e-04s TIMING:bempp:_Solver.solve : 7.365e-04s TIMING:bempp:_Solver.solve : 9.315e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 6.349e-04s TIMING:bempp:_Solver.solve : 9.620e-04s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 6.733e-04s TIMING:bempp:_Solver.solve : 7.966e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 6.642e-04s TIMING:bempp:_Solver.solve : 7.730e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.029e-04s TIMING:bempp:_Solver.solve : 1.004e-03s TIMING:bempp:_Solver.solve : 8.471e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 4.292e-05s TIMING:bempp:_Solver.solve : 1.043e-03s TIMING:bempp:_Solver.solve : 8.552e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 6.399e-04s TIMING:bempp:_Solver.solve : 9.432e-04s TIMING:bempp:_Solver.solve : 3.171e-05s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 6.921e-04s TIMING:bempp:_Solver.solve : 9.501e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 1.996e-04s TIMING:bempp:_Solver.solve : 8.960e-04s TIMING:bempp:_Solver.solve : 9.127e-04s TIMING:bempp:_Solver.solve : 3.195e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 6.196e-04s TIMING:bempp:_Solver.solve : 9.675e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 7.041e-04s TIMING:bempp:_Solver.solve : 8.624e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 6.201e-04s TIMING:bempp:_Solver.solve : 9.489e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 1.636e-04s TIMING:bempp:_Solver.solve : 7.329e-04s TIMING:bempp:_Solver.solve : 8.171e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.501e-04s TIMING:bempp:_Solver.solve : 9.875e-04s TIMING:bempp:_Solver.solve : 7.746e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 9.131e-05s TIMING:bempp:_Solver.solve : 8.180e-04s TIMING:bempp:_Solver.solve : 9.394e-04s TIMING:bempp:_Solver.solve : 1.562e-04s TIMING:bempp:_Solver.solve : 1.459e-04s TIMING:bempp:_Solver.solve : 8.969e-04s TIMING:bempp:_Solver.solve : 8.383e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 6.540e-04s TIMING:bempp:_Solver.solve : 8.056e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 7.679e-04s TIMING:bempp:_Solver.solve : 7.539e-04s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 7.370e-04s TIMING:bempp:_Solver.solve : 7.710e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 1.636e-04s TIMING:bempp:_Solver.solve : 7.601e-04s TIMING:bempp:_Solver.solve : 9.363e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 7.267e-04s TIMING:bempp:_Solver.solve : 8.826e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 6.533e-04s TIMING:bempp:_Solver.solve : 1.088e-03s TIMING:bempp:_Solver.solve : 3.171e-05s TIMING:bempp:_Solver.solve : 1.659e-04s TIMING:bempp:_Solver.solve : 7.603e-04s TIMING:bempp:_Solver.solve : 8.311e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 6.685e-04s TIMING:bempp:_Solver.solve : 8.574e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 8.593e-04s TIMING:bempp:_Solver.solve : 9.232e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 6.733e-04s TIMING:bempp:_Solver.solve : 8.557e-04s TIMING:bempp:_Solver.solve : 1.099e-04s TIMING:bempp:_Solver.solve : 1.299e-04s TIMING:bempp:_Solver.solve : 7.119e-04s TIMING:bempp:_Solver.solve : 9.627e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.069e-04s TIMING:bempp:_Solver.solve : 8.409e-04s TIMING:bempp:_Solver.solve : 8.721e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 8.075e-04s TIMING:bempp:_Solver.solve : 8.121e-04s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 6.752e-04s TIMING:bempp:_Solver.solve : 9.019e-04s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 7.117e-04s TIMING:bempp:_Solver.solve : 9.451e-04s TIMING:bempp:_Solver.solve : 1.514e-04s TIMING:bempp:_Solver.solve : 1.497e-04s TIMING:bempp:_Solver.solve : 9.933e-04s TIMING:bempp:_Solver.solve : 9.003e-04s TIMING:bempp:_Solver.solve : 1.552e-04s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 9.794e-04s TIMING:bempp:_Solver.solve : 8.979e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 7.212e-04s TIMING:bempp:_Solver.solve : 8.316e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 6.638e-04s TIMING:bempp:_Solver.solve : 9.694e-04s TIMING:bempp:_Solver.solve : 1.874e-04s TIMING:bempp:_Solver.solve : 1.414e-04s TIMING:bempp:_Solver.solve : 8.824e-04s TIMING:bempp:_Solver.solve : 8.874e-04s TIMING:bempp:_Solver.solve : 3.171e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.621e-04s TIMING:bempp:_Solver.solve : 9.360e-04s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 6.599e-04s TIMING:bempp:_Solver.solve : 9.828e-04s TIMING:bempp:_Solver.solve : 3.529e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 6.821e-04s TIMING:bempp:_Solver.solve : 7.772e-04s TIMING:bempp:_Solver.solve : 1.502e-04s TIMING:bempp:_Solver.solve : 1.342e-04s TIMING:bempp:_Solver.solve : 7.856e-04s TIMING:bempp:_Solver.solve : 9.468e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 7.041e-04s TIMING:bempp:_Solver.solve : 7.648e-04s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 2.551e-05s TIMING:bempp:_Solver.solve : 6.568e-04s TIMING:bempp:_Solver.solve : 8.907e-04s TIMING:bempp:_Solver.solve : 3.147e-05s TIMING:bempp:_Solver.solve : 1.426e-04s TIMING:bempp:_Solver.solve : 8.092e-04s TIMING:bempp:_Solver.solve : 9.015e-04s TIMING:bempp:_Solver.solve : 3.433e-05s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 7.112e-04s TIMING:bempp:_Solver.solve : 7.842e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 6.449e-04s TIMING:bempp:_Solver.solve : 8.721e-04s TIMING:bempp:_Solver.solve : 3.028e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 6.337e-04s TIMING:bempp:_Solver.solve : 7.844e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 6.328e-04s TIMING:bempp:_Solver.solve : 8.619e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 7.644e-04s TIMING:bempp:_Solver.solve : 8.283e-04s TIMING:bempp:_Solver.solve : 1.605e-04s TIMING:bempp:_Solver.solve : 1.631e-04s TIMING:bempp:_Solver.solve : 1.110e-03s TIMING:bempp:_Solver.solve : 7.739e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 6.695e-04s TIMING:bempp:_Solver.solve : 7.908e-04s TIMING:bempp:_Solver.solve : 3.147e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 7.350e-04s TIMING:bempp:_Solver.solve : 8.740e-04s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 6.585e-04s TIMING:bempp:_Solver.solve : 9.217e-04s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 6.382e-04s TIMING:bempp:_Solver.solve : 9.277e-04s TIMING:bempp:_Solver.solve : 3.123e-05s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 7.150e-04s TIMING:bempp:_Solver.solve : 9.112e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 6.676e-04s TIMING:bempp:_Solver.solve : 9.582e-04s TIMING:bempp:_Solver.solve : 3.076e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 6.936e-04s TIMING:bempp:_Solver.solve : 8.311e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 6.919e-04s TIMING:bempp:_Solver.solve : 8.330e-04s TIMING:bempp:_Solver.solve : 1.481e-04s TIMING:bempp:_Solver.solve : 1.342e-04s TIMING:bempp:_Solver.solve : 8.111e-04s TIMING:bempp:_Solver.solve : 8.171e-04s TIMING:bempp:_Solver.solve : 1.671e-04s TIMING:bempp:_Solver.solve : 1.531e-04s TIMING:bempp:_Solver.solve : 8.595e-04s TIMING:bempp:_Solver.solve : 7.720e-04s TIMING:bempp:_Solver.solve : 1.142e-04s TIMING:bempp:_Solver.solve : 1.256e-04s TIMING:bempp:_Solver.solve : 7.246e-04s TIMING:bempp:_Solver.solve : 8.538e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.000e-04s TIMING:bempp:_Solver.solve : 8.044e-04s TIMING:bempp:_Solver.solve : 9.112e-04s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 6.788e-04s TIMING:bempp:_Solver.solve : 9.756e-04s TIMING:bempp:_Solver.solve : 3.242e-05s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 9.980e-04s TIMING:bempp:_Solver.solve : 8.419e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.005e-04s TIMING:bempp:_Solver.solve : 8.228e-04s TIMING:bempp:_Solver.solve : 7.663e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 3.242e-05s TIMING:bempp:_Solver.solve : 6.719e-04s TIMING:bempp:_Solver.solve : 9.720e-04s TIMING:bempp:_Solver.solve : 3.123e-05s TIMING:bempp:_Solver.solve : 1.769e-04s TIMING:bempp:_Solver.solve : 7.579e-04s TIMING:bempp:_Solver.solve : 8.426e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 1.822e-04s TIMING:bempp:_Solver.solve : 7.722e-04s TIMING:bempp:_Solver.solve : 9.813e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 6.967e-04s TIMING:bempp:_Solver.solve : 8.464e-04s TIMING:bempp:_Solver.solve : 1.926e-04s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 8.197e-04s TIMING:bempp:_Solver.solve : 8.035e-04s TIMING:bempp:_Solver.solve : 3.219e-05s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 7.024e-04s TIMING:bempp:_Solver.solve : 8.850e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 8.922e-04s TIMING:bempp:_Solver.solve : 8.266e-04s TIMING:bempp:_Solver.solve : 4.697e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 7.942e-04s TIMING:bempp:_Solver.solve : 8.368e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 7.305e-04s TIMING:bempp:_Solver.solve : 8.373e-04s TIMING:bempp:_Solver.solve : 1.242e-04s TIMING:bempp:_Solver.solve : 1.469e-04s TIMING:bempp:_Solver.solve : 7.470e-04s TIMING:bempp:_Solver.solve : 8.626e-04s TIMING:bempp:_Solver.solve : 1.595e-04s TIMING:bempp:_Solver.solve : 1.640e-04s TIMING:bempp:_Solver.solve : 9.151e-04s TIMING:bempp:_Solver.solve : 1.066e-03s TIMING:bempp:_Solver.solve : 1.893e-04s TIMING:bempp:_Solver.solve : 1.204e-04s TIMING:bempp:_Solver.solve : 8.221e-04s TIMING:bempp:_Solver.solve : 9.294e-04s TIMING:bempp:_Solver.solve : 1.266e-04s TIMING:bempp:_Solver.solve : 1.159e-04s TIMING:bempp:_Solver.solve : 7.150e-04s TIMING:bempp:_Solver.solve : 8.457e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 7.491e-04s TIMING:bempp:_Solver.solve : 8.650e-04s TIMING:bempp:_Solver.solve : 8.726e-05s TIMING:bempp:_Solver.solve : 1.953e-04s TIMING:bempp:_Solver.solve : 8.335e-04s TIMING:bempp:_Solver.solve : 7.718e-04s TIMING:bempp:_Solver.solve : 1.278e-04s TIMING:bempp:_Solver.solve : 1.190e-04s TIMING:bempp:_Solver.solve : 7.644e-04s TIMING:bempp:_Solver.solve : 8.132e-04s TIMING:bempp:_Solver.solve : 1.228e-04s TIMING:bempp:_Solver.solve : 1.106e-04s TIMING:bempp:_Solver.solve : 7.172e-04s TIMING:bempp:_Solver.solve : 8.841e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 6.576e-04s TIMING:bempp:_Solver.solve : 9.015e-04s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 6.807e-04s TIMING:bempp:_Solver.solve : 8.509e-04s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.573e-04s TIMING:bempp:_Solver.solve : 7.787e-04s TIMING:bempp:_Solver.solve : 1.211e-04s TIMING:bempp:_Solver.solve : 1.113e-04s TIMING:bempp:_Solver.solve : 7.091e-04s TIMING:bempp:_Solver.solve : 1.092e-03s TIMING:bempp:_Solver.solve : 3.123e-05s TIMING:bempp:_Solver.solve : 2.599e-05s TIMING:bempp:_Solver.solve : 6.456e-04s TIMING:bempp:_Solver.solve : 7.997e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.503e-05s TIMING:bempp:_Solver.solve : 6.387e-04s TIMING:bempp:_Solver.solve : 9.711e-04s TIMING:bempp:_Solver.solve : 2.980e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 7.052e-04s TIMING:bempp:_Solver.solve : 7.899e-04s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 2.151e-04s TIMING:bempp:_Solver.solve : 7.806e-04s TIMING:bempp:_Solver.solve : 7.870e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.444e-04s TIMING:bempp:_Solver.solve : 9.627e-04s TIMING:bempp:_Solver.solve : 3.099e-05s TIMING:bempp:_Solver.solve : 4.959e-05s TIMING:bempp:_Solver.solve : 9.801e-04s TIMING:bempp:_Solver.solve : 8.984e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.742e-05s TIMING:bempp:_Solver.solve : 7.408e-04s TIMING:bempp:_Solver.solve : 8.373e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.433e-04s TIMING:bempp:_Solver.solve : 7.827e-04s TIMING:bempp:_Solver.solve : 2.813e-05s TIMING:bempp:_Solver.solve : 2.551e-05s TIMING:bempp:_Solver.solve : 6.697e-04s TIMING:bempp:_Solver.solve : 7.706e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.437e-04s TIMING:bempp:_Solver.solve : 1.010e-03s TIMING:bempp:_Solver.solve : 8.979e-04s TIMING:bempp:_Solver.solve : 3.457e-05s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 7.634e-04s TIMING:bempp:_Solver.solve : 8.512e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.646e-05s TIMING:bempp:_Solver.solve : 6.588e-04s TIMING:bempp:_Solver.solve : 8.893e-04s TIMING:bempp:_Solver.solve : 3.147e-05s TIMING:bempp:_Solver.solve : 1.979e-04s TIMING:bempp:_Solver.solve : 8.154e-04s TIMING:bempp:_Solver.solve : 8.168e-04s TIMING:bempp:_Solver.solve : 1.175e-04s TIMING:bempp:_Solver.solve : 1.011e-04s TIMING:bempp:_Solver.solve : 7.098e-04s TIMING:bempp:_Solver.solve : 7.584e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.442e-04s TIMING:bempp:_Solver.solve : 7.563e-04s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 2.220e-04s TIMING:bempp:_Solver.solve : 8.397e-04s TIMING:bempp:_Solver.solve : 8.721e-04s TIMING:bempp:_Solver.solve : 2.956e-05s TIMING:bempp:_Solver.solve : 2.663e-04s TIMING:bempp:_Solver.solve : 9.387e-04s TIMING:bempp:_Solver.solve : 9.401e-04s TIMING:bempp:_Solver.solve : 1.290e-04s TIMING:bempp:_Solver.solve : 1.152e-04s TIMING:bempp:_Solver.solve : 7.501e-04s TIMING:bempp:_Solver.solve : 8.378e-04s TIMING:bempp:_Solver.solve : 2.861e-05s TIMING:bempp:_Solver.solve : 2.933e-05s TIMING:bempp:_Solver.solve : 8.886e-04s TIMING:bempp:_Solver.solve : 8.478e-04s TIMING:bempp:_Solver.solve : 2.766e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 8.099e-04s TIMING:bempp:_Solver.solve : 1.044e-03s TIMING:bempp:_Solver.solve : 5.722e-05s TIMING:bempp:_Solver.solve : 1.850e-04s TIMING:bempp:_Solver.solve : 9.687e-04s TIMING:bempp:_Solver.solve : 8.442e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.575e-05s TIMING:bempp:_Solver.solve : 7.226e-04s TIMING:bempp:_Solver.solve : 1.020e-03s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.718e-05s TIMING:bempp:_Solver.solve : 1.040e-03s TIMING:bempp:_Solver.solve : 9.012e-04s TIMING:bempp:_Solver.solve : 1.404e-04s TIMING:bempp:_Solver.solve : 2.613e-04s TIMING:bempp:_Solver.solve : 1.100e-03s TIMING:bempp:_Solver.solve : 7.753e-04s TIMING:bempp:_Solver.solve : 1.228e-04s TIMING:bempp:_Solver.solve : 1.481e-04s TIMING:bempp:_Solver.solve : 8.848e-04s TIMING:bempp:_Solver.solve : 8.173e-04s TIMING:bempp:_Solver.solve : 2.837e-05s TIMING:bempp:_Solver.solve : 2.670e-05s TIMING:bempp:_Solver.solve : 7.241e-04s TIMING:bempp:_Solver.solve : 8.817e-04s TIMING:bempp:_Solver.solve : 1.194e-04s TIMING:bempp:_Solver.solve : 1.543e-04s TIMING:bempp:_Solver.solve : 8.168e-04s TIMING:bempp:_Solver.solve : 8.566e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 1.998e-04s TIMING:bempp:_Solver.solve : 7.658e-04s TIMING:bempp:_Solver.solve : 8.221e-04s TIMING:bempp:_Solver.solve : 1.285e-04s TIMING:bempp:_Solver.solve : 1.445e-04s TIMING:bempp:_Solver.solve : 8.807e-04s TIMING:bempp:_Solver.solve : 7.823e-04s TIMING:bempp:_Solver.solve : 3.004e-05s TIMING:bempp:_Solver.solve : 1.431e-04s TIMING:bempp:_Solver.solve : 8.276e-04s TIMING:bempp:_Solver.solve : 9.208e-04s TIMING:bempp:_Solver.solve : 5.603e-05s TIMING:bempp:_Solver.solve : 2.344e-04s TIMING:bempp:_Solver.solve : 1.054e-03s TIMING:bempp:_Solver.solve : 9.265e-04s TIMING:bempp:_Solver.solve : 2.885e-05s TIMING:bempp:_Solver.solve : 2.694e-05s TIMING:bempp:_Solver.solve : 7.012e-04s TIMING:bempp:_Solver.solve : 9.289e-04s TIMING:bempp:_Solver.solve : 3.195e-05s TIMING:bempp:_Solver.solve : 2.027e-04s TIMING:bempp:_Solver.solve : 8.304e-04s TIMING:bempp:_Solver.solve : 1.013e-03s TIMING:bempp:_Solver.solve : 3.052e-05s TIMING:bempp:_Solver.solve : 2.131e-04s TIMING:bempp:_Solver.solve : 8.588e-04s TIMING:bempp:_Solver.solve : 7.641e-04s TIMING:bempp:_Solver.solve : 2.789e-05s TIMING:bempp:_Solver.solve : 2.527e-05s TIMING:bempp:_Solver.solve : 7.172e-04s TIMING:bempp:_Solver.solve : 8.199e-04s TIMING:bempp:_Solver.solve : 1.307e-04s TIMING:bempp:_Solver.solve : 1.152e-04s TIMING:bempp:_Solver.solve : 7.522e-04s TIMING:bempp:_Solver.solve : 8.307e-04s TIMING:bempp:_Solver.solve : 2.909e-05s TIMING:bempp:_Solver.solve : 2.623e-05s TIMING:bempp:_Solver.solve : 6.917e-04s TIMING:bempp:_Solver.solve : 9.966e-04s TIMING:bempp:_Solver.solve : 1.533e-04s TIMING:bempp:_Solver.solve : 1.421e-04s TIMING:bempp:_Solver.solve : 8.097e-04s
Number of iterations: 312
Next, we make DOLFINx and Bempp functions from the solution.
# Store the real part of the FEM solution
u = function(fenics_space)
u.vector[:] = np.ascontiguousarray(np.real(soln_fem))
# Solution function with dirichlet data on the boundary
dirichlet_data = trace_matrix * soln_fem
dirichlet_fun = bempp.api.GridFunction(trace_space, coefficients=dirichlet_data)
# Solution function with Neumann data on the boundary
neumann_fun = bempp.api.GridFunction(bempp_space, coefficients=soln_bem)
We now evaluate the solution on the slice $z=0.5$ and plot it. For the exterior domain, we use the respresentation formula
$$ u^\text{s} = \mathcal{K}u-\mathcal{V}\frac{\partial u}{\partial \nu} $$to evaluate the solution.
# The next command ensures that plots are shown within the IPython notebook
%matplotlib inline
Nx=200
Ny=200
xmin, xmax, ymin, ymax=[-1,3,-1,3]
plot_grid = np.mgrid[xmin:xmax:Nx*1j,ymin:ymax:Ny*1j]
points = np.vstack((plot_grid[0].ravel(),
plot_grid[1].ravel(),
np.array([0.5]*plot_grid[0].size)))
plot_me = np.zeros(points.shape[1], dtype=np.complex128)
x,y,z = points
bem_x = np.logical_not((x>0) * (x<1) * (y>0) * (y<1) * (z>0) * (z<1))
slp_pot= bempp.api.operators.potential.helmholtz.single_layer(
bempp_space, points[:, bem_x], k)
dlp_pot= bempp.api.operators.potential.helmholtz.double_layer(
trace_space, points[:, bem_x], k)
plot_me[bem_x] += np.exp(1j * k * (points[0, bem_x] * d[0] \
+ points[1, bem_x] * d[1] \
+ points[2, bem_x] * d[2]))
plot_me[bem_x] += dlp_pot.evaluate(dirichlet_fun).flat
plot_me[bem_x] -= slp_pot.evaluate(neumann_fun).flat
fem_points = points[:, np.logical_not(bem_x)].transpose()
try:
# Compatibility with older versions of DOLFINx
tree = dolfinx.geometry.BoundingBoxTree(mesh, 3)
except TypeError:
tree = dolfinx.geometry.bb_tree(mesh, 3)
midpoint_tree = dolfinx.geometry.create_midpoint_tree(
mesh, 3, list(range(mesh.topology.connectivity(3, 0).num_nodes))
)
entities = []
for point in fem_points:
entities.append(dolfinx.geometry.compute_closest_entity(tree, midpoint_tree, mesh, point)[0])
fem_val = u.eval(fem_points, entities)
plot_me[np.logical_not(bem_x)] += fem_val.T[0]
plot_me = plot_me.reshape((Nx, Ny))
plot_me = plot_me.transpose()[::-1]
# Plot the image
from matplotlib import pyplot as plt
fig=plt.figure(figsize=(10, 8))
plt.imshow(np.real(plot_me), extent=[xmin, xmax, ymin, ymax])
plt.xlabel('x')
plt.ylabel('y')
plt.colorbar()
plt.title("FEM-BEM Coupling for Helmholtz")
plt.show()