/*============================================================================ * * 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_VOISET_H__ #define __CS_VOISET_H__ /*============================================================================ * Interfaces fortran pour le calcul des gradients par moindres carres sur * support etendu. *============================================================================*/ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /*---------------------------------------------------------------------------- * Fichiers `include' locaux *----------------------------------------------------------------------------*/ #include "cs_base.h" /*============================================================================ * Définitions de macros *============================================================================*/ /*============================================================================ * Définitions de types *============================================================================*/ /*============================================================================ * Fonctions publiques pour API Fortran *============================================================================*/ /*---------------------------------------------------------------------------- * Definition du voisinage étendu pour le calcul des gradients par moindres * carrés : au premier passage, on choisit les cellules et on modifie la * structure maillage qui stocke le voisinage étendu. * ensuite, on se contente de retourner les pointeurs * * Attention : le voisinage étendu permet de toucher toutes les cellules * qui partagent un noeud avec une cellule donnée, mais il ne * comporte pas les cellules visibles d'une cellule au travers * des faces (elles sont accessibles par IFACEL) * * Interface Fortran : * * SUBROUTINE DEFVSE * ***************** * & ( NDIM , NCEL , NFAC , NNOD , * & IMRGRA , ANOMAX , * & IFACEL , IPNFAC , NODFAC , XYZCEN , SURFAC ) * *----------------------------------------------------------------------------*/ void CS_PROCF (defvse, DEFVSE) ( const cs_int_t *const ndim, /* --> Dimension = 3 */ const cs_int_t *const ncel, /* --> Nombre de cellules */ const cs_int_t *const nfac, /* --> Nombre de faces internes */ const cs_int_t *const nnod, /* --> Nombre de sommets */ const cs_int_t *const imrgra, /* --> Mode de reconstruction */ const cs_real_t *const anomax, /* --> Angle de non orthogonalité en radian au-delà duquel on retient dans le voisinage étendu de chaque cellule voisine les cellules dont un sommet est sur la face */ const cs_int_t *const ifacel, /* --> Connectivité face interne -> cellules*/ const cs_int_t *const ipnfac, /* --> Position du premier noeud d'une face dans nodfac */ const cs_int_t *const nodfac, /* --> Numéro des noeuds des faces internes */ const cs_real_t *const xyzcen, /* --> Coord. du centre des cellules */ const cs_real_t *const surfac /* --> Vecteur surface des faces internes */ ) ; /*---------------------------------------------------------------------------- * Appel de la routine FORTRAN GRADMC pour le calcul des gradients par moindres * carrés. On ajoute aux arguments le voisinage étendu de la structure * maillage. * * Interface Fortran : * * SUBROUTINE CGRDMC * ***************** * * & ( IDBIA0 , IDBRA0 , * & NCELET , NCEL , NFAC , NFABOR , NCELBR , NITUSE , NRTUSE , * & INC , ICCOCG , NSWRGP , IDIMTE , ITENSO , IPHYDP , IMRGRA , * & IWARNP , NFECRA , EPSRGP , EXTRAP , * & IFACEL , IFABOR , ICELBR , ITUSER , IA , * & VOLUME , SURFAC , SURFBO , SURFBN , POND , * & DIST , DISTBR , DIJPF , DIIPB , * & FEXTX , FEXTY , FEXTZ , * & XYZCEN , CDGFAC , CDGFBO , COEFAP , COEFBP , PVAR , * & COCGB , COCG , RTUSER , * & DPDX , DPDY , DPDZ , * & BX , BY , BZ , RA ) * *----------------------------------------------------------------------------*/ void CS_PROCF (cgrdmc, CGRDMC) ( const cs_int_t *const idbia0, /* --> numéro 1ère case libre dans IA */ const cs_int_t *const idbra0, /* --> numéro 1ère case libre dans RA */ const cs_int_t *const ncelet, /* --> nombre de cellules étendu */ const cs_int_t *const ncel, /* --> nombre de cellules */ const cs_int_t *const nfac, /* --> nombre de faces internes */ const cs_int_t *const nfabor, /* --> nombre de faces de bord */ const cs_int_t *const ncelbr, /* --> nombre de cellules de bord */ const cs_int_t *const nituse, /* --> longueur du tableau ituser[] */ const cs_int_t *const nrtuse, /* --> longueur du tableau rtuser[] */ const cs_int_t *const inc, /* --> 0 ou 1 : incrément ou non */ const cs_int_t *const iccocg, /* --> 1 ou 0 : recalcul de COCG ou non */ const cs_int_t *const nswrgp, /* --> >1 : avec reconstruction */ const cs_int_t *const idimte, /* --> 0, 1, 2 : variable scalaire, vecteur, tenseur */ const cs_int_t *const itenso, /* --> pour la périodicité de rotation */ const cs_int_t *const iphydr, /* --> prise en compte de P hydrostatiqu*/ const cs_int_t *const imrgra, /* --> mode de calcul du gradient */ const cs_int_t *const iwarnp, /* --> niveau d'impression */ const cs_int_t *const nfecra, /* --> unité sortie standard */ const cs_real_t *const epsrgp, /* --> précision pour calcul du gradient itératif */ const cs_real_t *const extrap, /* --> extrapolation des grad. au bord */ const cs_int_t ifacel[], /* --> liste des faces internes */ const cs_int_t ifabor[], /* --> liste des faces de bord */ const cs_int_t icelbr[], /* --> numéro des cellules ayant au moins une face de bord */ cs_int_t ituser[], /* <-> tab. complémentaire utilisateur */ cs_int_t ia[], /* <-> macro-tableau entier */ const cs_real_t volume[], /* --> volumes des cellules */ const cs_real_t surfac[], /* --> surfaces des faces internes */ const cs_real_t surfbo[], /* --> surfaces des faces de bord */ const cs_real_t surfbn[], /* --> norme de surfbo */ const cs_real_t pond[], /* --> pondération géométrique faces int*/ const cs_real_t dist[], /* --> distance entre I' et J' faces int*/ const cs_real_t distbr[], /* --> distance du cdgfbo à I' fac. brd */ const cs_real_t dijpf[], /* --> vecteur I'J' aux faces internes */ const cs_real_t diipb[], /* --> vecteur II' aux faces de bord */ const cs_real_t fextx[], /* --> composantes de la force */ const cs_real_t fexty[], /* extérieure générant la pression */ const cs_real_t fextz[], /* hydrostatique */ const cs_real_t xyzcen[], /* --> c.d.g. des cellules */ const cs_real_t cdgfac[], /* --> c.d.g. des faces internes */ const cs_real_t cdgfbo[], /* --> c.d.g. des faces de bord */ const cs_real_t coefap[], /* --> cond. limites aux faces de bord */ const cs_real_t coefbp[], /* --> cond. limites aux faces de bord */ const cs_real_t pvar[], /* --> variable dont on calcule le grad */ cs_real_t cocgb[], /* <-> contribution à COCG des faces internes des cellules de bord */ cs_real_t cocg[], /* <-> contribution à COCG des faces internes des cellules de bord */ cs_real_t rtuser[], /* <-> tab. complémentaire utilisateur */ cs_real_t dpdx[], /* <-- composante x du gradient */ cs_real_t dpdy[], /* <-- composante y du gradient */ cs_real_t dpdz[], /* <-- composante z du gradient */ cs_real_t bx[], /* - tab. de travail local */ cs_real_t by[], /* - tab. de travail local */ cs_real_t bz[], /* - tab. de travail local */ cs_real_t ra[] /* <-> macro-tableau réel */ ) ; /*---------------------------------------------------------------------------- * Appel de la routine FORTRAN LIMGRD pour la limitation éventuelle des * gradients. On ajoute aux arguments le voisinage étendu de la structure * maillage. * * Interface Fortran : * * SUBROUTINE CLMGRD * ***************** * * & ( NDIM , NCELET , NCEL , NFAC , * & IMRGRA , IMLIGP , IDIMTE , ITENSO , IWARNP , NFECRA , CLIMGP , * & IFACEL , * & XYZCEN , PVAR , * & DPDX , DPDY , DPDZ , * & FACLIM , DENOM , DENUM ) * *----------------------------------------------------------------------------*/ void CS_PROCF (clmgrd, CLMGRD) ( const cs_int_t *const ndim, /* --> dimension de l'espace */ const cs_int_t *const ncelet, /* --> nombre de cellules étendu */ const cs_int_t *const ncel, /* --> nombre de cellules */ const cs_int_t *const nfac, /* --> nombre de faces internes */ const cs_int_t *const imrgra, /* --> mode de calcul du gradient */ const cs_int_t *const imligp, /* --> mode de limitation du gradient */ const cs_int_t *const idimte, /* --> 0, 1, 2 : variable scalaire, vecteur, tenseur */ const cs_int_t *const itenso, /* --> pour la périodicité de rotation */ const cs_int_t *const iwarnp, /* --> niveau d'impression */ const cs_int_t *const nfecra, /* --> unité sortie standard */ const cs_real_t *const climgp, /* --> coefficient de limitation du grad*/ const cs_int_t ifacel[], /* --> liste des faces internes */ const cs_real_t xyzcen[], /* --> c.d.g. des cellules */ const cs_real_t pvar[], /* --> variable dont on calcule le grad */ cs_real_t dpdx[], /* <-> composante x du gradient */ cs_real_t dpdy[], /* <-> composante y du gradient */ cs_real_t dpdz[], /* <-> composante z du gradient */ cs_real_t faclim[], /* - tab. de travail local */ cs_real_t denom[], /* - tab. de travail local */ cs_real_t denum[] /* - tab. de travail local */ ); void CS_PROCF (cfiltr, CFILTR) ( const cs_int_t *const ncelet, /* --> nombre de cellules étendu */ const cs_int_t *const ncel, /* --> nombre de cellules */ const cs_int_t *const nfac, /* --> nombre de faces internes */ const cs_int_t *const nfabor, /* --> nombre de faces de bord */ const cs_int_t ifacel[], /* --> liste des faces internes */ const cs_int_t ifabor[], /* --> liste des faces de bord */ const cs_real_t volume[], /* --> volumes des cellules */ const cs_real_t pvar[], /* --> variable a filtrer */ cs_real_t varfil[], /* --> resultat de la variable filtree */ cs_real_t w1[], /* - tab. de travail local */ cs_real_t w2[] /* - tab. de travail local */ ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __CS_MAILLAGE_H__ */