|
1 | | -function [pressure_output, N_steps] = step( pressure_input, f_s, delta_z, a, b, order ) |
| 1 | +function [ pressure_output, N_steps ] = step( pressure_input, f_s, delta_z, a, b, order ) |
| 2 | +% Strang-Marchuk splitting step |
| 3 | +% |
2 | 4 | % author: Martin Schiffner |
3 | 5 | % date: 2009-03-30 |
4 | | -% modified: 2020-05-06 |
| 6 | +% modified: 2020-05-07 |
5 | 7 |
|
| 8 | +%-------------------------------------------------------------------------- |
| 9 | +% 1.) check arguments |
| 10 | +%-------------------------------------------------------------------------- |
| 11 | + |
| 12 | +%-------------------------------------------------------------------------- |
| 13 | +% 2.) compute splitting step |
| 14 | +%-------------------------------------------------------------------------- |
| 15 | +% |
6 | 16 | N_samples = numel(pressure_input); |
7 | 17 | ksi = 0.5; %factor used in finite difference scheme (0.5 = Crank-Nicolson method) |
8 | 18 | method_interp = 'linear'; %method which is used for interpolation in solution to nonlinear problem |
9 | 19 |
|
| 20 | +% |
10 | 21 | switch order |
11 | 22 |
|
12 | 23 | case 0 |
13 | 24 | % solve linear diffusion equation for delta_z / 2 (adjustable finite difference scheme) |
14 | 25 | pressure_input = fractional_steps.diffusion( pressure_input, f_s, N_samples, delta_z / 2, a, ksi ); |
15 | 26 |
|
16 | 27 | % solve nonlinear equation for delta_z |
17 | | - [pressure_input, N_steps] = fractional_steps.nonlinear( pressure_input, f_s, N_samples, delta_z, b, method_interp ); |
| 28 | + [ pressure_input, N_steps ] = fractional_steps.nonlinear( pressure_input, f_s, N_samples, delta_z, b, method_interp ); |
18 | 29 |
|
19 | 30 | % solve linear diffusion equation for delta_z / 2 (adjustable finite difference scheme) |
20 | 31 | pressure_output = fractional_steps.diffusion( pressure_input, f_s, N_samples, delta_z / 2, a, ksi ); |
21 | 32 |
|
22 | 33 | case 1 |
23 | 34 | % solve nonlinear equation for delta_z / 2 |
24 | | - [pressure_input, N_steps_1] = fractional_steps.nonlinear( pressure_input, f_s, N_samples, delta_z / 2, b, method_interp ); |
| 35 | + [ pressure_input, N_steps_1 ] = fractional_steps.nonlinear( pressure_input, f_s, N_samples, delta_z / 2, b, method_interp ); |
25 | 36 |
|
26 | 37 | % solve linear diffusion equation for delta_z (adjustable finite difference scheme) |
27 | 38 | pressure_input = fractional_steps.diffusion( pressure_input, f_s, N_samples, delta_z, a, ksi ); |
28 | 39 |
|
29 | 40 | % solve nonlinear equation for delta_z / 2 |
30 | | - [pressure_output, N_steps_2] = fractional_steps.nonlinear( pressure_input, f_s, N_samples, delta_z / 2, b, method_interp ); |
| 41 | + [ pressure_output, N_steps_2 ] = fractional_steps.nonlinear( pressure_input, f_s, N_samples, delta_z / 2, b, method_interp ); |
31 | 42 |
|
32 | 43 | N_steps = [N_steps_1, N_steps_2]; |
33 | 44 |
|
34 | 45 | otherwise |
| 46 | + |
35 | 47 | % display error message |
36 | | - error('burgers_frac_steps: invalid argument order in fractional steps scheme'); |
| 48 | + error('burgers_frac_steps: invalid argument order in fractional steps scheme'); |
| 49 | + |
37 | 50 | end |
38 | 51 |
|
39 | 52 | end % function [pressure_output, N_steps] = step( pressure_input, f_s, delta_z, a, b, order ) |
0 commit comments