define functions where needed
only use solver specific element names
This commit is contained in:
parent
346561beed
commit
beb0ca01eb
143
src/IO.f90
143
src/IO.f90
|
@ -57,19 +57,11 @@ module IO
|
|||
public :: &
|
||||
IO_open_inputFile, &
|
||||
IO_open_logFile
|
||||
#endif
|
||||
#ifdef Abaqus
|
||||
public :: &
|
||||
IO_abaqus_hasNoPart
|
||||
#endif
|
||||
private :: &
|
||||
IO_fixedFloatValue, &
|
||||
IO_verifyFloatValue, &
|
||||
IO_verifyIntValue
|
||||
#ifdef Abaqus
|
||||
private :: &
|
||||
abaqus_assembleInputFile
|
||||
#endif
|
||||
|
||||
contains
|
||||
|
||||
|
@ -385,6 +377,59 @@ subroutine IO_open_inputFile(fileUnit,modelName)
|
|||
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
||||
if (.not.abaqus_assembleInputFile(fileUnit,fileUnit+1_pInt)) call IO_error(103_pInt) ! strip comments and concatenate any "include"s
|
||||
close(fileUnit+1_pInt)
|
||||
|
||||
contains
|
||||
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
!> @brief create a new input file for abaqus simulations by removing all comment lines and
|
||||
!> including "include"s
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
recursive function abaqus_assembleInputFile(unit1,unit2) result(createSuccess)
|
||||
|
||||
implicit none
|
||||
integer(pInt), intent(in) :: unit1, &
|
||||
unit2
|
||||
|
||||
|
||||
integer(pInt), allocatable, dimension(:) :: chunkPos
|
||||
character(len=65536) :: line,fname
|
||||
logical :: createSuccess,fexist
|
||||
|
||||
|
||||
do
|
||||
read(unit2,'(A65536)',END=220) line
|
||||
chunkPos = IO_stringPos(line)
|
||||
|
||||
if (IO_lc(IO_StringValue(line,chunkPos,1_pInt))=='*include') then
|
||||
fname = trim(line(9+scan(line(9:),'='):))
|
||||
inquire(file=fname, exist=fexist)
|
||||
if (.not.(fexist)) then
|
||||
!$OMP CRITICAL (write2out)
|
||||
write(6,*)'ERROR: file does not exist error in abaqus_assembleInputFile'
|
||||
write(6,*)'filename: ', trim(fname)
|
||||
!$OMP END CRITICAL (write2out)
|
||||
createSuccess = .false.
|
||||
return
|
||||
endif
|
||||
open(unit2+1,err=200,status='old',file=fname)
|
||||
if (abaqus_assembleInputFile(unit1,unit2+1_pInt)) then
|
||||
createSuccess=.true.
|
||||
close(unit2+1)
|
||||
else
|
||||
createSuccess=.false.
|
||||
return
|
||||
endif
|
||||
else if (line(1:2) /= '**' .OR. line(1:8)=='**damask') then
|
||||
write(unit1,'(A)') trim(line)
|
||||
endif
|
||||
enddo
|
||||
|
||||
220 createSuccess = .true.
|
||||
return
|
||||
|
||||
200 createSuccess =.false.
|
||||
|
||||
end function abaqus_assembleInputFile
|
||||
#endif
|
||||
#ifdef Marc4DAMASK
|
||||
path = trim(modelName)//inputFileExtension
|
||||
|
@ -556,35 +601,6 @@ subroutine IO_read_intFile(fileUnit,ext,modelName,recMultiplier)
|
|||
end subroutine IO_read_intFile
|
||||
|
||||
|
||||
#ifdef Abaqus
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
!> @brief check if the input file for Abaqus contains part info
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
logical function IO_abaqus_hasNoPart(fileUnit)
|
||||
|
||||
implicit none
|
||||
integer(pInt), intent(in) :: fileUnit
|
||||
|
||||
integer(pInt), allocatable, dimension(:) :: chunkPos
|
||||
character(len=65536) :: line
|
||||
|
||||
IO_abaqus_hasNoPart = .true.
|
||||
|
||||
610 FORMAT(A65536)
|
||||
rewind(fileUnit)
|
||||
do
|
||||
read(fileUnit,610,END=620) line
|
||||
chunkPos = IO_stringPos(line)
|
||||
if (IO_lc(IO_stringValue(line,chunkPos,1_pInt)) == '*part' ) then
|
||||
IO_abaqus_hasNoPart = .false.
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
620 end function IO_abaqus_hasNoPart
|
||||
#endif
|
||||
|
||||
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
!> @brief identifies strings without content
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
|
@ -1598,57 +1614,4 @@ real(pReal) function IO_verifyFloatValue (string,validChars,myName)
|
|||
|
||||
end function IO_verifyFloatValue
|
||||
|
||||
#ifdef Abaqus
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
!> @brief create a new input file for abaqus simulations by removing all comment lines and
|
||||
!> including "include"s
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
recursive function abaqus_assembleInputFile(unit1,unit2) result(createSuccess)
|
||||
|
||||
implicit none
|
||||
integer(pInt), intent(in) :: unit1, &
|
||||
unit2
|
||||
|
||||
|
||||
integer(pInt), allocatable, dimension(:) :: chunkPos
|
||||
character(len=65536) :: line,fname
|
||||
logical :: createSuccess,fexist
|
||||
|
||||
|
||||
do
|
||||
read(unit2,'(A65536)',END=220) line
|
||||
chunkPos = IO_stringPos(line)
|
||||
|
||||
if (IO_lc(IO_StringValue(line,chunkPos,1_pInt))=='*include') then
|
||||
fname = trim(line(9+scan(line(9:),'='):))
|
||||
inquire(file=fname, exist=fexist)
|
||||
if (.not.(fexist)) then
|
||||
!$OMP CRITICAL (write2out)
|
||||
write(6,*)'ERROR: file does not exist error in abaqus_assembleInputFile'
|
||||
write(6,*)'filename: ', trim(fname)
|
||||
!$OMP END CRITICAL (write2out)
|
||||
createSuccess = .false.
|
||||
return
|
||||
endif
|
||||
open(unit2+1,err=200,status='old',file=fname)
|
||||
if (abaqus_assembleInputFile(unit1,unit2+1_pInt)) then
|
||||
createSuccess=.true.
|
||||
close(unit2+1)
|
||||
else
|
||||
createSuccess=.false.
|
||||
return
|
||||
endif
|
||||
else if (line(1:2) /= '**' .OR. line(1:8)=='**damask') then
|
||||
write(unit1,'(A)') trim(line)
|
||||
endif
|
||||
enddo
|
||||
|
||||
220 createSuccess = .true.
|
||||
return
|
||||
|
||||
200 createSuccess =.false.
|
||||
|
||||
end function abaqus_assembleInputFile
|
||||
#endif
|
||||
|
||||
end module IO
|
||||
|
|
|
@ -434,7 +434,6 @@ subroutine mesh_init(ip,el)
|
|||
#endif
|
||||
use DAMASK_interface
|
||||
use IO, only: &
|
||||
IO_abaqus_hasNoPart, &
|
||||
IO_open_InputFile, &
|
||||
IO_timeStamp, &
|
||||
IO_error, &
|
||||
|
@ -471,7 +470,7 @@ subroutine mesh_init(ip,el)
|
|||
|
||||
call IO_open_inputFile(FILEUNIT,modelName) ! parse info from input file...
|
||||
if (myDebug) write(6,'(a)') ' Opened input file'; flush(6)
|
||||
noPart = IO_abaqus_hasNoPart(FILEUNIT)
|
||||
noPart = hasNoPart(FILEUNIT)
|
||||
call mesh_abaqus_count_nodesAndElements(FILEUNIT)
|
||||
if (myDebug) write(6,'(a)') ' Counted nodes/elements'; flush(6)
|
||||
call mesh_abaqus_count_elementSets(FILEUNIT)
|
||||
|
@ -542,6 +541,33 @@ subroutine mesh_init(ip,el)
|
|||
mesh_CPnodeID = mesh_element(5:4+mesh_NipsPerElem,:)
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
contains
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
!> @brief check if the input file for Abaqus contains part info
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
logical function hasNoPart(fileUnit)
|
||||
|
||||
implicit none
|
||||
integer(pInt), intent(in) :: fileUnit
|
||||
|
||||
integer(pInt), allocatable, dimension(:) :: chunkPos
|
||||
character(len=65536) :: line
|
||||
|
||||
hasNoPart = .true.
|
||||
|
||||
610 FORMAT(A65536)
|
||||
rewind(fileUnit)
|
||||
do
|
||||
read(fileUnit,610,END=620) line
|
||||
chunkPos = IO_stringPos(line)
|
||||
if (IO_lc(IO_stringValue(line,chunkPos,1_pInt)) == '*part' ) then
|
||||
hasNoPart = .false.
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
620 end function hasNoPart
|
||||
|
||||
end subroutine mesh_init
|
||||
|
||||
|
||||
|
@ -1497,7 +1523,6 @@ subroutine mesh_abaqus_build_elements(fileUnit)
|
|||
|
||||
use IO, only: IO_lc, &
|
||||
IO_stringValue, &
|
||||
IO_skipChunks, &
|
||||
IO_stringPos, &
|
||||
IO_intValue, &
|
||||
IO_extractValue, &
|
||||
|
@ -2173,49 +2198,28 @@ integer(pInt) function FE_mapElemtype(what)
|
|||
character(len=*), intent(in) :: what
|
||||
|
||||
select case (IO_lc(what))
|
||||
case ( '6')
|
||||
FE_mapElemtype = 1_pInt ! Two-dimensional Plane Strain Triangle
|
||||
case ( '155', &
|
||||
'125', &
|
||||
'128')
|
||||
FE_mapElemtype = 2_pInt ! Two-dimensional Plane Strain triangle (155: cubic shape function, 125/128: second order isoparametric)
|
||||
case ( '11', &
|
||||
'cpe4', &
|
||||
case ( 'cpe4', &
|
||||
'cpe4t')
|
||||
FE_mapElemtype = 3_pInt ! Arbitrary Quadrilateral Plane-strain
|
||||
case ( '27', &
|
||||
'cpe8', &
|
||||
case ( 'cpe8', &
|
||||
'cpe8t')
|
||||
FE_mapElemtype = 4_pInt ! Plane Strain, Eight-node Distorted Quadrilateral
|
||||
case ( '54')
|
||||
FE_mapElemtype = 5_pInt ! Plane Strain, Eight-node Distorted Quadrilateral with reduced integration
|
||||
case ( '134', &
|
||||
'c3d4', &
|
||||
case ( 'c3d4', &
|
||||
'c3d4t')
|
||||
FE_mapElemtype = 6_pInt ! Three-dimensional Four-node Tetrahedron
|
||||
case ( '157')
|
||||
FE_mapElemtype = 7_pInt ! Three-dimensional, Low-order, Tetrahedron, Herrmann Formulations
|
||||
case ( '127')
|
||||
FE_mapElemtype = 8_pInt ! Three-dimensional Ten-node Tetrahedron
|
||||
case ( '136', &
|
||||
'c3d6', &
|
||||
case ( 'c3d6', &
|
||||
'c3d6t')
|
||||
FE_mapElemtype = 9_pInt ! Three-dimensional Arbitrarily Distorted Pentahedral
|
||||
case ( '117', &
|
||||
'123', &
|
||||
'c3d8r', &
|
||||
case ( 'c3d8r', &
|
||||
'c3d8rt')
|
||||
FE_mapElemtype = 10_pInt ! Three-dimensional Arbitrarily Distorted linear hexahedral with reduced integration
|
||||
case ( '7', &
|
||||
'c3d8', &
|
||||
case ( 'c3d8', &
|
||||
'c3d8t')
|
||||
FE_mapElemtype = 11_pInt ! Three-dimensional Arbitrarily Distorted Brick
|
||||
case ( '57', &
|
||||
'c3d20r', &
|
||||
case ( 'c3d20r', &
|
||||
'c3d20rt')
|
||||
FE_mapElemtype = 12_pInt ! Three-dimensional Arbitrarily Distorted quad hexahedral with reduced integration
|
||||
case ( '21', &
|
||||
'c3d20', &
|
||||
case ( 'c3d20', &
|
||||
'c3d20t')
|
||||
FE_mapElemtype = 13_pInt ! Three-dimensional Arbitrarily Distorted quadratic hexahedral
|
||||
case default
|
||||
|
|
|
@ -1909,44 +1909,28 @@ integer(pInt) function FE_mapElemtype(what)
|
|||
'125', &
|
||||
'128')
|
||||
FE_mapElemtype = 2_pInt ! Two-dimensional Plane Strain triangle (155: cubic shape function, 125/128: second order isoparametric)
|
||||
case ( '11', &
|
||||
'cpe4', &
|
||||
'cpe4t')
|
||||
case ( '11')
|
||||
FE_mapElemtype = 3_pInt ! Arbitrary Quadrilateral Plane-strain
|
||||
case ( '27', &
|
||||
'cpe8', &
|
||||
'cpe8t')
|
||||
case ( '27')
|
||||
FE_mapElemtype = 4_pInt ! Plane Strain, Eight-node Distorted Quadrilateral
|
||||
case ( '54')
|
||||
FE_mapElemtype = 5_pInt ! Plane Strain, Eight-node Distorted Quadrilateral with reduced integration
|
||||
case ( '134', &
|
||||
'c3d4', &
|
||||
'c3d4t')
|
||||
case ( '134')
|
||||
FE_mapElemtype = 6_pInt ! Three-dimensional Four-node Tetrahedron
|
||||
case ( '157')
|
||||
FE_mapElemtype = 7_pInt ! Three-dimensional, Low-order, Tetrahedron, Herrmann Formulations
|
||||
case ( '127')
|
||||
FE_mapElemtype = 8_pInt ! Three-dimensional Ten-node Tetrahedron
|
||||
case ( '136', &
|
||||
'c3d6', &
|
||||
'c3d6t')
|
||||
case ( '136')
|
||||
FE_mapElemtype = 9_pInt ! Three-dimensional Arbitrarily Distorted Pentahedral
|
||||
case ( '117', &
|
||||
'123', &
|
||||
'c3d8r', &
|
||||
'c3d8rt')
|
||||
'123')
|
||||
FE_mapElemtype = 10_pInt ! Three-dimensional Arbitrarily Distorted linear hexahedral with reduced integration
|
||||
case ( '7', &
|
||||
'c3d8', &
|
||||
'c3d8t')
|
||||
case ( '7')
|
||||
FE_mapElemtype = 11_pInt ! Three-dimensional Arbitrarily Distorted Brick
|
||||
case ( '57', &
|
||||
'c3d20r', &
|
||||
'c3d20rt')
|
||||
case ( '57')
|
||||
FE_mapElemtype = 12_pInt ! Three-dimensional Arbitrarily Distorted quad hexahedral with reduced integration
|
||||
case ( '21', &
|
||||
'c3d20', &
|
||||
'c3d20t')
|
||||
case ( '21')
|
||||
FE_mapElemtype = 13_pInt ! Three-dimensional Arbitrarily Distorted quadratic hexahedral
|
||||
case default
|
||||
call IO_error(error_ID=190_pInt,ext_msg=IO_lc(what))
|
||||
|
@ -2807,7 +2791,3 @@ end function mesh_get_nodeAtIP
|
|||
|
||||
|
||||
end module mesh
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue