OpenSees Blog 日本語 目次

最初に「このブログをみるためのガイド」をご覧ください。

Update中OpenSees コマンド 日本語解説 の 目次 OpenSeesコマンド はじめての方は「ここから
このblogで使用しているOpenSeesコマンド集は「ここ」 Update中
OpenSees のソースコード 解析に挑戦してみる 目次最初のページは「ソースコードのダウンロードとビルド」
Appendix:C言語での 「有限要素法における平面トラスの解析」目次最初のページは「Microsoft Visual Studioの導入方法」







目次の中で、更新したページにはNewがついています

このブログ内の単語を検索したい場合は、左上OpenSeesロゴの上に検索窓から検索できます。


2014年12月24日水曜日

冬休みのお知らせ

OpenSeesファンの皆様

このブログを見ていただきましてありがとうございます。毎週1,2ページの投稿を目標にしておりますが、年末年始はお休みさせていただきます。

現在
OpenSees のソースコード解析に挑戦してみる
Appendix: 「有限要素法における平面トラスの解析」プログラムをC言語で書いてみる

について、同不順でアップしています。
Googleさんの統計によりますと
このブログを開設してから 約6か月、本日まで4400ビュー(*)、約300人ぐらいの方に見ていただいているようです。
また、日本ばかりでなく、アメリカ、ロシア、ドイツ、フランス、トルコ、台湾、ポーランド、ウクライナercの国の方も閲覧しているようです。ありがとうございます。

こちらのブログは、あくまで趣味として、まったりと追記しておりますが、
冬休み後も、同じ調子で進めていきますので、よろしくお願いします。

Innovativeな建物がたくさんできますように!

2014/12/24 Merry Christmas!
Satoko Toengawa

(*)Tonegawaが閲覧したビュー数、リダイレクトしたビュー数は除いた数字です

2014年12月22日月曜日

OpenSees Developer : プログラムの基本的な流れ(メモ)







このTclModelBuilderでは、
OpenSees の node, element, fix 等のデータも読み込んでいます。

<Opensees コマンド>

node 1   0.0  0.0
node 2 144.0  0.0
node 3 168.0  0.0
node 4  72.0 96.0

<Opensees コマンド>
fix 1 1 1
fix 2 1 1
fix 3 1 1

<Opensees コマンド>
element Truss 1 1 4 10.0 1
element Truss 2 2 4  5.0 1
element Truss 3 3 4  5.0 1

これらOpenSeesコマンドは、すべてTcl_CreateCommand( )ファンクションを起動することによって、
その内容を読み込んでいます。
読み込む作業を行っているファンクションも、Tcl_CreateCommand( )に下記の様に書かれています。


 Tcl_CreateCommand
(interp, "<Openseesコマンド>", 
<OpenSeesコマンドを読み込むファンクション>,
 (ClientData)NULL, NULL);



たとえば
Tcl_CreateCommand(interp, "node", TclCommand_addNode,  (ClientData)NULL, NULL);


は、 OpenSeesコマンドのnodeを読み込みますが、
読み込むファンクションは、TclCommand_addNode( )です。

このTclCommand_addNode( )の中で、
Nodeクラスに OpenSeesコマンドのNodeのデータをセットします。

--------------

他のコマンドも同じようにして、データをセットしていきます。

セットしたデータをつかっての構造計算は、
<Opensees コマンド> analyze 1
で、行いますが、これは、


C:\OpenSees-work\OpenSees5621\OpenSees\SRC\tcl\commands.cpp
または
tclプロジェクトのcommands.cpp
の中の
int OpenSeesAppInit(Tcl_Interp *interp)

の中で定義されていた

Tcl_CreateCommand(interp, "analyze", &analyzeModel,
     (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
における
&analyzeModel( )
で、計算が行われます。
(&がついているので、同じファイルの中に、ファンクションが定義されています)

----------------

そして

















C言語プログラムの構成



C言語で構成された”main.exe”を例とした、プログラム構成についての説明です。

Main.c : test.exeのメインプログラム

subA.c, sub.c : main.cから呼ばれるサブルーチンが入っているプログラム

stdio.h, string.h, math.h, malloc.h : MS-windowsに標準装備されているライブラリ(右にdllファイル)を使用するためのヘッダーファイル

    stdio.dll : 外部ファイルの読み書き等のファンクションが定義されている
    string.h : 文字列の取り扱いについてのファンクション定義されている
    math.h : sin, cos. ルート計算などの数値計算についてのファンクション定義されている
    malloc.h : 行列などで使用するメモリー使用についてののファンクション定義されている

Libx.h : 自分で作成したライブラリLibX.libを使用するためのヘッダーファイル

Image.h : 外部で公開されている(webなどで提供されているオープンソースなどで作成された)ライブラリ image.dllを使用するためのヘッダーファイル

「有限要素法における平面トラスの解析」プログラムは、main.c MS-windowsに標準装備されているライブラリを使用するためのヘッダーファイルで構成されています。

なお、
ライブラリには、拡張子(extension)lib dllの2種類があります。

Lib : static library 
mainプログラムのリンク時に、取り込まれます。そのため、main.exeが動作している時のみ、このライブラリを使用することができます

Dll : dynamic link library :
main.exe実行時に、このライブラリを呼んで動作します。そのため、どのアプリケーションが動作していても、このライブラリの内容を自由に使うことが可能です。



「有限要素法における平面トラスの解析」プログラムをC言語で書いてみる : 目次

2014年12月16日火曜日

Microsoft Visual Studioの使用方法 (4)



次に、デバッグ→ステップオーバー または F10を押します。



そうすると、黄色の矢印が
testC=(double)(testA + testB + TEST_CONSTANT);
の行に移り、かつ、ウオッチの中のtestAの数字が赤く21と表示されます。
これは、
testA++;
が計算され、testAに1が和されたためです。

ちなみに、もし途中停止している行がサブルーチンの実行を指示する行だった場合、デバッグ→ステップイン または F11を押すことによって、プログラムの表示がサブルーチンのプログラム行にうつります。
ステップオーバーもステップインもプログラムを1行ずつ実行するためのものです。

11) プログラムの終了
このままF10を押して、
Return 0;
のところまでプログラムを進めます。

そして、図4-17の赤で囲まれているDOSのコマンドプロンプトのwindowを表示させると、
testD=0.976591 と表示されています。
これは
pintf("testD=%f\n",testD);
の実行結果によっての表示です。

またウオッチの中のtestDを見ると 0.97659086794356575 と表示されています。
これは、DOSのコマンドプロンプトのwindowで表示されているtestDの値と同等であることがわります。




























F5を押して、プログラムを終了させます。
もし、プログラムを途中で終了したい場合は、デバッグ→デバッグの停止 または shift+F5を押します。

なお、” Visual Studio Express 2012 for Windows 8”は無料なので、持っているwindowsPCにいくつでもインストールできますが、作成途中のプロジェクト(ソリューション)を移植したい場合は、

指定した場所(フォルダー)の中に作成されている”test”のフォルダーをすべて、コピーすることによって、他のWindowsPCでのプログラム作成作業を行うことができます。
この”test”フォルダーの中の test.sln が プロジェクト(ソリューション)ファイルなので、これをクリックすることで、MS-VSでのプログラミング作業を継続することができます。
(または、MS-VS起動画面の“プロジェクトを開く“で、test.slnを選択しても良いです)



















 次のページ →


 C言語プログラムの構成

「有限要素法における平面トラスの解析」プログラムをC言語で書いてみる : 目次

2014年12月9日火曜日

Microsoft Visual Studioの使用方法(3)


10) プログラムのデバッグ
このプログラムを走らせて、デバッグ作業を行います。まず、
testA++;
の上で右クリックし、”ブレークポイントの挿入”をクリックします。



























testA++;
の行に赤丸がつきます(もし、これを消したい場合は、右クリックでブレークポイントの削除や無効を行います)












「デバッグ→デバッグ」の開始 または F5を押して、プログラムを走らせます。























testA++;

の行に黄色の矢印が表示され、プログラムはこの行の計算「前」で途中停止します。
























ここで、各シンボルの上にマウスポインタをかざすと、そのシンボルの中に入っている値を見ることができます。
たとえば、testBの上にかざすと”50”と表示されます。
下のエリアでは、”自動変数”、 ”ローカル(変数)”、”スレッド”、 ”モジュール”で、途中停止している現在の状態を見ることができます。

”ウオッチ”をクリックします。この”ウオッチ”では、自分が見たいシンボルを表示させることや、シンボルの中の数を変更することができます。

ここでば、”ウオッチ”に、testA と testD を キーボードで入力します。
testAは、testA++;の行の計算をまだ行っていないので20となっています。
testDは、まだ入力がなにも行われていないので、めちゃくちゃな値(testDに割り当てられたPC上のメモリにたまたま入っていた値)が表示されています。



 次のページ →

 Microsoft Visual Studioの使用方法 (4)


「有限要素法における平面トラスの解析」プログラムをC言語で書いてみる : 目次

2014年12月2日火曜日

OpenSees Developer : プログラムの基本的な流れ(modelコマンドまで)

OpenSees Developer : ソースコードのダウンロードとビルド
で、作成されたプログラムを、Debugモードで走らせてみます。

使用するtcl スクリプトファイルは、OpenSees Basic Examples (基本的なトラス解析) 
です。

メインプログラムは、ここにあります。
OpenSees\SRC\tcl\tclAppInit.cpp
または
OpenSeesプロジェクトのtclAppInit.cpp











main(int argc, char **argv)

から、プログラムは走り始めますが、
argcには、 Opensees.exe の引数の数、 ** argvには、引数の文字列が入ります

ここで 使用している文字列は、
Opensees C:\\OpenSees-work\\OpenSees5621\\truss-test.tcl
ですので、
argcには 2
argv[0] には Opensees
argv[1] には C:\\OpenSees-work\\OpenSees5621\\truss-test.tcl
が 入っています。

これらの引数は、同じ main( ) の中で呼ばれている

 g3TclMain(argc, argv, TCL_LOCAL_APPINIT, 0, 1);

に引き継がれます。

このg3TclMain( )は

OpenSees\SRC\tcl\tclmain.cpp
または
OpenSeesプロジェクトのtclmain.cpp
にあります。

この
tclmain.cpp ファイルの中で

Tcl_FindExecutable(argv[0]);

など、Tcl_xxxx で始まるファンクションは、tcl の dynamic link library の中のファンクションです。

tclのソースコードは無いため、このラインまでプログラムが走ってきたとき、F11キー、または「ステップ イン」を行っても、tclmain.cpp ファイルの次の行へ移るだけです。

g3TclMain( )
の中の、

numParam = OpenSeesParseArgv(argc, argv);

は、構造計算に使うコマンド(model や node など)以外のコマンドがOpenseesの引数として指定された時の処理を行っています。

次に
tclStartupScriptFileName
のシンボルの中に、構造計算するためのコマンドが保存されているファイル、tclスクリプトファイル(Openseesの引数)
C:\\OpenSees-work\\OpenSees5621\\truss-test.tcl
が代入されます。




