Thank Régis,
In the meanwhile, I have tried to define a my class, inheriting
EvaluationImplementation. It seems to work:
----
class UserFunctionImplementation : public EvaluationImplementation
{
public:
explicit UserFunctionImplementation(rvar (*ineqFcn)(rvar inV))
: EvaluationImplementation()
{
ineqFcn_ = ineqFcn;
if (ineqFcn_ == NULL) throw
InvalidDimensionException(HERE) << "Error: cannot build an user function
implementation with a NULL pointer";
setInputDescription(Description::BuildDefault(dimension_, "x"));
setOutputDescription(Description::BuildDefault(dimension_, "y"));
}
virtual UserFunctionImplementation * clone() const
{
return new UserFunctionImplementation(*this);
}
Bool operator ==(const UserFunctionImplementation & other) const
{
return ((dimension_ == other.dimension_) && (ineqFcn_
== other.ineqFcn_));
}
virtual Point operator() (const Point & inP) const
{
if (inP.getDimension() != dimension_) throw
InvalidArgumentException(HERE) << "Invalid input dimension";
callsNumber_.increment();
rvar out = (*ineqFcn_)(inP[0]);
return Point(1, out);
}
virtual Sample operator() (const Sample & inS) const
{
UnsignedInteger dim = inS.getDimension();
UnsignedInteger size = inS.getSize();
if (dim != dimension_) throw
InvalidArgumentException(HERE) << "Invalid input dimension";
callsNumber_.fetchAndAdd(size);
Sample outS(size, dim);
for (UnsignedInteger i = 0; i < size; i++)
outS[i] = (*this)(inS[i]);
return outS;
}
virtual UnsignedInteger getInputDimension() const
{
return dimension_;
}
virtual UnsignedInteger getOutputDimension() const
{
return dimension_;
}
private:
const UnsignedInteger dimension_ = 1;
rvar (*ineqFcn_)(rvar inV);
};
-----
Then
UserFunctionImplementation
inequality_implementation(inequalityFunctionKriging);
Where inequalityFunctionKriging is a function (double
inequalityFunctionKriging(double)) defined in a c++ source.
Thanks again,
Alessandro
Alessandro Mori
Computational ElectroMagnetic Engineering
System Analyst
IDS Ingegneria Dei Sistemi S.p.A. www.idscorporation.com
Pisa Headquarters: Via Enrica Calabresi, 24 - Loc. Montacchiello 56121 Pisa
(PI) - Italy
Tel: +39 050 3124 289 Fax: +39 050 3124 201
e-mail: [email protected]
******************************************************************************************************************************************************
This email and any attachments are confidential and is intended only for the
use of the intended addressee thereof.
If you are not the intended addressee, please be aware that any use,
disclosure, distribution and/or copying of this
communication, either whole or partial, is strictly prohibited. If you receive
this communication in error, please notify
the sender immediately and delete it from your computer.
********************************************************************************************************************************************************
-----Original Message-----
From: regis lebrun <[email protected]>
Sent: giovedì 26 marzo 2020 22:10
To: [email protected]; Mori Alessandro <[email protected]>
Subject: Re: [ot-users] user c++ function
Hi again,
Currently we only provide a Python module to the Windows users of OpenTURNS. If
you manage to interface your C++ function with Python (see eg
https://stackoverflow.com/questions/145270/calling-c-c-from-python), then you
should have a look at the PythonFunction class in OpenTURNS, see:
http://openturns.github.io/openturns/latest/user_manual/_generated/openturns.PythonFunction.html
http://openturns.github.io/openturns/latest/examples/functional_modeling/python_function.html
You also have a dedicated section in the Developer's guide:
http://openturns.github.io/openturns/latest/developer_guide/wrapper_development.html
Don't hesitate to contact me directly if you need further help.
Cheers
Régis
Le jeudi 26 mars 2020 à 21:17:21 UTC+1, Mori Alessandro
<[email protected]> a écrit :
Hello,
I am using OpenTURNS in a C++ code. I have to create a Function defined by a
C++ routine (Sample someName(Sample input) or Point someOtherName(Point
input)). Is there any example showing how to do this (maybe using a pointer to
the C++ routine)?
Thank you,
Alessandro
Alessandro Mori
Computational ElectroMagnetic Engineering
System Analyst
IDS Ingegneria Dei Sistemi S.p.A. www.idscorporation.com
Pisa Headquarters: Via Enrica Calabresi, 24 - Loc. Montacchiello 56121 Pisa
(PI) - Italy
Tel: +39 050 3124 289 Fax: +39 050 3124 201
e-mail: [email protected]
Capitale Sociale 13.171.240 Euro i.v. – C.C.I.A.A. Pisa, R.E.A. n° 77042 - C.F.
00672210507 – P. IVA (VAT) IT 00672210507
Share Capital 13.171.240 euro fully paid – registered at the Pisa Chamber of
Commerce, R.E.A. n. 77042 –
Tax number and VAT code (IT) 00672210507 - e-mail (PEC): [email protected] (for
use in Italy only)
P Save a tree, please don't print this e-mail unless you really need to.
********************************************************************************************************************************************************
This email and any attachments are confidential and is intended only for the
use of the intended addressee thereof.
If you are not the intended addressee, please be aware that any use,
disclosure, distribution and/or copying of this
communication, either whole or partial, is strictly prohibited. If you receive
this communication in error, please notify
the sender immediately and delete it from your computer.
********************************************************************************************************************************************************
_______________________________________________
OpenTURNS users mailing list
[email protected]
http://openturns.org/mailman/listinfo/users
_______________________________________________
OpenTURNS users mailing list
[email protected]
http://openturns.org/mailman/listinfo/users