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. codedfixedvalue实现运动边界速度的指定

codedfixedvalue实现运动边界速度的指定

已定时 已固定 已锁定 已移动 OpenFOAM
1 帖子 1 发布者 35 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • J 在线
    J 在线
    Joker
    写于 最后由 编辑
    #1
    type            codedFixedValue;
        value           uniform (0 0 0);  // 初始速度
        name            UM2;  // 自定义边界条件名称
    
        codeInclude
        #{
            #include "fvMesh.H"
            #include "polyPatch.H"
            #include "fvcMeshPhi.H"
            #include "addToRunTimeSelectionTable.H"
        #};
    
        code
        #{
            // 避免重复计算
            if (this->updated())
            {
                return;
            }
    
            // 获取网格和边界数据
            const fvPatch& p = patch();
            const polyPatch& pp = p.patch();
            const fvMesh& mesh = internalField().mesh();
            
            // 仅在网格运动时计算(静态网格跳过)
            if (mesh.moving())
            {
                // 1. 计算上一时刻的面中心坐标
                const pointField& oldPoints = mesh.oldPoints();
                vectorField oldFc(pp.size());
                forAll(oldFc, i)
                {
                    oldFc[i] = pp[i].centre(oldPoints);  // 基于上一时刻节点坐标
                }
    
                // 2. 计算几何速度(位置变化/时间步长)
                scalar deltaT = mesh.time().deltaTValue();
                vectorField Up = (pp.faceCentres() - oldFc) / deltaT;
    
                // 3. 通量修正确保连续性
                const volVectorField& U = static_cast<const volVectorField&>(internalField());
                scalarField phip = fvc::meshPhi(U, p.index());  // 网格运动产生的通量
                vectorField n = p.nf();  // 边界法向量
                scalarField magSf = p.magSf();  // 面面积
                tmp<scalarField> Un = phip / (magSf + vSmall);  // 通量对应的法向速度
    
                // 4. 合成最终速度:几何速度 + 法向修正
                // 公式:修正速度 = 原始速度 + 法向*(通量法向速度 - 原始法向分量)
                vectorField::operator=(Up + n*(Un() - (n & Up)));
            }
    
            // 调用父类方法完成更新
            fixedValueFvPatchVectorField::updateCoeffs();
        #};
    
        codeOptions
        #{
            -I$(LIB_SRC)/finiteVolume/lnInclude \
            -I$(LIB_SRC)/meshTools/lnInclude
        #};
    
        codeLibs
        #{
            -lfiniteVolume \
            -lmeshTools
        #};
    

    请教一下各位大佬,我想要通过codedfixedvalue实现movingwallvelocity这个边界条件的效果,这个代码是我仿照movingwallvelocity边界条件弄得,我用自己写的这个边界条件算了涡激振动,算出来的结果和movingwallvelocity结果几乎没有差别。计算完成后,我将输出结果导入tecplot,可以正常导入,但是切片时会出现以下报错,目前没有找到问题出在哪儿,应该是我写的这个边界条件tecplot无法识别导致的,但我不知道问题出在哪儿。
    641bf902-dad9-4f14-91ab-7f5bc7eda851-QQ20251011-140535.png

    1 条回复 最后回复

京ICP备15017992号-2

  • 登录

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