31 void Foam::eigendecomposition::tred2()
39 for (
label j = 0; j <
n; j++)
46 for (
label i =
n-1; i > 0; i--)
55 scale = scale +
mag(d_[
k]);
62 for (
label j = 0; j < i; j++)
91 for (
label j = 0; j < i; j++)
98 for (
label j = 0; j < i; j++)
102 g = e_[j] + V_(j, j)*
f;
113 for (
label j = 0; j < i; j++)
119 const scalar hh =
f/(
h +
h);
121 for (
label j = 0; j < i; j++)
126 for (
label j = 0; j < i; j++)
133 V_(
k, j) -= (
f*e_[
k] + g*d_[
k]);
145 for (
label i = 0; i <
n-1; i++)
147 V_(
n-1, i) = V_(i, i);
150 const scalar
h = d_[i+1];
156 d_[
k] = V_(
k, i+1)/
h;
159 for (
label j = 0; j <= i; j++)
165 g += V_(
k, i+1)*V_(
k, j);
181 for (
label j = 0; j <
n; j++)
192 void Foam::eigendecomposition::tql2()
200 for (
label i = 1; i <
n; i++)
209 for (
label l = 0; l <
n; l++)
213 tst1 =
max(tst1,
mag(d_[l]) +
mag(e_[l]));
220 if (
mag(e_[m]) <= small*tst1)
241 scalar
p = (d_[l+1] - g)/(2*e_[l]);
249 d_[l] = e_[l]/(
p + r);
250 d_[l+1] = e_[l]*(
p + r);
251 const scalar dl1 = d_[l+1];
252 scalar
h = g - d_[l];
254 for (
label i = l+2; i <
n; i++)
266 scalar el1 = e_[l+1];
270 for (
label i = m-1; i >= l; i--)
282 d_[i+1] =
h +
s*(
c*g +
s*d_[i]);
289 V_(
k, i+1) =
s*V_(
k, i) +
c*
h;
290 V_(
k, i) =
c*V_(
k, i) -
s*
h;
294 p = -
s*s2*c3*el1*e_[l]/dl1;
300 }
while (
mag(e_[l]) > small*tst1);
308 for (
label i = 0; i <
n-1; i++)
313 for (
label j = i+1; j <
n; j++)
327 for (
label j = 0; j <
n; j++)
338 void Foam::eigendecomposition::orthes()
348 for (
label m = low+1; m <= high-1; m++)
353 for (
label i = m; i <= high; i++)
355 scale = scale +
mag(H_(i, m-1));
363 for (
label i = high; i >= m; i--)
365 ort_[i] = H_(i, m-1)/scale;
366 h += ort_[i]*ort_[i];
377 ort_[m] = ort_[m] - g;
382 for (
label j = m; j <
n; j++)
385 for (
label i = high; i >= m; i--)
387 f += ort_[i]*H_(i, j);
392 for (
label i = m; i <= high; i++)
394 H_(i, j) -=
f*ort_[i];
398 for (
label i = 0; i <= high; i++)
402 for (
label j = high; j >= m; j--)
404 f += ort_[j]*H_(i, j);
409 for (
label j = m; j <= high; j++)
411 H_(i, j) -=
f*ort_[j];
415 ort_[m] = scale*ort_[m];
416 H_(m, m-1) = scale*g;
422 for (
label i = 0; i <
n; i++)
424 for (
label j = 0; j <
n; j++)
426 V_(i, j) = (i == j ? 1 : 0);
430 for (
label m = high-1; m >= low+1; m--)
434 for (
label i = m+1; i <= high; i++)
436 ort_[i] = H_(i, m-1);
439 for (
label j = m; j <= high; j++)
443 for (
label i = m; i <= high; i++)
445 g += ort_[i]*V_(i, j);
449 g = (g/ort_[m])/H_(m, m-1);
451 for (
label i = m; i <= high; i++)
453 V_(i, j) += g*ort_[i];
461 inline void Foam::eigendecomposition::cdiv
473 const scalar r = yi/yr;
474 const scalar d = yr + r*yi;
475 cdivr = (xr + r*xi)/d;
476 cdivi = (xi - r*xr)/d;
480 const scalar r = yr/yi;
481 const scalar d = yi + r*yr;
482 cdivr = (r*xr + xi)/d;
483 cdivi = (r*xi - xr)/d;
488 void Foam::eigendecomposition::hqr2()
496 const label nn = V_.n();
500 const label high = nn-1;
513 for (
label i = 0; i < nn; i++)
515 if ((i < low) || (i > high))
520 for (
label j =
max(i-1, 0); j < nn; j++)
522 norm = norm +
mag(H_(i, j));
536 s =
mag(H_(l-1, l-1)) +
mag(H_(l, l));
541 if (
mag(H_(l, l-1)) < small*
s)
553 H_(
n,
n) = H_(
n,
n) + exshift;
563 w = H_(
n,
n-1)*H_(
n-1,
n);
564 p = (H_(
n-1,
n-1) - H_(
n,
n))/2;
567 H_(
n,
n) = H_(
n,
n) + exshift;
568 H_(
n-1,
n-1) = H_(
n-1,
n-1) + exshift;
603 for (
label j =
n-1; j < nn; j++)
606 H_(
n-1, j) = q*z +
p*H_(
n, j);
607 H_(
n, j) = q*H_(
n, j) -
p*z;
611 for (
label i = 0; i <=
n; i++)
614 H_(i,
n-1) = q*z +
p*H_(i,
n);
615 H_(i,
n) = q*H_(i,
n) -
p*z;
619 for (
label i = low; i <= high; i++)
622 V_(i,
n-1) = q*z +
p*V_(i,
n);
623 V_(i,
n) = q*V_(i,
n) -
p*z;
653 w = H_(
n,
n-1)*H_(
n-1,
n);
660 for (
label i = low; i <=
n; i++)
683 s =
x - w/((
y -
x)/2 +
s);
685 for (
label i = low; i <=
n; i++)
705 p = (r*
s - w)/H_(m+1, m) + H_(m, m+1);
706 q = H_(m+1, m+1) - z - r -
s;
731 for (
label i = m+2; i <=
n; i++)
744 const label notlast = (
k !=
n-1);
750 r = (notlast ? H_(
k+2,
k-1) : 0);
780 H_(
k,
k-1) = -H_(
k,
k-1);
790 for (
label j =
k; j < nn; j++)
792 p = H_(
k, j) + q*H_(
k+1, j);
795 p =
p + r*H_(
k+2, j);
796 H_(
k+2, j) = H_(
k+2, j) -
p*z;
798 H_(
k, j) = H_(
k, j) -
p*
x;
799 H_(
k+1, j) = H_(
k+1, j) -
p*
y;
805 p =
x*H_(i,
k) +
y*H_(i,
k+1);
808 p =
p + z*H_(i,
k+2);
809 H_(i,
k+2) = H_(i,
k+2) -
p*r;
811 H_(i,
k) = H_(i,
k) -
p;
812 H_(i,
k+1) = H_(i,
k+1) -
p*q;
816 for (
label i = low; i <= high; i++)
818 p =
x*V_(i,
k) +
y*V_(i,
k+1);
821 p =
p + z*V_(i,
k+2);
822 V_(i,
k+2) = V_(i,
k+2) -
p*r;
824 V_(i,
k) = V_(i,
k) -
p;
825 V_(i,
k+1) = V_(i,
k+1) -
p*q;
839 for (
n = nn-1;
n >= 0;
n--)
851 for (
label i =
n-1; i >= 0; i--)
855 for (
label j = l; j <=
n; j++)
857 r = r + H_(i, j)*H_(j,
n);
877 H_(i,
n) = -r/(small*norm);
886 q = (d_[i] -
p)*(d_[i] -
p) + e_[i]*e_[i];
892 H_(i+1,
n) = (-r - w*t)/
x;
896 H_(i+1,
n) = (-
s -
y*t)/z;
904 for (
label j = i; j <=
n; j++)
906 H_(j,
n) = H_(j,
n)/t;
922 H_(
n-1,
n-1) = q/H_(
n,
n-1);
923 H_(
n-1,
n) = -(H_(
n,
n) -
p)/H_(
n,
n-1);
927 cdiv(cdivr, cdivi, 0, -H_(
n-1,
n), H_(
n-1,
n-1)-
p, q);
928 H_(
n-1,
n-1) = cdivr;
935 for (
label i =
n-2; i >= 0; i--)
941 for (
label j = l; j <=
n; j++)
943 ra = ra + H_(i, j)*H_(j,
n-1);
944 sa = sa + H_(i, j)*H_(j,
n);
959 cdiv(cdivr, cdivi, -ra, -sa, w, q);
969 vr = (d_[i] -
p)*(d_[i] -
p) + e_[i]*e_[i] - q*q;
970 vi = (d_[i] -
p)*2*q;
972 if ((vr == 0) && (vi == 0))
974 vr = small*norm*(
mag(w) +
mag(q) +
981 x*r-z*ra+q*sa,
x*
s-z*sa-q*ra, vr, vi
989 H_(i+1,
n-1) = (-ra - w*H_(i,
n-1) + q*H_(i,
n))/
x;
990 H_(i+1,
n) = (-sa - w*H_(i,
n) - q*H_(i,
n-1))/
x;
997 -r-
y*H_(i,
n-1), -
s-
y*H_(i,
n), z, q
999 H_(i+1,
n-1) = cdivr;
1007 if ((small*t)*t > 1)
1009 for (
label j = i; j <=
n; j++)
1011 H_(j,
n-1) = H_(j,
n-1)/t;
1012 H_(j,
n) = H_(j,
n)/t;
1021 for (
label i = 0; i < nn; i++)
1023 if (i < low || i > high)
1025 for (
label j = i; j < nn; j++)
1027 V_(i, j) = H_(i, j);
1033 for (
label j = nn-1; j >= low; j--)
1035 for (
label i = low; i <= high; i++)
1040 z = z + V_(i,
k)*H_(
k, j);
1059 for (
label j = 0; (j <
n) && symmetric_; j++)
1061 for (
label i = 0; (i <
n) && symmetric_; i++)
1063 symmetric_ = (
A(i, j) ==
A(j, i));
1069 for (
label i = 0; i <
n; i++)
1071 for (
label j = 0; j <
n; j++)
1088 for (
label j = 0; j <
n; j++)
1090 for (
label i = 0; i <
n; i++)
1111 for (
label i = 0; i <
n; i++)
1113 for (
label j = 0; j <
n; j++)
void setSize(const label)
Reset size of List.
label n() const
Return the number of columns.
void setSize(const label m)
Resize the matrix preserving the elements.
eigendecomposition(const scalarSquareMatrix &A)
Construct the eigen decomposition of matrix A.
void D(scalarSquareMatrix &D) const
Return the block diagonal eigenvalue matrix in D.
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.name(), lagrangian::cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
const dimensionedScalar c2
Second radiation constant: default SI units: [m K].
const dimensionedScalar c
Speed of light in a vacuum.
const dimensionedScalar h
Planck constant.
static const coefficient A("A", dimPressure, 611.21)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
void mag(LagrangianPatchField< scalar > &f, const LagrangianPatchField< Type > &f1)
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
dimensionedScalar hypot(const dimensionedScalar &x, const dimensionedScalar &y)
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
void sqrt(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)