Merge pull request #256 from ye-luo/guard-too-large-rcut

Print error when Rcut > WS radius in Jastrow.
This commit is contained in:
Paul R. C. Kent 2017-06-08 09:58:44 -04:00 committed by GitHub
commit 7b9a9753ca
3 changed files with 29 additions and 45 deletions

View File

@ -369,17 +369,19 @@ struct BsplineFunctor: public OptimizableFunctorBase
rAttrib.add(radius, "cutoff");
rAttrib.put(cur);
if (radius < 0.0)
if(periodic)
{
app_log() << " Jastrow cutoff unspecified. Setting to Wigner-Seitz radius = "
<< cutoff_radius << ".\n";
}
if (periodic)
app_log() << " Jastrow cutoff unspecified. Setting to Wigner-Seitz radius = " << cutoff_radius << ".\n";
else
{
APP_ABORT(" Jastrow cutoff unspecified. Cutoff must be given when not using periodic boundary conditions");
APP_ABORT(" Jastrow cutoff unspecified. Cutoff must be given when using open boundary conditions");
}
else
cutoff_radius = radius;
if (periodic && radius > cutoff_radius)
{
APP_ABORT(" The Jastrow cutoff specified should not be larger than Wigner-Seitz radius.");
}
else
cutoff_radius = radius;
if (NumParams == 0)
{
PRE.error("You must specify a positive number of parameters for the Bspline jastrow function.",true);

View File

@ -73,7 +73,7 @@ bool BsplineJastrowBuilder::createOneBodyJastrow(xmlNodePtr cur)
BsplineFunctor<RealType> *functor = new BsplineFunctor<RealType>(cusp);
functor->elementType = speciesA;
int ig = sSet.findSpecies (speciesA);
functor->periodic = sourcePtcl->Lattice.SuperCellEnum == SUPERCELL_BULK;
functor->periodic = sourcePtcl->Lattice.SuperCellEnum != SUPERCELL_OPEN;
functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius;
int jg=-1;
if(speciesB.size())
@ -82,21 +82,6 @@ bool BsplineJastrowBuilder::createOneBodyJastrow(xmlNodePtr cur)
{
//ignore
functor->put (kids);
if (functor->cutoff_radius < 1.0e-6)
{
if(sourcePtcl->Lattice.SuperCellEnum == SUPERCELL_BULK)
{
app_log() << " BsplineFunction rcut is currently zero.\n"
<< " Setting to Wigner-Seitz radius = "
<< sourcePtcl->Lattice.WignerSeitzRadius << std::endl;
functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius;
functor->reset();
}
else
{
APP_ABORT("BsplineJastrowBuilder::put rcut must be provided for one body jastrow since boundary conditions are not periodic");
}
}
J1->addFunc (ig,functor,jg);
success = true;
dJ1->addFunc(ig,functor,jg);
@ -282,25 +267,10 @@ bool BsplineJastrowBuilder::put(xmlNodePtr cur)
}
app_log() << " BsplineJastrowBuilder adds a functor with cusp = " << cusp << std::endl;
RadFuncType *functor = new RadFuncType(cusp);
functor->periodic = targetPtcl.Lattice.SuperCellEnum == SUPERCELL_BULK;
functor->periodic = targetPtcl.Lattice.SuperCellEnum != SUPERCELL_OPEN;
functor->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius;
bool initialized_p=functor->put(kids);
functor->elementType=pairType;
if (functor->cutoff_radius < 1.0e-6)
{
if(targetPtcl.Lattice.SuperCellEnum == SUPERCELL_BULK)
{
app_log() << " BsplineFunction rcut is currently zero.\n"
<< " Setting to Wigner-Seitz radius = "
<< targetPtcl.Lattice.WignerSeitzRadius << std::endl;
functor->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius;
functor->reset();
}
else
{
APP_ABORT("BsplineJastrowBuilder::put rcut must be provided for two body jastrow since boundary conditions are not periodic");
}
}
//RPA INIT
if(!initialized_p && init_mode =="rpa")
{

View File

@ -61,14 +61,26 @@ bool eeI_JastrowBuilder::putkids (xmlNodePtr kids, J3type &J3)
int eNum1 = eSet.findSpecies (eSpecies1);
int eNum2 = eSet.findSpecies (eSpecies2);
functor->put (kids);
if (functor->cutoff_radius < 1.0e-6)
if (sourcePtcl->Lattice.SuperCellEnum != SUPERCELL_OPEN)
{
app_log() << " eeI functor rcut is currently zero.\n"
<< " Setting to Wigner-Seitz radius = "
<< sourcePtcl->Lattice.WignerSeitzRadius << std::endl;
functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius;
functor->reset();
if (functor->cutoff_radius > sourcePtcl->Lattice.WignerSeitzRadius)
{
APP_ABORT(" The eeI Jastrow cutoff specified should not be larger than Wigner-Seitz radius.");
}
if (functor->cutoff_radius < 1.0e-6)
{
app_log() << " eeI functor rcut is currently zero.\n"
<< " Setting to Wigner-Seitz radius = "
<< sourcePtcl->Lattice.WignerSeitzRadius << std::endl;
functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius;
functor->reset();
}
}
else
if (functor->cutoff_radius < 1.0e-6)
{
APP_ABORT(" eeI Jastrow cutoff unspecified. Cutoff must be given when using open boundary conditions");
}
J3.addFunc(iNum, eNum1, eNum2, functor);
}
kids = kids->next;