本文整理汇总了C++中Wavefunction::Copy方法的典型用法代码示例。如果您正苦于以下问题:C++ Wavefunction::Copy方法的具体用法?C++ Wavefunction::Copy怎么用?C++ Wavefunction::Copy使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Wavefunction
的用法示例。
在下文中一共展示了Wavefunction::Copy方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: begin
/*
* Maps the given wavefunction to one where the particles are exchanged
* psi(1,2) -> psi(2,1)
*/
Wavefunction<3>::Ptr GetWavefunctionParticleExchange(Wavefunction<3>::Ptr psi, list angularSymmetrizationPairs)
{
typedef Array<cplx, 3> ArrayType;
ArrayType data = psi->GetData();
int countr = data.extent(1);
typedef stl_input_iterator<tuple> Iterator;
Iterator begin(angularSymmetrizationPairs);
Iterator end;
Wavefunction<3>::Ptr exchgPsi = psi->Copy();
ArrayType exchgData = exchgPsi->GetData();
for (Iterator i=begin; i!=end; i++)
{
int a1 = extract<int>((*i)[0]);
int a2 = extract<int>((*i)[1]);
for (int r1=0; r1<countr; r1++)
{
for (int r2=0; r2<countr; r2++)
{
exchgData(a1, r1, r2) = data(a2, r2, r1);
}
}
}
return exchgPsi;
}
示例2:
void DistributedOverlapMatrix<Rank>::SetupRank(Wavefunction<Rank> &srcPsi, int opRank)
{
//Need a copy of srcPsi for future reference (only on first call to this function)
if (!HasPsi)
{
Psi = srcPsi.Copy();
HasPsi = true;
}
//Check that distribution for opRank has not changed since last call.
//Also check that typeID of representation is the same
/* int curDistribOpRank = Psi->GetRepresentation()->GetDistributedModel()->GetDistribution()(opRank);
int srcDistribOpRank = srcPsi.GetRepresentation()->GetDistributedModel()->GetDistribution()(opRank);
if ( (curDistribOpRank != srcDistribOpRank) )
{
Psi = srcPsi.Copy();
//NB: We reset IsSetup flag for _all_ ranks!
IsSetupRank = false;
}
*/
if (!IsSetupRank(opRank))
{
//Sanity check: operation rank should be less than rank of wavefunction (and nonzero, duh)
assert(opRank < Rank);
assert(opRank > -1);
//Assert non-orthogonal rank opRank
assert (!srcPsi.GetRepresentation()->IsOrthogonalBasis(opRank));
//Create Epetra map for this rank
WavefunctionMaps(opRank) = CreateWavefunctionMultiVectorEpetraMap<Rank>(Psi, opRank);
//Setup overlap matrix
SetupOverlapMatrixRank(srcPsi, opRank);
//Setup work multivectors
blitz::Array<cplx, 3> psiData = MapToRank3(srcPsi.GetData(), opRank, 1);
int numVectors = 2 * psiData.extent(0) * psiData.extent(2);
InputVector(opRank) = Epetra_MultiVector_Ptr( new Epetra_MultiVector(*WavefunctionMaps(opRank), numVectors, false) );
OutputVector(opRank) = Epetra_MultiVector_Ptr( new Epetra_MultiVector(*WavefunctionMaps(opRank), numVectors, false) );
//Allocate mem for multivectors
//InputData.resize(srcPsi.GetData().size(), 1);
//OutputData.resize(srcPsi.GetData().size(), 1);
//Setup Amesos solvers
SetupOverlapSolvers(srcPsi, opRank);
//Flag this rank as set up
IsSetupRank(opRank) = true;
}
}