|
View:
New views
1 Messages
—
Rating Filter:
Alert me
|
|
|
Re: Sundials CVODE: y vector values"lost"/corrupted after first call to RHSfunction
Sender: owner-sundials-users@... Reply-To: sundials-users@... 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. ---------------------------------------------------------------------------------------------------------------- Center for Applied Scientific Computing Lawrence Livermore National Laboratory P.O. Box 808, L-561 Livermore, CA 94551 (925) 424-6013 (Office) cswoodward@... (925) 423-2993 (Fax) http://people.llnl.gov/woodward6 |
| Free embeddable forum powered by Nabble | Forum Help |