program Inner-Product-1 declare m: integer initially assign end 0..P 1 p program Vector-Sum-4 declare i: integer;

Σχετικά έγγραφα
Answers - Worksheet A ALGEBRA PMT. 1 a = 7 b = 11 c = 1 3. e = 0.1 f = 0.3 g = 2 h = 10 i = 3 j = d = k = 3 1. = 1 or 0.5 l =

Chapter 6: Systems of Linear Differential. be continuous functions on the interval

Q π (/) ^ ^ ^ Η φ. <f) c>o. ^ ο. ö ê ω Q. Ο. o 'c. _o _) o U 03. ,,, ω ^ ^ -g'^ ο 0) f ο. Ε. ιη ο Φ. ο 0) κ. ο 03.,Ο. g 2< οο"" ο φ.

Matrices and vectors. Matrix and vector. a 11 a 12 a 1n a 21 a 22 a 2n A = b 1 b 2. b m. R m n, b = = ( a ij. a m1 a m2 a mn. def

Lecture 2: Dirac notation and a review of linear algebra Read Sakurai chapter 1, Baym chatper 3

Durbin-Levinson recursive method

Tridiagonal matrices. Gérard MEURANT. October, 2008

Numerical Analysis FMN011

Chapter 6: Systems of Linear Differential. be continuous functions on the interval

Παρουσίαση 3ης Άσκησης

Second Order RLC Filters

The Jordan Form of Complex Tridiagonal Matrices

1 String with massive end-points

g-selberg integrals MV Conjecture An A 2 Selberg integral Summary Long Live the King Ole Warnaar Department of Mathematics Long Live the King

Matrices and Determinants

DiracDelta. Notations. Primary definition. Specific values. General characteristics. Traditional name. Traditional notation

On the Galois Group of Linear Difference-Differential Equations

Review of Single-Phase AC Circuits

Partial Differential Equations in Biology The boundary element method. March 26, 2013

ES440/ES911: CFD. Chapter 5. Solution of Linear Equation Systems

DERIVATION OF MILES EQUATION FOR AN APPLIED FORCE Revision C

The challenges of non-stable predicates

Homework 8 Model Solution Section

Equations. BSU Math 275 sec 002,003 Fall 2018 (Ultman) Final Exam Notes 1. du dv. FTLI : f (B) f (A) = f dr. F dr = Green s Theorem : y da

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Example Sheet 3 Solutions

Statistics 104: Quantitative Methods for Economics Formula and Theorem Review

SCHOOL OF MATHEMATICAL SCIENCES G11LMA Linear Mathematics Examination Solutions

6.3 Forecasting ARMA processes

MATHEMATICS. 1. If A and B are square matrices of order 3 such that A = -1, B =3, then 3AB = 1) -9 2) -27 3) -81 4) 81

x j (t) = e λ jt v j, 1 j n

w o = R 1 p. (1) R = p =. = 1

Sheet H d-2 3D Pythagoras - Answers

New Adaptive Projection Technique for Krylov Subspace Method

Finite difference method for 2-D heat equation

Ε ανάληψη. Πληροφορηµένη αναζήτηση µε εριορισµό µνήµης. Ευρετικές συναρτήσεις. Το ική αναζήτηση

ΗΜΥ 100 ΕΙΣΑΓΩΓΉ ΣΤΗΝ ΤΕΧΝΟΛΟΓΊΑ

ECE Spring Prof. David R. Jackson ECE Dept. Notes 2

EE512: Error Control Coding

Chap. 6 Pushdown Automata

❷ s é 2s é í t é Pr 3

Second Order Partial Differential Equations

Πανεπιστήµιο Κρήτης - Τµήµα Επιστήµης Υπολογιστών. ΗΥ-570: Στατιστική Επεξεργασία Σήµατος. ιδάσκων : Α. Μουχτάρης. εύτερη Σειρά Ασκήσεων.

Note: Please use the actual date you accessed this material in your citation.

Srednicki Chapter 55

High order interpolation function for surface contact problem

Μονοδιάστατοι πίνακες

New bounds for spherical two-distance sets and equiangular lines

Reminders: linear functions

Παράλληλη Επεξεργασία Κεφάλαιο 4 Επικοινωνία Διεργασιών

Mellin transforms and asymptotics: Harmonic sums

HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch:

Inverse trigonometric functions & General Solution of Trigonometric Equations

Διανύσματα στις 3 Διαστάσεις

Practice Exam 2. Conceptual Questions. 1. State a Basic identity and then verify it. (a) Identity: Solution: One identity is csc(θ) = 1

Ordinal Arithmetic: Addition, Multiplication, Exponentiation and Limit

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Differentiation exercise show differential equation

Παράλληλη Επεξεργασία Κεφάλαιο 6 ο Σύγχρονος Παραλληλισμός

Συνόρθωση κατά στάδια και αναδρομικοί αλγόριθμοι βέλτιστης εκτίμησης

The ε-pseudospectrum of a Matrix

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Συνόρθωση κατά στάδια και αναδρομικοί αλγόριθμοι βέλτιστης εκτίμησης

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

Notes on the Open Economy

Trigonometric Formula Sheet

f a o gy s m a l nalg d co h n to h e y o m ia lalg e br coh the oogy lagebr

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

Dr. D. Dinev, Department of Structural Mechanics, UACEG

ΜΕΤΑΠΤΥΧΙΑΚΗ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ. Ελευθερίου Β. Χρυσούλα. Επιβλέπων: Νικόλαος Καραμπετάκης Καθηγητής Α.Π.Θ.

Κεθάιαην Επηθακπύιηα θαη Επηθαλεηαθά Οινθιεξώκαηα

b. Use the parametrization from (a) to compute the area of S a as S a ds. Be sure to substitute for ds!

Discontinuous Hermite Collocation and Diagonally Implicit RK3 for a Brain Tumour Invasion Model

Ó³ Ÿ , º 3(180).. 313Ä320

Histogram list, 11 RANDOM NUMBERS & HISTOGRAMS. r : RandomReal. ri : RandomInteger. rd : RandomInteger 1, 6

Ó³ Ÿ , º 3(194).. 673Ä677. Š Œ œ ƒˆˆ ˆ ˆŠ. ˆ.. ³ Ì μ, ƒ.. Š ³ÒÏ,ˆ..Š Ö, Ÿ. ʲ ±μ ±

Εισαγωγή στη Fortran. Μάθημα 3 ο. Ελευθερία Λιούκα

Lecture 10 - Representation Theory III: Theory of Weights

Matrix Algorithms. Παρουσίαση στα πλαίσια του μαθήματος «Παράλληλοι. Αλγόριθμοι» Γ. Καούρη Β. Μήτσου

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

ΗΛΙΑΣΚΟΣ ΦΡΟΝΤΙΣΤΗΡΙΑ. Τεχνολογικής Κατεύθυνσης Προγραμματισμός Γ Λυκείου Μέρος 2 ο ΥΠΗΡΕΣΙΕΣ ΠΑΙΔΕΙΑΣ ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ ΣΤΕΦΑΝΟΣ ΗΛΙΑΣΚΟΣ

Wavelet based matrix compression for boundary integral equations on complex geometries


ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 16

k A = [k, k]( )[a 1, a 2 ] = [ka 1,ka 2 ] 4For the division of two intervals of confidence in R +

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Άσκηση 1. O υπολογισμός να γίνει: α) με την τεχνική αθροίσματος σε μεταβλητή

Spherical Coordinates

D Alembert s Solution to the Wave Equation

1. (a) (5 points) Find the unit tangent and unit normal vectors T and N to the curve. r(t) = 3cost, 4t, 3sint

Jordan Form of a Square Matrix

M p f(p, q) = (p + q) O(1)

Διανύσµατα στο επίπεδο

Lecture 13 - Root Space Decomposition II

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Συντρέχων Κώδικας

DESIGN OF MACHINERY SOLUTION MANUAL h in h 4 0.

= λ 1 1 e. = λ 1 =12. has the properties e 1. e 3,V(Y

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΠΙΝΑΚΕΣ. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Εισαγωγή στον Προγραμματισμό

2. THEORY OF EQUATIONS. PREVIOUS EAMCET Bits.

Transcript:

program name definitions of (nonglobal) variables state of the data space before execution transformations by the program { state of the data space after execution } program Inner-Product-1 m: integer σ : real x, y: array [0..M 1] of real ; m : 0 m < M :: x[m], y[m] = x m, ỹ m σ := +m : 0 m < M :: x[m] y[m] { σ = σ } 1 2 0..P 1 p program Vector-Sum-4 i: integer; x, y, z: array [0..I p 1] of real ; i : 0 i < I p :: x[i], y[i] = x µ 1 (p,i), ỹ µ 1 (p,i) ; i : 0 i < I p :: z[i] := αx[i] + βy[i] { ; i : 0 i < I p :: z[i] = z µ 1 (p,i) } 0..P 1 p program Inner-Product-3 i: integer; σ : real; x, y: array [0..I p 1] of real; ω: array [0..P 1] of real ; i : 0 i < I p :: x[i], y[i] = x µ 1 (p,i), ỹ µ 1 (p,i) ω[p] := +i : 0 i < I p :: x[i] y[i]; s ω[p] to all; ; q : 0 q < P and q p :: receive ω[q] from q ; σ := +q : 0 q < P :: ω[q] { σ = σ } 3 4

0..P 1 p program Recursive-Doubling-2 d: integer ω, h: real ω = ω p ; d : 0 d < D :: s ω to bitflip(p, d); receive h from bitflip(p, d); ω := ω + h ; {ω = +q : 0 q < P :: ω q } 0..P 1 0..Q 1 (p, q) program Matrix-Vector-5 i, j, d: integer x: array [0..J q 1] of real y: array [0..I p 1] of real a: array [0..I p 1, 0..J q 1] of real t: array [0..I p 1] of real ; j : 0 j < J q :: x[j] = x ν 1 (q,j); ; (i, j) : 0 i < I p, 0 j < J q :: a[i, j] = ã µ 1 (p,i),ν 1 (q,j) {local sum} ; i : 0 i < I p :: y[i] := +j : 0 j < J q :: a[i, j] x[j] ; {recursive doubling} ; d : 0 d < D :: s {y[i] : 0 i < I p } to (p, bitflip(q, d)); receive {t[i] : 0 i < I p } from (p, bitflip(q, d)); ; i : 0 i < I p :: y[i] := y[i] + t[i] ; { ; i : 0 i < I p :: y[i] = ỹ µ 1 (p,i)} 5 6 0..P 1 0..Q 1 (p, q) program Convert-Vector-2 i, j, d, s: integer v: array [0..J q 1] of real y: array [0..I p 1] of real t: array [0..I p 1] of real ; i : 0 i < I p :: y[i] = ĩµ 1 (p,i); ; j : 0 j < J q :: v[j] = 0; {local ment} ; i : 0 i < I p :: (s, j) := ν(µ 1 (p, i)); if q = s then v[j] := y[i] ; {recursive doubling} ; d : 0 d < D :: s {v[j] : 0 j < J q } to (bitflip(p, d), q); receive {t[j] : 0 j < J q } from (bitflip(p, d), q); ; j : 0 j < J q :: v[j] := v[j] + t[j] ; { ; j : 0 j < J q :: v[j] = ṽ ν 1 (q,j)} 7 program Power k: integer; α, β, ε, π xx, π xy, π xz, π yy, π yz : real; x, y, z: array [0..M 1] of real;{x k, x k+1, x k+2} λ: complex; v: array [0..M 1] of complex; π xx := (x, x); x := x/ π xx; y := Ax; π xy := (x, y); π yy := (y, y); if π yy πxy 2 < τ 2 π yy then begin λ := π xy ; {x normalized to one} v := y/ π yy; return; z := Ay; π xz := (x, z); π yz := (y, z); π zz := (z, z); α := (π yz π xyπ xz)/(π yy πxy); 2 β := (π xy π yz π yy π xz )/(π yy πxy 2 ); ε := π zz + α 2 π yy + β 2 + 2(απ yz + βπ xz + αβπ xy); if ε < τ 2 π zz and 4β α 2 > 0 then begin λ := (α i 4β α 2 )/2; v := ( λy z)/ βπ yy + απ yz + π zz ; return; x := y/ π yy; y := z/ π yy ; π xy := π yz/ π yy; π yy := π zz / π yy ; {Error: No convergence} 8

program LU-4 k, m, n: integer; M, N : set of integer; r : array [0..M 1] of integer; c: array [0..N 1] of integer; a: array [0..M 1, 0..N 1] of real; a c: array [0..M 1] of real; {pivot row} a r : array [0..N 1] of real; {multiplier column} a r c: real {pivot element} M, N = 0,.., M 1, 0..N 1; ; m, n : (m, n) M, N :: a[m, n] = ã m,n ; k : 0 k < min(m, N) :: Pivot-Strategy-4(k, M, N, a, a r c, r [k], c[k]); if a r c = 0.0 then quit; M := M \ {r [k]}; N := N \ {c[k]}; {Copy the pivot row} n : n N :: a r [n] := a[r [k], n]; {Compute the multiplier column} m : m M :: a c[m] := a[m, c[k]]/a r c; {Elimination} m, n : (m, n) M N :: a[m, n] := a[m, n] a c [m] a r [n] { ; m, n : (m, n) M, N :: if r 1 [m] > c 1 [n] then a[m, n] = l[m, n] a[m, n] = ũ[m, n] } 9 0..P 1 0..Q 1 (p, q)program LU-5 k, i, j, ˆp, î, ˆq, ĵ: integer; I, J: set of integer; r : array [0..M 1] of integer; c: array [0..N 1] of integer; a: array [0..I p 1, 0..J q 1] of real; a c: array [0..I p 1] of real; a r : array [0..J q 1] of real; a r c: real I, J = I p, J q; ; i, j : (i, j) I, J :: a[i, j] = ã µ 1 (p,i),ν 1 (q,j) ; k : 0 k < min(m, N) :: Pivot-Strategy-5(k, I, J, a, a r c, ˆp, î, ˆq, ĵ); if a r c = 0.0 then quit; if p = ˆp then I := I \ {î}; if q = ˆq then J := J \ {ĵ}; r [k] := µ 1 ( ˆp, î); {global indeces} c[k] := ν 1 (ˆq, ĵ); {Broadcast the pivot row} if p = ˆp then begin ; j : j J :: a r [j] := a[î, j]; s {a r [j] : j J} to (all, q); receive {a r [j] : j J} from ( ˆp, q); {Compute and broadcast the multiplier column} if q = ˆq then begin ; i : i I :: a c [i] := a[i, ĵ] := a[i, ĵ]/a r c ; s {a c[i] : i I} to (p, all); receive {a c [i] : i I} from (p, ˆq); {Elimination} i, j : (i, j) I J :: a[i, j] := a[i, j] a c [i] a r [j] 10 0..P 1 0..Q 1 (p, q) program No-Pivoting(k, I, J, a, a r c, ˆp, î, ˆq, ĵ) k, ˆp, î, ˆq, ĵ : integer; I, J: set of integer; a: array [0..I p 1, 0..J q 1] of real; a r c : real ( ˆp, î) := µ(k); (ˆq, ĵ) := ν(k); if p = ˆp and q = ˆq then a r c := a[î, ĵ]; 0..P 1 0..Q 1 (p, q) program Complete-Pivoting(k, I, J, a, a r c, ˆp, î, ˆq, ĵ) k, d, u, i, j, ˆp, p 0, î, i 0, ˆq, q 0, ĵ, j 0, p u, q u : integer; I, J: set of integer; a: array [0..I p 1, 0..J q 1] of real; a r c, h: real a r c, ˆp, î, ˆq, ĵ := 0.0, p, 1, q, 1; ; i, j : (i, j) I J :: if a[i, j] > a r c then a r c, î, ĵ := a[i, j], i, j ; ; d : 0 d < D :: {Note: PQ = 2 D } u := bitflip(pq + q, d); p u, q u := u/q, u mod Q; s a r c, ˆp, î, ˆq, ĵ to (p u, q u ); receive h, p 0, i 0, q 0, j 0 from (p u, q u ); if h > a r c or h = a r c and p 0 < ˆp or h = a r c and p 0 = ˆp and q 0 < ˆq then a r c, ˆp, î, ˆq, ĵ := h, p 0, i 0, q 0, j 0 11 12

program Back-Solve-4 k, m, n: integer; M: set of integer; r : array [0..M 1] of integer; c: array [0..N 1] of integer; a: array [0..M 1, 0..N 1] of real; b: array [0..M 1] of real; x: array [0..N 1] of real; {Final state of LU-4} ; m : 0 m < M :: b[m] = b m M := k : 0 k < K :: {r [k]}; ; k : K > k 0 :: M := M \ {r [k]}; x[c[k]] := b[r [k]]/a[r [k], c[k]]; m : m M :: b[m] := b[m] a[m, c[k]] x[c[k]] { ; n : 0 n < N :: x[n] = x n } 13 0..P 1 0..Q 1 (p, q)program Back-Solve-5 k, i, j, ˆp, î, ˆq, ˆq +, ˆq, ĵ, ĵ +, ĵ : integer; I: set of integer; r : array [0..M 1] of integer; c: array [0..N 1] of integer; a: array [0..I p 1, 0..J q 1] of real; b: array [0..I p 1] of real; x: array [0..J q 1] of real; {Final state of LU-5} ; b[i] : 0 i < I p :: b[i] = b µ 1 (p,i) I := ; ( ˆp, î) := µ(r [k]); if p = ˆp then I := I {î} ; ; k : K > k 0 :: if k < K 1 then ˆq +, ĵ + := ν(c[k + 1]); ˆq, ĵ := ν(c[k]); if k > 0 then ˆq, ĵ := ν(c[k 1]); ˆp, î := µ(r [k]); if q = ˆq then begin if k < K 1 and q ˆq + then receive I, {b[i] : i I} from (p, ˆq + ); if p = ˆp then begin I := I \ {î}; x[ĵ] := b[ĵ]/a[î, ĵ]; s x[ĵ] to (all, q) receive x[ĵ] from ( ˆp, q); i : i I :: b[i] := b[i] a[i, ĵ] x[ĵ]; if k > 0 and q ˆq then s I, {b[i] : i I} to (p, ˆq ) { ; j : 0 j < J q :: x[j] = x ν 1 (q,j)} 14 0..P 1 p program Full-Recursive-Doubling-2 d: integer; ω, t: real ω = ω p ; d : 0 d D :: if p + 2 d < P then s ω to p + 2 d ; if p 2 d 0 then begin receive t from p 2 d ; ω := t ω {ω = σ p } 0..P 1 p program Full-Recursive-Doubling-3 i, d: integer; β, t: real; ω: array [0..I p 1] of real ; i : 0 i < I p :: ω[i] = ω µ 1 (p,i) {Sequential recursion} ; i : 0 < i < I p :: ω[i] := ω[i 1] ω[i]; {Full recursive doubling} β := ω[i p 1]; ; d : 0 d D :: if p + 2 d < P then s β to p + 2 d ; if p 2 d 0 then begin receive t from p 2 d ; β := t β ; {Combine step} s β to p + 1; begin receive β from p 1; ; i : 0 i < I p :: ω[i] := β ω[i]; { ; i : 0 i < I p :: ω[i] = σ µ 1 (p,i)} 15 16

program Tridiagonal-LU-1 m: integer; σ, ρ, λ, ν: array [0..M 1] of real; µ: array [ 1..M 1] of real σ [0], ρ[0], ν[0] = σ 0, 0, 0; ; m : 0 < m < M :: σ [m], ρ[m], ν[m] = σ m, ρ m, τ m µ[ 1] = 1.0; ; m : 0 m < M :: λ[m] := ρ[m]/µ[m 1]; µ[m] := σ [m] λ[m] ν[m] { ; m : 0 < m < M :: λ[m], µ[m] = λ m, µ m ; λ[0] = λ 0 } 0..P 1 p program Tridiagonal-LU-2 i, d: integer; σ, ρ, λ, ν: array [0..I p 1] of real; µ: array [ 1..I p 1] of real S, T : array [0..1, 0..1] of real ; i : 0 i < I p :: σ [i], ρ[i], ν[i] = σ Mp+i, ρ Mp+i, τ Mp+i {Sequential recursion} S := ( 1 0 0 1 ) ; ; i : 0 i < I p :: S := ( ) σ [i] ν[i] ρ[i] 1 0 S; {Full recursive doubling} ; d : 0 d D :: if p + 2 d < P then s S to p + 2 d ; if p 2 d 0 then begin receive T from p 2 d ; S := S T ; ; 17 {Combine step} µ[i p 1] := (S[0, 0] + S[0, 1])/(S[1, 0] + S[1, 1]); {µ[ 1] = 1.0!!} s µ[i p 1] to p + 1; if p = 0 then µ[ 1] = 1.0 receive µ[ 1] from p 1; ; i : 0 i < I p :: λ[i] := ρ[i]/µ[i 1]; µ[i] := σ [i] λ[i] ν[i] 18 { ; i : 0 i < I p :: λ[i], µ[i] = λ Mp+i, µ Mp+i; µ[ 1] = µ Mp 1} program Fast-Fourier-1 m, t: integer; ε: array [0..2 n 1 1] of complex; b: array [0..2 n 1 1] of complex ; t : 0 t < 2 n 1 :: ε[t] = exp(it 2π 2 n ; ; t : 0 t < 2 n :: b[ρ n (t)] = f t ; ; m : 0 m < n :: t : t 0..2 n 1 :: if t 2 m = 0 then b[t] = b[t] + ε[2 n m 1 t mod 2 n 1 ] b[t + 2 m ] b[t] = b[t 2 m ] ε[2 n m 1 t mod 2 n 1 ] b[t] { ; t : 0 t < 2 n :: ˆf t = b[t]} t : t 0..2 n 1 :: if t 2 m = 0 then b[t] = b[t] + ε[2 n m 1 t mod 2 n 1 ] b[t + 2 m ] b[t] = b[t 2 m ] ε[2 n m 1 t mod 2 n 1 ] b[t] if m T D then t D, t l : t D 0..2 D 1 and t l 0..2 n D 1 :: if t l (2 m ) l = 0 then b[t D, t l ] = b[t D, t l ] + ε[t m ] b[t D, t l + (2 m ) l ] b[t D, t l ] = b[t D, t l (2 m ) l ] ε[t m ] b[t D, t l ] t D, t l : t D 0..2 D 1 and t l 0..2 n D 1 :: if t D (2 m ) D = 0 then b[t D, t l ] = b[t D, t l ] + ε[t m ] b[t D + (2 m ) D, t l ] b[t D, t l ] = b[t D (2 m ) D, t l ] ε[t m ] b[t D, t l ] 19 20

if m T D then t D, t l : t D 0..2 D 1 and t l 0..2 n D 1 :: if t l (2 m ) l = 0 then b[t D, t l ] = b[t D, t l ] + ε[t m ] b[t D, t l + (2 m ) l ] b[t D, t l ] = b[t D, t l (2 m ) l ] ε[t m ] b[t D, t l ] begin s {b[t D, t l ] : t D = p and t l 0..2 n D 1} to p (2 m ) D ; receive {x[t D, t l ] : t D = p and t l 0..2 n D 1} from p (2 m ) D ; t D, t l : t D 0..2 D 1 and t l 0..2 n D 1 :: if t D (2 m ) D = 0 then b[t D, t l ] = b[t D, t l ] + ε[t m ] x[t D, t l ] b[t D, t l ] = x[t D, t l ] ε[t m ] b[t D, t l ] 0..P 1 p program Fast-Fourier-2 m, j: integer; ε: array [0..2 n 1 1] of complex; b, x: array [0..2 n D ] of complex ; m : 0 m < n :: if m T D then ; j ( 0..2 n D 1 and ) j ( (2 m ) l = 0 :: ) ( ) b[j] 1 ε[tm (p, j)] b[j] b[j + (2 m := ) l ] 1 ε[t m (p, j)] b[j + (2 m ) l ] begin s {b[j] : j 0..2 n D 1} to p (2 m ) D ; receive {x[j] : j 0..2 n D 1} from p (2 m ) D ; if p (2 m ) D = 0 then ; j : j 0..2 n D 1 :: b[j] = b[j] + ε[t m (p, j)] x[j] ; j : j 0..2 n D 1 :: b[j] = x[j] ε[t m (p, j)] b[j] 21 22 program Jacobi-1 k, m, n: integer; u, f : array [0..M, 0..N] of real ; m, n : (m, n) 0..M 0..N :: f [m, n] = f m,n ; ; m, n : (m, n) 1..M 1 1..N 1 :: u[m, n] = ũ (0) m,n; ; n : n 0..N :: u[0, n], u[m, n] = g 0,n, g M,n ; ; m : m 0..M :: u[m, 0], u[m, N] = g m,0, g m,n m, n : (m, n) 1..M 1 1..N 1 :: u[m, n] := 0.25 (h 2 f [m, n] + u[m 1, n] + u[m + 1, n] +u[m, n 1] + u[m, n + 1]) { ; m, n : (m, n) 0..M 0..N :: u[m, n] = ũ (K) m,n} 0..P 1 0..Q 1 (p, q) program Jacobi-2 k, ; u: array [ 1..Ip, 1..Jq] of real; f : array [0..Ip 1, 0..Jq 1] of real; b1, b2: array [ 1..Jq 1] of real ; i, j : (i, j) 0..Ip 1 0..Jq 1 :: f [i, j] = fmp+i,nq+j; ; i, j : (i, j) 1..Ip 1..Jq :: u[i, j] = ũ (0) Mp+i,Nq+j ; if p = 0 then ; j : j 1..Jq :: u[ 1, j] = g0,nq+j; if p = P 1 then ; j : j 1..Jq :: u[ip, j] = gm,nq+j; if q = 0 then ; i : i 1..Ip :: u[i, 1] = gmp+i,0; if q = Q 1 then ; i : i 1..Ip :: u[i, Jq] = gmp+i,n {Local Relaxation} ; j : j 0..Jq 1 :: b2[j] := u[ 1, j]; ; i : i 0..Ip 1 :: ; j : j 1..Jq 1 :: b1[j] := u[i, j]; ; j : j 1..Jq 1 :: u[i, j] := 0.25 (h 2 f [i, j] + b1[j 1] + b2[j] + u[i, j + 1] + u[i + 1, j]) ; ; j : j 0..Jq 1 :: b2[j] := b1[j] ; {Ghost-Boundary Exchange} s {u[i, Jq 1] : i 0..Ip 1} to (p, q + 1); receive {u[i, 1] : i 0..Ip 1} from (p, q 1); s {u[i, 0] : i 0..Ip 1} to (p, q 1); receive {u[i, Jq] : j 0..Ip 1} from (p + 1, q); s {u[ip 1, j] : i 1..Jq} to (p + 1, q); receive {u[ 1, j] : i 1..Jq} from (p 1, q); s {u[0, j] : i 1..Jq} to (p 1, q); receive {u[ip, j] : i 1..Jq} from (p, q + 1); 23 24

program Gauss-Seidel-1 k, m, n: integer; u, f : array [0..M, 0..N] of real ; m, n : (m, n) 0..M 0..N :: f [m, n] = f m,n ; ; m, n : (m, n) 1..M 1 1..N 1 :: u[m, n] = ũ (0) m,n; ; n : n 0..N :: u[0, n], u[m, n] = g 0,n, g M,n ; ; m : m 0..M :: u[m, 0], u[m, N] = g m,0, g m,n ; n : n 1..N 1 :: ; m : m 1..M 1 :: u[m, n] := 0.25 (h 2 f [m, n] + u[m 1, n] + u[m + 1, n] +u[m, n 1] + u[m, n + 1]) { ; m, n : (m, n) 0..M 0..N :: u[m, n] = ũ (K) m,n} 0..P 1 0..Q 1 (p, q) program Gauss-Seidel-2 k, ; u: array [ 1..Ip, 1..Jq] of real; f : array [0..Ip 1, 0..Jq 1] of real; b1, b2: array [ 1..Jq 1] of real ; i, j : (i, j) 0..Ip 1 0..Jq 1 :: f [i, j] = fmp+i,nq+j; ; i, j : (i, j) 1..Ip 1..Jq :: u[i, j] = ũ (0) Mp+i,Nq+j ; if p = 0 then ; j : j 1..Jq :: u[ 1, j] = g0,nq+j; if p = P 1 then ; j : j 1..Jq :: u[ip, j] = gm,nq+j; if q = 0 then ; i : i 1..Ip :: u[i, 1] = gmp+i,0; if q = Q 1 then ; i : i 1..Ip :: u[i, Jq] = gmp+i,n receive {u[ 1, j] : i 0..Jq 1} from (p 1, q); receive {u[i, 1] : i 0..Ip 1} from (p, q 1); ; j : j 0..Jq 1 :: ; i : i 0..Ip 1 :: u[i, j] := 0.25 (h 2 f [i, j] + u[i 1, j] + u[i + 1, j] +u[i, j 1] + u[i, j + 1]) ; s {u[ip 1, j] : i 0..Jq 1} to (p + 1, q); s {u[i, Jq 1] : i 0..Ip 1} to (p, q + 1); s {u[0, j] : i 0..Jq 1} to (p 1, q); s {u[i, 0] : i 0..Ip 1} to (p, q 1); receive {u[ip, j] : i 0..Jq 1} from (p, q + 1); receive {u[i, Jq] : j 0..Ip 1} from (p + 1, q); 25 26 program Conjugate-Gradient k: integer; ξ, β, Π 0 r r, π 1 r r, π pw: real; p, r, w, x: vector r := r Ax; p := r ; π 0 r r := r T r ; w := Ap; π pw := p T w; ξ := π 0 r r /π pw; x := x + ξp; r := r ξw; π 1 r r := r T r ; β := π 1 r r /π 0 r r ; p := r + βp; π 0 r r := π 1 r r ; 0..P 1 0..Q 1 (p, q) program Assign(u, g u, v, g v ) {u(g u ) := v(g v )} u, v: array [ 3..I p + 2, 3..J q + 2] of real; g u, u n, u e, u s, u w : integer; g v, v n, v e, v s, v w : integer; u n, u e, u s, u w := J q + g u, I p + g u, 1 g u, 1 g u ; v n, v e, v s, v w := J q + g v, I p + g v, 1 g v, 1 g v ; ; i : 0 i < I p :: u[i, u s ] := v[i, v s ]; ; i : 0 i < I p :: u[i, u n ] := v[i, v n ]; ; i : 0 j < J q :: u[u w, j] := v[v w, j]; ; i : 0 j < J q :: u[u e, j] := v[v e, j]; u[u w, u s ] := v[v w, v s ]; u[u w, u n ] := v[v w, v n ]; u[u e, u s ] := v[v e, v s ]; u[u e, u n ] := v[v e, v n ] 27 28

0..P 1 0..Q 1 (p, q) program Vector-Sum(u, g u, v, g v, α, w, g w ) {u(g u ) := v(g v ) + αw(g w )} α: real; u, v, w: array [ 3..I p + 2, 3..J q + 2] of real; g u, u n, u e, u s, u w : integer; g v, v n, v e, v s, v w : integer; g w, w n, w e, w s, w w : integer; u n, u e, u s, u w := J q + g u, I p + g u, 1 g u, 1 g u ; v n, v e, v s, v w := J q + g v, I p + g v, 1 g v, 1 g v ; w n, w e, w s, w w := J q + g w, I p + g w, 1 g w, 1 g w ; ; i : 0 i < I p :: u[i, u s ] := v[i, v s ] + αw[i, w s ]; ; i : 0 i < I p :: u[i, u n ] := v[i, v n ] + αw[i, w n ]; ; i : 0 j < J q :: u[u w, j] := v[v w, j] + αw[w w, j]; ; i : 0 j < J q :: u[u e, j] := v[v e, j] + αw[w e, j]; u[u w, u s ] := v[v w, v s ] + αw[w w, w s ]; u[u w, u n ] := v[v w, v n ] + αw[w w, w n ]; u[u e, u s ] := v[v e, v s ] + αw[w e, w s ]; u[u e, u n ] := v[v e, v n ] + αw[w e, w n ] 0..P 1 0..Q 1 (p, q) program Inner-Product(π uv, u, g u, v, g v ) {π uv := u(g u ) T v(g v )} u, v: array [ 3..I p + 2, 3..J q + 2] of real; g u, u n, u e : integer; g v, v n, v e : integer; {Outer-boundary variables are assumed to be 0!} u n, u e := J q + g u, I p + g u, 1 g u ; v n, v e := J q + g v, I p + g v, 1 g v ; π uv := u[u e, u n ]v[v e, v n ]; π uv := π uv + +i : 0 i < I p :: u[i, u n ]v[i, v n ]; π uv := π uv + +i : 0 j < J q :: u[u e, j]v[v e, j]; Recursive-Double-Sum(π uv ) 29 30 0..P 1 0..Q 1 (p, q) program Zero-Exterior(u, g u ) u: array [ 3..I p + 2, 3..J q + 2] of real; g u, u n, u e, u s, u w : integer; u n, u e, u s, u w := J q + g u, I p + g u, 1 g u, 1 g u, 1 g u ; if q = 0 then begin ; i : 0 i < I p :: u[i, u s ] := 0; u[u w, u s ], u[u e, u s ] := 0, 0; if p = 0 then begin ; j : 0 j < J q :: u[u w, j] := 0; u[u w, u s ], u[u w, u n ] := 0, 0; if q = Q 1 then begin ; i : 0 i < I p :: u[i, u n ] := 0; u[u w, u n ], u[u e, u n ] := 0, 0; if p = P 1 then begin ; j : 0 j < J q :: u[u e, j] := 0; u[u e, u s ], u[u e, u n ] := 0, 0; 0..P 1 0..Q 1 (p, q) program Poisson-Solver(u, f ) u, f : array [ 3..I p + 2, 3..J q + 2] of real; i, j, k: integer {The inner ghost boundary is assumed to carry the u-information!} ; i, j : 0 j < J q and 0 i < I p :: u[i, j] := 0.25 (h 2 f [i, j] + u[i 1, j] + u[i + 1, j]+ u[i, j 1] + u[i, j + 1]) 0..P 1 0..Q 1 (p, q) program Laplace-Solver(u) u: array [ 3..I p + 2, 3..J q + 2] of real; i, j, k: integer {The inner ghost boundary is assumed to carry the u-information!} ; i, j : 0 j < J q and 0 i < I p :: u[i, j] := 0.25 (u[i 1, j] + u[i + 1, j]+ u[i, j 1] + u[i, j + 1]) 31 32

0..P 1 0..Q 1 (p, q) program Update-Ghost-Boundary(u) u: array [ 3..I p + 2, 3..J q + 2] of real; s {u[i, J q 1] : i 1..I p } to (p, q + 1); receive {u[i, 2] : i 1..I p } from (p, q 1); s {u[i, 0] : i 1..I p } to (p, q 1); receive {u[i, J q + 1] : i 1..I p } from (p, q + 1); s {u[i p 1, j] : j 1..J q } to (p + 1, q); receive {u[ 2, j] : j 1..J q } from (p 1, q); s {u[0, j] : j 1..J q } to (p 1, q); receive {u[i p + 1, j] : j 1..J q } from (p + 1, q); 0..P 1 0..Q 1 (p, q) program Residual(u, f ) u, f : array [ 3..I p + 2, 3..J q + 2] of real; Poisson-Solver(u, f ); Update-Ghost-Boundary(u); ; i : 1 i I p :: f [i, 1] := f [i, 1] h 2 (4u[i, 1] u[i 1, 1] u[i + 1, 1] u[i, 2] u[i, 0]); f [i, J q ] := f [i, J q ] h 2 (4u[i, J q ] u[i 1, J q ] u[i + 1, J q ] u[i, J q 1] u[i, J q + 1]) ; ; j : 0 i < j q :: f [ 1, j] := f [ 1, j] h 2 (4u[ 1, j] u[ 1, j 1] u[ 1, j + 1] u[ 2, j] u[0, j]); f [I p, j] := f [I p, j] h 2 (4u[I p, j] u[i p, j 1] u[i p, j + 1] u[i p 1, j] u[i p + 1, j]) ; Zero-Exterior(f, 0) 33 34 0..P 1 0..Q 1 (p, q) program Apply-Capacitance-Matrix(u, f ) u, f : array [ 3..I p + 2, 3..J q + 2] of real; Laplace-Solver(u); Update-Ghost-Boundary(u); ; i : 1 i I p :: f [i, 1] := h 2 (4u[i, 1] u[i 1, 1] u[i + 1, 1] u[i, 2] u[i, 0]); f [i, J q ] := h 2 (4u[i, J q ] u[i 1, J q ] u[i + 1, J q ] u[i, J q 1] u[i, J q + 1]) ; ; j : 0 i < j q :: f [ 1, j] := h 2 (4u[ 1, j] u[ 1, j 1] u[ 1, j + 1] u[ 2, j] u[0, j]); f [I p, j] := h 2 (4u[I p, j] u[i p, j 1] u[i p, j + 1] u[i p 1, j] u[i p + 1, j]) ; Zero-Exterior(f, 0) 35 0..P 1 0..Q 1 (p, q) program Domain-Decomposition u, f : array [ 3..I p + 2, 3..J q + 2] of real; ξ, β, Πr 0 r, π r 1 r, π pw: real; k: integer ; i, j : (i, j) 3..I p + 2 3..J q + 2 :: u[i, j], f [i, j] = 0, 0; ; i, j : (i, j) 1..I p 1..J q :: f [i, j] = f Mp+i+1,Nq+j+1; ; i, j : (i, j) 1..I p 1..J q :: u[i, j] = ũ (0) M ; p+i+1,n q+j+1 if p = 0 then ; j : j 0..J q :: u[ 1, j] = g 0,Nq+j+1; if p = P 1 then ; j : j 0..J q :: u[i p, j] = g M,Nq+j+1; if q = 0 then ; i : i 0..I p :: u[i, 1] = g Mp+i+1,0; if q = Q 1 then ; i : i 0..I p :: u[i, J q ] = g Mp+i+1,N Residual(u, f ); Assign(u, 2, u, 0); Assign(f, 1, f, 0); Assign(u, 0, f, 0); Inner-Product(πr 0 r, f, 0, f, 0); Apply-Capacitance-Matrix(u, f ); Inner-Product(π pw, u, 0, f, 0); ξ := πr 0 r /π pw; Vector-Sum(u, 2, u, 2, ξ, u, 0); Vector-Sum(f, 1, f, 1, ξ, f, 0); Inner-Product(πr 1 r, f, 1, f, 1); β := πr 1 r /π r 0 r ; Vector-Sum(u, 0, f, 1, β, u, 0); πr 0 r := π r 1 r ; ; Assign(u, 0, u, 2); 36 Poisson-Solver(u, f )