Télécharger rigi1.eso

Retour à la liste

Numérotation des lignes :

rigi1
  1. C RIGI1 SOURCE OF166741 24/05/06 21:15:25 11082
  2.  
  3. SUBROUTINE RIGI1(MODORI,IPCHE1,IPCHE2,IMAT, IPOI6,IRET,NOER)
  4. C---------------------------------------------------------------------*
  5. C *
  6. C OPERATEUR RIGIDITE *
  7. C *
  8. C---------------------------------------------------------------------*
  9. C *
  10. C CE SOUS-PROGRAMME SERT A TRAITER ET A METTRE EN FORME *
  11. C LES INFORMATIONS NECESSAIRES POUR LES CALCULS *
  12. C *
  13. C---------------------------------------------------------------------*
  14. C *
  15. C ENTREES : *
  16. C ________ *
  17. C *
  18. C MODORI Pointeur sur le modele *
  19. C IPCHE1 Pointeur sur le chamelem de carateristiques *
  20. C IPCHE2 Pointeur sur le chamelem de matrice de HOOKE *
  21. C IMAT (2 il y a une matrice de HOOKE,1 non ) *
  22. C *
  23. C SORTIES : *
  24. C ________ *
  25. C *
  26. C IPOI6 pointeur sur la rigidite construite *
  27. C IRET (1 OK , 0 erreur ) *
  28. C *
  29. C---------------------------------------------------------------------*
  30. IMPLICIT INTEGER(I-N)
  31. IMPLICIT REAL*8(A-H,O-Z)
  32. C
  33. -INC PPARAM
  34. -INC CCOPTIO
  35. -INC CCHAMP
  36. -INC CCGEOME
  37. -INC CCREEL
  38. C==DEB= FORMULATION HHO == Include specifique ==========================
  39. -INC CCHHOPA
  40. C==FIN= FORMULATION HHO ================================================
  41. C-
  42. -INC SMCHAML
  43. -INC SMINTE
  44. -INC SMELEME
  45. -INC SMRIGID
  46. -INC SMMODEL
  47. POINTEUR IMOREF.IMODEL
  48. -INC SMCOORD
  49. -INC SMLREEL
  50. -INC SMLENTI
  51. POINTEUR MLPHAS.MLENTI
  52. C
  53. integer oooval
  54.  
  55. SEGMENT INFO
  56. INTEGER INFELL(JG)
  57. ENDSEGMENT
  58.  
  59. POINTEUR NOMID1.NOMID
  60. C
  61. SEGMENT NOTYPE
  62. CHARACTER*16 TYPE(NBTYPE)
  63. ENDSEGMENT
  64. C
  65. SEGMENT MPTVAL
  66. INTEGER IPOS(NS) ,NSOF(NS)
  67. INTEGER IVAL(NCOSOU)
  68. CHARACTER*16 TYVAL(NCOSOU)
  69. ENDSEGMENT
  70. C
  71. segment modsta
  72. integer pimoda(nmoda),pistat(nstat)
  73. integer ivmoda(nmoda),ivstat(nstat)
  74. endsegment
  75. C
  76. CHARACTER*8 CMATE
  77. CHARACTER*(NCONCH) CONM
  78. PARAMETER ( INTTYP=3 )
  79. C INTTYP DEFINIT LE TYPE DE POINTS D'INTEGRATION
  80. C UTILISE PAR RIGI
  81. PARAMETER ( NINF=3 )
  82. INTEGER INFOS(NINF),nrnlin
  83. LOGICAL LDPGE,lsupfo,lsupdp,lsupma,dcmate,dcmat2
  84. C
  85. C Petit tableau des "couleurs" des relations de conformite (goto 31)
  86. DIMENSION LCOLOR(6)
  87. DATA LCOLOR / 1, 3, 6, 10, 16, 24 /
  88. DATA NRNLIN / 4 /
  89. C
  90. IRET = 0
  91. IPOI6 = 0
  92. MMODEL = MODORI
  93. C
  94. C VERIFICATION DU LIEU SUPPORT DU MCHAML DE CARACTERISTIQUES
  95. C ZZZZZZZZ PEUT ETRE A FAIRE PLUTOT SUR LES SOUS-ZONES
  96. C
  97. ISUP=0
  98. IF (IPCHE1.NE.0)THEN
  99. C reduction
  100. call reduaf(ipche1,MMODEL,ipche10,0,iretca,kerr)
  101. if (iretca.ne.1) call erreur(kerr)
  102. if (ierr.ne.0) goto 889
  103. ipche1=ipche10
  104. CALL QUESUP(MMODEL,IPCHE1,INTTYP,0,ISUP,IRETCA)
  105. IF (ISUP.GT.1) GOTO 889
  106. ENDIF
  107. C
  108. C VERIFICATION DU LIEU SUPPORT DU MCHAML DE HOOKE
  109. C
  110. ISUP1 = 0
  111. IPCHOO = 0
  112. IF (IMAT.EQ.2) THEN
  113. IPCHOO = IPCHE1
  114. IF (IPCHE2.NE.0) THEN
  115. IPCHOO = IPCHE2
  116. call reduaf(IPCHOO,MMODEL,IPCHE2,0,iretca,kerr)
  117. if (iretca.ne.1) call erreur(kerr)
  118. if (ierr .ne.0) goto 889
  119. IPCHOO = IPCHE2
  120. CALL QUESUP(MMODEL,IPCHE2,INTTYP,1,ISUP1,IRETHO)
  121. IF (ISUP1.NE.0) GOTO 889
  122. ENDIF
  123. ENDIF
  124. C
  125. C ACTIVATION DU MODELE
  126. C --------------------
  127. C MODORI = Modele initial complet
  128. C IPMODL = Modele "deroule" (uniquement "MECANIQUE", "LIQUIDE" ou "POREUX")
  129. C et "MELANGE PARALLELE".
  130. CALL PIMODL(MODORI,IPMODL,1)
  131. if (ierr.ne.0) return
  132. mlphas = 0
  133. IF (IPMODL.EQ.0) then
  134. call erreur(21)
  135. RETURN
  136. ENDIF
  137. C IPMODL est ACTIF en retour (nouveau pointeur pouvant etre detruit)
  138. MMODEL= IPMODL
  139. NSOUS = KMODEL(/1)
  140. C INITIALISATION DU CHAPEAU DE L'OBJET RIGIDITE
  141. C ---------------------------------------------
  142. NRIGEL=0
  143. SEGINI,MRIGID
  144. MTYMAT = 'RIGIDITE'
  145. IFORIG=IFOUR
  146. ICHOLE=0
  147. IMGEO1=0
  148. IMGEO2=0
  149. ISUPEQ=0
  150. c jk148537 en cas de besoin / NLIN
  151. L1 = 8
  152. n1 = 1
  153. segini mmode1
  154. mchelm = ipche1
  155. mchel1=0
  156. if (mchelm.ne.0) then
  157. n3 = infche(/2)
  158. segini mchel1
  159. mchel1.ifoche = ifoche
  160. n2 = 2
  161. segini mcham1
  162. mchel1.ichaml(1) = mcham1
  163. endif
  164. C
  165. C termes croises STATIQUE et/ou MODAL
  166. nstat = 100
  167. kstat = 0
  168. nmoda = 100
  169. kmoda = 0
  170. segini modsta
  171.  
  172. C Un petit segment toujours utile
  173. NBTYPE=1
  174. SEGINI,notype
  175. notype.TYPE(1) = 'REAL*8'
  176. MOTYR8 = notype
  177.  
  178. C--------------------------------------------------------------------*
  179. C
  180. C BOUCLE SUR LES ZONES ELEMENTAIRES ( MEME TYPE D'EF )
  181. C
  182. C--------------------------------------------------------------------*
  183. C ETAT ACTUEL DES SEGMENTS : MRIGID ACTIF , MMODEL ACTIF
  184. C
  185. ISOU=0
  186. DO 500 ISOUS=1,NSOUS
  187. C
  188. IMODEL=KMODEL(ISOUS)
  189. if (noer.eq.2.and.cmatee.ne.'NLIN') goto 500
  190. C
  191. C INITIALISATIONS
  192. C
  193. MELE = NEFMOD
  194. IPMAIL = IMAMOD
  195. CONM = CONMOD
  196. C
  197. IVAMAT=0
  198. IVACAR=0
  199. NMATR=0
  200. NMATF=0
  201. NCARA=0
  202. NCARF=0
  203. MOCARA=0
  204. MOMATR=0
  205. DESCR=0
  206. xMATRI=0
  207. lsupma=.true.
  208. dcmate = .false.
  209. dcmat2 = .false.
  210. IPMINT = 0
  211. IIPDPG = 0
  212. C
  213. C CREATION DU TABLEAU INFOS
  214. C
  215. IRTD=1
  216. CALL IDENT(IPMAIL,CONM,IPCHE2,IPCHE1,INFOS,IRTD)
  217. IF (IRTD.EQ.0) GOTO 518
  218. C
  219. if (formod(1).eq.'MELANGE'.and.CMATEE.EQ.'PARALLEL') then
  220. mophas = lnomid(12)
  221. nomid = mophas
  222. nmpha = lesobl(/2)
  223. nmphf = lesfac(/2)
  224. jg = nmpha + nmphf
  225. NPHAT=JG
  226. if (mlphas.gt.0) then
  227. * verifie que le precedent melange a ete totalement traite
  228. do iph = 1,mlphas.lect(/1)
  229. if (mlphas.lect(iph).gt.0) then
  230. * write(6,*) 'melange', imodel, 'incompletement traite'
  231. moterr(1:50) = 'melange incompletement traite'
  232. call erreur(-385)
  233. interr(1) = imodel
  234. moterr(1:16) = conm
  235. moterr(17:24) = ' '
  236. call erreur(-386)
  237. call erreur(5)
  238. return
  239. endif
  240. enddo
  241. segadj mlphas
  242. elseif (mlphas.eq.0) then
  243. segini mlphas
  244. endif
  245. NBTYPE=1
  246. SEGINI NOTYPE
  247. MOTYPE=NOTYPE
  248. TYPE(1)='REAL*8'
  249. IVAPHA = 0
  250. imoref = 0
  251. imosou = imodel
  252. * associe phase et coefficient de phase
  253. IF (IVAMOD(/1).GE.1) THEN
  254. DO j = 1,IVAMOD(/1)
  255. IF (TYMODE(j).EQ.'IMODEL ') THEN
  256. IMODE1 = IVAMOD(j)
  257. SEGACT,IMODE1
  258. IF (IMODE1.FORMOD(1)(1:10).EQ.'MECANIQUE ' .OR.
  259. & IMODE1.FORMOD(1)(1:10).EQ.'POREUX ' .OR.
  260. & IMODE1.FORMOD(1)(1:16).EQ.'ELECTROSTATIQUE ' .OR.
  261. & IMODE1.FORMOD(1)(1:10).EQ.'LIQUIDE ' ) THEN
  262. do iph = 1,nmpha
  263. if (imode1.conmod(17:24).eq.lesobl(iph)) then
  264. mlphas.lect(iph) = imode1
  265. if (iph.eq.1) imoref = imode1
  266. endif
  267. enddo
  268. ELSE
  269. C SEGDES,IMODE1
  270. ENDIF
  271. ENDIF
  272. ENDDO
  273. ELSE
  274. call erreur(21)
  275. return
  276. ENDIF
  277. C
  278. CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOPHAS,MOTYPE,0,INFOS,3,IVAPHA)
  279. IF (IERR.NE.0) GOTO 888
  280. SEGSUP NOTYPE
  281. if(IVAPHA.gt.0) then
  282. mptval = IVAPHA
  283. segact mptval
  284. if (ival(/1).eq.0) then
  285. * massif / pas de proportions phases / imite imoref / conserve CONM
  286. imodel = imoref
  287. mele = nefmod
  288. elseif (ival(/1).ge.nmpha) then
  289. goto 500
  290. else
  291. call erreur(21)
  292. return
  293. endif
  294. else
  295. * massif / pas de proportions phases / imite imoref / conserve CONM
  296. imodel = imoref
  297. mele = nefmod
  298. endif
  299.  
  300. IF(ISUP.EQ.1)THEN
  301. CALL VALCHE(IVAPHA,NPHAT,IPMINT,IPPORE,MOPHAS,MELE)
  302. IF(IERR.NE.0)THEN
  303. ISUP=0
  304. GOTO 888
  305. ENDIF
  306. ENDIF
  307. IF (IERR.NE.0) GOTO 888
  308. endif
  309.  
  310. if (mlphas.gt.0.and.ivapha.gt.0) then
  311. iphas = 0
  312. melpha = 0
  313. mptval = ivapha
  314. do iph =1,NPHAT
  315. if (imodel.eq.mlphas.lect(iph)) then
  316. iphas = iph
  317. melpha = ival(iphas)
  318. endif
  319. enddo
  320. endif
  321.  
  322. IF (MELE.EQ.22) GOTO 310
  323.  
  324. IF (MELE.EQ.259) GOTO 500
  325. C
  326. C COQUE INTEGREE OU PAS ?
  327. C
  328. IF(INFMOD(/1).NE.0)THEN
  329. NPINT=INFMOD(1)
  330. ELSE
  331. NPINT=0
  332. ENDIF
  333. C
  334. C VERIFICATION SUR LA FORMULATION
  335. C
  336. CMATE = CMATEE
  337. MATE = IMATEE
  338. INAT = INATUU
  339. C
  340. do im = 1,matmod(/2)
  341. if (matmod(im).eq.'IMPEDANCE') then
  342. dcmate =.true.
  343. if(tymode(/2).gt.0)then
  344. if(tymode(1).eq.'LISTMOTS') dcmat2 = .true.
  345. endif
  346. endif
  347. enddo
  348. C
  349. meleme = ipmail
  350. IF (dcmate) THEN
  351. if (itypel.eq.1) mele = 45
  352. if (itypel.eq.2) mele = 2
  353. ENDIF
  354.  
  355. C-----------------------------------------------------------------------
  356. C P H A S E 1
  357. C
  358. C INFOS. ELEMENT FINI ET COMPOSANTES NECESSAIRES
  359. C DANS LES CHAMPS EN ENTREE ET EVENTUELLEMENT EN SORTIE
  360. C
  361. C ON POURRAIT REGROUPER LA PLUS GROSSE PARTIE DE CETTE PHASE DANS
  362. C UN SOUS-PROGRAMME COMMUN A BEAUCOUP D'OPERATEURS
  363. C
  364. C-----------------------------------------------------------------------
  365. C
  366. if(infmod(/1).lt.2+inttyp) then
  367. CALL ELQUOI(MELE,0,INTTYP,IPINF,IMODEL)
  368. IF ( IERR.NE.0 ) GOTO 888
  369. C
  370. INFO = IPINF
  371. NSTRS = INFELL(16)
  372. MFR = INFELL(13)
  373. LW = INFELL(7)
  374. NDDL = INFELL(15)
  375. IELE = INFELL( 14)
  376. LRE = INFELL(9)
  377. IPORE = INFELL(8)
  378. LHOOK = INFELL(10)
  379. NBPGAU= INFELL( 6)
  380. C ICARA = INFELL( 5)
  381. MINTE = INFELL(11)
  382. MINTE1= INFELL(12)
  383. SEGSUP,INFO
  384. else
  385. NSTRS = INFELE(16)
  386. MFR = INFELE(13)
  387. LW = INFELE(7)
  388. NDDL = INFELE(15)
  389. IELE = INFELE( 14)
  390. LRE = INFELE(9)
  391. IPORE = INFELE(8)
  392. LHOOK = INFELE(10)
  393. NBPGAU= INFELE( 6)
  394. C ICARA = INFELE( 5)
  395. MINTE = INFMOD(2+INTTYP)
  396. MINTE1= INFMOD(8)
  397. endif
  398.  
  399. IPMINT=MINTE
  400. IPMIN1=MINTE1
  401. if((mele.ne.260).or.(mele.ne.259)) SEGACT MINTE
  402.  
  403. CALL INFDPG(MFR,IFOUR,LDPGE,NDPGE)
  404. IF (LDPGE) THEN
  405. IIPDPG = imodel.IPDPGE
  406. IIPDPG = IPTPOI(IIPDPG)
  407. IF (IIPDPG.LE.0) THEN
  408. CALL ERREUR(925)
  409. CALL ERREUR(5)
  410. RETURN
  411. ENDIF
  412. ENDIF
  413.  
  414. 310 continue
  415. C Si necessaire partitionnement du xmatri
  416. ipt1=ipmail
  417. ltrk=oooval(1,4)
  418. if (ltrk.eq.0) ltrk=oooval(1,1)
  419. LTRK=MAX(LTRK,2**24)
  420. nbnn1 =ipt1.num(/1)
  421. nbele1=ipt1.num(/2)
  422. c lre : nb de noeuds par mult
  423. if (nefmod.eq.22) lre=nbnn1
  424. c lre : nb de noeuds par sure
  425. if (nefmod.eq.259) lre=nbnn1
  426. C
  427. C traitement particulier pour milieu poreux
  428.  
  429. IPPORE=0
  430. IF(MFR.EQ.33.OR.MFR.EQ.57.OR.MFR.EQ.59) THEN
  431. IPPORE=NBNNE(NUMGEO(MELE))
  432. ENDIF
  433. C
  434. IDECAP=0
  435. IF (MELE.GE.79.AND.MELE.LE.83) THEN
  436. IDECAP=1
  437. LRE = LRE + 2*NBNN1 - IPORE
  438. ELSE IF (MELE.GE.108.AND.MELE.LE.110) THEN
  439. IDECAP=1
  440. LRE = LRE + (3*NBNN1 - IPORE)/2 - NBSOM(IELE)
  441. ELSE IF (MELE.GE.173.AND.MELE.LE.177) THEN
  442. IDECAP=2
  443. LRE = LRE + (2*NBNN1 - IPORE)*IDECAP
  444. LHOOK=4
  445. IF(IFOUR.EQ.1) LHOOK=6
  446. ELSE IF (MELE.GE.185.AND.MELE.LE.187) THEN
  447. IDECAP=2
  448. LRE = LRE + ((3*NBNN1 - IPORE)/2 - NBSOM(IELE))*IDECAP
  449. LHOOK=2
  450. IF(IFOUR.EQ.1) LHOOK=3
  451. ELSE IF (MELE.GE.178.AND.MELE.LE.182) THEN
  452. IDECAP=3
  453. LRE = LRE + (2*NBNN1 - IPORE)*IDECAP
  454. LHOOK=4
  455. IF(IFOUR.EQ.1) LHOOK=6
  456. ELSE IF (MELE.GE.188.AND.MELE.LE.190) THEN
  457. IDECAP=3
  458. LRE = LRE + ((3*NBNN1 - IPORE)/2 - NBSOM(IELE))*IDECAP
  459. LHOOK=2
  460. IF(IFOUR.EQ.1) LHOOK=3
  461. ENDIF
  462.  
  463. C Ajout a la taille en mots de la matrice des infos du segment
  464. lseg = lre*lre*nbele1 + 16
  465. nblprt = (lseg-1)/ltrk+1
  466. nblmax = (nbele1-1)/nblprt+1
  467. nblprt = (nbele1-1)/nblmax+1
  468.  
  469. C write(ioimp,*) 'nblprt nblmax nbele1',nblprt,nblmax,nbele1
  470. meleme = ipt1
  471. NRIGE0 = mrigid.IRIGEL(/2)
  472. nrigel = MRIGID.IRIGEL(/2) + NBLPRT
  473. if (cmate.eq.'NLIN') nrigel = nrige0 + nrnlin*nblprt
  474. SEGADJ,MRIGID
  475. IPOI6=MRIGID
  476.  
  477. do 505 iprt=1,nblprt
  478. isou=isou+1
  479. if (nblprt.ne.1) then
  480. nbsous=0
  481. nbref=0
  482. nbnn=nbnn1
  483. inelem = (iprt-1) * nblmax
  484. nbelem=min(nblmax,nbele1-inelem)
  485. C write(ioimp,*) ' creation segment ',nbnn,nbelem
  486. segini meleme
  487. itypel=ipt1.itypel
  488. do il=1,nbelem
  489. jl = il + inelem
  490. do ip=1,nbnn
  491. num(ip,il)=ipt1.num(ip,jl)
  492. enddo
  493. icolor(il)=ipt1.icolor(jl)
  494. enddo
  495. endif
  496. nbnn=nbnn1
  497. ipmail=meleme
  498.  
  499. IF (MELE.EQ.22) GOTO 9991
  500. IF (MELE.EQ.259) GOTO 9991
  501. C* Cas particulier des elements XFEM en cas de partition :
  502. C* Il faut aussi partitionner le modele (nomme imoxfem)
  503. IF (MFR.EQ.63) THEN
  504. IF (nblprt.GT.1) THEN
  505. imoxfem = 0
  506. CALL PARTXR(IMODEL,ipmail,imoxfem)
  507. ELSE
  508. imoxfem = IMODEL
  509. ENDIF
  510. ENDIF
  511. C=DEB==== FORMULATION HHO ==== Traitement particulier du modele ========
  512. IF (MFR.EQ.HHO_MFR_ELEMENT) THEN
  513. IF (nblprt.GT.1) THEN
  514. SEGINI,imode1=imodel
  515. imode1.imamod=ipmail
  516. imohho = imode1
  517. CALL HHOPAR(imohho,iret)
  518. if (iret.ne.0) return
  519. ELSE
  520. imohho = IMODEL
  521. ENDIF
  522. ENDIF
  523. C=FIN==== FORMULATION HHO ==============================================
  524.  
  525. C LHOO2 = LHOOK*LHOOK
  526. C
  527. C SEGMENTS D'INTEGRATION
  528. C
  529. C Minte : 1er segment d'integration, il existe pour tous les e.f.
  530. C Minte1: 2eme segment d'integration, uniquement pour certains e.f.
  531. C en particulier pour Coq6 et Coq8
  532. C nbpg:nb de points de gauss = nbpgau du segment minte
  533. C iele:no d'element geometrique associe a l'e.f. mele
  534. C nbff:nb de fonctions de forme = nbno du segment minte
  535. C
  536. C TRAITEMENT DES CHAMPS EN ENTREE
  537. C -------------------------------
  538. C
  539. C >>> CHAMP DE MATRICES DE HOOKE
  540. C
  541. IF (IMAT.EQ.2) THEN
  542. IF(MELE.EQ.93.AND.CMATE.NE.'ISOTROPE')THEN
  543. NBROBL=3
  544. NBRFAC=0
  545. SEGINI NOMID
  546. LESOBL(1)='MAHO'
  547. LESOBL(2)='V1X '
  548. LESOBL(3)='V1Y '
  549. NBTYPE=3
  550. SEGINI NOTYPE
  551. TYPE(1)='POINTEURLISTREEL'
  552. TYPE(2)='REAL*8'
  553. TYPE(3)='REAL*8'
  554.  
  555. ELSE
  556. NBROBL =1
  557. NBRFAC =0
  558. SEGINI NOMID
  559. LESOBL(1)='MAHO'
  560. NBTYPE =1
  561. SEGINI NOTYPE
  562. TYPE(1) ='POINTEURLISTREEL'
  563. ENDIF
  564.  
  565. MOMATR=NOMID
  566. MOTYPE=NOTYPE
  567. NMATR =NBROBL
  568. NMATF =NBRFAC
  569. C
  570. CALL KOMCHA(IPCHOO,IPMAIL,CONM,MOMATR,MOTYPE,1,INFOS,3,IVAMAT)
  571. SEGSUP NOTYPE
  572. IF (IERR.NE.0) GOTO 9991
  573. C
  574. MPTVAL=IVAMAT
  575. MELVAL=IVAL(1)
  576. NBGMAT=IELCHE(/1)
  577. NELMAT=IELCHE(/2)
  578. NMATT=NMATR+NMATF
  579. IF(IPCHE2.EQ.0.AND.ISUP.EQ.1)THEN
  580. CALL VALCHE(IVAMAT,NMATT,IPMINT,IPPORE,MOMATR,MELE)
  581. IF(IERR.NE.0)THEN
  582. ISUP=0
  583. GOTO 9991
  584. ENDIF
  585. ENDIF
  586.  
  587. ELSE
  588. C
  589. C >>> CHAMP DE MATERIAU
  590. C
  591. IF (FORMOD(1).EQ.'MECANIQUE'.AND.CMATE.EQ.'ISOTROPE') THEN
  592. NBROBL=2
  593. NBRFAC=0
  594. SEGINI NOMID
  595. MOMATR=NOMID
  596. IF (MFR.EQ.35.or.mfr.eq.78) THEN
  597. LESOBL(1)='KS '
  598. LESOBL(2)='KN '
  599. ELSE IF(MFR.EQ.53) THEN
  600. NBROBL=1
  601. SEGADJ,NOMID
  602. LESOBL(1)='KS '
  603. ELSE
  604. LESOBL(1)='YOUN'
  605. LESOBL(2)='NU '
  606. C=DEB==== FORMULATION HHO ==== Traitement particulier du modele ========
  607. CALL HHOIDC(imodel,MOMATR)
  608. NBROBL=nomid.lesobl(/2)
  609. ** NBRFAC=nomid.lesfac(/2)
  610. C=FIN==== FORMULATION HHO ==============================================
  611. ENDIF
  612. NMATR=NBROBL
  613. NMATF=NBRFAC
  614. ELSE
  615. $ IF (FORMOD(1).EQ.'MECANIQUE'.AND.CMATE.EQ.'UNIDIREC') THEN
  616. IF (MFR.EQ.1.AND.IDIM.EQ.3) THEN
  617. NBROBL=7
  618. NBRFAC=0
  619. SEGINI NOMID
  620. MOMATR=NOMID
  621. LESOBL(1)='YOUN'
  622. LESOBL(2)='V1X '
  623. LESOBL(3)='V1Y '
  624. LESOBL(4)='V1Z '
  625. LESOBL(5)='V2X '
  626. LESOBL(6)='V2Y '
  627. LESOBL(7)='V2Z '
  628. ELSE
  629. NBROBL=3
  630. NBRFAC=0
  631. SEGINI NOMID
  632. MOMATR=NOMID
  633. LESOBL(1)='YOUN'
  634. LESOBL(2)='V1X '
  635. LESOBL(3)='V1Y '
  636. ENDIF
  637. NMATR=NBROBL
  638. NMATF=NBRFAC
  639. ELSE
  640. $ IF (FORMOD(1).EQ.'MECANIQUE'
  641. $ .AND.CMATE.EQ.'ZONE_COHESIVE') THEN
  642. IF (MFR.EQ.77) THEN
  643. NBROBL=2
  644. NBRFAC=0
  645. SEGINI NOMID
  646. MOMATR=NOMID
  647. LESOBL(1)='KS '
  648. LESOBL(2)='KN '
  649. ENDIF
  650. NMATR=NBROBL
  651. NMATF=NBRFAC
  652. ELSE
  653. $ IF (FORMOD(1).EQ.'POREUX '.AND.CMATE.EQ.'ISOTROPE') THEN
  654. IF (MELE.GE.79.AND.MELE.LE.83) THEN
  655. NBROBL=4
  656. NBRFAC=0
  657. SEGINI NOMID
  658. MOMATR=NOMID
  659. LESOBL(1)='YOUN'
  660. LESOBL(2)='NU '
  661. LESOBL(3)='COB '
  662. LESOBL(4)='MOB '
  663. ELSE IF (MELE.GE.108.AND.MELE.LE.110) THEN
  664. NBROBL=4
  665. NBRFAC=0
  666. SEGINI NOMID
  667. MOMATR=NOMID
  668. LESOBL(1)='KS '
  669. LESOBL(2)='KN '
  670. LESOBL(3)='COB '
  671. LESOBL(4)='MOB '
  672. ELSE IF (MELE.GE.173.AND.MELE.LE.177) THEN
  673. NBROBL=10
  674. NBRFAC=0
  675. SEGINI NOMID
  676. MOMATR=NOMID
  677. LESOBL(1)='YOUN'
  678. LESOBL(2)='NU '
  679. LESOBL(3)='COP1'
  680. LESOBL(4)='COP2'
  681. LESOBL(5)='CPP1'
  682. LESOBL(6)='CPP2'
  683. LESOBL(7)='KK11'
  684. LESOBL(8)='KK12'
  685. LESOBL(9)='KK21'
  686. LESOBL(10)='KK22'
  687. ELSE IF (MELE.GE.178.AND.MELE.LE.182) THEN
  688. NBROBL=17
  689. NBRFAC=0
  690. SEGINI NOMID
  691. MOMATR=NOMID
  692. LESOBL(1)='YOUN'
  693. LESOBL(2)='NU '
  694. LESOBL(3)='COP1'
  695. LESOBL(4)='COP2'
  696. LESOBL(5)='COP3'
  697. LESOBL(6)='CPP1'
  698. LESOBL(7)='CPP2'
  699. LESOBL(8)='CPP3'
  700. LESOBL(9)='KK11'
  701. LESOBL(10)='KK12'
  702. LESOBL(11)='KK13'
  703. LESOBL(12)='KK21'
  704. LESOBL(13)='KK22'
  705. LESOBL(14)='KK23'
  706. LESOBL(15)='KK31'
  707. LESOBL(16)='KK32'
  708. LESOBL(17)='KK33'
  709. ELSE IF (MELE.GE.185.AND.MELE.LE.187) THEN
  710. NBROBL=10
  711. NBRFAC=0
  712. SEGINI NOMID
  713. MOMATR=NOMID
  714. LESOBL(1)='KS '
  715. LESOBL(2)='KN '
  716. LESOBL(3)='COP1'
  717. LESOBL(4)='COP2'
  718. LESOBL(5)='CPP1'
  719. LESOBL(6)='CPP2'
  720. LESOBL(7)='KK11'
  721. LESOBL(8)='KK12'
  722. LESOBL(9)='KK21'
  723. LESOBL(10)='KK22'
  724. ELSE IF (MELE.GE.188.AND.MELE.LE.190) THEN
  725. NBROBL=17
  726. NBRFAC=0
  727. SEGINI NOMID
  728. MOMATR=NOMID
  729. LESOBL(1)='KS '
  730. LESOBL(2)='KN '
  731. LESOBL(3)='COP1'
  732. LESOBL(4)='COP2'
  733. LESOBL(5)='COP3'
  734. LESOBL(6)='CPP1'
  735. LESOBL(7)='CPP2'
  736. LESOBL(8)='CPP3'
  737. LESOBL(9)='KK11'
  738. LESOBL(10)='KK12'
  739. LESOBL(11)='KK13'
  740. LESOBL(12)='KK21'
  741. LESOBL(13)='KK22'
  742. LESOBL(14)='KK23'
  743. LESOBL(15)='KK31'
  744. LESOBL(16)='KK32'
  745. LESOBL(17)='KK33'
  746. ENDIF
  747. NMATR=NBROBL
  748. NMATF=NBRFAC
  749. C
  750. ELSEIF(INAT.EQ.67.AND.CMATE.EQ.'ORTHOTRO') THEN
  751. NBROBL=6
  752. NBRFAC=0
  753. SEGINI NOMID
  754. MOMATR=NOMID
  755. LESOBL(1)='YG1 '
  756. LESOBL(2)='YG2 '
  757. LESOBL(3)='NU12'
  758. LESOBL(4)='G12 '
  759. LESOBL(5)='V1X '
  760. LESOBL(6)='V1Y '
  761. NMATR=NBROBL
  762. NMATF=NBRFAC
  763. C
  764. C ELSE IF (FORMOD(1).EQ.'ELECTROSTATIQUE') THEN
  765. C Pour l'instant, lnomid(6) ou appel a IDMATR suffisent.
  766. C
  767. ELSE IF (FORMOD(1).EQ.'DIFFUSION') THEN
  768. C CB215821 : Desormais il faut utiliser COND
  769. MOTERR(1:8)='DIFFUSIO'
  770. CALL ERREUR(193)
  771. RETURN
  772. C CALL IDDILI(MATE,1,MOMATR,NMATR,NMATF)
  773. C nomid = momatr
  774. C
  775. C Autres cas :
  776. ELSE
  777. if(lnomid(6).ne.0) then
  778. lsupma=.false.
  779. momatr = lnomid(6)
  780. else
  781. CALL IDMATR(MFR,IMODEL,MOMATR,NMATR,NMATF)
  782. endif
  783. nomid = momatr
  784. nmatr=lesobl(/2)
  785. nmatf=lesfac(/2)
  786. ENDIF
  787. C
  788. IF (CMATE.EQ.'SECTION') THEN
  789. NBTYPE=3
  790. SEGINI NOTYPE
  791. TYPE(1)='POINTEURMMODEL'
  792. TYPE(2)='POINTEURMCHAML'
  793. TYPE(3)='POINTEURLISTREEL'
  794. c mistral :
  795. ELSEIF (INAT.EQ.94) THEN
  796. NBTYPE=NMATR+NMATF
  797. SEGINI NOTYPE
  798. DO 11 ITYP=1,NBTYPE
  799. TYPE(ITYP)='REAL*8'
  800. 11 CONTINUE
  801. C=DEB==== FORMULATION HHO ==== Traitement particulier du modele ========
  802. IDECAL = 0
  803. IF (MFR.EQ.HHO_MFR_ELEMENT) IDECAL = 4
  804. C=FIN==== FORMULATION HHO ==============================================
  805. C pour le modele mistral il y a 10 composantes non lineaires qui sont des listes de reels
  806. NLDEB=NMATR-9-IDECAL
  807. NLFIN=NMATR-IDECAL
  808. DO 13 ITYP=NLDEB,NLFIN
  809. TYPE(ITYP)='POINTEURLISTREEL'
  810. 13 CONTINUE
  811. C mistral.
  812. C
  813. C poi1 -- MODAL
  814. C
  815. ELSE IF (CMATE.EQ.'MODAL') THEN
  816. NBROBL=3
  817. NBRFAC=0
  818. SEGINI NOMID
  819. MOMATR=NOMID
  820. LESOBL(1)='FREQ'
  821. LESOBL(2)='MASS'
  822. LESOBL(3)='DEFO'
  823. C
  824. NBTYPE=3
  825. SEGINI NOTYPE
  826. MOTYPE=NOTYPE
  827. TYPE(1)='REAL*8'
  828. TYPE(2)='REAL*8'
  829. TYPE(3)='POINTEURCHPOINT'
  830. C
  831. C poi1 -- STATIQUE
  832. C
  833. ELSE IF (CMATE.EQ.'STATIQUE') THEN
  834. NBROBL=3
  835. NBRFAC=0
  836. SEGINI NOMID
  837. MOMATR=NOMID
  838. LESOBL(1)='DEFO'
  839. LESOBL(2)='RIDE'
  840. LESOBL(3)='MADE'
  841. C
  842. NBTYPE=1
  843. SEGINI NOTYPE
  844. MOTYPE=NOTYPE
  845. TYPE(1)='POINTEURCHPOINT'
  846. C
  847. C IMPEDANCE COMPLEXE
  848. C
  849. ELSE IF (CMATE.EQ.'IMPCOMPL') THEN
  850. NBROBL=1
  851. NBRFAC=0
  852. SEGINI NOMID
  853. MOMATR=NOMID
  854. LESOBL(1)='RAID'
  855. C
  856. NBTYPE=1
  857. SEGINI NOTYPE
  858. MOTYPE=NOTYPE
  859. TYPE(1)='REAL*8'
  860. C
  861. ELSE
  862. NBTYPE=1
  863. SEGINI NOTYPE
  864. TYPE(1)='REAL*8'
  865. ENDIF
  866. C=DEB==== FORMULATION HHO ==== Traitement particulier du modele ========
  867. IF (MFR.EQ.HHO_MFR_ELEMENT) THEN
  868. IF (NBTYPE.EQ.1) THEN
  869. NBTYPE = NMATR+NMATF
  870. SEGADJ,NOTYPE
  871. DO ITYP = 2, NBTYPE
  872. TYPE(ITYP) = TYPE(1)
  873. END DO
  874. END IF
  875. TYPE(NMATR-1) = 'POINTEURLISTREEL'
  876. TYPE(NMATR ) = 'POINTEURLISTREEL'
  877. END IF
  878. C=FIN==== FORMULATION HHO ==============================================
  879. MOTYPE=NOTYPE
  880. C
  881. CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOMATR,MOTYPE,1,INFOS,3,IVAMAT)
  882. SEGSUP NOTYPE
  883. IF (IERR.NE.0) GOTO 9991
  884. NMATT=NMATR+NMATF
  885. IF(ISUP.EQ.1)THEN
  886. CALL VALCHE(IVAMAT,NMATT,IPMINT,IPPORE,MOMATR,MELE)
  887. IF(IERR.NE.0)THEN
  888. ISUP=0
  889. GOTO 9991
  890. ENDIF
  891. ENDIF
  892. C
  893. MPTVAL=IVAMAT
  894. C
  895. if (cmate.eq.'STATIQUE'.or.cmate.eq.'MODAL') then
  896. if (ival(/1).lt.3) then
  897. * write(6,*) 'erreur modal-statique'
  898. moterr(1:50) = ' erreur modal ou statique '
  899. call erreur(-385)
  900. call erreur(5)
  901. return
  902. endif
  903. if (cmate.eq.'STATIQUE') then
  904. kstat = kstat + 1
  905. ivstat(kstat) = ivamat
  906. pistat(kstat) = imodel
  907. if (kstat.eq.nstat) then
  908. nstat = nstat + 100
  909. segadj modsta
  910. endif
  911. else if (cmate.eq.'MODAL') then
  912. kmoda = kmoda + 1
  913. ivmoda(kmoda) = ivamat
  914. pimoda(kmoda) = imodel
  915. if (kmoda.eq.nmoda) then
  916. nmoda = nmoda + 100
  917. segadj modsta
  918. endif
  919. endif
  920. endif
  921. C
  922. NBGMAT = 0
  923. NELMAT = 0
  924. DO 1108 IM=1,ival(/1)
  925. IF(IVAL(IM).NE.0)THEN
  926. MELVAL=IVAL(IM)
  927. IF (CMATE.EQ.'SECTION') THEN
  928. NBGMAT=MAX(NBGMAT,IELCHE(/1))
  929. NELMAT=MAX(NELMAT,IELCHE(/2))
  930. ELSE
  931. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  932. NELMAT=MAX(NELMAT,VELCHE(/2))
  933. ENDIF
  934. ENDIF
  935. 1108 CONTINUE
  936. ENDIF
  937. C
  938. C >>> CHAMPS DE CARACTERISTIQUES
  939. C
  940. NBROBL=0
  941. NBRFAC=0
  942. MOCARA=0
  943. IVECT=0
  944. C Sauf cas particuliers, toutes les composantes de type REAL*8
  945. notype = MOTYR8
  946. C
  947. C EPAISSEUR DANS LE CAS MASSIF EN CONTRAINTES PLANES
  948. C
  949. C ccccccc
  950. IF((MFR.EQ.1.OR.MFR.EQ.31.OR.
  951. C=DEB==== FORMULATION HHO ==============================================
  952. & (MFR.EQ.HHO_MFR_ELEMENT).OR.
  953. C=FIN==== FORMULATION HHO ==============================================
  954. C ccccccc
  955. + ((MELE.GE.79.AND.MELE.LE.83).OR.
  956. + (MELE.GE.173.AND.MELE.LE.182)))
  957. + .AND.IFOUR.EQ.-2)THEN
  958. NBROBL=0
  959. NBRFAC=1
  960. SEGINI NOMID
  961. MOCARA=NOMID
  962. LESFAC(1)='DIM3'
  963. C
  964. C EPAISSEUR ET EXCENTREMENT DANS LE CAS DES COQUES
  965. C
  966. ELSEIF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9) THEN
  967. NBROBL=1
  968. IF(MFR.EQ.3.AND.IFOUR.EQ.-2) THEN
  969. NBRFAC=2
  970. ELSE
  971. NBRFAC=1
  972. ENDIF
  973. SEGINI NOMID
  974. MOCARA=NOMID
  975. LESOBL(1)='EPAI'
  976. LESFAC(1)='EXCE'
  977. IF(MFR.EQ.3.AND.IFOUR.EQ.-2) LESFAC(2)='DIM3'
  978. C
  979. C SECTION POUR LES BARRES ET LES CERCES
  980. C
  981. ELSE IF (MFR.EQ.27.OR.MFR.EQ.78) THEN
  982. IF(.NOT.dcmate) THEN
  983. NBROBL=1
  984. SEGINI NOMID
  985. MOCARA=NOMID
  986. LESOBL(1)='SECT'
  987. ENDIF
  988. C
  989. C section, excentrements et orientation pour les barres excentrees
  990. C
  991. ELSE IF (MFR.EQ.49) THEN
  992. NBROBL=6
  993. SEGINI NOMID
  994. MOCARA=NOMID
  995. LESOBL(1)='SECT'
  996. LESOBL(2)='EXCZ'
  997. LESOBL(3)='EXCY'
  998. LESOBL(4)='VX '
  999. LESOBL(5)='VY '
  1000. LESOBL(6)='VZ '
  1001. C
  1002. C raideurs locales et orientation pour l'element LIA2
  1003. C de liaison a 2 noeuds
  1004. C
  1005. ELSE IF (MFR.EQ.51) THEN
  1006. NBROBL=9
  1007. SEGINI NOMID
  1008. MOCARA=NOMID
  1009. LESOBL(1)='RLUX'
  1010. LESOBL(2)='RLUY'
  1011. LESOBL(3)='RLUZ'
  1012. LESOBL(4)='RLRX'
  1013. LESOBL(5)='RLRY'
  1014. LESOBL(6)='RLRZ'
  1015. LESOBL(7)='VX '
  1016. LESOBL(8)='VY '
  1017. LESOBL(9)='VZ '
  1018. C
  1019. C CARACTERISTIQUES POUR LES POUTRES
  1020. C
  1021. ELSE IF (MFR.EQ.7 ) THEN
  1022. if (dcmate) then
  1023. NBROBL=0
  1024. NBRFAC=6
  1025. SEGINI NOMID
  1026. MOCARA=NOMID
  1027. LESFAC(1)='TORS'
  1028. LESFAC(2)='INRY'
  1029. LESFAC(3)='INRZ'
  1030. LESFAC(4)='VX '
  1031. LESFAC(5)='VY '
  1032. LESFAC(6)='VZ '
  1033. IVECT=1
  1034. C
  1035. else
  1036. IF (CMATE.EQ.'SECTION') THEN
  1037. NBROBL=0
  1038. NBRFAC=3
  1039. SEGINI NOMID
  1040. MOCARA=NOMID
  1041. LESFAC(1)='VX '
  1042. LESFAC(2)='VY '
  1043. LESFAC(3)='VZ '
  1044. IVECT=1
  1045. C
  1046. C CAS 2D
  1047. ELSE IF (IFOUR.EQ.-2.OR.IFOUR.EQ.-1.OR.IFOUR.EQ.-3) THEN
  1048. NBRFAC=1
  1049. NBROBL=2
  1050. SEGINI NOMID
  1051. MOCARA=NOMID
  1052. LESOBL(1)= 'SECT'
  1053. LESOBL(2)= 'INRZ'
  1054. LESFAC(1)= 'SECY'
  1055. ELSE
  1056. NBROBL=4
  1057. NBRFAC=5
  1058. SEGINI NOMID
  1059. MOCARA=NOMID
  1060. LESOBL(1)='TORS'
  1061. LESOBL(2)='INRY'
  1062. LESOBL(3)='INRZ'
  1063. LESOBL(4)='SECT'
  1064. LESFAC(1)='SECY'
  1065. LESFAC(2)='SECZ'
  1066. LESFAC(3)='VX '
  1067. LESFAC(4)='VY '
  1068. LESFAC(5)='VZ '
  1069. IVECT=1
  1070. ENDIF
  1071. endif
  1072. C
  1073. C CARACTERISTIQUES POUR LES TUYAUX
  1074. C
  1075. ELSE IF (MFR.EQ.13) THEN
  1076. NBROBL=2
  1077. NBRFAC=6
  1078. SEGINI NOMID
  1079. MOCARA=NOMID
  1080. LESOBL(1)='EPAI'
  1081. LESOBL(2)='RAYO'
  1082. LESFAC(1)='RACO'
  1083. LESFAC(2)='PRES'
  1084. LESFAC(3)='CISA'
  1085. LESFAC(4)='VX '
  1086. LESFAC(5)='VY '
  1087. LESFAC(6)='VZ '
  1088. IVECT=1
  1089. C
  1090. ELSE IF (MFR.EQ.39) THEN
  1091. NBROBL=2
  1092. NBRFAC=5
  1093. SEGINI NOMID
  1094. MOCARA=NOMID
  1095. LESOBL(1)='EPAI'
  1096. LESOBL(2)='RAYO'
  1097. LESFAC(1)='RACO'
  1098. LESFAC(2)='PRES'
  1099. LESFAC(3)='VX '
  1100. LESFAC(4)='VY '
  1101. LESFAC(5)='VZ '
  1102. IVECT=1
  1103. C
  1104. C CARACTERISTIQUES POUR LES LINESPRING
  1105. C
  1106. ELSE IF (MFR.EQ.15) THEN
  1107. NBROBL=5
  1108. SEGINI NOMID
  1109. MOCARA=NOMID
  1110. LESOBL(1)='EPAI'
  1111. LESOBL(2)='FISS'
  1112. LESOBL(3)='VX '
  1113. LESOBL(4)='VY '
  1114. LESOBL(5)='VZ '
  1115. C
  1116. C CARACTERISTIQUES POUR LES TUYAUX FISSURES
  1117. C
  1118. ELSE IF (MFR.EQ.17) THEN
  1119. NBROBL=9
  1120. SEGINI NOMID
  1121. MOCARA=NOMID
  1122. LESOBL(1)='RAYO'
  1123. LESOBL(2)='EPAI'
  1124. LESOBL(3)='VX '
  1125. LESOBL(4)='VY '
  1126. LESOBL(5)='VZ '
  1127. LESOBL(6)='VXF '
  1128. LESOBL(7)='VYF '
  1129. LESOBL(8)='VZF '
  1130. LESOBL(9)='ANGL'
  1131. C
  1132. C CARACTERISTIQUES DES ELEMENTS HOMOGENEISES
  1133. C
  1134. ELSE IF (MFR.EQ.37) THEN
  1135. IF(IFOUR.EQ.1.OR.IFOUR.EQ.0.OR.IFOUR.EQ.2) THEN
  1136. NBROBL=5
  1137. SEGINI NOMID
  1138. MOCARA=NOMID
  1139. LESOBL(1)='SCEL'
  1140. LESOBL(2)='SFLU'
  1141. LESOBL(3)='EPS '
  1142. LESOBL(4)='SECT'
  1143. LESOBL(5)='INRZ '
  1144. ELSE
  1145. NBROBL=3
  1146. SEGINI NOMID
  1147. MOCARA=NOMID
  1148. LESOBL(1)='SCEL'
  1149. LESOBL(2)='SFLU'
  1150. LESOBL(3)='EPS '
  1151. ENDIF
  1152. C
  1153. C CARACTERISTIQUES DE L'ELEMENT TUYAU ACOUSTIQUE
  1154. C
  1155. ELSE IF (MFR.EQ.41) THEN
  1156. NBROBL=1
  1157. NBRFAC=1
  1158. SEGINI NOMID
  1159. MOCARA=NOMID
  1160. LESOBL(1)='RAYO'
  1161. LESFAC(1)='RACO'
  1162. C
  1163. C CARACTERISTIQUE POUR LES JOINTS GENE
  1164. C
  1165. ELSE IF (MFR.EQ.55) THEN
  1166. CcPPj NBROBL=1
  1167. CcPPj NBRFAC=0
  1168. CcPPj SEGINI NOMID
  1169. CcPPj MOCARA=NOMID
  1170. CcPPj LESOBL(1)='EPAI'
  1171. NBROBL=0
  1172. NBRFAC=1
  1173. SEGINI NOMID
  1174. MOCARA=NOMID
  1175. LESFAC(1)='EPAI'
  1176. C
  1177. C CARACTERISTIQUE MACRO_EL (element CIFL)
  1178. C
  1179. ELSE IF (MFR.EQ.61)THEN
  1180. NBRFAC=0
  1181. NBROBL=2
  1182. SEGINI NOMID
  1183. MOCARA=NOMID
  1184. LESOBL(1)= 'SECT'
  1185. LESOBL(2)= 'INRZ'
  1186. C
  1187. C CARACTERISTIQUES POUR LE JOI1 SI IMAT = 2
  1188. C
  1189. ELSE IF(MFR.EQ.75.AND.IMAT.EQ.2) THEN
  1190. IF(IDIM.EQ.2) THEN
  1191. NBROBL=2
  1192. NBRFAC=0
  1193. SEGINI NOMID
  1194. MOCARA=NOMID
  1195. LESOBL(1)='V1X '
  1196. LESOBL(2)='V1Y '
  1197. ELSE IF(IDIM.EQ.3) THEN
  1198. NBROBL=6
  1199. NBRFAC=0
  1200. SEGINI NOMID
  1201. MOCARA=NOMID
  1202. LESOBL(1)='V1X '
  1203. LESOBL(2)='V1Y '
  1204. LESOBL(3)='V1Z '
  1205. LESOBL(4)='V2X '
  1206. LESOBL(5)='V2Y '
  1207. LESOBL(6)='V2Z '
  1208. ENDIF
  1209. ENDIF
  1210. C
  1211. C rendement kich 09/01
  1212. if (mocara.le.0) then
  1213. nbrobl = 0
  1214. nbrfac = 0
  1215. segini nomid
  1216. mocara = nomid
  1217. endif
  1218.  
  1219. ifac = nbrfac
  1220. NCAR1=NBROBL + NBRFAC + 1
  1221. NBRFAC= nbrfac + 10
  1222. segadj,nomid
  1223. lesfac(ifac + 1) = 'REND'
  1224. lesfac(ifac + 2) = 'W1X '
  1225. lesfac(ifac + 3) = 'W1Y '
  1226. lesfac(ifac + 4) = 'W1Z '
  1227. lesfac(ifac + 5) = 'W2X '
  1228. lesfac(ifac + 6) = 'W2Y '
  1229. lesfac(ifac + 7) = 'W2Z '
  1230. lesfac(ifac + 8) = 'REN1'
  1231. lesfac(ifac + 9) = 'REN2'
  1232. lesfac(ifac + 10) = 'REN3'
  1233.  
  1234. NCARA=NBROBL
  1235. NCARF=NBRFAC
  1236. NCARR=NCARA+NCARF
  1237.  
  1238. motype = notype
  1239. if (motype.ne.motyr8) then
  1240. nbtype = notype.type(/2) + 1
  1241. segadj,notype
  1242. notype.type(nbtype) = 'REAL*8'
  1243. endif
  1244. C
  1245. IF (IPCHE1.NE.0.AND.MOCARA.NE.0) THEN
  1246. CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOCARA,MOTYPE,1,INFOS,3,IVACAR)
  1247. IF (IERR.NE.0) GOTO 9991
  1248. C
  1249. IF (ISUP.EQ.1) THEN
  1250. CALL VALCHE(IVACAR,NCARR,IPMINT,IPPORE,MOCARA,MELE)
  1251. IF(IERR.NE.0)THEN
  1252. ISUP=0
  1253. GOTO 9991
  1254. ENDIF
  1255. ENDIF
  1256. ENDIF
  1257. if (motype.ne.motyr8) segsup,notype
  1258.  
  1259. IF (IVACAR.EQ.0) THEN
  1260. *
  1261. * AM 11/06/16 VERIFICATION DE LA PRESENCE DES CARACTERTISTIQUES
  1262. * POUR LES ELEMENTS TYPE POUTRE ET ASSIMILES
  1263. * NECESSAIRE AUSSI EN CAS DE MATRICE DE HOOKE
  1264.  
  1265. IF(MELE.EQ.29.OR.MELE.EQ.42.OR.MELE.EQ.84
  1266. & .OR.MELE.EQ.97) THEN
  1267. CALL ERREUR (404)
  1268. GO TO 9991
  1269. ENDIF
  1270.  
  1271. IF(MFR.EQ.75.AND.IMAT.EQ.2) THEN
  1272. CALL ERREUR (404)
  1273. GO TO 9991
  1274. ENDIF
  1275. ENDIF
  1276. mptval = ivacar
  1277.  
  1278. C
  1279. C cas particuliers des XFEM
  1280. IF (MFR.EQ.63) GOTO 63
  1281.  
  1282. C=DEB==== FORMULATION HHO ==== Cas particulier de la formulation =======
  1283. IF (MFR.EQ.HHO_MFR_ELEMENT) GOTO 89
  1284. C=FIN==== FORMULATION HHO ==============================================
  1285.  
  1286. C NAVIER_STOKES NLIN
  1287. if (cmate.eq.'NLIN') then
  1288. segact mmode1*mod
  1289. mmode1.kmodel(1) = imodel
  1290. mchel1.conche(1) = conm
  1291. mchel1.imache(1) = ipmail
  1292. mptval = ivamat
  1293. nomid = momatr
  1294. do jj = 1,n2
  1295. mcham1.nomche(jj) = lesobl(jj)
  1296. mcham1.typche(jj) = tyval(jj)
  1297. mcham1.ielval(jj) = ival(jj)
  1298. enddo
  1299.  
  1300. ipmons = mmode1
  1301. ipchns = mchel1
  1302. if (noer.eq.2) then
  1303. call go2nli(ipmons,ipchns,iprins,3)
  1304. else
  1305. call go2nli(ipmons,ipchns,iprins,1)
  1306. endif
  1307. if (ierr.ne.0) return
  1308.  
  1309. goto 2999
  1310. endif
  1311.  
  1312.  
  1313. C-----------------------------------------------------------------------
  1314. C P H A S E 2
  1315. C
  1316. C PREPARATION DES OBJETS RESULTATS
  1317. C
  1318. C-----------------------------------------------------------------------
  1319. C
  1320. MELEME=IPMAIL
  1321. C
  1322. C MODIFICATION DU MELEME POUR LE REMPLISSAGE DU SEGMENT DESCRIPTEUR
  1323. C
  1324. IF (LDPGE) THEN
  1325. IPT3=meleme
  1326. NBELEM=NUM(/2)
  1327. NBNN=IPT3.NUM(/1)+1
  1328. NBREF=0
  1329. NBSOUS=0
  1330. SEGINI MELEME
  1331. DO 1007 I=1,NBELEM
  1332. DO 1008 J=1,NBNN-1
  1333. NUM(J,I)=IPT3.NUM(J,I)
  1334. 1008 CONTINUE
  1335. NUM(NBNN,I)=IIPDPG
  1336. ICOLOR(I)=IPT3.ICOLOR(I)
  1337. 1007 CONTINUE
  1338. ITYPEL=28
  1339. IPMADG=MELEME
  1340. C SEGDES IPT3
  1341. ELSE
  1342. NBNN=NUM(/1)
  1343. NBELEM=NUM(/2)
  1344. ENDIF
  1345.  
  1346. C RECHERCHE DES NOMS D'INCONNUES ET DES DUAUX
  1347. C
  1348. NLIGRP= LRE
  1349. NLIGRD= LRE
  1350. SEGINI DESCR
  1351. IPDSCR=DESCR
  1352. if(lnomid(1).ne.0) then
  1353. nomid=lnomid(1)
  1354. modepl=nomid
  1355. ndepl=lesobl(/2)
  1356. ndum=lesfac(/2)
  1357. lsupdp=.false.
  1358. else
  1359. lsupdp=.true.
  1360. CALL IDPRIM(IMODEL,MFR,MODEPL,NDEPL,NDUM)
  1361. endif
  1362. if(lnomid(2).ne.0) then
  1363. nomid=lnomid(2)
  1364. moforc=nomid
  1365. nforc=lesobl(/2)
  1366. lsupfo=.false.
  1367. else
  1368. lsupfo=.true.
  1369. CALL IDDUAL(IMODEL,MFR,MOFORC,NFORC,NDUM)
  1370. endif
  1371. C
  1372. IF (NDEPL.EQ.0.OR.NFORC.EQ.0.OR.NDEPL.NE.NFORC) THEN
  1373. * write(6,*) 'erreur ndepl nforc',lnomid(1),lnomid(2)
  1374. moterr(1:50) = 'pas d inconnue duale ou primale '
  1375. call erreur(-385)
  1376. interr(1) = imodel
  1377. moterr(1:16) = conmod
  1378. moterr(17:24) = ' '
  1379. call erreur(-386)
  1380. CALL ERREUR(5)
  1381. SEGSUP DESCR,MRIGID
  1382. C SEGDES MMODEL,MELEME
  1383. RETURN
  1384. ENDIF
  1385. C
  1386. C REMPLISSAGE DU SEGMENT DESCRIPTEUR
  1387. C
  1388. IDDL=1
  1389. NCOMP=NDEPL
  1390. NBNNS=NBNN
  1391. IF (MFR.EQ.33.OR.MFR.EQ.57.OR.MFR.EQ.59) THEN
  1392. NCOMP=NDEPL-IDECAP
  1393. ENDIF
  1394. IF (LDPGE) THEN
  1395. NCOMP=NDEPL-NDPGE
  1396. NBNNS=NBNN-1
  1397. ENDIF
  1398. IF (MFR.EQ.19.OR.MFR.EQ.21) NBNNS=NBNN/2
  1399. if (dcmat2) NCOMP = NDEPL/2
  1400. NOMID=MODEPL
  1401. NOMID=MOFORC
  1402. C
  1403. IF ((MFR.NE.61) .AND. (NBNNS*NCOMP .GT. NLIGRD)) THEN
  1404. C erreur dans les dimensions de DESCR
  1405. C le mode de calcul n'est pas correct
  1406. CALL ERREUR(717)
  1407. SEGSUP DESCR,MRIGID
  1408. C SEGDES MMODEL,MELEME
  1409. RETURN
  1410. ENDIF
  1411. C
  1412. IF(MFR.EQ.61)THEN
  1413. DO IE1=1,3
  1414. NOELEP(IE1)=1
  1415. NOELEP(IE1+3)=3
  1416. ENDDO
  1417. NOELEP(7)=2
  1418. NOELEP(8)=2
  1419. C
  1420. DO IE1=1,LRE
  1421. NOELED(IE1)=NOELEP(IE1)
  1422. ENDDO
  1423. C
  1424. NOMID=MODEPL
  1425. DO IE1=1,3
  1426. LISINC(IE1)=LESOBL(IE1)
  1427. LISINC(IE1+3)=LESOBL(IE1)
  1428. ENDDO
  1429. LISINC(7)=LESOBL(4)
  1430. LISINC(8)=LESOBL(5)
  1431. C
  1432. NOMID=MOFORC
  1433. DO IE1=1,3
  1434. LISDUA(IE1)=LESOBL(IE1)
  1435. LISDUA(IE1+3)=LESOBL(IE1)
  1436. ENDDO
  1437. LISDUA(7)=LESOBL(4)
  1438. LISDUA(8)=LESOBL(5)
  1439. ELSE
  1440. C
  1441. NFAC=(3*NBNN-IPORE)/2
  1442. DO 1004 INOEUD=1,NBNNS
  1443. IF ((MELE.GE.108.AND.MELE.LE.110.AND.INOEUD.GT.NFAC)
  1444. & .OR.(MELE.GE.185.AND.MELE.LE.187.AND.INOEUD.GT.NFAC)
  1445. & .OR.(MELE.GE.188.AND.MELE.LE.190.AND.INOEUD.GT.NFAC))
  1446. & GO TO 1004
  1447. DO 1005 ICOMP=1,NCOMP
  1448. NOMID=MODEPL
  1449. LISINC(IDDL)=LESOBL(ICOMP)
  1450. if (dcmat2) LISINC(IDDL)=LESOBL(IDDL)
  1451. NOMID=MOFORC
  1452. LISDUA(IDDL)=LESOBL(ICOMP)
  1453. if (dcmat2) LISDUA(IDDL)=LESOBL(IDDL)
  1454. NOELEP(IDDL)=INOEUD
  1455. NOELED(IDDL)=INOEUD
  1456. IDDL=IDDL+1
  1457. 1005 CONTINUE
  1458. 1004 CONTINUE
  1459. C
  1460. ENDIF
  1461. C
  1462. C CAS DE LA DEFORMATION PLANE GENERALISEE
  1463. C
  1464. IF (LDPGE) THEN
  1465. DO 1006 ICOMP=(NDPGE-1),0,-1
  1466. NOMID=MODEPL
  1467. LISINC(IDDL)=LESOBL(NDEPL-ICOMP)
  1468. NOMID=MOFORC
  1469. LISDUA(IDDL)=LESOBL(NFORC-ICOMP)
  1470. NOELEP(IDDL)=NBNN
  1471. NOELED(IDDL)=NBNN
  1472. IDDL=IDDL+1
  1473. 1006 CONTINUE
  1474. ENDIF
  1475. C
  1476. C CAS DES MILIEUX POREUX
  1477. C POUR LA PRESSION ON MET D'ABORD LES SOMMETS
  1478. C
  1479. IF (MFR.EQ.33) THEN
  1480. DO 1104 INOEUD=1,NBSOM(IELE)
  1481. NOMID=MODEPL
  1482. LISINC(IDDL)=LESOBL(NDEPL)
  1483. NOMID=MOFORC
  1484. LISDUA(IDDL)=LESOBL(NDEPL)
  1485. NOELEP(IDDL)=IBSOM(NSPOS(IELE)+INOEUD-1)
  1486. NOELED(IDDL)=IBSOM(NSPOS(IELE)+INOEUD-1)
  1487. IDDL=IDDL+1
  1488. 1104 CONTINUE
  1489. C
  1490. IF (MELE.GE.79.AND.MELE.LE.83) THEN
  1491. C
  1492. DO 1105 INOEUD=1,NBNN
  1493. DO 1115 INSOM=1,NBSOM(IELE)
  1494. IF(INOEUD.EQ.IBSOM(NSPOS(IELE)+INSOM-1)) GO TO 1105
  1495. 1115 CONTINUE
  1496. NOMID=MODEPL
  1497. LISINC(IDDL)=LESOBL(NDEPL)
  1498. NOMID=MOFORC
  1499. LISDUA(IDDL)=LESOBL(NDEPL)
  1500. NOELEP(IDDL)=INOEUD
  1501. NOELED(IDDL)=INOEUD
  1502. IDDL=IDDL+1
  1503. 1105 CONTINUE
  1504. C
  1505. ELSE IF (MELE.GE.108.AND.MELE.LE.110) THEN
  1506. C
  1507. DO 1109 INOEUD=NFAC+1,NBNN
  1508. NOMID=MODEPL
  1509. LISINC(IDDL)=LESOBL(NDEPL)
  1510. NOMID=MOFORC
  1511. LISDUA(IDDL)=LESOBL(NDEPL)
  1512. NOELEP(IDDL)=INOEUD
  1513. NOELED(IDDL)=INOEUD
  1514. IDDL=IDDL+1
  1515. 1109 CONTINUE
  1516. C
  1517. DO 1110 INOEUD=1,NFAC
  1518. DO 1111 INSOM=1,NBSOM(IELE)
  1519. IF(INOEUD.EQ.IBSOM(NSPOS(IELE)+INSOM-1)) GO TO 1110
  1520. 1111 CONTINUE
  1521. NOMID=MODEPL
  1522. LISINC(IDDL)=LESOBL(NDEPL)
  1523. NOMID=MOFORC
  1524. LISDUA(IDDL)=LESOBL(NDEPL)
  1525. NOELEP(IDDL)=INOEUD
  1526. NOELED(IDDL)=INOEUD
  1527. IDDL=IDDL+1
  1528. 1110 CONTINUE
  1529. C
  1530. ENDIF
  1531. C
  1532. ELSE IF(MFR.EQ.57.OR.MFR.EQ.59) THEN
  1533. C
  1534. DO 1304 IPR=1,IDECAP
  1535. NDECAP = NDEPL-IDECAP+IPR
  1536. C
  1537. DO 1204 INOEUD=1,NBSOM(IELE)
  1538. NOMID=MODEPL
  1539. LISINC(IDDL)=LESOBL(NDECAP)
  1540. NOMID=MOFORC
  1541. LISDUA(IDDL)=LESOBL(NDECAP)
  1542. NOELEP(IDDL)=IBSOM(NSPOS(IELE)+INOEUD-1)
  1543. NOELED(IDDL)=IBSOM(NSPOS(IELE)+INOEUD-1)
  1544. IDDL=IDDL+1
  1545. 1204 CONTINUE
  1546. C
  1547. IF (MELE.GE.173.AND.MELE.LE.182) THEN
  1548. C
  1549. DO 1205 INOEUD=1,NBNN
  1550. DO 1215 INSOM=1,NBSOM(IELE)
  1551. IF(INOEUD.EQ.IBSOM(NSPOS(IELE)+INSOM-1)) GO TO 1205
  1552. 1215 CONTINUE
  1553. NOMID=MODEPL
  1554. LISINC(IDDL)=LESOBL(NDECAP)
  1555. NOMID=MOFORC
  1556. LISDUA(IDDL)=LESOBL(NDECAP)
  1557. NOELEP(IDDL)=INOEUD
  1558. NOELED(IDDL)=INOEUD
  1559. IDDL=IDDL+1
  1560. 1205 CONTINUE
  1561. C
  1562. ELSE IF (MELE.GE.185.AND.MELE.LE.190) THEN
  1563. C
  1564. DO 1709 INOEUD=NFAC+1,NBNN
  1565. NOMID=MODEPL
  1566. LISINC(IDDL)=LESOBL(NDECAP)
  1567. NOMID=MOFORC
  1568. LISDUA(IDDL)=LESOBL(NDECAP)
  1569. NOELEP(IDDL)=INOEUD
  1570. NOELED(IDDL)=INOEUD
  1571. IDDL=IDDL+1
  1572. 1709 CONTINUE
  1573. C
  1574. DO 1710 INOEUD=1,NFAC
  1575. DO 1711 INSOM=1,NBSOM(IELE)
  1576. IF(INOEUD.EQ.IBSOM(NSPOS(IELE)+INSOM-1)) GO TO 1710
  1577. 1711 CONTINUE
  1578. NOMID=MODEPL
  1579. LISINC(IDDL)=LESOBL(NDECAP)
  1580. NOMID=MOFORC
  1581. LISDUA(IDDL)=LESOBL(NDECAP)
  1582. NOELEP(IDDL)=INOEUD
  1583. NOELED(IDDL)=INOEUD
  1584. IDDL=IDDL+1
  1585. 1710 CONTINUE
  1586. C
  1587. ENDIF
  1588. 1304 CONTINUE
  1589. ENDIF
  1590. C
  1591. C CAS DES ELEMENT RACCORD
  1592. C
  1593. IF (MFR.EQ.19.OR.MFR.EQ.21) THEN
  1594. CALL IDPRIM(IMODEL,MFR+1000,MODPL,NDEPL,NDUM)
  1595. CALL IDDUAL(IMODEL,MFR+1000,MOFRC,NFORC,NDUM)
  1596. NOMID=MODPL
  1597. NOMID=MOFRC
  1598. DO 1106 INOEUD=NBNNS+1,NBNN
  1599. DO 1107 ICOMP=1,NDEPL
  1600. NOMID=MODPL
  1601. LISINC(IDDL)=LESOBL(ICOMP)
  1602. NOMID=MOFRC
  1603. LISDUA(IDDL)=LESOBL(ICOMP)
  1604. NOELEP(IDDL)=INOEUD
  1605. NOELED(IDDL)=INOEUD
  1606. IDDL=IDDL+1
  1607. 1107 CONTINUE
  1608. 1106 CONTINUE
  1609. NOMID=MODPL
  1610. SEGsup NOMID
  1611. NOMID=MOFRC
  1612. SEGsup NOMID
  1613. ENDIF
  1614. C
  1615. NOMID=MODEPL
  1616. if(lsupdp)SEGsup NOMID
  1617. NOMID=MOFORC
  1618. if(lsupfo)SEGsup NOMID
  1619. SEGDES DESCR
  1620.  
  1621. 2999 if (cmate.eq.'NLIN') then
  1622. RI3 = iprins
  1623. segact ri3
  1624. if (ri3.coerig(/1).ne.nrnlin) then
  1625. c write(6,*) 'ri3',ri3.coerig(/1),nrnlin
  1626. call erreur(5)
  1627. return
  1628. endif
  1629. isou = isou - 1
  1630. do kige = 1,nrnlin
  1631. ipdesc = ri3.IRIGEL(3,kige)
  1632. ipmatr = ri3.IRIGEL(4,kige)
  1633. isymm = ri3.irigel(7,kige)
  1634.  
  1635. isou = isou + 1
  1636. jrige = isou
  1637. COERIG(jrige) = ri3.coerig(kige)
  1638. IRIGEL(1,jrige) = ipmail
  1639. IRIGEL(2,jrige) = 0
  1640. IRIGEL(3,jrige) = ipdesc
  1641. IRIGEL(4,jrige) = ipmatr
  1642. IRIGEL(5,jrige) = NIFOUR
  1643. IRIGEL(6,jrige) = 0
  1644. IRIGEL(7,jrige) = ri3.irigel(7,kige)
  1645. IRIGEL(8,jrige) = 0
  1646. enddo
  1647. else
  1648. C
  1649. C INITIALISATION DU SEGMENT XMATRI
  1650. C
  1651. NELRIG = NBELEM
  1652. NLIGRP=LRE
  1653. NLIGRD=LRE
  1654. SEGINI XMATRI
  1655. IPMATR=XMATRI
  1656. IF (LDPGE) THEN
  1657. IRIGEL(1,ISOU)=IPMADG
  1658. ELSE
  1659. IRIGEL(1,ISOU)=meleme
  1660. ENDIF
  1661. IRIGEL(2,ISOU)=0
  1662. IRIGEL(3,ISOU)=IPDSCR
  1663. IRIGEL(4,ISOU)=IPMATR
  1664. IRIGEL(5,ISOU)=NIFOUR
  1665. IRIGEL(6,ISOU)=0
  1666. IRIGEL(7,ISOU)=0
  1667. xmatri.symre=0
  1668. IF(MFR.EQ.57.OR.MFR.EQ.59) THEN
  1669. IRIGEL(7,ISOU)=2
  1670. ENDIF
  1671. COERIG(ISOU)=1.D0
  1672. C SEGDES XMATRI
  1673. endif
  1674. C
  1675. C rendement anisotrope kich
  1676. if(ivacar.ne.0) then
  1677. mptval = ivacar
  1678. if(ival(/1).ge.ncar1+9) then
  1679. if (ival(ncar1+7).gt.0.or.ival(ncar1+8).gt.0.or.
  1680. & ival(ncar1+9).gt.0) then
  1681. irigel(7,isou)=2
  1682. xmatri.symre=2
  1683. endif
  1684. endif
  1685. endif
  1686. C
  1687. IF (LDPGE) THEN
  1688. C SEGDES MELEME
  1689. MELEME=IPMAIL
  1690. NBNN=NUM(/1)
  1691. ENDIF
  1692. C
  1693. descr= irigel(3,1)
  1694. if (dcmate) goto 29
  1695. C
  1696. C-----------------------------------------------------------------------
  1697. C P H A S E 3
  1698. C
  1699. C CALCUL DES RIGIDITES ELEMENTAIRES
  1700. C
  1701. C-----------------------------------------------------------------------
  1702. C
  1703. C NUMERO DES ETIQUETTES :
  1704. C Les elements sont groupes comme suit :
  1705. C - massif,liquide 'surface libre' poreux ----------------------> r
  1706. C - coq3,dkt,coq4,coq8,coq2,dst --------------------------------> r
  1707. C - poutre,tuyau,linespring,tuyau fissure,barre,homogeneise,jot3> r
  1708. C - joi4,joi2,poutre de timoschenko,joi3
  1709. C
  1710. IF(MELE.GE.1.AND.MELE.LE.100) THEN
  1711. C CABL SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8
  1712. GOTO ( 99, 99, 99, 4, 99, 4, 99, 4, 99, 4
  1713. C QUA9 RAC2 RAC3 CUB8 CU20 PRI6 PR15 LIA3 LIA4 LIA6
  1714. . , 99, 12, 99, 4, 4, 4, 4, 12, 12, 99
  1715. C LIA8 MULT TET4 TE10 PYR5 PY13 COQ3 DKT POUT LISP
  1716. . , 99, 99, 4, 4, 4, 4, 27, 27, 29, 29
  1717. C FAC3 FAC4 FAC6 FAC8 LTR3 LQU4 LCU8 LPR6 LTE4 LPY5
  1718. . , 99, 99, 99, 99, 4, 4, 4, 4, 4, 4
  1719. C COQ8 TUYA TUFI COQ2 POI1 BARR RACO LSU2 COQ4 LISM
  1720. . , 27, 29, 29, 27, 29, 29, 12, 4, 27, 29
  1721. C COF3 RES2 LSU3 LSU4 LICO COQ6 CVS2 CVS3 CVT3 CVT6
  1722. . , 99, 99, 4, 4, 12, 27, 99, 99, 99, 99
  1723. C CVQ4 CVQ8 THP5 TH13 THP6 TH15 THC8 TH20 ICT3 ICQ4
  1724. . , 99, 99, 99, 99, 99, 99, 99, 99, 4, 4
  1725. C ICT6 ICQ8 ICC8 ICT4 ICP6 IC20 IC10 IC15 TRIP QUAP
  1726. . , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
  1727. C CUBP TETP PRIP TIMO JOI2 JOI3 JOT3 JOI4 JOI6 JOI8
  1728. . , 4, 4, 4, 29, 29, 29, 29, 29, 99, 99
  1729. C LISC TRIH DST LIC4 CERC TUYO LSE2 LITU HYT3 HYQ4
  1730. . , 99, 29, 27, 12, 29, 29, 29, 29, 99, 99)
  1731. c cccccc
  1732. . ,MELE
  1733. ELSEIF(MELE.GE.101.AND.MELE.LE.200) THEN
  1734. C HYT4 HYP6 HYC8 TRIS QUAS POIS FOR3 JOP3 JOP6 JOP8
  1735. GOTO ( 99, 99, 99, 99, 99, 99, 99, 4, 4, 4
  1736. C POL3 POL4 POL5 POL6 POL7 POL8 POL9 PO10 PO11 PO12
  1737. . , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
  1738. C PO13 PO14 BAR3 BAEX LIA2 QUAH CUBH ROT3 SEF2 TRF3
  1739. . , 4, 4, 29, 29, 29, 29, 29, 99, 99, 99
  1740. C QUF4 CUF8 PRF6 TEF4 PYF5 MSE3 MTR6 MQU9 MC27 MP18
  1741. . , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99
  1742. C MT10 MP14 SEF3 TRF7 QUF9 CF27 PF21 TF15 PF19 SEG6
  1743. . , 99, 99, 99, 505, 505, 99, 99, 99, 99, 99
  1744. C TR21 QU36 C216 P126 TE56 PY91 TRH6 BSE2 BTR4 BQU5
  1745. . , 99, 99, 99, 99, 99, 99, 29, 51, 51, 51
  1746. C BCU9 BPR7 BTE5 BPY6 FRO4 SEGS POJS JCT3 JCI4 JGI2
  1747. . , 51, 51, 51, 51, 51, 51, 51, 29, 29, 29
  1748. C JGT3 JGI4 TRIQ QUAQ CUBQ TETQ PRIQ TRIR QUAR CUBR
  1749. . , 29, 29, 4, 4, 4, 4, 4, 4, 4, 4
  1750. C TETR PRIR Q4RI Q8RI JOQ3 JOQ6 JOQ8 JOR3 JOR6 JOR8
  1751. . , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
  1752. C T1D2 T1D3 M1D2 M1D3 LC03 LC07 LC09 LC27 LC21 LC15
  1753. . , 51, 51, 4, 4, 51, 51, 51, 51, 51, 51)
  1754. c cccccc
  1755. . ,MELE-100
  1756. ELSEIF(MELE.GE.201.AND.MELE.LE.300) THEN
  1757. C LC19 LS03 LS07 LS09 LS27 LS21 LS15 LS19 BS03 BS07
  1758. GOTO ( 51, 51, 51, 51, 51, 51, 51, 51, 51, 51
  1759. C BS09 BS27 BS21 BS15 BS19 MC03 MC07 MC09 MC27 MC21
  1760. . , 51, 51, 51, 51, 51, 51, 51, 51, 51, 51
  1761. C MC15 MC19 M103 M107 M109 M127 M121 M115 M119 MS03
  1762. . , 51, 51, 51, 51, 51, 51, 51, 51, 51, 51
  1763. C MS07 MS09 MS27 MS21 MS15 MS19 QC03 QC07 QC09 QC27
  1764. . , 51, 51, 51, 51, 51, 51, 51, 51, 51, 51
  1765. C QC21 QC15 QC19 Q103 Q107 Q109 Q127 Q121 Q115 Q119
  1766. . , 51, 51, 51, 51, 51, 51, 51, 51, 51, 51
  1767. C QS03 QS07 QS09 QS27 QS21 QS15 QS19 CIFL SURE SHB8
  1768. . , 51, 51, 51, 51, 51, 51, 51, 29, 51, 29
  1769. C CAF2 CAF3 XQ4R XC8R JOI1 ZCO2 ZCO3 ZCO4 TUY2 TUY3
  1770. . , 51, 51, 63, 63, 29, 29, 29, 29, 51, 51
  1771. C COS2 COA2 CU27 PR21 TE15 PY19 C20R P15R
  1772. . , 29, 29, 4, 4, 4, 4, 4, 4, 4, 4)
  1773. c cccccc
  1774. . ,MELE-200
  1775. ENDIF
  1776. C cccccc
  1777. C
  1778. 51 CONTINUE
  1779. 99 CONTINUE
  1780. MOTERR(1:4)=NOMTP(MELE)
  1781. MOTERR(9:12)='RIGI1'
  1782. CALL ERREUR(86)
  1783. GOTO 9990
  1784. C_______________________________________________________________________
  1785. C
  1786. C massif, liquide, 'surface libre', poreux
  1787. C_______________________________________________________________________
  1788. C
  1789. 4 CONTINUE
  1790.  
  1791. IF (MFR .EQ. 71) THEN
  1792. CALL RIGELE (MATE,MELE,NBPGAU,NSTRS,LRE,IPMAIL,IPMINT,IVAMAT,
  1793. & NMATT, IPMATR)
  1794. ELSE IF (MFR .EQ. 73) THEN
  1795. CALL RIGDIF (MATE,MELE,NBPGAU,NSTRS,LRE,IPMAIL,IPMINT,IVAMAT,
  1796. & NMATT, IPMATR)
  1797. ELSE
  1798. CALL RIGI2 (MATE,MELE,IPMAIL,IPMINT,NBPGAU,LRE,NSTRS,IVAMAT,
  1799. & IVACAR,CMATE,MFR,NBGMAT,NELMAT,IMAT,LHOOK,NMATT,
  1800. & IPORE,NDDL,IPMATR,IIPDPG,ncar1,MELPHA,noer)
  1801. ENDIF
  1802. GOTO 9990
  1803. C_______________________________________________________________________
  1804. C
  1805. C ELTS DE RACCORD LIQUIDE SOLIDE RAC2 RACO LIA3 LIA4 LICO LIC4
  1806. C PAS DE RIGIDITE
  1807. C_______________________________________________________________________
  1808. C
  1809. 12 CONTINUE
  1810. C
  1811. C DO 3012 IB=1,NBELEM
  1812. C SEGINI XMATRI
  1813. C IMATTT(IB)=XMATRI
  1814. C SEGDES XMATRI
  1815. C 3012 CONTINUE
  1816. C SEGDES XMATRI
  1817. GOTO 9990
  1818. C_______________________________________________________________________
  1819. C
  1820. C coq2,coq3,coq4,coq6,coq8,dst,dkt
  1821. C_______________________________________________________________________
  1822. C
  1823. 27 CONTINUE
  1824. CALL RIGI3(MATE,MELE,IPMAIL,IPMINT,IPMIN1,NBPGAU,LRE,NSTRS,
  1825. & IVAMAT,IVACAR,CMATE,MFR,NBGMAT,NELMAT,IMAT,LHOOK,
  1826. & NMATT,LW,NPINT,IPMATR,IIPDPG)
  1827. GOTO 9990
  1828. C_______________________________________________________________________
  1829. C
  1830. C poutre,tuyau,linespring,tuyau fissure,barre,homogeneise,joints 2-3D
  1831. C poutre de Timoschenko,point,joi1,zco2,zco3,zco4
  1832. C_______________________________________________________________________
  1833. C
  1834. 29 CONTINUE
  1835. CALL RIGI4(MATE,MELE,IPMAIL,IPMINT,NBPGAU,LRE,NSTRS,
  1836. & IVAMAT,IVACAR,IVECT,CMATE,MFR,NBGMAT,NELMAT,IMAT,
  1837. & LHOOK,NMATT,(NCAR1 - 1),ISOUS,LW,IPORE,IPMATR,IIPDPG)
  1838. GOTO 9990
  1839. C
  1840. C_______________________________________________________________________
  1841. C
  1842. C Elements de type XFEM (MFR=63)
  1843. C_______________________________________________________________________
  1844. C Le sous programme RIGIXR gere les appels aux elements de type XFEM
  1845. C (imoxfem est le modele complet ou partitionne si necessaire)
  1846. C as 2009/11/30 : ajout de IMAT,NBGMAT,NELMAT en entree de RIGIXR
  1847. C Attention : ISOU peut etre modifie suite a appel a RIGIXR, ainsi que
  1848. C la dimension de MRIGID en parallele !
  1849. C
  1850. 63 CONTINUE
  1851. CALL RIGIXR (ISOU ,IPOI6,imoxfem,IPINF,
  1852. $ IVAMAT,IVACAR,NMATT,CMATE,NCAR1,NBGMAT,NELMAT,IMAT,IRETER)
  1853. IF (IRETER.NE.0) RETURN
  1854. GO TO 9991
  1855.  
  1856. C=DEB==== FORMULATION HHO ==== Calcul des matrices de RIGIDITE =========
  1857. 89 CONTINUE
  1858. CALL HHORIG (imohho, IPOI6, ISOU,
  1859. $ MATE,IVAMAT,NMATR, IVACAR,NCAR1, iret)
  1860. IF (iret.NE.0) THEN
  1861. CALL ERREUR(iret)
  1862. RETURN
  1863. END IF
  1864. GOTO 9991
  1865. C=FIN==== FORMULATION HHO ==============================================
  1866. C
  1867. C-----------------------------------------------------------------------
  1868. C P H A S E 4
  1869. C
  1870. C DESACTIVATION DES SEGMENTS PROPRES A LA ZONE GEOMETRIQUE IA
  1871. C
  1872. C-----------------------------------------------------------------------
  1873. C
  1874. 9990 CONTINUE
  1875. if (noer.eq.195) return
  1876. if (ierr.ne.0) return
  1877. SEGDES XMATRI
  1878.  
  1879. 9991 CONTINUE
  1880. IF (IERR.NE.0) GOTO 518
  1881. 505 continue
  1882. C
  1883. 518 CONTINUE
  1884. IF(ISUP.EQ.1)THEN
  1885. C write(*,*) 'DTMVAL(IVACAR,3) ou IVACAR=',IVACAR
  1886. CALL DTMVAL(IVACAR,3)
  1887. ELSE
  1888. C write(*,*) 'DTMVAL(IVACAR,1) ou IVACAR=',IVACAR
  1889. CALL DTMVAL(IVACAR,1)
  1890. ENDIF
  1891. C
  1892. if (cmate.eq.'MODAL'.or.cmate.eq.'STATIQUE') goto 519
  1893. IF(ISUP.EQ.1.AND.IMAT.NE.2)THEN
  1894. CALL DTMVAL(IVAMAT,3)
  1895. C write(*,*) 'DTMVAL(IVACAR,3) ou IVACAR=',IVACAR
  1896. ELSE
  1897. C write(*,*) 'DTMVAL(IVACAR,1) ou IVACAR=',IVACAR
  1898. CALL DTMVAL(IVAMAT,1)
  1899. ENDIF
  1900. 519 continue
  1901. C
  1902. IF (MOCARA.NE.0)THEN
  1903. NOMID=MOCARA
  1904. SEGSUP NOMID
  1905. ENDIF
  1906.  
  1907. C
  1908. IF(MOMATR.NE.0)THEN
  1909. NOMID=MOMATR
  1910. if(lsupma)SEGSUP NOMID
  1911. ENDIF
  1912. C
  1913. C DANS LE CAS D'ERREUR
  1914. C
  1915. IF(IERR.NE.0) THEN
  1916. IF(DESCR.NE.0)SEGSUP DESCR
  1917. IF(xMATRI.NE.0)SEGSUP xMATRI
  1918. GOTO 888
  1919. ENDIF
  1920.  
  1921. 500 CONTINUE
  1922. C write(*,*) 'isous', isous, 'ISOU', isou, 'irigel(/2)', irigel(/2)
  1923. if (isou.NE.irigel(/2)) then
  1924. nrigel=isou
  1925. segadj,MRIGID
  1926. endif
  1927.  
  1928. Ctermes croises 'STATIQUE'/'MODAL'
  1929. nstat = kstat
  1930. nmoda = kmoda
  1931. segadj modsta
  1932. if (kstat.ne.0) then
  1933. if (nstat.gt.0.and.nstat+nmoda.gt.0) call ricroi(modsta, ir2,2)
  1934. if (nstat.gt.0) then
  1935. do kstat=1,nstat
  1936. mptval = ivstat(kstat)
  1937. IF(ISUP.EQ.1)THEN
  1938. CALL DTMVAL(mptval,3)
  1939. ELSE
  1940. CALL DTMVAL(mptval,1)
  1941. ENDIF
  1942. enddo
  1943. endif
  1944. if (nmoda.gt.0) then
  1945. do kmoda=1,nmoda
  1946. mptval = ivmoda(kmoda)
  1947. IF(ISUP.EQ.1)THEN
  1948. CALL DTMVAL(mptval,3)
  1949. ELSE
  1950. CALL DTMVAL(mptval,1)
  1951. ENDIF
  1952. enddo
  1953. endif
  1954. endif
  1955. if (nstat.gt.0.and.nstat+nmoda.gt.1) then
  1956. ir1 = mrigid
  1957. call fusrig(ir1,ir2,ir3)
  1958. if (ierr.ne.0) goto 888
  1959. mrigid = ir3
  1960. ipoi6 = mrigid
  1961. endif
  1962.  
  1963. 888 CONTINUE
  1964. MRIGID = IPOI6
  1965. IF (IERR.NE.0) THEN
  1966. SEGSUP,MRIGID
  1967. IPOI6 = 0
  1968. IRET = 0
  1969. ELSE
  1970. SEGDES,MRIGID
  1971. IRET = 1
  1972. ENDIF
  1973. segsup modsta
  1974. segsup mmode1
  1975. if(mchel1.ne.0) then
  1976. mcham1 = mchel1.ichaml(1)
  1977. segsup mcham1
  1978. segsup mchel1
  1979. endif
  1980. 889 CONTINUE
  1981. SEGSUP,MMODEL
  1982.  
  1983. notype = MOTYR8
  1984. SEGSUP,notype
  1985.  
  1986. END
  1987.  
  1988.  
  1989.  

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