more flexibility for the L in the load case
Note that mixed boundary conditions for L introduce an ambiguity. Consider: L = [[1.0, x, x], [ 0, 0, 0], [ 0, 0, 0]] P = [[x, 0, 0], [x, x, x], [x, x, x]] What we need is F^(n+1)=F_dot^(n+1) x Delta_t, where F_dot^(n+1) is F_dot^(n+1)_ij = L_ik F^n_kj. So component F_11 has contributions from L_12 and L_13. We first assume L_12=L_13=0 and then choose F^(n+1)_12 and F^(n+1)_13 to get P_12=P_13=0. This implicitly gives a solution for L_12 and L_13, which is however only one out of infinitely many.
This commit is contained in:
parent
03b7532cc5
commit
85735605f8
|
@ -504,8 +504,6 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg)
|
||||||
! errors related to the grid solver
|
! errors related to the grid solver
|
||||||
case (831)
|
case (831)
|
||||||
msg = 'mask consistency violated in grid load case'
|
msg = 'mask consistency violated in grid load case'
|
||||||
case (832)
|
|
||||||
msg = 'ill-defined L (line partly defined) in grid load case'
|
|
||||||
case (833)
|
case (833)
|
||||||
msg = 'non-positive ratio for geometric progression'
|
msg = 'non-positive ratio for geometric progression'
|
||||||
case (834)
|
case (834)
|
||||||
|
|
|
@ -218,12 +218,6 @@ program DAMASK_grid
|
||||||
reportAndCheck: if (worldrank == 0) then
|
reportAndCheck: if (worldrank == 0) then
|
||||||
print'(/,a,i0)', ' load case: ', l
|
print'(/,a,i0)', ' load case: ', l
|
||||||
print*, ' estimate_rate:', loadCases(l)%estimate_rate
|
print*, ' estimate_rate:', loadCases(l)%estimate_rate
|
||||||
if (loadCases(l)%deformation%myType == 'L') then
|
|
||||||
do j = 1, 3
|
|
||||||
if (any(loadCases(l)%deformation%mask(j,1:3) .eqv. .true.) .and. &
|
|
||||||
any(loadCases(l)%deformation%mask(j,1:3) .eqv. .false.)) errorID = 832 ! each row should be either fully or not at all defined
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
if (loadCases(l)%deformation%myType == 'F') then
|
if (loadCases(l)%deformation%myType == 'F') then
|
||||||
print*, ' F:'
|
print*, ' F:'
|
||||||
else
|
else
|
||||||
|
|
|
@ -370,7 +370,7 @@ subroutine grid_mechanical_FEM_forward(cutBack,guess,Delta_t,Delta_t_old,t_remai
|
||||||
! calculate rate for aim
|
! calculate rate for aim
|
||||||
if (deformation_BC%myType=='L') then ! calculate F_aimDot from given L and current F
|
if (deformation_BC%myType=='L') then ! calculate F_aimDot from given L and current F
|
||||||
F_aimDot = F_aimDot &
|
F_aimDot = F_aimDot &
|
||||||
+ merge(.0_pReal,matmul(deformation_BC%values, F_aim_lastInc),deformation_BC%mask)
|
+ matmul(merge(.0_pReal,deformation_BC%values,deformation_BC%mask),F_aim_lastInc)
|
||||||
elseif (deformation_BC%myType=='dot_F') then ! F_aimDot is prescribed
|
elseif (deformation_BC%myType=='dot_F') then ! F_aimDot is prescribed
|
||||||
F_aimDot = F_aimDot &
|
F_aimDot = F_aimDot &
|
||||||
+ merge(.0_pReal,deformation_BC%values,deformation_BC%mask)
|
+ merge(.0_pReal,deformation_BC%values,deformation_BC%mask)
|
||||||
|
|
|
@ -321,7 +321,7 @@ subroutine grid_mechanical_spectral_basic_forward(cutBack,guess,Delta_t,Delta_t_
|
||||||
! calculate rate for aim
|
! calculate rate for aim
|
||||||
if (deformation_BC%myType=='L') then ! calculate F_aimDot from given L and current F
|
if (deformation_BC%myType=='L') then ! calculate F_aimDot from given L and current F
|
||||||
F_aimDot = F_aimDot &
|
F_aimDot = F_aimDot &
|
||||||
+ merge(.0_pReal,matmul(deformation_BC%values, F_aim_lastInc),deformation_BC%mask)
|
+ matmul(merge(.0_pReal,deformation_BC%values,deformation_BC%mask),F_aim_lastInc)
|
||||||
elseif (deformation_BC%myType=='dot_F') then ! F_aimDot is prescribed
|
elseif (deformation_BC%myType=='dot_F') then ! F_aimDot is prescribed
|
||||||
F_aimDot = F_aimDot &
|
F_aimDot = F_aimDot &
|
||||||
+ merge(.0_pReal,deformation_BC%values,deformation_BC%mask)
|
+ merge(.0_pReal,deformation_BC%values,deformation_BC%mask)
|
||||||
|
|
|
@ -357,7 +357,7 @@ subroutine grid_mechanical_spectral_polarisation_forward(cutBack,guess,Delta_t,D
|
||||||
! calculate rate for aim
|
! calculate rate for aim
|
||||||
if (deformation_BC%myType=='L') then ! calculate F_aimDot from given L and current F
|
if (deformation_BC%myType=='L') then ! calculate F_aimDot from given L and current F
|
||||||
F_aimDot = F_aimDot &
|
F_aimDot = F_aimDot &
|
||||||
+ merge(.0_pReal,matmul(deformation_BC%values, F_aim_lastInc),deformation_BC%mask)
|
+ matmul(merge(.0_pReal,deformation_BC%values,deformation_BC%mask),F_aim_lastInc)
|
||||||
elseif (deformation_BC%myType=='dot_F') then ! F_aimDot is prescribed
|
elseif (deformation_BC%myType=='dot_F') then ! F_aimDot is prescribed
|
||||||
F_aimDot = F_aimDot &
|
F_aimDot = F_aimDot &
|
||||||
+ merge(.0_pReal,deformation_BC%values,deformation_BC%mask)
|
+ merge(.0_pReal,deformation_BC%values,deformation_BC%mask)
|
||||||
|
|
Loading…
Reference in New Issue