-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtriangle.model
136 lines (106 loc) · 5.27 KB
/
triangle.model
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// vim: set ft=scala:
import looneesha._
object KinematicsDef extends CFDefinition {
override def mapping = Map("distance0" -> ((in: List[AtomDF]) => (in(0) + in(1) * in(3) + in(2) * in(3) * in(3) / 2) :: Nil),
"distance1" -> ((in: List[AtomDF]) => (in(0) - in(1) * in(3) - in(2) * in(3) * in(3) / 2) :: Nil),
"speed00" -> ((in: List[AtomDF]) => (in(0) + in(1) * in(2)) :: Nil),
"speed10" -> ((in: List[AtomDF]) => (in(0) - in(1) * in(2)) :: Nil),
"speed01" -> ((in: List[AtomDF]) => ((in(1) - in(0)) / in(3) - in(2) * in(3) / 2) :: Nil),
"deltaT0" -> ((in: List[AtomDF]) => ((in(1) - in(0)) / in(2)) :: Nil),
"accelerate0" -> ((in: List[AtomDF]) => ((in(1) - in(0)) / in(2)) :: Nil),
"accelerate1" -> ((in: List[AtomDF]) => ((in(1) - in(0)) / in(3) / in(3) - in(2) / in(3)) :: Nil))
}
object MechanicsDef extends CFDefinition {
override def mapping = Map("frictionF" -> ((in: List[AtomDF]) => (in(0) * in(1)) :: Nil),
"reactionF" -> ((in: List[AtomDF]) => -in(0) :: Nil),
"gravitationFY" -> ((in: List[AtomDF]) => (in(1) * 9.8 * math.cos(in(0))) :: Nil),
"gravitationFX" -> ((in: List[AtomDF]) => (in(1) * 9.8 * math.sin(in(0))) :: Nil),
"overallF" -> ((in: List[AtomDF]) => (in(0) + in(1)) :: Nil),
"accelerate" -> ((in: List[AtomDF]) => (in(0) / in(1)) :: Nil),
"overallF0" -> ((in: List[AtomDF]) => (in(0) * in(1)) :: Nil),
"reactionF0" -> ((in: List[AtomDF]) => (in(1) / in(0)) :: Nil),
"coeffriction" -> ((in: List[AtomDF]) => (in(1) / in(0)) :: Nil),
"gravitationFY0" -> ((in: List[AtomDF]) => (in(0)) :: Nil),
"mass0" -> ((in: List[AtomDF]) => (in(0) / in(1)) :: Nil),
"frictionF0" -> ((in: List[AtomDF]) => (in(0) - in(1)) :: Nil),
"gravitaionFX0" -> ((in: List[AtomDF]) => (in(0) - in(1)) :: Nil))
}
object Kinematics extends GraphBuilder(TriangleDef.mapping, "Triangle") {
// alpha + beta + gamma = 180
defn f1 in (%alpha(* + 0), %beta(* + 0)) -> out (%gamma(* + 0))
defn f1 in (%alpha(* + 0), %gamma(* + 0)) -> out (%beta(* + 0))
defn f1 in (%beta(* + 0), %gamma(* + 0)) -> out (%alpha(* + 0))
// 2 * (x + y + z) = p
defn f2 in (%x(* + 0), %y(* + 0), %z(* + 0)) -> out (%p(* + 0))
defn f3 in (%p(* + 0), %x(* + 0), %y(* + 0)) -> out (%z(* + 0))
defn f3 in (%p(* + 0), %x(* + 0), %z(* + 0)) -> out (%y(* + 0))
defn f3 in (%p(* + 0), %z(* + 0), %y(* + 0)) -> out (%x(* + 0))
defn f4 in (%y(* + 0), %gamma(* + 0)) -> out (%hx(* + 0))
defn f4 in (%z(* + 0), %beta(* + 0)) -> out (%hx(* + 0))
defn f4 in (%x(* + 0), %gamma(* + 0)) -> out (%hy(* + 0))
defn f4 in (%z(* + 0), %alpha(* + 0)) -> out (%hy(* + 0))
defn f4 in (%x(* + 0), %beta(* + 0)) -> out (%hz(* + 0))
defn f4 in (%x(* + 0), %alpha(* + 0)) -> out (%hz(* + 0))
defn f5 in (%x(* + 0), %hx(* + 0)) -> out (%s(* + 0))
defn f5 in (%y(* + 0), %hy(* + 0)) -> out (%s(* + 0))
defn f5 in (%z(* + 0), %hz(* + 0)) -> out (%s(* + 0))
defn f6 in (%x(* + 0), %y(* + 0), %z(* + 0)) -> out (%s(* + 0))
defn f7 in (%hx(* + 0), %gamma(* + 0)) -> out (%y(* + 0))
defn f7 in (%hx(* + 0), %beta(* + 0)) -> out (%z(* + 0))
defn f7 in (%hy(* + 0), %gamma(* + 0)) -> out (%x(* + 0))
}
object Mechanics extends GraphBuilder(MechanicsDef.mapping, "Mechanics") {
defn frictionF in (%cf(* + 0), %fr(* + 0)) -> out (%ff(* + 0))
defn reactionF in (%fgy(* + 0)) -> out (%fr(* + 0))
defn gravitationFY in (%alpha(* + 0), %m(* + 0)) -> out (%fgy(* + 0))
defn gravitationFX in (%alpha(* + 0), %m(* + 0)) -> out (%fgx(* + 0))
defn overallF in (%fgx(* + 0), %ff(* + 0)) -> out (%foa(* + 0))
defn accelerate in (%foa(* + 0), %m(* + 0)) -> out (%Kinematics_a(* + 0))
defn overallF0 in (%Kinematics_a(* + 0), %m(* + 0)) -> out (%foa(* + 0))
defn reactionF0 in (%cff(* + 0), %ff(* + 0)) -> out (%fr(* + 0))
defn coeffriction in (%fr(* + 0), %ff(* + 0)) -> out (%cf(* + 0))
defn gravitationFY0 in (%fr(* + 0)) -> out (%fgy(* + 0))
defn mass0 in (%foa(* + 0), %Kinematics_a(* + 0)) -> out(%m(* + 0))
defn frictionF0 in (%foa(* + 0), %fgx(* + 0)) -> out (%ff(* + 0))
defn gravitaionFX0 in (%foa(* + 0), %ff(* + 0)) -> out (%fgx(* + 0))
}
object MechanicsProblem extends ProblemBuilder {
set (%Kinematics_v0(0), 10)
set (%Kinematics_v1(0), 0)
set (%Kinematics_s0(0), 0)
set (%Mechanics_m(0), 10)
set (%Mechanics_cf(0), 0.1)
set (%Mechanics_alpha(0), 0)
? (%Kinematics_s1(0), %Kinematics_dt(0))
set (%Kinematics_v0(1), 20)
set (%Kinematics_v1(1), 0)
set (%Kinematics_s0(1), 0)
set (%Mechanics_m(1), 100)
set (%Mechanics_cf(1), 0.05)
set (%Mechanics_alpha(1), 0)
? (%Kinematics_s1(1), %Kinematics_dt(1))
set (%Kinematics_v0(2), 15)
set (%Kinematics_v1(2), 0)
set (%Kinematics_s0(2), 0)
set (%Mechanics_m(2), 50)
set (%Mechanics_cf(2), 0.03)
set (%Mechanics_alpha(2), 0.01)
? (%Kinematics_s1(2), %Kinematics_dt(2))
set (%Kinematics_v0(3), 40)
set (%Kinematics_v1(3), 0)
set (%Kinematics_s0(3), 0)
set (%Mechanics_m(3), 130)
set (%Mechanics_cf(3), 0.025)
set (%Mechanics_alpha(3), 0)
? (%Kinematics_s1(3), %Kinematics_dt(3))
set (%Kinematics_v0(4), 50)
set (%Kinematics_v1(4), 0)
set (%Kinematics_s0(4), 0)
set (%Mechanics_m(4), 200)
set (%Mechanics_cf(4), 0.2)
set (%Mechanics_alpha(4), 0)
? (%Kinematics_s1(4), %Kinematics_dt(4))
}
val runtime = Runtime(Kinematics + Mechanics, MechanicsProblem)
runtime.init
runtime.start