Télécharger ktanga.eso

Retour à la liste

Numérotation des lignes :

ktanga
  1. C KTANGA SOURCE SP204843 25/07/03 21:15:06 12308
  2.  
  3. SUBROUTINE KTANGA(IPMOD0,IPCHE1,IPCHE2,IPCHE3,XPREC,DTPS,IKTSYM,
  4. & IPRIGI)
  5.  
  6. *=======================================================================
  7. *= CALCUL DE LA MATRICE DE RIGIDITE TANGENTE =
  8. *=======================================================================
  9. *= Entrees : =
  10. *= --------- =
  11. *= IPMOD0 pointeur sur le mmodel =
  12. *= IPCHE1 pointeur sur le mchaml de contraintes =
  13. *= IPCHE2 pointeur sur le mchaml de variables internes =
  14. *= IPCHE3 pointeur sur le mchaml de caracteristiques =
  15. *= XPREC flottant precision =
  16. *= DTPS flottant pas de temps (modeles visco-plastiques) =
  17. *= IKTSYM =1 si matrice symetrique en sortie, =0 sinon =
  18. *=======================================================================
  19. *= Sortie : =
  20. *= -------- =
  21. *= IPRIGI pointeur sur matrice rigidite (=0 en cas d'erreur) =
  22. *=======================================================================
  23. *= Passage aux nouveaux chamelems par jm campenon le 05/91 =
  24. *= Mise a niveau FD/OF en 2009 =
  25. *=======================================================================
  26.  
  27. IMPLICIT INTEGER(I-N)
  28. IMPLICIT REAL*8(A-H,O-Z)
  29.  
  30. -INC PPARAM
  31. -INC CCOPTIO
  32. -INC CCHAMP
  33. -INC CCGEOME
  34.  
  35. -INC SMCHAML
  36. -INC SMCOORD
  37. -INC SMELEME
  38. -INC SMINTE
  39. -INC SMLREEL
  40. -INC SMMODEL
  41. -INC SMRIGID
  42.  
  43. INTEGER OOOVAL
  44.  
  45. -INC TMPTVAL
  46.  
  47. SEGMENT WRK1
  48. REAL*8 DDHOOK(NSTRS,NSTRS),DDHOMU(NSTRS,NSTRS),
  49. & REL(LRE,LRE),XE(3,NBBB)
  50. ENDSEGMENT
  51.  
  52. SEGMENT WRK2
  53. REAL*8 SHPWRK(6,NBNO),BGENE(NSTRS,LRE)
  54. ENDSEGMENT
  55.  
  56. SEGMENT WRK3
  57. REAL*8 WORK(LW)
  58. ENDSEGMENT
  59.  
  60. SEGMENT WRK4
  61. REAL*8 BPSS(3,3),XEL(3,NBBB)
  62. ENDSEGMENT
  63.  
  64. SEGMENT WRK5
  65. INTEGER NTRAC1,NTRAC2
  66. ENDSEGMENT
  67.  
  68. * POUR LES MATERIAUX a "TROPIE" (PASSAGE DE LA MATRICE DE ROTATION)
  69. SEGMENT WTRAV
  70. REAL*8 TXR(IDIM,IDIM)
  71. ENDSEGMENT
  72.  
  73. SEGMENT NOTYPE
  74. CHARACTER*16 TYPE(NBTYPE)
  75. ENDSEGMENT
  76.  
  77. C- Nombre de points maximal pour stocker une courbe de traction
  78. PARAMETER (LTRAC=2*75)
  79.  
  80. * INTTYP correspond au type de points d'integration utilise par KTAN
  81. PARAMETER ( INTTYP=3 )
  82.  
  83. DIMENSION TRAC(LTRAC)
  84. DIMENSION CRIGI(12),CMASS(12)
  85. DIMENSION A(4,60),BB(3,60),PP(4,4)
  86. * Petit tableau des "couleurs" des relations de conformite
  87. DIMENSION LCOLOR(6)
  88. DATA LCOLOR / 1, 3, 6, 10, 16, 24 /
  89.  
  90. CHARACTER*8 CMATE
  91. CHARACTER*(NCONCH) CONM
  92. PARAMETER ( NINF=3 )
  93. INTEGER INFOS(NINF)
  94. LOGICAL lsupma, BDPGE,BPLAN,BMATE
  95.  
  96. *======================================================================*
  97. *= 1 - INITIALISATIONS ET VERIFICATIONS =*
  98. *======================================================================*
  99. bmate =.FALSE.
  100. IPRIGI=0
  101. KERRE=0
  102.  
  103. * Modele "deroule" (uniquement "MECANIQUE", "LIQUIDE" ou "POREUX")
  104. CALL PIMODL(IPMOD0,IPMODL,MAILDG,0)
  105. IF (IPMODL.EQ.0) RETURN
  106. * Verification du support du mchaml de CONTRAINTES
  107. CALL REDUAF(IPCHE1,IPMOD0,IPCH_Z,0,IRET,KERRE)
  108. IF (IRET.NE.1) CALL ERREUR(KERRE)
  109. IF (IERR.NE.0) GOTO 550
  110. IPCHE1=IPCH_Z
  111. CALL QUESUP(IPMODL,IPCHE1,INTTYP,0,ISUPCO,IRET)
  112. IF (ISUPCO.GT.1) GOTO 550
  113. * Verification du support du mchaml de VARIABLES INTERNES
  114. CALL REDUAF(IPCHE2,IPMOD0,IPCH_Z,0,IRET,KERRE)
  115. IF (IRET.NE.1) CALL ERREUR(KERRE)
  116. IF (IERR.NE.0) GOTO 550
  117. IPCHE2=IPCH_Z
  118. CALL QUESUP(IPMODL,IPCHE2,INTTYP,0,ISUPVA,IRET)
  119. IF (ISUPVA.GT.1) GOTO 550
  120. * Verification du support du mchaml de CARACTERISTIQUES
  121. CALL REDUAF(IPCHE3,IPMOD0,IPCH_Z,0,IRET,KERRE)
  122. IF (IRET.NE.1) CALL ERREUR(KERRE)
  123. IF (IERR.NE.0) GOTO 550
  124. IPCHE3=IPCH_Z
  125. CALL QUESUP(IPMODL,IPCHE3,INTTYP,0,ISUPMA,IRET)
  126. IF (ISUPMA.GT.1) GOTO 550
  127.  
  128. * Activation du modele
  129. MMODEL=IPMODL
  130. NSOUS=KMODEL(/1)
  131.  
  132. * Initialisations de l'objet RIGIDITE "matrice tangente"
  133. NRIGEL=NSOUS
  134. SEGINI,MRIGID
  135. IPRIGI=MRIGID
  136. MTYMAT='RIGIDITE'
  137. ICHOLE=0
  138. IFORIG=IFOUR
  139. IMGEO1=0
  140. IMGEO2=0
  141. ISUPEQ=0
  142.  
  143. NHRM=NIFOUR
  144. melpha = 0
  145. * Indicateur de mode de calcul en 2D plan
  146. BPLAN = IFOUR.EQ.-2 .OR. IFOUR.EQ.-1 .OR. IFOUR.EQ.-3
  147.  
  148. * Type des composantes
  149. NBTYPE=1
  150. SEGINI,NOTYPE
  151. TYPE(1)='REAL*8'
  152. MOTYR8=NOTYPE
  153.  
  154. *======================================================================*
  155. *= 2 - BOUCLE SUR LES SOUS-ZONES DU MODELE (Fin = etiquette 500) =*
  156. *======================================================================*
  157. ISOU = 0
  158.  
  159. DO 500 ISOUS=1,NSOUS
  160.  
  161. IMODEL=KMODEL(ISOUS)
  162. IPMOD1=IMODEL
  163. *-----------------------------------------------------------------------
  164. *- 2.1 - Intialisations et activations de segments
  165. *-----------------------------------------------------------------------
  166. MELE = imodel.NEFMOD
  167. IPMAIL = imodel.IMAMOD
  168. IIPDPG = imodel.IPDPGE
  169. IIPDPG = IPTPOI(IIPDPG)
  170.  
  171. IPINF = 0
  172. * Cas particulier des relations de conformites
  173. IF (MELE.EQ.22) GOTO 5001
  174. IF (MELE.EQ.259) GOTO 5001
  175. * Verifications sur la formulation
  176. CONM = CONMOD
  177. CMATE = CMATEE
  178. MATE = IMATEE
  179. MAPL = INATUU
  180. BMATE = (CMATE.EQ.'UNIDIREC').OR.(CMATE.EQ.'ORTHOTRO').OR.
  181. & (CMATE.EQ.'ANISOTRO')
  182. * Information sur l'element fini
  183. IF (INFMOD(/1).LT.2+INTTYP) THEN
  184. write(ioimp,*) 'KTANGA - INFMOD(/1) =',infmod(/1),'<',2+inttyp
  185. call erreur(5)
  186. ENDIF
  187. NBGS =INFELE(4)
  188. C* ICARA=INFELE(5)
  189. NBPGAU=INFELE(6)
  190. LW =INFELE(7)
  191. IPORE=INFELE(8)
  192. LRE =INFELE(9)
  193. LHOOK=INFELE(10)
  194. MFR =INFELE(13)
  195. IELE =INFELE(14)
  196. NDDL =INFELE(15)
  197. C* NSTRS=INFELE(16)
  198. IPMINT=INFMOD(2+INTTYP)
  199. IPMIN1=INFELE(12)
  200. c* IPMIN1=INFMOD(8) pas toujours defini
  201. MINTE=IPMINT
  202.  
  203. IF (MFR.EQ.57.OR.MFR.EQ.59) THEN
  204. IPPORE = NBNNE(NUMGEO(MELE))
  205. IF (IFOUR.EQ.1.OR.IFOUR.EQ.-3) THEN
  206. LHOOK=6
  207. ELSE
  208. LHOOK=4
  209. ENDIF
  210. ELSE IF (MFR.EQ.33) THEN
  211. IPPORE = NBNNE(NUMGEO(MELE))
  212. ELSE
  213. IPPORE = 0
  214. ENDIF
  215.  
  216. C Coque integree ou non ?
  217. NPINT = INFMOD(1)
  218.  
  219. CALL INFDPG(MFR,IFOUR, BDPGE,NDPGE)
  220. * Coordonnees du point support des deformations planes generalisees
  221. IF (BDPGE) THEN
  222. IF (IIPDPG.LE.0) THEN
  223. CALL ERREUR(925)
  224. CALL ERREUR(5)
  225. GOTO 551
  226. ENDIF
  227. IREF=(IIPDPG-1)*(IDIM+1)
  228. XDPGE=XCOOR(IREF+1)
  229. YDPGE=XCOOR(IREF+2)
  230. ELSE
  231. XDPGE = 0.D0
  232. YDPGE = 0.D0
  233. ENDIF
  234. *-----------------------------------------------------------------------
  235. *- 2.2 - Preparation des objets resultats DESCR et XMATRI
  236. *-----------------------------------------------------------------------
  237. * Si necessaire PARTITIONNEMENT du segment XMATRI
  238. 5001 CONTINUE
  239. LTRK=OOOVAL(1,4)
  240. IF (LTRK.EQ.0) LTRK=OOOVAL(1,1)
  241. LTRK=MAX(LTRK,2**24)
  242. IPT1=IPMAIL
  243. SEGACT,IPT1
  244. NBNN1 =IPT1.NUM(/1)
  245. NBELE1=IPT1.NUM(/2)
  246. IF (MELE.EQ.22) LRE=NBNN1
  247. IF (MELE.EQ.259) LRE=NBNN1
  248. * Traitements particuliers pour penalisation milieu poreux
  249. IDECAP = 0
  250. IF (MELE.GE.79.AND.MELE.LE.83) THEN
  251. IDECAP = 1
  252. LRE = LRE + 2*NBNN1 - IPORE
  253. ELSE IF (MELE.GE.108.AND.MELE.LE.110) THEN
  254. IDECAP=1
  255. LRE = LRE + (3*NBNN1 - IPORE)/2 - NBSOM(IELE)
  256. ELSE IF (MELE.GE.173.AND.MELE.LE.177) THEN
  257. IDECAP=2
  258. LRE = LRE + (2*NBNN1 - IPORE)*IDECAP
  259. ELSE IF (MELE.GE.178.AND.MELE.LE.182) THEN
  260. IDECAP=3
  261. LRE = LRE + (2*NBNN1 - IPORE)*IDECAP
  262. ENDIF
  263. * Ajout a la taille en mots de la matrice des infos du segment
  264. LSEG=LRE*LRE*NBELE1 + 16
  265. NBLPRT=(LSEG-1)/LTRK+1
  266. NBLMAX=(NBELE1-1)/NBLPRT+1
  267. NBLPRT=(NBELE1-1)/NBLMAX+1
  268. * write(ioimp,*) ' ktanga nblprt nblmax ',NBLPRT,NBLMAX,NBELE1
  269. MELEME=IPT1
  270. * Boucle (5000) de PARTITIONNEMENT du segment XMATRI
  271. DO 5000 IPRT = 1,NBLPRT
  272. ISOU=ISOU+1
  273. IF (ISOU.GT.IRIGEL(/2)) THEN
  274. NRIGEL=ISOU
  275. SEGADJ,MRIGID
  276. ENDIF
  277. IF (NBLPRT.GT.1) THEN
  278. JPRT=(IPRT-1)*NBLMAX
  279. SEGACT,IPT1
  280. NBSOUS=0
  281. NBREF=0
  282. NBNN=NBNN1
  283. NBELEM=MIN(NBLMAX,NBELE1-JPRT)
  284. * write(ioimp,*) ' creation segment ',nbnn,nbelem
  285. SEGINI,MELEME
  286. ITYPEL=IPT1.ITYPEL
  287. DO I=1,NBELEM
  288. IB=I+JPRT
  289. DO J=1,NBNN
  290. NUM(J,I)=IPT1.NUM(J,IB)
  291. ENDDO
  292. ICOLOR(I)=IPT1.ICOLOR(I)
  293. ENDDO
  294. ENDIF
  295. IPMAIL=MELEME
  296. * Fin du traitement particulier en cas de PARTITIONNEMENT du XMATRI
  297. * Quelques initialisations suite au partionnement
  298. IPDSCR = 0
  299. IPMADG = 0
  300. IPMATR = 0
  301. IRIGE7 = 0
  302.  
  303. NMATR = 0
  304. NMATF = 0
  305. IVAMAT = 0
  306. NCARA = 0
  307. NCARF = 0
  308. IVACAR = 0
  309. NVARI = 0
  310. NVARF = 0
  311. IVARI = 0
  312. IVACON = 0
  313. * Activation du MELEME support des rigidites
  314. MELEME=IPMAIL
  315. NBNN =NUM(/1)
  316. NBELEM=NUM(/2)
  317. * Cas particulier des relations de conformites
  318. IF (MELE.EQ.22) GOTO 22
  319. IF (MELE.EQ.259) GOTO 259
  320. * Modification du MELEME pour les deformations planes generalisees
  321. IF (BDPGE) THEN
  322. NBNA=NBNN
  323. NBNN=NBNA+1
  324. NBREF=0
  325. NBSOUS=0
  326. SEGINI,IPT2
  327. IPT2.ITYPEL=28
  328. DO I=1,NBELEM
  329. DO J=1,NBNA
  330. IPT2.NUM(J,I)=NUM(J,I)
  331. ENDDO
  332. IPT2.NUM(NBNN,I)=IIPDPG
  333. IPT2.ICOLOR(I)=ICOLOR(I)
  334. ENDDO
  335. IPMAGD=IPT2
  336. ENDIF
  337. * Recherche des noms d'inconnues primales et duales
  338. NOMID=LNOMID(1)
  339. if (nomid.eq.0) then
  340. write(ioimp,*) 'KTANGA : MODEPL = lnomid(1) = 0'
  341. call erreur(5)
  342. return
  343. endif
  344. MODEPL = NOMID
  345. NDEPL = nomid.LESOBL(/2)
  346. c* nfac = nomid.LESFAC(/2)
  347.  
  348. NOMID=LNOMID(2)
  349. if (nomid.eq.0) then
  350. write(ioimp,*) 'KTANGA : MOFORC = lnomid(2) = 0'
  351. call erreur(5)
  352. return
  353. endif
  354. MOFORC = NOMID
  355. NFORC = nomid.LESOBL(/2)
  356. c* nfac = nomid.LESFAC(/2)
  357.  
  358. IF (NDEPL.EQ.0.OR.NFORC.EQ.0.OR.NDEPL.NE.NFORC) THEN
  359. call erreur(5)
  360. return
  361. ENDIF
  362.  
  363. * Initialisation du segment DESCR
  364. NLIGRP = LRE
  365. NLIGRD = LRE
  366. SEGINI,DESCR
  367. IPDSCR=DESCR
  368. * Remplissage du segment DESCRipteur
  369. NCOMP = NDEPL
  370. NBNNS = NBNN
  371. IF (MFR.EQ.33.OR.MFR.EQ.57.OR.MFR.EQ.59) THEN
  372. NCOMP = NDEPL-IDECAP
  373. ENDIF
  374. IF (BDPGE) THEN
  375. NCOMP = NDEPL-NDPGE
  376. NBNNS = NBNN-1
  377. ENDIF
  378. IF (MFR.EQ.19.OR.MFR.EQ.21) NBNNS=NBNN/2
  379. IDDL=1
  380. * Cas du macro-element
  381. IF (MFR.EQ.61)THEN
  382. DO i=1,3
  383. NOELEP(i )=1
  384. NOELEP(i+3)=3
  385. ENDDO
  386. NOELEP(7)=2
  387. NOELEP(8)=2
  388. DO i=1,LRE
  389. NOELED(i)=NOELEP(i)
  390. ENDDO
  391. NOMID=MODEPL
  392. DO i=1,3
  393. LISINC(i )=LESOBL(i)
  394. LISINC(i+3)=LESOBL(i)
  395. ENDDO
  396. LISINC(7)=LESOBL(4)
  397. LISINC(8)=LESOBL(5)
  398. NOMID=MOFORC
  399. DO i=1,3
  400. LISDUA(i )=LESOBL(i)
  401. LISDUA(i+3)=LESOBL(i)
  402. ENDDO
  403. LISDUA(7)=LESOBL(4)
  404. LISDUA(8)=LESOBL(5)
  405. * Cas general
  406. ELSE
  407. * Erreur dans les dimensions de DESCR (mode de calcul incorrect)
  408. IF (NBNNS*NCOMP.GT.NLIGRD) THEN
  409. KERRE=717
  410. GOTO 515
  411. ENDIF
  412. NDUM=NBNNS
  413. IF (MELE.GE.108.AND.MELE.LE.110) THEN
  414. NFAC=(3*NBNN-IPORE)/2
  415. NDUM=MIN(NBNNS,NFAC)
  416. ENDIF
  417. DO INOEUD=1,NDUM
  418. DO ICOMP=1,NCOMP
  419. NOELEP(IDDL)=INOEUD
  420. NOELED(IDDL)=INOEUD
  421. NOMID=MODEPL
  422. LISINC(IDDL)=LESOBL(ICOMP)
  423. NOMID=MOFORC
  424. LISDUA(IDDL)=LESOBL(ICOMP)
  425. IDDL=IDDL+1
  426. ENDDO
  427. ENDDO
  428. ENDIF
  429. * Cas particulier des deformations planes generalisees
  430. IF (BDPGE) THEN
  431. DO ICOMP=(NDPGE-1),0,-1
  432. NOELEP(IDDL)=NBNN
  433. NOELED(IDDL)=NBNN
  434. NOMID=MODEPL
  435. LISINC(IDDL)=LESOBL(NDEPL-ICOMP)
  436. NOMID=MOFORC
  437. LISDUA(IDDL)=LESOBL(NFORC-ICOMP)
  438. IDDL=IDDL+1
  439. ENDDO
  440. ENDIF
  441. * Cas particulier des milieux poreux (pression aux sommets en 1er)
  442. IF (MFR.EQ.33) THEN
  443. DO INOEUD=1,NBSOM(IELE)
  444. NOELEP(IDDL)=IBSOM(NSPOS(IELE)+INOEUD-1)
  445. NOELED(IDDL)=NOELEP(IDDL)
  446. NOMID=MODEPL
  447. LISINC(IDDL)=LESOBL(NDEPL)
  448. NOMID=MOFORC
  449. LISDUA(IDDL)=LESOBL(NDEPL)
  450. IDDL=IDDL+1
  451. ENDDO
  452. IF (MELE.GE.79.AND.MELE.LE.83) THEN
  453. DO 1105 INOEUD=1,NBNN
  454. DO i=1,NBSOM(IELE)
  455. IF (INOEUD.EQ.IBSOM(NSPOS(IELE)+i-1)) GOTO 1105
  456. ENDDO
  457. NOELEP(IDDL)=INOEUD
  458. NOELED(IDDL)=INOEUD
  459. NOMID=MODEPL
  460. LISINC(IDDL)=LESOBL(NDEPL)
  461. NOMID=MOFORC
  462. LISDUA(IDDL)=LESOBL(NDEPL)
  463. IDDL=IDDL+1
  464. 1105 CONTINUE
  465. ELSE IF (MELE.GE.108.AND.MELE.LE.110) THEN
  466. DO INOEUD=NFAC+1,NBNN
  467. NOELEP(IDDL)=INOEUD
  468. NOELED(IDDL)=INOEUD
  469. NOMID=MODEPL
  470. LISINC(IDDL)=LESOBL(NDEPL)
  471. NOMID=MOFORC
  472. LISDUA(IDDL)=LESOBL(NDEPL)
  473. IDDL=IDDL+1
  474. ENDDO
  475. DO 1110 INOEUD=1,NFAC
  476. DO i=1,NBSOM(IELE)
  477. IF(INOEUD.EQ.IBSOM(NSPOS(IELE)+i-1)) GOTO 1110
  478. ENDDO
  479. NOELEP(IDDL)=INOEUD
  480. NOELED(IDDL)=INOEUD
  481. NOMID=MODEPL
  482. LISINC(IDDL)=LESOBL(NDEPL)
  483. NOMID=MOFORC
  484. LISDUA(IDDL)=LESOBL(NDEPL)
  485. IDDL=IDDL+1
  486. 1110 CONTINUE
  487. ENDIF
  488. ELSE IF (MFR.EQ.57.OR.MFR.EQ.59) THEN
  489. IF (MELE.GE.173.AND.MELE.LE.182) THEN
  490. DO IPR=1,IDECAP
  491. NDECAP = NDEPL-IDECAP+IPR
  492. DO INOEUD=1,NBSOM(IELE)
  493. NOELEP(IDDL)=IBSOM(NSPOS(IELE)+INOEUD-1)
  494. NOELED(IDDL)=NOELEP(IDDL)
  495. NOMID=MODEPL
  496. LISINC(IDDL)=LESOBL(NDECAP)
  497. NOMID=MOFORC
  498. LISDUA(IDDL)=LESOBL(NDECAP)
  499. IDDL=IDDL+1
  500. ENDDO
  501. DO 1205 INOEUD=1,NBNN
  502. DO i=1,NBSOM(IELE)
  503. IF (INOEUD.EQ.IBSOM(NSPOS(IELE)+i-1)) GOTO 1205
  504. ENDDO
  505. NOELEP(IDDL)=INOEUD
  506. NOELED(IDDL)=INOEUD
  507. NOMID=MODEPL
  508. LISINC(IDDL)=LESOBL(NDECAP)
  509. NOMID=MOFORC
  510. LISDUA(IDDL)=LESOBL(NDECAP)
  511. IDDL=IDDL+1
  512. 1205 CONTINUE
  513. ENDDO
  514. ENDIF
  515. * Cas des elements raccord
  516. ELSE IF (MFR.EQ.19.OR.MFR.EQ.21) THEN
  517. CALL IDPRIM(IMODEL,MFR+1000,MODPL,NDEPL,ndum)
  518. NOMID=MODPL
  519. SEGACT,NOMID
  520. CALL IDDUAL(IMODEL,MFR+1000,MOFRC,NFORC,ndum)
  521. NOMID=MOFRC
  522. SEGACT,NOMID
  523. DO INOEUD=NBNNS+1,NBNN
  524. DO ICOMP=1,NDEPL
  525. NOELEP(IDDL)=INOEUD
  526. NOELED(IDDL)=INOEUD
  527. NOMID=MODPL
  528. LISINC(IDDL)=LESOBL(ICOMP)
  529. NOMID=MOFRC
  530. LISDUA(IDDL)=LESOBL(ICOMP)
  531. IDDL=IDDL+1
  532. ENDDO
  533. ENDDO
  534. NOMID=MODPL
  535. SEGSUP,NOMID
  536. NOMID=MOFRC
  537. SEGSUP,NOMID
  538. ENDIF
  539. * Initialisation du segment XMATRI contenant les matrices elementaires
  540. * de la sous-zone (NBELEM = nombre d'elements dans la sous-zone =MELEME)
  541. NELRIG=NBELEM
  542. SEGINI,XMATRI
  543. IPMATR=XMATRI
  544. * Quelques donnes utiles pour le segment MRIGID
  545. IF (BDPGE) THEN
  546. ** MELEME=IPMAIL <- MELEME segment actif et pointe tjs sur IPMAIL
  547. NBNN=NUM(/1)
  548. ELSE
  549. IPMAGD=IPMAIL
  550. ENDIF
  551. IF (MAPL.EQ.35.OR.MAPL.EQ.54.OR.MAPL.EQ.56.OR.MAPL.EQ.111) THEN
  552. IRIGE7=2
  553. ELSE IF (MFR.EQ.57.OR.MFR.EQ.59) THEN
  554. IRIGE7=2
  555. ELSE
  556. IRIGE7=0
  557. ENDIF
  558. * En cas de rendement IRIGE7=2 (cf. RIGI1.ESO)
  559. *-----------------------------------------------------------------------
  560. *- 2.3 - Analyse des champs par element fournis en entree
  561. *-----------------------------------------------------------------------
  562. * Creation du tableau infos (contraintes, variables internes)
  563. CALL IDENT(IPMAIL,CONM,IPCHE2,IPCHE1,INFOS,IRET)
  564. IF (IRET.EQ.0) THEN
  565. KERRE=-ABS(IERR)
  566. GOTO 515
  567. ENDIF
  568. * Recherche des noms de composantes du champ de CONTRAINTEs
  569. NOMID=LNOMID(4)
  570. if (nomid.eq.0) then
  571. write(ioimp,*) 'KTANGA : MOCONT = lnomid(4) = 0'
  572. call erreur(5)
  573. return
  574. endif
  575. MOCONT = NOMID
  576. NSTRS = nomid.LESOBL(/2)
  577. C* nfac = nomid.LESFAC(/2)
  578. * Verification de leur presence
  579. CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOCONT,MOTYR8,1,INFOS,3,IVACON)
  580. IF (IERR.NE.0) THEN
  581. KERRE=-ABS(IERR)
  582. GOTO 515
  583. ENDIF
  584. IF (ISUPCO.EQ.1) THEN
  585. CALL VALCHE(IVACON,NSTRS,IPMINT,IPPORE,MOCONT,MELE)
  586. IF (IERR.NE.0) THEN
  587. ISUPCO=0
  588. KERRE=-ABS(IERR)
  589. GOTO 515
  590. ENDIF
  591. ENDIF
  592. * Recherche des noms de composantes du champ des variables internes
  593. NOMID=LNOMID(10)
  594. if (nomid.eq.0) then
  595. write(ioimp,*) 'KTANGA : MOVARI = lnomid(10) = 0'
  596. KERRE=76
  597. MOTERR(1:4)='VARI'
  598. MOTERR(5:8)=NOMTP(MELE)
  599. GOTO 515
  600. endif
  601. MOVARI = NOMID
  602. NVARI = nomid.LESOBL(/2)
  603. NVARF = nomid.LESFAC(/2)
  604. NVART=NVARI+NVARF
  605. * Type des composantes
  606. notype = motyr8
  607. IF (CMATE.EQ.'SECTION') THEN
  608. NBTYPE=1
  609. SEGINI,NOTYPE
  610. TYPE(1)='POINTEURMCHAML '
  611. ENDIF
  612. MOTYPE=NOTYPE
  613. * Verification de leur presence
  614. CALL KOMCHA(IPCHE2,IPMAIL,CONM,MOVARI,MOTYPE,1,INFOS,3,IVARI)
  615. IF (MOTYPE.NE.MOTYR8) SEGSUP,NOTYPE
  616. IF (IERR.NE.0) THEN
  617. KERRE=-ABS(IERR)
  618. GOTO 515
  619. ENDIF
  620. IF (ISUPVA.EQ.1) THEN
  621. CALL VALCHE(IVARI,NVART,IPMINT,IPPORE,MOVARI,MELE)
  622. IF (IERR.NE.0) THEN
  623. ISUPVA=0
  624. KERRE=-ABS(IERR)
  625. GOTO 515
  626. ENDIF
  627. ENDIF
  628. * Creation du tableau infos (variables internes, caracteristiques)
  629. CALL IDENT(IPMAIL,CONM,IPCHE2,IPCHE3,INFOS,IRET)
  630. IF (IRET.EQ.0) THEN
  631. KERRE=-ABS(IERR)
  632. GOTO 515
  633. ENDIF
  634. * Recuperation des noms de composantes de caracteristiques materielles
  635. * Sauf cas particulier TYPE='REAL*8'
  636. NBROBL=0
  637. NBRFAC=0
  638. NOMID=0
  639. lsupma=.TRUE.
  640. NOTYPE=MOTYR8
  641. * Element de barre et Acier Unidirirectionnel
  642. IF (MAPL.EQ.40.AND.MFR.EQ.27) THEN
  643. NBROBL=1
  644. SEGINI,NOMID
  645. LESOBL(1)='YOUN'
  646. ELSE IF (MFR.EQ.7.AND.CMATE.EQ.'SECTION') THEN
  647. NBROBL=2
  648. NBRFAC=1
  649. SEGINI,NOMID
  650. LESOBL(1)='MODS'
  651. LESOBL(2)='MATS'
  652. LESFAC(1)='MAHO'
  653. NBTYPE=3
  654. SEGINI,NOTYPE
  655. TYPE(1)='POINTEURMMODEL '
  656. TYPE(2)='POINTEURMCHAML '
  657. TYPE(3)='POINTEURLISTREEL'
  658. * Cas POI1 -- MODAL -- MFR=26 ==> pas traite dans la suite
  659. ELSE IF (MFR.EQ.26) THEN
  660. NBROBL=3
  661. SEGINI,NOMID
  662. LESOBL(1)='FREQ'
  663. LESOBL(2)='MASS'
  664. LESOBL(3)='DEFO'
  665. NBTYPE=3
  666. SEGINI,NOTYPE
  667. TYPE(1)='REAL*8'
  668. TYPE(2)='REAL*8'
  669. TYPE(3)='POINTEURCHPOINT'
  670. * Cas POI1 -- STATIQUE -- MFR=28 ==> pas traite dans la suite
  671. ELSE IF (MFR.EQ.28) THEN
  672. NBROBL=3
  673. SEGINI,NOMID
  674. LESOBL(1)='DEFO'
  675. LESOBL(2)='RIDE'
  676. LESOBL(3)='MADE'
  677. NBTYPE=1
  678. SEGINI,NOTYPE
  679. TYPE(1)='POINTEURCHPOINT'
  680. * Cas Orthotrope, Anisotrope et Unidirectionnel
  681. ELSE IF (BMATE) THEN
  682. * Materiau Unidirirectionnel
  683. C*? IF (FORMOD(/1).EQ.'MECANIQUE'.AND.CMATE.EQ.'UNIDIREC') THEN
  684. IF (CMATE.EQ.'UNIDIREC') THEN
  685. IF (MFR.EQ.1.AND.IDIM.EQ.3) THEN
  686. NBROBL=7
  687. SEGINI,NOMID
  688. LESOBL(1)='YOUN'
  689. LESOBL(2)='V1X '
  690. LESOBL(3)='V1Y '
  691. LESOBL(4)='V1Z '
  692. LESOBL(5)='V2X '
  693. LESOBL(6)='V2Y '
  694. LESOBL(7)='V2Z '
  695. ELSE
  696. NBROBL=3
  697. SEGINI,NOMID
  698. LESOBL(1)='YOUN'
  699. LESOBL(2)='V1X '
  700. LESOBL(3)='V1Y '
  701. ENDIF
  702. * Materiau orthotrope plastique 'ECROUIS_DECOU'
  703. ELSE IF (CMATE.EQ.'ORTHOTRO'.AND.MAPL.EQ.67) THEN
  704. NBROBL=6
  705. SEGINI,NOMID
  706. LESOBL(1)='YG1 '
  707. LESOBL(2)='YG2 '
  708. LESOBL(3)='NU12'
  709. LESOBL(4)='G12 '
  710. LESOBL(5)='V1X '
  711. LESOBL(6)='V1Y '
  712. * Autres Materiaux orthotropes et anisotropes
  713. ELSE
  714. IF (LNOMID(6).NE.0) THEN
  715. lsupma=.FALSE.
  716. NOMID=LNOMID(6)
  717. NBROBL=LESOBL(/2)
  718. NBRFAC=LESFAC(/2)
  719. ELSE
  720. CALL IDMATR(MFR,IPMOD1,MOMATR,NBROBL,NBRFAC)
  721. ENDIF
  722. * Cas particulier : Mistral (10 composantes = listes de reels)
  723. IF (MAPL.EQ.94) THEN
  724. NBTYPE=NBROBL+NBRFAC
  725. SEGINI,NOTYPE
  726. DO i=1,NBTYPE
  727. TYPE(i)='REAL*8'
  728. ENDDO
  729. NLDEB=NBROBL-9
  730. DO i=NLDEB,NBROBL
  731. TYPE(i)='POINTEURLISTREEL'
  732. ENDDO
  733. ENDIF
  734. ENDIF
  735. * Materiaux ISOTROPEs
  736. ELSE IF (CMATE.EQ.'ISOTROPE') THEN
  737. IF (MFR.EQ.35) THEN
  738. IF (MAPL.EQ.35) THEN
  739. NBROBL=4
  740. SEGINI,NOMID
  741. LESOBL(1)='KS '
  742. LESOBL(2)='KN '
  743. LESOBL(3)='PHI '
  744. LESOBL(4)='MU '
  745. ELSE
  746. NBROBL=2
  747. SEGINI,NOMID
  748. LESOBL(1)='KS '
  749. LESOBL(2)='KN '
  750. ENDIF
  751. * Element joint cisaillement 2D
  752. ELSE IF (MFR.EQ.53) THEN
  753. NBROBL=1
  754. SEGINI,NOMID
  755. LESOBL(1)='KS '
  756. * Elements POREUX isotropes
  757. ELSE IF (FORMOD(1).EQ.'POREUX') THEN
  758. IF (MELE.GE.79.AND.MELE.LE.83) THEN
  759. NBROBL=4
  760. SEGINI,NOMID
  761. LESOBL(1)='YOUN'
  762. LESOBL(2)='NU '
  763. LESOBL(3)='COB '
  764. LESOBL(4)='MOB '
  765. ELSE IF (MELE.GE.108.AND.MELE.LE.110) THEN
  766. NBROBL=4
  767. SEGINI,NOMID
  768. LESOBL(1)='KS '
  769. LESOBL(2)='KN '
  770. LESOBL(3)='COB '
  771. LESOBL(4)='MOB '
  772. ELSE IF (MELE.GE.173.AND.MELE.LE.177) THEN
  773. NBROBL=10
  774. SEGINI,NOMID
  775. LESOBL(1)='YOUN'
  776. LESOBL(2)='NU '
  777. LESOBL(3)='COP1'
  778. LESOBL(4)='COP2'
  779. LESOBL(5)='CPP1'
  780. LESOBL(6)='CPP2'
  781. LESOBL(7)='KK11'
  782. LESOBL(8)='KK12'
  783. LESOBL(9)='KK21'
  784. LESOBL(10)='KK22'
  785. ELSE IF (MELE.GE.178.AND.MELE.LE.182) THEN
  786. NBROBL=17
  787. SEGINI,NOMID
  788. LESOBL(1)='YOUN'
  789. LESOBL(2)='NU '
  790. LESOBL(3)='COP1'
  791. LESOBL(4)='COP2'
  792. LESOBL(5)='COP3'
  793. LESOBL(6)='CPP1'
  794. LESOBL(7)='CPP2'
  795. LESOBL(8)='CPP3'
  796. LESOBL(9)='KK11'
  797. LESOBL(10)='KK12'
  798. LESOBL(11)='KK13'
  799. LESOBL(12)='KK21'
  800. LESOBL(13)='KK22'
  801. LESOBL(14)='KK23'
  802. LESOBL(15)='KK31'
  803. LESOBL(16)='KK32'
  804. LESOBL(17)='KK33'
  805. ENDIF
  806. ELSE IF (MAPL.EQ.1) THEN
  807. NBROBL=3
  808. SEGINI,NOMID
  809. LESOBL(1)='YOUN'
  810. LESOBL(2)='NU '
  811. LESOBL(3)='SIGY'
  812. ELSE IF (MAPL.EQ.2.OR.MAPL.EQ.14) THEN
  813. NBROBL=2
  814. NBRFAC=2
  815. SEGINI,NOMID
  816. LESOBL(1)='YOUN'
  817. LESOBL(2)='NU '
  818. LESFAC(1)='SIGF'
  819. LESFAC(2)='TRAC'
  820. NBTYPE=4
  821. SEGINI,NOTYPE
  822. TYPE(1)='REAL*8'
  823. TYPE(2)='REAL*8'
  824. TYPE(3)='REAL*8'
  825. TYPE(4)='POINTEUREVOLUTIO'
  826. ELSE IF (MAPL.EQ.3) THEN
  827. NBROBL=4
  828. SEGINI,NOMID
  829. LESOBL(1)='YOUN'
  830. LESOBL(2)='NU '
  831. LESOBL(3)='LTR '
  832. LESOBL(4)='LCS '
  833. ELSE IF (MAPL.EQ.4) THEN
  834. NBROBL=4
  835. SEGINI,NOMID
  836. LESOBL(1)='YOUN'
  837. LESOBL(2)='NU '
  838. LESOBL(3)='SIGY'
  839. LESOBL(4)='H '
  840. ELSE IF (MAPL.EQ.5) THEN
  841. NBROBL=3
  842. SEGINI,NOMID
  843. LESOBL(1)='YOUN'
  844. LESOBL(2)='NU '
  845. LESOBL(3)='TRAC'
  846. NBTYPE=3
  847. SEGINI,NOTYPE
  848. TYPE(1)='REAL*8'
  849. TYPE(2)='REAL*8'
  850. TYPE(3)='POINTEUREVOLUTIO'
  851. * Modele Drucker Prager
  852. ELSE IF (MAPL.EQ.15) THEN
  853. NBROBL=11
  854. SEGINI,NOMID
  855. LESOBL(1) ='YOUN'
  856. LESOBL(2) ='NU '
  857. LESOBL(3) ='ETA '
  858. LESOBL(4) ='MU '
  859. LESOBL(5) ='KL '
  860. LESOBL(6) ='GAMM'
  861. LESOBL(7) ='DELT'
  862. LESOBL(8) ='ALFA'
  863. LESOBL(9) ='BETA'
  864. LESOBL(10)='K '
  865. LESOBL(11)='H '
  866. * Modele visco-plastique parfait
  867. ELSE IF (MAPL.EQ.43) THEN
  868. NBROBL=5
  869. SEGINI,NOMID
  870. LESOBL(1)='YOUN'
  871. LESOBL(2)='NU '
  872. LESOBL(3)='SIGY'
  873. LESOBL(4)='N '
  874. LESOBL(5)='K '
  875. * Modele Betocyclique
  876. ELSE IF (MAPL.EQ.54) THEN
  877. NBROBL=13
  878. SEGINI,NOMID
  879. LESOBL(1)='YOUN'
  880. LESOBL(2)='NU '
  881. LESOBL(3)='HHH1'
  882. LESOBL(4)='FTPE'
  883. LESOBL(5)='FCPE'
  884. LESOBL(6)='FTGR'
  885. LESOBL(7)='FCGR'
  886. LESOBL(8)='EPSO'
  887. LESOBL(9)='WOR0'
  888. LESOBL(10)='LCAT'
  889. LESOBL(11)='LCAC'
  890. LESOBL(12)='TREV'
  891. LESOBL(13)='COEV'
  892. NBTYPE=13
  893. SEGINI,NOTYPE
  894. DO i=1,NBTYPE-2
  895. TYPE(i)='REAL*8'
  896. ENDDO
  897. TYPE(12)='POINTEUREVOLUTIO'
  898. TYPE(13)='POINTEUREVOLUTIO'
  899. * Rotating Crack
  900. ELSE IF (MAPL.EQ.55) THEN
  901. NBROBL=6
  902. SEGINI,NOMID
  903. LESOBL(1)='YOUN'
  904. LESOBL(2)='NU '
  905. LESOBL(3)='FTRA'
  906. LESOBL(4)='EPSR'
  907. LESOBL(5)='FRES'
  908. LESOBL(6)='BETA'
  909. * BCN-MRS-Lade (MAPL=111)
  910. ELSE IF (MAPL.EQ.111) THEN
  911. NBROBL=20
  912. SEGINI,NOMID
  913. LESOBL(1)='YOUN'
  914. LESOBL(2)='NU '
  915. LESOBL(3)='PC '
  916. LESOBL(4)='PA '
  917. LESOBL(5)='QA '
  918. LESOBL(6)='EXPM'
  919. LESOBL(7)='E '
  920. LESOBL(8)='K1 '
  921. LESOBL(9)='K2 '
  922. LESOBL(10)='ETAB'
  923. LESOBL(11)='EXPV'
  924. LESOBL(12)='EPSI'
  925. LESOBL(13)='N '
  926. LESOBL(14)='CCON'
  927. LESOBL(15)='EXPL'
  928. LESOBL(16)='PCAP'
  929. LESOBL(17)='EXPR'
  930. LESOBL(18)='CCAP'
  931. LESOBL(19)='PHI '
  932. LESOBL(20)='ALP '
  933. * BCN-J2 (MAPL=112)
  934. ELSE IF (MAPL.EQ.112) THEN
  935. NBROBL=6
  936. SEGINI,NOMID
  937. LESOBL(1)='YOUN'
  938. LESOBL(2)='NU '
  939. LESOBL(3)='SIG0'
  940. LESOBL(4)='SIGI'
  941. LESOBL(5)='KISO'
  942. LESOBL(6)='VELO'
  943. * BCN-Rounded Hyperbolic Mohr-Coulomb (MAPL=113)
  944. ELSE IF (MAPL.EQ.113) THEN
  945. NBROBL=4
  946. SEGINI,NOMID
  947. LESOBL(1)='YOUN'
  948. LESOBL(2)='NU '
  949. LESOBL(3)='COHE'
  950. LESOBL(4)='PHI '
  951. * Autres modeles ISOTROPEs : elasticite
  952. ELSE
  953. NBROBL=2
  954. SEGINI,NOMID
  955. LESOBL(1)='YOUN'
  956. LESOBL(2)='NU '
  957. ENDIF
  958. * Autres cas ?
  959. ELSE
  960. IF (LNOMID(6).NE.0) THEN
  961. lsupma=.FALSE.
  962. NOMID=LNOMID(6)
  963. NBROBL=LESOBL(/2)
  964. NBRFAC=LESFAC(/2)
  965. ELSE
  966. CALL IDMATR(MFR,IPMOD1,MOMATR,NBROBL,NBRFAC)
  967. ENDIF
  968. IF (CMATE.EQ.'SECTION') THEN
  969. NBTYPE=3
  970. SEGINI,NOTYPE
  971. TYPE(1)='POINTEURMMODEL'
  972. TYPE(2)='POINTEURMCHAML'
  973. TYPE(3)='POINTEURLISTREEL'
  974. ENDIF
  975. ENDIF
  976. MOMATR=NOMID
  977. MOTYPE=NOTYPE
  978. IF (MOMATR.EQ.0) THEN
  979. if (motype.NE.MOTYR8) SEGSUP,NOTYPE
  980. KERRE=591
  981. GOTO 515
  982. ENDIF
  983. CALL KOMCHA(IPCHE3,IPMAIL,CONM,MOMATR,MOTYPE,1,INFOS,3,IVAMAT)
  984. if (motype.NE.MOTYR8) SEGSUP,NOTYPE
  985. IF (lsupma) SEGSUP,NOMID
  986. IF (IERR.NE.0) THEN
  987. KERRE=-ABS(IERR)
  988. GOTO 515
  989. ENDIF
  990. NMATR=NBROBL
  991. NMATF=NBRFAC
  992. NMATT=NMATR+NMATF
  993. IF (ISUPMA.EQ.1) THEN
  994. CALL VALCHE(IVAMAT,NMATT,IPMINT,IPPORE,MOMATR,MELE)
  995. IF (IERR.NE.0) THEN
  996. ISUPMA=0
  997. KERRE=-ABS(IERR)
  998. GOTO 515
  999. ENDIF
  1000. ENDIF
  1001. * Recuperation des noms de composantes de caracteristiques geometriques
  1002. * Sauf cas particulier MOTYPE = segment NBTYPE=1 et TYPE(1)='REAL*8'
  1003. NOTYPE=MOTYR8
  1004. NBROBL=0
  1005. NBRFAC=0
  1006. NOMID=0
  1007. IVECT=0
  1008. * Massif ou certains elements poreux en contraintes planes
  1009. IF ( (MFR.EQ.1 .OR. MFR.EQ.31 .OR.
  1010. & (MELE.GE.79.AND.MELE.LE.83) .OR.
  1011. & (MELE.GE.173.AND.MELE.LE.182) )
  1012. & .AND. IFOUR.EQ.-2 ) THEN
  1013. NBRFAC=1
  1014. SEGINI,NOMID
  1015. LESFAC(1)='DIM3'
  1016. * Cas des coques
  1017. ELSE IF (MFR.EQ.3 .OR. MFR.EQ.5 .OR. MFR.EQ.9) THEN
  1018. NBROBL=1
  1019. IF (MFR.EQ.3.AND.IFOUR.EQ.-2) THEN
  1020. NBRFAC=3
  1021. ELSE
  1022. NBRFAC=2
  1023. ENDIF
  1024. SEGINI,NOMID
  1025. LESOBL(1)='EPAI'
  1026. LESFAC(1)='EXCE'
  1027. IF (MFR.EQ.3.AND.IFOUR.EQ.-2) LESFAC(2)='DIM3'
  1028. LESFAC(NBRFAC)='CALF'
  1029. * Donnees pour les poutres
  1030. ELSE IF (MFR.EQ.7) THEN
  1031. IF (CMATE.NE.'SECTION' ) THEN
  1032. IF (BPLAN) THEN
  1033. NBRFAC=1
  1034. NBROBL=2
  1035. SEGINI,NOMID
  1036. LESOBL(1)='SECT'
  1037. LESOBL(2)='INRZ'
  1038. LESFAC(1)='SECY'
  1039. ELSE
  1040. NBROBL=4
  1041. NBRFAC=5
  1042. SEGINI,NOMID
  1043. LESOBL(1)='TORS'
  1044. LESOBL(2)='INRY'
  1045. LESOBL(3)='INRZ'
  1046. LESOBL(4)='SECT'
  1047. LESFAC(1)='SECY'
  1048. LESFAC(2)='SECZ'
  1049. LESFAC(3)='VX'
  1050. LESFAC(4)='VY'
  1051. LESFAC(5)='VZ'
  1052. IVECT=1
  1053. ENDIF
  1054. ELSE
  1055. NBRFAC=3
  1056. SEGINI,NOMID
  1057. LESFAC(1)='VX'
  1058. LESFAC(2)='VY'
  1059. LESFAC(3)='VZ'
  1060. IVECT=1
  1061. ENDIF
  1062. C Donnees pour les TUYAUX
  1063. ELSE IF (MFR.EQ.13) THEN
  1064. NBROBL=2
  1065. NBRFAC=6
  1066. SEGINI,NOMID
  1067. LESOBL(1)='EPAI'
  1068. LESOBL(2)='RAYO'
  1069. LESFAC(1)='RACO'
  1070. LESFAC(2)='PRES'
  1071. LESFAC(3)='CISA'
  1072. LESFAC(4)='VX'
  1073. LESFAC(5)='VY'
  1074. LESFAC(6)='VZ'
  1075. IVECT=1
  1076. C Donnees pour le LINESPRING
  1077. ELSE IF (MFR.EQ.15) THEN
  1078. NBROBL=5
  1079. SEGINI,NOMID
  1080. LESOBL(1)='EPAI'
  1081. LESOBL(2)='FISS'
  1082. LESOBL(3)='VX '
  1083. LESOBL(4)='VY '
  1084. LESOBL(5)='VZ '
  1085. C Donnees pour le TUYAU FISSURE
  1086. ELSE IF (MFR.EQ.17) THEN
  1087. NBROBL=9
  1088. SEGINI,NOMID
  1089. LESOBL(1)='RAYO'
  1090. LESOBL(2)='EPAI'
  1091. LESOBL(3)='VX '
  1092. LESOBL(4)='VY '
  1093. LESOBL(5)='VZ '
  1094. LESOBL(6)='VXF '
  1095. LESOBL(7)='VYF '
  1096. LESOBL(8)='VZF '
  1097. LESOBL(9)='ANGL'
  1098. * Section pour les barres - uniaxial
  1099. ELSE IF (MFR.EQ.27 .AND. CMATE.NE.'NODAL') THEN
  1100. NBROBL=1
  1101. SEGINI,NOMID
  1102. LESOBL(1)='SECT'
  1103. * Elements homogeneises
  1104. ELSE IF (MFR.EQ.37) THEN
  1105. IF (IFOUR.EQ.1.OR.IFOUR.EQ.0.OR.IFOUR.EQ.2) THEN
  1106. NBROBL=5
  1107. SEGINI,NOMID
  1108. LESOBL(1)='SCEL'
  1109. LESOBL(2)='SFLU'
  1110. LESOBL(3)='EPS '
  1111. LESOBL(4)='SECT'
  1112. LESOBL(5)='INRZ '
  1113. ELSE
  1114. NBROBL=3
  1115. SEGINI,NOMID
  1116. LESOBL(1)='SCEL'
  1117. LESOBL(2)='SFLU'
  1118. LESOBL(3)='EPS '
  1119. ENDIF
  1120. * Element TUYO
  1121. ELSE IF (MFR.EQ.39) THEN
  1122. NBROBL=2
  1123. NBRFAC=5
  1124. SEGINI,NOMID
  1125. LESOBL(1)='EPAI'
  1126. LESOBL(2)='RAYO'
  1127. LESFAC(1)='RACO'
  1128. LESFAC(2)='PRES'
  1129. LESFAC(3)='VX'
  1130. LESFAC(4)='VY'
  1131. LESFAC(5)='VZ'
  1132. IVECT=1
  1133. * Element tuyau acoustique pure
  1134. ELSE IF (MFR.EQ.41) THEN
  1135. NBROBL=1
  1136. NBRFAC=1
  1137. SEGINI,NOMID
  1138. LESOBL(1)='RAYO'
  1139. LESFAC(1)='RACO'
  1140. * Donnees pour les barres excentrees
  1141. ELSE IF (MFR.EQ.49) THEN
  1142. NBROBL=6
  1143. SEGINI,NOMID
  1144. LESOBL(1)='SECT'
  1145. LESOBL(2)='EXCZ'
  1146. LESOBL(3)='EXCY'
  1147. LESOBL(4)='VX '
  1148. LESOBL(5)='VY '
  1149. LESOBL(6)='VZ '
  1150. * Donnees geometriques pour l'element LIA2 de liaison a 2 noeuds
  1151. ELSE IF (MFR.EQ.51) THEN
  1152. NBROBL=9
  1153. SEGINI,NOMID
  1154. LESOBL(1)='RLUX'
  1155. LESOBL(2)='RLUY'
  1156. LESOBL(3)='RLUZ'
  1157. LESOBL(4)='RLRX'
  1158. LESOBL(5)='RLRY'
  1159. LESOBL(6)='RLRZ'
  1160. LESOBL(7)='VX '
  1161. LESOBL(8)='VY '
  1162. LESOBL(9)='VZ '
  1163. * Elements de JOINTs GENE
  1164. ELSE IF (MFR.EQ.55) THEN
  1165. NBRFAC=1
  1166. SEGINI,NOMID
  1167. LESFAC(1)='EPAI'
  1168. * Macro element (element CIFL)
  1169. ELSE IF (MFR.EQ.61)THEN
  1170. NBROBL=2
  1171. SEGINI,NOMID
  1172. LESOBL(1)='SECT'
  1173. LESOBL(2)='INRZ'
  1174. ENDIF
  1175. * dans RIGI1.ESO : ajout de composantes facultatives pour le rendement
  1176. NCARA=NBROBL
  1177. NCARF=NBRFAC
  1178. NCART=NCARA+NCARF
  1179. MOCARA=NOMID
  1180. MOTYPE = NOTYPE
  1181. IF (MOCARA.NE.0) THEN
  1182. CALL KOMCHA(IPCHE3,IPMAIL,CONM,MOCARA,MOTYPE,1,INFOS,3,IVACAR)
  1183. SEGSUP,NOMID
  1184. IF (IERR.NE.0) THEN
  1185. KERRE=-ABS(IERR)
  1186. GOTO 515
  1187. ENDIF
  1188. IF (ISUPMA.EQ.1) THEN
  1189. CALL VALCHE(IVACAR,NCART,IPMINT,IPPORE,MOCARA,MELE)
  1190. IF (IERR.NE.0) THEN
  1191. ISUPMA=0
  1192. KERRE=-ABS(IERR)
  1193. GOTO 515
  1194. ENDIF
  1195. ENDIF
  1196. ENDIF
  1197. IF (MOTYPE.NE.MOTYR8) SEGSUP,NOTYPE
  1198.  
  1199. * dans RIGI1.ESO : 1) utilisation de la densite pour ponderer la prop
  1200. * de phase si besoin, 2) MFR = 63, elements XFEM traites par RIGIXR
  1201.  
  1202. *-----------------------------------------------------------------------
  1203. *- 2.4 - Calcul de la matrice tangente selon le type d'element
  1204. *-----------------------------------------------------------------------
  1205. * 20 elements par ligne du GOTO
  1206. GOTO (99,99,99, 4,99, 4,99, 4,99, 4,99,12,99, 4, 4, 4, 4,12,12,99,
  1207. 1 99,22, 4, 4, 4, 4,27,28,29,30,99,99,99,99,35,35,35,35,35,35,
  1208. 2 27,42,43,27,42,46,12,35,27,30,99,99,35,35,12,27,99,99,99,99,
  1209. 3 99,99,99,99,99,99,99,99, 4, 4, 4, 4, 4,99,99,99,99,99,35,35,
  1210. 4 35,35,35,84,85,86,42,42,99,99,99,42,27,12,46,42,42,42,99,99,
  1211. 5 99,99,99,99,99,99,99,35,35,35,35,35,35,35,35,35,35,35,35,35,
  1212. 6 35,35,42,42,42,42,42,99,99,99,99,99,99,99,99,99,99,99,99,99,
  1213. 7 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,
  1214. 8 99,99,99,99,99,99,99,42,42,42,42,42, 4, 4, 4, 4, 4, 4, 4, 4,
  1215. 9 4, 4, 4, 4,99,99,99,99,99,99,99,99, 4, 4,99,99,99,99,99,99)
  1216. & ,MELE
  1217. IF (MELE.EQ.258.OR.MELE.EQ.260) GOTO 42
  1218. * Erreur : Element fini non encore implemente
  1219. 99 CONTINUE
  1220. KERRE=86
  1221. MOTERR(1:4)=NOMTP(MELE)
  1222. MOTERR(5:12)='KTANGA '
  1223. GOTO 510
  1224. *-----------------------------------------------------------------------
  1225. *-> Elements MASSIFs
  1226. *-----------------------------------------------------------------------
  1227. 4 CONTINUE
  1228. NBNO=NBNN
  1229. NBBB=NBNN
  1230. SEGINI,WRK1,WRK2
  1231. IF (BMATE) THEN
  1232. SEGINI,WTRAV
  1233. NLG=NUMGEO(MELE)
  1234. ENDIF
  1235. IF (MAPL.EQ.5 .OR. MAPL.EQ.54) CALL ZDANUL(TRAC,LTRAC)
  1236. IF (MAPL.EQ.54) SEGINI,WRK5
  1237. * Preparation a la recuperation de l'epaisseur
  1238. MVALEP=0
  1239. DIM3=1.D0
  1240. IF (IFOUR.EQ.-2) THEN
  1241. IF (IVACAR.NE.0) THEN
  1242. MPTVAL=IVACAR
  1243. MVALEP=IVAL(1)
  1244. IF (MVALEP.GT.0) THEN
  1245. MELVAL=MVALEP
  1246. NELEP=VELCHE(/2)
  1247. NPGEP=VELCHE(/1)
  1248. ENDIF
  1249. ENDIF
  1250. ENDIF
  1251. * Boucle sur les elements de la sous-zone ISOU
  1252. DO 3004 IB=1,NBELEM
  1253. * Recuperation des coordonnees des noeuds de l'element IB
  1254. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1255. * Calcul de la matrice de changement de repere (materiau a "tropie")
  1256. IF (BMATE) THEN
  1257. CALL RESHPT(1,NBNN,NLG,MELE,0,IPMIN2,IRT1)
  1258. MINTE2=IPMIN2
  1259. SEGACT,MINTE2
  1260. NBSH=MINTE2.SHPTOT(/2)
  1261. CALL RLOCAL(XE,MINTE2.SHPTOT,NBSH,NBNN,TXR)
  1262. IF (NBSH.EQ.-1) THEN
  1263. KERRE=525
  1264. GOTO 8004
  1265. ENDIF
  1266. ENDIF
  1267. * Mise a zero de la matrice de rigidite elementaire (IB)
  1268. CALL ZERO(REL,LRE,LRE)
  1269. * Cas des elements incompressibles : termes de la matrice B-BARRE
  1270. IF (MFR.EQ.31) THEN
  1271. CALL BBCALC(MELE,NBNN,MFR,IDIM,XE,
  1272. & NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  1273. & NSTRS,LRE,IFOUR,NHRM,A,BB,
  1274. & SHPTOT,SHPWRK,BGENE,XDPGE,YDPGE,PP,NOER)
  1275. IF (NOER.NE.0) THEN
  1276. CALL ERREUR(noer)
  1277. RETURN
  1278. ENDIF
  1279. ENDIF
  1280. * Boucle sur les points de Gauss de l'element IB
  1281. ISDJC=0
  1282. DO 4004 IGAU=1,NBPGAU
  1283. * Recuperation de l'epaisseur si donnee
  1284. IF (MVALEP.GT.0) THEN
  1285. MELVAL=MVALEP
  1286. IBMN=MIN(IB ,NELEP)
  1287. IGMN=MIN(IGAU,NPGEP)
  1288. DIM3=VELCHE(IGMN,IBMN)
  1289. ENDIF
  1290. * Calcul de la matrice B et du jacobien DJAC au point de Gauss IGAU
  1291. CALL BMATST(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  1292. & MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,DIM3,
  1293. & XE,SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE)
  1294. IF (DJAC.EQ.0.) THEN
  1295. KERRE=259
  1296. INTERR(1)=IB
  1297. GOTO 8004
  1298. ENDIF
  1299. IF (DJAC.LT.0.) ISDJC=ISDJC+1
  1300. DJAC=ABS(DJAC)*POIGAU(IGAU)
  1301. C En cas d'elements incompressibles : BGENE selon la methode B-BARRE
  1302. IF (MFR.EQ.31) THEN
  1303. CALL BBAR(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  1304. & MELE,NBNN,LRE,IFOUR,NSTRS,XE,DJAC,A,BB,BGENE)
  1305. ENDIF
  1306.  
  1307. IRET=0
  1308. * Recuperation des proprietes materielles utiles selon le modele
  1309. MPTVAL=IVAMAT
  1310. IF (MAPL.EQ.5) THEN
  1311. MELVAL=IVAL(1)
  1312. IBMN=MIN(IB ,VELCHE(/2))
  1313. IGMN=MIN(IGAU,VELCHE(/1))
  1314. YYYY=VELCHE(IGMN,IBMN)
  1315. MELVAL=IVAL(3)
  1316. IBMN=MIN(IB ,IELCHE(/2))
  1317. IGMN=MIN(IGAU,IELCHE(/1))
  1318. IMMM=IELCHE(IGMN,IBMN)
  1319. CALL COTRA1(IMMM,YYYY,LTRAC,TRAC,NTRAC,KERRE)
  1320. ELSE IF (MAPL.EQ.54) THEN
  1321. MELVAL=IVAL(12)
  1322. IBMN=MIN(IB ,IELCHE(/2))
  1323. IGMN=MIN(IGAU,IELCHE(/1))
  1324. ITREV=IELCHE(IGMN,IBMN)
  1325. MELVAL=IVAL(13)
  1326. IBMN=MIN(IB ,IELCHE(/2))
  1327. IGMN=MIN(IGAU,IELCHE(/1))
  1328. ICOEV=IELCHE(IGMN,IBMN)
  1329. IPOS1=1
  1330. CALL COTRAB(ITREV,TRAC,LTRAC,IPOS1,0,NPOINT,KERRE)
  1331. IF (KERRE.NE.0) THEN
  1332. INTERR(1)=IB
  1333. INTERR(2)=IGAU
  1334. MOTERR(1:4)=NOMTP(MELE)
  1335. GOTO 8004
  1336. ENDIF
  1337. NTRAC1=NPOINT/2
  1338. IPOS2=IPOS1+NPOINT
  1339. CALL COTRAB(ICOEV,TRAC,LTRAC,IPOS2,0,NPOINT,KERRE)
  1340. NTRAC2=NPOINT/2
  1341. IRET=WRK5
  1342. ENDIF
  1343. IF (KERRE.NE.0) THEN
  1344. INTERR(1)=IB
  1345. INTERR(2)=IGAU
  1346. MOTERR(1:4)=NOMTP(MELE)
  1347. GOTO 8004
  1348. ENDIF
  1349. IF (BMATE) IRET=WTRAV
  1350. * Contribution du pt de Gauss IGAU a la matrice tangente elementaire
  1351. CALL DOHOT1(IVAMAT,NMATT,IVACON,NSTRS,IVARI,NVART,TRAC,
  1352. & LTRAC,IGAU,IB,MATE,MAPL,XPREC,DTPS,IFOUR,
  1353. & LHOOK,DDHOOK,IRET)
  1354. IF (IRET.NE.1) THEN
  1355. IF (IRET.EQ.-1) THEN
  1356. KERRE=275
  1357. INTERR(1)=IB
  1358. INTERR(2)=IGAU
  1359. MOTERR(1:4)=NOMTP(MELE)
  1360. C* ELSE IF (IRET.EQ.0) THEN
  1361. ELSE
  1362. KERRE=328
  1363. INTERR(1)=IFOUR
  1364. MOTERR(1:8)=NOMAT(MATE)
  1365. MOTERR(9:12)=NOMAC(MAPL)
  1366. MOTERR(13:20)=NOMFR(MFR)
  1367. ENDIF
  1368. GOTO 8004
  1369. ENDIF
  1370. IF (IRIGE7.EQ.2) THEN
  1371. CALL BDBSTS(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  1372. ELSE
  1373. CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  1374. ENDIF
  1375. 4004 CONTINUE
  1376. * Fin de la boucle sur les points de Gauss
  1377. IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN
  1378. KERRE=195
  1379. INTERR(1)=IB
  1380. GOTO 8004
  1381. ENDIF
  1382. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  1383. IF (IRIGE7.EQ.2)THEN
  1384. CALL REMPMS(REL,LRE,RE(1,1,IB))
  1385. ELSE
  1386. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1387. ENDIF
  1388. 3004 CONTINUE
  1389. * Fin de la boucle sur les elements
  1390. * Etiquette de gestion des erreurs
  1391. 8004 CONTINUE
  1392. * Menage local
  1393. SEGSUP,WRK1,WRK2
  1394. IF (MAPL.EQ.54) SEGSUP,WRK5
  1395. IF (BMATE) SEGSUP,WTRAV
  1396. GOTO 510
  1397. *-----------------------------------------------------------------------
  1398. *-> Elements de raccord liquide-solide :
  1399. * RAC2 LIA3 LIA4 RACO LICO LIC4 (MELE = 12 18 19 47 55 94)
  1400. * => Elements SANS RIGIDITE (elastique & tangente)
  1401. *-----------------------------------------------------------------------
  1402. 12 CONTINUE
  1403. C Les matrices elementaires sont nulles et ont ete mises a zero lors de
  1404. C l'initialisation du segment XMATRI !
  1405. GOTO 510
  1406. *-----------------------------------------------------------------------
  1407. *-> Element de type "Relations de conformites" (MELE=22)
  1408. * Matrice TANGENTE = Matrice de RIGIDITE (ELASTIQUE) (cf. RIGI1)
  1409. *-----------------------------------------------------------------------
  1410. 22 CONTINUE
  1411. IF (ITYPEL.NE.22) THEN
  1412. KERRE=977
  1413. GOTO 510
  1414. ENDIF
  1415. CALL RIGSUR(ISOU ,IPMATR, IMODEL)
  1416. GOTO 510
  1417. *-----------------------------------------------------------------------
  1418. *-> Element de type "Relations de conformites " (MELE=259)
  1419. * Matrice TANGENTE = Matrice de RIGIDITE (ELASTIQUE) (cf. RIGI1)
  1420. *-----------------------------------------------------------------------
  1421. 259 CONTINUE
  1422. IF (ITYPEL.NE.259) THEN
  1423. KERRE=977
  1424. GOTO 510
  1425. ENDIF
  1426. CALL RIGSUR(ISOU ,IPMATR, IMODEL)
  1427. * Cas particulier si formulation X-FEM
  1428. IF (IMODEL.INFELE(13).EQ.63) then
  1429. CALL RIGSUX(ISOU ,IPMATR, IMODEL)
  1430. ENDIF
  1431.  
  1432. GOTO 510
  1433. *-----------------------------------------------------------------------
  1434. *-> Elements COQ3 COQ8 COQ2 COQ4 COQ6 DST (MELE = 27 41 44 49 56 93)
  1435. *-> Cas particulier : DKT elastique (MELE = 28 avec MAPL = 0)
  1436. * Matrice TANGENTE = RIGIDITE ELASTIQUE (Appel a RIGI3)
  1437. *-----------------------------------------------------------------------
  1438. 27 CONTINUE
  1439. MPTVAL=IVAMAT
  1440. NBGMAT = 0
  1441. NELMAT = 0
  1442. IF (CMATE.EQ.'SECTION') THEN
  1443. DO i=1,IVAL(/1)
  1444. MELVAL=IVAL(i)
  1445. IF (MELVAL.NE.0)THEN
  1446. NBGMAT=MAX(NBGMAT,IELCHE(/1))
  1447. NELMAT=MAX(NELMAT,IELCHE(/2))
  1448. ENDIF
  1449. ENDDO
  1450. ELSE
  1451. DO i=1,IVAL(/1)
  1452. MELVAL=IVAL(i)
  1453. IF (MELVAL.NE.0)THEN
  1454. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  1455. NELMAT=MAX(NELMAT,VELCHE(/2))
  1456. ENDIF
  1457. ENDDO
  1458. ENDIF
  1459. CALL RIGI3(MATE,MELE,IPMAIL,IPMINT,IPMIN1,NBPGAU,LRE,NSTRS,
  1460. & IVAMAT,IVACAR,CMATE,MFR,NBGMAT,NELMAT,1,LHOOK,
  1461. & NMATT,LW,NPINT,IPMATR,IIPDPG)
  1462. IF (IERR.NE.0) KERRE=-ABS(IERR)
  1463. GOTO 510
  1464. *-----------------------------------------------------------------------
  1465. *-> Element DKT (MELE = 28)
  1466. *-----------------------------------------------------------------------
  1467. 28 CONTINUE
  1468. IF (MAPL.EQ.0) GOTO 27
  1469. NBNO=NBNN
  1470. NBBB=NBNN
  1471. SEGINI,WRK1,WRK2,WRK4
  1472. IF (MAPL.EQ.5) CALL ZDANUL(TRAC,LTRAC)
  1473. * Preparation a la recuperation de caracteristiques geometriques
  1474. MPTVAL=IVACAR
  1475. EXCEN=0.D0
  1476. MVALEX=IVAL(2)
  1477. IF (MVALEX.GT.0) THEN
  1478. MELVAL=MVALEX
  1479. NELEX=VELCHE(/2)
  1480. NPGEX=VELCHE(/1)
  1481. ENDIF
  1482. CALFA=0.666666666666666666666666666666666666666666666D0
  1483. MVALCA=IVAL(NCART)
  1484. IF (MVALCA.GT.0) THEN
  1485. MELVAL=MVALCA
  1486. NELCA=VELCHE(/2)
  1487. NPGCA=VELCHE(/1)
  1488. ENDIF
  1489. * Boucle sur les elements de la sous-zone ISOU
  1490. DO 3028 IB=1,NBELEM
  1491. * Recuperation des coordonnees des noeuds de l'element IB
  1492. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1493. * Passage dans le repere local de l'element
  1494. CALL VPAST(XE,BPSS)
  1495. CALL VCORLC(XE,XEL,BPSS)
  1496. * Mise a zero de la matrice de rigidite elementaire (IB)
  1497. CALL ZERO(REL,LRE,LRE)
  1498. * Boucle sur les points de Gauss de l'element IB
  1499. DO 4028 IGAU=1,NBPGAU
  1500. * Recuperation des caracteristiques geometriques
  1501. MPTVAL=IVACAR
  1502. MELVAL=IVAL(1)
  1503. IBMN=MIN(IB ,VELCHE(/2))
  1504. IGMN=MIN(IGAU,VELCHE(/1))
  1505. EPAIST=VELCHE(IGMN,IBMN)
  1506. IF (MVALEX.GT.0) THEN
  1507. MELVAL=MVALEX
  1508. IBMN=MIN(IB ,NELEX)
  1509. IGMN=MIN(IGAU,NPGEX)
  1510. EXCEN=VELCHE(IGMN,IBMN)
  1511. ENDIF
  1512. IF (MVALCA.GT.0) THEN
  1513. MELVAL=MVALCA
  1514. IBMN=MIN(IB ,NELCA)
  1515. IGMN=MIN(IGAU,NPGCA)
  1516. CALFA=VELCHE(IGMN,IBMN)
  1517. ENDIF
  1518. * Calcul de la matrice B et du jacobien DJAC au point de Gauss IGAU
  1519. CALL BMAT28(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  1520. & MELE,MFR,NBNO,LRE,IFOUR,NSTRS,0,1.D0,XEL,
  1521. & SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE)
  1522. DJAC=DJAC*POIGAU(IGAU)
  1523. * Modification de la matrice B en cas d'excentrement non nul
  1524. IF (ABS(EXCEN).GT.0.) THEN
  1525. DO i=1,3
  1526. k=i+3
  1527. DO j=1,LRE
  1528. BGENE(i,j)=BGENE(i,j)+EXCEN*BGENE(k,j)
  1529. ENDDO
  1530. ENDDO
  1531. ENDIF
  1532. * Recuperation des proprietes materielles utiles selon le modele
  1533. IF (MAPL.EQ.5) THEN
  1534. MPTVAL=IVAMAT
  1535. MELVAL=IVAL(1)
  1536. IBMN=MIN(IB ,VELCHE(/2))
  1537. IGMN=MIN(IGAU,VELCHE(/1))
  1538. YYYY=VELCHE(IGMN,IBMN)
  1539. MELVAL=IVAL(3)
  1540. IBMN=MIN(IB ,IELCHE(/2))
  1541. IGMN=MIN(IGAU,IELCHE(/1))
  1542. IMMM=IELCHE(IGMN,IBMN)
  1543. CALL COTRA1(IMMM,YYYY,LTRAC,TRAC,NTRAC,KERRE)
  1544. IF (KERRE.NE.0) THEN
  1545. INTERR(1)=IB
  1546. INTERR(2)=IGAU
  1547. MOTERR(1:4)=NOMTP(MELE)
  1548. GOTO 8028
  1549. ENDIF
  1550. ENDIF
  1551. * DOHOT3 se chargera de convertir les efforts generalises (IVACON)
  1552. * et les variables internes generalisees (IVARI) en contraintes et
  1553. * variables internes "locales"
  1554. * Contribution du pt de Gauss IGAU a la matrice tangente elementaire
  1555. CALL DOHOT3(IVAMAT,NMATT,IVACON,NSTRS,IVARI,NVART,
  1556. & TRAC,LTRAC,CALFA,EPAIST,IGAU,IB,MATE,MAPL,
  1557. & XPREC,DTPS,IFOUR,LHOOK,DDHOOK,IRET)
  1558. IF (IRET.NE.1) THEN
  1559. IF (IRET.EQ.-1) THEN
  1560. KERRE=275
  1561. INTERR(1)=IB
  1562. INTERR(2)=IGAU
  1563. MOTERR(1:4)=NOMTP(MELE)
  1564. C* ELSE IF (IRET.EQ.0) THEN
  1565. ELSE
  1566. KERRE=328
  1567. INTERR(1)=IFOUR
  1568. MOTERR(1:8)=NOMAT(MATE)
  1569. MOTERR(9:12)=NOMAC(MAPL)
  1570. MOTERR(13:20)=NOMFR(MFR)
  1571. ENDIF
  1572. GOTO 8028
  1573. ENDIF
  1574. CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  1575. 4028 CONTINUE
  1576. * Fin de la boucle sur les points de Gauss
  1577. * Calcul de la matrice tangente elementaire (IB)
  1578. REL( 6, 6)=REL(5,5)*1.D-7
  1579. REL(12,12)=REL(6,6)
  1580. REL(18,18)=REL(6,6)
  1581. CALL TRANSK(REL,BPSS,LRE,3,1)
  1582. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  1583. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1584. 3028 CONTINUE
  1585. * Fin de la boucle sur les elements
  1586. * Etiquette de gestion des erreurs
  1587. 8028 CONTINUE
  1588. * Menage local
  1589. SEGSUP,WRK1,WRK2,WRK4
  1590. GOTO 510
  1591. *-----------------------------------------------------------------------
  1592. *-> Element POUTre (MELE=29)
  1593. *-> Cas particulier : Element TIMO avec materiau ISOTROPE (MELE=84)
  1594. *-----------------------------------------------------------------------
  1595. 29 CONTINUE
  1596. NBBB=NBNN
  1597. SEGINI,WRK1,WRK3
  1598. * Boucle sur les elements de la sous-zone ISOU
  1599. DO 3029 IB=1,NBELEM
  1600. * Recuperation des coordonnees des noeuds de l'element IB
  1601. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1602. * Recuperation des caracteristiques geometriques (stockees dans WORK)
  1603. MPTVAL=IVACAR
  1604. DO IC=1,NCART
  1605. r_z=0.
  1606. IF (IVAL(IC).NE.0) THEN
  1607. MELVAL=IVAL(IC)
  1608. IBMN=MIN(IB,VELCHE(/2))
  1609. DO IGAU=1,NBNN
  1610. IGMN=MIN(IGAU,VELCHE(/1))
  1611. r_z=r_z+VELCHE(IGMN,IBMN)
  1612. ENDDO
  1613. r_z=r_z/NBNN
  1614. ENDIF
  1615. WORK(IC)=r_z
  1616. ENDDO
  1617. * Recuperation des caracteristiques elastiques (stockees dans WORK)
  1618. MPTVAL=IVAMAT
  1619. MELVAL=IVAL(1)
  1620. IBMN=MIN(IB ,VELCHE(/2))
  1621. YOUNG=VELCHE(1,IBMN)
  1622. MELVAL=IVAL(2)
  1623. IBMN=MIN(IB ,VELCHE(/2))
  1624. XNU=VELCHE(1,IBMN)
  1625. CISAIL=0.5*YOUNG/(1.+XNU)
  1626. IF (BPLAN) THEN
  1627. WORK(4)=YOUNG
  1628. WORK(5)=CISAIL
  1629. ELSE
  1630. WORK(10)=YOUNG
  1631. WORK(11)=CISAIL
  1632. ENDIF
  1633. * Modification de caracteristiques (INRY ou SECZ) selon les modeles
  1634. MPTVAL=IVARI
  1635. IF (MAPL.EQ.57.OR.MAPL.EQ.59) THEN
  1636. MELVAL=IVAL(2)
  1637. IBMN=MIN(IB,VELCHE(/2))
  1638. WORK(2)=VELCHE(1,IBMN)/YOUNG
  1639. ELSE IF(MAPL.EQ.58.OR.MAPL.EQ.60) THEN
  1640. MELVAL=IVAL(2)
  1641. IBMN=MIN(IB,VELCHE(/2))
  1642. WORK(6)=VELCHE(1,IBMN)/CISAIL
  1643. ENDIF
  1644. * Calcul de la rigidite elementaire tangente (IB)
  1645. IF (MELE.EQ.84) THEN
  1646. IF (BPLAN) THEN
  1647. CALL TIMRI2(REL,LRE,WORK,XE,WORK(12),IRET)
  1648. ELSE
  1649. CALL TIMRIG(REL,LRE,WORK,XE,WORK(12),IRET)
  1650. ENDIF
  1651. ELSE
  1652. IF (BPLAN) THEN
  1653. CALL POURI2(REL,LRE,WORK,XE,WORK(12),IRET)
  1654. ELSE
  1655. CALL POURIG(REL,LRE,WORK,XE,WORK(12),IRET)
  1656. ENDIF
  1657. ENDIF
  1658. IF (IRET.NE.0) THEN
  1659. IF (IRET.EQ.1) KERRE=128
  1660. IF (IRET.EQ.2) KERRE=138
  1661. INTERR(1)=ISOUS
  1662. INTERR(2)=IB
  1663. GOTO 8029
  1664. ENDIF
  1665. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB)
  1666. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1667. 3029 CONTINUE
  1668. * Fin de la boucle sur les elements
  1669. * Etiquette de gestion des erreurs
  1670. 8029 CONTINUE
  1671. * Menage local
  1672. SEGSUP,WRK1,WRK3
  1673. GOTO 510
  1674. *-----------------------------------------------------------------------
  1675. *-> Elements linespring LISP et LISM en nonlineaire (MELE = 30 50)
  1676. *-----------------------------------------------------------------------
  1677. 30 CONTINUE
  1678. IF (MAPL.EQ.0) GOTO 42
  1679. NBBB=NBNN
  1680. SEGINI,WRK1,WRK3
  1681. * Boucle sur les elements de la sous-zone ISOU
  1682. DO 3030 IB=1,NBELEM
  1683. * Recuperation des coordonnees des noeuds de l'element IB
  1684. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1685. IE=1
  1686. * Recuperation des proprietes materielles (stockees dans WORK)
  1687. IE1=IE
  1688. MPTVAL=IVAMAT
  1689. DO IC=1,NBPGAU
  1690. DO i=1,2
  1691. MELVAL=IVAL(i)
  1692. IGMN=MIN(IC,VELCHE(/1))
  1693. IBMN=MIN(IB,VELCHE(/2))
  1694. WORK(IE)=VELCHE(IGMN,IBMN)
  1695. IE=IE+1
  1696. ENDDO
  1697. DO i=3,4
  1698. WORK(IE)=0.D0
  1699. IE=IE+1
  1700. ENDDO
  1701. MELVAL=IVAL(3)
  1702. IGMN=MIN(IC,VELCHE(/1))
  1703. IBMN=MIN(IB,VELCHE(/2))
  1704. WORK(IE)=VELCHE(IGMN,IBMN)
  1705. IE=IE+1
  1706. ENDDO
  1707. * Recuperation des contraintes (stockees dans WORK)
  1708. IE2=IE
  1709. MPTVAL=IVACON
  1710. DO IC=1,NBGS
  1711. DO i=1,NSTRS
  1712. MELVAL=IVAL(i)
  1713. IGMN=MIN(IC,VELCHE(/1))
  1714. IBMN=MIN(IB ,VELCHE(/2))
  1715. WORK(IE)=VELCHE(IGMN,IBMN)
  1716. IE=IE+1
  1717. ENDDO
  1718. ENDDO
  1719. * Recuperation des caracteristiques geometriques (stockees dans WORK)
  1720. IE3=IE
  1721. MPTVAL=IVACAR
  1722. DO IC=1,NBPGAU
  1723. DO i=1,NCART
  1724. MELVAL=IVAL(i)
  1725. IGMN=MIN(IC,VELCHE(/1))
  1726. IBMN=MIN(IB,VELCHE(/2))
  1727. WORK(IE)=VELCHE(IGMN,IBMN)
  1728. IE=IE+1
  1729. ENDDO
  1730. ENDDO
  1731. * Recuperation des variables internes (stockees dans WORK)
  1732. IE4=IE
  1733. MPTVAL=IVARI
  1734. DO IC=1,NBGS
  1735. DO i=1,NVART
  1736. MELVAL=IVAL(i)
  1737. IGMN=MIN(IC,VELCHE(/1))
  1738. IBMN=MIN(IB,VELCHE(/2))
  1739. WORK(IE)=VELCHE(IGMN,IBMN)
  1740. IE=IE+1
  1741. ENDDO
  1742. ENDDO
  1743. IE5=IE+1
  1744. * Calcul de la rigidite elementaire tangente (IB)
  1745. CALL LISPKT(XE,WORK(IE1),WORK(IE2),WORK(IE3),WORK(IE4),NSTRS,
  1746. & NBGS,NBPGAU,MELE,XPREC,WORK(IE5),REL,I70,I157,
  1747. & I158,IRET,KERRE)
  1748. IF (IRET.EQ.-1.OR.KERRE.NE.0) THEN
  1749. KERRE=270
  1750. IF (IRET.EQ.-1) KERRE=275
  1751. INTERR(1)=IB
  1752. INTERR(2)=1
  1753. MOTERR(1:4)=NOMTP(MELE)
  1754. GOTO 8030
  1755. ENDIF
  1756. IF (I158.EQ.1) THEN
  1757. KERRE=158
  1758. INTERR(1)=IB
  1759. GOTO 8030
  1760. ENDIF
  1761. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  1762. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1763. 3030 CONTINUE
  1764. * Fin de la boucle sur les elements
  1765. * Etiquette de gestion des erreurs
  1766. 8030 CONTINUE
  1767. * Menage local
  1768. SEGSUP,WRK1,WRK3
  1769. GOTO 510
  1770. *-----------------------------------------------------------------------
  1771. *-> Elements liquide LTR3 LQU4 LCU8 LPR6 LTE4 LPY5 (MELE = 35 a 40)
  1772. * Elements de surface libre LSU2 LSU3 LSU4 (MELE = 48 53 54)
  1773. * Elements poreux TRIP QUAP CUBP TETP PRIP (MELE = 79 a 83)
  1774. * Elements joints poreux JOP3 JOP6 JOP8 (MELE = 108 a 110)
  1775. * Elements massifs polygonaux POLY (MELE = 111 a 122)
  1776. * Matrice TANGENTE = RIGIDITE ELASTIQUE (Appel a RIGI2)
  1777. *-----------------------------------------------------------------------
  1778. 35 CONTINUE
  1779. NCAR1 = NCART + 1
  1780. MPTVAL=IVAMAT
  1781. NBGMAT = 0
  1782. NELMAT = 0
  1783. IF (CMATE.EQ.'SECTION') THEN
  1784. DO i=1,IVAL(/1)
  1785. IF (IVAL(i).NE.0) THEN
  1786. MELVAL=IVAL(i)
  1787. NBGMAT=MAX(NBGMAT,IELCHE(/1))
  1788. NELMAT=MAX(NELMAT,IELCHE(/2))
  1789. ENDIF
  1790. ENDDO
  1791. ELSE
  1792. DO i=1,IVAL(/1)
  1793. IF (IVAL(i).NE.0) THEN
  1794. MELVAL=IVAL(i)
  1795. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  1796. NELMAT=MAX(NELMAT,VELCHE(/2))
  1797. ENDIF
  1798. ENDDO
  1799. ENDIF
  1800. noer=0
  1801. CALL RIGI2 (MATE,MELE,IPMAIL,IPMINT,NBPGAU,LRE,NSTRS,IVAMAT,
  1802. & IVACAR,CMATE,MFR,NBGMAT,NELMAT,1,LHOOK,NMATT,IPORE,
  1803. & NDDL,IPMATR,IIPDPG,NCAR1,melpha,noer)
  1804. IF (IERR.NE.0) KERRE=-ABS(IERR)
  1805. GOTO 510
  1806. *-----------------------------------------------------------------------
  1807. *-> Elements TUYA POI1 JOT3 JOI4 TRIH TUYO (MELE = 42 45 87 88 92 96)
  1808. * LSE2 LITU BAR3 BAEX LIA2 QUAH CUBH (MELE = 97 98 123 a 127)
  1809. * TRH6 JCT3 JCI4 JGI2 JGT3 JGI4 (MELE = 157 168 a 172)
  1810. * CIFL SURE?? SHB8 (MELE = 258 259? 260)
  1811. *-> Cas particuliers : LISP & LISM en elasticite (MELE= 30 50 & MAPL=0)
  1812. * TUFI en elasticite (MELE=43 & MAPL=0)
  1813. * Matrice TANGENTE = RIGIDITE ELASTIQUE (Appel a RIGI4)
  1814. *-----------------------------------------------------------------------
  1815. 42 CONTINUE
  1816. MPTVAL=IVAMAT
  1817. NBGMAT = 0
  1818. NELMAT = 0
  1819. IF (CMATE.EQ.'SECTION') THEN
  1820. DO i=1,IVAL(/1)
  1821. IF (IVAL(i).NE.0)THEN
  1822. MELVAL=IVAL(i)
  1823. NBGMAT=MAX(NBGMAT,IELCHE(/1))
  1824. NELMAT=MAX(NELMAT,IELCHE(/2))
  1825. ENDIF
  1826. ENDDO
  1827. ELSE
  1828. DO i=1,IVAL(/1)
  1829. IF (IVAL(i).NE.0)THEN
  1830. MELVAL=IVAL(i)
  1831. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  1832. NELMAT=MAX(NELMAT,VELCHE(/2))
  1833. ENDIF
  1834. ENDDO
  1835. ENDIF
  1836. CALL RIGI4(MATE,MELE,IPMAIL,IPMINT,NBPGAU,LRE,NSTRS,
  1837. & IVAMAT,IVACAR,IVECT,CMATE,MFR,NBGMAT,NELMAT,1,
  1838. & LHOOK,NMATT,NCART,ISOUS,LW,IPORE,IPMATR,IIPDPG)
  1839. IF (IERR.NE.0) KERRE=-ABS(IERR)
  1840. GOTO 510
  1841. *-----------------------------------------------------------------------
  1842. *-> Element TUFI en non lineaire (MELE=43)
  1843. *-----------------------------------------------------------------------
  1844. 43 CONTINUE
  1845. IF (MAPL.EQ.0) GOTO 42
  1846. C* Temporaire : si SIGF n'est pas definie, on utilise la matrice elastique
  1847. MPTVAL=IVAMAT
  1848. IF (IVAL(3).EQ.0) GOTO 42
  1849. NBBB=NBNN
  1850. SEGINI,WRK1,WRK3
  1851. * Boucle sur les elements de la sous-zone ISOU
  1852. DO 3043 IB=1,NBELEM
  1853. * Recuperation des proprietes materielles (stockees dans WORK)
  1854. IE =1
  1855. IE1=IE
  1856. MPTVAL=IVAMAT
  1857. DO IC=1,NBPGAU
  1858. DO i=1,2
  1859. MELVAL=IVAL(i)
  1860. IGMN=MIN(IC,VELCHE(/1))
  1861. IBMN=MIN(IB,VELCHE(/2))
  1862. WORK(IE)=VELCHE(IGMN,IBMN)
  1863. IE=IE+1
  1864. ENDDO
  1865. DO i=3,4
  1866. WORK(IE)=0.D0
  1867. IE=IE+1
  1868. ENDDO
  1869. MELVAL=IVAL(3)
  1870. IF (MELVAL.NE.0) THEN
  1871. IGMN=MIN(IC,VELCHE(/1))
  1872. IBMN=MIN(IB,VELCHE(/2))
  1873. WORK(IE)=VELCHE(IGMN,IBMN)
  1874. ELSE
  1875. WORK(IE)=0.D0
  1876. ENDIF
  1877. IE=IE+1
  1878. DO i=6,7
  1879. WORK(IE)=0.D0
  1880. IE=IE+1
  1881. ENDDO
  1882. ENDDO
  1883. * Recuperation des contraintes (stockees dans WORK)
  1884. IE2=IE
  1885. MPTVAL=IVACON
  1886. DO IC=1,NBGS
  1887. DO i=1,NSTRS
  1888. MELVAL=IVAL(i)
  1889. IGMN=MIN(IC,VELCHE(/1))
  1890. IBMN=MIN(IB,VELCHE(/2))
  1891. WORK(IE)=VELCHE(IGMN,IBMN)
  1892. IE=IE+1
  1893. ENDDO
  1894. ENDDO
  1895. * Recuperation des caracteristiques geometriques (stockees dans WORK)
  1896. IE3=IE
  1897. MPTVAL=IVACAR
  1898. DO IC=1,NBPGAU
  1899. DO i=1,8
  1900. MELVAL=IVAL(i)
  1901. IGMN=MIN(IC,VELCHE(/1))
  1902. IBMN=MIN(IB,VELCHE(/2))
  1903. WORK(IE)=VELCHE(IGMN,IBMN)
  1904. IE=IE+1
  1905. ENDDO
  1906. WORK(IE)=0.D0
  1907. IE=IE+1
  1908. ENDDO
  1909. * Recuperation des variables internes (stockees dans WORK)
  1910. IE4=IE
  1911. MPTVAL=IVARI
  1912. DO IC=1,NBGS
  1913. DO i=1,NVART
  1914. MELVAL=IVAL(i)
  1915. IGMN=MIN(IC,VELCHE(/1))
  1916. IBMN=MIN(IB,VELCHE(/2))
  1917. WORK(IE)=VELCHE(IGMN,IBMN)
  1918. IE=IE+1
  1919. ENDDO
  1920. ENDDO
  1921. IE5=IE+1
  1922. * Calcul de la rigidite elementaire tangente (IB)
  1923. CALL TUFIKT(WORK(IE1),WORK(IE2),WORK(IE3),WORK(IE4),REL,XPREC,
  1924. & IRET)
  1925. IF (IRET.NE.0) THEN
  1926. INTERR(1)=ISOUS
  1927. INTERR(2)=IB
  1928. IF (IRET.EQ.1) KERRE=137
  1929. IF (IRET.EQ.2) KERRE=123
  1930. IF (IRET.EQ.3) KERRE=266
  1931. IF (IRET.EQ.4) THEN
  1932. KERRE=275
  1933. INTERR(1)=IB
  1934. INTERR(2)=1
  1935. MOTERR(1:4)=NOMTP(MELE)
  1936. ENDIF
  1937. GOTO 8043
  1938. ENDIF
  1939. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  1940. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1941. 3043 CONTINUE
  1942. * Fin de la boucle sur les elements
  1943. * Etiquette de gestion des erreurs
  1944. 8043 CONTINUE
  1945. * Menage local
  1946. SEGSUP,WRK1,WRK3
  1947. GOTO 510
  1948. *-----------------------------------------------------------------------
  1949. *-> Elements BARRe et CERCe (MELE = 46 95)
  1950. *-----------------------------------------------------------------------
  1951. 46 CONTINUE
  1952. IF (MELE.EQ.95.AND.(IFOUR.NE.0.AND.IFOUR.NE.1)) GOTO 99
  1953. NBBB=NBNN
  1954. SEGINI,WRK1,WRK3
  1955. MPTVAL=IVACAR
  1956. MELVAL=IVAL(1)
  1957. NELCAR=VELCHE(/2)
  1958. MELCAR=IVAL(1)
  1959. * Boucle sur les elements de la sous-zone ISOU
  1960. DO 3046 IB=1,NBELEM
  1961. * Recuperation des coordonnees des noeuds de l'element IB
  1962. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1963. * Recuperation de la section de l'element IB
  1964. MELVAL=MELCAR
  1965. IBMN=MIN(IB,NELCAR)
  1966. SECT=VELCHE(1,IBMN)
  1967. * Recuperation du module tangent selon le modele utilise
  1968. MPTVAL=IVARI
  1969. IF (MAPL.EQ.93) THEN
  1970. MELVAL=IVAL(16)
  1971. IBMN=MIN(IB,VELCHE(/2))
  1972. YOUNGT=VELCHE(1,IBMN)
  1973. ELSE IF (MAPL.EQ.92) THEN
  1974. MELVAL=IVAL(6)
  1975. IBMN=MIN(IB,VELCHE(/2))
  1976. YOUNGT=VELCHE(1,IBMN)
  1977. ELSE IF (MAPL.EQ.39) THEN
  1978. MELVAL=IVAL(6)
  1979. IBMN=MIN(IB,VELCHE(/2))
  1980. YOUNGT=VELCHE(1,IBMN)
  1981. ELSE IF (MAPL.EQ.40) THEN
  1982. MELVAL=IVAL(4)
  1983. IBMN=MIN(IB,VELCHE(/2))
  1984. YOUNGT=VELCHE(1,IBMN)
  1985. ELSE IF (MAPL.EQ.0) THEN
  1986. MPTVAL=IVAMAT
  1987. MELVAL=IVAL(1)
  1988. IBMN=MIN(IB,VELCHE(/2))
  1989. YOUNGT=VELCHE(1,IBMN)
  1990. ELSE
  1991. KERRE=81
  1992. MOTERR(1:8)=CMATE
  1993. MOTERR(9:16)=NOMFR(MFR/2+1)
  1994. INTERR(1)=IFOUR
  1995. GOTO 8046
  1996. ENDIF
  1997. * Calcul de la rigidite elementaire tangente (IB)
  1998. XHOOK=YOUNGT*SECT
  1999. IF (MELE.EQ.46) THEN
  2000. CALL BARRIG(REL,LRE,XHOOK,XE,IRET)
  2001. IF (IRET.EQ.1) KERRE=128
  2002. ELSE IF (MELE.EQ.95) THEN
  2003. CALL CERRIG(REL,LRE,XHOOK,XE,IRET)
  2004. IF (IRET.EQ.1) KERRE=601
  2005. ENDIF
  2006. IF (KERRE.NE.0) THEN
  2007. INTERR(1)=ISOUS
  2008. INTERR(2)=IB
  2009. GOTO 8046
  2010. ENDIF
  2011. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  2012. CALL REMPMT(REL,LRE,RE(1,1,IB))
  2013. 3046 CONTINUE
  2014. * Fin de la boucle sur les elements
  2015. * Etiquette de gestion des erreurs
  2016. 8046 CONTINUE
  2017. * Menage local
  2018. SEGSUP,WRK1,WRK3
  2019. GOTO 510
  2020. *-----------------------------------------------------------------------
  2021. *-> Element de poutre de TIMOschenko (MELE=84 - Formulation 'SECTION')
  2022. *-----------------------------------------------------------------------
  2023. 84 CONTINUE
  2024. IF (CMATE.EQ.'ISOTROPE') GOTO 29
  2025. * Remarque : La formulation SECTION est le seul cas prevu actuellement.
  2026. IF (CMATE.NE.'SECTION') THEN
  2027. KERRE=193
  2028. MOTERR(1:8)=NOMFR(MFR)
  2029. GOTO 510
  2030. ENDIF
  2031. NBBB=NBNN
  2032. SEGINI WRK1,WRK3
  2033. * Boucle sur les elements de la sous-zone ISOU
  2034. DO 3084 IB=1,NBELEM
  2035. * Recuperation des coordonnees des noeuds de l'element IB
  2036. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  2037. * Recuperation des caracteristiques geometriques (stockees dans WORK)
  2038. * Attention : on a tenu compte du fait que NCART=1
  2039. MPTVAL=IVACAR
  2040. IF (IVAL(NCART).NE.0) THEN
  2041. MELVAL=IVAL(NCART)
  2042. IBMN=MIN(IB,IELCHE(/2))
  2043. IP=IELCHE(1,IBMN)
  2044. IREF=(IP-1)*(IDIM+1)
  2045. DO IC=1,IDIM
  2046. WORK(IC)=XCOOR(IREF+IC)
  2047. ENDDO
  2048. ELSE
  2049. DO IC=1,IDIM
  2050. WORK(IC)=0.D0
  2051. ENDDO
  2052. ENDIF
  2053. MPTVAL=IVAMAT
  2054. * Traitement dans le cas de la formulation section
  2055. C** IF (CMATE.EQ.'SECTION') THEN
  2056. * Dans le cas d'un materiau elastique, on prend les matrices de Hooke
  2057. * si elles existent dans le MCHAML des proprietes materielles
  2058. IF (MAPL.EQ.0.AND.IVAL(3).NE.0) THEN
  2059. MELVAL=IVAL(3)
  2060. IF (IB.LE.IELCHE(/2).OR.IELCHE(/1).GT.1) THEN
  2061. IBMN=MIN(IB,IELCHE(/2))
  2062. MLREEL=IELCHE(1,IBMN)
  2063. SEGACT,MLREEL
  2064. CALL DOHOOO(PROG,LHOOK,DDHOOK)
  2065. SEGDES,MLREEL
  2066. ENDIF
  2067. ELSE
  2068. MELVAL=IVAL(1)
  2069. IBMN=MIN(IB,IELCHE(/2))
  2070. IPMOD=IELCHE(1,IBMN)
  2071. MELVAL=IVAL(2)
  2072. IBMN=MIN(IB,IELCHE(/2))
  2073. IPCAR=IELCHE(1,IBMN)
  2074. * Sinon calcul des matrices de Hooke a partir des proprietes elastiques
  2075. IF (MAPL.EQ.0) THEN
  2076. CALL FRIGIE(IPMOD,IPCAR,CRIGI,CMASS)
  2077. * Ou calcul des matrices de Hooke a partir des variables internes
  2078. ELSE
  2079. MPTVAL=IVARI
  2080. MELVAL=IVAL(2)
  2081. IBMN=MIN(IB,IELCHE(/2))
  2082. IPVAR=IELCHE(1,IBMN)
  2083. IF (IPVAR.NE.0) THEN
  2084. CALL FRIGTA(IPMOD,IPCAR,IPVAR,CRIGI)
  2085. ELSE
  2086. CALL FRIGIE(IPMOD,IPCAR,CRIGI,CMASS)
  2087. ENDIF
  2088. ENDIF
  2089. CALL DOHTIF(CRIGI,CMATE,IFOUR,LHOOK,DDHOOK,IRET)
  2090. ENDIF
  2091. IF (BPLAN) THEN
  2092. CALL TIFRI2(REL,LRE,XE,WORK(12),LHOOK,DDHOOK,IRET)
  2093. ELSE
  2094. CALL TIFRIG(REL,LRE,WORK,XE,WORK(12),LHOOK,DDHOOK,IRET)
  2095. ENDIF
  2096. C** ENDIF
  2097. IF (IRET.NE.0) THEN
  2098. INTERR(1)=ISOUS
  2099. INTERR(2)=IB
  2100. IF (IRET.EQ.1) KERRE=128
  2101. IF (IRET.EQ.2) KERRE=138
  2102. GOTO 8084
  2103. ENDIF
  2104. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  2105. CALL REMPMT(REL,LRE,RE(1,1,IB))
  2106. 3084 CONTINUE
  2107. * Fin de la boucle sur les elements
  2108. * Etiquette de gestion des erreurs
  2109. 8084 CONTINUE
  2110. * Menage local
  2111. SEGSUP,WRK1,WRK3
  2112. GOTO 510
  2113. *-----------------------------------------------------------------------
  2114. *-> Element JOI2 - Materiau ISOTROPE (MELE = 85)
  2115. *-----------------------------------------------------------------------
  2116. *OF A voir : Erreur pour joi_ama.dgibi car MAPL=47 et on passe dans
  2117. *OF DOUOTA qui ne traite que MAPL=35,56,91
  2118. 85 CONTINUE
  2119. IF (CMATE.NE.'ISOTROPE') THEN
  2120. KERRE=834
  2121. MOTERR(1:8)=CMATE
  2122. GOTO 510
  2123. ENDIF
  2124. NBNO=NBNN
  2125. NBBB=NBNN
  2126. LW=100
  2127. SEGINI,WRK1,WRK2,WRK3,WRK4
  2128. * Boucle sur les elements de la sous-zone ISOU
  2129. DO 3085 IB=1,NBELEM
  2130. * Recuperation des coordonnees des noeuds de l'element IB
  2131. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  2132. * Calcul des axes locaux de l'element IB
  2133. CALL JO2LOC(XE,SHPTOT,NBNO,XEL,BPSS,NOQUAL)
  2134. * Mise a zero de la matrice de rigidite elementaire (IB)
  2135. CALL ZERO(REL,LRE,LRE)
  2136. * Boucle sur les points de Gauss de l'element IB
  2137. DO 4085 IGAU=1,NBPGAU
  2138. * Calcul de la matrice B et du jacobien DJAC au point de Gauss IGAU
  2139. CALL BJO2(IGAU,MFR,IFOUR,NIFOUR,XEL,BPSS,SHPTOT,SHPWRK,
  2140. & BGENE,DJAC,IRET)
  2141. DJAC=DJAC*POIGAU(IGAU)
  2142. * Erreur si le jacobien est <= 0.
  2143. IF (IRET.NE.0) THEN
  2144. KERRE=612
  2145. INTERR(1)=IB
  2146. GOTO 8085
  2147. ENDIF
  2148. * Recuperation des proprietes materielles (stockees dans WORK)
  2149. IE=1
  2150. IE1=IE
  2151. MPTVAL=IVAMAT
  2152. DO i=1,NMATT
  2153. MELVAL=IVAL(i)
  2154. IBMN=MIN(IB ,VELCHE(/2))
  2155. IGMN=MIN(IGAU,VELCHE(/1))
  2156. WORK(IE)=VELCHE(IGMN,IBMN)
  2157. IE=IE+1
  2158. ENDDO
  2159. * Calcul de la matrice de Hooke tangente au point de Gauss IGAU
  2160. IF (MAPL.EQ.35.OR.MAPL.EQ.56.OR.MAPL.EQ.91) THEN
  2161. * Recuperation des contraintes (stockees dans WORK)
  2162. IE2=IE
  2163. MPTVAL=IVACON
  2164. DO i=1,NSTRS
  2165. MELVAL=IVAL(i)
  2166. IBMN=MIN(IB ,VELCHE(/2))
  2167. IGMN=MIN(IGAU,VELCHE(/1))
  2168. WORK(IE)=VELCHE(IGMN,IBMN)
  2169. IE=IE+1
  2170. ENDDO
  2171. * Recuperation des variables internes (stockees dans WORK)
  2172. IE3=IE
  2173. MPTVAL=IVARI
  2174. DO i=1,NVARI+NVARF
  2175. MELVAL=IVAL(i)
  2176. IBMN=MIN(IB ,VELCHE(/2))
  2177. IGMN=MIN(IGAU,VELCHE(/1))
  2178. WORK(IE)=VELCHE(IGMN,IBMN)
  2179. IE=IE+1
  2180. ENDDO
  2181. CALL DOUOTA(WORK(IE1),CMATE,IFOUR,MAPL,WORK(IE2),
  2182. & WORK(IE3),LHOOK,DDHOOK,IRET)
  2183. ELSE
  2184. CALL DOUO88(WORK(IE1),CMATE,IFOUR,LHOOK,DDHOOK,IRET)
  2185. ENDIF
  2186. IF (IRET.EQ.0) THEN
  2187. KERRE=81
  2188. INTERR(1)=IFOUR
  2189. MOTERR(1:8)=CMATE
  2190. MOTERR(9:16)=NOMFR(MFR/2+1)
  2191. GOTO 8085
  2192. ENDIF
  2193. * Contribution du pt de Gauss IGAU a la matrice tangente elementaire
  2194. IF (IRIGE7.EQ.2) THEN
  2195. CALL BDBSTS(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  2196. ELSE
  2197. CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  2198. ENDIF
  2199. 4085 CONTINUE
  2200. * Fin de la boucle sur les points de Gauss
  2201. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  2202. IF (IRIGE7.EQ.2) THEN
  2203. CALL REMPMS(REL,LRE,RE(1,1,IB))
  2204. ELSE
  2205. CALL REMPMT(REL,LRE,RE(1,1,IB))
  2206. ENDIF
  2207. 3085 CONTINUE
  2208. * Fin de la boucle sur les elements
  2209. * Etiquette de gestion des erreurs
  2210. 8085 CONTINUE
  2211. * Menage local
  2212. SEGSUP,WRK1,WRK2,WRK3,WRK4
  2213. GOTO 510
  2214. *-----------------------------------------------------------------------
  2215. *-> Element JOI3 - Materiau ISOTROPE (MELE = 86)
  2216. *-----------------------------------------------------------------------
  2217. 86 CONTINUE
  2218. IF (CMATE.NE.'ISOTROPE') THEN
  2219. KERRE=834
  2220. MOTERR(1:8)=CMATE
  2221. GOTO 510
  2222. ENDIF
  2223. NBNO=NBNN
  2224. NBBB=NBNN
  2225. LW=100
  2226. SEGINI,WRK1,WRK2,WRK3,WRK4
  2227. * Boucle sur les elements de la sous-zone ISOU
  2228. DO 3086 IB=1,NBELEM
  2229. * Recuperation des coordonnees des noeuds de l'element IB
  2230. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  2231. * Mise a zero de la matrice de rigidite elementaire (IB)
  2232. CALL ZERO(REL,LRE,LRE)
  2233. * Boucle sur les points de Gauss de l'element IB
  2234. DO 4086 IGAU=1,NBPGAU
  2235. * Calcul de la matrice B et du jacobien DJAC au point de Gauss IGAU
  2236. CALL JO3LOC(XE,SHPTOT,IGAU,NBNO,BPSS)
  2237. CALL BJO3(IGAU,MFR,IFOUR,NIFOUR,XE,BPSS,SHPTOT,SHPWRK,
  2238. & BGENE,DJAC,IRET)
  2239. DJAC=DJAC*POIGAU(IGAU)
  2240. * Erreur si le jacobien est <= 0.
  2241. IF (IRET.NE.0) THEN
  2242. KERRE=612
  2243. INTERR(1)=IB
  2244. CALL ERREUR(612)
  2245. GOTO 8086
  2246. ENDIF
  2247. * Recuperation des proprietes materielles (stockees dans WORK)
  2248. IE=1
  2249. IE1=IE
  2250. MPTVAL=IVAMAT
  2251. DO i=1,NMATT
  2252. MELVAL=IVAL(i)
  2253. IBMN=MIN(IB ,VELCHE(/2))
  2254. IGMN=MIN(IGAU,VELCHE(/1))
  2255. WORK(IE)=VELCHE(IGMN,IBMN)
  2256. IE=IE+1
  2257. ENDDO
  2258. * Calcul de la matrice de Hooke tangente au point de Gauss IGAU
  2259. IF (MAPL.EQ.35.OR.MAPL.EQ.56.OR.MAPL.EQ.91) THEN
  2260. * Recuperation des contraintes (stockees dans WORK)
  2261. IE2=IE
  2262. MPTVAL=IVACON
  2263. DO i=1,NSTRS
  2264. MELVAL=IVAL(i)
  2265. IBMN=MIN(IB ,VELCHE(/2))
  2266. IGMN=MIN(IGAU,VELCHE(/1))
  2267. WORK(IE)=VELCHE(IGMN,IBMN)
  2268. IE=IE+1
  2269. ENDDO
  2270. * Recuperation des variables internes (stockees dans WORK)
  2271. IE3=IE
  2272. MPTVAL=IVARI
  2273. DO i=1,NVARI+NVARF
  2274. MELVAL=IVAL(i)
  2275. IBMN=MIN(IB ,VELCHE(/2))
  2276. IGMN=MIN(IGAU,VELCHE(/1))
  2277. WORK(IE)=VELCHE(IGMN,IBMN)
  2278. IE=IE+1
  2279. ENDDO
  2280. CALL DOUOTA(WORK(IE1),CMATE,IFOUR,MAPL,WORK(IE2),
  2281. & WORK(IE3),LHOOK,DDHOOK,IRET)
  2282. ELSE
  2283. CALL DOUO88(WORK(IE1),CMATE,IFOUR,LHOOK,DDHOOK,IRET)
  2284. ENDIF
  2285. IF (IRET.EQ.0) THEN
  2286. KERRE=81
  2287. INTERR(1)=IFOUR
  2288. MOTERR(1:8)=CMATE
  2289. MOTERR(9:16)=NOMFR(MFR/2+1)
  2290. GOTO 8086
  2291. ENDIF
  2292. * Contribution du pt de Gauss IGAU a la matrice tangente elementaire
  2293. IF (IRIGE7.EQ.2) THEN
  2294. CALL BDBSTS(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  2295. ELSE
  2296. CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  2297. ENDIF
  2298. 4086 CONTINUE
  2299. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  2300. IF (IRIGE7.EQ.2) THEN
  2301. CALL REMPMS(REL,LRE,RE(1,1,IB))
  2302. ELSE
  2303. CALL REMPMT(REL,LRE,RE(1,1,IB))
  2304. ENDIF
  2305. 3086 CONTINUE
  2306. * Fin de la boucle sur les elements
  2307. * Etiquette de gestion des erreurs
  2308. 8086 CONTINUE
  2309. * Menage local
  2310. SEGSUP,WRK1,WRK2,WRK3,WRK4
  2311. GOTO 510
  2312. *-----------------------------------------------------------------------
  2313. * desactivation des segments propres a la zone geometrique ISOU
  2314. *-----------------------------------------------------------------------
  2315. 510 CONTINUE
  2316. IF (IPMATR.NE.0) THEN
  2317. * Symetrisation de la matrice si demandee
  2318. IF (IRIGE7.EQ.2 .AND. IKTSYM.EQ.1) THEN
  2319. LRE = RE(/1)
  2320. DO 5100 IB=1,NBELEM
  2321. DO i=1,LRE
  2322. DO j=i+1,LRE
  2323. RE(i,j,IB) = 0.5*( RE(i,j,IB)+RE(j,i,IB) )
  2324. RE(j,i,IB) = RE(i,j,IB)
  2325. ENDDO
  2326. ENDDO
  2327. 5100 CONTINUE
  2328. ENDIF
  2329. ENDIF
  2330. IF (IPDSCR.NE.0) SEGDES,DESCR
  2331. 515 CONTINUE
  2332. IF (ISUPMA.EQ.1) THEN
  2333. CALL DTMVAL(IVACAR,3)
  2334. ELSE
  2335. CALL DTMVAL(IVACAR,1)
  2336. ENDIF
  2337. IF (ISUPMA.EQ.1) THEN
  2338. CALL DTMVAL(IVAMAT,3)
  2339. ELSE
  2340. CALL DTMVAL(IVAMAT,1)
  2341. ENDIF
  2342. IF (ISUPVA.EQ.1) THEN
  2343. CALL DTMVAL(IVARI,3)
  2344. ELSE
  2345. CALL DTMVAL(IVARI,1)
  2346. ENDIF
  2347. IF (ISUPCO.EQ.1) THEN
  2348. CALL DTMVAL(IVACON,3)
  2349. ELSE
  2350. CALL DTMVAL(IVACON,1)
  2351. ENDIF
  2352. ** MELEME=IPMAIL
  2353. * Mise a jour du segment MRIGID en cas de SUCCES !
  2354. IF (KERRE.EQ.0) THEN
  2355. COERIG(ISOU)=1.D0
  2356. IRIGEL(1,ISOU)=IPMAGD
  2357. IRIGEL(2,ISOU)=0
  2358. IRIGEL(3,ISOU)=IPDSCR
  2359. IRIGEL(4,ISOU)=IPMATR
  2360. IRIGEL(5,ISOU)=NIFOUR
  2361. IRIGEL(6,ISOU)=0
  2362. IRIGEL(7,ISOU)=IRIGE7*(1-IKTSYM)
  2363. xmatri.symre=irigel(7,isou)
  2364. SEGDES,XMATRI
  2365. IRIGEL(8,ISOU)=0
  2366. * Sinon en cas d'ERREUR : sortie prematuree !
  2367. ELSE
  2368. * Affichage erreur si KERRE > 0 (car KERRE<0 qd erreur deja imprimee)
  2369. IF (KERRE.GT.0) CALL ERREUR(KERRE)
  2370. IF (IPDSCR.NE.0) SEGSUP,DESCR
  2371. IF (IPMATR.NE.0) SEGSUP,XMATRI
  2372. ** IF (IPMAGD.GT.0.AND.IPMAGD.NE.IPMAIL) THEN
  2373. ** MELEME=IPMAGD
  2374. ** SEGSUP,MELEME
  2375. ** ENDIF
  2376. GOTO 551
  2377. ENDIF
  2378. * Fin de la boucle (5000) de PARTITIONNEMENT du segment XMATRI
  2379. 5000 CONTINUE
  2380. *-----------------------------------------------------------------------
  2381. * Fin de la boucle sur les sous-zones du modele
  2382. *-----------------------------------------------------------------------
  2383. 500 CONTINUE
  2384.  
  2385. * Sortie du sous-programme
  2386. 551 CONTINUE
  2387. IF (KERRE.EQ.0) THEN
  2388. SEGDES,MRIGID
  2389. IPRIGI=MRIGID
  2390. ELSE
  2391. SEGSUP,MRIGID
  2392. IPRIGI=0
  2393. ENDIF
  2394. * Desactivation du modele "deroule"
  2395. 550 CONTINUE
  2396. MMODEL = IPMODL
  2397. SEGDES,MMODEL
  2398. meleme = MAILDG
  2399. IF (meleme.NE.0) SEGDES,meleme
  2400.  
  2401. c RETURN
  2402. END
  2403.  
  2404.  
  2405.  
  2406.  

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