Difference between revisions of "OpenModelica/C2/Functions-and-Types/English-timed"

From Script | Spoken-Tutorial
Jump to: navigation, search
 
Line 58: Line 58:
 
|-
 
|-
 
|| 01:15
 
|| 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.
+
|| 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.
  
 
|-
 
|-
Line 162: Line 162:
 
|-
 
|-
 
|| 04:14
 
|| 04:14
|| In an '''assignment''' statement the value of right hand side is assigned to the left hand side.
+
|| In an '''assignment''' statement, the value of right hand side is assigned to the left hand side.
  
 
|-
 
|-
Line 170: Line 170:
 
|-
 
|-
 
|| 04:25
 
|| 04:25
||In this case '''fx''' is an unknown variable.  
+
||In this case, '''fx''' is an unknown variable.  
  
 
|-
 
|-
Line 214: Line 214:
 
|-
 
|-
 
|| 05:31
 
|| 05:31
|| Now let us simulate this '''class'''.
+
|| Now, let us '''simulate''' this '''class'''.
  
 
|-
 
|-
 
|| 05:34
 
|| 05:34
||To simulate this '''class''' you may right click on '''functionTester''' icon in '''Libraries Browser''' and select '''Simulate'''.  
+
||To simulate this '''class''', you may right click on '''functionTester''' icon in '''Libraries Browser''' and select '''Simulate'''.  
  
 
|-
 
|-
Line 266: Line 266:
 
|-
 
|-
 
|| 06:45
 
|| 06:45
||Before viewing that '''function''' let me close the tabs of '''PolynomialEvaluator''' and '''FunctionTester'''.
+
||Before viewing that '''function''', let me close the tabs of '''PolynomialEvaluator''' and '''FunctionTester'''.
  
 
|-
 
|-
Line 306: Line 306:
 
|-
 
|-
 
|| 07:51
 
|| 07:51
|| Now let me switch to '''multipleFunctionTester''' tab.
+
|| Now, let me switch to '''multipleFunctionTester''' tab.
  
 
|-
 
|-
Line 314: Line 314:
 
|-
 
|-
 
|| 08:01
 
|| 08:01
|| '''multiplePolynomialEvaluator''' function is called with an '''input''' argument of '''10''' units.
+
|| '''multiplePolynomialEvaluator''' function is called with an '''input argument''' of '''10''' units.
  
 
|-
 
|-
Line 330: Line 330:
 
|-
 
|-
 
|| 08:37
 
|| 08:37
||Now let me simulate this '''class'''.
+
||Now let me '''simulate''' this '''class'''.
  
 
|-
 
|-
Line 338: Line 338:
 
|-
 
|-
 
|| 08:46
 
|| 08:46
|| Select '''‘y''' and '''z''' in the '''variables browser'''.
+
|| Select '''y''' and '''z''' in the '''variables browser'''.
  
 
|-
 
|-
Line 354: Line 354:
 
|-
 
|-
 
|| 09:11
 
|| 09:11
||Delete '''(y,z)''' and  type '''(z,y)'''.
+
||Delete '''(y,z)''' and  type '''(z,y)'''  
  
 
|-
 
|-
Line 362: Line 362:
 
|-
 
|-
 
|| 09:22
 
|| 09:22
||Simulate this '''class''' once again. Close the pop up window.
+
||Simulate this '''class''' once again. Close the pop-up window.
  
 
|-
 
|-
Line 426: Line 426:
 
|-
 
|-
 
|| 10:54
 
|| 10:54
||'''Attributes''' of Modelica data-types like '''unit''', and '''start''' can be changed accordingly.
+
||'''Attributes''' of Modelica data-types like '''unit''' and '''start''' can be changed accordingly.
  
 
|-
 
|-
 
|| 11:01
 
|| 11:01
||For example, in the above case '''velocity''' is defined to be the same as '''real data type'''.
+
||For example, in the above case '''velocity''' is defined to be the same as '''real''' data type.
  
 
|-
 
|-
 
|| 11:08
 
|| 11:08
||But its unit modified to '''m/s'''.
+
||But its unit modified to '''meter per second (m/s)'''.
  
 
|-
 
|-
 
|| 11:12
 
|| 11:12
||I have created a '''model''' named '''bouncingBallWithUserTypes''' to simulate type definitions.
+
||I have created a '''model''' named '''bouncingBallWithUserTypes''' to simulate '''type''' definitions.
  
 
|-
 
|-
Line 454: Line 454:
 
|-
 
|-
 
|| 11:35
 
|| 11:35
||Please go through to the per-requisite tutorials to understand '''bouncingBall''' model.
+
||Please go through the per-requisite tutorials to understand '''bouncingBall''' model.
  
 
|-
 
|-
 
|| 11:41
 
|| 11:41
|| '''Length''' is defined as '''Real''' datatype. with Its unit  modified to '''m'''.
+
|| '''Length''' is defined as '''Real''' datatype with its unit  modified to '''meter (m) '''.
  
 
|-
 
|-
 
|| 11:47
 
|| 11:47
|| Similarly '''Velocity''' is defined as '''Real''' with Its unit modified to '''m/s''' .
+
|| Similarly '''Velocity''' is defined as '''Real''' with its unit modified to '''meter per second (m/s)''' .
  
 
|-
 
|-
Line 474: Line 474:
 
|-
 
|-
 
|| 12:02
 
|| 12:02
|| Similarly '''v''' represents velocity of ball.
+
|| Similarly, '''v''' represents velocity of ball.
  
 
|-
 
|-
Line 486: Line 486:
 
|-
 
|-
 
|| 12:18
 
|| 12:18
||Now let me '''simulate''' this. Close the pop up window.
+
||Now let me '''simulate''' this. Close the pop-up window.
  
 
|-
 
|-
 
|| 12:24
 
|| 12:24
|| In the '''Variables Browser''' notice that '''h''' and '''v''' have their respective units associated with their data-types.
+
|| In the '''Variables Browser''', notice that '''h''' and '''v''' have their respective '''unit'''s associated with their data-types.
  
 
|-
 
|-
Line 506: Line 506:
 
|-
 
|-
 
|| 12:46
 
|| 12:46
|| Now let me go back to the slides.
+
|| Now, let me go back to the slides.
  
 
|-
 
|-
 
||12:49
 
||12:49
|| As an assignment breach the restrictions on functions and observe the errors produced.
+
|| As an assignment, breach the restrictions on functions and observe the '''error'''s produced.
  
 
|-
 
|-
Line 518: Line 518:
 
|-
 
|-
 
||12:59
 
||12:59
|| Watch the video available at following link. '''http://spoken-tutorial.org/ http://spoken-tutorial.org] /What\_is\_a\_Spoken\_Tutorial''' It summarises the '''Spoken Tutorial project'''
+
|| Watch the video available at following link.
 +
'''http://spoken-tutorial.org/ What_is_a_Spoken_Tutorial'''
 +
It summarizes the '''Spoken Tutorial project'''.
  
 
|-
 
|-
 
||13:05
 
||13:05
|| We conducts workshops using spoken tutorialsPlease contact us.
+
|| We conduct workshops using spoken tutorials. Please contact us.
  
 
|-
 
|-
Line 530: Line 532:
 
|-
 
|-
 
|| 13:15
 
|| 13:15
|| We coordinate coding of solved examples of popular books.Please visit the websites for more information.
+
|| We coordinate coding of solved examples of popular books. Please visit the websites for more information.
  
 
|-
 
|-

Latest revision as of 19:26, 18 August 2018

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.

http://spoken-tutorial.org/ 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