https://github.com/geodynamics/citcoms
Revision c27c7164b00b949f947d5f0129903a294b5ddba7 authored by Michael Gurnis on 29 January 2007, 20:51:24 UTC, committed by Michael Gurnis on 29 January 2007, 20:51:24 UTC
1 parent a60c042
Tip revision: c27c7164b00b949f947d5f0129903a294b5ddba7 authored by Michael Gurnis on 29 January 2007, 20:51:24 UTC
The functionality of this routine is now expanded so that for evey time step the element materials are read in. The code for determining the material file names and opening the file name and then reading in the element files is placed in the same code that the age grids and velocity files are processed. Obviously, reading in materials currently only works for Full; fill be working on Regional next.
The functionality of this routine is now expanded so that for evey time step the element materials are read in. The code for determining the material file names and opening the file name and then reading in the element files is placed in the same code that the age grids and velocity files are processed. Obviously, reading in materials currently only works for Full; fill be working on Regional next.
Tip revision: c27c716
estimate_size.py
#!/usr/bin/env python
#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#<LicenseText>
#
# estimate_size.py by Luis Armendariz
# Copyright (C) 2002-2005, California Institute of Technology.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#</LicenseText>
#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
"""
This script estimates the size of the output from CitcomS,
assuming binary floating point data.
Options are:
estimate_size.py [ --help | -h ]
[ --steps <number> | -t <number> ]
[ --nodex <number> | -x <number> ]
[ --nodey <number> | -y <number> ]
[ --nodez <number> | -z <number> ]
[ --caps <number> | -c <number> | --full | --regional ]
[ --all | -a ]
[ --connectivity ]
[ --stress ]
[ --pressure ]
[ --surf ]
[ --botm ]
[ --horiz_avg ]
Examples:
python estimate_size.py
python estimate_size.py --all
python estimate_size.py --full --all --steps=100 --nodex=33 --nodey=33 -z65
python estimate_size.py --regional --surf --botm --pressure
python estimate_size.py --regional --pressure --stress -x55 -y55 -z43
python estimate_size.py --caps=12 --steps 100 -x 33 -y 33 -z 33 --stress
python estimate_size.py -c12 -t100 -x33 -y33 -z33 -a
python estimate_size.py --help
"""
def TiB(x):
"""Convert from bytes to terabytes"""
return x / 1024.0 ** 4
def GiB(x):
"""Convert from bytes to gigabytes"""
return x / 1024.0 ** 3
def MiB(x):
"""Convert from bytes to megabytes"""
return x / 1024.0 ** 2
def KiB(x):
"""Convert from bytes to kilobytes"""
return x / 1024.0
def ps(x):
"""print size"""
if x < 1024:
return '%g bytes' % x
elif x < 1024**2:
return '%g KiB' % KiB(x)
elif x < 1024**3:
return '%g MiB' % MiB(x)
elif x < 1024**4:
return '%g GiB' % GiB(x)
else:
return '%g TiB' % TiB(x)
def pc(x,total):
"""print percentage"""
return '%2.3f%%' % ((100*x)/float(total))
def main():
import sys
import getopt
out = {
'connectivity': False,
'stress': False,
'pressure': False,
'surf': False,
'botm': False,
'horiz_avg': False,
}
caps = None
steps = None
nodex = None
nodey = None
nodez = None
opts, args = getopt.getopt(sys.argv[1:], "hac:t:x:y:z:",
['help','full','regional','caps=','steps=','nodex=','nodey=','nodez=',
'all','connectivity','stress','pressure','surf','botm','horiz_avg'])
for opt,arg in opts:
if opt in ('-h','--help'):
print __doc__
sys.exit(1)
if opt == '--regional':
caps = 1
if opt == '--full':
caps = 12
if opt in ('-c','--caps'):
caps = int(arg)
if opt in ('-t','--steps'):
steps = int(arg)
if opt in ('-x','--nodex'):
nodex = int(arg)
if opt in ('-y','--nodey'):
nodey = int(arg)
if opt in ('-z','--nodez'):
nodez = int(arg)
if opt in ('-a','--all'):
for k in out:
out[k] = True
if opt == '--connectivity':
out['connectivity'] = True
if opt == '--stress':
out['stress'] = True
if opt == '--pressure':
out['pressure'] = True
if opt == '--surf':
out['surf'] = True
if opt == '--botm':
out['botm'] = True
if opt == '--horiz_avg':
out['horiz_avg'] = True
if not caps or not steps or not nodex or not nodey or not nodez:
print "Enter the following quantities:\n"
if not caps:
caps = int(raw_input('\tcaps = '))
if not steps:
steps = int(raw_input('\tsteps = '))
if not nodex:
nodex = int(raw_input('\tnodex = '))
if not nodey:
nodey = int(raw_input('\tnodey = '))
if not nodez:
nodez = int(raw_input('\tnodez = '))
nno = nodex * nodey * nodez
nsf = nodex * nodey
elx = nodex - 1
ely = nodey - 1
elz = nodez - 1
nel = elx * ely * elz
# conversion factor (double = 8 bytes, float = 4 bytes, int = 4 bytes)
f = 4
# fields
tensor3d = f * nno * 6
vector3d = f * nno * 3
scalar3d = f * nno * 1
vector2d = f * nsf * 2
scalar2d = f * nsf * 1
scalar1d = f * nodez
buffer_total = tensor3d + vector3d + scalar3d + \
vector2d + scalar2d + \
scalar1d
connectivity = f * nel * 8
coord = caps * scalar3d
velocity = steps * caps * vector3d
temperature = steps * caps * scalar3d
viscosity = steps * caps * scalar3d
pressure = steps * caps * scalar3d
stress = steps * caps * tensor3d
surf_velocity = steps * caps * vector2d
surf_temperature = steps * caps * scalar2d
surf_heatflux = steps * caps * scalar2d
surf_topography = steps * caps * scalar2d
surf_total = surf_velocity + surf_temperature + \
surf_heatflux + surf_topography
have_temp = steps * caps * scalar1d
have_vxy = steps * caps * scalar1d
have_vz = steps * caps * scalar1d
have_total = have_temp + have_vxy + have_vz
total = coord + velocity + temperature + viscosity
if out['connectivity']:
total += connectivity
if out['stress']:
total += stress
if out['pressure']:
total += pressure
if out['surf']:
total += surf_total
if out['botm']:
total += surf_total
if out['horiz_avg']:
total += have_total
hr = 33
print "\n"
print "By Type (per cap per timestep):"
print "=" * hr
print "3D Tensor Field: %s" % ps(tensor3d)
print "3D Vector Field: %s" % ps(vector3d)
print "3D Scalar Field: %s" % ps(scalar3d)
print "2D Vector Field: %s" % ps(vector2d)
print "2D Scalar Field: %s" % ps(scalar2d)
print "1D Scalar Field: %s" % ps(scalar1d)
print "-" * hr
print "total %s" % ps(buffer_total)
print "\n"
print "By Dataset:"
print "=" * hr
if out['connectivity']:
print "connectivity %s" % ps(connectivity)
if True:
print "coord %s" % ps(coord)
print "velocity %s" % ps(velocity)
print "temperature %s" % ps(temperature)
print "viscosity %s" % ps(viscosity)
if out['pressure']:
print "pressure %s" % ps(pressure)
if out['stress']:
print "stress %s" % ps(stress)
if out['surf']:
print "surf/velocity %s" % ps(surf_velocity)
print "surf/heatflux %s" % ps(surf_heatflux)
print "surf/topography %s" % ps(surf_topography)
if out['botm']:
print "botm/velocity %s" % ps(surf_velocity)
print "botm/heatflux %s" % ps(surf_heatflux)
print "botm/topography %s" % ps(surf_topography)
if out['horiz_avg']:
print "horiz_avg/temperature %s" % ps(have_temp)
print "horiz_avg/horiz_velo %s" % ps(have_vxy)
print "horiz_avg/vert_velo %s" % ps(have_vz)
if True:
print "-" * hr
print "total %s" % ps(total)
print "\n"
print "By Percentage:"
print "=" * hr
if out['connectivity']:
print "connectivity %s" % pc(connectivity,total)
if True:
print "coord %s" % pc(coord,total)
print "velocity %s" % pc(velocity,total)
print "temperature %s" % pc(temperature,total)
print "viscosity %s" % pc(viscosity,total)
if out['pressure']:
print "pressure %s" % pc(pressure,total)
if out['stress']:
print "stress %s" % pc(stress,total)
if out['surf']:
print "surf %s" % pc(surf_total,total)
if out['botm']:
print "botm %s" % pc(surf_total,total)
if out['horiz_avg']:
print "horiz_avg %s" % pc(have_total,total)
if __name__ == '__main__':
main()
# version
# $Id$
# End of file
Computing file changes ...