Interface State Details

Predicting interface states

The MAESTROeX hyperbolic equations come in two forms: advective and conservative. The procedure for predicting interface states differs slightly depending on which form we are dealing with.

Advective form

Most of the time, we are dealing with equations in advective form. Here, a scalar, ϕ, obeys:

(134)ϕt=Uϕ+f

where f is the force. This is the form that the perturbation equations take, as well as the equation for Xk itself.

A piecewise linear prediction of ϕ to the interface would appear as:

(135)ϕi+1/2,jn+1/2=ϕi,jn+Δx2ϕx|i,j+Δt2ϕt|i,j=ϕi,jn+Δx2ϕx|i,j+Δt2(uϕxvϕy+f)=ϕi,jn+Δx2(1ΔtΔxu)ϕxΔt2vϕy``transverse~term''+Δt2f

(see the Godunov notes section for more details). Here, the “transverse term” is accounted for in MakeEdgeScal. Any additional forces should be added to f. For the perturbation form of equations, we add additional advection-like terms to f by calling ModifyScalForce. This will be noted below.

Conservative form

A conservative equation takes the form:

(136)ϕt=(ϕU)+f

Now a piecewise linear prediction of ϕ to the interface is

(137)ϕi+1/2,jn+1/2=ϕi,jn+Δx2ϕx|i,j+Δt2ϕt|i,j=ϕi,jn+Δx2ϕx|i,j+Δt2((ϕu)x(ϕv)y+f)=ϕi,jn+Δx2(1ΔtΔxu)ϕxΔt2ϕux``non-advective~term''Δt2(ϕv)y``transverse~term''+Δt2f

Here the “transverse term” is now in conservative form, and an additional term, the non-advective portion of the x-flux (for the x-prediction) appears. Both of the underbraced terms are accounted for in MakeEdgeScal automatically when we call it with is_conservative = true.

Density Evolution

Basic equations

The full density evolution equation is

(138)ρt=(ρU)=UρρU.

The species are evolved according to

(139)(ρXk)t=(ρUXk)+ρω˙k=U(ρXk)ρXkU+ρω˙k.

In practice, only the species evolution equation is evolved, and the total density is set as

(140)ρ=k(ρXk)

To advance (ρXk) to the next timestep, we need to predict a time-centered, interface state. Algebraically, there are multiple paths to get this interface state—we can predict (ρX) to the edges as a single quantity, or predict ρ and X separately (either in full or perturbation form). In the notes below, we use the subscript ‘edge’ to indicate what quantity was predicted to the edges. In MAESTROeX, the different methods of computing (ρX) on edges are controlled by the species_pred_type parameter. The quantities predicted to edges and the resulting edge state are shown in the Table 4.

Table 4 Summary of species edge state construction

species_pred_type

quantities predicted in make_edge_scal

(ρXk) edge state

1 / predict_rhoprime_and_X

ρedge, (Xk)edge

(ρ0n+12,avg+ρedge)(Xk)edge

2 / predict_rhoX

(ρXk)edge, (ρXk)edge

(ρXk)edge

3 / predict_rho_and_X

ρedge, (Xk)edge

ρedge(Xk)edge

Method 1: species_pred_type = predict_rhoprime_and_X

Here we wish to construct (ρ0n+12,avg+ρedge)(Xk)edge.

We predict both ρ and ρ0 to edges separately and later use them to reconstruct ρ at edges. The base state density evolution equation is

(141)ρ0t=(ρ0w0er)=w0ρ0rρ0w0rρ0 force".

Subtract Eq.141 from Eq.138 and rearrange terms, noting that U=U~+woer, to obtain the perturbational density equation,

(142)ρt=UρρU(ρ0U~)ρ force.

We also need Xk at the edges. Here, we subtract Xk× Eq.138 from Eq.139 to obtain

(143)Xkt=UXk+ω˙k

When using Strang-splitting, we ignore the ω˙k source terms, and then the species equation is a pure advection equation with no force.

Predicting ρ at edges

We define ρ=ρ(1)ρ0n. Then we predict ρ to edges using MakeEdgeScal in DensityAdvance and the underbraced term in Eq.142 as the forcing. This force is computed in ModifyScalForce. This prediction is done in advective form.

Predicting ρ0 at edges

