mirror of
https://github.com/ParticulateFlow/LPP.git
synced 2025-12-08 06:37:46 +00:00
Committer: ckloss <ckloss@fluid38.(none)>
On branch master Initial commit for lpp, version 2011-10-11
This commit is contained in:
97
scripts/density_area.py
Normal file
97
scripts/density_area.py
Normal file
@ -0,0 +1,97 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
# Script: density_area.py
|
||||
# Purpose: binned atom density by atom type and running area under the curve
|
||||
# Syntax: density.py x/y/z nbin outfile files ...
|
||||
# x/y/z = get density distribution along this axis
|
||||
# nbin = # of bins in desired direction
|
||||
# outfile = file to write flux stats to
|
||||
# files = series of dump files
|
||||
# Example: density_area.py z 100 dens.out dump.*
|
||||
# Author: Paul Crozier (Sandia).
|
||||
# Modified by Jeff Greathouse (Sandia) to include
|
||||
# calculation of area under the curve
|
||||
|
||||
# enable script to run from Python directly w/out Pizza.py
|
||||
|
||||
import sys
|
||||
from dump import dump
|
||||
if not globals().has_key("argv"): argv = sys.argv
|
||||
|
||||
# main script
|
||||
|
||||
if len(argv) < 5:
|
||||
raise StandardError, "Syntax: density.py x/y/z nbin outfile files ..."
|
||||
|
||||
direction = argv[1]
|
||||
nbins = int(argv[2])
|
||||
outfile = argv[3]
|
||||
files = ' '.join(argv[4:])
|
||||
|
||||
# read snapshots one-at-a-time
|
||||
|
||||
d = dump(files,0)
|
||||
d.map(1,"id",2,"type",3,"x",4,"y",5,"z")
|
||||
|
||||
first = 1
|
||||
nsnaps = 0
|
||||
ntypes = 0
|
||||
while 1:
|
||||
time = d.next()
|
||||
if time == -1: break
|
||||
|
||||
if first:
|
||||
tmp,ntypes = d.minmax("type")
|
||||
ntypes = int(ntypes)
|
||||
bin = nbins * [0]
|
||||
for i in xrange(nbins): bin[i] = ntypes * [0]
|
||||
first = 0
|
||||
|
||||
box = (d.snaps[-1].xlo,d.snaps[-1].ylo,d.snaps[-1].zlo,
|
||||
d.snaps[-1].xhi,d.snaps[-1].yhi,d.snaps[-1].zhi)
|
||||
vol = (box[3] - box[0]) * (box[4] - box[1]) * (box[5] - box[2])
|
||||
|
||||
if direction == "x": type,x = d.vecs(time,"type","x")
|
||||
elif direction == "y": type,x = d.vecs(time,"type","y")
|
||||
elif direction == "z": type,x = d.vecs(time,"type","z")
|
||||
|
||||
type = map(int,type)
|
||||
natoms = len(type)
|
||||
for i in xrange(natoms): type[i] -= 1
|
||||
|
||||
for i in xrange(natoms):
|
||||
ibin = int(nbins*x[i] + 0.5)
|
||||
if (ibin < 0): ibin += nbins
|
||||
if (ibin > nbins-1): ibin -= nbins
|
||||
bin[ibin][type[i]] += nbins/vol
|
||||
nsnaps += 1
|
||||
print time,
|
||||
|
||||
print
|
||||
print "Printing ",direction,"-directional density distribution in mol/L to", \
|
||||
outfile
|
||||
conversion = 1660.53873 # convert from atoms/Angs^3 to mol/L
|
||||
|
||||
# Output as x, density_1, area_1, ...
|
||||
|
||||
fp = open(outfile,"w")
|
||||
first = 1
|
||||
xden = nbins * [0]
|
||||
yden = nbins * [0]
|
||||
for i in xrange(nbins): yden[i] = ntypes * [0]
|
||||
sum = ntypes * [0]
|
||||
for i in xrange(nbins):
|
||||
xden[i] = float(i)/float(nbins)
|
||||
print >>fp, xden[i],
|
||||
if first:
|
||||
for j in xrange(ntypes):
|
||||
yden[i][j] = conversion*bin[i][j]/nsnaps
|
||||
print >>fp, yden[i][j], sum[j],
|
||||
first = 0
|
||||
else:
|
||||
for j in xrange(ntypes):
|
||||
yden[i][j] = conversion*bin[i][j]/nsnaps
|
||||
sum[j] += 0.5 * (xden[i] - xden[i-1]) * (yden[i][j] + yden[i-1][j])
|
||||
print >>fp, yden[i][j], sum[j],
|
||||
print >>fp
|
||||
fp.close()
|
||||
Reference in New Issue
Block a user