⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 四接点两单元的平面静力问题dlg.cpp

📁 三角单元平面静力问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		 {
			 elp[q].setElem(0, &ndp[q], &ndp[q+1], &ndp[q+2]);
             
		 }
   
  	
   	//生成整体刚度矩阵 
	for(int t = 0; t < eNum; t ++)
   		elp[t].setMtxk(*kp);
   	
   	//读入节点等效荷载
  
	 double fx[6],fy[6];
	  fx[0]=m_fx1;
	  fx[1]=m_fx2;
	  fx[2]=m_fx3;
	  fx[3]=m_fx4;
	  fx[4]=m_fx5;
	  fx[5]=m_fx6;
	 
	  fy[0]=m_fy1;
	  fy[1]=m_fy2;
	  fy[2]=m_fy3;
	  fy[3]=m_fy4;
	  fy[4]=m_fy5;
	  fy[5]=m_fy6;
	 
     for(int g=0;g<nNum;g++)
	 {  ndp[g].setLoad(fx[g],fy[g]);
	 }	
	
	
         
 	//读取支撑条件,并对整体刚度矩阵做相应的改动 
	const double BigNum = 1000000000;  //设置一个大系数 
	 //读取x方向支撑条件 
	 double u[6],v[6];
	  u[0]=m_u1;
	  u[1]=m_u2;
	  u[2]=m_u3;
	  u[3]=m_u4;
	  u[4]=m_u5;
	  u[5]=m_u6;
	 
	  v[0]=m_v1;
	  v[1]=m_v2;
	  v[2]=m_v3;
	  v[3]=m_v4;
	  v[4]=m_v5;
	  v[5]=m_v6;
	 
	
  bool chek[6];
	
	 chek[0]=m_ch1;
     chek[1]=m_ch2;
	 chek[2]=m_ch3;
	 chek[3]=m_ch4;
	 chek[4]=m_ch5;
	 chek[5]=m_ch6;
	
    
	
	
	int s=0;
	  
  for(int k=0;k<nNum;k++)
  {
	  
	  
	  if(chek[k]==true)
	  {
	  if(u[k]==0)                  //水平位移为0 
  		{
  			ndp[k].setLoadX(0);
			for(int i = 0; i < 2*nNum; i++)
			{
				if(i == 2*k)
					(*kp)(i, 2*k) = 1;
   		 		else
				{
 					(*kp)(i, 2*k) = 0;
  					(*kp)(2*k, i) = 0;
				}
		
			
			}
		}
		else                            //水平位移不为0  
		{
			(*kp)(2*k, 2*k) *= BigNum;
   			ndp[k].setLoadX((*kp)(2*k, 2*k)*u[k]); 
		    
		}
	   
	  }
		
  }
	 //读取y方向支撑条件 
	
	 

	
for(int c=0;c<nNum;c++)
 {  
	  if(chek[c]==true)
	  {
	  if(v[c]==0)                  //位移为0 
  		{
  			ndp[c].setLoadX(0);
			for(int i = 0; i < 2*nNum; i++)
			{
				if(i == 2*c+1)
					(*kp)(i, 2*c+1) = 1;
   		 		else
				{
 					(*kp)(i, 2*c+1) = 0;
  					(*kp)(2*c+1, i) = 0;
				}
			}
		
	  }
		else                            //位移不为0  
		{
			(*kp)(2*c+1, 2*c+1) *= BigNum;
   			ndp[c].setLoadX((*kp)(2*c+1, 2*c+1)*v[c]); 
		   
		}
	  }
}
     
  
}

void CMyDlg::solveEq(Node*& ndp, Mtx<double>*& aa)
{
    const int nNum = Elem::getNdTN();
	const int eNum = Elem::getElTN();
	const int tnNum = 2*nNum;
 		
	double* bb = new double[tnNum];
	double* xx = new double[tnNum];
 	for(int i = 0; i < nNum; i++)
  	{
  		bb[2*i] = ndp[i].getLoadX();
  		bb[2*i +1] = ndp[i].getLoadY();
   	} 
   	
   	//for(int i = 0; i < tnNum; i++)   //辅助调试 
   	//	cout << bb[i] << "\t";
 	//cout << endl;
     	
	for(int k = 0; k < tnNum -1; k++)                  //高斯消元法消元 
	{
     		double aet = fabs((*aa)(k, k));             //挑选主元素 
     		int pc = k;                 
     		for(int j = k + 1; j < tnNum; j++)
     		{
     			if(fabs((*aa)(j, k)) > aet)
        		{
        			aet = fabs((*aa)(j, k));
        			pc = j;
          		}	
     		}
     		
		if(pc != k)                                //交换行 
		{
			double tmp;
			for(int l = 0; l < tnNum; l++)
			{
				tmp = (*aa)(k, l);
				(*aa)(k, l) = (*aa)(pc, l);
				(*aa)(pc, l) = tmp;
			}
			tmp = bb[k];
			bb[k] = bb[pc];
			bb[pc] = tmp;
		}
		
		for(int m = k + 1; m < tnNum; m++)
		{
			(*aa)(m, k) /= (*aa)(k, k);
			bb[m] -= (*aa)(m, k)*bb[k];
  			for(int o = k +1; o < tnNum; o++)
     				(*aa)(m, o) -= (*aa)(m, k)*(*aa)(k, o);
          	}	
	}
	
	for(int t = tnNum - 1; t >= 0; t--)                //回代求解 
	{
		double tmp = 0;
		for(int r = t + 1; r < tnNum; r++)
			bb[t] -= (*aa)(t, r)*xx[r];
		xx[t] = bb[t]/(*aa)(t, t);
	}
	
	for(int w = 0; w < nNum; w++)
  	{
  		 ndp[w].setUx(xx[2*w]);
  		 ndp[w].setVy(xx[2*w +1]);
   	} 
}

void CMyDlg::stress(Elem*& clp)                              //求应力子程序
{
	const int eNum = Elem::getElTN();
	for(int i = 0; i < eNum; i++)
		clp[i].setStress();
}

CString CMyDlg::output(Node*& ndp, Elem*& elp)                      //输出位移及应力子程序  
{
  
  	CString s1,s2;
	s1="";
	s2="";
 	const int nNum = Elem::getNdTN();
 	const int eNum = Elem::getElTN();
 	
 	
 	for(int i = 0; i < nNum; i++)
 	{
 	
		CString ss1,ss2,ss3,ss4,su,sv,sf;
		ss1.Format("%d",ndp[i].ndNum);
		ss2.Format("%.1f",ndp[i].x);
		ss3.Format("%.1f",ndp[i].y);
		ss4="("+ss2+","+ss3+")";
		su.Format("%e",ndp[i].u);
		sv.Format("%e",ndp[i].v);
		sf.Format("%e",ndp[i].getLoadY());
		s1=s1+"||**节点号:"+ss1+"; 坐标:"+ss4+";  "+"U: "+su+";  V:"+sv+"; Fx:"+sf+"**||";
 	}
 	
 
 	for(int e=0; e<eNum; e++)
 	{
 	
 	CString ss,ss5,ss6,ss7,ss8,ss9,ss10,sno1,sno2,sno3;
	ss.Format("%d",elp[e].elNum);
	ss5.Format("%f",elp[e].area);
    

   	ss6.Format("%e",elp[e].sgmX);
	ss7.Format("%e",elp[e].sgmY);
	ss8.Format("%e",elp[e].tauXY);
	sno1.Format("%d",elp[e].ndp[0]->getNum());
    sno2.Format("%d",elp[e].ndp[1]->getNum());
	sno3.Format("%d",elp[e].ndp[2]->getNum());
    s2=s2+"||**单元号:"+ss+";  单元面积:"+ss5+";  Sgmx:"+ss6+";  Sgmy:"+ss7+";  TauXY:"+ss8+"**||";
 	//s2=s2+"单元号:"+ss+";  单元面积:"+ss5+"; 所包含的节点:"+sno1+","+sno2+","+sno3;
	}
 	CString sss;
	sss=s1+"。                \n\t"+s2+"。";
    return sss;
	
}

