@@ -254,19 +254,22 @@ def monitors():
254254
255255 mesh_mnt = td .VolumeMeshMonitor (size = (1.6 , 2 , 3 ), name = "mesh_test" )
256256
257+ electric_field_mnt = td .SteadyElectricFieldMonitor (size = (1.6 , 2 , 3 ), name = "electric_field_test" )
258+
257259 return [
258- temp_mnt1 ,
259- temp_mnt2 ,
260- temp_mnt3 ,
261- temp_mnt4 ,
262- volt_mnt1 ,
263- volt_mnt2 ,
264- volt_mnt3 ,
265- volt_mnt4 ,
266- capacitance_mnt1 ,
267- free_carrier_mnt1 ,
268- energy_band_mnt1 ,
269- mesh_mnt ,
260+ temp_mnt1 , # 0
261+ temp_mnt2 , # 1
262+ temp_mnt3 , # 2
263+ temp_mnt4 , # 3
264+ volt_mnt1 , # 4
265+ volt_mnt2 , # 5
266+ volt_mnt3 , # 6
267+ volt_mnt4 , # 7
268+ capacitance_mnt1 , # 8
269+ free_carrier_mnt1 , # 9
270+ energy_band_mnt1 , # 10
271+ mesh_mnt , # 11
272+ electric_field_mnt , # 12
270273 ]
271274
272275
@@ -519,7 +522,10 @@ def temperature_monitor_data(monitors):
519522@pytest .fixture (scope = "module" )
520523def voltage_monitor_data (monitors ):
521524 """Creates different voltage monitor data."""
522- _ , _ , _ , _ , volt_mnt1 , volt_mnt2 , volt_mnt3 , volt_mnt4 , _ , _ , _ , _ = monitors
525+ volt_mnt1 = monitors [4 ]
526+ volt_mnt2 = monitors [5 ]
527+ volt_mnt3 = monitors [6 ]
528+ volt_mnt4 = monitors [7 ]
523529
524530 # SpatialDataArray
525531 nx , ny , nz = 9 , 6 , 5
@@ -679,6 +685,76 @@ def energy_band_monitor_data(monitors):
679685 return (eb_data1 ,)
680686
681687
688+ @pytest .fixture (scope = "module" )
689+ def electric_field_monitor_data (monitors ):
690+ """Creates different electric field monitor data."""
691+ monitor = monitors [12 ]
692+
693+ # TetrahedralGridDataset
694+ tet_grid_points = td .PointDataArray (
695+ [[0.0 , 0.0 , 0.0 ], [1.0 , 0.0 , 0.0 ], [0.0 , 1.0 , 0.0 ], [1.0 , 1.0 , 0.0 ], [0.0 , 0.0 , 1.0 ]],
696+ dims = ("index" , "axis" ),
697+ )
698+
699+ tet_grid_cells = td .CellDataArray (
700+ [[0 , 1 , 2 , 4 ], [1 , 2 , 3 , 4 ]],
701+ dims = ("cell_index" , "vertex_index" ),
702+ )
703+
704+ tet_grid_values = td .PointDataArray (
705+ [[0.0 , 1.0 , 0.0 ], [1.0 , 1.0 , 1.0 ], [3.0 , 5.0 , 1.0 ], [4.0 , 5.0 , 3.0 ], [5.0 , 2.0 , 1.0 ]],
706+ dims = (
707+ "index" ,
708+ "axis" ,
709+ ),
710+ name = "T" ,
711+ )
712+
713+ tet_grid = td .TetrahedralGridDataset (
714+ points = tet_grid_points ,
715+ cells = tet_grid_cells ,
716+ values = tet_grid_values ,
717+ )
718+
719+ mnt_data1 = td .SteadyElectricFieldData (monitor = monitor , E = tet_grid )
720+
721+ # TriangularGridDataset
722+ tri_grid_points = td .PointDataArray (
723+ [[0.0 , 0.0 ], [1.0 , 0.0 ], [0.0 , 1.0 ], [1.0 , 1.0 ]],
724+ dims = ("index" , "axis" ),
725+ )
726+
727+ tri_grid_cells = td .CellDataArray (
728+ [[0 , 1 , 2 ], [1 , 2 , 3 ]],
729+ dims = ("cell_index" , "vertex_index" ),
730+ )
731+
732+ tri_grid_values = td .IndexedFieldVoltageDataArray (
733+ [
734+ [[1.0 , 1.5 ], [- 1.0 , 1.1 ], [5.1 , 0.0 ]],
735+ [[1.0 , 1.5 ], [- 1.0 , 1.1 ], [5.1 , 0.0 ]],
736+ [[1.0 , 1.5 ], [- 1.0 , 1.1 ], [5.1 , 0.0 ]],
737+ [[1.0 , 1.5 ], [- 1.0 , 1.1 ], [5.1 , 0.0 ]],
738+ ],
739+ coords = {"index" : np .arange (4 ), "axis" : np .arange (3 ), "voltage" : [- 1 , 1 ]},
740+ name = "T" ,
741+ )
742+
743+ tri_grid = td .TriangularGridDataset (
744+ normal_axis = 1 ,
745+ normal_pos = 0 ,
746+ points = tri_grid_points ,
747+ cells = tri_grid_cells ,
748+ values = tri_grid_values ,
749+ )
750+
751+ mnt_data2 = td .SteadyElectricFieldData (monitor = monitor , E = tri_grid )
752+
753+ mnt_data3 = td .SteadyElectricFieldData (monitor = monitor , E = None )
754+
755+ return (mnt_data1 , mnt_data2 , mnt_data3 )
756+
757+
682758@pytest .fixture (scope = "module" )
683759def simulation_data (
684760 heat_simulation ,
@@ -853,11 +929,52 @@ def test_monitor_crosses_medium(mediums, structures, heat_simulation, conduction
853929
854930
855931def test_heat_charge_mnt_data (
856- temperature_monitor_data , voltage_monitor_data , capacitance_monitor_data
932+ temperature_monitor_data , voltage_monitor_data , electric_field_monitor_data
857933):
858934 """Tests whether different heat-charge monitor data can be created."""
859935 assert len (temperature_monitor_data ) == 4 , "Expected 4 temperature monitor data entries."
860936 assert len (voltage_monitor_data ) == 4 , "Expected 4 voltage monitor data entries."
937+ assert len (electric_field_monitor_data ) == 3 , "Expected 3 electric field monitor data entries."
938+
939+ for mnt_data in electric_field_monitor_data :
940+ assert "E" in mnt_data .field_components .keys ()
941+
942+ symm_data = mnt_data .symmetry_expanded_copy
943+ assert symm_data .E == mnt_data .E
944+
945+ names = mnt_data .field_name ("abs^2" )
946+ assert names == "E²"
947+ names = mnt_data .field_name ()
948+ assert names == "E"
949+
950+ # make sure an error is raised if we don't use a field data array
951+ # TriangularGridDataset
952+ tri_grid_points = td .PointDataArray (
953+ [[0.0 , 0.0 ], [1.0 , 0.0 ], [0.0 , 1.0 ], [1.0 , 1.0 ]],
954+ dims = ("index" , "axis" ),
955+ )
956+
957+ tri_grid_cells = td .CellDataArray (
958+ [[0 , 1 , 2 ], [1 , 2 , 3 ]],
959+ dims = ("cell_index" , "vertex_index" ),
960+ )
961+
962+ tri_grid_values = td .IndexedDataArray (
963+ [1.0 , 2.0 , 3.0 , 4.0 ],
964+ dims = ("index" ,),
965+ name = "T" ,
966+ )
967+
968+ tri_grid = td .TriangularGridDataset (
969+ normal_axis = 1 ,
970+ normal_pos = 0 ,
971+ points = tri_grid_points ,
972+ cells = tri_grid_cells ,
973+ values = tri_grid_values ,
974+ )
975+
976+ with pytest .raises (pd .ValidationError ):
977+ _ = mnt_data .updated_copy (E = tri_grid )
861978
862979
863980def test_grid_spec_validation (grid_specs ):
0 commit comments