Télécharger ktanga.eso

Retour à la liste

Numérotation des lignes :

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

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