parsing material.config and debug.config
This commit is contained in:
parent
62694eddf8
commit
40fda62efc
|
@ -51,6 +51,10 @@ module config
|
||||||
config_homogenization, &
|
config_homogenization, &
|
||||||
config_texture, &
|
config_texture, &
|
||||||
config_crystallite
|
config_crystallite
|
||||||
|
|
||||||
|
type(tPartitionedStringList), public, protected :: &
|
||||||
|
config_numerics, &
|
||||||
|
config_debug
|
||||||
|
|
||||||
character(len=64), dimension(:), allocatable, public, protected :: &
|
character(len=64), dimension(:), allocatable, public, protected :: &
|
||||||
phase_name, & !< name of each phase
|
phase_name, & !< name of each phase
|
||||||
|
@ -74,12 +78,13 @@ contains
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief reads material.config and stores its content per part
|
!> @brief reads material.config and stores its content per part
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine config_init()
|
subroutine config_init
|
||||||
use prec, only: &
|
use prec, only: &
|
||||||
pStringLen
|
pStringLen
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
getSolverJobName
|
getSolverJobName
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
|
IO_read_ASCII, &
|
||||||
IO_error, &
|
IO_error, &
|
||||||
IO_lc, &
|
IO_lc, &
|
||||||
IO_getTag
|
IO_getTag
|
||||||
|
@ -103,10 +108,12 @@ subroutine config_init()
|
||||||
|
|
||||||
inquire(file=trim(getSolverJobName())//'.materialConfig',exist=fileExists)
|
inquire(file=trim(getSolverJobName())//'.materialConfig',exist=fileExists)
|
||||||
if(fileExists) then
|
if(fileExists) then
|
||||||
|
write(6,'(/,a)') ' reading '//trim(getSolverJobName())//'.materialConfig'; flush(6)
|
||||||
fileContent = read_materialConfig(trim(getSolverJobName())//'.materialConfig')
|
fileContent = read_materialConfig(trim(getSolverJobName())//'.materialConfig')
|
||||||
else
|
else
|
||||||
inquire(file='material.config',exist=fileExists)
|
inquire(file='material.config',exist=fileExists)
|
||||||
if(.not. fileExists) call IO_error(100_pInt,ext_msg='material.config')
|
if(.not. fileExists) call IO_error(100_pInt,ext_msg='material.config')
|
||||||
|
write(6,'(/,a)') ' reading material.config'; flush(6)
|
||||||
fileContent = read_materialConfig('material.config')
|
fileContent = read_materialConfig('material.config')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -147,6 +154,21 @@ subroutine config_init()
|
||||||
if (size(config_crystallite) < 1) call IO_error(160_pInt,ext_msg='<crystallite>')
|
if (size(config_crystallite) < 1) call IO_error(160_pInt,ext_msg='<crystallite>')
|
||||||
if (material_Nphase < 1) call IO_error(160_pInt,ext_msg='<phase>')
|
if (material_Nphase < 1) call IO_error(160_pInt,ext_msg='<phase>')
|
||||||
if (size(config_texture) < 1) call IO_error(160_pInt,ext_msg='<texture>')
|
if (size(config_texture) < 1) call IO_error(160_pInt,ext_msg='<texture>')
|
||||||
|
|
||||||
|
|
||||||
|
inquire(file='numerics.config', exist=fileExists)
|
||||||
|
if (fileExists) then
|
||||||
|
write(6,'(/,a)') ' reading numerics.config'; flush(6)
|
||||||
|
fileContent = IO_read_ASCII('numerics.config')
|
||||||
|
call parse_debugAndNumericsConfig(config_numerics,fileContent)
|
||||||
|
endif
|
||||||
|
|
||||||
|
inquire(file='debug.config', exist=fileExists)
|
||||||
|
if (fileExists) then
|
||||||
|
write(6,'(/,a)') ' reading debug.config'; flush(6)
|
||||||
|
fileContent = IO_read_ASCII('debug.config')
|
||||||
|
call parse_debugAndNumericsConfig(config_debug,fileContent)
|
||||||
|
endif
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
|
@ -160,14 +182,14 @@ recursive function read_materialConfig(fileName,cnt) result(fileContent)
|
||||||
IO_warning
|
IO_warning
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=*), intent(in) :: fileName
|
character(len=*), intent(in) :: fileName
|
||||||
integer(pInt), intent(in), optional :: cnt !< recursion counter
|
integer, intent(in), optional :: cnt !< recursion counter
|
||||||
character(len=256), dimension(:), allocatable :: fileContent !< file content, separated per lines
|
character(len=pStringLen), dimension(:), allocatable :: fileContent !< file content, separated per lines
|
||||||
character(len=256), dimension(:), allocatable :: includedContent
|
character(len=pStringLen), dimension(:), allocatable :: includedContent
|
||||||
character(len=256) :: line
|
character(len=pStringLen) :: line
|
||||||
character(len=256), parameter :: dummy = 'https://damask.mpie.de' !< to fill up remaining array
|
character(len=pStringLen), parameter :: dummy = 'https://damask.mpie.de' !< to fill up remaining array
|
||||||
character(len=:), allocatable :: rawData
|
character(len=:), allocatable :: rawData
|
||||||
integer(pInt) :: &
|
integer :: &
|
||||||
fileLength, &
|
fileLength, &
|
||||||
fileUnit, &
|
fileUnit, &
|
||||||
startPos, endPos, &
|
startPos, endPos, &
|
||||||
|
@ -196,8 +218,8 @@ recursive function read_materialConfig(fileName,cnt) result(fileContent)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! count lines to allocate string array
|
! count lines to allocate string array
|
||||||
myTotalLines = 1_pInt
|
myTotalLines = 1
|
||||||
do l=1_pInt, len(rawData)
|
do l=1, len(rawData)
|
||||||
if (rawData(l:l) == new_line('')) myTotalLines = myTotalLines+1
|
if (rawData(l:l) == new_line('')) myTotalLines = myTotalLines+1
|
||||||
enddo
|
enddo
|
||||||
allocate(fileContent(myTotalLines))
|
allocate(fileContent(myTotalLines))
|
||||||
|
@ -205,27 +227,27 @@ recursive function read_materialConfig(fileName,cnt) result(fileContent)
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! split raw data at end of line and handle includes
|
! split raw data at end of line and handle includes
|
||||||
warned = .false.
|
warned = .false.
|
||||||
startPos = 1_pInt
|
startPos = 1
|
||||||
l = 1_pInt
|
l = 1
|
||||||
do while (l <= myTotalLines)
|
do while (l <= myTotalLines)
|
||||||
endPos = merge(startPos + scan(rawData(startPos:),new_line('')) - 2_pInt,len(rawData),l /= myTotalLines)
|
endPos = merge(startPos + scan(rawData(startPos:),new_line('')) - 2,len(rawData),l /= myTotalLines)
|
||||||
if (endPos - startPos > 255_pInt) then
|
if (endPos - startPos > pStringLen -1) then
|
||||||
line = rawData(startPos:startPos+255_pInt)
|
line = rawData(startPos:startPos+pStringLen-1)
|
||||||
if (.not. warned) then
|
if (.not. warned) then
|
||||||
call IO_warning(207_pInt,ext_msg=trim(fileName),el=l)
|
call IO_warning(207,ext_msg=trim(fileName),el=l)
|
||||||
warned = .true.
|
warned = .true.
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
line = rawData(startPos:endpos)
|
line = rawData(startPos:endpos)
|
||||||
endif
|
endif
|
||||||
startPos = endPos + 2_pInt ! jump to next line start
|
startPos = endPos + 2 ! jump to next line start
|
||||||
|
|
||||||
recursion: if (scan(trim(adjustl(line)),'{') == 1 .and. scan(trim(line),'}') > 2) then
|
recursion: if (scan(trim(adjustl(line)),'{') == 1 .and. scan(trim(line),'}') > 2) then
|
||||||
includedContent = read_materialConfig(trim(line(scan(line,'{')+1_pInt:scan(line,'}')-1_pInt)), &
|
includedContent = read_materialConfig(trim(line(scan(line,'{')+1:scan(line,'}')-1)), &
|
||||||
merge(cnt,1_pInt,present(cnt))) ! to track recursion depth
|
merge(cnt,1,present(cnt))) ! to track recursion depth
|
||||||
fileContent = [ fileContent(1:l-1_pInt), includedContent, [(dummy,i=1,myTotalLines-l)] ] ! add content and grow array
|
fileContent = [ fileContent(1:l-1), includedContent, [(dummy,i=1,myTotalLines-l)] ] ! add content and grow array
|
||||||
myTotalLines = myTotalLines - 1_pInt + size(includedContent)
|
myTotalLines = myTotalLines - 1 + size(includedContent)
|
||||||
l = l - 1_pInt + size(includedContent)
|
l = l - 1 + size(includedContent)
|
||||||
else recursion
|
else recursion
|
||||||
fileContent(l) = line
|
fileContent(l) = line
|
||||||
l = l + 1_pInt
|
l = l + 1_pInt
|
||||||
|
@ -241,12 +263,6 @@ end function read_materialConfig
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine parse_materialConfig(sectionNames,part,line, &
|
subroutine parse_materialConfig(sectionNames,part,line, &
|
||||||
fileContent)
|
fileContent)
|
||||||
use prec, only: &
|
|
||||||
pStringLen
|
|
||||||
use IO, only: &
|
|
||||||
IO_error, &
|
|
||||||
IO_getTag
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=64), allocatable, dimension(:), intent(out) :: sectionNames
|
character(len=64), allocatable, dimension(:), intent(out) :: sectionNames
|
||||||
type(tPartitionedStringList), allocatable, dimension(:), intent(inout) :: part
|
type(tPartitionedStringList), allocatable, dimension(:), intent(inout) :: part
|
||||||
|
@ -291,6 +307,23 @@ subroutine parse_materialConfig(sectionNames,part,line, &
|
||||||
|
|
||||||
end subroutine parse_materialConfig
|
end subroutine parse_materialConfig
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief parses the material.config file
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
subroutine parse_debugAndNumericsConfig(config_list, &
|
||||||
|
fileContent)
|
||||||
|
implicit none
|
||||||
|
type(tPartitionedStringList), intent(out) :: config_list
|
||||||
|
character(len=pStringLen), dimension(:), intent(in) :: fileContent
|
||||||
|
integer :: i
|
||||||
|
|
||||||
|
do i = 1_pInt, size(fileContent)
|
||||||
|
call config_list%add(trim(adjustl(fileContent(i))))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
end subroutine parse_debugAndNumericsConfig
|
||||||
|
|
||||||
end subroutine config_init
|
end subroutine config_init
|
||||||
|
|
||||||
|
|
||||||
|
@ -320,7 +353,13 @@ subroutine config_deallocate(what)
|
||||||
|
|
||||||
case('material.config/texture')
|
case('material.config/texture')
|
||||||
deallocate(config_texture)
|
deallocate(config_texture)
|
||||||
|
|
||||||
|
case('debug.config')
|
||||||
|
call config_debug%free
|
||||||
|
|
||||||
|
case('numerics.config')
|
||||||
|
call config_numerics%free
|
||||||
|
|
||||||
case default
|
case default
|
||||||
call IO_error(0_pInt,ext_msg='config_deallocate')
|
call IO_error(0_pInt,ext_msg='config_deallocate')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue