.. _IV-1_2D_to_3D:

##################################
**IV-1. 2D_to_3D ファイル**
##################################

本節では、二次元データを三次元メッシュへ変換して解析する場合に使用する入力ファイル *2D_to_3D* の形式を説明します。

inputファイルで :paramdef:`GEOMETRY(12)` = 4 を指定した場合、*2D_to_3D* ファイルが必要です。この処理では、ATLAS形式の二次元メッシュを三次元メッシュへ変換します。入力ファイル名は *pre_geom2D*、出力ファイル名は *pre_geom* です。ATLAS形式以外の二次元メッシュは、まずATLAS形式に変換してから三次元メッシュに変換されます。スライド運動解析（:paramdef:`MOTION(2)` = 2）では、可動部の二次元メッシュ *rotor_mesh2D* も同様に三次元メッシュへ変換されます。

二次元メッシュデータは節点と，平面要素（四角形および三角形要素），二節点線要素および点要素のデータを含むものとします。拡張方向が z 方向の時( ``EX_DIREC`` =0)二次元メッシュは x-y 面で定義されているものとし，これをｚ軸（局所座標において）方向に多層に拡張します。拡張方向が :math:`\theta` 方向の時( ``EX_DIREC`` =1)，二次元メッシュは x-z 面(x≧0)で定義されているものとし，これを :math:`\theta`（局所座標において）方向に多層に拡張します。要素は一次要素のみを用いることができ， :paramdef:`NODE_ORDER(4)` = :paramdef:`EDGE_ORDER(4)` =1 で解析します。

二次元と三次元の要素の対応は以下の通りです。

.. list-table:: 二次元メッシュと三次元メッシュの対応
    :header-rows: 1

    * - 二次元メッシュ
      - ->
      - 三次元メッシュ
    * - 四角形要素
      - ->
      - 四角柱 6 面体要素
    * - 三角形要素
      - ->
      - 三角柱 5 面体要素
    * - 二節点線要素
      - ->
      - 四角形要素
    * - 点要素
      - ->
      - 二節点線要素

:math:`\theta` 方向拡張の場合は，中心 z 軸に接する要素は一辺が軸上にある四角形要素とし，三角柱要素に拡張されます。また，この場合，軸上の二節点線要素，点要素は許されません。

二次元メッシュの要素に定義されている物性番号は，三次元メッシュにおいて各層に対して再定義できます。二次元メッシュで定義された要素はそのまま三次元メッシュに含まれます。ただし，面要素は正方向（節点順を回る方向としたときの右ねじの方向が z( :math:`\theta` )方向となるときが正）に節点番号が変更されます。また，面要素の位置を z( :math:`\theta` )方向にずらして三次元メッシュ中に配置することができます。このとき面方向を逆転することもできます。線要素から生成される面要素の方向は，線要素の始点から終点に回転したとき右ねじ方向が正方向になるように定義されます。

.. caution:: 
    データの入力の形式は，ファイル *input* と同様で，テキストフォーマットで *2D_to_3D* ファイルに記述します。

    JSONフォーマットの場合， *input.json* ファイルの最後に記述します。

---------------------
設定項目
---------------------

:paramdef:`2D_to_3D_expansion`  JSONキー：2D_to_3D_expansionオブジェクト

:paramdef:`1_Optional_parameters`   JSONキー：1_Optional_parametersオブジェクト

        :paramdef:`NO_LAYERS`   テキストフォーマット：z( :math:`\theta` )方向の要素層数

        :paramdef:`NO_BASE_MAT_IDS` テキストフォーマット：二次元メッシュから三次元に拡張する物性番号の数。

        :paramdef:`NO_LAYERES_DATA` テキストフォーマット：三次元メッシュでの物性番号指定データの数
        
        :paramdef:`NO_Z_DATA`   テキストフォーマット：z( :math:`\theta` )方向の座標指定のデータ数
        
        :paramdef:`NO_SURFACES` テキストフォーマット：z 方向にずらした面のデータの数

    :paramdef:`COORD_ID`    三次元座標を指定する局所座標識別番号
    
    :paramdef:`EX_DIRECT`   二次元メッシュを三次元に拡張する方向を指定
    
    :paramdef:`PITCH`      二次元メッシュの要素を三次元メッシュに拡張する際の捻りピッチ
    
    :paramdef:`ROTOR_PITCH` 二次元メッシュの要素を三次元メッシュに拡張する際の捻りピッチ

:paramdef:`2_Expansion_positions` JSONキー：2_Expansion_positionsオブジェクト
    
    :paramdef:`Z_BASE_POSITION` z( :math:`\theta` )方向の基準位置
    
    :paramdef:`DIVISIONS` 各層の分割数を指定する配列
    
    :paramdef:`Z_POSITIONS` z( :math:`\theta` )方向の座標位置を指定する配列
    
    :paramdef:`DIVISION_RATIO` 各層の分割比を指定する配列
    
    :paramdef:`TWIST` 各層の捻り角度を指定する配列

        :paramdef:`LAYER_NO` テキストフォーマット：各層の番号を指定する配列
        
        :paramdef:`Z_COORDINATE` テキストフォーマット：z( :math:`\theta` )方向の座標位置を指定する配列
        
        :paramdef:`DIVISION_RATIO` テキストフォーマット：各層の分割比を指定する配列
        
        :paramdef:`TWIST` テキストフォーマット：各層の捻り角度を指定する配列

:paramdef:`3_Expansion_of_materials` JSONキー：3_Expansion_of_materialsオブジェクト

    :paramdef:`BASE_MAT_IDS` 二次元メッシュの物性番号を三次元メッシュの物性番号に変換する配列

    :paramdef:`DIVISIONS` 各層の分割数を指定する配列
        
    :paramdef:`MAT_IDS` 二次元メッシュの物性番号を三次元メッシュの物性番号に変換する配列

:paramdef:`4_Surface_creation` JSONキー：4_Surface_creationオブジェクト

    :paramdef:`BASE_MAT_IDS` 二次元メッシュの物性番号を三次元メッシュの物性番号に変換する配列

    :paramdef:`SURFACE_MAT_IDS` z 方向にずらした面の物性番号を指定する配列

    :paramdef:`LAYER_POSITIONS` z 方向にずらした面の位置を指定する配列


---------------------
設定フォーマット
---------------------

.. collapsible:: 
   :title: テキストフォーマットの折りたたみセクション

    :種類: 固定パラメータセット  
    :行数: 2 
    :パラメータ数: 2,2  

    .. code-block:: text
        :caption: Text format

        * NO_LAYERS * NO_BASE_MAT * NO_LAYER_DATA* NO_Z_DATA * COORD_ID * NO_SURFS * EX_DIREC * PITCH * ROTOR_PITCH *
          I               I             I              I          I           I          I         E          E
        * LAYER_NO * Z_COORDINATE * DIVISION_RATIO * TWIST *
            I             E                E          I
            I             E                E          I
        *  BASE_MAT_IDS *
                                I    I    I    I
        *  LAYER_FROM * TO *  MAT_IDS *
                I    I    I    I    I    I
                I    I    I    I    I    I
        *  BASE_MAT_ID * SMAT_ID * LAYER_POSITION *
            I       I       I


======================
JSONフォーマット
======================

.. code-block:: json
    :caption: JSON format from 2024.11

    "2D_to_3D_expansion": 
    {
        "1_Optional_parameters": 
        {
            "COORD_ID": I,
            "EX_DIRECT": I,
            "PITCH": E,
            "ROTOR_PITCH": E
        },
        "2_Expansion_positions": 
        {
            "Z_BASE_POSITION": E,
            "DIVISIONS": [I, I, I],
            "Z_POSITIONS": [E, E, E],
            "DIVISION_RATIO": [E, E, E],
            "TWIST": [I, I, I]
        },
        "3_Expansion_of_materials": 
        {
            "BASE_MAT_IDS": [I, I, I, I],
            "DIVISIONS": [I, I, I],
            "MAT_IDS": 
            [
                [I, I],
                [I, I],
                [I, I]
            ]
        },
        "4_Surface_creation": 
        {
            "BASE_MAT_IDS": [I],
            "SURFACE_MAT_IDS": [I],
            "LAYER_POSITIONS": [I]
        }
    }

----------
詳細説明
----------

====================
**2D_to_3D_expansion**
====================
.. paramdef:: 2D_to_3D_expansion

:JSONキー: 2D_to_3D_expansionオブジェクト

====================
**1_Optional_parameters**
====================
.. paramdef:: 1_Optional_parameters

:JSONキー: 1_Optional_parametersオブジェクト


.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. paramdef:: NO_LAYERS(IV-1)

    NO_LAYERS(テキスト)

    .. code-block:: none
        :caption: 固定パラメータセット1

        [row, col] = [1, 1]
        Type=I 

    z( :math:`\theta` )方向の要素層数。


    .. paramdef:: NO_BASE_MAT_IDS(IV-2)

    NO_BASE_MAT_IDS(テキスト)

    .. code-block:: none
        :caption: 固定パラメータセット2

        [row, col] = [1, 2]
        Type=I 

    二次元メッシュから三次元に拡張する物性番号の数。


    .. paramdef:: NO_LAYERES_DATA(IV-3)

    NO_LAYERES_DATA(テキスト)

    .. code-block:: none
        :caption: 固定パラメータセット3

        [row, col] = [1, 3]
        Type=I 

    三次元メッシュでの物性番号指定データの数。


    .. paramdef:: NO_Z_DATA(IV-4)

    NO_Z_DATA(テキスト)

    .. code-block:: none
        :caption: 固定パラメータセット4

        [row, col] = [1, 4]
        Type=I 

    z( :math:`\theta` )方向の座標指定のデータ数。0 のときは，z( :math:`\theta` )座標を ``NO_LAYERS`` +1 個昇順に指定する。

^^^^^^^^^^^^^^^^^^^^^
COORDINATE_ID
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: COORDINATE_ID(IV-5)


.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション
    
    .. code-block:: none
        :caption: 固定パラメータセット5

        [row, col] = [1, 5]
        Type=I 

:型: 整数 (I)
:説明: 三次元座標を指定する局所座標識別番号 ( :paramdef:`COORD_ID(12)` )。0 の時は全体座標を示す。

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. paramdef:: NO_SURFACES(IV-6)

    NO_SURFACES(テキスト)

    .. code-block:: none
        :caption: 固定パラメータセット6

        [row, col] = [1, 6]
        Type=I 

    z 方向にずらした面のデータの数。


^^^^^^^^^^^^^^^^^^^^^
EX_DIREC
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: EX_DIRECT(IV-7)

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション
    
    .. code-block:: none
        :caption: 固定パラメータセット7

        [row, col] = [1, 7]
        Type=I 

:型: 整数 (I)
:値: 0, 1
:説明: 二次元メッシュを三次元に拡張する方向を指定する。

    - =0: z 方向に拡張。
    - =1: :math:`\theta` 方向に拡張。

    z方向拡張の場合は，二次元メッシュは x-y 面で定義されているものとし，これをｚ軸（局所座標において）方向に多層に拡張します。

    :math:`\theta` 方向拡張の場合は，二次元メッシュは x-z 面(x≧0)で定義されているものとし，これを :math:`\theta`（局所座標において）方向に多層に拡張します。

:デフォルト値: 0

^^^^^^^^^^^^^^^^^^^^^
PITCH
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: PITCH(IV-8)

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. code-block:: none
        :caption: 固定パラメータセット8

        [row, col] = [1, 8]
        Type=E 

:型: 実数 (E)
:単位: m
:説明: 二次元メッシュ *pre_geom2D* の要素を三次元メッシュに拡張する際の捻りピッチを指定する。

    z方向 ( ``EX_DIRECT`` )=0のみが指定でき，捻りピッチを指定する。
    
    - PITCH > 0 : 右ねじ方向
    - PITCH < 0 : 左ねじ方向
    
    捻りピッチ拡張は z 方向に拡張する場合，z=0 面が基準となる。

:デフォルト値: 0

^^^^^^^^^^^^^^^^^^^^^
ROTOR_PITCH
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: ROTOR_PITCH(IV-9)

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. code-block:: none
        :caption: 固定パラメータセット9

        [row, col] = [1, 1]
        Type=E 

:型: 実数 (E)
:単位: m
:説明: 二次元メッシュ *rotor_mesh2D* の要素を三次元メッシュに拡張する際の捻りピッチを指定する。

    z方向 ( ``EX_DIRECT`` )=0のみが指定でき，捻りピッチを指定する。
    
    - PITCH > 0 : 右ねじ方向
    - PITCH < 0 : 左ねじ方向
    
    捻りピッチ拡張は z 方向に拡張する場合，z=0 面が基準となる。

:デフォルト値: 0


====================
**2_Expansion_positions**
====================
.. paramdef:: 2_Expansion_positions

:JSONキー: 2_Expansion_positionsオブジェクト

^^^^^^^^^^^^^^^^^^^^^
**Z_BASE_POSITION**
^^^^^^^^^^^^^^^^^^^^^

.. paramdef:: Z_BASE_POSITION(IV-1)

:型: 実数 (E)
:説明: z( :math:`\theta` )方向の基準位置。

    +z (+ :math:`\theta` )方向に積み上げるので，基準位置は最下面の z ( :math:`\theta` )座標を指定する。

    0 のときは，z=0 を基準位置とする。

^^^^^^^^^^^^^^^^^^^^^
**DIVISIONS**
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: DIVISIONS(IV-1)

:型: 整数配列 (I)
:値: 1以上
:説明: 各層の分割数を指定する配列。

^^^^^^^^^^^^^^^^^^^^^
**Z_POSITIONS**
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: Z_POSITIONS(IV-1)

:型: 実数配列 (E)
:説明: z( :math:`\theta` )方向の座標位置を指定する配列。

^^^^^^^^^^^^^^^^^^^^^
**DIVISION_RATIO**
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: DIVISION_RATIO(IV-1)

:型: 実数配列 (E)
:説明: 各層の分割比率(等比分割比)を指定する配列。 **デフォルト** =1

    負値の場合は分割比は逆数とする。

^^^^^^^^^^^^^^^^^^^^^
**TWIST**
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: TWIST(IV-1)

:型: 整数配列 (I)
:説明: 各層の捻り設定を指定する配列。

    捻りピッチでの拡張指定。 **デフォルト** =-1

    - =-1:直線拡張。
    - =1:捻り拡張。

.. caution:: 
    JSONフォーマットの場合，``EMSI`` と同じ設定パラメータであるが，テキストフォーマットの場合は従来通りの設定パラメータとなる。


.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    ``NO_Z_DATA`` ≠0 の時，行 2 のデータを ``NO_Z_DATA`` +1 組入力する。

    最後の行は， ``LAYER_NO``, ``Z_COORDINATE``の値を指定する。 ``DIVISION_RATIO``, ``TWIST``  のデータは必要ない。

    LAYER_NO(IV-1)
    .. paramdef:: LAYER_NO(IV-1)

    .. code-block:: none
        :caption: 固定パラメータセット1

        [row, col] = [2, 1]

    :型: 整数 (I)
    :説明: z 座標を入力する節点層の番号。
        1 から NO_LAYERES+1 の値。一番目のデータでは 1，
        NO_Z_DATA+1 では NO_LAYERS+1 である。

    .. paramdef:: Z_COORDINATE(IV-2)

    .. code-block:: none
        :caption: 固定パラメータセット2

        [row, col] = [2, 2]

    :型: 実数 (E)
    :説明: 節点層の z( :math:`\theta` )座標。

    .. paramdef:: DIVISION_RATIO(IV-3)

    .. code-block:: none
        :caption: 固定パラメータセット3

        [row, col] = [2, 3]

    :型: 実数 (E)
    :説明: 次の節点層座標までの等比分割比。
        負値の場合は分割比は逆数とする。
        NO_Z_DATA+1 番目のデータに対しては不要。

    .. paramdef:: TWIST(IV-4)

    .. code-block:: none
        :caption: 固定パラメータセット4

        [row, col] = [2, 4]

    :型: 整数 (I)
    :値: (-1, 1)
    :説明: 捻りピッチでの拡張指定。
        デフォルト=-1
        =-1: 直線拡張。
        =1: 捻り拡張。

.. note:: 
    - ロータバー34 本，ロータ軸長 42mm の誘導電動機でロータバーを１スロットピッチスキューさせる場合を考えると， ``ROTOR_PITCH`` =34×42=1.428m でロータバーが一周期して一致する。

    - エンドリングも含めて *2D_to_3D* により拡張することを考えると，下側エンドリングは Z<0 領域に ``TWIST`` =-1 で拡張し，ロータコア部は Z=0～42mm まで ``TWIST`` =1，上部エンドリングは ``TWIST`` =-1 で拡張する。

====================
**3_Expansion_of_materials**
====================
.. paramdef:: 3_Expansion_of_materials

:JSONキー: 3_Expansion_of_materialsオブジェクト

^^^^^^^^^^^^^^^^^^^^^
**BASE_MAT_IDS**
^^^^^^^^^^^^^^^^^^^^^

.. paramdef:: BASE_MAT_IDS(IV-1)

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. code-block:: none
        :caption: 固定パラメータセット1

        [row, col] = [NO_BASE_MAT_IDS]

:型: 整数配列 (I)
:説明: 二次元メッシュで定義された物性識別番号。 :paramdef:`MAT_ID(16.1)`

^^^^^^^^^^^^^^^^^^^^^
**DIVISIONS**
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: DIVISIONS(IV-1)

:型: 整数配列 (I)
:説明: 各層の物性識別番号 ( :paramdef:`MAT_ID(16.1)` )に対する分割数を指定する配列。

    物性識別番号の数は ``NO_BASE_MAT_IDS`` と同じである。

    ``2_Expansion_positions`` で指定した分割数 ``DIVISION`` と同じ数でなくともよい。ただし，総和は一致すること。

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    行 2 のデータを NO_LAYERES_DATA 組入力する。

    LAYER_FROM(IV-1)
    .. paramdef:: LAYER_FROM(IV-1)
    LAYER_TO(IV-1)
    .. paramdef:: LAYER_TO(IV-1)

    .. code-block:: none
        :caption: 固定パラメータセット1

        [row, col] = [2, NO_LAYERES_DATA]
        Type=I

    LAYER_FROM から LAYER_TO 番目の要素の層に対して物性識別番号を BASE_MAT_IDS に対して物性番号 MAT_IDS の拡張要素を生成する。1 番目のデータでは LAYER_FROM=1，最後のデータでは LAYER_TO=NO_LAYERS である。

^^^^^^^^^^^^^^^^^^^^^
**MAT_IDS**
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: MAT_IDS(IV-1)

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. code-block:: none
        :caption: 固定パラメータセット1

        [row, col] = [NO_BASE_MAT_IDS]

:型: 整数二次元配列 (I)
:説明: 三次元メッシュにおける物性識別番号。

    =0 の場合，上の要素層には要素を生成しない。

.. hint:: 
    二次元メッシュを積み上げて三次元メッシュにするため，積み上げ途中で三次元メッシュの物性番号を変更することで，例えば鉄→空気→鉄のように物性番号を変更することができる。

    点要素や線要素を積み上げる場合，指定する層のみに要素を生成することができる。それ以外は =0 とする。

    ただし，点要素や線要素は二次元メッシュの要素を積み上げるため，二次元メッシュの物性番号を指定する必要がある。

＜設定例＞

.. code-block:: json
    :caption: JSON format from 2024.11

    "MAT_IDS" : 
    [
        [ 1, 4, 3, 4 ],
        [ 1, 4, 4, 4 ],
        [ 4, 4, 4, 4 ]
    ]

====================
**4_Surface_creation**
====================
.. paramdef:: 4_Surface_creation

:JSONキー: 4_Surface_creationオブジェクト

^^^^^^^^^^^^^^^^^^^^^
**BASE_MAT_IDS**
^^^^^^^^^^^^^^^^^^^^^

.. paramdef:: BASE_MAT_IDS(IV-1)

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. code-block:: none
        :caption: 固定パラメータセット1

        [row, col] = [NO_BASE_MAT_IDS]

:型: 整数配列 (I)
:説明: 二次元メッシュで定義された物性識別番号。 :paramdef:`MAT_ID(16.1)`

^^^^^^^^^^^^^^^^^^^^^
**SURFACE_MAT_IDS**
^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: SURFACE_MAT_IDS(IV-1)

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. code-block:: none
        :caption: 固定パラメータセット1

        [row, col] = [NO_BASE_MAT_IDS]

:型: 整数配列 (I)
:説明: 三次元メッシュにおける物性識別番号。

    
^^^^^^^^^^^^^^^^^^^^^^^^
**LAYER_POSITIONS**
^^^^^^^^^^^^^^^^^^^^^^^^
.. paramdef:: LAYER_POSITIONS(IV-1)

.. collapsible:: 
    :title: テキストフォーマットの折りたたみセクション

    .. code-block:: none
        :caption: 固定パラメータセット1

        [row, col] = [NO_BASE_MAT_IDS]

:型: 整数配列 (I)
:説明: ``LAYER_POSITION`` 番目の節点層に二次元メッシュと同じ面要素をコピー生成する。

    負値 (<0) の時，面の方向を逆転する。

.. note:: 
    ``LAYER_POSITION`` の値は 1 から ``NO_LAYERS`` +1 の値である。すなわち，最下面が 1，最上面が ``NO_LAYERS`` +1 である。

    ``NO_LAYERS`` は ``DISIVIONS`` の総和である。
