source: trunk/ADOL-C/src/advector.cpp @ 764

Last change on this file since 764 was 764, checked in by mbanovic, 4 months ago

Merge branch swig into svn.

The following commits have been merged:

commit 15c64c07d051ef872afd8bc04f772624ac3c0580
Merge: a22cb31 617f278
Author: Mladen Banovic <mladenbanovic2705@…>
Date: Wed Jan 30 14:53:13 2019 +0100

Merge branch 'swig'

commit 617f2781bde18dd7c58f3a2554dec70d94cedd92
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri Dec 21 16:23:11 2018 +0100

remove unnecessary %include

commit b7718a5407516afea3b1dabafeb3fa084a9b1ab3
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri Dec 21 16:12:06 2018 +0100

fix destructors for EDF classes

commit 79ae7862f370fbbc04033d42cfd796b429c19e5f
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri Dec 21 15:52:29 2018 +0100

improve test.py example

commit 0dbe7842bde1f9f92909fed8459e8298183c7890
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri Dec 21 15:47:43 2018 +0100

add python examples

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 08ae3d98cadfb86016a48322319548d549ae3418
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri Dec 21 15:47:14 2018 +0100

Make external functions work

EDFobject_v2 is not implemented yet

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit acfd9c5e41c2c2e99d7e530f0837dd6a5b0dac96
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Dec 11 12:07:01 2018 +0100

regenerate doc

commit c673f73ee35f8b8ce74258add01e085e68c0c13a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Dec 11 12:06:21 2018 +0100

add python and R installation to doc

commit 317c3c5a6744d38091e809d804c23d637d900fe9
Author: kulshres <kulshres@94ac48a7-3327-4b6a-8511-9a4036a20e83>
Date: Wed Jun 13 15:21:36 2018 +0000

make init_lib() static to avoid name clashes in other units

git-svn-id: https://projects.coin-or.org/svn/ADOL-C/trunk@758 94ac48a7-3327-4b6a-8511-9a4036a20e83

commit 9a291b9b5646ae665382efafc3e9993c51aa4bc0
Author: kulshres <kulshres@94ac48a7-3327-4b6a-8511-9a4036a20e83>
Date: Wed Jun 13 15:02:22 2018 +0000

rename void init() to void init_lib()

this function is totally internal to tape_handling.cpp and called
from the constructor of Keeper class. However the name init() seems to refer
to something else in the scope of the class and correct initialization
isn't done, causing errors later.

git-svn-id: https://projects.coin-or.org/svn/ADOL-C/trunk@757 94ac48a7-3327-4b6a-8511-9a4036a20e83

commit f84f47f5f12c9a69ef44ccefe1b654fa3524cda3
Merge: 5021e4a 6c0d2d5
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Oct 11 21:53:14 2017 +0200

Merge branch 'swig' of gitlab.com:adol-c/adol-c into swig

commit 5021e4ab8cab3fd0760635e13c1a59e25f3c7eb6
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Oct 11 21:44:36 2017 +0200

add abs and rename asin/acos/atan to arcsin/arccos/arctan etc

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 6c0d2d5c9c90350b384b360dfb9659c9f2ca4bd6
Merge: cba0df1 2444ff3
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Oct 5 19:39:47 2017 +0000

Merge branch 'swig' into 'swig'

Python setup.py and R interface

See merge request adol-c/adol-c!11

commit 2444ff3a28e4a33a4670c8ebf6956f7c85a2274e
Merge: 068b059 946c873
Author: Sri Hari Krishna Narayanan <snarayan@…>
Date: Thu Oct 5 12:26:38 2017 -0500

Merge branch 'swig' of gitlab.com:sriharikrishna/adol-c into swig

commit 068b0592f59cbd11a434dca90be74ffbb767bde3
Author: Sri Hari Krishna Narayanan <snarayan@…>
Date: Thu Oct 5 12:19:52 2017 -0500

Change all use of clib to lib

commit ac987aca06b5c932adbd31bcf08811008b325257
Author: Sri Hari Krishna Narayanan <snarayan@…>
Date: Thu Oct 5 12:10:27 2017 -0500

Add python linking libraries

commit cba0df178387670ec3a1b94c237e13542090e78d
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Sep 5 13:37:03 2017 +0200

make psdrivers numpy conformant and remove one warning

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit e450b62a4b3e501e9940400137fc89351dbdb8ba
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Sep 5 13:35:07 2017 +0200

Make interface of psdrivers conformant and remove redundant parameter

Letters are as represented in the 2017 OMS paper.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 83c5f035130849b98a299857c7c5524a6ffb29a2
Merge: a50a2e1 363e176
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Aug 3 14:05:37 2017 +0200

Merge branch 'master' into swig

commit a50a2e19f79d3178592948c400d6eb89ed828b06
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 22 13:52:26 2017 +0200

make setup.py install do everything

Of course this assumes you have autotools, libtool, and C++ compiler
previously installed as well as boost library and colpack.

commit 1a5f22002c83b99e8d69c297ae89cb03cc304e50
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 22 13:51:41 2017 +0200

add missing support for numpy.sqrt

this was seemingly just oversight

commit f06f5011e183a203eca79444d6b175556f242f6a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri Jun 16 12:43:46 2017 +0200

add a setup.py for compatibilty with python installers

like pip or anaconda. In this case the setup.py will compile the C/C++
original library as well as the swig wrapper.
arguments to build are:
--lib-prefix=<DIR>

will install the C/C++ library andn headers in <DIR>/include <DIR>/lib64

--colpack-dir=<DIR>

will assume that ColPack? is installed in <DIR>/include and <DIR>/lib64

--boost-dir=<DIR>

will assume that boost is installed in <DIR>/include and <DIR>/lib64

I haven't tested on anything except 64-bit linux until now.

for install I've only tested installing with --user option

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit cd793f6a8503a1e3751cfaeb843af249c522ce46
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri May 5 10:16:23 2017 +0200

a slightly more meaningful naming

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 4c2a248fe5937daf292948e8ace9af0e4ccdffc1
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri May 5 10:08:24 2017 +0200

Fix Python Exception properly

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit f272c673fcb0941f3f054462eb9843be4e8b829a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Apr 26 17:29:37 2017 +0200

export the cleanUp() function for wrappers

commit 0ed3a9394d3ed0e2804a3cef8b39dba105817e84
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Apr 19 18:09:39 2017 +0200

python3 compatibility and slight change in swigprocess.py

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit c085c16e96c2f5bce7f4a50a77d4164bcaa47cf6
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Feb 16 15:58:46 2017 +0100

add headers for implicit inclusions in edfclasses.h

commit 239078661e4d41e6ecdb131311f2fafe560874f3
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Feb 16 09:24:17 2017 +0100

add support for vectors and matrices in octave drivers

forward and reverse drivers to come. sparse drivers to come

commit 19e89992da84bdf392233c8add69d02bed714e60
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Dec 22 10:24:44 2016 +0100

Add swig interface for octave

commit 76a264d5412c5599102a4c9a182d3163a6ab6851
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri Nov 18 15:49:36 2016 +0100

rename persistent local header to .hpp

since it is a c++ header. And some temporary .h files are created that
will require cleaning in 'make clean'

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit b59d463221a708e98af350decd97bdd26feb27d7
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri Nov 18 14:01:19 2016 +0100

reorder some lines to fix compilation and %ignore issues

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 26535bfc6d9db954c246d991b5ef09d8cd8d66d1
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Nov 17 10:43:14 2016 +0100

Add directors for python extension of edfclasses.h

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit c522a5f6400e819eb393cfe44a68cae06fbb9ffe
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Nov 2 14:26:11 2016 -0500

call() must not be overloaded by child classes either

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 98fc1f127e71c3ffef73ed43525cd21ec45942b1
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Nov 2 14:19:59 2016 -0500

init_edf() must not be overloaded by child classes

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 1e5e0c68a7a0ff3369e9a3991edaa7d04164a3e5
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Nov 2 14:05:40 2016 -0500

design a C++ object oriented wrapper for external functions

it is easier to work with classes, inheritence and overloaded member
functions in scripting languages like python and R instead of raw
pointers to functions in order to call arbitrary code.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 782465d4175a2453934cd1ffe9649e3f78a42c75
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 14 09:49:12 2016 +0200

add support for calling numpy.cos and friends on adouble arrays

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit b0ed723914bdc46ce9128727972dc287288b0a71
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Aug 10 18:28:43 2016 +0200

helper for printing exception

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 6f263543749e7fcb688e8af5cde68da3745886b5
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Aug 10 18:06:59 2016 +0200

expose FatalError? to swig python interface

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 7f579bb5629eb5f5c5a49ce4d0484a306640748d
Merge: d2f49d3 3bbd2a2
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Aug 10 17:54:41 2016 +0200

Merge branch 'master' into swig

commit d2f49d373e00f583e9b7c0ee69c160fbae1322c7
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Aug 10 13:37:10 2016 +0200

improve logic in fmin and fmax

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit e138ca65b6361b23a4000c77128d0ed684662e1c
Merge: cafefb7 3c5e311
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Aug 10 13:31:06 2016 +0200

Merge remote-tracking branch 'origin/swig' into swig

commit cafefb7081ff8d5ba7c772b5b022404101b813e0
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Aug 10 13:30:32 2016 +0200

wrap newly added functions in master branch

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit ff975ebd035995f0e9dc01578ac3e84b91b1604f
Merge: 02e32a7 4c79b27
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Aug 10 13:11:42 2016 +0200

Merge remote-tracking branch 'origin/master' into swig

commit 02e32a7aa72d4310238f7ae9b85a52e29b46cf4a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Aug 10 13:09:31 2016 +0200

add fmin, fmax, fabs, and printTapeStats for swig-python

fmin, fmax and fabs should work on scalars as well as badoubles

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 3c5e3112cdb978f0274f4d6cacd128abc034ff9b
Merge: dd06803 7aa4b9a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Aug 8 13:37:12 2016 +0200

Merge branch 'master' into swig

commit dd06803b3f40b3057976c315241f583bc0007397
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Aug 4 15:08:45 2016 +0200

raise exceptions for retracing in python

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit d253dfaa74f38b5b545f4f88ba08d86a65aa960a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jul 21 13:49:16 2016 +0200

fix typo in variable name

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit ade470ecf44fad03025ef9fcfadc5cac5d3e9f80
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jul 21 11:36:06 2016 +0200

handle locint as an unsigned long

for some reason swig doesn't do this on it's own.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit e60c95d9dd70d962aed3caed4e05d0ef48ffcab2
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jul 21 11:04:44 2016 +0200

use the compiler set up in ${CXX}

if ${CXX} is not set it defaults to 'c++'

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 42b439a47e2601325cb4d02aa27ac4b9c0535eea
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jul 21 03:12:12 2016 +0200

add numpy compatible set_param_vec()

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 774a2204590aeb57cbc18e654bc6fe21763142c2
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jul 21 02:41:22 2016 +0200

add function to convert numpy arrays directly to adouble arrays

works for any contiguous iterable type like list, tuple etc.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit c3e04155d83b3ee76df294c2adea78ca1df865f0
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jul 14 10:57:43 2016 +0200

refresh swig patches for current swig master branch

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 48e0ef1cf7650d5b2e232d0d5450a158080d7849
Merge: 52445e4 06427e9
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jul 14 10:36:59 2016 +0200

Merge branch 'master' into swig

commit 52445e41a8b768299084702418973ec79bd972c2
Merge: 666ba79 7507929
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Mar 23 14:59:05 2016 +0100

Merge branch 'master' into swig

commit 666ba7931e001bfd78171c7347b400b359dbd2d2
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Mar 23 14:58:59 2016 +0100

add reverse drivers and use kwargs for overloaded forward/reverse call

also add tapestats.
more reverse drivers coming.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit c16bf7ff198728740896a804d85684c0575c1e47
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Mar 21 16:08:10 2016 +0100

add conversion for contiguous matrices and tensors

this time in the swig interface only, because they aren't
needed anywhere else.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit f3895ffd1dbb07b8a04e867982683ae8de7a5052
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Mar 21 15:45:22 2016 +0100

Revert "add conversion for contiguous matrices and tensors"

This reverts commit 7ad2746027b650147ec1d2da6567a3e5a7ecb876.

commit 76eb5d0899280cb9e3b4f4c1902823a45e884774
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Mar 21 13:46:12 2016 +0100

change forward drivers to return numpy arrays

instead of expecting inplace arguments

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 73bde825b256809ae07d124c1c6c66e9ae50eb82
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Mar 21 12:57:20 2016 +0100

change drivers to return numpy arrays

instead of expecting inplace arguments for output

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 946c87335675e68b7ea826eadd801d8d6fca4f54
Author: Sri Hari Krishna Narayanan <sriharikrishna@…>
Date: Thu Mar 17 07:55:25 2016 -0500

R: Added special handling for sparse_jac

commit 74d1c42cf5704c5ed7ae193cab6b2344334219c5
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Mar 15 14:32:47 2016 +0100

fix inclusion of sparse drivers for swig (and other users)

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit e97a73cc2a33645c517a83367d3e709ff3f4a244
Merge: de9eef7 dbc9f38
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 22:52:57 2016 +0000

Merge branch 'swig' into 'swig'

Swig/R

Cleanup

See merge request !4

commit dbc9f3847b58781367d8bcfd0545f3283d3ce350
Merge: b2dd718 de9eef7
Author: Sri Hari Krishna Narayanan <sriharikrishna@…>
Date: Thu Mar 10 16:45:26 2016 -0600

Merge remote-tracking branch 'origin/swig' into swig

commit b2dd71855ce277d4f956c99f04e03f954b0ff344
Author: Sri Hari Krishna Narayanan <sriharikrishna@…>
Date: Thu Mar 10 16:45:01 2016 -0600

R: removed extraneous pragmas

commit de9eef7ce7ba0d5a4256018f4d0bbf79bba25f7f
Merge: 0096858 fdaa52b
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 22:37:21 2016 +0000

Merge branch 'swig' into 'swig'

Swig/R

Bugfixes for SWIG/R interface

See merge request !3

commit fdaa52bf6654fa2558c2982738f4de1f49c2c960
Merge: 2fa790a 0096858
Author: Sri Hari Krishna Narayanan <sriharikrishna@…>
Date: Thu Mar 10 16:20:57 2016 -0600

Merge remote-tracking branch 'origin/swig' into swig

commit 2fa790a85c04b41755e5587baa21e59fe7416ab9
Author: Sri Hari Krishna Narayanan <sriharikrishna@…>
Date: Thu Mar 10 16:13:41 2016 -0600

R: debug all SWIG and R related bugs.

SWIG 3.0.8 needs the two patches and the generated adolc.R needs
the diff. Then ADOL-C can be imported into the R runtime by
source ("init_adolc.R")

commit 009685847f9d81b97d7efcc85d02aa7325bb6b6a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 22:05:52 2016 +0100

reflect file rename in Makefile.am for packaging

commit 9c10d2065974fe1afba0284f5970e55f2e7f28b7
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 22:05:04 2016 +0100

add numpy implementation for common drivers

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 08b723756aa4e6ab2e6ff3f6c3d532691c831019
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 22:04:26 2016 +0100

change header extension to .hpp to suppress clang warning

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 109cb5ca0ae4c07592854af2a48cb6935e2e629b
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 20:51:16 2016 +0100

numpy: Be more verbose in error message for mismatch of dimension

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit d76918c8e2306ca2e13665fae7feb183b45652aa
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 19:58:08 2016 +0100

more licensing info

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 075bda30cf9d1a6432a9db4e587d6f3897ec8f1d
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 18:47:47 2016 +0100

compile interface based on choice

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit c368a02f8d44ad772da5659234a8bdeed254ab7c
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 18:21:54 2016 +0100

add numpy support to python swig interface for forward mode

also in swigprocess compatibility with macosx and general bugfixing

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 7ad2746027b650147ec1d2da6567a3e5a7ecb876
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 10 18:13:35 2016 +0100

add conversion for contiguous matrices and tensors

Just a contiguous row major chunk for matrices ins't
good for indexing using 2 indices, we need to convert
it to double and add pointers. Similarly for tensors.

These will do just that, required for supporting numpy
arrays in the python swig interface

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 41cb636430fa636b4e25ab81da73d2e6fd741dec
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 3 17:08:03 2016 +0100

more verbosity for invoking shell commands

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 82ee8be28c090f84da7eb8a1254440d301fc5675
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 3 17:07:43 2016 +0100

add copyright and licensing everywhere

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit e5ec0154c1743d68b28e3fba1864742b23e3715b
Merge: 6ac52a6 a539d68
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 3 16:28:40 2016 +0100

Merge branch 'master' into swig

commit 6ac52a6a45d8fc9c11c9b0c3b1d0399f6537eadc
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Mar 3 16:28:33 2016 +0100

make script more verbose

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit a6ef9a80ea9593ea5f1861d3ff19315b92a75130
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Feb 2 08:09:26 2016 +0100

correction in documentation of sparse functions

commit dbd7a07a1f5bcd6871d9a728f34a3d0679e01e4f
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Dec 17 22:50:11 2015 +0100

add error handling and make script python3 compatible

the swig generated interface may still not be python3 compatible

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 35ee8b63bea8bf7a0dea7af0e85f69336c6702e5
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Dec 17 18:14:12 2015 +0100

define better python operators

just renaming doesn't work. Maybe we'll need something similar in R too
but since I don't know R, I can't say.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 9654fa7e3b2a83187ee828f2ec9b39e6300ecaa7
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Dec 17 14:34:58 2015 +0100

Add a swig based python and R interface to ADOL-C

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

  • Property svn:keywords set to Id
File size: 20.6 KB
Line 
1/* ---------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3
4 Revision: $Id: advector.cpp 764 2019-01-30 14:44:40Z mbanovic $
5 Contents: advector.cpp contains a vector<adouble> implementation
6           that is able to trace subscripting operations.
7
8 Copyright (c) Kshitij Kulshreshtha
9
10 This file is part of ADOL-C. This software is provided as open source.
11 Any use, reproduction, or distribution of the software constitutes
12 recipient's acceptance of the terms of the accompanying license file.
13
14---------------------------------------------------------------------------*/
15
16#include <limits>
17#include <cmath>
18
19#include "taping_p.h"
20#include <adolc/adouble.h>
21#include "oplate.h"
22#include "dvlparms.h"
23
24using std::vector;
25
26adubref::adubref( locint lo, locint ref ) {
27    ADOLC_OPENMP_THREAD_NUMBER;
28    ADOLC_OPENMP_GET_THREAD_NUMBER;
29    location = lo;
30    refloc = (size_t)trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[location]));
31    if (ref != refloc) {
32        fprintf(DIAG_OUT,"ADOL-C error: strange construction of an active"
33                " vector subscript reference\n(passed ref = %d, stored refloc = %d)\n",ref,refloc);
34        adolc_exit(-2,"",__func__,__FILE__,__LINE__);
35    }
36    isInit = true;
37}
38
39adubref::~adubref() {
40#ifdef adolc_overwrite
41    if (isInit)
42        free_loc(location);
43#endif
44}
45
46adubref::operator adubref*() const {
47    locint locat = location;
48    locint refl = refloc;
49    const_cast<adubref&>(*this).isInit = false;
50    adubref *retp = new adubref(locat,refl);
51    return retp;
52}
53
54adubref::operator adub() const {
55    locint locat = next_loc();
56    ADOLC_OPENMP_THREAD_NUMBER;
57    ADOLC_OPENMP_GET_THREAD_NUMBER;
58
59    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location);
60        put_op(ref_copyout);
61        ADOLC_PUT_LOCINT(location); // = arg
62        ADOLC_PUT_LOCINT(locat);    // = res
63        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
64        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
65            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]);
66    }
67
68    ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc];
69    return locat;
70}
71
72adub adubref::operator++( int ) {
73    locint locat = next_loc();
74    ADOLC_OPENMP_THREAD_NUMBER;
75    ADOLC_OPENMP_GET_THREAD_NUMBER;
76
77    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location);
78        put_op(ref_copyout);
79        ADOLC_PUT_LOCINT(location); // = arg
80        ADOLC_PUT_LOCINT(locat);    // = res
81
82        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
83        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
84            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]);
85    }
86
87    ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc];
88
89    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location);
90        put_op(ref_incr_a);
91        ADOLC_PUT_LOCINT(location); // = res
92
93        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
94        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
95            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
96    }
97
98    ADOLC_GLOBAL_TAPE_VARS.store[refloc]++;
99    return locat;
100}
101
102adub adubref::operator--( int ) {
103    locint locat = next_loc();
104    ADOLC_OPENMP_THREAD_NUMBER;
105    ADOLC_OPENMP_GET_THREAD_NUMBER;
106
107    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location);
108        put_op(ref_copyout);
109        ADOLC_PUT_LOCINT(location); // = arg
110        ADOLC_PUT_LOCINT(locat);    // = res
111
112        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
113        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
114            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]);
115    }
116
117    ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc];
118
119    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location);
120        put_op(ref_decr_a);
121        ADOLC_PUT_LOCINT(location); // = res
122
123        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
124        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
125            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
126    }
127
128    ADOLC_GLOBAL_TAPE_VARS.store[refloc]--;
129    return locat;
130}
131
132adubref& adubref::operator++() {
133    ADOLC_OPENMP_THREAD_NUMBER;
134    ADOLC_OPENMP_GET_THREAD_NUMBER;
135    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location);
136        put_op(ref_incr_a);
137        ADOLC_PUT_LOCINT(location); // = res
138
139        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
140        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
141            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
142    }
143
144    ADOLC_GLOBAL_TAPE_VARS.store[refloc]++;
145    return *this;
146}
147
148adubref& adubref::operator--() {
149    ADOLC_OPENMP_THREAD_NUMBER;
150    ADOLC_OPENMP_GET_THREAD_NUMBER;
151    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location);
152        put_op(ref_decr_a);
153        ADOLC_PUT_LOCINT(location); // = res
154
155        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
156        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
157            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
158    }
159
160    ADOLC_GLOBAL_TAPE_VARS.store[refloc]--;
161    return *this;
162}
163
164adubref& adubref::operator = ( double coval ) {
165    ADOLC_OPENMP_THREAD_NUMBER;
166    ADOLC_OPENMP_GET_THREAD_NUMBER;
167    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) {
168        if (coval == 0) {
169            put_op(ref_assign_d_zero);
170            ADOLC_PUT_LOCINT(location);   // = res
171        } else
172            if (coval == 1.0) {
173                put_op(ref_assign_d_one);
174                ADOLC_PUT_LOCINT(location); // = res
175            } else {
176                put_op(ref_assign_d);
177                ADOLC_PUT_LOCINT(location); // = res
178                ADOLC_PUT_VAL(coval);       // = coval
179            }
180
181        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
182        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
183            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
184    }
185
186    ADOLC_GLOBAL_TAPE_VARS.store[refloc] = coval;
187    return *this;
188}
189
190adubref& adubref::operator = ( const badouble& x ) {
191    ADOLC_OPENMP_THREAD_NUMBER;
192    ADOLC_OPENMP_GET_THREAD_NUMBER;
193    locint x_loc = x.loc();
194    if (location!=x_loc)
195        /* test this to avoid for x=x statements adjoint(x)=0 in reverse mode */
196    { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old:  write_assign_a(location,x.location);
197            put_op(ref_assign_a);
198            ADOLC_PUT_LOCINT(x_loc);    // = arg
199            ADOLC_PUT_LOCINT(location);   // = res
200
201            ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
202            if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
203                ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
204        }
205
206        ADOLC_GLOBAL_TAPE_VARS.store[refloc]=ADOLC_GLOBAL_TAPE_VARS.store[x_loc];
207    }
208    return *this;
209}
210
211adubref& adubref::operator = ( const adubref& x ) {
212    *this = adub(x);
213    return *this;
214}
215
216adubref& adubref::operator <<= ( double coval ) {
217    ADOLC_OPENMP_THREAD_NUMBER;
218    ADOLC_OPENMP_GET_THREAD_NUMBER;
219    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { 
220        ADOLC_CURRENT_TAPE_INFOS.numInds++;
221
222        put_op(ref_assign_ind);
223        ADOLC_PUT_LOCINT(location); // = res
224
225        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
226        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
227            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
228    }
229
230    ADOLC_GLOBAL_TAPE_VARS.store[refloc] = coval;
231    return *this;
232}
233
234void adubref::declareIndependent() {
235    ADOLC_OPENMP_THREAD_NUMBER;
236    ADOLC_OPENMP_GET_THREAD_NUMBER;
237
238    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) {
239        ADOLC_CURRENT_TAPE_INFOS.numInds++;
240
241        put_op(ref_assign_ind);
242        ADOLC_PUT_LOCINT(location); // = res
243
244        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
245        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
246            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]);
247    }
248}
249
250adubref& adubref::operator >>= (double& coval) {
251    adub(*this) >>= coval;
252    return *this;
253}
254
255void adubref::declareDependent() {
256    adub(*this).declareDependent();
257}
258
259adubref& adubref::operator += ( double coval ) {
260    ADOLC_OPENMP_THREAD_NUMBER;
261    ADOLC_OPENMP_GET_THREAD_NUMBER;
262    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_plus_d,location,coval);
263        put_op(ref_eq_plus_d);
264        ADOLC_PUT_LOCINT(location); // = res
265        ADOLC_PUT_VAL(coval);       // = coval
266
267        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
268        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
269            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
270    }
271
272    ADOLC_GLOBAL_TAPE_VARS.store[refloc] += coval;
273    return *this;
274}
275
276adubref& adubref::operator += ( const badouble& y ) {
277    ADOLC_OPENMP_THREAD_NUMBER;
278    ADOLC_OPENMP_GET_THREAD_NUMBER;
279    locint y_loc = y.loc();
280    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_plus_a,location,y.location);
281        put_op(ref_eq_plus_a);
282        ADOLC_PUT_LOCINT(y_loc); // = arg
283        ADOLC_PUT_LOCINT(location);   // = res
284
285        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
286        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
287            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
288    }
289
290    ADOLC_GLOBAL_TAPE_VARS.store[refloc] += ADOLC_GLOBAL_TAPE_VARS.store[y_loc];
291    return *this;
292}
293
294adubref& adubref::operator -= ( double coval ) {
295    ADOLC_OPENMP_THREAD_NUMBER;
296    ADOLC_OPENMP_GET_THREAD_NUMBER;
297    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_min_d,location,coval);
298        put_op(ref_eq_min_d);
299        ADOLC_PUT_LOCINT(location); // = res
300        ADOLC_PUT_VAL(coval);       // = coval
301
302        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
303        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
304            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
305    }
306
307    ADOLC_GLOBAL_TAPE_VARS.store[refloc] -= coval;
308    return *this;
309}
310
311adubref& adubref::operator -= ( const badouble& y ) {
312    ADOLC_OPENMP_THREAD_NUMBER;
313    ADOLC_OPENMP_GET_THREAD_NUMBER;
314    locint y_loc = y.loc();
315    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_min_a,location,y.location);
316        put_op(ref_eq_min_a);
317        ADOLC_PUT_LOCINT(y_loc); // = arg
318        ADOLC_PUT_LOCINT(location);   // = res
319
320        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
321        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
322            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
323    }
324
325    ADOLC_GLOBAL_TAPE_VARS.store[refloc] -= ADOLC_GLOBAL_TAPE_VARS.store[y_loc];
326    return *this;
327}
328
329adubref& adubref::operator *= ( double coval ) {
330    ADOLC_OPENMP_THREAD_NUMBER;
331    ADOLC_OPENMP_GET_THREAD_NUMBER;
332    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_mult_d,location,coval);
333        put_op(ref_eq_mult_d);
334        ADOLC_PUT_LOCINT(location); // = res
335        ADOLC_PUT_VAL(coval);       // = coval
336
337        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
338        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
339            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
340    }
341
342    ADOLC_GLOBAL_TAPE_VARS.store[refloc] *= coval;
343    return *this;
344}
345
346adubref& adubref::operator *= ( const badouble& y ) {
347    ADOLC_OPENMP_THREAD_NUMBER;
348    ADOLC_OPENMP_GET_THREAD_NUMBER;
349    locint y_loc = y.loc();
350    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_mult_a,location,y.location);
351        put_op(ref_eq_mult_a);
352        ADOLC_PUT_LOCINT(y_loc); // = arg
353        ADOLC_PUT_LOCINT(location);   // = res
354
355        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
356        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
357            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]);
358    }
359
360    ADOLC_GLOBAL_TAPE_VARS.store[refloc] *= ADOLC_GLOBAL_TAPE_VARS.store[y_loc];
361    return *this;
362}
363
364void condassign( adubref& res,         const badouble &cond,
365                 const badouble &arg1, const badouble &arg2 ) {
366    ADOLC_OPENMP_THREAD_NUMBER;
367    ADOLC_OPENMP_GET_THREAD_NUMBER;
368    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign(res.location,cond.location,arg1.location,
369        //                   arg2.location);
370        put_op(ref_cond_assign);
371        ADOLC_PUT_LOCINT(cond.loc()); // = arg
372        ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]);
373        ADOLC_PUT_LOCINT(arg1.loc()); // = arg1
374        ADOLC_PUT_LOCINT(arg2.loc()); // = arg2
375        ADOLC_PUT_LOCINT(res.location);  // = res
376
377        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
378        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
379            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.refloc]);
380    }
381
382    if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] > 0)
383        ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg1.loc()];
384    else
385        ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg2.loc()];
386}
387
388void condassign( adubref& res, const badouble &cond, const badouble &arg ) {
389    ADOLC_OPENMP_THREAD_NUMBER;
390    ADOLC_OPENMP_GET_THREAD_NUMBER;
391    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign2(res.location,cond.location,arg.location);
392        put_op(ref_cond_assign_s);
393        ADOLC_PUT_LOCINT(cond.loc()); // = arg
394        ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]);
395        ADOLC_PUT_LOCINT(arg.loc());  // = arg1
396        ADOLC_PUT_LOCINT(res.location);  // = res
397
398        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
399        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
400            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.refloc]);
401    }
402
403    if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] > 0)
404        ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg.loc()];
405}
406
407void condeqassign( adubref& res,         const badouble &cond,
408                   const badouble &arg1, const badouble &arg2 ) {
409    ADOLC_OPENMP_THREAD_NUMBER;
410    ADOLC_OPENMP_GET_THREAD_NUMBER;
411    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign(res.location,cond.location,arg1.location,
412        //                   arg2.location);
413        put_op(ref_cond_eq_assign);
414        ADOLC_PUT_LOCINT(cond.loc()); // = arg
415        ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]);
416        ADOLC_PUT_LOCINT(arg1.loc()); // = arg1
417        ADOLC_PUT_LOCINT(arg2.loc()); // = arg2
418        ADOLC_PUT_LOCINT(res.location);  // = res
419
420        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
421        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
422            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.refloc]);
423    }
424
425    if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] >= 0)
426        ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg1.loc()];
427    else
428        ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg2.loc()];
429}
430
431void condeqassign( adubref& res, const badouble &cond, const badouble &arg ) {
432    ADOLC_OPENMP_THREAD_NUMBER;
433    ADOLC_OPENMP_GET_THREAD_NUMBER;
434    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign2(res.location,cond.location,arg.location);
435        put_op(ref_cond_eq_assign_s);
436        ADOLC_PUT_LOCINT(cond.loc()); // = arg
437        ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]);
438        ADOLC_PUT_LOCINT(arg.loc());  // = arg1
439        ADOLC_PUT_LOCINT(res.location);  // = res
440
441        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
442        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
443            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.refloc]);
444    }
445
446    if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] >= 0)
447        ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg.loc()];
448}
449
450advector::blocker::blocker(size_t n) {
451    ensureContiguousLocations(n);
452}
453
454bool advector::nondecreasing() const {
455    bool ret = true;
456    double last = - ADOLC_MATH_NSP::numeric_limits<double>::infinity();
457    vector<adouble>::const_iterator iter = data.begin();
458    for ( ; iter != data.end() && ret ; iter++) {
459        ret = ret && ( iter->value() >= last );
460        last = iter->value();
461    }
462    return ret;
463}
464
465adub advector::operator[](const badouble& index) const {
466    ADOLC_OPENMP_THREAD_NUMBER;
467    ADOLC_OPENMP_GET_THREAD_NUMBER;
468    size_t idx = (size_t)trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[index.loc()]));
469    locint locat = next_loc();
470    size_t n = data.size();
471    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) {
472        put_op(subscript);
473        ADOLC_PUT_LOCINT(index.loc());
474        ADOLC_PUT_VAL(n);
475        ADOLC_PUT_LOCINT(data[0].loc());
476        ADOLC_PUT_LOCINT(locat);
477
478        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
479        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) 
480            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]);
481    }
482
483    if (idx >= n)
484        fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%zu, idx=%zu\n", n, idx);
485
486    ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[data[idx].loc()];
487    return locat;
488}
489
490adubref advector::operator[](const badouble& index) {
491    ADOLC_OPENMP_THREAD_NUMBER;
492    ADOLC_OPENMP_GET_THREAD_NUMBER;
493    size_t idx = (size_t) trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[index.loc()]));
494    locint locat = next_loc();
495    size_t n = data.size();
496    if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) {
497        put_op(subscript_ref);
498        ADOLC_PUT_LOCINT(index.loc());
499        ADOLC_PUT_VAL(n);
500        ADOLC_PUT_LOCINT(data[0].loc());
501        ADOLC_PUT_LOCINT(locat);
502
503        ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
504        if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) 
505            ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]);
506    }
507
508    if (idx >= n)
509        fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%zu, idx=%zu\n", n, idx);
510
511    ADOLC_GLOBAL_TAPE_VARS.store[locat] = data[idx].loc();
512    return adubref(locat,data[idx].loc());
513}
514
515adouble advector::lookupindex(const badouble& x, const badouble& y) const {
516    if (!nondecreasing()) {
517        fprintf(DIAG_OUT, "ADOL-C error: can only call lookup index if advector ist nondecreasing\n");
518        adolc_exit(-2,"",__func__,__FILE__,__LINE__);
519    }
520    if (y.value() < 0) {
521        fprintf(DIAG_OUT, "ADOL-C error: index lookup needs a nonnegative denominator\n");
522        adolc_exit(-2,"",__func__,__FILE__,__LINE__);
523    }
524    adouble r = 0;
525    size_t n = data.size();
526    for (size_t i = 0; i < n; i++) 
527        condassign(r, x - data[i]*y, (adouble) (i+1));
528    return r;
529}
530
531void adolc_vec_copy(adouble *const dest, const adouble *const src, locint n) {
532  ADOLC_OPENMP_THREAD_NUMBER;
533  ADOLC_OPENMP_GET_THREAD_NUMBER;
534  if (dest[n-1].loc() - dest[0].loc()!=(unsigned)n-1 || src[n-1].loc()-src[0].loc()!=(unsigned)n-1) fail(ADOLC_VEC_LOCATIONGAP);
535  if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) {
536      put_op(vec_copy);
537      ADOLC_PUT_LOCINT(src[0].loc());
538      ADOLC_PUT_LOCINT(n);
539      ADOLC_PUT_LOCINT(dest[0].loc());
540      for (locint i=0; i<n; i++) {
541          ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
542          if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
543              ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[dest[0].loc()+i]);
544      }
545  }
546  for (locint i=0; i<n; i++)
547      ADOLC_GLOBAL_TAPE_VARS.store[dest[0].loc()+i] = 
548          ADOLC_GLOBAL_TAPE_VARS.store[src[0].loc()+i];
549}
550
551adub adolc_vec_dot(const adouble *const x, const adouble *const y, locint n) {
552  ADOLC_OPENMP_THREAD_NUMBER;
553  ADOLC_OPENMP_GET_THREAD_NUMBER;
554  if (x[n-1].loc() - x[0].loc()!=(unsigned)n-1 || y[n-1].loc()-y[0].loc()!=(unsigned)n-1) fail(ADOLC_VEC_LOCATIONGAP);
555  locint res = next_loc();
556  if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) {
557      put_op(vec_dot);
558      ADOLC_PUT_LOCINT(x[0].loc());
559      ADOLC_PUT_LOCINT(y[0].loc());
560      ADOLC_PUT_LOCINT(n);
561      ADOLC_PUT_LOCINT(res);
562      ADOLC_CURRENT_TAPE_INFOS.num_eq_prod += 2*n;
563      ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
564      if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
565          ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res]);
566  }
567  ADOLC_GLOBAL_TAPE_VARS.store[res] = 0;
568  for (locint i=0; i<n; i++)
569      ADOLC_GLOBAL_TAPE_VARS.store[res] += 
570          ADOLC_GLOBAL_TAPE_VARS.store[x[0].loc()+i] *
571          ADOLC_GLOBAL_TAPE_VARS.store[y[0].loc()+i];
572  return res;
573}
574
575void adolc_vec_axpy(adouble *const res, const badouble& a, const adouble*const x, const adouble*const y,locint n) {
576  ADOLC_OPENMP_THREAD_NUMBER;
577  ADOLC_OPENMP_GET_THREAD_NUMBER;
578  if (res[n-1].loc() - res[0].loc()!=(unsigned)n-1 || x[n-1].loc() - x[0].loc()!=(unsigned)n-1 || y[n-1].loc()-y[0].loc()!=(unsigned)n-1) fail(ADOLC_VEC_LOCATIONGAP);
579  locint a_loc = a.loc();
580  if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) {
581      put_op(vec_axpy);
582      ADOLC_PUT_LOCINT(a_loc);
583      ADOLC_PUT_LOCINT(x[0].loc());
584      ADOLC_PUT_LOCINT(y[0].loc());
585      ADOLC_PUT_LOCINT(n);
586      ADOLC_PUT_LOCINT(res[0].loc());
587      ADOLC_CURRENT_TAPE_INFOS.num_eq_prod += 2*n -1;
588      for (locint i=0; i<n; i++) {
589          ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape;
590          if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors)
591              ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res[0].loc()+i]);
592      }
593  }
594  for (locint i=0; i<n; i++)
595      ADOLC_GLOBAL_TAPE_VARS.store[res[0].loc()+i] = 
596          ADOLC_GLOBAL_TAPE_VARS.store[a_loc] *
597          ADOLC_GLOBAL_TAPE_VARS.store[x[0].loc()+i] +
598          ADOLC_GLOBAL_TAPE_VARS.store[y[0].loc()+i];
599
600}
Note: See TracBrowser for help on using the repository browser.