= Availability of in-place FFT
== plans
Done:
 plan_c2r_3_in      dVdacK->dVdacR (dVdac.F, leapfrog.F, velocity_scaling.F)
 plan_c2r_6_in      inhoK->inhoR   (dVddi_inho_coupling.F)

Yet:
 plan_r2c_3_out     dipoR->dipoK   (dipoFFT.F)
 plan_r2c_3_out     acouR->acouK   (acouFFT.F)

 plan_c2r_3_out     acouK->acouR   (write_system.F. It is not crucial for speed.)
 plan_c2r_3_out     dipoT->dVddi   (dVddi-dipole-dipole.F. Next target for in-place.)

 plan_r2c_6_out     didiR->didiK   (dipoFFT.F)

== dipoR → dipoK
直後にdipoRを使うのでin-placeにはできない．

== didiR → didiK
dipoFFT.Fで両方が作られる．
その直後にdVddi-dipole-dipole.FでdidiKが，
dVddi-unharmonic.FでdidiRが使われるのでin-placeにはできない．

== dipoT → dVddi
dipoTがdVddi-dipole-dipole.F内で一時的に使われるだけなので
in-placeにできる．
ただし、dVddiはたくさんのファイルのたくさんのところで
使われているので書き換えが面倒か？
次の手順で書き換える:
 * timing1
 * verbose = 2 でdebug1
 * dVddiの関連するすべてのループに ix, iy のインデックスを追加.
 * timing2
 * verbose = 2 でdebug2
 * coord_module.F, dVddi-dipole-dipole.F 書き換え.
 * timing3
 * verbose = 2 でdebug3

== inhoK → inhoR
紆余曲折あったがr2572でin-placeにした https://sourceforge.net/p/loto/code/2572/ .
dVddi_inho_coupling.F で rank remapping or array dimension changing を使って奇麗に書いている
    inhoK(1:howmany, 0:p%Lx/2,         0:p%Ly+p%padding_y-1, 0:p%Lz-1) => inhoK_linear
    inhoR(1:howmany, 0:2*(p%Lx/2+1)-1, 0:p%Ly+p%padding_y-1, 0:p%Lz-1) => inhoR_linear
coord_module.F で type(C_PTR)::inho_ptr=c_null_ptr は最後の方に置かないとxlfでICEになってしまう．
See IV73550 INTERNAL COMPILER ERROR WITH C_PTR IN DERIVED TYPE DEFINITION
http://www-01.ibm.com/support/docview.wss?crawler=1&uid=swg1IV73550

== dVdacK → dVdacR
r2578.

== plan and wisdom
Core i7でFFTW_MEASUREだと遅いin-place FFTのコードレットが選ばれてしまうことがある．
FFTW_PATIENTでは十分速いコードレットが選ばれるが，選ぶのにやたら時間がかかる場合がある．
