# -*- mode: org -*-
# vim: syntax=c
#+TITLE: QMCkl C header
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
This file produces the =qmckl.h= header file, which is included in all
other C header files. It is the main entry point to the library.
We also create the =qmckl_f.f90= which is the Fortran equivalent.
#+BEGIN_SRC C :tangle qmckl.h
#ifndef QMCKL_H
#define QMCKL_H
#include
#include
#+END_SRC
#+BEGIN_SRC f90 :tangle qmckl_f.f90
module qmckl
use, intrinsic :: iso_c_binding
#+END_SRC
* Constants
** Success/failure
These are the codes returned by the functions to indicate success
or failure. All such functions should have as a return type =qmckl_exit_code=.
#+BEGIN_SRC C :tangle qmckl.h
#define QMCKL_SUCCESS 0
#define QMCKL_FAILURE 1
typedef int32_t qmckl_exit_code;
typedef int64_t qmckl_context ;
#+END_SRC
#+BEGIN_SRC f90 :tangle qmckl_f.f90
integer, parameter :: QMCKL_SUCCESS = 0
integer, parameter :: QMCKL_FAILURE = 0
#+END_SRC
** Precision-related constants
Controlling numerical precision enables optimizations. Here, the
default parameters determining the target numerical precision and
range are defined.
#+BEGIN_SRC C :tangle qmckl.h
#define QMCKL_DEFAULT_PRECISION 53
#define QMCKL_DEFAULT_RANGE 11
#+END_SRC
#+BEGIN_SRC f90 :tangle qmckl_f.f90
integer, parameter :: QMCKL_DEFAULT_PRECISION = 53
integer, parameter :: QMCKL_DEFAULT_RANGE = 11
#+END_SRC
* Header files
All the functions expoed in the API are defined in the following
header files.
#+BEGIN_SRC C :tangle qmckl.h
#include "qmckl_memory.h"
#include "qmckl_context.h"
#include "qmckl_distance.h"
#include "qmckl_ao.h"
#+END_SRC
#+BEGIN_SRC f90 :tangle qmckl_f.f90
! include 'qmckl_memory.fh'
include 'qmckl_context.fh'
include 'qmckl_distance.fh'
include 'qmckl_ao.fh'
#+END_SRC
* End of header
#+BEGIN_SRC C :tangle qmckl.h
#endif
#+END_SRC
#+BEGIN_SRC f90 :tangle qmckl_f.f90
end module qmckl
#+END_SRC
* Include all other org files here :noexport:
#+INCLUDE: qmckl_memory.org
#+INCLUDE: qmckl_context.org
#+INCLUDE: qmckl_distance.org
#+INCLUDE: qmckl_ao.org