Source code for pygem.openfhandler

"""
Derived module from filehandler.py to handle OpenFOAM files.

.. warning::
    This module will be deprecated in next releases. Follow updates on
    https://github.com/mathLab for news about file handling. 
"""
import numpy as np
import pygem.filehandler as fh
import warnings
warnings.warn("This module will be deprecated in next releases", DeprecationWarning)


[docs]class OpenFoamHandler(fh.FileHandler): """ OpenFOAM mesh file handler class. :cvar string infile: name of the input file to be processed. :cvar string outfile: name of the output file where to write in. :cvar list extensions: extensions of the input/output files. It is equal to [''] since openFOAM files do not have extension. """ def __init__(self): super(OpenFoamHandler, self).__init__() self.extensions = ['']
[docs] def parse(self, filename): """ Method to parse the `filename`. It returns a matrix with all the coordinates. :param string filename: name of the input file. :return: mesh_points: it is a `n_points`-by-3 matrix containing the coordinates of the points of the mesh :rtype: numpy.ndarray .. todo:: - specify when it works """ self._check_filename_type(filename) self._check_extension(filename) self.infile = filename nrow = 0 i = 0 with open(self.infile, 'r') as input_file: for line in input_file: nrow += 1 if nrow == 19: n_points = int(line) mesh_points = np.zeros(shape=(n_points, 3)) if 20 < nrow < 21 + n_points: line = line[line.index("(") + 1:line.rindex(")")] j = 0 for number in line.split(): mesh_points[i][j] = float(number) j += 1 i += 1 return mesh_points
[docs] def write(self, mesh_points, filename): """ Writes a openFOAM file, called filename, copying all the lines from self.filename but the coordinates. mesh_points is a matrix that contains the new coordinates to write in the openFOAM file. :param numpy.ndarray mesh_points: it is a `n_points`-by-3 matrix containing the coordinates of the points of the mesh. :param string filename: name of the output file. .. todo:: DOCS """ self._check_filename_type(filename) self._check_extension(filename) self._check_infile_instantiation() self.outfile = filename n_points = mesh_points.shape[0] nrow = 0 i = 0 with open(self.infile, 'r') as input_file, open(self.outfile, 'w') as output_file: for line in input_file: nrow += 1 if 20 < nrow < 21 + n_points: output_file.write('(' + str(mesh_points[i][0]) + ' ' + str( mesh_points[i][1]) + ' ' + str(mesh_points[i][2]) + ')') output_file.write('\n') i += 1 else: output_file.write(line)