		//output += trans(input)*input
		void add_symmetric_prod (const TSystemMatrixType& input,
			TSystemMatrixType& output) 
		{
			KRATOS_TRY
				typedef  unsigned int size_type;
			typedef  double value_type;


			for (size_type k = 0; k < input.size1 (); ++ k) 
			{
				size_type begin = input.index1_data () [k];
				size_type end = input.index1_data () [k + 1];


				for (size_type i = begin; i < end; ++ i)
				{
					unsigned int index_i = input.index2_data () [i];
					value_type data_i = input.value_data()[i];
					for (size_type j = begin; j < end; ++ j)
					{
						unsigned int index_j = input.index2_data () [j];
						//std::cout << index_i << " " << index_j << std::endl;
						output(index_i,index_j) += data_i * input.value_data()[j];
					}
				}
				//KRATOS_WATCH(output.non_zeros());
				//std::cout << k << " nnz = " << end << " " << begin << std::endl;
			}
			KRATOS_CATCH("");
		}

