:tocdepth: 1

===================================
ICCGタグ
===================================

.. index::
	single: ICCGタグ

[|today| 更新]

| 各種行列計算の収束の有無，最終残差，反復回数を表します．
| 過渡解析など複数ステップの計算のケースでは，各計算ステップ毎に非線形反復回数が異なるため，出力される値は，配列(計算ステップ数)の配列(非線形反復回数)のいわゆるジャグ配列となります(下図参照)．

.. image:: png/iccg1.png
	:align: center

.. warning::

	ICCGタグを使って上記情報が出力されるのは，電磁場の計算のみです．前処理でソース項の算出に使われる行列計算などの情報は出力されません．  

	（例えば，PHICOILを使ったケースでは，前処理として行列を解いてソース電流を算出しますが，このソース電流の算出に関する行列計算の情報はICCGタグでは出力されません）

ICCGタグ
=============

| 出力する値によって下記の第2タグを用います．

.. csv-table:: ICCGタグの第2タグ
	:header: 第2タグ, 項目
	:widths: 1, 1

	CONVERGE, 収束の有無（Boolean値） 
	RESIDUAL, 最終残差 
	ITERATION, 反復回数

.. warning::

	希な例として，非線形計算時の0回反復収束(行列計算開始時において残差が収束判定値未満のケース)は，反復回数0回で収束していると見なします．

データ取得例
-------------

.. code-block:: none

	["ICCG"]["CONVERGE"]
	["ICCG"]["RESIDUAL"]
	["ICCG"]["ITERATION"]

Pythonスクリプト例
------------------

| とりあえず，行列計算が未収束となったのか判定する例．
| 変数 **js** にEMSOJsonのデータが収納されているとする．

.. code-block:: python

    #------------------------------
    #[input]
    #  js    : EMSOJson data
    #[return]
    #  True  : 収束 
    #  False : 未収束が1つ以上ある 
    #------------------------------
    def isconverge(js):

        conv = js["ICCG"]["CONVERGE"] # CONVERGEタグのデータ取得
        for step in conv:             # 各ステップのデータ抽出
            for isc in step:          # 各ステップのNR反復毎のデータ抽出 
               if not isc:
                 return False         # 1つでも未収束の場合はFalse
        return True

行列計算が未収束となった計算ステップ番号，NR反復番号まで取得したい例．

.. code-block:: python

    #-------------------------
    #[input]
    #  js        : EMSOJson data
    #[return]
    #  unconvs[] : 未収束のステップ番号およびNR反復番号 
    #-------------------------
    def isconverge(js):

        unconvs = []                         # 未収束のステップ番号およびNR反復番号

        conv = js["ICCG"]["CONVERGE"]        # CONVERGEタグのデータ取得
        for (i,step) in enumerate(conv):     # 各ステップのデータ抽出
            for (j,isc) in enumerate(step):  # 各ステップのNR反復毎のデータ抽出 
                if not isc:
                    unconvs.append([i,j])    # 未収束のステップ番号(i)およびNR反復番号(j)を収納
        return unconvs 
