Beispiel #1
0
        /// <summary>
        /// 境界上の節点番号と座標の取得
        /// </summary>
        /// <param name="world">ワールド座標系</param>
        /// <param name="fieldValId">フィールド値ID</param>
        /// <param name="no_c_all">全体節点番号配列</param>
        /// <param name="to_no_boundary">全体節点番号→境界上の節点番号のマップ</param>
        /// <param name="coord_c_all">座標リスト</param>
        /// <returns></returns>
        public static bool GetBoundaryCoordList(
            CFieldWorld world, uint fieldValId,
            double rotAngle, double[] rotOrigin,
            out uint[] no_c_all, out Dictionary <uint, uint> to_no_boundary, out double[][] coord_c_all)
        {
            no_c_all       = null;
            to_no_boundary = null;
            coord_c_all    = null;

            // フィールドを取得
            CField valField = world.GetField(fieldValId);

            if (valField.GetFieldType() != FIELD_TYPE.ZSCALAR)
            {
                return(false);
            }
            IList <uint> aIdEA = valField.GetAryIdEA();

            // 全体節点番号→境界節点番号変換テーブル(to_no_boundary)作成
            to_no_boundary = new Dictionary <uint, uint>();
            IList <double[]> coord_c_list = new List <double[]>();

            foreach (uint eaId in aIdEA)
            {
                bool res = getBoundaryCoordList_EachElementAry(
                    world, fieldValId, eaId,
                    rotAngle, rotOrigin,
                    ref to_no_boundary, ref coord_c_list);
                if (!res)
                {
                    return(false);
                }
            }
            //境界節点番号→全体節点番号変換テーブル(no_c_all)作成
            no_c_all = new uint[to_no_boundary.Count];
            foreach (KeyValuePair <uint, uint> kvp in to_no_boundary)
            {
                uint ino_boundary = kvp.Value;
                uint ino          = kvp.Key;
                no_c_all[ino_boundary] = ino;
            }
            coord_c_all = coord_c_list.ToArray();

            return(true);
        }
Beispiel #2
0
        public const double eps0 = 8.85418782e-12;//1.0 / (mu0 * c0 * c0);

        /// <summary>
        /// 境界上の節点番号の取得
        /// </summary>
        /// <param name="world">ワールド座標系</param>
        /// <param name="fieldValId">フィールド値ID</param>
        /// <param name="no_c_all">全体節点番号配列</param>
        /// <param name="to_no_boundary">全体節点番号→境界上の節点番号のマップ</param>
        /// <returns></returns>
        public static bool GetBoundaryNodeList(CFieldWorld world, uint fieldValId, out uint[] no_c_all, out Dictionary <uint, uint> to_no_boundary)
        {
            no_c_all       = null;
            to_no_boundary = null;

            // フィールドを取得
            CField valField = world.GetField(fieldValId);

            if (valField.GetFieldType() != FIELD_TYPE.ZSCALAR)
            {
                return(false);
            }
            IList <uint> aIdEA = valField.GetAryIdEA();

            // 全体節点番号→境界節点番号変換テーブル(to_no_boundary)作成
            to_no_boundary = new Dictionary <uint, uint>();

            foreach (uint eaId in aIdEA)
            {
                bool res = getBoundaryNodeList_EachElementAry(world, fieldValId, eaId, to_no_boundary);
                if (!res)
                {
                    return(false);
                }
            }
            //境界節点番号→全体節点番号変換テーブル(no_c_all)作成
            no_c_all = new uint[to_no_boundary.Count];
            foreach (KeyValuePair <uint, uint> kvp in to_no_boundary)
            {
                uint ino_boundary = kvp.Value;
                uint ino          = kvp.Key;
                no_c_all[ino_boundary] = ino;
            }

            return(true);
        }
Beispiel #3
0
        /// <summary>
        /// ループ内の節点番号と座標の取得
        /// </summary>
        /// <param name="world">ワールド座標系</param>
        /// <param name="fieldValId">フィールド値ID</param>
        /// <param name="no_c_all">全体節点番号配列</param>
        /// <param name="to_no_boundary">全体節点番号→境界上の節点番号のマップ</param>
        /// <param name="coord_c_all">座標リスト</param>
        /// <returns></returns>
        public static bool GetLoopCoordList(CFieldWorld world, uint fieldValId,
                                            double rotAngle, double[] rotOrigin,
                                            out uint[] no_c_all, out Dictionary <uint, uint> to_no_loop, out double[][] coord_c_all, out uint[][] elem_no_c, out uint[] elem_loopId)
        {
            no_c_all    = null;
            to_no_loop  = null;
            coord_c_all = null;
            elem_no_c   = null;
            elem_loopId = null;

            // フィールドを取得
            CField valField = world.GetField(fieldValId);

            if (valField.GetFieldType() != FIELD_TYPE.ZSCALAR)
            {
                return(false);
            }
            IList <uint> aIdEA = valField.GetAryIdEA();

            // 全体節点番号→ループ内節点番号変換テーブル作成
            to_no_loop = new Dictionary <uint, uint>();
            IList <double[]> coord_c_list = new List <double[]>();

            // 要素の節点番号リスト
            IList <uint[]> elem_no_c_list = new List <uint[]>();
            // 要素のループIDリスト
            IList <uint> elem_loopId_list = new List <uint>();

            foreach (uint eaId in aIdEA)
            {
                bool res = getLoopCoordList_EachElementAry(
                    world, fieldValId, eaId,
                    rotAngle, rotOrigin,
                    ref to_no_loop, ref coord_c_list, ref elem_no_c_list, ref elem_loopId_list);
                if (!res)
                {
                    return(false);
                }
            }
            //境界節点番号→全体節点番号変換テーブル(no_c_all)作成
            no_c_all = new uint[to_no_loop.Count];
            foreach (KeyValuePair <uint, uint> kvp in to_no_loop)
            {
                uint ino_boundary = kvp.Value;
                uint ino          = kvp.Key;
                no_c_all[ino_boundary] = ino;
            }
            coord_c_all = coord_c_list.ToArray();

            int elemCnt = elem_no_c_list.Count;

            elem_no_c   = new uint[elemCnt][];
            elem_loopId = new uint[elemCnt];
            for (int ie = 0; ie < elemCnt; ie++)
            {
                elem_no_c[ie] = new uint[3];
                for (int i = 0; i < 3; i++)
                {
                    elem_no_c[ie][i] = elem_no_c_list[ie][i];
                    elem_loopId[ie]  = elem_loopId_list[ie];
                }
            }

            return(true);
        }