1次元のばね要素の剛性マトリックスは、ばねの比例定数をKとすると
K -K
-K K
なので、後はこれを重ね合わせればよいのみ(^^)
プログラム例は
public class SpringMain {
public static void main(String[] args) {
int nElement = 3; // 要素数
int nNode = 4; // 節点数
int nDof = nNode; // 自由度数
int nSpringElemNode = 2; // ばね要素一つが持つ節点の数
int[][] elementNode = new int[nElement][nSpringElemNode]; // 要素に属する節点番号
double[] springK = new double[nElement]; // 各要素のばね定数
double[][] elemK = new double[2][2]; // 要素剛性マトリックス
double[][] totalK = new double[nDof][nDof]; // 全体剛性マトリックス
// 要素が持つ節点の定義
elementNode[0][0] = 0;
elementNode[0][1] = 1;
elementNode[1][0] = 1;
elementNode[1][1] = 2;
elementNode[2][0] = 2;
elementNode[2][1] = 3;
// ばね定数定義
springK[0] = 10.0;
springK[1] = 30.0;
springK[2] = 20.0;
for (int i = 0; i < nElement; i++) {
// 要素剛性マトリックスの作成
double springKi = springK[i];
buildElementK(springKi, elemK);
// 全体剛性マトリックスの作成
buildTotalK(elementNode, elemK, totalK, i);
}
// 全体剛性マトリックスの表示
for (int i = 0; i < nDof; i++) {
for (int j = 0; j < nDof; j++) {
System.out.println("K" + i + j + "=" + totalK[i][j]);
}
}
}
// 要素剛性マトリックス作成メソッド
private static void buildElementK(double springK, double[][] elemK) {
elemK[0][0] = springK;
elemK[0][1] = -1 * springK;
elemK[1][0] = -1 * springK;
elemK[1][1] = springK;
}
// 全体剛性マトリックス作成メソッド
private static void buildTotalK(int[][] elemNode, double[][] elemK,
double[][] totalK, int N) {
totalK[elemNode[N][0]][elemNode[N][0]] = totalK[elemNode[N][0]][elemNode[N][0]]
+ elemK[0][0];
totalK[elemNode[N][0]][elemNode[N][1]] = totalK[elemNode[N][0]][elemNode[N][1]]
+ elemK[0][1];
totalK[elemNode[N][1]][elemNode[N][0]] = totalK[elemNode[N][1]][elemNode[N][0]]
+ elemK[1][0];
totalK[elemNode[N][1]][elemNode[N][1]] = totalK[elemNode[N][1]][elemNode[N][1]]
+ elemK[1][1];
}
}