1 line
No EOL
2.7 KiB
C++
1 line
No EOL
2.7 KiB
C++
void REDUCT (MatBand & TRAID,int LB,int NDDL,Vecteur& CC)
|
|
//C ======================================================================
|
|
//C reduction de la matrice de raideur avant resolution
|
|
//c $
|
|
//C ======================================================================
|
|
|
|
// REAL*8 TRAID(LB,*)
|
|
// DIMENSION CC(NDDL)
|
|
|
|
{ int I,NI,JJ,KK;
|
|
|
|
TRAID(LB,1)=1.D0/TRAID(LB,1);
|
|
for ( NI=2; NI<=NDDL ;NI++)
|
|
{if (NI <= LB)
|
|
{CC(1)=TRAID(LB-NI+1,NI);
|
|
if (NI> 2)
|
|
{ for (JJ=2; JJ<=NI-1; JJ++)
|
|
{ C=TRAID(LB-NI+JJ,NI);
|
|
for (KK=1; KK<= JJ-1; KK++)
|
|
C=C-CC(KK)*TRAID(LB-JJ+KK,JJ);
|
|
CC(JJ)=C;
|
|
}
|
|
}
|
|
I=1;
|
|
for (JJ=LB-NI+1;JJ<=LB-1; JJ++)
|
|
{ TRAID(JJ,NI)=CC(I)*TRAID(LB,I);
|
|
I=I+1;
|
|
}
|
|
D=TRAID(LB,NI);
|
|
for(KK=1;KK<=NI-1;KK++)
|
|
D=D-CC(KK)*TRAID(LB-NI+KK,NI);
|
|
}
|
|
else
|
|
{
|
|
CC(1)=TRAID(1,NI);
|
|
for (JJ=2;JJ<=LB-1;JJ++)
|
|
{ C=TRAID(JJ,NI);
|
|
for (KK=1;KK<=JJ-1;KK++)
|
|
C=C-CC(KK)*TRAID(KK+LB-JJ,NI-LB+JJ);
|
|
CC(JJ)=C;
|
|
}
|
|
I=1;
|
|
for (JJ=1;JJ<=LB-1;JJ++)
|
|
{ TRAID(JJ,NI)=CC(I)*TRAID(LB,NI-LB+JJ);
|
|
I=I+1;
|
|
}
|
|
D=TRAID(LB,NI);
|
|
for (KK=1;KK<=LB-1;KK++)
|
|
D=D-CC(KK)*TRAID(KK,NI);
|
|
}
|
|
TRAID(LB,NI)=1.D0/D;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// **********************************************************************
|
|
void RESOLT(MatBand & TRAID,Vecteur & TSM,int NDDL,int LB)
|
|
|
|
{
|
|
|
|
// DIMENSION TRAID(LB,1),TSM(1)
|
|
|
|
//---------------------------execution ---------------------------
|
|
|
|
int NI,JJ;
|
|
for (NI=2;NI<=NDDL;NI++)
|
|
{ if (NI<=LB)
|
|
{ R=TSM(NI);
|
|
for (JJ=LB-NI+1;JJ<=LB-1;JJ++)
|
|
R=R-TRAID(JJ,NI)*TSM(NI-LB+JJ);
|
|
TSM(NI)=R;
|
|
}
|
|
else
|
|
{
|
|
R=TSM(NI);
|
|
for (JJ=1;JJ<=LB-1;JJ++)
|
|
R=R-TRAID(JJ,NI)*TSM(NI-LB+JJ);
|
|
TSM(NI)=R;
|
|
}
|
|
}
|
|
|
|
//
|
|
for( NI=1;NI<=NDDL;NI++)
|
|
TSM(NI)=TSM(NI)*TRAID(LB,NI);
|
|
//
|
|
for (NI=1;NI<=NDDL-1;NI++)
|
|
{ NII=NDDL-NI;
|
|
if (NI+1<=LB)
|
|
{ R=TSM(NII);
|
|
for (JJ=1;JJ<=NI;JJ++)
|
|
R=R-TRAID(LB-JJ,NII+JJ)*TSM(NII+JJ);
|
|
TSM(NII)=R;
|
|
}
|
|
else
|
|
{
|
|
R=TSM(NII);
|
|
for (JJ=1;JJ<=LB-1;JJ++)
|
|
R=R-TRAID(LB-JJ,NII+JJ)*TSM(NII+JJ);
|
|
TSM(NII)=R;
|
|
}
|
|
}
|
|
} |