Source code for tecplot.data.save

import logging

from six import string_types

from ..tecutil import _tecutil
from ..constant import *
from ..exception import *
from .. import layout, macro, tecutil
from ..tecutil import IndexSet, lock, sv


log = logging.getLogger(__name__)


@lock()
def _save_tecplot(binary, frame, dataset, filename, include_text, include_geom,
                  include_data, include_data_share_linkage,
                  include_autogen_face_neighbors, use_point_format,
                  associate_with_layout, zones, variables, precision, version):
    if __debug__:
        if not isinstance(filename, string_types):
            raise TecplotTypeError('Filename must be a string')
        if not isinstance(version, (BinaryFileVersion, type(None))):
            raise TecplotTypeError('Version must be of type BinaryFileVersion')

    if dataset is None:
        if frame is None:
            frame = layout.active_frame()
    elif frame is None:
        frame = dataset.frame
    elif frame.dataset != dataset:
        msg = ('Input dataset must be attached to the input Frame: {} != {}'.
               format(repr(frame.dataset), repr(dataset)))
        raise TecplotValueError(msg)

    with frame.activated():
        with tecutil.ArgList() as arglist:
            alloc_list = []
            arglist[sv.FNAME] = filename
            arglist[sv.BINARY] = binary

            if zones is not None:
                s = IndexSet(zones)
                alloc_list.append(s)
                arglist[sv.ZONELIST] = s

            if variables is not None:
                s = IndexSet(variables)
                alloc_list.append(s)
                arglist[sv.VARLIST] = s

            arglist[sv.INCLUDETEXT] = include_text
            arglist[sv.INCLUDEGEOM] = include_geom
            arglist[sv.INCLUDEDATA] = include_data
            arglist[sv.INCLUDEDATASHARELINKAGE] = include_data_share_linkage
            arglist[sv.INCLUDEAUTOGENFACENEIGHBORS] = \
                include_autogen_face_neighbors
            arglist[sv.ASSOCIATELAYOUTWITHDATAFILE] = associate_with_layout
            arglist[sv.TECPLOTVERSIONTOWRITE] = version
            arglist[sv.PRECISION] = precision
            arglist[sv.USEPOINTFORMAT] = use_point_format

            try:
                if not _tecutil.DataSetWriteX(arglist):
                    raise TecplotSystemError()
            finally:
                for a in alloc_list:
                    a.dealloc()

        return frame.dataset


[docs]def save_tecplot_ascii(filename, frame=None, dataset=None, zones=None, variables=None, include_text=None, precision=None, include_geom=None, include_data=None, include_data_share_linkage=None, include_autogen_face_neighbors=None, use_point_format=None): """Write Tecplot ASCII data file. Parameters: filename (`string <str>`): Name of the data file to write. (See note below conerning absolute and relative paths.) frame (`Frame`, optional): The `Frame` which holds the `Dataset` to be written. If this option and *dataset* are both `None`, the currently active `Frame` is used. (default: `None`) dataset (`Dataset`, optional): The `Dataset` to write out. If this and *frame* are both `None`, the `Dataset` of the currently active `Frame` is used. (default: `None`) include_text (`boolean <bool>`, optional): Write out all text, geometries and custom labels. (default: `True`) include_geom (`boolean <bool>`, optional): Write out all geometries. (default: `True`) include_data (`boolean <bool>`, optional): Write out the data. Set this to `False` if you only want to write out annotations. (default: `True`) include_data_share_linkage (`boolean <bool>`, optional): Conserve space and write the variable and connectivity linkage wherever possible. If `False`, this will write out all data, losing the connectivity sharing linkage for future dataset reads of the file. (default: `True`) include_autogen_face_neighbors (`boolean <bool>`, optional): Save the face neighbor connectivity. This may produce very large data files. (default: `False`) use_point_format (`boolean <bool>`, optional): Write out point format, otherwise use block format. (default: `False`) zones (`list` of `Zones <data_access>`, optional): `Zones <data_access>` to write out. Use `None` to write out all `Zones <data_access>`. (default: `None`) variables (`list` of `Variables <Variable>`, optional): `Variables <Variable>` to write out. Use `None` to write out all `Variables <Variable>`. (default: `None`) precision (`integer <int>`, optional): ASCII decimal precision to use. (default: 12) Returns: `Dataset`: The `Dataset` read from when saving. Raises: `TecplotSystemError` `TecplotLogicError` .. note:: **Absolute and relative paths with PyTecplot** Unless file paths are absolute, saving and loading files will be relative to the current working directory of the parent process. This is different when running the PyTecplot script in batch mode and when running in connected mode with `tecplot.session.connect()`. In batch mode, paths will be relative to Python's current working directory as obtained by :func:`os.getcwd()`. When connected to an instance of Tecplot 360, paths will be relative to Tecplot 360's' start-up folder which is typically the Tecplot 360 installation "bin" folder. Example: In this example, we load sample data and save the data in Tecplot ASCII format. .. code-block:: python :emphasize-lines: 12-14 from os import path import tecplot examples_directory = tecplot.session.tecplot_examples_directory() infile = path.join(examples_directory, 'OneraM6wing', 'OneraM6_SU2_RANS.plt') dataset = tecplot.data.load_tecplot(infile) variables_to_save = [dataset.variable(V) for V in ('x','y','z','Pressure_Coefficient')] zone_to_save = dataset.zone('WingSurface') # write data out to an ascii file tecplot.data.save_tecplot_ascii('wing.dat', dataset=dataset, variables=variables_to_save, zones=[zone_to_save]) """ return _save_tecplot( binary=False, frame=frame, dataset=dataset, filename=filename, include_text=include_text, include_geom=include_geom, include_data=include_data, include_data_share_linkage=include_data_share_linkage, include_autogen_face_neighbors=include_autogen_face_neighbors, use_point_format=use_point_format, associate_with_layout=None, precision=precision, zones=zones, variables=variables, version=None)
[docs]def save_tecplot_plt(filename, frame=None, dataset=None, zones=None, variables=None, version=None, include_text=None, include_geom=None, include_data=None, include_data_share_linkage=None, include_autogen_face_neighbors=None, associate_with_layout=None): """Write Tecplot binary PLT data file. Parameters: filename (`string <str>`): Name of the data file to write. (See note below conerning absolute and relative paths.) frame (`Frame`, optional): The `Frame` which holds the `Dataset` to be written. If this option and *dataset* are both `None`, the currently active `Frame` is used. (default: `None`) dataset (`Dataset`, optional): The `Dataset` to write out. If this and *frame* are both `None`, the `Dataset` of the currently active `Frame` is used. (default: `None`) zones (`list` of `Zones <data_access>`, optional): `Zones <data_access>` to write out. If `None`, all `Zones <data_access>` will be saved. variables (`list` of `Variables <Variable>`, optional): `Variables <Variable>` to write out. If `None`, all `Variables <Variable>` will be saved. include_text (`boolean <bool>`, optional): Write out all text, geometries and custom labels. (default: `True`) include_geom (`boolean <bool>`, optional): Write out all geometries. (default: `True`) include_data (`boolean <bool>`, optional): Write out the data. Set this to `False` if you only want to write out annotations. (default: `True`) include_data_share_linkage (`boolean <bool>`, optional): Conserve space and write the variable and connectivity linkage wherever possible. If `False`, this will write out all data, losing the connectivity sharing linkage for future dataset reads of the file. (default: `True`) include_autogen_face_neighbors (`boolean <bool>`, optional): Save the face neighbor connectivity. This may produce very large data files. (default: `False`) associate_with_layout (`boolean <bool>`, optional): Associate this data file with the current layout. Set to `False` to write the datafile without modifying Tecplot's current data file to layout association. If *version* is set to anything other than `BinaryFileVersion.Current`, this association is not possible, and this parameter will be ignored. (default: `True`) version (`BinaryFileVersion`, optional): Specifies the file version to write. Note that some data may be excluded from the file if it cannot be supported in the specified version. Possible values are: `Tecplot2006`, `Tecplot2008`, `Tecplot2009` and `BinaryFileVersion.Current`. (default: `BinaryFileVersion.Current`) Returns: `Dataset`: The `Dataset` read from when saving. Raises: `TecplotSystemError` `TecplotLogicError` .. note:: **Absolute and relative paths with PyTecplot** Unless file paths are absolute, saving and loading files will be relative to the current working directory of the parent process. This is different when running the PyTecplot script in batch mode and when running in connected mode with `tecplot.session.connect()`. In batch mode, paths will be relative to Python's current working directory as obtained by :func:`os.getcwd()`. When connected to an instance of Tecplot 360, paths will be relative to Tecplot 360's' start-up folder which is typically the Tecplot 360 installation "bin" folder. Example: In this example, we load sample data and save the data in Tecplot binary PLT format. .. code-block:: python :emphasize-lines: 13-15 from os import path import tecplot examples_directory = tecplot.session.tecplot_examples_directory() infile = path.join(examples_directory, 'OneraM6wing', 'OneraM6_SU2_RANS.plt') dataset = tecplot.data.load_tecplot(infile) variables_to_save = [dataset.variable(V) for V in ('x', 'y', 'z', 'Pressure_Coefficient')] zone_to_save = dataset.zone('WingSurface') # write data out to a binary file tecplot.data.save_tecplot_plt('wing.plt', dataset=dataset, variables=variables_to_save, zones=[zone_to_save]) """ return _save_tecplot( binary=True, frame=frame, dataset=dataset, filename=filename, include_text=include_text, include_geom=include_geom, include_data=include_data, include_data_share_linkage=include_data_share_linkage, include_autogen_face_neighbors=include_autogen_face_neighbors, use_point_format=None, associate_with_layout=associate_with_layout, precision=None, zones=zones, variables=variables, version=version)
[docs]def save_tecplot_szl(filename, frame=None, dataset=None): """Write Tecplot SZL data file. Parameters: filename (`string <str>`): Name of the data file to write. (See note below conerning absolute and relative paths.) frame (`Frame`, optional): The `Frame` which holds the `Dataset` to be written. If this option and *dataset* are both `None`, the currently active `Frame` is used. (default: `None`) dataset (`Dataset`, optional): The `Dataset` to write out. If this and *frame* are both `None`, the `Dataset` of the currently active `Frame` is used. (default: `None`) Returns: `Dataset`: The `Dataset` read from when saving. .. note:: **Absolute and relative paths with PyTecplot** Unless file paths are absolute, saving and loading files will be relative to the current working directory of the parent process. This is different when running the PyTecplot script in batch mode and when running in connected mode with `tecplot.session.connect()`. In batch mode, paths will be relative to Python's current working directory as obtained by :func:`os.getcwd()`. When connected to an instance of Tecplot 360, paths will be relative to Tecplot 360's' start-up folder which is typically the Tecplot 360 installation "bin" folder. Example: In this example, we load sample data and save it in Tecplot SZL format. .. code-block:: python :emphasize-lines: 7 from os import path import tecplot examples_directory = tecplot.session.tecplot_examples_directory() infile = path.join(examples_directory, 'OneraM6wing', 'OneraM6_SU2_RANS.plt') dataset = tecplot.data.load_tecplot(infile) tecplot.data.save_tecplot_szl('wing.szplt') """ if dataset is None: if frame is None: frame = layout.active_frame() elif frame is None: frame = dataset.frame elif frame.dataset != dataset: msg = ('Input dataset must be attached to the input Frame: {} != {}'. format(repr(frame.dataset), repr(dataset))) raise TecplotValueError(msg) with frame.activated(): macro.execute_extended_command( 'Tecplot Subzone Data Tools', 'WRITEDATASET FILENAME="{}"'.format(filename)) return frame.dataset