Asdfgの日記

freefemを使いこなそう

【エラー報告】3D 周期 missing face

3次元モデルでフォトニックバンドを計算しようとしている際のエラー
(*下記はお試しの例)

 missing face 340  146 147 150
 missing face 341  147 150 151
 missing face 342  145 146 149
 missing face 343  146 149 150
 missing face 344  144 145 148
 missing face 345  145 148 149
 3d periodic FE: number of  missing periodic faces 6
  current line = 45
Exec error :  3d periodic condition missing common face
   -- number :1
Exec error :  3d periodic condition missing common face
   -- number :1

どうやら周期関数の関数空間の設定でエラーしているよう
調べてみるとマニュアルNote6.1の特記事項のことらしい

周期的に関数をする場合、周期的にくっつける境界の
四角いメッシュの斜めの線の方向が同じじゃないとエラーをはくが
BuildLayer mesh generatorはメッシュの最大インデックス番号側に
斜めの線を構築するしてしうまうので上手くいかないときがある旨の内容

なので底面のメッシュのナンバリングの再設定が必要
それは以下で行うことができて

 { // for cleanning  memory..
int[int] old2new(0:Th.nv-1);
fespace Vh2(Th,P1);
Vh2 sorder=x+y; 
sort(sorder[],old2new);
int[int]  new2old=old2new^-1;   // inverse the permuation 
//for(int i=0;i< Th.nv;++i) // so by hand. 
//  new2old[old2new[i]]=i;
Th= change(Th,renumv=new2old);
sorder[]=0:Th.nv-1;
} 

メッシュに座標の(x+y)を割り当てて
大きい順に並べなおす感じ?
動作に関しては
examples++-3d/periodic-3d.edpを参照のこと

メッシュの詳細に関して
いじるようなことが初めてだったので
ちょっとわかるまで時間がかかりました
スペシャリストになるには
この辺もわかっておくようにならないとな~~

(BuildLayer mesh generatorのインデックス振りが
 どうなっているのか現状私は理解していないです・・・)

f:id:Asdfg:20180910003247p:plain
f:id:Asdfg:20180910003912p:plain