Skip to content

Exporter

Exporter Module

This module provides functionality to export simulation results.

Classes: Exporter: Class for exporting simulation results. VTKFieldExporter: Class for exporting field data to VTK files. ScalarExporter: Class for exporting scalar data to CSV files.

Exporter

Class for exporting simulation results.

This class manages exporting simulation results, including field data and scalar data (energies, displacement probes, and forces).

Parameters:

Name Type Description Default
mesh Mesh

The mesh used in the simulation.

required
functions_to_export list of dolfinx.Function

List of functions to export.

required
scalar_data

Dictionary containing the scalar data to export (energies, reaction forces, ...).

required
probes dict

Dictionary containing probe information.

required

Attributes:

Name Type Description
field_exporter VTKFieldExporter

Field exporter object.

scalar_exporter ScalarExporter

Scalar exporter object.

Source code in src/fragma/exporter.py
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
class Exporter:
    """
    Class for exporting simulation results.

    This class manages exporting simulation results, including field data and scalar data (energies, displacement probes, and forces).

    Parameters
    ----------
    mesh : dolfinx.Mesh
        The mesh used in the simulation.
    functions_to_export : list of dolfinx.Function
        List of functions to export.
    scalar_data: dict
        Dictionary containing the scalar data to export (energies, reaction forces, ...).
    probes : dict
        Dictionary containing probe information.

    Attributes
    ----------
    field_exporter : VTKFieldExporter
        Field exporter object.
    scalar_exporter : ScalarExporter
        Scalar exporter object.
    """

    def __init__(self, mesh, functions_to_export, scalar_data, probes):
        """
        Initialize the Exporter.

        Parameters
        ----------
        mesh : dolfinx.Mesh
            The mesh used in the simulation.
        functions_to_export : list of dolfinx.Function
            List of functions to export.
        scalar_data: dict
            Dictionary containing the scalar data to export (energies, reaction forces, ...).
        probes : dict
            Dictionary containing probe information.
        """
        # Create the export directory
        results_folder = Path("results")
        results_folder.mkdir(exist_ok=True, parents=True)
        # Create the VTKFieldExporter
        self.field_exporter = VTKFieldExporter(
            mesh, functions_to_export, results_folder
        )
        # Create the probe exporter
        self.scalar_exporter = ScalarExporter(probes, scalar_data, results_folder)

    def export(self, t):
        """
        Export simulation results.

        This method exports simulation results to VTK and CSV formats at a given time.

        Parameters
        ----------
        t : float
            Current time.
        """
        # Run the field exporter
        self.field_exporter.export(t)
        # Run the scalar exporter
        self.scalar_exporter.export(t)

    def end(self):
        """Finalize exporting.

        This method finalizes the export process by closing any open files.
        """
        # End the probe exporter
        self.scalar_exporter.end()
        # End the field exporter
        self.field_exporter.end()

__init__(mesh, functions_to_export, scalar_data, probes)

Initialize the Exporter.

Parameters:

Name Type Description Default
mesh Mesh

The mesh used in the simulation.

required
functions_to_export list of dolfinx.Function

List of functions to export.

required
scalar_data

Dictionary containing the scalar data to export (energies, reaction forces, ...).

required
probes dict

Dictionary containing probe information.

required
Source code in src/fragma/exporter.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
def __init__(self, mesh, functions_to_export, scalar_data, probes):
    """
    Initialize the Exporter.

    Parameters
    ----------
    mesh : dolfinx.Mesh
        The mesh used in the simulation.
    functions_to_export : list of dolfinx.Function
        List of functions to export.
    scalar_data: dict
        Dictionary containing the scalar data to export (energies, reaction forces, ...).
    probes : dict
        Dictionary containing probe information.
    """
    # Create the export directory
    results_folder = Path("results")
    results_folder.mkdir(exist_ok=True, parents=True)
    # Create the VTKFieldExporter
    self.field_exporter = VTKFieldExporter(
        mesh, functions_to_export, results_folder
    )
    # Create the probe exporter
    self.scalar_exporter = ScalarExporter(probes, scalar_data, results_folder)

end()

Finalize exporting.

This method finalizes the export process by closing any open files.

Source code in src/fragma/exporter.py
85
86
87
88
89
90
91
92
93
def end(self):
    """Finalize exporting.

    This method finalizes the export process by closing any open files.
    """
    # End the probe exporter
    self.scalar_exporter.end()
    # End the field exporter
    self.field_exporter.end()

export(t)

Export simulation results.

This method exports simulation results to VTK and CSV formats at a given time.

Parameters:

Name Type Description Default
t float

Current time.

required
Source code in src/fragma/exporter.py
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
def export(self, t):
    """
    Export simulation results.

    This method exports simulation results to VTK and CSV formats at a given time.

    Parameters
    ----------
    t : float
        Current time.
    """
    # Run the field exporter
    self.field_exporter.export(t)
    # Run the scalar exporter
    self.scalar_exporter.export(t)

