Skip to content
Snippets Groups Projects
Commit 4aa1cd51 authored by Vakhtang Tsulaia's avatar Vakhtang Tsulaia
Browse files

Removed the obsolete directory Simulation/G4Sim/FADS and fixed several compilation failures caused

by switching to geant4.10.4.patch02.atlasmt01
parent f605f81a
No related merge requests found
Showing
with 18 additions and 670 deletions
...@@ -17,7 +17,9 @@ ...@@ -17,7 +17,9 @@
#include "G4OpRayleigh.hh" #include "G4OpRayleigh.hh"
#include "G4OpBoundaryProcess.hh" #include "G4OpBoundaryProcess.hh"
#if G4VERSION_NUMBER > 1009 #if G4VERSION_NUMBER > 1029
#define PARTICLEITERATOR (this->GetParticleIterator())
#elif G4VERSION_NUMBER > 1009
#define PARTICLEITERATOR aParticleIterator #define PARTICLEITERATOR aParticleIterator
#else #else
#define PARTICLEITERATOR theParticleIterator #define PARTICLEITERATOR theParticleIterator
......
...@@ -20,7 +20,9 @@ ...@@ -20,7 +20,9 @@
// 26-10-2015 : Edoardo Farina // 26-10-2015 : Edoardo Farina
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#if G4VERSION_NUMBER > 1009 #if G4VERSION_NUMBER > 1029
#define PARTICLEITERATOR (this->GetParticleIterator())
#elif G4VERSION_NUMBER > 1009
#define PARTICLEITERATOR aParticleIterator #define PARTICLEITERATOR aParticleIterator
#else #else
#define PARTICLEITERATOR theParticleIterator #define PARTICLEITERATOR theParticleIterator
......
...@@ -22,7 +22,9 @@ ...@@ -22,7 +22,9 @@
// 14-05-2015 Edoardo Farina // 14-05-2015 Edoardo Farina
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#if G4VERSION_NUMBER > 1009 #if G4VERSION_NUMBER > 1029
#define PARTICLEITERATOR (this->GetParticleIterator())
#elif G4VERSION_NUMBER > 1009
#define PARTICLEITERATOR aParticleIterator #define PARTICLEITERATOR aParticleIterator
#else #else
#define PARTICLEITERATOR theParticleIterator #define PARTICLEITERATOR theParticleIterator
......
...@@ -35,7 +35,9 @@ ...@@ -35,7 +35,9 @@
// 15-05-2015 : Edoardo Farina // 15-05-2015 : Edoardo Farina
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#include "G4Version.hh" #include "G4Version.hh"
#if G4VERSION_NUMBER > 1009 #if G4VERSION_NUMBER > 1029
#define PARTICLEITERATOR (this->GetParticleIterator())
#elif G4VERSION_NUMBER > 1009
#define PARTICLEITERATOR aParticleIterator #define PARTICLEITERATOR aParticleIterator
#else #else
#define PARTICLEITERATOR theParticleIterator #define PARTICLEITERATOR theParticleIterator
......
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
// 2015-05-14 Edoardo Farina // 2015-05-14 Edoardo Farina
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#if G4VERSION_NUMBER > 1009 #if G4VERSION_NUMBER > 1029
#define PARTICLEITERATOR (this->GetParticleIterator())
#elif G4VERSION_NUMBER > 1009
#define PARTICLEITERATOR aParticleIterator #define PARTICLEITERATOR aParticleIterator
#else #else
#define PARTICLEITERATOR theParticleIterator #define PARTICLEITERATOR theParticleIterator
......
...@@ -33,7 +33,9 @@ ...@@ -33,7 +33,9 @@
// 15-05-2015 : Edoardo Farina // 15-05-2015 : Edoardo Farina
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#if G4VERSION_NUMBER > 1009 #if G4VERSION_NUMBER > 1029
#define PARTICLEITERATOR (this->GetParticleIterator())
#elif G4VERSION_NUMBER > 1009
#define PARTICLEITERATOR aParticleIterator #define PARTICLEITERATOR aParticleIterator
#else #else
#define PARTICLEITERATOR theParticleIterator #define PARTICLEITERATOR theParticleIterator
......
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
/**
@page FadsControl_page FadsControl
@author Andrea Dell'Acqua (dellacqu@mail.cern.ch)
@section FadsControl_FadsControl Introduction
This package includes several useful base classes that are used throughout the simulation.
@section FadsControl_FadsControl Class Overview
This package's classes are logically divided in the following way:
- DetectorConstructionEntryBase , PhysicsListEntryBase , PrimaryGeneratorEntryBase , RunManagerEntryBase , UserActionEntryBase : Pure athena base classes for the corresponding G4 objects
- DetectorConstructionEntry , PhysicsListEntry , PrimaryGeneratorEntry , RunManagerEntry , UserActionEntry : Inherit from the pure-athena base classes and add support for the Geant4 object (usually through members rather than through inheritance)
- DetectorDef , PhysicsListDef , PrimaryGeneratorDef , RunManagerDef , UserActionDef : Definitions for the classes (only C++ definitions)
- DetectorConstructionManager , PhysicsListManager , PrimaryGeneratorActionManager , RunManagerStore , UserActionManager : Logical managers for keeping track of the defined objects and which are activated
These individual classes are what one would expect. DetectorConstruction* deal with engines for constructing the detector; PhysicsList* deal with G4PhysicsLists; PrimaryGenerator* deal with G4PrimaryGenerators, RunManager* deal with G4RunManagers (note that there should only be one active at a time, which is why the manager is called a "store"); UserAction* deal with G4UserActions.
Three other classes are included in this package:
- RandomNrCenter : Defines the random number generator to be used, including seeds, for Geant4 (essentially an interface for HepRandomEngines)
- FadsActionBase : A generic action that includes all the G4 action types (stepping actions, tracking actions, run actions, stacking actions). All other action types can inherit from this one and select the methods they wish to implement.
- SteppingVerboseDef : An interface for G4 stepping verbose within the athena framework
*/
################################################################################
# Package: FadsField
################################################################################
# Declare the package name:
atlas_subdir( FadsField )
# External dependencies:
find_package( CLHEP )
find_package( Geant4 )
find_package( XercesC )
# Component(s) in the package:
atlas_add_library( FadsField
src/*.cxx
PUBLIC_HEADERS FadsField
INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
DEFINITIONS ${CLHEP_DEFINITIONS}
LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} )
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef EqOfMotionFactory_H
#define EqOfMotionFactory_H
#include "FadsField/EqOfMotionFactoryBase.h"
#include "FadsField/FieldManager.h"
#include "G4Mag_EqRhs.hh"
#include "G4MagneticField.hh"
namespace FADS {
template <class T>
class EqOfMotionFactory : public EqOfMotionFactoryBase {
private:
T* m_theEqOfMotion;
public:
EqOfMotionFactory(std::string n): EqOfMotionFactoryBase(n) , m_theEqOfMotion(0)
{
RegisterToStore();
}
void Create()
{
if (!m_theEqOfMotion)
{
m_theEqOfMotion=
new T(FieldManager::GetFieldManager()->GetMagneticFieldMap());
}
}
void Delete()
{
if (m_theEqOfMotion)
{
delete m_theEqOfMotion;
m_theEqOfMotion=0;
}
}
virtual G4Mag_EqRhs* Build()
{
Create(); return m_theEqOfMotion;
}
void RegisterToStore() {FieldManager::GetFieldManager()->RegisterEqOfMotion(this);}
};
} // end namespace
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef EqOfMotionFactoryBase_H
#define EqOfMotionFactoryBase_H
#include <string>
class G4EquationOfMotion;
class G4Mag_EqRhs;
namespace FADS {
// abstract base class for implementing a templated stepper factory
class EqOfMotionFactoryBase {
public:
EqOfMotionFactoryBase(std::string n):m_EqOfMotionName(n) {}
virtual G4Mag_EqRhs* Build()=0;
std::string GetName() const {return m_EqOfMotionName;}
void SetName(std::string n) {m_EqOfMotionName=n;}
protected:
std::string m_EqOfMotionName;
};
} // end namespace
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef FadsFieldManager_H
#define FadsFieldManager_H
#include "G4FieldManager.hh"
#include <string>
#include "FadsField/FieldIntParameters.h"
class G4Track;
class G4Region;
class G4MagneticField;
class G4MagIntegratorStepper;
namespace FADS {
class FadsFieldManager: public G4FieldManager {
public:
FadsFieldManager(std::string);
std::string GetName() const;
void SetField(std::string);
virtual ~FadsFieldManager() {;}
void SetStepper(G4MagIntegratorStepper* );
private:
std::string m_name;
FADS::FieldIntParameters* m_defaultParameters;
const G4Track* m_previousTrack;
G4Region* m_previousRegion;
};
} // end namespace
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef FieldIntParameters_H
#define FieldIntParameters_H
class G4Track;
#include "globals.hh"
namespace FADS {
class FieldIntParameters
{
public:
FieldIntParameters();
virtual ~FieldIntParameters();
public:
void List(G4int iFlg=0) const;
public:
virtual void GetParameters(const G4Track*,
G4double& /*maxLengthForConstField*/,
G4double& /*missDistance*/,
G4double& /*typicalLongStep*/,
G4double& /*tolerableBiasError*/,
G4double& /*tolerableIntegrationError*/,
G4double& /*expectedNumBoundaries*/,
G4double& /*expectedTrackLength*/);
//
// This method is invoked when a track gets into the region.
//
// Return values
//
// maxLengthForConstField:
// if the estimated step size is shorter than this maxLengthForConstField,
// the field is assumed to be constant for the step.
//
// missDistance:
// tolerable deviation between actual trajectory and estimated
// chord.
//
// typicalLongStep:
// typicalLongStep is a suggestion to G4PathFinder. There is no
// need to be exact in this parameter but just the typical length
// of the "long" step in this detector region.
// Typically it would be 95-98 percentile of the step length in
// the region. For example, it could be (a factor times) distance
// between layers for barrel silicon detector.
//
// tolerableBiasError:
// tolerable biasing error (in length) accumulated in the region
//
// tolerableIntegrationError:
// tolerable integration (statistical) error (in length) accumulated
// in the region
//
// expectedNumBoundaries:
// number of geometrical boundaries this track is exprected to cross
// in the region
//
// expectedTrackLength:
// maximum distance this track could travel (neglecting spiral path)
// in the region
//
// Note:
// deltaIntersection, deltaOneStep, maxEpsilonStep, minEpsilonStep
// are given by
// deltaIntersection = tolerableBiasError / expectedNumBoundaries
// maxEpsilonStep = 2. * tolerableIntegrationError / expectedTrackLength
// minEpsilonStep = maxEpsilonStep / 10.
// deltaOneStep = minEpsilonStep * typicalLongStep
//
protected:
static G4double s_default_kineticEnergyThreshold;
static G4double s_default_maxLengthForConstField;
static G4double s_default_missDistance;
static G4double s_default_typicalLongStep;
static G4double s_default_tolerableBiasError;
static G4double s_default_tolerableIntegrationError;
static G4double s_default_expectedNumBoundaries;
static G4double s_default_expectedTrackLength;
G4double m_current_kineticEnergyThreshold;
// in the following parameters
// idx=0 for e+/e- track below E-threshold
// idx=1 for e+/e- track above E-threshold
// and all other charged track except mu+/mu-
// of any kinetic energy
// idx=2 for mu+/mu- track of any kinetic energy
G4double m_current_maxLengthForConstField[3];
G4double m_current_missDistance[3];
G4double m_current_typicalLongStep[3];
G4double m_current_tolerableBiasError[3];
G4double m_current_tolerableIntegrationError[3];
G4double m_current_expectedNumBoundaries[3];
G4double m_current_expectedTrackLength[3];
public:
inline static G4double GetDefault_kineticEnergyThreshold()
{ return s_default_kineticEnergyThreshold; }
inline static void SetDefault_kineticEnergyThreshold(G4double val)
{ s_default_kineticEnergyThreshold= val; }
inline static G4double GetDefault_maxLengthForConstField()
{ return s_default_maxLengthForConstField; }
inline static void SetDefault_maxLengthForConstField(G4double val)
{ s_default_maxLengthForConstField= val; }
inline static G4double GetDefault_missDistance()
{ return s_default_missDistance; }
inline static void SetDefault_missDistance(G4double val)
{ s_default_missDistance = val; }
inline static G4double GetDefault_typicalLongStep()
{ return s_default_typicalLongStep; }
inline static void SetDefault_typicalLongStep(G4double val)
{ s_default_typicalLongStep = val; }
inline static G4double GetDefault_tolerableBiasError()
{ return s_default_tolerableBiasError; }
inline static void SetDefault_tolerableBiasError(G4double val)
{ s_default_tolerableBiasError = val; }
inline static G4double GetDefault_tolerableIntegrationError()
{ return s_default_tolerableIntegrationError; }
inline static void SetDefault_tolerableIntegrationError(G4double val)
{ s_default_tolerableIntegrationError = val; }
inline static G4double GetDefault_expectedNumBoundaries()
{ return s_default_expectedNumBoundaries; }
inline static void SetDefault_expectedNumBoundaries(G4double val)
{ s_default_expectedNumBoundaries = val; }
inline static G4double GetDefault_expectedTrackLength()
{ return s_default_expectedTrackLength; }
inline static void SetDefault_expectedTrackLength(G4double val)
{ s_default_expectedTrackLength = val; }
inline G4double GetCurrent_kineticEnergyThreshold() const
{ return m_current_kineticEnergyThreshold; }
inline void SetCurrent_kineticEnergyThreshold(G4double val)
{ m_current_kineticEnergyThreshold= val; }
// in the following parameters
// idx=0 for e+/e- track below E-threshold
// idx=1 for e+/e- track above E-threshold
// and all other charged track except mu+/mu-
// of any kinetic energy
// idx=2 for mu+/mu- track of any kinetic energy
inline G4double GetCurrent_maxLengthForConstField(G4int idx) const
{ return m_current_maxLengthForConstField[idx]; }
inline void SetCurrent_maxLengthForConstField(G4int idx,G4double val)
{ m_current_maxLengthForConstField[idx]= val; }
inline G4double GetCurrent_missDistance(G4int idx) const
{ return m_current_missDistance[idx]; }
inline void SetCurrent_missDistance(G4int idx,G4double val)
{ m_current_missDistance[idx] = val; }
inline G4double GetCurrent_typicalLongStep(G4int idx) const
{ return m_current_typicalLongStep[idx]; }
inline void SetCurrent_typicalLongStep(G4int idx,G4double val)
{ m_current_typicalLongStep[idx] = val; }
inline G4double GetCurrent_tolerableBiasError(G4int idx) const
{ return m_current_tolerableBiasError[idx]; }
inline void SetCurrent_tolerableBiasError(G4int idx,G4double val)
{ m_current_tolerableBiasError[idx] = val; }
inline G4double GetCurrent_tolerableIntegrationError(G4int idx) const
{ return m_current_tolerableIntegrationError[idx]; }
inline void SetCurrent_tolerableIntegrationError(G4int idx,G4double val)
{ m_current_tolerableIntegrationError[idx] = val; }
inline G4double GetCurrent_expectedNumBoundaries(G4int idx) const
{ return m_current_expectedNumBoundaries[idx]; }
inline void SetCurrent_expectedNumBoundaries(G4int idx,G4double val)
{ m_current_expectedNumBoundaries[idx] = val; }
inline G4double GetCurrent_expectedTrackLength(G4int idx) const
{ return m_current_expectedTrackLength[idx]; }
inline void SetCurrent_expectedTrackLength(G4int idx,G4double val)
{ m_current_expectedTrackLength[idx] = val; }
private:
G4int m_nLongStep[3];
G4int m_nShortStep[3];
G4int m_idx;
public:
inline void LongStep()
{ m_nLongStep[m_idx]++; }
inline void ShortStep()
{ m_nShortStep[m_idx]++; }
};
}
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef FieldManager_H
#define FieldManager_H
#include <string>
#include <map>
class G4MagIntegratorStepper;
class G4Mag_EqRhs;
class G4ChordFinder;
#include "G4MagneticField.hh"
#include "FadsField/MagneticFieldMap.h"
namespace FADS {
class MagneticFieldMap;
class IntegratorStepperBase;
class EqOfMotionFactoryBase;
typedef std::map<std::string, MagneticFieldMap*, std::less<std::string> > FieldMap;
typedef std::map<std::string, IntegratorStepperBase*, std::less<std::string> > StepperMap;
typedef std::map<std::string, EqOfMotionFactoryBase*, std::less<std::string> > EquationMap;
class FieldManager {
private:
static FieldManager* s_thePointer;
FieldManager();
public:
static FieldManager* GetFieldManager();
void RegisterMagneticField(MagneticFieldMap* map);
void SelectMagneticField(const std::string& name);
void SelectAndCreateMagneticField(const std::string& name);
MagneticFieldMap* GetMagneticField(const std::string& name);
const MagneticFieldMap* GetMagneticField(const std::string& name) const;
void InitializeField();
void PrintFieldList() const;
void RegisterEqOfMotion(EqOfMotionFactoryBase*);
G4Mag_EqRhs* GetEqOfMotion(const std::string);
void RegisterStepper(IntegratorStepperBase* stepper);
void ListSteppers() const;
const StepperMap Steppers() const { return m_theSteppers; }
std::string CurrentStepper() const { return m_currentStepperName; }
void SetCurrentStepper(const std::string& name);
void UseCurrentStepper();
void UseStepper(const std::string& name);
G4MagIntegratorStepper* GetStepper(const std::string&);
G4Mag_EqRhs *GetEquationOfMotion();
static void SetDeltaOneStep(double);
static void SetDeltaIntersection(double);
static void SetMinimumEpsilonStep(double);
static void SetMaximumEpsilonStep(double);
void EquationOfMotion(const std::string s) {m_eqOfMotion=s;}
std::string EquationOfMotion() const {return m_eqOfMotion;}
G4MagneticField* GetMagneticFieldMap() {return m_currentField;}
G4MagIntegratorStepper* GetCurrentStepper() {return m_currentStepper;}
private:
FieldMap m_fieldCatalog;
StepperMap m_theSteppers;
EquationMap m_theEquations;
MagneticFieldMap* m_currentField;
G4MagIntegratorStepper* m_currentStepper;
std::string m_currentStepperName;
G4Mag_EqRhs* m_theEquation;
G4ChordFinder* m_theChordFinder;
std::string m_eqOfMotion;
};
}
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef FieldManagerFactory_H
#define FieldManagerFactory_H
#include "FadsField/FadsFieldManager.h"
#include <string>
namespace FADS {
class FieldManagerFactory {
public:
FieldManagerFactory(std::string n):m_name(n) { RegisterToStore(); }
std::string GetName() {return m_name;}
virtual FadsFieldManager *CreateFieldManager(std::string) = 0;
virtual ~FieldManagerFactory() {}
private:
std::string m_name;
void RegisterToStore();
};
}
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef FieldManagerFactoryStore_H
#define FieldManagerFactoryStore_H
#include "FadsField/FieldManagerFactory.h"
#include <map>
namespace FADS {
// class FieldManagerFactory;
typedef std::map<std::string,FieldManagerFactory*,std::less<std::string> > factoryMap;
class FieldManagerFactoryStore {
public:
static FieldManagerFactoryStore* GetStore();
void AddFieldManagerFactory(FieldManagerFactory *);
FieldManagerFactory *GetFieldManagerFactory(std::string n);
private:
FieldManagerFactoryStore();
factoryMap m_theFactories;
};
}
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef FieldManagerFactoryT_H
#define FieldManagerFactoryT_H
#include "FadsField/FieldManagerFactory.h"
namespace FADS {
template <class T> class FieldManagerFactoryT:public FieldManagerFactory {
public:
FieldManagerFactoryT(std::string n):FieldManagerFactory(n),m_theFactory(0) {}
FadsFieldManager *CreateFieldManager(std::string n)
{
if (!m_theFactory) m_theFactory=new T(n);
return m_theFactory;
}
private:
T* m_theFactory;
};
}
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef FieldManagerStore_H
#define FieldManagerStore_H
#include <map>
#include <string>
namespace FADS {
class FadsFieldManager;
typedef std::map<std::string,FadsFieldManager*,std::less<std::string> > fmList;
class FieldManagerStore {
friend class FadsFieldManager;
public:
static FieldManagerStore* GetFieldManagerStore();
FadsFieldManager* GetFieldManager(std::string);
private:
FieldManagerStore();
FieldManagerStore(const FieldManagerStore&);
static FieldManagerStore* GetFMStore();
static FieldManagerStore* s_fieldManagerStore;
void RegisterFieldManager(FadsFieldManager*);
fmList m_fieldManagerList;
};
} // end namespace
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef IntegratorStepperBase_H
#define IntegratorStepperBase_H
#include <string>
#include "G4MagIntegratorStepper.hh"
namespace FADS {
/// Abstract base class for implementing a templated stepper factory
class IntegratorStepperBase {
public:
IntegratorStepperBase(const std::string& n)
: m_stepperName(n)
{ }
virtual G4MagIntegratorStepper* Build() = 0;
std::string GetName() const {
return m_stepperName;
}
void SetName(const std::string& n) {
m_stepperName = n;
}
protected:
std::string m_stepperName;
};
}
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef IntegratorStepperFactory_H
#define IntegratorStepperFactory_H
#include "FadsField/IntegratorStepperBase.h"
#include "FadsField/FieldManager.h"
#include "G4MagIntegratorStepper.hh"
namespace FADS {
template <class T>
class IntegratorStepperFactory : public IntegratorStepperBase {
private:
T* m_theStepper;
public:
IntegratorStepperFactory(std::string n): IntegratorStepperBase(n) , m_theStepper(0)
{
RegisterToStore();
}
void Create()
{
if (!m_theStepper)
{
m_theStepper=
new T(FieldManager::GetFieldManager()->GetEquationOfMotion());
}
}
void Delete()
{
if (m_theStepper)
{
delete m_theStepper;
m_theStepper=0;
}
}
virtual G4MagIntegratorStepper* Build()
{
Create(); return m_theStepper;
}
void RegisterToStore() {FieldManager::GetFieldManager()->RegisterStepper(this);}
};
} // end namespace
#endif
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
#ifndef MagneticFieldMap_H
#define MagneticFieldMap_H
#include "G4MagneticField.hh"
#include <string>
namespace FADS {
class MagneticFieldMap: public G4MagneticField {
public:
MagneticFieldMap();
MagneticFieldMap(std::string n);
void GetFieldValue( const double *xyzPos, double *xyzField) const;
virtual void Initialize() {}
virtual void Terminate() {}
virtual MagneticFieldMap* Create() {return this;}
virtual MagneticFieldMap* Create(std::string) {return this;}
bool IsInitialized() {return m_initialized;}
virtual void FieldValue( const double *xyzPos, double *xyzField) const = 0;
std::string GetName() {return m_name;}
void SetInitialValues();
protected:
std::string m_name;
bool m_initialized;
};
} // end namespace
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment