# Many functions related to the hyperbolic family treat the parameter a_P # as a symbol. One might also want to work with a numeric value of a_P. # For that, we can invoke set_a_P0(1/10) (for example). This will set # a_P0 to the exact rational value 1/10, and a_P1 to the approximate value # 0.1. It will also set a long list of other global variables. Typically, # there is an existing global variable, say foo, whose value involves # a_P, and the function set_a_P0(1/10) will set foo0 and foo1 to the # values obtained by substituting a_P = 1/10 or a_P = 0.1 in foo. set_a_P0 := proc(a) global a_P0,a_P1,A_P0,A_P1,r_P0,r_P1,P_rel0,P_rel1, v_P0,v_P1,c_P0,c_P1,q_Ep0,q_Em0,is_in_Ep0_0,is_in_Em0_0, P_to_Ep0_0,P_to_Em0_0,Ep0_0_e,Em0_0_e,Ep0_0_trans,Em0_0_trans, Wg2p0,Wg3p0,WPp0,WPPp0,Wg2m0,Wg3m0,WPm0,WPPm0, C_to_Ep0_0,C_to_Em0_0,c_Ep0_0,c_Em0_0, latt_a0,latt_b0,latt_c0,latt_d0,latt_e0,latt_f0, v_Ep0_0,v_Em0_0; local i,wz; a_P0 := a; #@ a_P0 a_P1 := evalf(a); #@ a_P1 A_P0 := subs(a_P=a_P0,A_P); #@ A_P0 A_P1 := evalf(A_P0); #@ A_P1 r_P0 := subs(a_P=a_P0,r_P); #@ r_P0 r_P1 := subs(a_P=a_P1,r_P); #@ r_P1 for i from 0 to 3 do P_rel0[i] := subs(a_P=a_P0,P_rel[i]); #@ P_rel0 P_rel1[i] := subs(a_P=a_P1,P_rel[i]); #@ P_rel1 od; for i from 0 to 13 do v_P0[i] := simplify(subs(a_P=a_P0,v_P[i])); #@ v_P0 v_P1[i] := evalf(v_P0[i]); #@ v_P1 od; for i from 0 to 8 do c_P0[i] := unapply(simplify(subs(a_P=a_P0,c_P[i](t))),t); #@ c_P0 c_P1[i] := unapply(evalf(c_P0[i](t)),t); #@ c_P1 c_Ep0_0[i] := unapply(simplify(subs(a_P=a_P0,c_Ep_0[i](t))),t); #@ c_Ep0_0 c_Em0_0[i] := unapply(simplify(subs(a_P=a_P0,c_Em_0[i](t))),t); #@ c_Em0_0 od; q_Ep0 := unapply(eval(subs(a_P=a_P0,q_Ep(x))),x); #@ q_Ep0 q_Em0 := unapply(eval(subs(a_P=a_P0,q_Em(x))),x); #@ q_Em0 is_in_Ep0_0 := unapply(eval(subs(a_P=a_P0,is_in_Ep_0(YX))),YX); #@ is_in_Ep0_0 is_in_Em0_0 := unapply(eval(subs(a_P=a_P0,is_in_Em_0(YX))),YX); #@ is_in_Em0_0 P_to_Ep0_0 := unapply(eval(subs(a_P=a_P0,P_to_Ep_0([wz[1],wz[2]]))),wz); #@ P_to_Ep0_0 P_to_Em0_0 := unapply(eval(subs(a_P=a_P0,P_to_Em_0([wz[1],wz[2]]))),wz); #@ P_to_Em0_0 for i from 0 to 3 do Ep0_0_e[i] := subs(a_P=a_P0,Ep_0_e[i]); #@ Ep0_0_e[i] Em0_0_e[i] := subs(a_P=a_P0,Em_0_e[i]); #@ Em0_0_e[i] Ep0_0_trans[i] := unapply(eval(subs(a_P=a_P0,Ep_0_trans[i](YX))),YX); #@ Ep0_0_trans[i] Em0_0_trans[i] := unapply(eval(subs(a_P=a_P0,Em_0_trans[i](YX))),YX); #@ Em0_0_trans[i] od: Wg2p0 := subs(a_P=a_P0,Wg2p); #@ Wg2p0 Wg3p0 := subs(a_P=a_P0,Wg3p); #@ Wg3p0 WPp0 := unapply(subs(a_P=a_P0,WPp(z)),z); #@ WPp0 WPPp0 := unapply(subs(a_P=a_P0,WPPp(z)),z); #@ WPPp0 C_to_Ep0_0 := unapply(subs(a_P=a_P0,C_to_Ep_0(z)),z); #@ C_to_Ep0_0 Wg2m0 := subs(a_P=a_P0,Wg2m); #@ Wg2m0 Wg3m0 := subs(a_P=a_P0,Wg3m); #@ Wg3m0 WPm0 := unapply(subs(a_P=a_P0,WPm(z)),z); #@ WPm0 WPPm0 := unapply(subs(a_P=a_P0,WPPm(z)),z); #@ WPPm0 C_to_Em0_0 := unapply(subs(a_P=a_P0,C_to_Em_0(z)),z); #@ C_to_Em0_0 # The code above should be correct, but is affected by a bug in Maple. # We therefore override it as follows: WPPm0 := proc(z) local e,u0,u1,v0,v1; u0 := WPm0(z); e := 10.^(-50); u1 := WPm0(z + e); v0 := -sqrt(2.)*I*(u1 - u0)/e; v1 := sqrt(4*u0^3-Wg2m0*u0-Wg3m0); if Re(v1/v0) < 0 then v1 := -v1; fi; return(v1); end: C_to_Em0_0 := (z) -> [I*WPPm0(z)/(WPm0(z)+1/3)^2/sqrt(2),1/(WPm0(z)+1/3)]; # end of bugfix. latt_a0 := evalf(subs(a_P=a_P0,latt_a)); #@ latt_a0 latt_b0 := evalf(subs(a_P=a_P0,latt_b)); #@ latt_b0 latt_c0 := evalf(subs(a_P=a_P0,latt_c)); #@ latt_c0 latt_d0 := evalf(subs(a_P=a_P0,latt_d)); #@ latt_d0 latt_e0 := evalf(subs(a_P=a_P0,latt_e)); #@ latt_e0 latt_f0 := evalf(subs(a_P=a_P0,latt_f)); #@ latt_f0 for i from 0 to 15 do v_Ep0_0[i] := subs(a_P=a_P0,v_Ep_0[i]); #@ v_Ep0_0 od: for i from 0 to 13 do v_Em0_0[i] := subs(a_P=a_P0,v_Em_0[i]); #@ v_Em0_0 od: NULL; end: #set_a_P0(1/10); set_a_P0(0.09835622956839951251364823009734668690409027293496644792693847749752317746490473246479165607386090621);