2// ********************************************************************
 
    3// * License and Disclaimer                                           *
 
    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.                             *
 
   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.         *
 
   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// ********************************************************************
 
   26// G4VFSALIntegrationStepper inline methods implementation
 
   28// Author: Somnath Banerjee, Google Summer of Code 2015
 
   29// Supervision: John Apostolakis, CERN
 
   30// --------------------------------------------------------------------
 
   33G4EquationOfMotion* G4VFSALIntegrationStepper::GetEquationOfMotion()
 
   39 G4VFSALIntegrationStepper::SetEquationOfMotion(G4EquationOfMotion* newEquation)
 
   41  if( newEquation != nullptr )
 
   43    fEquation_Rhs = newEquation;
 
   48G4int G4VFSALIntegrationStepper::GetNumberOfVariables() const
 
   50  return fNoIntegrationVariables;
 
   54G4int G4VFSALIntegrationStepper::GetNumberOfStateVariables() const
 
   56  return fNoStateVariables;
 
   60void G4VFSALIntegrationStepper::NormaliseTangentVector( G4double vec[6] )
 
   62  G4double drds2 = vec[3]*vec[3]+vec[4]*vec[4]+vec[5]*vec[5];
 
   64  if( std::fabs(drds2 - 1.0) > 1.e-14 )
 
   66    G4double normx = 1.0 / std::sqrt(drds2);
 
   67    for(auto i=3; i<6; ++i) { vec[i] *= normx; }
 
   72void G4VFSALIntegrationStepper::NormalisePolarizationVector( G4double vec[12] )
 
   74  G4double drds2 = vec[9]*vec[9]+vec[10]*vec[10]+vec[11]*vec[11];
 
   78    if( std::fabs(drds2 - 1.0) > 1.e-14 )
 
   80      G4double normx = 1.0 / std::sqrt(drds2);
 
   81      for(auto i=9; i<12; ++i)  { vec[i] *= normx; }