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中文网

  1. CFD中文网
  2. OpenFOAM
  3. 推板造波-不规则波

推板造波-不规则波

已定时 已固定 已锁定 已移动 OpenFOAM
8 帖子 2 发布者 917 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • B 离线
    B 离线
    bcp
    写于 最后由 编辑
    #1

    求助各位大佬,我用openfoam9自定义了一个推板造波边界条件的代码,代码中植入了Jonswap谱想要模拟不规则波,代码编译没有问题,设置算例后运行没有问题,在波高监测点得到的波形图像也没有问题,但是得到的波高和我设置的有效波高差距很大,差了一个数量级是什么原因呢,试了好多次都解决不了,有没有大佬懂的,下面是我的代码还有算例设置

    code_text
    ````scalar  randomwaveDisplacementPointPatchVectorField:: beita()
    {
        return (0.06238/(0.23+0.0336*gama_-0.185*pow((1.9+gama_),-1)))*(1.094-0.01916*log(gama_));
    }
    scalar  Foam::randomwaveDisplacementPointPatchVectorField:: k1(scalar x)
    {
        scalar k1=x*x/g_;
        int maxIter =200;
        scalar tol = 1e-12;
        for (int iter = 0; iter < maxIter; iter++)
        {
            scalar k_new = x*x/g_/ tanh(k1*depth_);
            if (mag(k_new - k1)<tol) break;
            k1 = k_new;
        }
        return k1;
    }
    
    void Foam:: randomwaveDisplacementPointPatchVectorField::updateCoeffs()
    {
        if (updated())
        {
            return;
        }
    
        scalar t = this->db().time().value();
        scalar deltaf=(fmax_-fmin_)/n_;
        vector sumpushU = vector::zero;
        for (int i=0; i<n_; i++)
        {
            scalar f0=fmin_+i*deltaf;
            scalar f1=fmin_+(i+1)*deltaf;
            scalar f= (f0+f1)/2;
            scalar sigma = (f <= f_p) ? 0.07 : 0.09;
            scalar omega=2*PI*f;
            scalar k=k1(omega);
            std::random_device rd;
            std::mt19937 gen(rd());
            std::uniform_real_distribution<> dis(0,2*PI);
            scalar theta =dis(gen);
            scalar Sf=beita_*pow(height_,2)*pow(T_p,-4)*pow(f,-5)*exp(-1.25*pow((T_p*f),-4))*pow(gama_,exp(-pow(((f-f_p)/(sigma*f_p)),2)/2));
            scalar A = sqrt(2*Sf*deltaf);
            scalar w = (4*pow(sinh(k*depth_),2)/(2*k*depth_+sinh(2*k*depth_)));
            vector pushU = vector(((omega * A *cos(omega * t + theta))/w),0,0);
            sumpushU +=pushU
    }
    vector pushU=sumpushU;
    Field<vector>::operator=(pushU);
    Info << "Time = " << t;
    Info << "regular Wave" << "push Vector is" << pushU.component(0);
     fixedValuePointPatchField::updateCoeffs();
    }
    

    code_text

    
    internalField   uniform (0 0 0);
    
    boundaryField
    {
        #includeEtc "caseDicts/setConstraintTypes"
    
        left
        {
            type            randomwaveDisplacement;
            height          0.08;
            depth           0.6;
            T_p             2.0;
            f_p             0.5;
            gama            3.3;
            n               100;
            fmin            0.1;
            fmax            10;
            waveType        randomwave;
            value           uniform (0 0 0);
        }
        right
        {
            type            fixedValue;
            value           uniform (0 0 0);
        }
        top
        {
            type            slip;
        }
        bottom
        {
            type            slip;
        }
    }
    1 条回复 最后回复
  • C 离线
    C 离线
    chenboyao
    写于 最后由 编辑
    #2

    添加湍流模型了吗?如果采用层流,正常造波应该差距不大,如果采用了湍流模型,可能存在波浪衰减问题,数值造波的时候由于湍流所导致的能量耗散,可能会使得造波精度差距有点大。但是采用层流那正常应该差距不大,可能就是其他问题了

    B 1 条回复 最后回复
  • B 离线
    B 离线
    bcp
    在 中回复了 chenboyao 最后由 编辑
    #3

    @chenboyao 并没有添加湍流模型,目前都是采用的层流造波

    C 1 条回复 最后回复
  • C 离线
    C 离线
    chenboyao
    在 中回复了 bcp 最后由 chenboyao 编辑
    #4

    @bcp 那你这边在看看自由液面的加密一下,在自由液面对波浪进行捕捉,正常需要15到20个网格进行捕捉,另外还有一个原因,就是在fvScheme中,如果ddt采用的是一阶Euler格式,可能会导致计算出来的波浪波形和理论值相差大,建议你可以采用二阶,CN格式,CN设置为0.9,这样计算出来的波形和理论值的误差应该可以在5%以内。

    B 1 条回复 最后回复
  • B 离线
    B 离线
    bcp
    写于 最后由 编辑
    #5
    此回复已被删除!
    1 条回复 最后回复
  • B 离线
    B 离线
    bcp
    在 中回复了 chenboyao 最后由 编辑
    #6

    @chenboyao 好的感谢大佬回复,我去尝试一下:xinxin2:

    C 1 条回复 最后回复
  • C 离线
    C 离线
    chenboyao
    在 中回复了 bcp 最后由 编辑
    #7

    @bcp 我这边一直采用waves2Foam造波,前面碰到过这样的问题,一是造波精度不够,二是采用湍流模型后波浪发生衰减,。第一个应该是你的时间格式的问题,采用高阶就行。第二个需要采用其他的湍流模型,约束湍流动能

    B 1 条回复 最后回复
  • B 离线
    B 离线
    bcp
    在 中回复了 chenboyao 最后由 编辑
    #8

    @chenboyao 好的感谢大佬,目前我还没有加湍流模型,我先改一下时间格式看看能不能行

    1 条回复 最后回复

  • 登录

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