Fortran Template Library (FTL) と名付けられたStandard Template Library (STL) みたいなライブラリがFortranでも提供されているので,その使い方のメモ.
コンパイラは Intel Fortran Compiler 19.0.4.243 を使用する.
使い方
ここでは,home
ディレクトリにtemptemp
ディレクトリを作成してFTLの実験をする.
準備
まずはダウンロード:
$ cd ~
$ mkdir temptemp
$ cd temptemp
$ git clone https://github.com/SCM-NV/ftl.git
ftl/makefile
を4箇所編集:
makefile
#PLATFORM ?=gnu
PLATFORM ?=intel
#BUILD ?=debug
BUILD ?=release
#PREFIX ?=/usr/local
PREFIX ?=~/temptemp/ftl/local
#USE_PCRE ?=true
USE_PCRE ?=false
makeするとPREFIX
で指示したlocal
ディレクトリが作成され,必要なファイルが用意される:
$ cd ~/temptemp/ftl
$ make install
$ tree local
local
├── include
│ └── ftl
│ ├── ftlAlgorithms.F90_template
│ ├── ftlArray.F90_template
│ ├── ftlDynArray.F90_template
│ ├── ftlHashMap.F90_template
│ ├── ftlHashSet.F90_template
│ ├── ftlList.F90_template
│ ├── ftlMacros.inc
│ ├── ftlSharedPtr.F90_template
│ ├── ftlhashmodule.mod
│ ├── ftlkindsmodule.mod
│ ├── ftlregexmodule.mod
│ └── ftlstringmodule.mod
└── lib
└── libftl.so
3 directories, 13 files
使用例
使いたいコンテナに応じて,自分でモジュールを用意してコンパイルし (instantiation),
use
して使うことになる.
倍精度実数の動的配列
std::vector<double>
みたいなコンテナを使ってみる.
まず次のような.F90
ファイルを~/temptemp/ftl/local
に作る:
hoge.F90
#define FTL_TEMPLATE_TYPE real(real64) ! 要素は倍精度実数型
#define FTL_TEMPLATE_TYPE_NAME Real ! コンテナの名前に使う.この場合,モジュール名はftlDynArrayRealModule,型名はftlDynArrayReal となる.
#define FTL_TEMPLATE_TYPE_MODULE iso_fortran_env
#define FTL_INSTANTIATE_TEMPLATE
#include "ftlDynArray.F90_template" ! 動的配列のテンプレート
test01.F90
program test01
use,intrinsic :: iso_fortran_env, wp=>real64
use ftlDynArrayRealModule
implicit none
type(ftlDynArrayReal) dArr
dArr=[1.0_wp,2.0_wp,3.0_wp]
write(6,*) dArr%data
end program test01
ここで,マクロを使用するためにhoge.F90
の拡張子は大文字でなければならない.
コンパイルする:
$ cd ~/temptemp/ftl/local
$ ls
hoge.F90 include lib test01.F90
$ ifort -I include/ftl/ -c -diag-disable=6843 hoge.F90
$ ls
ftldynarrayrealmodule.mod hoge.F90 hoge.o include lib test01.F90
$ ifort hoge.o test01.F90
$ ./a.out
1.00000000000000 2.00000000000000 3.00000000000000
コンテナに含まれるメソッドについては FTLのWiki を参照されたい.
STLを普段使ってる人なら想像できるはず.
工事中.