subroutine read_gmsh_msh1_element(file_unit, itr_element, text_line, element, status, flag)
integer, intent(in) :: file_unit
integer, intent(in) :: itr_element
character(len=*), intent(inout) :: text_line
type(gmsh_msh1_element_type), intent(inout) :: element
type(gmsh_msh1_status_type), intent(inout) :: status
logical, intent(out) :: flag
!> the number of nodes for the *n*-th element.
integer :: number_of_nodes
call initialize_gmsh_msh1_element(&!
element = element , &!
stat = status%err%code , &!
errmsg = status%err%msg(:) &!
)
if ( is_stat_failure(status) ) then
write( &!
unit = status%err%msg(:) , &!
fmt = '(A,I0,*(1X,A))' &!
) &!
'Failed to deallocate No.' , &!
itr_element , &!
'`node_number_list`:' , &!
trim( status%io%msg(:) )
return
end if
read( &!
unit = file_unit , &!
fmt = '(A)' , &!
iostat = status%io%code , &!
iomsg = status%io%msg(:) &!
) &!
text_line(:)
if ( is_iostat_failure(status) ) then
status%err%code = status%io%code
write( &!
unit = status%err%msg(:) , &!
fmt = '(A,I0,*(1X,A))' &!
) &!
'Failed to read No.' , &!
itr_element , &!
'element as string:' , &!
trim( status%io%msg(:) )
call clear_msg(status%io%msg)
return
end if
read( &!
unit = text_line(:) , &!
fmt = * , &!
iostat = status%io%code , &!
iomsg = status%io%msg(:) &!
) &!
element%elm_number , &!
element%elm_type , &!
element%reg_phys , &!
element%reg_elem , &!
number_of_nodes
if ( is_iostat_failure(status) ) then
status%err%code = status%io%code
write( &!
unit = status%err%msg(:) , &!
fmt = '(A,I0,*(1X,A))' &!
) &!
'Failed to read No.' , &!
itr_element , &!
'element''s' , &!
'`elm_number`, ' , &!
'`elm_type`,' , &!
'`reg_phys`' , &!
'`reg_elem`' , &!
'or' , &!
'`number_of_nodes`:' , &!
trim( status%io%msg(:) )
call clear_msg(status%io%msg)
return
end if
flag = ( number_of_nodes .ge. 0 )
if ( .not. flag ) then
write( &!
unit = status%err%msg(:) , &!
fmt = '(A,I0,2(1X,A),1X,I0)' &!
) &!
'Failed to read No.' , &!
itr_element , &!
'element: `number_of_nodes` is negative:' , &!
'read value:' , &!
number_of_nodes
return
end if
allocate( &!
element%node_number_list(number_of_nodes) , &!
stat = status%err%code , &!
errmsg = status%err%msg(:) &!
)
if ( is_stat_failure(status) ) then
write( &!
unit = status%err%msg(:) , &!
fmt = '(A,I0,*(1X,A))' &!
) &!
'Failed to deallocate No.' , &!
itr_element , &!
'`node_number_list`:' , &!
trim( status%io%msg(:) )
return
end if
read( &!
unit = text_line(:) , &!
fmt = * , &!
iostat = status%io%code , &!
iomsg = status%io%msg(:) &!
) &!
element%elm_number , &!
element%elm_type , &!
element%reg_phys , &!
element%reg_elem , &!
number_of_nodes , &!
element%node_number_list(:)
if ( is_iostat_failure(status) ) then
status%err%code = status%io%code
write( &!
unit = status%err%msg(:) , &!
fmt = '(A,I0,*(1X,A))' &!
) &!
'Failed to read No.' , &!
itr_element , &!
'element''s' , &!
'`node_number_list`:' , &!
trim( status%io%msg(:) )
call clear_msg(status%io%msg)
return
end if
end subroutine read_gmsh_msh1_element