Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
8f532e31
Commit
8f532e31
authored
May 05, 2016
by
peastman
Browse files
Optimization
parent
f854d108
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
56 additions
and
92 deletions
+56
-92
platforms/cpu/src/CpuGayBerneForce.cpp
platforms/cpu/src/CpuGayBerneForce.cpp
+29
-47
platforms/reference/src/SimTKReference/ReferenceGayBerneForce.cpp
...s/reference/src/SimTKReference/ReferenceGayBerneForce.cpp
+27
-45
No files found.
platforms/cpu/src/CpuGayBerneForce.cpp
View file @
8f532e31
...
@@ -356,8 +356,8 @@ RealOpenMM CpuGayBerneForce::computeOneInteraction(int particle1, int particle2,
...
@@ -356,8 +356,8 @@ RealOpenMM CpuGayBerneForce::computeOneInteraction(int particle1, int particle2,
// Interactions between two point particles can be computed more easily.
// Interactions between two point particles can be computed more easily.
if
(
particles
[
particle1
].
isPointParticle
&&
particles
[
particle2
].
isPointParticle
)
{
if
(
particles
[
particle1
].
isPointParticle
&&
particles
[
particle2
].
isPointParticle
)
{
RealOpenMM
sig
2
=
sigma
*
rInv
;
RealOpenMM
sig
=
sigma
*
rInv
;
sig2
*
=
sig
2
;
RealOpenMM
sig2
=
sig
*
sig
;
RealOpenMM
sig6
=
sig2
*
sig2
*
sig2
;
RealOpenMM
sig6
=
sig2
*
sig2
*
sig2
;
RealOpenMM
energy
=
4
*
epsilon
*
(
sig6
-
1
)
*
sig6
;
RealOpenMM
energy
=
4
*
epsilon
*
(
sig6
-
1
)
*
sig6
;
RealVec
force
=
drUnit
*
(
switchValue
*
4
*
epsilon
*
(
12
*
sig6
-
6
)
*
sig6
*
rInv
-
energy
*
switchDeriv
);
RealVec
force
=
drUnit
*
(
switchValue
*
4
*
epsilon
*
(
12
*
sig6
-
6
)
*
sig6
*
rInv
-
energy
*
switchDeriv
);
...
@@ -422,51 +422,33 @@ RealOpenMM CpuGayBerneForce::computeOneInteraction(int particle1, int particle2,
...
@@ -422,51 +422,33 @@ RealOpenMM CpuGayBerneForce::computeOneInteraction(int particle1, int particle2,
RealVec
scale
=
RealVec
(
p
.
rx
*
p
.
rx
,
p
.
ry
*
p
.
ry
,
p
.
rz
*
p
.
rz
)
*
(
-
0.5
*
eta
/
detG12
);
RealVec
scale
=
RealVec
(
p
.
rx
*
p
.
rx
,
p
.
ry
*
p
.
ry
,
p
.
rz
*
p
.
rz
)
*
(
-
0.5
*
eta
/
detG12
);
Matrix
D
;
Matrix
D
;
RealOpenMM
(
&
d
)[
3
][
3
]
=
D
.
v
;
RealOpenMM
(
&
d
)[
3
][
3
]
=
D
.
v
;
d
[
0
][
0
]
=
scale
[
0
]
*
(
g12
[
1
][
2
]
*
g12
[
0
][
1
]
*
a
[
0
][
2
]
+
2
*
g12
[
1
][
1
]
*
g12
[
2
][
2
]
*
a
[
0
][
0
]
-
d
[
0
][
0
]
=
scale
[
0
]
*
(
2
*
a
[
0
][
0
]
*
(
g12
[
1
][
1
]
*
g12
[
2
][
2
]
-
g12
[
1
][
2
]
*
g12
[
2
][
1
])
+
g12
[
1
][
1
]
*
a
[
0
][
2
]
*
g12
[
0
][
2
]
-
2
*
g12
[
1
][
2
]
*
a
[
0
][
0
]
*
g12
[
2
][
1
]
+
a
[
0
][
2
]
*
(
g12
[
1
][
2
]
*
g12
[
0
][
1
]
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
]))
+
a
[
0
][
1
]
*
g12
[
0
][
2
]
*
g12
[
2
][
1
]
-
a
[
0
][
1
]
*
g12
[
0
][
1
]
*
g12
[
2
][
2
]
-
a
[
0
][
1
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
])));
g12
[
1
][
0
]
*
g12
[
2
][
2
]
*
a
[
0
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
*
a
[
0
][
1
]
+
d
[
0
][
1
]
=
scale
[
0
]
*
(
a
[
0
][
0
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
g12
[
1
][
0
]
*
a
[
0
][
2
]
*
g12
[
2
][
1
]
-
a
[
0
][
2
]
*
g12
[
2
][
0
]
*
g12
[
1
][
1
]);
2
*
a
[
0
][
1
]
*
(
g12
[
0
][
0
]
*
g12
[
2
][
2
]
-
g12
[
2
][
0
]
*
g12
[
0
][
2
])
+
d
[
0
][
1
]
=
scale
[
0
]
*
(
g12
[
0
][
2
]
*
a
[
0
][
0
]
*
g12
[
2
][
1
]
-
g12
[
2
][
2
]
*
a
[
0
][
0
]
*
g12
[
0
][
1
]
+
a
[
0
][
2
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
2
][
0
]
*
g12
[
0
][
1
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
])));
2
*
g12
[
0
][
0
]
*
g12
[
2
][
2
]
*
a
[
0
][
1
]
-
g12
[
0
][
0
]
*
a
[
0
][
2
]
*
g12
[
1
][
2
]
-
d
[
0
][
2
]
=
scale
[
0
]
*
(
a
[
0
][
0
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
]))
+
2
*
g12
[
2
][
0
]
*
g12
[
0
][
2
]
*
a
[
0
][
1
]
+
a
[
0
][
2
]
*
g12
[
1
][
0
]
*
g12
[
0
][
2
]
-
a
[
0
][
1
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
2
][
0
]
*
g12
[
0
][
1
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
]))
+
g12
[
2
][
2
]
*
g12
[
1
][
0
]
*
a
[
0
][
0
]
+
g12
[
2
][
0
]
*
a
[
0
][
0
]
*
g12
[
1
][
2
]
+
2
*
a
[
0
][
2
]
*
(
g12
[
1
][
1
]
*
g12
[
0
][
0
]
-
g12
[
1
][
0
]
*
g12
[
0
][
1
]));
g12
[
2
][
0
]
*
a
[
0
][
2
]
*
g12
[
0
][
1
]
-
a
[
0
][
2
]
*
g12
[
0
][
0
]
*
g12
[
2
][
1
]);
d
[
1
][
0
]
=
scale
[
1
]
*
(
2
*
a
[
1
][
0
]
*
(
g12
[
1
][
1
]
*
g12
[
2
][
2
]
-
g12
[
1
][
2
]
*
g12
[
2
][
1
])
+
d
[
0
][
2
]
=
scale
[
0
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
*
a
[
0
][
0
]
-
g12
[
0
][
2
]
*
a
[
0
][
0
]
*
g12
[
1
][
1
]
-
a
[
1
][
1
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
g12
[
0
][
0
]
*
g12
[
1
][
2
]
*
a
[
0
][
1
]
+
g12
[
1
][
0
]
*
g12
[
0
][
2
]
*
a
[
0
][
1
]
-
a
[
1
][
2
]
*
(
g12
[
1
][
2
]
*
g12
[
0
][
1
]
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
])));
a
[
0
][
1
]
*
g12
[
0
][
0
]
*
g12
[
2
][
1
]
-
g12
[
2
][
0
]
*
g12
[
1
][
1
]
*
a
[
0
][
0
]
+
d
[
1
][
1
]
=
scale
[
1
]
*
(
a
[
1
][
0
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
2
*
g12
[
1
][
1
]
*
g12
[
0
][
0
]
*
a
[
0
][
2
]
-
2
*
g12
[
1
][
0
]
*
a
[
0
][
2
]
*
g12
[
0
][
1
]
+
2
*
a
[
1
][
1
]
*
(
g12
[
2
][
2
]
*
g12
[
0
][
0
]
-
g12
[
2
][
0
]
*
g12
[
0
][
2
])
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
*
a
[
0
][
0
]
+
g12
[
2
][
0
]
*
a
[
0
][
1
]
*
g12
[
0
][
1
]);
a
[
1
][
2
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
0
][
1
]
*
g12
[
2
][
0
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
])));
d
[
1
][
0
]
=
scale
[
1
]
*
(
-
g12
[
1
][
1
]
*
a
[
1
][
2
]
*
g12
[
0
][
2
]
+
2
*
g12
[
1
][
1
]
*
g12
[
2
][
2
]
*
a
[
1
][
0
]
+
d
[
1
][
2
]
=
scale
[
1
]
*
(
a
[
1
][
0
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
]))
+
g12
[
1
][
2
]
*
g12
[
0
][
1
]
*
a
[
1
][
2
]
-
2
*
g12
[
1
][
2
]
*
a
[
1
][
0
]
*
g12
[
2
][
1
]
+
a
[
1
][
1
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
0
][
1
]
*
g12
[
2
][
0
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
]))
+
a
[
1
][
1
]
*
g12
[
0
][
2
]
*
g12
[
2
][
1
]
-
a
[
1
][
1
]
*
g12
[
0
][
1
]
*
g12
[
2
][
2
]
-
2
*
a
[
1
][
2
]
*
(
g12
[
1
][
1
]
*
g12
[
0
][
0
]
-
g12
[
1
][
0
]
*
g12
[
0
][
1
]));
g12
[
1
][
0
]
*
g12
[
2
][
2
]
*
a
[
1
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
*
a
[
1
][
1
]
-
d
[
2
][
0
]
=
scale
[
2
]
*
(
2
*
a
[
2
][
0
]
*
(
g12
[
1
][
1
]
*
g12
[
2
][
2
]
-
g12
[
2
][
1
]
*
g12
[
1
][
2
])
+
a
[
1
][
2
]
*
g12
[
2
][
0
]
*
g12
[
1
][
1
]
+
g12
[
1
][
0
]
*
a
[
1
][
2
]
*
g12
[
2
][
1
]);
a
[
2
][
1
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
1
][
2
]
*
g12
[
2
][
0
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
d
[
1
][
1
]
=
scale
[
1
]
*
(
g12
[
0
][
2
]
*
a
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
0
][
1
]
*
g12
[
2
][
2
]
*
a
[
1
][
0
]
+
a
[
2
][
2
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
+
g12
[
2
][
1
]
*
g12
[
1
][
0
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
])));
2
*
g12
[
2
][
2
]
*
g12
[
0
][
0
]
*
a
[
1
][
1
]
-
a
[
1
][
2
]
*
g12
[
0
][
0
]
*
g12
[
1
][
2
]
-
d
[
2
][
1
]
=
scale
[
2
]
*
(
a
[
2
][
0
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
1
][
2
]
*
g12
[
2
][
0
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
2
*
g12
[
2
][
0
]
*
a
[
1
][
1
]
*
g12
[
0
][
2
]
-
g12
[
1
][
0
]
*
g12
[
2
][
2
]
*
a
[
1
][
0
]
+
2
*
a
[
2
][
1
]
*
(
g12
[
0
][
0
]
*
g12
[
2
][
2
]
-
g12
[
0
][
2
]
*
g12
[
2
][
0
])
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
*
a
[
1
][
0
]
+
g12
[
1
][
0
]
*
a
[
1
][
2
]
*
g12
[
0
][
2
]
-
a
[
2
][
2
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
0
][
1
]
*
g12
[
2
][
0
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
])));
g12
[
0
][
0
]
*
a
[
1
][
2
]
*
g12
[
2
][
1
]
+
a
[
1
][
2
]
*
g12
[
0
][
1
]
*
g12
[
2
][
0
]);
d
[
2
][
2
]
=
scale
[
2
]
*
(
a
[
2
][
0
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
+
g12
[
2
][
1
]
*
g12
[
1
][
0
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
]))
+
d
[
1
][
2
]
=
scale
[
1
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
*
a
[
1
][
0
]
-
g12
[
0
][
2
]
*
a
[
1
][
0
]
*
g12
[
1
][
1
]
-
a
[
2
][
1
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
2
][
0
]
*
g12
[
0
][
1
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
]))
+
g12
[
0
][
0
]
*
g12
[
1
][
2
]
*
a
[
1
][
1
]
+
g12
[
1
][
0
]
*
g12
[
0
][
2
]
*
a
[
1
][
1
]
+
2
*
a
[
2
][
2
]
*
(
g12
[
1
][
1
]
*
g12
[
0
][
0
]
-
g12
[
1
][
0
]
*
g12
[
0
][
1
]));
2
*
g12
[
1
][
1
]
*
g12
[
0
][
0
]
*
a
[
1
][
2
]
-
g12
[
0
][
0
]
*
a
[
1
][
1
]
*
g12
[
2
][
1
]
+
g12
[
0
][
1
]
*
g12
[
2
][
0
]
*
a
[
1
][
1
]
-
a
[
1
][
0
]
*
g12
[
2
][
0
]
*
g12
[
1
][
1
]
-
2
*
g12
[
1
][
0
]
*
g12
[
0
][
1
]
*
a
[
1
][
2
]
+
g12
[
1
][
0
]
*
a
[
1
][
0
]
*
g12
[
2
][
1
]);
d
[
2
][
0
]
=
scale
[
2
]
*
(
-
g12
[
1
][
1
]
*
g12
[
0
][
2
]
*
a
[
2
][
2
]
+
g12
[
0
][
1
]
*
g12
[
1
][
2
]
*
a
[
2
][
2
]
+
2
*
g12
[
1
][
1
]
*
a
[
2
][
0
]
*
g12
[
2
][
2
]
-
g12
[
0
][
1
]
*
a
[
2
][
1
]
*
g12
[
2
][
2
]
+
g12
[
0
][
2
]
*
g12
[
2
][
1
]
*
a
[
2
][
1
]
-
2
*
a
[
2
][
0
]
*
g12
[
2
][
1
]
*
g12
[
1
][
2
]
-
g12
[
1
][
0
]
*
a
[
2
][
1
]
*
g12
[
2
][
2
]
+
g12
[
1
][
2
]
*
g12
[
2
][
0
]
*
a
[
2
][
1
]
-
g12
[
1
][
1
]
*
g12
[
2
][
0
]
*
a
[
2
][
2
]
+
g12
[
2
][
1
]
*
g12
[
1
][
0
]
*
a
[
2
][
2
]);
d
[
2
][
1
]
=
scale
[
2
]
*
(
-
g12
[
0
][
1
]
*
g12
[
2
][
2
]
*
a
[
2
][
0
]
+
g12
[
0
][
2
]
*
a
[
2
][
0
]
*
g12
[
2
][
1
]
+
2
*
a
[
2
][
1
]
*
g12
[
0
][
0
]
*
g12
[
2
][
2
]
-
g12
[
1
][
2
]
*
a
[
2
][
2
]
*
g12
[
0
][
0
]
-
2
*
a
[
2
][
1
]
*
g12
[
0
][
2
]
*
g12
[
2
][
0
]
-
g12
[
1
][
0
]
*
a
[
2
][
0
]
*
g12
[
2
][
2
]
+
g12
[
1
][
0
]
*
g12
[
0
][
2
]
*
a
[
2
][
2
]
+
g12
[
1
][
2
]
*
g12
[
2
][
0
]
*
a
[
2
][
0
]
-
g12
[
0
][
0
]
*
a
[
2
][
2
]
*
g12
[
2
][
1
]
+
a
[
2
][
2
]
*
g12
[
0
][
1
]
*
g12
[
2
][
0
]);
d
[
2
][
2
]
=
scale
[
2
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
*
a
[
2
][
0
]
-
g12
[
0
][
2
]
*
a
[
2
][
0
]
*
g12
[
1
][
1
]
-
g12
[
0
][
0
]
*
g12
[
1
][
2
]
*
a
[
2
][
1
]
+
g12
[
1
][
0
]
*
g12
[
0
][
2
]
*
a
[
2
][
1
]
-
g12
[
1
][
1
]
*
g12
[
2
][
0
]
*
a
[
2
][
0
]
-
g12
[
2
][
1
]
*
a
[
2
][
1
]
*
g12
[
0
][
0
]
+
2
*
g12
[
1
][
1
]
*
a
[
2
][
2
]
*
g12
[
0
][
0
]
+
g12
[
2
][
1
]
*
g12
[
1
][
0
]
*
a
[
2
][
0
]
+
g12
[
2
][
0
]
*
g12
[
0
][
1
]
*
a
[
2
][
1
]
-
2
*
a
[
2
][
2
]
*
g12
[
1
][
0
]
*
g12
[
0
][
1
]);
RealVec
detadq
;
RealVec
detadq
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
i
=
0
;
i
<
3
;
i
++
)
detadq
+=
RealVec
(
a
[
i
][
0
],
a
[
i
][
1
],
a
[
i
][
2
]).
cross
(
RealVec
(
d
[
i
][
0
],
d
[
i
][
1
],
d
[
i
][
2
]));
detadq
+=
RealVec
(
a
[
i
][
0
],
a
[
i
][
1
],
a
[
i
][
2
]).
cross
(
RealVec
(
d
[
i
][
0
],
d
[
i
][
1
],
d
[
i
][
2
]));
...
...
platforms/reference/src/SimTKReference/ReferenceGayBerneForce.cpp
View file @
8f532e31
...
@@ -276,51 +276,33 @@ RealOpenMM ReferenceGayBerneForce::computeOneInteraction(int particle1, int part
...
@@ -276,51 +276,33 @@ RealOpenMM ReferenceGayBerneForce::computeOneInteraction(int particle1, int part
RealVec
scale
=
RealVec
(
p
.
rx
*
p
.
rx
,
p
.
ry
*
p
.
ry
,
p
.
rz
*
p
.
rz
)
*
(
-
0.5
*
eta
/
detG12
);
RealVec
scale
=
RealVec
(
p
.
rx
*
p
.
rx
,
p
.
ry
*
p
.
ry
,
p
.
rz
*
p
.
rz
)
*
(
-
0.5
*
eta
/
detG12
);
Matrix
D
;
Matrix
D
;
RealOpenMM
(
&
d
)[
3
][
3
]
=
D
.
v
;
RealOpenMM
(
&
d
)[
3
][
3
]
=
D
.
v
;
d
[
0
][
0
]
=
scale
[
0
]
*
(
g12
[
1
][
2
]
*
g12
[
0
][
1
]
*
a
[
0
][
2
]
+
2
*
g12
[
1
][
1
]
*
g12
[
2
][
2
]
*
a
[
0
][
0
]
-
d
[
0
][
0
]
=
scale
[
0
]
*
(
2
*
a
[
0
][
0
]
*
(
g12
[
1
][
1
]
*
g12
[
2
][
2
]
-
g12
[
1
][
2
]
*
g12
[
2
][
1
])
+
g12
[
1
][
1
]
*
a
[
0
][
2
]
*
g12
[
0
][
2
]
-
2
*
g12
[
1
][
2
]
*
a
[
0
][
0
]
*
g12
[
2
][
1
]
+
a
[
0
][
2
]
*
(
g12
[
1
][
2
]
*
g12
[
0
][
1
]
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
]))
+
a
[
0
][
1
]
*
g12
[
0
][
2
]
*
g12
[
2
][
1
]
-
a
[
0
][
1
]
*
g12
[
0
][
1
]
*
g12
[
2
][
2
]
-
a
[
0
][
1
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
])));
g12
[
1
][
0
]
*
g12
[
2
][
2
]
*
a
[
0
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
*
a
[
0
][
1
]
+
d
[
0
][
1
]
=
scale
[
0
]
*
(
a
[
0
][
0
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
g12
[
1
][
0
]
*
a
[
0
][
2
]
*
g12
[
2
][
1
]
-
a
[
0
][
2
]
*
g12
[
2
][
0
]
*
g12
[
1
][
1
]);
2
*
a
[
0
][
1
]
*
(
g12
[
0
][
0
]
*
g12
[
2
][
2
]
-
g12
[
2
][
0
]
*
g12
[
0
][
2
])
+
d
[
0
][
1
]
=
scale
[
0
]
*
(
g12
[
0
][
2
]
*
a
[
0
][
0
]
*
g12
[
2
][
1
]
-
g12
[
2
][
2
]
*
a
[
0
][
0
]
*
g12
[
0
][
1
]
+
a
[
0
][
2
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
2
][
0
]
*
g12
[
0
][
1
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
])));
2
*
g12
[
0
][
0
]
*
g12
[
2
][
2
]
*
a
[
0
][
1
]
-
g12
[
0
][
0
]
*
a
[
0
][
2
]
*
g12
[
1
][
2
]
-
d
[
0
][
2
]
=
scale
[
0
]
*
(
a
[
0
][
0
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
]))
+
2
*
g12
[
2
][
0
]
*
g12
[
0
][
2
]
*
a
[
0
][
1
]
+
a
[
0
][
2
]
*
g12
[
1
][
0
]
*
g12
[
0
][
2
]
-
a
[
0
][
1
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
2
][
0
]
*
g12
[
0
][
1
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
]))
+
g12
[
2
][
2
]
*
g12
[
1
][
0
]
*
a
[
0
][
0
]
+
g12
[
2
][
0
]
*
a
[
0
][
0
]
*
g12
[
1
][
2
]
+
2
*
a
[
0
][
2
]
*
(
g12
[
1
][
1
]
*
g12
[
0
][
0
]
-
g12
[
1
][
0
]
*
g12
[
0
][
1
]));
g12
[
2
][
0
]
*
a
[
0
][
2
]
*
g12
[
0
][
1
]
-
a
[
0
][
2
]
*
g12
[
0
][
0
]
*
g12
[
2
][
1
]);
d
[
1
][
0
]
=
scale
[
1
]
*
(
2
*
a
[
1
][
0
]
*
(
g12
[
1
][
1
]
*
g12
[
2
][
2
]
-
g12
[
1
][
2
]
*
g12
[
2
][
1
])
+
d
[
0
][
2
]
=
scale
[
0
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
*
a
[
0
][
0
]
-
g12
[
0
][
2
]
*
a
[
0
][
0
]
*
g12
[
1
][
1
]
-
a
[
1
][
1
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
g12
[
0
][
0
]
*
g12
[
1
][
2
]
*
a
[
0
][
1
]
+
g12
[
1
][
0
]
*
g12
[
0
][
2
]
*
a
[
0
][
1
]
-
a
[
1
][
2
]
*
(
g12
[
1
][
2
]
*
g12
[
0
][
1
]
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
])));
a
[
0
][
1
]
*
g12
[
0
][
0
]
*
g12
[
2
][
1
]
-
g12
[
2
][
0
]
*
g12
[
1
][
1
]
*
a
[
0
][
0
]
+
d
[
1
][
1
]
=
scale
[
1
]
*
(
a
[
1
][
0
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
2
*
g12
[
1
][
1
]
*
g12
[
0
][
0
]
*
a
[
0
][
2
]
-
2
*
g12
[
1
][
0
]
*
a
[
0
][
2
]
*
g12
[
0
][
1
]
+
2
*
a
[
1
][
1
]
*
(
g12
[
2
][
2
]
*
g12
[
0
][
0
]
-
g12
[
2
][
0
]
*
g12
[
0
][
2
])
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
*
a
[
0
][
0
]
+
g12
[
2
][
0
]
*
a
[
0
][
1
]
*
g12
[
0
][
1
]);
a
[
1
][
2
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
0
][
1
]
*
g12
[
2
][
0
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
])));
d
[
1
][
0
]
=
scale
[
1
]
*
(
-
g12
[
1
][
1
]
*
a
[
1
][
2
]
*
g12
[
0
][
2
]
+
2
*
g12
[
1
][
1
]
*
g12
[
2
][
2
]
*
a
[
1
][
0
]
+
d
[
1
][
2
]
=
scale
[
1
]
*
(
a
[
1
][
0
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
+
g12
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
]))
+
g12
[
1
][
2
]
*
g12
[
0
][
1
]
*
a
[
1
][
2
]
-
2
*
g12
[
1
][
2
]
*
a
[
1
][
0
]
*
g12
[
2
][
1
]
+
a
[
1
][
1
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
0
][
1
]
*
g12
[
2
][
0
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
]))
+
a
[
1
][
1
]
*
g12
[
0
][
2
]
*
g12
[
2
][
1
]
-
a
[
1
][
1
]
*
g12
[
0
][
1
]
*
g12
[
2
][
2
]
-
2
*
a
[
1
][
2
]
*
(
g12
[
1
][
1
]
*
g12
[
0
][
0
]
-
g12
[
1
][
0
]
*
g12
[
0
][
1
]));
g12
[
1
][
0
]
*
g12
[
2
][
2
]
*
a
[
1
][
1
]
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
*
a
[
1
][
1
]
-
d
[
2
][
0
]
=
scale
[
2
]
*
(
2
*
a
[
2
][
0
]
*
(
g12
[
1
][
1
]
*
g12
[
2
][
2
]
-
g12
[
2
][
1
]
*
g12
[
1
][
2
])
+
a
[
1
][
2
]
*
g12
[
2
][
0
]
*
g12
[
1
][
1
]
+
g12
[
1
][
0
]
*
a
[
1
][
2
]
*
g12
[
2
][
1
]);
a
[
2
][
1
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
1
][
2
]
*
g12
[
2
][
0
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
d
[
1
][
1
]
=
scale
[
1
]
*
(
g12
[
0
][
2
]
*
a
[
1
][
0
]
*
g12
[
2
][
1
]
-
g12
[
0
][
1
]
*
g12
[
2
][
2
]
*
a
[
1
][
0
]
+
a
[
2
][
2
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
+
g12
[
2
][
1
]
*
g12
[
1
][
0
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
])));
2
*
g12
[
2
][
2
]
*
g12
[
0
][
0
]
*
a
[
1
][
1
]
-
a
[
1
][
2
]
*
g12
[
0
][
0
]
*
g12
[
1
][
2
]
-
d
[
2
][
1
]
=
scale
[
2
]
*
(
a
[
2
][
0
]
*
(
g12
[
0
][
2
]
*
g12
[
2
][
1
]
+
g12
[
1
][
2
]
*
g12
[
2
][
0
]
-
g12
[
2
][
2
]
*
(
g12
[
0
][
1
]
+
g12
[
1
][
0
]))
+
2
*
g12
[
2
][
0
]
*
a
[
1
][
1
]
*
g12
[
0
][
2
]
-
g12
[
1
][
0
]
*
g12
[
2
][
2
]
*
a
[
1
][
0
]
+
2
*
a
[
2
][
1
]
*
(
g12
[
0
][
0
]
*
g12
[
2
][
2
]
-
g12
[
0
][
2
]
*
g12
[
2
][
0
])
+
g12
[
2
][
0
]
*
g12
[
1
][
2
]
*
a
[
1
][
0
]
+
g12
[
1
][
0
]
*
a
[
1
][
2
]
*
g12
[
0
][
2
]
-
a
[
2
][
2
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
0
][
1
]
*
g12
[
2
][
0
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
])));
g12
[
0
][
0
]
*
a
[
1
][
2
]
*
g12
[
2
][
1
]
+
a
[
1
][
2
]
*
g12
[
0
][
1
]
*
g12
[
2
][
0
]);
d
[
2
][
2
]
=
scale
[
2
]
*
(
a
[
2
][
0
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
+
g12
[
2
][
1
]
*
g12
[
1
][
0
]
-
g12
[
1
][
1
]
*
(
g12
[
0
][
2
]
+
g12
[
2
][
0
]))
+
d
[
1
][
2
]
=
scale
[
1
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
*
a
[
1
][
0
]
-
g12
[
0
][
2
]
*
a
[
1
][
0
]
*
g12
[
1
][
1
]
-
a
[
2
][
1
]
*
(
g12
[
1
][
0
]
*
g12
[
0
][
2
]
+
g12
[
2
][
0
]
*
g12
[
0
][
1
]
-
g12
[
0
][
0
]
*
(
g12
[
1
][
2
]
+
g12
[
2
][
1
]))
+
g12
[
0
][
0
]
*
g12
[
1
][
2
]
*
a
[
1
][
1
]
+
g12
[
1
][
0
]
*
g12
[
0
][
2
]
*
a
[
1
][
1
]
+
2
*
a
[
2
][
2
]
*
(
g12
[
1
][
1
]
*
g12
[
0
][
0
]
-
g12
[
1
][
0
]
*
g12
[
0
][
1
]));
2
*
g12
[
1
][
1
]
*
g12
[
0
][
0
]
*
a
[
1
][
2
]
-
g12
[
0
][
0
]
*
a
[
1
][
1
]
*
g12
[
2
][
1
]
+
g12
[
0
][
1
]
*
g12
[
2
][
0
]
*
a
[
1
][
1
]
-
a
[
1
][
0
]
*
g12
[
2
][
0
]
*
g12
[
1
][
1
]
-
2
*
g12
[
1
][
0
]
*
g12
[
0
][
1
]
*
a
[
1
][
2
]
+
g12
[
1
][
0
]
*
a
[
1
][
0
]
*
g12
[
2
][
1
]);
d
[
2
][
0
]
=
scale
[
2
]
*
(
-
g12
[
1
][
1
]
*
g12
[
0
][
2
]
*
a
[
2
][
2
]
+
g12
[
0
][
1
]
*
g12
[
1
][
2
]
*
a
[
2
][
2
]
+
2
*
g12
[
1
][
1
]
*
a
[
2
][
0
]
*
g12
[
2
][
2
]
-
g12
[
0
][
1
]
*
a
[
2
][
1
]
*
g12
[
2
][
2
]
+
g12
[
0
][
2
]
*
g12
[
2
][
1
]
*
a
[
2
][
1
]
-
2
*
a
[
2
][
0
]
*
g12
[
2
][
1
]
*
g12
[
1
][
2
]
-
g12
[
1
][
0
]
*
a
[
2
][
1
]
*
g12
[
2
][
2
]
+
g12
[
1
][
2
]
*
g12
[
2
][
0
]
*
a
[
2
][
1
]
-
g12
[
1
][
1
]
*
g12
[
2
][
0
]
*
a
[
2
][
2
]
+
g12
[
2
][
1
]
*
g12
[
1
][
0
]
*
a
[
2
][
2
]);
d
[
2
][
1
]
=
scale
[
2
]
*
(
-
g12
[
0
][
1
]
*
g12
[
2
][
2
]
*
a
[
2
][
0
]
+
g12
[
0
][
2
]
*
a
[
2
][
0
]
*
g12
[
2
][
1
]
+
2
*
a
[
2
][
1
]
*
g12
[
0
][
0
]
*
g12
[
2
][
2
]
-
g12
[
1
][
2
]
*
a
[
2
][
2
]
*
g12
[
0
][
0
]
-
2
*
a
[
2
][
1
]
*
g12
[
0
][
2
]
*
g12
[
2
][
0
]
-
g12
[
1
][
0
]
*
a
[
2
][
0
]
*
g12
[
2
][
2
]
+
g12
[
1
][
0
]
*
g12
[
0
][
2
]
*
a
[
2
][
2
]
+
g12
[
1
][
2
]
*
g12
[
2
][
0
]
*
a
[
2
][
0
]
-
g12
[
0
][
0
]
*
a
[
2
][
2
]
*
g12
[
2
][
1
]
+
a
[
2
][
2
]
*
g12
[
0
][
1
]
*
g12
[
2
][
0
]);
d
[
2
][
2
]
=
scale
[
2
]
*
(
g12
[
0
][
1
]
*
g12
[
1
][
2
]
*
a
[
2
][
0
]
-
g12
[
0
][
2
]
*
a
[
2
][
0
]
*
g12
[
1
][
1
]
-
g12
[
0
][
0
]
*
g12
[
1
][
2
]
*
a
[
2
][
1
]
+
g12
[
1
][
0
]
*
g12
[
0
][
2
]
*
a
[
2
][
1
]
-
g12
[
1
][
1
]
*
g12
[
2
][
0
]
*
a
[
2
][
0
]
-
g12
[
2
][
1
]
*
a
[
2
][
1
]
*
g12
[
0
][
0
]
+
2
*
g12
[
1
][
1
]
*
a
[
2
][
2
]
*
g12
[
0
][
0
]
+
g12
[
2
][
1
]
*
g12
[
1
][
0
]
*
a
[
2
][
0
]
+
g12
[
2
][
0
]
*
g12
[
0
][
1
]
*
a
[
2
][
1
]
-
2
*
a
[
2
][
2
]
*
g12
[
1
][
0
]
*
g12
[
0
][
1
]);
RealVec
detadq
;
RealVec
detadq
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
i
=
0
;
i
<
3
;
i
++
)
detadq
+=
RealVec
(
a
[
i
][
0
],
a
[
i
][
1
],
a
[
i
][
2
]).
cross
(
RealVec
(
d
[
i
][
0
],
d
[
i
][
1
],
d
[
i
][
2
]));
detadq
+=
RealVec
(
a
[
i
][
0
],
a
[
i
][
1
],
a
[
i
][
2
]).
cross
(
RealVec
(
d
[
i
][
0
],
d
[
i
][
1
],
d
[
i
][
2
]));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment