LoginSignup
0
1

More than 5 years have passed since last update.

OpenFOAMが提供する一次元配列(UList, SubList, List, DynamicList, Xfer)

Last updated at Posted at 2016-06-25

UList

参考リンク

OpenFOAM C++ Documentation : UList<T>
OpenFOAM C++ Documentation : UList.H

説明

Unallocated listの略で、メモリはオブジェクト生成時や実行時には割り当てられず、コンストラクタに対してアドレスを引数として与える必要があります。既存の一次元配列を参照する場合に便利なクラスです。

メンバ関数

  • T& first()
  • T& last()
  • T& operator[]
  • iterator begin()
  • iterator end()
  • label size()
  • bool empty()

など

SubList

参考リンク

OpenFOAM C++ Documentation : SubList<T>
OpenFOAM C++ Documentation : SubList.H

説明

UListを継承して作成された一次元配列の一部分を示すためのクラス。OpenFOAMには、list, containerの要素全てに対して指定された操作を実行するfor文

  • forAll (list, i)
  • forAllReverse (list, i)
  • forAllIter (ContainerType, container, iter)
  • forAllConstIter (ContainerType, container, iter)

がUlist.H内で定義されており、基本的にfor文の代わりにこれらを使います。
OpenFOAM C++ Documentation : UList.H

Listの一部に対してのみ操作を実行したいときは、for文を使って要素番号の始点と終点を指定するのではなく、ListからSubListを作成し、上記forAll等を使って操作を行うべきでしょう。つまり、labelList型オブジェクトであるlistがあったとして、その要素番号n1からn2まである操作を行いたい場合、

for (label i = n1; i <= n2; i++)
{
    list[i] = ...
}

とするのは不適切で、

label subsize = n2 - n1 + 1;
SubList<label> sublist(list, subsize, n1);
forAll (sublist, i)
{
    sublist[i] = ...
}

が正しいと考えられます。

List

参考リンク

OpenFOAM C++ Documentation : List<T>
OpenFOAM C++ Documentation : List.H

説明

オブジェクト生成時にメモリが確保される可変長の一次元配列。

メンバ関数

  • void append(const T&)
  • void resize(const label)
  • void clear()
  • transfer(List<T> &)

など

typedefされた種々のList

下記以外にもfaceListなど数多くあります。

labelList

OpenFOAM C++ Documentation : labelList.H

typedef List<label> labelList;
typedef List<labelList> labelListList;
typedef List<labelListList> labelListListList;

boolList

OpenFOAM C++ Documentation : boolList.H

typedef UList<bool> boolUList;
typedef List<bool> boolList;
typedef List<List<bool>> boolListList;

DynamicList

参考リンク

OpenFOAM C++ Documentation : DynamicList

説明

List<T>を継承して作成された可変長の一次元配列。サイズ変更のための演算として、加減乗除が定義されています。

Xfer

参考リンク

OpenFOAM C++ Documentation : Xfer
OpenFOAM C++ Documentation : Xfer.H

説明

(Xfer.Hの説明文の日本語訳)

T型オブジェクトのコピーまたは所有権を移動するための簡単なクラス。
オブジェクトがコピーされるのか、あるいは所有権を移動されるのかはXferオブジェクトの生成時に決められるため、生成したXferオブジェクトは無条件に所有権を移動することが可能となる。これによって他のクラスにおいてコピーおよび所有権移動のそれぞれの場合においてコンストラクタやメソッドを定義する必要がなくなる。

XferオブジェクトをT型オブジェクトから生成するとき、コピーなのかまたは所有権移動なのかによってT型クラスに定義されている代入演算子=または移動用メンバ関数transfer()がそれぞれ呼び出され、コピーまたは所有権移動が行われます。

関数

  • Foam::Xfer<T> Foam::xferCopy(const T& t)
  • Foam::Xfer<T> Foam::xferMove(T& t)
  • Foam::Xfer<T> Foam::xferTmp(Foam::tmp<T>& tt)
  • Foam::Xfer<To> Foam::xferCopyTo(const From& t)
  • Foam::Xfer<To> Foam::xferMoveTo(From& t)

様々なListに対する操作を定義した関数

OpenFOAM C++ Documentation : ListOps.H

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1