From a341cd03b43af6e192d4d6f0cb0716ae967ac218 Mon Sep 17 00:00:00 2001 From: henry Date: Wed, 21 May 2008 19:04:59 +0100 Subject: [PATCH] Added wmakeLockScheduler --- wmake/wmakeLockScheduler | 201 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100755 wmake/wmakeLockScheduler diff --git a/wmake/wmakeLockScheduler b/wmake/wmakeLockScheduler new file mode 100755 index 0000000000..b8db7492f7 --- /dev/null +++ b/wmake/wmakeLockScheduler @@ -0,0 +1,201 @@ +#!/bin/bash +#------------------------------------------------------------------------------ +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. +# \\/ M anipulation | +#------------------------------------------------------------------------------- +# License +# This file is part of OpenFOAM. +# +# OpenFOAM 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. +# +# OpenFOAM 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 OpenFOAM; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# Script +# wmakeScheduler +# +# Description +# Scheduler for network distributed compilations using wmake. +# - WM_HOSTS contains a list of hosts and number of concurrent processes +# eg, +# export WM_HOSTS="hostA:1 hostB:2 hostC:1" +# - WM_COLOURS contains a list of colours to cycle through +# export WM_COLOURS="black blue green cyan red magenta yellow" +# +# Sources the relevant cshrc/bashrc if not set. +# +# WM_PROJECT_DIR, WM_PROJECT and WM_PROJECT_VERSION will have been set +# before calling this routine +# +# Usage +# wmakeScheduler COMMAND +# run 'COMMAND' on one of the slots listed in WM_HOSTS +# +# wmakeScheduler -count +# count the total number of slots available in WM_HOSTS +# eg, WM_NCOMPPROCS=$(wmakeScheduler -count) +# +#------------------------------------------------------------------------------- +lockDir=$HOME/.wmakeScheduler + +# fallback - 1 core on current host +: ${WM_HOSTS:=$HOST:1} + +# count the total number of slots available and exit +if [ "$1" = "-count" ] +then + expr $( + for slotGroup in $WM_HOSTS + do + n=${slotGroup##*:} + if [ "$n" = "${slotGroup%%:*}" ]; then n=1; fi # missing ':' + echo "+ ${n:-1}" + done) + exit 0 +fi + +# where to source WM_PROJECT settings in a remote shell +# This code tries to figure out which cshrc or bashrc to execute. +# !! Assumes remote computer running same shell and startup files +# in same location + +sourceFoam=false # fallback command +case $SHELL in +*/csh | */tcsh ) # [t]csh vs bash|ksh|sh + shellRc=cshrc + ;; +*) + shellRc=bashrc + ;; +esac + +# check ~/.$WM_PROJECT-$WM_PROJECT_VERSION/ +# check ~/.$WM_PROJECT/$WM_PROJECT_VERSION/ +# check ~/.$WM_PROJECT/ +# check /etc/ +# check /dev/null; then + # Set colour + colour=${colours[$colourIndex]} + #echo "** host=$host colourIndex=$colourIndex colour=$colour" + + if [ "$host" = "$HOST" ]; then + if [ "$colour" ]; then + eval $* 2>&1 | colourPipe $colour + else + eval $* + fi + elif [ -n "$JOB_ID" ]; then + qrsh -inherit -v PWD $host "$rcmd" + else + if [ "$colour" ]; then + ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 | colourPipe $colour + else + ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" + fi + fi + retval=$? + + # Release lock + rm -f "$lockFile" 2>/dev/null + exit $retval + fi + i=$(expr $i + 1) + + # Cycle through colours + colourIndex=$(expr $colourIndex + 1) + if (( $colourIndex >= $nColours )); then + colourIndex=0 + fi + done + done +done + +if [ "$WM_COLOURS" ]; then + setterm -foreground default +fi + +#------------------------------------------------------------------------------