/// <summary>
        /// ワールド座標系を構成する
        /// </summary>
        /// <param name="ncolrow">行列のrowSize(==columnSize)</param>
        /// <param name="world">ワールド座標系オブジェクト</param>
        /// <param name="id_field_base">フィールドIDのベース</param>
        /// <returns></returns>
        private static bool setupWorld(uint ncolrow, ref CFieldWorld world, out uint id_field_base)
        {
            bool success = false;

            id_field_base = 0;

            uint id_na, id_ns_co;
            {
                // 節点を生成
                uint ndim  = 2;
                uint nnode = ncolrow;
                id_na = world.AddNodeAry(nnode);
                // 書き込み用に節点アレイのポインタを取得
                CNodeAryPtr na = world.GetNAPtr(id_na);
                id_ns_co = na.GetFreeSegID();
                CNodeAry.CNodeSeg ns_co = new CNodeAry.CNodeSeg(ndim, "COORD");
                IList <Pair <uint, CNodeAry.CNodeSeg> > ns_input_ary = new List <Pair <uint, CNodeAry.CNodeSeg> >();
                ns_input_ary.Add(new Pair <uint, CNodeAry.CNodeSeg>(id_ns_co, ns_co));
                // 座標は分からないので空リストを追加
                IList <double> coord = new List <double>();
                for (int i = 0; i < nnode; i++)
                {
                    for (int k = 0; k < ndim; k++)
                    {
                        coord.Add(0);
                    }
                }
                IList <int> add_id_ary = na.AddSegment(ns_input_ary, coord);
            }

            IList <CField.CElemInterpolation> aElemIntp = new List <CField.CElemInterpolation>();// 要素Index
            IList <Pair <uint, uint> >        aEaEs     = new List <Pair <uint, uint> >();

            {
                // 要素を生成
                uint id_ea;
                uint id_es;
                // 本当は三角形要素で要素を追加するところだが、わからないので
                // 要素は点で追加する
                int  ilayer = 0;
                uint nnode  = ncolrow;
                uint nnoel  = 1; // 要素内節点数
                //CAD_ELEM_TYPE itype_cad_part = CAD_ELEM_TYPE.VERTEX;
                uint nelem = nnode / nnoel;
                id_ea = world.AddElemAry(nelem, ELEM_TYPE.POINT);
                // 書き込み用に要素アレイのポインタを取得
                CElemAryPtr ea = world.GetEAPtr(id_ea);
                // 節点番号のリスト
                IList <int> lnods = new List <int>((int)nnode);
                for (int ino = 0; ino < nnode; ino++)
                {
                    //lnods.Add(ino + 1);
                    //DelFEMの節点番号は0開始
                    lnods.Add(ino);
                }
                uint id_es_tmp       = ea.GetFreeSegID();
                CElemAry.CElemSeg es = new CElemAry.CElemSeg(id_na, ELSEG_TYPE.CORNER);
                id_es = (uint)ea.AddSegment(id_es_tmp, es, lnods);

                aEaEs.Add(new Pair <uint, uint>(id_ea, id_es));
                CField.CElemInterpolation ei = new CField.CElemInterpolation(id_ea, 0, id_es, 0, 0, 0, 0);
                ei.ilayer = ilayer;
                aElemIntp.Add(ei);
            }
            {
                // 要素と節点の関連付け
                // 書き込み用に節点アレイのポインタを取得する
                CNodeAryPtr na = world.GetNAPtr(id_na);
                for (int ieaes = 0; ieaes < aEaEs.Count; ieaes++)
                {
                    na.AddEaEs(aEaEs[ieaes]);
                }
            }
            {
                // フィールドを生成
                uint id_field_parent            = 0;                                                                       // 親フィールド
                CField.CNodeSegInNodeAry nsna_c = new CField.CNodeSegInNodeAry(id_na, false, id_ns_co, 0, false, 0, 0, 0); // CORNER節点
                CField.CNodeSegInNodeAry nsna_b = new CField.CNodeSegInNodeAry();                                          // BUBBLE節点

                id_field_base = world.AddField(id_field_parent, aElemIntp, nsna_c, nsna_b);
            }

            return(success);
        }
        /// <summary>
        /// ワールド座標系を構成する
        /// </summary>
        /// <param name="ncolrow">行列のrowSize(==columnSize)</param>
        /// <param name="world">ワールド座標系オブジェクト</param>
        /// <param name="id_field_base">フィールドIDのベース</param>
        /// <returns></returns>
        private static bool setupWorld(uint ncolrow, ref CFieldWorld world, out uint id_field_base)
        {
            bool success = false;

            id_field_base = 0;

            uint id_na, id_ns_co;
            {
                // 節点を生成
                uint ndim = 2;
                uint nnode = ncolrow;
                id_na = world.AddNodeAry(nnode);
                // 書き込み用に節点アレイのポインタを取得
                CNodeAryPtr na = world.GetNAPtr(id_na);
                id_ns_co = na.GetFreeSegID();
                CNodeAry.CNodeSeg ns_co = new CNodeAry.CNodeSeg(ndim, "COORD");
                IList<Pair<uint, CNodeAry.CNodeSeg>> ns_input_ary = new List<Pair<uint, CNodeAry.CNodeSeg>>();
                ns_input_ary.Add(new Pair<uint, CNodeAry.CNodeSeg>(id_ns_co, ns_co));
                // 座標は分からないので空リストを追加
                IList<double> coord = new List<double>();
                for (int i = 0; i < nnode; i++)
                {
                    for (int k = 0; k < ndim; k++)
                    {
                        coord.Add(0);
                    }
                }
                IList<int> add_id_ary = na.AddSegment(ns_input_ary, coord);
            }

            IList<CField.CElemInterpolation> aElemIntp = new List<CField.CElemInterpolation>();// 要素Index
            IList<Pair<uint, uint>> aEaEs = new List<Pair<uint, uint>>();
            {
                // 要素を生成
                uint id_ea;
                uint id_es;
                // 本当は三角形要素で要素を追加するところだが、わからないので
                // 要素は点で追加する
                int ilayer = 0;
                uint nnode = ncolrow;
                uint nnoel = 1; // 要素内節点数
                //CAD_ELEM_TYPE itype_cad_part = CAD_ELEM_TYPE.VERTEX;
                uint nelem = nnode / nnoel;
                id_ea = world.AddElemAry(nelem, ELEM_TYPE.POINT);
                // 書き込み用に要素アレイのポインタを取得
                CElemAryPtr ea = world.GetEAPtr(id_ea);
                // 節点番号のリスト
                IList<int> lnods = new List<int>((int)nnode);
                for (int ino = 0; ino < nnode; ino++)
                {
                    //lnods.Add(ino + 1);
                    //DelFEMの節点番号は0開始
                    lnods.Add(ino);
                }
                uint id_es_tmp = ea.GetFreeSegID();
                CElemAry.CElemSeg es = new CElemAry.CElemSeg(id_na, ELSEG_TYPE.CORNER);
                id_es = (uint)ea.AddSegment(id_es_tmp, es, lnods);

                aEaEs.Add(new Pair<uint, uint>(id_ea, id_es));
                CField.CElemInterpolation ei = new CField.CElemInterpolation(id_ea, 0, id_es, 0, 0, 0, 0);
                ei.ilayer = ilayer;
                aElemIntp.Add(ei);
            }
            {
                // 要素と節点の関連付け
                // 書き込み用に節点アレイのポインタを取得する
                CNodeAryPtr na = world.GetNAPtr(id_na);
                for (int ieaes = 0; ieaes < aEaEs.Count; ieaes++)
                {
                    na.AddEaEs(aEaEs[ieaes]);
                }
            }
            {
                // フィールドを生成
                uint id_field_parent = 0; // 親フィールド
                CField.CNodeSegInNodeAry nsna_c = new CField.CNodeSegInNodeAry(id_na, false, id_ns_co, 0, false, 0, 0, 0); // CORNER節点
                CField.CNodeSegInNodeAry nsna_b = new CField.CNodeSegInNodeAry(); // BUBBLE節点

                id_field_base = world.AddField(id_field_parent, aElemIntp, nsna_c, nsna_b);
            }

            return success;
        }