testWavefunction.C 3.26 KB
Newer Older
Francois Gygi committed
1 2
////////////////////////////////////////////////////////////////////////////////
//
Francois Gygi committed
3 4 5 6
// Copyright (c) 2008 The Regents of the University of California
//
// This file is part of Qbox
//
Francois Gygi committed
7 8
// Qbox is distributed under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 2 of
Francois Gygi committed
9 10 11 12 13 14
// 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/>.
//
////////////////////////////////////////////////////////////////////////////////
//
Francois Gygi committed
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
// testWavefunction.C
//
////////////////////////////////////////////////////////////////////////////////

#include "Context.h"
#include "Wavefunction.h"
#include "SlaterDet.h"
#include "Timer.h"

#include <iostream>
#include <cassert>
using namespace std;

#ifdef USE_MPI
#include <mpi.h>
#endif

int main(int argc, char **argv)
{
#if USE_MPI
  MPI_Init(&argc,&argv);
#endif
  {
38
    // use:
Francois Gygi committed
39 40 41 42 43 44 45 46 47 48 49 50
    // testWavefunction a0 a1 a2 b0 b1 b2 c0 c1 c2 ecut nel nempty nspin nkp
    assert(argc==15);
    D3vector a(atof(argv[1]),atof(argv[2]),atof(argv[3]));
    D3vector b(atof(argv[4]),atof(argv[5]),atof(argv[6]));
    D3vector c(atof(argv[7]),atof(argv[8]),atof(argv[9]));
    UnitCell cell(a,b,c);
    cout << " volume: " << cell.volume() << endl;
    double ecut = atof(argv[10]);
    int nel = atoi(argv[11]);
    int nempty = atoi(argv[12]);
    int nspin = atoi(argv[13]);
    int nkp = atoi(argv[14]);
51

52
    Context ctxt(MPI_COMM_WORLD);
53

Francois Gygi committed
54 55
    Wavefunction wf(ctxt);
    Timer tm;
56

Francois Gygi committed
57 58 59
    tm.reset(); tm.start();
    wf.resize(cell,cell,ecut);
    tm.stop();
60
    cout << " wf.resize: CPU/Real: "
Francois Gygi committed
61 62 63 64 65
         << tm.cpu() << " / " << tm.real() << endl;

    tm.reset(); tm.start();
    wf.set_nel(nel);
    tm.stop();
66
    cout << " wf.set_nel: CPU/Real: "
Francois Gygi committed
67
         << tm.cpu() << " / " << tm.real() << endl;
68

Francois Gygi committed
69 70 71
    tm.reset(); tm.start();
    wf.set_nspin(nspin);
    tm.stop();
72
    cout << " wf.set_nspin: CPU/Real: "
Francois Gygi committed
73
         << tm.cpu() << " / " << tm.real() << endl;
74

Francois Gygi committed
75 76 77 78
    for ( int ikp = 0; ikp < nkp-1; ikp++ )
    {
      wf.add_kpoint(D3vector((0.5*(ikp+1))/(nkp-1),0,0),1.0);
    }
79

Francois Gygi committed
80 81 82 83
    for ( int ispin = 0; ispin < wf.nspin(); ispin++ )
    {
      for ( int ikp = 0; ikp < wf.nkp(); ikp++ )
      {
84
        if ( wf.sd(ispin,ikp) != 0 )
Francois Gygi committed
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
        {
          cout << "wf.sd(ispin=" << ispin << ",ikp=" << ikp << "): "
               << wf.sd(ispin,ikp)->c().m() << "x"
               << wf.sd(ispin,ikp)->c().n() << endl;
          cout << ctxt.mype() << ":"
               << " sdcontext[" << ispin << "][" << ikp << "]: "
               << wf.sd(ispin,ikp)->context();
        }
      }
    }

    tm.reset();
    tm.start();
    wf.randomize(0.1);
    tm.stop();
100
    cout << " wf.randomize: CPU/Real: "
Francois Gygi committed
101 102 103 104 105
         << tm.cpu() << " / " << tm.real() << endl;

    tm.reset();
    tm.start();
    wf.gram();
106
    cout << " wf.gram: CPU/Real: "
Francois Gygi committed
107
         << tm.cpu() << " / " << tm.real() << endl;
108

Francois Gygi committed
109 110 111 112
    cout << " copy constructor...";
    Wavefunction wfm(wf);
    cout << "done" << endl;
    wfm.gram();
113

Francois Gygi committed
114 115 116 117 118 119 120 121
#if 0
    wf.randomize(0.1);
    wf.update_occ(false);
    for ( int ikp = 0; ikp < wf.nkp(); ikp++ )
    {
      if ( wf.sd[ikp] != 0 )
        cout << " ekin[" << ikp << "]: " << wf.sd[ikp]->ekin() << endl;
    }
122

Francois Gygi committed
123 124 125 126 127 128 129

#endif
  }
#if USE_MPI
  MPI_Finalize();
#endif
}