PMNS_Fast.cxx
//......................................................................
///
/// Solve the full Hamiltonian for eigenvectors and eigenvalues.
///
/// This is using a method from the GLoBES software available at
/// http://www.mpi-hd.mpg.de/personalhomes/globes/3x3/ \n
/// We should cite them accordingly
///
Solve the full Hamiltonian for eigenvectors and eigenvalues.


Solve the full Hamiltonian for eigenvectors and eigenvalues .
void PMNS_Fast::SolveHam()
{
  if(fPath.density < 1.0e-6){
    SetVacuumEigensystem();
    return;
  }
  BuildHms();
  if(fGotES) return;
  if(TryCache()) return;
  UpdateHam();
  double fEvalGLoBES[3];
  complexD fEvecGLoBES[3][3];
  zheevh3(fHam,fEvecGLoBES,fEvalGLoBES);
  for(int i=0;i<fNumNus;i++){
    fEval[i] = fEvalGLoBES[i];
    for(int j=0;j<fNumNus;j++){
      fEvec[i][j] = fEvecGLoBES[i][j];
    }
  }
  fGotES = true;
  FillCache();
}
void PMNS_Fast :: SolveHam ( ) { if ( fPath . density < 1.0e-6 ) { SetVacuumEigensystem ( ) ; return ; } BuildHms ( ) ; if ( fGotES ) return ; if ( TryCache ( ) ) return ; UpdateHam ( ) ; double fEvalGLoBES [ 3 ] ; complexD fEvecGLoBES [ 3 ] [ 3 ] ; zheevh3 ( fHam , fEvecGLoBES , fEvalGLoBES ) ; for ( int i = 0 ; i < fNumNus ; i ++ ) { fEval [ i ] = fEvalGLoBES [ i ] ; for ( int j = 0 ; j < fNumNus ; j ++ ) { fEvec [ i ] [ j ] = fEvecGLoBES [ i ] [ j ] ; } } fGotES = true ; FillCache ( ) ; }
......................................................................
......................................................................
// Do vacuum oscillation in low density // Build Hamiltonian // Check if anything changed   // Try caching if activated // Solve Hamiltonian for eigensystem using the GLoBES method // Fill fEval and fEvec vectors from GLoBES arrays   // Fill cache if activated