OpenFOAM按进程输出和输入文件

5 篇文章 0 订阅

OpenFOAM按进程输出和输入文件

在某些前处理过程中需要按进程输入或者输出某些文件,
例如输出网格中心高度大于0.2m的网格中心点:

    const volVectorField& C = mesh_.C();
    string nProc = std::to_string(Pstream::myProcNo());//不同编译器形式不同
    fileName gamma = "gamma" + "-" + nProc + ".data";
    label count = 0;
    forAll(C,cellI){
    	if(C[cellI][2]>0.2){
    		count++
    	}
    }
    FILE *fout = fopen(gamma.c_str(),"w");
    fprintf(fout,"nGamma %d\n",count);
    forAll(C,i){
	    if (C[i][2] <0.2){
		    fprintf(fout,"%f %f %f\n",C[i][0],C[i][1],C[i][2]);
	    }
    }
    fclose(fout);

在另一个程序中输入这些网格中心,并找到相应的cellID:

			char tmp[128];
			int nGamma = 0;
			float a = 0.0;	//a,b,c必须被定义为float,不能用scalar;
			float b = 0.0;
			float c = 0.0;
			string nProc = std::to_string(Pstream::myProcNo());
			fileName gamma = "gamma" +"-" +nProc+".data";
			FILE* fin = fopen(gamma.c_str(),"r");
			if(fin == NULL){
				Info<< "cannot find gamma file" << endl;
			}
			fscanf(fin,"%s %d",tmp,&nGamma);
			vector listGamma;
			for(int k = 0;k<nGamma;k++){
				fscanf(fin,"%f %f %f",&a,&b,&c);
				listGamma[0] = a ;
				listGamma[1] = b ;
				listGamma[2] = c ;
				label cellID = mesh.findCell(listGamma);
			}
			fclose(fin);

需要注意的是在使用FILE输入输出文件时,最好使用C++本身函数,与openfoam自带函数有歧义时,需要添加std::

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值