Semi-insulating films, implementation questions

Hey there - Thanks for your efforts on this project, I’m looking forward to exploring it!

I’ve been looking to integrate the necessary physics to handle semi-insulating III-V materials. I would like to extend from your existing drift-diffusion models.

I noticed you have a few different implementations (simple_dd/simple_physics in the DEVSIM examples & what I suspect is a revised implementation in [devsim_bjt_example]). They look to be nominally equivalent but I think the latter may be more easily extended. Do you have a recommendation?

Regarding my implementation - My first step is to calculate trap occupancy & include trap charge in poisson’s equation. Would it be sufficient to add the following to the drift diffusion solver (specifically the PE solver):

NodeModel → “Traps”
NodeModel → “TrappedElectrons”
NodeModel → “PotentialNodeCharge”

“Traps” would be my trap density input, similar to “Donors” “Acceptors”
“TrappedElectrons” would be calculated using “Electrons” + parameters
“PotentialNodeCharge” would be edited to include trapped charge in addition to dopant/electrons/holes

While there’s additional physics to add (+material model updates) am I missing anything for this base implementation? For instance, I assume there is no need to calculate derivatives for “TrappedCharge”, given that it’s driven by “Electrons”

For reference/interest, detailed modeling is available in this thesis:


Your idea sounds good. A brief review of the reference make me think that this can be done in devsim. A trap level would need its own continuity equation, and a trapped charge variable, but only if there is a time derivative term. This would not be necessary if trapped charge is directly related to electrons.

The SRH model is an example where the time derivative term is neglected.

Thanks Juan - I was able to implement the model in the thesis referenced above & generate comparable graphs/device response.

The initial model was quite simple, assuming the traps occupancy is defined completely by parameters + the electron occupancy (see below).

I’d like to add some more physics but am not sure how best to implement it within your framework.

For example, I’d like to add the effect of “EField” to the trapped charge model (at higher fields, it’s easier for electrons to escape). To do this, I’d need to use “EField” within my node model [1D].

I see that you can reference the node values in an “edge” model (eg: @n1, @n2). Is there a way to reference “edge” values in a node model?

Congratulations on your success. To add the effect of the EField, please consider putting the node model onto the edge using edge_from_node_model.

You would then put the final resultant model using the equation using the edge_volume_model option. This model can be integrated over the EdgeNodeVolume in this figure.

In 2d or 3d, you could do something simliar with the ElementNodeVolume in this figure. The appropriate options on the equation command would then be volume_node0_model and volume_node1_model .

Please note that proper convergence would require proper consideration of the derivatives of your model with the solution variables on each node.

As a last resort, it is possible to use custom matrix assembly.

Here is an example using edge_volume_model