g3TclMain( ) の中の
赤丸部分
 if ((*appInitProc)(interp) != TCL_OK) {

で、tclAppInit.cpp の中の
int Tcl_AppInit(Tcl_Interp *interp)

に、移ります。

さらに
 if (OpenSeesAppInit(interp) < 0)

で、
C:\OpenSees-work\OpenSees5621\OpenSees\SRC\tcl\commands.cpp

または
tclプロジェクトのcommands.cpp
の中の


int OpenSeesAppInit(Tcl_Interp *interp)
に、移ります。

この中では、tclスクリプトファイルの中にかかれている tclスクリプト(OpenSeesのコマンド)を
解析しています。
まず、
"wipe"
"print"
"analyze"
など、(まだ、ここまでの所では、セットされていませんが)構造計算のためのデータがセットされたのち、実際にOpenSeesが起動するためのコマンドが、順に中身を解析していったtclスクリプトファイルの中にあった場合、ここから実際のOpenSeesが起動されます 
詳細については、(それ以外のコマンドについて)を参照

それ以外のコマンドは
return myCommands(interp);

により、

C:\OpenSees-work\OpenSees5621\OpenSees\SRC\modelbuilder\tcl\myCommands.cpp

または
tclプロジェクトのmyCommands.cpp
の中の

int myCommands(Tcl_Interp *interp)
に移ります。

ここで、

 Tcl_CreateCommand(interp, "model", specifyModelBuilder,
     (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
により、
specifyModelBuilder
が指定されます。

このspecifyModelBuilder( )の中で、model コマンドが解析されます。

specifyModelBuilder( )
myCommands.cpp にありますが、


このファンクションを呼んでいる場所は
上記図の 緑丸部分

code = Tcl_EvalFile(interp, tclStartupScriptFileName);

です。

なお、

tcl スクリプトファイル の model コマンドは、以下の様に指定されています。

<Opensees コマンド> model BasicBuilder -ndm 2 -ndf 2

ここ specifyModelBuilder( ) では、
次元数と、自由度数を OpenSeesのプログラムに読み込む
つまり、 Model 用の クラス
class TclModelBuilder
に、データ(次元数と、自由度数)をセットすることが目的です。

specifyModelBuilder( )で
最初に、

model BasicBuilder -ndm 2 -ndf 2
のコマンドのストリング(文字列)を読み込み、解析した後、

数字が間違っていないか、
例えば、ndm が 0にセットされていたり等
をチェックした後、

class TclModelBuilder
の中の

private:
    int ndm; // space dimension of the mesh
    int ndf; // number of degrees of freedom per node

にそれぞれ、2 と 2 が セットされます。

このclassへのセットは
 TclModelBuilder *theTclBuilder = new TclModelBuilder(theDomain, interp, ndm, ndf);

で行われています。

TclModelBuilderの constructor は


C:\OpenSees-work\OpenSees5621\OpenSees\SRC\modelbuilder\tcl\TclModelBuilder.cpp
または
tclプロジェクトのTclModelBuilder.cpp

にあります。

 次のページ → 
OpenSees Developer : プログラムの全体的な流れ


OpenSees のソースコード解析に挑戦してみる : 目次

Microsoft Visual Studioの使用方法(2)

<有限要素法> Microsoft Visual Studioの使用方法(1) の続きです

4) test.cppファイルを開いて、下記の様にプログラムを書いてみます





























下記表に各行の解説をしました。

#include "stdafx.h" プロジェクトが作成されると自動的にこれがついてくる。
Windowsプログラムで標準的につかうヘッダーを総称したもの。絶対消さないこと。
#include プログラムの中で使用するsin()ファンクション
を呼び出すためのヘッダーファイル
#define TEST_CONSTANT 100 定数の定義。
定数はすべて大文字で書くのがお作法
int _tmain(int argc, _TCHAR* argv[]) メインプログラム。引数のargcやargv[]は、
外部からの入力データがある
ときに使用。変更しないこと
aaa ファンクション
を呼び出すためのヘッダーファイル
aaa ファンクション
を呼び出すためのヘッダーファイル
{ プログラムの始まり
int testA; testA というシンボルを
integer で宣言
int testB = 50; testB というシンボルをinteger で
宣言しているが、ここでは
初期値として50も入れている
double testC; testC というシンボルをdouble で宣言
testA = 20; testA に20を代入している。
testAは20となる
testA++; testA=testA+1 と同じ。
testAは21となる
testC=(double)(testA + testB + TEST_CONSTANT); 右側の式は、testA.testB.TEST_CONSTANTを合算している。(171になる)
右側はすべてintegerで宣言されているので、integer形式になるが、答を代入したいtestCはdoubleで宣言されている。そのため、integerからdoubleへの変換をしなければいけないが、(double)と書くことによって、これを実現している。
double testD = sin(testC); プログラムの途中で、宣言をすることもできる。
ここではtestDをdoubleとして宣言。testCのsinを代入している
printf("testD=%f\n",testD); testDの結果をコンソール(コマンドプロンプト)に表示している
return 0; メインプログラムの戻り値
(ここでは、プログラムの実行結果がエラーではないので0を返している)
} プログラムの終了




















































integer宣言 : 宣言したシンボルは整数のみを取り扱う
double宣言 : 宣言したシンボルは小数点のつく数を取り扱う

5) プログラムをコンパイル、リンクします。
MS-VS上でのC(またはCPP)プログラムのコンパイル、リンクは、プロジェクトの中ですでに作成されているので、特に新たに書き起こす必要はありません。コンパイル、リンクのことを“ビルド(Build)”と言います。
ビルドは、「デバッグ→ソリューション」の「ビルド」をクリックすることによって行われます。
















もし、コンパイルエラー等がなかったら、“出力”部分にtest.exeが生成されたことが表示されます。















指定した場所(フォルダー)を見てみると、”test”のフォルダー中に”debug”フォルダーが生成され、その中にtest.exeが生成されているのがわかります。このtest.exeは次で説明するdebug情報が入っているので、最終的なexeプルグラムよりファイルサイズが大きくなっています。


















 次のページ → 

 Microsoft Visual Studioの使用方法(3)


「有限要素法における平面トラスの解析」プログラムをC言語で書いてみる : 目次

2014年11月25日火曜日

Microsoft Visual Studioの使用方法(1)

Microsoft Visual Studio(以下MS-VS)のCプログラミングでの使い方を理解するため、MS-VSを使用して簡単なコンソールアプリケーション プログラムを書いてみます。
同時にC言語の基本的な使い方も解説します。プログラム書いた事のない方向けです。

なお、作業したマシンがWindows7ですので、スクリーンショットはすべて、Windows7での画像です
また、作成した有限要素法プログラムは、MS-DOSコマンドプロンプトで起動する、コンソールアプリケーションとして作成しましたので、以下、これに沿った説明となります。

1) MS-VSを起動します



