improved error reporting
- tell user specifically whether number of systems is too high or too low - c/a sanity check can be done centrally
This commit is contained in:
parent
1d0584dcdf
commit
ef1899cfd0
|
@ -1459,7 +1459,7 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg)
|
||||||
case (143_pInt)
|
case (143_pInt)
|
||||||
msg = 'no value found for key'
|
msg = 'no value found for key'
|
||||||
case (144_pInt)
|
case (144_pInt)
|
||||||
msg = 'negative number of systems'
|
msg = 'negative number systems requested'
|
||||||
case (145_pInt)
|
case (145_pInt)
|
||||||
msg = 'too many systems requested'
|
msg = 'too many systems requested'
|
||||||
|
|
||||||
|
|
|
@ -2157,7 +2157,7 @@ function lattice_C66_twin(Ntwin,C66,structure,CoverA)
|
||||||
integer(pInt), dimension(:), intent(in) :: Ntwin !< number of active twin systems per family
|
integer(pInt), dimension(:), intent(in) :: Ntwin !< number of active twin systems per family
|
||||||
character(len=*), intent(in) :: structure !< lattice structure
|
character(len=*), intent(in) :: structure !< lattice structure
|
||||||
real(pReal), dimension(6,6), intent(in) :: C66
|
real(pReal), dimension(6,6), intent(in) :: C66
|
||||||
real(pReal), optional, intent(in) :: cOverA
|
real(pReal), intent(in) :: cOverA
|
||||||
real(pReal), dimension(6,6,sum(Ntwin)) :: lattice_C66_twin
|
real(pReal), dimension(6,6,sum(Ntwin)) :: lattice_C66_twin
|
||||||
|
|
||||||
real(pReal), dimension(3,3,sum(Ntwin)) :: coordinateSystem
|
real(pReal), dimension(3,3,sum(Ntwin)) :: coordinateSystem
|
||||||
|
@ -2167,11 +2167,10 @@ function lattice_C66_twin(Ntwin,C66,structure,CoverA)
|
||||||
|
|
||||||
select case(structure)
|
select case(structure)
|
||||||
case('fcc')
|
case('fcc')
|
||||||
coordinateSystem = buildCoordinateSystem(Ntwin,LATTICE_FCC_NSLIPSYSTEM,LATTICE_FCC_SYSTEMTWIN,structure)
|
coordinateSystem = buildCoordinateSystem(Ntwin,LATTICE_FCC_NSLIPSYSTEM,LATTICE_FCC_SYSTEMTWIN,structure,cOverA)
|
||||||
case('bcc')
|
case('bcc')
|
||||||
coordinateSystem = buildCoordinateSystem(Ntwin,LATTICE_BCC_NSLIPSYSTEM,LATTICE_BCC_SYSTEMTWIN,structure)
|
coordinateSystem = buildCoordinateSystem(Ntwin,LATTICE_BCC_NSLIPSYSTEM,LATTICE_BCC_SYSTEMTWIN,structure,cOverA)
|
||||||
case('hex','hexagonal') !ToDo: "No alias policy": long or short?
|
case('hex','hexagonal') !ToDo: "No alias policy": long or short?
|
||||||
if (.not. present(CoverA)) call IO_error(0_pInt)
|
|
||||||
coordinateSystem = buildCoordinateSystem(Ntwin,LATTICE_HEX_NSLIPSYSTEM,LATTICE_HEX_SYSTEMTWIN,'hex',cOverA)
|
coordinateSystem = buildCoordinateSystem(Ntwin,LATTICE_HEX_NSLIPSYSTEM,LATTICE_HEX_SYSTEMTWIN,'hex',cOverA)
|
||||||
case default
|
case default
|
||||||
call IO_error(130_pInt,ext_msg=trim(structure)//' (lattice_C66_twin)')
|
call IO_error(130_pInt,ext_msg=trim(structure)//' (lattice_C66_twin)')
|
||||||
|
@ -2326,9 +2325,9 @@ function lattice_nonSchmidMatrix(Nslip,nonSchmidCoefficients,sense) result(nonSc
|
||||||
integer(pInt) :: i
|
integer(pInt) :: i
|
||||||
|
|
||||||
if (abs(sense) /= 1_pInt) write(6,*) 'mist'
|
if (abs(sense) /= 1_pInt) write(6,*) 'mist'
|
||||||
coordinateSystem = buildCoordinateSystem(Nslip,LATTICE_BCC_NSLIPSYSTEM,LATTICE_BCC_SYSTEMSLIP,'bcc')
|
coordinateSystem = buildCoordinateSystem(Nslip,LATTICE_BCC_NSLIPSYSTEM,LATTICE_BCC_SYSTEMSLIP,'bcc',0.0_pReal)
|
||||||
coordinateSystem(1:3,1,1:sum(Nslip)) = coordinateSystem(1:3,1,1:sum(Nslip)) *real(sense,pReal)
|
coordinateSystem(1:3,1,1:sum(Nslip)) = coordinateSystem(1:3,1,1:sum(Nslip)) *real(sense,pReal)
|
||||||
nonSchmidMatrix = lattice_SchmidMatrix_slip(Nslip,'bcc')
|
nonSchmidMatrix = lattice_SchmidMatrix_slip(Nslip,'bcc',0.0_pReal)
|
||||||
|
|
||||||
do i = 1_pInt,sum(Nslip)
|
do i = 1_pInt,sum(Nslip)
|
||||||
direction = coordinateSystem(1:3,1,i)
|
direction = coordinateSystem(1:3,1,i)
|
||||||
|
@ -2570,8 +2569,7 @@ function lattice_SchmidMatrix_slip(Nslip,structure,cOverA) result(SchmidMatrix)
|
||||||
integer(pInt), dimension(:), intent(in) :: Nslip !< number of active slip systems per family
|
integer(pInt), dimension(:), intent(in) :: Nslip !< number of active slip systems per family
|
||||||
character(len=*), intent(in) :: structure !< lattice structure
|
character(len=*), intent(in) :: structure !< lattice structure
|
||||||
real(pReal), dimension(3,3,sum(Nslip)) :: SchmidMatrix
|
real(pReal), dimension(3,3,sum(Nslip)) :: SchmidMatrix
|
||||||
real(pReal), intent(in), optional :: &
|
real(pReal), intent(in) :: cOverA
|
||||||
cOverA
|
|
||||||
|
|
||||||
real(pReal), dimension(3,3,sum(Nslip)) :: coordinateSystem
|
real(pReal), dimension(3,3,sum(Nslip)) :: coordinateSystem
|
||||||
real(pReal), dimension(:,:), allocatable :: slipSystems
|
real(pReal), dimension(:,:), allocatable :: slipSystems
|
||||||
|
@ -2586,24 +2584,22 @@ function lattice_SchmidMatrix_slip(Nslip,structure,cOverA) result(SchmidMatrix)
|
||||||
NslipMax = LATTICE_BCC_NSLIPSYSTEM
|
NslipMax = LATTICE_BCC_NSLIPSYSTEM
|
||||||
slipSystems = LATTICE_BCC_SYSTEMSLIP
|
slipSystems = LATTICE_BCC_SYSTEMSLIP
|
||||||
case('hex','hexagonal') !ToDo: "No alias policy": long or short?
|
case('hex','hexagonal') !ToDo: "No alias policy": long or short?
|
||||||
if (.not. present(CoverA)) call IO_error(0_pInt)
|
|
||||||
NslipMax = LATTICE_HEX_NSLIPSYSTEM
|
NslipMax = LATTICE_HEX_NSLIPSYSTEM
|
||||||
slipSystems = LATTICE_HEX_SYSTEMSLIP
|
slipSystems = LATTICE_HEX_SYSTEMSLIP
|
||||||
case('bct')
|
case('bct')
|
||||||
if (.not. present(CoverA)) call IO_error(0_pInt)
|
|
||||||
NslipMax = LATTICE_BCT_NSLIPSYSTEM
|
NslipMax = LATTICE_BCT_NSLIPSYSTEM
|
||||||
slipSystems = LATTICE_BCT_SYSTEMSLIP
|
slipSystems = LATTICE_BCT_SYSTEMSLIP
|
||||||
case default
|
case default
|
||||||
call IO_error(130_pInt,ext_msg=trim(structure)//' (lattice_SchmidMatrix_slip)')
|
call IO_error(130_pInt,ext_msg=trim(structure)//' (lattice_SchmidMatrix_slip)')
|
||||||
end select
|
end select
|
||||||
|
|
||||||
if (any(NslipMax(1:size(Nslip)) - Nslip < 0_pInt) .or. any(Nslip < 0_pInt)) &
|
if (any(NslipMax(1:size(Nslip)) - Nslip < 0_pInt)) &
|
||||||
call IO_error(145_pInt,ext_msg='Nslip '//trim(structure))
|
call IO_error(145_pInt,ext_msg='Nslip '//trim(structure))
|
||||||
if (present(cOverA)) then
|
if (any(Nslip < 0_pInt)) &
|
||||||
coordinateSystem = buildCoordinateSystem(Nslip,NslipMax,slipSystems,structure,cOverA)
|
call IO_error(144_pInt,ext_msg='Nslip '//trim(structure))
|
||||||
else
|
|
||||||
coordinateSystem = buildCoordinateSystem(Nslip,NslipMax,slipSystems,structure)
|
coordinateSystem = buildCoordinateSystem(Nslip,NslipMax,slipSystems,structure,cOverA)
|
||||||
endif
|
|
||||||
do i = 1, sum(Nslip)
|
do i = 1, sum(Nslip)
|
||||||
SchmidMatrix(1:3,1:3,i) = math_tensorproduct33(coordinateSystem(1:3,1,i),coordinateSystem(1:3,2,i))
|
SchmidMatrix(1:3,1:3,i) = math_tensorproduct33(coordinateSystem(1:3,1,i),coordinateSystem(1:3,2,i))
|
||||||
if (abs(math_trace33(SchmidMatrix(1:3,1:3,i))) > tol_math_check) &
|
if (abs(math_trace33(SchmidMatrix(1:3,1:3,i))) > tol_math_check) &
|
||||||
|
@ -2629,8 +2625,7 @@ function lattice_SchmidMatrix_twin(Ntwin,structure,cOverA) result(SchmidMatrix)
|
||||||
integer(pInt), dimension(:), intent(in) :: Ntwin !< number of active twin systems per family
|
integer(pInt), dimension(:), intent(in) :: Ntwin !< number of active twin systems per family
|
||||||
character(len=*), intent(in) :: structure !< lattice structure
|
character(len=*), intent(in) :: structure !< lattice structure
|
||||||
real(pReal), dimension(3,3,sum(Ntwin)) :: SchmidMatrix
|
real(pReal), dimension(3,3,sum(Ntwin)) :: SchmidMatrix
|
||||||
real(pReal), intent(in), optional :: &
|
real(pReal), intent(in) :: cOverA
|
||||||
cOverA
|
|
||||||
|
|
||||||
real(pReal), dimension(3,3,sum(Ntwin)) :: coordinateSystem
|
real(pReal), dimension(3,3,sum(Ntwin)) :: coordinateSystem
|
||||||
real(pReal), dimension(:,:), allocatable :: twinSystems
|
real(pReal), dimension(:,:), allocatable :: twinSystems
|
||||||
|
@ -2645,21 +2640,19 @@ function lattice_SchmidMatrix_twin(Ntwin,structure,cOverA) result(SchmidMatrix)
|
||||||
NtwinMax = LATTICE_BCC_NTWINSYSTEM
|
NtwinMax = LATTICE_BCC_NTWINSYSTEM
|
||||||
twinSystems = LATTICE_BCC_SYSTEMTWIN
|
twinSystems = LATTICE_BCC_SYSTEMTWIN
|
||||||
case('hex','hexagonal') !ToDo: "No alias policy": long or short?
|
case('hex','hexagonal') !ToDo: "No alias policy": long or short?
|
||||||
if (.not. present(CoverA)) call IO_error(0_pInt)
|
|
||||||
NtwinMax = LATTICE_HEX_NTWINSYSTEM
|
NtwinMax = LATTICE_HEX_NTWINSYSTEM
|
||||||
twinSystems = LATTICE_HEX_SYSTEMTWIN
|
twinSystems = LATTICE_HEX_SYSTEMTWIN
|
||||||
case default
|
case default
|
||||||
call IO_error(130_pInt,ext_msg=trim(structure)//' (lattice_SchmidMatrix_twin)')
|
call IO_error(130_pInt,ext_msg=trim(structure)//' (lattice_SchmidMatrix_twin)')
|
||||||
end select
|
end select
|
||||||
|
|
||||||
if (any(NtwinMax(1:size(Ntwin)) - Ntwin < 0_pInt) .or. any(Ntwin < 0_pInt)) &
|
if (any(NtwinMax(1:size(Ntwin)) - Ntwin < 0_pInt)) &
|
||||||
call IO_error(145_pInt,ext_msg='Ntwin '//trim(structure))
|
call IO_error(145_pInt,ext_msg='Ntwin '//trim(structure))
|
||||||
|
if (any(Ntwin < 0_pInt)) &
|
||||||
|
call IO_error(144_pInt,ext_msg='Ntwin '//trim(structure))
|
||||||
|
|
||||||
if (present(cOverA)) then
|
coordinateSystem = buildCoordinateSystem(Ntwin,NtwinMax,twinSystems,structure,cOverA)
|
||||||
coordinateSystem = buildCoordinateSystem(Ntwin,NtwinMax,twinSystems,structure,cOverA)
|
|
||||||
else
|
|
||||||
coordinateSystem = buildCoordinateSystem(Ntwin,NtwinMax,twinSystems,structure)
|
|
||||||
endif
|
|
||||||
do i = 1, sum(Ntwin)
|
do i = 1, sum(Ntwin)
|
||||||
SchmidMatrix(1:3,1:3,i) = math_tensorproduct33(coordinateSystem(1:3,1,i),coordinateSystem(1:3,2,i))
|
SchmidMatrix(1:3,1:3,i) = math_tensorproduct33(coordinateSystem(1:3,1,i),coordinateSystem(1:3,2,i))
|
||||||
if (abs(math_trace33(SchmidMatrix(1:3,1:3,i))) > tol_math_check) &
|
if (abs(math_trace33(SchmidMatrix(1:3,1:3,i))) > tol_math_check) &
|
||||||
|
@ -2720,7 +2713,7 @@ function buildCoordinateSystem(active,maximum,system,structure,cOverA)
|
||||||
system
|
system
|
||||||
character(len=*), intent(in) :: &
|
character(len=*), intent(in) :: &
|
||||||
structure !< lattice structure
|
structure !< lattice structure
|
||||||
real(pReal), intent(in), optional :: &
|
real(pReal), intent(in) :: &
|
||||||
cOverA
|
cOverA
|
||||||
real(pReal), dimension(3,3,sum(active)) :: &
|
real(pReal), dimension(3,3,sum(active)) :: &
|
||||||
buildCoordinateSystem
|
buildCoordinateSystem
|
||||||
|
@ -2746,6 +2739,7 @@ function buildCoordinateSystem(active,maximum,system,structure,cOverA)
|
||||||
normal = system(4:6,j)
|
normal = system(4:6,j)
|
||||||
|
|
||||||
case ('hex')
|
case ('hex')
|
||||||
|
!ToDo: check c/a ratio
|
||||||
! direction [uvtw]->[3u/2 (u+2v)*sqrt(3)/2 w*(c/a)])
|
! direction [uvtw]->[3u/2 (u+2v)*sqrt(3)/2 w*(c/a)])
|
||||||
direction = [ system(1,j)*1.5_pReal, &
|
direction = [ system(1,j)*1.5_pReal, &
|
||||||
(system(1,j)+2.0_pReal*system(2,j))*sqrt(0.75_pReal), &
|
(system(1,j)+2.0_pReal*system(2,j))*sqrt(0.75_pReal), &
|
||||||
|
@ -2757,6 +2751,7 @@ function buildCoordinateSystem(active,maximum,system,structure,cOverA)
|
||||||
system(8,j)/CoverA ]
|
system(8,j)/CoverA ]
|
||||||
|
|
||||||
case ('bct')
|
case ('bct')
|
||||||
|
!ToDo: check c/a ratio
|
||||||
direction = [system(1:2,j),system(3,i)*CoverA]
|
direction = [system(1:2,j),system(3,i)*CoverA]
|
||||||
normal = [system(4:5,j),system(6,i)/CoverA]
|
normal = [system(4:5,j),system(6,i)/CoverA]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue