functionality to report references in material.yaml
This commit is contained in:
parent
87e74ef792
commit
04db45f5c0
62
src/IO.f90
62
src/IO.f90
|
@ -11,6 +11,7 @@ module IO
|
||||||
IO_STDERR => ERROR_UNIT
|
IO_STDERR => ERROR_UNIT
|
||||||
|
|
||||||
use prec
|
use prec
|
||||||
|
use misc
|
||||||
|
|
||||||
implicit none(type,external)
|
implicit none(type,external)
|
||||||
private
|
private
|
||||||
|
@ -30,6 +31,7 @@ module IO
|
||||||
IO_read, &
|
IO_read, &
|
||||||
IO_readlines, &
|
IO_readlines, &
|
||||||
IO_isBlank, &
|
IO_isBlank, &
|
||||||
|
IO_insertEOL, &
|
||||||
IO_stringPos, &
|
IO_stringPos, &
|
||||||
IO_stringValue, &
|
IO_stringValue, &
|
||||||
IO_intValue, &
|
IO_intValue, &
|
||||||
|
@ -158,6 +160,53 @@ logical pure function IO_isBlank(string)
|
||||||
end function IO_isBlank
|
end function IO_isBlank
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief Insert EOL at separator trying to keep line length below limit.
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
function IO_insertEOL(string,separator,length)
|
||||||
|
|
||||||
|
character(len=*), intent(in) :: string !< string to split
|
||||||
|
character, optional, intent(in) :: separator !< possible splitting positions
|
||||||
|
integer, optional, intent(in) :: length !< (soft) line limit
|
||||||
|
character(len=:), allocatable :: IO_insertEOL
|
||||||
|
|
||||||
|
integer, dimension(:), allocatable :: pos_sep, pos_split
|
||||||
|
integer :: i,s,e
|
||||||
|
character :: sep
|
||||||
|
|
||||||
|
|
||||||
|
sep = misc_optional(separator,',')
|
||||||
|
|
||||||
|
i = index(string,sep)
|
||||||
|
if (i == 0) then
|
||||||
|
IO_insertEOL = string
|
||||||
|
else
|
||||||
|
pos_sep = [0]
|
||||||
|
s = i
|
||||||
|
do while (i /= 0 .and. s < len(string))
|
||||||
|
pos_sep = [pos_sep,s]
|
||||||
|
i = index(string(s+1:),sep)
|
||||||
|
s = s + i
|
||||||
|
end do
|
||||||
|
pos_sep = [pos_sep,len(string)]
|
||||||
|
|
||||||
|
pos_split = [integer::]
|
||||||
|
s = 1
|
||||||
|
e = 2
|
||||||
|
IO_insertEOL= ''
|
||||||
|
do while (e < size(pos_sep))
|
||||||
|
if (pos_sep(e+1) - pos_sep(s) >= misc_optional(length,80)) then
|
||||||
|
IO_insertEOL = IO_insertEOL//string(pos_sep(s)+1:pos_sep(e))//IO_EOL
|
||||||
|
s = e
|
||||||
|
end if
|
||||||
|
e = e + 1
|
||||||
|
end do
|
||||||
|
IO_insertEOL = IO_insertEOL//string(pos_sep(s)+1:)
|
||||||
|
end if
|
||||||
|
|
||||||
|
end function IO_insertEOL
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Locate all whitespace-separated chunks in given string and returns array containing
|
!> @brief Locate all whitespace-separated chunks in given string and returns array containing
|
||||||
!! number them and the left/right position to be used by IO_xxxVal.
|
!! number them and the left/right position to be used by IO_xxxVal.
|
||||||
|
@ -748,6 +797,19 @@ subroutine selfTest()
|
||||||
str=' ab #';out=IO_rmComment(str)
|
str=' ab #';out=IO_rmComment(str)
|
||||||
if (out /= ' ab'.or. len(out) /= 3) error stop 'IO_rmComment/6'
|
if (out /= ' ab'.or. len(out) /= 3) error stop 'IO_rmComment/6'
|
||||||
|
|
||||||
|
if ('abc, def' /= IO_insertEOL('abc, def')) &
|
||||||
|
error stop 'IO_insertEOL/1'
|
||||||
|
if ('abc,'//IO_EOL//'def' /= IO_insertEOL('abc,def',length=3)) &
|
||||||
|
error stop 'IO_insertEOL/2'
|
||||||
|
if ('abc,'//IO_EOL//'def' /= IO_insertEOL('abc,def',length=5)) &
|
||||||
|
error stop 'IO_insertEOL/3'
|
||||||
|
if ('abc, def' /= IO_insertEOL('abc, def',length=3,separator='.')) &
|
||||||
|
error stop 'IO_insertEOL/4'
|
||||||
|
if ('abc.'//IO_EOL//' def' /= IO_insertEOL('abc. def',length=3,separator='.')) &
|
||||||
|
error stop 'IO_insertEOL/5'
|
||||||
|
if ('abc,'//IO_EOL//'defg,'//IO_EOL//'hij' /= IO_insertEOL('abc,defg,hij',length=4)) &
|
||||||
|
error stop 'IO_insertEOL/6'
|
||||||
|
|
||||||
end subroutine selfTest
|
end subroutine selfTest
|
||||||
|
|
||||||
end module IO
|
end module IO
|
||||||
|
|
|
@ -49,7 +49,8 @@ module material
|
||||||
material_v ! fraction
|
material_v ! fraction
|
||||||
|
|
||||||
public :: &
|
public :: &
|
||||||
material_init
|
material_init, &
|
||||||
|
material_references
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
|
@ -79,7 +80,32 @@ end subroutine material_init
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Parse material.yaml to get the global structure
|
!> @brief Return string with references from dict.
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
function material_references(config) result(references)
|
||||||
|
|
||||||
|
type(tDict) :: config
|
||||||
|
character(len=:), allocatable :: references
|
||||||
|
|
||||||
|
type(tList), pointer :: ref
|
||||||
|
integer :: r
|
||||||
|
|
||||||
|
|
||||||
|
ref => config%get_list('references',emptyList)
|
||||||
|
if (ref%length > 0) then
|
||||||
|
references = 'references:'
|
||||||
|
do r = 1, ref%length
|
||||||
|
references = references//IO_EOL//' '//IO_insertEOL(ref%get_asString(r))
|
||||||
|
end do
|
||||||
|
else
|
||||||
|
references = ''
|
||||||
|
end if
|
||||||
|
|
||||||
|
end function material_references
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief Parse material.yaml to get the global structure.
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine parse()
|
subroutine parse()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue