예제 #1
0
        public Matrix3D GetStrain(Symmetry symmetry, Matrix3D rotation, Matrix3D stress)
        {
            Matrix3D m1 = rotation.Transpose() * stress * rotation;
            Matrix3D m2 = GetStrain(symmetry, m1);
            Matrix3D m  = rotation * m2 * rotation.Transpose();

            return(m);
        }
예제 #2
0
 public Matrix3D GetStrain(Symmetry symmetry, Matrix3D stress)
 {
     return(symmetry.CrystalSystemNumber switch
     {
         0 => GetStrainTriclinic(stress),
         1 => GetStrainTriclinic(stress),    //tricrinic
         2 => GetStrainOrthorhombic(stress), //mono
         3 => GetStrainOrthorhombic(stress), //ortho
         4 => GetStrainTriclinic(stress),    //tetra
         5 => GetStrainTrigonal(stress),     //trigonal
         6 => GetStrainTriclinic(stress),    //hexa
         7 => GetStrainCubic(stress),        //cubic
         _ => new Matrix3D(),
     });
예제 #3
0
        public Matrix3D GetStrain(Symmetry symmetry, Matrix3D stress)
        {
            switch (symmetry.CrystalSystemNumber)
            {
            case 0: return(GetStrainTriclinic(stress));

            case 1: return(GetStrainTriclinic(stress));    //tricrinic

            case 2: return(GetStrainOrthorhombic(stress)); //mono

            case 3: return(GetStrainOrthorhombic(stress)); //ortho

            case 4: return(GetStrainTriclinic(stress));    //tetra

            case 5: return(GetStrainTrigonal(stress));     //trigonal

            case 6: return(GetStrainTriclinic(stress));    //hexa

            case 7: return(GetStrainCubic(stress));        //cubic
            }
            return(new Matrix3D());
        }
예제 #4
0
 public Matrix3D GetStrainByHill(Symmetry symmetry, Matrix3D rotation, Matrix3D stress, Matrix3D strain, double hillFactor)
 {
     return(hillFactor * GetStrain(symmetry, rotation, stress) + (1 - hillFactor) * strain);
 }