mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2025-01-03 01:56:18 +01:00
commit
0c08855271
19
.github/workflows/test-build.yml
vendored
Normal file
19
.github/workflows/test-build.yml
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
name: test-build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: install dependencies
|
||||||
|
run: sudo apt-get install emacs
|
||||||
|
- name: make
|
||||||
|
run: make -C src/
|
@ -1,4 +1,7 @@
|
|||||||
# qmckl
|
# qmckl
|
||||||
|
|
||||||
|
![Build Status](https://github.com/TREX-CoE/qmckl/workflows/test-build/badge.svg?branch=main)
|
||||||
|
|
||||||
Quantum Monte Carlo Kernel Library.
|
Quantum Monte Carlo Kernel Library.
|
||||||
|
|
||||||
See the [Wiki](https://github.com/TREX-CoE/qmckl/wiki) for more information.
|
See the [Wiki](https://github.com/TREX-CoE/qmckl/wiki) for more information.
|
||||||
|
12
TODO.org
Normal file
12
TODO.org
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
* Set up CI on Travis
|
||||||
|
* Write tests
|
||||||
|
|
||||||
|
* malloc/free : Parameters for accelerators?
|
||||||
|
We should define qmckl_malloc and qmckl_free just to give the
|
||||||
|
possibility of the HPC implementations to define how they allocate the
|
||||||
|
memory (on CPU or GPU, using alternatives to malloc/free, etc).
|
||||||
|
A possibility could be to pass the id of a NUMA domain as a parameter of
|
||||||
|
qmckl_malloc, where the domain id is something obtained from the
|
||||||
|
context.
|
||||||
|
|
||||||
|
|
12
src/Makefile
12
src/Makefile
@ -1,20 +1,24 @@
|
|||||||
CC=gcc
|
CC=gcc
|
||||||
CFLAGS=
|
CFLAGS=-fexceptions -Wall -Werror -Wpedantic -Wextra
|
||||||
|
|
||||||
FC=gfortran
|
FC=gfortran
|
||||||
FFLAGS=
|
FFLAGS=-fcheck=all -Waliasing -Wampersand -Wconversion -Wsurprising -Wintrinsics-std -Wno-tabs -Wintrinsic-shadow -Wline-truncation -Wreal-q-constant -Wuninitialized -fbacktrace -ffpe-trap=zero,overflow,underflow -finit-real=nan
|
||||||
|
|
||||||
SOURCE_FILES=$(wildcard *.org)
|
|
||||||
|
ORG_SOURCE_FILES=qmckl_context.org
|
||||||
|
OBJECT_FILES=$(patsubst %.org,%.o,$(ORG_SOURCE_FILES))
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
|
||||||
|
all: $(OBJECT_FILES)
|
||||||
|
|
||||||
%.c %.h: %.org
|
%.c %.h: %.org
|
||||||
emacs --quick --no-init-file --batch --eval "(require 'org)" --eval '(org-babel-tangle-file "$^")'
|
emacs --quick --no-init-file --batch --eval "(require 'org)" --eval '(org-babel-tangle-file "$^")'
|
||||||
|
|
||||||
%.c %.h %_f.f90: %.org
|
%.c %.h %_f.f90: %.org
|
||||||
emacs --quick --no-init-file --batch --eval "(require 'org)" --eval '(org-babel-tangle-file "$^")'
|
emacs --quick --no-init-file --batch --eval "(require 'org)" --eval '(org-babel-tangle-file "$^")'
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CC) $(CFLAGS) -c $*.c -o $*.o
|
$(CC) $(CFLAGS) -c $*.c -o $*.o
|
||||||
|
|
||||||
%.o: %.f90
|
%.o: %.f90
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# -*- mode: org -*-
|
# -*- mode: org -*-
|
||||||
|
|
||||||
#+TITLE: Context
|
#+TITLE: Context
|
||||||
|
|
||||||
This file is written in C because it is more natural to express the context in
|
This file is written in C because it is more natural to express the context in
|
||||||
C than in Fortran.
|
C than in Fortran.
|
||||||
@ -17,7 +17,7 @@ C than in Fortran.
|
|||||||
is stored in the following data structure, which can't be seen
|
is stored in the following data structure, which can't be seen
|
||||||
outside of the library.
|
outside of the library.
|
||||||
|
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.h
|
#+BEGIN_SRC C :tangle qmckl_context.h
|
||||||
#define QMCKL_DEFAULT_PRECISION 53
|
#define QMCKL_DEFAULT_PRECISION 53
|
||||||
#define QMCKL_DEFAULT_RANGE 2
|
#define QMCKL_DEFAULT_RANGE 2
|
||||||
@ -66,11 +66,11 @@ qmckl_context qmckl_context_create() {
|
|||||||
** =qmckl_context_copy=
|
** =qmckl_context_copy=
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.h
|
#+BEGIN_SRC C :tangle qmckl_context.h
|
||||||
qmckl_context qmckl_context_copy(qmckl_context context);
|
qmckl_context qmckl_context_copy(const qmckl_context context);
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.c
|
#+BEGIN_SRC C :tangle qmckl_context.c
|
||||||
qmckl_context qmckl_context_copy(qmckl_context context) {
|
qmckl_context qmckl_context_copy(const qmckl_context context) {
|
||||||
|
|
||||||
qmckl_context_struct* old_context;
|
qmckl_context_struct* old_context;
|
||||||
qmckl_context_struct* new_context;
|
qmckl_context_struct* new_context;
|
||||||
@ -90,6 +90,31 @@ qmckl_context qmckl_context_copy(qmckl_context context) {
|
|||||||
}
|
}
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
** =qmckl_context_destroy=
|
||||||
|
|
||||||
|
To delete a new context, use =qmckl_context_destroy()=. If the deletion
|
||||||
|
failed, the function returns =0=. On success, the function returns =1=
|
||||||
|
implying that the context has been freed.
|
||||||
|
|
||||||
|
#+BEGIN_SRC C :tangle qmckl_context.h
|
||||||
|
int qmckl_context_destroy(qmckl_context context);
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC C :tangle qmckl_context.c
|
||||||
|
int qmckl_context_destroy(qmckl_context context) {
|
||||||
|
|
||||||
|
qmckl_context_struct* ctx;
|
||||||
|
|
||||||
|
ctx = (qmckl_context_struct*) context;
|
||||||
|
|
||||||
|
if (ctx == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(ctx);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
* Precision
|
* Precision
|
||||||
|
|
||||||
@ -102,11 +127,11 @@ qmckl_context qmckl_context_copy(qmckl_context context) {
|
|||||||
** =qmckl_context_set_precision=
|
** =qmckl_context_set_precision=
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.h
|
#+BEGIN_SRC C :tangle qmckl_context.h
|
||||||
qmckl_context qmckl_context_set_precision(qmckl_context context, int precision);
|
qmckl_context qmckl_context_set_precision(const qmckl_context context, int precision);
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.c
|
#+BEGIN_SRC C :tangle qmckl_context.c
|
||||||
qmckl_context qmckl_context_set_precision(qmckl_context context, int precision) {
|
qmckl_context qmckl_context_set_precision(const qmckl_context context, int precision) {
|
||||||
qmckl_context_struct* ctx;
|
qmckl_context_struct* ctx;
|
||||||
|
|
||||||
if (precision < 2) return (qmckl_context) 0;
|
if (precision < 2) return (qmckl_context) 0;
|
||||||
@ -120,11 +145,11 @@ qmckl_context qmckl_context_set_precision(qmckl_context context, int precision)
|
|||||||
|
|
||||||
** =qmckl_context_set_range=
|
** =qmckl_context_set_range=
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.h
|
#+BEGIN_SRC C :tangle qmckl_context.h
|
||||||
qmckl_context qmckl_context_set_range(qmckl_context context, int range);
|
qmckl_context qmckl_context_set_range(const qmckl_context context, int range);
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.c
|
#+BEGIN_SRC C :tangle qmckl_context.c
|
||||||
qmckl_context qmckl_context_set_range(qmckl_context context, int range) {
|
qmckl_context qmckl_context_set_range(const qmckl_context context, int range) {
|
||||||
qmckl_context_struct* ctx;
|
qmckl_context_struct* ctx;
|
||||||
|
|
||||||
if (range < 2) return (qmckl_context) 0;
|
if (range < 2) return (qmckl_context) 0;
|
||||||
@ -141,11 +166,11 @@ qmckl_context qmckl_context_set_range(qmckl_context context, int range) {
|
|||||||
** =qmckl_context_get_precision=
|
** =qmckl_context_get_precision=
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.h
|
#+BEGIN_SRC C :tangle qmckl_context.h
|
||||||
int qmckl_context_get_precision(qmckl_context context);
|
int qmckl_context_get_precision(const qmckl_context context);
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.c
|
#+BEGIN_SRC C :tangle qmckl_context.c
|
||||||
int qmckl_context_get_precision(qmckl_context context) {
|
int qmckl_context_get_precision(const qmckl_context context) {
|
||||||
qmckl_context_struct* ctx;
|
qmckl_context_struct* ctx;
|
||||||
ctx = (qmckl_context_struct*) context;
|
ctx = (qmckl_context_struct*) context;
|
||||||
return ctx->precision;
|
return ctx->precision;
|
||||||
@ -155,11 +180,11 @@ int qmckl_context_get_precision(qmckl_context context) {
|
|||||||
** =qmckl_context_get_range=
|
** =qmckl_context_get_range=
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.h
|
#+BEGIN_SRC C :tangle qmckl_context.h
|
||||||
int qmckl_context_get_range(qmckl_context context);
|
int qmckl_context_get_range(const qmckl_context context);
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_SRC C :tangle qmckl_context.c
|
#+BEGIN_SRC C :tangle qmckl_context.c
|
||||||
int qmckl_context_get_range(qmckl_context context) {
|
int qmckl_context_get_range(const qmckl_context context) {
|
||||||
qmckl_context_struct* ctx;
|
qmckl_context_struct* ctx;
|
||||||
ctx = (qmckl_context_struct*) context;
|
ctx = (qmckl_context_struct*) context;
|
||||||
return ctx->range;
|
return ctx->range;
|
||||||
|
Loading…
Reference in New Issue
Block a user