FrontISTR  5.7.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_print
25  public :: hecmw_varray_int_find
29 
30  type hecmwst_varray_int
31  private
32  integer(kind=kint) :: nitem
33  integer(kind=kint), allocatable :: items(:)
34  end type hecmwst_varray_int
35 
36 contains
37 
38  subroutine hecmw_varray_int_initialize( ilist, n_init_in )
39  type( hecmwst_varray_int ), intent(inout) :: ilist
40  integer(kind=kint), intent(in) :: n_init_in
41 
42  integer(kind=kint) :: n_init
43 
44  n_init = max(n_init_in,1)
45 
46  ilist%nitem = 0
47  allocate( ilist%items(n_init) )
48  ilist%items(:) = 0
49  end subroutine hecmw_varray_int_initialize
50 
51  subroutine hecmw_varray_int_initialize_all( ilists, nlists, n_init_in )
52  type( hecmwst_varray_int ), allocatable, intent(inout) :: ilists(:)
53  integer(kind=kint), intent(in) :: nlists
54  integer(kind=kint), intent(in) :: n_init_in
55 
56  integer(kind=kint) :: i
57 
58  allocate(ilists(nlists))
59  do i=1,size(ilists)
60  call hecmw_varray_int_initialize( ilists(i), n_init_in )
61  end do
62  end subroutine hecmw_varray_int_initialize_all
63 
64  subroutine hecmw_varray_int_finalize( ilist )
65  type( hecmwst_varray_int ), intent(inout) :: ilist
66 
67  ilist%nitem = 0
68  deallocate( ilist%items )
69  end subroutine hecmw_varray_int_finalize
70 
71  subroutine hecmw_varray_int_finalize_all( ilists )
72  type( hecmwst_varray_int ), allocatable, intent(inout) :: ilists(:)
73 
74  integer(kind=kint) :: i
75 
76  do i=1,size(ilists)
77  ilists(i)%nitem = 0
78  deallocate( ilists(i)%items )
79  end do
80  deallocate(ilists)
81  end subroutine hecmw_varray_int_finalize_all
82 
83  subroutine hecmw_varray_int_clear( ilist )
84  type( hecmwst_varray_int ), intent(inout) :: ilist
85 
86  ilist%nitem = 0
87  ilist%items(:) = 0
88  end subroutine hecmw_varray_int_clear
89 
90  subroutine hecmw_varray_int_enlarge( ilist )
91  type( hecmwst_varray_int ), intent(inout) :: ilist
92 
93  integer(kind=kint) :: i, size_ilist
94  integer(kind=kint), allocatable :: tmp(:)
95 
96  size_ilist = size(ilist%items)
97  allocate(tmp(size_ilist))
98  do i=1,ilist%nitem
99  tmp(i) = ilist%items(i)
100  end do
101 
102  deallocate(ilist%items)
103  allocate(ilist%items(size_ilist*2))
104 
105  ilist%items(:) = 0
106  do i=1,ilist%nitem
107  ilist%items(i) = tmp(i)
108  end do
109  end subroutine hecmw_varray_int_enlarge
110 
111  subroutine hecmw_varray_int_add( ilist, ival )
112  type( hecmwst_varray_int ), intent(inout) :: ilist
113  integer(kind=kint), intent(in) :: ival
114 
115  if( ilist%nitem == size(ilist%items) ) &
116  & call hecmw_varray_int_enlarge( ilist )
117 
118  ilist%nitem = ilist%nitem + 1
119  ilist%items(ilist%nitem) = ival
120  end subroutine hecmw_varray_int_add
121 
122  subroutine hecmw_varray_int_add_if_not_exits( ilist, ival )
123  type( hecmwst_varray_int ), intent(inout) :: ilist
124  integer(kind=kint), intent(in) :: ival
125 
126  integer(kind=kint) :: i
127 
128  do i=1,ilist%nitem
129  if( ilist%items(i) == ival ) return
130  end do
131 
132  call hecmw_varray_int_add( ilist, ival )
133  end subroutine hecmw_varray_int_add_if_not_exits
134 
135  subroutine hecmw_varray_int_insert( ilist, ival )
136  type( hecmwst_varray_int ), intent(inout) :: ilist
137  integer(kind=kint), intent(in) :: ival
138 
139  integer(kind=kint) :: i, cval, tmpval
140 
141  cval = ival
142  do i=1,ilist%nitem
143  if( ilist%items(i) < cval ) cycle
144  tmpval = ilist%items(i)
145  ilist%items(i) = cval
146  cval = tmpval
147  end do
148 
149  call hecmw_varray_int_add( ilist, cval )
150  end subroutine hecmw_varray_int_insert
151 
152  subroutine hecmw_varray_int_insert_if_not_exists( ilist, ival )
153  type( hecmwst_varray_int ), intent(inout) :: ilist
154  integer(kind=kint), intent(in) :: ival
155 
156  integer(kind=kint) :: i
157 
158  do i=1,ilist%nitem
159  if( ilist%items(i) == ival ) return
160  end do
161 
162  call hecmw_varray_int_insert( ilist, ival )
164 
165  subroutine hecmw_varray_int_expand( ilist, n, vals )
166  type( hecmwst_varray_int ), intent(inout) :: ilist
167  integer(kind=kint), intent(in) :: n
168  integer(kind=kint), intent(in) :: vals(:)
169 
170  do while( ilist%nitem + n > size(ilist%items) )
171  call hecmw_varray_int_enlarge( ilist )
172  end do
173 
174  ilist%items(ilist%nitem+1:ilist%nitem+n) = vals(1:n)
175  ilist%nitem = ilist%nitem + n
176  end subroutine hecmw_varray_int_expand
177 
178  subroutine hecmw_varray_int_print( ilist )
179  type( hecmwst_varray_int ), intent(inout) :: ilist
180 
181  write(*,*) 'n, maxn:', ilist%nitem, size(ilist%items)
182  write(*,*) 'items:', ilist%items(1:ilist%nitem)
183  end subroutine hecmw_varray_int_print
184 
185  subroutine hecmw_varray_int_print_all( ilists )
186  type( hecmwst_varray_int ), allocatable, intent(inout) :: ilists(:)
187 
188  integer(kind=kint) :: i
189 
190  do i=1,size(ilists)
191  write(*,*) "i, n, maxn: ", i, ilists(i)%nitem, size(ilists(i)%items)
192  write(*,*) 'items:', ilists(i)%items(1:ilists(i)%nitem)
193  end do
194  end subroutine hecmw_varray_int_print_all
195 
196  integer(kind=kint) function hecmw_varray_int_find( ilist, ival )
197  type( hecmwst_varray_int ), intent(in) :: ilist
198  integer(kind=kint), intent(in) :: ival
199 
200  integer(kind=kint) :: i
201 
203  do i=1,ilist%nitem
204  if( ilist%items(i) == ival ) hecmw_varray_int_find = i
205  end do
206  end function hecmw_varray_int_find
207 
208  integer(kind=kint) function hecmw_varray_int_get_nitem( ilist )
209  type( hecmwst_varray_int), intent(in) :: ilist
210 
211  hecmw_varray_int_get_nitem = ilist%nitem
212  end function hecmw_varray_int_get_nitem
213 
214  integer(kind=kint) function hecmw_varray_int_get_item( ilist, n )
215  type( hecmwst_varray_int), intent(in) :: ilist
216  integer(kind=kint), intent(in) :: n
217 
218  hecmw_varray_int_get_item = ilist%items(n)
219  end function hecmw_varray_int_get_item
220 
221  subroutine hecmw_varray_int_get_item_all( ilist, array )
222  type( hecmwst_varray_int), intent(in) :: ilist
223  integer(kind=kint), intent(inout) :: array(:)
224 
225  array(1:ilist%nitem) = ilist%items(1:ilist%nitem)
226  end subroutine hecmw_varray_int_get_item_all
227 
228 end module hecmw_varray_int
hecmw_varray_int::hecmw_varray_int_print
subroutine, public hecmw_varray_int_print(ilist)
Definition: hecmw_varray_int_f.f90:179
hecmw_util::kint
integer(kind=4), parameter kint
Definition: hecmw_util_f.F90:15
hecmw_varray_int::hecmw_varray_int_get_item_all
subroutine, public hecmw_varray_int_get_item_all(ilist, array)
Definition: hecmw_varray_int_f.f90:222
hecmw_varray_int
Definition: hecmw_varray_int.h:9
hecmw_varray_int::hecmw_varray_int_clear
subroutine, public hecmw_varray_int_clear(ilist)
Definition: hecmw_varray_int_f.f90:84
hecmw_varray_int::hecmw_varray_int_initialize_all
subroutine, public hecmw_varray_int_initialize_all(ilists, nlists, n_init_in)
Definition: hecmw_varray_int_f.f90:52
hecmw_varray_int::hecmw_varray_int_insert
subroutine, public hecmw_varray_int_insert(ilist, ival)
Definition: hecmw_varray_int_f.f90:136
hecmw_varray_int::hecmw_varray_int_get_item
integer(kind=kint) function, public hecmw_varray_int_get_item(ilist, n)
Definition: hecmw_varray_int_f.f90:215
hecmw_varray_int::hecmw_varray_int_finalize_all
subroutine, public hecmw_varray_int_finalize_all(ilists)
Definition: hecmw_varray_int_f.f90:72
hecmw_varray_int::hecmw_varray_int_print_all
subroutine, public hecmw_varray_int_print_all(ilists)
Definition: hecmw_varray_int_f.f90:186
hecmw_varray_int::hecmw_varray_int_add_if_not_exits
subroutine, public hecmw_varray_int_add_if_not_exits(ilist, ival)
Definition: hecmw_varray_int_f.f90:123
hecmw_varray_int::hecmw_varray_int_find
integer(kind=kint) function, public hecmw_varray_int_find(ilist, ival)
Definition: hecmw_varray_int_f.f90:197
hecmw_util
I/O and Utility.
Definition: hecmw_util_f.F90:7
hecmw_varray_int::hecmw_varray_int_add
subroutine, public hecmw_varray_int_add(ilist, ival)
Definition: hecmw_varray_int_f.f90:112
hecmw_varray_int::hecmw_varray_int_expand
subroutine, public hecmw_varray_int_expand(ilist, n, vals)
Definition: hecmw_varray_int_f.f90:166
hecmw_varray_int::hecmw_varray_int_initialize
subroutine, public hecmw_varray_int_initialize(ilist, n_init_in)
Definition: hecmw_varray_int_f.f90:39
hecmw_varray_int::hecmw_varray_int_insert_if_not_exists
subroutine, public hecmw_varray_int_insert_if_not_exists(ilist, ival)
Definition: hecmw_varray_int_f.f90:153
hecmw_varray_int::hecmw_varray_int_get_nitem
integer(kind=kint) function, public hecmw_varray_int_get_nitem(ilist)
Definition: hecmw_varray_int_f.f90:209
hecmw_varray_int::hecmw_varray_int_finalize
subroutine, public hecmw_varray_int_finalize(ilist)
Definition: hecmw_varray_int_f.f90:65