File: Smoke2D.h

package info (click to toggle)
libwildmagic 5.17%2Bcleaned1-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 90,124 kB
  • sloc: cpp: 215,940; csh: 637; sh: 91; makefile: 40
file content (87 lines) | stat: -rw-r--r-- 2,322 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Geometric Tools, LLC
// Copyright (c) 1998-2014
// Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt
// http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
//
// File Version: 5.0.0 (2010/01/01)

#ifndef SMOKE2D_H
#define SMOKE2D_H

#include "Wm5Fluid2Da.h"
#include "Wm5Fluid2Db.h"
using namespace Wm5;

// Set to "0" for Fluid2Da or to "1" for Fluids2Db.
#if 0
#define FLUIDBASE Fluid2Da<Real>
#else
#define FLUIDBASE Fluid2Db<Real>
#endif

template <typename Real>
class Smoke2D : public FLUIDBASE
{
public:
    // Construction and destruction.
    Smoke2D (Real x0, Real y0, Real x1, Real y1, Real dt, Real denViscosity,
        Real velViscosity, int imax, int jmax, int numGaussSeidelIterations,
        bool densityDirichlet, int numVortices);

    virtual ~Smoke2D ();

    virtual Real InitialDensity (Real x, Real y,
        int i, int j);

    virtual Vector2<Real> InitialVelocity (Real x, Real y,
        int i, int j);

    virtual Real SourceDensity (Real t, Real x, Real y,
        int i, int j);

    virtual Vector2<Real> SourceVelocity (Real t, Real x, Real y,
        int i, int j);

    // Member access.
    inline int GetNumVortices () const;
    inline Vector2<Real> GetVortexCenter (int i) const;
    inline Real GetVortexVariance (int i) const;
    inline Real GetVortexAmplitude (int i) const;

    // Dynamic adjustment of vortices.
    inline int GetNumActiveVortices () const;
    void SetNumActiveVortices (int numActive);

    // Dynamic adjustment of gravity.
    inline Real GetGravity () const;
    void SetGravity (Real gravity);

private:
    using FLUIDBASE::mIMax;
    using FLUIDBASE::mJMax;
    using FLUIDBASE::mIMaxP1;
    using FLUIDBASE::mJMaxP1;
    using FLUIDBASE::mX;
    using FLUIDBASE::mY;

    int mNumVortices;
    int mNumActive;
    Vector2<Real>* mVortexCenter;
    Real* mVortexVariance;
    Real* mVortexAmplitude;

    // Time-invariant portion of density source.
    Real** mTimelessDensity;

    // Time-invariant portion of velocity source.
    Vector2<Real>*** mTimelessVortex;
    Vector2<Real>** mTimelessWind;

    // Gravitational force in y-direction.
    Real mGravity;
};

#include "Smoke2D.inl"

#endif