/*
 * @(#)Graph.java	1.9 99/08/04
 * MODIFS PYL juillet Aout 2005!!!!!!!!!!
 *
 * 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 guiChal.java Kul.java ;java guiChal  
//javac guiChal.java Kul.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,dy;
 public double T[][];
 public double To[][];
 public double Ti[][];
 public double T0=0,T1;
 public double Tx0,Tx1,T0y,T1y;
 public boolean slopex,slopey,mixtex,mixtey,valx,valy,symx,symy;
 public double Ts=0;
 public double q=0;
 public double Bi=0;
 public double omega;
 public int n; 
// public tridiag tridiagC;
 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 cl0000( )
 {    
 Tx1=0;
 Tx0=0;
 T1y=0;
 T0y=0;
 Ts=0;
 q=0;
 slopex=false;
 mixtex=false; 
 valx  = true;
 symx  =false;
 slopey=false;
 mixtey=false; 
 valy  = true;
 symy  =false;
 }

 public void cl1000( )
 {    
 Tx0=1;
 T1y=0;
 Tx1=0;
 T0y=0;
 Ts=0;
 q=0;
 slopex=false;
 mixtex=false; 
 valx  = true;
 symx  =false;
 slopey=false;
 mixtey=false; 
 valy  = true;
 symy  =false; 
 }
 
public void cl0100( )
 {    
 Tx0=0;
 T1y=1;
 Tx1=0;
 T0y=0;
 Ts=0;
 q=0;
  slopex=false;
 mixtex=false; 
 valx  = true;
 symx  =false;
 slopey=false;
 mixtey=false; 
 valy  = true;
 symy  =false;
 } 

public void cl0010( )
 {    
 Tx0=0;
 T1y=0;
 Tx1=1;
 T0y=0;
 Ts=0;
 q=0;
  slopex=false;
 mixtex=false; 
 valx  = true;
 symx  =false;
 slopey=false;
 mixtey=false; 
 valy  = true;
 symy  =false;
 } 
  
 
 public void clt0( )
 {    
 Tx0=0;
 T1y=0;
 Tx1=0;
 T0y=0;
 Ts=0;
 Ts=1;
 q=0;
 tridiag.slope=false;
 tridiag.mixte=false; 
 tridiag.val  = true;
 tridiag.sym  =false;
 } 
 
 
 
 public void clB1( )
 {    
 Tx0=0;
 T1y=1;
 Tx1=1;
 T0y=1;
 Ts=0;
 q=0;
 slopex= false;
 mixtex= false; 
 valx  = true;
 symx  = false;
 slopey= false;
 mixtey= true; 
 valy  = false;
 symy  =false;
 } 

 public void clBqs( )
 {    
 Tx0=0;
 T1y=1;
 Tx1=1;
 T0y=1;
 Ts=0;
 q=0;
 slopex= true;
 mixtex= false; 
 valx  = false;
 symx  = true;
 slopey= false;
 mixtey= true; 
 valy  = false;
 symy  =false;
 } 
  
 public void prems()
 { int i,j;
    //pleaseWait = true;
    t=0;
	n=100;//370;
	dx=1./n;
	dy=1./n;
	omega=0;
   System.out.println(" initialize "+dx); 
   To = new double[n+1][n+1];
   T  = new double[n+1][n+1];
   Ti = new double[n+1][n+1];
   for(i=0;i<=n;i++){
      for(j=0;j<=n;j++)
		{To[i][j]=0;T[i][j]=To[i][j];Ti[i][j]=To[i][j];}}
	 
	tridiag.n=n;	 
	tridiag.prems();
	
 
    }
 
   public void run() {
   int i,j,it=0;
   double phase=0;
   System.out.println("params " + dt + " " +dx +" dt/dx^2="+(dt/dx/dx));
	
	while (!interrupted()) {
	//System.out.println(pleaseWait);
	   tridiag.dt=dt;
		if(dt>0){
		phase=phase+omega*dt;
		t=t+dt;
		
		 
		tridiag.dx=dx;
		tridiag.slope=slopex;
        tridiag.mixte=mixtex; 
        tridiag.val  =valx;
        tridiag.sym  =symx;	
		//for(i=0;i<=n;i++){Ti[i][0]=Tx0;}
		for(j=1;j<n;j++){
		tridiag.u0=T0y;
		tridiag.un=T1y;
		tridiag.q=q;
		tridiag.Bi=Bi;  
		for(i=1;i<n;i++){
		 tridiag.uo[i]=To[i][j];
		 tridiag.s[i]=deriv.d2y(n,To,i,j,dy);}
		tridiag.inverse();
		for(i=0;i<=n;i++){
		 Ti[i][j]=tridiag.u[i];}
		 T[0][j]=Ti[0][j];
		 T[n][j]=Ti[n][j];
		 }
		 
		// 
		
		 
					
		tridiag.dx=dy;
		tridiag.slope=slopey;
        tridiag.mixte=mixtey; 
        tridiag.val  =valy;
        tridiag.sym  =symy;	
		
		// 			
		for(i=1;i<n;i++){
		tridiag.u0=Tx0+Ts*Math.sin(phase);
		tridiag.un=Tx1;
		tridiag.q=q;
		tridiag.Bi=Bi; 
		
		//if((i*dx>0.8)&&(i*dx<.9)){tridiag.Bi=1000000;}
		//if((i*dx<0.5)){tridiag.Bi=1000000:}
		
		for(j=1;j<n;j++){
		 tridiag.uo[j]=Ti[i][j];
		 tridiag.s[j]=deriv.d2x(n,Ti,i,j,dx);}
		tridiag.inverse();
		for(j=0;j<=n;j++){T[i][j]=tridiag.u[j];}
		} 
		
		T[0][0]=(T[0][1]+T[1][0])/2;
		T[n][0]=(T[n][1]+T[n-1][0])/2;
		T[0][n]=(T[0][n-1]+T[1][n])/2;
		T[n][n]=(T[n][n-1]+T[n-1][n])/2;
		
		To=T;
				}
		
		try {
		Thread.sleep(10);
	    } catch (InterruptedException e) {}
				// Do work
                // Check if should wait
                synchronized (this) {
                    while (pleaseWait) {
                        try {
                            wait();
                        } catch (Exception e) {}
                    }
                }
    }
	
}
		
 }