/*============================================================================
 *
 *                    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
 *
 *============================================================================*/

/*============================================================================
 * Fonctions associées a la périodicité
 *============================================================================*/


/*----------------------------------------------------------------------------
 * Construction des tableaux permettant d'associer à une cellule halo donnée :
 *  - la cellule réelle correspondante,
 *  - un numéro et sens de périodicité.
 *
 * Interface Fortran :
 *
 * SUBROUTINE PERLOC
 * *****************
 *
 * INTEGER NCELET              :  -> : nombre d'elements halo compris
 * INTEGER NCEL                :  -> : nombre d'elements actifs
 * INTEGER ICELCR(NCELET-NCEL) : <-  : numero de cellule correspondante
 * INTEGER IPERCR(NCELET-NCEL) : <-  : numero de periodicite associe,
 *                                     * 2 + (0 : direct, 1 : indirect)
 *----------------------------------------------------------------------------*/

void CS_PROCF (perloc, PERLOC) (const cs_int_t  *ncelet,
                                const cs_int_t  *ncel,
                                      cs_int_t  *icelcr,
                                      cs_int_t  *ipercr);

/*----------------------------------------------------------------------------
 * Retourne la position d'une particule après passage par une periodicite
 *
 * Interface Fortran :
 *
 * SUBROUTINE LAGPER
 * *****************
 *
 * INTEGER          NCELET        :  -> : nombre d'elements halo compris
 * INTEGER          NCEL          :  -> : nombre d'elements actifs
 * INTEGER          ISENS         :  -> : sens de la periodicite
 * INTEGER          IPER          :  -> : numero de la periodicite
 * INTEGER          IELT          :  -> : numero de la cellule de halo
 * DOUBLE PRECISION POINTA        :  -> : position avant transformation
 * DOUBLE PRECISION POINTB        : <-  : position après transformation
 *----------------------------------------------------------------------------*/

void CS_PROCF (lagper, LAGPER) (const cs_int_t   *ncelet,
                                const cs_int_t   *ncel,
                                const cs_int_t   *isens,
                                const cs_int_t   *iper , 
                                const cs_int_t   *ielt ,
                                const cs_real_t  pointa[],
                                      cs_real_t  pointb[]);

/*----------------------------------------------------------------------------
 * Retourne la vitesse d'une particule après passage par une periodicite
 *
 * Interface Fortran :
 *
 * SUBROUTINE LAGVEC
 * *****************
 *
 * INTEGER          ISENS         :  -> : sens de la periodicite
 * INTEGER          IPER          :  -> : numero de la periodicite
 * DOUBLE PRECISION VECTI         :  -> : vecteur avant transformation
 * DOUBLE PRECISION VECTF         : <-  : vecteur après transformation
 *----------------------------------------------------------------------------*/

void CS_PROCF (lagvec, LAGVEC) (const cs_int_t   *isens,
                                const cs_int_t   *iper ,
                                const cs_real_t  vecti[],
                                      cs_real_t  vectf[]);
