]> permondes.de Git - Analog_Engine.git/commitdiff
Applications: Longitudinal oscillating chains; PDEs
authorPermondes <machen@permondes.de>
Fri, 5 Jul 2024 15:55:21 +0000 (17:55 +0200)
committerPermondes <machen@permondes.de>
Fri, 5 Jul 2024 15:55:21 +0000 (17:55 +0200)
Applications: Longitudinal oscillating chains
- Masses hanging on springs
- 2 masses fixed to walls
- linear molecule

Technical topics:
- Partial differential equations
- Added capacitance of THAT integrators
- building additional integrators

Scripting language:
- renamed DELACE to LACE
- some minor adaptation

14 files changed:
Analog Engine Example Applications.odt
Analog Engine Scripting Language.odt
Analog Engine Technical Topics.odt
DEscription Language for Analog Circuit Engines.odt [deleted file]
description Language for Analog Circuit Engines.odt [new file with mode: 0644]
scripts/TP1 07.19 Falling Mass.LACE [moved from scripts/TP1 07.19 Falling Mass.DELACE with 100% similarity]
scripts/TP1 07.19 Falling Mass.SALSA [new file with mode: 0644]
scripts/TP1 08.23a stick falling.LACE [moved from scripts/TP1 08.23a stick falling.DELACE with 100% similarity]
scripts/TP1 09.26 rope over table edge.LACE [moved from scripts/TP1 09.26 rope over table edge.DELACE with 100% similarity]
scripts/TP1 09.27 Bead on Cycloid.LACE [moved from scripts/TP1 09.27 Bead on Cycloid.DELACE with 94% similarity]
scripts/TP1 10.28 Masses hanging on springs.LACE [new file with mode: 0644]
scripts/TP1 10.29 Two masses fixed to walls.LACE [new file with mode: 0644]
scripts/TP1 10.30 Linear Molecule.LACE [new file with mode: 0644]
scripts/alpaca23 partial differential equation.LACE [new file with mode: 0644]

index 0fba40a970da3e552a96d3c1acf019d7261aae51..96723b6bc402c557fcff08765ea1f7bfd8f3dd07 100644 (file)
Binary files a/Analog Engine Example Applications.odt and b/Analog Engine Example Applications.odt differ
index f2ecf86fa804ce5806e2eb8cb23dafc51f99c9b4..50ef93308d5f8558708507882c887eb647c5e05f 100644 (file)
Binary files a/Analog Engine Scripting Language.odt and b/Analog Engine Scripting Language.odt differ
index d3efb954795d9e43899edb1d45cfe03f8bd0d940..28d4ff13c27b392c2e22bb3b7399fb9f613dacce 100644 (file)
Binary files a/Analog Engine Technical Topics.odt and b/Analog Engine Technical Topics.odt differ
diff --git a/DEscription Language for Analog Circuit Engines.odt b/DEscription Language for Analog Circuit Engines.odt
deleted file mode 100644 (file)
index 6332b1e..0000000
Binary files a/DEscription Language for Analog Circuit Engines.odt and /dev/null differ
diff --git a/description Language for Analog Circuit Engines.odt b/description Language for Analog Circuit Engines.odt
new file mode 100644 (file)
index 0000000..979810d
Binary files /dev/null and b/description Language for Analog Circuit Engines.odt differ
diff --git a/scripts/TP1 07.19 Falling Mass.SALSA b/scripts/TP1 07.19 Falling Mass.SALSA
new file mode 100644 (file)
index 0000000..3f3dc6b
--- /dev/null
@@ -0,0 +1,55 @@
+# Wiring mache ich von links nach rechts !!!
+
+...IDENTIFICATION DIVISION
+...PROGRAM-ID FallingParticle
+...VERSION 20240225
+...COMMENT Calculate the deflection from the vertical caused by the Earth's rotation of a particle falling freely from rest from a height h.
+...COMMENT Differential Equations:
+...COMMENT    x''=-bz'+ay' # x-axis is along latitude,  directed to east
+...COMMENT    y''=-ax'     # y-axis is along longitude, directed to north
+...COMMENT    z''=-g+ax'   # z-axis is perpendicular to the surface of earth
+...COMMENT    g: gravitational acceleration = 9,81 m/s²
+...COMMENT    a: 2*omega*sin(phi)
+...COMMENT    b: 2*omega*cos(phi)
+...COMMENT    omega: rotation velocity of the earth = 2*pi/day
+...COMMENT    phi: Latitude of location (0-90°)
+...COMMENT    Initial Condition: z(0)=h
+...COMMENT The full solution requires 6 INTEGRATORs, Anabrid-THAT just has 5. The deflection to longitude (y) is neglegible and can be omitted (marked #*).
+...COMMENT It could also be solved in a separated algorithm omitting x.
+
+...ENVIRONMENT DIVISION
+...TIMEBASE 1ms
+
+...DATA DIVISION
+SET COEFFICIENT.1 TO AY # 2*2pi/day*sin(phi)
+SET COEFFICIENT.2 TO AX # = AY
+SET COEFFICIENT.3 TO B  # 2*2pi/day*cos(phi)
+SET COEFFICIENT.4 TO G  # gravitational acceleration = 9,81 m/s²
+SET COEFFICIENT.5 TO H  # height h
+SET OUTPUT.X TO x
+SET OUTPUT.Y TO y
+SET OUTPUT.Z TO z
+
+INITIALIZE H by -1 TO -h # same as COMPUTE -1 TIMES H TO -h
+INITIALIZE G by +1 TO g
+
+INTEGRATE 1*-bz',1*ay' TO -x' # Input is x''
+INTEGRATE -x' TO x
+
+INTEGRATE y'' TO -y'
+INTEGRATE -y' TO y   
+
+INTEGRATE z'' TO -z' 
+INTEGRATE -z', IC:-h, LIMIT:(z >= 0) TO z
+
+-x' * AX -> -ax'
+-ax' = y''
+-y' * AY -> -ay'
+INVERT -ay' TO ay'
+-z' * B -> -bz'
+ADD 1*-ax', 1*g TO -g+ax'
+-g+ax' = z''
+
+...OPERATION DIVISION
+...MODE REPEAT
+...OP-TIME 7,3ms
similarity index 94%
rename from scripts/TP1 09.27 Bead on Cycloid.DELACE
rename to scripts/TP1 09.27 Bead on Cycloid.LACE
index a936c757f6e1b6729fd1e7db5560bd995ef06e35..3f28dd3abc3a449efabd1d7140c3473b944fae45 100644 (file)
@@ -24,11 +24,11 @@ mu * 4ax -> 4a*mu
 output(x): 4a*mu
 
 # calculating y
 output(x): 4a*mu
 
 # calculating y
-multiply (mu, mu) -> mu^2
+multiply mu, mu -> mu^2
 mu^2 * 4ay -> 4ay*mu^2
 isum 4a*mu^2 -> -2a*mu^2     # just serves to devide by 2 because we need 2a instead of 4a
   /2
 mu^2 * 4ay -> 4ay*mu^2
 isum 4a*mu^2 -> -2a*mu^2     # just serves to devide by 2 because we need 2a instead of 4a
   /2
-invert (-2a*mu^2) -> 2a*mu^2 
+invert -2a*mu^2 -> 2a*mu^2 
 output(y): 2a*mu^2
 
 # display mu, so the sinus
 output(y): 2a*mu^2
 
 # display mu, so the sinus
diff --git a/scripts/TP1 10.28 Masses hanging on springs.LACE b/scripts/TP1 10.28 Masses hanging on springs.LACE
new file mode 100644 (file)
index 0000000..c1ed4f7
--- /dev/null
@@ -0,0 +1,24 @@
+# TP1 10.28 Masses hanging on springs
+# Two identical masses m are hanging on 2 springs with same spring constant D. The system is performing small oscillations around the equilibrium position.
+# m*s1'' + D*s1 + D*(s1-s2) = 0 => s1'' = D/m * (s2 - 2*s1) = D/m*s2 - D/m*s1 - D/m*s1
+# m*s2'' + D*(s2-s1) = 0        => s2'' = D/m * (s1 - s2) = D/m*s1 - D/m*s2
+
+coefficient(1): D/m_1 # D/m for s1
+coefficient(2): D/m_2 # D/m for s2, identical to D/m_1
+coefficient(3): -1 -> -s1_0 # initial position of s1
+coefficient(4): -1 -> -s2_0 # initial position of s2
+
+iintegrate D/m*s2, -D/m*s1, -D/m*s1 -> -s1' # input is s1''
+iintegrate -s1' -> s1
+   IC: -s1_0
+s1 * D/m_1 -> D/m*s1
+invert D/m*s1 -> -D/m*s1
+
+iintegrate D/m*s1, -D/m*s2 -> -s2' # input is s2''
+iintegrate -s2' -> s2
+   IC: -s2_0
+s2 * D/m_2 -> D/m*s2
+invert D/m*s2 -> -D/m*s2
+
+output(x): s1
+output(y): s2
diff --git a/scripts/TP1 10.29 Two masses fixed to walls.LACE b/scripts/TP1 10.29 Two masses fixed to walls.LACE
new file mode 100644 (file)
index 0000000..f275e36
--- /dev/null
@@ -0,0 +1,25 @@
+# TP1 10.29 Two Masses fixed to walls
+# Two equal masses m are connected to each other by a spring (spring constant D) and on either side to a fixed wall.
+
+# m*s1'' + 2D*s1 - D*s2 = 0 => s1'' = -D/m*s1 -D/m*s1 + D/m*s2
+# m*s2'' + 2D*s1 - D*s1 = 0 => s2'' = -D/m*s2 -D/m*s2 + D/m*s1
+
+coefficient(1): D/m_1 # D/m for s1
+coefficient(2): D/m_2 # D/m for s2, identical to D/m_1
+coefficient(3): -1 -> -s1_0 # initial position of s1
+coefficient(4): -1 -> -s2_0 # initial position of s2
+
+iintegrate -D/m*s1, -D/m*s1, D/m*s2 -> -s1' # input is s1''
+iintegrate -s1' -> s1
+   IC: -s1_0
+s1 * D/m_1 -> D/m*s1
+invert D/m*s1 -> -D/m*s1
+
+iintegrate -D/m*s2, -D/m*s2, D/m*s1 -> -s2' # input is s2''
+iintegrate -s2' -> s2
+   IC: -s2_0
+s2 * D/m_2 -> D/m*s2
+invert D/m*s2 -> -D/m*s2
+
+output(x): s1
+output(y): s2
diff --git a/scripts/TP1 10.30 Linear Molecule.LACE b/scripts/TP1 10.30 Linear Molecule.LACE
new file mode 100644 (file)
index 0000000..fd9806e
--- /dev/null
@@ -0,0 +1,41 @@
+# TP1 10.30 Linear Molecule
+# In a linear molecule of symmetric construction of type A-B-A the atoms are harmonically coupled and are performing small oscillations around the equilibrium positions.
+
+# s1'' = -omega0^2*s1 + omega0^2*s2
+# s2'' = -my (-omega0^2*s1 + omega0^2*s2 + omega0^2*s2 - omega0^2*s3)
+# s3'' = omega0^2*s2 - omega0^2*s3
+
+# NB: all integrators have to run with 100 nF capacitance, i.e. SLOW mode
+
+coefficient(1): omega0^2_1 # omega0^2 for s1
+coefficient(2): omega0^2_2 # omega0^2 for s2 # same as omega0^2_1
+coefficient(3): omega0^2_3 # omega0^2 for s3 # same as omega0^2_1
+coefficient(4): my
+coefficient(5): -1 -> -s1_0 # initial position of s1
+coefficient(6): -1 -> -s3_0 # initial position of s3
+# initial positon of s2, the central mass, is set to 0
+
+iintegrate -omega0^2_1*s1, omega0^2_2*s2 -> -s1'   # input is s1''
+iintegrate -s1' -> s1
+   IC: -s1_0
+invert s1 -> -s1
+-s1 * omega0^2_1 -> -omega0^2_1*s1
+
+iintegrate -my*bracket -> -s2'   # input is s2''
+# the following integrator has to be built up manually as THAT only has 5 integrators and we need 6
+# iintegrate -s2' -> s2
+openamp -s2' -> s2
+  loopback: capacitor(100nF)
+s2 * omega0^2_2 -> omega0^2_2*s2
+isum -omega0^2_1*s1, omega0^2_2*s2, omega0^2_2*s2, -omega0^2_3*s3 -> -bracket
+-bracket * my -> -my*bracket
+
+iintegrate omega0^2_2*s2, -omega0^2_3*s3 -> -s3'   # input is s3''
+iintegrate -s3' -> s3
+  IC: -s3_0
+invert s3 -> -s3
+-s3 * omega0^2_3 -> -omega0^2_3*s3
+
+ output(x): s1
+ output(y): s2
+ output(z): s3
diff --git a/scripts/alpaca23 partial differential equation.LACE b/scripts/alpaca23 partial differential equation.LACE
new file mode 100644 (file)
index 0000000..1e8499a
--- /dev/null
@@ -0,0 +1,27 @@
+# Solving partial differential equations by descretizing space
+# This is an adoption of the application note “alpaca_23” from Anabrid [https://analogparadigm.com/downloads/alpaca_23.pdf] 
+# THAT only has 5 integrators, thus we have to reduce the number of elements
+#
+# u_0 = delta_t 
+# u''_1 = u_0 - 2*u_1 + u_2 
+# u''_2 = u_1 - 2*u_2 + u_3 
+# u_3 = 0
+
+coefficient(1): f1 # fix to 0.2 to get 2 for the integration
+coefficient(2): f2 # fix to 0.2 to get 2 for the integration
+coefficient(5): 1 -> delta_t
+u_0 = delta_t
+coefficient(6): 0 -> u_3
+
+iintegrate u_0, 10*:-f1u_1, u_2 -> -u'_1 # input is u''_1
+iintegrate -u'_1 -> u_1
+invert u_1 -> -u_1
+-u_1 * f1 -> -f1u_1
+
+iintegrate u_1, 10*:-f2u_2, u_3 -> -u'_2 # input is u''_2
+iintegrate -u'_2 -> u_2
+invert u_2 -> -u_2
+-u_2 * f2 -> -f2u_2
+
+output(x): u_1
+output(y): u_2