(git:374b731)
Loading...
Searching...
No Matches
libcp2k_unittest.c
Go to the documentation of this file.
1/*----------------------------------------------------------------------------*/
2/* CP2K: A general program to perform molecular dynamics simulations */
3/* Copyright 2000-2024 CP2K developers group <https://cp2k.org> */
4/* */
5/* SPDX-License-Identifier: GPL-2.0-or-later */
6/*----------------------------------------------------------------------------*/
7
8#include "libcp2k.h"
9#include <math.h>
10#include <stdio.h>
11#include <stdlib.h>
12
13/*******************************************************************************
14 * \brief Unit test of the C-interface provided via libcp2k.h
15 * \author Ole Schuett
16 ******************************************************************************/
17int main() {
18
19 printf("Unit test starts ...\n");
20
21 // test cp2k_get_version()
22 printf("Testing cp_c_get_version(): ");
23 char version_str[100];
24 cp2k_get_version(version_str, 100);
25 printf("%s.\n", version_str);
26
27 // create simple input file
28 const char *inp_fn = "H2.inp";
29 FILE *f = fopen(inp_fn, "w");
30 fprintf(f, "&FORCE_EVAL\n");
31 fprintf(f, " METHOD Quickstep\n");
32 fprintf(f, " &DFT\n");
33 fprintf(f, " BASIS_SET_FILE_NAME BASIS_SET\n");
34 fprintf(f, " POTENTIAL_FILE_NAME POTENTIAL\n");
35 fprintf(f, " LSD\n");
36 fprintf(f, " &MGRID\n");
37 fprintf(f, " CUTOFF 140\n");
38 fprintf(f, " &END MGRID\n");
39 fprintf(f, " &QS\n");
40 fprintf(f, " EPS_DEFAULT 1.0E-8\n");
41 fprintf(f, " &END QS\n");
42 fprintf(f, " &SCF\n");
43 fprintf(f, " EPS_DIIS 0.1\n");
44 fprintf(f, " EPS_SCF 1.0E-4\n");
45 fprintf(f, " IGNORE_CONVERGENCE_FAILURE\n");
46 fprintf(f, " MAX_DIIS 4\n");
47 fprintf(f, " MAX_SCF 3\n");
48 fprintf(f, " SCF_GUESS atomic\n");
49 fprintf(f, " &END SCF\n");
50 fprintf(f, " &XC\n");
51 fprintf(f, " &XC_FUNCTIONAL Pade\n");
52 fprintf(f, " &END XC_FUNCTIONAL\n");
53 fprintf(f, " &END XC\n");
54 fprintf(f, " &END DFT\n");
55 fprintf(f, " &SUBSYS\n");
56 fprintf(f, " &CELL\n");
57 fprintf(f, " ABC 8.0 4.0 4.0\n");
58 fprintf(f, " &END CELL\n");
59 fprintf(f, " &COORD\n");
60 fprintf(f, " H 0.000000 0.000000 0.000000\n");
61 fprintf(f, " H 1.000000 0.000000 0.000000\n");
62 fprintf(f, " &END COORD\n");
63 fprintf(f, " &KIND H\n");
64 fprintf(f, " BASIS_SET DZV-GTH-PADE\n");
65 fprintf(f, " POTENTIAL GTH-PADE-q1\n");
66 fprintf(f, " &END KIND\n");
67 fprintf(f, " &END SUBSYS\n");
68 fprintf(f, "&END FORCE_EVAL\n");
69 fprintf(f, "&GLOBAL\n");
70 fprintf(f, " PRINT_LEVEL SILENT\n");
71 fprintf(f, " PROJECT libcp2k_unittest_H2\n");
72 fprintf(f, "&END GLOBAL\n");
73 fclose(f);
74
75 // use input file to create a force environment
76 force_env_t force_env;
77 cp2k_init();
78 cp2k_create_force_env(&force_env, inp_fn, "__STD_OUT__");
79 cp2k_calc_energy_force(force_env);
80
81 // check energy
82 double energy;
83 cp2k_get_potential_energy(force_env, &energy);
84 printf("\n ENERGY: %.12f\n", energy);
85 if (fabs(-1.118912797546392 - energy) / fabs(energy) > 1e-13) {
86 printf("Wrong energy\n");
87 return (-1);
88 }
89
90 // clean up
91 cp2k_finalize();
92 remove(inp_fn);
93
94 printf("Unit test finished, found no errors\n");
95 return (0);
96}
97
98// EOF
void cp2k_create_force_env(force_env_t *new_force_env, const char *input_file_path, const char *output_file_path)
Create a new force environment.
void cp2k_get_version(char *version_str, int str_length)
Get the CP2K version string.
int force_env_t
Definitions for the functions exported in libcp2k.F.
Definition libcp2k.h:22
void cp2k_calc_energy_force(force_env_t force_env)
Calculate energy and forces of the system.
void cp2k_get_potential_energy(force_env_t force_env, double *e_pot)
Get the potential energy of the system.
int main()
Unit test of the C-interface provided via libcp2k.h.