Reader¶
Proxy Class to read files.
Parameters¶
- base:
Base
Base in which the data read should be added. If this key is not used, the reader will create a new Base object, else the input base will be modified.
example: If no key base:
reader = antares.Reader(<format>) ... base = reader.read()
base will contain the data read from the file.
example: If base is not None:
reader = antares.Reader(<format>) reader['base'] = input_base ... reader.read()
input_base will be complemented with the data read from the file.
- base:
- filename: str
The name of the file(s). To match several files, two tags can be used:
<zone>
, to match the names of the zones and,<instant>
, to match the names of the instants. This tag can appear more than once.
example: If the files are named:
Visu_4000_0000_t00, Visu_4000_0001_t00, Visu_4000_0000_t01, Visu_4000_0001_t01
then the key filename could be
Visu_4000_<zone>_<instant>
.
- shared: bool, default= False
if True, the data read are added to the shared Instant. The tag
<instant>
can not be used in the filename key if this key is True.
- topology_file: str
If one wants to attach topological information to the base, a file giving the topology must be read.
Warning
The name of the zone read must match the name of the topology_file blocks. This means that one might need to set the attribute zone_prefix. Moreover, the shape of the zones on the topology_file must match the shape of the numpy arrays of each zone/instant located at nodes (if any)
- topology_format: str, default= ‘elsa’
The format of the topology file.
- bndphys_file: str
To be used in combination with topology_file
- zone_prefix: str, default= ‘’
The prefix to add in front of the zone name.
- zone_suffix: str, default= ‘’
The suffix to add back of the zone name.
- zone_regex: str, default= ‘.*’
To interpret the zone name defined by the tag
<zone>
of the attribute filename, Antares uses regular expressions. Take a look at the regex module to properly change this argument.example: to match a 4-digit number.
reader['zone_regex'] = '\\\\d{4}'
- instant_regex: str or tuple(int, int) or tuple(int, int, int), default= ‘.*’
Same as zone_regex, but for
<instant>
tag. Only for python >= 2.7, if tuple, then the regex matches the interval between the first and the second integer. If given, the third integer corresponds to the number of digits, and may generate leading zeroes.’)example: (0, 3, 1)
- instant_step: int, default= 1
Take every instant_step file into account. This only works when tag
<instant>
or instant_regex represent data that can be ordered
- location: str in LOCATIONS, default= ‘node’
Location of the variables.
Main functions¶
- class antares.io.Reader.Reader(file_format=None, **kwargs)¶
Proxy class for file readers.
- __init__(file_format=None, **kwargs)¶
Create the Reader object.
- Parameters:
file_format (str) – the format of the file(s).
For each format below, the associated keys supplement the above shared settable keys.
Binary Tecplot¶
Description¶
Read files with tecplot binary format (v75, v112).
Parameters¶
- n_hbt: int, default= None
If one wants to read HBT/TSM files, put here the number of harmonics.
- shared_mesh: bool, default= False
True if the connectivity and the coordinates of nodes change from an instant to another.
Preconditions¶
Postconditions¶
The Tecplot ZoneTitle is used for the Antares zone name. Therefore, for an unstructured mesh, if two tecplot zones have the same ZoneTitle and the same StrandID, but different element types, this will lead to a single Antares zone in the output base.
The Tecplot title of the header section is set in Base.attrs
with the
key TecplotHeaderTitle.
The tecplot parameter FileType is set in Base.attrs
with the
key TecplotFileType.
(see also antares.io.writer.WriterTecplotBinary.WriterTecplotBinary
)
The entry Time is set in Instant.attrs
.
The value of this solution time is a 64-bit floating-point number.
Example¶
The following example shows how to read one file.
import antares
myr = antares.Reader('bin_tp')
myr['filename'] = 'file.plt'
base = myr.read()
The following example shows how to read one file per zone with the tag ‘<zone>’.
import antares
myr = antares.Reader('bin_tp')
myr['filename'] = 'file_<zone>.plt'
base = myr.read()
The following example shows how to read one file per zone per instant with the tags ‘<zone>’ and ‘<instant>’.
import antares
myr = antares.Reader('bin_tp')
myr['filename'] = 'file_<zone>_<instant>.plt'
base = myr.read()
ASCII Tecplot¶
Description¶
Read files with Tecplot ASCII format.
The lazy loading pattern is not available for this format.
Parameters¶
see Common Parameters from Reader Proxy.
Preconditions¶
This reader handles structured and unstructured mesh.
The DATA PACKING can be POINT or BLOCK.
Postconditions¶
Example¶
The following example shows how to read one file.
import antares
myr = antares.Reader('fmt_tp')
myr['filename'] = 'file.dat'
base = myr.read()
HDF CGNS¶
Description¶
Read files with HDF CGNS format.
This reader ‘hdf_cgns’ supports MPI parallelism.
Parameters¶
- bnd_filename: str
The name of the boundary file.
- base_name: str, default= None
Name of the node that has the CGNSBase_t label.
- rename_vars: bool, default= True
Rename CGNS variables with Antares names.
- split: str in [‘always’, ‘never’] or None, default= None
Tell whether to split unstructured zones or not.
None
let the reader decide automatically. Parallel Only.
- distribution: list(str) or None, default= None
In parallel, this parameter allows the user to impose the distribution of zones as a list of CGNS ‘blockname’. Each process should receive a different subset of names. All zones must be distributed. If no zones are given for one process, the value of this parameter should be an empty list ‘[]’. When this parameter is used, ‘split’ is not taken into account (unstructured zones are not splitted).
- instant_names: list(str) or None, default= None
List of FlowSolution_t names that will be stored in different instants. Setting this option prevents from reading the BaseIterativeData_t node.
example: instant_names = [‘FlowSolution#Init’] to read the FlowSolution_t data structure named ‘FlowSolution#Init’ in the file.
- polyhedra_support: bool, default= False
If True, Elements_t nodes of ElementType_t NGON_n and NFACE_n are stored as face-based connectivity. If False, those elements are stored as standard elements with vertex-based connectivity if allowed by the elements.
- follow_links: bool, default= False
If enabled, all CGNS links are followed, and corresponding CGNS nodes are read. Othewise, no CGNS links are taken into account.
- force_serial: bool, default= False
If enabled during a parallel execution, each compute core will read the filename independently as for a serial process.
- base_subregion:
Base
, default= None Base where to collect zone subregions. If None, subregions are appended in the output base as standard zones.
- base_subregion:
Preconditions¶
To use polyhedra_support, the ‘poly’ extension of Antares must be installed. The implementation of ‘polyhedra_support’ is limited to CGNS version < 3.4.0. ParentElements nodes of NGON_n and NFACE_n nodes are ignored.
The library ngon2elt may have to be generated during the antares installation process for reading face-based connectivity. Refer to installation of ngon2elt.
Postconditions¶
Reading the BaseIterativeData_t data structure:
The identifiers IterationValues and TimeValues are read.
This is only available when the option instant_names is not used.
The identifier IterationValues is preferentially used for the instant names.
If the identifier TimeValues is available, then the Instant
will hold the key ‘Time’ in its Instant.attrs
.
If the identifier IterationValues is available, then the Instant
will hold the key ‘Iteration’ in its Instant.attrs
.
Reading the ZoneIterativeData_t data structure: The identifier FlowSolutionPointers is read to get the solution field for each recorded time value or iteration. There is an implied one-to-one correspondence between each pointer and the associated TimeValues and/or IterationValues under BaseIterativeData_t.
Only one CGNS GridCoordinates_t data structure is read, and only cartesian coordinates.
Reading the FlowSolution_t data structure: If the symbol “#” is in the label name, what is next is called the suffix. If the suffix only contains digits, then the instant name is the suffix, else it is the global variable instant_name. If the label name only contains digits, then the instant name is this figure. Otherwise, the instant name is the global variable instant_name. If instant_names is set, then this sets the instant names.
When polyhedra_support is enabled, zone grid connectivities are not handled.
Reading the ZoneSubRegion_t data structure:
It is stored in a Zone
just as the Zone_t data structure.
Each antares zone coming from a ZoneSubRegion is associated with a family name.
It is then possible to separate ZSR zones from standard zones afterwards.
The name of the ZSR and the family is defined by a prefix ‘ZSR’, the name of the CGNS
ZoneSubRegion_t node, and a suffix that is the name of the zone including this ZSR, joined
by the character ‘_’.
Data from CGNS DataArray_t are stored in an Instant
named ‘0’ of the antares zone.
Example¶
The following example shows how to read one file.
import antares
myr = antares.Reader('hdf_cgns')
myr['filename'] = 'file.cgns'
base = myr.read()
- antares.io.reader.ReaderHdfCgns.get_base_node_names(filename)¶
returns the list of Base_t from a file.
- Parameters:
filename (str) – HDF CGNS filename
## Reading the list of Base_t from a file
import os
from antares.io.reader.ReaderHdfCgns import get_base_node_names
names = get_base_node_names('all_cut.cgns')
print(names)
HDF Antares¶
Description¶
Read files with antares HDF5 format.
Parameters¶
- n_hbt: int, default= None
If one wants to read HBT/TSM files, put here the number of harmonics.
- format:
str
in [‘2015’, ‘2022’], default= ‘2015’ The file format version.
format 2015: The zone/instant/variable ‘list_keys’ are read from h5 attrs.
format 2022: The zone/instant/variable ‘list_keys’ are read from h5 datasets.
- format:
Preconditions¶
Postconditions¶
Example¶
The following example shows how to read one file.
import antares
myr = antares.Reader('hdf_antares')
myr['filename'] = 'file.hdf'
base = myr.read()
HDF LaBS¶
Description¶
Read files with HDF Labs format.
Format from Lattice-Boltzmann solver LaBs or ProLB
Parameters¶
- velocity_components: list(str), default= [‘Vx’, ‘Vy’, ‘Vz’]
Velocity components stored in the instant.
- velocityRMS_components: list(str), default= [‘VxRMS’, ‘VyRMS’, ‘VzRMS’]
RMS components of the velocity vector stored in the instant.
- velocity_squared_components: list(str), default= [‘Vx2’, ‘Vy2’, ‘Vz2’]
Squared velocity components of the velocity vector stored in the instant.
- shared_mesh: bool, default= False
If True, then the connectivity and the coordinates of nodes are shared between all instants. The mesh is fixed during the simulation.
- Unknown_components: list(str), default= [‘UnknownX’, ‘UnknownY’, ‘UnknownZ’]
Unknown components found in the file. Writer need to be adapted.
Preconditions¶
Allowed elements: triangles and hexahedra.
Postconditions¶
Example¶
The following example shows how to read one file.
import antares
myr = antares.Reader('hdf_labs')
myr['filename'] = 'file.hdf'
base = myr.read()
VTK¶
VTK format.
Warning
dependency on VTK
Parameters¶
- coordinates: list(str)
Names of variables that define the mesh when it is not specified in the file.
- single_type: bool, default= False
Tell if the file contains only a unique type of elements for an unstructured grid.
CSV¶
Description¶
Read files with CSV (comma-separated values) format.
Parameters¶
- separator: str, default= ‘;’
Separator between numbers.
- cantera_avbp: bool, default= False
Specific for cantera_avbp format.
Preconditions¶
If any, the lines of the header must contain the name of variables separated by the separator string. Columns may have different sizes. Rows are composed of numbers (integer or floating-point) separated by the separator string.
Postconditions¶
Example¶
The following example shows how to read one file.
import antares
myr = antares.Reader('csv')
myr['filename'] = 'file.dat'
myr['separator'] = ','
base = myr.read()
Fluent¶
Description¶
Read Fluent files with Binary data.
The implementation is based on ANSYS Fluent Meshing User’s Guide Release 15.0 November 2013 and ANSYS Fluent Meshing User’s Guide Release 12.0 January 2009:
Parameters¶
- filename: str
The mesh or solution file name. If base is not given, then filename must be the mesh file. If base is given, then the filename must be the solution file. The mesh file must have the extension ‘.cas’ and the solution file must have the extension ‘.dat’.
- base: str, default= None
Input base used only if the mesh file has already been read.
- xfile: str, default= None
Path name of the file xfile.h. It is compulsory if a solution filename is given. This file can be found in the user’s Fluent installation.
Precondition¶
The reader does not support multi-instant data and ASCII data.
The reader only supports face-based connectivity.
The library ngon2elt has to be generated during the antares installation process. Refer to installation of ngon2elt.
Precondition¶
A grid connectivity is stored in a Boundary object as a regular physical boundary condition.
Examples¶
The following example shows how to only read the mesh file.
import antares
# read mesh only
myr = antares.Reader('fluent')
myr['filename'] = 'file.cas'
base = myr.read()
The following example shows how to read both mesh and solution files.
import antares
# read mesh
myr = antares.Reader('fluent')
myr['filename'] = 'mesh_path/mesh.cas'
base = myr.read()
# read solution
myr['base'] = base
myr['filename'] = 'solution_path/solution.dat'
myr['xfile'] = 'xfile_path/xfile.h'
base = myr.read()
PYCGNS¶
Description¶
Read in-memory pyCGNS objects.
Parameters¶
- object:
object
Source object to be read.
- object:
- polyhedra_support: bool, default= False
If enabled, Elements_t nodes of ElementType_t NGON_n and NFACE_n are stored as polyhedra. Otherwise, for cells allowing it, those elements are stored as canonical elements.
- base_subregion:
Base
, default= None Base where to collect zone subregions. If None, subregions are appended in the output base as standard zones.
- base_subregion:
- skip_solution: bool, default= False
If enabled, do not read FlowSolution data, read only geometric information.
Preconditions¶
Zones must be structured, or unstructured with face-based connectivities. Element-based connectivities are not read for unstructured zones.
To use polyhedra_support, the ‘poly’ extension of Antares must be installed. The implementation of ‘polyhedra_support’ is limited to CGNS version < 3.4.0. ParentElements nodes of NGON_n and NFACE_n nodes are ignored.
The library ngon2elt may have to be generated during the antares installation process for reading face-based connectivity. Refer to installation of ngon2elt.
Postconditions¶
Zone grids are stored in the shared instant. Zone solutions and BC data are stored in a unique instant named ‘0000’. BC data shall have the same geometric slicing as its parent boundary. Small CGNS parameter nodes (low memory usage) that are unknown to antares but that may be required for future applications are stored as is under antares attrs attribute of the bound object.
Reading the ZoneSubRegion_t data structure:
It is stored in a Zone
just as the Zone_t data structure if
base_subregion is None.
Each antares zone coming from a ZoneSubRegion is associated with a family name.
It is then possible to separate ZSR zones from standard zones afterwards.
The name of the ZSR and the family is defined by a prefix ‘ZSR’,
the name of the CGNS ZoneSubRegion_t node,
and a suffix that is the name of the zone including this ZSR, joined
by the character ‘_’.
Data from CGNS DataArray_t are stored in an Instant
named ‘0’ of
the antares zone.
Example¶
The following example shows how to read one object.
import antares
import CGNS.PAT.cgnskeywords as _ck
import CGNS.PAT.cgnsutils as _cu
import CGNS.MAP
tree, _, _ = CGNS.MAP.load('file.cgns')
cgns_bases = _cu.hasChildType(tree, _ck.CGNSBase_ts)
sp_reader = Reader('pycgns')
sp_reader['object'] = cgns_bases[0]
base = sp_reader.read()
HDF5 AVBP¶
Description¶
Read files from the AVBP code
More information on the format can be found here.
The root node of the hierarchical HDF5 data structure may contain groups, and groups may contain datasets.
Parameters¶
see Common Parameters from Reader Proxy.
- filename:
It is not possible to read a mesh file and at least one solution file in one shot (see example below).
- location:
Not used.
- groups_vars: list or tuple
Select subsets of groups and variables from the solution file.
example to read only some variables possibly stored under different groups:
groups_vars = ['rhou', 'rhov']
example to read ‘rhou’ and ‘rhov’ from group1, ‘pressure’ from group2, and all variables from group3:
groups_vars = (('group1', ['rhou', 'rhov']), ('group2', ['pressure']), 'group3')
Preconditions¶
If the group ‘Coordinates’ exists, then the file is considered to be an AVBP mesh file. If one group among [‘Additionals’, ‘GaseousPhase’, ‘RhoSpecies’, ‘Reactions’, ‘LiquidPhase’, ‘FictiveSpecies’, ‘Sparkignition’, ‘RealGas’, ‘LiquidPhase_ptcl’, ‘Parameters_ptcl’] exists, then the file is considered to be an AVBP solution file.
Postconditions¶
Mesh File:¶
If the option shared is set to True, then the instant is the shared instant of the zone, else the instant is a regular instant.
Coordinates x, y and z in 3-D only, are lazy loaded.
All variables in the group ‘Parameters’ are read, and set in the
Zone.attrs
.
Volume connectivities, Instant.connectivity
, are eager loaded.
All variables from the group ‘VertexData’ are lazy loaded. The name of variables
are stored in the Instant.attrs
to be able to separate mesh
data from solution data in the AVBP writer for example.
If the group ‘Boundary’ exists, then some Boundary
objects are created.
The number of objects is the size of the dataset ‘bnode_lidx’.
The name of boundaries are given by the dataset ‘PatchLabels’, otherwise they
are named ‘Patch<number>’.
Some datasets of the group ‘Boundary’ or groups at the root node are not used
by antares, but they are still stored in the Boundary.container
(for use in the AVBP writer for example). These groups are
[‘Periodicity’, ‘Patch’] and these datasets are
[‘PatchGeoType’, ‘Patch->area’, ‘bnode->normal’, ‘bnd_<elt_type>->face’,
‘bnd_<elt_type>->elem’].
All boundaries are gathered in a Family
named ‘Patches’.
Solution File:¶
If the group ‘Average’ exists, then the key ‘status’ is set in the
Instant.attrs
with the value ‘Average’ to be able to separate
average solution from instantaneous solution in the AVBP writer for example.
All datasets in all groups are read. If the shape of a dataset is equal to the
shape of the instant, then the dataset is stored as a variable in the instant,
else the dataset is stored in the Instant.attrs
.
Example¶
The following example shows how to read one mesh file in the shared instant, and to read a whole solution file.
import antares
myr = antares.Reader('hdf_avbp')
myr['filename'] = 'file.mesh.h5'
myr['shared'] = True
base = myr.read()
myr = antares.Reader('hdf_avbp')
myr['filename'] = 'sol_ite0001000.h5'
myr['base'] = base
base = myr.read()
The following example shows how to read some specific groups and datasets from a solution file.
myr = antares.Reader('hdf_avbp')
myr['filename'] = 'sol_ite0001000.h5'
myr['groups_vars'] = ('GaseousPhase', ('Additionals', ['pressure']),
'RhoSpecies')
myr['base'] = base
base = myr.read()
Lazy Loading Pattern¶
The Lazy Loading Design Pattern is applied to antares Readers to defer the storage of variables in numpy arrays until the point at which they are required. Therefore, this can save reading time and memory if all the variables do not have to be read from the file. The opposite of lazy loading is eager loading where all variables of a file are read at once.
If all variables have to be read, then the lazy loading may imply a reading time overhead. In that case, you can activate the File Cache System.