more flexible reporting
This commit is contained in:
parent
cfa2be44e9
commit
6c6b3e64b3
44
src/IO.f90
44
src/IO.f90
|
@ -129,7 +129,7 @@ function IO_read(fileName) result(fileContent)
|
||||||
inquire(file = fileName, size=fileLength)
|
inquire(file = fileName, size=fileLength)
|
||||||
open(newunit=fileUnit, file=fileName, access='stream',&
|
open(newunit=fileUnit, file=fileName, access='stream',&
|
||||||
status='old', position='rewind', action='read',iostat=myStat)
|
status='old', position='rewind', action='read',iostat=myStat)
|
||||||
if (myStat /= 0) call IO_error(100,ext_msg=trim(fileName))
|
if (myStat /= 0) call IO_error(100,trim(fileName))
|
||||||
allocate(character(len=fileLength)::fileContent)
|
allocate(character(len=fileLength)::fileContent)
|
||||||
if (fileLength==0) then
|
if (fileLength==0) then
|
||||||
close(fileUnit)
|
close(fileUnit)
|
||||||
|
@ -137,7 +137,7 @@ function IO_read(fileName) result(fileContent)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
read(fileUnit,iostat=myStat) fileContent
|
read(fileUnit,iostat=myStat) fileContent
|
||||||
if (myStat /= 0) call IO_error(102,ext_msg=trim(fileName))
|
if (myStat /= 0) call IO_error(102,trim(fileName))
|
||||||
close(fileUnit)
|
close(fileUnit)
|
||||||
|
|
||||||
if (scan(fileContent(:index(fileContent,LF)),CR//LF) /= 0) fileContent = CRLF2LF(fileContent)
|
if (scan(fileContent(:index(fileContent,LF)),CR//LF) /= 0) fileContent = CRLF2LF(fileContent)
|
||||||
|
@ -206,7 +206,7 @@ function IO_stringValue(string,chunkPos,myChunk)
|
||||||
|
|
||||||
validChunk: if (myChunk > chunkPos(1) .or. myChunk < 1) then
|
validChunk: if (myChunk > chunkPos(1) .or. myChunk < 1) then
|
||||||
IO_stringValue = ''
|
IO_stringValue = ''
|
||||||
call IO_error(110,el=myChunk,ext_msg='IO_stringValue: "'//trim(string)//'"')
|
call IO_error(110,'IO_stringValue: "'//trim(string)//'"',label1='chunk',ID1=myChunk)
|
||||||
else validChunk
|
else validChunk
|
||||||
IO_stringValue = string(chunkPos(myChunk*2):chunkPos(myChunk*2+1))
|
IO_stringValue = string(chunkPos(myChunk*2):chunkPos(myChunk*2+1))
|
||||||
endif validChunk
|
endif validChunk
|
||||||
|
@ -303,10 +303,10 @@ integer function IO_stringAsInt(string)
|
||||||
|
|
||||||
valid: if (verify(string,VALIDCHARS) == 0) then
|
valid: if (verify(string,VALIDCHARS) == 0) then
|
||||||
read(string,*,iostat=readStatus) IO_stringAsInt
|
read(string,*,iostat=readStatus) IO_stringAsInt
|
||||||
if (readStatus /= 0) call IO_error(111,ext_msg=string)
|
if (readStatus /= 0) call IO_error(111,string)
|
||||||
else valid
|
else valid
|
||||||
IO_stringAsInt = 0
|
IO_stringAsInt = 0
|
||||||
call IO_error(111,ext_msg=string)
|
call IO_error(111,string)
|
||||||
endif valid
|
endif valid
|
||||||
|
|
||||||
end function IO_stringAsInt
|
end function IO_stringAsInt
|
||||||
|
@ -325,10 +325,10 @@ real(pReal) function IO_stringAsFloat(string)
|
||||||
|
|
||||||
valid: if (verify(string,VALIDCHARS) == 0) then
|
valid: if (verify(string,VALIDCHARS) == 0) then
|
||||||
read(string,*,iostat=readStatus) IO_stringAsFloat
|
read(string,*,iostat=readStatus) IO_stringAsFloat
|
||||||
if (readStatus /= 0) call IO_error(112,ext_msg=string)
|
if (readStatus /= 0) call IO_error(112,string)
|
||||||
else valid
|
else valid
|
||||||
IO_stringAsFloat = 0.0_pReal
|
IO_stringAsFloat = 0.0_pReal
|
||||||
call IO_error(112,ext_msg=string)
|
call IO_error(112,string)
|
||||||
endif valid
|
endif valid
|
||||||
|
|
||||||
end function IO_stringAsFloat
|
end function IO_stringAsFloat
|
||||||
|
@ -348,32 +348,30 @@ logical function IO_stringAsBool(string)
|
||||||
IO_stringAsBool = .false.
|
IO_stringAsBool = .false.
|
||||||
else
|
else
|
||||||
IO_stringAsBool = .false.
|
IO_stringAsBool = .false.
|
||||||
call IO_error(113,ext_msg=string)
|
call IO_error(113,string)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
end function IO_stringAsBool
|
end function IO_stringAsBool
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Write error statements to standard out and terminate the run with exit #9xxx
|
!> @brief Write error statements to standard out and terminate the run with exit #9xxx.
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_error(error_ID,el,ext_msg)
|
subroutine IO_error(error_ID,ext_msg,label1,ID1,label2,ID2)
|
||||||
|
|
||||||
integer, intent(in) :: error_ID
|
integer, intent(in) :: error_ID
|
||||||
integer, optional, intent(in) :: el
|
character(len=*), optional, intent(in) :: ext_msg,label1,label2
|
||||||
character(len=*), optional, intent(in) :: ext_msg
|
integer, optional, intent(in) :: ID1,ID2
|
||||||
|
|
||||||
external :: quit
|
external :: quit
|
||||||
character(len=:), allocatable :: msg
|
character(len=:), allocatable :: msg
|
||||||
character(len=pStringLen) :: formatString
|
character(len=pStringLen) :: formatString
|
||||||
|
|
||||||
|
|
||||||
select case (error_ID)
|
if (present(ID1) .and. .not. present(label1)) error stop 'error value without label (1)'
|
||||||
|
if (present(ID2) .and. .not. present(label2)) error stop 'error value without label (2)'
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
select case (error_ID)
|
||||||
! internal errors
|
|
||||||
case (0)
|
|
||||||
msg = 'internal check failed:'
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! file handling errors
|
! file handling errors
|
||||||
|
@ -558,8 +556,16 @@ subroutine IO_error(error_ID,el,ext_msg)
|
||||||
max(1,72-len_trim(ext_msg)-4),'x,a)'
|
max(1,72-len_trim(ext_msg)-4),'x,a)'
|
||||||
write(IO_STDERR,formatString) '│ ',trim(ext_msg), '│'
|
write(IO_STDERR,formatString) '│ ',trim(ext_msg), '│'
|
||||||
endif
|
endif
|
||||||
if (present(el)) &
|
if (present(label1)) then
|
||||||
write(IO_STDERR,'(a19,1x,i9,44x,a3)') ' │ at element ',el, '│'
|
write(formatString,'(a,i6.6,a,i6.6,a)') '(1x,a7,a',max(1,len_trim(label1)),',i9,',&
|
||||||
|
max(1,72-len_trim(label1)-9-7),'x,a)'
|
||||||
|
write(IO_STDERR,formatString) '│ at ',trim(label1),ID1, '│'
|
||||||
|
endif
|
||||||
|
if (present(label2)) then
|
||||||
|
write(formatString,'(a,i6.6,a,i6.6,a)') '(1x,a7,a',max(1,len_trim(label2)),',i9,',&
|
||||||
|
max(1,72-len_trim(label2)-9-7),'x,a)'
|
||||||
|
write(IO_STDERR,formatString) '│ at ',trim(label2),ID2, '│'
|
||||||
|
endif
|
||||||
write(IO_STDERR,'(a,69x,a)') ' │', '│'
|
write(IO_STDERR,'(a,69x,a)') ' │', '│'
|
||||||
write(IO_STDERR,'(a)') ' └'//DIVIDER//'┘'
|
write(IO_STDERR,'(a)') ' └'//DIVIDER//'┘'
|
||||||
flush(IO_STDERR)
|
flush(IO_STDERR)
|
||||||
|
|
|
@ -80,13 +80,13 @@ subroutine discretization_Marc_init
|
||||||
|
|
||||||
num_commercialFEM => config_numerics%get('commercialFEM',defaultVal = emptyDict)
|
num_commercialFEM => config_numerics%get('commercialFEM',defaultVal = emptyDict)
|
||||||
mesh_unitlength = num_commercialFEM%get_asFloat('unitlength',defaultVal=1.0_pReal) ! set physical extent of a length unit in mesh
|
mesh_unitlength = num_commercialFEM%get_asFloat('unitlength',defaultVal=1.0_pReal) ! set physical extent of a length unit in mesh
|
||||||
if (mesh_unitlength <= 0.0_pReal) call IO_error(301,ext_msg='unitlength')
|
if (mesh_unitlength <= 0.0_pReal) call IO_error(301,'unitlength')
|
||||||
|
|
||||||
call inputRead(elem,node0_elem,connectivity_elem,materialAt)
|
call inputRead(elem,node0_elem,connectivity_elem,materialAt)
|
||||||
nElems = size(connectivity_elem,2)
|
nElems = size(connectivity_elem,2)
|
||||||
|
|
||||||
if (debug_e < 1 .or. debug_e > nElems) call IO_error(602,ext_msg='element')
|
if (debug_e < 1 .or. debug_e > nElems) call IO_error(602,'element')
|
||||||
if (debug_i < 1 .or. debug_i > elem%nIPs) call IO_error(602,ext_msg='IP')
|
if (debug_i < 1 .or. debug_i > elem%nIPs) call IO_error(602,'IP')
|
||||||
|
|
||||||
allocate(cellNodeDefinition(elem%nNodes-1))
|
allocate(cellNodeDefinition(elem%nNodes-1))
|
||||||
allocate(connectivity_cell(elem%NcellNodesPerCell,elem%nIPs,nElems))
|
allocate(connectivity_cell(elem%NcellNodesPerCell,elem%nIPs,nElems))
|
||||||
|
@ -579,7 +579,7 @@ subroutine inputRead_elemType(elem, &
|
||||||
character(len=*), dimension(:), intent(in) :: fileContent !< file content, separated per lines
|
character(len=*), dimension(:), intent(in) :: fileContent !< file content, separated per lines
|
||||||
|
|
||||||
integer, allocatable, dimension(:) :: chunkPos
|
integer, allocatable, dimension(:) :: chunkPos
|
||||||
integer :: i,j,t,l,remainingChunks
|
integer :: i,j,t,t_,l,remainingChunks
|
||||||
|
|
||||||
|
|
||||||
t = -1
|
t = -1
|
||||||
|
@ -594,7 +594,8 @@ subroutine inputRead_elemType(elem, &
|
||||||
t = mapElemtype(IO_stringValue(fileContent(l+1+i+j),chunkPos,2))
|
t = mapElemtype(IO_stringValue(fileContent(l+1+i+j),chunkPos,2))
|
||||||
call elem%init(t)
|
call elem%init(t)
|
||||||
else
|
else
|
||||||
if (t /= mapElemtype(IO_stringValue(fileContent(l+1+i+j),chunkPos,2))) call IO_error(191,el=t)
|
t_ = mapElemtype(IO_stringValue(fileContent(l+1+i+j),chunkPos,2))
|
||||||
|
if (t /= t_) call IO_error(191,IO_stringValue(fileContent(l+1+i+j),chunkPos,2),label1='type',ID1=t)
|
||||||
endif
|
endif
|
||||||
remainingChunks = elem%nNodes - (chunkPos(1) - 2)
|
remainingChunks = elem%nNodes - (chunkPos(1) - 2)
|
||||||
do while(remainingChunks > 0)
|
do while(remainingChunks > 0)
|
||||||
|
@ -617,7 +618,7 @@ subroutine inputRead_elemType(elem, &
|
||||||
character(len=*), intent(in) :: what
|
character(len=*), intent(in) :: what
|
||||||
|
|
||||||
|
|
||||||
select case (IO_lc(what))
|
select case (what)
|
||||||
case ( '6')
|
case ( '6')
|
||||||
mapElemtype = 1 ! Two-dimensional Plane Strain Triangle
|
mapElemtype = 1 ! Two-dimensional Plane Strain Triangle
|
||||||
case ( '125') ! 155, 128 (need test)
|
case ( '125') ! 155, 128 (need test)
|
||||||
|
@ -645,7 +646,7 @@ subroutine inputRead_elemType(elem, &
|
||||||
case ( '21')
|
case ( '21')
|
||||||
mapElemtype = 13 ! Three-dimensional Arbitrarily Distorted quadratic hexahedral
|
mapElemtype = 13 ! Three-dimensional Arbitrarily Distorted quadratic hexahedral
|
||||||
case default
|
case default
|
||||||
call IO_error(error_ID=190,ext_msg=IO_lc(what))
|
call IO_error(190,what)
|
||||||
end select
|
end select
|
||||||
|
|
||||||
end function mapElemtype
|
end function mapElemtype
|
||||||
|
|
|
@ -290,7 +290,7 @@ program DAMASK_grid
|
||||||
if (loadCases(l)%f_restart < huge(0)) &
|
if (loadCases(l)%f_restart < huge(0)) &
|
||||||
print'(2x,a,1x,i0)', 'f_restart:', loadCases(l)%f_restart
|
print'(2x,a,1x,i0)', 'f_restart:', loadCases(l)%f_restart
|
||||||
|
|
||||||
if (errorID > 0) call IO_error(error_ID = errorID, el = l)
|
if (errorID > 0) call IO_error(errorID,label1='line',ID1=l)
|
||||||
|
|
||||||
endif reportAndCheck
|
endif reportAndCheck
|
||||||
enddo
|
enddo
|
||||||
|
|
|
@ -576,7 +576,7 @@ function lattice_C66_trans(Ntrans,C_parent66,lattice_target, &
|
||||||
|
|
||||||
do i = 1,6
|
do i = 1,6
|
||||||
if (abs(C_target_unrotated66(i,i))<tol_math_check) &
|
if (abs(C_target_unrotated66(i,i))<tol_math_check) &
|
||||||
call IO_error(135,el=i,ext_msg='matrix diagonal "el"ement in transformation')
|
call IO_error(135,'matrix diagonal in transformation',label1='entry',ID1=i)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
call buildTransformationSystem(Q,S,Ntrans,cOverA_trans,a_cF,a_cI)
|
call buildTransformationSystem(Q,S,Ntrans,cOverA_trans,a_cF,a_cI)
|
||||||
|
|
Loading…
Reference in New Issue