Viscosity field is not right while using World Builder

Hi all,

I have a subduction model I have been working on and I am trying to recreate it by using World Builder for the ease of future development, but I am running into this issue where I can’t get the same viscosity values even though I am using the same values for prefactor, activation energy, and activation volume etc. See the figure below for viscosity fields and viscosity change with the depth of the two models at x = 2000km, and for the prm files and the wb file. The bottom model is the one that utilizes World Builder.

Normal subduction model prm:

####  Global parameters
set Dimension                              = 2
set Start time                             = 0
set End time                               = 50e6
set Use years in output instead of seconds = true
set Nonlinear solver scheme                = iterated Advection and Newton Stokes
set Nonlinear solver tolerance             = 1e-3
set Maximum time step                      = 1e3
set Maximum first time step                = 100
set Maximum relative increase in time step = 20
set Max nonlinear iterations               = 30
set CFL number                             = 0.1
set Output directory                       = sub2col_v99

set Pressure normalization                 = no

subsection Solver parameters
  subsection Stokes solver parameters
    set Linear solver tolerance                = 1e-4
    set Number of cheap Stokes solver steps    = 100
  end
  subsection Newton solver parameters
    set Max pre-Newton nonlinear iterations = 100
    set Nonlinear Newton solver switch tolerance = 1e-4
    set Max Newton line search iterations = 0
    set Maximum linear Stokes solver tolerance = 1e-1
    set Use Newton residual scaling method = false
    set Use Newton failsafe = true
    set Stabilization preconditioner = SPD
    set Stabilization velocity block = SPD
    set Use Eisenstat Walker method for Picard iterations = true
  end
end


# Model geometry (660 km deep aspect ratio 7:1)
subsection Geometry model
  set Model name = box
  subsection Box
    set X repetitions = 14
    set Y repetitions = 2
    set X extent      = 4620e3
    set Y extent      = 660e3
    set X periodic    = true
  end
end

# Mesh refinement specifications (no mesh refinement)
subsection Mesh refinement
  set Initial adaptive refinement        = 0
  set Initial global refinement          = 5

end

# Number and names of compositional fields
#   crust = oceanic crust = weak layer on subducting plate
#   plateau = buoyant continental crust that forms continental
subsection Compositional fields
  set Number of fields = 2
  set Names of fields = crust, plateau

end

# Spatial domain of different compositional fields
# For symbols used, see temperature distribution.
# Composition distribution pseudo code:
# For crust distribution:
#    if (z<dc) then
#       top layer: assign crust everywhere
#    else
#       if (distance from point (xt,zt) smaller than r and larger than r-dc,
#           and x>xt and z<zs ) then
#          assign crust
#       else
#          no crust
#       endif
#    endif
# For plateau distribution:
#    if (x<xt, i.e. in subducting plate) then
#       if (xpr-wp < x < xpr and z<dp) then
#          assign plateau
#       else
#          no plateau
#       endif
#    else
#       if (distance from point (xt,zt) larger than r and
#                x<xt+wp and z<dp) then
#          assign plateau
#       else
#          no plateau
#       endif
#    endif
subsection Initial composition model
  set Model name = function
  subsection Function
    set Variable names      = x,y
    set Function constants = h=660e3, ar=7, ts=273, tm=1300, dc=6e3, xt=2640e3, wocrhs=1320e3, \
                             xpr=1000e3, wp=400e3, dp=40e3, \
                             r=6e5, zs=3e5, kappa=1e-6, aget=2.52e15
    set Function expression = \
          if( (h-y)<dc, \
            1, \
            if( sqrt((x-xt)*(x-xt)+(h-r-y)*(h-r-y))<r && \
                sqrt((x-xt)*(x-xt)+(h-r-y)*(h-r-y))>(r-dc) && \
                x>xt && \
                y>h-zs, 1, 0) \
            ); \
          if( x<xt, \
            if( (x>xpr-wp && x<xpr && (h-y)<dp), 1, 0), \
            if( sqrt((x-xt)*(x-xt)+(h-r-y)*(h-r-y))>r && \
                (x<(xt+wp) && (h-y)<dp), 1, 0) \
            )
  end
end

# Temperature boundary conditions
subsection Boundary temperature model
  set Fixed temperature boundary indicators   = bottom, top
  set List of model names = box
  subsection Box
    set Bottom temperature = 1573
    set Top temperature    =  273
  end
end

##Free Surface
subsection Mesh deformation
  set Mesh deformation boundary indicators = top: free surface
  
  subsection Free surface
    set Free surface stabilization theta = 0.6
    set Surface velocity projection = normal
  end
end

# Boundary classifications
subsection Boundary velocity model
  set Tangential velocity boundary indicators = bottom
end

subsection Nullspace removal
  set Remove nullspace = net x translation
end

# Initial temperature field
subsection Initial temperature model
  set Model name = function
  subsection Function
    set Variable names = x,y
    # h      = box height
    # ar     = aspect ratio of box
    # ts     = surface temperature
    # tm     = mantle temperature
    # dc     = crustal thickness (= thickness of weak zone)
    # xt     = x-position of trench
    # wocrhs = width of oceanic lithoshere on rhs of overriding continent
    # xpr    = x-coord of right edge of buoyant plateau
    # wp     = width of buoyant plateau
    # dp     = crustal thickness in buoyant plateau
    # eps    = a very small number to avoid division by zero age
    # r      = slab bending radius
    # zs     = max initial slab depth
    # kappa  = thermal diffusivity
    # aget   = age of plate, e.g. 100 (Myrs) *1e6*365*24*3600=100*3.15e13=3.15e15 sec
    #
    # Temperature distribution pseudo code:
    # if (x<xt) then
    #    apply halfspace cooling (HSC) geotherm with age increasing from t=0 at lhs
    #        to age = aget at x=xt (the trencha location)
    # else
    #    if (distance from slab curvature origin (at coordinates (x,z)=(xtr,r)) < r AND z<zs) then
    #       location is inside bending slab, so apply HSC geotherm with T=ts at radius r, and
    #          T increasing for radius smaller than r.
    #    else
    #       apply overriding plate linear geotherm:
    #       if x<ar*h-wocrhs (i.e. distance from rhs boundary > wocrhs) then
    #           apply HSC geotherm for plate age aget
    #       else
    #           apply HSC geotherm with age decreasing from
    #               age = aget at distance wocrhs from rhs boundary
    #               to age = 0 at rhs boundary
    #       endif
    #    endif
    # endif
    # with half-space geotherm: T=Tm*(1-erfc(z/(2*sqrt(kappa*t)))).
    set Function constants = h=660e3, ar=7, ts=273, tm=1300, dc=6e3, xt=2640e3, wocrhs=1320e3, \
                             xpr=1000e3, wp=400e3, dp=40e3, eps=1e-5,\
                             r=6e5, zs=3e5, kappa=1e-6, aget=2.52e15
    set Function expression = \
          if(x<xt, \
               ts+tm*(1-erfc((h-y)/(abs(2*sqrt(kappa*x/xt*aget)+eps)))), \
               if((sqrt((x-xt)*(x-xt)+(h-r-y)*(h-r-y))<=r && y>h-zs), \
                  ts+tm*(1-erfc((r-sqrt((x-xt)*(x-xt)+(h-r-y)*(h-r-y)))/(2*sqrt(kappa*aget)))),\
                  if (x<ar*h-wocrhs, \
                     ts+tm*(1-erfc((h-y)/(2*sqrt(kappa*aget)))), \
                     ts+tm*(1-erfc((h-y)/(abs(2*sqrt(kappa*(ar*h-x)/wocrhs*aget))+eps))) \
                     ) \
                 ) \
            )
  end
end

# Constant internal heat production values (W/m^3)
subsection Heating model
  set List of model names = compositional heating
  subsection Compositional heating
    set Compositional heating values = 0.
  end
end

subsection Material model
  set Model name = visco plastic

  subsection Visco Plastic
    set Viscous flow law = composite

    # Reference temperature and viscosity
    set Reference temperature = 293
    set Reference viscosity = 1e22

    # The reference strain-rate is used on the first non-linear iteration
    # of the first time step when the velocity has not been determined yet.
    set Reference strain rate = 1.e-16

    # Limit the viscosity with minimum and maximum values
    set Minimum viscosity = 1e18
    set Maximum viscosity = 1e23

    # Material properties
    set Thermal diffusivities = 1.333333e-6
    set Heat capacities       =        750.
    set Densities             =        3300, 3300, 2900
    set Thermal expansivities =        2e-5

    # Harmonic viscosity averaging
    set Viscosity averaging scheme = harmonic

    set Prefactors for diffusion creep          =  1.5e-16, 1e-50, 1.5e-16
    set Activation energies for diffusion creep =   375.e3,  0.e3, 375.e3
    set Activation volumes for diffusion creep  =    3.e-6,    0., 3.e-6

    set Prefactors for dislocation creep          =  1.1e-16, 1e-50, 1.1e-16
    set Stress exponents for dislocation creep    =      3.5,   1.0,     3.5
    set Activation energies for dislocation creep =   530.e3,   0.0,  530.e3
    set Activation volumes for dislocation creep  =   14.e-6,   0.0,  14.e-6

    # Plasticity parameters
    set Angles of internal friction =   5.7392, 0., 5.7392
    set Cohesions                   = 1e6, 5e6, 1e6
    set Maximum yield stress        = 4e8

  end
end

# Gravity model
subsection Gravity model
  set Model name = vertical

  subsection Vertical
    set Magnitude = 9.81
  end
end


# Post processing
subsection Postprocess
  set List of postprocessors = velocity statistics, basic statistics, temperature statistics, visualization, topography
  subsection Visualization
    set List of output variables = density, viscosity, strain rate, error indicator, principal stress, shear stress
    set Output format = vtu
    set Time between graphical output = 1e5
    set Interpolate output = true
    set Number of grouped files       = 1
  end

  subsection Topography
    set Output to file = true
    set Time between text output = 2e5
  end

end

World Builder Model prm:

#### World Builder parameters which can be used by ASPECT ######## World Builder parameters which can be used by ASPECT ####
set World builder file = sub2col_v4.wb

set Dimension = 2
set Start time                             = 0
set End time                               = 50e6
set Pressure normalization                 = no
set Maximum time step                      = 1e4
set Maximum first time step                = 100
set Maximum relative increase in time step = 20
set Use years in output instead of seconds = true

set Nonlinear solver scheme                = iterated Advection and Stokes
set Max nonlinear iterations               = 30
set Nonlinear solver tolerance             = 1e-3
set CFL number                             = 0.1
subsection Solver parameters
  subsection Stokes solver parameters
    set Linear solver tolerance                = 1e-4
    set Number of cheap Stokes solver steps    = 100
  end
end

set Output directory = sub2col_base_v68

subsection Initial temperature model
    set Model name = world builder
end

subsection Boundary temperature model
  set Fixed temperature boundary indicators = bottom, top
  set List of model names = box
  subsection Box
    set Bottom temperature = 1600
    set Top temperature    =  273
  end
end

subsection Initial composition model
    set Model name = world builder
end

#### parameters needed by ASPECT when using compositions ####
subsection Compositional fields
   set Number of fields = 5
   set Names of fields = Oceanic_Plate, Mantle, Plateau_Crust, Plateau_Mantle, Oceanic_Crust
   set Compositional field methods = particles, particles, particles, particles, particles
   set Mapped particle properties = Oceanic_Plate: initial Oceanic_Plate, Mantle: initial Mantle, Plateau_Crust: initial Plateau_Crust, Plateau_Mantle: initial Plateau_Mantle, Oceanic_Crust: initial Oceanic_Crust
end

subsection Geometry model
  set Model name = box
  subsection Box
    set X extent = 4620e3
    set Y extent = 660e3
#    set Z extent = 660e3
    set X repetitions = 231
    set Y repetitions = 33
#    set X periodic = true
  end
end

subsection Mesh refinement
  set Initial adaptive refinement        = 0
  set Initial global refinement          = 0
end

##Free Surface
subsection Mesh deformation
  set Mesh deformation boundary indicators = top: free surface
  subsection Free surface
    set Free surface stabilization theta = 0.6
    set Surface velocity projection = normal
  end
end

##Boundary classifications
subsection Boundary velocity model
  set Tangential velocity boundary indicators = bottom, left, right
end


subsection Material model
  set Model name = visco plastic

  subsection Visco Plastic
    set Viscous flow law = composite

    # Reference temperature and viscosity
    set Reference temperature = 293
    set Reference viscosity = 1e22

    # The reference strain-rate is used on the first non-linear iteration
    # of the first time step when the velocity has not been determined yet.
    set Reference strain rate = 1.e-16
    set Minimum strain rate = 1.e-20

    # Limit the viscosity with minimum and maximum values
    set Minimum viscosity = 1e18
    set Maximum viscosity = 1e23

    # Material properties
    set Thermal diffusivities = 1.333333e-6
    set Heat capacities       =        750.

                                       #Oceanic_Plate, Mantle, Plateau_Crust, Plateau_Mantle, Oceanic_Crust
    set Densities             =        3300, 3300, 3300,  2900, 3300, 3300
    set Thermal expansivities =        2e-5

    # Harmonic viscosity averaging
    set Viscosity averaging scheme = harmonic

    set Prefactors for diffusion creep          =  1.5e-16 , 1.5e-16, 1.5e-16,  8.88e-15,  1.5e-16, 1e-28
    set Activation energies for diffusion creep =   375.e3 , 375.e3,  375.e3,   375.e3,   375.e3, 0
    set Activation volumes for diffusion creep  =    3.e-6 , 3.e-6,   3.e-6,    6.e-6,    3.e-6, 0

    set Prefactors for dislocation creep          =   1.1e-16,   1.1e-16,  1.1e-16,  8.57e-28,  1.1e-16,    1e-50
    set Stress exponents for dislocation creep    =      3.5,     3.5,       3.5,       4.0,       3.5,         1
    set Activation energies for dislocation creep =   530.e3,     530.e3,    530.e3,    167.e3,    530.e3,      0
    set Activation volumes for dislocation creep  =   14.e-6,     14.e-6,    14.e-6,     14.e-6,    14.e-6,     0

    # Plasticity parameters
    set Angles of internal friction =   5.7392, 5.7392, 5.7392, 5.7392, 5.7392, 0
    set Cohesions                   =   1e6, 1e6, 1e6, 1e6, 1e6, 5e6
    set Maximum yield stress        =   4e8

  end
end

subsection Gravity model
  set Model name = vertical
end

# Post processing
subsection Postprocess
  set List of postprocessors = velocity statistics, basic statistics, temperature statistics, visualization, topography, particles
  subsection Visualization
    set List of output variables = density, viscosity, strain rate, error indicator
    set Output format = vtu
    set Time between graphical output = 2e5
  end
 
  subsection Topography
    set Output to file = true
    set Time between text output = 5e5
  end

   subsection Particles
    set Number of particles = 1400000
    set Time between data output = 1e6
    set Data output format = vtu
    set List of particle properties = velocity, initial composition
    set Interpolation scheme = cell average
    set Update ghost particles = true
    set Particle generator name = random uniform
  end
end

World Builder Model wb:

{
  "version":"0.4",
  "cross section":[[0,330e3],[4620e3,330e3]],
  "coordinate system":{"model":"cartesian"},
  "features":
  [

    {"model":"oceanic plate", "name":"Subducting Plate", "max depth":100e3,
     "coordinates":[[0,0],[0,660e3],[2600e3,660e3],[2600e3,0e3]],
     "temperature models":
     [
       {"model":"plate model", "max depth":100e3, "spreading velocity":0.01,
       "ridge coordinates":[[0e3,-1],[-100e3,2000e3]]}
     ],
     "composition models":[
     {"model":"uniform", "compositions":[4], "min depth":0, "max depth":8e3},
     {"model":"uniform", "compositions":[0], "min depth":8e3,"max depth":100e3}]
    },

    {"model":"continental plate", "name":"Plateau_2", "coordinates":[[600e3,0],[600e3,660e3],[1000e3,660e3],[1000e3,0]],
     "temperature models":[{"model":"linear", "max depth":120e3, "bottom temperature":1573}],
     "composition models":[
     {"model":"uniform", "compositions":[2], "min depth":0, "max depth":20e3},
     {"model":"uniform", "compositions":[3], "min depth":20e3,"max depth":120e3}]
    },

    {"model":"continental plate", "name":"Plateau_1", "coordinates":[[3000e3,0],[3000e3,660e3],[2600e3,660e3],[2600e3,0]],
     "temperature models":[{"model":"linear", "max depth":120e3, "bottom temperature":1573}],
     "composition models":[
     {"model":"uniform", "compositions":[2], "min depth":0, "max depth":20e3},
     {"model":"uniform", "compositions":[3], "min depth":20e3,"max depth":120e3}]
    },

    {"model":"oceanic plate", "name":"Overriding Oceanic Plate", "max depth":100e3,
        "coordinates":[[3000e3,0],[3000e3,660e3],[4620e3,660e3],[4620e3,0e3]],
        "temperature models":
        [
          {"model":"plate model", "max depth":100e3, "spreading velocity":0.01,
          "ridge coordinates":[[4620e3,-1],[4620e3, 660e3]]}
        ],
        "composition models":[
        {"model":"uniform", "compositions":[4], "min depth":0, "max depth":8e3},
        {"model":"uniform", "compositions":[0], "min depth":8e3,"max depth":100e3}]
       },

     {"model":"mantle layer", "name":"upper mantle", "min depth":100e3, "max depth":660e3,
        "coordinates":[[0,0],[0,660e3],[4620e3,660e3],[4620e3,0]],
        "temperature models":[{"model":"uniform", "temperature":1573}],
        "composition models":[{"model":"uniform", "compositions":[1]}]
     },

     {"model":"subducting plate", "name":"Slab",
      "coordinates":[[2600e3,660e3],[2600e3,0]],
      "dip point":[1e7,-1e7],
      "segments":[
          {"length":250e3, "thickness":[100e3], "angle":[0,30]},
          {"length":250e3, "thickness":[100e3], "angle":[30,45]}],
      "temperature models":[{"model":"linear", "max distance slab top":100e3, "top temperature":273, "bottom temperature":1573}],
      "composition models":[
      {"model":"uniform", "compositions":[4], "min distance slab top":0, "max distance slab top":8e3},
      {"model":"uniform", "compositions":[0], "min distance slab top":8e3,"max distance slab top":100e3}]    }

  ]
}

Both models have similar temperature gradients with uniform mantle temperatures of 1573 K. There is an obvious gradual viscosity increase in the first model where you can observe this easily in the viscosity field but you can’t on the other. What might be causing this?

Hi Ugurcan,

I have not had a chance to look at the files you posted in detail (thanks for providing them!), but do have a few initial questions:

  1. Are the images you posted for t=0? If yes, then I think the difference in the viscosity field must be related to differences in the initial conditions (temperature, composition) between defining them in the .prm file versus the WB file.

  2. Can you do a direct comparison along a set of 1D profiles for the initial temperature and composition?

Cheers,
John

Hello Ugucan,
A couple of issues that I see:

  1. In the Aspect model you have and adiabatic temperature gradient, but in worldbuilder you have constant background temperature. (look for “adiabat” in the Worldbuilder manual)
  2. In the Aspect file you have a half-space temperature model, but in worldbuilder you are using a linear model for the plates - there is a half space temperature model for the plates (and subducting plate/slab) in WorldBuilder, so you should choose that instead.

