<div dir="ltr"><div><div><div><div>Thanks for this.<br><br></div>Just as a sanity check, before I involve optim_m1qn3 again, the output of my ./testreport -t tutorial_global_oce_optim -oad includes<br><br>There were 16 decimal places of similarity for "ADM CostFct"<br>There were 16 decimal places of similarity for "ADM Ad Grad"<br>There were 0 decimal places of similarity for "ADM FD Grad"<br><br>
Should I be concerned about this?<br><br></div>E.g. lines 2116-2118 of my output_oadm.txt file are<br><br>(PID.TID 0000.0001)  ADM  ref_cost_function      =  6.20023228182329E+00<br>(PID.TID 0000.0001)  ADM  adjoint_gradient       = -2.69091500991183E-06<br>(PID.TID 0000.0001)  ADM  finite-diff_grad       =  0.00000000000000E+00<br><br></div></div>But at least my cost function value is the same:<br><div><br>(PID.TID 0000.0001)   local fc =  0.620023228182329D+01<br>(PID.TID 0000.0001)  global fc =  0.620023228182329D+01<br><br></div><div>Andrew<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 2 May 2018 at 10:34, Martin Losch <span dir="ltr"><<a href="mailto:Martin.Losch@awi.de" target="_blank">Martin.Losch@awi.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div>
<div class="m_-2983662475380149514BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="m_-2983662475380149514PlainText">Hi Andrew,<br>
<br>
I won’t be able to help you much with the optim/lsopt code, because I would have to get it running again myself. But I do recommend using the MITgcm_contrib/mlosch/optim_<wbr>m1qn3 code. It’s not very well documented, but I am attaching a skeleton script to illustrate
 how to use it. Please give it a try and if you find it useful, I can add this script to the repository.<br>
<br>
The two versions of the optimization routine are similar, both implement the same optimization algorithm (BFGS), but optim_m1qn3 uses a later version of the m1qn3 code, I think it’s easier to compile (only one Makefile) and I believe (but there’s debate about
 this) that it does the right thing as opposed to the optim/lsopt variant, which somehow truncates the optimization in each iteration. Having said that, I have used both in parallel, and the reduction of the cost function (which is really all we care about)
 is sometimes better with the optim_m1qn3 code, sometimes it is better with the optim/lsopt code. The optim_m1qn3 code is closer to the idea of the original m1qn3 code.<br>
<br>
Let me know if you can use my attached instructions.<span class="HOEnZb"><font color="#888888"><br>
<br>
Martin<br>
<br>
</font></span></div>
</span></font></div><div><div class="h5">
<div class="m_-2983662475380149514BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="m_-2983662475380149514PlainText"><br>
<br>
> On 1. May 2018, at 00:00, Andrew McRae <<a href="mailto:andrew.mcrae@physics.ox.ac.uk" target="_blank">andrew.mcrae@physics.ox.ac.uk</a><wbr>> wrote:<br>
> <br>
> Right, but the cost function is the same value each time, the norm of x is 0 each time, and the norm of g is the same each time.  This suggests nothing is happening.  It's a bit ridiculous that one of the core tutorials simply isn't working out of the box...<br>
> <br>
> I will have a go at debugging.<br>
> <br>
> Andrew<br>
> <br>
> On 30 April 2018 at 22:54, Matthew Mazloff <<a href="mailto:mmazloff@ucsd.edu" target="_blank">mmazloff@ucsd.edu</a>> wrote:<br>
> Well you are correct that its not actually taking a step because the dot product of the control is 0:<br>
>>> norm of x................... 0.00000000E+00<br>
> meaning the controls are all 0 still.<br>
> <br>
> However the gradients are non-zero<br>
>>> norm of g................... 0.12730927E-01<br>
> so the linesearch should step and <br>
> ecco_ctrl_MIT_CE_000.opt0001 <br>
> should not be all zero. <br>
> <br>
> To debug this you could put a print statement in optim_writedata.F to see what it is writing…..<br>
> <br>
> I don’t know enough about this tutorial to be a bigger help, sorry<br>
> <br>
> Matt<br>
> <br>
> <br>
>> On Apr 30, 2018, at 2:50 PM, Andrew McRae <<a href="mailto:andrew.mcrae@physics.ox.ac.uk" target="_blank">andrew.mcrae@physics.ox.ac.uk</a><wbr>> wrote:<br>
>> <br>
>> Yes, I did.<br>
>> <br>
>> On 30 April 2018 at 22:42, Matthew Mazloff <<a href="mailto:mmazloff@ucsd.edu" target="_blank">mmazloff@ucsd.edu</a>> wrote:<br>
>> This is still iteration 0. You have to update data.optim to tell it you are now at iteration 1<br>
>> <br>
>> Matt<br>
>> <br>
>> <br>
>>> On Apr 30, 2018, at 2:38 PM, Andrew McRae <<a href="mailto:andrew.mcrae@physics.ox.ac.uk" target="_blank">andrew.mcrae@physics.ox.ac.uk</a><wbr>> wrote:<br>
>>> <br>
>>> I tried a few steps of this, but the output of optim.x always has<br>
>>> <br>
>>>   cost function............... 0.62002323E+01<br>
>>>   norm of x................... 0.00000000E+00<br>
>>>   norm of g................... 0.12730927E-01<br>
>>> <br>
>>> near the end, with no decrease in the cost function.  So I guess it's not actually taking the step?<br>
>>> <br>
>>> Andrew<br>
>>> <br>
>>> On 27 April 2018 at 18:04, Andrew McRae <<a href="mailto:andrew.mcrae@physics.ox.ac.uk" target="_blank">andrew.mcrae@physics.ox.ac.uk</a><wbr>> wrote:<br>
>>> !!!  Okay...<br>
>>> <br>
>>> Yes, it produced the .opt0001 file.  I'll see how this goes.<br>
>>> <br>
>>> Thanks,<br>
>>> Andrew<br>
>>> <br>
>>> On 27 April 2018 at 17:57, Matthew Mazloff <<a href="mailto:mmazloff@ucsd.edu" target="_blank">mmazloff@ucsd.edu</a>> wrote:<br>
>>> Hello<br>
>>> <br>
>>> Its been awhile, but I am pretty sure that is the normal output. It says “fail", but it did give you a new and ecco_ctrl_MIT_CE_000.opt0001 (correct?) and if you unpack and run likely the cost will descend.<br>
>>> <br>
>>> I think it worked correctly. lsopt/optim are just confusing…but I think its working. I think all is good!<br>
>>> <br>
>>> Matt<br>
>>> <br>
>>> <br>
>>> <br>
>>>> On Apr 27, 2018, at 8:25 AM, Andrew McRae <<a href="mailto:andrew.mcrae@physics.ox.ac.uk" target="_blank">andrew.mcrae@physics.ox.ac.uk</a><wbr>> wrote:<br>
>>>> <br>
>>>> Just separating this from the other thread, I got the bundled MITgcm optim routine built (having made these changes, based on this thread from 2010 and this one from 2016).<br>
>>>> <br>
>>>> I use OpenAD to create the adjoint.<br>
>>>> <br>
>>>> My steps are:<br>
>>>> 1) in the build directory, run ../../../tools/genmake2 -oad -mods=../code_oad<br>
>>>> 2) run make depend and make adAll<br>
>>>> 3) copy input_oad/ into a new folder scratch/<br>
>>>> 4) within scratch/, run ./prepare_run<br>
>>>> 5) copy mitgcmuv_ad from build/ into scratch/, copy optim.x into scratch/OPTIM/<br>
>>>> 6) run ./mitgcmuv_ad<br>
>>>> 7) in scratch/OPTIM, create symlinks to ../data.optim and ../data.ctrl<br>
>>>> 8) copy the files ecco_cost_MIT_CE_000.opt0000 and ecco_ctrl_MIT_CE_000.opt0000 into the OPTIM subdirectory<br>
>>>> 9) run ./optim.x within the subdirectory<br>
>>>> <br>
>>>> The full output is attached, but I assume the optimisation failed since the last lines are<br>
>>>> <br>
>>>>   optimization stopped because :<br>
>>>>   ifail =   4    the search direction is not a descent one<br>
>>>> <br>
>>>> Any ideas?  (I guess this isn't something that is tested in the daily builds?)<br>
>>>> <br>
>>>> In the meantime, I'll try the m1qn3 routine as in the other thread, which should help distinguish between a problem with the optimisation routine or the gradient generated by mitgcmuv_ad.<br>
>>>> <br>
>>>> Andrew<br>
>>>> <out.txt>_____________________<wbr>__________________________<br>
>>>> MITgcm-support mailing list<br>
>>>> <a href="mailto:MITgcm-support@mitgcm.org" target="_blank">MITgcm-support@mitgcm.org</a><br>
>>>> <a href="http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support" target="_blank">http://mailman.mitgcm.org/<wbr>mailman/listinfo/mitgcm-<wbr>support</a><br>
>>> <br>
>>> <br>
>>> <br>
>>> ______________________________<wbr>_________________<br>
>>> MITgcm-support mailing list<br>
>>> <a href="mailto:MITgcm-support@mitgcm.org" target="_blank">MITgcm-support@mitgcm.org</a><br>
>>> <a href="http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support" target="_blank">http://mailman.mitgcm.org/<wbr>mailman/listinfo/mitgcm-<wbr>support</a><br>
>> <br>
>> <br>
>> ______________________________<wbr>_________________<br>
>> MITgcm-support mailing list<br>
>> <a href="mailto:MITgcm-support@mitgcm.org" target="_blank">MITgcm-support@mitgcm.org</a><br>
>> <a href="http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support" target="_blank">http://mailman.mitgcm.org/<wbr>mailman/listinfo/mitgcm-<wbr>support</a><br>
> <br>
> <br>
> ______________________________<wbr>_________________<br>
> MITgcm-support mailing list<br>
> <a href="mailto:MITgcm-support@mitgcm.org" target="_blank">MITgcm-support@mitgcm.org</a><br>
> <a href="http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support" target="_blank">http://mailman.mitgcm.org/<wbr>mailman/listinfo/mitgcm-<wbr>support</a><br>
<br>
</div>
</span></font></div>
<div class="m_-2983662475380149514BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="m_-2983662475380149514PlainText">______________________________<wbr>_________________<br>
MITgcm-support mailing list<br>
<a href="mailto:MITgcm-support@mitgcm.org" target="_blank">MITgcm-support@mitgcm.org</a><br>
<a href="http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support" target="_blank">http://mailman.mitgcm.org/<wbr>mailman/listinfo/mitgcm-<wbr>support</a><br>
</div>
</span></font></div>
</div></div></div>

</blockquote></div><br></div>