예제 #1
0
 /// <summary>
 /// 要素の節点数から要素形状区分と補間次数を取得する
 /// </summary>
 /// <param name="eNodeCnt">要素の節点数</param>
 /// <param name="elemShapeDv">要素形状区分</param>
 /// <param name="order">補間次数</param>
 /// <param name="vertexCnt">頂点数</param>
 public static void GetElementShapeDvAndOrderByElemNodeCnt(int eNodeCnt, out Constants.FemElementShapeDV elemShapeDv, out int order, out int vertexCnt)
 {
     elemShapeDv = Constants.FemElementShapeDV.Triangle;
     order = Constants.SecondOrder;
     vertexCnt = Constants.TriVertexCnt;
     if (eNodeCnt == Constants.TriNodeCnt_SecondOrder)
     {
         // 2次三角形
         elemShapeDv = Constants.FemElementShapeDV.Triangle;
         order = Constants.SecondOrder;
         vertexCnt = Constants.TriVertexCnt;
     }
     else if (eNodeCnt == Constants.TriNodeCnt_FirstOrder)
     {
         // 1次三角形
         elemShapeDv = Constants.FemElementShapeDV.Triangle;
         order = Constants.FirstOrder;
         vertexCnt = Constants.TriVertexCnt;
     }
     else
     {
         // 未対応
         System.Diagnostics.Debug.Assert(false);
     }
 }
예제 #2
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="normalizedFreq1">計算開始規格化周波数</param>
        /// <param name="normalizedFreq2">計算終了規格化周波数</param>
        /// <param name="calcFreqCnt">計算点数</param>
        /// <param name="waveModeDv">モード区分</param>
        /// <param name="elemShapeDv">要素形状区分</param>
        /// <param name="elemOrder">要素次数</param>
        public CalcSettingFrm(double normalizedFreq1, double normalizedFreq2, int calcFreqCnt,
            FemSolver.WaveModeDV waveModeDv,
            Constants.FemElementShapeDV elemShapeDv, int elemOrder)
        {
            InitializeComponent();

            DialogResult = DialogResult.None;

            // フィールドに格納
            NormalizedFreq1 = normalizedFreq1;
            NormalizedFreq2 = normalizedFreq2;
            CalcFreqCnt = calcFreqCnt;
            WaveModeDv = waveModeDv;
            ElemShapeDv = elemShapeDv;
            ElemOrder = elemOrder;
            if (CalcFreqCnt == 0)
            {
                // 既定値を設定
                NormalizedFreq1 = Constants.DefNormalizedFreqRange[0];
                NormalizedFreq2 = Constants.DefNormalizedFreqRange[1];
                CalcFreqCnt = Constants.DefCalcFreqencyPointCount;
            }
            // GUIにセット
            // 計算範囲
            textBoxMinFreq.Text = string.Format("{0:F5}", NormalizedFreq1);
            textBoxMaxFreq.Text = string.Format("{0:F5}", NormalizedFreq2);
            double delta = (NormalizedFreq2 - NormalizedFreq1) / CalcFreqCnt;
            textBoxDeltaFreq.Text = string.Format("{0:F5}", delta);
            // 計算モード
            RadioBtnModeDvs = new RadioButton[]{ radioBtnWaveModeDvTE, radioBtnWaveModeDvTM };
            FemSolver.WaveModeDV[] waveModeDvOf_radioBtnModeDvs = { FemSolver.WaveModeDV.TE, FemSolver.WaveModeDV.TM };
            for (int i = 0; i < RadioBtnModeDvs.Length; i++)
            {
                RadioBtnModeDvs[i].Tag = waveModeDvOf_radioBtnModeDvs[i];
                if ((FemSolver.WaveModeDV)RadioBtnModeDvs[i].Tag == WaveModeDv)
                {
                    RadioBtnModeDvs[i].Checked = true;
                }
            }

            // 要素形状・次数
            ElemShapeStruct[] esList =
            {
                new ElemShapeStruct(Constants.FemElementShapeDV.Triangle, Constants.SecondOrder, "2次三角形要素"),
                new ElemShapeStruct(Constants.FemElementShapeDV.Triangle, Constants.FirstOrder, "1次三角形要素"),
            };
            foreach (ElemShapeStruct es in esList)
            {
                cboxElemShapeDv.Items.Add(es);
                if (es.ElemShapeDv == ElemShapeDv && es.Order == ElemOrder)
                {
                    cboxElemShapeDv.SelectedItem = es;
                }
            }
        }
예제 #3
0
        public MeshViewFrm(Constants.FemElementShapeDV elemShapeDv, int elemOrder, FemPostProLogic postPro)
        {
            InitializeComponent();

            // データを受け取る
            ElemShapeDv = elemShapeDv;
            ElemOrder = elemOrder;
            PostPro = postPro;

            //this.DoubleBuffered = true;
            // ダブルバッファ制御用のプロパティを強制的に取得する
            System.Reflection.PropertyInfo p;
            p = typeof(System.Windows.Forms.Control).GetProperty(
                         "DoubleBuffered",
                          System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

            // ダブルバッファを有効にする
            p.SetValue(panelMesh, true, null);

            // メッシュ形状ラベル
            string shapeStr = "三角形";
            labelElemShape.Text = string.Format("{0}次{1}要素", ElemOrder, shapeStr);
            labelMeshInfo.Text = string.Format("節点数: {0} 要素数: {1}", PostPro.NodeCnt, PostPro.ElementCnt);
        }
예제 #4
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="elemShapeDv">要素形状区分</param>
 /// <param name="order">補間次数</param>
 /// <param name="text">表示テキスト</param>
 public ElemShapeStruct(Constants.FemElementShapeDV elemShapeDv, int order, string text)
 {
     ElemShapeDv = elemShapeDv;
     Order = order;
     Text = text;
 }