diff --git a/test/include/bcs/FunctionPenaltyDirichletBC.h b/framework/include/bcs/FunctionPenaltyDirichletBC.h similarity index 100% rename from test/include/bcs/FunctionPenaltyDirichletBC.h rename to framework/include/bcs/FunctionPenaltyDirichletBC.h diff --git a/test/include/bcs/PenaltyDirichletBC.h b/framework/include/bcs/PenaltyDirichletBC.h similarity index 98% rename from test/include/bcs/PenaltyDirichletBC.h rename to framework/include/bcs/PenaltyDirichletBC.h index 933d2627040e..acb38b453a75 100644 --- a/test/include/bcs/PenaltyDirichletBC.h +++ b/framework/include/bcs/PenaltyDirichletBC.h @@ -45,8 +45,6 @@ class PenaltyDirichletBC : public IntegratedBC virtual Real computeQpJacobian(); private: - Function & _func; - Real _p; Real _v; }; diff --git a/framework/src/base/Moose.C b/framework/src/base/Moose.C index 8155229e17f4..2e954bfa9d3d 100644 --- a/framework/src/base/Moose.C +++ b/framework/src/base/Moose.C @@ -58,9 +58,11 @@ // bcs #include "ConvectiveFluxBC.h" #include "DirichletBC.h" +#include "PenaltyDirichletBC.h" #include "PresetBC.h" #include "NeumannBC.h" #include "FunctionDirichletBC.h" +#include "FunctionPenaltyDirichletBC.h" #include "FunctionPresetBC.h" #include "FunctionNeumannBC.h" #include "MatchedValueBC.h" @@ -427,9 +429,11 @@ registerObjects(Factory & factory) // bcs registerBoundaryCondition(ConvectiveFluxBC); registerBoundaryCondition(DirichletBC); + registerBoundaryCondition(PenaltyDirichletBC); registerBoundaryCondition(PresetBC); registerBoundaryCondition(NeumannBC); registerBoundaryCondition(FunctionDirichletBC); + registerBoundaryCondition(FunctionPenaltyDirichletBC); registerBoundaryCondition(FunctionPresetBC); registerBoundaryCondition(FunctionNeumannBC); registerBoundaryCondition(MatchedValueBC); diff --git a/test/src/bcs/FunctionPenaltyDirichletBC.C b/framework/src/bcs/FunctionPenaltyDirichletBC.C similarity index 96% rename from test/src/bcs/FunctionPenaltyDirichletBC.C rename to framework/src/bcs/FunctionPenaltyDirichletBC.C index cdedcc18172d..ac8b706f55fa 100644 --- a/test/src/bcs/FunctionPenaltyDirichletBC.C +++ b/framework/src/bcs/FunctionPenaltyDirichletBC.C @@ -18,7 +18,7 @@ template<> InputParameters validParams() { InputParameters params = validParams(); - params.addParam("penalty",1e6,"Penalty scalar"); + params.addRequiredParam("penalty", "Penalty scalar"); params.addRequiredParam("function", "Forcing function"); return params; diff --git a/test/src/bcs/PenaltyDirichletBC.C b/framework/src/bcs/PenaltyDirichletBC.C similarity index 90% rename from test/src/bcs/PenaltyDirichletBC.C rename to framework/src/bcs/PenaltyDirichletBC.C index 879ab986e07f..ac54549107ad 100644 --- a/test/src/bcs/PenaltyDirichletBC.C +++ b/framework/src/bcs/PenaltyDirichletBC.C @@ -18,16 +18,14 @@ template<> InputParameters validParams() { InputParameters params = validParams(); - params.addParam("penalty",1e5,"Penalty scalar"); + params.addRequiredParam("penalty", "Penalty scalar"); params.addParam("value", 0.0, "Boundary value of the variable"); - params.addRequiredParam("function", "Forcing function"); return params; } PenaltyDirichletBC::PenaltyDirichletBC(const std::string & name, InputParameters parameters) : IntegratedBC(name, parameters), - _func(getFunction("function")), _p(getParam("penalty")), _v(getParam("value")) {} diff --git a/modules/solid_mechanics/tests/penalty_dirichlet/gold/out.e b/modules/solid_mechanics/tests/penalty_dirichlet/gold/out.e new file mode 100644 index 000000000000..fe37efc3f82d Binary files /dev/null and b/modules/solid_mechanics/tests/penalty_dirichlet/gold/out.e differ diff --git a/modules/solid_mechanics/tests/penalty_dirichlet/penalty_dirichlet.i b/modules/solid_mechanics/tests/penalty_dirichlet/penalty_dirichlet.i new file mode 100644 index 000000000000..a0ea37e913a7 --- /dev/null +++ b/modules/solid_mechanics/tests/penalty_dirichlet/penalty_dirichlet.i @@ -0,0 +1,142 @@ +#This tests the PenaltyDirichletBC and PenaltyFunctionDirichletBC on +#a simple solid mechanics problem. A unit cube of material has +#penalty BCs on the left and right hand side. The penalty for both of +#those BCs is the same as the stiffness of the block in that direction, +#so the compliance is due to the left BC, block, and right BC in equal +#portions. As a result, the displacement on the left side is 1/3 the +#displacement imposed by the function, and on the right side it is 2/3 +#that value. + +[Mesh] + type = GeneratedMesh + dim = 2 + xmin = 0.0 + xmax = 1.0 + ymin = 0.0 + ymax = 1.0 + nx = 2 + ny = 2 + displacements = 'disp_x disp_y' +[] + +[Variables] + [./disp_x] + order = FIRST + family = LAGRANGE + [../] + [./disp_y] + order = FIRST + family = LAGRANGE + [../] +[] + +[AuxVariables] + [./stress_xx] + order = CONSTANT + family = MONOMIAL + [../] + [./stress_yy] + order = CONSTANT + family = MONOMIAL + [../] + [./stress_zz] + order = CONSTANT + family = MONOMIAL + [../] +[] + +[SolidMechanics] + [./solid] + disp_x = disp_x + disp_y = disp_y + [../] +[] + +[AuxKernels] + [./stress_xx] + type = MaterialTensorAux + variable = stress_xx + tensor = stress + index = 0 + [../] + [./stress_yy] + type = MaterialTensorAux + variable = stress_yy + tensor = stress + index = 1 + [../] + [./stress_zz] + type = MaterialTensorAux + variable = stress_zz + tensor = stress + index = 2 + [../] +[] + +[Functions] + [./pull] + type = PiecewiseLinear + xy_data = '0 0 + 1 0.001' + [../] +[] + +[BCs] + [./left_x] + type = PenaltyDirichletBC + variable = disp_x + boundary = left + value = 0.0 + penalty = 1e4 + [../] + [./right_x] + type = FunctionPenaltyDirichletBC + variable = disp_x + boundary = right + function = pull + penalty = 1e4 + [../] + [./bottom_y] + type = DirichletBC + variable = disp_y + boundary = bottom + value = 0.0 + [../] +[] + +[Materials] + [./solid] + type = Elastic + block = 0 + disp_x = disp_x + disp_y = disp_y + youngs_modulus = 1e4 + poissons_ratio = 0.0 + [../] +[] + +[Executioner] + type = Transient + + #Preconditioned JFNK (default) + solve_type = 'PJFNK' + + petsc_options = '-snes_ksp_ew ' + petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type' + petsc_options_value = '101 hypre boomeramg' + nl_rel_tol = 1e-12 + l_tol = 1e-5 + start_time = 0.0 + dt = 1 + num_steps = 1 +[] + +[Outputs] + file_base = out + output_initial = true + print_linear_residuals = true + print_perf_log = true + [./exodus] + type = Exodus + [../] +[] diff --git a/modules/solid_mechanics/tests/penalty_dirichlet/tests b/modules/solid_mechanics/tests/penalty_dirichlet/tests new file mode 100644 index 000000000000..f215c10afc67 --- /dev/null +++ b/modules/solid_mechanics/tests/penalty_dirichlet/tests @@ -0,0 +1,7 @@ +[Tests] + [./test] + type = 'Exodiff' + input = 'penalty_dirichlet.i' + exodiff = 'out.e' + [../] +[] diff --git a/test/src/base/MooseTestApp.C b/test/src/base/MooseTestApp.C index cff97ab858b8..72a200511cc5 100644 --- a/test/src/base/MooseTestApp.C +++ b/test/src/base/MooseTestApp.C @@ -131,8 +131,6 @@ #include "DGMDDBC.h" #include "DGFunctionConvectionDirichletBC.h" #include "CoupledKernelGradBC.h" -#include "PenaltyDirichletBC.h" -#include "FunctionPenaltyDirichletBC.h" #include "ExplicitODE.h" #include "ImplicitODEx.h" @@ -341,8 +339,6 @@ MooseTestApp::registerObjects(Factory & factory) registerBoundaryCondition(DGMDDBC); registerBoundaryCondition(DGFunctionConvectionDirichletBC); - registerBoundaryCondition(PenaltyDirichletBC); - registerBoundaryCondition(FunctionPenaltyDirichletBC); registerBoundaryCondition(CoupledKernelGradBC); diff --git a/test/tests/bcs/penalty_dirichlet_bc/function_penalty_dirichlet_bc_test.i b/test/tests/bcs/penalty_dirichlet_bc/function_penalty_dirichlet_bc_test.i index e81dc0a2b087..03f1a9e8d8d1 100644 --- a/test/tests/bcs/penalty_dirichlet_bc/function_penalty_dirichlet_bc_test.i +++ b/test/tests/bcs/penalty_dirichlet_bc/function_penalty_dirichlet_bc_test.i @@ -56,6 +56,7 @@ variable = u function = solution boundary = 'top left right bottom' + penalty = 1e6 [../] [] diff --git a/test/tests/bcs/penalty_dirichlet_bc/penalty_dirichlet_bc_test.i b/test/tests/bcs/penalty_dirichlet_bc/penalty_dirichlet_bc_test.i index a2435cf380a8..de28bcbe0ed9 100644 --- a/test/tests/bcs/penalty_dirichlet_bc/penalty_dirichlet_bc_test.i +++ b/test/tests/bcs/penalty_dirichlet_bc/penalty_dirichlet_bc_test.i @@ -55,8 +55,8 @@ type = PenaltyDirichletBC variable = u value = 0 - function = solution boundary = 'top left right bottom' + penalty = 1e5 [../] [] diff --git a/test/tests/kernels/coupled_kernel_grad/coupled_kernel_grad_test.i b/test/tests/kernels/coupled_kernel_grad/coupled_kernel_grad_test.i index b1e2c24e131f..2fe60d140803 100644 --- a/test/tests/kernels/coupled_kernel_grad/coupled_kernel_grad_test.i +++ b/test/tests/kernels/coupled_kernel_grad/coupled_kernel_grad_test.i @@ -104,6 +104,7 @@ variable = u function = slnu boundary = 'left right top bottom' + penalty = 1e6 [../] [./bc_v] type = FunctionDirichletBC @@ -117,6 +118,7 @@ variable = u function = slnu boundary = 'left right top bottom' + penalty = 1e6 [../] [./bc_u_tb] type = CoupledKernelGradBC diff --git a/test/tests/misc/check_error/coupled_grad_without_declare.i b/test/tests/misc/check_error/coupled_grad_without_declare.i index 801dbb5664f3..938316bc80bb 100644 --- a/test/tests/misc/check_error/coupled_grad_without_declare.i +++ b/test/tests/misc/check_error/coupled_grad_without_declare.i @@ -107,6 +107,7 @@ variable = u function = slnu boundary = 'left right top bottom' + penalty = 1e6 [../] [./bc_v] type = FunctionDirichletBC @@ -120,6 +121,7 @@ variable = u function = slnu boundary = 'left right top bottom' + penalty = 1e6 [../] [./bc_u_tb] type = CoupledKernelGradBC diff --git a/test/tests/outputs/debug/show_var_residual_norms.i b/test/tests/outputs/debug/show_var_residual_norms.i index 5a0595910b4e..020110909dbd 100644 --- a/test/tests/outputs/debug/show_var_residual_norms.i +++ b/test/tests/outputs/debug/show_var_residual_norms.i @@ -104,6 +104,7 @@ variable = u function = slnu boundary = 'left right top bottom' + penalty = 1e6 [../] [./bc_v] type = FunctionDirichletBC @@ -117,6 +118,7 @@ variable = u function = slnu boundary = 'left right top bottom' + penalty = 1e6 [../] [./bc_u_tb] type = CoupledKernelGradBC diff --git a/test/tests/outputs/debug/show_var_residual_norms_debug.i b/test/tests/outputs/debug/show_var_residual_norms_debug.i index 33fcae562480..67290550106e 100644 --- a/test/tests/outputs/debug/show_var_residual_norms_debug.i +++ b/test/tests/outputs/debug/show_var_residual_norms_debug.i @@ -104,6 +104,7 @@ variable = u function = slnu boundary = 'left right top bottom' + penalty = 1e6 [../] [./bc_v] type = FunctionDirichletBC @@ -117,6 +118,7 @@ variable = u function = slnu boundary = 'left right top bottom' + penalty = 1e6 [../] [./bc_u_tb] type = CoupledKernelGradBC