Skip to content
Snippets Groups Projects
tnl-run-mean-curvature-flow-contour-video 5.23 KiB
Newer Older
  • Learn to ignore specific revisions
  • Ondrej Szekely's avatar
    Ondrej Szekely committed
    #!/bin/bash
    
    device="host"
    sizes="16"
    initFunctions="sin-bumps"
    snapshotPeriod=0.001
    finalTime=0.15
    solverName="mean-curvature-flow"
    boundaryCondition="neumann"
    boundaryValue=0
    minZ=-1
    maxZ=1
    contourHeight=0.3
    
    spaceStep=$(expr 1/($sizes-2) | bc | sed 's/^\./0./')
    
    setupInitFunction()
    {
       initFunction=$1
          origin=0
          proportions=1
          amplitude=1.0
          waveLength=1.0
          waveLengthX=1.0
          waveLengthY=1.0
          waveLengthZ=1.0
          wavesNumber=0.0
          wavesNumberX=0.0
          wavesNumberY=0.0
          wavesNumberZ=0.0
          phase=0.0
          phaseX=0.0
          phaseY=0.0
          phaseZ=0.0
          sigma=1
    }
    
    setupGrid()
    {
       gridSize=$1
       tnl-grid-setup --dimensions 2 \
                      --origin-x ${origin} \
                      --origin-y ${origin} \
                      --origin-z ${origin} \
                      --proportions-x ${proportions} \
                      --proportions-y ${proportions} \
                      --proportions-z ${proportions} \
                      --size-x ${gridSize} \
                      --size-y ${gridSize} \
                      --size-z ${gridSize} 
    }
    
    setInitialCondition()
    {
       initFunction=$1
       tnl-init --test-function ${initFunction} \
    	    --output-file initial.tnl \
                --amplitude ${amplitude} \
                --wave-length ${waveLength} \
                --wave-length-x ${waveLengthX} \
                --wave-length-y ${waveLengthY} \
                --wave-length-z ${waveLengthZ} \
                --waves-number ${wavesNumber} \
                --waves-number-x ${wavesNumberX} \
                --waves-number-y ${wavesNumberY} \
                --waves-number-z ${wavesNumberZ} \
                --phase ${phase} \
                --phase-x ${phaseX} \
                --phase-y ${phaseY} \
                --phase-z ${phaseZ} \
                --sigma ${sigma} \
                --time-dependence none
    }
    
    solve()
    {
       timeDiscretisation=$1
       discreteSolver=$2
       ${solverName} --device ${device} \
                     --mesh mesh.tnl \
                     --initial-condition initial.tnl \
    		--snapshot-period ${snapshotPeriod} \
                     --time-discretisation ${timeDiscretisation} \
                     --time-step 1 \
                     --time-step-order 2 \
                     --discrete-solver ${discreteSolver} \
                     --merson-adaptivity 1.0e-7 \
                     --sor-omega 1.95 \
                     --gmres-restarting 20 \
                     --min-iterations 20 \
                     --convergence-residue 1.0e-12 \
    		 --boundary-conditions-type ${boundaryCondition} \
    		 --boundary-conditions-constant ${boundaryValue} \
    		 --final-time ${finalTime}
    }
    
    view()
    {
       tnl-view --input-files u-*.tnl
       tnl-view --input-files initial.tnl
    }
    
    generate3DVid()
    {
    seznam=`ls u-*.gplt`
    step=0
    for fname in $seznam ; do
    step=$((${step}+1))
    time=$(expr $step*$snapshotPeriod | bc | sed 's/^\./0./')
    echo "Drawing contour $fname"
    gnuplot << EOF
    set output '${fname}.png'
    set xrange [${1}:${proportions}]
    set yrange [${1}:${proportions}]
    set zrange [${minZ}:${maxZ}]    
    unset surface
    set terminal png size 1200,600
    set view map
    set title 'Numerical solution - contour in height ${contourHeight} - T: ${time}'
    set pm3d interpolate 100,100
    set size square
    set contour base
    unset colorbox
    set cntrparam levels discrete ${contourHeight}
    splot '$fname' with pm3d notitle
    EOF
    done
    
    mencoder "mf://u-*.png" -mf fps=4 -o mean_curvature_contour_${contourHeight}_$size.avi -ovc lavc -lavcopts vcodec=mpeg4
    
    rm *.png
    rm *.tnl         
    rm *.gplt 
    rm mesh.asy
    rm computation-done
         
    }
    
    runTest()
    {
       for initFunction in ${initFunctions};
       do
          cd ${initFunction}-videos
          setupInitFunction ${initFunction}
             
          for size in $sizes;
          do
              cd $size
              echo ""
              echo ""
              echo ""
              if test ! -f computation-done;
              then
                 touch computation-in-progress
                 echo "========================================================================="
                 echo "===                   SETTING UP THE GRID                             ==="
                 echo "========================================================================="
                 setupGrid $size 
                 echo "========================================================================="
                 echo "===                WRITING THE EXACT SOLUTION                         ==="
                 echo "========================================================================="
                 setInitialCondition $initFunction
                 echo "========================================================================="
                 echo "===                   STARTING THE SOLVER                             ==="
                 echo "========================================================================="
                 solve explicit merson
                 #solve semi-implicit gmres
                 mv computation-in-progress computation-done
                 echo "========================================================================="
                 echo "===                     COMPUTATION DONE                              ==="            
                 echo "========================================================================="
    	     view
    	     generate3DVid $origin $proportions
                 cd ..
                 lastSize=$size
              fi
             cd ..
          done
          cd ..
       done
    }
    
    runTest