Commit 64997aeb by Francois Gygi

Merge branch 'develop'

parents 45e7de9c 86cd05fb
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// AngleConstraint.C
// AngleConstraint.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// AngleConstraint.h
// AngleConstraint.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// AtomicExtForce.C
// AtomicExtForce.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// AtomicExtForce.h
// AtomicExtForce.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// Basis.h
// Basis.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// BasisMapping.C
// BasisMapping.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// BasisMapping.h
// BasisMapping.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// Constraint.C
// Constraint.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// Constraint.h
// Constraint.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// DistanceConstraint.C
// DistanceConstraint.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// DistanceConstraint.h
// DistanceConstraint.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// ExtForce.C
// ExtForce.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// ExtForce.h
// ExtForce.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// GlobalExtForce.C
// GlobalExtForce.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// GlobalExtForce.h
// GlobalExtForce.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -39,6 +39,7 @@ class KpointCmd : public Cmd
" syntax:\n\n"
" kpoint add kx ky kz weight\n"
" kpoint delete kx ky kz \n"
" kpoint move kx ky kz new_kx new_ky new_kz\n"
" kpoint list\n\n";
}
......@@ -79,6 +80,22 @@ class KpointCmd : public Cmd
double kz = atof(argv[4]);
s->wf.del_kpoint(D3vector(kx,ky,kz));
}
else if ( subcmd == "move" )
{
if ( argc != 8 )
{
if ( onpe0 )
cout << help_msg();
return 1;
}
double kx = atof(argv[2]);
double ky = atof(argv[3]);
double kz = atof(argv[4]);
double newkx = atof(argv[5]);
double newky = atof(argv[6]);
double newkz = atof(argv[7]);
s->wf.move_kpoint(D3vector(kx,ky,kz),D3vector(newkx,newky,newkz));
}
else if ( subcmd == "list" )
{
if ( argc != 2 )
......@@ -89,7 +106,7 @@ class KpointCmd : public Cmd
}
if ( onpe0 )
{
cout << " <-- kpoint list: reciprocal lattice coordinates" << endl;
cout << " <!-- kpoint list: reciprocal lattice coordinates" << endl;
for ( int ikp = 0; ikp < s->wf.nkp(); ikp++ )
{
cout << " "
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// PairExtForce.C
// PairExtForce.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// PairExtForce.h
// PairExtForce.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// PositionConstraint.C
// PositionConstraint.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// PositionConstraint.h
// PositionConstraint.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -41,7 +41,7 @@ class RseedCmd : public Cmd
return
"\n rseed\n\n"
" syntax: rseed [seed_value]\n\n"
" The rseed command initializes the random number generator."
" The rseed command initializes the random number generator.\n"
" If no argument is given, the time() function is used as a seed value"
"\n\n";
}
......
......@@ -43,7 +43,7 @@ class ScfTol : public Var
}
double v = atof(argv[1]);
if ( v <= 0.0 )
if ( v < 0.0 )
{
if ( ui->onpe0() )
cout << " scf_tol must be non-negative" << endl;
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// Timer.h
// Timer.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// TorsionConstraint.C
// TorsionConstraint.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// TorsionConstraint.h
// TorsionConstraint.h
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -18,6 +18,7 @@
#include "Wavefunction.h"
#include "SlaterDet.h"
#include "FourierTransform.h"
#include "jacobi.h"
#include "SharedFilePtr.h"
#include <vector>
......@@ -357,7 +358,7 @@ void Wavefunction::add_kpoint(D3vector kpoint, double weight)
{
if ( ctxt_.onpe0() )
cout << " Wavefunction::add_kpoint: kpoint already defined"
<< endl;
<< endl;
return;
}
}
......@@ -426,6 +427,108 @@ void Wavefunction::del_kpoint(D3vector kpoint)
}
////////////////////////////////////////////////////////////////////////////////
void Wavefunction::move_kpoint(D3vector kpoint, D3vector newkpoint)
{
bool found = false;
int ikp = 0;
while ( !found && ikp < kpoint_.size() )
{
if ( length(kpoint_[ikp] - kpoint) < 1.e-6 )
{
found = true;
}
else
{
ikp++;
}
}
if ( !found )
{
if ( ctxt_.onpe0() )
cout << " Wavefunction::move_kpoint: no such kpoint"
<< endl;
return;
}
// check if newkpoint coincides with existing kpoint
for ( int i = 0; i < kpoint_.size(); i++ )
{
if ( length(newkpoint - kpoint_[i]) < 1.e-6 )
{
if ( ctxt_.onpe0() )
cout << " Wavefunction::move_kpoint: kpoint already defined "
<< "at newkpoint position"
<< endl;
return;
}
}
// copy wavefunctions from old SlaterDet at kpoint to new SlaterDet
// at newkpoint
for ( int ispin = 0; ispin < nspin_; ispin++ )
{
// create new SlaterDet at newkpoint
SlaterDet *sd = sd_[ispin][ikp];
SlaterDet *sdn = new SlaterDet(*sdcontext_,newkpoint);
sdn->resize(cell_,refcell_,ecut_,nst_[ispin]);
sdn->init();
// copy wave functions from old to new SlaterDet
const Basis& basis = sd_[ispin][ikp]->basis();
const Basis& newbasis = sdn->basis();
// transform all states to real space and interpolate
int np0 = max(basis.np(0),newbasis.np(0));
int np1 = max(basis.np(1),newbasis.np(1));
int np2 = max(basis.np(2),newbasis.np(2));
FourierTransform ft1(basis,np0,np1,np2);
FourierTransform ft2(newbasis,np0,np1,np2);
// allocate real-space grid
valarray<complex<double> > tmpr(ft1.np012loc());
for ( int n = 0; n < sd->nstloc(); n++ )
{
for ( int i = 0; i < tmpr.size(); i++ )
tmpr[i] = 0.0;
ComplexMatrix& c = sd->c();
ComplexMatrix& cn = sdn->c();
ft1.backward(c.valptr(n*c.mloc()),&tmpr[0]);
// if the new kpoint is Gamma, remove the phase of the wavefunction
// using the phase of the first element of the array
if ( newbasis.real() )
{
double arg0 = arg(tmpr[0]);
// broadcast argument found on task 0
MPI_Bcast(&arg0,1,MPI_DOUBLE,0,basis.comm());
complex<double> z = polar(1.0,-arg0);
for ( int i = 0; i < tmpr.size(); i++ )
tmpr[i] *= z;
}
ft2.forward(&tmpr[0], cn.valptr(n*cn.mloc()));
}
// delete old SlaterDet
delete sd_[ispin][ikp];
// reassign pointer
sd_[ispin][ikp] = sdn;
}
kpoint_[ikp] = newkpoint;
if ( nspin_ == 1 )
{
sd_[0][ikp]->update_occ(nel_,nspin_);
}
else if ( nspin_ == 2 )
{
const int nocc_up = (nel_+1)/2+deltaspin_;
const int nocc_dn = nel_/2 - deltaspin_;
sd_[0][ikp]->update_occ(nocc_up,nspin_);
sd_[1][ikp]->update_occ(nocc_dn,nspin_);
}
else
{
// incorrect value of nspin_
assert(false);
}
}
////////////////////////////////////////////////////////////////////////////////
void Wavefunction::randomize(double amplitude)
{
for ( int ispin = 0; ispin < nspin_; ispin++ )
......
......@@ -101,6 +101,7 @@ class Wavefunction
void set_nrowmax(int n);
void add_kpoint(D3vector kpoint, double weight);
void del_kpoint(D3vector kpoint);
void move_kpoint(D3vector kpoint, D3vector new_kpoint);
void randomize(double amplitude);
......
......@@ -12,9 +12,11 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// BLAS Header file
// blas.h
//
////////////////////////////////////////////////////////////////////////////////
//
// BLAS Header file
#ifndef BLAS_H
#define BLAS_H
......
......@@ -10,6 +10,12 @@
// See the file COPYING in the root directory of this distribution
// or <http://www.gnu.org/licenses/>.
//
////////////////////////////////////////////////////////////////////////////////
//
// jacobi.h
//
////////////////////////////////////////////////////////////////////////////////
#include <vector>
int jacobi(int maxsweep, double tol, DoubleMatrix& a, DoubleMatrix& u,
std::vector<double>& e);
......@@ -10,6 +10,12 @@
// See the file COPYING in the root directory of this distribution
// or <http://www.gnu.org/licenses/>.
//
////////////////////////////////////////////////////////////////////////////////
//
// jade.h
//
////////////////////////////////////////////////////////////////////////////////
#include <vector>
int jade(int maxsweep, double tol, std::vector<DoubleMatrix*> a,
DoubleMatrix& u, std::vector<std::vector<double> > &adiag);
--------------------------------------------------------------------------------
rel1_63_9
--------------------------------------------------------------------------------
ee9efe5 Fix test for negative scf_tol value
f47d0c1 New implementation of kpgen
86be185 Added kpoint move functionality
dd1a11b Merge branch 'upf2' into develop
45aea94 Added NLCC functionality
ac8d7e6 Implemented NL potential in UPF 2 format
ff8a484 Implemented UPF 2 format for SL potentials
feb88ae Fix end of line in rseed help msg.
6309a0a Removed enthalpy_int.plt
e19b136 Add util/enthalpy.plt script
8d051ce Added -range option to cell.plt and econste_cmp.plt
f030ffc Fix file headers
--------------------------------------------------------------------------------
rel1_63_8
--------------------------------------------------------------------------------
4ee30f9 Fix discontinuity in torsion constraint function
d2a3c52 Removed $Id strings
--------------------------------------------------------------------------------
rel1_63_7
--------------------------------------------------------------------------------
r1920: Modified UserInterface.C to use C library, fsync()
......
......@@ -12,7 +12,7 @@
//
////////////////////////////////////////////////////////////////////////////////
//
// testContext.c
// testContext.C
//
////////////////////////////////////////////////////////////////////////////////
......
......@@ -10,8 +10,11 @@
// See the file COPYING in the root directory of this distribution
// or <http://www.gnu.org/licenses/>.
//
////////////////////////////////////////////////////////////////////////////////
//
// testMatrix.C
//
// test Matrix
////////////////////////////////////////////////////////////////////////////////
//
// multiply a matrix a(m,k) by b(k,n) to get c(m,n)
// using blocks of size (mb,nb) on a process grid (nprow,npcol)
......
......@@ -10,7 +10,13 @@
// See the file COPYING in the root directory of this distribution
// or <http://www.gnu.org/licenses/>.
//
// test the Jacobi implementation of the Matrix class
////////////////////////////////////////////////////////////////////////////////
//
// testjacobi.C
//
////////////////////////////////////////////////////////////////////////////////
//
// Test the Jacobi implementation of the Matrix class
//
// use: testjacobi nprow npcol n nb
//
......
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2008 The Regents of the University of California
//
// This file is part of Qbox
//
// Qbox is distributed under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 2 of
// the License, or (at your option) any later version.
// See the file COPYING in the root directory of this distribution
// or <http://www.gnu.org/licenses/>.
//
////////////////////////////////////////////////////////////////////////////////
//
// uuid_str.C
//
////////////////////////////////////////////////////////////////////////////////
#if USE_UUID
#include <uuid/uuid.h>
#include "uuid_str.h"
......
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2008 The Regents of the University of California
//
// This file is part of Qbox
//
// Qbox is distributed under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 2 of
// the License, or (at your option) any later version.
// See the file COPYING in the root directory of this distribution
// or <http://www.gnu.org/licenses/>.
//
////////////////////////////////////////////////////////////////////////////////
//
// uuid_str.h
//
////////////////////////////////////////////////////////////////////////////////
#include <string>
#if USE_UUID
std::string uuid_str(void);
......
#!/bin/bash
# cell.plt: plot cell parameters during an MD simulation
if [ $1 == "-range" ]
then
range=$2
shift 2
fi
gnuplot -persist <<EOF
plot "<grep -h -A3 '<unit_cell' $* | grep a=" u 2 w l, \
plot $range "<grep -h -A3 '<unit_cell' $* | grep a=" u 2 w l, \
"<grep -h -A3 '<unit_cell' $* | grep a=" u 3 w l, \
"<grep -h -A3 '<unit_cell' $* | grep a=" u 4 w l, \
"<grep -h -A3 '<unit_cell' $* | grep b=" u 2 w l, \
......
#!/bin/bash
# econste_cmp.plt: compare <econst> and <etotal> in two MD simulations
# use: econste_cmp.plt mdrun1.r mdrun2.r
if [ $1 == "-range" ]
then
range=$2
shift 2
fi
gnuplot -persist <<EOF
p "<grep -h econst $1" u 2 w l, "<grep -h '<etotal>' $1" u 2 w l, \
p $range "<grep -h econst $1" u 2 w l, "<grep -h '<etotal>' $1" u 2 w l, \
"<grep -h econst $2" u 2 w l, "<grep -h '<etotal>' $2" u 2 w l
EOF
......@@ -5,5 +5,5 @@ then
shift 2
fi
gnuplot -persist <<EOF
plot $range "<grep -h enthalpy $*" u 2 w l
plot $range "<grep -h '<enthalpy>' $*" u 2 w l
EOF
kpgen: kpgen.C D3vector.h
kpgen: kpgen.cpp D3vector.h
g++ -o $@ $^
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment