1 | #include <cstdio>
|
---|
2 | #include <cstring>
|
---|
3 | #include <cmath>
|
---|
4 | #include <ctime>
|
---|
5 |
|
---|
6 | #include "../Mesh2.h"
|
---|
7 | #include "../QuadTree.h"
|
---|
8 | #include "../SetOfE4.h"
|
---|
9 |
|
---|
10 | #include "../../shared/shared.h"
|
---|
11 | #include "../../include/macros.h"
|
---|
12 | #include "../../toolkits/toolkits.h"
|
---|
13 |
|
---|
14 | #undef __FUNCT__
|
---|
15 | #define __FUNCT__ "MatVVP2x2"
|
---|
16 |
|
---|
17 | namespace bamg {
|
---|
18 |
|
---|
19 | /*Constructor*/
|
---|
20 | /*FUNCTION MatVVP2x2::MatVVP2x2(const MetricAnIso M){{{1*/
|
---|
21 | MatVVP2x2::MatVVP2x2(const MetricAnIso M){
|
---|
22 | double a11=M.a11,a21=M.a21,a22=M.a22;
|
---|
23 | const double eps = 1.e-5;
|
---|
24 | double c11 = a11*a11, c22 = a22*a22, c21= a21*a21;
|
---|
25 | double b=-a11-a22,c=-c21+a11*a22;
|
---|
26 | double delta = b*b - 4 * c ;
|
---|
27 | double n2=(c11+c22+c21);
|
---|
28 | if ( n2 < 1e-30)
|
---|
29 | lambda1=lambda2=0,v.x=1,v.y=0;
|
---|
30 | else if (delta < eps*n2)
|
---|
31 | {
|
---|
32 | lambda1=lambda2=-b/2, v.x=1,v.y=0;
|
---|
33 | }
|
---|
34 | else
|
---|
35 | { // --- construction de 2 vecteur dans (Im ( A - D(i) Id) ortogonal
|
---|
36 | delta = sqrt(delta);
|
---|
37 | lambda1 = (-b-delta)/2.0,lambda2 = (-b+delta)/2.0;
|
---|
38 | double v0 = a11-lambda1, v1 = a21,v2 = a22 - lambda1;
|
---|
39 | double s0 = v0*v0 + v1*v1, s1 = v1*v1 +v2*v2;
|
---|
40 |
|
---|
41 | if(s1 < s0)
|
---|
42 | s0=sqrt(s0),v.x=v1/s0,v.y=-v0/s0;
|
---|
43 | else
|
---|
44 | s1=sqrt(s1),v.x=v2/s1,v.y=-v1/s1;
|
---|
45 | };
|
---|
46 | }
|
---|
47 | /*}}}1*/
|
---|
48 |
|
---|
49 | }
|
---|