There are two ways to predict ρ0 at edges.

  1. We call make_edge_state_1d using the underbraced term in Eq.141 as the forcing. This gives us ρ0n+12,pred. This term is used to advect ρ0 in Advect Base Density. In plane-parallel geometries, we also use ρ0n+12,pred to compute ηρ, which will be used to compute ψ.

  2. We define ρ0n+12,avg=(ρ0n+ρ0(2))/2. We compute ρ0(2) from ρ0n using Advect Base Density, which advances Eq.141 through Δt in time. The (2) in the superscript indicates that we have not called Correct Base yet, which computes ρ0n+1 from ρ0(2). We use ρ0(2) rather than ρ0n+1 to construct ρ0n+12,avg since ρ0n+1 is not available yet. ρ0n+12,avg is used to construct ρ at edges from ρ at edges, and this ρ at edges is used to compute fluxes for ρXk.

We note that in essence these choices reflect a hyperbolic (1) vs. elliptic (2) approach. In MAESTROeX, if we setup a problem with ρ=ρ0 initially, and enforce a constraint (ρ0U)=0 (i.e. the anelastic constraint), then analytically, we should never generate a ρ. To realize this behavior numerically, we use ρ0n+12,avg in the prediction of (ρXk) on the edges to be consistent with the use of the average of ρ to the interfaces in the projection step at the end of the algorithm.

Computing ρ at edges

For the non-radial edges, we directly add ρ0n+12,avg to ρ since ρ0n+12,avg is a cell-centered quantity. For the radial edges, we interpolate to obtain ρ0n+12,avg at radial edges before adding it to ρ.

Predicting Xk at edges

Predicting Xk is straightforward. We convert the cell-centered (ρXk) to Xk by dividing by ρ in each zone and then we just call MakeEdgeScal in DensityAdvance on Xk. The force seen by MakeEdgeScal is 0. The prediction is done in advective form.

Method 2: species_pred_type = predict_rhoX

Here we wish to construct (ρXk)edge by predicting (ρXk) to the edges as a single quantity. We recall Eq.139:

(144)(ρXk)t=(ρUXk)+ρω˙k.

The edge state is created by calling MakeEdgeScal in DensityAdvance with is_conservative = true. We do not consider the ρω˙k term in the forcing when Strang-splitting.

We note that even though it is not needed here, we still compute ρedge=(ρXk)edge at the edges since certain enthalpy formulations need it.

Method 3: species_pred_type = predict_rho_and_X

Here we wish to construct ρedge(Xk)edge by predicting ρ and Xk to the edges separately.

Predicting Xk to the edges proceeds exactly as described above.

Predicting the full ρ begins with Eq.138:

(145)ρt=UρρUρ force''.

Using this, ρ is predicted to the edges using MakeEdgeScal in DensityAdvance, with the underbraced force computed in ModifyScaleForce with fullform = true.

Advancing ρXk

The evolution equation for ρXk, ignoring the reaction terms that were already accounted for in React, and the associated discretization is:

  • species_pred_type = predict_rhoprime_and_X :

    (146)ρXkt={[(ρ0n+12,avg+ρedge)(Xk)edge](U~+w0er)}.
  • species_pred_type = predict_rhoX :

    (147)ρXkt={[(ρXk)edge](U~+w0er)}.
  • species_pred_type = predict_rho_and_X :

    (148)ρXkt={[ρedge(Xk)edge](U~+w0er)}.

Energy Evolution

Basic equations

MAESTROeX solves an enthalpy equation. The full enthalpy equation is

(149)(ρh)t=(ρhU)+Dp0Dt+kthT+ρHnuc+ρHext=U(ρh)ρhU(ρhU)+ψ+(U~er)p0rDp0/Dt+kthT+ρHnuc+ρHext.

Due to Strang-splitting of the reactions, the call to react_state has already been made. Hence, the goal is to compute an edge state enthalpy starting from (ρh)(1) using an enthalpy equation that does not include the ρHnuc and ρHext terms, where were already accounted for in react_state, so our equation becomes

(150)(ρh)t=U(ρh)ρhU+ψ+(U~er)p0r+kthT(ρh) force"

We define the base state enthalpy evolution equation as

(151)(ρh)0t=[(ρh)0w0er]+D0p0Dt=w0(ρh)0r(ρh)0w0r+ψ(ρh)0 force"

Perturbational enthalpy formulation

Subtracting Eq.151 from Eq.150 and rearranging terms gives the perturbational enthalpy equation

(152)(ρh)t=[(ρh)U][(ρh)0U~]+(U~er)p0r+kthT=U(ρh)(ρh)U[(ρh)0U~]+(U~er)p0r+kthT(ρh) force",

Temperature formulation

Alternately, we can consider an temperature evolution equation, derived from enthalpy, as:

(153)Tt=UT+1ρcp{(1ρhp)[ψ+(U~er)p0r]+kthTkρξkω˙k+ρHnuc+ρHext}.

Again, we neglect the reaction terms, since that will be handled during the reaction step, so we can write this as:

(154)Tt=UT+1ρcp{(1ρhp)[ψ+(U~er)p0r]+kthT}T force''.

Pure enthalpy formulation

A final alternative is to consider an evolution equation for h alone. This can be derived by expanding the derivative of (ρh) in Eq.150 and subtracting off h× the continuity equation (Eq.138):

(155)ht=Uh+1ρ{ψ+(U~er)p0r+kthT}h force''.

Prediction requirements

To update the enthalpy, we need to compute an interface state for (ρh). As with the species evolution, there are multiple quantities we can predict to the interfaces to form this state, controlled by enthalpy_pred_type. A complexity of the enthalpy evolution is that the formation of this edge state will depend on species_pred_type.

The general procedure for making the (ρh) edge state is as follows:

  1. predict (ρh), (ρh), h, or T to the edges (depending on enthalpy_pred_type ) using MakeEdgeScal and the forces identified in the appropriate evolution equation (Eq.152, Eq.154, or Eq.155 respectively).

    The appropriate forces are summaried below.

  2. if we predicted T, convert this predicted edge state to an intermediate “enthalpy” state (the quotes indicate that it may be perturbational or full enthalpy) by calling the EOS.

  3. construct the final enthalpy edge state in mkflux. The precise construction depends on what species and enthalpy quantities are input to mkflux.

Finally, when MAESTROeX is run with use_tfromp = T, the temperature is derived from the density, basestate pressure (p0), and Xk. When run with reactions or external heating, react_state updates the temperature after the reaction/heating term is computed. In use_tfromp = T mode, the temperature will not see the heat release, since the enthalpy does not feed in. Only after the hydro update does the temperature gain the effects of the heat release due to the adjustment of the density (which in turn sees it through the velocity field and S). As a result, the enthalpy_pred_types that predict temperature to the interface ( predict_T_then_rhoprime and predict_T_then_h ) will not work. MAESTROeX will abort if the code is run with this combination of parameters.

The behavior of enthalpy_pred_type is:

  • enthalpy_pred_type = 0 (predict_rhoh) : we predict (ρh). The advective force is:

    (156)[ψ+(U~er)p0r+kthT]
  • enthalpy_pred_type = 1 (predict_rhohprime) : we predict (ρh). The advective force is:

    (157)(ρh)(U~+w0er)(U~(ρh)0)+(U~er)p0r+kthT
  • enthalpy_pred_type = 2 (predict_h) : we predict h. The advective force is:

    (158)1ρ[ψ+(U~er)p0r+kthT]
  • enthalpy_pred_type = 3 (predict_T_then_rhohprime) : we predict T. The advective force is:

    (159)1ρcp{(1ρhp)[ψ+(U~er)p0r]+kthT}
  • enthalpy_pred_type = 4 (predict_T_then_h) : we predict T. The advective force is:

    (160)1ρcp{(1ρhp)[ψ+(U~er)p0r]+kthT}

The combination of species_pred_type and enthalpy_pred_type determine how we construct the edge state. The variations are:

  • species_pred_type = 1 (predict_rhoprime_and_X)

    • enthalpy_pred_type = 0 (predict_rhoh) :

      • cell-centered quantity predicted in MakeEdgeScal : (ρh)

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : (ρh)edge

    • enthalpy_pred_type = 1 (predict_rhohprime) :

      • cell-centered quantity predicted in MakeEdgeScal : (ρh)

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : [(ρh)0n+12,avg+(ρh)edge]

    • enthalpy_pred_type = 2 (predict_h)

      • cell-centered quantity predicted in MakeEdgeScal : h

      • intermediate “enthalpy” edge state : hedge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : (ρ0n+12,avg+ρedge)hedge

    • enthalpy_pred_type = 3 (predict_T_then_rhohprime)

      • cell-centered quantity predicted in MakeEdgeScal : T

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : [(ρh)0n+12,avg+(ρh)edge]

    • enthalpy_pred_type = 4 {predict_T_then_h)

      • cell-centered quantity predicted in MakeEdgeScal : T

      • intermediate “enthalpy” edge state : hedge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : (ρ0n+12,avg+ρedge)hedge

  • species_pred_type = 2 (predict_rhoX)

    • enthalpy_pred_type = 0 (predict_rhoh)

      • cell-centered quantity predicted in MakeEdgeScal : (ρh)

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : (ρX)edge, (ρX)edge

      • final (ρh) edge state : (ρh)edge

    • enthalpy_pred_type = 1 (predict_rhohprime)

      • cell-centered quantity predicted in MakeEdgeScal : (ρh)

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : (ρX)edge, (ρX)edge

      • final (ρh) edge state : [(ρh)0n+12,avg+(ρh)edge]

    • enthalpy_pred_type = 2 (predict_h)

      • cell-centered quantity predicted in MakeEdgeScal : h

      • intermediate “enthalpy” edge state : hedge

      • species quantity available in mkflux : (ρX)edge, (ρX)edge

      • final (ρh) edge state : (ρX)edgehedge

    • enthalpy_pred_type = 3 (predict_T_then_rhohprime)

      • cell-centered quantity predicted in MakeEdgeScal : T$

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : (ρX)edge, (ρX)edge

      • final (ρh) edge state : [(ρh)0n+12,avg+(ρh)edge]

    • enthalpy_pred_type = 4 (predict_T_then_h)

      • cell-centered quantity predicted in MakeEdgeScal : T

      • intermediate “enthalpy” edge state : hedge

      • species quantity available in mkflux : (ρX)edge, (ρX)edge

      • final (ρh) edge state : (ρX)edgehedge

  • species_pred_type = 3 (predict_rho_and_X)

    • enthalpy_pred_type = 0 (predict_rhoh)

      • cell-centered quantity predicted in MakeEdgeScal : (ρh)

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : (ρh)edge

    • enthalpy_pred_type = 1 (predict_rhohprime)

      • cell-centered quantity predicted in MakeEdgeScal : (ρh)

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : [(ρh)0n+12,avg+(ρh)edge]

    • enthalpy_pred_type = 2 (predict_h)

      • cell-centered quantity predicted in MakeEdgeScal : h

      • intermediate “enthalpy” edge state : hedge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : ρedgehedge

    • enthalpy_pred_type = 3 (predict_T_then_rhohprime)

      • cell-centered quantity predicted in MakeEdgeScal : T

      • intermediate “enthalpy” edge state : (ρh)edge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : [(ρh)0n+12,avg+(ρh)edge]

    • enthalpy_pred_type = 4 (predict_T_then_h)

      • cell-centered quantity predicted in MakeEdgeScal : T

      • intermediate “enthalpy” edge state : hedge

      • species quantity available in mkflux : Xedge, ρedge

      • final (ρh) edge state : ρedgehedge

Method 0: enthalpy_pred_type = predict_rhoh

Here we wish to construct (ρh)edge by predicting (ρh) to the edges directly. We use MakeEdgeScal with is_conservative = .true. on (ρh), with the underbraced term in Eq.150 as the force (computed in mkrhohforce).

Method 1: enthalpy_pred_type = predict_rhohprime

Here we wish to construct [(ρh)0n+12,avg+(ρh)edge] by predicting (ρh) to the edges.

Predicting (ρh) at edges

We define (ρh)=(ρh)(1)(ρh)0n. Then we predict (ρh) to edges using MakeEdgeScal in enthalpy_advance and the underbraced term in Eq.152 as the forcing (see below for the forcing term). The first two terms in (ρh) force are computed in modify_scal_force, and the last two terms are accounted for in mkrhohforce. For spherical problems, we have found that a different representation of the pressure term in the (ρh) force gives better results, namely:

(161)(U~er)p0rU~p0=(U~p0)p0U~.

Predicting (ρh)0 at edges

We use an analogous procedure described in Section Predicting \rho_0 at edges for computing ρ0n+12,avg to obtain (ρh)0n+12,avg, i.e., (ρh)0n+12,avg=[(ρh)0n+(ρh)0n+1]/2.

For spherical, however, instead of computing (ρh)0 on edges directly, we compute ρ0 and h0 separately at the edges, and multiply to get (ρh)0.

Computing ρh at edges

We use an analogous procedure described in Section Computing \rho at edges for computing ρ at edges to compute ρh at edges.

Method 2: enthalpy_pred_type = predict_h

Here, the construction of the interface state depends on what species quantities are present. In all cases, the enthalpy state is found by predicting h to the edges.

For species_pred_types: predict_rhoprime_and_X, we wish to construct (ρ0+ρedge)hedge.

For species_pred_types: predict_rho_and_X or predict_rhoX, we wish to construct ρedgehedge.

Predicting h at edges

We define h=(ρh)(1)/ρ(1). Then we predict h to edges using MakeEdgeScal in enthalpy_advance and the underbraced term in Eq.155 as the forcing (see below). This force is computed by mkrhohforce and then divided by ρ. Note: mkrhoforce knows about the different enthalpy_pred_types and computes the correct force for this type.

Computing ρh at edges

species_pred_types: predict_rhoprime_and_X:
We use the same procedure described in Section [Computing rho at edges] for computing ρedge from ρ0 and ρedge and then multiply by hedge.

species_pred_types: predict_rhoX:
We already have (ρXk)edge and simply multiply by hedge.

species_pred_types: predict_rho_and_X:
We already have ρedge and simply multiply by hedge.

Method 3: enthalpy_pred_type = predict_T_then_rhohprime

Here we wish to construct [(ρh)0+(ρh)edge] by predicting T to the edges and then converting this to (ρh)edge via the EOS.

Predicting T at edges

We predict T to edges using MakeEdgeScal in enthalpy_advance and the underbraced term in Eq. `[T equation

labeled] <#T equation labeled>`__ as the forcing (see below).

This force is computed by mktempforce.

Converting Tedge to (ρh)edge

We call the EOS in makeHfromRhoT_edge (called from enthalpy_advance) to convert from Tedge to (ρh)edge. For the EOS call, we need Xedge and ρedge. This construction depends on species_pred_type, since the species edge states may differ between the various prediction types (see the “species quantity” notes below). The EOS inputs are constructed as:

species_pred_type

ρ edge state

Xk edge state

predict_rhoprime_and_X

ρ0n+12,avg+ρedge

(Xk)edge

predict_rhoX

k(ρXk)edge

(ρXk)edge/k(ρXk)edge

predict_rho_and_X

ρedge

(Xk)edge

After calling the EOS, the output of makeHfromRhoT_edge is (ρh)edge.

Computing ρh at edges

The computation of the final (ρh) edge state is done identically as the predict_rhohprime version.

Method 4: enthalpy_pred_type = predict_T_then_h

Here, the construction of the interface state depends on what species quantities are present. In all cases, the enthalpy state is found by predicting T to the edges and then converting this to hedge via the EOS.

For species_pred_types`:  ``predict_rhoprime_and_X we wish to construct (ρ0+ρedge)hedge.

For species_pred_type: predict_rhoX, we wish to construct (ρXk)edgehedge.

For species_pred_type: predict_rho_and_X, we wish to construct ρedgehedge.

Predicting T at edges

The prediction of T to the edges is done identically as the predict_T_then_rhohprime version.

Converting Tedge to hedge

This is identical to the predict_T_then_rhohprime version, except that on output, we compute hedge.

Computing ρh at edges

The computation of the final (ρh) edge state is done identically as the predict_h version.

Advancing ρh

We update the enthalpy analogously to the species update in Section 2.5. The forcing term does not include reaction source terms accounted for in React State, and is the same for all enthalpy_pred_types.

(162)(ρh)t={(ρh)edge(U~+w0er)}+(U~er)p0r+ψ.

where (ρh)edge is the edge state for (ρh) computed as listed in the final column of table:pred:hoverview for the given enthalpy_pred_type and species_pred_type.

Experience from toy_convect

Why is toy_convect Interesting?

The toy_convect problem consists of a carbon-oxygen white dwarf with an accreted layer of solar composition. There is a steep composition gradient between the white dwarf and the accreted layer. The convection that begins as a result of the accretion is extremely sensitive to the amount of mixing.

Initial Observations

With use_tfromp = T and cflfac = 0.7 there is a large difference between species_pred_type = 1 and species_pred_type = 2,3 as seen in fig:spec1_vs_23`. species_pred_type = 1 shows quick heating (peak T vs. t) and there is ok agreement between tfromh and tfromp. species_pred_type = 2,3 show cooling (peak T vs. t) and tfromh looks completely unphysical (see Fig. 19). There are also strange filament type features in the momentum plots shown in Fig. 20.

_images/spec1_vs_23.png

Fig. 18 Compare species_pred_type = 1,2,3 with use_tfromp = T, enthalpy_pred_type = 1, cflfac = 0.7

_images/tfromh_unphysical.png

Fig. 19 There are strange filament type features at the bottom of the domain. species_pred_type = 2, enthalpy_pred_type = 1, cflfac = 0.7, use_tfromp = T

_images/mom_filaments.png

Fig. 20 There are strange filament type features at the bottom of the domain. species_pred_type = 2, enthalpy_pred_type = 1, cflfac = 0.7, use_tfromp = T

Using use_tfromp = F and dpdt_factor > 0 results in many runs crashing very quickly and gives unphysical temperature profiles as seen in Fig. 21.

_images/tfrompF_unphys.png

Fig. 21 Compare cflfac = 0.1 with cflfac = 0.7 for use_tfromp = F, dpdt_factor = 0.0, species_pred_type = 2, enthalpy_pred_type = 4

_images/tfrompF_cfl_1vs7.png

Fig. 22 Compare cflfac = 0.1 with cflfac = 0.7 for use_tfromp = F, dpdt_factor = 0.0, species_pred_type = 2, enthalpy_pred_type = 4

Change cflfac and enthalpy_pred_type

With species_pred_type = 1 and cflfac = 0.1, there is much less heating (peak T vs. t) than the cflfac = 0.7 (default). There is also a lower overall Mach number (see Fig. 23) with the cflfac = 0.1 and excellent agreement between tfromh and tfromp.

use_tfromp = F, dpdt_factor = 0.0, enthalpy_pred_type = 3,4 and species_pred_type = 2,3 shows cooling (as seen in use_tfromp = T) with a comparable rate of cooling (see Fig. 24) to the use_tfromp = T case. The largest difference between the two runs is that the use_tfromp = F case shows excellent agreement between tfromh and tfromp with cflfac = 0.7. The filaments in the momentum plot of Fig. 20 are still present.

_images/spec1_cfl_1vs7.png

Fig. 23 Illustrate the comparable cooling rates between use_tfromp = T and use_tfromp = F with dpdt_factor = 0.0 using species_pred_type = 2, enthalpy_pred_type = 3,1

_images/compare_tfromp.png

Fig. 24 Illustrate the comparable cooling rates between use_tfromp = T and use_tfromp = F with dpdt_factor = 0.0 using species_pred_type = 2, enthalpy_pred_type = 3,1

For a given enthalpy_pred_type and use_tfromp = F, species_pred_type = 2 has a lower Mach number (vs. t) compared to species_pred_type = 3.

Any species_pred_type with use_tfromp = F, dpdt_factor = 0.0 and enthalpy_pred_type = 1 shows significant heating, although the onset of the heating is delayed in species_pred_type = 2,3 (see Fig. 25). Only species_pred_type = 1 gives good agreement between tfromh and tfromp.

Comparing cflfac = 0.7 and cflfac = 0.1 with use_tfromp = F, dpdt_factor = 0.0, species_pred_type = 2 and enthalpy_pred_type = 4 shows good agreement overall (see Fig. 22.

_images/compare_tF_d0_h1_s123.png

Fig. 25 Compare the castro.ppm_type CASTRO runs with the species_pred_type MAESTROeX runs.

_images/compare_castro.png

Fig. 26 Compare the castro.ppm_type CASTRO runs with the species_pred_type MAESTROeX runs.

Additional Runs

bds_type = 1

Using bds_type = 1, use_tfromp = F, dpdt_factor = 0.0, species_pred_type = 2, enthalpy_pred_type = 4 and cflfac = 0.7 seems to cool off faster, perhaps due to less mixing. There is also no momentum filaments in the bottom of the domain.

evolve_base_state = F

Using evolve_base_state = F, use_tfromp = F, dpdt_factor = 0.0, species_pred_type = 2 and enthalpy_pred_type = 4 seems to agree well with the normal evolve_base_state = T run.

toy_convect in CASTRO

toy_convect was also run using CASTRO with castro.ppm_type = 0,1. These runs show temperatures that cool off rather than increase (see Fig. 26) which suggests using species_pred_type = 2,3 instead of species_pred_type = 1.

Recommendations

All of these runs suggest that running under species_pred_type = 2 or 3, enthalpy_pred_type = 3 or 4 with either use_tfromp = F and dpdt_factor = 0.0 or use_tfromp = T gives the most consistent results.