From 609fb52b670d8ed74584a988b8c63da82d8d523b Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Tue, 10 Jul 2018 12:36:54 -0400 Subject: added wolfram link code --- .gitignore | 3 +++ wolfram_link/Makefile | 13 +++++++++++++ wolfram_link/convexminorant.tm | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 wolfram_link/Makefile create mode 100644 wolfram_link/convexminorant.tm diff --git a/.gitignore b/.gitignore index a007fea..bf5bfbe 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ build/* +wolfram_link/*.o +wolfram_link/*.c +wolfram_link/convexminorant diff --git a/wolfram_link/Makefile b/wolfram_link/Makefile new file mode 100644 index 0000000..9d65623 --- /dev/null +++ b/wolfram_link/Makefile @@ -0,0 +1,13 @@ + +CC = clang +WSPREP = /opt/Mathematica/SystemFiles/Links/WSTP/DeveloperKit/Linux-x86-64/CompilerAdditions/wsprep +CFLAGS = -g -Os -O3 -Wall -fno-strict-aliasing -Wstrict-overflow -Wno-missing-field-initializers -flto -fopenmp=libiomp5 -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/ -march=native -I/opt/Mathematica/SystemFiles/Links/WSTP/DeveloperKit/Linux-x86-64/CompilerAdditions/ -I../lib/ +LDFLAGS = -L/opt/Mathematica/SystemFiles/Links/WSTP/DeveloperKit/Linux-x86-64/CompilerAdditions -lm -lpthread -lrt -lstdc++ -ldl -luuid -l WSTP64i4 + +convex.o: ../lib/convex.c + @${CC} -c -o $@ $< ${CFLAGS} + +convexminorant: convexminorant.tm convex.o + @${WSPREP} $< -o $@.c + @${CC} -o $@ convex.o $@.c ${CFLAGS} ${LDFLAGS} + diff --git a/wolfram_link/convexminorant.tm b/wolfram_link/convexminorant.tm new file mode 100644 index 0000000..48f5650 --- /dev/null +++ b/wolfram_link/convexminorant.tm @@ -0,0 +1,33 @@ + +#include +#include + +extern int WSMain(int, char **); + +void convexminorant(double *, int); + +:Begin: +:Function: convexminorant +:Pattern: GetConvexMinorant[ list:{___Real} ] +:Arguments: { list } +:ArgumentTypes: { Real64List } +:ReturnType: Manual +:End: + +:Evaluate: GetConvexMinorant[ sequence___Float]:= GetConvexMinorant[ {sequence} ] + +void convexminorant(double * Gammas, int len) { + int i; + for (i = 0; i < len; i++) { + if (Gammas[i] <= 0) { + break; + } + } + double *m = get_convex_minorant(i, Gammas); + WSPutReal64List(stdlink, m, i); +} + +int main(int argc, char **argv) { + return WSMain(argc, argv); +} + -- cgit v1.2.3-54-g00ecf