明确问题在哪

字数 213阅读 21

本次的主题是“还好你没放弃,讲述一件你没放弃的事,一个没放弃的人,一个没放弃的梦想,一段没放弃的旅程......”

最近一段时间在处理油藏数值模拟内容
现在出现几个问题

  • 将testField的改变值传递给变量(基本解决)
  • 将压力曲线以什么样的形式表显示出来
  • 界面设计太简陋,输出的压力值放在哪里,压力曲线放在哪里

附上主程序的代码

public class OneDimension 
{
     static MyFrame frame;
    /*
     *This code is calculating for one dimension reservoir numerical simulation
     */
    public double φ=0.25;           //孔隙度
    double k=0.05;          //渗透率
    double μ = 1;           //粘度μ
    double con=0.0005;      //压缩系数 con
    double rw=10;           //井筒半径 rw
    double re=25000;        //供给边界半径 re
    int Pe= 100;            //供给边界压力 Pe
    int Pi=100;             //原始地层压力 Pi
    double qv=173.611;      //定产量 q
    int h = 500;            //油层厚度h
    int n=30;           //网格数
    int delta=30*86400; //两网格之间的时间差
    int tmax=360*86400; //最大生产时间
    
    double r[]=new double[31];
    double a[]=new double[31];
    double b[]=new double[31];
    double c[]=new double[31];
    double d[]=new double[31];
    double p[]=new double[31];
    double q[]=new double[31];
    
    
    double u[]=new double[31];
    double l[]=new double[31];
    double detx=Math.log(re / rw)/n;
    double xa[]=new double[30];
    double xb[]=new double[30];
    double xc[]=new double[30];
    double xd[]=new double[30];
    double m[]=new double[30];
    double lamd[]=new double[30];

    double dr[]=new double[30];
    double pch[]=new double[31];
    double pre[]=new double[31];

    
    double x[]=new double[31];
    double y[]=new double[31];
    
    
    public  OneDimension()
    {
        for (int i=1;i<=29;i++)
        {
            m[i]=Math.exp(2*i*detx)*φ*μ*con*detx*detx*rw*rw/(k*delta);
            lamd[i]=2+m[i];
        }
        
        for (int i=0;i<=29;i++)
        {
        pre[i]=100;
        }
        
        dr[0]=(qv*μ*detx)/(2*Math.PI*k*h);
        xa[0]=0;
        for(int i=1;i<=29;i++)
        {   
            xa[i] = 1;
        }   
            xb[0]=-1;
        for (int i=1;i<=29; i++)
            xb[i]=-lamd[i];
        for (int i=0; i<=28; i++)
            xc[i] = 1;
        
        xc[29] = 0;
        
        for (int i=1;i<=30;i++)
        {
            r[i] = Math.exp(i*detx ) *rw;
        }
    }

        
    public double[] lu(double pa[], double pb[], double pc[], double pd[])
    {
                 System. arraycopy(pa, 0, a, 1, pa.length);
                 System. arraycopy (pb, 0, b, 1, pb.length);
                 System. arraycopy(pc, 0, c, 1, pc.length);
                 System. arraycopy(pd, 0, d, 1, pd.length);
                 
                 u [ 1 ] = b [1];
                 for ( int i = 2 ; i <= 30 ; i ++ ) 
                 {
                     l[i] = a[i]/(u[i - 1]);
                     u[i] = b[i] - l[i]*c[i-1];
                 }
                 y[1] = d[1];
                 for ( int i = 2 ;i <= 30 ; i ++ ) 
                 {
                     y[i]=d[i] - l[i]*y[i - 1];
                 }
                 x[30] = y[30] / (u[30]); 
                 for ( int i = 29 ; i >= 1 ; i--)
                 {
                         x[i]=(y[i]-c[i]*x[i+1])/u[i];
                 }
                         return x;
    }
    public void compute() 
    {
                        
                         for(int i=1;i<=29; i++)
                             dr[i]=-m[i]*pre[i];
                         for(int i=0; i<=28; i++)
                             xd[i]=dr[i];
                         
            xd[29]=dr[29]-Pe;
            pch=lu(xa, xb, xc, xd);
            System.arraycopy(pch,1,pre, 0,(pch.length-1));
            pre[30] = 100 ; 
                                 
    }
    public void print() {
                            for ( int i = 1 ;i <= 30 ;i++)
                                
                            {
                                System.out.println(" pressure of the " + i +"th grid is "+pre[i]);
                            }
    }
                                
     public void start()
     {
                for ( int t = 1 ; t <= 12 ;t ++ ) {
                 compute();
                }
     }
                
    
     
     public static void main ( String[] args ) 
     {
         EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        frame = new MyFrame();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
    
            
         
         
         OneDimension test = new OneDimension();
         test. start();
         test. print();
         
     }
}

说实话在做的过程中遇到的很多问题,很多困难无从下手,但是还好我没有放弃,如果一碰到难题就退缩的话我也就不是我了,再做一周,少一些娱乐活动就OK

推荐阅读更多精彩内容