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

📄 mainfrm.cpp

📁 分子动力学的VC源码,可以方面的用语化学与材料计算方面的开发,希望有用.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "mds.h"
#include "math.h"
#include "MainFrm.h"
#include "W1.h"
#include "dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_model, Onmodel)
	ON_COMMAND(ID_init, Oninit)
	ON_COMMAND(ID_simulation, Onsimulation)
	ON_COMMAND(ID_outshow, Onoutshow)
	ON_COMMAND(ID_continext, Oncontinext)
	ON_COMMAND(ID_continsimu, Oncontinsimu)
	ON_COMMAND(ID_twosidef, Ontwosidef)
	ON_COMMAND(ID_rsimulation, Onrsimulation)
	ON_COMMAND(ID_conrnext, Onconrnext)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


void CMainFrame::Onmodel() 
{
	dlg DLG;


	DLG.DoModal(); 
	
	tnx=2*DLG.lx+1;
	tny=2*DLG.wy+1;
	tnz=2*DLG.hz+1;
	nloop=DLG.chi;
	wlf=DLG.wf;	
	wlr=DLG.wr;
	
}

void CMainFrame::Oninit() 
{

	
	double x[10000],y[10000],z[10000];

	int i,j,k;
	sigma=0.361;
	sumwlf=0.0;

      fp2=fopen("lx.txt","w");
	  fprintf(fp2,"%d",(tnx-1)/2);
	  fclose(fp2);

	  fp2=fopen("wy.txt","w");
	  fprintf(fp2,"%d",(tny-1)/2);
	  fclose(fp2);

	  fp2=fopen("hz.txt","w");
	  fprintf(fp2,"%d",(tnz-1)/2);
	  fclose(fp2);



    for(i=0;i<10000;i++)
	{
		for(k=0;k<4;k++)
		{
			r[i][k]=0.0;
			v[i][k]=0.0;
			f[i][k]=0.0;

		}
	}

     fp1=fopen("inzb.txt","w");
	 for(i=1;i<=tnx;i++)
	 {
	     x[i]=(i-1)*sigma/2.0;
	 }   
     for(i=1;i<=tny;i++)
	 {

	     y[i]=(i-1)*sigma/2.0;
	  
	 }
	 for(i=1;i<=tnz;i++)
	 {
	     z[i]=(i-1)*sigma/2.0;
	  
	 }
     node=0;


     for(i=1;i<=tnz;i++)
	 {  
		 if(i%2!=0)
		 {
			 for(j=1;j<=tny;j++)
			 {
				 if(j%2!=0)
				 {
					 for(k=1;k<=tnx;k++)
					 {
						 if(k%2!=0)
						 {
							 node=node+1;
							 r[node][3]=z[i];
							 r[node][2]=y[j];
							 r[node][1]=x[k];

						 }
					 }
				 }
                 if(j%2==0)
				 {
					 for(k=1;k<=tnx;k++)
					 {
						 if(k%2==0)
						 {
							 node=node+1;
							 r[node][3]=z[i];
							 r[node][2]=y[j];
							 r[node][1]=x[k];

						 }
					 }
				 }
			 }
		 }
         if(i%2==0)
		 {
			 for(j=1;j<=tny;j++)
			 {
				 
				 if(j%2!=0)
				 {
					 for(k=1;k<=tnx;k++)
					 {
						 if(k%2==0)
						 {
	                         node=node+1;
							 r[node][3]=z[i];
							 r[node][2]=y[j];
							 r[node][1]=x[k];
						 }
					 }
				 }
				 if(j%2==0)
				 {
					 for(k=1;k<=tnx;k++)
					 {
						 if(k%2!=0)
						 {
							 node=node+1;
							 r[node][3]=z[i];
							 r[node][2]=y[j];
							 r[node][1]=x[k];

						 }
					 }
				 }
			 }
		 }
	 }


	  

 
	fprintf(fp1,"\n r");
	for(i=1;i<=node;i++)
	{
		fprintf(fp1,"\n  ");
		for(j=1;j<=3;j++)
		{

        	fprintf(fp1,"%f  " ,r[i][j]);
		 
		}
	
	}
	
	
	fprintf(fp1,"\n v");
	for(i=1;i<=node;i++)
	{
		fprintf(fp1,"\n  ");
		for(j=1;j<=3;j++)
		{

        	fprintf(fp1,"%f  " ,v[i][j]);

		 
		}
	
	}
      fclose(fp1);

	  fp2=fopen("nodejd.txt","w");
	  fprintf(fp2,"%d",node);
	  fclose(fp2);

/**/
	  j=(tnx+1)/2;

	  k=0;
	  for(i=0;i<10000;i++)
	  {
		  pain[i]=0;
	  }
	  for(i=1;i<=node;i++)
	  {
		  if(r[i][1]==x[j])
		  {
			  k++;
			  pain[k]=i;
			  		
		  }
	  }
      k1=k;

	  fp2=fopen("k1.txt","w");
	  fprintf(fp2,"%d",k1);
	  fclose(fp2);

	  fp2=fopen("pain.txt","w");
	  for(i=1;i<=k1;i++)
	  {
		  fprintf(fp2,"%d ",pain[i]);
	  }
	  fclose(fp2);

	  fp2=fopen("proutput.txt","w");
	  for(i=1;i<=k1;i++)
	  {
		  j=pain[i];
          fprintf(fp2,"%le %le\n",r[j][2],r[j][3]);
	  }
	  fclose(fp2);

	  k=0;
	  for(i=0;i<10000;i++)
	  {
		  painxy[i]=0;
	  }
	  for(i=1;i<=node;i++)
	  {
		  if(r[i][3]==z[tnz])
		  {
			  k++;
			  painxy[k]=i;
	
		  }
	  }
      k2=k;

	  fp2=fopen("k2.txt","w");
	  fprintf(fp2,"%d",k2);
	  fclose(fp2);

	  fp2=fopen("painxy.txt","w");
	  for(i=1;i<=k2;i++)
	  {
		  fprintf(fp2,"%d ",painxy[i]);
	  }
	  fclose(fp2);

	  
	  k=0;
	  for(i=0;i<10000;i++)
	  {
		  painxy2[i]=0;
	  }
	  for(i=1;i<=node;i++)
	  {
		  if(r[i][3]==z[tnz-1])
		  {
			  k++;
			  painxy2[k]=i;
			  		
		  }
	  }
      k4=k;

	  fp2=fopen("k4.txt","w");
	  fprintf(fp2,"%d",k4);
	  fclose(fp2);

	  fp2=fopen("painxy2.txt","w");
	  for(i=1;i<=k4;i++)
	  {
		  fprintf(fp2,"%d ",painxy2[i]);
	  }
	  fclose(fp2);

	  k=0;
	  for(i=0;i<10000;i++)
	  {
		  painxy3[i]=0;
	  }
	  for(i=1;i<=node;i++)
	  {
		  if(r[i][3]==z[tnz-2])
		  {
			  k++;
			  painxy3[k]=i;
			  		
		  }
	  }
      k5=k;
	  fp2=fopen("k5.txt","w");
	  fprintf(fp2,"%d",k5);
	  fclose(fp2);

	  fp2=fopen("painxy3.txt","w");
	  for(i=1;i<=k5;i++)
	  {
		  fprintf(fp2,"%d ",painxy3[i]);
	  }
	  fclose(fp2);
/**/
	  k=0;
	  for(i=0;i<10000;i++)
	  {
		  plane[i]=0;
	  }
	  for(i=1;i<=node;i++)
	  {
		  if(r[i][3]==z[1])
		  {
			  k++;
			  plane[k]=i;
			  		
		  }
	  }
      k3=k;
	  fp2=fopen("k3.txt","w");
	  fprintf(fp2,"%d",k3);
	  fclose(fp2);

	  fp2=fopen("plane.txt","w");
	  for(i=1;i<=k3;i++)
	  {
		  fprintf(fp2,"%d ",plane[i]);
	  }
	  fclose(fp2);

	  k=0;
	  for(i=0;i<10000;i++)
	  {
		  plane2[i]=0;
	  }
	  for(i=1;i<=node;i++)
	  {
		  if(r[i][3]==z[2])
		  {
			  k++;
			  plane2[k]=i;
			  		
		  }
	  }
      k6=k;
	  fp2=fopen("k6.txt","w");
	  fprintf(fp2,"%d",k6);
	  fclose(fp2);

	  fp2=fopen("plane2.txt","w");
	  for(i=1;i<=k6;i++)
	  {
		  fprintf(fp2,"%d ",plane2[i]);
	  }
	  fclose(fp2);

	  k=0;
	  for(i=0;i<10000;i++)
	  {
		  plane3[i]=0;
	  }
	  for(i=1;i<=node;i++)
	  {
		  if(r[i][3]==z[3])
		  {
			  k++;
			  plane3[k]=i;
			  		
		  }
	  }
      k7=k;
	  fp2=fopen("k7.txt","w");
	  fprintf(fp2,"%d",k7);
	  fclose(fp2);

	  fp2=fopen("plane3.txt","w");
	  for(i=1;i<=k7;i++)
	  {
		  fprintf(fp2,"%d ",plane3[i]);
	  }
	  fclose(fp2);

	  
	  
/**/
}

void CMainFrame::Onsimulation() 
{
	int i,j;
	ic=1;
	
	list();
	force();

	while(ic<=nloop)
	{
     			
		intev();
		sintev();		
		ic=ic+1;
	}	
}

void CMainFrame::list()
{
	double rr,rr1,rcd,d;
	double dr[4];
	int i,j,k,m;

    	fp7=fopen("list.txt","w");

		rcd=3.8025;
		d=sqrt(2)*sigma/2;
	    for(i=0;i<4;i++)
		{
            dr[i]=0.0;

		}
		for(i=0;i<10000;i++)
		{
			for(j=0;j<500;j++)
			{
				listjd[i][j]=0;
			}
		}
		for(i=0;i<10000;i++)
		{
			max[i]=0;
		}
		
		for(i=1;i<=node;i++)
		{   
			m=0.0;
			fprintf(fp7,"\n");	
	    	for(j=1;j<=node;j++)
			{

	    		if(j!=i)
				{
	    			rr=0.0;



	      			for(k=1;k<=3;k++)
					{
	    				dr[k]=r[i][k]-r[j][k];					
	    				rr=rr+dr[k]*dr[k];
					}

					rr1=rr/(d*d);
					if(rcd-rr1>0)
					{
                        m=m+1;
						listjd[i][m]=j;
				    	fprintf(fp7,"%d  ",j);
                        max[i]=m;
					}
					
				}
			}
		fprintf(fp7,"%d",max[i]);
		}

		fclose(fp7);

}

