File: SpeciesTimeIntegrator.h

package info (click to toggle)
lammps 20220106.git7586adbb6a%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 348,064 kB
  • sloc: cpp: 831,421; python: 24,896; xml: 14,949; f90: 10,845; ansic: 7,967; sh: 4,226; perl: 4,064; fortran: 2,424; makefile: 1,501; objc: 238; lisp: 163; csh: 16; awk: 14; tcl: 6
file content (177 lines) | stat: -rw-r--r-- 4,711 bytes parent folder | download | duplicates (2)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#ifndef SPECIES_TIME_INTEGRATOR_H
#define SPECIES_TIME_INTEGRATOR_H

#include <map>
#include <utility>
#include <string>

// ATC headers
#include "TimeIntegrator.h"

namespace ATC {

  // forward declarations
  class ATC_CouplingMass;
  class SpeciesIntegrationMethod;

  /**
   *  @class  SpeciesTimeIntegrator
   *  @brief  Class for various time integrators for species FE quantities in the Eulerian frame
   *          (handles parsing and stores basic data structures)
   */

  class SpeciesTimeIntegrator : public TimeIntegrator {

  public:

    // constructor
    SpeciesTimeIntegrator(ATC_CouplingMass * atc,
                          TimeIntegrationType timeIntegrationType);

    // destructor
    virtual ~SpeciesTimeIntegrator(){};

    /** parser/modifier */
    virtual bool modify(int narg, char **arg);

    /** create objects to implement requested numerical method */
    virtual void construct_methods();

    /** pack persistent fields */
    virtual void pack_fields(RESTART_LIST & data);

    DENS_MAN & nodal_atomic_species_concentration_filtered() { return  nodalAtomicSpeciesConcentrationFiltered_; }

  protected:

    /** sets of molecules tracked */
    const std::map<std::string,std::pair<MolSize,int> > & moleculeIds_;

    /** data */
    DENS_MAN nodalAtomicSpeciesConcentrationFiltered_;

  private:

    // DO NOT define this
    SpeciesTimeIntegrator();

  };

  /**
   *  @class  SpeciesIntegrationMethod
   *  @brief  Class for species time integration methods which update FE quantities in time
   */

  class SpeciesIntegrationMethod : public TimeIntegrationMethod {

  public:

    // constructor
    SpeciesIntegrationMethod(SpeciesTimeIntegrator * speciesTimeIntegrator,
      const std::map<std::string,std::pair<MolSize,int> > & moleculeIds);

    // destructor
    virtual ~SpeciesIntegrationMethod() {nodalAtomicMassDensity_=nullptr;};

    /** create and get necessary transfer operators */
    virtual void construct_transfers();

  protected:
    /** time filtering object */
    TimeFilter * timeFilter_;

    /** finite element mass density field */
    DENS_MAN & massDensity_;

    /** atomic nodal mass density field */
// OBSOLETE?
    DENS_MAN & nodalAtomicMassDensityOut_;
    DENS_MAN * nodalAtomicMassDensity_;

    /** finite element mass density field */
    DENS_MAN & speciesConcentration_;
    DENS_MAN * nodalAtomicSpeciesConcentration_;
    DENS_MAN & nodalAtomicSpeciesConcentrationFiltered_;

    /** sets of molecules tracked */
    const std::map<std::string,std::pair<MolSize,int> > & moleculeIds_;

  private:

    // DO NOT define this
    SpeciesIntegrationMethod();

  };

  /**
   *  @class  SpeciesTimeIntegratorFractionalStep
   *  @brief  FractionalStep integration for FE species quantities
   *          (Uses 2nd order FractionalStep integration to update
   *           the FE mass density field)
   */

  class SpeciesTimeIntegratorFractionalStep : public SpeciesIntegrationMethod {

  public:

    // constructor
    SpeciesTimeIntegratorFractionalStep(SpeciesTimeIntegrator * speciesTimeIntegrator,
      const std::map<std::string,std::pair<MolSize,int> > & moleculeIds);

    // destructor
    virtual ~SpeciesTimeIntegratorFractionalStep(){};

    /** pre time integration */
    virtual void initialize();

    // time step methods, corresponding to ATC_Transfer
    virtual void pre_initial_integrate1(double dt);
    virtual void pre_final_integrate1(double dt);
    virtual void post_final_integrate2(double dt);

    /** post processing step before output */
    virtual void post_process();

  private:

    // DO NOT define this
    SpeciesTimeIntegratorFractionalStep();

  };
  /**
   *  @class  SpeciesTimeIntegratorFractionalStepFiltered
   *  @brief  FractionalStep integration for FE species quantities
   *          (Uses 2nd order FractionalStep integration to update
   *           the FE mass density field)
   */

  class SpeciesTimeIntegratorFractionalStepFiltered : public SpeciesTimeIntegratorFractionalStep {

  public:

    // constructor
    SpeciesTimeIntegratorFractionalStepFiltered(SpeciesTimeIntegrator * speciesTimeIntegrator,
      const std::map<std::string,std::pair<MolSize,int> > & moleculeIds);

    // destructor
    virtual ~SpeciesTimeIntegratorFractionalStepFiltered(){};

    /** pre time integration */
    virtual void initialize() {};

    // time step methods, corresponding to ATC_Transfer
    /** first part of pre_final_integrate */
    virtual void pre_final_integrate1(double dt);

    /** post processing step before output */
    virtual void post_process(){};

  private:

    // DO NOT define this
    SpeciesTimeIntegratorFractionalStepFiltered();

  };
};

#endif