From 258b1d62e047f963bff53762ed29b0ca649c2527 Mon Sep 17 00:00:00 2001 From: Alexander Jaust <alexander.jaust@ipvs.uni-stuttgart.de> Date: Tue, 21 Apr 2020 14:31:40 +0200 Subject: [PATCH] update repository --- appl/coupling-ff-pm/CMakeLists.txt | 1 + .../monolithicdata.hh | 55 +++++++++ .../iterative-reversed/main_ff-reversed.cc | 40 +++++++ ...g-serial-implicit-reversed-darcy-first.xml | 79 +++++++++++++ ...recice-config-serial-implicit-reversed.xml | 13 +- .../run-iterative-simulations.sh | 111 ++++++++++++++++++ 6 files changed, 293 insertions(+), 6 deletions(-) create mode 100644 appl/coupling-ff-pm/iterative-reversed-mono-flux/monolithicdata.hh create mode 100644 appl/coupling-ff-pm/iterative-reversed/precice-config-serial-implicit-reversed-darcy-first.xml create mode 100755 appl/coupling-ff-pm/iterative-reversed/run-iterative-simulations.sh diff --git a/appl/coupling-ff-pm/CMakeLists.txt b/appl/coupling-ff-pm/CMakeLists.txt index 943da4e..c36488a 100644 --- a/appl/coupling-ff-pm/CMakeLists.txt +++ b/appl/coupling-ff-pm/CMakeLists.txt @@ -6,3 +6,4 @@ add_subdirectory(monolithic) add_subdirectory(fvca-monolithic-reversed) add_subdirectory(iterative) add_subdirectory(iterative-reversed) +add_subdirectory(iterative-reversed-mono-flux) diff --git a/appl/coupling-ff-pm/iterative-reversed-mono-flux/monolithicdata.hh b/appl/coupling-ff-pm/iterative-reversed-mono-flux/monolithicdata.hh new file mode 100644 index 0000000..5653a59 --- /dev/null +++ b/appl/coupling-ff-pm/iterative-reversed-mono-flux/monolithicdata.hh @@ -0,0 +1,55 @@ +#ifndef MONOLITHICDATA_HH +#define MONOLITHICDATA_HH + +#include <array> + +namespace MonolithicSolution +{ +static const std::array<double, 20> velocity = + { + -2.14294737477106e-12, + -1.414265166923949e-12, + -1.04852776201853e-12, + -8.135033312884269e-13, + -6.37657086620555e-13, + -4.93766950668703e-13, + -3.690552916814545e-13, + -2.563759402825702e-13, + -1.511247369413653e-13, + -4.994226002810334e-14, + 4.994226002813352e-14, + 1.511247369413988e-13, + 2.563759402826087e-13, + 3.690552916815079e-13, + 4.937669506687764e-13, + 6.376570866206665e-13, + 8.13503331288573e-13, + 1.048527762018745e-12, + 1.414265166924232e-12, + 2.142947374771422e-12 +}; + +static const std::array<double, 20> pressure = { + 9.749674884723169e-10, + 9.249954142532818e-10, + 8.749977731157065e-10, + 8.24998517020602e-10, + 7.749988528034125e-10, + 7.249990852158898e-10, + 6.749992924234883e-10, + 6.249994944809285e-10, + 5.749996962877403e-10, + 5.249998986713713e-10, + 4.750001013286287e-10, + 4.250003037122596e-10, + 3.750005055190715e-10, + 3.250007075765118e-10, + 2.750009147841103e-10, + 2.250011471965874e-10, + 1.750014829793979e-10, + 1.250022268842933e-10, + 7.500458574671815e-11, + 2.503251152768306e-11 }; +} + +#endif // MONOLITHICDATA_HH diff --git a/appl/coupling-ff-pm/iterative-reversed/main_ff-reversed.cc b/appl/coupling-ff-pm/iterative-reversed/main_ff-reversed.cc index b779441..2346f01 100644 --- a/appl/coupling-ff-pm/iterative-reversed/main_ff-reversed.cc +++ b/appl/coupling-ff-pm/iterative-reversed/main_ff-reversed.cc @@ -405,6 +405,7 @@ int main(int argc, char** argv) try auto sol_checkpoint = sol; double vtkTime = 1.0; + size_t iter = 0; while ( couplingInterface.isCouplingOngoing() ) { @@ -448,6 +449,45 @@ int main(int argc, char** argv) try const double preciceDt = couplingInterface.advance( dt ); dt = std::min( preciceDt, dt ); + // + { + double min = std::numeric_limits<double>::max(); + double max = std::numeric_limits<double>::min(); + double sum = 0.; + const std::string filename = getParam<std::string>("Problem.Name") + "-" + freeFlowProblem->name() + "-interface-velocity-" + std::to_string(iter); + std::tie(min, max, sum) = writeVelocitiesOnInterfaceToFile( filename, + *freeFlowProblem, + *freeFlowGridVariables, + sol ); + const int prec = std::cout.precision(); + std::cout << "Velocity statistics:" << std::endl + << std::setprecision(std::numeric_limits<double>::digits10 + 1) + << " min: " << min << std::endl + << " max: " << max << std::endl + << " sum: " << sum << std::endl; + std::cout.precision( prec ); + { + const std::string filenameFlow="free-flow-statistics-" + std::to_string(iter); + std::ofstream ofs( filenameFlow+".txt", std::ofstream::out | std::ofstream::trunc); + const auto prec = ofs.precision(); + ofs << "Velocity statistics (free flow):" << std::endl + << std::setprecision(std::numeric_limits<double>::digits10 + 1) + << " min: " << min << std::endl + << " max: " << max << std::endl + << " sum: " << sum << std::endl; + ofs.precision( prec ); + ofs.close(); + } + } + { + const std::string filename = getParam<std::string>("Problem.Name") + "-" + freeFlowProblem->name() + "-interface-pressure-" + std::to_string(iter); + writePressuresOnInterfaceToFile<FluxVariables>( filename, + *freeFlowProblem, + *freeFlowGridVariables, + sol ); + } + ++iter; + if ( couplingInterface.hasToReadIterationCheckpoint() ) { // //Read checkpoint diff --git a/appl/coupling-ff-pm/iterative-reversed/precice-config-serial-implicit-reversed-darcy-first.xml b/appl/coupling-ff-pm/iterative-reversed/precice-config-serial-implicit-reversed-darcy-first.xml new file mode 100644 index 0000000..55a904e --- /dev/null +++ b/appl/coupling-ff-pm/iterative-reversed/precice-config-serial-implicit-reversed-darcy-first.xml @@ -0,0 +1,79 @@ +<?xml version="1.0"?> + +<precice-configuration> + <log> + <sink type="stream" output="stdout" filter= "(%Severity% > debug) or (%Severity% >= trace and %Module% contains SolverInterfaceImpl)" enabled="false" /> + <sink type="stream" output="stdout" enabled="false" /> + </log> + + <solver-interface dimensions="2"> + + <data:scalar name="Velocity"/> + <data:scalar name="Pressure"/> + + <mesh name="FreeFlowMesh"> + <use-data name="Velocity" /> + <use-data name="Pressure" /> + </mesh> + + <mesh name="DarcyMesh"> + <use-data name="Velocity" /> + <use-data name="Pressure" /> + </mesh> + + <participant name="FreeFlow"> + <use-mesh name="FreeFlowMesh" provide="yes"/> + <use-mesh name="DarcyMesh" from="Darcy"/> + + <read-data name="Velocity" mesh="FreeFlowMesh"/> + <write-data name="Pressure" mesh="FreeFlowMesh"/> + + <mapping:nearest-neighbor direction="write" from="FreeFlowMesh" to="DarcyMesh" constraint="consistent"/> + <mapping:nearest-neighbor direction="read" from="DarcyMesh" to="FreeFlowMesh" constraint="consistent"/> + + </participant> + + <participant name="Darcy"> + <use-mesh name="DarcyMesh" provide="yes"/> + + <read-data name="Pressure" mesh="DarcyMesh"/> + <write-data name="Velocity" mesh="DarcyMesh"/> + </participant> + + <m2n:sockets from="FreeFlow" to="Darcy" distribution-type="gather-scatter" network="lo" /> + + + <coupling-scheme:serial-implicit> + <max-time value="1"/> + <timestep-length value="1" /> + <max-iterations value="10"/> + + + <participants first="Darcy" second="FreeFlow"/> + <exchange data="Pressure" mesh="DarcyMesh" from="FreeFlow" to="Darcy" initialize="true" /> + <exchange data="Velocity" mesh="DarcyMesh" from="Darcy" to="FreeFlow" initialize="false" /> + + <relative-convergence-measure limit="1.0e-4" data="Pressure" mesh="DarcyMesh"/> + <relative-convergence-measure limit="1.0e-4" data="Velocity" mesh="DarcyMesh"/> + + + <!-- + <relative-convergence-measure limit="1.0e-2" data="Velocity" mesh="FreeFlowMesh"/> + --> + + + <extrapolation-order value="0"/> +<!-- + <post-processing:IQN-ILS> + <data mesh="DarcyMesh" name="Velocity" /> + <initial-relaxation value="0.1" /> + <max-used-iterations value="9" /> + <timesteps-reused value="10" /> + <filter type="QR2" limit="1e-3" /> + </post-processing:IQN-ILS> +--> + + </coupling-scheme:serial-implicit> + </solver-interface> +</precice-configuration> + diff --git a/appl/coupling-ff-pm/iterative-reversed/precice-config-serial-implicit-reversed.xml b/appl/coupling-ff-pm/iterative-reversed/precice-config-serial-implicit-reversed.xml index 973fe15..756b2b0 100644 --- a/appl/coupling-ff-pm/iterative-reversed/precice-config-serial-implicit-reversed.xml +++ b/appl/coupling-ff-pm/iterative-reversed/precice-config-serial-implicit-reversed.xml @@ -46,23 +46,24 @@ <coupling-scheme:serial-implicit> <max-time value="1"/> <timestep-length value="1" /> - <max-iterations value="100"/> + <max-iterations value="10"/> <participants first="FreeFlow" second="Darcy"/> <exchange data="Pressure" mesh="DarcyMesh" from="FreeFlow" to="Darcy" initialize="false" /> <exchange data="Velocity" mesh="DarcyMesh" from="Darcy" to="FreeFlow" initialize="true" /> - <relative-convergence-measure limit="1.0e-8" data="Pressure" mesh="DarcyMesh"/> - <relative-convergence-measure limit="1.0e-8" data="Velocity" mesh="DarcyMesh"/> + <relative-convergence-measure limit="1.0e-4" data="Pressure" mesh="DarcyMesh"/> + <relative-convergence-measure limit="1.0e-4" data="Velocity" mesh="DarcyMesh"/> <!-- <relative-convergence-measure limit="1.0e-2" data="Velocity" mesh="FreeFlowMesh"/> --> - <!-- - <extrapolation-order value="0"/> + + <extrapolation-order value="0"/> +<!-- <post-processing:IQN-ILS> <data mesh="DarcyMesh" name="Velocity" /> <initial-relaxation value="0.1" /> @@ -70,7 +71,7 @@ <timesteps-reused value="10" /> <filter type="QR2" limit="1e-3" /> </post-processing:IQN-ILS> - --> +--> </coupling-scheme:serial-implicit> </solver-interface> diff --git a/appl/coupling-ff-pm/iterative-reversed/run-iterative-simulations.sh b/appl/coupling-ff-pm/iterative-reversed/run-iterative-simulations.sh new file mode 100755 index 0000000..ae4f6a9 --- /dev/null +++ b/appl/coupling-ff-pm/iterative-reversed/run-iterative-simulations.sh @@ -0,0 +1,111 @@ +#! /usr/bin/env bash + + +pressureDifferences=("1e-9") +permeabilities=("1e-6") +alphaBeaversJoseph=("1.0") +meshSizes=("20" "40" "80") +hasInertiaTerms=("true" "false") +precice_config=("precice-config-serial-implicit-reversed.xml" "precice-config-serial-implicit-reversed-darcy-first.xml") + +#solver_input="params.input" +inputTemplate="fvca-iterative-base.input" + +ff_solver="test_ff_reversed" +pm_solver="test_pm_reversed" + + +rm -f *.csv *.pvd *.vtu *.log *.txt *.json + +#echo "" > ${configurations} +basedir="${PWD}" +for preciceFile in "${precice_config[@]}"; do + for hasInertiaTerms in "${hasInertiaTerms[@]}"; do + for dp in "${pressureDifferences[@]}"; do + for permeability in "${permeabilities[@]}"; do + for alpha in "${alphaBeaversJoseph[@]}"; do + for mesh in "${meshSizes[@]}"; do + i=$((i+1)) + + # Check if Stokes or Navier-Stokes + flowProblemName="stokes" + # echo ${hasInertiaTerms} + if [[ "${hasInertiaTerms}" == "true" ]]; then + flowProblemName="navier-stokes" + fi + + # Generate name of test case and create directories + casename="${flowProblemName}-${mesh}-${alpha}-${permeability}-${dp}" + echo "${casename}" + + # Setting up input file + inputFile="${casename}.input" + sed -e s/MESHSIZE/"${mesh}"/g \ + -e "s/FLOWPROBLEMNAME/${flowProblemName}/g" \ + -e "s/PRESSUREDIFF/${dp}/g" \ + -e "s/PERM/${permeability}/g" \ + -e "s/ALPHA/${alpha}/g" \ + -e "s/HASINERTIATERMS/${hasInertiaTerms}/g" \ + -e "s/CASENAME/${casename}/g" \ + "${inputTemplate}" > ${inputFile} + + # Running simulation + #solverCmd="./${solver} ${inputFile}" + #echo "$solverCmd" + + # $(${solverCmd} > solver.log) +# $(time ./${solver} "${inputFile}" > solver.log) + # $(./${solverCmd} ${inputFile} > solver.log) + + + rm -rf "precice-run/" + ff_cmd="./${ff_solver} - ${precice_config}" + echo "${ff_cmd}" + ./${ff_solver} - ${preciceFile} > ${ff_solver}.log 2>&1 & + PIDFluid=$! + ./${pm_solver} - ${preciceFile} > ${pm_solver}.log 2>&1 & + PIDSolid=$! + + echo "Waiting for the participants to exit..." + echo "(you may run 'tail -f ${ff_solver}.log' or 'tail -f ${pm_solver}.log' in another terminal to check the progress)" + + wait ${PIDFluid} + wait ${PIDSolid} + + if [ $? -ne 0 ] || [ "$(grep -c -E "error:" ${ff_solver}.log)" -ne 0 ] || [ "$(grep -c -E "error:" ${pm_solver}.log)" -ne 0 ]; then + echo "" + echo "Something went wrong... See the log files for more." + else + echo "" + echo "The simulation completed!" + fi + + + mkdir -p "${casename}" + mv *.csv ${casename} + mv *.vtu ${casename} + mv *.pvd ${casename} + mv *.log ${casename} + mv *.txt ${casename} + mv *.json ${casename} + cp ${preciceFile} ${casename} + mv "${inputFile}" ${casename} + #cd ${casename} + # ln -s "../${solver}" "${solver}" + #cp "../${solver}" . + + # Go back to root dir + cd "${basedir}" + done + done + done + done + done +done + +echo "In total ${i} cases were run" + + + + + -- GitLab