Télécharger conge2.eso

Retour à la liste

Numérotation des lignes :

conge2
  1. C CONGE2 SOURCE GOUNAND 24/10/09 21:15:03 12031
  2. SUBROUTINE CONGE2 (L1,L2,RCONGE,NCONGE, NL1,LRAC,NL2)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. *************************************************************************
  6. *
  7. * C O N G E 2
  8. * -----------
  9. *
  10. * FONCTION:
  11. * ---------
  12. *
  13. * CREER UN CONGE DE RACCORDEMENT ENTRE DEUX LIGNES
  14. *
  15. * TYPE DU CONGE : CIRCULAIRE
  16. *
  17. * MODULES UTILISES:
  18. * -----------------
  19. *
  20.  
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. -INC SMELEME
  24. *
  25. * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN)
  26. * -----------
  27. *
  28. * L1 (E) PREMIERE LIGNE A RACCORDER
  29. * L2 (E) DEUXIEME LIGNE A RACCORDER
  30. * RCONGE (E) RAYON DU CONGE DU RACCORDEMENT
  31. * NCONGE (E) FACTEUR DE DECOUPAGE DU CONGE (CONVENTIONS
  32. * CLASSIQUES SUR SON SIGNE)
  33. * = 0 SI NON FOURNI
  34. * NL1 (S) LIGNE APPUYEE SUR L1 ET ABOUTISSANT SUR LE CONGE
  35. * LRAC (S) CONGE DE RACCORDEMENT
  36. * NL2 (S) LIGNE APPUYEE SUR L2 ET COMMENCANT SUR LE CONGE
  37. *
  38. INTEGER NCONGE
  39. *
  40. * CONSTANTES:
  41. * -----------
  42. *
  43. PARAMETER (DEMI=0.5D0)
  44. *
  45. * VARIABLES:
  46. * ----------
  47. *
  48. * ANG = DEMI ANGLE AU SOMMET DES DEUX DROITES
  49. * DID = DISTANCE DU PT D'INTERSECTION AU PT D'UNE DROITE
  50. * DIC = DISTANCE DU PT D'INTERSECTION AU CENTRE DU CERCLE
  51. * RESULT = 'OK ' OU 'PARA' OU 'NON '
  52. * NBNOEU = NOMBRE DE NOEUD DE L'ELEMENT
  53. * NBELEM = NOMBRE D'ELEMENT
  54. *
  55. INTEGER N,NBNOEU,NBELEM,NL
  56. CHARACTER*4 RESULT
  57. *
  58. * AUTEUR, DATE DE CREATION:
  59. * -------------------------
  60. *
  61. * LIONEL VIVAN 20 NOVEMBRE 1987
  62. *
  63. * LANGAGE:
  64. * --------
  65. *
  66. * ESOPE + FORTRAN77
  67. *
  68. ************************************************************************
  69. *
  70. MELEME=L1
  71. SEGACT,MELEME
  72. NL=LISOUS(/1)
  73. IF (NL.NE.0) THEN
  74. CALL ERREUR(25)
  75. RETURN
  76. END IF
  77. NBNOEU=NUM(/1)
  78. NBELEM=NUM(/2)
  79. IP9=NUM(NBNOEU,NBELEM)
  80. IP8=NUM(1,NBELEM)
  81. SEGDES,MELEME
  82. *
  83. MELEME=L2
  84. SEGACT,MELEME
  85. NL=LISOUS(/1)
  86. IF (NL.NE.0) THEN
  87. CALL ERREUR(25)
  88. RETURN
  89. END IF
  90. NBNOEU=NUM(/1)
  91. IP1=NUM(1,1)
  92. IP2=NUM(NBNOEU,1)
  93. SEGDES,MELEME
  94. *
  95. * TEST DE LA VALEUR DE RESULT
  96. *
  97. CALL INT2D(IP9,IP8,IP1,IP2,INTERS,RESULT)
  98. IF (IERR.NE.0) RETURN
  99. IF (RESULT.EQ.'PARA') THEN
  100. CALL ERREUR(397)
  101. RETURN
  102. ELSE IF (RESULT.EQ.'NON ') THEN
  103. CALL ERREUR(398)
  104. RETURN
  105. END IF
  106. *
  107. CALL EXCOO1(IP1,X1,Y1,Z1,D1)
  108. CALL EXCOO1(IP2,X2,Y2,Z2,D2)
  109. CALL EXCOO1(IP8,X8,Y8,Z8,D8)
  110. CALL EXCOO1(IP9,X9,Y9,Z9,D9)
  111. CALL EXCOO1(INTERS,XI,YI,ZI,DI)
  112. * WRITE(IOIMP,*) 'XI,YI,ZI,DI=',XI,YI,ZI,DI
  113. *
  114. * CONSTRUCTION DES VECTEURS P1P2 P9P8
  115. P1P21=X2-X1
  116. P1P22=Y2-Y1
  117. P1P23=Z2-Z1
  118. P9P81=X8-X9
  119. P9P82=Y8-Y9
  120. P9P83=Z8-Z9
  121. *
  122. XN1=SQRT(P1P21**2+P1P22**2+P1P23**2)
  123. XN8=SQRT(P9P81**2+P9P82**2+P9P83**2)
  124. P1P21=P1P21/XN1
  125. P1P22=P1P22/XN1
  126. P1P23=P1P23/XN1
  127. P9P81=P9P81/XN8
  128. P9P82=P9P82/XN8
  129. P9P83=P9P83/XN8
  130. PSA=(P1P21*P9P81)+(P1P22*P9P82)+(P1P23*P9P83)
  131. *
  132. * DEMI-ANGLE AU SOMMET DES DEUX DROITES
  133. *
  134. ANG=ACOS(PSA)*DEMI
  135. * WRITE(IOIMP,*) 'ANG=',ANG
  136. *
  137. * DISTANCE PT D'INTERSECTION - PT D'EXTREMITE DE LA DROITE
  138. DID=RCONGE/TAN(ANG)
  139. *
  140. * DISTANCE PT D'INTERSECTION - PT CENTRE DU CERCLE
  141. DIC=SQRT(RCONGE**2+DID**2)
  142. *
  143. * DETERMINATION DU POINT E (OU DEBUTERA LE CONGE)
  144. *
  145. XE=DID*P9P81+XI
  146. YE=DID*P9P82+YI
  147. ZE=DID*P9P83+ZI
  148. CALL CREPO1(XE,YE,ZE,IPE)
  149. *
  150. * DETERMINATION DU POINT F (OU FINIRA LE CONGE)
  151. *
  152. XF=DID*P1P21+XI
  153. YF=DID*P1P22+YI
  154. ZF=DID*P1P23+ZI
  155. CALL CREPO1(XF,YF,ZF,IPF)
  156. *
  157. * DETERMINATION DU POINT O (CENTRE DU CERCLE OU S'APPUIERA LE CONGE)
  158. *
  159. XEF=P9P81+P1P21
  160. YEF=P9P82+P1P22
  161. ZEF=P9P83+P1P23
  162. PRO=DIC/SQRT(XEF**2+YEF**2+ZEF**2)
  163. XO=PRO*XEF+XI
  164. YO=PRO*YEF+YI
  165. ZO=PRO*ZEF+ZI
  166. CALL CREPO1(XO,YO,ZO,IPO)
  167. *
  168. * CREATION DES EXTREMITES DES LIGNES A RACCORDER
  169. *
  170. CALL RACLI1(L1,IPE,NL1)
  171. IF (IERR.NE.0) RETURN
  172. CALL RACLI2(IPF,L2,NL2)
  173. IF (IERR.NE.0) RETURN
  174. *
  175. * CREATION ARC DE CERCLE (COMMENCANT EN E, FINISSANT EN F)
  176. *
  177. IF (NCONGE.NE.0) THEN
  178. CALL ECRENT(NCONGE)
  179. END IF
  180. CALL ECROBJ('POINT',IPF)
  181. CALL ECROBJ('POINT',IPO)
  182. CALL ECROBJ('POINT',IPE)
  183. CALL LIGNE(3,1,DEN1,DEN2,N)
  184. IF (IERR.NE.0) RETURN
  185. CALL LIROBJ('MAILLAGE',LRAC,1,IRETOU)
  186. IF (IERR .NE. 0) RETURN
  187. CALL EXCOO1(IPE,XE,YE,ZE,DE)
  188. CALL EXCOO1(IPF,XF,YF,ZF,DF)
  189. IF (NCONGE.GT.0) THEN
  190. MELEME=LRAC
  191. SEGACT,MELEME
  192. NBNOEU=NUM(/1)
  193. NBELEM=NUM(/2)
  194. IP1C=NUM(NBNOEU,1)
  195. CALL EXCOO1(IP1C,X1C,Y1C,Z1C,D1C)
  196. CALL MODPOI(XE,YE,ZE,D1C,IPE)
  197. IP2C=NUM(1,NBELEM)
  198. CALL EXCOO1(IP2C,X2C,Y2C,Z2C,D2C)
  199. CALL MODPOI(XF,YF,ZF,D2C,IPF)
  200. SEGDES,MELEME
  201. END IF
  202. *
  203. END
  204.  
  205.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales