Skip to content
Snippets Groups Projects
Commit 4c54e3ea authored by Stefan Girke's avatar Stefan Girke
Browse files

new test case structure

parent 036a3d12
No related branches found
No related tags found
No related merge requests found
......@@ -64,10 +64,12 @@
function(dune_add_test_case target paramfile )
set( abbr "${CMAKE_CURRENT_SOURCE_DIR}/" )
set( default_params "fem.verboserank:0" "fem.prefix:${abbr}data/${paramfile}" "fem.prefix.input:${abbr}" "fem.eoc.outputpath:${abbr}data/${paramfile}" )
if( "${target}" STREQUAL NAME )
#First version of this function: we are creating a real new target
set( newTarget "${paramfile}" )
#set( default_params "fem.verboserank:1" "fem.prefix:${abbr}data/${newTarget}" "fem.prefix.input:${abbr}" "fem.eoc.outputpath:${abbr}data/${newTarget}" )
set( default_params "testcase.path:${abbr}" )
# default directory name for direct call (i.e. withouch testing tools)
set( TESTCASE_OUTPUT "data" )
......@@ -75,14 +77,19 @@ function(dune_add_test_case target paramfile )
set( TESTCASE_INPUT "parameter" )
# copy default parameter file to location of executable
configure_file(${CMAKE_SOURCE_DIR}/cmake/scripts/parameter.in ${CMAKE_CURRENT_BINARY_DIR}/parameter )
dune_add_test( ${target} ${paramfile} ${ARGN} CMD_ARGS ${CMAKE_CURRENT_SOURCE_DIR}/parameters/${paramfile} ${default_params} )
#dune_add_test( NAME ${newTarget} ${ARGN} CMD_ARGS ${default_params} paramfile:parameters/${newTarget} )
dune_add_test( NAME ${newTarget} ${ARGN} CMD_ARGS ${default_params} )
else()
set( newTarget "${target}_${paramfile}" )
#set( default_params "fem.verboserank:1" "fem.prefix:${abbr}data/${newTarget}" "fem.prefix.input:${abbr}" "fem.eoc.outputpath:${abbr}data/${newTarget}" )
set( default_params "testcase.path:${abbr}" "testcase:${paramfile}" )
#Section version of this function: We just append another parameter file to an existing target
if(NOT TARGET ${target})
message( ERROR "You have tried to create a test case depending on a non existing target '${target}'." )
endif()
add_test( NAME ${base_name}_${paramfile}
COMMAND ./${target} ${CMAKE_CURRENT_SOURCE_DIR}/parameters/${target}_${paramfile} ${default_params} )
#add_test( NAME ${newTarget} COMMAND ./${target} ${default_params} paramfile:parameters/${newTarget} )
add_test( NAME ${newTarget} COMMAND ./${target} ${default_params} )
endif()
endfunction()
......@@ -104,12 +111,13 @@ macro(add_header_listing)
file(GLOB_RECURSE HEADER_LIST "${CMAKE_CURRENT_SOURCE_DIR}/../${_mod}/*.hh" "${CMAKE_CURRENT_SOURCE_DIR}/../${_mod}/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/../${_mod}/*.ui")
list(APPEND COMMON_HEADER ${HEADER_LIST})
endforeach(_mod DEPENDENCIES)
set_source_files_properties(${COMMON_HEADER} PROPERTIES HEADER_FILE_ONLY 1)
add_custom_target(common_header SOURCES ${COMMON_HEADER})
#set_source_files_properties(${COMMON_HEADER} PROPERTIES HEADER_FILE_ONLY 1)
#add_custom_target(common_header SOURCES ${COMMON_HEADER})
#needed at least one official target for finding header files in source code
dune_add_test( NAME _h SOURCES ${COMMON_HEADER} )
set_target_properties(_h PROPERTIES LINKER_LANGUAGE CXX)
file(WRITE ${CMAKE_BINARY_DIR}/.qtcreator/main.cc "//this is a dummy file for including files into the project file structure of qtcreator\nint main(){}" )
add_executable( qtcreator ${CMAKE_BINARY_DIR}/.qtcreator/main.cc ${COMMON_HEADER} )
set_target_properties( qtcreator PROPERTIES LINKER_LANGUAGE CXX)
endmacro(add_header_listing)
macro(make_dependent_modules_sys_included)
......
# toggle verbosity of on process
# (-1: off, p: process p is verbose, in general 0 is a good choice)
fem.verboserank: 0
fem.prefix: ${CMAKE_CURRENT_SOURCE_DIR}/data/${TESTCASE_OUTPUT} # specify directory for data output (is created if not exists)
fem.prefix.input: ${CMAKE_CURRENT_SOURCE_DIR}/
fem.eoc.outputpath: ${CMAKE_CURRENT_SOURCE_DIR}/data/${TESTCASE_OUTPUT}
paramfile: parameters/${TESTCASE_INPUT} #real parameter file
testcase.path: ${CMAKE_CURRENT_SOURCE_DIR}/
......@@ -98,7 +98,7 @@ namespace Fem
: sol_( sol ),
adaptationHandler_( nullptr ),
keyPrefix_( keyPrefix ),
adaptParam_( AdaptationParametersType( ParameterKey::generate( keyPrefix, "fem.adaptation." ) ) ),
adaptParam_( AdaptationParametersType( ParameterKey::generate( "", "fem.adaptation." ) ) ),
indicator_( const_cast<GridPartType&>(sol_.gridPart()), model, tuple, keyPrefix_ ),
estimator_( sol_.space(), model.problem(), adaptParam_ )
{}
......
......@@ -10,15 +10,9 @@ int main(int argc, char ** argv)
/* Initialize MPI (always do this even if you are not using MPI) */
Dune::Fem::MPIManager :: initialize( argc, argv );
try {
// *** Initialization
Dune::Fem::Parameter::append(argc,argv);
if (argc >= 2)
Dune::Fem::Parameter::append(argv[1]);
else
Dune::Fem::Parameter::append("parameter");
// write parameters used (before simulation starts)
Dune::Fem::Parameter::write("parameter.log");
// read Parameters
if( !readParameters( argc, argv ) )
return 1;
Dune::Fem::AdvectionDiffusionAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
......
......@@ -59,9 +59,4 @@ if( NOT FEMDG_FAST_TESTBUILD )
COMPILE_DEFINITIONS "${GRIDTYPE};POLORDER=${POLORDER};DISCRETEFUNCTIONSPACESENUM=4"
TIMEOUT 3000 )
dune_add_test_case( NAME advdiff_orthonormal
SOURCES ../main.cc
COMPILE_DEFINITIONS "${GRIDTYPE};POLORDER=${POLORDER};DISCRETEFUNCTIONSPACESENUM=4"
TIMEOUT 3000 )
endif()
......@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
/* Initialize MPI (always do this even if you are not using MPI) */
Dune::Fem::MPIManager :: initialize( argc, argv );
try {
// *** Initialization
Dune::Fem::Parameter::append(argc,argv);
if (argc >= 2)
Dune::Fem::Parameter::append(argv[1]);
else
Dune::Fem::Parameter::append("parameter");
// write parameters used (before simulation starts)
Dune::Fem::Parameter::write("parameter.log");
// read Parameters
if( !readParameters( argc, argv ) )
return 1;
Dune::Fem::CheckPointingAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
......
......@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
/* Initialize MPI (always do this even if you are not using MPI) */
Dune::Fem::MPIManager :: initialize( argc, argv );
try {
// *** Initialization
Dune::Fem::Parameter::append(argc,argv);
if (argc >= 2)
Dune::Fem::Parameter::append(argv[1]);
else
Dune::Fem::Parameter::append("parameter");
// write parameters used (before simulation starts)
Dune::Fem::Parameter::write("parameter.log");
// read Parameters
if( !readParameters( argc, argv ) )
return 1;
Dune::Fem::EulerAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
......
......@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
/* Initialize MPI (always do this even if you are not using MPI) */
Dune::Fem::MPIManager :: initialize( argc, argv );
try {
// *** Initialization
Dune::Fem::Parameter::append(argc,argv);
if (argc >= 2)
Dune::Fem::Parameter::append(argv[1]);
else
Dune::Fem::Parameter::append("parameter");
// write parameters used (before simulation starts)
Dune::Fem::Parameter::write("parameter.log");
// read Parameters
if( !readParameters( argc, argv ) )
return 1;
Dune::Fem::IncompressibleNavierStokesAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
......
......@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
/* Initialize MPI (always do this even if you are not using MPI) */
Dune::Fem::MPIManager :: initialize( argc, argv );
try {
// *** Initialization
Dune::Fem::Parameter::append(argc,argv);
if (argc >= 2)
Dune::Fem::Parameter::append(argv[1]);
else
Dune::Fem::Parameter::append("parameter");
// write parameters used (before simulation starts)
Dune::Fem::Parameter::write("parameter.log");
// read Parameters
if( !readParameters( argc, argv ) )
return 1;
Dune::Fem::NavierStokesAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
......
......@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
/* Initialize MPI (always do this even if you are not using MPI) */
Dune::Fem::MPIManager :: initialize( argc, argv );
try {
// *** Initialization
Dune::Fem::Parameter::append(argc,argv);
if (argc >= 2)
Dune::Fem::Parameter::append(argv[1]);
else
Dune::Fem::Parameter::append("parameter");
// write parameters used (before simulation starts)
Dune::Fem::Parameter::write("parameter.log");
// read Parameters
if( !readParameters( argc, argv ) )
return 1;
Dune::Fem::PoissonAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
......
......@@ -9,15 +9,9 @@ int main(int argc, char ** argv)
/* Initialize MPI (always do this even if you are not using MPI) */
Dune::Fem::MPIManager :: initialize( argc, argv );
try {
// *** Initialization
Dune::Fem::Parameter::append(argc,argv);
if (argc >= 2)
Dune::Fem::Parameter::append(argv[1]);
else
Dune::Fem::Parameter::append("parameter");
// write parameters used (before simulation starts)
Dune::Fem::Parameter::write("parameter.log");
// read Parameters
if( !readParameters( argc, argv ) )
return 1;
Dune::Fem::StokesAlgorithmCreator<Dune::GridSelector::GridType> algorithmCreator;
......
......@@ -127,6 +127,70 @@ void finalizeCodegen()
}
#endif
bool readParameters( int argc, char ** argv )
{
// append all parameters from command line
Dune::Fem::Parameter::append(argc,argv);
// no parameters defined: search for parameter file
if( argc <= 1 )
Dune::Fem::Parameter::append("parameter");
//get full test case path
const std::string testCasePath = Dune::Fem::Parameter::getValue< std::string >( "testcase.path", "" );
//get name for a test case
const std::string testCaseName = Dune::Fem::Parameter::getValue< std::string >( "testcase", "" );
std::string path( argv[0] );
std::string targetName = path.substr(path.find_last_of("/") + 1);
//append test case name, if given
if( testCaseName != "" )
targetName = targetName + "_" + testCaseName;
//set important paths which are related to the test case path
if( testCasePath != "" )
{
Dune::Fem::Parameter::append("fem.prefix.input",testCasePath);
Dune::Fem::Parameter::append("fem.prefix",testCasePath + "data/" + targetName );
Dune::Fem::Parameter::append("fem.eoc.outputpath",testCasePath + "data/" + targetName );
}
else
{
//fail: We need data to provide further information via parameter file
if( !Dune::Fem::Parameter::exists( "fem.prefix" ) )
{
std::cout << "Please specify parameter 'fem.prefix'" << std::endl;
return false;
}
if( !Dune::Fem::Parameter::exists( "fem.prefix.input" ) )
{
std::cout << "Please specify parameter 'fem.prefix.input'" << std::endl;
return false;
}
if( !Dune::Fem::Parameter::exists( "fem.eoc.outputpath" ) )
{
std::cout << "Please specify parameter 'fem.eoc.outputpath'" << std::endl;
return false;
}
}
//read problem dependend file, if existent
std::string fullpath = Dune::Fem::Parameter::commonInputPath() + "/parameters/" + targetName;
if( std::ifstream( fullpath ) )
Dune::Fem::Parameter::append( fullpath );
else
{
std::cout << "Parameter file not found in " << fullpath << ". Aborting." << std::endl;
return false;
}
// write parameters used (before simulation starts)
Dune::Fem::Parameter::write("parameter.log");
return true;
}
namespace Dune
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment