PROCEDURE InvariantsFromDerivatives( READONLY v: RealDerivatives; VAR p: RealInvariants; ) = BEGIN WITH f = v[0], fx = v[1], fy = v[2], fxx = v[3], fxy = v[4], fyy = v[5], gx = fx*fx, gy = fy*fy, gm = 2.0*fx*fy DO p[0] := f; p[1] := gx + gy; p[2] := fxx + fyy; p[3] := fxx*gy - fxy*gm + fyy*gx; p[4] := fxy*fxy - fxx*fyy END; END InvariantsFromDerivatives; PROCEDURE DerivativePartialsFromInvariantPartials( READONLY v: RealDerivatives; READONLY dEdp: RealInvariants; VAR (*OUT*) dEdv: RealDerivatives; ) = BEGIN WITH fx = v[1], fy = v[2], fxx = v[3], fxy = v[4], fyy = v[5], gx = fx*fx, gy = fy*fy, gm = 2.0*fx*fy, dEdgm = - dEdp[3]*fxy, dEdgx = dEdp[1] + dEdp[3]*fyy, dEdgy = dEdp[1] + dEdp[3]*fxx DO dEdv[0] := dEdp[0]; dEdv[1] := 2.0 * (dEdgm * fy + dEdgx * fx); dEdv[2] := 2.0 * (dEdgm * fx + dEdgy * fy); dEdv[3] := dEdp[2] + dEdp[3]*gy - dEdp[4]*fyy; dEdv[4] := - dEdp[3]*gm + 2.0 * dEdp[4]*fxy; dEdv[5] := dEdp[2] + dEdp[3]*gx - dEdp[4]*fxx; END; END DerivativePartialsFromInvariantPartials;