179 lines
11 KiB
Plaintext
179 lines
11 KiB
Plaintext
|
From 6dbd904a4cfc28add3c39bb2a4ec9e2dbb2442b6 Mon Sep 17 00:00:00 2001
|
||
|
From: Martin Diehl <m.diehl@mpie.de>
|
||
|
Date: Thu, 18 Apr 2019 18:25:32 +0200
|
||
|
Subject: [PATCH] to create patch
|
||
|
|
||
|
---
|
||
|
src/DAMASK_grid.f90 | 81 +-----------------------------------------
|
||
|
src/homogenization.f90 | 2 ++
|
||
|
2 files changed, 3 insertions(+), 80 deletions(-)
|
||
|
|
||
|
diff --git a/src/DAMASK_grid.f90 b/src/DAMASK_grid.f90
|
||
|
index f2f52bb2..a7543f4d 100644
|
||
|
--- a/src/DAMASK_grid.f90
|
||
|
+++ b/src/DAMASK_grid.f90
|
||
|
@@ -18,7 +18,6 @@ program DAMASK_spectral
|
||
|
use DAMASK_interface, only: &
|
||
|
DAMASK_interface_init, &
|
||
|
loadCaseFile, &
|
||
|
- geometryFile, &
|
||
|
getSolverJobName, &
|
||
|
interface_restartInc
|
||
|
use IO, only: &
|
||
|
@@ -49,14 +48,9 @@ program DAMASK_spectral
|
||
|
restartInc
|
||
|
use numerics, only: &
|
||
|
worldrank, &
|
||
|
- worldsize, &
|
||
|
stagItMax, &
|
||
|
maxCutBack, &
|
||
|
continueCalculation
|
||
|
- use homogenization, only: &
|
||
|
- materialpoint_sizeResults, &
|
||
|
- materialpoint_results, &
|
||
|
- materialpoint_postResults
|
||
|
use material, only: &
|
||
|
thermal_type, &
|
||
|
damage_type, &
|
||
|
@@ -131,12 +125,6 @@ program DAMASK_spectral
|
||
|
type(tLoadCase), allocatable, dimension(:) :: loadCases !< array of all load cases
|
||
|
type(tLoadCase) :: newLoadCase
|
||
|
type(tSolutionState), allocatable, dimension(:) :: solres
|
||
|
- integer(MPI_OFFSET_KIND) :: fileOffset
|
||
|
- integer(MPI_OFFSET_KIND), dimension(:), allocatable :: outputSize
|
||
|
- integer(pInt), parameter :: maxByteOut = 2147483647-4096 !< limit of one file output write https://trac.mpich.org/projects/mpich/ticket/1742
|
||
|
- integer(pInt), parameter :: maxRealOut = maxByteOut/pReal
|
||
|
- integer(pLongInt), dimension(2) :: outputIndex
|
||
|
- PetscErrorCode :: ierr
|
||
|
procedure(grid_mech_spectral_basic_init), pointer :: &
|
||
|
mech_init
|
||
|
procedure(grid_mech_spectral_basic_forward), pointer :: &
|
||
|
@@ -384,22 +372,6 @@ program DAMASK_spectral
|
||
|
! write header of output file
|
||
|
if (worldrank == 0) then
|
||
|
writeHeader: if (interface_restartInc < 1_pInt) then
|
||
|
- open(newunit=fileUnit,file=trim(getSolverJobName())//&
|
||
|
- '.spectralOut',form='UNFORMATTED',status='REPLACE')
|
||
|
- write(fileUnit) 'load:', trim(loadCaseFile) ! ... and write header
|
||
|
- write(fileUnit) 'workingdir:', 'n/a'
|
||
|
- write(fileUnit) 'geometry:', trim(geometryFile)
|
||
|
- write(fileUnit) 'grid:', grid
|
||
|
- write(fileUnit) 'size:', geomSize
|
||
|
- write(fileUnit) 'materialpoint_sizeResults:', materialpoint_sizeResults
|
||
|
- write(fileUnit) 'loadcases:', size(loadCases)
|
||
|
- write(fileUnit) 'frequencies:', loadCases%outputfrequency ! one entry per LoadCase
|
||
|
- write(fileUnit) 'times:', loadCases%time ! one entry per LoadCase
|
||
|
- write(fileUnit) 'logscales:', loadCases%logscale
|
||
|
- write(fileUnit) 'increments:', loadCases%incs ! one entry per LoadCase
|
||
|
- write(fileUnit) 'startingIncrement:', restartInc ! start with writing out the previous inc
|
||
|
- write(fileUnit) 'eoh'
|
||
|
- close(fileUnit) ! end of header
|
||
|
open(newunit=statUnit,file=trim(getSolverJobName())//&
|
||
|
'.sta',form='FORMATTED',status='REPLACE')
|
||
|
write(statUnit,'(a)') 'Increment Time CutbackLevel Converged IterationsNeeded' ! statistics file
|
||
|
@@ -412,39 +384,6 @@ program DAMASK_spectral
|
||
|
endif writeHeader
|
||
|
endif
|
||
|
|
||
|
-!--------------------------------------------------------------------------------------------------
|
||
|
-! prepare MPI parallel out (including opening of file)
|
||
|
- allocate(outputSize(worldsize), source = 0_MPI_OFFSET_KIND)
|
||
|
- outputSize(worldrank+1) = size(materialpoint_results,kind=MPI_OFFSET_KIND)*int(pReal,MPI_OFFSET_KIND)
|
||
|
- call MPI_allreduce(MPI_IN_PLACE,outputSize,worldsize,MPI_LONG,MPI_SUM,PETSC_COMM_WORLD,ierr) ! get total output size over each process
|
||
|
- if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_allreduce')
|
||
|
- call MPI_file_open(PETSC_COMM_WORLD, trim(getSolverJobName())//'.spectralOut', &
|
||
|
- MPI_MODE_WRONLY + MPI_MODE_APPEND, &
|
||
|
- MPI_INFO_NULL, &
|
||
|
- fileUnit, &
|
||
|
- ierr)
|
||
|
- if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_file_open')
|
||
|
- call MPI_file_get_position(fileUnit,fileOffset,ierr) ! get offset from header
|
||
|
- if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_file_get_position')
|
||
|
- fileOffset = fileOffset + sum(outputSize(1:worldrank)) ! offset of my process in file (header + processes before me)
|
||
|
- call MPI_file_seek (fileUnit,fileOffset,MPI_SEEK_SET,ierr)
|
||
|
- if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_file_seek')
|
||
|
-
|
||
|
- writeUndeformed: if (interface_restartInc < 1_pInt) then
|
||
|
- write(6,'(1/,a)') ' ... writing initial configuration to file ........................'
|
||
|
- call CPFEM_results(0_pInt,0.0_pReal)
|
||
|
- do i = 1, size(materialpoint_results,3)/(maxByteOut/(materialpoint_sizeResults*pReal))+1 ! slice the output of my process in chunks not exceeding the limit for one output
|
||
|
- outputIndex = int([(i-1_pInt)*((maxRealOut)/materialpoint_sizeResults)+1_pInt, & ! QUESTION: why not starting i at 0 instead of murky 1?
|
||
|
- min(i*((maxRealOut)/materialpoint_sizeResults),size(materialpoint_results,3))],pLongInt)
|
||
|
- call MPI_file_write(fileUnit,reshape(materialpoint_results(:,:,outputIndex(1):outputIndex(2)), &
|
||
|
- [(outputIndex(2)-outputIndex(1)+1)*int(materialpoint_sizeResults,pLongInt)]), &
|
||
|
- int((outputIndex(2)-outputIndex(1)+1)*int(materialpoint_sizeResults,pLongInt)), &
|
||
|
- MPI_DOUBLE, MPI_STATUS_IGNORE, ierr)
|
||
|
- if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_file_write')
|
||
|
- enddo
|
||
|
- fileOffset = fileOffset + sum(outputSize) ! forward to current file position
|
||
|
- endif writeUndeformed
|
||
|
-
|
||
|
|
||
|
loadCaseLooping: do currentLoadCase = 1_pInt, size(loadCases)
|
||
|
time0 = time ! load case start time
|
||
|
@@ -574,7 +513,6 @@ program DAMASK_spectral
|
||
|
write(6,'(/,a)') ' cutting back '
|
||
|
else ! no more options to continue
|
||
|
call IO_warning(850_pInt)
|
||
|
- call MPI_file_close(fileUnit,ierr)
|
||
|
close(statUnit)
|
||
|
call quit(-1_pInt*(lastRestartWritten+1_pInt)) ! quit and provide information about last restart inc written
|
||
|
endif
|
||
|
@@ -593,24 +531,8 @@ program DAMASK_spectral
|
||
|
' increment ', totalIncsCounter, ' NOT converged'
|
||
|
endif; flush(6)
|
||
|
|
||
|
- if (mod(inc,loadCases(currentLoadCase)%outputFrequency) == 0_pInt) then ! at output frequency
|
||
|
- write(6,'(1/,a)') ' ... writing results to file ......................................'
|
||
|
- flush(6)
|
||
|
- call materialpoint_postResults()
|
||
|
- call MPI_file_seek (fileUnit,fileOffset,MPI_SEEK_SET,ierr)
|
||
|
- if (ierr /= 0_pInt) call IO_error(894_pInt, ext_msg='MPI_file_seek')
|
||
|
- do i=1, size(materialpoint_results,3)/(maxByteOut/(materialpoint_sizeResults*pReal))+1 ! slice the output of my process in chunks not exceeding the limit for one output
|
||
|
- outputIndex=int([(i-1_pInt)*((maxRealOut)/materialpoint_sizeResults)+1_pInt, &
|
||
|
- min(i*((maxRealOut)/materialpoint_sizeResults),size(materialpoint_results,3))],pLongInt)
|
||
|
- call MPI_file_write(fileUnit,reshape(materialpoint_results(:,:,outputIndex(1):outputIndex(2)),&
|
||
|
- [(outputIndex(2)-outputIndex(1)+1)*int(materialpoint_sizeResults,pLongInt)]), &
|
||
|
- int((outputIndex(2)-outputIndex(1)+1)*int(materialpoint_sizeResults,pLongInt)),&
|
||
|
- MPI_DOUBLE, MPI_STATUS_IGNORE, ierr)
|
||
|
- if(ierr /=0_pInt) call IO_error(894_pInt, ext_msg='MPI_file_write')
|
||
|
- enddo
|
||
|
- fileOffset = fileOffset + sum(outputSize) ! forward to current file position
|
||
|
+ if (mod(inc,loadCases(currentLoadCase)%outputFrequency) == 0_pInt) & ! at output frequency
|
||
|
call CPFEM_results(totalIncsCounter,time)
|
||
|
- endif
|
||
|
if ( loadCases(currentLoadCase)%restartFrequency > 0_pInt & ! writing of restart info requested ...
|
||
|
.and. mod(inc,loadCases(currentLoadCase)%restartFrequency) == 0_pInt) then ! ... and at frequency of writing restart information
|
||
|
restartWrite = .true. ! set restart parameter for FEsolving
|
||
|
@@ -633,7 +555,6 @@ program DAMASK_spectral
|
||
|
real(convergedCounter, pReal)/&
|
||
|
real(notConvergedCounter + convergedCounter,pReal)*100.0_pReal, ' %) increments converged!'
|
||
|
flush(6)
|
||
|
- call MPI_file_close(fileUnit,ierr)
|
||
|
close(statUnit)
|
||
|
|
||
|
if (notConvergedCounter > 0_pInt) call quit(2_pInt) ! error if some are not converged
|
||
|
diff --git a/src/homogenization.f90 b/src/homogenization.f90
|
||
|
index 06da6ab2..0743d545 100644
|
||
|
--- a/src/homogenization.f90
|
||
|
+++ b/src/homogenization.f90
|
||
|
@@ -269,6 +269,7 @@ subroutine homogenization_init
|
||
|
+ homogenization_maxNgrains * (1 + crystallite_maxSizePostResults & ! crystallite size & crystallite results
|
||
|
+ 1 + constitutive_plasticity_maxSizePostResults & ! constitutive size & constitutive results
|
||
|
+ constitutive_source_maxSizePostResults)
|
||
|
+ materialpoint_sizeResults = 0
|
||
|
allocate(materialpoint_results(materialpoint_sizeResults,theMesh%elem%nIPs,theMesh%nElems))
|
||
|
|
||
|
write(6,'(/,a)') ' <<<+- homogenization init -+>>>'
|
||
|
@@ -682,6 +683,7 @@ subroutine materialpoint_postResults
|
||
|
i, & !< integration point number
|
||
|
e !< element number
|
||
|
|
||
|
+ return
|
||
|
!$OMP PARALLEL DO PRIVATE(myNgrains,myCrystallite,thePos,theSize)
|
||
|
elementLooping: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||
|
myNgrains = homogenization_Ngrains(mesh_element(3,e))
|
||
|
--
|
||
|
2.21.0
|
||
|
|