Johan Hake wrote:
> On Thursday 07 May 2009 18:54:04 Anders Logg wrote:
>> I've added some of the requested features to the parameter system,
>> some pushed and some sitting here in a local repository. But the
>> current design makes it a pain to add new features. A single change
>> will make it necessary to add a function in at least 5 different
>> classes.
>>
>> So I'm thinking of reimplementing and simplifying the parameter
>> system. I think I know how to make it simpler.
>>
>> But before I do that, does anyone have opinions on the
>> design/implementation? Is there any third-party library that we
>> could/should use (maybe something in boost)?
>
> It would be nice to have something that easely could be transferable to
> Python.
>
> Having a base class let say Parameterized and then let all inherit this to be
> able to define parameters will not work well for the shared_ptr interface we
> have. We have problems with the Variable class, which does not work for the
> derived shared_ptr classes e.g. Function. I would rather have classes that
> have a parameter rather than beeing.
>
> Also by defining a parameter(list/dict) class which can be accessed as a dict
> let us make the transition to python smoother.
>
> ParameterDict p = solver.default_params();
> p["abs_tol"] = 1e-9;
>
> By defining some templated check classes we could controll the assignment. In
> the Solver:
> ...
> ParameterDict& default_params(){
> if (!_par)
> {
> _par = new ParameterDict();
> _par->add_param("abs_tol",new RangeCheck<double>(1e-15,0,1));
> vector<string> * allowed_prec = new Vector<string>();
> allowed_prec->push_back("ilu");
> allowed_prec->push_back("amg");
> allowed_prec->push_back("jacobi");
> _par->add_param("prec",new OptionCheck<string>("ilu"),allowed_prec));
> _par->add_param("nonsense","jada"); // No checks
> }
> }
>
> Well, I admit that the above code is not beautiful, and others can probably
> make it cleaner and spot errors. The point is that RangeCheck and OptionCheck
> can be derived from a ParCheck class that overloads the operator=(). This
> will just call a private set function which is defined in the derived
> classes, and which do the check.
>
> The to and from file can be implemented in the ParameterDict body. The checks
> do not have to be written or read, as a ParameterDict can only read in
> allready predefined parameters, and the check will be done when the file is
> read.
>
> The option parser ability can also be implemented in ParameterDict using
> boost
> or other libraries, based on the registered parameters.
>
> I have implemented something like this in Python, and the above is a try to
> scetch something similare in c++.
>
At a glance, the above looks like Boost Pogram_options,
http://www.boost.org/doc/libs/1_39_0/doc/html/program_options/tutorial.html
A nice feature of Boost Program_options is that it supports options from
a file and from the command line.
Garth
>
> Johan
> _______________________________________________
> DOLFIN-dev mailing list
> [email protected]
> http://www.fenics.org/mailman/listinfo/dolfin-dev
_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev