Two Block Upend
This sample illustrates a two block upending of a tripod. The legs of the tripod are flooded, so it never floats freely. The structure is side lifted and then rotated to vertical by altering the load in the side lift slings and the upend slings simultaneously.

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:

This sample is somewhat different because macros which are defined locally are used. Unlike most of the macros which have been discussed earlier, these are not included as part of the Ultramarine tools. The first set of commands of interest are:

   $*********************************************      set weight
   &APPLY  -PERCENT @ 100
The command &WEIGHT -MARGIN tells MOSES to multiply the computed weight of the jacket by 1.06 before using it. The increase is called a "margin" and is included to account for mill tolerances and weld metal. The command &APPLY -PERCENT instructs the program to apply all of the loads defined as load groups in the data file. The symbol @ following the option specifies the names of the load groups to apply (here all of them because @ matches any name).

The following commands report the weights defined.

   $*********************************************      weight summary
The command &SUMMARY enters the Summary menu where we ask for a summary of the categories with the command CATEG_SUM. This command produces a report of the weight, center of gravity, buoyancy, and center of buoyancy of each class and each load group. The Summary menu is exited with the command END.

The environment which will be used for the analysis is defined with the following commands:

   $*********************************************      define environment
The MOSES &DATA menu is entered via the command &DATA ENVIRONMENT. Here we define the environment condition which we will later refer to as the "SEA". The syntax of the command ENV and all the options available are the same as the &ENV command. For further details of &ENV, click here. The option -SEA is used to define the waves. Here we have defined an ISSC spectrum with a heading of 90 degrees (beam seas), a significant wave height of 5 feet and a mean period of 7 seconds. The option -USE_MEAN YES instructs the program to combine the deviation with the mean when an environment is used for computing forces or stresses spectrally. The MOSES &DATA menu is exited with the command END_&DATA.

One thing which is fundamental to MOSES is the concept of a process. Whenever MOSES performs a simulation, the results are stored in the database by the process name. Here the command &DESCRIBE PROCESS adds a process to the database.

In this case we are adding the process "SIDELIFT" to the database. The analysis is performed in two stages: one for the side lift and lowering of the jacket to the water, and one for the upending.

The jacket model was defined in an upright position. In order to lift it we need to position it so that the longer side is near parallel with the water line. The following commands reposition the jacket.

   $*********************************************      reposition jacket
   &DESCRIBE PART JACKET -MOVE 0 0 0 *J403 *J103 *J401 *J101

The command &DESCRIBE PART JACKET -MOVE redefines the body coordinate system of the jacket. Here the three zeros (NX, NY, and NZ) are the location of the origin of the part system, and the four nodes, *J403, *J103, *J401, and *J101 define the orientation of the part system. The part X axis will be from the midpoint of the segment connecting *J101 and *J103 to the midpoint of the segment connecting *J401 to *J403. The part Z axis is defined by the cross product of the X axis with the vector from *J101 to *J103, and the Y axis is given by the right hand rule. So, at the conclusion of this command the plane of the jacket containing the nodes *J403, *J103, *J401, and *J101 is at the mean water level.

The command &INSTATE -LOCATE sets the global location of the jacket. Here we only specified the X = 0, Y = 0, and Z = 10 which will place the jacket origin at an elevation 10 feet above mean water level. Since the Euler angles were not specified, the default of 0 will be used. In general MOSES will default to zero when values are expected but none were specified.

It is always a good idea to verify ones progress. The command &STATUS CONFIG produces a report which contains the location of each body in the system, and the total force acting on each body. In our case, this report shows that the jacket is 10 feet above mean water level and a weight of 493 kips (the weight of the jacket) is acting in the negative z-direction.

The definition of the side lift slings is done via the following commands:

   $*********************************************      define sidelift slng
      ~BO1 SLING 10 -LENGTH 200.00 -DENSITY 0.001 -EMODULUS 15000.
      ~LS3 SLING 4  -LENGTH 157.31 -DENSITY 0.001 -EMODULUS 15000.
      ~LS1 SLING 4  -LENGTH 140.20 -DENSITY 0.001 -EMODULUS 15000.
      CONNECTOR LS305 ~LS3 *J305
      CONNECTOR LS105 ~LS1 *J105
We enter the Model Editing menu with the command MEDIT and begin editing the model by adding three new classes, ~BO1, ~LS3, and ~LS1. For all three sling classes, we define their length with the -LENGTH option, their density with the -DENSITY option, and the modulus of elasticity with the option -EMODULUS. These three classes are slings. For all three classes the density is 0.001 pounds/ft**3, and the Young's Modulus is 15000 ksi. Class ~BO1, which will be associated with the boom, is 10 inches in diameter and has a length of 200 feet, class ~LS3 is 4 inches in diameter and has a length of 157.31 feet, and class ~LS1 is 4 inches in diameter and has a length of 140.20 feet.

We tell the program to change to the part ground with the command &DESCRIBE PART and name "GROUND" so that we can define the location of the main block hook which we will assume is fixed in space. The main hook is defined with the point *MAINHK. In MOSES, point names begin with the character *. The three numbers following the point name is its location. Here we have defined the point named *MAINHK at X = 0, Y = 0, and Z = 250 feet. The option -LOCATION temporarily overrides the current frame of reference, and MOSES is expecting six values to follow the option: X, Y, Z, RX, RY, and RZ. We have given it the string function &BODY(CG JACKET -G). A string function converts an input string into another string. This particular one returns the current location of the CG of the jacket in global coordinates. Thus, the point *MAINHK is defined to be 250 feet above the CG of the jacket. To verify our definition, we use the command &TYPE to write a message to the command channel. The message will begin with the words "LOCATION OF *MAINHK" and the coordinates followed by whatever is returned by the string function &POINT(COORDINATES *MAINHK -G); i.e. the coordinates of the point is global coordinates.

This is the second time we have used a string function to ease our work load. In the first occurrence, work was streamlined because we do not need to make a computer run to determine the location of the jacket CG and a second run using the gathered information for the location of the main hook. The string function does this bit of work for us. In the second occurrence, we report back the location of the point *MAINHK. Here again our work has been streamlined because we do not need to make additional runs to verify *MAINHK has been placed where we want it.

A sling assembly is an abstraction of the constraints which a lift vessel can apply to another body. Attaching the hook and sling assembly to the jacket is done in two steps. The first is to define the individual sling elements, and the second step is to combine the individual sling elements into an assembly. The CONNECTOR command for slings requires only three pieces of data, the name, the class, and the joint name to which the sling is attached. For the connector called "MAINLN" the class is ~BO1 and it is connected to node *MAINHK. The names of the sling elements connected to the jacket all contain part of the class name and the node name. The first sling has the name LS305 it is of class ~LS3 and is connected to joint *J305. It is a good idea to associate names of slings with their nodes, this makes the output is much easier to read.

The second step is to define the tip-hook set. This is done via the command T-H_DEFINITION (short for tip-hook definition). The tip-hook set is refereed to by the name of the element connecting the boom to the hook, in this case it is "MAINLN". The tip-hook set joins the connector "MAINLN" to the slings LS305 and LS105.

This concludes definition of the sling assembly for lowering. The model editing menu is exited with the command END.

Before we do anything serious, it is a good idea to make sure that the situation is, indeed, what we intended. The following commands create an isometric picture of the current system.

The command &PICTURE ISO instructs MOSES to create an isometric picture of the current configuration.

Now that we have a picture of the situation, it would be nice to get a report of the current situation. The following two commands ask the program to report some values which can be easily checked.

The command &STATUS TIP-HOOK reports the boom load, the length of the boom, and the connection location to ground and to the hook. The command &STATUS F_CONNECT reports the connector forces for the boom and the two slings. The option -HARD instructs the program to place these reports in the output file.

Having done a quick check of the current situation we are ready to proceed with the lowering analysis. The following commands lower the jacket into the water.

   $*********************************************      lower into water
   &LOOP J 1 30
      &INSTATE -MOVE JACKET 0 0 -4 0 0 0 -SL_SET
      &EQUI -TOL 0.05
      &EVENT_STORE %J%
      &EXIT &TOKEN(2 %INFO%) .LE. 400.
We begin a loop for the lowering of the jacket into the water. The &LOOP command marks the beginning of a set of commands which will be repeated and the &ENDLOOP command marks the end. Here, MOSES will begin with a value of J = 1 and increment the value of J by 1 until J is equal 30. If, however, the logical phrase following the &EXIT command is true, then MOSES will leave the loop.

Let's discuss the commands within the loop. The command &INSTATE -MOVE will move the jacket an amount specified by the six values following the -MOVE option. Here, the jacket is moved 4 feet in the negative Z direction each time the command is executed. The -SL_SET option simply computes the proper length for the boom sling element so that the lines have no slack in the specified configuration.

The command &EQUI finds equilibrium after the move. The option -TOL sets the tolerances for which equilibrium must be found. The entry 0.05, is a value of the translational acceleration convergence tolerance in G's. When the program encounters the &EQUI command, it will iterate to find an equilibrium position until either the residual is less than the tolerances or until the default maximum iterations are taken. At the conclusion of the &EQUI command the current situation is stored as event "J" in the current process with the &EVENT_STORE command.

In the next command we set the value of the variable "INFO" to be the tension in the sling element "MAINLN" by using the string function &CONNECTOR. In actuality, the value of "INFO" will consist of two tokens: the name "MAINLN" and its tension. We next ask the program to write the event number and the hook load. Here we have used the string function &TOKEN(2 %INFO%) to extract the hook load (the second token) from the variable "INFO".

The &EXIT command is one way to stop the execution of a loop. The logical phrase "&TOKEN(2 %INFO%) .LE. 400" will be either .TRUE. or .FALSE. depending on the value of the hook load; i.e. "The magnitude of the hook load is less than or equal to 400". If the statement is true, then the program will exit the loop. Otherwise, it will continue.

At the conclusion of the loop we encounter our first macro, rpt. This macro was defined in the data file. The ability to create macros is one of MOSES special language features. The definition of this macro is:

   $*********************************************      report macro
As we can see, executing this macro produces a report of the tip-hook properties, a report of the connector forces, and a side picture of the jacket. You see the concept of macros can be very powerful. We reduced five lines to one command.

We continue our analysis with another macro, shown here.

   $*********************************************      lower post process
This macro was also defined in the data file as:
   $*********************************************      post process macro
         &PICTURE TOP -EVENTS 1 100 1
The macro streamlines post processing. With this one command we produce pictures of the side view and top view of the process, report trajectories, report connector forces, and report connector force magnitudes. The plots created with this macro will use the strings we defined in the MOSES &Interest menu.

In addition to the lowering process just presented, a frequency domain analysis is performed in random waves with the following commands:

   $*********************************************      freq. domain
      RAO -PERIOD 5 6 7 8 9 10 11 -HEADING 90
      FR_CFORCE LS305
The command FREQ_RESPONSE enters the MOSES Frequency Response menu where the command RAO computes Response Amplitude Operators (RAOs). The option -PERIOD specifies for which periods to calculate the RAOs, 5, 6, 7, 8, 9, 10, and 11 seconds. The option -HEADING specifies for which headings to calculate the RAOs, 90 degrees.

Now that we have the RAOs we can generate some reports. The nine commands following RAO accomplish three tasks:

  • computing the frequency response at a point, done with FR_POINT. Here we have not specified a point, therefore, the program will use the default values of X=0, Y=0, and Z=0 in the body coordinate system,
  • computing the frequency response of the force in a specified connector, done with FR_CFORCE, and
  • computing the statistics of the connector forces, done with ST_CFORCE for all the connectors using the environment we earlier defined as "SEA". If only a specific connector is desired, the name should be specified in place of the @ symbol.

After each of these computations are performed the program automatically places you in the Disposition menu. Here, we ask for the standard report with REPORT, and exit the Disposition Menu with END.

With the following set of commands we begin the upending process:

   $*********************************************      define upend sling
      ~BO2 SLING 10 -LENGTH 600.00 -DENSITY 0.001 -EMODULUS 15000.
      ~USl SLING 4 -LENGTH 100 -EMOD 15000.
      *AUXHK  10 0 10 -REFERENCE *MAINHK
      CONNECTOR US401 ~USL *J401
      CONNECTOR US403 ~USL *J403
      CONNECTOR US405 ~USL *J405
The first command &DESCRIBE PROCESS tells the program that we are now going to perform the upending analysis. By specifying a process name we tell the program to store the results in the database under the name "UPEND".

The rest of the the commands define the upend slings. This is quite similar to what was done to define the lowering slings. The only difference is that we now have three sling elements instead of two, and the slings are attached to different jacket nodes.

