|
| 1 | +#!/usr/bin/env python3 |
1 | 2 | import vtk |
2 | 3 | from matplotlib import pyplot as plt |
3 | 4 | import numpy as np |
| 5 | +import os |
4 | 6 |
|
5 | 7 |
|
6 | 8 | def vtk_to_dict(case): |
7 | | - vtkFileName = "solid-{}/precice-exports/Fluid-Mesh-Solid.dt100.vtk".format(case) |
| 9 | + vtkFileName = "solid-{}/precice-exports/Fluid-Mesh-Solid.dt100.vtu".format( |
| 10 | + case) |
| 11 | + if not os.path.exists(vtkFileName): |
| 12 | + print("No file found for " + vtkFileName) |
| 13 | + return {} # return empty dict if file not found |
| 14 | + |
8 | 15 | # read the vtk file as an unstructured grid |
9 | | - reader = vtk.vtkUnstructuredGridReader() |
| 16 | + reader = vtk.vtkXMLUnstructuredGridReader() |
10 | 17 | reader.SetFileName(vtkFileName) |
11 | | - reader.ReadAllVectorsOn() |
12 | | - reader.ReadAllScalarsOn() |
13 | 18 | reader.Update() |
14 | 19 |
|
15 | 20 | # obtain the data |
16 | 21 | data = reader.GetOutput() |
17 | 22 | n_data = data.GetPointData().GetNumberOfTuples() |
18 | 23 |
|
19 | | - name = "Temperature" |
20 | | - data_names = [] |
21 | | - i = 0 |
22 | | - max_i = data.GetPointData().GetNumberOfArrays() |
23 | | - while i < max_i: |
24 | | - this_data_name = data.GetPointData().GetArray(i).GetName() |
25 | | - data_names.append(this_data_name) |
26 | | - if (this_data_name == name): |
27 | | - data_id = i |
28 | | - break |
29 | | - i += 1 |
30 | | - |
31 | 24 | data_dict = {} |
32 | 25 |
|
33 | | - if not data_id: |
34 | | - raise Exception( |
35 | | - "For file {} name {} not found. Only the following names are available: {}. " |
36 | | - "Aborting!".format(vtkFileName, name, data_names)) |
37 | 26 | for i in range(n_data): |
38 | | - data_dict[data.GetPoint(i)] = data.GetPointData().GetArray(data_id).GetValue(i) |
39 | | - |
| 27 | + data_dict[data.GetPoint(i)] = data.GetPointData().GetArray( |
| 28 | + "Temperature").GetValue(i) |
40 | 29 | return data_dict |
41 | 30 |
|
42 | 31 |
|
43 | | -cases = [] |
44 | | -cases.append('fenics') |
45 | | -cases.append('openfoam') |
46 | | -cases.append('nutils') |
47 | | -cases.append('dunefem') |
| 32 | +def main(): |
| 33 | + case_labels = { |
| 34 | + 'fenics': 'Fluid-FEniCS', |
| 35 | + 'openfoam': 'Fluid-OpenFOAM', |
| 36 | + 'nutils': 'Fluid-Nutils', |
| 37 | + 'dunefem': 'Fluid-DuneFem'} |
| 38 | + styles = [':', '-', '--'] |
| 39 | + colors = ['r', 'b', 'g', 'k'] |
| 40 | + |
| 41 | + for i, case in enumerate(case_labels.keys()): |
| 42 | + case_data = vtk_to_dict(case) |
| 43 | + if not case_data: |
| 44 | + continue |
| 45 | + x, t = [p[0] for p in case_data.keys()], np.array( |
| 46 | + list(case_data.values())) |
| 47 | + |
| 48 | + # sort by x |
| 49 | + combined = sorted(zip(x, t)) |
| 50 | + x, t = zip(*combined) |
| 51 | + x = np.array(x) |
| 52 | + t = np.array(t) |
| 53 | + |
| 54 | + theta = (t - 300) / (310 - 300) |
| 55 | + plt.plot(x, theta, colors[i % 4] + styles[i % |
| 56 | + 3], label=case_labels[case]) |
48 | 57 |
|
49 | | -case_labels = { |
50 | | - 'fenics': 'OpenFOAM-FEniCS', |
51 | | - 'openfoam': 'OpenFOAM-OpenFOAM', |
52 | | - 'nutils': 'OpenFOAM-Nutils', |
53 | | - 'dunefem': 'OpenFOAM-DuneFem'} |
54 | | -styles = [':', '-', '--'] |
55 | | -colors = ['r', 'b', 'g', 'k'] |
56 | | -i = 0 |
| 58 | + plt.ylabel("Theta") |
| 59 | + plt.xlabel("x-coordinate along coupling interface") |
| 60 | + plt.legend() |
| 61 | + plt.show() |
57 | 62 |
|
58 | | -for case in cases: |
59 | | - case_data = vtk_to_dict(case) |
60 | | - x, t = [p[0] for p in case_data.keys()], np.array(list(case_data.values())) |
61 | | - theta = (t - 300) / (310 - 300) |
62 | | - plt.plot(x, theta, colors[i % 4] + styles[i % 3], label=case_labels[case]) |
63 | | - i += 1 |
64 | 63 |
|
65 | | -plt.ylabel("Theta") |
66 | | -plt.xlabel("x-coordinate along coupling interface") |
67 | | -plt.legend() |
68 | | -plt.show() |
| 64 | +if __name__ == '__main__': |
| 65 | + main() |
0 commit comments