LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
MG1_RR_tempBFFT.m
1% computes the product temp*B with B = L(b)+L(c1)L(Zr1)'+L(c2)L(Zr2)'
2% temp has m rows, the result is stored in temp.
3% STEP 1: temp*L(c1) in temp1a
4
5% preparing for FFT
6temp1t=reshape(temp,m^2,N)';
7temp1b=c1';
8temp1b=reshape(temp1b,m^2,N)';
9temp1b=flipud(temp1b); % termen in omgekeerde volgorde
10
11dim=2*2^ceil(log2(size(temp1t,1)));
12temp1t=fft(temp1t,dim).';
13temp1b=fft(temp1b,dim).';
14
15% now reblock for products
16temp1t=reshape(temp1t,m,m*dim);
17temp1b=reshape(temp1b,m,m*dim).';
18
19for i=1:dim
20 temp1b((i-1)*m+1:i*m,1:m)=temp1t(1:m,(i-1)*m+1:i*m)*...
21 temp1b((i-1)*m+1:i*m,1:m);
22end
23clear temp1t;
24% prepare for IFFT
25temp1b=temp1b.';
26temp1b=reshape(temp1b,m^2,dim).';
27
28temp1b=real(ifft(temp1b))';
29temp1b=reshape(temp1b,m,m*dim)';
30lushelp=N;
31for lus1=1:lushelp
32 temp1a(1:m,(lus1-1)*m+1:lus1*m)=temp1b((lushelp-2+lus1)*m+1:(lushelp-1+lus1)*m,:);
33end
34clear temp1b;
35
36% STEP 2: temp*L(c1)*L(Zr1)' in temp1a, thus (L(Zr1)*temp1a')'
37
38temp1a=temp1a';
39
40% preparing for FFT
41temp1t=temp1a';
42temp1t=reshape(temp1t,m^2,N)';
43temp1b=[zeros(m,m); r1(1:(N-1)*m,:)]';
44temp1b=reshape(temp1b,m^2,N)';
45
46dim=2*2^ceil(log2(size(temp1t,1)));
47temp1t=fft(temp1t,dim).';
48temp1b=fft(temp1b,dim).';
49
50% now reblock for products
51temp1t=reshape(temp1t,m,m*dim).';
52temp1b=reshape(temp1b,m,m*dim).';
53
54for i=1:dim
55 temp1b((i-1)*m+1:i*m,1:m)=temp1b((i-1)*m+1:i*m,1:m)*...
56 temp1t((i-1)*m+1:i*m,1:m);
57end
58clear temp1t;
59% prepare for IFFT
60temp1b=temp1b.';
61temp1b=reshape(temp1b,m^2,dim).';
62
63temp1b=real(ifft(temp1b))';
64temp1b=reshape(temp1b,m,m*dim)';
65
66temp1a=temp1b(1:N*m,:)';
67clear temp1b;
68
69% STEP 3: temp*L(c2) in step2a
70
71% preparing for FFT
72temp1t=reshape(temp,m^2,N)';
73temp1b=c2';
74temp1b=reshape(temp1b,m^2,N)';
75temp1b=flipud(temp1b); % termen in omgekeerde volgorde
76
77dim=2*2^ceil(log2(size(temp1t,1)));
78temp1t=fft(temp1t,dim).';
79temp1b=fft(temp1b,dim).';
80
81% now reblock for products
82temp1t=reshape(temp1t,m,m*dim);
83temp1b=reshape(temp1b,m,m*dim).';
84
85for i=1:dim
86 temp1b((i-1)*m+1:i*m,1:m)=temp1t(1:m,(i-1)*m+1:i*m)*...
87 temp1b((i-1)*m+1:i*m,1:m);
88end
89clear temp1t;
90% prepare for IFFT
91temp1b=temp1b.';
92temp1b=reshape(temp1b,m^2,dim).';
93
94temp1b=real(ifft(temp1b))';
95temp1b=reshape(temp1b,m,m*dim)';
96lushelp=N;
97for lus1=1:lushelp
98 temp2a(1:m,(lus1-1)*m+1:lus1*m)=temp1b((lushelp-2+lus1)*m+1:(lushelp-1+lus1)*m,:);
99end
100clear temp1b;
101% STEP4: temp*(L(c2)*L(Zr2)'+L(c1)*L(Zr1)') in temp1a
102
103temp2a=temp2a';
104
105% preparing for FFT
106temp1t=temp2a';
107clear temp2a;
108temp1t=reshape(temp1t,m^2,N)';
109temp1b=[zeros(m,m); r2(1:(N-1)*m,:)]';
110temp1b=reshape(temp1b,m^2,N)';
111
112dim=2*2^ceil(log2(size(temp1t,1)));
113temp1t=fft(temp1t,dim).';
114temp1b=fft(temp1b,dim).';
115
116% now reblock for products
117temp1t=reshape(temp1t,m,m*dim).';
118temp1b=reshape(temp1b,m,m*dim).';
119
120for i=1:dim
121 temp1b((i-1)*m+1:i*m,1:m)=temp1b((i-1)*m+1:i*m,1:m)*...
122 temp1t((i-1)*m+1:i*m,1:m);
123end
124clear temp1t;
125% prepare for IFFT
126temp1b=temp1b.';
127temp1b=reshape(temp1b,m^2,dim).';
128
129temp1b=real(ifft(temp1b))';
130temp1b=reshape(temp1b,m,m*dim)';
131
132temp1a=temp1b(1:N*m,:)'+temp1a; % (temp*L(c2)*L(Zr2))' in temp1b
133clear temp1b;
134
135% STEP 5: temp*B in temp
136
137% preparing for FFT
138temp1t=reshape(temp,m^2,N)';
139temp1b=b';
140temp1b=reshape(temp1b,m^2,N)';
141temp1b=flipud(temp1b); % termen in omgekeerde volgorde
142
143dim=2*2^ceil(log2(size(temp1t,1)));
144temp1t=fft(temp1t,dim).';
145temp1b=fft(temp1b,dim).';
146
147% now reblock for products
148temp1t=reshape(temp1t,m,m*dim);
149temp1b=reshape(temp1b,m,m*dim).';
150
151for i=1:dim
152 temp1b((i-1)*m+1:i*m,1:m)=temp1t(1:m,(i-1)*m+1:i*m)*...
153 temp1b((i-1)*m+1:i*m,1:m);
154end
155clear temp1t;
156% prepare for IFFT
157temp1b=temp1b.';
158temp1b=reshape(temp1b,m^2,dim).';
159
160temp1b=real(ifft(temp1b))';
161temp1b=reshape(temp1b,m,m*dim)';
162lushelp=N;
163for lus1=1:lushelp
164 temp(1:m,(lus1-1)*m+1:lus1*m)=temp1b((lushelp-2+lus1)*m+1:(lushelp-1+lus1)*m,:);
165end
166clear temp1b;
167temp=temp+temp1a;
168clear temp1a