源岩降解动力学过程在C++的初步实现(1)

      程序语言 2006-8-18 22:22:00
 
//源岩降解动力学过程在C++的初步实现
//---------------------------------------------------------
// !!CORPYRIGHT DECLARATION!!
//This program was wirrten by Zeng H.S using std C++ language.
//You can use the program under GNU licence.
// 2006/08/11(YY/MM/DD)
//------------------------------------------------------------
#include <iostream>
#include <math.h>
#include<conio.h>
#include <stdlib.h>
#define R 8.31441
#define T2 2
#define T_initial 25

using namespace std;

int main()
{
//---------------------------------------------------------
  //begin varialbe declaration
  long double delta_t,time1,time2,A,Ea;
//delta_t是累积时间,time是时间
   //A是指前因子,Ea是活化能
  long double T[200],TOC_initial,C_initial,Tx,alpha_x=2,x[200],k;
  //end varialble declaration
  //---------------------------------------------------------
  //begin data initiation
  T[0]=T_initial;   //initial temperature
  Tx=alpha_x+15*log10(alpha_x/2); //heating rate
  Ea=259.1*1E3; //A type kerogen Ea
  A=41.23E17; //frequency
  //----------------------------------------------------------
  //user input
L1: cout<<"Please input Heating Rate(C/Ma):"<<endl
   <<"Heating Rate(C/Ma)=";
  cin>>alpha_x;
  cout<<endl;
  cout<<"Please input Ea(KJ/Mol):"<<endl
   <<"Ea(KJ/Mol)=";
  cin>>Ea;
  Ea=Ea*1000;
  cout<<endl<<"Please input A(frequency factor):"<<endl
   <<"A=";
  cin>>A;
  cout<<endl;  
    
  
  //----------------------------------------------------------
  //end data initiation
  //----------------------------------------------------------
  //begin calculation
  int i=0;
  time1=0;
  x[i]=1;
  while(time1<=100*(1E6)*365*24*3600)
  {
    i++;
    time2=time1+(1E6)*365*24*3600;
    T[i]=T[i-1]+Tx;
    k=A*exp(-Ea/R/(T[i]+273));
    x[i]=x[i-1]*exp(-k*(time2-time1));
    time1=time2;
  }
  
  
  //end calculation
  //----------------------------------------------------------
  //begin output the results
cout<<"Temperature(C) "<<"X(%)"<<endl;
  for(i=0;i<=250;i++)
{
   cout<<" "<<T[i]<<" "<<x[i]<<endl;
if(x[i]<=1E-10) break;
}
  cout<<"Calculate another source rock? Enter Y to continue or N to end the program"<<endl;
  char loop;
  cin>>loop;
  if(loop=='y'||loop=='Y')
  goto L1;
  else
  {
    cout<<"Press any key to quit out";
    getch();
  }
  
  //end output the results
              
}
标签集:TAGS:
回复Comments() 点击Count()
喜欢就顶一下

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}