News:

alphaMELTS 2.3 standalone & for MATLAB/Python is now open source and available on GitHub (https://github.com/magmasource/alphaMELTS).
alphaMELTS 1.9 is available at the legacy download and information site.
For news of all MELTS software see the MELTS Facebook page.

Main Menu

Inversion of MELTS to find Temperature

Started by matrix, April 13, 2020, 12:15:19 AM

Previous topic - Next topic

matrix

Dear all,

The .melts file and setting file have included initial temperature, pressure and final temperature, pressure. This means the energy absorbed from environment or removed from system itself is forced to meet given temperature and pressure (in fact, energy has no control on system evolution, and just being a natural input or output). However, I recently came across with a situation where the energy removed from system is given (or known), but temperature is wanted (pressure is known). I have no idea how to do it, do you guys have any suggestions? Any advice is welcome.

This problem is explained in detail as following:
(1)at time=0, the system has initial composition X0,  Temperature=T0 (superliquidus), pressure=P0; then this system is cooled by ambient medium. At some time t1>0, the total energy removed from system due to convection and conduction is known as Q. Q is of course equal to sensible heat from temperature change and latent heat from crystallization. So, how to know the temperature drop dT and the mass of minerals newly crystallized during this time interval?
(2)This problem is initially from binary metal alloy system whose liquidus is known as a function of concentration of one component, see 'Numerical method for solution of strongly coupled binary alloy solidification problems' by Daming Xu et al.,1991. The explicit liquidus is used to calculate temperature drop and mass crystallized and even new concentration. In magma system, however, there are no such explicit functions of liquidus, elements concentration, etc.

Either temperature drop or minerals mass crystallzed is known, the other quantity is known. So, I have to find a way to calculate one of the two quantities.


Thank you all
Mingming

Paula

Dear Mingming,

You should be able to use isenthalpic mode. (No compensation is made for gravity though, so really this should be for isobaric systems only.)

For alphaMELTS 1.9, set ALPHAMELTS_MODE to isenthalpic. For alphaMELTS 2, put "Mode: isenthalpic" in the .melts file. You can set the initial enthalpy with "Initial enthalpy:" or you can make the first calculation(s) isothermal to calculate the initial enthalpy, which will then become the reference enthalpy for subsequent calculations.

You can modify the reference enthalpy, by an amount equal to Q, using option 7. in alphaMELTS 1.9 it's clumsy because you will have to call option 7 between each equilibration step. In alphaMELTS 2 you can specify an enthalpy increment (dH) that is applied at each step, similar to the graphical user interface.

In alphaMELTS 2 it will also be possible to read the enthalpies from a file, similar to the PTfile in alphaMELTS 1.9, but that isn't implemented yet. I can try to get that done soon... though I've got a long todo list at the moment, so can't make many promises! If you need Q to vary at each step then you could do that in alphaMELTS for MATLAB/Python, but obviously that has its own learning curve.

Best,
Paula

matrix

Dear Paula,

Thank you very much for the detailed guidance. Following your advice, I found a little strange result. alphamelts 1.9 is used, and the steps are:
step 1: choose 1 (to read .melts file)
step2: LPUM.melts (input .melts file name)
step 3: 7 (impose initial entropy, enthalpy or volume)
step 4: 1 (to use current total enthalpy)
step 5: 3 (single/batch calculation)
step 6: 1 (initial superliquidus guess)
step 7: 7 (impose initial entropy, enthalpy or volume)
step 8: -116000.0 (new system total enthalpy J per 100 g)
step 9: 3 (single/batch calculation)
step 10: 0 (quit)

steps 1-7 are used to get current system total enthalpy, -115900.0 J per 100 g, for example. I need extract dQ=100.0 J per 100g from the system, so -116000.0 is input. These will give new temperature that is compatible with dQ. Setting file is:

ALPHAMELTS_VERSION pMELTS
ALPHAMELTS_IMPOSE_FO2 true
ALPHAMELTS_MODE isentropic
ALPHAMELTS_DELTAP 0
ALPHAMELTS_DELTAT -0.1 (very small if dQ is small)
ALPHAMELTS_MAXP 40000
ALPHAMELTS_MINP 1
ALPHAMELTS_MAXT 1800
ALPHAMELTS_MINT 1000
ALPHAMELTS_SAVE_ALL true

Accordingly, Log fO2 Path : IW and Log fO2 Delta: -1.0.

The above, if it runs just once, gives new temperature after dQ is removed. However, if the outcome above (new liquid composition, new T) is set as input of the next calculation, the steps 1-7 would give a new current system total enthalpy that is different from the result of previous enthalpy, that's strange. Say, H0 is initial system total enthalpy, H is new system total enthalpy:
calculation 1: H0=-115900, H=-116000
calculation 2: H0=-116037, H= -116137
calculation 3: H0=-116147, H=-116247
......
as you can see, H in calculation 1 is different from H0 in calculation, etc. Since at T~1800 C, system is always superliquidus, thus liquid composition stays constant. So, the only variable is temperature T. Why H in calculation is different from H0 in calculation 2? This is puzzling. Could you please give me some hints?


Best,
Mingming

Paula

Hi Mingming,

The way ALPHAMELTS_IMPOSE_FO2 works is it alternates between an isothermal with the buffer imposed and a isenthalpic one without it. So the difference between the enthalpies is presumably the enthalpy for the oxygen that enters or leaves the system to re-establish the buffer.

alphaMELTS 2 automatically alternates between the isenthalpic / isentropic / isochoric constraint and the fO2-buffer. It also handles the slight inconsistency between the Kress & Carmichael fO2 model and the MELTS liquid models better.

Paula