12 character(len=HECMW_NAME_LEN),
pointer :: s(:)
16 integer(kind=kint),
private :: grp_type
17 integer(kind=kint),
pointer,
private :: n_grp
18 integer(kind=kint),
pointer,
private :: grp_index(:)
19 integer(kind=kint),
pointer,
private :: grp_item(:)
23 private :: set_group_pointers
32 integer :: i, n, a, i0,i9, m, x, b
45 if( a < i0 .or. a > i9 )
return
61 if( a >= iachar(
'a') .and. a <= iachar(
'z'))
then
62 s(i:i) = achar(a - 32)
69 character(*),
intent(in) :: s1, s2
71 integer :: i, n, a1, a2
75 if( n /= len_trim(s2))
return
79 if( a1 >= iachar(
'a') .and. a1 <= iachar(
'z')) a1 = a1 - 32
80 if( a2 >= iachar(
'a') .and. a2 <= iachar(
'z')) a2 = a2 - 32
99 subroutine set_group_pointers( hecMESH, grp_type_name )
100 type (hecmwST_local_mesh),
target :: hecMESH
101 character(len=*) :: grp_type_name
103 if( grp_type_name ==
'node_grp' )
then
105 n_grp => hecmesh%node_group%n_grp
106 grp_name%s => hecmesh%node_group%grp_name
107 grp_index => hecmesh%node_group%grp_index
108 grp_item => hecmesh%node_group%grp_item
109 else if( grp_type_name ==
'elem_grp' )
then
111 n_grp => hecmesh%elem_group%n_grp
112 grp_name%s => hecmesh%elem_group%grp_name
113 grp_index => hecmesh%elem_group%grp_index
114 grp_item => hecmesh%elem_group%grp_item
115 else if( grp_type_name ==
'surf_grp' )
then
117 n_grp => hecmesh%surf_group%n_grp
118 grp_name%s => hecmesh%surf_group%grp_name
119 grp_index => hecmesh%surf_group%grp_index
120 grp_item => hecmesh%surf_group%grp_item
122 stop
'assert in set_group_pointers'
124 end subroutine set_group_pointers
127 type (hecmwST_local_mesh),
target :: hecMESH
128 character(len=*) :: grp_type_name
130 if( grp_type_name ==
'node_grp' )
then
132 hecmesh%node_group%grp_name => grp_name%s
133 hecmesh%node_group%grp_index => grp_index
134 hecmesh%node_group%grp_item => grp_item
135 else if( grp_type_name ==
'elem_grp' )
then
137 hecmesh%elem_group%grp_name => grp_name%s
138 hecmesh%elem_group%grp_index => grp_index
139 hecmesh%elem_group%grp_item => grp_item
140 else if( grp_type_name ==
'surf_grp' )
then
142 hecmesh%surf_group%grp_name => grp_name%s
143 hecmesh%surf_group%grp_index => grp_index
144 hecmesh%surf_group%grp_item => grp_item
146 stop
'assert in backset_group_pointers'
153 integer(kind=kint) :: list(:)
154 integer(kind=kint) :: n, i, j, cache
163 do i=cache, hecmesh%n_node
164 if( hecmesh%global_node_ID(i) == list(j))
then
174 if( hecmesh%global_node_ID(i) == list(j))
then
192 integer(kind=kint),
pointer :: list(:)
193 integer(kind=kint) :: n, i, j
200 do i=1, hecmesh%n_elem
201 if( hecmesh%global_elem_ID(i) == list(j))
then
217 character(len=*) :: grp_type_name
218 integer(kind=kint) :: no_count
219 integer(kind=kint),
pointer :: no_list(:)
221 integer(kind=kint) :: old_grp_number, new_grp_number
222 integer(kind=kint) :: old_item_number, new_item_number
223 integer(kind=kint) :: i,j,k, exist_n
224 integer(kind=kint),
save :: grp_count = 1
225 character(50) :: grp_name_s
228 call set_group_pointers( hecmesh, grp_type_name )
229 if( grp_type_name ==
'node_grp')
then
231 else if( grp_type_name ==
'elem_grp')
then
235 old_grp_number = n_grp
236 new_grp_number = old_grp_number + no_count
238 old_item_number = grp_index(n_grp)
239 new_item_number = old_item_number + exist_n
245 n_grp = new_grp_number
247 j = old_grp_number + 1
248 k = old_item_number + 1
250 write( grp_name_s,
'(a,i0,a,i0)')
'FSTR_', grp_count,
'_', i
251 grp_name%s(j) = grp_name_s
252 if( no_list(i) >= 0)
then
253 grp_item(k) = no_list(i)
254 grp_index(j) = grp_index(j-1)+1
257 grp_index(j) = grp_index(j-1)
261 grp_count = grp_count + 1
269 character(len=*),
intent(in) :: grp_type_name
270 character(len=HECMW_NAME_LEN),
intent(in) :: name
271 integer(kind=kint),
intent(in) :: count
272 integer(kind=kint),
intent(in) :: list(:)
273 integer(kind=kint),
intent(out) :: grp_id
274 integer(kind=kint) :: id, old_grp_number, new_grp_number, old_item_number, new_item_number, k
276 call set_group_pointers( hecmesh, grp_type_name )
279 write(*,*)
'### Error: Group already exists: ', name
284 old_grp_number = n_grp
285 new_grp_number = old_grp_number + 1
287 old_item_number = grp_index(n_grp)
288 new_item_number = old_item_number + count
294 n_grp = new_grp_number
295 grp_id = new_grp_number
296 grp_name%s(grp_id) = name
298 grp_item(old_item_number + k) = list(k)
300 grp_index(grp_id) = grp_index(grp_id-1) + count
314 character(len=*) :: grp_type_name
315 character(len=*) :: name
316 integer(kind=kint) :: i
318 call set_group_pointers( hecmesh, grp_type_name )
340 character(len=*) :: grp_type_name
341 character(len=*) :: name
342 integer(kind=kint) :: i
344 call set_group_pointers( hecmesh, grp_type_name )
368 character(len=*) :: grp_type_name
369 character(len=*) :: name
370 integer(kind=kint),
pointer :: member1(:)
371 integer(kind=kint),
pointer,
optional :: member2(:)
372 integer(kind=kint) :: i, j, k, sn, en
375 if( grp_type_name ==
'surf_grp' .and. (.not.
present( member2 )))
then
376 stop
'assert in get_grp_member: not present member2 '
379 call set_group_pointers( hecmesh, grp_type_name )
383 sn = grp_index(i-1) + 1
386 if( grp_type == 3 )
then
388 member1(k) = grp_item(2*j-1)
389 member2(k) = grp_item(2*j)
394 member1(k) = grp_item(j)
408 type (hecmwST_local_mesh) :: hecMESH
409 character(len=*) :: header_name
410 character(HECMW_NAME_LEN) :: grp_id_name(:)
411 integer(kind=kint),
pointer :: grp_ID(:)
412 integer(kind=kint) :: n
413 integer(kind=kint) :: i, id
414 character(len=256) :: msg
418 do id = 1, hecmesh%node_group%n_grp
419 if(
hecmw_streqr(hecmesh%node_group%grp_name(id),grp_id_name(i)))
then
424 if( grp_id(i) == -1 )
then
425 write(msg,*)
'### Error: ', header_name,
' : Node group "',&
426 grp_id_name(i),
'" does not exist.'
434 type (hecmwST_local_mesh) :: hecMESH
435 character(len=*) :: header_name
436 character(HECMW_NAME_LEN) :: grp_id_name(:)
437 integer(kind=kint) :: grp_ID(:)
438 integer(kind=kint) :: n
439 integer(kind=kint) :: i, id
440 character(len=256) :: msg
444 do id = 1, hecmesh%elem_group%n_grp
445 if (
hecmw_streqr(hecmesh%elem_group%grp_name(id), grp_id_name(i)))
then
450 if( grp_id(i) == -1 )
then
451 write(msg,*)
'### Error: ', header_name,
' : Element group "',&
452 grp_id_name(i),
'" does not exist.'
465 type (hecmwST_local_mesh),
target :: hecMESH
466 character(len=*) :: header_name
467 integer(kind=kint) :: n
468 character(len=HECMW_NAME_LEN) :: grp_id_name(:)
469 integer(kind=kint) :: grp_ID(:)
471 integer(kind=kint) :: i, id
472 integer(kind=kint) :: no, no_count, exist_n
473 integer(kind=kint),
pointer :: no_list(:)
474 character(HECMW_NAME_LEN) :: name
475 character(len=256) :: msg
477 allocate( no_list( n ))
481 no_count = no_count + 1
482 no_list(no_count) = no
483 grp_id(i) = hecmesh%node_group%n_grp + no_count
486 do id = 1, hecmesh%node_group%n_grp
487 if (
hecmw_streqr(hecmesh%node_group%grp_name(id), grp_id_name(i)))
then
492 if( grp_id(i) == -1 )
then
493 write(msg,*)
'### Error: ', header_name,
' : Node group "',grp_id_name(i),
'" does not exist.'
499 if( no_count > 0 )
then
514 deallocate( no_list )
519 type (hecmwST_local_mesh),
target :: hecMESH
520 character(len=*) :: header_name
521 integer(kind=kint) :: n
522 character(HECMW_NAME_LEN) :: grp_id_name(:)
523 integer(kind=kint) :: grp_ID(:)
524 integer(kind=kint) :: i, id
525 integer(kind=kint) :: no, no_count, exist_n
526 integer(kind=kint),
pointer :: no_list(:)
527 character(HECMW_NAME_LEN) :: name
528 character(len=256) :: msg
530 allocate( no_list( n ))
534 no_count = no_count + 1
535 no_list(no_count) = no
536 grp_id(i) = hecmesh%elem_group%n_grp + no_count
539 do id = 1, hecmesh%elem_group%n_grp
540 if (
hecmw_streqr(hecmesh%elem_group%grp_name(id), grp_id_name(i)))
then
545 if( grp_id(i) == -1 )
then
546 write(msg,*)
'### Error: ', header_name,
' : Element group "',&
547 grp_id_name(i),
'" does not exist.'
553 if( no_count > 0 )
then
556 if( exist_n < no_count )
then
557 write(*,*)
'### Warning: ', header_name,
': following elements are not exist'
560 if( no_list(i)<0 )
then
561 write(*,*) -no_list(i)
568 deallocate( no_list )
575 type (hecmwST_local_mesh),
target :: hecMESH
576 character(len=*) :: header_name
577 integer(kind=kint) :: n
578 character(len=HECMW_NAME_LEN) :: grp_id_name(:)
579 integer(kind=kint) :: grp_ID(:)
580 integer(kind=kint) :: i, id
581 character(len=256) :: msg
585 do id = 1, hecmesh%surf_group%n_grp
586 if (
hecmw_streqr(hecmesh%surf_group%grp_name(id), grp_id_name(i)))
then
591 if( grp_id(i) == -1 )
then
592 write(msg,*)
'### Error: ', header_name,
' : Surface group "',grp_id_name(i),
'" does not exist.'
606 integer(kind=kint) :: n
607 integer(kind=kint) :: i,j, m
611 call set_group_pointers( hecmesh, grp_name_array%s(i) )
613 if(
hecmw_streqr(grp_name%s(j), grp_name_array%s(i)))
then
614 m = m + grp_index(j) - grp_index(j-1)
626 integer(kind=kint),
pointer :: array(:)
627 integer(kind=kint) :: old_size, new_size,i
628 integer(kind=kint),
pointer :: temp(:)
630 if( old_size >= new_size )
then
634 if(
associated( array ) )
then
635 allocate(temp(0:old_size-1))
640 allocate(array(0:new_size-1))
647 allocate(array(0:new_size-1))
654 character(len=HECMW_NAME_LEN),
pointer :: array(:)
655 integer(kind=kint) :: old_size, new_size,i
656 character(len=HECMW_NAME_LEN),
pointer :: temp(:)
658 if( old_size >= new_size )
then
662 if(
associated( array ) )
then
663 allocate(temp(old_size))
668 allocate(array(new_size))
675 allocate(array(new_size))
682 integer(kind=kint),
pointer :: array(:)
683 integer(kind=kint) :: old_size, new_size,i
684 integer(kind=kint),
pointer :: temp(:)
686 if( old_size >= new_size )
then
690 if(
associated( array ) )
then
691 allocate(temp(old_size))
696 allocate(array(new_size))
703 allocate(array(new_size))
710 real(kind=
kreal),
pointer :: array(:)
711 integer(kind=kint) :: old_size, new_size, i
712 real(kind=
kreal),
pointer :: temp(:)
714 if( old_size >= new_size )
then
718 if(
associated( array ) )
then
719 allocate(temp(old_size))
724 allocate(array(new_size))
731 allocate(array(new_size))
739 integer(kind=kint),
pointer :: array(:,:)
740 integer(kind=kint) :: column, old_size, new_size, i,j
741 integer(kind=kint),
pointer :: temp(:,:)
743 if( old_size >= new_size )
then
747 if(
associated( array ) )
then
748 allocate(temp(old_size,column))
751 temp(i,j) = array(i,j)
755 allocate(array(new_size,column))
759 array(i,j) = temp(i,j)
764 allocate(array(new_size, column))
774 real(kind=
kreal),
pointer :: array(:,:)
775 integer(kind=kint) :: column, old_size, new_size, i,j
776 real(kind=
kreal),
pointer :: temp(:,:)
778 if( old_size >= new_size )
then
782 if(
associated( array ) )
then
783 allocate(temp(old_size,column))
786 temp(i,j) = array(i,j)
790 allocate(array(new_size,column))
794 array(i,j) = temp(i,j)
799 allocate(array(new_size, column))
807 integer(kind=kint) :: old_size, new_size, i
808 character(len=HECMW_NAME_LEN),
pointer :: temp(:)
810 if( old_size >= new_size )
then
814 if(
associated( array%s ) )
then
815 allocate(temp(old_size))
820 allocate(array%s(new_size))
826 allocate(array%s(new_size))
832 integer(kind=kint),
pointer :: array(:)
833 integer(kind=kint),
intent(in) :: old_size
834 integer(kind=kint),
intent(in) :: nindex
835 integer(kind=kint) :: i
836 integer(kind=kint),
pointer :: temp(:)
838 if( old_size < nindex )
then
842 if( old_size == nindex )
then
847 allocate(temp(0:old_size-1))
848 do i=0, old_size-nindex-1
852 allocate(array(0:old_size-nindex-1))
854 do i=0, old_size-nindex-1
862 integer(kind=kint),
pointer :: array(:)
863 integer(kind=kint),
intent(in) :: old_size
864 integer(kind=kint),
intent(in) :: nitem
865 integer(kind=kint) :: i
866 integer(kind=kint),
pointer :: temp(:)
868 if( old_size < nitem )
then
872 if( old_size == nitem )
then
877 allocate(temp(old_size))
878 do i=1, old_size-nitem
882 allocate(array(old_size-nitem))
884 do i=1, old_size-nitem
892 real(kind=
kreal),
pointer :: array(:)
893 integer(kind=kint),
intent(in) :: old_size
894 integer(kind=kint),
intent(in) :: nitem
895 integer(kind=kint) :: i
896 real(kind=
kreal),
pointer :: temp(:)
898 if( old_size < nitem )
then
902 if( old_size == nitem )
then
907 allocate(temp(old_size))
908 do i=1, old_size-nitem
912 allocate(array(old_size-nitem))
914 do i=1, old_size-nitem
924 integer(kind=kint),
pointer :: array(:)
925 integer(kind=kint) :: n;
927 if(
associated( array ))
deallocate(array)
933 real(kind=
kreal),
pointer :: array(:)
934 integer(kind=kint) :: n;
936 if(
associated( array ))
deallocate(array)
This module contains auxiliary functions in calculation setup.
subroutine elem_grp_name_to_id(hecMESH, header_name, n, grp_id_name, grp_ID)
integer(kind=kint) function append_single_group(hecMESH, grp_type_name, no_count, no_list)
subroutine hecmw_strupr(s)
logical function hecmw_str2index(s, x)
integer(kind=kint) function elem_global_to_local(hecMESH, list, n)
subroutine hecmw_setup_util_err_stop(msg)
subroutine reallocate_integer(array, n)
subroutine hecmw_expand_real_array2(array, column, old_size, new_size)
integer(kind=kint) function node_global_to_local(hecMESH, list, n)
subroutine reallocate_real(array, n)
subroutine node_grp_name_to_id(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine hecmw_expand_integer_array(array, old_size, new_size)
subroutine backset_group_pointers(hecMESH, grp_type_name)
subroutine hecmw_expand_name_array(array, old_size, new_size)
subroutine node_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine hecmw_expand_real_array(array, old_size, new_size)
integer(kind=kint) function get_grp_member(hecMESH, grp_type_name, name, member1, member2)
subroutine hecmw_expand_integer_array2(array, column, old_size, new_size)
subroutine append_new_group(hecMESH, grp_type_name, name, count, list, grp_id)
subroutine hecmw_delete_integer_array(array, old_size, nitem)
subroutine surf_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
integer(kind=kint) function get_grp_id(hecMESH, grp_type_name, name)
subroutine hecmw_expand_char_array(array, old_size, new_size)
integer(kind=kint) function get_node_grp_member_n(hecMESH, grp_name_array, n)
integer(kind=kint) function get_grp_member_n(hecMESH, grp_type_name, name)
logical function hecmw_streqr(s1, s2)
subroutine hecmw_expand_index_array(array, old_size, new_size)
subroutine hecmw_delete_real_array(array, old_size, nitem)
subroutine elem_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
subroutine hecmw_delete_index_array(array, old_size, nindex)
subroutine hecmw_abort(comm, code)
integer(kind=kint) function hecmw_comm_get_comm()
integer(kind=4), parameter kreal
container of character array pointer, because of gfortran's bug