https://subversion.renater.fr/anonscm/svn/fullswof-2d
Tip revision: f0d2c4ea29c8923198d21ac3f64a48eeae9bfb55 authored by fdarboux on 09 July 2020, 15:20:26 UTC
Update of HowtoRelease document
Update of HowtoRelease document
Tip revision: f0d2c4e
choice_output.cpp
/**
* @file choice_output.cpp
* @author Christian Laguerre <christian.laguerre@math.cnrs.fr> (2012-2015)
* @version 1.07.01
* @date 2017-02-28
*
* @brief Choice of output format
* @details
* From the value of the corresponding parameter,
* calls the savings in the chosen format.
*
* @copyright License Cecill-V2 \n
* <http://www.cecill.info/licences/Licence_CeCILL_V2-en.html>
*
* (c) CNRS - Universite d'Orleans - BRGM (France)
*/
/*
*
* This file is part of FullSWOF_2D software.
* <https://sourcesup.renater.fr/projects/fullswof-2d/>
*
* FullSWOF_2D = Full Shallow-Water equations for Overland Flow,
* in two dimensions of space.
* This software is a computer program whose purpose is to compute
* solutions for 2D Shallow-Water equations.
*
* LICENSE
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/ or redistribute the software under the terms of the CeCILL
* license as circulated by CEA, CNRS and INRIA at the following URL
* <http://www.cecill.info>.
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL license and that you accept its terms.
*
******************************************************************************/
#include "choice_output.hpp"
Choice_output::Choice_output(Parameters & par){
/**
* @details
* Defines the output format from the value given in the parameters file.
* @param[in] par parameter, contains all the values from the parameters file.
*/
switch (par.get_output()){
case 0:
out = new No_Evolution_File(par);
break;
case 1:
out = new Gnuplot(par);
break;
case 2:
out = new Vtk_Out(par);
break;
}
}
void Choice_output::write(const TAB & h, const TAB & u, const TAB & v, const TAB & z, const SCALAR & time){
/**
* @details
* Calls the saving of the current time.
* @param[in] h water height.
* @param[in] u first component of the velocity.
* @param[in] v second component of the velocity.
* @param[in] z topography.
* @param[in] time value of the current time.
*/
out->write(h,u,v,z,time);
}
void Choice_output:: check_vol(const SCALAR & time, const SCALAR & dt, const SCALAR & Vol_rain_tot, const SCALAR & Vol_inf, const SCALAR & Vol_of, const SCALAR & Vol_bound_tot ) const{
/**
* @details Calls the saving of the infiltrated and rain volumes.
* @param[in] time current time.
* @param[in] dt time step.
* @param[in] Vol_rain_tot total rain volume.
* @param[in] Vol_inf volume of infiltrated water.
* @param[in] Vol_of volume of overland flow.
* @param[in] Vol_bound_tot total volume of water at the boundary.
*/
out->check_vol(time,dt,Vol_rain_tot, Vol_inf,Vol_of, Vol_bound_tot);
}
void Choice_output:: result(const SCALAR & time, const clock_t & cpu, const SCALAR & Vol_rain, const SCALAR & Vol_inf, const SCALAR & Vol_of, const SCALAR & FROUDE, const int & NBITER, const SCALAR & vol_output) const{
/**
* @details Calls the saving of the global values.
* @param[in] time elapsed time.
* @param[in] cpu CPU time.
* @param[in] Vol_rain total rain volume.
* @param[in] Vol_inf total volume of infiltrated water.
* @param[in] Vol_of total volume of overland flow.
* @param[in] FROUDE mean Froude number (in space) at the final time.
* @param[in] NBITER number of time steps.
* @param[in] vol_output total outflow volume at the boundary.
*/
out->result(time, cpu, Vol_rain, Vol_inf, Vol_of, FROUDE, NBITER, vol_output);
}
void Choice_output::initial(const TAB & z, const TAB & h, const TAB & u, const TAB & v) const{
/**
* @details
* Calls the saving of the inital time.
* @param[in] z topography.
* @param[in] h water height.
* @param[in] u first component of the velocity.
* @param[in] v second component of the velocity.
*/
out->initial(z, h, u,v);
}
void Choice_output::final(const TAB & z, const TAB & h, const TAB & u, const TAB & v) const{
/**
* @details
* Calls the saving of the final time.
* @param[in] z topography.
* @param[in] h water height.
* @param[in] u first component of the velocity.
* @param[in] v second component of the velocity.
*/
out->final(z, h, u,v);
}
SCALAR Choice_output::boundaries_flux(const SCALAR & time, const TAB & flux_u, const TAB & flux_v, const SCALAR & dt, const SCALAR & dt_first, const int & ORDER, const int & verif) const{
/**
* @details
* Calls the saving of the cumulative flux on the boundaries.
* @param[in] time current time.
* @param[in] flux_u flux on the left and right boundaries (m^2/s).
* @param[in] flux_v flux on the bottom and top boundaries (m^2/s).
* @param[in] dt current time step.
* @param[in] dt_first previous time step.
* @param[in] ORDER order of scheme.
* @param[in] verif parameter to know if we removed the computation with the previous time step (dt_first).
*/
return (out->boundaries_flux( time, flux_u, flux_v, dt, dt_first, ORDER, verif));
}
void Choice_output::boundaries_flux_LR(const SCALAR & time, const TAB & LR_flux) const{
/**
* @details
* Calls the saving of the fluxes on the left and right boundaries.
* @param[in] time current time.
* @param[in] LR_flux flux on the left and right boundaries (m^2/s).
*/
out->boundaries_flux_LR(time, LR_flux);
}
void Choice_output::boundaries_flux_BT(const SCALAR & time, const TAB & BT_flux) const{
/**
* @details
* Calls the saving of the fluxes on the top and bottom boundaries.
* @param[in] time current time.
* @param[in] BT_flux flux on the bottom and tom boundaries (m^2/s).
*/
out->boundaries_flux_BT(time, BT_flux);
}
Choice_output::~Choice_output(){
if (out != NULL){
delete out;
out = NULL;
}
}