2) MS-VSの画面から、赤線の”新しいプロジェクト”をクリックし、表示されたウインドウの赤線の”W32コンソールアプリケーション”を選択し、縦の赤線の部分に作成するプログラム名(プロジェクト名)と、プログラムを格納する場所(フォルダー)を入力し、OKボタンをクリック。




























ここでは、作成するプログラム名は、「test」という名前にしました。

ウイザードがでてくるので、図のように設定し、完了ボタンを押します。










3) 下記の様な画面が表示されます。
ここでは”test.cpp”が、メインプログラムとなります。プロジェクト名は、左側に表示されている”test”となっているのがわかります。























ここでソースコードは拡張子(extension)がcppとなっていて、C++のプログラムファイルとなっていますが、cppでも Cのプログラムを作成できるので、これはこのままにしておきます。

ここで、この"test"プロジェクトで指定した場所(フォルダー)を見てみると、”test”のフォルダーが作成され、そのフォルダーの中の”test”フォルダーの中にtest.cppが生成されているのがわかります。
このフォルダーの中には、ほかにもファイルが生成されていますが、これはMS-Windows上でtest.exeが動作するために必要なファイル群で、特にこの文書の目的においては内容を理解することはないので説明を割愛します。




「有限要素法における平面トラスの解析」プログラムをC言語で書いてみる : 目次

2014年11月16日日曜日

Microsoft Visual Studioの導入方法


このプログラムは、 Microsoft Visual Studio を使用して作成しましたので、ここでは最初にMicrosoft Visual Studioの導入方法について書きます。(2014年11月現在)

(2015年9月現在) 
このページで紹介しているサイトにアクセスすると、” Visual Studio Express2010”ではなく
” Visual Studio 2015” のページに変更されています。
ほぼ使用方法は同じですので、これらに関連するブログページを参照しながら、2015を使用していただければと思います。

Microsoft Visual Studioとは
http://e-words.jp/w/Visual20Studio.html から

Microsoft社がリリースしている、ソフトウェア開発スイートです。Visual C++やVisual Basicをはじめとした、複数のプログラミング言語に対応したソフトウェア開発ツールの詰め合わせになっています。
また、Visual Studioが最初から対応しているプログラミング言語のほかに、サードパーティが独自に特定のプログラミング言語をVisual Studioの開発環境に対応させることも可能で、既にPerlなどの言語については対応パッケージがリリースされています。
Visual Studioで作成したソフトウェアはMSILというバイトコードの一種で出力され、動作させるには.NET Framework(厳密にはそれに含まれるCLR)が必要になります。
ただし、Visual C++だけは従来のWindows用プログラムと同じバイナリ形式での出力ができるため、ハードウェアに直接命令を与えるようなプログラムの作成も可能になっています。


1) Microsoft Visual Studio はMicrosoft社のサイトからインストールします。
http://www.microsoft.com/visualstudio/jpn#downloads
” Visual Studio Express2010”をクリックし “Visual C++ 2010 Express”を選択します。

2) 開いた “Visual C++ 2010 Express”から、赤線の“Visual C++ 2010 Express - 日本語 今すぐインストール”をクリックしてインストールします

3) 30日以上使用する場合は、無償のプロダクトキーを入手して登録します

4) 終了

学生など、教育機関関連の方は、もっと最新版のVisual Studioを無償で入手できます(2014年11月現在)が、ここでは、“Visual C++ 2010 Express” を使っての説明です。


 次のページ → Microsoft Visual Studioの使用方法(1)

「有限要素法における平面トラスの解析」プログラムをC言語で書いてみる : 目次

2014年11月4日火曜日

OpenSees Basic Examples (C5: 2階建てフレームでの固有値解析) 解析結果


2階建てフレームでの固有値解析(ここ)で作成した、EigenAnal_twoStoreyShearFrame7.tclファイル内の OpenSeesコマンドを実行すると、以下の様な画面が表示されます。


1次の固有周期は 0.514877239659991
2次の固有周期は 0.257438663047668

このデータは、modesフォルダーの中のPeriods.txtの中にもあります

1次の固有振動モード(固有ベクトル)eigenvector は {0.4999999999893383 1.0}
2次の固有振動モード(固有ベクトル)eigenvector は {-1.0000000000213238 1.0}


また、
1次モード、2次モードのx,yの1次、2次の振動モード形を
OpenSeesによりプロットした結果は以下の様になります。

このグラフのデータは、modesフォルダーの中のmode1.txtとmode2.txtにあります。

Node1
Node2
Node3
x
y
θ
x
y
θ
x
y
θ
mode1.txt
0
0
0
0
0
0
-0.80208
0
1.07E-12
mode2.txt
0
0
0
0
0
0
-1.13431
0
3.23E-23
Node4
Node5
Node6
x
y
θ
x
y
θ
x
y
θ
mode1.txt
-0.802081
0
1.07E-12
-1.60416
0
3.56E-13
-1.60416
0
3.56E-13
mode2.txt
-1.13431
0
3.23E-23
1.13431
0
-1.01E-12
1.13431
0
-1.01E-12











Opensees コマンド 日本語解説 : 目次