The basic ingredients for performing a simulation are bodies. For simulation purposes, bodies are considered rigid, and composed of parts. A part is the smallest entity upon which a structural analysis can be performed. Bodies are connected by parts which contain special elements called connectors. In essence, a part is simply a named portion of the model.

All properties of the system are described by the attributes of the parts. In other words, every attribute of the system must be an attribute of some part of the system. Thus, everything except bodies belong to some part.

In MOSES, each body, and each part will have a separate coordinate system associated with it. Since MOSES can consider bodies which move in space, we also employ a global coordinate system. The global system is fixed in time, and is used to locate positions in space. Its origin is arbitrarily located on the water surface, and its Z axis points upward.

The part coordinate system is used to define the geometry of a part. In other words,

- The location of the points,
- The load attributes applied to the part, and
- The resulting structural displacements of the elements.

Thus, the part system is used in defining the model and in the definition of the structural deflections.

The body system is used for simulations. In most cases, the body system will be identical to the part system of the part which has the same name as the body. The axes of the body system are parallel to the global system when roll, yaw, and pitch are zero. The orientation of the body system defines the orientation of the body by three Euler angles, yaw, followed by a pitch, followed by a roll. An illustration of the global and part coordinate system along with a jacket and vessel body system during a launch is shown in Figure 4.

To distinguish between different bodies and parts, a block concept is used; i.e., all of the data for a part and body is defined contiguously in the input. One
defines the different parts and bodies by **&DESCRIBE** commands. All of the data which follows one of these commands will be associated with this body or part until
another **&DESCRIBE** command is encountered. This command also allows the user to alter the attributes of the body as the analysis proceeds. The format of this command
is:

&DESCRIBE BODY, BODY_NAME, -OPTIONS

where the available options are:

-IGNORE, DOF(1), DOF(2), .....-GEN_DOF, MODE_SEL(1), MODE_SEL(2), ....-S_DAMPING, CFRACTION-SECTION, EI, X(1), SM(1), ....., X(n), SM(n)-LOCATION, X(1), X(2), ......-DMARK, DM_NAME, *DPT(1), *DPT(2)-D_DMARK, :DM_NAME(1), :DM_NAME(2), ......-PR_NAME, PR_NAME-MD_NAME, MD_NAME-MD_FORCE, MD_FORCE, MD_RADIATION, MD_CORIOLIS-MD_PHASE, MD_PHASE-FM_MORISON, FM_FACTOR-SPE_MULTIPLIER, SPEMUL-SP_ORIENT, VX, VY, VZ, HX, HY, HZ-SP_HEIGHT, X, Y, Z-DT_CONVOLUTION, DT_CONV-FACT_CONVOLUTION, CONV_FACTOR-PERI_USE, PER-WAVE_RUNUP, YES/NO

To ease the difficulty of defining a model, whenever a body is defined, a part with the same name is automatically defined. Any attribute defined before a part is
specifically defined becomes the property of the "body" part. *NOTICE* that since everything must belong to some part of some body, a **&DESCRIBE BODY** should be at the
beginning of each set of data.

Normally, all bodies have six degrees of freedom. Sometimes, one wants to "ignore" some of these degrees of freedom. This is accomplished with the **-IGNORE** option. Here, DOF(i) is the name of the degree of freedom to be ignored, and must be chosen from the list **X**, **Y**, **Z**, **RX**, **RY**, and **RZ**. When a
degree of freedom is ignored, the force in this degree of freedom is set to zero, and the inertia is set to a very large number.

Normally, bodies have six degrees of freedom. The option **-GEN_DOF**, however, allows one to use previously computed vibration modes as generalized
degrees of freedom for a body. For a discussion on computing modes for a body, see the section on Extracting Modes. Here, MODE_SEL(i) are selectors
for the mode numbers one wishes to use. MODE_SEL(i) can be a single number which selects that mode number, or a pair of numbers A:B which selects all modes from A to
B. Once a body has more that 6 degrees of freedom, some measure of its deformation and the deformation inertia is accounted for in any equilibrium, time domain, or
frequency domain analysis. Thus, this is an excellent way to study the effect of flexibility on the results. To the user, however, the number of degrees of freedom
make no difference in how to accomplish various tasks. The only effect is the computer resources required. The **-S_DAMPING** option defines the modal
damping which will be used for the generalized degrees of freedom. Here, CFRACTION is the fraction of critical damping to be used. If this option is omitted, .01 will
be used.

Two options of **&DESCRIBE BODY** serve to override defaults when computing longitudinal strength. The **-SECTION** option is used to define the "section
properties". Here, EI is the stiffness of the body. The X(i)s are the X locations along the body where one wishes to compute longitudinal strength results, and SM(i)
is the body section modulus at X(i). If only a single location is specified, then MOSES will redefine this data so that results are computed at each station, and the
section modulus will be constant along the length of the body. For SM the units will be either ft**3 or meters**3, and for EI, force-ft**2 or force-meters**2. If one
simply wants to define the locations at which the results are reported, he can use the **-LOCATION** command.

The option **-DMARK** is used to define draft marks and **-D_DMARK** is used to delete draft marks. Draft marks are rays along which one
measures draft. Each mark is defined by two points. The first point is the "origin" of the draft mark and the second is used to define the direction of the mark.
Draft is the distance along this ray from the first point to where the waterplane intersects the line. Here, DM_NAME is a name given to the draft mark, *DPT(1) a
point defining the origin of the mark, and *DPT(2) is a point defining the direction of the mark. On should use a -DMARK option for each draft mark defined. When
deleting marks, :DM_NAME(i) are selectors which select the marks to delete.

The next two options: **-PR_NAME** and **-MD_NAME**, allow one to change the pressure packet name and the drift packet name associated
with the body. Here, PR_NAME and MD_NAME are the new pressure or mean drift names. In most cases, the mean drift database is created as a consequence of creating the
pressure database, and a discussion of the mean forces can be found in the section of the HYDRODYNAMICS MENU and in the subsection on mean drift.

The next three options allow one to change the multipliers used with the mean drift force. The **-MD_FORCE** option defines three scale factors,
MD_FORCE, MD_RADIATION, and MD_CORIOLIS which are used in computing the total mean drift force. The last two of these are multipliers of the radiation and Coriolis
contributions to the mean force as they are added to the diffraction contribution. The MD_FORCE factor multiplies the total mean force before it is accumulated. The
current response operators for the current process are used when computing the radiation and Coriolis contributions. Finally, the **-MD_PHASE** defines
a phase angle (deg.) of the wave drift force in the frequency domain. Here, each drift force component will have a phase, PHASE, relative to the wave crest being at
the origin. The default for these options is set with **&DEFAULT**.

The next two options of **&DESCRIBE BODY** deal with viscous damping, and both of them override defaults set with **&DEFAULT**. The **-FM_MORISON** option
defines a factor which will be multiplied by the computed viscous force to yield an applied viscous force in the frequency domain. The option **-SPE_MULTIPLIER** defines the spectral linearization multiplier. When nonlinear quantities are linearized with a spectral linearization in the
frequency domain, the RMS of the velocity is multiplied by the factor SPEMUL and used in computing a constant drag coefficient.

When performing a simulation in the Static Process Menu, one needs to define two vectors which are used to measure the "roll and pitch" angles and a point which is
used to measure height. This is accomplished with the two options **-SP_ORIENT** and **-SP_HEIGHT**. All of these quantities used with
these options are defined in the part system of the body. The height used to terminate a lift is defined by X, Y, and Z. The pitch angle is defined as angle formed by
the vector VX, VY, and VZ with the waterplane, and the roll angle is the angle formed by the vector HX, HY, and HZ with the waterplane. Here, VX, VY, and VZ are the
components of a vector in the part system which will be vertical when the jacket is in the installed condition. If these options are omitted, the values defined with
the same name on an **&DEFAULT** command will be used.

The last four options provide the user ways in which to "tweak" the hydrodynamic data to suit his purposes. All these options use as defaults values defined with an
option of the same name on an **&DEFAULT** command. The first three options control the way the frequency dependent nature of the added mass and damping are considered in
the time domain. As described in the Hydrodynamics section, mathematically, this results in a convolution. This convolution is, however, often difficult to deal with
numerically. One of the leading causes of numerical instability is a badly behaved convolution. In fact, with a convolution, it is possible to take too small a time
step! There is a limit to how much velocity history can be stored. For extremely small time steps, this history may not be long enough to adequately describe the
damping. The **-DT_CONVOLUTION** option defines the time increment at which the convolution will be integrated. This must be equal or greater
than the time step at which the time domain is computed. If you use **TIME_STEP** for DT_CONV, then the convolution will be computed at the time steps used to integrate
the equations of motion otherwise it will be computed for times steps of DT_CONV. This option allows one to use a reasonable time step (around 1/4 second) to compute
the convolution and a smaller one to integrate the equations of motion which ameliorate the above problem. An alternative way of dealing with this problem is by using
the last two options. The **-FACT_CONVOLUTION** option scales the kernel of the convolution by CONV_FACTOR before it is applied. If CONV_FACTOR
is zero, the convolution will not be added, and if CONV_FACTOR is one, all of the convolution will be added. The **-PERI_USE** option allows one to
replace the convolution terms in the equations of motion with single added mass and damping matrices. The matrices used will be the frequency domain matrices at the
specified period, PER. This eliminates any numerical problems with the convolution. The defaults here CONV_FACTOR = 1 and PER = 0, i.e. use all of the convolution in
the time domain.

In the time domain, the buoyancy is computed "correctly" at each time step. Since the frequency domain forces already include the effects of the wave elevation, this
buoyancy is computed assuming that the water surface is flat. If **-WAVE_RUNUP** is used with a YES/NO of **YES**, then a different algorithm is used.
Here, the water surface is assumed to be adequately described by the incident potential and the "correct" Froude-Krylov force computed. When this option is used, the
Froude-Krylov force is not included in the frequency domain forces applied.

The string function which returns data for bodies is:

&BODY(ACTION, BODY_NAME, -OPTION)

Here, BODY_NAME is the name of the body for which data is desired and ACTION must be either: **CURRENT**, **E_NODES**, **P_NAME**, **EXTREMES**, **DRAFT**, **LOCATION**, **VELOCITY**,
**MXSUBMERGENCE**, **BOTCLEARANCE**, **NWT_DOWN**, **MIN_NWT_DOWN**, **WT_DOWN**, **MIN_WT_DOWN**, **E_PIECES**, **I_PIECES**, **MAX_BUOYANCY**, **MAX_CB**, **DISPLACE**, **CB**, **GM**, **G_ROLL**, **I_VECTOR**, **F_WEIGHT**,
**F_CONTENTS**, **F_BUOYANCY** **F_WIND**, **F_V_DRAG**, **F_WAVE**, **F_SLAM**, **F_R_DRAG**, **F_CORIOLIS**, **F_W_DRIFT**, **F_DEFORMATION**, **F_EXTRA**, **F_APPLIED**, **F_INERTIA**, **F_AINERTIA**, **F_CINERTIA**,
**F_FLEX_CONNECTORS**, **F_RIGID_CONNECTORS**, **F_TOTAL** **B_CG**, **B_WEIGHT**, **B_RADII**, **B_MATRIX**, **A_CG**, **A_WEIGHT**, **A_RADII**, **A_MATRIX**, **D_CG**, **D_WEIGHT**, **D_RADII**, or **D_MATRIX**. The action
**CURRENT** is special in that it should have no other input; i.e. no BODY_NAME and no -OPTIONS. It returns the name of current body. All other action need a body name.
If this name is omitted, the current body will be used. Thus if your model contains only a single body the name may be safely omitted.

The action **E_NODES** returns the names of the extreme nodes for the body, and **P_NAMES** returns the names of the parts in the body. The action **EXTREMES** returns the
length, width, and height of a body where these quantities are measured along the body X, Y, and Z axes respectively. The action **DRAFT**, the reading of the draft marks
will be reported, while the actions **LOCATION**, **VELOCITY**, **MXSUBMERGENCE**, and **BOTCLEAR**, return the requested data on the location of the body. **WT_DOWN** and **NWT_DOWN** will
return a list of the down-flooding points of the specified type , and **MIN_WT_DOWN** and **MIN_NWT_DOWN** return the minimum height of the points about the water.

The actions **E_PIECES** and **I_PIECES** return a list of the external or internal pieces in the body. The actions **MAX_BUOYANCY** and **MAX_CB** return the non-compartment
buoyancy and its center when the body is completely submerged, while the actions actions **DISPLACE**, **CB** and **GM** return the current value of these things. For the actions
**CB**, **MAX_CB**, **LOCATION**, and **VELOCITY** the option **-GLOBAL** can be used to change the returned data from being in the body system to being in the global system. The **G_ROLL**
returns an angle which is the angle of inclination of the body from the vertical. More precisely, if v is a vertical vector represented in the body system, then
G_ROLL is the arc tangent of the sqrt(v(1)*v(1) + v(2)*v(2)) / v(3). The **I_VECTOR** returns a vector which, if a moment is applied in this direction, will cause the
inclination to increase, or I_VECTOR = [ v(1), v(2), 0 ]/sqrt(v(1)*v(1)+v(2)*v(2)).

The actions which begin with a **F_** return forces acting on the body. The data following the **_** specifies the type of load which will be returned. The meaning of these
forces can be found in the section on FORCES.

If no option is specified, then the results are in the body system. Alternately, one can specify **-GLOBAL** to return the values in the global system.

The remainder of the actions deal with the weight of the body. Those beginning with a **B** are applicable to the "basic" weight of the body, those beginning with an **A** to
the "apparent" weight of the body (basic weight plus weight of contents), while those beginning with a **D** deal with the "define" weight for the body. What follows the
**_** define the type of data returned: WEIGHT for the weight, CG for the centroid of the weight, radii of gyration for RADII, and MATRIX for the 6X6 weight matrix (mass
matrix divided by g).

Parts are defined similarly to bodies. In particular, the command to describe a part is:

&DESCRIBE PART, PART_NAME, PART_TYPE, -OPTIONS

and the available options are:

-MOVE, NX, NY, NZ, NRX, NRY, NRZ

or

-MOVE, NX, NY, NZ, *PT(1), *PT(2), *PT(3), *PT(4)

Here, PART_NAME is the name to be given to the part, and PART_TYPE is the part type. The values one can use for PART_TYPE are somewhat arbitrary, but the two types of
**JACKET** and **PCONNECT** have special significance. The part type, **JACKET**, is used to denote the portion of the system which will be treated differently when the special
transportation facilities of MOSES are employed. To avoid confusion, elements which connect parts (elements which are connected to nodes in different parts) must
belong to a part with a type of **PCONNECT**. Thus, the only elements which can span parts are connectors or **PCONNECT**ors. A **PCONNECT** part should not have any nodes which
belong to it. There is a special part, **GROUND**, which does not belong to any body, and it is in this part that elements which connect bodies reside. These elements
which are called connectors are quite important, since they define both the boundary conditions for a stress analysis, and the constraints on the bodies for a
simulation.

In most cases, the body system of a body will be coincident with the part system of all parts belonging to the body. When certain types of connections (launch legs)
are defined, however, the body system will be altered as described later. Also, the user can alter a part system using the **-MOVE** option. Here, NX, NY,
and NZ are the location (feet or meters) of the origin of the part system with respect to the reference, and NRX, NRY, and NRZ are a set of Euler angles which defines
the new orientation of the part system. Alternately, if the second form of the command is used, the four points define the orientation of the part system. Here, the
part X axis will be from the midpoint of the segment connecting *PT(4) and *PT(2) to the midpoint of the segment connecting *PT(3) and *PT(1). The part Z axis is
defined by the cross product of the X axis with the vector from *PT(4) to *PT(2), and the Y axis is given by the right hand rule. This option can be used both in
defining a model, and when editing one, but one can move a "body part" (a part with the same name as a body) *only* while editing. Moving a body part is equivalent to
changing the orientation of all of the parts of the body. When one is moving a part, the above data defines the part system with respect to the "body part" system and
when moving a "body part", it defines the body part with respect to the body system. To orient the part system, suppose that the part and the reference systems are
aligned, and that the part system is rotated an amount NRZ about the reference Z axis. Next, rotate the part system about the current part Y axis, and amount NRY, and
finally rotate an amount NRX about the new part X axis.

The string function:

&PART(ACTION, PART_NAME, -OPTION)

returns the current data about a part. Here, PART_NAME is the name of the part for which data is desired and ACTION must be either: **CURRENT**, **MAX_CB**, **MAX_BUOYANCY**, **CG**,
**WEIGHT**, **RADII**, or **E_NODES**. The action **CURRENT** returns the name of current part, while the **WEIGHT**, **CG**, and **RADII** actions simply return the current weight, CG, and
radii of gyration of the part. These are the "dry" values of the part, without any compartment contents. The **MAX_BUOYANCY** and **MAX_CB** return the non-compartment
buoyancy its center when the part is totally submerged. If no option is specified, then the results are in the part system. Alternately, one can specify **-BODY** or **-GLOBAL** to return the values in another system. The action **E_NODES** returns the names of the extreme nodes for the part.

After a set of bodies have been defined, it is necessary to place them in space as the point of departure for a simulation. This is accomplished via the command:

&INSTATE, -OPTIONS

where the options are:

-LOCATE, NAME, X, Y, Z, RX, RY, RZ-MOVE, NAME, DX, DY, DZ, DRX, DRY, DRZ-CONDITION, NAME, DRAFT, ROLL, TRIM-POINT, *PNT(1), H(1), *PNT(2), H(2), .... *PNT(n), H(n)-DRAFT, DMARK(1), D(1), DMARK(2), D(2), .... DMARK(n), D(n)-GUESS, *NODE(1), *NODE(2), *NODE(3)-VELOCITY, NAME, VX, VY, VZ, VRX, VRY, VRZ-SL_SET-LINES, :ACTIVE, :LSEL(1), TEN(1), :LSEL(2), TEN(2), ......-EVENT, EVE_NUM-PREVIOUS-C_FORCE, FLAG

The uses of the option keywords are: **-LOCATE** positions a body in space absolutely; X, Y, and Z are the global coordinates of a point on the body, and
RX, RY, and RZ are the new Euler angles. The **-MOVE** option moves a body relative to its last known position; in this case, the parameters are changes in
position and orientation. **-CONDITION** is the same as **-LOCATE** except that only 3 degrees of freedom are necessary. Here, NAME is
the name of either a body or a report point. If a point name is specified, then the position specified will be for that point. If a body is specified, then the
location will be the location of the origin of the body. All of the units for these options are feet or meters and degrees. The three options **-POINT**, **-DRAFT**, and **-GUESS** all set the body according to the positions of a set of points. With the **-GUESS** option, MOSES will change the
orientation of the body so that the three nodes *NODE(1), *NODE(2), and *NODE(3) will lie in the waterplane. Here, the three nodes cannot be colinear, and one cannot
rotate a body ninety degrees. With **-DRAFT**, one specifies a set of draft marks and the draft readings at the marks and with **-POINTS**,
one specifies a set of points and the height of these points above the water. MOSES then finds the draft, trim, and heel of the body that gives a "best fit" to the
data specified. The **-VELOCITY** option defines the initial velocities of a body. Here again, the velocities specified are for a point, a node, or the
origin of the body in ft/sec or m/sec and degrees/second.

In general, when rigid constraints have been defined between two bodies, it is necessary to locate only one of the bodies. If one attempts to specify both, he may have a difficult time in locating the various bodies without violating a constraint. In other words, if only one body is specified, MOSES will locate this body and locate the other bodies in such a way as to satisfy the constraints. Also, one may not give a body a yaw (RZ) after you have connected launchways to it.

Positioning a system of bodies with connections is not a trivial task. The next two options are designed to minimize this difficulty. With these options, not only is
the configuration of the system altered, but the lengths of some of the connectors are also changed. The objective is to have the system be in equilibrium. The **-SL_SET** option simply computes the proper length for the tip-hook element of each tip-hook set so that the lines have no slack in the specified
configuration. This will probably not be an equilibrium configuration, but it will be a good starting place for one.

