Block decomposition: for “solve two-boundaries” blocks, move the iteration loop outside the dynamic file

time-shift
Sébastien Villemot 2020-06-16 15:34:59 +02:00
parent c25ff09307
commit 6931614809
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
3 changed files with 21 additions and 7 deletions

View File

@ -47,5 +47,7 @@ function ra = lnsrch1_wrapper_two_boundaries(ya, fname, y, y_index, x, ...
%reshape the input arguments of the dynamic function
y(y_kmin+1:y_kmin+periods, y_index) = reshape(ya',length(y_index),periods)';
[r, T, g1]=feval(fname, y, x, params, steady_state, T, periods, false, y_kmin, y_size);
ra = reshape(r(:, y_kmin+1:periods+y_kmin),periods*y_size, 1);
ra = NaN(periods*y_size, 1);
for it_ = y_kmin+(1:periods)
[ra((it_-y_kmin-1)*y_size+(1:y_size)), T, g1]=feval(fname, y, x, params, steady_state, T, it_, false);
end

View File

@ -80,11 +80,23 @@ ilu_setup.udiag = 0;
max_resa=1e100;
reduced = 0;
while ~(cvg==1 || iter>maxit_)
[r, T, g1]=feval(fname, y, x, params, steady_state, T, periods, false, y_kmin, Blck_size);
r = NaN(Blck_size, periods);
g1a = spalloc(Blck_size*periods, Blck_size*periods, nze*periods);
for it_ = y_kmin+(1:periods)
[r(:, it_-y_kmin), T, g1]=feval(fname, y, x, params, steady_state, T, it_, false);
if periods == 1
g1a = g1(:, Blck_size+(1:Blck_size));
elseif it_ == y_kmin+1
g1a(1:Blck_size, 1:Blck_size*2) = g1(:, Blck_size+1:end);
elseif it_ == y_kmin+periods
g1a((periods-1)*Blck_size+1:end, (periods-2)*Blck_size+1:end) = g1(:, 1:2*Blck_size);
else
g1a((it_-y_kmin-1)*Blck_size+(1:Blck_size), (it_-y_kmin-2)*Blck_size+(1:3*Blck_size)) = g1;
end
end
preconditioner = 2;
g1a=g1(:, y_kmin*Blck_size+1:(periods+y_kmin)*Blck_size);
ya = reshape(y(y_kmin+1:y_kmin+periods,y_index)',1,periods*Blck_size)';
ra = reshape(r(:, y_kmin+1:periods+y_kmin),periods*Blck_size, 1);
ya = reshape(y(y_kmin+(1:periods),y_index)', 1, periods*Blck_size)';
ra = reshape(r, periods*Blck_size, 1);
b=-ra+g1a*ya;
[max_res, max_indx]=max(max(abs(r')));
if ~isreal(r)

@ -1 +1 @@
Subproject commit 85b900363d58b42aa0d0dc4d5e3a2d02bf792448
Subproject commit 379be6ccef55dc38af04edb881bf6aa57bdecd65