.. _section_eng_geometry: Geometry ========== Complex geometry description is one of the main advantages of Monte Carlo programs over deterministic programs. Similar to most other Monte Carlo programs worldwide, RMC is compatible with CAD-based geometry and CSG geometry. CSG geometry utilizes a universe-based geometry system. RMC's CSG geometry description system includes three basic geometry description units; namely, Surface, Cell and Universe. Generally, a physical system is defined by multiple or single hierarchical universes, where each hierarchical universe comprises of a certain number of cells. In turn, these cells are defined by the intersection and union of surfaces (sense). RMC geometry input modules typically follow the format as shown below: .. code-block::none UNIVERSE 0 // Describes the uppermost level (universe) in the Universe module Cell … // Describes the first cell in the Universe unit Cell … // Describes the second cell in the Universe unit ... UNIVERSE 1 // Describes the Universe module used for filling ... SURFACE // Describes the surface module Surf ... // Describes the first surface Surf ... // Describes the second surface ... .. _section_eng_geometry_surface: Surface ------------------- Surfaces are the base unit for describing geometry in RMC. To account for the wide range of MCNP users, RMC utilizes the same surface definition method as MCNP. The definition of the Surface input option is: .. code-block:: none Surf {params} [bc = ] [Move = Mx My Mz] [Rotate =Cx'x Cx'y Cx'z Cy'x Cy'y Cy'z Cz'x Cz'y Cz'z ] [RotateAngle = \alpha \beta \gamma] [pair = ] [value=] [time=] where, - **Surf** is the keyword for the Surface input card. - **id** is the Surface ID. The number representing ID must be a positive integer and cannot be duplicated(or redefined). - **type** refers to the keyword representing the surface type,and **params** refers to the surface parameters required to fully describe the surface. :numref:`surftypes_table_eng` lists the different surface types and their corresponding surface equations and their parameters. - **bc** is the boundary condition applied to the surface. bc = 0(default)indicates a void boundary condition, bc = 1 indicates a total reflection boundary condition, bc = 2 indicates a white boundary condition,bc = 3 indicates a periodic boundary condition. - **Move** is the Surface translation vector. The expression of translational transformation is: .. math:: \mathbf{r'} = \mathbf{r} + \mathbf{m} where, :math:`\mathbf{r}=(r_x,r_y,r_z)` and :math:`\mathbf{r}=(r_x',r_y',r_z')` are the positional coordinates of any point in space before and after the transformation, while :math:`\mathbf{m}=(m_x,m_y,m_z)` represents the translational transformation vector. RMC supports two different input formats of rotational transformation matrix, which is **Rotate** and **RotateAngle** . - **Rotate** keyword is the first input format, where the parameters defining the rotation transformation matrix are directly provided In actuality, RMC requires the user to input the transposed matrix of the rotational transformation matrix :math:`\mathbf{R}^T`, whose parameters are defined as follows: Given a cartesian coordinate system :math:`(x,y,z)`, after the rotational transformation, a new coordinate system is obtained :math:`(x',y',z')`, where :math:`\mathbf{R}^T` can be expressed as .. math:: \mathbf{R}^T = \begin{bmatrix} C_{x'x} & C_{x'y} &C_{x'z} \\ C_{y'x} & C_{y'y} &C_{y'z} \\ C_{z'x} & C_{z'y} &C_{z'z} \end{bmatrix} where, :math:`C_{x'x}` represents the cosine of the angle between the :math:`x` and :math:`x'` axes, and so on. - **RotateAngle** keyword is the second input format, where the following three angles are provided, in the units of degrees: :math:`\alpha, \beta, \gamma` (referred to as pitch angle, yaw angle, and roll angle. Please refer to the definition of Euler angles for more details), whereby the program can automatically generate a rotation matrix. .. note:: When performing rotation and translation operations on a surface, the order is rotation first, followed by translation. .. note:: Note that the program does not support rotation for surfaces containing a torus (TX/TY/TZ), and the **Rotate** and **RotateAngle** keywords cannot be used simultaneously. .. important:: If using the **Rotate** and **RotateAngle** rotation and translation functions for RMC surfaces, the RMC Python module must be used for calculations. The program requires the Python module to perform surface rotation operations before modeling computations. For instructions on using RMC with Python, refer to :ref:`section_eng_run_exe` , **Python Invocation of RMC Execution** section for setup. - **pair** The second surface of a pair of surfaces used in the periodic boundary condition, where refers to the periodic surface paired to the primary surface. In addition, the periodic boundary condition has the following restrictions: - Under the periodic boundary condition, the surface type can only be a plane surface, such as P/ PX/ PY/ PZ - The periodic boundary condition can only be applied to the outermost surface, whereby one side of the surface with the periodic boundary condition applied must be attached to a Cell of zeroth importance - Paired surfaces must be parallel to each other, and the surface types must be the same as each other - The **value** input option and **time** input option are used in combination to describe the changes in the value of the final parameter with respect to time. The number of parameters defined in both input options are identical, indicating that when the time exceeds the final time parameter t_i, the corresponding value parameter will be v_i .. table:: Surface Types :name: surftypes_table_eng +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | Surface Type | Keyword | Description | Equation | Surface Equation Parameters| +=====================+=========+========================+================================================+============================+ | PLANE | **P** | General | :math:`Ax+By+Cz-D=0` |:math:`A,B,C,D` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **PX** | Parallel to x-axis | :math:`x-D=0` |:math:`D` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **PY** | Parallel to y-axis | :math:`y-D=0` |:math:`D` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **PZ** | Parallel to z-axis | :math:`z-D=0` |:math:`D` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | SPHERICAL | **SO** | Sphere center at origin| :math:`x^2+y^2+z^2-R^2=0` |:math:`R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **S** | General | :math:`(x-x_0)^2+(y-y_0)^2+(z-z_0)^2-R^2=0` |:math:`x_0,y_0,z_0,R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **SX** | Sphere center on x-axis| :math:`(x-x_0)^2+y^2+z^2-R^2=0` |:math:`x_0,R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **SY** | Sphere center on y-axis| :math:`x^2+(y-y_0)^2+z^2-R^2=0` |:math:`y_0,R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **SZ** | Sphere center on z-axis| :math:`x^2+y^2+(z-z_0)^2-R^2=0` |:math:`z_0,R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | CYLINDRICAL | **C/X** | Parallel to x-axis | :math:`(y-y_0)^2+(z-z_0)^2-R^2=0` |:math:`y_0,z_0,R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **C/Y** | Parallel to y-axis | :math:`(x-x_0)^2+(z-z_0)^2-R^2=0` |:math:`x_0,z_0,R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **C/Z** | Parallel to z-axis | :math:`(x-x_0)^2+(y-y_0)^2-R^2=0` |:math:`x_0,y_0,R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **CX** | Axis is along x-axis | :math:`y^2+z^2-R^2=0` |:math:`R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **CY** | Axis is along y-axis | :math:`x^2+z^2-R^2=0` |:math:`R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **CZ** | Axis is along z-axis | :math:`x^2+y^2-R^2=0` |:math:`R` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | CONICAL | **K/X** | Parallel to x-axis | :math:`\sqrt{(y-y_0)^2+(z-z_0)^2}=\pm t(x-x_0)`|:math:`x_0,y_0,z_0,t^2,\pm1`| +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **K/Y** | Parallel to y-axis | :math:`\sqrt{(x-x_0)^2+(z-z_0)^2}=\pm t(y-y_0)`|:math:`x_0,y_0,z_0,t^2,\pm1`| +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **K/Z** | Parallel to z-axis | :math:`\sqrt{(x-x_0)^2+(y-y_0)^2}=\pm t(z-z_0)`|:math:`x_0,y_0,z_0,t^2,\pm1`| +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **KX** | Axis is along x-axis | :math:`\sqrt{y^2+z^2}=\pm t(x-x_0)` |:math:`x_0,t^2,\pm1` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **KY** | Axis is along y-axis | :math:`\sqrt{x^2+z^2}=\pm t(y-y_0)` |:math:`y_0,t^2,\pm1` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **KZ** | Axis is along z-axis | :math:`\sqrt{x^2+y^2}=\pm t(z-z_0)` |:math:`z_0,t^2,\pm1` | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | ELLIPSOID/ | **SQ** | Parallel to x/y/z axis | :math:`A(x-x_0)^2+B(y-y_0)^2+C(z-z_0)^2 |:math:`A,B,C,D,E,F,G,x_0,y_0| | HYPERBOLOID/ | | | +2D(x-x_0)+2E(y-y_0)+2F(z-z_0)+G=0` |,z_0` | | PARABOLOID | | | | | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | CYLINDRICAL/ | **GQ** | Non-parallel to x/y/z | :math:`Ax^2+By^2+Cz^2+Dxy+Eyz+Fzx+Gx+Hy+Jz+K=0`|:math:`A,B,C,D,E,F,G,H,J,K` | | CONICAL/ | | axis | | | | ELLIPSOIDAL/ | | | | | | HYPERBOLOID/ | | | | | | PARABOLOID SURFACE | | | | | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | ELLIPTICAL/ | **TX** | Parallel to x-axis | :math:`(x-x_0)^2/B^2+ |:math:`x_0,y_0,z_0,A,B,C` | | CIRCULAR TORUS | | | (\sqrt{(y-y_0)^2+(z-z_0)^2}-A)^2/C^2-1=0` | | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **TY** | Parallel to y-axis | :math:`(y-y_0)^2/B^2+ |:math:`x_0,y_0,z_0,A,B,C` | | | | | (\sqrt{(x-x_0)^2+(z-z_0)^2}-A)^2/C^2-1=0` | | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ | | **TZ** | Parallel to z-axis | :math:`(z-z_0)^2/B^2+ |:math:`x_0,y_0,z_0,A,B,C` | | | | | (\sqrt{(x-x_0)^2+(y-y_0)^2}-A)^2/C^2-1=0` | | +---------------------+---------+------------------------+------------------------------------------------+----------------------------+ **Surface Rotation Example** .. code-block:: none // A plane perpendicular to the x-axis at x=50, multiplied by the identity rotation matrix, remains unchanged after rotation Surf 1 px 50 rotate=1 0 0 0 1 0 0 0 1 //A plane perpendicular to the x-axis at x=50, multiplied by a rotation matrix, rotated 90 degrees around the y-axis. Surf 2 px 50 rotate=0 0 1 0 1 0 -1 0 0 // A plane perpendicular to the y-axis at y=-50, rotated by 60 degrees pitch and 30 degrees yaw Surf 3 py -50 rotateangle = 60 30 0 .. _section_eng_geometry_macrobody: Macrobody (Enterprise Version Only) ------------------------------------------- While surfaces are the base unit for describing geometry in RMC, macrobody modelling can be used to replace surface modelling. The definition of the Macrobody input option is: .. code-block:: none Body {params} [Move = Mx My Mz] [Rotate =Cx'x Cx'y Cx'z Cy'x Cy'y Cy'z Cz'x Cz'y Cz'z ] [RotateAngle = \alpha \beta \gamma] where, - **Body** is the keyword for the Macrobody input card - **id** is the Macrobody ID. The ID is a positive, non-repeating integer. - **type** refers to the keyword representing the macrobody type,and **params** refers to the macrobody parameters required to fully describe the macrobody. :numref:`bodytypes_table_eng` lists the different macrobody types supported by RMC - **Move** is the macrobody's translation vector, and it follows the same definition as the surface translation in the previous section. - **Rotate** is the macrobody's rotation matrix, and it follows the same definition as the surface rotation in the previous section. - **RotateAngle** is the macrobody's rotation angle, and it follows the same definition as the surface rotation in the previous section. .. note:: When performing rotation and translation operations on macrobody, the order is rotation first, followed by translation. .. note:: Note that the program does not support rotation for macro-bodies containing a torus (Torus). .. important:: RMC's macrobody modeling function requires the RMC Python module for computation. For instructions on using RMC with Python module, refer to :ref:`section_eng_run_exe` , **Python Invocation of RMC Execution** section for setup. .. list-table:: Macrobody Types :name: bodytypes_table_eng :widths: 15 20 50 :header-rows: 1 * - Keyword - Description of Macrobody - Macrobody Parameters * - RPP - Cuboidal body in any direction; surfaces do not necessarily have to be parallel to either the x/y/z axes - :math:`X_min`, :math:`X_max` : The smallest and largest boundary surfaces perpendicular to the x-axis * - - - :math:`Y_min`, :math:`Y_max` : The smallest and largest boundary surfaces perpendicular to the y-axis * - - - :math:`Z_min`, :math:`Z_max` : The smallest and largest boundary surfaces perpendicular to the z-axis * - BOX - Cuboidal body in any direction; surfaces do not necessarily have to be parallel to either the x/y/z axes - :math:`V_x`, :math:`V_y`, :math:`V_z`: Coordinates of a vertice that belongs to the cuboid * - - - :math:`a1_x`, :math:`a1_y`, :math:`a1_z`: Vector from the specified vertex coordinates to the first edge of the cuboid * - - - :math:`a2_x`, :math:`a2_y`, :math:`a2_z`: Vector from the specified vertex coordinates to the second edge of the cuboid * - - - :math:`a3_x`, :math:`a3_y`, :math:`a3_z`: Vector from the specified vertex coordinates to the third edge of the cuboid * - SPH - Spherical body - :math:`V_x`, :math:`V_y`, :math:`V_z`: Center coordinates of the sphere * - - - :math:`r`: Sphere radius * - RCC - Cylindrical body - :math:`V_x`, :math:`V_y`, :math:`V_z`: Center coordinates of the bottom circular surface of the cylinder * - - - :math:`h_x`, :math:`h_y`, :math:`h_z`: Vector representing the height of the cylinder * - - - :math:`r`: Cylindrical radius * - RHP or HEX - Hexagonal prism - :math:`V_x`, :math:`V_y`, :math:`V_z`: Center coordinates of the bottom hexagonal surface of the hexagonal prism * - - - :math:`h_1`, :math:`h_2`, :math:`h_3`: Vector representing the height of the hexagonal prism * - - - :math:`r_1`, :math:`r_2`, :math:`r_3`: Vector from the specified center coordinates to the first edge of the hexagonal prism * - - - :math:`s_1`, :math:`s_2`, :math:`s_3`: Vector from the specified center coordinates to the second edge of the hexagonal prism * - - - :math:`t_1`, :math:`t_2`, :math:`t_3`: Vector from the specified center coordinates to the third edge of the hexagonal prism * - - - It should be noted that for a regular hexagonal prism, only one of the three vectors to the surface is required, that is, only the values for :math:`r_1`, :math:`r_2`, :math:`r_3` are required in the input option. * - REC - Elliptical cylinder - :math:`V_x`, :math:`V_y`, :math:`V_z`: Center coordinates of the bottom surface of the elliptical cylinder * - - - :math:`h_1`, :math:`h_2`, :math:`h_3`: Vector representing the cylindrical axes of the elliptical cylinder * - - - :math:`V1_x`, :math:`V1_y`, :math:`V1_z`: Vector representing the major axes of the ellipse * - - - :math:`V1_x`, :math:`V1_y`, :math:`V1_z`: Vector representing the minor axes of the ellipse. This vector is optional, and the user can also directly define the length of the minor axis. This is because the direction of the minor axis can be determined by the axial and major axis directions. * - TRC - Frustum (of cone) - :math:`V_x`, :math:`V_y`, :math:`V_z`: Center coordinates of the bottom surface of the frustum * - - - :math:`h_x`, :math:`h_y`, :math:`h_z`: Vector representing the axes of the cone * - - - :math:`r_1`: Radius of bottom surface of the frustum * - - - :math:`r_2`: Radius of top surface of the frustum. Note that :math:`r_1` > :math:`r_2` * - ELL - Ellipsoid - :math:`V1_x`, :math:`V1_y`, :math:`V1_z`: If :math:`r` > 0, the values represent the coordinates of the first focal point. If :math:`r` < 0, the values represent the coordinates of the ellipsoid center point * - - - :math:`V2_x`, :math:`V2_y`, :math:`V1_z`: If :math:`r` > 0, the values represent the coordinates of the second focal point. If :math:`r` < 0, the values represent the major semi-axial vector of the ellipsoid * - - - If :math:`r` > 0, :math:`r` represents the length of the major semi-axis. If :math:`r` < 0, :math:`r` represents the length of the minor semi-axis * - WED - Triangular prism - :math:`V_x`, :math:`V_y`, :math:`V_z`: Coordinates of a vertice that belongs to the bottom face of the prism :math:`V1_x`, :math:`V1_y`, :math:`V1_z`: Starting from the vertex defined by the top face, these values represent a vector representing the first edge of the bottom triangle. * - - - :math:`V1_x`, :math:`V1_y`, :math:`V1_z`: Starting from the vertex defined by the top face, these values represent a vector representing the first edge of the bottom triangle. :math:`h_x`, :math:`h_y`, :math:`h_z`: Axial vector of the triangular prism * - Torus - Torus - :math:`u`, :math:`v`, :math:`w`: Torus directional vector,divided into the :math:`x`, :math:`y`, and :math:`z` directions. :math:`V_x`, :math:`V_y`, :math:`V_z` represent the center coordinates of the torus in the radial direction. * - - - :math:`r_1`: Radius of torus (radial direction) :math:`r_2`: Radius of torus (cross-section) When :math:`r_1 < 2 * r_2`, to obtain the outer surface, the non-zero value in the directional vector is defined as 1, and to obtain the inner surface, the non-zero value in the directional vector is -1. * - SEC - Cylindrical sector - :math:`V_x`, :math:`V_y`, :math:`V_z`: Center coordinates of the bottom circular surface of the cylinder. :math:`h_x`, :math:`h_y`, :math:`h_z`: Vector representing the height of the cylinder. :math:`r_1`: Inner radius. :math:`r_2`: Outer radius. * - - - When the axial direction of the cylindrical sector is along the z-axis, :math:`theta` is expressed as the angle between the cylindrical sector and the positive x-axis. When the axial direction of the cylindrical sector is along the y-axis, :math:`theta` is expressed as the angle between the cylindrical sector and the positive z-axis. When the axial direction of the cylindrical sector is along the x-axis, :math:`theta` is expressed as the angle between the cylindrical sector and the positive y-axis. * - - - :math:`theta_1`: The angle between one side of the cylindrical sector and the coordinate axis. :math:`theta_2`: The angle between the other side of the cylindrical sector and the coordinate axis. :math:`theta_2 > theta_1`, and :math:`theta_2 - theta_1 < 180` degrees Note: The order of parameters in each macro body is the order of parameters as shown in the table above .. table:: Macrobody Surfaces :name: bodysurf_table_eng +------------------+------+-------------------------------------------------------------------------------------+ |Macrobody keyword |Serial|Description | +==================+======+=====================================================================================+ |RPP |1 |Plane at :math:`X_max` | +------------------+------+-------------------------------------------------------------------------------------+ | |2 |Plane at :math:`X_min` | +------------------+------+-------------------------------------------------------------------------------------+ | |3 |Plane at :math:`Y_max` | +------------------+------+-------------------------------------------------------------------------------------+ | |4 |Plane at :math:`Y_min` | +------------------+------+-------------------------------------------------------------------------------------+ | |5 |Plane at :math:`Z_max` | +------------------+------+-------------------------------------------------------------------------------------+ | |6 |Plane at :math:`Z_min` | +------------------+------+-------------------------------------------------------------------------------------+ |BOX |1 |Plane at the endpoint of the vectors :math:`a1_x`, :math:`a1_y`, :math:`a1_z` | +------------------+------+-------------------------------------------------------------------------------------+ | |2 |Plane at the startpoint of the vectors :math:`a1_x`, :math:`a1_y`, :math:`a1_z` | +------------------+------+-------------------------------------------------------------------------------------+ | |3 |Plane at the endpoint of the vectors :math:`a2_x`, :math:`a2_y`, :math:`a2_z` | +------------------+------+-------------------------------------------------------------------------------------+ | |4 |Plane at the startpoint of the vectors :math:`a2_x`, :math:`a2_y`, :math:`a2_z` | +------------------+------+-------------------------------------------------------------------------------------+ | |5 |Plane at the endpoint of the vectors :math:`a3_x`, :math:`a3_y`, :math:`a3_z` | +------------------+------+-------------------------------------------------------------------------------------+ | |6 |Plane at the startpoint of the vectors :math:`a3_x`, :math:`a3_y`, :math:`a3_z` | +------------------+------+-------------------------------------------------------------------------------------+ |SPH | |Regular surface | +------------------+------+-------------------------------------------------------------------------------------+ |RCC |1 |Cylindrical surface (circular) | +------------------+------+-------------------------------------------------------------------------------------+ | |2 |Top surface of cylinder | +------------------+------+-------------------------------------------------------------------------------------+ | |3 |Bottom surface of cylinder | +------------------+------+-------------------------------------------------------------------------------------+ |RHP or HEX |1 |Plane at the endpoint of the vectors :math:`r_1`, :math:`r_2`, :math:`r_3` | +------------------+------+-------------------------------------------------------------------------------------+ | |2 |Plane at the startpoint of the vectors :math:`r_1`, :math:`r_2`, :math:`r_3` | +------------------+------+-------------------------------------------------------------------------------------+ | |3 |Plane at the endpoint of the vectors :math:`s_1`, :math:`s_2`, :math:`s_3` | +------------------+------+-------------------------------------------------------------------------------------+ | |4 |Plane at the startpoint of the vectors :math:`s_1`, :math:`s_2`, :math:`s_3` | +------------------+------+-------------------------------------------------------------------------------------+ | |5 |Plane at the endpoint of the vectors :math:`t_1`, :math:`t_2`, :math:`t_3` | +------------------+------+-------------------------------------------------------------------------------------+ | |6 |Plane at the startpoint of the vectors :math:`t_1`, :math:`t_2`, :math:`t_3` | +------------------+------+-------------------------------------------------------------------------------------+ | |7 |Top surface of hexagonal prism | +------------------+------+-------------------------------------------------------------------------------------+ | |8 |Bottom surface of hexagonal prism | +------------------+------+-------------------------------------------------------------------------------------+ |REC |1 |Elliptical Cylindrical surface | +------------------+------+-------------------------------------------------------------------------------------+ | |2 |Top surface of elliptical cylinder | +------------------+------+-------------------------------------------------------------------------------------+ | |3 |Bottom surface of elliptical cylinder | +------------------+------+-------------------------------------------------------------------------------------+ |TRC |1 |Frustum surface | +------------------+------+-------------------------------------------------------------------------------------+ | |2 |Top surface of frustum | +------------------+------+-------------------------------------------------------------------------------------+ | |3 |Bottom surface of frustum | +------------------+------+-------------------------------------------------------------------------------------+ |ELL | |Regular surface | +------------------+------+-------------------------------------------------------------------------------------+ |WED |1 |Bevel surface that includes the top and bottom bevels | +------------------+------+-------------------------------------------------------------------------------------+ | |2 |Surface that includes vectors :math:`V_2` and :math:`V_3` | +------------------+------+-------------------------------------------------------------------------------------+ | |3 |Surface that includes vectors :math:`V_1` and :math:`V_3` | +------------------+------+-------------------------------------------------------------------------------------+ | |4 |Top surface of triangular prism | +------------------+------+-------------------------------------------------------------------------------------+ | |5 |Bottom surface of triangular prism | +------------------+------+-------------------------------------------------------------------------------------+ |Torus | |Regular Surface | +------------------+------+-------------------------------------------------------------------------------------+ |SEC |1 |Bottom surface of cylindrical sector | +------------------+------+-------------------------------------------------------------------------------------+ | |2 |Top surface of cylindrical sector | +------------------+------+-------------------------------------------------------------------------------------+ | |3 |Inner cylindrical surface | +------------------+------+-------------------------------------------------------------------------------------+ | |4 |Outer cylindrical surface | +------------------+------+-------------------------------------------------------------------------------------+ | |5 |Surface where the angle to the coordinate axis is smaller | +------------------+------+-------------------------------------------------------------------------------------+ | |6 |Surface where the angle to the coordinate axis is larger | +------------------+------+-------------------------------------------------------------------------------------+ Note: For a regular hexagonal prism, since there is only one vector (:math:`r_1, r_2, r_3`), surface 3 represents the surface corresponding to a 60-degree clockwise rotation of (:math:`r_1, r_2, r_3`), while surface 4 is on the opposite of surface 3. Surface 5 represents the surface corresponding to a 60-degree counterclockwise rotation of (:math:`r_1, r_2, r_3`), while surface 6 is on the opposite of surface 5. .. code-block:: c /////// PWR pin: defined in single universe ///////////// Universe 0 cell 1 -10 mat = 1 // Fuel Pin cell 2 !1 & -11 mat = 2 // Air cell 3 11 & -12 mat = 3 // cladding cell 4 12 & -17 mat= 4 // water cell 5 17 void = 1 // outside Macrobody Body 10 rcc 0 0 -1 0 0 2 0.4096 Body 11 rcc 0 0 -1 0 0 2 0.4178 Body 12 rcc 0 0 -1 0 0 2 0.4750 Body 17 rpp -0.63 0.63 -0.63 0.63 -2 2 EXTERNALSOURCE Source 1 particle = 1 Surface = 12.2 energy = 1 Position = 0 0 1 radius = 1 Tally Surftally 1 Particle = 1 type = 1 surf = 10.1 11.2 12.3 17.4 Binaryout WrtSurfSrc write = 1 surf = 10.2 PTRAC NEU = 1 SUR = 1 FILE = 1 SURFACE = 10.1 12.1 17.1 .. _section_eng_geometry_cell: Cell ---------------- The definition of the Cell input card is: .. code-block:: none Cell {surf_bool_definition} {cell_info} where, - **Cell** is the keyword for the Cell input card - **id** is the Cell ID. The number representing ID must be a positive integer and cannot be duplicated(or redefined). - **surf_bool_definition** refers to the surface Boolean definition of a cell, which consists of a directional surface and Boolean operators, and is used to define the cell area. **cell_info** defines other relevant information of the cell, which are further explained below. Cell surface boolean definition ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The surface Boolean definition of a cell consists of a series of surfaces and Boolean operators, as follows: .. code-block:: none <±surf> <±surf> <±surf> … The surface direction (sense) is defined as follows: if the calculated value of a point (x, y, z) on a surface equation f ( x, y, z ) is f ( x, y, z ) > 0, then the point is positive for this particular surface; if the calculated value is f ( x, y, z ) < 0, then the point is negative; if the calculated value is f ( x, y, z ) = 0, then the point is on the surface. :numref:`surfsense_fig_eng` shows the area corresponding to the direction of a quadratic surface: .. figure:: media/surface_sense.png :width: 4.5in :name: surfsense_fig_eng Schematic diagram of Surface Direction RMC's Boolean operators include Intersection (&), Union (:), and Complement (!), and support parentheses to adjust the operation priority. \ *The priority of complement is higher than that of intersection and union*\; \ *intersection and union have the same priority*\, and logical operations are performed in the order of definition; \ *parentheses have the highest priority*\, and multiple layers of parentheses can be nested, similar to arithmetic operations. Assuming that the geometric descriptions of Cells 1 and 2 are: .. code-block:: none Cell 1: (1 & -2) : 3 Cell 2: 4 & -5 : !1 The geometric area represented by Cell 1 is: (Positive direction of Surface 1 ∩ Negative direction of Surface 2) ∪ Positive direction of Surface 3 The geometric area represented by Cell 2 is: (Positive direction of Surface 4 ∩ Negative direction of surface 5) ∪ non-Cell 1. Another equivalent description of Cell 2 is: 4 & 5 : !( (1 & -2) : 3). It should be noted that if a number is followed by "!", it means a non-cell; if there are brackets after "!", it means a non-surface. Cell Information Input Card ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Cell Information Input Card consists of a series of cards, which are mainly used to describe the physical and geometric parameters of the cell, including material, volume, temperature, layer filling information, geometric transformation, etc. .. code-block:: none Cell … [Mat = ] [Vol = ] [Tmp = ] [Dens = ] [Void = ] [Fill = ] [Inner = ] [Move = ] [Rotate = ] [RotateAngle = ] [Noburn = ] [FillMove = ] [FillRotate = ] [FillRotateAngle = ] [PWT = ] where, - **Mat** defines the filling material of the cell, with the default value being **Mat = 0 (vacuum)**; - **Vol** defines the volume of the cell, with the units in cm\ :sup:`3`\, and the default value being **Vol = 1.0** cm\ :sup:`3`\; - **Tmp** defines the temperature of the cell. The user can enter a natural number greater than 0, or an integer less than 0. When the input value is greater than 0, it means that the temperature of the cell has been entered in K (Kelvin); when the input value is less than 0, it indicates that the temperature for the cell has been defined (see the Mesh section for details), in K; when the user does not provide any input, the temperature corresponding to the cell filling material is used by default. When the user wants to use the broadening function, the cell temperature (it must be noted that the cell temperature is different from the temperature of the material filled in the cell) needs to be set. In this case, if the user does not specify any on-the-fly broadening options, the program will make a simple correction to the nuclide cross section thermal zone; if the user specifies an on-the-fly broadening option, on-the-fly Doppler broadening or on-the-fly interpolation will be performed according to the user-specified option; - **Dens** defines the density of the cell. Users can enter a natural number greater than 0, or an integer less than 0. When the input value is greater than 0, it means that the atomic density of the cell has been inputted, where the units are 10\ :sup:`24`\ atoms/cm\ :sup:`3`\; when the input value is less than 0, it means that the user has entered the density mesh of the cell (see the Mesh section for details), with the units being g/cm\ :sup:`3`\; when the user does not provide any input, the density of the filled material becomes equivalent with the default user-entered density. It should be noted that the current version of the program does not support the use of this option for burnup cells; - **Void** specifies whether to stop tracking after the neutron enters the cell. It is mainly used to describe the area outside the vacuum boundary. If Void = 0 (default value), tracking of the neutron continues after entering the area; if Void = 1 , tracking of the neutron stops after entering the area; - **Fill** defines the universe filled inside the cell. Please refer to the subsequent chapters for further details. - **Inner** specifies if the cell is an interior cell, that is, one that is not split by an outer boundary during the material filling process. Inner = 0 (default) indicates a non-interior cell, and Inner = 1 indicates an interior cell. Specifying interior cells can speed up geometry processing, but incorrectly specifying interior cells can cause geometry tracking errors, so this is only recommended for advanced users. - **Move** defines the translation vector of the cell, and the **Rotate** and **RotateAngle** input options define the transpose of the rotation matrix that defines the geometric transformation of this cell, which are similar to the Move, Rotate, and RotateAngle cards in 3.4.3 Geometric Transformation. When performing geometric transformation on a cell, the cell is rotated first and then translated. For filled cells, the entire transformation is performed together with its internal filling structure. Please note that rotation of torus (TX/TY/TZ) is currently not supported in RMC. - **FillMove** defines the displacement vector of the internal filling universe of the cell. **FillRotate** and **FillRotateAngle** define the transpose of the rotation matrix that defines the internal filling universe of the cell, which are similar to the Move, Rotate, and Rotateangle cards in 3.4.3 Geometric Transformation. These three input options are only effective when the internal filling universe has been filled into the cell. - **Noburn** defines whether the cell is used in the burnup calculations. **Noburn = 0** (default value) defines that the cell is not utilized in the burnup calculations, and **Noburn = 1** means that the cell is used in the burnup calculations. - **PWT** defines the parameter for calculating the photon relative weight threshold w in this cell. **w>0** the weight threshold is w. **w<0** the weight threshold is -w×w\ :sub:`s`\×I\ :sub:`s`\/I\ :sub:`k`\. I\ :sub:`s`\ and I\ :sub:`k`\ are the neutron importance of the source and collision cells. w\ :sub:`s`\ is the starting weight of the neutron for the history being followed. Only neutron-induced photons with weights greater than weight threshold are produced; otherwise, Russian roulette is played. **w=0** one photon will be produced at each neutron collision in this cell, provided that photon production is possible. **w=-1.0e6** photon production in this cell is turned off. **PWT = -1** (default). .. _section_eng_geometry_universe: Universe -------------------- Single-layer Universe ~~~~~~~~~~~~~~~~~~~~~ A universe comprises of a series of cells, and there *cannot be any overlap or undefined areas between these cells*. The format of a single-layer universe input option is: .. code-block:: none UNIVERSE [options] where, **id** refers to the universe ID. **options** are options related to geometric transformation and repeating structure of the universe. They are shown below, and will be described in detail in later sections. .. code-block:: none [Move = ] [Rotate = ] [Lat = ] [DISP = ] [Pitch = ] [Scope = ] [Sita = ] [Fill = ] For any physical system, at least one universe is required to describe it, which is defined in the input file as Universe 0. For example, the following input file represents the geometry of a common Pressurized Water Reactor fuel pin. In this instance, Cell 1 is rotated 90° clockwise. .. code-block:: c /////// PWR pin: defined in single universe ///////////// Universe 0 cell 1 -10 mat = 1 move=0 0 0 rotate=0 -1 0 1 0 0 0 0 1// Fuel Pin cell 2 !1 & -11 mat = 2 // Air cell 3 11 & -12 mat = 3 // cladding cell 4 12 & 13 & -14 & 15 & -16 mat= 4 // water cell 5 -13 : 14 : -15 : 16 void = 1 // outside Surface surf 10 cz 0.4096 surf 11 cz 0.4178 surf 12 cz 0.4750 surf 13 px -0.63 bc = 1 surf 14 px 0.63 bc = 1 surf 15 py -0.63 bc = 1 surf 16 py 0.63 bc = 1 If this single-layer universe is used to fill the repeating structure in the upper layer via with the Random Mesh Perturbation Method, the DISP keyword is required to perturb the center coordinates of the random particle. The specific method and input are described in Section 3.4.3. Multi-layer Universe ~~~~~~~~~~~~~~~~~~~~ For complex physical systems, it may be necessary to use a universe filling description method, that is, to use a universe to fill a cell of another universe. *Note that the filling universe should cover the entire cell area to be filled*, otherwise there will be undefined blank areas with the cell areas, causing particle tracking errors. The Universe Filling Input Option is embedded in the Cell Input card (please refer to 3.2.2): .. code-block:: none Cell ... [Fill = ] For the PWR cell in the previous example, we can use universe filling to describe it equivalently, as shown in the example below. Firstly, the fuel rod and moderator regions (Universe 1) are defined, and they are then filled into the corresponding cell (cell 102). .. code-block:: c /////// PWR pin: defined in multilevel universe ///////////// Universe 0 cell 101 13 & -14 & 15 & -16 Fill = 1 // define a cell filled by a universe cell 102 -13 : 14 : -15 : 16 void = 1 // outside the box Universe 1 cell 1 -10 mat = 1 // Fuel Pin cell 2 10 & -11 mat = 2 // Air cell 3 11 & -12 mat = 3 // cladding cell 4 12 mat = 4 // water Surface surf 10 cz 0.4096 surf 11 cz 0.4178 surf 12 cz 0.4750 surf 13 px -0.63 bc = 1 surf 14 px 0.63 bc = 1 surf 15 py -0.63 bc = 1 surf 16 py 0.63 bc = 1 Geometric Transformation ~~~~~~~~~~~~~~~~~~~~~~~~ RMC supports the translational transformation, rotational transformation and/or random perturbation of the universe (in the form of center coordinates of random spherical particle arrangements). The geometric transformation input option is embedded in the universe input card: .. code-block:: none Universe ... [Move = Mx My Mz] [Rotate =Cx'x Cx'y Cx'z Cy'x Cy'y Cy'z Cz'x Cz'y Cz'z ] [RotateAngle = \alpha \beta \gamma] The expression of translational transformation is: .. math:: \mathbf{r'} = \mathbf{r} + \mathbf{m} where, :math:`\mathbf{r}=(r_x,r_y,r_z)` and :math:`\mathbf{r}=(r_x',r_y',r_z')` are the positional coordinates of any point in space before and after the transformation, while :math:`\mathbf{m}=(m_x,m_y,m_z)` represents the translational transformation vector. The rotation transformation can be performed around any axis, and its expression is: .. math:: \mathbf{r'} = \mathbf{R} \cdot \mathbf{r} where, :math:`\mathbf{R}` is the rotational transformation matrix. RMC supports two different input formats of rotational transformation matrix. The first input format is a direct input of the rotation transformation matrix using the **Rotate** keyword. In actuality, RMC requires the user to input the transposed matrix of the rotational transformation matrix :math:`\mathbf{R}^T`, whose parameters are defined as follows: Given a cartesian coordinate system :math:`(x,y,z)`, after the rotational transformation, a new coordinate system is obtained :math:`(x',y',z')`, where :math:`\mathbf{R}^T` can be expressed as .. math:: \mathbf{R}^T = \begin{bmatrix} C_{x'x} & C_{x'y} &C_{x'z} \\ C_{y'x} & C_{y'y} &C_{y'z} \\ C_{z'x} & C_{z'y} &C_{z'z} \end{bmatrix} where, :math:`C_{x'x}` represents the cosine of the angle between the :math:`x` and :math:`x'` axes, and so on. The second input format is to use the **RotateAngle** keyword to input the following three angles in degrees: :math:`\alpha, \beta, \gamma` (referred to as pitch angle, yaw angle, and roll angle. Please refer to the definition of Euler angles for more details), whereby the program can automatically generate a rotation matrix. *Note that if you want to perform both rotational and translational transformations on a universe, you should rotate it first and then translate it. For multi-layer universes, the geometric transformation of a universe is always performed as a whole along with its internal filling structure. In addition, Universe 0 is the reference universe, so geometric transformations are not allowed on Universe 0.* *Note that when using the Rotate keyword to input the rotation matrix, you need to check the input accuracy to ensure modeling correctness.* *Note that the Rotate keyword and the RotateAngle keyword cannot be used at the same time.* Using geometric transformation, we redefine the PWR mesh cell as shown below. The fuel rod and moderator region (Universe 1) is defined to be parallel to the x-axis and filled into the mesh cell (Cell 102) by translation (move = 0.5 0.5 0) and rotation (rotate = 0 0 -1 0 1 0 1 0 0). .. code-block:: c // PWR pin: defined in multilevel universe with coordinate transformation // Universe 0 cell 101 13 & -14 & 15 & -16 Fill = 1 // define a cell filled by a universe cell 102 -13 : 14 : -15 : 16 void = 1 // outside the box Universe 1 move = 0.5 0.5 0 rotate = 0 0 -1 0 1 0 1 0 0 cell 1 -10 mat = 1 // Fuel Pin cell 2 10 & -11 mat = 2 // Air cell 3 11 & -12 mat = 3 // cladding cell 4 12 mat = 4 // water Surface surf 10 c/x -0.5 -0.5 0.4096 surf 11 c/x -0.5 -0.5 0.4178 surf 12 c/x -0.5 -0.5 0.4750 surf 13 px -0.63 bc = 1 surf 14 px 0.63 bc = 1 surf 15 py -0.63 bc = 1 surf 16 py 0.63 bc = 1 For the random mesh perturbation method, the DISP parameter is used to fill the single-layer universe of the repeated geometric structure, and the perturbation equation for the coordinates of sphere centers is: .. math:: x& =x'+(2\xi_{1}-1) \times \delta_{x} \\ y& =y'+(2\xi_{2}-1) \times \delta_{y} \\ z& =z'+(2\xi_{3}-1) \times \delta_{z} where, :math:`\xi_i` is a random number between (0,1), :math:`\delta_i` is the perturbation amplitude in the direction of the corresponding coordinate axis. **Note: The amplitude of random perturbation of coordinate transformation cannot exceed the boundaries of the mesh.** The following is an example input card for the Random Mesh Perturbation Method: .. code-block:: c //////// HTR 5*5*5 lattice, liu-sc, 2014-10-28 //////// UNIVERSE 2 lat = 1 pitch = 0.1982 0.1982 0.1982 scope = 5 5 1 fill = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 UNIVERSE 1 move = 0.0991 0.0991 0.0991 Disp=0.0536 0.0536 0.0536 cell 3 -1 mat = 3 //fuel cell 4 1 & -2 mat = 1 //1.1C cell 5 2 & -3 mat = 4 //1.9C cell 6 3 & -4 mat = 2 //SiC cell 7 4 & -5 mat = 4 //1.1C cell 8 5 mat = 4 //1.1C .. _section_eng_geometry_lattice: Repeating Structure(lattice) ----------------------------------- A repeating structure is a special type of universe that consists of regularly arranged meshes. RMC supports commonly used quadrilateral repeating structures and hexagonal repeating structures, which are most common in reactor core calculation analysis. Quadrilateral repeating structures can be established in 1D, 2D planes or 3D universes, and hexagonal repeating structures are established in 2D planes. At the same time, in order to describe the random model of the dispersed fuel medium, RMC adds two special options in the repeated structure input option, namely the implicit modelling method and the explicit modelling method. **(Note: The random medium function of RMC is only available in the enterprise version)** The RMC implicit method uses the Chord Length Sampling method (CLS) to determine the position of the fuel particles in the stochastic media through on-the-fly sampling of the probability distribution function. Its characteristic is that it does not require explicitly construction of the positions of multiple fuel particles, hence there is no strict restriction on the particle packing fraction. Its disadvantage is that the calculation accuracy is worse than that of explicit modelling, and when the particle packing fraction is high, there is a difference between the actual packing fraction and the target packing fraction, and the accuracy needs to be improved via correction. The explicit method of RMC uses the Random Sequential Addition method (RSA) or the Optimized Dropping and Rolling method (ODR), which explicitly determines the spatial position of each fuel particle in the dispersion fuel prior to the transport calculations, so the actual packing fraction is the target packing fraction. However, due to the inherent characteristics of the method, the packing fraction should not be too high, with the upper limit being 38%. The closer to the upper limit, the longer it takes to generate particles distributions. RMC also supports the Discrete Element Method (DEM) to be used with RSA or ODR, to obtain high packing fraction stochastic media. DEM can be coupled with RSA normally, or in the form of the Iterative RSA-DEM Method (ITERRSADEM). Similarly, DEM can be coupled with ODR normally, or in the form of the Iterative ODR-DEM Method (ITERODRDEM). The Repeating Structure input option is embedded in the Universe input card: .. code-block:: none Universe … [Lat = ] Among them, **Lat = 1** represents a quadrilateral repeating structure, **Lat = 2** represents a hexagonal repeating structure, **Lat = 3** represents a stochastic media using the Chord Length Sampling method, **Lat = 4** represents a stochastic media using the explicit modelling method, and **Lat = 5** represents a repeating geometry structure using a tetrahedral arrangement of small spheres. The following describes each of these repeating structure types. Quadrilateral Repeating Structure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :numref:`lattice_mesh_fig_eng` shows a schematic diagram of a quadrilateral repeating structure. *The quadrilateral repeating mesh is established in the xyz coordinate system, and the coordinate origin O is established at the lower left corner of the first mesh cell (numbered 1 as shown in the image below).* .. figure:: media/lattice_mesh.png :width: 4.5in :name: lattice_mesh_fig_eng Schematic diagram of quadrilateral repeating structure The input options for the quadrilateral repeating structure are: .. code-block:: none Universe … [Lat = 1] [Scope = ] [Pitch = ] [Fill = ] where, - **Lat = 1** indicates that the repeating structure type is quadrilateral; - **Scope** defines the number of repeating mesh cells in the x, y, and z directions. In particular, a parameter of 1 means that there is only one mesh layer in a particular direction. For example, the repeating mesh of a 2D PWR component is represented by **Scope = 17 17 1**. It should be noted that although the program supports the direct definition of 3D quadrilateral repeating structures, it is recommended that users generate 3D repeating structures by filling 2D repeating structures and 1D repeating structures; - **Pitch** defines the width of the repeated mesh in the x, y, and z directions. The parameter must be positive. If there is only one mesh layer in a certain direction, the corresponding parameter in the **Pitch** input option has no actual meaning; - **Fill** defines the serial number of the universe to be filled into the mesh. The filling order of the Fill tab is: The x direction is filled in first, then the y direction is filled in, and finally the z direction is filled in. :numref:`lattice_mesh_fig_eng` shows the numbering method for the index subscripts of the quadrilateral repeating structure, which corresponds to the filling order of the Fill option, and also corresponds to the serial number of the repeating structure counter. When using the Random Mesh Perturbation method, it is necessary to add the **DISP** option to the universe filled via quadrilateral repeating structures. For details, please refer to the second half of 3.3.3. Hexagonal Repeating Structure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. figure:: media/lattice_hex.png :width: 4.5in :name: lattice_hex_fig_eng Schematic diagram of hexagonal repeating structure The arrangement of the hexagonal repeating mesh is shown in :numref:`lattice_hex_fig_eng`. It can be seen that the centers of the hexagons are arranged in the form of a parallelogram. The direction vectors b1 and b2 corresponding to the two sides of the parallelogram are located in the xy plane, and b1 coincides with the x direction. The input options for the hexagonal repeating structure are: .. code-block:: none Universe … [Lat = 2] [Scope = ] [Sita = ] [Pitch = ] [Fill = ] [PARTICLE = ] [PF = ] [RAD = ] [TYPE = <1/2/3>] [SIZE = ] [PFCORRECT] [CLSTRACK] [HISTORYNUM] where, - **Lat = 3** indicates random geometry generated via Chord Length Sampling; - **MATRIC** defines the serial number of the universe in which the matrix is located in; - **PARTICLE** defines the serial number of the universe the particle(s) comprises of. Different types of fuel particles are distinguished by the Ui identifier (to be defined later), and each fuel corresponds to a single universe serial number; - **PF** defines the volumetric fraction that a particle occupies in the geometry it fills, or the particle packing fraction; - **RAD** defines the radius of the particles; - **PFCORRECT** indicates if the auto-correction for the implicit method is utilized. If this mode is selected, the particle packing fraction rate will be automatically corrected before the criticality calculation. A value of 0 indicates that no correction method is used, which is the default option. A value of 1 indicates that the automatic correction mode is turned on. (Note 1: **When auto-correction for the implicit method is turned on, due to the usage of celltally for auto-correction, the user has to include a celltally in the input card**) (Note 2: **The particle packing fraction derived from the auto-correction mode for the implicit method is not compatible with the Fixed Source Method**) - **CLSTRACK**\ indicates if the CLS method utilizes neutron flight-path and particle history tracking for stochastic media modelling. If the method is used, the Dynamic Inclusion Sphere method is turned on, and the CLS method will thus consider previous neutron flight-path and particle positions during the generation of new particles. A value of 0 (default value) indicates that the method is not used and history is not tracked, and a value of 1 indicates that the method is used and history is being tracked. (Note 1: **The CLSTRACK method is not compatible with the PFCORRECT method, as history tracking will interfere with the accuracy of the automatic correction mode. Hence, if CLSTRACK = 1, PFCORRECT cannot be equal to 1, otherwise an error will be reported.**) (Note 2: **The CLSTRACK method is currently incompatible with the Fixed Souce Mode.**) - **HISTORYNUM** indicates the number of histories to be tracked using the CLSTRACK method, with a default value of 10. The user may input any positive integer. Take note that the larger the number, the longer the computational time. Note: **When using the implicit method, due to the characteristics of on-the-fly sampling, the actual geometrical model cannot be drawn. If you want to utilize the RMC drawing function, please use the explicit method**. Explicit Modelling Method Random Geometry (Enterprise Version Only) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The input options for the Explicit Modeling Stochastic Geometry are: .. code-block:: none Universe … [Lat = 4] [MATRIC = ] [PARTICLE = ] [PF = ] [RAD = ] [RSA = <0/1>] [ODR = <0/1>] [TYPE = <1/2/3/4>] [SIZE = ] [DEM = <0/1>] [ITERRSADEM = <0/1>] [ITERODRDEM = <0/1>] [TIME =