Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

A

Aeronastro

@Aeronastro
关于
帖子
94
主题
34
群组
0
粉丝
4
关注
4

帖子

最新

  • ICEM对网格进行局部加密之后,可以用mapFields么
    A Aeronastro

    ICEM中对网格进行了局部加密,局部加密了以后,不同block的同一条edge上节点不一样,我在mapFields时会不会出问题?


  • mapFields如何实现并行映射呢
    A Aeronastro

    @李东岳 谢谢啦


  • mapFields如何实现并行映射呢
    A Aeronastro

    我之前算了一个算例,网格比较大,最近新创建了一个模型(几何稍微不同),想把之间算好的场映射到新的模型中进行并行计算,如何并行处理映射呢?我如果不进行并行映射,由于网格量太大导致mapFields时出现内存不足的问题。mapFields里有-parallel选项,但不太清楚怎么使用:crying:


  • 执行Mach出现not implement的错误
    A Aeronastro

    在后处理求解马赫数的时候,用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这个场?谢谢各位!


  • LES模型中delta的选择
    A Aeronastro

    delta可以选择cubeRootVol, vanDriest等,有没有谁比较过采用不同的delta,会对结果产生什么影响吗?


  • OF中的TVD与NVD格式
    A Aeronastro

    最近计算一个可压流算例,用的是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.


  • decomposePar运行时出现问题
    A Aeronastro

    @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 是我的文件所在的地方0_1479171264150_01.png

    其中的data文件中的数据是一列一列排布的,
    0_1479171527178_data


  • decomposePar运行时出现问题
    A Aeronastro

    可能我描述的问题不够准确,下面附上我的部分代码:
    在.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运行时出现问题
    A Aeronastro

    不知道有没有哪位遇到过这样的情况,我在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:单核验证可以计算


  • 关于湍流边界层入口给定的一些疑问
    A Aeronastro

    最近在用LES计算湍流入口,为了得到一个入口的平均速度场,我想用DNS的数据,也就是用到标准的壁面律曲线(y+ ~ U+),由于我用的求解器是求解有量纲的参数,因此需要对标准的壁面律曲线进行有量纲处理。根据我来流的参数,比如自由来流速度Uinf,温度Tinf,采用绝热壁温,是不是就可以得到有量纲的速度分布了?但我看到有人要给定入口的壁面摩擦速度Utao,边界层厚度等,这些都是没有必要的吧?谢谢!


  • OF如何实现二维场到三维场的建立
    A Aeronastro

    @李东岳 这个三维稍微比二维的在流向长了一点点(很小),mapField不是完全consistent,二维的z坐标是对称的,我的三维则不然,z的最小值是0,所以还得写mapFieldsDict。我之前的做法映射的值都是零,不知道是不是我的mapFieldsDict写错了


  • OF如何实现二维场到三维场的建立
    A Aeronastro

    @李东岳 我之前出现的问题就是值都为零,不知道怎么解决。我的2D展向拉长3D,展向还是一层网格,只是尺寸变大而已。

    看来只能写一个后处理小程序了。


  • OF中关于tmp类型变量的运算和使用
    A Aeronastro

    @wwzhao 好贴:cheeky:


  • Foam::sigSegv::sigHandler(int)错误
    A Aeronastro

    我在自定义边界条件时,出现Foam::sigSegv::sigHandler(int)错误,用了Debug模式运行,定位到了我C文件的这几句:

    const scalarField muEffb = muEff.boundaryField()[patchId];
    const scalarField rhob = rho.boundaryField()[patchId];
    

    在前面已经用lookupObject把muEff和rho这两个场读进来了,而且找到了要提取的边界patchId,不知道为什么这两句有问题?

    下面是错误输出:
    0_1477278094280_0001.png
    在#5定位到C文件的位置


  • 用RANS计算发现壁面处的边界层偏厚
    A Aeronastro

    @wwzhao 好的,我之前描述得太过简单了,sorry:sad:


  • 用RANS计算发现壁面处的边界层偏厚
    A Aeronastro

    PS:我的第一层网格分辨率y+在0.7左右,基本是LES的网格要求,没有采用壁面函数,我用LES计算之前,想先用RANS计算一下,用的求解器是rhoCentralFoam,不知道是不是这个求解器所用的格式耗散过大造成的。OF里有Roe求解和AUSM等,想换换这几个试试不知道是否可行


  • 用RANS计算发现壁面处的边界层偏厚
    A Aeronastro

    我用OF的RANS模型计算一个有壁面的流动,发现计算出来的附面层明显偏厚,而用fluent计算了一下,发现并不是很厚,不知道我哪里设置错了,我用的是kOmegaSST模型,和fluent用的一样


  • 关于数值粘性和湍流粘性
    A Aeronastro

    @cfd-china 好的,2.2的任何版本都可以是吧?


  • 关于数值粘性和湍流粘性
    A Aeronastro

    @cfd-china 2.2那个版本没有这个问题是吗?对于你的算例而言?


  • 关于数值粘性和湍流粘性
    A Aeronastro

    我在求解超声速平板的时候,发现近壁流动没有来流的快,导致我求解出来的壁面摩擦速度偏小,平板前缘靠近入口的附面层比来流指定的附面层要厚一些,好像是流动受到“粘性”的制约,这个粘性要么是数值粘性,要么就是湍流粘性大了,不知道可以有什么办法解决这个问题呢,谢谢

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]