ICEM中对网格进行了局部加密,局部加密了以后,不同block的同一条edge上节点不一样,我在mapFields时会不会出问题?
Aeronastro
帖子
-
-
@李东岳 谢谢啦
-
我之前算了一个算例,网格比较大,最近新创建了一个模型(几何稍微不同),想把之间算好的场映射到新的模型中进行并行计算,如何并行处理映射呢?我如果不进行并行映射,由于网格量太大导致mapFields时出现内存不足的问题。mapFields里有-parallel选项,但不太清楚怎么使用:crying:
-
在后处理求解马赫数的时候,用Mach执行,但出现如下的错误:
Time = 0.00056 Selecting thermodynamics package { type hePsiThermo; mixture pureMixture; transport sutherland; thermo eConst; equationOfState perfectGas; specie specie; energy sensibleInternalEnergy; } --> FOAM FATAL ERROR: Not Implemented Trying to construct an genericFvPatchField on patch boundaryInner of field e From function genericFvPatchField<Type>::genericFvPatchField(const fvPatch& p, const DimensionedField<Type, volMesh>& iF) in file genericFvPatchField/genericFvPatchField.C at line 44. FOAM aborting #0 Foam::error::printStack(Foam::Ostream&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libOpenFOAM.so" #1 Foam::error::abort() in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libOpenFOAM.so" #2 Foam::fvPatchField<double>::addpatchConstructorToTable<Foam::genericFvPatchField<double> >::New(Foam::fvPatch const&, Foam::DimensionedField<double, Foam::volMesh> const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libgenericPatchFields.so" #3 Foam::fvPatchField<double>::New(Foam::word const&, Foam::word const&, Foam::fvPatch const&, Foam::DimensionedField<double, Foam::volMesh> const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" #4 Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::GeometricBoundaryField::GeometricBoundaryField(Foam::fvBoundaryMesh const&, Foam::DimensionedField<double, Foam::volMesh> const&, Foam::List<Foam::word> const&, Foam::List<Foam::word> const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libfluidThermophysicalModels.so" #5 Foam::heThermo<Foam::psiThermo, Foam::pureMixture<Foam::sutherlandTransport<Foam::species::thermo<Foam::eConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy> > > >::heThermo(Foam::fvMesh const&, Foam::word const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libfluidThermophysicalModels.so" #6 Foam::fluidThermo::addfvMeshConstructorToTable<Foam::hePsiThermo<Foam::psiThermo, Foam::pureMixture<Foam::sutherlandTransport<Foam::species::thermo<Foam::eConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy> > > > >::New(Foam::fvMesh const&, Foam::word const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libfluidThermophysicalModels.so" #7 Foam::fluidThermo::New(Foam::fvMesh const&, Foam::word const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libfluidThermophysicalModels.so" #8 ? in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" #9 ? in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" #10 ? in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" #11 __libc_start_main in "/lib64/libc.so.6" #12 ? in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" Aborted (core dumped)
这种情况我之前是没有遇到过的,于是检查了一下Mach.C的源码:
#include "calc.H" #include "fluidThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) { bool writeResults = !args.optionFound("noWrite"); IOobject Uheader ( "U", runTime.timeName(), mesh, IOobject::MUST_READ ); IOobject Theader ( "T", runTime.timeName(), mesh, IOobject::MUST_READ ); // Check U and T exists if (Uheader.headerOk() && Theader.headerOk()) { autoPtr<volScalarField> MachPtr; volVectorField U(Uheader, mesh); if ( IOobject ( "thermophysicalProperties", runTime.constant(), mesh ).headerOk() ) { // thermophysical Mach autoPtr<fluidThermo> thermo ( fluidThermo::New(mesh) ); volScalarField Cp(thermo->Cp()); volScalarField Cv(thermo->Cv()); MachPtr.set ( new volScalarField ( IOobject ( "Ma", runTime.timeName(), mesh ), mag(U)/(sqrt((Cp/Cv)*(Cp - Cv)*thermo->T())) ) ); } else { // thermodynamic Mach IOdictionary thermoProps ( IOobject ( "thermodynamicProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ) ); dimensionedScalar R(thermoProps.lookup("R")); dimensionedScalar Cv(thermoProps.lookup("Cv")); volScalarField T(Theader, mesh); MachPtr.set ( new volScalarField ( IOobject ( "Ma", runTime.timeName(), mesh ), mag(U)/(sqrt(((Cv + R)/Cv)*R*T)) ) ); } Info<< "Mach max : " << max(MachPtr()).value() << endl; if (writeResults) { MachPtr().write(); } } else { Info<< " Missing U or T" << endl; } Info<< "\nEnd\n" << endl; }
代码中只要有U,T 和热力学模型就好了,不知道为什么错误提示要构造e这个场?谢谢各位!
-
delta可以选择cubeRootVol, vanDriest等,有没有谁比较过采用不同的delta,会对结果产生什么影响吗?
-
最近计算一个可压流算例,用的是rhoCentralFoam,发现interpolationSchemes中的reconstruct(rho)等用tutorials默认的VanLeer格式,得到的结果过耗散,而采用Gamma得到比较清晰的云图。难道TVD格式与NVD格式相比有比较大的数值耗散吗?
另外我看了一下Gamma.H代码,limiter返回的是phict/k,这个我猜测是Jasak文章中的blending factor吧?OF中的Gamma格式和Jasak这篇文章中说的应该是一样的吧?但我不太清楚最后是如何计算面心的值,没有找到相关的代码,请各位大神指点一下。
reference
Jasak H, Weller H G, Gosman A D. High resolution NVD differencing scheme for arbitrarily unstructured meshes[J]. International Journal for Numerical Methods in Fluids, 1999, 31(2):431–449. -
@wwzhao 好的,这个是我速度入口的边界条件
boundaryField { inlet { type syntheticVelocity; Ma 2.3; Tinf 104; Prt 0.9; nmodes 200; dxmin 0.01e-03; Uinf 552; pInf 3998.63; pathName "/home/Ubuntu/WORKPLACE4/syntheticCase-test/data"; value uniform (552 0 0); } other boundaries ...... }
由于刚开始计算的时候不知道Ubar,ReynoldStress和deltaInlet,在边条构造时需要通过那个calculateProfiles函数计算。
那个pathName 是我的文件所在的地方
其中的data文件中的数据是一列一列排布的,
0_1479171527178_data -
可能我描述的问题不够准确,下面附上我的部分代码:
在.H文件中,定义了一些私有变量与私有变量的接口:// private perameters //- freestream Ma scalar Ma_; //- freestream T scalar Tinf_; scalar gamma_; scalar Prt_; //- munber of modes scalar nmodes_; //- smallest wavenumber scalar dxmin_; //- ratio of ke and kmin (in wavenumber) scalar wew1fct_; //- scalar amp_; //- kinetic viscosity of the smallest eddy scalar visc_; //- delta Inlet scalar deltaInlet_; //- freestream Velocity scalar Uinf_; //- freestream pressure scalar pInf_; //- read file IFstream IF_; //- rows of file data label ny_; //- MeanField vectorField Ubar_; //- primeField vectorField UPrime_; //- ReynoldStress tensor symmTensorField ReynoldStress_; label curTimeIndex_; // member function void calculateProfiles(IFstream&, vectorField&, symmTensorField&, scalar&); // Access scalar nmodes() const { return nmodes_; } scalar deltaInlet() const { return deltaInlet_; } scalar& deltaInlet() { return deltaInlet_; } scalar amp() const { return amp_; } scalar dxmin() const { return dxmin_; } scalar visc() const { return visc_; } scalar wew1fct() const { return wew1fct_; } scalar Ma() const { return Ma_; } scalar Tinf() const { return Tinf_; } scalar gamma() const { return gamma_; } scalar Prt() const { return Prt_; } scalar Uinf() const { return Uinf_; } scalar pInf() const { return pInf_; } IFstream IF() const { return IF_; } IFstream& IF() { return IF_; } vectorField& Ubar() { return Ubar_; } vectorField Ubar() const { return Ubar_; } symmTensorField& ReynoldStress() { return ReynoldStress_; } symmTensorField ReynoldStress() const { return ReynoldStress_; } label ny() { return ny_; }
然后在.C中,我的构造函数:
// constrctor Foam::syntheticVelocityFixedValueFvPatchField::syntheticVelocityFixedValueFvPatchField ( const fvPatch& p, const DimensionedField<vector, volMesh>& iF, const dictionary& dict ) : fixedValueFvPatchVectorField(p, iF), Ma_(readScalar(dict.lookup("Ma"))), Tinf_(readScalar(dict.lookup("Tinf"))), gamma_(dict.lookupOrDefault("gamma", 1.4)), Prt_(dict.lookupOrDefault("Prt", 0.9)), nmodes_(readScalar(dict.lookup("nmodes"))), dxmin_(readScalar(dict.lookup("dxmin"))), wew1fct_(dict.lookupOrDefault("wew1fct", 2.0)), amp_(dict.lookupOrDefault("amp", 1.452762113)), visc_(dict.lookupOrDefault("visc", 15.2e-6)), Uinf_(readScalar(dict.lookup("Uinf"))), pInf_(readScalar(dict.lookup("pInf"))), IF_(dict.lookup("pathName")), // stored meanStreamVelocity and ReynoldStress profile data ny_(dict.lookupOrDefault("ny", 535)), curTimeIndex_(-1) { if (dict.found("Ubar") && dict.found("ReynoldStress") && dict.found("deltaInlet")) { deltaInlet_= scalar(readScalar(dict.lookup("deltaInlet"))); Ubar_ = vectorField("Ubar", dict, p.size()); ReynoldStress_ = symmTensorField("ReynoldStress", dict, p.size()); } else { calculateProfiles(IF(), Ubar(), ReynoldStress(), deltaInlet()); } if (dict.found("UPrime")) { UPrime_ = vectorField("UPrime", dict, p.size()); } else { UPrime_ = vectorField(p.size(), vector::zero); } if (dict.found("value")) { fvPatchField<vector>::operator= ( vectorField("value", dict, p.size()) ); } else { fvPatchField<vector>::operator=(Ubar()); } }
这里调用的成员函数calculateProperties如下:
// member function void Foam::syntheticVelocityFixedValueFvPatchField::calculateProfiles ( IFstream& IF, vectorField& Ubar, symmTensorField& ReynoldStress, scalar& deltaInlet ) { if (!IF) { FatalErrorIn("void Foam::syntheticVelocityFixedValueFvPatchField::calculateMeanVelocity") << "can not find " << IF.name() << exit(FatalError); } else { scalarField UvdPlus(ny()), vPlus(ny()), wPlus(ny()), Ux(ny()), Uy(ny()), Uz(ny()); symmTensorField stressPlus(ny(), symmTensor::zero); scalarField yPlus(ny()), y(ny()); scalar yInf, ySup; scalar R(287.0), max_UvdPlus(26.457427), As(1.512e-06), Ts(120.0); scalar r=pow(Prt(), 1.0/3.0); //- calculate nuwInlet and Utao scalar Taw = Tinf()*(1.0+(gamma()-1.0)/2.0*r*sqr(Ma())); scalar Tw = (Taw - Tinf())/r + Tinf(); scalar rhow = pInf()/(R*Tw); scalar muw = As*sqrt(Tw)/(1.0+Ts/Tw); scalar nuwInlet = muw/rhow; scalar A = sqrt((gamma()-1.0)/2.0*Prt()*sqr(Ma())*Tinf()/Tw); scalar B = (1.0+sqrt(Prt())*(gamma()-1.0)/2.0*sqr(Ma()))*Tinf()/Tw - 1.0; scalar Utao = Uinf()/A*( asin((2.0*sqr(A)-B)/sqrt(sqr(B)+4.0*sqr(A))) + asin(B/sqrt(sqr(B)+4.0*sqr(A))) )/max_UvdPlus; // max(Uvd+) = 25.6803733; const scalarField T = this->patch().lookupPatchField<volScalarField, scalar>("T"); //- flag to decide whether to calculate deltaInlet bool delta=true; forAll(UvdPlus, patchI) { IF >> yPlus[patchI] >> UvdPlus[patchI] >> vPlus[patchI] >> wPlus[patchI] >> stressPlus[patchI].xx() >> stressPlus[patchI].yy() >> stressPlus[patchI].zz() >> stressPlus[patchI].xy(); // calculate dimensional y y[patchI] = yPlus[patchI]*nuwInlet/Utao; // calculate dimensional Ux scalar tmp = A*(UvdPlus[patchI]*Utao)/Uinf() - asin(B/sqrt(sqr(B)+4.0*sqr(A))); Ux[patchI] = (sin(tmp)*sqrt(sqr(B)+4.0*sqr(A)) + B)/(2.0*sqr(A))*Uinf(); Uy[patchI] = vPlus[patchI]*Utao; Uz[patchI] = wPlus[patchI]*Utao; if (Ux[patchI] > 0.99*Uinf() && delta) { deltaInlet = y[patchI]; delta = false; // deltaInlet calculated only once; } } vectorField Cf = this->patch().Cf(); Ubar = vectorField(Cf.size()); symmTensorField Reynold(Cf.size(), symmTensor::zero); ReynoldStress = symmTensorField(Cf.size(), symmTensor::zero); // interpolate at the cell forAll(Cf, faceI) { for(label patchI=0; patchI < y.size()-1; patchI++) { yInf = Cf[faceI][1]-y[patchI]; ySup = Cf[faceI][1]-y[patchI+1]; if(yInf*ySup <= 0) { Ubar[faceI][0] = yInf/(yInf-ySup)*Ux[patchI+1] - ySup/(yInf-ySup)*Ux[patchI]; Ubar[faceI][1] = yInf/(yInf-ySup)*Uy[patchI+1] - ySup/(yInf-ySup)*Uy[patchI]; Ubar[faceI][2] = yInf/(yInf-ySup)*Uz[patchI+1] - ySup/(yInf-ySup)*Uz[patchI]; Reynold[faceI] = yInf/(yInf-ySup)*stressPlus[patchI+1] - ySup/(yInf-ySup)*stressPlus[patchI]; // calculate dimensional Reynold stress scalar ksi = sqrt(Tw/T[faceI]); ReynoldStress[faceI].xx() = sqr(Reynold[faceI].xx()/ksi)*Utao; ReynoldStress[faceI].xy() = -sqr(Reynold[faceI].xy()/ksi)*Utao; ReynoldStress[faceI].yy() = sqr(Reynold[faceI].yy()/ksi)*Utao; ReynoldStress[faceI].zz() = sqr(Reynold[faceI].zz()/ksi)*Utao; break; } else // Cf.component(1) is higher than y.last() { Ubar[faceI][0] = Ux.last(); Ubar[faceI][1] = Uy.last(); Ubar[faceI][2] = Uz.last(); scalar ksi = sqrt(Tw/T[faceI]); ReynoldStress[faceI].xx() = sqr(stressPlus.last().xx()/ksi)*Utao; ReynoldStress[faceI].xy() = -sqr(stressPlus.last().xy()/ksi)*Utao; ReynoldStress[faceI].yy() = sqr(stressPlus.last().yy()/ksi)*Utao; ReynoldStress[faceI].zz() = sqr(stressPlus.last().zz()/ksi)*Utao; } } } scalar ymin = min(Cf.component(1)); scalar Uxmin = min(Ubar.component(0)); scalar dUxdy = Uxmin/ymin; scalar dUdy = sqr(Utao)/nuwInlet; Info << "dUxdy (from case simulation) =" << dUxdy << nl << "dUdy (from theory calculation) =" << dUdy << nl << "Utao =" << Utao << nl << "nuwInlet =" << nuwInlet << nl << "deltaInlet =" << deltaInlet << endl; } }
我在单核下测试时时可以计算的,但是想并行计算的时候,decomposePar过不去,终端输出信息如下:
/*---------------------------------------------------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.4.0 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ Build : 2.4.0-dcea1e13ff76 Exec : decomposePar Date : Nov 13 2016 Time : 10:59:43 Host : "zwk" PID : 12485 Case : /home/Ubuntu/WORKPLACE4/SyntheticCase-test nProcs : 1 sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE). fileModificationChecking : Monitoring run-time modified files using timeStampMaster allowSystemOperations : Allowing user-supplied system call operations // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Create time Decomposing mesh region0 Create mesh Calculating distribution of cells Selecting decompositionMethod simple Finished decomposition in 0.04 s Calculating original mesh data Distributing cells to processors Distributing faces to processors Distributing points to processors Constructing processor meshes Processor 0 Number of cells = 23686 Number of faces shared with processor 1 = 1997 Number of faces shared with processor 1 = 58 Number of processor patches = 2 Number of processor faces = 2055 Number of boundary faces = 4243 Processor 1 Number of cells = 23686 Number of faces shared with processor 0 = 1997 Number of faces shared with processor 0 = 58 Number of faces shared with processor 2 = 1978 Number of faces shared with processor 2 = 52 Number of processor patches = 4 Number of processor faces = 4085 Number of boundary faces = 2189 Processor 2 Number of cells = 23686 Number of faces shared with processor 1 = 1978 Number of faces shared with processor 1 = 52 Number of faces shared with processor 3 = 1954 Number of faces shared with processor 3 = 11 Number of processor patches = 4 Number of processor faces = 3995 Number of boundary faces = 2329 Processor 3 Number of cells = 23686 Number of faces shared with processor 2 = 1954 Number of faces shared with processor 2 = 11 Number of faces shared with processor 4 = 1992 Number of faces shared with processor 4 = 57 Number of processor patches = 4 Number of processor faces = 4014 Number of boundary faces = 2276 Processor 4 Number of cells = 23686 Number of faces shared with processor 3 = 1992 Number of faces shared with processor 3 = 57 Number of faces shared with processor 5 = 1964 Number of faces shared with processor 5 = 43 Number of processor patches = 4 Number of processor faces = 4056 Number of boundary faces = 2208 Processor 5 Number of cells = 23686 Number of faces shared with processor 4 = 1964 Number of faces shared with processor 4 = 43 Number of faces shared with processor 6 = 1984 Number of faces shared with processor 6 = 41 Number of processor patches = 4 Number of processor faces = 4032 Number of boundary faces = 2330 Processor 6 Number of cells = 23685 Number of faces shared with processor 5 = 1984 Number of faces shared with processor 5 = 41 Number of faces shared with processor 7 = 1986 Number of faces shared with processor 7 = 55 Number of processor patches = 4 Number of processor faces = 4066 Number of boundary faces = 2218 Processor 7 Number of cells = 23685 Number of faces shared with processor 6 = 1986 Number of faces shared with processor 6 = 55 Number of processor patches = 2 Number of processor faces = 2041 Number of boundary faces = 4211 Number of processor faces = 14172 Max number of cells = 23686 (0.00105549% above average 23685.8) Max number of processor patches = 4 (14.2857% above average 3.5) Max number of faces between processors = 4085 (15.2978% above average 3543) Time = 0 dUxdy (from case simulation) =2.46405e+06 dUdy (from theory calculation) =2.46471e+06 Utao =23.1659 nuwInlet =0.000217736 deltaInlet =0.0144036 Processor 0: field transfer terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid
还麻烦各位可以给个意见,这个问题就是这个边条造成的,但不知道如何解决,谢谢各位了
-
不知道有没有哪位遇到过这样的情况,我在decomposePar的时候,出现这样的错误提示:
Processor 0: field transfer terminate called after throwing an instance of 'std::logic_error' _what(): basic_string::_S_consturct null not valid
入口边界条件是我自己定义的,功能是读取一个文件数据,进行运算之后赋值给这个边界条件的私有变量。我用的是simple分块,不破坏这个入口。哪里出错了呢可以给点建议吗?
PS:单核验证可以计算
-
最近在用LES计算湍流入口,为了得到一个入口的平均速度场,我想用DNS的数据,也就是用到标准的壁面律曲线(y+ ~ U+),由于我用的求解器是求解有量纲的参数,因此需要对标准的壁面律曲线进行有量纲处理。根据我来流的参数,比如自由来流速度Uinf,温度Tinf,采用绝热壁温,是不是就可以得到有量纲的速度分布了?但我看到有人要给定入口的壁面摩擦速度Utao,边界层厚度等,这些都是没有必要的吧?谢谢!
-
@李东岳 这个三维稍微比二维的在流向长了一点点(很小),mapField不是完全consistent,二维的z坐标是对称的,我的三维则不然,z的最小值是0,所以还得写mapFieldsDict。我之前的做法映射的值都是零,不知道是不是我的mapFieldsDict写错了
-
@李东岳 我之前出现的问题就是值都为零,不知道怎么解决。我的2D展向拉长3D,展向还是一层网格,只是尺寸变大而已。
看来只能写一个后处理小程序了。
-
@wwzhao 好贴:cheeky:
-
我在自定义边界条件时,出现Foam::sigSegv::sigHandler(int)错误,用了Debug模式运行,定位到了我C文件的这几句:
const scalarField muEffb = muEff.boundaryField()[patchId]; const scalarField rhob = rho.boundaryField()[patchId];
在前面已经用lookupObject把muEff和rho这两个场读进来了,而且找到了要提取的边界patchId,不知道为什么这两句有问题?
下面是错误输出:
在#5定位到C文件的位置 -
@wwzhao 好的,我之前描述得太过简单了,sorry:sad:
-
PS:我的第一层网格分辨率y+在0.7左右,基本是LES的网格要求,没有采用壁面函数,我用LES计算之前,想先用RANS计算一下,用的求解器是rhoCentralFoam,不知道是不是这个求解器所用的格式耗散过大造成的。OF里有Roe求解和AUSM等,想换换这几个试试不知道是否可行
-
我用OF的RANS模型计算一个有壁面的流动,发现计算出来的附面层明显偏厚,而用fluent计算了一下,发现并不是很厚,不知道我哪里设置错了,我用的是kOmegaSST模型,和fluent用的一样
-
@cfd-china 好的,2.2的任何版本都可以是吧?
-
@cfd-china 2.2那个版本没有这个问题是吗?对于你的算例而言?
-
我在求解超声速平板的时候,发现近壁流动没有来流的快,导致我求解出来的壁面摩擦速度偏小,平板前缘靠近入口的附面层比来流指定的附面层要厚一些,好像是流动受到“粘性”的制约,这个粘性要么是数值粘性,要么就是湍流粘性大了,不知道可以有什么办法解决这个问题呢,谢谢
-
@李东岳 平板前缘用FLUENT算是没有的,OF算就会有,这个激波对后面的流场有影响
-
请问哪位算过超声速的平板,来流超声速,在平板前缘会形成一个激波,怎么设置才能消除这个呢?很是苦恼
-
针对某个求解器,在计算不同的算例的时候,算例的fvshemes用不同的方法,对结果的影响是怎么样的?我对于这一部分还不是很了解,具体怎么才能选择合适的schemes方法呢?
-
用rhoCentralFoam计算非定常问题,是每个时间步内计算各个方程,我怎么知道它的每个时间步的计算是收敛的?计算是正确的呢?像pimple那样可以通过每个时间步内迭代残差的下降可以判断,不知道这个求解器是怎么保证的
-
@wwzhao 好的,这个应该可行,感谢!
-
我在用LES计算的时候,想实时监测某个边界的某个流动参数,比如出口边界的质量流量,速度等,想看看是否达到了统计上的平均,不知道如果达到了统计平均,是否认为是算好了?谢谢!
-
@wwzhao 好的,感谢。不知道如何利用这个二维的场也能这样对应到三维里,这样就不用再从头算了
-
@wwzhao 好的,这个工具将网格展向多了几层网格,相应的场也会这样对应过去吗?
-
@wwzhao 可以详细一点吗?有点不太清楚。还有一点就是三维的前后两个面是周期性边界,我用的是cyclic,不知道如果用symmetryPlane算出的结果会差多少,这两种边界条件你都试过么?谢谢
-
@cfd-china 看过了,不过还是不太明白是否能解决我提出的问题:confused:
-
我用二维(展向不计算,为empty)的几何模型算了一个结果,想把这个结果对应到三维场(有展向长度),这个用OF是否可以实现?有什么思路么?谢谢!
PS:二维和三维的模型是一样的,唯一的区别就是有了展向长度
-
这个无反射边界条件具体怎么用呢?看了OpenFOAMwiki也是一头雾水。有两个疑问:
这个Ilnf和fieldIlnf的值怎么选呢?
这个条件如果用到出口有反压的情况,是否可以? -
@wwzhao 不是,我程序中有一句写的不对
const vectorField& Cf = patch.Cf()/delta1VD; vectorField meanVelocity(Cf.size());
我改成:
vectorField Cf = patch.Cf()/delta1VD; vectorField meanVelocity(Cf.size());
或者
tmp<vectorField> tCf = patch.Cf()/delta1VD; const vectorField& Cf = tCf(); vectorField meanVelocity(Cf.size());
就可以了
-
在运行某Foam的时候,出现这样的错误:
new cannot satisfy memory request.
This does not necessarily mean you have run out of virtual memory.
It could be due to a stack violation caused by e.g. bad use of pointers or an out of date shared library这个是啥原因呢?
-
@wwzhao 就是说wallGradU求出的就是壁面法向的梯度
-
@wwzhao 嗯嗯,我看了一下源码,这个wallGradU求的就是sngrad,我想它的三个应该就是snGrad在绝对坐标系下的分量吧
-
@wwzhao 我看了一下,求出的是x, y, z 三个分量,我是否要求模呢?
-
@wwzhao 用wallGrandU求出之后再乘以mu_w就可以了是吧
-
就是tau_w是如何计算得到的,wallShearStress得到的是一个vectorField,是一个正应力和两个切应力,但我们所用的这个值应该是个标量吧,比如计算Cf时用的是tau_w/(0.5rhoU*U)。
-
@wwzhao 一般test filter是grid filter 的2倍,而grid filter是网格体积3次方,我怎么指定这个widthCoeff的值呢?
-
LES在用动态亚格子模型时,要用到filter,filter中的widthCoeff是什么呢?看了源码中一些filter的构造函数,用来得到coeff_的场,这个coeff_是什么呢?怎么和滤波函数联系起来呢?
-
在编译自己的程序时,发现编译的时候出现这样的警告,虽然编译成功,但不知道可能会出现什么问题。
make: warning: Clock skew detected. You build may be incomplete. make: Warning: File 'Make/linux64Gcc48DPOpt/dontIncludeDeps' has modification time 7.1e+02 s in the future.
我把系统时间重新调了一下,发现还有这样的警告。
-
我在OF源码中看到tmp类型的变量运算,比如tmp<volSymmTensorField> LL = (一个场), volSymmTensorField MM(......); 然后 LL && MM就可以计算。我之前看到到tmp,理解成一个指针,用于大数据量的场的赋值中,优化内存。但这样的话,LL&&MM我感觉不太理解了,一个指针和一个场怎么能运算呢?而且用tmp的话,要和new对应使用吧?
如果定义返回值类型为tmp的函数,在函数体中就用到了new,这个我是理解的,难道定义一个tmp类型的变量就不用new了么?像tmp<volSymmTensorField> LL =(一个场)这样?
谢谢各位的指教!
-
@cfd-china 好的,谢谢!
-
@cfd-china 在An Introduction to Computational Fluid Dynamics-The Finite Volume Method的103页,有这样的话, S是对称张量,where
|S|= sqrt(2*Sij*Sij)
。还有一个问题,OF中sqr(mag)和magSqr()一样吗?我看到了OF代码中写过sqr(mag),难道这两种写法有区别?
-
请问一个问题,张量的双重內积我有个不解的地方。
OF中一个二阶张量的模|T|=mag(T)=sqrt(T:T)
,就是张量中的相应位置的元素相乘再相加。
而我看到书上说|T| = sqrt(2*Tij*Tij)
,这里多了一个2,这是为什么呢?谢谢大家的指点,我哪里理解错了么?
-
经常会碰到这种边界条件,虽然知道这类边界条件当出流是相当于zeroGradient,入流时相当于fixedValue,但是对于一个出口,什么时候才算是入流状态?而且这个入流的值怎么给定?如果是入流的话,应该是流场外对其的影响,但是流场外的条件怎么知道呢?
PS:我算的是超声速的情况,如果是入流的话,怎么给定?
谢谢各位 -
我用LES计算了一个三维的湍流边界层,想得到发展段某个截面处的y+和U+,不知道这个怎么得到。我的想法是参考yplusLES(3.0以上的是yplus)来获得y+和Utau的值,进而得到U+,对于三维的,可能还要展向平均一下。不知道这种方法可不可行?
还有一个就是我发现wallShearStress,看了一下源码,是将应力张量在面法向方向做投影,不太清楚为什么这么做,用wallShearStress可以计算得到tau_w么?然后用这个计算y+和Utau可以么?如果可以算的话,和之前的yplus源码相比,结果感觉应该不一样,我该如何计算呢?
-
@wzchen 应该是无反射边界条件,可以参考waveTransmissive,是advective的派生类。关于无反射(吸收)边界,可能要参考一些资料,我最近也是在用这个,也是看到文献上说用这个边界。现在的认识还不是很深入。
-
@wwzhao 模拟的是激波,我用的是rhoCentralFoam,一般如果用高精度的格式会造成数值不稳定,还要加limiter限制器,rhoCentralFoam能满足要求么?
ICEM对网格进行局部加密之后,可以用mapFields么
mapFields如何实现并行映射呢
mapFields如何实现并行映射呢
执行Mach出现not implement的错误
LES模型中delta的选择
OF中的TVD与NVD格式
decomposePar运行时出现问题
decomposePar运行时出现问题
decomposePar运行时出现问题
关于湍流边界层入口给定的一些疑问
OF如何实现二维场到三维场的建立
OF如何实现二维场到三维场的建立
OF中关于tmp类型变量的运算和使用
Foam::sigSegv::sigHandler(int)错误
用RANS计算发现壁面处的边界层偏厚
用RANS计算发现壁面处的边界层偏厚
用RANS计算发现壁面处的边界层偏厚
关于数值粘性和湍流粘性
关于数值粘性和湍流粘性
关于数值粘性和湍流粘性
超声速平板问题
超声速平板问题
fvshemes的问题
rhoCentralFoam如何判断计算收敛的?
OF如何实现二维场到三维场的建立
如何实现实时监测某个边界的某些流动参数?
OF如何实现二维场到三维场的建立
OF如何实现二维场到三维场的建立
OF如何实现二维场到三维场的建立
waveTransmissive边界条件
OF如何实现二维场到三维场的建立
waveTransmissive边界条件
内存问题?
内存问题?
OF中如何计算得到壁面摩擦应力呢?
OF中如何计算得到壁面摩擦应力呢?
OF中如何计算得到壁面摩擦应力呢?
OF中如何计算得到壁面摩擦应力呢?
OF中如何计算得到壁面摩擦应力呢?
LES中的动态亚格子模型中的相关问题
LES中的动态亚格子模型中的相关问题
编译时出现clock skew detected的警告!
OF中关于tmp类型变量的运算和使用
关于张量的知识,一个二阶张量的模是怎么求的?
关于张量的知识,一个二阶张量的模是怎么求的?
关于张量的知识,一个二阶张量的模是怎么求的?
诸如inletOutlet等混合边界条件的inletValue如何给
湍流边界层平均速度剖面y+. vs. U+的处理
non-reflecting boundary conditions的定义和初始化问题
将高精度插值格式加到OF中