From 2bbfb132ff1996a42c9c4f419d00f96600019ad1 Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Tue, 24 Nov 2020 10:49:55 -0700 Subject: [PATCH] added another p91 test that runs a creep simulation reproducing results from the milestone report --- test/tests/p91_rom/creepRamp.i | 200 ++++++++++++++++++++++ test/tests/p91_rom/gold/creepRamp_out.csv | 23 +++ test/tests/p91_rom/tests | 12 +- 3 files changed, 233 insertions(+), 2 deletions(-) create mode 100644 test/tests/p91_rom/creepRamp.i create mode 100644 test/tests/p91_rom/gold/creepRamp_out.csv diff --git a/test/tests/p91_rom/creepRamp.i b/test/tests/p91_rom/creepRamp.i new file mode 100644 index 00000000..e561e010 --- /dev/null +++ b/test/tests/p91_rom/creepRamp.i @@ -0,0 +1,200 @@ +# Test of creep response due to stress ramp +# see figure 3.6 of: +# Munday, Lynn Brendon, et al. Multiscale-Informed Modeling of High Temperature +# Component Response with Uncertainty Quantification. No. INL/EXT-20-59795-Rev000. +# Idaho National Lab.(INL), Idaho Falls, ID (United States), 2020. + +[Mesh] + type = GeneratedMesh + dim = 3 + nx = 1 + ny = 1 + nz = 1 +[] + +[GlobalParams] + displacements = 'disp_x disp_y disp_z' +[] + +[AuxVariables] + [temperature] + initial_condition = 889 + [] + [effective_inelastic_strain] + order = FIRST + family = MONOMIAL + [] + [cell_dislocations] + order = FIRST + family = MONOMIAL + [] + [wall_dislocations] + order = FIRST + family = MONOMIAL + [] +[] + + +[AuxKernels] + [effective_inelastic_strain] + type = ADMaterialRealAux + variable = effective_inelastic_strain + property = effective_creep_strain + [] + [cell_dislocations] + type = ADMaterialRealAux + variable = cell_dislocations + property = cell_dislocations + [] + [wall_dislocations] + type = ADMaterialRealAux + variable = wall_dislocations + property = wall_dislocations + [] +[] + +[Modules/TensorMechanics/Master] + [./all] + strain = FINITE + add_variables = true + generate_output = 'vonmises_stress' + use_automatic_differentiation = true + [../] +[] + +[BCs] + [./symmy] + type = ADDirichletBC + variable = disp_y + boundary = bottom + value = 0 + [../] + [./symmx] + type = ADDirichletBC + variable = disp_x + boundary = left + value = 0 + [../] + [./symmz] + type = ADDirichletBC + variable = disp_z + boundary = back + value = 0 + [../] + [./pressure_x] + type = ADPressure + variable = disp_x + component = 0 + boundary = right + constant = -0.5 + function = shear_function + [../] + [./pressure_y] + type = ADPressure + variable = disp_y + component = 1 + boundary = top + constant = -0.5 + function = shear_function + [../] + [./pressure_z] + type = ADPressure + variable = disp_z + component = 2 + boundary = front + constant = 0.5 + function = shear_function + [../] +[] + +[Functions] + [shear_function] + type = ParsedFunction + value = 'timeToDoubleInHours := 10; + if(t<=28*60*60, 30.9e6, 30.9e6*(t-28*3600)/3600/timeToDoubleInHours+30.9e6)' + [] +[] + +[Materials] + [./elasticity_tensor] + type = ADComputeIsotropicElasticityTensor + youngs_modulus = 1.68e11 + poissons_ratio = 0.31 + [../] + [./stress] + type = ADComputeMultipleInelasticStress + inelastic_models = rom_stress_prediction + [../] + [./mx_phase_fraction] + type = ADGenericConstantMaterial + prop_names = mx_phase_fraction + prop_values = 5.13e-2 #precipitation bounds: 6e-3, 1e-1 + outputs = all + [../] + [./rom_stress_prediction] + type = P91LAROMANCEStressUpdate + temperature = temperature + stress_input_window_failure = WARN + cell_input_window_failure = ERROR + wall_input_window_failure = ERROR + temperature_input_window_failure = ERROR + environment_input_window_failure = ERROR #This is the phase fraction, below + environmental_factor = mx_phase_fraction + initial_cell_dislocation_density = 2.3e12 #bounds 1e12 to 6e12 + initial_wall_dislocation_density = 1.41e13 # bounds 6e12 1.8e13 + #verbose = true + [../] +[] + + +[Executioner] + type = Transient + + solve_type = 'NEWTON' + + nl_abs_tol = 1e-12 + nl_rel_tol = 1e-4 + automatic_scaling = true + compute_scaling_once = false + + dtmin = 0.1 + dtmax = 1e5 + end_time = 136800 + [TimeStepper] + type = IterationAdaptiveDT + dt = 0.1 ## This model requires a tiny timestep at the onset for the first 10s + iteration_window = 4 + optimal_iterations = 12 + time_t = '100800' + time_dt = '1e5' + [] + +[] + +[Postprocessors] + [./effective_strain_avg] + type = ElementAverageValue + variable = effective_inelastic_strain + [../] + [./temperature] + type = ElementAverageValue + variable = temperature + [../] + [./cell_dislocations] + type = ElementAverageValue + variable = cell_dislocations + [../] + [./wall_disloactions] + type = ElementAverageValue + variable = wall_dislocations + [../] + [max_vonmises_stress] + type = ElementExtremeValue + variable = vonmises_stress + value_type = max + [] +[] + +[Outputs] + csv = true +[] diff --git a/test/tests/p91_rom/gold/creepRamp_out.csv b/test/tests/p91_rom/gold/creepRamp_out.csv new file mode 100644 index 00000000..281a710e --- /dev/null +++ b/test/tests/p91_rom/gold/creepRamp_out.csv @@ -0,0 +1,23 @@ +time,cell_dislocations,effective_strain_avg,max_vonmises_stress,temperature,wall_disloactions +0,0,0,0,0,0 +0.1,2299999584843,2.8239863891297e-11,30900000.000087,889,14099999214991 +0.3,2299998754529.6,8.4719573215337e-11,30900000.000001,889,14099997644973 +0.7,2299997093904.3,1.9767891803058e-10,30900000.000001,889,14099994504938 +1.5,2299993772660.6,4.2359731232991e-10,30899999.999987,889,14099988224875 +3.1,2299987130200.2,8.7543291960792e-10,30899999.999987,889,14099975664775 +6.3,2299973845388,1.7790994089062e-09,30899999.999984,889,14099950544676 +12.7,2299947276197.5,3.5864134866768e-09,30900000.000012,889,14099900304889 +25.5,2299894139552.5,7.2009660405009e-09,30900000.000003,889,14099799826954 +51.1,2299787873205.9,1.4429768754124e-08,30900000.000006,889,14099598877637 +102.3,2299575368281.2,2.8886164707891e-08,30899999.999992,889,14099197005212 +204.7,2299150469470.8,5.7794119542198e-08,30899999.999868,889,14098393365172 +409.5,2298301115720.7,1.1559068747558e-07,30899999.998206,889,14096786504058 +819.1,2296604181425.7,2.3110650875955e-07,30899999.983682,889,14093574455607 +1638.3,2293217387498.9,4.6182931017672e-07,30899999.862982,889,14087157037091 +3276.7,2286471953970.1,9.2204285955241e-07,30899998.893109,889,14074348780905 +6553.5,2273092564266.7,1.8376155234885e-06,30899991.332137,889,14048837546501 +13107.1,2246770729761,3.6496387447944e-06,30899999.999991,889,13998227979493 +26214.3,2195806539639.2,7.1997678850007e-06,30899999.99979,889,13898598469538 +52428.7,2100095203093.8,1.402283739894e-05,30899999.983193,889,13705249684169 +100800,1943300006255.3,2.5702365672341e-05,30899999.506939,889,13367558840006 +136800,1641436845120.5,7.3371298990059e-05,61799814.982908,889,12936364077961 diff --git a/test/tests/p91_rom/tests b/test/tests/p91_rom/tests index 5e9b23da..545e23b0 100644 --- a/test/tests/p91_rom/tests +++ b/test/tests/p91_rom/tests @@ -3,6 +3,12 @@ issues = '#141' design = 'P91LAROMANCEStressUpdate.md' requirement = 'The system shall compute a creep rate based on a reduced order model for P91' + [./creepRamp] + type = 'CSVDiff' + input = 'creepRamp.i' + csvdiff = 'creepRamp_out.csv' + detail = 'and reproduce figure 3.6 for a stress ramp in the high temp creep report INL/EXT-20-59795 Sept. 2020' + [../] [./verification] type = 'CSVDiff' input = 'verification.i' @@ -10,7 +16,8 @@ cli_args = 'Executioner/dt=25 Executioner/num_steps=10' petsc_version = '>=3.9.0' max_parallel = 1 - detail = 'in isolation (i.e. without a full displacement solve), and match with code-to-code comparison. Sometimes both codes will produce unrealistic values for the inputs.' + detail = 'in isolation (i.e. without a full displacement solve), and match with code-to-code comparison with the LANL FORTRAN surragate model of the P91 rom.' + ' This implementation and the LANL code will both produce the same unrealistic output values for some of the inputs provided in the p91_verification_data.csv.' [../] [./verification_heavy] type = 'CSVDiff' @@ -22,7 +29,8 @@ cli_args = 'Executioner/dt=1 Outputs/file_base=verification_heavy_out' max_parallel = 1 allow_test_objects = true - detail = 'in isolation (i.e. without a full displacement solve), and match with code-to-code comparison with a large set of input parameters. Sometimes both codes will produce unrealistic values for the inputs.' + detail = 'in isolation (i.e. without a full displacement solve), and match with code-to-code comparison with the LANL FORTRAN surragate model of the P91 rom for a large set of inputs.' + ' This implementation and the LANL code will both produce the same unrealistic output values for some of the inputs provided in the p91_verification_data.csv.' [../] [../] []