The planar solid object behaves somewhat like the polygon structure, but generalized to 3D. The object vertices cannot be set via the GUI; a script command must be used. The image below shows how a facet is defined to denote positive or negative spaces. In the shape below one facet comprises of two paths : p1=[1,3,2,5,4] , p2=[16,17,18,19].
Setting the vertices of the polygon object
The vertices of the planar solid object can be edited using scripting by two methods:
- Specifying the vertices as a cell array.
- Specifying the vertices as a matrix.
For complex shapes, one can use multiple primitives and set the mesh orders of overlapping structures to achieve the desired shape, but using the planar solid primitive allows you to use just one object to implement complex shapes.
Geometry tab
- X, Y, Z: The center position of the object
Material tab
The material options are as follows:
MATERIAL: This field can be set to any material included in the material database. It is possible to include new materials in the database, or edit the materials already included. See the material database section for more information.
- OVERRIDE MESH ORDER FROM MATERIAL DATABASE: Select to override the mesh order from the material database and manually set a mesh order. The mesh order is used by the simulation engine to select which material to use when two materials overlap. See the mesh order (optical) or mesh order (electrical) section for more details.
- MESH ORDER: Set the mesh order in this field if the OVERRIDE MESH ORDER FROM MATERIAL DATABASE option is selected. If the option is not selected, the field displays the material's default mesh order from the database. For example, a material of mesh order 1 will take precedence over a material of mesh order 2.
The following only applies to MODE and FDTD:
If <Object defined dielectric> is selected, then the INDEX property must be set.
- INDEX: The refractive index of the structure, when the material type is <Object defined dielectric>. The index must be greater than one.
- Anisotropic index: To specify an anisotropic refractive index, use a semicolon to separate the diagonal xx,yy,zz indices. Eg. 1;1.5;1
- Spatially varying index: It is possible to specify a spatially varying refractive index by entering an equation of the variables x,y,z in this field. Eg. 2+0.1*x will create an object where the refractive index increases in the X direction. The units of the spatial variables (x,y,z) must be set with the 'INDEX UNITS' property described below. The variables x,y,z will be zero in the center of the object. When using an equation in this field, consider using a mesh override region to control the simulation mesh size. For more information on entering equations, see the Equation interpreter section.
- INDEX UNITS: Only relevant when specifying a spatially varying equation in the INDEX properly described above. Specify the units (nm, um, m) of the x,y,z position variables.
- GRID ATTRIBUTE NAME: Enter the name of the grid attribute that applies to this object, see the grid attribute section
The following only applies to CHARGE, HEAT, FEEM, DGTD:
If the material chosen from the drop down menu is a binary alloy consisting of two semiconductors, then there will be an additional property, namely, the "composition fraction" to set as well.
- COMPOSITION FRACTION: This is x, the fraction of the semiconductor in the alloy. x can either take a fixed value or vary.
The user can see which semiconductor has fraction x and which has fraction (1-x) shown in a line above this drop down menu.
- FIXED: This means that fraction x will be a constant value between 0 and 1.
- LINEAR X/Y/Z: This means that the composition fraction x will vary as a function x or y or z. In this case, user can specify the min and max fraction values for the min and max spatial points and the fraction will be interpolated linearly in between. x,y,z here are those of the unrotated object. x,y,z are local to the object.
- EQUATION: The user can enter an equation for the fraction that varies with u,v and w. u is (x-x0), v is (y-y0) and w is (z-z0) where x0, y0 and z0 are the center coordinates of the object. This means that u,v and w are local to the object.
Rotation tab
Rotate objects by setting the following variables:
- FIRST, SECOND, THIRD AXES: Select rotation axis. Up to three different rotations can be applied.
- ROTATION 1,2,3: The rotation of the object in a clockwise direction about each axis, measured in degrees.
Graphical Rendering tab
The graphical rendering tab is used to change how objects are drawn in the layout editor. The options are:
- RENDER TYPE: The options for drawing the objects are detailed or wireframe. Detailed objects are shaded and their transparency can be set using OVERRIDE COLOR OPACITY FROM MATERIAL DATABASE.
- DETAIL: This is a slider which takes values between 0 and 1. By default it is set to 0.5. Higher detail shows more detail, but increases the time required to draw objects. This setting has no effect on the simulation.
- OVERRIDE COLOR OPACITY FROM MATERIAL DATABASE: When unselected the opacity is determined from the material database. When selected, you can specify a value for ALPHA between 0 (transparent) and 1 (opaque) for the object, depending on how transparent you want the object to be.
Scripting example
Here we show an example script for constructing a cube with two planar holes using the planar solid primitive.
# Select method of formatting data used to create the object
method_type = 1;
# Specify vertex locations (Refer to the figure above)
vtx = [0,0,0;
1,0,0;
1,1,0;
0,1,0;
0,0,1;
1,0,1;
1,1,1;
0,1,1;
0.25,.25,0;
0.8,.25,0;
0.25,.8,0;
0.25,.25,1;
0.8,.25,1;
0.25,.8,1;
0.5,.8,0;
0.8,.5,0;
0.8,.8,0;
0.5,.8,1;
0.8,.5,1;
0.8,.8,1]*1e-6;
# Data format method 1: facet table as cell array
a = cell(12);
for (i = 1:12) {
if ((i == 1) | (i == 6)) {
a{i} = cell(3);
} else {
a{i} = cell(1);
}
}
a{1}{1} = [1,4,3,2]; # bottom facet has two holes
a{1}{2} = [9,10,11]; # first hole (orientation auto-corrected)
a{1}{3} = [15,16,17]; # second hole
a{2}{1} = [1,5,8,4]; # x min
a{3}{1} = [1,2,6,5]; # y min
a{4}{1} = [2,6,7,3]; # x max
a{5}{1} = [3,4,8,7]; # y max
a{6}{1} = [5,6,7,8]; # top face has two matching holes to bottom
a{6}{2} = [14,13,12];
a{6}{3} = [20,19,18];
a{7}{1} = [10,9,12,13]; # inner faces of holes
a{8}{1} = [11,10,13,14];
a{9}{1} = [9,11,14,12];
a{10}{1} = [16,15,18,19];
a{11}{1} = [15,17,20,18];
a{12}{1} = [17,16,19,20];
if (method_type == 1) {
addplanarsolid(vtx,a);
}
# Data format method : facet table as matrix
else {
b = matrix(4,3,12); # max four points per polygon, max 3 polygon per facet
for (i = 1:12) {
for (ipol = 1:length(a{i})) {
fpoly = a{i}{ipol};
for (j = 1:length(fpoly)) {
b(j,ipol,i) = fpoly(j);
}
}
}
addplanarsolid;
set('vertices',vtx); # must be done first
set('facets',b);
}