Re: Sundials CVODE: y vector values "lost"/corrupted after first call to RHSfunction

View: New views
1 Messages — Rating Filter:   Alert me  

Re: Sundials CVODE: y vector values "lost"/corrupted after first call to RHSfunction

by by way of Carol Woodward <cswoodward@llnl.gov> :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Date: Sun, 11 Oct 2009 21:33:44 -0700 (PDT)
From: bowens1 <bowens1@...>
To: sundials-users@...
Subject: Re: [sundials-users] Sundials CVODE: y vector values
  "lost"/corrupted  after first call to RHSfunction
In-Reply-To: <25849356.post@...>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Nabble-From: bowens1@...
References: <25849356.post@...>


I have looked into the problem ore and determined this is more likely a
problem with how "ydot" is being handled. I checked my assignment to ydot
within the RHS function and the contents are correct. However, after adding
a print statement in the CVODE code after the call to

retval = f(tn, zn[0], zn[1], user_data);

The values of "ydot" or "zn[1]" are much different than those that should to
be output (based off what I am setting in the RHS function).

Based on what I've read from the documentation it seems that my definition
of ydot in the RHS function should be adequate but perhaps I am missing
something.

Thanks,
Brian



bowens1 wrote:
 >
 > Hello,
 >
 > I am currently implementing CVODE into an in-house FEA code written in C++
 > that makes thorough use of object oriented programming. Within a
 > particular
 > method of a class I am trying to implement CVODE. I have made my RHS
 > function a static function outside the class as I have seen done in the
 > examples. I am having some problem in that at the second call to the
 > RHSfunction the values passed in under "N_vector y" seem clearly
 > incorrect.
 > For example my IVP for  the problem is [0.79 0 0] and the second call to
 > RHS
 > function has the y vector as [-5.0784477968231915e+057
 > -5.0784477968231915e+057 -5.0784477968231915e+057]. It seems as though the
 > y
 > vector is being corrupted some where in the main CVODE function.
 >
 >
 > To test out sundials I wrote a smaller matlab code that is not nearly as
 > robust as the C++ implementation. The matlab implementation worked with
 > great success. I am using the same settings in both C++ and matlab
 > implementations. Also the two implementations are giving identical output
 > during the first call to the RHS function, the  C++ code gives erroneous
 > results after this.
 >
 > If needed here is my RHS function:
 >
 > DiffusionModel is a class and user_data points to an object of this class
 > that I later assign to dmod. The method "solve_for_qdot()" solves for qdot
 > and assigns it to some data object "udot" local to the DiffusionModel
 > class.
 > //==============================================================
 > static int RHSfunction(realtype t, N_Vector y, N_Vector ydot, void
 > *user_data)
 > {
 >        DiffusionModel* dmod;
 >        dmod =(DiffusionModel*)user_data;
 >
 >        double *qdot;
 >        double *q;
 >        q = NV_DATA_S(y);
 >        dmod->solve_for_qdot(t,q);
 >
 >        qdot = dmod->udot;
 >        ydot = N_VMake_Serial(dmod->totalNumDof,qdot);
 >
 >        int flag=0;
 >        return flag;
 > }
 > //==============================================================
 >
 > I greatly appreciate any help in this matter, and I'll be glad to provide
 > anymore details as needed.
 >
 > Thanks,
 > Brian
 >

--
View this message in context:
http://*www.*nabble.com/Sundials-CVODE%3A-y-vector-values-%22lost%22-corrupted--after-first-call-to-RHSfunction-tp25849356p25850406.html
Sent from the Sundials - Users mailing list archive at Nabble.com.