LoginSignup
3
2

More than 3 years have passed since last update.

FortranでTemplate Library (FTL) を使う

Posted at

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を普段使ってる人なら想像できるはず.

工事中.

3
2
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
3
2