FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
hecmw_varray_int_f.f90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
2 ! Copyright (c) 2022 FrontISTR Commons
3 ! This software is released under the MIT License, see LICENSE.txt
4 !-------------------------------------------------------------------------------
6 
8  use hecmw_util, only: kint
9  implicit none
10 
11  private
12  public :: hecmwst_varray_int
17  public :: hecmw_varray_int_clear
18  public :: hecmw_varray_int_add
20  public :: hecmw_varray_int_insert
22  public :: hecmw_varray_int_expand
23  public :: hecmw_varray_int_find
27 
28  type hecmwst_varray_int
29  private
30  integer(kind=kint) :: nitem
31  integer(kind=kint), allocatable :: items(:)
32  end type hecmwst_varray_int
33 
34 contains
35 
36  subroutine hecmw_varray_int_initialize( ilist, n_init_in )
37  type( hecmwst_varray_int ), intent(inout) :: ilist
38  integer(kind=kint), intent(in) :: n_init_in
39 
40  integer(kind=kint) :: n_init
41 
42  n_init = max(n_init_in,1)
43 
44  ilist%nitem = 0
45  allocate( ilist%items(n_init) )
46  ilist%items(:) = 0
47  end subroutine hecmw_varray_int_initialize
48 
49  subroutine hecmw_varray_int_initialize_all( ilists, nlists, n_init_in )
50  type( hecmwst_varray_int ), allocatable, intent(inout) :: ilists(:)
51  integer(kind=kint), intent(in) :: nlists
52  integer(kind=kint), intent(in) :: n_init_in
53 
54  integer(kind=kint) :: i
55 
56  allocate(ilists(nlists))
57  do i=1,size(ilists)
58  call hecmw_varray_int_initialize( ilists(i), n_init_in )
59  end do
60  end subroutine hecmw_varray_int_initialize_all
61 
62  subroutine hecmw_varray_int_finalize( ilist )
63  type( hecmwst_varray_int ), intent(inout) :: ilist
64 
65  ilist%nitem = 0
66  deallocate( ilist%items )
67  end subroutine hecmw_varray_int_finalize
68 
69  subroutine hecmw_varray_int_finalize_all( ilists )
70  type( hecmwst_varray_int ), allocatable, intent(inout) :: ilists(:)
71 
72  integer(kind=kint) :: i
73 
74  do i=1,size(ilists)
75  ilists(i)%nitem = 0
76  deallocate( ilists(i)%items )
77  end do
78  deallocate(ilists)
79  end subroutine hecmw_varray_int_finalize_all
80 
81  subroutine hecmw_varray_int_clear( ilist )
82  type( hecmwst_varray_int ), intent(inout) :: ilist
83 
84  ilist%nitem = 0
85  ilist%items(:) = 0
86  end subroutine hecmw_varray_int_clear
87 
88  subroutine hecmw_varray_int_enlarge( ilist )
89  type( hecmwst_varray_int ), intent(inout) :: ilist
90 
91  integer(kind=kint) :: i, size_ilist
92  integer(kind=kint), allocatable :: tmp(:)
93 
94  size_ilist = size(ilist%items)
95  allocate(tmp(size_ilist))
96  do i=1,ilist%nitem
97  tmp(i) = ilist%items(i)
98  end do
99 
100  deallocate(ilist%items)
101  allocate(ilist%items(size_ilist*2))
102 
103  ilist%items(:) = 0
104  do i=1,ilist%nitem
105  ilist%items(i) = tmp(i)
106  end do
107  end subroutine hecmw_varray_int_enlarge
108 
109  subroutine hecmw_varray_int_add( ilist, ival )
110  type( hecmwst_varray_int ), intent(inout) :: ilist
111  integer(kind=kint), intent(in) :: ival
112 
113  if( ilist%nitem == size(ilist%items) ) &
114  & call hecmw_varray_int_enlarge( ilist )
115 
116  ilist%nitem = ilist%nitem + 1
117  ilist%items(ilist%nitem) = ival
118  end subroutine hecmw_varray_int_add
119 
120  subroutine hecmw_varray_int_add_if_not_exits( ilist, ival )
121  type( hecmwst_varray_int ), intent(inout) :: ilist
122  integer(kind=kint), intent(in) :: ival
123 
124  integer(kind=kint) :: i
125 
126  do i=1,ilist%nitem
127  if( ilist%items(i) == ival ) return
128  end do
129 
130  call hecmw_varray_int_add( ilist, ival )
131  end subroutine hecmw_varray_int_add_if_not_exits
132 
133  subroutine hecmw_varray_int_insert( ilist, ival )
134  type( hecmwst_varray_int ), intent(inout) :: ilist
135  integer(kind=kint), intent(in) :: ival
136 
137  integer(kind=kint) :: i, cval, tmpval
138 
139  cval = ival
140  do i=1,ilist%nitem
141  if( ilist%items(i) < cval ) cycle
142  tmpval = ilist%items(i)
143  ilist%items(i) = cval
144  cval = tmpval
145  end do
146 
147  call hecmw_varray_int_add( ilist, cval )
148  end subroutine hecmw_varray_int_insert
149 
150  subroutine hecmw_varray_int_insert_if_not_exists( ilist, ival )
151  type( hecmwst_varray_int ), intent(inout) :: ilist
152  integer(kind=kint), intent(in) :: ival
153 
154  integer(kind=kint) :: i
155 
156  do i=1,ilist%nitem
157  if( ilist%items(i) == ival ) return
158  end do
159 
160  call hecmw_varray_int_insert( ilist, ival )
162 
163  subroutine hecmw_varray_int_expand( ilist, n, vals )
164  type( hecmwst_varray_int ), intent(inout) :: ilist
165  integer(kind=kint), intent(in) :: n
166  integer(kind=kint), intent(in) :: vals(:)
167 
168  do while( ilist%nitem + n > size(ilist%items) )
169  call hecmw_varray_int_enlarge( ilist )
170  end do
171 
172  ilist%items(ilist%nitem+1:ilist%nitem+n) = vals(1:n)
173  ilist%nitem = ilist%nitem + n
174  end subroutine hecmw_varray_int_expand
175 
176  integer(kind=kint) function hecmw_varray_int_find( ilist, ival )
177  type( hecmwst_varray_int ), intent(in) :: ilist
178  integer(kind=kint), intent(in) :: ival
179 
180  integer(kind=kint) :: i
181 
183  do i=1,ilist%nitem
184  if( ilist%items(i) == ival ) hecmw_varray_int_find = i
185  end do
186  end function hecmw_varray_int_find
187 
188  integer(kind=kint) function hecmw_varray_int_get_nitem( ilist )
189  type( hecmwst_varray_int), intent(in) :: ilist
190 
191  hecmw_varray_int_get_nitem = ilist%nitem
192  end function hecmw_varray_int_get_nitem
193 
194  integer(kind=kint) function hecmw_varray_int_get_item( ilist, n )
195  type( hecmwst_varray_int), intent(in) :: ilist
196  integer(kind=kint), intent(in) :: n
197 
198  hecmw_varray_int_get_item = ilist%items(n)
199  end function hecmw_varray_int_get_item
200 
201  subroutine hecmw_varray_int_get_item_all( ilist, array )
202  type( hecmwst_varray_int), intent(in) :: ilist
203  integer(kind=kint), intent(inout) :: array(:)
204 
205  array(1:ilist%nitem) = ilist%items(1:ilist%nitem)
206  end subroutine hecmw_varray_int_get_item_all
207 
208 end module hecmw_varray_int
I/O and Utility.
Definition: hecmw_util_f.F90:7
integer(kind=4), parameter kint
subroutine, public hecmw_varray_int_expand(ilist, n, vals)
subroutine, public hecmw_varray_int_insert(ilist, ival)
subroutine, public hecmw_varray_int_initialize_all(ilists, nlists, n_init_in)
subroutine, public hecmw_varray_int_finalize_all(ilists)
subroutine, public hecmw_varray_int_add_if_not_exits(ilist, ival)
subroutine, public hecmw_varray_int_clear(ilist)
subroutine, public hecmw_varray_int_add(ilist, ival)
integer(kind=kint) function, public hecmw_varray_int_get_nitem(ilist)
subroutine, public hecmw_varray_int_initialize(ilist, n_init_in)
subroutine, public hecmw_varray_int_get_item_all(ilist, array)
subroutine, public hecmw_varray_int_insert_if_not_exists(ilist, ival)
integer(kind=kint) function, public hecmw_varray_int_get_item(ilist, n)
subroutine, public hecmw_varray_int_finalize(ilist)
integer(kind=kint) function, public hecmw_varray_int_find(ilist, ival)