diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 77b33797c..99daef5e5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -151,13 +151,20 @@ Spectral_geometryPacking: - release ################################################################################################### -Post_General: +Post_AverageDown: stage: postprocessing - script: PostProcessing/test.py + script: averageDown/test.py except: - master - release +#Post_General: +# stage: postprocessing +# script: PostProcessing/test.py +# except: +# - master +# - release + Post_GeometryReconstruction: stage: postprocessing script: Spectral_geometryReconstruction/test.py @@ -193,6 +200,13 @@ Post_ParaviewRelated: - master - release +Post_OrientationConversion: + stage: postprocessing + script: OrientationConversion/test.py + except: + - master + - release + ################################################################################################### Compile_Spectral_Intel: stage: compilePETScIntel @@ -243,6 +257,13 @@ Compile_Intel_Prepare: - release ################################################################################################### +Thermal: + stage: spectral + script: Thermal/test.py + except: + - master + - release + Spectral_PackedGeometry: stage: spectral script: Spectral_PackedGeometry/test.py @@ -343,19 +364,12 @@ Phenopowerlaw_singleSlip: - master - release -HybridIA: - stage: spectral - script: HybridIA/test.py - except: - - master - - release - -TextureComponents: - stage: spectral - script: TextureComponents/test.py - except: - - master - - release +#TextureComponents: +# stage: spectral +# script: TextureComponents/test.py +# except: +# - master +# - release ################################################################################################### @@ -423,14 +437,6 @@ SpectralExample: only: - development -AbaqusExample: - stage: example - script: - - module load $IntelAbaqus $Abaqus - - Abaqus_example/test.py - only: - - development - ################################################################################################### SpectralRuntime: stage: performance diff --git a/CMakeLists.txt b/CMakeLists.txt index f742034e2..3aa49cd7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,7 @@ linker: # CMake will execute each target in the ${petsc_config_makefile} # to acquire corresponding PETSc Variables. -find_program (MAKE_EXECUTABLE NAMES make gmake) +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 diff --git a/DAMASK_prerequisites.sh b/DAMASK_prerequisites.sh index c9e165c3c..f0a525c34 100755 --- a/DAMASK_prerequisites.sh +++ b/DAMASK_prerequisites.sh @@ -119,6 +119,9 @@ for executable in mpirun mpiexec; do getDetails $executable '--version' done +firstLevel "CMake" +getDetails cmake --version + firstLevel "Abaqus" cd installation/mods_Abaqus # to have the right environment file for executable in abaqus abq2017 abq2018; do diff --git a/PRIVATE b/PRIVATE index dd70ef078..e9f93abae 160000 --- a/PRIVATE +++ b/PRIVATE @@ -1 +1 @@ -Subproject commit dd70ef078e0b4422b4bf81030e896a7bd098e841 +Subproject commit e9f93abaecafbfbf11072ae70bca213a7201ed38 diff --git a/VERSION b/VERSION index de7fb081d..8817d8cc0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.2-955-g7663d20b +v2.0.2-1124-g0ff9e9fa diff --git a/env/DAMASK.csh b/env/DAMASK.csh index 07b4b6817..2e1dc979c 100644 --- a/env/DAMASK.csh +++ b/env/DAMASK.csh @@ -44,7 +44,6 @@ if ( $?prompt ) then echo "DAMASK $DAMASK_ROOT" echo "Spectral Solver $SOLVER" echo "Post Processing $PROCESSING" - echo "Multithreading DAMASK_NUM_THREADS=$DAMASK_NUM_THREADS" if ( $?PETSC_DIR) then echo "PETSc location $PETSC_DIR" endif @@ -52,8 +51,10 @@ if ( $?prompt ) then echo "MSC.Marc/Mentat $MSC_ROOT" endif echo + echo "Multithreading DAMASK_NUM_THREADS=$DAMASK_NUM_THREADS" echo `limit datasize` echo `limit stacksize` + echo endif setenv DAMASK_NUM_THREADS $DAMASK_NUM_THREADS diff --git a/env/DAMASK.sh b/env/DAMASK.sh index 663e9a4b3..e790ae3cc 100644 --- a/env/DAMASK.sh +++ b/env/DAMASK.sh @@ -88,6 +88,7 @@ if [ ! -z "$PS1" ]; then size=$(( 1024*$(ulimit -s) )); \ print('{:.4g} {}'.format(size / (1 << ((int(math.log(size,2) / 10) if size else 0) * 10)), \ ['bytes','KiB','MiB','GiB','TiB','EiB','ZiB'][int(math.log(size,2) / 10) if size else 0]))") + echo fi export DAMASK_NUM_THREADS diff --git a/env/DAMASK.zsh b/env/DAMASK.zsh index 43f682865..dbfde767d 100644 --- a/env/DAMASK.zsh +++ b/env/DAMASK.zsh @@ -81,6 +81,7 @@ if [ ! -z "$PS1" ]; then size=$(( 1024*$(ulimit -s) )); \ print('{:.4g} {}'.format(size / (1 << ((int(math.log(size,2) / 10) if size else 0) * 10)), \ ['bytes','KiB','MiB','GiB','TiB','EiB','ZiB'][int(math.log(size,2) / 10) if size else 0]))") + echo fi export DAMASK_NUM_THREADS diff --git a/examples/AbaqusStandard/Job_sx-px.inp b/examples/AbaqusStandard/Job_sx-px.inp deleted file mode 100644 index 12890dfdc..000000000 --- a/examples/AbaqusStandard/Job_sx-px.inp +++ /dev/null @@ -1,2832 +0,0 @@ -*Heading - stauchen -** Job name: Job_sx-px Model name: Model-1 -** Generated by: Abaqus/CAE 6.9-1 -*Preprint, echo=NO, model=NO, history=NO, contact=NO -** ---------------------------------------------------------------- -** -** PART INSTANCE: Part-sx -** -*Node - 1, 4.79746485, 1.4086628, 0. - 2, 4.20626783, 2.70320415, 0. - 3, 3.27430367, 3.7787478, 0. - 4, 2.077075, 4.54816008, 0. - 5, 0.711574197, 4.94910717, 0. - 6, -0.711574197, 4.94910717, 0. - 7, -2.077075, 4.54816008, 0. - 8, -3.27430367, 3.7787478, 0. - 9, -4.20626783, 2.70320415, 0. - 10, -4.79746485, 1.4086628, 0. - 11, -5., 0., 0. - 12, -4.79746485, -1.4086628, 0. - 13, -4.20626783, -2.70320415, 0. - 14, -3.27430367, -3.7787478, 0. - 15, -2.077075, -4.54816008, 0. - 16, -0.711574197, -4.94910717, 0. - 17, 0.711574197, -4.94910717, 0. - 18, 2.077075, -4.54816008, 0. - 19, 3.27430367, -3.7787478, 0. - 20, 4.20626783, -2.70320415, 0. - 21, 4.79746485, -1.4086628, 0. - 22, 5., 0., 0. - 23, 1.6963793, -3.22420955, 0. - 24, -1.00844872, -2.57745242, 0. - 25, -1.37056375, -1.55261672, 0. - 26, -2.79301119, -2.04475617, 0. - 27, -3.15915275, -0.953875899, 0. - 28, -3.31513882, 0.18763873, 0. - 29, -3.26485705, 1.3136189, 0. - 30, -3.05202723, 2.36488891, 0. - 31, -2.76825261, 3.22686028, 0. - 32, -1.04677927, 2.62223077, 0. - 33, 0.233534187, 3.4200623, 0. - 34, 1.29102433, 3.0963695, 0. - 35, 2.98705912, -1.83198035, 0. - 36, 2.641819, -2.9781971, 0. - 37, 2.27109313, 2.54390693, 0. - 38, 3.06495118, 1.8082819, 0. - 39, 3.596766, 0.890879691, 0. - 40, 3.78296232, -0.171689898, 0. - 41, 3.88936043, -1.1366502, 0. - 42, -1.96019876, 2.43814969, 0. - 43, -1.84388077, 0.50134325, 0. - 44, -1.66432226, -0.536203504, 0. - 45, 0.304624766, -2.21873379, 0. - 46, -0.499021262, 2.01902366, 0. - 47, 0.621557593, 1.88027596, 0. - 48, 2.7210238, -0.515629292, 0. - 49, 1.58998036, -1.91277814, 0. - 50, 1.46154559, 1.41150224, 0. - 51, 2.16689587, 0.844061613, 0. - 52, -0.596776128, 0.859395862, 0. - 53, -0.355480254, -0.117340848, 0. - 54, 0.717503786, 0.440903485, 0. - 55, 1.43037975, -0.478143334, 0. - 56, -0.798393071, 3.61305261, 0. - 57, -1.88272476, 3.47693872, 0. - 58, -2.23948669, -3.02067423, 0. - 59, -1.70037711, -3.77449918, 0. - 60, 0.511443317, -3.51093721, 0. - 61, -0.700032651, -3.69734979, 0. - 62, 2.78402972, 0.427267253, 0. - 63, -1.90023589, 1.52119613, 0. - 64, 0.00998886116, -1.09023917, 0. - 65, 0.257420778, 1.0292536, 0. - 66, 4.79746485, 1.4086628, 1.36363637 - 67, 4.20626783, 2.70320415, 1.36363637 - 68, 3.27430367, 3.7787478, 1.36363637 - 69, 2.077075, 4.54816008, 1.36363637 - 70, 0.711574197, 4.94910717, 1.36363637 - 71, -0.711574197, 4.94910717, 1.36363637 - 72, -2.077075, 4.54816008, 1.36363637 - 73, -3.27430367, 3.7787478, 1.36363637 - 74, -4.20626783, 2.70320415, 1.36363637 - 75, -4.79746485, 1.4086628, 1.36363637 - 76, -5., 0., 1.36363637 - 77, -4.79746485, -1.4086628, 1.36363637 - 78, -4.20626783, -2.70320415, 1.36363637 - 79, -3.27430367, -3.7787478, 1.36363637 - 80, -2.077075, -4.54816008, 1.36363637 - 81, -0.711574197, -4.94910717, 1.36363637 - 82, 0.711574197, -4.94910717, 1.36363637 - 83, 2.077075, -4.54816008, 1.36363637 - 84, 3.27430367, -3.7787478, 1.36363637 - 85, 4.20626783, -2.70320415, 1.36363637 - 86, 4.79746485, -1.4086628, 1.36363637 - 87, 5., 0., 1.36363637 - 88, 1.6963793, -3.22420955, 1.36363637 - 89, -1.00844872, -2.57745242, 1.36363637 - 90, -1.37056375, -1.55261672, 1.36363637 - 91, -2.79301119, -2.04475617, 1.36363637 - 92, -3.15915275, -0.953875899, 1.36363637 - 93, -3.31513882, 0.18763873, 1.36363637 - 94, -3.26485705, 1.3136189, 1.36363637 - 95, -3.05202723, 2.36488891, 1.36363637 - 96, -2.76825261, 3.22686028, 1.36363637 - 97, -1.04677927, 2.62223077, 1.36363637 - 98, 0.233534187, 3.4200623, 1.36363637 - 99, 1.29102433, 3.0963695, 1.36363637 - 100, 2.98705912, -1.83198035, 1.36363637 - 101, 2.641819, -2.9781971, 1.36363637 - 102, 2.27109313, 2.54390693, 1.36363637 - 103, 3.06495118, 1.8082819, 1.36363637 - 104, 3.596766, 0.890879691, 1.36363637 - 105, 3.78296232, -0.171689898, 1.36363637 - 106, 3.88936043, -1.1366502, 1.36363637 - 107, -1.96019876, 2.43814969, 1.36363637 - 108, -1.84388077, 0.50134325, 1.36363637 - 109, -1.66432226, -0.536203504, 1.36363637 - 110, 0.304624766, -2.21873379, 1.36363637 - 111, -0.499021262, 2.01902366, 1.36363637 - 112, 0.621557593, 1.88027596, 1.36363637 - 113, 2.7210238, -0.515629292, 1.36363637 - 114, 1.58998036, -1.91277814, 1.36363637 - 115, 1.46154559, 1.41150224, 1.36363637 - 116, 2.16689587, 0.844061613, 1.36363637 - 117, -0.596776128, 0.859395862, 1.36363637 - 118, -0.355480254, -0.117340848, 1.36363637 - 119, 0.717503786, 0.440903485, 1.36363637 - 120, 1.43037975, -0.478143334, 1.36363637 - 121, -0.798393071, 3.61305261, 1.36363637 - 122, -1.88272476, 3.47693872, 1.36363637 - 123, -2.23948669, -3.02067423, 1.36363637 - 124, -1.70037711, -3.77449918, 1.36363637 - 125, 0.511443317, -3.51093721, 1.36363637 - 126, -0.700032651, -3.69734979, 1.36363637 - 127, 2.78402972, 0.427267253, 1.36363637 - 128, -1.90023589, 1.52119613, 1.36363637 - 129, 0.00998886116, -1.09023917, 1.36363637 - 130, 0.257420778, 1.0292536, 1.36363637 - 131, 4.79746485, 1.4086628, 2.72727275 - 132, 4.20626783, 2.70320415, 2.72727275 - 133, 3.27430367, 3.7787478, 2.72727275 - 134, 2.077075, 4.54816008, 2.72727275 - 135, 0.711574197, 4.94910717, 2.72727275 - 136, -0.711574197, 4.94910717, 2.72727275 - 137, -2.077075, 4.54816008, 2.72727275 - 138, -3.27430367, 3.7787478, 2.72727275 - 139, -4.20626783, 2.70320415, 2.72727275 - 140, -4.79746485, 1.4086628, 2.72727275 - 141, -5., 0., 2.72727275 - 142, -4.79746485, -1.4086628, 2.72727275 - 143, -4.20626783, -2.70320415, 2.72727275 - 144, -3.27430367, -3.7787478, 2.72727275 - 145, -2.077075, -4.54816008, 2.72727275 - 146, -0.711574197, -4.94910717, 2.72727275 - 147, 0.711574197, -4.94910717, 2.72727275 - 148, 2.077075, -4.54816008, 2.72727275 - 149, 3.27430367, -3.7787478, 2.72727275 - 150, 4.20626783, -2.70320415, 2.72727275 - 151, 4.79746485, -1.4086628, 2.72727275 - 152, 5., 0., 2.72727275 - 153, 1.6963793, -3.22420955, 2.72727275 - 154, -1.00844872, -2.57745242, 2.72727275 - 155, -1.37056375, -1.55261672, 2.72727275 - 156, -2.79301119, -2.04475617, 2.72727275 - 157, -3.15915275, -0.953875899, 2.72727275 - 158, -3.31513882, 0.18763873, 2.72727275 - 159, -3.26485705, 1.3136189, 2.72727275 - 160, -3.05202723, 2.36488891, 2.72727275 - 161, -2.76825261, 3.22686028, 2.72727275 - 162, -1.04677927, 2.62223077, 2.72727275 - 163, 0.233534187, 3.4200623, 2.72727275 - 164, 1.29102433, 3.0963695, 2.72727275 - 165, 2.98705912, -1.83198035, 2.72727275 - 166, 2.641819, -2.9781971, 2.72727275 - 167, 2.27109313, 2.54390693, 2.72727275 - 168, 3.06495118, 1.8082819, 2.72727275 - 169, 3.596766, 0.890879691, 2.72727275 - 170, 3.78296232, -0.171689898, 2.72727275 - 171, 3.88936043, -1.1366502, 2.72727275 - 172, -1.96019876, 2.43814969, 2.72727275 - 173, -1.84388077, 0.50134325, 2.72727275 - 174, -1.66432226, -0.536203504, 2.72727275 - 175, 0.304624766, -2.21873379, 2.72727275 - 176, -0.499021262, 2.01902366, 2.72727275 - 177, 0.621557593, 1.88027596, 2.72727275 - 178, 2.7210238, -0.515629292, 2.72727275 - 179, 1.58998036, -1.91277814, 2.72727275 - 180, 1.46154559, 1.41150224, 2.72727275 - 181, 2.16689587, 0.844061613, 2.72727275 - 182, -0.596776128, 0.859395862, 2.72727275 - 183, -0.355480254, -0.117340848, 2.72727275 - 184, 0.717503786, 0.440903485, 2.72727275 - 185, 1.43037975, -0.478143334, 2.72727275 - 186, -0.798393071, 3.61305261, 2.72727275 - 187, -1.88272476, 3.47693872, 2.72727275 - 188, -2.23948669, -3.02067423, 2.72727275 - 189, -1.70037711, -3.77449918, 2.72727275 - 190, 0.511443317, -3.51093721, 2.72727275 - 191, -0.700032651, -3.69734979, 2.72727275 - 192, 2.78402972, 0.427267253, 2.72727275 - 193, -1.90023589, 1.52119613, 2.72727275 - 194, 0.00998886116, -1.09023917, 2.72727275 - 195, 0.257420778, 1.0292536, 2.72727275 - 196, 4.79746485, 1.4086628, 4.090909 - 197, 4.20626783, 2.70320415, 4.090909 - 198, 3.27430367, 3.7787478, 4.090909 - 199, 2.077075, 4.54816008, 4.090909 - 200, 0.711574197, 4.94910717, 4.090909 - 201, -0.711574197, 4.94910717, 4.090909 - 202, -2.077075, 4.54816008, 4.090909 - 203, -3.27430367, 3.7787478, 4.090909 - 204, -4.20626783, 2.70320415, 4.090909 - 205, -4.79746485, 1.4086628, 4.090909 - 206, -5., 0., 4.090909 - 207, -4.79746485, -1.4086628, 4.090909 - 208, -4.20626783, -2.70320415, 4.090909 - 209, -3.27430367, -3.7787478, 4.090909 - 210, -2.077075, -4.54816008, 4.090909 - 211, -0.711574197, -4.94910717, 4.090909 - 212, 0.711574197, -4.94910717, 4.090909 - 213, 2.077075, -4.54816008, 4.090909 - 214, 3.27430367, -3.7787478, 4.090909 - 215, 4.20626783, -2.70320415, 4.090909 - 216, 4.79746485, -1.4086628, 4.090909 - 217, 5., 0., 4.090909 - 218, 1.6963793, -3.22420955, 4.090909 - 219, -1.00844872, -2.57745242, 4.090909 - 220, -1.37056375, -1.55261672, 4.090909 - 221, -2.79301119, -2.04475617, 4.090909 - 222, -3.15915275, -0.953875899, 4.090909 - 223, -3.31513882, 0.18763873, 4.090909 - 224, -3.26485705, 1.3136189, 4.090909 - 225, -3.05202723, 2.36488891, 4.090909 - 226, -2.76825261, 3.22686028, 4.090909 - 227, -1.04677927, 2.62223077, 4.090909 - 228, 0.233534187, 3.4200623, 4.090909 - 229, 1.29102433, 3.0963695, 4.090909 - 230, 2.98705912, -1.83198035, 4.090909 - 231, 2.641819, -2.9781971, 4.090909 - 232, 2.27109313, 2.54390693, 4.090909 - 233, 3.06495118, 1.8082819, 4.090909 - 234, 3.596766, 0.890879691, 4.090909 - 235, 3.78296232, -0.171689898, 4.090909 - 236, 3.88936043, -1.1366502, 4.090909 - 237, -1.96019876, 2.43814969, 4.090909 - 238, -1.84388077, 0.50134325, 4.090909 - 239, -1.66432226, -0.536203504, 4.090909 - 240, 0.304624766, -2.21873379, 4.090909 - 241, -0.499021262, 2.01902366, 4.090909 - 242, 0.621557593, 1.88027596, 4.090909 - 243, 2.7210238, -0.515629292, 4.090909 - 244, 1.58998036, -1.91277814, 4.090909 - 245, 1.46154559, 1.41150224, 4.090909 - 246, 2.16689587, 0.844061613, 4.090909 - 247, -0.596776128, 0.859395862, 4.090909 - 248, -0.355480254, -0.117340848, 4.090909 - 249, 0.717503786, 0.440903485, 4.090909 - 250, 1.43037975, -0.478143334, 4.090909 - 251, -0.798393071, 3.61305261, 4.090909 - 252, -1.88272476, 3.47693872, 4.090909 - 253, -2.23948669, -3.02067423, 4.090909 - 254, -1.70037711, -3.77449918, 4.090909 - 255, 0.511443317, -3.51093721, 4.090909 - 256, -0.700032651, -3.69734979, 4.090909 - 257, 2.78402972, 0.427267253, 4.090909 - 258, -1.90023589, 1.52119613, 4.090909 - 259, 0.00998886116, -1.09023917, 4.090909 - 260, 0.257420778, 1.0292536, 4.090909 - 261, 4.79746485, 1.4086628, 5.4545455 - 262, 4.20626783, 2.70320415, 5.4545455 - 263, 3.27430367, 3.7787478, 5.4545455 - 264, 2.077075, 4.54816008, 5.4545455 - 265, 0.711574197, 4.94910717, 5.4545455 - 266, -0.711574197, 4.94910717, 5.4545455 - 267, -2.077075, 4.54816008, 5.4545455 - 268, -3.27430367, 3.7787478, 5.4545455 - 269, -4.20626783, 2.70320415, 5.4545455 - 270, -4.79746485, 1.4086628, 5.4545455 - 271, -5., 0., 5.4545455 - 272, -4.79746485, -1.4086628, 5.4545455 - 273, -4.20626783, -2.70320415, 5.4545455 - 274, -3.27430367, -3.7787478, 5.4545455 - 275, -2.077075, -4.54816008, 5.4545455 - 276, -0.711574197, -4.94910717, 5.4545455 - 277, 0.711574197, -4.94910717, 5.4545455 - 278, 2.077075, -4.54816008, 5.4545455 - 279, 3.27430367, -3.7787478, 5.4545455 - 280, 4.20626783, -2.70320415, 5.4545455 - 281, 4.79746485, -1.4086628, 5.4545455 - 282, 5., 0., 5.4545455 - 283, 1.6963793, -3.22420955, 5.4545455 - 284, -1.00844872, -2.57745242, 5.4545455 - 285, -1.37056375, -1.55261672, 5.4545455 - 286, -2.79301119, -2.04475617, 5.4545455 - 287, -3.15915275, -0.953875899, 5.4545455 - 288, -3.31513882, 0.18763873, 5.4545455 - 289, -3.26485705, 1.3136189, 5.4545455 - 290, -3.05202723, 2.36488891, 5.4545455 - 291, -2.76825261, 3.22686028, 5.4545455 - 292, -1.04677927, 2.62223077, 5.4545455 - 293, 0.233534187, 3.4200623, 5.4545455 - 294, 1.29102433, 3.0963695, 5.4545455 - 295, 2.98705912, -1.83198035, 5.4545455 - 296, 2.641819, -2.9781971, 5.4545455 - 297, 2.27109313, 2.54390693, 5.4545455 - 298, 3.06495118, 1.8082819, 5.4545455 - 299, 3.596766, 0.890879691, 5.4545455 - 300, 3.78296232, -0.171689898, 5.4545455 - 301, 3.88936043, -1.1366502, 5.4545455 - 302, -1.96019876, 2.43814969, 5.4545455 - 303, -1.84388077, 0.50134325, 5.4545455 - 304, -1.66432226, -0.536203504, 5.4545455 - 305, 0.304624766, -2.21873379, 5.4545455 - 306, -0.499021262, 2.01902366, 5.4545455 - 307, 0.621557593, 1.88027596, 5.4545455 - 308, 2.7210238, -0.515629292, 5.4545455 - 309, 1.58998036, -1.91277814, 5.4545455 - 310, 1.46154559, 1.41150224, 5.4545455 - 311, 2.16689587, 0.844061613, 5.4545455 - 312, -0.596776128, 0.859395862, 5.4545455 - 313, -0.355480254, -0.117340848, 5.4545455 - 314, 0.717503786, 0.440903485, 5.4545455 - 315, 1.43037975, -0.478143334, 5.4545455 - 316, -0.798393071, 3.61305261, 5.4545455 - 317, -1.88272476, 3.47693872, 5.4545455 - 318, -2.23948669, -3.02067423, 5.4545455 - 319, -1.70037711, -3.77449918, 5.4545455 - 320, 0.511443317, -3.51093721, 5.4545455 - 321, -0.700032651, -3.69734979, 5.4545455 - 322, 2.78402972, 0.427267253, 5.4545455 - 323, -1.90023589, 1.52119613, 5.4545455 - 324, 0.00998886116, -1.09023917, 5.4545455 - 325, 0.257420778, 1.0292536, 5.4545455 - 326, 4.79746485, 1.4086628, 6.81818199 - 327, 4.20626783, 2.70320415, 6.81818199 - 328, 3.27430367, 3.7787478, 6.81818199 - 329, 2.077075, 4.54816008, 6.81818199 - 330, 0.711574197, 4.94910717, 6.81818199 - 331, -0.711574197, 4.94910717, 6.81818199 - 332, -2.077075, 4.54816008, 6.81818199 - 333, -3.27430367, 3.7787478, 6.81818199 - 334, -4.20626783, 2.70320415, 6.81818199 - 335, -4.79746485, 1.4086628, 6.81818199 - 336, -5., 0., 6.81818199 - 337, -4.79746485, -1.4086628, 6.81818199 - 338, -4.20626783, -2.70320415, 6.81818199 - 339, -3.27430367, -3.7787478, 6.81818199 - 340, -2.077075, -4.54816008, 6.81818199 - 341, -0.711574197, -4.94910717, 6.81818199 - 342, 0.711574197, -4.94910717, 6.81818199 - 343, 2.077075, -4.54816008, 6.81818199 - 344, 3.27430367, -3.7787478, 6.81818199 - 345, 4.20626783, -2.70320415, 6.81818199 - 346, 4.79746485, -1.4086628, 6.81818199 - 347, 5., 0., 6.81818199 - 348, 1.6963793, -3.22420955, 6.81818199 - 349, -1.00844872, -2.57745242, 6.81818199 - 350, -1.37056375, -1.55261672, 6.81818199 - 351, -2.79301119, -2.04475617, 6.81818199 - 352, -3.15915275, -0.953875899, 6.81818199 - 353, -3.31513882, 0.18763873, 6.81818199 - 354, -3.26485705, 1.3136189, 6.81818199 - 355, -3.05202723, 2.36488891, 6.81818199 - 356, -2.76825261, 3.22686028, 6.81818199 - 357, -1.04677927, 2.62223077, 6.81818199 - 358, 0.233534187, 3.4200623, 6.81818199 - 359, 1.29102433, 3.0963695, 6.81818199 - 360, 2.98705912, -1.83198035, 6.81818199 - 361, 2.641819, -2.9781971, 6.81818199 - 362, 2.27109313, 2.54390693, 6.81818199 - 363, 3.06495118, 1.8082819, 6.81818199 - 364, 3.596766, 0.890879691, 6.81818199 - 365, 3.78296232, -0.171689898, 6.81818199 - 366, 3.88936043, -1.1366502, 6.81818199 - 367, -1.96019876, 2.43814969, 6.81818199 - 368, -1.84388077, 0.50134325, 6.81818199 - 369, -1.66432226, -0.536203504, 6.81818199 - 370, 0.304624766, -2.21873379, 6.81818199 - 371, -0.499021262, 2.01902366, 6.81818199 - 372, 0.621557593, 1.88027596, 6.81818199 - 373, 2.7210238, -0.515629292, 6.81818199 - 374, 1.58998036, -1.91277814, 6.81818199 - 375, 1.46154559, 1.41150224, 6.81818199 - 376, 2.16689587, 0.844061613, 6.81818199 - 377, -0.596776128, 0.859395862, 6.81818199 - 378, -0.355480254, -0.117340848, 6.81818199 - 379, 0.717503786, 0.440903485, 6.81818199 - 380, 1.43037975, -0.478143334, 6.81818199 - 381, -0.798393071, 3.61305261, 6.81818199 - 382, -1.88272476, 3.47693872, 6.81818199 - 383, -2.23948669, -3.02067423, 6.81818199 - 384, -1.70037711, -3.77449918, 6.81818199 - 385, 0.511443317, -3.51093721, 6.81818199 - 386, -0.700032651, -3.69734979, 6.81818199 - 387, 2.78402972, 0.427267253, 6.81818199 - 388, -1.90023589, 1.52119613, 6.81818199 - 389, 0.00998886116, -1.09023917, 6.81818199 - 390, 0.257420778, 1.0292536, 6.81818199 - 391, 4.79746485, 1.4086628, 8.18181801 - 392, 4.20626783, 2.70320415, 8.18181801 - 393, 3.27430367, 3.7787478, 8.18181801 - 394, 2.077075, 4.54816008, 8.18181801 - 395, 0.711574197, 4.94910717, 8.18181801 - 396, -0.711574197, 4.94910717, 8.18181801 - 397, -2.077075, 4.54816008, 8.18181801 - 398, -3.27430367, 3.7787478, 8.18181801 - 399, -4.20626783, 2.70320415, 8.18181801 - 400, -4.79746485, 1.4086628, 8.18181801 - 401, -5., 0., 8.18181801 - 402, -4.79746485, -1.4086628, 8.18181801 - 403, -4.20626783, -2.70320415, 8.18181801 - 404, -3.27430367, -3.7787478, 8.18181801 - 405, -2.077075, -4.54816008, 8.18181801 - 406, -0.711574197, -4.94910717, 8.18181801 - 407, 0.711574197, -4.94910717, 8.18181801 - 408, 2.077075, -4.54816008, 8.18181801 - 409, 3.27430367, -3.7787478, 8.18181801 - 410, 4.20626783, -2.70320415, 8.18181801 - 411, 4.79746485, -1.4086628, 8.18181801 - 412, 5., 0., 8.18181801 - 413, 1.6963793, -3.22420955, 8.18181801 - 414, -1.00844872, -2.57745242, 8.18181801 - 415, -1.37056375, -1.55261672, 8.18181801 - 416, -2.79301119, -2.04475617, 8.18181801 - 417, -3.15915275, -0.953875899, 8.18181801 - 418, -3.31513882, 0.18763873, 8.18181801 - 419, -3.26485705, 1.3136189, 8.18181801 - 420, -3.05202723, 2.36488891, 8.18181801 - 421, -2.76825261, 3.22686028, 8.18181801 - 422, -1.04677927, 2.62223077, 8.18181801 - 423, 0.233534187, 3.4200623, 8.18181801 - 424, 1.29102433, 3.0963695, 8.18181801 - 425, 2.98705912, -1.83198035, 8.18181801 - 426, 2.641819, -2.9781971, 8.18181801 - 427, 2.27109313, 2.54390693, 8.18181801 - 428, 3.06495118, 1.8082819, 8.18181801 - 429, 3.596766, 0.890879691, 8.18181801 - 430, 3.78296232, -0.171689898, 8.18181801 - 431, 3.88936043, -1.1366502, 8.18181801 - 432, -1.96019876, 2.43814969, 8.18181801 - 433, -1.84388077, 0.50134325, 8.18181801 - 434, -1.66432226, -0.536203504, 8.18181801 - 435, 0.304624766, -2.21873379, 8.18181801 - 436, -0.499021262, 2.01902366, 8.18181801 - 437, 0.621557593, 1.88027596, 8.18181801 - 438, 2.7210238, -0.515629292, 8.18181801 - 439, 1.58998036, -1.91277814, 8.18181801 - 440, 1.46154559, 1.41150224, 8.18181801 - 441, 2.16689587, 0.844061613, 8.18181801 - 442, -0.596776128, 0.859395862, 8.18181801 - 443, -0.355480254, -0.117340848, 8.18181801 - 444, 0.717503786, 0.440903485, 8.18181801 - 445, 1.43037975, -0.478143334, 8.18181801 - 446, -0.798393071, 3.61305261, 8.18181801 - 447, -1.88272476, 3.47693872, 8.18181801 - 448, -2.23948669, -3.02067423, 8.18181801 - 449, -1.70037711, -3.77449918, 8.18181801 - 450, 0.511443317, -3.51093721, 8.18181801 - 451, -0.700032651, -3.69734979, 8.18181801 - 452, 2.78402972, 0.427267253, 8.18181801 - 453, -1.90023589, 1.52119613, 8.18181801 - 454, 0.00998886116, -1.09023917, 8.18181801 - 455, 0.257420778, 1.0292536, 8.18181801 - 456, 4.79746485, 1.4086628, 9.54545498 - 457, 4.20626783, 2.70320415, 9.54545498 - 458, 3.27430367, 3.7787478, 9.54545498 - 459, 2.077075, 4.54816008, 9.54545498 - 460, 0.711574197, 4.94910717, 9.54545498 - 461, -0.711574197, 4.94910717, 9.54545498 - 462, -2.077075, 4.54816008, 9.54545498 - 463, -3.27430367, 3.7787478, 9.54545498 - 464, -4.20626783, 2.70320415, 9.54545498 - 465, -4.79746485, 1.4086628, 9.54545498 - 466, -5., 0., 9.54545498 - 467, -4.79746485, -1.4086628, 9.54545498 - 468, -4.20626783, -2.70320415, 9.54545498 - 469, -3.27430367, -3.7787478, 9.54545498 - 470, -2.077075, -4.54816008, 9.54545498 - 471, -0.711574197, -4.94910717, 9.54545498 - 472, 0.711574197, -4.94910717, 9.54545498 - 473, 2.077075, -4.54816008, 9.54545498 - 474, 3.27430367, -3.7787478, 9.54545498 - 475, 4.20626783, -2.70320415, 9.54545498 - 476, 4.79746485, -1.4086628, 9.54545498 - 477, 5., 0., 9.54545498 - 478, 1.6963793, -3.22420955, 9.54545498 - 479, -1.00844872, -2.57745242, 9.54545498 - 480, -1.37056375, -1.55261672, 9.54545498 - 481, -2.79301119, -2.04475617, 9.54545498 - 482, -3.15915275, -0.953875899, 9.54545498 - 483, -3.31513882, 0.18763873, 9.54545498 - 484, -3.26485705, 1.3136189, 9.54545498 - 485, -3.05202723, 2.36488891, 9.54545498 - 486, -2.76825261, 3.22686028, 9.54545498 - 487, -1.04677927, 2.62223077, 9.54545498 - 488, 0.233534187, 3.4200623, 9.54545498 - 489, 1.29102433, 3.0963695, 9.54545498 - 490, 2.98705912, -1.83198035, 9.54545498 - 491, 2.641819, -2.9781971, 9.54545498 - 492, 2.27109313, 2.54390693, 9.54545498 - 493, 3.06495118, 1.8082819, 9.54545498 - 494, 3.596766, 0.890879691, 9.54545498 - 495, 3.78296232, -0.171689898, 9.54545498 - 496, 3.88936043, -1.1366502, 9.54545498 - 497, -1.96019876, 2.43814969, 9.54545498 - 498, -1.84388077, 0.50134325, 9.54545498 - 499, -1.66432226, -0.536203504, 9.54545498 - 500, 0.304624766, -2.21873379, 9.54545498 - 501, -0.499021262, 2.01902366, 9.54545498 - 502, 0.621557593, 1.88027596, 9.54545498 - 503, 2.7210238, -0.515629292, 9.54545498 - 504, 1.58998036, -1.91277814, 9.54545498 - 505, 1.46154559, 1.41150224, 9.54545498 - 506, 2.16689587, 0.844061613, 9.54545498 - 507, -0.596776128, 0.859395862, 9.54545498 - 508, -0.355480254, -0.117340848, 9.54545498 - 509, 0.717503786, 0.440903485, 9.54545498 - 510, 1.43037975, -0.478143334, 9.54545498 - 511, -0.798393071, 3.61305261, 9.54545498 - 512, -1.88272476, 3.47693872, 9.54545498 - 513, -2.23948669, -3.02067423, 9.54545498 - 514, -1.70037711, -3.77449918, 9.54545498 - 515, 0.511443317, -3.51093721, 9.54545498 - 516, -0.700032651, -3.69734979, 9.54545498 - 517, 2.78402972, 0.427267253, 9.54545498 - 518, -1.90023589, 1.52119613, 9.54545498 - 519, 0.00998886116, -1.09023917, 9.54545498 - 520, 0.257420778, 1.0292536, 9.54545498 - 521, 4.79746485, 1.4086628, 10.909091 - 522, 4.20626783, 2.70320415, 10.909091 - 523, 3.27430367, 3.7787478, 10.909091 - 524, 2.077075, 4.54816008, 10.909091 - 525, 0.711574197, 4.94910717, 10.909091 - 526, -0.711574197, 4.94910717, 10.909091 - 527, -2.077075, 4.54816008, 10.909091 - 528, -3.27430367, 3.7787478, 10.909091 - 529, -4.20626783, 2.70320415, 10.909091 - 530, -4.79746485, 1.4086628, 10.909091 - 531, -5., 0., 10.909091 - 532, -4.79746485, -1.4086628, 10.909091 - 533, -4.20626783, -2.70320415, 10.909091 - 534, -3.27430367, -3.7787478, 10.909091 - 535, -2.077075, -4.54816008, 10.909091 - 536, -0.711574197, -4.94910717, 10.909091 - 537, 0.711574197, -4.94910717, 10.909091 - 538, 2.077075, -4.54816008, 10.909091 - 539, 3.27430367, -3.7787478, 10.909091 - 540, 4.20626783, -2.70320415, 10.909091 - 541, 4.79746485, -1.4086628, 10.909091 - 542, 5., 0., 10.909091 - 543, 1.6963793, -3.22420955, 10.909091 - 544, -1.00844872, -2.57745242, 10.909091 - 545, -1.37056375, -1.55261672, 10.909091 - 546, -2.79301119, -2.04475617, 10.909091 - 547, -3.15915275, -0.953875899, 10.909091 - 548, -3.31513882, 0.18763873, 10.909091 - 549, -3.26485705, 1.3136189, 10.909091 - 550, -3.05202723, 2.36488891, 10.909091 - 551, -2.76825261, 3.22686028, 10.909091 - 552, -1.04677927, 2.62223077, 10.909091 - 553, 0.233534187, 3.4200623, 10.909091 - 554, 1.29102433, 3.0963695, 10.909091 - 555, 2.98705912, -1.83198035, 10.909091 - 556, 2.641819, -2.9781971, 10.909091 - 557, 2.27109313, 2.54390693, 10.909091 - 558, 3.06495118, 1.8082819, 10.909091 - 559, 3.596766, 0.890879691, 10.909091 - 560, 3.78296232, -0.171689898, 10.909091 - 561, 3.88936043, -1.1366502, 10.909091 - 562, -1.96019876, 2.43814969, 10.909091 - 563, -1.84388077, 0.50134325, 10.909091 - 564, -1.66432226, -0.536203504, 10.909091 - 565, 0.304624766, -2.21873379, 10.909091 - 566, -0.499021262, 2.01902366, 10.909091 - 567, 0.621557593, 1.88027596, 10.909091 - 568, 2.7210238, -0.515629292, 10.909091 - 569, 1.58998036, -1.91277814, 10.909091 - 570, 1.46154559, 1.41150224, 10.909091 - 571, 2.16689587, 0.844061613, 10.909091 - 572, -0.596776128, 0.859395862, 10.909091 - 573, -0.355480254, -0.117340848, 10.909091 - 574, 0.717503786, 0.440903485, 10.909091 - 575, 1.43037975, -0.478143334, 10.909091 - 576, -0.798393071, 3.61305261, 10.909091 - 577, -1.88272476, 3.47693872, 10.909091 - 578, -2.23948669, -3.02067423, 10.909091 - 579, -1.70037711, -3.77449918, 10.909091 - 580, 0.511443317, -3.51093721, 10.909091 - 581, -0.700032651, -3.69734979, 10.909091 - 582, 2.78402972, 0.427267253, 10.909091 - 583, -1.90023589, 1.52119613, 10.909091 - 584, 0.00998886116, -1.09023917, 10.909091 - 585, 0.257420778, 1.0292536, 10.909091 - 586, 4.79746485, 1.4086628, 12.272727 - 587, 4.20626783, 2.70320415, 12.272727 - 588, 3.27430367, 3.7787478, 12.272727 - 589, 2.077075, 4.54816008, 12.272727 - 590, 0.711574197, 4.94910717, 12.272727 - 591, -0.711574197, 4.94910717, 12.272727 - 592, -2.077075, 4.54816008, 12.272727 - 593, -3.27430367, 3.7787478, 12.272727 - 594, -4.20626783, 2.70320415, 12.272727 - 595, -4.79746485, 1.4086628, 12.272727 - 596, -5., 0., 12.272727 - 597, -4.79746485, -1.4086628, 12.272727 - 598, -4.20626783, -2.70320415, 12.272727 - 599, -3.27430367, -3.7787478, 12.272727 - 600, -2.077075, -4.54816008, 12.272727 - 601, -0.711574197, -4.94910717, 12.272727 - 602, 0.711574197, -4.94910717, 12.272727 - 603, 2.077075, -4.54816008, 12.272727 - 604, 3.27430367, -3.7787478, 12.272727 - 605, 4.20626783, -2.70320415, 12.272727 - 606, 4.79746485, -1.4086628, 12.272727 - 607, 5., 0., 12.272727 - 608, 1.6963793, -3.22420955, 12.272727 - 609, -1.00844872, -2.57745242, 12.272727 - 610, -1.37056375, -1.55261672, 12.272727 - 611, -2.79301119, -2.04475617, 12.272727 - 612, -3.15915275, -0.953875899, 12.272727 - 613, -3.31513882, 0.18763873, 12.272727 - 614, -3.26485705, 1.3136189, 12.272727 - 615, -3.05202723, 2.36488891, 12.272727 - 616, -2.76825261, 3.22686028, 12.272727 - 617, -1.04677927, 2.62223077, 12.272727 - 618, 0.233534187, 3.4200623, 12.272727 - 619, 1.29102433, 3.0963695, 12.272727 - 620, 2.98705912, -1.83198035, 12.272727 - 621, 2.641819, -2.9781971, 12.272727 - 622, 2.27109313, 2.54390693, 12.272727 - 623, 3.06495118, 1.8082819, 12.272727 - 624, 3.596766, 0.890879691, 12.272727 - 625, 3.78296232, -0.171689898, 12.272727 - 626, 3.88936043, -1.1366502, 12.272727 - 627, -1.96019876, 2.43814969, 12.272727 - 628, -1.84388077, 0.50134325, 12.272727 - 629, -1.66432226, -0.536203504, 12.272727 - 630, 0.304624766, -2.21873379, 12.272727 - 631, -0.499021262, 2.01902366, 12.272727 - 632, 0.621557593, 1.88027596, 12.272727 - 633, 2.7210238, -0.515629292, 12.272727 - 634, 1.58998036, -1.91277814, 12.272727 - 635, 1.46154559, 1.41150224, 12.272727 - 636, 2.16689587, 0.844061613, 12.272727 - 637, -0.596776128, 0.859395862, 12.272727 - 638, -0.355480254, -0.117340848, 12.272727 - 639, 0.717503786, 0.440903485, 12.272727 - 640, 1.43037975, -0.478143334, 12.272727 - 641, -0.798393071, 3.61305261, 12.272727 - 642, -1.88272476, 3.47693872, 12.272727 - 643, -2.23948669, -3.02067423, 12.272727 - 644, -1.70037711, -3.77449918, 12.272727 - 645, 0.511443317, -3.51093721, 12.272727 - 646, -0.700032651, -3.69734979, 12.272727 - 647, 2.78402972, 0.427267253, 12.272727 - 648, -1.90023589, 1.52119613, 12.272727 - 649, 0.00998886116, -1.09023917, 12.272727 - 650, 0.257420778, 1.0292536, 12.272727 - 651, 4.79746485, 1.4086628, 13.636364 - 652, 4.20626783, 2.70320415, 13.636364 - 653, 3.27430367, 3.7787478, 13.636364 - 654, 2.077075, 4.54816008, 13.636364 - 655, 0.711574197, 4.94910717, 13.636364 - 656, -0.711574197, 4.94910717, 13.636364 - 657, -2.077075, 4.54816008, 13.636364 - 658, -3.27430367, 3.7787478, 13.636364 - 659, -4.20626783, 2.70320415, 13.636364 - 660, -4.79746485, 1.4086628, 13.636364 - 661, -5., 0., 13.636364 - 662, -4.79746485, -1.4086628, 13.636364 - 663, -4.20626783, -2.70320415, 13.636364 - 664, -3.27430367, -3.7787478, 13.636364 - 665, -2.077075, -4.54816008, 13.636364 - 666, -0.711574197, -4.94910717, 13.636364 - 667, 0.711574197, -4.94910717, 13.636364 - 668, 2.077075, -4.54816008, 13.636364 - 669, 3.27430367, -3.7787478, 13.636364 - 670, 4.20626783, -2.70320415, 13.636364 - 671, 4.79746485, -1.4086628, 13.636364 - 672, 5., 0., 13.636364 - 673, 1.6963793, -3.22420955, 13.636364 - 674, -1.00844872, -2.57745242, 13.636364 - 675, -1.37056375, -1.55261672, 13.636364 - 676, -2.79301119, -2.04475617, 13.636364 - 677, -3.15915275, -0.953875899, 13.636364 - 678, -3.31513882, 0.18763873, 13.636364 - 679, -3.26485705, 1.3136189, 13.636364 - 680, -3.05202723, 2.36488891, 13.636364 - 681, -2.76825261, 3.22686028, 13.636364 - 682, -1.04677927, 2.62223077, 13.636364 - 683, 0.233534187, 3.4200623, 13.636364 - 684, 1.29102433, 3.0963695, 13.636364 - 685, 2.98705912, -1.83198035, 13.636364 - 686, 2.641819, -2.9781971, 13.636364 - 687, 2.27109313, 2.54390693, 13.636364 - 688, 3.06495118, 1.8082819, 13.636364 - 689, 3.596766, 0.890879691, 13.636364 - 690, 3.78296232, -0.171689898, 13.636364 - 691, 3.88936043, -1.1366502, 13.636364 - 692, -1.96019876, 2.43814969, 13.636364 - 693, -1.84388077, 0.50134325, 13.636364 - 694, -1.66432226, -0.536203504, 13.636364 - 695, 0.304624766, -2.21873379, 13.636364 - 696, -0.499021262, 2.01902366, 13.636364 - 697, 0.621557593, 1.88027596, 13.636364 - 698, 2.7210238, -0.515629292, 13.636364 - 699, 1.58998036, -1.91277814, 13.636364 - 700, 1.46154559, 1.41150224, 13.636364 - 701, 2.16689587, 0.844061613, 13.636364 - 702, -0.596776128, 0.859395862, 13.636364 - 703, -0.355480254, -0.117340848, 13.636364 - 704, 0.717503786, 0.440903485, 13.636364 - 705, 1.43037975, -0.478143334, 13.636364 - 706, -0.798393071, 3.61305261, 13.636364 - 707, -1.88272476, 3.47693872, 13.636364 - 708, -2.23948669, -3.02067423, 13.636364 - 709, -1.70037711, -3.77449918, 13.636364 - 710, 0.511443317, -3.51093721, 13.636364 - 711, -0.700032651, -3.69734979, 13.636364 - 712, 2.78402972, 0.427267253, 13.636364 - 713, -1.90023589, 1.52119613, 13.636364 - 714, 0.00998886116, -1.09023917, 13.636364 - 715, 0.257420778, 1.0292536, 13.636364 - 716, 4.79746485, 1.4086628, 15. - 717, 4.20626783, 2.70320415, 15. - 718, 3.27430367, 3.7787478, 15. - 719, 2.077075, 4.54816008, 15. - 720, 0.711574197, 4.94910717, 15. - 721, -0.711574197, 4.94910717, 15. - 722, -2.077075, 4.54816008, 15. - 723, -3.27430367, 3.7787478, 15. - 724, -4.20626783, 2.70320415, 15. - 725, -4.79746485, 1.4086628, 15. - 726, -5., 0., 15. - 727, -4.79746485, -1.4086628, 15. - 728, -4.20626783, -2.70320415, 15. - 729, -3.27430367, -3.7787478, 15. - 730, -2.077075, -4.54816008, 15. - 731, -0.711574197, -4.94910717, 15. - 732, 0.711574197, -4.94910717, 15. - 733, 2.077075, -4.54816008, 15. - 734, 3.27430367, -3.7787478, 15. - 735, 4.20626783, -2.70320415, 15. - 736, 4.79746485, -1.4086628, 15. - 737, 5., 0., 15. - 738, 1.6963793, -3.22420955, 15. - 739, -1.00844872, -2.57745242, 15. - 740, -1.37056375, -1.55261672, 15. - 741, -2.79301119, -2.04475617, 15. - 742, -3.15915275, -0.953875899, 15. - 743, -3.31513882, 0.18763873, 15. - 744, -3.26485705, 1.3136189, 15. - 745, -3.05202723, 2.36488891, 15. - 746, -2.76825261, 3.22686028, 15. - 747, -1.04677927, 2.62223077, 15. - 748, 0.233534187, 3.4200623, 15. - 749, 1.29102433, 3.0963695, 15. - 750, 2.98705912, -1.83198035, 15. - 751, 2.641819, -2.9781971, 15. - 752, 2.27109313, 2.54390693, 15. - 753, 3.06495118, 1.8082819, 15. - 754, 3.596766, 0.890879691, 15. - 755, 3.78296232, -0.171689898, 15. - 756, 3.88936043, -1.1366502, 15. - 757, -1.96019876, 2.43814969, 15. - 758, -1.84388077, 0.50134325, 15. - 759, -1.66432226, -0.536203504, 15. - 760, 0.304624766, -2.21873379, 15. - 761, -0.499021262, 2.01902366, 15. - 762, 0.621557593, 1.88027596, 15. - 763, 2.7210238, -0.515629292, 15. - 764, 1.58998036, -1.91277814, 15. - 765, 1.46154559, 1.41150224, 15. - 766, 2.16689587, 0.844061613, 15. - 767, -0.596776128, 0.859395862, 15. - 768, -0.355480254, -0.117340848, 15. - 769, 0.717503786, 0.440903485, 15. - 770, 1.43037975, -0.478143334, 15. - 771, -0.798393071, 3.61305261, 15. - 772, -1.88272476, 3.47693872, 15. - 773, -2.23948669, -3.02067423, 15. - 774, -1.70037711, -3.77449918, 15. - 775, 0.511443317, -3.51093721, 15. - 776, -0.700032651, -3.69734979, 15. - 777, 2.78402972, 0.427267253, 15. - 778, -1.90023589, 1.52119613, 15. - 779, 0.00998886116, -1.09023917, 15. - 780, 0.257420778, 1.0292536, 15. -*Element, type=C3D8 - 1, 82, 125, 88, 83, 17, 60, 23, 18 - 2, 80, 124, 126, 81, 15, 59, 61, 16 - 3, 90, 89, 123, 91, 25, 24, 58, 26 - 4, 101, 100, 85, 84, 36, 35, 20, 19 - 5, 105, 104, 66, 87, 40, 39, 1, 22 - 6, 97, 111, 128, 107, 32, 46, 63, 42 - 7, 107, 95, 96, 122, 42, 30, 31, 57 - 8, 128, 108, 93, 94, 63, 43, 28, 29 - 9, 119, 130, 112, 115, 54, 65, 47, 50 - 10, 128, 111, 117, 108, 63, 46, 52, 43 - 11, 91, 92, 109, 90, 26, 27, 44, 25 - 12, 88, 101, 84, 83, 23, 36, 19, 18 - 13, 94, 95, 107, 128, 29, 30, 42, 63 - 14, 98, 111, 97, 121, 33, 46, 32, 56 - 15, 98, 99, 112, 111, 33, 34, 47, 46 - 16, 88, 114, 100, 101, 23, 49, 35, 36 - 17, 89, 110, 125, 126, 24, 45, 60, 61 - 18, 71, 70, 98, 121, 6, 5, 33, 56 - 19, 79, 78, 91, 123, 14, 13, 26, 58 - 20, 124, 123, 89, 126, 59, 58, 24, 61 - 21, 78, 77, 92, 91, 13, 12, 27, 26 - 22, 77, 76, 93, 92, 12, 11, 28, 27 - 23, 76, 75, 94, 93, 11, 10, 29, 28 - 24, 75, 74, 95, 94, 10, 9, 30, 29 - 25, 74, 73, 96, 95, 9, 8, 31, 30 - 26, 73, 72, 122, 96, 8, 7, 57, 31 - 27, 99, 98, 70, 69, 34, 33, 5, 4 - 28, 69, 68, 102, 99, 4, 3, 37, 34 - 29, 68, 67, 103, 102, 3, 2, 38, 37 - 30, 106, 86, 85, 100, 41, 21, 20, 35 - 31, 100, 114, 120, 113, 35, 49, 55, 48 - 32, 118, 109, 108, 117, 53, 44, 43, 52 - 33, 67, 66, 104, 103, 2, 1, 39, 38 - 34, 116, 127, 113, 120, 51, 62, 48, 55 - 35, 117, 130, 119, 118, 52, 65, 54, 53 - 36, 106, 105, 87, 86, 41, 40, 22, 21 - 37, 89, 90, 129, 110, 24, 25, 64, 45 - 38, 108, 109, 92, 93, 43, 44, 27, 28 - 39, 129, 90, 109, 118, 64, 25, 44, 53 - 40, 110, 114, 88, 125, 45, 49, 23, 60 - 41, 112, 99, 102, 115, 47, 34, 37, 50 - 42, 115, 102, 103, 116, 50, 37, 38, 51 - 43, 103, 104, 127, 116, 38, 39, 62, 51 - 44, 100, 113, 105, 106, 35, 48, 40, 41 - 45, 114, 110, 129, 120, 49, 45, 64, 55 - 46, 105, 113, 127, 104, 40, 48, 62, 39 - 47, 119, 120, 129, 118, 54, 55, 64, 53 - 48, 115, 116, 120, 119, 50, 51, 55, 54 - 49, 122, 121, 97, 107, 57, 56, 32, 42 - 50, 72, 71, 121, 122, 7, 6, 56, 57 - 51, 123, 124, 80, 79, 58, 59, 15, 14 - 52, 125, 82, 81, 126, 60, 17, 16, 61 - 53, 130, 117, 111, 112, 65, 52, 46, 47 - 54, 147, 190, 153, 148, 82, 125, 88, 83 - 55, 145, 189, 191, 146, 80, 124, 126, 81 - 56, 155, 154, 188, 156, 90, 89, 123, 91 - 57, 166, 165, 150, 149, 101, 100, 85, 84 - 58, 170, 169, 131, 152, 105, 104, 66, 87 - 59, 162, 176, 193, 172, 97, 111, 128, 107 - 60, 172, 160, 161, 187, 107, 95, 96, 122 - 61, 193, 173, 158, 159, 128, 108, 93, 94 - 62, 184, 195, 177, 180, 119, 130, 112, 115 - 63, 193, 176, 182, 173, 128, 111, 117, 108 - 64, 156, 157, 174, 155, 91, 92, 109, 90 - 65, 153, 166, 149, 148, 88, 101, 84, 83 - 66, 159, 160, 172, 193, 94, 95, 107, 128 - 67, 163, 176, 162, 186, 98, 111, 97, 121 - 68, 163, 164, 177, 176, 98, 99, 112, 111 - 69, 153, 179, 165, 166, 88, 114, 100, 101 - 70, 154, 175, 190, 191, 89, 110, 125, 126 - 71, 136, 135, 163, 186, 71, 70, 98, 121 - 72, 144, 143, 156, 188, 79, 78, 91, 123 - 73, 189, 188, 154, 191, 124, 123, 89, 126 - 74, 143, 142, 157, 156, 78, 77, 92, 91 - 75, 142, 141, 158, 157, 77, 76, 93, 92 - 76, 141, 140, 159, 158, 76, 75, 94, 93 - 77, 140, 139, 160, 159, 75, 74, 95, 94 - 78, 139, 138, 161, 160, 74, 73, 96, 95 - 79, 138, 137, 187, 161, 73, 72, 122, 96 - 80, 164, 163, 135, 134, 99, 98, 70, 69 - 81, 134, 133, 167, 164, 69, 68, 102, 99 - 82, 133, 132, 168, 167, 68, 67, 103, 102 - 83, 171, 151, 150, 165, 106, 86, 85, 100 - 84, 165, 179, 185, 178, 100, 114, 120, 113 - 85, 183, 174, 173, 182, 118, 109, 108, 117 - 86, 132, 131, 169, 168, 67, 66, 104, 103 - 87, 181, 192, 178, 185, 116, 127, 113, 120 - 88, 182, 195, 184, 183, 117, 130, 119, 118 - 89, 171, 170, 152, 151, 106, 105, 87, 86 - 90, 154, 155, 194, 175, 89, 90, 129, 110 - 91, 173, 174, 157, 158, 108, 109, 92, 93 - 92, 194, 155, 174, 183, 129, 90, 109, 118 - 93, 175, 179, 153, 190, 110, 114, 88, 125 - 94, 177, 164, 167, 180, 112, 99, 102, 115 - 95, 180, 167, 168, 181, 115, 102, 103, 116 - 96, 168, 169, 192, 181, 103, 104, 127, 116 - 97, 165, 178, 170, 171, 100, 113, 105, 106 - 98, 179, 175, 194, 185, 114, 110, 129, 120 - 99, 170, 178, 192, 169, 105, 113, 127, 104 -100, 184, 185, 194, 183, 119, 120, 129, 118 -101, 180, 181, 185, 184, 115, 116, 120, 119 -102, 187, 186, 162, 172, 122, 121, 97, 107 -103, 137, 136, 186, 187, 72, 71, 121, 122 -104, 188, 189, 145, 144, 123, 124, 80, 79 -105, 190, 147, 146, 191, 125, 82, 81, 126 -106, 195, 182, 176, 177, 130, 117, 111, 112 -107, 212, 255, 218, 213, 147, 190, 153, 148 -108, 210, 254, 256, 211, 145, 189, 191, 146 -109, 220, 219, 253, 221, 155, 154, 188, 156 -110, 231, 230, 215, 214, 166, 165, 150, 149 -111, 235, 234, 196, 217, 170, 169, 131, 152 -112, 227, 241, 258, 237, 162, 176, 193, 172 -113, 237, 225, 226, 252, 172, 160, 161, 187 -114, 258, 238, 223, 224, 193, 173, 158, 159 -115, 249, 260, 242, 245, 184, 195, 177, 180 -116, 258, 241, 247, 238, 193, 176, 182, 173 -117, 221, 222, 239, 220, 156, 157, 174, 155 -118, 218, 231, 214, 213, 153, 166, 149, 148 -119, 224, 225, 237, 258, 159, 160, 172, 193 -120, 228, 241, 227, 251, 163, 176, 162, 186 -121, 228, 229, 242, 241, 163, 164, 177, 176 -122, 218, 244, 230, 231, 153, 179, 165, 166 -123, 219, 240, 255, 256, 154, 175, 190, 191 -124, 201, 200, 228, 251, 136, 135, 163, 186 -125, 209, 208, 221, 253, 144, 143, 156, 188 -126, 254, 253, 219, 256, 189, 188, 154, 191 -127, 208, 207, 222, 221, 143, 142, 157, 156 -128, 207, 206, 223, 222, 142, 141, 158, 157 -129, 206, 205, 224, 223, 141, 140, 159, 158 -130, 205, 204, 225, 224, 140, 139, 160, 159 -131, 204, 203, 226, 225, 139, 138, 161, 160 -132, 203, 202, 252, 226, 138, 137, 187, 161 -133, 229, 228, 200, 199, 164, 163, 135, 134 -134, 199, 198, 232, 229, 134, 133, 167, 164 -135, 198, 197, 233, 232, 133, 132, 168, 167 -136, 236, 216, 215, 230, 171, 151, 150, 165 -137, 230, 244, 250, 243, 165, 179, 185, 178 -138, 248, 239, 238, 247, 183, 174, 173, 182 -139, 197, 196, 234, 233, 132, 131, 169, 168 -140, 246, 257, 243, 250, 181, 192, 178, 185 -141, 247, 260, 249, 248, 182, 195, 184, 183 -142, 236, 235, 217, 216, 171, 170, 152, 151 -143, 219, 220, 259, 240, 154, 155, 194, 175 -144, 238, 239, 222, 223, 173, 174, 157, 158 -145, 259, 220, 239, 248, 194, 155, 174, 183 -146, 240, 244, 218, 255, 175, 179, 153, 190 -147, 242, 229, 232, 245, 177, 164, 167, 180 -148, 245, 232, 233, 246, 180, 167, 168, 181 -149, 233, 234, 257, 246, 168, 169, 192, 181 -150, 230, 243, 235, 236, 165, 178, 170, 171 -151, 244, 240, 259, 250, 179, 175, 194, 185 -152, 235, 243, 257, 234, 170, 178, 192, 169 -153, 249, 250, 259, 248, 184, 185, 194, 183 -154, 245, 246, 250, 249, 180, 181, 185, 184 -155, 252, 251, 227, 237, 187, 186, 162, 172 -156, 202, 201, 251, 252, 137, 136, 186, 187 -157, 253, 254, 210, 209, 188, 189, 145, 144 -158, 255, 212, 211, 256, 190, 147, 146, 191 -159, 260, 247, 241, 242, 195, 182, 176, 177 -160, 277, 320, 283, 278, 212, 255, 218, 213 -161, 275, 319, 321, 276, 210, 254, 256, 211 -162, 285, 284, 318, 286, 220, 219, 253, 221 -163, 296, 295, 280, 279, 231, 230, 215, 214 -164, 300, 299, 261, 282, 235, 234, 196, 217 -165, 292, 306, 323, 302, 227, 241, 258, 237 -166, 302, 290, 291, 317, 237, 225, 226, 252 -167, 323, 303, 288, 289, 258, 238, 223, 224 -168, 314, 325, 307, 310, 249, 260, 242, 245 -169, 323, 306, 312, 303, 258, 241, 247, 238 -170, 286, 287, 304, 285, 221, 222, 239, 220 -171, 283, 296, 279, 278, 218, 231, 214, 213 -172, 289, 290, 302, 323, 224, 225, 237, 258 -173, 293, 306, 292, 316, 228, 241, 227, 251 -174, 293, 294, 307, 306, 228, 229, 242, 241 -175, 283, 309, 295, 296, 218, 244, 230, 231 -176, 284, 305, 320, 321, 219, 240, 255, 256 -177, 266, 265, 293, 316, 201, 200, 228, 251 -178, 274, 273, 286, 318, 209, 208, 221, 253 -179, 319, 318, 284, 321, 254, 253, 219, 256 -180, 273, 272, 287, 286, 208, 207, 222, 221 -181, 272, 271, 288, 287, 207, 206, 223, 222 -182, 271, 270, 289, 288, 206, 205, 224, 223 -183, 270, 269, 290, 289, 205, 204, 225, 224 -184, 269, 268, 291, 290, 204, 203, 226, 225 -185, 268, 267, 317, 291, 203, 202, 252, 226 -186, 294, 293, 265, 264, 229, 228, 200, 199 -187, 264, 263, 297, 294, 199, 198, 232, 229 -188, 263, 262, 298, 297, 198, 197, 233, 232 -189, 301, 281, 280, 295, 236, 216, 215, 230 -190, 295, 309, 315, 308, 230, 244, 250, 243 -191, 313, 304, 303, 312, 248, 239, 238, 247 -192, 262, 261, 299, 298, 197, 196, 234, 233 -193, 311, 322, 308, 315, 246, 257, 243, 250 -194, 312, 325, 314, 313, 247, 260, 249, 248 -195, 301, 300, 282, 281, 236, 235, 217, 216 -196, 284, 285, 324, 305, 219, 220, 259, 240 -197, 303, 304, 287, 288, 238, 239, 222, 223 -198, 324, 285, 304, 313, 259, 220, 239, 248 -199, 305, 309, 283, 320, 240, 244, 218, 255 -200, 307, 294, 297, 310, 242, 229, 232, 245 -201, 310, 297, 298, 311, 245, 232, 233, 246 -202, 298, 299, 322, 311, 233, 234, 257, 246 -203, 295, 308, 300, 301, 230, 243, 235, 236 -204, 309, 305, 324, 315, 244, 240, 259, 250 -205, 300, 308, 322, 299, 235, 243, 257, 234 -206, 314, 315, 324, 313, 249, 250, 259, 248 -207, 310, 311, 315, 314, 245, 246, 250, 249 -208, 317, 316, 292, 302, 252, 251, 227, 237 -209, 267, 266, 316, 317, 202, 201, 251, 252 -210, 318, 319, 275, 274, 253, 254, 210, 209 -211, 320, 277, 276, 321, 255, 212, 211, 256 -212, 325, 312, 306, 307, 260, 247, 241, 242 -213, 342, 385, 348, 343, 277, 320, 283, 278 -214, 340, 384, 386, 341, 275, 319, 321, 276 -215, 350, 349, 383, 351, 285, 284, 318, 286 -216, 361, 360, 345, 344, 296, 295, 280, 279 -217, 365, 364, 326, 347, 300, 299, 261, 282 -218, 357, 371, 388, 367, 292, 306, 323, 302 -219, 367, 355, 356, 382, 302, 290, 291, 317 -220, 388, 368, 353, 354, 323, 303, 288, 289 -221, 379, 390, 372, 375, 314, 325, 307, 310 -222, 388, 371, 377, 368, 323, 306, 312, 303 -223, 351, 352, 369, 350, 286, 287, 304, 285 -224, 348, 361, 344, 343, 283, 296, 279, 278 -225, 354, 355, 367, 388, 289, 290, 302, 323 -226, 358, 371, 357, 381, 293, 306, 292, 316 -227, 358, 359, 372, 371, 293, 294, 307, 306 -228, 348, 374, 360, 361, 283, 309, 295, 296 -229, 349, 370, 385, 386, 284, 305, 320, 321 -230, 331, 330, 358, 381, 266, 265, 293, 316 -231, 339, 338, 351, 383, 274, 273, 286, 318 -232, 384, 383, 349, 386, 319, 318, 284, 321 -233, 338, 337, 352, 351, 273, 272, 287, 286 -234, 337, 336, 353, 352, 272, 271, 288, 287 -235, 336, 335, 354, 353, 271, 270, 289, 288 -236, 335, 334, 355, 354, 270, 269, 290, 289 -237, 334, 333, 356, 355, 269, 268, 291, 290 -238, 333, 332, 382, 356, 268, 267, 317, 291 -239, 359, 358, 330, 329, 294, 293, 265, 264 -240, 329, 328, 362, 359, 264, 263, 297, 294 -241, 328, 327, 363, 362, 263, 262, 298, 297 -242, 366, 346, 345, 360, 301, 281, 280, 295 -243, 360, 374, 380, 373, 295, 309, 315, 308 -244, 378, 369, 368, 377, 313, 304, 303, 312 -245, 327, 326, 364, 363, 262, 261, 299, 298 -246, 376, 387, 373, 380, 311, 322, 308, 315 -247, 377, 390, 379, 378, 312, 325, 314, 313 -248, 366, 365, 347, 346, 301, 300, 282, 281 -249, 349, 350, 389, 370, 284, 285, 324, 305 -250, 368, 369, 352, 353, 303, 304, 287, 288 -251, 389, 350, 369, 378, 324, 285, 304, 313 -252, 370, 374, 348, 385, 305, 309, 283, 320 -253, 372, 359, 362, 375, 307, 294, 297, 310 -254, 375, 362, 363, 376, 310, 297, 298, 311 -255, 363, 364, 387, 376, 298, 299, 322, 311 -256, 360, 373, 365, 366, 295, 308, 300, 301 -257, 374, 370, 389, 380, 309, 305, 324, 315 -258, 365, 373, 387, 364, 300, 308, 322, 299 -259, 379, 380, 389, 378, 314, 315, 324, 313 -260, 375, 376, 380, 379, 310, 311, 315, 314 -261, 382, 381, 357, 367, 317, 316, 292, 302 -262, 332, 331, 381, 382, 267, 266, 316, 317 -263, 383, 384, 340, 339, 318, 319, 275, 274 -264, 385, 342, 341, 386, 320, 277, 276, 321 -265, 390, 377, 371, 372, 325, 312, 306, 307 -266, 407, 450, 413, 408, 342, 385, 348, 343 -267, 405, 449, 451, 406, 340, 384, 386, 341 -268, 415, 414, 448, 416, 350, 349, 383, 351 -269, 426, 425, 410, 409, 361, 360, 345, 344 -270, 430, 429, 391, 412, 365, 364, 326, 347 -271, 422, 436, 453, 432, 357, 371, 388, 367 -272, 432, 420, 421, 447, 367, 355, 356, 382 -273, 453, 433, 418, 419, 388, 368, 353, 354 -274, 444, 455, 437, 440, 379, 390, 372, 375 -275, 453, 436, 442, 433, 388, 371, 377, 368 -276, 416, 417, 434, 415, 351, 352, 369, 350 -277, 413, 426, 409, 408, 348, 361, 344, 343 -278, 419, 420, 432, 453, 354, 355, 367, 388 -279, 423, 436, 422, 446, 358, 371, 357, 381 -280, 423, 424, 437, 436, 358, 359, 372, 371 -281, 413, 439, 425, 426, 348, 374, 360, 361 -282, 414, 435, 450, 451, 349, 370, 385, 386 -283, 396, 395, 423, 446, 331, 330, 358, 381 -284, 404, 403, 416, 448, 339, 338, 351, 383 -285, 449, 448, 414, 451, 384, 383, 349, 386 -286, 403, 402, 417, 416, 338, 337, 352, 351 -287, 402, 401, 418, 417, 337, 336, 353, 352 -288, 401, 400, 419, 418, 336, 335, 354, 353 -289, 400, 399, 420, 419, 335, 334, 355, 354 -290, 399, 398, 421, 420, 334, 333, 356, 355 -291, 398, 397, 447, 421, 333, 332, 382, 356 -292, 424, 423, 395, 394, 359, 358, 330, 329 -293, 394, 393, 427, 424, 329, 328, 362, 359 -294, 393, 392, 428, 427, 328, 327, 363, 362 -295, 431, 411, 410, 425, 366, 346, 345, 360 -296, 425, 439, 445, 438, 360, 374, 380, 373 -297, 443, 434, 433, 442, 378, 369, 368, 377 -298, 392, 391, 429, 428, 327, 326, 364, 363 -299, 441, 452, 438, 445, 376, 387, 373, 380 -300, 442, 455, 444, 443, 377, 390, 379, 378 -301, 431, 430, 412, 411, 366, 365, 347, 346 -302, 414, 415, 454, 435, 349, 350, 389, 370 -303, 433, 434, 417, 418, 368, 369, 352, 353 -304, 454, 415, 434, 443, 389, 350, 369, 378 -305, 435, 439, 413, 450, 370, 374, 348, 385 -306, 437, 424, 427, 440, 372, 359, 362, 375 -307, 440, 427, 428, 441, 375, 362, 363, 376 -308, 428, 429, 452, 441, 363, 364, 387, 376 -309, 425, 438, 430, 431, 360, 373, 365, 366 -310, 439, 435, 454, 445, 374, 370, 389, 380 -311, 430, 438, 452, 429, 365, 373, 387, 364 -312, 444, 445, 454, 443, 379, 380, 389, 378 -313, 440, 441, 445, 444, 375, 376, 380, 379 -314, 447, 446, 422, 432, 382, 381, 357, 367 -315, 397, 396, 446, 447, 332, 331, 381, 382 -316, 448, 449, 405, 404, 383, 384, 340, 339 -317, 450, 407, 406, 451, 385, 342, 341, 386 -318, 455, 442, 436, 437, 390, 377, 371, 372 -319, 472, 515, 478, 473, 407, 450, 413, 408 -320, 470, 514, 516, 471, 405, 449, 451, 406 -321, 480, 479, 513, 481, 415, 414, 448, 416 -322, 491, 490, 475, 474, 426, 425, 410, 409 -323, 495, 494, 456, 477, 430, 429, 391, 412 -324, 487, 501, 518, 497, 422, 436, 453, 432 -325, 497, 485, 486, 512, 432, 420, 421, 447 -326, 518, 498, 483, 484, 453, 433, 418, 419 -327, 509, 520, 502, 505, 444, 455, 437, 440 -328, 518, 501, 507, 498, 453, 436, 442, 433 -329, 481, 482, 499, 480, 416, 417, 434, 415 -330, 478, 491, 474, 473, 413, 426, 409, 408 -331, 484, 485, 497, 518, 419, 420, 432, 453 -332, 488, 501, 487, 511, 423, 436, 422, 446 -333, 488, 489, 502, 501, 423, 424, 437, 436 -334, 478, 504, 490, 491, 413, 439, 425, 426 -335, 479, 500, 515, 516, 414, 435, 450, 451 -336, 461, 460, 488, 511, 396, 395, 423, 446 -337, 469, 468, 481, 513, 404, 403, 416, 448 -338, 514, 513, 479, 516, 449, 448, 414, 451 -339, 468, 467, 482, 481, 403, 402, 417, 416 -340, 467, 466, 483, 482, 402, 401, 418, 417 -341, 466, 465, 484, 483, 401, 400, 419, 418 -342, 465, 464, 485, 484, 400, 399, 420, 419 -343, 464, 463, 486, 485, 399, 398, 421, 420 -344, 463, 462, 512, 486, 398, 397, 447, 421 -345, 489, 488, 460, 459, 424, 423, 395, 394 -346, 459, 458, 492, 489, 394, 393, 427, 424 -347, 458, 457, 493, 492, 393, 392, 428, 427 -348, 496, 476, 475, 490, 431, 411, 410, 425 -349, 490, 504, 510, 503, 425, 439, 445, 438 -350, 508, 499, 498, 507, 443, 434, 433, 442 -351, 457, 456, 494, 493, 392, 391, 429, 428 -352, 506, 517, 503, 510, 441, 452, 438, 445 -353, 507, 520, 509, 508, 442, 455, 444, 443 -354, 496, 495, 477, 476, 431, 430, 412, 411 -355, 479, 480, 519, 500, 414, 415, 454, 435 -356, 498, 499, 482, 483, 433, 434, 417, 418 -357, 519, 480, 499, 508, 454, 415, 434, 443 -358, 500, 504, 478, 515, 435, 439, 413, 450 -359, 502, 489, 492, 505, 437, 424, 427, 440 -360, 505, 492, 493, 506, 440, 427, 428, 441 -361, 493, 494, 517, 506, 428, 429, 452, 441 -362, 490, 503, 495, 496, 425, 438, 430, 431 -363, 504, 500, 519, 510, 439, 435, 454, 445 -364, 495, 503, 517, 494, 430, 438, 452, 429 -365, 509, 510, 519, 508, 444, 445, 454, 443 -366, 505, 506, 510, 509, 440, 441, 445, 444 -367, 512, 511, 487, 497, 447, 446, 422, 432 -368, 462, 461, 511, 512, 397, 396, 446, 447 -369, 513, 514, 470, 469, 448, 449, 405, 404 -370, 515, 472, 471, 516, 450, 407, 406, 451 -371, 520, 507, 501, 502, 455, 442, 436, 437 -372, 537, 580, 543, 538, 472, 515, 478, 473 -373, 535, 579, 581, 536, 470, 514, 516, 471 -374, 545, 544, 578, 546, 480, 479, 513, 481 -375, 556, 555, 540, 539, 491, 490, 475, 474 -376, 560, 559, 521, 542, 495, 494, 456, 477 -377, 552, 566, 583, 562, 487, 501, 518, 497 -378, 562, 550, 551, 577, 497, 485, 486, 512 -379, 583, 563, 548, 549, 518, 498, 483, 484 -380, 574, 585, 567, 570, 509, 520, 502, 505 -381, 583, 566, 572, 563, 518, 501, 507, 498 -382, 546, 547, 564, 545, 481, 482, 499, 480 -383, 543, 556, 539, 538, 478, 491, 474, 473 -384, 549, 550, 562, 583, 484, 485, 497, 518 -385, 553, 566, 552, 576, 488, 501, 487, 511 -386, 553, 554, 567, 566, 488, 489, 502, 501 -387, 543, 569, 555, 556, 478, 504, 490, 491 -388, 544, 565, 580, 581, 479, 500, 515, 516 -389, 526, 525, 553, 576, 461, 460, 488, 511 -390, 534, 533, 546, 578, 469, 468, 481, 513 -391, 579, 578, 544, 581, 514, 513, 479, 516 -392, 533, 532, 547, 546, 468, 467, 482, 481 -393, 532, 531, 548, 547, 467, 466, 483, 482 -394, 531, 530, 549, 548, 466, 465, 484, 483 -395, 530, 529, 550, 549, 465, 464, 485, 484 -396, 529, 528, 551, 550, 464, 463, 486, 485 -397, 528, 527, 577, 551, 463, 462, 512, 486 -398, 554, 553, 525, 524, 489, 488, 460, 459 -399, 524, 523, 557, 554, 459, 458, 492, 489 -400, 523, 522, 558, 557, 458, 457, 493, 492 -401, 561, 541, 540, 555, 496, 476, 475, 490 -402, 555, 569, 575, 568, 490, 504, 510, 503 -403, 573, 564, 563, 572, 508, 499, 498, 507 -404, 522, 521, 559, 558, 457, 456, 494, 493 -405, 571, 582, 568, 575, 506, 517, 503, 510 -406, 572, 585, 574, 573, 507, 520, 509, 508 -407, 561, 560, 542, 541, 496, 495, 477, 476 -408, 544, 545, 584, 565, 479, 480, 519, 500 -409, 563, 564, 547, 548, 498, 499, 482, 483 -410, 584, 545, 564, 573, 519, 480, 499, 508 -411, 565, 569, 543, 580, 500, 504, 478, 515 -412, 567, 554, 557, 570, 502, 489, 492, 505 -413, 570, 557, 558, 571, 505, 492, 493, 506 -414, 558, 559, 582, 571, 493, 494, 517, 506 -415, 555, 568, 560, 561, 490, 503, 495, 496 -416, 569, 565, 584, 575, 504, 500, 519, 510 -417, 560, 568, 582, 559, 495, 503, 517, 494 -418, 574, 575, 584, 573, 509, 510, 519, 508 -419, 570, 571, 575, 574, 505, 506, 510, 509 -420, 577, 576, 552, 562, 512, 511, 487, 497 -421, 527, 526, 576, 577, 462, 461, 511, 512 -422, 578, 579, 535, 534, 513, 514, 470, 469 -423, 580, 537, 536, 581, 515, 472, 471, 516 -424, 585, 572, 566, 567, 520, 507, 501, 502 -425, 602, 645, 608, 603, 537, 580, 543, 538 -426, 600, 644, 646, 601, 535, 579, 581, 536 -427, 610, 609, 643, 611, 545, 544, 578, 546 -428, 621, 620, 605, 604, 556, 555, 540, 539 -429, 625, 624, 586, 607, 560, 559, 521, 542 -430, 617, 631, 648, 627, 552, 566, 583, 562 -431, 627, 615, 616, 642, 562, 550, 551, 577 -432, 648, 628, 613, 614, 583, 563, 548, 549 -433, 639, 650, 632, 635, 574, 585, 567, 570 -434, 648, 631, 637, 628, 583, 566, 572, 563 -435, 611, 612, 629, 610, 546, 547, 564, 545 -436, 608, 621, 604, 603, 543, 556, 539, 538 -437, 614, 615, 627, 648, 549, 550, 562, 583 -438, 618, 631, 617, 641, 553, 566, 552, 576 -439, 618, 619, 632, 631, 553, 554, 567, 566 -440, 608, 634, 620, 621, 543, 569, 555, 556 -441, 609, 630, 645, 646, 544, 565, 580, 581 -442, 591, 590, 618, 641, 526, 525, 553, 576 -443, 599, 598, 611, 643, 534, 533, 546, 578 -444, 644, 643, 609, 646, 579, 578, 544, 581 -445, 598, 597, 612, 611, 533, 532, 547, 546 -446, 597, 596, 613, 612, 532, 531, 548, 547 -447, 596, 595, 614, 613, 531, 530, 549, 548 -448, 595, 594, 615, 614, 530, 529, 550, 549 -449, 594, 593, 616, 615, 529, 528, 551, 550 -450, 593, 592, 642, 616, 528, 527, 577, 551 -451, 619, 618, 590, 589, 554, 553, 525, 524 -452, 589, 588, 622, 619, 524, 523, 557, 554 -453, 588, 587, 623, 622, 523, 522, 558, 557 -454, 626, 606, 605, 620, 561, 541, 540, 555 -455, 620, 634, 640, 633, 555, 569, 575, 568 -456, 638, 629, 628, 637, 573, 564, 563, 572 -457, 587, 586, 624, 623, 522, 521, 559, 558 -458, 636, 647, 633, 640, 571, 582, 568, 575 -459, 637, 650, 639, 638, 572, 585, 574, 573 -460, 626, 625, 607, 606, 561, 560, 542, 541 -461, 609, 610, 649, 630, 544, 545, 584, 565 -462, 628, 629, 612, 613, 563, 564, 547, 548 -463, 649, 610, 629, 638, 584, 545, 564, 573 -464, 630, 634, 608, 645, 565, 569, 543, 580 -465, 632, 619, 622, 635, 567, 554, 557, 570 -466, 635, 622, 623, 636, 570, 557, 558, 571 -467, 623, 624, 647, 636, 558, 559, 582, 571 -468, 620, 633, 625, 626, 555, 568, 560, 561 -469, 634, 630, 649, 640, 569, 565, 584, 575 -470, 625, 633, 647, 624, 560, 568, 582, 559 -471, 639, 640, 649, 638, 574, 575, 584, 573 -472, 635, 636, 640, 639, 570, 571, 575, 574 -473, 642, 641, 617, 627, 577, 576, 552, 562 -474, 592, 591, 641, 642, 527, 526, 576, 577 -475, 643, 644, 600, 599, 578, 579, 535, 534 -476, 645, 602, 601, 646, 580, 537, 536, 581 -477, 650, 637, 631, 632, 585, 572, 566, 567 -478, 667, 710, 673, 668, 602, 645, 608, 603 -479, 665, 709, 711, 666, 600, 644, 646, 601 -480, 675, 674, 708, 676, 610, 609, 643, 611 -481, 686, 685, 670, 669, 621, 620, 605, 604 -482, 690, 689, 651, 672, 625, 624, 586, 607 -483, 682, 696, 713, 692, 617, 631, 648, 627 -484, 692, 680, 681, 707, 627, 615, 616, 642 -485, 713, 693, 678, 679, 648, 628, 613, 614 -486, 704, 715, 697, 700, 639, 650, 632, 635 -487, 713, 696, 702, 693, 648, 631, 637, 628 -488, 676, 677, 694, 675, 611, 612, 629, 610 -489, 673, 686, 669, 668, 608, 621, 604, 603 -490, 679, 680, 692, 713, 614, 615, 627, 648 -491, 683, 696, 682, 706, 618, 631, 617, 641 -492, 683, 684, 697, 696, 618, 619, 632, 631 -493, 673, 699, 685, 686, 608, 634, 620, 621 -494, 674, 695, 710, 711, 609, 630, 645, 646 -495, 656, 655, 683, 706, 591, 590, 618, 641 -496, 664, 663, 676, 708, 599, 598, 611, 643 -497, 709, 708, 674, 711, 644, 643, 609, 646 -498, 663, 662, 677, 676, 598, 597, 612, 611 -499, 662, 661, 678, 677, 597, 596, 613, 612 -500, 661, 660, 679, 678, 596, 595, 614, 613 -501, 660, 659, 680, 679, 595, 594, 615, 614 -502, 659, 658, 681, 680, 594, 593, 616, 615 -503, 658, 657, 707, 681, 593, 592, 642, 616 -504, 684, 683, 655, 654, 619, 618, 590, 589 -505, 654, 653, 687, 684, 589, 588, 622, 619 -506, 653, 652, 688, 687, 588, 587, 623, 622 -507, 691, 671, 670, 685, 626, 606, 605, 620 -508, 685, 699, 705, 698, 620, 634, 640, 633 -509, 703, 694, 693, 702, 638, 629, 628, 637 -510, 652, 651, 689, 688, 587, 586, 624, 623 -511, 701, 712, 698, 705, 636, 647, 633, 640 -512, 702, 715, 704, 703, 637, 650, 639, 638 -513, 691, 690, 672, 671, 626, 625, 607, 606 -514, 674, 675, 714, 695, 609, 610, 649, 630 -515, 693, 694, 677, 678, 628, 629, 612, 613 -516, 714, 675, 694, 703, 649, 610, 629, 638 -517, 695, 699, 673, 710, 630, 634, 608, 645 -518, 697, 684, 687, 700, 632, 619, 622, 635 -519, 700, 687, 688, 701, 635, 622, 623, 636 -520, 688, 689, 712, 701, 623, 624, 647, 636 -521, 685, 698, 690, 691, 620, 633, 625, 626 -522, 699, 695, 714, 705, 634, 630, 649, 640 -523, 690, 698, 712, 689, 625, 633, 647, 624 -524, 704, 705, 714, 703, 639, 640, 649, 638 -525, 700, 701, 705, 704, 635, 636, 640, 639 -526, 707, 706, 682, 692, 642, 641, 617, 627 -527, 657, 656, 706, 707, 592, 591, 641, 642 -528, 708, 709, 665, 664, 643, 644, 600, 599 -529, 710, 667, 666, 711, 645, 602, 601, 646 -530, 715, 702, 696, 697, 650, 637, 631, 632 -531, 732, 775, 738, 733, 667, 710, 673, 668 -532, 730, 774, 776, 731, 665, 709, 711, 666 -533, 740, 739, 773, 741, 675, 674, 708, 676 -534, 751, 750, 735, 734, 686, 685, 670, 669 -535, 755, 754, 716, 737, 690, 689, 651, 672 -536, 747, 761, 778, 757, 682, 696, 713, 692 -537, 757, 745, 746, 772, 692, 680, 681, 707 -538, 778, 758, 743, 744, 713, 693, 678, 679 -539, 769, 780, 762, 765, 704, 715, 697, 700 -540, 778, 761, 767, 758, 713, 696, 702, 693 -541, 741, 742, 759, 740, 676, 677, 694, 675 -542, 738, 751, 734, 733, 673, 686, 669, 668 -543, 744, 745, 757, 778, 679, 680, 692, 713 -544, 748, 761, 747, 771, 683, 696, 682, 706 -545, 748, 749, 762, 761, 683, 684, 697, 696 -546, 738, 764, 750, 751, 673, 699, 685, 686 -547, 739, 760, 775, 776, 674, 695, 710, 711 -548, 721, 720, 748, 771, 656, 655, 683, 706 -549, 729, 728, 741, 773, 664, 663, 676, 708 -550, 774, 773, 739, 776, 709, 708, 674, 711 -551, 728, 727, 742, 741, 663, 662, 677, 676 -552, 727, 726, 743, 742, 662, 661, 678, 677 -553, 726, 725, 744, 743, 661, 660, 679, 678 -554, 725, 724, 745, 744, 660, 659, 680, 679 -555, 724, 723, 746, 745, 659, 658, 681, 680 -556, 723, 722, 772, 746, 658, 657, 707, 681 -557, 749, 748, 720, 719, 684, 683, 655, 654 -558, 719, 718, 752, 749, 654, 653, 687, 684 -559, 718, 717, 753, 752, 653, 652, 688, 687 -560, 756, 736, 735, 750, 691, 671, 670, 685 -561, 750, 764, 770, 763, 685, 699, 705, 698 -562, 768, 759, 758, 767, 703, 694, 693, 702 -563, 717, 716, 754, 753, 652, 651, 689, 688 -564, 766, 777, 763, 770, 701, 712, 698, 705 -565, 767, 780, 769, 768, 702, 715, 704, 703 -566, 756, 755, 737, 736, 691, 690, 672, 671 -567, 739, 740, 779, 760, 674, 675, 714, 695 -568, 758, 759, 742, 743, 693, 694, 677, 678 -569, 779, 740, 759, 768, 714, 675, 694, 703 -570, 760, 764, 738, 775, 695, 699, 673, 710 -571, 762, 749, 752, 765, 697, 684, 687, 700 -572, 765, 752, 753, 766, 700, 687, 688, 701 -573, 753, 754, 777, 766, 688, 689, 712, 701 -574, 750, 763, 755, 756, 685, 698, 690, 691 -575, 764, 760, 779, 770, 699, 695, 714, 705 -576, 755, 763, 777, 754, 690, 698, 712, 689 -577, 769, 770, 779, 768, 704, 705, 714, 703 -578, 765, 766, 770, 769, 700, 701, 705, 704 -579, 772, 771, 747, 757, 707, 706, 682, 692 -580, 722, 721, 771, 772, 657, 656, 706, 707 -581, 773, 774, 730, 729, 708, 709, 665, 664 -582, 775, 732, 731, 776, 710, 667, 666, 711 -583, 780, 767, 761, 762, 715, 702, 696, 697 -*Nset, nset=Part-sx__PickedSet5, generate - 1, 780, 1 -*Elset, elset=Part-sx__PickedSet5, generate - 1, 583, 1 -** Section: Section-sx -*Solid Section, elset=Part-sx__PickedSet5, material=Material-sx -, -** ---------------------------------------------------------------- -** -** PART INSTANCE: Part-px -** -*System - 21., 0., 0., 22., 0., 0. -*Node - 781, 4.79746485, 1.4086628, 0. - 782, 4.20626783, 2.70320415, 0. - 783, 3.27430367, 3.7787478, 0. - 784, 2.077075, 4.54816008, 0. - 785, 0.711574197, 4.94910717, 0. - 786, -0.711574197, 4.94910717, 0. - 787, -2.077075, 4.54816008, 0. - 788, -3.27430367, 3.7787478, 0. - 789, -4.20626783, 2.70320415, 0. - 790, -4.79746485, 1.4086628, 0. - 791, -5., 0., 0. - 792, -4.79746485, -1.4086628, 0. - 793, -4.20626783, -2.70320415, 0. - 794, -3.27430367, -3.7787478, 0. - 795, -2.077075, -4.54816008, 0. - 796, -0.711574197, -4.94910717, 0. - 797, 0.711574197, -4.94910717, 0. - 798, 2.077075, -4.54816008, 0. - 799, 3.27430367, -3.7787478, 0. - 800, 4.20626783, -2.70320415, 0. - 801, 4.79746485, -1.4086628, 0. - 802, 5., 0., 0. - 803, 1.6963793, -3.22420955, 0. - 804, -1.00844872, -2.57745242, 0. - 805, -1.37056375, -1.55261672, 0. - 806, -2.79301119, -2.04475617, 0. - 807, -3.15915275, -0.953875899, 0. - 808, -3.31513882, 0.18763873, 0. - 809, -3.26485705, 1.3136189, 0. - 810, -3.05202723, 2.36488891, 0. - 811, -2.76825261, 3.22686028, 0. - 812, -1.04677927, 2.62223077, 0. - 813, 0.233534187, 3.4200623, 0. - 814, 1.29102433, 3.0963695, 0. - 815, 2.98705912, -1.83198035, 0. - 816, 2.641819, -2.9781971, 0. - 817, 2.27109313, 2.54390693, 0. - 818, 3.06495118, 1.8082819, 0. - 819, 3.596766, 0.890879691, 0. - 820, 3.78296232, -0.171689898, 0. - 821, 3.88936043, -1.1366502, 0. - 822, -1.96019876, 2.43814969, 0. - 823, -1.84388077, 0.50134325, 0. - 824, -1.66432226, -0.536203504, 0. - 825, 0.304624766, -2.21873379, 0. - 826, -0.499021262, 2.01902366, 0. - 827, 0.621557593, 1.88027596, 0. - 828, 2.7210238, -0.515629292, 0. - 829, 1.58998036, -1.91277814, 0. - 830, 1.46154559, 1.41150224, 0. - 831, 2.16689587, 0.844061613, 0. - 832, -0.596776128, 0.859395862, 0. - 833, -0.355480254, -0.117340848, 0. - 834, 0.717503786, 0.440903485, 0. - 835, 1.43037975, -0.478143334, 0. - 836, -0.798393071, 3.61305261, 0. - 837, -1.88272476, 3.47693872, 0. - 838, -2.23948669, -3.02067423, 0. - 839, -1.70037711, -3.77449918, 0. - 840, 0.511443317, -3.51093721, 0. - 841, -0.700032651, -3.69734979, 0. - 842, 2.78402972, 0.427267253, 0. - 843, -1.90023589, 1.52119613, 0. - 844, 0.00998886116, -1.09023917, 0. - 845, 0.257420778, 1.0292536, 0. - 846, 4.79746485, 1.4086628, 1.36363637 - 847, 4.20626783, 2.70320415, 1.36363637 - 848, 3.27430367, 3.7787478, 1.36363637 - 849, 2.077075, 4.54816008, 1.36363637 - 850, 0.711574197, 4.94910717, 1.36363637 - 851, -0.711574197, 4.94910717, 1.36363637 - 852, -2.077075, 4.54816008, 1.36363637 - 853, -3.27430367, 3.7787478, 1.36363637 - 854, -4.20626783, 2.70320415, 1.36363637 - 855, -4.79746485, 1.4086628, 1.36363637 - 856, -5., 0., 1.36363637 - 857, -4.79746485, -1.4086628, 1.36363637 - 858, -4.20626783, -2.70320415, 1.36363637 - 859, -3.27430367, -3.7787478, 1.36363637 - 860, -2.077075, -4.54816008, 1.36363637 - 861, -0.711574197, -4.94910717, 1.36363637 - 862, 0.711574197, -4.94910717, 1.36363637 - 863, 2.077075, -4.54816008, 1.36363637 - 864, 3.27430367, -3.7787478, 1.36363637 - 865, 4.20626783, -2.70320415, 1.36363637 - 866, 4.79746485, -1.4086628, 1.36363637 - 867, 5., 0., 1.36363637 - 868, 1.6963793, -3.22420955, 1.36363637 - 869, -1.00844872, -2.57745242, 1.36363637 - 870, -1.37056375, -1.55261672, 1.36363637 - 871, -2.79301119, -2.04475617, 1.36363637 - 872, -3.15915275, -0.953875899, 1.36363637 - 873, -3.31513882, 0.18763873, 1.36363637 - 874, -3.26485705, 1.3136189, 1.36363637 - 875, -3.05202723, 2.36488891, 1.36363637 - 876, -2.76825261, 3.22686028, 1.36363637 - 877, -1.04677927, 2.62223077, 1.36363637 - 878, 0.233534187, 3.4200623, 1.36363637 - 879, 1.29102433, 3.0963695, 1.36363637 - 880, 2.98705912, -1.83198035, 1.36363637 - 881, 2.641819, -2.9781971, 1.36363637 - 882, 2.27109313, 2.54390693, 1.36363637 - 883, 3.06495118, 1.8082819, 1.36363637 - 884, 3.596766, 0.890879691, 1.36363637 - 885, 3.78296232, -0.171689898, 1.36363637 - 886, 3.88936043, -1.1366502, 1.36363637 - 887, -1.96019876, 2.43814969, 1.36363637 - 888, -1.84388077, 0.50134325, 1.36363637 - 889, -1.66432226, -0.536203504, 1.36363637 - 890, 0.304624766, -2.21873379, 1.36363637 - 891, -0.499021262, 2.01902366, 1.36363637 - 892, 0.621557593, 1.88027596, 1.36363637 - 893, 2.7210238, -0.515629292, 1.36363637 - 894, 1.58998036, -1.91277814, 1.36363637 - 895, 1.46154559, 1.41150224, 1.36363637 - 896, 2.16689587, 0.844061613, 1.36363637 - 897, -0.596776128, 0.859395862, 1.36363637 - 898, -0.355480254, -0.117340848, 1.36363637 - 899, 0.717503786, 0.440903485, 1.36363637 - 900, 1.43037975, -0.478143334, 1.36363637 - 901, -0.798393071, 3.61305261, 1.36363637 - 902, -1.88272476, 3.47693872, 1.36363637 - 903, -2.23948669, -3.02067423, 1.36363637 - 904, -1.70037711, -3.77449918, 1.36363637 - 905, 0.511443317, -3.51093721, 1.36363637 - 906, -0.700032651, -3.69734979, 1.36363637 - 907, 2.78402972, 0.427267253, 1.36363637 - 908, -1.90023589, 1.52119613, 1.36363637 - 909, 0.00998886116, -1.09023917, 1.36363637 - 910, 0.257420778, 1.0292536, 1.36363637 - 911, 4.79746485, 1.4086628, 2.72727275 - 912, 4.20626783, 2.70320415, 2.72727275 - 913, 3.27430367, 3.7787478, 2.72727275 - 914, 2.077075, 4.54816008, 2.72727275 - 915, 0.711574197, 4.94910717, 2.72727275 - 916, -0.711574197, 4.94910717, 2.72727275 - 917, -2.077075, 4.54816008, 2.72727275 - 918, -3.27430367, 3.7787478, 2.72727275 - 919, -4.20626783, 2.70320415, 2.72727275 - 920, -4.79746485, 1.4086628, 2.72727275 - 921, -5., 0., 2.72727275 - 922, -4.79746485, -1.4086628, 2.72727275 - 923, -4.20626783, -2.70320415, 2.72727275 - 924, -3.27430367, -3.7787478, 2.72727275 - 925, -2.077075, -4.54816008, 2.72727275 - 926, -0.711574197, -4.94910717, 2.72727275 - 927, 0.711574197, -4.94910717, 2.72727275 - 928, 2.077075, -4.54816008, 2.72727275 - 929, 3.27430367, -3.7787478, 2.72727275 - 930, 4.20626783, -2.70320415, 2.72727275 - 931, 4.79746485, -1.4086628, 2.72727275 - 932, 5., 0., 2.72727275 - 933, 1.6963793, -3.22420955, 2.72727275 - 934, -1.00844872, -2.57745242, 2.72727275 - 935, -1.37056375, -1.55261672, 2.72727275 - 936, -2.79301119, -2.04475617, 2.72727275 - 937, -3.15915275, -0.953875899, 2.72727275 - 938, -3.31513882, 0.18763873, 2.72727275 - 939, -3.26485705, 1.3136189, 2.72727275 - 940, -3.05202723, 2.36488891, 2.72727275 - 941, -2.76825261, 3.22686028, 2.72727275 - 942, -1.04677927, 2.62223077, 2.72727275 - 943, 0.233534187, 3.4200623, 2.72727275 - 944, 1.29102433, 3.0963695, 2.72727275 - 945, 2.98705912, -1.83198035, 2.72727275 - 946, 2.641819, -2.9781971, 2.72727275 - 947, 2.27109313, 2.54390693, 2.72727275 - 948, 3.06495118, 1.8082819, 2.72727275 - 949, 3.596766, 0.890879691, 2.72727275 - 950, 3.78296232, -0.171689898, 2.72727275 - 951, 3.88936043, -1.1366502, 2.72727275 - 952, -1.96019876, 2.43814969, 2.72727275 - 953, -1.84388077, 0.50134325, 2.72727275 - 954, -1.66432226, -0.536203504, 2.72727275 - 955, 0.304624766, -2.21873379, 2.72727275 - 956, -0.499021262, 2.01902366, 2.72727275 - 957, 0.621557593, 1.88027596, 2.72727275 - 958, 2.7210238, -0.515629292, 2.72727275 - 959, 1.58998036, -1.91277814, 2.72727275 - 960, 1.46154559, 1.41150224, 2.72727275 - 961, 2.16689587, 0.844061613, 2.72727275 - 962, -0.596776128, 0.859395862, 2.72727275 - 963, -0.355480254, -0.117340848, 2.72727275 - 964, 0.717503786, 0.440903485, 2.72727275 - 965, 1.43037975, -0.478143334, 2.72727275 - 966, -0.798393071, 3.61305261, 2.72727275 - 967, -1.88272476, 3.47693872, 2.72727275 - 968, -2.23948669, -3.02067423, 2.72727275 - 969, -1.70037711, -3.77449918, 2.72727275 - 970, 0.511443317, -3.51093721, 2.72727275 - 971, -0.700032651, -3.69734979, 2.72727275 - 972, 2.78402972, 0.427267253, 2.72727275 - 973, -1.90023589, 1.52119613, 2.72727275 - 974, 0.00998886116, -1.09023917, 2.72727275 - 975, 0.257420778, 1.0292536, 2.72727275 - 976, 4.79746485, 1.4086628, 4.090909 - 977, 4.20626783, 2.70320415, 4.090909 - 978, 3.27430367, 3.7787478, 4.090909 - 979, 2.077075, 4.54816008, 4.090909 - 980, 0.711574197, 4.94910717, 4.090909 - 981, -0.711574197, 4.94910717, 4.090909 - 982, -2.077075, 4.54816008, 4.090909 - 983, -3.27430367, 3.7787478, 4.090909 - 984, -4.20626783, 2.70320415, 4.090909 - 985, -4.79746485, 1.4086628, 4.090909 - 986, -5., 0., 4.090909 - 987, -4.79746485, -1.4086628, 4.090909 - 988, -4.20626783, -2.70320415, 4.090909 - 989, -3.27430367, -3.7787478, 4.090909 - 990, -2.077075, -4.54816008, 4.090909 - 991, -0.711574197, -4.94910717, 4.090909 - 992, 0.711574197, -4.94910717, 4.090909 - 993, 2.077075, -4.54816008, 4.090909 - 994, 3.27430367, -3.7787478, 4.090909 - 995, 4.20626783, -2.70320415, 4.090909 - 996, 4.79746485, -1.4086628, 4.090909 - 997, 5., 0., 4.090909 - 998, 1.6963793, -3.22420955, 4.090909 - 999, -1.00844872, -2.57745242, 4.090909 - 1000, -1.37056375, -1.55261672, 4.090909 - 1001, -2.79301119, -2.04475617, 4.090909 - 1002, -3.15915275, -0.953875899, 4.090909 - 1003, -3.31513882, 0.18763873, 4.090909 - 1004, -3.26485705, 1.3136189, 4.090909 - 1005, -3.05202723, 2.36488891, 4.090909 - 1006, -2.76825261, 3.22686028, 4.090909 - 1007, -1.04677927, 2.62223077, 4.090909 - 1008, 0.233534187, 3.4200623, 4.090909 - 1009, 1.29102433, 3.0963695, 4.090909 - 1010, 2.98705912, -1.83198035, 4.090909 - 1011, 2.641819, -2.9781971, 4.090909 - 1012, 2.27109313, 2.54390693, 4.090909 - 1013, 3.06495118, 1.8082819, 4.090909 - 1014, 3.596766, 0.890879691, 4.090909 - 1015, 3.78296232, -0.171689898, 4.090909 - 1016, 3.88936043, -1.1366502, 4.090909 - 1017, -1.96019876, 2.43814969, 4.090909 - 1018, -1.84388077, 0.50134325, 4.090909 - 1019, -1.66432226, -0.536203504, 4.090909 - 1020, 0.304624766, -2.21873379, 4.090909 - 1021, -0.499021262, 2.01902366, 4.090909 - 1022, 0.621557593, 1.88027596, 4.090909 - 1023, 2.7210238, -0.515629292, 4.090909 - 1024, 1.58998036, -1.91277814, 4.090909 - 1025, 1.46154559, 1.41150224, 4.090909 - 1026, 2.16689587, 0.844061613, 4.090909 - 1027, -0.596776128, 0.859395862, 4.090909 - 1028, -0.355480254, -0.117340848, 4.090909 - 1029, 0.717503786, 0.440903485, 4.090909 - 1030, 1.43037975, -0.478143334, 4.090909 - 1031, -0.798393071, 3.61305261, 4.090909 - 1032, -1.88272476, 3.47693872, 4.090909 - 1033, -2.23948669, -3.02067423, 4.090909 - 1034, -1.70037711, -3.77449918, 4.090909 - 1035, 0.511443317, -3.51093721, 4.090909 - 1036, -0.700032651, -3.69734979, 4.090909 - 1037, 2.78402972, 0.427267253, 4.090909 - 1038, -1.90023589, 1.52119613, 4.090909 - 1039, 0.00998886116, -1.09023917, 4.090909 - 1040, 0.257420778, 1.0292536, 4.090909 - 1041, 4.79746485, 1.4086628, 5.4545455 - 1042, 4.20626783, 2.70320415, 5.4545455 - 1043, 3.27430367, 3.7787478, 5.4545455 - 1044, 2.077075, 4.54816008, 5.4545455 - 1045, 0.711574197, 4.94910717, 5.4545455 - 1046, -0.711574197, 4.94910717, 5.4545455 - 1047, -2.077075, 4.54816008, 5.4545455 - 1048, -3.27430367, 3.7787478, 5.4545455 - 1049, -4.20626783, 2.70320415, 5.4545455 - 1050, -4.79746485, 1.4086628, 5.4545455 - 1051, -5., 0., 5.4545455 - 1052, -4.79746485, -1.4086628, 5.4545455 - 1053, -4.20626783, -2.70320415, 5.4545455 - 1054, -3.27430367, -3.7787478, 5.4545455 - 1055, -2.077075, -4.54816008, 5.4545455 - 1056, -0.711574197, -4.94910717, 5.4545455 - 1057, 0.711574197, -4.94910717, 5.4545455 - 1058, 2.077075, -4.54816008, 5.4545455 - 1059, 3.27430367, -3.7787478, 5.4545455 - 1060, 4.20626783, -2.70320415, 5.4545455 - 1061, 4.79746485, -1.4086628, 5.4545455 - 1062, 5., 0., 5.4545455 - 1063, 1.6963793, -3.22420955, 5.4545455 - 1064, -1.00844872, -2.57745242, 5.4545455 - 1065, -1.37056375, -1.55261672, 5.4545455 - 1066, -2.79301119, -2.04475617, 5.4545455 - 1067, -3.15915275, -0.953875899, 5.4545455 - 1068, -3.31513882, 0.18763873, 5.4545455 - 1069, -3.26485705, 1.3136189, 5.4545455 - 1070, -3.05202723, 2.36488891, 5.4545455 - 1071, -2.76825261, 3.22686028, 5.4545455 - 1072, -1.04677927, 2.62223077, 5.4545455 - 1073, 0.233534187, 3.4200623, 5.4545455 - 1074, 1.29102433, 3.0963695, 5.4545455 - 1075, 2.98705912, -1.83198035, 5.4545455 - 1076, 2.641819, -2.9781971, 5.4545455 - 1077, 2.27109313, 2.54390693, 5.4545455 - 1078, 3.06495118, 1.8082819, 5.4545455 - 1079, 3.596766, 0.890879691, 5.4545455 - 1080, 3.78296232, -0.171689898, 5.4545455 - 1081, 3.88936043, -1.1366502, 5.4545455 - 1082, -1.96019876, 2.43814969, 5.4545455 - 1083, -1.84388077, 0.50134325, 5.4545455 - 1084, -1.66432226, -0.536203504, 5.4545455 - 1085, 0.304624766, -2.21873379, 5.4545455 - 1086, -0.499021262, 2.01902366, 5.4545455 - 1087, 0.621557593, 1.88027596, 5.4545455 - 1088, 2.7210238, -0.515629292, 5.4545455 - 1089, 1.58998036, -1.91277814, 5.4545455 - 1090, 1.46154559, 1.41150224, 5.4545455 - 1091, 2.16689587, 0.844061613, 5.4545455 - 1092, -0.596776128, 0.859395862, 5.4545455 - 1093, -0.355480254, -0.117340848, 5.4545455 - 1094, 0.717503786, 0.440903485, 5.4545455 - 1095, 1.43037975, -0.478143334, 5.4545455 - 1096, -0.798393071, 3.61305261, 5.4545455 - 1097, -1.88272476, 3.47693872, 5.4545455 - 1098, -2.23948669, -3.02067423, 5.4545455 - 1099, -1.70037711, -3.77449918, 5.4545455 - 1100, 0.511443317, -3.51093721, 5.4545455 - 1101, -0.700032651, -3.69734979, 5.4545455 - 1102, 2.78402972, 0.427267253, 5.4545455 - 1103, -1.90023589, 1.52119613, 5.4545455 - 1104, 0.00998886116, -1.09023917, 5.4545455 - 1105, 0.257420778, 1.0292536, 5.4545455 - 1106, 4.79746485, 1.4086628, 6.81818199 - 1107, 4.20626783, 2.70320415, 6.81818199 - 1108, 3.27430367, 3.7787478, 6.81818199 - 1109, 2.077075, 4.54816008, 6.81818199 - 1110, 0.711574197, 4.94910717, 6.81818199 - 1111, -0.711574197, 4.94910717, 6.81818199 - 1112, -2.077075, 4.54816008, 6.81818199 - 1113, -3.27430367, 3.7787478, 6.81818199 - 1114, -4.20626783, 2.70320415, 6.81818199 - 1115, -4.79746485, 1.4086628, 6.81818199 - 1116, -5., 0., 6.81818199 - 1117, -4.79746485, -1.4086628, 6.81818199 - 1118, -4.20626783, -2.70320415, 6.81818199 - 1119, -3.27430367, -3.7787478, 6.81818199 - 1120, -2.077075, -4.54816008, 6.81818199 - 1121, -0.711574197, -4.94910717, 6.81818199 - 1122, 0.711574197, -4.94910717, 6.81818199 - 1123, 2.077075, -4.54816008, 6.81818199 - 1124, 3.27430367, -3.7787478, 6.81818199 - 1125, 4.20626783, -2.70320415, 6.81818199 - 1126, 4.79746485, -1.4086628, 6.81818199 - 1127, 5., 0., 6.81818199 - 1128, 1.6963793, -3.22420955, 6.81818199 - 1129, -1.00844872, -2.57745242, 6.81818199 - 1130, -1.37056375, -1.55261672, 6.81818199 - 1131, -2.79301119, -2.04475617, 6.81818199 - 1132, -3.15915275, -0.953875899, 6.81818199 - 1133, -3.31513882, 0.18763873, 6.81818199 - 1134, -3.26485705, 1.3136189, 6.81818199 - 1135, -3.05202723, 2.36488891, 6.81818199 - 1136, -2.76825261, 3.22686028, 6.81818199 - 1137, -1.04677927, 2.62223077, 6.81818199 - 1138, 0.233534187, 3.4200623, 6.81818199 - 1139, 1.29102433, 3.0963695, 6.81818199 - 1140, 2.98705912, -1.83198035, 6.81818199 - 1141, 2.641819, -2.9781971, 6.81818199 - 1142, 2.27109313, 2.54390693, 6.81818199 - 1143, 3.06495118, 1.8082819, 6.81818199 - 1144, 3.596766, 0.890879691, 6.81818199 - 1145, 3.78296232, -0.171689898, 6.81818199 - 1146, 3.88936043, -1.1366502, 6.81818199 - 1147, -1.96019876, 2.43814969, 6.81818199 - 1148, -1.84388077, 0.50134325, 6.81818199 - 1149, -1.66432226, -0.536203504, 6.81818199 - 1150, 0.304624766, -2.21873379, 6.81818199 - 1151, -0.499021262, 2.01902366, 6.81818199 - 1152, 0.621557593, 1.88027596, 6.81818199 - 1153, 2.7210238, -0.515629292, 6.81818199 - 1154, 1.58998036, -1.91277814, 6.81818199 - 1155, 1.46154559, 1.41150224, 6.81818199 - 1156, 2.16689587, 0.844061613, 6.81818199 - 1157, -0.596776128, 0.859395862, 6.81818199 - 1158, -0.355480254, -0.117340848, 6.81818199 - 1159, 0.717503786, 0.440903485, 6.81818199 - 1160, 1.43037975, -0.478143334, 6.81818199 - 1161, -0.798393071, 3.61305261, 6.81818199 - 1162, -1.88272476, 3.47693872, 6.81818199 - 1163, -2.23948669, -3.02067423, 6.81818199 - 1164, -1.70037711, -3.77449918, 6.81818199 - 1165, 0.511443317, -3.51093721, 6.81818199 - 1166, -0.700032651, -3.69734979, 6.81818199 - 1167, 2.78402972, 0.427267253, 6.81818199 - 1168, -1.90023589, 1.52119613, 6.81818199 - 1169, 0.00998886116, -1.09023917, 6.81818199 - 1170, 0.257420778, 1.0292536, 6.81818199 - 1171, 4.79746485, 1.4086628, 8.18181801 - 1172, 4.20626783, 2.70320415, 8.18181801 - 1173, 3.27430367, 3.7787478, 8.18181801 - 1174, 2.077075, 4.54816008, 8.18181801 - 1175, 0.711574197, 4.94910717, 8.18181801 - 1176, -0.711574197, 4.94910717, 8.18181801 - 1177, -2.077075, 4.54816008, 8.18181801 - 1178, -3.27430367, 3.7787478, 8.18181801 - 1179, -4.20626783, 2.70320415, 8.18181801 - 1180, -4.79746485, 1.4086628, 8.18181801 - 1181, -5., 0., 8.18181801 - 1182, -4.79746485, -1.4086628, 8.18181801 - 1183, -4.20626783, -2.70320415, 8.18181801 - 1184, -3.27430367, -3.7787478, 8.18181801 - 1185, -2.077075, -4.54816008, 8.18181801 - 1186, -0.711574197, -4.94910717, 8.18181801 - 1187, 0.711574197, -4.94910717, 8.18181801 - 1188, 2.077075, -4.54816008, 8.18181801 - 1189, 3.27430367, -3.7787478, 8.18181801 - 1190, 4.20626783, -2.70320415, 8.18181801 - 1191, 4.79746485, -1.4086628, 8.18181801 - 1192, 5., 0., 8.18181801 - 1193, 1.6963793, -3.22420955, 8.18181801 - 1194, -1.00844872, -2.57745242, 8.18181801 - 1195, -1.37056375, -1.55261672, 8.18181801 - 1196, -2.79301119, -2.04475617, 8.18181801 - 1197, -3.15915275, -0.953875899, 8.18181801 - 1198, -3.31513882, 0.18763873, 8.18181801 - 1199, -3.26485705, 1.3136189, 8.18181801 - 1200, -3.05202723, 2.36488891, 8.18181801 - 1201, -2.76825261, 3.22686028, 8.18181801 - 1202, -1.04677927, 2.62223077, 8.18181801 - 1203, 0.233534187, 3.4200623, 8.18181801 - 1204, 1.29102433, 3.0963695, 8.18181801 - 1205, 2.98705912, -1.83198035, 8.18181801 - 1206, 2.641819, -2.9781971, 8.18181801 - 1207, 2.27109313, 2.54390693, 8.18181801 - 1208, 3.06495118, 1.8082819, 8.18181801 - 1209, 3.596766, 0.890879691, 8.18181801 - 1210, 3.78296232, -0.171689898, 8.18181801 - 1211, 3.88936043, -1.1366502, 8.18181801 - 1212, -1.96019876, 2.43814969, 8.18181801 - 1213, -1.84388077, 0.50134325, 8.18181801 - 1214, -1.66432226, -0.536203504, 8.18181801 - 1215, 0.304624766, -2.21873379, 8.18181801 - 1216, -0.499021262, 2.01902366, 8.18181801 - 1217, 0.621557593, 1.88027596, 8.18181801 - 1218, 2.7210238, -0.515629292, 8.18181801 - 1219, 1.58998036, -1.91277814, 8.18181801 - 1220, 1.46154559, 1.41150224, 8.18181801 - 1221, 2.16689587, 0.844061613, 8.18181801 - 1222, -0.596776128, 0.859395862, 8.18181801 - 1223, -0.355480254, -0.117340848, 8.18181801 - 1224, 0.717503786, 0.440903485, 8.18181801 - 1225, 1.43037975, -0.478143334, 8.18181801 - 1226, -0.798393071, 3.61305261, 8.18181801 - 1227, -1.88272476, 3.47693872, 8.18181801 - 1228, -2.23948669, -3.02067423, 8.18181801 - 1229, -1.70037711, -3.77449918, 8.18181801 - 1230, 0.511443317, -3.51093721, 8.18181801 - 1231, -0.700032651, -3.69734979, 8.18181801 - 1232, 2.78402972, 0.427267253, 8.18181801 - 1233, -1.90023589, 1.52119613, 8.18181801 - 1234, 0.00998886116, -1.09023917, 8.18181801 - 1235, 0.257420778, 1.0292536, 8.18181801 - 1236, 4.79746485, 1.4086628, 9.54545498 - 1237, 4.20626783, 2.70320415, 9.54545498 - 1238, 3.27430367, 3.7787478, 9.54545498 - 1239, 2.077075, 4.54816008, 9.54545498 - 1240, 0.711574197, 4.94910717, 9.54545498 - 1241, -0.711574197, 4.94910717, 9.54545498 - 1242, -2.077075, 4.54816008, 9.54545498 - 1243, -3.27430367, 3.7787478, 9.54545498 - 1244, -4.20626783, 2.70320415, 9.54545498 - 1245, -4.79746485, 1.4086628, 9.54545498 - 1246, -5., 0., 9.54545498 - 1247, -4.79746485, -1.4086628, 9.54545498 - 1248, -4.20626783, -2.70320415, 9.54545498 - 1249, -3.27430367, -3.7787478, 9.54545498 - 1250, -2.077075, -4.54816008, 9.54545498 - 1251, -0.711574197, -4.94910717, 9.54545498 - 1252, 0.711574197, -4.94910717, 9.54545498 - 1253, 2.077075, -4.54816008, 9.54545498 - 1254, 3.27430367, -3.7787478, 9.54545498 - 1255, 4.20626783, -2.70320415, 9.54545498 - 1256, 4.79746485, -1.4086628, 9.54545498 - 1257, 5., 0., 9.54545498 - 1258, 1.6963793, -3.22420955, 9.54545498 - 1259, -1.00844872, -2.57745242, 9.54545498 - 1260, -1.37056375, -1.55261672, 9.54545498 - 1261, -2.79301119, -2.04475617, 9.54545498 - 1262, -3.15915275, -0.953875899, 9.54545498 - 1263, -3.31513882, 0.18763873, 9.54545498 - 1264, -3.26485705, 1.3136189, 9.54545498 - 1265, -3.05202723, 2.36488891, 9.54545498 - 1266, -2.76825261, 3.22686028, 9.54545498 - 1267, -1.04677927, 2.62223077, 9.54545498 - 1268, 0.233534187, 3.4200623, 9.54545498 - 1269, 1.29102433, 3.0963695, 9.54545498 - 1270, 2.98705912, -1.83198035, 9.54545498 - 1271, 2.641819, -2.9781971, 9.54545498 - 1272, 2.27109313, 2.54390693, 9.54545498 - 1273, 3.06495118, 1.8082819, 9.54545498 - 1274, 3.596766, 0.890879691, 9.54545498 - 1275, 3.78296232, -0.171689898, 9.54545498 - 1276, 3.88936043, -1.1366502, 9.54545498 - 1277, -1.96019876, 2.43814969, 9.54545498 - 1278, -1.84388077, 0.50134325, 9.54545498 - 1279, -1.66432226, -0.536203504, 9.54545498 - 1280, 0.304624766, -2.21873379, 9.54545498 - 1281, -0.499021262, 2.01902366, 9.54545498 - 1282, 0.621557593, 1.88027596, 9.54545498 - 1283, 2.7210238, -0.515629292, 9.54545498 - 1284, 1.58998036, -1.91277814, 9.54545498 - 1285, 1.46154559, 1.41150224, 9.54545498 - 1286, 2.16689587, 0.844061613, 9.54545498 - 1287, -0.596776128, 0.859395862, 9.54545498 - 1288, -0.355480254, -0.117340848, 9.54545498 - 1289, 0.717503786, 0.440903485, 9.54545498 - 1290, 1.43037975, -0.478143334, 9.54545498 - 1291, -0.798393071, 3.61305261, 9.54545498 - 1292, -1.88272476, 3.47693872, 9.54545498 - 1293, -2.23948669, -3.02067423, 9.54545498 - 1294, -1.70037711, -3.77449918, 9.54545498 - 1295, 0.511443317, -3.51093721, 9.54545498 - 1296, -0.700032651, -3.69734979, 9.54545498 - 1297, 2.78402972, 0.427267253, 9.54545498 - 1298, -1.90023589, 1.52119613, 9.54545498 - 1299, 0.00998886116, -1.09023917, 9.54545498 - 1300, 0.257420778, 1.0292536, 9.54545498 - 1301, 4.79746485, 1.4086628, 10.909091 - 1302, 4.20626783, 2.70320415, 10.909091 - 1303, 3.27430367, 3.7787478, 10.909091 - 1304, 2.077075, 4.54816008, 10.909091 - 1305, 0.711574197, 4.94910717, 10.909091 - 1306, -0.711574197, 4.94910717, 10.909091 - 1307, -2.077075, 4.54816008, 10.909091 - 1308, -3.27430367, 3.7787478, 10.909091 - 1309, -4.20626783, 2.70320415, 10.909091 - 1310, -4.79746485, 1.4086628, 10.909091 - 1311, -5., 0., 10.909091 - 1312, -4.79746485, -1.4086628, 10.909091 - 1313, -4.20626783, -2.70320415, 10.909091 - 1314, -3.27430367, -3.7787478, 10.909091 - 1315, -2.077075, -4.54816008, 10.909091 - 1316, -0.711574197, -4.94910717, 10.909091 - 1317, 0.711574197, -4.94910717, 10.909091 - 1318, 2.077075, -4.54816008, 10.909091 - 1319, 3.27430367, -3.7787478, 10.909091 - 1320, 4.20626783, -2.70320415, 10.909091 - 1321, 4.79746485, -1.4086628, 10.909091 - 1322, 5., 0., 10.909091 - 1323, 1.6963793, -3.22420955, 10.909091 - 1324, -1.00844872, -2.57745242, 10.909091 - 1325, -1.37056375, -1.55261672, 10.909091 - 1326, -2.79301119, -2.04475617, 10.909091 - 1327, -3.15915275, -0.953875899, 10.909091 - 1328, -3.31513882, 0.18763873, 10.909091 - 1329, -3.26485705, 1.3136189, 10.909091 - 1330, -3.05202723, 2.36488891, 10.909091 - 1331, -2.76825261, 3.22686028, 10.909091 - 1332, -1.04677927, 2.62223077, 10.909091 - 1333, 0.233534187, 3.4200623, 10.909091 - 1334, 1.29102433, 3.0963695, 10.909091 - 1335, 2.98705912, -1.83198035, 10.909091 - 1336, 2.641819, -2.9781971, 10.909091 - 1337, 2.27109313, 2.54390693, 10.909091 - 1338, 3.06495118, 1.8082819, 10.909091 - 1339, 3.596766, 0.890879691, 10.909091 - 1340, 3.78296232, -0.171689898, 10.909091 - 1341, 3.88936043, -1.1366502, 10.909091 - 1342, -1.96019876, 2.43814969, 10.909091 - 1343, -1.84388077, 0.50134325, 10.909091 - 1344, -1.66432226, -0.536203504, 10.909091 - 1345, 0.304624766, -2.21873379, 10.909091 - 1346, -0.499021262, 2.01902366, 10.909091 - 1347, 0.621557593, 1.88027596, 10.909091 - 1348, 2.7210238, -0.515629292, 10.909091 - 1349, 1.58998036, -1.91277814, 10.909091 - 1350, 1.46154559, 1.41150224, 10.909091 - 1351, 2.16689587, 0.844061613, 10.909091 - 1352, -0.596776128, 0.859395862, 10.909091 - 1353, -0.355480254, -0.117340848, 10.909091 - 1354, 0.717503786, 0.440903485, 10.909091 - 1355, 1.43037975, -0.478143334, 10.909091 - 1356, -0.798393071, 3.61305261, 10.909091 - 1357, -1.88272476, 3.47693872, 10.909091 - 1358, -2.23948669, -3.02067423, 10.909091 - 1359, -1.70037711, -3.77449918, 10.909091 - 1360, 0.511443317, -3.51093721, 10.909091 - 1361, -0.700032651, -3.69734979, 10.909091 - 1362, 2.78402972, 0.427267253, 10.909091 - 1363, -1.90023589, 1.52119613, 10.909091 - 1364, 0.00998886116, -1.09023917, 10.909091 - 1365, 0.257420778, 1.0292536, 10.909091 - 1366, 4.79746485, 1.4086628, 12.272727 - 1367, 4.20626783, 2.70320415, 12.272727 - 1368, 3.27430367, 3.7787478, 12.272727 - 1369, 2.077075, 4.54816008, 12.272727 - 1370, 0.711574197, 4.94910717, 12.272727 - 1371, -0.711574197, 4.94910717, 12.272727 - 1372, -2.077075, 4.54816008, 12.272727 - 1373, -3.27430367, 3.7787478, 12.272727 - 1374, -4.20626783, 2.70320415, 12.272727 - 1375, -4.79746485, 1.4086628, 12.272727 - 1376, -5., 0., 12.272727 - 1377, -4.79746485, -1.4086628, 12.272727 - 1378, -4.20626783, -2.70320415, 12.272727 - 1379, -3.27430367, -3.7787478, 12.272727 - 1380, -2.077075, -4.54816008, 12.272727 - 1381, -0.711574197, -4.94910717, 12.272727 - 1382, 0.711574197, -4.94910717, 12.272727 - 1383, 2.077075, -4.54816008, 12.272727 - 1384, 3.27430367, -3.7787478, 12.272727 - 1385, 4.20626783, -2.70320415, 12.272727 - 1386, 4.79746485, -1.4086628, 12.272727 - 1387, 5., 0., 12.272727 - 1388, 1.6963793, -3.22420955, 12.272727 - 1389, -1.00844872, -2.57745242, 12.272727 - 1390, -1.37056375, -1.55261672, 12.272727 - 1391, -2.79301119, -2.04475617, 12.272727 - 1392, -3.15915275, -0.953875899, 12.272727 - 1393, -3.31513882, 0.18763873, 12.272727 - 1394, -3.26485705, 1.3136189, 12.272727 - 1395, -3.05202723, 2.36488891, 12.272727 - 1396, -2.76825261, 3.22686028, 12.272727 - 1397, -1.04677927, 2.62223077, 12.272727 - 1398, 0.233534187, 3.4200623, 12.272727 - 1399, 1.29102433, 3.0963695, 12.272727 - 1400, 2.98705912, -1.83198035, 12.272727 - 1401, 2.641819, -2.9781971, 12.272727 - 1402, 2.27109313, 2.54390693, 12.272727 - 1403, 3.06495118, 1.8082819, 12.272727 - 1404, 3.596766, 0.890879691, 12.272727 - 1405, 3.78296232, -0.171689898, 12.272727 - 1406, 3.88936043, -1.1366502, 12.272727 - 1407, -1.96019876, 2.43814969, 12.272727 - 1408, -1.84388077, 0.50134325, 12.272727 - 1409, -1.66432226, -0.536203504, 12.272727 - 1410, 0.304624766, -2.21873379, 12.272727 - 1411, -0.499021262, 2.01902366, 12.272727 - 1412, 0.621557593, 1.88027596, 12.272727 - 1413, 2.7210238, -0.515629292, 12.272727 - 1414, 1.58998036, -1.91277814, 12.272727 - 1415, 1.46154559, 1.41150224, 12.272727 - 1416, 2.16689587, 0.844061613, 12.272727 - 1417, -0.596776128, 0.859395862, 12.272727 - 1418, -0.355480254, -0.117340848, 12.272727 - 1419, 0.717503786, 0.440903485, 12.272727 - 1420, 1.43037975, -0.478143334, 12.272727 - 1421, -0.798393071, 3.61305261, 12.272727 - 1422, -1.88272476, 3.47693872, 12.272727 - 1423, -2.23948669, -3.02067423, 12.272727 - 1424, -1.70037711, -3.77449918, 12.272727 - 1425, 0.511443317, -3.51093721, 12.272727 - 1426, -0.700032651, -3.69734979, 12.272727 - 1427, 2.78402972, 0.427267253, 12.272727 - 1428, -1.90023589, 1.52119613, 12.272727 - 1429, 0.00998886116, -1.09023917, 12.272727 - 1430, 0.257420778, 1.0292536, 12.272727 - 1431, 4.79746485, 1.4086628, 13.636364 - 1432, 4.20626783, 2.70320415, 13.636364 - 1433, 3.27430367, 3.7787478, 13.636364 - 1434, 2.077075, 4.54816008, 13.636364 - 1435, 0.711574197, 4.94910717, 13.636364 - 1436, -0.711574197, 4.94910717, 13.636364 - 1437, -2.077075, 4.54816008, 13.636364 - 1438, -3.27430367, 3.7787478, 13.636364 - 1439, -4.20626783, 2.70320415, 13.636364 - 1440, -4.79746485, 1.4086628, 13.636364 - 1441, -5., 0., 13.636364 - 1442, -4.79746485, -1.4086628, 13.636364 - 1443, -4.20626783, -2.70320415, 13.636364 - 1444, -3.27430367, -3.7787478, 13.636364 - 1445, -2.077075, -4.54816008, 13.636364 - 1446, -0.711574197, -4.94910717, 13.636364 - 1447, 0.711574197, -4.94910717, 13.636364 - 1448, 2.077075, -4.54816008, 13.636364 - 1449, 3.27430367, -3.7787478, 13.636364 - 1450, 4.20626783, -2.70320415, 13.636364 - 1451, 4.79746485, -1.4086628, 13.636364 - 1452, 5., 0., 13.636364 - 1453, 1.6963793, -3.22420955, 13.636364 - 1454, -1.00844872, -2.57745242, 13.636364 - 1455, -1.37056375, -1.55261672, 13.636364 - 1456, -2.79301119, -2.04475617, 13.636364 - 1457, -3.15915275, -0.953875899, 13.636364 - 1458, -3.31513882, 0.18763873, 13.636364 - 1459, -3.26485705, 1.3136189, 13.636364 - 1460, -3.05202723, 2.36488891, 13.636364 - 1461, -2.76825261, 3.22686028, 13.636364 - 1462, -1.04677927, 2.62223077, 13.636364 - 1463, 0.233534187, 3.4200623, 13.636364 - 1464, 1.29102433, 3.0963695, 13.636364 - 1465, 2.98705912, -1.83198035, 13.636364 - 1466, 2.641819, -2.9781971, 13.636364 - 1467, 2.27109313, 2.54390693, 13.636364 - 1468, 3.06495118, 1.8082819, 13.636364 - 1469, 3.596766, 0.890879691, 13.636364 - 1470, 3.78296232, -0.171689898, 13.636364 - 1471, 3.88936043, -1.1366502, 13.636364 - 1472, -1.96019876, 2.43814969, 13.636364 - 1473, -1.84388077, 0.50134325, 13.636364 - 1474, -1.66432226, -0.536203504, 13.636364 - 1475, 0.304624766, -2.21873379, 13.636364 - 1476, -0.499021262, 2.01902366, 13.636364 - 1477, 0.621557593, 1.88027596, 13.636364 - 1478, 2.7210238, -0.515629292, 13.636364 - 1479, 1.58998036, -1.91277814, 13.636364 - 1480, 1.46154559, 1.41150224, 13.636364 - 1481, 2.16689587, 0.844061613, 13.636364 - 1482, -0.596776128, 0.859395862, 13.636364 - 1483, -0.355480254, -0.117340848, 13.636364 - 1484, 0.717503786, 0.440903485, 13.636364 - 1485, 1.43037975, -0.478143334, 13.636364 - 1486, -0.798393071, 3.61305261, 13.636364 - 1487, -1.88272476, 3.47693872, 13.636364 - 1488, -2.23948669, -3.02067423, 13.636364 - 1489, -1.70037711, -3.77449918, 13.636364 - 1490, 0.511443317, -3.51093721, 13.636364 - 1491, -0.700032651, -3.69734979, 13.636364 - 1492, 2.78402972, 0.427267253, 13.636364 - 1493, -1.90023589, 1.52119613, 13.636364 - 1494, 0.00998886116, -1.09023917, 13.636364 - 1495, 0.257420778, 1.0292536, 13.636364 - 1496, 4.79746485, 1.4086628, 15. - 1497, 4.20626783, 2.70320415, 15. - 1498, 3.27430367, 3.7787478, 15. - 1499, 2.077075, 4.54816008, 15. - 1500, 0.711574197, 4.94910717, 15. - 1501, -0.711574197, 4.94910717, 15. - 1502, -2.077075, 4.54816008, 15. - 1503, -3.27430367, 3.7787478, 15. - 1504, -4.20626783, 2.70320415, 15. - 1505, -4.79746485, 1.4086628, 15. - 1506, -5., 0., 15. - 1507, -4.79746485, -1.4086628, 15. - 1508, -4.20626783, -2.70320415, 15. - 1509, -3.27430367, -3.7787478, 15. - 1510, -2.077075, -4.54816008, 15. - 1511, -0.711574197, -4.94910717, 15. - 1512, 0.711574197, -4.94910717, 15. - 1513, 2.077075, -4.54816008, 15. - 1514, 3.27430367, -3.7787478, 15. - 1515, 4.20626783, -2.70320415, 15. - 1516, 4.79746485, -1.4086628, 15. - 1517, 5., 0., 15. - 1518, 1.6963793, -3.22420955, 15. - 1519, -1.00844872, -2.57745242, 15. - 1520, -1.37056375, -1.55261672, 15. - 1521, -2.79301119, -2.04475617, 15. - 1522, -3.15915275, -0.953875899, 15. - 1523, -3.31513882, 0.18763873, 15. - 1524, -3.26485705, 1.3136189, 15. - 1525, -3.05202723, 2.36488891, 15. - 1526, -2.76825261, 3.22686028, 15. - 1527, -1.04677927, 2.62223077, 15. - 1528, 0.233534187, 3.4200623, 15. - 1529, 1.29102433, 3.0963695, 15. - 1530, 2.98705912, -1.83198035, 15. - 1531, 2.641819, -2.9781971, 15. - 1532, 2.27109313, 2.54390693, 15. - 1533, 3.06495118, 1.8082819, 15. - 1534, 3.596766, 0.890879691, 15. - 1535, 3.78296232, -0.171689898, 15. - 1536, 3.88936043, -1.1366502, 15. - 1537, -1.96019876, 2.43814969, 15. - 1538, -1.84388077, 0.50134325, 15. - 1539, -1.66432226, -0.536203504, 15. - 1540, 0.304624766, -2.21873379, 15. - 1541, -0.499021262, 2.01902366, 15. - 1542, 0.621557593, 1.88027596, 15. - 1543, 2.7210238, -0.515629292, 15. - 1544, 1.58998036, -1.91277814, 15. - 1545, 1.46154559, 1.41150224, 15. - 1546, 2.16689587, 0.844061613, 15. - 1547, -0.596776128, 0.859395862, 15. - 1548, -0.355480254, -0.117340848, 15. - 1549, 0.717503786, 0.440903485, 15. - 1550, 1.43037975, -0.478143334, 15. - 1551, -0.798393071, 3.61305261, 15. - 1552, -1.88272476, 3.47693872, 15. - 1553, -2.23948669, -3.02067423, 15. - 1554, -1.70037711, -3.77449918, 15. - 1555, 0.511443317, -3.51093721, 15. - 1556, -0.700032651, -3.69734979, 15. - 1557, 2.78402972, 0.427267253, 15. - 1558, -1.90023589, 1.52119613, 15. - 1559, 0.00998886116, -1.09023917, 15. - 1560, 0.257420778, 1.0292536, 15. -*Element, type=C3D8 - 584, 862, 905, 868, 863, 797, 840, 803, 798 - 585, 860, 904, 906, 861, 795, 839, 841, 796 - 586, 870, 869, 903, 871, 805, 804, 838, 806 - 587, 881, 880, 865, 864, 816, 815, 800, 799 - 588, 885, 884, 846, 867, 820, 819, 781, 802 - 589, 877, 891, 908, 887, 812, 826, 843, 822 - 590, 887, 875, 876, 902, 822, 810, 811, 837 - 591, 908, 888, 873, 874, 843, 823, 808, 809 - 592, 899, 910, 892, 895, 834, 845, 827, 830 - 593, 908, 891, 897, 888, 843, 826, 832, 823 - 594, 871, 872, 889, 870, 806, 807, 824, 805 - 595, 868, 881, 864, 863, 803, 816, 799, 798 - 596, 874, 875, 887, 908, 809, 810, 822, 843 - 597, 878, 891, 877, 901, 813, 826, 812, 836 - 598, 878, 879, 892, 891, 813, 814, 827, 826 - 599, 868, 894, 880, 881, 803, 829, 815, 816 - 600, 869, 890, 905, 906, 804, 825, 840, 841 - 601, 851, 850, 878, 901, 786, 785, 813, 836 - 602, 859, 858, 871, 903, 794, 793, 806, 838 - 603, 904, 903, 869, 906, 839, 838, 804, 841 - 604, 858, 857, 872, 871, 793, 792, 807, 806 - 605, 857, 856, 873, 872, 792, 791, 808, 807 - 606, 856, 855, 874, 873, 791, 790, 809, 808 - 607, 855, 854, 875, 874, 790, 789, 810, 809 - 608, 854, 853, 876, 875, 789, 788, 811, 810 - 609, 853, 852, 902, 876, 788, 787, 837, 811 - 610, 879, 878, 850, 849, 814, 813, 785, 784 - 611, 849, 848, 882, 879, 784, 783, 817, 814 - 612, 848, 847, 883, 882, 783, 782, 818, 817 - 613, 886, 866, 865, 880, 821, 801, 800, 815 - 614, 880, 894, 900, 893, 815, 829, 835, 828 - 615, 898, 889, 888, 897, 833, 824, 823, 832 - 616, 847, 846, 884, 883, 782, 781, 819, 818 - 617, 896, 907, 893, 900, 831, 842, 828, 835 - 618, 897, 910, 899, 898, 832, 845, 834, 833 - 619, 886, 885, 867, 866, 821, 820, 802, 801 - 620, 869, 870, 909, 890, 804, 805, 844, 825 - 621, 888, 889, 872, 873, 823, 824, 807, 808 - 622, 909, 870, 889, 898, 844, 805, 824, 833 - 623, 890, 894, 868, 905, 825, 829, 803, 840 - 624, 892, 879, 882, 895, 827, 814, 817, 830 - 625, 895, 882, 883, 896, 830, 817, 818, 831 - 626, 883, 884, 907, 896, 818, 819, 842, 831 - 627, 880, 893, 885, 886, 815, 828, 820, 821 - 628, 894, 890, 909, 900, 829, 825, 844, 835 - 629, 885, 893, 907, 884, 820, 828, 842, 819 - 630, 899, 900, 909, 898, 834, 835, 844, 833 - 631, 895, 896, 900, 899, 830, 831, 835, 834 - 632, 902, 901, 877, 887, 837, 836, 812, 822 - 633, 852, 851, 901, 902, 787, 786, 836, 837 - 634, 903, 904, 860, 859, 838, 839, 795, 794 - 635, 905, 862, 861, 906, 840, 797, 796, 841 - 636, 910, 897, 891, 892, 845, 832, 826, 827 - 637, 927, 970, 933, 928, 862, 905, 868, 863 - 638, 925, 969, 971, 926, 860, 904, 906, 861 - 639, 935, 934, 968, 936, 870, 869, 903, 871 - 640, 946, 945, 930, 929, 881, 880, 865, 864 - 641, 950, 949, 911, 932, 885, 884, 846, 867 - 642, 942, 956, 973, 952, 877, 891, 908, 887 - 643, 952, 940, 941, 967, 887, 875, 876, 902 - 644, 973, 953, 938, 939, 908, 888, 873, 874 - 645, 964, 975, 957, 960, 899, 910, 892, 895 - 646, 973, 956, 962, 953, 908, 891, 897, 888 - 647, 936, 937, 954, 935, 871, 872, 889, 870 - 648, 933, 946, 929, 928, 868, 881, 864, 863 - 649, 939, 940, 952, 973, 874, 875, 887, 908 - 650, 943, 956, 942, 966, 878, 891, 877, 901 - 651, 943, 944, 957, 956, 878, 879, 892, 891 - 652, 933, 959, 945, 946, 868, 894, 880, 881 - 653, 934, 955, 970, 971, 869, 890, 905, 906 - 654, 916, 915, 943, 966, 851, 850, 878, 901 - 655, 924, 923, 936, 968, 859, 858, 871, 903 - 656, 969, 968, 934, 971, 904, 903, 869, 906 - 657, 923, 922, 937, 936, 858, 857, 872, 871 - 658, 922, 921, 938, 937, 857, 856, 873, 872 - 659, 921, 920, 939, 938, 856, 855, 874, 873 - 660, 920, 919, 940, 939, 855, 854, 875, 874 - 661, 919, 918, 941, 940, 854, 853, 876, 875 - 662, 918, 917, 967, 941, 853, 852, 902, 876 - 663, 944, 943, 915, 914, 879, 878, 850, 849 - 664, 914, 913, 947, 944, 849, 848, 882, 879 - 665, 913, 912, 948, 947, 848, 847, 883, 882 - 666, 951, 931, 930, 945, 886, 866, 865, 880 - 667, 945, 959, 965, 958, 880, 894, 900, 893 - 668, 963, 954, 953, 962, 898, 889, 888, 897 - 669, 912, 911, 949, 948, 847, 846, 884, 883 - 670, 961, 972, 958, 965, 896, 907, 893, 900 - 671, 962, 975, 964, 963, 897, 910, 899, 898 - 672, 951, 950, 932, 931, 886, 885, 867, 866 - 673, 934, 935, 974, 955, 869, 870, 909, 890 - 674, 953, 954, 937, 938, 888, 889, 872, 873 - 675, 974, 935, 954, 963, 909, 870, 889, 898 - 676, 955, 959, 933, 970, 890, 894, 868, 905 - 677, 957, 944, 947, 960, 892, 879, 882, 895 - 678, 960, 947, 948, 961, 895, 882, 883, 896 - 679, 948, 949, 972, 961, 883, 884, 907, 896 - 680, 945, 958, 950, 951, 880, 893, 885, 886 - 681, 959, 955, 974, 965, 894, 890, 909, 900 - 682, 950, 958, 972, 949, 885, 893, 907, 884 - 683, 964, 965, 974, 963, 899, 900, 909, 898 - 684, 960, 961, 965, 964, 895, 896, 900, 899 - 685, 967, 966, 942, 952, 902, 901, 877, 887 - 686, 917, 916, 966, 967, 852, 851, 901, 902 - 687, 968, 969, 925, 924, 903, 904, 860, 859 - 688, 970, 927, 926, 971, 905, 862, 861, 906 - 689, 975, 962, 956, 957, 910, 897, 891, 892 - 690, 992, 1035, 998, 993, 927, 970, 933, 928 - 691, 990, 1034, 1036, 991, 925, 969, 971, 926 - 692, 1000, 999, 1033, 1001, 935, 934, 968, 936 - 693, 1011, 1010, 995, 994, 946, 945, 930, 929 - 694, 1015, 1014, 976, 997, 950, 949, 911, 932 - 695, 1007, 1021, 1038, 1017, 942, 956, 973, 952 - 696, 1017, 1005, 1006, 1032, 952, 940, 941, 967 - 697, 1038, 1018, 1003, 1004, 973, 953, 938, 939 - 698, 1029, 1040, 1022, 1025, 964, 975, 957, 960 - 699, 1038, 1021, 1027, 1018, 973, 956, 962, 953 - 700, 1001, 1002, 1019, 1000, 936, 937, 954, 935 - 701, 998, 1011, 994, 993, 933, 946, 929, 928 - 702, 1004, 1005, 1017, 1038, 939, 940, 952, 973 - 703, 1008, 1021, 1007, 1031, 943, 956, 942, 966 - 704, 1008, 1009, 1022, 1021, 943, 944, 957, 956 - 705, 998, 1024, 1010, 1011, 933, 959, 945, 946 - 706, 999, 1020, 1035, 1036, 934, 955, 970, 971 - 707, 981, 980, 1008, 1031, 916, 915, 943, 966 - 708, 989, 988, 1001, 1033, 924, 923, 936, 968 - 709, 1034, 1033, 999, 1036, 969, 968, 934, 971 - 710, 988, 987, 1002, 1001, 923, 922, 937, 936 - 711, 987, 986, 1003, 1002, 922, 921, 938, 937 - 712, 986, 985, 1004, 1003, 921, 920, 939, 938 - 713, 985, 984, 1005, 1004, 920, 919, 940, 939 - 714, 984, 983, 1006, 1005, 919, 918, 941, 940 - 715, 983, 982, 1032, 1006, 918, 917, 967, 941 - 716, 1009, 1008, 980, 979, 944, 943, 915, 914 - 717, 979, 978, 1012, 1009, 914, 913, 947, 944 - 718, 978, 977, 1013, 1012, 913, 912, 948, 947 - 719, 1016, 996, 995, 1010, 951, 931, 930, 945 - 720, 1010, 1024, 1030, 1023, 945, 959, 965, 958 - 721, 1028, 1019, 1018, 1027, 963, 954, 953, 962 - 722, 977, 976, 1014, 1013, 912, 911, 949, 948 - 723, 1026, 1037, 1023, 1030, 961, 972, 958, 965 - 724, 1027, 1040, 1029, 1028, 962, 975, 964, 963 - 725, 1016, 1015, 997, 996, 951, 950, 932, 931 - 726, 999, 1000, 1039, 1020, 934, 935, 974, 955 - 727, 1018, 1019, 1002, 1003, 953, 954, 937, 938 - 728, 1039, 1000, 1019, 1028, 974, 935, 954, 963 - 729, 1020, 1024, 998, 1035, 955, 959, 933, 970 - 730, 1022, 1009, 1012, 1025, 957, 944, 947, 960 - 731, 1025, 1012, 1013, 1026, 960, 947, 948, 961 - 732, 1013, 1014, 1037, 1026, 948, 949, 972, 961 - 733, 1010, 1023, 1015, 1016, 945, 958, 950, 951 - 734, 1024, 1020, 1039, 1030, 959, 955, 974, 965 - 735, 1015, 1023, 1037, 1014, 950, 958, 972, 949 - 736, 1029, 1030, 1039, 1028, 964, 965, 974, 963 - 737, 1025, 1026, 1030, 1029, 960, 961, 965, 964 - 738, 1032, 1031, 1007, 1017, 967, 966, 942, 952 - 739, 982, 981, 1031, 1032, 917, 916, 966, 967 - 740, 1033, 1034, 990, 989, 968, 969, 925, 924 - 741, 1035, 992, 991, 1036, 970, 927, 926, 971 - 742, 1040, 1027, 1021, 1022, 975, 962, 956, 957 - 743, 1057, 1100, 1063, 1058, 992, 1035, 998, 993 - 744, 1055, 1099, 1101, 1056, 990, 1034, 1036, 991 - 745, 1065, 1064, 1098, 1066, 1000, 999, 1033, 1001 - 746, 1076, 1075, 1060, 1059, 1011, 1010, 995, 994 - 747, 1080, 1079, 1041, 1062, 1015, 1014, 976, 997 - 748, 1072, 1086, 1103, 1082, 1007, 1021, 1038, 1017 - 749, 1082, 1070, 1071, 1097, 1017, 1005, 1006, 1032 - 750, 1103, 1083, 1068, 1069, 1038, 1018, 1003, 1004 - 751, 1094, 1105, 1087, 1090, 1029, 1040, 1022, 1025 - 752, 1103, 1086, 1092, 1083, 1038, 1021, 1027, 1018 - 753, 1066, 1067, 1084, 1065, 1001, 1002, 1019, 1000 - 754, 1063, 1076, 1059, 1058, 998, 1011, 994, 993 - 755, 1069, 1070, 1082, 1103, 1004, 1005, 1017, 1038 - 756, 1073, 1086, 1072, 1096, 1008, 1021, 1007, 1031 - 757, 1073, 1074, 1087, 1086, 1008, 1009, 1022, 1021 - 758, 1063, 1089, 1075, 1076, 998, 1024, 1010, 1011 - 759, 1064, 1085, 1100, 1101, 999, 1020, 1035, 1036 - 760, 1046, 1045, 1073, 1096, 981, 980, 1008, 1031 - 761, 1054, 1053, 1066, 1098, 989, 988, 1001, 1033 - 762, 1099, 1098, 1064, 1101, 1034, 1033, 999, 1036 - 763, 1053, 1052, 1067, 1066, 988, 987, 1002, 1001 - 764, 1052, 1051, 1068, 1067, 987, 986, 1003, 1002 - 765, 1051, 1050, 1069, 1068, 986, 985, 1004, 1003 - 766, 1050, 1049, 1070, 1069, 985, 984, 1005, 1004 - 767, 1049, 1048, 1071, 1070, 984, 983, 1006, 1005 - 768, 1048, 1047, 1097, 1071, 983, 982, 1032, 1006 - 769, 1074, 1073, 1045, 1044, 1009, 1008, 980, 979 - 770, 1044, 1043, 1077, 1074, 979, 978, 1012, 1009 - 771, 1043, 1042, 1078, 1077, 978, 977, 1013, 1012 - 772, 1081, 1061, 1060, 1075, 1016, 996, 995, 1010 - 773, 1075, 1089, 1095, 1088, 1010, 1024, 1030, 1023 - 774, 1093, 1084, 1083, 1092, 1028, 1019, 1018, 1027 - 775, 1042, 1041, 1079, 1078, 977, 976, 1014, 1013 - 776, 1091, 1102, 1088, 1095, 1026, 1037, 1023, 1030 - 777, 1092, 1105, 1094, 1093, 1027, 1040, 1029, 1028 - 778, 1081, 1080, 1062, 1061, 1016, 1015, 997, 996 - 779, 1064, 1065, 1104, 1085, 999, 1000, 1039, 1020 - 780, 1083, 1084, 1067, 1068, 1018, 1019, 1002, 1003 - 781, 1104, 1065, 1084, 1093, 1039, 1000, 1019, 1028 - 782, 1085, 1089, 1063, 1100, 1020, 1024, 998, 1035 - 783, 1087, 1074, 1077, 1090, 1022, 1009, 1012, 1025 - 784, 1090, 1077, 1078, 1091, 1025, 1012, 1013, 1026 - 785, 1078, 1079, 1102, 1091, 1013, 1014, 1037, 1026 - 786, 1075, 1088, 1080, 1081, 1010, 1023, 1015, 1016 - 787, 1089, 1085, 1104, 1095, 1024, 1020, 1039, 1030 - 788, 1080, 1088, 1102, 1079, 1015, 1023, 1037, 1014 - 789, 1094, 1095, 1104, 1093, 1029, 1030, 1039, 1028 - 790, 1090, 1091, 1095, 1094, 1025, 1026, 1030, 1029 - 791, 1097, 1096, 1072, 1082, 1032, 1031, 1007, 1017 - 792, 1047, 1046, 1096, 1097, 982, 981, 1031, 1032 - 793, 1098, 1099, 1055, 1054, 1033, 1034, 990, 989 - 794, 1100, 1057, 1056, 1101, 1035, 992, 991, 1036 - 795, 1105, 1092, 1086, 1087, 1040, 1027, 1021, 1022 - 796, 1122, 1165, 1128, 1123, 1057, 1100, 1063, 1058 - 797, 1120, 1164, 1166, 1121, 1055, 1099, 1101, 1056 - 798, 1130, 1129, 1163, 1131, 1065, 1064, 1098, 1066 - 799, 1141, 1140, 1125, 1124, 1076, 1075, 1060, 1059 - 800, 1145, 1144, 1106, 1127, 1080, 1079, 1041, 1062 - 801, 1137, 1151, 1168, 1147, 1072, 1086, 1103, 1082 - 802, 1147, 1135, 1136, 1162, 1082, 1070, 1071, 1097 - 803, 1168, 1148, 1133, 1134, 1103, 1083, 1068, 1069 - 804, 1159, 1170, 1152, 1155, 1094, 1105, 1087, 1090 - 805, 1168, 1151, 1157, 1148, 1103, 1086, 1092, 1083 - 806, 1131, 1132, 1149, 1130, 1066, 1067, 1084, 1065 - 807, 1128, 1141, 1124, 1123, 1063, 1076, 1059, 1058 - 808, 1134, 1135, 1147, 1168, 1069, 1070, 1082, 1103 - 809, 1138, 1151, 1137, 1161, 1073, 1086, 1072, 1096 - 810, 1138, 1139, 1152, 1151, 1073, 1074, 1087, 1086 - 811, 1128, 1154, 1140, 1141, 1063, 1089, 1075, 1076 - 812, 1129, 1150, 1165, 1166, 1064, 1085, 1100, 1101 - 813, 1111, 1110, 1138, 1161, 1046, 1045, 1073, 1096 - 814, 1119, 1118, 1131, 1163, 1054, 1053, 1066, 1098 - 815, 1164, 1163, 1129, 1166, 1099, 1098, 1064, 1101 - 816, 1118, 1117, 1132, 1131, 1053, 1052, 1067, 1066 - 817, 1117, 1116, 1133, 1132, 1052, 1051, 1068, 1067 - 818, 1116, 1115, 1134, 1133, 1051, 1050, 1069, 1068 - 819, 1115, 1114, 1135, 1134, 1050, 1049, 1070, 1069 - 820, 1114, 1113, 1136, 1135, 1049, 1048, 1071, 1070 - 821, 1113, 1112, 1162, 1136, 1048, 1047, 1097, 1071 - 822, 1139, 1138, 1110, 1109, 1074, 1073, 1045, 1044 - 823, 1109, 1108, 1142, 1139, 1044, 1043, 1077, 1074 - 824, 1108, 1107, 1143, 1142, 1043, 1042, 1078, 1077 - 825, 1146, 1126, 1125, 1140, 1081, 1061, 1060, 1075 - 826, 1140, 1154, 1160, 1153, 1075, 1089, 1095, 1088 - 827, 1158, 1149, 1148, 1157, 1093, 1084, 1083, 1092 - 828, 1107, 1106, 1144, 1143, 1042, 1041, 1079, 1078 - 829, 1156, 1167, 1153, 1160, 1091, 1102, 1088, 1095 - 830, 1157, 1170, 1159, 1158, 1092, 1105, 1094, 1093 - 831, 1146, 1145, 1127, 1126, 1081, 1080, 1062, 1061 - 832, 1129, 1130, 1169, 1150, 1064, 1065, 1104, 1085 - 833, 1148, 1149, 1132, 1133, 1083, 1084, 1067, 1068 - 834, 1169, 1130, 1149, 1158, 1104, 1065, 1084, 1093 - 835, 1150, 1154, 1128, 1165, 1085, 1089, 1063, 1100 - 836, 1152, 1139, 1142, 1155, 1087, 1074, 1077, 1090 - 837, 1155, 1142, 1143, 1156, 1090, 1077, 1078, 1091 - 838, 1143, 1144, 1167, 1156, 1078, 1079, 1102, 1091 - 839, 1140, 1153, 1145, 1146, 1075, 1088, 1080, 1081 - 840, 1154, 1150, 1169, 1160, 1089, 1085, 1104, 1095 - 841, 1145, 1153, 1167, 1144, 1080, 1088, 1102, 1079 - 842, 1159, 1160, 1169, 1158, 1094, 1095, 1104, 1093 - 843, 1155, 1156, 1160, 1159, 1090, 1091, 1095, 1094 - 844, 1162, 1161, 1137, 1147, 1097, 1096, 1072, 1082 - 845, 1112, 1111, 1161, 1162, 1047, 1046, 1096, 1097 - 846, 1163, 1164, 1120, 1119, 1098, 1099, 1055, 1054 - 847, 1165, 1122, 1121, 1166, 1100, 1057, 1056, 1101 - 848, 1170, 1157, 1151, 1152, 1105, 1092, 1086, 1087 - 849, 1187, 1230, 1193, 1188, 1122, 1165, 1128, 1123 - 850, 1185, 1229, 1231, 1186, 1120, 1164, 1166, 1121 - 851, 1195, 1194, 1228, 1196, 1130, 1129, 1163, 1131 - 852, 1206, 1205, 1190, 1189, 1141, 1140, 1125, 1124 - 853, 1210, 1209, 1171, 1192, 1145, 1144, 1106, 1127 - 854, 1202, 1216, 1233, 1212, 1137, 1151, 1168, 1147 - 855, 1212, 1200, 1201, 1227, 1147, 1135, 1136, 1162 - 856, 1233, 1213, 1198, 1199, 1168, 1148, 1133, 1134 - 857, 1224, 1235, 1217, 1220, 1159, 1170, 1152, 1155 - 858, 1233, 1216, 1222, 1213, 1168, 1151, 1157, 1148 - 859, 1196, 1197, 1214, 1195, 1131, 1132, 1149, 1130 - 860, 1193, 1206, 1189, 1188, 1128, 1141, 1124, 1123 - 861, 1199, 1200, 1212, 1233, 1134, 1135, 1147, 1168 - 862, 1203, 1216, 1202, 1226, 1138, 1151, 1137, 1161 - 863, 1203, 1204, 1217, 1216, 1138, 1139, 1152, 1151 - 864, 1193, 1219, 1205, 1206, 1128, 1154, 1140, 1141 - 865, 1194, 1215, 1230, 1231, 1129, 1150, 1165, 1166 - 866, 1176, 1175, 1203, 1226, 1111, 1110, 1138, 1161 - 867, 1184, 1183, 1196, 1228, 1119, 1118, 1131, 1163 - 868, 1229, 1228, 1194, 1231, 1164, 1163, 1129, 1166 - 869, 1183, 1182, 1197, 1196, 1118, 1117, 1132, 1131 - 870, 1182, 1181, 1198, 1197, 1117, 1116, 1133, 1132 - 871, 1181, 1180, 1199, 1198, 1116, 1115, 1134, 1133 - 872, 1180, 1179, 1200, 1199, 1115, 1114, 1135, 1134 - 873, 1179, 1178, 1201, 1200, 1114, 1113, 1136, 1135 - 874, 1178, 1177, 1227, 1201, 1113, 1112, 1162, 1136 - 875, 1204, 1203, 1175, 1174, 1139, 1138, 1110, 1109 - 876, 1174, 1173, 1207, 1204, 1109, 1108, 1142, 1139 - 877, 1173, 1172, 1208, 1207, 1108, 1107, 1143, 1142 - 878, 1211, 1191, 1190, 1205, 1146, 1126, 1125, 1140 - 879, 1205, 1219, 1225, 1218, 1140, 1154, 1160, 1153 - 880, 1223, 1214, 1213, 1222, 1158, 1149, 1148, 1157 - 881, 1172, 1171, 1209, 1208, 1107, 1106, 1144, 1143 - 882, 1221, 1232, 1218, 1225, 1156, 1167, 1153, 1160 - 883, 1222, 1235, 1224, 1223, 1157, 1170, 1159, 1158 - 884, 1211, 1210, 1192, 1191, 1146, 1145, 1127, 1126 - 885, 1194, 1195, 1234, 1215, 1129, 1130, 1169, 1150 - 886, 1213, 1214, 1197, 1198, 1148, 1149, 1132, 1133 - 887, 1234, 1195, 1214, 1223, 1169, 1130, 1149, 1158 - 888, 1215, 1219, 1193, 1230, 1150, 1154, 1128, 1165 - 889, 1217, 1204, 1207, 1220, 1152, 1139, 1142, 1155 - 890, 1220, 1207, 1208, 1221, 1155, 1142, 1143, 1156 - 891, 1208, 1209, 1232, 1221, 1143, 1144, 1167, 1156 - 892, 1205, 1218, 1210, 1211, 1140, 1153, 1145, 1146 - 893, 1219, 1215, 1234, 1225, 1154, 1150, 1169, 1160 - 894, 1210, 1218, 1232, 1209, 1145, 1153, 1167, 1144 - 895, 1224, 1225, 1234, 1223, 1159, 1160, 1169, 1158 - 896, 1220, 1221, 1225, 1224, 1155, 1156, 1160, 1159 - 897, 1227, 1226, 1202, 1212, 1162, 1161, 1137, 1147 - 898, 1177, 1176, 1226, 1227, 1112, 1111, 1161, 1162 - 899, 1228, 1229, 1185, 1184, 1163, 1164, 1120, 1119 - 900, 1230, 1187, 1186, 1231, 1165, 1122, 1121, 1166 - 901, 1235, 1222, 1216, 1217, 1170, 1157, 1151, 1152 - 902, 1252, 1295, 1258, 1253, 1187, 1230, 1193, 1188 - 903, 1250, 1294, 1296, 1251, 1185, 1229, 1231, 1186 - 904, 1260, 1259, 1293, 1261, 1195, 1194, 1228, 1196 - 905, 1271, 1270, 1255, 1254, 1206, 1205, 1190, 1189 - 906, 1275, 1274, 1236, 1257, 1210, 1209, 1171, 1192 - 907, 1267, 1281, 1298, 1277, 1202, 1216, 1233, 1212 - 908, 1277, 1265, 1266, 1292, 1212, 1200, 1201, 1227 - 909, 1298, 1278, 1263, 1264, 1233, 1213, 1198, 1199 - 910, 1289, 1300, 1282, 1285, 1224, 1235, 1217, 1220 - 911, 1298, 1281, 1287, 1278, 1233, 1216, 1222, 1213 - 912, 1261, 1262, 1279, 1260, 1196, 1197, 1214, 1195 - 913, 1258, 1271, 1254, 1253, 1193, 1206, 1189, 1188 - 914, 1264, 1265, 1277, 1298, 1199, 1200, 1212, 1233 - 915, 1268, 1281, 1267, 1291, 1203, 1216, 1202, 1226 - 916, 1268, 1269, 1282, 1281, 1203, 1204, 1217, 1216 - 917, 1258, 1284, 1270, 1271, 1193, 1219, 1205, 1206 - 918, 1259, 1280, 1295, 1296, 1194, 1215, 1230, 1231 - 919, 1241, 1240, 1268, 1291, 1176, 1175, 1203, 1226 - 920, 1249, 1248, 1261, 1293, 1184, 1183, 1196, 1228 - 921, 1294, 1293, 1259, 1296, 1229, 1228, 1194, 1231 - 922, 1248, 1247, 1262, 1261, 1183, 1182, 1197, 1196 - 923, 1247, 1246, 1263, 1262, 1182, 1181, 1198, 1197 - 924, 1246, 1245, 1264, 1263, 1181, 1180, 1199, 1198 - 925, 1245, 1244, 1265, 1264, 1180, 1179, 1200, 1199 - 926, 1244, 1243, 1266, 1265, 1179, 1178, 1201, 1200 - 927, 1243, 1242, 1292, 1266, 1178, 1177, 1227, 1201 - 928, 1269, 1268, 1240, 1239, 1204, 1203, 1175, 1174 - 929, 1239, 1238, 1272, 1269, 1174, 1173, 1207, 1204 - 930, 1238, 1237, 1273, 1272, 1173, 1172, 1208, 1207 - 931, 1276, 1256, 1255, 1270, 1211, 1191, 1190, 1205 - 932, 1270, 1284, 1290, 1283, 1205, 1219, 1225, 1218 - 933, 1288, 1279, 1278, 1287, 1223, 1214, 1213, 1222 - 934, 1237, 1236, 1274, 1273, 1172, 1171, 1209, 1208 - 935, 1286, 1297, 1283, 1290, 1221, 1232, 1218, 1225 - 936, 1287, 1300, 1289, 1288, 1222, 1235, 1224, 1223 - 937, 1276, 1275, 1257, 1256, 1211, 1210, 1192, 1191 - 938, 1259, 1260, 1299, 1280, 1194, 1195, 1234, 1215 - 939, 1278, 1279, 1262, 1263, 1213, 1214, 1197, 1198 - 940, 1299, 1260, 1279, 1288, 1234, 1195, 1214, 1223 - 941, 1280, 1284, 1258, 1295, 1215, 1219, 1193, 1230 - 942, 1282, 1269, 1272, 1285, 1217, 1204, 1207, 1220 - 943, 1285, 1272, 1273, 1286, 1220, 1207, 1208, 1221 - 944, 1273, 1274, 1297, 1286, 1208, 1209, 1232, 1221 - 945, 1270, 1283, 1275, 1276, 1205, 1218, 1210, 1211 - 946, 1284, 1280, 1299, 1290, 1219, 1215, 1234, 1225 - 947, 1275, 1283, 1297, 1274, 1210, 1218, 1232, 1209 - 948, 1289, 1290, 1299, 1288, 1224, 1225, 1234, 1223 - 949, 1285, 1286, 1290, 1289, 1220, 1221, 1225, 1224 - 950, 1292, 1291, 1267, 1277, 1227, 1226, 1202, 1212 - 951, 1242, 1241, 1291, 1292, 1177, 1176, 1226, 1227 - 952, 1293, 1294, 1250, 1249, 1228, 1229, 1185, 1184 - 953, 1295, 1252, 1251, 1296, 1230, 1187, 1186, 1231 - 954, 1300, 1287, 1281, 1282, 1235, 1222, 1216, 1217 - 955, 1317, 1360, 1323, 1318, 1252, 1295, 1258, 1253 - 956, 1315, 1359, 1361, 1316, 1250, 1294, 1296, 1251 - 957, 1325, 1324, 1358, 1326, 1260, 1259, 1293, 1261 - 958, 1336, 1335, 1320, 1319, 1271, 1270, 1255, 1254 - 959, 1340, 1339, 1301, 1322, 1275, 1274, 1236, 1257 - 960, 1332, 1346, 1363, 1342, 1267, 1281, 1298, 1277 - 961, 1342, 1330, 1331, 1357, 1277, 1265, 1266, 1292 - 962, 1363, 1343, 1328, 1329, 1298, 1278, 1263, 1264 - 963, 1354, 1365, 1347, 1350, 1289, 1300, 1282, 1285 - 964, 1363, 1346, 1352, 1343, 1298, 1281, 1287, 1278 - 965, 1326, 1327, 1344, 1325, 1261, 1262, 1279, 1260 - 966, 1323, 1336, 1319, 1318, 1258, 1271, 1254, 1253 - 967, 1329, 1330, 1342, 1363, 1264, 1265, 1277, 1298 - 968, 1333, 1346, 1332, 1356, 1268, 1281, 1267, 1291 - 969, 1333, 1334, 1347, 1346, 1268, 1269, 1282, 1281 - 970, 1323, 1349, 1335, 1336, 1258, 1284, 1270, 1271 - 971, 1324, 1345, 1360, 1361, 1259, 1280, 1295, 1296 - 972, 1306, 1305, 1333, 1356, 1241, 1240, 1268, 1291 - 973, 1314, 1313, 1326, 1358, 1249, 1248, 1261, 1293 - 974, 1359, 1358, 1324, 1361, 1294, 1293, 1259, 1296 - 975, 1313, 1312, 1327, 1326, 1248, 1247, 1262, 1261 - 976, 1312, 1311, 1328, 1327, 1247, 1246, 1263, 1262 - 977, 1311, 1310, 1329, 1328, 1246, 1245, 1264, 1263 - 978, 1310, 1309, 1330, 1329, 1245, 1244, 1265, 1264 - 979, 1309, 1308, 1331, 1330, 1244, 1243, 1266, 1265 - 980, 1308, 1307, 1357, 1331, 1243, 1242, 1292, 1266 - 981, 1334, 1333, 1305, 1304, 1269, 1268, 1240, 1239 - 982, 1304, 1303, 1337, 1334, 1239, 1238, 1272, 1269 - 983, 1303, 1302, 1338, 1337, 1238, 1237, 1273, 1272 - 984, 1341, 1321, 1320, 1335, 1276, 1256, 1255, 1270 - 985, 1335, 1349, 1355, 1348, 1270, 1284, 1290, 1283 - 986, 1353, 1344, 1343, 1352, 1288, 1279, 1278, 1287 - 987, 1302, 1301, 1339, 1338, 1237, 1236, 1274, 1273 - 988, 1351, 1362, 1348, 1355, 1286, 1297, 1283, 1290 - 989, 1352, 1365, 1354, 1353, 1287, 1300, 1289, 1288 - 990, 1341, 1340, 1322, 1321, 1276, 1275, 1257, 1256 - 991, 1324, 1325, 1364, 1345, 1259, 1260, 1299, 1280 - 992, 1343, 1344, 1327, 1328, 1278, 1279, 1262, 1263 - 993, 1364, 1325, 1344, 1353, 1299, 1260, 1279, 1288 - 994, 1345, 1349, 1323, 1360, 1280, 1284, 1258, 1295 - 995, 1347, 1334, 1337, 1350, 1282, 1269, 1272, 1285 - 996, 1350, 1337, 1338, 1351, 1285, 1272, 1273, 1286 - 997, 1338, 1339, 1362, 1351, 1273, 1274, 1297, 1286 - 998, 1335, 1348, 1340, 1341, 1270, 1283, 1275, 1276 - 999, 1349, 1345, 1364, 1355, 1284, 1280, 1299, 1290 -1000, 1340, 1348, 1362, 1339, 1275, 1283, 1297, 1274 -1001, 1354, 1355, 1364, 1353, 1289, 1290, 1299, 1288 -1002, 1350, 1351, 1355, 1354, 1285, 1286, 1290, 1289 -1003, 1357, 1356, 1332, 1342, 1292, 1291, 1267, 1277 -1004, 1307, 1306, 1356, 1357, 1242, 1241, 1291, 1292 -1005, 1358, 1359, 1315, 1314, 1293, 1294, 1250, 1249 -1006, 1360, 1317, 1316, 1361, 1295, 1252, 1251, 1296 -1007, 1365, 1352, 1346, 1347, 1300, 1287, 1281, 1282 -1008, 1382, 1425, 1388, 1383, 1317, 1360, 1323, 1318 -1009, 1380, 1424, 1426, 1381, 1315, 1359, 1361, 1316 -1010, 1390, 1389, 1423, 1391, 1325, 1324, 1358, 1326 -1011, 1401, 1400, 1385, 1384, 1336, 1335, 1320, 1319 -1012, 1405, 1404, 1366, 1387, 1340, 1339, 1301, 1322 -1013, 1397, 1411, 1428, 1407, 1332, 1346, 1363, 1342 -1014, 1407, 1395, 1396, 1422, 1342, 1330, 1331, 1357 -1015, 1428, 1408, 1393, 1394, 1363, 1343, 1328, 1329 -1016, 1419, 1430, 1412, 1415, 1354, 1365, 1347, 1350 -1017, 1428, 1411, 1417, 1408, 1363, 1346, 1352, 1343 -1018, 1391, 1392, 1409, 1390, 1326, 1327, 1344, 1325 -1019, 1388, 1401, 1384, 1383, 1323, 1336, 1319, 1318 -1020, 1394, 1395, 1407, 1428, 1329, 1330, 1342, 1363 -1021, 1398, 1411, 1397, 1421, 1333, 1346, 1332, 1356 -1022, 1398, 1399, 1412, 1411, 1333, 1334, 1347, 1346 -1023, 1388, 1414, 1400, 1401, 1323, 1349, 1335, 1336 -1024, 1389, 1410, 1425, 1426, 1324, 1345, 1360, 1361 -1025, 1371, 1370, 1398, 1421, 1306, 1305, 1333, 1356 -1026, 1379, 1378, 1391, 1423, 1314, 1313, 1326, 1358 -1027, 1424, 1423, 1389, 1426, 1359, 1358, 1324, 1361 -1028, 1378, 1377, 1392, 1391, 1313, 1312, 1327, 1326 -1029, 1377, 1376, 1393, 1392, 1312, 1311, 1328, 1327 -1030, 1376, 1375, 1394, 1393, 1311, 1310, 1329, 1328 -1031, 1375, 1374, 1395, 1394, 1310, 1309, 1330, 1329 -1032, 1374, 1373, 1396, 1395, 1309, 1308, 1331, 1330 -1033, 1373, 1372, 1422, 1396, 1308, 1307, 1357, 1331 -1034, 1399, 1398, 1370, 1369, 1334, 1333, 1305, 1304 -1035, 1369, 1368, 1402, 1399, 1304, 1303, 1337, 1334 -1036, 1368, 1367, 1403, 1402, 1303, 1302, 1338, 1337 -1037, 1406, 1386, 1385, 1400, 1341, 1321, 1320, 1335 -1038, 1400, 1414, 1420, 1413, 1335, 1349, 1355, 1348 -1039, 1418, 1409, 1408, 1417, 1353, 1344, 1343, 1352 -1040, 1367, 1366, 1404, 1403, 1302, 1301, 1339, 1338 -1041, 1416, 1427, 1413, 1420, 1351, 1362, 1348, 1355 -1042, 1417, 1430, 1419, 1418, 1352, 1365, 1354, 1353 -1043, 1406, 1405, 1387, 1386, 1341, 1340, 1322, 1321 -1044, 1389, 1390, 1429, 1410, 1324, 1325, 1364, 1345 -1045, 1408, 1409, 1392, 1393, 1343, 1344, 1327, 1328 -1046, 1429, 1390, 1409, 1418, 1364, 1325, 1344, 1353 -1047, 1410, 1414, 1388, 1425, 1345, 1349, 1323, 1360 -1048, 1412, 1399, 1402, 1415, 1347, 1334, 1337, 1350 -1049, 1415, 1402, 1403, 1416, 1350, 1337, 1338, 1351 -1050, 1403, 1404, 1427, 1416, 1338, 1339, 1362, 1351 -1051, 1400, 1413, 1405, 1406, 1335, 1348, 1340, 1341 -1052, 1414, 1410, 1429, 1420, 1349, 1345, 1364, 1355 -1053, 1405, 1413, 1427, 1404, 1340, 1348, 1362, 1339 -1054, 1419, 1420, 1429, 1418, 1354, 1355, 1364, 1353 -1055, 1415, 1416, 1420, 1419, 1350, 1351, 1355, 1354 -1056, 1422, 1421, 1397, 1407, 1357, 1356, 1332, 1342 -1057, 1372, 1371, 1421, 1422, 1307, 1306, 1356, 1357 -1058, 1423, 1424, 1380, 1379, 1358, 1359, 1315, 1314 -1059, 1425, 1382, 1381, 1426, 1360, 1317, 1316, 1361 -1060, 1430, 1417, 1411, 1412, 1365, 1352, 1346, 1347 -1061, 1447, 1490, 1453, 1448, 1382, 1425, 1388, 1383 -1062, 1445, 1489, 1491, 1446, 1380, 1424, 1426, 1381 -1063, 1455, 1454, 1488, 1456, 1390, 1389, 1423, 1391 -1064, 1466, 1465, 1450, 1449, 1401, 1400, 1385, 1384 -1065, 1470, 1469, 1431, 1452, 1405, 1404, 1366, 1387 -1066, 1462, 1476, 1493, 1472, 1397, 1411, 1428, 1407 -1067, 1472, 1460, 1461, 1487, 1407, 1395, 1396, 1422 -1068, 1493, 1473, 1458, 1459, 1428, 1408, 1393, 1394 -1069, 1484, 1495, 1477, 1480, 1419, 1430, 1412, 1415 -1070, 1493, 1476, 1482, 1473, 1428, 1411, 1417, 1408 -1071, 1456, 1457, 1474, 1455, 1391, 1392, 1409, 1390 -1072, 1453, 1466, 1449, 1448, 1388, 1401, 1384, 1383 -1073, 1459, 1460, 1472, 1493, 1394, 1395, 1407, 1428 -1074, 1463, 1476, 1462, 1486, 1398, 1411, 1397, 1421 -1075, 1463, 1464, 1477, 1476, 1398, 1399, 1412, 1411 -1076, 1453, 1479, 1465, 1466, 1388, 1414, 1400, 1401 -1077, 1454, 1475, 1490, 1491, 1389, 1410, 1425, 1426 -1078, 1436, 1435, 1463, 1486, 1371, 1370, 1398, 1421 -1079, 1444, 1443, 1456, 1488, 1379, 1378, 1391, 1423 -1080, 1489, 1488, 1454, 1491, 1424, 1423, 1389, 1426 -1081, 1443, 1442, 1457, 1456, 1378, 1377, 1392, 1391 -1082, 1442, 1441, 1458, 1457, 1377, 1376, 1393, 1392 -1083, 1441, 1440, 1459, 1458, 1376, 1375, 1394, 1393 -1084, 1440, 1439, 1460, 1459, 1375, 1374, 1395, 1394 -1085, 1439, 1438, 1461, 1460, 1374, 1373, 1396, 1395 -1086, 1438, 1437, 1487, 1461, 1373, 1372, 1422, 1396 -1087, 1464, 1463, 1435, 1434, 1399, 1398, 1370, 1369 -1088, 1434, 1433, 1467, 1464, 1369, 1368, 1402, 1399 -1089, 1433, 1432, 1468, 1467, 1368, 1367, 1403, 1402 -1090, 1471, 1451, 1450, 1465, 1406, 1386, 1385, 1400 -1091, 1465, 1479, 1485, 1478, 1400, 1414, 1420, 1413 -1092, 1483, 1474, 1473, 1482, 1418, 1409, 1408, 1417 -1093, 1432, 1431, 1469, 1468, 1367, 1366, 1404, 1403 -1094, 1481, 1492, 1478, 1485, 1416, 1427, 1413, 1420 -1095, 1482, 1495, 1484, 1483, 1417, 1430, 1419, 1418 -1096, 1471, 1470, 1452, 1451, 1406, 1405, 1387, 1386 -1097, 1454, 1455, 1494, 1475, 1389, 1390, 1429, 1410 -1098, 1473, 1474, 1457, 1458, 1408, 1409, 1392, 1393 -1099, 1494, 1455, 1474, 1483, 1429, 1390, 1409, 1418 -1100, 1475, 1479, 1453, 1490, 1410, 1414, 1388, 1425 -1101, 1477, 1464, 1467, 1480, 1412, 1399, 1402, 1415 -1102, 1480, 1467, 1468, 1481, 1415, 1402, 1403, 1416 -1103, 1468, 1469, 1492, 1481, 1403, 1404, 1427, 1416 -1104, 1465, 1478, 1470, 1471, 1400, 1413, 1405, 1406 -1105, 1479, 1475, 1494, 1485, 1414, 1410, 1429, 1420 -1106, 1470, 1478, 1492, 1469, 1405, 1413, 1427, 1404 -1107, 1484, 1485, 1494, 1483, 1419, 1420, 1429, 1418 -1108, 1480, 1481, 1485, 1484, 1415, 1416, 1420, 1419 -1109, 1487, 1486, 1462, 1472, 1422, 1421, 1397, 1407 -1110, 1437, 1436, 1486, 1487, 1372, 1371, 1421, 1422 -1111, 1488, 1489, 1445, 1444, 1423, 1424, 1380, 1379 -1112, 1490, 1447, 1446, 1491, 1425, 1382, 1381, 1426 -1113, 1495, 1482, 1476, 1477, 1430, 1417, 1411, 1412 -1114, 1512, 1555, 1518, 1513, 1447, 1490, 1453, 1448 -1115, 1510, 1554, 1556, 1511, 1445, 1489, 1491, 1446 -1116, 1520, 1519, 1553, 1521, 1455, 1454, 1488, 1456 -1117, 1531, 1530, 1515, 1514, 1466, 1465, 1450, 1449 -1118, 1535, 1534, 1496, 1517, 1470, 1469, 1431, 1452 -1119, 1527, 1541, 1558, 1537, 1462, 1476, 1493, 1472 -1120, 1537, 1525, 1526, 1552, 1472, 1460, 1461, 1487 -1121, 1558, 1538, 1523, 1524, 1493, 1473, 1458, 1459 -1122, 1549, 1560, 1542, 1545, 1484, 1495, 1477, 1480 -1123, 1558, 1541, 1547, 1538, 1493, 1476, 1482, 1473 -1124, 1521, 1522, 1539, 1520, 1456, 1457, 1474, 1455 -1125, 1518, 1531, 1514, 1513, 1453, 1466, 1449, 1448 -1126, 1524, 1525, 1537, 1558, 1459, 1460, 1472, 1493 -1127, 1528, 1541, 1527, 1551, 1463, 1476, 1462, 1486 -1128, 1528, 1529, 1542, 1541, 1463, 1464, 1477, 1476 -1129, 1518, 1544, 1530, 1531, 1453, 1479, 1465, 1466 -1130, 1519, 1540, 1555, 1556, 1454, 1475, 1490, 1491 -1131, 1501, 1500, 1528, 1551, 1436, 1435, 1463, 1486 -1132, 1509, 1508, 1521, 1553, 1444, 1443, 1456, 1488 -1133, 1554, 1553, 1519, 1556, 1489, 1488, 1454, 1491 -1134, 1508, 1507, 1522, 1521, 1443, 1442, 1457, 1456 -1135, 1507, 1506, 1523, 1522, 1442, 1441, 1458, 1457 -1136, 1506, 1505, 1524, 1523, 1441, 1440, 1459, 1458 -1137, 1505, 1504, 1525, 1524, 1440, 1439, 1460, 1459 -1138, 1504, 1503, 1526, 1525, 1439, 1438, 1461, 1460 -1139, 1503, 1502, 1552, 1526, 1438, 1437, 1487, 1461 -1140, 1529, 1528, 1500, 1499, 1464, 1463, 1435, 1434 -1141, 1499, 1498, 1532, 1529, 1434, 1433, 1467, 1464 -1142, 1498, 1497, 1533, 1532, 1433, 1432, 1468, 1467 -1143, 1536, 1516, 1515, 1530, 1471, 1451, 1450, 1465 -1144, 1530, 1544, 1550, 1543, 1465, 1479, 1485, 1478 -1145, 1548, 1539, 1538, 1547, 1483, 1474, 1473, 1482 -1146, 1497, 1496, 1534, 1533, 1432, 1431, 1469, 1468 -1147, 1546, 1557, 1543, 1550, 1481, 1492, 1478, 1485 -1148, 1547, 1560, 1549, 1548, 1482, 1495, 1484, 1483 -1149, 1536, 1535, 1517, 1516, 1471, 1470, 1452, 1451 -1150, 1519, 1520, 1559, 1540, 1454, 1455, 1494, 1475 -1151, 1538, 1539, 1522, 1523, 1473, 1474, 1457, 1458 -1152, 1559, 1520, 1539, 1548, 1494, 1455, 1474, 1483 -1153, 1540, 1544, 1518, 1555, 1475, 1479, 1453, 1490 -1154, 1542, 1529, 1532, 1545, 1477, 1464, 1467, 1480 -1155, 1545, 1532, 1533, 1546, 1480, 1467, 1468, 1481 -1156, 1533, 1534, 1557, 1546, 1468, 1469, 1492, 1481 -1157, 1530, 1543, 1535, 1536, 1465, 1478, 1470, 1471 -1158, 1544, 1540, 1559, 1550, 1479, 1475, 1494, 1485 -1159, 1535, 1543, 1557, 1534, 1470, 1478, 1492, 1469 -1160, 1549, 1550, 1559, 1548, 1484, 1485, 1494, 1483 -1161, 1545, 1546, 1550, 1549, 1480, 1481, 1485, 1484 -1162, 1552, 1551, 1527, 1537, 1487, 1486, 1462, 1472 -1163, 1502, 1501, 1551, 1552, 1437, 1436, 1486, 1487 -1164, 1553, 1554, 1510, 1509, 1488, 1489, 1445, 1444 -1165, 1555, 1512, 1511, 1556, 1490, 1447, 1446, 1491 -1166, 1560, 1547, 1541, 1542, 1495, 1482, 1476, 1477 -*Nset, nset=Part-px__PickedSet4, generate - 781, 1560, 1 -*Elset, elset=Part-px__PickedSet4, generate - 584, 1166, 1 -** Section: Section-px -*Solid Section, elset=Part-px__PickedSet4, material=Material-px -, -*System -*Nset, nset=_PickedSet12, generate - 716, 780, 1 -*Nset, nset=_PickedSet12, generate -1496, 1560, 1 -*Elset, elset=_PickedSet12, generate - 531, 583, 1 -*Elset, elset=_PickedSet12, generate -1114, 1166, 1 -*Nset, nset=_PickedSet13, generate - 1, 65, 1 -*Nset, nset=_PickedSet13, generate -781, 845, 1 -*Elset, elset=_PickedSet13, generate - 1, 53, 1 -*Elset, elset=_PickedSet13, generate -584, 636, 1 -** -** MATERIALS -** -*Material, name=Material-px -*Depvar - 49, -*User Material, constants=2, unsymm -2.,2. -*Material, name=Material-sx -*Depvar - 49, -*User Material, constants=2, unsymm -1.,1. -** -** BOUNDARY CONDITIONS -** -** Name: unten Type: Displacement/Rotation -*Boundary -_PickedSet13, 1, 1 -_PickedSet13, 2, 2 -_PickedSet13, 3, 3 -_PickedSet13, 4, 4 -_PickedSet13, 5, 5 -_PickedSet13, 6, 6 -** ---------------------------------------------------------------- -** -** STEP: Step-1 -** -*Step, name=Step-1, nlgeom=YES, inc=10000 -drücken -*Static -0.01, 7., 0.0001, 1. -** -** BOUNDARY CONDITIONS -** -** Name: oben Type: Displacement/Rotation -*Boundary -_PickedSet12, 1, 1 -_PickedSet12, 2, 2 -_PickedSet12, 3, 3, -7.5 -_PickedSet12, 4, 4 -_PickedSet12, 5, 5 -_PickedSet12, 6, 6 -** -** OUTPUT REQUESTS -** -*Restart, write, frequency=0 -** -** FIELD OUTPUT: F-Output-1 -** -*Output, field, variable=PRESELECT -** -** HISTORY OUTPUT: H-Output-1 -** -*Output, history, variable=PRESELECT -*End Step diff --git a/examples/AbaqusStandard/SX_PX_compression.cae b/examples/AbaqusStandard/SX_PX_compression.cae deleted file mode 100644 index fed4472b3..000000000 Binary files a/examples/AbaqusStandard/SX_PX_compression.cae and /dev/null differ diff --git a/examples/AbaqusStandard/SX_PX_compression.jnl b/examples/AbaqusStandard/SX_PX_compression.jnl deleted file mode 100644 index 4e33e1fc7..000000000 --- a/examples/AbaqusStandard/SX_PX_compression.jnl +++ /dev/null @@ -1,23 +0,0 @@ -# Save by m.diehl on 2017_12_06-18.38.26; build 2017 2016_09_27-23.54.59 126836 -from abaqus import * -upgradeMdb( - '/nethome/storage/raid4/m.diehl/DAMASK/examples/AbaqusStandard/SX_PX_compression-6.9-1.cae' - , - '/nethome/storage/raid4/m.diehl/DAMASK/examples/AbaqusStandard/SX_PX_compression.cae') -# Save by m.diehl on 2017_12_06-18.38.26; build 2017 2016_09_27-23.54.59 126836 -from part import * -from material import * -from section import * -from assembly import * -from step import * -from interaction import * -from load import * -from mesh import * -from optimization import * -from job import * -from sketch import * -from visualization import * -from connectorBehavior import * -mdb.jobs['Job_sx-px'].setValues(description='compression', userSubroutine= - '$HOME/DAMASK/src/DAMASK_abaqus_std.f') -# Save by m.diehl on 2017_12_06-18.39.44; build 2017 2016_09_27-23.54.59 126836 diff --git a/examples/AbaqusStandard/material.config b/examples/AbaqusStandard/material.config deleted file mode 100644 index 52968f72a..000000000 --- a/examples/AbaqusStandard/material.config +++ /dev/null @@ -1,93 +0,0 @@ -#-------------------# - -#-------------------# - -[dummy] -mech none - -[poly] -mech isostrain -Nconstituents 10 - - - -#-------------------# - -#-------------------# - - -[Aluminum_001] -crystallite 1 -(constituent) phase 1 texture 1 fraction 1.0 - -[Aluminum_10] -crystallite 1 -(constituent) phase 1 texture 2 fraction 1.0 - -#-------------------# - -#-------------------# - -[orientation] -(output) eulerangles -(output) grainrotation # deviation from initial orientation as axis (1-3) and angle in degree (4) - -#-------------------# - -#-------------------# - - -[Aluminum_phenopowerlaw] -# slip only -elasticity hooke -plasticity phenopowerlaw - -(output) resistance_slip -(output) shearrate_slip -(output) resolvedstress_slip -(output) totalshear -(output) resistance_twin -(output) shearrate_twin -(output) resolvedstress_twin -(output) totalvolfrac - -lattice_structure fcc -Nslip 12 -Ntwin 0 - -c11 106.75e9 -c12 60.41e9 -c44 28.34e9 - -gdot0_slip 0.001 -n_slip 20 -tau0_slip 31e6 # per family -tausat_slip 63e6 # per family -a_slip 2.25 -gdot0_twin 0.001 -n_twin 20 -tau0_twin 31e6 # per family -s_pr 0 # push-up factor for slip saturation due to twinning -twin_b 0 -twin_c 0 -twin_d 0 -twin_e 0 -h0_slipslip 75e6 -h0_sliptwin 0 -h0_twinslip 0 -h0_twintwin 0 -interaction_slipslip 1 1 1.4 1.4 1.4 1.4 -interaction_sliptwin 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -interaction_twinslip 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -interaction_twintwin 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -atol_resistance 1 - - -#-------------------# - -#-------------------# - -[001] -(gauss) phi1 0.000 Phi 45.000 phi2 0.000 scatter 0.000 fraction 1.000 - -[random] diff --git a/examples/AbaqusStandard/numerics.config b/examples/AbaqusStandard/numerics.config deleted file mode 100644 index 47091bf7f..000000000 --- a/examples/AbaqusStandard/numerics.config +++ /dev/null @@ -1 +0,0 @@ -fixed_seed 1697667030 diff --git a/lib/damask/orientation.py b/lib/damask/orientation.py index d0e549b4b..c1862e13c 100644 --- a/lib/damask/orientation.py +++ b/lib/damask/orientation.py @@ -33,7 +33,7 @@ class Quaternion: All methods and naming conventions based on Rowenhorst_etal2015 Convention 1: coordinate frames are right-handed Convention 2: a rotation angle ω is taken to be positive for a counterclockwise rotation - when viewing from the end point of the rotation axis unit vector towards the origin + when viewing from the end point of the rotation axis towards the origin Convention 3: rotations will be interpreted in the passive sense Convention 4: Euler angle triplets are implemented using the Bunge convention, with the angular ranges as [0, 2π],[0, π],[0, 2π] @@ -48,206 +48,138 @@ class Quaternion: """ def __init__(self, - quatArray = [1.0,0.0,0.0,0.0]): - """Initializes to identity if not given""" - self.w, \ - self.x, \ - self.y, \ - self.z = quatArray + quat = None, + q = 1.0, + p = np.zeros(3,dtype=float)): + """Initializes to identity unless specified""" + self.q = quat[0] if quat is not None else q + self.p = np.array(quat[1:4]) if quat is not None else p self.homomorph() def __iter__(self): """Components""" - return iter([self.w,self.x,self.y,self.z]) + return iter(self.asList()) def __copy__(self): - """Create copy""" - Q = Quaternion([self.w,self.x,self.y,self.z]) - return Q + """Copy""" + return self.__class__(q=self.q,p=self.p.copy()) copy = __copy__ def __repr__(self): - """Readbable string""" - return 'Quaternion(real=%+.6f, imag=<%+.6f, %+.6f, %+.6f>)' % \ - (self.w, self.x, self.y, self.z) + """Readable string""" + return 'Quaternion(real={q:+.6f}, imag=<{p[0]:+.6f}, {p[1]:+.6f}, {p[2]:+.6f}>)'.format(q=self.q,p=self.p) def __pow__(self, exponent): """Power""" - omega = math.acos(self.w) - vRescale = math.sin(exponent*omega)/math.sin(omega) - Q = Quaternion() - Q.w = math.cos(exponent*omega) - Q.x = self.x * vRescale - Q.y = self.y * vRescale - Q.z = self.z * vRescale - return Q + omega = math.acos(self.q) + return self.__class__(q= math.cos(exponent*omega), + p=self.p * math.sin(exponent*omega)/math.sin(omega)) def __ipow__(self, exponent): """In-place power""" - omega = math.acos(self.w) - vRescale = math.sin(exponent*omega)/math.sin(omega) - self.w = np.cos(exponent*omega) - self.x *= vRescale - self.y *= vRescale - self.z *= vRescale + omega = math.acos(self.q) + self.q = math.cos(exponent*omega) + self.p *= math.sin(exponent*omega)/math.sin(omega) return self def __mul__(self, other): """Multiplication""" + # Rowenhorst_etal2015 MSMSE: value of P is selected as -1 + P = -1.0 try: # quaternion - Aw = self.w - Ax = self.x - Ay = self.y - Az = self.z - Bw = other.w - Bx = other.x - By = other.y - Bz = other.z - Q = Quaternion() - Q.w = - Ax * Bx - Ay * By - Az * Bz + Aw * Bw - Q.x = + Ax * Bw + Ay * Bz - Az * By + Aw * Bx - Q.y = - Ax * Bz + Ay * Bw + Az * Bx + Aw * By - Q.z = + Ax * By - Ay * Bx + Az * Bw + Aw * Bz - return Q + return self.__class__(q=self.q*other.q - np.dot(self.p,other.p), + p=self.q*other.p + other.q*self.p + P * np.cross(self.p,other.p)) except: pass - try: # vector (perform active rotation, i.e. q*v*q.conjugated) - w = self.w - x = self.x - y = self.y - z = self.z - Vx = other[0] - Vy = other[1] - Vz = other[2] + try: # vector (perform passive rotation) + ( x, y, z) = self.p + (Vx,Vy,Vz) = other[0:3] + A = self.q*self.q - np.dot(self.p,self.p) + B = 2.0 * (x*Vx + y*Vy + z*Vz) + C = 2.0 * P*self.q - return np.array([\ - w * w * Vx + 2 * y * w * Vz - 2 * z * w * Vy + \ - x * x * Vx + 2 * y * x * Vy + 2 * z * x * Vz - \ - z * z * Vx - y * y * Vx, - 2 * x * y * Vx + y * y * Vy + 2 * z * y * Vz + \ - 2 * w * z * Vx - z * z * Vy + w * w * Vy - \ - 2 * x * w * Vz - x * x * Vy, - 2 * x * z * Vx + 2 * y * z * Vy + \ - z * z * Vz - 2 * w * y * Vx - y * y * Vz + \ - 2 * w * x * Vy - x * x * Vz + w * w * Vz ]) + return np.array([ + A*Vx + B*x + C*(y*Vz - z*Vy), + A*Vy + B*y + C*(z*Vx - x*Vz), + A*Vz + B*z + C*(x*Vy - y*Vx), + ]) except: pass try: # scalar - Q = self.copy() - Q.w *= other - Q.x *= other - Q.y *= other - Q.z *= other - return Q + return self.__class__(q=self.q*other, + p=self.p*other) except: return self.copy() def __imul__(self, other): """In-place multiplication""" + # Rowenhorst_etal2015 MSMSE: value of P is selected as -1 + P = -1.0 try: # Quaternion - Aw = self.w - Ax = self.x - Ay = self.y - Az = self.z - Bw = other.w - Bx = other.x - By = other.y - Bz = other.z - self.w = - Ax * Bx - Ay * By - Az * Bz + Aw * Bw - self.x = + Ax * Bw + Ay * Bz - Az * By + Aw * Bx - self.y = - Ax * Bz + Ay * Bw + Az * Bx + Aw * By - self.z = + Ax * By - Ay * Bx + Az * Bw + Aw * Bz + self.q = self.q*other.q - np.dot(self.p,other.p) + self.p = self.q*other.p + other.q*self.p + P * np.cross(self.p,other.p) except: pass return self def __div__(self, other): """Division""" if isinstance(other, (int,float)): - w = self.w / other - x = self.x / other - y = self.y / other - z = self.z / other - return self.__class__([w,x,y,z]) + return self.__class__(q=self.q / other, + p=self.p / other) else: return NotImplemented def __idiv__(self, other): """In-place division""" if isinstance(other, (int,float)): - self.w /= other - self.x /= other - self.y /= other - self.z /= other + self.q /= other + self.p /= other return self def __add__(self, other): """Addition""" if isinstance(other, Quaternion): - w = self.w + other.w - x = self.x + other.x - y = self.y + other.y - z = self.z + other.z - return self.__class__([w,x,y,z]) + return self.__class__(q=self.q + other.q, + p=self.p + other.p) else: return NotImplemented def __iadd__(self, other): """In-place addition""" if isinstance(other, Quaternion): - self.w += other.w - self.x += other.x - self.y += other.y - self.z += other.z + self.q += other.q + self.p += other.p return self def __sub__(self, other): """Subtraction""" if isinstance(other, Quaternion): - Q = self.copy() - Q.w -= other.w - Q.x -= other.x - Q.y -= other.y - Q.z -= other.z - return Q + return self.__class__(q=self.q - other.q, + p=self.p - other.p) else: - return self.copy() + return NotImplemented def __isub__(self, other): """In-place subtraction""" if isinstance(other, Quaternion): - self.w -= other.w - self.x -= other.x - self.y -= other.y - self.z -= other.z + self.q -= other.q + self.p -= other.p return self def __neg__(self): """Additive inverse""" - self.w = -self.w - self.x = -self.x - self.y = -self.y - self.z = -self.z + self.q = -self.q + self.p = -self.p return self def __abs__(self): """Norm""" - return math.sqrt(self.w ** 2 + \ - self.x ** 2 + \ - self.y ** 2 + \ - self.z ** 2) + return math.sqrt(self.q ** 2 + np.dot(self.p,self.p)) magnitude = __abs__ def __eq__(self,other): """Equal at e-8 precision""" - return (abs(self.w-other.w) < 1e-8 and \ - abs(self.x-other.x) < 1e-8 and \ - abs(self.y-other.y) < 1e-8 and \ - abs(self.z-other.z) < 1e-8) \ - or \ - (abs(-self.w-other.w) < 1e-8 and \ - abs(-self.x-other.x) < 1e-8 and \ - abs(-self.y-other.y) < 1e-8 and \ - abs(-self.z-other.z) < 1e-8) + return (self-other).magnitude() < 1e-8 or (-self-other).magnitude() < 1e-8 def __ne__(self,other): """Not equal at e-8 precision""" @@ -255,31 +187,26 @@ class Quaternion: def __cmp__(self,other): """Linear ordering""" - return (self.Rodrigues()>other.Rodrigues()) - (self.Rodrigues() np.linalg.norm(other.asRodrigues()) else 0) \ + - (1 if np.linalg.norm(self.asRodrigues()) < np.linalg.norm(other.asRodrigues()) else 0) def magnitude_squared(self): - return self.w ** 2 + \ - self.x ** 2 + \ - self.y ** 2 + \ - self.z ** 2 + return self.q ** 2 + np.dot(self.p,self.p) def identity(self): - self.w = 1. - self.x = 0. - self.y = 0. - self.z = 0. + self.q = 1. + self.p = np.zeros(3,dtype=float) return self def normalize(self): d = self.magnitude() if d > 0.0: - self /= d + self.q /= d + self.p /= d return self def conjugate(self): - self.x = -self.x - self.y = -self.y - self.z = -self.z + self.p = -self.p return self def inverse(self): @@ -290,11 +217,9 @@ class Quaternion: return self def homomorph(self): - if self.w < 0.0: - self.w = -self.w - self.x = -self.x - self.y = -self.y - self.z = -self.z + if self.q < 0.0: + self.q = -self.q + self.p = -self.p return self def normalized(self): @@ -310,27 +235,35 @@ class Quaternion: return self.copy().homomorph() def asList(self): - return [i for i in self] + return [self.q]+list(self.p) def asM(self): # to find Averaging Quaternions (see F. Landis Markley et al.) - return np.outer([i for i in self],[i for i in self]) - + return np.outer(self.asList(),self.asList()) + def asMatrix(self): - qbarhalf = 0.5*(self.w**2 - self.x**2 - self.y**2 - self.z**2) + # Rowenhorst_etal2015 MSMSE: value of P is selected as -1 + P = -1.0 + qbarhalf = 0.5*(self.q**2 - np.dot(self.p,self.p)) return 2.0*np.array( - [[ qbarhalf + self.x**2 , self.x*self.y - self.w*self.z, self.x*self.z + self.w*self.y], - [ self.x*self.y + self.w*self.z, qbarhalf + self.y**2 , self.y*self.z - self.w*self.x], - [ self.x*self.z - self.w*self.y, self.y*self.z + self.w*self.x, qbarhalf + self.z**2 ], + [[ qbarhalf + self.p[0]**2 , + self.p[0]*self.p[1] -P* self.q*self.p[2], + self.p[0]*self.p[2] +P* self.q*self.p[1] ], + [ self.p[0]*self.p[1] +P* self.q*self.p[2], + qbarhalf + self.p[1]**2 , + self.p[1]*self.p[2] -P* self.q*self.p[0] ], + [ self.p[0]*self.p[2] -P* self.q*self.p[1], + self.p[1]*self.p[2] +P* self.q*self.p[0], + qbarhalf + self.p[2]**2 ], ]) def asAngleAxis(self, degrees = False): - if self.w > 1: + if self.q > 1.: self.normalize() - s = math.sqrt(1. - self.w**2) - x = 2*self.w**2 - 1. - y = 2*self.w * s + s = math.sqrt(1. - self.q**2) + x = 2*self.q**2 - 1. + y = 2*self.q * s angle = math.atan2(y,x) if angle < 0.0: @@ -338,26 +271,28 @@ class Quaternion: s *= -1. return (np.degrees(angle) if degrees else angle, - np.array([1.0, 0.0, 0.0] if np.abs(angle) < 1e-6 else [self.x / s, self.y / s, self.z / s])) + np.array([1.0, 0.0, 0.0] if np.abs(angle) < 1e-6 else self.p / s)) def asRodrigues(self): - return np.inf*np.ones(3) if self.w == 0.0 else np.array([self.x, self.y, self.z])/self.w + return np.inf*np.ones(3) if self.q == 0.0 else self.p/self.q def asEulers(self, degrees = False): """Orientation as Bunge-Euler angles.""" - q03 = self.w**2+self.z**2 - q12 = self.x**2+self.y**2 + # Rowenhorst_etal2015 MSMSE: value of P is selected as -1 + P = -1.0 + q03 = self.q**2 + self.p[2]**2 + q12 = self.p[0]**2 + self.p[1]**2 chi = np.sqrt(q03*q12) if abs(chi) < 1e-10 and abs(q12) < 1e-10: - eulers = np.array([math.atan2(-2*self.w*self.z,self.w**2-self.z**2),0,0]) + eulers = np.array([math.atan2(-2*P*self.q*self.p[2],self.q**2-self.p[2]**2),0,0]) elif abs(chi) < 1e-10 and abs(q03) < 1e-10: - eulers = np.array([math.atan2( 2*self.x*self.y,self.x**2-self.y**2),np.pi,0]) + eulers = np.array([math.atan2( 2 *self.p[0]*self.p[1],self.p[0]**2-self.p[1]**2),np.pi,0]) else: - eulers = np.array([math.atan2((self.x*self.z-self.w*self.y)/chi,(-self.w*self.x-self.y*self.z)/chi), + eulers = np.array([math.atan2((self.p[0]*self.p[2]-P*self.q*self.p[1])/chi,(-P*self.q*self.p[0]-self.p[1]*self.p[2])/chi), math.atan2(2*chi,q03-q12), - math.atan2((self.w*self.y+self.x*self.z)/chi,( self.y*self.z-self.w*self.x)/chi), + math.atan2((P*self.q*self.p[1]+self.p[0]*self.p[2])/chi,( self.p[1]*self.p[2]-P*self.q*self.p[0])/chi), ]) return np.degrees(eulers) if degrees else eulers @@ -371,25 +306,26 @@ class Quaternion: @classmethod def fromRandom(cls,randomSeed = None): + import binascii if randomSeed is None: - randomSeed = int(os.urandom(4).encode('hex'), 16) + randomSeed = int(binascii.hexlify(os.urandom(4)),16) np.random.seed(randomSeed) r = np.random.random(3) w = math.cos(2.0*math.pi*r[0])*math.sqrt(r[2]) x = math.sin(2.0*math.pi*r[1])*math.sqrt(1.0-r[2]) y = math.cos(2.0*math.pi*r[1])*math.sqrt(1.0-r[2]) z = math.sin(2.0*math.pi*r[0])*math.sqrt(r[2]) - return cls([w,x,y,z]) + return cls(quat=[w,x,y,z]) @classmethod def fromRodrigues(cls, rodrigues): if not isinstance(rodrigues, np.ndarray): rodrigues = np.array(rodrigues) - halfangle = math.atan(np.linalg.norm(rodrigues)) + norm = np.linalg.norm(rodrigues) + halfangle = math.atan(norm) + s = math.sin(halfangle) c = math.cos(halfangle) - w = c - x,y,z = rodrigues/c - return cls([w,x,y,z]) + return cls(q=c,p=s*rodrigues/norm) @classmethod @@ -397,22 +333,19 @@ class Quaternion: angle, axis, degrees = False): - if not isinstance(axis, np.ndarray): axis = np.array(axis,dtype='d') + if not isinstance(axis, np.ndarray): axis = np.array(axis,dtype=float) axis = axis.astype(float)/np.linalg.norm(axis) angle = np.radians(angle) if degrees else angle s = math.sin(0.5 * angle) - w = math.cos(0.5 * angle) - x = axis[0] * s - y = axis[1] * s - z = axis[2] * s - return cls([w,x,y,z]) + c = math.cos(0.5 * angle) + return cls(q=c,p=axis*s) @classmethod def fromEulers(cls, eulers, degrees = False): - if not isinstance(eulers, np.ndarray): eulers = np.array(eulers,dtype='d') + if not isinstance(eulers, np.ndarray): eulers = np.array(eulers,dtype=float) eulers = np.radians(eulers) if degrees else eulers sigma = 0.5*(eulers[0]+eulers[2]) @@ -420,11 +353,13 @@ class Quaternion: c = np.cos(0.5*eulers[1]) s = np.sin(0.5*eulers[1]) - w = c * np.cos(sigma) - x = -s * np.cos(delta) - y = -s * np.sin(delta) - z = -c * np.sin(sigma) - return cls([w,x,y,z]) + # Rowenhorst_etal2015 MSMSE: value of P is selected as -1 + P = -1.0 + w = c * np.cos(sigma) + x = -P * s * np.cos(delta) + y = -P * s * np.sin(delta) + z = -P * c * np.sin(sigma) + return cls(quat=[w,x,y,z]) # Modified Method to calculate Quaternion from Orientation Matrix, @@ -435,16 +370,18 @@ class Quaternion: if m.shape != (3,3) and np.prod(m.shape) == 9: m = m.reshape(3,3) - w = 0.5*math.sqrt(1.+m[0,0]+m[1,1]+m[2,2]) - x = 0.5*math.sqrt(1.+m[0,0]-m[1,1]-m[2,2]) - y = 0.5*math.sqrt(1.-m[0,0]+m[1,1]-m[2,2]) - z = 0.5*math.sqrt(1.-m[0,0]-m[1,1]+m[2,2]) + # Rowenhorst_etal2015 MSMSE: value of P is selected as -1 + P = -1.0 + w = 0.5*math.sqrt(1.+m[0,0]+m[1,1]+m[2,2]) + x = P*0.5*math.sqrt(1.+m[0,0]-m[1,1]-m[2,2]) + y = P*0.5*math.sqrt(1.-m[0,0]+m[1,1]-m[2,2]) + z = P*0.5*math.sqrt(1.-m[0,0]-m[1,1]+m[2,2]) x *= -1 if m[2,1] < m[1,2] else 1 y *= -1 if m[0,2] < m[2,0] else 1 z *= -1 if m[1,0] < m[0,1] else 1 - return cls( np.array([w,x,y,z])/math.sqrt(w**2 + x**2 + y**2 + z**2)) + return cls(quat=np.array([w,x,y,z])/math.sqrt(w**2 + x**2 + y**2 + z**2)) @classmethod @@ -458,36 +395,30 @@ class Quaternion: assert isinstance(q1, Quaternion) and isinstance(q2, Quaternion) Q = cls() - costheta = q1.w * q2.w + q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + costheta = q1.q*q2.q + np.dot(q1.p,q2.p) if costheta < 0.: costheta = -costheta q1 = q1.conjugated() - elif costheta > 1: - costheta = 1 + elif costheta > 1.: + costheta = 1. theta = math.acos(costheta) if abs(theta) < 0.01: - Q.w = q2.w - Q.x = q2.x - Q.y = q2.y - Q.z = q2.z + Q.q = q2.q + Q.p = q2.p return Q sintheta = math.sqrt(1.0 - costheta * costheta) if abs(sintheta) < 0.01: - Q.w = (q1.w + q2.w) * 0.5 - Q.x = (q1.x + q2.x) * 0.5 - Q.y = (q1.y + q2.y) * 0.5 - Q.z = (q1.z + q2.z) * 0.5 + Q.q = (q1.q + q2.q) * 0.5 + Q.p = (q1.p + q2.p) * 0.5 return Q - ratio1 = math.sin((1 - t) * theta) / sintheta - ratio2 = math.sin(t * theta) / sintheta + ratio1 = math.sin((1.0 - t) * theta) / sintheta + ratio2 = math.sin( t * theta) / sintheta - Q.w = q1.w * ratio1 + q2.w * ratio2 - Q.x = q1.x * ratio1 + q2.x * ratio2 - Q.y = q1.y * ratio1 + q2.y * ratio2 - Q.z = q1.z * ratio1 + q2.z * ratio2 + Q.q = q1.q * ratio1 + q2.q * ratio2 + Q.p = q1.p * ratio1 + q2.p * ratio2 return Q @@ -513,7 +444,7 @@ class Symmetry: def __repr__(self): """Readbable string""" - return '%s' % (self.lattice) + return '{}'.format(self.lattice) def __eq__(self, other): @@ -526,7 +457,7 @@ class Symmetry: def __cmp__(self,other): """Linear ordering""" - myOrder = Symmetry.lattices.index(self.lattice) + myOrder = Symmetry.lattices.index(self.lattice) otherOrder = Symmetry.lattices.index(other.lattice) return (myOrder > otherOrder) - (myOrder < otherOrder) @@ -722,7 +653,7 @@ class Symmetry: else: return True - v = np.array(vector,dtype = float) + v = np.array(vector,dtype=float) if proper: # check both improper ... theComponents = np.dot(basis['improper'],v) inSST = np.all(theComponents >= 0.0) @@ -737,10 +668,10 @@ class Symmetry: if color: # have to return color array if inSST: rgb = np.power(theComponents/np.linalg.norm(theComponents),0.5) # smoothen color ramps - rgb = np.minimum(np.ones(3,'d'),rgb) # limit to maximum intensity + rgb = np.minimum(np.ones(3,dtype=float),rgb) # limit to maximum intensity rgb /= max(rgb) # normalize to (HS)V = 1 else: - rgb = np.zeros(3,'d') + rgb = np.zeros(3,dtype=float) return (inSST,rgb) else: return inSST @@ -780,8 +711,9 @@ class Orientation: self.quaternion = Quaternion.fromRodrigues(Rodrigues) elif isinstance(quaternion, Quaternion): # based on given quaternion self.quaternion = quaternion.homomorphed() - elif isinstance(quaternion, np.ndarray) and quaternion.shape == (4,): # based on given quaternion-like array - self.quaternion = Quaternion(quaternion).homomorphed() + elif (isinstance(quaternion, np.ndarray) and quaternion.shape == (4,)) or \ + (isinstance(quaternion, list) and len(quaternion) == 4 ): # based on given quaternion-like array + self.quaternion = Quaternion(quat=quaternion).homomorphed() self.symmetry = Symmetry(symmetry) @@ -794,10 +726,12 @@ class Orientation: def __repr__(self): """Value as all implemented representations""" - return 'Symmetry: %s\n' % (self.symmetry) + \ - 'Quaternion: %s\n' % (self.quaternion) + \ - 'Matrix:\n%s\n' % ( '\n'.join(['\t'.join(map(str,self.asMatrix()[i,:])) for i in range(3)]) ) + \ - 'Bunge Eulers / deg: %s' % ('\t'.join(map(str,self.asEulers(degrees=True))) ) + return '\n'.join([ + 'Symmetry: {}'.format(self.symmetry), + 'Quaternion: {}'.format(self.quaternion), + 'Matrix:\n{}'.format( '\n'.join(['\t'.join(list(map(str,self.asMatrix()[i,:]))) for i in range(3)]) ), + 'Bunge Eulers / deg: {}'.format('\t'.join(list(map(str,self.asEulers(degrees=True)))) ), + ]) def asQuaternion(self): return self.quaternion.asList() @@ -927,7 +861,7 @@ class Orientation: M = closest.quaternion.asM() * n if i == 0 else M + closest.quaternion.asM() * n # noqa add (multiples) of this orientation to average noqa eig, vec = np.linalg.eig(M/N) - return Orientation(quaternion = Quaternion(quatArray = np.real(vec.T[eig.argmax()])), + return Orientation(quaternion = Quaternion(quat = np.real(vec.T[eig.argmax()])), symmetry = reference.symmetry.lattice) diff --git a/processing/post/addGrainID.py b/processing/post/addGrainID.py index 45034034b..c3b98f4e6 100755 --- a/processing/post/addGrainID.py +++ b/processing/post/addGrainID.py @@ -200,9 +200,9 @@ for name in filenames: if gID != -1 and gID not in alreadyChecked: # indexed point belonging to a grain not yet tested? alreadyChecked[gID] = True # remember not to check again disorientation = o.disorientation(orientations[gID],SST = False)[0] # compare against other orientation - if disorientation.quaternion.w > cos_disorientation: # within threshold ... + if disorientation.quaternion.q > cos_disorientation: # within threshold ... candidates.append(gID) # remember as potential candidate - if disorientation.quaternion.w >= bestDisorientation.w: # ... and better than current best? + if disorientation.quaternion.q >= bestDisorientation.q: # ... and better than current best? matched = True matchedID = gID # remember that grain bestDisorientation = disorientation.quaternion diff --git a/processing/pre/geom_addPrimitive.py b/processing/pre/geom_addPrimitive.py index 35000d8bf..54de558f7 100755 --- a/processing/pre/geom_addPrimitive.py +++ b/processing/pre/geom_addPrimitive.py @@ -64,11 +64,11 @@ if options.dimension is None: parser.error('no dimension specified.') if options.angleaxis is not None: options.angleaxis = list(map(float,options.angleaxis)) - rotation = damask.Quaternion().fromAngleAxis(np.radians(options.angleaxis[0]) if options.degrees else options.angleaxis[0], - options.angleaxis[1:4]) + rotation = damask.Quaternion.fromAngleAxis(np.radians(options.angleaxis[0]) if options.degrees else options.angleaxis[0], + options.angleaxis[1:4]) elif options.quaternion is not None: - options.quaternion = map(float,options.quaternion) - rotation = damask.Quaternion(options.quaternion) + options.quaternion = list(map(float,options.quaternion)) + rotation = damask.Quaternion(quat=options.quaternion) else: rotation = damask.Quaternion() diff --git a/processing/pre/geom_fromTable.py b/processing/pre/geom_fromTable.py index a2f71d0c9..e1157d325 100755 --- a/processing/pre/geom_fromTable.py +++ b/processing/pre/geom_fromTable.py @@ -43,7 +43,7 @@ parser.add_option('-e', '--eulers', parser.add_option('-d', '--degrees', dest = 'degrees', action = 'store_true', - help = 'angles are given in degrees [%default]') + help = 'all angles are in degrees') parser.add_option('-m', '--matrix', dest = 'matrix', type = 'string', metavar = 'string', @@ -71,7 +71,7 @@ parser.add_option('--axes', parser.add_option('-s', '--symmetry', dest = 'symmetry', action = 'extend', metavar = '', - help = 'crystal symmetry %default {{{}}} '.format(', '.join(damask.Symmetry.lattices[1:]))) + help = 'crystal symmetry of each phase %default {{{}}} '.format(', '.join(damask.Symmetry.lattices[1:]))) parser.add_option('--homogenization', dest = 'homogenization', type = 'int', metavar = 'int', @@ -234,7 +234,7 @@ for name in filenames: o = damask.Orientation(Eulers = myData[colOri:colOri+3]*toRadians, symmetry = mySym) elif inputtype == 'matrix': - o = damask.Orientation(matrix = myData[colOri:colOri+9].reshape(3,3).transpose(), + o = damask.Orientation(matrix = myData[colOri:colOri+9].reshape(3,3), symmetry = mySym) elif inputtype == 'frame': o = damask.Orientation(matrix = np.hstack((myData[colOri[0]:colOri[0]+3], @@ -246,7 +246,7 @@ for name in filenames: o = damask.Orientation(quaternion = myData[colOri:colOri+4], symmetry = mySym) - cos_disorientations = -np.ones(1,dtype='f') # largest possible disorientation + cos_disorientations = -np.ones(1,dtype=float) # largest possible disorientation closest_grain = -1 # invalid neighbor if options.tolerance > 0.0: # only try to compress orientations if asked to @@ -258,7 +258,7 @@ for name in filenames: if len(grains) > 0: # check immediate neighborhood first cos_disorientations = np.array([o.disorientation(orientations[grainID], - SST = False)[0].quaternion.w \ + SST = False)[0].quaternion.q \ for grainID in grains]) # store disorientation per grainID closest_grain = np.argmax(cos_disorientations) # grain among grains with closest orientation to myself match = 'local' @@ -269,7 +269,7 @@ for name in filenames: if len(grains) > 0: cos_disorientations = np.array([o.disorientation(orientations[grainID], - SST = False)[0].quaternion.w \ + SST = False)[0].quaternion.q \ for grainID in grains]) # store disorientation per grainID closest_grain = np.argmax(cos_disorientations) # grain among grains with closest orientation to myself match = 'global' diff --git a/processing/pre/hybridIA_linODFsampling.py b/processing/pre/hybridIA_linODFsampling.py index acedc3cca..cf1a473cf 100755 --- a/processing/pre/hybridIA_linODFsampling.py +++ b/processing/pre/hybridIA_linODFsampling.py @@ -244,7 +244,7 @@ for name in filenames: continue damask.util.report(scriptName,name) - randomSeed = int(os.urandom(4).encode('hex'), 16) if options.randomSeed is None else options.randomSeed # random seed per file for second phase + randomSeed = int(os.urandom(4).hex(), 16) if options.randomSeed is None else options.randomSeed # random seed per file for second phase random.seed(randomSeed) # ------------------------------------------ read header and data --------------------------------- diff --git a/processing/pre/seeds_fromRandom.py b/processing/pre/seeds_fromRandom.py index c1a7cbd4d..6ec221e25 100755 --- a/processing/pre/seeds_fromRandom.py +++ b/processing/pre/seeds_fromRandom.py @@ -127,7 +127,7 @@ options.fraction = np.array(options.fraction) options.grid = np.array(options.grid) gridSize = options.grid.prod() -if options.randomSeed is None: options.randomSeed = int(os.urandom(4).encode('hex'), 16) +if options.randomSeed is None: options.randomSeed = int(os.urandom(4).hex(), 16) np.random.seed(options.randomSeed) # init random generators random.seed(options.randomSeed) diff --git a/src/IO.f90 b/src/IO.f90 index a08f96439..af59b11b9 100644 --- a/src/IO.f90 +++ b/src/IO.f90 @@ -33,7 +33,6 @@ module IO IO_write_jobIntFile, & IO_read_realFile, & IO_read_intFile, & - IO_hybridIA, & IO_isBlank, & IO_getTag, & IO_stringPos, & @@ -192,7 +191,9 @@ recursive function IO_recursiveRead(fileName,cnt) result(fileContent) l,i, & myStat - if (merge(cnt,0_pInt,present(cnt))>10_pInt) call IO_error(106_pInt,ext_msg=trim(fileName)) + if (present(cnt)) then + if (cnt>10_pInt) call IO_error(106_pInt,ext_msg=trim(fileName)) + endif !-------------------------------------------------------------------------------------------------- ! read data as stream @@ -583,223 +584,6 @@ logical function IO_abaqus_hasNoPart(fileUnit) 620 end function IO_abaqus_hasNoPart #endif -!-------------------------------------------------------------------------------------------------- -!> @brief hybrid IA sampling of ODFfile -!-------------------------------------------------------------------------------------------------- -function IO_hybridIA(Nast,ODFfileName) - use prec, only: & - tol_math_check - - implicit none - integer(pInt), intent(in) :: Nast !< number of samples? - real(pReal), dimension(3,Nast) :: IO_hybridIA - character(len=*), intent(in) :: ODFfileName !< name of ODF file including total path - -!-------------------------------------------------------------------------------------------------- -! math module is not available - real(pReal), parameter :: PI = 3.141592653589793_pReal - real(pReal), parameter :: INRAD = PI/180.0_pReal - - integer(pInt) :: i,j,bin,NnonZero,Nset,Nreps,reps,phi1,Phi,phi2 - integer(pInt), allocatable, dimension(:) :: chunkPos - integer(pInt), dimension(3) :: steps !< number of steps in phi1, Phi, and phi2 direction - integer(pInt), dimension(4) :: columns !< columns in linearODF file where eulerangles and density are located - integer(pInt), dimension(:), allocatable :: binSet - real(pReal) :: center,sum_dV_V,prob,dg_0,C,lowerC,upperC,rnd - real(pReal), dimension(2,3) :: limits !< starting and end values for eulerangles - real(pReal), dimension(3) :: deltas, & !< angular step size in phi1, Phi, and phi2 direction - eulers !< euler angles when reading from file - real(pReal), dimension(:,:,:), allocatable :: dV_V - character(len=65536) :: line, keyword - integer(pInt) :: headerLength - integer(pInt), parameter :: FILEUNIT = 999_pInt - - IO_hybridIA = 0.0_pReal ! initialize return value for case of error - write(6,'(/,a,/)',advance='no') ' Using linear ODF file: '//trim(ODFfileName) - write(6,'(/,a)') ' Eisenlohr et al., Computational Materials Science, 42(4):670–678, 2008' - write(6,'(a)') ' https://doi.org/10.1016/j.commatsci.2007.09.015' - - -!-------------------------------------------------------------------------------------------------- -! parse header of ODF file - call IO_open_file(FILEUNIT,ODFfileName) - headerLength = 0_pInt - line=IO_read(FILEUNIT) - chunkPos = IO_stringPos(line) - keyword = IO_lc(IO_StringValue(line,chunkPos,2_pInt,.true.)) - if (keyword(1:4) == 'head') then - headerLength = IO_intValue(line,chunkPos,1_pInt) + 1_pInt - else - call IO_error(error_ID=156_pInt, ext_msg='no header found') - endif - -!-------------------------------------------------------------------------------------------------- -! figure out columns containing data - do i = 1_pInt, headerLength-1_pInt - line=IO_read(FILEUNIT) - enddo - columns = 0_pInt - chunkPos = IO_stringPos(line) - do i = 1_pInt, chunkPos(1) - select case ( IO_lc(IO_StringValue(line,chunkPos,i,.true.)) ) - case ('phi1') - columns(1) = i - case ('phi') - columns(2) = i - case ('phi2') - columns(3) = i - case ('intensity') - columns(4) = i - end select - enddo - - if (any(columns<1)) call IO_error(error_ID = 156_pInt, ext_msg='could not find expected header') - -!-------------------------------------------------------------------------------------------------- -! determine limits, number of steps and step size - limits(1,1:3) = 721.0_pReal - limits(2,1:3) = -1.0_pReal - steps = 0_pInt - - line=IO_read(FILEUNIT) - do while (trim(line) /= IO_EOF) - chunkPos = IO_stringPos(line) - eulers=[IO_floatValue(line,chunkPos,columns(1)),& - IO_floatValue(line,chunkPos,columns(2)),& - IO_floatValue(line,chunkPos,columns(3))] - steps = steps + merge(1,0,eulers>limits(2,1:3)) - limits(1,1:3) = min(limits(1,1:3),eulers) - limits(2,1:3) = max(limits(2,1:3),eulers) - line=IO_read(FILEUNIT) - enddo - - deltas = (limits(2,1:3)-limits(1,1:3))/real(steps-1_pInt,pReal) - - write(6,'(/,a,/,3(2x,f12.4,1x))',advance='no') ' Starting angles / ° = ',limits(1,1:3) - write(6,'(/,a,/,3(2x,f12.4,1x))',advance='no') ' Ending angles / ° = ',limits(2,1:3) - write(6,'(/,a,/,3(2x,f12.4,1x))',advance='no') ' Angular steps / ° = ',deltas - - if (all(abs(limits(1,1:3)) < tol_math_check)) then - write(6,'(/,a,/)',advance='no') ' assuming vertex centered data' - center = 0.0_pReal ! no need to shift - if (any(mod(int(limits(2,1:3),pInt),90)==0)) & - call IO_error(error_ID = 156_pInt, ext_msg='linear ODF data repeated at right boundary') - else - write(6,'(/,a,/)',advance='no') ' assuming cell centered data' - center = 0.5_pReal ! shift data by half of a bin - endif - - limits = limits*INRAD - deltas = deltas*INRAD - -!-------------------------------------------------------------------------------------------------- -! read in data - allocate(dV_V(steps(3),steps(2),steps(1)),source=0.0_pReal) - sum_dV_V = 0.0_pReal - dg_0 = deltas(1)*deltas(3)*2.0_pReal*sin(deltas(2)/2.0_pReal) - NnonZero = 0_pInt - - call IO_checkAndRewind(FILEUNIT) ! forward - do i = 1_pInt, headerLength - line=IO_read(FILEUNIT) - enddo - - do phi1=1_pInt,steps(1); do Phi=1_pInt,steps(2); do phi2=1_pInt,steps(3) - line=IO_read(FILEUNIT) - chunkPos = IO_stringPos(line) - eulers=[IO_floatValue(line,chunkPos,columns(1)),& ! read in again for consistency check only - IO_floatValue(line,chunkPos,columns(2)),& - IO_floatValue(line,chunkPos,columns(3))]*INRAD - if (any(abs((real([phi1,phi,phi2],pReal) -1.0_pReal + center)*deltas-eulers)>tol_math_check)) & ! check if data is in expected order (phi2 fast) and correct for Fortran starting at 1 - call IO_error(error_ID = 156_pInt, ext_msg='linear ODF data not in expected order') - - prob = IO_floatValue(line,chunkPos,columns(4)) - if (prob > 0.0_pReal) then - NnonZero = NnonZero+1_pInt - sum_dV_V = sum_dV_V+prob - else - prob = 0.0_pReal - endif - dV_V(phi2,Phi,phi1) = prob*dg_0*sin((real(Phi-1_pInt,pReal)+center)*deltas(2)) - enddo; enddo; enddo - close(FILEUNIT) - dV_V = dV_V/sum_dV_V ! normalize to 1 - -!-------------------------------------------------------------------------------------------------- -! now fix bounds - Nset = max(Nast,NnonZero) ! if less than non-zero voxel count requested, sample at least that much - lowerC = 0.0_pReal - upperC = real(Nset, pReal) - - do while (hybridIA_reps(dV_V,steps,upperC) < Nset) - lowerC = upperC - upperC = upperC*2.0_pReal - enddo - -!-------------------------------------------------------------------------------------------------- -! binary search for best C - do - C = (upperC+lowerC)/2.0_pReal - Nreps = hybridIA_reps(dV_V,steps,C) - if (abs(upperC-lowerC) < upperC*1.0e-14_pReal) then - C = upperC - Nreps = hybridIA_reps(dV_V,steps,C) - exit - elseif (Nreps < Nset) then - lowerC = C - elseif (Nreps > Nset) then - upperC = C - else - exit - endif - enddo - - allocate(binSet(Nreps)) - bin = 0_pInt ! bin counter - i = 1_pInt ! set counter - do phi1=1_pInt,steps(1); do Phi=1_pInt,steps(2) ;do phi2=1_pInt,steps(3) - reps = nint(C*dV_V(phi2,Phi,phi1), pInt) - binSet(i:i+reps-1) = bin - bin = bin+1_pInt ! advance bin - i = i+reps ! advance set - enddo; enddo; enddo - - do i=1_pInt,Nast - if (i < Nast) then - call random_number(rnd) - j = nint(rnd*real(Nreps-i,pReal)+real(i,pReal)+0.5_pReal,pInt) - else - j = i - endif - bin = binSet(j) - IO_hybridIA(1,i) = deltas(1)*(real(mod(bin/(steps(3)*steps(2)),steps(1)),pReal)+center) ! phi1 - IO_hybridIA(2,i) = deltas(2)*(real(mod(bin/ steps(3) ,steps(2)),pReal)+center) ! Phi - IO_hybridIA(3,i) = deltas(3)*(real(mod(bin ,steps(3)),pReal)+center) ! phi2 - binSet(j) = binSet(i) - enddo - - contains - !-------------------------------------------------------------------------------------------------- - !> @brief counts hybrid IA repetitions - !-------------------------------------------------------------------------------------------------- - integer(pInt) pure function hybridIA_reps(dV_V,steps,C) - - implicit none - integer(pInt), intent(in), dimension(3) :: steps !< number of bins in Euler space - real(pReal), intent(in), dimension(steps(3),steps(2),steps(1)) :: dV_V !< needs description - real(pReal), intent(in) :: C !< needs description - - integer(pInt) :: phi1,Phi,phi2 - - hybridIA_reps = 0_pInt - do phi1=1_pInt,steps(1); do Phi =1_pInt,steps(2); do phi2=1_pInt,steps(3) - hybridIA_reps = hybridIA_reps+nint(C*dV_V(phi2,Phi,phi1), pInt) - enddo; enddo; enddo - - end function hybridIA_reps - -end function IO_hybridIA - !-------------------------------------------------------------------------------------------------- !> @brief identifies strings without content @@ -902,7 +686,11 @@ function IO_stringValue(string,chunkPos,myChunk,silent) logical :: warn - warn = merge(silent,.false.,present(silent)) + if (present(silent)) then + warn = silent + else + warn = .false. + endif IO_stringValue = '' valuePresent: if (myChunk > chunkPos(1) .or. myChunk < 1_pInt) then @@ -1758,7 +1546,6 @@ integer(pInt) function IO_verifyIntValue (string,validChars,myName) validChars, & !< valid characters in string myName !< name of caller function (for debugging) integer(pInt) :: readStatus, invalidWhere - !character(len=len(trim(string))) :: trimmed does not work with ifort 14.0.1 IO_verifyIntValue = 0_pInt @@ -1788,7 +1575,6 @@ real(pReal) function IO_verifyFloatValue (string,validChars,myName) myName !< name of caller function (for debugging) integer(pInt) :: readStatus, invalidWhere - !character(len=len(trim(string))) :: trimmed does not work with ifort 14.0.1 IO_verifyFloatValue = 0.0_pReal diff --git a/src/config.f90 b/src/config.f90 index 4d5a76432..7ae800f30 100644 --- a/src/config.f90 +++ b/src/config.f90 @@ -513,8 +513,12 @@ character(len=65536) function getString(this,key,defaultVal,raw) type(tPartitionedStringList), pointer :: item logical :: found, & whole + if (present(raw)) then + whole = raw + else + whole = .false. + endif - whole = merge(raw,.false.,present(raw)) ! whole string or white space splitting found = present(defaultVal) if (found) then getString = trim(defaultVal) @@ -661,7 +665,11 @@ function getStrings(this,key,defaultVal,requiredShape,raw) cumulative cumulative = (key(1:1) == '(' .and. key(len_trim(key):len_trim(key)) == ')') - whole = merge(raw,.false.,present(raw)) + if (present(raw)) then + whole = raw + else + whole = .false. + endif found = .false. item => this diff --git a/src/constitutive.f90 b/src/constitutive.f90 index 28d95f4ea..dfe3459ae 100644 --- a/src/constitutive.f90 +++ b/src/constitutive.f90 @@ -513,7 +513,7 @@ subroutine constitutive_LpAndItsTangents(Lp, dLp_dS, dLp_dFi, S6, Fi, ipc, ip, e case (PLASTICITY_PHENOPOWERLAW_ID) plasticityType of = phasememberAt(ipc,ip,el) instance = phase_plasticityInstance(material_phase(ipc,ip,el)) - call plastic_phenopowerlaw_LpAndItsTangent (Lp,dLp_dMp, Mp,instance,of) + call plastic_phenopowerlaw_LpAndItsTangent (Lp,dLp_dMp,Mp,instance,of) case (PLASTICITY_KINEHARDENING_ID) plasticityType of = phasememberAt(ipc,ip,el) @@ -526,9 +526,9 @@ subroutine constitutive_LpAndItsTangents(Lp, dLp_dS, dLp_dFi, S6, Fi, ipc, ip, e dLp_dMp = math_Plain99to3333(dLp_dMp99) ! ToDo: We revert here the last statement in plastic_xx_LpAndItsTanget case (PLASTICITY_DISLOTWIN_ID) plasticityType - call plastic_dislotwin_LpAndItsTangent (Lp,dLp_dMp99, math_Mandel33to6(Mp), & - temperature(ho)%p(tme),ipc,ip,el) - dLp_dMp = math_Plain99to3333(dLp_dMp99) ! ToDo: We revert here the last statement in plastic_xx_LpAndItsTanget + of = phasememberAt(ipc,ip,el) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + call plastic_dislotwin_LpAndItsTangent (Lp,dLp_dMp,Mp,temperature(ho)%p(tme),instance,of) case (PLASTICITY_DISLOUCLA_ID) plasticityType call plastic_disloucla_LpAndItsTangent (Lp,dLp_dMp99, math_Mandel33to6(Mp), & @@ -925,8 +925,9 @@ subroutine constitutive_collectDotState(S6, FeArray, Fi, FpArray, subdt, subfrac call plastic_kinehardening_dotState(Mp,instance,of) case (PLASTICITY_DISLOTWIN_ID) plasticityType - call plastic_dislotwin_dotState (math_Mandel33to6(Mp),temperature(ho)%p(tme), & - ipc,ip,el) + of = phasememberAt(ipc,ip,el) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + call plastic_dislotwin_dotState (Mp,temperature(ho)%p(tme),instance,of) case (PLASTICITY_DISLOUCLA_ID) plasticityType call plastic_disloucla_dotState (math_Mandel33to6(Mp),temperature(ho)%p(tme), & @@ -1143,22 +1144,29 @@ function constitutive_postResults(S6, Fi, FeArray, ipc, ip, el) case (PLASTICITY_ISOTROPIC_ID) plasticityType constitutive_postResults(startPos:endPos) = & plastic_isotropic_postResults(S6,ipc,ip,el) + case (PLASTICITY_PHENOPOWERLAW_ID) plasticityType of = phasememberAt(ipc,ip,el) instance = phase_plasticityInstance(material_phase(ipc,ip,el)) constitutive_postResults(startPos:endPos) = & plastic_phenopowerlaw_postResults(Mp,instance,of) + case (PLASTICITY_KINEHARDENING_ID) plasticityType of = phasememberAt(ipc,ip,el) instance = phase_plasticityInstance(material_phase(ipc,ip,el)) constitutive_postResults(startPos:endPos) = & plastic_kinehardening_postResults(Mp,instance,of) + case (PLASTICITY_DISLOTWIN_ID) plasticityType + of = phasememberAt(ipc,ip,el) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) constitutive_postResults(startPos:endPos) = & - plastic_dislotwin_postResults(S6,temperature(ho)%p(tme),ipc,ip,el) + plastic_dislotwin_postResults(Mp,temperature(ho)%p(tme),instance,of) + case (PLASTICITY_DISLOUCLA_ID) plasticityType constitutive_postResults(startPos:endPos) = & plastic_disloucla_postResults(S6,temperature(ho)%p(tme),ipc,ip,el) + case (PLASTICITY_NONLOCAL_ID) plasticityType constitutive_postResults(startPos:endPos) = & plastic_nonlocal_postResults (S6,FeArray,ip,el) diff --git a/src/kinematics_thermal_expansion.f90 b/src/kinematics_thermal_expansion.f90 index 3cec1da4c..3d1de3d0a 100644 --- a/src/kinematics_thermal_expansion.f90 +++ b/src/kinematics_thermal_expansion.f90 @@ -225,7 +225,7 @@ subroutine kinematics_thermal_expansion_LiAndItsTangent(Li, dLi_dTstar3333, ipc, + lattice_thermalExpansion33(1:3,1:3,2,phase)*(T - TRef)**1 & ! linear coefficient + lattice_thermalExpansion33(1:3,1:3,3,phase)*(T - TRef)**2 & ! quadratic coefficient ) / & - (1.0_pReal \ + (1.0_pReal & + lattice_thermalExpansion33(1:3,1:3,1,phase)*(T - TRef)**1 / 1. & + lattice_thermalExpansion33(1:3,1:3,2,phase)*(T - TRef)**2 / 2. & + lattice_thermalExpansion33(1:3,1:3,3,phase)*(T - TRef)**3 / 3. & diff --git a/src/lattice.f90 b/src/lattice.f90 index 996852a79..2b2a5641d 100644 --- a/src/lattice.f90 +++ b/src/lattice.f90 @@ -72,7 +72,7 @@ module lattice !-------------------------------------------------------------------------------------------------- ! face centered cubic integer(pInt), dimension(LATTICE_maxNslipFamily), parameter, public :: & - LATTICE_fcc_NslipSystem = int([12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],pInt) !< # of slip systems per family for fcc + LATTICE_fcc_NslipSystem = int([12, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],pInt) !< # of slip systems per family for fcc integer(pInt), dimension(LATTICE_maxNtwinFamily), parameter, public :: & LATTICE_fcc_NtwinSystem = int([12, 0, 0, 0],pInt) !< # of twin systems per family for fcc @@ -104,11 +104,19 @@ module lattice 1, 1, 0, 1,-1,-1, & ! A6 0, 1, 1, -1, 1,-1, & ! D1 1, 0,-1, -1, 1,-1, & ! D4 - -1,-1, 0, -1, 1,-1 & ! D6 + -1,-1, 0, -1, 1,-1, & ! D6 + ! Slip system <110>{110} + 1, 1, 0, 1,-1, 0, & + 1,-1, 0, 1, 1, 0, & + 1, 0, 1, 1, 0,-1, & + 1, 0,-1, 1, 0, 1, & + 0, 1, 1, 0, 1,-1, & + 0, 1,-1, 0, 1, 1 & ],pReal),shape(LATTICE_FCC_SYSTEMSLIP)) !< Slip system <110>{111} directions. Sorted according to Eisenlohr & Hantcherli - character(len=*), dimension(1), parameter, public :: LATTICE_FCC_SLIPFAMILY_NAME = & - ['<0 1 -1>{1 1 1}'] + character(len=*), dimension(2), parameter, public :: LATTICE_FCC_SLIPFAMILY_NAME = & + ['<0 1 -1>{1 1 1}', & + '<0 1 -1>{0 1 1}'] real(pReal), dimension(3+3,LATTICE_fcc_Ntwin), parameter, private :: & LATTICE_fcc_systemTwin = reshape(real( [& @@ -166,25 +174,38 @@ module lattice integer(pInt), dimension(LATTICE_fcc_Nslip,lattice_fcc_Nslip), parameter, public :: & LATTICE_fcc_interactionSlipSlip = reshape(int( [& - 1,2,2,4,6,5,3,5,5,4,5,6, & ! ---> slip - 2,1,2,6,4,5,5,4,6,5,3,5, & ! | - 2,2,1,5,5,3,5,6,4,6,5,4, & ! | - 4,6,5,1,2,2,4,5,6,3,5,5, & ! v slip - 6,4,5,2,1,2,5,3,5,5,4,6, & - 5,5,3,2,2,1,6,5,4,5,6,4, & - 3,5,5,4,5,6,1,2,2,4,6,5, & - 5,4,6,5,3,5,2,1,2,6,4,5, & - 5,6,4,6,5,4,2,2,1,5,5,3, & - 4,5,6,3,5,5,4,6,5,1,2,2, & - 5,3,5,5,4,6,6,4,5,2,1,2, & - 6,5,4,5,6,4,5,5,3,2,2,1 & - ],pInt),shape(LATTICE_FCC_INTERACTIONSLIPSLIP),order=[2,1]) !< Slip--slip interaction types for fcc + 1, 2, 2, 4, 6, 5, 3, 5, 5, 4, 5, 6, 9,10, 9,10,11,12, & ! ---> slip + 2, 1, 2, 6, 4, 5, 5, 4, 6, 5, 3, 5, 9,10,11,12, 9,10, & ! | + 2, 2, 1, 5, 5, 3, 5, 6, 4, 6, 5, 4, 11,12, 9,10, 9,10, & ! | + 4, 6, 5, 1, 2, 2, 4, 5, 6, 3, 5, 5, 9,10,10, 9,12,11, & ! v slip + 6, 4, 5, 2, 1, 2, 5, 3, 5, 5, 4, 6, 9,10,12,11,10, 9, & + 5, 5, 3, 2, 2, 1, 6, 5, 4, 5, 6, 4, 11,12,10, 9,10, 9, & + 3, 5, 5, 4, 5, 6, 1, 2, 2, 4, 6, 5, 10, 9,10, 9,11,12, & + 5, 4, 6, 5, 3, 5, 2, 1, 2, 6, 4, 5, 10, 9,12,11, 9,10, & + 5, 6, 4, 6, 5, 4, 2, 2, 1, 5, 5, 3, 12,11,10, 9, 9,10, & + 4, 5, 6, 3, 5, 5, 4, 6, 5, 1, 2, 2, 10, 9, 9,10,12,11, & + 5, 3, 5, 5, 4, 6, 6, 4, 5, 2, 1, 2, 10, 9,11,12,10, 9, & + 6, 5, 4, 5, 6, 4, 5, 5, 3, 2, 2, 1, 12,11, 9,10,10, 9, & + + 9, 9,11, 9, 9,11,10,10,12,10,10,12, 1, 7, 8, 8, 8, 8, & + 10,10,12,10,10,12, 9, 9,11, 9, 9,11, 7, 1, 8, 8, 8, 8, & + 9,11, 9,10,12,10,10,12,10, 9,11, 9, 8, 8, 1, 7, 8, 8, & + 10,12,10, 9,11, 9, 9,11, 9,10,12,10, 8, 8, 7, 1, 8, 8, & + 11, 9, 9,12,10,10,11, 9, 9,12,10,10, 8, 8, 8, 8, 1, 7, & + 12,10,10,11, 9, 9,12,10,10,11, 9, 9, 8, 8, 8, 8, 7, 1 & + ],pInt),[LATTICE_fcc_Nslip,LATTICE_fcc_Nslip],order=[2,1]) !< Slip--slip interaction types for fcc !< 1: self interaction !< 2: coplanar interaction !< 3: collinear interaction !< 4: Hirth locks !< 5: glissile junctions !< 6: Lomer locks + !< 7: crossing (similar to Hirth locks in <110>{111} for two {110} planes) + !< 8: similar to Lomer locks in <110>{111} for two {110} planes + !< 9: similar to Lomer locks in <110>{111} btw one {110} and one {111} plane + !<10: similar to glissile junctions in <110>{111} btw one {110} and one {111} plane + !<11: crossing btw one {110} and one {111} plane + !<12: collinear btw one {110} and one {111} plane integer(pInt), dimension(LATTICE_fcc_Nslip,LATTICE_fcc_Ntwin), parameter, public :: & LATTICE_fcc_interactionSlipTwin = reshape(int( [& 1,1,1,3,3,3,2,2,2,3,3,3, & ! ---> twin @@ -198,7 +219,14 @@ module lattice 3,3,3,3,3,3,1,1,1,2,2,2, & 3,3,3,2,2,2,3,3,3,1,1,1, & 2,2,2,3,3,3,3,3,3,1,1,1, & - 3,3,3,3,3,3,2,2,2,1,1,1 & + 3,3,3,3,3,3,2,2,2,1,1,1, & + + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4 & ],pInt),shape(LATTICE_FCC_INTERACTIONSLIPTWIN),order=[2,1]) !< Slip--twin interaction types for fcc !< 1: coplanar interaction !< 2: screw trace between slip system and twin habit plane (easy cross slip) @@ -235,7 +263,14 @@ module lattice 3,3,3,3,3,3,1,1,1,2,2,2, & 3,3,3,2,2,2,3,3,3,1,1,1, & 2,2,2,3,3,3,3,3,3,1,1,1, & - 3,3,3,3,3,3,2,2,2,1,1,1 & + 3,3,3,3,3,3,2,2,2,1,1,1, & + + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4, & + 4,4,4,4,4,4,4,4,4,4,4,4 & ],pInt),shape(LATTICE_FCCTOHEX_INTERACTIONSLIPTRANS),order=[2,1]) !< Slip--trans interaction types for fcc integer(pInt), dimension(LATTICE_fcc_Ntrans,LATTICE_fcc_Nslip), parameter, public :: & diff --git a/src/material.f90 b/src/material.f90 index fc27b0cf4..c9dd28079 100644 --- a/src/material.f90 +++ b/src/material.f90 @@ -169,18 +169,13 @@ module material homogenization_maxNgrains !< max number of grains in any USED homogenization integer(pInt), dimension(:), allocatable, public, protected :: & - material_homogenizationAt, & !< homogenization ID of each element (copy of mesh_homogenizationAt) phase_Nsources, & !< number of source mechanisms active in each phase phase_Nkinematics, & !< number of kinematic mechanisms active in each phase phase_NstiffnessDegradations, & !< number of stiffness degradation mechanisms active in each phase phase_Noutput, & !< number of '(output)' items per phase phase_elasticityInstance, & !< instance of particular elasticity of each phase - phase_plasticityInstance !< instance of particular plasticity of each phase - - integer(pInt), dimension(:), allocatable, public, protected :: & - crystallite_Noutput !< number of '(output)' items per crystallite setting - - integer(pInt), dimension(:), allocatable, public, protected :: & + phase_plasticityInstance, & !< instance of particular plasticity of each phase + crystallite_Noutput, & !< number of '(output)' items per crystallite setting homogenization_Ngrains, & !< number of grains in each homogenization homogenization_Noutput, & !< number of '(output)' items per homogenization homogenization_typeInstance, & !< instance of particular type of each homogenization @@ -189,7 +184,7 @@ module material vacancyflux_typeInstance, & !< instance of particular type of each vacancy flux porosity_typeInstance, & !< instance of particular type of each porosity model hydrogenflux_typeInstance, & !< instance of particular type of each hydrogen flux - microstructure_crystallite !< crystallite setting ID of each microstructure + microstructure_crystallite !< crystallite setting ID of each microstructure ! DEPRECATED !!!! real(pReal), dimension(:), allocatable, public, protected :: & thermal_initialT, & !< initial temperature per each homogenization @@ -198,12 +193,27 @@ module material porosity_initialPhi, & !< initial posority per each homogenization hydrogenflux_initialCh !< initial hydrogen concentration per each homogenization +! NEW MAPPINGS + integer(pInt), dimension(:), allocatable, public, protected :: & + material_homogenizationAt, & !< homogenization ID of each element (copy of mesh_homogenizationAt) + material_homogenizationMemberAt, & !< position of the element within its homogenization instance + material_aggregateAt, & !< aggregate ID of each element FUTURE USE FOR OUTPUT + material_aggregatMemberAt !< position of the element within its aggregate instance FUTURE USE FOR OUTPUT + integer(pInt), dimension(:,:), allocatable, public, protected :: & + material_phaseAt, & !< phase ID of each element + material_phaseMemberAt, & !< position of the element within its phase instance + material_crystalliteAt, & !< crystallite ID of each element CURRENTLY NOT PER CONSTITUTENT + material_crystalliteMemberAt !< position of the element within its crystallite instance CURRENTLY NOT PER CONSTITUTENT +! END NEW MAPPINGS + +! DEPRECATED: use material_phaseAt integer(pInt), dimension(:,:,:), allocatable, public :: & material_phase !< phase (index) of each grain,IP,element -! BEGIN DEPRECATED: use material_homogenizationAt +! DEPRECATED: use material_homogenizationAt integer(pInt), dimension(:,:), allocatable, public :: & material_homog !< homogenization (index) of each IP,element ! END DEPRECATED + type(tPlasticState), allocatable, dimension(:), public :: & plasticState type(tSourceState), allocatable, dimension(:), public :: & @@ -227,10 +237,6 @@ module material microstructure_elemhomo, & !< flag to indicate homogeneous microstructure distribution over element's IPs phase_localPlasticity !< flags phases with local constitutive law - - character(len=65536), dimension(:), allocatable, private :: & - texture_ODFfile !< name of each ODF file - integer(pInt), private :: & microstructure_maxNconstituents, & !< max number of constituents in any phase texture_maxNgauss, & !< max number of Gauss components in any texture @@ -258,11 +264,13 @@ module material logical, dimension(:), allocatable, private :: & homogenization_active +! BEGIN DEPRECATED integer(pInt), dimension(:,:,:), allocatable, public :: phaseAt !< phase ID of every material point (ipc,ip,el) integer(pInt), dimension(:,:,:), allocatable, public :: phasememberAt !< memberID of given phase at every material point (ipc,ip,el) - integer(pInt), dimension(:,:,:), allocatable, public, target :: mappingCrystallite + integer(pInt), dimension(:,:,:), allocatable, public, target :: mappingHomogenization !< mapping from material points to offset in heterogenous state/field - integer(pInt), dimension(:,:), allocatable, public, target :: mappingHomogenizationConst !< mapping from material points to offset in constant state/field + integer(pInt), dimension(:,:), allocatable, private, target :: mappingHomogenizationConst !< mapping from material points to offset in constant state/field +! END DEPRECATED type(tHomogMapping), allocatable, dimension(:), public :: & thermalMapping, & !< mapping for thermal state/fields @@ -368,7 +376,6 @@ subroutine material_init() use mesh, only: & mesh_homogenizationAt, & mesh_NipsPerElem, & - mesh_maxNips, & mesh_NcpElems, & FE_geomtype @@ -378,11 +385,10 @@ subroutine material_init() integer(pInt) :: & g, & !< grain number i, & !< integration point number - e, & !< element number - phase - integer(pInt), dimension(:), allocatable :: ConstitutivePosition - integer(pInt), dimension(:), allocatable :: CrystallitePosition - integer(pInt), dimension(:), allocatable :: HomogenizationPosition + e !< element number + integer(pInt), dimension(:), allocatable :: & + CounterPhase, & + CounterHomogenization myDebug = debug_level(debug_material) @@ -473,30 +479,34 @@ subroutine material_init() call material_populateGrains - allocate(phaseAt ( homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems),source=0_pInt) - allocate(phasememberAt ( homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems),source=0_pInt) - allocate(mappingHomogenization (2, mesh_maxNips,mesh_NcpElems),source=0_pInt) - allocate(mappingCrystallite (2,homogenization_maxNgrains, mesh_NcpElems),source=0_pInt) - allocate(mappingHomogenizationConst( mesh_maxNips,mesh_NcpElems),source=1_pInt) +! BEGIN DEPRECATED + allocate(phaseAt ( homogenization_maxNgrains,mesh_nIPsPerElem,mesh_NcpElems),source=0_pInt) + allocate(phasememberAt ( homogenization_maxNgrains,mesh_nIPsPerElem,mesh_NcpElems),source=0_pInt) + allocate(mappingHomogenization (2, mesh_nIPsPerElem,mesh_NcpElems),source=0_pInt) + allocate(mappingHomogenizationConst( mesh_nIPsPerElem,mesh_NcpElems),source=1_pInt) +! END DEPRECATED - allocate(ConstitutivePosition (size(config_phase)), source=0_pInt) - allocate(HomogenizationPosition(size(config_homogenization)),source=0_pInt) - allocate(CrystallitePosition (size(config_phase)), source=0_pInt) + allocate(material_homogenizationAt,source=mesh_homogenizationAt) + allocate(CounterPhase (size(config_phase)), source=0_pInt) + allocate(CounterHomogenization(size(config_homogenization)),source=0_pInt) - ElemLoop:do e = 1_pInt,mesh_NcpElems +! BEGIN DEPRECATED + do e = 1_pInt,mesh_NcpElems myHomog = mesh_homogenizationAt(e) - IPloop:do i = 1_pInt, mesh_NipsPerElem - HomogenizationPosition(myHomog) = HomogenizationPosition(myHomog) + 1_pInt - mappingHomogenization(1:2,i,e) = [HomogenizationPosition(myHomog),myHomog] - GrainLoop:do g = 1_pInt,homogenization_Ngrains(myHomog) - phase = material_phase(g,i,e) - ConstitutivePosition(phase) = ConstitutivePosition(phase)+1_pInt ! not distinguishing between instances of same phase - phaseAt(g,i,e) = phase - phasememberAt(g,i,e) = ConstitutivePosition(phase) - enddo GrainLoop - enddo IPloop - enddo ElemLoop + do i = 1_pInt, mesh_NipsPerElem + CounterHomogenization(myHomog) = CounterHomogenization(myHomog) + 1_pInt + mappingHomogenization(1:2,i,e) = [CounterHomogenization(myHomog),myHomog] + do g = 1_pInt,homogenization_Ngrains(myHomog) + myPhase = material_phase(g,i,e) + CounterPhase(myPhase) = CounterPhase(myPhase)+1_pInt ! not distinguishing between instances of same phase + phaseAt(g,i,e) = myPhase + phasememberAt(g,i,e) = CounterPhase(myPhase) + enddo + enddo + enddo +! END DEPRECATED +! REMOVE !!!!! ! hack needed to initialize field values used during constitutive and crystallite initializations do myHomog = 1,size(config_homogenization) thermalMapping (myHomog)%p => mappingHomogenizationConst @@ -513,7 +523,7 @@ subroutine material_init() allocate(vacancyConcRate (myHomog)%p(1), source=0.0_pReal) allocate(hydrogenConcRate(myHomog)%p(1), source=0.0_pReal) enddo - + end subroutine material_init @@ -937,9 +947,7 @@ subroutine material_parseTexture integer(pInt) :: section, gauss, fiber, j, t, i character(len=65536), dimension(:), allocatable :: strings ! Values for given key in material config integer(pInt), dimension(:), allocatable :: chunkPos - character(len=65536) :: tag - allocate(texture_ODFfile(size(config_texture))); texture_ODFfile='' allocate(texture_symmetry(size(config_texture)), source=1_pInt) allocate(texture_Ngauss(size(config_texture)), source=0_pInt) allocate(texture_Nfiber(size(config_texture)), source=0_pInt) @@ -985,9 +993,6 @@ subroutine material_parseTexture if(dNeq(math_det33(texture_transformation(1:3,1:3,t)),1.0_pReal)) call IO_error(157_pInt,t) endif - tag='' - texture_ODFfile(t) = config_texture(t)%getString('hybridia',defaultVal=tag) - if (config_texture(t)%keyExists('symmetry')) then select case (config_texture(t)%getString('symmetry')) case('orthotropic') @@ -1122,7 +1127,7 @@ end subroutine material_allocatePlasticState !-------------------------------------------------------------------------------------------------- !> @brief populates the grains !> @details populates the grains by identifying active microstructure/homogenization pairs, -!! calculates the volume of the grains and deals with texture components and hybridIA +!! calculates the volume of the grains and deals with texture components !-------------------------------------------------------------------------------------------------- subroutine material_populateGrains use prec, only: & @@ -1141,7 +1146,6 @@ subroutine material_populateGrains mesh_elemType, & mesh_homogenizationAt, & mesh_microstructureAt, & - mesh_maxNips, & mesh_NcpElems, & mesh_ipVolume, & FE_geomtype @@ -1152,8 +1156,7 @@ subroutine material_populateGrains homogenization_name, & microstructure_name use IO, only: & - IO_error, & - IO_hybridIA + IO_error use debug, only: & debug_level, & debug_material, & @@ -1181,12 +1184,11 @@ subroutine material_populateGrains myDebug = debug_level(debug_material) - allocate(material_volume(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), source=0.0_pReal) - allocate(material_phase(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), source=0_pInt) - allocate(material_homog(mesh_maxNips,mesh_NcpElems), source=0_pInt) - allocate(material_homogenizationAt,source=mesh_homogenizationAt) - allocate(material_texture(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), source=0_pInt) - allocate(material_EulerAngles(3,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems),source=0.0_pReal) + allocate(material_volume(homogenization_maxNgrains,mesh_nIPsPerElem,mesh_NcpElems), source=0.0_pReal) + allocate(material_phase(homogenization_maxNgrains,mesh_nIPsPerElem,mesh_NcpElems), source=0_pInt) + allocate(material_homog(mesh_nIPsPerElem,mesh_NcpElems), source=0_pInt) + allocate(material_texture(homogenization_maxNgrains,mesh_nIPsPerElem,mesh_NcpElems), source=0_pInt) + allocate(material_EulerAngles(3,homogenization_maxNgrains,mesh_nIPsPerElem,mesh_NcpElems),source=0.0_pReal) allocate(Ngrains(size(config_homogenization),size(config_microstructure)), source=0_pInt) allocate(Nelems (size(config_homogenization),size(config_microstructure)), source=0_pInt) @@ -1330,39 +1332,31 @@ subroutine material_populateGrains real(texture_symmetry(textureID),pReal),pInt) ! max number of unique orientations (excl. symmetry) !-------------------------------------------------------------------------------------------------- -! ...has texture components - if (texture_ODFfile(textureID) == '') then - gauss: do t = 1_pInt,texture_Ngauss(textureID) ! loop over Gauss components - do g = 1_pInt,int(real(myNorientations,pReal)*texture_Gauss(5,t,textureID),pInt) ! loop over required grain count - orientationOfGrain(:,grain+constituentGrain+g) = & - math_sampleGaussOri(texture_Gauss(1:3,t,textureID),& - texture_Gauss( 4,t,textureID)) - enddo - constituentGrain = & - constituentGrain + int(real(myNorientations,pReal)*texture_Gauss(5,t,textureID)) ! advance counter for grains of current constituent - enddo gauss +! has texture components + gauss: do t = 1_pInt,texture_Ngauss(textureID) ! loop over Gauss components + do g = 1_pInt,int(real(myNorientations,pReal)*texture_Gauss(5,t,textureID),pInt) ! loop over required grain count + orientationOfGrain(:,grain+constituentGrain+g) = & + math_sampleGaussOri(texture_Gauss(1:3,t,textureID),& + texture_Gauss( 4,t,textureID)) + enddo + constituentGrain = & + constituentGrain + int(real(myNorientations,pReal)*texture_Gauss(5,t,textureID)) ! advance counter for grains of current constituent + enddo gauss - fiber: do t = 1_pInt,texture_Nfiber(textureID) ! loop over fiber components - do g = 1_pInt,int(real(myNorientations,pReal)*texture_Fiber(6,t,textureID),pInt) ! loop over required grain count - orientationOfGrain(:,grain+constituentGrain+g) = & - math_sampleFiberOri(texture_Fiber(1:2,t,textureID),& - texture_Fiber(3:4,t,textureID),& - texture_Fiber( 5,t,textureID)) - enddo - constituentGrain = & - constituentGrain + int(real(myNorientations,pReal)*texture_fiber(6,t,textureID),pInt) ! advance counter for grains of current constituent - enddo fiber + fiber: do t = 1_pInt,texture_Nfiber(textureID) ! loop over fiber components + do g = 1_pInt,int(real(myNorientations,pReal)*texture_Fiber(6,t,textureID),pInt) ! loop over required grain count + orientationOfGrain(:,grain+constituentGrain+g) = & + math_sampleFiberOri(texture_Fiber(1:2,t,textureID),& + texture_Fiber(3:4,t,textureID),& + texture_Fiber( 5,t,textureID)) + enddo + constituentGrain = & + constituentGrain + int(real(myNorientations,pReal)*texture_fiber(6,t,textureID),pInt) ! advance counter for grains of current constituent + enddo fiber - random: do constituentGrain = constituentGrain+1_pInt,myNorientations ! fill remainder with random - orientationOfGrain(:,grain+constituentGrain) = math_sampleRandomOri() - enddo random -!-------------------------------------------------------------------------------------------------- -! ...has hybrid IA - else - orientationOfGrain(1:3,grain+1_pInt:grain+myNorientations) = & - IO_hybridIA(myNorientations,texture_ODFfile(textureID)) - if (all(dEq(orientationOfGrain(1:3,grain+1_pInt),-1.0_pReal))) call IO_error(156_pInt) - endif + random: do constituentGrain = constituentGrain+1_pInt,myNorientations ! fill remainder with random + orientationOfGrain(:,grain+constituentGrain) = math_sampleRandomOri() + enddo random !-------------------------------------------------------------------------------------------------- ! ...texture transformation @@ -1479,12 +1473,7 @@ subroutine material_populateGrains enddo microstructureLoop enddo homogenizationLoop - deallocate(volumeOfGrain) - deallocate(phaseOfGrain) - deallocate(textureOfGrain) - deallocate(orientationOfGrain) deallocate(texture_transformation) - deallocate(Nelems) deallocate(elemsOfHomogMicro) call config_deallocate('material.config/microstructure') diff --git a/src/math.f90 b/src/math.f90 index 440ee5303..725c0446e 100644 --- a/src/math.f90 +++ b/src/math.f90 @@ -302,7 +302,7 @@ subroutine math_check endif end subroutine math_check - + !-------------------------------------------------------------------------------------------------- !> @brief Quicksort algorithm for two-dimensional integer arrays @@ -2625,12 +2625,9 @@ real(pReal) pure function math_clip(a, left, right) real(pReal), intent(in) :: a real(pReal), intent(in), optional :: left, right - - math_clip = min ( & - max (merge(left, -huge(a), present(left)), a), & - merge(right, huge(a), present(right)) & - ) - + math_clip = a + if (present(left)) math_clip = max(left,math_clip) + if (present(right)) math_clip = min(right,math_clip) if (present(left) .and. present(right)) & math_clip = merge (IEEE_value(1.0_pReal,IEEE_quiet_NaN),math_clip, left>right) diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 2ed8ebfdf..00534d251 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -1,3 +1,8 @@ +!-------------------------------------------------------------------------------------------------- +!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH +!> @author Su Leen Wong, Max-Planck-Institut für Eisenforschung GmbH +!> @author Nan Jia, Max-Planck-Institut für Eisenforschung GmbH +!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH !> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH !> @brief material subroutine incoprorating dislocation and twinning physics !> @details to be done @@ -6,160 +11,147 @@ module plastic_dislotwin use prec, only: & pReal, & pInt - + implicit none private - integer(pInt), dimension(:), allocatable, public, protected :: & - plastic_dislotwin_sizePostResults !< cumulative size of post results - integer(pInt), dimension(:,:), allocatable, target, public :: & plastic_dislotwin_sizePostResult !< size of each post result output - character(len=64), dimension(:,:), allocatable, target, public :: & plastic_dislotwin_output !< name of each post result output - + real(pReal), parameter, private :: & kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin - integer(pInt), dimension(:), allocatable, target, public :: & - plastic_dislotwin_Noutput !< number of outputs per instance of this plasticity - - integer(pInt), dimension(:), allocatable, public, protected :: & - plastic_dislotwin_totalNslip, & !< total number of active slip systems for each instance - plastic_dislotwin_totalNtwin, & !< total number of active twin systems for each instance - plastic_dislotwin_totalNtrans !< number of active transformation systems - - integer(pInt), dimension(:,:), allocatable, private :: & - plastic_dislotwin_Nslip, & !< number of active slip systems for each family and instance - plastic_dislotwin_Ntwin, & !< number of active twin systems for each family and instance - plastic_dislotwin_Ntrans !< number of active transformation systems for each family and instance - - real(pReal), dimension(:), allocatable, private :: & - plastic_dislotwin_CAtomicVolume, & !< atomic volume in Bugers vector unit - plastic_dislotwin_D0, & !< prefactor for self-diffusion coefficient - plastic_dislotwin_Qsd, & !< activation energy for dislocation climb - plastic_dislotwin_GrainSize, & !< grain size - plastic_dislotwin_pShearBand, & !< p-exponent in shearband velocity - plastic_dislotwin_qShearBand, & !< q-exponent in shearband velocity - plastic_dislotwin_MaxTwinFraction, & !< maximum allowed total twin volume fraction - plastic_dislotwin_CEdgeDipMinDistance, & !< - plastic_dislotwin_Cmfptwin, & !< - plastic_dislotwin_Cthresholdtwin, & !< - plastic_dislotwin_SolidSolutionStrength, & !< Strength due to elements in solid solution - plastic_dislotwin_L0_twin, & !< Length of twin nuclei in Burgers vectors - plastic_dislotwin_L0_trans, & !< Length of trans nuclei in Burgers vectors - plastic_dislotwin_xc_twin, & !< critical distance for formation of twin nucleus - plastic_dislotwin_xc_trans, & !< critical distance for formation of trans nucleus - plastic_dislotwin_VcrossSlip, & !< cross slip volume - plastic_dislotwin_sbResistance, & !< value for shearband resistance (might become an internal state variable at some point) - plastic_dislotwin_sbVelocity, & !< value for shearband velocity_0 - plastic_dislotwin_sbQedge, & !< value for shearband systems Qedge - plastic_dislotwin_SFE_0K, & !< stacking fault energy at zero K - plastic_dislotwin_dSFE_dT, & !< temperature dependance of stacking fault energy - plastic_dislotwin_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful - plastic_dislotwin_aTolRho, & !< absolute tolerance for integration of dislocation density - plastic_dislotwin_aTolTwinFrac, & !< absolute tolerance for integration of twin volume fraction - plastic_dislotwin_aTolTransFrac, & !< absolute tolerance for integration of trans volume fraction - plastic_dislotwin_deltaG, & !< Free energy difference between austensite and martensite - plastic_dislotwin_Cmfptrans, & !< - plastic_dislotwin_Cthresholdtrans, & !< - plastic_dislotwin_transStackHeight !< Stack height of hex nucleus - - real(pReal), dimension(:,:,:,:), allocatable, private :: & - plastic_dislotwin_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance - real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & - plastic_dislotwin_Ctwin3333 !< twin elasticity matrix for each instance - real(pReal), dimension(:,:,:,:), allocatable, private :: & - plastic_dislotwin_Ctrans66 !< trans elasticity matrix in Mandel notation for each instance - real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & - plastic_dislotwin_Ctrans3333 !< trans elasticity matrix for each instance - real(pReal), dimension(:,:), allocatable, private :: & - plastic_dislotwin_rhoEdge0, & !< initial edge dislocation density per slip system for each family and instance - plastic_dislotwin_rhoEdgeDip0, & !< initial edge dipole density per slip system for each family and instance - plastic_dislotwin_burgersPerSlipFamily, & !< absolute length of burgers vector [m] for each slip family and instance - plastic_dislotwin_burgersPerSlipSystem, & !< absolute length of burgers vector [m] for each slip system and instance - plastic_dislotwin_burgersPerTwinFamily, & !< absolute length of burgers vector [m] for each twin family and instance - plastic_dislotwin_burgersPerTwinSystem, & !< absolute length of burgers vector [m] for each twin system and instance - plastic_dislotwin_burgersPerTransFamily, & !< absolute length of burgers vector [m] for each trans family and instance - plastic_dislotwin_burgersPerTransSystem, & !< absolute length of burgers vector [m] for each trans system and instance - plastic_dislotwin_QedgePerSlipFamily, & !< activation energy for glide [J] for each slip family and instance - plastic_dislotwin_QedgePerSlipSystem, & !< activation energy for glide [J] for each slip system and instance - plastic_dislotwin_v0PerSlipFamily, & !< dislocation velocity prefactor [m/s] for each family and instance - plastic_dislotwin_v0PerSlipSystem, & !< dislocation velocity prefactor [m/s] for each slip system and instance - plastic_dislotwin_tau_peierlsPerSlipFamily, & !< Peierls stress [Pa] for each family and instance - plastic_dislotwin_Ndot0PerTwinFamily, & !< twin nucleation rate [1/m³s] for each twin family and instance - plastic_dislotwin_Ndot0PerTwinSystem, & !< twin nucleation rate [1/m³s] for each twin system and instance - plastic_dislotwin_Ndot0PerTransFamily, & !< trans nucleation rate [1/m³s] for each trans family and instance - plastic_dislotwin_Ndot0PerTransSystem, & !< trans nucleation rate [1/m³s] for each trans system and instance - plastic_dislotwin_tau_r_twin, & !< stress to bring partial close together for each twin system and instance - plastic_dislotwin_tau_r_trans, & !< stress to bring partial close together for each trans system and instance - plastic_dislotwin_twinsizePerTwinFamily, & !< twin thickness [m] for each twin family and instance - plastic_dislotwin_twinsizePerTwinSystem, & !< twin thickness [m] for each twin system and instance - plastic_dislotwin_CLambdaSlipPerSlipFamily, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance - plastic_dislotwin_CLambdaSlipPerSlipSystem, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance - plastic_dislotwin_lamellarsizePerTransFamily, & !< martensite lamellar thickness [m] for each trans family and instance - plastic_dislotwin_lamellarsizePerTransSystem, & !< martensite lamellar thickness [m] for each trans system and instance - plastic_dislotwin_interaction_SlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance - plastic_dislotwin_interaction_SlipTwin, & !< coefficients for slip-twin interaction for each interaction type and instance - plastic_dislotwin_interaction_TwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance - plastic_dislotwin_interaction_TwinTwin, & !< coefficients for twin-twin interaction for each interaction type and instance - plastic_dislotwin_interaction_SlipTrans, & !< coefficients for slip-trans interaction for each interaction type and instance - plastic_dislotwin_interaction_TransSlip, & !< coefficients for trans-slip interaction for each interaction type and instance - plastic_dislotwin_interaction_TransTrans, & !< coefficients for trans-trans interaction for each interaction type and instance - plastic_dislotwin_pPerSlipFamily, & !< p-exponent in glide velocity - plastic_dislotwin_qPerSlipFamily, & !< q-exponent in glide velocity - plastic_dislotwin_rPerTwinFamily, & !< r-exponent in twin nucleation rate - plastic_dislotwin_sPerTransFamily !< s-exponent in trans nucleation rate - real(pReal), dimension(:,:,:), allocatable, private :: & - plastic_dislotwin_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance - plastic_dislotwin_interactionMatrix_SlipTwin, & !< interaction matrix of slip systems with twin systems for each instance - plastic_dislotwin_interactionMatrix_TwinSlip, & !< interaction matrix of twin systems with slip systems for each instance - plastic_dislotwin_interactionMatrix_TwinTwin, & !< interaction matrix of the different twin systems for each instance - plastic_dislotwin_interactionMatrix_SlipTrans, & !< interaction matrix of slip systems with trans systems for each instance - plastic_dislotwin_interactionMatrix_TransSlip, & !< interaction matrix of trans systems with slip systems for each instance - plastic_dislotwin_interactionMatrix_TransTrans, & !< interaction matrix of the different trans systems for each instance - plastic_dislotwin_forestProjectionEdge, & !< matrix of forest projections of edge dislocations for each instance - plastic_dislotwin_projectionMatrix_Trans !< matrix for projection of slip system shear on fault band (twin) systems for each instance - - real(pReal), dimension(:,:,:,:,:), allocatable, private :: & - plastic_dislotwin_sbSv - enum, bind(c) - enumerator :: undefined_ID, & - edge_density_ID, & - dipole_density_ID, & - shear_rate_slip_ID, & - accumulated_shear_slip_ID, & - mfp_slip_ID, & - resolved_stress_slip_ID, & - threshold_stress_slip_ID, & - edge_dipole_distance_ID, & - stress_exponent_ID, & - twin_fraction_ID, & - shear_rate_twin_ID, & - accumulated_shear_twin_ID, & - mfp_twin_ID, & - resolved_stress_twin_ID, & - threshold_stress_twin_ID, & - resolved_stress_shearband_ID, & - shear_rate_shearband_ID, & - sb_eigenvalues_ID, & - sb_eigenvectors_ID, & - stress_trans_fraction_ID, & - strain_trans_fraction_ID, & - trans_fraction_ID + enumerator :: & + undefined_ID, & + edge_density_ID, & + dipole_density_ID, & + shear_rate_slip_ID, & + accumulated_shear_slip_ID, & + mfp_slip_ID, & + resolved_stress_slip_ID, & + threshold_stress_slip_ID, & + edge_dipole_distance_ID, & + stress_exponent_ID, & + twin_fraction_ID, & + shear_rate_twin_ID, & + accumulated_shear_twin_ID, & + mfp_twin_ID, & + resolved_stress_twin_ID, & + threshold_stress_twin_ID, & + resolved_stress_shearband_ID, & + shear_rate_shearband_ID, & + stress_trans_fraction_ID, & + strain_trans_fraction_ID end enum - integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & - plastic_dislotwin_outputID !< ID of each post result output + + type, private :: tParameters + real(pReal) :: & + mu, & + nu, & + CAtomicVolume, & !< atomic volume in Bugers vector unit + D0, & !< prefactor for self-diffusion coefficient + Qsd, & !< activation energy for dislocation climb + GrainSize, & !>>' write(6,'(/,a)') ' A. Ma and F. Roters, Acta Materialia, 52(12):3603–3612, 2004' - write(6,'(/,a)') ' https://doi.org/10.1016/j.actamat.2004.04.012' + write(6,'(a)') ' https://doi.org/10.1016/j.actamat.2004.04.012' write(6,'(/,a)') ' F.Roters et al., Computational Materials Science, 39:91–95, 2007' - write(6,'(/,a)') ' https://doi.org/10.1016/j.commatsci.2006.04.014' + write(6,'(a)') ' https://doi.org/10.1016/j.commatsci.2006.04.014' write(6,'(/,a)') ' Wong et al., Acta Materialia, 118:140–151, 2016' - write(6,'(/,a)') ' https://doi.org/10.1016/j.actamat.2016.07.032' + write(6,'(a,/)') ' https://doi.org/10.1016/j.actamat.2016.07.032' write(6,'(a15,a)') ' Current time: ',IO_timeStamp() #include "compilation_info.f90" - maxNinstance = int(count(phase_plasticity == PLASTICITY_DISLOTWIN_ID),pInt) - if (maxNinstance == 0_pInt) return + Ninstance = int(count(phase_plasticity == PLASTICITY_DISLOTWIN_ID),pInt) + if (Ninstance == 0_pInt) return if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & - write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance + write(6,'(a16,1x,i5,/)') '# instances:',Ninstance - allocate(plastic_dislotwin_sizePostResults(maxNinstance), source=0_pInt) - allocate(plastic_dislotwin_sizePostResult(maxval(phase_Noutput),maxNinstance),source=0_pInt) - allocate(plastic_dislotwin_output(maxval(phase_Noutput),maxNinstance)) + + allocate(plastic_dislotwin_sizePostResult(maxval(phase_Noutput),Ninstance),source=0_pInt) + allocate(plastic_dislotwin_output(maxval(phase_Noutput),Ninstance)) plastic_dislotwin_output = '' - allocate(plastic_dislotwin_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) - allocate(plastic_dislotwin_Noutput(maxNinstance), source=0_pInt) - allocate(plastic_dislotwin_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) - allocate(plastic_dislotwin_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) - allocate(plastic_dislotwin_Ntrans(lattice_maxNtransFamily,maxNinstance), source=0_pInt) - allocate(plastic_dislotwin_totalNslip(maxNinstance), source=0_pInt) - allocate(plastic_dislotwin_totalNtwin(maxNinstance), source=0_pInt) - allocate(plastic_dislotwin_totalNtrans(maxNinstance), source=0_pInt) - allocate(plastic_dislotwin_CAtomicVolume(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_D0(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Qsd(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_GrainSize(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_pShearBand(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_qShearBand(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_MaxTwinFraction(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Cmfptwin(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Cthresholdtwin(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_SolidSolutionStrength(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_L0_twin(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_L0_trans(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_xc_twin(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_xc_trans(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_VcrossSlip(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_aTolRho(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_aTolTwinFrac(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_aTolTransFrac(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_sbResistance(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_sbVelocity(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_sbQedge(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_SFE_0K(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_dSFE_dT(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default - allocate(plastic_dislotwin_deltaG(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Cmfptrans(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Cthresholdtrans(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_transStackHeight(maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_burgersPerTransFamily(lattice_maxNtransFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_tau_peierlsPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(plastic_dislotwin_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(plastic_dislotwin_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_Ndot0PerTransFamily(lattice_maxNtransFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_rPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) - allocate(plastic_dislotwin_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_interaction_SlipTrans(lattice_maxNinteraction,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_interaction_TransSlip(lattice_maxNinteraction,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_interaction_TransTrans(lattice_maxNinteraction,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_sbSv(6,6,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), & - source=0.0_pReal) - allocate(plastic_dislotwin_lamellarsizePerTransFamily(lattice_maxNtransFamily,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_sPerTransFamily(lattice_maxNtransFamily,maxNinstance),source=0.0_pReal) + + allocate(param(Ninstance)) + allocate(state(Ninstance)) + allocate(dotState(Ninstance)) + allocate(microstructure(Ninstance)) + + do p = 1_pInt, size(phase_plasticityInstance) + if (phase_plasticity(p) /= PLASTICITY_DISLOTWIN_ID) cycle + associate(prm => param(phase_plasticityInstance(p)), & + dot => dotState(phase_plasticityInstance(p)), & + stt => state(phase_plasticityInstance(p)), & + mse => microstructure(phase_plasticityInstance(p))) + + ! This data is read in already in lattice + prm%isFCC = merge(.true., .false., lattice_structure(p) == LATTICE_FCC_ID) + prm%mu = lattice_mu(p) + prm%nu = lattice_nu(p) + prm%C66 = lattice_C66(1:6,1:6,p) + + structure = config_phase(p)%getString('lattice_structure') - rewind(fileUnit) - phase = 0_pInt - do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= MATERIAL_partPhase) ! wind forward to - line = IO_read(fileUnit) - enddo - - parsingFile: do while (trim(line) /= IO_EOF) ! read through sections of phase part - line = IO_read(fileUnit) - if (IO_isBlank(line)) cycle ! skip empty lines - if (IO_getTag(line,'<','>') /= '') then ! stop at next part - line = IO_read(fileUnit, .true.) ! reset IO_read - exit - endif - if (IO_getTag(line,'[',']') /= '') then ! next phase section - phase = phase + 1_pInt ! advance phase section counter - if (phase_plasticity(phase) == PLASTICITY_DISLOTWIN_ID) then - Nchunks_SlipFamilies = count(lattice_NslipSystem(:,phase) > 0_pInt) - Nchunks_TwinFamilies = count(lattice_NtwinSystem(:,phase) > 0_pInt) - Nchunks_TransFamilies = count(lattice_NtransSystem(:,phase)> 0_pInt) - Nchunks_SlipSlip = maxval(lattice_interactionSlipSlip(:,:,phase)) - Nchunks_SlipTwin = maxval(lattice_interactionSlipTwin(:,:,phase)) - Nchunks_TwinSlip = maxval(lattice_interactionTwinSlip(:,:,phase)) - Nchunks_TwinTwin = maxval(lattice_interactionTwinTwin(:,:,phase)) - Nchunks_SlipTrans = maxval(lattice_interactionSlipTrans(:,:,phase)) - Nchunks_TransSlip = maxval(lattice_interactionTransSlip(:,:,phase)) - Nchunks_TransTrans = maxval(lattice_interactionTransTrans(:,:,phase)) - if(allocated(tempPerSlip)) deallocate(tempPerSlip) - if(allocated(tempPerTwin)) deallocate(tempPerTwin) - if(allocated(tempPerTrans)) deallocate(tempPerTrans) - allocate(tempPerSlip(Nchunks_SlipFamilies)) - allocate(tempPerTwin(Nchunks_TwinFamilies)) - allocate(tempPerTrans(Nchunks_TransFamilies)) +!-------------------------------------------------------------------------------------------------- +! slip related parameters + prm%Nslip = config_phase(p)%getInts('nslip',defaultVal=emptyIntArray) + prm%totalNslip = sum(prm%Nslip) + slipActive: if (prm%totalNslip > 0_pInt) then + prm%Schmid_slip = lattice_SchmidMatrix_slip(prm%Nslip,structure(1:3),& + config_phase(p)%getFloat('c/a',defaultVal=0.0_pReal)) + prm%interaction_SlipSlip = lattice_interaction_SlipSlip(prm%Nslip, & + config_phase(p)%getFloats('interaction_slipslip'), & + structure(1:3)) + + prm%rho0 = config_phase(p)%getFloats('rhoedge0', requiredShape=shape(prm%Nslip)) !ToDo: rename to rho_0 + prm%rhoDip0 = config_phase(p)%getFloats('rhoedgedip0',requiredShape=shape(prm%Nslip)) !ToDo: rename to rho_dip_0 + prm%v0 = config_phase(p)%getFloats('v0', requiredShape=shape(prm%Nslip)) + prm%burgers_slip = config_phase(p)%getFloats('slipburgers',requiredShape=shape(prm%Nslip)) + prm%Qedge = config_phase(p)%getFloats('qedge', requiredShape=shape(prm%Nslip)) !ToDo: rename (ask Karo) + prm%CLambdaSlip = config_phase(p)%getFloats('clambdaslip',requiredShape=shape(prm%Nslip)) + prm%p = config_phase(p)%getFloats('p_slip', requiredShape=shape(prm%Nslip)) + prm%q = config_phase(p)%getFloats('q_slip', requiredShape=shape(prm%Nslip)) + prm%B = config_phase(p)%getFloats('b', requiredShape=shape(prm%Nslip), & + defaultVal=[(0.0_pReal, i=1,size(prm%Nslip))]) + prm%tau_peierls = config_phase(p)%getFloats('tau_peierls',requiredShape=shape(prm%Nslip), & + defaultVal=[(0.0_pReal, i=1,size(prm%Nslip))]) + + prm%CEdgeDipMinDistance = config_phase(p)%getFloat('cedgedipmindistance') + + ! expand: family => system + prm%rho0 = math_expand(prm%rho0, prm%Nslip) + prm%rhoDip0 = math_expand(prm%rhoDip0, prm%Nslip) + prm%v0 = math_expand(prm%v0, prm%Nslip) + prm%burgers_slip = math_expand(prm%burgers_slip,prm%Nslip) + prm%Qedge = math_expand(prm%Qedge, prm%Nslip) + prm%CLambdaSlip = math_expand(prm%CLambdaSlip, prm%Nslip) + prm%p = math_expand(prm%p, prm%Nslip) + prm%q = math_expand(prm%q, prm%Nslip) + prm%B = math_expand(prm%B, prm%Nslip) + prm%tau_peierls = math_expand(prm%tau_peierls, prm%Nslip) + + ! sanity checks + if (any(prm%rho0 < 0.0_pReal)) extmsg = trim(extmsg)//'rho0 ' + if (any(prm%rhoDip0 < 0.0_pReal)) extmsg = trim(extmsg)//'rhoDip0 ' + if (any(prm%v0 < 0.0_pReal)) extmsg = trim(extmsg)//'v0 ' + if (any(prm%burgers_slip <= 0.0_pReal)) extmsg = trim(extmsg)//'burgers_slip ' + if (any(prm%Qedge <= 0.0_pReal)) extmsg = trim(extmsg)//'Qedge ' + if (any(prm%CLambdaSlip <= 0.0_pReal)) extmsg = trim(extmsg)//'CLambdaSlip ' + if (any(prm%B < 0.0_pReal)) extmsg = trim(extmsg)//'B ' + if (any(prm%tau_peierls < 0.0_pReal)) extmsg = trim(extmsg)//'tau_peierls ' + if (any(prm%p<=0.0_pReal .or. prm%p>1.0_pReal)) extmsg = trim(extmsg)//'p ' + if (any(prm%q< 1.0_pReal .or. prm%q>2.0_pReal)) extmsg = trim(extmsg)//'q ' + + else slipActive + allocate(prm%burgers_slip(0)) + endif slipActive + +!-------------------------------------------------------------------------------------------------- +! twin related parameters + prm%Ntwin = config_phase(p)%getInts('ntwin', defaultVal=emptyIntArray) + prm%totalNtwin = sum(prm%Ntwin) + if (prm%totalNtwin > 0_pInt) then + prm%Schmid_twin = lattice_SchmidMatrix_twin(prm%Ntwin,structure(1:3),& + config_phase(p)%getFloat('c/a',defaultVal=0.0_pReal)) + prm%interaction_TwinTwin = lattice_interaction_TwinTwin(prm%Ntwin,& + config_phase(p)%getFloats('interaction_twintwin'), & + structure(1:3)) + + prm%burgers_twin = config_phase(p)%getFloats('twinburgers') + prm%twinsize = config_phase(p)%getFloats('twinsize') + prm%r = config_phase(p)%getFloats('r_twin') + + prm%xc_twin = config_phase(p)%getFloat('xc_twin') + prm%L0_twin = config_phase(p)%getFloat('l0_twin') + prm%MaxTwinFraction = config_phase(p)%getFloat('maxtwinfraction') ! ToDo: only used in postResults + prm%Cthresholdtwin = config_phase(p)%getFloat('cthresholdtwin', defaultVal=0.0_pReal) + prm%Cmfptwin = config_phase(p)%getFloat('cmfptwin', defaultVal=0.0_pReal) ! ToDo: How to handle that??? + + + if (.not. prm%isFCC) then + prm%Ndot0_twin = config_phase(p)%getFloats('ndot0_twin') + prm%Ndot0_twin = math_expand(prm%Ndot0_twin,prm%Ntwin) endif - cycle ! skip to next line + + ! expand: family => system + prm%burgers_twin = math_expand(prm%burgers_twin,prm%Ntwin) + prm%twinsize = math_expand(prm%twinsize,prm%Ntwin) + prm%r = math_expand(prm%r,prm%Ntwin) + + else + allocate(prm%twinsize(0)) + allocate(prm%burgers_twin(0)) + allocate(prm%r(0)) + endif + +!-------------------------------------------------------------------------------------------------- +! transformation related parameters + prm%Ntrans = config_phase(p)%getInts('ntrans', defaultVal=emptyIntArray) + prm%totalNtrans = sum(prm%Ntrans) + if (prm%totalNtrans > 0_pInt) then + prm%burgers_trans = config_phase(p)%getFloats('transburgers') + prm%burgers_trans = math_expand(prm%burgers_trans,prm%Ntrans) + + prm%Cthresholdtrans = config_phase(p)%getFloat('cthresholdtrans', defaultVal=0.0_pReal) ! ToDo: How to handle that??? + prm%transStackHeight = config_phase(p)%getFloat('transstackheight', defaultVal=0.0_pReal) ! ToDo: How to handle that??? + prm%Cmfptrans = config_phase(p)%getFloat('cmfptrans', defaultVal=0.0_pReal) ! ToDo: How to handle that??? + prm%deltaG = config_phase(p)%getFloat('deltag') + prm%xc_trans = config_phase(p)%getFloat('xc_trans', defaultVal=0.0_pReal) ! ToDo: How to handle that??? + prm%L0_trans = config_phase(p)%getFloat('l0_trans') + + prm%interaction_TransTrans = spread(config_phase(p)%getFloats('interaction_transtrans'),2,1) + if (lattice_structure(p) /= LATTICE_fcc_ID) then + prm%Ndot0_trans = config_phase(p)%getFloats('ndot0_trans') + prm%Ndot0_trans = math_expand(prm%Ndot0_trans,prm%Ntrans) + endif + prm%lamellarsizePerTransSystem = config_phase(p)%getFloats('lamellarsize') + prm%lamellarsizePerTransSystem = math_expand(prm%lamellarsizePerTransSystem,prm%Ntrans) + prm%s = config_phase(p)%getFloats('s_trans',defaultVal=[0.0_pReal]) + prm%s = math_expand(prm%s,prm%Ntrans) + else + allocate(prm%lamellarsizePerTransSystem(0)) + allocate(prm%burgers_trans(0)) + endif + + if (sum(prm%Ntwin) > 0_pInt .or. prm%totalNtrans > 0_pInt) then + prm%SFE_0K = config_phase(p)%getFloat('sfe_0k') + prm%dSFE_dT = config_phase(p)%getFloat('dsfe_dt') + prm%VcrossSlip = config_phase(p)%getFloat('vcrossslip') + endif + + if (prm%totalNslip > 0_pInt .and. prm%totalNtwin > 0_pInt) then + prm%interaction_SlipTwin = lattice_interaction_SlipTwin(prm%Nslip,prm%Ntwin,& + config_phase(p)%getFloats('interaction_sliptwin'), & + structure(1:3)) + prm%interaction_TwinSlip = lattice_interaction_TwinSlip(prm%Ntwin,prm%Nslip,& + config_phase(p)%getFloats('interaction_twinslip'), & + structure(1:3)) + endif + + if (prm%totalNslip > 0_pInt .and. prm%totalNtrans > 0_pInt) then + prm%interaction_TransSlip = spread(config_phase(p)%getFloats('interaction_transslip'),2,1) + prm%interaction_SlipTrans = spread(config_phase(p)%getFloats('interaction_sliptrans'),2,1) + endif + + + prm%aTolRho = config_phase(p)%getFloat('atol_rho', defaultVal=0.0_pReal) + prm%aTolTwinFrac = config_phase(p)%getFloat('atol_twinfrac', defaultVal=0.0_pReal) + prm%aTolTransFrac = config_phase(p)%getFloat('atol_transfrac', defaultVal=0.0_pReal) + + prm%CAtomicVolume = config_phase(p)%getFloat('catomicvolume') + prm%GrainSize = config_phase(p)%getFloat('grainsize') + + + prm%D0 = config_phase(p)%getFloat('d0') + prm%Qsd = config_phase(p)%getFloat('qsd') + prm%SolidSolutionStrength = config_phase(p)%getFloat('solidsolutionstrength') + if (config_phase(p)%keyExists('dipoleformationfactor')) call IO_error(1,ext_msg='use /nodipoleformation/') + prm%dipoleformation = .not. config_phase(p)%keyExists('/nodipoleformation/') + prm%sbVelocity = config_phase(p)%getFloat('shearbandvelocity',defaultVal=0.0_pReal) + if (prm%sbVelocity > 0.0_pReal) then + prm%sbResistance = config_phase(p)%getFloat('shearbandresistance') + prm%sbQedge = config_phase(p)%getFloat('qedgepersbsystem') + prm%pShearBand = config_phase(p)%getFloat('p_shearband') + prm%qShearBand = config_phase(p)%getFloat('q_shearband') endif - if (phase > 0_pInt ) then; if (phase_plasticity(phase) == PLASTICITY_DISLOTWIN_ID) then ! do not short-circuit here (.and. with next if statemen). It's not safe in Fortran - instance = phase_plasticityInstance(phase) ! which instance of my plasticity is present phase - chunkPos = IO_stringPos(line) - tag = IO_lc(IO_stringValue(line,chunkPos,1_pInt)) ! extract key - select case(tag) - case ('(output)') - select case(IO_lc(IO_stringValue(line,chunkPos,2_pInt))) - case ('edge_density') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = edge_density_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('dipole_density') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = dipole_density_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('shear_rate_slip','shearrate_slip') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = shear_rate_slip_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('accumulated_shear_slip') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = accumulated_shear_slip_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('mfp_slip') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = mfp_slip_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('resolved_stress_slip') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = resolved_stress_slip_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('threshold_stress_slip') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = threshold_stress_slip_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('edge_dipole_distance') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = edge_dipole_distance_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('stress_exponent') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = stress_exponent_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('twin_fraction') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = twin_fraction_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('shear_rate_twin','shearrate_twin') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = shear_rate_twin_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('accumulated_shear_twin') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = accumulated_shear_twin_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('mfp_twin') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = mfp_twin_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('resolved_stress_twin') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = resolved_stress_twin_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('threshold_stress_twin') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = threshold_stress_twin_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('resolved_stress_shearband') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = resolved_stress_shearband_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('shear_rate_shearband','shearrate_shearband') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = shear_rate_shearband_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('sb_eigenvalues') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = sb_eigenvalues_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('sb_eigenvectors') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = sb_eigenvectors_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('stress_trans_fraction') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = stress_trans_fraction_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('strain_trans_fraction') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = strain_trans_fraction_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - case ('trans_fraction','total_trans_fraction') - plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt - plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = trans_fraction_ID - plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,chunkPos,2_pInt)) - end select -!-------------------------------------------------------------------------------------------------- -! parameters depending on number of slip system families - case ('nslip') - if (chunkPos(1) < Nchunks_SlipFamilies + 1_pInt) & - call IO_warning(50_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - if (chunkPos(1) > Nchunks_SlipFamilies + 1_pInt) & - call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - Nchunks_SlipFamilies = chunkPos(1) - 1_pInt - do j = 1_pInt, Nchunks_SlipFamilies - plastic_dislotwin_Nslip(j,instance) = IO_intValue(line,chunkPos,1_pInt+j) - enddo - case ('rhoedge0','rhoedgedip0','slipburgers','qedge','v0','clambdaslip','tau_peierls','p_slip','q_slip') - do j = 1_pInt, Nchunks_SlipFamilies - tempPerSlip(j) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - select case(tag) - case ('rhoedge0') - plastic_dislotwin_rhoEdge0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - case ('rhoedgedip0') - plastic_dislotwin_rhoEdgeDip0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - case ('slipburgers') - plastic_dislotwin_burgersPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - case ('qedge') - plastic_dislotwin_QedgePerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - case ('v0') - plastic_dislotwin_v0PerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - case ('clambdaslip') - plastic_dislotwin_CLambdaSlipPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - case ('tau_peierls') - if (lattice_structure(phase) /= LATTICE_bcc_ID) & - call IO_warning(42_pInt,ext_msg=trim(tag)//' for non-bcc ('//PLASTICITY_DISLOTWIN_label//')') - plastic_dislotwin_tau_peierlsPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - case ('p_slip') - plastic_dislotwin_pPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - case ('q_slip') - plastic_dislotwin_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) - end select -!-------------------------------------------------------------------------------------------------- -! parameters depending on slip number of twin families - case ('ntwin') - if (chunkPos(1) < Nchunks_TwinFamilies + 1_pInt) & - call IO_warning(51_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - if (chunkPos(1) > Nchunks_TwinFamilies + 1_pInt) & - call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - Nchunks_TwinFamilies = chunkPos(1) - 1_pInt - do j = 1_pInt, Nchunks_TwinFamilies - plastic_dislotwin_Ntwin(j,instance) = IO_intValue(line,chunkPos,1_pInt+j) - enddo - case ('ndot0_twin','twinsize','twinburgers','r_twin') - do j = 1_pInt, Nchunks_TwinFamilies - tempPerTwin(j) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - select case(tag) - case ('ndot0_twin') - if (lattice_structure(phase) == LATTICE_fcc_ID) & - call IO_warning(42_pInt,ext_msg=trim(tag)//' for fcc ('//PLASTICITY_DISLOTWIN_label//')') - plastic_dislotwin_Ndot0PerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) - case ('twinsize') - plastic_dislotwin_twinsizePerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) - case ('twinburgers') - plastic_dislotwin_burgersPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) - case ('r_twin') - plastic_dislotwin_rPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) - end select -!-------------------------------------------------------------------------------------------------- -! parameters depending on number of transformation system families - case ('ntrans') - if (chunkPos(1) < Nchunks_TransFamilies + 1_pInt) & - call IO_warning(53_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - if (chunkPos(1) > Nchunks_TransFamilies + 1_pInt) & - call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - Nchunks_TransFamilies = chunkPos(1) - 1_pInt - do j = 1_pInt, Nchunks_TransFamilies - plastic_dislotwin_Ntrans(j,instance) = IO_intValue(line,chunkPos,1_pInt+j) - enddo - case ('ndot0_trans','lamellarsize','transburgers','s_trans') - do j = 1_pInt, Nchunks_TransFamilies - tempPerTrans(j) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - select case(tag) - case ('ndot0_trans') - if (lattice_structure(phase) == LATTICE_fcc_ID) & - call IO_warning(42_pInt,ext_msg=trim(tag)//' for fcc ('//PLASTICITY_DISLOTWIN_label//')') - plastic_dislotwin_Ndot0PerTransFamily(1:Nchunks_TransFamilies,instance) = tempPerTrans(1:Nchunks_TransFamilies) - case ('lamellarsize') - plastic_dislotwin_lamellarsizePerTransFamily(1:Nchunks_TransFamilies,instance) = tempPerTrans(1:Nchunks_TransFamilies) - case ('transburgers') - plastic_dislotwin_burgersPerTransFamily(1:Nchunks_TransFamilies,instance) = tempPerTrans(1:Nchunks_TransFamilies) - case ('s_trans') - plastic_dislotwin_sPerTransFamily(1:Nchunks_TransFamilies,instance) = tempPerTrans(1:Nchunks_TransFamilies) - end select -!-------------------------------------------------------------------------------------------------- -! parameters depending on number of interactions - case ('interaction_slipslip','interactionslipslip') - if (chunkPos(1) < 1_pInt + Nchunks_SlipSlip) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - do j = 1_pInt, Nchunks_SlipSlip - plastic_dislotwin_interaction_SlipSlip(j,instance) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - case ('interaction_sliptwin','interactionsliptwin') - if (chunkPos(1) < 1_pInt + Nchunks_SlipTwin) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - do j = 1_pInt, Nchunks_SlipTwin - plastic_dislotwin_interaction_SlipTwin(j,instance) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - case ('interaction_twinslip','interactiontwinslip') - if (chunkPos(1) < 1_pInt + Nchunks_TwinSlip) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - do j = 1_pInt, Nchunks_TwinSlip - plastic_dislotwin_interaction_TwinSlip(j,instance) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - case ('interaction_twintwin','interactiontwintwin') - if (chunkPos(1) < 1_pInt + Nchunks_TwinTwin) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - do j = 1_pInt, Nchunks_TwinTwin - plastic_dislotwin_interaction_TwinTwin(j,instance) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - case ('interaction_sliptrans','interactionsliptrans') - if (chunkPos(1) < 1_pInt + Nchunks_SlipTrans) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - do j = 1_pInt, Nchunks_SlipTrans - plastic_dislotwin_interaction_SlipTrans(j,instance) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - case ('interaction_transslip','interactiontransslip') - if (chunkPos(1) < 1_pInt + Nchunks_TransSlip) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - do j = 1_pInt, Nchunks_TransSlip - plastic_dislotwin_interaction_TransSlip(j,instance) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo - case ('interaction_transtrans','interactiontranstrans') - if (chunkPos(1) < 1_pInt + Nchunks_TransTrans) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') - do j = 1_pInt, Nchunks_TransTrans - plastic_dislotwin_interaction_TransTrans(j,instance) = IO_floatValue(line,chunkPos,1_pInt+j) - enddo -!-------------------------------------------------------------------------------------------------- -! parameters independent of number of slip/twin/trans systems - case ('grainsize') - plastic_dislotwin_GrainSize(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('maxtwinfraction') - plastic_dislotwin_MaxTwinFraction(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('p_shearband') - plastic_dislotwin_pShearBand(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('q_shearband') - plastic_dislotwin_qShearBand(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('d0') - plastic_dislotwin_D0(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('qsd') - plastic_dislotwin_Qsd(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('atol_rho') - plastic_dislotwin_aTolRho(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('atol_twinfrac') - plastic_dislotwin_aTolTwinFrac(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('atol_transfrac') - plastic_dislotwin_aTolTransFrac(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('cmfptwin') - plastic_dislotwin_Cmfptwin(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('cthresholdtwin') - plastic_dislotwin_Cthresholdtwin(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('solidsolutionstrength') - plastic_dislotwin_SolidSolutionStrength(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('l0_twin') - plastic_dislotwin_L0_twin(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('l0_trans') - plastic_dislotwin_L0_trans(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('xc_twin') - plastic_dislotwin_xc_twin(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('xc_trans') - plastic_dislotwin_xc_trans(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('vcrossslip') - plastic_dislotwin_VcrossSlip(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('cedgedipmindistance') - plastic_dislotwin_CEdgeDipMinDistance(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('catomicvolume') - plastic_dislotwin_CAtomicVolume(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('sfe_0k') - plastic_dislotwin_SFE_0K(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('dsfe_dt') - plastic_dislotwin_dSFE_dT(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('dipoleformationfactor') - plastic_dislotwin_dipoleFormationFactor(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('shearbandresistance') - plastic_dislotwin_sbResistance(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('shearbandvelocity') - plastic_dislotwin_sbVelocity(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('qedgepersbsystem') - plastic_dislotwin_sbQedge(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('deltag') - plastic_dislotwin_deltaG(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('cmfptrans') - plastic_dislotwin_Cmfptrans(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('cthresholdtrans') - plastic_dislotwin_Cthresholdtrans(instance) = IO_floatValue(line,chunkPos,2_pInt) - case ('transstackheight') - plastic_dislotwin_transStackHeight(instance) = IO_floatValue(line,chunkPos,2_pInt) + !if (Ndot0PerTwinFamily(f,p) < 0.0_pReal) & + ! call IO_error(211_pInt,el=p,ext_msg='ndot0_twin ('//PLASTICITY_DISLOTWIN_label//')') + + if (prm%CAtomicVolume <= 0.0_pReal) & + call IO_error(211_pInt,el=p,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOTWIN_label//')') + if (prm%D0 <= 0.0_pReal) & + call IO_error(211_pInt,el=p,ext_msg='D0 ('//PLASTICITY_DISLOTWIN_label//')') + if (prm%Qsd <= 0.0_pReal) & + call IO_error(211_pInt,el=p,ext_msg='Qsd ('//PLASTICITY_DISLOTWIN_label//')') + if (prm%totalNtwin > 0_pInt) then + if (dEq0(prm%SFE_0K) .and. & + dEq0(prm%dSFE_dT) .and. & + lattice_structure(p) == LATTICE_fcc_ID) & + call IO_error(211_pInt,el=p,ext_msg='SFE0K ('//PLASTICITY_DISLOTWIN_label//')') + if (prm%aTolRho <= 0.0_pReal) & + call IO_error(211_pInt,el=p,ext_msg='aTolRho ('//PLASTICITY_DISLOTWIN_label//')') + if (prm%aTolTwinFrac <= 0.0_pReal) & + call IO_error(211_pInt,el=p,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOTWIN_label//')') + endif + if (prm%totalNtrans > 0_pInt) then + if (dEq0(prm%SFE_0K) .and. & + dEq0(prm%dSFE_dT) .and. & + lattice_structure(p) == LATTICE_fcc_ID) & + call IO_error(211_pInt,el=p,ext_msg='SFE0K ('//PLASTICITY_DISLOTWIN_label//')') + if (prm%aTolTransFrac <= 0.0_pReal) & + call IO_error(211_pInt,el=p,ext_msg='aTolTransFrac ('//PLASTICITY_DISLOTWIN_label//')') + endif + !if (prm%sbResistance < 0.0_pReal) & + ! call IO_error(211_pInt,el=p,ext_msg='sbResistance ('//PLASTICITY_DISLOTWIN_label//')') + !if (prm%sbVelocity < 0.0_pReal) & + ! call IO_error(211_pInt,el=p,ext_msg='sbVelocity ('//PLASTICITY_DISLOTWIN_label//')') + !if (prm%sbVelocity > 0.0_pReal .and. & + ! prm%pShearBand <= 0.0_pReal) & + ! call IO_error(211_pInt,el=p,ext_msg='pShearBand ('//PLASTICITY_DISLOTWIN_label//')') + if (prm%sbVelocity > 0.0_pReal .and. & + prm%qShearBand <= 0.0_pReal) & + call IO_error(211_pInt,el=p,ext_msg='qShearBand ('//PLASTICITY_DISLOTWIN_label//')') + + outputs = config_phase(p)%getStrings('(output)', defaultVal=emptyStringArray) + allocate(prm%outputID(0)) + do i= 1_pInt, size(outputs) + outputID = undefined_ID + select case(outputs(i)) + case ('edge_density') + outputID = merge(edge_density_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + case ('dipole_density') + outputID = merge(dipole_density_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + case ('shear_rate_slip','shearrate_slip') + outputID = merge(shear_rate_slip_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + case ('accumulated_shear_slip') + outputID = merge(accumulated_shear_slip_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + case ('mfp_slip') + outputID = merge(mfp_slip_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + case ('resolved_stress_slip') + outputID = merge(resolved_stress_slip_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + case ('threshold_stress_slip') + outputID= merge(threshold_stress_slip_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + case ('edge_dipole_distance') + outputID = merge(edge_dipole_distance_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + case ('stress_exponent') + outputID = merge(stress_exponent_ID,undefined_ID,prm%totalNslip > 0_pInt) + outputSize = prm%totalNslip + + case ('twin_fraction') + outputID = merge(twin_fraction_ID,undefined_ID,prm%totalNtwin >0_pInt) + outputSize = prm%totalNtwin + case ('shear_rate_twin','shearrate_twin') + outputID = merge(shear_rate_twin_ID,undefined_ID,prm%totalNtwin >0_pInt) + outputSize = prm%totalNtwin + case ('accumulated_shear_twin') + outputID = merge(accumulated_shear_twin_ID,undefined_ID,prm%totalNtwin >0_pInt) + outputSize = prm%totalNtwin + case ('mfp_twin') + outputID = merge(mfp_twin_ID,undefined_ID,prm%totalNtwin >0_pInt) + outputSize = prm%totalNtwin + case ('resolved_stress_twin') + outputID = merge(resolved_stress_twin_ID,undefined_ID,prm%totalNtwin >0_pInt) + outputSize = prm%totalNtwin + case ('threshold_stress_twin') + outputID = merge(threshold_stress_twin_ID,undefined_ID,prm%totalNtwin >0_pInt) + outputSize = prm%totalNtwin + + case ('resolved_stress_shearband') + outputID = resolved_stress_shearband_ID + outputSize = 6_pInt + case ('shear_rate_shearband','shearrate_shearband') + outputID = shear_rate_shearband_ID + outputSize = 6_pInt + + case ('stress_trans_fraction') + outputID = stress_trans_fraction_ID + outputSize = prm%totalNtrans + case ('strain_trans_fraction') + outputID = strain_trans_fraction_ID + outputSize = prm%totalNtrans + end select - endif; endif - enddo parsingFile - - sanityChecks: do phase = 1_pInt, size(phase_plasticity) - myPhase: if (phase_plasticity(phase) == PLASTICITY_dislotwin_ID) then - instance = phase_plasticityInstance(phase) - - if (sum(plastic_dislotwin_Nslip(:,instance)) < 0_pInt) & - call IO_error(211_pInt,el=instance,ext_msg='Nslip ('//PLASTICITY_DISLOTWIN_label//')') - if (sum(plastic_dislotwin_Ntwin(:,instance)) < 0_pInt) & - call IO_error(211_pInt,el=instance,ext_msg='Ntwin ('//PLASTICITY_DISLOTWIN_label//')') - if (sum(plastic_dislotwin_Ntrans(:,instance)) < 0_pInt) & - call IO_error(211_pInt,el=instance,ext_msg='Ntrans ('//PLASTICITY_DISLOTWIN_label//')') - do f = 1_pInt,lattice_maxNslipFamily - if (plastic_dislotwin_Nslip(f,instance) > 0_pInt) then - if (plastic_dislotwin_rhoEdge0(f,instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='rhoEdge0 ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_rhoEdgeDip0(f,instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='rhoEdgeDip0 ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_burgersPerSlipFamily(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='slipBurgers ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_v0PerSlipFamily(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='v0 ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='tau_peierls ('//PLASTICITY_DISLOTWIN_label//')') - endif - enddo - do f = 1_pInt,lattice_maxNtwinFamily - if (plastic_dislotwin_Ntwin(f,instance) > 0_pInt) then - if (plastic_dislotwin_burgersPerTwinFamily(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='twinburgers ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_Ndot0PerTwinFamily(f,instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='ndot0_twin ('//PLASTICITY_DISLOTWIN_label//')') - endif - enddo - if (plastic_dislotwin_CAtomicVolume(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_D0(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='D0 ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_Qsd(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='Qsd ('//PLASTICITY_DISLOTWIN_label//')') - if (sum(plastic_dislotwin_Ntwin(:,instance)) > 0_pInt) then - if (dEq0(plastic_dislotwin_SFE_0K(instance)) .and. & - dEq0(plastic_dislotwin_dSFE_dT(instance)) .and. & - lattice_structure(phase) == LATTICE_fcc_ID) & - call IO_error(211_pInt,el=instance,ext_msg='SFE0K ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_aTolRho(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='aTolRho ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_aTolTwinFrac(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOTWIN_label//')') - endif - if (sum(plastic_dislotwin_Ntrans(:,instance)) > 0_pInt) then - if (dEq0(plastic_dislotwin_SFE_0K(instance)) .and. & - dEq0(plastic_dislotwin_dSFE_dT(instance)) .and. & - lattice_structure(phase) == LATTICE_fcc_ID) & - call IO_error(211_pInt,el=instance,ext_msg='SFE0K ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_aTolTransFrac(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='aTolTransFrac ('//PLASTICITY_DISLOTWIN_label//')') - endif - if (plastic_dislotwin_sbResistance(instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='sbResistance ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_sbVelocity(instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='sbVelocity ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_sbVelocity(instance) > 0.0_pReal .and. & - plastic_dislotwin_pShearBand(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='pShearBand ('//PLASTICITY_DISLOTWIN_label//')') - if (dNeq0(plastic_dislotwin_dipoleFormationFactor(instance)) .and. & - dNeq(plastic_dislotwin_dipoleFormationFactor(instance), 1.0_pReal)) & - call IO_error(211_pInt,el=instance,ext_msg='dipoleFormationFactor ('//PLASTICITY_DISLOTWIN_label//')') - if (plastic_dislotwin_sbVelocity(instance) > 0.0_pReal .and. & - plastic_dislotwin_qShearBand(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='qShearBand ('//PLASTICITY_DISLOTWIN_label//')') - -!-------------------------------------------------------------------------------------------------- -! Determine total number of active slip or twin systems - plastic_dislotwin_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),plastic_dislotwin_Nslip(:,instance)) - plastic_dislotwin_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),plastic_dislotwin_Ntwin(:,instance)) - plastic_dislotwin_Ntrans(:,instance)= min(lattice_NtransSystem(:,phase),plastic_dislotwin_Ntrans(:,instance)) - plastic_dislotwin_totalNslip(instance) = sum(plastic_dislotwin_Nslip(:,instance)) - plastic_dislotwin_totalNtwin(instance) = sum(plastic_dislotwin_Ntwin(:,instance)) - plastic_dislotwin_totalNtrans(instance) = sum(plastic_dislotwin_Ntrans(:,instance)) - endif myPhase - enddo sanityChecks - -!-------------------------------------------------------------------------------------------------- -! allocation of variables whose size depends on the total number of active slip systems - maxTotalNslip = maxval(plastic_dislotwin_totalNslip) - maxTotalNtwin = maxval(plastic_dislotwin_totalNtwin) - maxTotalNtrans = maxval(plastic_dislotwin_totalNtrans) - - allocate(plastic_dislotwin_burgersPerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_burgersPerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_burgersPerTransSystem(maxTotalNtrans, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_QedgePerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_v0PerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Ndot0PerTransSystem(maxTotalNtrans, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_tau_r_twin(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_tau_r_trans(maxTotalNtrans, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance),source=0.0_pReal) - allocate(plastic_dislotwin_lamellarsizePerTransSystem(maxTotalNtrans, maxNinstance),source=0.0_pReal) - - allocate(plastic_dislotwin_interactionMatrix_SlipSlip(maxval(plastic_dislotwin_totalNslip),& ! slip resistance from slip activity - maxval(plastic_dislotwin_totalNslip),& - maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_interactionMatrix_SlipTwin(maxval(plastic_dislotwin_totalNslip),& ! slip resistance from twin activity - maxval(plastic_dislotwin_totalNtwin),& - maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_interactionMatrix_TwinSlip(maxval(plastic_dislotwin_totalNtwin),& ! twin resistance from slip activity - maxval(plastic_dislotwin_totalNslip),& - maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_interactionMatrix_TwinTwin(maxval(plastic_dislotwin_totalNtwin),& ! twin resistance from twin activity - maxval(plastic_dislotwin_totalNtwin),& - maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_interactionMatrix_SlipTrans(maxval(plastic_dislotwin_totalNslip),& ! slip resistance from trans activity - maxval(plastic_dislotwin_totalNtrans),& - maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_interactionMatrix_TransSlip(maxval(plastic_dislotwin_totalNtrans),& ! trans resistance from slip activity - maxval(plastic_dislotwin_totalNslip),& - maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_interactionMatrix_TransTrans(maxval(plastic_dislotwin_totalNtrans),& ! trans resistance from trans activity - maxval(plastic_dislotwin_totalNtrans),& - maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_projectionMatrix_Trans(maxTotalNtrans,maxTotalNslip,maxNinstance), & - source=0.0_pReal) - allocate(plastic_dislotwin_Ctwin66(6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Ctwin3333(3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Ctrans66(6,6,maxTotalNtrans,maxNinstance), source=0.0_pReal) - allocate(plastic_dislotwin_Ctrans3333(3,3,3,3,maxTotalNtrans,maxNinstance), source=0.0_pReal) - - allocate(state(maxNinstance)) - allocate(state0(maxNinstance)) - allocate(dotState(maxNinstance)) - - initializeInstances: do phase = 1_pInt, size(phase_plasticity) - myPhase2: if (phase_plasticity(phase) == PLASTICITY_dislotwin_ID) then - NofMyPhase=count(material_phase==phase) - instance = phase_plasticityInstance(phase) - - ns = plastic_dislotwin_totalNslip(instance) - nt = plastic_dislotwin_totalNtwin(instance) - nr = plastic_dislotwin_totalNtrans(instance) - -!-------------------------------------------------------------------------------------------------- -! Determine size of postResults array - outputsLoop: do o = 1_pInt,plastic_dislotwin_Noutput(instance) - select case(plastic_dislotwin_outputID(o,instance)) - case(edge_density_ID, & - dipole_density_ID, & - shear_rate_slip_ID, & - accumulated_shear_slip_ID, & - mfp_slip_ID, & - resolved_stress_slip_ID, & - threshold_stress_slip_ID, & - edge_dipole_distance_ID, & - stress_exponent_ID & - ) - mySize = ns - case(twin_fraction_ID, & - shear_rate_twin_ID, & - accumulated_shear_twin_ID, & - mfp_twin_ID, & - resolved_stress_twin_ID, & - threshold_stress_twin_ID & - ) - mySize = nt - case(resolved_stress_shearband_ID, & - shear_rate_shearband_ID & - ) - mySize = 6_pInt - case(sb_eigenvalues_ID) - mySize = 3_pInt - case(sb_eigenvectors_ID) - mySize = 9_pInt - case(stress_trans_fraction_ID, & - strain_trans_fraction_ID, & - trans_fraction_ID & - ) - mySize = nr - end select - - if (mySize > 0_pInt) then ! any meaningful output found - plastic_dislotwin_sizePostResult(o,instance) = mySize - plastic_dislotwin_sizePostResults(instance) = plastic_dislotwin_sizePostResults(instance) + mySize - endif - enddo outputsLoop + + if (outputID /= undefined_ID) then + plastic_dislotwin_output(i,phase_plasticityInstance(p)) = outputs(i) + plastic_dislotwin_sizePostResult(i,phase_plasticityInstance(p)) = outputSize + prm%outputID = [prm%outputID, outputID] + endif + enddo + !-------------------------------------------------------------------------------------------------- ! allocate state arrays + NipcMyPhase=count(material_phase==p) + sizeDotState = int(size(['rho ','rhoDip ','accshearslip']),pInt) * prm%totalNslip & + + int(size(['twinFraction','accsheartwin']),pInt) * prm%totalNtwin & + + int(size(['stressTransFraction','strainTransFraction']),pInt) * prm%totalNtrans + sizeState = sizeDotState - sizeDotState = int(size(['rhoEdge ','rhoEdgeDip ','accshearslip']),pInt) * ns & - + int(size(['twinFraction','accsheartwin']),pInt) * nt & - + int(size(['stressTransFraction','strainTransFraction']),pInt) * nr - sizeDeltaState = 0_pInt - sizeState = sizeDotState & - + int(size(['invLambdaSlip ','invLambdaSlipTwin ','invLambdaSlipTrans',& - 'meanFreePathSlip ','tauSlipThreshold ']),pInt) * ns & - + int(size(['invLambdaTwin ','meanFreePathTwin','tauTwinThreshold',& - 'twinVolume ']),pInt) * nt & - + int(size(['invLambdaTrans ','meanFreePathTrans','tauTransThreshold', & - 'martensiteVolume ']),pInt) * nr - - plasticState(phase)%sizeState = sizeState - plasticState(phase)%sizeDotState = sizeDotState - plasticState(phase)%sizeDeltaState = sizeDeltaState - plasticState(phase)%sizePostResults = plastic_dislotwin_sizePostResults(instance) - plasticState(phase)%nSlip = plastic_dislotwin_totalNslip(instance) - plasticState(phase)%nTwin = plastic_dislotwin_totalNtwin(instance) - plasticState(phase)%nTrans= plastic_dislotwin_totalNtrans(instance) - allocate(plasticState(phase)%aTolState (sizeState), source=0.0_pReal) - allocate(plasticState(phase)%state0 (sizeState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%partionedState0 (sizeState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%subState0 (sizeState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%state (sizeState,NofMyPhase), source=0.0_pReal) + call material_allocatePlasticState(p,NipcMyPhase,sizeState,sizeDotState,0_pInt, & + prm%totalNslip,prm%totalNtwin,prm%totalNtrans) + plasticState(p)%sizePostResults = sum(plastic_dislotwin_sizePostResult(:,phase_plasticityInstance(p))) - allocate(plasticState(phase)%dotState (sizeDotState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%deltaState (sizeDeltaState,NofMyPhase), source=0.0_pReal) - if (any(numerics_integrator == 1_pInt)) then - allocate(plasticState(phase)%previousDotState (sizeDotState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%previousDotState2 (sizeDotState,NofMyPhase), source=0.0_pReal) - endif - if (any(numerics_integrator == 4_pInt)) & - allocate(plasticState(phase)%RK4dotState (sizeDotState,NofMyPhase), source=0.0_pReal) - if (any(numerics_integrator == 5_pInt)) & - allocate(plasticState(phase)%RKCK45dotState (6,sizeDotState,NofMyPhase),source=0.0_pReal) - offset_slip = 2_pInt*plasticState(phase)%nslip - plasticState(phase)%slipRate => & - plasticState(phase)%dotState(offset_slip+1:offset_slip+plasticState(phase)%nslip,1:NofMyPhase) - plasticState(phase)%accumulatedSlip => & - plasticState(phase)%state (offset_slip+1:offset_slip+plasticState(phase)%nslip,1:NofMyPhase) + ! ToDo: do later on + offset_slip = 2_pInt*plasticState(p)%nslip + plasticState(p)%slipRate => & + plasticState(p)%dotState(offset_slip+1:offset_slip+plasticState(p)%nslip,1:NipcMyPhase) + plasticState(p)%accumulatedSlip => & + plasticState(p)%state (offset_slip+1:offset_slip+plasticState(p)%nslip,1:NipcMyPhase) + + allocate(temp1(prm%totalNslip,prm%totalNtrans),source =0.0_pReal) + allocate(prm%forestProjectionEdge(prm%totalNslip,prm%totalNslip),source = 0.0_pReal) + i = 0_pInt + mySlipFamilies: do f = 1_pInt,size(prm%Nslip,1) + index_myFamily = sum(prm%Nslip(1:f-1_pInt)) - !* Process slip related parameters ------------------------------------------------ - slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(plastic_dislotwin_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list - slipSystemsLoop: do j = 1_pInt,plastic_dislotwin_Nslip(f,instance) - - !* Burgers vector, - ! dislocation velocity prefactor, - ! mean free path prefactor, - ! and minimum dipole distance - - plastic_dislotwin_burgersPerSlipSystem(index_myFamily+j,instance) = & - plastic_dislotwin_burgersPerSlipFamily(f,instance) - - plastic_dislotwin_QedgePerSlipSystem(index_myFamily+j,instance) = & - plastic_dislotwin_QedgePerSlipFamily(f,instance) - - plastic_dislotwin_v0PerSlipSystem(index_myFamily+j,instance) = & - plastic_dislotwin_v0PerSlipFamily(f,instance) - - plastic_dislotwin_CLambdaSlipPerSlipSystem(index_myFamily+j,instance) = & - plastic_dislotwin_CLambdaSlipPerSlipFamily(f,instance) + slipSystemsLoop: do j = 1_pInt,prm%Nslip(f) + i = i + 1_pInt + do o = 1_pInt, size(prm%Nslip,1) + index_otherFamily = sum(prm%Nslip(1:o-1_pInt)) + do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (slip) + prm%forestProjectionEdge(index_myFamily+j,index_otherFamily+k) = & + abs(math_mul3x3(lattice_sn(:,sum(lattice_NslipSystem(1:f-1,p))+j,p), & + lattice_st(:,sum(lattice_NslipSystem(1:o-1,p))+k,p))) + enddo; enddo + do o = 1_pInt,size(prm%Ntrans,1) + index_otherFamily = sum(prm%Ntrans(1:o-1_pInt)) + do k = 1_pInt,prm%Ntrans(o) ! loop over (active) systems in other family (trans) + temp1(index_myFamily+j,index_otherFamily+k) = & + prm%interaction_SlipTrans(lattice_interactionSlipTrans( & + sum(lattice_NslipSystem(1:f-1_pInt,p))+j, & + sum(lattice_NtransSystem(1:o-1_pInt,p))+k, & + p),1 ) + enddo; enddo - !* Calculation of forest projections for edge dislocations - !* Interaction matrices - do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(plastic_dislotwin_Nslip(1:o-1_pInt,instance)) - do k = 1_pInt,plastic_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) - plastic_dislotwin_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & - abs(math_mul3x3(lattice_sn(:,sum(lattice_NslipSystem(1:f-1,phase))+j,phase), & - lattice_st(:,sum(lattice_NslipSystem(1:o-1,phase))+k,phase))) - plastic_dislotwin_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislotwin_interaction_SlipSlip(lattice_interactionSlipSlip( & - sum(lattice_NslipSystem(1:f-1,phase))+j, & - sum(lattice_NslipSystem(1:o-1,phase))+k, & - phase), instance ) - enddo; enddo - - do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(plastic_dislotwin_Ntwin(1:o-1_pInt,instance)) - do k = 1_pInt,plastic_dislotwin_Ntwin(o,instance) ! loop over (active) systems in other family (twin) - plastic_dislotwin_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislotwin_interaction_SlipTwin(lattice_interactionSlipTwin( & - sum(lattice_NslipSystem(1:f-1_pInt,phase))+j, & - sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & - phase), instance ) - enddo; enddo + enddo slipSystemsLoop + enddo mySlipFamilies + prm%interaction_SlipTrans = temp1; deallocate(temp1) + + allocate(prm%C66_twin(6,6,prm%totalNtwin), source=0.0_pReal) + if (lattice_structure(p) == LATTICE_fcc_ID) & + allocate(prm%fcc_twinNucleationSlipPair(2,prm%totalNtwin),source = 0_pInt) + allocate(prm%shear_twin(prm%totalNtwin),source = 0.0_pReal) + i = 0_pInt + twinFamiliesLoop: do f = 1_pInt, size(prm%Ntwin,1) + index_myFamily = sum(prm%Ntwin(1:f-1_pInt)) ! index in truncated twin system list + twinSystemsLoop: do j = 1_pInt,prm%Ntwin(f) + i = i + 1_pInt + prm%shear_twin(i) = lattice_shearTwin(sum(lattice_Ntwinsystem(1:f-1,p))+j,p) + if (lattice_structure(p) == LATTICE_fcc_ID) prm%fcc_twinNucleationSlipPair(1:2,i) = & + lattice_fcc_twinNucleationSlipPair(1:2,sum(lattice_Ntwinsystem(1:f-1,p))+j) + !* Rotate twin elasticity matrices + index_otherFamily = sum(lattice_NtwinSystem(1:f-1_pInt,p)) ! index in full lattice twin list + prm%C66_twin(1:6,1:6,index_myFamily+j) = & + math_Mandel3333to66(math_rotate_forward3333(lattice_C3333(1:3,1:3,1:3,1:3,p),& + lattice_Qtwin(1:3,1:3,index_otherFamily+j,p))) + enddo twinSystemsLoop + enddo twinFamiliesLoop - do o = 1_pInt,lattice_maxNtransFamily - index_otherFamily = sum(plastic_dislotwin_Ntrans(1:o-1_pInt,instance)) - do k = 1_pInt,plastic_dislotwin_Ntrans(o,instance) ! loop over (active) systems in other family (trans) - plastic_dislotwin_interactionMatrix_SlipTrans(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislotwin_interaction_SlipTrans(lattice_interactionSlipTrans( & - sum(lattice_NslipSystem(1:f-1_pInt,phase))+j, & - sum(lattice_NtransSystem(1:o-1_pInt,phase))+k, & - phase), instance ) - enddo; enddo - - enddo slipSystemsLoop - enddo slipFamiliesLoop - - !* Process twin related parameters ------------------------------------------------ - twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily - index_myFamily = sum(plastic_dislotwin_Ntwin(1:f-1_pInt,instance)) ! index in truncated twin system list - twinSystemsLoop: do j = 1_pInt,plastic_dislotwin_Ntwin(f,instance) - !* Burgers vector, - ! nucleation rate prefactor, - ! and twin size - - plastic_dislotwin_burgersPerTwinSystem(index_myFamily+j,instance) = & - plastic_dislotwin_burgersPerTwinFamily(f,instance) + allocate(temp1(prm%totalNtrans,prm%totalNslip), source =0.0_pReal) + allocate(temp2(prm%totalNtrans,prm%totalNtrans), source =0.0_pReal) + allocate(prm%C66_trans(6,6,prm%totalNtrans) ,source=0.0_pReal) + allocate(prm%Schmid_trans(3,3,prm%totalNtrans),source = 0.0_pReal) + i = 0_pInt + transFamiliesLoop: do f = 1_pInt,size(prm%Ntrans,1) + index_myFamily = sum(prm%Ntrans(1:f-1_pInt)) ! index in truncated trans system list + transSystemsLoop: do j = 1_pInt,prm%Ntrans(f) + i = i + 1_pInt + prm%Schmid_trans(1:3,1:3,i) = lattice_Strans(1:3,1:3,sum(lattice_Ntranssystem(1:f-1,p))+j,p) + !* Rotate trans elasticity matrices + index_otherFamily = sum(lattice_NtransSystem(1:f-1_pInt,p)) ! index in full lattice trans list + prm%C66_trans(1:6,1:6,index_myFamily+j) = & + math_Mandel3333to66(math_rotate_forward3333(lattice_trans_C3333(1:3,1:3,1:3,1:3,p),& + lattice_Qtrans(1:3,1:3,index_otherFamily+j,p))) + !* Interaction matrices + do o = 1_pInt,size(prm%Nslip,1) + index_otherFamily = sum(prm%Nslip(1:o-1_pInt)) + do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (slip) + temp1(index_myFamily+j,index_otherFamily+k) = & + prm%interaction_TransSlip(lattice_interactionTransSlip( & + sum(lattice_NtransSystem(1:f-1_pInt,p))+j, & + sum(lattice_NslipSystem(1:o-1_pInt,p))+k, & + p) ,1 ) + enddo; enddo - plastic_dislotwin_Ndot0PerTwinSystem(index_myFamily+j,instance) = & - plastic_dislotwin_Ndot0PerTwinFamily(f,instance) + do o = 1_pInt,size(prm%Ntrans,1) + index_otherFamily = sum(prm%Ntrans(1:o-1_pInt)) + do k = 1_pInt,prm%Ntrans(o) ! loop over (active) systems in other family (trans) + temp2(index_myFamily+j,index_otherFamily+k) = & + prm%interaction_TransTrans(lattice_interactionTransTrans( & + sum(lattice_NtransSystem(1:f-1_pInt,p))+j, & + sum(lattice_NtransSystem(1:o-1_pInt,p))+k, & + p),1 ) + enddo; enddo - plastic_dislotwin_twinsizePerTwinSystem(index_myFamily+j,instance) = & - plastic_dislotwin_twinsizePerTwinFamily(f,instance) - - !* Rotate twin elasticity matrices - index_otherFamily = sum(lattice_NtwinSystem(1:f-1_pInt,phase)) ! index in full lattice twin list - do l = 1_pInt,3_pInt; do m = 1_pInt,3_pInt; do n = 1_pInt,3_pInt; do o = 1_pInt,3_pInt - do p = 1_pInt,3_pInt; do q = 1_pInt,3_pInt; do r = 1_pInt,3_pInt; do s = 1_pInt,3_pInt - plastic_dislotwin_Ctwin3333(l,m,n,o,index_myFamily+j,instance) = & - plastic_dislotwin_Ctwin3333(l,m,n,o,index_myFamily+j,instance) + & - lattice_C3333(p,q,r,s,phase) * & - lattice_Qtwin(l,p,index_otherFamily+j,phase) * & - lattice_Qtwin(m,q,index_otherFamily+j,phase) * & - lattice_Qtwin(n,r,index_otherFamily+j,phase) * & - lattice_Qtwin(o,s,index_otherFamily+j,phase) - enddo; enddo; enddo; enddo - enddo; enddo; enddo; enddo - plastic_dislotwin_Ctwin66(1:6,1:6,index_myFamily+j,instance) = & - math_Mandel3333to66(plastic_dislotwin_Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) - - !* Interaction matrices - do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(plastic_dislotwin_Nslip(1:o-1_pInt,instance)) - do k = 1_pInt,plastic_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) - plastic_dislotwin_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislotwin_interaction_TwinSlip(lattice_interactionTwinSlip( & - sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & - sum(lattice_NslipSystem(1:o-1_pInt,phase))+k, & - phase), instance ) - enddo; enddo - - do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(plastic_dislotwin_Ntwin(1:o-1_pInt,instance)) - do k = 1_pInt,plastic_dislotwin_Ntwin(o,instance) ! loop over (active) systems in other family (twin) - plastic_dislotwin_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislotwin_interaction_TwinTwin(lattice_interactionTwinTwin( & - sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & - sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & - phase), instance ) - enddo; enddo - - enddo twinSystemsLoop - enddo twinFamiliesLoop + enddo transSystemsLoop + enddo transFamiliesLoop + prm%interaction_TransSlip = temp1; deallocate(temp1) + prm%interaction_TransTrans = temp2; deallocate(temp2) - !* Process transformation related parameters ------------------------------------------------ - transFamiliesLoop: do f = 1_pInt,lattice_maxNtransFamily - index_myFamily = sum(plastic_dislotwin_Ntrans(1:f-1_pInt,instance)) ! index in truncated trans system list - transSystemsLoop: do j = 1_pInt,plastic_dislotwin_Ntrans(f,instance) + startIndex=1_pInt + endIndex=prm%totalNslip + stt%rhoEdge=>plasticState(p)%state(startIndex:endIndex,:) + stt%rhoEdge= spread(prm%rho0,2,NipcMyPhase) + dot%rhoEdge=>plasticState(p)%dotState(startIndex:endIndex,:) + plasticState(p)%aTolState(startIndex:endIndex) = prm%aTolRho - !* Burgers vector, - ! nucleation rate prefactor, - ! and martensite size + startIndex=endIndex+1 + endIndex=endIndex+prm%totalNslip + stt%rhoEdgeDip=>plasticState(p)%state(startIndex:endIndex,:) + stt%rhoEdgeDip= spread(prm%rhoDip0,2,NipcMyPhase) + dot%rhoEdgeDip=>plasticState(p)%dotState(startIndex:endIndex,:) + plasticState(p)%aTolState(startIndex:endIndex) = prm%aTolRho + + startIndex=endIndex+1 + endIndex=endIndex+prm%totalNslip + stt%accshear_slip=>plasticState(p)%state(startIndex:endIndex,:) + dot%accshear_slip=>plasticState(p)%dotState(startIndex:endIndex,:) + plasticState(p)%aTolState(startIndex:endIndex) = 1.0e6_pReal + + startIndex=endIndex+1 + endIndex=endIndex+prm%totalNtwin + stt%twinFraction=>plasticState(p)%state(startIndex:endIndex,:) + dot%twinFraction=>plasticState(p)%dotState(startIndex:endIndex,:) + plasticState(p)%aTolState(startIndex:endIndex) = prm%aTolTwinFrac + + startIndex=endIndex+1 + endIndex=endIndex+prm%totalNtwin + stt%accshear_twin=>plasticState(p)%state(startIndex:endIndex,:) + dot%accshear_twin=>plasticState(p)%dotState(startIndex:endIndex,:) + plasticState(p)%aTolState(startIndex:endIndex) = 1.0e6_pReal + + startIndex=endIndex+1 + endIndex=endIndex+prm%totalNtrans + stt%stressTransFraction=>plasticState(p)%state(startIndex:endIndex,:) + dot%stressTransFraction=>plasticState(p)%dotState(startIndex:endIndex,:) + plasticState(p)%aTolState(startIndex:endIndex) = prm%aTolTransFrac + + startIndex=endIndex+1 + endIndex=endIndex+prm%totalNtrans + stt%strainTransFraction=>plasticState(p)%state(startIndex:endIndex,:) + dot%strainTransFraction=>plasticState(p)%dotState(startIndex:endIndex,:) + plasticState(p)%aTolState(startIndex:endIndex) = prm%aTolTransFrac - plastic_dislotwin_burgersPerTransSystem(index_myFamily+j,instance) = & - plastic_dislotwin_burgersPerTransFamily(f,instance) + plasticState(p)%state0 = plasticState(p)%state + dot%whole => plasticState(p)%dotState - plastic_dislotwin_Ndot0PerTransSystem(index_myFamily+j,instance) = & - plastic_dislotwin_Ndot0PerTransFamily(f,instance) + allocate(mse%invLambdaSlip(prm%totalNslip,NipcMyPhase),source=0.0_pReal) + allocate(mse%invLambdaSlipTwin(prm%totalNslip,NipcMyPhase),source=0.0_pReal) + allocate(mse%invLambdaTwin(prm%totalNtwin,NipcMyPhase),source=0.0_pReal) + allocate(mse%invLambdaSlipTrans(prm%totalNtrans,NipcMyPhase),source=0.0_pReal) + allocate(mse%invLambdaTrans(prm%totalNtrans,NipcMyPhase),source=0.0_pReal) - plastic_dislotwin_lamellarsizePerTransSystem(index_myFamily+j,instance) = & - plastic_dislotwin_lamellarsizePerTransFamily(f,instance) + allocate(mse%mfp_slip(prm%totalNslip,NipcMyPhase), source=0.0_pReal) + allocate(mse%mfp_twin(prm%totalNtwin,NipcMyPhase), source=0.0_pReal) + allocate(mse%mfp_trans(prm%totalNtrans,NipcMyPhase),source=0.0_pReal) - !* Rotate trans elasticity matrices - index_otherFamily = sum(lattice_NtransSystem(1:f-1_pInt,phase)) ! index in full lattice trans list - do l = 1_pInt,3_pInt; do m = 1_pInt,3_pInt; do n = 1_pInt,3_pInt; do o = 1_pInt,3_pInt - do p = 1_pInt,3_pInt; do q = 1_pInt,3_pInt; do r = 1_pInt,3_pInt; do s = 1_pInt,3_pInt - plastic_dislotwin_Ctrans3333(l,m,n,o,index_myFamily+j,instance) = & - plastic_dislotwin_Ctrans3333(l,m,n,o,index_myFamily+j,instance) + & - lattice_trans_C3333(p,q,r,s,phase) * & - lattice_Qtrans(l,p,index_otherFamily+j,phase) * & - lattice_Qtrans(m,q,index_otherFamily+j,phase) * & - lattice_Qtrans(n,r,index_otherFamily+j,phase) * & - lattice_Qtrans(o,s,index_otherFamily+j,phase) - enddo; enddo; enddo; enddo - enddo; enddo; enddo; enddo - plastic_dislotwin_Ctrans66(1:6,1:6,index_myFamily+j,instance) = & - math_Mandel3333to66(plastic_dislotwin_Ctrans3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) + allocate(mse%threshold_stress_slip(prm%totalNslip,NipcMyPhase), source=0.0_pReal) + allocate(mse%threshold_stress_twin(prm%totalNtwin,NipcMyPhase), source=0.0_pReal) + allocate(mse%threshold_stress_trans(prm%totalNtrans,NipcMyPhase),source=0.0_pReal) - !* Interaction matrices - do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(plastic_dislotwin_Nslip(1:o-1_pInt,instance)) - do k = 1_pInt,plastic_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) - plastic_dislotwin_interactionMatrix_TransSlip(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislotwin_interaction_TransSlip(lattice_interactionTransSlip( & - sum(lattice_NtransSystem(1:f-1_pInt,phase))+j, & - sum(lattice_NslipSystem(1:o-1_pInt,phase))+k, & - phase), instance ) - enddo; enddo + allocate(mse%tau_r_twin(prm%totalNtwin,NipcMyPhase), source=0.0_pReal) + allocate(mse%tau_r_trans(prm%totalNtrans,NipcMyPhase), source=0.0_pReal) - do o = 1_pInt,lattice_maxNtransFamily - index_otherFamily = sum(plastic_dislotwin_Ntrans(1:o-1_pInt,instance)) - do k = 1_pInt,plastic_dislotwin_Ntrans(o,instance) ! loop over (active) systems in other family (trans) - plastic_dislotwin_interactionMatrix_TransTrans(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislotwin_interaction_TransTrans(lattice_interactionTransTrans( & - sum(lattice_NtransSystem(1:f-1_pInt,phase))+j, & - sum(lattice_NtransSystem(1:o-1_pInt,phase))+k, & - phase), instance ) - enddo; enddo + allocate(mse%twinVolume(prm%totalNtwin,NipcMyPhase), source=0.0_pReal) + allocate(mse%martensiteVolume(prm%totalNtrans,NipcMyPhase), source=0.0_pReal) - !* Projection matrices for shear from slip systems to fault-band (twin) systems for strain-induced martensite nucleation - select case(trans_lattice_structure(phase)) - case (LATTICE_bcc_ID) - do o = 1_pInt,lattice_maxNtransFamily - index_otherFamily = sum(plastic_dislotwin_Nslip(1:o-1_pInt,instance)) - do k = 1_pInt,plastic_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (trans) - plastic_dislotwin_projectionMatrix_Trans(index_myFamily+j,index_otherFamily+k,instance) = & - lattice_projectionTrans( sum(lattice_NtransSystem(1:f-1,phase))+j, & - sum(lattice_NslipSystem(1:o-1,phase))+k, phase) - enddo; enddo - end select - - enddo transSystemsLoop - enddo transFamiliesLoop - - startIndex=1_pInt - endIndex=ns - state(instance)%rhoEdge=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%rhoEdge=>plasticState(phase)%state0(startIndex:endIndex,:) - dotState(instance)%rhoEdge=>plasticState(phase)%dotState(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+ns - state(instance)%rhoEdgeDip=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%rhoEdgeDip=>plasticState(phase)%state0(startIndex:endIndex,:) - dotState(instance)%rhoEdgeDip=>plasticState(phase)%dotState(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+ns - state(instance)%accshear_slip=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%accshear_slip=>plasticState(phase)%state0(startIndex:endIndex,:) - dotState(instance)%accshear_slip=>plasticState(phase)%dotState(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nt - state(instance)%twinFraction=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%twinFraction=>plasticState(phase)%state0(startIndex:endIndex,:) - dotState(instance)%twinFraction=>plasticState(phase)%dotState(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nt - state(instance)%accshear_twin=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%accshear_twin=>plasticState(phase)%state0(startIndex:endIndex,:) - dotState(instance)%accshear_twin=>plasticState(phase)%dotState(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nr - state(instance)%stressTransFraction=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%stressTransFraction=>plasticState(phase)%state0(startIndex:endIndex,:) - dotState(instance)%stressTransFraction=>plasticState(phase)%dotState(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nr - state(instance)%strainTransFraction=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%strainTransFraction=>plasticState(phase)%state0(startIndex:endIndex,:) - dotState(instance)%strainTransFraction=>plasticState(phase)%dotState(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+ns - state(instance)%invLambdaSlip=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%invLambdaSlip=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+ns - state(instance)%invLambdaSlipTwin=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%invLambdaSlipTwin=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nt - state(instance)%invLambdaTwin=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%invLambdaTwin=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+ns - state(instance)%invLambdaSlipTrans=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%invLambdaSlipTrans=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nr - state(instance)%invLambdaTrans=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%invLambdaTrans=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+ns - state(instance)%mfp_slip=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%mfp_slip=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nt - state(instance)%mfp_twin=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%mfp_twin=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nr - state(instance)%mfp_trans=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%mfp_trans=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+ns - state(instance)%threshold_stress_slip=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%threshold_stress_slip=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nt - state(instance)%threshold_stress_twin=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%threshold_stress_twin=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nr - state(instance)%threshold_stress_trans=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%threshold_stress_trans=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nt - state(instance)%twinVolume=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%twinVolume=>plasticState(phase)%state0(startIndex:endIndex,:) - - startIndex=endIndex+1 - endIndex=endIndex+nr - state(instance)%martensiteVolume=>plasticState(phase)%state(startIndex:endIndex,:) - state0(instance)%martensiteVolume=>plasticState(phase)%state0(startIndex:endIndex,:) - - call plastic_dislotwin_stateInit(phase,instance) - call plastic_dislotwin_aTolState(phase,instance) - endif myPhase2 - - enddo initializeInstances -end subroutine plastic_dislotwin_init - -!-------------------------------------------------------------------------------------------------- -!> @brief sets the relevant state values for a given instance of this plasticity -!-------------------------------------------------------------------------------------------------- -subroutine plastic_dislotwin_stateInit(ph,instance) - use math, only: & - pi - use lattice, only: & - lattice_maxNslipFamily, & - lattice_mu - use material, only: & - plasticState - - implicit none - integer(pInt), intent(in) :: & - instance, & !< number specifying the instance of the plasticity - ph - - real(pReal), dimension(plasticState(ph)%sizeState) :: tempState - - integer(pInt) :: i,j,f,ns,nt,nr, index_myFamily - real(pReal), dimension(plastic_dislotwin_totalNslip(instance)) :: & - rhoEdge0, & - rhoEdgeDip0, & - invLambdaSlip0, & - MeanFreePathSlip0, & - tauSlipThreshold0 - real(pReal), dimension(plastic_dislotwin_totalNtwin(instance)) :: & - MeanFreePathTwin0,TwinVolume0 - real(pReal), dimension(plastic_dislotwin_totalNtrans(instance)) :: & - MeanFreePathTrans0,MartensiteVolume0 - tempState = 0.0_pReal - ns = plastic_dislotwin_totalNslip(instance) - nt = plastic_dislotwin_totalNtwin(instance) - nr = plastic_dislotwin_totalNtrans(instance) - -!-------------------------------------------------------------------------------------------------- -! initialize basic slip state variables - do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(plastic_dislotwin_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list - rhoEdge0(index_myFamily+1_pInt: & - index_myFamily+plastic_dislotwin_Nslip(f,instance)) = & - plastic_dislotwin_rhoEdge0(f,instance) - rhoEdgeDip0(index_myFamily+1_pInt: & - index_myFamily+plastic_dislotwin_Nslip(f,instance)) = & - plastic_dislotwin_rhoEdgeDip0(f,instance) + end associate enddo - tempState(1_pInt:ns) = rhoEdge0 - tempState(ns+1_pInt:2_pInt*ns) = rhoEdgeDip0 - -!-------------------------------------------------------------------------------------------------- -! initialize dependent slip microstructural variables - forall (i = 1_pInt:ns) & - invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_dislotwin_forestProjectionEdge(1:ns,i,instance)))/ & - plastic_dislotwin_CLambdaSlipPerSlipSystem(i,instance) - tempState(3_pInt*ns+2_pInt*nt+2_pInt*nr+1:4_pInt*ns+2_pInt*nt+2_pInt*nr) = invLambdaSlip0 - - forall (i = 1_pInt:ns) & - MeanFreePathSlip0(i) = & - plastic_dislotwin_GrainSize(instance)/(1.0_pReal+invLambdaSlip0(i)*plastic_dislotwin_GrainSize(instance)) - tempState(6_pInt*ns+3_pInt*nt+3_pInt*nr+1:7_pInt*ns+3_pInt*nt+3_pInt*nr) = MeanFreePathSlip0 - - forall (i = 1_pInt:ns) & - tauSlipThreshold0(i) = & - lattice_mu(ph)*plastic_dislotwin_burgersPerSlipSystem(i,instance) * & - sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_dislotwin_interactionMatrix_SlipSlip(i,1:ns,instance))) - - tempState(7_pInt*ns+4_pInt*nt+4_pInt*nr+1:8_pInt*ns+4_pInt*nt+4_pInt*nr) = tauSlipThreshold0 - -!-------------------------------------------------------------------------------------------------- -! initialize dependent twin microstructural variables - forall (j = 1_pInt:nt) & - MeanFreePathTwin0(j) = plastic_dislotwin_GrainSize(instance) - tempState(7_pInt*ns+3_pInt*nt+3_pInt*nr+1_pInt:7_pInt*ns+4_pInt*nt+3_pInt*nr) = MeanFreePathTwin0 - - forall (j = 1_pInt:nt) & - TwinVolume0(j) = & - (pi/4.0_pReal)*plastic_dislotwin_twinsizePerTwinSystem(j,instance)*MeanFreePathTwin0(j)**(2.0_pReal) - tempState(8_pInt*ns+5_pInt*nt+5_pInt*nr+1_pInt:8_pInt*ns+6_pInt*nt+5_pInt*nr) = TwinVolume0 - -!-------------------------------------------------------------------------------------------------- -! initialize dependent trans microstructural variables - forall (j = 1_pInt:nr) & - MeanFreePathTrans0(j) = plastic_dislotwin_GrainSize(instance) - tempState(7_pInt*ns+4_pInt*nt+3_pInt*nr+1_pInt:7_pInt*ns+4_pInt*nt+4_pInt*nr) = MeanFreePathTrans0 - - forall (j = 1_pInt:nr) & - MartensiteVolume0(j) = & - (pi/4.0_pReal)*plastic_dislotwin_lamellarsizePerTransSystem(j,instance)*MeanFreePathTrans0(j)**(2.0_pReal) - tempState(8_pInt*ns+6_pInt*nt+5_pInt*nr+1_pInt:8_pInt*ns+6_pInt*nt+6_pInt*nr) = MartensiteVolume0 - -plasticState(ph)%state0 = spread(tempState,2,size(plasticState(ph)%state(1,:))) - -end subroutine plastic_dislotwin_stateInit - -!-------------------------------------------------------------------------------------------------- -!> @brief sets the relevant state values for a given instance of this plasticity -!-------------------------------------------------------------------------------------------------- -subroutine plastic_dislotwin_aTolState(ph,instance) - use material, only: & - plasticState - - implicit none - integer(pInt), intent(in) :: & - ph, & - instance ! number specifying the current instance of the plasticity - - integer(pInt) :: ns, nt, nr - - ns = plastic_dislotwin_totalNslip(instance) - nt = plastic_dislotwin_totalNtwin(instance) - nr = plastic_dislotwin_totalNtrans(instance) - - ! Tolerance state for dislocation densities - plasticState(ph)%aTolState(1_pInt: & - 2_pInt*ns) = plastic_dislotwin_aTolRho(instance) - - ! Tolerance state for accumulated shear due to slip - plasticState(ph)%aTolState(2_pInt*ns+1_pInt: & - 3_pInt*ns)=1.0e6_pReal - - ! Tolerance state for twin volume fraction - plasticState(ph)%aTolState(3_pInt*ns+1_pInt: & - 3_pInt*ns+nt) = plastic_dislotwin_aTolTwinFrac(instance) - - ! Tolerance state for accumulated shear due to twin - plasticState(ph)%aTolState(3_pInt*ns+nt+1_pInt: & - 3_pInt*ns+2_pInt*nt) = 1.0e6_pReal - -! Tolerance state for stress-assisted martensite volume fraction - plasticState(ph)%aTolState(3_pInt*ns+2_pInt*nt+1_pInt: & - 3_pInt*ns+2_pInt*nt+nr) = plastic_dislotwin_aTolTransFrac(instance) - -! Tolerance state for strain-induced martensite volume fraction - plasticState(ph)%aTolState(3_pInt*ns+2_pInt*nt+nr+1_pInt: & - 3_pInt*ns+2_pInt*nt+2_pInt*nr) = plastic_dislotwin_aTolTransFrac(instance) - -end subroutine plastic_dislotwin_aTolState - +end subroutine plastic_dislotwin_init !-------------------------------------------------------------------------------------------------- !> @brief returns the homogenized elasticity matrix !-------------------------------------------------------------------------------------------------- function plastic_dislotwin_homogenizedC(ipc,ip,el) use material, only: & + material_phase, & phase_plasticityInstance, & - phaseAt, phasememberAt - use lattice, only: & - lattice_C66 + phasememberAt - implicit none - real(pReal), dimension(6,6) :: & - plastic_dislotwin_homogenizedC - integer(pInt), intent(in) :: & - ipc, & !< component-ID of integration point - ip, & !< integration point - el !< element + implicit none + real(pReal), dimension(6,6) :: & + plastic_dislotwin_homogenizedC + integer(pInt), intent(in) :: & + ipc, & !< component-ID of integration point + ip, & !< integration point + el !< element + type(tParameters) :: prm + type(tDislotwinState) :: stt - integer(pInt) :: instance,ns,nt,nr,i, & - ph, & + integer(pInt) :: i, & of - real(pReal) :: sumf, sumftr + real(pReal) :: f_unrotated - !* Shortened notation of = phasememberAt(ipc,ip,el) - ph = phaseAt(ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = plastic_dislotwin_totalNslip(instance) - nt = plastic_dislotwin_totalNtwin(instance) - nr = plastic_dislotwin_totalNtrans(instance) + associate(prm => param(phase_plasticityInstance(material_phase(ipc,ip,el))),& + stt => state(phase_plasticityInstance(material_phase(ipc,ip,el)))) - !* Total twin volume fraction - sumf = sum(state(instance)%twinFraction(1_pInt:nt,of)) ! safe for nt == 0 + f_unrotated = 1.0_pReal & + - sum(stt%twinFraction(1_pInt:prm%totalNtwin,of)) & + - sum(stt%stressTransFraction(1_pInt:prm%totalNtrans,of)) & + - sum(stt%strainTransFraction(1_pInt:prm%totalNtrans,of)) - !* Total transformed volume fraction - sumftr = sum(state(instance)%stressTransFraction(1_pInt:nr,of)) + & - sum(state(instance)%strainTransFraction(1_pInt:nr,of)) - - !* Homogenized elasticity matrix - plastic_dislotwin_homogenizedC = (1.0_pReal-sumf-sumftr)*lattice_C66(1:6,1:6,ph) - do i=1_pInt,nt + plastic_dislotwin_homogenizedC = f_unrotated * prm%C66 + do i=1_pInt,prm%totalNtwin plastic_dislotwin_homogenizedC = plastic_dislotwin_homogenizedC & - + state(instance)%twinFraction(i,of)*plastic_dislotwin_Ctwin66(1:6,1:6,i,instance) + + stt%twinFraction(i,of)*prm%C66_twin(1:6,1:6,i) enddo - do i=1_pInt,nr + do i=1_pInt,prm%totalNtrans plastic_dislotwin_homogenizedC = plastic_dislotwin_homogenizedC & - + (state(instance)%stressTransFraction(i,of) + state(instance)%strainTransFraction(i,of))*& - plastic_dislotwin_Ctrans66(1:6,1:6,i,instance) + +(stt%stressTransFraction(i,of)+stt%strainTransFraction(i,of))*& + prm%C66_trans(1:6,1:6,i) enddo - + end associate end function plastic_dislotwin_homogenizedC - + + !-------------------------------------------------------------------------------------------------- !> @brief calculates derived quantities from state !-------------------------------------------------------------------------------------------------- subroutine plastic_dislotwin_microstructure(temperature,ipc,ip,el) use math, only: & - pi + PI use material, only: & material_phase, & phase_plasticityInstance, & - !plasticState, & !!!!delete - phaseAt, phasememberAt - use lattice, only: & - lattice_mu, & - lattice_nu + phasememberAt implicit none integer(pInt), intent(in) :: & @@ -1470,222 +829,154 @@ subroutine plastic_dislotwin_microstructure(temperature,ipc,ip,el) temperature !< temperature at IP integer(pInt) :: & - instance, & - ns,nt,nr,s,t,r, & - ph, & + i, & of real(pReal) :: & - sumf,sfe,x0,sumftr - real(pReal), dimension(plastic_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: fOverStacksize - real(pReal), dimension(plastic_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + sumf_twin,SFE,sumf_trans + real(pReal), dimension(:), allocatable :: & + x0, & + fOverStacksize, & ftransOverLamellarSize + + type(tParameters) :: prm !< parameters of present instance + type(tDislotwinState) :: stt !< state of present instance + type(tDislotwinMicrostructure) :: mse - !* Shortened notation of = phasememberAt(ipc,ip,el) - ph = phaseAt(ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = plastic_dislotwin_totalNslip(instance) - nt = plastic_dislotwin_totalNtwin(instance) - nr = plastic_dislotwin_totalNtrans(instance) - !* Total twin volume fraction - sumf = sum(state(instance)%twinFraction(1_pInt:nt,of)) ! safe for nt == 0 - - !* Total transformed volume fraction - sumftr = sum(state(instance)%stressTransFraction(1_pInt:nr,of)) + & - sum(state(instance)%strainTransFraction(1_pInt:nr,of)) + associate(prm => param(phase_plasticityInstance(material_phase(ipc,ip,el))),& + stt => state(phase_plasticityInstance(material_phase(ipc,ip,el))),& + mse => microstructure(phase_plasticityInstance(material_phase(ipc,ip,el)))) - !* Stacking fault energy - sfe = plastic_dislotwin_SFE_0K(instance) + & - plastic_dislotwin_dSFE_dT(instance) * Temperature - - !* rescaled twin volume fraction for topology - forall (t = 1_pInt:nt) & - fOverStacksize(t) = & - state(instance)%twinFraction(t,of)/plastic_dislotwin_twinsizePerTwinSystem(t,instance) + sumf_twin = sum(stt%twinFraction(1:prm%totalNtwin,of)) + sumf_trans = sum(stt%stressTransFraction(1:prm%totalNtrans,of)) & + + sum(stt%strainTransFraction(1:prm%totalNtrans,of)) - !* rescaled trans volume fraction for topology - forall (r = 1_pInt:nr) & - ftransOverLamellarSize(r) = & - (state(instance)%stressTransFraction(r,of)+state(instance)%strainTransFraction(r,of))/& - plastic_dislotwin_lamellarsizePerTransSystem(r,instance) + sfe = prm%SFE_0K + prm%dSFE_dT * Temperature + !* rescaled volume fraction for topology + fOverStacksize = stt%twinFraction(1_pInt:prm%totalNtwin,of)/prm%twinsize !ToDo: this is per system + ftransOverLamellarSize = sumf_trans/prm%lamellarsizePerTransSystem !ToDo: But this not ... + !Todo: Physically ok, but naming could be adjusted + + !* 1/mean free distance between 2 forest dislocations seen by a moving dislocation - forall (s = 1_pInt:ns) & - state(instance)%invLambdaSlip(s,of) = & - sqrt(dot_product((state(instance)%rhoEdge(1_pInt:ns,of)+state(instance)%rhoEdgeDip(1_pInt:ns,of)),& - plastic_dislotwin_forestProjectionEdge(1:ns,s,instance)))/ & - plastic_dislotwin_CLambdaSlipPerSlipSystem(s,instance) + forall (i = 1_pInt:prm%totalNslip) & + mse%invLambdaSlip(i,of) = & + sqrt(dot_product((stt%rhoEdge(1_pInt:prm%totalNslip,of)+stt%rhoEdgeDip(1_pInt:prm%totalNslip,of)),& + prm%forestProjectionEdge(1:prm%totalNslip,i)))/prm%CLambdaSlip(i) !* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation !$OMP CRITICAL (evilmatmul) - state(instance)%invLambdaSlipTwin(1_pInt:ns,of) = 0.0_pReal - if (nt > 0_pInt .and. ns > 0_pInt) & - state(instance)%invLambdaSlipTwin(1_pInt:ns,of) = & - matmul(plastic_dislotwin_interactionMatrix_SlipTwin(1:ns,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) - !$OMP END CRITICAL (evilmatmul) - + if (prm%totalNtwin > 0_pInt .and. prm%totalNslip > 0_pInt) & + mse%invLambdaSlipTwin(1_pInt:prm%totalNslip,of) = & + matmul(prm%interaction_SlipTwin,fOverStacksize)/(1.0_pReal-sumf_twin) + !* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin - !$OMP CRITICAL (evilmatmul) - if (nt > 0_pInt) & - state(instance)%invLambdaTwin(1_pInt:nt,of) = & - matmul(plastic_dislotwin_interactionMatrix_TwinTwin(1:nt,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) - !$OMP END CRITICAL (evilmatmul) + + !ToDo: needed? if (prm%totalNtwin > 0_pInt) & + mse%invLambdaTwin(1_pInt:prm%totalNtwin,of) = & + matmul(prm%interaction_TwinTwin,fOverStacksize)/(1.0_pReal-sumf_twin) + !* 1/mean free distance between 2 martensite lamellar from different systems seen by a moving dislocation - state(instance)%invLambdaSlipTrans(1_pInt:ns,of) = 0.0_pReal - if (nr > 0_pInt .and. ns > 0_pInt) & - state(instance)%invLambdaSlipTrans(1_pInt:ns,of) = & - matmul(plastic_dislotwin_interactionMatrix_SlipTrans(1:ns,1:nr,instance),ftransOverLamellarSize(1:nr))/(1.0_pReal-sumftr) + if (prm%totalNtrans > 0_pInt .and. prm%totalNslip > 0_pInt) & + mse%invLambdaSlipTrans(1_pInt:prm%totalNslip,of) = & + matmul(prm%interaction_SlipTrans,ftransOverLamellarSize)/(1.0_pReal-sumf_trans) !* 1/mean free distance between 2 martensite stacks from different systems seen by a growing martensite (1/lambda_trans) - if (nr > 0_pInt) & - state(instance)%invLambdaTrans(1_pInt:nr,of) = & - matmul(plastic_dislotwin_interactionMatrix_TransTrans(1:nr,1:nr,instance),ftransOverLamellarSize(1:nr))/(1.0_pReal-sumftr) + !ToDo: needed? if (prm%totalNtrans > 0_pInt) & + + mse%invLambdaTrans(1_pInt:prm%totalNtrans,of) = & + matmul(prm%interaction_TransTrans,ftransOverLamellarSize)/(1.0_pReal-sumf_trans) + !$OMP END CRITICAL (evilmatmul) !* mean free path between 2 obstacles seen by a moving dislocation - do s = 1_pInt,ns - if ((nt > 0_pInt) .or. (nr > 0_pInt)) then - state(instance)%mfp_slip(s,of) = & - plastic_dislotwin_GrainSize(instance)/(1.0_pReal+plastic_dislotwin_GrainSize(instance)*& - (state(instance)%invLambdaSlip(s,of) + & - state(instance)%invLambdaSlipTwin(s,of) + & - state(instance)%invLambdaSlipTrans(s,of))) + do i = 1_pInt,prm%totalNslip + if ((prm%totalNtwin > 0_pInt) .or. (prm%totalNtrans > 0_pInt)) then ! ToDo: This is too simplified + mse%mfp_slip(i,of) = & + prm%GrainSize/(1.0_pReal+prm%GrainSize*& + (mse%invLambdaSlip(i,of) + mse%invLambdaSlipTwin(i,of) + mse%invLambdaSlipTrans(i,of))) else - state(instance)%mfp_slip(s,of) = & - plastic_dislotwin_GrainSize(instance)/& - (1.0_pReal+plastic_dislotwin_GrainSize(instance)*(state(instance)%invLambdaSlip(s,of))) !!!!!! correct? + mse%mfp_slip(i,of) = & + prm%GrainSize/& + (1.0_pReal+prm%GrainSize*(mse%invLambdaSlip(i,of))) !!!!!! correct? endif enddo - !* mean free path between 2 obstacles seen by a growing twin - forall (t = 1_pInt:nt) & - state(instance)%mfp_twin(t,of) = & - plastic_dislotwin_Cmfptwin(instance)*plastic_dislotwin_GrainSize(instance)/& - (1.0_pReal+plastic_dislotwin_GrainSize(instance)*state(ph)%invLambdaTwin(t,of)) - - !* mean free path between 2 obstacles seen by a growing martensite - forall (r = 1_pInt:nr) & - state(instance)%mfp_trans(r,of) = & - plastic_dislotwin_Cmfptrans(instance)*plastic_dislotwin_GrainSize(instance)/& - (1.0_pReal+plastic_dislotwin_GrainSize(instance)*state(instance)%invLambdaTrans(r,of)) + !* mean free path between 2 obstacles seen by a growing twin/martensite + mse%mfp_twin(:,of) = prm%Cmfptwin*prm%GrainSize/ (1.0_pReal+prm%GrainSize*mse%invLambdaTwin(:,of)) + mse%mfp_trans(:,of) = prm%Cmfptrans*prm%GrainSize/(1.0_pReal+prm%GrainSize*mse%invLambdaTrans(:,of)) !* threshold stress for dislocation motion - forall (s = 1_pInt:ns) & - state(instance)%threshold_stress_slip(s,of) = & - lattice_mu(ph)*plastic_dislotwin_burgersPerSlipSystem(s,instance)*& - sqrt(dot_product((state(instance)%rhoEdge(1_pInt:ns,of)+state(instance)%rhoEdgeDip(1_pInt:ns,of)),& - plastic_dislotwin_interactionMatrix_SlipSlip(s,1:ns,instance))) + forall (i = 1_pInt:prm%totalNslip) mse%threshold_stress_slip(i,of) = & + prm%mu*prm%burgers_slip(i)*& + sqrt(dot_product(stt%rhoEdge(1_pInt:prm%totalNslip,of)+stt%rhoEdgeDip(1_pInt:prm%totalNslip,of),& + prm%interaction_SlipSlip(i,1:prm%totalNslip))) - !* threshold stress for growing twin - forall (t = 1_pInt:nt) & - state(instance)%threshold_stress_twin(t,of) = & - plastic_dislotwin_Cthresholdtwin(instance)* & - (sfe/(3.0_pReal*plastic_dislotwin_burgersPerTwinSystem(t,instance)) & - + 3.0_pReal*plastic_dislotwin_burgersPerTwinSystem(t,instance)*lattice_mu(ph)/& - (plastic_dislotwin_L0_twin(instance)*plastic_dislotwin_burgersPerSlipSystem(t,instance)) & - ) - - !* threshold stress for growing martensite - forall (r = 1_pInt:nr) & - state(instance)%threshold_stress_trans(r,of) = & - plastic_dislotwin_Cthresholdtrans(instance)* & - (sfe/(3.0_pReal*plastic_dislotwin_burgersPerTransSystem(r,instance)) & - + 3.0_pReal*plastic_dislotwin_burgersPerTransSystem(r,instance)*lattice_mu(ph)/& - (plastic_dislotwin_L0_trans(instance)*plastic_dislotwin_burgersPerSlipSystem(r,instance))& - + plastic_dislotwin_transStackHeight(instance)*plastic_dislotwin_deltaG(instance)/ & - (3.0_pReal*plastic_dislotwin_burgersPerTransSystem(r,instance)) & - ) - - !* final twin volume after growth - forall (t = 1_pInt:nt) & - state(instance)%twinVolume(t,of) = & - (pi/4.0_pReal)*plastic_dislotwin_twinsizePerTwinSystem(t,instance)*& - state(instance)%mfp_twin(t,of)**(2.0_pReal) - - !* final martensite volume after growth - forall (r = 1_pInt:nr) & - state(instance)%martensiteVolume(r,of) = & - (pi/4.0_pReal)*plastic_dislotwin_lamellarsizePerTransSystem(r,instance)*& - state(instance)%mfp_trans(r,of)**(2.0_pReal) + !* threshold stress for growing twin/martensite + if(prm%totalNtwin == prm%totalNslip) & + mse%threshold_stress_twin(:,of) = prm%Cthresholdtwin* & + (sfe/(3.0_pReal*prm%burgers_twin)+ 3.0_pReal*prm%burgers_twin*prm%mu/ & + (prm%L0_twin*prm%burgers_slip)) ! slip burgers here correct? + if(prm%totalNtrans == prm%totalNslip) & + mse%threshold_stress_trans(:,of) = prm%Cthresholdtrans* & + (sfe/(3.0_pReal*prm%burgers_trans) + 3.0_pReal*prm%burgers_trans*prm%mu/& + (prm%L0_trans*prm%burgers_slip) + prm%transStackHeight*prm%deltaG/ (3.0_pReal*prm%burgers_trans) ) + + ! final volume after growth + mse%twinVolume(:,of) = (PI/4.0_pReal)*prm%twinsize*mse%mfp_twin(:,of)**2.0_pReal + mse%martensiteVolume(:,of) = (PI/4.0_pReal)*prm%lamellarsizePerTransSystem*mse%mfp_trans(:,of)**2.0_pReal !* equilibrium separation of partial dislocations (twin) - do t = 1_pInt,nt - x0 = lattice_mu(ph)*plastic_dislotwin_burgersPerTwinSystem(t,instance)**(2.0_pReal)/& - (sfe*8.0_pReal*pi)*(2.0_pReal+lattice_nu(ph))/(1.0_pReal-lattice_nu(ph)) - plastic_dislotwin_tau_r_twin(t,instance)= & - lattice_mu(ph)*plastic_dislotwin_burgersPerTwinSystem(t,instance)/(2.0_pReal*pi)*& - (1/(x0+plastic_dislotwin_xc_twin(instance))+cos(pi/3.0_pReal)/x0) - enddo + x0 = prm%mu*prm%burgers_twin**2.0_pReal/(sfe*8.0_pReal*PI)*(2.0_pReal+prm%nu)/(1.0_pReal-prm%nu) + mse%tau_r_twin(:,of) = prm%mu*prm%burgers_twin/(2.0_pReal*PI)*(1.0_pReal/(x0+prm%xc_twin)+cos(pi/3.0_pReal)/x0) !* equilibrium separation of partial dislocations (trans) - do r = 1_pInt,nr - x0 = lattice_mu(ph)*plastic_dislotwin_burgersPerTransSystem(r,instance)**(2.0_pReal)/& - (sfe*8.0_pReal*pi)*(2.0_pReal+lattice_nu(ph))/(1.0_pReal-lattice_nu(ph)) - plastic_dislotwin_tau_r_trans(r,instance)= & - lattice_mu(ph)*plastic_dislotwin_burgersPerTransSystem(r,instance)/(2.0_pReal*pi)*& - (1/(x0+plastic_dislotwin_xc_trans(instance))+cos(pi/3.0_pReal)/x0) - enddo + x0 = prm%mu*prm%burgers_trans**2.0_pReal/(sfe*8.0_pReal*PI)*(2.0_pReal+prm%nu)/(1.0_pReal-prm%nu) + mse%tau_r_trans(:,of) = prm%mu*prm%burgers_trans/(2.0_pReal*PI)*(1.0_pReal/(x0+prm%xc_trans)+cos(pi/3.0_pReal)/x0) +end associate end subroutine plastic_dislotwin_microstructure !-------------------------------------------------------------------------------------------------- !> @brief calculates plastic velocity gradient and its tangent !-------------------------------------------------------------------------------------------------- -subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature,ipc,ip,el) +subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,Temperature,instance,of) use prec, only: & tol_math_check, & dNeq0 use math, only: & - math_Plain3333to99, & - math_Mandel6to33, & - math_Mandel33to6, & math_eigenValuesVectorsSym, & math_tensorproduct33, & math_symmetric33, & + math_mul33xx33, & math_mul33x3 use material, only: & material_phase, & phase_plasticityInstance, & - phaseAt, phasememberAt - use lattice, only: & - lattice_Sslip, & - lattice_Sslip_v, & - lattice_Stwin, & - lattice_Stwin_v, & - lattice_Strans, & - lattice_Strans_v, & - lattice_maxNslipFamily,& - lattice_maxNtwinFamily, & - lattice_maxNtransFamily, & - lattice_NslipSystem, & - lattice_NtwinSystem, & - lattice_NtransSystem, & - lattice_shearTwin, & - lattice_structure, & - lattice_fcc_twinNucleationSlipPair, & - LATTICE_fcc_ID + phasememberAt implicit none - integer(pInt), intent(in) :: ipc,ip,el - real(pReal), intent(in) :: Temperature - real(pReal), dimension(6), intent(in) :: Tstar_v - real(pReal), dimension(3,3), intent(out) :: Lp - real(pReal), dimension(9,9), intent(out) :: dLp_dTstar99 + real(pReal), dimension(3,3), intent(out) :: Lp + real(pReal), dimension(3,3,3,3), intent(out) :: dLp_dMp + real(pReal), dimension(3,3), intent(in) :: Mp + integer(pInt), intent(in) :: instance,of + real(pReal), intent(in) :: Temperature - integer(pInt) :: instance,ph,of,ns,nt,nr,f,i,j,k,l,m,n,index_myFamily,s1,s2 - real(pReal) :: sumf,sumftr,StressRatio_p,StressRatio_pminus1,StressRatio_r,BoltzmannRatio,DotGamma0,Ndot0_twin,stressRatio, & - Ndot0_trans,StressRatio_s - real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 - real(pReal), dimension(plastic_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_slip,dgdot_dtauslip,tau_slip - real(pReal), dimension(plastic_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_twin,dgdot_dtautwin,tau_twin - real(pReal), dimension(plastic_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_trans,dgdot_dtautrans,tau_trans - real(pReal), dimension(6) :: gdot_sb,dgdot_dtausb,tau_sb - real(pReal), dimension(3,3) :: eigVectors, sb_Smatrix + integer(pInt) :: i,k,l,m,n,s1,s2 + real(pReal) :: f_unrotated,StressRatio_p,& + StressRatio_r,BoltzmannRatio,Ndot0_twin,stressRatio, & + Ndot0_trans,StressRatio_s, & + dgdot_dtau, & + tau + real(pReal), dimension(param(instance)%totalNslip) :: & + gdot_slip,dgdot_dtau_slip + real(pReal), dimension(param(instance)%totalNtwin) :: & + gdot_twin,dgdot_dtau_twin + real(pReal):: gdot_sb,gdot_trans + real(pReal), dimension(3,3) :: eigVectors, Schmid_shearBand real(pReal), dimension(3) :: eigValues, sb_s, sb_m logical :: error real(pReal), dimension(3,6), parameter :: & @@ -1707,239 +998,104 @@ subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature 0, 1,-1, & 0, 1, 1 & ],pReal),[ 3,6]) - !* Shortened notation - of = phasememberAt(ipc,ip,el) - ph = phaseAt(ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = plastic_dislotwin_totalNslip(instance) - nt = plastic_dislotwin_totalNtwin(instance) - nr = plastic_dislotwin_totalNtrans(instance) + + type(tParameters) :: prm !< parameters of present instance + type(tDislotwinState) :: ste !< state of present instance + + associate(prm => param(instance), stt => state(instance), mse => microstructure(instance)) + + f_unrotated = 1.0_pReal & + - sum(stt%twinFraction(1_pInt:prm%totalNtwin,of)) & + - sum(stt%stressTransFraction(1_pInt:prm%totalNtrans,of)) & + - sum(stt%strainTransFraction(1_pInt:prm%totalNtrans,of)) Lp = 0.0_pReal - dLp_dTstar3333 = 0.0_pReal + dLp_dMp = 0.0_pReal -!-------------------------------------------------------------------------------------------------- -! Dislocation glide part - gdot_slip = 0.0_pReal - dgdot_dtauslip = 0.0_pReal - j = 0_pInt - slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystemsLoop: do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) - j = j+1_pInt + call kinetics_slip(prm,stt,mse,of,Mp,temperature,gdot_slip,dgdot_dtau_slip) + slipContribution: do i = 1_pInt, prm%totalNslip + Lp = Lp + gdot_slip(i)*prm%Schmid_slip(1:3,1:3,i) + forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & + dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) & + + dgdot_dtau_slip(i) * prm%Schmid_slip(k,l,i) * prm%Schmid_slip(m,n,i) + enddo slipContribution - !* Calculation of Lp - !* Resolved shear stress on slip system - tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) + !ToDo: Why do this before shear banding? + Lp = Lp * f_unrotated + dLp_dMp = dLp_dMp * f_unrotated + + shearBandingContribution: if(dNeq0(prm%sbVelocity)) then - if((abs(tau_slip(j))-state(instance)%threshold_stress_slip(j,of)) > tol_math_check) then - !* Stress ratios - stressRatio =((abs(tau_slip(j))- state(instance)%threshold_stress_slip(j,of))/& - (plastic_dislotwin_SolidSolutionStrength(instance)+plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))) - StressRatio_p = stressRatio** plastic_dislotwin_pPerSlipFamily(f,instance) - StressRatio_pminus1 = stressRatio**(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) - !* Boltzmann ratio - BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) - !* Initial shear rates - DotGamma0 = & - state(instance)%rhoEdge(j,of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)*& - plastic_dislotwin_v0PerSlipSystem(j,instance) - - !* Shear rates due to slip - gdot_slip(j) = DotGamma0 & - * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislotwin_qPerSlipFamily(f,instance)) & - * sign(1.0_pReal,tau_slip(j)) - - !* Derivatives of shear rates - dgdot_dtauslip(j) = & - abs(gdot_slip(j))*BoltzmannRatio*plastic_dislotwin_pPerSlipFamily(f,instance)& - *plastic_dislotwin_qPerSlipFamily(f,instance)/& - (plastic_dislotwin_SolidSolutionStrength(instance)+plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1-StressRatio_p)**(plastic_dislotwin_qPerSlipFamily(f,instance)-1.0_pReal) - endif - - !* Plastic velocity gradient for dislocation glide - Lp = Lp + gdot_slip(j)*lattice_Sslip(:,:,1,index_myFamily+i,ph) - - !* Calculation of the tangent of Lp - forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & - dLp_dTstar3333(k,l,m,n) = & - dLp_dTstar3333(k,l,m,n) + dgdot_dtauslip(j)*& - lattice_Sslip(k,l,1,index_myFamily+i,ph)*& - lattice_Sslip(m,n,1,index_myFamily+i,ph) - enddo slipSystemsLoop - enddo slipFamiliesLoop - -!-------------------------------------------------------------------------------------------------- -! correct Lp and dLp_dTstar3333 for twinned and transformed fraction - !* Total twin volume fraction - sumf = sum(state(instance)%twinFraction(1_pInt:nt,of)) ! safe for nt == 0 + BoltzmannRatio = prm%sbQedge/(kB*Temperature) + call math_eigenValuesVectorsSym(Mp,eigValues,eigVectors,error) - !* Total transformed volume fraction - sumftr = sum(state(instance)%stressTransFraction(1_pInt:nr,of)) + & - sum(state(instance)%strainTransFraction(1_pInt:nr,of)) - Lp = Lp * (1.0_pReal - sumf - sumftr) - dLp_dTstar3333 = dLp_dTstar3333 * (1.0_pReal - sumf - sumftr) - -!-------------------------------------------------------------------------------------------------- -! Shear banding (shearband) part - if(dNeq0(plastic_dislotwin_sbVelocity(instance)) .and. dNeq0(plastic_dislotwin_sbResistance(instance))) then - gdot_sb = 0.0_pReal - dgdot_dtausb = 0.0_pReal - call math_eigenValuesVectorsSym(math_Mandel6to33(Tstar_v),eigValues,eigVectors,error) - do j = 1_pInt,6_pInt - sb_s = 0.5_pReal*sqrt(2.0_pReal)*math_mul33x3(eigVectors,sb_sComposition(1:3,j)) - sb_m = 0.5_pReal*sqrt(2.0_pReal)*math_mul33x3(eigVectors,sb_mComposition(1:3,j)) - sb_Smatrix = math_tensorproduct33(sb_s,sb_m) - plastic_dislotwin_sbSv(1:6,j,ipc,ip,el) = math_Mandel33to6(math_symmetric33(sb_Smatrix)) + do i = 1_pInt,6_pInt + sb_s = 0.5_pReal*sqrt(2.0_pReal)*math_mul33x3(eigVectors,sb_sComposition(1:3,i)) + sb_m = 0.5_pReal*sqrt(2.0_pReal)*math_mul33x3(eigVectors,sb_mComposition(1:3,i)) + Schmid_shearBand = math_tensorproduct33(sb_s,sb_m) + tau = math_mul33xx33(Mp,Schmid_shearBand) - !* Calculation of Lp - !* Resolved shear stress on shear banding system - tau_sb(j) = dot_product(Tstar_v,plastic_dislotwin_sbSv(1:6,j,ipc,ip,el)) - - !* Stress ratios - if (abs(tau_sb(j)) < tol_math_check) then - StressRatio_p = 0.0_pReal - StressRatio_pminus1 = 0.0_pReal - else - StressRatio_p = (abs(tau_sb(j))/plastic_dislotwin_sbResistance(instance))& - **plastic_dislotwin_pShearBand(instance) - StressRatio_pminus1 = (abs(tau_sb(j))/plastic_dislotwin_sbResistance(instance))& - **(plastic_dislotwin_pShearBand(instance)-1.0_pReal) - endif - - !* Boltzmann ratio - BoltzmannRatio = plastic_dislotwin_sbQedge(instance)/(kB*Temperature) - !* Initial shear rates - DotGamma0 = plastic_dislotwin_sbVelocity(instance) + significantShearBandStress: if (abs(tau) > tol_math_check) then + StressRatio_p = (abs(tau)/prm%sbResistance)**prm%pShearBand + gdot_sb = sign(prm%sbVelocity*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**prm%qShearBand), tau) + dgdot_dtau = ((abs(gdot_sb)*BoltzmannRatio* prm%pShearBand*prm%qShearBand)/ prm%sbResistance) & + * (abs(tau)/prm%sbResistance)**(prm%pShearBand-1.0_pReal) & + * (1.0_pReal-StressRatio_p)**(prm%qShearBand-1.0_pReal) - !* Shear rates due to shearband - gdot_sb(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - plastic_dislotwin_qShearBand(instance))*sign(1.0_pReal,tau_sb(j)) - - !* Derivatives of shear rates - dgdot_dtausb(j) = & - ((abs(gdot_sb(j))*BoltzmannRatio*& - plastic_dislotwin_pShearBand(instance)*plastic_dislotwin_qShearBand(instance))/& - plastic_dislotwin_sbResistance(instance))*& - StressRatio_pminus1*(1_pInt-StressRatio_p)**(plastic_dislotwin_qShearBand(instance)-1.0_pReal) - - !* Plastic velocity gradient for shear banding - Lp = Lp + gdot_sb(j)*sb_Smatrix - - !* Calculation of the tangent of Lp - forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & - dLp_dTstar3333(k,l,m,n) = & - dLp_dTstar3333(k,l,m,n) + dgdot_dtausb(j)*& - sb_Smatrix(k,l)*& - sb_Smatrix(m,n) + Lp = Lp + gdot_sb * Schmid_shearBand + forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & + dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) & + + dgdot_dtau * Schmid_shearBand(k,l) * Schmid_shearBand(m,n) + endif significantShearBandStress enddo - end if + + endif shearBandingContribution -!-------------------------------------------------------------------------------------------------- -! Mechanical twinning part - gdot_twin = 0.0_pReal - dgdot_dtautwin = 0.0_pReal - j = 0_pInt - twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily - index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystemsLoop: do i = 1_pInt,plastic_dislotwin_Ntwin(f,instance) - j = j+1_pInt - - !* Calculation of Lp - !* Resolved shear stress on twin system - tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) + call kinetics_twin(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_twin,dgdot_dtau_twin) + gdot_twin = f_unrotated * gdot_twin + dgdot_dtau_twin = f_unrotated * dgdot_dtau_twin + twinContibution: do i = 1_pInt, prm%totalNtwin + Lp = Lp + gdot_twin(i)*prm%Schmid_twin(1:3,1:3,i) + forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & + dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) & + + dgdot_dtau_twin(i)* prm%Schmid_twin(k,l,i)*prm%Schmid_twin(m,n,i) + enddo twinContibution - !* Stress ratios - if (tau_twin(j) > tol_math_check) then - StressRatio_r = (state(instance)%threshold_stress_twin(j,of)/tau_twin(j))**plastic_dislotwin_rPerTwinFamily(f,instance) - !* Shear rates and their derivatives due to twin - select case(lattice_structure(ph)) - case (LATTICE_fcc_ID) - s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) - s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin(j) < plastic_dislotwin_tau_r_twin(j,instance)) then - Ndot0_twin=(abs(gdot_slip(s1))*(state(instance)%rhoEdge(s2,of)+state(ph)%rhoEdgeDip(s2,of))+& !!!!! correct? - abs(gdot_slip(s2))*(state(instance)%rhoEdge(s1,of)+state(instance)%rhoEdgeDip(s1,of)))/& - (plastic_dislotwin_L0_twin(instance)*plastic_dislotwin_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-plastic_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& - (plastic_dislotwin_tau_r_twin(j,instance)-tau_twin(j)))) - else - Ndot0_twin=0.0_pReal - end if - case default - Ndot0_twin=plastic_dislotwin_Ndot0PerTwinSystem(j,instance) - end select - gdot_twin(j) = & - (1.0_pReal-sumf-sumftr)*lattice_shearTwin(index_myFamily+i,ph)*& - state(instance)%twinVolume(j,of)*Ndot0_twin*exp(-StressRatio_r) - dgdot_dtautwin(j) = ((gdot_twin(j)*plastic_dislotwin_rPerTwinFamily(f,instance))/tau_twin(j))*StressRatio_r - endif - - !* Plastic velocity gradient for mechanical twinning - Lp = Lp + gdot_twin(j)*lattice_Stwin(:,:,index_myFamily+i,ph) - - !* Calculation of the tangent of Lp - forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & - dLp_dTstar3333(k,l,m,n) = & - dLp_dTstar3333(k,l,m,n) + dgdot_dtautwin(j)*& - lattice_Stwin(k,l,index_myFamily+i,ph)*& - lattice_Stwin(m,n,index_myFamily+i,ph) - enddo twinSystemsLoop - enddo twinFamiliesLoop + transConstribution: do i = 1_pInt, prm%totalNtrans - !* Phase transformation part - gdot_trans = 0.0_pReal - dgdot_dtautrans = 0.0_pReal - j = 0_pInt - transFamiliesLoop: do f = 1_pInt,lattice_maxNtransFamily - index_myFamily = sum(lattice_NtransSystem(1:f-1_pInt,ph)) ! at which index starts my family - transSystemsLoop: do i = 1_pInt,plastic_dislotwin_Ntrans(f,instance) - j = j+1_pInt + tau = math_mul33xx33(Mp,prm%Schmid_trans(1:3,1:3,i)) - !* Resolved shear stress on transformation system - tau_trans(j) = dot_product(Tstar_v,lattice_Strans_v(:,index_myFamily+i,ph)) + significantTransStress: if (tau > tol_math_check) then + StressRatio_s = (mse%threshold_stress_trans(i,of)/tau)**prm%s(i) - !* Stress ratios - if (tau_trans(j) > tol_math_check) then - StressRatio_s = (state(instance)%threshold_stress_trans(j,of)/tau_trans(j))**plastic_dislotwin_sPerTransFamily(f,instance) - !* Shear rates and their derivatives due to transformation - select case(lattice_structure(ph)) - case (LATTICE_fcc_ID) - s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) - s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_trans(j) < plastic_dislotwin_tau_r_trans(j,instance)) then - Ndot0_trans=(abs(gdot_slip(s1))*(state(instance)%rhoEdge(s2,of)+state(instance)%rhoEdgeDip(s2,of))+& !!!!! correct? - abs(gdot_slip(s2))*(state(instance)%rhoEdge(s1,of)+state(instance)%rhoEdgeDip(s1,of)))/& - (plastic_dislotwin_L0_trans(instance)*plastic_dislotwin_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-plastic_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& - (plastic_dislotwin_tau_r_trans(j,instance)-tau_trans(j)))) - else - Ndot0_trans=0.0_pReal - end if - case default - Ndot0_trans=plastic_dislotwin_Ndot0PerTransSystem(j,instance) - end select - gdot_trans(j) = & - (1.0_pReal-sumf-sumftr)*& - state(instance)%martensiteVolume(j,of)*Ndot0_trans*exp(-StressRatio_s) - dgdot_dtautrans(j) = ((gdot_trans(j)*plastic_dislotwin_sPerTransFamily(f,instance))/tau_trans(j))*StressRatio_s - endif + isFCCtrans: if (prm%isFCC) then + s1=prm%fcc_twinNucleationSlipPair(1,i) + s2=prm%fcc_twinNucleationSlipPair(2,i) + if (tau < mse%tau_r_trans(i,of)) then + Ndot0_trans=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+& !!!!! correct? + abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/& + (prm%L0_trans*prm%burgers_slip(i))*& + (1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*(mse%tau_r_trans(i,of)-tau))) + else + Ndot0_trans=0.0_pReal + end if + else isFCCtrans + Ndot0_trans=prm%Ndot0_trans(i) + endif isFCCtrans - !* Plastic velocity gradient for phase transformation - Lp = Lp + gdot_trans(j)*lattice_Strans(:,:,index_myFamily+i,ph) + gdot_trans = mse%martensiteVolume(i,of) * Ndot0_trans*exp(-StressRatio_s) + gdot_trans = f_unrotated * gdot_trans + dgdot_dtau = ((gdot_trans*prm%s(i))/tau)*StressRatio_s + Lp = Lp + gdot_trans*prm%Schmid_trans(1:3,1:3,i) + + forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & + dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) & + + dgdot_dtau * prm%Schmid_trans(k,l,i)* prm%Schmid_trans(m,n,i) + endif significantTransStress - !* Calculation of the tangent of Lp - forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & - dLp_dTstar3333(k,l,m,n) = & - dLp_dTstar3333(k,l,m,n) + dgdot_dtautrans(j)*& - lattice_Strans(k,l,index_myFamily+i,ph)*& - lattice_Strans(m,n,index_myFamily+i,ph) + enddo transConstribution - enddo transSystemsLoop - enddo transFamiliesLoop - - dLp_dTstar99 = math_Plain3333to99(dLp_dTstar3333) + end associate end subroutine plastic_dislotwin_LpAndItsTangent @@ -1947,598 +1103,596 @@ end subroutine plastic_dislotwin_LpAndItsTangent !-------------------------------------------------------------------------------------------------- !> @brief calculates the rate of change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine plastic_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) +subroutine plastic_dislotwin_dotState(Mp,Temperature,instance,of) use prec, only: & tol_math_check, & dEq0 use math, only: & + math_mul33xx33, & + math_Mandel6to33, & pi use material, only: & material_phase, & phase_plasticityInstance, & plasticState, & - phaseAt, phasememberAt - use lattice, only: & - lattice_Sslip_v, & - lattice_Stwin_v, & - lattice_Strans_v, & - lattice_maxNslipFamily, & - lattice_maxNtwinFamily, & - lattice_maxNtransFamily, & - lattice_NslipSystem, & - lattice_NtwinSystem, & - lattice_NtransSystem, & - lattice_sheartwin, & - lattice_mu, & - lattice_structure, & - lattice_fcc_twinNucleationSlipPair, & - lattice_fccTobcc_transNucleationTwinPair, & - lattice_fccTobcc_shearCritTrans, & - LATTICE_fcc_ID + phasememberAt implicit none - real(pReal), dimension(6), intent(in):: & - Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation - real(pReal), intent(in) :: & + real(pReal), dimension(3,3), intent(in):: & + Mp !< Mandel stress + real(pReal), intent(in) :: & temperature !< temperature at integration point - integer(pInt), intent(in) :: & - ipc, & !< component-ID of integration point - ip, & !< integration point - el !< element + integer(pInt), intent(in) :: & + instance, & + of - integer(pInt) :: instance,ns,nt,nr,f,i,j,index_myFamily,s1,s2, & - ph, & - of - real(pReal) :: sumf,sumftr,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,& + integer(pInt) :: i,s1,s2 + real(pReal) :: f_unrotated,StressRatio_p,BoltzmannRatio,& EdgeDipMinDistance,AtomicVolume,VacancyDiffusion,StressRatio_r,Ndot0_twin,stressRatio,& Ndot0_trans,StressRatio_s,EdgeDipDistance, ClimbVelocity,DotRhoEdgeDipClimb,DotRhoEdgeDipAnnihilation, & - DotRhoDipFormation,DotRhoMultiplication,DotRhoEdgeEdgeAnnihilation - real(pReal), dimension(plastic_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_slip,tau_slip + DotRhoDipFormation,DotRhoMultiplication,DotRhoEdgeEdgeAnnihilation, & + tau + real(pReal), dimension(plasticState(instance)%Nslip) :: & + gdot_slip - real(pReal), dimension(plastic_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - tau_twin - real(pReal), dimension(plastic_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - tau_trans - !* Shortened notation - of = phasememberAt(ipc,ip,el) - ph = phaseAt(ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = plastic_dislotwin_totalNslip(instance) - nt = plastic_dislotwin_totalNtwin(instance) - nr = plastic_dislotwin_totalNtrans(instance) + type(tParameters) :: prm + type(tDislotwinState) :: stt, dot + type(tDislotwinMicrostructure) :: mse - !* Total twin volume fraction - sumf = sum(state(instance)%twinFraction(1_pInt:nt,of)) ! safe for nt == 0 - plasticState(ph)%dotState(:,of) = 0.0_pReal - - !* Total transformed volume fraction - sumftr = sum(state(instance)%stressTransFraction(1_pInt:nr,of)) + & - sum(state(instance)%strainTransFraction(1_pInt:nr,of)) - - !* Dislocation density evolution - gdot_slip = 0.0_pReal - j = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family - j = j+1_pInt - - !* Resolved shear stress on slip system - tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) - if((abs(tau_slip(j))-state(instance)%threshold_stress_slip(j,of)) > tol_math_check) then - !* Stress ratios - stressRatio =((abs(tau_slip(j))- state(instance)%threshold_stress_slip(j,of))/& - (plastic_dislotwin_SolidSolutionStrength(instance)+plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))) - StressRatio_p = stressRatio** plastic_dislotwin_pPerSlipFamily(f,instance) - StressRatio_pminus1 = stressRatio**(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) - !* Boltzmann ratio - BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) - !* Initial shear rates - DotGamma0 = & - plasticState(ph)%state(j, of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)*& - plastic_dislotwin_v0PerSlipSystem(j,instance) - - !* Shear rates due to slip - gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)** & - plastic_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau_slip(j)) - endif - !* Multiplication - DotRhoMultiplication = abs(gdot_slip(j))/& - (plastic_dislotwin_burgersPerSlipSystem(j,instance)*state(instance)%mfp_slip(j,of)) - !* Dipole formation - EdgeDipMinDistance = & - plastic_dislotwin_CEdgeDipMinDistance(instance)*plastic_dislotwin_burgersPerSlipSystem(j,instance) - if (dEq0(tau_slip(j))) then - DotRhoDipFormation = 0.0_pReal - else - EdgeDipDistance = & - (3.0_pReal*lattice_mu(ph)*plastic_dislotwin_burgersPerSlipSystem(j,instance))/& - (16.0_pReal*pi*abs(tau_slip(j))) - if (EdgeDipDistance>state(instance)%mfp_slip(j,of)) EdgeDipDistance=state(instance)%mfp_slip(j,of) - if (EdgeDipDistance tol_math_check) then - StressRatio_r = (state(instance)%threshold_stress_twin(j,of)/& - tau_twin(j))**plastic_dislotwin_rPerTwinFamily(f,instance) - !* Shear rates and their derivatives due to twin - select case(lattice_structure(ph)) - case (LATTICE_fcc_ID) - s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) - s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin(j) < plastic_dislotwin_tau_r_twin(j,instance)) then - Ndot0_twin=(abs(gdot_slip(s1))*(state(instance)%rhoEdge(s2,of)+state(instance)%rhoEdgeDip(s2,of))+& - abs(gdot_slip(s2))*(state(instance)%rhoEdge(s1,of)+state(instance)%rhoEdgeDip(s1,of)))/& - (plastic_dislotwin_L0_twin(instance)*plastic_dislotwin_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-plastic_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& - (plastic_dislotwin_tau_r_twin(j,instance)-tau_twin(j)))) - else - Ndot0_twin=0.0_pReal - end if - case default - Ndot0_twin=plastic_dislotwin_Ndot0PerTwinSystem(j,instance) - end select - dotState(instance)%twinFraction(j,of) = & - (1.0_pReal-sumf-sumftr)*& - state(instance)%twinVolume(j,of)*Ndot0_twin*exp(-StressRatio_r) - !* Dotstate for accumulated shear due to twin - dotState(instance)%accshear_twin(j,of) = dotState(instance)%twinFraction(j,of) * & - lattice_sheartwin(index_myfamily+i,ph) - endif - enddo - enddo + associate(prm => param(instance), stt => state(instance), & + dot => dotstate(instance), mse => microstructure(instance)) - !* Transformation volume fraction evolution - j = 0_pInt - do f = 1_pInt,lattice_maxNtransFamily ! loop over all trans families - index_myFamily = sum(lattice_NtransSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,plastic_dislotwin_Ntrans(f,instance) ! process each (active) trans system in family - j = j+1_pInt + dot%whole(:,of) = 0.0_pReal - !* Resolved shear stress on transformation system - tau_trans(j) = dot_product(Tstar_v,lattice_Strans_v(:,index_myFamily+i,ph)) + f_unrotated = 1.0_pReal & + - sum(stt%twinFraction(1_pInt:prm%totalNtwin,of)) & + - sum(stt%stressTransFraction(1_pInt:prm%totalNtrans,of)) & + - sum(stt%strainTransFraction(1_pInt:prm%totalNtrans,of)) - !* Stress ratios - if (tau_trans(j) > tol_math_check) then - StressRatio_s = (state(instance)%threshold_stress_trans(j,of)/& - tau_trans(j))**plastic_dislotwin_sPerTransFamily(f,instance) - !* Shear rates and their derivatives due to transformation - select case(lattice_structure(ph)) - case (LATTICE_fcc_ID) - s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) - s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_trans(j) < plastic_dislotwin_tau_r_trans(j,instance)) then - Ndot0_trans=(abs(gdot_slip(s1))*(state(instance)%rhoEdge(s2,of)+state(instance)%rhoEdgeDip(s2,of))+& - abs(gdot_slip(s2))*(state(instance)%rhoEdge(s1,of)+state(instance)%rhoEdgeDip(s1,of)))/& - (plastic_dislotwin_L0_trans(instance)*plastic_dislotwin_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-plastic_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& - (plastic_dislotwin_tau_r_trans(j,instance)-tau_trans(j)))) - else - Ndot0_trans=0.0_pReal - end if - case default - Ndot0_trans=plastic_dislotwin_Ndot0PerTransSystem(j,instance) - end select - dotState(instance)%strainTransFraction(j,of) = & - (1.0_pReal-sumf-sumftr)*& - state(instance)%martensiteVolume(j,of)*Ndot0_trans*exp(-StressRatio_s) + call kinetics_slip(prm,stt,mse,of,Mp,temperature,gdot_slip) + slipState: do i = 1_pInt, prm%totalNslip + tau = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,i)) + + DotRhoMultiplication = abs(gdot_slip(i))/(prm%burgers_slip(i)*mse%mfp_slip(i,of)) + EdgeDipMinDistance = prm%CEdgeDipMinDistance*prm%burgers_slip(i) + + significantSlipStress2: if (dEq0(tau)) then + DotRhoDipFormation = 0.0_pReal + else significantSlipStress2 + EdgeDipDistance = (3.0_pReal*prm%mu*prm%burgers_slip(i))/(16.0_pReal*PI*abs(tau)) + if (EdgeDipDistance>mse%mfp_slip(i,of)) EdgeDipDistance = mse%mfp_slip(i,of) + if (EdgeDipDistance tol_math_check) then + StressRatio_r = (mse%threshold_stress_twin(i,of)/tau)**prm%r(i) + isFCCtwin: if (prm%isFCC) then + s1=prm%fcc_twinNucleationSlipPair(1,i) + s2=prm%fcc_twinNucleationSlipPair(2,i) + if (tau < mse%tau_r_twin(i,of)) then + Ndot0_twin=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+& + abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/& + (prm%L0_twin*prm%burgers_slip(i))*(1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*& + (mse%tau_r_twin(i,of)-tau))) + else + Ndot0_twin=0.0_pReal + end if + else isFCCtwin + Ndot0_twin=prm%Ndot0_twin(i) + endif isFCCtwin + dot%twinFraction(i,of) = f_unrotated * mse%twinVolume(i,of)*Ndot0_twin*exp(-StressRatio_r) + dot%accshear_twin(i,of) = dot%twinFraction(i,of) * prm%shear_twin(i) + endif significantTwinStress + + enddo twinState + + transState: do i = 1_pInt, prm%totalNtrans + + tau = math_mul33xx33(Mp,prm%Schmid_trans(1:3,1:3,i)) + + significantTransStress: if (tau > tol_math_check) then + StressRatio_s = (mse%threshold_stress_trans(i,of)/tau)**prm%s(i) + isFCCtrans: if (prm%isFCC) then + s1=prm%fcc_twinNucleationSlipPair(1,i) + s2=prm%fcc_twinNucleationSlipPair(2,i) + if (tau < mse%tau_r_trans(i,of)) then + Ndot0_trans=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+& + abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/& + (prm%L0_trans*prm%burgers_slip(i))*(1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*& + (mse%tau_r_trans(i,of)-tau))) + else + Ndot0_trans=0.0_pReal + end if + else isFCCtrans + Ndot0_trans=prm%Ndot0_trans(i) + endif isFCCtrans + dot%strainTransFraction(i,of) = f_unrotated * & + mse%martensiteVolume(i,of)*Ndot0_trans*exp(-StressRatio_s) !* Dotstate for accumulated shear due to transformation - !dotState(instance)%accshear_trans(j,of) = dotState(instance)%strainTransFraction(j,of) * & + !dot%accshear_trans(i,of) = dot%strainTransFraction(i,of) * & ! lattice_sheartrans(index_myfamily+i,ph) - endif - - enddo - enddo + endif significantTransStress + + enddo transState + end associate end subroutine plastic_dislotwin_dotState + +!-------------------------------------------------------------------------------------------------- +!> @brief calculates shear rates on slip systems +!-------------------------------------------------------------------------------------------------- +pure subroutine kinetics_slip(prm,stt,mse,of,Mp,temperature,gdot_slip,dgdot_dtau_slip) + use prec, only: & + tol_math_check, & + dNeq0 + use math, only: & + math_mul33xx33 + + implicit none + type(tParameters), intent(in) :: & + prm + type(tDislotwinState), intent(in) :: & + stt + integer(pInt), intent(in) :: & + of + type(tDislotwinMicrostructure), intent(in) :: & + mse + real(pReal), dimension(prm%totalNslip), intent(out) :: & + gdot_slip + real(pReal), dimension(prm%totalNslip), optional, intent(out) :: & + dgdot_dtau_slip + real(pReal), dimension(prm%totalNslip) :: & + dgdot_dtau + real(pReal), dimension(3,3), intent(in) :: & + Mp + real(pReal), intent(in) :: & + temperature + + real, dimension(prm%totalNslip) :: & + tau, & + stressRatio, & + StressRatio_p, & + BoltzmannRatio, & + v_wait_inverse, & !< inverse of the effective velocity of a dislocation waiting at obstacles (unsigned) + v_run_inverse, & !< inverse of the velocity of a free moving dislocation (unsigned) + dV_wait_inverse_dTau, & + dV_run_inverse_dTau, & + dV_dTau, & + tau_eff !< effective resolved stress + integer(pInt) :: i + + do i = 1_pInt, prm%totalNslip + tau(i) = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,i)) + enddo + tau_eff = abs(tau)-mse%threshold_stress_slip(:,of) + + significantStress: where(tau_eff > tol_math_check) + stressRatio = tau_eff/(prm%SolidSolutionStrength+prm%tau_peierls) + StressRatio_p = stressRatio** prm%p + BoltzmannRatio = prm%Qedge/(kB*Temperature) + v_wait_inverse = prm%v0**(-1.0_pReal) * exp(BoltzmannRatio*(1.0_pReal-StressRatio_p)** prm%q) + v_run_inverse = prm%B/(tau_eff*prm%burgers_slip) + + gdot_slip = sign(stt%rhoEdge(:,of)*prm%burgers_slip/(v_wait_inverse+v_run_inverse),tau) + + dV_wait_inverse_dTau = v_wait_inverse * prm%p * prm%q * BoltzmannRatio & + * (stressRatio**(prm%p-1.0_pReal)) & + * (1.0_pReal-StressRatio_p)**(prm%q-1.0_pReal) & + / (prm%SolidSolutionStrength+prm%tau_peierls) + dV_run_inverse_dTau = v_run_inverse/tau_eff + dV_dTau = (dV_wait_inverse_dTau+dV_run_inverse_dTau) & + / (v_wait_inverse+v_run_inverse)**2.0_pReal + dgdot_dtau = dV_dTau*stt%rhoEdge(:,of)*prm%burgers_slip + else where significantStress + gdot_slip = 0.0_pReal + dgdot_dtau = 0.0_pReal + end where significantStress + if(present(dgdot_dtau_slip)) dgdot_dtau_slip = dgdot_dtau + +end subroutine kinetics_slip + + +!-------------------------------------------------------------------------------------------------- +!> @brief calculates shear rates on twin systems +!-------------------------------------------------------------------------------------------------- +pure subroutine kinetics_twin(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_twin,dgdot_dtau_twin) + use prec, only: & + tol_math_check, & + dNeq0 + use math, only: & + math_mul33xx33 + + implicit none + type(tParameters), intent(in) :: & + prm + type(tDislotwinState), intent(in) :: & + stt + integer(pInt), intent(in) :: & + of + type(tDislotwinMicrostructure), intent(in) :: & + mse + real(pReal), dimension(prm%totalNslip), intent(out) :: & + gdot_slip + real(pReal), dimension(prm%totalNtwin), intent(out) :: & + gdot_twin + real(pReal), dimension(prm%totalNtwin), optional, intent(out) :: & + dgdot_dtau_twin + real(pReal), dimension(3,3), intent(in) :: & + Mp + real(pReal), intent(in) :: & + temperature + + real, dimension(prm%totalNtwin) :: & + tau, & + Ndot0_twin, & + stressRatio_r, & + dgdot_dtau + + integer(pInt) :: i,s1,s2 + + do i = 1_pInt, prm%totalNtwin + tau(i) = math_mul33xx33(Mp,prm%Schmid_twin(1:3,1:3,i)) + isFCC: if (prm%isFCC) then + s1=prm%fcc_twinNucleationSlipPair(1,i) + s2=prm%fcc_twinNucleationSlipPair(2,i) + if (tau(i) < mse%tau_r_twin(i,of)) then + Ndot0_twin=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+& + abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/& + (prm%L0_twin*prm%burgers_slip(i))*& + (1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*& + (mse%tau_r_twin(i,of)-tau))) + else + Ndot0_twin=0.0_pReal + end if + else isFCC + Ndot0_twin=prm%Ndot0_twin(i) + endif isFCC + enddo + + + significantStress: where(tau > tol_math_check) + StressRatio_r = (mse%threshold_stress_twin(:,of)/tau)**prm%r + gdot_twin = prm%shear_twin * mse%twinVolume(:,of) * Ndot0_twin*exp(-StressRatio_r) + dgdot_dtau = ((gdot_twin*prm%r)/tau)*StressRatio_r + else where significantStress + gdot_twin = 0.0_pReal + dgdot_dtau = 0.0_pReal + end where significantStress + + if(present(dgdot_dtau_twin)) dgdot_dtau_twin = dgdot_dtau + +end subroutine kinetics_twin + + +!-------------------------------------------------------------------------------------------------- +!> @brief calculates shear rates on transformation systems +!-------------------------------------------------------------------------------------------------- +pure subroutine kinetics_trans(prm,stt,mse,of,Mp,temperature,gdot_slip,gdot_trans,dgdot_dtau_trans) + use prec, only: & + tol_math_check, & + dNeq0 + use math, only: & + math_mul33xx33 + + implicit none + type(tParameters), intent(in) :: & + prm + type(tDislotwinState), intent(in) :: & + stt + integer(pInt), intent(in) :: & + of + type(tDislotwinMicrostructure), intent(in) :: & + mse + real(pReal), dimension(prm%totalNslip), intent(out) :: & + gdot_slip + real(pReal), dimension(prm%totalNtrans), intent(out) :: & + gdot_trans + real(pReal), dimension(prm%totalNtrans), optional, intent(out) :: & + dgdot_dtau_trans + real(pReal), dimension(3,3), intent(in) :: & + Mp + real(pReal), intent(in) :: & + temperature + + real, dimension(prm%totalNtrans) :: & + tau, & + Ndot0_trans, & + stressRatio_r, & + dgdot_dtau + + integer(pInt) :: i,s1,s2 + + do i = 1_pInt, prm%totalNtrans + tau(i) = math_mul33xx33(Mp,prm%Schmid_trans(1:3,1:3,i)) + isFCC: if (prm%isFCC) then + s1=prm%fcc_twinNucleationSlipPair(1,i) + s2=prm%fcc_twinNucleationSlipPair(2,i) + if (tau(i) < mse%tau_r_trans(i,of)) then + Ndot0_trans=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+& + abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/& + (prm%L0_trans*prm%burgers_slip(i))*& ! burgers_slip correct? + (1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)*& + (mse%tau_r_trans(i,of)-tau))) + else + Ndot0_trans=0.0_pReal + end if + else isFCC + Ndot0_trans=prm%Ndot0_trans(i) + endif isFCC + enddo +! +! +! endif isFCCtrans +! dot%strainTransFraction(i,of) = f_unrotated * & +! mse%martensiteVolume(i,of)*Ndot0_trans*exp(-StressRatio_s) +! !* Dotstate for accumulated shear due to transformation +! !dot%accshear_trans(i,of) = dot%strainTransFraction(i,of) * & +! ! lattice_sheartrans(index_myfamily+i,ph) +! endif significantTransStress +! +! enddo transState +! +! +! significantStress: where(tau > tol_math_check) +! StressRatio_r = (mse%threshold_stress_twin(:,of)/tau)**prm%r +! gdot_twin = prm%shear_twin * mse%twinVolume(:,of) * Ndot0_twin*exp(-StressRatio_r) +! dgdot_dtau = ((gdot_twin*prm%r)/tau)*StressRatio_r +! else where significantStress +! gdot_twin = 0.0_pReal +! dgdot_dtau = 0.0_pReal +! end where significantStress +! +! if(present(dgdot_dtau_twin)) dgdot_dtau_twin = dgdot_dtau +! +end subroutine kinetics_trans + !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results !-------------------------------------------------------------------------------------------------- -function plastic_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) +function plastic_dislotwin_postResults(Mp,Temperature,instance,of) result(postResults) use prec, only: & tol_math_check, & dEq0 use math, only: & - pi, & - math_Mandel6to33, & - math_eigenValuesSym33, & - math_eigenValuesVectorsSym33 + PI, & + math_mul33xx33, & + math_Mandel6to33 use material, only: & material_phase, & + plasticState, & phase_plasticityInstance,& - phaseAt, phasememberAt - use lattice, only: & - lattice_Sslip_v, & - lattice_Stwin_v, & - lattice_maxNslipFamily, & - lattice_maxNtwinFamily, & - lattice_NslipSystem, & - lattice_NtwinSystem, & - lattice_shearTwin, & - lattice_mu, & - lattice_structure, & - lattice_fcc_twinNucleationSlipPair, & - LATTICE_fcc_ID + phasememberAt implicit none - real(pReal), dimension(6), intent(in) :: & - Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation + real(pReal), dimension(3,3),intent(in) :: & + Mp !< 2nd Piola Kirchhoff stress tensor in Mandel notation real(pReal), intent(in) :: & temperature !< temperature at integration point integer(pInt), intent(in) :: & - ipc, & !< component-ID of integration point - ip, & !< integration point - el !< element - - real(pReal), dimension(plastic_dislotwin_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - plastic_dislotwin_postResults - integer(pInt) :: & - instance,& - ns,nt,nr,& - f,o,i,c,j,index_myFamily,& - s1,s2, & - ph, & + instance, & of - real(pReal) :: sumf,tau,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,StressRatio_r,Ndot0_twin,dgdot_dtauslip, & + + real(pReal), dimension(sum(plastic_dislotwin_sizePostResult(:,instance))) :: & + postResults + + integer(pInt) :: & + o,c,j,& + s1,s2 + real(pReal) :: sumf_twin,tau,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,StressRatio_r,Ndot0_twin,dgdot_dtauslip, & stressRatio - real(preal), dimension(plastic_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(param(instance)%totalNslip) :: & gdot_slip - real(pReal), dimension(3,3) :: eigVectors - real(pReal), dimension (3) :: eigValues - !* Shortened notation - of = phasememberAt(ipc,ip,el) - ph = phaseAt(ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = plastic_dislotwin_totalNslip(instance) - nt = plastic_dislotwin_totalNtwin(instance) - nr = plastic_dislotwin_totalNtrans(instance) + type(tParameters) :: prm + type(tDislotwinState) :: stt + type(tDislotwinMicrostructure) :: mse + - !* Total twin volume fraction - sumf = sum(state(instance)%twinFraction(1_pInt:nt,of)) ! safe for nt == 0 + associate(prm => param(instance), stt => state(instance), mse => microstructure(instance)) + + sumf_twin = sum(stt%twinFraction(1_pInt:prm%totalNtwin,of)) - !* Required output c = 0_pInt - plastic_dislotwin_postResults = 0.0_pReal - do o = 1_pInt,plastic_dislotwin_Noutput(instance) - select case(plastic_dislotwin_outputID(o,instance)) + postResults = 0.0_pReal + do o = 1_pInt,size(prm%outputID) + select case(prm%outputID(o)) - case (edge_density_ID) - plastic_dislotwin_postResults(c+1_pInt:c+ns) = state(instance)%rhoEdge(1_pInt:ns,of) - c = c + ns - case (dipole_density_ID) - plastic_dislotwin_postResults(c+1_pInt:c+ns) = state(instance)%rhoEdgeDip(1_pInt:ns,of) - c = c + ns - case (shear_rate_slip_ID) - j = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family - j = j + 1_pInt ! could be taken from state by now! + case (edge_density_ID) + postResults(c+1_pInt:c+prm%totalNslip) = stt%rhoEdge(1_pInt:prm%totalNslip,of) + c = c + prm%totalNslip + case (dipole_density_ID) + postResults(c+1_pInt:c+prm%totalNslip) = stt%rhoEdgeDip(1_pInt:prm%totalNslip,of) + c = c + prm%totalNslip + case (shear_rate_slip_ID) + call kinetics_slip(prm,stt,mse,of,Mp,temperature,postResults(c+1:c+prm%totalNslip)) + c = c + prm%totalNslip + case (accumulated_shear_slip_ID) + postResults(c+1_pInt:c+prm%totalNslip) = stt%accshear_slip(1_pInt:prm%totalNslip,of) + c = c + prm%totalNslip + case (mfp_slip_ID) + postResults(c+1_pInt:c+prm%totalNslip) = mse%mfp_slip(1_pInt:prm%totalNslip,of) + c = c + prm%totalNslip + case (resolved_stress_slip_ID) + do j = 1_pInt, prm%totalNslip + postResults(c+j) = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,j)) + enddo + c = c + prm%totalNslip + case (threshold_stress_slip_ID) + postResults(c+1_pInt:c+prm%totalNslip) = mse%threshold_stress_slip(1_pInt:prm%totalNslip,of) + c = c + prm%totalNslip + case (edge_dipole_distance_ID) + do j = 1_pInt, prm%totalNslip + postResults(c+j) = (3.0_pReal*prm%mu*prm%burgers_slip(j)) & + / (16.0_pReal*PI*abs(math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,j)))) + postResults(c+j)=min(postResults(c+j),mse%mfp_slip(j,of)) + ! postResults(c+j)=max(postResults(c+j),& + ! plasticState(ph)%state(4*ns+2*nt+2*nr+j, of)) + enddo + c = c + prm%totalNslip + ! case (resolved_stress_shearband_ID) + ! do j = 1_pInt,6_pInt ! loop over all shearband families + ! postResults(c+j) = dot_product(Tstar_v,sbSv(1:6,j,ipc,ip,el)) + ! enddo + ! c = c + 6_pInt + ! case (shear_rate_shearband_ID) + ! do j = 1_pInt,6_pInt ! loop over all shearbands + ! tau = dot_product(Tstar_v,sbSv(1:6,j,ipc,ip,el)) + ! if (abs(tau) < tol_math_check) then + ! StressRatio_p = 0.0_pReal + ! StressRatio_pminus1 = 0.0_pReal + ! else + ! StressRatio_p = (abs(tau)/prm%sbResistance)**prm%pShearBand + ! StressRatio_pminus1 = (abs(tau)/prm%sbResistance)**(prm%pShearBand-1.0_pReal) + ! endif + ! BoltzmannRatio = prm%sbQedge/(kB*Temperature) + ! DotGamma0 = prm%sbVelocity + ! postResults(c+j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**prm%qShearBand)*& + ! sign(1.0_pReal,tau) + ! enddo + ! c = c + 6_pInt + case (twin_fraction_ID) + postResults(c+1_pInt:c+prm%totalNtwin) = stt%twinFraction(1_pInt:prm%totalNtwin,of) + c = c + prm%totalNtwin + case (shear_rate_twin_ID) + do j = 1_pInt, prm%totalNslip + tau = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,j)) + if((abs(tau)-mse%threshold_stress_slip(j,of)) > tol_math_check) then + StressRatio_p = ((abs(tau)-mse%threshold_stress_slip(j,of))/& + (prm%SolidSolutionStrength+& + prm%tau_peierls(j)))& + **prm%p(j) + StressRatio_pminus1 = ((abs(tau)-mse%threshold_stress_slip(j,of))/& + (prm%SolidSolutionStrength+& + prm%tau_peierls(j)))& + **(prm%p(j)-1.0_pReal) + BoltzmannRatio = prm%Qedge(j)/(kB*Temperature) + DotGamma0 = stt%rhoEdge(j,of)*prm%burgers_slip(j)* prm%v0(j) - !* Resolved shear stress on slip system - tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) - !* Stress ratios - if((abs(tau)-state(instance)%threshold_stress_slip(j,of)) > tol_math_check) then - !* Stress ratios - stressRatio = ((abs(tau)-state(ph)%threshold_stress_slip(j,of))/& - (plastic_dislotwin_SolidSolutionStrength(instance)+& - plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))) - StressRatio_p = stressRatio** plastic_dislotwin_pPerSlipFamily(f,instance) - StressRatio_pminus1 = stressRatio**(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) - !* Boltzmann ratio - BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) - !* Initial shear rates - DotGamma0 = & - state(instance)%rhoEdge(j,of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)* & - plastic_dislotwin_v0PerSlipSystem(j,instance) - - !* Shear rates due to slip - plastic_dislotwin_postResults(c+j) = & - DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - plastic_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) + gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& + prm%q(j))*sign(1.0_pReal,tau) + else + gdot_slip(j) = 0.0_pReal + endif + enddo + + do j = 1_pInt, prm%totalNtwin + tau = math_mul33xx33(Mp,prm%Schmid_twin(1:3,1:3,j)) + + if ( tau > 0.0_pReal ) then + isFCCtwin: if (prm%isFCC) then + s1=prm%fcc_twinNucleationSlipPair(1,j) + s2=prm%fcc_twinNucleationSlipPair(2,j) + if (tau < mse%tau_r_twin(j,of)) then + Ndot0_twin=(abs(gdot_slip(s1))*(stt%rhoEdge(s2,of)+stt%rhoEdgeDip(s2,of))+& + abs(gdot_slip(s2))*(stt%rhoEdge(s1,of)+stt%rhoEdgeDip(s1,of)))/& + (prm%L0_twin* prm%burgers_slip(j))*& + (1.0_pReal-exp(-prm%VcrossSlip/(kB*Temperature)* (mse%tau_r_twin(j,of)-tau))) else - plastic_dislotwin_postResults(c+j) = 0.0_pReal - endif - - enddo ; enddo - c = c + ns - case (accumulated_shear_slip_ID) - plastic_dislotwin_postResults(c+1_pInt:c+ns) = & - state(instance)%accshear_slip(1_pInt:ns,of) - c = c + ns - case (mfp_slip_ID) - plastic_dislotwin_postResults(c+1_pInt:c+ns) =& - state(instance)%mfp_slip(1_pInt:ns,of) - c = c + ns - case (resolved_stress_slip_ID) - j = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family - j = j + 1_pInt - plastic_dislotwin_postResults(c+j) =& - dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) - enddo; enddo - c = c + ns - case (threshold_stress_slip_ID) - plastic_dislotwin_postResults(c+1_pInt:c+ns) = & - state(instance)%threshold_stress_slip(1_pInt:ns,of) - c = c + ns - case (edge_dipole_distance_ID) - j = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family - j = j + 1_pInt - plastic_dislotwin_postResults(c+j) = & - (3.0_pReal*lattice_mu(ph)*plastic_dislotwin_burgersPerSlipSystem(j,instance))/& - (16.0_pReal*pi*abs(dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)))) - plastic_dislotwin_postResults(c+j)=min(plastic_dislotwin_postResults(c+j),& - state(instance)%mfp_slip(j,of)) - ! plastic_dislotwin_postResults(c+j)=max(plastic_dislotwin_postResults(c+j),& - ! plasticState(ph)%state(4*ns+2*nt+2*nr+j, of)) - enddo; enddo - c = c + ns - case (resolved_stress_shearband_ID) - do j = 1_pInt,6_pInt ! loop over all shearband families - plastic_dislotwin_postResults(c+j) = dot_product(Tstar_v, & - plastic_dislotwin_sbSv(1:6,j,ipc,ip,el)) - enddo - c = c + 6_pInt - case (shear_rate_shearband_ID) - do j = 1_pInt,6_pInt ! loop over all shearbands - !* Resolved shear stress on shearband system - tau = dot_product(Tstar_v,plastic_dislotwin_sbSv(1:6,j,ipc,ip,el)) - !* Stress ratios - if (abs(tau) < tol_math_check) then - StressRatio_p = 0.0_pReal - StressRatio_pminus1 = 0.0_pReal - else - StressRatio_p = (abs(tau)/plastic_dislotwin_sbResistance(instance))**& - plastic_dislotwin_pShearBand(instance) - StressRatio_pminus1 = (abs(tau)/plastic_dislotwin_sbResistance(instance))**& - (plastic_dislotwin_pShearBand(instance)-1.0_pReal) - endif - !* Boltzmann ratio - BoltzmannRatio = plastic_dislotwin_sbQedge(instance)/(kB*Temperature) - !* Initial shear rates - DotGamma0 = plastic_dislotwin_sbVelocity(instance) - ! Shear rate due to shear band - plastic_dislotwin_postResults(c+j) = & - DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**plastic_dislotwin_qShearBand(instance))*& - sign(1.0_pReal,tau) - enddo - c = c + 6_pInt - case (twin_fraction_ID) - plastic_dislotwin_postResults(c+1_pInt:c+nt) = state(instance)%twinFraction(1_pInt:nt,of) - c = c + nt - case (shear_rate_twin_ID) - if (nt > 0_pInt) then - - j = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family - j = j + 1_pInt - - !* Resolved shear stress on slip system - tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) - !* Stress ratios - if((abs(tau)-state(instance)%threshold_stress_slip(j,of)) > tol_math_check) then - !* Stress ratios - StressRatio_p = ((abs(tau)-state(instance)%threshold_stress_slip(j,of))/& - (plastic_dislotwin_SolidSolutionStrength(instance)+& - plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& - **plastic_dislotwin_pPerSlipFamily(f,instance) - StressRatio_pminus1 = ((abs(tau)-state(instance)%threshold_stress_slip(j,of))/& - (plastic_dislotwin_SolidSolutionStrength(instance)+& - plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& - **(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) - !* Boltzmann ratio - BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) - !* Initial shear rates - DotGamma0 = & - state(instance)%rhoEdge(j,of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)* & - plastic_dislotwin_v0PerSlipSystem(j,instance) - - !* Shear rates due to slip - gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - plastic_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) - else - gdot_slip(j) = 0.0_pReal - endif - enddo;enddo + Ndot0_twin=0.0_pReal + end if + else isFCCtwin + Ndot0_twin=prm%Ndot0_twin(j) + endif isFCCtwin + StressRatio_r = (mse%threshold_stress_twin(j,of)/tau) **prm%r(j) + postResults(c+j) = (prm%MaxTwinFraction-sumf_twin)*prm%shear_twin(j) & + * mse%twinVolume(j,of)*Ndot0_twin*exp(-StressRatio_r) + endif + enddo + c = c + prm%totalNtwin + case (accumulated_shear_twin_ID) + postResults(c+1_pInt:c+prm%totalNtwin) = stt%accshear_twin(1_pInt:prm%totalNtwin,of) + c = c + prm%totalNtwin + case (mfp_twin_ID) + postResults(c+1_pInt:c+prm%totalNtwin) = mse%mfp_twin(1_pInt:prm%totalNtwin,of) + c = c + prm%totalNtwin + case (resolved_stress_twin_ID) + do j = 1_pInt, prm%totalNtwin + postResults(c+j) = math_mul33xx33(Mp,prm%Schmid_twin(1:3,1:3,j)) + enddo + c = c + prm%totalNtwin + case (threshold_stress_twin_ID) + postResults(c+1_pInt:c+prm%totalNtwin) = mse%threshold_stress_twin(1_pInt:prm%totalNtwin,of) + c = c + prm%totalNtwin + case (stress_exponent_ID) + do j = 1_pInt, prm%totalNslip + tau = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,j)) + if((abs(tau)-mse%threshold_stress_slip(j,of)) > tol_math_check) then + StressRatio_p = ((abs(tau)-mse%threshold_stress_slip(j,of))/& + (prm%SolidSolutionStrength+& + prm%tau_peierls(j)))& + **prm%p(j) + StressRatio_pminus1 = ((abs(tau)-mse%threshold_stress_slip(j,of))/& + (prm%SolidSolutionStrength+& + prm%tau_peierls(j)))& + **(prm%p(j)-1.0_pReal) + BoltzmannRatio = prm%Qedge(j)/(kB*Temperature) + DotGamma0 = stt%rhoEdge(j,of)*prm%burgers_slip(j)* prm%v0(j) - j = 0_pInt - do f = 1_pInt,lattice_maxNtwinFamily ! loop over all twin families - index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1,plastic_dislotwin_Ntwin(f,instance) ! process each (active) twin system in family - j = j + 1_pInt + gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& + prm%q(j))*sign(1.0_pReal,tau) - tau = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) - - - !* Shear rates due to twin - if ( tau > 0.0_pReal ) then - select case(lattice_structure(ph)) - case (LATTICE_fcc_ID) - s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) - s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau < plastic_dislotwin_tau_r_twin(j,instance)) then - Ndot0_twin=(abs(gdot_slip(s1))*(state(instance)%rhoEdge(s2,of)+state(instance)%rhoEdgeDip(s2,of))+& - abs(gdot_slip(s2))*(state(instance)%rhoEdge(s1,of)+state(instance)%rhoEdgeDip(s1,of)))/& - (plastic_dislotwin_L0_twin(instance)*& - plastic_dislotwin_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-plastic_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& - (plastic_dislotwin_tau_r_twin(j,instance)-tau))) - else - Ndot0_twin=0.0_pReal - end if - case default - Ndot0_twin=plastic_dislotwin_Ndot0PerTwinSystem(j,instance) - end select - StressRatio_r = (state(instance)%threshold_stress_twin(j,of)/tau) & - **plastic_dislotwin_rPerTwinFamily(f,instance) - plastic_dislotwin_postResults(c+j) = & - (plastic_dislotwin_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& - state(instance)%twinVolume(j,of)*Ndot0_twin*exp(-StressRatio_r) - endif - - enddo ; enddo - endif - c = c + nt - case (accumulated_shear_twin_ID) - plastic_dislotwin_postResults(c+1_pInt:c+nt) = state(instance)%accshear_twin(1_pInt:nt,of) - c = c + nt - case (mfp_twin_ID) - plastic_dislotwin_postResults(c+1_pInt:c+nt) = state(instance)%mfp_twin(1_pInt:nt,of) - c = c + nt - case (resolved_stress_twin_ID) - if (nt > 0_pInt) then - j = 0_pInt - do f = 1_pInt,lattice_maxNtwinFamily ! loop over all slip families - index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,plastic_dislotwin_Ntwin(f,instance) ! process each (active) slip system in family - j = j + 1_pInt - plastic_dislotwin_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) - enddo; enddo - endif - c = c + nt - case (threshold_stress_twin_ID) - plastic_dislotwin_postResults(c+1_pInt:c+nt) = state(instance)%threshold_stress_twin(1_pInt:nt,of) - c = c + nt - case (stress_exponent_ID) - j = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family - j = j + 1_pInt - - !* Resolved shear stress on slip system - tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) - if((abs(tau)-state(instance)%threshold_stress_slip(j,of)) > tol_math_check) then - !* Stress ratios - StressRatio_p = ((abs(tau)-state(instance)%threshold_stress_slip(j,of))/& - (plastic_dislotwin_SolidSolutionStrength(instance)+& - plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& - **plastic_dislotwin_pPerSlipFamily(f,instance) - StressRatio_pminus1 = ((abs(tau)-state(instance)%threshold_stress_slip(j,of))/& - (plastic_dislotwin_SolidSolutionStrength(instance)+& - plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& - **(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) - !* Boltzmann ratio - BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) - !* Initial shear rates - DotGamma0 = & - state(instance)%rhoEdge(j,of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)* & - plastic_dislotwin_v0PerSlipSystem(j,instance) - - !* Shear rates due to slip - gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - plastic_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) - - !* Derivatives of shear rates - dgdot_dtauslip = & - abs(gdot_slip(j))*BoltzmannRatio*plastic_dislotwin_pPerSlipFamily(f,instance)& - *plastic_dislotwin_qPerSlipFamily(f,instance)/& - (plastic_dislotwin_SolidSolutionStrength(instance)+& - plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1-StressRatio_p)**(plastic_dislotwin_qPerSlipFamily(f,instance)-1.0_pReal) - - else - gdot_slip(j) = 0.0_pReal - dgdot_dtauslip = 0.0_pReal - endif - - !* Stress exponent - plastic_dislotwin_postResults(c+j) = & - merge(0.0_pReal,(tau/gdot_slip(j))*dgdot_dtauslip,dEq0(gdot_slip(j))) - enddo ; enddo - c = c + ns - case (sb_eigenvalues_ID) - plastic_dislotwin_postResults(c+1_pInt:c+3_pInt) = math_eigenvaluesSym33(math_Mandel6to33(Tstar_v)) - c = c + 3_pInt - case (sb_eigenvectors_ID) - call math_eigenValuesVectorsSym33(math_Mandel6to33(Tstar_v),eigValues,eigVectors) - plastic_dislotwin_postResults(c+1_pInt:c+9_pInt) = reshape(eigVectors,[9]) - c = c + 9_pInt - case (stress_trans_fraction_ID) - plastic_dislotwin_postResults(c+1_pInt:c+nr) = & - state(instance)%stressTransFraction(1_pInt:nr,of) - c = c + nr - case (strain_trans_fraction_ID) - plastic_dislotwin_postResults(c+1_pInt:c+nr) = & - state(instance)%strainTransFraction(1_pInt:nr,of) - c = c + nr - case (trans_fraction_ID) - plastic_dislotwin_postResults(c+1_pInt:c+nr) = & - state(instance)%stressTransFraction(1_pInt:nr,of) + & - state(instance)%strainTransFraction(1_pInt:nr,of) - c = c + nr - end select + dgdot_dtauslip = abs(gdot_slip(j))*BoltzmannRatio*prm%p(j) *prm%q(j)/& + (prm%SolidSolutionStrength+ prm%tau_peierls(j))*& + StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) + else + gdot_slip(j) = 0.0_pReal + dgdot_dtauslip = 0.0_pReal + endif + postResults(c+j) = merge(0.0_pReal,(tau/gdot_slip(j))*dgdot_dtauslip,dEq0(gdot_slip(j))) + enddo + c = c + prm%totalNslip + case (stress_trans_fraction_ID) + postResults(c+1_pInt:c+prm%totalNtrans) = stt%stressTransFraction(1_pInt:prm%totalNtrans,of) + c = c + prm%totalNtrans + case (strain_trans_fraction_ID) + postResults(c+1_pInt:c+prm%totalNtrans) = stt%strainTransFraction(1_pInt:prm%totalNtrans,of) + c = c + prm%totalNtrans + end select enddo + end associate end function plastic_dislotwin_postResults end module plastic_dislotwin diff --git a/src/spectral_damage.f90 b/src/spectral_damage.f90 index c6f2f3822..13ddf0e74 100644 --- a/src/spectral_damage.f90 +++ b/src/spectral_damage.f90 @@ -120,8 +120,8 @@ subroutine spectral_damage_init() trim(snes_type) == 'vinewtonssls') then call DMGetGlobalVector(damage_grid,lBound,ierr); CHKERRQ(ierr) call DMGetGlobalVector(damage_grid,uBound,ierr); CHKERRQ(ierr) - call VecSet(lBound,0.0,ierr); CHKERRQ(ierr) - call VecSet(uBound,1.0,ierr); CHKERRQ(ierr) + call VecSet(lBound,0.0_pReal,ierr); CHKERRQ(ierr) + call VecSet(uBound,1.0_pReal,ierr); CHKERRQ(ierr) call SNESVISetVariableBounds(damage_snes,lBound,uBound,ierr) !< variable bounds for variational inequalities like contact mechanics, damage etc. call DMRestoreGlobalVector(damage_grid,lBound,ierr); CHKERRQ(ierr) call DMRestoreGlobalVector(damage_grid,uBound,ierr); CHKERRQ(ierr) @@ -134,7 +134,7 @@ subroutine spectral_damage_init() xend = xstart + xend - 1 yend = ystart + yend - 1 zend = zstart + zend - 1 - call VecSet(solution,1.0,ierr); CHKERRQ(ierr) + call VecSet(solution,1.0_pReal,ierr); CHKERRQ(ierr) allocate(damage_current(grid(1),grid(2),grid3), source=1.0_pReal) allocate(damage_lastInc(grid(1),grid(2),grid3), source=1.0_pReal) allocate(damage_stagInc(grid(1),grid(2),grid3), source=1.0_pReal)