diff --git a/src/IO.f90 b/src/IO.f90 index e049f3619..1957eb6ad 100644 --- a/src/IO.f90 +++ b/src/IO.f90 @@ -31,7 +31,7 @@ module IO IO_read, & IO_readlines, & IO_isBlank, & - IO_insertEOL, & + IO_wrapLines, & IO_stringPos, & IO_stringValue, & IO_intValue, & @@ -163,23 +163,26 @@ end function IO_isBlank !-------------------------------------------------------------------------------------------------- !> @brief Insert EOL at separator trying to keep line length below limit. !-------------------------------------------------------------------------------------------------- -function IO_insertEOL(string,separator,length) +function IO_wrapLines(string,separator,filler,length) character(len=*), intent(in) :: string !< string to split character, optional, intent(in) :: separator !< line breaks are possible after this character, defaults to ',' + character(len=*), optional, intent(in) :: filler !< character(s) to insert after line break, defaults to none integer, optional, intent(in) :: length !< (soft) line limit, defaults to 80 - character(len=:), allocatable :: IO_insertEOL + character(len=:), allocatable :: IO_wrapLines integer, dimension(:), allocatable :: pos_sep, pos_split integer :: i,s,e character :: sep + character(len=:), allocatable :: fill sep = misc_optional(separator,',') + fill = misc_optional(filler,'') i = index(string,sep) if (i == 0) then - IO_insertEOL = string + IO_wrapLines = string else pos_sep = [0] s = i @@ -193,18 +196,18 @@ function IO_insertEOL(string,separator,length) pos_split = emptyIntArray s = 1 e = 2 - IO_insertEOL = '' + IO_wrapLines = '' 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 + IO_wrapLines = IO_wrapLines//adjustl(string(pos_sep(s)+1:pos_sep(e)))//IO_EOL//fill s = e end if e = e + 1 end do - IO_insertEOL = IO_insertEOL//string(pos_sep(s)+1:) + IO_wrapLines = IO_wrapLines//adjustl(string(pos_sep(s)+1:)) end if -end function IO_insertEOL +end function IO_wrapLines !-------------------------------------------------------------------------------------------------- @@ -797,18 +800,20 @@ subroutine selfTest() str=' ab #';out=IO_rmComment(str) 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' + if ('abc, def' /= IO_wrapLines('abc, def')) & + error stop 'IO_wrapLines/1' + if ('abc,'//IO_EOL//'def' /= IO_wrapLines('abc,def',length=3)) & + error stop 'IO_wrapLines/2' + if ('abc,'//IO_EOL//'def' /= IO_wrapLines('abc,def',length=5)) & + error stop 'IO_wrapLines/3' + if ('abc, def' /= IO_wrapLines('abc, def',length=3,separator='.')) & + error stop 'IO_wrapLines/4' + if ('abc.'//IO_EOL//'def' /= IO_wrapLines('abc. def',length=3,separator='.')) & + error stop 'IO_wrapLines/5' + if ('abc,'//IO_EOL//'defg,'//IO_EOL//'hij' /= IO_wrapLines('abc,defg,hij',length=4)) & + error stop 'IO_wrapLines/6' + if ('abc,'//IO_EOL//'xxdefg,'//IO_EOL//'xxhij' /= IO_wrapLines('abc,defg, hij',filler='xx',length=4)) & + error stop 'IO_wrapLines/7' end subroutine selfTest diff --git a/src/config.f90 b/src/config.f90 index 207dedb7a..e5f9011fb 100644 --- a/src/config.f90 +++ b/src/config.f90 @@ -4,6 +4,7 @@ !-------------------------------------------------------------------------------------------------- module config use IO + use misc use YAML_parse use YAML_types use result @@ -20,7 +21,7 @@ module config config_init, & config_material_deallocate, & config_numerics_deallocate, & - config_fetchReferences + config_listReferences contains @@ -63,26 +64,30 @@ end subroutine config_numerics_deallocate !-------------------------------------------------------------------------------------------------- !> @brief Return string with references from dict. !-------------------------------------------------------------------------------------------------- -function config_fetchReferences(config) result(references) +function config_listReferences(config,indent) result(references) type(tDict) :: config + integer, optional :: indent character(len=:), allocatable :: references + type(tList), pointer :: ref + character(len=:), allocatable :: filler integer :: r + filler = repeat(' ',misc_optional(indent,0)) ref => config%get_list('references',emptyList) - if (ref%length > 0) then + if (ref%length == 0) then + references = '' + else references = 'references:' do r = 1, ref%length - references = references//IO_EOL//' '//IO_insertEOL(ref%get_asString(r)) + references = references//IO_EOL//filler//'- '//IO_wrapLines(ref%get_asString(r),filler=filler//' ') end do - else - references = '' end if -end function config_fetchReferences +end function config_listReferences !-------------------------------------------------------------------------------------------------- diff --git a/src/phase.f90 b/src/phase.f90 index 98388fc74..08027ebe7 100644 --- a/src/phase.f90 +++ b/src/phase.f90 @@ -382,6 +382,7 @@ subroutine phase_init type(tDict), pointer :: & phases, & phase + character(len=:), allocatable :: refs print'(/,1x,a)', '<<<+- phase init -+>>>'; flush(IO_STDOUT) @@ -393,8 +394,10 @@ subroutine phase_init allocate(phase_O_0(phases%length)) do ph = 1,phases%length + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) phase => phases%get_dict(ph) - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(phase) + refs = config_listReferences(phase,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs phase_lattice(ph) = phase%get_asString('lattice') if (all(phase_lattice(ph) /= ['cF','cI','hP','tI'])) & call IO_error(130,ext_msg='phase_init: '//phase%get_asString('lattice')) diff --git a/src/phase_damage.f90 b/src/phase_damage.f90 index d2a25dcb3..e5909cb22 100644 --- a/src/phase_damage.f90 +++ b/src/phase_damage.f90 @@ -79,9 +79,10 @@ module subroutine damage_init() ph, & Nmembers type(tDict), pointer :: & - phases, & - phase, & - source + phases, & + phase, & + source + character(len=:), allocatable :: refs logical:: damage_active @@ -103,7 +104,9 @@ module subroutine damage_init() phase => phases%get_dict(ph) source => phase%get_dict('damage',defaultVal=emptyDict) if (source%length > 0) then - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(source) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(source,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs damage_active = .true. param(ph)%mu = source%get_asFloat('mu') param(ph)%l_c = source%get_asFloat('l_c') diff --git a/src/phase_damage_anisobrittle.f90 b/src/phase_damage_anisobrittle.f90 index 9f09e37ac..237ca8698 100644 --- a/src/phase_damage_anisobrittle.f90 +++ b/src/phase_damage_anisobrittle.f90 @@ -41,7 +41,9 @@ module function anisobrittle_init() result(mySources) src integer :: Nmembers,ph integer, dimension(:), allocatable :: N_cl - character(len=:), allocatable :: extmsg + character(len=:), allocatable :: & + refs, & + extmsg mySources = source_active('anisobrittle') @@ -62,7 +64,9 @@ module function anisobrittle_init() result(mySources) associate(prm => param(ph)) - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(src) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(src,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs N_cl = src%get_as1dInt('N_cl',defaultVal=emptyIntArray) prm%sum_N_cl = sum(abs(N_cl)) diff --git a/src/phase_damage_isobrittle.f90 b/src/phase_damage_isobrittle.f90 index cb496a44e..7b09d4a56 100644 --- a/src/phase_damage_isobrittle.f90 +++ b/src/phase_damage_isobrittle.f90 @@ -39,7 +39,9 @@ module function isobrittle_init() result(mySources) phase, & src integer :: Nmembers,ph - character(len=:), allocatable :: extmsg + character(len=:), allocatable :: & + refs, & + extmsg mySources = source_active('isobrittle') @@ -64,7 +66,9 @@ module function isobrittle_init() result(mySources) prm%W_crit = src%get_asFloat('G_crit')/src%get_asFloat('l_c') - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(src) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(src,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs #if defined (__GFORTRAN__) prm%output = output_as1dString(src) diff --git a/src/phase_mechanical_elastic.f90 b/src/phase_mechanical_elastic.f90 index 3d54a9d7d..15a5d29c2 100644 --- a/src/phase_mechanical_elastic.f90 +++ b/src/phase_mechanical_elastic.f90 @@ -28,6 +28,7 @@ module subroutine elastic_init(phases) phase, & mech, & elastic + character(len=:), allocatable :: refs print'(/,1x,a)', '<<<+- phase:mechanical:elastic init -+>>>' @@ -42,7 +43,9 @@ module subroutine elastic_init(phases) phase => phases%get_dict(ph) mech => phase%get_dict('mechanical') elastic => mech%get_dict('elastic') - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(elastic) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(elastic,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs if (elastic%get_asString('type') /= 'Hooke') call IO_error(200,ext_msg=elastic%get_asString('type')) associate(prm => param(ph)) diff --git a/src/phase_mechanical_plastic_dislotungsten.f90 b/src/phase_mechanical_plastic_dislotungsten.f90 index 4b3741e37..e37511967 100644 --- a/src/phase_mechanical_plastic_dislotungsten.f90 +++ b/src/phase_mechanical_plastic_dislotungsten.f90 @@ -93,7 +93,9 @@ module function plastic_dislotungsten_init() result(myPlasticity) rho_mob_0, & !< initial dislocation density rho_dip_0, & !< initial dipole density a !< non-Schmid coefficients - character(len=:), allocatable :: extmsg + character(len=:), allocatable :: & + refs, & + extmsg type(tDict), pointer :: & phases, & phase, & @@ -128,7 +130,9 @@ module function plastic_dislotungsten_init() result(myPlasticity) mech => phase%get_dict('mechanical') pl => mech%get_dict('plastic') - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(pl) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(pl,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs #if defined (__GFORTRAN__) prm%output = output_as1dString(pl) diff --git a/src/phase_mechanical_plastic_dislotwin.f90 b/src/phase_mechanical_plastic_dislotwin.f90 index 7375a402c..ee6ccb9d1 100644 --- a/src/phase_mechanical_plastic_dislotwin.f90 +++ b/src/phase_mechanical_plastic_dislotwin.f90 @@ -140,7 +140,9 @@ module function plastic_dislotwin_init() result(myPlasticity) real(pReal), allocatable, dimension(:) :: & rho_mob_0, & !< initial unipolar dislocation density per slip system rho_dip_0 !< initial dipole dislocation density per slip system - character(len=:), allocatable :: extmsg + character(len=:), allocatable :: & + refs, & + extmsg type(tDict), pointer :: & phases, & phase, & @@ -181,7 +183,9 @@ module function plastic_dislotwin_init() result(myPlasticity) mech => phase%get_dict('mechanical') pl => mech%get_dict('plastic') - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(pl) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(pl,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs #if defined (__GFORTRAN__) prm%output = output_as1dString(pl) diff --git a/src/phase_mechanical_plastic_isotropic.f90 b/src/phase_mechanical_plastic_isotropic.f90 index 443c9c9aa..7a94e6d8b 100644 --- a/src/phase_mechanical_plastic_isotropic.f90 +++ b/src/phase_mechanical_plastic_isotropic.f90 @@ -54,7 +54,9 @@ module function plastic_isotropic_init() result(myPlasticity) sizeState, sizeDotState real(pReal) :: & xi_0 !< initial critical stress - character(len=:), allocatable :: extmsg + character(len=:), allocatable :: & + refs, & + extmsg type(tDict), pointer :: & phases, & phase, & @@ -86,7 +88,9 @@ module function plastic_isotropic_init() result(myPlasticity) mech => phase%get_dict('mechanical') pl => mech%get_dict('plastic') - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(pl) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(pl,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs #if defined (__GFORTRAN__) prm%output = output_as1dString(pl) diff --git a/src/phase_mechanical_plastic_kinehardening.f90 b/src/phase_mechanical_plastic_kinehardening.f90 index 16185130d..209dbc40b 100644 --- a/src/phase_mechanical_plastic_kinehardening.f90 +++ b/src/phase_mechanical_plastic_kinehardening.f90 @@ -77,7 +77,9 @@ module function plastic_kinehardening_init() result(myPlasticity) real(pReal), dimension(:), allocatable :: & xi_0, & !< initial resistance against plastic flow a !< non-Schmid coefficients - character(len=:), allocatable :: extmsg + character(len=:), allocatable :: & + refs, & + extmsg type(tDict), pointer :: & phases, & phase, & @@ -112,7 +114,9 @@ module function plastic_kinehardening_init() result(myPlasticity) mech => phase%get_dict('mechanical') pl => mech%get_dict('plastic') - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(pl) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(pl,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs #if defined (__GFORTRAN__) prm%output = output_as1dString(pl) diff --git a/src/phase_mechanical_plastic_nonlocal.f90 b/src/phase_mechanical_plastic_nonlocal.f90 index 8bdf7daeb..aeb647eeb 100644 --- a/src/phase_mechanical_plastic_nonlocal.f90 +++ b/src/phase_mechanical_plastic_nonlocal.f90 @@ -188,7 +188,9 @@ module function plastic_nonlocal_init() result(myPlasticity) s, t, l real(pReal), dimension(:), allocatable :: & a - character(len=:), allocatable :: extmsg + character(len=:), allocatable :: & + refs, & + extmsg type(tInitialParameters) :: & ini type(tDict), pointer :: & @@ -234,7 +236,9 @@ module function plastic_nonlocal_init() result(myPlasticity) mech => phase%get_dict('mechanical') pl => mech%get_dict('plastic') - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(pl) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(pl,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs #if defined (__GFORTRAN__) prm%output = output_as1dString(pl) diff --git a/src/phase_mechanical_plastic_phenopowerlaw.f90 b/src/phase_mechanical_plastic_phenopowerlaw.f90 index 9d6f78213..11556db78 100644 --- a/src/phase_mechanical_plastic_phenopowerlaw.f90 +++ b/src/phase_mechanical_plastic_phenopowerlaw.f90 @@ -91,7 +91,9 @@ module function plastic_phenopowerlaw_init() result(myPlasticity) xi_0_sl, & !< initial critical shear stress for slip xi_0_tw, & !< initial critical shear stress for twin a !< non-Schmid coefficients - character(len=:), allocatable :: extmsg + character(len=:), allocatable :: & + refs, & + extmsg type(tDict), pointer :: & phases, & phase, & @@ -122,7 +124,9 @@ module function plastic_phenopowerlaw_init() result(myPlasticity) mech => phase%get_dict('mechanical') pl => mech%get_dict('plastic') - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(pl) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(pl,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs #if defined (__GFORTRAN__) prm%output = output_as1dString(pl) diff --git a/src/phase_thermal.f90 b/src/phase_thermal.f90 index 2dc32560e..1371f3b7f 100644 --- a/src/phase_thermal.f90 +++ b/src/phase_thermal.f90 @@ -84,7 +84,7 @@ module subroutine thermal_init(phases) thermal type(tList), pointer :: & sources - + character(len=:), allocatable :: refs integer :: & ph, so, & Nmembers @@ -92,7 +92,6 @@ module subroutine thermal_init(phases) print'(/,1x,a)', '<<<+- phase:thermal init -+>>>' - allocate(current(phases%length)) allocate(thermalState(phases%length)) allocate(thermal_Nsources(phases%length),source = 0) @@ -107,7 +106,9 @@ module subroutine thermal_init(phases) ! ToDo: temperature dependency of K and C_p if (thermal%length > 0) then - print'(a,i0,a)', ' phase ',ph,' '//config_fetchReferences(thermal) + print'(/,1x,a,i0,a)', 'phase ',ph,': '//phases%key(ph) + refs = config_listReferences(thermal,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs param(ph)%C_p = thermal%get_asFloat('C_p') param(ph)%K(1,1) = thermal%get_asFloat('K_11') if (any(phase_lattice(ph) == ['hP','tI'])) param(ph)%K(3,3) = thermal%get_asFloat('K_33') diff --git a/src/phase_thermal_dissipation.f90 b/src/phase_thermal_dissipation.f90 index 9c9015922..66bde6808 100644 --- a/src/phase_thermal_dissipation.f90 +++ b/src/phase_thermal_dissipation.f90 @@ -34,6 +34,7 @@ module function dissipation_init(source_length) result(mySources) src class(tList), pointer :: & sources + character(len=:), allocatable :: refs integer :: so,Nmembers,ph @@ -56,7 +57,9 @@ module function dissipation_init(source_length) result(mySources) if (mySources(so,ph)) then associate(prm => param(ph)) src => sources%get_dict(so) - print'(a,i0,a,i0,a)', ' phase ',ph,' source ',so,' '//config_fetchReferences(src) + print'(1x,a,i0,a,i0)', 'phase ',ph,' source ',so + refs = config_listReferences(src,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs prm%kappa = src%get_asFloat('kappa') Nmembers = count(material_ID_phase == ph) diff --git a/src/phase_thermal_externalheat.f90 b/src/phase_thermal_externalheat.f90 index 4dad5248e..304171c10 100644 --- a/src/phase_thermal_externalheat.f90 +++ b/src/phase_thermal_externalheat.f90 @@ -36,6 +36,7 @@ module function externalheat_init(source_length) result(mySources) src type(tList), pointer :: & sources + character(len=:), allocatable :: refs integer :: so,Nmembers,ph @@ -60,7 +61,9 @@ module function externalheat_init(source_length) result(mySources) source_thermal_externalheat_offset(ph) = so associate(prm => param(ph)) src => sources%get_dict(so) - print'(a,i0,a,i0,a)', ' phase ',ph,' source ',so,' '//config_fetchReferences(src) + print'(1x,a,i0,a,i0)', 'phase ',ph,' source ',so + refs = config_listReferences(src,indent=3) + if (len(refs) > 0) print'(/,1x,a)', refs prm%f = table(src,'t','f')