nfin3d
C NFIN3D SOURCE FD218221 24/02/07 21:15:21 11834 c*********************************************************************** c calcul du nombre de fissures en fonction de la direction c A.Sellier sept.2022 subroutine nfin3d(ppas,lcr,nc33,NRENF00,vecr,NB_RENF,longr,lsr, # lfr,deqr,syr,taur,rhor,rt00,XE3D,NBNMAX3D,NBNB3D,IDIMB3D, # NB_HELM,TAILH,log_H_RENF,Num_H_RENF,err1) c tables de dimension fixe pour resolution des sytemes lineaires implicit real*8 (a-h,o-z) implicit integer (i-n) c variables non locales integer NB_HELM,err1 real*8 TAILH(NB_HELM,3,3) c nombre reel de renforts integer NRENF00 integer NBNMAX3D,NBNB3D,idimb3d real*8 xe3d(3,NBNMAX3D) c declaration supplementaires pour le traitement non local des renforts logical log_H_RENF(NB_RENF) integer Num_H_RENF(NB_RENF) c nombre maxi renfort integer NB_RENF logical ppas real*8 nc33(3,3),rt00 real*8 vecr(NB_RENF,3),longr(NB_RENF),deqr(NB_RENF) real*8 rhor(NB_RENF),lsr(NB_RENF),lfr(NB_RENF),syr(NB_RENF) real*8 taur(NB_RENF) real*8 lcr(NB_RENF) c variables locales real*8 dir3(3),nfis0,nfis1,dnfis,nc3(3) integer nl,nd1,id1 c initialisation des matrice pour le cas sans renforts err1=0 do i=1,3 do j=1,3 if(i.eq.j) then nc33(i,j)=1.d0 else nc33(i,j)=0.d0 end if end do end do c evaluation du nombre de fissures par direction et construction c d une approximation ellipsoidale du nombre de fissure en fonction c de la direction c w contient alors le cumul des ouvertures sur la longueur consideree if(NRENF00.gt.0) then c print*,'dans nfin3d' c boucle sur le nombre de renforts do i=1,NRENF00 c taille a considerer dans la direction du renfort c recup direction du renfort do j=1,3 dir3(j)=vecr(i,j) end do if(ppas) then c calcul de la taille de l element ds la direction du renfort c toujours calculé avec la vrai taille de l element call tail1d(longr(i),dir3,.true.,XE3D,NBNMAX3D,NBNB3D, # IDIMB3D,.false.,1.d0,err1) if(err1.eq.1) then print*,'Pb lors du calcul de la taille dans nfin3d' return end if c on sauve la taille c print*,'renfort',i,longr(i) lcr(i)=longr(i) else c la taille dans la direction du renfort est chargée longr(i)=lcr(i) end if c longueur d ancrage droit if(( deqr(i).ne.0.).and.( rhor(i).ne.0.)) then c print*,'rhor',i,'=',rhor(i) c longueur d ancrage lsr(i)=0.5d0*deqr(i)*syr(i)/taur(i) c inter espace max des fissures en regime elastique lfr(i)=0.5d0*deqr(i)*((1.d0-rhor(i))/rhor(i))* # (rt00/taur(i)) c print*, lfr(i) c print*, '------------' else lsr(i)=longr(i) lfr(i)=longr(i) end if c print*,'lsr(',i,')=',lsr(i) c print*,'lfr(',i,')=',lfr(i) c print*,'-------------------' c energie de fissuration et nombre de fissures localisees c en regime etabli c projection de la matrice du nombre de fissures dans la direction ei do j=1,3 c vecteur nbre de fissure nc3(j)=0.d0 do k=1,3 nc3(j)=nc3(j)+nc33(j,k)*dir3(k) end do end do c scalaire nbre de fissure (par projection du vecteur) nfis0=0.d0 do j=1,3 nfis0=nfis0+nc3(j)*dir3(j) end do c evaluation nbre maxi de fissures dans cette direction if(rhor(i).eq.0.) then nfis1=1.d0 else if((lsr(i).ne.0.).and.(lfr(i).ne.0.)) then nfis1=max(1.d0,longr(i)/lsr(i),longr(i)/lfr(i)) else c print*,'Distance entre fissures non calculable nfin3d' c print*,'Ancrage lsr(',i,')=',lsr(i) c print*,'Regime Elastique lfr(',i,')=',lfr(i) c print*,'On adopte 1 fissure par element' nfis1=1.d0 end if end if c actualisation du tenseur des nombres de fissure si necessaire if(nfis1.gt.nfis0) then dnfis=nfis1-nfis0 do j=1,3 do k=1,3 nc33(j,k)=nc33(j,k)+dnfis*dir3(j)*dir3(k) end do end do end if c controle longueur des elements if(longr(i).eq.0.) then if(rhor(i).ne.0.) then print*,'nfin3d : reinf nb:',i print*,'long r:',longr(i),'ls r:',lsr(i),'lf r:',lfr(i) print*,'lcr(',i,')=',lcr(i),'ppas',ppas err1=1 end if end if end do end if c print*,'dans nfin3d matrice des nbr de fiss ' c print*,'nbre fiss nc33' c call afic33(nc33) return end
© Cast3M 2003 - Tous droits réservés.
Mentions légales