RSoft CAD 2024.09 User Guide
RSoft CAD 2024.09 User Guide
RSoft CAD
v2024.09
User Guide
Synopsys, Inc.
Copyright Notice and Proprietary Information
Copyright © 2025 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary
information that is the property of Synopsys, Inc. The software and documentation are furnished under a license agreement and
may be used or copied only in accordance with the terms of the license agreement. No part of the software and documentation may
be reproduced, transmitted, or translated, in any form or by any means, electronic, mechanical, manual, optical, or otherwise,
without prior written permission of Synopsys, Inc., or as expressly provided by the license agreement.
The license agreement with Synopsys permits licensee to make copies of the documentation for its internal use only. Each copy
shall include all copyrights, trademarks, service marks, and proprietary rights notices, if any. Licensee must assign sequential
numbers to all copies. These copies shall contain the following legend on the cover page:
“This document is duplicated with the permission of Synopsys, Inc., for the exclusive use of
______________________________ and its employees. This is copy number __________.”
All technical data contained in this publication is subject to the export control laws of the United States of America. Disclosure to
nationals of other countries contrary to United States law is prohibited. It is the reader’s responsibility to determine the applicable
regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO
THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys’ company and certain product names are trademarks of Synopsys, as set forth at:
[Link] All other product or company names may be trademarks of their
respective owners.
FOSS Notices
Free and Open Source Software (FOSS) notices are located in the \readme subfolder of the RSoft installation folder.
Contents
Preface 1
Foreword .................................................................................................. 1
How to Read This Manual ........................................................................ 3
1 Introduction 7
1.A. Program Installation & System Requirements ................................... 7
1.B. Physical Conventions ........................................................................ 7
1.C. Program Executables ........................................................................ 8
1.D. Example Files ................................................................................... 9
1.E. README Files .................................................................................. 9
1.F. Product Support, Upgrades, and Resources ................................... 10
2 A Simple Tutorial 11
Step 1: Opening the CAD Window......................................................... 11
Step 2: Creating a New Design File ....................................................... 12
Step 3: Defining Variables ..................................................................... 14
Step 4: Drawing a Component ............................................................... 15
Step 5: Moving a Component ................................................................ 16
Step 6: Set Component Properties Exactly ............................................ 17
Step 7: Creating a Tapered Component ................................................ 18
Step 8: Verifying Structure Layout ......................................................... 20
Step 9: Simulation & Advanced CAD Features ...................................... 20
4 Segment Components 52
4.A. Segment Overview .......................................................................... 52
4.A.1. Basic Segment Properties ................................................ 52
4.A.2. Segment Orientation Overview ......................................... 53
4.A.3. Setting Segment Properties .............................................. 54
4.A.4. Setting Segment Display Color ......................................... 54
4.B. Vertices ........................................................................................... 55
4.B.1. Setting Position................................................................. 55
4.B.2. Index Definition ................................................................. 56
4.B.3. Controlling Geometry ........................................................ 57
4.C. Basic 2D Segments ........................................................................ 58
4.D. 3D Structure Types ......................................................................... 58
4.D.1. Fiber ................................................................................. 59
RSoft CAD iv
4.D.2. Channel ............................................................................ 59
4.D.3. Diffused ............................................................................ 60
4.D.4. Rib/Ridge ......................................................................... 62
4.D.5. Multilayer .......................................................................... 64
4.D.6. Polygon Structure Types .................................................. 67
4.D.7. Mixing 3D Structure Types ............................................... 69
4.E. Profiles & Tapers............................................................................. 69
4.F. Segment Types (z-Axis, Seg-Axis, Extended) ................................. 69
4.G. Drawing Common Extended Segments .......................................... 71
RSoft CAD v
6.E.2. Import ............................................................................. 102
6.E.3. Import/Export Settings and Important Notes ................... 103
6.F. Circuit References ......................................................................... 104
6.F.1. Creating a Circuit Reference ........................................... 105
6.F.2. Setting Circuit Reference Properties ............................... 106
6.F.3. Editing a Circuit Reference ............................................. 108
6.F.4. Controlling Variables in Child File From Parent File ........ 108
6.F.5. Hierarchy Exports ........................................................... 109
6.F.6. Creating Python Functions .............................................. 111
6.F.7. Adding Vertices to a Circuit Reference............................ 113
6.F.8. Dynamically Importing GDS files via Circuit References . 113
6.G. Dynamically-Sized Arrays ............................................................. 114
6.G.1. Creating a Dynamic Array .............................................. 115
6.G.2. Setting Lattice Properties ............................................... 115
6.H. Defining Pathways ........................................................................ 116
6.H.1. Creating a Pathway ........................................................ 116
6.H.2. Using Pathways .............................................................. 117
6.I. Importing Symbols or Components from Another Design File ......... 118
6.I.1. Importing Symbols ........................................................... 118
6.I.2. Importing Components ..................................................... 120
6.J. CAD Preferences ........................................................................... 120
6.K. Additional Component Properties .................................................. 122
6.K.1. General Properties ......................................................... 123
6.K.2. Extended Segment Properties ........................................ 124
6.K.3. Crystal Axes ................................................................... 125
6.K.4. Component Tags ............................................................ 126
6.L. Using EIM to Simulate 3D Structures in 2D (2.5D)......................... 128
6.M. Expanded Referencing of Vertices ............................................... 129
6.N. Warning Options ........................................................................... 130
6.O. Component Filters ........................................................................ 130
6.O.1. Defining Filters ............................................................... 130
6.O.2. Using Filters ................................................................... 133
6.P. Simulation Log Files ...................................................................... 133
RSoft CAD vi
7.C.3. 3D Unit Cells .................................................................. 141
7.C.4. Additional Options .......................................................... 142
7.D. Creation Options ........................................................................... 143
RSoft CAD ix
findpks – Find Peaks Utility .................................................................. 277
fitdisp – Dispersion Fitting Utility ........................................................... 279
fwmodekit – Extract Data From FullWAVE State File............................ 282
ind2gds, ind2dxf – Convert .ind File to Mask ........................................ 284
gds2ind – Convert GDS Mask to .ind File ............................................. 285
killall – Utility to stop processes ............................................................ 286
Mask Conversion Utilities ..................................................................... 287
GDS Utilities ............................................................................. 287
DXF Utilities .............................................................................. 288
mat2bp – Convert Matrix Data to RSoft Format .................................... 289
mathmat – Do Arithmetic with Data Files .............................................. 290
parutil – Generate nk data files from TCAD Sentaurus parameter files . 293
Ray-Tracing Conversion Utility ............................................................. 294
rsanimate – Create Animations from Plot Files ..................................... 295
rscombine – Combine Frequency Results ............................................ 296
rspython – Python Environment ............................................................ 297
shufflemat – Rearrange Data Files ....................................................... 298
smatgen - Custom PDK Utility .............................................................. 301
tailmon – Extract Final Value Utility ...................................................... 302
tdrutil – TDR File Utility ......................................................................... 303
wgmode – Waveguide Mode Utility....................................................... 307
RSoft CAD x
H.B.6. Example Usage.............................................................. 334
H.C. RSoft Data API: RSoftUserFunction() .......................................... 337
H.C.1. Reference ...................................................................... 337
H.C.2. Example Usage ............................................................. 339
Index 348
RSoft CAD xi
Preface
Foreword
The RSoft CAD is the core program in the RSoft Photonic Device Tools, and acts as a control
program for the passive device simulation modules BeamPROP BPM, FullWAVE FDTD,
BandSOLVE, GratingMOD, DiffractMOD RCWA, FemSIM FEM, and ModePROP EME. It is
used to define the most important input required by these simulation modules: the material
properties and structural geometry of a photonic device. A user will typically first design a
structure in the CAD interface and then use one or more simulation engines to model various
aspects of the device performance.
This modular approach to the design and simulation of photonic devices is one of RSoft’s
Photonic Device Tool’s greatest strengths. Each program in the suite is designed to “play nice”
with the other programs, creating an environment in which data can be shared between the
modules. Virtually all the input and output files are in a simple ASCII text format, which allows
even greater user control over program operation as well as third-party programs to be integrated
into the suite.
While the tools are designed to be used via the GUI (Graphical User Interface), command line
operation is also possible. This, coupled with the modularity of the Suite, allows for complex
scripting capability. The tools are not limited to a single scripting language, but rather uses the
native scripting language of your operating system. For example, Windows users can use DOS
batch files, while Unix users can use bash scripts. Additionally, users familiar with languages
such as Perl, Python, C, or C++ can create custom scripts in these languages. The RSoft
RSoft CAD 1
Component Design Suite provides the best of both worlds: it allows for simulations to be
performed via the GUI, and for complicated custom simulations to be performed via a script.
New and advanced users alike are able to realize the full power of the tools.
BeamPROP BPM
BeamPROP is a simulation engine for the design of integrated and fiber-optic waveguide devices
and circuits. The software incorporates advanced finite-difference beam propagation (BPM)
techniques for simulation. The software has been commercially available since 1994, and is in
use by researchers and development engineers in both university and industrial environments.
FullWAVE FDTD
FullWAVE is ideal for the design of complex photonic devices. The software employs the finite-
difference time-domain (FDTD) method for simulation, which allows analysis of devices, such
as photonic bandgaps and ring resonators, that cannot be modeled with techniques such as the
efficient beam propagation method (BPM).
BandSOLVE
BandSOLVE is a simulation module for generating and analyzing photonic band structures. This
simulation module is based on an advanced optimized implementation of the plane-wave
expansion technique for periodic structures. It is ideal for producing band structures for classic
photonic bandgap structures such as 2D and 3D photonic crystal waveguides and defect sites. In
addition, it can be applied to fiber structures such as photonic crystal fibers and photonic
bandgap fibers, which are particularly challenging for other simulation techniques. It is
especially useful for optimizing the band structure properties of photonic crystal structures,
which can be subsequently simulated in FullWAVE to examine time-dependent properties such
as waveguide loss and coupling.
GratingMOD
This software tool helps model and analyze many devices that incorporate gratings and various
kinds of filters, and is easily integrated with RSoft’s award-winning simulation tools. It provides
both a forward and backward analysis, allowing for the calculation of grating spectra from
known geometries and the synthesis of grating structures from grating spectra.
RSoft CAD 2
DiffractMOD RCWA
DiffractMOD is a general design tool for diffractive optical structures such as diffractive optical
elements, subwavelength periodic structures, and photonic bandgap crystals. It is based on the
Rigorous Coupled Wave Analysis (RCWA) technique, and can simulate both 2D and 3D
structures with an arbitrary lattice structure and unit cell index profile. In addition to dielectric
materials, dispersive and lossy material structures such as metallic systems can also be used.
Typical applications include Diffractive optical elements (DOEs), photonic bandgap structures,
wavelength filters, optical metrology, nano-lithography, polarization sensitive devices, artificial
dielectric coatings, photovoltaic systems, 3D displays, optical interconnections, optical data
storage, spectroscopy, microlens arrays, and beam splitting, combining, and shaping.
FemSIM FEM
FemSIM uses the finite element method to calculate modes, both waveguide and cavity, of any
2D cross-section. A generally non-uniform and irregular mesh is used to solve for all field
components of supported modes, both guided and leaky. FemSIM can easily find modes for
highly hybrid structures, highly leaky structures, and structures with small feature sizes.
ModePROP EME
ModePROP is an eigenmode propagation tool that accounts for both forward and backward
propagation and radiation modes. It provides a rigorous steady-state solution to Maxwell’s
equations that is based on the highly stable Modal Transmission Line Theory. A full array of
analysis and simulation features makes this tool flexible and easy to use.
RSoft CAD 3
Introductory Information
Chapters 1 and 2 provide an overview of the installation of the program, an introduction to the
program and its components, information about technical support and product upgrades, and an
introductory tutorial. All new users should read these chapters in their entirety.
Appendices
The appendices provide detailed discussion of file formats, expressions, utilities, and other
relevant information. The appendices can be treated as a reference manual and do not need to be
read by all new users.
This manual should be used alongside the simulation tool manuals as described in the next
section.
Anything defining geometry and/or material parameters is in the CAD manual. Anything else is
in an appropriate simulation manual.
Using this rule, almost any topic can be found. As with any rule, there are a few exceptions. The
major exceptions are:
• Installation
The installation procedure is covered in the Photonic Solutions Installation Guide.
• Parameter Scanning/Scripting/Batch Operation
RSoft CAD 4
These topics are very similar, and are shared by all the simulation modules. They are
discussed in Chapter 10 of the CAD manual.
• Computing the Index Profile
Computing the index profile is discussed in Section 3.G of the CAD manual.
• Pathways
Pathways define the location of pathway monitors (used by BeamPROP and FemSIM) and
the location and geometry of launch (initial) fields, in BeamPROP, FullWAVE, and
ModePROP. They are documented in Section 6.G of the CAD manual.
• Command Line Utilities
The RSoft Photonic Device Tools ship with several command line utilities that perform a
variety of tasks. These utilities are documented in Appendix E of the CAD manual.
• RSoft Expressions
Virtually any numeric field can accept an analytical expression involving pre-defined and
user-defined variables. The form of these expressions, including valid arithmetic operators
and functions can be found in Appendix C of the CAD manual.
• Mode Solving
A variety of mode solvers is included, see Chapter 11 in the CAD manual for an overview of
the mode solving methods available.
Anytime this rule is violated, a note will direct the reader to the proper section in the proper
manual.
Typographical Conventions
A number of typeface and layout conventions are followed in this manual.
• The names of fields and controls in the GUI dialogs are written in boldface
• The values of pull-down menus and radio button controls are written in italics.
• File names and paths, symbol table variables and values, expressions typed in GUI edit
fields, and code snippets are written in monospace.
RSoft CAD 5
• In referring to example CAD files, the installation directory for the CAD tool is specified as
<rsoft_dir>, and should be replaced with the correct value for your installation.
RSoft CAD 6
1
Introduction
This chapter explains the installation procedure for the RSoft CAD, a discussion of physics
conventions used in this manual, information on running the program, and notes about getting
the product updates and technical support.
RSoft CAD 7
Units
The units used in the CAD are as follows:
• The standard unit of length is measured in microns [µm].
• The angular unit used is degrees.
• The units of time (for FullWAVE) are also in microns [µm], and therefore in units of cT,
where c is the speed of light in a vacuum which is approximately 3e14 µm/s.
• The units of imaginary refractive index are defined as:
nimag =
4
where is the wavelength and is the usual exponential loss coefficient defined such that the
power decays as e-z and is given in units of m-1.
Polarization
Since the RSoft CAD is shared by many programs, the polarization conventions used can vary by
tool. Please consult Appendix G as well as the individual simulation tool manuals for
information specific to a particular tool.
RSoft CAD 8
LaserMOD CAD tool [Link] Xlasermod
Note that each simulation tool is licensed separately, and you will only be able to run those you
have a valid license for.
These executables have different names under Windows and Linux though in most
documentation the Windows names are used. Also, these programs can be run from the
command line; more information on this can be found in Section 10.D.1.
These example and tutorial files are specific to each simulation engine; you can only perform a
simulation if you are licensed for that particular simulation engine.
RSoft CAD 9
about RSoft software that is not contained in other documentation, including new or improved
features and options.
RSoft CAD 10
2
A Simple Tutorial
This chapter contains a brief tutorial that shows the basic usage of the RSoft CAD. It breaks the
design process into nine steps in order to illustrate a sample workflow. In practice, some of these
steps may be skipped or repeated several times to achieve a working design.
Even though this tutorial creates a simple fiber structure, the ideas and techniques introduced
will be exactly the same for producing complex structures. While not necessary, it is
recommended that you follow the steps in this tutorial at a computer while reading this chapter.
RSoft CAD 11
Figure 2-1: The RSoft CAD window, showing the menubars at the top and left, the tree-view
toolbar at the right, and the status line at the bottom.
If this is your first time opening the RSoft CAD, a “Welcome to the RSoft CAD Program!” tip
window will appear, as appears in Fig. 2-1. These tip windows are designed to convey relevant
information about the software to both new and experienced users, and will occasionally pop-up
as you use the software.
After creating a new structure, changes can be made to these settings in the Global Settings
dialog that can be accessed via the Globe icon in the left toolbar.
RSoft CAD 12
Figure 2-2: The startup window where basic information about the structure is set.
Option Description
Model Dimension The dimension of the structure.
Component Delta-N The default index difference between a component and the Background
Index
Background Index The index of the background (white) region.
Simulation Tool The simulation tool to be used. Since this tutorial will only look at the
CAD, the tool chosen does not matter.
Load Settings Loads a pre-defined list of settings, for example typical Silicon waveguide
settings.
For this tutorial, all the default settings are acceptable except the Model Dimension. Change the
Model Dimension to 3D and then click OK to continue to create the layout window within the
main CAD window as shown in Fig. 2-3.
The view shown in Fig. 2-3 shows the multi-pane view. There are three panes, an XZ plane, YZ,
XY pane, and 3D pane. Axes labels are shown in each pane. If this were a 2D structure, only the
XZ pane would be shown. To view a single pane, click the 1P button in the view toolbar (the
second toolbar on the top). Click the X, Y, and Z buttons in view toolbar to switch between the
views. To switch back to multi-pane view, click the 4P button in the view toolbar.
RSoft CAD 13
Figure 2-3: Illustration of a layout window where components are added to the circuit. The
simulation domain (solid or dashed line) and launch field are also shown.
Finally, note that the mouse appears as a cross-hair, and the coordinate display in the status line
indicates the mouse position in real coordinates [µm].
RSoft CAD 14
Figure 2-4: The Symbol Table Editor; Length has been defined with a value of 42.
The symbol table will have several symbols already defined that correspond to the settings made
in the Startup window. We are going to define a symbol Length, and set it equal to 42: click
New Symbol, enter the symbol Name (Length) and Expression (42), and then click Accept
Symbol. The variable Length should now appear in the symbol table. This variable will be used
in a later step. More information on the usage of the Symbol Table can be found in Section 3.B.
RSoft CAD 15
the coordinate of the end point. If a mistake is made when adding any component, use the Undo
icon in the top toolbar.
Figure 2-5: a) A fiber component as it appears in the XZ plane after drawing, and b) Multi-
pane view clearly showing the fiber component. Multi-pane view is not available for 2D
structures. Here, the tree view has been hidden by clicking on the Toggle Component
Tree button.
You may notice that the CAD display does not appear as shown in Figure 2-5. This is most likely
due to a different display aspect ratio. There is a pulldown menu on the view toolbar to control
the aspect ratio, set it to 1:1. You can switch between the single pane view shown in Fig 2-5a and
four pane view in Fig 2.5b by clicking the 1P or 4P button in the view toolbar. Use the pulldown
menu on the view toolbar to choose an appropriate aspect ratio for each view.
In general, the next step would be to continue to add elements to the CAD layout to create the
desired device. This process is described further in Section 3.D. For this example, there are no
more elements to add.
In addition to viewing all components in the CAD at once, it is also possible to view only the
components that lie within a specific cut plane by using the “Cut Mode” option. See Section
3.E.1 for details.
RSoft CAD 16
Components can be selected with the mouse and then dragged to a new position. This allows
for the quick movement of a waveguide segment.
• Via the Component Properties window
The exact coordinates of a component can be set in the Component Properties dialog box
allowing for precise control of component position. The use of this box will be discussed in
the next step.
Figure 2-7: The Component Properties dialog for the fiber component.
The RSoft CAD is an object oriented design environment so each component has a different
Component Properties dialog, and therefore a different set of parameters. A detailed description
of this dialog can be found in Chapter 4.
The current value of any field in the software, including those in the Component Properties
dialog shown in Fig. 2-7, can be found by holding the CTRL key and double-clicking on the field.
RSoft CAD 17
Setting Position
The length of the fiber component was set using the mouse in Step 4. It is possible to control this
length exactly in the Component Properties dialog. This will be done using the variable Length
that has been previously defined and the concept of “references”. In order to set the length of this
component, the ending vertex will be offset by the variable Length from the starting vertex
resulting in a fiber with a length of 42 µm. Set the Reference Type of the Z coordinate of the
Ending Vertex to Offset, the Offset Value to Length, and relative to the Starting Vertex of
component 1. Thus, the Z coordinate of the ending vertex of this component, or component 1,
should be computed as an offset from the starting vertex of this component, or component 1.
This offset will therefore equal the length of the segment.
RSoft CAD 18
Figure 2-8: The tapered fiber as seen in the CAD window.
The width taper function, or how the width varies between the two vertices, is linear by default.
It can be changed via the Width Taper setting in the Component Properties dialog. See Section
4.E.
The view shown in Fig. 2-8 shows the entire structure; it is also possible to view ‘slices’ of each
cross-section at a particular position. This is most readily illustrated with the XY view. On the
view toolbar, select Z and click the +/- buttons to begin stepping through the structure: Both the
absolute Z position and the step along Z between slices are shown on the view toolbar, and can
be directly set by the user. As the slices step through the structure, the cross-section will change
from circular to elliptical (and/or back). To view the entire structure again, click the All button on
the view toolbar.
RSoft CAD 19
Step 8: Verifying Structure Layout
It is important to simulate the desired index distribution! Performing a simulation with the wrong
index distribution will result in erroneous results. There are two main methods to verify the
structure layout:
• Via the CAD
Various aspects of the geometry can quickly be seen using the multi-pane view and cut
feature described briefly above. See Section 3.E for more details.
• By Displaying the Index Profile
Index profiles show the index distribution and can help verify that both the geometry and
material properties have been set correctly. To compute an index profile, click the Display
Material Profile icon in the left toolbar to open the dialog shown in Fig. 2-9.
Pressing OK in this dialog will display the index profile at the Z Domain Min value. More
information on the display of material profiles such as the refractive index can be found in
Section 3.G.
RSoft CAD 20
This tutorial illustrates basic CAD layout features and a sample workflow for using the RSoft
CAD. The rest of this manual explains the simple concepts introduced in this tutorial in more
detail and also introduces advanced concepts.
RSoft CAD 21
3
This chapter should be read by all users and covers the CAD window, the symbol table, creating
new structures, creating/editing components, viewing the structure, and calculating material
profiles. This chapter does not cover component types or component properties. See Chapter 4
for segment components and Chapter 5 for other component types.
3.A.1. Menubar
Some options can be accessed via the toolbars; keyboard shortcuts are shown in parenthesis if
available.
Under File:
RSoft CAD 22
design file design files Export mask file: Section 6.E
Under Edit:
Under View:
These features are discussed in Section 3.E.
In Last ReGrid
Zoom in Revert viewing window Recalculate
CAD window to the last setting the grid
RSoft CAD 23
Zoom out Directly set the Clear log file, see Section 6.P
CAD window viewing window
Full ReDraw Open Log
Set viewing domain so
Redraw all components Open log file, see Section 6.P
the entire structure is visible
Under Options:
Under Run:
Under Graph:
RSoft CAD 24
file in the BSDF Viewer WinPLOT windows
Under Utility
Under Window:
Cascade Close
Cascade all open design Close the current file
files in the CAD window
Under Help
This menu option provides online help for all RSoft products that share the CAD interface.
3.A.2. Toolbars
The CAD has several toolbars:
RSoft CAD 25
Open Circuit Rotate Selection
Open existing Rotate selected
design file components
Single-Pane/Four-Pane Zoom In
Switch between single-pane Zoom in
and multi-pane view CAD window
RSoft CAD 26
Edit X Axis View Zoom Out
Display YZ plane Zoom out
CAD window
Arc S-Bend
Draw arc segment Draw S-bend segment
component: Section 3.D.1 component: Section 3.D.1
Lens Circle
Draw lens component: Draw circle/cylinder/sphere:
Section 3.D.1 Section 3.D.1
Polygon
Draw polygon objects:
Section 3.D.1
RSoft CAD 27
Circuit Reference Dynamic Array
Draw circuit references: Section 6.F Draw a dynamic arrays: Section 6.G
Extended Segments Structure Preference
Nested menu to draw extended Nested menu for structure type
segments, see section below for all sub- preference, see section below for all
options sub-options
Extended Segments:
Extended Segments are discussed in more detail in Section 4.G. Though illustrated with a
circular cross-section, these segments can have any 3D Structure Type.
RSoft CAD 28
Straight Extended Segment Arc Extended Segment
Draw straight Draw arc
extended segment extended segment
Structure Preference:
The structure preference is discussed in Section 3.D.3 and sets the 3D Structure Type of
segments to be drawn. The default choices indicate that the setting in the Global Settings dialog
should be used.
RSoft CAD 29
3.A.3. Status Bar
The status bar is located on the bottom of the CAD window, and provides information about the
current mode of the CAD interface as well as the current coordinates of the mouse.
Figure 3-1: The status bar at the bottom of the CAD window.
Figure 3-2: Tree view for a simple structure consisting of 2 Segments, a Lens, and a Launch
Field.
Any element in the CAD can be easily modified by right-clicking on it in the tree view toolbar
(for example, Segment #1 or Launch #1 in Figure 3-2). New elements of any type can be created
by right-clicking on the appropriate branch folder in the tree view. A branch folder will be
greyed out if it is not relevant to the simulation tool being used.
RSoft CAD 30
If desired, the tree-view toolbar can be hidden by clicking on the Toggle Component Tree icon
in the view toolbar.
The Component Filters folder can be used to create custom list(s) of components based on user-
defined searches/filters. For example, a filter can be made to list components that have a material
of ‘Si’, or to list all monitors, or all components with a priority of 4. The resulting objects can
also be hidden in the drawing windows, so for example, you can hide all components that have a
material of ’Si’, etc. See Section 6.O for more details.
Multiple elements in the CAD can be selected by right-clicking on them in the tree view toolbar
and holding the Ctrl and/or Shift keys down. Holding down the Ctrl key adds them one by
one whereas holding down the Shift key selects a range. In the case of multiple selections, the
last element is highlighted in the tree view toolbar and the other elements in the selection are
marked by an * in front of their element name. Operations can be performed on the elements in
the multiple selection list through right-clicking the highlighted element. One such operation is
adding these elements to a Group which will then appear as a named Group under the
Component Filters. The resulting Group can now perform similar operations like the Component
Filters, see Section 6.O for more details
Project materials are shown in the tree. If material colors are used (see Section 8.A.6), the
material color is shown in the tree.
RSoft CAD 31
The Load Settings button can be used to pre-load a set of simulation settings, for example
typical Silicon wire settings. It is recommended to load the closest settings for your specific case
and then modify as needed. New settings packages can also be saved, see below.
Model Dimension
The dimension of the structure which can be either 2D or 3D. A 2D structure is in the XZ plane.
Note that in some cases, 3D structures can be automatically simulated in 3D using the Effective
Index Calculation option described below.
Radial Calculation
Performs a 2D radial simulation of structures that have azimuthal symmetry; this option is not
enabled for all simulation tools and is described in relevant simulation tool manuals.
RSoft CAD 32
Effective Index Calculation (2.5D)
The Effective Index Method (EIM) can be used to greatly reduce the computation time and
memory requirements of a simulation by converting a 3D structure into an approximate 2D
structure. This is sometimes called ‘2.5D’. This option only affects the simulation; the definition
of the original 3D structure is unaltered allowing this feature to be safely turned on and off
without changing the defined structure. See Section 6.L for details including supported
simulation tools and other requirements.
For most simulation tools, the wavelength is an input. Some tools solve for wavelength(s) as a
part of the simulation (BandSOLVE for example). For such tools this setting will, in most cases,
have no effect. Exceptions include using dispersive materials where the material properties are
defined as a function of the wavelength or when variables are defined as a function of the built-
in symbol for this option free_space_wavelength.
RSoft CAD 33
Component Width and Component Height
The default width and height of a component along the X and Y axes respectively. Individual
components can also have a different width and/or height described in Section 4.B. The height is
only used for 3D simulations and is set equal to the width by default.
3D Structure Type
The default 3D structure type. See Section 4.D.
Cover Index, Cover Material, Slab Index, Slab Material, and Slab Height
These options set the refractive index when 3D Structure Type is set to Rib/Ridge or Multilayer.
See Section 4.D.4 and Section 4.D.5 for more details.
Settings Files:
Settings files are .ind file that contain convenient starting points for a structure/simulation.
There are built-in settings files, users can create their own setting files, or can be loaded from
one or more RSoft CAD Info folders. See the Custom PDK Utility manual for more information
on using Settings files and RSoft CAD Info folders.
RSoft CAD 34
3.C.1. Why use the Symbol Table & Variables?
The Symbol Table has two main uses:
• Modify existing built-in variables
Every option in the RSoft CAD and simulation tools is controlled by a built-in variable in the
symbol table. While most options can be set in the graphical interface, advanced users can
modify these variables in the symbol table to access these features. This concept is the basis
for RSoft’s convenient scripting capabilities: see Chapter 10 for more details.
• Create user-defined variables
User-defined variables can be used to set various aspects of a design. These variables can be
a simple numerical value, or an arbitrary mathematical function of other variables. This is an
extremely powerful and unique feature of the RSoft CAD which allows for the creation of
parametric designs, facilitates parameter scanning and optimization, and simplifies
simulation scripting.
It is recommended that the names user-defined variables start with a capital letter. Variables that
start with a capital letter are displayed on top of the variable list making them easier to find.
Figure 3-4: The Symbol Table Editor dialog which allows access to both built-in and user-
defined symbols.
RSoft CAD 35
Most of the variables shown in Fig. 3-4 correspond to the settings shown in the startup dialog
described in Section 3.B. Altering any of the values will immediately affect the corresponding
parameter in the design file and is equivalent to changing the parameter in the Global Settings
dialog.
Removing a Variable
To remove a variable from the symbol table, select the variable and click Delete Symbol.
An Example
As an example, open the file <rsoft_dir>\examples\beamprop\[Link]. Open the
symbol table and note that the variable width is set to 4 indicating that the default width of
components in this design is 4 µm. Change the value of this variable to 10 and click OK to return
to the layout window. The structure will have adjusted accordingly.
Additional Notes
• Variables names are case-sensitive.
• Variables can be defined as an analytic expression involving any other variable in the symbol
table. See k0 shown in Fig. 3-4. Appendix C documents the syntax and functions that can be
used.
• Variables can be edited via a text editor using the Text Editor button. Any changes here will
be automatically reloaded back into the Symbol Table when the text file is closed. A default
text editor is used, set the environment variable RSOFT_EDITOR to the path of the text editor
of your choice.
• Numerous built-in variables control all CAD and simulation options. A list of built-in
variables that correspond to CAD options can be found in Appendix D; built-in variables that
correspond to simulation tool settings can be found in similar appendices in each simulation
tool manual.
RSoft CAD 36
• Built-in variables that do not appear in the symbol table are internally set to their default
values. Do not use the name of a built-in variable as a user-defined variable to avoid conflict.
The easiest way to avoid this problem is to start the name of any user-defined symbol with a
capital letter since the names of all built-in symbols are entirely lower case.
• Variables can be used in place of filenames where applicable in the graphical interface. To
use this feature, create the variable and set its value to the name of the data file. Then, enter
$name in the graphical interface where name is the name of the variable.
Two-Vertex Components:
All two-vertex components in the CAD are generalized forms of the same component, the
generalized segment. However, several drawing modes are provided to simplify the creation of
these different types:
See Chapter 4 for a complete description of the segment component type. Also, one type of
segment can be changed into another by modifying its settings.
RSoft CAD 37
One-Vertex Components:
One-vertex components that can be added to a design file are:
Polygon
This drawing mode produces polygon components defined by a series of points in the XZ plane.
Circuit Reference
This drawing mode produces circuit reference components.
Simulation Region
This drawing mode produces simulation region components and is only available for
BeamPROP.
Monitor
This drawing mode produces monitor components and is only available for FullWAVE,
DiffractMOD, ModePROP, and BeamPROP.
Snap Modes
Snap modes provide simple ways to align or connect components:
RSoft CAD 38
• Snap To Drawing Grids
The layout window maintains both a fine and a coarse grid. Drawing coordinates can snap to
either of these grids reducing required hand-eye coordination: the fine grid is used by default,
and the coarse grid can be used by holding Shift. Holding Ctrl disables snapping.
• Snap To Components
When drawing components a vertex will automatically snap to the vertex of another
component if the two vertices are near enough. This is extremely helpful when drawing
components that need to fit together to form a larger structure. The tolerance for this can be
set in the CAD preferences. This relationship is preserved as a reference between the
components by the CAD. When one component snaps to another the coordinates are not
simply set equal but is logically attached to that component. When a component is moved,
any attached components move with it. Even if components aren’t drawn using this mode
they can be logically attached. See Section 4.B.1.
It is important to understand that role of the Drawing Preferences: changing the Drawing
Preferences will not affect any existing components, only components that will be drawn.
Changing the options in the Global Settings will change all components that have properties
based on those options.
RSoft CAD 39
3.E.1. Single-Pane Mode
Single-Pane Mode displays a single view of the structure in the layout window and can be
accessed via the 1P button in the view toolbar. The X, Y, and Z buttons in the view toolbar set the
axis which the structure should be viewed along. In each view, the axes are clearly labeled in the
lower left corner. The Y (XZ) view is always used for 2D layouts.
RSoft CAD 40
3.E.3. Zooming
A layout window can be zoomed using the mouse, toolbar buttons, or menu items.
• Zooming via Toolbar Buttons
There are three zoom buttons on the view toolbar: Zoom In, Zoom Out, and Zoom Full. The
zoom percentage is 10% by default but can be set in the CAD preferences.
• Zooming via the Mouse Wheel
Holding the SHIFT key and using the mouse wheel will zoom in/out. The zoom percentage is
10% by default but can be set in the CAD preferences. This is available for Windows
systems only.
• Zooming via the Mouse
To zoom with the mouse click the Zoom Mode icon in the left toolbar. The mouse will
change to a magnifying glass and clicking the left and right mouse buttons will zoom in and
out respectively as well as center the display at the mouse position. Holding the Shift key
while pressing the left button will zoom out. The zoom percentage is 10% by default but can
be set in the CAD preferences.
• Zooming via Menu Items
It is possible to zoom via the CAD menu with the options under the View menu.
3.E.4. Panning
A layout window can be panned via scroll bars or the mouse.
• Panning via Scroll Bars
Each viewing window has scroll bars which can be used to pan the structure view. The scroll
bars can be removed if necessary via the CAD preferences described in Section 6.J.
• Panning via the Mouse
To pan with the mouse click the Pan Mode icon in the left toolbar or hold the CTRL and
SHIFT keys. The structure can then be moved with the mouse. Alternatively, use the mouse
wheel to pan vertically, hold the CTRL key and use the mouse wheel to pan horizontally.
RSoft CAD 41
3.E.6. Displaying ‘Simulation’ Objects
The CAD, by default, displays additional objects in the drawing windows:
• Simulation Domain
The simulation domain is displayed as a dark solid line and cannot be selected or moved with
the mouse. For BandSOLVE and GratingMOD, it is displayed as a dashed line which
represents the domain that is used to when displaying material properties. For BandSOLVE,
the actual simulation domain is defined by the lattice vectors and can be viewed by clicking
the View Domain button in the Simulation Properties dialog. For GratingMOD, the actual
simulation domain is defined so as to include the entire structure.
• Launch Fields
Launch fields are displayed as orange rectangles. Right-clicking on these objects in the
layout window will open the Launch Properties. These objects cannot be moved with the
mouse.
• Direction Indicators
Both launch field and monitor objects have associated directions and can be displayed in the
CAD layout window.
The display of these objects can be disabled/enabled via the CAD Preferences window.
If reading this section for the first time it might be beneficial to create a simple structure with
several components to experiment with.
To select a single component, simply click on the component. The selected component will be
highlighted with small black handles which can be used for resizing or scaling the component as
discussed below. The component number of the most recently selected component is shown in
the CAD status bar.
RSoft CAD 42
Figure 3-6: A straight component that has been selected by clicking on it.
Basic Operations
These are simple mouse-based methods to move, resize, flip, and rotate components. Complete
control over a component can be achieved by directly setting the component properties in the
Component Properties dialog described below.
The snap features described in Section 3.D.3 are not enabled by default when editing existing
components. It can be enabled if needed in the CAD Preferences.
RSoft CAD 43
• Moving
To move the selection, simply drag one of the components in the selection to the desired new
position. If the position of the component(s) has been defined by variables in the Component
Properties dialog, a dialog will be shown where the user can set an offset which will be added
to the current position of the selected components. Both numeric and variable-based
expressions can be used. To force this dialog to be shown hold CTRL while moving the
components.
• Resizing
To resize or scale the selection along a particular direction, simply grab the corresponding
handle of any one of the selected components and move it to the desired position.
• Flipping
The Flip Horizontal and Flip Vertical icons in the top toolbar can be used to flip components
around their center. To flip around their top or buttom, hold the left or right Shift key while
clicking the icon. Alternatively, use the Edit/Flip-Horizontal/ and Edit/Flip-Vertical CAD
menu items.
• Rotating
The CAD also has a limited capability for rotating components via the Edit/Rotate menu
option or the view toolbar . Several limitations on this option exist depending on the
component type.
RSoft CAD 44
(segments). In this case, the single-vertex components are considered to have only a starting
vertex. Thus, any changes to the vertex information (refractive index, position, width, and/or
height) of a single-vertex component will be applied to all single-vertex components as well
as the starting vertex of any selected segments. Any changes to the ending vertex of a
segment will only be applied to the ending vertex of any other segments. It is possible to
modify this logic using the previous note about editing mixed groups.
• After changes have been made in the properties dialog, the CAD will, for all changed
options, check if all selected components had the same initial value as the primary selected
component. If they do, the new value will be applied to all selected components. If not, the
user will be presented with a choice to apply the change to all selected components (if
applicable) or just those components that had the same initial value as the primary selected
component.
RSoft CAD 45
Figure 3-6: The Compute Index Profile window.
Calculation Parameters
The calculation parameters set in this dialog determine the domain and grid that are used to
calculate the desired profile. While default values for these parameters are given, there are some
guidelines for choosing these parameters:
• Calculation Domain
The domain should be large enough to encompass the area of interest in the structure. The
default values correspond to the whole structure.
• Grid Sizes
The grid sizes should be small enough to resolve the smallest feature in the structure.
• Slice Grid
The index information is saved and displayed on the slice grid. For most calculations, it is
best to set the slice grid and grid size equal to best view the index.
• Material Property
The real or imaginary index profile can be computed, as well as other material parameters for
3D simulations. See Chapter 8 for more information on these material properties. See
discussion at the end of this section for information on displaying anisotropic index profiles.
• Overlay Grid
RSoft CAD 46
This option, enabled by default, overlays the simulation grid on the material profile. Note
that this only works with the contormap and 3D viewer display modes.
When the OK button is pressed, the desired profile is displayed as a line plot for a 2D profile or a
contour plot for a 3D profile.
RSoft CAD 47
• 3D Viewer – This option is only available for 3D FullWAVE designs. It calculates a 3D
refractive index profile, allowing the user to easily browse through different cross-sections.
See the FullWAVE manual for more details.
Surface Color
Sets the surface color for plots produced when the Display Mode is set to SolidModel.
Outline Color
RSoft CAD 48
This pulldown menu sets the color of the circuit outline to be displayed over the simulated fields.
RSoft CAD 49
the index profile and 2 to compute the loss profile. The default of 0 computes the optical field as
usual. Users who are not licensed for BeamPROP can still perform this type of calculation.
Figure 3-8: An editable drop-down list a) during editing, and b) after it has been set.
Note that these options can only be edited with the mouse on Linux, it is only currently possible
to edit these options via the mouse on Windows platforms.
RSoft CAD 50
To edit one of these fields, click on the drop-down list and note that the current value is
highlighted. Simply type the desired expression in the box as you would with any other text
option. Once set, the option will appear as shown in Fig. 3-8a. The current value is shown in
square brackets along with the expression.
It is recommended to use values that correspond to the internal values of the drop-down list. The
list of built-in values for a particular editable drop-down lists is included in the documentation
for that particular option.
As an example, we illustrate a series of symbol table expressions that change the Width Taper as
a function of Model Dimension (i.e. 2D vs. 3D). First, here are the built-in options for the Width
Taper setting shown in Fig 3-9 are:
Linear TAPER_LINEAR
Quadratic TAPER_QUADRATIC
Exponential TAPER_EXPONENTIAL
User 1 TAPER_USER_1
Here are the expressions that can be used to set the Width Taper as a function of Model
Dimension (i.e. 2D vs. 3D):
Variable Value
Is2D eq(dimension,2)
Width_taper if(Is2D,TAPER_LINEAR,TAPER_QUADRATIC)
The Is2D variable is a ‘Boolean’ symbol which equals 1 when the design is 2D (dimension = 2)
and 0 when the design is 3D (dimension = 3). The Width_taper variable then equals
TAPER_LINEAR in 2D and TAPER_QUADRATIC in 3D. Using this variable to define the Width
Taper as shown in Fig. 3-9 effectively selects Linear for 2D and Quadratic for 3D designs.
RSoft CAD 51
4
Segment Components
CAD components are the basic building blocks from which a design is created. Any number and
combination of different components can be embedded in a background material of a specific
refractive index to create the refractive index of the entire structure.
In this chapter the discussion is intentionally limited to the segment component type. Many of
the concepts in this chapter apply to other component types; see Chapter 5 for a detailed
description of other components and their properties can be found in the next chapter.
A complex design can be achieved by simply adding a combination of components with varying
parameters to a design file. Sometimes there is more than one way to create a specific index
distribution. In theory, it does not matter how the index distribution was created; however a
particular approach might be easier to implement and lend itself to a simpler simulation later on.
RSoft CAD 52
In 2D (XZ), a segment has a transverse width and the X position, width, and refractive index
can be varied as a function of a normalized coordinate between the two vertices using tapers
and the index structure of the segment cross-section can be set via profiles. See Section 4.E
for details.
• 3D Layouts:
In 3D, a segment has a transverse width and height and the segment X, Y, and Z position,
width, height, index, and psi (twist) can be varied as a function of a normalized coordinate
between the two vertices using tapers (Section 4.E). The index structure of the segment
cross-section is set by the 3D Structure Type (Section 4.D) and profiles (Section 4.E) to
achieve fiber, multilayer, custom, etc. segments.
RSoft CAD 53
4.A.3. Setting Segment Properties
Figure 4-1: The Segment Properties dialog where individual component properties can be set.
By default, segment properties are set either by the user-specified data in the Startup/Global
Settings window or program defaults. The CAD is, however, an object oriented design
environment and allows the user to individually change these properties as needed.
To access any component’s properties dialog right click on the component in the layout window
(except in Zoom or Pan Mode). The rest of this chapter will contain a detailed description of the
properties shown in Fig. 4-1. Multiple components can be edited at once as described in Section
6.L.
RSoft CAD 54
color, see Section
8.A.6.
Black 0
Dark Blue 1
Dark Green 2
Dark Cyan 3
Dark Red 4
Dark Magenta 5
Brown 6
Light Gray 7
Dark Gray 8
Light Blue 9
Light Green 10
Light Cyan 11
Light Red 12
Light Magenta 13
Yellow 14
White 15
4.B. Vertices
A vertex is a component property that defines the position, width, height, and refractive index of
a component. Segments have two vertices: the properties of the starting vertex are set in the
lower left portion of the dialog; the ending vertex in the lower right portion as seen in Fig. 4-1.
Segment properties can tapered, or changed, between the vertices. See Section 4.E for details.
RSoft CAD 55
Figure 4-2: An example of the three reference types possible.
The Reference Type, which sets the method to be used, is set for each coordinate by a dropdown
menu:
• If the Reference Type is None, the coordinate is specified absolutely by entering its value in
the X, Y, or Z coordinate field. This is the simplest method.
• If the Reference Type is Offset, the coordinate value is determined in a relative manner by
adding the offset value, which is specified in the Offset Value field, to the reference
coordinate. The reference coordinate is specified in the Relative To fields. This is the most
commonly used method. Typically these coordinates are defined within the global design
coordinates of the design file, see Section 6.M for details about using the local coordinate
system of the vertex.
• If the Reference Type is Angle, the coordinate value is determined such that a line
connecting the vertex with the reference vertex specified in the Relative To fields makes a
specific angle with respect to the Z axis. The angle is measured clockwise from the Z axis
and is specified in the Angle Value field in units of degrees.
When specifying a reference vertex via Relative To, give a component number and whether the
vertex is the starting vertex or the ending vertex. For components with only one vertex use the
starting vertex. Circuit References can have additional vertices, see Section 6.F.7.
When a component is added to a design file, these settings are filled in appropriately based on
the beginning and ending mouse positions. By editing these fields, the user can explicitly control
the positioning of components with great flexibility. As an example, consider the portion of a
component properties dialog shown in Fig. 4-2 where the X coordinate is set directly, the Y
coordinate is defined via an Offset reference, and the Z coordinate is defined via an Angle
reference.
RSoft CAD 56
Materials are defined in the Material Editor and can be based on nk data files, etc. To use a
Material, select a material already in the project, or add a material by selecting New Material
under the Material setting for the component. These materials can also include dispersion,
non-linearity, anisotropy, and electro-optic, thermo-optic, and stress-optic effects. If a
Default Material has been defined in the Global Settings, all components will use that
material if they have the default material settings (Locally Defined, delta, alpha).
See Chapter 8 for more details about materials.
• Via an Index Difference:
Components are embedded in a background material and the real index definition is defined
as:
n(r ) = n0 + nf ( x, y, z )
where n0 is the Background Index and Δn is the local Index Difference. The function f(x,y,z)
is a profile function (Section 4.E). The imaginary index of the vertex can be set via the Index
(imag part) option which defaults to the variable alpha (0 by default).
Several notes:
• The Background Index and the default value for the Index Difference (the variable
delta) is set in the Global Settings window.
• By default, the index of the starting and ending vertices are the same. If different, the
segment’s index will be tapered as described in Section 4.E.
• This definition varies slightly for 3D segments based on the 3D Structure Type. See
Section 4.D for details on a specific 3D structure type.
• The real refractive index can be specified in absolute units. This mode can be enabled in
the CAD Preferences window. When this option is changed in an existing file, the CAD
will attempt to convert all existing components to the new mode. It is important to realize
that internally the CAD uses the index difference method and so it is the preferred
method.
RSoft CAD 57
4.C. Basic 2D Segments
Basic 2D segments are very simple to define in the CAD: They consist of only a Component
Width, Index Difference, and a starting and ending vertex. By default, the cross section of the
component is assumed to be step-index; however, this can be changed via a profile function as
discussed in Section 4.E. Furthermore, a material can be assigned to a simple 2D component as
described in Chapter 8.
RSoft CAD 58
4.D.1. Fiber
This structure type corresponds to a circular or elliptical core embedded in a uniform background
material.
4.D.2. Channel
This structure type corresponds to a rectangular core embedded in a uniform background
material.
RSoft CAD 59
Figure 4-5: Cross-section of the built-in 3D channel structure.
Additional Settings
A channel can have a sloped sidewall via the Sidewall Angle option. See Section 6.D.2 for
details.
4.D.3. Diffused
This structure type corresponds to a diffused structure in a substrate material. As shown in
Fig. 4-6, the "background" in this case consists of a semi-infinite region referred to as the
RSoft CAD 60
substrate which is defined for y<0, and another semi-infinite region referred to as the cover,
which is defined for y>0.
The position of the component is controlled by specifying the coordinates of the starting and
ending vertices. By default, the structure is positioned at y=0.
n( x, y ) = n0 + ng ( x) f ( y )
where
1 w w
g ( x) = erf 2 + x hx + erf 2 − x hx
2
Here, n0 is the substrate or background index, Δn is the maximum index change produced by
diffusion from an infinitely extended source, w is the width of the source in the horizontal
direction, and hx and hy are the diffusion lengths in the horizontal and vertical direction
respectively (hx = hy by default).
The vertical profile f(y) is determined by the variable diffusion_shape:
• diffusion_shape = SHAPE_GAUSSIAN [default]
f ( y ) = exp − y 2 hy2
• diffusion_shape = SHAPE_EXPONENTIAL
f ( y ) = exp y hy
RSoft CAD 61
• diffusion_shape = SHAPE_ERFC
f ( y ) = erfc y hy
The parameter γ is set by the variable diffusion_gamma, which equals 1.0 by default. Since it
represents the non-linear interaction between the concentration and index, it is applied after the
index changes for all components have been accumulated.
The following parameters are relevant for this structure type:
4.D.4. Rib/Ridge
This structure type corresponds to what are commonly referred to as rib or ridge structures as
shown in Fig. 4-7. The "background" in this case consists first of a semi-infinite region referred
to as the substrate, which is defined for y<0. On top of the substrate is a thin film of a given
height and index, followed by another semi-infinite region referred to as the cover, which is
defined for y values above the top edge of the film. This background forms a one-dimensional
three-layer slab waveguide in the vertical direction.
The position of the component is controlled by specifying the coordinates of the starting and
ending vertices. In background region, where no structures have been defined, the film layer is
RSoft CAD 62
considered to exist up to a height defined by the Slab Height option in the Global Settings
dialog.
Slab Height
RSoft CAD 63
The height of the thin film material defining the vertical slab waveguide which forms the
background. This option is set in the Global Settings dialog.
4.D.5. Multilayer
This structure type describes a multilayer structure and can be used to define simple rib
structures as well as more complicated layered structures.
Figure 4-8: Cross-section of the built-in 3D multilayer structure. Each layer can have a
unique height and index value.
The position of the component is controlled by specifying the coordinates of the starting and
ending vertices. A multilayer structure is defined using the following concepts:
• Substrate
The ‘background’ in this case consists first of a semi-infinite region referred to as the
substrate, which is defined for y<0.
• Layers
On top of the substrate are one or more layers, or thin films. Each layer is defined by its
height and complex-valued refractive index via a Layer Table, which is discussed in the next
section. Different components can be assigned different Layer Tables, resulting in a complex
arbitrary structure.
• Cover
The layer structure is followed by another semi-infinite region referred to as the cover, which
is defined for y greater than the top edge of the last layer.
RSoft CAD 64
In background region where no structures have been defined the layer structure is considered to
exist up to a height defined by the Slab Height option in the Global Settings dialog.
Layer Table
Sets the layer table to be used. See description below.
Slab Height
The layer structure (defined by Layer Table 0) is considered to exist up to this height in the
background where no components are present. This option is useful since the slab structure is
usually similar to the core structure, and so only one layer table need be used to define both the
slab and core structure. This option is set in the Global Settings window.
RSoft CAD 65
Figure 4-9: The layer table editor dialog, which is used for defining the layer structure for a
multilayer component.
The upper portion of the Layer Table Editor selects the layer table to be edited. Layer table 0
defines the background layer structure, or regions where there are no components, as well as the
default layer structure within a component unless changed in the component properties dialog.
There are also contains buttons for creating a new layer table, deleting a layer table, and
duplicating an existing layer table. The right portion of this dialog controls the information for
the selected layer table and functions similarly to the symbol table editor described in
Section 3.C. The lower portion of the dialog allows the user to define the properties of the semi-
infinite substrate and cover, and are the same controls as those used in the Global Settings dialog.
Note that when defining a layer table other than the background one, or layer table 0, the user
may specify that the index information for a given layer is to be "transparent" to the background.
This is done by entering the keyword transparent in the corresponding field for the real or
imaginary part of the index. To use this feature, the given layer table must be able to merge with
the background; that is, there must be a one-to-one correspondence between the number of layers
and the layer heights. For example, this allows a component to exist only in a certain layer or
group of layers, as well as allowing for vertically coupled components.
RSoft CAD 66
Creating Complicated Multilayer Structures
Multilayer components can be overlapped to achieve complicated multilayer structures. When
done, it is recommended that the user use as few layer tables as possible. Additionally, the Slab
Height and Component Height options described above should be used so that layer tables can
be ‘reused.’
Figure 4-10: Cross-section of two versions of the built-in polygon structure: a) a regular
polygon with 6 sides (hexagon), and b) a user-defined polygon. Any number of sides or a
custom data file can be used.
RSoft CAD 67
Component Width and Component Height
The size of the bounding circle in the horizontal (X) and vertical (Y) directions respectively.
When these parameters are equal, a regular polygon will be created.
Note that these options set the size of the bounding circle around the polygon. To instead specify
the length of a side of the polygon, specify the Component Width and Component Height using
the expression 2*(sqrt(S^2/(2*(1-cos(360/Num))))) where S is the desired side length and
Num is the number of sides in the polygon.
Additional Settings
A polygon structure can have a user-specified number of sides or use a data file to define the
cross-section shape of the component. These settings can be changed by clicking the Poly Info…
button in the Segment Properties dialog which opens the Polygon Structure Info dialog.
Number of Sides
Sets the number of sides for a regular polygon structure. As shown in Fig. 4-10, the polygon is
inscribed inside a circle defined by the Component Width and Component Height. When a file is
specified, it takes precedence over the number of sides.
Polygon File
Sets the data file that contains the data points for the polygon. The data should be in the polygon
format discussed in Section B.E and is interpreted drawn such that a unit circle will be drawn on
the bounding circle shown in Fig. 4-10. If the data in the file should not be scaled, set the
Component Width and Component Height to 2. The polygon data must define a closed surface:
the first and last point in the data file must be the same.
It is possible to use a variable to define a polygon file: set the polygon file option to
$<variable> where <variable> is a variable created in the Symbol Table set equal to the name
of the desired polygon file.
RSoft CAD 68
Date Mode
Sets the load method for the polygon data. A Dynamic Load will load the file from disk every
time; a Static Load will embed the polygon data in the .ind file and not reference the file.
RSoft CAD 69
Figure 4-12: 2D Illustration of segment types: a)z-Axis b) Segment-Axis/Extended.
The type of segment is controlled by the Seg Orientation option in the segment properties
dialog.
RSoft CAD 70
• Extended segments can be rotated using the Reference Phi, Reference Theta, and Reference
Psi options in the Additional Segment Properties dialog described in Section 6.K.
Though pictured in the CAD with a circular cross-section, these extended segments can have any
cross-section (3D Structure Type).
• Straight
This mode produces a straight segment.
• Half-taper
This mode produces a segment with a tapered width and height. The ending width/height is
set equal to half the starting width/height; this can be changed by right-clicking on the
segment and changing the relevant properties.
• Full-taper
This mode produces a segment with a full tapered width and height where the ending
width/height is set to 0. This can be used to make cones, triangles, etc.
• Arc
This mode produces 90 degree arc segment. The radius and angular extent of the arc can be
set in the Arc Data dialog which can be opened by clicking Arc Data… in the Segment
Properties dialog.
• Toroid
This mode produces a toroid segment. The radius can be set in the Arc Data dialog which can
be opened by clicking Arc Data… in the Segment Properties dialog. The Arc Reference
setting in that dialog is set to Center so that the position of the starting vertex controls the
RSoft CAD 71
center of the toroid. Depending on which plane the toroid is drawn, the reference angles
(Section 6.K.2) will be set to achieve the desired orientation. These can be changed to any
value to orient the toroid along any angle.
• Helix
This mode produces a helix segment. The radius can be set in the Arc Data dialog which can
be opened by clicking Arc Data… in the Segment Properties dialog. The Arc Reference
setting in that dialog is set to Center so that the position of the starting vertex controls the
center of the helix. Depending on which plane the toroid is drawn, the reference angles
(Section 6.K.2) will be set to achieve the desired orientation. These can be changed to any
value to orient the toroid along any angle. The default helix has 3 turns, this is controls by the
Start Angle and can be changed by editing the Arc Initial Angle and Arc Final Angle from its
default values of 0 and 3*360.
RSoft CAD 72
Figure 4-13: Examples of common extended segments: a) helix segment with fiber structure
type, toroid segment with fiber structure type, c) straight segment with polygon cross-section
(hexagon) with width/height taper, d) straight segment polygon cross-section (data-file) with
‘twist’ taper.
RSoft CAD 73
5
Chapter 4 described the segment component type. This chapter describes other component types.
5.B. Lenses
Lenses are segments that are defined by two radii, a center thickness, and a width. Note that
while lenses can be to create circles, cylinders, spheres, and rings, the circle component is easier
for that purpose.
RSoft CAD 74
Figure 5-1: A schematic of a lens structure. Two radii, R1 and R2, as well as a center
thickness and lens width are shown. In 3D, this structure can be cylinder-like or sphere-like.
Lenses can be added when the Lens Mode button in the left toolbar of the CAD has been
selected.
Vertex Settings
The left half of the lens properties dialog is identical to the vertex portion of the segment
properties dialog (see Section 4.B). The vertex defines the center of the lens as illustrated in
Fig. 5-1 as well as the lens component's optical properties. The diameter of the lens is set by the
smaller of the Component Width or twice the smallest radius.
RSoft CAD 75
Lens-specific Settings
The right half of the properties dialog defines lens-specific parameters:
Center Thickness
The thickness of the uniform central region, if any. This parameter defaults to 0.
Phi
This controls the phi angle of the lens measured from the Z axis. The default values are 0.
Typically the Phi angle is set locally, see Section 6.M for details about inheriting this setting
from a referenced component.
Lens Shape
This field controls the shape of the lens in 3D. See the next section for more details about its use.
Notes for 3D
In 3D, a lens can have either a cylindrical like-shape, or a sphere-like shape. The vertical extent
of the lens along the Y axis is controlled by the Component Height field.
Figure 5-3: Lenses in 3D, a) Spherical version of lens shown in Fig. 5-1, b) Cylindrical
version of lens shown in Fig. 5-1.
RSoft CAD 76
5.C. Circles
Circles are components that are defined by one radius, and can be used to create circles in 2D
and cylinders and spheres in 3D.
Circles can be added when the Circle Mode button in the left toolbar of the CAD has been
selected.
Vertex Settings
The left half of the circle properties dialog is identical to the vertex portion of the segment
properties dialog (see Section 4.B). The vertex defines the center of the circle as illustrated in
Fig. 5-4 as well as the circle component's optical properties.
RSoft CAD 77
Circle-specific Settings
The right half of the properties dialog defines circle-specific parameters:
Component Diameter
The diameter of the circle.
Component Height
The height of the circle when 3D Shape is set to Cylinder.
3D Shape
This field controls the shape of the lens in 3D. See the next section for more details about its use.
This cylinder is along the Y axis; a cylinder along the Z axis can be made via the 3D fiber
structure type.
Rings
One way to make a ring in 2D or 3D is to overlapping two circles/cylinders. The inner segment
should have a Index Difference of 0 (or some other desired index value) and a higher Priority
than the outer segment. See Section 6.C for more details about overlapping segments. These
types of objects can also be made with seg-axis or extended segments (see Section 4.F).
RSoft CAD 78
5.D. Polygons
Polygons are segments which are defined via a series of arbitrary vertex points in the XZ plane.
Figure 5-7: Geometry of a polygon component defined by a series of arbitrary vertex points
in the XZ plane. For 3D structures, the structure is simply extruded in the Y direction so that
it has a height given by the Component Height option.
Polygons can be added when the Polygon Mode button in the left toolbar of the CAD has been
selected.
RSoft CAD 79
Vertex Settings
The left half of the Polygon Properties dialog is identical to the vertex portion of the segment
properties dialog (see Section 4.B). The vertex defines the origin of the polygon relative to the
design file as well as the polygon component's optical properties.
Polygon-specific Settings
The right half of the dialog defines the following polygon specific properties:
Angle
The angular rotation about the origin (defined by the vertex) to be applied to the polygon data.
The default origin and scale factors are chosen so that the polygon coordinates are interpreted as
absolute coordinates. However, if the polygon data represents a general shape to be used
repeatedly, the scale, angle, and vertex information can be used to size, rotate, and position the
component as required, without the user having to generate a different data file for each polygon
component to be added. Typically the Angle is set locally, see Section 6.M for details about
inheriting this setting from a referenced component.
Data Format
The polygon coordinate data must be imported from an ASCII data file containing two columns
defining the X and Z coordinates of each point:
X(0) Z(0)
… …
X(i-1) Z(i-1)
X(i) Z(i)
X(0) Z(0)
The polygon data must define a closed surface: the first and last point in the data file must be the
same. Also, after selecting the file, the coordinate information is stored locally in the *.ind file.
RSoft CAD 80
Notes for 3D
For 3D structures, the polygon is simply extruded or extended with a constant thickness along Y.
This thickness is given by the Component Height field. Polygons can have a 3D Structure Type
as well.
To add a registration mark to the circuit, select Options/Insert/Mark form the CAD menu. This
will open the properties dialog for the new mark.
Vertex Settings
The left half of the mark properties dialog is identical to the vertex portion of the segment
properties dialog (see Section 4.B). The Width/Length and Height fields set the width and height
of the mark. Typically these settings are set locally, see Section 6.M for details about inheriting
this setting from a referenced component.
Mark-specific Settings
The right half of the mark properties dialog specifies mark-specific information:
Mark Type
This field specifies the type of mark to be used.
RSoft CAD 81
Line Thickness
This field specifies the line thickness of the mark as illustrated in Fig, 5-8.
RSoft CAD 82
6
This chapter covers advanced RSoft CAD topics. It assumes basic familiarity with the RSoft user
interface. If any concept is not clear, please consult the previous chapters.
6.A. Profiles
A component’s profile function provides a crucial part of the refractive index of that component:
n(r ) = n0 + nf ( x, y, z )
where n0 is the Background Index and Δn is the local Index Difference, and f(x,y,z) is a profile
function. The profile function is set by the Index Profile Type option either globally in the
Global Settings window or locally via a component’s properties window. By default the profile
function is generally step index. There are several built-in profile or users can create a user-
defined profile.
RSoft CAD 83
The default profile is set by the global default in the Global Settings window and is based on
the Model Dimension and 3D Structure Type. See table below for the default profile for each
structure type.
• Inactive
An inactive component does not contribute to the refractive index distribution of the design
file and is useful for defining optical pathways for launch fields and pathway monitors.
• Step Index
A step index profile equals 1 inside the structure and 0 outside. This is the most common
profile.
• Gaussian
A Gaussian profile function is defined as:
x2
−
n ( x ) = n0 + ne a2
w w
1 2 + x 2 − x
n( x) = n0 + n erf + erf
2 h h
where h represents the diffusion depth and is defined by setting the height variable in the
symbol table, or via the Component Height. For additional information and options, refer to
the discussion of 3D Structure Type of Diffused in Section 4.D.
• New Profile…or User #
These choices allow the user to specify the functional form of the index profile arbitrarily.
This feature is further described in Section 6.A.3.
RSoft CAD 84
Diffused Yes No No Default No
Rib/Ridge Yes Default No No Yes
Multilayer Yes Default No No Yes
Polygon Yes Default No No No
Notes:
• Using a Diffused profile type for a 2D Slab results in the diffused profile described above.
• Using a Diffused profile type for a Fiber or Channel is the same as a Diffused structure type.
• Using a Gaussian profile type for a Fiber or Channel results in a radial Gaussian profile.
• Using a user-defined profile for a Rib/Ridge or Multilayer results in a Height Profile (Section
6.A.2).
Coordinate Normalization
In the following user profile definitions, the normalized coordinates x', y', and z' are defined as
2x 2y z
x' = , y' = , z'=
w h l
(1)
where x, y, and z are the actual positions along the segment, and w, h, and l are the local width,
height, and length of the segment. Therefore, the normalized coordinates are by default defined
to vary from -1 to 1 for x' and y', and from 0 to 1 for z'.
It is possible to interpret the coordinate and index information in the user-profile absolutely
without applying any coordinate or index normalization using the option described in Section
6.D.5. The data will still be translated to the position of the component.
(2)
RSoft CAD 85
where n(x', y', z') is the desired index profile, n0 is the background index, and Δn is the local
index change. Both the channel and fiber 3D structure types accept this type of profile.
(3)
Both the channel and fiber 3D structure types accept this type of profile. Note that in a 2D
simulation, even though the profile lies in the XZ plane, the function must be entered as a
function of x and y where y represents the z axis and is normalized between 0 and 1.
(4)
This profile type can be used for all 2D structures as well as in the case of a 3D fiber structure
type where it represents a radial profile.
H ( x ') = hf ( x ')
H ( x ', z ') = hf ( x ', z ')
(5)
where h is the local segment height and H() is the actual component height. This profile type is
used by both the rib/ridge and multilayer 3D structure types. This functionality enables the use of
a surface relief data file to define a surface in the RSoft CAD. The coatuf utility described in
Appendix E can be used to add coatings to these surfaces.
RSoft CAD 86
Other Profile Types
It is possible to achieve other profile types, including anisotropic user-profiles (1D/2D/3D) and
user profiles for epsilon (above profiles are for refractive index). Please contact
photonics_support@[Link] for more information.
Figure 6-1: The User Profile Editor where User Profiles are defined.
The profile functions in Eqs. 2-5 can either be defined by either an expression or a data file.
Once a profile has been defined, it can be viewed in the normalized coordinate system by
clicking the Test button.
Expression
Set the Source Type option shown in Fig. 6-1 to Expression to define a profile via a
mathematical expression. When f(x', y', z') is defined via an expression, several options exist
which allow for further customization of the profile.
• See Appendix C for a complete discussion of the format and capabilities of RSoft
expressions.
• Enter all coordinate variables as x, y, and/or z. The program interprets x as x', etc.
• The expression is interpreted based on the coordinates used. For example, a non-radial 2D
profile must have at least one x and y coordinate in the expression; if only x is found the
RSoft CAD 87
CAD will interpret it as a radial function. For cases like this, ‘missing’ coordinates can easily
be included as 0*y, etc such as:
Data File
Set the Source Type option shown in Fig. 6-1 to Data File to define a profile via a data file,
When a data file is used to define the function f(x', y', z'), the variables x', y', and z' are given by
(1) and x, y, and z are defined over the range given in the data file.
It can be useful to remove the normalizations in (1) by setting the component height and width
equal to 2 and set Δn = 1 so that (2) reduces to
n( x ', y ', z ') = n0 + f ( x, y, z )
RSoft CAD 88
(7)
Because it is usually not possible to set n0, the data contained in the file should be altered so that
the values are less than their actual amount by n0. For more information about generating a file
for use as an index profile, please see the example in the next section.
Note that the Min, Max, and X, Y, and Z Points options in the User Profile window are not used
when using a data file to define a profile. The Min/Max values can be used however. The data
file can be dynamically loaded at run time by entering the filename as $name and setting the
variable name to the actual filename of the profile.
Using an Expression
To define this profile via an expression, simply enter the following formula in the appropriate
field of the dialog:
1 - x^2
Note that the variable name x in this expression represents the normalized variable x' which
ranges from -1 to +1 over the width of the segment. The domain of the profile can be changed
via the X Min/Max options shown in Fig 6-1. The range [-1,1] still maps to the width of the
segment, however. Also note that outside the domain of definition the function is set to zero.
RSoft CAD 89
0.36
0.00
During a simulation, the CAD will interpolate between the points in the data file if necessary.
This example is illustrated in the example file
<rsoft_dir>\examples\BeamPROP\[Link]. More information about the file format for
user profile data files can be found in Appendix B.
6.B. Tapers
A taper function allows a segment’s width, height, index, and position to be varied or tapered
along the segment. The form of a taper function depends on the Segment Type (Section 4.F):
• z-Axis/Seg-Axis Segments: A taper function has the form
a ( z ) = a0 + ( a1 − a0 ) f ( z ' )
(8)
z − z0
z' =
z1 − z 0
(9)
where a(z) represents the segment property to be tapered, a0 and a1 are the parameter values
at the starting and ending vertex, f( z') is the taper function, and z' is a normalized coordinate
along z that varies from 0 to 1 along the Z extent of the segment. Z-position tapers are not
possible for these segment types; use an extended segment.
As an example, a width taper would be defined as:
w ( z ) = w0 + ( w1 − w0 ) f ( z ' )
(10)
where w(z) represents the segment width, w0 and w1 are the width at the starting and ending
vertex, and f( z') is the taper function.
• Extended Segments: A taper function have a more general form of the previous definition:
a ( z ) = a0 + ( a1 − a0 ) f ( t )
(11)
where a(z) represents the segment property to be tapered, a0 and a1 are the parameter values
at the starting and ending vertex, f( t) is the taper function, and t is an arbitrary parametric
coordinate that varies from 0 to 1. By using X, Y, and Z tapers, it is possible to define an
RSoft CAD 90
arbitrary space curve. Note that while the definition of the taper in Eq. (11) are a function of
t, any user-defined tapers should be entered into the GUI as a function of z.
Fig 6-2: The portion of the Segment Properties dialog where segment tapers are set. Tapers
are also used elsewhere, including for Extended Segment Properties and Crystal Axes.
The Index Taper, Width Taper, and Height Taper are controlled by editable drop-down lists
which allow then to not only be set via the drop-down, but also by a Symbol Table expression.
See Section 3.J for details about how to use this feature. The built-in values for these taper types
are:
Linear TAPER_LINEAR
Quadratic TAPER_QUADRATIC
Exponential TAPER_EXPONENTIAL
User 1 TAPER_USER_1
f ( z' ) = 0
RSoft CAD 91
• Linear
f ( z' ) = z'
• Quadratic
f ( z' ) = z'2
• Exponential
e Bz ' − 1
f ( z ') =
eB − 1
where B is defined as
B = sign( p0 − p1 )
where p0 and p1are the starting and ending values of the tapered parameter respectively.
• New Taper… and User #
These choices allow the user to specify the form of the taper function arbitrarily and are
described in Section 6.B.4.
• Arc (XZ)
This choice indicates that the segment path follows a curved path in the XZ plane and is
discussed in Section 6.B.3.
RSoft CAD 92
The Arc Radius, Arc Initial Angle, and Arc Final Angle of the circular arc can be arbitrarily
set. The program automatically calculates the ending vertex of the segment based on these
parameters and the starting vertex.
• Radius
The Arc Radius of the circular arc can be set and the program fits the arc to lie through the
segment’s starting and ending vertices.
• Initial Angle
The Arc Initial Angle of the circular arc can be set and the program fits the arc to lie through
the segment’s starting and ending vertices.
• Final Angle
The Arc Final Angle of the circular arc can be set and the program fits the arc to lie through
the segment’s starting and ending vertices.
• S-Bend
The program fits together two circular arcs to produce an s-bend through the segment’s
starting and ending vertices.
• Cosine S-Bend
The program uses a cosine taper function for the segment:
f ( z ') =
1
2
(1 − cos ( z ') )
• Raised Sine S-Bend
sin(2 z ')
f ( z ') = z '−
2
To recreate these tapers with a user-defined taper, the arguments for the trigonometric functions
in the above equations need to be rewritten in terms of degrees.
RSoft CAD 93
taper has been defined, it can be assigned to a particular segment via the pull down menus in the
segment properties dialog.
Figure 6-4: The User Taper Editor where User Tapers are defined.
The taper function found in (8) can either be defined by either an expression or a data file.
Expression
To define a taper via a mathematical expression, set the Source Type option shown in Fig. 6-4 to
Expression. When f( z') is defined as an expression, several options exist which allow for further
customization of the taper.
• For a complete discussion of the format and capabilities of RSoft expressions, refer to
Appendix C.
• Enter all coordinate variables as x, y, and/or z. The program interprets x as x'.
• The number of points used to evaluate the expression can be set via the Z' Points options.
This can be useful to resolve rapidly changing functions or periodic functions.
• By default, the variable z' is defined only along the length of the segment. From (9), it is
therefore normalized so that it varies between 0 and 1.
In some cases, it is useful to define the taper outside of this domain. This can be set by
changing the Min and/or Max values for Z'. These settings are in the normalized coordinate
system defined in (1).
• Finally, it is recommended that the function f(z') be normalized to vary between 0 and 1 with
z' between 0 and 1. This additional restriction will ensure that values for the starting and
ending segment parameters retrain their original meaning. While not required, this can
simplify the definition of a taper.
RSoft CAD 94
Data File
To define a taper via a data file, set the Source Type option shown in Fig. 6-4 to Data File.
When a data file is used to define the function f(z'), the variable z' is given by (9), and is defined
over the range given in the data file. For more information on the use of a data file, see the
example in the next section. Also, the data file can be dynamically loaded at run time by entering
the filename as $name and setting the variable name to the actual filename of the profile.
Grating
This taper type is used to quickly define grating structures for the simulation tool GratingMOD.
Its use is discussed in detail in the GratingMOD manual.
Using an Expression
To define this taper via an expression, simply enter the following formula in the appropriate field
of the dialog:
1 - z^2
Note that during a simulation, the CAD will interpolate between grid points if necessary.
RSoft CAD 95
6.C. Priority (When Components Overlap)
The creation of complicated structures in the CAD sometimes involves overlapping several
components.
It is crucial to understand how the CAD treats overlapping components by default and how to
override this behavior when necessary.
By default, when one or more components overlap, the program merges the components and uses
the index of the component with the higher absolute index difference at each grid point. Several
options exist to override this default behavior. They are:
• Combine Mode - This option indicates the method in which overlapping components are
evaluated.
• Merge Priority - This option sets the relative importance between components when a
Combine Mode of Merge is used.
Both of these settings can be made in a component’s properties window.
6.C.2. Priority
Component priority is used when Combine Mode is set to Merge. The priority scheme used to
determine the index at a point where more than one component is defined is:
• If the segments have the same Merge Priority setting, the segment with the higher absolute
index relative to the background is used.
RSoft CAD 96
• If the segments have a different Merge Priority setting, the segment with the higher priority it
used.
By default, every component has a priority of 0, and so the first rule is used. However, this can
be overridden by changing the priority of one the components that overlap. The actual value of
the Merge Priority itself does not matter, only the relative priority of a component to other
components in a design.
This option is only available for 2D Step-Index and User-Defined profiles, and 3D Fiber,
Channel, or Multilayer geometries; if it is needed for other circumstances, please contact RSoft.
Figure 6-5: The Global Index Generation Options window which contains several options to
perturb the index profile to achieve special effects.
RSoft CAD 97
6.D.1. Simulating Curved Segments to Large Angles
This feature is primarily used in the simulation tool BeamPROP, and uses a conformal index
mapping technique to transform a curved segment geometry into a straight segment geometry. It
can also be used to find bending modes in FemSIM. The Global Index Generation Options
window sets this feature globally for the entire simulation domain. This feature can also be
enabled locally for a segment to handle multiple bends or a series of bends and straight segments
via the analogous settings in the Advanced Component Properties dialog which can be opened
via the More… button in the Component Properties dialog. The method used is based on:
R. Baets and P. E. Lagasse, “Loss calculation and design of arbitrarily curved integrated-optic
waveguides”, J. Opt. Soc. Am., 73 (1983)
Motivation
Direct simulation of curved segments to large angles is difficult, even with the Padé-based wide-
angle capability available in the simulation tool BeamPROP. This is due to the fact that there are
several factors in addition to the obvious paraxiality limitations that must be considered. These
include the need for finer grid and step sizes as well as a large computational domain, both of
which can increase the computation time significantly. There is, however, an alternate approach
which is appropriate for modeling of a single bend or a series of bends (as in an s-bend for
example). This technique makes use of a coordinate transformation to map a curved segment,
onto a straight segment.
Implementation
The CAD implements the above-mentioned technique, which is accessed via the Simulated Bend
fields in the special effects dialog for the case of a single bend; multiple bends are discussed
below. When the Simulated Bend input field is set to Yes, the entire problem space is
transformed to effectively follow a circular arc, with a radius defined by the value in the numeric
input field labeled Simulated Bend Radius. This is done by transforming the refractive index
profile through multiplication by (1+x/R). This method has been demonstrated to be accurate
when w << R, where w is the width of the segment and R is the radius of curvature.
The Bend Origin controls how the radius is measured. The center of the bend is located at x = -R,
and so if the outer edge of a waveguide is to be located at a radius or R, that edge should be
positioned at x = 0 in the CAD. If the waveguide has a width of w and is centered at x = 0, then
setting Bend Origin to w/2 will effectively position the outer edge of the waveguide at R. In this
mode, the length of the waveguide becomes the arc length.
For diagnostic purposes it can be useful to see the perturbed index profile. This can be done by
setting the variable index_profile_transform to 1.
When using this feature globally via the Global Index Generation Options dialog in a design file
consisting of a single straight segment located at X=0, the Z axis then represents arc length.
When using this feature locally for each segment, as would be done to model an s-bend, one
RSoft CAD 98
would layout two straight segments in series, and assign the first segment a positive radius
indicating a bend curving to the left, while the second segment would be assigned an equal but
negative radius corresponding to curving to the right. If desired, one segment can be offset
laterally from the other to improve alignment of the curved segment modes, which are generally
displaced to the outside of the bend.
Theoretical Background
The two parameters Litho Roughness and Correlation Length are used to describe the random
perturbation produced by the CAD. To better visualize the definitions of these parameters, an
RSoft CAD 99
autocorrelation function will be introduced. These parameters will be defined in the context of
the autocorrelation function, and then related to the perturbation function.
An autocorrelation function is used to describe a stationary random process, and measures the
correlation, or similarity, between a perturbation function h(z) and the same perturbation function
offset a distance u in space. The autocorrelation function R(u) of a function h(z) is defined as:
R (u ) = h ( z )h ( z − u ) dz
−
(11)
This function R(u) has its maximum value at u=0. As the value of u is increased, R(u) decreases.
For large values of u, R(u) approaches zero since there is no longer any correlation between the
function at the two sample points z and z+u.
Two parameters are defined to characterize the statistical variation:
Litho Roughness
This parameter can be defined as
= R(0)
Since it is assumed that h(z) averages to 0 over large distances, the square of the lithographic
roughness is the variance of h(z). The lithographic roughness is also called the rms deviation.
Correlation Length
This is the length u=D at which the correlation function R(u) has decreased to a fraction of its
maximum value - usually to 1/e. It is a measure for the length over which the perturbations are
correlated to each other, and is therefore the scale length of the random perturbation. Within this
length, h(z) is not changing randomly.
In the context of the autocorrelation function, these two parameters hold intuitive meaning and
can easily be visualized. The following autocorrelation function is used as a convenient model
for many cases:
u
−
R (u ) = e 2 D
(12)
(13)
The width and position are given as a function of w0 and x0, the unperturbed width and position,
and associated perturbations Δx(z) and Δw(z). Both the width and position perturbations are
calculated in the same manner. The program constructs the functions Δx(z) and Δw(z) such that
their resulting autocorrelation functions, as defined in (11), are approximated by (12). In this
way, a component with perturbed sidewalls characterized by the Litho Roughness and the
Correlation Length, is created.
This option only affects the geometry used during a simulation and not in the CAD window
display of the circuit. Also, a current limitation of this feature is that similar component in a
structure at a given z will have the same wall perturbation. This restriction can be relaxed in the
future based on user demand.
Additional Comments
This feature can be accessed via the variables litho_sigma and litho_corlen in the symbol
table. The default value of litho_sigma is 0, corresponding to no roughness and the default
value of litho_corlen is undefined. Also, this option only affects the geometry used in the field
propagation. The perturbed geometry is not used in the display of the circuit, nor is it used in any
of the analysis monitors, although it influences their values through the field.
This feature deals with a random perturbation of the index profile; systematic perturbations, due
to finite lithographic resolution for example, are discussed in the previous section. Additionally,
additional types of lithographic roughness can be created quite easily. The above formulation is
nothing more than a position taper and width taper with a built-in pseudo random function. This
effect can be recreated with any functions of the users choosing as described in Section 6.B, thus
allowing the user additional control over the type of roughness produced.
6.E.1. Export
The export options are found under the File/Export menu item.
Selecting GDS export will open the Export GDS dialog which sets the output File Name, the Cut
Direction and Cut Position, and Clipping options. The default clip position corresponds to the
simulation domain. Selecting DXF will save a .dxf mask file of the XZ structure with the same
name as the .ind file. This can also be done via the command line utilities described in Section
E.K.
See Section 6.E.3 for details about output to a specific layer and other important notes.
6.E.2. Import
There are three methods to import geometry:
• Convert a GDS-II, DXF, or CIF file into an RSoft .ind design file:
Details for the rest of the CAD preferences can be found in Section 6.J.
Import/Export Resolution
Sets the resolution at which CAD objects are “fractured”, or converted to polygons in the target
CAD file. This resolution is defined as the maximum distance between any chord of the fractured
object and the true curve. This option is relevant for both import and export. This setting is used
when segment-axis segments are used in a simulation and also controls the “fracturing” of
curved surfaces. It affects both the CAD display and simulation results. See Section 4.F for
information about Segment Orientation.
The files can be embedded dynamically (remain as two files) or statically (combine two files into
one). Furthermore, this feature allows for child circuits to be periodically repeated in the parent
circuit allowing for dynamically sized arrays of objects.
Circuit Definition:
The circuit definition options are:
The Import TDR option described in the Multi-Physics and TCAD Sentaurus Interface manual
can be used to automatically import TDR files.
Enter the name of the child .tdr file. The file will be dynamically referenced. For 2D TDR
files, the syntax example_bnd.tdr,xy can be used to orient the TDR file in the XY plane.
Embedded
This option selects if the child file (.ind only) is stored within the parent file. You can browse
the list of files currently stored in the parent file in the pulldown list in the Circuit Reference
dialog, or in the Embedded Circuits folder in the tree view on the right of the RSoft CAD. To
save a copy of an embedded file as a separate file, double-click on the circuit reference
component to open the child file and choose File/Save As from the CAD menu.
XZ Rotation Angle
Sets the angle [degrees] of the child circuit in the XZ plane of the parent circuit, and is measured
from the positive Z axis. Typically this angle is set locally, see Section 6.M for details about
inheriting this setting from a referenced component.
Lattice Info…
This control allows for the creation of dynamically sized arrays and is discussed in Section 6.G.
• Note that Merge Priority will only be used if all components in the child circuit have a 0
priority (i.e. the default).
Global Symbols…
This button opens the symbol table in the parent file, and behaves as expected. This is the same
symbol table that is accessed via the Edit Symbols button on the left menu in the CAD interface.
Local Symbols…
This button pulls up a special type of symbol table, in which the variables on the left will
override values in the child, while the expressions on the right are evaluated in the context of the
parent’s symbol table. By default, expressions such as "width = width" are defined, which
indicate that the child’s "width" variable (on the left) is assigned the value of the parent’s
"width" variable (on the right). This allows the variables in the parent circuit to be used to
control variables in the child circuit. Local symbols can be passed to .py child script files, see
Section 6.F.6.
Symbols from the child circuit can be exported to this special symbol table using the Hierarchy
Export options described in Section 6.F.5. This allows easy control of more common aspects of
the child file design to automatically ‘bubble’ up into the parent file. The square bracketed
expression format [value] is used to denote that the value from the child file should be used in
the parent file. The value between the square brackets will be dynamically updated to show the
current value. See Appendix C for more details on symbol table expressions.
Once entered in the Edit Hierarchy Exports dialog, symbols are then exported to a parent file
when the child file is used via hierarchy. Multiple symbols can be entered on separate lines as
shown in the above figure.
The arguments will be automatically set by Local Symbols that start with Arg1 and Arg2, say
symbols Arg1_N and Arg2_file. Note that if using a string argument as a file name input to
the Python API, the file must be present for the script to compile. In these cases it is safer to
c = RSoftCircuit()
//script to create circuit c
return c
For Python, see Appendix H for Python support details and Section 10.A for a detailed
description of these examples.
c = RSoftCircuit()
//script to create circuit c
return c
c2 = rsoft_layout(10,’data_file’)
[Link](‘[Link]’)
• You can create a small wrapper script that imports the layout script, saves the
rsoft_layout() as a circuit and writes a .ind file as described above.
In both cases, the script can also be run from a command line using the command:
rspython <script>
Several optional options can be added which control how the GDS data is imported:
[Link]:<layer>/<data>,pv#,n<cell>
where <layer> is the layer number, <data> is the datatype, the pv# option automatically adds
vertices, and the n option selects a particular named cell. Notes:
• Any option supported by the gds2ind utility can be used, see the Mask Conversion Utilities
section.
• If no layer/data numbers are provided, all layers in the GDS file will be used.
• If no datatype is set, a datatype of 0 is used.
• The pv# option automatically detects ports/vertices and adds vertex objects. See section
below for more details.
• The n option selects a particular named cell from the GDS. If not specified, the entire GDS is
imported.
• (Not shown above) By default, the .gds file is positioned in the XZ plane. The xy option is a
beta option to position it in the XY plane. In this XY mode, the ‘Z’ length can be set by the
• Note that this option only adds vertices, use the Attach Port Monitors option to add port
monitors, if needed. See the Custom PDK Utility manual for more details.
Example:
To dynamically load layer 88/4 from file [Link], enabling automatic vertex detection
for ports on the left and right side, with a maximum width of 1.5 μm, use this setting:
[Link]/4,pv0,pw1.5,pslr
When using dynamic arrays, be sure to use the Local Symbols… option described above to
logically link options from the parent file to the child file.
Lattice Type
Sets the type of lattice including Cubic, Hexagonal (HCP), BCC, FCC, and Diamond lattices.
Bounding Shape
Sets the shape of the bounding box around the lattice. The bounding shape can be Rectangular or
Hexagonal.
Period
Sets the period of the lattice.
Lattice Size
Sets the number of periods along the X, Y, and/or Z directions.
Defect Size
Sets the size of a defect measured in periods) at the center of the lattice along the X, Y, and/or Z
directions.
Scale Factor
Scales the entire lattice in Cartesian coordinates.
Figure 6-12: Edit Pathway Mode, which is used to define optical pathways for analysis. This
example shows a directional coupler with the left pathway selected.
Methods of Import
By default all symbols are imported, see next section for instructions on importing specific
symbols.
• One-Time Import
Symbols can be imported from one design file to another via the Options/Import-Symbols…
menu item. This will copy all of the symbols in the selected *.ind file into the current file.
Symbols with the same name will be overwritten by symbols from the imported file.
will import only the variables width, variable1, variable2, and variable3.
• Data File
This mode accepts the name of a data file and is useful when the list of variables to import is
long. The ‘@’ character should be used before the data file. For example, defining:
import_list = @symbols_to_import.txt
will import the variables listed in the data file symbols_to_import.txt. If this data file
contains the following:
width
variable1
variable2
variable3
will import only the variables width, variable1, variable2, and variable3.
Display Preferences
Draw Interior, Inactive Color, Pathway Multi-Pane View
Component Color Color, Rubberband Color Enables Multi-Pane mode and
Display/color of Color of inactive components, sets initial state: Section 3.E.2
component interior pathways, and rubberbands.
Editing Preferences
Attach on Edit Max Level Undo Zoom Factor (>1.0)
Enables the snap-to feature Number of undo levels Percentage used for
when editing components zooming in or out.
Units Preferences
The Index Input Mode sets the method that users define refractive indices in the CAD. By
default, indices are defined via index differences relative to the background index; however in
some cases it can be useful to define them absolutely. When this option is changed in an existing
file, the CAD will attempt to convert all components to the new mode. Since the CAD uses the
index difference method internally it is usually preferred.
Limit Preferences
These preferences set the limits in the CAD for various items. It is not recommended to increase
these values unless needed.
Import/Export Preferences
The top options are discussed in Section 6.E, the bottom option sets the Group Library Path for
where materials are stored (Section 8.A.1). The choice of PDK used by the pdkinfo() function
described in Section C.F.10 is also chosen here. Note the following:
• Custom PDK parameters can be defined in the <rsoft_dir>\products\rsoftcad\pdkinfo
directory.
• This setting is global for all new .ind files created in the current user’s environment, set the
PDK Info File option in Global Settings pdkinfo_file to the desired PDK file for local
control within a specific .ind file.
Not all of these options are appropriate/enabled for all simulation tools or components. Consult
the appropriate simulation tool manual for information about the use of these options.
Comment
The comment does not affect the simulation in any way and is solely for the user.
Tag
Tags are used in some cases to pass special instructions to simulation engines. See Section 6.K.4
for more details.
Draw Priority
This option sets the drawing priority for display in the CAD interface. By default, all segments
have a priority of 0 which means that component 1 is drawn first, component 2 next, etc., until
all components are drawn. If a component has a higher Draw Priority, it will be given precedence
and be drawn on top of components with lower priority. It is recommended to use as few draw
priority levels around the default of 0 as necessary.
Sidewall Angle
The sidewalls of Channel and Multilayer components can be sloped. This sets the angle in
degrees and is measured from the vertical: A positive angle slopes in at the top, while a negative
angle slopes out. The angle is maintained along the length of the segment even if the geometry is
tapered. By default, the width is assumed to be defined at the bottom of the component, but this
can be changed via the Sidewall Angle Ref. option in the Global Index Generation Options
dialog.
Z = X' ( sin cos sin − sin cos ) − Y ' ( sin sin + sin cos cos ) + Z ' ( cos cos ) + Z ref
where Xref, Yref, and Zref are the Reference X, Reference Y, and Reference Z settings.
X’Y’ Rotation Start, X’Y’ Rotation End, and X’Y’ Rotation Taper
This rotation ‘twists’ the component along its local axis. By default, the ending angle is set equal
to the starting angle. If they are not equal, the ‘twist’ can be tapered along the length of the
component. See Section 6.B for more information on tapers.
( z ) = 0 + (1 − 0 ) f ( z ')
z − z0
z' =
z1 − z 0
where θ(z) represents the crystal axis to be tapered, θ0 and θ 1 are the Start and End values
specified in the Crystal Axes Specification dialog for that crystal axis, f( z') is the taper function,
and z' is a normalized coordinate along Z that varies from 0 to 1 along the Z extent of the
segment. Individual control over all three angles is possible, and setting End to the keyword
default effectively disables tapering and uses a simple rotation as described above. Several
built-in tapers can be used, as well as user-defined tapers. See Section 6.B for more information
about using tapers.
When using an extended segment, the variable crystal_axis_prime can be set to 1 to align the
crystal axis along the segment Z’ axis.
enables the skip_est tag and sets the local grid size to the value of the Dx symbol.
Settings Tags
Tag may also be set in the Edit Default Tags dialog. This method allows tags to be assigned to
segments that are defined by a specific material or when importing geometries from TCAD
Sentaurus. The Edit Default Tags dialog can be opened via the Edit menu item in the RSoft
CAD. The syntax for these tags is:
component <name> = tag1=value tag2=value
region <name> = tag1=value tag2=value
material <name> = tag1=value tag2=value
where the keywords component and region are synonymous and allow tags to be assigned to
particular components in a design and the material tag allows tags to be assigned to
components that are defined by the material specified.
Figure 6-13: The Default Tags dialog where tag assignments can be specified.
Tag Precedence
The order of precedence for tags is, in order of importance:
• Tags set locally for a particular component
• Tags set via the ‘Edit Default Tags’ dialog for a particular component/region
• Tags set via the ‘Edit Default Tags’ dialog for a particular material
• Lenses:
Lens components (Section 5.B) support expanded referencing for the Component Height and
XZ Angle options.
• Circles:
Circle components (Section 5.C) support expanded referencing for the Component Diameter,
Component Height and XZ Angle options.
• Circuit References:
Circuit References (Section 6.F) support expanded referencing for the Component Width,
Component Height, and XZ Rotation Angle options.
Right-clicking on the Component Filter folder gives the option to create a new filter, opening the
Filter Creation dialog.
To define a component filter, give it a Name and Definition. You can use the Component Fields
and Target Value fields to help define the definition. The syntax is field=target, with boolean
AND or OR operators to combine multiple fields. Consider this example definition which returns
all components that have a ‘Si’ material and a Merge Priority of 1:
Material=Si AND priority=1
Here are the supported search fields, along with special rules for matching:
• Group Properties: Edit the group properties of all components in the filter
Some designs call for complicated structures which can be very tedious to manually create. For
this reason, the CAD includes automatic layout utilities for certain common problems. These can
be accessed via the Utility menu item:
• Array Layout Generator
This utility is used to create periodic arrays of segments and will be described in this chapter.
• WDM Router Layout tool
This utility is used to create layouts for simulation and mask creation for arrayed-waveguide-
grating routers (or AWG’s). This utility is described in detail in the AWG Utility manual.
• GratingMOD Grating Layout tool
This utility is used create grating layouts to be used with RSoft’s grating simulation tool
GratingMOD and is described in detail in the GratingMOD manual
The rest of this chapter will describe the usage of the Array Layout utility.
7.A. Motivation
Dynamically-sized arrays can be created using the hierarchy feature discussed in Section 6.F.
The RSoft CAD system is very powerful and allows expressions to define aspects of the
geometry and component references to define logical relationships between components. Once a
properly designed layout is complete, these features make it very easy to vary the structure and
perform design studies. The Array Layout utility allows the user to quickly create structured
Dimensions
This sets the dimensions of the lattice to be created. Possible choices are 1D, 2D (XY), 2D (XZ),
and 3D. Each dimension has different possible lattice types which are described below.
Do not confuse this setting with the dimension of the simulation to be performed. This only
defines the periodicity to use. For example, a PBG slab is periodic in two dimensions, but is
finite in the third and thus requires a 3D simulation.
Lattice Size
The Lattice Size settings correspond to the number of unit cells in the a direction.
Figure 7-2: 2D lattice types a) cubic, b) hexagonal, c) cubic rings, and d) hexagonal rings.
• Cubic
This options creates a 2D cubic lattice, and the Lattice Size settings correspond to the
number of unit cells in the a and b directions.
• Hexagonal
This option creates a 2D hexagonal lattice, and the Lattice Size settings correspond to the
number of unit cells in the a and b directions. The lattice may be rotated using the symbol
PhiPattern to achieve the other typical hexagonal lattice orientation.
• Cubic Rings
Figure 7-3: Some of the available 3D lattice types (clockwise from top right) a) cubic, b)
FCC, c) BCC, d) woodpile, e) diamond logs, and f) diamond.
• Cubic
This option creates a 3D cubic lattice and the Lattice Size settings correspond to the number
of unit cells in the a, b, and c directions.
• FCC
This option creates a 3D FCC (face centered cubic) lattice and the Lattice Size settings
correspond to the number of unit cells in the a, b, and c directions.
• BCC
The *.ind file created has one segment with either a user profile or taper depending on
whether the variation is along X, Y, or Z.
• Square Wave
This option creates a 1D unit cell composed of a square wave such as is shown here:
The *.ind file created has one segment with either a user profile or taper depending on
whether the variable is along X, Y, or Z.
• Triangle Wave
This option creates a 1D unit cell composed of a square wave such as is shown here:
The *.ind file created has one segment with either a user profile or taper depending on
whether the variable is along X, Y, or Z.
Note that all options are not available for all lattice dimensions.
Figure 7-4: Some of the available 2D unit cells: a) square, b) hexagon, c) circle, and d)
ellipse.
• Square
Figure 7-5: Selected 3D unit cells: a) cube, b) hexagonal prism, c) sphere, and d) cylinder.
• Cube
This option creates a 3D unit cell composed of a single cubic object. The segments used in
the *.ind file to create the lattice are simply polygons and can be easily modified to produce
rectangular segments if necessary.
• Hexagonal Prism
Randomness
It can be useful to incorporate perturbed lattice parameters for each point in the lattice to study
non-ideal crystals. All selected parameters will be defined using the ranseq function. A seed
variable is also created to allow the user to control the set of random numbers used. The
perturbation is defined as
<parameter>+sig_<parameter>*ranseq(seed_<parameter>,$id)
where <parameter> is the parameter to be varied. For example, if a random Refractive Index, or
delta, is used, the Index Difference of each object in the array will have an Index Difference
defined as
delta+sig_delta*ranseq(seed_delta,$id)
Parameter Description
Special Effects
These fields allow the user to add additional capability to the design file to use materials.
Output Prefix
The output prefix sets the name of the *.ind file to be created and is required.
Advanced Materials
RSoft’s Material Editor provides a convenient database of complex material models that can be
used in simulations. These materials can be simple dielectrics, but can also incorporate
dispersion, non-linearity, and anisotropy. A built-in material library is provided; users can also
create specific materials as needed. Materials can be shared between different designs and users.
This chapter will discuss how to define these material properties and assign them to specific
objects.
Since the CAD is shared by several simulation tools, all possible material properties will not
have meaning for all simulation tools. It is critical to understand the underlying simulation
mechanisms and if various properties are relevant.
The first section outlines the usage of the Material Editor; the rest of the chapter is devoted to
documenting specific material parameters.
Figure 8-1: The Material Editor dialog. The material tree is located on the left, the toolbar is
on top, and the material property tabs are displayed on the right.
Materials must be in the Project Materials category to be used within the design file.
Once in the Project Materials category, the material can be used within the RSoft CAD interface
in places such as the Material Properties setting in a Component Properties dialog, the Layer
Table editor, or the Global Settings dialog.
Display Axes
Sets the axes used to display the material data. Both the X and Y axes can be set.
Plot Range/Resolution
Sets the minimum and maximum values on the X axis, as well as the grid spacing used to display
the material properties. Separate controls are given for wavelength and frequency.
Measurement Data
Allows a data file to be plotted with the computed material data. This is useful when trying to
match a particular data file. The data file must have the same units as the chosen Display Axes
for a direct comparison. This feature is for comparison purposes only.
Output Prefix
Sets the name of the output file used.
Origin
Displays the origin of the material. Materials in the RSoft Material library include the
wavelength range and/or references if applicable. This information is not used anywhere in the
software, it is strictly for record keeping purposes.
Display Color
Sets the display color of components to which the material is assigned. You can select from one
of the standard colors or define RGB values for a custom color. The options are:
• Default: Uses the default color, see options below.
• A standard Color: Select the desired color form the dropdown list, i.e. Red, Dark Red, etc.
• Custom: Select an RGB value for the color.
• Users can change a material color for specific materials in a project using the material
Display Color option described above. This overrides the global color map file.
• The color of specific components can be directly set by the Display Color option in the
component properties dialog. This overrides any other setting.
• For materials in the Group Library category, any associated files should be located in the
directory defined by the RSOFT_MATLIB_GROUP_PATH environment variable. The special
tag <groupmat> can be used in any expressions to refer to this path. The appropriate
expression would be:
userdata(“<groupmat>\material_property.dat”, free_space_wavelength)
• Each built-in material has notes which can be viewed by clicking the Notes button in the
bottom of the editor. These notes contain important information about the material model.
Users are encouraged to create these notes for user-defined materials as well.
where
P = 0 ( ) E + non-linear terms
and χ(w) can be a frequency dependent linear dispersion term. For the rest of this section, we will
assume that there are no non-linear terms; see Section 8.B.2 for more on non-linear epsilon.
For simulation tools that perform monochromatic simulations only, a parameter scan over
wavelength is required to study dispersive effects.
where B and C are coefficients in the symbol table and free_space_wavelength is the
simulation wavelength, and one example of using a data file could be
userdata(“tungsten_real.dat”, free_space_wavelength)
where the file tungsten_real.dat contains refractive index data in the standard RSoft
format and lambda is the simulation wavelength. See the notes in Section 8.A.7 for more
information on using symbols and data files in materials, and see Appendix C for more
details of this and other functions that can be used in the symbol table and Appendix B for
more details on file formats.
This method is valid for single simulations at one wavelength, and if defined as a function of
wavelength, for parameter scans over wavelength.
• Via Dispersive-Class Materials in the Material Editor
This method uses a dispersion-class material in the Material Editor to define a
comprehensive dispersive relation for a material. This method is valid for single simulations
at one wavelength, scans over wavelength and for FullWAVE simulations where multiple
wavelengths are present in a single simulation such as a pulsed excitation.
Dispersive materials can be defined via this method if epsilon (or index) is defined as a function
of the simulation wavelength as noted in Section 8.B.1. All simulation tools support this material
property.
Input Mode
Sets the way in which the entered data is interpreted. When Epsilon is selected, the user can
input epsilon directly. When Index is selected, the user can input the refractive index, or the
square root of epsilon. This does not automatically convert any entered data between these two
formats.
Import NK Data…
This button selects a data file that contains n/k data and automatically sets the Index/Epsilon
options so that they can read in the data from the data file. Specifically, these options are set to:
userreal(“<data_file>”,free_space_wavelength)
userimag(“<data_file>”,free_space_wavelength)
where <data_file> is the name of the selected file. The data file should have three columns, the
first should be wavelength [μm], the second should be the real index (n), and the third should be
the imaginary index (k). The filename should not contain spaces. Alternatively, the data can
contain real/imaginary epsilon. The data will be interpreted according to the Input Mode. The
data can have the standard RSoft 1D real/imag header or no header. See Appendix A for a
description of supported file formats and Appendix C for more information on the userreal()
and userimag() functions.
Figure 8-3: The portion of the Linear Eps tab in the Material Editor where a simple linear
epsilon is defined.
xx xy xz
D = yx yy yz E
zx zy zz
Dispersive materials can be defined via this method if the tensor elements are defined to be a
function of the wavelength as noted in Section 8.B.1. Not all simulation tools support the use of
anisotropic materials or the use of all tensor elements; consult the relevant simulation tool
manual for more information. Instructions on viewing material profiles for specific tensor
elements can be found in the ‘Notes for Anisotropic Designs section in Section 3.G.1.
Input Mode
Sets the way in which the entered data is interpreted. When Epsilon is selected, the user can
input the epsilon tensor directly. When Index is selected, the user can input the refractive index,
or the square root of epsilon. This square root is done on an element by element basis like nij2 =
εij where i and j are the tensor indices.
D = ( ) + G ( ) E
k
( ) = +
k −ak − bk ( i ) + ck
2
where G(w) is a frequency-dependant gain term (for FullWAVE only) to be discussed later, ε∞ is
the value of epsilon in the limit of infinite frequency, Δεk is the strength of each resonance, ak, bk,
and ck are fitting coefficients, and w is measured in units of radians/μm. The choice of these
parameters sets the type of resonance used.
All simulation tools support the basic use of this material property, and will compute the
dispersive properties at the simulation wavelength. Furthermore, this method provides a true
dispersive environment for FullWAVE simulations with multiple simulation wavelengths (such
as in the case of a pulsed excitation). To use this feature, the Dispersion/Nonlinearity option in
the FullWAVE Simulation Parameters window must be enabled. Also, when using this method
in the context of a FullWAVE CW simulation, note that an optimized form of the dispersion
parameters are used since one wavelength is primarily present. This optimization can be disabled
by setting fdtd_dispersion_opt to 0.
Standard linear dispersion models, such as Lorentz, Drude, and Debye models can be used by
choosing the fitting parameters ak, bk, ck as follows:
ak bk ck
Lorentz 1 free free
Drude 1 free 0
Debye 0 free 1
The free parameters above, plus the coefficient Δεk (delta in the graphical interface), can be used
to match any single dispersion resonance. Multiple resonances can be combined to realize
complicated dispersion relations; to view additional resonances, use the <</>> buttons. The Gain
Term checkbox should not be checked unless the gain feature described later in this section is
used.
N/k data fits are only used for pulsed FullWAVE simulations. All other simulation types are at a
single wavelength and a data fit is not necessary.
The RSoft Material Editor can automatically fit a data file to Lorentzian coefficients. There are
two types of fits:
• Auto-fit for Each Simulation:
Click the AutoFit button in the Linear Epsilon tab of the Material Editor and select the auto-
fit options. The n/k data will be automatically fit before each simulation. The AutoFit Method
selects the type of fit: A Simple fit matches the value and slope of the n/k data at the Free
Space Wavelength; a Lorentzian fit uses a multiple Lorentzian model to the data. Click the
Try Fit button to view the current fit (note that the actual fit will be calculated before each
simulation).
• One-time Fit:
To fit the data, open the Material Editor, create a new material, and click the Dispersive
button on the Linear Eps tab. Click the Fit NK Data… button to open the Fit NK Data
Options dialog. Select the n/k data file and click Try Fit. The fit will be performed, and then a
comparison between the original data and data fit will be displayed. The fit looks good, but if
it wasn’t you can change the fitting parameters and retry the fit. Click Accept Fit to copy the
calculated coefficients into the material.
In both cases, the fit is done with the fitdisp utility, see Appendix E for more details about this
utility.
Note the following:
• The data file should contain complex index (n/k) data vs. wavelength [μm]. This can be from
any source including experiment or many online sources. The data file should have three
columns like:
wavelength1 n1 k1
wavelength2 n2 k2
wavelength3 n3 k3
etc…
Option Description
Max # Lorentzians Sets the maximum number of Lorenzian resonances
These equations represent typical forms of these resonances. Results for similar forms can easily
be found.
• Lorentzian Resonance
Ak k2
( ) = +
k − 2 − 2i k + k2
where Ak is the resonator strength, δk is the damping factor, and wk is the resonant frequency.
• Drude Resonance
p2
( ) = +
−2i c − 2
where Ak is the resonator strength and tk is the Debye relaxation time constant.
• Sellmeier Resonance
Ak 2
( ) = + 2
k − k − i Sk
2
where λk is the resonant wavelength, Ak is the resonator strength, and δSk is the Sellmeier
damping factor.
Sellmeier
Parameter Lorentz Value Drude Value Debye Value
Value
Δεk Akwk2 wp2 Ak Ak(2π/λk)2
ak 1 1 0 1
1 1
G ( ) = k ( )
i 1 + g sat I k
b 2 ibk
0 k k −
k ( w) = 4 2
− ak 2 − ibk + ck
where Δσ0k is related to the peak strength of each resonance, ak, bk, and ck are fitting coefficients,
and w is measured in units of radians/μm These fitting coefficients can be chosen for standard
resonance types in the same exact way as described above for non-gain terms.
It is possible to define a material that has standard dispersion and dispersive gain. In order to
define a resonance as a gain term, check the Gain Term box next to the resonance in the Material
Editor. If this box is not checked, the resonance will be applied to the standard dispersion
relation. Also, multiple gain resonances can be defined to realize a complicated dispersion
relation.
Overview
The Material Editor allows users to create materials with the following definition for non-linear
epsilon:
1
3 ( ) = 3 + k3 ( ) 2
k 1 + csat E
where χ∞3 is the value of the susceptibility in the limit of infinite frequency and χ3(w) are
dispersion terms. Each dispersion term is defined according to the following:
k3
k3 ( ) =
ak ( i ) − bk ( i ) + ck
2
where Δχ3k is the strength of each resonance, ak, bk, and ck are fitting coefficients, and w is
measured in units of radians/μm. The choice of these parameters sets the type of resonance used.
Only BeamPROP and FullWAVE support the use of this material property. Specifically,
BeamPROP supports third-order non-linearity, and computes the susceptibility at the simulation
wavelength. FullWAVE supports both second- and third-order non-linearities and computes the
susceptibility for any wavelengths present in the simulation. To use this feature in FullWAVE,
the Dispersion/Nonlinearity option in the FullWAVE Simulation Parameters window must be
enabled. For both BeamPROP and FullWAVE, the parameter nl_iterations (default = 1) sets
the number of iterations used to compute the non-linear effects.
Chi2
This sets the χ2 susceptibility described above.
Chi3
This sets the χ3 susceptibility described above, and corresponds to the value in the limit of
infinite frequency.
ak bk ck
Lorentz 1 free free
Drude 1 free 0
The free parameters above, plus the coefficient Δχ3k, can be used to match any single resonance.
Multiple resonances can be combined to realize complicated dispersion relations.
This section provides a simple interpretation of units. A detailed approach for FullWAVE can be
found in the appendices of the FullWAVE manual.
norm
2
= 2 μm V E0 V μm
norm = 3 ( μm V ) E02 ( V μm )
3 2 2
where E0 is the true peak field amplitude in the launch. This approach has the advantage that
the fields are of the order of unity, avoiding difficulties in the graphics display. Similar
normalizations can be done with Unit Power, but are not described here.
• Using field units:
The easiest approach is to assume that all field components have units of V/µm. This choice
requires that: 1) while the unit of E is the traditional MKS unit, all units of length must be
assumed to be µm, and 2) the unit of H is the same as the unit of E.
If the field has units of V/µm, then the nonlinear parameters χ2 and χ3 must have units of
µm/V and (µm/V)2 respectively.
This approach also requires a consistent interpretation of the power contained in the launch
field(s) based on the launch Normalization:
Overview
The Material Editor allows users to create materials with the following definition for linear mu:
where χm(w) is a frequency dependent linear dispersion term. For the rest of this section, we will
assume that there are no non-linear terms.
Only FullWAVE supports the use of this material property. To enable its use in a simulation,
select the Use Magnetic Materials option in the Advanced Parameters dialog.
Overview
The Material Editor allows users to create materials with the following definition for non-linear
mu:
B = 0 H + M
M = 0 linear term + m2 H 2 + m3 ( ) H H
2
where χm is the second-order non-linear susceptibility, and χ3m(w) is the saturable dispersive
third-order non-linear susceptibility
Only FullWAVE supports the use of this material property. To enable its use in a simulation,
select the Use Magnetic Materials option in the Advanced Parameters dialog.
Overview
The Material Editor allows users to create materials whose refractive index is perturbed by the
presence of electrodes in the simulation domain. This perturbation is added to the normal
refractive index of the material. For more information on the use of electrodes and the Multi-
Physics Utility, see the Multi-Physics Utility manual.
Overview
The Material Editor allows users to create materials whose refractive index is perturbed by the
presence of heaters in the simulation domain. This perturbation is added to the normal refractive
index of the material. For more information on the use of heaters and the Multi-Physics Utility,
see the Multi-Physics Utility manual.
Figure 8-8: The Thermo-Optic tab in the Material Editor where thermo-optic properties are
defined.
Overview
The Material Editor allows users to create materials whose refractive index is perturbed by the
stress created during the cooling from the fabrication temperature. This perturbation is added to
the normal refractive index of the material.
When a simulation that incorporates stress is initiated, the displacement is calculated using force-
balanced equations as a function of the temperature differential between operating temperature
(ΔT) and fabrication temperature, which is defined in the Multi-Physics Utility, and the stress
properties defined in the material editor. The spatially-dependent strain distribution ε is then
computed from the displacement. The spatially-dependent stress σ(x) is then computed from this
quantity as:
x 1 − − x
1
y = E − 1 − y +T
− − 1
z z
where ε [unitless] is the strain, E is Young’s Modulus, ν [unitless] is Poisson’s Ratio, α [K-1]is
the thermal expansion coefficient, and ΔT [K] is the temperature change. The units of E and the
computed σ(x) values are in inverse units, for example if E is in GPa then σ(x) would be in GPa-
1
. It is important to use the same units for E for all materials in a simulation.
The local index perturbation used in a simulation is computed from the strain ε as:
nx P1 P2 P2 x
ny = P2 P1 P2 y
n P P1
z 2 P2 z
where P1 and P2 [unitness] are defined in Material Editor and ε is the strain. For more
information on the use of the Multi-Physics Utility, see the Multi-Physics Utility manual.
This material property is supported by all simulation tools. Special care should be given when
using stress with simulation tools that require periodic structures since the resulting perturbation
may render the structure unperiodic. The stress distribution can be viewed using the multi-
physics utilities discussed in the Multi-Physics Utility manual.
Figure 8-9: The Stress-Optic tab in the Material Editor where stress-optic properties are
defined.
Young’s Modulus (E), Poisson’s Ratio (nu), and Thermal Exp. (alpha)
Sets E, ν, and α as defined in the previous section. These parameters are used to compute the
spatially-dependant stress/strain distribution. The output values of the stress will be in the same
units as Young’s modulus.
P1, P2, P3
Sets the strain optic coefficients used to compute the index perturbation as described in the
previous section.
Figure 8-10: The Eps Linear tab in the Material Editor for the AlGaAs (ternary) material
system. The complex index is interpolated between those of AlAs and GaAs according to the
“Alloy X” parameter in the Semiconductor Tab, and at the wavelength specified by the
free_space_wavelength symbol.
As stated in the previous section, the X Alloy and Y Alloy composition must also be selected for
most semiconductor systems:
• Ternary Material Systems (X only):
The composition is A(x)B(1-x)C. For example, AlGaAs is AlxGa1-xAs.
• Quarternary Material Systems (X and Y):
The composition is A(x)B(1-x)C(y)D(1-y). For example, GaInAsP is GaxIn1-xAsyP1-y.
Furthermore, the doping concentration in a particular region of the device must be specified for
nearly all electronic simulations; donors for n-type regions and acceptors for p-type regions.
There must be a project material in the problem file for each unique combination of material
system, alloy composition, and doping.
The Semiconductor Tab also allows for the specification of how a material region will be treated
by the active simulation; as a (non-optically active) bulk semiconductor, as an optically active
bulk semiconductor, as a quantum well structure, or as an insulator. Lastly, the Edit Table button
allows access to a local symbol table that permits overriding of any of the parameters in the
LaserMOD Material Library.
Do not use these options if these effects have already been accounted for in the material model
that you are using (i.e. if the material model has come from a TCAD Sentaurus simulation that
• The complex index perturbation due to free carriers can be included by selecting the Enable
Free-Carrier Index Effects option. This effect requires that a doping concentration be
specified via the Donors (cm-3) or (Acceptors cm-3) option (otherwise the free-carrier
concentration is zero).
• The complex index perturbation is calculated using these equations:
dn = fcn_elcoef*(n^fcn_elexp) + fcn_hlcoef*(p^fcn_hlexp)
da = fca_elcoef*(n^fca_elexp) + fca_hlcoef*(p^fca_hlexp)
where n and p are the doping concentrations in cm-3 Note that dn and da are scaled by
(lambda/ fca_lam0)^ fca_lamexp), and are in dimensionless and cm-1 units respectively.
The ‘fca’ coefficients and exponents can be defined in several ways:
• Using Published Data:
There are two sets of published data available taken from Ref 1 and Ref 2 below. Set
fca_method = 1 to use the data from Ref 1 (default), set fca_method = 2 to use the data
from Ref 2. These symbols should be set in the symbol table in the Semiconductor tab.
• Using Custom Data:
To use custom coefficients/exponents, create a simple text file with the desired
parameters and values. Then, set fca_file to the name of the file in the Symbol table in
the Semiconductor tab. Do not set the fca_method symbol, it takes precedence. An
example file could be:
fcn_elcoef = 0.0
fcn_hlcoef = 0.0
fca_elcoef = 0.0
fca_hlcoef = 0.0
fcn_elexp = 1.0
fcn_hlexp = 1.0
fca_elexp = 1.0
fca_hlexp = 1.0
fca_lam0 = 1.0
fca_lamexp = 0.0
Note that this example shows the default value for each parameter. If a parameter does not
appear in the file, its default value will be used.
• Furthermore, the number of free carrier can be impacted by incomplete ionization. This
model is enabled by the Enable Incomplete Ionization option.
Variable Description
dope_file_import Set to 1 to enable the use of custom doping profiles.
dope_file_donor Sets the donor profile.
dope_file_acceptor Sets the acceptor profile.
dope_file_net Sets the net doping profile.
Note that negative values indicate acceptors, while positive values indicate donors. Units are
always cm-3. Also, all profiles should have the same coordinate system as the simulation and
will be applied to the entire domain.
References:
1 Soref, R. et al, IEEE Journal of Quantum Electronics, QE-23 (1987)
Non-Uniform Grids
The RSoft CAD uses an intelligent grid generation algorithm to produce a simulation grid based
on the structure(s) defined in the CAD environment, as well as a variety of grid options
described in detail later in this chapter. The grid generation algorithm automatically calculates a
uniform or non-uniform grid best suited for the defined structure. The grid is composed of
rectangular shaped cells, or elements, of varying sizes, which cover the entire computational
domain, including any PML. Additionally, FemSIM supports a hybrid triangular and rectangular
grid which is described in more detail in the FemSIM manual.
Please note that not all options are available for all simulation programs. BeamPROP and
FemSIM’s capabilities are described in this chapter, FullWAVE’s non-uniform capabilities are
described in the FullWAVE manual.
Figure 9-1: The grid cell definition for a) BeamPROP and b) FemSIM. The dashed red line
represents a material boundary, the solid black lines represent cell boundaries, and the gray
dots represent the grid points. The FemSIM cells are shaded to indicate that the field is
defined over the entire cell.
RSoft’s grid generation algorithm is capable of creating a non-uniform rectangular grid based on
the structure defined in the CAD and other grid options that allow user control over the size and
position of grid cells. This section describes these grid options, which include: interface
alignment, grid size at interfaces, grid grading, and required minimum divisions within a region.
Spatial Domain:
The X, Y, and Z Domain Min and Domain Max options set the simulation domain and are
duplicates of the same options in the main Simulation Parameters dialog. See the BeamPROP
and FemSIM manuals for a description of these options.
Grid Sizes:
The simulation grid can be defined in several ways, choose the method that is best for your
specific application. The simplest method to use a non-uniform grid is to set the Grid Size and
the Enable Nonuniform options. It is possible to over specify the grid size, the final simulation
grid used is the union of all grid settings such that the smallest grid specified at any location is
used.
When using a non-uniform grid, the simulation grid is smoothly varied between regions using
the Grid Grading option described below. If needed, the grid within a particular component or
material can be set directly via the tags described in Section 9.C.
• Grid Size (Bulk)
These options help accurately model field variations at material interfaces which are typically
larger than in bulk regions. Grid Edge Size sets the grid size at the edge of a material
interface in spatial units [μm], whereas Grid Edge Factor sets the edge grid relative to the
‘bulk’ grid. Only one method may be used per spatial coordinate, use the slider control to set
which option is used. Grid Edge Factor is used by default, use the radio buttons to select
Grid Edge Size if needed. Note that Grid Edge Factor should be between 0 and 1.
• Minimum Divisions
This option sets the minimum number of grid cells used between two material interfaces and
has a default value of 1. This option should be set to an integer (1 or greater); it is
recommended to set it equal to the thickness of the region of interest divided by the desired
“average” grid size.
Grid Grading:
The Grid Grading option automatically grades, or varies, the grid size between regions. The
Grading Ratio sets the rate at which adjacent grid sizes vary and defaults to sqrt(2). A
recommended guideline is to set this parameter to a value between 1.1 and 2 depending on the
structure. A value that is too small increases the computation burden and a value that is too large
can create accuracy issues.
Fig 9-3: A sample non-uniform grid that uses grid grading between the small grid in the
structure core and the background regions.
See sections above for details about what each option does, including recommended usage.
Tag Description
grid_size_x These tags correspond to the X, Y, and Z Grid Size options
grid_size_y
which sets the grid size in μm units.
grid_size_z
grid_ppw_x These tags correspond to the X, Y, and Z Grid PPW options
grid_ppw_y
which sets the grid size in points-per-wavelength units.
grid_ppw_z
grid_edge_x These tags correspond to the X, Y, and Z Grid Edge options
grid_edge_y
which sets the grid edge in μm.
grid_edge_z
grid_edge_factor_x These tags correspond to the X, Y, and Z Grid Edge Factor
grid_edge_factor_y
options which sets the grid edge factor.
grid_edge_factor_z
grid_mindiv_x These tags correspond to the X, Y, and Z Grid Minimum
grid_mindiv_y
Divisions options.
grid_mindiv_z
grid_bulk_nonuniform_x These tags correspond to the X, Y, and Z Grid Grading
The RSoft device simulation tools share a comprehensive set of scripting features for layout,
simulation, parameter scanning/optimization, and data manipulation. Layout scripting is done via
a Python API, simulations scripting is done via the user’s operating system (ANY language), and
data manipulation is done via a built-in set of utilities and/or a Python API. Additionally, MOST
can be used to automate tedious scanning and optimization problems.
As an example, consider a standard fiber-grating coupler shown above. This design consists of:
• A series of structure properties, materials, and simulation settings set via symbols such as the
input waveguide width, number of arc segments, grid sizes, etc. (not shown)
• Two static components (straight red waveguide at bottom and tapered yellow waveguide)
that do not need to be scripted, their settings can easily be taken from the symbols in the
control file.
• A launch field and several monitors for measurement purposes that do not need to be
scripted, their properties can again be easily set by the symbols in the control file.
• A series of dynamic components (arc segments shown in red) that need to by dynamically
produced based on the number of rings setting in the control file.
For this example, we define everything except the yellow arc segments in the control file and use
a Circuit Reference block to dynamically call the Python API to produce the arc segments.
See Appendix H for a description of the Python API to generate design files, including supported
Python versions.
While any parameter can be passed as an argument, it is usually better to use the other methods if
possible to keep the Python code simple, clean, and reusable.
• Parameters that, when changed, require a new design file to be generated. These parameters
typically control how many components are in the design file or something similar. This type
of parameters must be passed to the script as script arguments. See Section 6.F.6 for more
details about passing script arguments to the Python script as well as the examples below.
• Parameters that can be changed through Symbols. These parameters typically control the
properties of components. This type of parameters can be passed to the .ind file generated
by the script through the options in the circuit reference dialog and/or the Local Symbols
table for the circuit reference. See Section 6.F.2 for details about setting options in the circuit
reference dialog, see Section 6.F.6 more details about using hierarchy exports with the
Python API, and the examples below.
Open the file grating_coupler.ind. This is the master control .ind file that uses the Python
script grating_coupler.py which generates the series of yellow arcs.
We will not cover the creation of the full master control file grating_coupler.ind here, instead
we will focus on the circuit reference component that uses the Python API to draw the yellow arc
segments.
Note that the External File is set to grating_coupler.py which will call the Python script to
generate the layout. This script (which we will go through below) generates an .ind file
containing the arc segments.
Symbol/Property Description
N Sets the number of rings
Period Sets the period/spacing of the rings
Angle Sets the half-angle of the rings
Rmin Sets the minimum radius of the rings
Material Properties Sets the material of the rings
Period Sets the periodicity of the rings
Duty Sets the duty cycle of the rings
Depth Sets the height of a ring
Merge Priority Sets the merge priority of the ring, used because the rings have a
lower index than the Si waveguide
Display Color Sets the color of the rings
Figure 10-3: The Local Symbols table for the Circuit Reference.
• Script Arguments: This method is required for properties that cannot be simply passed as
symbols. The only property of the grating coupler that this is true for is N, the number of arcs.
Script arguments are set in the Local Symbol table with names that start with the prefix ArgX.
Here we have one symbol Arg1_NumRings which is set to NumRings. Had there been more
arguments, they should start with names like Arg2_, Arg3_, etc. We’ll note this later, but the
script should have default values for arguments in case they are not defined in the Local
Symbols table.
See Appendix H for a description of the Python API to generate design files, including supported
Python versions.
This example uses both Python APIs (RSoftUserFunction() and RSoftCircuit()). We begin
by going through the example described above in more detail. The files for this example are
located here:
<rsoft_dir>\examples\RSoftCAD\scripting\Python\binary_phase_mask
Open the file binary_phase_mask.ind. This is the master control .ind file that uses the Python
script binary_phase_mask.py which generates the yellow boxes based on the data in the file
binary_phase_mask.dat.
We will not cover the creation of the full master control file binary_phase_mask.ind here,
instead we will focus on the circuit reference component that uses the Python API to draw the
yellow box segments. The only input is the data file binary_phase_mask.dat, the script
automatically scales the data to fit within the a single unit cell (defined by the symbols PeriodX
and PeriodY variables) in the binary_phase_mask.ind file. The data file is passed as an
argument in the Local Symbol table for the circuit reference.
See Appendix H for a description of the Python APIs to read data files and generate design files,
including supported Python versions.
Figure 10-7: The simple metalens design shown in the RSoft CAD.
This example uses both Python APIs (RSoftUserFunction() and RSoftCircuit()). We begin
by going through the example described above in more detail. The files for this example are
located here:
<rsoft_dir>\examples\RSoftCAD\scripting\Python\metalens
Open the file [Link]. This is the master control .ind file that uses the Python script
[Link] which generates the yellow boxes based on the data in the file
diameter_ratio.dat.
We will not cover the creation of the full master control file [Link] here, instead we will
focus on the circuit reference component that uses the Python API to draw metalens.
See Appendix H for a description of the Python API to generate design files, including supported
Python versions.
The Python file is make_mmi_1x2.py and can be run by moving to the directory above and
running this command:
rspython make_mmi_1x2.py
Note that in this example we hardcode the layer properties (vertical position, height, and
material), see the next example for how load stack data from a particular PDK. Also, see
Appendix H for a description of the Python API to generate design files, including supported
Python versions.
Example 2-3: Waveguide Crossing from GDS using PDK Stack Data
This example is an extension of Example 2-2 above, using stack data directly from the
referenceOpto PDK. This concept can be generalized to any PDK.
Note that you will need access to the referenceOpto PDK to run this example.
The use of simulation scripts for most applications can be automated with RSoft’s MOST
package.
Syntax
The basic syntax for running the simulation programs from the command line is:
SIM_PROGRAM index-file-name [name=value name=value ...] @<symfile>
Where SIM_PROGRAM is the name of the simulation program (the names are listed in Conventions
section in the Preface), the index-file-name is the name of the *.ind file to be simulated, the
name/value entries are symbol table variables and values to be applied to the *.ind file, and
<symfile> is an optional file that contains a list of additional symbols. For example, to run the
FullWAVE example file [Link], which is located in the directory
<rsoft_dir>\examples\fullwave, with an output prefix of ‘run1’, issue the following command
from the directory where the *.ind file is located:
fullwave [Link] prefix=run1
Examples for other tools are below. If you get errors that the system can not find the program or
application, read through RSoft Installation Guide to ensure that you have set up the PATH
properly.
When using scripts it can be very useful to close the simulation window automatically after a
simulation has completed so the control is returned to the script and the next item can be run. To
do this, set the variable wait to 0 like:
fullwave –hide [Link] prefix=run1 wait=0
The wait option can be set directly in the symbol table, but since it is only really useful when
scripting it makes most sense to add it to the command line. While this option will work for all
the RSoft simulation tools, MOST uses a slightly different syntax:
rsmost -nowait [Link]
Try It!
The best way to understand this concept is to try it. To open a command prompt on Windows,
either choose the ‘Command Prompt’ option from the start menu, or choose Run from the Start
menu and give the command cmd. To open a command prompt on a Linux system, open a shell
window.
Please choose the appropriate product(s) from the list below. Also, note that the following
commands are for Windows systems. Linux users should consult Section 1.C for the appropriate
program name.
In all these cases, a simulation should open and save the results with a prefix of run1.
• BeamPROP
Move to the directory <rsoft_dir>\examples\beamprop and give the command:
bsimw32 [Link] prefix=run1
• FullWAVE
Move to the directory <rsoft_dir>\examples\fullwave and give the command:
fullwave [Link] prefix=run1
• BandSOLVE
Move to the directory <rsoft_dir>\examples\bandsolve and give the command:
bandsolve [Link] prefix=run1
• GratingMOD
Move to the directory <rsoft_dir>\examples\gratingmod\Tutorial\TutA1 and give the
command:
grmod [Link] prefix=run1
• FemSIM
Move to the directory <rsoft_dir>\examples\femsim and issue the command:
femsim [Link] prefix=run1
• ModePROP
Move to the directory <rsoft_dir>\examples\modeprop\plasmon and issue the command:
modeprop [Link] prefix=run1
The scripts in this section are for BeamPROP but the concepts are the same for other engines.
• This script will perform simulations with values of the variable separation from 1 µm to a
value of 10 µm with a step of 1 µm.
• Data will be stored with a prefix of runXX where XX corresponds to the simulation number.
• This script will not produce a scan result like MOST. To do this, this script would have to be
modified using the scan_output, scan_prefix, and scan_variable variables used in the
Perl script below. For a simple case like this, it would be easier to use MOST; this example is
only meant to illustrate basic scanning concepts.
The batch file is:
bsimw32 [Link] wait=0 prefix=run01 separation=1
bsimw32 [Link] wait=0 prefix=run02 separation=2
bsimw32 [Link] wait=0 prefix=run03 separation=3
bsimw32 [Link] wait=0 prefix=run04 separation=4
bsimw32 [Link] wait=0 prefix=run05 separation=5
bsimw32 [Link] wait=0 prefix=run06 separation=6
bsimw32 [Link] wait=0 prefix=run07 separation=7
bsimw32 [Link] wait=0 prefix=run08 separation=8
To run this script, save it in a text file with extension *.bat and run it from the command line.
RSoft’s Passive Device Design Suite contains several mode solvers that can be used to compute
transverse modes of a structure with an arbitrary index cross section. These modes can then be
used as a launch file or as needed. Two of these methods are based on the Beam Propagation
Method (BPM), another (TmmSIM) is based on the Transfer Matrix Method (TMM), and
another (FemSIM) is based on the Finite Element Method (FEM).
The mode solvers based on BPM and TMM can be used by all users who are licensed for any of
RSoft’s passive device simulation tools. The FEM-based mode solver (FemSIM) is licensed
separately.
u i 2u 2u
= 2 + 2 + k −k u
z 2k x y
2 2
( )
where k-bar is the reference wavenumber and is a constant number chosen to represent the
average phase variation. This equation is solved numerically by first specifying a launch field at
z=z0, and then integrating in z to obtain the field for z>z0.
During a mode calculation, it should be assumed that the structure is uniform along z, and so the
propagation can be described in terms of the modes of the structure and their propagation
constants. Since we are only going to illustrate the concepts of mode solving, we will consider a
2D propagation; the concepts are exactly the same in 3D.
Iterative Method
Propagation of an electromagnetic field through a structure can be expressed via a simple phase
variation based on the propagation constants, βm, of each mode [ϕm(x)] of the structure. The
iterative method is based on imaginary-distance BPM, and propagates along an imaginary z axis
by replacing the longitudinal coordinate z by z'=iz so that each mode experiences an artificial
exponential increase:
( x, z ) = cmm ( x ) exp m z
m
This implies that each mode will exponentially grow with a growth rate equal to its real
propagation constant βm. The mode with the highest propagation constant, which is conveniently
the fundamental mode (m=0), will therefore grow faster than all other modes in the structure
causing the simulation results to converge to the field profile of the fundamental mode. The
propagation constant can then be obtained using a variational-type expression.
Higher order modes can be obtained by using an orthogonalization procedure to subtract
contributions from lower order modes while performing the propagation. Of course, it is
important to launch an arbitrary field which excites all the interesting modes in the structure.
Issues such as optimal choice of launch field, reference wavenumber, grid size(s), etc., are
discussed in the BeamPROP manual. This method is not valid for leaky or lossy modes.
P ( z ) = in* ( x ) ( x, z ) dx
This function can also be expressed, using an expansion of the propagating field in the modes to
be found, in a form such that a Fourier transform of this function produces a mode spectrum with
peaks at the modal propagation constants. To obtain the mode profiles, a second BPM
propagation is performed in which the known propagating constants are beat against the
propagating field.
Additional information on this technique can be found in the BeamPROP manual. While the
correlation method is generally slower than imaginary-distance BPM, it can sometimes be
advantageous because it can be applicable to problems that are difficult or impossible for
imaginary distance BPM, such as leaky or radiating modes.
Figure 12-1: The Compute Modes dialog box where the mode calculation parameters are set.
TmmSIM can be used by all users who are licensed for any of RSoft’s passive device simulation
tools.
To open TmmSIM, choose the appropriate option from the Utility menu item in the RSoft CAD
interface.
This appendix contains some advice on good habits and sources of confusion for novices and
experienced RSoft CAD users alike.
• Learn to use the command line utilities included with the RSoft Photonic Suite
You can achieve a lot of tedious work by writing a single command. You may even find uses
for these utilities in your other work. These utilities are documented in Appendix E.
• Learn the scripting capabilities of the RSoft Photonic Suite
While the RSoft CAD is designed to be used via a graphical interface (GUI), complicated
structures can be quite tedious to create in this fashion. You can create a layout script which
automatically creates a desired design file. Additionally, simulation scripts can be created to
automate tedious simulations. See Chapter 10.
• Read the WinPLOT manual
File Formats
This appendix documents file formats used both by the RSoft CAD. Note that some file formats
are also used by simulation engines as well. For example, the Standard RSoft File Format is used
by every simulation engine for a variety of outputs. Except where noted, all files are in ASCII
text format. For further information, contact RSoft.
Note that the TDR file format described in Section B.B can also be used as input virtually
anywhere in the software that the Standard RSoft File format can be used. In addition, TDR files
may be output as described in Section B.B.2.
Parameter Description
Nx, Ny, Nz Number of data points in the X, Y, and Z directions.
X0, Y0, Z0 The X, Y, and Z coordinate of the first data point.
Xn, Yn, Zn The X, Y, and Z coordinate of the last data point.
Zpos The Z coordinate. The actual numerical value does not affect the field data in
any way and is included for bookkeeping purposes. For a 3D data file, this
should be set to the keyword Z_DEPENDENT.
Optional_Data These parameters are not required, but are used in special cases. For instance,
if the field is a result of a mode calculation, there are two optional fields
containing the real and imaginary parts of the mode effective index. Also, the
wavelength and refractive index of the plane where the data is defined can be
specified here.
Output_Type The sub-format of the data. This field can be one of the following keywords:
Each output type consists of a pair of keywords: the first is used for data files
with one coordinate, the second (_3D) for data files with two coordinates.
The keywords used in these definitions are described in the previous section. For example of
each of these file types, see the next section.
where there are two header lines: one ‘/’ line that indicates to the software how to interpret the
header and one line that contains the X coordinate information and additional information such
as the data type. The data is specified in the remaining rows of the file, one row for each point.
where there are two header lines: one ‘/’ line that indicates to the software how to interpret the
header and one line that contains the X coordinate data and additional information such as the
data type. The data is specified along with the X values in the remaining rows of the file.
where there are no header lines, and the Data(X) entries can be complex. This format is useful
for defining the refractive index information for materials where the X data represents
wavelength and the Data(X) entries are the real and imaginary parts of the refractive index.
where there are four header lines: two ‘/’ lines that indicate to the software how to interpret the
header and two lines that contain the X coordinate data, Y coordinate data, and additional
information such as the data type. Note that the data at each X and Y value are defined as a
matrix, each row and column representing a single X and Y value respectively.
where there are five header lines: three ‘/’ lines that indicates to the software how to interpret the
header and two lines that contain the X coordinate data, Y coordinate data, and additional
information such as the data type. Note that the X values are now defined explicitly in the first
column and the Y values are defined explicitly in the first data row. The first 0 in the Y
coordinate row is required as a spacer only as the actual value does not matter. The data itself is a
matrix as in the 2D uniform grid syntax.
3D File Syntax
The syntax for a 3D data file with a uniform X and Y grid is:
where there are six header lines: three ‘/’ lines that indicates to the software how to interpret the
header and three lines that contain the X coordinate data, Y coordinate data, Z coordinate data,
and additional information such as the data type. For a 3D file, the Z position (Zpos) field should
be set to the keyword Z_DEPENDENT as shown. The data is a series of matrices each
corresponding to multiple Z cross-sections.
Example 1:
The following file contains the function f(x) = x2 over the X range [0,1] with an X grid of 0.1:
/rn,a,b/nx0
11 0 1 0 OUTPUT_REAL
0.00
0.01
Example 2:
The following file contains the function f(x) = x2 + ix3 over the X range [0,1] with an X grid of
0.1:
/rn,a,b/nx0
11 0 1 0 OUTPUT_REAL_IMAG
0.00 0.000
0.01 0.001
0.04 0.008
0.09 0.027
0.16 0.064
0.25 0.125
0.36 0.216
0.49 0.343
0.64 0.512
0.81 0.729
1.00 1.000
Example 3:
The following file contains the function f(x) = x2 over the X range [0,1] with an X grid of 0.1 and
with no header.
0.00 0.000
0.10 0.010
0.20 0.040
0.30 0.090
0.40 0.160
0.50 0.250
0.60 0.360
0.70 0.490
0.80 0.640
0.90 0.810
1.00 1.000
Example 5:
The following file contains the function f(x,y) = xy over the X range [1,2] and Y range of [0,1]
with an x grid of 0.25 and a y grid of 0.5:
/rn,a,b/nx0
/r,qa,qb
5 1 2 0 OUTPUT_REAL_3D
3 0 1
0.000 0.500 1.000
0.000 0.625 1.250
0.000 0.750 1.500
0.000 0.875 1.750
0.000 1.000 2.000
Example 6:
The following file contains the function f(x,y) = x+iy over the X range of [1,2] and Y range of
[0,1] with an X grid of 0.25 and a Y grid of =0.5:
/rn,a,b/nx0
/r,qa,qb
5 1 2 0 OUTPUT_REAL_IMAG_3D
3 0 1
1.00 0.0 1.00 0.5 1.00 1.0
1.25 0.0 1.25 0.5 1.25 1.0
1.50 0.0 1.50 0.5 1.50 1.0
Example 7:
The following file contains the function f(x) = x2 on a non-uniform x grid with 5 points (0.00,
0.10, 0.50, 0.55, and 1.00):
In a 1D non-uniform grid format, the first column contains the X values and the second contains
the data.
/rn
5 0 1 0 OUTPUT_REAL
0.00 0.0000
0.10 0.0100
0.50 0.2500
0.55 0.3025
1.00 1.0000
Example 8:
The following file contains the function f(x,y) = 2x+i3y on a non-uniform x grid with 5 points
(1.00, 1.10, 1.50, 1.60, and 2.00) and a non-uniform y grid with points (100, 125, 200):
In a 2D non-uniform grid format, the first column contains the X values and the first data row
contains the Y values. Also, since this is a complex-valued function, every other column
(excluding the first) contains imaginary data.
/rn
/r
/rq
5 1 2 0 OUTPUT_REAL_IMAG_3D
3 1 2
0 1.00 1.25 2.00
1.00 2.00 3.00 2.00 3.75 2.00 6.00
1.10 2.20 3.00 2.20 3.75 2.20 6.00
1.50 3.00 3.00 3.00 3.75 3.00 6.00
1.60 3.20 3.00 3.20 3.75 3.20 6.00
2.00 4.00 3.00 4.00 3.75 4.00 6.00
Example 9:
The following file contains the function f(x,y,z) = x+ y + z over the x range [-1,1], y range of [-
1,1], and z range [0,1] with an x grid of 1, a y grid of 1, and a z grid of 0.5
This file contains three slices, each 3x3, which contain the field data at each Z point.
TDR files are the basic input and output used by Synopsys’ TCAD Sentaurus product. This
section only covers the relevant information for using TDR files in the RSoft software. See the
TCAD Sentaurus documentation for a complete description of the TDR format.
where <tdr-file> is the name of the TDR file and quantity is optional (and case-sensitive!)
and sets the name of the desired quantity within the TDR to be used. For example, entering
[Link]:doping
will use the doping quantity from the [Link] file. If no quantity is specified, the first quantity
in the file will be used.
More information about the bdutil utility can be found in Appendix E. Note that some of these
options are documented as part of bdconv, but bdutil acts like bdconv if no function is
specified. Note that the tdrutil utility can also be used to work with TDR files.
Polygons can be scaled in both the X and Z coordinates, as well as rotated at an arbitrary degree.
Also, these files can either be statically loaded once, or dynamically loaded at runtime. See
Section 5.D.
RSoft Expressions
Virtually any numeric input field in any RSoft product can accept an analytical expression
involving pre-defined and user-defined variables that are defined in the symbol table. This
appendix discusses the form that these expressions can take, the allowed operators, and the built-
in functions that are available.
Expressions are written in the common form accepted by most programming languages (e.g. C,
Fortran, etc.), and can include numbers, variables, arithmetic operators, and function calls.
Operator Description
^ exponentiation
* multiplication
/ division
+ addition
- subtraction
Parenthesis can be used as usual to group operations and override this precedence.
Variable Value
inf infinity
c 2.9979246e014 µm/s
e 2.718281828
pi 3.141592653
true 1
false 0
yes 1
no 0
$id This parameter equals the segment number of the segment it is used from (if used
in Segment 1, its value will be 1. This is useful to provide different seed numbers
for multiple segments when using the random number generator functions
described below.
This expression sets the symbol My_symbol to Value2D for 2D (dimension equals 2), and
Value3D for 3D (dimension not equal 2). If dimension is not defined in the Symbol Table, this
expression uses a default value of dimension=3 by using the syntax ‘dimension:3’.
Function Description
abs(x) absolute value
exp(x) exponential
log(x) natural logarithm
log2(x) logarithm in base 2
log10(x) logarithm in base 10
sqrt(x) square root
cos(x) cosine
sin(x) sine
tan(x) tangent
acos(x) inverse cosine
Function/Definition Description
Function/Definition Description
0 if 'x' does not exist This function checks if a symbol is defined and
defined ( x) = returns 0 (undefined) or 1 (defined).
1 if 'x' exists
Function/Definition Description
where seed is the random seed, and i is an integer useful for correlating several “random”
parameters together. The distribution is linear between -0.5 and 0.5, and several special seeds are
recognized: 0 returns 0.0, -1 returns 0.5, and -2 returns -0.5.
As an example, consider a case where several parameters within a component are to have
random values. To do this, define one or more seed variables in the symbol table, and then use
the same index variable i within the component. In this way two or more fields within the
component are correlated. Changing the seeds within the symbol table will result in different
Examples:
where seed is the random seed, corlen is the correlation length of the random function, and z is
the continuous variable. The seed variable behaves the same as the function ranseq() described
above and is not repeated here. This function has the same statistical behavior as the built-in
roughness option described in Section 6.D.4, and may be used in tapers. When using this
function, be careful with the normalizations of tapers with respect to the units of z and corlen.
For example, if L is the true physical length of the taper, and CorLen is the true physical
correlation length, then the taper function should use ranline(iseed,Corlen/L,z).
While these functions can be used anywhere an expression allowed, it is better to employ them
only in the symbol table and assign their result to another symbol to be used anywhere since their
evaluation can be time-consuming.
where the first argument is the file name in quotes, and the remaining arguments (up to three)
are the variables the data is a function of and must be defined in the Symbol Table. This
function will evaluate the variable(s), then look up the corresponding value in the data file.
• User Derivative Function
The userderiv() function returns the first derivative of data contained in an ASCII data file.
The syntax for this function is:
userderic("filename",var)
where the first argument is the file name in quotes and the second argument is the variable
that the data is a function of and must be defined in the Symbol Table. This function will
evaluate the variable(s), then look up the corresponding first-derivative based on the data in
the file.
Additional Notes:
• When using these functions to define materials stored in the Group Library discussed in
Section 8.A.1, you can use the keyword <groupmat> to refer to the PATH defined. See note
in Section 8.A.7.
• You can use a symbol to specify the filename using the ‘$’ prefix, for example:
filename = [Link]
userdata($filename, free_space_wavelength)
• The format of the file is currently limited to the formats described in Appendix B, see a
simple example below.
• The RSoft CAD will not give an error if a blank string is used for the filename. This is useful
when using the ‘:’ syntax to define default values. Consider the following series of symbols:
V_exp = 7
V_file = userdata($F:,free_space_wavelength)
Parameter = if(defined(F),V_exp,V_file)
F = [Link]
In the above example, if the symbol F is not defined, then the V_file symbol will be set to a
null value (set via the ‘:’ default option described in Section C.D). In this case, the Parameter
value will be set to the value V_exp.
This data file defines the refractive index over a wavelength range of 1.50 to 1.60 µm using 5
points. See Appendix B for more details about this file format. It is also possible to use a header-
less format like this:
1.500 1.4430
1.525 1.4435
1.550 1.4440
1.575 1.4445
1.600 1.4450
with two columns containing the wavelength and real index data. A three column file with the
imaginary index can also be used.
The proper syntax to define the background index as a function of the wavelength would then be:
background_index = userdata("[Link]",free_space_wavelength)
The second and third numeric arguments could be used to conveniently add dependence on other
variables, such as temperature or concentration, if the data file contained this information. In this
case, setting the variable free_space_wavelength to 1.55 will result in a background_index
value of 1.4440. Results are interpolated from the data in the data file if needed.
Example 2: Using a Data File to Define Refractive Index in the RSoft CAD
It is important to use refractive index data that corresponds to the actual materials being
simulated to ensure meaningful simulation results. Refractive index data, which can be found in
reference materials, on the Internet, or from experiment, can be used to create a new material in
the RSoft CAD’s Material Library. This new material can then be used with any of RSoft’s
passive device simulation tools.
• The refractive index data should be in a simple text format: the first column contains the
wavelength, the second column contains the real index, and the third optional column
contains the imaginary index. It is important that the file contains data for the entire
wavelength range to be simulated. The data can be at non-uniformly spaced wavelengths and
no header is required, though a simple text header can be used.
where material is the name of the material as defined in the Material Editor. To calculate the
refractive index at a specific wavelength use the form:
nreal(“material”, lambda)
nimag(“material”, lambda)
where lambda is the wavelength [μm]. The other four function lookup the real and imaginary
values of the refractive index at a specific wavelength for ternary and quaternary materials:
nkinterp2_real(“materialA”,”materialB”,x,lambda,dir)
nkinterp2_imag(“materialA”,”materialB”,x,lambda,dir)
nkinterp4_real(“materialA”,“materialB”,“materialC”,“materialD”,x,y,lamb
da,dir)
nkinterp4_imag(“materialA”,“materialB”,“materialC”,“materialD”,x,y,lamb
da,dir)
where material[A|B|C|D] is the name o fthe material(s) as defined in the Material Editor, x
and y are the ternary and quaternary alloy parameters (set in ‘Semiconductor Tab’ in the Material
Editor), lambda is the wavelength [μm], and dir is the directory code for the material file
where A, B, C, D are the n (real)or k (imag) values from the respective materials evaluated at
lambda.
where
The graphene_real() and graphene_imag() functions are used by the built-in Graphene
models in the Material Library but can also be used in any expression throughout the
software. When using these functions make sure to set the appropriate parameters that
i ( , , 1 , 2 , T )
( ) = ref +
0 H
where ε0 is the permittivity of free space and σ(ω,μ,Γ1,Γ2,T) is calculated as described in Eqn.
1 of the reference below. Note the following exceptions:
• Γ1 is used for the intraband term and Γ2 is used for the interband term
• The sign convention for ‘i’ is changed (i is replaced with –i)
• The integral is solved exactly for all cases, the approximation used in Eqn. 4 is not used
Reference: Hanson et al, “Dyadic Green’s functions and guided surface waves for a surface
conductivity model of graphene”, Journal of Applied Physics 103, (2008).
where p is the polarization (0=TE, 1=TM), m is the mode number (0 is fundamental), lambda
is the free space wavelength in µm, nc is the cover index, ns is the substrate index, nf is the
film or guiding layer index, and h is the thickness of the film or guiding layer in µm. The last
argument g is optional and, if set to 1, calculates the group index instead of the effective
index.
• Effective index of rib waveguide geometries – eimneff()
The function eimneff() computes the effective index via the effective index method for rib
waveguide geometries; it’s syntax is:
eimneff(p,mx,my,lambda,nc,ns,nf,w,h,hside[,g])
where p is the polarization (0=TE, 1=TM), mx and my are the X and Y mode numbers (0 is
fundamental), lambda is the free space wavelength in µm, nc is the cover index, ns is the
where l and m are the mode numbers, lambda is the free space wavelength in µm, nclad is
the cladding index, ncore is the core index, and d is the core diameter in μm. The last
argument g is optional and, if set to 1, calculates the group index instead of the effective
index.
The first form generates a regular polygon with n sides. The second form takes an arbitrary set of
points contained in a file which must be in quotes. The file should be in the polygon format in
Appendix B.E.
Function/Syntax Description
pdkinfo(“parameter”) Returns a numeric value from a pdkinfo file.
$pdkinfo(“parameter”) Returns a string value from a pdkinfo file.
As an example, consider the following sample pdkinfo file, and then example function calls.
WG_width = 0.5
WG_height = 0.22
WG_material = “Si”
Function Description
strlen(x) Returns the length of string x.
$cat(x,y,..) Concatenates string arguments. For example, cat(“AA”,”BB”)
returns “AABB”.
$itoa(x) Returns a string from an integer argument x.
$ftoa(x) Returns a string from a float argument x.
atoi() Returns an integer from a string argument x.
atof() Returns a float from a string argument x.
Function Description
eng2sci(x) Converts engineering format to scientific format. It accepts one
string argument. For example, eng2sci(“2u”) returns 2e-6. The
accepted codes and factors are:
• Y, a factor of 1e24
• Z, a factor of 1e21
• E, a factor of 1e18
• P, a factor of 1e15
• T, a factor of 1e12
• G, a factor of 1e9
• M, a factor of 1e6
• K, a factor of 1e3
• M, a factor of 1e-3
• u, a factor of 1e-6
• n, a factor of 1e-9
• p, a factor of 1e-12
• f, a factor of 1e-15
Before SWB pre-processes, the second argument is returned. When the text is pre-processed,
then the first argument is returned. See the TCAD Sentaurus documentation for more
information on pre-processing, including supported syntax and options.
In this appendix we document the symbol table variable names which control the internal
operation of the RSoft CAD. Most of these variables correspond to dialog fields which have
already been documented.
The following sections list the variable names corresponding to these dialog fields:
Variable Description
alpha Sets the default imaginary index for waveguide segments.
background_alpha Sets the imaginary index for the background.
cover_alpha Sets the imaginary index of the cover for rib/ridge/multilayer
structure types.
Variable Description
boundary_min X Domain Min
boundary_max X Domain Max
grid_size X Grid Size
slice_grid_size X Slice Grid
boundary_min_y Y Domain Min
boundary_max_y Y Domain Max
grid_size_y Y Grid Size
slice_grid_size_y Y Slice Grid
domain_min Z Domain Min
domain_max Z Domain Max
step_size Z Grid Size
slice_step_size Z Slice Grid
slice_display_mode Display Mode
prefix Output File Prefix
Utilities
RSoft software includes a number of utilities that can be used for a variety of tasks, including,
but not limited to:
Note that bdconv and bdutil share the same options, either utility name can be used.
Syntax:
bdconv supports the following syntax and options:
usage: bdconv [options] input-file-name output-file-name(s)
options:
-? help - prints this message
-x<range> select range in x (<range> = # or #,#)
-y<range> select range in y (<range> = # or #,#)
-dx# set grid size in x
-dy# set grid size in y
-rp# rotate in phi
-rt# rotate in theta
-tx# translate in x (shift data – keep domain)
-ty# translate in y (shift data – keep domain)
-sc{x|y|z}# scale x,y,z axes
-tr{x|y|z}# translate x,y,z axes
-sym{x|y|z}[#] mirror about axis (+-1=min, +-2=max,<0=antisym,def=1)
-sc# scale data values
-tr# translate data values
-c conjugate data values
-unwrap unwrap phase of data values
-v<type> select output value type (<type> = a,r,i,z,q,n,p)
-t transpose matrix (3D only)
-a alternate output fmt with explicit x/y coordinates(2D/3D)
-abare alternate bare matrix output format (3D only)
Options:
-x<range> These two options are used to extract data either from a certain
-y<range>
range in the data file or at a given value of one coordinate. This is
useful to either reduce the domain of a 2D file, or to take a cross
section from a 2D file and thus create a 1D file.
-dx# These two options are used to set the grid size in either the X or Y
-dy#
directions to a desired setting. The points are interpolated between
given data points so that the file can be set to either have more or
less data points than before.
eg. To change the x grid size of input.m00 from 0.1 µm to 0.5 µm
in order to decrease the size of the file:
bdconv –dx.5 input.m00 [Link]
The created file, [Link], contains less grid points than the file
input.m00, and therefore will be smaller and have a decreased
resolution. The grid size can be decreased, and thus the size of the
file would be increased. This option cannot create any new data,
but it can be useful to increase or decrease the number of grid
points.
-c This option takes the conjugate of the input data file and saves it to
another data file. This is the same as manually taking a data file of
type Real/Imaginary, and changing the sign of the columns of
imaginary data.
-unwrap This command outputs a ‘real’ data file which contains unwrapped
phase. If the input file is real, it assumes the phase is in the real part
in degrees. If the file is complex, it extracts the phase.
-v<type> This option allows the user to convert a data file in one of the
RSoft data formats into another RSoft format. The types are:
a amplitude
-t This option will transpose the data in the input file and save it in
the output file. This is useful when performing data manipulation
or matrix calculations with the data file.
-a This option will output a file that has the absolute coordinates in x
and y of the data points. Typically, a file using the RSoft file
formats has several lines on the top which dictate the domain min
and max as well as the number of points that are in the file for each
row or column. This option will convert a file so that the absolute
coordinates are given.
-abare This command will strip the header information from a data file in
an RSoft file format. By using this, all domain and number of point
information will be removed from the data file.
Note that bdconv and bdutil share the same options, either utility name can be used.
Syntax
bdutil supports the following syntax and options:
usage: bdutil -i [options] input-file-name1 [input-fle-name2 [weight-file]]
bdutil -k [options] mode-file1 mode-file2 index-file1 index-file2
bdutil -s [options] input-file-name
bdutil -f [options] input-file-name(s) output-file-name
bdutil -ray [options] input-file-name output-file-name
bdutil -o$ [options] input-file-name1 input-fle-name2 outpt-file-name
bdutil without a function operates as bdconv.
options:
Overlap Integrals: -i
The –i switch indicates that an overlap should be performed. The syntax for this option is:
bdutil –i [options] input-file1-name1 [input-file-name2 [weight-file]]
Note that the -ir switch can be used to calculate overlap integrals in radial coordinates.
Options:
The following options control how an overlap integral is calculated:
-wx<range> These options control the limits of integration. By default, the utility
uses the limits of integration which are given in the data files as
coordinate ranges. If the files do not lie in the same range, the utility
calculates the integral over the area where the files overlap.
-sq1 This option squares the first field before calculating an overlap
integral. See example below for details.
-bare This option restricts output to only numbers which can help simplify
scripting and other tasks.
-ir Enables radial overlap integrals. The -irout=<filename> option will
-irout
output the radial integral to a file <filename>_theta.dat.
Usage:
There are several combinations of input data files possible and the utility performs different
calculations in each case:
S = h ( x )dx
x1
where h(x) is equal to f(x), |f(x)|2, and |f(x)|4. Since f(x) can be a complex function, the value of
the integral of h(x) = f(x) contains both a real and imaginary part.
Note that using the switches –i1, -i2, or –i3 will output only the numerical result without any
accompanying text which can aid in using the overlap results in scripts. The switch -i1 outputs
the f(x) result, -i2 outputs |f(x)|2, and –i3 outputs |f(x)|4.
f ( x ) g ( x )dx
*
S=
x1
1 1
x2 2
x2 2
f ( x ) f * ( x )dx g ( x ) g * ( x )dx
x x
1 1
where the asterisk denotes the complex conjugate. The program returns values for both S and |S|2.
Since a complex conjugate is taken the order in which the files are input is important. Note that
using the –iu switch will calculate the overlap integral without the normalization, i.e. just the
numerator shown in the equation above.
f ( x ) ( x ) g ( x )dx
*
S=
x1
1 1
x2 2
x2 2
f ( x ) f * ( x )dx g ( x ) g * ( x )dx
x x
1 1
where the asterisk denotes the complex conjugate. The program returns values for both S and |S|2.
Since a complex conjugate is taken the order in which the files are input is important. Note that
using the –iu switch will calculate the overlap integral without the normalization, i.e. just the
numerator shown in the equation above.
( f ( x )) g * ( x )dx
2
S=
x1
1
x2 x2 2
f ( x ) f ( x )dx g ( x ) g * ( x )dx
*
x x
1 1
This is the same form as shown above except the first field f(x) is squared in the numerator and
the normalization term in the denominator for the first field does not have a square root (and
therefore is effectively squared). The –sq1 option can also be used with the weight function as
needed.
Examples:
To calculate the integral of a function f(x), contained in a file [Link] over a range of (-3,2):
bdutil –i –wx-3,2 [Link]
To calculate the overlap integral between two data files, [Link] and [Link], with the
default limits of integration and also squaring the first field:
bdutil –i –sq1 [Link] [Link]
To calculate the overlap integral between two data files, [Link] and [Link], with a
weight file, [Link], over the range (-2.3, 6.1), use the command:
bdutil –i –wx-2.3,6.1 [Link] [Link] [Link]
Coupling Coefficients: -k
The –k switch calculates the coupling coefficient, kappa, between two modes traveling in
opposite directions in a grating. The correct syntax for this calculation is:
bdutil -k [options] mode-file1 mode-file2 index-file1 index-file2
Usage:
The utility will produce both the real and imaginary parts of kappa, as well as the effective index
of the grating. Kappa is defined as:
where n1 is the mean index and n2 is the peak index. The calculated number is a dimensionless
form of the above expression in which the k0 factor is not present.
This is consistent with the book: Raman Kashyap, “Fiber Bragg Gratings,” Academic press,
1998, pp.143, equation (4.3.6). It is also consistent with the paper: P. Correc, “Coupling
Coefficients for Trapezoidal Gratings,” IEEE Journal of Quantum Electronics, Vol. QE-24, No.
1, 1988, pp.8, equation (1), (2) and (3).
Example:
To calculate the coupling coefficient between a forward mode, mode1.m00, and a backward
mode, mode2.m00, in a grating with a peak index profile of [Link] and a mean index
profile of [Link]:
bdutil -k mode1.m00 mode2.m00 [Link] [Link]
For 2D data files, the 1/e width is clearly defined. For 3D data files, bdutil calculates the
effective width/height. For example, to calculate the width of a field a(x,y), bdutil first
calculates the average amplitude b(x) by integrating a(x,y) along y, then finds the 1/e width of
b(x).
Example:
For example, the 1/e width and height of a mode file mode.m00 can be found using the
command:
If multiple input files are specified, they will be interpreted as vector components of the same
field (i.e. Ex, Ey, and/or Ez). Note that when non-uniform grids are used, the near-field is
converted to a uniform grid (with average grid size of non-uniform grid) before the far-field is
calculated.
Usage:
To calculate a far-field with bdutil you must use one of these switches:
-fa The –fa switch produces a plot of intensity vs. angle along with
values for the beam divergence of the full angle at both the 1/e as well
as the half intensity. This computation starts with the spatial near-
field, E(x) and computes the Fourier transform, F(kx). Next, F(kx) is
normalized such that
F ( x ) dx = F (k x )dk x
I ( x ) E ( x )
2 x 0
−
= 2
= 2
I0
E0
E ( x ) dx
−
0
The files output by this option are functions of the angles ϕ and θ (in
3D) and are meant to be plotted in polar coordinates (use the /polar
WinPLOT option).
-f# The –f# switch calculates the field at a distance of # microns. This
calculation is performed via the FFT-BPM method and propagates for
one step which is only valid for homogenous or free-space regions.
See the BeamPROP manual for further discussion of this method. The
option –r can be used to increase the boundary size if the field
diverges outside of the boundary specified in the input file.
-fp The -fp switch calculations the far-field projection of a periodic field
from a single plane wave launch. This method assumes that the data
file contains one period of the field, decomposes it into plane waves,
and then plots the amplitude in each diffraction order. The options –za
and –zp can be used to set the launch angles of the plane wave and the
–nl option can be used to set the index of the launch material.
-flens# The –flens# option calculates the field image through an ideal lens
where # is the focal length in μm.
-da This option overrides the default angular spacing for the –fa switch
which calculates the far-field intensity vs. angle.
-n This sets the far-field refractive index that the field is propagated
through. By default, it is assumed the field propagates through air, and
therefore this value defaults to 1. A value of -1 indicates that the near-
field index should be extended to the far-field. This option is useful,
for example, when computing the farfield in a substrate or another
material than air.
-nn This sets the near-field refractive index. This should be set to the
index where the near-field was measured. By default, this value is
taken from the header of the data file(s) used. If not specified in the
data file, the far-field index value (-n) is used.
-nl This sets the launch index when using the –fp switch.
-v<type> This option allows the user to set the format of the far-field output.
The options are the same as the bdconv utility.
-za This option sets the launch angle ϕ for the –fp option (1D and 2D data
files).
Examples:
The far field projection of a field file [Link] given as intensity as a function of angle with an
angular resolution of 0.1 degrees at a wavelength of 1.55 µm in a material with a refractive index
of 1.5 can be saved in a file [Link]:
bdutil –fa –da0.1 –l1.55 –n1.5 [Link] [Link]
The field profile for the above case after a distance of 100 µm:
bdutil –f100 –r –l1.55 –n1.5 [Link] [Link]
The far-field from a periodic near-field [Link] calculated with a plane wave launch incident
in a material with refractive index of 1.5, at a launch angle of 10 degrees, at a wavelength of 1.55
µm, and calculated into a material with a refractive index of 2 can be calculated with this
command:
bdutil –fp –l1.55 –nn1.5 –n2 –za10 [Link] [Link]
LightTools Interface
The –rays switch converts RSoft far-field into a LightTools ray file for use as a Ray Data File in
LightTools. Its syntax is:
bdutil –ray [options] input-file-name output-file-name
where the filenames correspond to the RSoft far-field file and the desired LightTools ray data
file. This process can be automated when using the LED Utility by using the options described in
the LED Utility manual. Note that the polarization data in the RSoft BSDF file will be averaged
when converted.
Options:
-ray[p] Required for ray data file conversion. The –ray option outputs a point
source ray data file, the –rayp option outputs the ray data file over an
extended plane.
-nrays# This sets the number of rays to use. The default is based on the field
resolution in the far-field data file.
Example:
To convert RSoft far-field run1_ffoutput.dat into the LightTools ray data file lt_rdf.txt
with approximately 4000 rays, use the command:
bdutil –ray –nrays4000 run1_ffoutput.dat lt_rdf.txt
Example:
The file [Link] and [Link] can be added together and saved as [Link] using the
command:
bdutil –o+ [Link] [Link] [Link]
The file [Link] can be scaled by a factor of 2.4 and saved as [Link] using the command:
bdutil –sc2.4 [Link] [Link]
The X data in the file [Link] can be translated by 5 and saved to the file [Link] using
the command:
bdutil –tx5 [Link] [Link]
This utility does not support 24-bit bitmaps. See ‘Background’ section for details about
converting bitmaps to a supported format.
Syntax:
bmp2ind supports the following syntax and options:
usage: bmp2ind [options] <input-file> [<output-file>]
options:
-? help – print this message
-w# the unit width of the output profile
-h# the unit height of the output profile
-b# the lower index that the profile will scale to
-f# the upper index that the profile will scale to
-s# 0-std format, 1-scientific format
-m=$ specifies the index map to be used
Usage:
-w# Sets the width (-w) and height (-h) of the output profile. The default
-h#
value for both of these options is 2.
-b# Sets the data value range that will be mapped to the color palette in the
-f#
bitmap image:
• The –b option sets data value assigned to the lowest color index in
the color palette. The default value for this parameter is 0.
• The –f option sets the data value assigned to the highest color index
in the bitmap file. The default value for this parameter is 1.
The data value for each pixel is calculated as:
-s# Controls the use of scientific notation in the output data file: a value of 1
uses it, a value of 0 does not.
-m=$ Selects an optional index map file. This file allows you to map specific
color indices in the palette to specific data values. The use of this option
supersedes the –b and –f options.
The index map file is a simple text file that contains multiple lines, each
line which maps a color index or range of color indices to a data value.
For example, a 16-color bitmap might have an index map file like:
0 = 1.0
1-5 = 3.5
6-7 = 1.5
8-9 = 1.8
10-13 = 2.4
14-15 = 1.3333
where, for example, any pixels in the bitmap with a color index of 11
will be assigned a refractive index of 2.4. The use of this feature is
illustrated in Example 1 below.
The bmp2ind utility supports monochrome (1-bit), 16-color (4-bit), or 256-color (8-bit) indexed-
color bitmap image files. An indexed-color bitmap file is a data matrix where each pixel, or
matrix value, is assigned a color index from a color palette, or lookup table, as illustrated in Fig.
1. There are several programs that can be used to save these types of bitmaps as well as
view/modify the color palette. These include Adobe® Photoshop® ([Link]), Microsoft
Paint (saving bmp files only), and IrfanView (free for non-commercial use,
[Link]).
Figure 1: Example 16-color bitmap. a) The bitmap as it would appear on-screen with color
indexes for each point. b) The color palette used to display this bitmap. Each color index
corresponds to a RGB color, for example 9 = red = RGB(255, 000, 000). This is the standard
Microsoft Windows default 16-color palette.
The bmp2ind utility converts the color index of each data point, or pixel, to a refractive index
data value. While it is necessary to understand the relationship between color index and RGB
color to have a meaningful data conversion, the actual color map used does not matter. When
used with the –m option, the utility will convert each color index to a particular data value, and
when used with the –f and –m options, the color index will be scaled between the defined
min/max values.
Examples
Consider the two bitmaps illustrated in Figs. 1 and 2; we will convert these into index profile
data files to illustrate the use of the bmp2ind utility:
Note that these bitmaps are very low resolution for illustrative purposes, when converting your
own images it is better to use high-resolution bitmap images.
Based on the information in the above table, we create a simple text file that maps the color
indexes to the desired refractive indexes. One such file is:
0-9 = 3.5
10-11 = 1.5
12-15 = 1.0
Assuming that the bitmap is named [Link] and the index map is named [Link], the
conversion can be done with the following command:
bmp2ind -w5 -h5 =m=[Link] [Link] [Link]
where –w5 and –h5 set the dataset’s dimensions, and [Link] is the output file name. The
resulting data file is shown in Fig. 3 and should be used with the Absolute index in User Profile
option described in Section 6.D.5.
Figure 3: Data file a) as plotted in WinPLOT (with interpolation disabled), and b) the
converted data as seen in a text editor (produced with the –s0 option and slightly edited for
visual clarity).
where [Link] is the output file name. The insulator region, which has a color index of 128,
will, according to the equation f(x,y) = (ci/cm)*(vf-vb)+vb, have a data value of (128/255)*(1-
0)+0, or 0.501961. The resulting data file is shown in Fig. 4.
Syntax:
bp2codev supports the following syntax and options:
usage:
bp2codev [options] input-file output-file
bp2codev -V [options] input-file [input-file2] [input-file3] output-file
bp2codev -I [options] input-file output-file [output-file2]
options:
-? help - prints this message
-R CODEV "Real" output format (default is "Complex")
-V CODEV "Vector" output format (Ex and/or Ey and/or Ez input)
-I CODEV "INT" output format (outfile1=FIL [outfile2=WFR])
-L# wavelength (um) [N/A for INT format]
-N# refractive index [N/A for INT format]
Usage:
-? This option prints the help for this utility.
-I This option enables the output of the CODE V “INT” format. In this
mode, the first output file is the “FIL” file, and the second optional
output file is the “WFR” file.
-N# This option sets the refractive index of the plane where the RSoft field
files are defined. The default takes the refractive index value from the
header of the data files, and if nor provided in the header, uses a value
of 1.
Examples:
To convert the vector RSoft field contained in the files field_ex.dat, field_ey.dat,
field_ez.dat, where the wavelength is defined in the file header, to the CODE V file
[Link] use this command:
bp2codev field_ex.dat field_ey.dat field_ez.dat [Link]
To convert the scalar RSoft field contained in the file [Link] where the wavelength (1.55
μm) is not defined in the file header, to the CODE V file [Link] use this command:
bp2codev –l1.55 [Link] [Link]
Note that the phase in the WFR output file is always wrapped.
Syntax:
codev2bp supports the following syntax and options:
usage:
codev2bp input-file-name output-file-name ("Complex" input)
codev2bp FIL-file-name [WFR-file-name] output-file-name ("INT" input)
options:
-? help - prints this message
-A interpret FIL data as amplitude instead of intensity
-P# output plot scripts (1=write script, 2=spawn script)
Usage:
Examples:
To convert the vector CODEV field contained in the file [Link] to the RSoft file format with a
prefix of field, use this command:
codev2bp [Link] field
These utilities are fully documented in the RSoft BSDF Utilities manual.
Syntax:
coatuf supports the following syntax and options:
usage: coatuf [options] <userprofile-file> <output-file>
options:
-? help - prints this message
-t# set thickness in all directions
-tx# set thickness in X
-ty# set thickness in Y
-tf# set thickness in F (function value)
-sx# set scale in X
-sy# set scale in Y
-sf# set scale in F (function value)
Options:
-? This option display help for this utility.
-t# Sets the coating thickness. The –t option can be used to set all
-tx#
directions equally, alternatively the individual options can also be
-ty#
-tf# used.
-s# Sets the scale factor for applying the coating. In many cases the
-sx#
data in the user function is normalized and will be scaled in one or
-sy#
-sf# more ways in the RSoft CAD. These options set the scale between
the coordinate system in the data file and the final desired
coordinate system. If these options are not set correctly, the
thickness will not have the correct thickness. The data in the file
typically has coordinates in the header to specify the X/Y extent of
the data and the data will have its own extent.
There are many cases, here are two simplest:
• For the case where the data in the file is in real coordinates, i.e.
Example:
To add a thickness of 0.3 μm in all directions to the user profile contained in the file
[Link] and save it in the file profile_coat.dat where the data in the profile uses the
normalized coordinate system (X/Y from -1 to 1, data form 0 to 1) but will have a final size of 10
μm in X, 4.5 μm in Y, and a uncoated thickness of 2.3 μm, use this command:
coatuf –t0.3 –sx5 –sy2.25 –sf2.3 [Link] profile_coat.dat
The profile_coat.dat file can then be used as a height profile for a second segment in the
CAD that is positioned at the same location as the uncoated segment.
Syntax
disperse supports the following syntax and options:
usage: disperse [options] neffdatafile
options:
-v view derivative data in Notepad
-p plot derivative data in WinPlot
-b compute derivatives of beta vs k instead of neff vs x
-g compute group velocity and dispersion vs lambda
-x# x data is (0=lambda,1=1/lambda,2=k) (default=0)
-c y data is complex (i.e. "nk" data)
-k output nimag if present
-fp# enable polynomial fit (default=disabled, # is order
[default=3])
The input file neffdatafile must contain effective index data as a series of columns, with the
first column containing wavelength/frequency data as indicated by the –x option.
Syntax
ffutil supports the following syntax and options:
usage: ffutil [options] [<ind-file>]
options:
--prefix $ prefix for near field files
--nu# set frequency (default=1.0)
--nphi# set number of phi points (default=72)
--ntheta# set number of theta points (default=36)
--nf-index# index of near field media (default=1.0)
--ff-use-planes$ near field planes to use (default=xp,xm,yp,ym,zp,zm)
--ff-preserve preserve near field files (default=0)
Usage
ffutil calculates multi-plane far-field with these options:
f (t ) = ck exp ( i 2 vk t ) + c.c.
k
FHA can efficiently extract the complex frequency and amplitude of those terms which fall
within a narrow frequency range.
This analysis can be performed directly at the command line using the utility fhakit. This can
be useful when you need to analyze a series that was not produced by an automated Q-Finder
calculation, or if you wish to analyze a signal in a different way to that performed by Q-Finder.
For example, from a single propagation, you could extract the complex frequencies of cavity
modes that occur in quite different frequency bands by running fhakit several times on the
same .tmn file. In contrast, because it searches dynamically for a resonance, Q-Finder focuses on
a single frequency band in each run.
Syntax
fhakit supports the following syntax and options:
• Extract complex frequencies and amplitudes using Fast Harmonic Analysis method:
fhakit -fha [options] filename prefix
Usage:
fhakit can be used in two modes, FHA or FFT, which are selected by the flag –fha or –fft. In
each case, fhakit reads data from a file <filename> and writes a list of detected peaks and
properties to a file named <prefix>_m.nufha or <prefix>_m.nufft, where m is an integer from
0 indicating the particular set of columns being analyzed. Intermediate output is written to a file
named <prefix>_fha.log.
In each mode, fhakit looks for all resonances in the bandwidth between numin and numax
whose amplitudes satisfy certain criteria discussed in the explanation of options below.
The output files contain the following data: resonance index, complex angular frequency,
complex frequency, complex amplitude, quality factor, an internal consistency error, the mean
“energy” of the resonance, and the fraction of total energy in the signal represented by this
resonance. The mean energy is simply the mean value of the norm of the function f:
1 N −1
f j (t )
2
E=
N j =0
In FFT mode, the imaginary parts of the frequency and the Q factor are not available and are
recorded as zeros. Further, the values of peak and fractional energy are not very meaningful.
However, in FFT mode only, the total energy in the band between numin and numax is recorded
in the header as the Bandwidth energy.
By default, fhakit interprets the zeroth column of a data file as the time variable (which must be
equally spaced) and reads real signal data from the first column. However, multiple columns
including the zeroth column may be analyzed using the –cols option and interpreted as complex
Options:
-help This option prints the help for this utility.
-q Sets quiet mode. In this mode, all output is written only to log
files. There is no text written to standard output.
-dt <float> Sets the value of the increment between time steps. This option is
required if the -cols option specifies that the zeroth column is to
be interpreted as data. Otherwise, it is optional and can be used
to scale frequencies differently to the default time step extracted
from the zeroth column.
-cols <string> This option takes a comma-separated list of positive integers that
specifies which columns of the file (counted from zero,) should
be analyzed. The first requested column produces data in the file
<prefix>_0.nufha, the second column produces
<prefix>_1.nufha, etc. If the -complex option is set, the
columns are treated as real and imaginary pairs and there must be
an even number of columns specified.
-toff <int> Number of time steps to ignore at the start of the time series. The
default is 0. This can be useful if the start of the time series is
noisier than the rest of the signal and gives rise to spurious weak
resonant peaks.
-tmax <int> Maximum number of time steps to include. This can be used to
truncate a signal which degenerates into noise at large values of
time. If both –toff and –tmax options are specified the range of
time steps sampled is[toff, tmax+toff).
-et <float> Specifies the relative threshold peak energy as fraction of the
energy of the largest accepted peak. Any peak accounting for less
than this fraction of the energy of the largest peak in the
frequency search range is discarded. The default is 10e-3. Use a
smaller value if you find peaks of interest are being ignored.
Syntax:
findpks supports the following syntax and options:
usage: findpks [options] <infile >outfile
pptions:
Options:
-n# Sets the maximum number of peaks to find. By default, 5 peaks are
found.
-t# Sets the threshold used to define a peak. This is set as a fraction of
the maximum peak value in the file, by default it is 0.01.
-m# Sets the number of peaks to use when determining the maximum
peak value.
-mx# Use only peaks with x > # when determining the maximum peak
value.
-minx# Output peaks with x > min or x < max
-maxx#
-x Exclude peak at x = 0.
-s# Sets a scale factor by which to multiple peak positions.
-v# Sets optional value to output before peak, useful for building data
files to be plotted.
The fitdisp utility allows users to create Lorentzian dispersion models from data files that can
be used with the Material Editor in the RSoft CAD. The data file should have two or three
columns: the first with frequency or wavelength data, the second with the real refractive index
data (epsilon or index), and a third optional column with the imaginary index data (epsilon or
index).
The fitdisp utility will display the coefficients for the material fit as well as create a file name
[Link] which will have the material defined in the Material Editor. This file can be opened in
the RSoft CAD, and using the Group Library described in Section 8.A.1, this material can be
transferred to other .ind design files.
The fitdisp utility is primarily useful for FullWAVE users who want to use a Pulse simulation
which requires the use of Lorentzian dispersion model. Users of other tools such as
DiffractMOD, BeamPROP, and/or FemSIM, of FullWAVE users using CW simulations, can use
the raw data directly in the Material Editor without having to use a curve fit.
Syntax:
fitdisp supports the following syntax and options:
options:
-? help - prints this message
-xtype# x data type, 0=Frequency(1/um), 1=Wavelength(um) (default=1)
-ytype# y data type, 0=Eps, 1=Index (default=1)
-xytype# sets xtype and ytype together
-o# order, i.e. # of Lorentzians to be used (default=1)
-epsinf# epsilon at infinite frequency (default=1)
-drude force first term to be Drude (c=0)
-x#,# set x range to fit (default=all data)
-v# verbosity (default=3)
-p# plot results, 0=none 1=.pcs 2=.pcs+spawn (default=1)
-out=$ prefix for output files (default="out")
-xtype# This option sets the type of X data in the data file. A value of 0
indicates frequency data in μm-1, and a value of 1 (the default)
indicates wavelength data in μm.
-ytype# This option sets the type of Y data in the data file. A value of 0
indicates epsilon data, and a value of 1 (the default) indicates index
data.
-xytype# This option provides a convenient way to set the X and Y data types
together.
-o# This option sets the number of Lorentzians to use for the curve-fit. By
default, one Lorentzian is used.
-epsinf# This option sets the epsilon value at infinite frequency and defaults to
a value of 1.
-x#,# This option sets the X data range to use for the fit. By default, all the
actual data in the file is used.
-out=$ This option sets the output prefix. Note that you must use an equal
sign for this option, e.g. –out=run3.
To attempt a 4 Lorentzian curve-fit of the refractive index data contained in a file [Link],
(which has three columns, frequency, real epsilon, and imaginary epsilon), use this command:
fitdisp –o4 –xytype0 –out=fit [Link]
Another example of material data curve fitting can be found in Tutorial 5 in the FullWAVE
manual.
Syntax
fwmodekit supports the following syntax and options:
• fwmodekit (-h|--help)
Prints version.
• fwmodekit (-s|--slice) (-x x0|-y y0|-z z0) --prefix <prefix> [--nobcs]
(ex|ey|ez|hx|hy|hz|eden|hden|tden) <fstfile> <indfile>
For a 3D simulation, extracts and plots a 2D slice of field component to a plot file.
For a 2D simulation, extracts and plots the entire domain to a plot file.
• fwmodekit (-f|--fslice) (-x x0|-y y0|-z z0) --prefix <prefix> [--nobcs] [-
-lightcone <lightcone k-radius>] (ex|ey|ez|hx|hy|hz|eden|hden|tden)
<fstfile> <indfile>
Extracts and plots fourier transform of slice of field component to a plot file.
• fwmodekit (--view3d) --prefix <prefix> (ex|ey|ez|hx|hy|hz|eden|hden|tden)
<fstfile> <indfile>
For a 3D simulation, extracts and plots a 3D view of the field components. No symmetry
boundary processing is applied.
• fwmodekit (--fileslice) --prefix <prefix> (-x x0|-y y0|-z z0) <slicefile>
<indfile>
Takes an existing slice file on disk and uses the boundary conditions to extend the file to the
full domain. The slice direction option (-x, -y or -z) is only required for slices taken from 3D
calculations and the value (x0, y0, z0) is not important and can be set to 0.
• fwmodekit (-c|--compare) <file1>.fst <file2>.fst
Compares fields in two fst files and writes their fractional difference to standard output.
• fwmodekit (-a|--analyze) <file1>.fst
U ( x ) dx
3
E
V=
max U E ( x )
where UE(x) is the electric energy density. The resonant frequency can be specified. This
helps to determine the required simulation length and is recommended though not required.
When fwmodekit detects a symmetry-based subdomain calculation, the volume is multiplied
by 2 for each direction in which symmetry conditions have been applied. This can be
suppressed using the option --nobcs.
Options:
-q This option enables ‘Quiet mode’ which suppresses display of
the generated file in a plot window.
WARNING: This utility can be used to terminate any running process, not just Synopsys
processes. Use at your own risk.
Note that this utility is only included on Windows operating systems. Linux systems typically
have a similar utility. Note that the Linux syntax may be different what is documented here,
please check the killall man page on your system.
Syntax
fwmodekit supports the following syntax and options:
killall <process_name>
Example:
To stop all RSoft CAD processes on your system, use this command:
killall bcadw32
GDS Utilities
RSoft .ind files can be converted to and from GDS masks via the gds2ind and ind2gds
utilities.
Syntax:
gds2ind supports the following syntax and options:
usage: gds2ind [options] gds-input-file-name [ind-output-file-name]
options:
-? help - prints this message
-i# show structure info only (#=hierarchy-level, default=1)
-n$ set structure name to process (default=last)
-l$ set layer name to process (default=all)
-h# set default layer thickness (default=1)
-xy import to XY plane
Options:
Options:
-0=$ Sets the output file, by default the input file name will be used.
-r# Sets the output resolution, defaults to the CAD preference.
-l$ Maps layer number 0 to #.
-d# Maps data type to #
Notes:
Many options can be set via symbols (name = value), including:
Symbol Description
gds_export_dir Sets the cross-section direction to export. A value of 1 = X
(YZ plane), 2 = Y (XZ plane), and 3 = Z (XY plane).
gds_export_pos Sets the export cross-section position.
gds_clipping Enables clipping the structure.
gds_clip_xmin Sets the clipping ranges. If unset or set to default, the
gds_clip_xmax
whole structure will output.
gds_clip_ymin
gds_clip_ymax
gds_clip_zxin
gds_clip_zmax
DXF Utilities
RSoft .ind files can be converted to and from DXF masks via the dxf2ind and ind2dxf
utilities. Use the -? option to view the options supported by each utility.
Syntax
mat2bp supports the following syntax and options:
usage: mat2bp input-file-name output-file-name
options:
-? help - prints this message
-x<range> set range in x (<range> = #,#)
-y<range> set range in y (<range> = #,#)
Usage
mat2bp converts a raw matrix of data contained in a data file into a file in the RSoft format
which could then be used as an index profile, input field, etc. Since the RSoft file format contains
information which relates the domain of the data, the user needs to provide this information in
order to convert the matrix into the RSoft format. The mat2bp utility supports these options:
-x#,# This option sets the X domain for the data file. The range should be
input as #,#, where the first number is the domain min, and the
second number is the domain max. These numbers will be used to
build the header for the new RSoft Data file that will be output.
-y#,# This option sets the y domain for the data file. The range should be
input as #,#, where the first number is the domain min, and the
second number is the domain max. These numbers will be used to
build the header for the new RSoft Data file that will be output.
The utility will automatically add the appropriate header lines to the file.
e.g. to covert the file [Link] into a RSoft file [Link], where the input file is defined over
an X range of (-10,10) and a Y range of (-1,6):
mat2bp –x-10,10 –y-1,6 [Link] [Link]
Syntax
mathmat supports the following syntax and options:
usage: mathmat <symbol_table_expr> [input_files]
options:
-help [show this message]
-longhelp [show full help]
-p <int> [output precision (default=10)]
-f [use fixed point format]
-nohead [disable header]
-trunc [truncate at shortest file]
-bp <string> [use symbol table from RSoft .ind file]
-sym <string> [define new symbols]
-maxy [in all columns (except 0), set output_val to ‘.’
if abs(output_val) > maxy]
Usage:
mathmat reads from standard input or a list of input files, performs operations on the columns
defined by a list of symbol table expressions and writes the answer to standard output. The
operations are performed on each row in the column separately. The columns in the first input
file are named 'a0', 'a1', 'a2',... The columns in the second input file are named 'b0', 'b1', 'b2',...
and so on. As a quick example, this command will take the average of columns 1 and 2 in a file
and write it as a function of column 0:
mathmat 'a0,(a1+a2)/2' [Link]
It is also possible to create commands that perform operations on entire files that have the same
shape. For example, this command will take the average of two files and write the results:
mathmat '(__a+__b)/2' [Link] [Link]
Referencing a column which does not exist or using more letter prefixes than there are input files
causes a fatal error.
These names are used in the symbol table expression which must be a comma separated list of
normal math expressions using these variable names.
Options:
-help These options display help for this utility.
-longhelp
-p <int> This option sets the output precision used. The default is 10 digits.
-trunc This option truncates the output data at the shortest file.
-bp <string> This option enables the use of symbols from an existing .ind file.
Examples:
eg. Take the average of columns 1 and 2, and write as a function of column 0:
mathmat 'a0,(a1+a2)/2' [Link]
eg. Take the average of columns 1 in two files, and write as a function of column 0 of first file:
mathmat 'a0,(a1+b1)/2' [Link] [Link]
Syntax
parutil supports the following syntax and options:
usage: parutil [options] <material> [<out-file>]
options:
-h help - prints this message
-prefix=$ output prefix (<out-file>=<prefix>_nk.dat)
-parfile=$ TCAD parameter file
-swbnode# TCAD node number for preprocessing parfile
-checkmat checks if material was found
parutil takes as input the material name, <material>, and creates a corresponding nk data file
containing wavelength dependent CRI information. The CRI information is either obtained from
the explicitly defined parameter file, -parfile, or from the material definition in the Sentaurus
database. If the material definition is found in the explicitly specified parfile it takes
precedence over the default definition in the Sentaurus database. If the parfile has
preprocessing or #include directives a valid Sentaurus Workbench node number, associated with
the RSoft tool, needs to be specified via the -swbnode option to preprocess the parfile. The
name of the output file, <out-file>, to be generated can either be explicitly specified as a
command line argument after <material>, or the output prefix to be used can be specified via
the -prefix option. If neither option is specified, then the name of the output file would be
<matname>_nk.dat. If the -checkmat option is selected it checks if the material is found either
in the explicitly specified parfile or in Sentaurus Device CRI library and prints it to standard
output; no n/k file gets created.
The Ray-Tracing Conversion Utility uses the bp2codev, codev2bp, and bdconv utilities to
perform the conversion. These utilities are documented in Appendix E. When using this utility,
note that some options such as the wavelength, index, etc. can be set via the Options button.
These options correspond to the same options that the command line utilities use.
Animations can be created using the utility described in this section or using the Export
Animation DataBROWSER feature described in Chapter 2 of the DataBROWSER manual.
Syntax:
rsanimate supports the following syntax and options:
usage: rsanimate [options] <file-list>
options:
-? help - prints this message
-o <file> set output file name (must include .gif or .mpeg
extension)
-p <opts> set additional plot options (could use @ to include
a script)
Options:
-? This option display help for this utility.
-o Sets the output file name. GIF and MPEG files are supported; the
names must include the .gif or .mpeg extension.
-p Add additional WinPLOT plot options to each plot.
Example:
To create an animation of the WinPLOT files [Link], [Link], and [Link] and save
it as [Link], use this command:
rsanimate –o [Link] [Link] [Link] [Link]
To create the same animation, but using the /zw WinPLOT command to automatically scale the
color scale to the data, use the command:
rsanimate –o [Link] –p /zw [Link] [Link] [Link]
Syntax:
rscombine supports the following syntax and options:
usage: rscombine [options] <output-file-prefix>
general options:
-? help - prints this message
-prefix=$ prefix used for data generation
-indfile=$ indfile used for data generation (default='prefix'.ind)
-srcspecfile=$ source spectrum filefrequency only)(default=whitelight)
Example:
To combine frequency simulation results calculated by running file [Link] with an Output
Prefix of run4, calculating the Absorbed Photon Density, an input intensity of 4, and over a
wavelength range of 0.3 to 2.2 μm, saving results with a prefix new_results, use this command:
rscombine –prefix=run4 -indfile=[Link] -apd -spec1 -int4 -min0.3
-max2.2 new_results
See Appendix H for details on supported Python versions and usage scenarios.
This utility can be run standalone and is also automatically used when processing Circuit
References that contain .py files or running MOST User Simulators. See Appendix H for details
on supported Python versions.
Syntax:
rspython supports the following syntax and options:
usage: rspython <python-file>
Syntax:
shufflemat supports the following syntax and options:
usage: shufflemat [options] [output_files]
options:
-help [show this message]
-longhelp [show full help]
-t [transpose input data]
-ec <string> [extract named columns]
-pc <string> [permute named columns]
-er <string> [extract named rows]
-pc <string> [permute named rows]
-elt <string> [extract named element]
-p <int> [output precision (default=10)]
-f [use fixed point format]
-h [keep column titles]
-numsym <string> [treat this string in data files as a null value]
-nullval <float> [set internal value for null symbols (default 0)
shufflemat reads from standard input, rearranges or extracts the columns or rows and writes to
specified output files, or to standard output if no output files are named. The columns and rows
in the input file are denoted by integers starting from 0. As a quick example, this command will
write columns 1, 2, and 3 of the file [Link] to standard output:
shufflemat -ec 0,2,3 < [Link]
shufflemat write output to standard output (usually the terminal or command prompt). To save
data in a new file, use the redirection operator ‘>’. For example, the simple command above can
be saved in a file [Link] with this command:
shufflemat -ec 0,2,3 < [Link] > [Link]
Options:
-help This option displays the short help for this utility.
-longhelp This option displays the long help for this utility.
-ec <string> The ‘extract’ options take a string argument specifying which
-er <string>
columns (-ec) or rows (-er) should be output. All other
columns/rows are dropped. The argument consists of a comma
separated list of column numbers. Ranges may be specified using a
hyphen (-) and multiple lists may be separated by a semicolon (;)
Each range is output to a different filename specified on the
command line. There can be no white space in the range
specifications. If semicolons are used, the extraction string must be
protected from the shell by quotes (double-quotes for
DOS/Windows).
-pc <string> The ‘permute’ options write all input to output but performs
-pr <string>
permutations or cyclic rotations of specified columns (-pc) or rows
(-er). Permutations are expressed as a space-separated list of
integers inside parentheses. Several permutations can be expressed
together, but may have no common column numbers. Permutations
lists separated by semicolons will be directed to different output
files. The permutation string must be always protected from the
shell by quotes (double-quotes for DOS/Windows).
-elt <string> This option extracts a specific element from a file. The string
argument should be the row/column of the element.
-p <int> This option sets the output precision used. The default is 10 digits.
-numsym Sets the string used in the data file(s) for null values.
Examples:
eg. Place the transpose of the file [Link] in the file [Link].
shufflemat -t < [Link] > [Link]
eg. Rotate columns 2, 3 and 6, and columns 4 and 5, writing to standard output:
shufflemat -pc "(2 3 6)(4 5)" <[Link]
eg. Rotate columns 2, 3 and 6 in one output file and columns 4 and 5 in another file:
shufflemat -pc "(2 3 6);(4 5)" <[Link] [Link] [Link]
eg. Extract element 2,3 from one file, writing to standard output:
shufflemat –elt2,3 <[Link]
Syntax:
tailmon supports the following syntax and options:
usage: tailmon [options] <monfile
options:
-v<first-value>
Options:
-v# Replace the value in the first column with #
Notes:
This utility uses typical redirection inputs/outputs, and takes input via the < operator, and will
write output to the screen or a file via the > operator (write new file) or >> operator (append to
file).
Syntax:
tdrutil supports the following syntax and options:
usage: 1. Display Information:
tdrutil [options] <[Link]>
2. Extract/Convert Datasets to a Tensor Mesh:
tdrutil [options] <[Link]>[:<dataset>] <[Link]>
3. Extract Datasets to a Compatible Mesh:
tdrutil [options] <[Link]> <[Link]> <[Link]>
4. Generate Absorbed Photon Density from RSoft Monitor:
tdrutil -apd [options] <[Link]> <[Link]>
5. Generate an RSoft CAD file with dynamic reference to a TDR file:
tdrutil [options] <[Link]> <[Link]>
general options:
-? help - prints this message
-info# set information level (from 1 to 5, default=2)
Options:
The options for tdrutil are broken up into the 5 use scenarios. Each use is described here along
with an example.
-info# Sets the information level used in utility log. Values are from 1 to
5, the highest level of detail. The default is 2.
[:<dataset>] Sets the name of the dataset to extract. If no name is specified, the
-var=$
first applicable set will be extracted. The -var=* option will
extract all datasets.
-getdnk Extracts the n/k index perturbation from the carrier densities in the
input TDR file if present. The model used for the extraction is
documented in Section 8.I. Note that the options -lambda, -fca,
and -fca_file can be used to set the wavelength, fca_method,
and fca_file respectively. See Section 8.I for complete details.
-sc# Scales the dataset by a value.
-tgf# These options set the output tensor grid resolution:
-tgs#
-tg[x|y|z] • The -tgf# option sets the new tensor grid relative to the
original grid by a factor for all directions.
• The -tgs# option sets the new tensor grid in μm for all
directions.
• The -tgx#, -tgy#, and -tgz# options set the new tensor grid
will extract the ‘absorption’ dataset from the file [Link], set the tensor grid to 0.01 μm
for all coordinates, and save the results in the new TDR file [Link].
will extract the dataset from the file [Link], put it on the mesh contained in the file
[Link], and save it as the new TDR file [Link].
P
APD = in Abs 1012
hc
Where Abs is the absorption calculated by the simulator, and Pin is the input power in Watts.
Note that the Launch Power should be set to 1 and Launch Normalization should be set to Unit
Power.
The syntax for this usage and associated options are:
tdrutil -apd [options] <[Link]> <[Link]>
will compute the absorbed photon density from the absorption profile in the file
[Link] at a wavelength of 0.6 μm and save it in the file [Link].
Note that this process is automated when adding an RSoft step to an existing SWB project.
Simply Edit the RSoft CAD file for the RSoft step and you will be prompted to select a boundary
TDR file and the TDR Utility will create the RSoft CAD .ind file.
This usage performs the bootstrap process required to generate an RSoft .ind design file from a
boundary TDR file. This process is only required once when adding an RSoft simulator to a
Sentaurus Workbench workflow. The geometry of the structure will be automatically and
dynamically read from the TDR file. Note that it may be necessary to add additional CAD
objects to the design for measurement/output, etc. See the TCAD Tutorials in the MultiPhysics
Utility and TCAD Sentaurus Interface manual for examples of this usage.
The syntax for this usage is:
tdrutil [options] <[Link]> <[Link]>
will create the file [Link] that is dynamically linked to the boundary TDR file
myTDRFile_bnd.tdr.
Example:
For example, the properties of the fundamental mode of a typical single mode fiber at λ = 1.55
μm can be found by running wgmode and answering the questions with 2, 0, 1, 1.55, 1.44, 1.45,
8.2 as shown here (the answers used for this example are highlighted below in bold):
Waveguide Structure [1=Slab,2=Fiber,3=Diffused] [ 1 ] : 2
Azimuthal Mode [m=0,...] [ 0 ] : 0
Radial Mode [n=1,...] [ 1 ] : 1
Wavelength [microns] [ 1.000000 ] : 1.55
Index of Clad (nclad) [ 1.000000 ] : 1.44
Index of Core (ncore) [ 1.010000 ] : 1.45
Diameter (d) [ 1.000000 ] : 8.2
The waveguide parameters for mode LP(0,1) are:
normalized frequency (V) : 2.8254066
normalized mode index (b) : 0.62111807
mode effective index (Neff) : 1.4462193
longitudinal propagation constant (Beta) : 5.8624929
transverse propagation constant (Kappa) : 0.42417888
transverse decay constant (Gamma) : 0.54310547 (1/G=1.841)
The output shown here shows, for example, that the computed mode effective index (Neff) is
1.4462193.
Color Scales
Color scale files provide a means to customize data presentation using RSoft products. All of the
simulation products that use the RSoft CAD are capable of producing large amounts of data.
Choosing which data to present and how to present it according to needs and taste is an
important issue. Scale files are located in the directory <rsoft_dir>\RLOTDIR. Several default
scale files are included, as well as several example files. You can also create and add your own
custom files.
Figure 1: A simple fiber mode profile as seen in WinPLOT, along with the default scale file
used by BeamPROP to display field profiles.
Figure 2: Effect of the color shade number. a) Color shades = 1, b) 4, and c) 32.
The first column contains the range information, and the second column contains the color
lookup information. As stated before, the range information is only specified by the first and last
Figure 3: The predefined color keywords currently recognized with their corresponding RGB
values.
An example of this type of color scale is the BeamPROP default scale shown in Fig. 1.
Polarization Conventions
While the concept of polarization gives rise to many of the most interesting effects in
electromagnetism, the labeling of polarizations is a common cause of confusion since there is no
universal agreement across different branches of photonics. This section describes the definitions
used by RSoft software.
G.A. Background
First, some background information.
1D Structures:
In 1D, that is for structures in which the refractive index varies along only one dimension,
Maxwell’s equations are always separable into two sets of three equations. In one set of
equations, the electric field is oriented along one of the invariant directions (i.e. the direction
along which the refractive index does not vary); in the other the magnetic field lies along the
invariant direction.
The simplest example of such a structure is the slab waveguide in which the field propagates
along the z direction say, and the refractive index n(x) is a function of only x. For this case, it is
universally agreed that TE polarization refers to the electric field lying along the invariant
direction y, and TM polarization refers to the magnetic field lying along y. Note that we could
2D Structures:
In 2D structures, i.e. structures in which the refractive index varies as a function of two
dimensions, Maxwell’s equations are again separable, but only if the wave vector of the
propagating solution lies in the plane of variation. This means that for RSoft tools that model
propagation along a waveguide/fiber (BeamPROP, DiffractMOD, ModePROP, and FemSIM) the
equations are in fact not strictly separable. For the tools that permit propagation in the plane
(FullWAVE and BandSOLVE) the equations are separable. The literature conventionally uses
the labels TE to refer to states in which the electric field lies within the plane of variation, and
TM to refer to states in which the electric field lies perpendicular to the plane of variation. As we
see below, however, in the RSoft CAD these notations are reversed for consistency.
3D Structures:
In 3D structures, i.e. structures in which the refractive index varies in all three dimensions,
Maxwell’s equations are completely coupled and as a result, there is never a separation into TE
and TM states.
2D CAD Designs:
The most basic structures that can be drawn in the RSoft CAD are waveguides that vary as a
function of only x. The classic slab waveguide is the simplest example of this class. As there is
no variation in the y-direction, the previous discussion indicates that these waveguides fall into
the category of 2D CAD designs. For such structures, it is familiar from elementary waveguide
optics that in a TE mode, the electric field points along y and in a TM mode, the magnetic field
points along y. In this case the interpretation of ‘TE’ is the literal meaning: the electric field is
transverse to the direction of propagation (the wave vector k,) and implicitly the magnetic field is
not transverse. Similarly, ‘TM’ literally means that the magnetic field is transverse to the
direction of propagation and the electric field is not.
For 2D CAD designs, this is the precise definition used in all RSoft tools except BandSOLVE:
‘TE’ means that the electric field lies along Y; ‘TM’ means that the magnetic field lies along Y.
(The 2D rule for BandSOLVE is discussed below.) Observe that we could also label these states
by the direction in which the electric field points. That is, TE polarization could equivalently be
called y-polarization and TM polarization called x-polarization. This is important when we turn
to 3D problems.
3D CAD Designs:
Now consider 3D CAD designs: those for which the waveguides vary in two transverse
dimensions. For modal propagation along these waveguides, Maxwell’s equations are not
separable and the literal meaning of TE and TM modes cannot be applied—virtually all the
modes are hybrid and neither field is transverse to the direction of propagation. This point is
crucial so let us restate it more forcefully:
For all 3D dielectric waveguides, there are no modes that are truly TE or TM.
The only counter-examples to this statement are the TE0m and TM0m modes of azimuthally-
invariant waveguides such as the step-index fiber or concentric Bragg (“Omniguide”) fibers, and
even then, most of the observed modes, including the fundamental mode, are hybrid LP-like
states.
Nevertheless, in weakly guided structures (and even in quite strongly guided structures,) the
modes can be close to transverse and the terms TE and TM are widely applied to modes of such
structures. We therefore need to be precise about the way the labels are to be applied. The
argument runs as follows:
This is the classic rib waveguide that is easily produced in the RSoft CAD. Then for a ‘quasi-TE’
mode, the longitudinal field Ez is small, and the major field Ex is much larger than the minor field
Ey. For a ‘quasi-TM’ mode, the longitudinal field Ez is still small, but the major field is now Ey
and the minor field is Ex. So in 3D simulations, the labels TE and TM should strictly be
interpreted as quasi-TE and quasi-TM. This provides the explanation for one of the more
confusing aspects of the RSoft CAD environment: for 3D structures, TE means the electric field
is oriented predominantly along x, and TM means the field is oriented predominantly along y.
While this appears to be in conflict with the 2D definitions, for which TE means the electric field
points along Y, the rules are natural in the sense that in each case, TE refers to the polarization
for which the electric field predominantly points along the transverse direction in which the
index profile is most slowly varying. This is ‘natural’ only because most standard layered 3D
waveguides drawn in the RSoft CAD tend to vary slowly along x. If for perverse reasons, you
manage to construct a rib waveguide in which the layers are oriented along the y direction, then
to find the mode that would conventionally be labeled quasi-TE, you will need to use the TM
polarization setting.
2D Designs:
In 2D designs, TE means that the electric field lies strictly along Y; TM means that the magnetic
field lies strictly along Y. In terms of the electric field, we can also label these as ‘y-polarization’
and ‘x-polarization’ respectively.
3D Designs:
In 3D designs there are (virtually) no true transverse modes, so we interpret the TE and TM
buttons as meaning quasi-TE and quasi-TM for structures that have a natural orientation within
the CAD. Their operational meaning is simply:
• For TE, the electric field is launched predominantly along x. This can be equivalently labeled
as x-polarization.
• For TM, the electric field is launched predominantly along y. This can be equivalently
labeled as y-polarization.
Remember also that in FullWAVE and full-vector BeamPROP, the field components are all
coupled so that for certain polarization-rotating structures, the fields will not necessarily
maintain these orientations during propagation.
G.D. Complications
There are some variations on these rules for certain tools:
BeamPROP:
For BeamPROP, please note that the handling of polarization is controlled by the Vector Mode
setting. Please see the BeamPROP manual for more details.
3D FullWAVE:
In 3D FullWAVE, the definition of the launch polarization is complicated by the ability to rotate
the propagation direction of the incoming field to any angle. In this case, the rules stated above
are to be interpreted within the rotated launch frame.
3D DiffractMOD:
In 3D DiffractMOD, the definition of the launch polarization is complicated by the ability to
rotate the propagation direction of the incoming field to any angle as well as the definition of the
primary direction. The rules stated above are to be interpreted within the rotated frame. In
addition for 3D DiffractMOD computations, the polarization is defined by value of the
Polarization Angle field. An angle of 0 corresponds to p polarization while 90 corresponds to s
polarization. For normal incidence and a primary direction along +Z, this implies that with
Polarization Angle=0 the electric field lies along X, while for Polarization Angle=90 the
electric field lies along Y. Please refer to the DiffractMOD manual for further details.
Python Usage
In addition to rspython, note that it is possible to use the API’s described in subsequent sections
with compatible distributions of Python from another source.
Please contact photonics_support@[Link] with questions.
read(filename)
write(filename)
Writes an .ind design file to the specified filename (string), for example:
[Link](‘[Link]’)
set_symbol(name, value)
Set a symbol with the specified name and value. The name is a string, the value can be a
number or a standard string expression that can use the built-in functions and/or other
symbols. Examples:
c.set_symbol(‘Period’, 0.5)
c.set_symbol(‘Radius’, ‘0.35*Period’)
delete_symbol(name)
load_settings(file)
Load settings from specified file (string). Equivalent to the Load Settings option in the
Global Settings dialog (see Section 3.B). Example:
c.load_settings(‘[Link]’)
set_exports(exports)
set_default tags(tags)
Set default tags; tags is a space-separated list of symbols to include. See Section 6.K.5
for details about default tags. Example:
c.set_default_tags(‘grid_ppw_x=35 grid_size_y=0.001’)
Adds a material to the design file from one of several sources, depending on the
arguments.
Parameter Description
Parameter Description
position A tuple that sets the starting (X,Y,Z) position of the
segment. This is the starting vertex. The values can be
numbers or standard expression strings.
dimensions A tuple that sets the dimensions (width/height) of the
starting vertex. If not set, a default value of
(‘width’,’height’) is used. The values can be
numbers or standard expression strings.
Parameter Description
position A tuple that sets the starting (X,Y,Z) position of the
segment. This is the starting vertex. The values can be
numbers or standard expression strings.
dimensions A tuple that sets the dimensions (width/height) of the
starting vertex. If not set, a default value of
(‘width’,’height’) is used. The values can be
numbers or standard expression strings.
Adds a segment (see Chapter 4) to the design with the following properties:
Parameter Description
position A tuple that sets the starting (X,Y,Z) position of the
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
seg1 = c.add_segment(position=(0,0,0),offset=(0,0,‘L’))
c.add_segment(position=(0,0,0),offset=(0,0,‘L’),dimensions=(0.5,0.2)
Adds an s-bend segment (see Section 6.B.3) to the design with the following properties:
Parameter Description
position A tuple that sets the starting (X,Y,Z) position of the
sbend. This is the starting vertex. The values can be
numbers or standard expression strings.
offset A tuple that sets the (X,Y,Z) offset of the ending vertex.
This is the offset between the starting vertex and ending
vertex. The values can be numbers or standard
expression strings.
dimensions A tuple that sets the dimensions (width/height) of the
starting vertex. If not set, a default value of
(‘width’,’height’) is used. The values can be
numbers or standard expression strings.
dimensions_end A tuple that sets the dimensions (width/height) of the
ending vertex. If not set, the default value is equal to
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
sbend1 = c.add_sbend(position=(0,0,0),offset=(0,0,‘L’),sbend_type=2)
c.add_sbend(position=(0,0,0),offset=(0,0,‘L’),dimensions=(0.5,0.2)
Adds an arc segment (see Section 6.B.3) to the design with the following properties:
Parameter Description
position A tuple that sets the starting (X,Y,Z) position of the arc.
This is the starting vertex. The values can be numbers or
standard expression strings.
arcinfo A tuple that sets the radius, initial angle, and final angle
as (radius, angle-initial, angle-final). The
values can be numbers or standard expression strings;
angles should be in degrees.
dimensions A tuple that sets the dimensions (width/height) of the
starting vertex. If not set, a default value of
(‘width’,’height’) is used. The values can be
numbers or standard expression strings.
dimensions_end A tuple that sets the dimensions (width/height) of the
ending vertex. If not set, the default value is equal to
dimensions. The values can be numbers or standard
expression strings.
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
arc1 = c.add_arc(position=(0,0,0),arcinfo=(‘R’,0,90))
c.add_arc(position=(0,0,0),arcinfo=(‘R’,0,45),dimensions=(0.5,0.2)
Parameter Description
position A tuple that sets the (X,Y,Z) position of the lens. The
values can be numbers or standard expression strings.
dimensions A tuple that sets the dimensions (width/height) of the
lens. If not set, a default value of (‘width’,’height’)
is used. The values can be numbers or standard
expression strings.
shape An integer that sets the lens shape: a value of 0 (default)
correspond to a cylinder, a value of 1 corresponds to a
sphere.
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
sphere1 = c.add_lens(position=(0,0,0), dimensions=(‘D’,‘D’) shape=1)
Adds a circle (see Section 5.C) to the design with the following properties:
Parameter Description
position A tuple that sets the (X,Y,Z) position of the circle. The
values can be numbers or standard expression strings.
dimensions A tuple that sets the dimensions (width/height) of the
circle. If not set, a default value of
(‘width’,’height’) is used. The values can be
numbers or standard expression strings.
shape An integer that sets the circle shape: a value of 0
(default) correspond to a cylinder, a value of 1
corresponds to a sphere.
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
circle1 = c.add_circle(position=(0,0,0), dimensions=(‘D’,‘D’)
shape=1)
Parameter Description
position A tuple that sets the (X,Y,Z) position of the polygon.
The values can be numbers or standard expression
strings.
X Defines the points of the polygon via x/y arrays or a data
y
file. The x/y arrays should be 1D arrays of the same
file
length.
angle Sets the rotation angle for the polygon in degrees.
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
polygon1 = c.add_polygon(position=(0,0,0), file=’[Link]’,
angle=45)
Adds a mark (See Section 5.E) to the design with the following properties:
Parameter Description
position A tuple that sets the (X,Y,Z) position of the mark. The
values can be numbers or standard expression strings.
dimensions A tuple that sets the dimensions (width/height) of the
mark. If not set, a default value of
(‘width’,’height’) is used. The values can be
numbers or standard expression strings.
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
mark1 = c.add_mark(position=(0,0,0))
Parameter Description
name The name of the text block.
Adds a vertex (See Section 6.F.7) to the design with the following properties:
Parameter Description
position A tuple that sets the (X,Y,Z) position of the vertex. The
values can be numbers or standard expression strings.
dimensions A tuple that sets the dimensions (width/height) of the
vertex. If not set, a default value of
(‘width’,’height’) is used. The values can be
numbers or standard expression strings.
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
vertex1 = c.add_vertex(position=(0,0,0))
Adds a circuit reference (See Section 6.F) to the design with the following properties:
Parameter Description
position A tuple that sets the (X,Y,Z) position of the circuit
reference. The values can be numbers or standard
expression strings.
file Sets the file to be used for the circuit reference.
angle Sets the rotation angle for the polygon in degrees.
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
Examples:
ref1 = c.add_circuitref(position=(0,0,0))
Adds a circuit reference (See Section 6.F) to the design with the following properties:
This function returns a RSoftComponent() object which can be further configured, see
Section H.B.2.
This function enables users to connect components/vertices using the reference options
described in Section 4.B.1.
Parameter Description
from_component The RSoftComponent() object to attach to.
to_component The RSoftComponent() object to attach.
to_vertex Sets the vertex number to attach to.
from_vertex Sets the vertex number to attach.
attach_angles Set to 1 to dynamically pass the segment angle.
attach_dimentions Set to 1 to dynamically pass the segment dimensions.
Example:
seg1 = c.add_segment()
seg2 = c.add_segment()
[Link](seg2,seg1)
attach_portmonitors()
attach_portvertices()
color()
dimensions( dimensions=() )
Sets the dimensions of the component vertex, specifically a tuple that sets the dimensions
(width/height). If the component has multiple vertices, this option sets the starting vertex
dimensions. See vertex() function to set properties of other vertices. The values can be
numbers or standard expression strings.
For example:
circle1 = c.add_circle(position=(0,0,0), shape=1)
[Link]( (‘D’,’D’) )
draw_priority()
mask_layer()
material()
orientation()
Sets the segment orientation of the component. Set to 0 for Z Axis, for Seg Axis, and 2
for Extended.
For example:
seg1 = c.add_segment( position=(0,0,0) )
[Link](0)
Sets the polygon information for polygon segments. The x and y arguments are double
1D numeric arrays of the same length.
For example:
seg1 = c.add_segment( position=(0,0,0) )
[Link](‘POLYGON’)
[Link](sides=8)
Sets the position of the component vertex, specifically a tuple that sets the (X,Y,Z)
coordinates. If the component has multiple vertices, this option sets the starting vertex
dimensions. See vertex() function to set properties of other vertices. The optional
ref_type option sets whether the position is absolute (0) or relative (-1). The values can
be numbers or standard expression strings.
For example:
circle1 = c.add_circle(shape=1)
[Link]( (1,1,1) )
priority()
Sets the rotation angles of the component in degrees, specially a tuple with the three
rotation angles phi, theta, and psi that are used to rotate extended segments (see Section
6.K.2). The values can be numbers or standard expression strings.
For example:
seg1 = c.add_segment( position=(0,0,0) )
[Link]( (0,90,0) )
set_name()
An advanced generic function to set any component property whose keyword in a .ind
file is known. The optional sub argument sets a nested property. Note: you must use a
valid property name; setting an invalid property name will result in a parse error when the
design file is used.
For example:
seg1 = c.add_segment( position=(0,0,0) )
seg1.set_property(‘sidewall_angle’, 80)
set1.set_property(‘combine_mode’, ‘COMBINE_ADD’)
set_symbol(name, value)
Set a symbol with the specified name and value in the local symbols of a circuit
reference component. The name is a string, the value can be a number or a standard
string expression that can use the built-in functions and/or other symbols. Examples:
c.set_symbol(‘Period’, 0.5)
c.set_symbol(‘L’, ‘2*width’)
delete_symbol(name)
Deletes a symbol with specified name (string) from the local symbols of a circuit
reference component, for example:
c.delete_symbol(‘Period’)
set_tags()
set_comment() )
structure()
For example:
seg1 = c.add_segment( position=(0,0,0) )
[Link]( ‘FIBER’ )
vertex( vindex=0 )
Returns an RSoftVertex() object for the requested vertex index vindex. See Section
H.B.3 for details on this type of object and how to set the dimensions and position of the
vertex.
For example:
seg1 = c.add_segment( position=(0,0,0) )
vertex = [Link](1)
dimensions( dimensions=() )
Sets the dimensions of the vertex, specifically a tuple that sets the dimensions
(width/height). The values can be numbers or standard expression strings.
For example:
seg = c.add_segment(position=(0,0,0))
vertex2 = [Link](1)
[Link]( (‘D’,’D’) )
Sets the position of the component vertex, specifically a tuple that sets the (X,Y,Z)
coordinates. The optional ref_type option sets whether the position is absolute (0) or
relative (-1). The values can be numbers or standard expression strings.
For example:
seg = c.add_segment()
vertex2 = [Link](1)
[Link]( (0,0,0) )
An advanced generic function to set any material property whose keyword in a .ind file
is known. The optional sub argument sets a nested property. Note: you must use a valid
property name; setting an invalid property name will result in a parse error when the
design file is used.
For example:
mat = c.add_material( matname=’MyMat’)
mat.set_property(‘anisotropic’,1,’optical’)
mat.set_property(‘nr_xx’,1.5,’optical’)
mat.set_property(‘nr_yy’,1.6,’optical’)
mat.set_property(‘nr_zz’,1.5,’optical’)
Example 1:
This example creates an 8x8 array of segments in the XY plane and saves as [Link]:
from rstools import RSoftCircuit
#Constants
N = 8
file = ‘[Link]’
#Create new RSoftCircuit object
c = RSoftCircuit ()
#Set some symbols
c.set_symbol(Period, 0.5)
c.set_symbol(Radius, ‘Period*0.3’)
c.set_symbol(D, ‘2*Radius’)
c.set_symbol(Length, 10)
for i in range(N):
for j in range(N):
x0 = (‘{}*Period’.format(i))
y0 = (‘{}*Period’.format(j))
z0 = 0
c.add_segment( (x0,y0,z0), (0,0,’Length’), (‘D’,’D’), (‘D,‘D’) )
#Save .ind file
[Link](file)
Example 2:
This example creates an NxN array of segments in the XY plane. Note that this example must be
run via a circuit reference, if set, the Local Symbol Arg1_num will be used to set the array size
(N).
from rstools import RSoftCircuit
def rsoft_main(ind_file=’’,
N=int(10)):
#Create new RSoftCircuit object
c = RSoftCircuit ()
Example 3:
This example implements the same structure in Example 2, but sets the Period, Radius, and
Length as Hierarchy Exports which can then easily be set in the Local Symbols table of the
circuit reference.
from rstools import RSoftCircuit
def rsoft_main(ind_file=’’,
N=int(10)):
#Create new RSoftCircuit object
c = RSoftCircuit ()
#Set some symbols
c.set_symbol(Period, 0.5)
c.set_symbol(Radius, ‘Period*0.3’)
c.set_symbol(D, ‘2*Radius’)
c.set_symbol(Length, 10)
#Set Hierarchy Exports
c.set_exports(‘Period’, ‘Radius’, ‘Length’)
for i in range(N):
for j in range(N):
x0 = (‘{}*Period’.format(i))
y0 = (‘{}*Period’.format(j))
z0 = 0
c.add_segment( (x0,y0,z0), (0,0,’Length’), (‘D’,’D’), (‘D,‘D’) )
#Save .ind file
[Link](ind_file)
Example 4:
See This example creates a tapered waveguide, including port monitors.
from rstools import RSoftCircuit
# inputs
# structure properties
opts = {}
opts['Lin'] = 0.5
opts['Ltaper'] = 2
opts['W1'] = 0.5
opts['W2'] = 1.0
opts[‘H’] = ‘height’
# simulation settings
opts['Dx'] = 0.02
opts['Dy'] = opts['Dx']
opts['Dz'] = opts['Dx']
opts['boundary_gap_x'] = 0.5
opts['boundary_gap_z'] = 0
opts['color_outline'] = -1
opts['domain_max'] = 'Lin*2+Ltaper'
opts['bpm_output_monitors'] = 1
opts['bpm_output_monitors_warned'] = 1
opts['free_space_wavelength'] = 1.55
opts['sim_tool'] = 'ST_FULLWAVE'
opts['grid_nonuniform'] = 1
opts['grid_size'] = 'Dx'
opts['grid_size_y'] = 'Dy'
opts['step_size'] = 'Dz'
opts['eim'] = 1
opts['launch_port'] = 1
opts['polarization'] = 0
opts['plot_aspectratio'] = 1
# add/attach components
wg_in = c.add_segment(offset=(0,0,'Lin'), dimensions=('W1', 'H'))
wg_taper = c.add_segment(offset=(0,0,'Ltaper'), dimensions=('W1',
'H'), dimensions_end=('W2', 'H'))
wg_out = c.add_segment(offset=(0,0,'Lin'), dimensions=('W2', 'H'))
[Link]('%[Link]'%name)
H.C.1. Reference
Create a new RSoftUserFunction object using this code:
from rstools import RSoftUserFunction
uf = RSoftUserFunction()
read(filename)
Reads a data file (string filename) into the object, for example:
[Link](‘[Link]’)
write(filename)
The types are in the data header of the file, they are 1 for amplitude, 2 for real, 3 for
imaginary, 4 for real/imag, and 5 for amp/phase.
isreal()
Returns 1 if the data in the object is real (i.e. not complex), for example:
if ([Link]()):
print(‘Data is real’)
iscomplex()
Returns a tuple of the arrays within the object, returns multiple arrays depending on rank
of the data object. For example:
[Link](‘[Link]’)
(x,y,f) = uf.get_arrays()
where [Link] is a 2D data file and x, y, and f will contain the x, y, and data arrays
from the file.
set_arrays(x,f)
set_arrays(x,y,f)
set_arrays(x,y,z,f)
eval(x)
eval(x,y)
eval(x,y,z)
Returns the real value of the function at the given x, y, and/or z coordinate value. The
data in the object will be linearly interpolated, similar to the userdata() functions
described in Section C.F.6. Note: this function returns 0 if the x, y, or z coordinates
outside the range defined in the data object. Example:
value = [Link](1.5)
eval_complex(x)
eval_complex(x,y)
eval_complex(x,y,z)
Returns the complex value of the function at the given x, y, and/or z coordinate value.
The data in the object will be linearly interpolated, similar to the userdata() functions
described in Section C.F.6. Note: this function returns 0 if the x, y, or z coordinates
outside the range defined in the data object. Example:
get(i)
get(i,j)
get(i,j,k)
Returns the value of the data at the given i, j, and/or k position in the function array, for
example:
value = [Link](10) #value is the 10th point in the function
Returns the rank (dimension) of the data in the object, for example:
if ([Link]() == 2):
#do something if the data is 2D
nx()
ny()
nz()
x(i)
y(i)
z(i)
Returns the X, Y, or Z coordinate for the ith position in the coordinate array, for example
x_coordinate = uf.x(4)
unwrap_phase(array)
Unwraps phase data in the array. See Section H.C.2 for an example.
Example 1:
This example opens the data file [Link] and evaluates the function at x=0.25:
from rstools import *
#Create new RSoftUserFunction object
uf = RSoftUserFunction()
#Open data file
[Link](‘[Link]’)
#Evaluate data at x = 0.25 (using interpolation as necessary)
value = [Link](0.25)
#Print value
print(value)
Example 3:
This example illustrates how to unwrap phase in file [Link] and write the unwrapped data to
the file data_unwrapped.dat.
from rstools import *
#Create new RSoftUserFunction object
uf = RSoftUserFunction()
#Open data file
[Link](‘[Link]’)
#Get arrays
(x,f) = uf.get_arrays()
#Unwrap phase in f array
unwrap_phase(f)
#Write arrays back to object
uf.set_arrays(x,f)
#Save unwrapped data to new file
[Link](‘data_unwrapped.dat’)
This appendix summarizes the changes from previous versions of the RSoft CAD Environment.
Notes for versions not listed here can be found in the BeamPROP manual.
Version 2014.09
• With this release, the RSoft Component Suite will no longer officially support 32-bit
operating systems, Windows XP, Windows Vista, or Red Hat Enterprise Linux (RHEL) 4. If
you have any questions, please contact rsoft_support@[Link].
• A new Configure Licensing utility (Windows only) provides an easy way to reconfigure
licensing options. This includes installing a new license key file and restarting SCL. This
option can be opened from the Start Menu and requires administrative rights.
• Several improvements to SCL licensing implementation.
• Updated Linux installation routine.
• Added a new Tree Control to the RSoft CAD window. The tree lists all elements in a design,
including components, circuit references, monitors, pathways, launch fields, user profiles and
Version 2013.12
• All products in RSoft’s Component Design Suite have been increased to version 2013.12
which is the Synopsys standard.
• Updating Licensing to use Synopsys Common Licensing (SCL).
• Updated Ray-Tracing interface to handle CODE V’s complex and vector field formats.