public override void FillMatrix(TriDiagMatrix matrix, SequenceBundle bundle, Grid grid, double t, double dt) { var Un = bundle.CurrentLayer; for (int i = 1; i < matrix.N - 1; i++) { double ri = grid[i]; double rim1 = grid[i - 1]; double rip1 = grid[i + 1]; double Ui = Un[i]; double Uip1 = Un[i + 1]; double Uim1 = Un[i - 1]; double dr = grid.h; double ki = KFunc(ri, Ui, (Ui - Uim1) / dr); double kip1 = KFunc(rip1, Ui, (Uip1 - Ui) / dr); //matrix.A[i] =-dt/(dr*dr*ri)*(ki*ri);//-ki * dt / dr * (1 / dr - 1 / (2 * ri)-(ki-kim1)/dr); //matrix.C[i] = 1 + dt / (dr * dr * ri) * (kip1 * rip1 + ki * ri);//1 + ki * 2 * dt / (dr * dr); //matrix.B[i] = -dt / (dr * dr * ri) * (kip1 * rip1); //matrix.F[i] = Un[i] + dt * FFunc(ri, t); matrix.A[i] = -dt / (dr * dr) + dt / (ri * dr) * (1 - (ri * ki) / dr); matrix.C[i] = 1 + 2 * dt / (dr * dr) + dt / (ri * dr * dr) * (rip1 * kip1 + ri * ki); matrix.B[i] = -dt / (dr * dr) + dt / (ri * dr) * (-1 - (rip1 * kip1) / dr); matrix.F[i] = Un[i] + dt * FFunc(ri, t); } }
public override void FillMatrix(TriDiagMatrix matrix, SequenceBundle bundle, Grid grid, double t, double dt) { var Un = bundle.CurrentLayer; for (int i = 1; i < matrix.N - 1; i++) { double r = grid[i]; double dr = grid.h; double a2 = a * a; matrix.F[i] = Un[i - 1] * (a2 * dt / dr * (1 / dr - 1 / (2 * r))) + Un[i] * (1 - a2 * 2 * dt / (dr * dr)) + Un[i + 1] * (a2 * dt / dr * (1 / dr + 1 / (2 * r))) + dt * FFunc(r, t); matrix.C[i] = 1; } }
public override void FillMatrix(TriDiagMatrix matrix, SequenceBundle bundle, Grid grid, double t, double dt) { var Un = bundle.CurrentLayer; for (int i = 1; i < matrix.N - 1; i++) { double r = grid[i]; double dr = grid.h; double a2 = a * a; matrix.A[i] = -a2 * (dt / 2) / dr * (1 / dr - 1 / (2 * r)); matrix.C[i] = 1 + a2 * dt / (dr * dr); matrix.B[i] = -a2 * (dt / 2) / dr * (1 / dr + 1 / (2 * r)); matrix.F[i] = Un[i] + dt / 2 * (FFunc(r, t) + FFunc(r, t - dt)) + a2 * (dt / 2) * ((Un[i + 1] - 2 * Un[i] + Un[i - 1]) / (dr * dr) + 1 / r * (Un[i + 1] - Un[i - 1]) / (2 * dr)); } }
public abstract void FillMatrix(TriDiagMatrix matrix, SequenceBundle bundle, Grid grid, double t, double dt);