Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

 In the class Geometry, create a new object called Hull. As we want to store static data in this object, make sure it is determined by Value from Object/Database (as described in tutorial 2). In the workbase, select the object Ships (underDataset). In the Knowledge Browser, right click the parameter Hull and select Parameter to Dataset (or drag it tot Ship). When you are asked how to add Hull to the Ships object, select the list and continue. The new object is now placed within Ships.

...

  In the solution Waterline in the tree of the Workbase, select the Waterline object (so the tree node in the solution),  right click  in the table of the Workbase and select All to clipboard (or F4). Paste the data (both Frame and Rel_B) in the objectHull (answer Yest to all for including the parameters in the Hull object).

When you are done, you will have a Ships object containing data in a Hull object. The Hull object should be part of the Ships object because the Ships object is the database entry point. And because you want to use all Waterline data as one set, it should be in one Hull object (or as a TeLiTab value as an alternative).

...

The relative width Rel_B at every frame was calculated directly using the polynomial formula. In reality, the waterline of a ship will be defined more likely by a number of points than by a formula. To obtain the width at a certain location, you should interpolate between these points. We'll use the LININT() function to perform a linear integration.

...

The syntax of every intrinsic function in Quaestor is in Quaestor is described in the wiki, see the functionsoverview. The syntax above means the following.

  • The parameter Inpol_Rel_B will be the linear interpolated dimensionless width at a desired frame number (Frame).
  • @Hull is the object containing all the data you want to use for interpolation.
  • 2 is the number of dimensions in which the interpolation will take place
  • @Frame makes sure the column Frame of object Hull will be used as the parameter X in the interpolation.
  • @Rel_B makes sure the column Rel_B of object Hull will be used as the parameter Y in the interpolation
  • Frame is the input parameter for which an interpolated value should be obtained

When Quaestor calculates When Quaestor calculates this function, it determines the value Frame (which is user input). This value is then compared to the values of the given column for X (which is the column Frame of the object Hull), and an interpolated value for Rel_B with respect to the input Frame is assigned to the parameter Intpol_Rel_B. Notice that an @ is used to identify the data within the object.

  Run a solution for Intpol_Rel_B using the process manager and selecting the ship object. Make sure that Intpol_Rel_B is in the class Top Goals/Undefined to see it in the Process Manager. The process manager is crucial here, as static data from theShips object should be used (which contains the object Hull). For frame, enter 3.20.

Quaestor should Quaestor should return 0.26 for Intpol_Rel_B.

...

in which Error is a dimensionless SYS parameter. Run a solution for this parameter, Intpol_Rel_B will be calculated byQuaestor automatically by Quaestor automatically because it is required by Error. Make sure you use the process manager to select the Ships object as dataset. For frame, enter 3.20 again.

The solution in two-digit format (-0.00) will be presented in the list of the Workbase. When you select this solution, more digits are shown in the Frame Viewer (figure 2a) or Explanation window (figure 2b). Note that you can change the number of decimal places presented in the Workbase by changing the value Decimal places in the Slots & Properties window. 

Please, realise that for input values, this number of digits also defines the maximum accuracy accepted for this input. So, when you van defined B as two digits, providing input with three will give a warning to the user followed by rounding the provided number on two digits.



Figure 2a   In the Frame Viewer, more digits of the selected parameter are shown

 

Figure 2b   In the Explanation window, more digits of the selected parameter are shown 

...

Editing relations was covered in tutorial 2. Remember that the use, syntax and examples of all quaestor functions are available in the wiki: functionsoverview.

  Run a solution for Error again at the same frame.

...

To calculate the waterplane are for a certain ship, we would like Quaestor to like Quaestor to integrate the width with respect to X. The dimensionless width table is already present in our object Hull, let's use it in the integration.

...

First, we take a look at the arguments after Hull. Data within the object Hull will be used in the integration, but yet it only contains dimensionless frame numbers and dimensionless widths. By putting (@X, @B_Frame, Lpp, B) behind it, you ask Quaestor to ask Quaestor to calculate X and B_Frame using data from within Hull, using Lpp and B from outside Hull and add all these parameters to the object Hull. You do actually use the object Hull as a function to calculate other parameters. This is a very powerful ability of Quaestor of Quaestor (see alsoalso QuaestorSyntax).

The arguments for the INTEGR function are as follows

...

 In the solution tree, select the object Hull or open it as TeLiTab text (remember that F2 is the shortkey to open it as TeLiTabtext text).

The telitab of the object hull is visible now (figure 3). Because we solved a multiple case problem, the object has been used as function and reused for every case. Only the contents of the last case calculated remains in the object.

...

BM = Moment_of_Inertia / (DISP * 1000/ Rho)

Moment of inertia of the waterplane area in m^4:

Moment_of_Inertia = 1/12 * INTEGR(Hull(@X, @B3_Frame, Lpp, B), 2, @X, @B3_Frame, 2, 0, Lpp)

Please note (and you might have experienced this in the previous tutorial too) that the parameter Moment_of_Inertia might still have a red cross and an Error warning in the knowledge base although you have provided the relation and a dimension. When this is the case, for sure you still have the Hull object in focus in a solution of the Workbase. When this is the case, Quaestorcommunicates  Quaestor communicates that the relation you have provided cannot be used inside this object (and thus you have a red cross for Moment_of_Inertia). When you select a top node of a solution, you will see that the Moment_of_Inertia parameter is properly defined.

...

Enter the following text in the Data slot  in the Expression Editor of the relation GM_Check:

TEXTITEM1 =
|0
3 "ExampleShip" "L" "GM"
"1" 1 70 0.6
"2" 2 75 0.7
"3" 3 60 0.5
"4" 4 80 0.9
"5" 5 75 0.55
"6" 6 60 0.6
"7" 7 55 0.8
"8" 8 65 0.75
"9" 9 72 0.6 
"10" 10 80 0.56|

See figure 5. GM_Check is in meters. 

The LEASQ interpolation function now returns an average GM value in meters for a certain Lpp. The syntax TEXTITEM$(nr) is often used inQuaestorin Quaestor, and refers to a template, text item or TeLiTab in the Data slot of the Expression Editor. In this way, data that is not included in the knowledgebase but is only used in a particular function (as in our relation) can be used.

Note that the syntax of the relation uses TEXTITEM$(nr), but in the data slot the syntax TEXTITEM1= is used. The TeLiTab is written between two | characters. Multiple textitems can be available in a relation (TEXTITEM$(1), TEXTITEM$(2) .. TEXTITEM$(n)). Furthermore, please note that "the devil is in the detail". Small errors in your syntax will always be a problems for software such as Quaestoras Quaestor. Therefore, keep checking the correctness of your syntax.

...