pente3
C PENTE3 SOURCE CB215821 20/11/25 13:35:39 10792 & MPOGRA,MPOMIN,MPOMAX,MPOALP) C C************************************************************************ C C PROJET : CASTEM 2000 C C NOM : PENTE3 C C DESCRIPTION : Cette subroutine est appellée par la subroutine C PENTE1 (calcul du gradient d'un CHPOINT 2D de type C CENTRE) C Elle contient la partie du calcul du limiteur. C C LANGUAGE : ESOPE 2000 avec extensions CISI C C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/TTMF C AUTEUR (Modif.) : R. MOREL, DRN/DMT/SEMT/TTMF C C************************************************************************ C C C APPELES (E/S) : none C C APPELES (Calcul) : none C C C************************************************************************ C C ENTREES : NFAC : nombre de faces C C MELEFL : pointeur du MELEME 'FACEL' C C MLECEN : pointeur de MLENTI qui contient la table C numerotation global/local de CENTREs C C NCOMP : nombre de composantes de CHPOINT dont on veut C calculer les pentes C C MPOCHP : pointeur de MPOVAL de CHPOINT dont on veut le C gradient C C MPOGRA : pointeur de MPOVAL du gradient C C MPOMIN : pointeur de MPOVAL du minimum sur le stencil C C MPOMAX : pointeur de MPOVAL du maximum sur le stencil C C SORTIES : MPOALP : pointeur de MELVAL du limiteur C C************************************************************************ C C HISTORIQUE (Anomalies et modifications éventuelles) C C HISTORIQUE : Cree le 6-4-1998 C C HISTORIQUE : Modifie le 20-10-1998 pour extension 3D C C************************************************************************ C IMPLICIT INTEGER(I-N) -INC PPARAM -INC CCOPTIO C C**** Variables de CCOPTIO C C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES C & ,IECHO, IIMPI, IOSPI C & ,IDIM CC & ,MCOORD C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU C & ,NORINC,NORVAL,NORIND,NORVAD C & ,NUCROU, IPSAUV C INTEGER NFAC,NCOMP & ,NLCF,NGCF,NGCEG,NLCEG,NGCED,NLCED & ,INDCEL,I1,IGR,IDIMP1 C C**** Pour l'instant 2D C REAL*8 XG,YG,XD,YD,XC,YC,DXG,DYG,DXD,DYD,DG,DD,DT & ,PHI,PHIMAX,PHIMIN,DPHIST,GRADX,GRADY,DPHI0,DPHI1,ALPHA & ,VALEUR C C**** Extension 3D C REAL*8 ZG,ZD,ZC,DZG,DZD,GRADZ C C -INC SMCOORD -INC SMCHPOI -INC SMELEME -INC SMLENTI POINTEUR MPOMIN.MPOVAL, MPOMAX.MPOVAL, MPOALP.MPOVAL, & MPOCHP.MPOVAL, MPOGRA.MPOVAL POINTEUR MELEFL.MELEME, MLECEN.MLENTI C C**** N.B. Tous les pointeurs ici sont déjà activés! C C**** Maillage FACEL C Boucle sur les faces C C C**** NGCEG = Numero global centre d'elt "gauche" C NLCEG = Numero local centre d'elt "gauche" C NGCF = " global centre de face C NLCF = numero local centre de face C NGCEG = Numero global centre d'elt "gauche" C NLCEG = Numero local centre d'elt "gauche" C IDIMP1 = IDIM+1 C C Cas de la dimension 2 C IF (IDIM .EQ. 2) THEN DO NLCF = 1, NFAC NGCEG = MELEFL.NUM(1,NLCF) NLCEG = MLECEN.LECT(NGCEG) NGCF = MELEFL.NUM(2,NLCF) NGCED = MELEFL.NUM(3,NLCF) NLCED = MLECEN.LECT(NGCED) IF(NGCEG .EQ. NGCED)THEN C C********** Limiteur dans le cas mur C C C********** Coordonees et parametres geometriques C C C XCOOR : table de coordonnes de points; C pour le point de numero global NG C X_NG = XCOOR((NG-1)*(IDIM+1)+1) C Y_NG = XCOOR((NG-1)*(IDIM+1)+2) C Z_NG = XCOOR((NG-1)*(IDIM+1)+3) C (dans notre cas IDIM=2, i.e. 2D) C INDCEL = (NGCEG-1)*IDIMP1 XG = XCOOR(INDCEL+1) YG = XCOOR(INDCEL+2) INDCEL = (NGCF-1)*IDIMP1 XC = XCOOR(INDCEL+1) YC = XCOOR(INDCEL+2) DXG = XC - XG DYG = YC - YG C C********** Boucle sur le composantes C DO I1 = 1, NCOMP IGR = 2*I1 - 1 C C************* Limiteur C PHI = MPOCHP.VPOCHA(NLCEG,I1) PHIMAX = MPOMAX.VPOCHA(NLCEG,I1) PHIMIN = MPOMIN.VPOCHA(NLCEG,I1) DPHIST = PHIMAX - PHIMIN GRADX = MPOGRA.VPOCHA(NLCEG,IGR) GRADY = MPOGRA.VPOCHA(NLCEG,IGR+1) DPHI0 = GRADX * DXG + GRADY * DYG IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN VALEUR = 1.0D0 ELSEIF(DPHI0 .GT. 0.0D0)THEN DPHI1 = PHIMAX - PHI ELSE DPHI1 = PHIMIN - PHI ENDIF ENDDO ELSE C C******* NGCEG != NGCED C INDCEL = (NGCEG-1)*IDIMP1 XG = XCOOR(INDCEL+1) YG = XCOOR(INDCEL+2) INDCEL = (NGCED-1)*IDIMP1 XD = XCOOR(INDCEL+1) YD = XCOOR(INDCEL+2) INDCEL = (NGCF-1)*IDIMP1 XC = XCOOR(INDCEL+1) YC = XCOOR(INDCEL+2) C DXG = XC - XG DYG = YC - YG DXD = XC - XD DYD = YC - YD DG = DXG * DXG + DYG * DYG DG = SQRT(DG) DD = DXD * DXD + DYD * DYD DD = SQRT(DD) DT = DG + DD C C********** Boucle sur le composantes C DO I1 = 1, NCOMP IGR = 2*I1 - 1 C C************* Limiteur a gauche C PHI = MPOCHP.VPOCHA(NLCEG,I1) PHIMAX = MPOMAX.VPOCHA(NLCEG,I1) PHIMIN = MPOMIN.VPOCHA(NLCEG,I1) DPHIST = PHIMAX - PHIMIN GRADX = MPOGRA.VPOCHA(NLCEG,IGR) GRADY = MPOGRA.VPOCHA(NLCEG,IGR+1) DPHI0 = GRADX * DXG + GRADY * DYG IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN VALEUR = 1.0D0 ELSEIF(DPHI0 .GT. 0.0D0)THEN DPHI1 = PHIMAX - PHI ELSE DPHI1 = PHIMIN - PHI ENDIF C C************* Limiteur a droite C PHI = MPOCHP.VPOCHA(NLCED,I1) PHIMAX = MPOMAX.VPOCHA(NLCED,I1) PHIMIN = MPOMIN.VPOCHA(NLCED,I1) DPHIST = PHIMAX - PHIMIN GRADX = MPOGRA.VPOCHA(NLCED,IGR) GRADY = MPOGRA.VPOCHA(NLCED,IGR+1) DPHI0 = GRADX * DXD + GRADY * DYD IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN VALEUR = 1.0D0 ELSEIF(DPHI0 .GT. 0.0D0)THEN DPHI1 = PHIMAX - PHI ELSE DPHI1 = PHIMIN - PHI ENDIF ENDDO ENDIF ENDDO C C Cas de la dimension 3 C ELSE DO NLCF = 1, NFAC NGCEG = MELEFL.NUM(1,NLCF) NLCEG = MLECEN.LECT(NGCEG) NGCF = MELEFL.NUM(2,NLCF) NGCED = MELEFL.NUM(3,NLCF) NLCED = MLECEN.LECT(NGCED) IF(NGCEG .EQ. NGCED)THEN C C********** Limiteur dans le cas mur C C C********** Coordonees et parametres geometriques C C C XCOOR : table de coordonnes de points; C pour le point de numero global NG C X_NG = XCOOR((NG-1)*(IDIM+1)+1) C Y_NG = XCOOR((NG-1)*(IDIM+1)+2) C Z_NG = XCOOR((NG-1)*(IDIM+1)+3) C INDCEL = (NGCEG-1)*IDIMP1 XG = XCOOR(INDCEL+1) YG = XCOOR(INDCEL+2) ZG = XCOOR(INDCEL+3) INDCEL = (NGCF-1)*IDIMP1 XC = XCOOR(INDCEL+1) YC = XCOOR(INDCEL+2) ZC = XCOOR(INDCEL+3) DXG = XC - XG DYG = YC - YG DZG = ZC - ZG C C********** Boucle sur le composantes C DO I1 = 1, NCOMP IGR = IDIM*(I1-1)+1 C C************* Limiteur C PHI = MPOCHP.VPOCHA(NLCEG,I1) PHIMAX = MPOMAX.VPOCHA(NLCEG,I1) PHIMIN = MPOMIN.VPOCHA(NLCEG,I1) DPHIST = PHIMAX - PHIMIN GRADX = MPOGRA.VPOCHA(NLCEG,IGR) GRADY = MPOGRA.VPOCHA(NLCEG,IGR+1) GRADZ = MPOGRA.VPOCHA(NLCEG,IGR+2) DPHI0 = GRADX * DXG + GRADY * DYG + GRADZ * DZG IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN VALEUR = 1.0D0 ELSEIF(DPHI0 .GT. 0.0D0)THEN DPHI1 = PHIMAX - PHI ELSE DPHI1 = PHIMIN - PHI ENDIF ENDDO ELSE C C******* NGCEG != NGCED C INDCEL = (NGCEG-1)*IDIMP1 XG = XCOOR(INDCEL+1) YG = XCOOR(INDCEL+2) ZG = XCOOR(INDCEL+3) INDCEL = (NGCED-1)*IDIMP1 XD = XCOOR(INDCEL+1) YD = XCOOR(INDCEL+2) ZD = XCOOR(INDCEL+3) INDCEL = (NGCF-1)*IDIMP1 XC = XCOOR(INDCEL+1) YC = XCOOR(INDCEL+2) ZC = XCOOR(INDCEL+3) C DXG = XC - XG DYG = YC - YG DZG = ZC - ZG DXD = XC - XD DYD = YC - YD DZD = ZC - ZD DG = DXG * DXG + DYG * DYG + DZG * DZG DG = SQRT(DG) DD = DXD * DXD + DYD * DYD + DZD * DZD DD = SQRT(DD) DT = DG + DD C C********** Boucle sur le composantes C DO I1 = 1, NCOMP IGR = IDIM*(I1-1)+1 C C************* Limiteur a gauche C PHI = MPOCHP.VPOCHA(NLCEG,I1) PHIMAX = MPOMAX.VPOCHA(NLCEG,I1) PHIMIN = MPOMIN.VPOCHA(NLCEG,I1) DPHIST = PHIMAX - PHIMIN GRADX = MPOGRA.VPOCHA(NLCEG,IGR) GRADY = MPOGRA.VPOCHA(NLCEG,IGR+1) GRADZ = MPOGRA.VPOCHA(NLCEG,IGR+2) DPHI0 = GRADX * DXG + GRADY * DYG + GRADZ * DZG IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN VALEUR = 1.0D0 ELSEIF(DPHI0 .GT. 0.0D0)THEN DPHI1 = PHIMAX - PHI ELSE DPHI1 = PHIMIN - PHI ENDIF C C************* Limiteur a droite C PHI = MPOCHP.VPOCHA(NLCED,I1) PHIMAX = MPOMAX.VPOCHA(NLCED,I1) PHIMIN = MPOMIN.VPOCHA(NLCED,I1) DPHIST = PHIMAX - PHIMIN GRADX = MPOGRA.VPOCHA(NLCED,IGR) GRADY = MPOGRA.VPOCHA(NLCED,IGR+1) GRADZ = MPOGRA.VPOCHA(NLCED,IGR+2) DPHI0 = GRADX * DXD + GRADY * DYD + GRADZ * DZD IF(ABS(DPHI0) .LE. (DPHIST*1.0D-8))THEN VALEUR = 1.0D0 ELSEIF(DPHI0 .GT. 0.0D0)THEN DPHI1 = PHIMAX - PHI ELSE DPHI1 = PHIMIN - PHI ENDIF ENDDO ENDIF ENDDO ENDIF C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales