Let’s start with a blank project in DEVICE to review the basic setup steps.
First, we add a material to the objects tree by opening up the Optical Material Database.
We will create a dielectric material with the maximum index of the fiber.
The next step is to create the geometry, which in this case is simply a circle with a radius
of 10 um.
As we will see later, the modal fields of interest extend over a smaller radius; however,
we want to use the curved surface of the circle as the simulation boundary, so we need a large
enough radius here.
Let’s rename the circle to “fiber” and assign the “Dielectric” material we just
created to this object.
Now, we can edit the simulation region settings.
Since the cylinder representing the fiber is aligned with the z-axis, let’s set the
dimension to be “2D Z-Normal”.
Also, we use open boundaries so that the simulation volume is determined by the geometry and not
the “simulation region” object itself.
Under the Geometry tab, we just need to increase the x and y span to cover the circle completely.
Next, we add the FEEM simulation object and edit its properties.
In the “Modal Analysis” tab set the wavelength to 1 um.
In the “Mesh” tab reduce the number of edges per wavelength from the default 2 to
0.6, so that the mesh isn’t unnecessarily fine.
This fiber is quite large compared to the wavelength and we certainly don’t expect
subwavelength variations in the modal fields.
As usual, we recommend starting with a coarse mesh and refine it later if necessary.
We can also increase the polynomial order to achieve better accuracy with coarser mesh.
To finalize the basic simulation setup, add PEC boundary conditions, which are appropriate
here because we expect the fields to be practically zero at the boundaries.
Now, you can check the partitioned volume, which has a single domain for this simple
You can also run the error checking and diagnostics for further verification.
Right now, our fiber has a uniform refractive index.
To generate the desired spatially-varying refractive index profile, we employ the (n,
k) material attribute.
Let’s take a look inside the properties of this object.
By default, the (n, k) material is applied to all domains.
Here we don’t need to worry about this since we have only one domain; however, there are
situations where we might want to apply the (n,k) material to specific domains or solids;
for instance, we can apply it to the circle representing the fiber only.
The data for the (n, k) material can be a rectilinear or a finite-element dataset, created
manually or imported from another solver.
For this example, we will create the (n, k) data using the scripting environment in DEVICE.
At the top of this page we have provided a simple script to generate the desired dataset.
Basically, we define a rectilinear mesh where we evaluate the function describing the refractive
You can learn more about scripting in the links provided below.
The final step in the script is saving the generated rectilinear dataset in a Matlab
file, which we can now import in our (n, k) material attribute.
After running the script we go back to the Data tab in the properties of the (n, k) material
attribute and look for the Matlab file generated by the script.
Here we can choose the dataset we want to load from the file.
In the Current data you can see the name of the imported dataset and select the attribute
to be used.
Our simple dataset is not parameterized so the parameter table is empty.
However, in more advanced applications that require parameterization in terms of bias
voltage or temperature, for example, you can use this table to control the value of the
parameters to be used in the simulation.
Note that you can also apply a scaling factor to your data, which we keep as 1 in this case.
Last but not least, we can select how the attribute will be applied: by overriding or
perturbing the material indices assigned to the geometrical objects.
In our case we choose the “override” option since we want the index profile defined by
the dataset to be the one that fully determines the index of the fiber.
The “accumulate” option would be the one to use when your dataset describes a perturbation
that will be added on top of the material indices already used in the simulation.
We click on OK to finalize the (n,k) material setup and then check that the imported data
looks correct by using the Visualizer.
Note that this is the rectilinear data created by the script, and it has not been applied
to the finite element mesh yet.
We can check that after clicking on the Mesh button and visualizing the grid data.
Select the index attribute and you will now see a nice image plot of the index profile
used in the finite element mesh.
This completes the simulation setup of this graded-index fiber.
Now we can run the simulation and check the fields and mode properties.
As expected, there is no loss in the fiber since we use a purely real refractive index.
Note the staircase shape of the effective index plot as a function of mode number; this
is due to mode degeneracy.
The field profiles in the Visualizer on the left confirm that the mesh used for the calculation
We can use the different Visualizer features to analyze the modes in more detail; for instance
we can plot the absolute value of the different field components Ex, Ey and Ez.