Skip to content

Commit

Permalink
Changes to automate pseudopotential generation to dftfe format from u…
Browse files Browse the repository at this point in the history
…pf format
  • Loading branch information
phanimotamarri committed Jun 19, 2018
1 parent 9a9b0fc commit 327606d
Show file tree
Hide file tree
Showing 12 changed files with 94 additions and 47 deletions.
26 changes: 26 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ SET(TARGET_SRC
./utils/dftUtils.cc
./utils/vectorTools/interpolateFieldsFromPreviousMesh.cc
./utils/vectorTools/vectorUtilities.cc
./utils/pseudoConverter.cc
./utils/upfToxml.cc
./utils/PeriodicTable.cc
./utils/xmlTodftfeParser.cc
# You can specify additional files here!
)

Expand Down Expand Up @@ -188,6 +192,28 @@ ELSE()
MESSAGE(FATAL_ERROR "-- Provide path to prefix of LibXC: -DLIBXC_DIR=/path/to/prefix")
ENDIF (DEFINED LIBXC_DIR)

#
# XML. Set with -DXML_DIR=/path/to/xml
#
IF (DEFINED XML_INCLUDE_DIR)
FIND_LIBRARY(XML_LIBRARY
NAMES xml2
HINTS ${XML_LIB_DIR}
NO_DEFAULT_PATH
)
IF(XML_LIBRARY STREQUAL "XML_LIBRARY-NOTFOUND")
MESSAGE(FATAL_ERROR "-- XML was not found in ${XML_LIB_DIR}")
ENDIF()
MESSAGE("-- Use Xml from ${XML_LIB_DIR}")
TARGET_LINK_LIBRARIES(${TARGETLIB}
"${XML_LIBRARY}"
)
INCLUDE_DIRECTORIES ("${XML_INCLUDE_DIR}")
ELSE()
MESSAGE(FATAL_ERROR "-- Provide path of XML: -DXML_DIR=/path/to/xml")
ENDIF (DEFINED XML_INCLUDE_DIR)



#
# SPG. Set with -DSPGLIB_DIR=/path/to/prefix
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,19 @@ end


subsection SCF parameters
set MAXIMUM ITERATIONS = 1
set MAXIMUM ITERATIONS = 30
set TOLERANCE = 1e-7
set ANDERSON SCHEME MIXING PARAMETER = 0.5
set ANDERSON SCHEME MIXING HISTORY = 70
set TEMPERATURE = 500
set STARTING WFC=ATOMIC
set STARTING WFC=RANDOM

subsection Eigen-solver/Chebyshev solver related parameters
set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 15
set LOWER BOUND WANTED SPECTRUM = -10.0
set CHEBYSHEV POLYNOMIAL DEGREE = 0
set ORTHOGONALIZATION TYPE = GS
set CHEBYSHEV FILTER TOLERANCE = 5e-02
set CHEBYSHEV FILTER TOLERANCE = 1e-02
end
end

Expand Down
4 changes: 2 additions & 2 deletions include/constraintMatrixInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
//
// ---------------------------------------------------------------------
//
// @author Phani Motamarri (2018)
// @author Phani Motamarri
//

#ifndef constraintMatrixInfo_H_
Expand Down Expand Up @@ -121,7 +121,7 @@ namespace dftUtils

};

};
}

}
#endif
4 changes: 2 additions & 2 deletions include/dftParameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ namespace dftfe {
extern double radiusAtomBall, mixingParameter, dkx, dky, dkz;
extern double lowerEndWantedSpectrum,relLinearSolverTolerance,selfConsistentSolverTolerance,TVal, start_magnetization;

extern bool isPseudopotential,periodicX,periodicY,periodicZ, useSymm, timeReversal;
extern std::string meshFileName,coordinatesFile,domainBoundingVectorsFile,kPointDataFile, ionRelaxFlagsFile, orthogType;
extern bool isPseudopotential, periodicX, periodicY, periodicZ, useSymm, timeReversal;
extern std::string meshFileName,coordinatesFile,domainBoundingVectorsFile,kPointDataFile, ionRelaxFlagsFile, orthogType,pseudoPotentialFile;

extern double outerAtomBallRadius, meshSizeOuterDomain;
extern double meshSizeInnerBall, meshSizeOuterBall;
Expand Down
19 changes: 11 additions & 8 deletions setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ dealiiPetscComplexDir="/home/vikramg/DFT-FE-softwares/softwareCentos/dealiiDev/i
alglibDir="/nfs/mcfs_comp/home/rudraa/software/alglib/cpp/src"
libxcDir="/home/vikramg/DFT-FE-softwares/softwareCentos/libxcNew/install_intel18"
spglibDir="/home/vikramg/DFT-FE-softwares/softwareCentos/spglib"
xmlIncludeDir="/usr/include/libxml2"
xmlLibDir="/usr/lib64"

optimizedMode=1
#
#Usually, no changes are needed below this line
Expand All @@ -21,18 +24,18 @@ if [ $optimizedMode == 1 ]; then
cd build
cd release
echo -e "${Blu}Building Real executable in Optimized (Release) mode...${RCol}"
mkdir -p real && cd real && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS_RELEASE="-O3" -DCMAKE_BUILD_TYPE=Release -DDEAL_II_DIR=$dealiiPetscRealDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir ../../../. && make -j 4 && cd ..
mkdir -p real && cd real && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS_RELEASE="-O3" -DCMAKE_BUILD_TYPE=Release -DDEAL_II_DIR=$dealiiPetscRealDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir -DXML_INCLUDE_DIR=$xmlIncludeDir ../../../. && make -j 4 && cd ..
echo -e "${Blu}Building Complex executable in Optimized (Release) mode...${RCol}"
mkdir -p complex && cd complex && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS_RELEASE="-O3" -DCMAKE_BUILD_TYPE=Release -DDEAL_II_DIR=$dealiiPetscComplexDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir ../../../. && make -j 4 && cd ../..
mkdir -p complex && cd complex && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS_RELEASE="-O3" -DCMAKE_BUILD_TYPE=Release -DDEAL_II_DIR=$dealiiPetscComplexDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir -DXML_INCLUDE_DIR=$xmlIncludeDir ../../../. && make -j 4 && cd ../..
else
rm -rf build/release
echo -e "${Blu}Creating build directory...${RCol}"
mkdir -p build && cd build
mkdir -p release && cd release
echo -e "${Blu}Building Real executable in Optimized (Release) mode...${RCol}"
mkdir -p real && cd real && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS_RELEASE="-O3" -DCMAKE_BUILD_TYPE=Release -DDEAL_II_DIR=$dealiiPetscRealDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir ../../../. && make -j 4 && cd ..
mkdir -p real && cd real && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS_RELEASE="-O3" -DCMAKE_BUILD_TYPE=Release -DDEAL_II_DIR=$dealiiPetscRealDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir -DXML_INCLUDE_DIR=$xmlIncludeDir ../../../. && make -j 4 && cd ..
echo -e "${Blu}Building Complex executable in Optimized (Release) mode...${RCol}"
mkdir -p complex && cd complex && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS_RELEASE="-O3" -DCMAKE_BUILD_TYPE=Release -DDEAL_II_DIR=$dealiiPetscComplexDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir ../../../. && make -j 4 && cd ../..
mkdir -p complex && cd complex && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS_RELEASE="-O3" -DCMAKE_BUILD_TYPE=Release -DDEAL_II_DIR=$dealiiPetscComplexDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir -DXML_INCLUDE_DIR=$xmlIncludeDir ../../../. && make -j 4 && cd ../..
fi
else
if [ -d "build/debug" ]; then
Expand All @@ -41,18 +44,18 @@ else
cd build
cd debug
echo -e "${Blu}Building Real executable in Debug mode...${RCol}"
mkdir -p real && cd real && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug -DDEAL_II_DIR=$dealiiPetscRealDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir ../../../. && make -j 4 && cd ..
mkdir -p real && cd real && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug -DDEAL_II_DIR=$dealiiPetscRealDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir -DXML_INCLUDE_DIR=$xmlIncludeDir ../../../. && make -j 4 && cd ..
echo -e "${Blu}Building Complex executable in Debug mode...${RCol}"
mkdir -p complex && cd complex && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug -DDEAL_II_DIR=$dealiiPetscComplexDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir ../../../. && make -j 4 && cd ../..
mkdir -p complex && cd complex && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug -DDEAL_II_DIR=$dealiiPetscComplexDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir -DXML_INCLUDE_DIR=$xmlIncludeDir ../../../. && make -j 4 && cd ../..
else
rm -rf build/debug
echo -e "${Blu}Creating build directory...${RCol}"
mkdir -p build && cd build
mkdir -p debug && cd debug
echo -e "${Blu}Building Real executable in Debug mode...${RCol}"
mkdir -p real && cd real && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug -DDEAL_II_DIR=$dealiiPetscRealDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir ../../../. && make -j 4 && cd ..
mkdir -p real && cd real && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug -DDEAL_II_DIR=$dealiiPetscRealDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir -DXML_INCLUDE_DIR=$xmlIncludeDir ../../../. && make -j 4 && cd ..
echo -e "${Blu}Building Complex executable in Debug mode...${RCol}"
mkdir -p complex && cd complex && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug -DDEAL_II_DIR=$dealiiPetscComplexDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir ../../../. && make -j 4 && cd ../..
mkdir -p complex && cd complex && cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Debug -DDEAL_II_DIR=$dealiiPetscComplexDir -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir -DXML_INCLUDE_DIR=$xmlIncludeDir ../../../. && make -j 4 && cd ../..
fi
fi
echo -e "${Blu}Build complete.${RCol}"
8 changes: 7 additions & 1 deletion src/dft/dft.cc
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include <interpolateFieldsFromPreviousMesh.h>
#include <linearAlgebraOperations.h>
#include <vectorUtilities.h>
#include <pseudoConverter.h>


namespace dftfe {
Expand Down Expand Up @@ -278,6 +279,9 @@ namespace dftfe {
{
if(dftParameters::isPseudopotential)
{
//std::string fileName = "sample_text";
pseudoUtils::convert(dftParameters::pseudoPotentialFile);

TimerOutput::Scope scope (computing_timer, "psp init");
pcout<<std::endl<<"Pseuodopotential initalization...."<<std::endl;
initLocalPseudoPotential();
Expand All @@ -301,6 +305,8 @@ namespace dftfe {

forcePtr->initPseudoData();
}

//exit(0);
}


Expand Down Expand Up @@ -370,7 +376,7 @@ namespace dftfe {

//dft init
template<unsigned int FEOrder>
void dftClass<FEOrder>::init (const bool usePreviousGroundStateFields)
void dftClass<FEOrder>::init(const bool usePreviousGroundStateFields)
{

initImageChargesUpdateKPoints();
Expand Down
15 changes: 9 additions & 6 deletions src/dft/initPseudo-OV.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
//

#include "stdafx.h"
#include "linalg.h"
#include "../../include/dftParameters.h"
#include <linalg.h>
#include <dftParameters.h>


template<unsigned int FEOrder>
Expand Down Expand Up @@ -320,7 +320,8 @@ void dftClass<FEOrder>::initNonLocalPseudoPotential_OV()
for(std::set<unsigned int>::iterator it = atomTypes.begin(); it != atomTypes.end(); ++it)
{
char pseudoAtomDataFile[256];
sprintf(pseudoAtomDataFile, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/PseudoAtomDat", DFT_PATH, *it);
//sprintf(pseudoAtomDataFile, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/PseudoAtomDat", DFT_PATH, *it);
sprintf(pseudoAtomDataFile, "/tmp/z%u/PseudoAtomDat",*it);


unsigned int atomicNumber = *it;
Expand Down Expand Up @@ -493,7 +494,8 @@ void dftClass<FEOrder>::initNonLocalPseudoPotential_OV()
//readPseudoDataFileNames >> numProj ;

char projRadialFunctionFileName[512];
sprintf(projRadialFunctionFileName, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/%s", DFT_PATH,*it,tempProjRadialFunctionFileName.c_str());
//sprintf(projRadialFunctionFileName, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/%s", DFT_PATH,*it,tempProjRadialFunctionFileName.c_str());
sprintf(projRadialFunctionFileName, "/tmp/z%u/%s",*it,tempProjRadialFunctionFileName.c_str());

//
// 2D vector to store the radial coordinate and its corresponding
Expand Down Expand Up @@ -542,7 +544,7 @@ void dftClass<FEOrder>::initNonLocalPseudoPotential_OV()
}
}
d_pseudoWaveFunctionSplines.insert(d_pseudoWaveFunctionSplines.end(), atomicSplines.begin(), atomicSplines.end());
//


//
// 2D vector to store the radial coordinate and its corresponding
Expand All @@ -556,7 +558,8 @@ void dftClass<FEOrder>::initNonLocalPseudoPotential_OV()
char denominatorDataFileName[256];
//
readPseudoDataFileNames >> tempDenominatorDataFileName ;
sprintf(denominatorDataFileName, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/%s", DFT_PATH,*it, tempDenominatorDataFileName.c_str());
//sprintf(denominatorDataFileName, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/%s", DFT_PATH,*it, tempDenominatorDataFileName.c_str());
sprintf(denominatorDataFileName, "/tmp/z%u/%s", *it, tempDenominatorDataFileName.c_str());
dftUtils::readFile(projId,denominator,denominatorDataFileName);
denominatorData[(*it)] = denominator ;

Expand Down
5 changes: 3 additions & 2 deletions src/dft/initPseudo.cc
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,10 @@ void dftClass<FEOrder>::initLocalPseudoPotential()
{
char pseudoFile[256];
if (dftParameters::pseudoProjector==2)
sprintf(pseudoFile, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/locPot.dat", DFT_PATH,*it);
//sprintf(pseudoFile, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/locPot.dat", DFT_PATH,*it);
sprintf(pseudoFile,"/tmp/z%u/locPot.dat",*it);
else
sprintf(pseudoFile, "%s/data/electronicStructure/pseudoPotential/z%u/pseudoAtomData/locPot.dat", DFT_PATH,*it);
sprintf(pseudoFile,"%s/data/electronicStructure/pseudoPotential/z%u/pseudoAtomData/locPot.dat", DFT_PATH,*it);

if (!dftParameters::reproducible_output)
pcout<<"Reading Local Pseudo-potential data from: " <<pseudoFile<<std::endl;
Expand Down
10 changes: 5 additions & 5 deletions src/dft/initRho.cc
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ void dftClass<FEOrder>::initRho()

rhoInVals.push_back(std::map<dealii::CellId, std::vector<double> >());
rhoInValues=&(rhoInVals.back());
if (dftParameters::spinPolarized==1)
if(dftParameters::spinPolarized==1)
{
rhoInValsSpinPolarized.push_back(std::map<dealii::CellId, std::vector<double> >());
rhoInValuesSpinPolarized=&(rhoInValsSpinPolarized.back());
Expand Down Expand Up @@ -264,11 +264,11 @@ void dftClass<FEOrder>::initRho()
if(dftParameters::spinPolarized==1)
{
gradRhoInValuesSpinPolarizedPtr[6*q+0] =( 0.5 + dftParameters::start_magnetization)*signRho*gradRhoXValueAtQuadPt;
gradRhoInValuesSpinPolarizedPtr[6*q+1] = ( 0.5 + dftParameters::start_magnetization)*signRho*gradRhoYValueAtQuadPt ;
gradRhoInValuesSpinPolarizedPtr[6*q+2] = ( 0.5 + dftParameters::start_magnetization)*signRho*gradRhoZValueAtQuadPt ;
gradRhoInValuesSpinPolarizedPtr[6*q+1] = ( 0.5 + dftParameters::start_magnetization)*signRho*gradRhoYValueAtQuadPt;
gradRhoInValuesSpinPolarizedPtr[6*q+2] = ( 0.5 + dftParameters::start_magnetization)*signRho*gradRhoZValueAtQuadPt;
gradRhoInValuesSpinPolarizedPtr[6*q+3] =( 0.5 - dftParameters::start_magnetization)*signRho*gradRhoXValueAtQuadPt;
gradRhoInValuesSpinPolarizedPtr[6*q+4] = ( 0.5 - dftParameters::start_magnetization)*signRho*gradRhoYValueAtQuadPt ;
gradRhoInValuesSpinPolarizedPtr[6*q+5] = ( 0.5 - dftParameters::start_magnetization)*signRho*gradRhoZValueAtQuadPt ;
gradRhoInValuesSpinPolarizedPtr[6*q+4] = ( 0.5 - dftParameters::start_magnetization)*signRho*gradRhoYValueAtQuadPt;
gradRhoInValuesSpinPolarizedPtr[6*q+5] = ( 0.5 - dftParameters::start_magnetization)*signRho*gradRhoZValueAtQuadPt;
}
}
}
Expand Down
5 changes: 3 additions & 2 deletions src/force/initPseudoForce.cc
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,10 @@ void forceClass<FEOrder>::initLocalPseudoPotentialForce()
{
char pseudoFile[256];
if (dftParameters::pseudoProjector==2)
sprintf(pseudoFile, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/locPot.dat", DFT_PATH,*it);
//sprintf(pseudoFile, "%s/data/electronicStructure/pseudoPotential/z%u/oncv/pseudoAtomData/locPot.dat", DFT_PATH,*it);
sprintf(pseudoFile,"/tmp/z%u/pseudoAtomData/locPot.dat",*it);
else
sprintf(pseudoFile, "%s/data/electronicStructure/pseudoPotential/z%u/pseudoAtomData/locPot.dat", DFT_PATH,*it);
sprintf(pseudoFile, "%s/data/electronicStructure/pseudoPotential/z%u/pseudoAtomData/locPot.dat", DFT_PATH,*it);
//pcout<<"Reading Local Pseudo-potential data from: " <<pseudoFile<<std::endl;
dftUtils::readFile(2, pseudoPotentialData[*it], pseudoFile);
unsigned int numRows = pseudoPotentialData[*it].size()-1;
Expand Down
2 changes: 2 additions & 0 deletions src/linAlg/linearAlgebraOperationsOpt.cc
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ namespace dftfe{
&iwork[0],
&liwork,
&info);

AssertThrow(info==0,dealii::ExcMessage("Error in zheevr"));
}


Expand Down
Loading

0 comments on commit 327606d

Please sign in to comment.