barycentric.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2017 OpenFOAM Foundation
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "barycentric.H"
29 #include "Random.H"
30 
31 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32 
34 (
35  Foam::scalar s,
36  Foam::scalar t,
37  Foam::scalar u
38 )
39 {
40  // Transform the random point in the unit cube to a random point in the
41  // unit tet by means of a series of reflections. See
42  // <http://vcg.isti.cnr.it/jgt/tetra.htm> for details.
43 
44  if (s + t > 1)
45  {
46  s = 1 - s;
47  t = 1 - t;
48  }
49 
50  if (s + t + u > 1)
51  {
52  Foam::scalar temp = u;
53 
54  if (t + u > 1)
55  {
56  u = 1 - s - t;
57  t = 1 - temp;
58  }
59  else
60  {
61  u = s + t + u - 1;
62  s = 1 - t - temp;
63  }
64  }
65 
66  return Foam::barycentric(1 - s - t - u, s, t, u);
67 }
68 
69 
70 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
71 
73 {
74  return
76  (
77  rndGen.sample01<scalar>(),
78  rndGen.sample01<scalar>(),
79  rndGen.sample01<scalar>()
80  );
81 }
82 
83 
84 // ************************************************************************* //
Foam::Random
Random number generator.
Definition: Random.H:59
s
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Definition: gmvOutputSpray.H:25
Foam::barycentric01
barycentric barycentric01(Random &rndGen)
Generate a random barycentric coordinate within the unit tetrahedron.
Definition: barycentric.C:72
Foam::Barycentric
Templated 3D Barycentric derived from VectorSpace. Has 4 components, one of which is redundant.
Definition: Barycentric.H:54
Random.H
barycentric.H
barycentric01
Foam::barycentric barycentric01(Foam::scalar s, Foam::scalar t, Foam::scalar u)
Definition: barycentric.C:34
rndGen
Random rndGen
Definition: createFields.H:23
Foam::barycentric
Barycentric< scalar > barycentric
A scalar version of the templated Barycentric.
Definition: barycentric.H:47