Télécharger prism1.eso

Retour à la liste

Numérotation des lignes :

prism1
  1. C PRISM1 SOURCE JC220346 16/11/29 21:15:29 9221
  2. C---------------------------------------------------------------------|
  3. C |
  4. SUBROUTINE PRISM1(II,JJ,IF1,IF2,IGAGNE)
  5. C |
  6. C CETTE SUBROUTINE TENTE DE CREER UN PRISME A PARTIR |
  7. C DES QUADRANGLES IF1 ET IF2. |
  8. C - IGAGNE=1 EN CAS DE SUCCES |
  9. C - IGAGNE=0 EN CAS D'ECHEC |
  10. C |
  11. C---------------------------------------------------------------------|
  12. C
  13. IMPLICIT INTEGER(I-N)
  14. IMPLICIT REAL*8(A-H,O-Z)
  15. -INC TDEMAIT
  16.  
  17. -INC PPARAM
  18. -INC CCOPTIO
  19. LOGICAL REPONS,FACET,SOLPRI,SOLPYR,SOLTET,DIAGO,IN,PLAN
  20. C
  21. * WRITE(6,*) ' PRISM1 ',ii,jj,if1,if2
  22. C
  23. * write (6,*) ' liste des facettes restantes '
  24. * DO 444 I=1,NFCMAX
  25. * IF (IFAT(I).EQ.1) GOTO 444
  26. * WRITE (6,*) I,NFC(1,I),NFC(2,I),NFC(3,I),NFC(4,I)
  27. *444 CONTINUE
  28. N3=0
  29. N4=0
  30. N5=0
  31. ICTF=0
  32. ICTV=0
  33. C
  34. C RECHERCHE DE LA FACETTE IF3
  35. C ---------------------------
  36. C
  37. IF3=IFACE3(ISUCC(IF2,II),II,IPRED(IF1,II))
  38. * IF (IF3.NE.0) WRITE(6,1010)IF3
  39. 1010 FORMAT(' ** IF3=',I3)
  40. C
  41. IF (IF3.NE.0) THEN
  42. * si if3 dans le mauvais sens rien a faire
  43. if (isucc(if3,ii).ne.iPRED(IF1,II)) then
  44. IF (IVERB.EQ.1) write (6,*) ' prism1 face a l''envers if3 '
  45. return
  46. endif
  47. N3=1
  48. IF(NFC(4,IF3).NE.0) N3=2
  49. C FACE PAS TRIANGULAIRE
  50. ENDIF
  51. C
  52. C RECHERCHE DE LA FACETTE IF4
  53. C ---------------------------
  54. C
  55. IF4=IFACE3(IPRED(IF2,JJ),JJ,ISUCC(IF1,JJ))
  56. * IF (IF4.NE.0) WRITE(6,1020)IF4
  57. 1020 FORMAT(' ** IF4=',I3)
  58. C
  59. IF (IF4.NE.0) THEN
  60. * si if4 dans le mauvais sens rien a faire
  61. if (isucc(if4,jj).ne.iPRED(IF2,jj)) then
  62. IF (IVERB.EQ.1) write (6,*) ' prism1 face a l''envers if4 '
  63. return
  64. endif
  65. N4=1
  66. IF(NFC(4,IF4).NE.0) N4=2
  67. C FACE PAS TRIANGULAIRE
  68. ENDIF
  69. IF (N3.EQ.2.OR.N4.EQ.2) GOTO 9000
  70. C
  71. C
  72. C RECHERCHE DE LA FACETTE IF5
  73. C ---------------------------
  74. C
  75. IF5=IFACE4(ISUCC(IF1,JJ),IPRED(IF1,II),
  76. # ISUCC(IF2,II),IPRED(IF2,JJ))
  77. * IF (IF5.NE.0) WRITE(6,1030) IF5
  78. 1030 FORMAT(' **IF5=',I3)
  79. IF (IF5.LT.0) GOTO 9000
  80. IF (IF5.NE.0) N5=1
  81. C
  82. C
  83. IF (DIAGO(IPRED(IF1,II),ISUCC(IF2,II),0.95d0)) GOTO 9000
  84. * DIAGONALE QUADRILATERE
  85. C
  86. IF (DIAGO(IPRED(IF2,JJ),ISUCC(IF1,JJ),0.95d0)) GOTO 9000
  87. * DIAGONALE QUADRILATERE
  88. C
  89. C
  90. C CONSTRUCTION DU PRISME
  91. C ----------------------
  92. C
  93. IF (IF3.EQ.0) THEN
  94. C
  95. C CREATION DE LA FACETTE IF3
  96. C --------------------------
  97. NFCMAX=NFCMAX+1
  98. IF3=NFCMAX
  99. ICTF=ICTF+1
  100. C
  101. NFC(1,IF3)=IPRED(IF1,II)
  102. NFC(2,IF3)=II
  103. NFC(3,IF3)=ISUCC(IF2,II)
  104. NFC(4,IF3)=0
  105. C
  106. ENDIF
  107. C
  108. C
  109. IF (IF4.EQ.0) THEN
  110. C
  111. C CREATION DE LA FACETTE IF4
  112. C --------------------------
  113. NFCMAX=NFCMAX+1
  114. IF4=NFCMAX
  115. ICTF=ICTF+1
  116. C
  117. NFC(1,IF4)=JJ
  118. NFC(2,IF4)=ISUCC(IF1,JJ)
  119. NFC(3,IF4)=IPRED(IF2,JJ)
  120. NFC(4,IF4)=0
  121. C
  122. ENDIF
  123. C
  124. C
  125. IF (IF5.EQ.0) THEN
  126. C
  127. C CREATION DE LA FACETTE IF5
  128. C --------------------------
  129. NFCMAX=NFCMAX+1
  130. IF5=NFCMAX
  131. ICTF=ICTF+1
  132. C
  133. NFC(1,IF5)=IPRED(IF2,JJ)
  134. NFC(2,IF5)=ISUCC(IF1,JJ)
  135. NFC(3,IF5)=IPRED(IF1,II)
  136. NFC(4,IF5)=ISUCC(IF2,II)
  137. C
  138. C
  139. ENDIF
  140. C
  141. C ON ENLEVE LES FACETTES IF1, IF2 ET IF3
  142. C --------------------------------------
  143. CALL REPSUB(IF1)
  144. CALL REPSUB(IF2)
  145. CALL REPSUB(IF3)
  146. CALL REPSUB(IF4)
  147. CALL REPSUB(IF5)
  148. C
  149. C LE VOLUME CREE EST-IL VALIDE ?
  150. C ------------------------------
  151. IF (.NOT.PLAN(IF5)) GOTO 160
  152. IF (.NOT.FACET(IF3)) GOTO 160
  153. IF (.NOT.FACET(IF4)) GOTO 160
  154. IF (.NOT.FACET(IF5)) GOTO 160
  155. IF (.NOT.SOLPRI(IF1,IF2,IF3,IF4,IF5)) GOTO 160
  156. *
  157. * VERIFICATION TAILLE
  158. IF (N3.EQ.0.AND.N5.EQ.0) THEN
  159. KF1=IPRED(IF1,II)
  160. KF2=ISUCC(IF2,II)
  161. DNORM=(XYZ(1,KF1)-XYZ(1,KF2))**2
  162. # +(XYZ(2,KF1)-XYZ(2,KF2))**2
  163. # +(XYZ(3,KF1)-XYZ(3,KF2))**2
  164. DTEST=tcrit*XYZ(4,KF1)*XYZ(4,KF2)
  165. IF (DNORM.GT.DTEST) GOTO 160
  166. ENDIF
  167. IF (N4.EQ.0.AND.N5.EQ.0) THEN
  168. KF1=IPRED(IF2,JJ)
  169. KF2=ISUCC(IF1,JJ)
  170. DNORM=(XYZ(1,KF1)-XYZ(1,KF2))**2
  171. # +(XYZ(2,KF1)-XYZ(2,KF2))**2
  172. # +(XYZ(3,KF1)-XYZ(3,KF2))**2
  173. DTEST=tcrit*XYZ(4,KF1)*XYZ(4,KF2)
  174. IF (DNORM.GT.DTEST) GOTO 160
  175. ENDIF
  176. * verification complementaire sur la facette if5
  177. if (n5.eq.0) then
  178. do 200 i=1,4
  179. xyz(i,nptmax+1)=0.
  180. do 210 j=1,4
  181. xyz(i,nptmax+1)=xyz(i,nptmax+1)+xyz(i,nfc(j,if5))
  182. 210 continue
  183. xyz(i,nptmax+1)=xyz(i,nptmax+1)/4.d0
  184. 200 continue
  185. CALL DIST(nptmax+1,KP,GL,IOK,II,JJ,nfc(1,if5),nfc(2,if5),
  186. > nfc(3,if5),nfc(4,if5),0,0,0,0)
  187. if (iok.eq.0.AND.IVERB.EQ.1) write (6,*) ' prism1 echec dist'
  188. if (iok.eq.0) goto 160
  189. endif
  190. C
  191. C LE VOLUME CREE EST VALIDE |
  192. C ---------------------------
  193. C MEMORISATION DU VOLUME IF1, IF2, IF3, IF4 ET IF5
  194. C ------------------------------------------------
  195. NVOL=NVOL+1
  196. IVOL(9,NVOL)=30
  197. IF (NFV(1,IF1).EQ.0) NFV(1,IF1)=NVOL
  198. IF (NFV(1,IF1).NE.NVOL) NFV(2,IF1)=NVOL
  199. IF (NFV(1,IF2).EQ.0) NFV(1,IF2)=NVOL
  200. IF (NFV(1,IF2).NE.NVOL) NFV(2,IF2)=NVOL
  201. IF (NFV(1,IF3).EQ.0) NFV(1,IF3)=NVOL
  202. IF (NFV(1,IF3).NE.NVOL) NFV(2,IF3)=NVOL
  203. IF (NFV(1,IF4).EQ.0) NFV(1,IF4)=NVOL
  204. IF (NFV(1,IF4).NE.NVOL) NFV(2,IF4)=NVOL
  205. IF (NFV(1,IF5).EQ.0) NFV(1,IF5)=NVOL
  206. IF (NFV(1,IF5).NE.NVOL) NFV(2,IF5)=NVOL
  207. IVOL(1,NVOL)=II
  208. IVOL(2,NVOL)=IPRED(IF1,II)
  209. IVOL(3,NVOL)=ISUCC(IF2,II)
  210. IVOL(4,NVOL)=JJ
  211. IVOL(5,NVOL)=ISUCC(IF1,JJ)
  212. IVOL(6,NVOL)=IPRED(IF2,JJ)
  213. C
  214. * WRITE(6,1100)NVOL,(IVOL(I,NVOL),I=1,9)
  215. *1100 FORMAT(I4,4X,14I4)
  216. if (iimpi.eq.1) write (6,1100) nfacet,(ivol(i,nvol),i=1,6)
  217. 1100 FORMAT(' PRISM1 facettes ',i5,' pri6 ',8i5)
  218. C
  219. * DO 150 J=1,NPTMAX
  220. * WRITE(6,1110)J,(NPF(I,J),I=1,40)
  221. *1110 FORMAT(I4,4X,40I3)
  222. *150 CONTINUE
  223. C
  224. IGAGNE=1
  225. C
  226. RETURN
  227. C
  228. 160 CONTINUE
  229. C
  230. C LE VOLUME CREE N'EST PAS VALIDE: IL FAUT DONC DETRUIRE LES FACETT
  231. C CREEES. ---------------------------------------------------------
  232. CALL REPSUB(IF1)
  233. CALL REPSUB(IF2)
  234. CALL REPSUB(IF3)
  235. CALL REPSUB(IF4)
  236. CALL REPSUB(IF5)
  237. C
  238. NFCMAX=NFCMAX-ICTF
  239. C
  240. GOTO 9000
  241. 9000 CONTINUE
  242. * on va d'abord betement essayer de mettre 2 pyramides en rajoutant
  243. * un point
  244. call pyra3(II,JJ,IF1,IF2,IGAGNE)
  245. IF (IGAGNE.EQ.1) RETURN
  246. IF (N3.NE.0) CALL COMBL3(II,IF1,IF2,IF3,IGAGNE)
  247. IF (IGAGNE.EQ.1) RETURN
  248. IF (N4.NE.0) CALL COMBL3(JJ,IF2,IF1,IF4,IGAGNE)
  249. RETURN
  250. END
  251.  
  252.  
  253.  
  254.  
  255.  

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