请求指点,c#
图呐 2007-12-31 07:49:46 public void BandAndDiagonalCalculate(int nTotalElem, int nTotalDOF, Element[] pElem,
out int pElemDOF, out int pDiag) //半带宽与对角元地址计算
{
int nMinDOF; //最小自由度编号
int nBuffer; //数据缓冲
int nDOFIndex; //自由度编号
int i, j;
for (i = 1; i < nTotalDOF; i++) //各行半带宽置一
#region
{
pDiag[i] = 1;
}
#endregion
for (i = 0; i < nTotalElem; i++) //计算半带宽
#region
{
for (j = 0; j < 2; j++) //从弹簧单元2个节点位移编号中选出最小号
{
if (pElemDOF[i,j] < nMinDOF) //最小值筛选
{
nMinDOF = pElemDOF[i,j];
}
}
for (j = 0; j < 2; j++) //弹簧元2个节点位移
{
nDOFIndex = pElemDOF[i,j]; //节点自由度编号为单元自由度编号
nBuffer = nDOFIndex - nMinDOF + 1; //计算半带宽,各单元两点编号之差最大值+1
if (nBuffer > pDiag[nDOFIndex] && nBuffer <= nDOFIndex + 1)
{
pDiag[nDOFIndex] = nBuffer;
}
else if (nBuffer > nDOFIndex + 1)
{
pDiag[nDOFIndex] = nDOFIndex + 1;
}
}
}
#endregion
pDiag[0] = 0; //首对角元地址赋值
for (i = 1; i < nTotalDOF; i++) //弹簧元总自由度下对角元地址组装
#region
{
pDiag[i] = pDiag[i] - pDiag[i - 1]; //对角元地址组装
}
#endregion
}