// check_sphere_deriv.java sphereical coordinates // x = r cos(theta) sin(phi) 0 < theta < 2 Pi // y = r sin(theta) sin(phi) 0 < phi < Pi restricted for derivatives // z = r cos(phi) r < 0 restricted for derivatives // r = sqrt(x^2+y^2+z^2) // theta = arctan(y,x) if theta<0 then theta = 2 Pi - theta // phi = arctan(sqrt(x^2+y^2),z) // // compute del U(radius,theta,phi) r=radius, t=theta angle, p=phi angle // del U = (d/dr U, 1/(r*sin(p)) d/dt U, (1/r) d/dp U) // // compute del^2 U(radius,theta,phi) r=radius, t=theta angle, p=phi angle // del^2 U = (1/r^2) d/dr(r^2 d/dr U) + 1/(r^2 sin(p)^2) d^2/dt^2 U + // (1/(r^2 sin(p) d/dp(sin(p) d/dp U) // = (2/r) d/dr U + d^2/dr^2 U + (1/(r^2 sin(p)^2) d^2/dt^2 U + // (cos(p)/(r^2 sin(t)) d/dp U + (1/(r^2)) d^2/dp^2 U import java.text.*; import java.io.*; // uses nuderiv.java public class check_sphere_deriv { double Pi = 3.1415926535897932384626433832795028841971; final int Nr = 5; double Rmin = 0.3; double Rmax = 1.0; final int Nt = 7; double Tmin = 0.1; double Tmax = 300.0*Pi/180.0; final int Np = 5; double Pmin = 0.2; double Pmax = Pi-0.5; double Rg[] = new double[Nr]; // r grid values double Tg[] = new double[Nt]; // theta grid values double Pg[] = new double[Np]; // p grid values final int Nrtp = Nr*Nt*Np; double Ua[] = new double[Nrtp]; double Cr[] = new double[Nr]; // first deriv wrt r double Crr[] = new double[Nr]; // second deriv wrt r double Ct[] = new double[Nt]; // first deriv wrt t double Ctt[] = new double[Nt]; // second deriv wrt t double Cp[] = new double[Np]; // first deriv wrt p double Cpp[] = new double[Np]; // second deriv wrt p double R, T, P, Ana, Cmp, Err; double Urv, Urrv, Utv, Uttv, Upv, Uppv; // computed derivatives double x, y, z, rtr, ttr, ptr; double Maxerrur=0.0, Maxerrurr=0.0, Maxerrut=0.0, Maxerrutt=0.0; double Maxerrup=0.0, Maxerrupp=0.0, Maxerr=0.0, Maxerrlap=0.0; check_sphere_deriv() { System.out.println("check_sphere_deriv.java starting"); System.out.println("r gird values, not equally spaced"); Rg[0] = 0.3; Rg[1] = 0.5; Rg[2] = 0.7; Rg[3] = 0.9; Rg[4] = 1.0; for(int I=0; I