【注意】複素関数空間の場合の転置コマンド「’」はエルミート転置!
私みたいにマニュアルに目を通さないで
freefemを扱ってる初心者の方に向けての
注意喚起です
周波数空間でマクスウェル方程式を解きたい場合
転置記号「’」を使いながら内積を使用することになる
例えば、
という数式をコード化すると
Vh<complex> [Ex,Ey,Ez],[Wx,Wy,Wz]; problem FMEQ([Ex,Ey,Ez],[Wx,Wy,Wz])= int3d(Th)( Rot(Wx,Wy,Wz)'*Rot(Ex,Ey,Ez) - k0^2*([Wx,Wy,Wz]'*[Ex,Ey,Ez]) ) + int2d(Th,In,Out)( 1i*k0*VProduct([Wx,Wy,Wz],[N.x,N.y,N.z])'*VProduct( [Ex,Ey,Ez],N.x,N.y,N.z]) ) - int2d(Th,In )( 2i*k0*VProduct([N.x,N.y,N.z],[Wx,Wy,Wz])'* VProduct([N.x,N.y,N.z],[E0x,E0y,E0z])) ;
と書くとする場合がそれにあたる。
このとき「’」はすべてエルミート転置(転置+複素共役)である。
理解していないと飛び去るエネルギーを計算する際に
complex T = int2d(Th,Out)( 1i*k0*VProduct( [Ex, Ey,Ez],[N.x,N.y,N.z])'*VProduct([Ex,Ey,Ez],[N.x,N.y,N.z]) ) ;
と書くがconj共役をEにつけたくなってしまう
私はこれで半日計算が合わなくて困ったので
皆様は気をつけて
マニュアルの
4.9.3 Matrix Operations
に記述があります
(そのうち本腰入れて
すみからすみに目を通さないと)
しかしFreeFEMの情報はネット上であんまりないような気がする・・・