> 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?

> 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)

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