See comments below …Peter

> On Jun 16, 2015, at 13:43, Barry Smith <[email protected]> wrote:
> 
>> 
>> On Jun 12, 2015, at 10:03 PM, Peter Lichtner <[email protected]> 
>> wrote:
>> 
>> Barry: here is an attempt to explain how variable switching works in 
>> pflotran (we may need to iterate on this if it's not clear). I will consider 
>> as an example the 2-phase, 3-component water-supercritical CO2 system. 
>> 
>> Any grid cell (we use finite volume) can exist in one of three possible 
>> states: single-phase pure liquid water (l); single-phase pure supercritical 
>> CO2 (g); or two-phase coexistence of water and supercritical CO2 (2ph).
>> 
>> Each of these states is described by three independent (nonunique) state 
>> variables. One possibility is:
>> 
>> l: (p_l, T, X_CO2^l)
>> g: (p_g, T, X_CO2^g)
>> 2ph: (p_g, T, s_g)
>> 
>> where p_l,g = liquid or gas pressure, T = temperature, and s_g = volume 
>> fraction of pore space occupied by supercritical CO2.
>> 
>> Where variable switching comes into play is when a grid cell undergoes a 
>> phase change with the following possibilities:
>> 
>> l -> 2ph
>> g -> 2ph
>> 2ph -> l
>> 2ph -> g
>> 
>> Note that we do not include directly l <-> g.
>> 
>> As a consequence different regions of space have different primary variables 
>> the boundaries of which are changing with time along with the state 
>> variables.
>> 
>> Line search is not feasible with the current implementation in petsc.
>> 
>> After a completed time step or Newton iteration, the stability of the 
>> solution in each grid cell must be checked for a change of phase. For 
>> example, if the cell is in a 2 phase state, but the solution gives s_g > 1 
>> or s_g < 1,
> 
>   Do you mean s_q < 0 or can s_g only be 1?

This was a typo—sorry about that: I meant s_g < 0 or s_g > 1 triggers a phase 
change. For a two-phase system the physical values of s_g are: 0 < s_g < 1.
> 
>> then a phase change occurs from 2ph -> g or 2ph -> l, respectively, and a 
>> change of variables is necessary: 
>> 
>> (p_g, T, s_g) -> (p_l, T, X_CO2^l)
>> 
>> or
>> 
>> (p_g, T, s_g) -> (p_g, T, X_CO2^g)
> 
Agree with John here.

> what is the formula for these change of variables?
> 
> how/when do g and l go to 2p_h ?
> 
>  Thanks
> 
>  Barry
> 
>> 
>> …Peter
>> 
>>> On Jun 12, 2015, at 18:14, Barry Smith <[email protected]> wrote:
>>> 
>>> 
>>> John,
>>> 
>>> We can provide any Fortran stubs you need but before we do could you please 
>>> outline to us (in algebraic notation; not in reference to PETSc code) how 
>>> you plan to handle your "variable switching". That is, what is the problem 
>>> being solved, what are the constraints, when do you need to switch 
>>> variables etc?
>>> 
>>> I would say everyone who has tried to do variable switching in PETSc before 
>>> has failed because we (the PETSc developers) did not help them enough and  
>>> understand what is needed in the Newton solver. I suspect we need to 
>>> provide a bit more functionality in PETSc to make variable switching a 
>>> success and I'd like to understand what that is and add it to the PETSc 
>>> algorithms. Also if you know of any references that actually explain 
>>> variable switching in detail, that would be great, all I've found are vague 
>>> hand-wavy discussions that leave too many important details unexplained.
>>> 
>>> Thanks
>>> 
>>> Barry
>>> 
>>>> On Jun 12, 2015, at 5:54 PM, John O'Sullivan <[email protected]> 
>>>> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> We're working on changing variables during an SNES solve so that we can 
>>>> handle phase changes.
>>>> 
>>>> I'm looking into using SNESSetUpdate but there doesn't seem to be a 
>>>> fortran interface. I get an error:
>>>> 
>>>> Undefined symbols for architecture x86_64:
>>>> "_snessetupdate_", referenced from:
>>>>    _MAIN__ in phaseChange.o
>>>> 
>>>> I've looked in the interface files and can't find it either. I tried 
>>>> writing one myself but things get a bit too complicated to guess...
>>>> 
>>>> Can an interface be added please?
>>>> 
>>>> Is this the best to do variable switching? If not where would be the right 
>>>> place and are there Fortran interfaces? We will be changing from Pressure, 
>>>> Temperature to Pressure, Saturation etc. But for now I'm just working on a 
>>>> simple example code. 
>>>> 
>>>> Cheers
>>>> John
>>>> --
>>>> Dr John O'Sullivan
>>>> Lecturer
>>>> Department of Engineering Science
>>>> University of Auckland, New Zealand
>>>> email: 
>>>> jp.osullivan at auckland.ac.nz
>>>> 
>>>> tel: +64 (0)9 923 85353

Reply via email to