Télécharger ktanga.eso

Retour à la liste

Numérotation des lignes :

ktanga
  1. C KTANGA SOURCE OF166741 25/02/21 21:17:50 12166
  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)
  1275. ENDIF
  1276. * Boucle sur les points de Gauss de l'element IB
  1277. ISDJC=0
  1278. DO 4004 IGAU=1,NBPGAU
  1279. * Recuperation de l'epaisseur si donnee
  1280. IF (MVALEP.GT.0) THEN
  1281. MELVAL=MVALEP
  1282. IBMN=MIN(IB ,NELEP)
  1283. IGMN=MIN(IGAU,NPGEP)
  1284. DIM3=VELCHE(IGMN,IBMN)
  1285. ENDIF
  1286. * Calcul de la matrice B et du jacobien DJAC au point de Gauss IGAU
  1287. CALL BMATST(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  1288. & MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,DIM3,
  1289. & XE,SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE)
  1290. IF (DJAC.EQ.0.) THEN
  1291. KERRE=259
  1292. INTERR(1)=IB
  1293. GOTO 8004
  1294. ENDIF
  1295. IF (DJAC.LT.0.) ISDJC=ISDJC+1
  1296. DJAC=ABS(DJAC)*POIGAU(IGAU)
  1297. C En cas d'elements incompressibles : BGENE selon la methode B-BARRE
  1298. IF (MFR.EQ.31) THEN
  1299. CALL BBAR(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  1300. & MELE,NBNN,LRE,IFOUR,NSTRS,XE,DJAC,A,BB,BGENE)
  1301. ENDIF
  1302.  
  1303. IRET=0
  1304. * Recuperation des proprietes materielles utiles selon le modele
  1305. MPTVAL=IVAMAT
  1306. IF (MAPL.EQ.5) THEN
  1307. MELVAL=IVAL(1)
  1308. IBMN=MIN(IB ,VELCHE(/2))
  1309. IGMN=MIN(IGAU,VELCHE(/1))
  1310. YYYY=VELCHE(IGMN,IBMN)
  1311. MELVAL=IVAL(3)
  1312. IBMN=MIN(IB ,IELCHE(/2))
  1313. IGMN=MIN(IGAU,IELCHE(/1))
  1314. IMMM=IELCHE(IGMN,IBMN)
  1315. CALL COTRA1(IMMM,YYYY,LTRAC,TRAC,NTRAC,KERRE)
  1316. ELSE IF (MAPL.EQ.54) THEN
  1317. MELVAL=IVAL(12)
  1318. IBMN=MIN(IB ,IELCHE(/2))
  1319. IGMN=MIN(IGAU,IELCHE(/1))
  1320. ITREV=IELCHE(IGMN,IBMN)
  1321. MELVAL=IVAL(13)
  1322. IBMN=MIN(IB ,IELCHE(/2))
  1323. IGMN=MIN(IGAU,IELCHE(/1))
  1324. ICOEV=IELCHE(IGMN,IBMN)
  1325. IPOS1=1
  1326. CALL COTRAB(ITREV,TRAC,LTRAC,IPOS1,0,NPOINT,KERRE)
  1327. IF (KERRE.NE.0) THEN
  1328. INTERR(1)=IB
  1329. INTERR(2)=IGAU
  1330. MOTERR(1:4)=NOMTP(MELE)
  1331. GOTO 8004
  1332. ENDIF
  1333. NTRAC1=NPOINT/2
  1334. IPOS2=IPOS1+NPOINT
  1335. CALL COTRAB(ICOEV,TRAC,LTRAC,IPOS2,0,NPOINT,KERRE)
  1336. NTRAC2=NPOINT/2
  1337. IRET=WRK5
  1338. ENDIF
  1339. IF (KERRE.NE.0) THEN
  1340. INTERR(1)=IB
  1341. INTERR(2)=IGAU
  1342. MOTERR(1:4)=NOMTP(MELE)
  1343. GOTO 8004
  1344. ENDIF
  1345. IF (BMATE) IRET=WTRAV
  1346. * Contribution du pt de Gauss IGAU a la matrice tangente elementaire
  1347. CALL DOHOT1(IVAMAT,NMATT,IVACON,NSTRS,IVARI,NVART,TRAC,
  1348. & LTRAC,IGAU,IB,MATE,MAPL,XPREC,DTPS,IFOUR,
  1349. & LHOOK,DDHOOK,IRET)
  1350. IF (IRET.NE.1) THEN
  1351. IF (IRET.EQ.-1) THEN
  1352. KERRE=275
  1353. INTERR(1)=IB
  1354. INTERR(2)=IGAU
  1355. MOTERR(1:4)=NOMTP(MELE)
  1356. C* ELSE IF (IRET.EQ.0) THEN
  1357. ELSE
  1358. KERRE=328
  1359. INTERR(1)=IFOUR
  1360. MOTERR(1:8)=NOMAT(MATE)
  1361. MOTERR(9:12)=NOMAC(MAPL)
  1362. MOTERR(13:20)=NOMFR(MFR)
  1363. ENDIF
  1364. GOTO 8004
  1365. ENDIF
  1366. IF (IRIGE7.EQ.2) THEN
  1367. CALL BDBSTS(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  1368. ELSE
  1369. CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  1370. ENDIF
  1371. 4004 CONTINUE
  1372. * Fin de la boucle sur les points de Gauss
  1373. IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN
  1374. KERRE=195
  1375. INTERR(1)=IB
  1376. GOTO 8004
  1377. ENDIF
  1378. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  1379. IF (IRIGE7.EQ.2)THEN
  1380. CALL REMPMS(REL,LRE,RE(1,1,IB))
  1381. ELSE
  1382. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1383. ENDIF
  1384. 3004 CONTINUE
  1385. * Fin de la boucle sur les elements
  1386. * Etiquette de gestion des erreurs
  1387. 8004 CONTINUE
  1388. * Menage local
  1389. SEGSUP,WRK1,WRK2
  1390. IF (MAPL.EQ.54) SEGSUP,WRK5
  1391. IF (BMATE) SEGSUP,WTRAV
  1392. GOTO 510
  1393. *-----------------------------------------------------------------------
  1394. *-> Elements de raccord liquide-solide :
  1395. * RAC2 LIA3 LIA4 RACO LICO LIC4 (MELE = 12 18 19 47 55 94)
  1396. * => Elements SANS RIGIDITE (elastique & tangente)
  1397. *-----------------------------------------------------------------------
  1398. 12 CONTINUE
  1399. C Les matrices elementaires sont nulles et ont ete mises a zero lors de
  1400. C l'initialisation du segment XMATRI !
  1401. GOTO 510
  1402. *-----------------------------------------------------------------------
  1403. *-> Element de type "Relations de conformites" (MELE=22)
  1404. * Matrice TANGENTE = Matrice de RIGIDITE (ELASTIQUE) (cf. RIGI1)
  1405. *-----------------------------------------------------------------------
  1406. 22 CONTINUE
  1407. IF (ITYPEL.NE.22) THEN
  1408. KERRE=977
  1409. GOTO 510
  1410. ENDIF
  1411. CALL RIGSUR(ISOU ,IPMATR, IMODEL)
  1412. GOTO 510
  1413. *-----------------------------------------------------------------------
  1414. *-> Element de type "Relations de conformites " (MELE=259)
  1415. * Matrice TANGENTE = Matrice de RIGIDITE (ELASTIQUE) (cf. RIGI1)
  1416. *-----------------------------------------------------------------------
  1417. 259 CONTINUE
  1418. IF (ITYPEL.NE.259) THEN
  1419. KERRE=977
  1420. GOTO 510
  1421. ENDIF
  1422. CALL RIGSUR(ISOU ,IPMATR, IMODEL)
  1423. * Cas particulier si formulation X-FEM
  1424. IF (IMODEL.INFELE(13).EQ.63) then
  1425. CALL RIGSUX(ISOU ,IPMATR, IMODEL)
  1426. ENDIF
  1427.  
  1428. GOTO 510
  1429. *-----------------------------------------------------------------------
  1430. *-> Elements COQ3 COQ8 COQ2 COQ4 COQ6 DST (MELE = 27 41 44 49 56 93)
  1431. *-> Cas particulier : DKT elastique (MELE = 28 avec MAPL = 0)
  1432. * Matrice TANGENTE = RIGIDITE ELASTIQUE (Appel a RIGI3)
  1433. *-----------------------------------------------------------------------
  1434. 27 CONTINUE
  1435. MPTVAL=IVAMAT
  1436. NBGMAT = 0
  1437. NELMAT = 0
  1438. IF (CMATE.EQ.'SECTION') THEN
  1439. DO i=1,IVAL(/1)
  1440. MELVAL=IVAL(i)
  1441. IF (MELVAL.NE.0)THEN
  1442. NBGMAT=MAX(NBGMAT,IELCHE(/1))
  1443. NELMAT=MAX(NELMAT,IELCHE(/2))
  1444. ENDIF
  1445. ENDDO
  1446. ELSE
  1447. DO i=1,IVAL(/1)
  1448. MELVAL=IVAL(i)
  1449. IF (MELVAL.NE.0)THEN
  1450. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  1451. NELMAT=MAX(NELMAT,VELCHE(/2))
  1452. ENDIF
  1453. ENDDO
  1454. ENDIF
  1455. CALL RIGI3(MATE,MELE,IPMAIL,IPMINT,IPMIN1,NBPGAU,LRE,NSTRS,
  1456. & IVAMAT,IVACAR,CMATE,MFR,NBGMAT,NELMAT,1,LHOOK,
  1457. & NMATT,LW,NPINT,IPMATR,IIPDPG)
  1458. IF (IERR.NE.0) KERRE=-ABS(IERR)
  1459. GOTO 510
  1460. *-----------------------------------------------------------------------
  1461. *-> Element DKT (MELE = 28)
  1462. *-----------------------------------------------------------------------
  1463. 28 CONTINUE
  1464. IF (MAPL.EQ.0) GOTO 27
  1465. NBNO=NBNN
  1466. NBBB=NBNN
  1467. SEGINI,WRK1,WRK2,WRK4
  1468. IF (MAPL.EQ.5) CALL ZDANUL(TRAC,LTRAC)
  1469. * Preparation a la recuperation de caracteristiques geometriques
  1470. MPTVAL=IVACAR
  1471. EXCEN=0.D0
  1472. MVALEX=IVAL(2)
  1473. IF (MVALEX.GT.0) THEN
  1474. MELVAL=MVALEX
  1475. NELEX=VELCHE(/2)
  1476. NPGEX=VELCHE(/1)
  1477. ENDIF
  1478. CALFA=0.666666666666666666666666666666666666666666666D0
  1479. MVALCA=IVAL(NCART)
  1480. IF (MVALCA.GT.0) THEN
  1481. MELVAL=MVALCA
  1482. NELCA=VELCHE(/2)
  1483. NPGCA=VELCHE(/1)
  1484. ENDIF
  1485. * Boucle sur les elements de la sous-zone ISOU
  1486. DO 3028 IB=1,NBELEM
  1487. * Recuperation des coordonnees des noeuds de l'element IB
  1488. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1489. * Passage dans le repere local de l'element
  1490. CALL VPAST(XE,BPSS)
  1491. CALL VCORLC(XE,XEL,BPSS)
  1492. * Mise a zero de la matrice de rigidite elementaire (IB)
  1493. CALL ZERO(REL,LRE,LRE)
  1494. * Boucle sur les points de Gauss de l'element IB
  1495. DO 4028 IGAU=1,NBPGAU
  1496. * Recuperation des caracteristiques geometriques
  1497. MPTVAL=IVACAR
  1498. MELVAL=IVAL(1)
  1499. IBMN=MIN(IB ,VELCHE(/2))
  1500. IGMN=MIN(IGAU,VELCHE(/1))
  1501. EPAIST=VELCHE(IGMN,IBMN)
  1502. IF (MVALEX.GT.0) THEN
  1503. MELVAL=MVALEX
  1504. IBMN=MIN(IB ,NELEX)
  1505. IGMN=MIN(IGAU,NPGEX)
  1506. EXCEN=VELCHE(IGMN,IBMN)
  1507. ENDIF
  1508. IF (MVALCA.GT.0) THEN
  1509. MELVAL=MVALCA
  1510. IBMN=MIN(IB ,NELCA)
  1511. IGMN=MIN(IGAU,NPGCA)
  1512. CALFA=VELCHE(IGMN,IBMN)
  1513. ENDIF
  1514. * Calcul de la matrice B et du jacobien DJAC au point de Gauss IGAU
  1515. CALL BMAT28(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  1516. & MELE,MFR,NBNO,LRE,IFOUR,NSTRS,0,1.D0,XEL,
  1517. & SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE)
  1518. DJAC=DJAC*POIGAU(IGAU)
  1519. * Modification de la matrice B en cas d'excentrement non nul
  1520. IF (ABS(EXCEN).GT.0.) THEN
  1521. DO i=1,3
  1522. k=i+3
  1523. DO j=1,LRE
  1524. BGENE(i,j)=BGENE(i,j)+EXCEN*BGENE(k,j)
  1525. ENDDO
  1526. ENDDO
  1527. ENDIF
  1528. * Recuperation des proprietes materielles utiles selon le modele
  1529. IF (MAPL.EQ.5) THEN
  1530. MPTVAL=IVAMAT
  1531. MELVAL=IVAL(1)
  1532. IBMN=MIN(IB ,VELCHE(/2))
  1533. IGMN=MIN(IGAU,VELCHE(/1))
  1534. YYYY=VELCHE(IGMN,IBMN)
  1535. MELVAL=IVAL(3)
  1536. IBMN=MIN(IB ,IELCHE(/2))
  1537. IGMN=MIN(IGAU,IELCHE(/1))
  1538. IMMM=IELCHE(IGMN,IBMN)
  1539. CALL COTRA1(IMMM,YYYY,LTRAC,TRAC,NTRAC,KERRE)
  1540. IF (KERRE.NE.0) THEN
  1541. INTERR(1)=IB
  1542. INTERR(2)=IGAU
  1543. MOTERR(1:4)=NOMTP(MELE)
  1544. GOTO 8028
  1545. ENDIF
  1546. ENDIF
  1547. * DOHOT3 se chargera de convertir les efforts generalises (IVACON)
  1548. * et les variables internes generalisees (IVARI) en contraintes et
  1549. * variables internes "locales"
  1550. * Contribution du pt de Gauss IGAU a la matrice tangente elementaire
  1551. CALL DOHOT3(IVAMAT,NMATT,IVACON,NSTRS,IVARI,NVART,
  1552. & TRAC,LTRAC,CALFA,EPAIST,IGAU,IB,MATE,MAPL,
  1553. & XPREC,DTPS,IFOUR,LHOOK,DDHOOK,IRET)
  1554. IF (IRET.NE.1) THEN
  1555. IF (IRET.EQ.-1) THEN
  1556. KERRE=275
  1557. INTERR(1)=IB
  1558. INTERR(2)=IGAU
  1559. MOTERR(1:4)=NOMTP(MELE)
  1560. C* ELSE IF (IRET.EQ.0) THEN
  1561. ELSE
  1562. KERRE=328
  1563. INTERR(1)=IFOUR
  1564. MOTERR(1:8)=NOMAT(MATE)
  1565. MOTERR(9:12)=NOMAC(MAPL)
  1566. MOTERR(13:20)=NOMFR(MFR)
  1567. ENDIF
  1568. GOTO 8028
  1569. ENDIF
  1570. CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  1571. 4028 CONTINUE
  1572. * Fin de la boucle sur les points de Gauss
  1573. * Calcul de la matrice tangente elementaire (IB)
  1574. REL( 6, 6)=REL(5,5)*1.D-7
  1575. REL(12,12)=REL(6,6)
  1576. REL(18,18)=REL(6,6)
  1577. CALL TRANSK(REL,BPSS,LRE,3,1)
  1578. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  1579. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1580. 3028 CONTINUE
  1581. * Fin de la boucle sur les elements
  1582. * Etiquette de gestion des erreurs
  1583. 8028 CONTINUE
  1584. * Menage local
  1585. SEGSUP,WRK1,WRK2,WRK4
  1586. GOTO 510
  1587. *-----------------------------------------------------------------------
  1588. *-> Element POUTre (MELE=29)
  1589. *-> Cas particulier : Element TIMO avec materiau ISOTROPE (MELE=84)
  1590. *-----------------------------------------------------------------------
  1591. 29 CONTINUE
  1592. NBBB=NBNN
  1593. SEGINI,WRK1,WRK3
  1594. * Boucle sur les elements de la sous-zone ISOU
  1595. DO 3029 IB=1,NBELEM
  1596. * Recuperation des coordonnees des noeuds de l'element IB
  1597. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1598. * Recuperation des caracteristiques geometriques (stockees dans WORK)
  1599. MPTVAL=IVACAR
  1600. DO IC=1,NCART
  1601. r_z=0.
  1602. IF (IVAL(IC).NE.0) THEN
  1603. MELVAL=IVAL(IC)
  1604. IBMN=MIN(IB,VELCHE(/2))
  1605. DO IGAU=1,NBNN
  1606. IGMN=MIN(IGAU,VELCHE(/1))
  1607. r_z=r_z+VELCHE(IGMN,IBMN)
  1608. ENDDO
  1609. r_z=r_z/NBNN
  1610. ENDIF
  1611. WORK(IC)=r_z
  1612. ENDDO
  1613. * Recuperation des caracteristiques elastiques (stockees dans WORK)
  1614. MPTVAL=IVAMAT
  1615. MELVAL=IVAL(1)
  1616. IBMN=MIN(IB ,VELCHE(/2))
  1617. YOUNG=VELCHE(1,IBMN)
  1618. MELVAL=IVAL(2)
  1619. IBMN=MIN(IB ,VELCHE(/2))
  1620. XNU=VELCHE(1,IBMN)
  1621. CISAIL=0.5*YOUNG/(1.+XNU)
  1622. IF (BPLAN) THEN
  1623. WORK(4)=YOUNG
  1624. WORK(5)=CISAIL
  1625. ELSE
  1626. WORK(10)=YOUNG
  1627. WORK(11)=CISAIL
  1628. ENDIF
  1629. * Modification de caracteristiques (INRY ou SECZ) selon les modeles
  1630. MPTVAL=IVARI
  1631. IF (MAPL.EQ.57.OR.MAPL.EQ.59) THEN
  1632. MELVAL=IVAL(2)
  1633. IBMN=MIN(IB,VELCHE(/2))
  1634. WORK(2)=VELCHE(1,IBMN)/YOUNG
  1635. ELSE IF(MAPL.EQ.58.OR.MAPL.EQ.60) THEN
  1636. MELVAL=IVAL(2)
  1637. IBMN=MIN(IB,VELCHE(/2))
  1638. WORK(6)=VELCHE(1,IBMN)/CISAIL
  1639. ENDIF
  1640. * Calcul de la rigidite elementaire tangente (IB)
  1641. IF (MELE.EQ.84) THEN
  1642. IF (BPLAN) THEN
  1643. CALL TIMRI2(REL,LRE,WORK,XE,WORK(12),IRET)
  1644. ELSE
  1645. CALL TIMRIG(REL,LRE,WORK,XE,WORK(12),IRET)
  1646. ENDIF
  1647. ELSE
  1648. IF (BPLAN) THEN
  1649. CALL POURI2(REL,LRE,WORK,XE,WORK(12),IRET)
  1650. ELSE
  1651. CALL POURIG(REL,LRE,WORK,XE,WORK(12),IRET)
  1652. ENDIF
  1653. ENDIF
  1654. IF (IRET.NE.0) THEN
  1655. IF (IRET.EQ.1) KERRE=128
  1656. IF (IRET.EQ.2) KERRE=138
  1657. INTERR(1)=ISOUS
  1658. INTERR(2)=IB
  1659. GOTO 8029
  1660. ENDIF
  1661. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB)
  1662. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1663. 3029 CONTINUE
  1664. * Fin de la boucle sur les elements
  1665. * Etiquette de gestion des erreurs
  1666. 8029 CONTINUE
  1667. * Menage local
  1668. SEGSUP,WRK1,WRK3
  1669. GOTO 510
  1670. *-----------------------------------------------------------------------
  1671. *-> Elements linespring LISP et LISM en nonlineaire (MELE = 30 50)
  1672. *-----------------------------------------------------------------------
  1673. 30 CONTINUE
  1674. IF (MAPL.EQ.0) GOTO 42
  1675. NBBB=NBNN
  1676. SEGINI,WRK1,WRK3
  1677. * Boucle sur les elements de la sous-zone ISOU
  1678. DO 3030 IB=1,NBELEM
  1679. * Recuperation des coordonnees des noeuds de l'element IB
  1680. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1681. IE=1
  1682. * Recuperation des proprietes materielles (stockees dans WORK)
  1683. IE1=IE
  1684. MPTVAL=IVAMAT
  1685. DO IC=1,NBPGAU
  1686. DO i=1,2
  1687. MELVAL=IVAL(i)
  1688. IGMN=MIN(IC,VELCHE(/1))
  1689. IBMN=MIN(IB,VELCHE(/2))
  1690. WORK(IE)=VELCHE(IGMN,IBMN)
  1691. IE=IE+1
  1692. ENDDO
  1693. DO i=3,4
  1694. WORK(IE)=0.D0
  1695. IE=IE+1
  1696. ENDDO
  1697. MELVAL=IVAL(3)
  1698. IGMN=MIN(IC,VELCHE(/1))
  1699. IBMN=MIN(IB,VELCHE(/2))
  1700. WORK(IE)=VELCHE(IGMN,IBMN)
  1701. IE=IE+1
  1702. ENDDO
  1703. * Recuperation des contraintes (stockees dans WORK)
  1704. IE2=IE
  1705. MPTVAL=IVACON
  1706. DO IC=1,NBGS
  1707. DO i=1,NSTRS
  1708. MELVAL=IVAL(i)
  1709. IGMN=MIN(IC,VELCHE(/1))
  1710. IBMN=MIN(IB ,VELCHE(/2))
  1711. WORK(IE)=VELCHE(IGMN,IBMN)
  1712. IE=IE+1
  1713. ENDDO
  1714. ENDDO
  1715. * Recuperation des caracteristiques geometriques (stockees dans WORK)
  1716. IE3=IE
  1717. MPTVAL=IVACAR
  1718. DO IC=1,NBPGAU
  1719. DO i=1,NCART
  1720. MELVAL=IVAL(i)
  1721. IGMN=MIN(IC,VELCHE(/1))
  1722. IBMN=MIN(IB,VELCHE(/2))
  1723. WORK(IE)=VELCHE(IGMN,IBMN)
  1724. IE=IE+1
  1725. ENDDO
  1726. ENDDO
  1727. * Recuperation des variables internes (stockees dans WORK)
  1728. IE4=IE
  1729. MPTVAL=IVARI
  1730. DO IC=1,NBGS
  1731. DO i=1,NVART
  1732. MELVAL=IVAL(i)
  1733. IGMN=MIN(IC,VELCHE(/1))
  1734. IBMN=MIN(IB,VELCHE(/2))
  1735. WORK(IE)=VELCHE(IGMN,IBMN)
  1736. IE=IE+1
  1737. ENDDO
  1738. ENDDO
  1739. IE5=IE+1
  1740. * Calcul de la rigidite elementaire tangente (IB)
  1741. CALL LISPKT(XE,WORK(IE1),WORK(IE2),WORK(IE3),WORK(IE4),NSTRS,
  1742. & NBGS,NBPGAU,MELE,XPREC,WORK(IE5),REL,I70,I157,
  1743. & I158,IRET,KERRE)
  1744. IF (IRET.EQ.-1.OR.KERRE.NE.0) THEN
  1745. KERRE=270
  1746. IF (IRET.EQ.-1) KERRE=275
  1747. INTERR(1)=IB
  1748. INTERR(2)=1
  1749. MOTERR(1:4)=NOMTP(MELE)
  1750. GOTO 8030
  1751. ENDIF
  1752. IF (I158.EQ.1) THEN
  1753. KERRE=158
  1754. INTERR(1)=IB
  1755. GOTO 8030
  1756. ENDIF
  1757. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  1758. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1759. 3030 CONTINUE
  1760. * Fin de la boucle sur les elements
  1761. * Etiquette de gestion des erreurs
  1762. 8030 CONTINUE
  1763. * Menage local
  1764. SEGSUP,WRK1,WRK3
  1765. GOTO 510
  1766. *-----------------------------------------------------------------------
  1767. *-> Elements liquide LTR3 LQU4 LCU8 LPR6 LTE4 LPY5 (MELE = 35 a 40)
  1768. * Elements de surface libre LSU2 LSU3 LSU4 (MELE = 48 53 54)
  1769. * Elements poreux TRIP QUAP CUBP TETP PRIP (MELE = 79 a 83)
  1770. * Elements joints poreux JOP3 JOP6 JOP8 (MELE = 108 a 110)
  1771. * Elements massifs polygonaux POLY (MELE = 111 a 122)
  1772. * Matrice TANGENTE = RIGIDITE ELASTIQUE (Appel a RIGI2)
  1773. *-----------------------------------------------------------------------
  1774. 35 CONTINUE
  1775. NCAR1 = NCART + 1
  1776. MPTVAL=IVAMAT
  1777. NBGMAT = 0
  1778. NELMAT = 0
  1779. IF (CMATE.EQ.'SECTION') THEN
  1780. DO i=1,IVAL(/1)
  1781. IF (IVAL(i).NE.0) THEN
  1782. MELVAL=IVAL(i)
  1783. NBGMAT=MAX(NBGMAT,IELCHE(/1))
  1784. NELMAT=MAX(NELMAT,IELCHE(/2))
  1785. ENDIF
  1786. ENDDO
  1787. ELSE
  1788. DO i=1,IVAL(/1)
  1789. IF (IVAL(i).NE.0) THEN
  1790. MELVAL=IVAL(i)
  1791. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  1792. NELMAT=MAX(NELMAT,VELCHE(/2))
  1793. ENDIF
  1794. ENDDO
  1795. ENDIF
  1796. noer=0
  1797. CALL RIGI2 (MATE,MELE,IPMAIL,IPMINT,NBPGAU,LRE,NSTRS,IVAMAT,
  1798. & IVACAR,CMATE,MFR,NBGMAT,NELMAT,1,LHOOK,NMATT,IPORE,
  1799. & NDDL,IPMATR,IIPDPG,NCAR1,melpha,noer)
  1800. IF (IERR.NE.0) KERRE=-ABS(IERR)
  1801. GOTO 510
  1802. *-----------------------------------------------------------------------
  1803. *-> Elements TUYA POI1 JOT3 JOI4 TRIH TUYO (MELE = 42 45 87 88 92 96)
  1804. * LSE2 LITU BAR3 BAEX LIA2 QUAH CUBH (MELE = 97 98 123 a 127)
  1805. * TRH6 JCT3 JCI4 JGI2 JGT3 JGI4 (MELE = 157 168 a 172)
  1806. * CIFL SURE?? SHB8 (MELE = 258 259? 260)
  1807. *-> Cas particuliers : LISP & LISM en elasticite (MELE= 30 50 & MAPL=0)
  1808. * TUFI en elasticite (MELE=43 & MAPL=0)
  1809. * Matrice TANGENTE = RIGIDITE ELASTIQUE (Appel a RIGI4)
  1810. *-----------------------------------------------------------------------
  1811. 42 CONTINUE
  1812. MPTVAL=IVAMAT
  1813. NBGMAT = 0
  1814. NELMAT = 0
  1815. IF (CMATE.EQ.'SECTION') THEN
  1816. DO i=1,IVAL(/1)
  1817. IF (IVAL(i).NE.0)THEN
  1818. MELVAL=IVAL(i)
  1819. NBGMAT=MAX(NBGMAT,IELCHE(/1))
  1820. NELMAT=MAX(NELMAT,IELCHE(/2))
  1821. ENDIF
  1822. ENDDO
  1823. ELSE
  1824. DO i=1,IVAL(/1)
  1825. IF (IVAL(i).NE.0)THEN
  1826. MELVAL=IVAL(i)
  1827. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  1828. NELMAT=MAX(NELMAT,VELCHE(/2))
  1829. ENDIF
  1830. ENDDO
  1831. ENDIF
  1832. CALL RIGI4(MATE,MELE,IPMAIL,IPMINT,NBPGAU,LRE,NSTRS,
  1833. & IVAMAT,IVACAR,IVECT,CMATE,MFR,NBGMAT,NELMAT,1,
  1834. & LHOOK,NMATT,NCART,ISOUS,LW,IPORE,IPMATR,IIPDPG)
  1835. IF (IERR.NE.0) KERRE=-ABS(IERR)
  1836. GOTO 510
  1837. *-----------------------------------------------------------------------
  1838. *-> Element TUFI en non lineaire (MELE=43)
  1839. *-----------------------------------------------------------------------
  1840. 43 CONTINUE
  1841. IF (MAPL.EQ.0) GOTO 42
  1842. C* Temporaire : si SIGF n'est pas definie, on utilise la matrice elastique
  1843. MPTVAL=IVAMAT
  1844. IF (IVAL(3).EQ.0) GOTO 42
  1845. NBBB=NBNN
  1846. SEGINI,WRK1,WRK3
  1847. * Boucle sur les elements de la sous-zone ISOU
  1848. DO 3043 IB=1,NBELEM
  1849. * Recuperation des proprietes materielles (stockees dans WORK)
  1850. IE =1
  1851. IE1=IE
  1852. MPTVAL=IVAMAT
  1853. DO IC=1,NBPGAU
  1854. DO i=1,2
  1855. MELVAL=IVAL(i)
  1856. IGMN=MIN(IC,VELCHE(/1))
  1857. IBMN=MIN(IB,VELCHE(/2))
  1858. WORK(IE)=VELCHE(IGMN,IBMN)
  1859. IE=IE+1
  1860. ENDDO
  1861. DO i=3,4
  1862. WORK(IE)=0.D0
  1863. IE=IE+1
  1864. ENDDO
  1865. MELVAL=IVAL(3)
  1866. IF (MELVAL.NE.0) THEN
  1867. IGMN=MIN(IC,VELCHE(/1))
  1868. IBMN=MIN(IB,VELCHE(/2))
  1869. WORK(IE)=VELCHE(IGMN,IBMN)
  1870. ELSE
  1871. WORK(IE)=0.D0
  1872. ENDIF
  1873. IE=IE+1
  1874. DO i=6,7
  1875. WORK(IE)=0.D0
  1876. IE=IE+1
  1877. ENDDO
  1878. ENDDO
  1879. * Recuperation des contraintes (stockees dans WORK)
  1880. IE2=IE
  1881. MPTVAL=IVACON
  1882. DO IC=1,NBGS
  1883. DO i=1,NSTRS
  1884. MELVAL=IVAL(i)
  1885. IGMN=MIN(IC,VELCHE(/1))
  1886. IBMN=MIN(IB,VELCHE(/2))
  1887. WORK(IE)=VELCHE(IGMN,IBMN)
  1888. IE=IE+1
  1889. ENDDO
  1890. ENDDO
  1891. * Recuperation des caracteristiques geometriques (stockees dans WORK)
  1892. IE3=IE
  1893. MPTVAL=IVACAR
  1894. DO IC=1,NBPGAU
  1895. DO i=1,8
  1896. MELVAL=IVAL(i)
  1897. IGMN=MIN(IC,VELCHE(/1))
  1898. IBMN=MIN(IB,VELCHE(/2))
  1899. WORK(IE)=VELCHE(IGMN,IBMN)
  1900. IE=IE+1
  1901. ENDDO
  1902. WORK(IE)=0.D0
  1903. IE=IE+1
  1904. ENDDO
  1905. * Recuperation des variables internes (stockees dans WORK)
  1906. IE4=IE
  1907. MPTVAL=IVARI
  1908. DO IC=1,NBGS
  1909. DO i=1,NVART
  1910. MELVAL=IVAL(i)
  1911. IGMN=MIN(IC,VELCHE(/1))
  1912. IBMN=MIN(IB,VELCHE(/2))
  1913. WORK(IE)=VELCHE(IGMN,IBMN)
  1914. IE=IE+1
  1915. ENDDO
  1916. ENDDO
  1917. IE5=IE+1
  1918. * Calcul de la rigidite elementaire tangente (IB)
  1919. CALL TUFIKT(WORK(IE1),WORK(IE2),WORK(IE3),WORK(IE4),REL,XPREC,
  1920. & IRET)
  1921. IF (IRET.NE.0) THEN
  1922. INTERR(1)=ISOUS
  1923. INTERR(2)=IB
  1924. IF (IRET.EQ.1) KERRE=137
  1925. IF (IRET.EQ.2) KERRE=123
  1926. IF (IRET.EQ.3) KERRE=266
  1927. IF (IRET.EQ.4) THEN
  1928. KERRE=275
  1929. INTERR(1)=IB
  1930. INTERR(2)=1
  1931. MOTERR(1:4)=NOMTP(MELE)
  1932. ENDIF
  1933. GOTO 8043
  1934. ENDIF
  1935. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  1936. CALL REMPMT(REL,LRE,RE(1,1,IB))
  1937. 3043 CONTINUE
  1938. * Fin de la boucle sur les elements
  1939. * Etiquette de gestion des erreurs
  1940. 8043 CONTINUE
  1941. * Menage local
  1942. SEGSUP,WRK1,WRK3
  1943. GOTO 510
  1944. *-----------------------------------------------------------------------
  1945. *-> Elements BARRe et CERCe (MELE = 46 95)
  1946. *-----------------------------------------------------------------------
  1947. 46 CONTINUE
  1948. IF (MELE.EQ.95.AND.(IFOUR.NE.0.AND.IFOUR.NE.1)) GOTO 99
  1949. NBBB=NBNN
  1950. SEGINI,WRK1,WRK3
  1951. MPTVAL=IVACAR
  1952. MELVAL=IVAL(1)
  1953. NELCAR=VELCHE(/2)
  1954. MELCAR=IVAL(1)
  1955. * Boucle sur les elements de la sous-zone ISOU
  1956. DO 3046 IB=1,NBELEM
  1957. * Recuperation des coordonnees des noeuds de l'element IB
  1958. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  1959. * Recuperation de la section de l'element IB
  1960. MELVAL=MELCAR
  1961. IBMN=MIN(IB,NELCAR)
  1962. SECT=VELCHE(1,IBMN)
  1963. * Recuperation du module tangent selon le modele utilise
  1964. MPTVAL=IVARI
  1965. IF (MAPL.EQ.93) THEN
  1966. MELVAL=IVAL(16)
  1967. IBMN=MIN(IB,VELCHE(/2))
  1968. YOUNGT=VELCHE(1,IBMN)
  1969. ELSE IF (MAPL.EQ.92) THEN
  1970. MELVAL=IVAL(6)
  1971. IBMN=MIN(IB,VELCHE(/2))
  1972. YOUNGT=VELCHE(1,IBMN)
  1973. ELSE IF (MAPL.EQ.39) THEN
  1974. MELVAL=IVAL(6)
  1975. IBMN=MIN(IB,VELCHE(/2))
  1976. YOUNGT=VELCHE(1,IBMN)
  1977. ELSE IF (MAPL.EQ.40) THEN
  1978. MELVAL=IVAL(4)
  1979. IBMN=MIN(IB,VELCHE(/2))
  1980. YOUNGT=VELCHE(1,IBMN)
  1981. ELSE IF (MAPL.EQ.0) THEN
  1982. MPTVAL=IVAMAT
  1983. MELVAL=IVAL(1)
  1984. IBMN=MIN(IB,VELCHE(/2))
  1985. YOUNGT=VELCHE(1,IBMN)
  1986. ELSE
  1987. KERRE=81
  1988. MOTERR(1:8)=CMATE
  1989. MOTERR(9:16)=NOMFR(MFR/2+1)
  1990. INTERR(1)=IFOUR
  1991. GOTO 8046
  1992. ENDIF
  1993. * Calcul de la rigidite elementaire tangente (IB)
  1994. XHOOK=YOUNGT*SECT
  1995. IF (MELE.EQ.46) THEN
  1996. CALL BARRIG(REL,LRE,XHOOK,XE,IRET)
  1997. IF (IRET.EQ.1) KERRE=128
  1998. ELSE IF (MELE.EQ.95) THEN
  1999. CALL CERRIG(REL,LRE,XHOOK,XE,IRET)
  2000. IF (IRET.EQ.1) KERRE=601
  2001. ENDIF
  2002. IF (KERRE.NE.0) THEN
  2003. INTERR(1)=ISOUS
  2004. INTERR(2)=IB
  2005. GOTO 8046
  2006. ENDIF
  2007. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  2008. CALL REMPMT(REL,LRE,RE(1,1,IB))
  2009. 3046 CONTINUE
  2010. * Fin de la boucle sur les elements
  2011. * Etiquette de gestion des erreurs
  2012. 8046 CONTINUE
  2013. * Menage local
  2014. SEGSUP,WRK1,WRK3
  2015. GOTO 510
  2016. *-----------------------------------------------------------------------
  2017. *-> Element de poutre de TIMOschenko (MELE=84 - Formulation 'SECTION')
  2018. *-----------------------------------------------------------------------
  2019. 84 CONTINUE
  2020. IF (CMATE.EQ.'ISOTROPE') GOTO 29
  2021. * Remarque : La formulation SECTION est le seul cas prevu actuellement.
  2022. IF (CMATE.NE.'SECTION') THEN
  2023. KERRE=193
  2024. MOTERR(1:8)=NOMFR(MFR)
  2025. GOTO 510
  2026. ENDIF
  2027. NBBB=NBNN
  2028. SEGINI WRK1,WRK3
  2029. * Boucle sur les elements de la sous-zone ISOU
  2030. DO 3084 IB=1,NBELEM
  2031. * Recuperation des coordonnees des noeuds de l'element IB
  2032. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  2033. * Recuperation des caracteristiques geometriques (stockees dans WORK)
  2034. * Attention : on a tenu compte du fait que NCART=1
  2035. MPTVAL=IVACAR
  2036. IF (IVAL(NCART).NE.0) THEN
  2037. MELVAL=IVAL(NCART)
  2038. IBMN=MIN(IB,IELCHE(/2))
  2039. IP=IELCHE(1,IBMN)
  2040. IREF=(IP-1)*(IDIM+1)
  2041. DO IC=1,IDIM
  2042. WORK(IC)=XCOOR(IREF+IC)
  2043. ENDDO
  2044. ELSE
  2045. DO IC=1,IDIM
  2046. WORK(IC)=0.D0
  2047. ENDDO
  2048. ENDIF
  2049. MPTVAL=IVAMAT
  2050. * Traitement dans le cas de la formulation section
  2051. C** IF (CMATE.EQ.'SECTION') THEN
  2052. * Dans le cas d'un materiau elastique, on prend les matrices de Hooke
  2053. * si elles existent dans le MCHAML des proprietes materielles
  2054. IF (MAPL.EQ.0.AND.IVAL(3).NE.0) THEN
  2055. MELVAL=IVAL(3)
  2056. IF (IB.LE.IELCHE(/2).OR.IELCHE(/1).GT.1) THEN
  2057. IBMN=MIN(IB,IELCHE(/2))
  2058. MLREEL=IELCHE(1,IBMN)
  2059. SEGACT,MLREEL
  2060. CALL DOHOOO(PROG,LHOOK,DDHOOK)
  2061. SEGDES,MLREEL
  2062. ENDIF
  2063. ELSE
  2064. MELVAL=IVAL(1)
  2065. IBMN=MIN(IB,IELCHE(/2))
  2066. IPMOD=IELCHE(1,IBMN)
  2067. MELVAL=IVAL(2)
  2068. IBMN=MIN(IB,IELCHE(/2))
  2069. IPCAR=IELCHE(1,IBMN)
  2070. * Sinon calcul des matrices de Hooke a partir des proprietes elastiques
  2071. IF (MAPL.EQ.0) THEN
  2072. CALL FRIGIE(IPMOD,IPCAR,CRIGI,CMASS)
  2073. * Ou calcul des matrices de Hooke a partir des variables internes
  2074. ELSE
  2075. MPTVAL=IVARI
  2076. MELVAL=IVAL(2)
  2077. IBMN=MIN(IB,IELCHE(/2))
  2078. IPVAR=IELCHE(1,IBMN)
  2079. IF (IPVAR.NE.0) THEN
  2080. CALL FRIGTA(IPMOD,IPCAR,IPVAR,CRIGI)
  2081. ELSE
  2082. CALL FRIGIE(IPMOD,IPCAR,CRIGI,CMASS)
  2083. ENDIF
  2084. ENDIF
  2085. CALL DOHTIF(CRIGI,CMATE,IFOUR,LHOOK,DDHOOK,IRET)
  2086. ENDIF
  2087. IF (BPLAN) THEN
  2088. CALL TIFRI2(REL,LRE,XE,WORK(12),LHOOK,DDHOOK,IRET)
  2089. ELSE
  2090. CALL TIFRIG(REL,LRE,WORK,XE,WORK(12),LHOOK,DDHOOK,IRET)
  2091. ENDIF
  2092. C** ENDIF
  2093. IF (IRET.NE.0) THEN
  2094. INTERR(1)=ISOUS
  2095. INTERR(2)=IB
  2096. IF (IRET.EQ.1) KERRE=128
  2097. IF (IRET.EQ.2) KERRE=138
  2098. GOTO 8084
  2099. ENDIF
  2100. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  2101. CALL REMPMT(REL,LRE,RE(1,1,IB))
  2102. 3084 CONTINUE
  2103. * Fin de la boucle sur les elements
  2104. * Etiquette de gestion des erreurs
  2105. 8084 CONTINUE
  2106. * Menage local
  2107. SEGSUP,WRK1,WRK3
  2108. GOTO 510
  2109. *-----------------------------------------------------------------------
  2110. *-> Element JOI2 - Materiau ISOTROPE (MELE = 85)
  2111. *-----------------------------------------------------------------------
  2112. *OF A voir : Erreur pour joi_ama.dgibi car MAPL=47 et on passe dans
  2113. *OF DOUOTA qui ne traite que MAPL=35,56,91
  2114. 85 CONTINUE
  2115. IF (CMATE.NE.'ISOTROPE') THEN
  2116. KERRE=834
  2117. MOTERR(1:8)=CMATE
  2118. GOTO 510
  2119. ENDIF
  2120. NBNO=NBNN
  2121. NBBB=NBNN
  2122. LW=100
  2123. SEGINI,WRK1,WRK2,WRK3,WRK4
  2124. * Boucle sur les elements de la sous-zone ISOU
  2125. DO 3085 IB=1,NBELEM
  2126. * Recuperation des coordonnees des noeuds de l'element IB
  2127. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  2128. * Calcul des axes locaux de l'element IB
  2129. CALL JO2LOC(XE,SHPTOT,NBNO,XEL,BPSS,NOQUAL)
  2130. * Mise a zero de la matrice de rigidite elementaire (IB)
  2131. CALL ZERO(REL,LRE,LRE)
  2132. * Boucle sur les points de Gauss de l'element IB
  2133. DO 4085 IGAU=1,NBPGAU
  2134. * Calcul de la matrice B et du jacobien DJAC au point de Gauss IGAU
  2135. CALL BJO2(IGAU,MFR,IFOUR,NIFOUR,XEL,BPSS,SHPTOT,SHPWRK,
  2136. & BGENE,DJAC,IRET)
  2137. DJAC=DJAC*POIGAU(IGAU)
  2138. * Erreur si le jacobien est <= 0.
  2139. IF (IRET.NE.0) THEN
  2140. KERRE=612
  2141. INTERR(1)=IB
  2142. GOTO 8085
  2143. ENDIF
  2144. * Recuperation des proprietes materielles (stockees dans WORK)
  2145. IE=1
  2146. IE1=IE
  2147. MPTVAL=IVAMAT
  2148. DO i=1,NMATT
  2149. MELVAL=IVAL(i)
  2150. IBMN=MIN(IB ,VELCHE(/2))
  2151. IGMN=MIN(IGAU,VELCHE(/1))
  2152. WORK(IE)=VELCHE(IGMN,IBMN)
  2153. IE=IE+1
  2154. ENDDO
  2155. * Calcul de la matrice de Hooke tangente au point de Gauss IGAU
  2156. IF (MAPL.EQ.35.OR.MAPL.EQ.56.OR.MAPL.EQ.91) THEN
  2157. * Recuperation des contraintes (stockees dans WORK)
  2158. IE2=IE
  2159. MPTVAL=IVACON
  2160. DO i=1,NSTRS
  2161. MELVAL=IVAL(i)
  2162. IBMN=MIN(IB ,VELCHE(/2))
  2163. IGMN=MIN(IGAU,VELCHE(/1))
  2164. WORK(IE)=VELCHE(IGMN,IBMN)
  2165. IE=IE+1
  2166. ENDDO
  2167. * Recuperation des variables internes (stockees dans WORK)
  2168. IE3=IE
  2169. MPTVAL=IVARI
  2170. DO i=1,NVARI+NVARF
  2171. MELVAL=IVAL(i)
  2172. IBMN=MIN(IB ,VELCHE(/2))
  2173. IGMN=MIN(IGAU,VELCHE(/1))
  2174. WORK(IE)=VELCHE(IGMN,IBMN)
  2175. IE=IE+1
  2176. ENDDO
  2177. CALL DOUOTA(WORK(IE1),CMATE,IFOUR,MAPL,WORK(IE2),
  2178. & WORK(IE3),LHOOK,DDHOOK,IRET)
  2179. ELSE
  2180. CALL DOUO88(WORK(IE1),CMATE,IFOUR,LHOOK,DDHOOK,IRET)
  2181. ENDIF
  2182. IF (IRET.EQ.0) THEN
  2183. KERRE=81
  2184. INTERR(1)=IFOUR
  2185. MOTERR(1:8)=CMATE
  2186. MOTERR(9:16)=NOMFR(MFR/2+1)
  2187. GOTO 8085
  2188. ENDIF
  2189. * Contribution du pt de Gauss IGAU a la matrice tangente elementaire
  2190. IF (IRIGE7.EQ.2) THEN
  2191. CALL BDBSTS(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  2192. ELSE
  2193. CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  2194. ENDIF
  2195. 4085 CONTINUE
  2196. * Fin de la boucle sur les points de Gauss
  2197. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  2198. IF (IRIGE7.EQ.2) THEN
  2199. CALL REMPMS(REL,LRE,RE(1,1,IB))
  2200. ELSE
  2201. CALL REMPMT(REL,LRE,RE(1,1,IB))
  2202. ENDIF
  2203. 3085 CONTINUE
  2204. * Fin de la boucle sur les elements
  2205. * Etiquette de gestion des erreurs
  2206. 8085 CONTINUE
  2207. * Menage local
  2208. SEGSUP,WRK1,WRK2,WRK3,WRK4
  2209. GOTO 510
  2210. *-----------------------------------------------------------------------
  2211. *-> Element JOI3 - Materiau ISOTROPE (MELE = 86)
  2212. *-----------------------------------------------------------------------
  2213. 86 CONTINUE
  2214. IF (CMATE.NE.'ISOTROPE') THEN
  2215. KERRE=834
  2216. MOTERR(1:8)=CMATE
  2217. GOTO 510
  2218. ENDIF
  2219. NBNO=NBNN
  2220. NBBB=NBNN
  2221. LW=100
  2222. SEGINI,WRK1,WRK2,WRK3,WRK4
  2223. * Boucle sur les elements de la sous-zone ISOU
  2224. DO 3086 IB=1,NBELEM
  2225. * Recuperation des coordonnees des noeuds de l'element IB
  2226. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  2227. * Mise a zero de la matrice de rigidite elementaire (IB)
  2228. CALL ZERO(REL,LRE,LRE)
  2229. * Boucle sur les points de Gauss de l'element IB
  2230. DO 4086 IGAU=1,NBPGAU
  2231. * Calcul de la matrice B et du jacobien DJAC au point de Gauss IGAU
  2232. CALL JO3LOC(XE,SHPTOT,IGAU,NBNO,BPSS)
  2233. CALL BJO3(IGAU,MFR,IFOUR,NIFOUR,XE,BPSS,SHPTOT,SHPWRK,
  2234. & BGENE,DJAC,IRET)
  2235. DJAC=DJAC*POIGAU(IGAU)
  2236. * Erreur si le jacobien est <= 0.
  2237. IF (IRET.NE.0) THEN
  2238. KERRE=612
  2239. INTERR(1)=IB
  2240. CALL ERREUR(612)
  2241. GOTO 8086
  2242. ENDIF
  2243. * Recuperation des proprietes materielles (stockees dans WORK)
  2244. IE=1
  2245. IE1=IE
  2246. MPTVAL=IVAMAT
  2247. DO i=1,NMATT
  2248. MELVAL=IVAL(i)
  2249. IBMN=MIN(IB ,VELCHE(/2))
  2250. IGMN=MIN(IGAU,VELCHE(/1))
  2251. WORK(IE)=VELCHE(IGMN,IBMN)
  2252. IE=IE+1
  2253. ENDDO
  2254. * Calcul de la matrice de Hooke tangente au point de Gauss IGAU
  2255. IF (MAPL.EQ.35.OR.MAPL.EQ.56.OR.MAPL.EQ.91) THEN
  2256. * Recuperation des contraintes (stockees dans WORK)
  2257. IE2=IE
  2258. MPTVAL=IVACON
  2259. DO i=1,NSTRS
  2260. MELVAL=IVAL(i)
  2261. IBMN=MIN(IB ,VELCHE(/2))
  2262. IGMN=MIN(IGAU,VELCHE(/1))
  2263. WORK(IE)=VELCHE(IGMN,IBMN)
  2264. IE=IE+1
  2265. ENDDO
  2266. * Recuperation des variables internes (stockees dans WORK)
  2267. IE3=IE
  2268. MPTVAL=IVARI
  2269. DO i=1,NVARI+NVARF
  2270. MELVAL=IVAL(i)
  2271. IBMN=MIN(IB ,VELCHE(/2))
  2272. IGMN=MIN(IGAU,VELCHE(/1))
  2273. WORK(IE)=VELCHE(IGMN,IBMN)
  2274. IE=IE+1
  2275. ENDDO
  2276. CALL DOUOTA(WORK(IE1),CMATE,IFOUR,MAPL,WORK(IE2),
  2277. & WORK(IE3),LHOOK,DDHOOK,IRET)
  2278. ELSE
  2279. CALL DOUO88(WORK(IE1),CMATE,IFOUR,LHOOK,DDHOOK,IRET)
  2280. ENDIF
  2281. IF (IRET.EQ.0) THEN
  2282. KERRE=81
  2283. INTERR(1)=IFOUR
  2284. MOTERR(1:8)=CMATE
  2285. MOTERR(9:16)=NOMFR(MFR/2+1)
  2286. GOTO 8086
  2287. ENDIF
  2288. * Contribution du pt de Gauss IGAU a la matrice tangente elementaire
  2289. IF (IRIGE7.EQ.2) THEN
  2290. CALL BDBSTS(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  2291. ELSE
  2292. CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
  2293. ENDIF
  2294. 4086 CONTINUE
  2295. * Remplissage de la matrice de rigidite elementaire (RE(.,.,IB))
  2296. IF (IRIGE7.EQ.2) THEN
  2297. CALL REMPMS(REL,LRE,RE(1,1,IB))
  2298. ELSE
  2299. CALL REMPMT(REL,LRE,RE(1,1,IB))
  2300. ENDIF
  2301. 3086 CONTINUE
  2302. * Fin de la boucle sur les elements
  2303. * Etiquette de gestion des erreurs
  2304. 8086 CONTINUE
  2305. * Menage local
  2306. SEGSUP,WRK1,WRK2,WRK3,WRK4
  2307. GOTO 510
  2308. *-----------------------------------------------------------------------
  2309. * desactivation des segments propres a la zone geometrique ISOU
  2310. *-----------------------------------------------------------------------
  2311. 510 CONTINUE
  2312. IF (IPMATR.NE.0) THEN
  2313. * Symetrisation de la matrice si demandee
  2314. IF (IRIGE7.EQ.2 .AND. IKTSYM.EQ.1) THEN
  2315. LRE = RE(/1)
  2316. DO 5100 IB=1,NBELEM
  2317. DO i=1,LRE
  2318. DO j=i+1,LRE
  2319. RE(i,j,IB) = 0.5*( RE(i,j,IB)+RE(j,i,IB) )
  2320. RE(j,i,IB) = RE(i,j,IB)
  2321. ENDDO
  2322. ENDDO
  2323. 5100 CONTINUE
  2324. ENDIF
  2325. ENDIF
  2326. IF (IPDSCR.NE.0) SEGDES,DESCR
  2327. 515 CONTINUE
  2328. IF (ISUPMA.EQ.1) THEN
  2329. CALL DTMVAL(IVACAR,3)
  2330. ELSE
  2331. CALL DTMVAL(IVACAR,1)
  2332. ENDIF
  2333. IF (ISUPMA.EQ.1) THEN
  2334. CALL DTMVAL(IVAMAT,3)
  2335. ELSE
  2336. CALL DTMVAL(IVAMAT,1)
  2337. ENDIF
  2338. IF (ISUPVA.EQ.1) THEN
  2339. CALL DTMVAL(IVARI,3)
  2340. ELSE
  2341. CALL DTMVAL(IVARI,1)
  2342. ENDIF
  2343. IF (ISUPCO.EQ.1) THEN
  2344. CALL DTMVAL(IVACON,3)
  2345. ELSE
  2346. CALL DTMVAL(IVACON,1)
  2347. ENDIF
  2348. ** MELEME=IPMAIL
  2349. * Mise a jour du segment MRIGID en cas de SUCCES !
  2350. IF (KERRE.EQ.0) THEN
  2351. COERIG(ISOU)=1.D0
  2352. IRIGEL(1,ISOU)=IPMAGD
  2353. IRIGEL(2,ISOU)=0
  2354. IRIGEL(3,ISOU)=IPDSCR
  2355. IRIGEL(4,ISOU)=IPMATR
  2356. IRIGEL(5,ISOU)=NIFOUR
  2357. IRIGEL(6,ISOU)=0
  2358. IRIGEL(7,ISOU)=IRIGE7*(1-IKTSYM)
  2359. xmatri.symre=irigel(7,isou)
  2360. SEGDES,XMATRI
  2361. IRIGEL(8,ISOU)=0
  2362. * Sinon en cas d'ERREUR : sortie prematuree !
  2363. ELSE
  2364. * Affichage erreur si KERRE > 0 (car KERRE<0 qd erreur deja imprimee)
  2365. IF (KERRE.GT.0) CALL ERREUR(KERRE)
  2366. IF (IPDSCR.NE.0) SEGSUP,DESCR
  2367. IF (IPMATR.NE.0) SEGSUP,XMATRI
  2368. ** IF (IPMAGD.GT.0.AND.IPMAGD.NE.IPMAIL) THEN
  2369. ** MELEME=IPMAGD
  2370. ** SEGSUP,MELEME
  2371. ** ENDIF
  2372. GOTO 551
  2373. ENDIF
  2374. * Fin de la boucle (5000) de PARTITIONNEMENT du segment XMATRI
  2375. 5000 CONTINUE
  2376. *-----------------------------------------------------------------------
  2377. * Fin de la boucle sur les sous-zones du modele
  2378. *-----------------------------------------------------------------------
  2379. 500 CONTINUE
  2380.  
  2381. * Sortie du sous-programme
  2382. 551 CONTINUE
  2383. IF (KERRE.EQ.0) THEN
  2384. SEGDES,MRIGID
  2385. IPRIGI=MRIGID
  2386. ELSE
  2387. SEGSUP,MRIGID
  2388. IPRIGI=0
  2389. ENDIF
  2390. * Desactivation du modele "deroule"
  2391. 550 CONTINUE
  2392. MMODEL = IPMODL
  2393. SEGDES,MMODEL
  2394. meleme = MAILDG
  2395. IF (meleme.NE.0) SEGDES,meleme
  2396.  
  2397. c RETURN
  2398. END
  2399.  
  2400.  
  2401.  

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