diff --git a/src/ComputationalModels/EvolutionFunctions.jl b/src/ComputationalModels/EvolutionFunctions.jl index e77e2e6..1f82e91 100644 --- a/src/ComputationalModels/EvolutionFunctions.jl +++ b/src/ComputationalModels/EvolutionFunctions.jl @@ -1,4 +1,17 @@ +"The evolution functions have been designed to apply variable boundary conditions." +module EvolutionFunctions + +export ramp +export triangular +export step +export sigmoid +export constant + +"Return an unbounded ramp function. By default, it is the identity. Otherwise, the scaling factor is 1/T." +function ramp(T::Float64=1.0) + t::Float64 -> t/T +end "Return a triangular evolution function ranging from 0 to 1, centered at T, having edges at 0 and 2T." function triangular(T::Float64) @@ -40,3 +53,5 @@ end function constant() t::Float64 -> 1.0 end + +end diff --git a/test/data/StaticMechanicalDirichletSimulation.jl b/test/data/StaticMechanicalDirichletSimulation.jl index 1bb0688..38627b5 100644 --- a/test/data/StaticMechanicalDirichletSimulation.jl +++ b/test/data/StaticMechanicalDirichletSimulation.jl @@ -5,6 +5,7 @@ using TimerOutputs using Gridap.FESpaces using HyperFEM using HyperFEM.ComputationalModels.CartesianTags +using HyperFEM.ComputationalModels.EvolutionFunctions function static_mechanical_dirichlet_simulation(;writevtk=true, verbose=true) @@ -32,7 +33,7 @@ function static_mechanical_dirichlet_simulation(;writevtk=true, verbose=true) # Dirichlet boundary conditions dir_u_tags = ["fixed", "moving"] dir_u_values = [[0.0, 0.0, 0.0], [0.08, 0.0, 0.0]] - dir_u_timesteps = [Λ -> 1.0, Λ -> Λ] + dir_u_timesteps = [constant(), ramp()] D_bc = DirichletBC(dir_u_tags, dir_u_values, dir_u_timesteps) # FE spaces diff --git a/test/data/StaticMechanicalNeumannSimulation.jl b/test/data/StaticMechanicalNeumannSimulation.jl index 718863c..5bd25e3 100644 --- a/test/data/StaticMechanicalNeumannSimulation.jl +++ b/test/data/StaticMechanicalNeumannSimulation.jl @@ -5,6 +5,7 @@ using TimerOutputs using Gridap.FESpaces using HyperFEM using HyperFEM.ComputationalModels.CartesianTags +using HyperFEM.ComputationalModels.EvolutionFunctions function static_mechanical_neumann_simulation(;writevtk=true, verbose=true) @@ -32,13 +33,13 @@ function static_mechanical_neumann_simulation(;writevtk=true, verbose=true) # Dirichlet conditions dir_u_tags = ["fixed"] dir_u_values = [[0.0, 0.0, 0.0]] - dir_u_timesteps = [Λ -> 1.0] + dir_u_timesteps = [constant()] D_bc = DirichletBC(dir_u_tags, dir_u_values, dir_u_timesteps) # Neumann conditions neu_F_tags = ["force"] neu_F_values = [[0.0, 0.0, -1e-3]] - neu_F_timesteps = [Λ -> Λ] + neu_F_timesteps = [ramp()] N_bc = NeumannBC(neu_F_tags, neu_F_values, neu_F_timesteps) dΓ = get_Neumann_dΓ(geometry, N_bc, degree) diff --git a/test/data/ViscoElasticSimulation.jl b/test/data/ViscoElasticSimulation.jl index 73b07f7..a5ba220 100644 --- a/test/data/ViscoElasticSimulation.jl +++ b/test/data/ViscoElasticSimulation.jl @@ -4,8 +4,7 @@ using GridapSolvers using GridapSolvers.NonlinearSolvers using HyperFEM using HyperFEM.ComputationalModels.CartesianTags -using HyperFEM.ComputationalModels:constant -using HyperFEM.ComputationalModels:triangular +using HyperFEM.ComputationalModels.EvolutionFunctions using HyperFEM.ComputationalModels.PostMetrics function visco_elastic_simulation(;t_end=15, writevtk=true, verbose=true)