The results that I get when using the solver are inconsistent. I have the following two examples. I use the following code for the two examples:
import bempp.api import numpy as np # example 1: plate with four RWGs / triangles vertices = np.array([[0, 0.004, 0.004, 0, 0.002],[0, 0, 0.004, 0.004, 0.002],[0,0,0,0,0]],dtype=np.float64) elements = np.array([[0,1,2,3],[1,2,3,0],[4,4,4,4]],dtype=np.uint32) grid = bempp.api.Grid(vertices, elements) # example 2: one RWG / two triangles of the plate of example 1 #vertices = np.array( # [[0.0,0.004,0.004,0.002],[0.0,0.0,0.004,0.002],[0.0,0.0,0.0,0.0]], # dtype=np.float64) #elements = np.array( # [[0,1],[1,2],[3,3]], dtype=np.uint32) #grid = bempp.api.Grid(vertices, elements) grid.plot() E0 = np.array([0.0, 1.0, 0.0]) # polarization of electric field kv = np.array([0.0, 0, -314.1593]) # wave vector k = np.linalg.norm(kv) # wave number div_space = bempp.api.function_space(grid, "RWG", 0) curl_space = bempp.api.function_space(grid, "SNC", 0) def incident_field(x): return E0*np.exp(1j*np.dot(kv,x)) @bempp.api.complex_callable def tangential_trace(x, n, domain_index, result): incident_field = E0*np.exp(1j*np.dot(kv,x)) result[:] = np.cross(incident_field, n) trace_fun = bempp.api.GridFunction(div_space, fun=tangential_trace, dual_space=curl_space) from bempp.api.operators.boundary import maxwell elec = maxwell.electric_field(div_space, div_space, curl_space, k) print(trace_fun._projections) # values of incident field term z = elec.weak_form() print(z._impl) # impedance matrix
Example 1 contains a plate of 4 triangles / RWGs. This gives a 4x4 BEM matrix. Example 2 contains one RWG of the plate of example 1. The diagonal elements of the 4x4 BEM matrix in example 1 have the value:
The single element BEM matrix in example 2 has the value:
These values are not the same. I think the values of the diagonal elements of the BEM matrix in example 1 should be the same as the value of the single element of the BEM matrix in example 2.