Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/fem/tests/2ndtime/TimeIntegrate.f90
5255 views
1
2
!------------------------------------------------------------------------------
3
SUBROUTINE TimeIntTest_Init( Model,Solver,dt,TransientSimulation )
4
!------------------------------------------------------------------------------
5
USE DefUtils
6
7
IMPLICIT NONE
8
!------------------------------------------------------------------------------
9
TYPE(Solver_t) :: Solver
10
TYPE(Model_t) :: Model
11
12
REAL(KIND=dp) :: dt
13
LOGICAL :: TransientSimulation
14
!------------------------------------------------------------------------------
15
CALL ListAddInteger( GetSolverParams(), 'Time Derivative Order', 2 )
16
!------------------------------------------------------------------------------
17
END SUBROUTINE TimeIntTest_Init
18
!------------------------------------------------------------------------------
19
20
21
!------------------------------------------------------------------------------
22
SUBROUTINE TimeIntTest( Model,Solver,dt,TransientSimulation )
23
!------------------------------------------------------------------------------
24
USE DefUtils
25
26
IMPLICIT NONE
27
!------------------------------------------------------------------------------
28
TYPE(Solver_t) :: Solver
29
TYPE(Model_t) :: Model
30
31
REAL(KIND=dp) :: dt
32
LOGICAL :: TransientSimulation
33
!------------------------------------------------------------------------------
34
! Local variables
35
!------------------------------------------------------------------------------
36
TYPE(Element_t),POINTER :: Element
37
38
LOGICAL :: Found
39
40
INTEGER :: n
41
REAL(KIND=dp) :: Norm
42
43
TYPE(ValueList_t), POINTER :: BodyForce
44
REAL(KIND=dp) :: STIFF(1,1), MASS(1,1), DAMP(1,1), LOAD(1), FORCE(1)
45
!------------------------------------------------------------------------------
46
47
!Initialize the system and do the assembly:
48
!------------------------------------------
49
CALL DefaultInitialize()
50
51
Element => GetActiveElement(1)
52
n = GetElementNOFNodes()
53
LOAD = 0.0d0
54
55
BodyForce => GetBodyForce()
56
IF ( ASSOCIATED(BodyForce) ) &
57
Load(1:n) = GetReal( BodyForce, 'Source', Found )
58
59
!Get element local matrix and rhs vector:
60
!----------------------------------------
61
STIFF = 0.0d0
62
DAMP = 0.0d0
63
MASS = 1.0d0
64
FORCE = Load
65
66
!Update global matrix and rhs vector from local matrix & vector:
67
!---------------------------------------------------------------
68
CALL Default2ndOrderTime( MASS, DAMP, STIFF, FORCE )
69
CALL DefaultUpdateEquations( STIFF, FORCE )
70
CALL DefaultFinishBulkAssembly()
71
CALL DefaultFinishBoundaryAssembly()
72
CALL DefaultFinishAssembly()
73
!
74
! Solve the system and we are done:
75
! ---------------------------------
76
Norm = DefaultSolve()
77
!------------------------------------------------------------------------------
78
79
!------------------------------------------------------------------------------
80
END SUBROUTINE TimeIntTest
81
!------------------------------------------------------------------------------
82
83