Télécharger prchan.eso

Retour à la liste

Numérotation des lignes :

prchan
  1. C PRCHAN SOURCE CB215821 24/04/12 21:16:53 11897
  2.  
  3. SUBROUTINE PRCHAN
  4.  
  5. C--------------------------------------------------------------------
  6. C Ce sous programme permet :
  7. C
  8. C - De changer les elements d'un maillage
  9. C
  10. C - De convertir un MCHAML en CHPOINT (mot cle CHPO)
  11. C
  12. C - De convertir un CHPOINT en MCHAML (mot cle CHAM)
  13. C
  14. C - De changer le support d'un MCHAML
  15. C (mots cles NOEUDS, GRAVITE, RIGIDITE, MASSE et STRESSES)
  16. C
  17. C - De changer l'attribut d'un champ de points
  18. C
  19. C - De changer le nom du constituant d'un champ par element ou d un modele
  20. C
  21. C - De changer une rigidite cree par RELA en rigidite de dependence
  22. C
  23. C - Changer la casse d'un mot
  24. C--------------------------------------------------------------------
  25.  
  26. IMPLICIT INTEGER(I-N)
  27. IMPLICIT REAL*8(A-H,O-Z)
  28.  
  29.  
  30. -INC PPARAM
  31. -INC CCOPTIO
  32. -INC CCNOYAU
  33. -INC CCHAMP
  34. -INC CCGEOME
  35.  
  36. -INC SMELEME
  37. -INC SMLENTI
  38. -INC SMCHPOI
  39. -INC SMCHAML
  40. -INC SMRIGID
  41. -INC SMMODEL
  42. -INC SMLMOTS
  43. -INC SMCOORD
  44.  
  45. PARAMETER (NTYP=27,LATRI=4,NLIG=9,NMOY=3)
  46. CHARACTER*8 LISTYP(NTYP)
  47. CHARACTER*4 LATRIB(LATRI)
  48. CHARACTER*4 LISMAT(3), LISCOM(2),LISMUL(2)
  49. CHARACTER*4 MOTLIG(NLIG), MOMOYE(NMOY)
  50. CHARACTER*72 CHAR,CHAR1
  51. CHARACTER*8 CHAR8
  52. CHARACTER*(LONOM) CNOM1,CNOM2
  53. PARAMETER (LMOTL=512)
  54. CHARACTER*(LMOTL) MENT,MSOR
  55. CHARACTER*4 MOT1,MOT2,MOT3,MOT4
  56.  
  57.  
  58. DATA LISTYP / 'NOEUD ', 'GRAVITE ', 'RIGIDITE', 'MASSE ',
  59. & 'STRESSES', 'THERMIQU', 'FACE ', 'P1CENTRE',
  60. & 'MSOMMET ', 'CHPO ', 'CHAM ', '--------',
  61. & '--------', 'TYPE ', 'ATTRIBUT', 'CONS ',
  62. & 'DEPE ', 'COND ', 'COMP ', 'INCO ',
  63. & 'TABL ', 'MINU ', 'MAJU ', 'TITR ',
  64. & 'LEGE ', 'NOMABS ', 'NOMORD '/
  65.  
  66. DATA LATRIB / 'NATU', 'INDE', 'DIFF', 'DISC' /
  67.  
  68. DATA LISMAT / 'SYME', 'ANTI', 'QUEL' /
  69. DATA LISCOM / 'COMP', 'REEL' /
  70. DATA LISMUL / 'MULT','DUPL' /
  71.  
  72. DATA MOMOYE / 'SOMM', 'MOYE','SUPP'/
  73. DATA MOTLIG / 'LIGN', 'LINE', 'QUAD', 'QUAF', 'MACR', 'CUBI',
  74. & 'DECL', 'LINB', 'SURF' /
  75.  
  76. C On a besoin du MCOORD plus loin
  77. **** SEGACT,MCOORD
  78.  
  79. ILIG=0
  80. CNOM1 = ' '
  81. CNOM2 = ' '
  82.  
  83. C --- Lecture des mots-clés de LISTYP --> IPLAC
  84. CALL LIRMOT(LISTYP,NTYP,IPLAC,0)
  85. IF (IERR.NE.0) RETURN
  86. IF (IPLAC.NE.0) GOTO 1
  87. C
  88. C --- Lecture des mots-clés de MOTLIG --> ILIG
  89. CALL LIRMOT(MOTLIG,NLIG,ILIG,0)
  90. IF (ILIG.EQ.1) THEN
  91. CALL CHANLG
  92. RETURN
  93. ELSEIF(ILIG.EQ.2) THEN
  94. CALL CHANLI
  95. RETURN
  96. ELSEIF(ILIG.EQ.3) THEN
  97. CALL CHANQU
  98. RETURN
  99. ELSEIF(ILIG.EQ.4) THEN
  100. CALL LIROBJ('MAILLAGE',MELEME,1,IRET)
  101. CALL ACTOBJ('MAILLAGE',MELEME,1)
  102. IF(IRET.EQ.0)RETURN
  103. CALL KQCEST(MELEME,IKR)
  104. CALL ACTOBJ('MAILLAGE',MELEME,1)
  105. CALL ECROBJ('MAILLAGE',MELEME)
  106. IF(IKR.EQ.2)THEN
  107. CALL CHANQU
  108. ENDIF
  109. CALL C20227
  110. RETURN
  111. ELSEIF(ILIG.EQ.5) THEN
  112. CALL CMACRO
  113. RETURN
  114. ELSEIF(ILIG.EQ.6) THEN
  115. CALL CCUBIC
  116. RETURN
  117. ELSEIF(ILIG.EQ.7) THEN
  118. CALL CQ2L
  119. RETURN
  120. ELSEIF(ILIG.EQ.8) THEN
  121. CALL CLINB
  122. RETURN
  123. ELSEIF(ILIG.EQ.9) THEN
  124. CALL ENVVO2(1)
  125. RETURN
  126. ENDIF
  127. C
  128. C --- Lecture parmi la liste des NOMS --> ITY
  129. CALL LIRMOT(NOMS,NOMBR,ITY,0)
  130. IF (ITY.EQ.0) ITY=ILCOUR
  131. CALL LIROBJ('MAILLAGE',MELEME,0,IRETOU)
  132. IF (IRETOU.EQ.0) GOTO 99
  133. CALL ACTOBJ('MAILLAGE',MELEME,1)
  134.  
  135. CALL QUENOM(CNOM1)
  136. C CB On ajoute la lecture d'un LISTENTIER optionnel pour indiquer
  137. C quels N-uplet de noeuds du MELEME vont constituer la connectivité
  138. C du MAILLAGE final
  139. CALL LIROBJ('LISTENTI',MLENTI,0,IRETOU)
  140. IF (IRETOU.NE.0) THEN
  141. SEGACT,MLENTI
  142. CALL QUENOM(CNOM2)
  143. ITYP1 = MELEME.ITYPEL
  144. IF (ITYP1 .NE. 1) THEN
  145. CALL ERREUR(16)
  146. RETURN
  147. ENDIF
  148. NBEL1 = MELEME.NUM(/2)
  149. JG = LECT(/1)
  150. C Cas des ELEMENTS POLY et MULT
  151. IF (NOMS(ITY).EQ.'POLY' .OR. NOMS(ITY).EQ.'MULT') THEN
  152. NBNN = JG
  153. NBELEM = 1
  154. C Cas des ELEMENTS classiques
  155. ELSE
  156. NBNN = NBNNE(ITY)
  157. NBELEM = JG/NBNN
  158. IF (MOD(JG,NBNN) .NE. 0) THEN
  159. MOTERR(1:8) =CNOM2
  160. MOTERR(9:12)=NOMS(ITY)
  161. CALL ERREUR(1057)
  162. RETURN
  163. ENDIF
  164. ENDIF
  165.  
  166. NBSOUS=0
  167. NBREF =0
  168. SEGINI,IPT1
  169. IPT1.ITYPEL=ITY
  170. DO 259 IEL=1,NBELEM
  171. J=(IEL-1) * NBNN
  172. IPT1.ICOLOR(IEL)=IDCOUL
  173. DO 2591 I=1,NBNN
  174. IELEM = MLENTI.LECT(J+I)
  175. IF((IELEM .GT. NBEL1) .OR. (IELEM .LE. 0)) THEN
  176. INTERR(1) =IELEM
  177. MOTERR(1:8)=CNOM1
  178. CALL ERREUR(1058)
  179. SEGSUP,IPT1
  180. RETURN
  181. ENDIF
  182. IPT1.NUM(I,IEL)=MELEME.NUM(1,IELEM)
  183. 2591 CONTINUE
  184. 259 CONTINUE
  185. MELEME = IPT1
  186. ELSE
  187. CALL CHANGE(MELEME,ITY)
  188. IF (IERR.NE.0) RETURN
  189. ENDIF
  190. CALL ACTOBJ('MAILLAGE',MELEME,1)
  191. CALL ECROBJ('MAILLAGE',MELEME)
  192. RETURN
  193.  
  194. C PAS D OPERANDE CORRECTE TROUVE --> ERREUR
  195. 99 CONTINUE
  196. CALL QUETYP(MOTERR(1:8),0,IRETOU)
  197. IF (IRETOU.NE.0) THEN
  198. CALL ERREUR (39)
  199. ELSE
  200. CALL ERREUR(533)
  201. ENDIF
  202. RETURN
  203. C
  204. C OPERANDE CORRECTE TROUVE dans LISTYP : on aiguille
  205. C
  206. 1 CONTINUE
  207. GOTO ( 300, 300, 300, 300, 300, 300, 300, 300, 300, 100,
  208. & 800, 400, 600,1200,1300,1400,1500,1500,1600,1700,
  209. & 2100,2200,2200,3000,3000,3000,3000),IPLAC
  210.  
  211. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  212. C CHANGEMENT D'UN MCHAML EN CHPOINT
  213. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  214. 100 CALL LIRMOT(MOMOYE,NMOY,IMOY,0)
  215. IF(IMOY.EQ.0) IMOY=2
  216. IMOY=IMOY-1
  217. c MOYENNE(par defaut) : IMOY=1 SOMME : IMOY=0 GAUSS:IMOY=2
  218.  
  219. C Tente la lecture optionnelle d'un CHPOINT
  220. CALL LIROBJ('CHPOINT ',IPOI2,0,IRETO3)
  221. IF(IERR.NE.0) RETURN
  222. IF(IRETO3.EQ.1) THEN
  223. CALL ACTOBJ('CHPOINT ',IPOI2,1)
  224. C Tente la lecture optionnelle d'un MMODEL
  225. CALL LIROBJ('MMODEL ',IPOI1,0,IRETO1)
  226. IF(IRETO1 .EQ. 1)CALL ACTOBJ('MMODEL ',IPOI1,1)
  227. IF(IERR.NE.0) RETURN
  228. C L'OBJET fourni etait deja un CHPOINT on crée un CHPOINT dupliqué
  229. MCHPOI=IPOI2
  230. SEGINI,MCHPO1=MCHPOI
  231. SEGACT,MCHPO1*NOMOD
  232. CALL ACTOBJ('CHPOINT ',MCHPO1,1)
  233. CALL ECROBJ('CHPOINT ',MCHPO1)
  234. IF(IERR.NE.0) RETURN
  235. RETURN
  236. ENDIF
  237.  
  238. C Tente la lecture obligatoire d'un MMODEL
  239. CALL LIROBJ('MMODEL ',IPOI1,1,IRETO1)
  240. CALL ACTOBJ('MMODEL ',IPOI1,1)
  241. IF(IERR.NE.0) RETURN
  242.  
  243. C Tente la lecture obligatoire d'un MCHAML
  244. CALL LIROBJ('MCHAML ',IPOI2,1,IRETO2)
  245. CALL ACTOBJ('MCHAML ',IPOI2,1)
  246. IF(IERR.NE.0) RETURN
  247. CALL REDUAF(IPOI2,IPOI1,IPOI3,0,IRET,KERR)
  248. IF (IRET .EQ. 0) THEN
  249. CALL ERREUR (KERR)
  250. IF(IERR .NE. 0) RETURN
  251. ELSE
  252. IPOI2 = IPOI3
  253. ENDIF
  254.  
  255. cbp, 2018-03-26 : option SUPPORT pour sortir un chpoint defini aux points
  256. c de Gauss sans changer de support (but : tracer)
  257. IF(IMOY.EQ.2) THEN
  258. * Lecture éventuelle d'un CHAMELEM de caractéristiques
  259. IPCARA=0
  260. CALL LIROBJ('MCHAML ',IPCARA,0,IRET)
  261. IF(IRET.EQ.1) CALL ACTOBJ('MCHAML ',IPCARA,1)
  262. * Appel a la SUBROUTINE de travail
  263. CALL CHAPO(IPOI1,IPOI2,IPCARA,IPOI4,IRET)
  264. CALL ACTOBJ('CHPOINT',IPOI4,1)
  265. IF(IERR.EQ.0) CALL ECROBJ('CHPOINT ',IPOI4)
  266. RETURN
  267. ENDIF
  268.  
  269. CALL CHASUP(IPOI1,IPOI2,IPOI3,IRT2,1)
  270. IF(IRT2.NE.0) THEN
  271. CALL ERREUR(IRT2)
  272. RETURN
  273. ENDIF
  274. CALL CHAMPO(IPOI3,IMOY,IPOI4,IRET)
  275. C A PRIORI LE CHPO EST DE NATURE DIFFUSE
  276. MCHPOI = IPOI4
  277. SEGACT MCHPOI*MOD
  278. JATTRI(1) = 1
  279. CALL ACTOBJ('CHPOINT ',IPOI4,1)
  280. CALL ECROBJ('CHPOINT ',IPOI4)
  281. RETURN
  282.  
  283. 400 CONTINUE
  284. 600 CONTINUE
  285. RETURN
  286.  
  287. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  288. C CHANGEMENT D'UN CHPOINT EN MCHAML A PARTIR D'UN MODELE
  289. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  290. C Lecture éventuelle d'un lieu support
  291. 800 CALL LIRMOT(LISTYP,9,ISUP,0)
  292. IF (IERR.NE.0) RETURN
  293. IPLAC = ISUP
  294. C Par defaut, le support est aux noeuds
  295. IF (IPLAC.EQ.0) IPLAC = 1
  296.  
  297. C Tente la lecture optionnelle d'un MCHAML
  298. CALL LIROBJ('MCHAML ',IPOI2,0,IRETOU)
  299. IF(IRETOU.EQ.1) CALL ACTOBJ('MCHAML ',IPOI2,1)
  300. IF (IERR.NE.0) RETURN
  301. IF (IRETOU.NE.0) THEN
  302. CALL REFUS
  303. GOTO 300
  304. ENDIF
  305.  
  306. CALL LIROBJ('MMODEL ',IPOI1,0,IRETOU)
  307. IF (IERR.NE.0) RETURN
  308. IF (IRETOU.EQ.0) GOTO 900
  309. CALL ACTOBJ('MMODEL ',IPOI1,1)
  310.  
  311. CALL LIROBJ('CHPOINT ',IPOI2,1,IRETOU)
  312. CALL ACTOBJ('CHPOINT ',IPOI2,1)
  313. IF(IERR.NE.0) RETURN
  314.  
  315. LONS=0
  316. MMODEL=IPOI1
  317. N1=KMODEL(/1)
  318. DO 41 L=1,N1
  319. IMODEL=KMODEL(L)
  320. IF (FORMOD(1).EQ.'NAVIER_STOKES') LONS=LONS+1
  321. 41 CONTINUE
  322.  
  323. IF(LONS.EQ.0) THEN
  324. C
  325. C Tente la lecture optionnelle du Sous_Type
  326. CALL LIRCHA(CHAR,0,IRETOU)
  327. IF (IERR.NE.0) RETURN
  328. IF (IRETOU.EQ.0) THEN
  329. CHAR=' '
  330. IRETOU=1
  331. ENDIF
  332.  
  333. CALL CHAME1(0,IPOI1,IPOI2,CHAR(1:IRETOU),IPOI3,IPLAC)
  334. IF (IERR.NE.0) RETURN
  335.  
  336. ELSEIF(LONS.EQ.N1) THEN
  337. C Traitement specifique dans le cas d'un objet modele de
  338. C type Navier-Stokes
  339. CALL KCHAM1(IPOI1,IPOI2,IPOI3)
  340. IF (IERR.NE.0) RETURN
  341. IF (ISUP.NE.0) THEN
  342. CALL CHASPG(IPOI1,IPOI3,IPOI4,IRET,ISUP)
  343. IF (IRET.NE.0) CALL ERREUR(IRET)
  344. IF (IERR.NE.0) RETURN
  345. IPOI3=IPOI4
  346. ENDIF
  347. ENDIF
  348. CALL ACTOBJ('MCHAML ',IPOI3,1)
  349. CALL ECROBJ('MCHAML ',IPOI3)
  350. RETURN
  351.  
  352. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  353. C CHANGEMENT DE CHPOINT EN MCHAML A PARTIR D'UN MAILLAGE
  354. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  355. C Tente la lecture obligatoire d'un MAILLAGE
  356. 900 CALL LIROBJ('MAILLAGE',IPOI1,1,IRETO1)
  357. CALL ACTOBJ('MAILLAGE',IPOI1,1)
  358. IF(IERR.NE.0) RETURN
  359.  
  360. C Tente la lecture obligatoire d'un CHPOINT
  361. CALL LIROBJ('CHPOINT ',IPOI2,1,IRETO2)
  362. CALL ACTOBJ('CHPOINT ',IPOI2,1)
  363. IF(IERR.NE.0) RETURN
  364.  
  365. C Tente la lecture optionnelle du Sous_Type
  366. CALL LIRCHA(CHAR,0,IRETOU)
  367. IF(IERR.NE.0) RETURN
  368. C
  369. IF (IRETOU.EQ.0) THEN
  370. CHAR ='SCALAIRE'
  371. IRETOU=8
  372. ENDIF
  373. C
  374. CALL CHAME1(IPOI1,0,IPOI2,CHAR(1:IRETOU),IPOI3,1)
  375. IF(IERR.NE.0) RETURN
  376. CALL ACTOBJ('MCHAML ',IPOI3,1)
  377. CALL ECROBJ('MCHAML ',IPOI3)
  378. RETURN
  379.  
  380. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  381. C CHANGEMENT DE SUPPORT D'UN MCHAML
  382. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  383. 300 CALL LIROBJ('MCHAML ',IPOI2,1,IRETOU)
  384. CALL ACTOBJ('MCHAML ',IPOI2,1)
  385. IF (IERR.NE.0) RETURN
  386.  
  387. CALL LIROBJ('MMODEL ',IPOI1,1,IRETOU)
  388. CALL ACTOBJ('MMODEL ',IPOI1,1)
  389. IF(IERR.NE.0) RETURN
  390.  
  391. LONS=0
  392. MMODEL=IPOI1
  393. N1=KMODEL(/1)
  394. DO 42 L=1,N1
  395. IMODEL=KMODEL(L)
  396. IF(FORMOD(1).EQ.'NAVIER_STOKES') LONS=LONS+1
  397. 42 CONTINUE
  398.  
  399. MCHELM =IPOI2
  400.  
  401. IF(LONS.EQ.0) THEN
  402. C cas normal
  403. C On procède au REDUAF
  404. CALL REDUAF(IPOI2,IPOI1,IPOI3,0,IRET,KERR)
  405. IF (IRET .EQ. 0) THEN
  406. CALL ERREUR (KERR)
  407. IF (IERR .NE. 0) RETURN
  408. ENDIF
  409. IPOI2 = IPOI3
  410.  
  411. CALL CHASUP(IPOI1,IPOI2,IPOI3,IRT2,IPLAC)
  412. IF(IRT2.NE.0) THEN
  413. CALL ERREUR(IRT2)
  414. RETURN
  415. ENDIF
  416. ELSEIF(LONS.EQ.N1) THEN
  417. C Traitement specifique dans le cas d'un objet modele de
  418. C type Navier-Stokes
  419. CALL CHASPG(IPOI1,IPOI2,IPOI3,IRT2,IPLAC)
  420. IF (IRT2.NE.0) CALL ERREUR(IRT2)
  421. IF (IERR.NE.0) RETURN
  422. ENDIF
  423.  
  424. C Tente la lecture optionnelle du Sous_Type
  425. CALL LIRCHA(CHAR,0,IRETOU)
  426. IF(IERR.NE.0) RETURN
  427. IF (IRETOU .NE.0) THEN
  428. IPOI1=IPOI3
  429. GOTO 1201
  430.  
  431. ELSE
  432. C On remet le TITCHE du champ d'entree
  433. SEGACT MCHELM
  434. L1=TITCHE(/1)
  435.  
  436. MCHEL1 = IPOI3
  437. SEGACT MCHEL1*MOD
  438. N1=MCHEL1.INFCHE(/1)
  439. N3=MCHEL1.INFCHE(/2)
  440. SEGADJ,MCHEL1
  441. MCHEL1.TITCHE=MCHELM.TITCHE
  442. ENDIF
  443. C
  444. CALL ACTOBJ('MCHAML ',IPOI3,1)
  445. CALL ECROBJ('MCHAML ',IPOI3)
  446. RETURN
  447.  
  448. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  449. C CHANGEMENT DE TITRE (mot clé 'TYPE') D'UN MCHAML
  450. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  451. 1200 CALL LIROBJ('MCHAML ',IPOI1,0,IRETOU)
  452. c mot clé 'TYPE' aussi utilisé pour RIGIDITE
  453. IF(IRETOU.EQ.0) GOTO 1250
  454. CALL ACTOBJ('MCHAML ',IPOI1,1)
  455. CALL LIRCHA(CHAR,1,IRETOU)
  456. IF(IERR.NE.0) RETURN
  457.  
  458. 1201 CALL CHATIT(IPOI1,CHAR(1:IRETOU),IPOI2)
  459. CALL ACTOBJ('MCHAML ',IPOI2,1)
  460. CALL ECROBJ('MCHAML ',IPOI2)
  461. RETURN
  462.  
  463. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  464. C CHANGEMENT DU TYPE D'UNE RIGIDITE
  465. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  466. 1250 CALL LIROBJ('RIGIDITE',IRIG,1,IRETOU)
  467. IF (IERR.NE.0) RETURN
  468. RI1 = IRIG
  469. SEGINI,MRIGID=RI1
  470. CALL LIRCHA(CHAR8,1,IRETOU)
  471. IF(IERR.NE.0) RETURN
  472. MTYMAT = CHAR8
  473. SEGDES,MRIGID
  474. CALL ECROBJ('RIGIDITE',MRIGID)
  475. RETURN
  476.  
  477. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  478. C CHANGEMENT DE L'ATTRIBUT D'UN CHAMP DE POINTS
  479. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  480. 1300 CONTINUE
  481. C
  482. CALL LIRMOT(LATRIB,LATRI,IPLAC,1)
  483. IF (IERR.NE.0) RETURN
  484. CALL LIROBJ('CHPOINT ',IPOI1,1,IRETOU)
  485. CALL ACTOBJ('CHPOINT ',IPOI1,1)
  486. IF (IERR.NE.0) RETURN
  487. MCHPOI = IPOI1
  488. C CHANGEMENT DE NATURE
  489. IF ( IPLAC .EQ. 1 ) THEN
  490. CALL LIRMOT(LATRIB,LATRI,IPLAC,1)
  491. IPLAC = IPLAC - 2
  492. SEGINI, MCHPO1=MCHPOI
  493. DO iou=1,mchpo1.ipchp(/1)
  494. msoupo=mchpo1.ipchp(iou)
  495. segini,msoup1=msoupo
  496. mchpo1.ipchp(iou)=msoup1
  497. ENDDO
  498. IPOI2 = MCHPO1
  499. MCHPO1.JATTRI(1) = IPLAC
  500. CALL ACTOBJ('CHPOINT ',IPOI2,1)
  501. CALL ECROBJ('CHPOINT ',IPOI2)
  502. ELSE
  503. MOTERR(1:4)='NATU'
  504. CALL ERREUR(396)
  505. RETURN
  506. ENDIF
  507. RETURN
  508.  
  509. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  510. C CHANGEMENT DE CONSTITUANT D'UN MCHAML ou d'un MMODEL
  511. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  512. 1400 CALL LIROBJ('MCHAML ',IPOI1,0,IRETOU)
  513. IF (IERR.NE.0) RETURN
  514. IF (iretou.eq.1) THEN
  515. CALL ACTOBJ('MCHAML ',IPOI1,1)
  516. MCHELM = IPOI1
  517. SEGINI , MCHEL1 = MCHELM
  518. CALL LIRCHA(CHAR,1,LCHAR)
  519. IF (IERR.NE.0) RETURN
  520. N1 = MCHEL1.CONCHE(/2)
  521. CHAR1 = MCHEL1.CONCHE(1)
  522. DO 1410 I=1,N1
  523. IF ( MCHEL1.CONCHE(I) .NE. CHAR1) THEN
  524. CALL ERREUR(716)
  525. SEGSUP MCHEL1
  526. RETURN
  527. ENDIF
  528. 1410 CONTINUE
  529.  
  530. DO 1420 I=1,N1
  531. MCHEL1.CONCHE(I) = CHAR
  532. 1420 CONTINUE
  533. IPOI1 = MCHEL1
  534. CALL ACTOBJ('MCHAML ',IPOI1,1)
  535. CALL ECROBJ('MCHAML ',IPOI1)
  536. RETURN
  537.  
  538. ELSE
  539. CALL LIROBJ('MMODEL ',IPOI1,1,IRETOU)
  540. CALL ACTOBJ('MMODEL ',IPOI1,1)
  541. IF (ierr.ne.0) RETURN
  542. mmode1 = ipoi1
  543. n1 = mmode1.kmodel(/1)
  544. imode1 = mmode1.kmodel(1)
  545. char1(1:LCONMO) = imode1.conmod
  546. IF (n1.gt.1) THEN
  547. DO ikmo = 2,n1
  548. imode2 = mmode1.kmodel(ikmo)
  549. IF (char1(1:LCONMO).ne.imode2.conmod(1:LCONMO)) THEN
  550. CALL erreur(732)
  551. RETURN
  552. ENDIF
  553. ENDDO
  554. ENDIF
  555. segini,mmodel = mmode1
  556. CALL LIRCHA(CHAR,1,LCHAR)
  557. IF (IERR.NE.0) RETURN
  558. DO ikmo = 1,n1
  559. imode1 = kmodel(ikmo)
  560. segini,imodel = imode1
  561. NFOR=FORMOD(/2)
  562. C CAS DARCY OU NAVIER ON OUBLIE LA TABLE DE PRECONDITIONNEMENT
  563. CALL PLACE (FORMOD,NFOR,IDARC,'DARCY')
  564. CALL PLACE (FORMOD,NFOR,IEULE,'EULER')
  565. CALL PLACE (FORMOD,NFOR,INAVI,'NAVIER_STOKES')
  566. IF((IDARC.NE.0).OR.(INAVI.NE.0).OR.(IEULE.NE.0)) INFMOD(2)=0
  567. kmodel(ikmo) = imodel
  568. conmod = char
  569. ENDDO
  570. ipoi1 = mmodel
  571. CALL ACTOBJ('MMODEL ',IPOI1,1)
  572. CALL ECROBJ('MMODEL ',ipoi1)
  573. RETURN
  574. ENDIF
  575.  
  576. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  577. C CHANGEMENT D UNE RIGIDITE CREE PAR RELATION
  578. C EN MATRICE DE DEPENDANCE OU DE CONDENSATION
  579. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  580. 1500 CALL LIROBJ('RIGIDITE',IRIG,1,iret)
  581. IF (IERR.NE.0) RETURN
  582.  
  583. C verification que la rigidité ne contient que des relation
  584. C c'est à dire n'est supportée que par des maillage de type 22
  585. C
  586. MRIGID = IRIG
  587. SEGACT, MRIGID*NOMOD
  588. DO 1510 I=1,IRIGEL(/2)
  589. MELEME = IRIGEL(1,I)
  590. SEGACT , MELEME*NOMOD
  591. IF (ITYPEL.NE.22) THEN
  592. CALL ERREUR(889)
  593. RETURN
  594. ENDIF
  595. 1510 CONTINUE
  596. C
  597. C matrice de depedence
  598. MRIGID = IRIG
  599. SEGACT MRIGID
  600. segini , ri1=MRIGID
  601. iri1 = ri1
  602. C nrige=8
  603. nrigel=irigel(/2)
  604. segadj ri1
  605. DO 1520 i=1,nrigel
  606. ri1.irigel(8,i)=1
  607. 1520 CONTINUE
  608. segdes mrigid,ri1
  609. C
  610. IF(iplac.eq.17) THEN
  611. CALL ECROBJ('RIGIDITE',iri1)
  612. ELSE
  613. CALL depen3(iri1,iri2)
  614. CALL dual00(iri2,iri3)
  615. CALL ECROBJ('RIGIDITE',iri3)
  616. CALL ECROBJ('RIGIDITE',iri2)
  617. ENDIF
  618. RETURN
  619. c
  620. 1600 CALL nomc
  621. RETURN
  622.  
  623. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  624. C CHANGEMENT DE NOM D'INCONNUES PRIMALE ET DUALE D'UNE MATRICE
  625. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  626. 1700 CONTINUE
  627. CALL LIROBJ('MATRIK ',IPO1,0,IRETOU)
  628. IF (IRETOU.NE.0) THEN
  629. CALL REFUS
  630. CALL MACHIN
  631. RETURN
  632. ENDIF
  633. C lecture du mot cle COMPLEXE ou REEL ou rien
  634. CALL LIRMOT(LISCOM,2,ival,0)
  635. CALL LIROBJ('RIGIDITE',RI1,1,iretou)
  636. IF( ierr.ne.0) RETURN
  637. IF(IIMPI.ge.3) write(IOIMP,*) '>>> CHAN INCO de ',RI1,' <<<'
  638.  
  639. c ---Cas de 4 LISTMOTS ou 4 MOT ---
  640. IF(IVAL.EQ.0 )THEN
  641. CALL LIROBJ('LISTMOTS',mlmot1,0,ilmots)
  642. IF (ilmots.eq.0) then
  643. CALL LIRCHA(MOT1,1,iretou)
  644. IF( ierr.ne.0) RETURN
  645. CALL LIRCHA(MOT2,1,iretou)
  646. IF( ierr.ne.0) RETURN
  647. CALL LIRCHA(MOT3,1,iretou)
  648. IF( ierr.ne.0) RETURN
  649. CALL LIRCHA(MOT4,1,iretou)
  650. IF( ierr.ne.0) RETURN
  651. JGN=4
  652. JGM=1
  653. segini mlmot1,mlmot2,mlmot3,mlmot4
  654. mlmot1.mots(1)=mot1
  655. mlmot2.mots(1)=mot2
  656. mlmot3.mots(1)=mot3
  657. mlmot4.mots(1)=mot4
  658. ELSE
  659. CALL LIROBJ('LISTMOTS',mlmot2,1,iretou)
  660. IF( ierr.ne.0) RETURN
  661. CALL LIROBJ('LISTMOTS',mlmot3,1,iretou)
  662. IF( ierr.ne.0) RETURN
  663. CALL LIROBJ('LISTMOTS',mlmot4,1,iretou)
  664. IF( ierr.ne.0) RETURN
  665. ENDIF
  666. C lecture de la nature SYME ANTI ...
  667. IPLAMA=0
  668. CALL LIRMOT(LISMAT,3,IPLAMA,0)
  669. C Par defaut : 'NON SYMETRIQUE'
  670. IF (IPLAMA.EQ.0) IPLAMA=3
  671.  
  672. C lecture du mot cle MULT ou DUPL (ou rien)
  673. CALL LIRMOT(LISMUL,2,IPLMUL,0)
  674. C
  675. segact mlmot1,mlmot2,mlmot3,mlmot4
  676. il1=mlmot1.mots(/2)
  677. il2=mlmot2.mots(/2)
  678. il3=mlmot3.mots(/2)
  679. il4=mlmot4.mots(/2)
  680. IF(il1.ne.il2.or.il3.ne.il4) THEN
  681. *dbg write(ioimp,*) 'il1,il2,il3,il4=',il1,il2,il3,il4
  682. CALL erreur(854)
  683. RETURN
  684. ENDIF
  685. IF(IIMPI.ge.3) write(IOIMP,*)
  686. $ 'cas de 4 LISTMOTS ou 4 MOTS fournis '
  687.  
  688. c ---Cas COMPLEXE/REEL---
  689. ELSE
  690. JGN=4
  691. JGM=lnomdd
  692. segini mlmot1,mlmot2,mlmot3,mlmot4
  693. DO jkl=1,lnomdd
  694. mlmot1.mots(jkl)=nomdd(jkl)
  695. mlmot2.mots(jkl)(1:1)='I'
  696. mlmot2.mots(jkl)(2:4)=nomdd(jkl)(1:3)
  697. mlmot3.mots(jkl)=nomdu(jkl)
  698. mlmot4.mots(jkl)(1:1)='I'
  699. mlmot4.mots(jkl)(2:4)=nomdu(jkl)(1:3)
  700. ENDDO
  701. IF(IIMPI.ge.3) write(IOIMP,*) 'cas COMPLEXE/REEL'
  702. ENDIF
  703.  
  704. C Creation du MRIGID de sortie = presque copie de l entree
  705. segini,mrigid=ri1
  706. ichole=0
  707. imgeo1=0
  708. imgeo2=0
  709. isupeq=0
  710. jrcond=0
  711. jrdepp=0
  712. jrdepd=0
  713. jrelim=0
  714. jrgard=0
  715. jrtot=0
  716. DO 1701 k=1,irigel(/2)
  717. irigel(7,k) = IPLAMA-1
  718. C creation des XMATRI (avec la symetrie identique a MRIGID.irigel(4,k))
  719. XMATR1=irigel(4,k)
  720. segini,XMATRI=XMATR1
  721. irigel(4,k)=XMATRI
  722. XMATRI.SYMRE=irigel(7,k)
  723. XMATRI.SYMVER=0
  724. c creation et modif du DESCR
  725. des1=irigel(3,k)
  726. segini,descr=des1
  727. irigel(3,k)=descr
  728. nbinc=lisinc(/2)
  729. nbdua=lisdua(/2)
  730. DO 1702 ka=1,nbinc
  731. IF(lisinc(ka).EQ.'LX '.and.iplmul.eq.0) go to 1702
  732. DO 1703 kb=1,il1
  733. IF( lisinc(ka).eq.mlmot1.mots(kb) ) THEN
  734. lisinc(ka)=mlmot2.mots(kb)
  735. go to 1702
  736. ENDIF
  737. 1703 CONTINUE
  738. 1702 CONTINUE
  739. DO 1704 ka=1,nbdua
  740. IF( lisdua(ka).eq.'FLX '.and.iplmul.eq.0) go to 1704
  741. DO 1705 kb=1,il3
  742. IF( lisdua(ka).eq.mlmot3.mots(kb) ) THEN
  743. lisdua(ka)=mlmot4.mots(kb)
  744. go to 1704
  745. ENDIF
  746. 1705 CONTINUE
  747. 1704 CONTINUE
  748.  
  749. C on teste si c'est un LX : si oui, on crée un nouveau noeud
  750. C rem : on suppose qu'il n y a qu'1 LX par matrice et a une
  751. C position quelconque
  752. IF(iplmul.lt.2) goto 1706
  753. DO 1707 ka=1,min(nbinc,nbdua)
  754. IF (lisinc(ka).eq.'LX '.and.lisdua(ka).eq.'FLX ') THEN
  755. IF(IIMPI.ge.3) write(IOIMP,*)
  756. $ 'creation de nouveaux noeuds LX'
  757. c IF(IIMPI.ge.3) THEN
  758. c write(IOIMP,*) 'mlmot1=',(mlmot1.mots(iou),iou=1,il1)
  759. c write(IOIMP,*) 'mlmot2=',(mlmot2.mots(iou),iou=1,il2)
  760. c write(IOIMP,*) 'mlmot3=',(mlmot3.mots(iou),iou=1,il3)
  761. c write(IOIMP,*) 'mlmot4=',(mlmot4.mots(iou),iou=1,il4)
  762. c write(IOIMP,*) 'lisinc=',(lisinc(iou),iou=1,nbinc)
  763. c write(IOIMP,*) 'lisdua=',(lisdua(iou),iou=1,nbdua)
  764. c ENDIF
  765. ipt1=irigel(1,k)
  766. segini,meleme=ipt1
  767. irigel(1,k)=meleme
  768. segact,MCOORD*MOD
  769. inp=NOELEP(ka)
  770. DO 1708 iel=1,num(/2)
  771. NBPTS=NBPTS + 1
  772. num(inp,iel)=NBPTS
  773. 1708 CONTINUE
  774. segadj,MCOORD
  775. segdes,mcoord
  776. ENDIF
  777. 1707 CONTINUE
  778. 1706 CONTINUE
  779. 1701 CONTINUE
  780. IF(ival.eq.0) THEN
  781. if (ilmots.eq.0) then
  782. segsup mlmot1,mlmot2,mlmot3,mlmot4
  783. endif
  784. ELSE
  785. segsup mlmot1,mlmot2,mlmot3,mlmot4
  786. ENDIF
  787. CALL ACTOBJ('RIGIDITE',mrigid,1)
  788. CALL ECROBJ('RIGIDITE',mrigid)
  789. RETURN
  790.  
  791. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  792. C changement de presentation d'un chargement
  793. C mise sous forme table de chpoint (plus rapide pour l'opérateur TIRE)
  794. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  795. 2100 CALL chatab
  796. RETURN
  797.  
  798. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  799. C Changement de la casse d'un mot
  800. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  801. 2200 CONTINUE
  802. ICASS=IPLAC-22
  803. CALL LIRCHA(MENT,1,LENT)
  804. IF (IERR.NE.0) RETURN
  805. CALL CHCASS(MENT(1:LENT),ICASS,MSOR(1:LENT))
  806. CALL ECRCHA(MSOR(1:LENT))
  807. RETURN
  808.  
  809. 3000 CONTINUE
  810. CALL QUETYP(CHAR8,1,IRET)
  811. IF (CHAR8.NE.'CHPOINT'.AND.CHAR8.NE.'EVOLUTIO') THEN
  812. MOTERR(1:16)='CHPOINT EVOLUTIO'
  813. CALL ERREUR(471)
  814. RETURN
  815. ENDIF
  816.  
  817. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  818. C Changement de titre d'un CHPOINT
  819. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  820. IF (CHAR8.EQ.'CHPOINT ') THEN
  821. CALL LIROBJ('CHPOINT ',IP1,1,IRETOU)
  822. CALL ACTOBJ('CHPOINT ',IP1,1)
  823. IF (IERR.NE.0) RETURN
  824. CALL LIRCHA(CHAR1,1,IRETOU)
  825. MCHPO1=IP1
  826. SEGINI,MCHPOI=MCHPO1
  827. MOCHDE=CHAR1
  828. CALL ACTOBJ('CHPOINT ',MCHPOI,1)
  829. CALL ECROBJ('CHPOINT ',MCHPOI)
  830.  
  831. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  832. C Changement des noms d'une evolution
  833. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  834. ELSEIF (CHAR8.EQ.'EVOLUTIO') THEN
  835. CALL LIROBJ('EVOLUTIO',IEV1,1,IRETOU)
  836. IF (IERR.NE.0) RETURN
  837. CALL ACTOBJ('EVOLUTIO',IEV1,1)
  838.  
  839. ITIT=IPLAC-23
  840. CALL LIRCHA(CHAR1,1,IRETOU)
  841. IF (IERR.NE.0) RETURN
  842. K=0
  843. CALL LIRENT(K,0,IRETOU)
  844. CALL CHEVOL(IEV1,ITIT,K,CHAR1,IEV2)
  845.  
  846. CALL ACTOBJ('EVOLUTIO',IEV2,1)
  847. CALL ECROBJ('EVOLUTIO',IEV2)
  848. ENDIF
  849.  
  850. END
  851.  
  852.  
  853.  
  854.  

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