Merge branch 'development' into 30_parsePhasePartOnce
This commit is contained in:
commit
32d481020f
|
@ -52,23 +52,23 @@ variables:
|
||||||
IntelCompiler16_0: "Compiler/Intel/16.0 Libraries/IMKL/2016"
|
IntelCompiler16_0: "Compiler/Intel/16.0 Libraries/IMKL/2016"
|
||||||
IntelCompiler17_0: "Compiler/Intel/17.0 Libraries/IMKL/2017"
|
IntelCompiler17_0: "Compiler/Intel/17.0 Libraries/IMKL/2017"
|
||||||
IntelCompiler18_1: "Compiler/Intel/18.1 Libraries/IMKL/2018"
|
IntelCompiler18_1: "Compiler/Intel/18.1 Libraries/IMKL/2018"
|
||||||
GNUCompiler5_3: "Compiler/GNU/5.3"
|
GNUCompiler7_3: "Compiler/GNU/7.3"
|
||||||
# ------------ Defaults ----------------------------------------------
|
# ------------ Defaults ----------------------------------------------
|
||||||
IntelCompiler: "$IntelCompiler18_1"
|
IntelCompiler: "$IntelCompiler18_1"
|
||||||
GNUCompiler: "$GNUCompiler5_3"
|
GNUCompiler: "$GNUCompiler7_3"
|
||||||
# ++++++++++++ MPI +++++++++++++++++++++++++++++++++++++++++++++++++++
|
# ++++++++++++ MPI +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
MPICH3_2Intel17_0: "MPI/Intel/17.0/MPICH/3.2"
|
MPICH3_2Intel17_0: "MPI/Intel/17.0/MPICH/3.2"
|
||||||
MPICH3_2Intel18_1: "MPI/Intel/18.1/MPICH/3.2.1"
|
MPICH3_2Intel18_1: "MPI/Intel/18.1/MPICH/3.2.1"
|
||||||
MPICH3_2GNU5_3: "MPI/GNU/5.3/MPICH/3.2.1"
|
MPICH3_2GNU7_3: "MPI/GNU/7.3/MPICH/3.2.1"
|
||||||
# ------------ Defaults ----------------------------------------------
|
# ------------ Defaults ----------------------------------------------
|
||||||
MPICH_GNU: "$MPICH3_2GNU5_3"
|
MPICH_GNU: "$MPICH3_2GNU7_3"
|
||||||
MPICH_Intel: "$MPICH3_2Intel18_1"
|
MPICH_Intel: "$MPICH3_2Intel18_1"
|
||||||
# ++++++++++++ PETSc +++++++++++++++++++++++++++++++++++++++++++++++++
|
# ++++++++++++ PETSc +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
PETSc3_9_1MPICH3_2Intel18_1: "Libraries/PETSc/3.9.1/Intel-18.1-MPICH-3.2.1"
|
PETSc3_9_1MPICH3_2Intel18_1: "Libraries/PETSc/3.9.1/Intel-18.1-MPICH-3.2.1"
|
||||||
PETSc3_9_1MPICH3_2GNU5_3: "Libraries/PETSc/3.9.1/GNU-5.3-MPICH-3.2.1"
|
PETSc3_9_1MPICH3_2GNU7_3: "Libraries/PETSc/3.9.1/GNU-7.3-MPICH-3.2.1"
|
||||||
# ------------ Defaults ----------------------------------------------
|
# ------------ Defaults ----------------------------------------------
|
||||||
PETSc_MPICH_Intel: "$PETSc3_9_1MPICH3_2Intel18_1"
|
PETSc_MPICH_Intel: "$PETSc3_9_1MPICH3_2Intel18_1"
|
||||||
PETSc_MPICH_GNU: "$PETSc3_9_1MPICH3_2GNU5_3"
|
PETSc_MPICH_GNU: "$PETSc3_9_1MPICH3_2GNU7_3"
|
||||||
# ++++++++++++ FEM +++++++++++++++++++++++++++++++++++++++++++++++++++
|
# ++++++++++++ FEM +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
Abaqus2016: "FEM/Abaqus/2016"
|
Abaqus2016: "FEM/Abaqus/2016"
|
||||||
Abaqus2017: "FEM/Abaqus/2017"
|
Abaqus2017: "FEM/Abaqus/2017"
|
||||||
|
|
|
@ -5,8 +5,8 @@ cmake_minimum_required (VERSION 2.8.8 FATAL_ERROR)
|
||||||
#---------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------
|
||||||
# Find PETSc from system environment
|
# Find PETSc from system environment
|
||||||
set(PETSC_DIR $ENV{PETSC_DIR})
|
set(PETSC_DIR $ENV{PETSC_DIR})
|
||||||
if ("${PETSC_DIR}" STREQUAL "")
|
if (PETSC_DIR STREQUAL "")
|
||||||
message (FATAL_ERROR "PETSC_DIR is not defined")
|
message (FATAL_ERROR "PETSc location (PETSC_DIR) is not defined")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set (petsc_conf_variables "${PETSC_DIR}/lib/petsc/conf/variables")
|
set (petsc_conf_variables "${PETSC_DIR}/lib/petsc/conf/variables")
|
||||||
|
@ -105,52 +105,54 @@ set (CMAKE_C_COMPILER "${PETSC_MPICC}")
|
||||||
# Now start to care about DAMASK
|
# Now start to care about DAMASK
|
||||||
|
|
||||||
# DAMASK solver defines project to build
|
# DAMASK solver defines project to build
|
||||||
if ("${DAMASK_SOLVER}" STREQUAL "SPECTRAL")
|
if (DAMASK_SOLVER STREQUAL "SPECTRAL")
|
||||||
project (DAMASK_spectral Fortran C)
|
project (DAMASK_spectral Fortran C)
|
||||||
add_definitions (-DSpectral)
|
add_definitions (-DSpectral)
|
||||||
message ("Building Spectral Solver\n")
|
message ("Building Spectral Solver\n")
|
||||||
elseif ("${DAMASK_SOLVER}" STREQUAL "FEM")
|
elseif (DAMASK_SOLVER STREQUAL "FEM")
|
||||||
project (DAMASK_FEM Fortran C)
|
project (DAMASK_FEM Fortran C)
|
||||||
add_definitions (-DFEM)
|
add_definitions (-DFEM)
|
||||||
message ("Building FEM Solver\n")
|
message ("Building FEM Solver\n")
|
||||||
|
else ()
|
||||||
|
message (FATAL_ERROR "Build target (DAMASK_SOLVER) is not defined")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# set linker commands (needs to be done after defining the project)
|
# set linker commands (needs to be done after defining the project)
|
||||||
set (CMAKE_LINKER "${PETSC_LINKER}")
|
set (CMAKE_LINKER "${PETSC_LINKER}")
|
||||||
|
|
||||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
if (CMAKE_BUILD_TYPE STREQUAL "")
|
||||||
set (CMAKE_BUILD_TYPE "RELEASE")
|
set (CMAKE_BUILD_TYPE "RELEASE")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Predefined sets for OPTIMIZATION/OPENMP based on BUILD_TYPE
|
# Predefined sets for OPTIMIZATION/OPENMP based on BUILD_TYPE
|
||||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG" OR "${CMAKE_BUILD_TYPE}" STREQUAL "SYNTAXONLY" )
|
if (CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "SYNTAXONLY")
|
||||||
set (DEBUG_FLAGS "${DEBUG_FLAGS} -DDEBUG")
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -DDEBUG")
|
||||||
set (PARALLEL "OFF")
|
set (PARALLEL "OFF")
|
||||||
set (OPTI "OFF")
|
set (OPTI "OFF")
|
||||||
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RELEASE")
|
elseif (CMAKE_BUILD_TYPE STREQUAL "RELEASE")
|
||||||
set (PARALLEL "ON")
|
set (PARALLEL "ON")
|
||||||
set (OPTI "DEFENSIVE")
|
set (OPTI "DEFENSIVE")
|
||||||
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "PERFORMANCE")
|
elseif (CMAKE_BUILD_TYPE STREQUAL "PERFORMANCE")
|
||||||
set (PARALLEL "ON")
|
set (PARALLEL "ON")
|
||||||
set (OPTI "AGGRESSIVE")
|
set (OPTI "AGGRESSIVE")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# $OPTIMIZATION takes precedence over $BUILD_TYPE defaults
|
# $OPTIMIZATION takes precedence over $BUILD_TYPE defaults
|
||||||
if ("${OPTIMIZATION}" STREQUAL "")
|
if (OPTIMIZATION STREQUAL "")
|
||||||
set (OPTIMIZATION "${OPTI}")
|
set (OPTIMIZATION "${OPTI}")
|
||||||
else ()
|
else ()
|
||||||
set (OPTIMIZATION "${OPTIMIZATION}")
|
set (OPTIMIZATION "${OPTIMIZATION}")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# $OPENMP takes precedence over $BUILD_TYPE defaults
|
# $OPENMP takes precedence over $BUILD_TYPE defaults
|
||||||
if ("${OPENMP}" STREQUAL "")
|
if (OPENMP STREQUAL "")
|
||||||
set (OPENMP "${PARALLEL}")
|
set (OPENMP "${PARALLEL}")
|
||||||
else ()
|
else ()
|
||||||
set(OPENMP "${OPENMP}")
|
set(OPENMP "${OPENMP}")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# syntax check only (mainly for pre-receive hook, works only with gfortran)
|
# syntax check only (mainly for pre-receive hook, works only with gfortran)
|
||||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "SYNTAXONLY" )
|
if (CMAKE_BUILD_TYPE STREQUAL "SYNTAXONLY")
|
||||||
set (BUILDCMD_POST "${BUILDCMD_POST} -fsyntax-only")
|
set (BUILDCMD_POST "${BUILDCMD_POST} -fsyntax-only")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -188,19 +190,19 @@ set (DAMASK_INCLUDE_FLAGS "${DAMASK_INCLUDE_FLAGS} ${PETSC_INCLUDES}")
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
# Intel Compiler
|
# Intel Compiler
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel")
|
if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
|
||||||
|
|
||||||
if (OPENMP)
|
if (OPENMP)
|
||||||
set (OPENMP_FLAGS "-qopenmp -parallel")
|
set (OPENMP_FLAGS "-qopenmp -parallel")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if ("${OPTIMIZATION}" STREQUAL "OFF")
|
if (OPTIMIZATION STREQUAL "OFF")
|
||||||
set (OPTIMIZATION_FLAGS "-O0 -no-ip")
|
set (OPTIMIZATION_FLAGS "-O0 -no-ip")
|
||||||
elseif ("${OPTIMIZATION}" STREQUAL "DEFENSIVE")
|
elseif (OPTIMIZATION STREQUAL "DEFENSIVE")
|
||||||
set (OPTIMIZATION_FLAGS "-O2")
|
set (OPTIMIZATION_FLAGS "-O2")
|
||||||
elseif ("${OPTIMIZATION}" STREQUAL "AGGRESSIVE")
|
elseif (OPTIMIZATION STREQUAL "AGGRESSIVE")
|
||||||
set (OPTIMIZATION_FLAGS "-ipo -O3 -no-prec-div -fp-model fast=2 -xHost")
|
set (OPTIMIZATION_FLAGS "-ipo -O3 -no-prec-div -fp-model fast=2 -xHost")
|
||||||
# -fast = -ipo, -O3, -no-prec-div, -static, -fp-model fast=2, and -xHost"
|
# -fast = -ipo, -O3, -no-prec-div, -static, -fp-model fast=2, and -xHost"
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# -assume std_mod_proc_name (included in -standard-semantics) causes problems if other modules
|
# -assume std_mod_proc_name (included in -standard-semantics) causes problems if other modules
|
||||||
|
@ -308,18 +310,18 @@ if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel")
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
# GNU Compiler
|
# GNU Compiler
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
elseif(${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU")
|
elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
|
||||||
|
|
||||||
if (OPENMP)
|
if (OPENMP)
|
||||||
set (OPENMP_FLAGS "-fopenmp")
|
set (OPENMP_FLAGS "-fopenmp")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if ("${OPTIMIZATION}" STREQUAL "OFF")
|
if (OPTIMIZATION STREQUAL "OFF")
|
||||||
set (OPTIMIZATION_FLAGS "-O0" )
|
set (OPTIMIZATION_FLAGS "-O0" )
|
||||||
elseif ("${OPTIMIZATION}" STREQUAL "DEFENSIVE")
|
elseif (OPTIMIZATION STREQUAL "DEFENSIVE")
|
||||||
set (OPTIMIZATION_FLAGS "-O2")
|
set (OPTIMIZATION_FLAGS "-O2")
|
||||||
elseif ("${OPTIMIZATION}" STREQUAL "AGGRESSIVE")
|
elseif (OPTIMIZATION STREQUAL "AGGRESSIVE")
|
||||||
set (OPTIMIZATION_FLAGS "-O3 -ffast-math -funroll-loops -ftree-vectorize")
|
set (OPTIMIZATION_FLAGS "-O3 -ffast-math -funroll-loops -ftree-vectorize")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set (STANDARD_CHECK "-std=f2008ts -pedantic-errors" )
|
set (STANDARD_CHECK "-std=f2008ts -pedantic-errors" )
|
||||||
|
@ -443,12 +445,15 @@ elseif(${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU")
|
||||||
|
|
||||||
# Additional options
|
# Additional options
|
||||||
# -fdefault-integer-8: Use it to set precision to 8 bytes for integer, don't use it for the standard case of pInt=4 (there is no -fdefault-integer-4)
|
# -fdefault-integer-8: Use it to set precision to 8 bytes for integer, don't use it for the standard case of pInt=4 (there is no -fdefault-integer-4)
|
||||||
|
else ()
|
||||||
|
message (FATAL_ERROR "Compiler type (CMAKE_Fortran_COMPILER_ID) not recognized")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
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_LINKER} ${OPENMP_FLAGS} ${OPTIMIZATION_FLAGS} ${LINKER_FLAGS}")
|
set (CMAKE_Fortran_LINK_EXECUTABLE "${BUILDCMD_PRE} ${CMAKE_LINKER} ${OPENMP_FLAGS} ${OPTIMIZATION_FLAGS} ${LINKER_FLAGS}")
|
||||||
|
|
||||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
if (CMAKE_BUILD_TYPE STREQUAL "DEBUG")
|
||||||
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}} ${DEBUG_FLAGS}")
|
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}} ${DEBUG_FLAGS}")
|
||||||
set (CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} ${DEBUG_FLAGS}")
|
set (CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} ${DEBUG_FLAGS}")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -464,15 +469,15 @@ message ("Fortran Linker Command:\n${CMAKE_Fortran_LINK_EXECUTABLE}\n")
|
||||||
add_subdirectory (src)
|
add_subdirectory (src)
|
||||||
|
|
||||||
# INSTALL BUILT BINARIES
|
# INSTALL BUILT BINARIES
|
||||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "SYNTAXONLY")
|
if (CMAKE_BUILD_TYPE STREQUAL "SYNTAXONLY")
|
||||||
exec_program (mktemp ARGS -d OUTPUT_VARIABLE BLACK_HOLE)
|
exec_program (mktemp ARGS -d OUTPUT_VARIABLE BLACK_HOLE)
|
||||||
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/prec.mod
|
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/prec.mod
|
||||||
DESTINATION ${BLACK_HOLE})
|
DESTINATION ${BLACK_HOLE})
|
||||||
else ()
|
else ()
|
||||||
if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
if (PROJECT_NAME STREQUAL "DAMASK_spectral")
|
||||||
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/DAMASK_spectral
|
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/DAMASK_spectral
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX})
|
DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
elseif ("${PROJECT_NAME}" STREQUAL "DAMASK_FEM")
|
elseif (PROJECT_NAME STREQUAL "DAMASK_FEM")
|
||||||
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/DAMASK_FEM
|
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/DAMASK_FEM
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX})
|
DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
1
Makefile
1
Makefile
|
@ -25,7 +25,6 @@ build/FEM:
|
||||||
|
|
||||||
.PHONY: marc
|
.PHONY: marc
|
||||||
marc:
|
marc:
|
||||||
@./installation/symLink_Code.sh
|
|
||||||
@./installation/mods_MarcMentat/apply_DAMASK_modifications.sh ${MAKEFLAGS}
|
@./installation/mods_MarcMentat/apply_DAMASK_modifications.sh ${MAKEFLAGS}
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
5 header
|
|
||||||
seeds_fromRandom v2.0.1-1138-gfcac08c -N 50 -g 128 128 128
|
|
||||||
grid a 128 b 128 c 128
|
|
||||||
microstructures 50
|
|
||||||
randomSeed 3336946323
|
|
||||||
1_pos 2_pos 3_pos 1_euler 2_euler 3_euler microstructure
|
|
||||||
0.54457843603947365 0.84911587396210719 0.34846714169395199 146.18027121829002 137.38970467457548 64.889274068548971 1.0
|
|
||||||
0.30082506347847232 0.98313838966599176 0.44557226838658942 277.4997516434205 39.360506400353323 71.246613676352894 2.0
|
|
||||||
0.40772634005027159 0.9616152434202665 0.058204060548736787 357.09763745092783 25.490253793203657 268.023521027068 3.0
|
|
||||||
0.58904198203278091 0.72270060278093695 0.31942765324679046 350.68488850223423 130.4171465853421 250.42731366202318 4.0
|
|
||||||
0.51285660590703486 0.96889097226822973 0.65275467737350745 23.745542919457275 118.98401463018114 322.60963659419878 5.0
|
|
||||||
0.78608003485028433 0.83273743685098622 0.46591785719509976 124.52498788960992 100.66865249263579 43.350904777210218 6.0
|
|
||||||
0.65676045955005913 0.90612854270261067 0.46812684725311626 206.73481508655914 108.36640892186001 80.109515277983789 7.0
|
|
||||||
0.41091744799856139 0.019203430085754657 0.87577849258950335 294.38492822136715 146.40525644850072 307.47368257125362 8.0
|
|
||||||
0.2895339668620191 0.44890615451191845 0.98331278676555256 155.95129760119522 47.149690499466338 129.03566717283138 9.0
|
|
||||||
0.19961281156351873 0.52634383062850942 0.65188451822931848 147.12314868626314 111.70076966247582 118.18572187802707 10.0
|
|
||||||
0.86414247862963223 0.1358065510164656 0.66025345324864337 164.3847245485006 106.948282223783 169.81246394416348 11.0
|
|
||||||
0.22971651291623074 0.092972318577821886 0.29406405983067813 152.69170803150587 154.25570085621541 12.482717398044327 12.0
|
|
||||||
0.26338815658881415 0.34338560362947429 0.55845211616339796 34.576603888911734 112.1396081205236 231.97898012368159 13.0
|
|
||||||
0.75109304237913643 0.32426372309630619 0.24464858180476037 287.27773986438422 132.7748719439447 29.566044111233396 14.0
|
|
||||||
0.011464166371603362 0.038504815611266896 0.31848008962612995 3.6027692030412783 128.19004192002171 318.21386202740894 15.0
|
|
||||||
0.40531294455896061 0.89392258706810201 0.47360685251709117 224.94453046189483 91.073774858498993 174.6238603309032 16.0
|
|
||||||
0.53642882463725594 0.12961813440684475 0.33670742966203715 275.10050328051165 143.71902154901966 46.372591362351443 17.0
|
|
||||||
0.025264257063423813 0.86284946730733791 0.67853751997904233 286.09297442950589 84.366012495567063 168.12310601585438 18.0
|
|
||||||
0.46082042086486502 0.79920741984567956 0.84550103531963372 338.58981410067844 115.61172937509538 33.588172611417498 19.0
|
|
||||||
0.22570807057805362 0.074166418124772107 0.35703686595525042 123.22376691705952 84.092264279947017 358.5702863996658 20.0
|
|
||||||
0.05386086781200651 0.33174190751238741 0.22207351758975458 347.73707141532731 68.522081814108546 343.42676588519805 21.0
|
|
||||||
0.843158604433492 0.92955496315098074 0.64647123931005734 11.343815482295781 80.300931773797004 9.6393328996438079 22.0
|
|
||||||
0.38975306778625629 0.24157610260940071 0.71161594028191588 321.39703457206355 30.680985581522023 310.97284763119887 23.0
|
|
||||||
0.29080297238998321 0.7438587097696947 0.27827316089105131 318.66484094014749 129.93793511237541 136.82657482859585 24.0
|
|
||||||
0.39382389364070247 0.28978401907200979 0.25701142568390795 322.47065731551987 13.846167927307052 301.54027053054892 25.0
|
|
||||||
0.61050322346481545 0.13737535992809438 0.36661645869662263 352.54143971537871 57.8511858353625 133.84653788992898 26.0
|
|
||||||
0.79736663927764695 0.20513299822009629 0.79699332479250651 290.58637400802854 44.449209602954802 275.77563923277597 27.0
|
|
||||||
0.75235587126626513 0.11041486201059918 0.8131872750127791 70.389885527768058 106.61781772242031 249.0896396040977 28.0
|
|
||||||
0.47139010668774128 0.12192484253468709 0.21955576044612418 82.523861430871293 130.07642048077489 161.94830004765717 29.0
|
|
||||||
0.58577411200822327 0.55808726366080907 0.68861538513192688 4.5456602316904782 68.430488072013802 279.06105056042912 30.0
|
|
||||||
0.078221348390348527 0.38485150106633381 0.70002412594863284 44.840105036355524 52.915732353957182 321.10892793267385 31.0
|
|
||||||
0.67648574989589816 0.36189363050547918 0.1744438641736718 56.290857666353922 79.852422734452261 218.87802771695559 32.0
|
|
||||||
0.66993786328789628 0.24839196429109262 0.22913111586511459 90.545592617209479 111.73679898243722 50.777738624812869 33.0
|
|
||||||
0.97253038612350284 0.5008359837170796 0.22908814679929382 258.2784447839781 81.324197699117292 308.75839223966972 34.0
|
|
||||||
0.57267221923324418 0.57812183688041852 0.27747089968489891 44.241276881211661 104.39672542923724 263.41942696808212 35.0
|
|
||||||
0.20684173793886379 0.43993013267805814 0.65735383309297513 343.60408990114365 51.644327943351122 302.98734797140071 36.0
|
|
||||||
0.74510273339709676 0.73117975286639059 0.88155543772031653 318.38483613589898 93.903589849536274 302.06468871599935 37.0
|
|
||||||
0.96140945332061889 0.16540946028864878 0.40824265860818898 97.086714635901274 130.50888029759304 221.78895191070089 38.0
|
|
||||||
0.76663076605317781 0.85911002545479809 0.11281299879667539 163.06393615448818 43.363447677950042 338.05013375241901 39.0
|
|
||||||
0.41268673658765898 0.24787882796675886 0.57686480644197569 200.12920794363012 45.222523931505947 280.23271113977307 40.0
|
|
||||||
0.77256877568016891 0.88174830744168597 0.85149237688892054 116.81358850313981 71.413890894473454 115.54962789790765 41.0
|
|
||||||
0.26725724981852333 0.2962688497890511 0.89524301333622525 254.14781916777747 83.176346219908254 33.979304092964192 42.0
|
|
||||||
0.58047025880020098 0.57494408407976194 0.61595960318628096 334.70268656247265 42.480438737564974 177.92796756121371 43.0
|
|
||||||
0.52102440567302477 0.7145666401672387 0.21858506378351775 178.43052543384653 153.21174542887405 324.42119289220273 44.0
|
|
||||||
0.77321583279723483 0.96647383074249249 0.5062943967878929 230.42797261926012 99.507340620849902 169.75007570059978 45.0
|
|
||||||
0.3364367026326 0.45790436703027437 0.27197669375839439 218.70321774431869 60.819721511735267 217.80859716828817 46.0
|
|
||||||
0.41823530342173082 0.077759964416919514 0.66113722050248613 189.26108507623661 50.425749120256064 78.019878648192815 47.0
|
|
||||||
0.8754300454839713 0.094969845269609401 0.42632522145904467 250.899467172654 33.14582034295529 150.05888748377424 48.0
|
|
||||||
0.1950290416819265 0.59474264558516909 0.93298429220138601 232.236367110732 47.258083025548189 34.83912199551915 49.0
|
|
||||||
0.91993054481220637 0.48586729788450678 0.10933899155043697 246.05124283375034 131.539860458254 249.58739755697601 50.0
|
|
|
@ -1,5 +1,5 @@
|
||||||
# special flags for some files
|
# special flags for some files
|
||||||
if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU")
|
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
|
||||||
SET_SOURCE_FILES_PROPERTIES( "lattice.f90" PROPERTIES
|
SET_SOURCE_FILES_PROPERTIES( "lattice.f90" PROPERTIES
|
||||||
COMPILE_FLAGS "-ffree-line-length-240")
|
COMPILE_FLAGS "-ffree-line-length-240")
|
||||||
# long lines for interaction matrix
|
# long lines for interaction matrix
|
||||||
|
@ -17,10 +17,12 @@ list(APPEND OBJECTFILES $<TARGET_OBJECTS:SYSTEM_ROUTINES>)
|
||||||
add_library(PREC OBJECT "prec.f90")
|
add_library(PREC OBJECT "prec.f90")
|
||||||
list(APPEND OBJECTFILES $<TARGET_OBJECTS:PREC>)
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:PREC>)
|
||||||
|
|
||||||
if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
if (PROJECT_NAME STREQUAL "DAMASK_spectral")
|
||||||
add_library(DAMASK_INTERFACE OBJECT "spectral_interface.f90")
|
add_library(DAMASK_INTERFACE OBJECT "spectral_interface.f90")
|
||||||
elseif ("${PROJECT_NAME}" STREQUAL "DAMASK_FEM")
|
elseif (PROJECT_NAME STREQUAL "DAMASK_FEM")
|
||||||
add_library(DAMASK_INTERFACE OBJECT "FEM_interface.f90")
|
add_library(DAMASK_INTERFACE OBJECT "FEM_interface.f90")
|
||||||
|
else ()
|
||||||
|
message (FATAL_ERROR "Build target (PROJECT_NAME) is not defined")
|
||||||
endif()
|
endif()
|
||||||
add_dependencies(DAMASK_INTERFACE PREC SYSTEM_ROUTINES)
|
add_dependencies(DAMASK_INTERFACE PREC SYSTEM_ROUTINES)
|
||||||
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_INTERFACE>)
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_INTERFACE>)
|
||||||
|
@ -54,11 +56,11 @@ add_dependencies(DAMASK_MATH FEsolving)
|
||||||
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_MATH>)
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_MATH>)
|
||||||
|
|
||||||
# SPECTRAL solver and FEM solver use different mesh files
|
# SPECTRAL solver and FEM solver use different mesh files
|
||||||
if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
if (PROJECT_NAME STREQUAL "DAMASK_spectral")
|
||||||
add_library(MESH OBJECT "mesh.f90")
|
add_library(MESH OBJECT "mesh.f90")
|
||||||
add_dependencies(MESH DAMASK_MATH)
|
add_dependencies(MESH DAMASK_MATH)
|
||||||
list(APPEND OBJECTFILES $<TARGET_OBJECTS:MESH>)
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:MESH>)
|
||||||
elseif ("${PROJECT_NAME}" STREQUAL "DAMASK_FEM")
|
elseif (PROJECT_NAME STREQUAL "DAMASK_FEM")
|
||||||
add_library(FEZoo OBJECT "FEZoo.f90")
|
add_library(FEZoo OBJECT "FEZoo.f90")
|
||||||
add_dependencies(FEZoo DAMASK_MATH)
|
add_dependencies(FEZoo DAMASK_MATH)
|
||||||
list(APPEND OBJECTFILES $<TARGET_OBJECTS:FEZoo>)
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:FEZoo>)
|
||||||
|
@ -165,7 +167,7 @@ add_library(DAMASK_CPFE OBJECT "CPFEM2.f90")
|
||||||
add_dependencies(DAMASK_CPFE DAMASK_ENGINE)
|
add_dependencies(DAMASK_CPFE DAMASK_ENGINE)
|
||||||
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_CPFE>)
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_CPFE>)
|
||||||
|
|
||||||
if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
if (PROJECT_NAME STREQUAL "DAMASK_spectral")
|
||||||
add_library(SPECTRAL_UTILITIES OBJECT "spectral_utilities.f90")
|
add_library(SPECTRAL_UTILITIES OBJECT "spectral_utilities.f90")
|
||||||
add_dependencies(SPECTRAL_UTILITIES DAMASK_CPFE)
|
add_dependencies(SPECTRAL_UTILITIES DAMASK_CPFE)
|
||||||
list(APPEND OBJECTFILES $<TARGET_OBJECTS:SPECTRAL_UTILITIES>)
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:SPECTRAL_UTILITIES>)
|
||||||
|
@ -177,13 +179,13 @@ if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
||||||
"spectral_mech_Basic.f90")
|
"spectral_mech_Basic.f90")
|
||||||
add_dependencies(SPECTRAL_SOLVER SPECTRAL_UTILITIES)
|
add_dependencies(SPECTRAL_SOLVER SPECTRAL_UTILITIES)
|
||||||
list(APPEND OBJECTFILES $<TARGET_OBJECTS:SPECTRAL_SOLVER>)
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:SPECTRAL_SOLVER>)
|
||||||
if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "SYNTAXONLY")
|
if(NOT CMAKE_BUILD_TYPE STREQUAL "SYNTAXONLY")
|
||||||
add_executable(DAMASK_spectral "DAMASK_spectral.f90" ${OBJECTFILES})
|
add_executable(DAMASK_spectral "DAMASK_spectral.f90" ${OBJECTFILES})
|
||||||
else()
|
else()
|
||||||
add_library(DAMASK_spectral OBJECT "DAMASK_spectral.f90")
|
add_library(DAMASK_spectral OBJECT "DAMASK_spectral.f90")
|
||||||
endif()
|
endif()
|
||||||
add_dependencies(DAMASK_spectral SPECTRAL_SOLVER)
|
add_dependencies(DAMASK_spectral SPECTRAL_SOLVER)
|
||||||
elseif ("${PROJECT_NAME}" STREQUAL "DAMASK_FEM")
|
elseif (PROJECT_NAME STREQUAL "DAMASK_FEM")
|
||||||
add_library(FEM_UTILITIES OBJECT "FEM_utilities.f90")
|
add_library(FEM_UTILITIES OBJECT "FEM_utilities.f90")
|
||||||
add_dependencies(FEM_UTILITIES DAMASK_CPFE)
|
add_dependencies(FEM_UTILITIES DAMASK_CPFE)
|
||||||
|
|
||||||
|
|
|
@ -355,8 +355,8 @@ program DAMASK_spectral
|
||||||
select case (loadCases(1)%ID(field))
|
select case (loadCases(1)%ID(field))
|
||||||
case(FIELD_MECH_ID)
|
case(FIELD_MECH_ID)
|
||||||
select case (spectral_solver)
|
select case (spectral_solver)
|
||||||
case (DAMASK_spectral_SolverBasicPETSc_label)
|
case (DAMASK_spectral_SolverBasic_label)
|
||||||
call basicPETSc_init
|
call basic_init
|
||||||
|
|
||||||
case (DAMASK_spectral_SolverPolarisation_label)
|
case (DAMASK_spectral_SolverPolarisation_label)
|
||||||
if(iand(debug_level(debug_spectral),debug_levelBasic)/= 0) &
|
if(iand(debug_level(debug_spectral),debug_levelBasic)/= 0) &
|
||||||
|
@ -513,8 +513,8 @@ program DAMASK_spectral
|
||||||
select case(loadCases(currentLoadCase)%ID(field))
|
select case(loadCases(currentLoadCase)%ID(field))
|
||||||
case(FIELD_MECH_ID)
|
case(FIELD_MECH_ID)
|
||||||
select case (spectral_solver)
|
select case (spectral_solver)
|
||||||
case (DAMASK_spectral_SolverBasicPETSc_label)
|
case (DAMASK_spectral_SolverBasic_label)
|
||||||
call BasicPETSc_forward (&
|
call Basic_forward (&
|
||||||
guess,timeinc,timeIncOld,remainingLoadCaseTime, &
|
guess,timeinc,timeIncOld,remainingLoadCaseTime, &
|
||||||
deformation_BC = loadCases(currentLoadCase)%deformation, &
|
deformation_BC = loadCases(currentLoadCase)%deformation, &
|
||||||
stress_BC = loadCases(currentLoadCase)%stress, &
|
stress_BC = loadCases(currentLoadCase)%stress, &
|
||||||
|
@ -542,8 +542,8 @@ program DAMASK_spectral
|
||||||
select case(loadCases(currentLoadCase)%ID(field))
|
select case(loadCases(currentLoadCase)%ID(field))
|
||||||
case(FIELD_MECH_ID)
|
case(FIELD_MECH_ID)
|
||||||
select case (spectral_solver)
|
select case (spectral_solver)
|
||||||
case (DAMASK_spectral_SolverBasicPETSc_label)
|
case (DAMASK_spectral_SolverBasic_label)
|
||||||
solres(field) = BasicPETSC_solution (&
|
solres(field) = Basic_solution (&
|
||||||
incInfo,timeinc,timeIncOld, &
|
incInfo,timeinc,timeIncOld, &
|
||||||
stress_BC = loadCases(currentLoadCase)%stress, &
|
stress_BC = loadCases(currentLoadCase)%stress, &
|
||||||
rotation_BC = loadCases(currentLoadCase)%rotation)
|
rotation_BC = loadCases(currentLoadCase)%rotation)
|
||||||
|
|
133
src/math.f90
133
src/math.f90
|
@ -1819,6 +1819,8 @@ function math_sampleFiberOri(alpha,beta,FWHM)
|
||||||
integer(pInt):: j,& !< index of smallest component
|
integer(pInt):: j,& !< index of smallest component
|
||||||
i
|
i
|
||||||
|
|
||||||
|
allocate(a(0))
|
||||||
|
allocate(idx(0))
|
||||||
fInC = [sin(alpha(1))*cos(alpha(2)), sin(alpha(1))*sin(alpha(2)), cos(alpha(1))]
|
fInC = [sin(alpha(1))*cos(alpha(2)), sin(alpha(1))*sin(alpha(2)), cos(alpha(1))]
|
||||||
fInS = [sin(beta(1))*cos(beta(2)), sin(beta(1))*sin(beta(2)), cos(beta(1))]
|
fInS = [sin(beta(1))*cos(beta(2)), sin(beta(1))*sin(beta(2)), cos(beta(1))]
|
||||||
|
|
||||||
|
@ -2631,135 +2633,4 @@ real(pReal) pure function math_limit(a, left, right)
|
||||||
|
|
||||||
end function math_limit
|
end function math_limit
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
!> @brief Modified Bessel I function of order 0
|
|
||||||
!> @author John Burkardt
|
|
||||||
!> @details original version available on https://people.sc.fsu.edu/~jburkardt/f_src/toms715/toms715.html
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
real(pReal) function bessel_i0 (x)
|
|
||||||
use, intrinsic :: IEEE_ARITHMETIC
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
real(pReal), intent(in) :: x
|
|
||||||
integer(pInt) :: i
|
|
||||||
real(pReal) :: sump_p, sump_q, xAbs, xx
|
|
||||||
real(pReal), parameter, dimension(15) :: p_small = real( &
|
|
||||||
[-5.2487866627945699800e-18, -1.5982226675653184646e-14, -2.6843448573468483278e-11, &
|
|
||||||
-3.0517226450451067446e-08, -2.5172644670688975051e-05, -1.5453977791786851041e-02, &
|
|
||||||
-7.0935347449210549190e+00, -2.4125195876041896775e+03, -5.9545626019847898221e+05, &
|
|
||||||
-1.0313066708737980747e+08, -1.1912746104985237192e+10, -8.4925101247114157499e+11, &
|
|
||||||
-3.2940087627407749166e+13, -5.5050369673018427753e+14, -2.2335582639474375249e+15], pReal)
|
|
||||||
real(pReal), parameter, dimension(5) :: q_small = real( &
|
|
||||||
[-3.7277560179962773046e+03, 6.5158506418655165707e+06, -6.5626560740833869295e+09, &
|
|
||||||
3.7604188704092954661e+12, -9.7087946179594019126e+14], pReal)
|
|
||||||
real(pReal), parameter, dimension(8) :: p_large = real( &
|
|
||||||
[-3.9843750000000000000e-01, 2.9205384596336793945e+00, -2.4708469169133954315e+00, &
|
|
||||||
4.7914889422856814203e-01, -3.7384991926068969150e-03, -2.6801520353328635310e-03, &
|
|
||||||
9.9168777670983678974e-05, -2.1877128189032726730e-06], pReal)
|
|
||||||
real(pReal), parameter, dimension(7) :: q_large = real( &
|
|
||||||
[-3.1446690275135491500e+01, 8.5539563258012929600e+01, -6.0228002066743340583e+01, &
|
|
||||||
1.3982595353892851542e+01, -1.1151759188741312645e+00, 3.2547697594819615062e-02, &
|
|
||||||
-5.5194330231005480228e-04], pReal)
|
|
||||||
|
|
||||||
|
|
||||||
xAbs = abs(x)
|
|
||||||
|
|
||||||
argRange: if (xAbs < 5.55e-17_pReal) then
|
|
||||||
bessel_i0 = 1.0_pReal
|
|
||||||
else if (xAbs < 15.0_pReal) then argRange
|
|
||||||
xx = xAbs**2.0_pReal
|
|
||||||
sump_p = p_small(1)
|
|
||||||
do i = 2, 15
|
|
||||||
sump_p = sump_p * xx + p_small(i)
|
|
||||||
end do
|
|
||||||
xx = xx - 225.0_pReal
|
|
||||||
sump_q = ((((xx+q_small(1))*xx+q_small(2))*xx+q_small(3))*xx+q_small(4))*xx+q_small(5)
|
|
||||||
bessel_i0 = sump_p / sump_q
|
|
||||||
else if (xAbs <= 713.986_pReal) then argRange
|
|
||||||
xx = 1.0_pReal / xAbs - 2.0_pReal/30.0_pReal
|
|
||||||
sump_p = ((((((p_large(1)*xx+p_large(2))*xx+p_large(3))*xx+p_large(4))*xx+ &
|
|
||||||
p_large(5))*xx+p_large(6))*xx+p_large(7))*xx+p_large(8)
|
|
||||||
sump_q = ((((((xx+q_large(1))*xx+q_large(2))*xx+q_large(3))*xx+ &
|
|
||||||
q_large(4))*xx+q_large(5))*xx+q_large(6))*xx+q_large(7)
|
|
||||||
bessel_i0 = sump_p / sump_q
|
|
||||||
|
|
||||||
avoidOverflow: if (xAbs > 698.986_pReal) then
|
|
||||||
bessel_i0 = ((bessel_i0*exp(xAbs-40.0_pReal)-p_large(1)*exp(xAbs-40.0_pReal))/sqrt(xAbs))*exp(40.0)
|
|
||||||
else avoidOverflow
|
|
||||||
bessel_i0 = ((bessel_i0*exp(xAbs)-p_large(1)*exp(xAbs))/sqrt(xAbs))
|
|
||||||
endif avoidOverflow
|
|
||||||
|
|
||||||
else argRange
|
|
||||||
bessel_i0 = IEEE_value(bessel_i0,IEEE_positive_inf)
|
|
||||||
end if argRange
|
|
||||||
|
|
||||||
end function bessel_i0
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
!> @brief Modified Bessel I function of order 1
|
|
||||||
!> @author John Burkardt
|
|
||||||
!> @details original version available on https://people.sc.fsu.edu/~jburkardt/f_src/toms715/toms715.html
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
real(pReal) function bessel_i1 (x)
|
|
||||||
use, intrinsic :: IEEE_ARITHMETIC
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
real(pReal), intent(in) :: x
|
|
||||||
integer(pInt) :: i
|
|
||||||
real(pReal) :: sump_p, sump_q, xAbs, xx
|
|
||||||
real(pReal), dimension(15), parameter :: p_small = real( &
|
|
||||||
[-1.9705291802535139930e-19, -6.5245515583151902910e-16, -1.1928788903603238754e-12, &
|
|
||||||
-1.4831904935994647675e-09, -1.3466829827635152875e-06, -9.1746443287817501309e-04, &
|
|
||||||
-4.7207090827310162436e-01, -1.8225946631657315931e+02, -5.1894091982308017540e+04, &
|
|
||||||
-1.0588550724769347106e+07, -1.4828267606612366099e+09, -1.3357437682275493024e+11, &
|
|
||||||
-6.9876779648010090070e+12, -1.7732037840791591320e+14, -1.4577180278143463643e+15], pReal)
|
|
||||||
real(pReal), dimension(5), parameter :: q_small = real( &
|
|
||||||
[-4.0076864679904189921e+03, 7.4810580356655069138e+06, -8.0059518998619764991e+09, &
|
|
||||||
4.8544714258273622913e+12, -1.3218168307321442305e+15], pReal)
|
|
||||||
real(pReal), dimension(8), parameter :: p_large = real( &
|
|
||||||
[-6.0437159056137600000e-02, 4.5748122901933459000e-01, -4.2843766903304806403e-01, &
|
|
||||||
9.7356000150886612134e-02, -3.2457723974465568321e-03, -3.6395264712121795296e-04, &
|
|
||||||
1.6258661867440836395e-05, -3.6347578404608223492e-07], pReal)
|
|
||||||
real(pReal), dimension(6), parameter :: q_large = real( &
|
|
||||||
[-3.8806586721556593450e+00, 3.2593714889036996297e+00, -8.5017476463217924408e-01, &
|
|
||||||
7.4212010813186530069e-02, -2.2835624489492512649e-03, 3.7510433111922824643e-05], pReal)
|
|
||||||
real(pReal), parameter :: pbar = 3.98437500e-01
|
|
||||||
|
|
||||||
|
|
||||||
xAbs = abs(x)
|
|
||||||
|
|
||||||
argRange: if (xAbs < 5.55e-17_pReal) then
|
|
||||||
bessel_i1 = 0.5_pReal * xAbs
|
|
||||||
else if (xAbs < 15.0_pReal) then argRange
|
|
||||||
xx = xAbs**2.0_pReal
|
|
||||||
sump_p = p_small(1)
|
|
||||||
do i = 2, 15
|
|
||||||
sump_p = sump_p * xx + p_small(i)
|
|
||||||
end do
|
|
||||||
xx = xx - 225.0_pReal
|
|
||||||
sump_q = ((((xx+q_small(1))*xx+q_small(2))*xx+q_small(3))*xx+q_small(4)) * xx + q_small(5)
|
|
||||||
bessel_i1 = (sump_p / sump_q) * xAbs
|
|
||||||
else if (xAbs <= 713.986_pReal) then argRange
|
|
||||||
xx = 1.0_pReal / xAbs - 2.0_pReal/30.0_pReal
|
|
||||||
sump_p = ((((((p_large(1)*xx+p_large(2))*xx+p_large(3))*xx+p_large(4))*xx+&
|
|
||||||
p_large(5))*xx+p_large(6))*xx+p_large(7))*xx+p_large(8)
|
|
||||||
sump_q = (((((xx+q_large(1))*xx+q_large(2))*xx+q_large(3))*xx+ q_large(4))*xx+q_large(5))*xx+q_large(6)
|
|
||||||
bessel_i1 = sump_p / sump_q
|
|
||||||
|
|
||||||
avoidOverflow: if (xAbs > 698.986_pReal) then
|
|
||||||
bessel_i1 = ((bessel_i1 * exp(xAbs-40.0_pReal) + pbar * exp(xAbs-40.0_pReal)) / sqrt(xAbs)) * exp(40.0_pReal)
|
|
||||||
else avoidOverflow
|
|
||||||
bessel_i1 = ((bessel_i1 * exp(xAbs) + pbar * exp(xAbs)) / sqrt(xAbs))
|
|
||||||
endif avoidOverflow
|
|
||||||
|
|
||||||
else argRange
|
|
||||||
bessel_i1 = IEEE_value(bessel_i1,IEEE_positive_inf)
|
|
||||||
end if argRange
|
|
||||||
|
|
||||||
if (x < 0.0_pReal) bessel_i1 = -bessel_i1
|
|
||||||
|
|
||||||
end function bessel_i1
|
|
||||||
|
|
||||||
end module math
|
end module math
|
||||||
|
|
|
@ -12,32 +12,32 @@ module plastic_kinehardening
|
||||||
implicit none
|
implicit none
|
||||||
private
|
private
|
||||||
integer(pInt), dimension(:), allocatable, public, protected :: &
|
integer(pInt), dimension(:), allocatable, public, protected :: &
|
||||||
plastic_kinehardening_sizePostResults !< cumulative size of post results
|
plastic_kinehardening_sizePostResults !< cumulative size of post results
|
||||||
|
|
||||||
integer(pInt), dimension(:,:), allocatable, target, public :: &
|
integer(pInt), dimension(:,:), allocatable, target, public :: &
|
||||||
plastic_kinehardening_sizePostResult !< size of each post result output
|
plastic_kinehardening_sizePostResult !< size of each post result output
|
||||||
|
|
||||||
character(len=64), dimension(:,:), allocatable, target, public :: &
|
character(len=64), dimension(:,:), allocatable, target, public :: &
|
||||||
plastic_kinehardening_output !< name of each post result output
|
plastic_kinehardening_output !< name of each post result output
|
||||||
|
|
||||||
integer(pInt), dimension(:), allocatable, target, public :: &
|
integer(pInt), dimension(:), allocatable, target, public :: &
|
||||||
plastic_kinehardening_Noutput !< number of outputs per instance
|
plastic_kinehardening_Noutput !< number of outputs per instance
|
||||||
|
|
||||||
integer(pInt), dimension(:), allocatable, public, protected :: &
|
integer(pInt), dimension(:), allocatable, public, protected :: &
|
||||||
plastic_kinehardening_totalNslip !< no. of slip system used in simulation
|
plastic_kinehardening_totalNslip !< no. of slip system used in simulation
|
||||||
|
|
||||||
|
|
||||||
integer(pInt), dimension(:,:), allocatable, private :: &
|
integer(pInt), dimension(:,:), allocatable, private :: &
|
||||||
plastic_kinehardening_Nslip !< active number of slip systems per family (input parameter, per family)
|
plastic_kinehardening_Nslip !< active number of slip systems per family (input parameter, per family)
|
||||||
|
|
||||||
|
|
||||||
enum, bind(c)
|
enum, bind(c)
|
||||||
enumerator :: undefined_ID, &
|
enumerator :: undefined_ID, &
|
||||||
crss_ID, & !< critical resolved stress
|
crss_ID, & !< critical resolved stress
|
||||||
crss_back_ID, & !< critical resolved back stress
|
crss_back_ID, & !< critical resolved back stress
|
||||||
sense_ID, & !< sense of acting shear stress (-1 or +1)
|
sense_ID, & !< sense of acting shear stress (-1 or +1)
|
||||||
chi0_ID, & !< backstress at last switch of stress sense (positive?)
|
chi0_ID, & !< backstress at last switch of stress sense (positive?)
|
||||||
gamma0_ID, & !< accumulated shear at last switch of stress sense (at current switch?)
|
gamma0_ID, & !< accumulated shear at last switch of stress sense (at current switch?)
|
||||||
accshear_ID, &
|
accshear_ID, &
|
||||||
sumGamma_ID, &
|
sumGamma_ID, &
|
||||||
shearrate_ID, &
|
shearrate_ID, &
|
||||||
|
@ -46,26 +46,26 @@ module plastic_kinehardening
|
||||||
end enum
|
end enum
|
||||||
|
|
||||||
|
|
||||||
type, private :: tParameters !< container type for internal constitutive parameters
|
type, private :: tParameters !< container type for internal constitutive parameters
|
||||||
integer(kind(undefined_ID)), dimension(:), allocatable, private :: &
|
integer(kind(undefined_ID)), dimension(:), allocatable, private :: &
|
||||||
outputID !< ID of each post result output
|
outputID !< ID of each post result output
|
||||||
|
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
gdot0, & !< reference shear strain rate for slip (input parameter)
|
gdot0, & !< reference shear strain rate for slip (input parameter)
|
||||||
n_slip, & !< stress exponent for slip (input parameter)
|
n_slip, & !< stress exponent for slip (input parameter)
|
||||||
aTolResistance, &
|
aTolResistance, &
|
||||||
aTolShear
|
aTolShear
|
||||||
|
|
||||||
|
|
||||||
real(pReal), dimension(:), allocatable, private :: &
|
real(pReal), dimension(:), allocatable, private :: &
|
||||||
crss0, & !< initial critical shear stress for slip (input parameter, per family)
|
crss0, & !< initial critical shear stress for slip (input parameter, per family)
|
||||||
theta0, & !< initial hardening rate of forward stress for each slip
|
theta0, & !< initial hardening rate of forward stress for each slip
|
||||||
theta1, & !< asymptotic hardening rate of forward stress for each slip >
|
theta1, & !< asymptotic hardening rate of forward stress for each slip >
|
||||||
theta0_b, & !< initial hardening rate of back stress for each slip >
|
theta0_b, & !< initial hardening rate of back stress for each slip >
|
||||||
theta1_b, & !< asymptotic hardening rate of back stress for each slip >
|
theta1_b, & !< asymptotic hardening rate of back stress for each slip >
|
||||||
tau1, &
|
tau1, &
|
||||||
tau1_b, &
|
tau1_b, &
|
||||||
interaction_slipslip, & !< latent hardening matrix
|
interaction_slipslip, & !< latent hardening matrix
|
||||||
nonSchmidCoeff
|
nonSchmidCoeff
|
||||||
|
|
||||||
real(pReal), dimension(:,:), allocatable, private :: &
|
real(pReal), dimension(:,:), allocatable, private :: &
|
||||||
|
@ -73,20 +73,20 @@ module plastic_kinehardening
|
||||||
end type
|
end type
|
||||||
|
|
||||||
type, private :: tKinehardeningState
|
type, private :: tKinehardeningState
|
||||||
real(pReal), pointer, dimension(:,:) :: & !< vectors along NipcMyInstance
|
real(pReal), pointer, dimension(:,:) :: & !< vectors along NipcMyInstance
|
||||||
crss, & !< critical resolved stress
|
crss, & !< critical resolved stress
|
||||||
crss_back, & !< critical resolved back stress
|
crss_back, & !< critical resolved back stress
|
||||||
sense, & !< sense of acting shear stress (-1 or +1)
|
sense, & !< sense of acting shear stress (-1 or +1)
|
||||||
chi0, & !< backstress at last switch of stress sense
|
chi0, & !< backstress at last switch of stress sense
|
||||||
gamma0, & !< accumulated shear at last switch of stress sense
|
gamma0, & !< accumulated shear at last switch of stress sense
|
||||||
accshear !< accumulated (absolute) shear
|
accshear !< accumulated (absolute) shear
|
||||||
|
|
||||||
real(pReal), pointer, dimension(:) :: & !< scalars along NipcMyInstance
|
real(pReal), pointer, dimension(:) :: & !< scalars along NipcMyInstance
|
||||||
sumGamma !< accumulated shear across all systems
|
sumGamma !< accumulated shear across all systems
|
||||||
end type
|
end type
|
||||||
|
|
||||||
type(tParameters), dimension(:), allocatable, private :: &
|
type(tParameters), dimension(:), allocatable, private :: &
|
||||||
param !< containers of constitutive parameters (len Ninstance)
|
param !< containers of constitutive parameters (len Ninstance)
|
||||||
|
|
||||||
type(tKinehardeningState), allocatable, dimension(:), private :: &
|
type(tKinehardeningState), allocatable, dimension(:), private :: &
|
||||||
dotState, &
|
dotState, &
|
||||||
|
@ -156,9 +156,10 @@ subroutine plastic_kinehardening_init(fileUnit)
|
||||||
integer(pInt), intent(in) :: fileUnit
|
integer(pInt), intent(in) :: fileUnit
|
||||||
|
|
||||||
integer(pInt), allocatable, dimension(:) :: chunkPos
|
integer(pInt), allocatable, dimension(:) :: chunkPos
|
||||||
|
integer(kind(undefined_ID)) :: &
|
||||||
|
output_ID
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
o, j, k, f, &
|
o, j, k, f, &
|
||||||
output_ID, &
|
|
||||||
phase, &
|
phase, &
|
||||||
instance, &
|
instance, &
|
||||||
maxNinstance, &
|
maxNinstance, &
|
||||||
|
@ -178,8 +179,6 @@ subroutine plastic_kinehardening_init(fileUnit)
|
||||||
tag = '', &
|
tag = '', &
|
||||||
line = '', &
|
line = '', &
|
||||||
extmsg = ''
|
extmsg = ''
|
||||||
character(len=64) :: &
|
|
||||||
outputtag = ''
|
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- constitutive_'//PLASTICITY_KINEHARDENING_label//' init -+>>>'
|
write(6,'(/,a)') ' <<<+- constitutive_'//PLASTICITY_KINEHARDENING_label//' init -+>>>'
|
||||||
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
||||||
|
@ -221,7 +220,6 @@ subroutine plastic_kinehardening_init(fileUnit)
|
||||||
Nchunks_SlipFamilies = count(lattice_NslipSystem(:,phase) > 0_pInt) ! maximum number of slip families according to lattice type of current phase
|
Nchunks_SlipFamilies = count(lattice_NslipSystem(:,phase) > 0_pInt) ! maximum number of slip families according to lattice type of current phase
|
||||||
Nchunks_SlipSlip = maxval(lattice_interactionSlipSlip(:,:,phase))
|
Nchunks_SlipSlip = maxval(lattice_interactionSlipSlip(:,:,phase))
|
||||||
Nchunks_nonSchmid = lattice_NnonSchmid(phase)
|
Nchunks_nonSchmid = lattice_NnonSchmid(phase)
|
||||||
allocate(param(instance)%outputID(phase_Noutput(phase)), source=undefined_ID) ! allocate space for IDs of every requested output
|
|
||||||
allocate(param(instance)%crss0 (Nchunks_SlipFamilies), source=0.0_pReal)
|
allocate(param(instance)%crss0 (Nchunks_SlipFamilies), source=0.0_pReal)
|
||||||
allocate(param(instance)%tau1 (Nchunks_SlipFamilies), source=0.0_pReal)
|
allocate(param(instance)%tau1 (Nchunks_SlipFamilies), source=0.0_pReal)
|
||||||
allocate(param(instance)%tau1_b (Nchunks_SlipFamilies), source=0.0_pReal)
|
allocate(param(instance)%tau1_b (Nchunks_SlipFamilies), source=0.0_pReal)
|
||||||
|
@ -237,39 +235,48 @@ subroutine plastic_kinehardening_init(fileUnit)
|
||||||
cycle ! skip to next line
|
cycle ! skip to next line
|
||||||
endif
|
endif
|
||||||
if (phase > 0_pInt ) then; if (phase_plasticity(phase) == PLASTICITY_KINEHARDENING_ID) then ! one of my phases. Do not short-circuit here (.and. between if-statements), it's not safe in Fortran
|
if (phase > 0_pInt ) then; if (phase_plasticity(phase) == PLASTICITY_KINEHARDENING_ID) then ! one of my phases. Do not short-circuit here (.and. between if-statements), it's not safe in Fortran
|
||||||
instance = phase_plasticityInstance(phase) ! which instance of my plasticity is present phase
|
|
||||||
chunkPos = IO_stringPos(line)
|
chunkPos = IO_stringPos(line)
|
||||||
tag = IO_lc(IO_stringValue(line,chunkPos,1_pInt)) ! extract key
|
tag = IO_lc(IO_stringValue(line,chunkPos,1_pInt)) ! extract key
|
||||||
select case(tag)
|
select case(tag)
|
||||||
case ('(output)')
|
case ('(output)')
|
||||||
outputtag = IO_lc(IO_stringValue(line,chunkPos,2_pInt))
|
|
||||||
output_ID = undefined_ID
|
output_ID = undefined_ID
|
||||||
select case(outputtag)
|
select case(IO_lc(IO_stringValue(line,chunkPos,2_pInt)))
|
||||||
case ('resistance')
|
case ('resistance')
|
||||||
output_ID = crss_ID
|
output_ID = crss_ID
|
||||||
|
|
||||||
case ('backstress')
|
case ('backstress')
|
||||||
output_ID = crss_back_ID
|
output_ID = crss_back_ID
|
||||||
|
|
||||||
case ('sense')
|
case ('sense')
|
||||||
output_ID = sense_ID
|
output_ID = sense_ID
|
||||||
|
|
||||||
case ('chi0')
|
case ('chi0')
|
||||||
output_ID = chi0_ID
|
output_ID = chi0_ID
|
||||||
|
|
||||||
case ('gamma0')
|
case ('gamma0')
|
||||||
output_ID = gamma0_ID
|
output_ID = gamma0_ID
|
||||||
|
|
||||||
case ('accumulatedshear')
|
case ('accumulatedshear')
|
||||||
output_ID = accshear_ID
|
output_ID = accshear_ID
|
||||||
|
|
||||||
case ('totalshear')
|
case ('totalshear')
|
||||||
output_ID = sumGamma_ID
|
output_ID = sumGamma_ID
|
||||||
|
|
||||||
case ('shearrate')
|
case ('shearrate')
|
||||||
output_ID = shearrate_ID
|
output_ID = shearrate_ID
|
||||||
|
|
||||||
case ('resolvedstress')
|
case ('resolvedstress')
|
||||||
output_ID = resolvedstress_ID
|
output_ID = resolvedstress_ID
|
||||||
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
if (output_ID /= undefined_ID) then
|
if (output_ID /= undefined_ID) then
|
||||||
plastic_kinehardening_Noutput(instance) = plastic_kinehardening_Noutput(instance) + 1_pInt
|
plastic_kinehardening_Noutput(instance) = plastic_kinehardening_Noutput(instance) + 1_pInt
|
||||||
plastic_kinehardening_output(plastic_kinehardening_Noutput(instance),instance) = outputtag
|
plastic_kinehardening_output(plastic_kinehardening_Noutput(instance),instance) = &
|
||||||
param(instance)%outputID (plastic_kinehardening_Noutput(instance)) = output_ID
|
IO_lc(IO_stringValue(line,chunkPos,2_pInt))
|
||||||
|
param(instance)%outputID = [param(instance)%outputID, output_ID]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! parameters depending on number of slip families
|
! parameters depending on number of slip families
|
||||||
case ('nslip')
|
case ('nslip')
|
||||||
|
@ -620,7 +627,6 @@ subroutine plastic_kinehardening_LpAndItsTangent(Lp,dLp_dTstar99, &
|
||||||
math_transpose33
|
math_transpose33
|
||||||
use lattice, only: &
|
use lattice, only: &
|
||||||
lattice_Sslip, & !< schmid matrix
|
lattice_Sslip, & !< schmid matrix
|
||||||
lattice_Sslip_v, &
|
|
||||||
lattice_maxNslipFamily, &
|
lattice_maxNslipFamily, &
|
||||||
lattice_NslipSystem, &
|
lattice_NslipSystem, &
|
||||||
lattice_NnonSchmid
|
lattice_NnonSchmid
|
||||||
|
@ -740,8 +746,6 @@ subroutine plastic_kinehardening_deltaState(Tstar_v,ipc,ip,el)
|
||||||
ipc, & !< component-ID of integration point
|
ipc, & !< component-ID of integration point
|
||||||
ip, & !< integration point
|
ip, & !< integration point
|
||||||
el !< element
|
el !< element
|
||||||
real(pReal), dimension(6) :: &
|
|
||||||
Tstar_dev_v !< deviatoric 2nd Piola Kirchhoff stress tensor in Mandel notation
|
|
||||||
real(pReal), dimension(plastic_kinehardening_totalNslip(phase_plasticityInstance(phaseAt(ipc,ip,el)))) :: &
|
real(pReal), dimension(plastic_kinehardening_totalNslip(phase_plasticityInstance(phaseAt(ipc,ip,el)))) :: &
|
||||||
gdot_pos,gdot_neg, &
|
gdot_pos,gdot_neg, &
|
||||||
tau_pos,tau_neg, &
|
tau_pos,tau_neg, &
|
||||||
|
@ -800,14 +804,10 @@ end subroutine plastic_kinehardening_deltaState
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine plastic_kinehardening_dotState(Tstar_v,ipc,ip,el)
|
subroutine plastic_kinehardening_dotState(Tstar_v,ipc,ip,el)
|
||||||
use lattice, only: &
|
use lattice, only: &
|
||||||
lattice_Sslip_v, &
|
lattice_maxNslipFamily
|
||||||
lattice_maxNslipFamily, &
|
|
||||||
lattice_NslipSystem, &
|
|
||||||
lattice_NnonSchmid
|
|
||||||
use material, only: &
|
use material, only: &
|
||||||
material_phase, &
|
material_phase, &
|
||||||
phaseAt, phasememberAt, &
|
phaseAt, phasememberAt, &
|
||||||
plasticState, &
|
|
||||||
phase_plasticityInstance
|
phase_plasticityInstance
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -820,10 +820,8 @@ subroutine plastic_kinehardening_dotState(Tstar_v,ipc,ip,el)
|
||||||
|
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
instance,ph, &
|
instance,ph, &
|
||||||
f,i,j,k, &
|
f,i,j, &
|
||||||
index_myFamily,index_otherFamily, &
|
|
||||||
nSlip, &
|
nSlip, &
|
||||||
offset_accshear, &
|
|
||||||
of
|
of
|
||||||
|
|
||||||
real(pReal), dimension(plastic_kinehardening_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
real(pReal), dimension(plastic_kinehardening_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
||||||
|
@ -874,14 +872,12 @@ end subroutine plastic_kinehardening_dotState
|
||||||
function plastic_kinehardening_postResults(Tstar_v,ipc,ip,el)
|
function plastic_kinehardening_postResults(Tstar_v,ipc,ip,el)
|
||||||
use material, only: &
|
use material, only: &
|
||||||
material_phase, &
|
material_phase, &
|
||||||
plasticState, &
|
|
||||||
phaseAt, phasememberAt, &
|
phaseAt, phasememberAt, &
|
||||||
phase_plasticityInstance
|
phase_plasticityInstance
|
||||||
use lattice, only: &
|
use lattice, only: &
|
||||||
lattice_Sslip_v, &
|
lattice_Sslip_v, &
|
||||||
lattice_maxNslipFamily, &
|
lattice_maxNslipFamily, &
|
||||||
lattice_NslipSystem, &
|
lattice_NslipSystem
|
||||||
lattice_NnonSchmid
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
real(pReal), dimension(6), intent(in) :: &
|
real(pReal), dimension(6), intent(in) :: &
|
||||||
|
@ -897,7 +893,7 @@ function plastic_kinehardening_postResults(Tstar_v,ipc,ip,el)
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
instance,ph, of, &
|
instance,ph, of, &
|
||||||
nSlip,&
|
nSlip,&
|
||||||
o,f,i,c,j,k, &
|
o,f,i,c,j,&
|
||||||
index_myFamily
|
index_myFamily
|
||||||
|
|
||||||
real(pReal), dimension(plastic_kinehardening_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
real(pReal), dimension(plastic_kinehardening_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
!> @author Pratheek Shanthraj, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Pratheek Shanthraj, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @brief Basic scheme PETSc solver
|
!> @brief Basic scheme solver
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
module spectral_mech_basic
|
module spectral_mech_basic
|
||||||
#include <petsc/finclude/petscsnes.h>
|
#include <petsc/finclude/petscsnes.h>
|
||||||
|
@ -22,7 +22,7 @@ module spectral_mech_basic
|
||||||
private
|
private
|
||||||
|
|
||||||
character (len=*), parameter, public :: &
|
character (len=*), parameter, public :: &
|
||||||
DAMASK_spectral_SolverBasicPETSC_label = 'basic'
|
DAMASK_spectral_SolverBasic_label = 'basic'
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! derived types
|
! derived types
|
||||||
|
@ -65,9 +65,9 @@ module spectral_mech_basic
|
||||||
real(pReal), private, dimension(3,3) :: mask_stress = 0.0_pReal
|
real(pReal), private, dimension(3,3) :: mask_stress = 0.0_pReal
|
||||||
|
|
||||||
public :: &
|
public :: &
|
||||||
basicPETSc_init, &
|
basic_init, &
|
||||||
basicPETSc_solution, &
|
basic_solution, &
|
||||||
BasicPETSc_forward
|
basic_forward
|
||||||
external :: &
|
external :: &
|
||||||
PETScErrorF ! is called in the CHKERRQ macro
|
PETScErrorF ! is called in the CHKERRQ macro
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ contains
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief allocates all necessary fields and fills them with data, potentially from restart info
|
!> @brief allocates all necessary fields and fills them with data, potentially from restart info
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine basicPETSc_init
|
subroutine basic_init
|
||||||
#if defined(__GFORTRAN__) || __INTEL_COMPILER >= 1800
|
#if defined(__GFORTRAN__) || __INTEL_COMPILER >= 1800
|
||||||
use, intrinsic :: iso_fortran_env, only: &
|
use, intrinsic :: iso_fortran_env, only: &
|
||||||
compiler_version, &
|
compiler_version, &
|
||||||
|
@ -124,9 +124,9 @@ subroutine basicPETSc_init
|
||||||
external :: &
|
external :: &
|
||||||
SNESSetOptionsPrefix, &
|
SNESSetOptionsPrefix, &
|
||||||
SNESSetConvergenceTest, &
|
SNESSetConvergenceTest, &
|
||||||
DMDASNESsetFunctionLocal
|
DMDASNESSetFunctionLocal
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_spectral_solverBasicPETSc init -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_spectral_solverBasic init -+>>>'
|
||||||
write(6,'(/,a)') ' Shanthraj et al., International Journal of Plasticity, 66:31–45, 2015'
|
write(6,'(/,a)') ' Shanthraj et al., International Journal of Plasticity, 66:31–45, 2015'
|
||||||
write(6,'(a,/)') ' https://doi.org/10.1016/j.ijplas.2014.02.006'
|
write(6,'(a,/)') ' https://doi.org/10.1016/j.ijplas.2014.02.006'
|
||||||
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
||||||
|
@ -158,9 +158,9 @@ subroutine basicPETSc_init
|
||||||
call DMsetFromOptions(da,ierr); CHKERRQ(ierr)
|
call DMsetFromOptions(da,ierr); CHKERRQ(ierr)
|
||||||
call DMsetUp(da,ierr); CHKERRQ(ierr)
|
call DMsetUp(da,ierr); CHKERRQ(ierr)
|
||||||
call DMcreateGlobalVector(da,solution_vec,ierr); CHKERRQ(ierr) ! global solution vector (grid x 9, i.e. every def grad tensor)
|
call DMcreateGlobalVector(da,solution_vec,ierr); CHKERRQ(ierr) ! global solution vector (grid x 9, i.e. every def grad tensor)
|
||||||
call DMDASNESsetFunctionLocal(da,INSERT_VALUES,BasicPETSC_formResidual,PETSC_NULL_SNES,ierr) ! residual vector of same shape as solution vector
|
call DMDASNESsetFunctionLocal(da,INSERT_VALUES,Basic_formResidual,PETSC_NULL_SNES,ierr) ! residual vector of same shape as solution vector
|
||||||
CHKERRQ(ierr)
|
CHKERRQ(ierr)
|
||||||
call SNESsetConvergenceTest(snes,BasicPETSC_converged,PETSC_NULL_SNES,PETSC_NULL_FUNCTION,ierr) ! specify custom convergence check function "_converged"
|
call SNESsetConvergenceTest(snes,Basic_converged,PETSC_NULL_SNES,PETSC_NULL_FUNCTION,ierr) ! specify custom convergence check function "_converged"
|
||||||
CHKERRQ(ierr)
|
CHKERRQ(ierr)
|
||||||
call SNESsetFromOptions(snes,ierr); CHKERRQ(ierr) ! pull it all together with additional CLI arguments
|
call SNESsetFromOptions(snes,ierr); CHKERRQ(ierr) ! pull it all together with additional CLI arguments
|
||||||
|
|
||||||
|
@ -212,12 +212,12 @@ subroutine basicPETSc_init
|
||||||
|
|
||||||
call Utilities_updateGamma(C_minMaxAvg,.true.)
|
call Utilities_updateGamma(C_minMaxAvg,.true.)
|
||||||
|
|
||||||
end subroutine basicPETSc_init
|
end subroutine basic_init
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief solution for the Basic PETSC scheme with internal iterations
|
!> @brief solution for the Basic scheme with internal iterations
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
type(tSolutionState) function basicPETSc_solution(incInfoIn,timeinc,timeinc_old,stress_BC,rotation_BC)
|
type(tSolutionState) function basic_solution(incInfoIn,timeinc,timeinc_old,stress_BC,rotation_BC)
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
IO_error
|
IO_error
|
||||||
use numerics, only: &
|
use numerics, only: &
|
||||||
|
@ -275,19 +275,19 @@ type(tSolutionState) function basicPETSc_solution(incInfoIn,timeinc,timeinc_old,
|
||||||
! check convergence
|
! check convergence
|
||||||
call SNESGetConvergedReason(snes,reason,ierr); CHKERRQ(ierr)
|
call SNESGetConvergedReason(snes,reason,ierr); CHKERRQ(ierr)
|
||||||
|
|
||||||
BasicPETSc_solution%converged = reason > 0
|
basic_solution%converged = reason > 0
|
||||||
basicPETSC_solution%iterationsNeeded = totalIter
|
basic_solution%iterationsNeeded = totalIter
|
||||||
basicPETSc_solution%termIll = terminallyIll
|
basic_solution%termIll = terminallyIll
|
||||||
terminallyIll = .false.
|
terminallyIll = .false.
|
||||||
if (reason == -4) call IO_error(893_pInt) ! MPI error
|
if (reason == -4) call IO_error(893_pInt) ! MPI error
|
||||||
|
|
||||||
end function BasicPETSc_solution
|
end function basic_solution
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief forms the basic residual vector
|
!> @brief forms the basic residual vector
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine BasicPETSC_formResidual(in,x_scal,f_scal,dummy,ierr)
|
subroutine Basic_formResidual(in,x_scal,f_scal,dummy,ierr)
|
||||||
use numerics, only: &
|
use numerics, only: &
|
||||||
itmax, &
|
itmax, &
|
||||||
itmin
|
itmin
|
||||||
|
@ -370,13 +370,13 @@ subroutine BasicPETSC_formResidual(in,x_scal,f_scal,dummy,ierr)
|
||||||
! constructing residual
|
! constructing residual
|
||||||
f_scal = tensorField_real(1:3,1:3,1:grid(1),1:grid(2),1:grid3) ! Gamma*P gives correction towards div(P) = 0, so needs to be zero, too
|
f_scal = tensorField_real(1:3,1:3,1:grid(1),1:grid(2),1:grid3) ! Gamma*P gives correction towards div(P) = 0, so needs to be zero, too
|
||||||
|
|
||||||
end subroutine BasicPETSc_formResidual
|
end subroutine Basic_formResidual
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief convergence check
|
!> @brief convergence check
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine BasicPETSc_converged(snes_local,PETScIter,xnorm,snorm,fnorm,reason,dummy,ierr)
|
subroutine Basic_converged(snes_local,PETScIter,xnorm,snorm,fnorm,reason,dummy,ierr)
|
||||||
use numerics, only: &
|
use numerics, only: &
|
||||||
itmax, &
|
itmax, &
|
||||||
itmin, &
|
itmin, &
|
||||||
|
@ -425,14 +425,14 @@ subroutine BasicPETSc_converged(snes_local,PETScIter,xnorm,snorm,fnorm,reason,du
|
||||||
write(6,'(/,a)') ' ==========================================================================='
|
write(6,'(/,a)') ' ==========================================================================='
|
||||||
flush(6)
|
flush(6)
|
||||||
|
|
||||||
end subroutine BasicPETSc_converged
|
end subroutine Basic_converged
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief forwarding routine
|
!> @brief forwarding routine
|
||||||
!> @details find new boundary conditions and best F estimate for end of current timestep
|
!> @details find new boundary conditions and best F estimate for end of current timestep
|
||||||
!> possibly writing restart information, triggering of state increment in DAMASK, and updating of IPcoordinates
|
!> possibly writing restart information, triggering of state increment in DAMASK, and updating of IPcoordinates
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine BasicPETSc_forward(guess,timeinc,timeinc_old,loadCaseTime,deformation_BC,stress_BC,rotation_BC)
|
subroutine Basic_forward(guess,timeinc,timeinc_old,loadCaseTime,deformation_BC,stress_BC,rotation_BC)
|
||||||
use math, only: &
|
use math, only: &
|
||||||
math_mul33x33 ,&
|
math_mul33x33 ,&
|
||||||
math_rotate_backward33
|
math_rotate_backward33
|
||||||
|
@ -538,6 +538,6 @@ subroutine BasicPETSc_forward(guess,timeinc,timeinc_old,loadCaseTime,deformation
|
||||||
math_rotate_backward33(F_aim,rotation_BC)),[9,grid(1),grid(2),grid3])
|
math_rotate_backward33(F_aim,rotation_BC)),[9,grid(1),grid(2),grid3])
|
||||||
call DMDAVecRestoreArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr)
|
call DMDAVecRestoreArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr)
|
||||||
|
|
||||||
end subroutine BasicPETSc_forward
|
end subroutine Basic_forward
|
||||||
|
|
||||||
end module spectral_mech_basic
|
end module spectral_mech_basic
|
||||||
|
|
Loading…
Reference in New Issue