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
308 character(len=*),
intent(in) :: grp_type_name
309 integer(kind=kint),
intent(in) :: n
310 character(len=HECMW_NAME_LEN),
intent(in) :: names(:)
311 integer(kind=kint),
intent(in) :: index(0:)
312 integer(kind=kint),
intent(in) :: list(:)
313 integer(kind=kint),
intent(out) :: first_id
314 integer(kind=kint) :: old_grp_number, old_item_number, i, id
316 call set_group_pointers( hecmesh, grp_type_name )
320 write(*,*)
'### Error: Group already exists: ', names(i)
326 write(*,*)
'### Error: Group already exists: ', names(i)
332 old_grp_number = n_grp
333 old_item_number = grp_index(n_grp)
339 n_grp = old_grp_number + n
340 first_id = old_grp_number + 1
342 grp_name%s(old_grp_number + i) = names(i)
343 grp_index(old_grp_number + i) = old_item_number + index(i)
345 grp_item(old_item_number + 1:old_item_number + index(n)) = list(1:index(n))
359 character(len=*) :: grp_type_name
360 character(len=*) :: name
361 integer(kind=kint) :: i
363 call set_group_pointers( hecmesh, grp_type_name )
385 character(len=*) :: grp_type_name
386 character(len=*) :: name
387 integer(kind=kint) :: i
389 call set_group_pointers( hecmesh, grp_type_name )
413 character(len=*) :: grp_type_name
414 character(len=*) :: name
415 integer(kind=kint),
pointer :: member1(:)
416 integer(kind=kint),
pointer,
optional :: member2(:)
417 integer(kind=kint) :: i, j, k, sn, en
420 if( grp_type_name ==
'surf_grp' .and. (.not.
present( member2 )))
then
421 stop
'assert in get_grp_member: not present member2 '
424 call set_group_pointers( hecmesh, grp_type_name )
428 sn = grp_index(i-1) + 1
431 if( grp_type == 3 )
then
433 member1(k) = grp_item(2*j-1)
434 member2(k) = grp_item(2*j)
439 member1(k) = grp_item(j)
453 type (hecmwST_local_mesh) :: hecMESH
454 character(len=*) :: header_name
455 character(HECMW_NAME_LEN) :: grp_id_name(:)
456 integer(kind=kint),
pointer :: grp_ID(:)
457 integer(kind=kint) :: n
458 integer(kind=kint) :: i, id
459 character(len=256) :: msg
463 do id = 1, hecmesh%node_group%n_grp
464 if(
hecmw_streqr(hecmesh%node_group%grp_name(id),grp_id_name(i)))
then
469 if( grp_id(i) == -1 )
then
470 write(msg,*)
'### Error: ', header_name,
' : Node group "',&
471 grp_id_name(i),
'" does not exist.'
479 type (hecmwST_local_mesh) :: hecMESH
480 character(len=*) :: header_name
481 character(HECMW_NAME_LEN) :: grp_id_name(:)
482 integer(kind=kint) :: grp_ID(:)
483 integer(kind=kint) :: n
484 integer(kind=kint) :: i, id
485 character(len=256) :: msg
489 do id = 1, hecmesh%elem_group%n_grp
490 if (
hecmw_streqr(hecmesh%elem_group%grp_name(id), grp_id_name(i)))
then
495 if( grp_id(i) == -1 )
then
496 write(msg,*)
'### Error: ', header_name,
' : Element group "',&
497 grp_id_name(i),
'" does not exist.'
510 type (hecmwST_local_mesh),
target :: hecMESH
511 character(len=*) :: header_name
512 integer(kind=kint) :: n
513 character(len=HECMW_NAME_LEN) :: grp_id_name(:)
514 integer(kind=kint) :: grp_ID(:)
516 integer(kind=kint) :: i, id
517 integer(kind=kint) :: no, no_count, exist_n
518 integer(kind=kint),
pointer :: no_list(:)
519 character(HECMW_NAME_LEN) :: name
520 character(len=256) :: msg
522 allocate( no_list( n ))
526 no_count = no_count + 1
527 no_list(no_count) = no
528 grp_id(i) = hecmesh%node_group%n_grp + no_count
531 do id = 1, hecmesh%node_group%n_grp
532 if (
hecmw_streqr(hecmesh%node_group%grp_name(id), grp_id_name(i)))
then
537 if( grp_id(i) == -1 )
then
538 write(msg,*)
'### Error: ', header_name,
' : Node group "',grp_id_name(i),
'" does not exist.'
544 if( no_count > 0 )
then
559 deallocate( no_list )
564 type (hecmwST_local_mesh),
target :: hecMESH
565 character(len=*) :: header_name
566 integer(kind=kint) :: n
567 character(HECMW_NAME_LEN) :: grp_id_name(:)
568 integer(kind=kint) :: grp_ID(:)
569 integer(kind=kint) :: i, id
570 integer(kind=kint) :: no, no_count, exist_n
571 integer(kind=kint),
pointer :: no_list(:)
572 character(HECMW_NAME_LEN) :: name
573 character(len=256) :: msg
575 allocate( no_list( n ))
579 no_count = no_count + 1
580 no_list(no_count) = no
581 grp_id(i) = hecmesh%elem_group%n_grp + no_count
584 do id = 1, hecmesh%elem_group%n_grp
585 if (
hecmw_streqr(hecmesh%elem_group%grp_name(id), grp_id_name(i)))
then
590 if( grp_id(i) == -1 )
then
591 write(msg,*)
'### Error: ', header_name,
' : Element group "',&
592 grp_id_name(i),
'" does not exist.'
598 if( no_count > 0 )
then
601 if( exist_n < no_count )
then
602 write(*,*)
'### Warning: ', header_name,
': following elements are not exist'
605 if( no_list(i)<0 )
then
606 write(*,*) -no_list(i)
613 deallocate( no_list )
620 type (hecmwST_local_mesh),
target :: hecMESH
621 character(len=*) :: header_name
622 integer(kind=kint) :: n
623 character(len=HECMW_NAME_LEN) :: grp_id_name(:)
624 integer(kind=kint) :: grp_ID(:)
625 integer(kind=kint) :: i, id
626 character(len=256) :: msg
630 do id = 1, hecmesh%surf_group%n_grp
631 if (
hecmw_streqr(hecmesh%surf_group%grp_name(id), grp_id_name(i)))
then
636 if( grp_id(i) == -1 )
then
637 write(msg,*)
'### Error: ', header_name,
' : Surface group "',grp_id_name(i),
'" does not exist.'
651 integer(kind=kint) :: n
652 integer(kind=kint) :: i,j, m
656 call set_group_pointers( hecmesh, grp_name_array%s(i) )
658 if(
hecmw_streqr(grp_name%s(j), grp_name_array%s(i)))
then
659 m = m + grp_index(j) - grp_index(j-1)
671 integer(kind=kint),
pointer :: array(:)
672 integer(kind=kint) :: old_size, new_size,i
673 integer(kind=kint),
pointer :: temp(:)
675 if( old_size >= new_size )
then
679 if(
associated( array ) )
then
680 allocate(temp(0:old_size-1))
685 allocate(array(0:new_size-1))
692 allocate(array(0:new_size-1))
699 character(len=HECMW_NAME_LEN),
pointer :: array(:)
700 integer(kind=kint) :: old_size, new_size,i
701 character(len=HECMW_NAME_LEN),
pointer :: temp(:)
703 if( old_size >= new_size )
then
707 if(
associated( array ) )
then
708 allocate(temp(old_size))
713 allocate(array(new_size))
720 allocate(array(new_size))
727 integer(kind=kint),
pointer :: array(:)
728 integer(kind=kint) :: old_size, new_size,i
729 integer(kind=kint),
pointer :: temp(:)
731 if( old_size >= new_size )
then
735 if(
associated( array ) )
then
736 allocate(temp(old_size))
741 allocate(array(new_size))
748 allocate(array(new_size))
755 real(kind=
kreal),
pointer :: array(:)
756 integer(kind=kint) :: old_size, new_size, i
757 real(kind=
kreal),
pointer :: temp(:)
759 if( old_size >= new_size )
then
763 if(
associated( array ) )
then
764 allocate(temp(old_size))
769 allocate(array(new_size))
776 allocate(array(new_size))
784 integer(kind=kint),
pointer :: array(:,:)
785 integer(kind=kint) :: column, old_size, new_size, i,j
786 integer(kind=kint),
pointer :: temp(:,:)
788 if( old_size >= new_size )
then
792 if(
associated( array ) )
then
793 allocate(temp(old_size,column))
796 temp(i,j) = array(i,j)
800 allocate(array(new_size,column))
804 array(i,j) = temp(i,j)
809 allocate(array(new_size, column))
819 real(kind=
kreal),
pointer :: array(:,:)
820 integer(kind=kint) :: column, old_size, new_size, i,j
821 real(kind=
kreal),
pointer :: temp(:,:)
823 if( old_size >= new_size )
then
827 if(
associated( array ) )
then
828 allocate(temp(old_size,column))
831 temp(i,j) = array(i,j)
835 allocate(array(new_size,column))
839 array(i,j) = temp(i,j)
844 allocate(array(new_size, column))
852 integer(kind=kint) :: old_size, new_size, i
853 character(len=HECMW_NAME_LEN),
pointer :: temp(:)
855 if( old_size >= new_size )
then
859 if(
associated( array%s ) )
then
860 allocate(temp(old_size))
865 allocate(array%s(new_size))
871 allocate(array%s(new_size))
877 integer(kind=kint),
pointer :: array(:)
878 integer(kind=kint),
intent(in) :: old_size
879 integer(kind=kint),
intent(in) :: nindex
880 integer(kind=kint) :: i
881 integer(kind=kint),
pointer :: temp(:)
883 if( old_size < nindex )
then
887 if( old_size == nindex )
then
892 allocate(temp(0:old_size-1))
893 do i=0, old_size-nindex-1
897 allocate(array(0:old_size-nindex-1))
899 do i=0, old_size-nindex-1
907 integer(kind=kint),
pointer :: array(:)
908 integer(kind=kint),
intent(in) :: old_size
909 integer(kind=kint),
intent(in) :: nitem
910 integer(kind=kint) :: i
911 integer(kind=kint),
pointer :: temp(:)
913 if( old_size < nitem )
then
917 if( old_size == nitem )
then
922 allocate(temp(old_size))
923 do i=1, old_size-nitem
927 allocate(array(old_size-nitem))
929 do i=1, old_size-nitem
937 real(kind=
kreal),
pointer :: array(:)
938 integer(kind=kint),
intent(in) :: old_size
939 integer(kind=kint),
intent(in) :: nitem
940 integer(kind=kint) :: i
941 real(kind=
kreal),
pointer :: temp(:)
943 if( old_size < nitem )
then
947 if( old_size == nitem )
then
952 allocate(temp(old_size))
953 do i=1, old_size-nitem
957 allocate(array(old_size-nitem))
959 do i=1, old_size-nitem
969 integer(kind=kint),
pointer :: array(:)
970 integer(kind=kint) :: n;
972 if(
associated( array ))
deallocate(array)
978 real(kind=
kreal),
pointer :: array(:)
979 integer(kind=kint) :: n;
981 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 append_new_groups(hecMESH, grp_type_name, n, names, index, list, first_id)
Append n groups at once; group i holds list(index(i-1)+1:index(i)).
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