LoginSignup
3
1

More than 3 years have passed since last update.

plantFEMでサーバーを立てて動かしてみる。

Last updated at Posted at 2020-07-16

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を用いてサーバーを起動した。

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