Flexlist module

提供: ComplexRI: Manual
2026年5月26日 (火) 04:19時点におけるHirano (トーク | 投稿記録)による版 (ページの作成:「 Flexiest モジュールは、サイズ可変のリスト型データの集まりのフォーマットを変換するサブルーチンをまとめたものである…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

 Flexiest モジュールは、サイズ可変のリスト型データの集まりのフォーマットを変換するサブルーチンをまとめたものである。汎用性が高いので、独立したモジュールとしている。


リスト型データの種類

(1) リスト

 各行はバイアスポテンシャル(#1, #2, ...)ごとに適用するノード番号とする。

バイアス番号 ノード番号
#1 1 2
#2 7
#3 0
#4 -1 -2 -8

※ ノード番号は、基本的に正の整数とする。

 ただし、0はすべてのノード、負の数はそれを除いた全てのノードを意味すると拡張する。正の数、0、負の数が混在することは許されない。


(2) テーブル (行はバイアス番号、列はノード番号)
ノード
バイアス T T F F F F F F
F F F F F F T F
T T T T T T T T
F F T T T T T F


(3) 転置リスト

各行はノード番号で、それごとに適用されるバイアスポテンシャル番号を示す。

ノード バイアス
#1 1 3
#2 1 3
#3 3 4
#4 3 4
#5 3 4
#6 3 4
#7 2 3 4
#8 3

変数の形式

(1) リスト、および (3) 転置リスト

 以下のサイズ可変のリストlist_type構造体の1次元配列

type(list_type) :: list(:) で与えられる。  

 ただし、list_typeの形は、 <source lang="fortran">

 type list_type
   integer, allocatable :: id(:)    !!!  1行あたりの要素配列。
 end type list_type

</source>

(2) テーブル

 2次元の論理変数配列。 logical :: table(sizex, sizey)

サブルーチン一覧

リスト変数のチェック <source lang="fortran">

  • translate_list (list, isize)

</source>  (1)のリスト型データの妥当性をチェックする。同じノード番号を重複している場合や、ノード番号に正の数、0、負の数が混在するとエラーとする。 また、ノード番号に0や負の数を含む拡張形の場合、正の数のみのリスト型データに変換して出力する。

データ構造変換のサブルーチン <source lang="fortran">

  • list2table (list, table) (1) -> (2)
  • table2list (table, list) (2) -> (1)
  • transpose_list (list_in, list_out) (1) -> (3)
  • table2pair (table,plist,nrow,ncolumn)
  • pair2table (plist,table,nrow,ncolumn)

</source> ※ list2tableでは、ノード番号に0や負の数を含む拡張形を認めない。その場合、前もってtranslate_list を行っておく必要がある。

※ transpose_list は、内部的に (1)->(2), (2)の転置、(2)の転置-> (1)の転置 を実施している。


Module structure

<source lang="fortran">

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

MODULE flexlist_module

 IMPLICIT NONE

! サイズ可変のリスト。これを1次元配列として、2次元のリスト構造を表す。 ! Neighbor list struct.

 TYPE flexlist_struct
   INTEGER,ALLOCATABLE :: id(:)  !!! 1行あたりの要素配列。
 END TYPE flexlist_struct

! Pair list struct.

 TYPE pairlist_struct
   INTEGER :: a   !!! Index of one side.
   INTEGER :: b   !!! Index of another side.
 END TYPE pairlist_struct

CONTAINS

 !!! Subroutine for copying list.
 SUBROUTINE copy_list(list,list_cp)
 !!! Subroutine for add element to existing flexlist.
 SUBROUTINE add_id(flexlist,id)
 !!! Subroutine for remove element from existing flexlist.
 SUBROUTINE remove_id(flexlist,id)


</source>