#ifndef __FVM_TO_ENSIGHT_H__ #define __FVM_TO_ENSIGHT_H__ /*============================================================================ * Write a nodal representation associated with a mesh and associated * variables to EnSight Gold files *============================================================================*/ /* This file is part of the "Finite Volume Mesh" library, intended to provide finite volume mesh and associated fields I/O and manipulation services. Copyright (C) 2004-2006 EDF This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /*---------------------------------------------------------------------------- * Local headers *----------------------------------------------------------------------------*/ #include #include #include /*----------------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" { #if 0 } /* Fake brace to force back Emacs auto-indentation back to column 0 */ #endif #endif /* __cplusplus */ /*============================================================================= * Macro definitions *============================================================================*/ /*============================================================================ * Type definitions *============================================================================*/ /*============================================================================= * Public function prototypes *============================================================================*/ /*---------------------------------------------------------------------------- * Initialize FVM to EnSight Gold file writer. * * Options are: * text output text files * binary output binary files (default) * big_endian force binary files to big-endian * discard_polygons do not output polygons or related values * discard_polyhedra do not output polyhedra or related values * divide_polygons tesselate polygons with triangles * divide_polyhedra tesselate polyhedra with tetrahedra and pyramids * (adding a vertex near each polyhedron's center) * * parameters: * name <-- base output case name. * options <-- whitespace separated, lowercase options list * time_dependecy <-- indicates if and how meshes will change with time * comm <-- associated MPI communicator. * * returns: * pointer to opaque EnSight Gold writer structure. *----------------------------------------------------------------------------*/ #if defined(FVM_HAVE_MPI) void * fvm_to_ensight_init_writer(const char *name, const char *path, const char *options, fvm_writer_time_dep_t time_dependency, MPI_Comm comm); #else void * fvm_to_ensight_init_writer(const char *name, const char *path, const char *options, fvm_writer_time_dep_t time_dependency); #endif /*---------------------------------------------------------------------------- * Finalize FVM to EnSight Gold file writer. * * parameters: * this_writer_p <-- pointer to opaque Ensight Gold writer structure. * * returns: * NULL pointer. *----------------------------------------------------------------------------*/ void * fvm_to_ensight_finalize_writer(void *this_writer_p); /*---------------------------------------------------------------------------- * Associate new time step with an EnSight geometry. * * parameters: * this_writer_p <-- pointer to associated writer * time_step <-- time step number * time_value <-- time_value number *----------------------------------------------------------------------------*/ void fvm_to_ensight_set_mesh_time(void *this_writer_p, const int time_step, const double time_value); /*---------------------------------------------------------------------------- * Indicate if a elements of a given type in a mesh associated to a given * EnSight Gold file writer need to be tesselated. * * parameters: * this_writer_p <-- pointer to associated writer * mesh <-- pointer to nodal mesh structure that should be written * element_type <-- element type we are interested in * * returns: * 1 if tesselation of the given element type is needed, 0 otherwise *----------------------------------------------------------------------------*/ int fvm_to_ensight_needs_tesselation(fvm_writer_t *this_writer_p, const fvm_nodal_t *mesh, fvm_element_t element_type); /*---------------------------------------------------------------------------- * Write nodal mesh to a an EnSight Gold file * * parameters: * this_writer_p <-- pointer to associated writer. * mesh <-- pointer to nodal mesh structure that should be written. *----------------------------------------------------------------------------*/ void fvm_to_ensight_export_nodal(void *this_writer_p, const fvm_nodal_t *mesh); /*---------------------------------------------------------------------------- * Write field associated with a nodal mesh to an EnSight Gold file. * * Assigning a negative value to the time step indicates a time-independent * field (in which case the time_value argument is unused). * * parameters: * this_writer_p <-- pointer to associated writer * mesh <-- pointer to associated nodal mesh structure * name <-- variable name * location <-- variable definition location (nodes or elements) * dimension <-- variable dimension (0: constant, 1: scalar, * 3: vector, 6: sym. tensor, 9: asym. tensor) * interlace <-- indicates if variable in memory is interlaced * n_parent_lists <-- indicates if variable values are to be obtained * directly through the local entity index (when 0) or * through the parent entity numbers (when 1 or more) * parent_num_shift <-- parent number to value array index shifts; * size: n_parent_lists * datatype <-- indicates the data type of (source) field values * time_step <-- number of the current time step * time_value <-- associated time value * field_values <-- array of associated field value arrays *----------------------------------------------------------------------------*/ void fvm_to_ensight_export_field(void *this_writer_p, const fvm_nodal_t *mesh, const char *name, fvm_writer_var_loc_t location, int dimension, fvm_interlace_t interlace, int n_parent_lists, const fvm_lnum_t parent_num_shift[], fvm_datatype_t datatype, int time_step, double time_value, const void *const field_values[]); /*----------------------------------------------------------------------------*/ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __FVM_TO_ENSIGHT_H__ */