Télécharger femv12.eso

Retour à la liste

Numérotation des lignes :

femv12
  1. C FEMV12 SOURCE CB215821 25/04/22 21:15:05 12245
  2. SUBROUTINE FEMV12(IUFEM,NBLIGN,MTABLE)
  3.  
  4. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  5. C
  6. C BUT: Lecture des fichiers .fem du profil OptiStruct de HyperMesh.
  7. C Les données sont rendues dans une table.
  8. C
  9. C Auteur : Clément BERTHINIER
  10. C Novembre 2013
  11. C
  12. C Liste des Corrections :
  13. C 26/11/2013
  14. C Clément B. : Anomalie lors de l'import de coordonnées corrigée
  15. C
  16. C Appele par : LIRFEM
  17. C
  18. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  19.  
  20.  
  21. IMPLICIT INTEGER(I-N)
  22. IMPLICIT REAL*8 (A-H,O-Z)
  23.  
  24. C Définition des COMMON utiles
  25. -INC PPARAM
  26. -INC CCOPTIO
  27. -INC CCREDLE
  28. -INC CCGEOME
  29.  
  30. C Définition des OBJETS utiles
  31. C SMCOORD : à ne jamais désactiver contenant les coordonnées des points
  32. C SMELEME : objet MAILLAGE
  33. C SMTABLE : objet TABLE
  34. -INC SMCOORD
  35. -INC SMELEME
  36. -INC SMTABLE
  37.  
  38.  
  39. C***********************************************************************
  40. C Définition des différents segments et de leur contenu
  41. C***********************************************************************
  42. SEGMENT MLINOE
  43. C JGNOLO : ID du noeud dans la numérotation LOCALE
  44. C JGNOLU : ID du noeud lu dans le fichier
  45. C INOC3M : Numéro du noeud dans la numérotation absolue de Cast3M
  46. C INOEHM : Numéro du JGième noeud lu dans le fichier .fem
  47. C ICORNO : Correspondance depuis la numérotation lue vers la numérotation LOCALE des noeuds
  48. INTEGER INOC3M(JGNOLO)
  49. INTEGER INOEHM(JGNOLO)
  50. INTEGER ICORNO(JGNOLU)
  51. ENDSEGMENT
  52.  
  53. SEGMENT MLIELE
  54. C JGELLO : ID de l'élément dans la numérotation LOCALE
  55. C JGELLU : ID de l'élément lu dans le fichier
  56. C JELCON : Nombre total connectivité lues
  57. C IELCON : Ou aller lire le début de la connectivité dans ICONTO
  58. C IELNBN : Nombre de noeuds de connectivité à lire dans ICONTO
  59. C IELTYP : Type de l'élément lu pour Cast3M
  60. C IELPRO : ID de la propriété dans HM (Valeur lue pour IVALU = 2)
  61. C IELCOM : ID du component dans HM dans lequel est rangé cet élément
  62. C ICONTO : Tableau dans lequel sont placées toutes les connectivités les unes après les autres
  63. C ICOREL : Correspondance depuis la numérotation LOCALE vers la numérotation lue des ELEMENTS
  64. INTEGER IELCON(JGELLU)
  65. INTEGER IELNBN(JGELLU)
  66. INTEGER IELTYP(JGELLU)
  67. INTEGER IELPRO(JGELLU)
  68. INTEGER IELCOM(JGELLU)
  69. INTEGER ICONTO(JELCON)
  70. INTEGER ICOREL(JGELLO)
  71. ENDSEGMENT
  72.  
  73.  
  74. SEGMENT MELEQU
  75. C Dans ce tableau dynamique sera stoquée la place dans NOMS (voir bdata.eso) des éléments équivalents Cast3M
  76. INTEGER IELEQU(NBGEOM)
  77. ENDSEGMENT
  78.  
  79. C Segment contenant tout ce qui sera utile pour définir un component au sens HM
  80. SEGMENT MCOMP
  81. C JGCOLO : Indice du composant dans la numérotation LOCALE
  82. C JGCOLU : ID lu dans le fichier
  83. C NBGEOM : Nombre de types d'éléments relu dans HM
  84. C NAMECO : Nom des components
  85. C ICOULC : Couleur des components
  86. C NBTYPE : Nombre de types d'éléments dans le component + le nombre total de sous type (NBSOUS) dans la dernière case
  87. C NBELCO : Nombre d'éléments de chaque type dans le component (NBELEM)
  88. C NBELC2 : Nombre d'éléments de chaque type dans le component a mesure qu'ils sont triés (à la fin)
  89. C NPOINT : Liste des pointeurs vers les MELEME simples de chaque component, l'indice NBGEOM+1 représente un pointeur de MELEME COMPLEXE au cas échéant
  90. C ICOCOR : Correspondance entre la numérotation LOCALE et HM des components
  91. CHARACTER*80 NAMECO(JGCOLU)
  92. INTEGER ICOULC(JGCOLU)
  93. INTEGER NBTYPE(JGCOLU,NBGEOM+1)
  94. INTEGER NBELCO(JGCOLU,NBGEOM)
  95. INTEGER NBELC2(JGCOLU,NBGEOM)
  96. INTEGER NPOINT(JGCOLU,NBGEOM+1)
  97. INTEGER ICOCOR(JGCOLO)
  98. ENDSEGMENT
  99.  
  100. C Segment contenant tout le necessaire pour reconstituer les SETS de noeuds et d'elements
  101. SEGMENT MSET
  102. C JGSELU : ID du SET lu
  103. C JGSELO : ID du SET incrémenté à chaque nouveau set (Numérotation Locale)
  104. C JGNBEL : Nombre d'entité maximum lues pour un SET
  105. C NOMSET : Nom du SET lu
  106. C ITYSET : Type de SET lu (1 noeud, 2 element)
  107. C ILISTE : Liste des ID des entités lues pour chaque SET LU(Noeuds ou Elements)
  108. C NBENTI : Nombre d'entité lues Pour chaque SET
  109. C NBTYPS : Nombre de types d'éléments dans le SET + le nombre total de sous type (NBSOUS) dans la dernière case
  110. C NBELSE : Nombre d'éléments de chaque type dans le SET a mesure qu'ils sont triés (à la fin)
  111. C NPOINS : Liste des pointeurs vers les MELEME simples de chaque SETS, l'indice NBGEOM+1 représente un pointeur de MELEME COMPLEXE au cas échéant
  112. C ISECOR : Correspondance entre la numérotation LOCALE et HM (Lu) des Sets
  113. CHARACTER*80 NOMSET(JGSELU)
  114. INTEGER ITYSET(JGSELU)
  115. INTEGER ILISTE(JGNBEL,JGSELU)
  116. INTEGER NBENTI(JGSELO)
  117. INTEGER NBTYPS(JGSELU,NBGEOM+1)
  118. INTEGER NBELSE(JGSELU,NBGEOM)
  119. INTEGER NPOINS(JGSELU,NBGEOM+1)
  120. INTEGER ISECOR(JGSELO)
  121. ENDSEGMENT
  122.  
  123. C Segment contenant tout le necessaire pour reconstituer les LOADCOL (SPC, FORCE, MOMENT, PRESSION, TEMPERATURE)
  124. SEGMENT MLOCOL
  125. C JGLCLU : ID du LOADCOL lu
  126. C JGLCLO : ID du LOADCOL incrémenté à chaque nouveau LOADCOL (Numérotation Locale)
  127. C JGNBEN : Nombre d'entité maximum lues pour un LOADCOL
  128. C NOMLOC : Nom du LOADCOL lu
  129. C ILOCNO : Liste des ID des noeuds lus pour chaque LOADCOL LU
  130. C ISPC : Liste des blocages sous la forme d'un entier pour les SPC
  131. C TEMP : Liste des températures sous la forme d'un flottant
  132. C FORCX : Valeur de la force lue suivant X
  133. C FORCY : Valeur de la force lue suivant Y
  134. C FORCZ : Valeur de la force lue suivant Z
  135. C MOMX : Valeur du moment lu suivant X
  136. C MOMY : Valeur du moment lu suivant Y
  137. C MOMZ : Valeur du moment lu suivant Z
  138. C NBENLC : Nombre d'entité lues Pour chaque LOADCOL
  139. C ITYLOC : Type de LOADCOL lu
  140. C 1- SPC
  141. C 2- TEMP
  142. C 3- FORCE
  143. C 4- MOMENT
  144. C 5- PRESSION Normale
  145. C 6- PRESSION Directionnelle (Vecteur contrainte)
  146. C ILCCOR : Correspondance entre la numérotation LOCALE et HM (Lu) des LOADCOL
  147. CHARACTER*80 NOMLOC(JGLCLU)
  148. INTEGER ITYLOC(JGLCLU)
  149. INTEGER ILOCNO(JGNBEN,JGLCLU)
  150. INTEGER ISPC(JGNBEN,JGLCLU)
  151. REAL*8 TEMP(JGNBEN,JGLCLU)
  152. REAL*8 FORCX(JGNBEN,JGLCLU)
  153. REAL*8 FORCY(JGNBEN,JGLCLU)
  154. REAL*8 FORCZ(JGNBEN,JGLCLU)
  155. REAL*8 MOMX(JGNBEN,JGLCLU)
  156. REAL*8 MOMY(JGNBEN,JGLCLU)
  157. REAL*8 MOMZ(JGNBEN,JGLCLU)
  158. INTEGER NBENLC(JGLCLU)
  159. INTEGER ILCCOR(JGLCLO)
  160. ENDSEGMENT
  161.  
  162. C***********************************************************************
  163. C Définition des DATA et déclarations diverses
  164. C***********************************************************************
  165. PARAMETER (NBNGEO=9)
  166. PARAMETER (NBREPR=3)
  167. PARAMETER (NBGEOM=16)
  168. PARAMETER (LONOBJ=1+NBGEOM+1)
  169.  
  170. C Déclaration des chaines de caractères
  171. CHARACTER*80 LIGNE
  172. CHARACTER*4 COLO4
  173. CHARACTER*8 MOTCL8
  174. CHARACTER*8 COLO8
  175. CHARACTER*9 COLO9
  176. CHARACTER*16 COLO16
  177. CHARACTER*17 COLO17
  178. CHARACTER*80 COLO80
  179.  
  180. C Déclaration de tableaux de chaines de caractères
  181. CHARACTER*8 NGTYPE(NBNGEO)
  182. CHARACTER*8 NREPRI(NBREPR)
  183. CHARACTER*8 GETYPE(NBGEOM)
  184. CHARACTER*4 GELEQU(NBGEOM)
  185.  
  186. C Décalration des Boleens
  187. C LOGICAL DEBCB
  188. LOGICAL PRECID
  189.  
  190. LOGICAL BSPC
  191. LOGICAL BFORC
  192. LOGICAL BMOM
  193. LOGICAL BPRES
  194. LOGICAL BTEMP
  195.  
  196.  
  197.  
  198. INTEGER GECONN(NBGEOM)
  199. INTEGER IORDCO(NBGEOM*20)
  200. INTEGER NOBJ(LONOBJ)
  201. C NOBJ( 1 ) : Nbr d'objets géométriques différents lus
  202. C NOBJ( n ) : Nombre d'objets géométriques de chaque type Lus
  203. C NOBJ(end) : Nombre d'éléments lu au total
  204.  
  205.  
  206.  
  207. C Liste des mots clé non Géométrique en début de ligne d'un fichier .fem
  208. DATA NGTYPE / '$HMMOVE ',
  209. & '$HMNAME ',
  210. & '$HWCOLOR',
  211. & '$HMSET ',
  212. & 'SPC ',
  213. & 'TEMP ',
  214. & 'FORCE ',
  215. & 'MOMENT ',
  216. & 'PLOAD4 ' /
  217.  
  218. C Liste des mots clé non Géométrique en début de ligne d'un fichier .fem
  219. DATA NREPRI / '+ ',
  220. & '* ',
  221. & '$ ' /
  222.  
  223. C Liste des mots clé de Géométrie en début de ligne d'un fichier .fem
  224. DATA GETYPE / 'GRID ','GRID* ',
  225. & 'RBE2 ','RBE3 ',
  226. & 'CTRIA3 ','CTRIA6 ',
  227. & 'CQUAD4 ','CQUAD8 ',
  228. & 'CTETRA ','CTETRA10',
  229. & 'CPYRA ','CPYRA13 ',
  230. & 'CPENTA ','CPENTA15',
  231. & 'CHEXA ','CHEXA20 ' /
  232.  
  233. C Elements equivalents dans Cast3M
  234. DATA GELEQU / 'POI1','POI1',
  235. & 'SEG2','SEG3',
  236. & 'TRI3','TRI6',
  237. & 'QUA4','QUA8',
  238. & 'TET4','TE10',
  239. & 'PYR5','PY13',
  240. & 'PRI6','PR15',
  241. & 'CUB8','CU20' /
  242.  
  243. C Data indiquant le nombre de noeud de connectivité pour chaque Elements
  244. DATA GECONN / 1,1 ,
  245. & 2,3 ,
  246. & 3,6 ,
  247. & 4,8 ,
  248. & 4,10,
  249. & 5,13,
  250. & 6,15,
  251. & 8,20 /
  252.  
  253.  
  254. C Data permettrant de mettre le bon ordre dans la connectivité des éléments
  255. C Le facteur 20 de ce DATA vient du fait que l'élément le plus
  256. C Complexe a une connectivité à 20 éléments (CU20 ou HEXA 2nd Ordre)
  257. DATA IORDCO /
  258. & 1,0,0,0 ,0,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , POI1
  259. & 1,0,0,0 ,0,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , POI1
  260. & 1,2,0,0 ,0,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , SEG2
  261. & 3,1,2,0 ,0,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , SEG3
  262. & 1,2,3,0 ,0,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , TRI3
  263. & 1,4,2,5 ,3,6 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , TRI6
  264. & 1,2,3,4 ,0,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , QUA4
  265. & 1,5,2,6 ,3,7 ,4 ,8 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , QUA8
  266. & 1,2,3,4 ,0,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , TET4
  267. & 1,5,2,6 ,3,7 ,8 ,9 ,10,4 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , TE10
  268. & 1,2,3,4 ,5,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , PYR5
  269. & 2,7,3,8 ,4,9 ,1 ,6 ,11,12,13,10,5 ,0 ,0 ,0 ,0,0 ,0,0 , PY13
  270. & 1,2,3,4 ,5,6 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , PRI6
  271. & 1,7,2,8 ,3,9 ,10,11,12,4 ,13,5 ,14,6 ,15,0 ,0,0 ,0,0 , PR15
  272. & 1,2,3,4 ,5,6 ,7 ,8 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0 ,0,0 , CUB8
  273. & 1,9,2,10,3,11,4 ,12,13,14,15,16,5 ,17,6 ,18,7,19,8,20 / CU20
  274.  
  275. C Option de Débuggage par Clément BERTHINIER
  276. C DEBCB = .TRUE.
  277. C DEBCB = .FALSE.
  278.  
  279.  
  280. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  281. C IF (DEBCB) THEN
  282. C WRITE(IOIMP,*)'Entree dans la Subroutine LIRFEM '
  283. C ENDIF
  284.  
  285. C Création de la table VIDE de sortie
  286. M=0
  287. SEGINI,MTABLE
  288.  
  289. C Format de lecture d'un fichier .fem
  290. C 10 fois 8 caractères par ligne en simple précision
  291. C 5 fois 16 caractères par ligne en double précision
  292.  
  293. 1000 FORMAT(A80)
  294.  
  295. C Initialisation des Segments
  296. MLINOE = 0
  297. MLIELE = 0
  298. MELEQU = 0
  299. MCOMP = 0
  300. MSET = 0
  301.  
  302. C Initialisations autres
  303. C Increment de NOEUD
  304. INCJGN = 5000
  305. C Increment d' ELEMENT
  306. INCJGE = 5000
  307. C Increment de CONNECTIVITE
  308. INCJCO = 5000
  309. C Increment de COMPONENT
  310. INCCOM = 10
  311. C Increment de SETS
  312. INCSET = 10
  313. C Increment de LOADCOL
  314. INCLOC = 10
  315.  
  316. IRETO1 = 0
  317. IRETO2 = 0
  318. IRETO3 = 0
  319. IRETO4 = 0
  320. IVALU = 0
  321. IDLU = 0
  322. IDLU0 = 0
  323. IDLU1 = 0
  324. IDCOMP = 0
  325. IDTYPE = 0
  326. IDELEM = 0
  327. IDCONN = 0
  328. IDCOCA = 0
  329. IDCOLU = 0
  330. IDMAIL = 0
  331. INDICE = 0
  332. JNDICE = 0
  333. ICOL = 0
  334. ITEST = 0
  335. IADD = 0
  336. IENTLU = 0
  337.  
  338. IPT1 = 0
  339. IPT2 = 0
  340.  
  341. LCOL = 0
  342. NCOLOL = 0
  343. NBCONN = 0
  344. NBCOMP = 0
  345. NBSETS = 0
  346. NBLOCO = 0
  347.  
  348. NBNPTS = 0
  349. NELTOT = 0
  350. NENTIT = 0
  351.  
  352. XNCJG = REAL(2.0D0)
  353.  
  354. PRECID = .FALSE.
  355. BSPC = .FALSE.
  356. BFORC = .FALSE.
  357. BMOM = .FALSE.
  358. BPRES = .FALSE.
  359. BTEMP = .FALSE.
  360. C Tableau NOBJ initialisé à 0
  361. DO 1 INDICE = 1, LONOBJ
  362. NOBJ(INDICE)=0
  363. 1 CONTINUE
  364.  
  365. C Segment de lecture libre
  366. SEGINI,sredle
  367. SEPARA=.FALSE.
  368. MOT=' '
  369.  
  370. C Initialisation des segments
  371. JGNOLU=INCJGN
  372. JGNOLO=INCJGN
  373. SEGINI,MLINOE
  374.  
  375. JGELLU=INCJGE
  376. JGELLO=INCJGE
  377. JELCON=INCJCO
  378. SEGINI,MLIELE
  379.  
  380. SEGINI,MELEQU
  381.  
  382. JGCOLU=INCCOM
  383. JGCOLO=INCCOM
  384. SEGINI,MCOMP
  385.  
  386. JGNBEL=INCJGE
  387. JGSELU=INCSET
  388. JGSELO=INCSET
  389. SEGINI,MSET
  390.  
  391.  
  392. C JGENLU=INCJGE
  393. JGNBEN=INCJGE
  394. JGLCLU=INCLOC
  395. JGLCLO=INCLOC
  396. SEGINI,MLOCOL
  397.  
  398. segact mcoord*mod
  399. NBANC=nbpts
  400. idimp1=IDIM+1
  401. NBPTS=NBANC+JGNOLO
  402. SEGADJ,MCOORD
  403.  
  404. C Remplissage du tableau d'entier représentant la place dans NOMS (Type d'élément selon CastM3)
  405. C La taille de NOMS est spécifiée maximum égale à 100 dans CCGEOME.INC
  406. DO 9 INDICE = 1, NBGEOM
  407. COLO4=GELEQU(INDICE)
  408. CALL PLACE(NOMS,100,IRETO3,COLO4)
  409. IELEQU(INDICE)=IRETO3
  410. 9 CONTINUE
  411.  
  412. 10 CONTINUE
  413. C Lecture de la ligne complete (80 caracteres)
  414. READ(IUFEM,1000,ERR=989,END=100) LIGNE
  415. NBLIGN = NBLIGN + 1
  416. C IF (DEBCB) THEN
  417. C WRITE(IOIMP,*) 'Nombre de LIGNES : ',NBLIGN
  418. C ENDIF
  419.  
  420. C Premier mot de la ligne
  421. COLO8=LIGNE(1:LEN(COLO8))
  422.  
  423. C Largeur des colonnes à lire par défaut en Simple Précision
  424. PRECID = .FALSE.
  425.  
  426. C Recherche si balise de suite d'instruction
  427. CALL PLACE(NREPRI,NBREPR,IRETO4,COLO8)
  428. IF (IRETO4.NE.0) THEN
  429. IF (IRETO4.EQ.2) THEN
  430. PRECID = .TRUE.
  431. ENDIF
  432. GOTO 12
  433. ENDIF
  434.  
  435. C Recherche dans le DATA des mots-clés non géométriques
  436. CALL PLACE(NGTYPE,NBNGEO,IRETO2,COLO8)
  437. IF (IRETO2.NE.0) THEN
  438. IVALU = 0
  439. ENDIF
  440.  
  441. C Recherche dans le DATA des éléments géométriques
  442. CALL PLACE(GETYPE,NBGEOM,IRETO1,COLO8)
  443. IF (IRETO1.NE.0) THEN
  444. IF (IRETO1.EQ.2) THEN
  445. PRECID = .TRUE.
  446. ENDIF
  447. IVALU = 0
  448.  
  449. C Si le type rencontré n'avait pas été rencontré alors j'incrémente le nombre d'objet de ce type
  450. IF ( NOBJ(1+IRETO1).EQ.0) THEN
  451. NOBJ(1) = NOBJ(1) + 1
  452. ENDIF
  453.  
  454. C Incrémente le nombre total d'éléments lus dans la dernière case de NOBJ
  455. IF (IRETO1.GT.2) THEN
  456. NOBJ(LONOBJ) = NOBJ(LONOBJ) + 1
  457. ENDIF
  458.  
  459. NOBJ(1+IRETO1) = NOBJ(1+IRETO1)+1
  460. NBNPTS = NOBJ(2)+NOBJ(3)
  461. NELTOT = NOBJ(LONOBJ)
  462. ENDIF
  463.  
  464. 12 CONTINUE
  465.  
  466. C Détermination du Format de Lecture des colonnes
  467. IF (PRECID) THEN
  468. NCOLOL = 4
  469. LCOL = LEN(COLO16)
  470. ELSE
  471. NCOLOL = 9
  472. LCOL = LEN(COLO8)
  473. ENDIF
  474.  
  475. C Boucle pour lire les Colonnes qui suivent :
  476. DO 11 ICOL = 1, NCOLOL
  477. IDCOL = LEN(COLO8) + 1 + (ICOL - 1) * LCOL
  478. IFCOL = IDCOL + LCOL
  479. C IF (DEBCB) THEN
  480. C WRITE(IOIMP,*) 'IDCOL : ',IDCOL
  481. C WRITE(IOIMP,*) 'IFCOL : ',IFCOL
  482. C WRITE(IOIMP,*) 'LCOL : ',LCOL
  483. C ENDIF
  484.  
  485. TEXT = LIGNE(IDCOL:IFCOL)
  486. IF (PRECID) THEN
  487. COLO16 = LIGNE(IDCOL:IFCOL)
  488. ELSE
  489. COLO8 = LIGNE(IDCOL:IFCOL)
  490. ENDIF
  491.  
  492. ICOUR = LCOL
  493. IFINAN= ICOUR+1
  494.  
  495. C Correction à la volée d'une caractéristique du format .fem le 'E' n'est pas toujours mis pour les puissances négatives
  496. IF ((IRETO1.EQ.1).AND.(IVALU.GE.1)) THEN
  497. C Cas de la lecture des coordonnées d'un noeud simple precision
  498. IF(COLO8(1:1).EQ.'-')THEN
  499. IADD = 1
  500. ELSE
  501. IADD = 0
  502. ENDIF
  503.  
  504. DO 15 ICHAR1 = 1+IADD, LCOL
  505. IF((COLO8(ICHAR1:ICHAR1).EQ.'-').AND.
  506. & (COLO8(ICHAR1-1:ICHAR1-1).NE.'e').AND.
  507. & (COLO8(ICHAR1-1:ICHAR1-1).NE.'E').AND.
  508. & (COLO8(ICHAR1-1:ICHAR1-1).NE.'d').AND.
  509. & (COLO8(ICHAR1-1:ICHAR1-1).NE.'D').AND.
  510. & (COLO8(ICHAR1-1:ICHAR1-1).NE.' '))THEN
  511. COLO9 =COLO8(1:ICHAR1-1)//'E-'//COLO8(ICHAR1+1:LCOL)
  512. TEXT = COLO9
  513. ICOUR =LEN(COLO9)
  514. IFINAN=ICOUR+1
  515. C WRITE(IOIMP,*) 'Nouvelle COLO9 : ',COLO9
  516. GOTO 15
  517. ENDIF
  518. 15 CONTINUE
  519. ELSEIF ((IRETO1.EQ.2).AND.(IVALU.GE.1)) THEN
  520. C Cas de la lecture des coordonnées d'un noeud double precision
  521. IF(COLO16(1:1).EQ.'-')THEN
  522. IADD = 1
  523. ELSE
  524. IADD = 0
  525. ENDIF
  526.  
  527. DO 16 ICHAR1 = 1+IADD, LCOL
  528. IF((COLO16(ICHAR1:ICHAR1).EQ.'-').AND.
  529. & (COLO16(ICHAR1-1:ICHAR1-1).NE.'e').AND.
  530. & (COLO16(ICHAR1-1:ICHAR1-1).NE.'E').AND.
  531. & (COLO16(ICHAR1-1:ICHAR1-1).NE.'d').AND.
  532. & (COLO16(ICHAR1-1:ICHAR1-1).NE.'D').AND.
  533. & (COLO16(ICHAR1-1:ICHAR1-1).NE.' '))THEN
  534. COLO17 =COLO16(1:ICHAR1-1)//'E-'//
  535. & COLO16(ICHAR1+1:LCOL)
  536. TEXT = COLO17
  537. ICOUR = LEN(COLO17)
  538. IFINAN=ICOUR+1
  539. C WRITE(IOIMP,*) 'Nouvelle COLO17 : ',COLO17
  540. goto 16
  541. ENDIF
  542. 16 CONTINUE
  543. ENDIF
  544.  
  545. NRAN = 0
  546. CALL REDLEC(sredle)
  547.  
  548. C Poursuite dans le cas ou quelque chose a été lue
  549. IF (IRE.NE.0) THEN
  550. IVALU = IVALU + 1
  551.  
  552. C IF (DEBCB) THEN
  553. C WRITE(IOIMP,*) 'TEXT :',TEXT(1:ICOUR)
  554. C WRITE(IOIMP,*) 'IVALU :',IVALU
  555. C IF (IRE.EQ.1) THEN
  556. C WRITE(IOIMP,*) 'Entier Lu :',NFIX
  557. C ENDIF
  558. C IF (IRE.EQ.2) THEN
  559. C WRITE(IOIMP,*) 'Flottant Lu :',FLOT
  560. C ENDIF
  561. C ENDIF
  562.  
  563.  
  564. C***********************************************************************
  565. C Traitement des des coordonnées des Noeuds
  566. C***********************************************************************
  567. IF ((IRETO1.EQ.1).OR.(IRETO1.EQ.2)) THEN
  568. C Ajustement du segment MCOORD
  569. IF (NBNPTS.GT.JGNOLO) THEN
  570. INCJGN = INT(REAL(INCJGN) * XNCJG)
  571. JGNOLO = JGNOLO + INCJGN
  572. NBPTS = JGNOLO + NBANC
  573. SEGADJ,MLINOE
  574. SEGADJ,MCOORD
  575. C IF (DEBCB) THEN
  576. C WRITE(IOIMP,*) 'Segment MCOORD Ajuste'
  577. C WRITE(IOIMP,*) 'INCJGN : ',INCJGN
  578. C WRITE(IOIMP,*) ' JGNOLO : ',JGNOLO
  579. C WRITE(IOIMP,*) 'NBPTS : ',NBPTS
  580. C ENDIF
  581. ENDIF
  582.  
  583. j=(NBANC+NBNPTS-1)*idimp1
  584.  
  585. C Lecture du numéro du noeud (TYPE ENTIER)
  586. IF (IVALU.EQ.1) THEN
  587. C Prévoir erreur si pas entier lu
  588. INOC3M(NBNPTS)=NBANC+NBNPTS
  589. INOEHM(NBNPTS)=NFIX
  590.  
  591. C Ajustement du segment MLINOE pour le tableau ICORNO(JGNOLU)
  592. IF(NFIX.GT.JGNOLU) THEN
  593. INCJGN = INT(REAL(INCJGN) * XNCJG)
  594. JGNOLU = NFIX + INCJGN
  595. SEGADJ,MLINOE
  596. ENDIF
  597. ICORNO(NFIX)=NBNPTS
  598.  
  599. C Lecture des 3 Coordonnées qui suivent le numéro du noeud (TYPE FLOT)
  600. ELSEIF((IVALU.GT.1).AND.(IVALU.LE.4)) THEN
  601. IF (IRE.EQ.1) THEN
  602. XCOOR(j+(IVALU-1))=NFIX
  603. C IF (DEBCB) THEN
  604. C WRITE(IOIMP,*) 'Entier Lu :',NFIX
  605. C WRITE(IOIMP,*) 'ICOL-3 :',ICOL-3
  606. C WRITE(IOIMP,*) 'IVALU-1 :',IVALU-1
  607. C ENDIF
  608. ELSEIF (IRE.EQ.2) THEN
  609. XCOOR(j+(IVALU-1))=FLOT
  610. C IF (DEBCB) THEN
  611. C WRITE(IOIMP,*) ' Flottant Lu :',FLOT
  612. C WRITE(IOIMP,*) 'ICOL-3 :',ICOL-3
  613. C WRITE(IOIMP,*) 'IVALU-1 :',IVALU-1
  614. C ENDIF
  615. ENDIF
  616. ELSEIF (IVALU.GT.4) THEN
  617. WRITE(IOIMP,*) 'ERREUR, IVALU > 4 pour des Coordonnées'
  618. ENDIF
  619. C La densité n'a pas d'équivalent dans Hyper Mesh, elle est à 0.D0 par défaut
  620. C XCOOR(j+idimp1)=REAL(0.D0)
  621.  
  622.  
  623. C***********************************************************************
  624. C Traitement des ELEMENTS et de leur CONNECTIVITE
  625. C***********************************************************************
  626. ELSEIF (IRETO1.GE.2) THEN
  627. C Ajustement du segment MLIELE
  628. IF(NELTOT.GT.JGELLO) THEN
  629. INCJGE = INT(REAL(INCJGE) * XNCJG)
  630. JGELLO = NELTOT + INCJGE
  631. SEGADJ,MLIELE
  632. ENDIF
  633.  
  634. IF (IVALU.EQ.1) THEN
  635. C Lecture de l'ID de l'élément
  636. IDLU = NFIX
  637.  
  638. C Enregistrement de la correspondance
  639. ICOREL(NELTOT)=IDLU
  640.  
  641. C Ajustement du segment MLIELE
  642. IF (IDLU.GT.JGELLU) THEN
  643. INCJGE = INT(REAL(INCJGE) * XNCJG)
  644. JGELLU = IDLU + INCJGE
  645. SEGADJ,MLIELE
  646. ENDIF
  647.  
  648. IELTYP(IDLU) = IRETO1
  649.  
  650. C IF(DEBCB) THEN
  651. C WRITE(IOIMP,*) 'IDLU',IELTYP(IDLU),'IRETO1',IRETO1
  652. C ENDIF
  653.  
  654. ELSEIF (IRE.EQ.1) THEN
  655. IF (IRETO1.EQ.3) THEN
  656. C Cas particulier des RBE2
  657. IF (IVALU.EQ.3) THEN
  658. C Pour l'instant cette données n'est pas utilisée (C'est déjà de la mise en donnée Elément Finis)
  659. C Je ne m'occupe pour l'instant que des supports géométriques des éléments
  660. C IF (DEBCB) THEN
  661. C WRITE(IOIMP,*) 'Degres bloques RBE2',COLO8
  662. C ENDIF
  663. ELSE
  664. NBCONN = NBCONN + 1
  665. IF (IVALU.EQ.2) THEN
  666. C Enregistrer ou débute la lecture de la connectivité
  667. IELCON(IDLU)=NBCONN
  668. ENDIF
  669. C Ajustement du segment MLIELE
  670. IF (NBCONN.GT.JELCON) THEN
  671. INCJCO = INT(REAL(INCJCO) * XNCJG)
  672. JELCON = NBCONN + INCJCO
  673. SEGADJ,MLIELE
  674. ENDIF
  675.  
  676. C Enregistrer la connectivité de l'élément
  677. ICONTO(NBCONN)=NFIX
  678. IELNBN(IDLU)=IELNBN(IDLU)+1
  679. C IF (DEBCB) THEN
  680. C WRITE(IOIMP,*) 'IVALU:',IVALU
  681. C WRITE(IOIMP,*) 'REB2 Connectivite :',NFIX
  682. C ENDIF
  683. ENDIF
  684.  
  685. ELSEIF (IRETO1.EQ.4) THEN
  686. C Cas particulier des RBE3
  687. IF ((IVALU.EQ.3).OR.(IVALU.EQ.4).OR.(IVALU.EQ.5)) THEN
  688. C Pour l'instant ces données ne sont pas utilisées (C'est déjà de la mise en donnée Elément Finis)
  689. C Je ne m'occupe pour l'instant que des supports géométriques des éléments
  690. C IF (DEBCB) THEN
  691. C WRITE(IOIMP,*) 'Degres bloques RBE2',COLO8
  692. C ENDIF
  693. ELSE
  694. NBCONN = NBCONN + 1
  695. IF (IVALU.EQ.2) THEN
  696. C Enregistrer ou débute la lecture de la connectivité
  697. IELCON(IDLU)=NBCONN
  698. ENDIF
  699. C Ajustement du segment MLIELE
  700. IF (NBCONN.GT.JELCON) THEN
  701. INCJCO = INT(REAL(INCJCO) * XNCJG)
  702. JELCON = NBCONN + INCJCO
  703. SEGADJ,MLIELE
  704. ENDIF
  705.  
  706. C Enregistrer la connectivité de l'élément
  707. ICONTO(NBCONN)=NFIX
  708. IELNBN(IDLU)=IELNBN(IDLU)+1
  709. C IF (DEBCB) THEN
  710. C WRITE(IOIMP,*) 'IVALU:',IVALU
  711. C WRITE(IOIMP,*) 'REB3 Connectivite :',NFIX
  712. C ENDIF
  713. ENDIF
  714. ELSE
  715. C Cas de tous les autres éléments
  716. IF (IVALU.EQ.2) THEN
  717. C Lecture de la Property à laquelle appartient l'élément
  718. IELPRO(IDLU)=NFIX
  719.  
  720. ELSE
  721. NBCONN = NBCONN + 1
  722. IF (IVALU.EQ.3) THEN
  723. C Enregistrer ou débute la lecture de la connectivité
  724. IELCON(IDLU)=NBCONN
  725. ENDIF
  726.  
  727. C Ajustement du segment MLIELE
  728. IF (NBCONN.GT.JELCON) THEN
  729. INCJCO = INT(REAL(INCJCO) * XNCJG)
  730. JELCON = NBCONN + INCJCO
  731. SEGADJ,MLIELE
  732. ENDIF
  733.  
  734. C Enregistrer la connectivité de l'élément
  735. ICONTO(NBCONN)=NFIX
  736. IELNBN(IDLU)=IELNBN(IDLU)+1
  737. C IF (DEBCB) THEN
  738. C WRITE(IOIMP,*) 'IVALU:',IVALU
  739. C WRITE(IOIMP,*) 'Entier Lu :',NFIX
  740. C WRITE(IOIMP,*) 'IELNBN(IDLU):',IELNBN(IDLU),
  741. C & 'IDLU:',IDLU
  742. C ENDIF
  743.  
  744. C Détection d'éléments d'ordre 2 par le nombre de noeuds dans la connectivité
  745. C Pour [IRETO1 >= 9] Exception car les éléments ont des noms identiques pour HM...
  746. IF ((IRETO1.GE.9).AND.
  747. & (IELNBN(IDLU).EQ.GECONN(IRETO1+1))) THEN
  748. IELTYP(IDLU) = IRETO1+1
  749. C IF (DEBCB) THEN
  750. C WRITE(IOIMP,*) 'IDLU:',IDLU,
  751. C & 'Ordre 2 IELTYP(IDLU):',IELTYP(IDLU)
  752. C ENDIF
  753. NOBJ(1+IRETO1) = NOBJ(1+IRETO1)-1
  754. NOBJ(1+IRETO1+1) = NOBJ(1+IRETO1+1)+1
  755. ENDIF
  756. ENDIF
  757. ENDIF
  758. ENDIF
  759.  
  760. C***********************************************************************
  761. C Répartition des éléments dans les Components adéquats
  762. C***********************************************************************
  763. ELSEIF (IRETO2.EQ.1) THEN
  764. IF (IVALU.EQ.1) THEN
  765. IDCOMP = NFIX
  766. C Ajustement du segment MCOMP
  767. IF (IDCOMP.GT.JGCOLU) THEN
  768. INCCOM = INT(REAL(INCCOM) * XNCJG)
  769. JGCOLU = IDCOMP + INCCOM
  770. SEGADJ,MCOMP
  771. C IF (DEBCB) THEN
  772. C WRITE(IOIMP,*) 'Ajustement du segment MCOMP 1'
  773. C WRITE(IOIMP,*) 'JGCOLU',JGCOLU
  774. C ENDIF
  775. ENDIF
  776. C IF (DEBCB) THEN
  777. C WRITE(IOIMP,*) 'IDCOMP',IDCOMP
  778. C ENDIF
  779. ELSE
  780. IF (COLO8.EQ.'THRU ') THEN
  781. IDLU0 = IDELEM
  782. C IF (DEBCB) THEN
  783. C WRITE(IOIMP,*) 'MOTLU:',COLO8,':'
  784. C WRITE(IOIMP,*) 'IDLU0: ',IDLU0
  785. C ENDIF
  786. ELSE
  787. IF (IRE.EQ.1) THEN
  788. IF (IDLU0.NE.0) THEN
  789. IDLU1 = NFIX
  790. C IF (DEBCB) THEN
  791. C WRITE(IOIMP,*) 'IDLU1: ',IDLU1
  792. C ENDIF
  793.  
  794. C BOUCLE entre (IDLU0+1) et IDLU1 (IDLU0 a déjà été traité au premier passage )
  795. C Enregistrement de l'ID du component auquel appartient l'element
  796. C du type de l'élément lu
  797. C du nombre de type d'éléments dans le component et quels types sont présents
  798. C du nombre d'élément de chaque type dans le component
  799. DO IDELEM=(IDLU0+1),IDLU1
  800. IELCOM(IDELEM) = IDCOMP
  801. IDTYPE = IELTYP(IDELEM)
  802. IF (NBELCO(IDCOMP,IDTYPE).EQ.0) THEN
  803. NBTYPE(IDCOMP,IDTYPE) = 1
  804. NBTYPE(IDCOMP,NBGEOM+1) =
  805. & NBTYPE(IDCOMP,NBGEOM+1) + 1
  806. ENDIF
  807. NBELCO(IDCOMP,IDTYPE) = NBELCO(IDCOMP,IDTYPE)+1
  808.  
  809. C IF (DEBCB) THEN
  810. C WRITE(IOIMP,*) 'IDELEM THRU',IDELEM,
  811. C & 'IDCOMP',IDCOMP,
  812. C & 'IDTYPE',IDTYPE,
  813. C & 'NBNO ',GECONN(IDTYPE)
  814. C ENDIF
  815. ENDDO
  816.  
  817. C Remise à zéro de IDLU0
  818. IDLU0 = 0
  819.  
  820. ELSE
  821. C Enregistrement de l'ID du component auquel appartient l'element
  822. C du type de l'élément lu
  823. C du nombre de type d'éléments dans le component et quels types sont présents
  824. C du nombre d'élément de chaque type dans le component
  825. IDELEM = NFIX
  826. IELCOM(IDELEM) = IDCOMP
  827. IDTYPE = IELTYP(IDELEM)
  828. IF (NBELCO(IDCOMP,IDTYPE).EQ.0) THEN
  829. NBTYPE(IDCOMP,IDTYPE) = 1
  830. NBTYPE(IDCOMP,NBGEOM+1) =
  831. & NBTYPE(IDCOMP,NBGEOM+1) + 1
  832. ENDIF
  833. NBELCO(IDCOMP,IDTYPE) = NBELCO(IDCOMP,IDTYPE) + 1
  834.  
  835. C IF (DEBCB) THEN
  836. C WRITE(IOIMP,*) 'IDELEM THRU',IDELEM,
  837. C & 'IDCOMP',IDCOMP,
  838. C & 'IDTYPE',IDTYPE,
  839. C & 'NBNO ',GECONN(IDTYPE)
  840. C ENDIF
  841. ENDIF
  842. ENDIF
  843. ENDIF
  844. ENDIF
  845.  
  846. C***********************************************************************
  847. C Traitement des noms de COMPONENT ET LOADCOL
  848. C***********************************************************************
  849. ELSEIF (IRETO2.EQ.2) THEN
  850. IF (IVALU.EQ.1) THEN
  851. C Lecture du deuxième mot clé
  852. MOTCL8 = COLO8
  853.  
  854. IF (MOTCL8.EQ.'COMP ') THEN
  855. C Incrémentation du nombre de COMPONENT
  856. NBCOMP = NBCOMP + 1
  857. C Ajustement du segment MCOMP
  858. IF (NBCOMP.GT.JGCOLO) THEN
  859. INCCOM = INT(REAL(INCCOM) * XNCJG)
  860. JGCOLO = NBCOMP + INCCOM
  861. SEGADJ,MCOMP
  862. ENDIF
  863.  
  864. ELSEIF (MOTCL8.EQ.'LOADCOL ') THEN
  865. C Incrémentation du nombre de LOADCOL
  866. NBLOCO = NBLOCO + 1
  867. C Ajustement du segment MCOMP
  868. IF (NBLOCO.GT.JGLCLO) THEN
  869. INCLOC = INT(REAL(INCLOC) * XNCJG)
  870. JGLCLO = NBLOCO + INCLOC
  871. SEGADJ,MLOCOL
  872. ENDIF
  873.  
  874. ELSE
  875. WRITE(IOIMP,*) ' Carte non lue : ',MOTCL8
  876. ENDIF
  877.  
  878. C Lecture de d'ID
  879. ELSEIF (IVALU.EQ.2) THEN
  880. IDLU = NFIX
  881.  
  882. IF (MOTCL8.EQ.'COMP ') THEN
  883. C Ajustement du segment MCOMP
  884. IF (IDLU.GT.JGCOLU) THEN
  885. INCCOM = INT(REAL(INCCOM) * XNCJG)
  886. JGCOLU = IDLU + INCCOM
  887. SEGADJ,MCOMP
  888. C IF (DEBCB) THEN
  889. C WRITE(IOIMP,*) 'Ajustement du segment MCOMP 2'
  890. C WRITE(IOIMP,*) 'JGCOLU',JGCOLU
  891. C ENDIF
  892. ENDIF
  893. ICOCOR(NBCOMP)=IDLU
  894. C IF (DEBCB) THEN
  895. C WRITE(IOIMP,*) 'ID lu noms :',IDLU,'LIGNE : ',NBLIGN
  896. C ENDIF
  897.  
  898. ELSEIF (MOTCL8.EQ.'LOADCOL ') THEN
  899. C Ajustement du segment MLOCOL
  900. IF (IDLU.GT.JGLCLU) THEN
  901. INCLOC = INT(REAL(INCLOC) * XNCJG)
  902. JGLCLU = IDLU + INCLOC
  903. SEGADJ,MLOCOL
  904. C IF (DEBCB) THEN
  905. C WRITE(IOIMP,*) 'Ajustement du segment MLOCOL 2'
  906. C WRITE(IOIMP,*) 'JGLCLU',JGLCLU
  907. C ENDIF
  908. ENDIF
  909. ILCCOR(NBLOCO)=IDLU
  910. C IF (DEBCB) THEN
  911. C WRITE(IOIMP,*) 'ID lu noms :',IDLU,'LIGNE : ',NBLIGN
  912. C ENDIF
  913.  
  914. ENDIF
  915.  
  916. C Lecture du MOT représentant le nom du COMPONENT
  917. ELSEIF (IVALU.EQ.3) THEN
  918. COLO80 = LIGNE(IDCOL+1:80)
  919.  
  920. C Retrait de la double côte représentant la fin du nom lu
  921. DO INDICE=2,LEN(COLO80)
  922. IF ((COLO80(INDICE:INDICE)).EQ.'"') THEN
  923. COLO80 = COLO80(1:INDICE-1)
  924. GOTO 320
  925. ENDIF
  926. ENDDO
  927.  
  928. 320 CONTINUE
  929. IF (MOTCL8.EQ.'COMP ') THEN
  930. NAMECO(IDLU) = COLO80
  931. C IF (DEBCB) THEN
  932. C WRITE(IOIMP,*) 'NAMECO(IDLU):',NAMECO(IDLU)
  933. C & ,':','LIGNE : ',NBLIGN
  934. C ENDIF
  935.  
  936. ELSEIF (MOTCL8.EQ.'LOADCOL ') THEN
  937. NOMLOC(IDLU) = COLO80
  938. C IF (DEBCB) THEN
  939. C WRITE(IOIMP,*) 'NOMLOC(IDLU):',NOMLOC(IDLU)
  940. C & ,':','LIGNE : ',NBLIGN
  941. C ENDIF
  942.  
  943. ENDIF
  944. ENDIF
  945.  
  946. C***********************************************************************
  947. C Traitement des couleurs
  948. C***********************************************************************
  949. ELSEIF (IRETO2.EQ.3) THEN
  950. IF (IVALU.EQ.1) THEN
  951. C Lecture du deuxième mot clé
  952. MOTCL8 = COLO8
  953.  
  954. C Lecture de d'ID
  955. ELSEIF (IVALU.EQ.2) THEN
  956. IDLU = NFIX
  957. C IF (DEBCB) THEN
  958. C WRITE(IOIMP,*) 'ID lu couleurs :',IDLU
  959. C ENDIF
  960.  
  961. C Lecture de l'entier représentant la couleur
  962. ELSEIF (IVALU.EQ.3) THEN
  963. IF (MOTCL8.EQ.' COMP ') THEN
  964. C Cas du sous mot clé ' COMP '
  965. ICOULC(IDLU) = NFIX
  966. C IF (DEBCB) THEN
  967. C WRITE(IOIMP,*) 'Couleur lue :',NFIX
  968. C ENDIF
  969. ENDIF
  970. ENDIF
  971.  
  972.  
  973. C***********************************************************************
  974. C Traitement des SETS lus dans le fichier .fem
  975. C***********************************************************************
  976. ELSEIF (IRETO2.EQ.4) THEN
  977. C Lecture de d'ID du SET
  978. IF (IVALU.EQ.1) THEN
  979. C Incrémentation du nombre de sets
  980. NBSETS = NBSETS + 1
  981.  
  982. C Ajustement du segment MSET
  983. IF (NBSETS.GT.JGSELO) THEN
  984. INCSET = INT(REAL(INCSET) * XNCJG)
  985. JGSELO = NBSETS + INCSET
  986. SEGADJ,MSET
  987. C IF (DEBCB) THEN
  988. C WRITE(IOIMP,*) 'Ajustement du segment MSET 1',JGSELU
  989. C ENDIF
  990. ENDIF
  991.  
  992. IDLU = NFIX
  993.  
  994. ISECOR(NBSETS)=IDLU
  995. C IF (DEBCB) THEN
  996. C WRITE(IOIMP,*)'ID du set Lu : ',IDLU
  997. C ENDIF
  998.  
  999. C Ajustement du segment MSET
  1000. IF (IDLU.GT.JGSELU) THEN
  1001. INCSET = INT(REAL(INCSET) * XNCJG)
  1002. JGSELU = IDLU + INCSET
  1003. SEGADJ,MSET
  1004. C IF (DEBCB) THEN
  1005. C WRITE(IOIMP,*) 'Ajustement du segment MSET 1',JGSELU
  1006. C ENDIF
  1007. ENDIF
  1008. ELSEIF (IVALU.EQ.2) THEN
  1009. C Type de set lu On s'en sert pour créer des maillages SIMPLES ou COMPLEXES
  1010. C 1 ==> Noeuds
  1011. C 2 ==> Elements
  1012. C IF (DEBCB) THEN
  1013. C WRITE(IOIMP,*)'Type de SET Lu : ',NFIX
  1014. C ENDIF
  1015. ITYSET(IDLU)=NFIX
  1016.  
  1017. C Lecture du MOT représentant le nom du SET
  1018. ELSEIF (IVALU.EQ.3) THEN
  1019. COLO80 = LIGNE(IDCOL+2:80)
  1020.  
  1021. C Retrait de la double côte représentant la fin du nom lu
  1022. DO 330 INDICE=2,LEN(COLO80)
  1023. IF ((COLO80(INDICE:INDICE)).EQ.'"') THEN
  1024. COLO80 = COLO80(1:INDICE-1)
  1025. ENDIF
  1026. 330 CONTINUE
  1027.  
  1028. NOMSET(IDLU)=COLO80
  1029. C IF (DEBCB) THEN
  1030. C WRITE(IOIMP,*) 'Nom du SET = ',NOMSET(IDLU)
  1031. C ENDIF
  1032.  
  1033.  
  1034. C*******************************************
  1035. C LECTURE du format d'écriture des SETS
  1036. C*******************************************
  1037. NENTIT = 0
  1038.  
  1039. C Lecture de la première ligne après la détection d'un SET
  1040. READ(IUFEM,1000,ERR=989,END=100) COLO80
  1041. NBLIGN = NBLIGN + 1
  1042.  
  1043. DO INDICE=1,LEN(COLO80)
  1044. IF ((COLO80(INDICE:INDICE)).EQ.'=') THEN
  1045. C Format à vigule rencontré pour cette ligne
  1046. COLO80=COLO80(INDICE+2:(LEN(COLO80)))
  1047. IDINI=1
  1048. IDFIN=1
  1049. C IF (DEBCB) THEN
  1050. C WRITE(IOIMP,*)'Format a VIRGULE'
  1051. C WRITE(IOIMP,*)'Ligne a analyser :',COLO80
  1052. C ENDIF
  1053. GOTO 331
  1054. ENDIF
  1055. ENDDO
  1056.  
  1057. C Format Standard attendu lecture de la ligne suivante
  1058. C IF (DEBCB) THEN
  1059. C WRITE(IOIMP,*)'Format STANDARD'
  1060. C ENDIF
  1061. GOTO 334
  1062.  
  1063. C*******************************************
  1064. C LECTURE du format avec le séparateur ','
  1065. C*******************************************
  1066. 331 CONTINUE
  1067. DO INDICE=IDINI,(LEN(COLO80)-1)
  1068. C IF (DEBCB) THEN
  1069. C WRITE(IOIMP,*)'Lettre:',COLO80(INDICE:INDICE),':'
  1070. C ENDIF
  1071. IF ((COLO80(INDICE:INDICE)).EQ.',') THEN
  1072. IDFIN=INDICE-1
  1073. NENTIT = NENTIT + 1
  1074. IF(IDFIN - IDINI + 1 .GT. 10)THEN
  1075. C Format '(I10)' a reviser
  1076. CALL ERREUR(1094)
  1077. RETURN
  1078. ENDIF
  1079.  
  1080. TEXT=COLO80(IDINI:IDFIN)
  1081. NRAN=0
  1082. ICOUR=IDFIN
  1083. CALL REDLEC(sredle)
  1084. IENTLU = NFIX
  1085.  
  1086. C READ (COLO80(IDINI:IDFIN),FMT='(I10)') IENTLU
  1087. C IF (DEBCB) THEN
  1088. C WRITE(IOIMP,*)'NOMBRE =',IENTLU
  1089. C ENDIF
  1090.  
  1091. C Ajustement du segment MSET
  1092. IF (IENTLU.GT.JGELLU) THEN
  1093. INCJGE = INT(REAL(INCJGE) * XNCJG)
  1094. JGELLU = IENTLU + INCJGE
  1095. SEGADJ,MSET
  1096. ENDIF
  1097. IF (NENTIT.GT.JGNBEL) THEN
  1098. INCJGE = INT(REAL(INCJGE) * XNCJG)
  1099. JGNBEL = NENTIT + INCJGE
  1100. SEGADJ,MSET
  1101. ENDIF
  1102.  
  1103. C Sauvegarde de l'entité lue
  1104. ILISTE(NENTIT,IDLU)=IENTLU
  1105.  
  1106. IDINI=INDICE+1
  1107. IF ((COLO80(INDICE+1:INDICE+1)).EQ.' ') THEN
  1108. C Lecture de la ligne suivante
  1109. GOTO 332
  1110. ENDIF
  1111.  
  1112. ELSEIF ((COLO80(INDICE:INDICE)).EQ.' ') THEN
  1113. NENTIT = NENTIT + 1
  1114. IDFIN=INDICE-1
  1115. IF(IDFIN - IDINI + 1 .GT. 10)THEN
  1116. C Format '(I10)' a reviser
  1117. CALL ERREUR(1094)
  1118. RETURN
  1119. ENDIF
  1120.  
  1121. TEXT=COLO80(IDINI:IDFIN)
  1122. NRAN=0
  1123. ICOUR=IDFIN
  1124. CALL REDLEC(sredle)
  1125. IENTLU = NFIX
  1126.  
  1127. C READ (COLO80(IDINI:IDFIN),FMT='(I10)') IENTLU
  1128. C IF (DEBCB) THEN
  1129. C WRITE(IOIMP,*)'NOMBRE =',IENTLU
  1130. C ENDIF
  1131.  
  1132. C Ajustement du segment MSET
  1133. IF (IENTLU.GT.JGELLU) THEN
  1134. INCJGE = INT(REAL(INCJGE) * XNCJG)
  1135. JGELLU = IENTLU + INCJGE
  1136. SEGADJ,MSET
  1137. ENDIF
  1138. IF (NENTIT.GT.JGNBEL) THEN
  1139. INCJGE = INT(REAL(INCJGE) * XNCJG)
  1140. JGNBEL = NENTIT + INCJGE
  1141. SEGADJ,MSET
  1142. ENDIF
  1143.  
  1144. C Sauvegarde de l'entité lue et du nombre d'entité lues
  1145. NBENTI(NBSETS)=NENTIT
  1146. ILISTE(NENTIT,IDLU)=IENTLU
  1147. C Fin de lecture du SET, retour en 10
  1148. GOTO 10
  1149. ENDIF
  1150. ENDDO
  1151.  
  1152. 332 CONTINUE
  1153. C Lecture des lignes incrémentale
  1154. READ(IUFEM,1000,ERR=989,END=100) COLO80
  1155. NBLIGN = NBLIGN + 1
  1156.  
  1157. DO INDICE=6,LEN(COLO80)
  1158. IF ((COLO80(INDICE:INDICE)).NE.' ') THEN
  1159. COLO80=COLO80(INDICE:(LEN(COLO80)))
  1160. IDINI=1
  1161. IDFIN=1
  1162. C IF (DEBCB) THEN
  1163. C WRITE(IOIMP,*)'Ligne a analyser :',COLO80
  1164. C ENDIF
  1165. GOTO 331
  1166. ENDIF
  1167. ENDDO
  1168.  
  1169. C**********************************************************************************
  1170. C LECTURE des lignes formatées avec les balises THRU et les EXCEPT et les ENDTHRU
  1171. C**********************************************************************************
  1172. 333 CONTINUE
  1173. C IF (DEBCB) THEN
  1174. C WRITE(IOIMP,*)'MOT LU :',COLO80(IDINI:IDINI+7),':'
  1175. C ENDIF
  1176. IF ((COLO80(IDINI:IDINI+7)).EQ.' ') THEN
  1177. C Lecture de la ligne suivante
  1178. GOTO 334
  1179.  
  1180. ELSEIF ((COLO80(IDINI:IDINI+7)).EQ.' THRU ') THEN
  1181. IDINI=IDINI+8
  1182. C IF (DEBCB) THEN
  1183. C WRITE(IOIMP,*)'MOT LU :',COLO80(IDINI:IDINI+7),':'
  1184. C ENDIF
  1185.  
  1186. TEXT=COLO80(IDINI:IDINI+7)
  1187. NRAN=0
  1188. ICOUR=IDINI+7
  1189. CALL REDLEC(sredle)
  1190. IENTFI = NFIX
  1191.  
  1192. C READ (COLO80(IDINI:IDINI+7),FMT='(I8)') IENTFI
  1193. IDINI=IDINI+8
  1194. C IF (DEBCB) THEN
  1195. C WRITE(IOIMP,*)'INITIAL =',IENTLU,'FINAL =',IENTFI
  1196. C ENDIF
  1197.  
  1198. C Ajustement du segment MSET
  1199. IF (IENTFI.GT.JGELLU) THEN
  1200. INCJGE = INT(REAL(INCJGE) * XNCJG)
  1201. JGELLU = IENTFI + INCJGE
  1202. SEGADJ,MSET
  1203. ENDIF
  1204.  
  1205. DO JNDICE=(IENTLU+1),IENTFI
  1206. C Sauvegarde de l'entité lue
  1207. NENTIT = NENTIT + 1
  1208.  
  1209. C Ajustement du segment MSET
  1210. IF (NENTIT.GT.JGNBEL) THEN
  1211. INCJGE = INT(REAL(INCJGE) * XNCJG)
  1212. JGNBEL = NENTIT + INCJGE
  1213. SEGADJ,MSET
  1214. ENDIF
  1215.  
  1216. ILISTE(NENTIT,ISECOR(NBSETS))=JNDICE
  1217. ENDDO
  1218.  
  1219. C Lecture de l'entité suivante
  1220. GOTO 333
  1221.  
  1222. ELSE
  1223. NENTIT = NENTIT + 1
  1224.  
  1225. TEXT=COLO80(IDINI:IDINI+7)
  1226. NRAN=0
  1227. ICOUR=IDINI+7
  1228. CALL REDLEC(sredle)
  1229. IENTLU = NFIX
  1230.  
  1231. C READ (COLO80(IDINI:IDINI+7),FMT='(I8)') IENTLU
  1232. IDINI=IDINI+8
  1233. C IF (DEBCB) THEN
  1234. C WRITE(IOIMP,*)'NOMBRE =',IENTLU
  1235. C ENDIF
  1236.  
  1237. C Ajustement du segment MSET
  1238. IF (IENTLU.GT.JGELLU) THEN
  1239. INCJGE = INT(REAL(INCJGE) * XNCJG)
  1240. JGELLU = IENTLU + INCJGE
  1241. SEGADJ,MSET
  1242. ENDIF
  1243. IF (NENTIT.GT.JGNBEL) THEN
  1244. INCJGE = INT(REAL(INCJGE) * XNCJG)
  1245. JGNBEL = NENTIT + INCJGE
  1246. SEGADJ,MSET
  1247. ENDIF
  1248.  
  1249. C Sauvegarde de l'entité lue et du nombre d'entité lues
  1250. NBENTI(NBSETS)=NENTIT
  1251. ILISTE(NENTIT,ISECOR(NBSETS))=IENTLU
  1252.  
  1253. C Lecture de l'entité suivante
  1254. GOTO 333
  1255.  
  1256. ENDIF
  1257.  
  1258. 334 CONTINUE
  1259. C Lecture des lignes incrémentale
  1260. READ(IUFEM,1000,ERR=989,END=100) COLO80
  1261. NBLIGN = NBLIGN + 1
  1262.  
  1263. DO INDICE=1,LEN(COLO80)
  1264. IF ((COLO80(1:1)).NE.'+') THEN
  1265. C Fin de lecture du SET, retour en 10
  1266. NBENTI(NBSETS)=NENTIT
  1267. C IF (DEBCB) THEN
  1268. C WRITE(IOIMP,*)'Fin Set, NENTIT = :',NENTIT,':'
  1269. C ENDIF
  1270. GOTO 10
  1271. ELSE
  1272. COLO80=COLO80(9:(LEN(COLO80)))
  1273. IDINI=1
  1274. C IF (DEBCB) THEN
  1275. C WRITE(IOIMP,*)'Ligne a analyser :',COLO80,':'
  1276. C ENDIF
  1277. GOTO 333
  1278. ENDIF
  1279. ENDDO
  1280.  
  1281. ENDIF
  1282.  
  1283.  
  1284. C***********************************************************************
  1285. C Traitement des LOAD COLLECTORS lus dans le fichier .fem
  1286. C***********************************************************************
  1287. ELSEIF (IRETO2.EQ.5) THEN
  1288. C Cas des SPC
  1289. IF (BSPC .EQV. .FALSE.) THEN
  1290. BSPC = .TRUE.
  1291. WRITE(IOIMP,*)' Carte non lue : ',NGTYPE(IRETO2)
  1292. ENDIF
  1293.  
  1294. IF (IVALU.EQ.1) THEN
  1295. C Récupération de l'ID du LOADCOL
  1296. IDLU = NFIX
  1297. NBENLC(IDLU)=NBENLC(IDLU)+1
  1298. ITYLOC(IDLU)=1
  1299.  
  1300. NBRENT = NBENLC(IDLU)
  1301. NUMLOC = IDLU
  1302.  
  1303. ELSEIF (IVALU.EQ.2) THEN
  1304. C Lecture de l'ID de l'entité LU
  1305. IDLU = NFIX
  1306. C IF (DEBCB) THEN
  1307. C WRITE(IOIMP,*) 'LOADCOL n:',NUMLOC,'NBR',NBRENT,
  1308. C & 'Entite',IDLU
  1309. C ENDIF
  1310.  
  1311. C Ajustement du segment MLOCOL
  1312. IF (IDLU.GT.JGNBEN) THEN
  1313. JGNBEN = IDLU + MAX(INCJGN,INCJGE)
  1314. SEGADJ,MLOCOL
  1315. C IF (DEBCB) THEN
  1316. C WRITE(IOIMP,*) 'Ajustement du segment MLOCOL 3'
  1317. C WRITE(IOIMP,*) 'JGNBEN',JGNBEN
  1318. C ENDIF
  1319. ENDIF
  1320.  
  1321. C Sauvgarde de l'entité lue
  1322. ILOCNO(NBRENT,NUMLOC)=IDLU
  1323.  
  1324. ELSEIF (IVALU.EQ.3) THEN
  1325. C Lecture des degrés de liberté bloqués
  1326.  
  1327. ENDIF
  1328.  
  1329. ELSEIF (IRETO2.EQ.6) THEN
  1330. C Cas des TEMPERATURES
  1331. IF (BTEMP .EQV. .FALSE.) THEN
  1332. BTEMP = .TRUE.
  1333. WRITE(IOIMP,*)' Carte non lue : ',NGTYPE(IRETO2)
  1334. ENDIF
  1335.  
  1336. C Lecture de d'ID du LOAD COLLECTOR
  1337.  
  1338. ELSEIF (IRETO2.EQ.7) THEN
  1339. C Cas des FORCES
  1340. IF (BFORC .EQV. .FALSE.) THEN
  1341. BFORC = .TRUE.
  1342. WRITE(IOIMP,*)' Carte non lue : ',NGTYPE(IRETO2)
  1343. ENDIF
  1344.  
  1345. C Lecture de d'ID du LOAD COLLECTOR
  1346.  
  1347. ELSEIF (IRETO2.EQ.8) THEN
  1348. C Cas des MOMENTS
  1349. IF (BMOM .EQV. .FALSE.) THEN
  1350. BMOM = .TRUE.
  1351. WRITE(IOIMP,*)' Carte non lue : ',NGTYPE(IRETO2)
  1352. ENDIF
  1353.  
  1354. C Lecture de d'ID du LOAD COLLECTOR
  1355.  
  1356. ELSEIF (IRETO2.EQ.9) THEN
  1357. C Cas des PRESSIONS (Normales ou directionnelles)
  1358. IF (BPRES .EQV. .FALSE.) THEN
  1359. BPRES = .TRUE.
  1360. WRITE(IOIMP,*)' Carte non lue : ',NGTYPE(IRETO2)
  1361. ENDIF
  1362.  
  1363. C Lecture de d'ID du LOAD COLLECTOR
  1364.  
  1365. ENDIF
  1366. ENDIF
  1367. 11 CONTINUE
  1368.  
  1369. C IF (DEBCB) THEN
  1370. C WRITE(IOIMP,*) 'IVALU :',IVALU
  1371. C ENDIF
  1372.  
  1373. GOTO 10
  1374.  
  1375. 100 CONTINUE
  1376.  
  1377. C Ajustement des segments à la fin
  1378. IF (NBNPTS .LT. JGNOLO) THEN
  1379. JGNOLO=NBNPTS
  1380. NBPTS=NBANC+JGNOLO
  1381. SEGADJ,MLINOE
  1382. SEGADJ,MCOORD
  1383. ENDIF
  1384.  
  1385. IF (NELTOT .LT. JGELLO) THEN
  1386. JGELLO = NELTOT
  1387. JELCON = NBCONN
  1388. SEGADJ,MLIELE
  1389. ENDIF
  1390.  
  1391. IF (NBCOMP .LT. JGCOLO) THEN
  1392. JGCOLO = NBCOMP
  1393. SEGADJ,MCOMP
  1394. ENDIF
  1395.  
  1396. IF (NBSETS .LT. JGSELO) THEN
  1397. JGSELO = NBSETS
  1398. SEGADJ,MSET
  1399. ENDIF
  1400.  
  1401. IF (NBLOCO .LT. JGLCLO) THEN
  1402. JGLCLO = NBLOCO
  1403. SEGADJ,MLOCOL
  1404. ENDIF
  1405.  
  1406.  
  1407. CC Affichage des nombre d'objets lus selon leur Type :
  1408. C DO 111 INDICE = 1, LONOBJ
  1409. C IF(INDICE.EQ.1) THEN
  1410. C WRITE(IOIMP,*) 'Objets Geom :',
  1411. C & NOBJ(INDICE)
  1412. C ELSEIF (INDICE.LT.LONOBJ) THEN
  1413. C WRITE(IOIMP,*) 'Nombre de ',GETYPE(INDICE-1),' :',
  1414. C & NOBJ(INDICE)
  1415. C ELSE
  1416. C WRITE(IOIMP,*) 'Elements total :',
  1417. C & NOBJ(INDICE)
  1418. C ENDIF
  1419. C 111 CONTINUE
  1420. C ENDIF
  1421.  
  1422.  
  1423.  
  1424. C***********************************************************************
  1425. C Création du tableau des pointeurs qui vont accueillir les MELEME
  1426. C De chaque COMPONENT pour chaque TYPE d'élément lu
  1427. C***********************************************************************
  1428. C IF (DEBCB) THEN
  1429. C WRITE(IOIMP,*) 'NBCOMP',NBCOMP
  1430. C ENDIF
  1431. DO 210 INDICE = 1, NBCOMP
  1432. IDCOMP = ICOCOR(INDICE)
  1433. NBSOUS = NBTYPE(IDCOMP,NBGEOM+1)
  1434. C IF (DEBCB) THEN
  1435. C WRITE(IOIMP,*)
  1436. C WRITE(IOIMP,*) 'IDCOMP :',IDCOMP
  1437. C WRITE(IOIMP,*) 'NBSOUS',NBSOUS
  1438. C ENDIF
  1439. IF (NBSOUS.GT.0) THEN
  1440. C Construction des pointeurs des MELEME : OBJETS GEOMETRIQUES SIMPLE
  1441. DO 211 IDTYPE = 1,NBGEOM
  1442. IF (NBELCO(IDCOMP,IDTYPE).GT.0) THEN
  1443. IPT2 = 0
  1444. NBSOUS = 0
  1445. NBREF = 0
  1446. NBNN = GECONN(IDTYPE)
  1447. NBELEM = NBELCO(IDCOMP,IDTYPE)
  1448. SEGINI,IPT2
  1449. IPT2.ITYPEL = IELEQU(IDTYPE)
  1450.  
  1451. C Enregistrement dans un tableau du numéro de pointeur vers le MELEME non renseigné
  1452. NPOINT(IDCOMP,IDTYPE) = IPT2
  1453. SEGDES,IPT2
  1454.  
  1455. C IF (DEBCB) THEN
  1456. C WRITE(IOIMP,*) 'IDTYPE :',IDTYPE
  1457. C WRITE(IOIMP,*) 'NBNN :',GECONN(IDTYPE)
  1458. C WRITE(IOIMP,*) 'NB_ELEM :',NBELCO(IDCOMP,IDTYPE)
  1459. C WRITE(IOIMP,*) 'Pointeur:',IPT2
  1460. C ENDIF
  1461. ENDIF
  1462. 211 CONTINUE
  1463. ENDIF
  1464. 210 CONTINUE
  1465.  
  1466.  
  1467. C***********************************************************************
  1468. C Relecture de tous les éléments du maillage
  1469. C pour les placer dans le bon MELEME SIMPLE
  1470. C***********************************************************************
  1471. C Cas des éléments lus appartenant aux COMPONENT
  1472. DO 220 INDICE = 1,NELTOT
  1473. IDELEM = ICOREL(INDICE)
  1474. NBNN = IELNBN(IDELEM)
  1475. IDCONN = IELCON(IDELEM)
  1476. IDCOMP = IELCOM(IDELEM)
  1477. IDTYPE = IELTYP(IDELEM)
  1478.  
  1479. C On incrémente le nombre d'élément placés dans le MELEME
  1480. NBELC2(IDCOMP,IDTYPE) = NBELC2(IDCOMP,IDTYPE) + 1
  1481. IELEME = NBELC2(IDCOMP,IDTYPE)
  1482. IDMAIL = NPOINT(IDCOMP,IDTYPE)
  1483.  
  1484. C IF (DEBCB) THEN
  1485. C WRITE(IOIMP,*)
  1486. C WRITE(IOIMP,*) 'INDICE :',INDICE
  1487. C WRITE(IOIMP,*) 'IDELEM :',IDELEM
  1488. C WRITE(IOIMP,*) 'IDCOMP:',IDCOMP
  1489. C WRITE(IOIMP,*) 'IDTYPE:',IDTYPE
  1490. C WRITE(IOIMP,*) 'NBNN :',NBNN
  1491. C WRITE(IOIMP,*) 'IELEME:',IELEME
  1492. C WRITE(IOIMP,*) 'IDMAIL:',IDMAIL
  1493. C ENDIF
  1494.  
  1495. C Rechargement du pointeur du bon MELEME à remplir
  1496. IPT2 = IDMAIL
  1497. SEGACT,IPT2*MOD
  1498. C IPT2.ICOLOR(IELEME) = ICOULC(IDCOMP)
  1499. IPT2.ICOLOR(IELEME) = 0
  1500.  
  1501. DO 221 JNDICE = 1,NBNN
  1502. C Reconstitution de la connectivité dans l'ordre Cast3M
  1503. ITEST = IORDCO(20* (IDTYPE-1) + JNDICE)
  1504. IDCOLU = ICONTO(IDCONN+(ITEST-1))
  1505. IDCOCA = ICORNO(IDCOLU)+NBANC
  1506. IPT2.NUM(JNDICE,IELEME) = IDCOCA
  1507.  
  1508. C IF (DEBCB) THEN
  1509. C WRITE(IOIMP,*) 'ITEST',ITEST
  1510. C WRITE(IOIMP,*) 'ConLU :',IDCOLU,'ConC3M:',IDCOCA
  1511. C ENDIF
  1512. 221 CONTINUE
  1513. SEGDES,IPT2
  1514. 220 CONTINUE
  1515.  
  1516. C***********************************************************************
  1517. C Traitement des SETS
  1518. C***********************************************************************
  1519. DO INDICE=1,NBSETS
  1520. IDSET =ISECOR(INDICE)
  1521. COLO80=NOMSET(IDSET)
  1522. C IF (DEBCB) THEN
  1523. C WRITE(IOIMP,*) ' '
  1524. C WRITE(IOIMP,*) 'Nom du Set :',COLO80,':'
  1525. C WRITE(IOIMP,*) '(ID Set,Type Set ,Nbr Entite)',
  1526. C & IDSET ,ITYSET(IDSET),NBENTI(INDICE)
  1527. C ENDIF
  1528.  
  1529.  
  1530. C Cas des SETS de NOEUDS
  1531. IF (ITYSET(IDSET) .EQ. 1) THEN
  1532. C WRITE(IOIMP,*) 'Traitement d''un SET de NOEUDS'
  1533. C WRITE(IOIMP,*)'Indice_SET : ',INDICE
  1534. C WRITE(IOIMP,*) 'Nombre de noeuds : ',NBENTI(INDICE)
  1535.  
  1536. C IF (DEBCB) THEN
  1537. C WRITE(IOIMP,*) ' '
  1538. C WRITE(IOIMP,*) 'Nom du Set :',COLO80,':'
  1539. C WRITE(IOIMP,*) '(ID Set,Type Set ,Nbr Entite)',
  1540. C & IDSET ,ITYSET(IDSET),NBENTI(INDICE)
  1541. C WRITE(IOIMP,*) 'GECONN(1) = ',GECONN(1)
  1542. C ENDIF
  1543. IPT2 = 0
  1544. NBSOUS = 0
  1545. NBREF = 0
  1546. NBNN = GECONN(1)
  1547. NBELEM = NBENTI(INDICE)
  1548. SEGINI,IPT2
  1549. IPT2.ITYPEL = IELEQU(1)
  1550.  
  1551. DO JNDICE=1,NBENTI(INDICE)
  1552. C IF (DEBCB) THEN
  1553. C WRITE(IOIMP,*) 'LISTE DES NOEUDS',ILISTE(JNDICE,INDICE)
  1554. C ENDIF
  1555. IPT2.NUM(1,JNDICE)=ILISTE(JNDICE,IDSET)+NBANC
  1556.  
  1557. ENDDO
  1558.  
  1559. C Ecriture dans la table de Sortie du MELEME SIMPLE
  1560. CALL ECCTAB(MTABLE,'MOT ',0,0.d0,COLO80 ,.FALSE.,0,
  1561. & 'MAILLAGE',0,0.d0,'RIEN',.FALSE.,IPT2)
  1562. IF (IERR.NE.0) THEN
  1563. CALL ERREUR(IERR)
  1564. RETURN
  1565. ENDIF
  1566. SEGDES,IPT2
  1567.  
  1568. C Cas des SETS d'elements
  1569. ELSEIF (ITYSET(IDSET) .EQ. 2) THEN
  1570. C IF (DEBCB) THEN
  1571. C WRITE(IOIMP,*) 'Traitement d''un SET d''ELEMENT'
  1572. C WRITE(IOIMP,*)'Indice_SET : ',INDICE
  1573. C WRITE(IOIMP,*) '(ID Set,Type Set ,Nbr Entite)',
  1574. C & IDSET ,ITYSET(IDSET),NBENTI(INDICE)
  1575. C ENDIF
  1576. IPT1=0
  1577. IPT2=0
  1578. NBELEM = NBENTI(INDICE)
  1579.  
  1580. DO JNDICE=1,NBELEM
  1581. C Boucle sur tous les éléments du SET
  1582. IDELEM = ILISTE(JNDICE,IDSET)
  1583. NBNN = IELNBN(IDELEM)
  1584. IDCONN = IELCON(IDELEM)
  1585. IDTYPE = IELTYP(IDELEM)
  1586.  
  1587. C IF (DEBCB) THEN
  1588. C WRITE(IOIMP,*) 'LISTE DES ELEMENTS',IDELEM
  1589. C WRITE(IOIMP,*) 'Type d''element :',IDTYPE
  1590. C WRITE(IOIMP,*) 'Nombre Noeuds :',NBNN
  1591. C WRITE(IOIMP,*) 'IDCONN :',IDCONN
  1592. C ENDIF
  1593.  
  1594. C Incrément du nombre d'élément de ce TYPE pour ce SET
  1595. NBELSE(IDSET,IDTYPE) = NBELSE(IDSET,IDTYPE) + 1
  1596.  
  1597. IF (NBTYPS(IDSET,IDTYPE) .EQ. 0) THEN
  1598. C Cas d'un nouveau type d'élément rencontré
  1599.  
  1600. IF (IPT1 .NE. 0) THEN
  1601. SEGDES,IPT1
  1602. IPT1 = 0
  1603. ENDIF
  1604.  
  1605. NBSOUS = 0
  1606. NBREF = 0
  1607. SEGINI,IPT1
  1608. IPT1.ITYPEL=IELEQU(IDTYPE)
  1609.  
  1610. C WRITE(IOIMP,*) 'Nouveau MELEME SIMPLE :',IDTYPE,
  1611. C & GELEQU(IDTYPE), IPT1
  1612.  
  1613. C Sauvegarde du pointeur
  1614. NPOINS(IDSET,IDTYPE) = IPT1
  1615.  
  1616. C Incrément du nombre de types d'éléments dans le SET
  1617. NBTYPS(IDSET,IDTYPE) = 1
  1618. NBTYPS(IDSET,NBGEOM+1) = NBTYPS(IDSET,NBGEOM+1) + 1
  1619.  
  1620. IF(NBTYPS(IDSET,NBGEOM+1) .EQ. 1) THEN
  1621. C Cas du premier MELEME SIMPLE rencontré
  1622. NPOINS(IDSET,NBGEOM+1) = IPT1
  1623. C WRITE(IOIMP,*) 'Premier MELEME SIMPLE :',IDTYPE,
  1624. C & GELEQU(IDTYPE), IPT1
  1625.  
  1626. ELSEIF (NBTYPS(IDSET,NBGEOM+1) .EQ. 2) THEN
  1627. C Création d'un MELEME COMPLEXE
  1628. NBNN = 0
  1629. NBELEM = 0
  1630. NBSOUS = 2
  1631. SEGINI,IPT2
  1632. IPT2.LISOUS(1)=NPOINS(IDSET,NBGEOM+1)
  1633. IPT2.LISOUS(2)=IPT1
  1634. C WRITE(IOIMP,*) 'MELEME COMPLEXE Création :',IPT2, IPT1
  1635.  
  1636. C Sauvegarde du MELEME COMPLEXE
  1637. NPOINS(IDSET,NBGEOM+1)=IPT2
  1638.  
  1639. ELSEIF(NBTYPS(IDSET,NBGEOM+1) .GT. 2) THEN
  1640. C Ajout au MELEME COMPLEXE du nouveau MELEME SIMPLE
  1641. NBNN = 0
  1642. NBELEM = 0
  1643. NBSOUS = NBTYPS(IDSET,NBGEOM+1)
  1644. SEGADJ,IPT2
  1645. IPT2.LISOUS(NBSOUS)=IPT1
  1646.  
  1647. C WRITE(IOIMP,*) 'MELEME COMPLEXE ajout :',IPT2, IPT1
  1648. ENDIF
  1649.  
  1650. ELSE
  1651. C Cas d'un type d'élément déjà créé
  1652. IF (NPOINS(IDSET,IDTYPE) .NE. IPT1) THEN
  1653. C Cas ou le MELEME SIMPLE IPT1 actif n'est pas le bon
  1654. SEGDES,IPT1
  1655. IPT1 = NPOINS(IDSET,IDTYPE)
  1656. WRITE(IOIMP,*)' IPT1 Charge :',IPT1
  1657. SEGACT,IPT1*MOD
  1658. ENDIF
  1659. ENDIF
  1660.  
  1661. C WRITE(IOIMP,*)'NBNN :', IELNBN(IDELEM)
  1662. C WRITE(IOIMP,*)'IPT1 INFO:',IPT1.NUM(/1),IPT1.NUM(/2)
  1663. C WRITE(IOIMP,*)'Element LU :',IDELEM,'TYPE :',IDTYPE
  1664.  
  1665. DO KNDICE=1,IELNBN(IDELEM)
  1666. C Boucle sur la connectivité des éléments
  1667. ITEST = IORDCO(20* (IDTYPE-1) + KNDICE)
  1668. IDCOLU = ICONTO(IDCONN+(ITEST-1))
  1669. IDCOCA = ICORNO(IDCOLU)+NBANC
  1670. IPT1.NUM(KNDICE,NBELSE(IDSET,IDTYPE)) = IDCOCA
  1671. C WRITE(IOIMP,*)' Connecti LU / Cast3M:',IDCOLU,IDCOCA,
  1672. C & 'ITEST :',ITEST
  1673. ENDDO
  1674.  
  1675. C WRITE(IOIMP,*)'IPT1 :',IPT1.NUM(/1)
  1676. C WRITE(IOIMP,*)'IPT1 :',IPT1.NUM(/2)
  1677. C DO jjj=1,IPT1.NUM(/1)
  1678. C DO kkk=1,IPT1.NUM(/2)
  1679. C
  1680. C WRITE(IOIMP,*)'Connectivite :',IPT1.NUM(jjj,kkk)
  1681. C ENDDO
  1682. C ENDDO
  1683. C SEGDES,IPT1
  1684.  
  1685. ENDDO
  1686. C Fin de la boucle sur les ELEMENTS d'un SET
  1687.  
  1688. C WRITE(IOIMP,*)' '
  1689.  
  1690. C Désactivation des SEGMENTS des MELEME encore ACTIFS
  1691. IF (IPT1 .NE. 0) THEN
  1692. SEGDES,IPT1
  1693. IPT1 = 0
  1694. ENDIF
  1695. IF (IPT2 .NE. 0) THEN
  1696. SEGDES,IPT2
  1697. IPT2 = 0
  1698. ENDIF
  1699.  
  1700. DO JNDICE=1,NBGEOM
  1701. C Ajustement de la taille des MELEME SIMPLES
  1702. IF ( NBELSE(IDSET,JNDICE) .NE. 0 ) THEN
  1703. IPT1 = NPOINS(IDSET,JNDICE)
  1704. SEGACT,IPT1
  1705.  
  1706. NBSOUS = 0
  1707. NBREF = 0
  1708. NBELEM = NBELSE(IDSET,JNDICE)
  1709. NBNN = IPT1.NUM(/1)
  1710. SEGADJ,IPT1
  1711. SEGDES,IPT1
  1712. C WRITE(IOIMP,*)'AJUSTEMENT IPT1 :',IPT1.NUM(/2),NBNN
  1713. ENDIF
  1714. ENDDO
  1715.  
  1716. IPT2=NPOINS(IDSET,NBGEOM+1)
  1717. C WRITE(IOIMP,*)'IPT2 TABLE :',IPT2
  1718.  
  1719. C SEGACT,IPT2
  1720. C WRITE(IOIMP,*)'Valeurs IPT2 :'
  1721. C WRITE(IOIMP,*)' NBSOUS :',IPT2.LISOUS(/1)
  1722. C DO iii=1,IPT2.LISOUS(/1)
  1723. C WRITE(IOIMP,*)' IPT1 :',IPT2.LISOUS(iii)
  1724. C IPT1=IPT2.LISOUS(iii)
  1725. C SEGACT,IPT1
  1726. C DO jjj=1,IPT1.NUM(/1)
  1727. C DO kkk=1,IPT1.NUM(/2)
  1728. C
  1729. C WRITE(IOIMP,*)'Connectivite :',IPT1.NUM(jjj,kkk)
  1730. C ENDDO
  1731. C ENDDO
  1732. C SEGDES,IPT1
  1733. C ENDDO
  1734. C SEGDES,IPT2
  1735.  
  1736. C Ecriture dans la table de Sortie du MELEME SIMPLE ou COMPLEXE
  1737. CALL ECCTAB(MTABLE,'MOT ',0,0.d0,COLO80 ,.FALSE.,0,
  1738. & 'MAILLAGE',0,0.d0,'RIEN',.FALSE.,IPT2)
  1739. IF (IERR.NE.0) THEN
  1740. CALL ERREUR(IERR)
  1741. RETURN
  1742. ENDIF
  1743.  
  1744.  
  1745. ENDIF
  1746. ENDDO
  1747. C Fin de la boucle sur les SETS
  1748.  
  1749.  
  1750.  
  1751.  
  1752. C***********************************************************************
  1753. C Création des maillages COMPLEXES composés des MELEME SIMPLES
  1754. C***********************************************************************
  1755. DO 230 IDCOMP = 1,NBCOMP
  1756. IDCOLU = ICOCOR(IDCOMP)
  1757. COLO80 = NAMECO(IDCOLU)
  1758. NBSOUS = NBTYPE(IDCOLU,NBGEOM+1)
  1759. C IF (DEBCB) THEN
  1760. C WRITE(IOIMP,*)
  1761. C WRITE(IOIMP,*) 'IDCOLU',IDCOLU,'NBSOUS',NBSOUS
  1762. C ENDIF
  1763.  
  1764. ICOMPT = 0
  1765. DO 231 IDTYPE = 1,NBGEOM
  1766. C Parcours du tableau des MELEME SIMPLES
  1767.  
  1768. IF (NBSOUS.EQ.0) THEN
  1769. C Création d'un MELEME SIMPLE vide
  1770. IPT1 = 0
  1771. NBNN = 1
  1772. NBELEM = 0
  1773. NBSOUS = 0
  1774. NBREF = 0
  1775. SEGINI,IPT1
  1776. ELSEIF (NBSOUS.EQ.1) THEN
  1777. IF (NBTYPE(IDCOLU,IDTYPE).EQ.1) THEN
  1778. C Création d'un MELEME SIMPLE à partir du premier pointeur de MELEME SIMPLE rencontré (le seul en théorie car NBSOUS=1)
  1779. IPT1=NPOINT(IDCOLU,IDTYPE)
  1780. SEGACT,IPT1
  1781. ENDIF
  1782. ELSE
  1783. IF (NBTYPE(IDCOLU,IDTYPE).EQ.1) THEN
  1784. IF (NPOINT(IDCOLU,NBGEOM+1).EQ.0) THEN
  1785. C Création Initiale du MELEME COMPLEXE
  1786. IPT1 = 0
  1787. NBREF = 0
  1788. NBNN = 0
  1789. NBELEM = 0
  1790. SEGINI,IPT1
  1791. NPOINT(IDCOLU,NBGEOM+1) = IPT1
  1792. ELSE
  1793. C Chargement du MELEME COMPLEXE et complétion avec les MELEME SIMPLES rencontrés
  1794. IPT1 = NPOINT(IDCOLU,NBGEOM+1)
  1795. SEGACT,IPT1*MOD
  1796. ENDIF
  1797.  
  1798. ICOMPT = ICOMPT + 1
  1799. IPT1.LISOUS(ICOMPT)=NPOINT(IDCOLU,IDTYPE)
  1800. C IF (DEBCB) THEN
  1801. C WRITE(IOIMP,*) 'ICOMPT',ICOMPT,'IDTYPE',IDTYPE
  1802. C WRITE(IOIMP,*) 'Pointeur:',NPOINT(IDCOLU,IDTYPE)
  1803. C WRITE(IOIMP,*) 'IPT1',IPT1
  1804. C ENDIF
  1805. ENDIF
  1806. ENDIF
  1807. 231 CONTINUE
  1808.  
  1809. C Ecriture dans la table de Sortie du MELEME COMPLEXE
  1810. CALL ECCTAB(MTABLE,'MOT ',0,0.d0,COLO80 ,.FALSE.,0,
  1811. & 'MAILLAGE',0,0.d0,'RIEN',.FALSE.,IPT1)
  1812. SEGDES,IPT1
  1813. 230 CONTINUE
  1814.  
  1815.  
  1816. C A la fin on passe au Label 991 pour le ménage final
  1817. GOTO 991
  1818.  
  1819.  
  1820. 989 CONTINUE
  1821. C IF (DEBCB) THEN
  1822. C WRITE(IOIMP,*) 'Erreur READ Wrong FORMAT (Lbl 989) : '
  1823. C ENDIF
  1824. CLOSE(UNIT=IUFEM,ERR=990)
  1825. GOTO 991
  1826.  
  1827.  
  1828. 990 CONTINUE
  1829. C IF (DEBCB) THEN
  1830. C WRITE(IOIMP,*) 'Erreur OPEN/CLOSE (Lbl 990) : '
  1831. C ENDIF
  1832. GOTO 991
  1833.  
  1834.  
  1835. 991 CONTINUE
  1836.  
  1837. C Traitement des erreurs
  1838. IF (IERR.NE.0) THEN
  1839. CALL ERREUR(IERR)
  1840. RETURN
  1841. ENDIF
  1842.  
  1843. C***********************************************************************
  1844. C Un peu de ménage dans la mémoire
  1845. C***********************************************************************
  1846. SEGSUP,SREDLE
  1847. SEGSUP,MLINOE
  1848. SEGSUP,MLIELE
  1849. SEGSUP,MELEQU
  1850. SEGSUP,MCOMP
  1851. SEGSUP,MSET
  1852. SEGSUP,MLOCOL
  1853. SEGDES,MTABLE
  1854.  
  1855. END
  1856.  
  1857.  

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