Пример #1
0
        /// <summary>
        /// [実行]ボタンクリックイベントハンドラ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRun_Click(object sender, EventArgs e)
        {
            // GUIからデータを取得
            // 計算範囲
            double minFreq   = double.Parse(textBoxMinFreq.Text);
            double maxFreq   = double.Parse(textBoxMaxFreq.Text);
            double deltaFreq = double.Parse(textBoxDeltaFreq.Text);

            FemSolver.WaveModeDV waveModeDv = WaveModeDv;
            foreach (RadioButton rbtn in RadioBtnModeDvs)
            {
                if (rbtn.Checked)
                {
                    waveModeDv = (FemSolver.WaveModeDV)rbtn.Tag;
                    break;
                }
            }
            // 要素形状・次数
            ElemShapeStruct selectedEs = (ElemShapeStruct)cboxElemShapeDv.SelectedItem;

            if (maxFreq - minFreq < Constants.PrecisionLowerLimit)
            {
                MessageBox.Show("開始と終了が同じか逆転しています");
                return;
            }
            if (deltaFreq < Constants.PrecisionLowerLimit)
            {
                MessageBox.Show("計算間隔が設定されていません");
                return;
            }
            //int cnt = (int)((double)(maxFreq - minFreq) / deltaFreq);
            //int cnt = (int)Math.Ceiling((double)(maxFreq - minFreq) / deltaFreq);
            int cnt = (int)Math.Round((double)(maxFreq - minFreq) / deltaFreq);

            if (cnt < 2)
            {
                //return;
                cnt = 1; // 1箇所で計算
            }

            // 設定された計算範囲を格納
            CalcFreqCnt     = cnt;
            NormalizedFreq1 = minFreq;
            NormalizedFreq2 = maxFreq;
            WaveModeDv      = waveModeDv;
            ElemShapeDv     = selectedEs.ElemShapeDv;
            ElemOrder       = selectedEs.Order;

            DialogResult = DialogResult.OK;
        }
Пример #2
0
        /// <summary>
        /// [実行]ボタンクリックイベントハンドラ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRun_Click(object sender, EventArgs e)
        {
            // GUIからデータを取得
            // 計算範囲
            double minFreq   = double.Parse(textBoxMinFreq.Text);
            double maxFreq   = double.Parse(textBoxMaxFreq.Text);
            double deltaFreq = double.Parse(textBoxDeltaFreq.Text);

            FemSolver.WaveModeDV waveModeDv = WaveModeDv;
            foreach (RadioButton rbtn in RadioBtnModeDvs)
            {
                if (rbtn.Checked)
                {
                    waveModeDv = (FemSolver.WaveModeDV)rbtn.Tag;
                    break;
                }
            }
            // 導波路構造区分
            WGStructureDVStruct wgStructureDvStruct = (WGStructureDVStruct)cboxWGStructureDv.SelectedItem;
            double waveguideWidthForEPlane          = double.Parse(textBoxWaveguideWidthForEPlane.Text);
            // 要素形状・次数
            ElemShapeStruct selectedEs = (ElemShapeStruct)cboxElemShapeDv.SelectedItem;
            // 線形方程式解法
            LinearSystemEqnSolverStruct selectedLs = (LinearSystemEqnSolverStruct)cboxLsEqnSolverDv.SelectedItem;

            if (maxFreq - minFreq < Constants.PrecisionLowerLimit)
            {
                MessageBox.Show("開始と終了が同じか逆転しています");
                return;
            }
            if (deltaFreq < Constants.PrecisionLowerLimit)
            {
                MessageBox.Show("計算間隔が設定されていません");
                return;
            }
            if (wgStructureDvStruct.WGStructureDv == FemSolver.WGStructureDV.EPlane2D && Math.Abs(waveguideWidthForEPlane) < Constants.PrecisionLowerLimit)
            {
                MessageBox.Show("導波路幅(E面解析用)が指定されていません");
                return;
            }
            //int cnt = (int)((double)(maxFreq - minFreq) / deltaFreq);
            int cnt = (int)Math.Ceiling((double)(maxFreq - minFreq) / deltaFreq);

            if (cnt < 2)
            {
                //return;
                cnt = 1; // 1箇所で計算
            }
            // TMモードは平行平板以外では計算できない --> TEモードをセットする
            if (wgStructureDvStruct.WGStructureDv != FemSolver.WGStructureDV.ParaPlate2D)
            {
                if (waveModeDv == FemSolver.WaveModeDV.TM)
                {
                    //MessageBox.Show("TMモードでは計算できません。TEモードに変更します。", "", MessageBoxButtons.OK);
                    waveModeDv = FemSolver.WaveModeDV.TE;
                }
            }

            // 設定された計算範囲を格納
            CalcFreqCnt             = cnt;
            NormalizedFreq1         = minFreq;
            NormalizedFreq2         = maxFreq;
            WGStructureDv           = wgStructureDvStruct.WGStructureDv;
            WaveModeDv              = waveModeDv;
            ElemShapeDv             = selectedEs.ElemShapeDv;
            ElemOrder               = selectedEs.Order;
            LsEqnSolverDv           = selectedLs.LsEqnSolverDv;
            WaveguideWidthForEPlane = waveguideWidthForEPlane;

            DialogResult = DialogResult.OK;
        }