Télécharger grad1.eso

Retour à la liste

Numérotation des lignes :

grad1
  1. C GRAD1 SOURCE CB215821 24/04/12 21:16:11 11897
  2.  
  3. C=======================================================================
  4. C= G R A D 1 =
  5. C= --------- =
  6. C= =
  7. C= Fonction : =
  8. C= ---------- =
  9. C= Traitement des informations necessaires au calcul du gradient d'un =
  10. C= champ deplacement/temperature. Branchement suivant l'element fini. =
  11. C= Sous-programme appele par GRAD (grad.eso) =
  12. C= =
  13. C= Parametres : (E)=Entree (S)=Sortie =
  14. C= ------------ =
  15. C= IPMODL (E) Pointeur sur segment MMODEL =
  16. C= IPCHE2 (E) Pointeur sur segment MCHELM de DEPLACEMENT/TEMPER. =
  17. C= IPCHE1 (E) Pointeur sur segment MCHELM de CARACTERISTIQUES =
  18. C= IPCHL1 (S) Pointeur sur segment MCHELM de GRADIENT resultat =
  19. C= IRET (S) Entier valant 1 en cas de succes, 0 sinon (et un =
  20. C= message d'erreur est imprime dans ce cas) =
  21. C= =
  22. C= Remarque : En entree du sousprogramme, IPCHL1 contient le CHPOINT =
  23. C= ---------- de deplacement ou de temperature fourni a l'operateur =
  24. C= 'GRAD'. Dans le cas d'un modele MECANIQUE, ce CHPOINT =
  25. C= est indispensable a avoir pour calculer les deforma- =
  26. C= generalisees au(x) point(s) support(s). =
  27. C= =
  28. C= Christian LE BRETON - Denis ROBERT-MOUGIN, le 31 juillet 1986. =
  29. C= Modifications aux nouvelles normes I.MONNIER, le 28 mai 1990. =
  30. C=======================================================================
  31.  
  32. SUBROUTINE GRAD1(IPMODL,MODEPL,IPCHE2,IPCHE1, IPCHL1,IRET)
  33.  
  34. IMPLICIT INTEGER(I-N)
  35. IMPLICIT REAL*8 (A-H,O-Z)
  36. C Booleen de determination automatique des noms de composantes
  37. LOGICAL COMAUT
  38.  
  39.  
  40. -INC PPARAM
  41. -INC CCOPTIO
  42. -INC CCHAMP
  43. -INC CCREEL
  44.  
  45. -INC SMCHAML
  46. -INC SMMODEL
  47. -INC SMELEME
  48. -INC SMINTE
  49. -INC SMCOORD
  50. -INC SMLREEL
  51.  
  52. SEGMENT INFO
  53. INTEGER INFELL(JG)
  54. ENDSEGMENT
  55.  
  56. SEGMENT NOTYPE
  57. CHARACTER*16 TYPE(NBTYPE)
  58. ENDSEGMENT
  59.  
  60. SEGMENT MPTVAL
  61. INTEGER IPOS(NS),NSOF(NS),IVAL(NCOSOU)
  62. CHARACTER*16 TYVAL(NCOSOU)
  63. ENDSEGMENT
  64.  
  65. SEGMENT MVELCH
  66. REAL*8 VALMAT(NV1)
  67. ENDSEGMENT
  68.  
  69. SEGMENT MWRK1
  70. REAL*8 XDDL(LRE),XE(3,NBNO),GRADI(NGRA)
  71. REAL*8 DDHOOK(NSTRS,NSTRS),DDHOMU(NSTRS,NSTRS)
  72. ENDSEGMENT
  73.  
  74. SEGMENT MWRK2
  75. REAL*8 SHPWRK(6,NBNO),BGR(NGRA,LRE),BB(2,NGRA)
  76. ENDSEGMENT
  77.  
  78. SEGMENT MWRK3
  79. REAL*8 WORK(LW)
  80. ENDSEGMENT
  81.  
  82. SEGMENT MWRK4
  83. REAL*8 BPSS(3,3),XEL(3,NBNO),XDDLOC(LRE)
  84. ENDSEGMENT
  85.  
  86. PARAMETER (NINF=3)
  87. INTEGER INFOS(NINF)
  88. CHARACTER*8 CMATE
  89. CHARACTER*(NCONCH) CONM
  90.  
  91. DIMENSION A(4,60),BBX(3,60),UDPGE(3),PP(4,4)
  92. LOGICAL LDPGE,lsupgd,lsupdp
  93. INTEGER ISUP1
  94.  
  95. IF(MODEPL.GT.0) THEN
  96. COMAUT=.FALSE.
  97. ELSE
  98. COMAUT=.TRUE.
  99. ENDIF
  100.  
  101. IRET=0
  102. ISUP1=0
  103. iMess=0
  104.  
  105. C 1 - QUELQUES INITIALISATIONS
  106. C ==============================
  107. C 1.1 - Dimensionnement du MMODEL
  108. C =====
  109. MMODEL=IPMODL
  110. C call zpmode(MMODEL)
  111. NSOUS=KMODEL(/1)
  112. C
  113. KEL22 = 0
  114. DO ISOUS = 1,NSOUS
  115. IMODEL=KMODEL(ISOUS)
  116. IF (FORMOD(1).EQ.'CHARGEMENT') KEL22 = KEL22 + 1
  117. ENDDO
  118. C
  119. C =====
  120. C 1.2 - Cas des modes de calculs en DEFORMATIONS GENERALISEES
  121. C En mecanique, on conserve le CHPOINT de deplacements pour
  122. C calculer les deplacements du point support en DPGE (IPCHP1)
  123. C =====
  124. IPCHP1 = IPCHL1
  125. C =====
  126. C 1.3 - Activation du MCHELM resultat du champ de gradients
  127. C =====
  128. L1=8
  129. N1=NSOUS-KEL22
  130. N3=6
  131. SEGINI,MCHELM
  132. TITCHE='GRADIENT'
  133. IFOCHE=IFOUR
  134. IPCHL1=MCHELM
  135. C =====
  136. C 1.4 - Les composantes des champs de deplacement/temperature, de
  137. C gradient resultat sont toutes du meme type ('REAL*8') sur tout
  138. C le modele IPMODL. Le segment MOTYCH de type NOTYPE associe est
  139. C donc initialise une seule fois.
  140. C =====
  141. NBTYPE=1
  142. SEGINI,NOTYPE
  143. TYPE(1)='REAL*8'
  144. MOTYCH=NOTYPE
  145.  
  146. C 2 - BOUCLE SUR LES ZONES ELEMENTAIRES DU MODELE (iSou)
  147. C ========================================================
  148. isouss=0
  149. DO 2000 iSou=1,NSOUS
  150. C =====
  151. C 2.1 - Quelques initialisations
  152. C =====
  153. NDEP=0
  154.  
  155. IF(COMAUT) THEN
  156. MODEPL=0
  157. ENDIF
  158. IVADEP=0
  159. NGRA=0
  160. MOGRAD=0
  161. IVAGRA=0
  162. MOCARA=0
  163. IVACAR=0
  164. MOMATR=0
  165. IVAMAT=0
  166. MWRK1=0
  167. MWRK2=0
  168. MWRK3=0
  169. MWRK4=0
  170. MCHAML=0
  171. MELVAL=0
  172. MVELCH=0
  173.  
  174. C =====
  175. C 2.2 - Activation du sous-modele (iSou)
  176. C =====
  177. IMODEL=KMODEL(iSou)
  178. C
  179. IF (FORMOD(1).EQ.'CHARGEMENT') GOTO 2000
  180. C
  181. NFOR = formod(/2)
  182. CALL PLACE(FORMOD,NFOR,iliais,'LIAISON')
  183. iaffai=1
  184. DO iou=1,matmod(/2)
  185. if (matmod(iou).eq.'MODAL' .or. matmod(iou).eq.'STATIQUE' .or.
  186. $ matmod(iou).eq.'IMPEDANCE') iaffai=0
  187. ENDDO
  188. IF (iaffai.eq.0 .or. iliais.ne.0) GOTO 2000
  189. MELE=NEFMOD
  190. * au cas ou il y en aurait besoin
  191. IF (mele.eq.22.or.mele.eq.259.or.mele.eq.50000) goto 2000
  192. isouss=isouss+1
  193. IPMAIL=IMAMOD
  194. CONM=CONMOD
  195. C =====
  196. C 2.3 - Determination ...
  197. C =====
  198. CALL IDENT(IPMAIL,CONM,IPCHE2,IPCHE1,INFOS,iOK)
  199. IF (iOK.EQ.0) GOTO 200
  200. iOK=0
  201. C =====
  202. C 2.4 - Determination de la nature du materiau et verification
  203. C =====
  204. NFOR=FORMOD(/2)
  205. CMATE = CMATEE
  206. MATE = IMATEE
  207. *NU INAT = INATUU
  208. IF (CMATE.EQ.' ') THEN
  209. CALL ERREUR(251)
  210. GOTO 200
  211. ENDIF
  212. CALL PLACE(FORMOD,NFOR,ITHEHY,'THERMOHYDRIQUE')
  213. CALL PLACE(FORMOD,NFOR,ITHER ,'THERMIQUE' )
  214. CALL PLACE(FORMOD,NFOR,IDIFF ,'DIFFUSION' )
  215. C =====
  216. C 2.5 - Recuperation d'informations lies au maillage IPMAIL
  217. C =====
  218. MELEME=IPMAIL
  219. NBNN=NUM(/1)
  220. NBELEM=NUM(/2)
  221. NBNO=NBNN
  222. C =====
  223. C 2.6 - Recuperation d'informations sur l'element fini du sous-modele
  224. C suivant la formulation du modele (MECANIQUE ou THERMIQUE)
  225. C =====
  226. C SP 07/08 : NII=Nombre Inconnues Independantes
  227. C (e.g. T,Pc,Pg en Thermohydrique)
  228. NII=1
  229. IPINF=0
  230. IF (ITHEHY.NE.0) THEN
  231. MFR=65
  232. CALL TSHAPE(MELE,'GAUSS',IPMINT)
  233. IPMIN1=0
  234. NII=3
  235. LRE=NII*NBNN
  236. C*OF : Valeur de LW ?
  237. LW=1700
  238. NSTRS=0
  239. LDPGE = .FALSE.
  240. NDPGE = 0
  241.  
  242. ELSE IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  243. MFR=NUMMFR(MELE)
  244. CALL TSHAPE(MELE,'GAUSS',IPMINT)
  245. IPMIN1=0
  246. IF (MFR.EQ.5 .OR. MFR.EQ.9) THEN
  247. CALL TSHAPE(MELE,'NOEUD',IPMIN1)
  248. ENDIF
  249. IF (MFR.EQ.3 .OR. MFR.EQ.5 .OR. MFR.EQ.9) THEN
  250. LRE=3*NBNN
  251. ELSE
  252. LRE=NBNN
  253. ENDIF
  254.  
  255. C*OF : Valeur de LW ?
  256. LW = 1700
  257. NSTRS = 0
  258. LDPGE = .FALSE.
  259. NDPGE = 0
  260. c ajout bp du 18/06/2013 : il faut renseigner NPINT pour idtemp
  261. NPINT = 0
  262. IF(INFMOD(/1).NE.0) NPINT=INFMOD(1)
  263. ELSE
  264. if(infmod(/1).lt.7)then
  265. CALL ELQUOI(MELE,0,5,IPINF,IMODEL)
  266. INFO=IPINF
  267. IF (IERR.NE.0) GOTO 200
  268. MFR=INFELL(13)
  269. IPMINT=INFELL(11)
  270. IPMIN1=INFELL(12)
  271. LRE=INFELL(9)
  272. LW=INFELL(7)
  273. LHOOK=INFELL(10)
  274. NSTRS=INFELL(16)
  275. segsup info
  276. else
  277. MFR=INFELE(13)
  278. * IPMINT=INFELE(11)
  279. ipmint=infmod(7)
  280. IPMIN1=INFMOD(8)
  281. LRE=INFELE(9)
  282. LW=INFELE(7)
  283. LHOOK=INFELE(10)
  284. NSTRS=INFELE(16)
  285. endif
  286. CALL INFDPG(MFR,IFOUR, LDPGE,NDPGE)
  287. ENDIF
  288.  
  289. C =====
  290. C 2.6 - Recherche des DDL du noeud support des def. planes generalisees
  291. C Dans ce cas, IPCHP1 est fourni a GRAD via IPCHL1 (cf. 1.3)
  292. C =====
  293. IF (LDPGE) THEN
  294. IF (IPCHP1.EQ.0) THEN
  295. CALL ERREUR(621)
  296. GOTO 200
  297. ENDIF
  298. IIPDPG = imodel.IPDPGE
  299. IIPDPG = IPTPOI(IIPDPG)
  300. IF (IIPDPG.EQ.0) THEN
  301. CALL ERREUR(925)
  302. CALL ERREUR(5)
  303. GOTO 200
  304. ENDIF
  305. CALL DEPDPG(IPCHP1,UDPGE(1),UDPGE(2),UDPGE(3),IIPDPG)
  306. ELSE
  307. IIPDPG = 0
  308. ENDIF
  309. C =====
  310. C 2.7 - Segment d'integration
  311. C =====
  312. MINTE=IPMINT
  313. c* SEGACT,MINTE
  314. NBPGAU=POIGAU(/1)
  315. C =====
  316. C 2.8 - Recuperation des noms des caracteristiques GEOMETRIQUES
  317. C Verification de leur presence dans le MCHAML (IPCHE1)
  318. C =====
  319. NBROBL=0
  320. NBRFAC=0
  321. IVECT =0
  322. if (iaffai.eq.1 .and. iliais.eq.0) then
  323.  
  324. C= 2.8.1 - Elements COQUES : epaisseur et excentrement
  325. IF (MFR.EQ.3 .OR. MFR.EQ.5 .OR. MFR.EQ.9) THEN
  326. NBROBL=1
  327. NBRFAC=1
  328. SEGINI,NOMID
  329. LESOBL(1)='EPAI'
  330. LESFAC(1)='EXCE'
  331. MOCARA=NOMID
  332. NBTYPE=1
  333. SEGINI,NOTYPE
  334. TYPE(1)='REAL*8'
  335.  
  336. C= 2.8.2 - Formulation THERMIQUE et DIFFUSION : Elements BARRes, TUY2 et TUY3
  337. ELSEIF (MFR.EQ.27 .OR. MFR.EQ.79) THEN
  338. NBROBL=0
  339. NBRFAC=0
  340. C SEGINI,NOMID
  341. C MOCARA=NOMID
  342. C LESOBL(1)='SECT'
  343. C NBTYPE=1
  344. C SEGINI,NOTYPE
  345. C TYPE(1)='REAL*8'
  346.  
  347. C= 2.8.3 - Elements BARREs EXCENTREES : section, excentrements et orientation
  348. ELSE IF (MFR.EQ.49) THEN
  349. NBROBL=6
  350. SEGINI NOMID
  351. MOCARA=NOMID
  352. LESOBL(1)='SECT'
  353. LESOBL(2)='EXCZ'
  354. LESOBL(3)='EXCY'
  355. LESOBL(4)='VX '
  356. LESOBL(5)='VY '
  357. LESOBL(6)='VZ '
  358. NBTYPE=1
  359. SEGINI NOTYPE
  360. TYPE(1)='REAL*8'
  361.  
  362. C= 2.8.4 - Elements POUTRES
  363. ELSE IF (MFR.EQ.7) THEN
  364. IF (CMATE.EQ.'SECTION') THEN
  365. NBROBL=0
  366. NBRFAC=3
  367. SEGINI NOMID
  368. MOCARA=NOMID
  369. LESFAC(1)='VX '
  370. LESFAC(2)='VY '
  371. LESFAC(3)='VZ '
  372. IVECT=1
  373.  
  374. NBTYPE=3
  375. SEGINI NOTYPE
  376. TYPE(1)='REAL*8 '
  377. TYPE(2)='REAL*8 '
  378. TYPE(3)='REAL*8 '
  379. ELSE
  380. IF(IFOUR.EQ.2) THEN
  381. NBROBL=4
  382. NBRFAC=5
  383. SEGINI NOMID
  384. MOCARA=NOMID
  385. LESOBL(1)='TORS'
  386. LESOBL(2)='INRY'
  387. LESOBL(3)='INRZ'
  388. LESOBL(4)='SECT'
  389. LESFAC(1)='SECY'
  390. LESFAC(2)='SECZ'
  391. LESFAC(3)='VX '
  392. LESFAC(4)='VY '
  393. LESFAC(5)='VZ '
  394. IVECT=1
  395. NBTYPE=9
  396. SEGINI NOTYPE
  397. TYPE(1)='REAL*8'
  398. TYPE(2)='REAL*8'
  399. TYPE(3)='REAL*8'
  400. TYPE(4)='REAL*8'
  401. TYPE(5)='REAL*8'
  402. TYPE(6)='REAL*8'
  403. TYPE(7)='REAL*8'
  404. TYPE(8)='REAL*8'
  405. TYPE(9)='REAL*8'
  406. ELSEIF(IFOUR.EQ.-1.OR.IFOUR.EQ.-2.OR.IFOUR.EQ.-3) THEN
  407. NBRFAC=1
  408. NBROBL=2
  409. SEGINI NOMID
  410. MOCARA=NOMID
  411. LESOBL(1)= 'SECT'
  412. LESOBL(2)= 'INRZ'
  413. LESFAC(1)= 'SECY'
  414. NBTYPE=1
  415. SEGINI NOTYPE
  416. TYPE(1)='REAL*8'
  417. ENDIF
  418. ENDIF
  419. C= 2.8.5 - Elements POUTRES TIMO 2D :
  420. C* non defini actuellement
  421. C= 2.8.6 - Formulation MECANIQUE : Elements TUYAUX
  422. ELSE IF (MFR.EQ.13) THEN
  423. NBROBL=2
  424. NBRFAC=5
  425. SEGINI NOMID
  426. MOCARA=NOMID
  427. LESOBL(1)='EPAI'
  428. LESOBL(2)='RAYO'
  429. LESFAC(1)='RACO'
  430. LESFAC(2)='CISA'
  431. LESFAC(3)='VX '
  432. LESFAC(4)='VY '
  433. LESFAC(5)='VZ '
  434. IVECT=1
  435. NBTYPE=7
  436. SEGINI NOTYPE
  437. TYPE(1)='REAL*8'
  438. TYPE(2)='REAL*8'
  439. TYPE(3)='REAL*8'
  440. TYPE(4)='REAL*8'
  441. TYPE(5)='REAL*8'
  442. TYPE(6)='REAL*8'
  443. TYPE(7)='REAL*8'
  444. ENDIF
  445. endif
  446. NCARA=NBROBL
  447. NCARF=NBRFAC
  448. NCAR =NBROBL+NBRFAC
  449. C= 2.8.x - Verification de la presence des caracteristiques dans IPCHE1
  450. IF (NCAR.NE.0) THEN
  451. IF (IPCHE1.NE.0) THEN
  452. MOTYPE=NOTYPE
  453. CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOCARA,MOTYPE,1,
  454. . INFOS,3,IVACAR)
  455. SEGSUP,NOTYPE
  456. IF (IERR.NE.0) GOTO 220
  457. * IF (IVACAR.NE.0) THEN
  458. * MPTVAL=IVACAR
  459. * IPMELV=IVAL(1)
  460. * CALL QUELCH(IPMELV,ICONS)
  461. * IF (ICONS.NE.0) THEN
  462. * CALL ERREUR(566)
  463. * GOTO 220
  464. * ENDIF
  465. * ENDIF
  466. ELSE
  467. MOTERR(1:8)='CARACTER'
  468. MOTERR(9:12)=NOMTP(MELE)
  469. MOTERR(13:20)='GRAD'
  470. CALL ERREUR(145)
  471. GOTO 220
  472. ENDIF
  473. ENDIF
  474. C =====
  475. C 2.9.1 - Traitement particulier dans le cas de l'element COQUE DST
  476. C Recuperation des donnees contenues dans la matrice de HOOKE
  477. C Verification de leur presence dans le MCHAML (IPCHE1)
  478. C =====
  479. NMATR=0
  480. NMATF=0
  481. NMATT=0
  482. IF (MELE.EQ.93) THEN
  483. IF (FORMOD(1).EQ.'MECANIQUE'.AND.CMATE.EQ.'ISOTROPE') THEN
  484. NBROBL=2
  485. NBRFAC=0
  486. SEGINI,NOMID
  487. LESOBL(1)='YOUN'
  488. LESOBL(2)='NU '
  489. MOMATR=NOMID
  490. NMATR=NBROBL
  491. NMATF=NBRFAC
  492. IF (IPCHE1.NE.0) THEN
  493. C*OF : On va utiliser MOTYCH pour gagner un peu de temps
  494. C*OF NBTYPE=1
  495. C*OF SEGINI,NOTYPE
  496. C*OF TYPE(1)='REAL*8'
  497. C*OF MOTYPE=NOTYPE
  498. C*OF CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOMATR,MOTYPE,1,
  499. CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOMATR,MOTYCH,1,
  500. . INFOS,3,IVAMAT)
  501. IF (IERR.NE.0) GOTO 230
  502. C*OF SEGSUP,NOTYPE
  503. ELSE
  504. SEGSUP,NOTYPE
  505. MOTERR(1:8)='CARACTER'
  506. MOTERR(9:12)=NOMTP(MELE)
  507. MOTERR(13:20)='GRAD'
  508. CALL ERREUR(145)
  509. GOTO 230
  510. ENDIF
  511. NMATT=NMATR+NMATF
  512. MPTVAL=IVAMAT
  513. NBGMAT=0
  514. NELMAT=0
  515. DO i=1,NMATT
  516. IF (IVAL(i).NE.0)THEN
  517. MELVAL=IVAL(i)
  518. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  519. NELMAT=MAX(NELMAT,VELCHE(/2))
  520. ENDIF
  521. ENDDO
  522. ENDIF
  523. ENDIF
  524.  
  525. C =====
  526. C 2.9.2 - Cas d'un joint unidimensionnel JOI1
  527. C Chargement des vecteurs situes dans les caracteristiques materiau
  528. C =====
  529. IF(MFR.EQ.75) THEN
  530. IF(IDIM.EQ.3) THEN
  531. NBROBL=6
  532. NBRFAC=0
  533. SEGINI NOMID
  534. MOMATR=NOMID
  535. LESOBL(1)='V1X'
  536. LESOBL(2)='V1Y'
  537. LESOBL(3)='V1Z'
  538. LESOBL(4)='V2X'
  539. LESOBL(5)='V2Y'
  540. LESOBL(6)='V2Z'
  541. NMATR=NBROBL
  542. NMATF=NBRFAC
  543. ELSE IF(IDIM.EQ.2) THEN
  544. NBROBL=2
  545. NBRFAC=0
  546. SEGINI NOMID
  547. MOMATR=NOMID
  548. LESOBL(1)='V1X'
  549. LESOBL(2)='V1Y'
  550. NMATR=NBROBL
  551. NMATF=NBRFAC
  552. ENDIF
  553. NBTYPE=1
  554. SEGINI NOTYPE
  555. TYPE(1)='REAL*8'
  556. MOTYPE=NOTYPE
  557. *
  558. CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOMATR,MOTYPE,1,INFOS,3,IVAMAT)
  559. SEGSUP NOTYPE
  560. IF (IERR.NE.0) GOTO 2000
  561. *
  562. NMATT=NMATR+NMATF
  563. *
  564. IF(ISUP1.EQ.1)THEN
  565. CALL VALCHE(IVAMAT,NMATT,IPMINT,IPPORE,MOMATR,MELE)
  566. IF(IERR.NE.0)THEN
  567. ISUP1=0
  568. GOTO 2000
  569. ENDIF
  570. ENDIF
  571. MPTVAL=IVAMAT
  572. NBGMAT = 0
  573. NELMAT = 0
  574. DO 11265 IM=1,NMATT
  575. IF(IVAL(IM).NE.0)THEN
  576. MELVAL=IVAL(IM)
  577. IF (CMATE.EQ.'SECTION') THEN
  578. NBGMAT=MAX(NBGMAT,IELCHE(/1))
  579. NELMAT=MAX(NELMAT,IELCHE(/2))
  580. ELSE
  581. NBGMAT=MAX(NBGMAT,VELCHE(/1))
  582. NELMAT=MAX(NELMAT,VELCHE(/2))
  583. ENDIF
  584. ENDIF
  585. 11265 CONTINUE
  586. nmattd=nmatt
  587. ivamtd= ivamat
  588. ENDIF
  589. C ======
  590. C 2.10 - Recuperation des noms des composantes de DEPL. ou T
  591. C Verification de leur presence dans le MCHAML (IPCHE2)
  592. C*OF Par abus : MODEPL noms des composantes de DEPL et de Temperatures
  593. C ======
  594. IF(COMAUT) THEN
  595. IF(LNOMID(1).NE.0) THEN
  596. NOMID =LNOMID(1)
  597. MODEPL=NOMID
  598. ndep =LESOBL(/2)
  599. NFAC =LESFAC(/2)
  600. LSUPDP=.FALSE.
  601. ELSE
  602. LSUPDP=.TRUE.
  603. IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  604. CALL IDTEMP(MFR,IFOUR,NPINT,MODEPL,NDEP,NFAC)
  605. IF (MFR.EQ.1) THEN
  606. MDM=29
  607. ELSE IF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9) THEN
  608. MDM=39
  609. ENDIF
  610. ELSE
  611. CALL IDPRIM(IMODEL,MFR,MODEPL,NDEP,NFAC)
  612. MDM=MFR
  613. ENDIF
  614. ENDIF
  615. ELSE
  616. LSUPDP=.FALSE.
  617. NOMID=MODEPL
  618. SEGACT NOMID
  619. ndep=LESOBL(/2)
  620. NFAC=LESFAC(/2)
  621. ENDIF
  622. CALL KOMCHA(IPCHE2,IPMAIL,CONM,MODEPL,MOTYCH,1,INFOS,3,IVADEP)
  623. IF (IERR.NE.0) GOTO 240
  624.  
  625. C ======
  626. C 2.11 - Recuperation des noms des composantes de gradient
  627. C ======
  628. IF(LNOMID(3).NE.0) then
  629. MOGRAD= LNOMID(3)
  630. NOMID = MOGRAD
  631. SEGACT,NOMID
  632. NGRA = LESOBL(/2)
  633. NFAC = LESFAC(/2)
  634. LSUPGD=.FALSE.
  635. ELSE
  636. LSUPGD=.TRUE.
  637. CALL IDGRAD(MDM,IFOUR,MOGRAD,NGRA,NFAC)
  638. NOMID=MOGRAD
  639. SEGACT,NOMID
  640. ENDIF
  641.  
  642. C ======
  643. C 2.12 - Initialisation du MCHAML des gradients (MCHAML)
  644. C associe au modele elementaire iSou (de maillage IPMAIL)
  645. C Remplissage des donnees associees a MCHAML dans MCHELM(global)
  646. C ======
  647. C= 2.12.1 - Initialisation de MCHAML
  648. N2=NGRA
  649. SEGINI,MCHAML
  650. C= 2.12.2 - Remplissage de MCHEML(iSou)
  651. CONCHE(iSouss) = CONMOD
  652. IMACHE(iSouss) = IPMAIL
  653. ICHAML(iSouss) = MCHAML
  654. INFCHE(iSouss,1)= 0
  655. INFCHE(iSouss,2)= 0
  656. INFCHE(iSouss,3)= NIFOUR
  657. INFCHE(iSouss,4)= IPMINT
  658. INFCHE(iSouss,5)= 0
  659. IF (ITHEHY.NE.0 .OR. ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  660. INFCHE(iSouss,6)=6
  661. ELSE
  662. INFCHE(iSouss,6)=5
  663. ENDIF
  664.  
  665. C= 2.12.3 - Initialisation des N2 MELVAL associes a MCHAML
  666. C= Fin du remplissage de MCHAML
  667. N1EL =0
  668. N1PTEL=0
  669. MPTVAL=IVADEP
  670. DO i=1,NDEP
  671. MELVAL=IVAL(i)
  672. N1PTEL=MAX(N1PTEL,VELCHE(/1))
  673. N1EL =MAX(N1EL ,VELCHE(/2))
  674. ENDDO
  675. IF (N1PTEL.EQ.1 .OR. NBPGAU.EQ.1) THEN
  676. N1PTEL=1
  677. ELSE
  678. N1PTEL=NBPGAU
  679. ENDIF
  680. N1EL=MIN(N1EL,NBELEM)
  681. * write(6,*) 'N1PTEL,N1EL=',N1PTEL,N1EL
  682. N2PTEL= 0
  683. N2EL = 0
  684. NS = 1
  685. NCOSOU= NGRA
  686. SEGINI,MPTVAL
  687. NOMID = MOGRAD
  688. DO i=1,N2
  689. NOMCHE(i)=LESOBL(i)
  690. TYPCHE(i)='REAL*8'
  691. SEGINI,MELVAL
  692. IELVAL(i)=MELVAL
  693. IVAL(i) =MELVAL
  694. ENDDO
  695. IVAGRA=MPTVAL
  696.  
  697. C ======
  698. C 2.13 - Initialisations de quelques valeurs
  699. C ======
  700. cbp NDDD=NDEP -> ne prend pas en compte les composantes facultatives
  701. MPTVAL=IVADEP
  702. NDDD=IVAL(/1)
  703. C* Attention si composantes facultatives en DPGE ??
  704. IF (LDPGE) NDDD=NDEP-NDPGE
  705. *
  706. IF (MFR.EQ.77) THEN
  707. * zones cohesives : on se limite aux composantes obligatoires
  708. NDDD=NDEP
  709. ENDIF
  710.  
  711. C POUR les XFEM on fait un cas particulier inspire du cas massif
  712. IF (MFR.EQ.63) THEN
  713. CALL GRAD1X(IMODEL,IVADEP,LRE,IVAGRA,NGRA,
  714. & IPMINT,IPMIN1,IIPDPG,IOK)
  715. GOTO 260
  716. ELSE IF (MFR.EQ.29) THEN
  717. i=NGRA
  718. NGRA=i*NBNO
  719. SEGINI,MWRK1
  720. NGRA=i
  721. ELSE
  722. SEGINI,MWRK1
  723. ENDIF
  724. C
  725. IF (ITHEHY.NE.0) THEN
  726. LREII =LRE /NII
  727. NGRAII=NGRA/NII
  728. JG =LREII
  729. SEGINI,MLREE1
  730. JG=NGRAII
  731. SEGINI,MLREE2
  732. ENDIF
  733.  
  734. NOELE=MELE
  735. IF (ITHEHY.NE.0) THEN
  736. NOELE=57
  737. ELSEIF(ITHER.NE.0 .OR. IDIFF.NE.0)THEN
  738. IF(MFR .EQ. 1)THEN
  739. NOELE=57
  740. ENDIF
  741. ENDIF
  742.  
  743. C ======
  744. C 2.14 - Boucle sur les elements du sous-modele elementaire
  745. C ======
  746. DO 100 IB=1,NBELEM
  747. C= 2.14.1 - Recuperation des coordonnees des noeuds de l'element
  748. CALL DOXE(XCOOR,IDIM,NBNO,NUM,IB,XE)
  749.  
  750. C= 2.14.2 - Recuperation des deplacements/temperatures aux noeuds
  751. C= Traitement dans les cas des modes generalises
  752. MPTVAL=IVADEP
  753. IE=1
  754. DO iGau=1,NBNN
  755. DO i=1,NDDD
  756. MELVAL=IVAL(i)
  757. IF (MELVAL.NE.0) THEN
  758. IGMN=MIN(iGau,VELCHE(/1))
  759. IBMN=MIN(IB,VELCHE(/2))
  760. XDDL(IE)=VELCHE(IGMN,IBMN)
  761. ELSE
  762. XDDL(IE)=XZero
  763. ENDIF
  764. IE=IE+1
  765. ENDDO
  766. ENDDO
  767. IF (NDPGE.GT.0) THEN
  768. DO i=1,NDPGE
  769. XDDL(IE)=UDPGE(i)
  770. IE=IE+1
  771. ENDDO
  772. ENDIF
  773.  
  774. C= 2.14.3 - Branchement suivant l'element fini
  775. c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
  776. GOTO (99,99,99, 4,99, 4,99, 4,99, 4,99,99,99, 4, 4, 4, 4,99,99,99,
  777. c 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
  778. . 99,99, 4, 4, 4, 4,27,28,29,99,99,99,99,99,99,99,99,99,99,99,
  779. . 41,29,99,44,99,46,99,99,49,99,99,99,99,99,99,41, 4, 4, 4, 4,
  780. . 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,99,99,
  781. . 99,99,99,29,85,99,99,88,99,99,99,99,93,99,99,99,99,99,99,99,
  782. . 99,99,99,99,99,99,99,99,99,99, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  783. . 4, 4),MELE
  784. IF (MELE.EQ.183.OR. MELE.EQ.184) GOTO 4
  785. IF (MELE.GE.191.AND.MELE.LE.194) GOTO 4
  786. IF (MELE.EQ.265 ) GOTO 265
  787. IF (MELE.EQ.266 ) GOTO 266
  788. IF (MELE.EQ.267 ) GOTO 267
  789. IF (MELE.EQ.269.OR.MELE.EQ.270 ) GOTO 46
  790. IF (MELE.EQ.273.OR.MELE.EQ.274 ) GOTO 4
  791. 99 CONTINUE
  792. CC*OF On ne veut plus sortir sur une erreur :
  793. C* MOTERR(1:4)=NOMTP(MELE)
  794. C* MOTERR(9:12)='GRADIENT'
  795. C* iMess=86
  796. C*OF On met un champ de gradient nul pour les elements non implementes !
  797. N1PTEL=1
  798. N1EL =1
  799. N2PTEL=0
  800. N2EL =0
  801. DO i=1,IELVAL(/1)
  802. MELVAL=IELVAL(i)
  803. SEGADJ,MELVAL
  804. VELCHE(1,1)=XZero
  805. ENDDO
  806. iOK=1
  807. GOTO 250
  808.  
  809. C= 2.14.4 - Elements MASSIFS et INCOMPRESSIBLES
  810. 4 CONTINUE
  811. IF (IB.EQ.1) SEGINI,MWRK2
  812.  
  813. C- Elements MASSIFS et INCOMPRESSIBLES en MECANIQUE
  814. C- Calcul des coeff de modification de b-barre
  815. C= NOM : ICT3, ICQ4, ICT6, ICQ8, ICC8, ICT4, ICP6, IC20, IC10, IC15
  816. C= MELE : 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78
  817. IF (MFR.EQ.31) THEN
  818. CALL BBCAL3(NOELE,NBNO,MFR,IDIM,XE,
  819. & NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  820. & NGRA,LRE,IFOUR,NIFOUR,A,BBX,
  821. & SHPTOT,SHPWRK,BGR,BB,PP)
  822. ENDIF
  823. ISDJC=0
  824. DO iGau=1,NBPGAU
  825. C -- Calcul de la matrice B et du jacobien au point de Gauss IGAU
  826. IF (ITHEHY.NE.0) THEN
  827. C Elements massifs en 'THERMOHYDRIQUE'
  828. CALL BGRMAS(iGau,NOELE,NBNO,LREII,IFOUR,NGRAII,NIFOUR,XE,
  829. & XZero,SHPTOT,SHPWRK,BB,BGR,DJAC,IIPDPG)
  830. ELSE
  831. IF (MFR.EQ.71) THEN
  832. C Elements massifs en 'ELECTROSTATIQUE'
  833. CALL BELEC(XE,SHPTOT(1,1,IGAU),NBNO,NGRA,+1,
  834. & SHPWRK,BGR,DJAC)
  835. ELSE IF (MFR.EQ.73) THEN
  836. C Elements massifs en 'DIFFUSION'
  837. CALL BDIFF(XE,SHPTOT(1,1,IGAU),NBNN,NGRA,+1,
  838. & SHPWRK,BGR,DJAC)
  839. ELSE
  840. C Elements MASSIFS en MECANIQUE
  841. CALL BGRMAS(iGau,NOELE,NBNO,LRE,IFOUR,NGRA,NIFOUR,XE,
  842. & XZero,SHPTOT,SHPWRK,BB,BGR,DJAC,IIPDPG)
  843.  
  844. C En cas d'elements incompressibles : BGR selon la methode B-BARRE
  845. IF (MFR.EQ.31) THEN
  846. CALL BBAR(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
  847. & NOELE,NBNO,LRE,IFOUR,NGRA,XE,DJAC,A,BBX,BGR)
  848. ENDIF
  849.  
  850. ENDIF
  851. ENDIF
  852. IF (DJAC.LT.XZero) ISDJC=ISDJC+1
  853. IF (DJAC.EQ.XZero) THEN
  854. iMess=259
  855. GOTO 260
  856. ENDIF
  857. IF (ITHEHY.NE.0) THEN
  858. DO KII=1,NII
  859. DO LLL=1,LREII
  860. MLREE1.PROG(LLL)=XDDL(LLL*NII-(NII-KII))
  861. ENDDO
  862. CALL BGRDEP(BGR,NGRAII,MLREE1.PROG,LREII,MLREE2.PROG)
  863. DO LLL=1,NGRAII
  864. GRADI(LLL+(KII-1)*NGRAII)=MLREE2.PROG(LLL)
  865. ENDDO
  866. ENDDO
  867. ELSE
  868. IF (MFR.EQ.71 .OR. MFR.EQ.73) THEN
  869. C Elements massifs en 'ELECTROSTATIQUE' et 'DIFFUSION'
  870. CALL BST( BGR,XDDL,LRE,NGRA,GRADI)
  871. ELSE
  872. CALL BGRDEP(BGR,NGRA,XDDL,LRE,GRADI)
  873. ENDIF
  874. ENDIF
  875. MPTVAL=IVAGRA
  876. DO i=1,NGRA
  877. MELVAL=IVAL(i)
  878. IGMN =MIN(iGau,VELCHE(/1))
  879. IBMN =MIN(IB,VELCHE(/2))
  880. VELCHE(IGMN,IBMN)=GRADI(i)
  881. ENDDO
  882. ENDDO
  883. IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN
  884. iMess=195
  885. GOTO 260
  886. ENDIF
  887. GOTO 100
  888.  
  889. C= 2.14.5 - Elements COQUES COQ3 (thermique - diffusion)
  890. 27 IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  891. IF (IB.EQ.1) SEGINI,MWRK2
  892. ISDJC=0
  893. DO iGau=1,NBPGAU
  894. CALL CQTGR1(iGau,MELE,NBNN,LRE,IFOUR,NGRA,XE,SHPTOT,
  895. . XDDL,SHPWRK,BGR,DJAC,GRADI)
  896. IF (IERR.NE.0) GOTO 260
  897. IF (DJAC.EQ.XZero) THEN
  898. iMess=259
  899. GOTO 260
  900. ENDIF
  901. IF (DJAC.LT.XZero) ISDJC=ISDJC+1
  902. MPTVAL=IVAGRA
  903. DO i=1,NGRA
  904. MELVAL=IVAL(i)
  905. IGMN=MIN(iGau,VELCHE(/1))
  906. IBMN=MIN(IB,VELCHE(/2))
  907. VELCHE(IGMN,IBMN)=GRADI(i)
  908. ENDDO
  909. ENDDO
  910. IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN
  911. iMess=195
  912. GOTO 260
  913. ENDIF
  914. ELSE
  915. C= COQ3 mecanique : un point d'integration au centre de gravite
  916. IF (IB.EQ.1) SEGINI,MWRK3
  917. CALL COQ3GR(XE,XDDL,GRADI,WORK)
  918. MPTVAL=IVAGRA
  919. DO i=1,NGRA
  920. MELVAL=IVAL(i)
  921. IBMN=MIN(IB,VELCHE(/2))
  922. VELCHE(1,IBMN)=GRADI(i)
  923. ENDDO
  924. ENDIF
  925. GOTO 100
  926. C= 2.14.6 - Elements DKT
  927. 28 IF (IB.EQ.1) SEGINI,MWRK2,MWRK4
  928. CALL VPAST(XE,BPSS)
  929. CALL VCORLC(XE,XEL,BPSS)
  930. CALL MATVEC(XDDL,XDDLOC,BPSS,6)
  931. EPAIST=XZero
  932. MPTVAL=IVACAR
  933. IF (IVAL(1).NE.0) THEN
  934. MELVAL=IVAL(1)
  935. IBMN=MIN(IB,VELCHE(/2))
  936. DO iGau=1,NBPGAU
  937. IGMN=MIN(iGau,VELCHE(/1))
  938. EPAIST=EPAIST+VELCHE(IGMN,IBMN)
  939. ENDDO
  940. EPAIST=EPAIST/NBPGAU
  941. ENDIF
  942. DO iGau=1,NBPGAU
  943. MPTVAL=IVACAR
  944. MELVAL=IVAL(2)
  945. IF (MELVAL.NE.0) THEN
  946. IBMN=MIN(IB,VELCHE(/2))
  947. EXCEN=VELCHE(1,IBMN)
  948. ELSE
  949. EXCEN=XZero
  950. ENDIF
  951. CALL BGRMAS(iGau,MELE,NBNO,LRE,IFOUR,NGRA,0,XEL,
  952. . EXCEN,SHPTOT,SHPWRK,BB,BGR,DJAC,IIPDPG)
  953. CALL BGRDEP(BGR,NGRA,XDDLOC,LRE,GRADI)
  954. MPTVAL=IVAGRA
  955. DO i=1,NGRA
  956. MELVAL=IVAL(i)
  957. IGMN=MIN(iGau,VELCHE(/1))
  958. IBMN=MIN(IB,VELCHE(/2))
  959. VELCHE(IGMN,IBMN)=GRADI(i)
  960. ENDDO
  961. ENDDO
  962. GOTO 100
  963. C= 2.14.7 - Elements COQ8 et COQ6
  964. 41 IF (IB.EQ.1) THEN
  965. SEGINI,MWRK3
  966. MINTE1=IPMIN1
  967. SEGACT,MINTE1
  968. ENDIF
  969. C= Recuperation de l'epaisseur et des excentrements
  970. MPTVAL=IVACAR
  971. EPAIST=XZero
  972. MELVAL=IVAL(1)
  973. IF (MELVAL.NE.0) THEN
  974. IBMN=MIN(IB,VELCHE(/2))
  975. DO iGau=1,NBPGAU
  976. IGMN=MIN(iGau,VELCHE(/1))
  977. EPAIST=EPAIST+VELCHE(IGMN,IBMN)
  978. ENDDO
  979. EPAIST=EPAIST/NBPGAU
  980. ENDIF
  981. EXCEN=XZero
  982. MELVAL=IVAL(2)
  983. IF (MELVAL.NE.0) THEN
  984. IBMN=MIN(IB,VELCHE(/2))
  985. DO iGau=1,NBPGAU
  986. IGMN=MIN(iGau,VELCHE(/1))
  987. EXCEN=EXCEN+VELCHE(IGMN,IBMN)
  988. ENDDO
  989. EXCEN=EXCEN/NBPGAU
  990. ENDIF
  991. C= Element thermique
  992. IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  993. CALL CQTGR2(XE,NBNN,NBPGAU,LRE,EPAIST,DZEGAU,
  994. . SHPTOT,MINTE1.SHPTOT,XDDL,WORK(1),WORK(1+LRE))
  995. IE=LRE
  996. C= Element mecanique
  997. ELSE
  998. CALL CQ8GRA(XE,NBNO,NBPGAU,LRE,EPAIST,EXCEN,DZEGAU,
  999. . SHPTOT,MINTE1.SHPTOT,XDDL,WORK,IRR)
  1000. IE=0
  1001. ENDIF
  1002. MPTVAL=IVAGRA
  1003. DO iGau=1,NBPGAU
  1004. DO i=1,NGRA
  1005. MELVAL=IVAL(i)
  1006. IGMN=MIN(iGau,VELCHE(/1))
  1007. IBMN=MIN(IB,VELCHE(/2))
  1008. IE=IE+1
  1009. VELCHE(IGMN,IBMN)=WORK(IE)
  1010. ENDDO
  1011. ENDDO
  1012. GOTO 100
  1013.  
  1014. C= 2.14.8 - Element COQ2
  1015. 44 IF (IB.EQ.1) SEGINI,MWRK2
  1016. C= Element thermique
  1017. IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  1018. ISDJC=0
  1019. DO iGau=1,NBPGAU
  1020. CALL CQTGR1(iGau,MELE,NBNN,LRE,IFOUR,NGRA,XE,SHPTOT,
  1021. . XDDL,SHPWRK,BGR,DJAC,GRADI)
  1022. IF (IERR.NE.0) GOTO 260
  1023. IF (DJAC.EQ.XZero) THEN
  1024. iMess=259
  1025. GOTO 260
  1026. ENDIF
  1027. MPTVAL=IVAGRA
  1028. DO i=1,NGRA
  1029. MELVAL=IVAL(i)
  1030. IGMN=MIN(iGau,VELCHE(/1))
  1031. IBMN=MIN(IB,VELCHE(/2))
  1032. VELCHE(IGMN,IBMN)=GRADI(i)
  1033. ENDDO
  1034. ENDDO
  1035. C= Element mecanique
  1036. ELSE
  1037. MPTVAL=IVACAR
  1038. IF (IVAL(1).NE.0) THEN
  1039. MELVAL=IVAL(1)
  1040. IBMN=MIN(IB,VELCHE(/2))
  1041. EPAIST=VELCHE(1,IBMN)
  1042. ELSE
  1043. EPAIST=XZero
  1044. ENDIF
  1045. DO iGau=1,NBPGAU
  1046. CALL BGRCQ2(BGR,DJAC,iGau,IFOUR,XE,NIFOUR,
  1047. . QSIGAU,POIGAU,IERT)
  1048. IF (IERT.NE.0) THEN
  1049. IF (IERT.EQ.1) iMess=255
  1050. IF (IERT.EQ.2) iMess=256
  1051. GOTO 260
  1052. ENDIF
  1053. CALL BGRDEP(BGR,NGRA,XDDL,LRE,GRADI)
  1054. MPTVAL=IVAGRA
  1055. DO i=1,NGRA
  1056. MELVAL=IVAL(i)
  1057. IGMN=MIN(iGau,VELCHE(/1))
  1058. IBMN=MIN(IB,VELCHE(/2))
  1059. VELCHE(IGMN,IBMN)=GRADI(i)
  1060. ENDDO
  1061. ENDDO
  1062. ENDIF
  1063. GOTO 100
  1064.  
  1065. C= 2.14.8 - Element BARR, TUY2, TUY3 en THERMIQUE et DIFFUSION
  1066. 46 CONTINUE
  1067. IF (IB.EQ.1) SEGINI,MWRK2
  1068. DO iGau=1,NBPGAU
  1069. C -- Calcul de la matrice B
  1070. CALL BDIFF1(XE,SHPTOT(1,1,iGau),NBNN,NGRA,+1,
  1071. & SHPWRK,BGR)
  1072.  
  1073. C -- Calcul du gradient en les Pts d'interet
  1074. CALL BST(BGR,XDDL,LRE,NGRA,GRADI)
  1075.  
  1076. MPTVAL=IVAGRA
  1077. N1PTEL=VELCHE(/1)
  1078. N1EL =VELCHE(/2)
  1079. DO i=1,NGRA
  1080. MELVAL=IVAL(i)
  1081. IGMN =MIN(iGau,N1PTEL)
  1082. IBMN =MIN(IB ,N1EL )
  1083. VELCHE(IGMN,IBMN)=GRADI(i)
  1084. ENDDO
  1085. ENDDO
  1086. GOTO 100
  1087.  
  1088. C= 2.14.9 - Element COQ4
  1089. 49 MPTVAL=IVACAR
  1090. MELVAL=IVAL(1)
  1091. IF (MELVAL.NE.0) THEN
  1092. IBMN=MIN(IB,VELCHE(/2))
  1093. EPAIST=VELCHE(1,IBMN)
  1094. ELSE
  1095. EPAIST=XZero
  1096. ENDIF
  1097. MELVAL=IVAL(2)
  1098. IF (MELVAL.NE.0) THEN
  1099. IBMN=MIN(IB,VELCHE(/2))
  1100. EXCEN=VELCHE(1,IBMN)
  1101. ELSE
  1102. EXCEN=XZero
  1103. ENDIF
  1104.  
  1105. C= Element thermique/diffusion
  1106. IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  1107. IF (IB.EQ.1) THEN
  1108. SEGINI,MWRK3
  1109. MINTE1=IPMIN1
  1110. SEGACT,MINTE1
  1111. ENDIF
  1112. CALL CQTGR2(XE,NBNN,NBPGAU,LRE,EPAIST,DZEGAU,
  1113. . SHPTOT,MINTE1.SHPTOT,XDDL,WORK(1),WORK(1+LRE))
  1114. MPTVAL=IVAGRA
  1115. IE=LRE
  1116. DO iGau=1,NBPGAU
  1117. DO i=1,NGRA
  1118. MELVAL=IVAL(i)
  1119. IGMN=MIN(iGau,VELCHE(/1))
  1120. IBMN=MIN(IB,VELCHE(/2))
  1121. IE=IE+1
  1122. VELCHE(IGMN,IBMN)=WORK(IE)
  1123. ENDDO
  1124. ENDDO
  1125.  
  1126. C= Element mecanique
  1127. ELSE
  1128. IF (IB.EQ.1) SEGINI,MWRK2,MWRK4
  1129. CALL CQ4LOC(XE,XEL,BPSS,IERT,1)
  1130. IF (IERT.EQ.1) IG1=IB
  1131. IF (IERT.EQ.3) THEN
  1132. IERT=0
  1133. NOPLAN=1
  1134. ELSE
  1135. NOPLAN=0
  1136. ENDIF
  1137. CALL MATVEC(XDDL,XDDLOC,BPSS,8)
  1138. DO iGau=1,NBPGAU
  1139. CALL BGRCQ4(iGau,XEL,SHPTOT,SHPWRK,BGR,DJAC,EXCEN,
  1140. . NOPLAN,IERT)
  1141. IF (IERT.EQ.1) THEN
  1142. iMess=321
  1143. GOTO 260
  1144. ENDIF
  1145. CALL BGRDEP(BGR,NGRA,XDDLOC,LRE,GRADI)
  1146. MPTVAL=IVAGRA
  1147. DO i=1,NGRA
  1148. MELVAL=IVAL(i)
  1149. IGMN=MIN(iGau,VELCHE(/1))
  1150. IBMN=MIN(IB,VELCHE(/2))
  1151. VELCHE(IGMN,IBMN)=GRADI(i)
  1152. ENDDO
  1153. ENDDO
  1154. ENDIF
  1155. GOTO 100
  1156.  
  1157. C= 2.14.10 - Element DST
  1158. 93 IF (IB.EQ.1) THEN
  1159. NV1=NMATT
  1160. SEGINI,MWRK2,MWRK3,MWRK4,MVELCH
  1161. ENDIF
  1162. CALL VPAST(XE,BPSS)
  1163. CALL VCORLC(XE,XEL,BPSS)
  1164. CALL MATVEC(XDDL,XDDLOC,BPSS,6)
  1165. C= Calcul de la moyenne des epaisseurs
  1166. MPTVAL=IVACAR
  1167. EPAIST=XZero
  1168. MELVAL=IVAL(1)
  1169. IF (MELVAL.NE.0) THEN
  1170. IBMN=MIN(IB,VELCHE(/2))
  1171. DO iGau=1,NBPGAU
  1172. IGMN=MIN(iGau,VELCHE(/1))
  1173. EPAIST=EPAIST+VELCHE(IGMN,IBMN)
  1174. ENDDO
  1175. EPAIST=EPAIST/NBPGAU
  1176. ENDIF
  1177. C= Calcul de la moyenne des excentrements
  1178. EXCEN=XZero
  1179. MELVAL=IVAL(2)
  1180. IF (MELVAL.NE.0) THEN
  1181. IBMN=MIN(IB,VELCHE(/2))
  1182. DO iGau=1,NBPGAU
  1183. IGMN=MIN(iGau,VELCHE(/1))
  1184. EXCEN=EXCEN+VELCHE(IGMN,IBMN)
  1185. ENDDO
  1186. EXCEN=EXCEN/NBPGAU
  1187. ENDIF
  1188. DO iGau=1,NBPGAU
  1189. MPTVAL=IVAMAT
  1190. DO i=1,NMATT
  1191. IF (IVAL(i).NE.0) THEN
  1192. MELVAL=IVAL(i)
  1193. IGMN=MIN(iGau,VELCHE(/1))
  1194. IBMN=MIN(IB,VELCHE(/2))
  1195. VALMAT(i)=VELCHE(IGMN,IBMN)
  1196. ELSE
  1197. VALMAT(i)=XZero
  1198. ENDIF
  1199. ENDDO
  1200. IF (iGau.LE.NBGMAT.AND.(IB.LE.NELMAT.OR.NBGMAT.GT.1)) THEN
  1201. CALL DOHDST(VALMAT,CMATE,IFOUR,NSTRS,DDHOOK,IRTD1)
  1202. IF (IRTD1.EQ.0) GOTO 260
  1203. ENDIF
  1204. CALL HOOKMU(EPAIST,XZero,LHOOK,DDHOOK,DDHOMU)
  1205. CALL ZERO(BGR,NGRA,LRE)
  1206. C= Termes de la matrice BGR relatifs aux cisaillements transverses
  1207. CALL DSTGR2(XEL,NGRA,NSTRS,DDHOMU,WORK(1),WORK(10),
  1208. . WORK(19),BGR)
  1209. C= Termes de la matrice BGR relatifs aux effets de membrane
  1210. CALL DSTGR1(iGau,NBNO,XEL,NGRA,QSIGAU,ETAGAU,SHPTOT,SHPWRK,
  1211. . EXCEN,WORK(1),WORK(10),WORK(19),BGR,DJAC)
  1212. C= Multiplication de BGR par les deplacements XDDLOC
  1213. CALL BGRDEP(BGR,NGRA,XDDLOC,LRE,GRADI)
  1214. MPTVAL=IVAGRA
  1215. DO i=1,NGRA
  1216. MELVAL=IVAL(i)
  1217. IGMN=MIN(iGau,VELCHE(/1))
  1218. IBMN=MIN(IB,VELCHE(/2))
  1219. VELCHE(IGMN,IBMN)=GRADI(i)
  1220. EnDDO
  1221. ENDDO
  1222. GOTO 100
  1223.  
  1224. C= 2.14.29 - ElementS POUTRE, TUYA, TIMO
  1225. 29 IF (IB.EQ.1) THEN
  1226. SEGINI,MWRK2
  1227. SEGINI,MWRK3
  1228. ENDIF
  1229.  
  1230. C= Element thermique
  1231. IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  1232. IMESS = 86
  1233. GOTO 260
  1234. C= Element mecanique
  1235. ELSE
  1236.  
  1237. C ON CHERCHE LES CARACTERISTIQUES DE L ELEMENT IB
  1238. CALL ZERO(WORK,NCAR,1)
  1239. DO 4029 IGAU=1,NBNN
  1240. MPTVAL=IVACAR
  1241. DO 6029 IC=1,NCAR
  1242. IF (IVAL(IC).NE.0) THEN
  1243. MELVAL=IVAL(IC)
  1244. IBMN=MIN(IB ,VELCHE(/2))
  1245. IGMN=MIN(IGAU,VELCHE(/1))
  1246. IF (IGMN.GT.0.AND.IBMN.GT.0) THEN
  1247. WORK(IC)=WORK(IC)+VELCHE(IGMN,IBMN)
  1248. ELSE
  1249. WORK(IC)=0.D0
  1250. ENDIF
  1251. ELSE
  1252. WORK(IC)=0.D0
  1253. ENDIF
  1254. IF (IGAU.EQ.NBNN) WORK(IC)=WORK(IC)/NBNN
  1255. 6029 CONTINUE
  1256. 4029 CONTINUE
  1257.  
  1258.  
  1259. C CAS DES TUYAUX - ON CALCULE LES CARACTERISTIQUES DE LA POUTRE
  1260. C EQUIVALENTE
  1261. IF (MELE.EQ.42) THEN
  1262. CISA=WORK(4)
  1263. VX=WORK(5)
  1264. VY=WORK(6)
  1265. VZ=WORK(7)
  1266. CALL TUYCAR(WORK,CISA,VX,VY,VZ,KERRE,2)
  1267. ENDIF
  1268.  
  1269. C ON CALCULE LES GRADIENTS
  1270. IF (MELE.EQ.84) THEN
  1271. IF (CMATE.EQ.'SECTION') THEN
  1272. IF (IFOUR.EQ.-2.OR.IFOUR.EQ.-1.OR.IFOUR.EQ.-3) THEN
  1273. CALL TIMGR2(XE,XDDL,WORK(12),WORK(25))
  1274. ELSE
  1275. CALL TIMGR1(XE,XDDL,WORK(1),WORK(12),WORK(25))
  1276. ENDIF
  1277.  
  1278. ELSE
  1279. IF (IFOUR.EQ.-2.OR.IFOUR.EQ.-1.OR.IFOUR.EQ.-3) THEN
  1280. CALL TIMGR2(XE,XDDL,WORK(12),WORK(25))
  1281. ELSE
  1282. CALL TIMGR1(XE,XDDL,WORK(7),WORK(12),WORK(25))
  1283. ENDIF
  1284. ENDIF
  1285. ELSE
  1286. IF (IFOUR.EQ.-2.OR.IFOUR.EQ.-1.OR.IFOUR.EQ.-3) THEN
  1287. CALL POUGR2(XE,XDDL,WORK,WORK(12),WORK(25))
  1288. ELSE
  1289. CALL POUGR1(XE,XDDL,WORK,WORK(12),WORK(25))
  1290. ENDIF
  1291. ENDIF
  1292. C REMPLISSAGE
  1293. DO iGau=1,NBPGAU
  1294. MPTVAL=IVAGRA
  1295. DO i=1,NGRA
  1296. MELVAL=IVAL(i)
  1297. IGMN=MIN(iGau,VELCHE(/1))
  1298. IBMN=MIN(IB,VELCHE(/2))
  1299. IDECA=11+I+(IGAU-1)*NGRA
  1300. VELCHE(IGMN,IBMN)=WORK(IDECA)
  1301. ENDDO
  1302. ENDDO
  1303. ENDIF
  1304. GOTO 100
  1305. C
  1306. C ELEMENT JOI2
  1307. C
  1308. 85 IF (IB.EQ.1) THEN
  1309. SEGINI,MWRK2
  1310. SEGINI,MWRK4
  1311. ENDIF
  1312. C= Element thermique
  1313. IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  1314. IMESS = 86
  1315. GO TO 260
  1316. C= Element mecanique
  1317. ELSE
  1318. C
  1319. CALL JO2LOC(XE,SHPTOT,NBNN,XEL,BPSS,NOQUAL)
  1320. C
  1321. C BOUCLE SUR LES POINTS DE GAUSS
  1322. C
  1323. DO 4085 IGAU=1,NBPGAU
  1324. C
  1325. CALL BJO2(IGAU,MFR,IFOUR,NIFOUR,XEL,BPSS,SHPTOT,SHPWRK,
  1326. . BGR,DJAC,IRRT)
  1327. C IRRT.NE.0 JACOBIEN <= 0
  1328. IF(IRRT.NE.0) THEN
  1329. INTERR(1)=IB
  1330. IMESS=612
  1331. GOTO 260
  1332. ENDIF
  1333. C
  1334. CALL BST(BGR,XDDL,LRE,NSTRS,GRADI)
  1335. C
  1336. C REMPLISSAGE DU SEGMENT CONTENANT LES GRADIENTS
  1337. C
  1338. MPTVAL=IVAGRA
  1339. DO 9085 ICOMP=1,NGRA
  1340. MELVAL=IVAL(ICOMP)
  1341. IGMN=MIN(IGAU,VELCHE(/1))
  1342. IBMN=MIN(IB ,VELCHE(/2))
  1343. VELCHE(IGMN,IBMN)=GRADI(ICOMP)
  1344. 9085 CONTINUE
  1345. 4085 CONTINUE
  1346. C
  1347. ENDIF
  1348. GOTO 100
  1349. C
  1350. C ELEMENT JOI4
  1351. C
  1352. 88 IF (IB.EQ.1) THEN
  1353. SEGINI,MWRK2
  1354. SEGINI,MWRK4
  1355. ENDIF
  1356. C= Element thermique
  1357. IF (ITHER.NE.0 .OR. IDIFF.NE.0) THEN
  1358. IMESS = 86
  1359. GO TO 260
  1360. C= Element mecanique
  1361. ELSE
  1362.  
  1363. C
  1364. CALL JO4LOC(XE,SHPTOT,NBNN,XEL,BPSS,NOQUAL)
  1365. C
  1366. C BOUCLE SUR LES POINTS DE GAUSS
  1367. C
  1368. DO 4088 IGAU=1,NBPGAU
  1369. C
  1370. CALL BJO4(IGAU,XEL,BPSS,SHPTOT,SHPWRK,BGR,DJAC,IRRT)
  1371. C IRRT.NE.0 JACOBIEN <= 0
  1372. IF (IRRT.NE.0) THEN
  1373. INTERR(1)=IB
  1374. IMESS = 611
  1375. GOTO 260
  1376. ENDIF
  1377. C
  1378. CALL BST(BGR,XDDL,LRE,NGRA,GRADI)
  1379. C
  1380. C REMPLISSAGE DU SEGMENT CONTENANT LES GRADIENTS
  1381. C
  1382. MPTVAL=IVAGRA
  1383. DO 9088 ICOMP=1,NGRA
  1384. MELVAL=IVAL(ICOMP)
  1385. IGMN=MIN(IGAU,VELCHE(/1))
  1386. IBMN=MIN(IB ,VELCHE(/2))
  1387. VELCHE(IGMN,IBMN)=GRADI(ICOMP)
  1388. 9088 CONTINUE
  1389. 4088 CONTINUE
  1390. C
  1391. ENDIF
  1392. GOTO 100
  1393.  
  1394. C= 2.14.265 - JOINT UNIDIMENSIONNEL JOI1
  1395. 265 SEGINI,MWRK2,MWRK3,MWRK4
  1396. C
  1397. C RANGEMENT DES CARACTERISTIQUES DANS WORK
  1398. C
  1399. MPTVAL=IVAMAT
  1400. DO IC=1,NMATT
  1401. IF(IVAL(IC).NE.0) THEN
  1402. MELVAL=IVAL(IC)
  1403. IBMN=MIN(IB,VELCHE(/2))
  1404. WORK(IC)=VELCHE(1,IBMN)
  1405. ELSE
  1406. WORK(IC)=0.D0
  1407. ENDIF
  1408. END DO
  1409. C
  1410. CALL MAPALU(NMATT,WORK,BPSS,IDIM)
  1411. C
  1412. C CALCUL DES DEPLACEMENTS LOCAUX
  1413. C
  1414. IAW1 = 101
  1415. IAW2 = IAW1 + LRE
  1416. CALL JOILOC(XDDL,BPSS,WORK(IAW1),WORK(IAW2),LRE,IDIM)
  1417. *
  1418. C ON CALCULE LES GRADIENTS
  1419. *
  1420. CALL JOIGR1(XDDL,WORK,LRE,NGRA,IDIM)
  1421. C REMPLISSAGE
  1422. DO iGau=1,NBPGAU
  1423. MPTVAL=IVAGRA
  1424. DO i=1,NGRA
  1425. MELVAL=IVAL(i)
  1426. IGMN=MIN(iGau,VELCHE(/1))
  1427. IBMN=MIN(IB,VELCHE(/2))
  1428. * IDECA=11+I+(IGAU-1)*NGRA
  1429. VELCHE(IGMN,IBMN)=WORK(I)
  1430. ENDDO
  1431. ENDDO
  1432. GOTO 100
  1433.  
  1434. C= 2.14.266 - Element ZCO2
  1435. 266 CONTINUE
  1436. IF (IB.EQ.1) SEGINI,MWRK2,MWRK4
  1437. DO 2660 iGau=1,NBPGAU
  1438. C MATRICE JACOBIENNE
  1439. DO I=1,NBNO
  1440. SHPWRK(1,I) = SHPTOT(1,I,IGAU)
  1441. SHPWRK(2,I) = SHPTOT(2,I,IGAU)
  1442. ENDDO
  1443. C TRAITEMENT PARTICULIER POUR LE CAS 2D
  1444. C SINON, APPEL A DEVOLU
  1445. IF(IDIM.EQ.2) THEN
  1446. dXdQsi=0.D0
  1447. dYdQsi=0.D0
  1448. DO i=1,NBNO
  1449. dXdQsi=dXdQsi+SHPWRK(2,i)*XE(1,i)
  1450. dYdQsi=dYdQsi+SHPWRK(2,i)*XE(2,i)
  1451. ENDDO
  1452. DJAC=SQRT(dXdQsi*dXdQsi+dYdQsi*dYdQsi)
  1453. C ON MULTIPLIE PAR LE RAYON EN AXI
  1454. IF (IFOUR.EQ.0) THEN
  1455. RAYON=0.D0
  1456. DO IRAY=1,NBNO
  1457. RAYON=RAYON+SHPTOT(1,IRAY,IGAU)*XE(1,IRAY)
  1458. ENDDO
  1459. DJAC=DJAC*RAYON
  1460. ENDIF
  1461. ELSE
  1462. * write(ioimp,*) 'option 3d non implementee'
  1463. GOTO 260
  1464. * CALL DEVOLU(XE,SHPWRK,MFR,NBNO,IFOUR,NIFOUR,IDIM,1.D0,RR,DJAC)
  1465. ENDIF
  1466. IF (DJAC.LT.XZero) ISDJC=ISDJC+1
  1467. IF (DJAC.EQ.XZero) THEN
  1468. iMess=259
  1469. GOTO 260
  1470. ENDIF
  1471. c passage Ni,qsi -> Ni,x
  1472. dQsidX = 0.d0
  1473. dQsidY = 0.d0
  1474. if((abs(dXdQsi)).gt.XPETIT) dQsidX = 1.d0/dXdQsi
  1475. if((abs(dYdQsi)).gt.XPETIT) dQsidY = 1.d0/dYdQsi
  1476. IF(IDIM.EQ.3) THEN
  1477. dQsidZ = 0.d0
  1478. if(abs(dZdQsi).gt.XPETIT) dQsidZ = 1.d0/dZdQsi
  1479. ENDIF
  1480. CALL ZERO(BGR,NGRA,LRE)
  1481. c on boucle sur les NGRA(=idim*idim) ligne :
  1482. c IGRA2 permet de remplir 1 sur idim
  1483. IGRA2=1
  1484. DO iidim = 1,idim
  1485. c on boucle sur les idim*NBNO colonnes :
  1486. c II permet de remplir 1 sur idim
  1487. DO I=1,NBNO
  1488. II = idim*(I-1) + iidim
  1489. BGR(IGRA2 ,II) = SHPWRK(2,I)*dQsidX
  1490. BGR(IGRA2+1,II) = SHPWRK(2,I)*dQsidY
  1491. if(idim.eq.3) BGR(IGRA2+2,II) = SHPWRK(2,I)*dQsidZ
  1492. ENDDO
  1493. IGRA2=IGRA2+idim
  1494. ENDDO
  1495. c {grad u}_i = [Bij] * {u_j}
  1496. CALL BGRDEP(BGR,NGRA,XDDL,LRE,GRADI)
  1497. c on remplit
  1498. MPTVAL=IVAGRA
  1499. DO i=1,NGRA
  1500. MELVAL=IVAL(i)
  1501. IGMN=MIN(iGau,VELCHE(/1))
  1502. IBMN=MIN(IB,VELCHE(/2))
  1503. VELCHE(IGMN,IBMN)=GRADI(i)
  1504. ENDDO
  1505. 2660 CONTINUE
  1506. GOTO 100
  1507.  
  1508. C= 4.14.267 - Element ZCO3
  1509. 267 CONTINUE
  1510. IF (IB.EQ.1) SEGINI,MWRK2,MWRK4
  1511. DO 2670 iGau=1,NBPGAU
  1512. C MATRICE JACOBIENNE
  1513. DO I=1,NBNO
  1514. SHPWRK(1,I) = SHPTOT(1,I,IGAU)
  1515. SHPWRK(2,I) = SHPTOT(2,I,IGAU)
  1516. SHPWRK(3,I) = SHPTOT(3,I,IGAU)
  1517. ENDDO
  1518. c write(6,*) 'SHPWRK(2,I) = ' ,(SHPWRK(2,iou),iou=1,NBNO)
  1519. c write(6,*) 'SHPWRK(3,I) = ' ,(SHPWRK(3,iou),iou=1,NBNO)
  1520.  
  1521.  
  1522. dXdQsi=0.D0
  1523. dXdEta=0.D0
  1524. dYdQsi=0.D0
  1525. dYdEta=0.D0
  1526. dZdQsi=0.D0
  1527. dZdEta=0.D0
  1528. DO i=1,NBNO
  1529. dXdQsi=dXdQsi+SHPWRK(2,i)*XE(1,i)
  1530. dXdEta=dXdEta+SHPWRK(3,i)*XE(1,i)
  1531. dYdQsi=dYdQsi+SHPWRK(2,i)*XE(2,i)
  1532. dYdEta=dYdEta+SHPWRK(3,i)*XE(2,i)
  1533. dZdQsi=dYdQsi+SHPWRK(2,i)*XE(3,i)
  1534. dZdEta=dZdEta+SHPWRK(3,i)*XE(3,i)
  1535. ENDDO
  1536.  
  1537. c write(6,*)' dXdQsi = ',dXdQsi
  1538. c write(6,*)' dYdQsi = ',dYdQsi
  1539. c write(6,*)' dZdQsi = ',dZdQsi
  1540. c write(6,*)' dXdEta = ',dXdEta
  1541. c write(6,*)' dYdEta = ',dYdEta
  1542. c write(6,*)' dZdEta = ',dZdEta
  1543. C definition des vecteurs de la base orthonormee
  1544. c vQsi
  1545. vQsi = sqrt(dXdQsi*dXdQsi+dYdQsi*dYdQsi+dZdQsi*dZdQsi)
  1546. c write(6,*) 'Norme de vQsi = ',vQsi
  1547. vQsiX = dXdQsi / vQsi
  1548. vQsiY = dYdQsi / vQsi
  1549. vQsiZ = dZdQsi / vQsi
  1550. c write(6,*) ' vQsiX = ', vQsiX
  1551. c write(6,*) ' vQsiY = ', vQsiY
  1552. c write(6,*) ' vQsiZ = ', vQsiZ
  1553.  
  1554. c produit scalaire VEta vQsi
  1555. Sca1 = dXdEta*vQsiX + dYdEta*vQsiY + dZdEta*vQsiZ
  1556. c write(6,*) 'VEta.vQsi = ',Sca1
  1557. c EEta = Veta - sca1 Eqsi (orthogonalisation)
  1558. vEtaX = dXdEta - sca1 * vQsiX
  1559. vEtaY = dYdEta - sca1 * vQsiY
  1560. vEtaZ = dZdEta - sca1 * vQsiZ
  1561. c write(6,*) ' vEtaX = ', vEtaX
  1562. c write(6,*) ' vEtaY = ', vEtaY
  1563. c write(6,*) ' vEtaZ = ', vEtaZ
  1564. c on morme EEta
  1565. vEta = sqrt(vEtaX*vEtaX+vEtaY*vEtaY+vEtaZ*vEtaZ)
  1566. c write(6,*) 'Norme de vEta = ',veta
  1567. vEtaX = vEtaX / vEta
  1568. vEtaY = vEtaY / vEta
  1569. vEtaZ = vEtaZ / vEta
  1570.  
  1571. c Qsi,x
  1572. dQsidX=0.D0
  1573. dQsidY=0.D0
  1574. dQsidZ=0.D0
  1575. dEtadX=0.D0
  1576. dEtadY=0.D0
  1577. dEtadZ=0.D0
  1578. dQsidX=(vQsiX - (sca1*vEtaX)/vEta)/vQsi
  1579. dQsidY=(vQsiY - (sca1*vEtaY)/vEta)/vQsi
  1580. dQsidZ=(vQsiZ - (sca1*vEtaZ)/vEta)/vQsi
  1581. dEtadX=vEtaX/vEta
  1582. dEtadY=vEtaY/vEta
  1583. dEtadZ=vEtaZ/vEta
  1584.  
  1585. c write(6,*)' dQsidX = ',dQsidX
  1586. c write(6,*)' dQsidY = ',dQsidY
  1587. c write(6,*)' dQsidZ = ',dQsidZ
  1588. c write(6,*)' dEtadX = ',dEtadX
  1589. c write(6,*)' dEtadY = ',dEtadY
  1590. c write(6,*)' dEtadZ = ',dEtadZ
  1591.  
  1592. c write(6,*) 'SHPWRK(1,I) = ' ,(SHPWRK(1,iou),iou=1,NBNO)
  1593. c write(6,*) 'SHPWRK(2,I) = ' ,(SHPWRK(2,iou),iou=1,NBNO)
  1594. c write(6,*) 'SHPWRK(3,I) = ' ,(SHPWRK(3,iou),iou=1,NBNO)
  1595.  
  1596. CALL ZERO(BGR,NGRA,LRE)
  1597. c on boucle sur les NGRA(=idim*idim) ligne :
  1598. c IGRA2 permet de remplir 1 sur idim
  1599. IGRA2=1
  1600. DO iidim = 1,idim
  1601. c on boucle sur les idim*NBNO colonnes :
  1602. c II permet de remplir 1 sur idim
  1603. DO I=1,NBNO
  1604. II = idim*(I-1) + iidim
  1605. BGR(IGRA2 ,II) = SHPWRK(2,I)*dQsidX+SHPWRK(3,I)*dEtadX
  1606. BGR(IGRA2+1,II) = SHPWRK(2,I)*dQsidY+SHPWRK(3,I)*dEtadY
  1607. if(idim.eq.3) then
  1608. BGR(IGRA2+2,II) = SHPWRK(2,I)*dQsidZ+SHPWRK(3,I)*dEtadZ
  1609. endif
  1610. ENDDO
  1611. IGRA2=IGRA2+idim
  1612. ENDDO
  1613. c {grad u}_i = [Bij] * {u_j}
  1614. c DO I=1,NGRA
  1615. c write(6,*) 'BGR(',I,',..) = ' ,(BGR(I,iou),iou=1,idim*NBNO)
  1616. c write(6,*) 'BGR(2,I) = ' ,(BGR(2,iou),iou=1,idim*NBNO)
  1617. c write(6,*) 'BGR(3,I) = ' ,(BGR(3,iou),iou=1,idim*NBNO)
  1618. c ENDDO
  1619.  
  1620. CALL BGRDEP(BGR,NGRA,XDDL,LRE,GRADI)
  1621. c write(6,*) 'XDDL(i) = ' ,(XDDL(iou),iou=1,LRE)
  1622. c write(6,*) 'GRADI(i) = ' ,(GRADI(iou),iou=1,NGRA)
  1623. c on remplit
  1624. MPTVAL=IVAGRA
  1625. DO i=1,NGRA
  1626. MELVAL=IVAL(i)
  1627. IGMN=MIN(iGau,VELCHE(/1))
  1628. IBMN=MIN(IB,VELCHE(/2))
  1629. VELCHE(IGMN,IBMN)=GRADI(i)
  1630. ENDDO
  1631.  
  1632. 2670 CONTINUE
  1633. GOTO 100
  1634.  
  1635.  
  1636. 100 CONTINUE
  1637.  
  1638.  
  1639.  
  1640. IF (ITHEHY.NE.0) SEGSUP,MLREE1,MLREE2
  1641. C= Fin de la boucle sur les elements
  1642. iOK=1
  1643. C ======
  1644. C 2.15 - Desactivation/suppression de segments associes a iSou
  1645. C ======
  1646. 260 IF (MWRK2.NE.0) SEGSUP,MWRK2
  1647. IF (MWRK3.NE.0) SEGSUP,MWRK3
  1648. IF (MWRK4.NE.0) SEGSUP,MWRK4
  1649. IF (MVELCH.NE.0) SEGSUP,MVELCH
  1650. 250 CONTINUE
  1651. SEGSUP,MWRK1
  1652. NOMID=MOGRAD
  1653. if(lsupgd)SEGSUP,NOMID
  1654. 240 NOMID=MODEPL
  1655. if(lsupdp)SEGSUP,NOMID
  1656. IF(COMAUT) MODEPL=0
  1657. IF(IVADEP .GT. 0) CALL DTMVAL(IVADEP,1)
  1658. 230 IF (MOMATR.NE.0) THEN
  1659. NOMID=MOMATR
  1660. SEGSUP,NOMID
  1661. ENDIF
  1662. IF(IVAMAT .GT. 0) CALL DTMVAL(IVAMAT,1)
  1663. 220 IF (MOCARA.NE.0) THEN
  1664. NOMID=MOCARA
  1665. SEGSUP,NOMID
  1666. ENDIF
  1667. IF(IVACAR .GT. 0) CALL DTMVAL(IVACAR,1)
  1668. 200 CONTINUE
  1669. C= Sortie prematuree en cas d'ERREUR (iOK=0)
  1670. IF (iOK.EQ.0) THEN
  1671. IF(IVAGRA .GT. 0) CALL DTMVAL(IVAGRA,3)
  1672. IF (MCHAML.NE.0) SEGSUP,MCHAML
  1673. SEGSUP,MCHELM
  1674. IF (iMess.NE.0) THEN
  1675. INTERR(1)=IB
  1676. CALL ERREUR(iMess)
  1677. ENDIF
  1678. GOTO 300
  1679. ENDIF
  1680. MPTVAL = IVAGRA
  1681. DO i = 1, IVAL(/1)
  1682. MELVAL = IVAL(i)
  1683. CALL COMRED(MELVAL)
  1684. IVAL(i)=MELVAL
  1685. ENDDO
  1686. IF(IVAGRA .GT. 0) CALL DTMVAL(IVAGRA,1)
  1687. 2000 continue
  1688.  
  1689. C 3 - MENAGE : DESACTIVATION/DESTRUCTION DE SEGMENTS
  1690. C ====================================================
  1691. IRET=1
  1692. if (n1.ne.isouss) then
  1693. n1=isouss
  1694. segadj mchelm
  1695. endif
  1696. 300 CONTINUE
  1697. NOTYPE=MOTYCH
  1698. SEGSUP,NOTYPE
  1699.  
  1700. END
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  

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