#!/bin/sh

#
# File: pvmmaster
# Auth: Christian Hansen (chansen@cs.umd.edu)
#       University of Maryland, College Park
# Desc: Master pvmd script for IBM PE jobs
# Date: 07/09/04
#

check_pvm() {
  echo "conf" | pvm | grep $PVM_ARCH > /tmp/pvmconf
  awk '{ print $1 " so=ms"}' /tmp/pvmconf | sort > /tmp/hostfile
  output=`sort hostfile | diff /tmp/hostfile -`
  if test "$output" != ""; then
    return 1
  else
    return 0
  fi
}

poe pvmclean

echo "Creating host list..."
rm -f hostfile
for node in $LOADL_PROCESSOR_LIST
do
  echo "$node so=ms" >> hostfile
  echo "Added $node"
done

echo "Starting master pvmd..."
rm -f master.in
touch master.in
tail -f master.in | pvmd3 hostfile > master.out &

echo "Starting slave pvmds..."
poe pvmslave $HOST

retry=0
while check_pvm; do
  echo "Test $retry"
  if test $retry -ge 5; then
    echo "Could not start all pvmds!"
    echo "halt" | pvm > /dev/null
    rm -f master.out master.in hostfile
    exit
  fi
  sleep 5
  retry=`expr $retry + 1`
done

echo "PVM virutal machine started"
echo "conf" | pvm

echo "Running POE commands"
poe -pgmmodel mpmd -cmdfile $1 -infolevel 2

echo "Shutting down pvmds"
echo "halt" | pvm > /dev/null
ps -u $USER -o pid,comm | grep tail > /tmp/pkill
pid=`awk '{ print $1 }' /tmp/pkill`
kill -TERM $pid

rm -f master.out master.in hostfile
