20200907のLinuxに関する記事は5件です。

有限要素法のデータモデル EXODUS導入の覚書

はじめに

EXODUSは有限要素解析のデータ格納用のデータファイルです。
他のコードで計算結果を流用する際の中間生成のファイルとしても、計算結果を格納する形式としても利用できるフォーマットになります。

これまで自作のFEMについては計算結果をvtk形式で出力していましたが、EXODUSの方が再利用性が高そうだったのでこちらに移行中です。

導入

下記リポジトリよりコードを持ってきます。
https://github.com/gsjaardema/seacas#exodus
導入についてもこちらに則れば基本的に問題ないかと思います。

ここでは~/localでチェックアウト・ビルドすることを想定します。

cd ~
mkdir local
cd local
git clone https://github.com/gsjaardema/seacas.git
cd seacas && export ACCESS=`pwd`

Third-Party Library (TPL)としてNetCDFとHDF5を用意する必要がありますので、それぞれ下記からダウンロードします。
https://www.unidata.ucar.edu/downloads/netcdf/
https://portal.hdfgroup.org/display/support/HDF5%201.12.0

cd TPL/hdf5
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.0/src/hdf5-1.12.0.tar.gz
tar -zxvf ./hdf5-1.12.0.tar.gz
cd hdf5-1.12.0
../runconfigure.sh
cd ../../netcdf
wget https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-c-4.7.4.tar.gz
tar -zxvf ./netcdf-c-4.7.4.tar.gz
cd netcdf-c-4.7.4/
mkdir build
cd build
sh ../../runcmake.sh
make && make install
cd ../../../../
mkdir build
../cmake-exodus
make && make install

使い方

基本的には下記マニュアルを見ればOK
https://gsjaardema.github.io/seacas/exodusII-new.pdf

動作確認も含めて、またの機会にまとめられればと思います。
以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

有限要素法(FEM)のデータモデル EXODUS導入の覚書

はじめに

EXODUSは有限要素解析のデータ格納用のデータファイルです。
他のコードで計算結果を流用する際の中間生成のファイルとしても、計算結果を格納する形式としても利用できるフォーマットになります。

これまで自作のFEMについては計算結果をvtk形式で出力していましたが、EXODUSの方が再利用性が高そうだったのでこちらに移行中です。

導入

下記リポジトリよりコードを持ってきます。
https://github.com/gsjaardema/seacas#exodus
導入についてもこちらに則れば基本的に問題ないかと思います。

ここでは~/localでチェックアウト・ビルドすることを想定します。

cd ~
mkdir local
cd local
git clone https://github.com/gsjaardema/seacas.git
cd seacas && export ACCESS=`pwd`

Third-Party Library (TPL)としてNetCDFとHDF5を用意する必要がありますので、それぞれ下記からダウンロードします。
https://www.unidata.ucar.edu/downloads/netcdf/
https://portal.hdfgroup.org/display/support/HDF5%201.12.0

cd TPL/hdf5
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.0/src/hdf5-1.12.0.tar.gz
tar -zxvf ./hdf5-1.12.0.tar.gz
cd hdf5-1.12.0
../runconfigure.sh
cd ../../netcdf
wget https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-c-4.7.4.tar.gz
tar -zxvf ./netcdf-c-4.7.4.tar.gz
cd netcdf-c-4.7.4/
mkdir build
cd build
sh ../../runcmake.sh
make && make install
cd ../../../../
mkdir build
../cmake-exodus
make && make install

使い方

基本的には下記マニュアルを見ればOK
https://gsjaardema.github.io/seacas/exodusII-new.pdf

サンプルとして、寸法が1 x 1 x 10の片持ち梁を10個の8節点6面体要素で分割したメッシュをEXODUS形式で出力する場合のコードを書きに示します。

#include <exodusII.h>
#include <iostream>
#include <vector>

int main(){
  int N;
  N = 10; // the length of cantilever

  int CPU_word_size, IO_word_size, exoid;
  CPU_word_size = sizeof(double);
  IO_word_size = 8;

  exoid = ex_create("test.exo",                //file Name
            EX_CLOBBER,                //create mode
            &CPU_word_size,            //CPU float word size in bytes
            &IO_word_size);            //I/O float word size in bytes


  int dim = 3;           // dimension
  int NoN = 4 + 4 * N;   // num of nodes
  int NoE = N;       // num of elements
  int NoEB = 1;          // num of element blocks
  int NoNS = 0;          // num of node sets
  int NoSS = 0;          // num of side sets

  ex_put_init(exoid, "Test", dim, NoN, NoE, NoEB, NoNS, NoSS);
  std::vector<double> x(NoN), y(NoN), z(NoN), i2nn(NoN);
  char* coord_names[3];
  coord_names[0] = "xcoor";
  coord_names[1] = "ycoor";
  coord_names[2] = "zcoor";

  for(int i=0;i<=N;i++){
    x[i*4] = 0;   y[i*4] = 0;   z[i*4]=i;   i2nn[i*4] = i*4 + 1;
    x[i*4+1] = 1; y[i*4+1] = 0; z[i*4+1]=i; i2nn[i*4+1] = i*4 + 2;
    x[i*4+2] = 1; y[i*4+2] = 1; z[i*4+2]=i; i2nn[i*4+2] = i*4 + 3;
    x[i*4+3] = 0; y[i*4+3] = 1; z[i*4+3]=i; i2nn[i*4+3] = i*4 + 4;
  }
  ex_put_coord(exoid, x.data(), y.data(), z.data());
  ex_put_coord_names(exoid, coord_names);
  ex_put_node_num_map(exoid, i2nn.data());


  //for(int i=0;i<NoE;i++)i2nn[i] = i+1;

  int NoN_for_EB = NoE; // number of nodes for element block
  int NoN_per_Elem = 8; // number of nodes of each element
  int ebid = 1;         // element block id
  ex_put_elem_block(exoid, ebid, "hex", NoN_for_EB, NoN_per_Elem, 0);

  std::vector<int> connectivity(NoE * NoN_per_Elem);
  std::vector<int> i2en(NoE); // index to element number

  for(int i=0; i<NoE; i++){
    for(int j=0;j<8;j++){
      connectivity[i*8 + j] = i*4 + j +1;
    }
    i2en[i] = i+1;
  }
  ex_put_elem_conn(exoid, ebid, connectivity.data());
  ex_put_elem_num_map(exoid, i2en.data());
  ex_close(exoid);

  return 0;
}

例えば下記のようにコンパイルできます。

g++ main.cpp -I ~/local/seacas/include -L ~/local/seacas/lib -lexodus

出力したtest.exoをParaviewで見ると下記のようになります。
image.png

今回は節点量や要素量を出力していませんので、コンターは要素IDになります。

終わりに

今回は有限要素法の結果を格納可能なEXODUS形式について、その導入と動作確認を示しました。
もっと優れたファイルタイプがありましたら教えていただけると幸いです。

以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP_UMLの--helpをgoogle翻訳で翻訳

オブジェクト指向の勉強をしたくなりました。PHPを普段使っているのですが、ツールがあまり見つからずPHPSTORMなら自動生成してくれるみたいだけど、お家の環境にはないのでググったところPHP_UMLというツールを発見。
しかし使い方がわからない&英語わからないので翻訳することにしました。

↓もっと便利なツールを見つけて記事にしました。

クラス図を作成するもっと便利なツールみつけて記事にしました。
https://qiita.com/tdera/items/1a0dc91d37a89c22d4ba
コチラのほうが参考になるかもです。。


これを使って既存フレームワークの解析をしていきたいです。

PHP_UML

結構古いツールみたいです。。でもちゃんと動いてくれればOK。
https://pear.php.net/package/PHP_UML

-o directory

出力ディレクトリパス、またはファイル名(提供されない場合、XMIコードは画面に印刷)

-f format, --format=format

出力フォーマット: "xmi"(デフォルト)、「html」、「htmlnew」、「php」
html / htmlnew / phpの場合、必要に応じて独自のXMIファイルを提供し、次のように渡しますargument to phpuml

-x XMI version

生成するXMIバージョン(1または2)

-n name

生成されたUMLモデルの名前

-e encoding

出力文字エンコーディング

--no-deployment-view

配置ビューの生成を無効にする

--no-component-view

コンポーネントビューの生成を無効にする

--no-dollar

変数のドル記号を削除します

--no-docblocks

docblockの解析を無効にする(@package@param ...)

--show-internal

@internalでマークされた要素を含める

--only-api

@apiでマークされた要素のみを含める

-i pattern, --ignore=pattern

無視するパターン/パス名(example: .svn)

-m pattern, --match=pattern

一致するパターン (default is: *.php)

-l errorLevel, --error-level=errorLevel

エラー報告レベルを設定します(0サイレントモード、PHPエラーの場合は1、例外、すべてのエラーの場合は2、警告)

--pure-object

PHP_UMLが必要な場合は、このスイッチを使用します非オブジェクト指向のすべてを無視するコード

-h, --help

このヘルプメッセージを表示して終了

-v, --version

プログラムのバージョンを表示して終了する

引数

input
解析するPHPファイルまたはディレクトリ(例:D:/ htdocs /)スペースを使用して、さまざまなエントリを区切ります。デフォルトでは、PHP_UMLは現在のディレクトリを解析します。

例1 phpuml D:/htdocs/
PHP_UMLは、D:/ htdocs /を再帰的に解析し、XMIコードを表示します。

例2 phpuml /var/www/test -o /tmp -x 1 -n Foo -m *.php6 -i .svn
PHP_UMLは/ var / www / testを再帰的に解析し、php6のみを保持します
ファイル、およびsvnフォルダーを除外します。 UMLモデルの名前は「Foo」、およびバージョン1で生成されたXMIファイルは、次の場所に保存されます「/tmp/Foo.xmi」

...なんかちょっと変だな。

なんか画像にしてだしてくれるツール別に見つけたのでそっち使ってみます。
https://github.com/jakobwesthoff/phuml

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Katacoda上で手軽に検証シリーズ "Cockpitをインストールして使ってみる編"

本記事では、LinuxをGUIで管理するためのソフトウェアである"Cockpit"を”Katacoda"という学習サービス上で手軽に試すための方法について解説します。

本記事の対象者

手元にLinux環境が直ぐには用意できないが、Cockpitを試しに使ってみたい人

Cockpitとは

Web ブラウザを通してLinuxの単一及び複数システムのモニターが出来るUIツールです。
Linuxの監視に使われる機能は、種類も多く、詳細を見るのには概ねCLIで有ることも多いです。

https://cockpit-project.org/running.html
image.png

なお、今回はあくまでもKatacoda上で同機能の実装を手軽に行うための手順にフォーカスしていますので、Cockpitで何が出来る、それ自身の使い方については別途お調べ頂くようお願い致します。

Katacodaとは

現在ではオライリー社が提供する無償でのオープンソース系ソフトウェアの学習デモ環境です。
メジャーLinuxディストリビューションや、最近流行りのDockerやKubernetes、Ansibleなどもブラウザ上からアクセスして学習が出来ます。
image.png

Katacoda上でのCockpitにアクセスするまでの流れ

  1. KatacodaでLinuxを利用するためのアカウント作成及びログイン(無料)
  2. CentOS環境をレンタルして、rootパスワードを任意のパスワードに変更する
  3. パッケージ"Cockpit"をインストールする
  4. ”Cockpit”をCentOS内で起動する
  5. ブラウザを使い、CentOSにアクセスしてログインする

1. KatacodaでLinuxを利用するためのアカウント作成及びログイン(無料)

Katacodaにアクセスして、アカウントを作成します。(図内右上)
image.png

2. CentOS環境をレンタルして、rootパスワードを任意のパスワードに変更する

Katacodaのトップページには利用可能なラボ環境のメニューがアイコンで表示されています。
今回はCentOSを利用しますので、”Linux & Operating Systems"を選択します。
image.png

真ん中の”Learn CentOS"を選択します。
image.png

左の”Playground"を選択します。
image.png

次のページでは”Start”をクリック頂くと、下図のようにCLI画面が登場します。
まずここで、root管理者のパスワードを設定します。

passwd 

image.png
警告的なものが出ているのは、セキュリティ上弱い文字列を使っているためです。今回は学習目的なので、自分にとって分かりやすいテンポラリーなものを設定で構いません。

3. パッケージ"cockpit"をインストールする

続いて、yumコマンドで"cockpit"をインストールします。

yum install cockpit (インストールに対してYesの応答をユーザーが手動で承認する)
または
yum -y install cokpit (インストールに対してYesの応答を自動で行ってくれる)

image.png

数秒でインストールが完了しました。
image.png

4. ”cockpit”をCentOS内で起動する

# cockpitのサービスを起動(システムの起動時に自動起動化も実施)
systemctl start --now cockpit

# cockpitのサービスの起動状態を確認
systemctl status cockpit 

緑の文字で、activeが確認出来ました。これでCockpitが動き出しました。
image.png

ここで本来ならば、ファイアウォールポートの開放も必要です。Cockpitの場合はTCP 9090をOpenにする必要があります。
しかし、Katacoda環境ではfirewalldが動作しておりませんので、その設定を入れなくてもCockpitを利用する事は可能です。
ファイアウォールポートの開放手順を確認したい場合は、Cokpitのページ上に各ディストリビューションのファイアポート開放コマンドの記載がありますので、そちらを参照ください。

5. ブラウザを使い、CentOSにアクセスしてログインする

Katacoda内のCLI画面上部に"+"のアイコンがあります。
こちらをクリックすることで、当該Linuxに対してアクセスが出来るメニューが表示されます。
image.png

上から3つ目の"Select port to view on Host 1"を選択します。
image.png

下記のポート指定欄にてCockpitが利用するデフォルトポート番号の9090を入力後、”Display Port"をクリックします。
image.png

ブラウザ上でCockpitの起動が出来ました。
ログインには次の情報を入力しましょう。(ユーザー名 root / パスワード 先程設定した値)
image.png

ログイン後は以下のように当該Linux OSについての情報をグラフィカルに確認することが出来ます。
パフォーマンスチャートグラフもリアルタイムに動くので面白いです。
image.png

おまけ katacoda上でログ採取も可能

# Sosreportのインストール(Katacoda環境上のCentOSには未インストールのため必ず実施)
yum install sos

上記作業実施後、ログ採取のタブからログの取得が可能です。
image.png
Katacoda内のCentOSからtar.xz形式でのファイルが取得出来ました。もちろん解凍も可能です。
image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

echoで文字数をカウント

改行コード含む

yuta:~ $ echo 'aiueo' | wc -m
6

改行コード含まない

yuta:~ $ echo -n 'aiueo' | wc -m
5
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む