[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [TRNSYS-users] using storage c++ type



Dear Knut,

Thank you for trying out my code!!!
The fact that it worked on your pc made it clear to me that the fault
was somewhere in the headerfile.

I have compared the headerfile i was using to another one and found out
that in mine, one of the storagefunctions was declared as a "double" instead
of a "void" as it should be.
When i changed that it worked.

Thanks again!!!

Kind Regards,
Wouter Lumen

ps: it should be stored[0]+=1 indeed (i'm pretty much a C++ newbie)



Citeren knut.erik.enerstvedt@niva.no:


Wouter,

I have compiled and tried your C++ component, and it runs without any
"invalid floating point error" on my machine. I use the Microsoft Visual
C++ 2008 Express Edition compiler.

The Type doesn't quite work as you have explained, however. Instead of
adding 1 to the two stored variables for every timestep, it simply sets
them equal to 1 at each timestep. To add 1, write stored[0]+=1 instead of
stored[0]=+1.

I can not see any further errors in your code. By the way, do you know for
sure that you have declared the storage functions correctly in the
"TRNSYS.h" file? I don't think the pointer construction of "nitems" should
be a problem, as it works for me when I use &nitems directly as function
argument.

I hope this was helpful in some way...

Kind regards
Knut Erik Enerstvedt







             trnsys-users-requ
             est@engr.wisc.edu
                                                                        To
             04/20/2008 07:03          trnsys-users@engr.wisc.edu
             PM                                                         cc

                                                                   Subject
             Please respond to         TRNSYS-users Digest, Vol 40, Issue
             trnsys-users@engr         25
                 .wisc.edu











----- Message from Wouter Lumen <wouter.lumen@ugent.be> on Sat, 19 Apr 2008
19:50:13 +0200 -----

           To: trnsys-users@engr.wisc.edu

      Subject: [TRNSYS-users] using storage c++ type


Dear trnsys users,

I'm having some troubles with using storage in my new c++ component.
Every time i run the component i get a "invalid floating point error".

I've have read about the possible causes of this error and i have narrowed
it down to a problem with storage.

I have attached a very simple sourcecode:
It reads in 2 numbers (getal1 and getal2) and puts them back out after
adding
a constant to them (in this case, double a and double b).

When i run this component and use hard coded values, such as 1 and 2
for a and b, the
component works flawless.

But when i use storage (as in the attached file), i get the error.
The storage is used in the following way:
Every timestep "1" is added to the stored variables.
So basically, now I add a larger, with timestep increasing, value to getal1
and getal2.

I have tried severall configurations when using the storage such as:
not using the info[12]>0 manipulations,
not using the setstorage at the end of the calculations,
using them both, etc etc...
Maybe the problem is in this, may be not...

Another possible cause (which i think is more likely), is that it has
something
to do with the pointerconstruction for "nitems":
int nitems=2;
int* pitems=&nitems;
double stored[2]={0,0};
so that pitems points to nitems.
This is done because the storage functions take an int* as argument
and not an int.

If anybody has any suggestions on what the problem could be, or could
modify
the sourcefile in a way that it should work. Please let me know.

Thank you very much.

Kind regards,

Wouter Lumen.







----------------------------------------------------------------------------------------------------------------------
NIVAs hovedkontor har flyttet til nye lokaler i CIENS - Forskningssenter
for miljø og samfunn; Gaustadalléen 21, 0349 Oslo. Meld deg på vårt
nyhetsbrev på www.niva.no