日々の記録

日々の記録

PR

×

キーワードサーチ

▼キーワード検索

サイド自由欄

2024.02.13
XML
カテゴリ: linux
Fortranで巨大なファイルをソートする必要があり、いい方法がないかと探したら、Fortran標準ライブラリというものがあるらしい。
その中のsort_indexというコマンドが使えそうだ。
やったことは以下の通り。
まずstdlibのインストール
#cd stdlib
#cmake -B build
ここで、エラーが出る。gccのバージョンは9以上必要とのこと。
centos7の場合、devtoolsetを使えば、バージョンを上げられるが、
結局、これでも同じエラーが出るので、諦める。

almallinux9のマシンで再度挑戦。
このマシンでは、gcc-11である。
#cmake -B build
再びエラー。
今回は、fyppがないとのこと。
#pip install fypp
ここでもエラー。
いろいろ試したところ、どうもpythonが古いようだ。
pythonをpyenvで管理しているのだが、pyenvも古くてpythonの更新ができない。
そこで、pyenvの更新。
#cd .pyenv/plugins
#git clone https://github.com/pyenv/pyenv-update.git
#pyenv update
この後、python(anaconda)の更新
# pyenv install anaconda3-2023.09-0
# pyenv global anaconda3-2023.09-0
これで、fyppのインストールができる。
# pip install fypp
ここから、stdlibのインストールに戻る。
#cmake -B build
#cmake -build build
#su
#cmake -install build
標準では、
/usr/local/lib64/にlibfortran_stdlib.a
/usr/local/include/fortran_stdlib/GNU-11.4.1/にstdlib_sorting.mod
がインストールされるようだ。
GNU-11.4.1は、gccのバージョンだと思う。

次に、fortranのプログラムに関して。
行頭に以下の文を入れておく。
       use :: stdlib_sorting, only: sort_index,int_size
それと、index用の配列を定義しておく。
       INTEGER(int_size), allocatable :: index(:)
例えば、integerのarrayをsortの対象とすると、
  INTEGER, allocatable :: array(:)
...
     allocate (array(num))
     allocate (index(num))
arrayとindexは、同じ大きさの配列であるということ。
...
     call sort_index(array, index)
オプションなしだと、call後に、arrayは小さい順に並ぶ。
index配列にcall前に何か数字を入れておく必要はない。
call前、arrayの一番小さな数値がn番目にあったとすると、call後、index(n)=1となる。

makefileは、以下のようになると思う。

TARGET = a.out
OBJECTS = main.o
FC = gfortran 
FFLAGS = -O2 -mcmodel=medium
INCLUDE=-I /usr/local/include/fortran_stdlib/GNU-11.4.1/
LFLAGS=-L /usr/local/lib64 -l fortran_stdlib
.SUFFIXES : .o .f90
.f90.o:
        ${FC} ${FFLAGS} ${INCLUDE} -c $<
${TARGET} : ${OBJECTS}
        ${FC} ${FFLAGS} -o $@ ${OBJECTS} ${LFLAGS}
.PHONY: clean
clean:
        ${RM} ${TARGET} ${OBJECTS} 





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2024.02.13 11:42:39


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: