00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef THYRA_SILLY_MODIFIED_GRAM_SHMIDT_HPP
00030 #define THYRA_SILLY_MODIFIED_GRAM_SHMIDT_HPP
00031
00032 #include "Thyra_MultiVectorBase.hpp"
00033 #include "Thyra_MultiVectorStdOps.hpp"
00034 #include "Thyra_VectorStdOps.hpp"
00035 #include "Thyra_DetachedMultiVectorView.hpp"
00036
00046 template<class Scalar>
00047 void sillyModifiedGramSchmidt(
00048 Thyra::MultiVectorBase<Scalar> *V_inout
00049 ,Teuchos::RefCountPtr<Thyra::MultiVectorBase<Scalar> > *R_out
00050 )
00051 {
00052 typedef Teuchos::ScalarTraits<Scalar> ST;
00053 TEST_FOR_EXCEPT(V_inout==NULL);
00054 Thyra::MultiVectorBase<Scalar> &V = *V_inout;
00055 const int n = V.domain()->dim();
00056 *R_out = Thyra::createMembers(V.domain(),n);
00057
00058 Thyra::DetachedMultiVectorView<Scalar> R(*(*R_out));
00059 for( int k = 0; k < n; ++k ) {
00060 R(k,k) = Thyra::norm(*V.col(k));
00061 Thyra::scale(Scalar(ST::one()/R(k,k)),&*V.col(k));
00062 for( int j = k+1; j < n; ++j ) {
00063 R(k,j) = Thyra::scalarProd(*V.col(k),*V.col(j));
00064 Thyra::update( Scalar(-R(k,j)), *V.col(k), &*V.col(j) );
00065 }
00066 }
00067
00068 }
00069
00070 #endif // THYRA_SILLY_MODIFIED_GRAM_SHMIDT_HPP