c@a c@versb C----------------------------------------------------------------------- C CVERS Code_Saturne version 1.3 C ------------------------ C C This file is part of the Code_Saturne Kernel, element of the C Code_Saturne CFD tool. C C Copyright (C) 1998-2007 EDF S.A., France C C contact: saturne-support@edf.fr C C The Code_Saturne Kernel is free software; you can redistribute it C and/or modify it under the terms of the GNU General Public License C as published by the Free Software Foundation; either version 2 of C the License, or (at your option) any later version. C C The Code_Saturne Kernel is distributed in the hope that it will be C useful, but WITHOUT ANY WARRANTY; without even the implied warranty C of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the C GNU General Public License for more details. C C You should have received a copy of the GNU General Public License C along with the Code_Saturne Kernel; if not, write to the C Free Software Foundation, Inc., C 51 Franklin St, Fifth Floor, C Boston, MA 02110-1301 USA C C----------------------------------------------------------------------- c@verse SUBROUTINE USALCL C ***************** C -------------------------------------------------------------- & ( IDBIA0 , IDBRA0 , ITRALE , & NDIM , NCELET , NCEL , NFAC , NFABOR , NFML , NPRFML , & NNOD , LNDFAC , LNDFBR , NCELBR , & NVAR , NSCAL , NPHAS , & NIDEVE , NRDEVE , NITUSE , NRTUSE , & IFACEL , IFABOR , IFMFBR , IFMCEL , IPRFML , & IPNFAC , NODFAC , IPNFBR , NODFBR , & ICODCL , ITYPFB , IALTYB , IMPALE , & IDEVEL , ITUSER , IA , & XYZCEN , SURFAC , SURFBO , CDGFAC , CDGFBO , XYZNOD , VOLUME , & DT , RTP , RTPA , PROPCE , PROPFA , PROPFB , & COEFA , COEFB , RCODCL , XYZNO0 , DEPALE , & RDEVEL , RTUSER , RA ) C -------------------------------------------------------------- C*********************************************************************** C FONCTION : C -------- c@foncb CFONC CFONC ROUTINE UTILISATEUR CFONC REMPLISSAGE DU TABLEAU DE CONDITIONS AUX LIMITES CFONC (IALTYB,ICODCL,RCODCL) POUR LA VITESSE DE MAILLAGE CFONC CFONC POSSIBILITE DE FIXER DIRECTEMENT LE DEPLACEMENT DES CFONC NOEUDS CFONC CFONC CFONC CFONC CE SOUS PROGRAMME UTILISATEUR EST OBLIGATOIRE EN ALE CFONC ==================================================== CFONC CFONC CFONC CFONC INTRODUCTION CFONC ============ CFONC CFONC On donne ici les conditions aux limites par face de bord, pour CFONC pour la vitesse de maillage uniquement (pour les autres CFONC variables, se reporter a l'Interface Graphique ou a usclim) CFONC CFONC CFONC On balaye les faces de bord et selon un critere on affecte tel CFONC ou tel type de conditions aux limites. Dans l'exemple donne CFONC ci dessous, c'est la couleur (propriete 1 de la famille) CFONC qui permet de distinguer les differents types de bord. On CFONC aurait pu aussi travailler avec les coordonnees du centre CFONC des faces, mais "c'eut ete moins pratique". CFONC CFONC CFONC TYPE DE CONDITIONS AUX LIMITES CFONC ============================== CFONC CFONC On peut affecter les conditions aux limites de deux manieres. CFONC CFONC CFONC Pour les conditions "standards" : CFONC -------------------------------- CFONC CFONC Trois types de conditions "standards" sont disponibles. On CFONC specifie pour chaque face le type de condition choisi. CFONC Le choix se fait en remplissant le tableau IALTYB. CFONC CFONC CFONC * IALTYB(IFAC) = IBFIXE : la face IFAC correspond a un bord CFONC de maillage fixe. Une condition de Dirichlet nulle sera CFONC affectee automatiquement a la vitesse de maillage. En CFONC outre, le deplacement des noeuds sera automatiquement CFONC impose a 0 (cf. plus base sur IMPALE), sauf si CFONC l'utilisateur a modifie la condition pour au moins une CFONC des conposantes de la vitesse de maillage (ICODCL modifie, CFONC cf. conditions non standards) CFONC CFONC CFONC * IALTYB(IFAC) = IGLISS : la face IFAC est une face a maillage CFONC glissant. La composante normale a la face de la vitesse CFONC de maillage sera forcee a 0, les autres composantes seront CFONC traitees en Neumann homogene (pour les faces non alignees CFONC avec les axes, la condition de Neumann homogene est CFONC seulement partiellement implicitee), comme pour les CFONC conditions de symetrie de la vitesse fluide. CFONC CFONC CFONC * IALTYB(IFAC) = IVIMPO : la face IFAC a une vitesse de maillage CFONC imposee. Cette vitesse est specifiee en remplissant le CFONC tableau RCODCL correspondant : CFONC RCODCL(IFAC,IUMA,1) = vitesse de maillage selon X CFONC RCODCL(IFAC,IVMA,1) = vitesse de maillage selon Y CFONC RCODCL(IFAC,IWMA,1) = vitesse de maillage selon Z CFONC Les composantes non specifiees de RCODCL(.,I.MA,1) seront mises CFONC a 0 (seules les composantes non nulles sont donc a specifier) CFONC CFONC CFONC CFONC Pour les conditions "non standards" : CFONC ------------------------------------ CFONC CFONC Autres que fixe, glissement ou vitesse imposee, on donne CFONC CFONC - pour chaque face et chaque composante IVAR=IUMA, IVMA, IWMA : CFONC -> un code ICODCL(IFAC,IVAR) CFONC -> trois reels RCODCL(IFAC,IVAR,1) CFONC RCODCL(IFAC,IVAR,2) CFONC RCODCL(IFAC,IVAR,3) CFONC La valeur de ICODCL est prise parmi les suivantes : CFONC 1 : Dirichlet CFONC 3 : Neumann CFONC 4 : Symetrie CFONC Les valeurs des 3 reels RCODCL sont les suivantes CFONC CFONC RCODCL(IFAC,IVAR,1) : CFONC Dirichlet sur la variable si ICODCL(IFAC,IVAR)= 1 CFONC La dimension de RCODCL(IFAC,IVAR,1) est en m/s CFONC CFONC RCODCL(IFAC,IVAR,2) : CFONC coefficient d'echange "exterieur" en kg/(m2 s) (entre la CFONC valeur imposee et la valeur au bord du domaine) CFONC RINFIN = infini par defaut CFONC RCODCL(IFAC,IVAR,2) = (VISCMA) / D CFONC (D a la dimension d'une distance en m, VISCMA est CFONC la viscosite de maillage) CFONC NB : la definition de RCODCL(.,.,2) est calquee sur le cas CFONC des autres variables standards de l'ecoulement. Il n'a pas CFONC grand sens physique dans le cas de la vitesse de maillage. CFONC CFONC RCODCL(IFAC,IVAR,3) : CFONC Densite de flux en kg/(m s2) = J si ICODCL(IFAC,IVAR)= 3 CFONC (< 0 si gain, n normale orientee vers l'exterieur) CFONC RCODCL(IFAC,IVAR,3) = -(VISCMA) * (GRAD Um).n CFONC (ou Um represente la vitesse de maillage) CFONC NB : la definition de RCODCL(.,.,3) est calquee sur le cas CFONC des autres variables standards de l'ecoulement. CFONC RCODCL(.,.,3) = 0.D0 permet de specifier un Neumann CFONC homogene sur la vitesse de maillage. Toute autre valeur CFONC aura une signification physique plus discutable. CFONC CFONC CFONC CFONC Noter bien que si l'utilisateur affecte une valeur a IALTYB CFONC parmi IBFIXE, IGLISS, IVIMPO, CFONC et qu'il ne modifie pas ICODCL (valeur nulle par defaut), CFONC c'est ITYPFB qui imposera la condition limite. CFONC CFONC Par contre, si l'utilisateur impose CFONC ICODCL(IFAC,IVAR) (non nul), CFONC ce sont alors les valeurs de ICODCL et RCODCL qu'il aura CFONC fournies qui sont retenues pour la face et la composante CFONC consideree (s'il ne precise pas RCODCL, ce sont les valeurs CFONC par defaut qui sont retenues pour la face et CFONC la variable consideree soit : CFONC RCODCL(IFAC,IVAR,1) = 0.D0 CFONC RCODCL(IFAC,IVAR,2) = RINFIN CFONC RCODCL(IFAC,IVAR,3) = 0.D0) CFONC CFONC CFONC Si l'utilisateur specifie de lui-meme la valeur de ICODCL CFONC et de RCODCL pour TOUTES les composantes de la vitesse CFONC de maillage, il n'est pas necessaire de specifier IALTYB CFONC pour la face concernee (sa valeur ne sera pas utilisee) CFONC CFONC CFONC REGLE DE COHERENCE CFONC ================== CFONC CFONC Si une condition de symetrie (ICODCL=4) a ete imposee sur CFONC une des composantes, elle doit l'etre sur toutes les CFONC composantes. CFONC CFONC CFONC DEPLACEMENT FORCE DES NOEUDS CFONC ============================ CFONC CFONC Pour plus de precision dans le deplacement du maillage, on peut CFONC aussi forcer directement le deplacement de certains noeuds, CFONC internes ou de bord. Pour cela on remplit les tableaux DEPALE CFONC et IMPALE : CFONC DEPALE(INOD,1) = deplacement du noeud INOD dans la direction X CFONC DEPALE(INOD,2) = deplacement du noeud INOD dans la direction Y CFONC DEPALE(INOD,3) = deplacement du noeud INOD dans la direction Z CFONC Ce deplacement s'entend comme le deplacement absolu du noeud CFONC a partir de sa position dans le maillage d'origine. CFONC IMPALE(INOD) = 1 indique que le noeud INOD est a deplacement CFONC impose (IMPALE est initialise a 0 ; si sa valeur est laissee CFONC nulle, DEPALE ne sera pas pris en compte). CFONC CFONC Lors de la mise a jour du maillage, les noeuds tels que IMPALE=1 CFONC (internes ou de bord) ne seront pas deplaces a partir de la CFONC vitesse de maillage mais directement a partir de DEPALE. CFONC Dans le cas ou tous les noeuds d'une face sont a deplacement CFONC impose, il n'est pas necessaire de remplir les tableaux de CFONC conditions aux limites de vitesse de maillage pour cette faces, CFONC ils seront ecrases : CFONC -> ICODCL sera mis a 1 (Dirichlet) CFONC -> RCODCL sera mis a la valeur moyenne des vitesses des noeuds CFONC de la face (vitesses calculees a partir de DEPALE) CFONC CFONC Dans le cas de faces specifies a maillage fixes (IALTYB(IFAC)=IBFIXE), CFONC tous les noeuds de la face sont automatiquement mis en CFONC deplacement impose, avec une valeur nulle de DEPALE. CFONC CFONC CFONC CARACTERISTIQUES DES NOEUDS CFONC =========================== CFONC Le nombre total de noeuds est stocke dans la variable NNOD. CFONC Les coordonnees des noeuds sont accessibles par le tableau CFONC XYZNOD(3,NNOD). CFONC Les coordonnees des noeuds dans le maillage initiale sont CFONC accessibles par le tableau XYZNO0(3,NNOD). CFONC CFONC Le reperage des noeuds est possible a partir des faces internes et CFONC de bord, grace aux tableaux IPNFAC, NODFAC, IPNFBR, NODFBR. CFONC NODFAC (NODFBR) contient sequentiellement la liste des noeuds de CFONC toutes les faces internes (de bord). CFONC IPNFAC (IPNFBR) contient pour chaque face interne (de bord) le CFONC numero de la premiere case de NODFAC (NODFBR) lui correspondant. CFONC CFONC Par exemple, pour recuperer sequentiellement tous les noeuds de la CFONC face interne IFAC, il suffit d'ecrire la boucle suivante : CFONC DO II = IPNFAC(IFAC), IPNFAC(IFAC+1)-1 <- indices des elements CFONC de NODFAC correspondant CFONC a IFAC CFONC INOD = NODFAC(II) <- recuperation du numero CFONC du IIeme noeud de la face CFONC IFAC CFONC ... CFONC ENDDO CFONC CFONC CFONC INFLUENCE SUR LES CONDITIONS AUX LIMITES DE VITESSE FLUIDE EN PAROI CFONC =================================================================== CFONC Dans le cas de faces de paroi pour le fluide (ITYPFB=IPAROI), CFONC l'influence de la vitesse de maillage depend de sa signification CFONC physique. CFONC En effet, dans le cas d'une structure immergee par exemple, le CFONC mouvement des faces de paroi de la structure correspond à un mouvement CFONC physique et doit donc entrainer le fluide. CFONC Dans le cas d'un piston au contraire, les bords latéraux sont des CFONC parois ou le mouvement des noeuds n'a aucune signification physique et CFONC ne doit pas entrainer le fluide. CFONC Dans tous les cas, la vitesse de maillage normale a la face est prise CFONC en compte (u.n=w.n a la face), c'est le traitement de la vitesse CFONC tangentielle qui differe suivant les cas. CFONC CFONC Par defaut, Code_Saturne gere la relation entre vitesse fluide et vitesse CFONC de maillage pour les parois de la maniere suivante : CFONC - Si IALTYB(IFAC) = IBFIXE, la vitesse de maillage est nulle, il n'y a CFONC pas de probleme (et si la paroi est defilante, l'utilisateur le CFONC specifiera dans l'interface ou dans usclim). CFONC - Si IALTYB(IFAC) = IGLISS, la vitesse tangentielle de maillage n'est CFONC pas prise en compte dans les conditions aux limites de paroi pour le CFONC fluide (et si la paroi est defilante, l'utilisateur le specifiera CFONC dans l'interface ou dans usclim). CFONC - Si IALTYB(IFAC) = IVIMPO, la vitesse tangentielle de maillage est CFONC prise en compte comme une vitesse de defilement dans les conditions CFONC aux limites de paroi pour le fluide, sauf si une vitesse de CFONC defilement de paroi a ete specifiee par l'utilisateur dans l'interface CFONC ou dans usclim (auquel cas c'est cette vitesse qui est consideree). CFONC - Si IMPALE(INOD) = 1 pour tous les noeuds d'une face, la vitesse CFONC tangentielle de maillage deduite de ce deplacement sera prise en CFONC compte comme une vitesse de defilement dans les conditions CFONC aux limites de paroi pour le fluide, sauf si une vitesse de CFONC defilement de paroi a ete specifiee par l'utilisateur dans l'interface CFONC ou dans usclim (auquel cas c'est cette vitesse qui est consideree). CFONC CFONC Pour les autres types de conditions aux limites pour le fluide (IENTRE et CFONC ISOLIB), la vitesse de maillage n'a pas d'influence. CFONC CFONC Dans le cas de conditions aux limites non standards, c'est a l'utilisateur CFONC de gerer directement la relation entre les conditions sur la vitesse de CFONC maillage et celles sur la vitesse fluide (les conditions aux limites du CFONC fluide pouvant etre modifiees dans cette routine). CFONC CFONC CFONC CFONC c@fonce C----------------------------------------------------------------------- C ARGUMENTS c@argub CARGU .______________.____._____.______________________________________. CARGU ! NOM !TYPE!MODE ! ROLE ! CARGU !______________!____!_____!______________________________________! CARGU ! IDBIA0 ! E ! -> ! NUMERO DE LA 1ERE CASE LIBRE DANS IA ! CARGU ! IDBRA0 ! E ! -> ! NUMERO DE LA 1ERE CASE LIBRE DANS RA ! CARGU ! ITRALE ! E ! -> ! NUMERO D'ITERATION POUR L'ALE ! CARGU ! NDIM ! E ! -> ! DIMENSION DE L'ESPACE ! CARGU ! NCELET ! E ! -> ! NOMBRE D'ELEMENTS HALO COMPRIS ! CARGU ! NCEL ! E ! -> ! NOMBRE D'ELEMENTS ACTIFS ! CARGU ! NFAC ! E ! -> ! NOMBRE DE FACES INTERNES ! CARGU ! NFABOR ! E ! -> ! NOMBRE DE FACES DE BORD ! CARGU ! NFML ! E ! -> ! NOMBRE DE FAMILLES D ENTITES ! CARGU ! NPRFML ! E ! -> ! NOMBRE DE PROPRIETESE DES FAMILLES ! CARGU ! NNOD ! E ! -> ! NOMBRE DE SOMMETS ! CARGU ! LNDFAC ! E ! -> ! LONGUEUR DU TABLEAU NODFAC (OPTIONNEL! CARGU ! LNDFBR ! E ! -> ! LONGUEUR DU TABLEAU NODFBR (OPTIONNEL! CARGU ! NCELBR ! E ! -> ! NOMBRE D'ELEMENTS AYANT AU MOINS UNE ! CARGU ! ! ! ! FACE DE BORD ! CARGU ! NVAR ! E ! -> ! NOMBRE TOTAL DE VARIABLES ! CARGU ! NSCAL ! E ! -> ! NOMBRE TOTAL DE SCALAIRES ! CARGU ! NPHAS ! E ! -> ! NOMBRE DE PHASES ! CARGU ! NIDEVE NRDEVE! E ! -> ! LONGUEUR DE IDEVEL RDEVEL ! CARGU ! NITUSE NRTUSE! E ! -> ! LONGUEUR DE ITUSER RTUSER ! CARGU ! IFACEL ! TE ! -> ! ELEMENTS VOISINS D'UNE FACE INTERNE ! CARGU ! (2, NFAC) ! ! ! ! CARGU ! IFABOR ! TE ! -> ! ELEMENT VOISIN D'UNE FACE DE BORD ! CARGU ! (NFABOR) ! ! ! ! CARGU ! IFMFBR ! TE ! -> ! NUMERO DE FAMILLE D'UNE FACE DE BORD ! CARGU ! (NFABOR) ! ! ! ! CARGU ! IFMCEL ! TE ! -> ! NUMERO DE FAMILLE D'UNE CELLULE ! CARGU ! (NCELET) ! ! ! ! CARGU ! IPRFML ! TE ! -> ! PROPRIETES D'UNE FAMILLE ! CARGU ! NFML ,NPRFML! ! ! ! CARGU ! IPNFAC ! TE ! -> ! POSITION DU PREMIER NOEUD DE CHAQUE ! CARGU ! (LNDFAC) ! ! ! FACE INTERNE DANS NODFAC (OPTIONNEL)! CARGU ! NODFAC ! TE ! -> ! CONNECTIVITE FACES INTERNES/NOEUDS ! CARGU ! (NFAC+1) ! ! ! (OPTIONNEL) ! CARGU ! IPNFBR ! TE ! -> ! POSITION DU PREMIER NOEUD DE CHAQUE ! CARGU ! (LNDFBR) ! ! ! FACE DE BORD DANS NODFBR (OPTIONNEL)! CARGU ! NODFBR ! TE ! -> ! CONNECTIVITE FACES DE BORD/NOEUDS ! CARGU ! (NFABOR+1) ! ! ! (OPTIONNEL) ! CARGU ! ICODCL ! TE ! <- ! CODE DE CONDITION LIMITES AUX FACES ! CARGU ! (NFABOR,NVAR! ! ! DE BORD ! CARGU ! ! ! ! = 1 -> DIRICHLET ! CARGU ! ! ! ! = 3 -> DENSITE DE FLUX ! CARGU ! ! ! ! = 4 -> GLISSEMT ET U.n=0 (VITESSE) ! CARGU ! ! ! ! = 5 -> FROTTEMT ET U.n=0 (VITESSE) ! CARGU ! ! ! ! = 9 -> ENTREE/SORTIE LIBRE (VITESSE! CARGU ! ! ! ! ENTRANTE EVENTUELLE BLOQUEE ! CARGU ! ITYPFB(NFABOR! TE ! -> ! TYPE DES FACES DE BORD POUR LE FLUIDE! CARGU ! NPHAS )! ! ! ! CARGU ! IALTYB(NFABOR! TE ! <- ! TYPE DES FACES DE BORD POUR LA ! CARGU ! ! TE ! ! VITESSE DE MAILLAGE ! CARGU ! IMPALE(NNOD) ! TE ! -> ! INDICATEUR DE DELACEMENT IMPOSE ! CARGU ! IDEVEL(NIDEVE! TE ! <-> ! TAB ENTIER COMPLEMENTAIRE DEVELOPEMT ! CARGU ! ITUSER(NITUSE! TE ! <-> ! TAB ENTIER COMPLEMENTAIRE UTILISATEUR! CARGU ! IA(*) ! TR ! - ! MACRO TABLEAU ENTIER ! CARGU ! XYZCEN ! TR ! -> ! POINT ASSOCIES AUX VOLUMES DE CONTROL! CARGU ! (NDIM,NCELET ! ! ! ! CARGU ! SURFAC ! TR ! -> ! VECTEUR SURFACE DES FACES INTERNES ! CARGU ! (NDIM,NFAC) ! ! ! ! CARGU ! SURFBO ! TR ! -> ! VECTEUR SURFACE DES FACES DE BORD ! CARGU ! (NDIM,NFABOR)! ! ! ! CARGU ! CDGFAC ! TR ! -> ! CENTRE DE GRAVITE DES FACES INTERNES ! CARGU ! (NDIM,NFAC) ! ! ! ! CARGU ! CDGFBO ! TR ! -> ! CENTRE DE GRAVITE DES FACES DE BORD ! CARGU ! (NDIM,NFABOR)! ! ! ! CARGU ! XYZNOD ! TR ! -> ! COORDONNES DES NOEUDS (OPTIONNEL) ! CARGU ! (NDIM,NNOD) ! ! ! ! CARGU ! VOLUME ! TR ! -> ! VOLUME D'UN DES NCELET ELEMENTS ! CARGU ! (NCELET ! ! ! ! CARGU ! DT(NCELET) ! TR ! -> ! PAS DE TEMPS ! CARGU ! RTP, RTPA ! TR ! -> ! VARIABLES DE CALCUL AU CENTRE DES ! CARGU ! (NCELET,*) ! ! ! CELLULES (INSTANT COURANT OU PREC)! CARGU ! PROPCE ! TR ! -> ! PROPRIETES PHYSIQUES AU CENTRE DES ! CARGU ! (NCELET,*) ! ! ! CELLULES ! CARGU ! PROPFA ! TR ! -> ! PROPRIETES PHYSIQUES AU CENTRE DES ! CARGU ! (NFAC,*) ! ! ! FACES INTERNES ! CARGU ! PROPFB ! TR ! -> ! PROPRIETES PHYSIQUES AU CENTRE DES ! CARGU ! (NFABOR,*) ! ! ! FACES DE BORD ! CARGU ! COEFA, COEFB ! TR ! <-> ! CONDITIONS AUX LIMITES AUX ! CARGU ! (NFABOR,*) ! ! ! FACES DE BORD ! CARGU ! RCODCL ! TR ! <- ! VALEUR DES CONDITIONS AUX LIMITES ! CARGU ! (NFABOR,NVAR! ! ! AUX FACES DE BORD ! CARGU ! ! ! ! RCODCL(1) = VALEUR DU DIRICHLET ! CARGU ! ! ! ! RCODCL(2) = VALEUR DU COEF. D'ECHANGE! CARGU ! ! ! ! EXT. (INFINIE SI PAS D'ECHANGE) ! CARGU ! ! ! ! RCODCL(3) = VALEUR DE LA DENSITE DE ! CARGU ! ! ! ! FLUX (NEGATIF SI GAIN) W/m2 ! CARGU ! ! ! ! POUR LES VITESSES (VISTL+VISCT)*GRADU! CARGU ! ! ! ! POUR LA PRESSION DT*GRADP! CARGU ! ! ! ! POUR LES SCALAIRES ! CARGU ! ! ! ! CP*(VISCLS+VISCT/SIGMAS)*GRADT! CARGU ! DEPALE(NNOD,3! TR ! -> ! DEPLACEMENT AUX NOEUDS ! CARGU ! XYZNO0(3,NNOD! TR ! -> ! COORDONNEES NOEUDS MAILLAGE INITIAL ! CARGU ! RDEVEL(NRDEVE! TR ! <-> ! TAB REEL COMPLEMENTAIRE DEVELOPEMT ! CARGU ! RTUSER(NRTUSE! TR ! <-> ! TAB REEL COMPLEMENTAIRE UTILISATEUR ! CARGU ! RA(*) ! TR ! - ! MACRO TABLEAU REEL ! CARGU !______________!____!_____!______________________________________! c@argue C c@commb CCOMM COMMONS CCOMM .______________.____._____.______________________________________. CCOMM ! NOM !TYPE!MODE ! ROLE ! CCOMM !______________!____!_____!______________________________________! CCOMM !______________!____!_____!______________________________________! c@comme C C TYPE : E (ENTIER), R (REEL), A (ALPHANUMERIQUE), T (TABLEAU) C L (LOGIQUE) .. ET TYPES COMPOSES (EX : TR TABLEAU REEL) C MODE : -> DONNEE, <- RESULTAT, <-> DONNEE MODIFIEE, C - TABLEAU DE TRAVAIL C*********************************************************************** C IMPLICIT NONE C C*********************************************************************** C DONNEES EN COMMON C*********************************************************************** C INCLUDE "paramx.h" INCLUDE "pointe.h" INCLUDE "numvar.h" INCLUDE "optcal.h" INCLUDE "cstphy.h" INCLUDE "cstnum.h" INCLUDE "entsor.h" INCLUDE "parall.h" INCLUDE "period.h" INCLUDE "ihmpre.h" C C*********************************************************************** C C ARGUMENTS C INTEGER IDBIA0 , IDBRA0 , ITRALE INTEGER NDIM , NCELET , NCEL , NFAC , NFABOR INTEGER NFML , NPRFML INTEGER NNOD , LNDFAC , LNDFBR , NCELBR INTEGER NVAR , NSCAL , NPHAS INTEGER NIDEVE , NRDEVE , NITUSE , NRTUSE C INTEGER IFACEL(2,NFAC) , IFABOR(NFABOR) INTEGER IFMFBR(NFABOR) , IFMCEL(NCELET) INTEGER IPRFML(NFML,NPRFML) INTEGER IPNFAC(NFAC+1), NODFAC(LNDFAC) INTEGER IPNFBR(NFABOR+1), NODFBR(LNDFBR) INTEGER ICODCL(NFABOR,NVAR) INTEGER ITYPFB(NFABOR,NPHAS), IALTYB(NFABOR) INTEGER IMPALE(NNOD) INTEGER IDEVEL(NIDEVE), ITUSER(NITUSE), IA(*) C DOUBLE PRECISION XYZCEN(NDIM,NCELET) DOUBLE PRECISION SURFAC(NDIM,NFAC), SURFBO(NDIM,NFABOR) DOUBLE PRECISION CDGFAC(NDIM,NFAC), CDGFBO(NDIM,NFABOR) DOUBLE PRECISION XYZNOD(NDIM,NNOD), VOLUME(NCELET) DOUBLE PRECISION DT(NCELET), RTP(NCELET,*), RTPA(NCELET,*) DOUBLE PRECISION PROPCE(NCELET,*) DOUBLE PRECISION PROPFA(NFAC,*), PROPFB(NFABOR,*) DOUBLE PRECISION COEFA(NFABOR,*), COEFB(NFABOR,*) DOUBLE PRECISION RCODCL(NFABOR,NVAR,3) DOUBLE PRECISION DEPALE(NNOD,3), XYZNO0(3,NNOD) DOUBLE PRECISION RDEVEL(NRDEVE), RTUSER(NRTUSE), RA(*) C C VARIABLES LOCALES C INTEGER IDEBIA, IDEBRA INTEGER IFAC, IEL, II, ICOUL INTEGER IFML, IGR5, IGR6, ICO4, INOD DOUBLE PRECISION DELTA, DELTAA C C*********************************************************************** C C TEST_A_ENLEVER_POUR_UTILISER_LE_SOUS_PROGRAMME_DEBUT C======================================================================= C 0. CE TEST PERMET A L'UTILISATEUR D'ETRE CERTAIN QUE C'EST C SA VERSION DU SOUS PROGRAMME QUI EST UTILISEE C ET NON CELLE DE LA BIBLIOTHEQUE C SI UN FICHIER ISSU DE L'IHM EST UTILISE, LE SOUS-PROGRAMME N'EST C PAS NECESSAIREMENT INDISPENSABLE (RETURN DANS LA VERSION DE C LA BIBLIOTHEQUE) C======================================================================= C WRITE(NFECRA,9000) CALL CSEXIT (1) C 9000 FORMAT( &'@ ',/, &'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@',/, &'@ ',/, &'@ @@ ATTENTION : ARRET LORS DE L''ENTREE DES COND. LIM. ',/, &'@ ********* ',/, &'@ LA METHODE ALE A ETE ENCLENCHEE ',/, &'@ LE SOUS-PROGRAMME UTILISATEUR usalcl DOIT ETRE COMPLETE',/, &'@ ',/, &'@ Le calcul ne sera pas execute. ',/, &'@ ',/, &'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@',/, &'@ ',/) C C C TEST_A_ENLEVER_POUR_UTILISER_LE_SOUS_PROGRAMME_FIN C C======================================================================= C 1. INITIALISATIONS C C======================================================================= C IDEBIA = IDBIA0 IDEBRA = IDBRA0 C C C======================================================================= C 2. REMPLISSAGE DU TABLEAU DES CONDITIONS LIMITES C ON BOUCLE SUR LES FACES DE BORD C ON DETERMINE LA FAMILLE ET SES PROPRIETES C ON IMPOSE LA CONDITION LIMITE C C IMPOSER ICI LES CONDITIONS LIMITES SUR LES FACES DE BORD C C======================================================================= C C Calcul du deplacement au temps courant DELTAA = SIN(3.141596D0*(NTCABS-1)/50.D0) DELTA = SIN(3.141596D0*NTCABS/50.D0) C C BOUCLE SUR LES FACES DE BORD C DO IFAC = 1, NFABOR C C FAMILLE ET PREMIERE PROPRIETE C C En general, la couleur des faces est la premiere propriete : C ICOUL = IPRFML(IFML,1). C C Dans le cas plus specifique de maillages contenant des groupes C (ensembles dont l'intersection peut ne pas etre vide), C il est possible que l'on obtienne plusieurs proprietes par C famille. Ainsi, une face appartenant aux groupes 3 et 5 et C portant la couleur 8 sera dans une famille dont les C proprietes seront -3, -5 et 8 (ordre arbitraire). C Il faut donc, si l'on veut savoir si la face IFAC porte C la couleur 8, balayer toutes les proprietes de la C famille : C IFML = IFMFBR(IFAC ) C DO IPROP = 1, NPRFML C IF(IPRFML(IFML,IPROP).EQ.8) THEN C La face porte la couleur 8 ... C ENDIF C ENDDO C C Par exemple, pour recuperer identifier si une face C appartient au groupe 5 ou 6 ou possede la couleur 4, C on peut par exemple definir des entiers ICO4, IGR5 et IGR6 C et ecrire : C ICO4 = 0 C IGR5 = 0 C IGR6 = 0 C IFML = IFMFBR(IFAC ) C DO IPROP = 1, NPRFML C IF(IPRFML(IFML,IPROP).EQ. 4) ICO4 = 1 C IF(IPRFML(IFML,IPROP).EQ.-5) IGR5 = 1 C IF(IPRFML(IFML,IPROP).EQ.-6) IGR6 = 1 C ENDDO C On remplit alors les CL en faisant des tests sur les indicateurs C ICO4, IGR5, IGR6 C C C -- Recuperation de la famille de la face et du numero de couleur associe C (test valable uniquement si les faces n'ont pas de numero de groupe, C cf. commentaire ci-dessus) IFML = IFMFBR(IFAC ) ICOUL = IPRFML(IFML,1) C C ELEMENT ADJACENT A LA FACE DE BORD C IEL = IFABOR(IFAC) C C C --- On impose en couleur 4 une vitesse de deplacement des faces IF( ICOUL.EQ.4) THEN C IALTYB(IFAC) = IVIMPO RCODCL(IFAC,IUMA,1) = 0.D0 RCODCL(IFAC,IVMA,1) = 0.D0 RCODCL(IFAC,IWMA,1) = (DELTA-DELTAA)/DT(IEL) C C --- On impose en couleur 5 un deplacement des noeuds ELSEIF ( ICOUL.EQ.5) THEN C DO II = IPNFBR(IFAC), IPNFBR(IFAC+1)-1 INOD = NODFBR(II) IF (IMPALE(INOD).EQ.0) THEN DEPALE(INOD,1) = 0.D0 DEPALE(INOD,2) = 0.D0 DEPALE(INOD,3) = DELTA IMPALE(INOD) = 1 ENDIF ENDDO C C --- On impose en couleur 6 un glissement ELSEIF (ICOUL.EQ.6) THEN C IALTYB(IFAC) = IGLISS C C --- On impose ailleurs une condition de bord fixe ELSE C IALTYB(IFAC) = IBFIXE C ENDIF C ENDDO C C---- C FORMATS C---- C C---- C FIN C---- C RETURN END c@z