#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 <fvm_defs.h>
/*----------------------------------------------------------------------------*/
#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__ */
syntax highlighted by Code2HTML, v. 0.9.1