adaptive regrid now working, updates F and F_lastInc based on mapping.
This commit is contained in:
parent
6e1b71f289
commit
08c7be7d15
171
code/mesh.f90
171
code/mesh.f90
|
@ -890,20 +890,23 @@ function mesh_regrid(adaptive,resNewInput,minRes)
|
||||||
integer(pInt), dimension(3) :: resNew
|
integer(pInt), dimension(3) :: resNew
|
||||||
integer(pInt), dimension(:), allocatable :: indices
|
integer(pInt), dimension(:), allocatable :: indices
|
||||||
real(pReal), dimension(3) :: geomdimNew
|
real(pReal), dimension(3) :: geomdimNew
|
||||||
real(pReal), dimension(3,3) :: Favg, Favg_LastInc
|
real(pReal), dimension(3,3) :: Favg, Favg_LastInc, &
|
||||||
|
FavgNew, Favg_LastIncNew, &
|
||||||
|
deltaF, deltaF_lastInc
|
||||||
real(pReal), dimension(:,:), allocatable :: &
|
real(pReal), dimension(:,:), allocatable :: &
|
||||||
coordinatesNew, &
|
coordinatesNew, &
|
||||||
coordinatesLinear
|
coordinatesLinear
|
||||||
|
|
||||||
real(pReal), dimension(:,:,:), allocatable :: &
|
real(pReal), dimension(:,:,:), allocatable :: &
|
||||||
material_phase, material_phaseNew
|
material_phase, material_phaseNew, &
|
||||||
|
F_Linear, F_Linear_New
|
||||||
|
|
||||||
real(pReal), dimension(:,:,:,:,:), allocatable :: &
|
real(pReal), dimension(:,:,:,:,:), allocatable :: &
|
||||||
F, FNew, &
|
F, FNew, &
|
||||||
Fp, FpNew, &
|
Fp, FpNew, &
|
||||||
Lp, LpNew, &
|
Lp, LpNew, &
|
||||||
dcsdE, dcsdENew, &
|
dcsdE, dcsdENew, &
|
||||||
F_lastIncNew
|
F_lastInc, F_lastIncNew
|
||||||
|
|
||||||
real(pReal), dimension (:,:,:,:,:,:,:), allocatable :: &
|
real(pReal), dimension (:,:,:,:,:,:,:), allocatable :: &
|
||||||
dPdF, dPdFNew
|
dPdF, dPdFNew
|
||||||
|
@ -914,7 +917,7 @@ function mesh_regrid(adaptive,resNewInput,minRes)
|
||||||
stateConst
|
stateConst
|
||||||
integer(pInt), dimension(:,:), allocatable :: &
|
integer(pInt), dimension(:,:), allocatable :: &
|
||||||
sizeStateConst, sizeStateHomog
|
sizeStateConst, sizeStateHomog
|
||||||
|
|
||||||
if (adaptive) then
|
if (adaptive) then
|
||||||
if (present(resNewInput)) then
|
if (present(resNewInput)) then
|
||||||
if (any (resNewInput<1)) call IO_error(890_pInt, ext_msg = 'resNewInput')
|
if (any (resNewInput<1)) call IO_error(890_pInt, ext_msg = 'resNewInput')
|
||||||
|
@ -922,31 +925,30 @@ function mesh_regrid(adaptive,resNewInput,minRes)
|
||||||
call IO_error(890_pInt, ext_msg = 'resNewInput')
|
call IO_error(890_pInt, ext_msg = 'resNewInput')
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!---------------------------------------------------------
|
!---------------------------------------------------------
|
||||||
allocate(F(res(1),res(2),res(3),3,3))
|
allocate(F(res(1),res(2),res(3),3,3))
|
||||||
call IO_read_jobBinaryFile(777,'convergedSpectralDefgrad',trim(getSolverJobName()),size(F))
|
call IO_read_jobBinaryFile(777,'convergedSpectralDefgrad',trim(getSolverJobName()),size(F))
|
||||||
read (777,rec=1) F
|
read (777,rec=1) F
|
||||||
close (777)
|
close (777)
|
||||||
|
|
||||||
! ----read in average deformation--------
|
! ----read in average deformation-------------------------
|
||||||
call IO_read_jobBinaryFile(777,'F_aim',trim(getSolverJobName()),size(Favg))
|
call IO_read_jobBinaryFile(777,'F_aim',trim(getSolverJobName()),size(Favg))
|
||||||
read (777,rec=1) Favg
|
read (777,rec=1) Favg
|
||||||
close (777)
|
close (777)
|
||||||
|
|
||||||
allocate(coordinates(res(1),res(2),res(3),3))
|
allocate(coordinates(res(1),res(2),res(3),3))
|
||||||
call deformed_fft(res,geomdim,Favg,1.0_pReal,F,coordinates)
|
call deformed_fft(res,geomdim,Favg,1.0_pReal,F,coordinates)
|
||||||
deallocate(F)
|
|
||||||
|
|
||||||
! ----Store coordinates into a linear list--------
|
! ----Store coordinates into a linear list--------------
|
||||||
allocate(coordinatesLinear(3,mesh_NcpElems))
|
allocate(coordinatesLinear(3,mesh_NcpElems))
|
||||||
|
|
||||||
ielem = 0_pInt
|
ielem = 0_pInt
|
||||||
do k=1_pInt,res(3); do j=1_pInt, res(2); do i=1_pInt, res(1)
|
do k=1_pInt,res(3); do j=1_pInt, res(2); do i=1_pInt, res(1)
|
||||||
ielem = ielem + 1_pInt
|
ielem = ielem + 1_pInt
|
||||||
coordinatesLinear(1:3,ielem) = coordinates(i,j,k,1:3)
|
coordinatesLinear(1:3,ielem) = coordinates(i,j,k,1:3)
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
deallocate(coordinates)
|
deallocate(coordinates)
|
||||||
|
|
||||||
! ----For 2D /3D case----------------------------------
|
! ----For 2D /3D case----------------------------------
|
||||||
if (res(3)== 1_pInt) then
|
if (res(3)== 1_pInt) then
|
||||||
spatialDim = 2_pInt
|
spatialDim = 2_pInt
|
||||||
|
@ -968,7 +970,7 @@ function mesh_regrid(adaptive,resNewInput,minRes)
|
||||||
|
|
||||||
geomdimNew = math_mul33x3(Favg,geomdim)
|
geomdimNew = math_mul33x3(Favg,geomdim)
|
||||||
!---- Automatic detection based on current geom -----------------
|
!---- Automatic detection based on current geom -----------------
|
||||||
|
|
||||||
if (adaptive) then
|
if (adaptive) then
|
||||||
ratio = floor(real(resNewInput,pReal) * (geomdimNew/geomdim), pInt)
|
ratio = floor(real(resNewInput,pReal) * (geomdimNew/geomdim), pInt)
|
||||||
|
|
||||||
|
@ -992,37 +994,27 @@ function mesh_regrid(adaptive,resNewInput,minRes)
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
k = huge(1_pInt)
|
k = huge(1_pInt)
|
||||||
do i = 0_pInt, 2_pInt**spatialDim - 1
|
do i = 0_pInt, 2_pInt**spatialDim - 1
|
||||||
j = abs( possibleResNew(1,iand(i,1_pInt)/1_pInt + 1_pInt) &
|
j = abs( possibleResNew(1,iand(i,1_pInt)/1_pInt + 1_pInt) &
|
||||||
* possibleResNew(2,iand(i,2_pInt)/2_pInt + 1_pInt) &
|
* possibleResNew(2,iand(i,2_pInt)/2_pInt + 1_pInt) &
|
||||||
* possibleResNew(3,iand(i,4_pInt)/4_pInt + 1_pInt) &
|
* possibleResNew(3,iand(i,4_pInt)/4_pInt + 1_pInt) &
|
||||||
- resNewInput(1)*resNewInput(2)*resNewInput(3))
|
- resNewInput(1)*resNewInput(2)*resNewInput(3))
|
||||||
|
|
||||||
if (j < k) then
|
if (j < k) then
|
||||||
k = j
|
k = j
|
||||||
resNew =[ possibleResNew(1,iand(i,1_pInt)/1_pInt + 1_pInt), &
|
resNew =[ possibleResNew(1,iand(i,1_pInt)/1_pInt + 1_pInt), &
|
||||||
possibleResNew(2,iand(i,2_pInt)/2_pInt + 1_pInt), &
|
possibleResNew(2,iand(i,2_pInt)/2_pInt + 1_pInt), &
|
||||||
possibleResNew(3,iand(i,4_pInt)/4_pInt + 1_pInt) ]
|
possibleResNew(3,iand(i,4_pInt)/4_pInt + 1_pInt) ]
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
else
|
else
|
||||||
resNew = res
|
resNew = resNewInput
|
||||||
endif
|
endif
|
||||||
|
|
||||||
mesh_regrid = resNew
|
mesh_regrid = resNew
|
||||||
NpointsNew = resNew(1)*resNew(2)*resNew(3)
|
NpointsNew = resNew(1)*resNew(2)*resNew(3)
|
||||||
|
|
||||||
|
|
||||||
allocate(F(resNew(1),resNew(2),resNew(3),3,3))
|
|
||||||
do k=1_pInt,resNew(3); do j=1_pInt, resNew(2); do i=1_pInt, resNew(1)
|
|
||||||
F(i,j,k,1:3,1:3) = Favg
|
|
||||||
enddo; enddo; enddo
|
|
||||||
call IO_write_jobBinaryFile(777,'convergedSpectralDefgrad',size(F))
|
|
||||||
write (777,rec=1) F
|
|
||||||
close (777)
|
|
||||||
deallocate(F)
|
|
||||||
|
|
||||||
! ----Calculate regular new coordinates-----------------------------
|
! ----Calculate regular new coordinates-----------------------------
|
||||||
allocate(coordinatesNew(3,NpointsNew))
|
allocate(coordinatesNew(3,NpointsNew))
|
||||||
ielem = 0_pInt
|
ielem = 0_pInt
|
||||||
|
@ -1038,6 +1030,7 @@ function mesh_regrid(adaptive,resNewInput,minRes)
|
||||||
coordinatesNew, coordinatesLinear, indices)
|
coordinatesNew, coordinatesLinear, indices)
|
||||||
deallocate(coordinatesNew)
|
deallocate(coordinatesNew)
|
||||||
|
|
||||||
|
|
||||||
!----- write out indices--------------------------------------------
|
!----- write out indices--------------------------------------------
|
||||||
write(N_Digits, '(I16.16)') 1_pInt + int(log10(real(maxval(indices),pReal)))
|
write(N_Digits, '(I16.16)') 1_pInt + int(log10(real(maxval(indices),pReal)))
|
||||||
N_Digits = adjustl(N_Digits)
|
N_Digits = adjustl(N_Digits)
|
||||||
|
@ -1070,12 +1063,12 @@ function mesh_regrid(adaptive,resNewInput,minRes)
|
||||||
enddo
|
enddo
|
||||||
close(777)
|
close(777)
|
||||||
|
|
||||||
!------Adjusting the point-to-grain association---------------------
|
!------Adjusting format string ---------------------
|
||||||
write(N_Digits, '(I16.16)') 1_pInt+int(log10(real(maxval(mesh_element(4,1:mesh_NcpElems)),pReal)),pInt)
|
write(N_Digits, '(I16.16)') 1_pInt+int(log10(real(maxval(mesh_element(4,1:mesh_NcpElems)),pReal)),pInt)
|
||||||
N_Digits = adjustl(N_Digits)
|
N_Digits = adjustl(N_Digits)
|
||||||
formatString = '(I'//trim(N_Digits)//'.'//trim(N_Digits)//',a)'
|
formatString = '(I'//trim(N_Digits)//'.'//trim(N_Digits)//',a)'
|
||||||
|
|
||||||
!call IO_write_jobFile(777,'geom')
|
!------ write out new geom file ---------------------
|
||||||
open(777,file=trim(getSolverWorkingDirectoryName())//trim(GeometryFile),status='REPLACE')
|
open(777,file=trim(getSolverWorkingDirectoryName())//trim(GeometryFile),status='REPLACE')
|
||||||
write(777, '(A)') '3 header'
|
write(777, '(A)') '3 header'
|
||||||
write(777, '(A, I8, A, I8, A, I8)') 'resolution a ', resNew(1), ' b ', resNew(2), ' c ', resNew(3)
|
write(777, '(A, I8, A, I8, A, I8)') 'resolution a ', resNew(1), ' b ', resNew(2), ' c ', resNew(3)
|
||||||
|
@ -1086,24 +1079,100 @@ function mesh_regrid(adaptive,resNewInput,minRes)
|
||||||
if(mod(i,resNew(1)) == 0_pInt) write(777,'(A)') ''
|
if(mod(i,resNew(1)) == 0_pInt) write(777,'(A)') ''
|
||||||
enddo
|
enddo
|
||||||
close(777)
|
close(777)
|
||||||
|
! ----------------------------------------------------
|
||||||
|
allocate(F_Linear(3,3,mesh_NcpElems))
|
||||||
|
allocate(F_Linear_New(3,3,NpointsNew))
|
||||||
|
allocate(FNew(resNew(1),resNew(2),resNew(3),3,3))
|
||||||
|
|
||||||
!---set F_lastInc to homogeneous deformation------------------------------------------------------
|
ielem = 0_pInt
|
||||||
|
do k=1_pInt,res(3); do j=1_pInt, res(2); do i=1_pInt, res(1)
|
||||||
|
ielem = ielem + 1_pInt
|
||||||
|
F_Linear(1:3,1:3, ielem) = F(i,j,k,1:3,1:3)
|
||||||
|
enddo; enddo; enddo
|
||||||
|
|
||||||
|
do i=1_pInt, NpointsNew
|
||||||
|
F_Linear_New(1:3,1:3,i) = F_Linear(1:3,1:3,indices(i)) ! -- mapping old to new ...based on indices
|
||||||
|
enddo
|
||||||
|
|
||||||
|
ielem = 0_pInt
|
||||||
|
do k=1_pInt,resNew(3); do j=1_pInt, resNew(2); do i=1_pInt, resNew(1)
|
||||||
|
ielem = ielem + 1_pInt
|
||||||
|
FNew(i,j,k,1:3,1:3) = F_Linear_New(1:3,1:3,ielem)
|
||||||
|
enddo; enddo; enddo
|
||||||
|
|
||||||
call IO_read_jobBinaryFile(777,'F_aim_lastInc',trim(getSolverJobName()),size(Favg_LastInc))
|
do i=1_pInt,3_pInt; do j=1_pInt,3_pInt
|
||||||
|
FavgNew(i,j) = real(sum(FNew(1:resNew(1),1:resNew(2),1:resNew(3),i,j))/ NpointsNew,pReal)
|
||||||
|
enddo; enddo
|
||||||
|
|
||||||
|
deltaF = Favg - FavgNew
|
||||||
|
|
||||||
|
do k=1_pInt,resNew(3); do j=1_pInt, resNew(2); do i=1_pInt, resNew(1)
|
||||||
|
FNew(i,j,k,1:3,1:3) = FNew(i,j,k,1:3,1:3) + deltaF
|
||||||
|
enddo; enddo; enddo
|
||||||
|
|
||||||
|
call IO_write_jobBinaryFile(777,'convergedSpectralDefgrad',size(FNew))
|
||||||
|
write (777,rec=1) FNew
|
||||||
|
close (777)
|
||||||
|
|
||||||
|
deallocate(F_Linear)
|
||||||
|
deallocate(F_Linear_New)
|
||||||
|
deallocate(F)
|
||||||
|
deallocate(FNew)
|
||||||
|
|
||||||
|
!---set F_lastInc to homogeneous deformation------------------------------
|
||||||
|
|
||||||
|
allocate(F_lastInc(res(1),res(2),res(3),3,3))
|
||||||
|
allocate(F_lastIncNew(resNew(1),resNew(2),resNew(3),3,3))
|
||||||
|
allocate(F_Linear(3,3,mesh_NcpElems))
|
||||||
|
allocate(F_Linear_New(3,3,NpointsNew))
|
||||||
|
|
||||||
|
call IO_read_jobBinaryFile(777,'convergedSpectralDefgrad_lastInc', &
|
||||||
|
trim(getSolverJobName()),size(F_lastInc))
|
||||||
|
read (777,rec=1) F_lastInc
|
||||||
|
close (777)
|
||||||
|
|
||||||
|
call IO_read_jobBinaryFile(777,'F_aim_lastInc', &
|
||||||
|
trim(getSolverJobName()),size(Favg_LastInc))
|
||||||
read (777,rec=1) Favg_LastInc
|
read (777,rec=1) Favg_LastInc
|
||||||
close (777)
|
close (777)
|
||||||
|
|
||||||
allocate(F_lastIncNew(resNew(1),resNew(2),resNew(3),3,3))
|
ielem = 0_pInt
|
||||||
do k=1_pInt,resNew(3); do j=1_pInt, resNew(2); do i=1_pInt, resNew(1)
|
do k=1_pInt,res(3); do j=1_pInt, res(2); do i=1_pInt, res(1)
|
||||||
F_lastIncNew(i,j,k,1:3,1:3) = Favg_LastInc
|
ielem = ielem + 1_pInt
|
||||||
enddo; enddo; enddo
|
F_Linear(1:3,1:3, ielem) = F_lastInc(i,j,k,1:3,1:3)
|
||||||
|
enddo; enddo; enddo
|
||||||
|
|
||||||
|
! -- mapping old to new ...based on indices
|
||||||
|
do i=1,NpointsNew
|
||||||
|
F_Linear_New(1:3,1:3,i) = F_Linear(1:3,1:3,indices(i))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
ielem = 0_pInt
|
||||||
|
do k=1_pInt,resNew(3); do j=1_pInt, resNew(2); do i=1_pInt, resNew(1)
|
||||||
|
ielem = ielem + 1_pInt
|
||||||
|
F_lastIncNew(i,j,k,1:3,1:3) = F_Linear_New(1:3,1:3,ielem)
|
||||||
|
enddo; enddo; enddo
|
||||||
|
|
||||||
|
! -- calculating the Favg_lastincNew
|
||||||
|
|
||||||
call IO_write_jobBinaryFile(777,'convergedSpectralDefgrad_lastInc',size(F_lastIncNew))
|
do i=1_pInt,3_pInt; do j=1_pInt,3_pInt
|
||||||
write (777,rec=1) F_lastIncNew
|
Favg_LastIncNew(i,j) = real(sum(F_lastIncNew(1:resNew(1),1:resNew(2),1:resNew(3),i,j))/ NpointsNew,pReal)
|
||||||
close (777)
|
enddo; enddo
|
||||||
deallocate(F_lastIncNew)
|
|
||||||
|
deltaF_lastInc = Favg_LastInc - Favg_LastIncNew
|
||||||
|
|
||||||
!-------------------------------------------------------------------
|
do k=1_pInt,resNew(3); do j=1_pInt, resNew(2); do i=1_pInt, resNew(1)
|
||||||
|
F_LastIncNew(i,j,k,1:3,1:3) = F_LastIncNew(i,j,k,1:3,1:3) + deltaF_lastInc
|
||||||
|
enddo; enddo; enddo
|
||||||
|
|
||||||
|
call IO_write_jobBinaryFile(777,'convergedSpectralDefgrad_lastInc',size(F_LastIncNew))
|
||||||
|
write (777,rec=1) F_LastIncNew
|
||||||
|
close (777)
|
||||||
|
deallocate(F_Linear)
|
||||||
|
deallocate(F_Linear_New)
|
||||||
|
deallocate(F_lastInc)
|
||||||
|
deallocate(F_lastIncNew)
|
||||||
|
!-------------------------------------------------------------------
|
||||||
allocate(material_phase (1,1, mesh_NcpElems))
|
allocate(material_phase (1,1, mesh_NcpElems))
|
||||||
allocate(material_phaseNew (1,1, NpointsNew))
|
allocate(material_phaseNew (1,1, NpointsNew))
|
||||||
call IO_read_jobBinaryFile(777,'recordedPhase',trim(getSolverJobName()),size(material_phase))
|
call IO_read_jobBinaryFile(777,'recordedPhase',trim(getSolverJobName()),size(material_phase))
|
||||||
|
|
Loading…
Reference in New Issue