On Wed, Jun 27, 2012 at 2:11 PM, Andrew E Slaughter
<[email protected]> wrote:
> If I understand correctly, if my initialization is expensive then it should
> be coded directly into the component member of a class derived from
> AnalyticFunction, as follows. Then simply use the project_solution and skip
> the add_initial_function(...) and init() commands for the system. Is this
> correct?
>
> class AnalyticFunctionTest : public AnalyticFunction<Number>{
> public:
> AnalyticFunctionTest(){
> _initialized = true;
> }
>
> Number component(unsigned int i, const Point& p, Real time = 0){
> if (i == 0){
> return 1;
> } else {
> return 2;
> }
> }
> };
>
> I tried using this, but I get an error b/c I believe that AnalyticFunction
> needs a default constructor
> (http://www.cplusplus.com/doc/tutorial/inheritance/), but it doesn't have
> one.
>
> example3b.cpp:41:25: error: no matching function for call to
> ‘libMesh::AnalyticFunction<double>::AnalyticFunction()’
>
> So, then how do you do what you propose?
I think you want to write a forwarding constructor for your class that
takes a pointer-to-function and constructs the parent by passing it
along:
class AnalyticFunctionTest : public AnalyticFunction<Number>{
public:
AnalyticFunctionTest(void fptr(DenseVector<Output>& output,
const Point& p,
const Real time))
: AnalyticFunction(fptr) // <-- construct the parent
{
_initialized = true;
}
--
John
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users