Télécharger ktanga.eso

Retour à la liste

Numérotation des lignes :

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

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