[Thread Prev][Thread Next][Index]
[ferret_users] Simultaneous ferret execs with -gif lead to "file exists" error
I have written a Python script to wrap around a Ferret script so that I
can simultaneously generate lots of panels for an animation. The Python
script uses MPI to distribute lots (order 100's) of Ferret sessions across
a Linux cluster. The problem is that it almost works, but not quite. A
small percentage of the resulting gif files are not generated because
Ferret thinks the output file already exists. I get errors like:
**ERROR: .gif: File exists
gdeactivatews() 3 GKS not in proper state: GKS shall be in the state
WSAC
gactivatews() 6 GKS not in proper state: GKS shall be either in the
state WSOP or in the state WSAC
ginqwsconntype() 7 GKS not in proper state: GKS shall be in one of the
states WSOP, WSAC or SGOP
gsetwswindow() 7 GKS not in proper state: GKS shall be in one of the
states WSOP, WSAC or SGOP
gescsetdcsize() 7 GKS not in proper state: GKS shall be in one of the
states WSOP, WSAC or SGOP
gupdatews() 7 GKS not in proper state: GKS shall be in one of the
states WSOP, WSAC or SGOP
STOP -script mode, ERROR RUNNING SCRIPT
Cached data cleared from memory
**ERROR: required program command has not been given: graphical output
device isnt ready
POLYGON/nolab/noaxes/line=1 {0,0,1,1,0},{0,1,1,0,0}
Command file, command group, or REPEAT execution aborted
The Ferret script uses the command "frame/file=anim`aa`.gif" to write the
file, and Ferret is executed using the "-gif -script <scriptname>" command
line options. I have verified that every process is using unique filenames
so there should be no overlap problem.
Has anybody else run into this sort of error? Does Ferret's frame command
use a generic name and then rename the file to the final output name? If
so, that could lead to this sort of behavior. Any suggestions on how to
get around this?
If it helps, here is the relevant parts of the Ferret script (note that
plot_bp is a 2nd script that does the actual plot commands):
define symbol start = $1
define symbol end = $2
let aa=($start)
repeat/l=($start):($end) ( ;\
go plot_bp ;\
frame/file="anim/anim`aa`.gif" ;\
let aa=`aa+1` ;\
)
And, here is the main portion of the Python script:
comm = MPI.COMM_WORLD
nproc = comm.Get_size()
myrank = comm.Get_rank()
script = "anim_auto.jnl" # Ferret script name
t1 = 0 # 0-based start index for input file time
t2 = 100 # 0-based end index for input file time
#
# Have each task call Ferret for its set of times...
#
t1me,t2me = distribute_times(t1,t2,myrank,nproc,comm) # Returns times for
this task
ntme = t2me-t1me+1
for k in xrange(t1me,t2me+1):
cmd = "csh -c \"source ~/ferret_paths; ferret -gif -script
"+script+" %d %d\""%(k+1,k+1)
os.system(cmd)
Also, if it would matter, I am running on a cluster that uses a Lustre
file system. I have had some trouble in the past with some programs that
expect to be able to do file locking, which Lustre doesn't like. But, I do
not think that is the case for Ferret.
Thanks,
Bill
___________________________________________________________________
William I. Gustafson Jr., Ph.D.
Scientist
ATMOSPHERIC SCIENCES AND GLOBAL CHANGE DIVISION
Pacific Northwest National Laboratory
P.O. 999, MSIN K9-30
Richland, WA 99352
Tel: 509-372-6110
William.Gustafson@xxxxxxxx
http://www.pnnl.gov/atmospheric/staff/staff_info.asp?staff_num=5716
http://www.researcherid.com/rid/A-7732-2008
[Thread Prev][Thread Next][Index]
Contact Us
Dept of Commerce /
NOAA /
OAR /
PMEL /
Ferret
Privacy Policy | Disclaimer | Accessibility Statement