Help us understand the problem. What is going on with this article?

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

plantFEMでは、node.js風(あくまで、風です)に簡単にサーバーを立てることができます。
今回は、plantFEMで簡単なサーバーを立てて動かしてみます。
環境はUbuntu 18.04LTS or laterを想定しています。(Windows or macOS用に、dockerを使った起動方法も記載しています。)

plantFEMのインストール

plantFEMは以下のgithubにおいて公開されています。

https://github.com/kazulagi/plantFEM

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

soybean
HPC: https://github.com/kazulagi/plantFEM
https://github.com/kazulagi/plantFEM
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした