source: issm/trunk/src/c/Bamgx/objects/MatVVP2x2.cpp@ 2838

Last change on this file since 2838 was 2838, checked in by Mathieu Morlighem, 15 years ago

Added Bamgx/objects/MatVVP2x2.cpp and Bamgx/objects/MetricAnIso.cpp

File size: 1.1 KB
Line 
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
14namespace bamg {
15
16 /*Constructor{{{1*/
17 MatVVP2x2::MatVVP2x2(const MetricAnIso M){
18 double a11=M.a11,a21=M.a21,a22=M.a22;
19 const double eps = 1.e-5;
20 double c11 = a11*a11, c22 = a22*a22, c21= a21*a21;
21 double b=-a11-a22,c=-c21+a11*a22;
22 double delta = b*b - 4 * c ;
23 double n2=(c11+c22+c21);
24 if ( n2 < 1e-30)
25 lambda1=lambda2=0,v.x=1,v.y=0;
26 else if (delta < eps*n2)
27 {
28 lambda1=lambda2=-b/2, v.x=1,v.y=0;
29 }
30 else
31 { // --- construction de 2 vecteur dans (Im ( A - D(i) Id) ortogonal
32 delta = sqrt(delta);
33 lambda1 = (-b-delta)/2.0,lambda2 = (-b+delta)/2.0;
34 double v0 = a11-lambda1, v1 = a21,v2 = a22 - lambda1;
35 double s0 = v0*v0 + v1*v1, s1 = v1*v1 +v2*v2;
36
37 if(s1 < s0)
38 s0=sqrt(s0),v.x=v1/s0,v.y=-v0/s0;
39 else
40 s1=sqrt(s1),v.x=v2/s1,v.y=-v1/s1;
41 };
42 }
43 /*}}}1*/
44}
Note: See TracBrowser for help on using the repository browser.