void CMyDlg::OnSelchangeCombo1() 
{
	// TODO: Add your control notification handler code here
	
	kk=m_flag.GetCurSel();
	
}

void CMyDlg::OnSelchangeCombo2() 
{
	// TODO: Add your control notification handler code here
	ek=m_enum.GetCurSel();
	if(ek==1)
    {
	GetDlgItem(IDC_EDIT10)->EnableWindow(true);
	GetDlgItem(IDC_EDIT17)->EnableWindow(true);
	GetDlgItem(IDC_EDIT39)->EnableWindow(true);
	GetDlgItem(IDC_EDIT40)->EnableWindow(true);
	GetDlgItem(IDC_EDIT43)->EnableWindow(true);
	GetDlgItem(IDC_EDIT44)->EnableWindow(true);

	GetDlgItem(IDC_EDIT18)->EnableWindow(false);
	GetDlgItem(IDC_EDIT38)->EnableWindow(false);
	GetDlgItem(IDC_EDIT41)->EnableWindow(false);
	GetDlgItem(IDC_EDIT42)->EnableWindow(false);
	GetDlgItem(IDC_EDIT45)->EnableWindow(false);
	GetDlgItem(IDC_EDIT46)->EnableWindow(false);
	}
   
    if(ek==2)
    {
	GetDlgItem(IDC_EDIT10)->EnableWindow(true);
	GetDlgItem(IDC_EDIT17)->EnableWindow(true);
	GetDlgItem(IDC_EDIT39)->EnableWindow(true);
	GetDlgItem(IDC_EDIT40)->EnableWindow(true);
	GetDlgItem(IDC_EDIT43)->EnableWindow(true);
	GetDlgItem(IDC_EDIT44)->EnableWindow(true);

	GetDlgItem(IDC_EDIT18)->EnableWindow(true);
	GetDlgItem(IDC_EDIT38)->EnableWindow(true);
	GetDlgItem(IDC_EDIT41)->EnableWindow(true);
	GetDlgItem(IDC_EDIT42)->EnableWindow(true);
	GetDlgItem(IDC_EDIT45)->EnableWindow(true);
	GetDlgItem(IDC_EDIT46)->EnableWindow(true);}


}

void CMyDlg::OnCheck1() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	GetDlgItem(IDC_EDIT27)->EnableWindow(m_ch1);
	GetDlgItem(IDC_EDIT31)->EnableWindow(m_ch1);
}

void CMyDlg::OnCheck2() 
{
	// TODO: Add your control notification handler code here
		UpdateData(true);
	GetDlgItem(IDC_EDIT28)->EnableWindow(m_ch2);
	GetDlgItem(IDC_EDIT32)->EnableWindow(m_ch2);
}

void CMyDlg::OnCheck3() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	GetDlgItem(IDC_EDIT29)->EnableWindow(m_ch3);
	GetDlgItem(IDC_EDIT33)->EnableWindow(m_ch3);
}

void CMyDlg::OnCheck4() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	GetDlgItem(IDC_EDIT30)->EnableWindow(m_ch4);
	GetDlgItem(IDC_EDIT34)->EnableWindow(m_ch4);
}

void CMyDlg::OnCheck5() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	GetDlgItem(IDC_EDIT43)->EnableWindow(m_ch5);
	GetDlgItem(IDC_EDIT44)->EnableWindow(m_ch5);
}

void CMyDlg::OnCheck6() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	GetDlgItem(IDC_EDIT45)->EnableWindow(m_ch6);
	GetDlgItem(IDC_EDIT46)->EnableWindow(m_ch6);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -