我在代码中定义了一个变量:
double R0;
当我将变量设置为小于0.9时,代码不会运行而没有错误!我还在cout<<2;
之后写了main(){
,但程序甚至没有显示出来!我很困惑:(问题是什么?当我将R0改为0.9或大于它时,代码运行。这是我能提供的最小的例子:
#include <iostream>
#include <math.h>
#include <vector>
#include <functional>
#include <string>
#include <sstream>
using namespace std;
vector<double> getBoxCoords(int boxID, double L, double R0, int nbox)
{
vector<double> coords(4);
int yID = ceil((double)(boxID+1)/nbox);
int xID = fmod((boxID+1-(yID-1)*nbox), nbox);
if(xID==0)
xID = nbox;
coords[0] = (xID-1) * R0; // minX
coords[1] = (yID-1) * R0; // minY
coords[2] = min(xID * R0, L); // maxX
coords[3] = min(yID * R0, L); // maxY
return coords;
}
double PBC(double pos, double L)
{
if(fabs(pos) > L / 2.0)
return L-fabs(pos);
else
return fabs(pos);
}
int main()
{
std::cout << 2;
int N=100;
double rho=4.0, v0=0.03, eta=0.2, R0=0.03;
double L = pow(N/rho,0.5);
int nbox = (int)ceil(L/R0);
vector<vector<int>> box_neighbors;
vector<int> indices;
for(int i = 0; i < nbox * nbox; i++) //NUMBER OF BOX
{
vector<double> ci = getBoxCoords(i, L, R0, nbox);
indices.clear();
for(int j = 0; j < nbox * nbox; j++)
{
vector<double> cj = getBoxCoords(j, L, R0, nbox);
bool xflag=false,
yflag=false;
if (PBC(ci[0]-cj[0],L)<R0 || PBC(ci[0]-cj[2],L)<R0 || PBC(ci[2]-cj[0],L)<R0 || PBC(ci[2]-cj[2],L)<R0)
xflag=true;
if (PBC(ci[1]-cj[1],L)<R0 || PBC(ci[1]-cj[3],L)<R0 || PBC(ci[3]-cj[1],L)<R0 || PBC(ci[3]-cj[3],L)<R0)
yflag=true;
if(xflag && yflag)
indices.push_back(j);
}
box_neighbors.push_back(indices);
}
return 0;
}
如何删除问题?任何人都可以提供可运行的答案吗?
答案 0 :(得分:1)
首先,现在显示调试std::cout << 2;
,因为您没有结束流,正确的方法是
std::cout << 2 << std::endl;
然后您将能够看到调试消息。
其次,你的程序运行,但是当R0
很小时,需要花费太多时间才能完成。对于给定值,即0.03
,循环的两个层将执行nbox * nbox
次27889
,因此总共777796321
。