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
|