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

Isobaric Batch Melting?

Started by jcwhite, April 18, 2007, 07:01:19 AM

Previous topic - Next topic

jcwhite

I've been runnning MELTS (the Java GUI version) to create models of fractional crystallization of alkali basalt (along buffered fO2 paths) with pretty good, or at least consistent, results.  However, I can't figure out how to get MELTS to model isobaric (1 kbar) equilibrium batch melting (also along an fO2 path), so I've been playing around with Adiabat_1ph which seems to have the ability to do this.

The problem is: I just can't figure out how!  The documentation explicitly describes how to model isoenthalpic melting and isobaric fractional crystallization (and I've even gone through the MORB tutorial on this forum), but not what I'm looking for.  I've tried "reversing" the FC script as follows:

ADIABAT_VERSION         MELTS
ADIABAT_MODE          isobaric
ADIABAT_DELTAT        +3
ADIABAT_MINT        800
!ADIABAT_FRACTIONATE_SOLIDS   true
ADIABAT_CRASH_FILE     030512.out-EBM

My .melts file looks like this:

Title: 030512 FMQ 0.5% H2O
Initial Composition: SiO2 47.83
Initial Composition: TiO2 2.65
Initial Composition: Al2O3 15.47
Initial Composition: Fe2O3 0.96
Initial Composition: Cr2O3 0.0
Initial Composition: FeO 10.06
Initial Composition: MnO 0.16
Initial Composition: MgO 6.27
Initial Composition: NiO 0.0
Initial Composition: CoO 0.0
Initial Composition: CaO 11.08
Initial Composition: Na2O 2.92
Initial Composition: K2O 0.76
Initial Composition: P2O5 0.48
Initial Composition: H2O 0.5
Initial Composition: CO2 0.0
Initial Composition: SO3 0.0
Initial Composition: Cl2O-1 0.0
Initial Composition: F2O-1 0.0
Initial Temperature: 800.00
Final Temperature: 1300.00
Increment Temperature: 3.00
Initial Pressure: 1000.0
Final Pressure: 1000.0
Increment Pressure: 0.00
Log fO2 path: FMQ

As noted, this alkali basalt works just fine with FC models in MELTS, but I can't get it to work at all in Adiabat (not even very well in FC mode, either)... although I do seem to be getting closer.  I've tried various combinations of feldspar, clinopyroxene, olivine, and spinel as the subsolidus phases, and the results are always the same: errors followed by zilch.

Paula

#1
Hi,

You are taking exactly the right approach for isobaric batch melting.  The first problem is that the subsolidus initial guess routine is really intended for peridotite compositions and works less well for basaltic ones.  You probably got the error 'Can only handle 2 pyroxenes!' even though you only put in one pyroxene(?).  The error message isn't very helpful in this case; what it really means is that it requires exactly one clinopyroxene and one orthopyroxene to start, even though it will later drop the opx.  (I've changed the error message for the next version of the program.)  If you add opx to the assemblage it will find a norm solution but then hangs after that - more about why that is later.

When it's batch melting you are after you can always run the calculation down-temperature (or up-pressure in the isentropic case), starting from a superliquidus start, and then reverse the results. That's often the approach I take for troublesome bulk compositions.  If you want, you can save a binary_file (option 13) when it's finished executing and then use that as input, instead of your melts_file, to repeat the calculation going up-temperature.  That could also be the best approach if, say, you wanted to do fractional melting calculations.

If you do run the batch crystallization calculation with your file you'll find that it stabilises feldspar, olivine and clinopyroxene and then fails when it tries to add spinel (at roughly 1100 oC). In fact, when you ran the fractional crystallization calculation it probably failed at about the same temperature.  At this point it is struggling with the fO2 buffer, which significantly complicates the minimisation problem it is trying to solve.  In practice, except for the first point when it is established, the fO2 buffer makes relatively little difference.  If you turn if off the calculations will run (almost) down to 800 oC.  For example see this table of results taken from the Bulk_comp.txt for various runs using your melts_file:

Quote
TSiO2TiO2Al2O3Fe2O3FeOMnOMgOCaONa2OK2OP2O5H2O
1573.1548.20552.6708015.59141.783579.404700.1612566.3192211.16702.942920.7659660.4837680.503925
1384.1548.20022.6705115.58971.893019.305010.1612386.3185211.16582.942600.7658820.4837150.503870
1384.1548.20552.6708015.59141.783579.404700.1612566.3192211.16702.942920.7659660.4837680.503925
1387.1548.20463.3605114.78722.2175811.21900.2124764.962809.128123.492981.0425200.6721020.700106
1387.1548.17823.3678814.78512.0980811.32650.2118944.966819.171353.485371.0399700.6704390.698374

The first line is after one calculation at the starting conditions with the buffer turned on; compare the original melts_file.  The next two lines are for batch melting: line 2 is the last point before failure for a run with the buffer on all the time and line 3 is for a run where the first point is at QFM but the buffer is off for subsequent calculations.  The last two lines are the same for the fractional crystallization case.

So I would recommend that you turn the buffer off (with option 5) after a single, buffered (option 3) calculation.  Then execute with option 4.  Or alternatively, if you want to maximise the number of calculations with the buffer on, temporarily change ADIABAT_MINT to be the temperature just before it fails.  Then either save a binary_file (better option) or edit your melts_file.  Re-run Adiabat_1ph with the original MINT and remember to turn the buffer off before doing any calculations.

That said, both the GUI and adiabat_1ph versions of MELTS have the same underlying algorithm for fO2 buffered calculations so if you are finding that the Java applet runs further with the fO2 buffer than Adiabat_1ph then we should try to work out why that is happening.  Please could you e-mail me the output from your Java MELTS run? (You can find my e-mail address in the 'Members List' when you are logged into the forum.)  Also, if you are able to repeat the Java MELTS run for batch crystallization I would really appreciate it  :)

Returning to the batch crystallization / melting calculation... assuming you have turned off the fO2 buffer after the first calculation you'll find it runs to 800 oC but that you still have have about a gram of liquid left and ~0.25 gram water.  This is an artefact of MELTS: 'Liq_tbl.txt' shows that the solidus is actually at 886 oC.  In pHMELTS water gets put in nominally anhydrous minerals but in (p)MELTS there are few places for water to go as the range of hydrous minerals is somewhat limited.  This tends to overstabilise the liquid phase; in fact, sometimes there is no solidus at all for water bearing systems!  Some elements, such K and P, that appear in relatively few solid phases in the MELTS database can generate a similar problem, in which case it can be easier and more informative to treat them as trace elements.  Here, you can just stop the calculation at a slightly higher temperature (e.g. ~850 oC) instead.

You're right the MORB tutorial wouldn't help much here - when I get the chance I'll make Adiabat_1ph versions of some of the other MELTS tutorial pages so that a wider range of examples get covered.  In the meantime, hope that this answers your query.

Paula

P.S. I'm going to move this thread to 'General Usage'.

jcwhite

Thanks, Paula!  Sorry for the delay in replying--I took your advice (to run equilibrium crystallization and make it backwards) back to Java MELTS, and have been getting good, or at least credible, results.  I'll note that in all (or maybe nearly all) cases, imposing an fO2 buffer works just fine for both FC and EC models.  I'll e-mail you the .out files for FC and EC from Java MELTS for this sample run along the FMQ buffer.

Other things:
1. That pyroxene error is exactly what I've been getting.  I've added opx to the subsolidus phase list, and the isobaric melting procedure does go at least one step further before freezing--but hey, at least it's not ending on an error!
2. When I followed your procedure, it worked just as described!

John

Paula

#3
Hi John,

Sorry for the delay in getting back to you again.  Adiabat_1ph's troubles with fO2 and subsolidus starts for non-peridotite type compositions have prompted several new features and improvements, which is a Good Thing... so thanks for the feedback.  I sent you an e-mail with details of some of the changes / additions in what will later become v1.8 but there's been a couple more developments since.  Version 1.8 of Adiabat_1ph is not quite ready to go public as some of the newer parts have not been fully tested yet.  It does now work for the calculations you were trying originally (i.e. QFM buffered batch melting of alkali basalt, with subsolidus start).  Let me know your operating system if you would like to have a go with it.

With the previous strategy (reversing the results of a batch crystallization run): in Java MELTS the QFM-buffered calculation would run down-temperature till there was a few grams of liquid but in Adiabat_1ph it would crash as it tried to add spinel to the assemblage.  To fix this issue, part of the core algorithm that deals with the problem of minimisation with fO2 constraints (or minimisation with H2O constraints for the pHMELTS extension) has been upgraded so that it is built on a slightly younger version of Mark Ghiorso's MELTS code.  The underlying methods are still the same, as described in Ghiorso & Sack (1995), Asimow & Ghiorso (1998) and references therein (e.g. Ghiorso 1994, GCA v58, p5489-5501).  However, the way the book-keeping is handled differs just enough that fO2-buffered calculations are more robust in the newer version.  Put another way, you will get the same results with v1.8 as with v1.7; it's just your chances of getting said results are significantly higher with the newer version.

The alkali basalt composition will now run easily down to 850 oC for batch crystallization and crosses the solidus smoothly.  Fractional crystallization will run to just above 650 oC and then crashes (for reasons I have yet to check out).  At this point there is ~8 grams of liquid left; again the reason is that there are few phases, except liquid, that have a hydrous component.  Over the range for which Java MELTS runs successfully the results are very similar, with one notable exception: in Java MELTS feldspar is joined by clinopyroxene almost immediately, whereas in Adiabat_1ph the second phase is olivine.  If you look at Phase_props.txt (batch or fractional) you will see that when cpx does finally appear ~10 grams is crystallized in a single temperature increment!  This is a metastability problem; cpx is stable but the program misses it until it becomes sufficiently oversaturated that lots are added at once.

I will try to find out how to tweak Adiabat_1ph to avoid this problem. In the meantime the functionality of option 2 has been extended so that if you hit a PT limit (MINT, MAXP etc.) then if you return to option 2 you will be given the opportunity to change the MIN, MAX or DELTA environment variable for pressure or temperature, as appropriate.  This was intended to allow settings to be adjusted at the menu in the middle of a run (e.g. turning off the fO2-buffer or turning on/off liquid to constrain the potential temperature) but also provides an easy workaround for cpx metastability, at least for the batch case.  When you run the calculation up-temperature you find that cpx is exhausted just before feldspar, as it should be.  So, initially set ADIABAT_MINT to a temperature at which cpx is present and run down-temperature until it stops.  Then make DELTAT positive, set MAXT to the temperature where cpx should have joined feldspar and liquid, and execute (option 4) again. Finally, run down-temperature, setting ADIABAT_MINT to the temperature you actually want to stop at.

Fractional crystallization is a little more complicated, but still possible.  Set ADIABAT_MINT to the temperature at which cpx should come in.  When it stops, set MINT to its final intended value; do not change DELTAT.  Manually lower the temperature to get cpx into the assemble using a combination of options 2 and 3, so that solids are not fractionated, and reasonably small temperature increments.  Raise the temperature in the same way and then set the calculation going again with option 4.  (It is important to adjust MINT the first time you return to option 2.)  Make sure to have ADIABAT_SAVE_ALL on in either case to get all the output and then you can, with a little editting of the output files, get the correct behaviour.

Returning to subsolidus starts (which don't have the cpx metastability problem anyway)... the subsolidus norm routine has been made a lot more user-friendly so that it will automatically add orthopyroxene etc. if needed.  The reason that the program was hanging shortly afterwards, previously, was that it was trying to buffer the fO2 of the assemblage before testing whether the phases were indeed saturated.  If you look at the normative assemblage (forsteritic olivine, opx, cpx, feldspar, quartz, whitlockite and water) it's fairly whacky for an alkali basalt - not much wonder it was having trouble!  Consequently, I've added an extra step so that it tries to find the equilibrium assemblage unbuffered before doing the 'real' initial calculation.  If, as for your alkali basalt, it fails to find an equilibrium unbuffered assemblage then it defaults to a superliquidus start.  Fortunately the superliquidus start works in this case, even though seemingly inappropriate. Sometimes it happens that way; it just depends on the particular composition and PT conditions.  So after much huffing and puffing we can finally do the batch melting calculation properly  ;)

Hope that helps!
Paula

Paula


Hi John,

Sorry it's been a while...  I've been looking into that problem in Adiabat_1ph where cpx remains metastable, with olivine joining the assemblage instead, and when cpx eventually does appear ~10g comes in all at once.  I've tried repeating the same batch crystallization calculation described above with Adiabat_1ph, CORBA MELTS (referred to as 'Java MELTS' above), the old depreciated Java MELTS applet and the standalone GUI version of MELTS. There are slight differences in the QFM buffer between the standalone version of MELTS and the other versions (as described under ADIABAT_FO2_PRESSURE_TERM in the v1.8 documentation) but that is something of an aside.

Most of the runs behaved in the same way as Adiabat_1ph and stabilised olivine at the expense of cpx. Only CORBA MELTS correctly brings in cpx at 1155 oC.  That difference is related to the success or otherwise of the routines for estimation of phase stability outlined in Ghiorso (1994; page 5495) and Asimow & Ghiorso (1998) and we are still investigating why that may be.  These routines fail only occasionally but it turns out that, in Adiabat_1ph at least, that this is the case for cpx at 1155 oC.  Furthermore, the 'back-up plan' used is not as appropriate for this particular bulk composition (that may, for example, be expected to give relatively TiO2-rich pyroxenes) as it is for peridotite-liquid systems.

Version 1.8 contains a workaround so that on rare occasions when the estimation routine fails the 'back-up plan' should adapt better to different bulk compositions.  For the calculation described above, this modification means that cpx is stabilised at 1150 oC: only one temperature increment late.  The amount stabilised is ~3g so not much above that expected and, as olivine is not stabilised prematurely, the calculation continues like the CORBA MELTS for subsequent iterations.  Hopefully that will be good enough until we get to the bottom of the differences between the various MELTS versions.

Paula


jcwhite

Paula,

The fix seems to work just fine.  I've run a number of Equilibrium Crystallization simulations with both the analysis described above and another, with H2O between 0.0 and 1.0 and oxygen fugacities between FMQ-2 and FMQ+1, and everything so far seems to look great... at the very least, what I've seen so far compares very favorably with similar runs I've done with Java MELTS (looking just at liquid compositions on F vs. Major Element diagrams).

Thanks!  If anything else goofs up on me, or if I spot any egregious problems, I'll let you know.

John