示例#1
0
def test_load_from_ugrid_file():

    data_dir = Path(__file__).absolute().parent / '../../data'

    gr = Grid()

    gr.setFlags(1, 1)

    filename = str(data_dir / Path('cs_4.nc'))
    gr.loadFrom2DUgrid(f'{filename}:physics')

    nedges = gr.getNumberOfEdges()
    print(f'nedges = {nedges}')
    assert nedges == 192

    ncells = gr.getNumberOfCells()
    for icell in range(ncells):
        for iedge in range(4):
            edgeId, edgeSign = gr.getEdgeId(icell, iedge)
            nodeIds = gr.getNodeIds(icell, iedge)
            print(
                f'cell {icell} edge {iedge}: edgeId = {edgeId}, {edgeSign} nodeIds = {nodeIds}'
            )

    # attaching a 3 components field to the grid
    data = numpy.array(range(ncells * 4 * 3), numpy.float64)
    gr.attach('myData', data)
示例#2
0
文件: test_grid.py 项目: pletzer/mint
def test_load_from_ugrid_file2():
    gr = Grid()
    gr.setFlags(1, 1)
    filename = str(DATA_DIR / Path('lfric_diag_wind.nc'))
    gr.loadFromUgrid2DFile(f'{filename}$Mesh2d')
    nedges = gr.getNumberOfEdges()
    print(f'nedges = {nedges}')
    assert (nedges == 3072)
示例#3
0
def test_identity():

    srcGrid = Grid()
    srcGrid.setFlags(fixLonAcrossDateline=0, averageLonAtPole=0,
                     degrees=True)  # uniform lat-lon
    filename = str(DATA_DIR / Path('latlon4x2.nc'))
    meshname = 'latlon'
    srcGrid.loadFromUgrid2DFile(f'{filename}${meshname}')

    # destination and source grids are the same
    dstGrid = Grid()
    dstGrid.setFlags(fixLonAcrossDateline=0, averageLonAtPole=0,
                     degrees=True)  # uniform lat-lon
    filename = str(DATA_DIR / Path('latlon4x2.nc'))
    meshname = 'latlon'
    dstGrid.loadFromUgrid2DFile(f'{filename}${meshname}')

    regridder = RegridEdges()

    # even though the grids are the same, we still need to create two
    # grid instances
    regridder.setSrcGrid(srcGrid)
    regridder.setDstGrid(dstGrid)

    # compute the weights
    regridder.buildLocator(numCellsPerBucket=128,
                           periodX=360.,
                           enableFolding=False)
    regridder.computeWeights(debug=2)

    # create a mock field
    num_edges = srcGrid.getNumberOfEdges()
    src_data = numpy.array(range(0, num_edges), numpy.float64)

    # allocate space to receive the interpolated data
    dst_data = numpy.empty((num_edges, ), numpy.float64)

    # apply the interpolation weights
    regridder.apply(src_data, dst_data, placement=UNIQUE_EDGE_DATA)

    diff = src_data - dst_data
    for i in range(num_edges):
        print(f'{i} {diff[i]}')
    print(f'src data = {src_data}')
    print(f'dst data = {dst_data}')

    # check that we recover the original field
    error = numpy.fabs(diff).sum()
    print(f'error = {error}')
    assert error < 1.e-6
示例#4
0
文件: test_grid.py 项目: pletzer/mint
def test_load_from_ugrid_file():
    gr = Grid()
    gr.setFlags(1, 1)
    filename = str(DATA_DIR / Path('cs_4.nc'))
    gr.loadFromUgrid2DFile(f'{filename}$physics')
    nedges = gr.getNumberOfEdges()
    print(f'nedges = {nedges}')
    assert (nedges == 192)
    ncells = gr.getNumberOfCells()
    for icell in range(ncells):
        for iedge in range(4):
            edgeId, edgeSign = gr.getEdgeId(icell, iedge)
            nodeIds = gr.getNodeIds(icell, iedge)
            print(f"cell {icell} edge {iedge}: " +
                  f"edgeId = {edgeId}, {edgeSign} nodeIds = {nodeIds}")
    # attaching a 3 components field to the grid
    data = numpy.array(range(ncells * 4 * 3), numpy.float64)
    gr.attach('myData', data)
    num_bad_cells = gr.check()
    assert (num_bad_cells == 0)
示例#5
0
def test_identity():

    grid = Grid()
    grid.setFlags(fixLonAcrossDateline=0, averageLonAtPole=0,
                  degrees=True)  # uniform lat-lon
    filename = str(DATA_DIR / Path('latlon4x2.nc'))
    meshname = 'latlon'
    grid.loadFromUgrid2DFile(f'{filename}${meshname}')
    num_edges = grid.getNumberOfEdges()
    data = numpy.array(range(0, num_edges), numpy.float64)

    pli = PolylineIntegral()
    pli.setGrid(grid)
    pli.buildLocator(numCellsPerBucket=100, periodX=0., enableFolding=False)

    xyz = numpy.array([
        (0., 90., 0.),
        (360., 90., 0.),
    ])
    pli.computeWeights(xyz, counterclock=False)
    flux = pli.getIntegral(data=data, placement=UNIQUE_EDGE_DATA)

    print(f'flux = {flux}')
    assert abs(flux - 38.) < 1.e-10