【问题标题】:Fipy Get values from a mesh region and not by point coordinatesFipy 从网格区域获取值,而不是通过点坐标
【发布时间】:2021-03-23 04:00:47
【问题描述】:

我正在尝试从某个区域获取值。我知道有一种方法可以通过引入坐标来调用值:

var([(x1, x2, x3) #xvalues
     (y1, y2, y3)]) #yvalues

但是,例如,如果我之前使用 var.setValue 中的“where”属性(接受区域)设置值,则会混淆它们有多少点和哪些坐标。

var.setValue(20., where=(Y <= y1) & ((X <= x1) & (X > x2)))

有没有什么方法可以像 var.setValue(where='...') 那样通过“查询”一个区域来获取值?

谢谢。

【问题讨论】:

    标签: fipy


    【解决方案1】:

    如果可以根据单元格坐标为区域构造掩码,则可以使用该掩码来提取值。 FiPy 中没有特殊功能可以做到这一点,但我们可以使用布尔掩码来索引变量。例如,

    from fipy import CellVariable, Grid2D
    
    mesh = Grid2D(nx=4, ny=4)
    var = CellVariable(mesh=mesh)
    mask = (mesh.y <= 2) & (mesh.x <= 3) & (mesh.x > 1)
    var.setValue(20., where=mask)
    print('x:', mesh.x[mask.value])
    print('y:', mesh.y[mask.value])
    print('val:', var[mask.value])
    print(var.mesh)
    print(var[mask.value].mesh)
    

    给予

    x: [1.5 2.5 1.5 2.5]
    y: [0.5 0.5 1.5 1.5]
    val: [20. 20. 20. 20.]
    UniformGrid2D(dx=1.0, nx=4, dy=1.0, ny=4)
    Traceback (most recent call last):
      File "tmp.py", line 11, in <module>
        print(var[mask.value].mesh)
    AttributeError: 'unOp' object has no attribute 'mesh'
    

    上面的内容为您提供了值的子区域以及相应的坐标。但是,在 FiPy 中无法提取同时维护其关联网格数据的子区域变量。

    【讨论】:

    • 谢谢。你的解决方案比我的简单:mesh = Grid2D(Lx=Lx, Ly = Ly, nx=nx, ny=ny) X,Y = mesh.cellCenters mask = ((Y &lt;= y1 ) &amp; (X &lt;= x1)) mask_cells = [i for i in range(len(mask)) if mask[i]] val = var.value[mask_cells]
    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2013-05-15
    相关资源
    最近更新 更多