I am working on modeling a silicon diode and electron avalanche simulation and am looking to import electric field maps and geometry profiles generated in Silvaco TCAD (specifically .str structure and .sta files). Looking through Garfield++ implementation, classes like ComponentTcad3d and ComponentTcad2d appear to be explicitly tailored for Synopsys Sentaurus formats (.grd and .dat outputs). Does anyone have a solution for Silvaco to Garfield++ conversion steps?
Thank you.
Hi,
sorry for my late reply! Indeed, ComponentTcad2d/3d can only read Synopsys Sentaurus maps at the moment. I made a (short-lived) attempt to implement an interface for Silvaco some time ago, but then got stuck because I didn’t know how to parse/interpret the Silvaco files. If you have a description of the format, i. e. a recipe for parsing the file and reconstructing the mesh, let’s give it another try!
Hi,
Thanks for the follow up. I have been working on implementing a Silvaco TCAD interpreter for Garfield++ as part of my research under Dr. Tricoli at BNL. I’ve parsed the files and reconstructed the mesh format. I am currently sorting out my CERN Gitlab account access, but I will be opening a Merge Request with the implementation so you can hopefully review it. I can also provide you with a document detailing the interals of the Silvaco output files.
Thanks,
Alec
alechaines561 at gmail dot com if you would like to talk further.
Hello @hschindl ,
I worked out the .str/.sta format and wrote a reader for it in Garfield++. It adds LoadSilvaco and InitaliseSilvaco() to Component TcadBase, filing the members as the Sentaurus reader does so ComponentTcad2d and everything else remains unchanged ex: ComponentTcad2d tcad; tcad.InitializeSilvaco(“_.sta”);. I validated it on a 2D AC-LGAD field map (59685 vertices, 118260 triangles, 13 regions). A few notes on scope. It handles 2D triangular meshes only; the grammar is the same in 3D (tetrahedral t records, non-zero z) but I had no 3D sample to validate against for now, so InitialiseSilvaco returns false for N != 2. It keys on Silvaco quantity codes (120/121 = Ex/Ey, 100 = potential) rather than fixed columns, so it should generalize to other 2D ATLAS solutions; I’ve tested it on Silvaco 5.22 (ATHENA) and 5.38 (ATLAS). One thing worth flagging: query points coinciding almost exactly with a mesh vertex can return status -6 from the shared InTriangle point location, which affects the Sentaurus path identically it’s a edge case issue, and in transport it’s easily handled with a drift time window. github dot com/ahaines561/garfieldpp-silvaco is my github repo I’ve made for the project as I dont have a CERN account (I can’t send links as a new user). ComponentTcadBase.cc and ComponentTcadBase.hh should be the latest versions as of when I send this message. If you would like to read more on the internals of the Silvaco files I’ve provided a .pdf file. If you would like to test out the field interpolator I’ve also provided .sta files in the file silvaco-dat. Let me know if you’d like me to adjust anything if it would be useful in the toolkit or explain anything further.
Thanks for Garfield++,
Alec Haines
Hi Alec,
this is absolutely amazing, thanks so much! I’ve committed and pushed your additions to ComponentTcadBase to the repository: Import Silvaco TCAD field maps (!631) · Merge requests · garfield / garfieldpp · GitLab
Do you think we could also add a small working example to the repository (perhaps together with a short tutorial on the website)?
Would importing a weighting fields/potentials work the same way as with Sentaurus Device?
We can also continue discussing via e-mail (or set up a Zoom call) if you prefer…
Thanks again!
Heinrich
Hello @hschindl ,
A small working example and a short tutorial for the website sound like a great idea; I talked it over with my PI, and he agrees.
Regarding the weighting fields and potentials, that functionality isn’t implemented yet. I need to review some specific Silvaco files from a group mate to see how they are structured for those fields. Once I get a look at those and implement the import logic, I’ll be sure to update the documentation and examples accordingly. I’m also currently working on a few minor fixes to the existing implementation.
Moving the discussion to email or Zoom sounds perfect. My email is alechaines561 at gmail dot com.
Have a good week,
Alec Haines