def test_elastic_FE_simulation_3D(): from pymks.datasets.elastic_FE_simulation import ElasticFESimulation nx = 5 ii = (nx - 1) / 2 X = np.zeros((1, nx, nx, nx), dtype=int) X[0, :, ii] = 1 model = ElasticFESimulation(elastic_modulus=(1., 10.), poissons_ratio=(0., 0.)) model.run(X) solution = [1., 0., 0., 0., 0., 0.] assert np.allclose([np.mean(model.strain[0, ..., i]) for i in range(6)], solution)
def test_elastic_FE_simulation_3D_BCs(): from pymks.datasets.elastic_FE_simulation import ElasticFESimulation np.random.seed(8) N = 4 X = np.random.randint(2, size=(1, N, N, N)) macro_strain = 0.1 sim = ElasticFESimulation((10.0, 1.0), (0.3, 0.3), macro_strain=0.1) sim.run(X) u = sim.displacement[0] ## Check the left/right offset assert np.allclose(u[-1, ..., 0] - u[0, ..., 0], N * macro_strain) ## Check the left/right y-periodicity assert np.allclose(u[0, ..., 1], u[-1, ..., 1])
def test_issue106(): from pymks.datasets.elastic_FE_simulation import ElasticFESimulation import numpy as np L = 5 elastic_modulus = (1, 2, 3) poissons_ratio = (0.3, 0.3, 0.3) size = (1, L, L) sim = ElasticFESimulation(elastic_modulus=elastic_modulus, poissons_ratio=poissons_ratio) X = np.zeros(size, dtype=int) sim.run(X) X = np.ones(size, dtype=int) sim.run(X) X[0, 0, 0] = -1 with pytest.raises(RuntimeError) as excinfo: sim.run(X) assert "X must be between 0 and 2." == str(excinfo.value)