I am trying to parallelize a table operation, but I find that the table is not the same with and without the parallel function. I have looked at this question, but I cannot transfer it to my own problem.
I am calculating a function of two variables like
Table[{ {r, t}, function[r, t]}, {r, 1, 10}, {t, 1, 10} ] but in my example the function changes for each set of {r, t}. The actual code is this
Table[ newfun[s_] = originialfun[r, s]; {{r, t}, FT[newfun, t, 10]}, {r, posmin, posmax}, {t, tmin, tmax, 1/tgrid} ] I need to define newfun[s_] every time r updates because the FT function only accepts a function of one variable.
When I compare the output, some of the table is correct, but some is not. I print below some sample output.
Non-parallel table:
{{{{0.1, 0.05}, 7.74305*10^-8}, {{0.1, 0.1}, 0.000314487}, {{0.1, 0.15}, 0.00462058}, {{0.1, 0.2}, 0.0159923}, {{0.1, 0.25}, 0.0312726}, {{0.1, 0.3}, 0.0462548}}, {{{0.2, 0.05}, 7.50678*10^-6}, {{0.2, 0.1}, 0.00248056}, {{0.2, 0.15}, 0.0148101}, {{0.2, 0.2}, 0.0333674}, {{0.2, 0.25}, 0.0514979}, {{0.2, 0.3}, 0.0661646}}, {{{0.3, 0.05}, 0.000452737}, {{0.3, 0.1}, 0.0158874}, {{0.3, 0.15}, 0.045333}, {{0.3, 0.2}, 0.071204}, {{0.3, 0.25}, 0.089263}, {{0.3, 0.3}, 0.100696}}} Parallel table:
{{{{0.1, 0.05}, 0.000452737}, {{0.1, 0.1}, 0.0158874}, {{0.1, 0.15}, 0.045333}, {{0.1, 0.2}, 0.071204}, {{0.1, 0.25}, 0.089263}, {{0.1, 0.3}, 0.100696}}, {{{0.2, 0.05}, 0.000452737}, {{0.2, 0.1}, 0.0158874}, {{0.2, 0.15}, 0.045333}, {{0.2, 0.2}, 0.071204}, {{0.2, 0.25}, 0.089263}, {{0.2, 0.3}, 0.100696}}, {{{0.3, 0.05}, 0.000452737}, {{0.3, 0.1}, 0.0158874}, {{0.3, 0.15}, 0.045333}, {{0.3, 0.2}, 0.071204}, {{0.3, 0.25}, 0.089263}, {{0.3, 0.3}, 0.100696}}} It is clear from the parallel table, that the rows where {{r, t}, func[r, t]} has r = 0.3 are correct, and that it overwrites all other output to that where r = 0.3.
How would I go about fixing this?
EDIT:
I tried the two options put by Szabolcs, fun[r_][s_] and originalfun[r, #]& but they don't work. I am not very experienced with the advanced Mathematica syntax, so I cannot completely understand why, but I believe FT needs as input a function without argument, as given in my code above.
This is the basic implementation of FT:
FT[F_, t_, M_:32]:= Module[{np, r, S, theta, sigma}, np = Max[M, $MachinePrecision]; r = SetPrecision[2M/(5t), np]; S = r theta (Cot[theta] + I); sigma = theta + (theta Cot[theta] - 1)Cot[theta]; (r/M)Plus @@ Append[Table[Re[Exp[t S](1 + I sigma)F[S]], {theta, Pi/M, (M - 1)Pi/M, Pi/M}], (1/2) Exp[r t] F[r]] ]
originalfun[r, #]&toFT, or defineFTin a different way, or definefun[r_][s_] := originalfun[r,s]once then passfun[r]toFT, etc. $\endgroup$