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 sparse matrix 内存管理

OpenFOAM sparse matrix 内存管理

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

    各位大神好,我从事热辐射输运方向。现在想在openfoam中开发新的蒙特卡洛求解热辐射输运方程,所用的方法为READ法。我现在想用sparse matrix 存储viewfactor, 需要用到一个内存动态变化的sparse matrix。因为在fvMatrix类中,sparse matrix根据网格类型、差值算法等条件,内存都是事先分配好的。请问大神有什么建议吗?

    1 条回复 最后回复
  • 刘 离线
    刘 离线
    刘雄国
    写于 最后由 编辑
    #2

    好吧!我先自己回复下自己。在稀疏矩阵存储中,通用有两种格式,如下矩阵

    A =   [ a00  a01 0 0
             0 a11 a12 0
             a20 0 a22 0
             a30 0 0 a33];
    

    引用一篇博士论文 CRS scheme stores the non-zero elements the matrix in left-to-right and top-to-bottom order in vector v (row-wise storge). 存储格式如下

    v = [a00, a01, a11,a12,a20,a22,a30,a33]
    cI = [0,1,1,2,0,2,0,3]
    rI = [0,1,1,2,0,2,0,3]
    

    但是在openfoam中,不是这么存储的
    openfoam是一种 LDU 格式 对角线 lowerAddr() upperAddr()

    A = [ 
           d0 u0 u1  0  0 0 
           l0 d1 u2  0 0 0 0 
            l1 l2 d2 u4 u5
            . . . 
    ]
    
     l = [l0 l1 l2  ...]
     d = [d0 d1 d2 d3 d4 ...]
     u = [u0 u1 u2 u3 ...]
    L = [0 0 1 1 2 2 3 ...]
    U = [1 2 2 3 3 4 4 ..]
    

    具体可参见lduAddressing.H 头文件
    因为计算流体力学中,大部分矩阵都是对称(因为一个internal face对应两个体)除了特别的边界条件外,基本上都是对称矩阵。而矩阵对角元素就更好求了,大部分情况直接把该行相加就得到主对角元素。这种sparse matrix设计是符合cfd计算原理的,但是我的问题还是没解决。看到相关资料分享一下。
    稀疏矩阵也分好多种,openfoam中的renumberMesh就是尽量保证在是多对角阵。
    谢谢!

    1 条回复 最后回复

  • 登录

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