Example #1
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 = ElemShapeDv == Constants.FemElementShapeDV.QuadType2? "四角形" : "三角形";

            labelElemShape.Text = string.Format("{0}次{1}要素", ElemOrder, shapeStr);
            labelMeshInfo.Text  = string.Format("節点数: {0} 要素数: {1}", PostPro.NodeCnt, PostPro.ElementCnt);
        }
Example #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;
                }
            }
        }
Example #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);
        }
 /// <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;
 }
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="normalizedFreq1">計算開始規格化周波数</param>
        /// <param name="normalizedFreq2">計算終了規格化周波数</param>
        /// <param name="calcFreqCnt">計算点数</param>
        /// <param name="wgStructureDv">導波路構造区分</param>
        /// <param name="waveModeDv">モード区分</param>
        /// <param name="elemShapeDv">要素形状区分</param>
        /// <param name="elemOrder">要素次数</param>
        /// <param name="lsEqnSolverDv">線形方程式解法区分</param>
        /// <param name="waveguideWidthForEPlane">導波路幅(E面解析用)</param>
        public CalcSettingFrm(double normalizedFreq1, double normalizedFreq2, int calcFreqCnt,
                              FemSolver.WGStructureDV wgStructureDv,
                              FemSolver.WaveModeDV waveModeDv,
                              Constants.FemElementShapeDV elemShapeDv, int elemOrder,
                              FemSolver.LinearSystemEqnSoverDV lsEqnSolverDv,
                              double waveguideWidthForEPlane)
        {
            InitializeComponent();

            DialogResult = DialogResult.None;

            // フィールドに格納
            NormalizedFreq1 = normalizedFreq1;
            NormalizedFreq2 = normalizedFreq2;
            CalcFreqCnt     = calcFreqCnt;
            WGStructureDv   = wgStructureDv;
            WaveModeDv      = waveModeDv;
            ElemShapeDv     = elemShapeDv;
            ElemOrder       = elemOrder;
            LsEqnSolverDv   = lsEqnSolverDv;
            if (CalcFreqCnt == 0)
            {
                // 既定値を設定
                NormalizedFreq1 = Constants.DefNormalizedFreqRange[0];
                NormalizedFreq2 = Constants.DefNormalizedFreqRange[1];
                CalcFreqCnt     = Constants.DefCalcFreqencyPointCount;
            }
            // GUIにセット
            // 計算範囲
            textBoxMinFreq.Text = string.Format("{0:F3}", NormalizedFreq1);
            textBoxMaxFreq.Text = string.Format("{0:F3}", NormalizedFreq2);
            double delta = (NormalizedFreq2 - NormalizedFreq1) / CalcFreqCnt;

            textBoxDeltaFreq.Text = string.Format("{0:F3}", 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;
                }
            }
            // 導波路構造区分
            WGStructureDVStruct[] wgStructureDvStructList =
            {
                new WGStructureDVStruct(FemSolver.WGStructureDV.HPlane2D,    "H面導波管"),
                new WGStructureDVStruct(FemSolver.WGStructureDV.EPlane2D,    "E面導波管"),
                new WGStructureDVStruct(FemSolver.WGStructureDV.ParaPlate2D, "平行平板導波路"),
            };
            foreach (WGStructureDVStruct wgStructureDvStruct in wgStructureDvStructList)
            {
                cboxWGStructureDv.Items.Add(wgStructureDvStruct);
                if (wgStructureDvStruct.WGStructureDv == WGStructureDv)
                {
                    cboxWGStructureDv.SelectedItem = wgStructureDvStruct;
                }
            }
            // 導波路幅(E面解析用)
            this.textBoxWaveguideWidthForEPlane.Text = string.Format("{0:F4}", waveguideWidthForEPlane);

            // 要素形状・次数
            ElemShapeStruct[] esList =
            {
                new ElemShapeStruct(Constants.FemElementShapeDV.Triangle,  Constants.SecondOrder, "2次三角形要素"),
                new ElemShapeStruct(Constants.FemElementShapeDV.QuadType2, Constants.SecondOrder, "2次四角形要素"),
                new ElemShapeStruct(Constants.FemElementShapeDV.Triangle,  Constants.FirstOrder,  "1次三角形要素"),
                new ElemShapeStruct(Constants.FemElementShapeDV.QuadType2, Constants.FirstOrder,  "1次四角形要素"),
            };
            foreach (ElemShapeStruct es in esList)
            {
                cboxElemShapeDv.Items.Add(es);
                if (es.ElemShapeDv == ElemShapeDv && es.Order == ElemOrder)
                {
                    cboxElemShapeDv.SelectedItem = es;
                }
            }
            // 線形方程式解法
            LinearSystemEqnSolverStruct[] lsList =
            {
                //new LinearSystemEqnSolverStruct(FemSolver.LinearSystemEqnSoverDV.PCOCG, "PCOCG"),
                new LinearSystemEqnSolverStruct(FemSolver.LinearSystemEqnSoverDV.Zgbsv, "zgbsv(バンド行列)"),
                new LinearSystemEqnSolverStruct(FemSolver.LinearSystemEqnSoverDV.Zgesv, "zgesv(一般行列)"),
            };
            foreach (LinearSystemEqnSolverStruct ls in lsList)
            {
                cboxLsEqnSolverDv.Items.Add(ls);
                if (ls.LsEqnSolverDv == LsEqnSolverDv)
                {
                    cboxLsEqnSolverDv.SelectedItem = ls;
                }
            }
        }
 /// <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;
 }