@@ -910,6 +910,200 @@ def make_custom_data(lims, unstructured):
910
910
)
911
911
912
912
913
+ FULL_STEADY_HEAT = td .HeatChargeSimulation (
914
+ center = (0 , 0 , 0 ),
915
+ size = (2 , 2 , 2 ),
916
+ medium = td .MultiPhysicsMedium (
917
+ heat = td .FluidMedium (), charge = td .ChargeInsulatorMedium (), name = "air"
918
+ ),
919
+ structures = [
920
+ td .Structure (
921
+ geometry = td .Box (size = (1 , 1 , 1 ), center = (0 , 1 , 0 )),
922
+ medium = td .MultiPhysicsMedium (
923
+ heat = td .FluidMedium (), charge = td .ChargeInsulatorMedium (), name = "temperature0_box"
924
+ ),
925
+ name = "temperature0_box" ,
926
+ ),
927
+ td .Structure (
928
+ geometry = td .Box (size = (1 , 1 , 1 ), center = (0 , - 1 , 0 )),
929
+ medium = td .MultiPhysicsMedium (
930
+ heat = td .FluidMedium (), charge = td .ChargeInsulatorMedium (), name = "temperature1_box"
931
+ ),
932
+ name = "temperature1_box" ,
933
+ ),
934
+ td .Structure (
935
+ geometry = td .Box (size = (1 , 1 , 1 ), center = (0 , 0 , 0 )),
936
+ medium = td .MultiPhysicsMedium (
937
+ heat = td .SolidMedium .from_si_units (conductivity = 1.0 , capacity = 1.0 , density = 1.0 ),
938
+ charge = td .ChargeConductorMedium (conductivity = 1.0 ),
939
+ name = "solid_box" ,
940
+ ),
941
+ name = "solid_box" ,
942
+ ),
943
+ ],
944
+ boundary_spec = [
945
+ td .HeatChargeBoundarySpec (
946
+ placement = td .MediumMediumInterface (mediums = ["temperature0_box" , "solid_box" ]),
947
+ condition = td .TemperatureBC (temperature = 300.0 ),
948
+ ),
949
+ td .HeatChargeBoundarySpec (
950
+ placement = td .MediumMediumInterface (mediums = ["temperature1_box" , "solid_box" ]),
951
+ condition = td .TemperatureBC (temperature = 320.0 ),
952
+ ),
953
+ td .HeatChargeBoundarySpec (
954
+ placement = td .MediumMediumInterface (mediums = ["air" , "solid_box" ]),
955
+ condition = td .HeatFluxBC (flux = 0.0 ),
956
+ ),
957
+ ],
958
+ monitors = [
959
+ td .TemperatureMonitor (
960
+ center = (0 , 0 , 0 ),
961
+ size = (1 , 1 , 1 ),
962
+ unstructured = True ,
963
+ name = "temperature_monitor" ,
964
+ )
965
+ ],
966
+ sources = [td .HeatSource (rate = 1.0 , structures = ["solid_box" ])],
967
+ grid_spec = td .UniformUnstructuredGrid (dl = 0.05 ),
968
+ symmetry = (1 , 0 , 0 ),
969
+ )
970
+
971
+ FULL_UNSTEADY_HEAT = FULL_STEADY_HEAT .updated_copy (
972
+ analysis_spec = td .UnsteadyHeatAnalysis (
973
+ initial_temperature = 300.0 ,
974
+ unsteady_spec = td .UnsteadySpec (time_step = 1e-3 , total_time_steps = 1000 ),
975
+ )
976
+ )
977
+
978
+
979
+ FULL_CONDUCTION = FULL_STEADY_HEAT .updated_copy (
980
+ monitors = [
981
+ td .SteadyPotentialMonitor (
982
+ center = (0 , 0 , 0 ), size = (1 , 1 , 1 ), name = "potential_monitor" , unstructured = True
983
+ ),
984
+ ],
985
+ boundary_spec = [
986
+ td .HeatChargeBoundarySpec (
987
+ placement = td .MediumMediumInterface (mediums = ["temperature0_box" , "solid_box" ]),
988
+ condition = td .VoltageBC (source = td .DCVoltageSource (voltage = 5.0 )),
989
+ ),
990
+ td .HeatChargeBoundarySpec (
991
+ placement = td .MediumMediumInterface (mediums = ["temperature1_box" , "solid_box" ]),
992
+ condition = td .VoltageBC (source = td .DCVoltageSource (voltage = 0.0 )),
993
+ ),
994
+ td .HeatChargeBoundarySpec (
995
+ placement = td .MediumMediumInterface (mediums = ["air" , "solid_box" ]),
996
+ condition = td .InsulatingBC (),
997
+ ),
998
+ ],
999
+ sources = [],
1000
+ )
1001
+
1002
+
1003
+ FULL_SEMICONDUCTOR = td .SemiconductorMedium (
1004
+ permittivity = 11 ,
1005
+ N_d = 0 ,
1006
+ N_a = 0 ,
1007
+ N_c = 2e19 ,
1008
+ N_v = 2e19 ,
1009
+ E_g = 1.0 ,
1010
+ mobility_n = td .ConstantMobilityModel (mu = 1500 ),
1011
+ mobility_p = td .CaugheyThomasMobility (
1012
+ mu_min = 44.9 ,
1013
+ mu = 470.5 ,
1014
+ ref_N = 2.23e17 ,
1015
+ exp_N = 0.719 ,
1016
+ exp_1 = - 0.57 ,
1017
+ exp_2 = - 2.33 ,
1018
+ exp_3 = 2.4 ,
1019
+ exp_4 = - 0.146 ,
1020
+ ),
1021
+ R = [
1022
+ td .ShockleyReedHallRecombination (tau_n = 3.3e-6 , tau_p = 4e-6 ),
1023
+ td .RadiativeRecombination (r_const = 1.6e-14 ),
1024
+ td .AugerRecombination (c_n = 2.8e-31 , c_p = 9.9e-32 ),
1025
+ ],
1026
+ delta_E_g = td .SlotboomBandGapNarrowing (
1027
+ v1 = 6.92e-3 ,
1028
+ n2 = 1.3e17 ,
1029
+ c2 = 0.5 ,
1030
+ min_N = 1e15 ,
1031
+ ),
1032
+ )
1033
+
1034
+ FULL_CHARGE = td .HeatChargeSimulation (
1035
+ center = (0 , 0 , 0 ),
1036
+ size = (3 , 3 , 0 ),
1037
+ medium = td .MultiPhysicsMedium (
1038
+ charge = td .ChargeInsulatorMedium (), heat = td .FluidMedium (), name = "air"
1039
+ ),
1040
+ structures = [
1041
+ # oxide
1042
+ td .Structure (
1043
+ geometry = td .Box (center = (0 , 0 , 0 ), size = (1.999 , 2 , 1 )),
1044
+ medium = td .MultiPhysicsMedium (
1045
+ heat = td .SolidMedium (conductivity = 1.0 , capacity = 1.0 , density = 1.0 ), name = "oxide"
1046
+ ),
1047
+ ),
1048
+ # p-side
1049
+ td .Structure (
1050
+ geometry = td .Box (center = (- 0.5 , 0 , 0 ), size = (1 , 1 , 1 )),
1051
+ medium = FULL_SEMICONDUCTOR .updated_copy (N_a = 1e18 , name = "p_side" ),
1052
+ ),
1053
+ # n-side
1054
+ td .Structure (
1055
+ geometry = td .Box (center = (0.5 , 0 , 0 ), size = (1 , 1 , 1 )),
1056
+ medium = FULL_SEMICONDUCTOR .updated_copy (N_d = 1e18 , name = "n_side" ),
1057
+ ),
1058
+ ],
1059
+ boundary_spec = [
1060
+ td .HeatChargeBoundarySpec (
1061
+ placement = td .MediumMediumInterface (mediums = ["p_side" , "air" ]),
1062
+ condition = td .VoltageBC (source = td .DCVoltageSource (voltage = [- 0.5 , 0.0 , 1 ])),
1063
+ ),
1064
+ td .HeatChargeBoundarySpec (
1065
+ placement = td .MediumMediumInterface (mediums = ["n_side" , "air" ]),
1066
+ condition = td .VoltageBC (source = td .DCVoltageSource (voltage = 0.0 )),
1067
+ ),
1068
+ td .HeatChargeBoundarySpec (
1069
+ placement = td .MediumMediumInterface (mediums = ["oxide" , "air" ]),
1070
+ condition = td .InsulatingBC (),
1071
+ ),
1072
+ ],
1073
+ monitors = [
1074
+ td .SteadyFreeCarrierMonitor (
1075
+ center = (0 , 0 , 0 ),
1076
+ size = (1 , 1 , 1 ),
1077
+ name = "free_carrier_monitor" ,
1078
+ unstructured = True ,
1079
+ ),
1080
+ td .SteadyPotentialMonitor (
1081
+ center = (0 , 0 , 0 ),
1082
+ size = (1 , 1 , 1 ),
1083
+ name = "potential_monitor" ,
1084
+ unstructured = True ,
1085
+ ),
1086
+ td .SteadyCapacitanceMonitor (
1087
+ center = (0 , 0 , 0 ),
1088
+ size = (1 , 1 , 1 ),
1089
+ name = "capacitance_monitor" ,
1090
+ unstructured = True ,
1091
+ ),
1092
+ ],
1093
+ analysis_spec = td .IsothermalSteadyChargeDCAnalysis (
1094
+ temperature = 300.0 ,
1095
+ convergence_dv = 0.1 ,
1096
+ fermi_dirac = False ,
1097
+ tolerance_settings = td .ChargeToleranceSpec (
1098
+ rel_tol = 1e-4 ,
1099
+ abs_tol = 1e6 ,
1100
+ max_iters = 400 ,
1101
+ ),
1102
+ ),
1103
+ grid_spec = td .UniformUnstructuredGrid (dl = 0.05 , relative_min_dl = 0 ),
1104
+ )
1105
+
1106
+
913
1107
def get_spatial_coords_dict (simulation : td .Simulation , monitor : td .Monitor , field_name : str ):
914
1108
"""Returns MonitorData coordinates associated with a Monitor object"""
915
1109
grid = simulation .discretize_monitor (monitor )
0 commit comments