Herezh_dev/Resolin/Resolution_Condi/resol.cc

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;
}
}
}