Télécharger courb5.eso

Retour à la liste

Numérotation des lignes :

courb5
  1. C COURB5 SOURCE PV 20/03/24 21:16:23 10554
  2. SUBROUTINE COURB5 (MCOURB,MABSCI)
  3. ************************************************************************
  4. *
  5. * C O U R B 5
  6. * -----------
  7. *
  8. * FONCTION:
  9. * ---------
  10. *
  11. * CALCUL DES COORDONNEES DES NOUVEAUX POINTS CREES POUR LA COURBE
  12. * POLYNOMIALE, COURBE POUR LAQUELLE IL N'AVAIT PAS ETE DEMANDE DE
  13. * REGULARITE SELON L'ABSCISSE CURVILIGNE.
  14. *
  15. * MODULES UTILISES:
  16. * -----------------
  17. *
  18. IMPLICIT INTEGER(I-N)
  19. IMPLICIT real*8 (a-h,o-z)
  20.  
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. -INC CCGEOME
  24. -INC SMCOORD
  25. -INC TMCOURB
  26. *
  27. * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN)
  28. * -----------
  29. *
  30. * MCOURB (E) SEGMENT ACTIF.
  31. * (S) ETENDU EN SORTIE (TABLEAU "UCOU" REMPLI).
  32. * MABSCI (E) SEGMENT ACTIF, DEFINI DANS LE S-P "COURB2".
  33. * ICI, IL S'AGIT D'ABSCISSES PARAMETRIQUES.
  34. * +IDIM (E) VOIR LE COMMUN "COPTIO".
  35. * +ILCOUR (E) VOIR LE COMMUN "CGEOME".
  36. * +MCOORD (E) SEGMENT ACTIF.
  37. * (S) ETENDU EN SORTIE.
  38. *
  39. SEGMENT,MABSCI
  40. REAL*8 ABSCIS(NPOIN)
  41. ENDSEGMENT
  42. *
  43. * VARIABLES:
  44. * ----------
  45. *
  46. * D1 = DISTANCE DU POINT COURANT AVEC LE POINT PRECEDENT.
  47. * D3 = DISTANCE DU POINT COURANT AVEC LE POINT SUIVANT.
  48. * NPOLD = NOMBRE DE POINTS AVANT AJOUT.
  49. * NPOIN = NOMBRE DE POINTS A AJOUTER.
  50. * U2 = PARAMETRE DU POINT COURANT.
  51. * UINF, USUP = BORNES ENCADRANT LE PARAMETRE DU POINT-MILIEU
  52. * COURANT.
  53. *
  54. * EN GENERAL, INDICE 1 POUR POINT PRECEDENT, INDICE 2 POUR POINT
  55. * COURANT ET INDICE 3 POUR POINT SUIVANT.
  56. *
  57. INTEGER NPOLD,NPOIN
  58. REAL*8 USUP,UINF,D1,D3
  59. REAL*8 U2
  60. *
  61. * FONCTIONS:
  62. * ----------
  63. *
  64. REAL*8 POLYNO
  65. *
  66. * REMARQUES:
  67. * ----------
  68. *
  69. * CE SOUS-PROGRAMME N'EST PAS PREVU POUR FONCTIONNER AVEC UN NOMBRE
  70. * DE POINTS NUL.
  71. *
  72. * AUTEUR, DATE DE CREATION:
  73. * -------------------------
  74. *
  75. * PASCAL MANIGOT 10 SEPTEMBRE 1986
  76. * P.M. 24/02/87 : REMODELAGE, AVEC UN NOUVEAU SEGMENT "MCOURB".
  77. *
  78. * LANGAGE:
  79. * --------
  80. *
  81. * ESOPE77 FORTRAN77 + EXTENSION: DECLARATION "REAL*8".
  82. *
  83. ************************************************************************
  84. *
  85. NPOIN = ABSCIS(/1)
  86. IDIMP1 = IDIM + 1
  87. segact mcoord*mod
  88. NPOLD = nbpts
  89. *
  90. * DETERMINATION DES COORDONNEES DES NOUVEAUX POINTS.
  91. *
  92. LONG = NPOIN
  93. SEGADJ,MCOURB
  94. NBPTA = NPOLD
  95. NBPTS=NBPTA+NPOIN
  96. SEGADJ MCOORD
  97. MCOFCO = ICOFCO
  98. SEGACT,MCOFCO
  99. *
  100. DO 300 IB=1,NPOIN
  101. U2 = ABSCIS(IB)
  102. UCOU(IB) = U2
  103. XCOOR(NBPTA*IDIMP1+1) = POLYNO (COFCOU(1,1),ND1COU,1,U2)
  104. XCOOR(NBPTA*IDIMP1+2) = POLYNO (COFCOU(1,2),ND1COU,1,U2)
  105. IF (IDIM .EQ. 3)
  106. # XCOOR(NBPTA*IDIMP1+3) = POLYNO (COFCOU(1,3),ND1COU,1,U2)
  107. NBPTA=NBPTA+1
  108. 300 CONTINUE
  109. * END DO
  110. *
  111. IF (ILCOUR .EQ. 3) THEN
  112. *
  113. * AJUSTEMENT DE LA PLACE DES POINTS-MILIEUX POUR QU'ILS SOIENT
  114. * BIEN ... AU MILIEU DES ELEMENTS.
  115. * LES POINTS-MILIEUX SONT AUX PLACES 1, 3, ... , NPOIN (AU
  116. * COEFFICIENT MULTIPLICATIF IDIM+1 PRES) DANS LA PARTIE AJOUTEE
  117. * DE "XCOOR".
  118. * ON EN PROFITE POUR INSCRIRE LA DENSITE DES POINTS-MILIEUX.
  119. *
  120. I3 = (PT1COU - 1) * IDIMP1
  121. X3 = XCOOR(I3+1)
  122. Y3 = XCOOR(I3+2)
  123. IF (IDIM .EQ. 3) Z3 = XCOOR(I3+3)
  124. U3 = U1COU
  125. *
  126. DO 310 IB=1,NPOIN,2
  127. *
  128. U1 = U3
  129. X1 = X3
  130. Y1 = Y3
  131. I2 = (IB + NPOLD - 1) * IDIMP1
  132. U2 = ABSCIS(IB)
  133. X2 = XCOOR(I2+1)
  134. Y2 = XCOOR(I2+2)
  135. IF (IB .EQ. NPOIN) THEN
  136. I3 = (PT2COU - 1) * IDIMP1
  137. U3 = U2COU
  138. ELSE
  139. I3 = (IB + NPOLD) * IDIMP1
  140. U3 = ABSCIS(IB+1)
  141. END IF
  142. X3 = XCOOR(I3+1)
  143. Y3 = XCOOR(I3+2)
  144. IF (IDIM .EQ. 3) THEN
  145. Z1 = Z3
  146. Z2 = XCOOR(I2+3)
  147. Z3 = XCOOR(I3+3)
  148. D1 = SQRT( (X2-X1)**2 + (Y2-Y1)**2 + (Z2-Z1)**2 )
  149. D3 = SQRT( (X2-X3)**2 + (Y2-Y3)**2 + (Z2-Z3)**2 )
  150. ELSE
  151. D1 = SQRT( (X2-X1)**2 + (Y2-Y1)**2 )
  152. D3 = SQRT( (X2-X3)**2 + (Y2-Y3)**2 )
  153. END IF
  154. UINF = U1
  155. USUP = U3
  156. *
  157. NFOIS = 0
  158. 315 IF (ABS(D3-D1) .GT. (0.1*(D1+D3)) .AND. NFOIS.LT.5) THEN
  159. *
  160. IF (D1 .GT. D3) THEN
  161. USUP = U2
  162. ELSE
  163. UINF = U2
  164. END IF
  165. U2 = (UINF + USUP) / 2.
  166. X2 = POLYNO (COFCOU(1,1),ND1COU,1,U2)
  167. Y2 = POLYNO (COFCOU(1,2),ND1COU,1,U2)
  168. IF (IDIM .EQ. 3) THEN
  169. Z2 = POLYNO (COFCOU(1,3),ND1COU,1,U2)
  170. D1 = SQRT( (X2-X1)**2 + (Y2-Y1)**2 + (Z2-Z1)**2 )
  171. D3 = SQRT( (X2-X3)**2 + (Y2-Y3)**2 + (Z2-Z3)**2 )
  172. ELSE
  173. D1 = SQRT( (X2-X1)**2 + (Y2-Y1)**2 )
  174. D3 = SQRT( (X2-X3)**2 + (Y2-Y3)**2 )
  175. END IF
  176. NFOIS = NFOIS + 1
  177. *
  178. GOTO 315
  179. END IF
  180. *
  181. IF (NFOIS .GT. 0) THEN
  182. * RECTIFICATION DES COORDONNEES ET DU PARAMETRE:
  183. XCOOR(I2+1) = X2
  184. XCOOR(I2+2) = Y2
  185. IF (IDIM .EQ. 3) XCOOR(I2+3) = Z2
  186. UCOU(IB) = U2
  187. END IF
  188. XCOOR(I2+IDIMP1) = D1 + D3
  189. * CI-DESSUS, ON NE DIVISE PAS PAR 2 CAR, POUR UN "SEG3", IL NE
  190. * FAUT PAS CONFONDRE LARGEUR DE MAILLE ET DISTANCE ENTRE 2
  191. * POINTS.
  192. IF (IIMPI .EQ. 342) WRITE (IOIMP,*) 'NFOIS = ',NFOIS
  193. *
  194. 310 CONTINUE
  195. * END DO
  196. *
  197. * LA BOUCLE 330 VA TRAITER LES POINTS NOUVEAUX N. 2, 4, 6, ...
  198. IB1 = 2
  199. IB2 = NPOIN - 1
  200. IB3 = 2
  201. *
  202. ELSE
  203. * ILCOUR = 2
  204. *
  205. * LA BOUCLE 330 VA TRAITER TOUS LES POINTS NOUVEAUX.
  206. IB1 = 1
  207. IB2 = NPOIN
  208. IB3 = 1
  209. *
  210. END IF
  211. *
  212. SEGDES,MCOFCO
  213. *
  214. * DETERMINATION DES DENSITES DES EXTREMITES DES SEGMENTS:
  215. *
  216. IF (IB1 .LE. IB2) THEN
  217. I2 = (PT1COU - 1) * IDIMP1
  218. I3 = (IB1 + NPOLD - 1) * IDIMP1
  219. D3 = (XCOOR(I3+1) - XCOOR(I2+1) ) ** 2
  220. & + (XCOOR(I3+2) - XCOOR(I2+2) ) ** 2
  221. IF (IDIM .EQ. 3) D3 = D3 + (XCOOR(I3+3) - XCOOR(I2+3) )**2
  222. D3 = SQRT(D3)
  223. DO 330 IB=IB1,IB2,IB3
  224. I2 = I3
  225. IF (IB .EQ. IB2) THEN
  226. I3 = (PT2COU - 1) * IDIMP1
  227. ELSE
  228. I3 = (IB + NPOLD - 1 + IB3) * IDIMP1
  229. END IF
  230. D1 = D3
  231. D3 = (XCOOR(I3+1) - XCOOR(I2+1) ) ** 2
  232. & + (XCOOR(I3+2) - XCOOR(I2+2) ) ** 2
  233. IF (IDIM .EQ. 3) D3 = D3 + (XCOOR(I3+3) - XCOOR(I2+3) )**2
  234. D3 = SQRT(D3)
  235. XCOOR(I2+IDIMP1) = (D1 + D3) / 2.
  236. 330 CONTINUE
  237. * END DO
  238. END IF
  239. *
  240. END
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  

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