MagField

Как заставить G4 делать в случае наличия поля то, что надо, а не то, что ему захочется

Здесь (http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/ForApplicationDeveloper/html/Detector/electroMagneticField.html) вообще ничего не понятно! Можете попробовать разобраться сами, но я предупредил.

Иерархия объектов, отвечающих за транспорт в поле, такая: G4TransportationManager (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4TransportationManager.hh&FileDir=geometry/navigation/include) содержит в себе G4FieldManager (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4FieldManager.hh&FileDir=geometry/magneticfield/include), который отвечает за поле для всех объемов. Кроме того каждый G4LogicalVolume (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4LogicalVolume.hh&FileDir=geometry/management/include) может иметь свой собственный G4FieldManager. А может и не иметь. Если все же имеет, то все дочерние объемы наследуют это поле, если не оговорено обратное (посредством собственного G4FieldManager).

Каждый G4FieldManager содержит в себе G4Field (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4Field.hh&FileDir=geometry/magneticfield/include), который имеет виртуальный метод GetFieldValue(const double Point[4], double *fieldVal). Point -- это 4-вектор (x, y, z, t), таким образом поле может зависеть от времени. fieldVal это массив из шести компонент. Первые три это Bx, By, Bz -- напряженности магнитного поля, дальше Ex, Ey, Ez -- электрическое поле. Все в глобальных координатах и внутренних единицах G4. То есть, например, можно написать Bx == 100*gauss.

Кроме того G4FieldManager имеет объект G4ChordFinder (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4ChordFinder.hh&FileDir=geometry/magneticfield/include), который занимается рассчетом траектории. Всю работу за G4ChordFinder на самом деле выполняет его член G4MagInt_Driver (IntegrationDriver), вызывает свои члены G4MagIntegratorStepper (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4MagIntegratorStepper.hh&FileDir=geometry/magneticfield/include) и G4EquationOfMotion (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4EquationOfMotion.hh&FileDir=geometry/magneticfield/include). Первый является решалкой ОДУ, второй необходимо менять крайне редко.

Виртуальности

Из всех них G4Field, G4MagIntegratorStepper и G4EquationOfMotion являются виртуальными абстракными классами.

G4Field бывает (по мере убывания виртуальности):

  1. G4ElectroMagneticField,
  2. G4ElectricField, G4MagneticField,
  3. G4HarmonicPolMagField, G4LineCurrentMagField, G4QuadrupoleMagField, G4UniformElectricField, G4UniformMagField.

G4MagIntegratorStepper можно выбирать между

  1. G4CashKarpRKF45,
  2. G4ClassicalRK4,
  3. G4ExplicitEuler,
  4. G4ImplicitEuler,
  5. G4SimpleHeum,
  6. G4SimpleRunge,
  7. G4RKG3_Stepper

и семейством G4MagHelicalStepper, которое можно применять только в случае постоянного магнитного поля. В него входят

  1. G4ExactHelixStepper,
  2. G4HelixExplicitEuler,
  3. G4HelixHeum,
  4. G4HelixImplicitEuler и
  5. G4HelixSimpleRunge.

G4EquationOfMotion чаще всего бывает G4Mag_UsualEqRhs. Для электрического поля -- G4EqMagElectricField.

Параметры, которые влияют на трекинг в поле:

DeltaChord               в FieldManager
DeltaIntersection        в FieldManager
EpsMaxStep               в FieldManager 
EpsMinStep               в FieldManager
MinimalStep              в IntegratorDriver, но можно устанавливать и в ChordFinder
LargestAcceptableStep    в TransportationManager

Первые четыре должны быть где-то одного порядка и никак не меньше 10-9 м.

Edit page