The **-LINES** option instructs MOSES to alter the lengths of the flexible connectors which match :ACTIVE so the system will be as close to equilibrium as
possible. The additional data controls the operation of the algorithm so that the connectors which match :LSEL(i) are altered to make the resulting tension
(compression) in the connector "as close as possible" to that specified by TENS(i). For connectors which are not selected by any of the selectors, the algorithm will
attempt to make the tension as close as possible to the current tension. As mentioned above, the objective is an equilibrium configuration, but this cannot always be
achieved. In particular, "anchor lines" cannot be used to alter the vertical force on a body, so that if one has only anchor lines, then there is no guarantee that
the vertical forces will balance at the conclusion of the command. Likewise, if one has only "vertical" connectors, the horizontal forces may be out of balance.

The **-EVENT** option sets the initial configuration to be the one at event EVE_NUM of the current process, and **-PREVIOUS** is used to
replace the initial state with the "previous" one. Here, "previous" is the state existing before the last command which changed the state before **-EVENT** was issued.

Finally, the **-C_FORCE** option computes an "extra" force on each body which makes the specified configuration an equilibrium configuration. This
action occurs if FLAG is **COMPUTE**. If FLAG is **NO**, the extra force will be set to zero.

In addition to the weights which were defined for elements and load groups, MOSES employs an additional weight which can be applied to any part. This is called a "defined" weight and is controlled with the command:

&WEIGHT, -OPTIONS

where the available options are:

-COMPUTE, BODY_NAME, ZCG, KX, KY, KZ-DEFINE, PART_NAME, WEIGHT, XCG, YCG, ZCG, KX, KY, KZ-TOTAL, PART_NAME, WEIGHT, XCG, YCG, ZCG, KX, KY, KZ

The first of these options is restricted to bodies while the others can be used with parts. For the first option, all data given should be in the body coordinate
system of the body, BODY_NAME. For the others, all data should be in the part system of the part PART_NAME. The **-COMPUTE** option instructs MOSES to
compute the weight so that, in the initial condition, the gravitational force will be equal to the sum of the other forces. The local Z center of gravity of the
computed weight will be placed at the specified location (ZCG). Alternately, a **-DEFINE** option defines a load with the weight and center of gravity
specified. The option **-TOTAL** creates an additional weight so that the total weight, center, and radii of gyration of the part will be that specified.
In either case, the weight which is defined will have radii of gyration KX, KY, and KZ with respect to the point of application. Here the location of the cg and the
magnitude of the radii of gyration are to be interpreted in the Body System. If bending moments are computed, the load will be represented as a trapezoidal load
acting over the entire body length. By default the loads resulting from the defined weight will be distributed to all nodes in the body part of BODY_NAME or the part
PART_NAME.

As was implied above, while bodies are the basic ingredients of simulations, they have virtually no properties other than the parts which belong to them, and all of the physical properties of the bodies are inherited from their parts. This is quite important since one can move parts between bodies, create new bodies, etc. While it may seem to be of limited use, this is not really the case. Suppose that one wishes to investigate the behavior of a jacket throughout its installation. First, one may wish to examine the loadout where the only thing of interest is the jacket itself. Here, a single body of "jacket" is needed. Next, however, one wants to consider the transportation. Here, a new body composed of the two parts: jacket and the barge would be of interest. Finally, during launch, two bodies, the jacket and barge would be used. The activity of bodies and parts is controlled with the command:

&DESCRIBE ACTIVITY, -OPTION1, -OPTION2 :SEL(1), :SEL(2), ..

and the available options are **-BODY**, **-PART**, **-ACTIVE**, and **-INACTIVE**. Here, one first uses either **-BODY** or **-PART** to specify what type of entity will be changed. Next,
he specifies either **-ACTIVE** or **-INACTIVE** to specify the activity status. Any body (or part) selected after the second option will have its activity status set
according to the option. As many options as one wants can be used on a single command. When a body is set inactive, its parts are not set inactive. There is no reason
for this since only active bodies will be considered and this would make it more difficult to reactivate a body.

In addition to the above, the entire system can be redefined with the command:

&DESCRIBE SYSTEM,-BODY, BODY_NAME(1), PART(1), ..., PART(i), \-BODY, BODY_NAME(2), PART(1), ..., PART(i)

When this command is issued, all bodies and parts are set to inactive. Then the bodies named (BODY_NAME(1), ....) are either activated or defined, and the parts
specified after the BODY_NAME(i) and before the next **-BODY** are activated and associated with the body BODY_NAME(i).