当前位置: 首页>>代码示例>>C++>>正文


C++ Array2D::Ny方法代码示例

本文整理汇总了C++中Array2D::Ny方法的典型用法代码示例。如果您正苦于以下问题:C++ Array2D::Ny方法的具体用法?C++ Array2D::Ny怎么用?C++ Array2D::Ny使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Array2D的用法示例。


在下文中一共展示了Array2D::Ny方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: assert

void SplitOp1D::propagateITP(Array2D<cplx> &States, double tolerance)
{
  assert(States.Ny() >= 1 && States.Nx() == nx);
  double enprev = 1.0;
  double encurr = 1.0;
  double enconv = encurr/enprev;
  int nv        = States.Ny();
  int steps     = 0;
  vector<shared_ptr<wvfxn1D>> TestVecs;

  for (int ii = 0; ii < nv; ii++)
    TestVecs.push_back(make_shared<wvfxn1D>(nx,0.0,xstep));

  initializeGuess(TestVecs);

//Get the ground state vector
  copy_n(TestVecs[0]->data(),nx,wvfxn->data());
  wvfxn->normalize();
  while (enconv > tolerance)
  {
    propagateStep(1);
    steps  += 1;
    enprev = encurr;
    wvfxn->normalize();
    encurr = getEnergy();
    enconv = abs(1.0 - (encurr/enprev));
    if (steps > 1000)
    {
      steps = 0;
      itpdt *= 10.0;
      updateITP();
    }
  }
  copy_n(wvfxn->data(),nx,TestVecs[0]->data());

//Reset variables, get excited states
  if (nv > 1)
  {
    for (int ii = 0; ii < nv; ii++)
    {
      copy_n(TestVecs[ii]->data(),nx,wvfxn->data());
      steps  = 0;
      encurr = 1.0;
      enprev = 1.0;
      enconv = encurr/enprev;
      while (enconv > tolerance)
      {
        for (int jj = 0; jj < ii; jj++)
          *wvfxn -= (*TestVecs[jj] * (*TestVecs[jj]|*wvfxn).integrate_rect());

        propagateStep(1);
        steps += 1;
        enprev = encurr;
        wvfxn->normalize();
        encurr = getEnergy();
        enconv = abs(1.0 - (encurr/enprev));

        if (steps > 1000)
        {
          steps = 0;
          itpdt *= 2.0;
          updateITP();
        }
      }
      copy_n(wvfxn->data(),nx,TestVecs[ii]->data());
    }
  }
  //Copy excited states to provided array
  for (int ii = 0; ii < nv; ii++)
    copy_n(TestVecs[ii]->data(),nx,&States(0,ii));
}
开发者ID:andyras,项目名称:SplitOp,代码行数:71,代码来源:splitop.cpp


注:本文中的Array2D::Ny方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。