#
#This file generates harmonic singular functions of the form
#R^nPn(z/R)*ln(R+z)+Wn(r,z). These functions are typically
#used for problems of the half-space z>0.
#To use them, uncomment lines in each block up to and including
#the required function. Higher order functions can be
#generated using a similar procedure.
#
#
#Legendre polynomials as functions of x
#
P0:=1;
P01:=x;
P02:=simplify((3*x*P01-1*P0)/2);
P03:=simplify((5*x*P02-2*P01)/3);
#P04:=simplify((7*x*P03-3*P02)/4);
#P05:=simplify((9*x*P04-4*P03)/5);
#P06:=simplify((11*x*P05-5*P04)/6);
#P07:=simplify((13*x*P06-6*P05)/7);
#P08:=simplify((15*x*P07-7*P06)/8);
#P09:=simplify((17*x*P08-8*P07)/9);
#
#Simplified forms of Legendre polynomials.
#
P1:=unapply(P01,x);
P2:=unapply(simplify(P02),x);
P3:=unapply(simplify(P03),x);
#P4:=unapply(simplify(P04),x);
#P5:=unapply(simplify(P05),x);
#P6:=unapply(simplify(P06),x);
#P7:=unapply(simplify(P07),x);
#P8:=unapply(simplify(P08),x);
#P9:=unapply(simplify(P09),x);
#
R:=sqrt(r^2+z^2);
#
#Harmonic axisymmetric bounded potentials in terms of r,z
#
F1:=expand(simplify(R*P1(z/R)));
F2:=expand(simplify(R^2*P2(z/R)));
F3:=expand(simplify(R^3*P3(z/R)));
#F4:=expand(simplify(R^4*P4(z/R)));
#F5:=expand(simplify(R^5*P5(z/R)));
#F6:=expand(simplify(R^6*P6(z/R)));
#F7:=expand(simplify(R^7*P7(z/R)));
#F8:=expand(simplify(R^8*P8(z/R)));
#F9:=expand(simplify(R^9*P9(z/R)));
#
#Functions of the form R^n*ln(R+z)+W_n.
#
#Only even powers of r can occur.
#Terms with (for example) R^3*z^2 are implicitly included with R*z^4 
#and R*z^2*r^2.
#There exists a bounded polynomial with any power of z (z^n) as a leading
#term, so no term with just z^n is needed. More generally, we can add
#in an arbitrary multiplier of Fn as required.
#
W0:=ln(R+z);
W1:=z*ln(R+z)-R;
W2:=F2*ln(R+z)+C21*R*z+C22*r^2;
W3:=F3*ln(R+z)+C31*R*z^2+C32*R*r^2+C33*z*r^2;
#W4:=F4*ln(R+z)+C41*R*z^3+C42*R*z*r^2+C43*z^2*r^2+C44*r^4;
#W5:=F5*ln(R+z)+C51*R*z^4+C52*R*z^2*r^2+C53*R*r^4+C54*z^3*r^2+C55*z*r^4;
#W6:=F6*ln(R+z)+C61*R*z^5+C62*R*z^3*r^2+C63*R*z*r^4+C64*z^4*r^2
#+C65*z^2*r^4+C66*r^6;
#W7:=F7*ln(R+z)+C71*R*z^6+C72*R*z^4*r^2+C73*R*z^2*r^4+C74*R*r^6
#+C75*z^5*r^2+C76*z^3*r^4+C77*z*r^6;
#W8:=F8*ln(R+z)+C81*R*z^7+C82*R*z^5*r^2+C83*R*z^3*r^4+C84*R*z*r^6
#+C85*z^6*r^2+C86*z^4*r^4+C87*z^2*r^6+C88*r^8;
#W9:=F9*ln(R+z)+C91*R*z^8+C92*R*z^6*r^2+C93*R*z^4*r^4+C94*R*z^2*r^6
#+C95*R*r^8+C96*z^7*r^2+C97*z^5*r^4+C98*z^3*r^6+C99*z*r^8;
#
#Apply the Laplace operator
#
#
DW1:=simplify(diff(W1,r,r)+(1/r)*diff(W1,r)+diff(W1,z,z));
DW2:=unapply(simplify(diff(W2,r,r)+(1/r)*diff(W2,r)+diff(W2,z,z))*(R+z)^2*R,r,z);
DW3:=unapply(simplify(diff(W3,r,r)+(1/r)*diff(W3,r)+diff(W3,z,z))*(R+z)^2*R*r,r,z);
#DW4:=unapply(simplify(diff(W4,r,r)+(1/r)*diff(W4,r)+diff(W4,z,z))*(R+z)^2*R,r,z);
#DW5:=unapply(simplify(diff(W5,r,r)+(1/r)*diff(W5,r)+diff(W5,z,z))*(R+z)^2*R,r,z);
#DW6:=unapply(simplify(diff(W6,r,r)+(1/r)*diff(W6,r)+diff(W6,z,z))*(R+z)^2*R,r,z);
#DW7:=unapply(simplify(diff(W7,r,r)+(1/r)*diff(W7,r)+diff(W7,z,z))*(R+z)^2*R,r,z);
#DW8:=unapply(simplify(diff(W8,r,r)+(1/r)*diff(W8,r)+diff(W8,z,z))*(R+z)^2*R,r,z);
#DW9:=unapply(simplify(diff(W9,r,r)+(1/r)*diff(W9,r)+diff(W9,z,z))*(R+z)^2*R,r,z);
#
#Choose constants to make functions harmonic.
#
#solution1:=solve({coeff(DW1,r,0)=0},{C11});
solution2:=solve({DW2(1,0)=0,DW2(0,1)=0},{C21,C22});
solution3:=solve({DW3(1,0)=0,DW3(2,1)=0,DW3(1,2)=0},
{C31,C32,C33});
#solution4:=solve({DW4(1,0)=0,DW4(2,1)=0,DW4(1,2)=0,DW4(3,1)=0},
#{C41,C42,C43,C44});
#solution5:=solve({DW5(1,0)=0,DW5(2,1)=0,DW5(1,2)=0,DW5(3,1)=0,DW5(1,3)=0},
#{C51,C52,C53,C54,C55});
#solution6:=solve({DW6(1,0)=0,DW6(2,1)=0,DW6(1,2)=0,DW6(3,1)=0,
#DW6(1,3)=0,DW6(1,4)=0},{C61,C62,C63,C64,C65,C66});
#solution7:=solve({DW7(1,0)=0,DW7(2,1)=0,DW7(1,2)=0,DW7(3,1)=0,
#DW7(1,3)=0,DW7(0,1)=0,DW7(1,1)=0},{C71,C72,C73,C74,C75,C76,C77});
#solution8:=solve({DW8(1,0)=0,DW8(2,1)=0,DW8(1,2)=0,DW8(3,1)=0,
#DW8(1,3)=0,DW8(0,1)=0,DW8(1,1)=0,DW8(1,4)=0},{C81,C82,C83,C84,C85,C86,C87,C88});
#solution9:=solve({DW9(1,0)=0,DW9(2,1)=0,DW9(1,2)=0,DW9(3,1)=0,
#DW9(1,3)=0,DW9(0,1)=0,DW9(1,1)=0,DW9(1,4)=0,DW9(4,1)=0},
#{C91,C92,C93,C94,C95,C96,C97,C98,C99});
#
#Singular axisymmetric harmonic functions with ln(R+z) multipliers
#
S0:=W0;
S1:=W1;
S2:=subs(solution2, W2);
S3:=subs(solution3, W3);
#S4:=subs(solution4, W4);
#S5:=subs(solution5, W5);
#S6:=subs(solution6, W6);
#S7:=subs(solution7, W7);
#S8:=subs(solution8, W8);
#S9:=subs(solution9, W9);
#
#Verify that they are harmonic.
#
#dW11:=simplify(diff(S1,r,r)+(1/r)*diff(S1,r)+diff(S1,z,z));
#dW21:=simplify(diff(S2,r,r)+(1/r)*diff(S2,r)+diff(S2,z,z));
#dW31:=simplify(diff(S3,r,r)+(1/r)*diff(S3,r)+diff(S3,z,z));
#dW41:=simplify(diff(S4,r,r)+(1/r)*diff(S4,r)+diff(S4,z,z));
#dW51:=simplify(diff(S5,r,r)+(1/r)*diff(S5,r)+diff(S5,z,z));
#dW61:=simplify(diff(S6,r,r)+(1/r)*diff(S6,r)+diff(S6,z,z));
#dW71:=simplify(diff(S7,r,r)+(1/r)*diff(S7,r)+diff(S7,z,z));
#dW81:=simplify(diff(S8,r,r)+(1/r)*diff(S8,r)+diff(S8,z,z));
#dW91:=simplify(diff(S9,r,r)+(1/r)*diff(S9,r)+diff(S9,z,z));

