マニュアルの §4.11 に詳しい説明があるが、 非常に簡単である (嬉しい)。
マニュアルの例では、 カッコ { } でくくってブロックを作って、 その中で変数を宣言している。 ブロックを抜けるときにファイルがクローズされるということである (出力の場合は、書き出しが完了するわけだ)。 なるほどとは思うけれど、気付かない人が多いんじゃないかな。 まあ、プログラムが終了時にクローズされるんだろうけど。
実例を2つあげる。 まず、 「おまけ: gnuplot で可視化」 に載せた例。
| プログラム例: BiharmonicEigenvalues4.edp |
// BiharmonicEigenvalues4.edp
// 2012/8/2
load "Morley"
verbosity=1;
int i,NN;
cout << "input N: ";
cin >> NN;
cout << "N=" << NN << endl;
real sigma=0.3;
mesh Th=square(NN,NN);
fespace Vh(Th, P2Morley);
Vh [u,ux,uy], [v,vx,vy];
macro lap2(u,v) ((dxx(u)+dyy(u))*(dxx(v)+dyy(v))) // EOM
varf aa([u,ux,uy], [v,vx,vy]) = int2d(Th)
(lap2(u,v)-(1-sigma)*(dxx(u)*dyy(v)+dyy(u)*dxx(v)-2.0*dxy(u)*dxy(v)));
varf bb([u,ux,uy], [v,vx,vy]) = int2d(Th)(u*v);
matrix A=aa(Vh,Vh,solver=UMFPACK);
matrix B=bb(Vh,Vh,solver=UMFPACK);
int nev=40;
real[int] ev(nev); // Stockage des valeurs propres
Vh[int] [eVu,eVux,eVuy](nev); // Stockage des vecteurs propres
int k=EigenValue(A,B,sym=true,value=ev,vector=eVu,tol=1e-10,maxit=0,ncv=0);
{
ofstream f("BiharmonicEigenvalues-" + NN + ".txt");
f.precision(15);
for (i = 0; i < nev; i++) {
f << ev[i] << endl;
}
}
for (i=0;i<nev;i++) {
cout << ev[i] << endl;
// plot(eVu[i],[eVux[i],eVuy[i]],nbiso=64,fill=true,wait=true);
plot(eVu[i],nbiso=64,fill=true,wait=true);
}
|
この例では f.precision(15); で表示桁数を指定している。
cout のときと同じように、 f.scientific;, f.fixed;, f.showbase;, f.noshowbase;, f.showpos;, f.noshowpos;, f.default; などが使える (C++ を知っていれば意味は想像出来るであろう)。