00001 // This file is part of ff3d - http://www.freefem.org/ff3d 00002 // Copyright (C) 2001, 2002, 2003 Stéphane Del Pino 00003 00004 // This program is free software; you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation; either version 2, or (at your option) 00007 // any later version. 00008 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program; if not, write to the Free Software Foundation, 00016 // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 00018 // $Id: FEMSolution.cpp,v 1.3 2007/08/02 23:11:54 delpinux Exp $ 00019 00020 #include <FEMSolution.hpp> 00021 #include <FEMFunctionBase.hpp> 00022 00023 void 00024 FEMSolution:: 00025 setUserFunction (const std::vector<ReferenceCounting<FEMFunctionBase> >& U) 00026 { 00027 Vector<real_t>& v = *__values; 00028 for (size_t i=0; i<__degreeOfFreedomSet.numberOfVariables(); ++i) { 00029 const ScalarDegreeOfFreedomPositionsSet& dofPositionSet = __degreeOfFreedomSet.positionsSet(i); 00030 const FEMFunctionBase& fem = *U[i]; 00031 for(size_t j=0; j<dofPositionSet.number(); ++j) { 00032 if (__degreeOfFreedomSet.isDOFVertex(i,j)) { 00033 const size_t dofNumber = __degreeOfFreedomSet(i,j); 00034 v[dofNumber]=fem[j]; 00035 } 00036 } 00037 } 00038 } 00039 00040 void 00041 FEMSolution:: 00042 getUserFunction(std::vector<ReferenceCounting<FEMFunctionBase> >& U) const 00043 { 00044 const Vector<real_t>& v = *__values; 00045 for (size_t i=0; i<__degreeOfFreedomSet.numberOfVariables(); ++i) { 00046 const ScalarDegreeOfFreedomPositionsSet& dofPositionSet = __degreeOfFreedomSet.positionsSet(i); 00047 FEMFunctionBase& fem = *U[i]; 00048 for(size_t j=0; j<dofPositionSet.number(); ++j) { 00049 if (__degreeOfFreedomSet.isDOFVertex(i,j)) { 00050 fem[j] = v[__degreeOfFreedomSet(i,j)]; 00051 } else { 00052 fem[j] = 0; 00053 } 00054 } 00055 } 00056 }
1.5.6