C LAPVF2 SOURCE CB215821 20/11/25 13:33:26 10792 SUBROUTINE LAPVF2(MPOVA1,MPOVA2,MPOVA3,IK3,MELEMC,MELEMF,MELEFE, & MELEMA,MELVA1,IPADF,IPADC,L,NUTOEL, & PMATRI,PIMATR,MELEMP) C--------------------------------------------------------- C Evaluation des matrices élémentaires du laplacien en VF C--------------------------------------------------------- C C-------------------------- C Paramètre Entrée/Sortie : C-------------------------- C E/ MPOVA1 : MPOVAL du CHPO FACE contenant l'aire des faces (ACTIF) C E/ MPOVA2 : MPOVAL du CHPO FACE contenant une normale (ACTIF) C E/ MPOVA3 : MPOVAL du CHPO CENTRE contenant la viscosité (ACTIF) C E/ MELEMC : MELEME CENTRE de la table DOMAINE (ACTIF) C E/ MELEMF : MELEME FACE de la table DOMAINE (ACTIF) C E/ MELEFE : MELEME FACEL de la table DOMAINE (ACTIF) C E/ MELEMA : MELEME ELTFA de la table DOMAINE (ACTIF) C E/ MELVA1 : MELVAL donnant l'orientation de la normale C E/ IPADF : LISTENTI de correspondance numérotation pour FACE C E/ IPADC : LISTENTI de correspondance numérotation pour CENTRE C E/ L : Indice du sous-objet MAILLAGE à traiter (<=NBSOUS) C E/ NUTOEL : Nombre d'éléments déjà traité C /S PMATRI : MATRIK contenant l'ensemble des infos sur la matrice C /S PIMATR : IMATRI contenant les mat.elem. pour le bloc traité C E/S MELEMP : Connectivité des inconnues primales C---------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C -INC PPARAM -INC CCOPTIO CCCCC-INC CCGEOME -INC SMCHPOI -INC SMCHAML -INC SMELEME -INC SMMATRIK -INC SMLENTI -INC SMCOORD C POINTEUR MELEMC.MELEME,MELEMF.MELEME,MELEFE.MELEME POINTEUR MELEMA.MELEME,MELEOP.MELEME,MELEMP.MELEME POINTEUR PMATRI.MATRIK POINTEUR PIMATR.IMATRI POINTEUR IPADC.MLENTI,IPADF.MLENTI REAL*8 NORM(3),XYZDIS(3) C C- Création des connéctivités associées à l'inconnue primale dans C- le cas du schéma VF standard (à 5 points : croix NSEO + CENTRE) C NBELEM = MELEMA.NUM(/2) NBFACE = MELEMA.NUM(/1) NBNN = NBFACE+1 NBSOUS = 0 NBREF = 0 SEGINI MELEOP IF (NBFACE.EQ.3) MELEOP.ITYPEL = 5 IF (NBFACE.EQ.4) MELEOP.ITYPEL = 9 IF (NBFACE.EQ.5) MELEOP.ITYPEL = 6 IF (NBFACE.EQ.6) MELEOP.ITYPEL = 7 DO KE= 1,NBELEM NC = MELEMC.NUM(1,KE+NUTOEL) MELEOP.NUM(1,KE) = NC DO KF= 1, NBFACE NF = MELEMA.NUM(KF,KE) NFL = IPADF.LECT(NF) NC1 = MELEFE.NUM(1,NFL) NC2 = MELEFE.NUM(3,NFL) IF (NC1.EQ.NC) THEN MELEOP.NUM(KF+1,KE)= NC2 ELSE MELEOP.NUM(KF+1,KE)= NC1 ENDIF END DO END DO IF ((MELEMP.LISOUS(/1)).GT.1) THEN MELEMP.LISOUS(L) = MELEOP ELSE MELEMP = MELEOP ENDIF C C- Création du segment MATRIK associé à la zone considérée C PMATRI.IRIGEL(1,1) = MELEMP PMATRI.IRIGEL(2,1) = MELEMC NP = NBFACE + 1 MP = 1 NBEL = NBELEM SEGINI IPM1 PIMATR.LIZAFM(L,1)= IPM1 C C= Calcul des coefficient des matrices élémentaires C C NUMCG et NUMCL : Numero Global et Local du point CENTRE C NUMFG et NUMFL : Numero Global et Local de la FACE considérée C NUMVG et NUMVL : Numero Global et Local du point CENTRE C de l'élément voisin pour la face considérée C DIFF1 : Coeff de Diffusion associé à l'élément C SURF : Surface de la FACE C SIGNE : Orientation de la normale C NORM : Normale sortante C DO I=1,NBELEM NUMCG = MELEOP.NUM(1,I) NUMCL = IPADC.LECT(NUMCG) ICOCG = (NUMCG-1)*(IDIM+1) DIFF1 = MPOVA3.VPOCHA(NUMCL*(1-IK3)+IK3,1) DO J=2,NBFACE+1 NUMVG = MELEOP.NUM(J,I) NUMVL = IPADC.LECT(NUMVG) ICOVG = (NUMVG-1)*(IDIM+1) IF (NUMCG.NE.NUMVG) THEN NUMFG = MELEMA.NUM(J-1,I) NUMFL = IPADF.LECT(NUMFG) ICOFG = (NUMFG-1)*(IDIM+1) SURF = MPOVA1.VPOCHA(NUMFL,1) SIGNE = MELVA1.VELCHE(J-1,I) C C- Calcul de projection et de distance C DIST = 0.D0 SCAL = 0.D0 DO K= 1,IDIM NORM(K) = MPOVA2.VPOCHA(NUMFL,K) * SIGNE XYZDIS(K) = XCOOR(ICOVG+K) - XCOOR(ICOCG+K) DIST = DIST + XYZDIS(K) * XYZDIS(K) SCAL = SCAL + XYZDIS(K) * NORM(K) END DO DIST = SQRT(DIST) SCAL = SCAL / DIST C C- Evaluation de la diffusion DIFF assurant la continuité du flux C- avec FLUX = DIFF (Cgauche - Cdroit) C- DIFF contient donc une pseudo-longueur entre les points CENTRE C H1 = 0.D0 H2 = 0.D0 DO K= 1,IDIM H1 = H1 + (XCOOR(ICOFG+K) - XCOOR(ICOCG+K))*NORM(K) H2 = H2 + (XCOOR(ICOVG+K) - XCOOR(ICOFG+K))*NORM(K) END DO H1 = ABS(H1) H2 = ABS(H2) DIFF2 = MPOVA3.VPOCHA(NUMVL*(1-IK3)+IK3,1) DIFF = DIFF1*DIFF2 / (H2*DIFF1 + H1*DIFF2) C C- Calcul des coefficients de la matrice couplant C- l'inconnue primale NUMVG avec la duale NUMCG C IPM1.AM(I,J,1) = -DIFF*SCAL*SURF IPM1.AM(I,1,1) = IPM1.AM(I,1,1) - IPM1.AM(I,J,1) ELSE C C- Condition au limite naturelle à la frontière du domaine (flux nul) C IPM1.AM(I,J,1)= 0.D0 ENDIF END DO END DO C C- Ménage C SEGDES IPM1 C RETURN END