Passing a Class Member Function to dodesol

Passing a Class Member Function to dodesol

imagem de Gennadiy Rishkin
Hi, How can I pass a class member function to the ODE solver. I need to do this because my rhs function is dependent on data from the class. class Foo { void rhs(...) { rhs[0] = classdata * y[0] .... ... } void updat_class_data() { classdata = ....... } void solve_ode_system() { ... dodesol(..........., rhs, .......); } double classdata; } Many thanks Gennadiy
9 posts / 0 new
Último post
Para obter mais informações sobre otimizações de compiladores, consulte Aviso sobre otimizações.
imagem de Alexander Kalinkin (Intel)

Hi, It's seems that you could find example of such code here:http://www.newty.de/fpt/fpt.html With best regards, Alexander Kalinkin

imagem de Gennadiy Rishkin

Hi Alexander, Thanks for the link. I knew this already. 'But', I guess what I meant to ask was how can I successfully pass user data to the 'rhs' function. My scenario is this: I have a set of N (C++) objects, each of which need to solve the same system of stiff ODEs with their own data. The data in turn depends on the state of variables in each object. Ideally, I'd make the 'rhs' function a member function, thus making the class data visible to it. 'But', since the 'rhs' function doesn't have a *userdata parameter, doing this is turning out to be a bit of a beast. The good thing is 'dodesol' seems to be the only stiff integrator that's been able to solve my system of ODEs but I'm unable to make use of it beyond a single object. So, HELP, please :) Gennadiy

imagem de Alexander Kalinkin (Intel)

Hi,

Maybe I
didnt understand you, but subroutine rhs must describe in next way:

subroutine
(n, t, y, f)

integer n

double
precision t, y(n), f(n)

f(i) =
.....

return

end

With best
regards,

Alexander
Kalinkin

imagem de Jorge Martinis

I think this thread asks for something similar to what I had asked for in a previous thread: a mechanism to pass user defined data to the rhs function. Perhaps something that would look like: subroutine(n, t, y, f, userdata) integer n,double t, double y[n], double *f(), *void userdata Or maybe something similar to the mechanism utilized at the Intel MKL (Trust Region Methods) for passing user data. I hope Intel is working on such a mechanism for future versions of this library. regards, Jorge

imagem de Gennadiy Rishkin

Jorge is correct. I also hope that the developers consider this for the next release.
Gennadiy

imagem de Alexander Kalinkin (Intel)

Gentelmen, Now I see what you want and we will try to implement it in some next releases. By the way to continue support this library we really need to collect some feedbacks about this library from you. Could you post it on main ode page (http://software.intel.com/en-us/articles/intel-ordinary-differential-equations-solver-library/)or send it me directy? With best regards, Alexander Kalinkin

imagem de Sören Plönnigs

I would also appreciate if this would be possible. At the moment I avoid the problem by using global variables for sharing data with my main program. This may not be elegant, but it works...

regards,
Sren

imagem de Alexander Kalinkin (Intel)

HiSren, As you can see we have huge number of requests on such functionality in ODE solver so now we investigate it. Nevertheless if you use ODE solver could you provide some feedback on it? You can send it to me directy or answer here in private mode. With best regards, Alexander Kalinkin

Faça login para deixar um comentário.