[TRNSYS-users] Changing a parameter to input in components

Mehdi Shahrestani mahdishahrestani at yahoo.com
Mon Jul 12 18:59:41 PDT 2010


Dear Jaime

 

Many thanks for your effort in preparing this informative guide line. 

This solved my problem. I think this is a valuable instruction to modify the
existing components.

 

Same as you it is very difficult to switch back to Fortran from Matlab after
ages.

But anyway there is no remedy and I should back on the track.

 

Again thanks Jaime for your reply which answered my question
comprehensively.

 

Regards

Mehdi Shahrestani

 

 

 

  _____  

From: Jaime Gonzalez Rodriguez [mailto:gonzalezro.jaime at gmail.com] 
Sent: 13 July 2010 01:05
To: Mehdi Shahrestani
Cc: David Bradley; trnsys-users at cae.wisc.edu
Subject: Re: [TRNSYS-users] Changing a parameter to input in components

 

I forgot to change something in your code, now it's all right =)

On 13 July 2010 02:03, Jaime Gonzalez Rodriguez <gonzalezro.jaime at gmail.com>
wrote:

well, you just have to find the code of the type you wanna change, for
instance type212.for or whatever...then, as David said you have to change
the parameter to input, I'll do it in the code that you pasted before so
that you can see an example, anyway my trnsys  function library seems to be
kind of different to yours, but this should work.

Other topic is how to recompile it, I guess you should create a project and
set the right options to the compiler, you've got two options.

1. Copy the options of the project that trnsys created for you with the type
you have built before, those options should be the same

2. Create a new component, create the .tmf with the number of parameters,
inputs and outputs that you want, and then copy and paste the code, be
carefull with this, don't paste the part where you define the number of
parameters or the part with the type number, just the core of the code, I
mean, the part where you carry out the calculations. 

I preffer the option 2 because I am too lazy to fight with windows
compilers, but the first option might be better.

 

When I started programming types I didn't remember much about fortran cuz I
was programming C and other languages (mostly matlab which is the easiest)
for a long time and I had forgotten almost everything from university, it
was a nice exercise to read a code of a type and try to understand
everything. If I were you I'd try so.

 

Regards and good luck with fortran =)

 

 

----------------------------------------------------------------------------
---------------------------------------------------------------------------

!Do All of the "Very First Call of the Simulation Manipulations" Here

      If(getIsFirstCallofSimulation()) Then

 

                        !Tell the TRNSYS Engine How This Type Works

                        !Call SetNumberofParameters(1)           !The number
of parameters that the the model wants

                        Call SetNumberofParameters(0)           !The number
of parameters that the the model wants

                        !Call SetNumberofInputs(1)                   !The
number of inputs that the the model wants

                        Call SetNumberofInputs(2)                   !The
number of inputs that the the model wants

                        Call SetNumberofDerivatives(0)         !The number
of derivatives that the the model wants

                        Call SetNumberofOutputs(1)                 !The
number of outputs that the the model produces

                        Call SetIterationMode(1)
!An indicator for the iteration mode (default=1).  Refer to section 8.4.3.5
of the documentation for more details.

                        Call SetNumberStoredVariables(0,0)
!The number of static variables that the model wants stored in the global
storage array and the number of dynamic variables that the model wants
stored in the global storage array

                        Call SetNumberofDiscreteControls(0)
!The number of discrete control functions set by this model (a value greater
than zero requires the user to use Solver 1: Powell's method)

 

                        Return

 

      EndIf

!---------------------------------------------------------------------------
--------------------------------------------

 

!---------------------------------------------------------------------------
--------------------------------------------

!Do All of the First Timestep Manipulations Here - There Are No Iterations
at the Intial Time

      If (getIsFirstTimestep()) Then

      !par = getParameterValue(1) I comment this line cuz u won't need it
anymore

 

 

      inp1 = GetInputValue(1)

      inp2 = GetInputValue(2)

 

           

   !Check the Parameters for Problems (#,ErrorType,Text)

   !Sample Code: If( PAR1 <= 0.) Call FoundBadParameter(1,'Fatal','The first
parameter provided to this model is not acceptable.')

 

   !Set the Initial Values of the Outputs (#,Value)

                        Call SetOutputValue(1, 0) ! opt

 

 

   !If Needed, Set the Initial Values of the Static Storage Variables
(#,Value)

   !Sample Code: SetStaticArrayValue(1,0.d0)

 

   !If Needed, Set the Initial Values of the Dynamic Storage Variables
(#,Value)

   !Sample Code: Call SetDynamicArrayValueThisIteration(1,20.d0)

 

   !If Needed, Set the Initial Values of the Discrete Controllers (#,Value)

   !Sample Code for Controller 1 Set to Off: Call
SetDesiredDiscreteControlState(1,0)

 

                        Return

 

      EndIf

!---------------------------------------------------------------------------
--------------------------------------------

 

!---------------------------------------------------------------------------
--------------------------------------------

!ReRead the Parameters if Another Unit of This Type Has Been Called Last

      If(getIsReReadParameters()) Then

                        !Read in the Values of the Parameters from the Input
File

      !par = getParameterValue(1) Since you don't have parameters you won't
need this neither

 

                       

      EndIf

!---------------------------------------------------------------------------
--------------------------------------------

 

!Read the Inputs

      inp1 = GetInputValue(1)

      inp2 = GetInputValue(2)

                       

 

            !Check the Inputs for Problems (#,ErrorType,Text)

            !Sample Code: If( IN1 <= 0.) Call FoundBadInput(1,'Fatal','The
first input provided to this model is not acceptable.')

 

      If(ErrorFound()) Return

 

 

 

!     finally where you calculated the value of the formula you should
change PAR1 for IN2

      OUT1=IN1+IN2

!    DON'T FORGET TO ADD THE DECLARATION OF THE VARIABLE IN2 AND DELETE THE
DECLARATION OF PAR1

!    Note: As far as you declare the variables you can call them with any
name you want, it does not have to be

Double IN1 

Double IN2

it could be 

Double SPAINWORLDCHAMPIONS 

Double whatever

 

 

 

 

 

On 12 July 2010 21:04, Mehdi Shahrestani <mahdishahrestani at yahoo.com> wrote:

Dear David 

 

Thanks for your reply 

To be honest I try to change the script but I don’t know how I can recompile
the edited file.

I was wondering if you could give me some hints about recompiling an edited
fortran file.

 

Regards

Mehdi Shahrestani

 

 

 

  _____  

From: David Bradley [mailto:bradley at tess-inc.com] 
Sent: 12 July 2010 18:16
To: mehdi
Cc: trnsys-users at cae.wisc.edu
Subject: Re: [TRNSYS-users] Changing a parameter to input in components

 

Mehdi,
  In addition to changing the proforma, you also need to modify and
recompile the Fortran code of the Type and change the number of parameters
and inputs that it expecting to be passed.
Best,
 David


On 7/11/2010 17:37, mehdi wrote: 

Hello everybody 

 

I have a question about changing a “Parameter” into “Input” in components.

 

For example in a pipe component, I have changed one of parameters to input
(in Performa) but after run there were two errors mentioned that

There is one missed parameter and one more than normal input.

 

I think there should be a way to solve such a problem. 

I was wondering if anybody could give some advice.

 

Regards

Mehdi Shahrestani

 

 
 
_______________________________________________
TRNSYS-users mailing list
TRNSYS-users at cae.wisc.edu
https://www-old.cae.wisc.edu/mailman/listinfo/trnsys-users
  

 

-- 
***************************
David BRADLEY
Principal
Thermal Energy Systems Specialists, LLC
22 North Carroll Street - suite 370
Madison, WI  53703 USA
 
P:+1.608.274.2577
F:+1.608.278.1475
bradley at tess-inc.com
 
http://www.tess-inc.com
http://www.trnsys.com


_______________________________________________
TRNSYS-users mailing list
TRNSYS-users at cae.wisc.edu
https://www-old.cae.wisc.edu/mailman/listinfo/trnsys-users




-- 

Jaime. González Rodríguez




-- 
Jaime. González Rodríguez

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.onebuilding.org/pipermail/trnsys-users-onebuilding.org/attachments/20100713/95bde030/attachment-0005.htm>


More information about the TRNSYS-users mailing list