import ChaosDemos.*; import java.awt.*; import java.util.*; //******************************************************************** /** * Diagnostics for Odes
* Base class for subclassing * @version 24 October 1997 * @author Michael Cross */ //******************************************************************** public class OdesDiagnostics { /** number of variables (icluding time) */ int nVariables; /** math constants */ static final double Pi=Math.PI; static final double Pi2=2*Pi; /* flags */ /** true if user has chosen range with mouse */ boolean setAxesRange=false; /** true if transient is to be run on call to restart() */ boolean runTrans=false; public boolean wrapZ=false; public double wrapZValue; public boolean wrapY=false; public double wrapYValue; public boolean wrapX=false; public double wrapXValue; public boolean allowDrag=false; /** variable to be plotted on x-axis */ int plot_x=1; /** variable to be plotted on y-axis */ int plot_y=2; /** number of iterations to eliminate transient */ int ntrans=0; /** number of curves */ int ncurve=-1; /** index of first data curve */ int ncurve1; /** index of second data curve */ int ncurve2; /** number of iterations */ int iterations=0; /** delay in graph update */ int delay; /** time step (after reduction by delay) */ double dt=0.02; /** input time step */ double dtp=0.02; /** time in evolution */ double t=0.; /** error estimates from solver */ double err,errp; /** iterated variable (icluding time) */ double[] x={0.,0.,0.,0.}; /** starting value of x */ double[] x0={0.,2.,5.,20.}; /** equation parameters {a,b,c,d} */ double[] parameters; /** Number of equation parameters */ public int nParameters; /** function parameter */ double a; /** function parameter */ double b; /** function parameter */ double c; /** function parameter */ double d; /** transient time */ double trans; /** Range of plot */ double xmin=0,xmax=1,ymin=0,ymax=1; String xTitle; String yTitle; /** parent class */ Odes parent; //****************************************************************** /** * @param inParent parent class * @see Map1D */ //****************************************************************** public OdesDiagnostics(Odes inParent) { parent=inParent; nVariables=parent.nVariables; } //******************************************************************** /** * Updates parameters from the text controls in parent class */ //******************************************************************** public void updateParameters() { int i; dtp=parent.parameters.parseTextField(4, dtp, true); dt=dtp/((double)delay); plot_x=parent.parameters.parseTextField(5, plot_x,0,3); plot_y=parent.parameters.parseTextField(6, plot_y,0,3); x[0]=0.; for(i=1;i<=3;i++) { x0[i]=parent.variables.parseTextField(i-1,x0[i]); x[i]=x0[i]; } trans=parent.variables.parseTextField(3,trans); ntrans=(int)(trans/dtp); if(ntrans>0) runTrans=true; } //********************************************************************* /** * Restarts */ //********************************************************************* public boolean restart() { return true; } //********************************************************************* /** * Iterates Map equations and updates graph * @return true if iteration successful */ //********************************************************************* public boolean iterate() { return true; } //********************************************************************** /** * Sets default values of parameters depending on plot type */ //********************************************************************** public void setDefaults() { } //********************************************************************** /** * Resets x-range to 0 < x < 1 */ //********************************************************************** public void resetRange() { xmin=0.; xmax=1.; ymin=0.; ymax=1.; setAxesRange=false; } //********************************************************************** /** * Action to perform on mouse drag. Default is to set range of axes * and restart */ //********************************************************************** public void respondToDrag(double x1, double x2, double y1, double y2) { xmin=x1; xmax=x2; ymin=y1; ymax=y2; setAxesRange=true; parent.restart(); } //********************************************************************** /** * Action to perform on mouse click. Default is display coordinates * of point */ //********************************************************************** public void respondToClick(double x, double y) { alertDialog alert = new alertDialog(parent, " Point is ("+(float)x+","+(float)y+")"); } //********************************************************************** /** * Shifts x to 0shift) { x=x-shift; } while (x<0.) { x=x+shift; } return x; } //********************************************************************** /** * Sets delay for movie iteration */ //********************************************************************** public void setDelay(int inDelay) { delay=inDelay; } public void setWrap(int i, double wrap) { switch(i) { case 1: wrapX=true; wrapXValue=wrap; break; case 2: wrapY=true; wrapYValue=wrap; break; case 3: wrapZ=true; wrapZValue=wrap; break; default: break; } } boolean eliminateTransient() { try { parent.status.setText("Eliminating transient..."); for(int i=0;i