DAMASK_EICMD/src/CPFEM2.f90

150 lines
4.3 KiB
Fortran
Raw Normal View History

!--------------------------------------------------------------------------------------------------
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
!> @brief needs a good name and description
!--------------------------------------------------------------------------------------------------
module CPFEM2
use prec
use config
use math
2019-09-22 19:23:03 +05:30
use rotations
2020-04-28 13:59:13 +05:30
use YAML_types
2020-05-22 00:11:40 +05:30
use YAML_parse
use material
use lattice
use IO
use base64
use DAMASK_interface
use results
use discretization
use HDF5_utilities
use homogenization
use phase
2020-04-28 14:05:43 +05:30
#if defined(Mesh)
2020-03-20 19:25:10 +05:30
use FEM_quadrature
2020-03-20 19:38:07 +05:30
use discretization_mesh
2020-03-20 11:28:55 +05:30
#elif defined(Grid)
use discretization_grid
2019-06-11 19:46:10 +05:30
#endif
implicit none
2020-01-27 01:45:21 +05:30
public
2019-05-15 02:42:32 +05:30
contains
!--------------------------------------------------------------------------------------------------
2019-12-07 19:50:04 +05:30
!> @brief call all module initializations
!--------------------------------------------------------------------------------------------------
2019-06-11 19:46:10 +05:30
subroutine CPFEM_initAll
2020-09-13 13:49:38 +05:30
call parallelization_init
call DAMASK_interface_init ! Spectral and FEM interface to commandline
2020-09-13 13:49:38 +05:30
call prec_init
2019-06-11 19:46:10 +05:30
call IO_init
call base64_init
2020-04-28 14:05:43 +05:30
#ifdef Mesh
2020-03-20 19:25:10 +05:30
call FEM_quadrature_init
#endif
2020-09-29 23:37:33 +05:30
call YAML_types_init
call YAML_parse_init
2019-06-11 19:46:10 +05:30
call config_init
call math_init
2019-09-22 19:23:03 +05:30
call rotations_init
2019-06-11 19:46:10 +05:30
call lattice_init
call HDF5_utilities_init
call results_init(restart=interface_restartInc>0)
2020-04-28 14:05:43 +05:30
#if defined(Mesh)
call discretization_mesh_init(restart=interface_restartInc>0)
2020-03-20 11:28:55 +05:30
#elif defined(Grid)
call discretization_grid_init(restart=interface_restartInc>0)
2020-03-20 11:28:55 +05:30
#endif
call material_init(restart=interface_restartInc>0)
2021-02-09 03:51:53 +05:30
call phase_init
2019-06-11 19:46:10 +05:30
call homogenization_init
2020-12-16 13:43:13 +05:30
call crystallite_init
2019-06-11 19:46:10 +05:30
call CPFEM_init
2020-08-15 19:32:10 +05:30
call config_deallocate
end subroutine CPFEM_initAll
2019-12-07 19:50:04 +05:30
!--------------------------------------------------------------------------------------------------
2020-02-25 22:23:15 +05:30
!> @brief Read restart information if needed.
!--------------------------------------------------------------------------------------------------
subroutine CPFEM_init
2019-06-11 19:46:10 +05:30
2020-12-30 02:01:22 +05:30
integer(HID_T) :: fileHandle
character(len=pStringLen) :: fileName
2020-12-30 04:44:48 +05:30
2020-09-22 16:39:12 +05:30
print'(/,a)', ' <<<+- CPFEM init -+>>>'; flush(IO_STDOUT)
2019-06-11 19:46:10 +05:30
2020-12-30 02:01:22 +05:30
if (interface_restartInc > 0) then
print'(/,a,i0,a)', ' reading restart information of increment from file'; flush(IO_STDOUT)
write(fileName,'(a,i0,a)') trim(getSolverJobName())//'_',worldrank,'.hdf5'
fileHandle = HDF5_openFile(fileName)
2020-12-30 04:44:48 +05:30
call homogenization_restartRead(fileHandle)
2021-02-09 03:51:53 +05:30
call phase_restartRead(fileHandle)
2020-12-30 02:01:22 +05:30
call HDF5_closeFile(fileHandle)
endif
2020-02-25 22:23:15 +05:30
end subroutine CPFEM_init
2018-12-05 04:25:39 +05:30
2020-02-25 22:23:15 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Write restart information.
!--------------------------------------------------------------------------------------------------
subroutine CPFEM_restartWrite
2020-12-30 04:44:48 +05:30
2020-12-30 02:01:22 +05:30
integer(HID_T) :: fileHandle
character(len=pStringLen) :: fileName
2020-12-30 04:44:48 +05:30
2020-12-30 02:01:22 +05:30
print*, ' writing field and constitutive data required for restart to file';flush(IO_STDOUT)
write(fileName,'(a,i0,a)') trim(getSolverJobName())//'_',worldrank,'.hdf5'
fileHandle = HDF5_openFile(fileName,'a')
2020-12-30 04:44:48 +05:30
call homogenization_restartWrite(fileHandle)
2021-02-09 03:51:53 +05:30
call phase_restartWrite(fileHandle)
2020-02-25 22:23:15 +05:30
2020-12-30 02:01:22 +05:30
call HDF5_closeFile(fileHandle)
2020-02-25 22:23:15 +05:30
end subroutine CPFEM_restartWrite
!--------------------------------------------------------------------------------------------------
!> @brief Forward data for new time increment.
!--------------------------------------------------------------------------------------------------
subroutine CPFEM_forward
2020-12-23 11:28:54 +05:30
call homogenization_forward
2021-02-09 03:51:53 +05:30
call phase_forward
2020-02-25 22:23:15 +05:30
end subroutine CPFEM_forward
2018-12-05 04:25:39 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Trigger writing of results.
2018-12-05 04:25:39 +05:30
!--------------------------------------------------------------------------------------------------
subroutine CPFEM_results(inc,time)
integer, intent(in) :: inc
real(pReal), intent(in) :: time
2019-06-11 19:46:10 +05:30
call results_openJobFile
call results_addIncrement(inc,time)
2021-02-09 03:51:53 +05:30
call phase_results
2019-06-11 19:46:10 +05:30
call homogenization_results
call discretization_results
2020-01-10 06:15:00 +05:30
call results_finalizeIncrement
2019-06-11 19:46:10 +05:30
call results_closeJobFile
2018-12-05 04:25:39 +05:30
end subroutine CPFEM_results
end module CPFEM2