@@ -21,13 +21,16 @@ def test_fault_builder_update_geometry(interpolatortype):
2121 fault_builder .update_geometry (points )
2222
2323 # Check if the origin and maximum are updated correctly
24- expected_origin = np .array ([0.5 , 0.5 , 0.5 ])
25- expected_maximum = np .array ([0.7 , 0.7 , 0.7 ])
26- assert np .allclose (fault_builder .origin , expected_origin )
27- assert np .allclose (fault_builder .maximum , expected_maximum )
24+ # Calculate buffer as 10% of the range
25+ buffer = 0.1 * (np .array ([0.7 , 0.7 , 0.7 ]) - np .array ([0.5 , 0.5 , 0.5 ]))
26+ expected_origin = np .array ([0.5 , 0.5 , 0.5 ]) - buffer
27+ expected_maximum = np .array ([0.7 , 0.7 , 0.7 ]) + buffer
28+ # rtol 1e-2 is 1% relative tolerance
29+ assert np .allclose (fault_builder .origin , expected_origin ,rtol = 1e-2 )
30+ assert np .allclose (fault_builder .maximum , expected_maximum , rtol = 1e-2 )
2831
2932
30- def test_fault_builder_create_data_from_geometry (interpolatortype ):
33+ def test_fault_builder_create_data_from_geometry_with_normals (interpolatortype ):
3134 # Create a FaultBuilder instance
3235 bounding_box = BoundingBox ([0 , 0 , 0 ], [1 , 1 , 1 ])
3336 nelements = 1000
@@ -60,7 +63,59 @@ def test_fault_builder_create_data_from_geometry(interpolatortype):
6063 # Check if the fault attributes are updated correctly
6164 expected_fault_normal_vector = np .array ([0 , 1.0 , 0 ])
6265 expected_fault_slip_vector = np .array ([0.0 , 0.0 , 1.0 ])
63- # expected_fault_centre = np.array([0.15, 0.6, 1.05])
66+ expected_fault_centre = np .array ([0.15 , 0.6 , 1.05 ])
67+ expected_fault_normal_vector /= np .linalg .norm (expected_fault_normal_vector )
68+ expected_fault_slip_vector /= np .linalg .norm (expected_fault_slip_vector )
69+ # expected_fault_minor_axis = 0.5
70+ # expected_fault_major_axis = 1.0
71+ # expected_fault_intermediate_axis = 1.0
72+ calculated_fault_normal_vector = fault_builder .fault_normal_vector
73+ calculated_fault_slip_vector = fault_builder .fault_slip_vector
74+ calculated_fault_normal_vector /= np .linalg .norm (calculated_fault_normal_vector )
75+ calculated_fault_slip_vector /= np .linalg .norm (calculated_fault_slip_vector )
76+ assert np .allclose (calculated_fault_normal_vector , expected_fault_normal_vector )
77+ assert np .allclose (calculated_fault_slip_vector , expected_fault_slip_vector )
78+ # assert np.allclose(fault_builder.fault_centre, expected_fault_centre)
79+ # assert np.isclose(fault_builder.fault_minor_axis, expected_fault_minor_axis)
80+ # assert np.isclose(fault_builder.fault_major_axis, expected_fault_major_axis)
81+ # assert np.isclose(fault_builder.fault_intermediate_axis, expected_fault_intermediate_axis)
82+
83+
84+ def test_fault_builder_create_data_from_geometry_without_normals (interpolatortype ):
85+ # Create a FaultBuilder instance
86+ bounding_box = BoundingBox ([0 , 0 , 0 ], [1 , 1 , 1 ])
87+ nelements = 1000
88+ model = GeologicalModel ([0 , 0 , 0 ], [1 , 1 , 1 ])
89+ fault_bounding_box_buffer = 0.2
90+ fault_builder = FaultBuilder (
91+ interpolatortype , bounding_box , nelements , model , fault_bounding_box_buffer
92+ )
93+
94+ # Create some test data
95+ fault_frame_data = pd .DataFrame (
96+ {
97+ "coord" : [0.0 , 0.0 , 1.0 , 2.0 ],
98+ "val" : [0.0 , 0.0 , 1.0 , 1.0 ],
99+ "gx" : [np .nan , np .nan , np .nan , np .nan ],
100+ "gy" : [np .nan , np .nan , np .nan , np .nan ],
101+ "gz" : [np .nan , np .nan , np .nan , np .nan ],
102+ "X" : [0.1 , 0.2 , 0.3 , 0.4 ],
103+ "Y" : [0.5 , 0.6 , 0.7 , 0.8 ],
104+ "Z" : [0.9 , 1.0 , 1.1 , 1.2 ],
105+ "nx" : [np .nan , np .nan , np .nan , np .nan ],
106+ "ny" : [np .nan , np .nan , np .nan , np .nan ],
107+ "nz" : [np .nan , np .nan , np .nan , np .nan ],
108+ }
109+ )
110+
111+ # Call the create_data_from_geometry method
112+ fault_builder .create_data_from_geometry (fault_frame_data )
113+ strike_vector = np .array ([- .1 ,- .1 ,0 ])
114+ strike_vector /= np .linalg .norm (strike_vector )
115+ expected_fault_normal_vector = np .cross (strike_vector , np .array ([0 , 0 , 1 ]))
116+ expected_fault_normal_vector /= np .linalg .norm (expected_fault_normal_vector )
117+ # Check if the fault attributes are updated correctly
118+ expected_fault_slip_vector = np .cross (expected_fault_normal_vector , [1.0 , 0.0 , 0.0 ])
64119 expected_fault_normal_vector /= np .linalg .norm (expected_fault_normal_vector )
65120 expected_fault_slip_vector /= np .linalg .norm (expected_fault_slip_vector )
66121 # expected_fault_minor_axis = 0.5
0 commit comments