单元在整体坐标系下的刚度矩阵

版权声明:个人原创,转载请注明出处! https://blog.csdn.net/yxl_123456/article/details/88619418
import java.util.Scanner;

public class jbcs{
	static int N;//单元数
	static Double EI;//抗弯刚度
	static Double EA;//轴向刚度
	static Double α;//转角
	static Double l;//杆件长度
	static Double cos;
	static Double sin;
	static Double[][] T=new Double[6][6];//坐标转换转换
	static Double[][] k_ii;
	static int n=100;//结点位移数目
	Double[][]  KK = new Double[n][n];//单元贡献矩阵
	Double[][] K_z =new Double[n][n];//整体刚度矩阵
	Double[][] K_z1=new Double[n][n];
	Double[][] K= new Double[6][6];//整体坐标系下的单元刚度矩阵
	static int[] k= {0,0,0,0,0,0};//定位向量矩阵
	public  void kk(Scanner s) {
		jbcs jb=new jbcs();
		Double[][] k_ii= {{EA/l*Math.pow(cos, 2)+12*EI/Math.pow(l, 3)*Math.pow(sin, 2),(EA/l-12*EI/Math.pow(l, 3))*sin*cos,-6*EI/Math.pow(l, 2)*sin},
				{(EA/l-12*EI/Math.pow(l, 3))*sin*cos,EA/l*Math.pow(sin, 2)+12*EI/Math.pow(l, 3)*Math.pow(cos, 2),6*EI/Math.pow(l, 2)*cos},
				{-6*EI/Math.pow(l, 2)*sin,6*EI/Math.pow(l, 2)*cos,4*EI/l}};
		Double[][] K= {{k_ii[0][0],k_ii[0][1],k_ii[0][2],-k_ii[0][0],-k_ii[0][1],k_ii[0][2]},
				       {k_ii[1][0],k_ii[1][1],k_ii[1][2],-k_ii[1][0],-k_ii[1][1],k_ii[1][2]},
				       {k_ii[2][0],k_ii[2][1],k_ii[2][2],-k_ii[2][0],-k_ii[2][1],k_ii[2][2]/2},
				       {-k_ii[0][0],-k_ii[1][0],-k_ii[2][0],k_ii[0][0],k_ii[0][1],-k_ii[0][2]},
				       {-k_ii[0][1],-k_ii[1][1],-k_ii[2][1],k_ii[1][0],k_ii[1][1],-k_ii[1][2]},
			           {k_ii[0][2],k_ii[1][2],k_ii[2][2]/2,-k_ii[2][0],-k_ii[2][1],k_ii[2][2]},
		              };
		for(int i=0;i<6;i++) {
			for(int j=0;j<6;j++) {
				System.out.print(String.format("%6f",K[i][j])+"  ");//输出整体坐标下的单元刚度矩阵
			}
			System.out.println();
		}
		System.out.println();
		
		add(s);
		for(int i=0;i<6;i++) {
			for(int j=0;j<6;j++) {
				if(k[i]!=0&&k[j]!=0) {
					KK[k[i]-1][k[j]-1]=K[i][j];
				}
			}
		}
		System.out.println("其单元贡献矩阵:");
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				System.out.print(String.format("%6f",KK[i][j])+"  ");
			}
			System.out.println();
		}
		System.out.println();
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				K_z[i][j]=K_z[i][j]+KK[i][j];
			}
		}
	}
	public void cs0(Scanner s) {
		System.out.println("输入单元个数:");
		N=s.nextInt();
		System.out.println("输入位移个数:");
		n=s.nextInt();
	}
	public void cs1(Scanner s) {
		System.out.println("输入轴向刚度和抗弯刚度:");
		EA=s.nextDouble();
		EI=s.nextDouble();
	}
	public void cs(Scanner s) {
		System.out.println("输入单元杆件长度:");
		l=s.nextDouble();
		System.out.println("输入转角的cos值:");
		cos=s.nextDouble();
		System.out.println("输入转角的sin值:");
		sin=s.nextDouble();
	}
	public void add(Scanner s) {
		System.out.println("输入该单元的定位向量:");
		for(int i=0;i<6;i++) {
			k[i]=s.nextInt();
		}
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				KK[i][j]=0.0;
			}
		}
	}
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		jbcs bas=new jbcs();
		System.out.println("默认所有单元抗弯刚度和轴向刚度相同!!!");
		bas.cs1(s);
		bas.cs0(s);
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				bas.K_z[i][j]=0.0;
			}
		}
		for(int i=0;i<N;i++) {
			bas.cs(s);
			System.out.println("整体坐标系下的第"+i+"单元刚度矩阵:");
			bas.kk(s);
		}
		System.out.println("整体刚度矩阵:");
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				bas.K_z1[i][j]=bas.K_z[i][j];
				System.out.print(String.format("%6f",bas.K_z[i][j])+"  ");
			}
			System.out.println();
		}
		ReverseMartrix re = new ReverseMartrix();
		re.main(args);
		s.close();
	}
}

猜你喜欢

转载自blog.csdn.net/yxl_123456/article/details/88619418