Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,16 @@ intel-mkl-src = {version = "0.8.1", features = ["mkl-dynamic-lp64-iomp"]}
#openblas-src = "0.10.8"
# For python interface
pyo3 = {version = "0.21.2", features = ["extension-module"], optional = true}
# Parallelism
rayon = "1.10.0"
# Mersenne Twister
rand_mt = {version = "4.2.2", features = ["rand_core"]}
# Progress bar
indicatif = "0.17.8"
# Colored terminal text
colored = "3.0.0"
# Selectively move into closure
closure = "0.3.0"

[dependencies.rand]
version = "0.8.5"
Expand Down
18 changes: 10 additions & 8 deletions src/bin/boboche2000.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,26 +84,28 @@ fn main() {
hopping_bitmask: &bitmask,
clean_update_frequency: CLEAN_UPDATE_FREQUENCY,
nmcwarmup: NMCWARMUP,
nwarmupchains: 1,
nmcsample: NMCSAMP,
tolerance_sherman_morrison: TOLERENCE_SHERMAN_MORRISSON,
tolerance_singularity: TOLERANCE_SINGULARITY,
pair_wavefunction: false,
_opt_iter: 0,
};
log_system_parameters(&sys);

let mut otilde: Vec<f64> = vec![0.0; (NFIJ + NVIJ + NGI) * NMCSAMP];
let mut expvalo: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let mut expval_ho: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let mut visited: Vec<usize> = vec![0; NMCSAMP];
let otilde: Vec<f64> = vec![0.0; (NFIJ + NVIJ + NGI) * NMCSAMP];
let expvalo: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let expval_ho: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let visited: Vec<usize> = vec![0; NMCSAMP];
let mut der = DerivativeOperator {
o_tilde: &mut otilde,
expval_o: &mut expvalo,
ho: &mut expval_ho,
o_tilde: otilde.into_boxed_slice(),
expval_o: expvalo.into_boxed_slice(),
ho: expval_ho.into_boxed_slice(),
n: (NFIJ + NVIJ + NGI) as i32,
nsamp: NMCSAMP as f64,
nsamp_int: 1,
mu: -1,
visited: &mut visited,
visited: visited.into_boxed_slice(),
pfaff_off: NGI + NVIJ,
jas_off: NGI,
epsilon: 0.0,
Expand Down
23 changes: 13 additions & 10 deletions src/bin/dvmc_fastupdate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const NELEC: usize = SIZE;
const NMCSAMP: usize = 10_000;
const NBOOTSTRAP: usize = 1;
const NMCWARMUP: usize = 1000;
const NWARMUPCHAINS: usize = 1;
const MCSAMPLE_INTERVAL: usize = 1;
const _NTHREADS: usize = 6;
const CLEAN_UPDATE_FREQUENCY: usize = 2;
Expand Down Expand Up @@ -160,10 +161,12 @@ fn main() {
nmcsample: NMCSAMP,
nbootstrap: NBOOTSTRAP,
nmcwarmup: NMCWARMUP,
nwarmupchains: NWARMUPCHAINS,
mcsample_interval: MCSAMPLE_INTERVAL,
tolerance_sherman_morrison: TOLERENCE_SHERMAN_MORRISSON,
tolerance_singularity: TOLERENCE_SINGULARITY,
pair_wavefunction: false,
_opt_iter: 0,
};

let mut rng = Mt64::new(SEED);
Expand Down Expand Up @@ -270,19 +273,19 @@ fn main() {
tmp
};

let mut otilde: Vec<f64> = vec![0.0; (NFIJ + NVIJ + NGI) * NMCSAMP];
let mut expvalo: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let mut expval_ho: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let mut visited: Vec<usize> = vec![0; NMCSAMP];
let otilde: Vec<f64> = vec![0.0; (NFIJ + NVIJ + NGI) * NMCSAMP];
let expvalo: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let expval_ho: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let visited: Vec<usize> = vec![0; NMCSAMP];
let mut derivative = DerivativeOperator {
o_tilde: &mut otilde,
expval_o: &mut expvalo,
ho: &mut expval_ho,
o_tilde: otilde.into_boxed_slice(),
expval_o: expvalo.into_boxed_slice(),
ho: expval_ho.into_boxed_slice(),
n: (NFIJ + NVIJ + NGI) as i32,
nsamp: NMCSAMP as f64,
nsamp_int: MCSAMPLE_INTERVAL,
mu: -1,
visited: &mut visited,
visited: visited.into_boxed_slice(),
pfaff_off: NGI + NVIJ,
jas_off: NGI,
epsilon: EPSILON_SPREAD,
Expand Down Expand Up @@ -320,8 +323,8 @@ fn main() {
unsafe {
let incx = 1;
let incy = 1;
daxpy(derivative.n, -mean_energy, derivative.expval_o, incx, derivative.ho, incy);
dcopy(derivative.n, derivative.ho, incx, &mut b, incy);
daxpy(derivative.n, -mean_energy, &derivative.expval_o, incx, &mut derivative.ho, incy);
dcopy(derivative.n, &derivative.ho, incx, &mut b, incy);
}
spread_eigenvalues(&mut derivative);
exact_overlap_inverse(&derivative, &mut b, EPSILON_CG, NPARAMS as i32, PARAMTHRESHOLD);
Expand Down
46 changes: 25 additions & 21 deletions src/bin/dvmc_pairwf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const NELEC: usize = SIZE;
const NMCSAMP: usize = 500;
const NBOOTSTRAP: usize = 1;
const NMCWARMUP: usize = 1000;
const NWARMUPCHAINS: usize = 1;
const MCSAMPLE_INTERVAL: usize = 1;
const _NTHREADS: usize = 1;
const CLEAN_UPDATE_FREQUENCY: usize = 32;
Expand Down Expand Up @@ -87,7 +88,7 @@ fn _save_otilde(fp: &mut File, der: &DerivativeOperator) {
let mut c = vec![0.0; (der.n * der.n) as usize];
println!("dim = {}", der.n * der.n);
unsafe {
dgemm(b"N"[0], b"T"[0], der.n, der.n, der.mu, 1.0, der.o_tilde, der.n, der.o_tilde, der.n, 0.0, &mut c, der.n);
dgemm(b"N"[0], b"T"[0], der.n, der.n, der.mu, 1.0, &der.o_tilde, der.n, &der.o_tilde, der.n, 0.0, &mut c, der.n);
}
let mut outstr = "".to_owned();
outstr.push_str(&format!("<O_kO_m> = "));
Expand Down Expand Up @@ -192,7 +193,7 @@ fn main() {
// Initialize logger
env_logger::init();
let bitmask = generate_bitmask(&HOPPINGS, SIZE);
let system_params = SysParams {
let mut system_params = SysParams {
size: SIZE,
nelec: NELEC,
array_size: (SIZE + 7) / 8,
Expand All @@ -207,10 +208,12 @@ fn main() {
nmcsample: NMCSAMP,
nbootstrap: NBOOTSTRAP,
nmcwarmup: NMCWARMUP,
nwarmupchains: NWARMUPCHAINS,
mcsample_interval: MCSAMPLE_INTERVAL,
tolerance_sherman_morrison: TOLERENCE_SHERMAN_MORRISSON,
tolerance_singularity: TOLERENCE_SINGULARITY,
pair_wavefunction: true,
_opt_iter: 0,
};

let mut rng = Mt64::new(SEED);
Expand Down Expand Up @@ -253,42 +256,42 @@ fn main() {
tmp
};

let mut otilde: Vec<f64> = vec![0.0; (4*NFIJ + NVIJ + NGI) * (NMCSAMP + 1)];
let mut work_otilde: Vec<f64> = vec![0.0; (NFIJ + NVIJ + NGI) * (NMCSAMP + 1)];
let mut expvalo: Vec<f64> = vec![0.0; 4*NFIJ + NVIJ + NGI];
let mut work_expvalo: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let mut expval_ho: Vec<f64> = vec![0.0; 4*NFIJ + NVIJ + NGI];
let mut work_expval_ho: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let mut visited: Vec<usize> = vec![0; NMCSAMP + 1];
let mut work_visited: Vec<usize> = vec![0; NMCSAMP + 1];
let otilde: Vec<f64> = vec![0.0; (4*NFIJ + NVIJ + NGI) * (NMCSAMP + 1)];
let work_otilde: Vec<f64> = vec![0.0; (NFIJ + NVIJ + NGI) * (NMCSAMP + 1)];
let expvalo: Vec<f64> = vec![0.0; 4*NFIJ + NVIJ + NGI];
let work_expvalo: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let expval_ho: Vec<f64> = vec![0.0; 4*NFIJ + NVIJ + NGI];
let work_expval_ho: Vec<f64> = vec![0.0; NFIJ + NVIJ + NGI];
let visited: Vec<usize> = vec![0; NMCSAMP + 1];
let work_visited: Vec<usize> = vec![0; NMCSAMP + 1];
let mut derivative = DerivativeOperator {
o_tilde: &mut otilde,
expval_o: &mut expvalo,
ho: &mut expval_ho,
o_tilde: otilde.into_boxed_slice(),
expval_o: expvalo.into_boxed_slice(),
ho: expval_ho.into_boxed_slice(),
n: (4*NFIJ + NVIJ + NGI) as i32,
nsamp: match COMPUTE_ENERGY_METHOD {
EnergyComputationMethod::ExactSum => 1.0,
EnergyComputationMethod::MonteCarlo => NMCSAMP as f64,
},
nsamp_int: MCSAMPLE_INTERVAL,
mu: -1,
visited: &mut visited,
visited: visited.into_boxed_slice(),
pfaff_off: NGI + NVIJ,
jas_off: NGI,
epsilon: EPSILON_SHIFT,
};
let mut work_derivative = DerivativeOperator {
o_tilde: &mut work_otilde,
expval_o: &mut work_expvalo,
ho: &mut work_expval_ho,
o_tilde: work_otilde.into_boxed_slice(),
expval_o: work_expvalo.into_boxed_slice(),
ho: work_expval_ho.into_boxed_slice(),
n: (NFIJ + NVIJ + NGI) as i32,
nsamp: match COMPUTE_ENERGY_METHOD {
EnergyComputationMethod::ExactSum => 1.0,
EnergyComputationMethod::MonteCarlo => NMCSAMP as f64,
},
nsamp_int: MCSAMPLE_INTERVAL,
mu: -1,
visited: &mut work_visited,
visited: work_visited.into_boxed_slice(),
pfaff_off: NGI + NVIJ,
jas_off: NGI,
epsilon: EPSILON_SHIFT,
Expand All @@ -305,6 +308,7 @@ fn main() {
.progress_chars("##-"));

for opt_iter in 0..NOPTITER {
system_params._opt_iter = opt_iter;
let (mean_energy, accumulated_states, deltae, correlation_time) = {
match COMPUTE_ENERGY_METHOD {
EnergyComputationMethod::MonteCarlo => compute_mean_energy(&mut rng, state, &parameters, &system_params, &mut derivative),
Expand Down Expand Up @@ -347,8 +351,8 @@ fn main() {
unsafe {
let incx = 1;
let incy = 1;
daxpy(work_derivative.n, -mean_energy, work_derivative.expval_o, incx, work_derivative.ho, incy);
dcopy(work_derivative.n, work_derivative.ho, incx, &mut b, incy);
daxpy(work_derivative.n, -mean_energy, &work_derivative.expval_o, incx, &mut work_derivative.ho, incy);
dcopy(work_derivative.n, &work_derivative.ho, incx, &mut b, incy);
}
//save_otilde(&mut der_fp, &derivative);
//save_otilde(&mut wder_fp, &work_derivative);
Expand Down Expand Up @@ -463,5 +467,5 @@ fn main() {
opt_progress_bar.inc(1);
opt_progress_bar.set_message(format!("Changed parameters by norm: {:+>.05e} Current energy: {:+>.05e}", opt_delta, mean_energy));
}
opt_progress_bar.finish()
opt_progress_bar.finish();
}
Loading
Loading