ASR Validation Cases

Alkalli-silica reaction in concrete significantly influences the expansion behavior and overall degradation of the concrete structures. ASR expansion is highly dependent on the components of the concrete such as cement types, aggregate types and sizes etc. In addition, environmental conditions such as temperature and humidity also influence the ASR reaction rate. Hence, it is very difficult to obtain a generic ASR expansion model applicable to different concrete. In BlackBear, the ASR expansion model is implemented based on Saouma and Perotti (2006) ASR swelling model, which builds on the model of Ulm et al. (2000). In this model, the reaction rate and the maximum expansion varies with the reactivity of the concrete components and environmental conditions. The details about the model can be found in ConcreteASREigenstrain.

Various researchers have attempted to experimentally observe the ASR behavior in concrete and identify various criteria for ASR expansion. The validations cases in BlackBear are built based on such experiments. These cases not only focuses on the ASR expansion model, but also tests the multi-physics concrete modeling capability of BlackBear.

Free Expansion of Plain Concrete

Wallau et al. (2018) performed prism testing to assess the susceptibility of the concrete structure due to ASR. They demonstrated that the ASR expansion happens in three stages, initial swelling, acceleration, and consolidation of expansion, that is captured by a S-curve. They also showed that the curves could vary widely depending on the aggregate type and concluded that a globally applicable ASR expansion curve might not exist. The initial benchmark cases in Blackbear are built based on these experiments demonstrating how well the model can predict the experimental observations. The properties associated with the ASR extent calculation are tabulated below:

Model ParametersAggregate AAggregate BAggregate C
Maximum Volumetric Expansion1.240.760.38
Characteristic Time (days)8.6866.8417.24
Latency Time (days)16.22-126.1-2.55

Here, the negative latency time indicates the aggregates are highly reactive. Refer to ConcreteASREigenstrain and Wallau et al. (2018) for more details.

Free Expansion of Reinforced Concrete Blocks

Wald et al. (2017) performed a series of experiments to understand how the presence of multiaxial reinforcement affects ASR expansion behavior of concrete. Some of these experiments are modeled here including an unreinforced block (Specimen A1-000b), and several blocks with varying reinforcement configurations (e.g., Specimen A1-002, Specimen A1-211, Specimen A3-102-L1 etc.). The assessment cases also evaluate the effect of the environmental condition on the expansion behavior of the concrete.

Validation Cases

Various assessment cases demonstrating validation of the models against experimental observations are located at blackbear/test/tests/concrete_ASR_validation and blackbear/assessment/asr_validation/wald2017b/analysis.

Input Files

[GlobalParams]
  displacements = 'disp_x disp_y disp_z'
[]

[Mesh]
  [mesh]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 1
    ny = 1
    nz = 1
  []
[]

[AuxVariables]
  [./T]
    order = FIRST
    family = LAGRANGE
    initial_condition = 20.0
  [../]

  [./ASR_ex]
    order = CONSTANT
    family = MONOMIAL
    block = 0
  [../]

  [./ASR_vstrain]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./ASR_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 0
  [../]
  [./ASR_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 0
  [../]
  [./ASR_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 0
  [../]
  [./ASR_strain_xy]
    order = CONSTANT
    family = MONOMIAL
    block = 0
  [../]
  [./ASR_strain_yz]
    order = CONSTANT
    family = MONOMIAL
    block = 0
  [../]
  [./ASR_strain_zx]
    order = CONSTANT
    family = MONOMIAL
    block = 0
  [../]
  [./volumetric_strain]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]

[Modules/TensorMechanics/Master]
  [./concrete]
    block = 0
    strain = SMALL
    add_variables = true
    eigenstrain_names = 'asr_expansion'
    generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_yz stress_zx vonmises_stress hydrostatic_stress elastic_strain_xx elastic_strain_yy elastic_strain_zz strain_xx strain_yy strain_zz '
  [../]
[]

[AuxKernels]
  [./ASR_ex]
    type = MaterialRealAux
    variable = ASR_ex
    block = 0
    property = ASR_extent
    execute_on = 'timestep_end'
  [../]
  [./ASR_vstrain]
    type = MaterialRealAux
    block = 0
    variable = ASR_vstrain
    property = ASR_volumetric_strain
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xx]
    type = RankTwoAux
    block = 0
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_yy]
    type = RankTwoAux
    block = 0
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_zz]
    type = RankTwoAux
    block = 0
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xy]
    type = RankTwoAux
    block = 0
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xy
    index_i = 0
    index_j = 1
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_yz]
    type = RankTwoAux
    block = 0
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yz
    index_i = 1
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_zx]
    type = RankTwoAux
    block = 0
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zx
    index_i = 0
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./volumetric_strain]
    type = RankTwoScalarAux
    scalar_type = VolumetricStrain
    rank_two_tensor = total_strain
    variable = volumetric_strain
  [../]
[]

[Functions]
  [./strain_function]
    type = ParsedFunction
    value = 1.24e-3*(1-exp(-t/86400/8.68))/(1+exp((8.68-t/86400)/16.22))
  [../]
[]

[Materials]
  [elasticity_concrete]
    type = ComputeIsotropicElasticityTensor
    block = 0
    youngs_modulus = 37.3e9
    poissons_ratio = 0.22
  []
  [stress]
    type = ComputeLinearElasticStress
    block = 0
  []

  [ASR_expansion]
    type = ConcreteASREigenstrain
    block = 0
    expansion_type = Isotropic

    reference_temperature  = 20.0
    temperature_unit = Celsius
    max_volumetric_expansion =  1.24e-3

    characteristic_time = 8.68
    latency_time =  16.22
    characteristic_activation_energy = 5400.0
    latency_activation_energy = 9400.0
    stress_latency_factor = 1.0

    compressive_strength = 31.0e6
    compressive_stress_exponent = 0.0

    tensile_strength = 3.2e6
    tensile_retention_factor = 1.0
    tensile_absorption_factor = 1.0

    ASR_dependent_tensile_strength = false
    residual_tensile_strength_fraction = 1.0

    temperature = T
    relative_humidity = 0.0
    rh_exponent = 0.0
    eigenstrain_name = asr_expansion
  []
[]

[BCs]
  [./left]
    type = DirichletBC
    variable = disp_x
    boundary = left
    value = 0.0
  [../]
  [./bottom]
    type = DirichletBC
    variable = disp_y
    boundary = bottom
    value = 0.0
  [../]
  [./back]
    type = DirichletBC
    variable = disp_z
    boundary = back
    value = 0.0
  [../]
[]

[Postprocessors]
  [./ASR_strain]
    type = ElementAverageValue
    variable = ASR_vstrain
    block = 'ANY_BLOCK_ID 0'
  [../]
  [ASR_ext]
    type = ElementAverageValue
    variable = ASR_ex
    block = 'ANY_BLOCK_ID 0'
  []
  [./vonmises]
    type = ElementAverageValue
    variable = vonmises_stress
  [../]
  [./vstrain]
    type = ElementAverageValue
    variable = volumetric_strain
  [../]
[]

[Executioner]
  type       = Transient
  solve_type = 'PJFNK'
  line_search = none
  petsc_options_iname = '-pc_type -ksp_gmres_restart'
  petsc_options_value = 'lu       101'

  dt = 100000
  end_time = 12960000
  l_max_its  = 50
  l_tol      = 1e-6
  nl_max_its = 10
  nl_rel_tol = 1e-9
  nl_abs_tol = 1e-10
[]

[Outputs]
  exodus         = true
  perf_graph     = true
  csv = true
  [./Console]
    type = Console
  [../]
[]
(test/tests/concrete_ASR_validation/asr_validation.i)
 [GlobalParams]
  displacements = 'disp_x disp_y disp_z'
  penalty = 1e12
[]

[Problem]
  type = ReferenceResidualProblem
  reference_vector = 'ref'
  extra_tag_vectors = 'ref'
  group_variables = 'disp_x disp_y disp_z'
[]

[Mesh]
  file = A1-uniaxial.e
[]

[Variables]
  [./T]
    order = FIRST
    family = LAGRANGE
    initial_condition = 10.6
  [../]
  [./rh]
    order = FIRST
    family = LAGRANGE
    initial_condition = 0.8
    block = 1
  [../]
[]

[AuxVariables]
  [./resid_x]
  [../]
  [./resid_y]
  [../]
  [./resid_z]
  [../]
  [./ASR_ex]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_vstrain]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_xy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_yz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_zx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./volumetric_strain]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_conductivity]
    order = CONSTANT
    family = Monomial
  [../]
  [./thermal_capacity]
    order = CONSTANT
    family = Monomial
  [../]
  [./moisture_capacity]
    order = CONSTANT
    family = Monomial
  [../]
  [./humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  [../]
  [./water_content]
    order = CONSTANT
    family = Monomial
  [../]
  [./water_hydrated]
    order = CONSTANT
    family = Monomial
  [../]
  [damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [./area]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./axial_stress]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./axial_strain]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]

[Modules/TensorMechanics/Master]
  [./concrete]
    block = 1
    strain = FINITE
    add_variables = true
    eigenstrain_names = 'asr_expansion thermal_expansion'
    generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_yz stress_zx vonmises_stress hydrostatic_stress elastic_strain_xx elastic_strain_yy elastic_strain_zz strain_xx strain_yy strain_zz'
    extra_vector_tags = 'ref'
  [../]
[]

[Modules/TensorMechanics/LineElementMaster]
  [./Reinforcement_block]
    block = '2 '
    truss = true
    area = area
    displacements = 'disp_x disp_y disp_z'
    #Note: Intentially not including this here to have it give a nonzero
    #      displacement reference residual since it's an unrestrained problem
    #extra_vector_tags = 'ref'
  [../]
[]

[Constraints]
  [./rebar_x2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_x'
    primary_variable = 'disp_x'
    formulation = penalty
  [../]
  [./rebar_y2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_y'
    primary_variable = 'disp_y'
    formulation = penalty
  [../]
  [./rebar_z2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_z'
    primary_variable = 'disp_z'
    formulation = penalty
  [../]
  [./rebar_T2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'T'
    primary_variable = 'T'
    formulation = penalty
    penalty = 1e6
  [../]
[]

[Kernels]
  [./T_td]
    type     = ConcreteThermalTimeIntegration
    variable = T
    block = 1
    extra_vector_tags = 'ref'
  [../]
  [./T_diff]
    type     = ConcreteThermalConduction
    variable = T
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./T_conv]
    type     = ConcreteThermalConvection
    variable = T
    relative_humidity = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./T_adsorption]
    type     = ConcreteLatentHeat
    variable = T
    H = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./rh_td]
    type     = ConcreteMoistureTimeIntegration
    variable = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./rh_diff]
    type     = ConcreteMoistureDiffusion
    variable = rh
    temperature = T
    block = 1
    extra_vector_tags = 'ref'
  [../]
  [./heat_dt]
    type = TimeDerivative
    variable = T
    block = 2
    extra_vector_tags = 'ref'
  [../]
  [./heat_conduction]
    type = HeatConduction
    variable = T
    diffusion_coefficient = 53.0
    block = 2
    extra_vector_tags = 'ref'
  [../]
[]

[AuxKernels]
  [./ASR_ex]
    type = MaterialRealAux
    variable = ASR_ex
    block = 1
    property = ASR_extent
    execute_on = 'timestep_end'
  [../]
  [./ASR_vstrain]
    type = MaterialRealAux
    block = 1
    variable = ASR_vstrain
    property = ASR_volumetric_strain
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_yy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_zz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xy
    index_i = 0
    index_j = 1
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_yz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yz
    index_i = 1
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_zx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zx
    index_i = 0
    index_j = 2
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_xx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_yy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_zz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./volumetric_strain]
    type = RankTwoScalarAux
    scalar_type = VolumetricStrain
    rank_two_tensor = total_strain
    variable = volumetric_strain
    block = 1
  [../]

  [./k]
    type = MaterialRealAux
    variable = thermal_conductivity
    property = thermal_conductivity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./capacity]
    type = MaterialRealAux
    variable = thermal_capacity
    property = thermal_capacity
    execute_on = 'timestep_end'
    block = 1
  [../]

  [./rh_capacity]
    type = MaterialRealAux
    variable = moisture_capacity
    property = moisture_capacity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./rh_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./wc_duff]
    type = MaterialRealAux
    variable = water_content
    property = moisture_content
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./hydrw_duff]
    type = MaterialRealAux
    variable = water_hydrated
    property = hydrated_water
    execute_on = 'timestep_end'
    block = 1
  [../]

  [damage_index]
    type = MaterialRealAux
    block = 1
    variable = damage_index
    property = damage_index
    execute_on = timestep_end
  []
  [./area]
    type = ConstantAux
    block = '2'
    variable = area
    value = 1.33e-4
    execute_on = 'initial timestep_begin'
  [../]
  [./axial_stress]
    type = MaterialRealAux
    block = '2'
    variable = axial_stress
    property = axial_stress
  [../]
[]

[Functions]
  [./ramp_temp]
    type = PiecewiseLinear
    data_file = temperature_history.csv
    format = columns
  [../]

  [./ramp_humidity]
    type = PiecewiseLinear
    data_file = humidity_history.csv
    format = columns
  [../]
[]

[Materials]

  [./concrete]
    type = ConcreteThermalMoisture
    block = 1
    # setup thermal property models and parameters
    # options available: CONSTANT ASCE-1992 KODUR-2004 EUROCODE-2004 KIM-2003
    thermal_conductivity_model =  KODUR-2004
    thermal_capacity_model     =  KODUR-2004
    aggregate_type = Siliceous               #options: Siliceous Carbonate

    ref_density_of_concrete = 2231.0         # in kg/m^3
    ref_specific_heat_of_concrete = 1100.0   # in J/(Kg.0C)
    ref_thermal_conductivity_of_concrete = 3 # in W/(m.0C)

    # setup moisture capacity and humidity diffusivity models
    aggregate_pore_type = dense              #options: dense porous
    aggregate_mass = 1877.0                  #mass of aggregate (kg) per m^3 of concrete
    cement_type = 1                          #options: 1 2 3 4
    cement_mass = 354.0                      #mass of cement (kg) per m^3 of concrete
    water_to_cement_ratio       = 0.5
    concrete_cure_time          = 28.0       #curing time in (days)

    # options available for humidity diffusivity:
    moisture_diffusivity_model = Bazant      #options: Bazant Mensi
    D1 = 3.0e-8

    coupled_moisture_diffusivity_factor = 1.0e-2  # factor for mositure diffusivity due to heat

    # coupled nonlinear variables
    relative_humidity = rh
    temperature = T
  [../]

  [./creep]
    type = LinearViscoelasticStressUpdate
    block = 1
  [../]
  [./logcreep]
    type = ConcreteLogarithmicCreepModel
    block = 1
    poissons_ratio = 0.22
    youngs_modulus = 37.3e9
    recoverable_youngs_modulus = 37.3e9
    recoverable_viscosity = 1
    long_term_viscosity = 1
    long_term_characteristic_time = 1
    humidity = rh
    temperature = T
    activation_temperature = 23.0
  [../]

  [ASR_expansion]
    type = ConcreteASREigenstrain
    block = 1
    expansion_type = Anisotropic

    reference_temperature  = 35.0
    temperature_unit = Celsius
    max_volumetric_expansion = 2.2e-2

    characteristic_time = 18.9
    latency_time = 18.0
    characteristic_activation_energy = 5400.0
    latency_activation_energy = 9400.0
    stress_latency_factor = 1.0

    compressive_strength = 31.0e6
    compressive_stress_exponent = 0.0
    expansion_stress_limit = 8.0e6

    tensile_strength = 3.2e6
    tensile_retention_factor = 1.0
    tensile_absorption_factor = 1.0

    ASR_dependent_tensile_strength = false
    residual_tensile_strength_fraction = 1.0

    temperature = T
    relative_humidity = rh
    rh_exponent = 1.0
    eigenstrain_name = asr_expansion
    absolute_tolerance = 1e-10
    output_iteration_info_on_error = true
  []

  [thermal_strain_concrete]
    type = ComputeThermalExpansionEigenstrain
    block = 1
    temperature = T
    thermal_expansion_coeff = 8.0e-6
    stress_free_temperature = 10.6
    eigenstrain_name = thermal_expansion
  []

  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.1
    block = 1
  []
  [./stress]
    type = ComputeMultipleInelasticStress
    block = 1
    inelastic_models = 'creep'
    damage_model = ASR_damage_concrete
  [../]

  [truss]
    type = LinearElasticTruss
    block = '2 '
    youngs_modulus = 2e11
    temperature = T
    thermal_expansion_coeff = 11.3e-6
    temperature_ref = 10.6
  []

[]

[UserObjects]
  [./visco_update]
    type = LinearViscoelasticityManager
    block = 1
    viscoelastic_model = logcreep
  [../]
[]

[BCs]
  [./left]
    type = DirichletBC
    variable = disp_x
    boundary = '2000 2005'
    value = 0.0
  [../]
  [./bottom]
    type = DirichletBC
    variable = disp_y
    boundary = '2000 2001'
    value = 0.0
  [../]
  [./back]
    type = DirichletBC
    variable = disp_z
    boundary = '2000 2005'
    value = 0.0
  [../]
  [./T]
    type = FunctionDirichletBC
    variable = T
    boundary = '101 102 103 104 105 106'
    function = ramp_temp
  [../]
  [./rh]
    type = FunctionDirichletBC
    variable = rh
    boundary = '101 102 103 104 105 106'
    function = ramp_humidity
  [../]
[]

