File: test_free.f90

package info (click to toggle)
fortran-language-server 3.2.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,268 kB
  • sloc: python: 9,688; f90: 1,195; fortran: 30; makefile: 28; ansic: 20
file content (82 lines) | stat: -rw-r--r-- 2,239 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
MODULE test_free
USE, INTRINSIC :: iso_fortran_env, ONLY: error_unit
IMPLICIT NONE
! ą
TYPE :: scale_type
  REAL(8) :: val = 1.d0
END TYPE scale_type
!
TYPE :: vector
  INTEGER(4) :: n
  REAL(8), POINTER, DIMENSION(:) :: v => NULL()
  PROCEDURE(fort_wrap), NOPASS, POINTER :: bound_nopass => NULL()
CONTAINS
  PROCEDURE :: create => vector_create !< Doc 1
  PROCEDURE :: norm => vector_norm !< Doc 2
  PROCEDURE, PASS(self) :: bound_pass => bound_pass   !< Doc 3
END TYPE vector
!
TYPE, EXTENDS(vector) :: scaled_vector
  TYPE(scale_type) :: scale
CONTAINS
  PROCEDURE :: set_scale => scaled_vector_set !<
  PROCEDURE :: norm => scaled_vector_norm !< Doc 3
END TYPE scaled_vector
!
INTERFACE
  SUBROUTINE fort_wrap(a,b)
  INTEGER(4), INTENT(in) :: a
  REAL(8), INTENT(out) :: b
  END SUBROUTINE fort_wrap
END INTERFACE
!
LOGICAL :: module_variable
CONTAINS
!> Doc 4
SUBROUTINE vector_create(self, n)
CLASS(vector), INTENT(inout) :: self
INTEGER(4), INTENT(in) :: n !! Doc 5
self%n=n
ALLOCATE(self%v(n))
self%v=0.d0
END SUBROUTINE vector_create
!> Doc 6
FUNCTION vector_norm(self) RESULT(norm)
CLASS(vector), INTENT(in) :: self
REAL(8) :: norm
norm = SQRT(DOT_PRODUCT(self%v,self%v))
END FUNCTION vector_norm
!> Doc 7
SUBROUTINE scaled_vector_set(self, scale)
CLASS(scaled_vector), INTENT(inout) :: self ! no documentation
REAL(8), INTENT(in) :: scale !< Doc 8
self%scale%val = scale
END SUBROUTINE scaled_vector_set
!> Top level docstring
FUNCTION scaled_vector_norm(self) RESULT(norm)
CLASS(scaled_vector), INTENT(in) :: self  !< self value docstring
REAL(8) :: norm !< return value docstring
norm = self%scale%val*SQRT(DOT_PRODUCT(self%v,self%v))
END FUNCTION scaled_vector_norm
!
PURE REAL(8) FUNCTION unscaled_norm(self)
CLASS(scaled_vector), INTENT(in) :: self
! REAL(8) :: unscaled_norm
unscaled_norm = SQRT(DOT_PRODUCT(self%v,self%v))
END FUNCTION unscaled_norm
!
SUBROUTINE test_sig_Sub(arg1,arg2,opt1,opt2,opt3)
INTEGER, INTENT(in) :: arg1,arg2
INTEGER, OPTIONAL, INTENT(in) :: opt1,opt2,opt3
END SUBROUTINE test_sig_Sub
!
SUBROUTINE bound_pass(arg1, self)
INTEGER(4), INTENT(in) :: arg1  !< Doc 9
  !! Doc 10

!> Doc 11
!! Doc 12
CLASS(vector), INTENT(inout) :: self
self%n = arg1
END SUBROUTINE bound_pass
END MODULE test_free