New charge recombination model based on Shockley-Read-Hall for Gallium Nitride

Hello experts,
I am working on to implement GaN in the Allpix-squared framework. I was searching the literature for GaN charge recombination models. From these references, I see that the lifetime for p-GaN and n-GaN may have only temperature dependency:

p-GaN: - Shockley–Read–Hall lifetime in homoepitaxial p-GaN extracted from recombination current in GaN p–n+ junction diodes - IOPscience
n-GaN: - https://doi.org/10.1063/1.4937436

I was trying to test this recombination model here and wanted to see if the simulation gave any meaningful result.

While the code is compiling fine (albeit warning about the unused parameters), it is not running because I need to provide a doping profile in the configuration file. If I don’t have any doping profile, and yet I want some recombination model (which is in some way independent of the doping profile), is it possible to implement that in the Allpix-Squared setup? Any advice will be greatly appreciated.

Thank you very much,
Arka

Hi @asantra

nice work! Looking forward to seeing results!

Concerning your problem, I don’t see how that comes. The only place where the existence of a doping profile is checked as far as I can see is in the constructor of the ShockleyReadHall constructor:

However, since you neither derive from that nor re-implement the checks in your constructors I don’t see why this would be triggered.

What is the exact error message that you receive?

Cheers,
Simon

Hi @simonspa ,
This is the error message I am getting:

|13:31:44.023|  (STATUS) Welcome to Allpix^2 v2.0.1-1358-g53fcae7dc-dirty
|13:31:44.023|  (STATUS) Initialized PRNG with system entropy seed 8898742034009653224
|13:31:44.636| (WARNING) Main ROOT file "/Users/arkasantra/AllPix2/version2_Allpix2/allpix-squared/output/modules_ParticleGunElectron10GeV_EFieldv10p7p1pyN17Vpcm_Stave02At000_Event5Particle1_GaN.root" exists and will be overwritten.
|13:31:44.660|  (STATUS) Loaded 8 modules
|13:31:44.661|  (STATUS) Multithreading enabled, processing events in parallel on 16 worker threads
|13:31:44.661|  (STATUS) Allocating a total of 4096 event slots for buffered modules
|13:31:44.661|  (STATUS) Initializing 8 module instantiations
|13:31:51.595|   (FATAL) [I:GenericPropagation:Stave02] Error in the configuration:
                                                        Value "srh_pgan" of key 'recombination_model' in section 'GenericPropagation' is not valid: Model with name "srh_pgan" does not exist
                                                        The configuration needs to be updated. Cannot continue.

The config file is attached here too:

[Allpix]
number_of_events = 5
log_level = "WARNING"
detectors_file = "Stave02.conf"
#### remember to change this to your path
model_paths = "/Users/arkasantra/AllPix2/version2_Allpix2/allpix-squared/examples/arkaExamples/GaN"
multithreading = true
workers = 16
root_file = "modules_ParticleGunElectron10GeV_EFieldv10p7p1pyN17Vpcm_Stave02At000_Event5Particle1_GaN.root"


[GeometryBuilderGeant4]

[DepositionGeant4]
particle_type = "e-"
source_energy = 10GeV
source_type = "beam"
beam_size = 3mm
source_position = 0mm 0mm -200mm
beam_direction = 0 0 1
physics_list = FTFP_BERT_EMZ
number_of_particles = 1
output_plots = 0




[ElectricFieldReader]
model = "custom"
log_level = "WARNING"





field_function = "[0]*(x*x+y*y)"

field_parameters = 17V/cm







depletion_depth = 25um


[GenericPropagation]
temperature = 293K
charge_per_step = 5
timestep_min = 0.5ps
timestep_max = 0.05ns
recombination_model = "srh_pgan"
integration_time = 20ns
propagate_electrons = true
propagate_holes = false




[SimpleTransfer]



[DefaultDigitizer]
log_level = "WARNING"
electronics_noise  = 10e
threshold          = 120e
threshold_smearing = 5e



[DetectorHistogrammer]
output_plots = 1

[ROOTObjectWriter]
file_name = "data_ParticleGunElectron10GeV_EFieldv10p7p1pyN17Vpcm_Stave02At000_Event5Particle1_GaN.root"
exclude = DepositedCharge, PropagatedCharge




Thank you,
Arka

Hm, but that would mean you are falling through the if-elseif block here:

Hi @simonspa,
As embarrassing as it sounds, I could not find out why I am falling through the if-elseif block here:

I put the recombination_model= "srh_pgan" in the config file. Yet I cannot see that this is used in the above if-elseif block. This is the error message just like before:

|12:44:30.909|  (STATUS) Welcome to Allpix^2 v2.0.1-1358-g53fcae7dc-dirty
|12:44:30.909|  (STATUS) Initialized PRNG with system entropy seed 8169585988532938826
|12:44:31.527| (WARNING) Main ROOT file "/Users/arkasantra/AllPix2/version2_Allpix2/allpix-squared/output/modules_ParticleGunElectron10GeV_EFieldv10p7p1pyN17Vpcm_Stave02At000_Event5Particle1_GaN.root" exists and will be overwritten.
|12:44:31.552|  (STATUS) Loaded 9 modules
|12:44:31.552|  (STATUS) Multithreading enabled, processing events in parallel on 16 worker threads
|12:44:31.552|  (STATUS) Allocating a total of 4096 event slots for buffered modules
|12:44:31.552|  (STATUS) Initializing 9 module instantiations
|12:44:38.813|   (TRACE) [I:ElectricFieldReader:Stave02] Adding custom electric field
|12:44:38.813|   (DEBUG) [I:ElectricFieldReader:Stave02] Found definition of 1D custom field, applying to z axis
|12:44:38.818|   (DEBUG) [I:ElectricFieldReader:Stave02] Value of custom field at pixel center: 0V/cm
|12:44:38.818|    (INFO) [I:GenericPropagation:Stave02] Selected mobility model "jacoboni"
|12:44:38.818|   (FATAL) [I:GenericPropagation:Stave02] Error in the configuration:
                                                        Value "srh_pgan" of key 'recombination_model' in section 'GenericPropagation' is not valid: Model with name "srh_pgan" does not exist
                                                        The configuration needs to be updated. Cannot continue.

When I used other models, such as recombination_model="auger", I did not get any complaints during the simulation. I must be doing something silly, but unfortunately could not trace it.

I have attached config files to reproduce this problem.

Thank you very much,
Arka
gan_no_support.conf (509 Bytes)
Stave02.conf (148 Bytes)
tutorial_particlegun.conf (2.4 KB)

Hi @asantra

it has to be on your side, maybe you’re running the wrong allpix in the end or didn’t recompile. I just implemented this:

if(model == "srh") {
    model_ = std::make_unique<ShockleyReadHall>(temperature, doping);
} else if(model == "srh_pgan") {
    LOG(STATUS) << "Creating SRH_PGAN";
    model_ = std::make_unique<None>();
} else if(model == "auger") {
    model_ = std::make_unique<Auger>(doping);
} // [...]

and I get this:

|17:36:22.594|  (STATUS) Loaded 6 modules                 
|17:36:22.594|  (STATUS) Multithreading enabled, processing events in parallel on 7 worker threads
|17:36:22.594|  (STATUS) Allocating a total of 1792 event slots for buffered modules
|17:36:22.594|  (STATUS) Initializing 6 module instantiations
|17:36:25.864|  (STATUS) [I:GenericPropagation:detector1] Creating SRH_PGAN
|17:36:25.878|  (STATUS) Initialized 6 module instantiations
|17:36:25.880|  (STATUS) Starting event loop

so it works flawlessly.

Cheers,
Simon

Hi @simonspa ,
Thanks for checking. I chased down a previously broken library of allpix-squared in my LD_LIBRARY_PATH. Once I fixed that, the issue is gone. Sorry for the noise.

Best,
Arka