19 OutPut(
"Example: 5SpotProblem.h\n");
20 OutPut(
" This works so far only on one level with a regular grid\n");
26 inline double r(
double x,
double y,
double x0,
double y0)
27 {
return (x-x0)*(x-x0) + (y-y0)*(y-y0); }
28 void ExactU1(
double x,
double y,
double *values)
30 double r0,r1,r2,r3,r4;
36 values[0] = (x/r0 - (x-1)/r1 - (x+1)/r2 - (x+1)/r3 - (x-1)/r4)/4;
38 values[2] = -(x*y/(r0*r0) - (x-1)*(y-1)/(r1*r1) - (x+1)*(y-1)/(r2*r2)
39 - (x+1)*(y+1)/(r3*r3) - (x-1)*(y+1)/(r4*r4) )/2;
42 void ExactU2(
double x,
double y,
double *values)
44 double r0,r1,r2,r3,r4;
50 values[0] = (y/r0 - (y-1)/r1 - (y-1)/r2 - (y+1)/r3 - (y+1)/r4)/4;;
51 values[1] = -(x*y/(r0*r0) - (x-1)*(y-1)/(r1*r1) - (x+1)*(y-1)/(r2*r2)
52 - (x+1)*(y+1)/(r3*r3) - (x-1)*(y+1)/(r4*r4) )/2;
56 void ExactP(
double x,
double y,
double *values)
62 2,0, 2,2, 0,2, -2,2, -2,0, -2,-2, 0,-2, 2,-2,
63 4,0, 4,2, 4,4, 2,4, 0,4, -2,4, -4,4, -4,2, -4,0, -4,-2, -4,-4, -2,-4, 0,-4, 2,-4, 4,-4, 4,-2};
64 double minus[] = {1,1, -1,1, -1,-1, 1,-1,
65 3,1, 3,3, 1,3, -1,3, -3,3, -3,1, -3,-1, -3,-3, -1,-3, 1,-3, 3,-3, 3,-1,
66 5,1, 5,3, 5,5, 3,5, 1,5, -1,5, -3,5, -5,5, -5,3, -5,1, -5,-1, -5,-3, -5,-5, -3,-5, -1,-5, 1,-5, 3,-5, 5,-5, 5,-3, 5,-1};
68 for(
int i=0; i<n_plus; i++)
69 values[0] -= log(sqrt(r(x,y,plus[2*i],plus[2*i+1])));
70 for(
int i=0; i<n_minus; i++)
71 values[0] += log(sqrt(r(x,y,minus[2*i],minus[2*i+1])));
75 for(
int i=0; i<n_plus; i++)
76 values[1] -= (x-plus[2*i])/r(x,y,plus[2*i],plus[2*i+1]);
77 for(
int i=0; i<n_minus; i++)
78 values[1] += (x-minus[2*i])/r(x,y,minus[2*i],minus[2*i+1]);
82 for(
int i=0; i<n_plus; i++)
83 values[2] -= (y-plus[2*i+1])/r(x,y,plus[2*i],plus[2*i+1]);
84 for(
int i=0; i<n_minus; i++)
85 values[2] += (y-minus[2*i+1])/r(x,y,minus[2*i],minus[2*i+1]);
107 void BoundCondition(
int bdComp,
double t, BoundCond &cond)
108 { cond = DIRICHLET; }
110 void FluxBoundValue(
int bdComp,
double Param,
double &value)
120 value=-(1-Param/h)/(4*h);
122 value = -(3/(8*h))*(1-2*Param/h + Param*Param/(h*h));
128 value=(1-(1-Param)/h)/(4*h);
130 value = (3/(8*h))*(1-2*(1-Param)/h + (1-Param)*(1-Param)/(h*h));
136 value=(1-Param/h)/(4*h);
138 value = (3/(8*h))*(1-2*Param/h + Param*Param/(h*h));
144 value=-(1-(1-Param)/h)/(4*h);
146 value = -(3/(8*h))*(1-2*(1-Param)/h + (1-Param)*(1-Param)/(h*h));
149 default: cout <<
"wrong boundary part number" << endl;
156 void LinCoeffs(
int n_points,
double *X,
double *Y,
157 double **parameters,
double **coeffs)
162 for(i=0;i<n_points;i++)
166 if ( (X[i] < 0.5 && Y[i]<0.5) || (X[i] > 0.5 && Y[i]>0.5) )