Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4PhononReflection.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26/// \file processes/phonon/src/G4PhononReflection.cc
27/// \brief Implementation of the G4PhononReflection class
28//
29// This process handles the interaction of phonons with
30// boundaries. Implementation of this class is highly
31// geometry dependent.Currently, phonons are killed when
32// they reach a boundary. If the other side of the
33// boundary was Al, a hit is registered.
34//
35//
36// 20131115 Throw exception if track's polarization state is invalid.
37
38#include "G4PhononReflection.hh"
41#include "G4LatticePhysical.hh"
42#include "G4PhononLong.hh"
43#include "G4PhononTransFast.hh"
44#include "G4PhononTransSlow.hh"
46#include "G4Step.hh"
47#include "G4StepPoint.hh"
48#include "G4SystemOfUnits.hh"
49#include "G4VParticleChange.hh"
50
51
53 : G4VPhononProcess(aName),
54 kCarTolerance(G4GeometryTolerance::GetInstance()->GetSurfaceTolerance()) {;}
55
57
58//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
59
60// Always return DBL_MAX and Forced. This ensures that the process is
61// called at the end of every step. In PostStepDoIt the process
62// decides whether the step encountered a volume boundary and a
63// reflection should be applied
64
68 return DBL_MAX;
69}
70
71//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
72
73// This process handles the interaction of phonons with
74// boundaries. Implementation of this class is highly geometry
75// dependent.Currently, phonons are killed when they reach a
76// boundary. If the other side of the boundary was Al, a hit is
77// registered.
78
80 const G4Step& aStep) {
82
83 //Check if current step is limited by a volume boundary
84 G4StepPoint* postStepPoint = aStep.GetPostStepPoint();
85 if (postStepPoint->GetStepStatus()!=fGeomBoundary) {
86 //make sure that correct phonon velocity is used after the step
87 int pol = GetPolarization(aTrack);
88 if (pol < 0 || pol > 2) {
89 G4Exception("G4PhononReflection::PostStepDoIt","Phonon001",
90 EventMustBeAborted, "Track is not a phonon");
91 return &aParticleChange; // NOTE: Will never get here
92 }
93
94 // FIXME: This should be using wave-vector, shouldn't it?
96
97 //Since step was not a volume boundary, just set correct phonon velocity and return
99 return &aParticleChange;
100 }
101
102 // do nothing but return is the step is too short
103 // This is to allow actual reflection where after
104 // the first boundary crossing a second, infinitesimal
105 // step occurs crossing back into the original volume
106 if (aTrack.GetStepLength()<=kCarTolerance/2) {
107 return &aParticleChange;
108 }
109
110 G4double eKin = aTrack.GetKineticEnergy();
113
114 return &aParticleChange;
115}
116
117//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
118
119
const G4double kCarTolerance
G4double condition(const G4ErrorSymMatrix &m)
@ EventMustBeAborted
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
G4ForceCondition
@ Forced
Definition of the G4LatticePhysical class.
@ fGeomBoundary
Definition: G4StepStatus.hh:43
@ fStopAndKill
double G4double
Definition: G4Types.hh:83
G4double MapKtoV(G4int, G4ThreeVector) const
void Initialize(const G4Track &) override
void ProposeVelocity(G4double finalVelocity)
virtual G4double GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *)
G4PhononReflection(const G4String &processName="phononReflection")
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
G4StepStatus GetStepStatus() const
Definition: G4Step.hh:62
G4StepPoint * GetPostStepPoint() const
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
G4double GetStepLength() const
void ProposeTrackStatus(G4TrackStatus status)
void ProposeNonIonizingEnergyDeposit(G4double anEnergyPart)
virtual G4int GetPolarization(const G4Track &track) const
const G4LatticePhysical * theLattice
G4ParticleChange aParticleChange
Definition: G4VProcess.hh:331
#define DBL_MAX
Definition: templates.hh:62