+IDENTIFICATION DIVISION
+PROGRAM-ID MassOnSphere
+VERSION 20240124
+COMMENT A mass m rests at the apex on a fixed sphere with radius a.
+COMMENT With a slight displacement, it slides down the sphere without friction
+COMMENT x'' = C1*x*y - C3*x
+COMMENT y'' = C2*y*y - C4*y - g
+COMMENT Scaling: measuring distances in dm (10¹ m)
+COMMENT Initial condition: slightly off the top of the sphere to get the mass rolling.
+COMMENT Note: x0 is a function of y0 with x0² + y0² = a²
+COMMENT Note: ICs have to be negative as the integrator is inverting
+
+ENVIRONMENT DIVISION
+ENGINE Anabrid-THAT
+TIMEBASE 1ms
+REQUIRES COEFFICIENT 7
+REQUIRES INTEGRATOR 4
+REQUIRES MULTIPLIER 2
+REQUIRES INVERTER 4
+REQUIRES SUMMER 2
+
+DATA DIVISION
+OUTPUT OUTPUT.X x
+OUTPUT OUTPUT.Y y
+# Example values based on a=1
+COEFFICIENT.1 3g/a² for xy e.g. 2,943
+COEFFICIENT.2 3g/a² for y²
+COEFFICIENT.3 2g/a for x e.g. 1,962
+COEFFICIENT.4 2g/a for y
+COEFFICIENT.5 g e.g. 0,981
+COEFFICIENT.6 a initial condition y e.g. 0,957
+COEFFICIENT.7 0 initial condition x, slightly above 0 to start motion, e.g. 0,290
+
+PROGRAM DIVISION
+-1 -> COEFFICIENT.5 -> -g
+-1 -> COEFFICIENT.6 -> -y0
+-1 -> COEFFICIENT.7 -> -x0
+
+x'' -> INTEGRATOR.1 -> -x'
+-x', IC:-x0 -> INTEGRATOR.2 -> x
+y'' -> INTEGRATOR.3 -> -y'
+-y', IC:-y0 -> INTEGRATOR.4 -> y
+x,y -> MULTIPLIER.1 -> x*y
+y,y -> MULTIPLIER.2 -> y^2
+x*y -> COEFFICIENT.1 -> 3g/a²*x*y/10
+y^2 -> COEFFICIENT.2 -> 3g/a²*y^2/10
+x -> COEFFICIENT.3 -> 2g/a*x/10
+y -> COEFFICIENT.4 -> 2g/a*y/10
+2g/a*x/10 -> INVERTER.1 -> -2g/a*x/10
+2g/a*y/10 -> INVERTER.2 -> -2g/a*y/10
+10:3g/a²*x*y/10, 10:-2g/a*x/10 -> SUMMER.1 -> -x''
+-x'' -> INVERTER.3 -> x''
+10:3g/a²*y^2/10, 10:-2g/a*y/10, 1:-g -> SUMMER.2 -> -y''
+-y'' -> INVERTER.4 -> y''
+
+OPERATION DIVISION
+MODE REPEAT
+OP-TIME 0,024 # after that, the mass would jump off the sphere, which is not included in this model