Marine Engineering Specialists -- Bentley Systems has acquired Ultramarine's MOSES Software [ Press Release ]
Bent Rollup
This is a sample using the macro ROLLUP which is provided in the tools directory. It simulates the rollup of a bent of a jacket.

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 example is very simple, we take the most basic of frames and roll it from horizontal to vertical. In order to better understand the command file a basic understanding of the data file is necessary, therefore, the data file is discussed before the command file.

The Data File:

In the command file we will be using the macro ROLLUP. We make the macro available for execution with the following command in the data file.
   $
   $*********************************************      read macro
   $
   USE_MAC ROLLUP
The command USE_MAC is an internal macro. The program will search for the specified macro starting with the current working directory and including the tools directory among others. The macro ROLLUP is located in the tools directory along with documentation.

The rest of data file contains the description of a body named ROLL. The program is told that a body description follows with the following command.

   $
   $*********************************************      bent model
   $
   &DESCRIBE BODY ROLL
Before describing any aspects of the body we set the model defaults.
   &MODEL_DEF -USE @ -NUSE #BUOY
The options used with the above command tell the program to which intrinsic load sets to use. The first option tell the program to use all the intrinsic load sets (#DEAD, #TEMP, #DRAG, #WIND, #AMASS, and #BUOY). The second option tells the program not to use the intrinsic load #BUOY. The reason for using both options here is that there is much less typing to do by first having all the intrinsic load sets turned on and then turning one off in comparison to typing all the intrinsic load sets which are to be turned on. You can see that typing in one word is prone to much less errors in comparison to typing in 5 words.

The model definition we have here starts with the node definition.

   *A 0 -10 50
   *B 0  10 50
   *E 0 -20  0
   *F 0  20  0
   *C 25 -ref *A *E
   *D 25 -ref *B *F
   *G -ref *A *F *B *E
Here we have used three node definition types. The first three nodes *A, *B, *E, and *F are defined by their location in the body coordinate system. Nodes *C and *D are defined by reference nodes. *C is 25 feet from *A measured in a line from node *A to node *E. A similar definition is used for node *D. Node *G is defined by the intersection of the line joining *A and *F and the line joining *B and *E.

Defining the nodes is just one part of the model definition, we also need to define the member properties that make up the frame and then define the members themselves. The member properties are defined in the following.

   $
   ~LEG   TUBE 52 1.0
   ~CROSS TUBE 24 1.0
   ~BRACE TUBE 18 0.75
For this basic frame three classes are needed. All members are tubular. The legs, defined with class ~LEG, have an outer diameter of 52 inches and a thickness of 1 inch, the cross braces, defined with class ~CROSS, have an outer diameter of 24 inches and a thickness of 1 inch and the horizontal braces, defined with class ~BRACE, have an outer diameter of 18 inches and a thickness of 0.75 inches.

The members are defined with the command BEAM, as follows.

   $
   BEAM ~LEG *A *C *E
   BEAM ~LEG *B *D *F
   BEAM ~BRACE *A *B
   BEAM ~BRACE *E *F
   BEAM ~CROSS *A *G *E
   BEAM ~CROSS *B *G *F
The members are defined with the class and the nodes they connect. This concludes the model definition. Although this is a very basic frame model you should should first get a picture of what it will look like before you proceed to the discussion of the command file.

The Command File:

The command file for this sample is really straight forward. After reading in the model we call the macro ROLLUP and then we perform the structural analysis. The documentation of the General Purpose Macros includes documentation for the macro ROLLUP. The following command shows how it is used for a simple frame.
   $
   $*********************************************      Roll up
   $
   ROLLUP ROLL 10 -SUPPORT *A *E -CRANE *B,15 *F,100 -AP_F *D,5,1,59
The macro is going to take the part named ROLL and roll it up at 10 degree increments. The frame is supported in the fabrication yard during the roll up are nodes *A and *E. The maximum load a crane can apply during the roll up at node *B is 15 kips and for node *F is 100 kips. The macro iterates to find the required crane load at each roll up angle analyzed, such that the maximum allowable crane load is not exceeded and the desired angle is obtained. The applied force during the roll up is specified for node *D as 5 kips in the vertical direction and 1 kip in the horizontal direction. The angle at which these forces become active is 59 degrees.

Given the above information the macro does its job. You will see much of the work it is doing as it scrolls by the screen. The information that scrolls by is: the current roll angle, the changes to the connector attachments and lengths, the system configuration, the forces on the part ROLL, and the forces on the connectors. While it is working it also creates an event for each roll angle. These events are what is analyzed in the following structural analysis.

   $
   $*********************************************      Structural Analysis
   $
   STRUCTURE
      &LOOP ENAME (%ELIST%)
      LCASE -PROCES P_%ENAME% %ENAME%
      &ENDLOOP
      &TYPE SOLVING
      SSOLVE -NONLINEAR
   END
All structural analysis is performed with the MOSES Structural Solution menu which is entered via the command STRUCTURE. One of the reasons for making an event at each roll angle is to perform a structural analysis at each roll angle. The command LCASE creates a load case. However, we have 8 load cases we want to create and the above set of commands only contains one entry with the command LCASE. The above commands contain a loop which solves our problem. The loop begins with the command &LOOP and ends with the command &ENDLOOP. Each time through the loop the variable ENAME changes value according to the list provided by the variable ELIST. The obvious question here is where did the variable ELIST come from and how are we so sure that it contains the event list that we are looking for? The variable ELIST is created by the macro ROLLUP and contains a list of the events. Most of the macros that come with the software are designed with an end purpose in mind. When this macro was written it was the intention of the author that its results would be used for structural analysis. The macros are also designed for minimum typing, in this case the variable ELIST saves us lots of typing because we do not have to type the command LCASE for every event ROLLUP created. This is also helpful because we can increase or decrease the angle increment used in the macro ROLLUP and not have to worry that a load case was omitted.

A message reading "SOLVING" is typed to the screen before we begin solving for the structural solution. The command SSOLVE is the structural solver. Here we have used the option -NONLINEAR which tells the program to reduce the nodes which are connected to nonlinear elements, and the nonlinearities will be resolved in solving the residual model. The command END exits us from the MOSES Structural Solution menu.

The next block of commands creates reports based the structural solution just performed.

   $
   $*********************************************      Structural Reports
   $
   STRPOST
      JOINT DISPLACEMENT
      RESTRAINT
      BEAM_POST CODE
   END
The command STRPOST enters the Structural Post-Processing menu and the command END exits the menu. The three commands between these generate the reports. Reports of the joint displacements, restraint loads, restraint envelope, and beam code check are generated. Since we did not use any options we get the joint displacement and the restraint report for each load case. For the beam code check we get the maximum unity ratio over all the load cases for each member.