Download affini.eso

Back to the list

   1 : C AFFINI    SOURCE    CHAT      05/01/12    21:19:24     5004           
   2 : 
   3 : C  Ce sous-programme prepare l'affinite d'un objet
   4 : C  10/2003 : cas IDIM=1, operateur indisponible
   5 : 
   6 :       SUBROUTINE AFFINI
   7 : 
   8 :       IMPLICIT INTEGER(I-N)
   9 :       IMPLICIT REAL*8 (A-H,O-Z)
  10 : 
  11 : -INC CCOPTIO
  12 : -INC SMCOORD
  13 : -INC SMELEME
  14 : 
  15 : C  Segment NON utilise :       SEGMENT ICPR(XCOOR(/1)/(IDIM+1))
  16 : 
  17 :       COMMON / CTOURN / XPT1,YPT1,ZPT1,XV1,YV1,ZV1,XV2,YV2,ZV2,
  18 :      .                  XVEC,YVEC,ZVEC,ANGLE,ICLE
  19 : 
  20 :       IF (IDIM.EQ.1) THEN
  21 :         INTERR(1)=IDIM
  21 :         CALL ERREUR(709)
  22 :         RETURN
  23 :       ENDIF
  24 : 
  25 :       ICLE=4
  26 : C  Lecture du rapport de l'affinite
  26 :       CALL MESLIR(-130)
  26 :       CALL LIRREE(XXX,1,IRETOU)
  27 :       ANGLE=XXX
  27 :       IF (ANGLE.EQ.0.) CALL ERREUR(21)
  28 :       IF (IERR.NE.0) RETURN
  29 : C  Lecture d'un maillage, sinon lecture d'un point
  30 :       ICAS=1
  30 :       CALL MESLIR(-131)
  30 :       CALL LIROBJ('MAILLAGE',IOBJ,0,IRETOU)
  31 :       IF (IRETOU.NE.1) THEN
  32 :         ICAS=0
  32 :         CALL MESLIR(-131)
  32 :         CALL LIROBJ('POINT   ',IOBJ,1,IRETOU)
  33 :       ENDIF
  34 : C  Lecture des points definissant l'axe de l'affinite
  34 :       CALL MESLIR(-132)
  34 :       CALL LIROBJ('POINT   ',IPT1,1,IRETOU)
  34 :       CALL MESLIR(-133)
  34 :       CALL LIROBJ('POINT   ',IPT2,1,IRETOU)
  35 :       IF (IERR.NE.0) RETURN
  36 : 
  37 :       idimp1=IDIM+1
  38 :       SEGACT MCOORD
  39 :       IREF=(IPT1-1)*idimp1
  40 :       XPT1=XCOOR(IREF+1)
  41 :       YPT1=XCOOR(IREF+2)
  42 :       ZPT1=0.
  43 :       IF (IDIM.GE.3) ZPT1=XCOOR(IREF+3)
  44 :       IREF=(IPT2-1)*idimp1
  45 :       XPT2=XCOOR(IREF+1)
  46 :       YPT2=XCOOR(IREF+2)
  47 :       ZPT2=0.
  48 :       IF (IDIM.GE.3) ZPT2=XCOOR(IREF+3)
  49 :       XVEC=XPT2-XPT1
  50 :       YVEC=YPT2-YPT1
  51 :       ZVEC=ZPT2-ZPT1
  52 :       DVEC=SQRT(XVEC*XVEC+YVEC*YVEC+ZVEC*ZVEC)
  52 :       IF (DVEC.EQ.0.) CALL ERREUR(21)
  53 :       IF (IERR.NE.0) RETURN
  54 :       XVEC=XVEC/DVEC
  55 :       YVEC=YVEC/DVEC
  56 :       ZVEC=ZVEC/DVEC
  57 :       XV1=-YVEC
  58 :       YV1=XVEC
  59 :       DV1=XV1*XV1+YV1*YV1
  60 :       IF (DV1.GE.0.1) THEN
  61 :         ZV1=0.
  62 :         DV1=SQRT(DV1)
  63 :         XV1=XV1/DV1
  64 :         YV1=YV1/DV1
  65 :       ELSE
  66 :         XV1=0.
  67 :         YV1=-ZVEC
  68 :         ZV1=YVEC
  69 :         DV1=SQRT(YV1*YV1+ZV1*ZV1)
  70 :         YV1=YV1/DV1
  71 :         ZV1=ZV1/DV1
  72 :       ENDIF
  73 :       XV2=YVEC*ZV1-ZVEC*YV1
  74 :       YV2=ZVEC*XV1-XVEC*ZV1
  75 :       ZV2=XVEC*YV1-YVEC*XV1
  76 : 
  77 :       IF (ICAS.EQ.1) THEN
  77 :         CALL INTOPE(IOBJ)
  78 :         RETURN
  79 :       ENDIF
  80 : 
  81 :       IREF=(IOBJ-1)*idimp1
  82 :       XD=XCOOR(IREF+1)-XPT1
  83 :       YD=XCOOR(IREF+2)-YPT1
  84 :       ZD=0.
  85 :       IF (IDIM.GE.3) ZD=XCOOR(IREF+3)-ZPT1
  86 :       XE=XD*XV1+YD*YV1+ZD*ZV1
  87 :       YE=XD*XV2+YD*YV2+ZD*ZV2
  88 :       ZE=XD*XVEC+YD*YVEC+ZD*ZVEC
  89 :       XD=XE
  90 :       YD=YE
  91 :       ZD=ZE*ANGLE
  92 :       NBPTS=XCOOR(/1)/idimp1+1
  93 :       SEGADJ MCOORD
  94 :       IPoin=(NBPTS-1)*idimp1
  95 :       XCOOR(IPoin+1)=XD*XV1+YD*XV2+ZD*XVEC+XPT1
  96 :       XCOOR(IPoin+2)=XD*YV1+YD*YV2+ZD*YVEC+YPT1
  97 :       IF (IDIM.GE.3) XCOOR(IPoin+3)=XD*ZV1+YD*ZV2+ZD*ZVEC+ZPT1
  98 :       XCOOR(IPoin+idimp1)=XCOOR(IREF+idimp1)
  98 :       CALL ECROBJ('POINT   ',NBPTS)
  99 : 
 100 :       RETURN
 101 :       END
 102 : 
 103 :  
 104 :  

© Cast3M 2003 - All rights reserved.
Disclaimer