2012-08-25 17:16:36 +05:30
|
|
|
!--------------------------------------------------------------------------------------------------
|
|
|
|
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
|
|
|
|
!> Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
2019-06-15 19:18:47 +05:30
|
|
|
!> @brief holds some global variables and gets extra information for commercial FEM
|
2012-08-25 17:16:36 +05:30
|
|
|
!--------------------------------------------------------------------------------------------------
|
2012-03-09 01:55:28 +05:30
|
|
|
module FEsolving
|
2019-06-11 19:46:10 +05:30
|
|
|
use prec
|
|
|
|
use IO
|
|
|
|
use DAMASK_interface
|
|
|
|
|
|
|
|
implicit none
|
|
|
|
private
|
2019-06-15 19:18:47 +05:30
|
|
|
|
2019-10-24 01:39:11 +05:30
|
|
|
logical, public :: &
|
2019-06-11 19:46:10 +05:30
|
|
|
terminallyIll = .false. !< at least one material point is terminally ill
|
2012-03-20 23:31:31 +05:30
|
|
|
|
2019-06-11 19:46:10 +05:30
|
|
|
integer, dimension(:,:), allocatable, public :: &
|
|
|
|
FEsolving_execIP !< for ping-pong scheme always range to max IP, otherwise one specific IP
|
2019-06-15 19:18:47 +05:30
|
|
|
integer, dimension(2), public :: &
|
2019-06-11 19:46:10 +05:30
|
|
|
FEsolving_execElem !< for ping-pong scheme always whole range, otherwise one specific element
|
|
|
|
|
2019-06-15 19:18:47 +05:30
|
|
|
#if defined(Marc4DAMASK) || defined(Abaqus)
|
|
|
|
logical, public, protected :: &
|
2019-10-24 17:26:48 +05:30
|
|
|
symmetricSolver = .false. !< use a symmetric FEM solver
|
2019-06-11 19:46:10 +05:30
|
|
|
logical, dimension(:,:), allocatable, public :: &
|
|
|
|
calcMode !< do calculation or simply collect when using ping pong scheme
|
2012-03-21 23:34:52 +05:30
|
|
|
|
2019-06-11 19:46:10 +05:30
|
|
|
public :: FE_init
|
2019-06-15 19:18:47 +05:30
|
|
|
#endif
|
2008-03-15 03:02:57 +05:30
|
|
|
|
2012-03-09 01:55:28 +05:30
|
|
|
contains
|
2009-01-20 00:40:58 +05:30
|
|
|
|
2019-06-15 19:18:47 +05:30
|
|
|
#if defined(Marc4DAMASK) || defined(Abaqus)
|
2012-08-25 17:16:36 +05:30
|
|
|
!--------------------------------------------------------------------------------------------------
|
2019-10-24 01:39:11 +05:30
|
|
|
!> @brief determine whether a symmetric solver is used
|
2012-08-25 17:16:36 +05:30
|
|
|
!--------------------------------------------------------------------------------------------------
|
2012-03-09 01:55:28 +05:30
|
|
|
subroutine FE_init
|
2013-02-11 15:14:17 +05:30
|
|
|
|
2019-06-11 19:46:10 +05:30
|
|
|
write(6,'(/,a)') ' <<<+- FEsolving init -+>>>'
|
2019-10-24 17:26:48 +05:30
|
|
|
|
|
|
|
#if defined(Marc4DAMASK)
|
|
|
|
block
|
|
|
|
character(len=pStringLen) :: line
|
2020-01-22 13:25:39 +05:30
|
|
|
integer :: myStat,fileUnit
|
2019-10-24 17:26:48 +05:30
|
|
|
integer, allocatable, dimension(:) :: chunkPos
|
2020-01-23 15:51:42 +05:30
|
|
|
open(newunit=fileUnit, file=getSolverJobName()//INPUTFILEEXTENSION, &
|
2020-01-22 13:25:39 +05:30
|
|
|
status='old', position='rewind', action='read',iostat=myStat)
|
2019-10-24 17:26:48 +05:30
|
|
|
do
|
2020-01-22 13:25:39 +05:30
|
|
|
read (fileUnit,'(A)',END=100) line
|
2020-01-23 18:19:12 +05:30
|
|
|
if(index(trim(lc(line)),'solver') == 1) then
|
2020-01-22 13:25:39 +05:30
|
|
|
read (fileUnit,'(A)',END=100) line ! next line
|
2019-06-11 19:46:10 +05:30
|
|
|
chunkPos = IO_stringPos(line)
|
|
|
|
symmetricSolver = (IO_intValue(line,chunkPos,2) /= 1)
|
2019-10-24 17:26:48 +05:30
|
|
|
endif
|
|
|
|
enddo
|
2020-01-22 13:25:39 +05:30
|
|
|
100 close(fileUnit)
|
2019-10-24 17:26:48 +05:30
|
|
|
end block
|
2020-01-23 18:19:12 +05:30
|
|
|
contains
|
|
|
|
|
|
|
|
!--------------------------------------------------------------------------------------------------
|
|
|
|
!> @brief changes characters in string to lower case
|
|
|
|
!> @details copied from IO_lc
|
|
|
|
!--------------------------------------------------------------------------------------------------
|
|
|
|
function lc(string)
|
|
|
|
|
|
|
|
character(len=*), intent(in) :: string !< string to convert
|
|
|
|
character(len=len(string)) :: lc
|
|
|
|
|
|
|
|
character(26), parameter :: LOWER = 'abcdefghijklmnopqrstuvwxyz'
|
|
|
|
character(26), parameter :: UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
|
|
|
|
|
|
integer :: i,n
|
|
|
|
|
|
|
|
do i=1,len(string)
|
|
|
|
lc(i:i) = string(i:i)
|
|
|
|
n = index(UPPER,lc(i:i))
|
|
|
|
if (n/=0) lc(i:i) = LOWER(n:n)
|
|
|
|
enddo
|
|
|
|
end function lc
|
|
|
|
|
2019-10-24 17:26:48 +05:30
|
|
|
#endif
|
2012-06-15 21:40:21 +05:30
|
|
|
|
2012-03-09 01:55:28 +05:30
|
|
|
end subroutine FE_init
|
2019-06-15 19:18:47 +05:30
|
|
|
#endif
|
2008-03-15 03:02:57 +05:30
|
|
|
|
2019-10-24 17:26:48 +05:30
|
|
|
|
2012-03-09 01:55:28 +05:30
|
|
|
end module FEsolving
|