File: bpReaderHeatMap2D.py

package info (click to toggle)
adios2 2.10.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 33,764 kB
  • sloc: cpp: 175,964; ansic: 160,510; f90: 14,630; yacc: 12,668; python: 7,275; perl: 7,126; sh: 2,825; lisp: 1,106; xml: 1,049; makefile: 579; lex: 557
file content (74 lines) | stat: -rw-r--r-- 2,622 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#
# Distributed under the OSI-approved Apache License, Version 2.0.  See
# accompanying file Copyright.txt for details.
#
# bpReaderHeatMap2D.py
#
#
#  Created on: Dec 5th, 2017
#      Author: William F Godoy godoywf@ornl.gov
#              Norbert Podhorszki pnorbert@ornl.gov
#

from mpi4py import MPI
import numpy
from adios2 import Stream, FileReader

# MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

# User data
Nx = 10
Ny = 10

count = [Nx, Ny]
start = [rank * Nx, 0]
shape = [size * Nx, Ny]

temperatures = numpy.zeros(Nx * Ny, dtype=int)

for i in range(0, Nx):
    iGlobal = start[0] + i

    for j in range(0, Ny):
        value = iGlobal * shape[1] + j
        temperatures[i * Nx + j] = value

with Stream("HeatMap2D_py.bp", "w", comm) as obpStream:
    obpStream.write("temperature2D", temperatures, shape, start, count)
    if not rank:
        obpStream.write("N", [size, Nx, Ny])  # will be an array in output
        obpStream.write("Nx", numpy.array(Nx))  # will be a scalar in output
        obpStream.write("Ny", Ny)  # will be a scalar in output
        obpStream.write_attribute("nproc", size)  # will be a single value attribute in output
        obpStream.write_attribute("dimensions", [size * Nx, Ny], "temperature2D")

if not rank:
    with FileReader("HeatMap2D_py.bp", MPI.COMM_SELF) as ibpFile:
        # scalar variables are read as a numpy array with 0 dimension
        in_nx = ibpFile.read("Nx")
        in_ny = ibpFile.read("Ny")
        print(f"Incoming nx, ny = {in_nx}, {in_ny}")

        # single value attribute is read as a numpy array with 0 dimension
        in_nproc = ibpFile.read_attribute("nproc")
        print(f"Incoming nproc = {in_nproc}")
        # array attribute is read as a numpy array or string list
        in_dims = ibpFile.read_attribute("temperature2D/dimensions")
        print(f"Incoming diumensions = {in_dims}")

        # On option is to inquire a variable to know its type, shape
        # directly, not as strings, and then we can use the variable
        # object to set selection and/or set steps to read
        var_inTemperature = ibpFile.inquire_variable("temperature2D")
        if var_inTemperature is not None:
            var_inTemperature.set_selection([[2, 2], [4, 4]])
            inTemperatures = ibpFile.read(var_inTemperature)
            print(
                f"Incoming temperature map with selection "
                f"start = {var_inTemperature.start()}, count = {var_inTemperature.count()}"
            )
            for i in range(0, inTemperatures.shape[1]):
                print(str(inTemperatures[i]))