https://github.com/geodynamics/citcoms
Revision 871fd84404759641a2e6db9ebda3db172783a92e authored by Thorsten Becker on 30 June 2008, 02:12:56 UTC, committed by Thorsten Becker on 30 June 2008, 02:12:56 UTC
E->solver.parallel_communication_routs_s contingent on a
"use_cbf_topo" parameter which is for now, by default, off, until the
potential remaining memory bug (?) is tracked down.

Made sure the stress tensor is computed before stress output, as CBF
topo does not require the computation of the stress tensor.

Added a z_layer input flag for zbase_layer other than the four layers
used for the control of phase boundary depth. (Default is backward compatible.)



1 parent eb573f1
Raw File
Tip revision: 871fd84404759641a2e6db9ebda3db172783a92e authored by Thorsten Becker on 30 June 2008, 02:12:56 UTC
Made CBF topography method and call to
Tip revision: 871fd84
plot_layer.py
#!/usr/bin/env python
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#<LicenseText>
#
# plot_layer.py by Eh Tan.
# 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>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

"""Plotting CitcomS temperature at the specified layer

usage: plot_layer.py modelname caps step layer
  modelname: prefix of the combined capfile(s)
  caps: 1 (regional) or 12 (full) caps
  step: time step to plot
  layer: which layer to plot (0 to nodez-1)

input file:
  modelname.capXX.step - CitcomS combined cap file
  infile

output file:
  modelname.capXX.step.zYYY - extracted layer YYY from the cap file(s)
  modelname.capXX.step.zYYY.ps - Postscript image of layer YYY

"""


def read_params(infile):
    ## open input file and read header
    nodex, nodey, nodez = open(infile).readline().split('x')
    nodex = int(nodex)
    nodey = int(nodey)
    nodez = int(nodez)
    #print nodex, nodey, nodez
    return nodex, nodey, nodez


def find_minmax(zfile, nodex, nodey):
    fp = open(zfile)
    x = range(nodex*nodey)
    y = range(nodex*nodey)
    n = 0
    for line in fp.readlines():
        x[n] = float(line.split()[0])
        y[n] = float(line.split()[1])
        n = n + 1
    xmin = min(x)
    xmax = max(x)
    ymin = min(y)
    ymax = max(y)

    fp.close()

    #print xmin, xmax, ymin, ymax
    return xmin, xmax, ymin, ymax


#######################################################################
# Main
#######################################################################
import sys, os

if len(sys.argv) != 5:
    print __doc__
    sys.exit(1)

modelname = sys.argv[1]
caps = int(sys.argv[2])
step = int(sys.argv[3])
layer = int(sys.argv[4])

## read model parameters
infile = '%s.cap%02d.%d' % (modelname, 0, step)
nodex, nodey, nodez = read_params(infile)


## slice the capfile(s), results saved in zfile
import zslice
all_zfiles = ''
for cap in range(caps):
    capfile = '%s.cap%02d.%d' % (modelname, cap, step)
    zfile = zslice.zslicefile(capfile, layer)
    all_zfiles = all_zfiles + ' ' + zfile
    if not os.path.exists(zfile):
        zslice.zslice(capfile, layer)


#######################################################################
# define GMT parameters
#######################################################################

## width of the plot
mapwidth = 6.0

if caps == 1:
    ## find min/max of the coordinate
    xmin, xmax, ymin, ymax = find_minmax(zfile, nodex, nodey)
    bounds = '%f/%f/%f/%f' % (xmin,xmax,ymin,ymax)
    proj = 'M%f' % mapwidth
    resolution = '%f/%f' % ( (xmax-xmin)/nodex, (ymax-ymin)/nodey )
else:
    ## map centered at Pacific
    bounds = '0/360/-90/90'
    proj = 'H180/%d' % mapwidth
    ## map centered at Greenwich
    #bounds = '-180/180/-90/90'
    #proj = 'H0/%d' % mapwidth
    resolution = '0.5'

cptfile = 'zz.cpt'
grdfile = '%s.%d.z%03d.tgrd' % (modelname, step, layer)
psfile = '%s.%d.z%03d.ps' % (modelname, step, layer)


#print 'Plotting...'

#######################################################################
## call GMT commands to do the followings:
## 1. cut the 1st, 2nd, 6th columns (lat, lon, temperature) of zfiles
## 2. using GMT's "surface" to generate the grdfile
## 3. generate color palette
## 4. plot the grdfile
## 5. plot the coastlines
## 6. set the font size for the colorbar
## 7. plot the colorbar
## 8. remove the grdfile and cptfile
#######################################################################

## min/max values to truncate temperature field
tmin = 0
tmax = 1

command = '''
cut -d' ' -f1,2,6 %(all_zfiles)s | \
    surface -I%(resolution)s -G%(grdfile)s -R%(bounds)s \
            -Ll%(tmin)d -Lu%(tmax)d

makecpt -Cpolar -T0/1/.1 > %(cptfile)s

grdimage %(grdfile)s -C%(cptfile)s -Bg90 -R%(bounds)s -J%(proj)s -X1 -Y2.0 -P -K > %(psfile)s

pscoast -R%(bounds)s -J%(proj)s -Bg90 -W -Dc -K -O >> %(psfile)s

gmtset  ANOT_FONT_SIZE 9

psscale -C%(cptfile)s -D8.5/2.25/4.0/0.25 -O >> %(psfile)s

rm -f %(grdfile)s %(cptfile)s
''' % vars()

#print command
os.system(command)

#print 'Done'


# version
# $Id$

# End of file
back to top