pub trait DFTD4ParamAPI: Sized {
// Required method
fn new_param_f(self) -> Result<DFTD4Param, DFTD4Error>;
// Provided method
fn new_param(self) -> DFTD4Param { ... }
}Expand description
Trait for creating DFTD4Param from damping parameter structs.
Required Methods§
fn new_param_f(self) -> Result<DFTD4Param, DFTD4Error>
Provided Methods§
Sourcefn new_param(self) -> DFTD4Param
fn new_param(self) -> DFTD4Param
Examples found in repository?
examples/test_interface.rs (line 243)
208fn test_r2scan3c() {
209 // Use r2SCAN-3c for a mindless molecule (custom D4 model)
210 let thr = 1.0e-8;
211
212 let numbers = vec![1, 9, 15, 13, 1, 1, 13, 5, 3, 15, 8, 1, 1, 5, 16, 1];
213 #[rustfmt::skip]
214 let positions = vec![
215 -2.14132037405479, -1.34402701877044, -2.32492500904728,
216 4.46671289205392, -2.04800110524830, 0.44422406067087,
217 -4.92212517643478, -1.73734240529793, 0.96890323821450,
218 -1.30966093045696, -0.52977363497805, 3.44453452239668,
219 -4.34208759006189, -4.30470270977329, 0.39887431726215,
220 0.61788392767516, 2.62484136683297, -3.28228926932647,
221 4.23562873444840, -1.68839322682951, -3.53824299552792,
222 2.23130060612446, 1.93579813100155, -1.80384647554323,
223 -2.32285463652832, 2.90603947535842, -1.39684847191937,
224 2.34557941578250, 2.86074312333371, 1.82827238641666,
225 -3.66431367659153, -0.42910188232667, -1.81957402856634,
226 -0.34927881505446, -1.75988134003940, 5.98017466326572,
227 0.29500802281217, -2.00226104143537, 0.53023447931897,
228 2.10449364205058, -0.56741404446633, 0.30975625014335,
229 -1.59355304432499, 3.69176153150419, 2.87878226787916,
230 4.34858700256050, 2.39171478113440, -2.61802993563738,
231 ];
232
233 // Python test uses custom D4 model with ga=2.0, gc=1.0
234 let model = DFTD4Model::custom_d4(&numbers, &positions, 2.0, 1.0, 6.0, None, None, None);
235
236 let param = DFTD4RationalDampingParamBuilder::default()
237 .s8(0.0)
238 .a1(0.42)
239 .a2(5.65)
240 .s9(2.0)
241 .build()
242 .unwrap()
243 .new_param();
244 let res = model.get_dispersion(¶m, false);
245
246 assert_abs_diff_eq!(res.energy, -0.008016697276824889, epsilon = thr);
247
248 let res = model.get_dispersion(¶m, true);
249
250 assert_abs_diff_eq!(res.energy, -0.008016697276824889, epsilon = thr);
251}
252
253#[cfg(feature = "api-v3_2")]
254fn test_pair_resolved() {
255 // Calculate pairwise resolved dispersion energy for a molecule
256 let thr = 1.0e-8;
257
258 let numbers = vec![16, 16, 16, 16, 16, 16, 16, 16];
259 #[rustfmt::skip]
260 let positions = vec![
261 -4.15128787379191, 1.71951973863958, -0.93066267097296,
262 -4.15128787379191, -1.71951973863958, 0.93066267097296,
263 -1.71951973863958, -4.15128787379191, -0.93066267097296,
264 1.71951973863958, -4.15128787379191, 0.93066267097296,
265 4.15128787379191, -1.71951973863958, -0.93066267097296,
266 4.15128787379191, 1.71951973863958, 0.93066267097296,
267 1.71951973863958, 4.15128787379191, -0.93066267097296,
268 -1.71951973863958, 4.15128787379191, 0.93066267097296,
269 ];
270 #[rustfmt::skip]
271 let pair_disp2 = vec![
272 -0.00000000e-0, -5.80599854e-4, -4.74689854e-4, -2.11149449e-4, -1.63163128e-4, -2.11149449e-4, -4.74689854e-4, -5.80599854e-4,
273 -5.80599854e-4, -0.00000000e-0, -5.80599854e-4, -4.74689854e-4, -2.11149449e-4, -1.63163128e-4, -2.11149449e-4, -4.74689854e-4,
274 -4.74689854e-4, -5.80599854e-4, -0.00000000e-0, -5.80599854e-4, -4.74689854e-4, -2.11149449e-4, -1.63163128e-4, -2.11149449e-4,
275 -2.11149449e-4, -4.74689854e-4, -5.80599854e-4, -0.00000000e-0, -5.80599854e-4, -4.74689854e-4, -2.11149449e-4, -1.63163128e-4,
276 -1.63163128e-4, -2.11149449e-4, -4.74689854e-4, -5.80599854e-4, -0.00000000e-0, -5.80599854e-4, -4.74689854e-4, -2.11149449e-4,
277 -2.11149449e-4, -1.63163128e-4, -2.11149449e-4, -4.74689854e-4, -5.80599854e-4, -0.00000000e-0, -5.80599854e-4, -4.74689854e-4,
278 -4.74689854e-4, -2.11149449e-4, -1.63163128e-4, -2.11149449e-4, -4.74689854e-4, -5.80599854e-4, -0.00000000e-0, -5.80599854e-4,
279 -5.80599854e-4, -4.74689854e-4, -2.11149449e-4, -1.63163128e-4, -2.11149449e-4, -4.74689854e-4, -5.80599854e-4, -0.00000000e-0,
280 ];
281 #[rustfmt::skip]
282 let pair_disp3 = vec![
283 0.00000000e-0, 3.39353850e-7, 8.74462839e-7, 1.17634100e-6, 9.86937310e-7, 1.17634100e-6, 8.74462839e-7, 3.39353850e-7,
284 3.39353850e-7, 0.00000000e-0, 3.39353850e-7, 8.74462839e-7, 1.17634100e-6, 9.86937310e-7, 1.17634100e-6, 8.74462839e-7,
285 8.74462839e-7, 3.39353850e-7, 0.00000000e-0, 3.39353850e-7, 8.74462839e-7, 1.17634100e-6, 9.86937310e-7, 1.17634100e-6,
286 1.17634100e-6, 8.74462839e-7, 3.39353850e-7, 0.00000000e-0, 3.39353850e-7, 8.74462839e-7, 1.17634100e-6, 9.86937310e-7,
287 9.86937310e-7, 1.17634100e-6, 8.74462839e-7, 3.39353850e-7, 0.00000000e-0, 3.39353850e-7, 8.74462839e-7, 1.17634100e-6,
288 1.17634100e-6, 9.86937310e-7, 1.17634100e-6, 8.74462839e-7, 3.39353850e-7, 0.00000000e-0, 3.39353850e-7, 8.74462839e-7,
289 8.74462839e-7, 1.17634100e-6, 9.86937310e-7, 1.17634100e-6, 8.74462839e-7, 3.39353850e-7, 0.00000000e-0, 3.39353850e-7,
290 3.39353850e-7, 8.74462839e-7, 1.17634100e-6, 9.86937310e-7, 1.17634100e-6, 8.74462839e-7, 3.39353850e-7, 0.00000000e-0,
291 ];
292
293 let model = DFTD4Model::new(&numbers, &positions, None, None, None);
294
295 let param = DFTD4RationalDampingParamBuilder::default()
296 .s8(1.20065498)
297 .a1(0.40085597)
298 .a2(5.02928789)
299 .build()
300 .unwrap()
301 .new_param();
302 let res = model.get_pairwise_dispersion(¶m);
303
304 for (a, b) in res.pair_energy2.iter().zip(pair_disp2.iter()) {
305 assert_abs_diff_eq!(a, b, epsilon = thr);
306 }
307
308 for (a, b) in res.pair_energy3.iter().zip(pair_disp3.iter()) {
309 assert_abs_diff_eq!(a, b, epsilon = thr);
310 }
311}Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.