예제 #1
0
        public static void HexaCantileverBuilder_copyMS_222(Model model, double load_value)
        {
            //Origin: ParadeigmataElegxwnBuilder.HexaCantileverBuilder_copyMS_222(Model model, double load_value)

            IRVEbuilder homogeneousRveBuilder1 = new HomogeneousRVEBuilderNonLinear();

            IContinuumMaterial3DDefGrad material1 = new MicrostructureDefGrad3D(homogeneousRveBuilder1,
                                                                                m => (new SkylineSolver.Builder()).BuildSolver(m), false, 1);

            double[,] nodeData = new double[, ] {
                { -0.250000, -0.250000, -1.000000 },
                { 0.250000, -0.250000, -1.000000 },
                { -0.250000, 0.250000, -1.000000 },
                { 0.250000, 0.250000, -1.000000 },
                { -0.250000, -0.250000, -0.500000 },
                { 0.250000, -0.250000, -0.500000 },
                { -0.250000, 0.250000, -0.500000 },
                { 0.250000, 0.250000, -0.500000 },
                { -0.250000, -0.250000, 0.000000 },
                { 0.250000, -0.250000, 0.000000 },
                { -0.250000, 0.250000, 0.000000 },
                { 0.250000, 0.250000, 0.000000 },
                { -0.250000, -0.250000, 0.500000 },
                { 0.250000, -0.250000, 0.500000 },
                { -0.250000, 0.250000, 0.500000 },
                { 0.250000, 0.250000, 0.500000 },
                { -0.250000, -0.250000, 1.000000 },
                { 0.250000, -0.250000, 1.000000 },
                { -0.250000, 0.250000, 1.000000 },
                { 0.250000, 0.250000, 1.000000 }
            };

            int[,] elementData = new int[, ] {
                { 1, 8, 7, 5, 6, 4, 3, 1, 2 },
                { 2, 12, 11, 9, 10, 8, 7, 5, 6 },
                { 3, 16, 15, 13, 14, 12, 11, 9, 10 },
                { 4, 20, 19, 17, 18, 16, 15, 13, 14 },
            };

            // orismos shmeiwn
            for (int nNode = 0; nNode < nodeData.GetLength(0); nNode++)
            {
                model.NodesDictionary.Add(nNode + 1, new Node(id: nNode + 1, x: nodeData[nNode, 0], y:  nodeData[nNode, 1], z: nodeData[nNode, 2]));
            }

            // orismos elements
            Element e1;
            int     subdomainID = 1;

            for (int nElement = 0; nElement < elementData.GetLength(0); nElement++)
            {
                e1 = new Element()
                {
                    ID          = nElement + 1,
                    ElementType = new Hexa8NonLinearDefGrad(material1, GaussLegendre3D.GetQuadratureWithOrder(2, 2, 2)) // dixws to e. exoume sfalma enw sto beambuilding oxi//edw kaleitai me ena orisma to Hexa8
                };
                for (int j = 0; j < 8; j++)
                {
                    e1.NodesDictionary.Add(elementData[nElement, j + 1], model.NodesDictionary[elementData[nElement, j + 1]]);
                }
                model.ElementsDictionary.Add(e1.ID, e1);
                model.SubdomainsDictionary[subdomainID].Elements.Add(e1);
            }

            // constraint vashh opou z=-1
            for (int k = 1; k < 5; k++)
            {
                model.NodesDictionary[k].Constraints.Add(new Constraint {
                    DOF = StructuralDof.TranslationX
                });
                model.NodesDictionary[k].Constraints.Add(new Constraint {
                    DOF = StructuralDof.TranslationY
                });
                model.NodesDictionary[k].Constraints.Add(new Constraint {
                    DOF = StructuralDof.TranslationZ
                });
            }

            // fortish korufhs
            Load load1;

            for (int k = 17; k < 21; k++)
            {
                load1 = new Load()
                {
                    Node   = model.NodesDictionary[k],
                    DOF    = StructuralDof.TranslationX,
                    Amount = 1 * load_value
                };
                model.Loads.Add(load1);
            }
        }
