Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <ODE/SIBS.H>
00027
00028
00029
00030 void Foam::SIBS::polyExtrapolate
00031 (
00032 const label iest,
00033 const scalar xest,
00034 const scalarField& yest,
00035 scalarField& yz,
00036 scalarField& dy,
00037 scalarField& x,
00038 scalarRectangularMatrix& d
00039 ) const
00040 {
00041 label n = yz.size();
00042
00043 x[iest] = xest;
00044
00045 for (register label j=0; j<n; j++)
00046 {
00047 dy[j] = yz[j] = yest[j];
00048 }
00049
00050 if (iest == 0)
00051 {
00052 for (register label j=0; j<n; j++)
00053 {
00054 d[j][0] = yest[j];
00055 }
00056 }
00057 else
00058 {
00059 scalarField c(yest);
00060
00061 for (register label k1=0; k1<iest; k1++)
00062 {
00063 scalar delta = 1.0/(x[iest - k1 - 1] - xest);
00064 scalar f1 = xest*delta;
00065 scalar f2 = x[iest - k1 - 1]*delta;
00066
00067 for (register label j=0; j<n; j++)
00068 {
00069 scalar q = d[j][k1];
00070 d[j][k1] = dy[j];
00071 delta = c[j] - q;
00072 dy[j] = f1*delta;
00073 c[j] = f2*delta;
00074 yz[j] += dy[j];
00075 }
00076 }
00077
00078 for (register label j=0; j<n; j++)
00079 {
00080 d[j][iest] = dy[j];
00081 }
00082 }
00083 }
00084
00085
00086