Skip to content

Commit a2fbe91

Browse files
marc-flexmomchil-flex
authored andcommitted
Adding heat, charge and conduction simulations to test/utils.py
1 parent a541d4e commit a2fbe91

File tree

1 file changed

+194
-0
lines changed

1 file changed

+194
-0
lines changed

tests/utils.py

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -910,6 +910,200 @@ def make_custom_data(lims, unstructured):
910910
)
911911

912912

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+
9131107
def get_spatial_coords_dict(simulation: td.Simulation, monitor: td.Monitor, field_name: str):
9141108
"""Returns MonitorData coordinates associated with a Monitor object"""
9151109
grid = simulation.discretize_monitor(monitor)

0 commit comments

Comments
 (0)