Skip to content

Commit cbcf6eb

Browse files
authored
Replace velocity for slowness squared as parameter in the constant wave equation (#55)
Fix denominator Slowness instead of squared velocity
1 parent 3905a96 commit cbcf6eb

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,16 @@ double forward(f_type *u, f_type *velocity, f_type *damp,
166166

167167
value += sum_x/dxSquared + sum_z/dzSquared;
168168

169+
// parameter to be used
170+
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
171+
169172
//denominator with damp coefficient
170-
f_type denominator = (1.0 + damp[domain_offset] * dt);
173+
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
174+
f_type numerator = (1.0 - damp[domain_offset] * dt / (2 * slowness));
171175

172-
value *= (dtSquared * velocity[domain_offset] * velocity[domain_offset]) / denominator;
176+
value *= (dtSquared / slowness) / denominator;
173177

174-
u[next_snapshot] = 2.0 / denominator * u[current_snapshot] - ((1.0 - damp[domain_offset] * dt) / denominator) * u[prev_snapshot] + value;
178+
u[next_snapshot] = 2.0 / denominator * u[current_snapshot] - (numerator / denominator) * u[prev_snapshot] + value;
175179
}
176180
}
177181

@@ -241,8 +245,14 @@ double forward(f_type *u, f_type *velocity, f_type *damp,
241245
// current source point in the grid
242246
size_t domain_offset = i * nx + j;
243247
size_t next_snapshot = next_t * domain_size + domain_offset;
248+
249+
// parameter to be used
250+
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
251+
252+
//denominator with damp coefficient
253+
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
244254

245-
f_type value = dtSquared * velocity[domain_offset] * velocity[domain_offset] * kws * wavelet[wavelet_offset];
255+
f_type value = dtSquared / slowness * kws * wavelet[wavelet_offset] / denominator;
246256

247257
#if defined(CPU_OPENMP) || defined(GPU_OPENMP)
248258
#pragma omp atomic

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

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

174174
value += sum_y/dySquared + sum_x/dxSquared + sum_z/dzSquared;
175175

176-
//nominator with damp coefficient
177-
f_type denominator = (1.0 + damp[domain_offset] * dt);
176+
// parameter to be used
177+
f_type slowness = 1.0 / (velocity[domain_offset] * velocity[domain_offset]);
178178

179-
value *= (dtSquared * velocity[domain_offset] * velocity[domain_offset]) / denominator;
179+
//denominator with damp coefficient
180+
f_type denominator = (1.0 + damp[domain_offset] * dt / (2 * slowness));
181+
f_type numerator = (1.0 - damp[domain_offset] * dt / (2 * slowness));
180182

181-
u[next_snapshot] = 2.0 / denominator * u[current_snapshot] - ((1.0 - damp[domain_offset] * dt) / denominator) * u[prev_snapshot] + value;
183+
value *= (dtSquared / slowness) / denominator;
184+
185+
u[next_snapshot] = 2.0 / denominator * u[current_snapshot] - (numerator / denominator) * u[prev_snapshot] + value;
182186
}
183187
}
184188
}
@@ -264,7 +268,13 @@ double forward(f_type *u, f_type *velocity, f_type *damp,
264268
size_t domain_offset = (i * nx + j) * ny + k;
265269
size_t next_snapshot = next_t * domain_size + domain_offset;
266270

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

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

tests/test_solution.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,4 @@ def test_solution(self, dimension, space_order, language, density):
136136
# load the reference result
137137
u_ref = np.load(ref_file)
138138

139-
assert np.allclose(u, u_ref, atol=1e-05)
139+
assert np.allclose(u, u_ref, atol=1e-04)

0 commit comments

Comments
 (0)