Skip to content

Commit

Permalink
Make FEMBeam.jl compatible with Julia version 0.7
Browse files Browse the repository at this point in the history
* Fix deprecation warnings.
* Add 0.7, 1.0 and nightly to `.travis.yml`.
* Do not use `PkgTestSuite.jl`.
* Refactor / cleanup of 2d beam tests.
  • Loading branch information
ahojukka5 committed Aug 27, 2018
1 parent 6bd9946 commit fa69d2e
Show file tree
Hide file tree
Showing 17 changed files with 189 additions and 187 deletions.
19 changes: 12 additions & 7 deletions .travis.yml
@@ -1,12 +1,17 @@
language: julia

os:
- linux

julia:
- 0.6
before_script:
- julia --color=yes -e 'Pkg.clone("https://github.com/JuliaFEM/PkgTestSuite.jl.git")'
- julia --color=yes -e 'using PkgTestSuite; init()'
script:
- julia --color=yes -e 'using PkgTestSuite; test()'
- 0.7
- 1.0
- nightly

matrix:
allow_failures:
- julia: 1.0
- julia: nightly

after_success:
- julia --color=yes -e 'using PkgTestSuite; deploy()'
- julia -e 'cd(Pkg.dir("FEMBeam")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())'
3 changes: 1 addition & 2 deletions REQUIRE
@@ -1,3 +1,2 @@
julia 0.6
julia 0.7
FEMBase
Reexport
2 changes: 1 addition & 1 deletion docs/deploy.jl
Expand Up @@ -5,7 +5,7 @@ using Documenter

deploydocs(
repo = "github.com/JuliaFEM/FEMBeam.jl.git",
julia = "0.6",
julia = "1.0",
target = "build",
deps = nothing,
make = nothing)
5 changes: 2 additions & 3 deletions docs/make.jl
Expand Up @@ -3,9 +3,8 @@

using Documenter, FEMBeam

makedocs(modules=[FEMBeam],
makedocs(modules = [FEMBeam],
format = :html,
checkdocs = :all,
sitename = "FEMBeam.jl",
pages = ["index.md"]
)
pages = ["index.md"])
11 changes: 8 additions & 3 deletions src/FEMBeam.jl
@@ -1,11 +1,16 @@
# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/FEMBeam.jl/blob/master/LICENSE

""" Beam implementation for JuliaFEM. """
"""
FEMBeam - Beam implementation for JuliaFEM
# Supported beams
- Euler-Bernoulli beam in 3d
"""
module FEMBeam

using Reexport
@reexport using FEMBase
using FEMBase, LinearAlgebra, SparseArrays

include("get_beam_stiffness_matrix_2d.jl")
include("get_beam_forces_vector_2d.jl")
Expand Down
8 changes: 5 additions & 3 deletions src/beam2d.jl
@@ -1,8 +1,10 @@
# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/FEMBeam.jl/blob/master/LICENSE

mutable struct Beam2D <: FieldProblem
end
"""
Beam2D - Euler-Bernoulli beam for 2d problems
"""
struct Beam2D <: FieldProblem end

function FEMBase.get_unknown_field_name(::Problem{Beam2D})
return "displacement"
Expand All @@ -12,7 +14,7 @@ function FEMBase.assemble_elements!(::Problem{Beam2D}, ::Assembly,
elements::Vector{Element{B}}, ::Float64) where B

for element in elements
info("Not doing anything useful right now.")
@info("Not doing anything useful right now (someone should implement).")
end

return nothing
Expand Down
11 changes: 3 additions & 8 deletions src/beam3d.jl
Expand Up @@ -2,20 +2,15 @@
# License is MIT: see https://github.com/JuliaFEM/FEMBeam.jl/blob/master/LICENSE

"""
Beam()
Euler-Bernoulli beam, 3d formulation.
Beam - Euler-Bernoulli beam for 3d problems
# Load types for distributed load
- P1 and P1 for loads in beam normal 1 and normal 2 direction
- PX, PY, PZ for loads in global coordinate system
"""
mutable struct Beam <: FieldProblem
end
struct Beam <: FieldProblem end