void CMainFrame::force()
{	double rr,rr1,rrr1,p1,p2,p3,ff,df;
	int i,j,k,m;
	double dr[4],p[10000],A[3],C[3],rc[3],q[3];
	double d,D;


	d=sqrt(2)*sigma/2;
	
	A[1]=8289.4599770489921;   C[1]=10.7272912864108215;
	A[2]=0.01832510350693439;  C[2]=0.319759369823463370;
	D=13.0792125162800630;
	rc[1]=1.65;
	rc[2]=1.95;

    for(i=0;i<=3;i++)
	{
        dr[i]=0.0;
	}
	
 

    for(i=1;i<=node;i++)
	{
			
		p[i]=0;

		for(j=1;j<=max[i];j++)
		{
				
				rr=0.0;
				for(k=1;k<=3;k++)
				{
				    dr[k]=r[i][k]-r[listjd[i][j]][k];
			    	rr=rr+dr[k]*dr[k];
				}

                    rr1=sqrt(rr);
					rr1=rr1/d;	                        
					p[i]+=A[2]*(rc[2]-rr1)*(rc[2]-rr1)*exp(-C[2]*rr1);
				
		}
	}

    for(i=0;i<10000;i++)
	{  
    	for(k=0;k<4;k++)
		{
		    f[i][k]=0.0;
		}

	}
	
	for(i=1;i<=node;i++)
	{   	
		for(j=1;j<=max[i];j++)
		{
				rr=0.0;
				p1=0.0;
				for(k=1;k<=3;k++)
				{
					dr[k]=r[i][k]-r[listjd[i][j]][k];					
					rr=rr+dr[k]*dr[k];
				}

				rrr1=sqrt(rr);
				rr1=rrr1/d;
					
				p1=D*(log(p[i])+log(p[listjd[i][j]])+2);

				for(m=1;m<=2;m++)
				{
					q[m]=0;
			    	if(rr1-rc[m]<0)
					{
			    		q[m]=A[m]*(2+C[m]*(rc[m]-rr1))*(rc[m]-rr1)*exp(-C[m]*rr1);
					}
					
				}

				ff=p1*q[2]+q[1];
			                    
                for(k=1;k<=3;k++)
				{
                    f[i][k]+=ff*dr[k]/rrr1/d*0.16022;
				}
			
		}			
	}


		if((ic==nloop)&&(wlf>0))
		{	
		   sumwlf=sumwlf+wlf;
		   fp2=fopen("sumwlf.txt","w");
	       fprintf(fp2,"%le",sumwlf);
	       fclose(fp2);
		}
   	  


/*	fp1=fopen("force.txt","w");
	fprintf(fp1,"\n f");
	for(i=1;i<=node;i++)
	{
		fprintf(fp1,"\n  ");
		for(j=1;j<=3;j++)
		{

        	fprintf(fp1,"%f  " ,f[i][j]);

		 
		}
	
	}
      fclose(fp1);
*/

}

 void CMainFrame::intev()
{
	double dt,temp[10000][4];
	int i,j,k;
	double dr[4],rr,rr1;

	mass=1.0631e-25;
    dt=2.5e-15;

	for(i=0;i<10000;i++)
	{
		for(j=0;j<=3;j++)
		{
			temp[i][j]=0.0;
		}
	}

	for(i=1;i<=node;i++)
	{
		for(j=1;j<=3;j++)
		{
		
				r[i][j]=r[i][j]+dt*v[i][j]+dt*dt*f[i][j]/(2.0*mass);
		    	temp[i][j]=f[i][j];

		}
	}

       if((ic==nloop)&&(wlr>0))
	   {

	       for(i=1;i<=k2;i++)
		   {
		       
			    r[painxy[i]][3]=r[painxy[i]][3]+wlr;

		   }


		    fp3=fopen("rpainxy.txt","w");
        	for(i=1;i<=k2;i++)
			{
        		for(j=1;j<=3;j++)
				{
 	        		fprintf(fp3,"%le  ",r[painxy[i]][j]);
				}
    	    	fprintf(fp3,"\n");
			}
        	fclose(fp3);

			fp2=fopen("wlr.txt","w");
	        fprintf(fp2,"%le",wlr);
	        fclose(fp2);
	   }



    fp3=fopen("位移.txt","w");
	for(i=1;i<=node;i++)
	{
		for(j=1;j<=3;j++)
		{
			fprintf(fp3,"%le  ",r[i][j]);
		}
		fprintf(fp3,"\n");
	}
	fclose(fp3);
   
   
	fp3=fopen("outputz.txt","w");
	for(i=1;i<=k3;i++)
	{
		for(j=1;j<=3;j++)
		{
			fprintf(fp3,"%le  ",r[plane[i]][j]);
		}
		fprintf(fp3,"\n");
	}
	fclose(fp3);

	fp3=fopen("outputz2.txt","w");
	for(i=1;i<=k6;i++)
	{
		for(j=1;j<=3;j++)
		{
			fprintf(fp3,"%le  ",r[plane[i]][j]);
		}
		fprintf(fp3,"\n");
	}
	fclose(fp3);

	fp3=fopen("outputz3.txt","w");
	for(i=1;i<=k7;i++)
	{
		for(j=1;j<=3;j++)
		{
			fprintf(fp3,"%le  ",r[plane[i]][j]);
		}
		fprintf(fp3,"\n");
	}
	fclose(fp3);


	if(ic%10==0)
	{
	    list();
	}

	force();

	for(i=1;i<=node;i++)
	{
		for(j=1;j<=3;j++)
		{
			v[i][j]=v[i][j]+dt*(f[i][j]+temp[i][j])/(2.0*mass);
		}
	}

	fp3=fopen("速度.txt","w");
	for(i=1;i<=node;i++)
	{
		for(j=1;j<=3;j++)
		{
			fprintf(fp3,"%le  ",v[i][j]);
		}
		fprintf(fp3,"\n");
	}
	fclose(fp3);

	fp2=fopen("output.txt","w");
	  for(i=1;i<=k1;i++)
	  {
		  j=pain[i];
          fprintf(fp2,"%le %le\n",r[j][2],r[j][3]);
	  }
	  fclose(fp2);
	

}

void CMainFrame::sintev()
{
	double sumv[10000],v1[10000];
	double s,sumvc;
	double t1,t2,t;
	int i,j;


	t=273;
	kb=1.381e-5;


	sumvc=0.0;
	for(i=1;i<=node;i++)
	{
		sumv[i]=0.0;
		for(j=1;j<=3;j++)
		{
			sumv[i]+=v[i][j]*v[i][j];
		}
		sumvc+=sumv[i];
	}
        fp4=fopen("prot.txt","w");
	    t1=(mass*sumvc)/(3*node*kb);
		s=sqrt((3*node-4)*kb*t/(mass*sumvc));

        
		fprintf(fp4,"%le ",t1);
		fprintf(fp4,"\n%le ",s);


        sumvc=0.0;
		for(i=1;i<=node;i++)
		{
			sumv[i]=0.0;
			for(j=1;j<=3;j++)
			{
				v[i][j]=v[i][j]*s;
				sumv[i]+=v[i][j]*v[i][j];
			}					
			sumvc+=sumv[i];
		}
		t2=(mass*sumvc)/(3*node*kb);
		fprintf(fp4,"\n%le ",t2);
		fclose(fp4);

/*        fp3=fopen("afterv.txt","w");       
		for(i=1;i<=node;i++)
		{
	    	fprintf(fp3,"\n");
	    	for(j=1;j<=3;j++)
			{
		    	fprintf(fp3,"  %le",v[i][j]);
			}
		}
		fclose(fp3);		
*/
}

void CMainFrame::Onoutshow() 
{
	W1 *pW1Wnd = new W1;

	if (!pW1Wnd->Create(_T("Show1"),
		WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
		CRect (0, 0, 500, 430), this))
		return;		
}

void CMainFrame::Oncontinext() 
{

	int i,j,k;
	sigma=0.361;



   for(i=0;i<10000;i++)
	{
		for(k=0;k<4;k++)
		{
			r[i][k]=0.0;
			v[i][k]=0.0;
			f[i][k]=0.0;

		}
	}
 	  fpp=fopen("nodejd.txt","r");
      fscanf(fpp,"%d",&node);
      fclose(fpp);

	  fpp=fopen("sumwlf.txt","r");
      fscanf(fpp,"%le",&sumwlf);
      fclose(fpp);

	  fpp=fopen("位移.txt","r");
       for(i=1;i<=node;i++)
	   {

		   for(j=1;j<=3;j++)
		   {
			   fscanf(fpp,"%le",&r[i][j]);

		   }
		   fprintf(fpp,"\n");
        	
	   }
       fclose(fpp);
	   fpp=fopen("速度.txt","r");
       for(i=1;i<=node;i++)
	   {
		   
		   for(j=1;j<=3;j++)
		   {
			   fscanf(fpp,"%le",&v[i][j]);

		   }
		   fprintf(fpp,"\n");
        	
	   }
       fclose(fpp);

	  fpp=fopen("k1.txt","r");
      fscanf(fpp,"%d",&k1);
      fclose(fpp);
	  fpp=fopen("pain.txt","r");
       for(i=1;i<=k1;i++)
	   {

⌨️ 快捷键说明

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