From Script | Spoken-Tutorial
Jump to: navigation, search
Time Narration
00:01 Welcome to the spoken tutorial on Functions and Types.
00:06 In this tutorial, we are going to learn:

how to define a function,

00:12 how to use algorithm,

how to define a type.

00:17 To record this tutorial, I am using OpenModelica 1.9.2 and Ubuntu operating system version 14.04
00:27 But this process is identical in Windows, Mac OS X or FOSSEE OS.
00:35 To understand this tutorial, you need to know how to define a class in Modelica.
00:41 You need knowledge of functions in any programming language.
00:46 Pre-requisite tutorials are mentioned on our website. please go through them.
00:52 Let us discuss a function now.
00:55 function is a specialized class that can take input and return output.
01:01 It contains algorithm section.
01:04 A function cannot contain equations and it cannot be simulated.
01:10 The syntax of a function is as shown.
01:15 Now let us write a function named polynomialEvaluator which takes x as input and returns f(x) = a x (squared) (plus) b x (plus) c where a=1, b=2 and c=1 as output.
01:36 polynomialEvaluator file is available on our website.
01:40 Please download and save all the files available in Code Files link.
01:46 To demonstrate polynomialEvaluator function, let me go to OMEdit.
01:52 OMEdit is now open in Welcome perspective.
01:56 You are only seeing a part of the OMEdit window since I have zoomed in.
02:02 I shall show you the relevant portions by shifting the window whenever necessary.
02:09 To open the files that you have downloaded, click on Open Model/Library File tool.
02:16 I have saved all the files in a folder.
02:19 Let me select them together and click on open.
02:24 If we have saved these files in different folders, you may open each one of them individually.
02:31 Note that the following classes or functions are now open in OMEdit: bouncingBallWithUserTypes , functionTester ,multipleFunctionTester, multiplePolynomialEvaluator and polynomialEvaluator.
02:51 To open polynomialEvaluator function and view it, Right-click on the icon in Libraries Browser and select View Class.
03:02 If the function doesn’t open in Text View, open it in Text View.
03:08 Name of this function is polynomialEvaluator as we have already discussed.
03:14 x is a real variable.
03:17 input is a keyword which is used to specify input variables.
03:22 Similarly, output is a keyword which is used to specify output variables.
03:28 fx is a real variable which represents f(x).
03:33 Any variable or parameter which is neither input nor output is specified using protected keyword.
03:42 a is a real parameter with a value of 1.
03:47 The values of a, b and c are as discussed in the slides already.
03:53 Please note that a, b and c are protected parameters.
03:59 Algorithm represents the beginning of algorithm section of a function.
04:05 Algorithm section may contain assignment statements only.
04:10 This sign indicates assignment.
04:14 In an assignment statement, the value of right hand side is assigned to the left hand side.
04:20 The left hand side is usually an unknown expression.
04:25 In this case, fx is an unknown variable.
04:29 The value of right hand side expression here can be calculated if the value of x is known.
04:36 x is usually passed as an input argument to the function whenever it is called.
04:43 Now let us see how to call a function using functionTester class.
04:49 functionTester icon can already be seen in Libraries Browser since I have already opened it.
04:56 To open this class, double-click on its icon.
05:01 This is an alternative way of viewing a class.
05:05 you may also right click on its icon and select View Class.
05:11 z is a real variable.
05:14 polynomialEvaluator function is called with an input argument of 10 units and it is equated to z.
05:23 The input value (variable) of polynomialEvaluator that is x takes the value of 10 units.
05:31 Now, let us simulate this class.
05:34 To simulate this class, you may right click on functionTester icon in Libraries Browser and select Simulate.
05:45 The class has now simulated.
05:47 You may also use the Simulate button in toolbar to simulate a class.
05:53 Now let me show you the Plotting perspective completely by shifting OMEdit window to the left.
06:00 Select z in the variables browser
06:04 Note that the value of z is equal to the value of f(x) at x = 10.
06:12 Now let me de-select z and delete this result.
06:18 Let me go back to Modeling perspective.
06:21 Click on polynomialEvaluator tab at the top.
06:25 Notice that polynomialEvaluator function has only one output variable.
06:31 Now let me show you how to output two or more variables using a function.
06:38 I have created a function named multiplePolynomialEvaluator which has two output variables.
06:45 Before viewing that function, let me close the tabs of PolynomialEvaluator and FunctionTester.
06:54 Since the Libraries Browser is not visible, let me shift the window to the right.
07:01 Double-click on multiplePolynomialEvaluator, multipleFunctionTester and bouncingBallWithUserTypes.
07:11 Shift the window back to its place.
07:15 Go to multiplePolynomialEvaluator tab.
07:19 This function is similar to polynomialEvaluator function except for an additional output variable.
07:27 An output variable name gx has been declared.
07:32 gx is assigned the value of a x (squared) (minus) b x (plus) c
07:38 The order in which output or input variables are declared is important.
07:45 We will understand more about this when we discuss multipleFunctionTester class.
07:51 Now, let me switch to multipleFunctionTester tab.
07:56 y and z are declared as real variables.
08:01 multiplePolynomialEvaluator function is called with an input argument of 10 units.
08:08 This means that the input variable of multiplePolynomialEvaluator takes a value of 10 units.
08:17 y and z take the values of f(x) and g(x) at x = 10 respectively.
08:26 y takes the value of output variable fx since the declaration of fx appears before the declaration of gx in the function.
08:37 Now let me simulate this class.
08:40 Click on ‘Simulate’ button. Close the pop up window.
08:46 Select y and z in the variables browser.
08:51 Note that the values of y and z are the same as f(x) and g(x) at x = 10 respectively.
09:01 Delete the result and go back to Modeling Perspective.
09:06 Now, let me interchange the order of y and z.
09:11 Delete (y,z) and type (z,y)
09:17 and save this class by pressing Ctrl+S.
09:22 Simulate this class once again. Close the pop-up window.
09:28 Select y and z in the variables browser once again.
09:33 Note that the values of y and z have been interchanged as compared to the previous case.
09:41 Let me delete this result and go back to Modeling Perspective.
09:47 Let me go back to the slides.
09:50 algorithm is Modelica syntax element to enable procedural programming.
09:56 Only assignment statements are allowed in algorithm section.
10:01 Assignment statements use the following symbol.
10:06 Data flows in assignment statements from right to left.
10:10 There are certain restrictions on functions defined in Modelica.
10:16 Use of der() in a function is invalid. Use of time variable is not allowed.
10:23 Use of when statements is not allowed in a function.
10:28 A function may not have more than one algorithm section and Models cannot be passed as arguments.
10:36 type is a specialized class to define custom data-types in Modelica.
10:42 For example, physical quantities like velocity and current can be defined as data-types.
10:50 They can be used later to declare other variables.
10:54 Attributes of Modelica data-types like unit and start can be changed accordingly.
11:01 For example, in the above case velocity is defined to be the same as real data type.
11:08 But its unit modified to meter per second (m/s).
11:12 I have created a model named bouncingBallWithUserTypes to simulate type definitions.
11:19 Let me go back to OMEdit to demonstrate this model.
11:24 Click on bouncingBallWithUserTypes tab.
11:28 This model is similar to the bouncingBall model which was discussed in previous tutorials.
11:35 Please go through the per-requisite tutorials to understand bouncingBall model.
11:41 Length is defined as Real datatype with its unit modified to meter (m) .
11:47 Similarly Velocity is defined as Real with its unit modified to meter per second (m/s) .
11:54 h represents height of the ball from surface of earth.
11:58 It is defined as length datatype.
12:02 Similarly, v represents velocity of ball.
12:05 It is declared to be of velocity datatype.
12:09 Remaining variable declarations and equations of this model are similar to bouncingBall model.
12:18 Now let me simulate this. Close the pop-up window.
12:24 In the Variables Browser, notice that h and v have their respective units associated with their data-types.
12:34 Let me select h in the variables browser.
12:38 The plot of h versus time is similar to that of bouncingBall model.
12:43 Let me de-select h.
12:46 Now, let me go back to the slides.
12:49 As an assignment, breach the restrictions on functions and observe the errors produced.
12:56 This brings us to the end of this tutorial.
12:59 Watch the video available at following link. What_is_a_Spoken_Tutorial It summarizes the Spoken Tutorial project.

13:05 We conduct workshops using spoken tutorials. Please contact us.
13:10 If you have questions in this spoken tutorial, please visit the website.
13:15 We coordinate coding of solved examples of popular books. Please visit the websites for more information.
13:23 We help migrate commercial simulator labs to OpenModelica.
13:29 Spoken Tutorial Project is supported by NMEICT, MHRD, Government of India.
13:36 We thank the development team of OpenModelica for their support.

Thank you.

Contributors and Content Editors

Jyotisolanki, Sandhya.np14