I had a play with various `Compile` options and didn't get anywhere (I managed to make it slower though!). However, you can get a nice little speed boost using `ParallelTable`. Your original on my machine:
NFourierTransform[f_Function, {kmin_, kmax_}] :=
Interpolation@
Table[{k,
Chop@NIntegrate[f@x E^(-I k x), {x, -Infinity, Infinity}]}, {k,
kmin, kmax, (kmax - kmin)/100}]
TimePropagate[f_Function, kl : {kmin_, kmax_}, {tl__}] :=
Quiet@Table[NFourierTransform[f[#] Exp[-(#^2/2) t] &, kl], {t, tl}]
`TimePropagate[Exp[-Abs@#] &, {-3, 3}, {0, 0.1, 0.1}] // AbsoluteTiming` runs in 5.65 seconds. I launch some kernels
LaunchKernels[]
and throw in a `ParallelTable`
NFourierTransform[f_Function, {kmin_, kmax_}] :=
Interpolation@
ParallelTable[{k,
Chop@NIntegrate[f@x E^(-I k x), {x, -Infinity, Infinity}]}, {k,
kmin, kmax, (kmax - kmin)/100}]
TimePropagate[f_Function, kl : {kmin_, kmax_}, {tl__}] :=
Quiet@Table[NFourierTransform[f[#] Exp[-(#^2/2) t] &, kl], {t, tl}]
to get an execution time of 2.04 seconds for the same function call: `TimePropagate[Exp[-Abs@#] &, {-3, 3}, {0, 0.1, 0.1}] // AbsoluteTiming`
A speed-up of almost 3 times.