29 #ifndef __Environment_H
30 #define __Environment_H 1
34 #include <boost/noncopyable.hpp>
35 #include <boost/signals2.hpp>
36 #include <boost/format.hpp>
40 #include <feel/feelcore/feel.hpp>
41 #include <feel/feelcore/parameter.hpp>
45 #if defined ( FEELPP_HAS_PETSC_H )
54 #if defined ( FEELPP_HAS_PETSC_H )
55 PetscLogDouble memory_usage;
56 PetscLogDouble petsc_malloc_usage;
57 PetscLogDouble petsc_malloc_maximum_usage;
62 makeAbout(
char* name )
64 AboutData about( name,
68 AboutData::License_GPL,
69 "Copyright (c) 2012 Feel++ Consortium" );
71 about.addAuthor(
"Feel++ Consortium",
73 "feelpp-devel@feelpp.org",
"" );
116 typedef WorldComm worldcomm_type;
117 typedef boost::shared_ptr<WorldComm> worldcomm_ptrtype;
146 BOOST_PARAMETER_MEMBER_FUNCTION(
147 (
void),
static changeRepository, tag,
149 (directory,(boost::format)))
151 (filename,*( boost::is_convertible<mpl::_,std::string> ),
"logfile")
152 (subdir,*( boost::is_convertible<mpl::_,bool> ),
true)
155 changeRepositoryImpl( directory, filename, subdir );
158 template <
class ArgumentPack>
161 char** argv = args[_argv];
162 int argc = args[_argc];
163 S_desc = boost::shared_ptr<po::options_description>(
new po::options_description( args[_desc | Feel::feel_options()] ) );
164 AboutData about = args[_about| makeAbout(argv[0])];
165 S_desc->add( file_options( about.appName() ) );
167 init( argc, argv, *S_desc, about );
168 if ( S_vm.count(
"nochdir") == 0 )
170 std::string defaultdir = about.appName();
171 if ( S_vm.count(
"directory") )
172 defaultdir = S_vm[
"directory"].as<std::string>();
173 std::string d = args[_directory|defaultdir];
174 LOG(INFO) <<
"change directory to " << d <<
"\n";
175 boost::format f( d );
176 changeRepository( _directory=f );
180 void init(
int argc,
char** argv, po::options_description
const& desc,
AboutData const& about );
227 static std::vector<WorldComm>
const&
worldsComm(
int n );
229 static std::vector<WorldComm>
const& worldsCommGroupBySubspace(
int n );
244 static int rank() {
return S_worldcomm->globalRank(); }
249 static po::variables_map
const&
vm() {
return S_vm; }
251 static AboutData const& about() {
return S_about; }
267 static void setWorldComm( WorldComm& worldcomm ) { S_worldcomm = worldcomm.shared_from_this(); }
291 static std::string
findFile( std::string
const& filename );
319 BOOST_PARAMETER_MEMBER_FUNCTION(
320 (po::variable_value),
static vm, tag,
322 (name,(std::string)))
325 (sub,( std::string ),
"")
326 (prefix,( std::string ),
"")
329 std::ostringstream os;
330 if ( !prefix.empty() )
336 CHECK( it !=
Environment::vm().end() ) <<
"Invalid option " << os.str() <<
"\n";
353 static void setLogs( std::string
const& prefix );
355 template<
typename Observer>
357 addDeleteObserver( Observer
const& obs )
359 S_deleteObservers.connect( obs );
361 template<
typename Observer>
363 addDeleteObserver( boost::shared_ptr<Observer>
const& obs )
365 S_deleteObservers.connect(boost::bind(&Observer::operator(), obs));
368 static void clearSomeMemory();
381 static void changeRepositoryImpl( boost::format fmt, std::string
const& logfile,
bool add_subdir_np );
384 static void doOptions(
int argc,
char** argv, po::options_description
const& desc, std::string
const& appName );
385 static void processGenericOptions();
386 static void parseAndStoreOptions( po::command_line_parser parser,
bool extra_parser =
false );
391 mpi::environment M_env;
393 static std::vector<fs::path> S_paths;
395 static fs::path S_scratchdir;
398 static po::variables_map S_vm;
399 static boost::shared_ptr<po::options_description> S_desc;
400 static std::vector<std::string> S_to_pass_further;
402 static boost::signals2::signal<void()> S_deleteObservers;
404 static boost::shared_ptr<WorldComm> S_worldcomm;
410 class Environment :
public detail::Environment
413 BOOST_PARAMETER_CONSTRUCTOR(
414 Environment, (detail::Environment), tag,
421 (directory,( std::string ))
426 BOOST_PARAMETER_FUNCTION(
427 (po::variable_value), option, tag,
429 (name,(std::string)))
431 (worldcomm, ( WorldComm ), Environment::worldComm() )
432 (sub,( std::string ),
"")
433 (prefix,( std::string ),
"")
436 return Environment::vm(_name=name,_worldcomm=worldcomm,_sub=sub,_prefix=prefix);
441 template<
typename Args,
typename Tag=tag::opt>
444 typedef typename boost::remove_pointer<
445 typename boost::remove_const<
446 typename boost::remove_reference<
447 typename parameter::binding<Args, Tag>::type
455 BOOST_PARAMETER_FUNCTION(
456 (
typename Feel::detail::option<Args>::type ),
462 (worldcomm, ( WorldComm ), Environment::worldComm() )
463 (sub,( std::string ),
"")
464 (prefix,( std::string ),
"")
469 opt = Environment::vm(_name=name,_worldcomm=worldcomm,_sub=sub,_prefix=prefix).template as<typename Feel::detail::option<Args>::type>();
471 catch (boost::bad_any_cast bac)
473 CHECK(
false ) <<
"problem in conversion type of argument "<< name <<
" : check the option type"<<std::endl;
static boost::tuple< std::string, bool > systemGeoRepository()
Definition: environment.cpp:844
static std::string rootRepository()
Definition: environment.cpp:725
static const fs::path & scratchDirectory()
Definition: environment.hpp:373
Environment()
Definition: environment.cpp:452
static void setLogs(std::string const &prefix)
get variables_map from options_description desc
Definition: environment.cpp:932
static bool initialized()
Definition: environment.cpp:699
static std::string findFile(std::string const &filename)
Definition: environment.cpp:755
static std::string localConfigRepository()
Definition: environment.cpp:854
static std::vector< std::string > geoPathList()
Definition: environment.cpp:814
Holds information needed by the "About" box and other classes.
Definition: about.hpp:173
static std::string localGeoRepository()
Definition: environment.cpp:831
static int rank()
Definition: environment.hpp:244
Initialize, finalize, and query the Feel++ environment.
Definition: environment.hpp:101
static void setWorldComm(WorldComm &worldcomm)
Definition: environment.hpp:267
static po::variables_map const & vm()
Definition: environment.hpp:249
static boost::tuple< std::string, bool > systemConfigRepository()
Definition: environment.cpp:867
static WorldComm const & masterWorldComm(int n)
Definition: environment.cpp:966
~Environment()
Definition: environment.cpp:659
static bool finalized()
Definition: environment.cpp:712
static std::vector< WorldComm > const & worldsComm(int n)
Definition: environment.cpp:939
static int numberOfProcessors()
Definition: environment.hpp:239
static MemoryUsage logMemoryUsage(std::string const &message)
Definition: environment.cpp:973
static WorldComm & worldComm()
Definition: environment.hpp:222
static po::options_description const & optionsDescription()
Definition: environment.hpp:256