[Postprocessors]
  [./nelem]
    type = NumElems
  [../]
  [./ndof]
    type = NumDOFs
  [../]
  [./ASR_strain]
    type = ElementAverageValue
    variable = ASR_vstrain
    block = 1
  [../]
  [./ASR_strain_xx]
    type = ElementAverageValue
    variable = ASR_strain_xx
    block = 1
  [../]
  [./ASR_strain_yy]
    type = ElementAverageValue
    variable = ASR_strain_yy
    block = 1
  [../]
  [./ASR_strain_zz]
    type = ElementAverageValue
    variable = ASR_strain_zz
    block = 1
  [../]
  [ASR_ext]
    type = ElementAverageValue
    variable = ASR_ex
    block = 1
  []
  [./vonmises]
    type = ElementAverageValue
    variable = vonmises_stress
    block = 1
  [../]
  [./vstrain]
    type = ElementAverageValue
    variable = volumetric_strain
    block = 1
  [../]
  [./strain_xx]
    type = ElementAverageValue
    variable = strain_xx
    block = 1
  [../]
  [./strain_yy]
    type = ElementAverageValue
    variable = strain_yy
    block = 1
  [../]
  [./strain_zz]
    type = ElementAverageValue
    variable = strain_zz
    block = 1
  [../]
  [./temp]
    type = ElementAverageValue
    variable = T
    block = 1
  [../]
  [./humidity]
    type = ElementAverageValue
    variable = rh
    block = 1
  [../]
  [./thermal_strain_xx]
    type = ElementAverageValue
    variable = thermal_strain_xx
    block = 1
  [../]
  [./thermal_strain_yy]
    type = ElementAverageValue
    variable = thermal_strain_yy
    block = 1
  [../]
  [./thermal_strain_zz]
    type = ElementAverageValue
    variable = thermal_strain_zz
    block = 1
  [../]
  [./disp_x_101]
    type = SideAverageValue
    variable = disp_x
    boundary = 101
  [../]
  [./disp_x_102]
    type = SideAverageValue
    variable = disp_x
    boundary = 102
  [../]
  [./disp_x_103]
    type = SideAverageValue
    variable = disp_x
    boundary = 103
  [../]
  [./disp_x_104]
    type = SideAverageValue
    variable = disp_x
    boundary = 104
  [../]
  [./disp_x_105]
    type = SideAverageValue
    variable = disp_x
    boundary = 105
  [../]
  [./disp_x_106]
    type = SideAverageValue
    variable = disp_x
    boundary = 106
  [../]
  [./disp_y_101]
    type = SideAverageValue
    variable = disp_y
    boundary = 101
  [../]
  [./disp_y_102]
    type = SideAverageValue
    variable = disp_y
    boundary = 102
  [../]
  [./disp_y_103]
    type = SideAverageValue
    variable = disp_y
    boundary = 103
  [../]
  [./disp_y_104]
    type = SideAverageValue
    variable = disp_y
    boundary = 104
  [../]
  [./disp_y_105]
    type = SideAverageValue
    variable = disp_y
    boundary = 105
  [../]
  [./disp_y_106]
    type = SideAverageValue
    variable = disp_y
    boundary = 106
  [../]
  [./disp_z_101]
    type = SideAverageValue
    variable = disp_z
    boundary = 101
  [../]
  [./disp_z_102]
    type = SideAverageValue
    variable = disp_z
    boundary = 102
  [../]
  [./disp_z_103]
    type = SideAverageValue
    variable = disp_z
    boundary = 103
  [../]
  [./disp_z_104]
    type = SideAverageValue
    variable = disp_z
    boundary = 104
  [../]
  [./disp_z_105]
    type = SideAverageValue
    variable = disp_z
    boundary = 105
  [../]
  [./disp_z_106]
    type = SideAverageValue
    variable = disp_z
    boundary = 106
  [../]

  [disp_x_p1_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 -0.08'
  [../]
  [disp_x_p1_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 -0.08'
  [../]
  [disp_x_p2_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 0.08'
  [../]
  [disp_x_p2_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 0.08'
  [../]
  [disp_x_p3_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 -0.08'
  [../]
  [disp_x_p3_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 -0.08'
  [../]
  [disp_x_p4_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 0.08'
  [../]
  [disp_x_p4_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 0.08'
  [../]
  [disp_x_p5_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 -0.235'
  [../]
  [disp_x_p5_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 -0.235'
  [../]
  [disp_x_p6_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 0.235'
  [../]
  [disp_x_p6_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 0.235'
  [../]

  [disp_y_p1_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 -0.08'
  [../]
  [disp_y_p1_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 -0.08'
  [../]
  [disp_y_p2_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 0.08'
  [../]
  [disp_y_p2_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 0.08'
  [../]
  [disp_y_p3_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 -0.08'
  [../]
  [disp_y_p3_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 -0.08'
  [../]
  [disp_y_p4_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 0.08'
  [../]
  [disp_y_p4_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 0.08'
  [../]
  [disp_y_p5_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 -0.235'
  [../]
  [disp_y_p5_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 -0.235'
  [../]
  [disp_y_p6_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 0.235'
  [../]
  [disp_y_p6_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 0.235'
  [../]
  [disp_y_p7_pos]
    type = PointValue
    variable = disp_y
    point = '-0.235 0.24 0.08'
  [../]
  [disp_y_p7_neg]
    type = PointValue
    variable = disp_y
    point = '-0.235 -0.24 0.08'
  [../]
  [disp_y_p8_pos]
    type = PointValue
    variable = disp_y
    point = '0.235 0.24 0.08'
  [../]
  [disp_y_p8_neg]
    type = PointValue
    variable = disp_y
    point = '0.235 -0.24 0.08'
  [../]

  [disp_z_p1_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.08 0.24'
  [../]
  [disp_z_p1_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.08 -0.24'
  [../]
  [disp_z_p2_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.08 0.24'
  [../]
  [disp_z_p2_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.08 -0.24'
  [../]
  [disp_z_p3_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.08 0.24'
  [../]
  [disp_z_p3_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.08 -0.24'
  [../]
  [disp_z_p4_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 0.08 0.24'
  [../]
  [disp_z_p4_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 0.08 -0.24'
  [../]
  [disp_z_p5_pos]
    type = PointValue
    variable = disp_z
    point = '0.235 0.08 0.24'
  [../]
  [disp_z_p5_neg]
    type = PointValue
    variable = disp_z
    point = '0.235 0.08 -0.24'
  [../]
  [disp_z_p6_pos]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.08 0.24'
  [../]
  [disp_z_p6_neg]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.08 -0.24'
  [../]
[]

[Executioner]
  type       = Transient
  solve_type = 'PJFNK'
  line_search = none
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  start_time = 2419200
  dt = 1000000
  automatic_scaling = true
  end_time = 38880000
  l_max_its  = 20
  nl_max_its = 10
  nl_rel_tol = 1e-6
  nl_abs_tol = 1e-10
[]

[Outputs]
  perf_graph = true
  csv = true
  #exodus = true #Turned off to save space
[]

[Debug]
  show_var_residual_norms = true
[]
(assessment/asr_validation/wald2017b/analysis/A1-uniaxial.i)
 [GlobalParams]
  displacements = 'disp_x disp_y disp_z'
  penalty = 1e12
[]

[Problem]
  type = ReferenceResidualProblem
  reference_vector = 'ref'
  extra_tag_vectors = 'ref'
  group_variables = 'disp_x disp_y disp_z'
[]

[Mesh]
  file = A1-biaxial.e
[]

[Variables]
  [./T]
    order = FIRST
    family = LAGRANGE
    initial_condition = 10.6
  [../]
  [./rh]
    order = FIRST
    family = LAGRANGE
    initial_condition = 0.8
    block = 1
  [../]
[]

[AuxVariables]
  [./resid_x]
  [../]
  [./resid_y]
  [../]
  [./resid_z]
  [../]
  [./ASR_ex]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_vstrain]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_xy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_yz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_zx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./volumetric_strain]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_conductivity]
    order = CONSTANT
    family = Monomial
  [../]
  [./thermal_capacity]
    order = CONSTANT
    family = Monomial
  [../]
  [./moisture_capacity]
    order = CONSTANT
    family = Monomial
  [../]
  [./humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  [../]
  [./water_content]
    order = CONSTANT
    family = Monomial
  [../]
  [./water_hydrated]
    order = CONSTANT
    family = Monomial
  [../]
  [damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [./area]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./axial_stress]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./axial_strain]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]

[Modules/TensorMechanics/Master]
  [./concrete]
    block = 1
    strain = FINITE
    add_variables = true
    eigenstrain_names = 'asr_expansion thermal_expansion'
    generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_yz stress_zx vonmises_stress hydrostatic_stress elastic_strain_xx elastic_strain_yy elastic_strain_zz strain_xx strain_yy strain_zz'
    extra_vector_tags = 'ref'
  [../]
[]

[Modules/TensorMechanics/LineElementMaster]
  [./Reinforcement_block]
    block = '2 3'
    truss = true
    area = area
    displacements = 'disp_x disp_y disp_z'
    #Note: Intentially not including this here to have it give a nonzero
    #      displacement reference residual since it's an unrestrained problem
    #extra_vector_tags = 'ref'
  [../]
[]

[Constraints]
  [./rebar_x2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_x'
    primary_variable = 'disp_x'
    formulation = penalty
  [../]
  [./rebar_y2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_y'
    primary_variable = 'disp_y'
    formulation = penalty
  [../]
  [./rebar_z2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_z'
    primary_variable = 'disp_z'
    formulation = penalty
  [../]
  [./rebar_T2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'T'
    primary_variable = 'T'
    formulation = penalty
    penalty = 1e6
  [../]
  [./rebar_x3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_x'
    primary_variable = 'disp_x'
    formulation = penalty
  [../]
  [./rebar_y3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_y'
    primary_variable = 'disp_y'
    formulation = penalty
  [../]
  [./rebar_z3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_z'
    primary_variable = 'disp_z'
    formulation = penalty
  [../]
  [./rebar_T3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'T'
    primary_variable = 'T'
    formulation = penalty
    penalty = 1e6
  [../]
[]

[Kernels]
  [./T_td]
    type     = ConcreteThermalTimeIntegration
    variable = T
    block = 1
    extra_vector_tags = 'ref'
  [../]
  [./T_diff]
    type     = ConcreteThermalConduction
    variable = T
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./T_conv]
    type     = ConcreteThermalConvection
    variable = T
    relative_humidity = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./T_adsorption]
    type     = ConcreteLatentHeat
    variable = T
    H = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./rh_td]
    type     = ConcreteMoistureTimeIntegration
    variable = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./rh_diff]
    type     = ConcreteMoistureDiffusion
    variable = rh
    temperature = T
    block = 1
    extra_vector_tags = 'ref'
  [../]
  [./heat_dt]
    type = TimeDerivative
    variable = T
    block = '2 3'
    extra_vector_tags = 'ref'
  [../]
  [./heat_conduction]
    type = HeatConduction
    variable = T
    diffusion_coefficient = 53.0
    block = '2 3'
    extra_vector_tags = 'ref'
  [../]
[]

[AuxKernels]
  [./ASR_ex]
    type = MaterialRealAux
    variable = ASR_ex
    block = 1
    property = ASR_extent
    execute_on = 'timestep_end'
  [../]
  [./ASR_vstrain]
    type = MaterialRealAux
    block = 1
    variable = ASR_vstrain
    property = ASR_volumetric_strain
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_yy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_zz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xy
    index_i = 0
    index_j = 1
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_yz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yz
    index_i = 1
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_zx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zx
    index_i = 0
    index_j = 2
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_xx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_yy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_zz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./volumetric_strain]
    type = RankTwoScalarAux
    scalar_type = VolumetricStrain
    rank_two_tensor = total_strain
    variable = volumetric_strain
    block = 1
  [../]

  [./k]
    type = MaterialRealAux
    variable = thermal_conductivity
    property = thermal_conductivity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./capacity]
    type = MaterialRealAux
    variable = thermal_capacity
    property = thermal_capacity
    execute_on = 'timestep_end'
    block = 1
  [../]

  [./rh_capacity]
    type = MaterialRealAux
    variable = moisture_capacity
    property = moisture_capacity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./rh_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./wc_duff]
    type = MaterialRealAux
    variable = water_content
    property = moisture_content
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./hydrw_duff]
    type = MaterialRealAux
    variable = water_hydrated
    property = hydrated_water
    execute_on = 'timestep_end'
    block = 1
  [../]

  [damage_index]
    type = MaterialRealAux
    block = 1
    variable = damage_index
    property = damage_index
    execute_on = timestep_end
  []
  [./areax]
    type = ConstantAux
    block = '2'
    variable = area
    value = 1.33e-4
    execute_on = 'initial timestep_begin'
  [../]
  [./areaz]
    type = ConstantAux
    block = '3'
    variable = area
    value = 1.33e-4
    execute_on = 'initial timestep_begin'
  [../]
  [./axial_stress]
    type = MaterialRealAux
    block = '2 3'
    variable = axial_stress
    property = axial_stress
  [../]
[]

[Functions]
  [./ramp_temp]
    type = PiecewiseLinear
    data_file = temperature_history.csv
    format = columns
  [../]

  [./ramp_humidity]
    type = PiecewiseLinear
    data_file = humidity_history.csv
    format = columns
  [../]
[]

[Materials]

  [./concrete]
    type = ConcreteThermalMoisture
    block = 1
    # setup thermal property models and parameters
    # options available: CONSTANT ASCE-1992 KODUR-2004 EUROCODE-2004 KIM-2003
    thermal_conductivity_model =  KODUR-2004
    thermal_capacity_model     =  KODUR-2004
    aggregate_type = Siliceous               #options: Siliceous Carbonate

    ref_density_of_concrete = 2231.0         # in kg/m^3
    ref_specific_heat_of_concrete = 1100.0   # in J/(Kg.0C)
    ref_thermal_conductivity_of_concrete = 3 # in W/(m.0C)

    # setup moisture capacity and humidity diffusivity models
    aggregate_pore_type = dense              #options: dense porous
    aggregate_mass = 1877.0                  #mass of aggregate (kg) per m^3 of concrete
    cement_type = 1                          #options: 1 2 3 4
    cement_mass = 354.0                      #mass of cement (kg) per m^3 of concrete
    water_to_cement_ratio       = 0.5
    concrete_cure_time          = 28.0       #curing time in (days)

    # options available for humidity diffusivity:
    moisture_diffusivity_model = Bazant      #options: Bazant Mensi
    D1 = 3.0e-8

    coupled_moisture_diffusivity_factor = 1.0e-2  # factor for mositure diffusivity due to heat

    # coupled nonlinear variables
    relative_humidity = rh
    temperature = T
  [../]

  [./creep]
    type = LinearViscoelasticStressUpdate
    block = 1
  [../]
  [./logcreep]
    type = ConcreteLogarithmicCreepModel
    block = 1
    poissons_ratio = 0.22
    youngs_modulus = 37.3e9
    recoverable_youngs_modulus = 37.3e9
    recoverable_viscosity = 1
    long_term_viscosity = 1
    long_term_characteristic_time = 1
    humidity = rh
    temperature = T
    activation_temperature = 23.0
  [../]

  [ASR_expansion]
    type = ConcreteASREigenstrain
    block = 1
    expansion_type = Anisotropic

    reference_temperature  = 35.0
    temperature_unit = Celsius
    max_volumetric_expansion = 2.2e-2

    characteristic_time = 18.9
    latency_time = 18.0
    characteristic_activation_energy = 5400.0
    latency_activation_energy = 9400.0
    stress_latency_factor = 1.0

    compressive_strength = 31.0e6
    compressive_stress_exponent = 0.0
    expansion_stress_limit = 8.0e6

    tensile_strength = 3.2e6
    tensile_retention_factor = 1.0
    tensile_absorption_factor = 1.0

    ASR_dependent_tensile_strength = false
    residual_tensile_strength_fraction = 1.0

    temperature = T
    relative_humidity = rh
    rh_exponent = 1.0
    eigenstrain_name = asr_expansion
    absolute_tolerance = 1e-10
    output_iteration_info_on_error = true
  []

  [thermal_strain_concrete]
    type = ComputeThermalExpansionEigenstrain
    block = 1
    temperature = T
    thermal_expansion_coeff = 8.0e-6
    stress_free_temperature = 10.6
    eigenstrain_name = thermal_expansion
  []

  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.1
    block = 1
  []
  [./stress]
    type = ComputeMultipleInelasticStress
    block = 1
    inelastic_models = 'creep'
    damage_model = ASR_damage_concrete
  [../]

  [truss]
    type = LinearElasticTruss
    block = '2 3'
    youngs_modulus = 2e11
    temperature = T
    thermal_expansion_coeff = 11.3e-6
    temperature_ref = 10.6
  []

[]

[UserObjects]
  [./visco_update]
    type = LinearViscoelasticityManager
    block = 1
    viscoelastic_model = logcreep
  [../]
[]

[BCs]
  [./left]
    type = DirichletBC
    variable = disp_x
    boundary = '2000 2005'
    value = 0.0
  [../]
  [./bottom]
    type = DirichletBC
    variable = disp_y
    boundary = '2000 2001'
    value = 0.0
  [../]
  [./back]
    type = DirichletBC
    variable = disp_z
    boundary = '2000 2005'
    value = 0.0
  [../]
  [./T]
    type = FunctionDirichletBC
    variable = T
    boundary = '101 102 103 104 105 106'
    function = ramp_temp
  [../]
  [./rh]
    type = FunctionDirichletBC
    variable = rh
    boundary = '101 102 103 104 105 106'
    function = ramp_humidity
  [../]
[]

[Postprocessors]
  [./nelem]
    type = NumElems
  [../]
  [./ndof]
    type = NumDOFs
  [../]
  [./ASR_strain]
    type = ElementAverageValue
    variable = ASR_vstrain
    block = 1
  [../]
  [./ASR_strain_xx]
    type = ElementAverageValue
    variable = ASR_strain_xx
    block = 1
  [../]
  [./ASR_strain_yy]
    type = ElementAverageValue
    variable = ASR_strain_yy
    block = 1
  [../]
  [./ASR_strain_zz]
    type = ElementAverageValue
    variable = ASR_strain_zz
    block = 1
  [../]
  [ASR_ext]
    type = ElementAverageValue
    variable = ASR_ex
    block = 1
  []
  [./vonmises]
    type = ElementAverageValue
    variable = vonmises_stress
    block = 1
  [../]
  [./vstrain]
    type = ElementAverageValue
    variable = volumetric_strain
    block = 1
  [../]
  [./strain_xx]
    type = ElementAverageValue
    variable = strain_xx
    block = 1
  [../]
  [./strain_yy]
    type = ElementAverageValue
    variable = strain_yy
    block = 1
  [../]
  [./strain_zz]
    type = ElementAverageValue
    variable = strain_zz
    block = 1
  [../]
  [./temp]
    type = ElementAverageValue
    variable = T
    block = 1
  [../]
  [./humidity]
    type = ElementAverageValue
    variable = rh
    block = 1
  [../]
  [./thermal_strain_xx]
    type = ElementAverageValue
    variable = thermal_strain_xx
    block = 1
  [../]
  [./thermal_strain_yy]
    type = ElementAverageValue
    variable = thermal_strain_yy
    block = 1
  [../]
  [./thermal_strain_zz]
    type = ElementAverageValue
    variable = thermal_strain_zz
    block = 1
  [../]
  [./disp_x_101]
    type = SideAverageValue
    variable = disp_x
    boundary = 101
  [../]
  [./disp_x_102]
    type = SideAverageValue
    variable = disp_x
    boundary = 102
  [../]
  [./disp_x_103]
    type = SideAverageValue
    variable = disp_x
    boundary = 103
  [../]
  [./disp_x_104]
    type = SideAverageValue
    variable = disp_x
    boundary = 104
  [../]
  [./disp_x_105]
    type = SideAverageValue
    variable = disp_x
    boundary = 105
  [../]
  [./disp_x_106]
    type = SideAverageValue
    variable = disp_x
    boundary = 106
  [../]
  [./disp_y_101]
    type = SideAverageValue
    variable = disp_y
    boundary = 101
  [../]
  [./disp_y_102]
    type = SideAverageValue
    variable = disp_y
    boundary = 102
  [../]
  [./disp_y_103]
    type = SideAverageValue
    variable = disp_y
    boundary = 103
  [../]
  [./disp_y_104]
    type = SideAverageValue
    variable = disp_y
    boundary = 104
  [../]
  [./disp_y_105]
    type = SideAverageValue
    variable = disp_y
    boundary = 105
  [../]
  [./disp_y_106]
    type = SideAverageValue
    variable = disp_y
    boundary = 106
  [../]
  [./disp_z_101]
    type = SideAverageValue
    variable = disp_z
    boundary = 101
  [../]
  [./disp_z_102]
    type = SideAverageValue
    variable = disp_z
    boundary = 102
  [../]
  [./disp_z_103]
    type = SideAverageValue
    variable = disp_z
    boundary = 103
  [../]
  [./disp_z_104]
    type = SideAverageValue
    variable = disp_z
    boundary = 104
  [../]
  [./disp_z_105]
    type = SideAverageValue
    variable = disp_z
    boundary = 105
  [../]
  [./disp_z_106]
    type = SideAverageValue
    variable = disp_z
    boundary = 106
  [../]

  [disp_x_p1_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 -0.08'
  [../]
  [disp_x_p1_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 -0.08'
  [../]
  [disp_x_p2_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 0.08'
  [../]
  [disp_x_p2_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 0.08'
  [../]
  [disp_x_p3_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 -0.08'
  [../]
  [disp_x_p3_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 -0.08'
  [../]
  [disp_x_p4_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 0.08'
  [../]
  [disp_x_p4_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 0.08'
  [../]
  [disp_x_p5_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 -0.235'
  [../]
  [disp_x_p5_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 -0.235'
  [../]
  [disp_x_p6_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 0.235'
  [../]
  [disp_x_p6_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 0.235'
  [../]

  [disp_y_p1_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 -0.08'
  [../]
  [disp_y_p1_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 -0.08'
  [../]
  [disp_y_p2_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 0.08'
  [../]
  [disp_y_p2_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 0.08'
  [../]
  [disp_y_p3_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 -0.08'
  [../]
  [disp_y_p3_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 -0.08'
  [../]
  [disp_y_p4_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 0.08'
  [../]
  [disp_y_p4_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 0.08'
  [../]
  [disp_y_p5_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 -0.235'
  [../]
  [disp_y_p5_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 -0.235'
  [../]
  [disp_y_p6_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 0.235'
  [../]
  [disp_y_p6_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 0.235'
  [../]
  [disp_y_p7_pos]
    type = PointValue
    variable = disp_y
    point = '-0.235 0.24 0.08'
  [../]
  [disp_y_p7_neg]
    type = PointValue
    variable = disp_y
    point = '-0.235 -0.24 0.08'
  [../]
  [disp_y_p8_pos]
    type = PointValue
    variable = disp_y
    point = '0.235 0.24 0.08'
  [../]
  [disp_y_p8_neg]
    type = PointValue
    variable = disp_y
    point = '0.235 -0.24 0.08'
  [../]

  [disp_z_p1_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.08 0.24'
  [../]
  [disp_z_p1_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.08 -0.24'
  [../]
  [disp_z_p2_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.08 0.24'
  [../]
  [disp_z_p2_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.08 -0.24'
  [../]
  [disp_z_p3_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.08 0.24'
  [../]
  [disp_z_p3_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.08 -0.24'
  [../]
  [disp_z_p4_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 0.08 0.24'
  [../]
  [disp_z_p4_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 0.08 -0.24'
  [../]
  [disp_z_p5_pos]
    type = PointValue
    variable = disp_z
    point = '0.235 0.08 0.24'
  [../]
  [disp_z_p5_neg]
    type = PointValue
    variable = disp_z
    point = '0.235 0.08 -0.24'
  [../]
  [disp_z_p6_pos]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.08 0.24'
  [../]
  [disp_z_p6_neg]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.08 -0.24'
  [../]
[]

[Executioner]
  type       = Transient
  solve_type = 'PJFNK'
  line_search = none
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  start_time = 2419200
  dt = 1000000
  automatic_scaling = true
  end_time = 38880000
  l_max_its  = 20
  nl_max_its = 10
  nl_rel_tol = 1e-6
  nl_abs_tol = 1e-10
[]

[Outputs]
  perf_graph = true
  csv = true
[]

[Debug]
  show_var_residual_norms = true
[]
(assessment/asr_validation/wald2017b/analysis/A1-biaxial.i)
 [GlobalParams]
  displacements = 'disp_x disp_y disp_z'
  penalty = 1e12
[]

[Problem]
  type = ReferenceResidualProblem
  reference_vector = 'ref'
  extra_tag_vectors = 'ref'
  group_variables = 'disp_x disp_y disp_z'
[]

[Mesh]
  file = A1-triaxial.e
[]

[Variables]
  [./T]
    order = FIRST
    family = LAGRANGE
    initial_condition = 10.6
  [../]
  [./rh]
    order = FIRST
    family = LAGRANGE
    initial_condition = 0.8
    block = 1
  [../]
[]

[AuxVariables]
  [./resid_x]
  [../]
  [./resid_y]
  [../]
  [./resid_z]
  [../]
  [./ASR_ex]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_vstrain]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_xy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_yz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_zx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./volumetric_strain]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_conductivity]
    order = CONSTANT
    family = Monomial
  [../]
  [./thermal_capacity]
    order = CONSTANT
    family = Monomial
  [../]
  [./moisture_capacity]
    order = CONSTANT
    family = Monomial
  [../]
  [./humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  [../]
  [./water_content]
    order = CONSTANT
    family = Monomial
  [../]
  [./water_hydrated]
    order = CONSTANT
    family = Monomial
  [../]
  [damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [./area]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./axial_stress]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./axial_strain]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]

[Modules/TensorMechanics/Master]
  [./concrete]
    block = 1
    strain = FINITE
    add_variables = true
    eigenstrain_names = 'asr_expansion thermal_expansion'
    generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_yz stress_zx vonmises_stress hydrostatic_stress elastic_strain_xx elastic_strain_yy elastic_strain_zz strain_xx strain_yy strain_zz'
    extra_vector_tags = 'ref'
  [../]
[]

[Modules/TensorMechanics/LineElementMaster]
  [./Reinforcement_block]
    block = '2 3 4'
    truss = true
    area = area
    displacements = 'disp_x disp_y disp_z'
    #Note: Intentially not including this here to have it give a nonzero
    #      displacement reference residual since it's an unrestrained problem
    #extra_vector_tags = 'ref'
  [../]
[]

[Constraints]
  [./rebar_x2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_x'
    primary_variable = 'disp_x'
    formulation = penalty
  [../]
  [./rebar_y2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_y'
    primary_variable = 'disp_y'
    formulation = penalty
  [../]
  [./rebar_z2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_z'
    primary_variable = 'disp_z'
    formulation = penalty
  [../]
  [./rebar_T2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'T'
    primary_variable = 'T'
    formulation = penalty
    penalty = 1e6
  [../]
  [./rebar_x3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_x'
    primary_variable = 'disp_x'
    formulation = penalty
  [../]
  [./rebar_y3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_y'
    primary_variable = 'disp_y'
    formulation = penalty
  [../]
  [./rebar_z3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_z'
    primary_variable = 'disp_z'
    formulation = penalty
  [../]
  [./rebar_T3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'T'
    primary_variable = 'T'
    formulation = penalty
    penalty = 1e6
  [../]
  [./rebar_x4]
    type = EqualValueEmbeddedConstraint
    secondary = 4
    primary = 1
    variable = 'disp_x'
    primary_variable = 'disp_x'
    formulation = penalty
  [../]
  [./rebar_y4]
    type = EqualValueEmbeddedConstraint
    secondary = 4
    primary = 1
    variable = 'disp_y'
    primary_variable = 'disp_y'
    formulation = penalty
  [../]
  [./rebar_z4]
    type = EqualValueEmbeddedConstraint
    secondary = 4
    primary = 1
    variable = 'disp_z'
    primary_variable = 'disp_z'
    formulation = penalty
  [../]
  [./rebar_T4]
    type = EqualValueEmbeddedConstraint
    secondary = 4
    primary = 1
    variable = 'T'
    primary_variable = 'T'
    formulation = penalty
    penalty = 1e6
  [../]
[]

[Kernels]
  [./T_td]
    type     = ConcreteThermalTimeIntegration
    variable = T
    block = 1
    extra_vector_tags = 'ref'
  [../]
  [./T_diff]
    type     = ConcreteThermalConduction
    variable = T
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./T_conv]
    type     = ConcreteThermalConvection
    variable = T
    relative_humidity = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./T_adsorption]
    type     = ConcreteLatentHeat
    variable = T
    H = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./rh_td]
    type     = ConcreteMoistureTimeIntegration
    variable = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./rh_diff]
    type     = ConcreteMoistureDiffusion
    variable = rh
    temperature = T
    block = 1
    extra_vector_tags = 'ref'
  [../]
  [./heat_dt]
    type = TimeDerivative
    variable = T
    block = '2 3 4'
    extra_vector_tags = 'ref'
  [../]
  [./heat_conduction]
    type = HeatConduction
    variable = T
    diffusion_coefficient = 53.0
    block = '2 3 4'
    extra_vector_tags = 'ref'
  [../]
[]

[AuxKernels]
  [./ASR_ex]
    type = MaterialRealAux
    variable = ASR_ex
    block = 1
    property = ASR_extent
    execute_on = 'timestep_end'
  [../]
  [./ASR_vstrain]
    type = MaterialRealAux
    block = 1
    variable = ASR_vstrain
    property = ASR_volumetric_strain
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_yy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_zz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xy
    index_i = 0
    index_j = 1
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_yz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yz
    index_i = 1
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_zx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zx
    index_i = 0
    index_j = 2
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_xx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_yy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_zz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./volumetric_strain]
    type = RankTwoScalarAux
    scalar_type = VolumetricStrain
    rank_two_tensor = total_strain
    variable = volumetric_strain
    block = 1
  [../]

  [./k]
    type = MaterialRealAux
    variable = thermal_conductivity
    property = thermal_conductivity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./capacity]
    type = MaterialRealAux
    variable = thermal_capacity
    property = thermal_capacity
    execute_on = 'timestep_end'
    block = 1
  [../]

  [./rh_capacity]
    type = MaterialRealAux
    variable = moisture_capacity
    property = moisture_capacity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./rh_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./wc_duff]
    type = MaterialRealAux
    variable = water_content
    property = moisture_content
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./hydrw_duff]
    type = MaterialRealAux
    variable = water_hydrated
    property = hydrated_water
    execute_on = 'timestep_end'
    block = 1
  [../]

  [damage_index]
    type = MaterialRealAux
    block = 1
    variable = damage_index
    property = damage_index
    execute_on = timestep_end
  []
  [./areax]
    type = ConstantAux
    block = '2'
    variable = area
    value = 1.33e-4
    execute_on = 'initial timestep_begin'
  [../]
  [./areaz]
    type = ConstantAux
    block = '3'
    variable = area
    value = 1.33e-4
    execute_on = 'initial timestep_begin'
  [../]
  [./areay]
    type = ConstantAux
    block = '4'
    variable = area
    value = 1.33e-4
    execute_on = 'initial timestep_begin'
  [../]
  [./axial_stress]
    type = MaterialRealAux
    block = '2 3 4'
    variable = axial_stress
    property = axial_stress
  [../]
[]

[Functions]
  [./ramp_temp]
    type = PiecewiseLinear
    data_file = temperature_history.csv
    format = columns
  [../]

  [./ramp_humidity]
    type = PiecewiseLinear
    data_file = humidity_history.csv
    format = columns
  [../]
[]

[Materials]

  [./concrete]
    type = ConcreteThermalMoisture
    block = 1
    # setup thermal property models and parameters
    # options available: CONSTANT ASCE-1992 KODUR-2004 EUROCODE-2004 KIM-2003
    thermal_conductivity_model =  KODUR-2004
    thermal_capacity_model     =  KODUR-2004
    aggregate_type = Siliceous               #options: Siliceous Carbonate

    ref_density_of_concrete = 2231.0         # in kg/m^3
    ref_specific_heat_of_concrete = 1100.0   # in J/(Kg.0C)
    ref_thermal_conductivity_of_concrete = 3 # in W/(m.0C)

    # setup moisture capacity and humidity diffusivity models
    aggregate_pore_type = dense              #options: dense porous
    aggregate_mass = 1877.0                  #mass of aggregate (kg) per m^3 of concrete
    cement_type = 1                          #options: 1 2 3 4
    cement_mass = 354.0                      #mass of cement (kg) per m^3 of concrete
    water_to_cement_ratio       = 0.5
    concrete_cure_time          = 28.0       #curing time in (days)

    # options available for humidity diffusivity:
    moisture_diffusivity_model = Bazant      #options: Bazant Mensi
    D1 = 3.0e-8

    coupled_moisture_diffusivity_factor = 1.0e-2  # factor for mositure diffusivity due to heat

    # coupled nonlinear variables
    relative_humidity = rh
    temperature = T
  [../]

  [./creep]
    type = LinearViscoelasticStressUpdate
    block = 1
  [../]
  [./logcreep]
    type = ConcreteLogarithmicCreepModel
    block = 1
    poissons_ratio = 0.22
    youngs_modulus = 37.3e9
    recoverable_youngs_modulus = 37.3e9
    recoverable_viscosity = 1
    long_term_viscosity = 1
    long_term_characteristic_time = 1
    humidity = rh
    temperature = T
    activation_temperature = 23.0
  [../]

  [ASR_expansion]
    type = ConcreteASREigenstrain
    block = 1
    expansion_type = Anisotropic

    reference_temperature  = 35.0
    temperature_unit = Celsius
    max_volumetric_expansion = 2.2e-2

    characteristic_time = 18.9
    latency_time = 18.0
    characteristic_activation_energy = 5400.0
    latency_activation_energy = 9400.0
    stress_latency_factor = 1.0

    compressive_strength = 31.0e6
    compressive_stress_exponent = 0.0
    expansion_stress_limit = 8.0e6

    tensile_strength = 3.2e6
    tensile_retention_factor = 1.0
    tensile_absorption_factor = 1.0

    ASR_dependent_tensile_strength = false
    residual_tensile_strength_fraction = 1.0

    temperature = T
    relative_humidity = rh
    rh_exponent = 1.0
    eigenstrain_name = asr_expansion
    absolute_tolerance = 1e-10
    output_iteration_info_on_error = true
  []

  [thermal_strain_concrete]
    type = ComputeThermalExpansionEigenstrain
    block = 1
    temperature = T
    thermal_expansion_coeff = 8.0e-6
    stress_free_temperature = 10.6
    eigenstrain_name = thermal_expansion
  []

  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.1
    block = 1
  []
  [./stress]
    type = ComputeMultipleInelasticStress
    block = 1
    inelastic_models = 'creep'
    damage_model = ASR_damage_concrete
  [../]

  [truss]
    type = LinearElasticTruss
    block = '2 3 4'
    youngs_modulus = 2e11
    temperature = T
    thermal_expansion_coeff = 11.3e-6
    temperature_ref = 10.6
  []

[]

[UserObjects]
  [./visco_update]
    type = LinearViscoelasticityManager
    block = 1
    viscoelastic_model = logcreep
  [../]
[]

[BCs]
  [./left]
    type = DirichletBC
    variable = disp_x
    boundary = '2000 2005'
    value = 0.0
  [../]
  [./bottom]
    type = DirichletBC
    variable = disp_y
    boundary = '2000 2001'
    value = 0.0
  [../]
  [./back]
    type = DirichletBC
    variable = disp_z
    boundary = '2000 2005'
    value = 0.0
  [../]
  [./T]
    type = FunctionDirichletBC
    variable = T
    boundary = '101 102 103 104 105 106'
    function = ramp_temp
  [../]
  [./rh]
    type = FunctionDirichletBC
    variable = rh
    boundary = '101 102 103 104 105 106'
    function = ramp_humidity
  [../]
[]

[Postprocessors]
  [./nelem]
    type = NumElems
  [../]
  [./ndof]
    type = NumDOFs
  [../]
  [./ASR_strain]
    type = ElementAverageValue
    variable = ASR_vstrain
    block = 1
  [../]
  [./ASR_strain_xx]
    type = ElementAverageValue
    variable = ASR_strain_xx
    block = 1
  [../]
  [./ASR_strain_yy]
    type = ElementAverageValue
    variable = ASR_strain_yy
    block = 1
  [../]
  [./ASR_strain_zz]
    type = ElementAverageValue
    variable = ASR_strain_zz
    block = 1
  [../]
  [ASR_ext]
    type = ElementAverageValue
    variable = ASR_ex
    block = 1
  []
  [./vonmises]
    type = ElementAverageValue
    variable = vonmises_stress
    block = 1
  [../]
  [./vstrain]
    type = ElementAverageValue
    variable = volumetric_strain
    block = 1
  [../]
  [./strain_xx]
    type = ElementAverageValue
    variable = strain_xx
    block = 1
  [../]
  [./strain_yy]
    type = ElementAverageValue
    variable = strain_yy
    block = 1
  [../]
  [./strain_zz]
    type = ElementAverageValue
    variable = strain_zz
    block = 1
  [../]
  [./temp]
    type = ElementAverageValue
    variable = T
    block = 1
  [../]
  [./humidity]
    type = ElementAverageValue
    variable = rh
    block = 1
  [../]
  [./thermal_strain_xx]
    type = ElementAverageValue
    variable = thermal_strain_xx
    block = 1
  [../]
  [./thermal_strain_yy]
    type = ElementAverageValue
    variable = thermal_strain_yy
    block = 1
  [../]
  [./thermal_strain_zz]
    type = ElementAverageValue
    variable = thermal_strain_zz
    block = 1
  [../]
  [./disp_x_101]
    type = SideAverageValue
    variable = disp_x
    boundary = 101
  [../]
  [./disp_x_102]
    type = SideAverageValue
    variable = disp_x
    boundary = 102
  [../]
  [./disp_x_103]
    type = SideAverageValue
    variable = disp_x
    boundary = 103
  [../]
  [./disp_x_104]
    type = SideAverageValue
    variable = disp_x
    boundary = 104
  [../]
  [./disp_x_105]
    type = SideAverageValue
    variable = disp_x
    boundary = 105
  [../]
  [./disp_x_106]
    type = SideAverageValue
    variable = disp_x
    boundary = 106
  [../]
  [./disp_y_101]
    type = SideAverageValue
    variable = disp_y
    boundary = 101
  [../]
  [./disp_y_102]
    type = SideAverageValue
    variable = disp_y
    boundary = 102
  [../]
  [./disp_y_103]
    type = SideAverageValue
    variable = disp_y
    boundary = 103
  [../]
  [./disp_y_104]
    type = SideAverageValue
    variable = disp_y
    boundary = 104
  [../]
  [./disp_y_105]
    type = SideAverageValue
    variable = disp_y
    boundary = 105
  [../]
  [./disp_y_106]
    type = SideAverageValue
    variable = disp_y
    boundary = 106
  [../]
  [./disp_z_101]
    type = SideAverageValue
    variable = disp_z
    boundary = 101
  [../]
  [./disp_z_102]
    type = SideAverageValue
    variable = disp_z
    boundary = 102
  [../]
  [./disp_z_103]
    type = SideAverageValue
    variable = disp_z
    boundary = 103
  [../]
  [./disp_z_104]
    type = SideAverageValue
    variable = disp_z
    boundary = 104
  [../]
  [./disp_z_105]
    type = SideAverageValue
    variable = disp_z
    boundary = 105
  [../]
  [./disp_z_106]
    type = SideAverageValue
    variable = disp_z
    boundary = 106
  [../]

  [disp_x_p1_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 -0.08'
  [../]
  [disp_x_p1_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 -0.08'
  [../]
  [disp_x_p2_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 0.08'
  [../]
  [disp_x_p2_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 0.08'
  [../]
  [disp_x_p3_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 -0.08'
  [../]
  [disp_x_p3_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 -0.08'
  [../]
  [disp_x_p4_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 0.08'
  [../]
  [disp_x_p4_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 0.08'
  [../]
  [disp_x_p5_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 -0.235'
  [../]
  [disp_x_p5_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 -0.235'
  [../]
  [disp_x_p6_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 0.235'
  [../]
  [disp_x_p6_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 0.235'
  [../]

  [disp_y_p1_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 -0.08'
  [../]
  [disp_y_p1_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 -0.08'
  [../]
  [disp_y_p2_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 0.08'
  [../]
  [disp_y_p2_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 0.08'
  [../]
  [disp_y_p3_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 -0.08'
  [../]
  [disp_y_p3_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 -0.08'
  [../]
  [disp_y_p4_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 0.08'
  [../]
  [disp_y_p4_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 0.08'
  [../]
  [disp_y_p5_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 -0.235'
  [../]
  [disp_y_p5_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 -0.235'
  [../]
  [disp_y_p6_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 0.235'
  [../]
  [disp_y_p6_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 0.235'
  [../]
  [disp_y_p7_pos]
    type = PointValue
    variable = disp_y
    point = '-0.235 0.24 0.08'
  [../]
  [disp_y_p7_neg]
    type = PointValue
    variable = disp_y
    point = '-0.235 -0.24 0.08'
  [../]
  [disp_y_p8_pos]
    type = PointValue
    variable = disp_y
    point = '0.235 0.24 0.08'
  [../]
  [disp_y_p8_neg]
    type = PointValue
    variable = disp_y
    point = '0.235 -0.24 0.08'
  [../]

  [disp_z_p1_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.08 0.24'
  [../]
  [disp_z_p1_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.08 -0.24'
  [../]
  [disp_z_p2_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.08 0.24'
  [../]
  [disp_z_p2_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.08 -0.24'
  [../]
  [disp_z_p3_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.08 0.24'
  [../]
  [disp_z_p3_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.08 -0.24'
  [../]
  [disp_z_p4_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 0.08 0.24'
  [../]
  [disp_z_p4_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 0.08 -0.24'
  [../]
  [disp_z_p5_pos]
    type = PointValue
    variable = disp_z
    point = '0.235 0.08 0.24'
  [../]
  [disp_z_p5_neg]
    type = PointValue
    variable = disp_z
    point = '0.235 0.08 -0.24'
  [../]
  [disp_z_p6_pos]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.08 0.24'
  [../]
  [disp_z_p6_neg]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.08 -0.24'
  [../]
[]

[Executioner]
  type       = Transient
  solve_type = 'PJFNK'
  line_search = none
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  start_time = 2419200
  dt = 1000000
  automatic_scaling = true
  end_time = 38880000
  l_max_its  = 20
  nl_max_its = 10
  nl_rel_tol = 1e-6
  nl_abs_tol = 1e-10
[]

[Outputs]
  perf_graph = true
  csv = true
[]

[Debug]
  show_var_residual_norms = true
[]
(assessment/asr_validation/wald2017b/analysis/A1-triaxial.i)
 [GlobalParams]
  displacements = 'disp_x disp_y disp_z'
  penalty = 1e12
[]

[Problem]
  type = ReferenceResidualProblem
  reference_vector = 'ref'
  extra_tag_vectors = 'ref'
  group_variables = 'disp_x disp_y disp_z'
[]

[Mesh]
  file = A3-biaxial.e
[]

[Variables]
  [./T]
    order = FIRST
    family = LAGRANGE
    initial_condition = 10.6
  [../]
  [./rh]
    order = FIRST
    family = LAGRANGE
    initial_condition = 0.8
    block = 1
  [../]
[]

[AuxVariables]
  [./resid_x]
  [../]
  [./resid_y]
  [../]
  [./resid_z]
  [../]
  [./ASR_ex]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_vstrain]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_xy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_yz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./ASR_strain_zx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./volumetric_strain]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_xx]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_yy]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_strain_zz]
    order = CONSTANT
    family = MONOMIAL
    block = 1
  [../]
  [./thermal_conductivity]
    order = CONSTANT
    family = Monomial
  [../]
  [./thermal_capacity]
    order = CONSTANT
    family = Monomial
  [../]
  [./moisture_capacity]
    order = CONSTANT
    family = Monomial
  [../]
  [./humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  [../]
  [./water_content]
    order = CONSTANT
    family = Monomial
  [../]
  [./water_hydrated]
    order = CONSTANT
    family = Monomial
  [../]
  [damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [./area]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./axial_stress]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./axial_strain]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]

[Modules/TensorMechanics/Master]
  [./concrete]
    block = 1
    strain = FINITE
    add_variables = true
    eigenstrain_names = 'asr_expansion thermal_expansion'
    generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_yz stress_zx vonmises_stress hydrostatic_stress elastic_strain_xx elastic_strain_yy elastic_strain_zz strain_xx strain_yy strain_zz'
    extra_vector_tags = 'ref'
  [../]
[]

[Modules/TensorMechanics/LineElementMaster]
  [./Reinforcement_block]
    block = '2 3'
    truss = true
    area = area
    displacements = 'disp_x disp_y disp_z'
    #Note: Intentially not including this here to have it give a nonzero
    #      displacement reference residual since it's an unrestrained problem
    #extra_vector_tags = 'ref'
  [../]
[]

[Constraints]
  [./rebar_x2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_x'
    primary_variable = 'disp_x'
    formulation = penalty
  [../]
  [./rebar_y2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_y'
    primary_variable = 'disp_y'
    formulation = penalty
  [../]
  [./rebar_z2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'disp_z'
    primary_variable = 'disp_z'
    formulation = penalty
  [../]
  [./rebar_T2]
    type = EqualValueEmbeddedConstraint
    secondary = 2
    primary = 1
    variable = 'T'
    primary_variable = 'T'
    formulation = penalty
    penalty = 1e6
  [../]
  [./rebar_x3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_x'
    primary_variable = 'disp_x'
    formulation = penalty
  [../]
  [./rebar_y3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_y'
    primary_variable = 'disp_y'
    formulation = penalty
  [../]
  [./rebar_z3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'disp_z'
    primary_variable = 'disp_z'
    formulation = penalty
  [../]
  [./rebar_T3]
    type = EqualValueEmbeddedConstraint
    secondary = 3
    primary = 1
    variable = 'T'
    primary_variable = 'T'
    formulation = penalty
    penalty = 1e6
  [../]
[]

[Kernels]
  [./T_td]
    type     = ConcreteThermalTimeIntegration
    variable = T
    block = 1
    extra_vector_tags = 'ref'
  [../]
  [./T_diff]
    type     = ConcreteThermalConduction
    variable = T
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./T_conv]
    type     = ConcreteThermalConvection
    variable = T
    relative_humidity = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./T_adsorption]
    type     = ConcreteLatentHeat
    variable = T
    H = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./rh_td]
    type     = ConcreteMoistureTimeIntegration
    variable = rh
    block = 1
    extra_vector_tags = 'ref'
  [../]

  [./rh_diff]
    type     = ConcreteMoistureDiffusion
    variable = rh
    temperature = T
    block = 1
    extra_vector_tags = 'ref'
  [../]
  [./heat_dt]
    type = TimeDerivative
    variable = T
    block = '2 3'
    extra_vector_tags = 'ref'
  [../]
  [./heat_conduction]
    type = HeatConduction
    variable = T
    diffusion_coefficient = 53.0
    block = '2 3'
    extra_vector_tags = 'ref'
  [../]
[]

[AuxKernels]
  [./ASR_ex]
    type = MaterialRealAux
    variable = ASR_ex
    block = 1
    property = ASR_extent
    execute_on = 'timestep_end'
  [../]
  [./ASR_vstrain]
    type = MaterialRealAux
    block = 1
    variable = ASR_vstrain
    property = ASR_volumetric_strain
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_yy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./ASR_strain_zz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_xy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xy
    index_i = 0
    index_j = 1
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_yz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yz
    index_i = 1
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./ASR_strain_zx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zx
    index_i = 0
    index_j = 2
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_xx]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_yy]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  [../]
  [./thermal_strain_zz]
    type = RankTwoAux
    block = 1
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  [../]

  [./volumetric_strain]
    type = RankTwoScalarAux
    scalar_type = VolumetricStrain
    rank_two_tensor = total_strain
    variable = volumetric_strain
    block = 1
  [../]

  [./k]
    type = MaterialRealAux
    variable = thermal_conductivity
    property = thermal_conductivity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./capacity]
    type = MaterialRealAux
    variable = thermal_capacity
    property = thermal_capacity
    execute_on = 'timestep_end'
    block = 1
  [../]

  [./rh_capacity]
    type = MaterialRealAux
    variable = moisture_capacity
    property = moisture_capacity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./rh_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./wc_duff]
    type = MaterialRealAux
    variable = water_content
    property = moisture_content
    execute_on = 'timestep_end'
    block = 1
  [../]
  [./hydrw_duff]
    type = MaterialRealAux
    variable = water_hydrated
    property = hydrated_water
    execute_on = 'timestep_end'
    block = 1
  [../]

  [damage_index]
    type = MaterialRealAux
    block = 1
    variable = damage_index
    property = damage_index
    execute_on = timestep_end
  []
  [./areax]
    type = ConstantAux
    block = '2'
    variable = area
    value = 1.33e-4
    execute_on = 'initial timestep_begin'
  [../]
  [./areaz]
    type = ConstantAux
    block = '3'
    variable = area
    value = 2.84e-4
    execute_on = 'initial timestep_begin'
  [../]
  [./axial_stress]
    type = MaterialRealAux
    block = '2 3'
    variable = axial_stress
    property = axial_stress
  [../]
[]

[Functions]
  [./ramp_temp]
    type = PiecewiseLinear
    data_file = temperature_history.csv
    format = columns
  [../]

  [./ramp_humidity]
    type = PiecewiseLinear
    data_file = humidity_history.csv
    format = columns
  [../]
[]

[Materials]

  [./concrete]
    type = ConcreteThermalMoisture
    block = 1
    # setup thermal property models and parameters
    # options available: CONSTANT ASCE-1992 KODUR-2004 EUROCODE-2004 KIM-2003
    thermal_conductivity_model =  KODUR-2004
    thermal_capacity_model     =  KODUR-2004
    aggregate_type = Siliceous               #options: Siliceous Carbonate

    ref_density_of_concrete = 2231.0         # in kg/m^3
    ref_specific_heat_of_concrete = 1100.0   # in J/(Kg.0C)
    ref_thermal_conductivity_of_concrete = 3 # in W/(m.0C)

    # setup moisture capacity and humidity diffusivity models
    aggregate_pore_type = dense              #options: dense porous
    aggregate_mass = 1877.0                  #mass of aggregate (kg) per m^3 of concrete
    cement_type = 1                          #options: 1 2 3 4
    cement_mass = 354.0                      #mass of cement (kg) per m^3 of concrete
    water_to_cement_ratio       = 0.5
    concrete_cure_time          = 28.0       #curing time in (days)

    # options available for humidity diffusivity:
    moisture_diffusivity_model = Bazant      #options: Bazant Mensi
    D1 = 3.0e-8

    coupled_moisture_diffusivity_factor = 1.0e-2  # factor for mositure diffusivity due to heat

    # coupled nonlinear variables
    relative_humidity = rh
    temperature = T
  [../]

  [./creep]
    type = LinearViscoelasticStressUpdate
    block = 1
  [../]
  [./logcreep]
    type = ConcreteLogarithmicCreepModel
    block = 1
    poissons_ratio = 0.22
    youngs_modulus = 37.3e9
    recoverable_youngs_modulus = 37.3e9
    recoverable_viscosity = 1
    long_term_viscosity = 1
    long_term_characteristic_time = 1
    humidity = rh
    temperature = T
    activation_temperature = 23.0
  [../]

  [ASR_expansion]
    type = ConcreteASREigenstrain
    block = 1
    expansion_type = Anisotropic

    reference_temperature  = 35.0
    temperature_unit = Celsius
    max_volumetric_expansion = 2.2e-2

    characteristic_time = 18.9
    latency_time = 18.0
    characteristic_activation_energy = 5400.0
    latency_activation_energy = 9400.0
    stress_latency_factor = 1.0

    compressive_strength = 31.0e6
    compressive_stress_exponent = 0.0
    expansion_stress_limit = 8.0e6

    tensile_strength = 3.2e6
    tensile_retention_factor = 1.0
    tensile_absorption_factor = 1.0

    ASR_dependent_tensile_strength = false
    residual_tensile_strength_fraction = 1.0

    temperature = T
    relative_humidity = rh
    rh_exponent = 1.0
    eigenstrain_name = asr_expansion
    absolute_tolerance = 1e-10
    output_iteration_info_on_error = true
  []

  [thermal_strain_concrete]
    type = ComputeThermalExpansionEigenstrain
    block = 1
    temperature = T
    thermal_expansion_coeff = 8.0e-6
    stress_free_temperature = 10.6
    eigenstrain_name = thermal_expansion
  []

  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.1
    block = 1
  []
  [./stress]
    type = ComputeMultipleInelasticStress
    block = 1
    inelastic_models = 'creep'
    damage_model = ASR_damage_concrete
  [../]

  [truss]
    type = LinearElasticTruss
    block = '2 3'
    youngs_modulus = 2e11
    temperature = T
    thermal_expansion_coeff = 11.3e-6
    temperature_ref = 10.6
  []

[]

[UserObjects]
  [./visco_update]
    type = LinearViscoelasticityManager
    block = 1
    viscoelastic_model = logcreep
  [../]
[]

[BCs]
  [./left]
    type = DirichletBC
    variable = disp_x
    boundary = '2000 2005'
    value = 0.0
  [../]
  [./bottom]
    type = DirichletBC
    variable = disp_y
    boundary = '2000 2001'
    value = 0.0
  [../]
  [./back]
    type = DirichletBC
    variable = disp_z
    boundary = '2000 2005'
    value = 0.0
  [../]
  [./T]
    type = FunctionDirichletBC
    variable = T
    boundary = '101 102 103 104 105 106'
    function = ramp_temp
  [../]
  [./rh]
    type = FunctionDirichletBC
    variable = rh
    boundary = '101 102 103 104 105 106'
    function = ramp_humidity
  [../]
[]

[Postprocessors]
  [./nelem]
    type = NumElems
  [../]
  [./ndof]
    type = NumDOFs
  [../]
  [./ASR_strain]
    type = ElementAverageValue
    variable = ASR_vstrain
    block = 1
  [../]
  [./ASR_strain_xx]
    type = ElementAverageValue
    variable = ASR_strain_xx
    block = 1
  [../]
  [./ASR_strain_yy]
    type = ElementAverageValue
    variable = ASR_strain_yy
    block = 1
  [../]
  [./ASR_strain_zz]
    type = ElementAverageValue
    variable = ASR_strain_zz
    block = 1
  [../]
  [ASR_ext]
    type = ElementAverageValue
    variable = ASR_ex
    block = 1
  []
  [./vonmises]
    type = ElementAverageValue
    variable = vonmises_stress
    block = 1
  [../]
  [./vstrain]
    type = ElementAverageValue
    variable = volumetric_strain
    block = 1
  [../]
  [./strain_xx]
    type = ElementAverageValue
    variable = strain_xx
    block = 1
  [../]
  [./strain_yy]
    type = ElementAverageValue
    variable = strain_yy
    block = 1
  [../]
  [./strain_zz]
    type = ElementAverageValue
    variable = strain_zz
    block = 1
  [../]
  [./temp]
    type = ElementAverageValue
    variable = T
    block = 1
  [../]
  [./humidity]
    type = ElementAverageValue
    variable = rh
    block = 1
  [../]
  [./thermal_strain_xx]
    type = ElementAverageValue
    variable = thermal_strain_xx
    block = 1
  [../]
  [./thermal_strain_yy]
    type = ElementAverageValue
    variable = thermal_strain_yy
    block = 1
  [../]
  [./thermal_strain_zz]
    type = ElementAverageValue
    variable = thermal_strain_zz
    block = 1
  [../]
  [./disp_x_101]
    type = SideAverageValue
    variable = disp_x
    boundary = 101
  [../]
  [./disp_x_102]
    type = SideAverageValue
    variable = disp_x
    boundary = 102
  [../]
  [./disp_x_103]
    type = SideAverageValue
    variable = disp_x
    boundary = 103
  [../]
  [./disp_x_104]
    type = SideAverageValue
    variable = disp_x
    boundary = 104
  [../]
  [./disp_x_105]
    type = SideAverageValue
    variable = disp_x
    boundary = 105
  [../]
  [./disp_x_106]
    type = SideAverageValue
    variable = disp_x
    boundary = 106
  [../]
  [./disp_y_101]
    type = SideAverageValue
    variable = disp_y
    boundary = 101
  [../]
  [./disp_y_102]
    type = SideAverageValue
    variable = disp_y
    boundary = 102
  [../]
  [./disp_y_103]
    type = SideAverageValue
    variable = disp_y
    boundary = 103
  [../]
  [./disp_y_104]
    type = SideAverageValue
    variable = disp_y
    boundary = 104
  [../]
  [./disp_y_105]
    type = SideAverageValue
    variable = disp_y
    boundary = 105
  [../]
  [./disp_y_106]
    type = SideAverageValue
    variable = disp_y
    boundary = 106
  [../]
  [./disp_z_101]
    type = SideAverageValue
    variable = disp_z
    boundary = 101
  [../]
  [./disp_z_102]
    type = SideAverageValue
    variable = disp_z
    boundary = 102
  [../]
  [./disp_z_103]
    type = SideAverageValue
    variable = disp_z
    boundary = 103
  [../]
  [./disp_z_104]
    type = SideAverageValue
    variable = disp_z
    boundary = 104
  [../]
  [./disp_z_105]
    type = SideAverageValue
    variable = disp_z
    boundary = 105
  [../]
  [./disp_z_106]
    type = SideAverageValue
    variable = disp_z
    boundary = 106
  [../]

  [disp_x_p1_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 -0.08'
  [../]
  [disp_x_p1_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 -0.08'
  [../]
  [disp_x_p2_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 0.08'
  [../]
  [disp_x_p2_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 0.08'
  [../]
  [disp_x_p3_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 -0.08'
  [../]
  [disp_x_p3_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 -0.08'
  [../]
  [disp_x_p4_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 0.08'
  [../]
  [disp_x_p4_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 0.08'
  [../]
  [disp_x_p5_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 -0.235'
  [../]
  [disp_x_p5_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 -0.235'
  [../]
  [disp_x_p6_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.08 0.235'
  [../]
  [disp_x_p6_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.08 0.235'
  [../]
  [disp_x_p7_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 -0.235'
  [../]
  [disp_x_p7_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 -0.235'
  [../]
  [disp_x_p8_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.08 0.235'
  [../]
  [disp_x_p8_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.08 0.235'
  [../]
  [disp_x_p9_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.235 -0.235'
  [../]
  [disp_x_p9_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.235 -0.235'
  [../]
  [disp_x_p10_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.235 0.235'
  [../]
  [disp_x_p10_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.235 0.235'
  [../]
  [disp_x_p11_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.235 -0.08'
  [../]
  [disp_x_p11_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.235 -0.08'
  [../]
  [disp_x_p12_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 0.235 0.08'
  [../]
  [disp_x_p12_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 0.235 0.08'
  [../]
  [disp_x_p13_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.235 -0.235'
  [../]
  [disp_x_p13_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.235 -0.235'
  [../]
  [disp_x_p14_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.235 0.235'
  [../]
  [disp_x_p14_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.235 0.235'
  [../]
  [disp_x_p15_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.235 -0.08'
  [../]
  [disp_x_p15_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.235 -0.08'
  [../]
  [disp_x_p16_pos]
    type = PointValue
    variable = disp_x
    point = '0.24 -0.235 0.08'
  [../]
  [disp_x_p16_neg]
    type = PointValue
    variable = disp_x
    point = '-0.24 -0.235 0.08'
  [../]

  [disp_y_p1_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 -0.08'
  [../]
  [disp_y_p1_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 -0.08'
  [../]
  [disp_y_p2_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 0.08'
  [../]
  [disp_y_p2_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 0.08'
  [../]
  [disp_y_p3_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 -0.08'
  [../]
  [disp_y_p3_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 -0.08'
  [../]
  [disp_y_p4_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 0.08'
  [../]
  [disp_y_p4_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 0.08'
  [../]
  [disp_y_p5_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 -0.235'
  [../]
  [disp_y_p5_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 -0.235'
  [../]
  [disp_y_p6_pos]
    type = PointValue
    variable = disp_y
    point = '0.08 0.24 0.235'
  [../]
  [disp_y_p6_neg]
    type = PointValue
    variable = disp_y
    point = '0.08 -0.24 0.235'
  [../]
  [disp_y_p7_pos]
    type = PointValue
    variable = disp_y
    point = '-0.235 0.24 0.08'
  [../]
  [disp_y_p7_neg]
    type = PointValue
    variable = disp_y
    point = '-0.235 -0.24 0.08'
  [../]
  [disp_y_p8_pos]
    type = PointValue
    variable = disp_y
    point = '0.235 0.24 0.08'
  [../]
  [disp_y_p8_neg]
    type = PointValue
    variable = disp_y
    point = '0.235 -0.24 0.08'
  [../]
  [disp_y_p9_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 -0.235'
  [../]
  [disp_y_p9_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 -0.235'
  [../]
  [disp_y_p10_pos]
    type = PointValue
    variable = disp_y
    point = '-0.08 0.24 0.235'
  [../]
  [disp_y_p10_neg]
    type = PointValue
    variable = disp_y
    point = '-0.08 -0.24 0.235'
  [../]
  [disp_y_p11_pos]
    type = PointValue
    variable = disp_y
    point = '-0.235 0.24 -0.08'
  [../]
  [disp_y_p11_neg]
    type = PointValue
    variable = disp_y
    point = '-0.235 -0.24 -0.08'
  [../]
  [disp_y_p12_pos]
    type = PointValue
    variable = disp_y
    point = '0.235 0.24 -0.08'
  [../]
  [disp_y_p12_neg]
    type = PointValue
    variable = disp_y
    point = '0.235 -0.24 -0.08'
  [../]

  [disp_z_p1_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.08 0.24'
  [../]
  [disp_z_p1_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.08 -0.24'
  [../]
  [disp_z_p2_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.08 0.24'
  [../]
  [disp_z_p2_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.08 -0.24'
  [../]
  [disp_z_p3_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.08 0.24'
  [../]
  [disp_z_p3_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.08 -0.24'
  [../]
  [disp_z_p4_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 0.08 0.24'
  [../]
  [disp_z_p4_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 0.08 -0.24'
  [../]
  [disp_z_p5_pos]
    type = PointValue
    variable = disp_z
    point = '0.235 0.08 0.24'
  [../]
  [disp_z_p5_neg]
    type = PointValue
    variable = disp_z
    point = '0.235 0.08 -0.24'
  [../]
  [disp_z_p6_pos]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.08 0.24'
  [../]
  [disp_z_p6_neg]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.08 -0.24'
  [../]

  [disp_z_p7_pos]
    type = PointValue
    variable = disp_z
    point = '-0.235 -0.08 0.24'
  [../]
  [disp_z_p7_neg]
    type = PointValue
    variable = disp_z
    point = '-0.235 -0.08 -0.24'
  [../]
  [disp_z_p8_pos]
    type = PointValue
    variable = disp_z
    point = '0.235 -0.08 0.24'
  [../]
  [disp_z_p8_neg]
    type = PointValue
    variable = disp_z
    point = '0.235 -0.08 -0.24'
  [../]
  [disp_z_p9_pos]
    type = PointValue
    variable = disp_z
    point = '0.235 0.235 0.24'
  [../]
  [disp_z_p9_neg]
    type = PointValue
    variable = disp_z
    point = '0.235 0.235 -0.24'
  [../]
  [disp_z_p10_pos]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.235 0.24'
  [../]
  [disp_z_p10_neg]
    type = PointValue
    variable = disp_z
    point = '-0.235 0.235 -0.24'
  [../]
  [disp_z_p11_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 0.235 0.24'
  [../]
  [disp_z_p11_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 0.235 -0.24'
  [../]
  [disp_z_p12_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.235 0.24'
  [../]
  [disp_z_p12_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 0.235 -0.24'
  [../]
  [disp_z_p13_pos]
    type = PointValue
    variable = disp_z
    point = '0.235 -0.235 0.24'
  [../]
  [disp_z_p13_neg]
    type = PointValue
    variable = disp_z
    point = '0.235 -0.235 -0.24'
  [../]
  [disp_z_p14_pos]
    type = PointValue
    variable = disp_z
    point = '-0.235 -0.235 0.24'
  [../]
  [disp_z_p14_neg]
    type = PointValue
    variable = disp_z
    point = '-0.235 -0.235 -0.24'
  [../]
  [disp_z_p15_pos]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.235 0.24'
  [../]
  [disp_z_p15_neg]
    type = PointValue
    variable = disp_z
    point = '0.08 -0.235 -0.24'
  [../]
  [disp_z_p16_pos]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.235 0.24'
  [../]
  [disp_z_p16_neg]
    type = PointValue
    variable = disp_z
    point = '-0.08 -0.235 -0.24'
  [../]

[]

[Executioner]
  type       = Transient
  solve_type = 'PJFNK'
  line_search = none
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  start_time = 14391759
  dt = 1000000
  automatic_scaling = true
  end_time = 38880000
  l_max_its  = 20
  nl_max_its = 10
  nl_rel_tol = 1e-6
  nl_abs_tol = 1e-10
[]

[Outputs]
  perf_graph = true
  csv = true
[]

[Debug]
  show_var_residual_norms = true
[]
(assessment/asr_validation/wald2017b/analysis/A3-biaxial.i)

References

  1. Victor Saouma and Luigi Perotti. Constitutive model for alkali-aggregate reactions. ACI Materials Journal, 2006. doi:10.14359/15853.[BibTeX]
  2. Franz-Josef Ulm, Olivier Coussy, Li Kefei, and Catherine Larive. Thermo-chemo-mechanics of asr expansion in concrete structures. Journal of engineering mechanics, 126(3):233–242, 2000.[BibTeX]
  3. David M. Wald, Morgan T. Allford, Oguzhan Bayrak, and Trevor D. Hrynyk. Development and multiaxial distribution of expansions in reinforced concrete elements affected by alkali–silica reaction. Structural Concrete, 18:914–928, 2017.[BibTeX]
  4. Wilma Wallau, Stephen Pirskawetz, Katja Voland, and Birgit Meng. Continuous expansion measurement in accelerated concrete prism testing verifying asr-expansion models. Materials and Structures, 2018.[BibTeX]