Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F93653768
ReadCarFile.c
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
Sat, Nov 30, 11:32
Size
3 KB
Mime Type
text/x-c
Expires
Mon, Dec 2, 11:32 (1 d, 21 h)
Engine
blob
Format
Raw Data
Handle
22679918
Attached To
rLAMMPS lammps
ReadCarFile.c
View Options
/****************************** ReadCarFile.c ******************************
*
* This function opens the .car file and extracts coordinate information
* into the atoms Atom structure
*
* THIS FUNCTION HAS BEEN MODIFIED FROM Msi2LMP2 AND USES THE ATOM
* STRUCTURE MEMBERS DIFFERENTLY
*/
#include "lmp2.h"
void
ReadCarFile
(
FILE
*
CarF
,
struct
Sys
*
sysinfo
)
{
char
line
[
MAX_LINE_LENGTH
];
/* Stores lines as they are read in */
int
k
,
m
,
n
;
/* counters */
int
skip
;
/* lines to skip at beginning of file */
/* Determine Number of molecules & atoms */
rewind
(
CarF
);
sysinfo
->
no_molecules
=
-
1
;
/* Set to -1 because counter will be
incremented an extra time at the end of the file */
fgets
(
line
,
MAX_LINE_LENGTH
,
CarF
);
/* Read header line */
/* Check for periodicity, set periodic and skip */
if
(
strncmp
(
fgets
(
line
,
MAX_LINE_LENGTH
,
CarF
),
"PBC=ON"
,
6
)
==
0
)
{
sysinfo
->
periodic
=
1
;
skip
=
5
;
/* Data starts 5 lines from beginning of file */
}
else
{
sysinfo
->
periodic
=
0
;
skip
=
4
;
}
/* First pass through file -- Count molecules */
while
(
fgets
(
line
,
MAX_LINE_LENGTH
,
CarF
)
!=
NULL
)
if
(
strncmp
(
line
,
"end"
,
3
)
==
0
)
sysinfo
->
no_molecules
++
;
/* Allocate space to keep track of the number of atoms within a molecule */
sysinfo
->
molinfo
=
(
struct
Mol
*
)
calloc
(
sysinfo
->
no_molecules
,
sizeof
(
struct
Mol
));
if
(
sysinfo
->
molinfo
==
NULL
)
{
puts
(
"Could not allocate memory for molinfo"
);
exit
(
2
);
}
/* Second pass through file -- Count atoms */
rewind
(
CarF
);
for
(
n
=
0
;
n
<
skip
;
n
++
)
/* Skip beginning lines */
fgets
(
line
,
MAX_LINE_LENGTH
,
CarF
);
sysinfo
->
molinfo
[
0
].
start
=
0
;
sysinfo
->
molinfo
[
0
].
end
=
0
;
for
(
n
=
0
;
n
<
sysinfo
->
no_molecules
;
n
++
)
{
if
(
n
!=
0
)
{
sysinfo
->
molinfo
[
n
].
start
=
sysinfo
->
molinfo
[
n
-
1
].
end
;
sysinfo
->
molinfo
[
n
].
end
=
sysinfo
->
molinfo
[
n
-
1
].
end
;
}
while
(
strncmp
(
fgets
(
line
,
MAX_LINE_LENGTH
,
CarF
),
"end"
,
3
)
)
sysinfo
->
molinfo
[
n
].
end
++
;
}
n
=
sysinfo
->
no_molecules
-
1
;
sysinfo
->
natoms
=
sysinfo
->
molinfo
[
n
].
end
;
/* Allocate space for atoms Atom structures */
sysinfo
->
atoms
=
(
struct
Atom
*
)
calloc
(
sysinfo
->
natoms
,
sizeof
(
struct
Atom
));
if
(
sysinfo
->
atoms
==
NULL
)
{
puts
(
"Could not allocate memory for AtomList"
);
exit
(
2
);
}
/* Third pass through file -- Read+Parse Car File */
rewind
(
CarF
);
for
(
n
=
0
;
n
<
skip
;
n
++
)
fgets
(
line
,
MAX_LINE_LENGTH
,
CarF
);
for
(
m
=
0
;
m
<
sysinfo
->
no_molecules
;
m
++
)
{
/* m loops through molecules */
for
(
n
=
sysinfo
->
molinfo
[
m
].
start
;
n
<
sysinfo
->
molinfo
[
m
].
end
;
n
++
)
{
/* n loops through atoms within a molecule */
sysinfo
->
atoms
[
n
].
molecule
=
m
;
fscanf
(
CarF
,
"%s %lf %lf %lf %s %s %s %s %f"
,
sysinfo
->
atoms
[
n
].
name
,
&
(
sysinfo
->
atoms
[
n
].
xyz
[
0
]),
&
(
sysinfo
->
atoms
[
n
].
xyz
[
1
]),
&
(
sysinfo
->
atoms
[
n
].
xyz
[
2
]),
sysinfo
->
atoms
[
n
].
res_name
,
sysinfo
->
atoms
[
n
].
res_num
,
sysinfo
->
atoms
[
n
].
potential
,
sysinfo
->
atoms
[
n
].
element
,
&
(
sysinfo
->
atoms
[
n
].
q
));
}
/* End n (atoms) loop */
fgets
(
line
,
MAX_LINE_LENGTH
,
CarF
);
fgets
(
line
,
MAX_LINE_LENGTH
,
CarF
);
}
/* End m (molecule) loop */
}
/* End ReadCarFile() */
Event Timeline
Log In to Comment