read_gmsh_msh1_element Subroutine

private subroutine read_gmsh_msh1_element(file_unit, itr_element, text_line, element, status, flag)

Arguments

Type IntentOptional Attributes Name
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

Calls

proc~~read_gmsh_msh1_element~~CallsGraph proc~read_gmsh_msh1_element read_gmsh_msh1_element proc~clear_msg clear_msg proc~read_gmsh_msh1_element->proc~clear_msg proc~initialize_gmsh_msh1_element initialize_gmsh_msh1_element proc~read_gmsh_msh1_element->proc~initialize_gmsh_msh1_element proc~is_iostat_failure is_iostat_failure proc~read_gmsh_msh1_element->proc~is_iostat_failure proc~is_stat_failure is_stat_failure proc~read_gmsh_msh1_element->proc~is_stat_failure

Called by

proc~~read_gmsh_msh1_element~~CalledByGraph proc~read_gmsh_msh1_element read_gmsh_msh1_element proc~read_gmsh_msh1_file_kernel read_gmsh_msh1_file_kernel proc~read_gmsh_msh1_file_kernel->proc~read_gmsh_msh1_element proc~read_gmsh_msh1_file read_gmsh_msh1_file proc~read_gmsh_msh1_file->proc~read_gmsh_msh1_file_kernel

Variables

Type Visibility Attributes Name Initial
integer, private :: number_of_nodes

the number of nodes for the n-th element.


Source Code

    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