n-Dimensional Fast Methods  0.7
 All Classes Functions Variables Typedefs Pages
FSM< grid_t > Class Template Reference

Implements Fast Sweeping Method. More...

#include <fsm.hpp>

Inheritance diagram for FSM< grid_t >:
Collaboration diagram for FSM< grid_t >:

Public Member Functions

 FSM (unsigned maxSweeps=std::numeric_limits< unsigned >::max())
 
 FSM (const char *name, unsigned maxSweeps=std::numeric_limits< unsigned >::max())
 
virtual void setEnvironment (grid_t *g)
 Sets and cleans the grid in which operations will be performed. Since a maximum number of dimensions is assumed, fills the rest with size 1.
 
virtual void setup ()
 Executes EikonalSolver setup and other checks.
 
virtual void computeInternal ()
 Actual method that implements FSM.
 
virtual void reset ()
 Clears temporal data, so it is ready to run again.
 
virtual void printRunInfo () const
 
- Public Member Functions inherited from EikonalSolver< grid_t >
 EikonalSolver (const std::string &name)
 
virtual double solveEikonal (const int &idx)
 Solves nD Eikonal equation for cell idx. If heuristics are activated, it will add the estimated travel time to goal with current velocity. More...
 
- Public Member Functions inherited from Solver< grid_t >
 Solver (const std::string &name)
 
virtual void setInitialAndGoalPoints (const std::vector< unsigned int > &init_points, unsigned int goal_idx)
 Sets the initial and goal points by the indices of the grid.
 
virtual void setInitialPoints (const std::vector< unsigned int > &init_points)
 Sets the initial points by the indices of the grid.
 
virtual void setInitialAndGoalPoints (const std::array< unsigned int, grid_t::getNDims()> &init_coord, const std::array< unsigned int, grid_t::getNDims()> &goal_coord)
 Sets the initial and goal points by the coordinates of the grid.
 
virtual void setInitialPoints (const std::array< unsigned int, grid_t::getNDims()> &init_coord)
 Sets the initial point by the coordinates of the grid.
 
void compute ()
 Computes the distances map. Will call setup() if not done already.
 
template<class T >
T * as ()
 Cast this instance to a desired type.
 
template<class T >
const T * as () const
 Cast this instance to a desired type.
 
const std::string & getName () const
 Returns name of the solver.
 
virtual void clear ()
 Clears the solver, it is not recommended to be used out of the destructor.
 
grid_t * getGrid () const
 Returns a pointer to the grid used.
 
virtual double getTime () const
 

Protected Member Functions

void recursiveIteration (size_t depth, int it=0)
 Equivalent to nesting as many for loops as dimensions. For every most inner loop iteration, solveForIdx() is called for the corresponding idx.
 
virtual void solveForIdx (unsigned idx)
 Actually executes one solving iteration of the FSM.
 
virtual void setSweep ()
 Set the sweep variables: initial and final indices for iterations, and the increment of each iteration in every dimension. More...
 
virtual void initializeSweepArrays ()
 Initializes the internal arrays employed.
 
- Protected Member Functions inherited from EikonalSolver< grid_t >
double solveEikonalNDims (unsigned int idx, unsigned int dim)
 Solves the Eikonal equation assuming that Tvalues_ is sorted.
 
- Protected Member Functions inherited from Solver< grid_t >
int sanityChecks ()
 Performs different check before a solver can proceed.
 

Protected Attributes

unsigned int sweeps_
 Number of sweeps performed.
 
unsigned maxSweeps_
 Number of maximum sweeps to perform.
 
bool keepSweeping_
 Flag to indicate that at least one more sweep is required.
 
bool stopPropagation_
 Flag to stop sweeping (used when goal point has converged).
 
std::array< int,
grid_t::getNDims()> 
incs_
 Sweep directions {-1,1} for each dimension. Extended dimensions always 1.
 
std::array< int,
grid_t::getNDims()> 
inits_
 Initial indices for each dimension. Extended dimensions always 0.
 
std::array< int,
grid_t::getNDims()> 
ends_
 Final indices for each dimension. Extended dimensions always 1.
 
std::array< int,
grid_t::getNDims()> 
dimsize_
 Size of each dimension, extended to the maximum size. Extended dimensions always 1.
 
std::array< int,
grid_t::getNDims()> 
d_
 Auxiliar array to speed up indexing generalization: stores parcial multiplications of dimensions sizes. d_[0] = dimsize_[0]; d_[1] = dimsize_[0]*dimsize_[1]; etc.
 
- Protected Attributes inherited from EikonalSolver< grid_t >
std::vector< double > Tvalues_
 Auxiliar vector with values T0,T1...Tn-1 variables in the Discretized Eikonal Equation.
 
std::array< unsigned int,
2 *grid_t::getNDims()> 
neighbors_
 Auxiliar array which stores the neighbor of each iteration of the computeFM() function.
 
- Protected Attributes inherited from Solver< grid_t >
grid_t * grid_
 Grid container.
 
std::string name_
 Solver name.
 
bool setup_
 Setup status.
 
std::vector< unsigned int > init_points_
 Initial index.
 
unsigned int goal_idx_
 Goal index.
 
std::chrono::time_point
< std::chrono::steady_clock > 
start_
 Time measurement variables.
 
std::chrono::time_point
< std::chrono::steady_clock > 
end_
 
double time_
 Time elapsed by the compute method.
 

Detailed Description

template<class grid_t>
class FSM< grid_t >

Todo:
implement a more robust goal point stopping criterion.

It uses as a main container the nDGridMap class. The nDGridMap type T has to use an FMCell or derived.

The grid is assumed to be squared, that is Delta(x) = Delta(y) = leafsize_

External documentation:
H. Zhao, A fast sweeping method for Eikonal equations, Math. Comp. 74 (2005), 603-627. [PDF]

NOTE: The sweeping directions are inverted with respect to the paper to make implementation easier. And sweeping is implemented recursively (undetermined number of nested for loops) to achieve n-dimensional behaviour.

Copyright (C) 2015 Javier V. Gomez www.javiervgomez.com

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition at line 41 of file fsm.hpp.

Member Function Documentation

template<class grid_t >
virtual void FSM< grid_t >::setSweep ( )
inlineprotectedvirtual

Generates a periodical pattern for incs_ (example for 3D): [-1-1-1, 1-1-1, -11-1, 11-1, -1-11, 1-11, -111, 111]

Stablishes inits_ and ends_ accordingly.

Definition at line 153 of file fsm.hpp.


The documentation for this class was generated from the following file: