71 lines
1.4 KiB
Python
71 lines
1.4 KiB
Python
|
import tidy3d as td
|
||
|
import sympy as sp
|
||
|
import sympy.physics.units as spu
|
||
|
|
||
|
from ... import contracts
|
||
|
from ... import sockets
|
||
|
from .. import base
|
||
|
|
||
|
class PointDipoleSourceNode(base.MaxwellSimTreeNode):
|
||
|
node_type = contracts.NodeType.PointDipoleSource
|
||
|
|
||
|
bl_label = "Point Dipole Source"
|
||
|
#bl_icon = ...
|
||
|
|
||
|
####################
|
||
|
# - Sockets
|
||
|
####################
|
||
|
input_sockets = {
|
||
|
"center_x": sockets.RealNumberSocketDef(
|
||
|
label="Center X",
|
||
|
default_value=0.0,
|
||
|
),
|
||
|
"center_y": sockets.RealNumberSocketDef(
|
||
|
label="Center Y",
|
||
|
default_value=0.0,
|
||
|
),
|
||
|
"center_z": sockets.RealNumberSocketDef(
|
||
|
label="Center Z",
|
||
|
default_value=0.0,
|
||
|
),
|
||
|
}
|
||
|
output_sockets = {
|
||
|
"source": sockets.MaxwellSourceSocketDef(
|
||
|
label="Source",
|
||
|
),
|
||
|
}
|
||
|
|
||
|
####################
|
||
|
# - Output Socket Computation
|
||
|
####################
|
||
|
@base.computes_output_socket("source")
|
||
|
def compute_source(self: contracts.NodeTypeProtocol) -> td.PointDipole:
|
||
|
center = (
|
||
|
self.compute_input("center_x"),
|
||
|
self.compute_input("center_y"),
|
||
|
self.compute_input("center_z"),
|
||
|
)
|
||
|
|
||
|
cheating_pulse = td.GaussianPulse(freq0=200e12, fwidth=20e12)
|
||
|
|
||
|
return td.PointDipole(
|
||
|
center=center,
|
||
|
source_time=cheating_pulse,
|
||
|
interpolate=True,
|
||
|
polarization="Ex",
|
||
|
)
|
||
|
|
||
|
|
||
|
|
||
|
####################
|
||
|
# - Blender Registration
|
||
|
####################
|
||
|
BL_REGISTER = [
|
||
|
PointDipoleSourceNode,
|
||
|
]
|
||
|
BL_NODES = {
|
||
|
contracts.NodeType.PointDipoleSource: (
|
||
|
contracts.NodeCategory.MAXWELLSIM_SOURCES
|
||
|
)
|
||
|
}
|