Skip to content

Commit 2c93f3a

Browse files
authored
Fix tests and implement the new formulation in the variable density code (#56)
Update baseline solutions. Update tests. Update equation formulation in variable density backend code. Fix source.py to pass linter check.
1 parent cbcf6eb commit 2c93f3a

File tree

11 files changed

+55
-29
lines changed

11 files changed

+55
-29
lines changed

simwave/kernel/backend/c_code/forward/constant_density/2d/wave.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ double forward(f_type *u, f_type *velocity, f_type *damp,
169169
// parameter to be used
170170
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
171171

172-
//denominator with damp coefficient
172+
// denominator with damp coefficient
173173
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
174174
f_type numerator = (1.0 - damp[domain_offset] * dt / (2 * slowness));
175175

@@ -249,7 +249,7 @@ double forward(f_type *u, f_type *velocity, f_type *damp,
249249
// parameter to be used
250250
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
251251

252-
//denominator with damp coefficient
252+
// denominator with damp coefficient
253253
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
254254

255255
f_type value = dtSquared / slowness * kws * wavelet[wavelet_offset] / denominator;

simwave/kernel/backend/c_code/forward/constant_density/3d/wave.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ double forward(f_type *u, f_type *velocity, f_type *damp,
176176
// parameter to be used
177177
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
178178

179-
//denominator with damp coefficient
179+
// denominator with damp coefficient
180180
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
181181
f_type numerator = (1.0 - damp[domain_offset] * dt / (2 * slowness));
182182

@@ -271,7 +271,7 @@ double forward(f_type *u, f_type *velocity, f_type *damp,
271271
// parameter to be used
272272
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
273273

274-
//denominator with damp coefficient
274+
// denominator with damp coefficient
275275
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
276276

277277
f_type value = dtSquared / slowness * kws * wavelet[wavelet_offset] / denominator;

simwave/kernel/backend/c_code/forward/variable_density/2d/wave.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,16 @@ double forward(f_type *u, f_type *velocity, f_type *density, f_type *damp,
188188

189189
value -= (term_x + term_z) / density[domain_offset];
190190

191-
//denominator with damp coefficient
192-
f_type denominator = (1.0 + damp[domain_offset] * dt);
191+
// parameter to be used
192+
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
193193

194-
value *= (dtSquared * velocity[domain_offset] * velocity[domain_offset]) / denominator;
194+
// denominator with damp coefficient
195+
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
196+
f_type numerator = (1.0 - damp[domain_offset] * dt / (2 * slowness));
195197

196-
u[next_snapshot] = 2.0 / denominator * u[current_snapshot] - ((1.0 - damp[domain_offset] * dt) / denominator) * u[prev_snapshot] + value;
198+
value *= (dtSquared / slowness) / denominator;
199+
200+
u[next_snapshot] = 2.0 / denominator * u[current_snapshot] - (numerator / denominator) * u[prev_snapshot] + value;
197201
}
198202
}
199203

@@ -265,7 +269,13 @@ double forward(f_type *u, f_type *velocity, f_type *density, f_type *damp,
265269
size_t domain_offset = i * nx + j;
266270
size_t next_snapshot = next_t * domain_size + domain_offset;
267271

268-
f_type value = dtSquared * velocity[domain_offset] * velocity[domain_offset] * kws * wavelet[wavelet_offset];
272+
// parameter to be used
273+
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
274+
275+
// denominator with damp coefficient
276+
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
277+
278+
f_type value = dtSquared / slowness * kws * wavelet[wavelet_offset] / denominator;
269279

270280
#if defined(CPU_OPENMP) || defined(GPU_OPENMP)
271281
#pragma omp atomic

simwave/kernel/backend/c_code/forward/variable_density/3d/wave.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,16 @@ double forward(f_type *u, f_type *velocity, f_type *density, f_type *damp,
199199

200200
value -= (term_y + term_x + term_z) / density[domain_offset];
201201

202-
//denominator with damp coefficient
203-
f_type denominator = (1.0 + damp[domain_offset] * dt);
202+
// parameter to be used
203+
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
204204

205-
value *= (dtSquared * velocity[domain_offset] * velocity[domain_offset]) / denominator;
205+
// denominator with damp coefficient
206+
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
207+
f_type numerator = (1.0 - damp[domain_offset] * dt / (2 * slowness));
206208

207-
u[next_snapshot] = 2.0 / denominator * u[current_snapshot] - ((1.0 - damp[domain_offset] * dt) / denominator) * u[prev_snapshot] + value;
209+
value *= (dtSquared / slowness) / denominator;
210+
211+
u[next_snapshot] = 2.0 / denominator * u[current_snapshot] - (numerator / denominator) * u[prev_snapshot] + value;
208212
}
209213
}
210214
}
@@ -287,9 +291,15 @@ double forward(f_type *u, f_type *velocity, f_type *density, f_type *damp,
287291

288292
// current source point in the grid
289293
size_t domain_offset = (i * nx + j) * ny + k;
290-
size_t next_snapshot = next_t * domain_size + domain_offset;
294+
size_t next_snapshot = next_t * domain_size + domain_offset;
295+
296+
// parameter to be used
297+
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
298+
299+
// denominator with damp coefficient
300+
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
291301

292-
f_type value = dtSquared * velocity[domain_offset] * velocity[domain_offset] * kws * wavelet[wavelet_offset];
302+
f_type value = dtSquared / slowness * kws * wavelet[wavelet_offset] / denominator;
293303

294304
#if defined(CPU_OPENMP) || defined(GPU_OPENMP)
295305
#pragma omp atomic

simwave/kernel/frontend/source.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ def grid_positions(self):
7272
zmin, zmax, xmin, xmax = self.space_model.bounding_box
7373
z_spacing, x_spacing = self.space_model.grid_spacing
7474

75-
if not(zmin <= coord[0] <= zmax) or \
76-
not(xmin <= coord[1] <= xmax):
75+
if not (zmin <= coord[0] <= zmax) or \
76+
not (xmin <= coord[1] <= xmax):
7777
raise Exception("Coordinates %s out of bounds." % coord)
7878

7979
zpos = (coord[0] - zmin) / z_spacing
@@ -87,9 +87,9 @@ def grid_positions(self):
8787

8888
z_spacing, x_spacing, y_spacing = self.space_model.grid_spacing
8989

90-
if not(zmin <= coord[0] <= zmax) or \
91-
not(xmin <= coord[1] <= xmax) or \
92-
not(ymin <= coord[2] <= ymax):
90+
if not (zmin <= coord[0] <= zmax) or \
91+
not (xmin <= coord[1] <= xmax) or \
92+
not (ymin <= coord[2] <= ymax):
9393
raise Exception("Coordinates %s out of bounds." % coord)
9494

9595
zpos = (coord[0] - zmin) / z_spacing

tests/reference_solution/generator.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
from pywave import SpaceModel, TimeModel, RickerWavelet, Solver
2-
from pywave import Receiver, Source
1+
from simwave import SpaceModel, TimeModel, RickerWavelet, Solver
2+
from simwave import Receiver, Source, Compiler
33
import numpy as np
44

55

@@ -58,32 +58,38 @@ def generate_one(dimension, space_order):
5858
# create the time model
5959
time_model = TimeModel(
6060
space_model=space_model,
61-
tf=tf
61+
tf=tf,
62+
saving_stride=0
6263
)
6364

6465
# create the set of sources
6566
source = Source(
6667
space_model=space_model,
67-
coordinates=source_position
68+
coordinates=source_position,
69+
window_radius=1
6870
)
6971

7072
# crete the set of receivers
7173
receiver = Receiver(
7274
space_model=space_model,
73-
coordinates=source_position
75+
coordinates=source_position,
76+
window_radius=1
7477
)
7578

7679
# create a ricker wavelet with 10hz of peak frequency
7780
ricker = RickerWavelet(f0, time_model)
7881

82+
# create a compiler
83+
compiler = Compiler(language='c')
84+
7985
# create the solver
8086
solver = Solver(
87+
compiler=compiler,
8188
space_model=space_model,
8289
time_model=time_model,
8390
sources=source,
8491
receivers=receiver,
85-
wavelet=ricker,
86-
saving_stride=0
92+
wavelet=ricker
8793
)
8894

8995
# run the forward
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)