/*
 * @(#)Graph.java	1.9 99/08/04
 * MODIFS PYL juillet Aout 2005!!!!!!!!!!
 * OK fev 2006
 *
 * This software is not designed or intended for use in on-line control of
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in
 * the design, construction, operation or maintenance of any nuclear
 * facility. Licensee represents and warrants that it will not use or
 * redistribute the Software for such purposes.
 */
//javac guiChalTurb.java Kul.java kolor.java tridiago.java ;java guiChalTurb
//javac guiChalTurb.java Kul.java kolor.java tridiago.java ; open index.html       


import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

 
 
 
class Kul extends Thread    
 {
 public double t;
 private double dt=0;
 public double dx;
 public double T[];
 public double NUT[]; 
 public double LM[]; 
 public double U[];
 public double y[];
 public double To[];
 public double Uo[];
 public double T0=0;
 public double T1=0;
 public double q=0;
 public double Bi=0;
 public double turb=0;
 public double nu;
 public double omega;
 public  boolean slope,sym;
 public  boolean mixte,val;

 public int n;
 public int cours=0;
// public tridiago tridiagoC;
 boolean pleaseWait = true;
 
private int property;
public int getProperty  (         ){ return property; }
public void setProperty (int value){ property = value; }
public void setdt (double value){ dt = value;System.out.println("------------>>>dt"+dt); }
public double getdt  (         ){/*System.out.println("-------------<<<dt"+dt);*/return dt; }

public void Kul( )
 {    
 }
 
 public void cl00( )
 {    
 T0=0;
 T1=0;
 q=0;
 slope=false;
 mixte=false; 
 val  = true;
 sym  =false;
 }

 public void cl10( )
 {    
 T0=1;
 T1=0;
 q=0;
 slope=false;
 mixte=false; 
 val  = true; 
 sym  =false; 
 }
 
public void cl01( )
 {    
 T0=0;
 T1=1;
 q=0;
 slope=false;
 mixte=false; 
 val  = true;
 sym  =false;
 } 

 public void cl1s( )
 {    
 T0=1;
 T1=0;
 q=0;
 slope=false;
 mixte=false; 
 val  = true; 
 sym  = true; 
 }
 
public void cl0s( )
 {    
 T0=0;
 T1=1;
 q=0;
 slope=false;
 mixte=false; 
 val  = true;
 sym  = true;
 } 
 
 public void clt0( )
 {    
 T0=0;
 T1=0;
 q=0;
 slope=false;
 mixte=false; 
 val  = true;
 sym  =false;
 } 
 
 public void clts( )
 {    
 T0=0;
 T1=0;
 q=0;
 slope=false;
 mixte=false; 
 val  = true;
 sym  = true;
 } 
    
 public void cl11( )
 {    
 T0=1;
 T1=1;
 q=0;
 slope=false;
 mixte=false; 
 val  = true;
 sym  =false;
 } 
 
public void clB1( )
 {    
 T0=1;
 T1=1;
 slope=false;
 mixte=true; 
 val  =false;
 sym  =false;
 } 
 
 public void clBs( )
 {    
 T0=1;
 T1=1;
 slope=false;
 mixte=true; 
 val  =false;
 sym  =true;
 }  

  
 public void change()
 { tridiago.turb=turb;
  }
 
 public void prems()
 { int i;
   double ry,dxmax;
    //pleaseWait = true;
    t=0;
	//n=325;dx=.001;// ry=1.006  nu0=0.001printf("dy=%lf\n",dy1);
	//dx=.0001;
	//nu=0.00001;
	dx=nu/3; // 2 
	dx=0.00001/3;
	dxmax=0.01;
	ry=1+1.*dx*(dxmax/dx);//ry=1+9*dx;

	n=(int)(Math.log(1+(1.*dxmax/dx))/Math.log(ry));//n=1+(int)(Math.log(1+(9))/Math.log(ry));
	double ryy=Math.exp(Math.log(1+(1.*dxmax/dx))/n);
	System.out.println("n="+n+ " dym="+ (Math.pow(ry,n)) * dx+ " ry " + ry + " " + ryy);
    ry=ryy;
	
   System.out.println(" initialize ");  
   T  = new double[2*n+1];
   U  = new double[2*n+1]; 
   NUT= new double[2*n+1]; 
   LM = new double[2*n+1]; 
   y  = new double[2*n+1];
 
  
		 
	tridiago.n=n;	
	tridiago.dy=dx;	
	tridiago.ry=ry;
	tridiago.prems();
	  y=tridiago.y;
	tridiago.slope=false;
    tridiago.mixte=false; 
    tridiago.val  =false;
    tridiago.sym  =false;
	tridiago.q=0; 	
	 for(i=0;i<=2*n;i++)
		{T[i]=0;
		 U[i]=3*y[i]/2*(1-y[i]/2)/nu;
		 U[i]=8.74*Math.pow(y[i]/nu,1./7.); 
		 if(i>=n){U[i]=U[2*n-i];}
		 }
    }
 
   public void run() {
   int i,it=0;
   double phase=0;
   System.out.println("params " + dt + " " +dx +" dt/dx^2="+(dt/dx/dx));
	
	while (!interrupted()) {
	
	   tridiago.dt=dt;
	   //calcul de la vitesse
		if(dt>0){
		t=t+dt;
		tridiago.u0=0;
		tridiago.un=0;
		tridiago.sym=false;//true;
		tridiago.val=true;
		tridiago.mixte=false;
		tridiago.slope=false;
		tridiago.uo=U;
		tridiago.nu0=nu;
		tridiago.nuturb();
		NUT=tridiago.nut;
		LM=tridiago.longp;
		tridiago.px=-1;
		tridiago.inverse();
		for(i=0;i<=2*n;i++)U[i]=tridiago.u[i];
		
	   	
	 
		tridiago.u0=T0;
		tridiago.un=T1;
		tridiago.sym=sym;
		tridiago.val=val;
		tridiago.mixte=mixte;
		tridiago.slope=slope;
		tridiago.Bi=Bi;
		tridiago.q=q;
		tridiago.uo=T;
		tridiago.px=0;
		tridiago.nu0=nu ;
		tridiago.inverse();
		for(i=0;i<=2*n;i++)T[i]=tridiago.u[i]; 	
    }
		try {
		Thread.sleep(10);
	    } catch (InterruptedException e) {}
				// Do work
                // Check if should wait
                synchronized (this) {
                    while (pleaseWait) {
                        try {
                            wait();
                        } catch (Exception e) {}
                    }
                }
    }
                // Do work http://javaalmanac.com/egs/java.lang/PauseThread.html?l=rel
}
		
 }

 
 