예제 #2
0
        public static (int[], int[], int[]) Check_Graphene_rve_parallel() //palio "Check_Graphene_rve_Obje_Integration()"
        {
            //Origin h methodos Check_Graphene_rve_serial() tou parontos
            //Origin: SeparateCodeCheckingClass4.Check_Graphene_rve_Obje_Integration apo to branch: example/ms_development_nl_elements_merge
            //modifications: update kai tha xrhsimopoithei o GrapheneReinforcedRVEBuilderExample35fe2boundstiffHostTestPostData
            //o opoios exei kai antistoixo ddm: GrapheneReinforcedRVEBuilderExample35fe2boundstiffHostTestPostDataDdm pou tha trexei akrivws apo katw
            //PROSOXH gia na elegxei kai h defterh iteration u_sunol_micro_2 prepei na valoume ston graphenebuilder Addgraphenesheet xwris to bondslip.

            //mporoun na ginoun delete:
            double            E_disp = 3.5; /*Gpa*/ double ni_disp = 0.4; // stather Poisson
            ElasticMaterial3D material1 = new ElasticMaterial3D()
            {
                YoungModulus = E_disp, PoissonRatio = ni_disp,
            };

            double[,] DGtr = new double[3, 3] {
                { 1.10, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }
            };
            double[] GLVec = Transform_DGtr_to_GLvec(DGtr);
            material1.UpdateMaterial(GLVec);
            //double[] stressesCheck1 = material1.Stresses;
            double[] stressesCheck1 = new double[6] {
                material1.Stresses[0], material1.Stresses[1], material1.Stresses[2],
                material1.Stresses[3], material1.Stresses[4], material1.Stresses[5]
            };
            DGtr = new double[3, 3] {
                { 1.20, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }
            };
            GLVec = Transform_DGtr_to_GLvec(DGtr);
            material1.UpdateMaterial(GLVec);
            material1.SaveState();
            double[] stressesCheck2 = material1.Stresses;

            // den xreiazetai poia VectorExtensions.AssignTotalAffinityCount();
            var grapheneRveBuilder1 = new RveGrShMultipleSeparated(1);
            //IRVEbuilder homogeneousRveBuilder1 = new HomogeneousRVEBuilderCheckEnaHexa();

            // pros to paron
            var ModelAndNodes = grapheneRveBuilder1.GetModelAndBoundaryNodes();

            int[] hexaPrint  = grapheneRveBuilder1.hexaPrint;
            int[] cohePrint  = grapheneRveBuilder1.cohePrint;
            int[] shellPrint = grapheneRveBuilder1.shellPrint;
            return(hexaPrint, cohePrint, shellPrint);

            IContinuumMaterial3DDefGrad microstructure3 = new MicrostructureDefGrad3D(grapheneRveBuilder1,
                                                                                      model => (new SkylineSolver.Builder()).BuildSolver(model), false, 1);

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

            microstructure3.UpdateMaterial(new double[9] {
                1.05, 1, 1, 0, 0, 0, 0, 0, 0
            });
            double[] stressesCheck3 = microstructure3.Stresses;
            microstructure3.SaveState();
            microstructure3.UpdateMaterial(new double[9] {
                1.10, 1, 1, 0, 0, 0, 0, 0, 0
            });
            double[] stressesCheck4 = microstructure3.Stresses;
        }
        public static (double[], double[], double[, ], IVector, IVector) Check_Graphene_rve_Obje_Integration()
        {
            //Origin: SeparateCodeCheckingClass4.Check05bStressIntegrationObje_Integration parontos
            //modifications: tha xrhsimopoithei o GrapheneBuilder...35...v2 gia epilush enos paradeigmatos GrapheneReinforcedRVEBuilderCHECK
            //gia elegxo twn newn domwn
            //PROSOXH gia na elegxei kai h defterh iteration u_sunol_micro_2 prepei na valoume ston graphenebuilder Addgraphenesheet xwris to bondslip.

            double E_disp = 3.5; /*Gpa*/ double ni_disp = 0.4; // stather Poisson
            var    material1 = new ElasticMaterial3D()
            {
                YoungModulus = E_disp, PoissonRatio = ni_disp,
            };

            double[,] DGtr = new double[3, 3] {
                { 1.10, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }
            };
            double[] GLVec = Transform_DGtr_to_GLvec(DGtr);
            material1.UpdateMaterial(GLVec);
            //double[] stressesCheck1 = material1.Stresses;
            double[] stressesCheck1 = new double[6] {
                material1.Stresses[0], material1.Stresses[1], material1.Stresses[2],
                material1.Stresses[3], material1.Stresses[4], material1.Stresses[5]
            };
            DGtr = new double[3, 3] {
                { 1.20, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }
            };
            GLVec = Transform_DGtr_to_GLvec(DGtr);
            material1.UpdateMaterial(GLVec);
            material1.SaveState();
            double[] stressesCheck2 = material1.Stresses;

            //VectorExtensions.AssignTotalAffinityCount();
            IRVEbuilder homogeneousRveBuilder1 = new RveGrShOne(1);
            //IRVEbuilder homogeneousRveBuilder1 = new HomogeneousRVEBuilderCheckEnaHexa();

            //IContinuumMaterial3DDefGrad
            var microstructure3 = new MicrostructureDefGrad3D(homogeneousRveBuilder1,
                                                              model => (new SkylineSolver.Builder()).BuildSolver(model), false, 1);

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

            microstructure3.UpdateMaterial(new double[9] {
                1.05, 1, 1, 0, 0, 0, 0, 0, 0
            });
            double[] stressesCheck3 = microstructure3.Stresses;
            microstructure3.SaveState();
            IVector uInitialFreeDOFs_state1 = microstructure3.uInitialFreeDOFDisplacementsPerSubdomain[1].Copy();

            microstructure3.UpdateMaterial(new double[9] {
                1.10, 1, 1, 0, 0, 0, 0, 0, 0
            });
            double[] stressesCheck4          = microstructure3.Stresses;
            IVector  uInitialFreeDOFs_state2 = microstructure3.uInitialFreeDOFDisplacementsPerSubdomain[1].Copy();

            //PrintUtilities.WriteToFileVector(stressesCheck3, @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\stressesCheck3.txt");
            //PrintUtilities.WriteToFileVector(stressesCheck4, @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\stressesCheck4.txt");
            //PrintUtilities.WriteToFile(consCheck1, @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\consCheck1.txt");
            //PrintUtilities.WriteToFileVector(uInitialFreeDOFs_state1.CopyToArray(), @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\uInitialFreeDOFs_state1.txt");
            //PrintUtilities.WriteToFileVector(uInitialFreeDOFs_state2.CopyToArray(), @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\uInitialFreeDOFs_state2.txt");


            return(stressesCheck3, stressesCheck4, consCheck1, uInitialFreeDOFs_state1, uInitialFreeDOFs_state2);
        }
