- variableThe name of the variable that this residual object operates onC++ Type:NonlinearVariableName Unit:(no unit assumed) Controllable:No Description:The name of the variable that this residual object operates on 
ConcreteMoistureTimeIntegrationMassLumped
Time derivative term with mass lumping for moisture transport in concrete.
Description
This kernel implements the following time-dependent term in the governing equation (Saouma et al. (2014)) for moisture diffusion in concrete, which is formulated using relative humidity as the primary variable:
(1)where
 = total water content (g/g) (for unit volume of concrete, cm) 
 = pore relative humidity 
  = time 
This kernel uses mass lumping, which reduces osciliatory behavior around sharp fronts, which are commonly observed in the moisture distribution in concrete. A version without mass lumping is provided in ConcreteMoistureTimeIntegration, but mass lumping is generally recommended.
The moisture capacity depends on the relative humidity . Thus the moisture diffusion governing equation is highly nonlinear. Also, it is worth noting that since the relative humidity strongly depends on the temperature , the moisture diffusion model is always coupled with the heat transfer model. The moisture capacity is computed by the ConcreteThermalMoisture material for the models that are formulated to provide it. For those that do not provide it, it is assumed to be equal to 1.
Input Parameters
- blockThe list of blocks (ids or names) that this object will be appliedC++ Type:std::vector<SubdomainName> Controllable:No Description:The list of blocks (ids or names) that this object will be applied 
- displacementsThe displacementsC++ Type:std::vector<VariableName> Unit:(no unit assumed) Controllable:No Description:The displacements 
- matrix_onlyFalseWhether this object is only doing assembly to matrices (no vectors)Default:False C++ Type:bool Controllable:No Description:Whether this object is only doing assembly to matrices (no vectors) 
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contributionC++ Type:std::vector<TagName> Controllable:No Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution 
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fillC++ Type:std::vector<TagName> Controllable:No Description:The extra tags for the matrices this Kernel should fill 
- extra_vector_tagsThe extra tags for the vectors this Kernel should fillC++ Type:std::vector<TagName> Controllable:No Description:The extra tags for the vectors this Kernel should fill 
- matrix_tagssystem timeThe tag for the matrices this Kernel should fillDefault:system time C++ Type:MultiMooseEnum Options:nontime, system, time Controllable:No Description:The tag for the matrices this Kernel should fill 
- vector_tagstimeThe tag for the vectors this Kernel should fillDefault:time C++ Type:MultiMooseEnum Options:nontime, time Controllable:No Description:The tag for the vectors this Kernel should fill 
Contribution To Tagged Field Data Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.C++ Type:std::vector<std::string> Controllable:No Description:Adds user-defined labels for accessing object parameters via control logic. 
- diag_save_inThe name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)C++ Type:std::vector<AuxVariableName> Unit:(no unit assumed) Controllable:No Description:The name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.) 
- enableTrueSet the enabled status of the MooseObject.Default:True C++ Type:bool Controllable:Yes Description:Set the enabled status of the MooseObject. 
- implicitTrueDetermines whether this object is calculated using an implicit or explicit formDefault:True C++ Type:bool Controllable:No Description:Determines whether this object is calculated using an implicit or explicit form 
- save_inThe name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)C++ Type:std::vector<AuxVariableName> Unit:(no unit assumed) Controllable:No Description:The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.) 
- search_methodnearest_node_connected_sidesChoice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).Default:nearest_node_connected_sides C++ Type:MooseEnum Options:nearest_node_connected_sides, all_proximate_sides Controllable:No Description:Choice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes). 
- seed0The seed for the master random number generatorDefault:0 C++ Type:unsigned int Controllable:No Description:The seed for the master random number generator 
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.Default:False C++ Type:bool Controllable:No Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used. 
Advanced Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.C++ Type:MaterialPropertyName Unit:(no unit assumed) Controllable:No Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character. 
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.Default:False C++ Type:bool Controllable:No Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction. 
Material Property Retrieval Parameters
Input Files
- (assessment/asr_validation/wald2017b/analysis/A3-biaxial.i)
- (assessment/asr_validation/wald2017b/analysis/A1-unreinforced.i)
- (assessment/asr_validation/wald2017b/analysis/A1-triaxial.i)
- (test/tests/concrete_moisture_heat_transfer/maqbeth_1d.i)
- (assessment/asr_validation/wald2017b/analysis/A1-biaxial.i)
- (assessment/asr_validation/wald2017b/analysis/A1-uniaxial.i)
References
- Victor Saouma, Mohammad Hariri-Ardebili, Wiwat Puatatsananon, and Yann Le Pape.
Structural significance of alkali-silica reaction in massive reinforced concrete structures.
Technical Report ORNL/TM-2014/489, Oak Ridge National Laboratory, 2014.[BibTeX]@techreport{saouma_structural_2014, Author = "Saouma, Victor and Hariri-Ardebili, Mohammad and Puatatsananon, Wiwat and Pape, Yann Le", Institution = "Oak Ridge National Laboratory", Number = "ORNL/TM-2014/489", Title = "Structural Significance of Alkali-Silica Reaction in Massive Reinforced Concrete Structures", Year = "2014" }
(assessment/asr_validation/wald2017b/analysis/A3-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'
  acceptable_multiplier = 10
  acceptable_iterations = 50
[]
[Mesh]
  file = A3-biaxial.e
[]
[Variables]
  [T]
    initial_condition = 32.0
  []
  [rh]
    initial_condition = 0.8
    block = 1
  []
  [disp_x]
  []
  [disp_y]
  []
  [disp_z]
  []
[]
[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
  []
  [humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  []
  [asr_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [mazars_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [combined_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [area]
    order = CONSTANT
    family = MONOMIAL
  []
  [axial_stress]
    order = CONSTANT
    family = MONOMIAL
  []
  [axial_strain]
    order = CONSTANT
    family = MONOMIAL
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [concrete]
    block = 1
    strain = FINITE
    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'
    temperature = T
  []
[]
[Physics/SolidMechanics/LineElement/QuasiStatic]
  [Reinforcement_block]
    block = '2 3'
    truss = true
    area = area
    #Note: Intentionally 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 = ConcreteMoistureTimeIntegrationMassLumped
    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 = TrussHeatConductionTimeDerivative
    variable = T
    area = area
    block = '2 3'
    extra_vector_tags = 'ref'
  []
  [heat_conduction]
    type = TrussHeatConduction
    variable = T
    area = area
    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_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
    block = 1
  []
  [asr_damage_index]
    type = MaterialRealAux
    block = 1
    variable = asr_damage_index
    property = asr_damage_index
    execute_on = timestep_end
  []
  [mazars_damage_index]
    type = MaterialRealAux
    block = 1
    variable = mazars_damage_index
    property = mazars_damage_index
    execute_on = timestep_end
  []
  [combined_damage_index]
    type = MaterialRealAux
    block = 1
    variable = combined_damage_index
    property = combined_damage_index
    execute_on = timestep_end
  []
  [areax]
    type = ConstantAux
    block = '2'
    variable = area
    value = 1.29e-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_model = EUROCODE-2004
    ref_density = 2231.0 # in kg/m^3
    ref_specific_heat = 1100.0 # in J/(Kg.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
    aggregate_vol_fraction = 0.7
    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_model = Xi #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 = 19e9 # scales up/down the maximum creep strain
    recoverable_viscosity = 2592000 # governs how fast the max creep strain is reached; 30 days
    long_term_viscosity = 138240000 # effect the time on the linear elastic portion; 4.38 years
    long_term_characteristic_time = 138240000 # effect how slow the saturation reaches; 4.38 years
    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.5e-2
    characteristic_time = 35.0
    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 = 1.0
    expansion_stress_limit = 8.0e6
    tensile_strength = 3.1e6
    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 = 32.0
    eigenstrain_name = thermal_expansion
  []
  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.7
    damage_index_name = asr_damage_index
    block = 1
  []
  [mazars_damage]
    block = 1
    damage_index_name = mazars_damage_index
    type = MazarsDamage
    tensile_strength = 3.1e6
    a_t = 0.9
    a_c = 1.0
    b_t = 16000
    b_c = 1600
  []
  [combined_damage]
    type = CombinedScalarDamage
    block = 1
    damage_models = 'ASR_damage_concrete mazars_damage'
    damage_index_name = combined_damage_index
    maximum_damage = 0.95
    use_old_damage = true
  []
  [stress]
    type = ComputeMultipleInelasticStress
    block = 1
    inelastic_models = 'creep'
    damage_model = combined_damage
  []
  [plastic_truss]
    type = PlasticTruss
    block = '2 3'
    youngs_modulus = 2e11
    yield_stress = 415e6
    hardening_constant = 0.0
    relative_tolerance = 1e-5
    absolute_tolerance = 1e-6
    temperature = T
    thermal_expansion_coeff = 11.3e-6
    temperature_ref = 32.0
  []
  [thermal_truss]
    type = GenericConstantMaterial
    block = '2 3'
    prop_names = 'thermal_conductivity specific_heat density'
    prop_values = '45                 446           7850' # W/(m K), J/(kg K), kg/m^3
  []
[]
[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 -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  start_time = 14391759
  dt = 200000
  dtmin = 200000
  automatic_scaling = true
  resid_vs_jac_scaling_param = 0.5
  end_time = 38880000 #450 days
  l_max_its = 10
  nl_max_its = 50
  nl_rel_tol = 1e-5
  nl_abs_tol = 3e-6
  [Predictor]
    type = SimplePredictor
    scale = 1.0
  []
[]
[Outputs]
  perf_graph = true
  csv = true
[]
[Debug]
  show_var_residual_norms = true
[]
(assessment/asr_validation/wald2017b/analysis/A1-unreinforced.i)
[GlobalParams]
  displacements = 'disp_x disp_y disp_z'
[]
[Problem]
  type = ReferenceResidualProblem
  reference_vector = 'ref'
  extra_tag_vectors = 'ref'
  group_variables = 'disp_x disp_y disp_z'
  acceptable_multiplier = 10
  acceptable_iterations = 50
[]
[Mesh]
  file = A1-unreinforced.e
[]
[Variables]
  [T]
    initial_condition = 29.7
  []
  [rh]
    initial_condition = 0.8
  []
  [disp_x]
  []
  [disp_y]
  []
  [disp_z]
  []
[]
[AuxVariables]
  [resid_x]
  []
  [resid_y]
  []
  [resid_z]
  []
  [ASR_ex]
    order = CONSTANT
    family = MONOMIAL
  []
  [ASR_vstrain]
    order = CONSTANT
    family = MONOMIAL
  []
  [ASR_strain_xx]
    order = CONSTANT
    family = MONOMIAL
  []
  [ASR_strain_yy]
    order = CONSTANT
    family = MONOMIAL
  []
  [ASR_strain_zz]
    order = CONSTANT
    family = MONOMIAL
  []
  [ASR_strain_xy]
    order = CONSTANT
    family = MONOMIAL
  []
  [ASR_strain_yz]
    order = CONSTANT
    family = MONOMIAL
  []
  [ASR_strain_zx]
    order = CONSTANT
    family = MONOMIAL
  []
  [volumetric_strain]
    order = CONSTANT
    family = MONOMIAL
  []
  [thermal_strain_xx]
    order = CONSTANT
    family = MONOMIAL
  []
  [thermal_strain_yy]
    order = CONSTANT
    family = MONOMIAL
  []
  [thermal_strain_zz]
    order = CONSTANT
    family = MONOMIAL
  []
  [thermal_conductivity]
    order = CONSTANT
    family = Monomial
  []
  [thermal_capacity]
    order = CONSTANT
    family = Monomial
  []
  [humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  []
  [asr_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [mazars_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [combined_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [concrete]
    strain = FINITE
    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'
    temperature = T
  []
[]
[Kernels]
  [T_td]
    type = ConcreteThermalTimeIntegration
    variable = T
    extra_vector_tags = 'ref'
  []
  [T_diff]
    type = ConcreteThermalConduction
    variable = T
    extra_vector_tags = 'ref'
  []
  [T_conv]
    type = ConcreteThermalConvection
    variable = T
    relative_humidity = rh
    extra_vector_tags = 'ref'
  []
  [T_adsorption]
    type = ConcreteLatentHeat
    variable = T
    H = rh
    extra_vector_tags = 'ref'
  []
  [rh_td]
    type = ConcreteMoistureTimeIntegrationMassLumped
    variable = rh
    extra_vector_tags = 'ref'
  []
  [rh_diff]
    type = ConcreteMoistureDiffusion
    variable = rh
    temperature = T
    extra_vector_tags = 'ref'
  []
[]
[AuxKernels]
  [ASR_ex]
    type = MaterialRealAux
    variable = ASR_ex
    property = ASR_extent
    execute_on = 'timestep_end'
  []
  [ASR_vstrain]
    type = MaterialRealAux
    variable = ASR_vstrain
    property = ASR_volumetric_strain
    execute_on = 'timestep_end'
  []
  [ASR_strain_xx]
    type = RankTwoAux
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  []
  [ASR_strain_yy]
    type = RankTwoAux
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  []
  [ASR_strain_zz]
    type = RankTwoAux
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zz
    index_i = 2
    index_j = 2
    execute_on = 'timestep_end'
  []
  [ASR_strain_xy]
    type = RankTwoAux
    rank_two_tensor = asr_expansion
    variable = ASR_strain_xy
    index_i = 0
    index_j = 1
    execute_on = 'timestep_end'
  []
  [ASR_strain_yz]
    type = RankTwoAux
    rank_two_tensor = asr_expansion
    variable = ASR_strain_yz
    index_i = 1
    index_j = 2
    execute_on = 'timestep_end'
  []
  [ASR_strain_zx]
    type = RankTwoAux
    rank_two_tensor = asr_expansion
    variable = ASR_strain_zx
    index_i = 0
    index_j = 2
    execute_on = 'timestep_end'
  []
  [thermal_strain_xx]
    type = RankTwoAux
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_xx
    index_i = 0
    index_j = 0
    execute_on = 'timestep_end'
  []
  [thermal_strain_yy]
    type = RankTwoAux
    rank_two_tensor = thermal_expansion
    variable = thermal_strain_yy
    index_i = 1
    index_j = 1
    execute_on = 'timestep_end'
  []
  [thermal_strain_zz]
    type = RankTwoAux
    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
  []
  [k]
    type = MaterialRealAux
    variable = thermal_conductivity
    property = thermal_conductivity
    execute_on = 'timestep_end'
  []
  [capacity]
    type = MaterialRealAux
    variable = thermal_capacity
    property = thermal_capacity
    execute_on = 'timestep_end'
  []
  [rh_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
  []
  [asr_damage_index]
    type = MaterialRealAux
    variable = asr_damage_index
    property = asr_damage_index
    execute_on = timestep_end
  []
  [mazars_damage_index]
    type = MaterialRealAux
    variable = mazars_damage_index
    property = mazars_damage_index
    execute_on = timestep_end
  []
  [combined_damage_index]
    type = MaterialRealAux
    variable = combined_damage_index
    property = combined_damage_index
    execute_on = timestep_end
  []
[]
[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
    # setup thermal property models and parameters
    # options available: CONSTANT ASCE-1992 KODUR-2004 EUROCODE-2004 KIM-2003
    thermal_model = EUROCODE-2004
    ref_density = 2231.0 # in kg/m^3
    ref_specific_heat = 1100.0 # in J/(Kg.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
    aggregate_vol_fraction = 0.7
    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_model = Xi #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
  []
  [logcreep]
    type = ConcreteLogarithmicCreepModel
    poissons_ratio = 0.22
    youngs_modulus = 37.3e9
    recoverable_youngs_modulus = 19e9 # scales up/down the maximum creep strain
    recoverable_viscosity = 2592000 # governs how fast the max creep strain is reached; 30 days
    long_term_viscosity = 138240000 # effect the time on the linear elastic portion; 4.38 years
    long_term_characteristic_time = 138240000 # effect how slow the saturation reaches; 4.38 years
    humidity = rh
    temperature = T
    activation_temperature = 23.0
  []
  [ASR_expansion]
    type = ConcreteASREigenstrain
    expansion_type = Anisotropic
    reference_temperature = 35.0
    temperature_unit = Celsius
    max_volumetric_expansion = 2.5e-2
    characteristic_time = 35.0
    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 = 1.0
    expansion_stress_limit = 8.0e6
    tensile_strength = 3.1e6
    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
    temperature = T
    thermal_expansion_coeff = 8.0e-6
    stress_free_temperature = 29.7
    eigenstrain_name = thermal_expansion
  []
  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.7
    damage_index_name = asr_damage_index
  []
  [mazars_damage]
    damage_index_name = mazars_damage_index
    type = MazarsDamage
    tensile_strength = 3.1e6
    a_t = 0.9
    a_c = 1.0
    b_t = 16000
    b_c = 1600
  []
  [combined_damage]
    type = CombinedScalarDamage
    damage_models = 'ASR_damage_concrete mazars_damage'
    damage_index_name = combined_damage_index
    maximum_damage = 0.95
    use_old_damage = true
  []
  [stress]
    type = ComputeMultipleInelasticStress
    inelastic_models = 'creep'
    damage_model = combined_damage
  []
[]
[UserObjects]
  [visco_update]
    type = LinearViscoelasticityManager
    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
  []
  [ASR_strain_xx]
    type = ElementAverageValue
    variable = ASR_strain_xx
  []
  [ASR_strain_yy]
    type = ElementAverageValue
    variable = ASR_strain_yy
  []
  [ASR_strain_zz]
    type = ElementAverageValue
    variable = ASR_strain_zz
  []
  [ASR_ext]
    type = ElementAverageValue
    variable = ASR_ex
  []
  [vonmises]
    type = ElementAverageValue
    variable = vonmises_stress
  []
  [vstrain]
    type = ElementAverageValue
    variable = volumetric_strain
  []
  [strain_xx]
    type = ElementAverageValue
    variable = strain_xx
  []
  [strain_yy]
    type = ElementAverageValue
    variable = strain_yy
  []
  [strain_zz]
    type = ElementAverageValue
    variable = strain_zz
  []
  [temp]
    type = ElementAverageValue
    variable = T
  []
  [temp_bc]
    type = SideAverageValue
    variable = T
    boundary = 102
  []
  [humidity]
    type = ElementAverageValue
    variable = rh
  []
  [humidity_bc]
    type = SideAverageValue
    variable = rh
    boundary = 102
  []
  [thermal_strain_xx]
    type = ElementAverageValue
    variable = thermal_strain_xx
  []
  [thermal_strain_yy]
    type = ElementAverageValue
    variable = thermal_strain_yy
  []
  [thermal_strain_zz]
    type = ElementAverageValue
    variable = thermal_strain_zz
  []
  [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 -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  start_time = 2419200 #28 days
  dt = 200000
  dtmin = 200000
  automatic_scaling = true
  resid_vs_jac_scaling_param = 0.5
  end_time = 38880000 #450 days
  l_max_its = 10
  nl_max_its = 50
  nl_rel_tol = 1e-5
  nl_abs_tol = 3e-6
  [Predictor]
    type = SimplePredictor
    scale = 1.0
  []
[]
[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'
  acceptable_multiplier = 10
  acceptable_iterations = 50
[]
[Mesh]
  file = A1-triaxial.e
[]
[Variables]
  [T]
    initial_condition = 29.7
  []
  [rh]
    initial_condition = 0.8
    block = 1
  []
  [disp_x]
  []
  [disp_y]
  []
  [disp_z]
  []
[]
[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
  []
  [humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  []
  [asr_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [mazars_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [combined_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [area]
    order = CONSTANT
    family = MONOMIAL
  []
  [axial_stress]
    order = CONSTANT
    family = MONOMIAL
  []
  [axial_strain]
    order = CONSTANT
    family = MONOMIAL
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [concrete]
    block = 1
    strain = FINITE
    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'
    temperature = T
  []
[]
[Physics/SolidMechanics/LineElement/QuasiStatic]
  [Reinforcement_block]
    block = '2 3 4'
    truss = true
    area = area
    #Note: Intentionally 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 = ConcreteMoistureTimeIntegrationMassLumped
    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 = TrussHeatConductionTimeDerivative
    variable = T
    area = area
    block = '2 3 4'
    extra_vector_tags = 'ref'
  []
  [heat_conduction]
    type = TrussHeatConduction
    variable = T
    area = area
    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_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
    block = 1
  []
  [asr_damage_index]
    type = MaterialRealAux
    block = 1
    variable = asr_damage_index
    property = asr_damage_index
    execute_on = timestep_end
  []
  [mazars_damage_index]
    type = MaterialRealAux
    block = 1
    variable = mazars_damage_index
    property = mazars_damage_index
    execute_on = timestep_end
  []
  [combined_damage_index]
    type = MaterialRealAux
    block = 1
    variable = combined_damage_index
    property = combined_damage_index
    execute_on = timestep_end
  []
  [areax]
    type = ConstantAux
    block = '2'
    variable = area
    value = 1.29e-4
    execute_on = 'initial timestep_begin'
  []
  [areaz]
    type = ConstantAux
    block = '3'
    variable = area
    value = 1.29e-4
    execute_on = 'initial timestep_begin'
  []
  [areay]
    type = ConstantAux
    block = '4'
    variable = area
    value = 1.29e-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_model = EUROCODE-2004
    ref_density = 2231.0 # in kg/m^3
    ref_specific_heat = 1100.0 # in J/(Kg.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
    aggregate_vol_fraction = 0.7
    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_model = Xi #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 = 19e9 # scales up/down the maximum creep strain
    recoverable_viscosity = 2592000 # governs how fast the max creep strain is reached; 30 days
    long_term_viscosity = 138240000 # effect the time on the linear elastic portion; 4.38 years
    long_term_characteristic_time = 138240000 # effect how slow the saturation reaches; 4.38 years
    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.5e-2
    characteristic_time = 35.0
    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 = 1.0
    expansion_stress_limit = 8.0e6
    tensile_strength = 3.1e6
    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 = 29.7
    eigenstrain_name = thermal_expansion
  []
  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.7
    damage_index_name = asr_damage_index
    block = 1
  []
  [mazars_damage]
    block = 1
    damage_index_name = mazars_damage_index
    type = MazarsDamage
    tensile_strength = 3.1e6
    a_t = 0.9
    a_c = 1.0
    b_t = 16000
    b_c = 1600
  []
  [combined_damage]
    type = CombinedScalarDamage
    block = 1
    damage_models = 'ASR_damage_concrete mazars_damage'
    damage_index_name = combined_damage_index
    maximum_damage = 0.95
    use_old_damage = true
  []
  [stress]
    type = ComputeMultipleInelasticStress
    block = 1
    inelastic_models = 'creep'
    damage_model = combined_damage
  []
  [plastic_truss]
    type = PlasticTruss
    block = '2 3 4'
    youngs_modulus = 2e11
    yield_stress = 415e6
    hardening_constant = 0.0
    relative_tolerance = 1e-5
    absolute_tolerance = 1e-6
    temperature = T
    thermal_expansion_coeff = 11.3e-6
    temperature_ref = 29.7
  []
  [thermal_truss]
    type = GenericConstantMaterial
    block = '2 3 4'
    prop_names = 'thermal_conductivity specific_heat density'
    prop_values = '45                 446           7850' # W/(m K), J/(kg K), kg/m^3
  []
[]
[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 -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  start_time = 2419200 #28 days
  dt = 200000
  dtmin = 200000
  automatic_scaling = true
  resid_vs_jac_scaling_param = 0.5
  end_time = 38880000 #450 days
  l_max_its = 10
  nl_max_its = 50
  nl_rel_tol = 1e-5
  nl_abs_tol = 3e-6
  [Predictor]
    type = SimplePredictor
    scale = 1.0
  []
[]
[Outputs]
  perf_graph = true
  csv = true
[]
[Debug]
  show_var_residual_norms = true
[]
(test/tests/concrete_moisture_heat_transfer/maqbeth_1d.i)
[Problem]
  type = ReferenceResidualProblem
  reference_vector = 'ref'
  extra_tag_vectors = 'ref'
[]
[Mesh]
  file = maqbeth_1d.e
  construct_side_list_from_node_list = true
  coord_type = RZ
[]
[Functions]
  [temp_hist]
    type = PiecewiseLinear
    x = '0.0  36000.0 114120.0 138600.0  213120'
    y = '20.0  20.0      150.0     80.0   200.0'
  []
[]
[Variables]
  [T]
    order = FIRST
    family = LAGRANGE
    initial_condition = 20.0
  []
  [rh]
    order = FIRST
    family = LAGRANGE
    initial_condition = 0.96
  []
[]
[AuxVariables]
  [thermal_conductivity]
    order = CONSTANT
    family = Monomial
  []
  [thermal_capacity]
    order = CONSTANT
    family = Monomial
  []
  [humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  []
[]
[Kernels]
  [T_td]
    type     = ConcreteThermalTimeIntegration
    variable = T
    extra_vector_tags = 'ref'
  []
  [T_diff]
    type     = ConcreteThermalConduction
    variable = T
    extra_vector_tags = 'ref'
  []
  [T_conv]
    type     = ConcreteThermalConvection
    variable = T
    relative_humidity = rh
    extra_vector_tags = 'ref'
  []
  [T_adsorption]
    type     = ConcreteLatentHeat
    variable = T
    H = rh
    extra_vector_tags = 'ref'
  []
  [rh_td]
    type     = ConcreteMoistureTimeIntegrationMassLumped
    variable = rh
    extra_vector_tags = 'ref'
  []
  [h_diff]
    type     = ConcreteMoistureDiffusion
    variable = rh
    temperature = T
    extra_vector_tags = 'ref'
  []
[]
[AuxKernels]
  [k]
    type = MaterialRealAux
    variable = thermal_conductivity
    property = thermal_conductivity
    execute_on = 'timestep_end'
  [../]
  [./capacity]
    type = MaterialRealAux
    variable = thermal_capacity
    property = thermal_capacity
    execute_on = 'timestep_end'
  [../]
  [./rh_diff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
  [../]
[]
[Materials]
  [./concrete]
    type = ConcreteThermalMoisture
    block = 1
    # concrete mix proportion parameters
    cement_mass = 354.0 #mass of cement (kg) per m^3 of concrete
    aggregate_mass = 1877.0 #mass of aggregate (kg) per m^3 of concrete
    water_to_cement_ratio = 0.435
    # Thermal transport model and its parameters
    thermal_model = KODUR-2004 #options available: CONSTANT ASCE-1992 KODUR-2004 EUROCODE-2004 KIM-2003
    aggregate_type = Siliceous #options: Siliceous Carbonate
    # Moisture transport model and its parameters
    moisture_model = Mensi #options: Bazant Xi Mensi
    A = 1.042e-13
    B = 0.05
    # coupled nonlinear variables
    relative_humidity = rh
    temperature = T
  [../]
[]
[BCs]
  [./T_left]
    type = FunctionDirichletBC
    variable = T
    boundary = '1'
    function = temp_hist
  [../]
  [./T_right]
    type = ConvectiveFluxBC
    variable = T
    boundary = '2'
    final = 20.0
    rate = 10.0
  [../]
  [./rh_left]
    type = SpecifiedVaporPressureBC
    variable = rh
    boundary = '1'
    duration = 3600
    vapor_pressure = 2500.0
    temperature = T
  [../]
  [./rh_right]
    type = SpecifiedVaporPressureBC
    variable = rh
    boundary = '2'
    duration = 3600
    vapor_pressure = 2500.0
    temperature = T
  [../]
[]
[VectorPostprocessors]
  [profiles]
    type = LineValueSampler
    start_point = '0.5 0 0'
    end_point = '1.1 0 0'
    num_points = 100
    variable = 'T rh'
    sort_by = id
    outputs = csv
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[Executioner]
  type       = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  automatic_scaling = true
  dt = 10000
  end_time = 900000.0
  l_max_its  = 50
  l_tol      = 1e-6
  nl_max_its = 10
  nl_rel_tol = 1e-6
  nl_abs_tol = 1e-10
  [Predictor]
    type = SimplePredictor
    scale = 1.0
    skip_times_old = '0.0  36000.0 114120.0 138600.0  213120'
  []
[]
[Outputs]
  exodus     = true
  [csv]
    type = CSV
    file_base = 'maqbeth_1d_csv/out'
    time_data = 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'
  acceptable_multiplier = 10
  acceptable_iterations = 50
[]
[Mesh]
  file = A1-biaxial.e
[]
[Variables]
  [T]
    initial_condition = 29.7
  []
  [rh]
    initial_condition = 0.8
    block = 1
  []
  [disp_x]
  []
  [disp_y]
  []
  [disp_z]
  []
[]
[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
  []
  [humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  []
  [asr_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [mazars_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [combined_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [area]
    order = CONSTANT
    family = MONOMIAL
  []
  [axial_stress]
    order = CONSTANT
    family = MONOMIAL
  []
  [axial_strain]
    order = CONSTANT
    family = MONOMIAL
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [concrete]
    block = 1
    strain = FINITE
    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'
    temperature = T
  []
[]
[Physics/SolidMechanics/LineElement/QuasiStatic]
  [Reinforcement_block]
    block = '2 3'
    truss = true
    area = area
    #Note: Intentionally 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 = ConcreteMoistureTimeIntegrationMassLumped
    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 = TrussHeatConductionTimeDerivative
    variable = T
    area = area
    block = '2 3'
    extra_vector_tags = 'ref'
  []
  [heat_conduction]
    type = TrussHeatConduction
    variable = T
    area = area
    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_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
    block = 1
  []
  [asr_damage_index]
    type = MaterialRealAux
    block = 1
    variable = asr_damage_index
    property = asr_damage_index
    execute_on = timestep_end
  []
  [mazars_damage_index]
    type = MaterialRealAux
    block = 1
    variable = mazars_damage_index
    property = mazars_damage_index
    execute_on = timestep_end
  []
  [combined_damage_index]
    type = MaterialRealAux
    block = 1
    variable = combined_damage_index
    property = combined_damage_index
    execute_on = timestep_end
  []
  [areax]
    type = ConstantAux
    block = '2'
    variable = area
    value = 1.29e-4
    execute_on = 'initial timestep_begin'
  []
  [areaz]
    type = ConstantAux
    block = '3'
    variable = area
    value = 1.29e-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_model = EUROCODE-2004
    ref_density = 2231.0 # in kg/m^3
    ref_specific_heat = 1100.0 # in J/(Kg.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
    aggregate_vol_fraction = 0.7
    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_model = Xi #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 = 19e9 # scales up/down the maximum creep strain
    recoverable_viscosity = 2592000 # governs how fast the max creep strain is reached; 30 days
    long_term_viscosity = 138240000 # effect the time on the linear elastic portion; 4.38 years
    long_term_characteristic_time = 138240000 # effect how slow the saturation reaches; 4.38 years
    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.5e-2
    characteristic_time = 35.0
    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 = 1.0
    expansion_stress_limit = 8.0e6
    tensile_strength = 3.1e6
    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 = 29.7
    eigenstrain_name = thermal_expansion
  []
  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.7
    damage_index_name = asr_damage_index
    block = 1
  []
  [mazars_damage]
    block = 1
    damage_index_name = mazars_damage_index
    type = MazarsDamage
    tensile_strength = 3.1e6
    a_t = 0.9
    a_c = 1.0
    b_t = 16000
    b_c = 1600
  []
  [combined_damage]
    type = CombinedScalarDamage
    block = 1
    damage_models = 'ASR_damage_concrete mazars_damage'
    damage_index_name = combined_damage_index
    maximum_damage = 0.95
    use_old_damage = true
  []
  [stress]
    type = ComputeMultipleInelasticStress
    block = 1
    inelastic_models = 'creep'
    damage_model = combined_damage
  []
  [plastic_truss]
    type = PlasticTruss
    block = '2 3'
    youngs_modulus = 2e11
    yield_stress = 415e6
    hardening_constant = 0.0
    relative_tolerance = 1e-5
    absolute_tolerance = 1e-6
    temperature = T
    thermal_expansion_coeff = 11.3e-6
    temperature_ref = 29.7
  []
  [thermal_truss]
    type = GenericConstantMaterial
    block = '2 3'
    prop_names = 'thermal_conductivity specific_heat density'
    prop_values = '45                 446           7850' # W/(m K), J/(kg K), kg/m^3
  []
[]
[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 -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  start_time = 2419200 #28 days
  dt = 200000
  dtmin = 200000
  automatic_scaling = true
  resid_vs_jac_scaling_param = 0.5
  end_time = 38880000 #450 days
  l_max_its = 10
  nl_max_its = 50
  nl_rel_tol = 1e-5
  nl_abs_tol = 3e-6
  [Predictor]
    type = SimplePredictor
    scale = 1.0
  []
[]
[Outputs]
  perf_graph = true
  csv = true
[]
[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'
  acceptable_multiplier = 10
  acceptable_iterations = 50
[]
[Mesh]
  file = A1-uniaxial.e
[]
[Variables]
  [T]
    initial_condition = 29.7
  []
  [rh]
    initial_condition = 0.8
    block = 1
  []
  [disp_x]
  []
  [disp_y]
  []
  [disp_z]
  []
[]
[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
  []
  [humidity_diffusivity]
    order = CONSTANT
    family = Monomial
  []
  [asr_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [mazars_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [combined_damage_index]
    order = CONSTANT
    family = MONOMIAL
  []
  [area]
    order = CONSTANT
    family = MONOMIAL
  []
  [axial_stress]
    order = CONSTANT
    family = MONOMIAL
  []
  [axial_strain]
    order = CONSTANT
    family = MONOMIAL
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [concrete]
    block = 1
    strain = FINITE
    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'
    temperature = T
  []
[]
[Physics/SolidMechanics/LineElement/QuasiStatic]
  [Reinforcement_block]
    block = '2'
    truss = true
    area = area
    #Note: Intentionally 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 = ConcreteMoistureTimeIntegrationMassLumped
    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 = TrussHeatConductionTimeDerivative
    variable = T
    area = area
    block = 2
    extra_vector_tags = 'ref'
  []
  [heat_conduction]
    type = TrussHeatConduction
    variable = T
    area = area
    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_duff]
    type = MaterialRealAux
    variable = humidity_diffusivity
    property = humidity_diffusivity
    execute_on = 'timestep_end'
    block = 1
  []
  [asr_damage_index]
    type = MaterialRealAux
    block = 1
    variable = asr_damage_index
    property = asr_damage_index
    execute_on = timestep_end
  []
  [mazars_damage_index]
    type = MaterialRealAux
    block = 1
    variable = mazars_damage_index
    property = mazars_damage_index
    execute_on = timestep_end
  []
  [combined_damage_index]
    type = MaterialRealAux
    block = 1
    variable = combined_damage_index
    property = combined_damage_index
    execute_on = timestep_end
  []
  [area]
    type = ConstantAux
    block = '2'
    variable = area
    value = 1.29e-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_model = EUROCODE-2004
    ref_density = 2231.0 # in kg/m^3
    ref_specific_heat = 1100.0 # in J/(Kg.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
    aggregate_vol_fraction = 0.7
    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_model = Xi #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 = 19e9 # scales up/down the maximum creep strain
    recoverable_viscosity = 2592000 # governs how fast the max creep strain is reached; 30 days
    long_term_viscosity = 138240000 # effect the time on the linear elastic portion; 4.38 years
    long_term_characteristic_time = 138240000 # effect how slow the saturation reaches; 4.38 years
    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.5e-2
    characteristic_time = 35.0
    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 = 1.0
    expansion_stress_limit = 8.0e6
    tensile_strength = 3.1e6
    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 = 29.7
    eigenstrain_name = thermal_expansion
  []
  [ASR_damage_concrete]
    type = ConcreteASRMicrocrackingDamage
    residual_youngs_modulus_fraction = 0.7
    damage_index_name = asr_damage_index
    block = 1
  []
  [mazars_damage]
    block = 1
    damage_index_name = mazars_damage_index
    type = MazarsDamage
    tensile_strength = 3.1e6
    a_t = 0.9
    a_c = 1.0
    b_t = 16000
    b_c = 1600
  []
  [combined_damage]
    type = CombinedScalarDamage
    block = 1
    damage_models = 'ASR_damage_concrete mazars_damage'
    damage_index_name = combined_damage_index
    maximum_damage = 0.95
    use_old_damage = true
  []
  [stress]
    type = ComputeMultipleInelasticStress
    block = 1
    inelastic_models = 'creep'
    damage_model = combined_damage
  []
  [plastic_truss]
    type = PlasticTruss
    block = '2'
    youngs_modulus = 2e11
    yield_stress = 415e6
    hardening_constant = 0.0
    relative_tolerance = 1e-5
    absolute_tolerance = 1e-6
    temperature = T
    thermal_expansion_coeff = 11.3e-6
    temperature_ref = 29.7
  []
  [thermal_truss]
    type = GenericConstantMaterial
    block = '2'
    prop_names = 'thermal_conductivity specific_heat density'
    prop_values = '45                 446           7850' # W/(m K), J/(kg K), kg/m^3
  []
[]
[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 -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  start_time = 2419200 #28 days
  dt = 200000
  dtmin = 200000
  automatic_scaling = true
  resid_vs_jac_scaling_param = 0.5
  end_time = 38880000 #450 days
  l_max_its = 10
  nl_max_its = 50
  nl_rel_tol = 1e-5
  nl_abs_tol = 3e-6
  [Predictor]
    type = SimplePredictor
    scale = 1.0
  []
[]
[Outputs]
  perf_graph = true
  csv = true
[]
[Debug]
  show_var_residual_norms = true
[]