issgra
C ISSGRA SOURCE PV 17/12/08 21:17:29 9660
C
C
C______________________________________________________________________
C
C MODELE ISSGRA
C______________________________________________________________________
C
IMPLICIT INTEGER(I-N)
IMPLICIT REAL*8(A-H,O-Z)
c inutile?
-INC PPARAM
-INC CCOPTIO
-INC CCREEL
-INC DECHE
*
C GLOBAL MODEL
DIMENSION XMKel(5,5)
C DIMENSION XMCel(5,5)
DIMENSION uo(5), duo(5), Fo(5)
*
DIMENSION upl(5), uel(5)
DIMENSION uoi(5), duoi(5), dueli(5), force_preci(5)
C DIMENSION ueli(5)
C Modèle de Plasticité
DIMENSION ddlambda(2), yield(2)
DIMENSION Ho(2,2), H(2,2), Hinv(2,2)
DIMENSION duP(5)
*
C Modèle de plasticité 1
DIMENSION q1(5), upl1(5)
C DIMENSION q1_prec(5)
DIMENSION Gradgs(5),Gradfs(5),Gradfq(5)
DIMENSION hh1(5), XKGradgs(5)
*
C Modèle de plasticité vertical
DIMENSION upl2(5), Gradf2s(5), XKGradf2s(5)
*
C Modèle de Décollement
DIMENSION dforce(5), forcepred(5), force_prec(5), duel(5)
*
C Amortissment
DIMENSION upl_preci(5),q1_preci(5)
*
DIMENSION da(20)
C DIMENSION TIME(2)
*
C-----------------------------------------------------------------------
C-----------------------------------------------------------------------
C Affectation des données du modèle
da(1) =XMAT(13)
da(2) =XMAT(14)
da(3) =XMAT(15)
da(4) =XMAT(7)
da(5) =XMAT(8)
da(6) =XMAT(12)
da(7) =XMAT(11)
da(20)=XMAT(10)
da(8) =XMAT(16)
da(9) =XMAT(17)
da(10)=XMAT(18)
da(11)=XMAT(19)
da(12)=XMAT(20)
da(13)=XMAT(21)
da(14)=XMAT(22)
da(15)=XMAT(23)
da(16)=XMAT(24)
da(17)=XMAT(25)
da(18)=XMAT(26)
da(19)=XMAT(27)
*
Diam=da(1)
XLx=da(2)
XLy=da(3)
XKelz=da(4)
XKelh=da(5)
XKelry=da(6)
XKelrx=da(7)
C a=da(8)
C b=da(9)
C c=da(10)
C d=da(11)
C e=da(12)
C f=da(13)
qmax=da(14)
a9=da(15)
C a6=da(16)
eta3=da(17)
dtime=da(18)
a8=da(19)
XKelt=da(20)
*
*
upl1(1)=VAR0(2)
upl1(2)=VAR0(3)
upl1(3)=VAR0(4)
upl1(4)=VAR0(5)
upl1(5)=VAR0(6)
q1(1)=VAR0(7)
q1(2)=VAR0(8)
q1(3)=VAR0(9)
q1(4)=VAR0(10)
q1(5)=VAR0(11)
force_prec(1)=-SIG0(1)
force_prec(2)=-SIG0(2)
force_prec(3)=SIG0(6)
force_prec(4)=SIG0(3)
force_prec(5)=-SIG0(5)
delta_prec=VAR0(12)
Xkapa_prec=VAR0(13)
Xksi_prec=VAR0(14)
distmin_prec=VAR0(15)
upl2(1)=VAR0(17)
upl2(2)=VAR0(18)
upl2(3)=VAR0(19)
upl2(4)=VAR0(20)
upl2(5)=VAR0(21)
q2=VAR0(22)
DO I=1,5
upl(I)=upl1(I)+upl2(I)
ENDDO
*
*deplx joint --> -deplz ISS
uo(1)=-epst0(1)
*deply joint --> -deplx ISS
uo(2)=-epst0(2)
*rotz joint --> -roty ISS
uo(3)=-epst0(6)
*deplz joint --> deply ISS
uo(4)=epst0(3)
*roty joint --> -rotx ISS
uo(5)=-epst0(5)
*
duo(1)=-DEPST(1)
duo(2)=-DEPST(2)
duo(3)=-DEPST(6)
duo(4)=DEPST(3)
duo(5)=-DEPST(5)
C Correction données d'entrées Castem
DO I=1,5
uo(I)=uo(I)+duo(I)
* epstf(I) = epst0(I)+DEPST(I)
ENDDO
*
C on adimensionne les déplacements
if (a9.eq.2) then
DO I=1,5
uo(I) = uo(I)*sqrt(XLx**2+XLy**2)/(XLx*XLy)
ENDDO
uo(3) = uo(3)*XLx
uo(5) = uo(5)*XLy
DO I=1,5
duo(I) = duo(I)*sqrt(XLx**2+XLy**2)/(XLx*XLy)
ENDDO
duo(3)= duo(3)*XLx
duo(5)= duo(5)*XLy
else
DO I=1,5
uo(I) = uo(I)/Diam
ENDDO
uo(3) = uo(3)*Diam
uo(5) = uo(5)*Diam
DO I=1,5
duo(I) = duo(I)/Diam
ENDDO
duo(3)= duo(3)*Diam
duo(5)= duo(5)*Diam
endif
*
C Adimensionnement des efforts
if (a9.eq.1) then
C semelle filante
DO I=1,5
force_prec(I)=force_prec(I)/(Diam*qmax)
ENDDO
force_prec(3)=force_prec(3)/Diam
force_prec(5)=force_prec(5)/Diam
else
if (a9.eq.2) then
C semelle rectangulaire
DO I=1,5
force_prec(I)=force_prec(I)/(XLx*XLy*qmax)
ENDDO
force_prec(3)=force_prec(3)/XLx
force_prec(5)=force_prec(5)/XLy
else
C semelle circulaire
DO I=1,5
force_prec(I)=force_prec(I)/(XPI*Diam**2/4*qmax)
ENDDO
force_prec(3)=force_prec(3)/Diam
force_prec(5)=force_prec(5)/Diam
endif
endif
C ***********************************************************************
C Macro-élément d'ISS
C adimensionnement de la matrice de rigidité élastique suivant la forme de la fondation (paramètre a9)
do i=1,5
do j=1,5
XMK(i,j)=XMKel(i,j)
enddo
enddo
C Calcul de l'effort de prédiction élastique en considérant le décollement élastique non-linéaire.
duP(1)=0
duP(2)=0
duP(3)=0
duP(4)=0
duP(5)=0
C Réduction du pas de calcul
dtimei=dtime/10.
DO I=1,5
duoi(I)=1./10.*duo(I)
force_preci(I)=force_prec(I)
ENDDO
delta_preci=delta_prec
Xkapa_preci=Xkapa_prec
Xksi_preci=Xksi_prec
distmin_preci=distmin_prec
do k=1,10
q2_preci=q2
*
Xkapa_k=Xkapa_preci
Xksi_k=Xksi_preci
DO I=1,5
q1_preci(I)=q1(I)
upl_preci(I)=upl(I)
uoi(I)=uo(I)-(10.-k)*duoi(I)
uel(I)=uoi(I)-upl(I)
duel(I)=duoi(I)-duP(I)
ENDDO
*si a8=1 on désactive le décollement
if (a8.eq.1) then
delta=delta_prec
deltamax=1
else
DO I=1,5
ENDDO
& delta_preci, Ftr, delta, deltamax)
endif
C Calcul des fonctions de charge au point de charge élastique
DO I=1,5
ENDDO
C Boucle de plasticité (Return Mapping)
epsilon=1E-9
if ((yield1.le.epsilon) .and. (yield2.le.epsilon)) then
DO I=1,5
ENDDO
Xkapa=Xkapa_k
Xksi=Xksi_k
distmin=distmin_preci
else
m=0
do while ((yield1.gt.epsilon) .or. (yield2.gt.epsilon))
m=m+1
IF (m.gt.1000) THEN
KERRE = 22
RETURN
ENDIF
KERRE = 23
RETURN
ENDIF
& Xksi_k, Xkapa_preci, Xksi_preci, Gradgs, Xkapa, Xksi)
& Gradgs,distmin_preci,hh1,distmin)
H2=Gradf2q*hh2
H(1,1)=Ho11+H1
H(1,2)=Ho12
H(2,1)=Ho21
H(2,2)=Ho22+H2
yield(1)=yield1
yield(2)=yield2
*initialisation de ces variables necessaire pour les tests sur les mécanismes
ddlambda(1)=1
ddlambda(2)=1
if ((yield(1).gt.epsilon).
& and.(yield(2).gt.epsilon)) then
ddlambda1=ddlambda(1)
ddlambda2=ddlambda(2)
endif
C Tests sur les mécanismes
if ((yield(1).le.epsilon).or.(ddlambda(1).le.0)) then
ddlambda1=0
ddlambda2=yield2/H(2,2)
if (ddlambda2.le.0) then
ddlambda2=0
endif
endif
if ((yield(2).le.epsilon).or.(ddlambda(2).le.0)) then
ddlambda2=0
ddlambda1=yield1/H(1,1)
if (ddlambda1.le.0) then
ddlambda1=0
endif
endif
ddlambda(1)=ddlambda1
ddlambda(2)=ddlambda2
q2=q2-ddlambda(2)*hh2
DO I=1,5
q1(I)=q1(I)-ddlambda(1)*hh1(I)
upl1(I)=upl1(I)+ddlambda(1)*Gradgs(I)
upl2(I)=upl2(I)+ddlambda(2)*Gradf2s(I)
upl(I) =upl1(I)+upl2(I)
*
uel(I)=uoi(I)-upl(I)
duP(I)=upl(I)-upl_preci(I)
duel(I)=duoi(I)-duP(I)
ENDDO
*si a8=1 on désactive le décollement
if (a8.eq.1) then
delta=delta_prec
else
DO I=1,5
forcepred(I)=force_preci(I)+dforce(I)
ENDDO
*forcepred et delta_prec sont là pour une initialisation à la boucle de Newton
endif
Xkapa_k=Xkapa
Xksi_k=Xksi
enddo
endif
*
C Correction visqueuse
* calcul de la norme de la force dans l'hyperplan (pour voir si on est dans la phase de chargement statique poids propre)
if (dtime.ne.0) then
if ((eta3.ne.0) .and. (Xnorm_f25.gt.0.001)) then
DO I=1,5
upl(I) = (upl_preci(I)+dtime/eta3*upl(I))/(1+dtime/eta3)
q1(I) = (q1_preci(I)+dtime/eta3*q1(I))/(1+dtime/eta3)
ENDDO
q2 = (q2_preci+dtime/eta3*q2)/(1+dtime/eta3)
endif
endif
*
KERRE = 25
RETURN
ENDIF
delta_preci=delta
DO I=1,5
ENDDO
Xkapa_preci=Xkapa
Xksi_preci=Xksi
distmin_preci=distmin
*
enddo
*
EPSE=sqrt(EPSE)
*
VARF(1)=EPSE
VARF(2)=upl1(1)
VARF(3)=upl1(2)
VARF(4)=upl1(3)
VARF(5)=upl1(4)
VARF(6)=upl1(5)
VARF(7)=q1(1)
VARF(8)=q1(2)
VARF(9)=q1(3)
VARF(10)=q1(4)
VARF(11)=q1(5)
VARF(12)=delta
VARF(13)=Xkapa
VARF(14)=Xksi
VARF(15)=distmin
*deltamax ne sert pas, on la garde juste pour la tracer (provisoire)
VARF(16)=deltamax
VARF(17)=upl2(1)
VARF(18)=upl2(2)
VARF(19)=upl2(3)
VARF(20)=upl2(4)
VARF(21)=upl2(5)
VARF(22)=q2
C Redimensionnement des variables
if (a9.eq.1) then
C semelle filante
DO I=1,5
ENDDO
else
if (a9.eq.2) then
C semelle rectangulaire
DO I=1,5
ENDDO
else
C semelle circulaire
DO I=1,5
ENDDO
endif
endif
*
do i=1,5
do j=1,5
XMK(i,j)=XMKel(i,j)
enddo
enddo
*
*Fz ISS --> -Fx joint
*Fx ISS --> -Fy joint
*Fy ISS --> Fz joint
*Mz ISS --> -Mx joint (torsion linéaire)
SIGF(4)=-XKelt*epst0(4)
*Mx ISS --> -My joint
*My ISS --> Mz joint
*
return
end
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales