Question about parallel operations on lists
- To: mathgroup at yoda.physics.unc.edu
- Subject: Question about parallel operations on lists
- From: buchanan at guest2.math.ncsu.edu (Bob Buchanan)
- Date: Tue, 19 Jan 93 10:27:03 EST
Calling all Mma gurus,
I'm coding some simple numerical methods for PDE conservation
laws in one of my classes. Does anyone know a way to clean up the
code of GodunovFlux[] (shown below) so that it doesn't require the
Do[] loops?
Flux[x_] := x (* simple flux function *)
GodunovFlux[u_List,v_List] :=
Module[{diff,s,y,fluxu,fluxv},
diff = Abs[u-v] /. x_ :> 0 /; x < 1/1000;
(* zero out any differences in u-v which are < 0.001 *)
s = Table[0, {Length[u]}];
fluxu = Flux[u]; fluxv = Flux[v];
y = fluxv;
(* if u-v != 0 then compute approximation to derivative *)
Do[s[[i]] = If[diff[[i]] > 0,
(fluxu[[i]] - fluxv[[i]])/(u[[i]] - v[[i]]),
s[[i]]],
{i,Length[u]}];
(* if previous result > 0 then y <- fluxu *)
Do[y[[i]] = If[s[[i]] > 0,fluxu[[i]],y[[i]]],
{i,Length[u]}];
y]
Basically, I'm looking for an elegant (or arcane) way to avoid doing so
much of this calculation element-wise.
Thanks,
Bob Buchanan (Bob_Buchanan at ncsu.edu)