Hello,
I am new to using meep and have a couple of questions regarding calculating the
radar cross section response from an object. I am using the python interface to
setup my simulation. This is my first time using this mailing list and I did
not see any rules or guidelines for message structure, so please forgive me if
I make any errors. Also, whenever I try and open the links for the meep mailing
list archives, I get a 403 forbidden error "You don't have permission to access
/pipermail/meep-discuss/ on this server." How can I go about getting access to
the mailing list archives such that I can try and read previous discussions to
answer some of my questions/issues.
My first issue is with the units. I am trying to use an input frequency of 8
GHz, bandwidth of 500MHz for a cylinder that is 3 meters long and has a
diameter of 1 meter. For converting to dimensionless units, do I just choose a
value for a that works for my system? Say a is 1cm, then frequency =
1/wavelength = 1/3.75 = 0.267, bandwidth would be 0.5 / 8 = 0.0625 (used in df
calculation for GaussianSource and in Simulation.add_flux), and then cylinder
height = 3 / 0.01 = 300 and cylinder diameter = 1 / 0.01 = 100. Is this the
proper approach for the dimensionless units?
Second, I am trying to create to separate input sources for my simulation. One
that has z-polarization, and one that is orthogonal to the z-polarization and
orthogonal to the k-point vector for an oblique planewave. I have attempted to
do this by using the EigenModeSource and setting the center, size based on the
closest cardinal plane projection and the k_point based on the direction of
travel. The polarization I control with component and amp_func. An example of
my code to achieve this would look like:
# For simplicity, I assume only rotations about the z axis
import numpy as np
import meep as mp
r = 100 #radius of cylinder
h = 300 #height of cylinder
dpml = 5
dair = 10
s = 2*dpml + 2*dair + h
cell_size = mp.Vector3(s, s, s)
frq_cen = 0.267
df = frq_cen * 0.0625
resolution = 16
pml_layers = [mp.PML(thickness=dpml)]
rot_angle = 30 # rotation around the z axis, with 0 equal to the x axis, and 90
equal to the y axis
k_point = -1 * mp.Vector3(np.cos(rot_angle), np.sin(rot_angle), 0)
# center and size are determined by which cardinal plane normal has max dot
product with the k_point vector
# with rot_angle equal to 30, the positive x plane is the best fit
offset = s/2 - dpml
center = mp.Vector3(offset, 0, 0)
size = mp.Vector3(0, offset, offset)
if polarization == "z":
amp_x = lambda pt : 1
Sources = [mp .EigenModeSource(src=GaussianSource(frq_cen, fwidth=df,
is_integrated=True),
center=center,
size=size,
direction=mp.NO_DIRECTION,
eig_kpoint=k_point,
eig_band=1,
component=mp.Ez,
amp_func=amp_z,
eig_match_freq=True)]
else:
# the non z polarization should be orthogonal to both the z and k_point
vectors. Using right hand rule with z x p = +k where p is the direction of the
polarization vector.
amp_x = lambda pt : -np.sin(np.deg2rad(rot_angle))
amp_y = lambda pt : np.cos(np.deg2rad(rot_angle))
Sources = [mp .EigenModeSource(src=GaussianSource(frq_cen, fwidth=df,
is_integrated=True),
center=center,
size=size,
direction=mp.NO_DIRECTION,
eig_kpoint=k_point,
eig_band=1,
component=mp.Ex,
amp_func=amp_x,
eig_match_freq=True)
mp .EigenModeSource(src=GaussianSource(frq_cen,
fwidth=df, is_integrated=True),
center=center,
size=size,
direction=mp.NO_DIRECTION,
eig_kpoint=k_point,
eig_band=1,
component=mp.Ey,
amp_func=amp_y,
eig_match_freq=True)]
The rest of my code generally follows the tutorial for differential/radar cross
section in the python/basics section.
In actual code, I use a dot product with my k_point (which is my propagation
direction vector) with each of the 6 cardinal planes normal to determine which
cardinal plane to use, instead of manually setting these variables.
Is this the proper way to set arbitrary polarizations for oblique plane waves?
The documentation mentions using eig_parity in 2-dimensions for setting the
polarizations of EigenModeSource but I am not sure how I can generalize
eig_parity for the non z direction. The documentation and the code also seem to
warn against using the component keyword argument for EigenModeSource, which
makes me question my setup. Is there a better way to approach this, or should
this work?
Thank you for the help,
Paul
_______________________________________________
meep-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss