Ability to define loglinear time increments by using 'logincs' or 'logsteps' instead of 'incs' in loadcase file is added.
This commit is contained in:
parent
0add06bdfe
commit
e889b69bec
|
@ -69,14 +69,15 @@ program DAMASK_spectral
|
|||
logical, dimension(9) :: bc_maskvector
|
||||
|
||||
! variables storing information from loadcase file
|
||||
real(pReal) timeinc
|
||||
real(pReal) time, time0, timeinc ! elapsed time, begin of interval, time interval
|
||||
real(pReal), dimension (:,:,:), allocatable :: bc_velocityGrad, &
|
||||
bc_stress ! velocity gradient and stress BC
|
||||
real(pReal), dimension(:), allocatable :: bc_timeIncrement ! length of increment
|
||||
bc_stress ! velocity gradient and stress BC
|
||||
real(pReal), dimension(:), allocatable :: bc_timeIncrement ! length of increment
|
||||
integer(pInt) N_Loadcases, step
|
||||
integer(pInt), dimension(:), allocatable :: bc_steps ! number of steps
|
||||
integer(pInt), dimension(:), allocatable :: bc_frequency ! frequency of result writes
|
||||
logical, dimension(:,:,:,:), allocatable :: bc_mask ! mask of boundary conditions
|
||||
integer(pInt), dimension(:), allocatable :: bc_steps ! number of steps
|
||||
integer(pInt), dimension(:), allocatable :: bc_frequency ! frequency of result writes
|
||||
integer(pInt), dimension(:), allocatable :: bc_logscale ! linear/logaritmic time step flag
|
||||
logical, dimension(:,:,:,:), allocatable :: bc_mask ! mask of boundary conditions
|
||||
|
||||
! variables storing information from geom file
|
||||
real(pReal) wgt
|
||||
|
@ -119,10 +120,10 @@ program DAMASK_spectral
|
|||
unit = 234_pInt
|
||||
ones = 1.0_pReal; zeroes = 0.0_pReal
|
||||
img = cmplx(0.0,1.0)
|
||||
|
||||
N_l = 0_pInt
|
||||
N_s = 0_pInt
|
||||
N_t = 0_pInt
|
||||
time = 0.0_pReal
|
||||
N_n = 0_pInt
|
||||
N_f = 0_pInt
|
||||
gotResolution =.false.; gotDimension =.false.; gotHomogenization = .false.
|
||||
|
@ -154,7 +155,7 @@ program DAMASK_spectral
|
|||
N_s = N_s+1
|
||||
case('t','time','delta')
|
||||
N_t = N_t+1
|
||||
case('n','incs','increments','steps')
|
||||
case('n','incs','increments','steps','logincs','logsteps')
|
||||
N_n = N_n+1
|
||||
case('f','freq','frequency')
|
||||
N_f = N_f+1
|
||||
|
@ -164,12 +165,14 @@ program DAMASK_spectral
|
|||
|
||||
101 N_Loadcases = N_l
|
||||
|
||||
|
||||
! allocate memory depending on lines in input file
|
||||
allocate (bc_velocityGrad(3,3,N_Loadcases)); bc_velocityGrad = 0.0_pReal
|
||||
allocate (bc_stress(3,3,N_Loadcases)); bc_stress = 0.0_pReal
|
||||
allocate (bc_mask(3,3,2,N_Loadcases)); bc_mask = .false.
|
||||
allocate (bc_timeIncrement(N_Loadcases)); bc_timeIncrement = 0.0_pReal
|
||||
allocate (bc_steps(N_Loadcases)); bc_steps = 0_pInt
|
||||
allocate (bc_logscale(N_Loadcases)); bc_logscale = 0_pInt
|
||||
allocate (bc_frequency(N_Loadcases)); bc_frequency = 1_pInt
|
||||
|
||||
rewind(unit)
|
||||
|
@ -201,13 +204,16 @@ program DAMASK_spectral
|
|||
bc_timeIncrement(i) = IO_floatValue(line,posInput,j+1)
|
||||
case('n','incs','increments','steps') ! bc_steps
|
||||
bc_steps(i) = IO_intValue(line,posInput,j+1)
|
||||
case('logincs','logsteps') ! = 1, if log scale
|
||||
bc_steps(i) = IO_intValue(line,posInput,j+1)
|
||||
bc_logscale(i) = 1
|
||||
case('f','frequency') ! frequency of result writings
|
||||
bc_frequency(i) = IO_intValue(line,posInput,j+1)
|
||||
end select
|
||||
enddo; enddo
|
||||
|
||||
200 close(unit)
|
||||
|
||||
|
||||
do i = 1, N_Loadcases ! consistency checks
|
||||
if (any(bc_mask(:,:,1,i) == bc_mask(:,:,2,i))) call IO_error(46,i) ! exclusive or masking only
|
||||
if (bc_timeIncrement(i) < 0.0_pReal) call IO_error(47,i) ! negative time increment
|
||||
|
@ -361,12 +367,14 @@ program DAMASK_spectral
|
|||
write(538), 'dimension', geomdimension
|
||||
write(538), 'materialpoint_sizeResults', materialpoint_sizeResults
|
||||
write(538), 'loadcases', N_Loadcases
|
||||
write(538), 'logscale', bc_logscale ! one entry per loadcase (0: linear, 1: log)
|
||||
write(538), 'frequencies', bc_frequency ! one entry per loadcase
|
||||
write(538), 'times', bc_timeIncrement ! one entry per loadcase
|
||||
bc_steps(1) = bc_steps(1)+1 ! +1 to store initial situation
|
||||
write(538), 'increments', bc_steps ! one entry per loadcase
|
||||
bc_steps(1) = bc_steps(1)-1 ! re-adjust for correct looping
|
||||
write(538), 'eoh' ! end of header
|
||||
|
||||
write(538) materialpoint_results(:,1,:) ! initial (non-deformed) results
|
||||
! Initialization done
|
||||
|
||||
|
@ -374,10 +382,9 @@ program DAMASK_spectral
|
|||
! Loop over loadcases defined in the loadcase file
|
||||
do loadcase = 1, N_Loadcases
|
||||
!*************************************************************
|
||||
|
||||
timeinc = bc_timeIncrement(loadcase)/bc_steps(loadcase)
|
||||
guessmode = 0.0_pReal ! change of load case, homogeneous guess for the first step
|
||||
|
||||
time0 = time ! loadcase start time
|
||||
guessmode = 0.0_pReal ! change of load case, homogeneous guess for the first step
|
||||
|
||||
mask_defgrad = merge(ones,zeroes,bc_mask(:,:,1,loadcase))
|
||||
mask_stress = merge(ones,zeroes,bc_mask(:,:,2,loadcase))
|
||||
damper = ones/10
|
||||
|
@ -385,12 +392,28 @@ program DAMASK_spectral
|
|||
! loop oper steps defined in input file for current loadcase
|
||||
do step = 1, bc_steps(loadcase)
|
||||
!*************************************************************
|
||||
if (bc_logscale(loadcase) == 1) then ! loglinear scale
|
||||
if (loadcase == 1) then ! 1st loadcase of loglinear scale
|
||||
if (step == 1) then ! 1st step of 1st loadcase of loglinear scale
|
||||
timeinc = bc_timeIncrement(1)*(2.0**(1 - bc_steps(1))) ! assume 1st step is equal to 2nd
|
||||
else ! not-1st step of 1st loadcase of loglinear scale
|
||||
timeinc = bc_timeIncrement(1)*(2.0**(step - (1 + bc_steps(1))))
|
||||
endif
|
||||
else ! not-1st loadcase of loglinear scale
|
||||
timeinc = time0 * ( ((1.0+bc_timeIncrement(loadcase)/time0)**( step *1.0/(bc_steps(loadcase)))) &
|
||||
- ((1.0+bc_timeIncrement(loadcase)/time0)**((step-1)*1.0/(bc_steps(loadcase)))) )
|
||||
endif
|
||||
else ! linear scale
|
||||
timeinc = bc_timeIncrement(loadcase)/bc_steps(loadcase)
|
||||
endif
|
||||
|
||||
time = time + timeinc
|
||||
temp33_Real = defgradAim
|
||||
defgradAim = defgradAim & ! update macroscopic displacement gradient (defgrad BC)
|
||||
+ guessmode * mask_stress * (defgradAim - defgradAimOld) &
|
||||
+ math_mul33x33(bc_velocityGrad(:,:,loadcase), defgradAim)*timeinc
|
||||
defgradAimOld = temp33_Real
|
||||
|
||||
defgradAimOld = temp33_Real
|
||||
|
||||
do k = 1, resolution(3); do j = 1, resolution(2); do i = 1, resolution(1)
|
||||
temp33_Real = defgrad(i,j,k,:,:)
|
||||
defgrad(i,j,k,:,:) = defgrad(i,j,k,:,:)& ! old fluctuations as guess for new step, no fluctuations for new loadcase
|
||||
|
@ -419,7 +442,7 @@ program DAMASK_spectral
|
|||
err_defgrad > err_defgrad_tol))
|
||||
iter = iter + 1_pInt
|
||||
print*, ' '
|
||||
print '(3(A,I5.5,tr2))', ' Loadcase = ',loadcase, ' Step = ',step,'Iteration = ',iter
|
||||
print '(3(A,I5.5,tr2))', ' Loadcase = ',loadcase, ' Step = ',step, ' Iteration = ',iter
|
||||
cstress_av = 0.0_pReal
|
||||
workfft = 0.0_pReal !needed because of the padding for FFTW
|
||||
!*************************************************************
|
||||
|
|
Loading…
Reference in New Issue