Times系のフォントが指定されている出版物が非常に多い.
こんなのを用意しておくと便利.
圧力波形出力用のやつ
-----------------------------------------------------------
pplot.sh
-----------------------------------------------------------
set grid
set key below
set tics font "Times New Roman"
set xlabel font "Times New Roman"
set ylabel font "Times New Roman"
set key font "Times New Roman"
set xlabel "Time / Second"
set ylabel "Pressure / Pascal"
gnuplotを起動して
gnuplot > load "pplot.sh"
でロードあとは普通にplotする. 画像出力まで自動でできるけど, 確認しながらグラフ作るとき便利.
2014/02/12
2014/02/04
並列gmshのデータフォーマット
並列gmshのデータフォーマットを頑張って読解した.
赤: 要素の番号 (c/c++ユーザーは1から始まることに注意)
青: 要素のタイプgmshの reference見てくれ 4は四面体要素
茶: このタグのあとに続くタグの数
水色: 物理タグ, 境界認識のために自分で設定しているはずだ
黄色: メモリータグ, gmshの中で与えたメモリー番号
ピンク: 並列メッシュ形式にしかでない, このタグに続くタグの数
オレンジ: 要素の領域番号
緑: もし要素が他の領域と接しているなら, マイナスで隣り合う要素の番号が示される
群青: 要素の接点番号
赤: 要素の番号 (c/c++ユーザーは1から始まることに注意)
青: 要素のタイプgmshの reference見てくれ 4は四面体要素
茶: このタグのあとに続くタグの数
水色: 物理タグ, 境界認識のために自分で設定しているはずだ
黄色: メモリータグ, gmshの中で与えたメモリー番号
ピンク: 並列メッシュ形式にしかでない, このタグに続くタグの数
オレンジ: 要素の領域番号
緑: もし要素が他の領域と接しているなら, マイナスで隣り合う要素の番号が示される
群青: 要素の接点番号
2014/01/29
高次の形状関数
有限要素法の高次形状関数の実装は, 出来そうだ.
c++ならばtemplateをつかって再帰的に計算できる.
参考にしました.
http://www.colorado.edu/engineering/cas/courses.d/IFEM.d/IFEM.Ch18.d/IFEM.Ch18.pdf
高次のガウス積分の実装を今度は考えなくては.
c++ならばtemplateをつかって再帰的に計算できる.
参考にしました.
http://www.colorado.edu/engineering/cas/courses.d/IFEM.d/IFEM.Ch18.d/IFEM.Ch18.pdf
高次のガウス積分の実装を今度は考えなくては.
2014/01/27
static polymorphismとgcc
はてgccのバージョン4.8.2にしたら静的多様性を使ったコードがコンパイル出来なくなったぞい. なぜじゃ? 4.7.3でもでるな ???? なんかミスったか ?
c/c++, fortranとかは普通に作れるんだけど, meta化すると急にできなくなる.
c/c++, fortranとかは普通に作れるんだけど, meta化すると急にできなくなる.
2014/01/25
大量に作成しております
とある先進的な解析ソフトを見つけてコンパイルしようとしたら, どうもconfigすら通らない. いろいろ探ってみたのだけれども理由がわからず, mailing listに質問してみたら
"ごめん, ホームページ更新してなくて. 依存情報かなり古いんだと言われた"
おっさんは, その程度でめげる人ではないので,
gmp-5.1.3
mpfr-3.1.2
mpc-1.0.2
gcc-4.8.2
boost-1.55.0
openmpi-1.6.5
をつくった.
あとpetsc-3.4.3を作れば問題ないはず.
"ごめん, ホームページ更新してなくて. 依存情報かなり古いんだと言われた"
おっさんは, その程度でめげる人ではないので,
gmp-5.1.3
mpfr-3.1.2
mpc-1.0.2
gcc-4.8.2
boost-1.55.0
openmpi-1.6.5
をつくった.
あとpetsc-3.4.3を作れば問題ないはず.
2014/01/24
2014/01/22
c++ テンプレートメタプログラミング 3 静的多様性を用いた行列の足し算
いくつでも行列足し算できる奴も出来た. gcc-4.8.0で動作確認, 4.3.4ではコンパイル出来なかった.
元ネタ
http://itee.uq.edu.au/~conrad/misc/sanderson_templates_lecture_uqcomp7305.pdf
#include<iostream>
template< typename T1, typename T2 >
class Glue;
template< typename derived>
struct Base {
const derived & get_ref() const{
return static_cast<const derived&>(*this);
}
};
class Matrix : public Base < Matrix >{
public:
int rows;
int cols;
double *data;
Matrix(){}
Matrix( int in_rows, int in_cols ){
set_size( in_rows, in_cols );
}
void set_size( int in_rows, int in_cols ){
rows = in_rows;
cols = in_cols;
data = new double [rows*cols];
for( int i=0; i<rows*cols; i++ ) data[i] = 1.0;
}
Matrix( const Matrix & X );
const Matrix& operator=( const Matrix & X );
template< typename T1, typename T2 >
Matrix( const Glue<T1, T2> & X );
template< typename T1, typename T2 >
const Matrix & operator=( const Glue<T1, T2> & X );
};
template< typename T1, typename T2 >
class Glue : public Base< Glue<T1,T2> >{
public:
const T1 & A;
const T2 & B;
Glue( const T1 & in_A, const T2 & in_B ): A(in_A), B(in_B) {
}
};
template< typename T1, typename T2 >
inline const Glue< T1, T2 >
operator+( const Base<T1>&A, const Base<T2> & B ){
return Glue< T1, T2 >( A.get_ref(), B.get_ref() );
}
template< typename T1 >
struct depth_lhs{
static const int num = 0;
};
template< typename T1, typename T2 >
struct depth_lhs< Glue<T1, T2 > >{
static const int num = 1 + depth_lhs<T1>::num;
};
template< typename T1 >
struct mat_ptrs{
static const int num = 0;
inline static void
get_ptrs( const Matrix** ptrs, const T1 & X ){
{
ptrs[0] = reinterpret_cast<const Matrix*>(&X);
}
}
};
template< typename T1, typename T2 >
struct mat_ptrs< Glue<T1, T2> >
{
static const int num = 1 + mat_ptrs<T1>::num;
inline static void
get_ptrs( const Matrix** in_ptrs, const Glue<T1,T2>& X ){
mat_ptrs<T1>::get_ptrs(in_ptrs, X.A );
in_ptrs[num] = reinterpret_cast< const Matrix*>( & X.B );
}
};
template< typename T1, typename T2 >
const Matrix & Matrix::operator=( const Glue<T1,T2>& X ){
int i,j;
double sum;
int N = 1 + depth_lhs < Glue<T1,T2> >::num;
const Matrix* ptrs[N];
mat_ptrs< Glue<T1,T2> >::get_ptrs(ptrs,X);
int r = ptrs[0]->rows;
int c = ptrs[0]->cols;
set_size( r, c );
for( j=0; j<r*c; ++j ){
double sum = ptrs[0]->data[j];
for( i=1; i<N; ++i ){
sum += ptrs[i]->data[j];
}
data[j] = sum;
}
return *this;
}
int main(){
Matrix A(2,2);
Matrix B(2,2);
Matrix C(2,2);
Matrix D(2,2);
Matrix X(2,2);
X = A+B+C+D;
for( int i=0; i<4; i++ ) std::cout << X.data[i] << std::endl;
return 0;}
登録:
投稿 (Atom)
