結晶内原子の座標表現形式を変換

2017-11-20 :  PCクリニック
結晶内原子の座標表現を、
XYZ座標値(Cartesian)から相対値表現(Fractional)に変換したい。
使用言語は、Perlで。

それには、
前(2017-11-17)の記事「3元1次連立方程式を解く(Perl版)」で書いた、
処理コードが使える。


結晶格子の3軸ベクトルを、
 a = { ax, ay, az }
 b = { bx, by, bz }
 c = { cx, cy, cz }
の様なものとすると、

前の記事のプログラム Solve_by_Inv-Mat.pl での、
解きたい方程式の係数行列 A は、
( $a11, $a12, $a13, $a21, $a22, $a23, $a31, $a32, $a33 ) =
 ( $ax, $bx, $cx, $ay, $by, $cy, $az, $bz, $cz );
つまり、a,b,c ベクトルは縦方向に並べる。

そうして、
$detA = $a11*$a22*$a33 + $a21*$a32*$a13 + $a31*$a12*$a23 -
 $a11*$a32*$a23 - $a31*$a22*$a13 - $a21*$a12*$a33;
を求め、

逆行列 Inv_A == G を、2段階で計算する:
( $g11, $g12, $g13, $g21, $g22, $g23, $g31, $g32, $g33 ) =
 ( $a22*$a33-$a23*$a32, $a13*$a32-$a12*$a33, $a12*$a23-$a13*$a22,
  $a23*$a31-$a21*$a33, $a11*$a33-$a13*$a31, $a13*$a21-$a11*$a23,
  $a21*$a32-$a22*$a31, $a12*$a31-$a11*$a32, $a11*$a22-$a12*$a21 );

( $g11, $g12, $g13, $g21, $g22, $g23, $g31, $g32, $g33 ) =
 ( $g11/$detA, $g12/$detA, $g13/$detA,
  $g21/$detA, $g22/$detA, $g23/$detA,
  $g31/$detA, $g32/$detA, $g33/$detA );


これで、

対象とする原子の座標(XYZ座標値)を
 { x, y, z }
の様なものとすると、

解きたい方程式の右辺のベクトルは、
( $b1, $b2, $b3 ) = ( $x, $y, $z );
の様になる。


それで、

逆行列により、
$X = $g11*$b1+$g12*$b2+$g13*$b3;
$Y = $g21*$b1+$g22*$b2+$g23*$b3;
$Z = $g31*$b1+$g32*$b2+$g33*$b3;
と算出した結果:
 { $X, $Y, $Z }
は、対象とする原子座標の相対値表現
となりますネ。


本日はここまで。


これって、Perl 学習 かナ?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


171021
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
04 | 2018/05 | 06
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク