@@ -71,12 +71,16 @@ class WeakFormNSSimpleLinearization : public WeakForm<double>
71
71
72
72
double value (int n, double *wt, Func<double > *u_ext[], Func<double > *u, Func<double > *v, GeomVol<double > *e, Func<double > **ext) const {
73
73
double result = int_grad_u_grad_v<double , double >(n, wt, u, v) / Reynolds;
74
+ if (!Stokes)
75
+ result += int_u_v<double , double >(n, wt, u, v) / time_step;
74
76
return result;
75
77
}
76
78
77
79
Ord ord (int n, double *wt, Func<Ord> *u_ext[], Func<Ord> *u, Func<Ord> *v, GeomVol<Ord> *e, Func<Ord> **ext) const
78
80
{
79
81
Ord result = int_grad_u_grad_v<Ord, Ord>(n, wt, u, v) / Reynolds;
82
+ if (!Stokes)
83
+ result += int_u_v<Ord, Ord>(n, wt, u, v) / time_step;
80
84
return result;
81
85
}
82
86
@@ -179,13 +183,21 @@ class WeakFormNSSimpleLinearization : public WeakForm<double>
179
183
VectorFormVolVel (int i, bool Stokes, double time_step) : VectorFormVol<double >(i), Stokes(Stokes), time_step(time_step) {
180
184
}
181
185
182
- double value (int n, double *wt, Func<double > *u_ext[], Func<double > *v, GeomVol <double > *e, Func<double > **ext) const {
186
+ double value (int n, double *wt, Func<double > *u_ext[], Func<double > *v, Geom <double > *e, Func<double > **ext) const {
183
187
double result = 0 ;
188
+ if (!Stokes) {
189
+ Func<double >* vel_prev_time = ext[2 ]; // this form is used with both velocity components
190
+ result = int_u_v<double , double >(n, wt, vel_prev_time, v) / time_step;
191
+ }
184
192
return result;
185
193
}
186
194
187
- Ord ord (int n, double *wt, Func<Ord> *u_ext[], Func<Ord> *v, GeomVol <Ord> *e, Func<Ord> **ext) const {
195
+ Ord ord (int n, double *wt, Func<Ord> *u_ext[], Func<Ord> *v, Geom <Ord> *e, Func<Ord> **ext) const {
188
196
Ord result = Ord (0 );
197
+ if (!Stokes) {
198
+ Func<Ord>* vel_prev_time = ext[2 ]; // this form is used with both velocity components
199
+ result = int_u_v<Ord, Ord>(n, wt, vel_prev_time, v) / time_step;
200
+ }
189
201
return result;
190
202
}
191
203
@@ -256,6 +268,8 @@ class WeakFormNSNewton : public WeakForm<double>
256
268
257
269
double value (int n, double *wt, Func<double > *u_ext[], Func<double > *u, Func<double > *v, GeomVol<double > *e, Func<double > **ext) const {
258
270
double result = int_grad_u_grad_v<double , double >(n, wt, u, v) / Reynolds;
271
+ if (!Stokes)
272
+ result += int_u_v<double , double >(n, wt, u, v) / time_step;
259
273
return result;
260
274
}
261
275
@@ -496,7 +510,8 @@ class WeakFormNSNewton : public WeakForm<double>
496
510
result += wt[i] * ((xvel_prev_newton->dx [i] * v->dx [i] + xvel_prev_newton->dy [i] * v->dy [i]) / Reynolds - (p_prev_newton->val [i] * v->dx [i]));
497
511
if (!Stokes)
498
512
for (int i = 0 ; i < n; i++)
499
- result += wt[i] * (xvel_prev_newton->val [i] * xvel_prev_newton->dx [i] + yvel_prev_newton->val [i] * xvel_prev_newton->dy [i]) * v->val [i];
513
+ result += wt[i] * (((xvel_prev_newton->val [i] - xvel_prev_time->val [i]) * v->val [i] / time_step )
514
+ + ((xvel_prev_newton->val [i] * xvel_prev_newton->dx [i] + yvel_prev_newton->val [i] * xvel_prev_newton->dy [i]) * v->val [i]));
500
515
return result;
501
516
}
502
517
@@ -511,7 +526,8 @@ class WeakFormNSNewton : public WeakForm<double>
511
526
result += wt[i] * ((xvel_prev_newton->dx [i] * v->dx [i] + xvel_prev_newton->dy [i] * v->dy [i]) / Reynolds - (p_prev_newton->val [i] * v->dx [i]));
512
527
if (!Stokes)
513
528
for (int i = 0 ; i < n; i++)
514
- result += wt[i] * (xvel_prev_newton->val [i] * xvel_prev_newton->dx [i] + yvel_prev_newton->val [i] * xvel_prev_newton->dy [i]) * v->val [i];
529
+ result += wt[i] * (((xvel_prev_newton->val [i] - xvel_prev_time->val [i]) * v->val [i] / time_step)
530
+ + ((xvel_prev_newton->val [i] * xvel_prev_newton->dx [i] + yvel_prev_newton->val [i] * xvel_prev_newton->dy [i]) * v->val [i]));
515
531
return result;
516
532
}
517
533
@@ -543,7 +559,8 @@ class WeakFormNSNewton : public WeakForm<double>
543
559
result += wt[i] * ((yvel_prev_newton->dx [i] * v->dx [i] + yvel_prev_newton->dy [i] * v->dy [i]) / Reynolds - (p_prev_newton->val [i] * v->dy [i]));
544
560
if (!Stokes)
545
561
for (int i = 0 ; i < n; i++)
546
- result += wt[i] * (xvel_prev_newton->val [i] * yvel_prev_newton->dx [i] + yvel_prev_newton->val [i] * yvel_prev_newton->dy [i]) * v->val [i];
562
+ result += wt[i] * (((yvel_prev_newton->val [i] - yvel_prev_time->val [i]) * v->val [i] / time_step )
563
+ + ((xvel_prev_newton->val [i] * yvel_prev_newton->dx [i] + yvel_prev_newton->val [i] * yvel_prev_newton->dy [i]) * v->val [i]));
547
564
return result;
548
565
}
549
566
@@ -631,8 +648,11 @@ class EssentialBCNonConst : public EssentialBoundaryCondition<double>
631
648
};
632
649
633
650
virtual double value (double x, double y) const {
634
- double val_y = -x*(1 -x);
635
- return val_y / 4 .;
651
+ double val_y = vel_inlet * y*(H-y) / (H/2 .)/(H/2 .);
652
+ if (current_time <= startup_time)
653
+ return val_y * current_time/startup_time;
654
+ else
655
+ return val_y;
636
656
};
637
657
638
658
protected:
0 commit comments