Exemplo n.º 1
0
        /// <summary>
        /// 問題を設定する
        /// </summary>
        /// <returns></returns>
        private bool setNewProblem()
        {
            bool success = false;

            try
            {
                if (ProbNo == 0)
                {
                     // linear Solid stationary analysis
                    Id_field_disp_fix0 = 0;
                    Id_field_temp = 0;
                    Id_field_stress = 0;
                    Id_field_equiv_stress = 0;
                    ////////////////
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    using (CCadObj2D cad2d = new CCadObj2D())
                    {
                        {
                            // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(5.0,0.0) );
                            pts.Add( new CVector2D(5.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            cad2d.AddPolygon( pts );
                        }
                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.1) );
                        conv = World.GetIDConverter(id_base);
                    }

                    Solid.Clear();
                    Solid.UpdateDomain_Field(id_base, World);
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);
                    // Setting Material Parameter
                    Solid.SetYoungPoisson(10.0,0.3,true);    // planter stress
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetGravitation(0.0,0.0);
                    Solid.SetTimeIntegrationParameter(Dt,0.7);

                    uint id_field_bc0 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(2,CAD_ELEM_TYPE.EDGE),World);
                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(4,CAD_ELEM_TYPE.EDGE),World);

                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc0,World);
                    FieldValueSetter.SetMathExp("sin(t*PI*2*0.1)", 1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field y axis

                    // Setting Visualiziation
                    DrawerAry.Clear();
                    Id_field_disp = Solid.GetIdField_Disp();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // set view transformation
                }
                else if( ProbNo == 1 )    // save stiffness matrix for the efficency of computation
                {
                    Solid.SetSaveStiffMat(true);
                }
                else if( ProbNo == 2 )    // non-stationary analysis
                {
                    Solid.SetSaveStiffMat(true);
                    Solid.SetStationary(false);
                }
                else if( ProbNo == 3 )    // set stiffer material
                {
                    Solid.SetYoungPoisson(50,0.3,true);
                }
                else if( ProbNo == 4 )    // set more stiffer material
                {
                    Solid.SetYoungPoisson(100,0.3,true);
                }
                else if( ProbNo == 5 )    // geometrical non-linear stationaly
                {
                    Solid.SetStationary(true);
                    Solid.SetGeometricalNonlinear(true);
                }
                else if( ProbNo == 6 )    // geometrical non-linear non-stationary
                {
                    Solid.SetYoungPoisson(10,0.0,true);
                    Solid.SetStationary(false);
                    Solid.SetGeometricalNonlinear(true);
                }
                else if( ProbNo == 7 )    // display equivalent stress field in deformedconfigulation
                {
                    Id_field_equiv_stress = World.MakeField_FieldElemDim(Id_field_disp, 2,
                        DelFEM4NetFem.Field.FIELD_TYPE.SCALAR,
                        DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                        DelFEM4NetFem.Field.ELSEG_TYPE.BUBBLE);
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetStationary(true);
                    // set up visualization
                    DrawerAry.Clear();
                    Id_field_disp = Solid.GetIdField_Disp();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_equiv_stress,false,World,Id_field_equiv_stress, 0,0.5) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // init view transformation
                }
                else if( ProbNo == 8 )    // display equivalent stress field in initial configulation
                {
                    // set up visualization
                    DrawerAry.Clear();
                    Id_field_disp = Solid.GetIdField_Disp();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World,Id_field_equiv_stress, 0,0.5) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // init view transformation
                }
                else if( ProbNo == 9 )    // thermal-Solid analysis
                {
                    Id_field_equiv_stress = 0;
                    Id_field_stress = 0;
                    ////////////////
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    using (CCadObj2D cad2d = new CCadObj2D())
                    {
                         {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(3.0,0.0) );
                            pts.Add( new CVector2D(3.0,1.0) );
                            pts.Add( new CVector2D(2.0,1.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            cad2d.AddPolygon( pts );
                        }
                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.1) );
                        conv = World.GetIDConverter(id_base);
                    }
                    Solid.UpdateDomain_Field(id_base,World);
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);
                    // set material property
                    Solid.SetYoungPoisson(10.0,0.3,true);    // set planer stress
                    Solid.SetGeometricalNonlinear(false);    // geometricaly linear model
                    Solid.SetGravitation(0.0,-0.1);
                    Solid.SetTimeIntegrationParameter(Dt);    // set time setp

                    uint id_field_bc0 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(2,CAD_ELEM_TYPE.EDGE),World);
                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(6,CAD_ELEM_TYPE.EDGE),World);

                    // set temparature field
                    Id_field_temp = World.MakeField_FieldElemDim(Id_field_disp, 2,
                        DelFEM4NetFem.Field.FIELD_TYPE.SCALAR,
                        DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                        DelFEM4NetFem.Field.ELSEG_TYPE.CORNER);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(Id_field_temp,World);
                    FieldValueSetter.SetMathExp("sin(6.28*y)*sin(x)*sin(t)", 0,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field y axis

                    Solid.SetThermalStress(Id_field_temp);
                    Solid.ClearFixElemAry(3,World);

                    DrawerAry.Clear();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false, World, Id_field_temp, -1,1) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // set view transformation
                }
                else if( ProbNo == 10 )    // show contour in undeformed configuration
                {
                    DrawerAry.Clear();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_temp,true, World, Id_field_temp, -1,1) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // set view transformation
                }
                else if( ProbNo == 11 )    // stop considering thermal-effect
                {
                    Solid.SetThermalStress(0);
                }
                else if( ProbNo == 12 )
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;        // get ID converter
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            uint id_l = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.3,0.2)).id_v_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.7,0.2)).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.7,0.8)).id_v_add;
                            uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.3,0.8)).id_v_add;
                            cad2d.ConnectVertex_Line(id_v1,id_v2);
                            cad2d.ConnectVertex_Line(id_v2,id_v3);
                            cad2d.ConnectVertex_Line(id_v3,id_v4);
                            cad2d.ConnectVertex_Line(id_v4,id_v1);
                        }
                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.05) );
                        conv = World.GetIDConverter(id_base);        // get ID converter
                    }

                    Solid.SetDomain_FieldEA(id_base,conv.GetIdEA_fromCad(1,CAD_ELEM_TYPE.LOOP),World);
                    Solid.SetSaveStiffMat(true);
                    Solid.SetStationary(true);
                    Solid.SetTimeIntegrationParameter(Dt);    // set time step
                    Solid.SetYoungPoisson(2.5,0.3,true);    // planer stress
                    Solid.SetGeometricalNonlinear(false);    // set geometrical liner
                    Solid.SetGravitation(0.0,0.0);    // set gravitation

                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(3,CAD_ELEM_TYPE.EDGE),World);
                    uint id_field_bc2 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(1,CAD_ELEM_TYPE.EDGE),World);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc1,World);
                    FieldValueSetter.SetMathExp("0.3*sin(1.5*t)", 0,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field x axis
                    FieldValueSetter.SetMathExp("0.1*(cos(t)+1)", 1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field y axis

                    // set visualization
                    DrawerAry.Clear();
                    Id_field_disp = Solid.GetIdField_Disp();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // set view transformation
                }
                else if( ProbNo == 13 )
                {
                    Solid.SetSaveStiffMat(true);
                }
                else if( ProbNo == 14 )
                {
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(false);
                }
                else if( ProbNo == 15 ){
                    Solid.SetStationary(true);
                    Solid.SetGeometricalNonlinear(true);
                }
                else if( ProbNo == 16 ){
                    Solid.SetStationary(false);
                    Solid.SetGeometricalNonlinear(true);
                }
                else if( ProbNo == 17 )    // hard and soft Solid are connected
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {    // define shape
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        cad2d.AddPolygon( pts );
                        uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,1, new CVector2D(0.5,0.0)).id_v_add;
                        uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,3, new CVector2D(0.5,1.0)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v1,id_v2);

                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.05) );
                        conv = World.GetIDConverter(id_base);  // get ID converter
                    }

                    Solid.SetDomain_FieldEA(id_base,conv.GetIdEA_fromCad(2,CAD_ELEM_TYPE.LOOP),World);
                    Solid.SetTimeIntegrationParameter(Dt);
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);

                    Solid.SetYoungPoisson(3.0,0.3,true);
                    Solid.SetGeometricalNonlinear(false);    // set geometrically linear model
                    Solid.SetGravitation(0.0,0.0);

                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(3,CAD_ELEM_TYPE.EDGE),World);
                    uint id_field_bc2 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(5,CAD_ELEM_TYPE.EDGE),World);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc1,World);
                    FieldValueSetter.SetMathExp("0.3*sin(1.5*t)",     0,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field x axis
                    FieldValueSetter.SetMathExp("0.1*(cos(t)+1)+0.1", 1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field y axis

                    // set up visualization
                    DrawerAry.Clear();
                    Id_field_disp = Solid.GetIdField_Disp();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    //DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.PushBack( new CDrawerEdge(id_base,true,World) );
                    DrawerAry.InitTrans(Camera);    // set view trnsformation
                }
                else if( ProbNo == 18 )
                {
                    Solid.SetSaveStiffMat(true);
                }
                else if( ProbNo == 19 )
                {
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(false);
                }
                else if( ProbNo == 20 )
                {
                    Solid.SetStationary(true);
                    Solid.SetGeometricalNonlinear(true);
                }
                else if( ProbNo == 21 )
                {
                    Solid.SetStationary(false);
                    Solid.SetGeometricalNonlinear(true);
                }
                else if( ProbNo == 22 )    // 4 different type of Solid combined
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {    // define shape
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(2.0,0.0) );
                        pts.Add( new CVector2D(2.0,0.5) );
                        pts.Add( new CVector2D(0.0,0.5) );
                        cad2d.AddPolygon( pts );
                        uint id_v5 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,1, new CVector2D(1.5,0.0)).id_v_add;
                        uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,1, new CVector2D(1.0,0.0)).id_v_add;
                        uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,1, new CVector2D(0.5,0.0)).id_v_add;
                        uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,3, new CVector2D(0.5,0.5)).id_v_add;
                        uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,3, new CVector2D(1.0,0.5)).id_v_add;
                        uint id_v6 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,3, new CVector2D(1.5,0.5)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v1,id_v2);
                        cad2d.ConnectVertex_Line(id_v3,id_v4);
                        cad2d.ConnectVertex_Line(id_v5,id_v6);

                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.05) );
                        conv = World.GetIDConverter(id_base);  // get ID converter
                    }

                    Solid.UpdateDomain_Field(id_base,World);    // set domain of Solid analysis
                    Solid.SetTimeIntegrationParameter(Dt);    // set time step
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);
                    // set material property
                    Solid.SetYoungPoisson(1.0,0.3,true);
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetGravitation(0.0,-0.0);

                    {    // St.Venant-Kirchhoff material
                        DelFEM4NetFem.Eqn.CEqn_Solid2D eqn = Solid.GetEquation(conv.GetIdEA_fromCad(1,CAD_ELEM_TYPE.LOOP));
                        eqn.SetGeometricalNonlinear(true);
                        Solid.SetEquation(eqn);
                    }
                    {    // soft elastic material
                        DelFEM4NetFem.Eqn.CEqn_Solid2D eqn = Solid.GetEquation(conv.GetIdEA_fromCad(2,CAD_ELEM_TYPE.LOOP));
                        eqn.SetYoungPoisson(0.1,0.3,true);
                        Solid.SetEquation(eqn);
                    }
                    uint Id_field_temp = World.MakeField_FieldElemAry(id_base, conv.GetIdEA_fromCad(3,CAD_ELEM_TYPE.LOOP),
                        DelFEM4NetFem.Field.FIELD_TYPE.SCALAR,
                        DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                        DelFEM4NetFem.Field.ELSEG_TYPE.CORNER);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(Id_field_temp,World);
                    FieldValueSetter.SetMathExp("0.1*sin(3.14*4*y)*sin(2*t)", 0,FIELD_DERIVATION_TYPE.VALUE, World);
                    {    // linear elastic material concidering thrmal-Solid
                        DelFEM4NetFem.Eqn.CEqn_Solid2D eqn = Solid.GetEquation(conv.GetIdEA_fromCad(3,CAD_ELEM_TYPE.LOOP));
                        eqn.SetThermalStress(Id_field_temp);
                        Solid.SetEquation(eqn);
                    }
                    {    // hard elastic material
                        DelFEM4NetFem.Eqn.CEqn_Solid2D eqn = Solid.GetEquation(conv.GetIdEA_fromCad(4,CAD_ELEM_TYPE.LOOP));
                        eqn.SetYoungPoisson(10,0.3,true);
                        Solid.SetEquation(eqn);
                    }

                    Id_field_disp_fix0 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(2,CAD_ELEM_TYPE.EDGE),World);

                    // set up visualization
                    DrawerAry.Clear();
                    Id_field_disp = Solid.GetIdField_Disp();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    //DrawerAry.PushBack( new CDrawerEdge(id_base,false,World) );
                    DrawerAry.InitTrans(Camera);    // set view transformation
                }
                else if( ProbNo == 23 )
                {
                    Solid.SetRho(0.0001);
                    Solid.SetStationary(false);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(Id_field_disp_fix0,World);
                    FieldValueSetter.SetMathExp("0.5*cos(2*t)", 1,FIELD_DERIVATION_TYPE.VALUE, World);
                }
                else if( ProbNo == 24 )
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {    // define shape
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(2.0,0.0) );
                        pts.Add( new CVector2D(2.0,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        cad2d.AddPolygon( pts );
                        uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,1, new CVector2D(1.0,0.0)).id_v_add;
                        uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,3, new CVector2D(1.0,1.0)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v1,id_v2);

                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.05) );
                        conv = World.GetIDConverter(id_base);  // ID converter
                    }
                    Solid.UpdateDomain_Field(id_base,World);    // set displacement field
                    Solid.SetTimeIntegrationParameter(Dt);    // set time step
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(false);
                    // set material property
                    Solid.SetYoungPoisson(1.0,0.3,true);    // planter stress
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetGravitation(0.0,-0.0);
                    Solid.SetRho(0.001);

                    {    // soft elastic material
                        DelFEM4NetFem.Eqn.CEqn_Solid2D eqn = Solid.GetEquation(conv.GetIdEA_fromCad(1,CAD_ELEM_TYPE.LOOP));
                        eqn.SetYoungPoisson(0.1,0.3,true);
                        Solid.SetEquation(eqn);
                    }
                    {    // hard elastic material
                        DelFEM4NetFem.Eqn.CEqn_Solid2D eqn = Solid.GetEquation(conv.GetIdEA_fromCad(2,CAD_ELEM_TYPE.LOOP));
                        eqn.SetYoungPoisson(100000000,0.3,true);
                        Solid.SetEquation(eqn);
                    }

                    //Id_field_disp_fix0 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(2,1),World);
                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(4,CAD_ELEM_TYPE.EDGE),World);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc1,World);
                    FieldValueSetter.SetMathExp("0.3*sin(1.5*t)",     0,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field x axis
                    FieldValueSetter.SetMathExp("0.1*(cos(t)+1)+0.1", 1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field y axis

                    // set up visualization
                    DrawerAry.Clear();
                    Id_field_disp = Solid.GetIdField_Disp();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.InitTrans(Camera);    // initialize view transmation
                }
                else if( ProbNo == 25 )
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    uint id_base2 = 0;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        uint id_l;
                        uint id_e1,id_e2,id_e3,id_e4,id_e5;
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(0.2,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            id_l = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.2,0.5) ).id_v_add;
                            id_e1 = cad2d.ConnectVertex_Line(2,id_v1).id_e_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.5,0.2) ).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.5,0.5) ).id_v_add;
                            uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.5,0.8) ).id_v_add;
                            uint id_v5 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.8,0.5) ).id_v_add;
                            uint id_v6 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.3,0.5) ).id_v_add;
                            id_e2 = cad2d.ConnectVertex_Line(id_v2,id_v3).id_e_add;
                            id_e3 = cad2d.ConnectVertex_Line(id_v3,id_v4).id_e_add;
                            id_e4 = cad2d.ConnectVertex_Line(id_v3,id_v5).id_e_add;
                            id_e5 = cad2d.ConnectVertex_Line(id_v3,id_v6).id_e_add;
                        }
                        using(CMesher2D mesh2d = new CMesher2D(cad2d,0.1))
                        {
                            World.Clear();
                            id_base = World.AddMesh(mesh2d);
                            conv = World.GetIDConverter(id_base);  // get ID converter

                            {    // cut mesh
                                IList<uint> mapVal2Co = null;
                                IList< IList<int> > aLnods = null;
                                {
                                    IList<uint> aIdMsh_Inc = new List<uint>();
                                    aIdMsh_Inc.Add( mesh2d.GetElemID_FromCadID(id_l,CAD_ELEM_TYPE.LOOP) );
                                    IList<uint> aIdMshCut = new List<uint>();
                                    aIdMshCut.Add( mesh2d.GetElemID_FromCadID(id_e1,CAD_ELEM_TYPE.EDGE) );
                                    aIdMshCut.Add( mesh2d.GetElemID_FromCadID(id_e2,CAD_ELEM_TYPE.EDGE) );
                                    aIdMshCut.Add( mesh2d.GetElemID_FromCadID(id_e3,CAD_ELEM_TYPE.EDGE) );
                                    aIdMshCut.Add( mesh2d.GetElemID_FromCadID(id_e4,CAD_ELEM_TYPE.EDGE) );
                                    aIdMshCut.Add( mesh2d.GetElemID_FromCadID(id_e5,CAD_ELEM_TYPE.EDGE) );
                                    mesh2d.GetClipedMesh(out aLnods, out mapVal2Co, aIdMsh_Inc,aIdMshCut);
                                }
                                IList<uint> aIdEA_Inc = new List<uint>();
                                aIdEA_Inc.Add( conv.GetIdEA_fromCad(1,CAD_ELEM_TYPE.LOOP) );
                                id_base2 = World.SetCustomBaseField(id_base,aIdEA_Inc, aLnods, mapVal2Co);
                            }
                        } // mesh2d
                    } // cad2d

                    Solid.UpdateDomain_Field(id_base2, World);
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);
                    // set material parameter
                    Solid.SetYoungPoisson(10.0,0.3,true);
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetGravitation(0.0,0.0);
                    Solid.SetTimeIntegrationParameter(Dt,0.7);

                    uint id_field_bc0 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(3,CAD_ELEM_TYPE.EDGE),World);
                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(5,CAD_ELEM_TYPE.EDGE),World);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc0,World);
                    FieldValueSetter.SetMathExp("0.1*sin(t*PI*2*0.1)",    0,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field x axis
                    FieldValueSetter.SetMathExp("0.1*(1-cos(t*PI*2*0.1))",1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field y axis

                    // set visualization
                    DrawerAry.Clear();
                    Id_field_disp = Solid.GetIdField_Disp();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // set view transformation
                }
                else if( ProbNo == 26 )
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    uint id_base2 = 0;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        uint id_e;
                        uint id_l;
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(5.0,0.0) );
                            pts.Add( new CVector2D(5.0,2.0) );
                            pts.Add( new CVector2D(0.0,2.0) );
                            id_l = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, 3, new CVector2D(2.5,2.0)).id_v_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(2.5,1.0)).id_v_add;
                            id_e = cad2d.ConnectVertex_Line(id_v1,id_v2).id_e_add;
                        }
                        using(CMesher2D mesh2d = new CMesher2D(cad2d,0.2))
                        {
                            World.Clear();
                            CurTime = 0;
                            id_base = World.AddMesh(mesh2d);
                            conv = World.GetIDConverter(id_base);
                            id_base2 = 0;
                            {    // cut mesh
                                IList<uint> mapVal2Co = new List<uint>();
                                IList< IList<int> > aLnods = new List<IList<int>>();
                                {
                                    IList<uint> aIdMsh_Inc = new List<uint>();
                                    aIdMsh_Inc.Add( mesh2d.GetElemID_FromCadID(id_l,CAD_ELEM_TYPE.LOOP) );
                                    IList<uint> aIdMshCut = new List<uint>();
                                    aIdMshCut.Add( mesh2d.GetElemID_FromCadID(id_e,CAD_ELEM_TYPE.EDGE) );
                                    mesh2d.GetClipedMesh(out aLnods, out mapVal2Co, aIdMsh_Inc,aIdMshCut);
                                }
                                IList<uint> aIdEA_Inc = new List<uint>();
                                aIdEA_Inc.Add( conv.GetIdEA_fromCad(id_l,CAD_ELEM_TYPE.LOOP) );
                                id_base2 = World.SetCustomBaseField(id_base,aIdEA_Inc, aLnods,mapVal2Co);
                            }
                        } // mesh2d
                    } // cad2d

                    Solid.UpdateDomain_Field(id_base2, World);
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);
                    // set material parameter
                    Solid.SetYoungPoisson(10.0,0.3,true);    // set planer stress
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetGravitation(0.0,0.0);
                    Solid.SetTimeIntegrationParameter(Dt,0.7);

                    uint id_field_bc0 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(2,CAD_ELEM_TYPE.EDGE),World);
                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(4,CAD_ELEM_TYPE.EDGE),World);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc0,World);
                    FieldValueSetter.SetMathExp("0.5*(1-cos(t*PI*2*0.1))", 0,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field x axis
                    FieldValueSetter.SetMathExp("0.2*sin(t*PI*2*0.1)",     1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field y axis

                    Id_field_disp = Solid.GetIdField_Disp();
                    Id_field_equiv_stress = World.MakeField_FieldElemDim(Id_field_disp,2,
                        DelFEM4NetFem.Field.FIELD_TYPE.SCALAR,
                        DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                        DelFEM4NetFem.Field.ELSEG_TYPE.BUBBLE);

                    // set up visualization
                    DrawerAry.Clear();
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World,Id_field_equiv_stress) );
                    //DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // set transformation
                }
                else if( ProbNo == 27 )
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {    // define shape
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(3.0,0.0) );
                        pts.Add( new CVector2D(3.0,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        cad2d.AddPolygon( pts );
                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.3) );
                        conv = World.GetIDConverter(id_base);    // Get ID converter
                    }

                    Solid.Clear();
                    Solid.UpdateDomain_Field(id_base, World);
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);
                    // Setting Material Parameter
                    Solid.SetYoungPoisson(2,0.3,true);    // planter stress
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetGravitation(0.0,0.0);
                    Solid.SetTimeIntegrationParameter(Dt,0.7);

                    uint id_field_bc0 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(2,CAD_ELEM_TYPE.EDGE),World);
                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(4,CAD_ELEM_TYPE.EDGE),World);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc0,World);
                    FieldValueSetter.SetMathExp("0.5*sin(t*PI*2*0.1)",    0,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field x axis
                    FieldValueSetter.SetMathExp("0.3*(1-cos(t*PI*2*0.1))",1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field y axis

                    Id_field_disp = Solid.GetIdField_Disp();
                    Id_field_stress = World.MakeField_FieldElemDim(Id_field_disp,2,
                        DelFEM4NetFem.Field.FIELD_TYPE.STSR2,
                        DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                        DelFEM4NetFem.Field.ELSEG_TYPE.BUBBLE);
                    //Id_field_equiv_stress = World.MakeField_FieldElemDim(Id_field_disp,2,
                    //    DelFEM4NetFem.Field.FIELD_TYPE.SCALAR,
                    //    DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                    //    DelFEM4NetFem.Field.ELSEG_TYPE.BUBBLE);

                    // set up visualization
                    DrawerAry.Clear();
                    //DrawerAry.PushBack( new CDrawerFace(Id_field_equiv_stress,false,World,Id_field_equiv_stress, 0,0.5) );
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerVector(Id_field_stress,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // init view transformation
                }
                else if( ProbNo == 28 )
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {    // define shape
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(0.2,0.0) );
                        pts.Add( new CVector2D(0.2,0.5) );
                        pts.Add( new CVector2D(0.8,0.5) );
                        pts.Add( new CVector2D(0.8,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.7) );
                        pts.Add( new CVector2D(0.6,0.7) );
                        pts.Add( new CVector2D(0.4,0.7) );
                        pts.Add( new CVector2D(0.0,0.7) );
                        cad2d.AddPolygon( pts );
                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.1) );
                        conv = World.GetIDConverter(id_base);    // Get ID converter
                    }

                    Solid.Clear();
                    Solid.UpdateDomain_Field(id_base, World);
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);
                    // Setting Material Parameter
                    Solid.SetYoungPoisson(2,0.1,true);    // planter stress
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetGravitation(0.0,0.0);
                    Solid.SetTimeIntegrationParameter(Dt,0.7);

                    uint id_field_bc0;
                    {
                        IList<uint> aIdEA = new List<uint>();
                        aIdEA.Add(conv.GetIdEA_fromCad(1,CAD_ELEM_TYPE.EDGE));
                        aIdEA.Add(conv.GetIdEA_fromCad(5,CAD_ELEM_TYPE.EDGE));
                        id_field_bc0 = Solid.AddFixElemAry(aIdEA,World);
                    }
                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(8,CAD_ELEM_TYPE.EDGE),World);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc1,World);
                    FieldValueSetter.SetMathExp("-0.03*(1-cos(t*PI*2*0.1))", 1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field x axis

                    Id_field_disp = Solid.GetIdField_Disp();
                    Id_field_stress = World.MakeField_FieldElemDim(Id_field_disp,2,
                        DelFEM4NetFem.Field.FIELD_TYPE.STSR2,
                        DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                        DelFEM4NetFem.Field.ELSEG_TYPE.BUBBLE);
                    //Id_field_equiv_stress = World.MakeField_FieldElemDim(Id_field_disp,2,
                    //    DelFEM4NetFem.Field.FIELD_TYPE.SCALAR,
                    //    DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                    //    DelFEM4NetFem.Field.ELSEG_TYPE.BUBBLE);

                    // set up visualization
                    DrawerAry.Clear();
                    //DrawerAry.PushBack( new CDrawerFace(Id_field_equiv_stress,false,World,Id_field_equiv_stress, 0,0.5) );
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerVector(Id_field_stress,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // init view transformation
                }
                else if( ProbNo == 29 )
                {
                    uint id_base = 0;
                    CIDConvEAMshCad conv = null;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {    // define shape
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(0.2,0.0) );
                        pts.Add( new CVector2D(0.2,0.5) );
                        pts.Add( new CVector2D(0.8,0.5) );
                        pts.Add( new CVector2D(0.8,0.3) );
                        pts.Add( new CVector2D(1.0,0.3) );
                        pts.Add( new CVector2D(1.0,0.7) );
                        pts.Add( new CVector2D(0.6,0.7) );
                        pts.Add( new CVector2D(0.4,0.7) );
                        pts.Add( new CVector2D(0.0,0.7) );
                        cad2d.AddPolygon( pts );
                        World.Clear();
                        id_base = World.AddMesh( new CMesher2D(cad2d,0.1) );
                        conv = World.GetIDConverter(id_base);    // Get ID converter
                    }

                    Solid.Clear();
                    Solid.UpdateDomain_Field(id_base, World);
                    Solid.SetSaveStiffMat(false);
                    Solid.SetStationary(true);
                    // Setting Material Parameter
                    Solid.SetYoungPoisson(2,0.1,true);    // planter stress
                    Solid.SetGeometricalNonlinear(false);
                    Solid.SetGravitation(0.0,0.0);
                    Solid.SetTimeIntegrationParameter(Dt,0.7);

                    uint id_field_bc0;
                    {
                        IList<uint> aIdEA = new List<uint>();
                        aIdEA.Add(conv.GetIdEA_fromCad(1,CAD_ELEM_TYPE.EDGE));
                        //aIdEA.Add(conv.GetIdEA_fromCad(5,CAD_ELEM_TYPE.EDGE));
                        id_field_bc0 = Solid.AddFixElemAry(aIdEA,World);
                    }
                    uint id_field_bc1 = Solid.AddFixElemAry(conv.GetIdEA_fromCad(8,CAD_ELEM_TYPE.EDGE),World);
                    if (FieldValueSetter != null)
                    {
                        FieldValueSetter.Clear();
                        FieldValueSetter.Dispose();
                    }
                    FieldValueSetter = new CFieldValueSetter(id_field_bc1,World);
                    FieldValueSetter.SetMathExp("-0.03*(1-cos(t*PI*2*0.1))", 1,FIELD_DERIVATION_TYPE.VALUE, World);    // oscilate bc1_field x axis

                    Id_field_disp = Solid.GetIdField_Disp();
                    Id_field_stress = World.MakeField_FieldElemDim(Id_field_disp,2,
                        DelFEM4NetFem.Field.FIELD_TYPE.STSR2,
                        DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                        DelFEM4NetFem.Field.ELSEG_TYPE.BUBBLE);
                    //Id_field_equiv_stress = World.MakeField_FieldElemDim(Id_field_disp,2,
                    //    DelFEM4NetFem.Field.FIELD_TYPE.SCALAR,
                    //    DelFEM4NetFem.Field.FIELD_DERIVATION_TYPE.VALUE,
                    //    DelFEM4NetFem.Field.ELSEG_TYPE.BUBBLE);

                    // set up visualization
                    DrawerAry.Clear();
                    //DrawerAry.PushBack( new CDrawerFace(Id_field_equiv_stress,false,World,Id_field_equiv_stress, 0,0.5) );
                    DrawerAry.PushBack( new CDrawerFace(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerVector(Id_field_stress,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,false,World) );
                    DrawerAry.PushBack( new CDrawerEdge(Id_field_disp,true ,World) );
                    DrawerAry.InitTrans(Camera);    // init view transformation
                }
                success = true;

            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
            }

            ProbNo++;
            if (ProbNo == ProbCnt) ProbNo = 0;
            return success;
        }
