Add TAT and BTB recombination

Hello, Devsim community!

I am new to using DEVSIM, and I was wondering if anyone has encountered a similar issue. My goal is to model a photodetector, and for that, I started by modifying the code from diode_1D.py and simple_physics.py. I haven’t yet implemented radiative generation, but I have already found discussions on the forum about how to add it. Right now, my main interest is adding Trap-Assisted Tunneling and band-to-band generation.

The issue I encountered while implementing them is that they require the electric field, but as far as I can see in the code that defines generation, we use a node_model, whereas the electric field is defined in an edge_model.

I see two possible solutions:

  1. Rewrite the entire generation code using an edge_model, but I suspect this might introduce issues that I may not anticipate due to my limited experience with the package.
  2. Define the electric field in a node_model using something like “-diff(Potential, x)”. However, when I differentiate with respect to x, I get a zero field.

What variable should I differentiate the potential with to obtain the electric field (if this is possible at all)? Is there a way to compute the potential gradient in a node_model?

Hi @Mykhailo

While it is possible to get a gradient at a node, I don’t recommend it because no derivatives with respect to the potential at other nodes is availale.
https://devsim.net/CommandReference.html#devsim.vector_gradient

I recommend following the approach in this post for impact ionization:
https://forum.devsim.org/t/avalanche-breakdown/26

which uses the edge_volume_model to integrate your generation terms:
https://devsim.net/CommandReference.html#devsim.equation
as a volume quantity use the EdgeNodeVolume on both ends of the edge.
https://devsim.net/models.html#id5

While this example handles the case of a constant parameters being multiplied by an edge quantity. It can be extended to your more general case of nodal quanties.

Which involves:

  1. keep your existing generation terms as nodal, excluding the field dependent term, gmodel
  2. convert the nodal generation along the edge using devsim.edge_from_node_model, which will create gmodel@n0, gmodel@n1
  3. If this generation is constant along the edge, you can create an edge model using gmodel_edge = 0.5*(gmodel@n0 + gmodel@n1)
  4. Use the same process to get nodal derivatives with respect to these models. For example if this depends on Electrons. gmodel_edge:Electrons@n0, gmodel_edge:Electrons@n1.
  5. create a combined edge expression using these models, with your field dependent term, BTBmodel = gmodel_edge * fmodel, where fmodel is your field dependent model
  6. also include those derivatives
  7. add this term to the edge_volume_model option of the equation command.

Please let me know if you think this is a valid approach, or if you have any questions.

Thank @Juan for your help, I will try