C ++ for循环在结束之前停止并重新启动

时间:2018-06-23 14:29:47

标签: c++ visual-c++

我一直在用c ++处理数组,我一直在写我用matlab编写的一维Euler求解器代码,并将其转换为c ++作为练习。

这个问题是,该for循环应该一直运行到计数器i达到N_cells-1为止,但是无论我将数字设置为多少,它总是达到57,然后从2重新开始并继续执行直到我单击输出屏幕。我还运行了N_cells数小于57的代码,并且得到了下面包含的错误代码。

我对C ++中的数组和头文件还很陌生,所以我敢肯定这很简单,但是我找不到它。我知道它与fqL数组有关,但我不知道什么。

使用数字<57时出错:

Error when number <57 is used

#include "stdafx.h"
#include "Flux.h"
#include <iostream>
#include <chrono>
using namespace std;

void Flux(double * q, double y, double R, int N_cells,double * Flux)
{
    double qL[3];
    double qR[3];

    for (int i = 0; i < N_cells - 1; i++) {
        //Initialize left and right sides
        //-------------------

        qL[0] = q[0, i];
        qL[1] = q[1, i];
        qL[2] = q[2, i];

        qR[0] = q[0, i + 1];
        qR[1] = q[1, i + 1];
        qR[2] = q[2, i + 1];
        //-------------------

        //Calculate Left side Parameters
        //-------------------
        double PL;
        //double fqL[3];
        double cL2;
        double HL;
        double uL;
        PL = (y - 1)*(qL[2] - 0.5 / qL[0] * (qL[1] * qL[1]));
        double fqL[3] = { qL[1],
            (3 - y)*0.5*(qL[1] * qL[1]) / qL[0] + (y - 1)*qL[2],
            y*qL[1] * qL[2] / qL[0] - (y - 1)*0.5*(qL[1] * qL[1] * qL[1]) / (qL[0] * qL[0]) };
        cL2 = y * (y - 1)*(qL[2] / qL[0] - 0.5*(qL[1] / qL[0])*(qL[1] / qL[0]));
        HL = 0.5*(qL[1] / qL[0])*(qL[1] / qL[0]) + cL2 / (y - 1);
        uL = qL[1] / qL[0];
        //Calculate Right side Parameters
        //-------------------
        double PR;
        //double fqR[3];
        double cR2;
        double HR;
        double uR;
        PR = (y - 1)*(qR[2] - 0.5 / qR[0] * (qR[1] * qR[1]));
        double fqR[3] = { qR[1],
            (3 - y)*0.5*(qR[1] * qR[1]) / qR[0] + (y - 1)*qR[2],
            y*qR[1] * qR[2] / qR[0] - (y - 1)*0.5*(qR[1] * qR[1] * qR[1]) / (qR[0] * qR[0]) };
        cR2 = y * (y - 1)*(qR[2] / qR[0] - 0.5*(qR[1] / qR[0])*(qR[1] / qR[0]));
        HR = 0.5*(qR[1] / qR[0])*(qR[1] / qR[0]) + cR2 / (y - 1);
        uR = qR[1] / qR[0];
        //-------------------

        //Calculate Roe's Variables
        //-------------------------------- -
        double u;
        double H;
        double c;
        double rho;
        u = (sqrt(qL[1])*qL[2] / qL[1] + sqrt(qR[1])*qR[2] / qR[1]) / (sqrt(qL[1]) + sqrt(qR[1]));
        H = (sqrt(qL[1])*HL + sqrt(qR[1])*HR) / (sqrt(qL[1]) + sqrt(qR[1]));
        c = sqrt((y - 1)*(H - 0.5*u *u));
        rho = sqrt(qL[1] * qR[1]);
        //-------------------------------- -


        //-------------------------------- -
        double g[3] = { u - c, u, u + c };

        double v[3][3] = { {1, u - c, H - u * c},
        {1, u, 0.5*u*u},
        {1, u + c, H + u * c } };

        double a[3] = { 0.5 / (c*c)*((PR - PL) - c * rho*(uR - uL)),
            (qR[0] - qL[0]) - 1 * (PR - PL) / (c*c),
            0.5 / (c*c)*((PR - PL) + c * rho*(uR - uL)) };

        double SUM[3];

            SUM[0] = g[0] * a[0] * v[0][0] + g[1] * a[1] * v[1][0] + g[2] * a[2] * v[2][0];
            SUM[1] = g[0] * a[0] * v[0][1] + g[1] * a[1] * v[1][1] + g[2] * a[2] * v[2][1];
            SUM[2] = g[0] * a[0] * v[0][2] + g[1] * a[1] * v[1][2] + g[2] * a[2] * v[2][2];

        double Flux[3];
            Flux[0,i] = 0.5*(fqL[0] + fqR[0]) - 0.5*SUM[0];
            Flux[1,i] = 0.5*(fqL[1] + fqR[1]) - 0.5*SUM[1];
            Flux[2,i] = 0.5*(fqL[2] + fqR[2]) - 0.5*SUM[2];

            std::cout << i << endl;


    }



}

0 个答案:

没有答案