Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F90339190
compliance.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Oct 31, 16:48
Size
2 KB
Mime Type
text/x-python
Expires
Sat, Nov 2, 16:48 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21995314
Attached To
rLAMMPS lammps
compliance.py
View Options
#!/usr/bin/env python
# This file reads in the file log.lammps generated by the script ELASTIC/in.elastic
# It prints out the 6x6 tensor of elastic constants Cij
# followed by the 6x6 tensor of compliance constants Sij
# It uses the same conventions as described in:
# Sprik, Impey and Klein PRB (1984).
# The units of Cij are whatever was used in log.lammps (usually GPa)
# The units of Sij are the inverse of that (usually 1/GPa)
from
numpy
import
zeros
from
numpy.linalg
import
inv
# define logfile layout
nvals
=
21
valpos
=
4
valstr
=
'
\n
Elastic Constant C'
# define order of Cij in logfile
cindices
=
[
0
]
*
nvals
cindices
[
0
]
=
(
0
,
0
)
cindices
[
1
]
=
(
1
,
1
)
cindices
[
2
]
=
(
2
,
2
)
cindices
[
3
]
=
(
0
,
1
)
cindices
[
4
]
=
(
0
,
2
)
cindices
[
5
]
=
(
1
,
2
)
cindices
[
6
]
=
(
3
,
3
)
cindices
[
7
]
=
(
4
,
4
)
cindices
[
8
]
=
(
5
,
5
)
cindices
[
9
]
=
(
0
,
3
)
cindices
[
10
]
=
(
0
,
4
)
cindices
[
11
]
=
(
0
,
5
)
cindices
[
12
]
=
(
1
,
3
)
cindices
[
13
]
=
(
1
,
4
)
cindices
[
14
]
=
(
1
,
5
)
cindices
[
15
]
=
(
2
,
3
)
cindices
[
16
]
=
(
2
,
4
)
cindices
[
17
]
=
(
2
,
5
)
cindices
[
18
]
=
(
3
,
4
)
cindices
[
19
]
=
(
3
,
5
)
cindices
[
20
]
=
(
4
,
5
)
# open logfile
logfile
=
open
(
"log.lammps"
,
'r'
)
txt
=
logfile
.
read
()
# search for 21 elastic constants
c
=
zeros
((
6
,
6
))
s2
=
0
for
ival
in
range
(
nvals
):
s1
=
txt
.
find
(
valstr
,
s2
)
if
(
s1
==
-
1
):
print
"Failed to find elastic constants in log file"
exit
(
1
)
s1
+=
1
s2
=
txt
.
find
(
"
\n
"
,
s1
)
line
=
txt
[
s1
:
s2
]
# print line
words
=
line
.
split
()
(
i1
,
i2
)
=
cindices
[
ival
]
c
[
i1
,
i2
]
=
float
(
words
[
valpos
])
c
[
i2
,
i1
]
=
c
[
i1
,
i2
]
print
"C tensor [GPa]"
for
i
in
range
(
6
):
for
j
in
range
(
6
):
print
"
%10.8g
"
%
c
[
i
][
j
],
print
# apply factor of 2 to columns of off-diagonal elements
for
i
in
range
(
6
):
for
j
in
range
(
3
,
6
):
c
[
i
][
j
]
*=
2.0
s
=
inv
(
c
)
# apply factor of 1/2 to columns of off-diagonal elements
for
i
in
range
(
6
):
for
j
in
range
(
3
,
6
):
s
[
i
][
j
]
*=
0.5
print
"S tensor [1/GPa]"
for
i
in
range
(
6
):
for
j
in
range
(
6
):
print
"
%10.8g
"
%
s
[
i
][
j
],
print
Event Timeline
Log In to Comment