예제 #1
0
        public static void CheckShellScaleTransitionsAndMicrostructure()
        {
            //Origin: Check05fStressIntegration
            //alllages: use of updated v2 classes


            double E_disp = 3.5; /*Gpa*/ double ni_disp = 0.4; // stather Poisson
            //var material1 = new ElasticMaterial2D(StressState2D.PlaneStress)
            //{ YoungModulus = E_disp, PoissonRatio = ni_disp, };
            //double[] GLVec = new double[3] { 0.01, 0, 0 };
            //material1.UpdateMaterial(new StressStrainVectorContinuum2D(GLVec));
            //double[] stressesCheck1 = new double[3] { material1.Stresses[0], material1.Stresses[1], material1.Stresses[2] };

            var Vec1 = Vector.CreateFromArray(new double[3] {
                1, 0, 0
            });
            var Vec2 = Vector.CreateFromArray(new double[3] {
                0.5, 2, 0
            });
            var strain = new double[3] {
                0.01, 0, 0
            };

            //var material2 = new ShellElasticMaterial2D() { YoungModulus = E_disp, PoissonRatio = ni_disp, TangentVectorV1 = new double[3] { Vec1[0], Vec1[1], Vec1[2] }, TangentVectorV2 = new double[3] { Vec2[0], Vec2[1], Vec2[2] } };
            //material2.UpdateMaterial(strain);
            //double[] stressesCheck2 = new double[3] { material2.Stresses[0], material2.Stresses[1], material2.Stresses[2] };

            var material3 = new ShellElasticMaterial2Dtransformationb()
            {
                YoungModulus = E_disp, PoissonRatio = ni_disp, TangentVectorV1 = new double[3] {
                    Vec1[0], Vec1[1], Vec1[2]
                }, TangentVectorV2 = new double[3] {
                    Vec2[0], Vec2[1], Vec2[2]
                }
            };
            var Matrix1 = Matrix.CreateZero(3, 3); for (int i1 = 0; i1 < 3; i1++)

            {
                for (int i2 = 0; i2 < 3; i2++)
                {
                    Matrix1[i1, i2] = material3.ConstitutiveMatrix[i1, i2];
                }
            }

            material3.UpdateMaterial(strain);
            double[] stressesCheck3 = new double[3] {
                material3.Stresses[0], material3.Stresses[1], material3.Stresses[2]
            };

            //VectorExtensions.AssignTotalAffinityCount();
            IdegenerateRVEbuilder homogeneousRveBuilder1 = new HomogeneousRVEBuilderLinearAndDegenerate();

            //IRVEbuilder homogeneousRveBuilder1 = new HomogeneousRVEBuilderCheckEnaHexa();

            //IContinuumMaterial2D microstructure3 = new Microstructure3DevelopMultipleSubdomainsUseBaseSmallStrains2D(homogeneousRveBuilder1);
            //IContinuumMaterial3DDefGrad microstructure3copyConsCheck = new Microstructure3copyConsCheckEna(homogeneousRveBuilder1);
            double[,] consCheck1 = new double[3, 3];
            for (int i1 = 0; i1 < 3; i1++)
            {
                for (int i2 = 0; i2 < 3; i2++)
                {
                    consCheck1[i1, i2] = material3.ConstitutiveMatrix[i1, i2];
                }
            }

            var material4 = new MicrostructureShell2D(homogeneousRveBuilder1,
                                                      model => (new SkylineSolver.Builder()).BuildSolver(model), false, 1)
            {
                TangentVectorV1 = new double[3] {
                    Vec1[0], Vec1[1], Vec1[2]
                },
                TangentVectorV2 = new double[3] {
                    Vec2[0], Vec2[1], Vec2[2]
                }
            };
            var Matrix2 = Matrix.CreateZero(3, 3); for (int i1 = 0; i1 < 3; i1++)

            {
                for (int i2 = 0; i2 < 3; i2++)
                {
                    Matrix2[i1, i2] = material4.ConstitutiveMatrix[i1, i2];
                }
            }

            material4.UpdateMaterial(strain);
            double[] stressesCheck4 = new double[3] {
                material4.Stresses[0], material4.Stresses[1], material4.Stresses[2]
            };


            //-------------Check 2 steps savestate etc---------------
            material4.SaveState();
            material4.UpdateMaterial(new double[3] {
                2 * strain[0], 2 * strain[1], 2 * strain[2]
            });
            double[] stressesCheck5 = new double[3] {
                material4.Stresses[0], material4.Stresses[1], material4.Stresses[2]
            };

            Assert.True(NRNLAnalyzerDevelopTest.AreDisplacementsSame(stressesCheck3, stressesCheck4));
            Assert.True(NRNLAnalyzerDevelopTest.AreDisplacementsSame(new double[3] {
                2 * stressesCheck3[0], 2 * stressesCheck3[1], 2 * stressesCheck3[2]
            },
                                                                     stressesCheck5));
            Assert.True(BondSlipTest.AreDisplacementsSame(Matrix1.CopyToArray2D(), consCheck1));
            Assert.True(AreDisplacementsSame(Matrix1.CopyToArray2D(), material4.ConstitutiveMatrix));
        }