function FEMBase.get_unknown_field_name(::Problem{Beam})
return "displacement"
end
FEMBase.get_unknown_field_name(::Problem{Beam}) = "displacement"

function FEMBase.get_integration_points(::Problem{Beam}, ::Element{Seg2})
return FEMBase.get_quadrature_points(Val{:GLSEG3})
Expand Down
7 changes: 3 additions & 4 deletions src/get_beam_forces_vector_2d.jl
Expand Up @@ -2,18 +2,17 @@
# License is MIT: see https://github.com/JuliaFEM/FEMBeam.jl/blob/master/LICENSE

"""
Function integrates forces vector for
6 DOF Euler-Bernoulli beam element in 2D.
get_beam_forces_vector_2d(X1, X2, qt, qn, f)
get_beam_forces_vector_2d(X1,X2,qt,qn,f)
Function integrates forces vector for 6 DOF Euler-Bernoulli beam element in 2D.
X1 = beams left node coordinates
X2 = beams right node coordinates
qt = Tangential uniformly distributed load
qn = Normal uniformly distributed load
f = Point forces vector in global coordinates
"""
function get_beam_forces_vector_2d(X1,X2,qt,qn,f)
function get_beam_forces_vector_2d(X1, X2, qt, qn, f)
le=norm(X2-X1) # Lenght of element
a=atan((X2[2]-X1[2])/(X2[1]-X1[1])) # Rotation angle of the element
nn=2 # Number of nodes
Expand Down
5 changes: 2 additions & 3 deletions src/get_beam_mass_matrix_2d.jl
Expand Up @@ -2,10 +2,9 @@
# License is MIT: see https://github.com/JuliaFEM/FEMBeam.jl/blob/master/LICENSE

"""
Function integrates mass matrix for
6 DOF Euler-Bernoulli beam element in 2d.
get_beam_mass_matrix_2d(X1, X2, A, ro)
get_beam_mass_matrix_2d(X1,X2,A,ro)
Function integrates mass matrix for 6 DOF Euler-Bernoulli beam element in 2d.
X1 = beams left node coordinates
X2 = beams right node coordinates
Expand Down
5 changes: 2 additions & 3 deletions src/get_beam_stiffness_matrix_2d.jl
Expand Up @@ -2,10 +2,9 @@
# License is MIT: see https://github.com/JuliaFEM/FEMBeam.jl/blob/master/LICENSE

"""
Function integrates stiffness matrix for
6 DOF Euler-Bernoulli beam element.
get_beam_stiffness_matrix_2d(X1, X2, E, I, A)
get_beam_stiffness_matrix_2d(X1,X2,E,I,A)
Function integrates stiffness matrix for 6 DOF Euler-Bernoulli beam element.
X1 = beams left node coordinates
X2 = beams right node coordinates
Expand Down
1 change: 1 addition & 0 deletions test/REQUIRE
@@ -1 +1,2 @@
Documenter
TimerOutputs
6 changes: 3 additions & 3 deletions test/read_abaqus.jl
Expand Up @@ -49,23 +49,23 @@ t = """
function read_mtx(data; dim=0)
if dim == 0
for ln in eachline(copy(data))
i,idof,j,jdof,value = map(parse, split(ln, ','))
i,idof,j,jdof,value = map(Meta.parse, split(ln, ','))
dim = max(dim, idof, jdof)
end
end
I = Int64[]
J = Int64[]
V = Float64[]
for ln in eachline(data)
i,idof,j,jdof,value = map(parse, split(ln, ','))
i,idof,j,jdof,value = map(Meta.parse, split(ln, ','))
if i < 1 || j < 1
continue
end
push!(I, (i-1)*dim+idof)
push!(J, (j-1)*dim+jdof)
push!(V, value)
end
A = full(sparse(I, J, V))
A = Matrix(sparse(I, J, V))
A += transpose(tril(A,-1))
return A
end
Expand Down
154 changes: 19 additions & 135 deletions test/runtests.jl
@@ -1,148 +1,32 @@
# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/FEMBeam.jl/blob/master/LICENSE

using FEMBeam
using FEMBase.Test
using FEMBase, FEMBeam, Test, LinearAlgebra, SparseArrays

@testset "Beam 1 Stiffness matrix" begin
X1=[0.0,0.0]; X2=[0.0,6.5]
E=210.0e9
I=50.8e-3*101.6e-3^3/12
A=50.8e-3*101.6e-3
k = FEMBeam.get_beam_stiffness_matrix_2d(X1,X2,E,I,A)
k_expected=
[40740.3 1.02079e-8 -1.32406e5 -40740.3 -1.02079e-8 -1.32406e5;
1.02079e-8 1.66749e8 8.10752e-12 -1.02079e-8 -1.66749e8 8.10752e-12;
-1.32406e5 8.10752e-12 573759.0 1.32406e5 -8.10752e-12 2.8688e5;
-40740.3 -1.02079e-8 1.32406e5 40740.3 1.02079e-8 1.32406e5;
-1.02079e-8 -1.66749e8 -8.10752e-12 1.02079e-8 1.66749e8 -8.10752e-12;
-1.32406e5 8.10752e-12 2.8688e5 1.32406e5 -8.10752e-12 573759.0]
@test isapprox(k, k_expected, rtol=0.0001)
end

@testset "Beam 1 force vector" begin
X1=[0.0,0.0]; X2=[0.0,6.5]
qt=-500
qn=0
f=zeros(6,1)
f = FEMBeam.get_beam_forces_vector_2d(X1,X2,qt,qn,f)
f_expected=[1625.0, -9.95026e-14, -1760.42, 1625.0, -9.95026e-14, 1760.42]
@test isapprox(f, f_expected, rtol=0.0001)
end

@testset "Beam 1 mass matrix" begin
X1=[0.0,0.0]; X2=[0.0,6.5]
A=50.8e-3*101.6e-3
ro=7800
m = FEMBeam.get_beam_mass_matrix_2d(X1,X2,A,ro)
m_expected=
[97.1943 -6.10403e-16 -89.0948 33.6442 6.10403e-16 52.6469;
-6.10403e-16 87.2256 5.45548e-15 6.10403e-16 43.6128 -3.22369e-15;
-89.0948 5.45548e-15 105.294 -52.6469 3.22369e-15 -78.9703;
33.6442 6.10403e-16 -52.6469 97.1943 -6.10403e-16 89.0948;
6.10403e-16 43.6128 3.22369e-15 -6.10403e-16 87.2256 -5.45548e-15;
52.6469 -3.22369e-15 -78.9703 89.0948 -5.45548e-15 105.294]
@test isapprox(m, m_expected, rtol=0.0001)
end

@testset "Beam 2 Stiffness matrix" begin
X1=[0.0,6.5]; X2=[8.0,6.5]
E=250.0e9
I=75.0e-3*100.0e-3^3/12
A=75.0e-3*100.0e-3
k = FEMBeam.get_beam_stiffness_matrix_2d(X1,X2,E,I,A)
k_expected=
[2.34375e8 0.0 0.0 -2.34375e8 0.0 0.0;
0.0 36621.1 1.46484e5 0.0 -36621.1 1.46484e5;
0.0 1.46484e5 781250.0 0.0 -1.46484e5 390625.0;
-2.34375e8 0.0 0.0 2.34375e8 0.0 0.0;
0.0 -36621.1 -1.46484e5 0.0 36621.1 -1.46484e5;
0.0 1.46484e5 390625.0 0.0 -1.46484e5 781250.0]
@test isapprox(k, k_expected, rtol=0.0001)
end

@testset "Beam 2 force vector" begin
X1=[0.0,6.5]; X2=[8.0,6.5]
qt=-750
qn=0
f=zeros(6,1)
f = FEMBeam.get_beam_forces_vector_2d(X1,X2,qt,qn,f)
f_expected=[0.0, -3000.0, -4000.0, 0.0, -3000.0, 4000.0]
@test isapprox(f, f_expected, rtol=0.0001)
end
include("../docs/make.jl")

@testset "Beam 2 mass matrix" begin
X1=[0.0,6.5]; X2=[8.0,6.5]
A=75e-3*100e-3
ro=10000
m = FEMBeam.get_beam_mass_matrix_2d(X1,X2,A,ro)
m_expected=
[200.0 0.0 0.0 100.0 0.0 0.0;
0.0 222.857 251.429 0.0 77.1429 -148.571;
0.0 251.429 365.714 0.0 148.571 -274.286;
100.0 0.0 0.0 200.0 0.0 0.0;
0.0 77.1429 148.571 0.0 222.857 -251.429;
0.0 -148.571 -274.286 0.0 -251.429 365.714]
@test isapprox(m, m_expected, rtol=0.0001)
end
@testset "FEMBeam.jl" begin

@testset "Beam 3 Stiffness matrix" begin
X1=[8.0,6.5]; X2=[8.0,0.0]
E=160.0e9
I=50.0e-3*50.0e-3^3/12
A=50.0e-3*50.0e-3
k = FEMBeam.get_beam_stiffness_matrix_2d(X1,X2,E,I,A)
k_expected=
[3641.33 -3.76792e-9 11834.3 -3641.33 3.76792e-9 11834.3;
-3.76792e-9 6.15385e7 7.24643e-13 3.76792e-9 -6.15385e7 7.24643e-13;
11834.3 7.24643e-13 51282.1 -11834.3 -7.24643e-13 25641.0;
-3641.33 3.76792e-9 -11834.3 3641.33 -3.76792e-9 -11834.3;
3.76792e-9 -6.15385e7 -7.24643e-13 -3.76792e-9 6.15385e7 -7.24643e-13;
11834.3 7.24643e-13 25641.0 -11834.3 -7.24643e-13 51282.1]
@test isapprox(k, k_expected, rtol=0.0001)
end
@testset "test beam 2d" begin
include("test_beam2d.jl")
end

@testset "Beam 3 force vector" begin
X1=[8.0,6.5]; X2=[8.0,0.0]
qt=0
qn=0
f=zeros(6,1)
f = FEMBeam.get_beam_forces_vector_2d(X1,X2,qt,qn,f)
f_expected=zeros(6,1)
@test isapprox(f, f_expected, rtol=0.0001)
end
@testset "test beam 3D stiffness" begin
include("test_beam3d_ex1.jl")
end

@testset "Beam 3 mass matrix" begin
X1=[8.0,6.5]; X2=[8.0,0.0]
A=50.0e-3*50.0e-3
ro=6000
m = FEMBeam.get_beam_mass_matrix_2d(X1,X2,A,ro)
m_expected=
[36.2143 2.27434e-16 33.1964 12.5357 -2.27434e-16 -19.6161;
2.27434e-16 32.5 2.03269e-15 -2.27434e-16 16.25 -1.20114e-15;
33.1964 2.03269e-15 39.2321 19.6161 1.20114e-15 -29.4241;
12.5357 -2.27434e-16 19.6161 36.2143 2.27434e-16 -33.1964;
-2.27434e-16 16.25 1.20114e-15 2.27434e-16 32.5 -2.03269e-15;
-19.6161 -1.20114e-15 -29.4241 -33.1964 -2.03269e-15 39.2321]
@test isapprox(m, m_expected, rtol=0.0001)
end
@testset "test beam 3D mass matrix" begin
include("test_beam3d_mass_matrix.jl")
end

@testset "test beam 2d" begin
include("test_beam2d.jl")
end
@testset "test supports" begin
include("test_supports.jl")
end

@testset "test beam 3D stiffness" begin
include("test_beam3d_ex1.jl")
end

@testset "test beam 3D mass matrix" begin
include("test_beam3d_mass_matrix.jl")
end
@testset "test_rotation_matrix.jl" begin
include("test_rotation_matrix.jl")
end

@testset "test supports" begin
include("test_supports.jl")
end

@testset "test_rotation_matrix.jl" begin
include("test_rotation_matrix.jl")
end
include("../docs/make.jl")

0 comments on commit fa69d2e

Please sign in to comment.