chabok
C CHABOK SOURCE CHAT 05/01/12 21:53:52 5004
1 XMAT,ALPHA1,JA,IBOU,SI,DEPS,EPST,EPSTAR,AMTRI,KERRE,
2 SN,ALPHA2,NUMCHA,ecou,necou)
C***********************************************************************
C INTEGRATION MODELE DE CHABOCHE
C***********************************************************************
IMPLICIT INTEGER(I-N)
IMPLICIT REAL *8(A-H,O-Z)
DIMENSION XMAT(*),EI(*),ALPHA1(*),ALPHA2(*)
DIMENSION AMTRI(*),YK5(18),DYK1(18),DYK2(18),DYK3(18),
. DYK4(18),EINT(6),W1INT(6),W2INT(6)
C
* Commun ECOU: sert de fourre-tout pour les tableaux
*
SEGMENT ECOU
*** COMMON/ECOU/TEST,ALFAH,
2 CVNMSD(12),STOT(6),SIGEL(6),DSIGP(6),SIGT(6),W1(6),W2(6),
1 DALPHA(6),DSIGO(6),E(12),XINV(3),
2 SIPLAD(6),DSIGP0(6),TET,TETI
ENDSEGMENT
C COMMON/ECOU/TEST,ALFAH,
C 1 HPAS,TEMPS,COVNMS(6),VECPRO(9),VALPRO(6),
C 2 CVNMSD(12),STOT(6),SIGEL(6),DSIGP(6),SIGT(6),W1(6),W2(6),
C 1 DALPHA(6),DSIGO(6),E(12),XINV(3),
C 2 SIPLAD(6),DSIGP0(6),TET,TETI
C
*
* Commun NECOU utilisé dans ECOINC
*
SEGMENT NECOU
* COMMON/NECOU/NCOURB,IPLAST,IT,IMAPLA,ISOTRO,
INTEGER NCOURB,IPLAST,IT,IMAPLA,ISOTRO,
. ITYP,IFOUR,IFLUAG,
. ICINE,ITHER,IFLUPL,ICYCL,IBI,
. JFLUAG,KFLUAG,LFLUAG,
. IRELAX,JNTRIN,MFLUAG,JSOUFL,JGRDEF
ENDSEGMENT
C COMMON/NECOU/NCOURB,IPLAST,IT,IMAPLA,ISOTRO,
C . ITYP,IFOUR,IFLUAG,
C . ICINE,ITHER,IFLUPL,ICYCL,IBI,
C . JFLUAG,KFLUAG,LFLUAG,
C . IRELAX,JNTRIN,MFLUAG,JSOUFL,JGRDEF
C
C EN SORTIE
C KERRE = 2 SI ON ATTEINT LE NOMBRE MAX D'ITERATIONS INTERNES
C
DATA ITMAX/15/
DATA IDECOU/20/
DATA RAC2/0.707106781D00/
PREDEF=1.D-6
PRESIG=YUNG*PREDEF
PREPH=1.D-3
PRERUN=TEST
PREMIN=3.D-1*PRERUN
C
C INITIALISATION A 0. DES VECTEURS POUR TREANOR
C
NVY=18
DO 3341 IB=1,NVY
YK5(IB)=0.
DYK1(IB)=0.
DYK2(IB)=0.
DYK3(IB)=0.
DYK4(IB)=0.
3341 CONTINUE
A2=0.
B=0.
RM=0.
PHI=1.D00
ICOD=0
. PHI,PSI,OME,ICENT2,IDIAM,NUMCHA)
ELT=YUNG/(1.+XNU)
IF(ITHER.NE.0) ELT=ELT*EI(IA)/YUNG
G=ELT*0.5
AC1=SAC1*0.66666667
AC2=SAC2*0.66666667
SAC12=SAC1+SAC2
AC12=AC1+AC2
GO TO (101,102,102,103,105,102,103,103,109,999,
. 999,999,102,101),ITYP
101 E(7)=ELT*(1.-XNU)/(1.-2.*XNU)
E(8)=ELT*XNU/(1.-2.*XNU)
E(9)=AC12
E(10)=AC1
E(11)=AC2
GO TO 200
102 E(7)=ELT/(1.-XNU)
E(8)=E(7)*XNU
E(9)=SAC12
E(10)=SAC1
E(11)=SAC2
GO TO 200
103 E(7)=ELT*(1.+XNU)
E(8)=0.
E(9)=SAC12
E(10)=SAC1
E(11)=SAC2
GO TO 200
105 CONTINUE
109 CONTINUE
C
C INITIALISATIONS
C
200 ITER=0
.W1,W2,E,IBOU,ICENT2,JA,ALPHA1,ALPHA2,PHI,PSI,OME)
C
C PREMIER DEPS
C
ICAS=1
. DEPS,R0,RM,B,ICAS,WEP,EINT,W1INT,W2INT,PSI,OME,ecou)
670 DEPS0=DEPS
DEPSI=DEPS
IF(ITER.EQ.0) GO TO 666
. W1,W2,E,IBOU,ICENT2,JA,ALPHA1,ALPHA2,PHI,PSI,OME)
666 CONTINUE
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C ITERATIONS INTERNES
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
555 ITER=ITER+1
C
C CALCUL PAR LA METHODE DE TREANOR
C
DO 413 IB=1,IBOU
EINT(IB)=E(IB)
W1INT(IB)=W1(IB)
IF(ICENT2.EQ.0) GO TO 413
W2INT(IB)=W2(IB)
413 CONTINUE
SINT=SI
DEDEP=0.
HDEP=DEPSI
IF(ITER.EQ.1) HDEP0=HDEP
EPSINT=EPST
C-----------------------------------------------------------------------
C BOUCLE SUR LES SOUS-PAS
C-----------------------------------------------------------------------
DO 416 IDECO=1,IDECOU
JESSAY=0
DEPRES=DEPSI-DEDEP
IF(ABS(HDEP).GT.ABS(DEPRES)) HDEP=DEPRES
IF(IDECO.EQ.1) GO TO 417
C
424 CONTINUE
JESSAY=JESSAY+1
DO 418 IB=1,IBOU
E(IB)=EINT(IB)
W1(IB)=W1INT(IB)
IF(ICENT2.EQ.0) GO TO 418
W2(IB)=W2INT(IB)
418 CONTINUE
SI=SINT
417 ICAS=2
WEP=0.5D00
. R0,RM,B,ICAS,WEP,EINT,W1INT,W2INT,PSI,OME,ecou)
C
EPST=EPSINT+0.5D00*HDEP
. R0,RM,B,ICAS,WEP,EINT,W1INT,W2INT,PSI,OME,ecou)
C
WEP=1.D00
. R0,RM,B,ICAS,WEP,EINT,W1INT,W2INT,PSI,OME,ecou)
C
PHMAX=0.
DO 4101 IB=1,NVY
IF(ABS(DYK2(IB)-DYK1(IB)).LT.PRESIG) GO TO 4101
PH=2.*(DYK2(IB)-DYK3(IB))/(DYK2(IB)-DYK1(IB))
IF(PHMAX.LT.PH) PHMAX=PH
4101 CONTINUE
IF(PHMAX.LE.0.) GO TO 4102
IF(PHMAX.GE.PREPH) GO TO 4123
XL1=1.-PHMAX*0.5
XL2=0.5-PHMAX*0.166666666666666667
XL3=0.166666666666666667-PHMAX*0.04166666666666666667
XL4=-PHMAX*0.166666666666666667
GO TO 4103
4123 CONTINUE
XL1=(1.-EXP(-PHMAX))/PHMAX
XL2=(1.-XL1)/PHMAX
XL3=(0.5-XL2)/PHMAX
XL4=XL1-2.*XL2
GO TO 4103
4102 PHMAX=0.
XL1=1.
XL2=0.5
XL3=0.166666666666666667
XL4=0.
4103 CONTINUE
XM1=-XL2+4.*XL3
XM2=2.*(XL2-2.*XL3)
XM3=4.*XL3-3.*XL2
C
C NOUVELLE ESTIMATION DE LA SOLUTION
C
DO 4104 IB=1,IBOU
E(IB)=EINT(IB)+2.*XL2*DYK3(IB)+XL2*PHMAX*DYK2(IB)+XL4*DYK1(IB)
YK5(IB)=E(IB)
W1(IB)=W1INT(IB)+2.*XL2*DYK3(6+IB)
. +XL2*PHMAX*DYK2(6+IB)+XL4*DYK1(6+IB)
YK5(6+IB)=W1(IB)
IF(ICENT2.EQ.0) GO TO 4104
W2(IB)=W2INT(IB)+2.*XL2*DYK3(12+IB)
. +XL2*PHMAX*DYK2(12+IB)+XL4*DYK1(12+IB)
YK5(12+IB)=W2(IB)
4104 CONTINUE
C
EPST=EPSINT+HDEP
WEP=1.D00
. R0,RM,B,ICAS,WEP,EINT,W1INT,W2INT,PSI,OME,ecou)
C
C ESTIMATION FINALE DE LA SOLUTION
C
FAC1=1.+PHMAX*XM3+2.*PHMAX*XM2
FAC2=XL1+XM3+0.5*XM2*PHMAX
FAC3=XM2*(1.+0.5*PHMAX)
DO 4105 IB=1,IBOU
E(IB)=EINT(IB)*FAC1+DYK1(IB)*FAC2+DYK2(IB)*FAC3
. +DYK3(IB)*XM2+DYK4(IB)*XM1+YK5(IB)*XM1*PHMAX
SIGT(IB)=E(IB)
W1(IB)=W1INT(IB)*FAC1+DYK1(6+IB)*FAC2
. +DYK2(6+IB)*FAC3 +DYK3(6+IB)*XM2 +DYK4(6+IB)*XM1
. +YK5(6+IB)*XM1*PHMAX
IF(ICENT2.EQ.0) GO TO 4105
W2(IB)= W2INT(IB)*FAC1 +DYK1(12+IB)*FAC2
. +DYK2(12+IB)*FAC3 +DYK3(12+IB)*XM2 +DYK4(12+IB)*XM1
. +YK5(12+IB)*XM1*PHMAX
4105 CONTINUE
C
C CALCUL DE L'ERREUR
C
ERMAX=0.
DO 4106 IB=1,IBOU
ERM=ABS(SIGT(IB)-YK5(IB))/MAX(PRESIG,
. ABS(SIGT(IB)-EINT(IB)))
IF(ERMAX.LT.ERM) ERMAX=ERM
ERM=ABS(W1(IB)-YK5(6+IB))/MAX(PRESIG,
. ABS(W1(IB)-W1INT(IB)))
IF(ERMAX.LT.ERM) ERMAX=ERM
IF(ICENT2.EQ.0) GO TO 4106
ERM=ABS(W2(IB)-YK5(12+IB))/MAX(PRESIG,
. ABS(W2(IB)- W2INT(IB)))
IF(ERMAX.LT.ERM) ERMAX=ERM
4106 CONTINUE
C
IF(ERMAX.LE.PRERUN) GO TO 1240
C-----------------------------------------------------------------------
C POUR ITER >1 ET IDECO=1 , ON REPREND LE HDEP0 SI ON N'A PAS REUSSI
C A INTEGRER TOUT LE DEPSI EN UN SEUL SOUS-PAS
C-----------------------------------------------------------------------
HDEP=HDEP*0.5D00
IF(JESSAY.GT.1) GO TO 424
IF(IDECO.EQ.1.AND.ITER.GT.1.AND.ABS(HDEP).GT.ABS(HDEP0))
. HDEP=HDEP0
GO TO 424
1240 DEDEP=DEDEP+HDEP
C-----------------------------------------------------------------------
C SI ON A FINI , ON SORT EN 514 . SINON ON CONTINUE
C-----------------------------------------------------------------------
IF(ABS(DEDEP).GE.ABS(DEPSI)) GO TO 514
IF(ERMAX.LE.PREMIN) HDEP=2.D00*HDEP
EPSINT=EPST
SINT=SI
DO 502 IB=1,IBOU
EINT(IB)=SIGT(IB)
W1INT(IB)=W1(IB)
IF(ICENT2.EQ.0) GO TO 502
W2INT(IB)=W2(IB)
502 CONTINUE
C.......................................................................
C FIN DE LA BOUCLE IDECO
C.......................................................................
416 CONTINUE
C
C ON CONTINUE AVEC UN DEPS DIMINUE
C
DEPS=DEPS-DEPSI+DEDEP
C-----------------------------------------------------------------------
C FIN DE TREANOR
C-----------------------------------------------------------------------
514 CONTINUE
HDEP0=HDEP
IF(ITER.GE.ITMAX) GO TO 56
C
C CALCUL DE LA PENTE ET DU DEPSI
C
ICAS=3
WEP=0.0D00
. R0,RM,B,ICAS,WEP,E,W1,W2,PSI,OME,ecou)
DEPSI=(SI-R)/WEP
DEPS=DEPS+DEPSI
IF(DEPS.LT.0.) GO TO 54
GO TO 555
C
54 DEPS=0.5D00*DEPS0
GO TO 670
C
56 KERRE=2
57 JX=JA
DO 301 I=1,IBOU
SIGEL(I)=SIGT(I)
DALPHA(I)=W1(I)-ALPHA1(JX)
IF(ICENT2.EQ.0) GO TO 301
DALPHA(I)=DALPHA(I)+W2(I)
301 JX=JX+1
C
C LES DEUX CENTRES SONT CUMULES DANS ALPHA1
C
SN=R
C
C MISE A JOUR DES CENTRES DES SPHERES
C
JX=JA
DO 303 I=1,IBOU
ALPHA1(JX)=W1(I)
IF(ICENT2.EQ.0) GO TO 303
ALPHA1(JX)=ALPHA1(JX)+W2(I)
ALPHA2(JX)=W2(I)
303 JX=JX+1
RETURN
999 WRITE(6,7999)
7999 FORMAT('0 CHABOK - CAS NON IMPLEMENTE '/)
RETURN
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales