Marine Engineering Specialists -- Bentley Systems has acquired Ultramarine's MOSES Software [ Press Release ]
Modeling a TLP
This sample generates a model of a TLP with circular columns and pontoons.

Most of our examples contain a common set of "beginning" commands as well as a common "ending" command. Click here to get documentation for these commands. They will not be discussed directly. The files which are discussed here are:

The basic dimensions of the the TLP are used to create the model. These basic dimensions are set as variables as is shown in the following.

   $
   $*********************************************      overall data
   $
   &SET_VAR LEN    := 215   $ctr to ctr length
   &SET_VAR BEAM   := 215   $ctr to ctr beam
   $
   $*********************************************      pontoon data
   $
   &SET_VAR PDIA   := 30
   &SET_VAR PONHGT := 20    $bot of colm to bot of pontoon
   &SET_VAR NPP    := 9
   $
   $*********************************************      column data
   $
   &SET_VAR CDIA   := 63    $colm dia
   &SET_VAR CDEP   := 165   $colm depth
   &SET_VAR NPC    := 9
As you can see the variable on the left hand side of the equals sign is being set to the value on the right hand side. The variable names are chosen so that it is easy to know what they represent. The following list gives the meaning of the variable name.
  • LEN - is the length of the TLP measured from the centers of the columns,
  • BEAM - is the beam of the TLP measured from the centers of the columns,
  • PDIA - is the diameter of the pontoons
  • PONHGT - is the distance of the pontoons above the base of the columns,
  • NPP - is the number of points used to define the circular pontoon
  • CDIA - is the diameter of each column
  • CDEP - is the depth of each column, and
  • NPC - is the number of points used to define the circular column
In the next set of commands we create several macros to facilitate modeling. The first of these macros, SU_SHOW, is very similar to the plotting macro used in the other modeling samples, it therefore is not discussed here. For a brief discussion on this macro click here.

The two local macros are used for modeling a TLP. The first macro generates a column and is the same macro which is used in the spar generation sample. This macro is discussed along with the Common Commands to Vessel Modeling. The second macro used to generate the pontoons is unique to this command file and follows.

   $
   $*********************************************      macro for pontoon
   $
   &MACRO PONTOON CN X Y Z ANGLE -NPOINT POI NP = 9 \
          -LENGTH HEI LENGTH \
          -DIAMETER DI DIA
      BLOCK %CN -LOCATION %X %Y %Z 0 0 %ANGLE
         &SET ANGI = &NUMBER( REAL 180/(%NP%-1) )
         PLANE 0 %EXT_PON %LENGTH%-%EXT_PON %LENGTH% \
                 -CIRC 0 0 %DIA%/2 0 %ANGI% %NP
         END
   &ENDMACRO
   &M_ACT PONTOON BLOCK
Comparing the PONTOON macro to the COLUMN macro you see that they are quite similar.

The command &MACRO marks the beginning of the macro and the command &ENDMACRO marks the end of the macro. The required data for the macro PONTOON is CN, Y, Y, Z, and ANGLE. CN is the name of the block and X, Y and Z are the location of the cylinder coordinate system. The PONTOON macro also needs the yaw angle of the cylinder. The cylinder coordinate system will be yawed in the global coordinate system by the specified amount. The option -NPOINT is used for the number of points around the circle. If this option is not used the default of 9 points in 180 degrees will be used. The PONTOON has an option of -LENGTH this option is used to specify the length of the cylinder. The last option -DIAMETER is used to specify the diameter of the cylinder. That concludes the data needed as input, but how is this data going to be used?

A building block, named CN, is created and located in the global coordinate system, according to X, Y, Z and the Yaw angle. This is done with the command BLOCK and the option -LOCATION. This command also enters us into the Block menu. In order to create a circle we need to tell the program the starting point, which increment to take around the circle, and how many increments to take. The variable ANGI takes care of finding the increment between the points. Here we have set the variable to a string function &NUMBER(REAL ...). This sets the variable ANGI to the result of the arithmetic after the word real and the last close parenthesis. Please notice that we have subtracted 1 from the number of points. This we like to refer to as the fence and post problem. If you are putting up a fence with 9 posts you will also have 8 spaces. So in order to get 9 evenly spaced points in a half circle we need a total of 8 spaces. All of this is used in the PLANE command.

The PLANE command makes three planes for the column and four planes for the pontoon. The extra planes are there to help with the transition between the column and pontoon intersection. The values used for the variable EXT_PON will be defined later. Now, if you are a programmer at heart you have probably caught on to the fact that macros are similar to subroutines and therefore it is OK to tell the program how to use a variable without having defined it. For those of you who are not programmers this means that as long as we do not use the macro we do not need to define every variable needed by the macros. After building the block the Block menu is exited with END.

