Télécharger inomid.eso

Retour à la liste

Numérotation des lignes :

  1. C INOMID SOURCE MB234859 18/02/28 21:15:08 9749
  2. SUBROUTINE INOMID(iqmod,ityp,iret,luvari,lumato,lumatf,lupaex)
  3. *
  4. * iqmod est un pointeur sur un segment imodel de l'objet modele, il est
  5. * supposé actif
  6. *
  7. * A) ITYP= ' '
  8. * creation des segments de noms de composantes des MCHAML
  9. * CREES PAR LE MODELE ELEMENTAIRE
  10. * en entree luvari ,lumate et lupaex sont des listmots pour les :
  11. * variables internes , materiaux ,parametre externes s'ils ont été définis
  12. * attention : une modele de mecanique ne peut creer de composantes thermiques
  13. * ou phases metallurgiques !
  14. * fortement inspire de comou2
  15. *
  16. * B) ITYP different de ' ' on renvoie dans iret le nomid associé.
  17. *
  18. IMPLICIT INTEGER(I-N)
  19. IMPLICIT REAL*8(A-H,O-Z)
  20.  
  21. -INC CCOPTIO
  22.  
  23. -INC SMMODEL
  24. pointeur nomid1.nomid
  25. -INC SMLMOTS
  26.  
  27. parameter(ninc=13)
  28. logical dcmate
  29. character*8 nomtyp(14),ityp
  30. CHARACTER*4 lesinc(ninc),lesdua(ninc)
  31.  
  32. EXTERNAL LONG
  33.  
  34. DATA lesinc/'UX','UY','UZ','RX','RY','RZ','UR','UT','RT',
  35. & 'LX','P','ALFA','BETA'/
  36. DATA lesdua/'FX','FY','FZ','MX','MY','MZ','FR','FT','MT',
  37. & 'FLX','FP','FALF','FBET'/
  38. data nomtyp/ 'DEPLACEM', 'FORCES ', 'GRADIENT', 'CONTRAIN',
  39. & 'DEFORMAT', 'MATERIAU', 'CARACTER', 'TEMPERAT',
  40. & 'PRINCIPA', 'VARINTER', 'GRAFLEXI', 'VINMETAL',
  41. & 'DEFINELA', 'PARAMEXT' /
  42.  
  43. dcmate = .false.
  44. nimcom = 0
  45. *
  46. * on suppose le sous-modele (imodel) est actif
  47. imodel = iqmod
  48. segact imodel*mod
  49. do im = 1,matmod(/2)
  50. if (matmod(im).eq.'IMPEDANCE') then
  51. dcmate = .true.
  52. if (luvari.gt.0) then
  53. mlmot5 = luvari
  54. luvari = 0
  55. mlmot6 = lumato
  56. lumato = 0
  57. segact mlmot5,mlmot6
  58. nimcom = mlmot5.mots(/2)
  59. nbrobl = nimcom
  60. nbrfac = nimcom
  61. segini nomid,nomid1
  62. do inim = 1,nimcom
  63. CALL PLACE(lesinc,ninc,IMOT,mlmot5.mots(inim))
  64. if (imot.eq.0) call erreur(26)
  65. lesobl(inim) = mlmot5.mots(inim)
  66. nomid1.lesobl(inim) = lesdua(imot)
  67. CALL PLACE(lesinc,ninc,IMOT,mlmot6.mots(inim))
  68. if (imot.eq.0) call erreur(26)
  69. lesfac(inim) = mlmot6.mots(inim)
  70. nomid1.lesfac(inim) = lesdua(imot)
  71. enddo
  72. segdes nomid,nomid1
  73. endif
  74. endif
  75. enddo
  76.  
  77. if (ityp.eq.' ') then
  78. ideb=1
  79. ifin=14
  80. else
  81. do ideb=1,14
  82. if(ityp.eq.nomtyp(ideb))go to 100
  83. enddo
  84. * write(ioimp,*) ' INOMID demande incompatible'
  85. stop
  86. 100 iret = lnomid (IDEB)
  87. nomid=iret
  88. segact nomid
  89. return
  90. endif
  91.  
  92. NFOR=formod(/2)
  93. CALL PLACE(formod,NFOR,ITHHY,'THERMOHYDRIQUE' )
  94. CALL PLACE(formod,NFOR,ITHER,'THERMIQUE' )
  95. CALL PLACE(formod,NFOR,IMAGN,'MAGNETODYNAMIQUE')
  96. CALL PLACE(formod,NFOR,IELEC,'ELECTROSTATIQUE' )
  97. CALL PLACE(formod,NFOR,IDIFF,'DIFFUSION' )
  98. CALL PLACE(formod,NFOR,ILIAI,'LIAISON' )
  99. CALL PLACE(formod,NFOR,ICONT,'CONTACT' )
  100. CALL PLACE(formod,NFOR,ICHGM,'CHARGEMENT' )
  101. *
  102. MELE=nefmod
  103.  
  104. C Formulation GENERALE
  105. MFR3=nummfr(mele)
  106.  
  107. C Determination de la Formulation Specifique MFR2
  108. MFR2=MFR3
  109. do jn=1,matmod(/2)
  110. if (matmod(jn).eq.'MODAL'.or.matmod(jn).eq.'STATIQUE'.or.
  111. & matmod(jn).eq.'IMPEDANCE') MFR2= infele(13)
  112. enddo
  113.  
  114. IF (ITHHY.EQ.1) MFR2=65
  115. IF (IELEC.EQ.1) MFR2=71
  116.  
  117. IF (IDIFF.EQ.1) THEN
  118. IF (MFR3.EQ.1) THEN
  119. C Cas MASSIF
  120. MFR2=73
  121. ELSEIF (MFR3.EQ.3 .OR. MFR3.EQ.5 .OR. MFR3.EQ.9 .OR.
  122. & MFR3.EQ.27) THEN
  123. C Cas COQUES ET BARRES
  124. MFR2=MFR3
  125. ELSE
  126. CALL ERREUR(21)
  127. RETURN
  128. ENDIF
  129. ENDIF
  130. *
  131. * Modele CHARGEMENT PRESSION, dans certains cas, il est necessaire
  132. * de definir les noms des composantes CARACTERISTIQUES, d'ou les
  133. * distinctions ci-apres
  134. IF (ICHGM.NE.0) THEN
  135. IF (IFOUR.EQ.-2) THEN
  136. MFR2 = MFR3
  137. ELSE
  138. IF (MFR3.EQ.1) THEN
  139. MFR2 = 72
  140. ELSEIF (MFR3.EQ.3 .OR. MFR3.EQ.7 .OR.
  141. & MFR3.EQ.9 .OR. MFR3.EQ.13) THEN
  142. MFR2 = 74
  143. ELSEIF (MFR3.EQ.5) THEN
  144. MFR2 = MFR3
  145. ELSE
  146. CALL ERREUR(21)
  147. RETURN
  148. ENDIF
  149. ENDIF
  150. ENDIF
  151. *
  152. npint3=0
  153. if(infmod(/1).ne.0) npint3=infmod(1)
  154. * write(6,*) ' inomid formod', (formod(iou),iou=1,nfor)
  155. * write(6,*) ' mele MFR2 ',mele,mfr2
  156.  
  157. DO 200 ino = ideb,ifin
  158. mocomp=0
  159. *
  160. * AIGUILLAGE SUIVANT MOT CLE
  161. GOTO ( 1, 2,3,4,5,6,7,8,9, 10,11,12,13,14) ino
  162.  
  163. C Composantes PRIMALES (DEPLACEMENT en MECANIQUE, etc...)
  164. 1 if (dcmate.and.nimcom.gt.0) then
  165. nobl = nimcom*2
  166. nfac = 0
  167. mocomp=nomid
  168. else
  169. if(icont.eq.0) then
  170. CALL IDPRIM(IMODEL,MFR2,MOCOMP,NOBL,NFAC)
  171. NOMID=MOCOMP
  172. endif
  173. endif
  174. * write(6,*) ' modepl MFR2 ' , mocomp,MFR2
  175. GOTO 120
  176.  
  177.  
  178. C Composantes DUALES (FORCES en MECANIQUE, etc...)
  179. 2 if (dcmate.and.nimcom.gt.0) then
  180. nobl = nimcom*2
  181. nfac = 0
  182. mocomp=nomid1
  183. elseif(icont.eq.0) then
  184. CALL IDDUAL(IMODEL,MFR2,MOCOMP,NOBL,NFAC)
  185. endif
  186. * write(6,*) ' moforc MFR2 ' , mocomp,MFR2
  187. GOTO 120
  188.  
  189. C Composantes GRADIENTS des grandeurs PRIMALES
  190. 3 if(ither.ne.0) then
  191. IF (MFR2.EQ.1) THEN
  192. MDM=29
  193. ELSE IF (MFR2.EQ.3.OR.MFR2.EQ.5.OR.MFR2.EQ.9) THEN
  194. MDM=39
  195. ENDIF
  196.  
  197. ELSEIF(IMAGN.NE.0)then
  198. MDM=69
  199.  
  200. ELSEIF(IDIFF.NE.0)then
  201. MDM=73
  202.  
  203. ELSE
  204. MDM=MFR2
  205. ENDIF
  206.  
  207. IF( icont.eq.0.AND.ICHGM.EQ.0)
  208. + CALL IDGRAD(MDM,IFOUR,MOCOMP,NOBL,NFAC)
  209. IF (IDIFF.NE.0) THEN
  210. NOMID=MOCOMP
  211. SEGACT,NOMID
  212. nomid = mocomp
  213. segact,nomid*MOD
  214. j = LONG(TYMODE(1))
  215. DO i = 1,lesobl(/2)
  216. lesobl(i)(j+1:j+2) = lesobl(i)(1:2)
  217. lesobl(i)(1:j) = TYMODE(1)(1:j)
  218. ENDDO
  219. ENDIF
  220. * write(6,*) ' mograd mfr ' , mocomp,mdm
  221. GOTO 120
  222. *
  223.  
  224. C Composantes CONTRAINTES
  225. 4 if(icont.eq.0)
  226. + CALL IDCONT(IMODEL,IFOUR,MOCOMP,NOBL,NFAC)
  227. * write(6,*) ' mocont ' , mocomp
  228. if (dcmate.and.nimcom.gt.0) then
  229. nbrobl = nimcom
  230. nbrfac = nfac
  231. nomid = mocomp
  232. segadj nomid
  233. endif
  234. GOTO 120
  235. *
  236.  
  237. C Composantes DEFORMATION
  238. 5 if(icont.eq.0.AND.ICHGM.EQ.0)
  239. + CALL IDDEFO(IMODEL,IFOUR,MOCOMP,NOBL,NFAC)
  240. * write(6,*) ' modefo ',mocomp
  241. if (dcmate.and.nimcom.gt.0) then
  242. nbrobl = nimcom
  243. nbrfac = nfac
  244. nomid = mocomp
  245. segadj nomid
  246. endif
  247. GOTO 120
  248. *
  249.  
  250. C Composantes MATERIAU
  251. 6 IF(lumato.EQ.0) THEN
  252. CALL IDMATR(MFR2,IMODEL,MOCOMP,NOBL,NFAC)
  253. NOMID=MOCOMP
  254.  
  255. ELSE
  256. mlmots=lumato
  257. segact MLMOTS
  258. nbrobl=mots(/2)
  259. nbrfac=0
  260. IF (lumatf.NE.0) THEN
  261. mlmot1=lumatf
  262. segact mlmot1
  263. nbrfac=mlmot1.mots(/2)
  264. ENDIF
  265. SEGINI,nomid
  266. DO io=1,nbrobl
  267. lesobl(io)=mots(io)
  268. enddo
  269. segdes,mlmots
  270. if(lumatf.ne.0) then
  271. do io=1,nbrfac
  272. lesfac(io)=mlmot1.mots(io)
  273. enddo
  274. segdes,mlmot1
  275. endif
  276. mocomp=nomid
  277. ENDIF
  278. * write(6,*) ' momatr ',mocomp
  279. GOTO 120
  280. *
  281.  
  282. C Composantes CARACTERISTIQUES GEOMETRIQUES
  283. 7 CONTINUE
  284. * attention pas de caracteristiques pour materiaux modal,statique,impedance
  285. * et pour formulation liaison on bidonne en appelant avec mele = 14 (cub8)
  286. melee=mele
  287. do jn=1,matmod(/2)
  288. if (matmod(jn).eq.'MODAL'.or.matmod(jn).eq.'STATIQUE'.or.
  289. & (inatuu.ge.161.and.inatuu.le.164)) Melee=14
  290. enddo
  291. if(iliai .ne.0) melee=14
  292. if(icont.eq.0.AND.(ICHGM.EQ.0.OR.(ICHGM.EQ.1.AND.MFR2.EQ.5)))
  293. & THEN
  294. CALL IDCARA(IMODEL,MFR2,MOCOMP,NOBL,NFAC)
  295. endif
  296. * write(6,*) ' mocara ',mocomp
  297. GOTO 120
  298. *
  299.  
  300. C Composante TEMPERATURE
  301. 8 mocomp=0
  302. if((ither.eq.0.and.icont.eq.0).AND.
  303. $ (ITHER.EQ.0.AND.ICHGM.EQ.0))
  304. $ CALL IDTEMP(MFR2,IFOUR,npint3,MOCOMP,NOBL,NFAC)
  305. * write(6,*) ' motemp ',mocomp
  306. GOTO 120
  307. *
  308.  
  309. C Composantes des contraintes PRINCIPALES
  310. 9 if(icont.eq.0.AND.ICHGM.EQ.0)
  311. + CALL IDPRIN(MFR2,IFOUR,MOCOMP,NOBL,NFAC)
  312. * write(6,*) ' moprin ',mocomp
  313. GOTO 120
  314. *
  315.  
  316. C Composantes des VARIABLES INTERNES
  317. 10 CONTINUE
  318. * if(LUVARI.EQ.0) then
  319. if(icont.eq.0.AND.ICHGM.EQ.0)
  320. + CALL IDVARI(MFR2,IMODEL,MOCOMP,NOBL,NFAC)
  321. * else
  322. if(luvari.ne.0) then
  323. mlmots=luvari
  324. segact MLMOTS
  325. nomid= mocomp
  326. if (nomid.ne.0) then
  327. segact nomid*mod
  328. ndej=lesobl(/2)
  329. if(ndej.eq.1) ndej=0
  330. nbrobl=mots(/2)+ndej
  331. nbrfac=0
  332. ista=ndej+1
  333. segadj nomid
  334. iau=1
  335. do io=ista,nbrobl
  336. lesobl(io)=mots(iau)
  337. iau=iau+1
  338. enddo
  339. else
  340. nbrobl=mots(/2)
  341. nbrfac=0
  342. segini nomid
  343. do io=1,nbrobl
  344. lesobl(io)=mots(io)
  345. enddo
  346. endif
  347. segdes mlmots
  348. mocomp=nomid
  349. endif
  350. * endif
  351. * write(6,*) ' movari ', mocomp
  352. GOTO 120
  353. *
  354. C Composantes des GRADIENTS de FLEXION
  355. 11 if(icont.eq.0.AND.ICHGM.EQ.0)
  356. + CALL IDGRAF(MFR2,IFOUR,MOCOMP,NOBL,NFAC)
  357. * write(6,*) ' movari ', mocomp
  358. GOTO 120
  359. *
  360.  
  361. C Composantes des DES PHASES en loi de MELANGE
  362. 12 if(icont.eq.0.AND.ICHGM.EQ.0)
  363. + CALL IDPHAS(MFR2,IMODEL,MOCOMP,NOBL,NFAC)
  364. * write(6,*) ' mophas ', mocomp
  365. GOTO 120
  366. *
  367.  
  368. C Composantes des DEFORMATIONS INELASTIQUES
  369. 13 if(icont.eq.0.AND.ICHGM.EQ.0)
  370. + CALL IDDEIN(IMODEL,IFOUR,MOCOMP,NOBL,NFAC)
  371. * write(6,*) ' modein ', mocomp
  372. GOTO 120
  373.  
  374. C Composantes des PARAMETRES EXTERNES (LISTMOTS)
  375. 14 MOCOMP=LUPAEX
  376. if (LUPAEX.NE.0) THEN
  377. mlmots=lupaex
  378. segact MLMOTS
  379. nbrobl=mots(/2)
  380. nbrfac=0
  381. segini nomid
  382. do io=1,nbrobl
  383. lesobl(io)=mots(io)
  384. enddo
  385. mocomp=nomid
  386. * write(6,*)' mopaex ',nomid
  387. ENDIF
  388. GOTO 120
  389. *
  390. 120 CONTINUE
  391. nomid = mocomp
  392.  
  393. lnomid(ino)=mocomp
  394. IF (nomid.NE.0) SEGDES,nomid
  395.  
  396. * if (nomid.NE.0) THEN
  397. * segact nomid
  398. * write(6,*) ' type ' , nomtyp(ino)
  399. * write(6,*) ' lesobl(/2) ', lesobl(/2)
  400. * write(6,*) (lesobl(iou),iou=1,lesobl(/2))
  401. * write(6,*) ' lesfac ' , (lesfac(iou),iou=1,lesfac(/2))
  402. * segdes,nomid
  403. * endif
  404.  
  405. C Fin du DO 200 ino=1,14
  406. 200 CONTINUE
  407.  
  408. RETURN
  409. END
  410.  
  411.  
  412.  
  413.  
  414.  

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