(git:ccc2433)
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  ******************************************************************************/
17 int 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_init()
Initialize CP2K and MPI.
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.
void cp2k_finalize()
Finalize CP2K and MPI.
int main()
Unit test of the C-interface provided via libcp2k.h.