基于C语言的材料力学模型计算实现(拉压变形篇)

本章研究的计算对象是简单杆轴模型的拉压变形,涵盖的功能是计算拉/压应力与总变形量。拉压变形程序算法流程图如下:

Part 1.简单杆轴模型

例题2.石砌桥墩的墩身高l=10m,其横截面尺寸图3-1所示。荷载F=1000kN,材料的密度ρ=2.35kg/,试求墩身底部横截面上的压应力。

解题思想与算法:

3-1 例题2图

A.头文件与宏定义、全局变量声明部分:

#include<math.h>
#define N 5
#define Pi acos(-1.0)//圆周率 
double M[N];//外力偶矩 
double l[N];//各段长度 
double F[N];//各截面所受外力
double A[N];//截面面积 
double Sigma[N];//应力 
double E;//弹性模量 
int Number,choice;

B.主函数与外部函数部分:

(1).按照提示输入对应数据.

表面上看,桥墩只有一段,但考虑到其本身重力,由于材料密度均匀分布,因此桥墩重心取再其正中心。程序的输入的分段数要求输入每段第一个截面所受的直接外力(只需输入该截面特有的受力大小,不要重复输入),因此将其模型为两段后,重新标记各位置字母,如图3-2所示,截面O所受外力即为荷载F,而构造出来的截面A所受外力为桥墩自身重力P,截面B没有直接受到其余外力(外力已累加,不重复输入)。OA与AB长度均为5m。

3-2 标记方式图

运行界面:

代码片段:

int main(){
	bool Choice;
	char Letter[N+1]={'O','A','B','C','D','E'};
	printf("请输入所分段数:");
	scanf("%d",&Number);
	printf("请从起始端至末端输入各段长度/m:\n");
	for(int i=0;i<Number;i++){
		printf("%c%c段:",Letter[i],Letter[i+1]);
	    scanf("%lf",&l[i]);
	}

(2).输入各截面特有的受力大小,桥墩的自重P=ρglA,截面形状是组合图形,它的面积大小A=9.14,继而算得P=2.359.8×10×9.142104.9kN。接着按照截面提示输入截面形状及其相关参数,此时程序会调用Area函数对计算并存储面积信息。

运行界面:

代码片段:

        printf("各段截面大小是否相等?是,输入1;否,输入0:");
	scanf("%d",&Choice);
	if(Choice==true){
		printf("请输入截面形状:a.圆形,输入0;b.方形,输入1;c.组合图形,输入2:");
	    scanf("%d",&choice);
	    A[0]=Area(choice);
	    for(int i=1;i<Number+1;i++){
	    	A[i]=A[0];
		}
	}
	else{
		for(int i=0;i<Number;i++){
                    printf("请输入%c%c段截面形状:1.圆形,输入0;2.方形,输入1;3. 组合图形,输入2:",Letter[i],Letter[i+1]);                                                    
		    scanf("%d",&choice);
		    A[i]=Area(choice);
		} 
	}

Area函数:形参choice传值为用户选择的截面形状代号,当choice =0时,函数计算实心圆截面;当choice =1时,函数计算方形截面;当choice =2时,函数计算组合图形或不规则图形截面,在此情况下,用户在计算截面面积后直接输入面积参数即可。

double Area(int choice){
	double r,a,b,S;
	if(!choice){
		printf("请输入半径/m:");
		scanf("%lf",&r);
		S=Pi*pow(r,2);
	}
	else if(choice==1){
		printf("请输入长度/m:");
		scanf("%lf",&a);
		printf("请输入宽度/m:");
		scanf("%lf",&b);
		S=a*b;
	}
	else{
	printf("请直接输入总面积/m^2:");
	scanf("%lf",&S);}
	return S; 
}

(3).根据用户需要,选择计算压应力功能。本题需要计算压应力,此部分无需调用函数,直接套用公式σ=计算出各截面压/拉应力,如果在(1)中以压应力为正值的标准输入各截面受力,则计算得到正值,为压应力,负值则为拉应力。

代码片段:

        printf("是否计算压应力?是,输入1;否,输入0:");
	scanf("%d",&Choice);
	if(Choice==true){
		for(int i=0;i<Number;i++){
		Sigma[i]=F[i]/A[i];
		printf("%c%c段压应力/Pa:%lf\n",Letter[i],Letter[i+1],Sigma[i]);
	    }
	}

(4).根据用户需要,选择计算变形量功能,若选择此功能,用户输入弹性模量参数后,程序会调用Delta_L()函数进行计算,函数返回值即为计算的变形量结果。本题不计算变形量,在执行完用户所选择的功能后,程序结束。

运行界面:

代码片段:

        printf("是否计算变形量?是,输入1;否,输入0:");
	scanf("%d",&Choice);
	if(Choice==true){
		printf("请输入轴的弹性模量/GPa:");
	    scanf("%lf",&E);
	    printf("总变形/m:%lf\n",Delta_L());
	} 
	return 0;
}

Delta_L函数:应变ε=,变形∆l=εl,函数会将计算得到的各段变形量累加,从而计算出总变形量。

double Delta_L(){//总变形 
	double L=0.0; 
	for(int i=0;i<Number;i++)L=L+(Sigma[i]*l[i])/(E*pow(10.0,9));
	return L; 
}

Part 2.拉压变形程序的应用

变式4.一木桩受力如左图所示,轴的横截面为边长200mm的正方形,材料可认为符合胡克定律,其弹性模量E=10GPa。如不记柱的自重,试求各段柱横截面上的应力与柱的总变形。

解题思路:重新标记各位置字母,如右图所示,木桩模型分为OA、AB两段,截面O受正压力100kN,截面A受力160kN,截面B无其他受力。OA、AB两段长度均为1.5m。按界面提示与要求输入参数,选择计算应力与总变形的功能即可完成计算

结论:左图中的AC段受压应力2.5MPa,CB段受压应力6.5MPa,柱的总变形为1.35mm,即被压缩了1.35mm.

拉压变形的内容暂告一段落,下一个blog将进入弯曲应力的研究~

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值