Télécharger prelim.eso

Retour à la liste

Numérotation des lignes :

prelim
  1. C PRELIM SOURCE OF166741 24/06/06 21:15:03 11930
  2.  
  3. C=====================================================================
  4. C CE SOUS PROGRAMME PREPARE LES DONNEES POUR ELIM
  5. C IL FORME LA TABLE DES POINTS A TESTER
  6. C
  7. C ICPR EST LA MOUVELLE NUMEROTATION
  8. C ICPR(ANCIEN N°)= NOUVEAU N°
  9. C ICPR(ANCIEN N°)= 0 SI LE NOEUD N'APPARTIENT PAS AU(X)
  10. C MAILLAGE(S) ARGUMENT(S)
  11. C IAPOB1 EST UN TABLEAU SUR LA NOUVELLE NUMEROTATION
  12. C =1 SI LE NOEUD EST DANS LE 1ER MAILLAGE =0 SINON
  13. C IAPOB2 EST UN TABLEAU SUR LA NOUVELLE NUMEROTATION
  14. C =1 SI LE NOEUD EST DANS LE 2E MAILLAGE =0 SINON
  15. C ICLE=0 PRELIM APPELE PAR L'OPERATEUR ELIM
  16. C ICLE=1 PRELIM APPELE PAR L'OPERATEUR VISAVIS
  17. C======================================================================
  18.  
  19. SUBROUTINE PRELIM(ICLE)
  20.  
  21. IMPLICIT INTEGER(I-N)
  22. IMPLICIT REAL*8 (A-H,O-Z)
  23.  
  24. -INC PPARAM
  25. -INC CCOPTIO
  26. -INC CCASSIS
  27. -INC CCGEOME
  28.  
  29. -INC SMCOORD
  30. -INC SMELEME
  31. POINTEUR MELEM2.MELEME
  32.  
  33. -INC TMLCHA8
  34. -INC TMCOLAC
  35.  
  36. SEGMENT ICPR(nbpts)
  37. SEGMENT IAPOB1(nbpts)
  38. SEGMENT IAPOB2(nbpts)
  39.  
  40. CHARACTER*8 TYPI
  41. REAL*8 XXX,CRIT
  42.  
  43. C- TRAITEMENT DES ARGUMENTS :
  44. IF (ICLE.LE.0) THEN
  45. CALL QUETYP(TYPI,0,IRET)
  46. IF (IRET.EQ.0) THEN
  47. CALL ERREUR(533)
  48. RETURN
  49. ENDIF
  50.  
  51. IF (TYPI.NE.'MAILLAGE' .AND.
  52. & TYPI.NE.'POINT ' .AND.
  53. & TYPI.NE.'ENTIER ' .AND.
  54. & TYPI.NE.'FLOTTANT') THEN
  55. MOTERR(1:8)=TYPI
  56. CALL ERREUR(39)
  57. RETURN
  58. ENDIF
  59. ENDIF
  60.  
  61. MELEME=0
  62. MELEM2=0
  63. IPOIN1=0
  64. IPOIN2=0
  65. CRIT =0.D0
  66.  
  67. C- ---------------------
  68. C- ARGUMENTS Syntaxe 1 : ELIM Mail1 (Mail2) xxx ;
  69. C- ---------------------
  70. ICOND=0
  71. IF (ICLE.EQ.1) ICOND=1
  72. TYPI = 'MAILLAGE'
  73. CALL LIROBJ(TYPI,MELEME,ICOND,IRETOU)
  74. IF (IERR.NE.0) RETURN
  75. IF (MELEME.NE.0) THEN
  76. CALL LIROBJ(TYPI,MELEM2,0,IRETOU)
  77. IF (IERR.NE.0) RETURN
  78. IF (MELEM2.EQ.0) MELEM2=MELEME
  79. C On remet dans la pile le dernier maillage lu (DALLER QUEL / DOMA / ...)
  80. IF (ICLE.LE.0) CALL REFUS
  81. C Critere de proximite :
  82. CALL LIRREE(XXX,0,IRETOU)
  83. IF (IERR.NE.0) RETURN
  84. IF (IRETOU.NE.0) THEN
  85. CRIT=XXX
  86. ELSE
  87. CRIT=DBLE(DENSIT)/10.D0
  88. ENDIF
  89. CRIT=ABS(CRIT)
  90. IF (CRIT.EQ.0.D0) CALL ERREUR(21)
  91. IF (IERR.NE.0) RETURN
  92. c-dbg write(ioimp,*) 'PRELIM(E1)',MELEME,MELEM2,nbpts,CRIT
  93.  
  94. C- ---------------------
  95. C- ARGUMENTS Syntaxe 2 : ELIM Poin1 Poin2 ;
  96. C- ---------------------
  97. ELSE
  98. TYPI = 'POINT '
  99. CALL LIROBJ(TYPI,IPOIN1,1,IRETOU)
  100. CALL LIROBJ(TYPI,IPOIN2,1,IRETOU)
  101. IF (IERR.NE.0) RETURN
  102. C* Cas particulier : les points sont identiques
  103. IF (IPOIN1 .EQ. IPOIN2) RETURN
  104. c-dbg write(ioimp,*) 'PRELIM(E2)',IPOIN1,IPOIN2,nbpts
  105.  
  106. ENDIF
  107.  
  108. if (nbesc.ne.0) then
  109. mestra=imestr
  110. SEGACT MESTRA*MOD
  111. call ooofrc(1)
  112. call setass(1)
  113. endif
  114. SEGACT MCOORD*MOD
  115. SEGINI ICPR
  116.  
  117. C- ----------------------
  118. C- TRAITEMENT Syntaxe 1 : ELIM Meleme (Melem2) CRIT ;
  119. C- ----------------------
  120. IF (MELEME.NE.0) THEN
  121.  
  122. CALL ACTOBJ(TYPI,MELEME,1)
  123. IF (MELEM2.NE.MELEME) CALL ACTOBJ(TYPI,MELEM2,1)
  124.  
  125. SEGINI IAPOB1,IAPOB2
  126.  
  127. ITE=0
  128. C PREMIER MAILLAGE REMPLISSAGE ICPR ET IAPOB1
  129. IPT1=MELEME
  130. ilm=meleme.LISOUS(/1)
  131. DO I=1,MAX(1,ilm)
  132. IF (ilm.NE.0) IPT1=meleme.LISOUS(I)
  133. DO K=1,IPT1.NUM(/1)
  134. DO L=1,IPT1.NUM(/2)
  135. M=IPT1.NUM(K,L)
  136. IF (ICPR(M).EQ.0) THEN
  137. ITE=ITE+1
  138. ICPR(M)=ITE
  139. ENDIF
  140. IAPOB1(ICPR(M))=1
  141. ENDDO
  142. ENDDO
  143. ENDDO
  144. C DEUXIEME MAILLAGE REMPLISSAGE IPCR ET IAPOB2
  145. IPT2=MELEM2
  146. ilm=melem2.LISOUS(/1)
  147. DO I=1,MAX(1,ILM)
  148. IF (ilm.NE.0) IPT2=melem2.LISOUS(I)
  149. DO K=1,IPT2.NUM(/1)
  150. DO L=1,IPT2.NUM(/2)
  151. M=IPT2.NUM(K,L)
  152. IF (ICPR(M).EQ.0) THEN
  153. ITE=ITE+1
  154. ICPR(M)=ITE
  155. ENDIF
  156. IAPOB2(ICPR(M))=1
  157. ENDDO
  158. ENDDO
  159. ENDDO
  160. C
  161. C ON DETERMINE LES POINTS SUPPORTS DES MULTIPLICATEURS DE LAGRANGE
  162. TYPI=' '
  163. K=-1
  164. CALL TYPFIL(TYPI,K)
  165. CALL CREPIL(ICOLAC,-K)
  166. M=1
  167. SEGINI MLCHA8
  168. MLCHAR(1)='MAILLAGE'
  169. CALL FILLPO(ICOLAC,MLCHA8)
  170. SEGSUP MLCHA8
  171. CALL FILLPI(ICOLAC)
  172. SEGACT ICOLAC
  173. C BOUCLE SUR LES MAILLAGES ON CHERCHE LES ELEMENTS DE TYPE 22
  174. C ("MULT")
  175. C ON INDIQUE LEUR EXISTENCE DANS IAPOB1 AVEC LA VALEUR 2
  176. ITLACC=KCOLA(1)
  177. SEGACT ITLACC
  178. DO L=1,ITLAC(/1)
  179. ipt3=ITLAC(L)
  180. IF (ipt3.NE.0) THEN
  181. SEGACT,ipt3
  182. IPT1=ipt3
  183. ilm = ipt3.LISOUS(/1)
  184. DO LL=1,MAX(1,ilm)
  185. IF (ilm.NE.0) THEN
  186. IPT1=ipt3.LISOUS(LL)
  187. SEGACT IPT1
  188. ENDIF
  189. IF (IPT1.ITYPEL .EQ. 22) THEN
  190. DO LLL=1,IPT1.NUM(/2)
  191. C LE PREMIER NOEUD SUPPORTE LES MULTIPLICATEURS
  192. lnoe=ICPR(IPT1.NUM(1,LLL))
  193. IF (lnoe .NE. 0) IAPOB1(lnoe)=2
  194. ENDDO
  195. ENDIF
  196. ENDDO
  197. ENDIF
  198. ENDDO
  199.  
  200. c-dbg write(ioimp,*) 'PRELIM',ICLE,meleme,melem2,crit,ite,nbpts
  201. c-dbg write(ioimp,*) ' ',icpr,iapob1,iapob2
  202.  
  203. CALL ELIMIN(ICPR,CRIT,ITE,IAPOB1,IAPOB2,MELEME,MELEM2,ICLE)
  204.  
  205. SEGSUP,IAPOB2,IAPOB1
  206.  
  207. C- ----------------------
  208. C- TRAITEMENT SYNTAXE 2 : ELIM Poin1 Poin2 ;
  209. C- ----------------------
  210. ELSE
  211. C- ON MET TOUTES LES COORDONNEES DU SECOND POINT A CELLES DU PREMIER
  212. C- independamment de leur distance (pas de critere de proximite)
  213. idimp1 = IDIM + 1
  214. IREF1 = (IPOIN1-1)*idimp1
  215. IREF2 = (IPOIN2-1)*idimp1
  216. DO I=1,idimp1
  217. XCOOR(IREF2+I)=XCOOR(IREF1+I)
  218. ENDDO
  219. C- Mise a jour de la NUMEROTATION
  220. ICPR(IPOIN1)=1
  221. ICPR(IPOIN2)=1
  222. NUMNP=1
  223. itlacc=0
  224. CALL TASSP2(itlacc,ICPR,NUMNP,icolac,0,0)
  225.  
  226. ENDIF
  227.  
  228. C- -----------------------
  229. C- FIN TRAITEMENT - MENAGE
  230. C- -----------------------
  231. C Supprime icolac et tous ses sous-objets (ITLACC...)
  232. CALL SUPPIL(icolac,-1)
  233. SEGSUP,ICPR
  234.  
  235. SEGACT,MCOORD
  236.  
  237. if (nbesc.ne.0) then
  238. mestra=imestr
  239. call ooofrc(0)
  240. call setass(0)
  241. SEGDES MESTRA
  242. endif
  243.  
  244. c RETURN
  245. END
  246.  
  247.  
  248.  

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