예제 #4
0
        public static (double[], double[], double[, ], IVector, IVector) Check_Graphene_rve_serial() //palio "Check_Graphene_rve_Obje_Integration()"
        {
            //Origin: SeparateCodeCheckingClass4.Check_Graphene_rve_Obje_Integration apo to branch: example/ms_development_nl_elements_merge
            //modifications: update kai tha xrhsimopoithei o GrapheneReinforcedRVEBuilderExample35fe2boundstiffHostTestPostData
            //o opoios exei kai antistoixo ddm: GrapheneReinforcedRVEBuilderExample35fe2boundstiffHostTestPostDataDdm pou tha trexei akrivws apo katw
            //PROSOXH gia na elegxei kai h defterh iteration u_sunol_micro_2 prepei na valoume ston graphenebuilder Addgraphenesheet xwris to bondslip.
            //mporoun na ginoun delete:
            double E_disp = 3.5; /*Gpa*/ double ni_disp = 0.4; // stather Poisson
            var    material1 = new ElasticMaterial3D()
            {
                YoungModulus = E_disp, PoissonRatio = ni_disp,
            };

            double[,] DGtr = new double[3, 3] {
                { 1.10, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }
            };
            double[] GLVec = Transform_DGtr_to_GLvec(DGtr);
            material1.UpdateMaterial(GLVec);
            //double[] stressesCheck1 = material1.Stresses;
            double[] stressesCheck1 = new double[6] {
                material1.Stresses[0], material1.Stresses[1], material1.Stresses[2],
                material1.Stresses[3], material1.Stresses[4], material1.Stresses[5]
            };
            DGtr = new double[3, 3] {
                { 1.20, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }
            };
            GLVec = Transform_DGtr_to_GLvec(DGtr);
            material1.UpdateMaterial(GLVec);
            material1.SaveState();
            double[] stressesCheck2 = material1.Stresses;

            // den xreiazetai poia VectorExtensions.AssignTotalAffinityCount();
            IRVEbuilder homogeneousRveBuilder1 = new RveGrShMultiple(1);
            //IRVEbuilder homogeneousRveBuilder1 = new HomogeneousRVEBuilderCheckEnaHexa();

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

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

            microstructure3.UpdateMaterial(new double[9] {
                1.05, 1, 1, 0, 0, 0, 0, 0, 0
            });
            double[] stressesCheck3 = microstructure3.Stresses;
            microstructure3.SaveState();
            IVector uInitialFreeDOFs_state1 = microstructure3.uInitialFreeDOFDisplacementsPerSubdomain[1].Copy();

            microstructure3.UpdateMaterial(new double[9] {
                1.10, 1, 1, 0, 0, 0, 0, 0, 0
            });
            double[] stressesCheck4          = microstructure3.Stresses;
            IVector  uInitialFreeDOFs_state2 = microstructure3.uInitialFreeDOFDisplacementsPerSubdomain[1].Copy();

            //PrintUtilities.WriteToFileVector(stressesCheck3, @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\stressesCheck3.txt");
            //PrintUtilities.WriteToFileVector(stressesCheck4, @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\stressesCheck4.txt");
            //PrintUtilities.WriteToFile(consCheck1, @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\consCheck1.txt");
            //PrintUtilities.WriteToFileVector(uInitialFreeDOFs_state1.CopyToArray(), @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\uInitialFreeDOFs_state1.txt");
            //PrintUtilities.WriteToFileVector(uInitialFreeDOFs_state2.CopyToArray(), @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\uInitialFreeDOFs_state2.txt");

            return(stressesCheck3, stressesCheck4, consCheck1, uInitialFreeDOFs_state1, uInitialFreeDOFs_state2);
        }
        public static (double[], double[], double[], double[], IVector, IVector) Check05bStressIntegrationObje_Integration()
        {
            //Origin: SeparateCodeCheckingClass.Check05bStressIntegration
            //modifications: tha xrhsimopoithei h nea microstructure me obje kapoia subdomainCalculations

            double E_disp = 3.5; /*Gpa*/ double ni_disp = 0.4; // stather Poisson
            var    material1 = new ElasticMaterial3D()
            {
                YoungModulus = E_disp, PoissonRatio = ni_disp,
            };

            double[,] DGtr = new double[3, 3] {
                { 1.10, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }
            };
            double[] GLVec = Transform_DGtr_to_GLvec(DGtr);
            material1.UpdateMaterial(GLVec);
            //double[] stressesCheck1 = material1.Stresses;
            double[] stressesCheck1 = new double[6] {
                material1.Stresses[0], material1.Stresses[1], material1.Stresses[2],
                material1.Stresses[3], material1.Stresses[4], material1.Stresses[5]
            };
            DGtr = new double[3, 3] {
                { 1.20, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }
            };
            GLVec = Transform_DGtr_to_GLvec(DGtr);
            material1.UpdateMaterial(GLVec);
            material1.SaveState();
            double[] stressesCheck2 = material1.Stresses;

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

            //IContinuumMaterial3DDefGrad
            var microstructure3 = new MicrostructureDefGrad3D(homogeneousRveBuilder1,
                                                              model => (new SkylineSolver.Builder()).BuildSolver(model), false, 1);

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

            microstructure3.UpdateMaterial(new double[9] {
                1.10, 1, 1, 0, 0, 0, 0, 0, 0
            });
            double[] stressesCheck3 = microstructure3.Stresses;
            microstructure3.SaveState();
            IVector uInitialFreeDOFs_state1 = microstructure3.uInitialFreeDOFDisplacementsPerSubdomain[1].Copy();

            microstructure3.UpdateMaterial(new double[9] {
                1.20, 1, 1, 0, 0, 0, 0, 0, 0
            });
            double[] stressesCheck4          = microstructure3.Stresses;
            IVector  uInitialFreeDOFs_state2 = microstructure3.uInitialFreeDOFDisplacementsPerSubdomain[1].Copy();

            //PrintUtilities.WriteToFileVector(uInitialFreeDOFs_state1.CopyToArray(), @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\uInitialFreeDOFs_state1.txt");
            //PrintUtilities.WriteToFileVector(uInitialFreeDOFs_state2.CopyToArray(), @"C:\Users\turbo-x\Desktop\notes_elegxoi\MSOLVE_output_2\uInitialFreeDOFs_state2.txt");

            return(stressesCheck1, stressesCheck2, stressesCheck3, stressesCheck4, uInitialFreeDOFs_state1, uInitialFreeDOFs_state2);
        }