マニュアルの §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++ を知っていれば意味は想像出来るであろう)。