[cig-commits] r8361 - cs/portal/trunk
leif at geodynamics.org
leif at geodynamics.org
Fri Nov 30 17:24:38 PST 2007
Author: leif
Date: 2007-11-30 17:24:37 -0800 (Fri, 30 Nov 2007)
New Revision: 8361
Modified:
cs/portal/trunk/daemon.py
cs/portal/trunk/mineos.cfg
cs/portal/trunk/mineos.py
Log:
Final changes necessary to run Mineos from the portal: download
"mineos/parameters.pml"; redirect 'mineos.py' output to a log file;
run Mineos for each available earth model; archive output.
Modified: cs/portal/trunk/daemon.py
===================================================================
--- cs/portal/trunk/daemon.py 2007-11-30 23:45:04 UTC (rev 8360)
+++ cs/portal/trunk/daemon.py 2007-12-01 01:24:37 UTC (rev 8361)
@@ -395,6 +395,8 @@
self.jobChannel.send(specfem)
self.jobChannel.send(None) # no more jobs
+ self.setStatus(self.STATUS_PREPARING)
+
while specfem.isAlive():
specfem.statusChanged.wait()
# while
@@ -456,10 +458,10 @@
job = Job(
"run",
executable = self.mineosPathname,
- arguments = [],
+ arguments = ["parameters.pml"],
)
job.urlForInputFile = self.urlForInputFile
- job.inputFiles = ["mineos/event.txt", "mineos/site.txt", "mineos/sitechan.txt"]
+ job.inputFiles = ["mineos/parameters.pml", "mineos/event.txt", "mineos/stations.site", "mineos/stations.sitechan"]
job.outputFiles = ["output_mineos.txt", "mineos.tar.gz"]
return job
Modified: cs/portal/trunk/mineos.cfg
===================================================================
--- cs/portal/trunk/mineos.cfg 2007-11-30 23:45:04 UTC (rev 8360)
+++ cs/portal/trunk/mineos.cfg 2007-12-01 01:24:37 UTC (rev 8361)
@@ -1,9 +1,7 @@
[mineos]
-bin-directory = /home/leif/tmp/mineos/bin
-
event = china_cmt_event
-model = prem_noocean.txt
+#model = prem_noocean.txt
radial = True
toroidal = True
Modified: cs/portal/trunk/mineos.py
===================================================================
--- cs/portal/trunk/mineos.py 2007-11-30 23:45:04 UTC (rev 8360)
+++ cs/portal/trunk/mineos.py 2007-12-01 01:24:37 UTC (rev 8361)
@@ -4,11 +4,23 @@
from pyre.applications import Script
from pyre.units.SI import milli, hertz
from pyre.units.length import km
-import os, sys
+import os, sys, stat
+from os.path import basename, dirname, splitext
mHz = milli*hertz
+# Assume this script is installed alongside the mineos binaries. Note
+# that "DEMO.tar.gz" -- which contains these models -- must be
+# unpacked after installing Mineos.
+prefix = dirname(dirname(__file__))
+modelsDir = prefix + "/share/mineos/models/"
+models = [modelsDir + filename for filename in ["prem_noocean.txt", "prem_ocean.txt"]]
+del filename
+
+mode = stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH
+
+
class Mode(object):
def __init__(self, jcom, id, desc):
self.jcom = jcom
@@ -27,8 +39,8 @@
class Mineos(object):
- def __init__(self, bin, model, event, stations):
- self.bin = bin
+ def __init__(self, model, event, stations):
+ self.bin = prefix + "/bin"
self.model = model
self.event = event
self.stations = stations
@@ -111,6 +123,8 @@
def run(self, program, stdin=None, stdout=None, stderr=None):
+ sys.stdout.flush()
+ sys.stderr.flush()
argv = [program]
pid = os.fork()
if pid:
@@ -133,10 +147,10 @@
fd = os.open(stdin, os.O_RDONLY)
os.dup2(fd, 0)
if stdout is not None:
- fd = os.open(stdout, os.O_WRONLY)
+ fd = os.open(stdout, os.O_WRONLY, mode)
os.dup2(fd, 1)
if stderr is not None:
- fd = os.open(stderr, os.O_WRONLY)
+ fd = os.open(stderr, os.O_WRONLY, mode)
os.dup2(fd, 2)
executable = os.path.join(self.bin, argv[0])
try:
@@ -153,13 +167,10 @@
import pyre.inventory as pyre
- bin = pyre.str("bin-directory")
-
-
#------------------------------------------------------------------------
# common
- model = pyre.str("model")
+ #model = pyre.str("model")
# jcom
radial = pyre.bool("radial")
@@ -210,6 +221,7 @@
def main(self, *args, **kwds):
+
self._info.activate()
enabledModes = []
@@ -222,8 +234,41 @@
self._info.log("nothing to do")
return
- mineos = Mineos(self.bin, self.model, self.event, self.stations)
+ jobdir = os.getcwd()
+
+ archiveDirName = "mineos"
+ os.mkdir(archiveDirName)
+ inputFiles = [self.event] + [self.stations + suffix for suffix in [".site", ".sitechan"]]
+ for inputFile in inputFiles:
+ os.rename(inputFile, os.path.join(archiveDirName, inputFile))
+ os.chdir(archiveDirName)
+ archiveDirPath = os.getcwd()
+
+ for model in models:
+ self._info.log("running Mineos program suite for model '%s'" % model)
+ # create a subdirectory for each model
+ subdir = splitext(basename(model))[0]
+ os.mkdir(subdir)
+ os.chdir(subdir)
+
+ self.runMineos(model, enabledModes)
+
+ os.chdir(archiveDirPath)
+
+ # archive the output
+ os.chdir(jobdir)
+ self.spawn("/bin/tar", "cvzf", archiveDirName + ".tar.gz", archiveDirName)
+
+ # clean up
+ self.spawn("/bin/rm", "-rf", archiveDirName)
+
+ return
+
+
+ def runMineos(self, model, enabledModes):
+ mineos = Mineos(model, "../" + self.event, "../" + self.stations)
+
# minos_bran
for mode in enabledModes:
self._info.log("running program 'minos_bran' for '%s' mode" % mode.desc)
@@ -256,7 +301,25 @@
return
+ def spawn(self, *argv):
+ command = ' '.join(argv)
+ self._info.log("spawning: %s" % command)
+ status = os.spawnvp(os.P_WAIT, argv[0], argv)
+ statusMsg = "%s: exit %d" % (argv[0], status)
+ self._info.log(statusMsg)
+ if status != 0:
+ sys.exit("%s: %s" % (argv[0], statusMsg))
+ return
+
+
def main(*args, **kwds):
+ # Redirect all output -- our journal output, and the output of
+ # our children -- to a file.
+ fd = os.open("output_mineos.txt", os.O_CREAT | os.O_WRONLY, mode)
+ os.dup2(fd, 1)
+ os.dup2(fd, 2)
+ os.close(fd)
+
mineos = MineosScript()
mineos.run(*args, **kwds)
More information about the cig-commits
mailing list