1 #ifndef __DMRG_MISCTOOLS_HPP__ 2 #define __DMRG_MISCTOOLS_HPP__ 19 #if defined(DMRG_KRON_TIMINGS) 20 #include <petsctime.h> 21 #define TIMINGS_NEWLINE() \ 22 if(!mpi_rank) printf("\n"); 23 #define FUNCTION_TIMINGS_BEGIN() \ 24 PetscLogDouble tstart = 0.0, tend = 0.0; \ 25 if(!mpi_rank) PetscTime(&tstart); 26 #define FUNCTION_TIMINGS_END() \ 29 printf(" %-28s %-12.6f s\n", __FUNCTION__, tend - tstart); \ 31 #define FUNCTION_TIMINGS_PRINT_SPACE() if(!mpi_rank) printf("\n"); 32 #define INTERVAL_TIMINGS_SETUP() PetscLogDouble itstart = 0.0, itend = 0.0; 33 #define INTERVAL_TIMINGS_BEGIN() if(!mpi_rank) PetscTime(&itstart); 34 #define INTERVAL_TIMINGS_END(LABEL) \ 37 printf(" %-28s %-12.6f s\n", LABEL, itend - itstart); \ 39 #define ACCUM_TIMINGS_SETUP(LABEL) PetscLogDouble ts_##LABEL = 0.0, te_##LABEL = 0.0, tot_##LABEL = 0.0; 40 #define ACCUM_TIMINGS_BEGIN(LABEL) if(!mpi_rank){ PetscTime(&ts_##LABEL); } 41 #define ACCUM_TIMINGS_END(LABEL) if(!mpi_rank){ PetscTime(&te_##LABEL); \ 42 tot_##LABEL += (te_##LABEL - ts_##LABEL); } 43 #define ACCUM_TIMINGS_PRINT(LABEL, TEXT) \ 45 printf(" %-28s %-12.6f s\n", TEXT, tot_##LABEL); \ 48 #define TIMINGS_NEWLINE() 49 #define FUNCTION_TIMINGS_BEGIN() 50 #define FUNCTION_TIMINGS_END() 51 #define FUNCTION_TIMINGS_PRINT_SPACE() 52 #define INTERVAL_TIMINGS_SETUP() 53 #define INTERVAL_TIMINGS_BEGIN() 54 #define INTERVAL_TIMINGS_END(LABEL) 55 #define ACCUM_TIMINGS_SETUP(LABEL) 56 #define ACCUM_TIMINGS_BEGIN(LABEL) 57 #define ACCUM_TIMINGS_END(LABEL) 58 #define ACCUM_TIMINGS_PRINT(LABEL, TEXT) 65 PetscErrorCode PreSplitOwnership(
const MPI_Comm comm,
const PetscInt N, PetscInt& locrows, PetscInt& Istart);
67 PetscErrorCode SplitOwnership(
68 const PetscMPIInt& rank,
69 const PetscMPIInt& nprocs ,
78 template<
typename T >
80 const MPI_Comm& mpi_comm,
81 const std::string& filename,
82 std::map< std::string, T >& infomap
87 ierr = MPI_Comm_rank(mpi_comm, &mpi_rank); CHKERRQ(ierr);
91 std::string opt_string;
92 PetscInt opt_string_length;
95 ierr = PetscTestFile(filename.c_str(),
'r', &flg); CHKERRQ(ierr);
96 if(!flg) SETERRQ1(PETSC_COMM_SELF,1,
"File %s unaccessible.", filename.c_str());
97 std::ifstream infofile(filename.c_str());
98 opt_string = std::string(
99 (std::istreambuf_iterator<char>(infofile)),
100 std::istreambuf_iterator<char>());
102 opt_string_length = opt_string.size();
105 ierr = MPI_Bcast(&opt_string_length, 1, MPIU_INT, 0, mpi_comm); CHKERRQ(ierr);
106 opt_string.resize(opt_string_length);
107 ierr = MPI_Bcast(&opt_string[0], opt_string_length, MPI_CHAR, 0, mpi_comm); CHKERRQ(ierr);
109 std::stringstream ss(opt_string);
112 while(std::getline(ss, line)) {
115 std::istringstream line_ss(line);
116 line_ss >> key >> val;
133 const std::string& filename
140 #endif // __DMRG_MISCTOOLS_HPP__