divu
C DIVU SOURCE CB215821 24/04/12 21:15:37 11897 SUBROUTINE DIVU C----------------------------------------------------------------------- C Calcul la divergence d'un champ de vecteur (en général la vitesse) C discretise dans l'espace de Raviart Thomas de plus petit degre. C----------------------------------------------------------------------- C C On obtient la DIVERGENCE de la vitesse en sommant les débits sur C chaque élément, chaque débit étant de support la normale sortante. C C'est pourquoi nous avons besoin du MCHAML d'orientation des normales C de référence afin de modifier la valeur algébrique du débit. C C--------------------------- C Phrase d'appel (GIBIANE) : C--------------------------- C C CHP1 = DIVU MMODEL TABLE1 CHP2 CHAM1 (CHP3 (CHP4)) C C------------------------ C Opérandes et résultat : C------------------------ C C CHP1 : CHAMPOINT centre contenant la divergence de la vitesse C MMODEL : Objet MMODEL spécifiant la formulation C TABLE1 : Objet table DOMAINE regroupant les infos géometriques C CHP2 : CHAMPOINT contenant le debit aux faces C CHAM1 : MCHAML sens de la normale à la face (1=out , -1=in) C CHP3 : CHAMPOIN contenant une fonction aux centres des elements C CHP4 : CHAMPOIN contenant les valeurs de cette fonction sur les C limites du domaine(le support est contitué par des points face) C C----------------------------------------------------------------------- C C Langage : ESOPE + FORTRAN77 C C Auteurs : F.DABBENE 01/94 C Complements : C. LE POTIER ET F. AURIOL 20/00 C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) * -INC PPARAM -INC CCOPTIO -INC SMCHAML -INC SMCHPOI -INC SMELEME -INC SMMODEL -INC SMTABLE * SEGMENT IPMAHY INTEGER MAHYBR(NSOUS) ENDSEGMENT * CHARACTER*4 NOMTOT(1) CHARACTER*8 CHARIN,LETYPE * * Initialisations * CHARIN = 'MAILLAGE' * * Lecture du MMODEL * IF (IERR.NE.0) RETURN * * Lecture de la TABLE domaine * IPTABL = 0 IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN IPGEOM = IOBRE IF (IERR.NE.0) RETURN IELTFA = IOBRE IF (IERR.NE.0) RETURN IPCENT = IOBRE IF (IERR.NE.0) RETURN IPFACE = IOBRE IF (IERR.NE.0) RETURN IFACEL = IOBRE * * Lecture du CHAMPOINT de debit (nom de composantes FLUX) * IF (IERR.NE.0) RETURN * * Lecture du CHAMELEM * IF(IERR .NE. 0) RETURN C CALL LEKTAB(IPTABL,'XXNORMAE',IPCHEL) C IF (IERR.NE.0) RETURN * * Lecture du CHAMPOINT de la fonction aux centres * IPFONC=0 IF (IERR.NE.0) RETURN IF(IRET2.EQ.1)THEN NOMTOT(1) = 'SCAL' IF (IERR.NE.0) RETURN ICLIM=0 * VERRUE * CALL ECCHPO(ipfonc) ENDIF * * Test CHAMPOINT de FLUX * NOMTOT(1) = 'FLUX' IF (IERR.NE.0) RETURN * * Test de la formulation contenu dans MMODEL * MMODEL = IPMODE SEGACT MMODEL NSOUS = KMODEL(/1) SEGINI IPMAHY IDARCY = 0 IPT1=IPGEOM IPT2=IPGEOM DO 10 ISOUS=1,NSOUS IF(NSOUS.GT.1)THEN SEGACT IPT2 IPT1=IPT2.LISOUS(ISOUS) ENDIF IMODEL = KMODEL(ISOUS) SEGACT IMODEL LETYPE = FORMOD(1) IF (LETYPE.EQ.'DARCY') THEN IDARCY = IDARCY + 1 MAHYBR(ISOUS) = IPT1 ENDIF 10 CONTINUE IF (IDARCY.EQ.0) THEN SEGSUP IPMAHY MOTERR = LETYPE RETURN ENDIF * * Récuperation des pointeurs ELTFA pour les zones ou DARCY est defini * MELEME = IELTFA SEGACT MELEME LZONES = LISOUS(/1) IF (LZONES.EQ.0) LZONES = 1 IPT1 = IPGEOM SEGACT IPT1 DO 30 ISOUS=1,NSOUS IMAMEL = MAHYBR(ISOUS) IF (IMAMEL.NE.0) THEN DO 20 ISZ=1,LZONES IF (LZONES.EQ.1) THEN IPT2 = IPT1 IPT3 = MELEME ELSE IPT2 = IPT1.LISOUS(ISZ) IPT3 = LISOUS(ISZ) ENDIF IF (IPT2.EQ.IMAMEL) THEN MAHYBR(ISOUS) = IPT3 GOTO 30 ENDIF 20 CONTINUE IF (IMAMEL.EQ.MAHYBR(ISOUS)) THEN MOTERR(1:8) = ' MODELE ' MOTERR(1:16) = ' ELTFA ' INTERR(1) = ISOUS SEGSUP IPMAHY RETURN ENDIF ENDIF 30 CONTINUE * * Test du SUPPORT du MCHAML d'orientation : On teste qu'à chaque zone * du MODELE ou Darcy est défini correspond une zone du MCHAML * MCHELM = IPCHEL SEGACT MCHELM NCH1 = IMACHE(/1) NBOK = 0 DO 50 ISOUS=1,NSOUS IMAMEL = MAHYBR(ISOUS) IF (IMAMEL.NE.0) THEN DO 40 JSOUS=1,NCH1 IF (IMACHE(JSOUS).EQ.IMAMEL) NBOK=NBOK+1 40 CONTINUE ENDIF 50 CONTINUE SEGSUP IPMAHY IF (NBOK.NE.NCH1) THEN MOTERR(1:8) = ' ORIENT ' MOTERR(9:16)= ' ELTFA ' RETURN ENDIF * * Calcul de la divergence du champ de vecteur connu via ses flux * IF(IPFONC.NE.0)THEN * CALL ECCHPO(ipfonc) * CALL ECCHPO(iret) MCHPOI=IPFONC MSOUPO=IPCHP(1) MPOVAL=IPOVAL ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales