Beispiel #1
0
    def test_tangent(self):

        shape = [2, 3]
        Eps = np.random.random(shape + [2, 2])
        Eps = tensor.A4_ddot_B2(tensor.Array2d(shape).I4s, Eps)
        mat = GMat.Elastic2d(np.random.random(shape), np.random.random(shape))
        mat.Eps = Eps
        self.assertTrue(np.allclose(tensor.A4_ddot_B2(mat.C, mat.Eps),
                                    mat.Sig))
Beispiel #2
0
    def test_Elastic(self):

        shape = [2, 3]
        K = np.random.random(shape)
        G = np.random.random(shape)
        mat = GMat.Elastic2d(K, G)

        gamma = np.random.random(shape)
        epsm = np.random.random(shape)

        mat.Eps[..., 0, 0] = epsm
        mat.Eps[..., 1, 1] = epsm
        mat.Eps[..., 0, 1] = gamma
        mat.Eps[..., 1, 0] = gamma
        mat.refresh()

        Sig = np.empty(shape + [2, 2])
        Sig[..., 0, 0] = K * epsm
        Sig[..., 1, 1] = K * epsm
        Sig[..., 0, 1] = G * gamma
        Sig[..., 1, 0] = G * gamma

        self.assertTrue(np.allclose(GMat.Epsd(mat.Eps), gamma))
        self.assertTrue(np.allclose(GMat.Sigd(mat.Sig), 2 * G * gamma))
        self.assertTrue(np.allclose(mat.Sig, Sig))
        self.assertTrue(np.allclose(tensor.A4_ddot_B2(mat.C, mat.Eps), Sig))
        self.assertTrue(np.allclose(mat.energy, K * epsm**2 + G * gamma**2))
        self.assertTrue(np.allclose(mat.K, K))
        self.assertTrue(np.allclose(mat.G, G))
    data["/elastic/epsy"] = epsy

    for m in mat:
        mat[m]["is_tensor2"] = np.zeros(shape + [2, 2], bool)
        mat[m]["is_tensor4"] = np.zeros(shape + [2, 2, 2, 2], bool)
        mat[m]["is_tensor2"] += (mat[m]["is"]).reshape(shape + [1, 1])
        mat[m]["is_tensor4"] += (mat[m]["is"]).reshape(shape + [1, 1, 1, 1])

    I4s = tensor.Array2d(shape).I4s

    for i in range(20):

        GradU = 200 * np.random.random(shape + [2, 2])

        data[f"/random/{i:d}/GradU"] = GradU
        Eps = tensor.A4_ddot_B2(I4s, GradU)

        for m in mat:
            mat[m]["mat"].Eps = Eps[mat[m]["is_tensor2"]].reshape(-1, 2, 2)
            Sig[mat[m]["is_tensor2"]] = mat[m]["mat"].Sig.reshape(-1)
            C[mat[m]["is_tensor4"]] = mat[m]["mat"].C.reshape(-1)
            if m == "Elastic1d":
                continue
            index[mat[m]["is"]] = mat[m]["mat"].i
            epsy_left[mat[m]["is"]] = mat[m]["mat"].epsy_left
            epsy_right[mat[m]["is"]] = mat[m]["mat"].epsy_right

        data[f"/random/{i:d}/Stress"] = Sig
        data[f"/random/{i:d}/Tangent"] = C
        data[f"/random/{i:d}/CurrentIndex"] = index
        data[f"/random/{i:d}/CurrentYieldLeft"] = epsy_left