예제 #2
0
        public static void Check2DscaleTransitionsAndMicrostructure()
        {
            //Check05cStressIntegration()
            double E_disp = 3.5; /*Gpa*/ double ni_disp = 0.4; // stathera Poisson
            var    material1 = new ElasticMaterial2D(StressState2D.PlaneStress)
            {
                YoungModulus = E_disp, PoissonRatio = ni_disp,
            };

            double[] GLVec = new double[3] {
                0.01, 0, 0
            };
            material1.UpdateMaterial(GLVec);
            double[] stressesCheck1 = new double[3] {
                material1.Stresses[0], material1.Stresses[1], material1.Stresses[2]
            };
            //material1.SaveState();
            GLVec = new double[3] {
                0.02, 0, 0
            };
            material1.UpdateMaterial(GLVec);
            double[] stressesCheck2 = new double[3] {
                material1.Stresses[0], material1.Stresses[1], material1.Stresses[2]
            };

            //VectorExtensions.AssignTotalAffinityCount();
            IdegenerateRVEbuilder homogeneousRveBuilder1 = new HomogeneousRVEBuilderLinearAndDegenerate();
            //IRVEbuilder homogeneousRveBuilder1 = new HomogeneousRVEBuilderCheckEnaHexa();

            IContinuumMaterial2D microstructure3 = new Microstructure2DplaneStress(homogeneousRveBuilder1,
                                                                                   model => (new SkylineSolver.Builder()).BuildSolver(model), false, 1);

            //IContinuumMaterial3DDefGrad microstructure3copyConsCheck = new Microstructure3copyConsCheckEna(homogeneousRveBuilder1);
            double[,] consCheck1 = new double[3, 3];
            for (int i1 = 0; i1 < 3; i1++)
            {
                for (int i2 = 0; i2 < 3; i2++)
                {
                    consCheck1[i1, i2] = microstructure3.ConstitutiveMatrix[i1, i2];
                }
            }

            microstructure3.UpdateMaterial(new double[3] {
                0.010, 0, 0
            });
            double[] stressesCheck3 = new double[3] {
                microstructure3.Stresses[0], microstructure3.Stresses[1], microstructure3.Stresses[2]
            };
            microstructure3.SaveState();
            microstructure3.UpdateMaterial(new double[3] {
                0.020, 0, 0
            });
            double[] stressesCheck4 = new double[3] {
                microstructure3.Stresses[0], microstructure3.Stresses[1], microstructure3.Stresses[2]
            };

            microstructure3.SaveState();
            microstructure3.UpdateMaterial(new double[3] {
                0.030, 0, 0
            });
            double[] stressesCheck5 = new double[3] {
                microstructure3.Stresses[0], microstructure3.Stresses[1], microstructure3.Stresses[2]
            };
            var Matrix1 = Matrix.CreateZero(3, 3); for (int i1 = 0; i1 < 3; i1++)

            {
                for (int i2 = 0; i2 < 3; i2++)
                {
                    Matrix1[i1, i2] = microstructure3.ConstitutiveMatrix[i1, i2];
                }
            }

            Assert.True(NRNLAnalyzerDevelopTest.AreDisplacementsSame(stressesCheck1, stressesCheck3));
            Assert.True(NRNLAnalyzerDevelopTest.AreDisplacementsSame(stressesCheck2, stressesCheck4));
            Assert.True(NRNLAnalyzerDevelopTest.AreDisplacementsSame(new double[3] {
                3 * stressesCheck1[0], 3 * stressesCheck1[1], 3 * stressesCheck1[2]
            },
                                                                     stressesCheck5));
            Assert.True(AreDisplacementsSame(consCheck1, material1.ConstitutiveMatrix));
            Assert.True(AreDisplacementsSame(Matrix1.CopyToArray2D(), material1.ConstitutiveMatrix));
        }