├── LICENSE
├── README.md
├── demos
├── 1_adios2_bp4_write_parallel.mp4
├── 2_adios2_bp4_read_and_visu.mp4
├── 3_adios2_sst_read_write_and_visu.mp4
├── 4_adios2_sst_read_write_and_visu_singleproc_block_queue5.mp4
└── 5_adios2_sst_read_write_and_monitoring_singleproc_discard_rendevous0.mp4
├── example
├── adios2.xml
├── diffusion2D_visualization.ipynb
├── diffusion2D_visualization_hl.ipynb
└── mpi_diffusion2D.py
├── insitu_preview.gif
└── parallel_io_webinar_with_ADIOS2_tutorial.pdf
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2020, Samuel Omlin
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | 1. Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | 3. Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # A concise ADIOS2 tutorial
2 |
3 | This is a concise tutorial on the usage of ADIOS2 [1,2] on a supercomputer. It is part of a recorded webinar on parallel I/O given at the Swiss National Supercomputing Centre, CSCS [3]. The ADIOS2 tutorial (speaker: Dr. Samuel Omlin) starts after a 15 min general introduction to parallel I/O on Piz Daint: jump directly to the [ADIOS2 tutorial](https://youtu.be/gl_vIfjvTkc?t=1087) or start the [webinar from the beginning](https://www.youtube.com/watch?v=gl_vIfjvTkc) (the slides are found [here](parallel_io_webinar_with_ADIOS2_tutorial.pdf)). The tutorial takes about 35 min and is followed by a 30 min discussion on visualization related topics, which also relates to ADIOS2 in multiple parts (speaker: Dr. Jean Favre).
4 |
5 | The ADIOS2 tutorial covers the following topics:
6 | 1. accessing the file system in parallel;
7 | 2. selecting different file formats (including HDF5);
8 | 3. including on-the-fly lossy or lossless compression; and
9 | 4. staging simulation output for in-situ visualization.
10 |
11 | ## A full in-situ visualization workflow example
12 |
13 | The tutorial is constructed around a concise and polished example which enables a full in-situ visualization workflow. It consists of:
14 | - [mpi_diffusion2D.py](example/mpi_diffusion2D.py): a distributed 2-D heat diffusion simulation code which is programmed in a single Python for simplicity's sake
15 | - [diffusion2D_visualization.ipynb](example/diffusion2D_visualization.ipynb): a Python Jupyter notebook enabling both file-based and in-situ visualisation
16 | - [adios2.xml](example/adios2.xml): an ADIOS2 configuration file enabling to switch between file I/O and data staging for in-situ visualization
17 |
18 | The repository contains also an alternative version of the visualization notebook, which uses the ADIOS2 high-level Python API: [diffusion2D_visualization_hl.ipynb](example/diffusion2D_visualization_hl.ipynb).
19 |
20 | ## Demo videos showcasing interesting use cases
21 |
22 | [Four commented demos at the end of the ADIOS2 tutorial](https://youtu.be/gl_vIfjvTkc?t=2487) illustrate ADIOS2 file I/O and the in-situ visualization workflow. There is [an additional demo at the very end of the webinar](https://youtu.be/gl_vIfjvTkc?t=4971) (presented by Dr. Jean Favre) which shows that the above example can be straigthforwardly extended to visualize with ParaView instead of Matplotlib. Here is a little preview on one of the full in-situ visualization workflow demos:
23 |
24 | 
25 |
26 | Even without comments, the demo videos should be quite understandable and are therefore listed here. The demo videos showcase five different use cases (the 5th video was added after the webinar):
27 | 1. [run an distributed simulation writing a BP4 file in parallel and inspecting the result](demos/1_adios2_bp4_write_parallel.mp4)
28 | 2. [read the above written BP4 file from a jupyter notebook](demos/2_adios2_bp4_read_and_visu.mp4)
29 | 3. [run an distributed simulation and visualize in-situ from a jupyter notebook](demos/3_adios2_sst_read_write_and_visu.mp4)
30 | 4. [run a simulation using the rendezvous and blocking if queue full policies, visualize in-situ from a jupyter notebook](demos/4_adios2_sst_read_write_and_visu_singleproc_block_queue5.mp4)
31 | 5. [run a simulation using the no rendevous and discard if queue full policies, monitoring in-situ from a jupyter notebook](demos/5_adios2_sst_read_write_and_monitoring_singleproc_discard_rendevous0.mp4)
32 |
33 | ## Conclusion
34 |
35 | The tutorial demonstrates that, using ADIOS2, it is possible to straigthforwardly visualize or monitor the output of an MPI application in-situ on a Jupyter notebook. The presented workflow enables even a visualization with ParaView on the Jupyter notebook.
36 |
37 | ## Acknowledgements
38 |
39 | I would like to thank to thank to Greg Eisenhauer1, Norbert Podhorszki2, William F. Godoy2 and Scott Klasky2 for their highly reactive support and interesting discussions during the development of this tutorial.
40 |
41 | 1 Georgia Institute of Technology | 2 Oak Ridge National Laboratory
42 |
43 | ## References
44 |
45 | \[1\] [Godoy, W. F., Podhorszki, N., Wang, R., Atkins, C., Eisenhauer, G., Gu, J., Davis, P., Choi, J., Germaschewski, K., Huck, K., Huebl, A., Kim, M., Kress, J., Kurc, T., Liu, Q., Logan, J., Mehta, K., Ostrouchov, G., Parashar, M., Poeschel, F., Pugmire, D., Suchyta, E., Takahashi, K., Thompson, N., Tsutsumi, S., Wan, L., Wolf, M., Wu, K., Klasky, S. (2020). ADIOS 2: The Adaptable Input Output System. A framework for high-performance data management. SoftwareX, 12, 100561.](https://doi.org/10.1016/j.softx.2020.100561)
46 |
47 | [2] https://adios2.readthedocs.io/
48 |
49 | [3] https://www.cscs.ch/events/upcoming-events/event-detail/parallel-io-on-piz-daint/
50 |
--------------------------------------------------------------------------------
/demos/1_adios2_bp4_write_parallel.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omlins/adios2-tutorial/12c3edff5025e5d6f431ec8ab623ce3d9ff330e0/demos/1_adios2_bp4_write_parallel.mp4
--------------------------------------------------------------------------------
/demos/2_adios2_bp4_read_and_visu.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omlins/adios2-tutorial/12c3edff5025e5d6f431ec8ab623ce3d9ff330e0/demos/2_adios2_bp4_read_and_visu.mp4
--------------------------------------------------------------------------------
/demos/3_adios2_sst_read_write_and_visu.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omlins/adios2-tutorial/12c3edff5025e5d6f431ec8ab623ce3d9ff330e0/demos/3_adios2_sst_read_write_and_visu.mp4
--------------------------------------------------------------------------------
/demos/4_adios2_sst_read_write_and_visu_singleproc_block_queue5.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omlins/adios2-tutorial/12c3edff5025e5d6f431ec8ab623ce3d9ff330e0/demos/4_adios2_sst_read_write_and_visu_singleproc_block_queue5.mp4
--------------------------------------------------------------------------------
/demos/5_adios2_sst_read_write_and_monitoring_singleproc_discard_rendevous0.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omlins/adios2-tutorial/12c3edff5025e5d6f431ec8ab623ce3d9ff330e0/demos/5_adios2_sst_read_write_and_monitoring_singleproc_discard_rendevous0.mp4
--------------------------------------------------------------------------------
/example/adios2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/example/diffusion2D_visualization.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import IPython\n",
10 | "import numpy as np\n",
11 | "import matplotlib.pyplot as plt\n",
12 | "from time import sleep\n",
13 | "import adios2"
14 | ]
15 | },
16 | {
17 | "cell_type": "code",
18 | "execution_count": 2,
19 | "metadata": {},
20 | "outputs": [
21 | {
22 | "data": {
23 | "text/plain": [
24 | "'SstReader'"
25 | ]
26 | },
27 | "execution_count": 2,
28 | "metadata": {},
29 | "output_type": "execute_result"
30 | }
31 | ],
32 | "source": [
33 | "adios = adios2.ADIOS(configFile=\"adios2.xml\") # Use the configurations defined in \"adios2.xml\"...\n",
34 | "io = adios.DeclareIO(\"readerIO\") # ... in the section \"readerIO\"\n",
35 | "engine = io.Open(\"diffusion2D.bp\", adios2.Mode.Read) # Open the file/stream \"diffusion2D.bp\"\n",
36 | "engine.Type() # Check the type of the engine: BP4/SST..."
37 | ]
38 | },
39 | {
40 | "cell_type": "code",
41 | "execution_count": 3,
42 | "metadata": {},
43 | "outputs": [
44 | {
45 | "data": {
46 | "text/plain": [
47 | "{}"
48 | ]
49 | },
50 | "execution_count": 3,
51 | "metadata": {},
52 | "output_type": "execute_result"
53 | }
54 | ],
55 | "source": [
56 | "io.AvailableVariables() # There are no available variables before the first step when using SST"
57 | ]
58 | },
59 | {
60 | "cell_type": "code",
61 | "execution_count": 4,
62 | "metadata": {},
63 | "outputs": [
64 | {
65 | "data": {
66 | "image/png": "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\n",
67 | "text/plain": [
68 | ""
69 | ]
70 | },
71 | "metadata": {
72 | "needs_background": "light"
73 | },
74 | "output_type": "display_data"
75 | }
76 | ],
77 | "source": [
78 | "nprocessed=0\n",
79 | "while engine.BeginStep(mode=adios2.StepMode.Read,timeoutSeconds=100.0) != adios2.StepStatus.EndOfStream : # Begin the next ADIOS2 read step while there is any\n",
80 | " T_id = io.InquireVariable(\"temperature\") # Get a handle for the variable T. ATTENTION: T_id is only valid for the current step when using streaming (SST or file streaming); thus, moving it into the if statement below would lead to an error!\n",
81 | " if nprocessed == 0:\n",
82 | " nxy_global = T_id.Shape() # Extract meta data\n",
83 | " nxy = T_id.Count() # ...\n",
84 | " T_type = T_id.Type() # ...\n",
85 | " T = np.zeros(nxy, dtype=T_type) # Prealocate memory for T using the meta data\n",
86 | " print(nxy_global, nxy, T_type); sleep(4) # Note that nxy==nxy_global as we read only with one process\n",
87 | " engine.Get(T_id, T) # Add T to variable(s) for reading (SetSelection() would be needed in addition if we were reading the data with multiple MPI processes: this would make sure that every process reads \"his\" block) \n",
88 | " engine.EndStep() # End ADIOS2 read step (includes normally the actual reading of data)\n",
89 | " IPython.display.clear_output(wait=True) # Pass wait=True to wait until new ouput before clearing; this prevents flickering\n",
90 | " plt.title('Temperature at step ' + str(engine.CurrentStep())) # Plot the temperature\n",
91 | " plt.contourf(T, 256, cmap=plt.cm.jet) # ...\n",
92 | " plt.colorbar() # ...\n",
93 | " plt.show() # ...\n",
94 | " nprocessed += 1"
95 | ]
96 | },
97 | {
98 | "cell_type": "code",
99 | "execution_count": 4,
100 | "metadata": {},
101 | "outputs": [],
102 | "source": [
103 | "engine.Close()"
104 | ]
105 | },
106 | {
107 | "cell_type": "code",
108 | "execution_count": null,
109 | "metadata": {},
110 | "outputs": [],
111 | "source": []
112 | }
113 | ],
114 | "metadata": {
115 | "kernelspec": {
116 | "display_name": "Python 3",
117 | "language": "python",
118 | "name": "python3"
119 | },
120 | "language_info": {
121 | "codemirror_mode": {
122 | "name": "ipython",
123 | "version": 3
124 | },
125 | "file_extension": ".py",
126 | "mimetype": "text/x-python",
127 | "name": "python",
128 | "nbconvert_exporter": "python",
129 | "pygments_lexer": "ipython3",
130 | "version": "3.8.2"
131 | }
132 | },
133 | "nbformat": 4,
134 | "nbformat_minor": 4
135 | }
136 |
--------------------------------------------------------------------------------
/example/diffusion2D_visualization_hl.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import IPython\n",
10 | "import numpy as np\n",
11 | "import matplotlib.pyplot as plt\n",
12 | "from time import sleep\n",
13 | "import adios2"
14 | ]
15 | },
16 | {
17 | "cell_type": "code",
18 | "execution_count": 2,
19 | "metadata": {},
20 | "outputs": [],
21 | "source": [
22 | "fh = adios2.open(\"diffusion2D.bp\", \"r\", \"adios2.xml\", \"readerIO\") # The \"file handler\" can also represent a SST stream."
23 | ]
24 | },
25 | {
26 | "cell_type": "code",
27 | "execution_count": 3,
28 | "metadata": {},
29 | "outputs": [
30 | {
31 | "data": {
32 | "text/plain": [
33 | "{}"
34 | ]
35 | },
36 | "execution_count": 3,
37 | "metadata": {},
38 | "output_type": "execute_result"
39 | }
40 | ],
41 | "source": [
42 | "fh.available_variables() # There are no available variables before the first step when using SST"
43 | ]
44 | },
45 | {
46 | "cell_type": "code",
47 | "execution_count": 4,
48 | "metadata": {},
49 | "outputs": [
50 | {
51 | "data": {
52 | "image/png": "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\n",
53 | "text/plain": [
54 | ""
55 | ]
56 | },
57 | "metadata": {
58 | "needs_background": "light"
59 | },
60 | "output_type": "display_data"
61 | }
62 | ],
63 | "source": [
64 | "nprocessed=0\n",
65 | "for step in fh: # Loop through the steps in the file/stream\n",
66 | " if nprocessed == 0:\n",
67 | " metadata = step.available_variables() # Extract meta data\n",
68 | " nxy_global_str = metadata['temperature']['Shape'] # ...\n",
69 | " T_type_str = metadata['temperature']['Type'] # ...\n",
70 | " nxy_global = list(map(int, nxy_global_str.split(','))) # ...\n",
71 | " T = np.zeros(nxy_global, dtype=T_type_str) # Prealocate memory for T using the meta data\n",
72 | " print(nxy_global, T_type_str); sleep(2)\n",
73 | " T = step.read(\"temperature\") # Read the current step of T (temperature)\n",
74 | " IPython.display.clear_output(wait=True) # Pass wait=True to wait until new ouput before clearing; this prevents flickering\n",
75 | " plt.title('Temperature at step ' + str(fh.current_step())) # Plot the temperature\n",
76 | " plt.contourf(T, 256, cmap=plt.cm.jet) # ...\n",
77 | " plt.colorbar() # ...\n",
78 | " plt.show() # ...\n",
79 | " nprocessed += 1"
80 | ]
81 | },
82 | {
83 | "cell_type": "code",
84 | "execution_count": 4,
85 | "metadata": {},
86 | "outputs": [],
87 | "source": [
88 | "fh.close()"
89 | ]
90 | },
91 | {
92 | "cell_type": "code",
93 | "execution_count": null,
94 | "metadata": {},
95 | "outputs": [],
96 | "source": []
97 | }
98 | ],
99 | "metadata": {
100 | "kernelspec": {
101 | "display_name": "Python 3",
102 | "language": "python",
103 | "name": "python3"
104 | },
105 | "language_info": {
106 | "codemirror_mode": {
107 | "name": "ipython",
108 | "version": 3
109 | },
110 | "file_extension": ".py",
111 | "mimetype": "text/x-python",
112 | "name": "python",
113 | "nbconvert_exporter": "python",
114 | "pygments_lexer": "ipython3",
115 | "version": "3.8.2"
116 | }
117 | },
118 | "nbformat": 4,
119 | "nbformat_minor": 4
120 | }
121 |
--------------------------------------------------------------------------------
/example/mpi_diffusion2D.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import time
3 | import matplotlib.pyplot as plt
4 | from mpi4py import MPI
5 | import adios2
6 |
7 | def update_halo(A, neighbors_x, neighbors_y):
8 | if neighbors_x[0] >= 0: # MPI_PROC_NULL?
9 | sendbuf = np.copy(A[1,:]).flatten()
10 | recvbuf = np.zeros(A.shape[1])
11 | comm.Send(sendbuf, neighbors_x[0], 0)
12 | comm.Recv(recvbuf, neighbors_x[0], 1)
13 | A[0,:] = recvbuf
14 | if neighbors_x[1] >= 0: # MPI_PROC_NULL?
15 | sendbuf = np.copy(A[-2,:]).flatten()
16 | recvbuf = np.zeros(A.shape[1])
17 | comm.Send(sendbuf, neighbors_x[1], 1)
18 | comm.Recv(recvbuf, neighbors_x[1], 0)
19 | A[-1,:] = recvbuf
20 | if neighbors_y[0] >= 0: # MPI_PROC_NULL?
21 | sendbuf = np.copy(A[:,1]).flatten()
22 | recvbuf = np.zeros(A.shape[0])
23 | comm.Send(sendbuf, neighbors_y[0], 2)
24 | comm.Recv(recvbuf, neighbors_y[0], 3)
25 | A[:,0] = recvbuf
26 | if neighbors_y[1] >= 0: # MPI_PROC_NULL?
27 | sendbuf = np.copy(A[:,-2]).flatten()
28 | recvbuf = np.zeros(A.shape[0])
29 | comm.Send(sendbuf, neighbors_y[1], 3)
30 | comm.Recv(recvbuf, neighbors_y[1], 2)
31 | A[:,-1] = recvbuf
32 |
33 | # MPI
34 | nprocs = MPI.COMM_WORLD.Get_size()
35 | dims = MPI.Compute_dims(nprocs, [0,0])
36 | comm = MPI.COMM_WORLD.Create_cart(dims)
37 | me = comm.Get_rank()
38 | coords = comm.Get_coords(me)
39 | neighbors_x = comm.Shift(direction = 0,disp=1)
40 | neighbors_y = comm.Shift(direction = 1,disp=1)
41 |
42 | # Physics
43 | lam = 1.0 # Thermal conductivity
44 | cp_min = 1.0 # Minimal heat capacity
45 | lx, ly = 10.0, 10.0 # Length of computational domain in dimension x and y
46 |
47 | # Numerics
48 | nx, ny = 128, 128 # Number of gridpoints in dimensions x and y
49 | nt = 10000 # Number of time steps
50 | nx_g = dims[0]*(nx-2) + 2 # Number of gridpoints of the global problem in dimension x
51 | ny_g = dims[1]*(ny-2) + 2 # ... in dimension y
52 | dx = lx/(nx_g-1) # Space step in dimension x
53 | dy = ly/(ny_g-1) # ... in dimension y
54 |
55 | # Array initializations
56 | T = np.zeros((nx, ny, ))
57 | Cp = np.zeros((nx, ny, ))
58 | dTedt = np.zeros((nx-2, ny-2))
59 | qTx = np.zeros((nx-1, ny-2))
60 | qTy = np.zeros((nx-2, ny-1))
61 |
62 | # Initial conditions (heat capacity and temperature with two Gaussian anomalies each)
63 | x0 = coords[0]*(nx-2)*dx
64 | y0 = coords[1]*(ny-2)*dy
65 | Cp[:] = cp_min + np.reshape([ 5*np.exp(-((x0 + ix*dx - lx/1.5)/1.0)**2 - ((y0 + iy*dy - ly/1.5)/1.0)**2) +
66 | 5*np.exp(-((x0 + ix*dx - lx/1.5)/1.0)**2 - ((y0 + iy*dy - ly/3.0)/1.0)**2) for ix in range(nx) for iy in range(ny)], (nx,ny))
67 | T[:] = np.reshape([100*np.exp(-((x0 + ix*dx - lx/3.0)/2.0)**2 - ((y0 + iy*dy - ly/2.0)/2.0)**2) +
68 | 50*np.exp(-((x0 + ix*dx - lx/1.5)/2.0)**2 - ((y0 + iy*dy - ly/2.0)/2.0)**2) for ix in range(nx) for iy in range(ny)], (nx,ny))
69 |
70 | # ADIOS2
71 | # (size and start of the local and global problem)
72 | nxy_nohalo = [nx-2, ny-2] # In ADIOS2 slang: count
73 | nxy_g_nohalo = [nx_g-2, ny_g-2] # ... shape
74 | start = [coords[0]*nxy_nohalo[0], coords[1]*nxy_nohalo[1]] # ... start
75 | T_nohalo = np.zeros(nxy_nohalo) # Prealocate array for writing temperature
76 | # (intialize ADIOS2, io, engine and define the variable temperature)
77 | adios = adios2.ADIOS(configFile="adios2.xml", comm=comm) # Use the configurations defined in "adios2.xml"...
78 | io = adios.DeclareIO("writerIO") # ... in the section "writerIO"
79 | T_id = io.DefineVariable("temperature", T, nxy_g_nohalo, start, nxy_nohalo, adios2.ConstantDims) # Define the variable "temperature"
80 | engine = io.Open("diffusion2D.bp", adios2.Mode.Write) # Open the file/stream "diffusion2D.bp"
81 |
82 | # Time loop
83 | nsteps = 50 # Number of times data is written during the simulation
84 | dt = min(dx,dy)**2*cp_min/lam/4.1 # Time step for the 2D Heat diffusion
85 | t = 0 # Initialize physical time
86 | tic = time.time() # Start measuring wall time
87 | for it in range(nt):
88 | if it % (nt/nsteps) == 0: # Write data only nsteps times
89 | T_nohalo[:] = T[1:-1, 1:-1] # Copy data removing the halo
90 | engine.BeginStep() # Begin ADIOS2 write step
91 | engine.Put(T_id, T_nohalo) # Add T (without halo) to variables for writing
92 | engine.EndStep() # End ADIOS2 write step (includes normally the actual writing of data)
93 | print('Time step ' + str(it) + '...')
94 | qTx[:] = -lam*np.diff(T[:,1:-1],axis=0)/dx # Fourier's law of heat conduction: q_x = -λ δT/δx
95 | qTy[:] = -lam*np.diff(T[1:-1,:],axis=1)/dy # ... q_y = -λ δT/δy
96 | dTedt[:] = 1.0/Cp[1:-1,1:-1]*(-np.diff(qTx,axis=0)/dx - # Conservation of energy: δT/δt = 1/cₚ(-δq_x/δx
97 | np.diff(qTy,axis=1)/dy) # - δq_y/dy)
98 | T[1:-1,1:-1] = T[1:-1,1:-1] + dt*dTedt # Update of temperature T_new = T_old + δT/δt
99 | t = t + dt # Elapsed physical time
100 | update_halo(T, neighbors_x, neighbors_y) # Update the halo of T
101 |
102 | engine.Close()
103 | print( "time : {0:.8f}".format( time.time()-tic) )
104 | print( 'Min. temperature %2.2e'%(np.min(T)) )
105 | print( 'Max. temperature %2.2e'%(np.max(T)) )
106 |
--------------------------------------------------------------------------------
/insitu_preview.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omlins/adios2-tutorial/12c3edff5025e5d6f431ec8ab623ce3d9ff330e0/insitu_preview.gif
--------------------------------------------------------------------------------
/parallel_io_webinar_with_ADIOS2_tutorial.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omlins/adios2-tutorial/12c3edff5025e5d6f431ec8ab623ce3d9ff330e0/parallel_io_webinar_with_ADIOS2_tutorial.pdf
--------------------------------------------------------------------------------