<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>k-Wave User Forum &#187; Topic: C++/GPU version of kspaceFirstOrder2D</title>
		<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d</link>
		<description>Support for the k-Wave MATLAB toolbox</description>
		<language>en-US</language>
		<pubDate>Wed, 13 May 2026 01:14:49 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.2</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://www.k-wave.org/forum/search.php</link>
		</textInput>
		<atom:link href="http://www.k-wave.org/forum/rss/topic/c-version-of-kspacefirstorder2d" rel="self" type="application/rss+xml" />

		<item>
			<title>bramth on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7268</link>
			<pubDate>Thu, 05 Mar 2020 10:20:45 +0000</pubDate>
			<dc:creator>bramth</dc:creator>
			<guid isPermaLink="false">7268@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Brad, thank you indeed! I'll just use the interference effect then.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>gpr on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7262</link>
			<pubDate>Wed, 04 Mar 2020 19:11:45 +0000</pubDate>
			<dc:creator>gpr</dc:creator>
			<guid isPermaLink="false">7262@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Brad, thank you very much, I appreciate.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7261</link>
			<pubDate>Wed, 04 Mar 2020 14:07:27 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">7261@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Bram,&#60;/p&#62;
&#60;p&#62;No, this is not included in the C++/CUDA version either.&#60;/p&#62;
&#60;p&#62;I'll add this to the list of error conditions also.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>bramth on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7260</link>
			<pubDate>Wed, 04 Mar 2020 13:54:41 +0000</pubDate>
			<dc:creator>bramth</dc:creator>
			<guid isPermaLink="false">7260@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Bradley,&#60;br /&#62;
Adding to this, is the sensor directivity implemented in C++/CUDA versions?&#60;br /&#62;
sensor.directivity_angle = (any angle)&#60;br /&#62;
sensor.directivity_pattern = 'pressure'; % alternatively: 'gradient'&#60;br /&#62;
sensor.directivity_size = transducer.element_width;&#60;/p&#62;
&#60;p&#62;Seems to give a large difference between 2D and 2DG. (On Linux, own compiled source.)&#60;/p&#62;
&#60;p&#62;Bram
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7255</link>
			<pubDate>Wed, 04 Mar 2020 11:32:06 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">7255@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi gpr,&#60;/p&#62;
&#60;p&#62;The problems is that &#60;code&#62;medium.alpha_mode = no_dispersion&#60;/code&#62; is not implemented in the C++/CUDA codes. If you remove this line, the two agree to machine precision. &#60;/p&#62;
&#60;p&#62;I'll add it to the bug list to add an error condition if the code is used in this way.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>gpr on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7251</link>
			<pubDate>Tue, 03 Mar 2020 18:02:47 +0000</pubDate>
			<dc:creator>gpr</dc:creator>
			<guid isPermaLink="false">7251@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Brad,&#60;br /&#62;
yes the masks are binary.&#60;/p&#62;
&#60;p&#62;Absolutely, here is a code to paste in a matlab script. I just change the variable &#34;simvis&#34; at the beginning, which only changes the run mode (or so I thought). This, however, provides a different result.&#60;/p&#62;
&#60;p&#62;Regards&#60;/p&#62;
&#60;p&#62;__________________________________________________________________________________________&#60;br /&#62;
__________________________________________________________________________________________&#60;/p&#62;
&#60;p&#62;clear all&#60;br /&#62;
clc&#60;br /&#62;
close all&#60;/p&#62;
&#60;p&#62;gpuDeviceCount&#60;/p&#62;
&#60;p&#62;d = gpuDevice&#60;/p&#62;
&#60;p&#62;simvis = 1;&#60;/p&#62;
&#60;p&#62;%%&#60;/p&#62;
&#60;p&#62;% an_lim = 20;%26.5651;&#60;br /&#62;
% angle = linspace(-an_lim,an_lim,11);&#60;br /&#62;
angle = 0;&#60;/p&#62;
&#60;p&#62;%% &#60;/p&#62;
&#60;p&#62;ref_speed_of_sound = 1500;&#60;br /&#62;
centerfreq = 3.5e6;&#60;br /&#62;
lamb = ref_speed_of_sound/centerfreq;&#60;br /&#62;
press =  1e5; %;%5e6;&#60;/p&#62;
&#60;p&#62;afety_co = 0.1e-6;&#60;br /&#62;
afety_co_2 = 0.5e-6;&#60;/p&#62;
&#60;p&#62;run_on_gpu = 1;&#60;br /&#62;
if run_on_gpu == 0&#60;br /&#62;
    p = gcp;&#60;br /&#62;
end&#60;/p&#62;
&#60;p&#62;%% create the computational grid&#60;/p&#62;
&#60;p&#62;trans_foc = 30/1e3;&#60;/p&#62;
&#60;p&#62;sub_lamb_coef = 4;&#60;br /&#62;
pix_size = lamb/sub_lamb_coef;&#60;/p&#62;
&#60;p&#62;diam_trans_m = 40e-3;&#60;br /&#62;
diam_trans_pi = ceil(diam_trans_m/pix_size);&#60;/p&#62;
&#60;p&#62;depth_im_m =  trans_foc*1.1 ; %  3e-3; % 100; %120; % in wavelengths&#60;br /&#62;
depth_im_pi = depth_im_m./pix_size;&#60;/p&#62;
&#60;p&#62;PML_size = 32;              % size of the PML in grid points&#60;br /&#62;
PMLAlpha = 50;&#60;/p&#62;
&#60;p&#62;x = 2;&#60;br /&#62;
a = 1;&#60;br /&#62;
Nx = x^a;&#60;br /&#62;
while Nx*pix_size &#38;lt;= diam_trans_m + 2 * PML_size*pix_size&#60;br /&#62;
    display(Nx*pix_size)&#60;br /&#62;
    a = a+1;&#60;br /&#62;
    Nx = x^a;&#60;br /&#62;
end&#60;br /&#62;
Nx = Nx - 2 * PML_size&#60;/p&#62;
&#60;p&#62;x = 2;&#60;br /&#62;
a = 1;&#60;br /&#62;
Nz = x^a;&#60;br /&#62;
while Nz*pix_size &#38;lt;= depth_im_m +  2 * PML_size*pix_size&#60;br /&#62;
    a = a+1;&#60;br /&#62;
    Nz = x^a;&#60;br /&#62;
end&#60;br /&#62;
Nz = Nz - 2 * PML_size&#60;/p&#62;
&#60;p&#62;display('image width (mm)');&#60;br /&#62;
display(Nx*pix_size*1e3);&#60;br /&#62;
display('image depth (mm)');&#60;br /&#62;
display(Nz*pix_size*1e3);&#60;br /&#62;
display('transducer focus (mm)');&#60;br /&#62;
display(trans_foc*1e3);&#60;br /&#62;
display('transducer diameter (mm)');&#60;br /&#62;
display(diam_trans_m*1e3);&#60;/p&#62;
&#60;p&#62;kgrid = kWaveGrid(Nx, pix_size, Nz, pix_size);&#60;/p&#62;
&#60;p&#62;%% material properties&#60;/p&#62;
&#60;p&#62;crod = 2000;&#60;br /&#62;
rhorod = 5000;&#60;br /&#62;
BonArod = 0;&#60;br /&#62;
alpha_coeffrod = 1;&#60;/p&#62;
&#60;p&#62;Cliver = 1559;&#60;br /&#62;
BonAliver = 8;&#60;br /&#62;
rholiver = 1020;&#60;br /&#62;
alpha_coeff_liver = 0.8;&#60;/p&#62;
&#60;p&#62;%% map&#60;/p&#62;
&#60;p&#62;% dx = 0.02;&#60;br /&#62;
dx = 0.002;&#60;br /&#62;
R = random('Uniform',1-dx,1+dx,size(kgrid.x,1),size(kgrid.x,2),size(kgrid.x,3));&#60;/p&#62;
&#60;p&#62;    sound_speed_lo = Cliver.*R;&#60;br /&#62;
    density_lo = rholiver.*R;&#60;br /&#62;
    BonA_lo = BonAliver.*R;&#60;br /&#62;
    alpha_coeff_lo = alpha_coeff_liver.*R;&#60;br /&#62;
    c_med = Cliver;&#60;/p&#62;
&#60;p&#62;medium.sound_speed = sound_speed_lo;&#60;br /&#62;
medium.density = density_lo;&#60;br /&#62;
medium.BonA = BonA_lo;  %  0;   %&#60;br /&#62;
medium.alpha_coeff = alpha_coeff_lo;&#60;/p&#62;
&#60;p&#62;%%&#60;/p&#62;
&#60;p&#62;medium.alpha_mode = 'no_dispersion';&#60;br /&#62;
medium.alpha_power = 1.01;  %&#60;/p&#62;
&#60;p&#62;%% make rod&#60;/p&#62;
&#60;p&#62;    disc = zeros(Nx,Nz);&#60;/p&#62;
&#60;p&#62;    cx = round(Nx/2);&#60;br /&#62;
    cy = round(Nz/2);&#60;br /&#62;
    disc = disc+makeDisc(Nx, Nz, cx, cy, sub_lamb_coef/2);&#60;/p&#62;
&#60;p&#62;    dx = 0.001;&#60;br /&#62;
    R = random('Uniform',1-dx,1+dx,size(kgrid.x,1),size(kgrid.x,2),size(kgrid.x,3));&#60;/p&#62;
&#60;p&#62;    medium.sound_speed = (medium.sound_speed.*(1-disc))+disc.*crod.*R;&#60;br /&#62;
    medium.density = (medium.density.*(1-disc))+disc.*rhorod.*R;&#60;br /&#62;
    medium.BonA = (medium.BonA.*(1-disc))+disc.*BonArod.*R;&#60;br /&#62;
    medium.alpha_coeff = (medium.alpha_coeff.*(1-disc))+disc.*alpha_coeffrod.*R;&#60;/p&#62;
&#60;p&#62;ftsize = 20;&#60;/p&#62;
&#60;p&#62;figure(33)&#60;br /&#62;
colormap('hot');&#60;br /&#62;
sos_map = medium.sound_speed(  :,:,round(size(medium.sound_speed,3)/2));&#60;br /&#62;
imagesc(kgrid.y_vec.*1e3,(kgrid.x_vec-min(kgrid.x_vec)).*1e3,sos_map)&#60;br /&#62;
xlabel('lateral position (mm)','interpreter', 'latex','fontsize',ftsize)&#60;br /&#62;
ylabel('axial position (mm)','interpreter', 'latex','fontsize',ftsize)&#60;br /&#62;
c = colorbar;&#60;br /&#62;
colormap('hot');&#60;/p&#62;
&#60;p&#62;ylabel(c,'speed of sound (m/s)');&#60;br /&#62;
drawnow&#60;/p&#62;
&#60;p&#62;%% to drive the transducer&#60;/p&#62;
&#60;p&#62;deltt = 1.5/centerfreq;&#60;br /&#62;
tau =1/centerfreq/4;&#60;/p&#62;
&#60;p&#62;%% create the time array and input signal&#60;/p&#62;
&#60;p&#62;coti = 1;&#60;br /&#62;
kgrid.makeTime(medium.sound_speed);&#60;br /&#62;
ti = 0:mean(diff(kgrid.t_array))/coti:(Nz*pix_size/c_med+deltt)+(sqrt(Nz^2+Nx^2)*pix_size/c_med+deltt)+5e-6;&#60;/p&#62;
&#60;p&#62;input_signal = sin(2*pi*centerfreq.*ti);&#60;/p&#62;
&#60;p&#62;po = find(ti&#38;gt;deltt,1,'first');&#60;/p&#62;
&#60;p&#62;ti_sig = ti;&#60;br /&#62;
ti_sig(po:end) = [];&#60;br /&#62;
input_signal(po:end) = [];&#60;br /&#62;
input_signal = input_signal./max(input_signal);&#60;/p&#62;
&#60;p&#62;figure(11)&#60;br /&#62;
plot(ti_sig.*1e6,input_signal);&#60;br /&#62;
grid on&#60;/p&#62;
&#60;p&#62;%%&#60;/p&#62;
&#60;p&#62;kgrid.t_array = ti;&#60;/p&#62;
&#60;p&#62;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#60;br /&#62;
%%%%%%%%%%%%%                                                                                   %%%%%%%%%%%%%%%%%%&#60;br /&#62;
%%%%%%%%%%%%%          simulation                                                               %%%%%%%%%%%%%%%%%%&#60;br /&#62;
%%%%%%%%%%%%%                                                                                   %%%%%%%%%%%%%%%%%%&#60;br /&#62;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#60;/p&#62;
&#60;p&#62;total_depth = Nz*pix_size;&#60;br /&#62;
iter = 1;&#60;/p&#62;
&#60;p&#62;sensor_data_c = cell(1,length(angle));&#60;/p&#62;
&#60;p&#62;for p = 1:length(angle)&#60;/p&#62;
&#60;p&#62;    %% sources&#60;br /&#62;
    d = Nx*pix_size*sind(angle(p));&#60;/p&#62;
&#60;p&#62;    x = 1:Nx;&#60;br /&#62;
    xtau = 30;&#60;br /&#62;
    env = (tanh(x./xtau)+fliplr(tanh(x./xtau)))-1;&#60;/p&#62;
&#60;p&#62;    source.p = zeros(Nx,length(ti));&#60;/p&#62;
&#60;p&#62;    n_t = (linspace(0,(d/c_med/mean(diff(ti))),Nx));&#60;br /&#62;
    n_t = round(n_t);&#60;/p&#62;
&#60;p&#62;    if d&#38;lt;0&#60;br /&#62;
        n_t = n_t-min(n_t);&#60;br /&#62;
    end&#60;/p&#62;
&#60;p&#62;    for i = 1:Nx&#60;br /&#62;
        if n_t(i)&#38;gt;0&#60;br /&#62;
            temp = [zeros(1,n_t(i)), input_signal];&#60;br /&#62;
            temp(end+1 : length(ti)) = 0;&#60;br /&#62;
            source.p(i,:) = temp.*press.*env(i);&#60;br /&#62;
        else&#60;br /&#62;
            temp = input_signal;&#60;br /&#62;
            temp(end+1 : length(ti)) = 0;&#60;br /&#62;
            source.p(i,:) = temp.*press.*env(i);&#60;br /&#62;
       end&#60;br /&#62;
    end&#60;/p&#62;
&#60;p&#62;    source.p_mask = zeros(Nx,Nz);&#60;br /&#62;
    center = [Nx/2,trans_foc/pix_size];&#60;/p&#62;
&#60;p&#62;        delt = 0;&#60;br /&#62;
        source.p_mask = zeros(Nx,Nz);&#60;br /&#62;
        source.p_mask(:,1+delt) = 1;&#60;/p&#62;
&#60;p&#62;    figure;&#60;br /&#62;
    imagesc( source.p_mask)&#60;br /&#62;
    drawnow&#60;/p&#62;
&#60;p&#62;    display(sum(source.p_mask(:)));&#60;/p&#62;
&#60;p&#62;    %% sensor&#60;/p&#62;
&#60;p&#62;    sensor.mask = zeros(Nx,Nz);&#60;/p&#62;
&#60;p&#62;    sensor.mask(:,1+delt) = 1;&#60;/p&#62;
&#60;p&#62;    figure;&#60;br /&#62;
    imagesc( sensor.mask )&#60;br /&#62;
    display(sum(sensor.mask(:)))&#60;/p&#62;
&#60;p&#62;    %% set the input arguements&#60;/p&#62;
&#60;p&#62;    if run_on_gpu == 1 &#38;amp;&#38;amp; simvis == 0&#60;/p&#62;
&#60;p&#62;        tic&#60;br /&#62;
        input_args = {'PMLSize', PML_size, 'PMLAlpha', PMLAlpha,'PMLInside', false, 'PlotPML', false, ...&#60;br /&#62;
            'Smooth', false, 'DataCast', 'gpuArray-single', 'CartInterp', 'nearest','PlotSim' , false,...&#60;br /&#62;
            'PlotScale',[-press/10 press/10],'RecordMovie', false };  %   'PlotScale',,[-1e5 1e5]te'auto','RecordMovie', true };  %  [-1e5 1e5]  %&#60;br /&#62;
        % run the simulation&#60;br /&#62;
        filename = 'test_gui.h5';&#60;br /&#62;
        sensor_data = kspaceFirstOrder2DG(kgrid, medium, source, sensor,input_args{:});&#60;br /&#62;
        if isa(sensor_data,'gpuArray')&#60;br /&#62;
            sensor_data = gather(sensor_data);&#60;br /&#62;
        end&#60;br /&#62;
        toc&#60;br /&#62;
    %&#60;br /&#62;
    elseif run_on_gpu == 1 &#38;amp;&#38;amp; simvis == 1&#60;/p&#62;
&#60;p&#62;        tic&#60;br /&#62;
        input_args = {'PMLSize', PML_size, 'PMLAlpha', PMLAlpha,'PMLInside', false, 'PlotPML', false, ...&#60;br /&#62;
            'Smooth', false, 'DataCast', 'gpuArray-single', 'CartInterp', 'nearest','PlotSim' , true,...&#60;br /&#62;
            'PlotScale',[-press/2 press/2],'RecordMovie', false };  %   'PlotScale',,[-1e5 1e5]te'auto','RecordMovie', true };  %  [-1e5 1e5]  %&#60;br /&#62;
        % run the simulation&#60;br /&#62;
        filename = 'test_gui.h5';&#60;br /&#62;
        sensor_data = kspaceFirstOrder2D(kgrid, medium, source, sensor,input_args{:});&#60;br /&#62;
        if isa(sensor_data,'gpuArray')&#60;br /&#62;
            sensor_data = gather(sensor_data);&#60;br /&#62;
        end&#60;br /&#62;
        toc&#60;br /&#62;
    % &#60;/p&#62;
&#60;p&#62;    else&#60;/p&#62;
&#60;p&#62;        tic&#60;br /&#62;
        input_args = {'PMLSize', PML_size, 'PMLAlpha', PMLAlpha,'PMLInside', false, 'PlotPML', false, ...&#60;br /&#62;
            'Smooth', false, 'CartInterp', 'nearest','PlotSim' , true,...&#60;br /&#62;
            'PlotScale','auto','RecordMovie', false };  %   'PlotScale',,[-1e5 1e5]te'auto','RecordMovie', true };  %  [-1e5 1e5]  %&#60;br /&#62;
        % run the simulation&#60;br /&#62;
        sensor_data = kspaceFirstOrder2D(kgrid, medium, source, sensor,input_args{:});&#60;br /&#62;
        toc&#60;/p&#62;
&#60;p&#62;    end&#60;/p&#62;
&#60;p&#62;    sensor_data_c{p} = sensor_data;&#60;/p&#62;
&#60;p&#62;    %%&#60;/p&#62;
&#60;p&#62;    figure(1+p);&#60;br /&#62;
    imagesc(ti.*1e6,kgrid.x_vec,sensor_data)&#60;br /&#62;
    caxis([-3e3 3e3]);&#60;/p&#62;
&#60;p&#62;end
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7250</link>
			<pubDate>Tue, 03 Mar 2020 17:33:39 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">7250@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi gpr,&#60;/p&#62;
&#60;p&#62;What sort of sensor mask are you using?&#60;/p&#62;
&#60;p&#62;With a binary sensor mask, the two codes should agree to machine precision.&#60;/p&#62;
&#60;p&#62;If you're happy to post an example, I'll take a look.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>gpr on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7249</link>
			<pubDate>Tue, 03 Mar 2020 16:57:33 +0000</pubDate>
			<dc:creator>gpr</dc:creator>
			<guid isPermaLink="false">7249@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Brad,&#60;br /&#62;
I encounter an issue when running the new kspaceFirstOrder2DG: with the same code, I obtain a time of flight that is ~10% shorter than with kspaceFirstOrder2D. kspaceFirstOrder2D is correct.&#60;br /&#62;
Did I miss something?&#60;br /&#62;
Regards
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7222</link>
			<pubDate>Wed, 12 Feb 2020 12:31:46 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">7222@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi dyangsteven,&#60;/p&#62;
&#60;p&#62;Yes - it will be out in a few weeks with the next release.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>dyangsteven on "C++/GPU version of kspaceFirstOrder2D"</title>
			<link>http://www.k-wave.org/forum/topic/c-version-of-kspacefirstorder2d#post-7207</link>
			<pubDate>Fri, 07 Feb 2020 21:18:05 +0000</pubDate>
			<dc:creator>dyangsteven</dc:creator>
			<guid isPermaLink="false">7207@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi,&#60;br /&#62;
I'm wondering is there a C++ or GPU version of kspaceFirstOrder2D code? I'm generating a large amount of 2D k-wave simulation data, and I'm looking for ways to speed up 2D simulation.
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
