/* DFT++ is a density functional package developed by the research group of Professor Tomas Arias Copyright 1996-2003 Sohrab Ismail-Beigi This file is part of DFT++. DFT++ is free software; you can redistribute it and/or modify it 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. DFT++ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with DFT++; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Please see the file CREDITS for a list of authors. For academic users, we request that publications using results obtained with this software reference "New algebraic formulation of density functional calculation," by Sohrab Ismail-Beigi and T.A. Arias, Computer Physics Communications 128:1-2, 1-45 (June 2000). and, if using the wavelet basis, further reference "Multiresolution analysis of electronic structure: semicardinal and wavelet bases," T.A. Arias, Reviews of Modern Physics 71:1, 267-311 (January 1999). and "Robust ab initio calculation of condensed matter: transparent convergence through semicardinal multiresolution analysis,'' I.P. Daykov, T.A. Arias, and Torkel D. Engeness, Physical Review Letters, 90:21, 216402 (May 2003). For your convenience, preprints of the above articles may be obtained from http://arXiv.org/abs/cond-mat/9909130, 9805262, and 0204411, respectively. */ /* * Sohrab Ismail-Beigi, Aug. 29 1997 * * Dump the electronic variables to disk files. * */ /* $Id: dump.cpp,v 1.10.2.5 2003/05/29 18:54:22 ivan Exp $ */ #include #include "header.h" /* * Dumps the specified electronic variables to disk and time stamps them. */ void dump_and_stamp_variables(Everything &everything) { Elecinfo &elecinfo = everything.elecinfo; Elecvars &elecvars = everything.elecvars; time_t timenow; struct tm *mytm; char stamp[DFT_MSG_LEN],fname[DFT_FILENAME_LEN]; /* Set up date/time stamp */ timenow = time(0); mytm = localtime(&timenow); sprintf(stamp,"%d.%d.%d-%d-%d", mytm->tm_mon+1,mytm->tm_mday, mytm->tm_hour,mytm->tm_min,mytm->tm_sec); /* Dump the data! */ if (*elecvars.C) { sprintf(fname,"C.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); write_ColumnBundle_array(fname,elecinfo.nstates,elecvars.C); dft_log("done.\n"); dft_log_flush(); } if (elecvars.n.data.d) { sprintf(fname,"n.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); elecvars.n.write(fname); dft_log("done.\n"); dft_log_flush(); } if (elecvars.n_up.data.d) { sprintf(fname,"n_up.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); elecvars.n_up.write(fname); dft_log("done.\n"); dft_log_flush(); } if (elecvars.n_dn.data.d) { sprintf(fname,"n_dn.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); elecvars.n_dn.write(fname); dft_log("done.\n"); dft_log_flush(); } if (elecvars.d.data.d) { sprintf(fname,"d.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); elecvars.d.write(fname); dft_log("done.\n"); dft_log_flush(); } if (elecvars.Vlocpot.data.d) { sprintf(fname,"Vlocps.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); elecvars.Vlocpot.write(fname); dft_log("done.\n"); dft_log_flush(); } if (elecvars.Vscloc.data.d) { sprintf(fname,"Vscloc.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); elecvars.Vscloc.write(fname); dft_log("done.\n"); dft_log_flush(); } if (elecvars.Vscloc_up.data.d) { sprintf(fname,"Vscloc_up.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); elecvars.Vscloc_up.write(fname); dft_log("done.\n"); dft_log_flush(); } if (elecvars.Vscloc_dn.data.d) { sprintf(fname,"Vscloc_dn.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); elecvars.Vscloc_dn.write(fname); dft_log("done.\n"); dft_log_flush(); } /* if (elecvars.Hsub_evecs) { sprintf(fname,"Hsub_evecs.%s",stamp); dft_log("Dumping '%s'...",fname); dft_log_flush(); write_matrix_array(fname,elecinfo.nstates,elecvars.Hsub_evecs); dft_log("done.\n"); dft_log_flush(); } if (elecinfo.calc_fillings) { sprintf(fname,"F.%s",stamp); Output fillingsfile(fname); elecinfo.print_fillings(&fillingsfile,dft_global_log); } */ if (elecinfo.calc_fillings){ sprintf(fname,"F.%s",stamp); dft_log("Dumping '%s'...",fname); Output fillingsfile(fname); for (int q=0; q < elecinfo.nstates; q++) elecvars.states[q].F.print_real(&fillingsfile); dft_log("done.\n"); } /* ipd 09/09/02: this one looks buggy if (everything.cntrl.band_structure_flag == TRUE){ sprintf(fname,"eigenvals.%s",stamp); dft_log("Dumping '%s'...",fname); Output eigenvals(fname); for (int q=0; q < elecinfo.nstates; q++) { for (int b=0; b < elecinfo.nbands; b++) eigenvals.printf("%18.10le ", everything.elecvars.states[q].Hsub_eigs[b]); eigenvals.printf("\n"); } dft_log("done.\n"); dft_log_flush(); } */ }