Télécharger fldo3d.eso

Retour à la liste

Numérotation des lignes :

fldo3d
  1. C FLDO3D SOURCE FD218221 24/02/07 21:15:11 11834
  2. subroutine fldo3d(XMAT,NMAT,sig0,sigf,deps,nstrs,VAR0,VARF,
  3. # NVARI,teta1,teta2,dt,ierr1,iso,mfr,ifou,istep,epst0,epstf,
  4. # tetaref,NBELAS3D,NB_MAT_BASE,NB_MAT_SUPP,NB_VAR_BASE,NB_VAR_SUPP,
  5. # NB_DECAL,NBNMAX3D,NBNB3D,IDIMB3D,XE3D,NBVIA3D,INLVIA3D,
  6. # NMAT0,NMAT1,NMAT2,NMAT3,NVAR0,NVAR1,NVAR2,NVAR3,NB_PARA_FIBRE_U)
  7.  
  8. c A Sellier oct 2022
  9. c NMAT0 fin des parametres elastiques
  10. c NMAT1 fin du modele de la matrice
  11. c NMAT2 fin des parametres pour les modules complementaires de fluendo (exple rag Multon ou fibre Gontero)
  12. c NMAT3 fin des parametres pour les renforts repartis
  13. c NMAT fin des parametres pour les champs de phase via Helmholtz
  14.  
  15. c NVAR0 0
  16. c NVAR1 fin des variables internes pour la matrice
  17. c NVAR2 fin des variables internes pour les modules complementaires
  18. c NVAR3 fin des variables internes pour les renforts repartis
  19. c NVARI fin des variables internes pour les champs de phases via Helmholtz
  20.  
  21. c calcul de l ecoulement visco-elasto-plastique: Sellier mars 2014
  22. c istep pour la phase non locale : juillet 2015
  23. c actualisation DTT : aout 2018
  24.  
  25. c 08/05/2020 : hypothese non locale
  26. c istep=0 : calcul local
  27. c istep=1 : preparation du 1er passge non local
  28. c istep=2 : dernier passage non local effectue
  29. c istep=3 : passage non local intermediaire en non local iteratif
  30.  
  31. c tables de dimension fixe pour resolution des sytemes lineaires
  32. implicit real*8 (a-h,o-z)
  33. implicit integer (i-n)
  34.  
  35. c******** declaration des variables externes ***************************
  36. integer nmat,nstrs,NVARI,nbelas3d,ierr1,mfr
  37. real*8 xmat(nmat),sig0(nstrs),sigf(nstrs),deps(nstrs)
  38. c integer IVALMAT3D(nmat)
  39. real*8 epst0(nstrs),epstf(nstrs)
  40. real*8 var0(NVARI),varf(NVARI)
  41. real*8 dt,teta1,teta2,tetaref
  42. c variable logique pour matrice init isotrope
  43. logical iso
  44. integer ifou,istep
  45.  
  46. c *** nombre de parametres materiaux *******************************
  47. integer NB_MAT_BASE,NB_MAT_SUPP
  48.  
  49. c *** nombre de variables internes *********************************
  50. c nombre de variables internes
  51. integer NB_VAR_BASE,NB_VAR_SUPP
  52.  
  53. c *** nombre de variables facultative entre les obligatoires et les helmholtz
  54. integer NB_DECAL
  55.  
  56. c**************Coordonnes des noeuds de l element fini *****************
  57. c ligne a inclure dans les modeles utilisant les noeuds
  58. integer NBNMAX3D,NBNB3D,IDIMB3D
  59. real*8 XE3D(3,NBNMAX3D)
  60. c***********************************************************************
  61.  
  62.  
  63. c************* parametres pour les renforts ****************************
  64. c lignes a inclure dans les modeles utilisants les renforts
  65. c include './nombre_renforts.h'
  66. -INC HNBRREN
  67. c include './declare_materiaux_renforts.h'
  68. -INC HDECREN
  69. c***********************************************************************
  70.  
  71. c************** parametres pour Helmholtz ******************************
  72. c lignes a inclure dans les modeles utilisant Helmholtz
  73. c include './nombre_helmholtz.h'
  74. -INC HNBRHEL
  75. c include './declare_materiaux_helmholtz.h'
  76. -INC HDECHEL
  77. c***********************************************************************
  78.  
  79.  
  80. c***********************************************************************
  81. c parametres obligatoires pour pointer correctement les renforts et
  82. c les formulations d helmholtz
  83. integer NMAT0,NMAT1,NMAT2,NVAR0,NVAR1,NVAR2,NVAR3
  84. c***********************************************************************
  85.  
  86.  
  87. c *** tableau pour la resolution des systemes lineaires ************
  88. integer ngf
  89. parameter (ngf=65)
  90. real*8 XN(ngf),BN(ngf),ANN(ngf,(ngf+1))
  91. integer ipzero(ngf)
  92.  
  93.  
  94. c *** parametres materiaux *****************************************
  95. c parametres materiaux donnes
  96. real*8 hyd0,hyds
  97. real*8 young00,nu00,rt00,reft00,delta00,beta00,ept00
  98. real*8 gft00,epsm00,psik,xflu,tauk00,taum00,taum0,nrjm,dt80,nrjw
  99. real*8 biotw00,xnsat00,poro2,vrag00,ekdg,gfr00,kshr
  100. real*8 vw2,mvgn,epc0,ekdc
  101. real*8 tetar,tetas,dfmx
  102. real*8 taar,nrjg,srsrag,alatr,epssr
  103. real*8 mdtt00,wdtt,pdtt
  104. real*8 vref,vmax,cvrt00
  105. real*8 tdef,nrjp,srsdef,vdef00,cna,ttdd,ttrp,nrjd,tfid,tdid
  106. real*8 exmd,exnd,cnab,cnak,ssad,ttdf,nrjf,nsul
  107. real*8 ekds,skdw,tkvg
  108. real*8 ttrg,tdyn
  109. real*8 cshr,kdef,cdef,vvdef
  110. real*8 hplt00,hplw00,hplw,hplg00,hpls00
  111. real*8 tetarw
  112.  
  113. c variables pour la deformation thermique transitoire
  114. real*8 tdtt
  115.  
  116. c parametres materiaux deduits des donnes
  117. c deformation elastique de reference pour le fluage
  118. real*8 epser,epc1,epc00,eweb
  119.  
  120. c **** variables locales a fldo3d *******************************
  121.  
  122. c tenseur unitaires de reference
  123. real*8 vref33(3,3),vref33t(3,3)
  124. c variables generales
  125. integer i,j,k,l
  126. integer ncal,nmax,nmax1
  127. c nmax nombre maxi de sous iteration en retour radial
  128. c nmax1 nombre maxi de sous iteration sans couplage des criteres diffus localises
  129. parameter(nmax=200,nmax1=190)
  130.  
  131. integer nc
  132. c nombre de criteres
  133. parameter (nc=13)
  134. real*8 alphadp(3),betadp(3),factif(nc)
  135. logical actif(nc),complet(nc)
  136. real*8 vnorm
  137. logical ppas
  138. real*8 deps6(6),epstf6(6),epst06(6),epstf33(3,3),epst033(3,3)
  139. real*8 theta
  140. logical plast_seule,fl3d,end3d
  141. real*8 xwl2,tau_trac_wl2,xwl2max,cwrt,tau_trac_wl2_max
  142. real*8 sig13(3)
  143. real*8 young,nu,rt,rc,reft,rc1,delta,beta,gft,gfr
  144. real*8 ept,epsm,xnsat,biotw,Vvgel,kgel,cgel
  145. real*8 lambda,Mub
  146. real*8 raideur66(6,6),souplesse66(6,6)
  147. real*8 xmt
  148. logical dtiso
  149. real*8 nc33(3,3)
  150. real*8 dth00,dth0,poro1,vw1,dth1,CTHp1,CTHv1
  151. real*8 epsk006(6),epsm006(6),sigef06(6)
  152. real*8 sigke06(6),sigm06(6)
  153. real*8 dtr00,dtr0,dfl00,dfl0
  154. real*8 bw0,pw0,bg0,pg0,bs0,ps0
  155. real*8 epspc600(6),epspc60(6),epspc6p(6),depspc6(6)
  156. real*8 epspt600(6),epspt60(6),epspt6p(6),depspt6(6),depspt6p(6)
  157. real*8 epsvt600(6),epsvt60(6),depsvt6(6)
  158. real*8 epspg600(6),epspg60(6),epspg6p(6),depspg6(6)
  159. real*8 epsps600(6),epsps60(6),epsps6p(6),depsps6(6)
  160. real*8 epspc6(6),epspt6(6),epsvt6(6),epspt33p(3,3)
  161. real*8 epspt33(3,3),epspt3(3),vepspt33(3,3),vepspt33t(3,3)
  162. real*8 epspg6(6),epsps6(6)
  163. real*8 pw,bw,srw2,CWv2
  164. real*8 epse06(6)
  165. real*8 tauk2,taum2
  166. real*8 dfin00,CMp00
  167. real*8 cc03(3)
  168. real*8 cke66(6,6),ckk66(6,6),ckm66(6,6)
  169. real*8 xkm
  170. real*8 depse6(6),epse16(6)
  171. real*8 depsk6(6),epsk16(6)
  172. real*8 depsm6(6),epsm16(6)
  173. real*8 sig16(6),sigke16(6)
  174. real*8 At,St,M1,E1,vdef0,E2,AtF,StF,M1F,E1F,vdefF,E2F
  175. integer err1
  176. real*8 hydr
  177. real*8 sig133(3,3),vsig133(3,3),vsig133t(3,3),sig16p(6)
  178. real*8 rts00,rts,rtw00,rtw,refw00,refw,rtg00,rtg
  179. real*8 hplt,hplg,hpls,mgel,mdef,bdef,dphidef
  180. real*8 dth2,CTHp2,CTHv2,Cwp2,CTHp,CTHv
  181. real*8 srw1,CWp1,CWv1,CWv,CWp
  182. real*8 tauk,taum
  183. real*8 aar0,aar1,def0,def1,bg1,pg1,bs1,ps1
  184. real*8 epsk06(6),epsm06(6)
  185. integer na
  186. real*8 depleqc,epleqc0,epleqc1
  187. real*8 dflu1
  188. real*8 umdt,sigp,dti,dtr
  189. real*8 dt3(3),dgt3(3),dgc3(3),dwt3(3),dwc3(3),dst3(3),dsc3(3)
  190. real*8 sigf6(6),sigmf6(6)
  191. real*8 sigrm33(3,3),sigrf33(3,3),sigrf33p(3,3),sigrf6p(6)
  192. real*8 sigrm33p(3,3),sigrm6p(6),sigrm6(6)
  193. real*8 sigrh6p(6),sigrh33p(3,3),sigrh33(3,3),sigrh6(6),sigf6d(6)
  194. real*8 mdtt
  195. logical errr
  196. real*8 zero6(6),zero3(3)
  197. real*8 wplt06(6),wpltx06(6),wplt6(6),wpltx6(6)
  198. real*8 wpl3(3),vwpl33(3,3),vwpl33t(3,3)
  199. real*8 wplx3(3),vwplx33(3,3),vwplx33t(3,3)
  200. real*8 dr3(3),nc3(3)
  201. real*8 errgf1,errgf0
  202. real*8 alphag,DCDW,alphas,rt_app,rc_app,tau_trac
  203. real*8 dtw0,dtg0,dts0,dcw0,dcg0,dcs0,kwrt,kwrc,href,gft_app
  204. real*8 dtl00,dtl0,dtl1
  205. real*8 epspmf33(3,3),epspmf6(6)
  206. real*8 bw1,pw1,mwat
  207. real*8 Kb
  208. c eau dans les CSH et coeff de DTT
  209. real*8 wcsh0,wcshf,CDTT
  210. c directions principales des increments de deformations
  211. real*8 deps33(3,3),deps3(3),vdeps33(3,3),vdeps33t(3,3)
  212. real*8 taumdtt
  213. real*8 coeff_grand,coeff_petit
  214. parameter (coeff_grand=1.0d20,coeff_petit=1.0d-20)
  215. c poro meca / pressions
  216. real*8 bgel,dphigel,dphiw
  217. c increment des contraintes effectives
  218. real*8 dsigef6(6)
  219. c pression w csh
  220. real*8 pwcsh0,pwcshf,dpg,dps,dpw
  221. c activite de la refermeture localisee
  222. logical refermtl
  223. c endo pre pic compression
  224. real*8 dcpp,epc,xmc,dcpp00,dcpp0
  225. logical dciso
  226. c traiement anti battement
  227. logical actif0(nc),actif1(nc)
  228. c resistances effectives et endos aux pics
  229. real*8 rceff,epleqc00,rteff,dpict,dpicc,rteff_app,rceff_app
  230. c taux de franchissement des seuils par les contraintes capillaires
  231. real*8 fshr6(6),fshr33(3,3),fshr33p(3,3),fshr006(6),fshr06(6)
  232. c caracteristique ecoulement initial (liquide)
  233. real*8 taum_ja,youn_ja,nu_ja,ss_ja
  234. c contrainte d endo hydrique
  235. real*8 skdw00,epse_tild6(6)
  236. c exposant de couplage pour cwp
  237. real*8 T1,T2,Tref
  238. c coeff de dilatation thermique des renforts
  239. real*8 dalpr
  240. c coeff drucker prager jeune age
  241. real*8 dlja
  242. c evolution jeune age Kelvin
  243. real*8 tauk_ja,tauk0,psi_ja,psi00
  244. c resistances jeune age
  245. real*8 rcja,rtja
  246. c couplage des endommagements traction compression
  247. real*8 altc,dct3(3),dct0,dcc3(3),dcc0
  248. c tau de cisaillement de Drucker Pragger
  249. real*8 taudp,taudpmax
  250. c indicateur de battement sur la resolution des criteres
  251. logical battcr3d
  252. c autorisation de resolution couplee en multi criteres
  253. logical CPTCR(nc,nc)
  254. c numeros de la varible non locale a traiter
  255. integer nl,ivari
  256. c controle de l hypothese d ecoulement
  257. logical garder,travail_fissure,endo_interface_explicit
  258. parameter (endo_interface_explicit=.true.)
  259. c calcul des deformations non locales
  260. real*8 eps_nl06(6),w_nl06(6),w_nlx06(6)
  261. real*8 eps_nlf6(6),w_nlf6(6),w_nlxf6(6)
  262. real*8 deps_nl3(3),deps_nl6(6),deps_l6(6)
  263. real*8 deps_nl33(3,3),source_nl_pt3(3),source_nl_pt6(6)
  264. real*8 v_source_nl_pt33(3,3)
  265. real*8 source_nl_pt33(3,3),Depspl_nl6(6)
  266. real*8 eps_nl6(6),eps_nl33(3,3),eps_nl3(3)
  267. real*8 veps_nl33t(3,3),veps_nl33(3,3)
  268. real*8 eptmasq033(3,3),eptmasq33(3,3),eptmasq33p(3,3)
  269. real*8 eptmasq06(6),eptmasq6(6)
  270. real*8 alpha_nl
  271. real*8 xx33(3,3)
  272. c logique mise au point plastc
  273. logical log_plastc,log_plastt
  274.  
  275. c romain declarations pour les fibres
  276. c include './declare_fibres.h'
  277. -INC HDECFIB
  278.  
  279. c variables supplementaires pour le traitement non local des increment de ept00
  280. real*8 depspt33(3,3),depspt3(3),vdepspt33(3,3),vdepspt33t(3,3)
  281.  
  282. c variables pour les traitements non locaux specifiques a fldo3d
  283. logical log_H_TWL2
  284. integer Num_H_TWL2
  285. logical log_H_DNL(6)
  286. integer Num_H_DNL(6)
  287. c autres variables pour non local
  288. logical ENDO_NL
  289. integer IVARNL
  290. c longueur caracteristique deduite de la dissusion et capaci te d Helm holtz (cf. charge_materiaux_helmholtz.h)
  291. real*8 LcH
  292. logical Method_H,Method_N
  293.  
  294. c***********************************************************************
  295. c initialisation des parametres
  296.  
  297. c nombre de renforts actifs
  298. NRENF00=int(max(xmat(NMAT1),0.d0))
  299.  
  300. c ** indicateur de premier passage
  301. if (var0(1).ne.1.) then
  302. ppas=.true.
  303. else
  304. ppas=.false.
  305. end if
  306.  
  307. c ******************************************************************
  308.  
  309. c initialisation d une matrice identité
  310. do i=1,3
  311. do j=1,3
  312. if(i.eq.j) then
  313. vref33(i,j)=1.d0
  314. vref33t(i,j)=1.d0
  315. else
  316. vref33(i,j)=0.d0
  317. vref33t(i,j)=0.d0
  318. end if
  319. end do
  320. end do
  321. c initialisation de la variable de controle d erreur
  322. ierr1=0
  323. c coeff pour theta methode
  324. theta=0.5d0
  325. c pour ne pas avoir de fluage mettre plast_seule à vrai
  326. plast_seule=.false.
  327. c pour fluage
  328. fl3d=.true.
  329. c pour endo
  330. end3d=.true.
  331. c detecteur de battement lors du retour plastique
  332. battcr3d=.false.
  333.  
  334.  
  335. c *********** chargement des parametres materiaux depuis xmat ******
  336.  
  337. c l hydratation est considéree en fin de pas pour ne pas avoir
  338. c a recuperer celle du pas precedent les exposants de De Shutter
  339. c sont dans hydramat, il faur recompiler pour les modifier
  340.  
  341. C do i=1,nmat
  342. C print*,'xmat(',i,')=',xmat(i)
  343. C end do
  344. C read*
  345.  
  346. c Module d young
  347. young00=xmat(nbelas3d+88)
  348. if( young00.eq.0.) then
  349. c .or.(IVALMAT3D(nbelas3d+88).eq.0))
  350. c Print*,'Donner Young YORF pour l hydratation de reference HREF'
  351. young00=xmat(1)
  352. c print*,'E(href)=',young00
  353. c err1=1
  354. end if
  355. c coefficient de Poisson
  356. nu00=xmat(nbelas3d+89)
  357. if( nu00.eq.0.) then
  358. c .or.(IVALMAT3D(nbelas3d+89).eq.0)) then
  359. c Print*,'Donner coefficient de Poisson NURF pour l hydratation'
  360. c print*,'de reference HREF'
  361. c err1=1
  362. nu00=xmat(2)
  363. c print*,'nu(href)=',nu00
  364. end if
  365. c print*,'alpha fluendo3d=',alpha
  366. c hydratation
  367. hydr=xmat(nbelas3d+1)
  368. c hydratation seuil
  369. hyds=xmat(nbelas3d+2)
  370. c resistances et pression limite
  371. rt00=xmat(nbelas3d+3)
  372. if(rt00.eq.0.) then
  373. print*,'Il manque la resistance a la traction RT'
  374. err1=1
  375. end if
  376. c seuil pour la refermeture des fissures
  377. reft00=xmat(nbelas3d+4)
  378. if(reft00.lt.rt00/100.d0) then
  379. print*,'La contrainte de refermeture REF est trop faible'
  380. err1=1
  381. end if
  382. c resistance en compression-par cisaillement
  383. rc00=xmat(nbelas3d+5)
  384. if(rc00.eq.0.) then
  385. print*,'Il manque la resistance en compression RC '
  386. err1=1
  387. end if
  388. c coeff drucker prager
  389. delta00=xmat(nbelas3d+6)
  390. if(delta00.eq.0.) then
  391. print*,'Il manque DELT pour Drucker Prager '
  392. err1=1
  393. end if
  394. c coeff dilatance de cisaillement
  395. beta00=xmat(nbelas3d+7)
  396. if (beta00.eq.0.) then
  397. print*,'Il manque BETA pour Drucker Prager '
  398. err1=1
  399. end if
  400. c deformation au pic de traction
  401. ept00=xmat(nbelas3d+8)
  402. if (ept00.eq.0.) then
  403. ept00=rt00/young00
  404. end if
  405. c taux d ecrouissage des phases effectives / gel
  406. hplg00=xmat(nbelas3d+9)
  407. if (hplg00.eq.0.) then
  408. hplg00=0.03*young00
  409. end if
  410. c coeff de concentration de contrainte capillaire pour le critere hydrique
  411. cshr=xmat(nbelas3d+10)
  412. c compressibilite du gel
  413. kgel=xmat(nbelas3d+11)
  414. c energie de fissuration en traction directe
  415. gft00=xmat(nbelas3d+12)
  416. if (gft00.eq.0.) then
  417. print*,'Il manque l energie de fissuration GFT '
  418. err1=1
  419. end if
  420. c deformation caracteristique du potentiel de fluage
  421. epsm00=xmat(nbelas3d+13)
  422. if (epsm00.eq.0.) then
  423. print*,'Il manque le potentiel de fluage EPSM '
  424. err1=1
  425. end if
  426. c raideur relative Kelvin / Young
  427. psi00=xmat(nbelas3d+14)
  428. if (psi00.eq.0.) then
  429. print*,'Il manque le multiplicateur PSIK pour Kelvin '
  430. err1=1
  431. end if
  432. c coeff amplicateur à 2/3 rc pour le fluage
  433. xflu=xmat(nbelas3d+15)
  434. if (xflu.eq.0.) then
  435. xflu=1.0
  436. end if
  437. c temps caracteristique pour Maxwell
  438. taum00=xmat(nbelas3d+17)
  439. if(taum00.eq.0.) then
  440. print*,'Il manque le temps caracterisqtique de fluage TAUM'
  441. err1=1
  442. end if
  443. c temps caracteristique pour Kelvin
  444. tauk00=xmat(nbelas3d+16)
  445. if(tauk00.eq.0.) then
  446. print*,'Il manque le temps caracterisqtique de fluage TAUK'
  447. err1=1
  448. end if
  449. c nrj activation du potentiel de fluage
  450. nrjm=xmat(nbelas3d+18)
  451. c endommagement thermique a 80°C
  452. dt80=xmat(nbelas3d+19)
  453. c porosite
  454. poro2=xmat(nbelas3d+22)
  455. c coeff de biot pour l eau
  456. biotw00=xmat(nbelas3d+20)
  457. c module de biot pour le non sature
  458. xnsat00=xmat(nbelas3d+21)
  459. c volume maximal de rgi
  460. vrag00=xmat(nbelas3d+23)
  461. c volume d eau dans les pores
  462. vw2=xmat(nbelas3d+24)
  463. if(vw2.eq.0.) then
  464. vw2=poro2
  465. end if
  466. c coeff de couplage endo hydrique endo de compression
  467. DCDW=xmat(nbelas3d+25)
  468. c exposant de Van Genuchten pour la pression capillaire
  469. mvgn=xmat(nbelas3d+26)
  470. if(mvgn.eq.0.) then
  471. mvgn=0.5d0
  472. end if
  473. c deformation au pic de compression
  474. epc0=xmat(nbelas3d+27)
  475. c deformation cracateristique endo de compression
  476. ekdc=xmat(nbelas3d+28)
  477. if(ekdc.eq.0.) then
  478. ekdc=1.d0
  479. end if
  480. c deformation caracteristique pour l endo de rgi
  481. ekdg=xmat(nbelas3d+29)
  482. if(ekdg.eq.0.) then
  483. ekdg=0.003d0
  484. end if
  485. c energie de fissuration pour l endo de traction
  486. gfr00=xmat(nbelas3d+30)
  487. if(gfr00.eq.0.) then
  488. print*,'Il manque l energie de refermeture de fissure GFR'
  489. err1=1
  490. end if
  491. c volume des vides accessibles pour les RGI
  492. vvgel=xmat(nbelas3d+31)
  493. c coeff de concentration de contrainte des RGI
  494. cgel=xmat(nbelas3d+32)
  495. if(cgel.eq.0.) then
  496. c par défaut on prend la solution de la sphère élastique
  497. cgel=2.0d0
  498. end if
  499. c temperature de reference des parametres materiaux (celsius)
  500. tetar=xmat(nbelas3d+33)
  501. c temperature seuil pour l endo thermique (celsius)
  502. tetas=xmat(nbelas3d+34)
  503. c endommagement maximum par fluage
  504. dfmx=xmat(nbelas3d+35)
  505. c temps caracterisqtique de la rag à tref
  506. taar=xmat(nbelas3d+36)
  507. c nrj d'activation de la rgi
  508. nrjg=xmat(nbelas3d+37)
  509. c seuil de saturation minimal pour avoir la rgi
  510. srsrag=xmat(nbelas3d+38)
  511. c constante de calage de la defom therm transitoire
  512. mdtt00=xmat(nbelas3d+39)
  513. c volume de reference pour Weibull
  514. vref=xmat(nbelas3d+40)
  515. c volume d integration maxi pour Weibull
  516. vmax=xmat(nbelas3d+41)
  517. if(vmax.eq.0.) then
  518. c on met VMAX = VREF pour emepcher l effet d echelle probabiliste
  519. VMAX=VREF
  520. end if
  521. c coefficient de variation de la resistance a la traction
  522. cvrt00=xmat(nbelas3d+42)
  523. c temps cracteristique pour la def
  524. tdef=xmat(nbelas3d+43)
  525. c energie d activation de precipitation de la def
  526. nrjp=xmat(nbelas3d+44)
  527. c seuil de saturation pour declancher la def
  528. srsdef=xmat(nbelas3d+45)
  529. c quantite maximale de def pouvant etre realise
  530. vdef00=xmat(nbelas3d+46)
  531. c teneur en alcalin pour la def
  532. cna=xmat(nbelas3d+47)
  533. c temperature de reference pour la precipitation de la def (Celsius)
  534. ttrp=xmat(nbelas3d+57)
  535. c energie d activation des processus de dissolution des phases primaires
  536. nrjd=xmat(nbelas3d+56)
  537. c temps caracteristique pour la fixation des aluminiums en temperature
  538. tfid=xmat(nbelas3d+55)
  539. c temps caracteristique pour la dissolution de l ettringite primaire
  540. tdid=xmat(nbelas3d+54)
  541. c temperature de reference pour la dissolution de la def (Celsius)
  542. ttdd=xmat(nbelas3d+53)
  543. c exposant de la loi de couplage precipitation def alcalins
  544. exmd=xmat(nbelas3d+52)
  545. c exposant de la loi de couplage temperature de dissolution alcalins
  546. exnd=xmat(nbelas3d+51)
  547. c concentration en alcalin de blocage de la def
  548. cnab=xmat(nbelas3d+50)
  549. c concentration caracteristique pour les lois de couplage de la def
  550. cnak=xmat(nbelas3d+49)
  551. c rapport molaire S03 / Al2O3 du ciment
  552. ssad=xmat(nbelas3d+48)
  553. c defcaracteristique pour l endo du a la def
  554. ekds=xmat(nbelas3d+58)
  555. c contrainte caracteristique pour l endo hydrique
  556. skdw00=xmat(nbelas3d+59)
  557. * pourquoi skdw ne pourrait pas etre nul?
  558. ** if(skdw00.eq.0.) then
  559. ** print*,'Il manque la contrainte SKDW pour l endo capillaire '
  560. ** err1=1
  561. ** end if
  562. c tetak pour exposant de van genuchten en fonction de teta
  563. tkvg=xmat(nbelas3d+60)
  564. c temperature minimale pour la fixation des alu en cas de def
  565. ttdf=xmat(nbelas3d+61)
  566. c energie activation pour la vitesse de fixation des alu en cas de def
  567. nrjf=xmat(nbelas3d+62)
  568. c nombre de moles de sulfates par unite de volume
  569. nsul=xmat(nbelas3d+63)
  570. c temps caracteristique pour l amplification dynamique
  571. tdyn=xmat(nbelas3d+64)
  572. c temperature caracteristique pour la rag (le gel)
  573. ttrg=xmat(nbelas3d+65)
  574. c module d ecrouissage pour la resistance a la pression de DEF
  575. hpls00=xmat(nbelas3d+66)
  576. c module de compressibilite pour la def
  577. kdef=xmat(nbelas3d+67)
  578. c volume des vides pour la def
  579. Vvdef=xmat(nbelas3d+68)
  580. c coeff de concentration de contrainte pour la def
  581. cdef=xmat(nbelas3d+69)
  582. c module d crouissage pour la resistance effective a la pression d eau
  583. hplw00=xmat(nbelas3d+70)
  584. c temperature de reference pour les coeffs de l isotherme
  585. tetarw=xmat(nbelas3d+71)
  586. c coeff de couplage endo de rag endo de compression
  587. alphag=xmat(nbelas3d+72)
  588. c coeff de couplage enddo de def endo de compression
  589. alphas=xmat(nbelas3d+73)
  590. c effet capillaire sur traction apparente
  591. kwrt=xmat(nbelas3d+74)
  592. c effet capillaire sur compression apparente
  593. kwrc=xmat(nbelas3d+75)
  594. c hydratation de reference pour la donnee des parametres mecaiques
  595. href=xmat(nbelas3d+76)
  596. if(href.eq.0.) then
  597. print*,'le degre d hydratation de reference HREF est nul '
  598. err1=1
  599. end if
  600. c temps caracteristique pour la deformation thermique transitoire
  601. tdtt=xmat(nbelas3d+77)
  602. c eau pour la DTT
  603. wdtt=xmat(nbelas3d+78)
  604. c pression d eau de reference dans les csh
  605. pdtt=xmat(nbelas3d+79)
  606. c contrainte seuil pour initier le fluage de maxwell
  607. ss_ja=xmat(nbelas3d+80)
  608. c temps caracteristique etat liquide
  609. taum_ja=xmat(nbelas3d+81)
  610. c young jeune age
  611. youn_ja=xmat(nbelas3d+82)
  612. c poisson jeune age
  613. nu_ja=xmat(nbelas3d+83)
  614. c delta drucker prager jeune age
  615. dlja=xmat(nbelas3d+84)
  616. c rc jeune age
  617. rcja=xmat(nbelas3d+85)
  618. c rt jeune age
  619. rtja=xmat(nbelas3d+86)
  620. c supplement de dilatation thermique des acier (alphar-alpha)
  621. dalpr=xmat(nbelas3d+87)
  622. c couplage traction cisaillement
  623. altc =xmat(nbelas3d+90)
  624. c avancement latent rag
  625. alatr=xmat(nbelas3d+91)
  626. c seuil de deformation pour endo de rag
  627. epssr=xmat(nbelas3d+92)
  628. c module d ecrouissage traction directe
  629. hplt00=0.d0
  630. c nrj activation pour l eau
  631. nrjw=17000.d0
  632. c amplitude reversible du fluage jeune age
  633. psi_ja=psi00*coeff_grand
  634. c temps de kelvin jeune age
  635. tauk_ja=taum_ja*coeff_grand
  636. c recuperation des parametres pour les fibres
  637. c include './charge_materiaux_fibres.h'
  638. -INC HMATFIB
  639.  
  640. c ***********test de conformite sur les donnees pour la matrice ****
  641.  
  642. if(err1.eq.1) then
  643. print*,'Incoherence dans les donnees de fluendo3d'
  644. ierr1=1
  645. return
  646. end if
  647.  
  648. c ** verif validite de la deformation au pic de traction
  649. ept00=max(rt00/young00,ept00)
  650.  
  651. c ** verif coherence deformation pic de compression
  652. epc1=rc00/young00
  653. c eps pic comp ne peut pas etre inferieur à rc/E
  654. epc00=max(epc0,epc1)
  655.  
  656. c ** verif validite de la dilatance
  657. if(beta00.gt.sqrt(3.d0)) then
  658. print*,'Dilatance BETA excessive dans fluendo3d'
  659. ierr1=1
  660. return
  661. end if
  662.  
  663. c ** verif presence d un ecrouissage pour la rag
  664. if(hplg00.le.0.d0) then
  665. if(vrag00.gt.0.) then
  666. print*,'Taux d ecrouissage HRAG doit etre > 0'
  667. ierr1=1
  668. return
  669. end if
  670. end if
  671.  
  672. c ** verif presence d un ecrouissage pour la def
  673. if(hpls00.le.0.d0) then
  674. if((vdef00.gt.0.).or.(nsul.gt.0.)) then
  675. print*,'Taux d ecrouissage HDEF doit etre > 0'
  676. ierr1=1
  677. return
  678. end if
  679. end if
  680.  
  681. c ** test nbr maxi de criteres actifs pour le couplage
  682. if(nc.ne.13) then
  683. err1=1
  684. print*,'pb nbr max de criteres ds fldo3d .ne. 13'
  685. return
  686. end if
  687.  
  688. c *** initialisation des parametres calculees a partir des donnees *
  689.  
  690. c ** stockage hydratation
  691. if (ppas) then
  692. c au 1er passage on suppose hyd0=hydr
  693. hyd0=hydr
  694. c on initialise var03d en cas de sous incrementation par fluage
  695. var0(68)=hyd0
  696. else
  697. c on recupere l hydratation du pas precedent
  698. hyd0=var0(68)
  699. end if
  700. varf(68)=hydr
  701.  
  702. c ** initialisation des variables internes associee au volume d eau
  703.  
  704. c eau et porosite (initialise debut=fin 1er pas)
  705. if (ppas) then
  706. var0(69)=vw2
  707. var0(70)=poro2
  708. end if
  709. c stockage pour le prochain pas
  710. varf(69)=vw2
  711. varf(70)=poro2
  712.  
  713. c tables a zero
  714. do j=1,6
  715. zero6(j)=0.d0
  716. end do
  717. do j=1,3
  718. zero3(j)=0.d0
  719. end do
  720.  
  721. c****************** parametres pour Helmholtz **************************
  722. c lignes a inclure dans les modeles utilisant des formulations d helmholtz
  723. c include './charge_materiaux_helmholtz.h'
  724. -INC HMATHEL
  725. do NL=1,NB_HELM
  726. c lecture des variable internes et rangements dans Helm0(NL,ii)
  727. c et Helm1(NL,ii) avec ii=1,NB_VARI_PAR_HELM
  728. c include './lire_vari_helmholtz.h'
  729. -INC HLVIHEL
  730. end do
  731. c***********************************************************************
  732.  
  733.  
  734. c*************** parametres pour les renforts **************************
  735. c lignes a inclure dans les modeles utilisant des renforts
  736. c include './charge_materiaux_renforts.h'
  737. -INC HMATREN
  738. c***********************************************************************
  739.  
  740. c********** traitement des autorisations d activation des criteres *****
  741. do i=1,nc
  742. do j=1,nc
  743. c initialisation de la compatibilite des criteres a faux
  744. CPTCR(i,j)=.false.
  745. if(i.ne.j) then
  746. if ((i.le.9).and.(j.le.9)) then
  747. c tous les criteres de pression sont inter compatibles
  748. CPTCR(i,j)=.true.
  749. else if ((i.le.12).and.(j.le.12).and.
  750. # (i.ge.10).and.(j.ge.10)) then
  751. c les macro fissures sont compatibles entre elles
  752. CPTCR(i,j)=.true.
  753. else if((i.eq.13).and.(j.ge.10).and.(j.le.12)) then
  754. c DP et macros fissures incompatibles
  755. CPTCR(i,j)=.false.
  756. else
  757. c autres couplages interdits
  758. CPTCR(i,j)=.false.
  759. end if
  760. else
  761. c cas des criteres seuls
  762. CPTCR(i,i)=.true.
  763. end if
  764. c on desactive tous les criteres
  765. c CPTCR(i,j)=.false.
  766. end do
  767. end do
  768.  
  769. c ******************************************************************
  770. c affichage des options du calcul
  771. c print*,'fluage',fl3d
  772. c print*,'endo',end3d
  773. c***********************************************************************
  774.  
  775.  
  776. c***********************************************************************
  777. c chargement increment de deformation imposee et deformation finale
  778. c remarque 4-5-6 sont des gama jusqu ici, ensuite des epsilons
  779. if(nstrs.lt.6) then
  780. do i=1,nstrs
  781. deps6(i)=deps(i)
  782. epstf6(i)=epstf(i)
  783. epst06(i)=epst0(i)
  784. end do
  785. do i=nstrs+1,6
  786. deps6(i)=0.d0
  787. epstf6(i)=0.d0
  788. epst06(i)=0.d0
  789. end do
  790. else
  791. do i=1,6
  792. deps6(i)=deps(i)
  793. epstf6(i)=epstf(i)
  794. epst06(i)=epst0(i)
  795. end do
  796. end if
  797. c passage gama en epsilon
  798. do i=4,6
  799. deps6(i)=0.5d0*deps6(i)
  800. epstf6(i)=0.5d0*epstf6(i)
  801. epst06(i)=0.5d0*epst06(i)
  802. end do
  803.  
  804. c*************** traitement non local de TWL2(VARI numero 72) **********
  805. ivari_twl2=72
  806. c on teste l existence d un champ de phase pour cette variable et
  807. c on recupere son numero Num_H_TWL2
  808. call exhmtz(istep,NBVIA3D,INLVIA3D,NB_HELM,
  809. #ivari_twl2,log_H_TWL2,Num_H_twl2)
  810. c si le champ de phase existe
  811. if(log_H_TWL2) then
  812. c calcul approché de l'exposant de Weibull (m)
  813. if(cvrt00.ne.0.) then
  814. if (cvrt00.gt.1.) then
  815. print*,'Dans fluendo3d, erreur de donnees car le '
  816. print*,'coeff de variation de Rt pour Weibull est >1 '
  817. ierr1=1
  818. return
  819. end if
  820. eweb=1.2d0/cvrt00-0.2d0
  821. c print*,'eweb=',eweb
  822. else
  823. print*,'Donner le coeff de variation de Rt pour Weibull'
  824. print*,'Mettre Vmax a zero pour annuler l effet de WL2'
  825. print*,'ou bien Vmax a Vref pour utiliser WL2'
  826. ierr1=1
  827. return
  828. end if
  829. c print*,'Etape 2-1 ds fldo3d Istep ',istep
  830. c istep=1 : 1er passage pour preparer le calcul non local
  831. if(istep.eq.1) then
  832. c avec cwrt du pas precedent et contraintes pas actuel
  833. if (ppas.or.(hydr.le.hyds)) then
  834. if ((vmax.ne.0.).and.(eweb.ne.0.).and.(vref.ne.0.)) then
  835. xweb=1.d0/eweb
  836. cwrt=(vref/vmax)**xweb
  837. else
  838. cwrt=1.d0
  839. end if
  840. c 1er passage il faut initialiser cwrt
  841. var0(76)=cwrt
  842. else
  843. c on prend le dernier cwrt estime
  844. cwrt=var0(76)
  845. end if
  846. c on stocke cwrt dans varf pour les sous increments locaux
  847. varf(76)=cwrt
  848. c variable pour le stockage du max de xwl2 non local (mxwl ds idvar4)
  849. c (a mettre absolument a un car utilise avec cette hypothese dans unpas)
  850. varf(73)=1.d0
  851. c variable pour le stockage du taux de charge maxi sur la structure (mtwl ds idvar4)
  852. c (a mettre absolument a un car utilise avec cette hypothese dans wl2d3d)
  853. varf(74)=1.d0
  854. else
  855. c nouveau passage non local
  856. c *** recup variable non locales WL2 *************************
  857. c recup de xwl2=//(s/r)**m .psi .dv=Veq.(max(s)/rt)**m
  858. xwl2=var0(ivari_twl2)
  859. c lecture de vari supplementaires associees a helmholtz
  860. ierr1=1
  861. return
  862. if(ierr1.eq.1) then
  863. print*,'Pb calcul Helmholtz twl2 ds fldo3d'
  864. return
  865. else
  866. c lecture des variables internes complementaires pour Helmholtz
  867. NL=Num_H_TWL2
  868. c IVARI=IVARI
  869. c include './lire_vari_helmholtz.h'
  870. -INC HLVIHEL
  871. c les var0 de cette formulation sont alors dans HELM0(Nl,i)
  872. end if
  873. c recup du maxi sur le modele de sigma/rt_app
  874. tau_trac_wl2=var0(72)
  875. c recup du maxi sur le modele xwl2 non local
  876. xwl2max=var0(73)
  877. c tau de charge maxi
  878. tau_trac_wl2_max=var0(74)
  879. c indicateur de localisation de la fissure
  880. c inutile de l affecter par l hydratation cela a ete fait lorsque istep=1
  881. dtl0=var0(75)
  882. c endommagement localise probabble fin de pas (estime pour istep=1)
  883. dtl1=var0(119)
  884. c coeff de Weibull rt pas precedent
  885. cwrt=var0(76)
  886. c pression capillaire initiale
  887. pw0=var0(81)
  888. c saturation en eau * biot
  889. bw0=var0(80)
  890. c ** calcul de la nouvelle resistance a la traction **********
  891. c contrainte et resistance ne sont pas utilisees a cette etape
  892. c on les met a zero
  893. do i=1,3
  894. sig13(i)=0.d0
  895. end do
  896. call wl2d3d(2,vmax,vref,sig13,eweb,0.d0,cwrt,
  897. # xwl2,tau_trac_wl2,dtl0,dtl1,xwl2max,tau_trac_wl2_max,
  898. # bw0,pw0,kwrt)
  899. c on stocke les variables non locales pour verif eventuelle
  900. varf(71)=xwl2
  901. c variable non locale : sigm_maxi /rt
  902. varf(72)=tau_trac_wl2
  903. c stockage de la valeur maxi de smax /rt
  904. varf(74)=tau_trac_wl2_max
  905. c endo fin de pas
  906. c on copie endommagement fin de pas utilisee pour cwrt pour le
  907. c debut de pas suivant car dtl calcule en fin de programme
  908. c n est pas celui utilise pour calculer cwrt
  909. c DTRA debut de pas
  910. varf(75)=dtl1
  911. c DTL0
  912. varf(119)=varf(75)
  913. c coeff d effet d echelle sur rt
  914. c print*,'cwrt ds fldo3d apres istep=2',cwrt
  915. varf(76)=cwrt
  916. c ecriture des variables internes HELM1 associees a la formulation NL de Helmholtz
  917. c include './ecrire_vari_helmholtz.h'
  918. -INC HEVIHEL
  919. end if
  920. else
  921. c pas de calcul non local pour wl2
  922. c ** rt00 n est pas affectee par la methode WL2 **************
  923. c istep=0 :le calcul sans effet d echelle Weibull
  924. cwrt=1.d0
  925. c liste des variables non locales : XWL2
  926. varf(71)=0.d0
  927. c variable non locale : sigma maxi /rt TWL2
  928. varf(72)=0.d0
  929. c max de xwl2 non utilisse on y laisse 1. MXWL
  930. varf(73)=1.d0
  931. c contrainte relative maxi non locale non utiliseee MTWL
  932. varf(74)=0.d0
  933. c endommagement maxi de traction DTMX
  934. varf(75)=var0(75)
  935. c modif de rt par effet d echelle inactif CWRT
  936. varf(76)=cwrt
  937. end if
  938.  
  939. c***********************************************************************
  940. c influence de l hydratation sur les parametres materiau
  941. c les resistances locales sont prise egales à la resistance
  942. c macroscopique idem pour les contraintes de refermeture
  943. rts00=rt00
  944. rtg00=rt00
  945. rtw00=rt00
  946. refw00=reft00
  947. c pas d effet d hydratation sur coeff de def therm transitoire
  948. mdtt=mdtt00
  949. c controle calcul raideur iso
  950. if(.not.iso) then
  951. print*,' cas imprevu dans fluendo3d '
  952. print*,' matrice de raideur initiale non isotrope'
  953. ierr1=1
  954. return
  955. end if
  956. c modification des parametres materiau en fonction de l hydratation
  957. call hydm3d(hyd0,hydr,hyds,young00,young,nu00,nu,rt00,rt,
  958. #rteff,reft00,reft,rc00,rc,rceff,delta00,delta,beta00,beta,gft00,
  959. #gft,ept00,ept,epsm00,epsm,xnsat00,xnsat,biotw00,biotw,iso,lambda,
  960. #Mub,Kb,rtg00,rtg,raideur66,souplesse66,xmt,dtiso,cwrt,err1,teta2,
  961. #href,tetar,tkvg,gfr00,gfr,rts00,rts,rtw00,rtw,hplt00,hplt,hplg00,
  962. #hplg,hpls00,hpls,epc00,epc,xmc,dciso,dpict,dpicc,taum_ja,youn_ja,
  963. #nu_ja,ss_ja,ssfl,taum00,taum0,skdw00,skdw,dlja,tauk_ja,
  964. #tauk00,tauk0,psi_ja,psi00,psik,rcja,rtja)
  965. c traitement de l erreur eventuelle
  966. if(err1.eq.1) then
  967. print*,'Pb lors de la mise a jour avec hydramat ds as3d'
  968. ierr1=1
  969. return
  970. end if
  971. c print*,'istep',istep,'rt',rt
  972. c print*,'Etape 4 ds fldo3d apres hydramat'
  973.  
  974. c***********************************************************************
  975. c Nombre maxi de fissures localisees en fonction de la direction
  976. if(.not.ppas) then
  977. c chargement des longueurs des elements dans les directions des
  978. c renforts
  979. do i=1,NRENF00
  980. lcr(i)=var0(NVAR2+(i-1)*NB_VARI_PAR_RENF+13)
  981. end do
  982. end if
  983. c calcul du nb max de fissures sur la zone d integration
  984. call nfin3d(ppas,lcr,nc33,NRENF00,vecr,NB_RENF,longr,lsr,
  985. # lfr,deqr,syr,taur,rhor,rt00,XE3D,NBNMAX3D,NBNB3D,IDIMB3D,
  986. # NB_HELM,TAILH,log_H_RENF,Num_H_RENF,err1)
  987. if(err1.eq.1) then
  988. print*,'Erreur lors de l appel a nfin3d dans fldo3d'
  989. print*,'pour istep=',istep
  990. ierr1=1
  991. return
  992. end if
  993. c sauvegarde des longueurs des elements ds les directions des renforts
  994. do i=1,NRENF00
  995. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+13)=longr(i)
  996. if(longr(i).eq.0.) then
  997. print*,'Ds fldo3d longr',i,'=', longr(i)
  998. print*,' istep',istep,'ppas',ppas
  999. ierr1=1
  1000. return
  1001. end if
  1002. end do
  1003. c print*,'Etape 5 ds fldo3d apres nfin3d'
  1004.  
  1005. c***********************************************************************
  1006. c chargement des principales variables internes
  1007. c (etat du squelette solide)
  1008. do i=1,6
  1009. epsk006(i)=var0(i+7)
  1010. epsm006(i)=var0(i+13)
  1011. epsvt600(i)=var0(31+i)
  1012. sigef06(i)=var0(i+49)
  1013. sigke06(i)=var0(i+55)
  1014. sigm06(i)=var0(i+61)
  1015. end do
  1016. c endommagement effectif par fluage
  1017. dfl00=var0(78)
  1018. c endommagement thermique
  1019. dth00=var0(77)
  1020. c endommagement iso prepic de traction (DTPP)
  1021. dtr00=var0(79)
  1022. c endo iso pre pic de cisaillement (DCPP)
  1023. dcpp00=var0(122)
  1024. c pression capillaire
  1025. bw0=var0(80)
  1026. pw0=var0(81)
  1027. c pression gel
  1028. bg0=var0(82)
  1029. pg0=var0(83)
  1030. c pression def
  1031. bs0=var0(84)
  1032. ps0=var0(85)
  1033. c tenseurs des deformations plastiques et criteres hydrique
  1034. do j=1,6
  1035. c deformations plastiques
  1036. epspc600(j)=var0(19+j)
  1037. epspt600(j)=var0(25+j)
  1038. epspg600(j)=var0(37+j)
  1039. epsps600(j)=var0(43+j)
  1040. c critere pression capillaire
  1041. fshr006(j)=var0(129+j)
  1042. end do
  1043. c def plastique equivalente Drucker Prager
  1044. epleqc00=var0(94)
  1045.  
  1046.  
  1047. c***********************************************************************
  1048. c influence du degre d hydratation sur les variables internes
  1049. call hydv3d(ierr1,hyd0,hydr,hyds,dth00,dth0,dtr00,dtr0,
  1050. # dfl00,dfl0,dcpp00,dcpp0,epspt600,epspt60,epspc600,epspc60,
  1051. # epsvt600,epsvt60,epspg600,epspg60,epsps600,epsps60,epsk006,
  1052. # epsk06,epsm006,epsm06,epleqc00,epleqc0,fshr006,fshr06)
  1053. c print*,'Etape 6 ds fldo3d apres hydv3d'
  1054. c print*,'deformation totale initiale'
  1055. c call afic6(epspt60)
  1056.  
  1057. c***********************************************************************
  1058. c increments non locaux des deformations plastiques de traction
  1059. c (DPTi=VARI numero 140+i)
  1060. ENDO_NL=.true.
  1061. do i=1,6
  1062. c numero de la variable interne a traiter par Helmholtz (a partie de idvar4)
  1063. ivarinl=140+i
  1064. c test du traitement non local + assigantion logique log_H_DNL(i)
  1065. c et recuperation du numero de la formulation non locale associee
  1066. c dans Num_H_DNL(i)
  1067. call exhmtz(istep,NBVIA3D,INLVIA3D,NB_HELM,
  1068. # ivarinl,log_H_DNL(i),Num_H_DNL(i))
  1069. c on verifie que les 3 deformations plastiques principales de
  1070. c traction soient traitees par la formulation d Helmholtz
  1071. ENDO_NL=(ENDO_NL.and.log_H_DNL(i))
  1072. end do
  1073. c print*,'fluendo ENDO_NL etape 1',ENDO_NL
  1074.  
  1075. if(ENDO_NL) then
  1076. c longueur non locale moyenne pour l endommagement
  1077. LcH=1.d0
  1078. do i=1,6
  1079. LcH=LcH*max(LcarH(Num_H_DNL(i),1),LcarH(Num_H_DNL(i),2),
  1080. # LcarH(Num_H_DNL(i),3))
  1081. end do
  1082. LcH=LcH**(1./6.)
  1083. c indicateur de la methode de calcul des dimensions
  1084. Method_H=.true.
  1085. Method_N=.false.
  1086. C print*,'LcH',LcH,'Method_H',Method_H,'Method_N',Method_N
  1087. C read*
  1088. c on est dans la procedure incrementale non locale
  1089. do i=1,6
  1090. c position de la variable non locale
  1091. ivarinl=140+i
  1092. c recuperation de la valeur non locale
  1093. eps_nl6(i)=var0(ivarinl)
  1094. end do
  1095. else
  1096. LcH=1.d0
  1097. Method_H=.false.
  1098. Method_N=.true.
  1099. end if
  1100.  
  1101. c***********************************************************************
  1102. c influence de la temperature sur les parametres materiau et
  1103. c actualisation de l endo thermique debut de pas
  1104. poro1=var0(70)
  1105. vw1=var0(69)
  1106. call thrm3d(teta1,nrjm,tetas,tetar,DT80,dth0,
  1107. # dth1,CTHp1,CTHv1,poro1,vw1,nrjw)
  1108. c endommagement thermique en fin de pas
  1109. call thrm3d(teta2,nrjm,tetas,tetar,DT80,dth1,
  1110. # dth2,CTHp2,CTHv2,poro2,vw2,nrjw)
  1111. varf(77)=dth1
  1112. c calcul des coeffs moyens pour le potentiel de fluage
  1113. CTHp=0.5d0*(CTHp1+CTHp2)
  1114. CTHv=0.5d0*(CTHv1+CTHv2)
  1115.  
  1116.  
  1117. c***********************************************************************
  1118. c calcul des avancements physico-chimiques
  1119. c***********************************************************************
  1120.  
  1121. c **** calcul de la pression capillaire due a l eau en fin de pas **
  1122.  
  1123. call watr3d(mfr,biotw,poro2,vw2,xnsat,mvgn,pw,bw,srw2,teta2,
  1124. # tetarw,tkvg,pw0,Mwat,dphiw,bw0,bw1)
  1125. varf(80)=bw1
  1126.  
  1127. c modif eventuelle des viscosites de Kelvin en fonction de srw2
  1128. if(poro1.ne.0.) then
  1129. srw1=vw1/poro1
  1130. else
  1131. srw1=1.d0
  1132. end if
  1133. CWv1=1.d0/srw1
  1134. CWv2=1.d0/srw2
  1135. CWv=0.5d0*(CWv1+CWv2)
  1136. c modif potentiel de fluage de Maxwell en fonction de srw
  1137. Cwp2=srw2
  1138. CWp1=srw1
  1139. CWp=0.5d0*(CWp1+Cwp2)
  1140. C c pas d effet de l eau sur le potentiel
  1141. C Cwp2=1.d0
  1142. C CWp1=1.d0
  1143. C Cwp=1.d0
  1144.  
  1145. c *** cas de l eau des CSH ****************************************
  1146.  
  1147. if(ppas) then
  1148. c initialisation de la quantite d'eau dans les CSH a la valeur
  1149. c de reference
  1150. wcsh0=wdtt
  1151. pwcsh0=0.d0
  1152. else
  1153. wcsh0=var0(120)
  1154. pwcsh0=var0(121)
  1155. end if
  1156. c prise en compte de la pression dans les csh pour la DTT
  1157. c cf. F. Manzoni, T. Vidal, A. Sellier, X. Bourbon, and G. Camps,
  1158. c “On the origins of transient thermal deformation of concrete,”
  1159. c Cem. Concr. Compos., vol. 107, 2020,
  1160. c https://doi.org/10.1016/j.cemconcomp.2019.103508
  1161. call wdtt3d(wcsh0,wcshf,tdtt,mdtt,wdtt,pdtt,CTHv,
  1162. # teta1,teta2,pw,dt,CDTT,pwcsh0,pwcshf,tetarw,err1)
  1163. if(err1.eq.1) then
  1164. print*,'Pb lor du calcul de la DTT dans fldo3d'
  1165. ierr1=1
  1166. return
  1167. end if
  1168. varf(120)=wcshf
  1169. varf(121)=pwcshf
  1170. varf(129)=cdtt
  1171.  
  1172. c ** Modification eventuelle de la viscosite de Kelvin (T,Sr) ******
  1173.  
  1174. tauk=tauk0*CWv/CTHv
  1175. c print*,'fldo3d tauk0',tauk0,cwv,cthv
  1176.  
  1177. c ** Modification de la viscosite de Maxwell (T,Sr) ****************
  1178.  
  1179. c pour Sr, deja integre dans CC via Cwp
  1180. taum=taum0/CTHv
  1181.  
  1182. c ** Modification de la viscosite de Maxwell (T,Sr) pour la DTT ****
  1183.  
  1184. if((CDTT.gt.coeff_petit).and.(hydr.gt.hyds)) then
  1185. c dtt active
  1186. c print*,'Fluendo3d CDTT',CDTT
  1187. taumdtt=taum/CDTT
  1188. else
  1189. c pas de dtt avent percolation
  1190. taumdtt=taum*coeff_grand
  1191. end if
  1192. c print*,'ds fluando3d taum=',taum
  1193. c print*,'ds fluando3d taumdtt=',taumdtt
  1194.  
  1195. c **** avancement de la rag ****************************************
  1196.  
  1197. aar0=var0(86)
  1198. bg0=var0(82)
  1199. call rag3d(taar,nrjg,ttrg,aar0,srw2,srsrag,teta1,
  1200. # teta2,dt,aar1,vrag00,Kb,Kgel,bgel,mgel,dphigel,bg0,bg1,
  1201. # vvgel,cgel,Rt,alatr,err1)
  1202. if(err1.eq.1) then
  1203. print*,'Pb lors du calcul de rag dans fldo3d'
  1204. ierr1=1
  1205. return
  1206. end if
  1207. c print*,'fldo3d',dphigel,bgel,mgel
  1208. c read*
  1209. varf(86)=aar1
  1210. varf(82)=bg1
  1211.  
  1212.  
  1213. c **** avancement de la def ***************************************
  1214.  
  1215. bs0=var0(84)
  1216. E1=var0(87)
  1217. M1=var0(88)
  1218. At=var0(89)
  1219. St=var0(90)
  1220. E2=var0(91)
  1221. def0=var0(92)
  1222. vdef0=var0(93)
  1223. if((vdef00.gt.0.).or.(nsul.gt.0.)) then
  1224. call def3d(ppas,tdef,nrjd,def0,srw2,srsdef,teta1,teta2,dt,
  1225. # vdef00,def1,CNa,nrjp,ttrp,tfid,ttdd,tdid,exmd,exnd,
  1226. # cnab,cnak,ssad,At,St,M1,E1,vdef0,E2,AtF,StF,M1F,E1F,vdefF,E2F,
  1227. # ttdf,nrjf,nsul,ierr1,Kb,Kdef,Vvdef,Cdef,Rt,mdef,bdef,dphidef,
  1228. # bs0,bs1)
  1229. if(ierr1.eq.1) then
  1230. print*,'pb lors du calcul de la def dans fldo3d'
  1231. return
  1232. end if
  1233. else
  1234. bs1=bs0
  1235. E1F=E1
  1236. M1F=M1
  1237. AtF=At
  1238. StF=St
  1239. E2F=E2
  1240. def1=def0
  1241. vdefF=vdef0
  1242. bdef=0.d0
  1243. dphidef=0.d0
  1244. mdef=0.d0
  1245. end if
  1246. varf(84)=bs1
  1247. varf(87)=E1F
  1248. varf(88)=M1F
  1249. varf(89)=AtF
  1250. varf(90)=StF
  1251. varf(91)=E2F
  1252. varf(92)=def1
  1253. varf(93)=vdefF
  1254.  
  1255. c ******************************************************************
  1256. c prise en compte de l effet de pression (coeffs kwrt et kwrc)
  1257. c et de l effet d echelle probabiliste (coeff cwrt) sur la
  1258. c resistance apparente de traction et en compression
  1259. rt_app=(rteff-bw*pw*kwrt)*cwrt*(1.d0-dpict)
  1260. rc_app=(rceff-bw*pw*kwrc)*(1.d0-dpicc)
  1261. c deformation elastique de reference pour le fluage prise a 1/3
  1262. c de rc sat effective
  1263. epser=(rc00/young00)/3.d0
  1264.  
  1265. c ******************************************************************
  1266. c reevaluation de la deformation compatible avec l etat
  1267. c de contrainte debut de pas
  1268. call hydc3d(souplesse66,sigke06,epsk06,psik,
  1269. # epse06,sigef06,fl3d,plast_seule)
  1270. c print*,'Etape 7 ds fldo3d apres hydc3d'
  1271.  
  1272. c***********************************************************************
  1273. c tir visco elastique
  1274. c***********************************************************************
  1275.  
  1276. c ** initialisation des deformations *******************************
  1277. do i=1,6
  1278. c increment deformation elastique
  1279. epse16(i)=epse06(i)
  1280. c increment deformation kelvin
  1281. epsk16(i)=epsk06(i)
  1282. c deformation maxwell
  1283. epsm16(i)=epsm06(i)
  1284. c deformation visqueuse transitoire
  1285. epsvt6(i)=epsvt60(i)
  1286. c deformations plastiques cisaillement
  1287. epspc6(i)=epspc60(i)
  1288. c deformations plastiques traction
  1289. epspt6(i)=epspt60(i)
  1290. c deformations plastiques gel
  1291. epspg6(i)=epspg60(i)
  1292. c deformations plastiques def
  1293. epsps6(i)=epsps60(i)
  1294. end do
  1295.  
  1296.  
  1297. c ** directions principales des deformations imposees et matrice de passage associee
  1298. call x6x33(deps6,deps33)
  1299. call b3_v33(deps33,deps3,vdeps33)
  1300. c do i=1,3
  1301. c print*,'fldo3d deps3:',i,deps3(i)
  1302. c end do
  1303. c construction matrice de passage inverse
  1304. call traps1(vdeps33t,vdeps33,3)
  1305.  
  1306. c ** effet du chargement initial sur le potentiel de fluage *******
  1307. call dffn3d(sigm06,delta,rc_app,rt_app,xflu,
  1308. # ssfl,dfin00,CMp00,dfmx,hydr,hyds,err1)
  1309. if(err1.eq.1)then
  1310. print*,'Erreur lors du calcul de CMP dans dffn3d fldo3d'
  1311. ierr1=1
  1312. return
  1313. end if
  1314. c print*,'fldo3d cmp=',cmp00
  1315.  
  1316. c ** effet de l endommagement capillaire sur le potentiel de fluage
  1317. call ampl3d(souplesse66,sigm06,fshr06,skdw,DCDW,epse06,sigef06,
  1318. # epse_tild6,refw)
  1319.  
  1320. c ** actualisation des coeffs de consolidation avec chargement ****
  1321.  
  1322. C cf. Alain Sellier, Stéphane Multon, Laurie Buffo-Lacarrière, Thierry Vidal, Xavier Bourbon, Guillaume Camps,
  1323. C Concrete creep modelling for structural applications: non-linearity, multi-axiality, hydration, temperature and drying effects,
  1324. C Cement and Concrete Research, Volume 79, 2016,Pages 301-315,ISSN 0008-8846,
  1325. C https://doi.org/10.1016/j.cemconres.2015.10.001.
  1326.  
  1327. call conso3d(xkm,epsm,epser,epsm06,epse_tild6,cc03,
  1328. # vdeps33,CMp00,CTHp,CTHv,Cwp)
  1329. c do i=1,3
  1330. c print*,'fldo3d cc3:',i,cc03(i)
  1331. c end do
  1332.  
  1333. c ** endommagement par fluage ************************************
  1334. call dflu3d(xkm,cc03,dfl0,dflu1,dfin00)
  1335. c stockage endo de fluage
  1336. varf(78)=dflu1
  1337.  
  1338. c ** initialisation des variables pour le tir visco elastique ****
  1339. c pour le fluage
  1340. do i=1,3
  1341. alphadp(i)=0.d0
  1342. betadp(i)=0.d0
  1343. end do
  1344. c pour les criteres
  1345. do i=1,nc
  1346. actif(i)=.false.
  1347. complet(i)=.true.
  1348. factif(i)=0.d0
  1349. end do
  1350.  
  1351. c ** initialisation du nombre de criteres actifs (pas de criteres actifs lors du tir)
  1352. NA=0
  1353.  
  1354. c ** assemblage des matrices de couplage de fluage ds base fixe
  1355. call coupl3d(ann,xn,bn,ngf,err1,deps3,vdeps33,vdeps33t,dt,
  1356. # cc03,taum,taumdtt,tauk,psik,epse06,epsk06,raideur66,Mgel,bgel,
  1357. # dphigel,Cgel,Hplg,Mdef,bdef,dphidef,Cdef,Hpls,Mwat,bw,dphiw,
  1358. # cshr,alphadp,betadp,actif,factif,nc,dsigef6,depse6,depsk6,
  1359. # depsm6,depspc6,depspt6,depsvt6,depspg6,depsps6,.true.,ipzero,
  1360. # dpg,dps,dpw,zero6,.false.,complet,NA,CMp00)
  1361.  
  1362. c ** traitement de l erreur eventuelle lors du tir
  1363. if(err1.eq.1) then
  1364. print*,'pb assemblage couplagf3d ds fldo3d'
  1365. ierr1=1
  1366. return
  1367. end if
  1368. c print*,'Etape 8 ds fldo3d apres coupl3d'
  1369.  
  1370. c ** recuperation des increments et actualisation des deformations
  1371. do i=1,6
  1372. c increment deformation elastique
  1373. epse16(i)=epse16(i)+depse6(i)
  1374. c increment deformation kelvin
  1375. epsk16(i)=epsk16(i)+depsk6(i)
  1376. c deformation maxwell
  1377. epsm16(i)=epsm16(i)+depsm6(i)
  1378. c deformation visqueuse transitoire (dtt)
  1379. epsvt6(i)=epsvt6(i)+depsvt6(i)
  1380. end do
  1381.  
  1382. c ******* recuperation deformation equivalente de compression ******
  1383. epleqc1=epleqc0
  1384.  
  1385. c ***** actualisation des pressions ********************************
  1386. c gel rag
  1387. pg1=pg0+dpg
  1388. c def
  1389. ps1=ps0+dps
  1390. c depression capillaire
  1391. pw1=pw0+dpw
  1392.  
  1393. c ***** etat des contraintes effectives apres tir visco elastique **
  1394. do i=1,6
  1395. sig16(i)=sigef06(i)+dsigef6(i)
  1396. sigke16(i)=sigke06(i)
  1397. do j=1,6
  1398. sigke16(i)=sigke16(i)+raideur66(i,j)*depsk6(j)*psik
  1399. end do
  1400. C print*,'Fluendo3d etape 8-2 de tir visco elastique'
  1401. C print*,'sig16(',i,')=',sig16(i)
  1402. C print*,'sigke16(',i,')=',sigke16(i)
  1403. C print*,'deps6(',i,')=',deps6(i)
  1404. C print*,'depse6(',i,')=',depse6(i)
  1405. C print*,'depsk6(',i,')=',depsk6(i)
  1406. C print*,'depsm6(',i,')=',depsm6(i)
  1407. end do
  1408.  
  1409.  
  1410. c***********************************************************************
  1411. c test des criteres de plasticité
  1412. c***********************************************************************
  1413.  
  1414. c initialisation du compteur de sousiterations locales
  1415. NCAL=0
  1416. c initialisation indicateur de plasticite en cisaillement
  1417. log_plastc=.false.
  1418.  
  1419. c ** increment des iteration locales
  1420. 20 NCAL=NCAL+1
  1421. c print*,'******numero sous iter retour radial ds Fluendo3d:',ncal
  1422. if(NCAL.eq.1) then
  1423. c diagonalisation du vecteur des contraintes
  1424. call x6x33(sig16,sig133)
  1425. c print*,'fldo3d sig133'
  1426. c call afic33(sig133)
  1427. call b3_v33(sig133,sig13,vsig133)
  1428. c construction matrice de passage inverse
  1429. call traps1(vsig133t,vsig133,3)
  1430. c print*,'etape 2-0-1 matrice de passage ds fldo3d'
  1431. c call afic33(vsig133)
  1432. else
  1433. c les directions principales ne changent pas lors du retour
  1434. call chrep6(sig16,vsig133,.false.,sig16p)
  1435. do j=1,3
  1436. sig13(j)=sig16p(j)
  1437. end do
  1438. end if
  1439.  
  1440. c ------------------------------------------------------------------
  1441.  
  1442. c passage de la loi de comportement dans la base principale
  1443. c des contraintes
  1444. if(.not.iso) then
  1445. print*,'programmer changement base loi de comp ds fldo3d'
  1446. ierr1=1
  1447. return
  1448. end if
  1449.  
  1450. c passage des resistances et contraintes de refermeture
  1451. c dans la base principale des contraintes
  1452. if(.not.iso) then
  1453. print*,'programmer changement base resistances ds fldo3d'
  1454. read*
  1455. ierr1=1
  1456. end if
  1457.  
  1458. c passage dans la base principale du tir visco elastique
  1459. call chrep6(epspc6,vsig133,.false.,epspc6p)
  1460. call chrep6(epspt6,vsig133,.false.,epspt6p)
  1461. call chrep6(epspg6,vsig133,.false.,epspg6p)
  1462. call chrep6(epsps6,vsig133,.false.,epsps6p)
  1463.  
  1464. c conditions de positivite des valeurs normales pour les fissures
  1465. do j=1,3
  1466. epspg6p(j)=max(epspg6p(j),0.d0)
  1467. epsps6p(j)=max(epsps6p(j),0.d0)
  1468. epspt6p(j)=max(epspt6p(j),0.d0)
  1469. end do
  1470.  
  1471. c ****** traitement anti-battement *********************************
  1472. if (ncal.ge.3) then
  1473. c stockage des criteres actifs precedents
  1474. do i=1,nc
  1475. actif0(i)=actif1(i)
  1476. end do
  1477. end if
  1478. if (ncal.ge.2) then
  1479. c stockage des criteres actifs precedents
  1480. do i=1,nc
  1481. actif1(i)=actif(i)
  1482. end do
  1483. end if
  1484.  
  1485. c ****** evaluation des criteres de plasticite *********************
  1486. call crir3d(bgel,pg1,bdef,ps1,bw1,pw1,rteff,cwrt,kwrt,reft,
  1487. # rceff,kwrc,delta,beta,rteff_app,rceff_app,actif,factif,nc,err1,
  1488. # na,sig13,cgel,hplg,cdef,hpls,cshr,hplw,epspg6p,epsps6p,epspt6p,
  1489. # epspc6p,alphadp,betadp,refermtl,taudp,taudpmax,complet,CPTCR)
  1490.  
  1491. c traitement de l erreur eventuelle
  1492. if(err1.eq.1) then
  1493. print*,'Pb crir3d dans Fluendo3d'
  1494. ierr1=1
  1495. return
  1496. end if
  1497. c print*,'Etape 9 ds fldo3d apres crir3d'
  1498.  
  1499. c ****** traitement anti-battement *********************************
  1500. battcr3d=.false.
  1501. if(ncal.ge.3) then
  1502. do i=1,nc
  1503. if(actif(i).and.actif0(i)) then
  1504. c print*,'Fluendo3d Battement critere',i ,'iter',ncal
  1505. battcr3d=.true.
  1506. c on active la compatibilité de ce critere avec tous
  1507. c les autres pour la suite des calculs
  1508. do j=1,nc
  1509. CPTCR(i,j)=.true.
  1510. CPTCR(j,i)=.true.
  1511. end do
  1512. end if
  1513. end do
  1514. end if
  1515.  
  1516. if(na.gt.0) then
  1517. C print*,'Etat des criteres dans fldo3d: na=',na
  1518. C do i=1,nc
  1519. C print*,'actif(',i,'):',actif(i),'factif',factif(i)
  1520. C end do
  1521. if(actif(13)) then
  1522. log_plastc=.true.
  1523. end if
  1524. end if
  1525. c read*
  1526.  
  1527. c ****** ecoulement plastique le cas échéant ***********************
  1528. if(na.gt.0) then
  1529.  
  1530. c *calcul des increments dans la base principale des contraintes
  1531. c *re-assemblage des matrices de fluage avec increment
  1532. c deformations totales nulles et initialisation de depsp
  1533.  
  1534. c on résoud le retour radial sans reconsiderer les termes
  1535. c sources car ils ont deja été consideres lors du tir
  1536. dphigel=0.d0
  1537. dphidef=0.d0
  1538. dphiw=0.d0
  1539.  
  1540. c reevaluation des coeff de consolidation dans la direction
  1541. c principale des contraintes effectives avec les deformations
  1542. c initiales (pour conserver les CC du tir) cf.
  1543.  
  1544. call conso3d(xkm,epsm,epser,epsm06,epse_tild6,cc03,
  1545. # vsig133,CMp00,CTHp,CTHv,Cwp)
  1546. c print*,'fluendo3 etape2 cmp=',cmp00
  1547.  
  1548. c assemblage du systeme et resolution sans increment de deformations (zero3)
  1549. c et sans la source de fluage due aux def elastiques initiales (zero6)
  1550. call coupl3d(ann,xn,bn,ngf,err1,zero3,vsig133,vsig133t,dt,
  1551. # cc03,taum,taumdtt,tauk,psik,zero6,zero6,raideur66,Mgel,bgel,
  1552. # dphigel,Cgel,Hplg,Mdef,bdef,dphidef,Cdef,Hpls,Mwat,bw,dphiw,
  1553. # cshr,alphadp,betadp,actif,factif,nc,dsigef6,depse6,depsk6,
  1554. # depsm6,depspc6,depspt6,depsvt6,depspg6,depsps6,.false.,
  1555. # ipzero,dpg,dps,dpw,epspt6p,refermtl,complet,na,CMp00)
  1556.  
  1557. c affichage def plastique de Drucker Prager
  1558. C do i=1,6
  1559. C print*,'depspc6(',i,')=',depspc6(i)
  1560. C end do
  1561.  
  1562. c traitement de l erreur eventuelle
  1563. if(err1.eq.1) then
  1564. ierr1=1
  1565. print*,'Pb lors du retour radial ds Fluendo3d'
  1566. print*,'Etat des criteres lors du pb:'
  1567. do i=1,nc
  1568. print*,'critere:',actif(i),'valeur',factif(i)
  1569. end do
  1570. print*,'contrainte effective matrice'
  1571. do i=1,3
  1572. print*,'sig(',i,')=',sig13(i)
  1573. end do
  1574. return
  1575. end if
  1576. c print*,'Etape 10-1 ds fldo3d apres coupl3d iter',ncal
  1577.  
  1578. else
  1579.  
  1580. c pas d ecoulement plastique
  1581. do i=1,6
  1582. depse6(i)=0.d0
  1583. depsk6(i)=0.d0
  1584. depsm6(i)=0.d0
  1585. depsvt6(i)=0.d0
  1586. depspg6(i)=0.d0
  1587. depsps6(i)=0.d0
  1588. depspc6(i)=0.d0
  1589. depspt6(i)=0.d0
  1590. dsigef6(i)=0.d0
  1591. end do
  1592. dpg=0.d0
  1593. dps=0.d0
  1594. dpw=0.d0
  1595. c print*,'Etape 10-2 ds fldo3d apres coupl3d iter',ncal
  1596.  
  1597. end if
  1598.  
  1599.  
  1600. c ******************************************************************
  1601.  
  1602. c ***** actualisation des deformations (base fixe) *****************
  1603.  
  1604. do i=1,6
  1605. c elastique
  1606. epse16(i)=epse16(i)+depse6(i)
  1607. varf(i+1)=epse16(i)
  1608. c kelvin
  1609. epsk16(i)=epsk16(i)+depsk6(i)
  1610. varf(i+7)=epsk16(i)
  1611. c stockage depsk pour mise au point
  1612. varf(122+i)=varf(i+7)-var0(i+7)
  1613. if((dt.eq.0.).and.(abs(varf(122+i)).gt.1.0d-10)) then
  1614. print*,'Pb dans fldo3d Etape 10-3 avec dt=0'
  1615. print*,'depsk(',i,')=',varf(122+i)
  1616. print*,'devrait etre nul !'
  1617. ierr1=1
  1618. return
  1619. end if
  1620. c maxwell
  1621. epsm16(i)=epsm16(i)+depsm6(i)
  1622. varf(i+13)=epsm16(i)
  1623. c cas des deformations plastiques
  1624. c cisaillement et dilatance
  1625. epspc6(i)=epspc6(i)+depspc6(i)
  1626. varf(19+i)=epspc6(i)
  1627. c print*,'actualisation varf epspc',i,varf(19+i)
  1628. c traction base fixe
  1629. epspt6(i)=epspt6(i)+depspt6(i)
  1630. varf(25+i)=epspt6(i)
  1631. c dtt
  1632. epsvt6(i)=epsvt6(i)+depsvt6(i)
  1633. varf(31+i)=epsvt6(i)
  1634. c rag
  1635. epspg6(i)=epspg6(i)+depspg6(i)
  1636. varf(37+i)=epspg6(i)
  1637. c rsi
  1638. epsps6(i)=epsps6(i)+depsps6(i)
  1639. varf(43+i)=epsps6(i)
  1640. end do
  1641.  
  1642. c ****** actualisation deformation equivalente de compression ******
  1643. depleqc=0.d0
  1644. do i=1,6
  1645. depleqc=depleqc+(epspc6(i)-epspc60(i))**2
  1646. end do
  1647. depleqc=sqrt(depleqc*2.d0/3.d0)
  1648. c print*,'depleqc',depleqc
  1649. c actualisation et stockage
  1650. epleqc1=max(epleqc0+depleqc,epleqc0)
  1651. varf(94)=epleqc1
  1652.  
  1653.  
  1654. c ****** actualisation des pressions *******************************
  1655. c gel rag
  1656. pg1=pg1+dpg
  1657. varf(83)=pg1
  1658. c stockage pression maxi du gel
  1659. varf(140)=max(var0(140),pg1)
  1660. c def
  1661. ps1=ps1+dps
  1662. varf(85)=ps1
  1663. c depression capillaire
  1664. pw1=pw1+dpw
  1665. varf(81)=pw1
  1666.  
  1667. c **** etat des contraintes effectives apres tir visco elastique
  1668. do i=1,6
  1669. sig16(i)=sig16(i)+dsigef6(i)
  1670. do j=1,6
  1671. sigke16(i)=sigke16(i)+raideur66(i,j)*depsk6(j)*psik
  1672. end do
  1673. c stockage dans variables internes
  1674. varf(49+i)=sig16(i)
  1675. varf(55+i)=sigke16(i)
  1676. C print*,'apres test criter iter',ncal
  1677. C print*,'sig16(',i,')=',sig16(i)
  1678. C print*,'sigke16(',i,')=',sigke16(i)
  1679. end do
  1680.  
  1681. c ******************************************************************
  1682. c sous iteration en cas de plasticite
  1683. if(na.ne.0) then
  1684. c on re-teste les criteres apres cette iteration
  1685. if(ncal.le.nmax) then
  1686. if (ncal.ge.nmax1) then
  1687. c on commence a afficher les pb eventuels
  1688. print*,'Iter dans Fluendo3d:',ncal
  1689. c print*,'Avant ecoulement :', ncal+1
  1690. do i=1,nc
  1691. if(actif(i)) then
  1692. print*,'critere',i,actif(i),factif(i)
  1693. if((i.ge.10).and.(i.le.12)) then
  1694. do j=1,3
  1695. print*,'defpt',j,epspt6p(j)
  1696. end do
  1697. end if
  1698. end if
  1699. end do
  1700. goto 30
  1701. do i=1,6
  1702. print*,'sig(',i,')=',sig16(i)
  1703. end do
  1704. print*, 'Apres ecoulement:' , ncal
  1705. do i=1,6
  1706. print*,'epspt6(',i,')=',epspt6(i)
  1707. end do
  1708. do i=1,6
  1709. print*,'epspc6(',i,')=',epspc6(i)
  1710. end do
  1711. do i=1,6
  1712. print*,'epsvt6(',i,')=',epsvt6(i)
  1713. end do
  1714. do i=1,6
  1715. print*,'epspg6(',i,')=',epspg6(i)
  1716. end do
  1717. do i=1,6
  1718. print*,'epsps6(',i,')=',epsps6(i)
  1719. end do
  1720. print*,'----------------------------'
  1721. c read*
  1722. 30 continue
  1723. end if
  1724. c on va faire une sous iteration plastique
  1725. goto 20
  1726. else
  1727. print*,'Approximation plasticite ds Fluendo3d'
  1728. print*,'apres',ncal,' iterations'
  1729. do i=1,nc
  1730. print*,'critere',actif(i),factif(i)
  1731. end do
  1732. print*,'Nbr maxi de sous iter atteinte dans Fluendo3d'
  1733. print*,'Augmenter NMAX ds Fluendo3d ou modifier le Pb'
  1734. ierr1=1
  1735. return
  1736. end if
  1737. end if
  1738.  
  1739. c***********************************************************************
  1740. c fin des procedures visco-elasto-plastiques
  1741. c print*,'Etape 11 ds fldo3d apres convergence',ncal
  1742. c***********************************************************************
  1743. C print*,'dt ds fldo3d=',dt
  1744. C print*,'Fluendo3d etape 10-2 a la convergence locale'
  1745. C do i=1,6
  1746. C print*,'sig16(',i,')=',sig16(i)
  1747. C print*,'sigke16(',i,')=',sigke16(i)
  1748. C print*,'deps6(',i,')=',deps6(i)
  1749. C print*,'depse6(',i,')=',depse6(i)
  1750. C print*,'depsk6(',i,')=',depsk6(i)
  1751. C print*,'depsm6(',i,')=',depsm6(i)
  1752. C print*,'depsvt6(',i,')=',depsvt6(i)
  1753. C print*,'depspc6(',i,')=',depspc6(i)
  1754. C print*,'depspt6(',i,')=',depspt6(i)
  1755. C print*,'depspg6(',i,')=',depspg6(i)
  1756. C print*,'depsps6(',i,')=',depsps6(i)
  1757. C end do
  1758. C read*
  1759.  
  1760. c***********************************************************************
  1761. c actualisation des taux de franchissement par depression capillaire
  1762.  
  1763. c passage en matrice 3x3
  1764. call x6x33(fshr06,fshr33)
  1765. c passage en base principale des contraintes
  1766. call chre3(fshr33p,fshr33,vsig133)
  1767. c actualisation des taux de passage des seuils en contrainte
  1768. do i=1,3
  1769. fshr33p(i,i)=max(fshr33p(i,i),factif(6+i),0.d0)
  1770. end do
  1771. c retour en base fixe et stockage
  1772. call chre3(fshr33,fshr33p,vsig133t)
  1773. c retour en vecteur 6
  1774. call x33x6(fshr33,fshr6)
  1775. c stockage
  1776. do i=1,6
  1777. varf(129+i)=fshr6(i)
  1778. end do
  1779.  
  1780. c***********************************************************************
  1781. c actualisation des ouvertures de fissures actuelles et maxi de traction
  1782.  
  1783. c recupereration des ouvertures initiales
  1784. do i=1,6
  1785. c ouverture actuelle
  1786. wplt06(i)=var0(96+i)
  1787. c print*,'av ma:',wplt06(i),var0(96+i),96+i
  1788. c ouverture maxi sur le temps
  1789. wpltx06(i)=var0(102+i)
  1790. c print*,'av ma:',wpltx06(i),var0(102+i),102+i
  1791. end do
  1792. c mise a jour des ouvertures des 3 fissures localisees
  1793. if(ENDO_NL) then
  1794.  
  1795. c ************ deformation plastique non locale *****************
  1796. alpha_nl=1.d0
  1797. c rangement des déformation plastiques non locales en tableau 3*3
  1798. call x6x33(eps_nl6,eps_nl33)
  1799. c diagonalisation tenseur def non locales
  1800. call b3_v33(eps_nl33,eps_nl3,veps_nl33)
  1801. c creation de la matrice de passage inverse
  1802. call traps1(veps_nl33t,veps_nl33,3)
  1803. c Passage de la déformation locale dans la base principale de la déformation non locale
  1804. c Rangement des déformation plastiques locales en tableau 3*3
  1805. call x6x33(epspt6,epspt33)
  1806. call chre3(epspt33p,epspt33,veps_nl33)
  1807. c Indicateur et deformation non-locale equivalente
  1808. c Chargement du epsilon non-local equivalent initial
  1809. do i=1,6
  1810. eptmasq06(i)=var0(146+i)
  1811. end do
  1812. call x6x33(eptmasq06,eptmasq033)
  1813. do i=1,3
  1814. do j=1,3
  1815. eptmasq33p(i,j)=0.d0
  1816. end do
  1817. if((epspt33p(i,i).gt.alpha_nl*eps_nl3(i)).and.(epspt33p(i,i)
  1818. # .gt.0.d0).and.(eps_nl3(i).gt.0.d0))then
  1819. eptmasq33p(i,i)=eps_nl3(i)
  1820. end if
  1821. end do
  1822. c retour en base fixe
  1823. call chre3(eptmasq33,eptmasq33p,veps_nl33t)
  1824. call x33x6(eptmasq33,eptmasq6)
  1825. do i=1,6
  1826. varf(146+i)=eptmasq6(i)
  1827. end do
  1828. c ************ fin deformation plastique non locale *************
  1829.  
  1830. c print*,'fluendo endo_nl av majw3d', Method_N,LcH,Method_H
  1831. c l endommagement et les ouvertures sont calculee avec la
  1832. c deformation plastique non locales
  1833. call majw3d(eptmasq06,eptmasq6,wplt06,wplt6,wpltx06,wpltx6,
  1834. # wpl3,vwpl33,vwpl33t,wplx3,vwplx33,vwplx33t,XE3D,NBNMAX3D,
  1835. # NBNB3D,IDIMB3D,Method_N,LcH,Method_H,err1)
  1836. c print*,'fluendo endo_nl ap majw3d', Method_N,LcH,Method_H
  1837. else
  1838. call majw3d(epspt60,epspt6,wplt06,wplt6,wpltx06,wpltx6,
  1839. # wpl3,vwpl33,vwpl33t,wplx3,vwplx33,vwplx33t,XE3D,NBNMAX3D,
  1840. # NBNB3D,IDIMB3D,Method_N,LcH,Method_H,err1)
  1841. end if
  1842. if(err1.eq.1)then
  1843. print*,'Pb lors du calcul ds majw3d dans fldo3d'
  1844. ierr1=1
  1845. return
  1846. end if
  1847. do i=1,6
  1848. varf(96+i)=wplt6(i)
  1849. varf(102+i)=wpltx6(i)
  1850. c print*,'fldo3d ap maj finale',wpltx6(i)
  1851. end do
  1852. c ouverture maxi actuelle
  1853. varf(109)=max(wpl3(1),wpl3(2),wpl3(3))
  1854. c indicateur de progression de la fissure
  1855. if(abs(varf(109)-var0(109)).gt.coeff_petit) then
  1856. travail_fissure=.true.
  1857. else
  1858. travail_fissure=.false.
  1859. end if
  1860. C print*,'Etape 12 ds fldo3d apres majw3d',ncal
  1861. C read*
  1862.  
  1863. c***********************************************************************
  1864. c calcul des contraintes dans les fibres ( Romain Gontero)
  1865. c include './contraintes_dans_les_fibres.h'
  1866. -INC HSIGFIB
  1867.  
  1868. c***********************************************************************
  1869. c contraintes dans solide et rgi en fin de pas avec
  1870. c prise en compte de l endo thermique et de fluage
  1871. umdt=(1.d0-dth1)*(1.d0-dflu1)
  1872. c resultante des pressions intraporeuses RGI et
  1873. c Capillaire (depression)
  1874. sigp=-bw1*pw1-bg1*pg1-bs1*ps1
  1875. c print*,bw1,pw1,bg1,pg1,bs1,ps1
  1876. c print*,'fluendo sigp',sigp
  1877. c effet sur la contrainte apparente en non sature
  1878. do i=1,6
  1879. if(i.le.3) then
  1880. c prise en compte de la pression rgi
  1881. sigf6(i)=(sig16(i)+sigp)*umdt
  1882. else
  1883. sigf6(i)=sig16(i)*umdt
  1884. end if
  1885. c print*,'sigf6',sigf6(i),' sigp',sigp,'umdt',umdt
  1886. end do
  1887.  
  1888. c***********************************************************************
  1889. c prise en compte de l'endommagement mécanique
  1890.  
  1891. if (end3d.and.(.not.plast_seule)) then
  1892. c chargement de la variable de controle d erreur de gf
  1893. errgf0=var0(110)
  1894. c endo pre pic traction
  1895. dtr=dtr0
  1896. c endo pre pic de compression
  1897. dcpp=dcpp0
  1898. c actualisation de gft en fonction de la depression capillaire
  1899. gft_app=gft*rt_app/rt
  1900. c print*,'fldo3d Method_H', Method_H
  1901. c read*
  1902. c calcul des contraintes endommagee et des endommagements
  1903. call kend3d(wpl3,vwpl33,vwpl33t,wplx3,vwplx33,vwplx33t,
  1904. # gft_app,gfr,iso,sigf6,sigf6d,err1,reft,young,nu,souplesse66,
  1905. # xmt,dtiso,dtr,dt3,dr3,dct3,0.,dcc3,nc3,nc33,ept,errgf1,
  1906. # errgf0,epspc6,0.d0,ekdc,epspg6,ekdg,alphag,dgt3,dgc3,fshr6,
  1907. # dwt3,dwc3,skdw,0.d0,epsps6,dst3,dsc3,ekds,alphas,rteff_app,
  1908. # ann,bn,xn,ipzero,ngf,tau_trac,xmc,dciso,dcpp,taudp,taudpmax,
  1909. # XE3D,NBNMAX3D,NBNB3D,IDIMB3D,altc,epssr,Method_H,Method_N,LcH)
  1910. c stockage variable de controle de l erreur sur Gft
  1911. varf(110)=errgf1
  1912. c endo pre pic
  1913. varf(79)=dtr
  1914. c endo pre pic de compression - cisaillement
  1915. varf(122)=dcpp
  1916. c traitement des erreurs
  1917. if(err1.eq.1) then
  1918. print*,'pb calcul des endommagements dans fluendo3d'
  1919. ierr1=1
  1920. return
  1921. end if
  1922. c contraintes totale dans la matrice apres endommagement
  1923. do i=1,6
  1924. sigmf6(i)=sigf6d(i)
  1925. varf(61+i)=sigmf6(i)
  1926. end do
  1927. else
  1928. c pas d endommagement
  1929. dcpp=0.d0
  1930. dtr=0.d0
  1931. varf(79)=dtr
  1932. varf(122)=dcpp
  1933. do i=1,3
  1934. dt3(i)=0.d0
  1935. nc3(i)=1.d0
  1936. dr3(i)=0.d0
  1937. dwt3(i)=0.d0
  1938. dwc3(i)=0.d0
  1939. dgt3(i)=0.d0
  1940. dgc3(i)=0.d0
  1941. dst3(i)=0.d0
  1942. dsc3(i)=0.d0
  1943. dcc3(i)=0.d0
  1944. dct3(i)=0.d0
  1945. end do
  1946. do i=1,6
  1947. sigmf6(i)=sigf6(i)
  1948. varf(61+i)=sigmf6(i)
  1949. end do
  1950. end if
  1951.  
  1952. c***********************************************************************
  1953. c combinaison fibres matrice endommagee (Romain Gontero 2022)
  1954. c include './combinaison_matrice_fibres.h'
  1955. -INC HCOMFIB
  1956.  
  1957. c***********************************************************************
  1958. c contrainte dans la matrice (eventuellement fibree)
  1959. do i=1,6
  1960. c debut romain
  1961. if(ifibre.eq.1) then
  1962. sigmf6(i)=(1.d0-rhof)*sigmf6(i)+sfib(i)
  1963. end if
  1964. c print*,"combinaison contrainte fibres"
  1965. c fin romain
  1966. varf(61+i)=sigmf6(i)
  1967. end do
  1968.  
  1969. c*********** variables initiales pour les renforts *********************
  1970. c lignes a copier si le modele utilise des renforts
  1971.  
  1972. if (NRENF00.ne.0) then
  1973. do i=1,NRENF00
  1974. c include './lire_vari_renforts.h'
  1975. -INC HLVIREN
  1976. c recuperation des non locales a utiliser pour les renforts
  1977. c pour les renforts le non local est fait sur SER(i) de numero
  1978. c NVAR2+(i-1)*NB_VARI_PAR_RENF+26
  1979. c on teste si ce renfort est traite par helmholtz
  1980. if(log_H_RENF(i)) then
  1981. c recuperation des variables pour une traitement non local du renfort
  1982. ivarnl=NVAR2+(i-1)*NB_VARI_PAR_RENF+26
  1983. c numero de la formulation non locale
  1984. nl=Num_H_RENF(i)
  1985. c position des variables de Helmholtz associees a cette formulation
  1986. if(istep.ne.0) then
  1987. c recup des non locales associees aux renforts
  1988. if(istep.ne.1) then
  1989. c recuperation de la contrainte non locale intermediaire
  1990. sigr_nl(i)=var0(ivarnl)
  1991. c recuperation du gradient de la contrainte sur Hi2
  1992. grad_sigr(i)=Helm0(nl,2)
  1993. c survie du renfort
  1994. coeff_nlr(i)=Helm0(nl,3)
  1995. c survie de l interface
  1996. coeff_nli(i)=Helm0(nl,4)
  1997. c coeff de taux dans l erreur
  1998. Helm1(nl,6)=Helm0(nl,6)
  1999. c contrainte non locale de l iteration non locale precedente
  2000. sigr_nl0(i)=Helm0(nl,7)
  2001. c recuperation de la variable de controle des hypotheses
  2002. Pb_nl(i)=Helm0(nl,8)
  2003. c hypothese ecoulement local
  2004. hypo_nl(i)=Helm0(nl,9)
  2005. c copie du coeff de normalisation de taux
  2006. helm1(nl,10)=helm0(nl,10)
  2007. else
  2008. c cas istep=1, on a pas encore fait d etape non locale
  2009. c contrainte non locale de l iteration non locale precedente
  2010. sigr_nl0(i)=Helm0(nl,1)
  2011. c recuperation de la contrainte non locale convergee precedente
  2012. sigr_nl(i)=sigr_nl0(i)
  2013. c recuperation du gradient de la contrainte non locale convergee precedente sur YU2i
  2014. grad_sigr(i)=Helm0(nl,2)
  2015. c on recharge les hypotheses sur endo et refermeture
  2016. if(ppas) then
  2017. c survie du renfort
  2018. coeff_nlr(i)=1.0d0
  2019. c survie de l interface
  2020. coeff_nli(i)=1.0d0
  2021. else
  2022. c survie du renfort
  2023. coeff_nlr(i)=Helm0(nl,3)
  2024. c survie de l interface
  2025. coeff_nli(i)=Helm0(nl,4)
  2026. end if
  2027. c hypothese pas d ecoulement plastique
  2028. Pb_nl(i)=0.d0
  2029. hypo_nl(i)=0.d0
  2030. end if
  2031. else
  2032. c traitement local du renfort
  2033. grad_sigr(i)=0.d0
  2034. coeff_nlr(i)=1.d0
  2035. coeff_nli(i)=1.d0
  2036. Pb_nl(i)=0.d0
  2037. hypo_nl(i)=0.d0
  2038. end if
  2039. else
  2040. c traitement local du renfort
  2041. grad_sigr(i)=0.d0
  2042. coeff_nlr(i)=1.d0
  2043. coeff_nli(i)=1.d0
  2044. Pb_nl(i)=0.d0
  2045. hypo_nl(i)=0.d0
  2046. end if
  2047. end do
  2048. end if
  2049.  
  2050. c ****** variables initiales pour WL2 ******************************
  2051.  
  2052. if (log_H_TWL2) then
  2053. c resultat non local
  2054. xwl2=var0(71)
  2055. c max de alpha
  2056. xwl2max=var0(73)
  2057. c max du taux de charge
  2058. tau_trac_wl2_max=var0(74)
  2059. c endo localise
  2060. dtl00=var0(75)
  2061. c coeff d effet d echelle precedent
  2062. cwrt=var0(76)
  2063. end if
  2064.  
  2065. c************* Etapes non locales intermediaires ***********************
  2066.  
  2067. if((istep.ne.0).and.(istep.ne.2)) then
  2068. c *** reinitialisation des variables locales pour le calcul reel
  2069. c car les sous iterations non locales ne doivent pas conserver
  2070. c les variables locales non convergees lors de la copie de varf
  2071. c sur var0 lors du passage dans UNPAS en non local sauf si
  2072. c istep est egal a 2 (il s agit alors du dernier passage non local)
  2073. do i=1,NVARI
  2074. varf(i)=var0(i)
  2075. end do
  2076.  
  2077. c **** etape non locale intermediaire pour WL2 *****************
  2078.  
  2079. c 'TWL2' est la variable a moyenner pour la methode wl2
  2080. ivarnl=ivari_twl2
  2081. call exhmtz(istep,NBVIA3D,INLVIA3D,NB_HELM,
  2082. # ivarnl,log_H_TWL2,Num_H_TWL2)
  2083. c numero de la formulation associee
  2084. NL=Num_H_TWL2
  2085.  
  2086. if (log_H_TWL2) then
  2087. c ** le calcul de xwl2 est a faire **************************
  2088. c print*,'fldo3d, istep=1 avec cwrt=',cwrt
  2089. c recuperation des contraintes dans la matrice
  2090. call x6x33(sigmf6,sig133)
  2091. call b3_v33(sig133,sig13,vsig133)
  2092. c prise en compte de la dilution d endommagement lors de l hydratation
  2093. call hydrvari3d(dtl00,dtl0,hyd0,hydr,hyds)
  2094. c recuperation de l indicateur de localisation fin du nouveau pas
  2095. dtl1=max(dt3(1),dt3(2),dt3(3))
  2096. c taux de charge en traction actualise pour la nouvelle deformation
  2097. tau_trac_wl2=tau_trac
  2098. c pression capillaire
  2099. pw0=pw1
  2100. c saturation en eau * biot
  2101. bw0=bw1
  2102. c 1er passage dans wl2
  2103. call wl2d3d(1,vmax,vref,sig13,eweb,rt_app,cwrt,xwl2,
  2104. # tau_trac_wl2,dtl0,dtl1,xwl2max,tau_trac_wl2_max,bw0,
  2105. # pw0,kwrt)
  2106. c *** on actualise des vari a passer dans non local pour Weibull
  2107. c les variables de Weibull (alpha(xwl2),smax(tau_trac_wl2))
  2108. c alpha
  2109. varf(ivarinl)=xwl2
  2110. c sigma/rt maxi pour max(structure)
  2111. print*,'a refaire avec les helm1...'
  2112. ierr1=1
  2113. return
  2114. varf(72)=tau_trac_wl2
  2115. c max xwl2 un pour multiplier par xwl2 non local maxi
  2116. c ds la procedure non locale
  2117. varf(73)=1.d0
  2118. c max twl2 un pour multiplier par twl2 non local maxi
  2119. c ds la procedure non locale
  2120. varf(74)=1.d0
  2121. c reconduction de l endommagement localise debut de ne
  2122. c pas affecte par hydratation
  2123. varf(75)=dtl0
  2124. c reconduction de cwrt en cas de localisation
  2125. varf(76)=cwrt
  2126. c pression capillaire fin de pas pour rt istep=2
  2127. varf(81)=pw1
  2128. c saturation en eau * biot fin de pas pour istep=2
  2129. varf(80)=bw1
  2130. c endommagement fin de pas
  2131. varf(119)=dtl1
  2132. else
  2133. c ** rt00 n est pas affectee par la methode WL2 *************
  2134. c pas de non local pour xwl2
  2135. cwrt=1.d0
  2136. c liste des variables non locales : alpha
  2137. varf(71)=0.d0
  2138. c variable non locale : sigma maxi /rt
  2139. varf(72)=0.d0
  2140. c max de xwl2 non utilisse on y laisse 1.
  2141. varf(73)=1.d0
  2142. c contrainte relative maxi non locale non utiliseee
  2143. varf(74)=0.d0
  2144. c pas d endo de traction utilisable pour xwl2
  2145. varf(75)=0.d0
  2146. c modif de rt par effet d echelle inactif
  2147. varf(76)=cwrt
  2148. end if
  2149.  
  2150. c *** etape non locale intermediaire pour les renforts *********
  2151.  
  2152. if (NRENF00.ne.0) then
  2153.  
  2154. c intialisation des tenseurs pour les renforts
  2155. call prrf3d(dalpr,teta1,teta2,tetaref,epst06,epst033,
  2156. # epstf6,epstf33,epspmf6,epspt6,epspmf33)
  2157.  
  2158.  
  2159. c calcul de la source non locale pour chaque renfort
  2160. do i=1,NRENF00
  2161.  
  2162. c cas des renforts traites par helmholtz
  2163. if (log_H_RENF(i)) then
  2164. c numero de la formulation d Helmholtz pour le renfort i
  2165. nl=Num_H_RENF(i)
  2166. c recuperation des non locales a utiliser pour les renforts
  2167. c pour les renforts le non local est fait sur SERi de numero
  2168. ivarnl=NVAR2+(i-1)*NB_VARI_PAR_RENF+26
  2169. if(rhor(i).gt.0.) then
  2170. c etape non locale de rnfr3d on calcule la source
  2171. c non locale pour le pas suivant
  2172. call rnfr3d(istep,NB_RENF,i,epstf33,vecr,epsr0(i),
  2173. # epsrf(i),eplr0(i),eplrf(i),yor(i),syr(i),sigre0(i),
  2174. # sigref(i),hplr(i),tor(i),ekr(i),skr(i),ATRR(i),khir(i),
  2175. # gamr(i),sprec(i),teta1,teta2,dt,ppas,theta,eprm0(i),
  2176. # eprmf(i),ttaref(i),rhor(i),mu_r0(i),fl3d,errr,xnr(i),
  2177. # xmuthr(i),eprk0(i),eprkf(i),tokr(i),yksyr(i),
  2178. # plast_seule,ann,xn,bn,ngf,ipzero,epspmf33,spre0(i),
  2179. # spref(i),epst033,depsa(i),epleq0(i),epleqf(i),
  2180. # epsmf(i),epsm0(i),sigr_nl(i),coeff_nlr(i),eper0(i),
  2181. # epart(i),eparv(i),hypo_nl(i),plr_iso,log_H_RENF(i),
  2182. # garder,Pb_nl(i),travail_fissure)
  2183. c traitement de l erreur
  2184. if(errr) then
  2185. print*,'erreur dans rnfr3d'
  2186. ierr1=1
  2187. return
  2188. end if
  2189. c mise a jour de la def anelastique pour la source de
  2190. c l iteration suivante
  2191. if(garder) then
  2192. c deformation visqueuse
  2193. eparv(i)=eprkf(i)+eprmf(i)
  2194. c deformation anelastique totale
  2195. epart(i)=eparv(i)+eplrf(i)
  2196. else
  2197. c deformation visqueuse initiale
  2198. eparv(i)=eprk0(i)+eprm0(i)
  2199. c deformation anelastique totale initiale
  2200. epart(i)=eparv(i)+eplr0(i)
  2201. end if
  2202. c stockage de la longueur de l element fini
  2203. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+13)=longr(i)
  2204. c calcul des endommagements et de la correction de source
  2205. call endorf(sigref(i),eplrf(i),syr(i),sur(i),
  2206. # epsrf(i),epu(i),hplr(i),yor(i),wpr(i),longr(i),
  2207. # damrt0(i),damrtf(i),damrt1(i),damrt2(i),damrc0(i),
  2208. # damrcf(i),refrf(i),eplrt(i),eplrc(i),plr_iso,
  2209. # diffr0(i),diffrf(i),yor(i),deqr(i),Hintr(i),
  2210. # grad_sigr(i),tauie(i),taur(i),dami0(i),damif(i),
  2211. # epsmf(i),eplr0(i),sigre0(i),log_H_RENF(i),epsm0(i),
  2212. # epsr0(i),depsa(i),Et0(i),Etf(i),Hs0(i),Hsf(i),sigrf(i),
  2213. # spref(i),epart(i),eparv(i),source_nl(i),coeff_nlr(i),
  2214. # taui0(i),tauif(i),coeff_nli(i),eprkf(i),
  2215. # eprmf(i),hypo_nl(i),istep,ierr_renfort,garder,
  2216. # endo_interface_explicit)
  2217. c traitement erreur endo renfort
  2218. c include './traitement_erreur_renforts.h'
  2219. -INC HERRREN
  2220. c sauvegarde de la contrainte a moyenner
  2221. varf(ivarnl)=source_nl(i)
  2222. c survie du renfort : coeff_nlr(i)
  2223. Helm1(nl,3)=coeff_nlr(i)
  2224. c survie de l interface : coeff_nli(i)
  2225. Helm1(nl,4)=coeff_nli(i)
  2226. c hypotheses d ecoulements realises : hypo_nl(i)
  2227. Helm1(nl,9)= hypo_nl(i)
  2228. c endommagement de l interface pour le calcul implicite du gradient endommagement d interface : damif(i)
  2229. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+20)=damif(i)
  2230. c contrainte de cisaillement implicite
  2231. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+19)=tauiF(i)
  2232. c sauvegarde de la contrainte
  2233. if(garder) then
  2234. c les hypotheses sont coherentes on garde la solution
  2235. c valeur de la contrainte non locale avant ecoulement (SERi)
  2236. Helm1(nl,1)=sigr_nl(i)
  2237. c valeur de la contrainte endommagee (SNRi)
  2238. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+14)= sigrf(i)
  2239. c actualisation de la diffusion non locale (DFRi)
  2240. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+18)=diffrf(i)
  2241. c stockage du module tangent du renfort ETRi
  2242. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+21)=Etf(i)
  2243. c stockage module secant interface HSRi
  2244. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+22)=Hsf(i)
  2245. c deformation anelastique EARi
  2246. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+24)=epart(i)
  2247. c stockage de la deformation visqueuse du renfort EVRi
  2248. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+25)=eparv(i)
  2249. else
  2250. c les hypotheses etaient incoherentes, on reprend la
  2251. c valeur de la contrainte locale avant l etape non locale
  2252. if(istep.ne.1) then
  2253. c les hypotheses etaient incoherente on reprend la
  2254. c valeur de la contrainte locale avant l etape non locale
  2255. Helm1(nl,1)=sigr_nl0(i)
  2256. else
  2257. c comme on a pas encore fait d etape non locale
  2258. c on prend la contrainte calculée localement
  2259. Helm1(nl,1)=sigrf(i)
  2260. endif
  2261. end if
  2262. if(endo_interface_explicit.and.(istep.eq.1)) then
  2263. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+20)=dami0(i)
  2264. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+19)=taui0(i)
  2265. end if
  2266. else
  2267. c pas de renfort num i
  2268. c rho(i)=0
  2269. do j=1,9
  2270. c mise a zero des vari du renfort
  2271. varf(ivarnl)=0.d0
  2272. c valeur de la contrainte apres ecoulement
  2273. sigrf(i)=0.d0
  2274. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+14)=sigrf(i)
  2275. c actualisation de la diffusion non locale
  2276. diffrf(i)=0.d0
  2277. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+18)=diffrf(i)
  2278. c stockage du module du renfort
  2279. Etf(i)=0.d0
  2280. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+21)=Etf(i)
  2281. c stockage module interface
  2282. Hsf(i)=0.d0
  2283. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+22)=Hsf(i)
  2284. c stockage de l hypothese de deformation anelastique
  2285. epart(i)=0.d0
  2286. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+24)=epart(i)
  2287. c stockage de l autre hypothese
  2288. eparv(i)=0.d0
  2289. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+25)=eparv(i)
  2290. end do
  2291. end if
  2292. end if
  2293. end do
  2294. end if
  2295. end if
  2296. c******** fin l etape non locale intermidiaire *************************
  2297.  
  2298.  
  2299. c******** Derniere etape non locale ou calcul local ********************
  2300.  
  2301. c ***** calcul des contraintes dans les renforts ******************
  2302.  
  2303. if ((NRENF00.ne.0).and.((istep.eq.0).or.(istep.eq.2))) then
  2304. c calcul du taux volumique d armatures
  2305. rhov=0.d0
  2306. do j=1,NRENF00
  2307. rhov=rhov+rhor(j)
  2308. end do
  2309. if (rhov.gt.1.d0) then
  2310. print*,'Pb car taux d armature > 1 dans fluendo3d ! :('
  2311. ierr1=1
  2312. return
  2313. end if
  2314. c initialisation des tenseurs de contraintes homogeneisee
  2315. do j=1,3
  2316. do k=1,3
  2317. sigrm33(j,k)=0.d0
  2318. sigrf33(j,k)=0.d0
  2319. end do
  2320. end do
  2321. c intialisation des tenseurs pour les renforts
  2322. call prrf3d(dalpr,teta1,teta2,tetaref,epst06,epst033,
  2323. # epstf6,epstf33,epspmf6,epspt6,epspmf33)
  2324.  
  2325. c calcul des contraintes axiales dans chaque renfort
  2326. do i=1,NRENF00
  2327. c recuperation des non locales a utiliser pour les renforts
  2328. c pour les renforts le non local est fait sur SER de nuemero
  2329. ivarnl=NVAR2+(i-1)*NB_VARI_PAR_RENF+26
  2330. if(rhor(i).gt.0.) then
  2331. c recuperation du tir elastique non local
  2332. if((istep.eq.2).and.log_H_RENF(i)) then
  2333. c derniere estimation pour les renforts non locaux
  2334. cc sauvegarde du tir non local precedent car istep=2
  2335. cc avec la precedente contrainte non locale
  2336. c numero de la formulation non locale
  2337. nl=Num_H_RENF(i)
  2338. c contrainte non locale
  2339. sigr_nl(i)=var0(ivarnl)
  2340. c on utilse helm1(nl,1) pour stocker le resultat non local
  2341. Helm1(nl,1)=sigr_nl(i)
  2342. c recuperation du gradient
  2343. grad_sigr(i)=Helm0(nl,2)
  2344. c sauvegarde du gradient de sigr pour le pas suivant
  2345. helm1(nl,2)=grad_sigr(i)
  2346. c copie de la valeur initiale en cas de reprise
  2347. helm1(nl,7)=sigr_nl(i)
  2348. c coeff du gradient pour l erreur
  2349. Helm1(nl,10)=0.25d0*(deqr(i)/sur(i))
  2350. c recuperation des predicteurs pour le pas suivant
  2351. Etf(i)=Et0(i)
  2352. Hsf(i)=Hs0(i)
  2353. else if (istep.eq.0) then
  2354. continue
  2355. else if ((istep.eq.2).and.(.not.log_H_RENF(i))) then
  2356. c certains aciers sont calcules en local
  2357. continue
  2358. else
  2359. c recuperation des predicteurs pour le pas suivant
  2360. print*,'erreur d aiguillage dans fldo3d'
  2361. print*,'istep',istep,'Helmholtz(',nl,')=',
  2362. # log_H_RENF(i)
  2363. ierr1=1
  2364. return
  2365. end if
  2366. c contrainte effective axiale dans les renforts
  2367. call rnfr3d(istep,NB_RENF,i,epstf33,vecr,epsr0(i),
  2368. # epsrf(i),eplr0(i),eplrf(i),yor(i),syr(i),sigre0(i),
  2369. # sigref(i),hplr(i),tor(i),ekr(i),skr(i),ATRR(i),khir(i),
  2370. # gamr(i),sprec(i),teta1,teta2,dt,ppas,theta,eprm0(i),
  2371. # eprmf(i),ttaref(i),rhor(i),mu_r0(i),fl3d,errr,xnr(i),
  2372. # xmuthr(i),eprk0(i),eprkf(i),tokr(i),yksyr(i),
  2373. # plast_seule,ann,xn,bn,ngf,ipzero,epspmf33,spre0(i),
  2374. # spref(i),epst033,depsa(i),epleq0(i),epleqf(i),
  2375. # epsmf(i),epsm0(i),sigr_nl(i),coeff_nlr(i),eper0(i),
  2376. # epart(i),eparv(i),hypo_nl(i),plr_iso,log_H_RENF(i),
  2377. # garder,Pb_nl(i),travail_fissure)
  2378. c traitement erreur rnfr3d
  2379. if(errr) then
  2380. print*,'erreur dans rnfr3d'
  2381. ierr1=1
  2382. return
  2383. end if
  2384. c action suivant conformite hypothese
  2385. if(.not.garder) then
  2386. print*,'Pb dans fldo3d'
  2387. print*,'pour istep=2 on devrait garder'
  2388. print*,'la solution du sous pas non local'
  2389. ierr1=1
  2390. return
  2391. end if
  2392. c deformation visqueuse
  2393. eparv(i)=eprkf(i)+eprmf(i)
  2394. c deformation anelastique totale
  2395. epart(i)=eparv(i)+eplrf(i)
  2396. c nouvelle deformation elastique
  2397. eperf(i)=epsrf(i)-epart(i)
  2398. c print*,'fldo3d:sigref(',i,')=',sigref(i)
  2399. c calcul des endommagements et actualisation lnl, dsource
  2400. call endorf(sigref(i),eplrf(i),syr(i),sur(i),
  2401. # epsrf(i),epu(i),hplr(i),yor(i),wpr(i),longr(i),
  2402. # damrt0(i),damrtf(i),damrt1(i),damrt2(i),damrc0(i),
  2403. # damrcf(i),refrf(i),eplrt(i),eplrc(i),plr_iso,
  2404. # diffr0(i),diffrf(i),yor(i),deqr(i),Hintr(i),
  2405. # grad_sigr(i),tauie(i),taur(i),dami0(i),damif(i),
  2406. # epsmf(i),eplr0(i),sigre0(i),log_H_RENF(i),epsm0(i),
  2407. # epsr0(i),depsa(i),Et0(i),Etf(i),Hs0(i),Hsf(i),sigrf(i),
  2408. # spref(i),epart(i),eparv(i),source_nl(i),coeff_nlr(i),
  2409. # taui0(i),tauif(i),coeff_nli(i),eprkf(i),
  2410. # eprmf(i),hypo_nl(i),istep,err1,garder,
  2411. # endo_interface_explicit)
  2412. C if (sigrf(i).ne. sigref(i)) then
  2413. C print*,'Ds fluendo3d sigrf(i).ne. sigref(i)'
  2414. C print*,i,sigrf(i),sigref(i)
  2415. C ierr1=1
  2416. C return
  2417. C end if
  2418. c print*,'Dans fldo3d,sigrf(',i,')=',sigrf(i)
  2419. c traitement erreur endommagement
  2420. if(err1.eq.1) then
  2421. ierr1=1
  2422. return
  2423. end if
  2424. if((istep.eq.2).and.log_H_RENF(i)) then
  2425. c rappel numero de la formulation non locale
  2426. nl=Num_H_RENF(i)
  2427. c contrainte non locale derniere iteration
  2428. Helm1(nl,1)=sigr_nl(i)
  2429. c gradient de la contrainte
  2430. Helm1(nl,2)=grad_sigr(i)
  2431. c survie du renfort
  2432. Helm1(nl,3)=coeff_nlr(i)
  2433. c survie de l interface
  2434. Helm1(nl,4)=coeff_nli(i)
  2435. c coeff de taux dans l erreur
  2436. Helm1(nl,6)=1.d0/sur(i)
  2437. c valeur de la contrainte non locale utilisee
  2438. Helm1(nl,7)=sigr_nl(i)
  2439. c numero sous iteration non locale
  2440. Helm1(nl,8)=Pb_nl(i)
  2441. c moyenne des hypotheses d ecoulements realises
  2442. Helm1(nl,9)=hypo_nl(i)
  2443. c print*,'fluendo istep',istep,'errsigr',Helm1(nl,4)
  2444. end if
  2445. else
  2446. epsrf(i)=0.d0
  2447. eperf(i)=0.d0
  2448. eplrf(i)=0.d0
  2449. sigref(i)=0.d0
  2450. eprmf(i)=0.d0
  2451. mu_r0(i)=0.d0
  2452. eprkf(i)=0.d0
  2453. spref(i) =0.d0
  2454. eplrc(i) =0.d0
  2455. damrtf(i)=0.d0
  2456. damrt1(i)=0.d0
  2457. damrt2(i)=0.d0
  2458. sigrf(i)=0.d0
  2459. epleqf(i) =0.d0
  2460. damrcf(i) =0.d0
  2461. eplrt(i)=0.d0
  2462. diffrf(i)=0.d0
  2463. tauif(i)=0.d0
  2464. damif(i)=0.d0
  2465. Etf(i)=0.d0
  2466. Hsf(i)=0.d0
  2467. refrf(i)=0.d0
  2468. epart(i)=0.d0
  2469. eparv(i)=0.d0
  2470. end if
  2471. c print*,'fldo3d Etape 14 istep2 eper:',eperf(i)
  2472. c stockage des variables internes des renforts
  2473. c include './ecrire_vari_renforts.h'
  2474. -INC HEVIREN
  2475. c print*,'Etape 13-3 istep 2 ds fluendp3d'
  2476. c print*,'vari sigrf',i,varf(nvar2+(i-1)*NB_VARI_RENF+14),sigrf(i)
  2477.  
  2478. c **** tenseur des contraintes dues aux renforts ************
  2479. do j=1,3
  2480. do k=1,3
  2481. if(rhor(i).gt.0.) then
  2482. sigrm33(j,k)=sigrm33(j,k)+rhor(i)*sigrf(i)*
  2483. # vecr(i,j)*vecr(i,k)
  2484. end if
  2485. end do
  2486. end do
  2487. c fin de la boucle sur le renfort i
  2488. end do
  2489. c mise a zero des vari des renforts non actifs
  2490. if (NRENF00.lt.NB_RENF) then
  2491. do i=(NRENF00+1),NB_RENF
  2492. do j=1,NB_VARI_PAR_RENF
  2493. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+j)=0.d0
  2494. end do
  2495. end do
  2496. end if
  2497. else
  2498. c pas de renforts ou etape non locale intermediaire
  2499. rhov=0.d0
  2500. c **** tenseur des contraintes dues aux renforts ************
  2501. do j=1,3
  2502. do k=1,3
  2503. sigrm33(j,k)=0.d0
  2504. end do
  2505. end do
  2506. c variables internes des renforts
  2507. if(NRENF00.eq.0) then
  2508. c mise a zero des vari des renforts
  2509. do i=1,NB_RENF
  2510. do j=1,NB_VARI_PAR_RENF
  2511. varf(NVAR2+(i-1)*NB_VARI_PAR_RENF+j)=0.d0
  2512. end do
  2513. end do
  2514. end if
  2515. end if
  2516. c combinaison des contraintes dans les renforts et la matrice
  2517. c print*,'contrainte dans les aciers'
  2518. call x33x6(sigrm33,sigrm6)
  2519. c call afic6(sigrm6)
  2520. c print*,'contraintes dans la matrice '
  2521. c call afic6(sigmf6)
  2522. do i=1,6
  2523. sigf6d(i)=(1.d0-rhov)*sigmf6(i)+sigrm6(i)
  2524. end do
  2525. c print*,'contrainte moyenne BA'
  2526. c call afic6(sigf6d)
  2527.  
  2528.  
  2529. c***********************************************************************
  2530. c calcul des endommagements equivalents pour affichage
  2531. c***********************************************************************
  2532.  
  2533. if(end3d.and.(.not.plast_seule)) then
  2534. c endommagement equivalent de traction
  2535. dtl1=max(dt3(1),dt3(2),dt3(3))
  2536. if(istep.eq.0) then
  2537. varf(75)=var0(119)
  2538. varf(119)=dtl1
  2539. end if
  2540. dtw0=max(dwt3(1),dwt3(2),dwt3(3))
  2541. dtg0=max(dgt3(1),dgt3(2),dgt3(3))
  2542. dts0=max(dst3(1),dst3(2),dst3(3))
  2543. dtra=1.d0-(1.d0-dtr)*(1.d0-dflu1)*(1.d0-dth1)*
  2544. # (1.d0-dtl1)*
  2545. # (1.d0-dtw0)*
  2546. # (1.d0-dtg0)*
  2547. # (1.d0-dts0)
  2548. c endommagement equivalent de compression
  2549. dcw0=max(dwc3(1),dwc3(2),dwc3(3))
  2550. dcg0=max(dgc3(1),dgc3(2),dgc3(3))
  2551. dcs0=max(dsc3(1),dsc3(2),dsc3(3))
  2552. dct0=max(dct3(1),dct3(2),dct3(3))
  2553. dcc0=max(dcc3(1),dcc3(2),dcc3(3))
  2554. dcom=1.d0-(1.d0-dflu1)*(1.d0-dth1)*(1.d0-dcpp)*
  2555. # (1.d0-dcw0)*
  2556. # (1.d0-dcg0)*
  2557. # (1.d0-dcs0)*
  2558. # (1.d0-dct0)*
  2559. # (1.d0-dcc0)
  2560. else
  2561. c cas sans endommagement
  2562. dtra=0.d0
  2563. dcom=0.d0
  2564. end if
  2565. varf(95)=dtra
  2566. varf(96)=dcom
  2567.  
  2568. c endo meca traction
  2569. varf(111)=1.d0-(1.d0-dtl1)*(1.d0-dtr)
  2570. c endo hydrique traction
  2571. varf(112)=dtw0
  2572. c endo rag traction
  2573. varf(113)=dtg0
  2574. c end do def traction
  2575. varf(114)=dts0
  2576.  
  2577. c endo meca compression
  2578. varf(115)=1.d0-(1.d0-dct0)*(1.d0-dcc0)*(1-dcpp)
  2579. c endo hydrique compression
  2580. varf(116)=dcw0
  2581. c endo rag compression
  2582. varf(117)=dcg0
  2583. c endo def compression
  2584. varf(118)=dcs0
  2585. c endo meca prepic
  2586. varf(122)=dcpp
  2587. c endo meca compression par couplage avec traction (buckling)
  2588. varf(136)=dct0
  2589. c contrainte equivalente de Drucker Prager
  2590. varf(137)=taudp
  2591. c endommagement de compression par cisaillement
  2592. varf(138)=dcc0
  2593.  
  2594. c***********************************************************************
  2595. c affectation dans le tableau de sortie des contraintes
  2596. c et prise encompte des contribution des renforts
  2597. do i=1,nstrs
  2598. sigf(i)=sigf6d(i)
  2599. c print*,'sigf(',i,')=',sigf(i)
  2600. end do
  2601.  
  2602. c indicateur de fin de 1er pas
  2603. if(ppas.and.((istep.eq.2).or.(istep.eq.0))) then
  2604. varf(1)=1.d0
  2605. else
  2606. if(ppas) then
  2607. varf(1)=0.d0
  2608. else
  2609. varf(1)=var0(1)
  2610. end if
  2611. end if
  2612.  
  2613. c***********************************************************************
  2614. c VARIABLES INTERNES A ACTUALISER POUR LES FORMULATIONS DE HELMHOLTZ
  2615. C***********************************************************************
  2616. c sauvegarde des vari de helmholtz HELM1(NL,ii=1..NBR_VARI_HELM)
  2617. do NL=1,NB_HELM
  2618. c include './ecrire_vari_helmholtz.h'
  2619. -INC HEVIHEL
  2620. end do
  2621. c autre variables internes a sauver en cas d etape non locale
  2622. if(ENDO_NL) then
  2623. c residu de deformation plastique locale a diffuser
  2624. if((istep.eq.1).or.(istep.eq.3)) then
  2625. do i=1,6
  2626. c source locale
  2627. varf(140+i)=epspt6(i)
  2628. c -epspt60(i)
  2629. end do
  2630. else
  2631. do i=1,6
  2632. c stockage valeur non locale
  2633. varf(140+i)=eps_nl6(i)
  2634. end do
  2635. end if
  2636. end if
  2637.  
  2638. C***********************************************************************
  2639. c stockage du pas de temps pour verif
  2640. varf(139)=dt
  2641. c***********************************************************************
  2642. c traitement erreur residuelle
  2643. if(err1.eq.1) then
  2644. ierr1=1
  2645. return
  2646. end if
  2647.  
  2648. return
  2649. c fin
  2650. c***********************************************************************
  2651.  
  2652.  
  2653.  
  2654.  
  2655. c***********************************************************************
  2656. c affichages pour etude des cas ou dt = 0 (dt est stocke dans vari
  2657. c (139) si dt = 0, dans castem les vari non convergees de la
  2658. c dernieresi dt = 0, dans castem les vari non convergees de
  2659. c la derniere sous iteration avant la convergence forcee conservee
  2660. do i=1,6
  2661. if((varf(139).eq.0.).and.(.not.ppas)) then
  2662. c le pas de temps actuel est nul on affiche les var0 du pas
  2663. c precedent converge
  2664. print*,'Fluendo3d Etape 14-1 avec dt=0 au pas actuel'
  2665. print*,'depsk0(',i,')=',var0(122+i)
  2666. print*,'depskf(',i,')=',varf(122+i)
  2667. print*,'var0(',i,')=',var0(7+i)
  2668. print*,'varf(',i,')=',varf(7+i)
  2669. c read*
  2670. c err1=1
  2671. end if
  2672. end do
  2673. do i=1,6
  2674. if((var0(139).eq.0.).and.(.not.ppas).and.
  2675. # (abs(varf(7+i)-var0(7+i)).gt.1.0d-10)) then
  2676. c on teste l evolution des vari visqueuses sur le pas
  2677. c suivant la non covergence forcee, si on constate une
  2678. c evolution des vari au pas actuel on l affiche
  2679. print*,'Fluendo3d Etape 14-2 avec dt=0 au pas precedent'
  2680. print*,'depsk0(',i,')=',var0(122+i)
  2681. print*,'depskf(',i,')=',varf(122+i)
  2682. print*,'var0(',i,')=',var0(7+i)
  2683. print*,'varf(',i,')=',varf(7+i)
  2684. c err1=1
  2685. end if
  2686. end do
  2687.  
  2688. c dernier traitement des erreurs
  2689. if(err1.eq.1) then
  2690. ierr1=1
  2691. return
  2692. end if
  2693.  
  2694. c cas ou on souhaite stopper le calcul si convergence forcee
  2695. if((varf(139).eq.0.).and.(.not.ppas)) then
  2696. print*,'on sort de fldo3d avec le pas de temps nul'
  2697. print*,'---------------------------------------------'
  2698. c ierr1=1
  2699. end if
  2700.  
  2701. c variables internes fin de passage
  2702. C do i=1,6
  2703. C write(*,'(I4,1Xe10.3,1xe10.3)') 19+i,var0(19+i),varf(19+i)
  2704. C end do
  2705. C if(log_plastc) then
  2706. C print*,'---on vient de plastifier en compression------'
  2707. C c read*
  2708. C end if
  2709.  
  2710. return
  2711. end
  2712. c***********************************************************************
  2713.  
  2714.  
  2715.  
  2716.  
  2717.  
  2718.  
  2719.  
  2720.  
  2721.  
  2722.  

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