For the plate, an example of the worldbuilder file input is:
{ “model”:“oceanic plate”, “name”:“Subducting”, “max depth”:150e3,“min depth”:0,
“coordinates” :[[2500e3,100e3],[2500e3,-100e3],[4500e3,-100e3],[4500e3,100e3]],
“temperature models”:[
{“model”:“half space model”,
“min depth”:0, “max depth”:300e3,
“spreading velocity”:0.05,
“top temperature”:273, “bottom temperature”:-1,
“ridge coordinates”: [[[4500e3,-100e3],[4500e3,100e3]]]}],

And for the subducting plate temperature model:

“temperature models”:[
{“model”:“mass conserving”, “density”:3300,
“thermal conductivity”:3.3,“adiabatic heating”:true,
“plate velocity”:0.05,
“ridge coordinates”:[[[4500e3,-100e3],[4500e3,100e3]]],“coupling depth”:100e3,
“shallow dip”:30.0, “taper distance”:100e3,
“min distance slab top”:-100e3, “max distance slab top”:200e3}],

Hope this helps.
Magali

Hi John and Magali,

Thank you for your replies.

John,

  1. The images are not t=0 but from the 1st timestep, in this case, ~100k years. I have used these rather than t=0, because the viscosities seem a bit off at t=0 because of the free surface until everything settles down, I think.

  2. Below you can find T fields along with T profiles at x = 2000 km (green line is the world builder model),

and density fields with compositions plotted at x = 800km. The way I set up the compositional fields in the two models is a bit different. Aspect model is more simplistic with 2 distinct compositional fields (oceanic crust and plateau/continent), but on the world builder model I have pretty much defined every layer separately.

Magali,

  1. This confused me a little because I thought I wasn’t using an adiabatic gradient in the Aspect model. Can you point out the related term in the prm file? I am sorry if this is too obvious.

  2. I was not aware that world builder had half-space cooling. Thank you so much for letting me know and for the examples, they are really helpful.

Best,
Ugurcan

Hello Ugurcan,

I had not seen your added message.
I realize in the first message, that you only showed the viscosity for the two models and so I was guessing that a difference in the adiabat was the issue. My understanding is that in WorldBuilder the default is that there is an adiabatic gradient (and it is defined using an equation, which is different than the integration that Aspect does, so they can be a little bit different). Although it seems from your images that you don’t have an adiabatic gradient. So I don’t know why the viscosity fields are different. If the temperature gradients below that lithosphere are the same, then there should be no difference in the viscosity that Aspect calculates.

However, it seems that your temperature profiles are the same. So, I’m not sure what the issue is. Perhaps @MFraters can provide some advice. The other thing I would suggest is to make a very simple comparison without all the different compositional layers, etc… to just test your understanding of the input parameters in WorldBuilder compared to what Aspect does. I’m sorry but I’m not sure how else to help.
Magali

Hello Ugurcan,

The default temperature in the world builder is indeed an adiabatic gradient. In the world builder model you are showing there is a model called mantle layer which overwrites the default temperature with a temperature of 1573, so if you don’t want that you need to remove that line or change the model to something you want. I would suspect that that would make the model results a whole lot closer.

Hi Magali and Menno,

When I removed the “mantle layer” from the world builder file, indeed I get an adiabatic gradient but this makes it even more different than the aspect model (see the temperature and viscosity fields for the adiabatic world builder model below).

So, I think adding a separate mantle layer with a uniform temperature was the correct thing to do because the temperature gradient in the original Aspect model is not adiabatic. I still do not understand where the difference is coming from since, as Magali said, the temperatures (and rheological parameters) in the mantle are roughly the same. I will take Magali’s advice and try to simplify the problem but if you have any further suggestions I would be happy to hear them.

Best,

Ugurcan