All pastes #259379 Raw Edit

Anonymous

public cpp v1 · immutable
#259379 ·published 2006-11-27 12:26 UTC
rendered paste body
template<class Ma, class Mc> struct create_preconditioner {	static Mc create(const Ma&A, const iterate_method& method, const Mc& conditioner) {		if (method == ITERATE_OWN) return conditioner ;		Mc ret(A.size1(),A.size2()) ;		typename Ma::const_iterator it(A.begin1()) ;		switch(method) {			case ITERATE_RUMP:				for(;it!=A.end1();++it) {					ret(it.index1(),it.index2()) = *it.center();				}				break ;			case ITERATE_JACOBI:				for(;it!=A.end1();++it) {					if (it.index1() == it.index2()) ret(it.index1(),it.index2()) = *it.center();				}				break ;			case ITERATE_GAUSS_LOWER:				for(;it!=A.end1();++it) {					if (it.index1() >= it.index2()) ret(it.index1(),it.index2()) = *it.center();				}				break ;			case ITERATE_GAUSS_UPPER:				for(;it!=A.end1();++it) {					if (it.index1() <= it.index2()) ret(it.index1(),it.index2()) = *it.center();				}				break ;			default:				throw runtime_error("unknown iterate method") ;		}		return ret ;	}} ;template<class M> struct create_preconditioner<M, M> {	static M create(const M&A, const iterate_method& method, const M& conditioner) {		if (method == ITERATE_OWN) return conditioner ;		M ret(A.size1(),A.size2()) ;		typename M::const_iterator it(A.begin1()) ;		switch(method) {			case ITERATE_RUMP:				for(;it!=A.end1();++it) {					ret(it.index1(),it.index2()) = *it;				}				break ;			case ITERATE_JACOBI:				for(;it!=A.end1();++it) {					if (it.index1() == it.index2()) ret(it.index1(),it.index2()) = *it;				}				break ;			case ITERATE_GAUSS_LOWER:				for(;it!=A.end1();++it) {					if (it.index1() >= it.index2()) ret(it.index1(),it.index2()) = *it;				}				break ;			case ITERATE_GAUSS_UPPER:				for(;it!=A.end1();++it) {					if (it.index1() <= it.index2()) ret(it.index1(),it.index2()) = *it;				}				break ;			default:				throw runtime_error("unknown iterate method") ;		}		return ret ;	}} ;