<html><head></head><body>Hello,<br>
<br>
ADOL-C is not a compiler. It uses whatever the C++ compiler can compile. So all valid constructs may be used with ADOL-C too. <br>
<br>
The only limitation is branching using if-else where the decision is based on the value of an adouble, or loops with different number of iterations at different evaluation points. In fact these are accepted too. They only cause problems at runtime because they represent a change in evaluation procedure from one point to the other.<br>
<br>
Regards<br>
Kshitij.<br>
--<br>
Dr. Kshitij Kulshreshtha<br>
<br>
Sent via Mobile Phone.<br><br><div class="gmail_quote">Rishi Amrit &lt;rishiamrit@gmail.com&gt; wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre style="white-space: pre-wrap; word-wrap:break-word; font-family: monospace">Hi Kshitij,<br /><br />  Thanks for your reply. I have a quick question. Does ADOLC allow you<br />to have nested function calls in a tape ?<br /><br />For eg: Can I have something like<br /><br />trace_on(tagL)<br />....<br />...<br />foo(a, b, c)<br />...<br />...<br />trace_off()<br /><br />where foo is a function with adoubles like<br /><br />void foo(adouble* a, adouble* b, adouble* c)<br />{<br />  c[0] = a[0] + b[0];<br />}<br /><br />Thanks,<br /><br />Kind regards,<br />Rishi<br /><br /><br />On Mon, Jan 16, 2012 at 5:42 AM, Kshitij Kulshreshtha<br />&lt;kshitij@math.upb.de&gt; wrote:<br />&gt; Hello,<br />&gt;<br />&gt; As on 2012-01-16 01:02, Rishi Amrit did write:<br />&gt;&gt; Hi,<br />&gt;&gt;<br />&gt;&gt;<br />&gt;&gt;    Thanks for your reply. I am trying to debug the segmentation fault<br />&gt;&gt; that I'm getting when I call the sparse_hess routine. To do that I<br />&gt;&gt; compiled ADOLC with debug mode. Here is what I get:<br />&gt;&gt;<br />&gt;&gt; StoreManagerInteger::StoreManagerInteger()<br />&gt;&gt; StoreManagerInteger::grow(): increase size from 4 to 8 entries<br />&gt;&gt; (currently 1 entries used)<br />&gt;&gt; StoreManagerInteger::grow(): allocate 64 B doubles and 32 B locints<br />&gt;&gt; next_loc: 1 fill: 2max: 8<br />&gt;&gt; next_loc: 2 fill: 3max: 8<br />&gt;&gt; next_loc: 3 fill: 4max: 8<br />&gt;&gt; next_loc: 4 fill: 5max: 8<br />&gt;&gt; next_loc: 5 fill: 6max: 8<br />&gt;&gt; next_loc: 6 fill: 7max: 8<br />&gt;&gt; next_loc: 7 fill: 8max: 8<br />&gt;&gt; StoreManagerInteger::grow(): increase size from 8 to 16 entries<br />&gt;&gt; (currently 8 entries used)<br />&gt;&gt; octave: tape_handling.cpp:161: void StoreManagerLocint::grow():<br />&gt;&gt; Assertion `alteGroesse == initialeGroesse or size() ==<br />&gt;&gt; (alteGroesse-1)' failed.<br />&gt;<br />&gt; Unfortunately this assertion is wrong. Since it is only used it DEBUG<br />&gt; mode I missed it till now. You can simply remove (comment out) the<br />&gt; assertion in tape_handling.cpp:161 and recompile.<br />&gt;<br />&gt; In order to find your real segmentation fault it would be better to run<br />&gt; your code in a debugger (like gdb) without enabling DEBUG mode in ADOL-C<br />&gt; and seeing where exactly the segmentation fault comes from.<br />&gt;<br />&gt; Regards.<br />&gt; Kshitij.<br />&gt;<br />&gt;<br />&gt; --<br />&gt; Dr. Kshitij Kulshreshtha<br />&gt;<br />&gt; Institut für Mathematik,<br />&gt; Universität Paderborn,<br />&gt; Warburger Straße 100,<br />&gt; 33098 Paderborn.<br />&gt;<br />&gt; Büro: A3.235<br />&gt;<br />&gt; Privatanschrift:<br />&gt; Arnikaweg 62<br />&gt; 33100 Paderborn.<br /></pre></blockquote></div></body></html>