~ubuntu-branches/debian/squeeze/gmsh/squeeze

« back to all changes in this revision

Viewing changes to Geo/STensor3.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme, Christophe Prud'homme
  • Date: 2009-09-02 18:12:15 UTC
  • mfrom: (1.2.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20090902181215-yla8zvcas2ucvkm9
[Christophe Prud'homme]
* New upstream release
  + fixed surface mesh orientation bug introduced in 2.4.0;
  + mesh and graphics code refactoring;
  + small usability enhancements and bug fixes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// compute the largest inscribed ellipsoid...
 
2
#include "STensor3.h"
 
3
 
 
4
void SMetric3::print (const char *s) const
 
5
{
 
6
  printf(" metric %s : %12.5E %12.5E %12.5E %12.5E %12.5E %12.5E \n",s,
 
7
         (*this)(0,0),(*this)(1,1),(*this)(2,2),
 
8
         (*this)(0,1),(*this)(0,2),(*this)(1,2));
 
9
}
 
10
 
 
11
 
 
12
SMetric3 intersection (const SMetric3 &m1, const SMetric3 &m2)
 
13
{
 
14
  SMetric3 im1 = m1.invert();
 
15
  gmshMatrix<double> V(3,3);
 
16
  gmshVector<double> S(3);
 
17
  im1 *= m2;
 
18
  im1.eig(V,S,true);
 
19
  SVector3 v0(V(0,0),V(1,0),V(2,0));
 
20
  SVector3 v1(V(0,1),V(1,1),V(2,1));
 
21
  SVector3 v2(V(0,2),V(1,2),V(2,2));
 
22
  double l0 = std::max(dot(v0,m1,v0),dot(v0,m2,v0));
 
23
  double l1 = std::max(dot(v1,m1,v1),dot(v1,m2,v1));
 
24
  double l2 = std::max(dot(v2,m1,v2),dot(v2,m2,v2));
 
25
  SMetric3 iv(l0,l1,l2,v0,v1,v2);
 
26
  return iv;
 
27
}
 
28
 
 
29
// (1-t) * m1 + t * m2
 
30
SMetric3 interpolation (const SMetric3 &m1, 
 
31
                               const SMetric3 &m2, 
 
32
                               const double t)
 
33
{
 
34
  SMetric3 im1 = m1.invert();
 
35
  SMetric3 im2 = m2.invert();
 
36
  im1 *= (1.-t);
 
37
  im2 *= t;
 
38
  im1 += im2;
 
39
  return im1.invert();
 
40
}
 
41
 
 
42
SMetric3 interpolation (const SMetric3 &m1, 
 
43
                        const SMetric3 &m2, 
 
44
                        const SMetric3 &m3, 
 
45
                        const double u,
 
46
                        const double v)
 
47
{
 
48
  SMetric3 im1 = m1.invert();
 
49
  SMetric3 im2 = m2.invert();
 
50
  SMetric3 im3 = m3.invert();
 
51
  im1 *= (1.-u-v);
 
52
  im2 *= u;
 
53
  im3 *= v;
 
54
  im1 += im2;
 
55
  im1 += im3;
 
56
  return im1.invert();
 
57
}
 
58
 
 
59
SMetric3 interpolation (const SMetric3 &m1, 
 
60
                        const SMetric3 &m2, 
 
61
                        const SMetric3 &m3,  
 
62
                        const SMetric3 &m4, 
 
63
                        const double u,
 
64
                        const double v,
 
65
                        const double w)
 
66
{
 
67
  SMetric3 im1 = m1.invert();
 
68
  SMetric3 im2 = m2.invert();
 
69
  SMetric3 im3 = m3.invert();
 
70
  SMetric3 im4 = m4.invert();
 
71
  im1 *= (1.-u-v-w);
 
72
  im2 *= u;
 
73
  im3 *= v;
 
74
  im4 *= w;
 
75
  im1 += im2;
 
76
  im1 += im3;
 
77
  im1 += im4;
 
78
  return im1.invert();
 
79
}
 
80