⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transient_system.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
字号:
// $Id: transient_system.C 2789 2008-04-13 02:24:40Z roystgnr $// The libMesh Finite Element Library.// Copyright (C) 2002-2007  Benjamin S. Kirk, John W. Peterson  // This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version.  // This library 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// Lesser General Public License for more details.  // You should have received a copy of the GNU Lesser General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA// C++ includes// Local includes#include "transient_system.h"#include "explicit_system.h"#include "linear_implicit_system.h"#include "nonlinear_implicit_system.h"#include "utility.h"#include "dof_map.h"#include "numeric_vector.h"// ------------------------------------------------------------// TransientSystem implementationtemplate <class Base>TransientSystem<Base>::TransientSystem (EquationSystems& es,					const std::string& name,					const unsigned int number) :    Base                 (es, name, number){  old_local_solution =    AutoPtr<NumericVector<Number> >      (&(this->add_vector("_transient_old_local_solution")));  older_local_solution =    AutoPtr<NumericVector<Number> >      (&(this->add_vector("_transient_older_local_solution")));}template <class Base>TransientSystem<Base>::~TransientSystem (){  this->clear();  // We still have AutoPtrs for API compatibility, but  // now that we're System::add_vector()ing these, we can trust  // the base class to handle memory management  old_local_solution.release();    older_local_solution.release();  }template <class Base>void TransientSystem<Base>::clear (){  // clear the parent data  Base::clear();  // the old & older local solutions  // are now deleted by System!  // old_local_solution->clear();  // older_local_solution->clear();    // FIXME: This preserves maximum backwards compatibility,  // but is probably grossly unnecessary:  old_local_solution.release();    older_local_solution.release();    old_local_solution =    AutoPtr<NumericVector<Number> >      (&(this->add_vector("_transient_old_local_solution")));  older_local_solution =    AutoPtr<NumericVector<Number> >      (&(this->add_vector("_transient_older_local_solution")));}template <class Base>void TransientSystem<Base>::init_data (){  // initialize parent data  Base::init_data();  // Initialize the old & older solutions  old_local_solution->init   (this->n_dofs());  older_local_solution->init (this->n_dofs());}template <class Base>void TransientSystem<Base>::reinit (){  // initialize parent data  Base::reinit();      // Project the old & older vectors to the new mesh  // The System::reinit handles this now  // this->project_vector (*old_local_solution);  // this->project_vector (*older_local_solution);}template <class Base>void TransientSystem<Base>::re_update (){  // re_update the parent system  Base::re_update ();    //const std::vector<unsigned int>& send_list = Base::_dof_map.get_send_list ();  // Explicitly build a send_list  std::vector<unsigned int> send_list(Base::solution->size());  Utility::iota (send_list.begin(), send_list.end(), 0);    const unsigned int first_local_dof = Base::get_dof_map().first_dof();  const unsigned int end_local_dof  = Base::get_dof_map().end_dof();  // Check sizes  libmesh_assert (end_local_dof >= first_local_dof);  libmesh_assert (send_list.size() >= end_local_dof - first_local_dof);  libmesh_assert (older_local_solution->size() >= send_list.size());  libmesh_assert (old_local_solution->size()   >= send_list.size());  // Make sure we have something to do  if (first_local_dof == end_local_dof)    return;    // Update the old & older solutions with the send_list,  // which may have changed since their last update.  older_local_solution->localize (first_local_dof,				  end_local_dof-1,				  send_list);    old_local_solution->localize (first_local_dof,				end_local_dof-1,				send_list);  }template <class Base>Number TransientSystem<Base>::old_solution (const unsigned int global_dof_number) const{  // Check the sizes  libmesh_assert (global_dof_number < this->get_dof_map().n_dofs());  libmesh_assert (global_dof_number < old_local_solution->size());     return (*old_local_solution)(global_dof_number);}template <class Base>Number TransientSystem<Base>::older_solution (const unsigned int global_dof_number) const{  // Check the sizes  libmesh_assert (global_dof_number < this->get_dof_map().n_dofs());  libmesh_assert (global_dof_number < older_local_solution->size());     return (*older_local_solution)(global_dof_number);}// ------------------------------------------------------------// TransientSystem instantiationstemplate class TransientSystem<LinearImplicitSystem>;template class TransientSystem<NonlinearImplicitSystem>;template class TransientSystem<ExplicitSystem>;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -