def test_extract_arfi_data(): """test extraction of arfi data at specific timesteps """ from fem.post.create_res_sim import extract_arfi_data from fem.post.create_res_sim import read_header from fem.post.create_res_sim import extract_image_plane from fem.mesh.fem_mesh import load_nodeIDs_coords from fem.mesh.fem_mesh import SortNodeIDs from scipy.io import loadmat import numpy as np gauss_qsym_pml_example_path = examplesPath / "gauss_qsym_pml" dispout = gauss_qsym_pml_example_path / "disp.dat.xz" nodedyn = gauss_qsym_pml_example_path / "nodes.dyn" valid_data = loadmat(gauss_qsym_pml_example_path / "res_sim_valid.mat")['arfidata'] header = read_header(dispout) node_id_coords = load_nodeIDs_coords(nodedyn) [snic, axes] = SortNodeIDs(node_id_coords) image_plane = extract_image_plane(snic, axes) test_data0 = extract_arfi_data(dispout, header, image_plane) test_data1 = extract_arfi_data(dispout, header, image_plane, specific_times=[1, 3]) test_data2 = extract_arfi_data(dispout, header, image_plane, specific_times=[3, 2, 1]) assert np.array_equal(test_data0, valid_data) assert np.array_equal(test_data1, valid_data[:, :, [0, 2]]) assert np.array_equal(test_data2, np.flip(valid_data, axis=-1))
def axes(nodeIDcoords): """create axes numpy array from nodes.dyn & elems.dyn :returns: axes """ from fem.mesh.fem_mesh import SortNodeIDs [sorted_nodes, axes] = SortNodeIDs(nodeIDcoords, sort=False) return axes
def test_exclude_zminmax_edge_sym_constraints(nodeIDcoords): from fem.mesh.fem_mesh import SortNodeIDs from fem.mesh.bc import assign_edge_sym_constraints [snic, axes] = SortNodeIDs(nodeIDcoords, sort=False) bcdict = {} edge_constraints = (((0, 1), (1, 0), (0, 0)), '1,1,0,1,1,1') bcdict = assign_edge_sym_constraints(bcdict, snic, axes, edge_constraints) for nodeID in (1221, 11): assert nodeID not in bcdict.keys()
def test_assign_edge_sym_constraints(nodeIDcoords): from fem.mesh.fem_mesh import SortNodeIDs from fem.mesh.bc import assign_edge_sym_constraints [snic, axes] = SortNodeIDs(nodeIDcoords, sort=False) bcdict = {} edge_constraints = (((0, 1), (1, 0), (0, 0)), '1,1,0,1,1,1') bcdict = assign_edge_sym_constraints(bcdict, snic, axes, edge_constraints) for nodeID in (737, 616, 495, 374): assert bcdict[nodeID] == "1,1,0,1,1,1"
def test_assign_node_constraints(nodeIDcoords): from fem.mesh.fem_mesh import SortNodeIDs from fem.mesh.bc import assign_node_constraints [snic, axes] = SortNodeIDs(nodeIDcoords, sort=False) face_constraints = (('1,1,1,1,1,1', '2,2,2,2,2,2'), ('3,3,3,3,3,3', '4,4,4,4,4,4'), ('5,5,5,5,5,5', '6,6,6,6,6,6')) bcdict = assign_node_constraints(snic, axes, face_constraints) assert bcdict[1] == '5,5,5,5,5,5'
def sorted_elems(nodeIDcoords): """create sorted elements numpy array from nodes.dyn & elems.dyn :returns: sorted_elems """ from fem.mesh.fem_mesh import load_elems from fem.mesh.fem_mesh import SortElems from fem.mesh.fem_mesh import SortNodeIDs elems = load_elems(testPath / "elems.dyn") [snic, axes] = SortNodeIDs(nodeIDcoords, sort=False) sorted_elems = SortElems(elems, axes) return sorted_elems
def test_constrain_sym_pml_nodes(nodeIDcoords): """THIS FUNCTION IS NOT NEEDED!! """ from fem.mesh.fem_mesh import SortNodeIDs from fem.mesh.bc import constrain_sym_pml_nodes [snic, axes] = SortNodeIDs(nodeIDcoords, sort=False) bcdict = {} edge_constraints = (((0, 1), (1, 0), (0, 0)), '1,1,0,1,1,1') pml_elems = ((3, 0), (0, 1), (2, 3)) bcdict = constrain_sym_pml_nodes(bcdict, snic, axes, pml_elems, edge_constraints) # check x sym face for start_node in (11, 132, 253, 858, 979, 1100, 1221): for nodeID in range(start_node, start_node + 111, 11): assert bcdict[nodeID] == '1,1,1,1,1,1' for not_in_bc in (374, 495, 616, 737): assert not_in_bc not in bcdict.keys() # check y sym face for start_node in (1, 122, 243, 848, 969, 1090, 1211): for nodeID in range(start_node, start_node + 11): assert bcdict[nodeID] == '1,1,1,1,1,1'