The lowering simulation was accomplished by a single loop. The upending is a bit more complex. Here, there are 5 stages:

  • Rotating the jacket with the upending slings,
  • Lifting the jacket so that it will not hit the bottom,
  • Rotating the jacket to vertical,
  • Releasing the upending slings, and
  • Lowering the jacket to the bottom.
Throughout this process, we are constantly doing the same thing:
  • Moving the jacket by either changing the vertical distance or the pitch angle,
  • Finding equilibrium,
  • Checking some termination criteria,
  • Storing the results as an event,
  • Sending a message to the terminal, and
  • Writing some reports.
To accomplish these tasks, a macro was developed which is defined in the data file as:

   $*********************************************      set angle macro
                            -POINT POI POINT
      &EQUI -TOL 0.005 0.0005
      &SET DONE     = .FALSE.
      &SET RY   = &TOKEN(5 %JLOC%)
      &SET RY   = &FORMAT(F7.2 %RY%)
      &SET BOTC = &TOKEN(3 %BOTC%)
      &IF %BOT &THEN
         &IF  -%BOTC% .GT. %BNUM &THEN
            &SET DONE = .TRUE.
         &IF  &NUMBER(ABS %RY ) .GT. %RYCHK &THEN
            &SET DONE = .TRUE.
      &IF .NOT. %DONE &THEN
         &EVENT_STORE %J%
         &TYPE EVENT %J%, PITCH ANGLE = %RY%
         &SET J = &NUMBER(INTEGER %J%+1)

This macro takes as input "DINC" and "PINC" which are the amounts to move the jacket vertically and in pitch. It also has three options: -BOTTOM, -RY and -POINT which are defined as termination criteria on vertical distance and pitch angle respectively and the point on the jacket which will be moved. The things following -BOTTOM are two variable names, BOT which will be set to .TRUE. if the option is exercised, and BNUM which will contain the value specified if the option is exercised. The two tokens following -RY are similar. Again, the variable "POI" following -POINT will be set to .TRUE. if a point has been specified and the variable point will contain what the user specified after -POINT.

The first thing the macro does is to move the jacket with the &INSTATE command. Notice that %DINC is used in the "Z" position and %PINC in the "RY" position so that the values input to the macro will be used in the position change. The point here is important! This is the point on the jacket which will be moved during the &INSTATE. During the rotating phase, we want to keep the upending sling at a "constant height"; i.e. we want the the bottom sling attachments to be kept at a constant position. This is why we move the point *J405. If we move the point 0, 0, 0 it will not move.

Next, the macro issues &EQUI to find equilibrium. Afterwards, several variables are set. The first one sets "DONE" to .FALSE.. This variable is checked to see if one of the termination criteria have been meet. If it is .TRUE., then termination has been satisfied.

The next three set the variables, JLOC and RY. The variable JLOC is the jacket location and the variable RY is the jacket pitch. For each &SET command we used a string function to define the variable. To find the jacket location, we again use the string function &BODY, but this time we use the action "LOCATION". The string that is returned is the 6 values to define the location and orientation of the jacket. The -G option tells the program to report the string in the global coordinate system. The first time we define the variable RY we use the &TOKEN string function. Here we tell the program to set RY to the fifth token in the string JLOC, which was defined one line earlier. The second time we define the variable RY we use the string function &FORMAT with an action F7.2. This is a FORTRAN format which tells the program to change the number. The number can have as many as 7 numerical characters and up to 2 characters to the right of the decimal place. These three lines basically find the current pitch.

The next two &SET's define the variable "BOTC" which is used to monitor the bottom clearance. The first time we set the variable "BOTC" we use the string function &POINT with an ACTION of "COORDINATES" to get the coordinates of node *J109 in the global coordinate system. The second time, we use the string function &TOKEN to get the third token in the coordinates just reported. This variable is used to check the termination criteria specified with -BOT. The variable "DONE" will be set to .TRUE. if the negative of "BOT" is greater than the value specified. The negative is specified here because "BOTC" is global Z coordinate of the point, which will be negative when it is submerged. If -BOT was not specified, the macro checks to see if a termination criteria was specified on the pitch angle. If it was, and if the pitch is greater than that specified, "DONE" will again be set to .TRUE..

