#ifndef __FVM_INTERFACE_H__ #define __FVM_INTERFACE_H__ /*============================================================================ * Main structure for handling of interfaces associating mesh entities * (such as inter-processor or periodic connectivity between cells, faces, * or vertices); *============================================================================*/ /* 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) 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 /*----------------------------------------------------------------------------*/ #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 *============================================================================*/ /*---------------------------------------------------------------------------- * Structure defining an I/O numbering scheme *----------------------------------------------------------------------------*/ /* Pointer to structures representing an interface and a list of interfaces. The structures themselves are private, and is defined in fvm_interface.c */ typedef struct _fvm_interface_t fvm_interface_t; typedef struct _fvm_interface_set_t fvm_interface_set_t; /*============================================================================= * Static global variables *============================================================================*/ /*============================================================================= * Public function prototypes *============================================================================*/ /*---------------------------------------------------------------------------- * Return process rank associated with an interface's distant entities. * * parameters: * this_interface <-- pointer to interface structure * * returns: * process rank associated with the interface's distant entities *----------------------------------------------------------------------------*/ int fvm_interface_rank(const fvm_interface_t *this_interface); /*---------------------------------------------------------------------------- * Return number of local and distant entities defining an interface. * * parameters: * this_interface <-- pointer to interface structure * * returns: * number of local and distant entities defining the interface *----------------------------------------------------------------------------*/ fvm_lnum_t fvm_interface_size(const fvm_interface_t *this_interface); /*---------------------------------------------------------------------------- * Return pointer to array of local entity numbers defining an interface. * * The size of the array may be obtained by fvm_interface_size(). * The array is owned by the interface structure, and is not copied * (hence the constant qualifier for the return value). * * parameters: * this_interface <-- pointer to interface structure * * returns: * pointer to array of local entity numbers defining the interface *----------------------------------------------------------------------------*/ const fvm_lnum_t * fvm_interface_get_local_num(const fvm_interface_t *this_interface); /*---------------------------------------------------------------------------- * Return pointer to array of distant entity numbers defining an interface. * * The size of the array may be obtained by fvm_interface_size(). * The array is owned by the interface structure, and is not copied * (hence the constant qualifier for the return value). * * parameters: * this_interface <-- pointer to interface structure * * returns: * pointer to array of local entity numbers defining the interface *----------------------------------------------------------------------------*/ const fvm_lnum_t * fvm_interface_get_distant_num(const fvm_interface_t *this_interface); /*---------------------------------------------------------------------------- * Creation of a list of interfaces between entities of a same type. * * These interfaces may be used to identify equivalent vertices or faces using * domain splitting, as well as periodic entities (on the same or on * distant ranks). * * The corresponding entities must be locally ordered. * * parameters: * n_ent <-- number of entities considered * parent_entity_number <-- pointer to list of selected entitie's parent's * numbers, or NULL if all first n_ent entities * are used * parent_global_number <-- pointer to list of global (i.e. domain splitting * independent) parent entity numbers * * returns: * pointer to list of interfaces (possibly NULL in serial mode) *----------------------------------------------------------------------------*/ fvm_interface_set_t * fvm_interface_set_create(fvm_lnum_t n_ent, const fvm_lnum_t parent_entity_number[], const fvm_gnum_t parent_global_number[]); /*---------------------------------------------------------------------------- * Destruction of an interface list. * * parameters: * this_interface_set <-- pointer to structure that should be destroyed * * returns: * NULL pointer *----------------------------------------------------------------------------*/ fvm_interface_set_t * fvm_interface_set_destroy(fvm_interface_set_t *this_interface_set); /*---------------------------------------------------------------------------- * Return number of interfaces associated with an interface set. * * parameters: * this_interface_set <-- pointer to interface set structure * * returns: * number of interfaces in set *----------------------------------------------------------------------------*/ int fvm_interface_set_size(const fvm_interface_set_t *this_interface_set); /*---------------------------------------------------------------------------- * Return pointer to a given interface in an interface set. * * parameters: * this_interface_set <-- pointer to interface set structure * interface_id <-- index of interface in set (0 to n-1) * * returns: * pointer to interface structure *----------------------------------------------------------------------------*/ const fvm_interface_t * fvm_interface_set_get_interface(const fvm_interface_set_t *this_interface_set, int interface_id); /*---------------------------------------------------------------------------- * Dump printout of an interface list. * * parameters: * this_interface_set <-- pointer to structure that should be dumped *----------------------------------------------------------------------------*/ void fvm_interface_set_dump(const fvm_interface_set_t *this_interface_set); /*----------------------------------------------------------------------------*/ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __FVM_INTERFACE_H__ */