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 USVPST C ***************** C ------------------------------------------------------------- & ( IDBIA0 , IDBRA0 , IPART , & NDIM , NCELET , NCEL , NFAC , NFABOR , NFML , NPRFML , & NNOD , LNDFAC , LNDFBR , NCELBR , & NVAR , NSCAL , NPHAS , NVLSTA , & NCELPS , NFACPS , NFBRPS , & NIDEVE , NRDEVE , NITUSE , NRTUSE , & ITYPPS , IFACEL , IFABOR , IFMFBR , IFMCEL , IPRFML , & IPNFAC , NODFAC , IPNFBR , NODFBR , & LSTCEL , LSTFAC , LSTFBR , & IDEVEL , ITUSER , IA , & XYZCEN , SURFAC , SURFBO , CDGFAC , CDGFBO , XYZNOD , VOLUME , & DT , RTPA , RTP , PROPCE , PROPFA , PROPFB , & COEFA , COEFB , STATIS , & TRACEL , TRAFAC , TRAFBR , RDEVEL , RTUSER , RA ) C*********************************************************************** C FONCTION : C -------- c@foncb CFONC CFONC ROUTINE UTILISATEUR POUR LA SORTIE DE VARIABLES SUR UN MAILLAGE CFONC DE POST TRAITEMENT DEJA DEFINI CFONC CFONC PAR DEFAUT, DEUX MAILLAGES SONT DEFINIS AUTOMATIQUEMENT : CFONC - LE MAILLAGE VOLUMIQUE (IPART=-1) SELON LA VALEUR DE ICHRVL CFONC - LE MAILLAGE DE BORD (IPART=-2) SELON LA VALEUR DE ICHRBO CFONC DES MAILLAGES SUPPLEMENTAIRES (CELLULES OU FACES INTERNES ET CFONC DE BORD) PEUVENT ETRE DEFINIS ET PARAMETRES A TRAVERS CFONC usdpst.F ET usmpst.F. CFONC CETTE CETTE ROUTINE EST APPELEE UNE FOIS PAR MAILLAGE POST CFONC ET PAR PAS DE TEMPS AUQUEL CE MAILLAGE EST ACTIF 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 ! IPART ! E ! -> ! NUMERO DU MAILLAGE POST ! 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 ! NVLSTA ! E ! -> ! NOMBRE DE VARIABLES STAT. LAGRANGIEN ! CARGU ! NCELPS ! E ! -> ! NOMBRE DE CELLULES DU MAILLAGE POST ! CARGU ! NFACPS ! E ! -> ! NOMBRE DE FACES INTERIEUR POST ! CARGU ! NFBRPS ! E ! -> ! NOMBRE DE FACES DE BORD POST ! CARGU ! NIDEVE NRDEVE! E ! -> ! LONGUEUR DE IDEVEL RDEVEL ! CARGU ! NITUSE NRTUSE! E ! -> ! LONGUEUR DE ITUSER RTUSER ! CARGU ! ITYPPS(3) ! TE ! -> ! INDICATEUR DE PRESENCE (0 OU 1) DE ! CARGU ! ! ! ! CELLULES (1), FACES (2), OU FACES DE ! CARGU ! ! ! ! DE BORD (3) DANS LE MAILLAGE POST ! 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 ! LSTCEL(NCELPS! TE ! -> ! LISTE DES CELLULES DU MAILLAGE POST ! CARGU ! LSTFAC(NFACPS! TE ! -> ! LISTE DES FACES INTERIEURES POST ! CARGU ! LSTFBR(NFBRPS! TE ! -> ! LISTE DES FACES DE BORD POST ! CARGU ! IDEVEL(NIDEVE! TE ! <-> ! TAB ENTIER COMPLEMENTAIRE DEVELOPEMT ! CARGU ! ITUSER(NITUSE! TE ! <-> ! TAB ENTIER COMPLEMENTAIRE UTILISATEUR! CARGU ! IA(*) ! TE ! - ! 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 ! STATIS ! TR ! -> ! STATISTIQUES (LAGRANGIEN) ! CARGU !NCELET,NVLSTA)! ! ! ! CARGU ! TRACEL(*) ! TR ! <-> ! TAB REEL VALEURS CELLULES POST ! CARGU ! TRAFAC(*) ! TR ! <-> ! TAB REEL VALEURS FACES INT. POST ! CARGU ! TRAFBR(*) ! TR ! <-> ! TAB REEL VALEURS FACES BORD POST ! 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 "cstnum.h" INCLUDE "pointe.h" INCLUDE "entsor.h" INCLUDE "optcal.h" INCLUDE "numvar.h" INCLUDE "parall.h" INCLUDE "period.h" C C*********************************************************************** C C ARGUMENTS C INTEGER IDBIA0 , IDBRA0 INTEGER IPART INTEGER NDIM , NCELET , NCEL , NFAC , NFABOR INTEGER NFML , NPRFML INTEGER NNOD , LNDFAC , LNDFBR , NCELBR INTEGER NVAR , NSCAL , NPHAS , NVLSTA INTEGER NCELPS , NFACPS , NFBRPS INTEGER NIDEVE , NRDEVE , NITUSE , NRTUSE C INTEGER ITYPPS(3) 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 LSTCEL(NCELPS), LSTFAC(NFACPS), LSTFBR(NFBRPS) 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), RTPA(NCELET,*), RTP(NCELET,*) DOUBLE PRECISION PROPCE(NCELET,*) DOUBLE PRECISION PROPFA(NFAC,*), PROPFB(NFABOR,*) DOUBLE PRECISION COEFA(NFABOR,*), COEFB(NFABOR,*) DOUBLE PRECISION STATIS(NCELET,NVLSTA) DOUBLE PRECISION TRACEL(NCELPS*3) DOUBLE PRECISION TRAFAC(NFACPS*3), TRAFBR(NFBRPS*3) DOUBLE PRECISION RDEVEL(NRDEVE), RTUSER(NRTUSE) DOUBLE PRECISION RA(*) C C VARIABLES LOCALES C CHARACTER*32 NAMEVR C INTEGER NTINDP INTEGER IEL , IFAC , ILOC , IPHAS, IVAR , ICLT INTEGER IDIMT , II , JJ INTEGER IDIMTE, ITENSO, IENTLA, IVARPR INTEGER IMOM1, IMOM2, IPCMO1, IPCMO2, IDTCM DOUBLE PRECISION POND DOUBLE PRECISION RBID(1) C INTEGER IPASS DATA IPASS /0/ SAVE IPASS C C C*********************************************************************** C C C TEST_A_ENLEVER_POUR_UTILISER_LE_SOUS_PROGRAMME_DEBUT C======================================================================= C IF(1.EQ.1) RETURN C C======================================================================= C TEST_A_ENLEVER_POUR_UTILISER_LE_SOUS_PROGRAMME_FIN C C======================================================================= C 1. TRAITEMENT DES VARIABLES A SORTIR C A RENSEIGNER PAR L'UTILISATEUR aux endroits indiques C======================================================================= C C C Un maillage de posttraitement est une "part" C (au sens EnSight ; les équivalents MED et CGNS sont le maillage C et la base respectivement) C L'utilisateur aura defini ses maillages de posttraitement dans C usdpst (NBPART maillages de posttraitement) C C C La routine est appelee une fois pour chaque maillage IPART. C Pour chaque maillage et pour chacune des variables que l'on C souhaite posttraiter, on doit definir certains parametres et les C passer a la routine PSTEVA qui se charge de l'ecriture effective. C Ces parametres sont : C NAMEVR : nom de la variable C IDIMT : dimension de la variable C IENTLA : dans le cas ou IDIMT est >1, IENTLA permet de specifier C si le tableau contenant la variable est range de maniere C entrelacee X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,... (IENTLA=1) C ou non entrelancee X1,X2,X3,...,Y1,Y2,Y3,...,Z1,Z2,Z3,... C (IENTLA=0) C IVARPR : specifie si le tableau contenant la variable traitee est C defini sur le maillage "parent"/ C En effet, meme si le maillage IPART considere contient C le meme nombre d'elements que le maillage complet "parent" C (NCELPS=NCEL), l'ordre de numerotation des elements n'est pas C forcement le meme. Le tableau TRACEL passe en argument de C PSTEVA est construit selon la numerotation du maillage IPART. C Pour posttraiter une variable contenue dans un tableau RTUSER C par exemple, il faut donc d'abord le reordonner dans le C tableau TRACEL : C DO ILOC = 1, NCELPS C IEL = LSTCEL(ILOC) C TRACEL(ILOC) = RTUSER(IEL) C ENDDO C Une alternative est cependant offerte, pour eviter des copies C inutiles. Si NCELPS=NCEL, on peut directement passer RTUSER C en argument de PSTEVA, en specifiant IVARPR=1, pour avertir C le code que la numerotation est celle du maillage "parent". C L'exemple ci-dessus concerne les cellules, mais la C problematique est la meme avec les faces internes ou faces de C bord. C C C Remarque : attention aux longueurs des noms de variables. C C On autorise ici jusqu'à 32 caracteres , mais selon le C format utilise, les noms peuvent etre tronques : C C - a 19 caracteres pour une sortie EnSight C - a 32 caracteres pour ue sortie MED 2.2 C C La longueur du nom n'est pas limitee en interne, et en C cas de deux variables aux noms tronques ne differant C qu'apres le 19ieme caractere, les lignes correspondantes C apparaitront normalement dans le fichier texte ".case" C EnSight, avec un meme champ de description ; il suffit C alors de renommer un de ces champs dans ce fichier C texte pour corriger le probleme. C C Les caracteres blancs en debut ou fin de chaine sont C supprimes automatiquement. Selon le format utilise, C les caracteres interdits (sous EnSight, les caracteres C ( ) ] [ + - @ ! # * ^ $ / ainsi que les blancs et les C tabulations seront remplaces par le caractere _. C Ceci ne necessite aucune intervention utilisateur C (i.e. inutile d'utiliser ici les anciennes fonctions C Fortran VERLON et UNDSCR). C C C Exemples : C pour le maillage post 2, on sort C la vitesse, la pression, C la temperature imposee aux faces de bord C (et 0 sur les eventuelles faces interieures) C C pour le maillage post 1, on sort C toutes les variables habituellement post-traitables. C C Le codage de l'exemple pour le maillage post 1 est C plus compact. C C C Les exemples donnes ici correspondent aux maillages C definis dans en exemple dans usdpst.F et usmpst.F C C C C C C======================================================================= C 1.1. EXEMPLES DE VARIABLES SUPPLEMENTAIRES A POSTTRAITER SUR LE C MAILLAGE VOLUMIQUE COMPLET (IPART=-1) C======================================================================= C IF (IPART.EQ.-1) THEN C C 1.1.1 SORTIE DE k=1/2(R11+R22+R33) EN MODELE Rij C ------------------------------------------------ C C Phase C a renseigner par l'utilisateur IPHAS = 1 C IF (ITYTUR(IPHAS) .EQ. 3) THEN C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'Energie turb' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 1 C DO ILOC = 1, NCELPS IEL = LSTCEL(ILOC) TRACEL(ILOC) = 0.5D0*( RTP(IEL,IR11(IPHAS)) + & RTP(IEL,IR22(IPHAS)) +RTP(IEL,IR33(IPHAS)) ) ENDDO C C Ecriture effective des valeurs calculees C C Valeurs non entrelacées IENTLA = 0 C C Les variables sont definies sur le tableau de travail ; C on n'utilise pas l'indirection (IVARPR = 0) IVARPR = 0 C C C Le maillage ne contient pas de face interne ni de face C de bord, on peut donc passer un pointeur bidon RBID a la C place de TRAFAC et TRAFBR CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, TRACEL, RBID, RBID) C ENDIF C C C C 1.1.2 SORTIE D'UNE COMBINAISON DE MOMENTS C ----------------------------------------- C On suppose dans cet exemple qu'on dispose de 2 moyennes temporelles C (moments) : pour IMOM=1 C pour IMOM=2 C On souhaite faire une sortie graphique de =-**2 C C Phase C a renseigner par l'utilisateur IPHAS = 1 C IF (NBMOMT .GE. 2) THEN C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Numero des moments : IMOM1 = 1 IMOM2 = 2 C Position dans PROPCE du tableau de cumul temporel des moments C PROPCE(IEL,IPCMOM) IPCMO1 = IPPROC(ICMOME(IMOM1)) IPCMO2 = IPPROC(ICMOME(IMOM2)) C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = '' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 1 C C Le cumul temporel des moments doit etre divise par la variable C de cumul du temps qui est un tableau NCEL ou un reel : C un tableau NCEL si IDTMOM(IMOM) > 0 : PROPCE(IEL,IDTCM) C ou un simple reel si IDTMOM(IMOM) < 0 : DTCMOM(IDTCM) C Pour ameliorer la lisibilite de cet exemple, on suppose que les C moments IMOM1 et IMOM2 ont ete calcules sur le meme temps. C IF(IDTMOM(IMOM1).GT.0) THEN IDTCM = IPPROC(ICDTMO(IDTMOM(IMOM1))) DO ILOC = 1, NCELPS IEL = LSTCEL(ILOC) TRACEL(ILOC) = PROPCE(IEL,IPCMO2)/ & MAX(PROPCE(IEL,IDTCM),EPZERO) & - (PROPCE(IEL,IPCMO1)/ & MAX(PROPCE(IEL,IDTCM),EPZERO))**2 ENDDO ELSEIF(IDTMOM(IMOM1).LT.0) THEN IDTCM = -IDTMOM(IMOM1) DO ILOC = 1, NCELPS IEL = LSTCEL(ILOC) TRACEL(ILOC) = PROPCE(IEL,IPCMO2)/ & MAX(DTCMOM(IDTCM),EPZERO) & - (PROPCE(IEL,IPCMO1)/ & MAX(DTCMOM(IDTCM),EPZERO))**2 ENDDO ENDIF C C Ecriture effective des valeurs calculees C C Valeurs non entrelacées IENTLA = 0 C C Les variables sont definies sur le tableau de travail ; C on n'utilise pas l'indirection (IVARPR = 0) IVARPR = 0 C C C Le maillage ne contient pas de face interne ni de face C de bord, on peut donc passer un pointeur bidon RBID a la C place de TRAFAC et TRAFBR CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, TRACEL, RBID, RBID) C ENDIF C C C C 1.1.3 SORTIE NUMERO DE DOMAINE EN PARALLELE C ------------------------------------------- C C Cette variable est independante du temps, on ne la sort C donc qu'une fois (voir NTINDP plus bas) C IF (IPASS.EQ.0 .AND. IRANGP.GE.0) THEN C IPASS = IPASS + 1 C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'Num processeur' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 1 C DO ILOC = 1, NCELPS IEL = LSTCEL(ILOC) TRACEL(ILOC) = IRANGP + 1 ENDDO C C Ecriture effective des valeurs calculees C C Valeurs non entrelacées IENTLA = 0 C C Les variables sont definies sur le tableau de travail ; C on n'utilise pas l'indirection (IVARPR = 0) IVARPR = 0 C C Cette variable ne depend pas du temps ; C on peut lui affecter un numero de pas de temps negatif C et ne l'ecrire qu'une fois si on veut eviter de C la dupliquer a chaque sortie NTINDP = -1 C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTINDP, TTCABS, TRACEL, RBID, RBID) C ENDIF C Fin du traitement en cas de sortie de la variable C C C C C C C C======================================================================= C 1.2. EXEMPLES DE VARIABLES SUPPLEMENTAIRES A POSTTRAITER SUR LE C MAILLAGE DE BORD COMPLET (IPART=-2) C======================================================================= C ELSE IF (IPART.EQ.-2) THEN C C 1.2.1 TRAITEMENT DE LA MASSE VOLUMIQUE AU BORD C ---------------------------------------------- C C Phase C a renseigner par l'utilisateur IPHAS = 1 C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'Rho bord' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 1 C C C C Valeurs non entrelacées IENTLA = 0 C C On utilise directement le tableau propfb definit sur le C maillage parent IVARPR = 1 C C Le maillage ne contient pas de face interne ni de C cellule, on peut donc passer un pointeur bidon RBID a la C place de TRAFAC et TRACEL CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, RBID, RBID, & PROPFB(1,IPPROB(IROM(IPHAS)))) C C C C C C======================================================================= C 1.3. EXEMPLES DE VARIABLES A POSTTRAITER SUR LES MAILLAGE 1 ET 2 C (IPART=1 OU IPART=2) C======================================================================= C C ELSE IF (IPART.EQ.1 .OR. IPART.EQ.2) THEN C C 1.3.1 TRAITEMENT DE LA VITESSE C ------------------------------ C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'Vitesse interpolee' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 3 C C Valeurs entrelacées IENTLA = 1 C C Phase C a renseigner par l'utilisateur IPHAS = 1 C C Calcul des valeurs de la variable sur les faces internes C Pour simplifier l'exemple, on se contente ici d'une simple C interpolation lineaire. C Dans les calculs paralleles, si l'on utilise les voisins, C il faut faire un echange au prealable, comme d'habitude. C Dans les calculs avec periodicite, il faut egalement le faire C Pour les calculs ou periodicite et parallelisme coexistent, C l'appel a ces routines doit etre fait dans l'ordre C PARCOM puis PERCOM C C a renseigner par l'utilisateur C IF(IRANGP.GE.0) THEN CALL PARCOM (RTP(1,IU(IPHAS))) CALL PARCOM (RTP(1,IV(IPHAS))) CALL PARCOM (RTP(1,IW(IPHAS))) ENDIF C IF(IPERIO.EQ.1) THEN IDIMTE = 1 ITENSO = 0 CALL PERCOM C =========== & ( IDIMTE , ITENSO , & RTP(1,IU(IPHAS)), RTP(1,IU(IPHAS)), RTP(1,IU(IPHAS)), & RTP(1,IV(IPHAS)), RTP(1,IV(IPHAS)), RTP(1,IV(IPHAS)), & RTP(1,IW(IPHAS)), RTP(1,IW(IPHAS)), RTP(1,IW(IPHAS))) ENDIF C DO ILOC = 1, NFACPS C IFAC = LSTFAC(ILOC) II = IFACEL(1, IFAC) JJ = IFACEL(2, IFAC) POND = RA(IPOND-1+IFAC) C TRAFAC(1 + (ILOC-1)*IDIMT ) & = POND * RTP(II, IU(IPHAS)) & + (1.D0 - POND) * RTP(JJ, IU(IPHAS)) TRAFAC(2 + (ILOC-1)*IDIMT ) & = POND * RTP(II, IV(IPHAS)) & + (1.D0 - POND) * RTP(JJ, IV(IPHAS)) TRAFAC(3 + (ILOC-1)*IDIMT ) & = POND * RTP(II, IW(IPHAS)) & + (1.D0 - POND) * RTP(JJ, IW(IPHAS)) C ENDDO C C C Calcul des valeurs de la variable sur les faces de bord C Pour simplifier l'exemple, on se contente ici d'une simple C recopie de la variable de la cellule adjacente. C a renseigner par l'utilisateur C DO ILOC = 1, NFBRPS C IFAC = LSTFBR(ILOC) II = IFABOR(IFAC) C TRAFBR(1 + (ILOC-1)*IDIMT ) = RTP(II, IU(IPHAS)) TRAFBR(2 + (ILOC-1)*IDIMT ) = RTP(II, IV(IPHAS)) TRAFBR(3 + (ILOC-1)*IDIMT ) = RTP(II, IW(IPHAS)) C ENDDO C C Ecriture effective des valeurs calculees C IVARPR = 0 C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, TRACEL, TRAFAC, TRAFBR) C C C 1.3.2 TRAITEMENT DE LA PRESSION C ------------------------------- C C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'Pression interpolee' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 1 C C Valeurs non entrelacées (sans importance pour un scalaire) IENTLA = 0 C C Phase C a renseigner par l'utilisateur IPHAS = 1 C C Numero de variable C a renseigner par l'utilisateur IVAR = IPR(IPHAS) C C Calcul des valeurs de la variable sur les faces internes C Pour simplifier l'exemple, on se contente ici d'une simple C interpolation lineaire. C Dans les calculs paralleles, si l'on utilise les voisins, C il faut faire un echange au prealable, comme d'habitude. C Dans les calculs avec periodicite, il faut egalement le faire C Pour les calculs ou periodicite et parallelisme coexistent, C l'appel a ces routines doit etre fait dans l'ordre C PARCOM puis PERCOM C C a renseigner par l'utilisateur C IF(IRANGP.GE.0) THEN CALL PARCOM (RTP(1,IVAR)) ENDIF IF(IPERIO.EQ.1) THEN IDIMTE = 0 ITENSO = 0 CALL PERCOM C =========== & ( IDIMTE , ITENSO , & RTP(1,IVAR), RTP(1,IVAR), RTP(1,IVAR), & RTP(1,IVAR), RTP(1,IVAR), RTP(1,IVAR), & RTP(1,IVAR), RTP(1,IVAR), RTP(1,IVAR)) ENDIF C DO ILOC = 1, NFACPS C IFAC = LSTFAC(ILOC) II = IFACEL(1, IFAC) JJ = IFACEL(2, IFAC) POND = RA(IPOND-1+IFAC) C TRAFAC(ILOC) = POND * RTP(II, IVAR) & + (1.D0 - POND) * RTP(JJ, IVAR) C ENDDO C C C Calcul des valeurs de la variable sur les faces de bord C Pour simplifier l'exemple, on se contente ici d'une simple C recopie de la variable de la cellule adjacente. C a renseigner par l'utilisateur C DO ILOC = 1, NFBRPS C IFAC = LSTFBR(ILOC) II = IFABOR(IFAC) C TRAFBR(ILOC) = RTP(II, IVAR) C ENDDO C C Ecriture effective des valeurs calculees C IVARPR = 0 C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, TRACEL, TRAFAC, TRAFBR) C C C 1.3.3 TRAITEMENT DE LA TEMPERATURE AU BORD C ------------------------------------------ C C Phase C a renseigner par l'utilisateur IPHAS = 1 C IF(ISCALT(IPHAS).GT.0) THEN C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'Temperature de bord' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 1 C C Valeurs non entrelacées (sans importance pour un scalaire) IENTLA = 0 C C Annulation de la variable sur les faces internes C a renseigner par l'utilisateur C DO ILOC = 1, NFACPS TRAFAC(ILOC) = 0.D0 ENDDO C C Calcul des valeurs de la variable sur les faces de bord C a renseigner par l'utilisateur C IVAR = ISCA(ISCALT(IPHAS)) ICLT = ICLRTP(IVAR,ICOEF) C DO ILOC = 1, NFBRPS IFAC = LSTFBR(ILOC) II = IFABOR(IFAC) TRAFBR(ILOC) = & COEFA(IFAC,ICLT)+COEFB(IFAC,ICLT)*RTP(II, IVAR) ENDDO C C Ecriture effective des valeurs calculees C IVARPR = 0 C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, TRACEL, TRAFAC, TRAFBR) C ENDIF C C C C C Les exemples suivants montrent les differentes facons de C sortir la meme variable (entrelacee ou non, avec indirection C ou pas) C C 1.3.4 TRAITEMENT DES CENTRES DE GRAVITE, sous forme entrelacee C -------------------------------------------------------------- C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'cdg faces (entrelaces)' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 3 C C Valeurs entrelacées IENTLA = 1 C DO ILOC = 1, NFACPS C IFAC = LSTFAC(ILOC) C TRAFAC(1 + (ILOC-1)*IDIMT ) = CDGFAC(1, IFAC) TRAFAC(2 + (ILOC-1)*IDIMT ) = CDGFAC(2, IFAC) TRAFAC(3 + (ILOC-1)*IDIMT ) = CDGFAC(3, IFAC) C ENDDO C C Calcul des valeurs de la variable sur les faces de bord C DO ILOC = 1, NFBRPS C IFAC = LSTFBR(ILOC) C TRAFBR(1 + (ILOC-1)*IDIMT ) = CDGFBO(1, IFAC) TRAFBR(2 + (ILOC-1)*IDIMT ) = CDGFBO(2, IFAC) TRAFBR(3 + (ILOC-1)*IDIMT ) = CDGFBO(3, IFAC) C ENDDO C C Ecriture effective des valeurs calculees C IVARPR = 0 C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, TRACEL, TRAFAC, TRAFBR) C C C 1.3.5 TRAITEMENT DES CENTRES DE GRAVITE, sous forme non entrelacee C ------------------------------------------------------------------ C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'cdg faces (non entrelaces)' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 3 C C Valeurs non entrelacées IENTLA = 0 C DO ILOC = 1, NFACPS C IFAC = LSTFAC(ILOC) C TRAFAC(ILOC) = CDGFAC(1, IFAC) TRAFAC(ILOC + NFACPS) = CDGFAC(2, IFAC) TRAFAC(ILOC + 2*NFACPS) = CDGFAC(3, IFAC) C ENDDO C C Calcul des valeurs de la variable sur les faces de bord C DO ILOC = 1, NFBRPS C IFAC = LSTFBR(ILOC) C TRAFBR(ILOC) = CDGFBO(1, IFAC) TRAFBR(ILOC + NFBRPS) = CDGFBO(2, IFAC) TRAFBR(ILOC + 2*NFBRPS) = CDGFBO(3, IFAC) C ENDDO C C Ecriture effective des valeurs calculees C IVARPR = 0 C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, TRACEL, TRAFAC, TRAFBR) C C C 1.3.6 TRAITEMENT DES CENTRES DE GRAVITE, avec indirection C ------------------------------------------------------------------ C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'cdg faces (indirection)' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 3 C C Valeurs entrelacées IENTLA = 1 C C Ecriture effective des valeurs calculees C IVARPR = 1 C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, RBID, CDGFAC, CDGFBO) C C C C C C======================================================================= C 1.4. EXEMPLES DE VARIABLES A POSTTRAITER SUR LES MAILLAGE 3 ET 4 C (IPART=3 OU IPART=4) C======================================================================= C ELSE IF (IPART.GE.3 .AND. IPART.LE.4) THEN C C C 1.4.1 TRAITEMENT DE LA VITESSE C ------------------------------ C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'Vitesse' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 3 C C Valeurs non entrelacées IENTLA = 0 C C Phase C a renseigner par l'utilisateur IPHAS = 1 C C Numero de variable C a renseigner par l'utilisateur IVAR = IU(IPHAS) C C Calcul des valeurs de la variable sur les faces internes C DO ILOC = 1, NFACPS C IFAC = LSTFAC(ILOC) II = IFACEL(1, IFAC) JJ = IFACEL(2, IFAC) POND = RA(IPOND-1+IFAC) C TRAFAC(ILOC) & = POND * RTP(II, IU(IPHAS)) & + (1.D0 - POND) * RTP(JJ, IU(IPHAS)) TRAFAC(ILOC + NFACPS) & = POND * RTP(II, IV(IPHAS)) & + (1.D0 - POND) * RTP(JJ, IV(IPHAS)) TRAFAC(ILOC + 2*NFACPS) & = POND * RTP(II, IW(IPHAS)) & + (1.D0 - POND) * RTP(JJ, IW(IPHAS)) C ENDDO C C Calcul des valeurs de la variable sur les faces de bord C Pour simplifier l'exemple, on se contente ici d'une simple C recopie de la variable de la cellule adjacente. C a renseigner par l'utilisateur C DO ILOC = 1, NFBRPS C IFAC = LSTFBR(ILOC) II = IFABOR(IFAC) C TRAFBR(ILOC ) = RTP(II, IU(IPHAS)) TRAFBR(ILOC + NFBRPS) = RTP(II, IV(IPHAS)) TRAFBR(ILOC + 2*NFBRPS) = RTP(II, IW(IPHAS)) C ENDDO C C Ecriture effective des valeurs calculees C IF (IPART.EQ.5) THEN IVARPR = 1 ELSE IVARPR = 0 ENDIF C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, RTP(1,IVAR), TRAFAC, TRAFBR) C C C 1.4.2 TRAITEMENT DE LA PRESSION C ------------------------------- C C C Initialisation C pas d'intervention utilisateur requise DO II = 1, 32 NAMEVR (II:II) = ' ' ENDDO C C Nom de la variable C a renseigner par l'utilisateur NAMEVR = 'Pression' C C Dimension de la variable (3 = vecteur, 1=scalaire) C a renseigner par l'utilisateur IDIMT = 1 C C Valeurs non entrelacées (sans importance pour un scalaire) IENTLA = 0 C C Phase C a renseigner par l'utilisateur IPHAS = 1 C C Numero de variable C a renseigner par l'utilisateur IVAR = IPR(IPHAS) C C Calcul des valeurs de la variable sur les faces internes C DO ILOC = 1, NFACPS C IFAC = LSTFAC(ILOC) II = IFACEL(1, IFAC) JJ = IFACEL(2, IFAC) POND = RA(IPOND-1+IFAC) C TRAFAC(ILOC) & = POND * RTP(II, IVAR) & + (1.D0 - POND) * RTP(JJ, IVAR) C ENDDO C C Calcul des valeurs de la variable sur les faces de bord C Pour simplifier l'exemple, on se contente ici d'une simple C recopie de la variable de la cellule adjacente. C a renseigner par l'utilisateur C DO ILOC = 1, NFBRPS C IFAC = LSTFBR(ILOC) II = IFABOR(IFAC) C TRAFBR(ILOC) = RTP(II, IVAR) C ENDDO C C Ecriture effective des valeurs calculees C IF (IPART.EQ.5) THEN IVARPR = 1 ELSE IVARPR = 0 ENDIF C CALL PSTEVA(IPART , NAMEVR, IDIMT, IENTLA, IVARPR, C =========== & NTCABS, TTCABS, RTP(1,IVAR), TRAFAC, TRAFBR) C C ENDIF C Fin du test sur le numero de maillage post. C C RETURN C END c@z