Skip to content

Commit d1495bb

Browse files
committed
test ising
1 parent a9ac55a commit d1495bb

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

chunkie/+chnk/+helm2dquas/green.m

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@
100100
val_near= zeros(nkappa,nptclose);
101101
grad_near = zeros(nkappa,nptclose,2);
102102
hess_near = zeros(nkappa,nptclose,3);
103+
ls = -l:l;
103104
if ~isempty(rxclose)
104-
ls = -l:l;
105105
for i = ls
106106
if ising == 1
107107
iuse = true(nptclose,1);
@@ -204,9 +204,11 @@
204204
if ising == 0
205205
isub = (abs(nx) > max(ls)) | ifar;
206206

207+
if any(isub)
207208
vali = chnk.helm2d.green(zk,[0;0],[rx(isub).' + nx(isub).'*d;ry(isub).']);
208209
vali = reshape(vali,1,[],1);
209210
val(:,isub,:) = val(:,isub,:) - vali;
211+
end
210212
end
211213

212214
val = reshape(val,nkappa*ntarg,nsrc);
@@ -217,11 +219,13 @@
217219
if ising == 0
218220
isub = (abs(nx) > max(ls)) | ifar;
219221

222+
if any(isub)
220223
[vali, gradi] = chnk.helm2d.green(zk,[0;0],[rx(isub).' + nx(isub).'*d;ry(isub).']);
221224
vali = reshape(vali,1,[],1);
222225
gradi = reshape(gradi,1,[],2);
223226
val(:,isub,:) = val(:,isub,:) - vali;
224227
grad(:,isub,:) = grad(:,isub,:) - gradi;
228+
end
225229
end
226230

227231
val = reshape(val,nkappa*ntarg,nsrc);
@@ -234,6 +238,7 @@
234238
if ising == 0
235239
isub = (abs(nx) > max(ls)) | ifar;
236240

241+
if any(isub)
237242
[vali, gradi, hessi] = chnk.helm2d.green(zk,[0;0],[rx(isub).' + nx(isub).'*d;ry(isub).']);
238243
vali = reshape(vali,1,[],1);
239244
gradi = reshape(gradi,1,[],2);
@@ -242,6 +247,7 @@
242247
val(:,isub,:) = val(:,isub,:) - vali;
243248
grad(:,isub,:) = grad(:,isub,:) - gradi;
244249
hess(:,isub,:) = hess(:,isub,:) - hessi;
250+
end
245251
end
246252

247253
val = reshape(val,nkappa*ntarg,nsrc);

chunkie/@kernel/helm2dquas.m

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,42 +88,42 @@
8888
quas_param.sn = sn;
8989

9090
obj.params.quas_param = quas_param;
91-
91+
obj.params.ising = ising;
9292
switch lower(type)
9393

9494
case {'s', 'single'}
9595
obj.type = 's';
96-
obj.eval = @(s,t) chnk.helm2dquas.kern(zk, s, t, 's',quas_param,ising);
96+
obj.eval = @(s,t) chnk.helm2dquas.kern(zk, s, t, 's',quas_param,[],ising);
9797
obj.fmm = [];
9898
obj.sing = 'log';
9999
if isscalar(kappa)
100100
obj.splitinfo = [];
101101
obj.splitinfo.type = {[0 0 0 0],[1 0 0 0]};
102102
obj.splitinfo.action = {'r','r'};
103-
obj.splitinfo.functions = @(s,t) helm2dquas_s_split(zk,s,t,quas_param,ising);
103+
obj.splitinfo.functions = @(s,t) helm2dquas_s_split(zk,s,t,quas_param);
104104
end
105105

106106
case {'d', 'double'}
107107
obj.type = 'd';
108-
obj.eval = @(s,t) chnk.helm2dquas.kern(zk, s, t, 'd',quas_param,ising);
108+
obj.eval = @(s,t) chnk.helm2dquas.kern(zk, s, t, 'd',quas_param,[],ising);
109109
obj.fmm = [];
110110
obj.sing = 'log';
111111
if isscalar(kappa)
112112
obj.splitinfo = [];
113113
obj.splitinfo.type = {[0 0 0 0],[1 0 0 0],[0 0 -1 0]};
114114
obj.splitinfo.action = {'r','r','r'};
115-
obj.splitinfo.functions = @(s,t) helm2dquas_d_split(zk,s,t,quas_param,ising);
115+
obj.splitinfo.functions = @(s,t) helm2dquas_d_split(zk,s,t,quas_param);
116116
end
117117

118118
case {'sp', 'sprime'}
119119
obj.type = 'sp';
120-
obj.eval = @(s,t) chnk.helm2dquas.kern(zk, s, t, 'sprime',quas_param,ising);
120+
obj.eval = @(s,t) chnk.helm2dquas.kern(zk, s, t, 'sprime',quas_param,[],ising);
121121
obj.fmm = [];
122122
obj.sing = 'log';
123123

124124
case {'dp', 'dprime'}
125125
obj.type = 'dp';
126-
obj.eval = @(s,t) chnk.helm2dquas.kern(zk, s, t, 'dprime',quas_param,ising);
126+
obj.eval = @(s,t) chnk.helm2dquas.kern(zk, s, t, 'dprime',quas_param,[],ising);
127127
obj.fmm = [];
128128
obj.sing = 'hs';
129129

@@ -141,7 +141,7 @@
141141
obj.splitinfo = [];
142142
obj.splitinfo.type = {[0 0 0 0],[1 0 0 0],[0 0 -1 0]};
143143
obj.splitinfo.action = {'r','r','r'};
144-
obj.splitinfo.functions = @(s,t) helm2dquas_c_split(zk,s,t,quas_param,coefs,ising);
144+
obj.splitinfo.functions = @(s,t) helm2dquas_c_split(zk,s,t,quas_param,coefs);
145145
end
146146

147147
case {'cp', 'cprime'}
@@ -159,6 +159,10 @@
159159
error('Unknown Helmholtz kernel type ''%s''.', type);
160160

161161
end
162+
if obj.params.ising == 0
163+
obj.sing = 'smooth';
164+
obj.splitinfo = [];
165+
end
162166
end
163167

164168
function f = helm2dquas_s_split(zk,s,t,quas_param)

devtools/test/quasiperiodicTest.m

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,25 @@ function quasiperiodicTest0()
8787
c2trval_assemb(1:2, :) = coefs(1)*dval + coefs(2)*sval;
8888
c2trval_assemb(3:end, :) = coefs(1)*dpval + coefs(2)*spval;
8989
assert(norm(c2trval_assemb-c2trval) < 1e-12)
90+
91+
92+
skern1a = kernel('hq','s',zk,kappa,d,[],[],0);
93+
skern1b = kernel('h','s',zk);
94+
sval1 = skern1a.eval(src,targ) + skern1b.eval(src,targ);
95+
assert(norm(sval-sval1) < 1e-12)
96+
97+
dkern1a = kernel('hq','d',zk,kappa,d,[],[],0);
98+
dkern1b = kernel('h','d',zk);
99+
dval1 = dkern1a.eval(src,targ) + dkern1b.eval(src,targ);
100+
assert(norm(dval-dval1) < 1e-12)
101+
102+
allkern1a = kernel(@(s,t) chnk.helm2dquas.kern(zk,s,t,'all',quas_param,coefa,0));
103+
allkern1b = kernel(@(s,t) chnk.helm2d.kern(zk,s,t,'all',coefa));
104+
allval1a = allkern1a.eval(src,targ);
105+
allval1b = allkern1b.eval(src,targ);
106+
allval1b = reshape(allval1b,1,2,2); allval1b = repmat(allval1b,length(kappa),1,1);
107+
allval1b = reshape(allval1b,length(kappa)*2,2);
108+
assert(norm(allval1a+allval1b -allval) < 1e-12)
90109
end
91110

92111

0 commit comments

Comments
 (0)