Télécharger prchan.eso

Retour à la liste

Numérotation des lignes :

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

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