.. _conditions-mesh:

*************************
Initial Mesh Modification
*************************

.. code-block:: sierrainput

   BEGIN INITIAL MESH MODIFICATION
    BLOCK = <string list>block_name
    ASSEMBLY = <string list>assembly_name
    INCLUDE ALL BLOCKS
    REMOVE BLOCK = <string list>block_name
    ROTATE ANGLE <real>angle
       ABOUT ORIGIN <real>Ox <real>Oy <real>Oz
       DIRECTION <real>Dx <real>Dy <real>Dz
     MOVE X <real>Mx  Y <real>My  Y <real>Mz
 
     ROTATE BLOCK <string list>block_names 
       ANGLE <real>angle
       ABOUT ORIGIN <real>Ox <real>Oy <real>Oz
       DIRECTION <real>Dx <real>Dy <real>Dz
     ROTATE ASSEMBLY <string list>assembly_names 
       ANGLE <real>angle
       ABOUT ORIGIN <real>Ox <real>Oy <real>Oz
       DIRECTION <real>Dx <real>Dy <real>Dz
     MOVE BLOCK <string list>block_names
       X <real>Mx  Y <real>My  Y <real>Mz
     MOVE ASSEMBLY <string list>assembly_names
       X <real>Mx  Y <real>My  Y <real>Mz
     APPLY AFTER RESTART = YES|NO (NO)
   END

A handful of transformations can be applied to the initial mesh from within the input deck. These transformations happen before any other operations being performed such as contact overlap removal or evaluating initial conditions. Initial mesh modification will only affect the initial mesh read into the file and ignore anything created during the run.   

The ``ROTATE`` command will rotate the blocks set by ``INCLUDE ALL BLOCKS`` or ``BLOCK``, or assemblies of blocks set by ``ASSEMBLY``. The rotation of these blocks is defined by a rotation axis and angle of rotation about that axis. The origin and direction of the rotation axis are defined by the ``ABOUT ORIGIN`` and ``DIRECTION`` commands, respectively. The ``ANGLE`` command sets the rotation angle, in degrees, by following the right-hand rule.

The ``MOVE`` command will translate the blocks set by ``INCLUDE ALL BLOCKS`` or ``BLOCK``, or assemblies of blocks set by ``ASSEMBLY`` with the specified ``X``, ``Y``, and ``Z`` translation vector.

The ``ROTATE BLOCK`` command will rotate the named set of blocks, ``block_names``, while the ``ROTATE ASSEMBLY`` command will rotate the named set of assemblies of blocks, ``assembly_names``. The rotation of these blocks is defined by a rotation axis and angle of rotation about that axis. The origin and direction of the rotation axis are defined by the ``ABOUT ORIGIN`` and ``DIRECTION`` commands, respectively. The ``ANGLE`` command sets the rotation angle, in degrees, by following the right-hand rule.

The ``MOVE BLOCK`` or ``MOVE ASSEMBLY`` command will translate the named set of blocks or set of assemblies of blocks with the specified ``X``, ``Y``, and ``Z`` translation vector.

The syntax and behavior of the mesh modification commands mimic those in Cubit. The defined transformations will be evaluated in order. Thus moving a block then rotating it about an axis will give a different result from rotating the block first then moving it.

The ``APPLY AFTER RESTART`` command is used to specify whether Initial Mesh Modification should be applied after restart or not. A value of ``YES`` may be used to obtain legacy behavior, though most workflows should not need this option.

.. warning::

   Initial Mesh Modification can't be applied directly to the rigid body block. One option to get around this issue is to set all of the nodes in the block to a rigid  body then move the block. This will allow Initial Mesh Modification to apply the movement to the block like normal while still adding the nodes to a rigid body.
