Page MenuHomec4science

funnel_output_engine.py
No OneTemporary

File Metadata

Created
Wed, May 1, 02:44

funnel_output_engine.py

import numpy as np
import fenics as fen
import mshr
from rrompy.hfengines.fenics_engines import ScatteringProblemEngine
from rrompy.solver.fenics import fenics2Sparse
class FunnelOutputEngine(ScatteringProblemEngine):
def __init__(self, k0:float, n:int):
super().__init__(mu0 = [k0])
mesh = mshr.generate_mesh(mshr.Circle(fen.Point(0., 0.), 5.)
- mshr.Rectangle(fen.Point(-5., -5.),
fen.Point(-1., 5.))
- mshr.Rectangle(fen.Point(-1., -5.),
fen.Point(0., -1.))
- mshr.Rectangle(fen.Point(-1., 1.),
fen.Point(0., 5.)), n)
self.V = fen.FunctionSpace(mesh, "P", 1)
eps = 1e-4
self.DirichletBoundary = (lambda x, on_boundary:
on_boundary and x[0] < -1. + eps)
self.NeumannBoundary = (lambda x, on_boundary:
on_boundary and x[0] >= -1. + eps
and x[0] < eps)
self.RobinBoundary = "REST"
y = fen.SpatialCoordinate(self.V.mesh())[1]
self.DirichletDatum = 1. + .25 * fen.sin(.5 * np.pi * y)
self.autoSetDS()
l2R0 = fen.inner(self.u, self.v) * self.ds(1)
L2R0 = fenics2Sparse(l2R0, {}, None, -1)
bcR = np.where(np.abs(L2R0.dot(np.ones(L2R0.shape[1]))) > 1e-10)[0]
bcR = bcR[np.argsort(self.V.tabulate_dof_coordinates()[bcR, 1])]
self._C = np.zeros((len(bcR), L2R0.shape[1]))
self._C[np.arange(len(bcR)), bcR] = 1.
self.outputNormMatrix = L2R0[bcR][:, bcR]

Event Timeline