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
2 帖子 2 发布者 1.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    coolhhh 神
    写于 最后由 编辑
    #1

    请教各位前辈一个简单的编程问题。我先用topoSet在网格中创建内部cellZone,名称为interior。现在想对interior每个网格体心的U赋值,代码如下:

    label patchID = mesh.cellZones().findZoneID("interior");
    const labelList cells = mesh.cellZones()[patchID];
    forAll(cells, i)
    {
        label celli = cells[i];
        U[celli] = vector(0.1, 0.1, 0.1);
    }
    

    如果是边界,一般可以写成引用的方式:

    label patchID = mesh.boundaryMesh().findPatchID("inlet");
    vectorField& patchField = U.boundaryFieldRef()[patchID];
    

    以上方式是可以实现赋值,想问的问题是:

    (1)内部cellZone是否可以类似写成引用的形式,再对patchField赋值?类似边界场写成以下形式会报错,但不知道怎么修改:

    label patchID = mesh.cellZones().findZoneID("interior");
    vectorField& patchField = U.primitiveFieldRef()[patchID];
    

    报错如下:

    error: invalid initialization of reference of type 'Foam::vectorField&' {aka 'Foam::Field<Foam::Vector<double> >&'} from expression of type 'Foam::Vector<double>'
      180 | vectorField& patchField = U.primitiveFieldRef()[patchID];
          |
    

    (2)U[celli]和U.primitiveField()[celli]这两者有无区别?测试效果好像是一样的

    forAll(cells, i)
    {
        label celli = cells[i];
        U[celli] = vector(0.1, 0.1, 0.1);
        U.primitiveField()[celli] = vector(0.1, 0.1, 0.1);
    }
    
    1 条回复 最后回复
  • 田畔的风田 离线
    田畔的风田 离线
    田畔的风 神
    写于 最后由 编辑
    #2
    此回复已被删除!
    1 条回复 最后回复

  • 登录

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