Télécharger conge3.eso

Retour à la liste

Numérotation des lignes :

conge3
  1. C CONGE3 SOURCE FD218221 23/02/13 21:15:04 11591
  2. SUBROUTINE CONGE3 (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 3
  8. * -----------
  9. *
  10. * FONCTION:
  11. * ---------
  12. *
  13. * CREER UN CONGE DE RACCORDEMENT ENTRE DEUX LIGNES
  14. *
  15. * TYPE DU CONGE : DOUBLE COUDE
  16. *
  17. *
  18. * MODULES UTILISES:
  19. * -----------------
  20. *
  21.  
  22. -INC PPARAM
  23. -INC CCOPTIO
  24. -INC SMELEME
  25. *
  26. * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN)
  27. * -----------
  28. *
  29. * L1 (E) PREMIERE LIGNE A RACCORDER
  30. * L2 (E) DEUXIEME LIGNE A RACCORDER
  31. * RCONGE (E) RAYON DU CONGE DU RACCORDEMENT
  32. * NCONGE (E) FACTEUR DE DECOUPAGE DU CONGE (CONVENTIONS
  33. * CLASSIQUES SUR SON SIGNE)
  34. * = 0 SI NON FOURNI
  35. * NL1 (S) LIGNE APPUYEE SUR L1 ET ABOUTISSANT SUR LE CONGE
  36. * LRAC (S) CONGE DE RACCORDEMENT
  37. * NL2 (S) LIGNE APPUYEE SUR L2 ET COMMENCANT SUR LE CONGE
  38. *
  39. INTEGER NCONGE
  40. REAL*8 RCONGE
  41. *
  42. * CONSTANTES:
  43. * -----------
  44. *
  45. *
  46. PARAMETER (DEMI=0.5D0)
  47. *
  48. * VARIABLES:
  49. * ----------
  50. *
  51. * RESULT = DROITES PARALLELES ?
  52. *
  53. INTEGER N,NBNOEU,NBELEM,NL,ND,
  54. & ITYPLM,NBSOUS,NBREF,NBNN
  55. CHARACTER*4 RESULT
  56. *
  57. *
  58. * AUTEUR, DATE DE CREATION:
  59. * -------------------------
  60. *
  61. * LIONEL VIVAN 30 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 DROITES PARALLELES , DROITES NON COPLANAIRES
  96. *
  97. CALL INT2D(IP9,IP8,IP1,IP2,INTERS,RESULT)
  98. IF (IERR.NE.0) RETURN
  99. IF (RESULT .EQ. 'NON') THEN
  100. CALL CONGE4(L1,L2,RCONGE,NCONGE,NL1,LRAC,NL2)
  101. RETURN
  102. END IF
  103. IF (RESULT.EQ.'OK')THEN
  104. CALL ERREUR(400)
  105. RETURN
  106. END IF
  107. *
  108. CALL EXCOO1(IP9,X9,Y9,Z9,D9)
  109. CALL EXCOO1(IP8,X8,Y8,Z8,D8)
  110. CALL EXCOO1(IP1,X1,Y1,Z1,D1)
  111. CALL EXCOO1(IP2,X2,Y2,Z2,D2)
  112. *
  113. * RECHERCHE DU POINT C :
  114. * - SUR LA PERPENDICULAIRE AUX DEUX DROITES PASSANT PAR LE POINT
  115. * - APPARTENANT A LA DROITE 'L2'
  116. *
  117. A8921=(X8-X9)*(X2-X1)+(Y8-Y9)*(Y2-Y1)+(Z8-Z9)*(Z2-Z1)
  118. B8929=(X8-X9)*(X2-X9)+(Y8-Y9)*(Y2-Y9)+(Z8-Z9)*(Z2-Z9)
  119. XC=X2-(B8929/A8921)*(X2-X1)
  120. YC=Y2-(B8929/A8921)*(Y2-Y1)
  121. ZC=Z2-(B8929/A8921)*(Z2-Z1)
  122. CALL CREPO1(XC,YC,ZC,IPC)
  123. *
  124. * DISTANCE ENTRE LES DEUX DROITES
  125. *
  126. D2D=SQRT((X9-XC)**2+(Y9-YC)**2+(Z9-ZC)**2)
  127. *
  128. * TEST DE LA VALEUR DE RCONGE
  129. *
  130. IF (RCONGE.LT.(D2D*DEMI)) THEN
  131. CALL ERREUR(401)
  132. RETURN
  133. END IF
  134. *
  135. * RECHERCHE DU POINT P1 ,SE SITUE SUR 'L1'
  136. *
  137. ANG=ASIN((RCONGE-D2D*DEMI)/RCONGE)
  138. XN9=SQRT((X8-X9)**2+(Y8-Y9)**2+(Z8-Z9)**2)
  139. XP1=X9+D2D*DEMI*(X8-X9)*TAN(ANG)/XN9
  140. YP1=Y9+D2D*DEMI*(Y8-Y9)*TAN(ANG)/XN9
  141. ZP1=Z9+D2D*DEMI*(Z8-Z9)*TAN(ANG)/XN9
  142. CALL CREPO1(XP1,YP1,ZP1,IPP1)
  143. *
  144. * RECHERCHE DU POINT P2 ,SE SITUE SUR 'L2'
  145. *
  146. XN1=SQRT((X2-X1)**2+(Y2-Y1)**2+(Z2-Z1)**2)
  147. XP2=XC+D2D*DEMI*(X2-X1)*TAN(ANG)/XN1
  148. YP2=YC+D2D*DEMI*(Y2-Y1)*TAN(ANG)/XN1
  149. ZP2=ZC+D2D*DEMI*(Z2-Z1)*TAN(ANG)/XN1
  150. CALL CREPO1(XP2,YP2,ZP2,IPP2)
  151. *
  152. * RECHERCHE DU POINT O ,MILIEU DE P1 P2
  153. *
  154. XO=(XP1+XP2)*DEMI
  155. YO=(YP1+YP2)*DEMI
  156. ZO=(ZP1+ZP2)*DEMI
  157. CALL CREPO1(XO,YO,ZO,IPO)
  158. *
  159. * CREATION DE LA DROITE P1-O
  160. *
  161. ND=1
  162. CALL ECRENT(ND)
  163. CALL ECROBJ('POINT',IPO)
  164. CALL ECROBJ('POINT',IPP1)
  165. CALL LIGNE(1,1,DEN1,DEN2,N)
  166. IF (IERR.NE.0) RETURN
  167. CALL LIROBJ('MAILLAGE',L3,1,IRETOU)
  168. IF (IERR.NE.0) RETURN
  169. *
  170. * CREATION DE LA DROITE O-P2
  171. *
  172. ND=1
  173. CALL ECRENT(ND)
  174. CALL ECROBJ('POINT',IPP2)
  175. CALL ECROBJ('POINT',IPO)
  176. CALL LIGNE(1,1,DEN1,DEN2,N)
  177. IF (IERR.NE.0) RETURN
  178. CALL LIROBJ('MAILLAGE',L4,1,IRETOU)
  179. IF (IERR.NE.0) RETURN
  180. *
  181. * CREATION DU CONGE DOUBLE
  182. *
  183. NCONGE=(NCONGE+1)/2
  184. CALL CONGE2(L1,L4,RCONGE,NCONGE,NL1,LRAC1,NL4)
  185. IF (IERR.NE.0) RETURN
  186. CALL CONGE2(L3,L2,RCONGE,NCONGE,NL3,LRAC2,NL2)
  187. IF (IERR.NE.0) RETURN
  188. *
  189. * LES 2 DEMI-CERCLES ONT UN POINT EN COMMUN:
  190. MELEME=LRAC1
  191. SEGACT,MELEME
  192. NBNOEU=NUM(/1)
  193. NBELEM=NUM(/2)
  194. IPO1=NUM(NBNOEU,NBELEM)
  195. SEGDES,MELEME
  196. MELEME=LRAC2
  197. SEGACT,MELEME*MOD
  198. NUM(1,1)=IPO1
  199. SEGDES,MELEME
  200. * ON REUNIT LES 2 DEMI-CERCLES:
  201. CALL ECROBJ('MAILLAGE',LRAC2)
  202. CALL ECROBJ('MAILLAGE',LRAC1)
  203. CALL PRFUSE
  204. IF (IERR.NE.0) RETURN
  205. CALL LIROBJ('MAILLAGE',LRAC,1,IRETOU)
  206. IF (IERR.NE.0) RETURN
  207. MELEME=LRAC1
  208. SEGSUP,MELEME
  209. MELEME=LRAC2
  210. SEGSUP,MELEME
  211. *
  212. MELEME=L3
  213. SEGSUP,MELEME
  214. MELEME=NL3
  215. SEGSUP,MELEME
  216. MELEME=L4
  217. SEGSUP,MELEME
  218. MELEME=NL4
  219. SEGSUP,MELEME
  220. *
  221. END
  222.  
  223.  
  224.  

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