#!/bin/bash

set -e


runComputation(){

RESULTPATH=`pwd`/$1/
PARAMETERFILE=${RESULTPATH}${1}".parset"
LOGFILE=${RESULTPATH}${1}".log"

#echo $RESULTPATH

# Set up directory where to store the results
if ! test -d "$RESULTPATH"; then
    mkdir $RESULTPATH
fi
#rm $RESULTPATH/*

cat > "${PARAMETERFILE}" <<EOF
# Number of grid levels
numLevels = $2

# Tolerance of the Dirichlet-Neumann solver
ddTolerance = 1e-12

# Max number of Dirichlet-Neumann steps
maxDirichletNeumannSteps = 10

# Damping for the Dirichlet-Neumann solver
damping = $3

# Tolerance of the trust-region solver for the rod problem
trTolerance = 1e-12

# Max number of steps of the trust region solver
maxTrustRegionSteps = 20

# Initial trust-region radius
initialTrustRegionRadius = 1

# Number of multigrid iterations per trust-region step
numIt = 30

# Number of presmoothing steps
nu1 = 3

# Number of postsmoothing steps
nu2 = 3

# Number of coarse grid corrections
mu = 1

# Number of base solver iterations
baseIt = 100

# Tolerance of the multigrid solver
mgTolerance = 1e-13

# Tolerance of the base grid solver
baseTolerance = 1e-8

# Measure convergence
instrumented = 1

############################
#   Problem specifications
############################

path = /home/haile/sander/data/multicoupling/simplecoupling/
gridFile = hexarod.grid
dirichletNodes = hexarod.dn
dirichletValues = hexarod.nodv
interfaceNodes  = hexarod.ifn

# Number of elements of the rod grid
numRodBaseElements = 5

# Dirichlet values
dirichletValueX = 0.5
dirichletValueY = 0.6
dirichletValueZ = 10

dirichletAxisX = 1
dirichletAxisY = 0
dirichletAxisZ = 0
dirichletAngle = 0

# Where to write the results
resultPath = $RESULTPATH

EOF

# run simulation
../dirneucoupling ${PARAMETERFILE} | tee ${LOGFILE}
}

# Parameters:
# 1: result directory
# 2: number of levels
# 3: damping factor

# run problems
#runComputation 2levels 2


for level in 2 3; do

    LEVELDIR=${level}"levels"
    
    if test -e ${LEVELDIR}/convrates; then
        rm ${LEVELDIR}/convrates
    fi

    for damping in 0.01 0.02; do

        runComputation $LEVELDIR $level $damping

        # Append convergence rate of this run to overall list for this level
        cat convrate >> ${LEVELDIR}/convrates

    done

done