Exemplo n.º 2
0
        /// <summary>
        /// 問題を設定する
        /// </summary>
        /// <returns></returns>
        private bool setNewProblem()
        {
            bool success = false;
            try
            {
                if( ProbNo == 0 )
                {
                    CMesher2D mesh2d = null;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.2) );
                        pts.Add( new CVector2D(0.5,0.2) );
                        pts.Add( new CVector2D(0.5,0.8) );
                        pts.Add( new CVector2D(1.0,0.8) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        cad2d.AddPolygon( pts );
                        cad2d.ConnectVertex_Line(6,3);
                        mesh2d = new CMesher2D(cad2d,0.05);
                        ////
                        using(CMesher2D msh_tmp = (CMesher2D)mesh2d.Clone())
                        {
                            mesh2d.Clear();
                            mesh2d.Dispose();
                            mesh2d = (CMesher2D)msh_tmp.Clone();
                        }
                    }
                    using(CSerializer fout = new CSerializer("hoge.txt", false))
                    {
                        // write file
                        mesh2d.Serialize(fout);
                    }
                    using(CSerializer fin = new CSerializer("hoge.txt", true))
                    {    // load file
                        mesh2d.Serialize(fin);
                    }
                    ////
                    DrawerAry.Clear();
                    DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                    DrawerAry.InitTrans( Camera );
                    mesh2d.Clear();
                    mesh2d.Dispose();
                }
                else if( ProbNo == 1 )
                {
                    string mshfn = "../../../input_file/hexa_tri.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher2D mesh2d = new CMesher2D())
                        {
                            mesh2d.ReadFromFile_GiDMsh(mshfn);
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh2d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 2 )
                {
                    string mshfn = "../../../input_file/rect_quad.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher2D mesh2d = new CMesher2D())
                        {
                            mesh2d.ReadFromFile_GiDMsh(mshfn);
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh2d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 3 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.5) );
                        pts.Add( new CVector2D(0.5,0.5) );
                        pts.Add( new CVector2D(0.5,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        cad2d.AddPolygon( pts );
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.1))
                        using(CMesh3D_Extrude mesh3d = new CMesh3D_Extrude())
                        {
                            mesh3d.Extrude(mesh2d, 0.5, 0.1 );
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh3d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh3d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 4 )    // load mesh of GiD
                {
                    string mshfn = "../../../input_file/hexa_tri.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher2D mesh2d = new CMesher2D())
                        using(CMesh3D_Extrude mesh3d = new CMesh3D_Extrude())
                        {
                            mesh2d.ReadFromFile_GiDMsh(mshfn);
                            mesh3d.Extrude(mesh2d, 5.0, 0.5 );
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 5 )
                {
                    string mshfn = "../../../input_file/cylinder_hex.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher3D mesh3d = new CMesher3D())
                        {
                            mesh3d.ReadFromFile_GiDMsh(mshfn);
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh3d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh3d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 6 )
                {
                    string mshfn = "../../../input_file/cylinder_tet.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher3D mesh3d = new CMesher3D())
                        {
                            mesh3d.ReadFromFile_GiDMsh(mshfn);
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh3d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh3d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 7 )
                {
                    string mshfn = "../../../input_file/rect_quad.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher2D mesh2d = new CMesher2D())
                        using(CMesh3D_Extrude mesh3d = new CMesh3D_Extrude())
                        {
                            mesh2d.ReadFromFile_GiDMsh(mshfn);
                            mesh3d.Extrude(mesh2d, 5.0, 0.5 );
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 8 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        uint id_l = 0;
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            id_l = cad2d.AddPolygon( pts ).id_l_add;
                        }

                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.8,0.6) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.6,0.6) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.4,0.6) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.2,0.6) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.8,0.4) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.6,0.4) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.4,0.4) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.2,0.4) );
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.02))
                        {
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh2d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 9 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            cad2d.AddPolygon( pts );
                        }
                        cad2d.SetCurve_Arc(1,true, -0.5);
                        cad2d.SetCurve_Arc(2,false,-0.5);
                        cad2d.SetCurve_Arc(3,true, -0.5);
                        cad2d.SetCurve_Arc(4,false,-0.5);

                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.05))
                        {
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh2d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 10 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            uint id_l = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.3,0.2)).id_v_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.7,0.2)).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.7,0.8)).id_v_add;
                            uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.3,0.8)).id_v_add;
                            cad2d.ConnectVertex_Line(id_v1,id_v2);
                            cad2d.ConnectVertex_Line(id_v2,id_v3);
                            cad2d.ConnectVertex_Line(id_v3,id_v4);
                            cad2d.ConnectVertex_Line(id_v4,id_v1);
                        }

                        using(CMesher2D mesh2d = new CMesher2D())
                        {
                            mesh2d.AddIdLCad_CutMesh(1);    // cut mesh to loop whitch have id 1
                            mesh2d.SetMeshingMode_ElemLength(0.05);
                            mesh2d.Meshing(cad2d);

                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 11 )    // mesh with cut
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        uint id_l;
                        uint id_e1, id_e2, id_e3, id_e4, id_e5;
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(0.3,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            id_l = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.3,0.5) ).id_v_add;
                            id_e1 = cad2d.ConnectVertex_Line(2,id_v1).id_e_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.7,0.5) ).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.7,0.2) ).id_v_add;
                            uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.7,0.8) ).id_v_add;
                            uint id_v5 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.5,0.5) ).id_v_add;
                            uint id_v6 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.9,0.5) ).id_v_add;
                            id_e2 = cad2d.ConnectVertex_Line(id_v2,id_v3).id_e_add;
                            id_e3 = cad2d.ConnectVertex_Line(id_v2,id_v4).id_e_add;
                            id_e4 = cad2d.ConnectVertex_Line(id_v2,id_v5).id_e_add;
                            id_e5 = cad2d.ConnectVertex_Line(id_v2,id_v6).id_e_add;
                        }
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.2))
                        {
                            IList<uint> aIdMsh_Inc = new List<uint>();
                            aIdMsh_Inc.Add( mesh2d.GetElemID_FromCadID(id_l,CAD_ELEM_TYPE.LOOP) );

                            IList<uint> aIdMshBar_Cut = new List<uint>();
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e1,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e2,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e3,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e4,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e5,CAD_ELEM_TYPE.EDGE) );
                            ////////////////
                            IList< IList<int> > aLnods = new List<IList<int>>();
                            IList<uint> mapVal2Co = new List<uint>();
                            mesh2d.GetClipedMesh(out aLnods, out mapVal2Co, aIdMsh_Inc, aIdMshBar_Cut);

                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 12 )    // mesh with cut
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        uint id_l1, id_l2;
                        uint id_e3, id_e4;
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0, 0.0) );
                            pts.Add( new CVector2D(1.0, 0.0) );
                            pts.Add( new CVector2D(1.5, 0.0) );
                            pts.Add( new CVector2D(2.0, 0.0) );
                            pts.Add( new CVector2D(2.0, 1.0) );
                            pts.Add( new CVector2D(1.5, 1.0) );
                            pts.Add( new CVector2D(1.0, 1.0) );
                            pts.Add( new CVector2D(0.0, 1.0) );
                            uint id_l0 = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l0, new CVector2D(0.5,0.5) ).id_v_add;
                            uint id_e1 = cad2d.ConnectVertex_Line(2,7).id_e_add;
                            uint id_e2 = cad2d.ConnectVertex_Line(3,6).id_e_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,id_e1, new CVector2D(1.0,0.5) ).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,1, new CVector2D(0.5,0.0) ).id_v_add;
                            id_e3 = cad2d.ConnectVertex_Line(id_v1,id_v2).id_e_add;
                            id_e4 = cad2d.ConnectVertex_Line(id_v1,id_v3).id_e_add;
                            id_l1 = 1;
                            id_l2 = 2;
                        }
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.2))
                        {
                            IList<uint> aIdMsh_Inc = new List<uint>();
                            aIdMsh_Inc.Add( mesh2d.GetElemID_FromCadID(id_l1,CAD_ELEM_TYPE.LOOP) );
                            aIdMsh_Inc.Add( mesh2d.GetElemID_FromCadID(id_l2,CAD_ELEM_TYPE.LOOP) );

                            IList<uint> aIdMshBar_Cut = new List<uint>();
                            //aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e3,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e4,CAD_ELEM_TYPE.EDGE) );
                            ////////////////
                            IList< IList<int> > aLnods = new List<IList<int>>();
                            IList<uint> mapVal2Co = new List<uint>();
                            mesh2d.GetClipedMesh(out aLnods, out mapVal2Co, aIdMsh_Inc, aIdMshBar_Cut);

                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 13 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0, 0.0) );    // 1
                            pts.Add( new CVector2D(1.5, 0.0) );    // 2
                            pts.Add( new CVector2D(1.5, 0.4) );    // 3
                            pts.Add( new CVector2D(1.0, 0.4) );    // 4
                            pts.Add( new CVector2D(1.0, 0.5) );    // 5
                            pts.Add( new CVector2D(2.0, 0.5) );    // 6
                            pts.Add( new CVector2D(2.0, 1.0) );    // 7
                            pts.Add( new CVector2D(0.0, 1.0) );    // 8
                            pts.Add( new CVector2D(0.0, 0.5) );    // 9
                            uint id_l0 = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_e1 = cad2d.ConnectVertex_Line(5,9).id_e_add;
                            cad2d.ShiftLayer_Loop(id_l0,true);
                            double[] col = new double[3] { 0.9, 0.4, 0.4 };
                            cad2d.SetColor_Loop(id_l0, col);
                            cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,3, new CVector2D(1.3,0.5));
                        }
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.05))
                        {
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 14 )
                {
                    string svgfn = "../../../input_file/shape2d_0.svg";
                    if (File.Exists(svgfn))
                    {
                        CCadObj2D cad2d = null;
                        CCadSVG.ReadSVG_AddLoopCad(svgfn, out cad2d);
                        using (CMesher2D mesh2d = new CMesher2D())
                        {
                            mesh2d.SetMeshingMode_ElemSize(400);
                            mesh2d.AddIdLCad_CutMesh(1);
                            mesh2d.Meshing(cad2d);

                            DrawerAry.Clear();
                            DrawerAry.PushBack(new CDrawerMsh2D(mesh2d));
                            DrawerAry.InitTrans(Camera);
                        }
                        cad2d.Clear();
                        cad2d.Dispose();
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", svgfn);
                        MessageBox.Show(string.Format("SVGファイル:{0}がありません", svgfn));
                    }
                }
                success = true;
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
            }

            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            DrawerGlUtility.SetProjectionTransform(Camera);
            Glut.glutPostRedisplay();
            ProbNo++;
            if (ProbNo == ProbCnt) ProbNo = 0;
            return success;
        }