creating a custom np Density object (not from DEVICE)



I have a 3D carrier concentration distribution in rectilinear (x,y,z) coordinates, obtained from an external program. I would like to import this data as an np Density object in FDTD. I want to use the np information to perturb the index of the base material (silicon, rib waveguide geometry). How do I need to reformat my data so that it can be imported? I know that DEVICE saves np data using a finite-element grid - and this is how it is normally imported to FDTD/MODE. So how is this done for np data that is not on a finite-element grid?

And to calculate the perturbed index in silicon using the Soref method the unperturbed carrier concentrations also need to be known (so that the difference, delta_n and detla_p, can be calculated). How are the unperturbed carrier concentrations included np Density object?

Any help with this issue would be greatly appreciated.



Hi @patrick.goley

The np data collected from monitors in Device is an unstructured data set. You can read more about Lumerical datasets here.

This link provides you with details on how you can build a dataset in Device to be imported into FDTD. This discussion in KX might be a good place to look into at as well.

You can select the unperturbed carrier concentration by selecting the base material (such as silicon). This is explained in this direct and in this video.

I hope that I could answere your question and please let me know if you have further questions.


Hi @bkhanaliloo,

Thanks for your helpful reply. Yes that partially answers my question.

I understand that np Density objects require unstructured data sets. The problem is that my np data is in a rectilinear format since I obtained it from an external program and not from DEVICE. So it appears that it is not compatible with the Dataset builder tool. My understanding is that the Dataset builder tool requires a finite-element data-set and a corresponding connectivity matrix. I don’t have these things.

Is there some way I can create an np Density object with a rectilinear dataset? If not, then is there some way to build an unstructured dataset from a rectilinear one?

Thanks again.


Ahhh… I see the answer to my question is in the KX you linked above (this one here). I should have looked at that more carefully before sending my first reply! I got it now. Thanks!


Hi @patrick.goley

I am glad that I could answer your question. Best of luck in your studies.



hey @patrick.goley, ah sorry, I just saw this post(it was suggested by the forum thingy), did you get things squared away? I wrote some script to convert old Silvaco rectilinear data ( you need to generate a new mesh, ie, downloaded a matlab code to generate a mesh, the smart-ness of the mesh generation with respect to your object then depends on you, or it-the mesh generation program) and then interpolate all your Silvaco into that new mesh which Lumerical will accept, can send to you if you’d like.

Alternatively, you can just do soref-bennet equations on the rectilinear charge data, and then load that into a Structure/shape object in Lumerical. And then run your simulations straight from there without using any np Density object. But if you want to sweep across voltage(correct me if I’m wrong now), the nice thing about the np Density object is that it automatically took care of refreshing the density data with it’s respective voltage mapping. In this alternative case you will need to write scripts to get rid of the object 1-> soref-bennet-function(external data 1) map for voltage 1, then refresh the simulation setup with object 2-> soref-bennet-function(external data 2) map for voltage 2 ( the nice Lumerical-Matlab interoperability scripts is probably the best way to go for this, correct me if wrong!).