python: adept to new CSXCAD API

Signed-off-by: Thorsten Liebig <Thorsten.Liebig@gmx.de>
python
Thorsten Liebig 2016-09-20 22:08:57 +02:00
parent b45b615f7e
commit d41830f090
7 changed files with 37 additions and 29 deletions

View File

@ -84,19 +84,19 @@ CSX.AddBox(patch, priority=10, start=start, stop=stop, edges2grid='all') # add a
substrate = CSX.AddMaterial('substrate', epsilon=substrate_epsR, kappa=substrate_kappa ) substrate = CSX.AddMaterial('substrate', epsilon=substrate_epsR, kappa=substrate_kappa )
start = [patch_radius , -substr_ang_width/2, -substrate_length/2] start = [patch_radius , -substr_ang_width/2, -substrate_length/2]
stop = [patch_radius+substrate_thickness, substr_ang_width/2, substrate_length/2] stop = [patch_radius+substrate_thickness, substr_ang_width/2, substrate_length/2]
CSX.AddBox(substrate, start=start, stop=stop, edges2grid='all') substrate.AddBox(start=start, stop=stop, edges2grid='all')
# save current density oon the patch # save current density oon the patch
jt_patch = CSX.AddDump('Jt_patch', dump_type=3, file_type=1) jt_patch = CSX.AddDump('Jt_patch', dump_type=3, file_type=1)
start = [patch_radius+substrate_thickness, -substr_ang_width/2, -substrate_length/2] start = [patch_radius+substrate_thickness, -substr_ang_width/2, -substrate_length/2]
stop = [patch_radius+substrate_thickness, +substr_ang_width/2, substrate_length/2] stop = [patch_radius+substrate_thickness, +substr_ang_width/2, substrate_length/2]
CSX.AddBox(jt_patch, start=start, stop=stop) jt_patch.AddBox(start=start, stop=stop)
# create ground # create ground
gnd = CSX.AddMetal('gnd') # create a perfect electric conductor (PEC) gnd = CSX.AddMetal('gnd') # create a perfect electric conductor (PEC)
start = [patch_radius, -substr_ang_width/2, -substrate_length/2] start = [patch_radius, -substr_ang_width/2, -substrate_length/2]
stop = [patch_radius, +substr_ang_width/2, +substrate_length/2] stop = [patch_radius, +substr_ang_width/2, +substrate_length/2]
CSX.AddBox(gnd, priority=10, start=start, stop=stop, edges2grid='all') gnd.AddBox(priority=10, start=start, stop=stop, edges2grid='all')
# apply the excitation & resist as a current source # apply the excitation & resist as a current source
start = [patch_radius , feed_angle, 0] start = [patch_radius , feed_angle, 0]

View File

@ -99,7 +99,7 @@ for n in range(Helix_turns-1):
zpos = zpos + Helix_pitch zpos = zpos + Helix_pitch
p = np.array([Helix_x, Helix_y, Helix_z]) p = np.array([Helix_x, Helix_y, Helix_z])
CSX.AddCurve(helix_metal, p) helix_metal.AddCurve(p)
# create ground circular ground # create ground circular ground
gnd = CSX.AddMetal( 'gnd' ) # create a perfect electric conductor (PEC) gnd = CSX.AddMetal( 'gnd' ) # create a perfect electric conductor (PEC)
@ -107,7 +107,7 @@ gnd = CSX.AddMetal( 'gnd' ) # create a perfect electric conductor (PEC)
# add a box using cylindrical coordinates # add a box using cylindrical coordinates
start = [0, 0, -0.1] start = [0, 0, -0.1]
stop = [0, 0, 0.1] stop = [0, 0, 0.1]
CSX.AddCylinder(gnd, start, stop, radius=gnd_radius) gnd.AddCylinder(start, stop, radius=gnd_radius)
# apply the excitation & resist as a current source # apply the excitation & resist as a current source
start = [Helix_radius, 0, 0] start = [Helix_radius, 0, 0]

View File

@ -74,7 +74,7 @@ mesh.SmoothMeshLines('z', resolution)
substrate = CSX.AddMaterial( 'RO4350B', epsilon=substrate_epr) substrate = CSX.AddMaterial( 'RO4350B', epsilon=substrate_epr)
start = [-MSL_length, -15*MSL_width, 0] start = [-MSL_length, -15*MSL_width, 0]
stop = [+MSL_length, +15*MSL_width+stub_length, substrate_thickness] stop = [+MSL_length, +15*MSL_width+stub_length, substrate_thickness]
CSX.AddBox(substrate, start, stop ) substrate.AddBox(start, stop )
## MSL port setup ## MSL port setup
port = [None, None] port = [None, None]
@ -90,7 +90,7 @@ port[1] = FDTD.AddMSLPort( 2, pec, portstart, portstop, 'x', 'z', MeasPlaneShift
## Filter-Stub Definition ## Filter-Stub Definition
start = [-MSL_width/2, MSL_width/2, substrate_thickness] start = [-MSL_width/2, MSL_width/2, substrate_thickness]
stop = [ MSL_width/2, MSL_width/2+stub_length, substrate_thickness] stop = [ MSL_width/2, MSL_width/2+stub_length, substrate_thickness]
box = CSX.AddBox( pec, start, stop, priority=10 ) pec.AddBox(start, stop, priority=10 )
### Run the simulation ### Run the simulation
if 0: # debugging only if 0: # debugging only

View File

@ -80,7 +80,7 @@ mesh.SmoothMeshLines('all', mesh_res, ratio=1.4)
Et = CSX.AddDump('Et', file_type=0, sub_sampling=[2,2,2]) Et = CSX.AddDump('Et', file_type=0, sub_sampling=[2,2,2])
start = [0, 0, 0]; start = [0, 0, 0];
stop = [a, b, length]; stop = [a, b, length];
CSX.AddBox(Et, start, stop); Et.AddBox(start, stop);
### Run the simulation ### Run the simulation
if 0: # debugging only if 0: # debugging only

View File

@ -16,7 +16,7 @@ from openEMS.physical_constants import *
### General parameter setup ### General parameter setup
Sim_Path = os.path.join(tempfile.gettempdir(), 'Simp_Patch') Sim_Path = os.path.join(tempfile.gettempdir(), 'Simp_Patch')
post_proc_only = True post_proc_only = False
# patch width (resonant length) in x-direction # patch width (resonant length) in x-direction
patch_width = 32 # patch_width = 32 #
@ -66,14 +66,14 @@ mesh.AddLine('z', [-SimBox[2]/3, SimBox[2]*2/3] )
patch = CSX.AddMetal( 'patch' ) # create a perfect electric conductor (PEC) patch = CSX.AddMetal( 'patch' ) # create a perfect electric conductor (PEC)
start = [-patch_width/2, -patch_length/2, substrate_thickness] start = [-patch_width/2, -patch_length/2, substrate_thickness]
stop = [ patch_width/2 , patch_length/2, substrate_thickness] stop = [ patch_width/2 , patch_length/2, substrate_thickness]
pb=CSX.AddBox(patch, priority=10, start=start, stop=stop) # add a box-primitive to the metal property 'patch' pb=patch.AddBox(priority=10, start=start, stop=stop) # add a box-primitive to the metal property 'patch'
pb.AddEdges2Grid('xy', metal_edge_res=mesh_res/2) pb.AddEdges2Grid('xy', metal_edge_res=mesh_res/2)
# create substrate # create substrate
substrate = CSX.AddMaterial( 'substrate', epsilon=substrate_epsR, kappa=substrate_kappa) substrate = CSX.AddMaterial( 'substrate', epsilon=substrate_epsR, kappa=substrate_kappa)
start = [-substrate_width/2, -substrate_length/2, 0] start = [-substrate_width/2, -substrate_length/2, 0]
stop = [ substrate_width/2, substrate_length/2, substrate_thickness] stop = [ substrate_width/2, substrate_length/2, substrate_thickness]
sb=CSX.AddBox( substrate, priority=0, start=start, stop=stop ) sb=substrate.AddBox( priority=0, start=start, stop=stop )
# add extra cells to discretize the substrate thickness # add extra cells to discretize the substrate thickness
mesh.AddLine('z', linspace(0,substrate_thickness,substrate_cells+1)) mesh.AddLine('z', linspace(0,substrate_thickness,substrate_cells+1))
@ -82,7 +82,7 @@ mesh.AddLine('z', linspace(0,substrate_thickness,substrate_cells+1))
gnd = CSX.AddMetal( 'gnd' ) # create a perfect electric conductor (PEC) gnd = CSX.AddMetal( 'gnd' ) # create a perfect electric conductor (PEC)
start[2]=0 start[2]=0
stop[2] =0 stop[2] =0
gb=CSX.AddBox(gnd, start, stop, priority=10, edges2grid='all') gb=gnd.AddBox(start, stop, priority=10, edges2grid='all')
# apply the excitation & resist as a current source # apply the excitation & resist as a current source
start = [feed_pos, 0, 0] start = [feed_pos, 0, 0]

View File

@ -66,6 +66,9 @@ class nf2ff:
del kw['frequency'] del kw['frequency']
self.dump_type = 10 # Ef/Hf self.dump_type = 10 # Ef/Hf
if np.isscalar(self.freq):
self.freq = [self.freq]
self.e_file = '{}_E'.format(self.name) self.e_file = '{}_E'.format(self.name)
self.h_file = '{}_H'.format(self.name) self.h_file = '{}_H'.format(self.name)
@ -82,14 +85,14 @@ class nf2ff:
l_start = np.array(start) l_start = np.array(start)
l_stop = np.array(stop) l_stop = np.array(stop)
l_stop[ny] = l_start[ny] l_stop[ny] = l_start[ny]
CSX.AddBox(self.e_dump, l_start, l_stop) self.e_dump.AddBox(l_start, l_stop)
CSX.AddBox(self.h_dump, l_start, l_stop) self.h_dump.AddBox(l_start, l_stop)
if self.directions[pos+1]: if self.directions[pos+1]:
l_start = np.array(start) l_start = np.array(start)
l_stop = np.array(stop) l_stop = np.array(stop)
l_start[ny] = l_stop[ny] l_start[ny] = l_stop[ny]
CSX.AddBox(self.e_dump, l_start, l_stop) self.e_dump.AddBox(l_start, l_stop)
CSX.AddBox(self.h_dump, l_start, l_stop) self.h_dump.AddBox(l_start, l_stop)
def CalcNF2FF(self, sim_path, freq, theta, phi, center=[0,0,0], outfile=None, read_cached=True, verbose=0): def CalcNF2FF(self, sim_path, freq, theta, phi, center=[0,0,0], outfile=None, read_cached=True, verbose=0):
""" CalcNF2FF(sim_path, freq, theta, phi, center=[0,0,0], outfile=None, read_cached=True, verbose=0): """ CalcNF2FF(sim_path, freq, theta, phi, center=[0,0,0], outfile=None, read_cached=True, verbose=0):

View File

@ -26,7 +26,12 @@ from openEMS.physical_constants import *
class UI_data: class UI_data:
def __init__(self, fns, path, freq, signal_type='pulse', **kw): def __init__(self, fns, path, freq, signal_type='pulse', **kw):
self.path = path self.path = path
if type(fns)==str:
fns = [fns]
self.fns = fns self.fns = fns
if np.isscalar(freq):
freq = [freq]
self.freq = freq self.freq = freq
self.ui_time = [] self.ui_time = []
@ -153,13 +158,13 @@ class LumpedPort(Port):
elif self.R==0: elif self.R==0:
lumped_R = CSX.AddMetal(self.lbl_temp.format('resist')) lumped_R = CSX.AddMetal(self.lbl_temp.format('resist'))
CSX.AddBox(lumped_R, self.start, self.stop, priority=self.priority, edges2grid=kw.get('edges2grid', None)) lumped_R.AddBox(self.start, self.stop, priority=self.priority, edges2grid=kw.get('edges2grid', None))
if excite!=0: if excite!=0:
exc_vec = np.zeros(3) exc_vec = np.zeros(3)
exc_vec[self.exc_ny] = -1*self.direction*excite exc_vec[self.exc_ny] = -1*self.direction*excite
exc = CSX.AddExcitation(self.lbl_temp.format('excite'), exc_type=0, exc_val=exc_vec, delay=self.delay) exc = CSX.AddExcitation(self.lbl_temp.format('excite'), exc_type=0, exc_val=exc_vec, delay=self.delay)
CSX.AddBox(exc, self.start, self.stop, priority=self.priority) exc.AddBox(self.start, self.stop, priority=self.priority)
self.U_filenames = [self.lbl_temp.format('ut'), ] self.U_filenames = [self.lbl_temp.format('ut'), ]
u_start = 0.5*(self.start+self.stop) u_start = 0.5*(self.start+self.stop)
@ -167,7 +172,7 @@ class LumpedPort(Port):
u_stop = 0.5*(self.start+self.stop) u_stop = 0.5*(self.start+self.stop)
u_stop[self.exc_ny] = self.stop[self.exc_ny] u_stop[self.exc_ny] = self.stop[self.exc_ny]
u_probe = CSX.AddProbe(self.U_filenames[0], p_type=0, weight=-1*self.direction) u_probe = CSX.AddProbe(self.U_filenames[0], p_type=0, weight=-1*self.direction)
CSX.AddBox(u_probe, u_start, u_stop) u_probe.AddBox(u_start, u_stop)
self.I_filenames = [self.lbl_temp.format('it'), ] self.I_filenames = [self.lbl_temp.format('it'), ]
i_start = np.array(self.start) i_start = np.array(self.start)
@ -175,7 +180,7 @@ class LumpedPort(Port):
i_stop = np.array(self.stop) i_stop = np.array(self.stop)
i_stop[self.exc_ny] = 0.5*(self.start[self.exc_ny]+self.stop[self.exc_ny]) i_stop[self.exc_ny] = 0.5*(self.start[self.exc_ny]+self.stop[self.exc_ny])
i_probe = CSX.AddProbe(self.I_filenames[0], p_type=1, weight=self.direction, norm_dir=self.exc_ny) i_probe = CSX.AddProbe(self.I_filenames[0], p_type=1, weight=self.direction, norm_dir=self.exc_ny)
CSX.AddBox(i_probe, i_start, i_stop) i_probe.AddBox(i_start, i_stop)
def CalcPort(self, sim_path, freq, ref_impedance=None, ref_plane_shift=None, signal_type='pulse'): def CalcPort(self, sim_path, freq, ref_impedance=None, ref_plane_shift=None, signal_type='pulse'):
if ref_impedance is None: if ref_impedance is None:
@ -220,7 +225,7 @@ class MSLPort(Port):
MSL_start = np.array(self.start) MSL_start = np.array(self.start)
MSL_stop = np.array(self.stop) MSL_stop = np.array(self.stop)
MSL_stop[self.exc_ny] = MSL_start[self.exc_ny] MSL_stop[self.exc_ny] = MSL_start[self.exc_ny]
CSX.AddBox( metal_prop, MSL_start, MSL_stop, priority=self.priority ) metal_prop.AddBox(MSL_start, MSL_stop, priority=self.priority )
mesh = CSX.GetGrid() mesh = CSX.GetGrid()
prop_lines = mesh.GetLines(self.prop_ny) prop_lines = mesh.GetLines(self.prop_ny)
@ -248,7 +253,7 @@ class MSLPort(Port):
u_name = self.lbl_temp.format('ut') + suffix[n] u_name = self.lbl_temp.format('ut') + suffix[n]
self.U_filenames.append(u_name) self.U_filenames.append(u_name)
u_probe = CSX.AddProbe(u_name, p_type=0, weight=self.upside_down) u_probe = CSX.AddProbe(u_name, p_type=0, weight=self.upside_down)
CSX.AddBox(u_probe, u_start, u_stop) u_probe.AddBox(u_start, u_stop)
i_prope_pos = u_prope_pos[0:2] + np.diff(u_prope_pos)/2.0 i_prope_pos = u_prope_pos[0:2] + np.diff(u_prope_pos)/2.0
self.I_filenames = [] self.I_filenames = []
@ -262,7 +267,7 @@ class MSLPort(Port):
i_name = self.lbl_temp.format('it') + suffix[n] i_name = self.lbl_temp.format('it') + suffix[n]
self.I_filenames.append(i_name) self.I_filenames.append(i_name)
i_probe = CSX.AddProbe(i_name, p_type=1, weight=self.direction, norm_dir=self.prop_ny) i_probe = CSX.AddProbe(i_name, p_type=1, weight=self.direction, norm_dir=self.prop_ny)
CSX.AddBox(i_probe, i_start, i_stop) i_probe.AddBox(i_start, i_stop)
if excite!=0: if excite!=0:
excide_pos_idx = np.argmin(np.abs(prop_lines-(self.start[self.prop_ny] + self.feed_shift*self.direction))) excide_pos_idx = np.argmin(np.abs(prop_lines-(self.start[self.prop_ny] + self.feed_shift*self.direction)))
@ -273,17 +278,17 @@ class MSLPort(Port):
exc_vec = np.zeros(3) exc_vec = np.zeros(3)
exc_vec[self.exc_ny] = -1*self.upside_down*excite exc_vec[self.exc_ny] = -1*self.upside_down*excite
exc = CSX.AddExcitation(self.lbl_temp.format('excite'), exc_type=0, exc_val=exc_vec, delay=self.delay) exc = CSX.AddExcitation(self.lbl_temp.format('excite'), exc_type=0, exc_val=exc_vec, delay=self.delay)
CSX.AddBox(exc, exc_start, exc_stop, priority=self.priority) exc.AddBox(exc_start, exc_stop, priority=self.priority)
if self.feed_R>=0 and not np.isinf(self.feed_R): if self.feed_R>=0 and not np.isinf(self.feed_R):
R_start = np.array(self.start) R_start = np.array(self.start)
R_stop = np.array(self.stop) R_stop = np.array(self.stop)
R_stop [self.prop_ny] = R_start[self.prop_ny] R_stop [self.prop_ny] = R_start[self.prop_ny]
if self.feed_R==0: if self.feed_R==0:
CSX.AddBox(metal_prop, R_start, R_stop) metal_prop.AddBox(R_start, R_stop)
else: else:
lumped_R = CSX.AddLumpedElement(self.lbl_temp.format('resist'), ny=self.exc_ny, caps=True, R=self.feed_R) lumped_R = CSX.AddLumpedElement(self.lbl_temp.format('resist'), ny=self.exc_ny, caps=True, R=self.feed_R)
CSX.AddBox(lumped_R, R_start, R_stop) lumped_R.AddBox(R_start, R_stop)
def ReadUIData(self, sim_path, freq, signal_type ='pulse'): def ReadUIData(self, sim_path, freq, signal_type ='pulse'):
self.u_data = UI_data(self.U_filenames, sim_path, freq, signal_type ) self.u_data = UI_data(self.U_filenames, sim_path, freq, signal_type )
@ -335,7 +340,7 @@ class WaveguidePort(Port):
e_vec = np.ones(3) e_vec = np.ones(3)
e_vec[self.exc_ny]=0 e_vec[self.exc_ny]=0
exc = CSX.AddExcitation(self.lbl_temp.format('excite'), exc_type=0, exc_val=e_vec, delay=self.delay) exc = CSX.AddExcitation(self.lbl_temp.format('excite'), exc_type=0, exc_val=e_vec, delay=self.delay)
CSX.AddBox(exc, e_start, e_stop, priority=self.priority) exc.AddBox(e_start, e_stop, priority=self.priority)
# voltage/current planes # voltage/current planes
m_start = np.array(start) m_start = np.array(start)
@ -346,11 +351,11 @@ class WaveguidePort(Port):
self.U_filenames = [self.lbl_temp.format('ut'), ] self.U_filenames = [self.lbl_temp.format('ut'), ]
u_probe = CSX.AddProbe(self.U_filenames[0], p_type=10, mode_function=self.E_func) u_probe = CSX.AddProbe(self.U_filenames[0], p_type=10, mode_function=self.E_func)
CSX.AddBox(u_probe, m_start, m_stop) u_probe.AddBox(m_start, m_stop)
self.I_filenames = [self.lbl_temp.format('it'), ] self.I_filenames = [self.lbl_temp.format('it'), ]
i_probe = CSX.AddProbe(self.I_filenames[0], p_type=11, weight=self.direction, mode_function=self.H_func) i_probe = CSX.AddProbe(self.I_filenames[0], p_type=11, weight=self.direction, mode_function=self.H_func)
CSX.AddBox(i_probe, m_start, m_stop) i_probe.AddBox(m_start, m_stop)
def InitMode(self, wg_mode): def InitMode(self, wg_mode):
""" """