Merge remote-tracking branch 'origin/development' into Fortran-cleaning
This commit is contained in:
commit
4669c289c7
106
CMakeLists.txt
106
CMakeLists.txt
|
@ -1,6 +1,12 @@
|
||||||
cmake_minimum_required (VERSION 3.10.0)
|
cmake_minimum_required (VERSION 3.10.0)
|
||||||
include (FindPkgConfig REQUIRED)
|
include (FindPkgConfig REQUIRED)
|
||||||
|
|
||||||
|
if (DEFINED ENV{PETSC_DIR})
|
||||||
|
message ("PETSC_DIR:\n$ENV{PETSC_DIR}\n")
|
||||||
|
else ()
|
||||||
|
message (FATAL_ERROR "PETSc location (PETSC_DIR) is not defined")
|
||||||
|
endif ()
|
||||||
|
|
||||||
# Dummy project to determine compiler names and version
|
# Dummy project to determine compiler names and version
|
||||||
project (Prerequisites LANGUAGES)
|
project (Prerequisites LANGUAGES)
|
||||||
set(ENV{PKG_CONFIG_PATH} "$ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib/pkgconfig")
|
set(ENV{PKG_CONFIG_PATH} "$ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib/pkgconfig")
|
||||||
|
@ -8,81 +14,8 @@ pkg_check_modules (PETSC REQUIRED PETSc>=3.12.0 PETSc<3.16.0)
|
||||||
pkg_get_variable (CMAKE_Fortran_COMPILER PETSc fcompiler)
|
pkg_get_variable (CMAKE_Fortran_COMPILER PETSc fcompiler)
|
||||||
pkg_get_variable (CMAKE_C_COMPILER PETSc ccompiler)
|
pkg_get_variable (CMAKE_C_COMPILER PETSc ccompiler)
|
||||||
|
|
||||||
find_program (CAT_EXECUTABLE NAMES cat)
|
# Solver determines name of project
|
||||||
execute_process (COMMAND ${CAT_EXECUTABLE} ${PROJECT_SOURCE_DIR}/VERSION
|
string(TOLOWER "${DAMASK_SOLVER}" DAMASK_SOLVER)
|
||||||
RESULT_VARIABLE DAMASK_VERSION_RETURN
|
|
||||||
OUTPUT_VARIABLE DAMASK_VERSION
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------
|
|
||||||
# Find PETSc from system environment
|
|
||||||
set(PETSC_DIR $ENV{PETSC_DIR})
|
|
||||||
if (PETSC_DIR STREQUAL "")
|
|
||||||
message (FATAL_ERROR "PETSc location (PETSC_DIR) is not defined")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set (petsc_conf_variables "${PETSC_DIR}/lib/petsc/conf/variables")
|
|
||||||
set (petsc_conf_rules "${PETSC_DIR}/lib/petsc/conf/rules" )
|
|
||||||
|
|
||||||
# Use existing variables from PETSc
|
|
||||||
# https://github.com/jedbrown/cmake-modules/blob/master/FindPETSc.cmake
|
|
||||||
|
|
||||||
# Generate a temporary makefile to probe the PETSc configuration
|
|
||||||
# This file will be deleted once the settings from PETSc are parsed into CMake
|
|
||||||
exec_program (mktemp ARGS -d OUTPUT_VARIABLE TEMPDIR)
|
|
||||||
set (petsc_config_makefile "${TEMPDIR}/Makefile.petsc")
|
|
||||||
file (WRITE
|
|
||||||
"${petsc_config_makefile}"
|
|
||||||
"## This file was auto generated by CMake
|
|
||||||
# PETSC_DIR = ${PETSC_DIR}
|
|
||||||
SHELL = /bin/sh
|
|
||||||
include ${petsc_conf_rules}
|
|
||||||
include ${petsc_conf_variables}
|
|
||||||
INCLUDE_DIRS := \${PETSC_FC_INCLUDES}
|
|
||||||
LIBRARIES := \${PETSC_WITH_EXTERNAL_LIB}
|
|
||||||
includes:
|
|
||||||
\t@echo \${INCLUDE_DIRS}
|
|
||||||
extlibs:
|
|
||||||
\t@echo \${LIBRARIES}
|
|
||||||
")
|
|
||||||
|
|
||||||
# CMake will execute each target in the ${petsc_config_makefile}
|
|
||||||
# to acquire corresponding PETSc Variables.
|
|
||||||
find_program (MAKE_EXECUTABLE NAMES gmake make)
|
|
||||||
# Find the PETSc includes directory settings
|
|
||||||
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "includes"
|
|
||||||
RESULT_VARIABLE PETSC_INCLUDES_RETURN
|
|
||||||
OUTPUT_VARIABLE petsc_includes
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
# Find the PETSc external linking directory settings
|
|
||||||
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "extlibs"
|
|
||||||
RESULT_VARIABLE PETSC_EXTERNAL_LIB_RETURN
|
|
||||||
OUTPUT_VARIABLE petsc_external_lib
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
# Remove temporary makefile, no need to keep it anymore.
|
|
||||||
file (REMOVE_RECURSE ${TEMPDIR})
|
|
||||||
|
|
||||||
# Remove duplicate compiler and linker flags
|
|
||||||
string (REGEX MATCHALL "-I([^\" ]+)" TMP_LIST "${petsc_includes}")
|
|
||||||
list (REMOVE_DUPLICATES TMP_LIST)
|
|
||||||
foreach (dir ${TMP_LIST})
|
|
||||||
set (PETSC_INCLUDES "${PETSC_INCLUDES} ${dir}")
|
|
||||||
endforeach (dir)
|
|
||||||
string (REGEX MATCHALL "-[lLW]([^\" ]+)" TMP_LIST "${petsc_external_lib}")
|
|
||||||
list (REMOVE_DUPLICATES TMP_LIST)
|
|
||||||
foreach (exlib ${TMP_LIST})
|
|
||||||
set (PETSC_EXTERNAL_LIB "${PETSC_EXTERNAL_LIB} ${exlib}")
|
|
||||||
endforeach (exlib)
|
|
||||||
|
|
||||||
message ("Found PETSC_DIR:\n${PETSC_DIR}\n" )
|
|
||||||
message ("Found PETSC_INCLUDES:\n${PETSC_INCLUDES}\n" )
|
|
||||||
message ("Found PETSC_EXTERNAL_LIB:\n${PETSC_EXTERNAL_LIB}\n")
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------
|
|
||||||
# Now start to care about DAMASK
|
|
||||||
|
|
||||||
# DAMASK solver defines project to build
|
|
||||||
string(TOLOWER ${DAMASK_SOLVER} DAMASK_SOLVER)
|
|
||||||
if (DAMASK_SOLVER STREQUAL "grid")
|
if (DAMASK_SOLVER STREQUAL "grid")
|
||||||
project (damask-grid HOMEPAGE_URL https://damask.mpie.de LANGUAGES Fortran C)
|
project (damask-grid HOMEPAGE_URL https://damask.mpie.de LANGUAGES Fortran C)
|
||||||
add_definitions (-DGrid)
|
add_definitions (-DGrid)
|
||||||
|
@ -92,10 +25,13 @@ elseif (DAMASK_SOLVER STREQUAL "mesh")
|
||||||
else ()
|
else ()
|
||||||
message (FATAL_ERROR "Build target (DAMASK_SOLVER) is not defined")
|
message (FATAL_ERROR "Build target (DAMASK_SOLVER) is not defined")
|
||||||
endif ()
|
endif ()
|
||||||
add_definitions (-DDAMASKVERSION="${DAMASK_VERSION}")
|
|
||||||
add_definitions (-DPETSc)
|
|
||||||
|
|
||||||
message ("\nBuilding ${CMAKE_PROJECT_NAME}\n")
|
file (STRINGS ${PROJECT_SOURCE_DIR}/VERSION DAMASK_VERSION)
|
||||||
|
|
||||||
|
message ("\nBuilding ${CMAKE_PROJECT_NAME} ${DAMASK_VERSION}\n")
|
||||||
|
|
||||||
|
add_definitions (-DPETSc)
|
||||||
|
add_definitions (-DDAMASKVERSION="${DAMASK_VERSION}")
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL "")
|
if (CMAKE_BUILD_TYPE STREQUAL "")
|
||||||
set (CMAKE_BUILD_TYPE "RELEASE")
|
set (CMAKE_BUILD_TYPE "RELEASE")
|
||||||
|
@ -139,12 +75,22 @@ if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
|
||||||
include (Compiler-Intel)
|
include (Compiler-Intel)
|
||||||
elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
|
elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
|
||||||
include (Compiler-GNU)
|
include (Compiler-GNU)
|
||||||
elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "PGI")
|
|
||||||
include (Compiler-PGI)
|
|
||||||
else ()
|
else ()
|
||||||
message (FATAL_ERROR "Compiler type (CMAKE_Fortran_COMPILER_ID) not recognized")
|
message (FATAL_ERROR "Compiler type (CMAKE_Fortran_COMPILER_ID) not recognized")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
file (STRINGS "$ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib/petsc/conf/petscvariables" PETSC_EXTERNAL_LIB REGEX "PETSC_WITH_EXTERNAL_LIB = .*$?")
|
||||||
|
string (REGEX MATCHALL "-[lLW]([^\" ]+)" PETSC_EXTERNAL_LIB "${PETSC_EXTERNAL_LIB}")
|
||||||
|
list (REMOVE_DUPLICATES PETSC_EXTERNAL_LIB)
|
||||||
|
string (REPLACE ";" " " PETSC_EXTERNAL_LIB "${PETSC_EXTERNAL_LIB}")
|
||||||
|
message ("PETSC_EXTERNAL_LIB:\n${PETSC_EXTERNAL_LIB}\n")
|
||||||
|
|
||||||
|
file (STRINGS "$ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib/petsc/conf/petscvariables" PETSC_INCLUDES REGEX "PETSC_FC_INCLUDES = .*$?")
|
||||||
|
string (REGEX MATCHALL "-I([^\" ]+)" PETSC_INCLUDES "${PETSC_INCLUDES}")
|
||||||
|
list (REMOVE_DUPLICATES PETSC_INCLUDES)
|
||||||
|
string (REPLACE ";" " " PETSC_INCLUDES "${PETSC_INCLUDES}")
|
||||||
|
message ("PETSC_INCLUDES:\n${PETSC_INCLUDES}\n")
|
||||||
|
|
||||||
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${BUILDCMD_PRE} ${OPENMP_FLAGS} ${STANDARD_CHECK} ${OPTIMIZATION_FLAGS} ${COMPILE_FLAGS} ${PRECISION_FLAGS}")
|
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${BUILDCMD_PRE} ${OPENMP_FLAGS} ${STANDARD_CHECK} ${OPTIMIZATION_FLAGS} ${COMPILE_FLAGS} ${PRECISION_FLAGS}")
|
||||||
set (CMAKE_Fortran_LINK_EXECUTABLE "${BUILDCMD_PRE} ${CMAKE_Fortran_COMPILER} ${OPENMP_FLAGS} ${OPTIMIZATION_FLAGS} ${LINKER_FLAGS}")
|
set (CMAKE_Fortran_LINK_EXECUTABLE "${BUILDCMD_PRE} ${CMAKE_Fortran_COMPILER} ${OPENMP_FLAGS} ${OPTIMIZATION_FLAGS} ${LINKER_FLAGS}")
|
||||||
|
|
||||||
|
|
2
PRIVATE
2
PRIVATE
|
@ -1 +1 @@
|
||||||
Subproject commit be37e81b9fde6d75d0e2283be6e2389347f48622
|
Subproject commit 185cb53be76eded17565c5fa91bd9b4499cda4b8
|
|
@ -1,52 +0,0 @@
|
||||||
###################################################################################################
|
|
||||||
# PGI Compiler
|
|
||||||
###################################################################################################
|
|
||||||
|
|
||||||
if (OPENMP)
|
|
||||||
set (OPENMP_FLAGS "-mp")
|
|
||||||
else ()
|
|
||||||
set (OPENMP_FLAGS "-nomp")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
|
|
||||||
if (OPTIMIZATION STREQUAL "OFF")
|
|
||||||
set (OPTIMIZATION_FLAGS "-O0" )
|
|
||||||
elseif (OPTIMIZATION STREQUAL "DEFENSIVE")
|
|
||||||
set (OPTIMIZATION_FLAGS "-O2 -fast")
|
|
||||||
elseif (OPTIMIZATION STREQUAL "AGGRESSIVE")
|
|
||||||
set (OPTIMIZATION_FLAGS "-O4 -fast -Mvect=sse")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set (STANDARD_CHECK "-Mallocatable=03 -Mstandard")
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------------------------
|
|
||||||
# Fine tuning compilation options
|
|
||||||
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Mpreprocess")
|
|
||||||
# preprocessor
|
|
||||||
|
|
||||||
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Minfo=all")
|
|
||||||
# instructs the compiler to produce information on standard error
|
|
||||||
|
|
||||||
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Minform=warn")
|
|
||||||
# instructs the compiler to display error messages at the specified and higher levels
|
|
||||||
|
|
||||||
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Mdclchk")
|
|
||||||
# instructs the compiler to require that all program variables be declared
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------------------------O
|
|
||||||
# Runtime debugging
|
|
||||||
set (DEBUG_FLAGS "${DEBUG_FLAGS} -g")
|
|
||||||
# Includes debugging information in the object module; sets the optimization level to zero unless a -O option is present on the command line
|
|
||||||
set (DEBUG_FLAGS "${DEBUG_FLAGS} -C")
|
|
||||||
# Generates code to check array bounds
|
|
||||||
set (DEBUG_FLAGS "${DEBUG_FLAGS} -Mchkptr")
|
|
||||||
# Check for NULL pointers (pgf95, pgfortran only)
|
|
||||||
set (DEBUG_FLAGS "${DEBUG_FLAGS} -Mchkstk")
|
|
||||||
# Check the stack for available space upon entry to and before the start of a parallel region. Useful when many private variables are declared
|
|
||||||
set (DEBUG_FLAGS "${DEBUG_FLAGS} -Mbounds")
|
|
||||||
# Specifies whether array bounds checking is enabled or disabled
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------------------------
|
|
||||||
# precision settings
|
|
||||||
set (PRECISION_FLAGS "${PRECISION_FLAGS} -r8")
|
|
||||||
# Determines whether the compiler promotes REAL variables and constants to DOUBLE PRECISION
|
|
|
@ -1,7 +1,7 @@
|
||||||
TWIP_Steel_FeMnC:
|
TWIP_Steel_FeMnC:
|
||||||
lattice: cF
|
lattice: cF
|
||||||
mechanical:
|
mechanical:
|
||||||
elastic: {type: hooke, C_11: 175.0e9, C_12: 115.0e9, C_44: 135.0e9}
|
elastic: {type: Hooke, C_11: 175.0e9, C_12: 115.0e9, C_44: 135.0e9}
|
||||||
plastic:
|
plastic:
|
||||||
type: dislotwin
|
type: dislotwin
|
||||||
output: [rho_mob, rho_dip, gamma_sl, Lambda_sl, tau_pass, f_tw, Lambda_tw, tau_hat_tw, f_tr]
|
output: [rho_mob, rho_dip, gamma_sl, Lambda_sl, tau_pass, f_tw, Lambda_tw, tau_hat_tw, f_tr]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Tungsten:
|
Tungsten:
|
||||||
lattice: cI
|
lattice: cI
|
||||||
mechanical:
|
mechanical:
|
||||||
elastic: {type: hooke, C_11: 523.0e9, C_12: 202.0e9, C_44: 161.0e9} # Marinica et al. Journal of Physics: Condensed Matter(2013)
|
elastic: {type: Hooke, C_11: 523.0e9, C_12: 202.0e9, C_44: 161.0e9} # Marinica et al. Journal of Physics: Condensed Matter(2013)
|
||||||
plastic:
|
plastic:
|
||||||
type: dislotwin
|
type: dislotwin
|
||||||
D: 2.0e-5 # Average grain size / m
|
D: 2.0e-5 # Average grain size / m
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
# Kuo, J. C., Mikrostrukturmechanik von Bikristallen mit Kippkorngrenzen. Shaker-Verlag 2004. http://edoc.mpg.de/204079
|
|
||||||
Aluminum:
|
|
||||||
lattice: aP
|
|
||||||
mechanical:
|
|
||||||
output: [F, P, F_e, F_p, L_p]
|
|
||||||
elastic: {type: hooke, C_11: 110.9e9, C_12: 58.34e9}
|
|
||||||
plastic:
|
|
||||||
type: isotropic
|
|
||||||
output: [xi]
|
|
||||||
xi_0: 31e6
|
|
||||||
xi_inf: 63e6
|
|
||||||
dot_gamma_0: 0.001
|
|
||||||
n: 20
|
|
||||||
M: 3
|
|
||||||
h_0: 75e6
|
|
||||||
a: 2.25
|
|
|
@ -1,8 +1,8 @@
|
||||||
FreeSurface:
|
FreeSurface:
|
||||||
lattice: aP
|
lattice: cI
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, P, F_e, F_p, L_p]
|
output: [F, P, F_e, F_p, L_p]
|
||||||
elastic: {type: hooke, C_11: 1e8, C_12: 1e6}
|
elastic: {type: Hooke, C_11: 1e8, C_12: 1e6, C_44: 4.95e7}
|
||||||
plastic:
|
plastic:
|
||||||
type: isotropic
|
type: isotropic
|
||||||
output: [xi]
|
output: [xi]
|
||||||
|
|
|
@ -2,7 +2,7 @@ Aluminum:
|
||||||
lattice: cF
|
lattice: cF
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, P, F_e, F_p, L_p, O]
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [12]
|
N_sl: [12]
|
||||||
a_sl: 2.25
|
a_sl: 2.25
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
Ferrite:
|
Ferrite:
|
||||||
lattice: cI
|
lattice: cI
|
||||||
mechanical:
|
mechanical:
|
||||||
elastic: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: hooke}
|
elastic: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [12, 12]
|
N_sl: [12, 12]
|
||||||
a_sl: 2.0
|
a_sl: 2.0
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
Martensite:
|
Martensite:
|
||||||
lattice: cI
|
lattice: cI
|
||||||
mechanical:
|
mechanical:
|
||||||
elastic: {C_11: 417.4e9, C_12: 242.4e9, C_44: 211.1e9, type: hooke}
|
elastic: {C_11: 417.4e9, C_12: 242.4e9, C_44: 211.1e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [12, 12]
|
N_sl: [12, 12]
|
||||||
a_sl: 2.0
|
a_sl: 2.0
|
||||||
|
|
|
@ -4,7 +4,7 @@ Magnesium:
|
||||||
c/a: 1.62350
|
c/a: 1.62350
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, P, F_e, F_p, L_p, O]
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
elastic: {C_11: 59.3e9, C_12: 25.7e9, C_13: 21.4e9, C_33: 61.5e9, C_44: 16.4e9, type: hooke}
|
elastic: {C_11: 59.3e9, C_12: 25.7e9, C_13: 21.4e9, C_33: 61.5e9, C_44: 16.4e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [3, 3, 0, 6, 0, 6]
|
N_sl: [3, 3, 0, 6, 0, 6]
|
||||||
N_tw: [6, 0, 0, 6]
|
N_tw: [6, 0, 0, 6]
|
||||||
|
|
|
@ -6,7 +6,7 @@ cpTi:
|
||||||
c/a: 1.587
|
c/a: 1.587
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, P, F_e, F_p, L_p, O]
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
elastic: {C_11: 160.0e9, C_12: 90.0e9, C_13: 66.0e9, C_33: 181.7e9, C_44: 46.5e9, type: hooke}
|
elastic: {C_11: 160.0e9, C_12: 90.0e9, C_13: 66.0e9, C_33: 181.7e9, C_44: 46.5e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [3, 3, 0, 6, 12]
|
N_sl: [3, 3, 0, 6, 12]
|
||||||
a_sl: 2.0
|
a_sl: 2.0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
lattice: cF
|
|
||||||
rho: 2700
|
|
||||||
references:
|
references:
|
||||||
- en.wikipedia.org/wiki/Aluminium
|
- en.wikipedia.org/wiki/Aluminium
|
||||||
|
lattice: cF
|
||||||
|
rho: 2700.0
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Gold
|
||||||
|
lattice: cF
|
||||||
|
rho: 19300.0
|
|
@ -0,0 +1,4 @@
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Copper
|
||||||
|
lattice: cF
|
||||||
|
rho: 8960.0
|
|
@ -1,4 +1,4 @@
|
||||||
lattice: cI
|
|
||||||
rho: 7874
|
|
||||||
references:
|
references:
|
||||||
- en.wikipedia.org/wiki/Iron
|
- en.wikipedia.org/wiki/Iron
|
||||||
|
lattice: cI
|
||||||
|
rho: 7874.0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
lattice: cF
|
|
||||||
rho: 8908
|
|
||||||
references:
|
references:
|
||||||
- en.wikipedia.org/wiki/Nickel
|
- en.wikipedia.org/wiki/Nickel
|
||||||
|
lattice: cF
|
||||||
|
rho: 8908.0
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
references:
|
||||||
|
- www.totalmateria.com/page.aspx?ID=CheckArticle&site=ktn&NM=221
|
||||||
|
- en.wikipedia.org/wiki/Titanium
|
||||||
|
lattice: hP
|
||||||
|
c/a: 1.587
|
||||||
|
rho: 4506.0
|
|
@ -0,0 +1,4 @@
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Tungsten
|
||||||
|
lattice: cF
|
||||||
|
rho: 19300.0
|
|
@ -1,2 +0,0 @@
|
||||||
lattice: hP
|
|
||||||
c/a: 1.587
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
type: thermalexpansion
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Thermal_expansion
|
||||||
|
A_11: [23.1e-6]
|
||||||
|
T_ref: 293.15
|
|
@ -0,0 +1,5 @@
|
||||||
|
type: thermalexpansion
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Thermal_expansion
|
||||||
|
A_11: [14e-6]
|
||||||
|
T_ref: 293.15
|
|
@ -0,0 +1,5 @@
|
||||||
|
type: thermalexpansion
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Thermal_expansion, fitted from image description
|
||||||
|
A_11: [12.70371e-6, 7.54e-9, -1.0e-11]
|
||||||
|
T_ref: 273.0
|
|
@ -0,0 +1,5 @@
|
||||||
|
type: thermalexpansion
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Thermal_expansion
|
||||||
|
A_11: [17e-6]
|
||||||
|
T_ref: 293.15
|
|
@ -0,0 +1,5 @@
|
||||||
|
type: thermalexpansion
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Thermal_expansion
|
||||||
|
A_11: [11.8e-6]
|
||||||
|
T_ref: 293.15
|
|
@ -0,0 +1,5 @@
|
||||||
|
type: thermalexpansion
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Thermal_expansion
|
||||||
|
A_11: [4.5e-6]
|
||||||
|
T_ref: 293.15
|
|
@ -0,0 +1,5 @@
|
||||||
|
type: thermalexpansion
|
||||||
|
references:
|
||||||
|
- en.wikipedia.org/wiki/Thermal_expansion, fitted from image description
|
||||||
|
A_11: [11.365e-6, 5.0e-9]
|
||||||
|
T_ref: 273.0
|
|
@ -0,0 +1,6 @@
|
||||||
|
type: Hooke
|
||||||
|
references:
|
||||||
|
- www.mit.edu/~6.777/matprops/copper.htm, fixed typo
|
||||||
|
C_11: 168.3e9
|
||||||
|
C_12: 122.1e9
|
||||||
|
C_44: 75.7e9
|
|
@ -0,0 +1,8 @@
|
||||||
|
type: Hooke
|
||||||
|
references:
|
||||||
|
- D. Cereceda et al.,
|
||||||
|
International Journal of Plasticity, 78, 242-265, 2016,
|
||||||
|
10.1016/j.ijplas.2015.09.002
|
||||||
|
C_11: 523.e9
|
||||||
|
C_12: 202.e9
|
||||||
|
C_44: 161.e9
|
|
@ -1,7 +1,7 @@
|
||||||
type: dislotwin
|
type: dislotwin
|
||||||
references:
|
references:
|
||||||
- K. Sedighiani et al.,
|
- K. Sedighiani et al.,
|
||||||
International Journal of Plasticity, 134, 102779, 2020
|
International Journal of Plasticity, 134, 102779, 2020,
|
||||||
10.1016/j.ijplas.2020.102779
|
10.1016/j.ijplas.2020.102779
|
||||||
- K. Sedighiani et al.,
|
- K. Sedighiani et al.,
|
||||||
Mechanics of Materials, submitted
|
Mechanics of Materials, submitted
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
# parameters fitted by D. Ma to:
|
|
||||||
# On the mathematical description of the tensile stress-strain curves of polycrystalline face centered cubic metals
|
|
||||||
# International Journal of Plasticity, Volume 12, Issue 1, 1996, Pages 35-43
|
|
||||||
# DOI: 10.1016/S0749-6419(95)00043-7
|
|
||||||
type: phenopowerlaw
|
type: phenopowerlaw
|
||||||
output: [xi_sl]
|
references:
|
||||||
|
- D. Ma et al.,
|
||||||
|
Acta Materialia, 103, 796-808, 2016,
|
||||||
|
10.1016/j.actamat.2015.11.016
|
||||||
|
- I. Kovács and G.Vörös,
|
||||||
|
International Journal of Plasticity, 12, 35-43, 1996,
|
||||||
|
10.1016/S0749-6419(95)00043-7
|
||||||
|
output: [xi_sl, gamma_sl]
|
||||||
N_sl: [12]
|
N_sl: [12]
|
||||||
n_sl: 83
|
n_sl: 83.3
|
||||||
dot_gamma_0_sl: 0.001
|
dot_gamma_0_sl: 0.001
|
||||||
h_0_sl_sl: 75e6
|
h_0_sl_sl: 75.0e6
|
||||||
h_sl_sl: [1, 1, 1.4, 1.4, 1.4, 1.4, 1.4]
|
h_sl_sl: [1, 1, 1.4, 1.4, 1.4, 1.4, 1.4]
|
||||||
a_sl: 1.0
|
a_sl: 1.0
|
||||||
xi_0_sl: [26e6]
|
xi_0_sl: [26.25e6]
|
||||||
xi_inf_sl: [53e6]
|
xi_inf_sl: [53.0e6]
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
references:
|
references:
|
||||||
- www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html
|
- www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html
|
||||||
- www.engineeringtoolbox.com/specific-heat-metals-d_152.html
|
- www.engineeringtoolbox.com/specific-heat-metals-d_152.html
|
||||||
c_p: 0.91e3
|
C_p: 910.0
|
||||||
K_11: 236.0
|
K_11: 236.0
|
||||||
K_22: 236.0
|
|
||||||
K_33: 236.0
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
references:
|
||||||
|
- de.wikipedia.org/wiki/Gold
|
||||||
|
C_p: 128.0
|
||||||
|
K_11: 320.0
|
|
@ -0,0 +1,4 @@
|
||||||
|
references:
|
||||||
|
- www.mit.edu/~6.777/matprops/copper.htm
|
||||||
|
C_p: 385.0
|
||||||
|
K_11: 401.0
|
|
@ -1,7 +1,5 @@
|
||||||
references:
|
references:
|
||||||
- www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html
|
- www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html
|
||||||
- www.engineeringtoolbox.com/specific-heat-metals-d_152.html
|
- www.engineeringtoolbox.com/specific-heat-metals-d_152.html
|
||||||
c_p: 0.49e3
|
C_p: 490.0
|
||||||
K_11: 54.0
|
K_11: 54.0
|
||||||
K_22: 54.0
|
|
||||||
K_33: 54.0
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
references:
|
||||||
|
- www.mit.edu/~6.777/matprops/tungsten.htm
|
||||||
|
C_p: 132.51
|
||||||
|
K_11: 178.0
|
|
@ -1,4 +1,3 @@
|
||||||
c_p: 1
|
C_p: 1
|
||||||
K_11: 0
|
K_11: 0
|
||||||
K_22: 0
|
|
||||||
K_33: 0
|
K_33: 0
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
c_p: 1
|
C_p: 1
|
||||||
K_11: 1e30
|
K_11: 1e30
|
||||||
K_22: 1e30
|
|
||||||
K_33: 1e30
|
K_33: 1e30
|
||||||
|
|
|
@ -36,9 +36,9 @@ phase:
|
||||||
lattice: cF
|
lattice: cF
|
||||||
mechanics:
|
mechanics:
|
||||||
output: [F, P, F_e, F_p, L_p]
|
output: [F, P, F_e, F_p, L_p]
|
||||||
elasticity: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
elasticity: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
|
||||||
Steel:
|
Steel:
|
||||||
lattice: cI
|
lattice: cI
|
||||||
mechanics:
|
mechanics:
|
||||||
output: [F, P, F_e, F_p, L_p]
|
output: [F, P, F_e, F_p, L_p]
|
||||||
elasticity: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: hooke}
|
elasticity: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: Hooke}
|
||||||
|
|
|
@ -9,7 +9,7 @@ phase:
|
||||||
lattice: cF
|
lattice: cF
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, P, F_e, F_p, L_p, O]
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [12]
|
N_sl: [12]
|
||||||
a_sl: 2.25
|
a_sl: 2.25
|
||||||
|
@ -26,7 +26,7 @@ phase:
|
||||||
lattice: cI
|
lattice: cI
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, P, F_e, F_p, L_p, O]
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [12]
|
N_sl: [12]
|
||||||
a_sl: 2.25
|
a_sl: 2.25
|
||||||
|
|
|
@ -641,7 +641,7 @@ phase:
|
||||||
lattice: cF
|
lattice: cF
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, F_e, F_p, L_p]
|
output: [F, F_e, F_p, L_p]
|
||||||
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [12]
|
N_sl: [12]
|
||||||
a_sl: 2.25
|
a_sl: 2.25
|
||||||
|
@ -658,7 +658,7 @@ phase:
|
||||||
lattice: cI
|
lattice: cI
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, P, F_e, F_p, L_p, O]
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [12]
|
N_sl: [12]
|
||||||
a_sl: 2.25
|
a_sl: 2.25
|
||||||
|
@ -675,4 +675,4 @@ phase:
|
||||||
lattice: cI
|
lattice: cI
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F]
|
output: [F]
|
||||||
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
|
||||||
|
|
|
@ -9,7 +9,7 @@ phase:
|
||||||
lattice: cF
|
lattice: cF
|
||||||
mechanical:
|
mechanical:
|
||||||
output: [F, P, F_e, F_p, L_p, O]
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
|
||||||
plastic:
|
plastic:
|
||||||
N_sl: [12]
|
N_sl: [12]
|
||||||
a_sl: 2.25
|
a_sl: 2.25
|
||||||
|
|
|
@ -14,23 +14,23 @@ list(FILTER damask-sources EXCLUDE REGEX ".*commercialFEM_fileList.*.f90")
|
||||||
|
|
||||||
if (PROJECT_NAME STREQUAL "damask-grid")
|
if (PROJECT_NAME STREQUAL "damask-grid")
|
||||||
|
|
||||||
file(GLOB grid-sources grid/*.f90)
|
file(GLOB grid-sources grid/*.f90)
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE STREQUAL "SYNTAXONLY")
|
if (NOT CMAKE_BUILD_TYPE STREQUAL "SYNTAXONLY")
|
||||||
add_executable(DAMASK_grid ${damask-sources} ${grid-sources})
|
add_executable(DAMASK_grid ${damask-sources} ${grid-sources})
|
||||||
install (TARGETS DAMASK_grid RUNTIME DESTINATION bin)
|
install (TARGETS DAMASK_grid RUNTIME DESTINATION bin)
|
||||||
else()
|
else ()
|
||||||
add_library(DAMASK_grid OBJECT ${damask-sources} ${grid-sources})
|
add_library(DAMASK_grid OBJECT ${damask-sources} ${grid-sources})
|
||||||
exec_program (mktemp OUTPUT_VARIABLE nothing)
|
exec_program (mktemp OUTPUT_VARIABLE nothing)
|
||||||
exec_program (mktemp ARGS -d OUTPUT_VARIABLE black_hole)
|
exec_program (mktemp ARGS -d OUTPUT_VARIABLE black_hole)
|
||||||
install (PROGRAMS ${nothing} DESTINATION ${black_hole})
|
install (PROGRAMS ${nothing} DESTINATION ${black_hole})
|
||||||
endif()
|
endif ()
|
||||||
|
|
||||||
elseif (PROJECT_NAME STREQUAL "damask-mesh")
|
elseif (PROJECT_NAME STREQUAL "damask-mesh")
|
||||||
|
|
||||||
file(GLOB mesh-sources mesh/*.f90)
|
file(GLOB mesh-sources mesh/*.f90)
|
||||||
|
|
||||||
add_executable(DAMASK_mesh ${damask-sources} ${mesh-sources})
|
add_executable(DAMASK_mesh ${damask-sources} ${mesh-sources})
|
||||||
install (TARGETS DAMASK_mesh RUNTIME DESTINATION bin)
|
install (TARGETS DAMASK_mesh RUNTIME DESTINATION bin)
|
||||||
|
|
||||||
endif()
|
endif ()
|
||||||
|
|
|
@ -96,15 +96,10 @@ subroutine DAMASK_interface_init
|
||||||
|
|
||||||
print'(/,a)', ' Version: '//DAMASKVERSION
|
print'(/,a)', ' Version: '//DAMASKVERSION
|
||||||
|
|
||||||
! https://github.com/jeffhammond/HPCInfo/blob/master/docs/Preprocessor-Macros.md
|
|
||||||
#if defined(__PGI)
|
|
||||||
print'(/,a,i4.4,a,i8.8)', ' Compiled with PGI fortran version :', __PGIC__,&
|
|
||||||
'.', __PGIC_MINOR__
|
|
||||||
#else
|
|
||||||
print'(/,a)', ' Compiled with: '//compiler_version()
|
print'(/,a)', ' Compiled with: '//compiler_version()
|
||||||
print'(a)', ' Compiler options: '//compiler_options()
|
print'(a)', ' Compiler options: '//compiler_options()
|
||||||
#endif
|
|
||||||
|
|
||||||
|
! https://github.com/jeffhammond/HPCInfo/blob/master/docs/Preprocessor-Macros.md
|
||||||
print'(/,a)', ' Compiled on: '//__DATE__//' at '//__TIME__
|
print'(/,a)', ' Compiled on: '//__DATE__//' at '//__TIME__
|
||||||
|
|
||||||
print'(/,a,i0,a,i0,a,i0)', &
|
print'(/,a,i0,a,i0,a,i0)', &
|
||||||
|
|
|
@ -89,7 +89,7 @@ module subroutine RGC_init(num_homogMech)
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- homogenization:mechanical:RGC init -+>>>'
|
print'(/,a)', ' <<<+- homogenization:mechanical:RGC init -+>>>'
|
||||||
|
|
||||||
print'(a,i2)', ' # instances: ',count(homogenization_type == HOMOGENIZATION_RGC_ID)
|
print'(a,i0)', ' # homogenizations: ',count(homogenization_type == HOMOGENIZATION_RGC_ID)
|
||||||
flush(IO_STDOUT)
|
flush(IO_STDOUT)
|
||||||
|
|
||||||
print*, 'D.D. Tjahjanto et al., International Journal of Material Forming 2(1):939–942, 2009'
|
print*, 'D.D. Tjahjanto et al., International Journal of Material Forming 2(1):939–942, 2009'
|
||||||
|
|
|
@ -19,7 +19,7 @@ module subroutine isostrain_init
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- homogenization:mechanical:isostrain init -+>>>'
|
print'(/,a)', ' <<<+- homogenization:mechanical:isostrain init -+>>>'
|
||||||
|
|
||||||
print'(a,i2)', ' # instances: ',count(homogenization_type == HOMOGENIZATION_ISOSTRAIN_ID)
|
print'(a,i0)', ' # homogenizations: ',count(homogenization_type == HOMOGENIZATION_ISOSTRAIN_ID)
|
||||||
flush(IO_STDOUT)
|
flush(IO_STDOUT)
|
||||||
|
|
||||||
do ho = 1, size(homogenization_type)
|
do ho = 1, size(homogenization_type)
|
||||||
|
|
|
@ -19,7 +19,7 @@ module subroutine pass_init
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- homogenization:mechanical:pass init -+>>>'
|
print'(/,a)', ' <<<+- homogenization:mechanical:pass init -+>>>'
|
||||||
|
|
||||||
print'(a,i2)', ' # instances: ',count(homogenization_type == HOMOGENIZATION_NONE_ID)
|
print'(a,i0)', ' # homogenizations: ',count(homogenization_type == HOMOGENIZATION_NONE_ID)
|
||||||
flush(IO_STDOUT)
|
flush(IO_STDOUT)
|
||||||
|
|
||||||
do ho = 1, size(homogenization_type)
|
do ho = 1, size(homogenization_type)
|
||||||
|
|
184
src/lattice.f90
184
src/lattice.f90
|
@ -296,7 +296,6 @@ module lattice
|
||||||
integer, parameter :: &
|
integer, parameter :: &
|
||||||
BCT_NSLIP = sum(BCT_NSLIPSYSTEM) !< total # of slip systems for bct
|
BCT_NSLIP = sum(BCT_NSLIPSYSTEM) !< total # of slip systems for bct
|
||||||
|
|
||||||
|
|
||||||
real(pReal), dimension(3+3,BCT_NSLIP), parameter :: &
|
real(pReal), dimension(3+3,BCT_NSLIP), parameter :: &
|
||||||
BCT_SYSTEMSLIP = reshape(real([&
|
BCT_SYSTEMSLIP = reshape(real([&
|
||||||
! {100)<001] systems
|
! {100)<001] systems
|
||||||
|
@ -366,30 +365,13 @@ module lattice
|
||||||
1, 1, 1, 1,-2, 1 &
|
1, 1, 1, 1,-2, 1 &
|
||||||
],pReal),shape(BCT_SYSTEMSLIP)) !< bct slip systems for c/a = 0.5456 (Sn), sorted by Bieler 2009 (https://doi.org/10.1007/s11664-009-0909-x)
|
],pReal),shape(BCT_SYSTEMSLIP)) !< bct slip systems for c/a = 0.5456 (Sn), sorted by Bieler 2009 (https://doi.org/10.1007/s11664-009-0909-x)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! orthorhombic primitive (oP)
|
|
||||||
integer, dimension(*), parameter :: &
|
|
||||||
ORT_NCLEAVAGESYSTEM = [1, 1, 1] !< # of cleavage systems per family for orthorhombic primitive
|
|
||||||
|
|
||||||
integer, parameter :: &
|
|
||||||
ORT_NCLEAVAGE = sum(ORT_NCLEAVAGESYSTEM) !< total # of cleavage systems for orthorhombic primitive
|
|
||||||
|
|
||||||
real(pReal), dimension(3+3,ORT_NCLEAVAGE), parameter :: &
|
|
||||||
ORT_SYSTEMCLEAVAGE = reshape(real([&
|
|
||||||
0, 1, 0, 1, 0, 0, &
|
|
||||||
0, 0, 1, 0, 1, 0, &
|
|
||||||
1, 0, 0, 0, 0, 1 &
|
|
||||||
],pReal),shape(ORT_SYSTEMCLEAVAGE)) !< orthorhombic primitive cleavage systems
|
|
||||||
|
|
||||||
|
|
||||||
enum, bind(c); enumerator :: &
|
enum, bind(c); enumerator :: &
|
||||||
lattice_UNDEFINED_ID, &
|
lattice_UNDEFINED_ID, &
|
||||||
lattice_ISO_ID, &
|
|
||||||
lattice_FCC_ID, &
|
lattice_FCC_ID, &
|
||||||
lattice_BCC_ID, &
|
lattice_BCC_ID, &
|
||||||
lattice_BCT_ID, &
|
|
||||||
lattice_HEX_ID, &
|
lattice_HEX_ID, &
|
||||||
lattice_ORT_ID
|
lattice_BCT_ID
|
||||||
end enum
|
end enum
|
||||||
|
|
||||||
! SHOULD NOT BE PART OF LATTICE BEGIN
|
! SHOULD NOT BE PART OF LATTICE BEGIN
|
||||||
|
@ -414,12 +396,10 @@ module lattice
|
||||||
|
|
||||||
public :: &
|
public :: &
|
||||||
lattice_init, &
|
lattice_init, &
|
||||||
lattice_ISO_ID, &
|
|
||||||
lattice_FCC_ID, &
|
lattice_FCC_ID, &
|
||||||
lattice_BCC_ID, &
|
lattice_BCC_ID, &
|
||||||
lattice_BCT_ID, &
|
|
||||||
lattice_HEX_ID, &
|
lattice_HEX_ID, &
|
||||||
lattice_ORT_ID, &
|
lattice_BCT_ID, &
|
||||||
lattice_equivalent_nu, &
|
lattice_equivalent_nu, &
|
||||||
lattice_equivalent_mu, &
|
lattice_equivalent_mu, &
|
||||||
lattice_applyLatticeSymmetry33, &
|
lattice_applyLatticeSymmetry33, &
|
||||||
|
@ -479,13 +459,11 @@ subroutine lattice_init
|
||||||
elasticity => mech%get('elastic')
|
elasticity => mech%get('elastic')
|
||||||
lattice_C66(1,1,ph) = elasticity%get_asFloat('C_11')
|
lattice_C66(1,1,ph) = elasticity%get_asFloat('C_11')
|
||||||
lattice_C66(1,2,ph) = elasticity%get_asFloat('C_12')
|
lattice_C66(1,2,ph) = elasticity%get_asFloat('C_12')
|
||||||
|
lattice_C66(4,4,ph) = elasticity%get_asFloat('C_44')
|
||||||
|
|
||||||
lattice_C66(1,3,ph) = elasticity%get_asFloat('C_13',defaultVal=0.0_pReal)
|
lattice_C66(1,3,ph) = elasticity%get_asFloat('C_13',defaultVal=0.0_pReal)
|
||||||
lattice_C66(2,2,ph) = elasticity%get_asFloat('C_22',defaultVal=0.0_pReal)
|
|
||||||
lattice_C66(2,3,ph) = elasticity%get_asFloat('C_23',defaultVal=0.0_pReal)
|
lattice_C66(2,3,ph) = elasticity%get_asFloat('C_23',defaultVal=0.0_pReal)
|
||||||
lattice_C66(3,3,ph) = elasticity%get_asFloat('C_33',defaultVal=0.0_pReal)
|
lattice_C66(3,3,ph) = elasticity%get_asFloat('C_33',defaultVal=0.0_pReal)
|
||||||
lattice_C66(4,4,ph) = elasticity%get_asFloat('C_44',defaultVal=0.0_pReal)
|
|
||||||
lattice_C66(5,5,ph) = elasticity%get_asFloat('C_55',defaultVal=0.0_pReal)
|
|
||||||
lattice_C66(6,6,ph) = elasticity%get_asFloat('C_66',defaultVal=0.0_pReal)
|
lattice_C66(6,6,ph) = elasticity%get_asFloat('C_66',defaultVal=0.0_pReal)
|
||||||
|
|
||||||
select case(phase%get_asString('lattice'))
|
select case(phase%get_asString('lattice'))
|
||||||
|
@ -497,10 +475,6 @@ subroutine lattice_init
|
||||||
lattice_structure(ph) = lattice_HEX_ID
|
lattice_structure(ph) = lattice_HEX_ID
|
||||||
case('tI')
|
case('tI')
|
||||||
lattice_structure(ph) = lattice_BCT_ID
|
lattice_structure(ph) = lattice_BCT_ID
|
||||||
case('oP')
|
|
||||||
lattice_structure(ph) = lattice_ORT_ID
|
|
||||||
case('aP')
|
|
||||||
lattice_structure(ph) = lattice_ISO_ID
|
|
||||||
case default
|
case default
|
||||||
call IO_error(130,ext_msg='lattice_init: '//phase%get_asString('lattice'))
|
call IO_error(130,ext_msg='lattice_init: '//phase%get_asString('lattice'))
|
||||||
end select
|
end select
|
||||||
|
@ -510,7 +484,7 @@ subroutine lattice_init
|
||||||
lattice_nu(ph) = lattice_equivalent_nu(lattice_C66(1:6,1:6,ph),'voigt')
|
lattice_nu(ph) = lattice_equivalent_nu(lattice_C66(1:6,1:6,ph),'voigt')
|
||||||
lattice_mu(ph) = lattice_equivalent_mu(lattice_C66(1:6,1:6,ph),'voigt')
|
lattice_mu(ph) = lattice_equivalent_mu(lattice_C66(1:6,1:6,ph),'voigt')
|
||||||
|
|
||||||
lattice_C66(1:6,1:6,ph) = math_sym3333to66(math_Voigt66to3333(lattice_C66(1:6,1:6,ph))) ! Literature data is in Voigt notation
|
lattice_C66(1:6,1:6,ph) = math_sym3333to66(math_Voigt66to3333(lattice_C66(1:6,1:6,ph))) ! Literature data is in Voigt notation
|
||||||
do i = 1, 6
|
do i = 1, 6
|
||||||
if (abs(lattice_C66(i,i,ph))<tol_math_check) &
|
if (abs(lattice_C66(i,i,ph))<tol_math_check) &
|
||||||
call IO_error(135,el=i,ip=ph,ext_msg='matrix diagonal "el"ement of phase "ip"')
|
call IO_error(135,el=i,ip=ph,ext_msg='matrix diagonal "el"ement of phase "ip"')
|
||||||
|
@ -1564,9 +1538,6 @@ function lattice_SchmidMatrix_cleavage(Ncleavage,structure,cOverA) result(Schmid
|
||||||
integer :: i
|
integer :: i
|
||||||
|
|
||||||
select case(structure)
|
select case(structure)
|
||||||
case('oP')
|
|
||||||
NcleavageMax = ORT_NCLEAVAGESYSTEM
|
|
||||||
cleavageSystems = ORT_SYSTEMCLEAVAGE
|
|
||||||
case('cF')
|
case('cF')
|
||||||
NcleavageMax = FCC_NCLEAVAGESYSTEM
|
NcleavageMax = FCC_NCLEAVAGESYSTEM
|
||||||
cleavageSystems = FCC_SYSTEMCLEAVAGE
|
cleavageSystems = FCC_SYSTEMCLEAVAGE
|
||||||
|
@ -1692,32 +1663,25 @@ end function lattice_labels_slip
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Return 3x3 tensor with symmetry according to given crystal structure
|
!> @brief Return 3x3 tensor with symmetry according to given crystal structure
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function lattice_applyLatticeSymmetry33(T,structure) result(T_sym)
|
pure function lattice_applyLatticeSymmetry33(T,structure) result(T_sym)
|
||||||
|
|
||||||
real(pReal), dimension(3,3) :: T_sym
|
real(pReal), dimension(3,3) :: T_sym
|
||||||
|
|
||||||
real(pReal), dimension(3,3), intent(in) :: T
|
real(pReal), dimension(3,3), intent(in) :: T
|
||||||
character(len=*), intent(in) :: structure
|
character(len=*), intent(in) :: structure
|
||||||
|
|
||||||
integer :: k
|
|
||||||
|
|
||||||
T_sym = 0.0_pReal
|
T_sym = 0.0_pReal
|
||||||
|
|
||||||
select case(structure)
|
select case(structure)
|
||||||
case('aP','cF','cI')
|
case('cF','cI')
|
||||||
do k=1,3
|
T_sym(1,1) = T(1,1)
|
||||||
T_sym(k,k) = T(1,1)
|
T_sym(2,2) = T(1,1)
|
||||||
enddo
|
T_sym(3,3) = T(1,1)
|
||||||
case('hP')
|
case('hP','tI')
|
||||||
T_sym(1,1) = T(1,1)
|
T_sym(1,1) = T(1,1)
|
||||||
T_sym(2,2) = T(1,1)
|
T_sym(2,2) = T(1,1)
|
||||||
T_sym(3,3) = T(3,3)
|
T_sym(3,3) = T(3,3)
|
||||||
case('oP','tI')
|
|
||||||
T_sym(1,1) = T(1,1)
|
|
||||||
T_sym(2,2) = T(2,2)
|
|
||||||
T_sym(3,3) = T(3,3)
|
|
||||||
case default
|
|
||||||
call IO_error(137,ext_msg='lattice_applyLatticeSymmetry33: '//trim(structure))
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
end function lattice_applyLatticeSymmetry33
|
end function lattice_applyLatticeSymmetry33
|
||||||
|
@ -1727,77 +1691,45 @@ end function lattice_applyLatticeSymmetry33
|
||||||
!> @brief Return stiffness matrix in 6x6 notation with symmetry according to given crystal structure
|
!> @brief Return stiffness matrix in 6x6 notation with symmetry according to given crystal structure
|
||||||
!> @details J. A. Rayne and B. S. Chandrasekhar Phys. Rev. 120, 1658 Erratum Phys. Rev. 122, 1962
|
!> @details J. A. Rayne and B. S. Chandrasekhar Phys. Rev. 120, 1658 Erratum Phys. Rev. 122, 1962
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function applyLatticeSymmetryC66(C66,structure) result(C66_sym)
|
pure function applyLatticeSymmetryC66(C66,structure) result(C66_sym)
|
||||||
|
|
||||||
real(pReal), dimension(6,6) :: C66_sym
|
real(pReal), dimension(6,6) :: C66_sym
|
||||||
|
|
||||||
real(pReal), dimension(6,6), intent(in) :: C66
|
real(pReal), dimension(6,6), intent(in) :: C66
|
||||||
character(len=*), intent(in) :: structure
|
character(len=*), intent(in) :: structure
|
||||||
|
|
||||||
integer :: j,k
|
integer :: i,j
|
||||||
|
|
||||||
|
|
||||||
C66_sym = 0.0_pReal
|
C66_sym = 0.0_pReal
|
||||||
|
|
||||||
select case(structure)
|
select case(structure)
|
||||||
case ('aP')
|
|
||||||
do k=1,3
|
|
||||||
do j=1,3
|
|
||||||
C66_sym(k,j) = C66(1,2)
|
|
||||||
enddo
|
|
||||||
C66_sym(k,k) = C66(1,1)
|
|
||||||
C66_sym(k+3,k+3) = 0.5_pReal*(C66(1,1)-C66(1,2))
|
|
||||||
enddo
|
|
||||||
case ('cF','cI')
|
case ('cF','cI')
|
||||||
do k=1,3
|
C66_sym(1,1) = C66(1,1); C66_sym(2,2) = C66(1,1); C66_sym(3,3) = C66(1,1)
|
||||||
do j=1,3
|
C66_sym(1,2) = C66(1,2); C66_sym(1,3) = C66(1,2); C66_sym(2,3) = C66(1,2)
|
||||||
C66_sym(k,j) = C66(1,2)
|
C66_sym(4,4) = C66(4,4); C66_sym(5,5) = C66(4,4); C66_sym(6,6) = C66(4,4) ! isotropic C_44 = (C_11-C_12)/2
|
||||||
enddo
|
|
||||||
C66_sym(k,k) = C66(1,1)
|
|
||||||
C66_sym(k+3,k+3) = C66(4,4)
|
|
||||||
enddo
|
|
||||||
case ('hP')
|
case ('hP')
|
||||||
C66_sym(1,1) = C66(1,1)
|
C66_sym(1,1) = C66(1,1); C66_sym(2,2) = C66(1,1)
|
||||||
C66_sym(2,2) = C66(1,1)
|
|
||||||
C66_sym(3,3) = C66(3,3)
|
C66_sym(3,3) = C66(3,3)
|
||||||
C66_sym(1,2) = C66(1,2)
|
C66_sym(1,2) = C66(1,2)
|
||||||
C66_sym(2,1) = C66(1,2)
|
C66_sym(1,3) = C66(1,3); C66_sym(2,3) = C66(1,3)
|
||||||
C66_sym(1,3) = C66(1,3)
|
C66_sym(4,4) = C66(4,4); C66_sym(5,5) = C66(4,4)
|
||||||
C66_sym(3,1) = C66(1,3)
|
|
||||||
C66_sym(2,3) = C66(1,3)
|
|
||||||
C66_sym(3,2) = C66(1,3)
|
|
||||||
C66_sym(4,4) = C66(4,4)
|
|
||||||
C66_sym(5,5) = C66(4,4)
|
|
||||||
C66_sym(6,6) = 0.5_pReal*(C66(1,1)-C66(1,2))
|
C66_sym(6,6) = 0.5_pReal*(C66(1,1)-C66(1,2))
|
||||||
case ('oP')
|
|
||||||
C66_sym(1,1) = C66(1,1)
|
|
||||||
C66_sym(2,2) = C66(2,2)
|
|
||||||
C66_sym(3,3) = C66(3,3)
|
|
||||||
C66_sym(1,2) = C66(1,2)
|
|
||||||
C66_sym(2,1) = C66(1,2)
|
|
||||||
C66_sym(1,3) = C66(1,3)
|
|
||||||
C66_sym(3,1) = C66(1,3)
|
|
||||||
C66_sym(2,3) = C66(2,3)
|
|
||||||
C66_sym(3,2) = C66(2,3)
|
|
||||||
C66_sym(4,4) = C66(4,4)
|
|
||||||
C66_sym(5,5) = C66(5,5)
|
|
||||||
C66_sym(6,6) = C66(6,6)
|
|
||||||
case ('tI')
|
case ('tI')
|
||||||
C66_sym(1,1) = C66(1,1)
|
C66_sym(1,1) = C66(1,1); C66_sym(2,2) = C66(1,1)
|
||||||
C66_sym(2,2) = C66(1,1)
|
|
||||||
C66_sym(3,3) = C66(3,3)
|
C66_sym(3,3) = C66(3,3)
|
||||||
C66_sym(1,2) = C66(1,2)
|
C66_sym(1,2) = C66(1,2)
|
||||||
C66_sym(2,1) = C66(1,2)
|
C66_sym(1,3) = C66(1,3); C66_sym(2,3) = C66(1,3)
|
||||||
C66_sym(1,3) = C66(1,3)
|
C66_sym(4,4) = C66(4,4); C66_sym(5,5) = C66(4,4)
|
||||||
C66_sym(3,1) = C66(1,3)
|
|
||||||
C66_sym(2,3) = C66(1,3)
|
|
||||||
C66_sym(3,2) = C66(1,3)
|
|
||||||
C66_sym(4,4) = C66(4,4)
|
|
||||||
C66_sym(5,5) = C66(4,4)
|
|
||||||
C66_sym(6,6) = C66(6,6)
|
C66_sym(6,6) = C66(6,6)
|
||||||
case default
|
|
||||||
call IO_error(137,ext_msg='applyLatticeSymmetryC66: '//trim(structure))
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
|
do i = 1, 6
|
||||||
|
do j = i+1, 6
|
||||||
|
C66_sym(j,i) = C66_sym(i,j)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
end function applyLatticeSymmetryC66
|
end function applyLatticeSymmetryC66
|
||||||
|
|
||||||
|
|
||||||
|
@ -2011,7 +1943,7 @@ function buildCoordinateSystem(active,potential,system,structure,cOverA)
|
||||||
|
|
||||||
select case(structure)
|
select case(structure)
|
||||||
|
|
||||||
case ('cF','cI','aP','oP','tI')
|
case ('cF','cI','tI')
|
||||||
direction = system(1:3,p)
|
direction = system(1:3,p)
|
||||||
normal = system(4:6,p)
|
normal = system(4:6,p)
|
||||||
|
|
||||||
|
@ -2246,7 +2178,6 @@ function lattice_equivalent_nu(C,assumption) result(nu)
|
||||||
/ (S(1,1)+S(2,2)+S(3,3) +2.0_pReal*(S(1,2)+S(2,3)+S(1,3)))
|
/ (S(1,1)+S(2,2)+S(3,3) +2.0_pReal*(S(1,2)+S(2,3)+S(1,3)))
|
||||||
else
|
else
|
||||||
error stop 'invalid assumption'
|
error stop 'invalid assumption'
|
||||||
K = 0.0_pReal
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
mu = lattice_equivalent_mu(C,assumption)
|
mu = lattice_equivalent_mu(C,assumption)
|
||||||
|
@ -2279,7 +2210,6 @@ function lattice_equivalent_mu(C,assumption) result(mu)
|
||||||
/ (4.0_pReal*(S(1,1)+S(2,2)+S(3,3)) -4.0_pReal*(S(1,2)+S(2,3)+S(1,3)) +3.0_pReal*(S(4,4)+S(5,5)+S(6,6)))
|
/ (4.0_pReal*(S(1,1)+S(2,2)+S(3,3)) -4.0_pReal*(S(1,2)+S(2,3)+S(1,3)) +3.0_pReal*(S(4,4)+S(5,5)+S(6,6)))
|
||||||
else
|
else
|
||||||
error stop 'invalid assumption'
|
error stop 'invalid assumption'
|
||||||
mu = 0.0_pReal
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
end function lattice_equivalent_mu
|
end function lattice_equivalent_mu
|
||||||
|
@ -2293,9 +2223,12 @@ subroutine selfTest
|
||||||
real(pReal), dimension(:,:,:), allocatable :: CoSy
|
real(pReal), dimension(:,:,:), allocatable :: CoSy
|
||||||
real(pReal), dimension(:,:), allocatable :: system
|
real(pReal), dimension(:,:), allocatable :: system
|
||||||
|
|
||||||
real(pReal), dimension(6,6) :: C
|
real(pReal), dimension(6,6) :: C, C_cF, C_cI, C_hP, C_tI
|
||||||
|
real(pReal), dimension(3,3) :: T, T_cF, T_cI, T_hP, T_tI
|
||||||
real(pReal), dimension(2) :: r
|
real(pReal), dimension(2) :: r
|
||||||
real(pReal) :: lambda
|
real(pReal) :: lambda
|
||||||
|
integer :: i
|
||||||
|
|
||||||
|
|
||||||
call random_number(r)
|
call random_number(r)
|
||||||
|
|
||||||
|
@ -2303,11 +2236,52 @@ subroutine selfTest
|
||||||
CoSy = buildCoordinateSystem([1],[1],system,'cF',0.0_pReal)
|
CoSy = buildCoordinateSystem([1],[1],system,'cF',0.0_pReal)
|
||||||
if(any(dNeq(CoSy(1:3,1:3,1),math_I3))) error stop 'buildCoordinateSystem'
|
if(any(dNeq(CoSy(1:3,1:3,1),math_I3))) error stop 'buildCoordinateSystem'
|
||||||
|
|
||||||
|
do i = 1, 10
|
||||||
|
call random_number(C)
|
||||||
|
C_cF = applyLatticeSymmetryC66(C,'cI')
|
||||||
|
C_cI = applyLatticeSymmetryC66(C,'cF')
|
||||||
|
C_hP = applyLatticeSymmetryC66(C,'hP')
|
||||||
|
C_tI = applyLatticeSymmetryC66(C,'tI')
|
||||||
|
|
||||||
|
if (any(dNeq(C_cI,transpose(C_cF)))) error stop 'SymmetryC66/cI-cF'
|
||||||
|
if (any(dNeq(C_cF,transpose(C_cI)))) error stop 'SymmetryC66/cF-cI'
|
||||||
|
if (any(dNeq(C_hP,transpose(C_hP)))) error stop 'SymmetryC66/hP'
|
||||||
|
if (any(dNeq(C_tI,transpose(C_tI)))) error stop 'SymmetryC66/tI'
|
||||||
|
|
||||||
|
if (any(dNeq(C(1,1),[C_cF(1,1),C_cF(2,2),C_cF(3,3)]))) error stop 'SymmetryC_11-22-33/c'
|
||||||
|
if (any(dNeq(C(1,2),[C_cF(1,2),C_cF(1,3),C_cF(2,3)]))) error stop 'SymmetryC_12-13-23/c'
|
||||||
|
if (any(dNeq(C(4,4),[C_cF(4,4),C_cF(5,5),C_cF(6,6)]))) error stop 'SymmetryC_44-55-66/c'
|
||||||
|
|
||||||
|
if (any(dNeq(C(1,1),[C_hP(1,1),C_hP(2,2)]))) error stop 'SymmetryC_11-22/hP'
|
||||||
|
if (any(dNeq(C(1,3),[C_hP(1,3),C_hP(2,3)]))) error stop 'SymmetryC_13-23/hP'
|
||||||
|
if (any(dNeq(C(4,4),[C_hP(4,4),C_hP(5,5)]))) error stop 'SymmetryC_44-55/hP'
|
||||||
|
|
||||||
|
if (any(dNeq(C(1,1),[C_tI(1,1),C_tI(2,2)]))) error stop 'SymmetryC_11-22/tI'
|
||||||
|
if (any(dNeq(C(1,3),[C_tI(1,3),C_tI(2,3)]))) error stop 'SymmetryC_13-23/tI'
|
||||||
|
if (any(dNeq(C(4,4),[C_tI(4,4),C_tI(5,5)]))) error stop 'SymmetryC_44-55/tI'
|
||||||
|
|
||||||
|
call random_number(T)
|
||||||
|
T_cF = lattice_applyLatticeSymmetry33(T,'cI')
|
||||||
|
T_cI = lattice_applyLatticeSymmetry33(T,'cF')
|
||||||
|
T_hP = lattice_applyLatticeSymmetry33(T,'hP')
|
||||||
|
T_tI = lattice_applyLatticeSymmetry33(T,'tI')
|
||||||
|
|
||||||
|
if (any(dNeq0(T_cF) .and. math_I3<1.0_pReal)) error stop 'Symmetry33/c'
|
||||||
|
if (any(dNeq0(T_hP) .and. math_I3<1.0_pReal)) error stop 'Symmetry33/hP'
|
||||||
|
if (any(dNeq0(T_tI) .and. math_I3<1.0_pReal)) error stop 'Symmetry33/tI'
|
||||||
|
|
||||||
|
if (any(dNeq(T(1,1),[T_cI(1,1),T_cI(2,2),T_cI(3,3)]))) error stop 'Symmetry33_11-22-33/c'
|
||||||
|
if (any(dNeq(T(1,1),[T_hP(1,1),T_hP(2,2)]))) error stop 'Symmetry33_11-22/hP'
|
||||||
|
if (any(dNeq(T(1,1),[T_tI(1,1),T_tI(2,2)]))) error stop 'Symmetry33_11-22/tI'
|
||||||
|
|
||||||
|
enddo
|
||||||
|
|
||||||
call random_number(C)
|
call random_number(C)
|
||||||
C(1,1) = C(1,1) + 1.0_pReal
|
C(1,1) = C(1,1) + C(1,2) + 0.1_pReal
|
||||||
C = applyLatticeSymmetryC66(C,'aP')
|
C(4,4) = 0.5_pReal * (C(1,1) - C(1,2))
|
||||||
if(dNeq(C(6,6),lattice_equivalent_mu(C,'voigt'),1.0e-12_pReal)) error stop 'equivalent_mu/voigt'
|
C = applyLatticeSymmetryC66(C,'cI')
|
||||||
if(dNeq(C(6,6),lattice_equivalent_mu(C,'voigt'),1.0e-12_pReal)) error stop 'equivalent_mu/reuss'
|
if(dNeq(C(4,4),lattice_equivalent_mu(C,'voigt'),1.0e-12_pReal)) error stop 'equivalent_mu/voigt'
|
||||||
|
if(dNeq(C(4,4),lattice_equivalent_mu(C,'reuss'),1.0e-12_pReal)) error stop 'equivalent_mu/reuss'
|
||||||
|
|
||||||
lambda = C(1,2)
|
lambda = C(1,2)
|
||||||
if(dNeq(lambda*0.5_pReal/(lambda+lattice_equivalent_mu(C,'voigt')), &
|
if(dNeq(lambda*0.5_pReal/(lambda+lattice_equivalent_mu(C,'voigt')), &
|
||||||
|
|
|
@ -121,7 +121,6 @@ module subroutine damage_init
|
||||||
source => sources%get(1)
|
source => sources%get(1)
|
||||||
param(ph)%mu = source%get_asFloat('M',defaultVal=0.0_pReal)
|
param(ph)%mu = source%get_asFloat('M',defaultVal=0.0_pReal)
|
||||||
param(ph)%K(1,1) = source%get_asFloat('D_11',defaultVal=0.0_pReal)
|
param(ph)%K(1,1) = source%get_asFloat('D_11',defaultVal=0.0_pReal)
|
||||||
param(ph)%K(2,2) = source%get_asFloat('D_22',defaultVal=0.0_pReal)
|
|
||||||
param(ph)%K(3,3) = source%get_asFloat('D_33',defaultVal=0.0_pReal)
|
param(ph)%K(3,3) = source%get_asFloat('D_33',defaultVal=0.0_pReal)
|
||||||
param(ph)%K = lattice_applyLatticeSymmetry33(param(ph)%K,phase%get_asString('lattice'))
|
param(ph)%K = lattice_applyLatticeSymmetry33(param(ph)%K,phase%get_asString('lattice'))
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -904,56 +904,52 @@ subroutine crystallite_results(group,ph)
|
||||||
character(len=:), allocatable :: structureLabel
|
character(len=:), allocatable :: structureLabel
|
||||||
|
|
||||||
|
|
||||||
call results_closeGroup(results_addGroup(group//'/mechanical'))
|
call results_closeGroup(results_addGroup(group//'/mechanical'))
|
||||||
|
|
||||||
do ou = 1, size(output_constituent(ph)%label)
|
do ou = 1, size(output_constituent(ph)%label)
|
||||||
|
|
||||||
select case (output_constituent(ph)%label(ou))
|
select case (output_constituent(ph)%label(ou))
|
||||||
case('F')
|
case('F')
|
||||||
call results_writeDataset(group//'/mechanical/',phase_mechanical_F(ph)%data,'F',&
|
call results_writeDataset(group//'/mechanical/',phase_mechanical_F(ph)%data,'F',&
|
||||||
'deformation gradient','1')
|
'deformation gradient','1')
|
||||||
case('F_e')
|
case('F_e')
|
||||||
call results_writeDataset(group//'/mechanical/',phase_mechanical_Fe(ph)%data,'F_e',&
|
call results_writeDataset(group//'/mechanical/',phase_mechanical_Fe(ph)%data,'F_e',&
|
||||||
'elastic deformation gradient','1')
|
'elastic deformation gradient','1')
|
||||||
case('F_p')
|
case('F_p')
|
||||||
call results_writeDataset(group//'/mechanical/',phase_mechanical_Fp(ph)%data,'F_p', &
|
call results_writeDataset(group//'/mechanical/',phase_mechanical_Fp(ph)%data,'F_p', &
|
||||||
'plastic deformation gradient','1')
|
'plastic deformation gradient','1')
|
||||||
case('F_i')
|
case('F_i')
|
||||||
call results_writeDataset(group//'/mechanical/',phase_mechanical_Fi(ph)%data,'F_i', &
|
call results_writeDataset(group//'/mechanical/',phase_mechanical_Fi(ph)%data,'F_i', &
|
||||||
'inelastic deformation gradient','1')
|
'inelastic deformation gradient','1')
|
||||||
case('L_p')
|
case('L_p')
|
||||||
call results_writeDataset(group//'/mechanical/',phase_mechanical_Lp(ph)%data,'L_p', &
|
call results_writeDataset(group//'/mechanical/',phase_mechanical_Lp(ph)%data,'L_p', &
|
||||||
'plastic velocity gradient','1/s')
|
'plastic velocity gradient','1/s')
|
||||||
case('L_i')
|
case('L_i')
|
||||||
call results_writeDataset(group//'/mechanical/',phase_mechanical_Li(ph)%data,'L_i', &
|
call results_writeDataset(group//'/mechanical/',phase_mechanical_Li(ph)%data,'L_i', &
|
||||||
'inelastic velocity gradient','1/s')
|
'inelastic velocity gradient','1/s')
|
||||||
case('P')
|
case('P')
|
||||||
call results_writeDataset(group//'/mechanical/',phase_mechanical_P(ph)%data,'P', &
|
call results_writeDataset(group//'/mechanical/',phase_mechanical_P(ph)%data,'P', &
|
||||||
'first Piola-Kirchhoff stress','Pa')
|
'first Piola-Kirchhoff stress','Pa')
|
||||||
case('S')
|
case('S')
|
||||||
call results_writeDataset(group//'/mechanical/',phase_mechanical_S(ph)%data,'S', &
|
call results_writeDataset(group//'/mechanical/',phase_mechanical_S(ph)%data,'S', &
|
||||||
'second Piola-Kirchhoff stress','Pa')
|
'second Piola-Kirchhoff stress','Pa')
|
||||||
case('O')
|
case('O')
|
||||||
select case(lattice_structure(ph))
|
select case(lattice_structure(ph))
|
||||||
case(lattice_ISO_ID)
|
case(lattice_FCC_ID)
|
||||||
structureLabel = 'aP'
|
structureLabel = 'cF'
|
||||||
case(lattice_FCC_ID)
|
case(lattice_BCC_ID)
|
||||||
structureLabel = 'cF'
|
structureLabel = 'cI'
|
||||||
case(lattice_BCC_ID)
|
case(lattice_HEX_ID)
|
||||||
structureLabel = 'cI'
|
structureLabel = 'hP'
|
||||||
case(lattice_BCT_ID)
|
case(lattice_BCT_ID)
|
||||||
structureLabel = 'tI'
|
structureLabel = 'tI'
|
||||||
case(lattice_HEX_ID)
|
end select
|
||||||
structureLabel = 'hP'
|
selected_rotations = select_rotations(phase_orientation(ph)%data)
|
||||||
case(lattice_ORT_ID)
|
call results_writeDataset(group//'/mechanical',selected_rotations,output_constituent(ph)%label(ou),&
|
||||||
structureLabel = 'oP'
|
'crystal orientation as quaternion','q_0 (q_1 q_2 q_3)')
|
||||||
end select
|
call results_addAttribute('lattice',structureLabel,group//'/mechanical/'//output_constituent(ph)%label(ou))
|
||||||
selected_rotations = select_rotations(phase_orientation(ph)%data)
|
end select
|
||||||
call results_writeDataset(group//'/mechanical',selected_rotations,output_constituent(ph)%label(ou),&
|
enddo
|
||||||
'crystal orientation as quaternion','q_0 (q_1 q_2 q_3)')
|
|
||||||
call results_addAttribute('lattice',structureLabel,group//'/mechanical/'//output_constituent(ph)%label(ou))
|
|
||||||
end select
|
|
||||||
enddo
|
|
||||||
|
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
|
@ -70,7 +70,7 @@ module subroutine eigendeformation_init(phases)
|
||||||
allocate(model_damage(phases%length), source = KINEMATICS_UNDEFINED_ID)
|
allocate(model_damage(phases%length), source = KINEMATICS_UNDEFINED_ID)
|
||||||
|
|
||||||
where(damage_anisobrittle_init()) model_damage = KINEMATICS_cleavage_opening_ID
|
where(damage_anisobrittle_init()) model_damage = KINEMATICS_cleavage_opening_ID
|
||||||
where(damage_isoductile_init()) model_damage = KINEMATICS_slipplane_opening_ID
|
where(damage_isoductile_init()) model_damage = KINEMATICS_slipplane_opening_ID
|
||||||
|
|
||||||
|
|
||||||
end subroutine eigendeformation_init
|
end subroutine eigendeformation_init
|
||||||
|
|
|
@ -33,14 +33,15 @@ module function thermalexpansion_init(kinematics_length) result(myKinematics)
|
||||||
class(tNode), pointer :: &
|
class(tNode), pointer :: &
|
||||||
phases, &
|
phases, &
|
||||||
phase, &
|
phase, &
|
||||||
|
mech, &
|
||||||
kinematics, &
|
kinematics, &
|
||||||
kinematic_type
|
kinematic_type
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- phase:mechanical:eigen:thermalexpansion init -+>>>'
|
print'(/,a)', ' <<<+- phase:mechanical:eigen:thermalexpansion init -+>>>'
|
||||||
|
|
||||||
myKinematics = kinematics_active('thermal_expansion',kinematics_length)
|
myKinematics = kinematics_active('thermalexpansion',kinematics_length)
|
||||||
Ninstances = count(myKinematics)
|
Ninstances = count(myKinematics)
|
||||||
print'(a,i2)', ' # instances: ',Ninstances; flush(IO_STDOUT)
|
print'(a,i2)', ' # phases: ',Ninstances; flush(IO_STDOUT)
|
||||||
if(Ninstances == 0) return
|
if(Ninstances == 0) return
|
||||||
|
|
||||||
phases => config_material%get('phase')
|
phases => config_material%get('phase')
|
||||||
|
@ -51,7 +52,8 @@ module function thermalexpansion_init(kinematics_length) result(myKinematics)
|
||||||
if(any(myKinematics(:,p))) kinematics_thermal_expansion_instance(p) = count(myKinematics(:,1:p))
|
if(any(myKinematics(:,p))) kinematics_thermal_expansion_instance(p) = count(myKinematics(:,1:p))
|
||||||
phase => phases%get(p)
|
phase => phases%get(p)
|
||||||
if(count(myKinematics(:,p)) == 0) cycle
|
if(count(myKinematics(:,p)) == 0) cycle
|
||||||
kinematics => phase%get('kinematics')
|
mech => phase%get('mechanical')
|
||||||
|
kinematics => mech%get('eigen')
|
||||||
do k = 1, kinematics%length
|
do k = 1, kinematics%length
|
||||||
if(myKinematics(k,p)) then
|
if(myKinematics(k,p)) then
|
||||||
associate(prm => param(kinematics_thermal_expansion_instance(p)))
|
associate(prm => param(kinematics_thermal_expansion_instance(p)))
|
||||||
|
@ -62,15 +64,12 @@ module function thermalexpansion_init(kinematics_length) result(myKinematics)
|
||||||
! read up to three parameters (constant, linear, quadratic with T)
|
! read up to three parameters (constant, linear, quadratic with T)
|
||||||
temp = kinematic_type%get_as1dFloat('A_11')
|
temp = kinematic_type%get_as1dFloat('A_11')
|
||||||
prm%A(1,1,1:size(temp)) = temp
|
prm%A(1,1,1:size(temp)) = temp
|
||||||
temp = kinematic_type%get_as1dFloat('A_22',defaultVal=[(0.0_pReal, i=1,size(temp))],requiredSize=size(temp))
|
|
||||||
prm%A(2,2,1:size(temp)) = temp
|
|
||||||
temp = kinematic_type%get_as1dFloat('A_33',defaultVal=[(0.0_pReal, i=1,size(temp))],requiredSize=size(temp))
|
temp = kinematic_type%get_as1dFloat('A_33',defaultVal=[(0.0_pReal, i=1,size(temp))],requiredSize=size(temp))
|
||||||
prm%A(3,3,1:size(temp)) = temp
|
prm%A(3,3,1:size(temp)) = temp
|
||||||
do i=1, size(prm%A,3)
|
do i=1, size(prm%A,3)
|
||||||
prm%A(1:3,1:3,i) = lattice_applyLatticeSymmetry33(prm%A(1:3,1:3,i),&
|
prm%A(1:3,1:3,i) = lattice_applyLatticeSymmetry33(prm%A(1:3,1:3,i),&
|
||||||
phase%get_asString('lattice'))
|
phase%get_asString('lattice'))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
@ -93,21 +92,22 @@ module subroutine thermalexpansion_LiAndItsTangent(Li, dLi_dTstar, ph,me)
|
||||||
|
|
||||||
real(pReal) :: T, dot_T
|
real(pReal) :: T, dot_T
|
||||||
|
|
||||||
|
|
||||||
T = thermal_T(ph,me)
|
T = thermal_T(ph,me)
|
||||||
dot_T = thermal_dot_T(ph,me)
|
dot_T = thermal_dot_T(ph,me)
|
||||||
|
|
||||||
associate(prm => param(kinematics_thermal_expansion_instance(ph)))
|
associate(prm => param(kinematics_thermal_expansion_instance(ph)))
|
||||||
Li = dot_T * ( &
|
Li = dot_T * ( &
|
||||||
prm%A(1:3,1:3,1)*(T - prm%T_ref)**0 & ! constant coefficient
|
prm%A(1:3,1:3,1)*(T - prm%T_ref)**0 & ! constant coefficient
|
||||||
+ prm%A(1:3,1:3,2)*(T - prm%T_ref)**1 & ! linear coefficient
|
+ prm%A(1:3,1:3,2)*(T - prm%T_ref)**1 & ! linear coefficient
|
||||||
+ prm%A(1:3,1:3,3)*(T - prm%T_ref)**2 & ! quadratic coefficient
|
+ prm%A(1:3,1:3,3)*(T - prm%T_ref)**2 & ! quadratic coefficient
|
||||||
) / &
|
) / &
|
||||||
(1.0_pReal &
|
(1.0_pReal &
|
||||||
+ prm%A(1:3,1:3,1)*(T - prm%T_ref)**1 / 1. &
|
+ prm%A(1:3,1:3,1)*(T - prm%T_ref)**1 / 1. &
|
||||||
+ prm%A(1:3,1:3,2)*(T - prm%T_ref)**2 / 2. &
|
+ prm%A(1:3,1:3,2)*(T - prm%T_ref)**2 / 2. &
|
||||||
+ prm%A(1:3,1:3,3)*(T - prm%T_ref)**3 / 3. &
|
+ prm%A(1:3,1:3,3)*(T - prm%T_ref)**3 / 3. &
|
||||||
)
|
)
|
||||||
end associate
|
end associate
|
||||||
dLi_dTstar = 0.0_pReal
|
dLi_dTstar = 0.0_pReal
|
||||||
|
|
||||||
end subroutine thermalexpansion_LiAndItsTangent
|
end subroutine thermalexpansion_LiAndItsTangent
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
submodule(phase:mechanical) elastic
|
submodule(phase:mechanical) elastic
|
||||||
|
|
||||||
enum, bind(c); enumerator :: &
|
type :: tParameters
|
||||||
ELASTICITY_UNDEFINED_ID, &
|
real(pReal), dimension(6,6) :: &
|
||||||
ELASTICITY_HOOKE_ID
|
C66 !< Elastic constants in Voig notation
|
||||||
end enum
|
end type tParameters
|
||||||
|
|
||||||
integer(kind(ELASTICITY_UNDEFINED_ID)), dimension(:), allocatable :: &
|
type(tParameters), allocatable, dimension(:) :: param
|
||||||
phase_elasticity !< elasticity of each phase
|
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
|
@ -22,20 +21,37 @@ module subroutine elastic_init(phases)
|
||||||
phase, &
|
phase, &
|
||||||
mech, &
|
mech, &
|
||||||
elastic
|
elastic
|
||||||
|
character(len=:), allocatable :: struct
|
||||||
print'(/,a)', ' <<<+- phase:mechanical:elastic init -+>>>'
|
|
||||||
|
|
||||||
allocate(phase_elasticity(phases%length), source = ELASTICITY_undefined_ID)
|
|
||||||
|
print'(/,a)', ' <<<+- phase:mechanical:elastic init -+>>>'
|
||||||
|
print'(/,a)', ' <<<+- phase:mechanical:elastic:Hooke init -+>>>'
|
||||||
|
|
||||||
|
print'(a,i0)', ' # phases: ',phases%length; flush(IO_STDOUT)
|
||||||
|
|
||||||
|
allocate(param(phases%length))
|
||||||
|
|
||||||
do ph = 1, phases%length
|
do ph = 1, phases%length
|
||||||
phase => phases%get(ph)
|
phase => phases%get(ph)
|
||||||
mech => phase%get('mechanical')
|
mech => phase%get('mechanical')
|
||||||
elastic => mech%get('elastic')
|
elastic => mech%get('elastic')
|
||||||
if(IO_lc(elastic%get_asString('type')) == 'hooke') then ! accept small letter h for the moment
|
if (elastic%get_asString('type') /= 'Hooke') call IO_error(200,ext_msg=elastic%get_asString('type'))
|
||||||
phase_elasticity(ph) = ELASTICITY_HOOKE_ID
|
|
||||||
else
|
associate(prm => param(ph))
|
||||||
call IO_error(200,ext_msg=elastic%get_asString('type'))
|
struct = phase%get_asString('lattice')
|
||||||
endif
|
if (struct /= 'cI' .and. struct /= 'cF' .and. struct /= 'hP' .and. struct /= 'tI') &
|
||||||
|
call IO_error(137,ext_msg=trim(struct))
|
||||||
|
|
||||||
|
prm%C66(1,1) = elastic%get_asFloat('C_11')
|
||||||
|
prm%C66(1,2) = elastic%get_asFloat('C_12')
|
||||||
|
prm%C66(4,4) = elastic%get_asFloat('C_44')
|
||||||
|
|
||||||
|
if (struct == 'hP' .or. struct == 'tI') then
|
||||||
|
prm%C66(1,3) = elastic%get_asFloat('C_13')
|
||||||
|
prm%C66(3,3) = elastic%get_asFloat('C_33')
|
||||||
|
endif
|
||||||
|
if (struct == 'tI') prm%C66(6,6) = elastic%get_asFloat('C_66')
|
||||||
|
end associate
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end subroutine elastic_init
|
end subroutine elastic_init
|
||||||
|
@ -63,9 +79,9 @@ module subroutine phase_hooke_SandItsTangents(S, dS_dFe, dS_dFi, &
|
||||||
real(pReal), dimension(3,3) :: E
|
real(pReal), dimension(3,3) :: E
|
||||||
real(pReal), dimension(3,3,3,3) :: C
|
real(pReal), dimension(3,3,3,3) :: C
|
||||||
integer :: &
|
integer :: &
|
||||||
d, & !< counter in degradation loop
|
|
||||||
i, j
|
i, j
|
||||||
|
|
||||||
|
|
||||||
C = math_66toSym3333(phase_homogenizedC(ph,en))
|
C = math_66toSym3333(phase_homogenizedC(ph,en))
|
||||||
C = phase_damage_C(C,ph,en)
|
C = phase_damage_C(C,ph,en)
|
||||||
|
|
||||||
|
|
|
@ -36,10 +36,10 @@ submodule(phase:plastic) isotropic
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! containers for parameters and state
|
! containers for parameters and state
|
||||||
type(tParameters), allocatable, dimension(:) :: param
|
type(tParameters), allocatable, dimension(:) :: param
|
||||||
type(tIsotropicState), allocatable, dimension(:) :: &
|
type(tIsotropicState), allocatable, dimension(:) :: &
|
||||||
dotState, &
|
dotState, &
|
||||||
state
|
state
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
|
|
|
@ -100,11 +100,9 @@ module subroutine thermal_init(phases)
|
||||||
allocate(current(ph)%dot_T(Nmembers),source=0.0_pReal)
|
allocate(current(ph)%dot_T(Nmembers),source=0.0_pReal)
|
||||||
phase => phases%get(ph)
|
phase => phases%get(ph)
|
||||||
thermal => phase%get('thermal',defaultVal=emptyDict)
|
thermal => phase%get('thermal',defaultVal=emptyDict)
|
||||||
param(ph)%C_p = thermal%get_asFloat('c_p',defaultVal=0.0_pReal)
|
param(ph)%C_p = thermal%get_asFloat('C_p',defaultVal=0.0_pReal)
|
||||||
if (param(ph)%C_p <= 0) param(ph)%C_p = thermal%get_asFloat('C_p',defaultVal=0.0_pReal)
|
param(ph)%K(1,1) = thermal%get_asFloat('K_11',defaultVal=0.0_pReal) ! ToDo: make mandatory?
|
||||||
param(ph)%K(1,1) = thermal%get_asFloat('K_11',defaultVal=0.0_pReal)
|
param(ph)%K(3,3) = thermal%get_asFloat('K_33',defaultVal=0.0_pReal) ! ToDo: depends on symmtery
|
||||||
param(ph)%K(2,2) = thermal%get_asFloat('K_22',defaultVal=0.0_pReal)
|
|
||||||
param(ph)%K(3,3) = thermal%get_asFloat('K_33',defaultVal=0.0_pReal)
|
|
||||||
param(ph)%K = lattice_applyLatticeSymmetry33(param(ph)%K,phase%get_asString('lattice'))
|
param(ph)%K = lattice_applyLatticeSymmetry33(param(ph)%K,phase%get_asString('lattice'))
|
||||||
|
|
||||||
sources => thermal%get('source',defaultVal=emptyList)
|
sources => thermal%get('source',defaultVal=emptyList)
|
||||||
|
|
|
@ -638,7 +638,7 @@ function om2ax(om) result(ax)
|
||||||
else
|
else
|
||||||
call dgeev('N','V',3,om_,3,Wr,Wi,devNull,3,VR,3,work,size(work,1),ierr)
|
call dgeev('N','V',3,om_,3,Wr,Wi,devNull,3,VR,3,work,size(work,1),ierr)
|
||||||
if (ierr /= 0) error stop 'LAPACK error'
|
if (ierr /= 0) error stop 'LAPACK error'
|
||||||
#if defined(__GFORTRAN__) && __GNUC__<9 || defined(__INTEL_COMPILER) && INTEL_COMPILER<1800 || defined(__PGI)
|
#if defined(__GFORTRAN__) && __GNUC__<9
|
||||||
i = maxloc(merge(1,0,cEq(cmplx(Wr,Wi,pReal),cmplx(1.0_pReal,0.0_pReal,pReal),tol=1.0e-14_pReal)),dim=1)
|
i = maxloc(merge(1,0,cEq(cmplx(Wr,Wi,pReal),cmplx(1.0_pReal,0.0_pReal,pReal),tol=1.0e-14_pReal)),dim=1)
|
||||||
#else
|
#else
|
||||||
i = findloc(cEq(cmplx(Wr,Wi,pReal),cmplx(1.0_pReal,0.0_pReal,pReal),tol=1.0e-14_pReal),.true.,dim=1) !find eigenvalue (1,0)
|
i = findloc(cEq(cmplx(Wr,Wi,pReal),cmplx(1.0_pReal,0.0_pReal,pReal),tol=1.0e-14_pReal),.true.,dim=1) !find eigenvalue (1,0)
|
||||||
|
|
Loading…
Reference in New Issue