If "DONE" is .TRUE. there is nothing else that needs to be done. Otherwise, the macro stores the results of the equilibrium as a event, types a message, changes the subtitle, and advances the value of the event counter variable, J, by one, and writes a set of reports.

The command &SUBTITLE defines a subtitle. This subtitle, %STIT, ANGLE %RY will be on all the output pages and on any figures, until it is changed. The %RY and %STIT will be replaced by their current values. Thus the reports for each stage will have a subtitle which is different from the others, making it easier to find each set of results.

With our macro, the upending is easy, meaning the number of lines is not too big:

   $*********************************************      initial position
   &SET J    = 0
   NEW_POS 0 0
   $*********************************************      rotating
   &SET INC = 10
   &LOOP I %INC% 60   %INC%
      NEW_POS 0 -%INC -POINT *J405
   $*********************************************      lifting
   &LOOP I 5 10 5
      NEW_POS %I 0  -POINT *J405
   $*********************************************      rotating again
   &LOOP I 5 20 5
      NEW_POS 0 -%I -RY 85  -POINT *J405
      &EXIT %DONE
   $*********************************************      release lower slng
   NEW_POS 0 0  -POINT *J405
   $*********************************************      lower to mudline
   &LOOP I 2 18 2
      NEW_POS -%I 0 -BOT 138+2 -POINT *j405
      &EXIT %DONE
We begin by initializing the "event counter" J and setting the subtitle message, "STIT". Then, we write a message to the command channel. The command &CUTYPE centers and underlines the message "INITIAL POSITION" on the command channel. In our case, the command channel is the screen and the message can be reviewed in the log file. You have probably noticed that we leave many messages to ourselves, and are probably wondering why we feel such a need. So far we have left messages telling us where points are, the current event number, the hook load, and now we have left a messages about the initial position and for the last message we have also included it as part of the subtitle. We usually run our analyses as batch jobs. This means that we start the analysis in one window and continue with other pressing issues in other windows. While the job is running, we periodically look at what is going on, so these messages let us know the progress of the analysis and give us an indication of the results. The subtitle will make the output easier to navigate through. These messages do not add any value to the answers themselves, but they do enable you to find errors in your procedure at an early stage.

Each of the above block is essentially the same:

  • The subtitle variable, STIT, is set
  • A message is written,
  • Normally there is a loop,
  • Within the loop, NEW_POS is called to compute a new position.
The major differences are the number of times the loop is executed and what is changed by the move. There are two exceptions. First, during "ROTATING AGAIN" we have the command &DESCRIBE BODY -IGNORE RZ. Here, we found that MOSES had trouble finding equilibrium within tolerance, so we helped it by ignoring yaw, a degree of freedom we are not interested in. At the bottom of this section, the ignore is "turned off" with &DESCRIBE BODY -IGNORE . The other thing is that at the stage "RELEASE LOWERING SLING", we have the command &CONNECTOR LS@ -INACTIVE which actually releases the sling.

While quite simple, the real trick here are the increments and the number of time each loop is executed. This was done by trial and error!

Post processing of the first rotation, the lifting, the second rotation, releasing of the lowering slings, and lowering to the mudline is done via the following:

   $*********************************************      upend post
The macro POSTPRO was seen earlier in the first lowering process. With this one command, we have created some views, report trajectories, report connector forces, and connector force magnitudes.

A structural analysis of selected events is also performed. This analysis is almost identical to that discussed with the up_lowr example. If you need to review it, Click here. The only real difference is in the post-processing where beam and joint code checks are computed.

   $*********************************************      structural post
                 -STANDARD 1 1e10 0 1 -CODE API
                 -STANDARD 1 1e10 0 1

The BEAM command with a type of CODE instructs the program to report the code check for beams. Again the options -CLASS and -LOAD tell the program to only report the restraints for data fitting the selector criteria set up for :CLASS and :LOAD. The option -STANDARD tells the program to report the results for the maximum unity ratio over all selected load cases for each member selected. The numbers following the command specify a range. The numbers can be separated into sets of two, a lower number and a top number. These numbers tell the program to separate the reports by the limits. In this case there will be a report for unity values between 1 and 1e10, and a separate report for values between 0 and 1.

The JOINT command with a type of CODE instructs the program to report the joint code check reports. These checks are done according to API-RP2A. The options in this command specify the same action as those in the BEAM command.