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

📄 method.cpp

📁 利用C
💻 CPP
字号:
// Copyright (C) 2003-2005 Anders Logg.// Licensed under the GNU LGPL Version 2.1.//// Modified by Garth N. Wells, 2006.//// First added:  2003// Last changed: 2006-03-27#include <dolfin/log/dolfin_log.h>#include <dolfin/math/dolfin_math.h>#include <dolfin/math/Lagrange.h>#include "Method.h"using namespace dolfin;//-----------------------------------------------------------------------------Method::Method(unsigned int q, unsigned int nq, unsigned int nn){  dolfin_assert(nq > 0);  dolfin_assert(nn > 0);  this->q = q;  this->nq = nq;  this->nn = nn;  // Allocate quadrature points  qpoints  = new real[nq];  for (unsigned int i = 0; i < nq; i++)    qpoints[i] = 0.0;  // Allocate nodal points  npoints  = new real[nn];  for (unsigned int i = 0; i < nn; i++)    npoints[i] = 0.0;  // Allocate quadrature weights  qweights = new real[nq];  for (unsigned int i = 0; i < nq; i++)    qweights[i] = 0.0;  // Allocate weights  nweights = new real*[nn];  for (unsigned int i = 0; i < nn; i++)  {    nweights[i] = new real[nq];    for (unsigned int j = 0; j < nq; j++)      nweights[i][j] = 0.0;  }  // Allocate derivatives  derivatives = new real[nq];  for (unsigned int i = 0; i < nq; i++)    derivatives[i] = 0.0;  trial = 0;  test = 0;  _type = none;}//-----------------------------------------------------------------------------Method::~Method(){  if ( qpoints ) delete [] qpoints;  if ( npoints ) delete [] npoints;  if ( qweights ) delete [] qweights;  if ( nweights )  {    for (unsigned int i = 0; i < nn; i++)      delete [] nweights[i];    delete [] nweights;  }  if ( derivatives ) delete [] derivatives;  if ( trial ) delete trial;  if ( test ) delete test;}//-----------------------------------------------------------------------------void Method::init(){  computeQuadrature();  computeBasis();  computeWeights();  computeDerivatives();}//-----------------------------------------------------------------------------void Method::update(real x0, real f[], real k, real values[]) const{  // Update values  for (uint i = 0; i < nn; i++)  {    real sum = 0.0;    for (uint j = 0; j < nq; j++)      sum += nweights[i][j] * f[j];    values[i] = x0 + k*sum;  }}//-----------------------------------------------------------------------------void Method::update(real x0, real f[], real k, real values[], real alpha) const{  // Update values  for (uint i = 0; i < nn; i++)  {    real sum = 0.0;    for (uint j = 0; j < nq; j++)      sum += nweights[i][j] * f[j];    values[i] += alpha*(x0 + k*sum - values[i]);  }}//-----------------------------------------------------------------------------void Method::computeDerivatives(){  for (unsigned int i = 0; i < nq; i++)    derivatives[i] = trial->ddx(i, 1.0);}//-----------------------------------------------------------------------------

⌨️ 快捷键说明

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