At the end we have the command &M_ACT the macro name and the command BLOCK. This command tells the program to accept the new command PONTOON wherever it accepts the native program command BLOCK.

Having made these nice tools for ourselves we can get to the business of generating TLP models. First lets take care of those variables that we told the macros about but have not yet defined.

   $
   $*********************************************      define extra planes
   $
   &LOCAL EXT_COL = %PONHGT%+.5*%PDIA%+1
   &LOCAL EXT_PON = .65*%CDIA%
These two variables are defined above. The &LOCAL command is used to specify that these variables are local and are not to be used by other parts of the program. For more details about local variables click here. The variables are distances which place extra planes near the intersection of the column and pontoon.

Having defined all the variables which will be used we are prepared to enter the &Surface menu with the following command:

   $
   $*********************************************      enter surface menu
   $
   &SURFACE
Within the &Surface menu we generate one pontoon and two columns with the following:
   $
   $*********************************************      generate a pontoon
   $
   PONTOON S -%LEN%/2  %BEAM%/2 %PONHGT 0 -LENGTH %LEN -NPOIN %NPP -DIA %PDIA
   $
   $*********************************************      generate two columns
   $
   COLUMN SF -%LEN%/2  %BEAM%/2  -HEIGHT %CDEP -NPOIN %NPC -DIA %CDIA
   COLUMN SA +%LEN%/2  %BEAM%/2  -HEIGHT %CDEP -NPOIN %NPC -DIA %CDIA
The pontoon is named S, short for starboard, and the columns are named SF, short for starboard forward, and SA, short for starboard aft. You can see how the variables defined at the top of the file are being used. The use of the macros was discussed earlier in the macro discussion. I would however like to point out, how the variable LEN is being used for the pontoon and the columns. For both LEN defines the location of the first plane. Since the pontoon has to connect the two columns we have the pontoon starting at -%LEN/2 and ending at +%LEN/2. The arithmetic is simple -%LEN%/2 has been entered for the X value and the length given in the -LENGTH option is %LEN (-%LEN%/2+%LEN=+%LEN/2). What is really convenient about this scheme is that you can get a pretty good model for a handful of variables. Upfront planning of the generation procedure of models pays off.

Well, now that we have a pontoon and two columns we need to somehow make them a union. In the following set of commands we view our work up to this point, make the three blocks into one block and clean up our database.

   $
   $*********************************************      join
   $
   SU_SHOW
   UNION S SF TEMP
   DELETE S SF
   SU_SHOW TEMP SA
   UNION TEMP SA STBD
   DELETE TEMP SA
   SU_SHOW STBD
The macro SU_SHOW is used to view the one pontoon and two columns. By leaving the argument blank it plots all the blocks available. The command UNION unions pontoon S and column SF to form the block TEMP. Once we have the block TEMP we have no more need for block S and SF so the command DELETE deletes them from the database. The command UNION is used again this time to join block TEMP to column SA to form STBD (short for starboard), and the command DELETE rids our database of the excess blocks. The last command plots the starboard side.

Since we have a starboard side it would be nice to have port side. It would also be nice for the port side to be a reflection of the starboard side. This is exactly what is done in the following command,

   $
   $*********************************************      reflect
   $
   REFLECT STBD PORT Y
the starboard block, STBD, is reflected about the y axis to form the port side block PORT.

Now that we have a starboard side and a port side we need to somehow join them with a pontoon.

   $
   $*********************************************      fwd pontoon
   $
   PONTOON F -%LEN%/2  %BEAM%/2 %PONHGT -90 -LENGTH %LEN -NPOIN %NPP -DIA %PDIA
   SU_SHOW STBD PORT F
The forward pontoon is generated with the macro PONTOON similar to the starboard pontoon, however, here we specify a yaw angle of -90 degrees so that the pontoon will span from starboard to port instead of from bow to stern.
   $
   $*********************************************      join
   $
   UNION STBD F TEMP
   UNION PORT TEMP TTEMP
   DELETE STBD F PORT TEMP
   SU_SHOW TTEMP
The union of the forward pontoon to the starboard side and then that union to the port side is done similar to the unions discussed earlier. As is the deletion of the excess blocks.

Finally, the aft pontoon is generated and similarly attached to the rest of the TLP, as is shown in the following.

   $
   $*********************************************      aft pontoon
   $
   PONT A  %LEN%/2  %BEAM%/2 %PONHGT -90 -LENGTH %LEN -NPOIN %NPP -DIA %PDIA
   SU_SHOW TTEMP A
   UNION TTEMP A TLP
   SU_SHOW TLP
At this point we have generated a TLP model in the Surface menu. The commands used to generate a data file which can later be used by MOSES for hydrostatic or hydrodynamic analyses are common to all models regardless of vessel type. These commands are discussed in a separate section located here.

The file tlp_bld.ppo contains a mesh suitable for use.