ScalarExporter

Class for exporting scalar data to CSV files.

This class exports scalar data to CSV files.

Parameters:

Name Type Description Default
probes dict

Dictionary containing probes for simulation results.

required
scalar_data

Dictionary containing the scalar data to export (energies, reaction forces, ...).

required
results_folder Path

Path to the folder where results will be stored.

required

Attributes:

Name Type Description
probes dict

Dictionary containing probes for simulation results.

scalar_data dict

Dictionary containing the scalar data to export (energies, reaction forces, ...).

csv_file file

CSV file for storing probe data.

writer writer

CSV writer object.

Source code in src/fragma/exporter.py
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
class ScalarExporter:
    """
    Class for exporting scalar data to CSV files.

    This class exports scalar data to CSV files.

    Parameters
    ----------
    probes : dict
        Dictionary containing probes for simulation results.
    scalar_data: dict
        Dictionary containing the scalar data to export (energies, reaction forces, ...).
    results_folder : Path
        Path to the folder where results will be stored.

    Attributes
    ----------
    probes : dict
        Dictionary containing probes for simulation results.
    scalar_data: dict
        Dictionary containing the scalar data to export (energies, reaction forces, ...).
    csv_file : file
        CSV file for storing probe data.
    writer : csv.writer
        CSV writer object.
    """

    def __init__(self, probes, scalar_data, results_folder: Path):
        """
        Initialize the ScalarExporter.

        Parameters
        ----------
        probes : dict
            Dictionary containing probes for simulation results.
        scalar_data: dict
            Dictionary containing the scalar data to export (energies, reaction forces, ...).
        results_folder : Path
            Path to the folder where results will be stored.
        """
        # Store the dictionaries for scalar quantities
        self.probes = probes
        self.scalar_data = scalar_data
        # Generate the CSV file
        self.csv_file = open(results_folder / "probes.csv", "w")
        # Create the csv writer
        self.writer = csv.writer(self.csv_file)
        # Initialize the header
        header = []
        # Add the scalar data
        for name, _ in scalar_data.items():
            header.append(name)
        # Add the probes
        for func_name, probe in probes.items():
            # Iterate through the probes of the function
            for i, x in enumerate(probe.xs):
                for comp, val in enumerate(probe.vals[i]):
                    # Set the name of the row
                    header.append(f"{func_name} {comp+1} {x}")
        # Write the header
        self.writer.writerow(header)

    def export(self, t: float):
        """
        Export probe data to CSV files.

        This method exports probe data to CSV files for a given time.

        Parameters
        ----------
        t : float
            Current time.
        """
        # Initialize the row
        row = []
        # Add the scalar data
        for _, scalar in self.scalar_data.items():
            row.append(scalar)
        # Add the probes
        for func_name, probe in self.probes.items():
            # Iterate through the probes of the function
            for i, _ in enumerate(probe.xs):
                for val in probe.vals[i]:
                    # Add the value to the row
                    row.append(val)
        # Write the row
        self.writer.writerow(row)
        # Flush the results
        self.csv_file.flush()

    def end(self):
        """
        Finalize the export process.

        This method closes any open files.
        """
        self.csv_file.close()

__init__(probes, scalar_data, results_folder)

Initialize the ScalarExporter.

Parameters:

Name Type Description Default
probes dict

Dictionary containing probes for simulation results.

required
scalar_data

Dictionary containing the scalar data to export (energies, reaction forces, ...).

required
results_folder Path

Path to the folder where results will be stored.

required
Source code in src/fragma/exporter.py
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
def __init__(self, probes, scalar_data, results_folder: Path):
    """
    Initialize the ScalarExporter.

    Parameters
    ----------
    probes : dict
        Dictionary containing probes for simulation results.
    scalar_data: dict
        Dictionary containing the scalar data to export (energies, reaction forces, ...).
    results_folder : Path
        Path to the folder where results will be stored.
    """
    # Store the dictionaries for scalar quantities
    self.probes = probes
    self.scalar_data = scalar_data
    # Generate the CSV file
    self.csv_file = open(results_folder / "probes.csv", "w")
    # Create the csv writer
    self.writer = csv.writer(self.csv_file)
    # Initialize the header
    header = []
    # Add the scalar data
    for name, _ in scalar_data.items():
        header.append(name)
    # Add the probes
    for func_name, probe in probes.items():
        # Iterate through the probes of the function
        for i, x in enumerate(probe.xs):
            for comp, val in enumerate(probe.vals[i]):
                # Set the name of the row
                header.append(f"{func_name} {comp+1} {x}")
    # Write the header
    self.writer.writerow(header)

end()

Finalize the export process.

This method closes any open files.

Source code in src/fragma/exporter.py
262
263
264
265
266
267
268
def end(self):
    """
    Finalize the export process.

    This method closes any open files.
    """
    self.csv_file.close()

export(t)

Export probe data to CSV files.

This method exports probe data to CSV files for a given time.

Parameters:

Name Type Description Default
t float

Current time.

required
Source code in src/fragma/exporter.py
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
def export(self, t: float):
    """
    Export probe data to CSV files.

    This method exports probe data to CSV files for a given time.

    Parameters
    ----------
    t : float
        Current time.
    """
    # Initialize the row
    row = []
    # Add the scalar data
    for _, scalar in self.scalar_data.items():
        row.append(scalar)
    # Add the probes
    for func_name, probe in self.probes.items():
        # Iterate through the probes of the function
        for i, _ in enumerate(probe.xs):
            for val in probe.vals[i]:
                # Add the value to the row
                row.append(val)
    # Write the row
    self.writer.writerow(row)
    # Flush the results
    self.csv_file.flush()

VTKFieldExporter

Class for exporting field data to VTK files.

This class exports field data to VTK files.

Parameters:

Name Type Description Default
mesh Mesh

The mesh representing the domain.

required
functions_to_export list of dolfinx.Function

List of functions to export.

required
results_folder Path

Path to the folder where results will be stored.

required

Attributes:

Name Type Description
functions_to_export list of dolfinx.Function

List of functions to export.

files list of io.VTKFile

List of VTK files.

Source code in src/fragma/exporter.py
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
class VTKFieldExporter:
    """
    Class for exporting field data to VTK files.

    This class exports field data to VTK files.

    Parameters
    ----------
    mesh : dolfinx.Mesh
        The mesh representing the domain.
    functions_to_export : list of dolfinx.Function
        List of functions to export.
    results_folder : Path
        Path to the folder where results will be stored.

    Attributes
    ----------
    functions_to_export : list of dolfinx.Function
        List of functions to export.
    files : list of io.VTKFile
        List of VTK files.
    """

    def __init__(self, mesh, functions_to_export, results_folder: Path):
        """
        Initialize the VTKFieldExporter.

        Parameters
        ----------
        mesh : dolfinx.Mesh
            The mesh representing the domain.
        functions_to_export : list of dolfinx.Function
            List of functions to export.
        results_folder : Path
            Path to the folder where results will be stored.
        """
        print("Warning: Using VTK exporter. This exporter might be slow.")
        # Store the functions to export
        self.functions_to_export = functions_to_export
        # Generate the files
        self.files = []
        for function in functions_to_export:
            # Set the file name
            file_name = results_folder / function.name
            # Create the VTK file
            new_file = io.VTKFile(mesh.comm, file_name.with_suffix(".pvd"), "w")
            # Add the new file to the list
            self.files.append(new_file)

    def export(self, t):
        """
        Export field data.

        This method exports field data to VTK files.

        Parameters
        ----------
        t : float
            Current time.
        """
        # Write the function to the file
        for file, function in zip(self.files, self.functions_to_export):
            # Write the function into the file
            file.write_function(function, t)

    def end(self):
        """
        Finalize the export process.

        This method closes any open files.
        """
        # Close the file
        for file in self.files:
            file.close()

__init__(mesh, functions_to_export, results_folder)

Initialize the VTKFieldExporter.

Parameters:

Name Type Description Default
mesh Mesh

The mesh representing the domain.

required
functions_to_export list of dolfinx.Function

List of functions to export.

required
results_folder Path

Path to the folder where results will be stored.

required
Source code in src/fragma/exporter.py
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
def __init__(self, mesh, functions_to_export, results_folder: Path):
    """
    Initialize the VTKFieldExporter.

    Parameters
    ----------
    mesh : dolfinx.Mesh
        The mesh representing the domain.
    functions_to_export : list of dolfinx.Function
        List of functions to export.
    results_folder : Path
        Path to the folder where results will be stored.
    """
    print("Warning: Using VTK exporter. This exporter might be slow.")
    # Store the functions to export
    self.functions_to_export = functions_to_export
    # Generate the files
    self.files = []
    for function in functions_to_export:
        # Set the file name
        file_name = results_folder / function.name
        # Create the VTK file
        new_file = io.VTKFile(mesh.comm, file_name.with_suffix(".pvd"), "w")
        # Add the new file to the list
        self.files.append(new_file)

end()

Finalize the export process.

This method closes any open files.

Source code in src/fragma/exporter.py
161
162
163
164
165
166
167
168
169
def end(self):
    """
    Finalize the export process.

    This method closes any open files.
    """
    # Close the file
    for file in self.files:
        file.close()

export(t)

Export field data.

This method exports field data to VTK files.

Parameters:

Name Type Description Default
t float

Current time.

required
Source code in src/fragma/exporter.py
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
def export(self, t):
    """
    Export field data.

    This method exports field data to VTK files.

    Parameters
    ----------
    t : float
        Current time.
    """
    # Write the function to the file
    for file, function in zip(self.files, self.functions_to_export):
        # Write the function into the file
        file.write_function(function, t)