# g2nmin-direct
# Maple code for a direct computation of hyperKaehler potentials
# for the next-to-minimal nilpotent orbit in G2
# by
# Piotr Kobak and Andrew Swann
# 
# This code is generated from a noweb source file g2.nw
# See that for further description and comments.  
# RCS info from g2.nw:
# $Id: g2.nw,v 1.4 2000/01/05 14:10:18 swann Exp $
read `g2-gen`;
print(`Our base point is`);
X := evalm( sl3([[0,s,0],[0,0,0],[0,0,0]])
            + V10([t*sqrt(2),0,0]) );
print(`Defining J`);
sX := RConj(X):
XsX := so7Lb(X,sX):
XsXX := evalm(-so7Lb(X,XsX)):
XsXXsX := so7Lb(X,so7Lb(sX,XsX)):
J := proc(XiA,r) 
    local sXiA, XsXiA, IpsXiAX, IpsXiAXsXX;
    global X, sX, XsX, XsXX, XsXXsX, rho1, rho2, rho11, rho12, rho22;
        if (nargs = 1) then
            sXiA := Conj(XiA);
        else
            sXiA := RConj(XiA);
        fi;
        XsXiA := so7Lb(X,sXiA);
        IpsXiAX := MetricForm(sXiA,X,7);
        IpsXiAXsXX := MetricForm(sXiA,XsXX,7);
    evalm(-2*rho1*XsXiA
          +4*rho2*so7Lb(X, evalm(so7Lb(sXiA,XsX)+so7Lb(sX,XsXiA)))
          -2*(rho11*IpsXiAX - 2*rho12*IpsXiAXsXX) * XsX
          +4*(rho12*IpsXiAX - 2*rho22*IpsXiAXsXX) * XsXXsX );
end:
J2P := proc(xA,r)
    if (nargs = 1) then
        evalm(J(J(xA))+xA);
    else
        evalm(J(J(xA,1),1)+xA);
    fi;
end:
print(`Computing change of variables`);
eta1 := simplify(MetricForm(X,RConj(X),7));
eta2 := simplify(-MetricForm(XsX,XsX,7));
D1rho := {  rhos=diff( rho(z1(s,t),z2(s,t)),s),
          rhot=diff( rho(z1(s,t),z2(s,t)),t)}:
D1rho := subs( { D[1](rho)(z1(s,t),z2(s,t))=rho1,
        D[2](rho)(z1(s,t),z2(s,t))=rho2
      }, D1rho ):
D1rho := simplify(subs({z1(s,t)=eta1,z2(s,t)=eta2}, D1rho)):
D1rhost:=simplify(solve(D1rho,{rho1,rho2})):
D2rho := { rhoss=diff(rho(z1(s,t),z2(s,t)),s,s),
         rhost=diff(rho(z1(s,t),z2(s,t)),s,t),
         rhott=diff(rho(z1(s,t),z2(s,t)),t,t)
        }:
D2rho := subs({ D[1](rho)(z1(s,t),z2(s,t))=rho1,
              D[2](rho)(z1(s,t),z2(s,t))=rho2,
              D[1,2](rho)(z1(s,t),z2(s,t))=rho12,
              D[2,1](rho)(z1(s,t),z2(s,t))=rho12,
              D[1,1](rho)(z1(s,t),z2(s,t))=rho11,
              D[2,2](rho)(z1(s,t),z2(s,t))=rho22
            }, D2rho):
D2rho := simplify(subs({z1(s,t)=eta1,z2(s,t)=eta2}, D2rho)):
D2rho := subs(D1rhost,D2rho):
D2rhost:=simplify(solve(D2rho,{rho11,rho12,rho22})):
dsdt := D1rhost union D2rhost:
J2stP := proc(xA,r)
    local out;
    global dsdt;
    if (nargs = 1) then
        out := subs(dsdt,J2P(xA));
    else
        out := subs(dsdt,J2P(xA,1));
    fi;
    map(expand,out);
end:
