cosi
C COSI SOURCE OF166741 25/02/20 21:15:43 12165
*$$$$ COSI
C COSI SOURCE ISPRA 90/06/12
SUBROUTINE COSI
IMPLICIT INTEGER(I-N)
IMPLICIT REAL*8(A-H,O-Z)
C=======================================================================
C OPERATEUR COSI
C
C A2*EVOLUTION = COSI A1*EVOLUTION (METH*MOT)
C
C=======================================================================
C PROGRAMMEUR : P.P.
C=======================================================================
C
CHARACTER *72 TI
CHARACTER*12 MOTX,MOTY
C
PARAMETER (NMOCLE=2)
CHARACTER*4 MOTCLE(NMOCLE)
C
-INC PPARAM
-INC CCOPTIO
-INC SMEVOLL
-INC SMLREEL
C
POINTEUR IACCE1.MLREEL,ITEMP1.MLREEL,IACCE2.MLREEL,ITEMP2.MLREEL
POINTEUR JACCE1.MEVOLL,JACCE2.MEVOLL
POINTEUR KACCE1.KEVOLL,KACCE2.KEVOLL
SEGMENT, MTRAV
IMPLIED AI(NPT),BI(NPT),GI(NPT)
ENDSEGMENT
C
DIMENSION A(3,3),B(3)
C
C 1) LECTURE DES DONNEES GIBIANE
C
C 1.1) LISTE DES MOTS CLEF
C
DATA MOTCLE/'SIMP','LINE'/
C
C
C 1.2) DEFAUTS
C
IMETH=1
C
C 1.3) LECTURE DE L'OBJET EVOLUTIO CONTENANT L'ACCELERATION
C
IF(IRET.EQ.0) GOTO 666
C
C 1.4) LECTURE DU MOT-CLEF
C (OPTIONEL)
C
C
IF(IVAL.NE.0)THEN
IMETH=IVAL
ENDIF
C
C
C 2) VERIFICATION DES DONNEES
C
C 2.1) MEME ABSCISSE
C
SEGACT, JACCE1
N=JACCE1.IEVOLL(/1)
DO 10 IE1=1,N
KACCE1=JACCE1.IEVOLL(IE1)
SEGACT, KACCE1
ITEMP=KACCE1.IPROGX
SEGDES, KACCE1
IF(IE1.EQ.1)THEN
ITEMP1=ITEMP
ELSE
IF(ITEMP.NE.ITEMP1)THEN
SEGDES, JACCE1
GOTO 666
ENDIF
ENDIF
10 CONTINUE
C
C 2.2) REPARTITION HOMOGENE DES DT
C
SEGACT, ITEMP1
SEGDES, ITEMP1
IF(ABS(DT1-DT)/DT.GT.1.D-5)THEN
SEGDES, JACCE1
GOTO 666
ENDIF
C
C 3) DUPLICATION DES TEMPS ET INITIALISATIONS DIVERSES
C
SEGINI, ITEMP2=ITEMP1
SEGDES, ITEMP2
C
TI=JACCE1.IEVTEX
SEGINI, JACCE2
JACCE2.IEVTEX='Correction de:'//TI(1:58)
C
SEGINI, MTRAV
C
C
C 4) LOOP DE CALCUL
C
DO 100 IE1=1,N
C
C 4.1) INITIALISATION ET DUPLICATION DES DONNEES
C
C
KACCE1=JACCE1.IEVOLL(IE1)
SEGINI, KACCE2=KACCE1
C
KACCE2.IPROGX=ITEMP2
C
IACCE1=KACCE2.IPROGY
SEGINI, IACCE2=IACCE1
KACCE2.IPROGY=IACCE2
C
SEGDES, KACCE2
JACCE2.IEVOLL(IE1)=KACCE2
C
C
C 4.2) CALCUL DE ALPHA(I), BETA(I) ET GAMMA(I)
C
C 4.2.1) METHODE SIMPLIFIEE
C
IF(IMETH.EQ.1)THEN
AI(1)=DT/2
BI(1)=(2*(NPT-2)+1)*DT*DT/4
DO 20 IE2=2,NPT-1
AI(IE2)=DT
BI(IE2)=(NPT-IE2)*DT*DT
20 CONTINUE
AI(NPT)=DT/2
BI(NPT)=DT*DT/4
C
GI(1)=0.D0
DO 21 IE2=2,NPT
GI(1)=GI(1)+BI(IE2)*DT/2
21 CONTINUE
DO 22 IE2=2,NPT-1
GI(IE2)=BI(IE2)*DT/2
DO 22 IE3=IE2+1,NPT
GI(IE2)=GI(IE2)+BI(IE3)*DT
22 CONTINUE
GI(NPT)=BI(NPT)*DT/2
ENDIF
C
C 4.2.2) METHODE LINEAIRE
C
IF(IMETH.EQ.2)THEN
AI(1)=DT/2
BI(1)=(3*(NPT-2)+2)*DT*DT/6
DO 25 IE2=2,NPT-1
AI(IE2)=DT
BI(IE2)=(NPT-IE2)*DT*DT
25 CONTINUE
AI(NPT)=DT/2
BI(NPT)=DT*DT/6
C
GI(1)=(2*(NPT-2)+1)*DT*DT*DT/24
DO 26 IE2=2,NPT
GI(1)=GI(1)+BI(IE2)*DT/2
26 CONTINUE
DO 27 IE2=2,NPT-1
GI(IE2)=BI(IE2)*DT/2-DT*DT*DT/12
DO 27 IE3=IE2+1,NPT
GI(IE2)=GI(IE2)+BI(IE3)*DT
27 CONTINUE
GI(NPT)=BI(NPT)*DT/4
ENDIF
C
C 4.3) CALCUL DE A ET B
C
DO 30 IE2=1,3
B(IE2)=0.D0
DO 30 IE3=1,3
A(IE3,IE2)=0.D0
30 CONTINUE
DO 31 IE2=1,NPT
A(1,1)=A(1,1)+AI(IE2)**2
A(1,2)=A(1,2)+AI(IE2)*BI(IE2)
A(1,3)=A(1,3)+AI(IE2)*GI(IE2)
A(2,2)=A(2,2)+BI(IE2)**2
A(2,3)=A(2,3)+BI(IE2)*GI(IE2)
A(3,3)=A(3,3)+GI(IE2)**2
31 CONTINUE
A(2,1)=A(1,2)
A(3,1)=A(1,3)
A(3,2)=A(2,3)
C
C 4.4) RESOLUTION DE A*X=B
C
> -A(2,1)*(A(1,2)*A(3,3)-A(3,2)*A(1,3))
> +A(3,1)*(A(1,2)*A(2,3)-A(2,2)*A(1,3))
XAM1= B(1)*(A(2,2)*A(3,3)-A(3,2)*A(2,3))
> -B(2)*(A(1,2)*A(3,3)-A(3,2)*A(1,3))
> +B(3)*(A(1,2)*A(2,3)-A(2,2)*A(1,3))
XAM2=-B(1)*(A(2,1)*A(3,3)-A(3,1)*A(2,3))
> +B(2)*(A(1,1)*A(3,3)-A(3,1)*A(1,3))
> -B(3)*(A(1,1)*A(2,3)-A(2,1)*A(1,3))
XAM3= B(1)*(A(2,1)*A(3,2)-A(3,1)*A(2,2))
> -B(2)*(A(1,1)*A(3,2)-A(3,1)*A(1,2))
> +B(3)*(A(1,1)*A(2,2)-A(2,1)*A(1,2))
C
C 4.5) CORRECTION DE L'ACCELERATION
C
DO 40 IE2=1,NPT
> -XAM1*AI(IE2)-XAM2*BI(IE2)-XAM3*GI(IE2)
40 CONTINUE
C
C 4.6) FIN ACTIVATION
C
SEGDES, IACCE2
C
100 CONTINUE
C
C
C
SEGSUP, MTRAV
SEGDES, JACCE1
SEGDES, JACCE2
C
C 5) RETOUR A GIBIANE
C
C
C
666 CONTINUE
RETURN
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales