From: Vikram Garg <vikramvgarg@ma...>  20110210 19:47:39

On Thu, Feb 10, 2011 at 12:31 PM, Roy Stogner <roystgnr@...> wrote: > > On Thu, 10 Feb 2011, Vikram Garg wrote: > >> Not always. Think about Navier Stokes in a channel. There is no >> Dirichlet bc on the pressure on the channel walls. But if our QoI >> involved the pressure on that boundary, then the approach of Giles et >> al would require for us to apply a Dirichlet condition on the adjoint >> pressure. But with the current setup we wouldnt have the penalty >> matrix for the pressure on that boundary. > > Yeah, that would fall into one of my "what I'm worried about NOW" > categories... except that one's especially conceptually tricky, isn't > it, due to the different function spaces involved? Do the Giles et al > tricks work the same way? Going from H^1 to an affine transform of > H^1_0 is a smaller jump than going there from L_2. > Well the trick works for grad u which is in the same function space as p. So there should be a way to make this work. The QoIs in the paper are lift and drag, you write out the stress tensor for the Stokes equation which of course includes both the velocity gradient and the pressure tensors, and end up with an analogous case to the earlier scalar example. I think we just need to pick the right function spaces to isolate the pressure QoI of our interest. >>> But what I'm worried about NOW: are there any cases where we'd want >>> more complicated boundary condition changes? Any Neumann/mixed primal >>> > Dirichlet adjoint, or Dirichlet primal > Neumann/mixed adjoint is >>> pretty much impossible right now, for example; any chance we'd be >>> painting ourselves into a corner if a feature designed now wasn't >>> flexible enough to handle those in the future? >> >> Yeah, I thought about this as well. But wouldnt the >> side_adjoint_constraint and side_adjoint_derivative be able to handle >> those cases ? > > nonDirichlet>Dirichlet we might be able to handle with penalty terms > using adjoint_constraint equations that, unlike the qoi_derivative > stuff, add to both the system rhs and matrix.... but then this trashes > the matrix, for the more complicated adjointbased Hessian and > Hessianvector tricks that rely on multiple adjoint + forward > sensitivity solves. > > Dirichlet(penalty)>nonDirichlet is even worse. Even if you edit the > matrix again, floating point error makes it impossible to just > subtract off the penalty terms; x + O(1/epsilon)  O(1/epsilon) isn't > x, it's garbage. > Cant we just reinit those edges ? Even if we have to reassemble from the sides all over again it shouldnt cost us much. I believe all we'll have to do is to add a system.assemble_sides for the forward problem ? >> I would say lets get the DiffSystem API sorted out first. > > "First" is probably appropriate; that's basically the way we did it > with all the other adjoint APIs. But we don't want to stop thinking > ahead to how they can be generalized. > I havent really used non DiffSystem based apps for a while now. I'll need to talk to you a little bit before I can contribute meaningfully to generalizing to nonDiffSystem apps. >> Unless there are lots of people who are wanting to use adjoints >> (with user specified boundary conditions) and are using non >> DiffSystem frameworks. > > Not sure about the userspecified boundary conditions, but "wanting to > use adjoints while using nonDiffSystem frameworks" is true for all > the INLbased folks; loosen that very slightly to "wanting to use > adjoints even when stuck with nonDiffSystem frameworks" and it's > emphatically true for me too. ;) >  > Roy Thanks.  Vikram Garg PhD Candidate Institute for Computational and Engineering Sciences The University of Texas at Austin http://users.ices.utexas.edu/~vikram/ http://www.runforindia.org/runners/vikramg 