/* * @(#)Graph.java 1.9 99/08/04 * MODIFS PYL juillet Aout 2005!!!!!!!!!! * OK fev 2006 * www.lmm.jussieu.fr/~lagree + py@cccr.jussieu.fr * * This software is designed and 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. */ //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 GraphPanel extends Panel implements Runnable, MouseListener { guiChalTurb graph; Kul kkul=new Kul(); public double dt0=0.10; Thread relaxer; public GraphPanel (){ } GraphPanel(guiChalTurb graph) { this.graph = graph; addMouseListener(this); } void initout() { System.out.println("init t=" + kkul.t +" ....................... dt =" +dt0); kkul.start(); } public void sauveparam() { String texte = "#OK a poursuivre!"; System.out.println("sauf" ); try{ FileOutputStream filename= new FileOutputStream("yUT.dat"); PrintStream ffile = new PrintStream(filename); for (int i = 0; i <= 2*kkul.n; i++) { ffile.println(kkul.y[i] + " " + kkul.U[i]+ " " + kkul.T[i] + " " + kkul.NUT[i]+ " " + kkul.LM[i]);} //((kkul.NUT[i]+kkul.NUT[i-1])*(kkul.U[i]-kkul.U[i-1])/(kkul.y[i]-kkul.y[i-1])/2 ));} // } catch (IOException Ex) {System.out.println(Ex.getMessage());} } public void run() { Thread me = Thread.currentThread(); while (relaxer == me) { relax(); try { Thread.sleep(200); } catch (InterruptedException e) { break; } } } synchronized void relax() { repaint(); } Image offscreen; Dimension offscreensize; Graphics offgraphics; public synchronized void update(Graphics g) { Dimension d = getSize(); if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) { offscreen = createImage(d.width, d.height); offscreensize = d; if (offgraphics != null) { offgraphics.dispose(); } offgraphics = offscreen.getGraphics(); offgraphics.setFont(getFont()); } offgraphics.setColor(getBackground()); offgraphics.fillRect(0, 0, d.width, d.height); offgraphics.setColor(Color.black) ; offgraphics.drawLine(d.width/4, d.height*8/10,(3*d.width)/4 , d.height*8/10); offgraphics.drawLine(d.width/4, d.height*8/10,d.width/4 , d.height*3/10); offgraphics.drawLine((3*d.width)/4, d.height*8/10,(3*d.width)/4 , d.height*3/10); offgraphics.drawLine(d.width/4, d.height*3/10,(3*d.width)/4, d.height*3/10); offgraphics.drawString(" y " , 4*d.width/5, d.height*8/10); //cherche le max double Tmax=0,Umax=0; for (int i = 0 ; i <= 2*kkul.n ; i++) {if(kkul.U[i]>Umax)Umax=kkul.U[i];} for (int i = 0 ; i <= 2*kkul.n ; i++) {if(Math.abs(kkul.T[i])>Tmax)Tmax=Math.abs(kkul.T[i]);} //frottement ... double Re=Umax*1./kkul.nu; double tau0=kkul.nu*kkul.U[1]/kkul.y[1]; double taues=0.03325*Umax*Umax*Math.pow(Re,-.25); offgraphics.drawString("Tmax(t="+(((int)(kkul.t*1000))/1000.)+")="+Tmax+ " Umax="+(((int)(Umax*1000))/1000.), d.width/10, d.height/12); offgraphics.drawString("Re=" +(int)(Re/100)*100 + " (0.03325*U^2 R^-(1/4))=" + ((int)(taues*1000))/1000. + " tau= " + ((int)(tau0*1000))/1000., 4*d.width/10, d.height/12); offgraphics.setColor(Color.red) ; //trace de la ture offgraphics.drawString(" T " , 4*d.width/5, d.height*5/10); for (int i = 1 ; i <= 2*kkul.n ; i++) { offgraphics.drawLine(d.width/4+ (int)(kkul.y[(i-1)]*d.width/4), d.height*8/10-(int)(d.height*kkul.T[i-1]/Tmax/2), d.width/4+ (int)(kkul.y[(i )]*d.width/4), d.height*8/10-(int)(d.height*kkul.T[ i ]/Tmax/2));} offgraphics.setColor(Color.blue) ; //trace de la vitesse offgraphics.drawString(" U" , 4*d.width/5, d.height*6/10); for (int i = 1 ; i <= 2*kkul.n ; i++) { offgraphics.drawLine(d.width/4+(int)(kkul.y[(i-1)]*d.width/4), d.height*8/10-(int)(d.height*kkul.U[i-1]/Umax/2), d.width/4+(int)(kkul.y[(i )]*d.width/4), d.height*8/10-(int)(d.height*kkul.U[ i ]/Umax/2));} offgraphics.setColor(Color.red) ; //trace de la ture log offgraphics.drawString("T(log(y))" , 1*d.width/7, d.height*12/14); double ylo=-Math.log(kkul.y[(1)]); for (int i = 2 ; i <= kkul.n ; i++) { offgraphics.drawLine(d.width/6+(int)(Math.log(kkul.y[(i-1)])*d.width/8/ylo), d.height*8/10-(int)(d.height*(kkul.T[i-1]-kkul.T[1])/4), d.width/6+(int)(Math.log(kkul.y[(i )])*d.width/8/ylo), d.height*8/10-(int)(d.height*(kkul.T[ i ]-kkul.T[1])/4));} offgraphics.setColor(Color.blue) ; //trace de la vitesse log offgraphics.drawString("U(log(y))" , 1*d.width/12, d.height*9/10); ylo=-Math.log(kkul.y[(1)]); for (int i = 2 ; i <= kkul.n ; i++) { offgraphics.drawLine(d.width/6+(int)(Math.log(kkul.y[(i-1)])*d.width/8/ylo), d.height*8/10-(int)(d.height*kkul.U[i-1]/Umax/4), d.width/6+(int)(Math.log(kkul.y[(i )])*d.width/8/ylo), d.height*8/10-(int)(d.height*kkul.U[ i ]/Umax/4));} offgraphics.setColor(Color.black) ; //axe log offgraphics.drawLine(d.width/6+(int)(Math.log(kkul.y[(kkul.n )])*d.width/8/ylo), d.height*8/10 , d.width/6+(int)(Math.log(kkul.y[(kkul.n )])*d.width/8/ylo), d.height*8/10-(int)(d.height*kkul.U[kkul.n ]/Umax/4)); offgraphics.drawLine(d.width/6+(int)(Math.log(kkul.y[(1)])*d.width/8/ylo), d.height*8/10 , d.width/6+(int)(Math.log(kkul.y[(kkul.n )])*d.width/8/ylo), d.height*8/10); offgraphics.setColor(Color.green) ; //trace de - offgraphics.drawString("- " , 3*d.width/4, d.height*7/10); for (int i = 2 ; i <= 2*kkul.n ; i++) { double vm1= ((kkul.NUT[i-1]+kkul.NUT[i-1-1])*(kkul.U[i-1]-kkul.U[i-1-1])/(kkul.y[i-1]-kkul.y[i-1-1])/2 ); double vm= ((kkul.NUT[i]+kkul.NUT[i-1])*(kkul.U[i]-kkul.U[i-1])/(kkul.y[i]-kkul.y[i-1])/2 ); offgraphics.drawLine(d.width/4+(int)(kkul.y[(i-1)]*d.width/4), d.height*8/10-(int)(d.height*vm1/2), d.width/4+(int)(kkul.y[(i )]*d.width/4), d.height*8/10-(int)(d.height*vm/2));} offgraphics.setColor(Color.pink) ; //trace de long melange offgraphics.drawString("long. melange" , 5*d.width/6, d.height*7/10); for (int i = 1 ; i <= 2*kkul.n ; i++) { double vm1= kkul.LM[i-1]; double vm= kkul.LM[i]; offgraphics.drawLine(d.width/4+(int)(kkul.y[(i-1)]*d.width/4), d.height*8/10-(int)(d.height*vm1/2), d.width/4+(int)(kkul.y[(i )]*d.width/4), d.height*8/10-(int)(d.height*vm/2));} //System.out.println("u'(0) "+ (0.001)*kkul.T[1]/kkul.dx/2+ " " +Math.pow(Math.abs((0.001)*kkul.T[1]/kkul.dx),.5)); for (int i = 1 ; i <= 2*kkul.n ; i++) { offgraphics.setColor(kolor.code(kkul.T[i]/Tmax)); offgraphics.fillRect(d.width/4+(int)(kkul.y[(i-1)]*d.width/4), d.height*8/10-(int)(d.height*(1.4/2)), 1+ (int)((kkul.y[(i)]-kkul.y[(i-1)])*d.width/4), d.height/10); } g.drawImage(offscreen, 0, 0, null); } //1.1 event handling public void mouseClicked(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} public void start() { relaxer = new Thread(this); relaxer.start(); } public void stop() { relaxer = null; } } public class guiChalTurb extends Applet implements ActionListener, ItemListener { GraphPanel panel; Panel controlPanel; JButton raz = new JButton("RAZ"); JButton calcul = new JButton("Calcul"); JButton pause = new JButton("Pause"); JButton kit = new JButton("Quitte"); //JSlider sliderR = new JSlider(JSlider.HORIZONTAL, 0, 250, 180); JLabel lab = new JLabel("gros coucou rouge
et ligne en italique gras ", JLabel.CENTER) ; JTextField saizie= new JTextField ("0.10"); Choice choix = new Choice(); Choice choise = new Choice(); JLabel labo = new JLabel(" ", JLabel.CENTER) ; JTextField saizio= new JTextField ("0.0001");//0.00001 public void init() { setLayout(new BorderLayout()); panel = new GraphPanel(this); add("Center", panel); controlPanel = new Panel(); add("South", controlPanel); //controlPanel.add(sliderR); controlPanel.add(lab) ; lab.setText(" dt= ") ; controlPanel.add(saizie); raz.setLocation(10,10);raz.setSize(220,23); controlPanel.add(raz); raz.addActionListener(this); controlPanel.add(calcul); calcul.addActionListener(this); controlPanel.add(pause); pause.addActionListener(this); String champ="nu="; controlPanel.add(labo) ; labo.setText(champ) ; controlPanel.add(saizio); choise.addItemListener(this); controlPanel.add(choise); choise.addItem("laminaire");//0 choise.addItem("turbul Prandtl "); choise.addItem("turb. van Driest"); choise.addItem("turb. Nikuradse"); controlPanel.add(new JLabel("C.L.", Label.RIGHT)); choix.addItemListener(this); controlPanel.add(choix); choix.addItem("T(0)=0, T(1)=0 ");//0 choix.addItem("T(0)=0, T(1)=1 "); choix.addItem("T(0)=1, T(1)=0 "); choix.addItem("T(0)=1, T(1)=1 ");//3 choix.addItem("T(0)=1, T'(1)=0 "); choix.addItem("T(0)=0, T'(1)=0 "); choix.addItem("T'(0)=T(0),T(1)=1 "); choix.addItem("T'(0)=T(0),T'(1)=0"); controlPanel.add(kit); kit.addActionListener(this); panel.initout(); } public void destroy() { remove(panel); remove(controlPanel); } public void start() { razz(); panel.start(); } public void stop() { panel.stop(); } public void razz() { String ch=saizio.getText(); double z =Double.parseDouble(ch); panel.kkul.nu=z; panel.kkul.prems(); synchronized (panel.kkul) { panel.kkul.pleaseWait = true;} change_it(); System.out.println("Init" ); } public void actionPerformed(ActionEvent e) { Object src = e.getSource(); if (src == raz) { razz(); System.out.println("RAZ, t=" + panel.kkul.t); return; } if (src == calcul) { String ch=saizie.getText(); double z =Double.parseDouble(ch); System.out.println("calcul, t=" + panel.kkul.t + "................dt =" + z ); panel.kkul.setdt(z); change_it(); synchronized (panel.kkul) { panel.kkul.pleaseWait = false; panel.kkul.notify();} return; } if (src == pause) { synchronized (panel.kkul) { panel.kkul.pleaseWait = true;} panel.sauveparam(); } if (src == kit) { destroy(); System.out.println("kenavo"); System.exit(0) ; } } public void itemStateChanged(ItemEvent e) { change_it(); } public void change_it(){ int ined=choix.getSelectedIndex(); String ch=saizie.getText(); double z =Double.parseDouble(ch); ch=saizio.getText(); z =Double.parseDouble(ch); System.out.println("param " + z ); panel.kkul.nu=z; if (ined==0 ){panel.kkul.cl00(); ;} if (ined==1 ){panel.kkul.cl01(); ;} if (ined==2 ){panel.kkul.cl10(); ;} if (ined==3 ){panel.kkul.cl11(); ;} if (ined==4 ){panel.kkul.cl1s(); ;} if (ined==5 ){panel.kkul.cl0s(); ;} if (ined==6){panel.kkul.Bi=panel.kkul.nu; panel.kkul.clB1(); ;} if (ined==7){panel.kkul.Bi=.100; panel.kkul.clBs(); ;} int jned=choise.getSelectedIndex(); if (jned==0 ){panel.kkul.turb=0;panel.kkul.change();} if (jned==1 ){panel.kkul.turb=1;panel.kkul.change();} if (jned==2 ){panel.kkul.turb=2;panel.kkul.change();} if (jned==3 ){panel.kkul.turb=3;panel.kkul.change();} } /////////////////////////////////////////////////////////// public static void main(String args[]) { Frame f = new Frame("guiChaleur Implicite par PYL"); guiChalTurb guiChalTurb = new guiChalTurb(); //System.out.println(args[]); guiChalTurb.init(); guiChalTurb.start(); f.add("Center", guiChalTurb); f.setSize(840, 400); f.setLocation(200, 200); f.show(); } public String getAppletInfo() { return "Calcul interactif par PYL. \n 'java guiGraph' \nou applet."; } }