// check_cylinder_deriv.java cylindrical coordinates // x = r cos theta 0 <= theta < 2 Pi // y = r sin theta r < 0 restriction for derivative // z = z z double // r = sqrt(x^2+y^2) // theta = arctan(y,x) if theta<0 theta = 2 Pi + arctan(y,x) // z = z // // compute del U(radius,theta,z) r=radius, t=theta angle, z=height // del U = (d/dr U, 1/r d/dt U, d/dz U) // // compute del^2 U(radius,theta,z) r=radius, t=theta angle, z=height // del^2 U = d/dr(r d/dr U) + 1/r^2 d^2/dt^2 U + d^2/dz^2 U // = 2/r d/dr U + d^2/dr^2 U + 1/r^2 d^2/dt^2 U + d^2/dz^2 U // needs nuderiv.java public class check_cylinder_deriv { final int Nr = 5; // number of radius final int Nt = 7; // number of angles final int Nz = 5; // number of Z coordinates public check_cylinder_deriv() { double Pi = 3.1415926535897932384626433832795028841971; double Rmin = 0.2; double Rmax = 1.0; double Hr = (Rmax-Rmin)/(double)(Nr-1); double Tmin = 0.0; double Tmax = 300.0*Pi/180.0; // Ht not applicable double Zmin = -1.0; double Zmax = 1.0; double Hz = (Zmax-Zmin)/(double)(Nz-1); double Rg[] = new double[Nr]; // r grid values 0..Nr-1 double Tg[] = new double[Nt]; // theta grid values double Zg[] = new double[Nz]; // z grid values final int Nrtz = Nr*Nt*Nz; double Ua[] = new double[Nrtz]; // U is solution // Ua solution actual for checking double Cr[] = new double[Nr]; // coefficients of first deriv wrt r double Crr[] = new double[Nr]; // coefficients of second deriv wrt r double Ctt[] = new double[Nt]; // coefficients of second deriv wrt t double Czz[] = new double[Nz]; // coefficients of second deriv wrt z double R, T, Z, Ana, Cmp, Err; double Urv, Urrv, Uttv, Uzzv; // computed derivatives double Maxerrur = 0.0, Maxerrurr = 0.0, Maxerrutt = 0.0; double Maxerruzz = 0.0, Maxerr = 0.0; double X, Y, Tmp; System.out.println("check_cylinder_deriv.java starting"); System.out.println("r gird values, not necessarily equally spaced"); for(int i=0; i0.0001) System.out.println("Theta error"); // Z = Z } // k } // j } // i for(int i=0; i