Download envori.eso

Back to the list

   1 : C ENVORI    SOURCE    BP208322  13/01/25    21:15:00     7681           
   2 : C
   3 :       SUBROUTINE ENVORI(IFAC3,IFAC4,IFAC6,IFAC8,NFACE,XCENT,IEL)
   4 : C  
   5 : C     ORIente les faces avant de fabriquer l ENVeloppe
   6 : c     appelé par ENVVOL
   7 : c     on suppose 1 seule entrée parmi IFAC3,IFAC4,IFAC6,IFAC8 non nulle
   8 : c
   9 : c creation : BP, le 12/12/2011
  10 : c modifs   :
  11 : c
  12 :       
  13 :       IMPLICIT INTEGER(I-N)
  14 :       
  15 : -INC CCOPTIO
  16 : -INC SMCOORD
  17 : 
  18 :       REAL*8    nvG,nvn
  19 :       SEGMENT IFAC3(4,NFAC3)
  20 :       SEGMENT IFAC4(5,NFAC4)
  21 :       SEGMENT IFAC6(7,NFAC6)
  22 :       SEGMENT IFAC8(9,NFAC8)
  23 : c     avec  IFACE(1 a NBNN,n ieme face) = noeuds de la n ieme face     
  24 : c     avec  IFACE(NBNN1=NBNN+1,n ieme face) = couleur de la n ieme face     
  25 :       SEGMENT XCENT(3,NBELEM)
  26 :       IDIM1 = IDIM+1
  27 :       
  28 : c==== preliminaires ===================================================
  29 : c     numero de quelques noeuds utiles pour cette face
  30 : c     EN FONCTION DE L ENTREE
  31 :       if(IFAC3.ne.0) goto 103
  32 :       if(IFAC4.ne.0) goto 104
  33 :       if(IFAC6.ne.0) goto 106
  34 :       if(IFAC8.ne.0) goto 108
  35 :  103  continue      
  36 :         NBNN1=4
  37 :         ip1 = IFAC3(1,NFACE)
  38 :         ip2 = IFAC3(2,NFACE)
  39 :         ip4 = IFAC3(3,NFACE)
  40 :         goto 199
  41 :  104  continue      
  42 :         NBNN1=5
  43 :         ip1 = IFAC4(1,NFACE)
  44 :         ip2 = IFAC4(2,NFACE)
  45 :         ip4 = IFAC4(4,NFACE)
  46 :         goto 199
  47 :  106  continue      
  48 :         NBNN1=7
  49 :         ip1 = IFAC6(1,NFACE)
  50 :         ip2 = IFAC6(2,NFACE)
  51 :         ip4 = IFAC6(6,NFACE)
  52 :         goto 199
  53 :  108  continue      
  54 :         NBNN1=9
  55 :         ip1 = IFAC8(1,NFACE)
  56 :         ip2 = IFAC8(2,NFACE)
  57 :         ip4 = IFAC8(8,NFACE)
  58 :         goto 199
  59 :  199  continue      
  60 :       
  61 : c     coordonnees du 1er noeud de la face
  62 :       x1 = XCOOR((ip1-1)*IDIM1+1)
  63 :       y1 = XCOOR((ip1-1)*IDIM1+2)
  64 :       z1 = XCOOR((ip1-1)*IDIM1+3)
  65 : c       write(6,*) 'x1,y1,z1=',x1,y1,z1
  66 :       
  67 :       
  68 : c==== calcul de vG = de 1 vers G=centre de l element ==================
  69 :       vGx = XCENT(1,iel) - x1
  70 :       vGy = XCENT(2,iel) - y1
  71 :       vGz = XCENT(3,iel) - z1
  72 : c       write(6,*) 'vGx,vGy,vGz=',vGx,vGy,vGz
  73 : c     norme 
  74 :       nvG = sqrt(vGx*vGx + vGy*vGy + vGz*vGz)
  75 :       if (nvG.le.0.D0) then
  76 :         write(6,*) ' vecteur du noeud ',ip1,' vers le centre ',
  77 :      &             'de l element ',IEL, ' indeterminable !'
  78 :         write(6,*) ' orientation de l enveloppe impossible ! '
  79 :         return
  80 :       endif
  81 :       
  82 : 
  83 : c==== calcul de vn = normale a la face ================================
  84 :       v12x = XCOOR((ip2-1)*IDIM1+1) - x1
  85 :       v12y = XCOOR((ip2-1)*IDIM1+2) - y1
  86 :       v12z = XCOOR((ip2-1)*IDIM1+3) - z1
  87 :       v14x = XCOOR((ip4-1)*IDIM1+1) - x1
  88 :       v14y = XCOOR((ip4-1)*IDIM1+2) - y1
  89 :       v14z = XCOOR((ip4-1)*IDIM1+3) - z1
  90 :       vnx  = v12y*v14z - v12z*v14y
  91 :       vny  = v12z*v14x - v12x*v14z
  92 :       vnz  = v12x*v14y - v12y*v14x
  93 : c       write(6,*) 'vn=',vnx,vny,vnz
  94 : c     norme
  95 :       nvn = sqrt(vnx*vnx + vny*vny + vnz*vnz) 
  96 :       if (nvn.le.0D0) then
  97 :         write(6,*) ' vecteur normal a la face ',NFACE,
  98 :      &             'de l element ',IEL, ' indeterminable !'
  99 :         write(6,*) ' orientation de l enveloppe impossible ! '
 100 :         return
 101 :       endif
 102 : 
 103 : 
 104 : c==== calcul de vn*vG : si >0 => face dirigee vers l interieur ========
 105 :       psc1 = vnx*vGx + vny*vGy + vnz*vGz
 106 :       psc1 = psc1 / (nvG*nvn)
 107 :       
 108 : c     il faut inverser le sens de description de la face
 109 :       if (psc1.lt.0.D0) then
 110 : c       EN FONCTION DE L ENTREE
 111 :         if(IFAC3.ne.0) goto 603
 112 :         if(IFAC4.ne.0) goto 604
 113 :         if(IFAC6.ne.0) goto 606
 114 :         if(IFAC8.ne.0) goto 608
 115 :  603    continue      
 116 :            itmp1 = IFAC3(1,NFACE)
 117 :            IFAC3(1,NFACE) = IFAC3(3,NFACE)
 118 :            IFAC3(3,NFACE) = itmp1
 119 :          goto 699
 120 :  604    continue      
 121 :          ni1 = NBNN1/2
 122 :          do i1 = 1,2
 123 :            i2 = 5-i1
 124 :            itmp1 = IFAC4(i1,NFACE)
 125 :            IFAC4(i1,NFACE) = IFAC4(i2,NFACE)
 126 :            IFAC4(i2,NFACE) = itmp1
 127 :          enddo
 128 :          goto 699
 129 :  606    continue      
 130 :          do i1 = 1,3
 131 :            i2 = 7-i1
 132 :            itmp1 = IFAC6(i1,NFACE)
 133 :            IFAC6(i1,NFACE) = IFAC6(i2,NFACE)
 134 :            IFAC6(i2,NFACE) = itmp1
 135 :          enddo
 136 :          goto 699
 137 :  608    continue      
 138 :          do i1 = 1,4
 139 :            i2 = 9-i1
 140 :            itmp1 = IFAC8(i1,NFACE)
 141 :            IFAC8(i1,NFACE) = IFAC8(i2,NFACE)
 142 :            IFAC8(i2,NFACE) = itmp1
 143 :          enddo
 144 :          goto 699
 145 :  699    continue      
 146 :       endif
 147 : 
 148 : 
 149 :       RETURN
 150 :       END
 151 : 
 152 : 
 153 :         
 154 :  

© Cast3M 2003 - All rights reserved.
Disclaimer