plantFEMでは、node.js風(あくまで、風です)に簡単にサーバーを立てることができます。
今回は、plantFEMで簡単なサーバーを立てて動かしてみます。
環境はUbuntu 18.04LTS or laterを想定しています。(Windows or macOS用に、dockerを使った起動方法も記載しています。)
plantFEMのインストール
plantFEMは以下のgithubにおいて公開されています。
README.mdの通り、ターミナルに以下のコマンドを打ち込むことで一発でダウンロードとセットアップが完了します。
git clone https://github.com/kazulagi/plantFEM.git && cd plantFEM && ./plantfem setup
次に、インストールを行います。
./plantfem install
Step1: サンプル用のサーバーを立てる
まず、サーバーを初期化します。
./plantfem init
これで、サンプル用のサーバースクリプトがserver.f90にリンクされました。サーバーの中身は以下のような簡単なFortranスクリプトになっています。
program main
use plantFEM
implicit none
print *, "This is a plain script"
end program main
以下のコマンドでサーバーを起動します。
./plantfem run
すると、サーバープログラムが走ります。
This is a plain script
テンプレートを利用してサーバーを立てる。
次に、FortranとplantFEMライブラリを使ったテンプレート集がTutorial/の中にありますので、それらのうちいくつかを利用してサーバーを立てます。
./plantfem new
このコマンドにより、サーバーを新規作成します。
すると、プロジェクト名、プロジェクトの保存先パスを聞かれます。今回はエンターを押してデフォルト名にします。
デフォルトでは、home/untitled/main.f90にスクリプトが生成されます。
最後に、テンプレートの種類を聞かれます。ここでは、1のFile-IOを選択してみます。
>>> new
[Your project name: (default=untitled), if OK, press ENTER]
>>>
[Path of the project (default=/home/username/plantFEM/home/), if OK, press ENTER ]
>>>
Which template do you want to use?
1 : File-IO (std)
2 : Linear solvers (std)
3 ; MPI computing (std)
4 : Array operation (std)
5 : Create Mesh (fem)
6 : Diffusion-1D simulation (sim)
7 : Create soybean (obj)
For more detail, please check ./Tutorial/*
>>> 1
以上により、サーバースクリプトが生成され、かつserver.f90が正常にリンクされました。
以降、home/untitled/main.f90のスクリプトを変更して
./plantfem run
を実行すると、サーバーが走ります。
また、server.f90のリンク先を変更するには、
./plantfem ./your_fortran_script.f90
のように、サーバーに実行させたいスクリプトを./plantfemで呼び出すことでリンク先が変更され、その後実行されます。
なお、サーバープログラムをrunコマンドで実行するためには、Fortran90/95以降の形式でserver.f90にリンクまたはコピーされている必要があります。
ここで、サーバースクリプトは以下のようになっており、hello1.txtからhello10.txtまでの連番ファイルが生成されます。
program main
use std ! standard package of SiCroF library
implicit none
! This example utilizes Input-Output Class, where
! You can handle external files.
! How to use:
! First, create the instance
type(IO_) :: f ! file-IO instance
integer(int32) :: i, num ! int i and int num
! #1 create, edit and close files.
! ----> open file(filepath, filename, extention)
call f%open("./","test",".txt")
! write something
call f%write(str(100.0d0) )
write(f%fh,*) 100.0d0
! and close it
call f%close()
! ----> create sequential files (filepath, filename, extention)
! it creates
! ./hello1.txt
! ./hello2.txt
! ./hello3.txt
! ...
! ./hello10.txt
! for i=1; i<11;i++
do i=1,10
! f.open(filepath, filename, extention)
! str(int) => string
call f%open("./","hello"//trim(str(i)),".txt")
! This
call f%write(str(i))
! and this
write(f%fh,*) str(i)
! are same
call f%close()
call f%open("./","hello"//trim(str(i)),".txt")
! read a line
read(f%fh,*) num
! print(num)
print *, num
call f%close()
enddo
! Importance Index 7 / 10 : [******* ]
end program %
また、サーバーを実行する際に、実行可能ファイル(./a.out)が生成されます。
この実行可能ファイルを走らせることもできます。
./a.out
Dockerを利用したサーバーの実行
Ubuntu意外のOSでは、Dockerを利用してサーバーを立てることができます。
まず、
https://github.com/kazulagi/plantFEM
より、レポジトリをクローンしてきます。
次に、plantFEM/docker/に入ると、Dockerfile等が置かれています。
ここで、windowsであれば、コマンドプロンプト(or powershell)から
build.bat
を実行、Windows意外のosであれば、
./build
を実行します。(注:管理者権限が必要な場合があります。)
その後、docker cpコマンドで手元のサーバースクリプトをplantfem/server.f90として送り込み、docker runコマンドでコンテナを走らせることができます。
また、dockerコンテナ内に入りたい場合、
windowsであれば、コマンドプロンプト(or powershell)から
run.bat
を実行、Windows意外のosであれば、
./run
を実行します。(注:同様に、管理者権限が必要な場合があります。)
まとめ
plantFEMでサーバーを作成し、起動した。
また、Dockerを用いてサーバーを起動した。