/*============================================================================
*
* Code_Saturne version 1.3
* ------------------------
*
*
* This file is part of the Code_Saturne Kernel, element of the
* Code_Saturne CFD tool.
*
* Copyright (C) 1998-2007 EDF S.A., France
*
* contact: saturne-support@edf.fr
*
* The Code_Saturne Kernel is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* The Code_Saturne Kernel 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the Code_Saturne Kernel; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*
*============================================================================*/
#ifndef __CS_SYR_COUPLING_H__
#define __CS_SYR_COUPLING_H__
/*============================================================================
* Syrthes coupling
*============================================================================*/
/*----------------------------------------------------------------------------
* Standard C library headers
*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
* BFT library headers
*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
* FVM library headers
*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
* Local headers
*----------------------------------------------------------------------------*/
#include "cs_base.h"
#include "cs_comm.h"
#ifdef __cplusplus
extern "C" {
#if 0
} /* Fake brace to force back Emacs auto-indentation back to column 0 */
#endif
#endif /* __cplusplus */
/*=============================================================================
* Local Macro Definitions
*============================================================================*/
/*============================================================================
* Structure definition
*============================================================================*/
/* Structure associated to Syrthes coupling */
typedef struct _cs_syr_coupling_t cs_syr_coupling_t;
/*============================================================================
* Global variables definition
*============================================================================*/
/*============================================================================
* Public function prototypes for Fortran API
*============================================================================*/
/*----------------------------------------------------------------------------
* Get number of Syrthes couplings.
*
* Fortran Interface:
*
* SUBROUTINE NBCSYR
* *****************
*
* INTEGER n_couplings : <-- : number of Syrthes couplings
*----------------------------------------------------------------------------*/
void CS_PROCF(nbcsyr, NBCSYR)
(
cs_int_t *const n_couplings
);
/*----------------------------------------------------------------------------
* Create nodal coupled mesh.
* Send vertices's coordinates and connectivity of coupled mesh.
*
* Fortran Interface:
*
* SUBROUTINE GEOSYR
* *****************
*
* INTEGER n_couplings : <-- : number of Syrthes couplings
*----------------------------------------------------------------------------*/
void CS_PROCF(geosyr, GEOSYR)
(
cs_int_t *const n_couplings
);
/*----------------------------------------------------------------------------
* Get number of boundary faces coupled with Syrthes.
*
* Fortran Interface:
*
* SUBROUTINE NBFSYR
* *****************
*
* INTEGER coupl_num : --> : coupling number
* INTEGER n_coupl_faces : <-- : number of coupled boundary faces
*----------------------------------------------------------------------------*/
void CS_PROCF(nbfsyr, NBFSYR)
(
const cs_int_t *const coupl_num,
cs_int_t *const n_coupl_faces
);
/*----------------------------------------------------------------------------
* Get local numbering of coupled faces
*
* Fortran interface:
*
* SUBROUTINE LFASYR
* *****************
*
* INTEGER coupl_num : --> : coupling number
* INTEGER n_coupl_faces : --> : number of coupled boundary faces
* INTEGER coupl_face_list : <-- : list of coupled boundary faces
*----------------------------------------------------------------------------*/
void CS_PROCF(lfasyr, LFASYR)
(
const cs_int_t *const coupl_num,
const cs_int_t *const n_coupl_faces,
cs_int_t *const coupl_face_list
);
/*----------------------------------------------------------------------------
* Initialize post processing of Syrthes couplings.
*
* Fortran Interface:
*
* SUBROUTINE PSTISY
* *****************
*----------------------------------------------------------------------------*/
void CS_PROCF(pstisy, PSTISY)
(
void
);
/*----------------------------------------------------------------------------
* Get the local (negative) numbers associated with the first and last
* post processing meshes dedicated to Syrthes couplings
*
* Fortran interface:
*
* SUBROUTINE PSTESY
* *****************
*
* INTEGER first_id : <-- : id of first post processing mesh
* INTEGER last_id : <-- : id of last post processing mesh
*----------------------------------------------------------------------------*/
void CS_PROCF (pstesy, PSTESY)
(
cs_int_t *const first_id,
cs_int_t *const last_id
);
/*============================================================================
* Public function definitions
*============================================================================*/
/*----------------------------------------------------------------------------
* Get number of Syrthes couplings.
*
* returns:
* number of Syrthes couplings
*----------------------------------------------------------------------------*/
cs_int_t
cs_syr_coupling_n_couplings(void);
/*----------------------------------------------------------------------------
* Get pointer to Syrthes coupling.
*
* parameters:
* coupling_id --> Id (0 to n-1) of Syrthes coupling
*
* returns:
* pointer to Syrthes coupling structure
*----------------------------------------------------------------------------*/
cs_syr_coupling_t *
cs_syr_coupling_by_id(cs_int_t coupling_id);
/*----------------------------------------------------------------------------
* Get communicator type associated with Syrthes coupling
*
* parameters:
* syr_coupling --> Syrthes coupling structure
*
* returns:
* communicator type
*----------------------------------------------------------------------------*/
cs_comm_type_t
cs_syr_coupling_get_comm_type(const cs_syr_coupling_t *syr_coupling);
/*----------------------------------------------------------------------------
* Get sending communicator associated with Syrthes coupling
*
* parameters:
* syr_coupling --> coupling structure with Syrthes
*
* returns:
* pointer to send communicator
*----------------------------------------------------------------------------*/
cs_comm_t *
cs_syr_coupling_get_send_comm(const cs_syr_coupling_t *syr_coupling);
/*----------------------------------------------------------------------------
* Get receiving communicator associated with Syrthes coupling
*
* parameters:
* syr_coupling --> coupling structure with Syrthes
*
* returns:
* pointer to receive communicator
*----------------------------------------------------------------------------*/
cs_comm_t *
cs_syr_coupling_get_recv_comm(const cs_syr_coupling_t *syr_coupling);
/*----------------------------------------------------------------------------
* Get number of vertices in coupled mesh
*
* parameters:
* syr_coupling --> Syrthes coupling structure
*
* returns:
* number of vertices in coupled mesh
*----------------------------------------------------------------------------*/
cs_int_t
cs_syr_coupling_get_n_vertices(const cs_syr_coupling_t *syr_coupling);
/*----------------------------------------------------------------------------
* Create a syr_coupling_t structure
*
* parameters:
* dim --> spatial mesh dimension
* ref_axis --> reference axis
* inv_sel --> invert selected faces or not
* n_colors --> number of colors
* colors --> color list
* n_groups --> number of groups
* groups --> group list
* syr_proc_rank --> syrthes processus rank
* comm_type --> communicator type
*----------------------------------------------------------------------------*/
void
cs_syr_coupling_add(cs_int_t dim,
cs_int_t ref_axis,
cs_bool_t invsel,
cs_int_t n_colors,
cs_int_t *colors,
cs_int_t n_groups,
char **groups,
#if defined (_CS_HAVE_MPI)
cs_int_t syr_proc_rank,
#endif
cs_comm_type_t comm_type);
/*----------------------------------------------------------------------------
* Initialize communicator for Syrthes coupling
*
* parameters:
* syr_coupling --> Syrthes coupling structure
* num_syr_coupling --> syrthes coupling number
* comm_echo --> optional echo to standard output
*----------------------------------------------------------------------------*/
void
cs_syr_coupling_init_comm(cs_syr_coupling_t *syr_coupling,
cs_int_t num_syr_coupling,
cs_int_t comm_echo);
/*----------------------------------------------------------------------------
* Destroy cs_syr_coupling_t structures
*----------------------------------------------------------------------------*/
void
cs_syr_coupling_all_destroy(void);
/*----------------------------------------------------------------------------
* Define coupled mesh and send it to Syrthes
*
* parameters:
* syr_coupling --> Syrthes coupling structure
* coupl_num --> syrthes coupling number
*----------------------------------------------------------------------------*/
void
cs_syr_coupling_init_mesh(cs_syr_coupling_t *syr_coupling,
const cs_int_t coupl_num);
/*----------------------------------------------------------------------------
* Interpolate a vertex field to an element-centered field
*
* parameters:
* syr_coupling --> Syrthes coupling structure
* vtx_values --> values defined on vertices
* elt_values <-> values defined on elements
*----------------------------------------------------------------------------*/
void
cs_syr_coupling_vtx_to_elt(cs_syr_coupling_t *syr_coupling,
cs_real_t *const vtx_values,
cs_real_t *elt_values);
/*----------------------------------------------------------------------------
* Interpolate an element-centered field to a vertex field.
*
* The size of vtx_values array must be twice the number of vertices.
* The first half gets values and the second half is used as a working array.
* The two parts must be contiguous in parallel mode for MPI transfers.
*
* parameters:
* syr_coupling --> Syrthes coupling structure
* elt_values <-> array of values defined on elements
* n_vtx_values --> number of values defined on vertices
* vtx_values <-> array of values defined on vertices
*----------------------------------------------------------------------------*/
void
cs_syr_coupling_elt_to_vtx(cs_syr_coupling_t *syr_coupling,
cs_real_t *const elt_values,
cs_int_t n_vertices,
cs_real_t *vtx_values);
/*----------------------------------------------------------------------------
* Update post-processing variables of a Syrthes coupling
*
* parameters:
* syr_coupling --> Syrthes coupling structure
* step --> 0: var = wall temperature
* 1: var = fluid temperature
* 2: var = exchange coefficient
* var --> Pointer to variable values
*----------------------------------------------------------------------------*/
void
cs_syr_coupling_post_var_update(cs_syr_coupling_t *syr_coupling,
int step,
const cs_real_t *var);
/*----------------------------------------------------------------------------
* Get the local (negative) numbers associated with the first and last
* post processing meshes dedicated to Syrthes couplings
*
* parameters:
* first_mesh_id <-- Id of first post processing mesh
* last_mesh_id <-- Id of last post processing mesh
*----------------------------------------------------------------------------*/
void
cs_syr_coupling_post_id_extents(cs_int_t *const id_mesh_start,
cs_int_t *const id_mesh_end);
/*----------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __CS_SYR_COUPLING_H__ */
syntax highlighted by Code2HTML, v. 0.9.1