(*                                  Ren-Cang Li, June 1, 1996
                                    na.rcli@na-net.ornl.gov *)

(* Initialization and Rules *)
Cmt[x_,x_]:=0;
Cmt[a___, 0,             b___] :=     0;
Cmt[a___, x_+y_,         b___] :=     Cmt[a,x,b]+Cmt[a,y,b];
Cmt[a___, n_ x_Cmt,      b___] := n   Cmt[a,x,b];
Cmt[a___, n_?NumberQ x_, b___] := n   Cmt[a,x,b];
Cmt[a___, t^n_ x_,       b___] := t^n Cmt[a,x,b];
Cmt[a___, x_ y_,         b___] :=     Cmt[a,Expand[x y],b];
Cmt[a___, n_ X[i_],      b___] := n   Cmt[a,X[i],b];

termaction[xx]:=x; termaction[yy]:=y;
termaction[n_?NumberQ x_]:=n termaction[x];
termaction[x_Cmt]:=Expand[Normal[Series[Cmt[termaction[x[[1]]],
                                 termaction[x[[2]]]],{t,0,11}]]];

Cmt[X[3],X[1]]:=-Cmt[X[1],X[3]];
Cmt[X[5],X[1]]:=-Cmt[X[1],X[5]];
Cmt[X[7],X[1]]:=-Cmt[X[1],X[7]];
Cmt[X[9],X[1]]:=-Cmt[X[1],X[9]];
Cmt[X[5],X[3]]:=-Cmt[X[3],X[5]];
Cmt[X[7],X[3]]:=-Cmt[X[3],X[7]];

Cmt[X[3],Cmt[X[1],Cmt[X[1],X[3]]]]:=Cmt[X[1],Cmt[X[3],Cmt[X[1],X[3]]]];

Cmt[X[5],Cmt[X[1],Cmt[X[1],Cmt[X[1],X[3]]]]]:=Expand[
                -  Cmt[X[1],Cmt[X[1],Cmt[X[1],Cmt[X[3],X[5]]]]]
                +  Cmt[X[3],Cmt[X[1],Cmt[X[1],Cmt[X[1],X[5]]]]]
                -3 Cmt[X[1],Cmt[X[3],Cmt[X[1],Cmt[X[1],X[5]]]]]
                +3 Cmt[X[1],Cmt[X[1],Cmt[X[3],Cmt[X[1],X[5]]]]] ];

Cmt[X[5],Cmt[X[1],Cmt[X[1],X[3]]]]:=Expand[
     -   Cmt[X[1],Cmt[X[1],Cmt[X[3],X[5]]]]
     -   Cmt[X[3],Cmt[X[1],Cmt[X[1],X[5]]]] 
     + 2 Cmt[X[1],Cmt[X[3],Cmt[X[1],X[5]]]] ];

Cmt[X[1],Cmt[X[1],Cmt[X[1],Cmt[X[3],Cmt[X[1],X[3]]]]]]:=Expand[
     -   Cmt[X[3],Cmt[X[1],Cmt[X[1],Cmt[X[1],Cmt[X[1],X[3]]]]]] 
     + 2 Cmt[X[1],Cmt[X[3],Cmt[X[1],Cmt[X[1],Cmt[X[1],X[3]]]]]] ];

Cmt[x_Cmt,X[i_]]:=-Cmt[X[i],x];
Cmt[x_Cmt,Cmt[X[i_],X[j_]]]:=-Cmt[X[i],Cmt[X[j],x]]-Cmt[X[j],Cmt[x,X[i]]];
Cmt[Cmt[X[i_],X[j_]],z_Cmt]:=-Cmt[Cmt[X[j],z],X[i]]-Cmt[Cmt[z,X[i]],X[j]];

Cmt[X[5],Cmt[X[1],X[3]]]:=-Cmt[X[1],Cmt[X[3],X[5]]]-Cmt[X[3],Cmt[X[5],X[1]]];
Cmt[X[7],Cmt[X[1],X[3]]]:=-Cmt[X[1],Cmt[X[3],X[7]]]-Cmt[X[3],Cmt[X[7],X[1]]];

<<DefFun;

Print["Compute term1"]
y=( t    a1    X[1]
   +t^3  a3    X[3] 
   +t^4  b4  b4Cmt
   +t^5  a5    X[5]
   +t^5  b5  b5Cmt
   +t^6  b6  b6Cmt
   +t^6  c6  c6Cmt
   +t^7  a7    X[7]
   +t^7  b7  b7Cmt
   +t^7  c7  c7Cmt
   +t^7  d7  d7Cmt
   +t^8  b8  b8Cmt
   +t^8  c8  c8Cmt
   +t^8  d8  d8Cmt
   +t^8  e8  e8Cmt
   +t^8  f8  f8Cmt
   +t^9  a9    X[9]
   +t^9  b9  b9Cmt
   +t^9  c9  c9Cmt
   +t^9  d9  d9Cmt
   +t^9  e9  e9Cmt
   +t^9  f9  f9Cmt
   +t^9  g9  g9Cmt
   +t^9  h9  h9Cmt
   +t^10 b10 b10Cmt
   +t^10 c10 c10Cmt
   +t^10 d10 d10Cmt
   +t^10 e10 e10Cmt
   +t^10 f10 f10Cmt
   +t^10 g10 g10Cmt
   +t^10 h10 h10Cmt
   +t^10 i10 i10Cmt
   +t^10 j10 j10Cmt
   +t^10 k10 k10Cmt
   +t^10 l10 l10Cmt
   +t^11 a11   X[11]
   +t^11 b11 b11Cmt
   +t^11 c11 c11Cmt
   +t^11 d11 d11Cmt
   +t^11 e11 e11Cmt
   +t^11 f11 f11Cmt
   +t^11 g11 g11Cmt
   +t^11 h11 h11Cmt
   +t^11 i11 i11Cmt
   +t^11 j11 j11Cmt
   +t^11 k11 k11Cmt
   +t^11 l11 l11Cmt
   +t^11 m11 m11Cmt
   +t^11 n11 n11Cmt
   +t^11 o11 o11Cmt
   +t^11 p11 p11Cmt
   +t^11 q11 q11Cmt
   +t^11 r11 r11Cmt );
x= d t X[1] + d^3 t^3 X[3] + d^5 t^5 X[5] + d^7 t^7 X[7] + 
              d^9 t^9 X[9] + d^11 t^11 X[11];
term1=Expand[c[1][x,y]];
(* Save["b1rec",term1]; *)

Print["Compute term2"]
y=Expand[Normal[Series[y,{t,0,10}]]];
x=Normal[Series[x,{t,0,10}]];
term2=Expand[Normal[Series[c[2][x,y],{t,0,11}]]];
(* Save["b2rec",term2];  *)

Print["Compute term3"]
y=Expand[Normal[Series[y,{t,0,9}]]];
x=Normal[Series[x,{t,0,9}]];
tmp=Expand[c[3][xx,yy]]; LL=Length[tmp]; term3=0;
Do[{tmp1=tmp[[i]]; term3=term3+termaction[tmp1]},{i,LL}];
term3=Expand[term3];
(* Save["b3rec",term3];  *)

Print["Compute term4"]
y=Expand[Normal[Series[y,{t,0,8}]]];
x=Normal[Series[x,{t,0,8}]];
term4=Expand[termaction[c[4][xx,yy]]];
(* Save["b4rec",term4];  *)

Print["Compute term5"]
y=Expand[Normal[Series[y,{t,0,7}]]];
x=Normal[Series[x,{t,0,7}]];
tmp=Expand[c[5][xx,yy]]; LL=Length[tmp]; term5=0;
Do[{tmp1=tmp[[i]]; term5=term5+termaction[tmp1]},{i,LL}];
term5=Expand[term5];
(* Save["b5rec",term5];  *)

Print["Compute term6"]
y=Expand[Normal[Series[y,{t,0,6}]]];
x=Normal[Series[x,{t,0,6}]];
tmp=Expand[c[6][xx,yy]]; LL=Length[tmp]; term6=0;
Do[{tmp1=tmp[[i]]; term6=term6+termaction[tmp1]},{i,LL}];
term6=Expand[term6];
(* Save["b6rec",term6];  *)

Print["Compute term7"]
y=Expand[Normal[Series[y,{t,0,5}]]];
x=Normal[Series[x,{t,0,5}]];
tmp=Expand[c[7][xx,yy]]; LL=Length[tmp]; term7=0;
Do[{tmp1=tmp[[i]]; term7=term7+termaction[tmp1]},{i,LL}];
term7=Expand[term7];
(* Save["b7rec",term7];  *)

Print["Compute term8"]
y=Expand[Normal[Series[y,{t,0,4}]]];
x=Normal[Series[x,{t,0,4}]];
tmp=Expand[c[8][xx,yy]]; LL=Length[tmp]; term8=0;
Do[{tmp1=tmp[[i]]; term8=term8+termaction[tmp1]},{i,LL}];
term8=Expand[term8];
(* Save["b8rec",term8];  *)

Print["Compute term9"]
y=Expand[Normal[Series[y,{t,0,3}]]];
x=Normal[Series[x,{t,0,3}]];
tmp=Expand[c[9][xx,yy]]; LL=Length[tmp]; term9=0;
Do[{tmp1=tmp[[i]]; term9=term9+termaction[tmp1]},{i,LL}];
term9=Expand[term9];
(* Save["b9rec",term9];  *)
