Disabled external gits
This commit is contained in:
83
cs457-gc/assignment_2_3/test/test.py
Normal file
83
cs457-gc/assignment_2_3/test/test.py
Normal file
@@ -0,0 +1,83 @@
|
||||
import time
|
||||
import pytest
|
||||
import json
|
||||
import sys
|
||||
import igl
|
||||
import numpy as np
|
||||
sys.path.append('../')
|
||||
sys.path.append('../src')
|
||||
from elasticsolid import *
|
||||
from elasticenergy import *
|
||||
eps = 1E-6
|
||||
|
||||
with open('test_data3.json', 'r') as infile:
|
||||
homework_datas = json.load(infile)
|
||||
|
||||
@pytest.mark.timeout(0.5)
|
||||
@pytest.mark.parametrize("data", homework_datas[0])
|
||||
def test_linear_dE(data):
|
||||
young, poisson, F, dF, dE_gt = data
|
||||
ee = LinearElasticEnergy(young, poisson)
|
||||
ee.make_differential_strain_tensor(np.array(F), np.array(dF))
|
||||
assert np.linalg.norm(ee.dE - np.array(dE_gt)) < eps
|
||||
|
||||
@pytest.mark.timeout(0.5)
|
||||
@pytest.mark.parametrize("data", homework_datas[1])
|
||||
def test_linear_dP(data):
|
||||
young, poisson, F, dF, dE, dP_gt = data
|
||||
ee = LinearElasticEnergy(young, poisson)
|
||||
ee.dE = np.array(dE)
|
||||
ee.make_differential_piola_kirchhoff_stress_tensor(np.array(F), np.array(dF))
|
||||
assert np.linalg.norm(ee.dP - np.array(dP_gt)) < eps
|
||||
|
||||
@pytest.mark.timeout(0.5)
|
||||
@pytest.mark.parametrize("data", homework_datas[2])
|
||||
def test_neo_dP(data):
|
||||
young, poisson, F, dF, dP_gt = data
|
||||
ee = NeoHookeanElasticEnergy(young, poisson)
|
||||
ee.logJ = np.log(np.linalg.det(np.array(F)))
|
||||
ee.Finv = np.linalg.inv(np.array(F))
|
||||
ee.make_differential_piola_kirchhoff_stress_tensor(np.array(F), np.array(dF))
|
||||
assert np.linalg.norm(ee.dP - np.array(dP_gt)) < eps
|
||||
|
||||
@pytest.mark.timeout(0.5)
|
||||
@pytest.mark.parametrize("data", homework_datas[3])
|
||||
def test_force_differentials(data):
|
||||
etype, young, poisson, v, t, rho, pin_idx, force_mass, v_def, dx, df_gt = data
|
||||
if etype == "linear":
|
||||
ee = LinearElasticEnergy(young, poisson)
|
||||
else:
|
||||
ee = NeoHookeanElasticEnergy(young, poisson)
|
||||
|
||||
es = ElasticSolid(np.array(v), np.array(t), ee, rho=rho, pin_idx=pin_idx, f_mass=np.array(force_mass))
|
||||
es.update_def_shape(np.array(v_def))
|
||||
|
||||
assert np.linalg.norm(es.compute_force_differentials(np.array(dx)) - np.array(df_gt)) < eps
|
||||
|
||||
@pytest.mark.timeout(1)
|
||||
@pytest.mark.parametrize("data", homework_datas[4])
|
||||
def test_CG(data):
|
||||
A, RHS, dx_gt = data
|
||||
A = np.array(A)
|
||||
|
||||
def LHS(dx_):
|
||||
return A@dx_
|
||||
assert np.linalg.norm(conjugate_gradient(LHS, np.array(RHS)) - np.array(dx_gt)) < eps
|
||||
|
||||
@pytest.mark.timeout(1)
|
||||
@pytest.mark.parametrize("data", homework_datas[5])
|
||||
def test_lhs_rhs(data):
|
||||
etype, young, poisson, v, t, rho, pin_idx, force_mass, v_def, dx, lhsdx_gt, rhs_gt = data
|
||||
if etype == "linear":
|
||||
ee = LinearElasticEnergy(young, poisson)
|
||||
else:
|
||||
ee = NeoHookeanElasticEnergy(young, poisson)
|
||||
|
||||
es = ElasticSolid(np.array(v), np.array(t), ee, rho=rho, pin_idx=pin_idx, f_mass=np.array(force_mass))
|
||||
es.update_def_shape(np.array(v_def))
|
||||
es.equilibrium_step(max_l_iter=0)
|
||||
|
||||
|
||||
assert np.linalg.norm(es.LHS(np.array(dx)) - np.array(lhsdx_gt)) < eps
|
||||
print(es.RHS, rhs_gt)
|
||||
assert np.linalg.norm(es.RHS - rhs_gt) < eps
|
Reference in New Issue
Block a user