Hi,

I’d like to know the details of how MODE calculates group velocity dispersion (or just “dispersion” in the eigensolver analysis). Is it a fit? If so, what kind of fit is it? How are the calculations done?

Thanks,

Peter

Hi,

I’d like to know the details of how MODE calculates group velocity dispersion (or just “dispersion” in the eigensolver analysis). Is it a fit? If so, what kind of fit is it? How are the calculations done?

Thanks,

Peter

Hi @pweigel

In Lumerical’s knowledge base you can find information about the group velocity dispersion. This page is about dispersion analysis : https://kb.lumerical.com/en/index.html?pic_passive_dispersion_analysis.html

Thank you for the link @konslekk, I’ve already looked through all the available documentation on this topic and haven’t found the information I’m asking about. That link discusses a fit to generate smooth dispersion curves, but it doesn’t say what data is fit or what kind of fit it is.

For example, is the neff data fit and then all other data is calculated from that? Is group velocity calculated from the neff raw data, which is then fit to perform the derivative necessary to calculate dispersion? Since dispersion is a second order derivative of the effective index and a first order derivative of the group index, how are the derivatives calculated? It’s probably some sort of difference equation to approximate a differential; if so, what kind of difference equation?

The fit is what I’m most interested in, because if I take the effective index data that the Frequency Sweep generates, fit that, and then calculate GVD, I tend to get a different GVD than what Lumerical calculates. It’s not significantly different, but it is different nonetheless.

Hi, pweigel,

With “detailed dispersion calculation” enabled, MODE Solutions calculates beta(f), beta(f - df), and beta(f + df) where df is a small frequency value and not a step size, and then numerically calculates the second derivative by using these three points. I think the size of df is related to “fractional wavelength offset for detailed dispersion calculation” in the advanced options at the left-bottom corner of the eigenmode analysis window.

1 Like

Hi @pweigel

AS @sd15409 mentioned, software calculates dispersion at *f + df* and *f - df* points. You can fit material refractive index data from material explorer, but other than that software does not do any fitting to calculated effective index and simply connects data points by straight lines. The resolution can be modified if you increase the value for *number of points* to a higher value from Frequency analysis.

Please let me know if this answers your question.

Hi bkhanaliloo,

What is the relation between the size of *df* and fractional wavelength offset for detailed dispersion calculation in the advanced options?

Hi @sd15409

I assume here we use fraction of wavelength (\lambda). So we can use f = c/n/\lambda and take derivative from both side of the equation to find df.

Let me know if I addressed the question properly.

Thanks

Hi @bkhanaliloo,

Thank you for the explanation.

What is n in the equation?

How small is *df* for the following calculation parameters?

Frequency step : 1 THz

Fractional wavelength offset : 0.0001

Thanks

Hi @sd15409

n is the refractive index calculated at specific wavelength of interest. [quote=“sd15409, post:9, topic:4109”]

How small is df for the following calculation parameters?

Frequency step : 1 THzFractional wavelength offset : 0.0001

[/quote]

I am not sure what the *Frequency step* is here, but lets assume that it is the frequency of interest which corresponds to \lambda~300um.

df=c/n * dλ/λ^2,

where dλ=0.0001*λ thus:

df=c/n * 1e-4/300e-6;

Please let me know if this makes sense to you.

Hi @bkhanaliloo

```
n is the refractive index calculated at specific wavelength of interest.
```

If more than two materials exist in the analysis domain, how n is determined?

```
I am not sure what the Frequency step is here,
```

What I meant by *Freuency step* is the sweep step which is determined from *start frequency*, *stop frequency*, and *number of points*. I thought *df* is related to the sweep step.

```
but lets assume that it is the frequency of interest which corresponds to \lambda~300um.
df=c/n * dλ/λ^2,
where dλ=0.0001*λ thus:
df=c/n * 1e-4/300e-6;
```

This means that *df* is not related to the sweep step at all. Is that correct?

Thanks

Hi @sd15409

My understanding is that n is the mode effective index. So even if two material exist, it will depend on the mode shape. This is being said that I am not quite sure if this is the way our developers coded the software. For example there might have used frequency instead of wavelength in their calculations.

No! and the df value is independent of step size. However, when you use smaller step sizes, slope of the Effective index vs wavelenght will be modified. Thus, the linear interpolation which defines the effective index value at f+df and f-df will be effected. This means that group velocity will be modified too.

I hope this answered your question.

The following script is what I think MODE Solutions does to calculate GVD, but it seems wrong because there is no linear interpolation part.

```
#script to calculate GVD at 1550 nm
lmd = 1550e-9; #wavelength
dlmd = 0.0001; #fractional wavelength offset
f = c/lmd; #frequency
setanalysis("frequency", f);
findmodes;
beta_center = getdata("mode1", "beta");
neff_center = getdata("mode1", "neff");
df = c/neff_center * dlmd/lmd^2;
dw = 2*pi*df;
setanalysis("frequency", f - df);
findmodes;
beta_left = getdata("mode1", "beta");
setanalysis("frequency", f + df);
findmodes;
beta_right = getdata("mode1", beta);
beta2 = (beta_right + beta_left - 2*beta_center(f)) / dw^2;
GVD = -2*pi*c/lmd^2 * beta2;
```

Could you write what you think MODE Solutions does to calculate GVD as a script?

1 Like

New automated group index calculation in eigenmode solver of MODE Solutions
Hi @sd15409

I talked with our R&D scientist today and I should say that I was wrong on how software calculates group velocity dispersion. Sorry about that.

First, it looks like *fractional wavelength offset …* should be *fractional frequency offset …* This means that we don’t need the value for *neff* as calculations are using frequency directly rather than wavelength.

Second, I was wrong to say that software does a linear interpolation to *neff* vs *frequency* data. As you correctly explained, software actually calculates the mode at either *f + df* or *f - df*.

Our R&D scientist will look into the code and I will keep you updated when I have more information about this.

Thank you for your patience.