From 94695f773ef495929a8ae961e9bfc2d1907cc932 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 28 Aug 2018 07:47:05 +0200 Subject: [PATCH 01/10] more verbose and works for arbitrary precision --- src/math.f90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/math.f90 b/src/math.f90 index 4179d6edc..440ee5303 100644 --- a/src/math.f90 +++ b/src/math.f90 @@ -36,13 +36,13 @@ module math real(pReal), dimension(6), parameter, private :: & nrmMandel = [& - 1.0_pReal, 1.0_pReal, 1.0_pReal,& - 1.414213562373095_pReal, 1.414213562373095_pReal, 1.414213562373095_pReal ] !< weighting for Mandel notation (forward) + 1.0_pReal, 1.0_pReal, 1.0_pReal, & + sqrt(2.0_pReal), sqrt(2.0_pReal), sqrt(2.0_pReal) ] !< weighting for Mandel notation (forward) real(pReal), dimension(6), parameter , public :: & invnrmMandel = [& - 1.0_pReal, 1.0_pReal, 1.0_pReal,& - 0.7071067811865476_pReal, 0.7071067811865476_pReal, 0.7071067811865476_pReal ] !< weighting for Mandel notation (backward) + 1.0_pReal, 1.0_pReal, 1.0_pReal, & + 1.0_pReal/sqrt(2.0_pReal), 1.0_pReal/sqrt(2.0_pReal), 1.0_pReal/sqrt(2.0_pReal) ] !< weighting for Mandel notation (backward) integer(pInt), dimension (2,6), parameter, private :: & mapVoigt = reshape([& From 42f8b0a06378bdd7ffe8b3a91961b55e6842166c Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Fri, 24 Aug 2018 12:42:30 +0200 Subject: [PATCH 02/10] labels of slip and twin systems for more self-explanatory output --- src/lattice.f90 | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/lattice.f90 b/src/lattice.f90 index 550b4c5c9..ffe1c239d 100644 --- a/src/lattice.f90 +++ b/src/lattice.f90 @@ -111,6 +111,9 @@ module lattice -1,-1, 0, -1, 1,-1 & ! D6 ],pReal),[ 3_pInt + 3_pInt,LATTICE_fcc_Nslip]) !< Slip system <110>{111} directions. Sorted according to Eisenlohr & Hantcherli + character(len=*), dimension(1), parameter, public :: LATTICE_FCC_SLIPFAMILY_NAME = & + ['<0 1 -1>{1 1 1}'] + real(pReal), dimension(3+3,LATTICE_fcc_Ntwin), parameter, private :: & LATTICE_fcc_systemTwin = reshape(real( [& -2, 1, 1, 1, 1, 1, & @@ -127,6 +130,9 @@ module lattice -1, 1, 2, -1, 1,-1 & ],pReal),[ 3_pInt + 3_pInt,LATTICE_fcc_Ntwin]) !< Twin system <112>{111} directions. Sorted according to Eisenlohr & Hantcherli + character(len=*), dimension(1), parameter, public :: LATTICE_FCC_TWINFAMILY_NAME = & + ['<-2 1 1>{1 1 1}'] + real(pReal), dimension(3+3,LATTICE_fcc_Ntrans), parameter, private :: & LATTICE_fccTohex_systemTrans = reshape(real( [& -2, 1, 1, 1, 1, 1, & @@ -433,6 +439,10 @@ module lattice ! 1,-1, 1, 3, 2,-1 & ],pReal),[ 3_pInt + 3_pInt ,LATTICE_bcc_Nslip]) + character(len=*), dimension(2), parameter, public :: LATTICE_BCC_SLIPFAMILY_NAME = & + ['<1 -1 1>{0 1 1}', & + '<1 -1 1>{2 1 1}'] + real(pReal), dimension(3+3,LATTICE_bcc_Ntwin), parameter, private :: & LATTICE_bcc_systemTwin = reshape(real([& ! Twin system <111>{112} @@ -450,6 +460,9 @@ module lattice 1, 1, 1, 1, 1,-2 & ],pReal),[ 3_pInt + 3_pInt,LATTICE_bcc_Ntwin]) + character(len=*), dimension(1), parameter, public :: LATTICE_BCC_TWINFAMILY_NAME = & + ['<1 1 1>{2 1 1}'] + real(pReal), dimension(LATTICE_bcc_Ntwin), parameter, private :: & LATTICE_bcc_shearTwin = 0.5_pReal*sqrt(2.0_pReal) @@ -618,6 +631,14 @@ module lattice 1, 1, -2, 3, -1, -1, 2, 2 & ],pReal),[ 4_pInt + 4_pInt,LATTICE_hex_Nslip]) !< slip systems for hex sorted by A. Alankar & P. Eisenlohr + character(len=*), dimension(6), parameter, public :: LATTICE_HEX_SLIPFAMILY_NAME = & + ['<1 1 . 1>{0 0 . 1} ', & + '<1 1 . 1>{1 0 . 0} ', & + '<1 0 . 0>{1 1 . 0} ', & + '<1 1 . 0>{-1 1 . 1} ', & + '<1 1 . 3>{-1 0 . 1} ', & + '<1 1 . 3>{-1 -1 . 2}'] + real(pReal), dimension(4+4,LATTICE_hex_Ntwin), parameter, private :: & LATTICE_hex_systemTwin = reshape(real([& ! Compression or Tension =f(twinning shear=f(c/a)) for each metal ! (according to Yoo 1981) @@ -650,6 +671,12 @@ module lattice 1, 1, -2, -3, 1, 1, -2, 2 & ],pReal),[ 4_pInt + 4_pInt ,LATTICE_hex_Ntwin]) !< twin systems for hex, order follows Prof. Tom Bieler's scheme; but numbering in data was restarted from 1 + character(len=*), dimension(4), parameter, public :: LATTICE_HEX_TWINFAMILY_NAME = & + ['<-1 0 . 1>{1 0 . 2} ', & + '<1 1 . 6>{-1 -1 . 1}', & + '<1 0 . -2>{1 0 . 1} ', & + '<1 1 . -3>{1 1 . 2} '] + integer(pInt), dimension(LATTICE_hex_Ntwin), parameter, private :: & LATTICE_hex_shearTwin = reshape(int( [& ! indicator to formula further below 1, & ! <-10.1>{10.2} @@ -926,6 +953,21 @@ module lattice 1, 1, 1, 1,-2, 1 & ],pReal),[ 3_pInt + 3_pInt,LATTICE_bct_Nslip]) !< slip systems for bct sorted by Bieler + character(len=*), dimension(13), parameter, public :: LATTICE_BCT_SLIPFAMILY_NAME = & + ['{1 0 0)<0 0 1] ', & + '{1 1 0)<0 0 1] ', & + '{1 0 0)<0 1 0] ', & + '{1 1 0)<1 -1 1]', & + '{1 1 0)<1 -1 0]', & + '{1 0 0)<0 1 1] ', & + '{0 0 1)<0 1 0] ', & + '{0 0 1)<1 1 0] ', & + '{0 1 1)<0 1 -1]', & + '{0 1 1)<1 -1 1]', & + '{0 1 1)<1 0 0] ', & + '{2 1 1)<0 1 -1]', & + '{2 1 1)<-1 1 1]'] + integer(pInt), dimension(LATTICE_bct_Nslip,LATTICE_bct_Nslip), parameter, public :: & LATTICE_bct_interactionSlipSlip = reshape(int( [& 1, 2, 3, 3, 7, 7, 13, 13, 13, 13, 21, 21, 31, 31, 31, 31, 43, 43, 57, 57, 73, 73, 73, 73, 91, 91, 91, 91, 91, 91, 91, 91, 111, 111, 111, 111, 133,133,133,133,133,133,133,133, 157,157,157,157,157,157,157,157, & From 06e71563510cb12fc0e09cad559cf05e449ac5d6 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 28 Aug 2018 12:41:21 +0200 Subject: [PATCH 03/10] did not work for values <0 --- src/IO.f90 | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/IO.f90 b/src/IO.f90 index 0358785f6..8e1b9e80f 100644 --- a/src/IO.f90 +++ b/src/IO.f90 @@ -1363,12 +1363,16 @@ function IO_continuousIntValues(fileUnit,maxN,lookupName,lookupMap,lookupMaxN) pure function IO_intOut(intToPrint) implicit none - character(len=19) :: N_Digits ! maximum digits for 64 bit integer - character(len=40) :: IO_intOut integer(pInt), intent(in) :: intToPrint + character(len=41) :: IO_intOut + integer(pInt) :: N_digits + character(len=19) :: width ! maximum digits for 64 bit integer + character(len=20) :: min_width ! longer for negative values - write(N_Digits, '(I19.19)') 1_pInt + int(log10(real(intToPrint)),pInt) - IO_intOut = 'I'//trim(N_Digits)//'.'//trim(N_Digits) + N_digits = 1_pInt + int(log10(real(max(abs(intToPrint),1_pInt))),pInt) + write(width, '(I19.19)') N_digits + write(min_width, '(I20.20)') N_digits + merge(1_pInt,0_pInt,intToPrint < 0_pInt) + IO_intOut = 'I'//trim(min_width)//'.'//trim(width) end function IO_intOut From 8e9e9ca7526e9b682ba230920ea8a97ce3163725 Mon Sep 17 00:00:00 2001 From: Test User Date: Tue, 28 Aug 2018 13:19:47 +0200 Subject: [PATCH 04/10] [skip ci] updated version information after successful test of v2.0.2-476-g94695f77 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index fd2858d51..fa3390c07 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.2-474-g38fd517c +v2.0.2-476-g94695f77 From e643752180aa0bc3af2ad1e6c8a2a5a1b0affe75 Mon Sep 17 00:00:00 2001 From: Test User Date: Tue, 28 Aug 2018 23:13:17 +0200 Subject: [PATCH 05/10] [skip ci] updated version information after successful test of v2.0.2-478-g06e71563 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index fd2858d51..abe364a39 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.2-474-g38fd517c +v2.0.2-478-g06e71563 From 680c9e11d4403fb8db151d320284ad5bbe989065 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Wed, 29 Aug 2018 08:26:28 +0200 Subject: [PATCH 06/10] segmentation fault in cause of empty list --- src/config.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/config.f90 b/src/config.f90 index 837818756..d028eb897 100644 --- a/src/config.f90 +++ b/src/config.f90 @@ -351,7 +351,7 @@ end subroutine finalize !-------------------------------------------------------------------------------------------------- !> @brief cleans entire array of linke lists -!> @details called when variable goes out of scope. +!> @details called when variable goes out of scope and deallocates the list at each array entry !-------------------------------------------------------------------------------------------------- subroutine finalizeArray(this) @@ -361,11 +361,11 @@ subroutine finalizeArray(this) type(tPartitionedStringList), pointer :: temp ! bug in Gfortran? do i=1, size(this) - !if (associated(this(i)%next)) then + if (associated(this(i)%next)) then temp => this(i)%next !deallocate(this(i)) !internal compiler error: in gfc_build_final_call, at fortran/trans.c:975 deallocate(temp) - !endif + endif enddo end subroutine finalizeArray From 8fd3ac639668f6fb1f37e1d98dd5e8b103bc27e1 Mon Sep 17 00:00:00 2001 From: Test User Date: Wed, 29 Aug 2018 13:23:54 +0200 Subject: [PATCH 07/10] [skip ci] updated version information after successful test of v2.0.2-485-gf2acc148 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index fa3390c07..3caf58c39 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.2-476-g94695f77 +v2.0.2-485-gf2acc148 From cb6b876769cc25ccd728675a87bed81fc28ded48 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Thu, 30 Aug 2018 00:58:01 +0200 Subject: [PATCH 08/10] need test for non-schmid --- PRIVATE | 2 +- examples/ConfigFiles/Phase_Phenopowerlaw_BCC-Martensite.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/PRIVATE b/PRIVATE index a764ade04..fa02113fa 160000 --- a/PRIVATE +++ b/PRIVATE @@ -1 +1 @@ -Subproject commit a764ade044735df35fac93a5204446291ee29abc +Subproject commit fa02113fa7a0af3376648e4320318ec337fe79aa diff --git a/examples/ConfigFiles/Phase_Phenopowerlaw_BCC-Martensite.config b/examples/ConfigFiles/Phase_Phenopowerlaw_BCC-Martensite.config index 6e005f251..c86d516a9 100644 --- a/examples/ConfigFiles/Phase_Phenopowerlaw_BCC-Martensite.config +++ b/examples/ConfigFiles/Phase_Phenopowerlaw_BCC-Martensite.config @@ -18,5 +18,5 @@ tau0_slip 405.8e6 456.7e6 # per family tausat_slip 872.9e6 971.2e6 # per family h0_slipslip 563.0e9 interaction_slipslip 1 1 1.4 1.4 1.4 1.4 -w0_slip 2.0 +a_slip 2.0 (output) totalshear From bb57e7b4983fbfd91f5e3eafdca36402fc245500 Mon Sep 17 00:00:00 2001 From: Test User Date: Thu, 30 Aug 2018 04:43:22 +0200 Subject: [PATCH 09/10] [skip ci] updated version information after successful test of v2.0.2-488-ge0cecd4c --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 3caf58c39..01392f6fe 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.2-485-gf2acc148 +v2.0.2-488-ge0cecd4c From 29e55d20fb2f2f55377cdc50a76b0ef29bbd3c7e Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Thu, 30 Aug 2018 09:42:45 +0200 Subject: [PATCH 10/10] message better to understand and giving error instead of SIGSEGV --- src/IO.f90 | 4 +++- src/config.f90 | 24 +++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/IO.f90 b/src/IO.f90 index 8e1b9e80f..c97dcfa9c 100644 --- a/src/IO.f90 +++ b/src/IO.f90 @@ -1477,6 +1477,8 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg) msg = 'illegal texture transformation specified' case (160_pInt) msg = 'no entries in config part' + case (161_pInt) + msg = 'config part found twice' case (165_pInt) msg = 'homogenization configuration' case (170_pInt) @@ -1574,7 +1576,7 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg) case (845_pInt) msg = 'incomplete information in spectral mesh header' case (846_pInt) - msg = 'not a rotation defined for loadcase rotation' + msg = 'rotation for load case rotation ill-defined (R:RT != I)' case (847_pInt) msg = 'update of gamma operator not possible when pre-calculated' case (880_pInt) diff --git a/src/config.f90 b/src/config.f90 index d028eb897..4d5a76432 100644 --- a/src/config.f90 +++ b/src/config.f90 @@ -141,23 +141,23 @@ subroutine config_init() select case (trim(part)) case (trim(material_partPhase)) - call parseFile(line,phase_name,config_phase,fileContent(i+1:)) + call parseFile(phase_name,config_phase,line,fileContent(i+1:)) if (iand(myDebug,debug_levelBasic) /= 0_pInt) write(6,'(a)') ' Phase parsed'; flush(6) case (trim(material_partMicrostructure)) - call parseFile(line,microstructure_name,config_microstructure,fileContent(i+1:)) + call parseFile(microstructure_name,config_microstructure,line,fileContent(i+1:)) if (iand(myDebug,debug_levelBasic) /= 0_pInt) write(6,'(a)') ' Microstructure parsed'; flush(6) case (trim(material_partCrystallite)) - call parseFile(line,crystallite_name,config_crystallite,fileContent(i+1:)) + call parseFile(crystallite_name,config_crystallite,line,fileContent(i+1:)) if (iand(myDebug,debug_levelBasic) /= 0_pInt) write(6,'(a)') ' Crystallite parsed'; flush(6) case (trim(material_partHomogenization)) - call parseFile(line,homogenization_name,config_homogenization,fileContent(i+1:)) + call parseFile(homogenization_name,config_homogenization,line,fileContent(i+1:)) if (iand(myDebug,debug_levelBasic) /= 0_pInt) write(6,'(a)') ' Homogenization parsed'; flush(6) case (trim(material_partTexture)) - call parseFile(line,texture_name,config_texture,fileContent(i+1:)) + call parseFile(texture_name,config_texture,line,fileContent(i+1:)) if (iand(myDebug,debug_levelBasic) /= 0_pInt) write(6,'(a)') ' Texture parsed'; flush(6) end select @@ -180,7 +180,7 @@ end subroutine config_init !-------------------------------------------------------------------------------------------------- !> @brief parses the material.config file !-------------------------------------------------------------------------------------------------- -subroutine parseFile(line,sectionNames,part,& +subroutine parseFile(sectionNames,part,line, & fileContent) use prec, only: & pStringLen @@ -189,16 +189,18 @@ subroutine parseFile(line,sectionNames,part,& IO_getTag implicit none - character(len=pStringLen), intent(out) :: line - character(len=64), allocatable, dimension(:), intent(out) :: sectionNames - type(tPartitionedStringList), allocatable, dimension(:), intent(out) :: part - character(len=pStringLen), dimension(:), intent(in) :: fileContent + character(len=64), allocatable, dimension(:), intent(out) :: sectionNames + type(tPartitionedStringList), allocatable, dimension(:), intent(inout) :: part + character(len=pStringLen), intent(inout) :: line + character(len=pStringLen), dimension(:), intent(in) :: fileContent - integer(pInt), allocatable, dimension(:) :: partPosition ! position of [] tags + last line in section + integer(pInt), allocatable, dimension(:) :: partPosition ! position of [] tags + last line in section integer(pInt) :: i, j logical :: echo echo = .false. + + if (allocated(part)) call IO_error(161_pInt,ext_msg=trim(line)) allocate(partPosition(0)) do i = 1_pInt, size(fileContent)