📄 sdt11.cpp
字号:
// sdt11.cpp : implementation file
//
// Sdt14 - 顶部撑锚桩墙基坑支护计算
#include "stdafx.h"
#include "Sdt.h"
#include "sdt11.h"
#include "math.h"
#include "adslib.h"
#define Pi 3.1415926
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int dnewt11(double *x,double eps,int js);
void dnewtf11(double x,double y[2]);
/////////////////////////////////////////////////////////////////////////////
// Csdt11 dialog
Csdt11::Csdt11(CWnd* pParent /*=NULL*/)
: CDialog(Csdt11::IDD, pParent)
{
//{{AFX_DATA_INIT(Csdt11)
m_f = 0.0;
m_max = 0.0;
m_lm = 0.0;
m_c = 25.0;
m_l = 0.0;
m_g = 20.0;
m_h = 6.0;
m_pa = 30.0;
m_q = 20.0;
m_t = 0.0;
m_jss = FALSE;
m_gcm = _T("Zzz");
//}}AFX_DATA_INIT
}
void Csdt11::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Csdt11)
DDX_Text(pDX, IDC_EDITzdf, m_f);
DDX_Text(pDX, IDC_EDITzmax, m_max);
DDX_Text(pDX, IDC_EDITzmlm, m_lm);
DDX_Text(pDX, IDC_EDITzzc, m_c);
DDX_Text(pDX, IDC_EDITzlg, m_l);
DDX_Text(pDX, IDC_EDITzzg, m_g);
DDX_Text(pDX, IDC_EDITzzh, m_h);
DDX_Text(pDX, IDC_EDITzzpa, m_pa);
DDX_Text(pDX, IDC_EDITzzq, m_q);
DDX_Text(pDX, IDC_EDITzzt, m_t);
DDX_Check(pDX, IDC_CHECKjss11, m_jss);
DDX_Text(pDX, IDC_EDITgcm11, m_gcm);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Csdt11, CDialog)
//{{AFX_MSG_MAP(Csdt11)
ON_BN_CLICKED(IDC_BUTTONjs, OnBUTTONjs)
ON_BN_CLICKED(IDC_BTSdtHelp11, OnBTSdtHelp11)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Csdt11 message handlers
double c3,c2,c1,c0;
void Csdt11::OnBUTTONjs()
{
double pa,ka,kp,eq,ea,ep,fq,fa,fp;
CString val11;
UpdateData(TRUE);
pa=m_pa*Pi/180.0;
ka=tan(Pi/4.0-pa/2.0)*tan(Pi/4.0-pa/2.0);
kp=tan(Pi/4.0+pa/2.0)*tan(Pi/4.0+pa/2.0);
// 1. 埋入深度
c3=2*m_g*(ka-kp); //X3
c2=6*m_g*ka*m_h +3*m_q*ka -3*m_g*kp*m_h; //X2
c1=6*m_g*ka*m_h*m_h +6*m_q*ka*m_h; //X1
c0=2*m_g*ka*pow(m_h,3.0) +3*m_q*ka*m_h*m_h; //X0
int js,k;
double x,eps;
eps=0.000001; js=100; x=2.0;
k=dnewt11(&x,eps,js);
if (k>=0) m_t=x;
// 2. 锚拉力
eq=m_q*ka;
ea=m_g*(m_h+m_t)*ka -2*m_c*sqrt(ka);
ep=m_g*m_t*kp +2*m_c*sqrt(kp);
fq=eq*(m_h+m_t);
fa=ea*(m_h+m_t)/2.0;
fp=ep*m_t/2.0;
m_f=(fa*(m_h+m_t)/3.0 +fq*(m_h+m_t)/2.0 -fp*m_t/3.0)/(m_h+m_t);
// 3. 最大弯矩
m_lm=( sqrt(pow(m_q*ka,2.0) +2*m_g*ka*m_f) -m_q*ka )/m_g/ka;
m_max=m_f*m_lm -m_q*ka*m_lm*m_lm/2.0 -m_g*ka*pow(m_lm,3.0)/6.0;
m_t*=1.2;
m_l=m_h+m_t;
val11.Format("%8.3f",m_max);
m_max=atof(val11);
val11.Format("%6.3f",m_t);
m_t=atof(val11);
val11.Format("%6.3f",m_l);
m_l=atof(val11);
val11.Format("%6.3f",m_lm);
m_lm=atof(val11);
val11.Format("%8.3f",m_f);
m_f=atof(val11);
UpdateData(FALSE);
if(m_jss == TRUE){
FILE *ou;
CString flname;
flname=m_gcm + ".txt";
ou=fopen(flname,"a");
fprintf(ou,"\n\n\n");
fprintf(ou,"\n ***********************************************************************");
fprintf(ou,"\n *** 结 构 设 计 计 算 书 ***");
fprintf(ou,"\n *** ***");
fprintf(ou,"\n *** Sdt14 - 顶部撑锚桩墙基坑支护计算 ***");
fprintf(ou,"\n ************************************************* Zgs 2002 ******");
fprintf(ou,"\n\n 工程名称: %s",m_gcm);
fprintf(ou,"\n\n1. 已知数据\n");
fprintf(ou,"\n 基坑深度 H=%6.2f(m)",m_h);
fprintf(ou,"\n 土体内摩擦角(加权平均值) ψ=%6.2f, 土体内粘聚力(加权平均值)C=%6.2f(kN/m/m)",
m_pa,m_c);
fprintf(ou,"\n 土体重力密度(加权平均值) γ=%6.2f, 地面超载 Q=%6.2f(kN/m/m)",m_g,m_q);
fprintf(ou,"\n\n2. 计算结果\n");
fprintf(ou,"\n 桩墙埋入深度 T=%7.3f(m)",m_t);
fprintf(ou,"\n 桩墙总长度 L=%7.3f(m)",m_l);
fprintf(ou,"\n 桩墙最大弯矩 Mmax=%10.3f(kN-m/m)",m_max);
fprintf(ou,"\n 桩墙最大弯矩深度 Lm=%7.3f(m)",m_lm);
fprintf(ou,"\n 桩墙顶端锚拉力 F=%10.3f(kN)",m_f);
time_t tad;
char *buf;
buf=(char*)calloc(80,sizeof(char));
if(buf==NULL) exit(-1);
tad=time(NULL);
strftime(buf,80,"%A %B %d,%Y",localtime(&tad));
fprintf(ou,"\n\n 设计人:");
fprintf(ou,"\n %s",buf);
fclose(ou);
}
}
///////////////////////////////////////////////////////////
//方程及一阶导数
void dnewtf11(double x,double y[2])
{
y[0]=c3*x*x*x +c2*x*x +c1*x +c0;
y[1]=3.0*c3*x*x +2.0*c2*x +c1;
return;
}
//牛顿法解一元三次方程
int dnewt11(double *x,double eps,int js)
{
int k,l;
double y[2],d,p,x0,x1;
l=js; k=1; x0=*x;
dnewtf11(x0,y);
d=eps+1.0;
while ((d>=eps)&&(l!=0))
{ if (fabs(y[1])+1.0==1.0)
{ /*printf("err\n");*/ return(-1);}
x1=x0-y[0]/y[1];
dnewtf11(x1,y);
d=fabs(x1-x0); p=fabs(y[0]);
if (p>d) d=p;
x0=x1; l=l-1;
}
*x=x1;
k=js-l;
return(k);
}
void Csdt11::OnBTSdtHelp11()
{
ads_help("sdt2002.hlp","SDT14",0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -