Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
gmsh
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Larry Price
gmsh
Commits
0fd8cea8
Commit
0fd8cea8
authored
13 years ago
by
Éric Béchet
Browse files
Options
Downloads
Patches
Plain Diff
No commit message
No commit message
parent
4a6efb1d
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
Solver/STensor33.cpp
+20
-0
20 additions, 0 deletions
Solver/STensor33.cpp
Solver/STensor33.h
+185
-0
185 additions, 0 deletions
Solver/STensor33.h
Solver/STensor43.cpp
+17
-5
17 additions, 5 deletions
Solver/STensor43.cpp
Solver/STensor43.h
+88
-21
88 additions, 21 deletions
Solver/STensor43.h
with
310 additions
and
26 deletions
Solver/STensor33.cpp
0 → 100644
+
20
−
0
View file @
0fd8cea8
#include
"STensor33.h"
void
STensor33
::
print
(
const
char
*
s
)
const
{
char
format
[
512
];
const
char
l
[
256
]
=
"%12.5E %12.5E %12.5E
\n
"
;
sprintf
(
format
,
" tensor3 %s :
\n
%s %s %s
\n
%s %s %s
\n
%s %s %s
\n
"
,
s
,
l
,
l
,
l
,
l
,
l
,
l
,
l
,
l
,
l
);
printf
(
format
,
s
,
_val
[
0
],
_val
[
1
],
_val
[
2
],
_val
[
3
],
_val
[
4
],
_val
[
5
],
_val
[
6
],
_val
[
7
],
_val
[
8
],
_val
[
9
],
_val
[
10
],
_val
[
11
],
_val
[
12
],
_val
[
13
],
_val
[
14
],
_val
[
15
],
_val
[
16
],
_val
[
17
],
_val
[
18
],
_val
[
19
],
_val
[
20
],
_val
[
21
],
_val
[
22
],
_val
[
23
],
_val
[
24
],
_val
[
25
],
_val
[
26
]);
}
This diff is collapsed.
Click to expand it.
Solver/STensor33.h
0 → 100644
+
185
−
0
View file @
0fd8cea8
#ifndef _STENSOR33_H_
#define _STENSOR33_H_
#include
"STensor3.h"
#include
"fullMatrix.h"
#include
"Numeric.h"
// concrete class for general 3rd-order tensor in three-dimensional space
class
STensor33
{
protected:
// 000 001 002 010 ... 211 212 220 221 222
double
_val
[
27
];
public:
inline
int
getIndex
(
int
i
,
int
j
,
int
k
)
const
{
static
int
_index
[
3
][
3
][
3
]
=
{{{
0
,
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
}}};
return
_index
[
i
][
j
][
k
];
}
STensor33
(
const
STensor33
&
other
)
{
for
(
int
i
=
0
;
i
<
27
;
i
++
)
_val
[
i
]
=
other
.
_val
[
i
];
}
// default constructor, null tensor
STensor33
(
const
double
v
=
0.0
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
_val
[
getIndex
(
i
,
j
,
k
)]
=
v
;
}
inline
double
&
operator
()(
int
i
,
int
j
,
int
k
)
{
return
_val
[
getIndex
(
i
,
j
,
k
)];
}
inline
double
operator
()(
int
i
,
int
j
,
int
k
)
const
{
return
_val
[
getIndex
(
i
,
j
,
k
)];
}
STensor33
operator
+
(
const
STensor33
&
other
)
const
{
STensor33
res
(
*
this
);
for
(
int
i
=
0
;
i
<
27
;
i
++
)
res
.
_val
[
i
]
+=
other
.
_val
[
i
];
return
res
;
}
STensor33
&
operator
+=
(
const
STensor33
&
other
)
{
for
(
int
i
=
0
;
i
<
27
;
i
++
)
_val
[
i
]
+=
other
.
_val
[
i
];
return
*
this
;
}
STensor33
&
operator
*=
(
const
double
&
other
)
{
for
(
int
i
=
0
;
i
<
27
;
i
++
)
_val
[
i
]
*=
other
;
return
*
this
;
}
STensor33
transpose
(
int
n
,
int
m
)
const
{
STensor33
ithis
;
if
((
n
==
0
&&
m
==
1
)
||
(
n
==
1
&&
m
==
0
))
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
ithis
(
i
,
j
,
k
)
=
(
*
this
)(
j
,
i
,
k
);
return
ithis
;
}
if
((
n
==
0
&&
m
==
2
)
||
(
n
==
2
&&
m
==
0
))
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
ithis
(
i
,
j
,
k
)
=
(
*
this
)(
k
,
j
,
i
);
return
ithis
;
}
if
((
n
==
1
&&
m
==
2
)
||
(
n
==
2
&&
m
==
1
))
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
ithis
(
i
,
j
,
k
)
=
(
*
this
)(
i
,
k
,
j
);
return
ithis
;
}
return
ithis
+=
(
*
this
);
}
/* STensor33& operator *= (const STensor33 &other)
{
// to be implemented
return *this;
}*/
void
print
(
const
char
*
)
const
;
};
// tensor product
inline
void
tensprod
(
const
SVector3
&
a
,
const
STensor3
&
b
,
STensor33
&
c
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
c
(
i
,
j
,
k
)
=
a
(
i
)
*
b
(
j
,
k
);
}
inline
void
tensprod
(
const
STensor3
&
a
,
const
SVector3
&
b
,
STensor33
&
c
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
c
(
i
,
j
,
k
)
=
a
(
i
,
j
)
*
b
(
k
);
}
inline
double
dot
(
const
STensor33
&
a
,
const
STensor33
&
b
)
{
double
prod
=
0
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
prod
+=
a
(
i
,
j
,
k
)
*
b
(
i
,
j
,
k
);
return
prod
;
}
// full contracted product
inline
STensor33
operator
*
(
const
STensor33
&
t
,
double
m
)
{
STensor33
val
(
t
);
val
*=
m
;
return
val
;
}
inline
STensor33
operator
*
(
double
m
,
const
STensor33
&
t
)
{
STensor33
val
(
t
);
val
*=
m
;
return
val
;
}
inline
STensor3
operator
*
(
const
STensor33
&
t
,
const
SVector3
&
m
)
{
STensor3
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
val
(
i
,
j
)
+=
t
(
i
,
j
,
k
)
*
m
(
k
);
return
val
;
}
inline
STensor3
operator
*
(
const
SVector3
&
m
,
const
STensor33
&
t
)
{
STensor3
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
val
(
j
,
k
)
+=
m
(
i
)
*
t
(
i
,
j
,
k
);
return
val
;
}
inline
SVector3
operator
*
(
const
STensor33
&
t
,
const
STensor3
&
m
)
{
SVector3
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
val
(
i
)
+=
t
(
i
,
j
,
k
)
*
m
(
k
,
j
);
return
val
;
}
inline
SVector3
operator
*
(
const
STensor3
&
m
,
const
STensor33
&
t
)
{
SVector3
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
val
(
k
)
+=
m
(
j
,
i
)
*
t
(
i
,
j
,
k
);
return
val
;
}
inline
double
operator
*
(
const
STensor33
&
m
,
const
STensor33
&
t
)
{
double
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
val
+=
m
(
i
,
j
,
k
)
*
t
(
k
,
j
,
i
);
return
val
;
}
#endif
This diff is collapsed.
Click to expand it.
Solver/STensor43.cpp
+
17
−
5
View file @
0fd8cea8
...
@@ -3,9 +3,21 @@
...
@@ -3,9 +3,21 @@
void
STensor43
::
print
(
const
char
*
s
)
const
void
STensor43
::
print
(
const
char
*
s
)
const
{
{
printf
(
"STensor43::print to be implemented
\n
"
);
char
format
[
2048
];
/* printf(" tensor4 %s : \n %12.5E %12.5E %12.5E \n %12.5E %12.5E %12.5E \n %12.5E %12.5E %12.5E \n",s,
const
char
l
[
256
]
=
"%12.5E %12.5E %12.5E %12.5E %12.5E %12.5E %12.5E %12.5E %12.5E
\n
"
;
(*this)(0,0),(*this)(0,1),(*this)(0,2),
sprintf
(
format
,
" tensor4 %s :
\n
%s %s %s
\n
%s %s %s
\n
%s %s %s
\n
"
,
s
,
l
,
l
,
l
,
l
,
l
,
l
,
l
,
l
,
l
);
(*this)(1,0),(*this)(1,1),(*this)(1,2),
printf
(
format
,
s
,
_val
[
0
],
_val
[
1
],
_val
[
2
],
_val
[
3
],
_val
[
4
],
_val
[
5
],
_val
[
6
],
_val
[
7
],
_val
[
8
],
(*this)(2,0),(*this)(2,1),(*this)(2,2));*/
_val
[
9
],
_val
[
10
],
_val
[
11
],
_val
[
12
],
_val
[
13
],
_val
[
14
],
_val
[
15
],
_val
[
16
],
_val
[
17
],
_val
[
18
],
_val
[
19
],
_val
[
20
],
_val
[
21
],
_val
[
22
],
_val
[
23
],
_val
[
24
],
_val
[
25
],
_val
[
26
],
_val
[
27
],
_val
[
28
],
_val
[
29
],
_val
[
30
],
_val
[
31
],
_val
[
32
],
_val
[
33
],
_val
[
34
],
_val
[
35
],
_val
[
36
],
_val
[
37
],
_val
[
38
],
_val
[
39
],
_val
[
40
],
_val
[
41
],
_val
[
42
],
_val
[
43
],
_val
[
44
],
_val
[
45
],
_val
[
46
],
_val
[
47
],
_val
[
48
],
_val
[
49
],
_val
[
50
],
_val
[
51
],
_val
[
52
],
_val
[
53
],
_val
[
54
],
_val
[
55
],
_val
[
56
],
_val
[
57
],
_val
[
58
],
_val
[
59
],
_val
[
60
],
_val
[
61
],
_val
[
62
],
_val
[
63
],
_val
[
64
],
_val
[
65
],
_val
[
66
],
_val
[
67
],
_val
[
68
],
_val
[
69
],
_val
[
70
],
_val
[
71
],
_val
[
72
],
_val
[
73
],
_val
[
74
],
_val
[
75
],
_val
[
76
],
_val
[
77
],
_val
[
78
],
_val
[
79
],
_val
[
80
]);
}
}
This diff is collapsed.
Click to expand it.
Solver/STensor43.h
+
88
−
21
View file @
0fd8cea8
#ifndef _STENSOR43_H_
#ifndef _STENSOR43_H_
#define _STENSOR43_H_
#define _STENSOR43_H_
#include
"STensor3.h"
#include
"STensor3
3
.h"
#include
"fullMatrix.h"
#include
"fullMatrix.h"
#include
"Numeric.h"
#include
"Numeric.h"
// concrete class for general 3
x3 matrix
// concrete class for general 3
rd-order tensor in three-dimensional space
class
STensor43
{
class
STensor43
{
protected:
protected:
...
@@ -31,13 +32,10 @@ class STensor43 {
...
@@ -31,13 +32,10 @@ class STensor43 {
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
{
_val
[
getIndex
(
i
,
j
,
k
,
l
)]
=
0.
;
if
((
i
==
k
)
&&
(
j
==
l
))
if
((
i
==
k
)
&&
(
j
==
l
))
_val
[
getIndex
(
i
,
j
,
k
,
l
)]
+=
0.5
*
v
;
_val
[
getIndex
(
i
,
j
,
k
,
l
)]
=
v
;
if
((
i
==
l
)
&&
(
j
==
k
))
else
_val
[
getIndex
(
i
,
j
,
k
,
l
)]
+=
0.5
*
v
;
_val
[
getIndex
(
i
,
j
,
k
,
l
)]
=
0.0
;
}
}
}
inline
double
&
operator
()(
int
i
,
int
j
,
int
k
,
int
l
)
inline
double
&
operator
()(
int
i
,
int
j
,
int
k
,
int
l
)
{
{
...
@@ -63,14 +61,7 @@ class STensor43 {
...
@@ -63,14 +61,7 @@ class STensor43 {
for
(
int
i
=
0
;
i
<
81
;
i
++
)
_val
[
i
]
*=
other
;
for
(
int
i
=
0
;
i
<
81
;
i
++
)
_val
[
i
]
*=
other
;
return
*
this
;
return
*
this
;
}
}
/* STensor43& operator *= (const STensor43 &other)
STensor43
transpose
(
int
n
,
int
m
)
const
{
// to be implemented
return *this;
}*/
void
print
(
const
char
*
)
const
;
STensor43
transpose
(
int
n
,
int
m
)
const
{
{
STensor43
ithis
;
STensor43
ithis
;
if
((
n
==
0
&&
m
==
1
)
||
(
n
==
1
&&
m
==
0
))
if
((
n
==
0
&&
m
==
1
)
||
(
n
==
1
&&
m
==
0
))
...
@@ -129,7 +120,12 @@ class STensor43 {
...
@@ -129,7 +120,12 @@ class STensor43 {
}
}
return
ithis
+=
(
*
this
);
return
ithis
+=
(
*
this
);
}
}
/* STensor43& operator *= (const STensor43 &other)
{
// to be implemented
return *this;
}*/
void
print
(
const
char
*
)
const
;
};
};
// tensor product
// tensor product
...
@@ -142,6 +138,23 @@ inline void tensprod(const STensor3 &a, const STensor3 &b, STensor43 &c)
...
@@ -142,6 +138,23 @@ inline void tensprod(const STensor3 &a, const STensor3 &b, STensor43 &c)
c
(
i
,
j
,
k
,
l
)
=
a
(
i
,
j
)
*
b
(
k
,
l
);
c
(
i
,
j
,
k
,
l
)
=
a
(
i
,
j
)
*
b
(
k
,
l
);
}
}
inline
void
tensprod
(
const
SVector3
&
a
,
const
STensor33
&
b
,
STensor43
&
c
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
c
(
i
,
j
,
k
,
l
)
=
a
(
i
)
*
b
(
j
,
k
,
l
);
}
inline
void
tensprod
(
const
STensor33
&
a
,
const
SVector3
&
b
,
STensor43
&
c
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
c
(
i
,
j
,
k
,
l
)
=
a
(
i
,
j
,
k
)
*
b
(
l
);
}
inline
double
dot
(
const
STensor43
&
a
,
const
STensor43
&
b
)
inline
double
dot
(
const
STensor43
&
a
,
const
STensor43
&
b
)
{
{
double
prod
=
0
;
double
prod
=
0
;
...
@@ -153,13 +166,13 @@ inline double dot(const STensor43 &a, const STensor43 &b)
...
@@ -153,13 +166,13 @@ inline double dot(const STensor43 &a, const STensor43 &b)
return
prod
;
return
prod
;
}
}
// full contracted product
inline
STensor43
operator
*
(
const
STensor43
&
t
,
double
m
)
inline
STensor43
operator
*
(
const
STensor43
&
t
,
double
m
)
{
{
STensor43
val
(
t
);
STensor43
val
(
t
);
val
*=
m
;
val
*=
m
;
return
val
;
return
val
;
}
}
inline
STensor43
operator
*
(
double
m
,
const
STensor43
&
t
)
inline
STensor43
operator
*
(
double
m
,
const
STensor43
&
t
)
{
{
STensor43
val
(
t
);
STensor43
val
(
t
);
...
@@ -167,6 +180,27 @@ inline STensor43 operator*(double m,const STensor43 &t)
...
@@ -167,6 +180,27 @@ inline STensor43 operator*(double m,const STensor43 &t)
return
val
;
return
val
;
}
}
inline
STensor33
operator
*
(
const
STensor43
&
t
,
const
SVector3
&
m
)
{
STensor33
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
val
(
i
,
j
,
k
)
+=
t
(
i
,
j
,
k
,
l
)
*
m
(
l
);
return
val
;
}
inline
STensor33
operator
*
(
const
SVector3
&
m
,
const
STensor43
&
t
)
{
STensor33
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
val
(
j
,
k
,
l
)
+=
m
(
i
)
*
t
(
i
,
j
,
k
,
l
);
return
val
;
}
inline
STensor3
operator
*
(
const
STensor43
&
t
,
const
STensor3
&
m
)
inline
STensor3
operator
*
(
const
STensor43
&
t
,
const
STensor3
&
m
)
{
{
STensor3
val
(
0.
);
STensor3
val
(
0.
);
...
@@ -174,10 +208,9 @@ inline STensor3 operator*(const STensor43 &t, const STensor3 &m)
...
@@ -174,10 +208,9 @@ inline STensor3 operator*(const STensor43 &t, const STensor3 &m)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
val
(
i
,
j
)
+=
t
(
i
,
j
,
k
,
l
)
*
m
(
k
,
l
);
val
(
i
,
j
)
+=
t
(
i
,
j
,
k
,
l
)
*
m
(
l
,
k
);
return
val
;
return
val
;
}
}
inline
STensor3
operator
*
(
const
STensor3
&
m
,
const
STensor43
&
t
)
inline
STensor3
operator
*
(
const
STensor3
&
m
,
const
STensor43
&
t
)
{
{
STensor3
val
(
0.
);
STensor3
val
(
0.
);
...
@@ -185,10 +218,44 @@ inline STensor3 operator*( const STensor3 &m , const STensor43 &t)
...
@@ -185,10 +218,44 @@ inline STensor3 operator*( const STensor3 &m , const STensor43 &t)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
val
(
k
,
l
)
+=
t
(
i
,
j
,
k
,
l
)
*
m
(
i
,
j
)
;
val
(
k
,
l
)
+=
m
(
j
,
i
)
*
t
(
i
,
j
,
k
,
l
);
return
val
;
return
val
;
}
}
inline
SVector3
operator
*
(
const
STensor43
&
t
,
const
STensor33
&
m
)
{
SVector3
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
val
(
i
)
+=
t
(
i
,
j
,
k
,
l
)
*
m
(
l
,
k
,
j
);
return
val
;
}
inline
SVector3
operator
*
(
const
STensor33
&
m
,
const
STensor43
&
t
)
{
SVector3
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
val
(
l
)
+=
m
(
k
,
j
,
i
)
*
t
(
i
,
j
,
k
,
l
);
return
val
;
}
inline
double
operator
*
(
const
STensor43
&
m
,
const
STensor43
&
t
)
{
double
val
(
0.
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
for
(
int
j
=
0
;
j
<
3
;
j
++
)
for
(
int
k
=
0
;
k
<
3
;
k
++
)
for
(
int
l
=
0
;
l
<
3
;
l
++
)
val
+=
m
(
i
,
j
,
k
,
l
)
*
t
(
l
,
k
,
j
,
i
);
return
val
;
}
#endif
#endif
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment