Merge branch 'development' of magit1.mpie.de:damask/DAMASK into development
|
@ -1,3 +1,4 @@
|
||||||
|
.noH5py
|
||||||
*.pyc
|
*.pyc
|
||||||
*.mod
|
*.mod
|
||||||
*.o
|
*.o
|
||||||
|
@ -6,3 +7,4 @@
|
||||||
*~
|
*~
|
||||||
bin
|
bin
|
||||||
PRIVATE
|
PRIVATE
|
||||||
|
build
|
||||||
|
|
|
@ -0,0 +1,535 @@
|
||||||
|
stages:
|
||||||
|
- prepareAll
|
||||||
|
- preprocessing
|
||||||
|
- postprocessing
|
||||||
|
- compileSpectralIntel
|
||||||
|
- compileSpectralGNU
|
||||||
|
- prepareSpectral
|
||||||
|
- spectral
|
||||||
|
- compileMarc2014
|
||||||
|
- compileMarc2014.2
|
||||||
|
- compileMarc2015
|
||||||
|
- compileMarc2016
|
||||||
|
- marc
|
||||||
|
- compileAbaqus2016
|
||||||
|
- compileAbaqus2017
|
||||||
|
- example
|
||||||
|
- performance
|
||||||
|
- createDocumentation
|
||||||
|
- saveDocumentation
|
||||||
|
- updateMaster
|
||||||
|
- clean
|
||||||
|
- releaseLock
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
before_script:
|
||||||
|
- if [ $(awk "/$CI_PIPELINE_ID/{print NR}" $TESTROOT/GitLabCI.queue)x == 'x' ]; then echo $CI_PIPELINE_ID >> $TESTROOT/GitLabCI.queue; fi
|
||||||
|
- while [ $(awk "/$CI_PIPELINE_ID/{print NR}" $TESTROOT/GitLabCI.queue) -ne 1 ];do sleep 5m; done
|
||||||
|
- source $DAMASKROOT/DAMASK_env.sh
|
||||||
|
- cd $DAMASKROOT/PRIVATE/testing
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
variables:
|
||||||
|
#================================================================================================
|
||||||
|
# GitLab Settings
|
||||||
|
#================================================================================================
|
||||||
|
GIT_SUBMODULE_STRATEGY: none
|
||||||
|
|
||||||
|
#================================================================================================
|
||||||
|
# Shortcut names
|
||||||
|
#================================================================================================
|
||||||
|
DAMASKROOT: "$TESTROOT/GitLabCI_Pipeline_$CI_PIPELINE_ID/DAMASK"
|
||||||
|
|
||||||
|
#================================================================================================
|
||||||
|
# Names of module files to load
|
||||||
|
#================================================================================================
|
||||||
|
# ++++++++++++ Compiler ++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
IntelCompiler16_0: "Compiler/Intel/16.0 Libraries/IMKL/2016"
|
||||||
|
IntelCompiler17_0: "Compiler/Intel/17.0 Libraries/IMKL/2017"
|
||||||
|
GNUCompiler5_3: "Compiler/GNU/5.3"
|
||||||
|
# ------------ Defaults ----------------------------------------------
|
||||||
|
IntelCompiler: "$IntelCompiler17_0"
|
||||||
|
GNUCompiler: "$GNUCompiler5_3"
|
||||||
|
# ++++++++++++ MPI +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
MPICH3_2Intel17_0: "MPI/Intel/17.0/MPICH/3.2"
|
||||||
|
MPICH3_2GNU5_3: "MPI/GNU/5.3/MPICH/3.2"
|
||||||
|
# ------------ Defaults ----------------------------------------------
|
||||||
|
MPICH_GNU: "$MPICH3_2GNU5_3"
|
||||||
|
MPICH_Intel: "$MPICH3_2Intel17_0"
|
||||||
|
# ++++++++++++ PETSc +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
PETSc3_7_6MPICH3_2Intel17_0: "Libraries/PETSc/3.7.6/Intel-17.0-MPICH-3.2"
|
||||||
|
PETSc3_7_5MPICH3_2Intel17_0: "Libraries/PETSc/3.7.5/Intel-17.0-MPICH-3.2"
|
||||||
|
PETSc3_6_4MPICH3_2Intel17_0: "Libraries/PETSc/3.6.4/Intel-17.0-MPICH-3.2"
|
||||||
|
PETSc3_7_5MPICH3_2GNU5_3: "Libraries/PETSc/3.7.5/GNU-5.3-MPICH-3.2"
|
||||||
|
# ------------ Defaults ----------------------------------------------
|
||||||
|
PETSc_MPICH_Intel: "$PETSc3_7_6MPICH3_2Intel17_0"
|
||||||
|
PETSc_MPICH_GNU: "$PETSc3_7_5MPICH3_2GNU5_3"
|
||||||
|
# ++++++++++++ FEM +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
Abaqus2016: "FEM/Abaqus/2016"
|
||||||
|
Abaqus2017: "FEM/Abaqus/2017"
|
||||||
|
MSC2014: "FEM/MSC/2014"
|
||||||
|
MSC2014_2: "FEM/MSC/2014.2"
|
||||||
|
MSC2015: "FEM/MSC/2015"
|
||||||
|
MSC2016: "FEM/MSC/2016"
|
||||||
|
# ------------ Defaults ----------------------------------------------
|
||||||
|
Abaqus: "$Abaqus2017"
|
||||||
|
MSC: "$MSC2016"
|
||||||
|
# ++++++++++++ Documentation +++++++++++++++++++++++++++++++++++++++++
|
||||||
|
Doxygen1_8_13: "Documentation/Doxygen/1.8.13"
|
||||||
|
# ------------ Defaults ----------------------------------------------
|
||||||
|
Doxygen: "$Doxygen1_8_13"
|
||||||
|
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
checkout:
|
||||||
|
stage: prepareAll
|
||||||
|
before_script:
|
||||||
|
- echo $CI_PIPELINE_ID >> $TESTROOT/GitLabCI.queue
|
||||||
|
- while [ $(awk "/$CI_PIPELINE_ID/{print NR}" $TESTROOT/GitLabCI.queue) -ne 1 ];do sleep 5m; done
|
||||||
|
script:
|
||||||
|
- mkdir -p $DAMASKROOT
|
||||||
|
- cd $DAMASKROOT
|
||||||
|
- git clone -q git@magit1.mpie.de:damask/DAMASK.git .
|
||||||
|
- git checkout $CI_COMMIT_SHA
|
||||||
|
- git submodule update --init
|
||||||
|
- source DAMASK_env.sh
|
||||||
|
- make processing
|
||||||
|
- mkdir $BACKUP/$CI_COMMIT_SHA
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
OrientationRelationship:
|
||||||
|
stage: preprocessing
|
||||||
|
script: OrientationRelationship/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Pre_SeedGeneration:
|
||||||
|
stage: preprocessing
|
||||||
|
script: PreProcessing_SeedGeneration/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Pre_GeomGeneration:
|
||||||
|
stage: preprocessing
|
||||||
|
script: PreProcessing_GeomGeneration/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Pre_GeomModification:
|
||||||
|
stage: preprocessing
|
||||||
|
script: PreProcessing_GeomModification/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Pre_General:
|
||||||
|
stage: preprocessing
|
||||||
|
script: PreProcessing/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Spectral_geometryPacking:
|
||||||
|
stage: preprocessing
|
||||||
|
script: Spectral_geometryPacking/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
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Post_addCurl:
|
||||||
|
stage: postprocessing
|
||||||
|
script: addCurl/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Post_addDivergence:
|
||||||
|
stage: postprocessing
|
||||||
|
script: addDivergence/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Post_addGradient:
|
||||||
|
stage: postprocessing
|
||||||
|
script: addGradient/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Post_ParaviewRelated:
|
||||||
|
stage: postprocessing
|
||||||
|
script: ParaviewRelated/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Compile_Intel:
|
||||||
|
stage: compileSpectralIntel
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler $MPICH_Intel $PETSc_MPICH_Intel
|
||||||
|
- SpectralAll_compile/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Compile_GNU:
|
||||||
|
stage: compileSpectralGNU
|
||||||
|
script:
|
||||||
|
- module load $GNUCompiler $MPICH_GNU $PETSc_MPICH_GNU
|
||||||
|
- SpectralAll_compile/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Compile_Intel_Prepare:
|
||||||
|
stage: prepareSpectral
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler $MPICH_Intel $PETSc_MPICH_Intel
|
||||||
|
- cd $DAMASKROOT
|
||||||
|
- make clean spectral processing
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Spectral_PackedGeometry:
|
||||||
|
stage: spectral
|
||||||
|
script: Spectral_PackedGeometry/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Spectral_parsingArguments:
|
||||||
|
stage: spectral
|
||||||
|
script: Spectral_parsingArguments/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
StateIntegration_compareVariants:
|
||||||
|
stage: spectral
|
||||||
|
script: StateIntegration_compareVariants/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
nonlocal_densityConservation:
|
||||||
|
stage: spectral
|
||||||
|
script: nonlocal_densityConservation/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Spectral_ipNeighborhood:
|
||||||
|
stage: spectral
|
||||||
|
script: Spectral_ipNeighborhood/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Nonlocal_Damage_DetectChanges:
|
||||||
|
stage: spectral
|
||||||
|
script: Nonlocal_Damage_DetectChanges/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
SpectralAll_restart:
|
||||||
|
stage: spectral
|
||||||
|
script: SpectralAll_restart/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
SpectralAll_parsingLoadCase:
|
||||||
|
stage: spectral
|
||||||
|
script: SpectralAll_parsingLoadCase/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
SpectralBasic_loadCaseRotation:
|
||||||
|
stage: spectral
|
||||||
|
script: SpectralBasic_loadCaseRotation/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Spectral_MPI:
|
||||||
|
stage: spectral
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler $MPICH_Intel $PETSc_MPICH_Intel
|
||||||
|
- Spectral_MPI/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Plasticity_DetectChanges:
|
||||||
|
stage: spectral
|
||||||
|
script: Plasticity_DetectChanges/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Homogenization:
|
||||||
|
stage: spectral
|
||||||
|
script: Homogenization/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Phenopowerlaw_singleSlip:
|
||||||
|
stage: spectral
|
||||||
|
script: Phenopowerlaw_singleSlip/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
HybridIA:
|
||||||
|
stage: spectral
|
||||||
|
script: HybridIA/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Marc_compileIfort2014:
|
||||||
|
stage: compileMarc2014
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $MSC2014
|
||||||
|
- Marc_compileIfort/test.py -m 2014
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Marc_compileIfort2014.2:
|
||||||
|
stage: compileMarc2014.2
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $MSC2014_2
|
||||||
|
- Marc_compileIfort/test.py -m 2014.2
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Marc_compileIfort2015:
|
||||||
|
stage: compileMarc2015
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $MSC2015
|
||||||
|
- Marc_compileIfort/test.py -m 2015
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Marc_compileIfort2016:
|
||||||
|
stage: compileMarc2016
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $MSC2016
|
||||||
|
- Marc_compileIfort/test.py -m 2016
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Hex_elastic:
|
||||||
|
stage: marc
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $MSC
|
||||||
|
- Hex_elastic/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
CubicFCC_elastic:
|
||||||
|
stage: marc
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $MSC
|
||||||
|
- CubicFCC_elastic/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
CubicBCC_elastic:
|
||||||
|
stage: marc
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $MSC
|
||||||
|
- CubicBCC_elastic/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
J2_plasticBehavior:
|
||||||
|
stage: marc
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $MSC
|
||||||
|
- J2_plasticBehavior/test.py
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Abaqus_compile2016:
|
||||||
|
stage: compileAbaqus2016
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $Abaqus2016
|
||||||
|
- Abaqus_compileIfort/test.py -a 2016
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
Abaqus_compile2017:
|
||||||
|
stage: compileAbaqus2017
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $Abaqus2017
|
||||||
|
- Abaqus_compileIfort/test.py -a 2017
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
SpectralExample:
|
||||||
|
stage: example
|
||||||
|
script: SpectralAll_example/test.py
|
||||||
|
only:
|
||||||
|
- development
|
||||||
|
|
||||||
|
AbaqusExample:
|
||||||
|
stage: example
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler16_0 $Abaqus
|
||||||
|
- Abaqus_example/test.py
|
||||||
|
only:
|
||||||
|
- development
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
SpectralRuntime:
|
||||||
|
stage: performance
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler $MPICH_Intel $PETSc_MPICH_Intel
|
||||||
|
- cd $DAMASKROOT
|
||||||
|
- make clean spectral processing OPTIMIZATION=AGGRESSIVE
|
||||||
|
- cd $DAMASKROOT/PRIVATE/testing
|
||||||
|
- SpectralAll_runtime/test.py -d $TESTROOT
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
AbaqusExp:
|
||||||
|
stage: createDocumentation
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler $MPICH_Intel $PETSc_MPICH_Intel $Doxygen
|
||||||
|
- $DAMASKROOT/PRIVATE/documenting/runDoxygen.sh $DAMASKROOT abaqus_exp
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
AbaqusStd:
|
||||||
|
stage: createDocumentation
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler $MPICH_Intel $PETSc_MPICH_Intel $Doxygen
|
||||||
|
- $DAMASKROOT/PRIVATE/documenting/runDoxygen.sh $DAMASKROOT abaqus_std
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Marc:
|
||||||
|
stage: createDocumentation
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler $MPICH_Intel $PETSc_MPICH_Intel $Doxygen
|
||||||
|
- $DAMASKROOT/PRIVATE/documenting/runDoxygen.sh $DAMASKROOT marc
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
Spectral:
|
||||||
|
stage: createDocumentation
|
||||||
|
script:
|
||||||
|
- module load $IntelCompiler $MPICH_Intel $PETSc_MPICH_Intel $Doxygen
|
||||||
|
- $DAMASKROOT/PRIVATE/documenting/runDoxygen.sh $DAMASKROOT spectral
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
mergeIntoMaster:
|
||||||
|
stage: saveDocumentation
|
||||||
|
script:
|
||||||
|
- cp $TESTROOT/time.txt $BACKUP/$CI_COMMIT_SHA
|
||||||
|
- mv $TESTROOT/time.png $BACKUP/$CI_COMMIT_SHA
|
||||||
|
- cp $TESTROOT/time.txt $BACKUP/$CI_COMMIT_SHA
|
||||||
|
- mv $TESTROOT/time.png $BACKUP/$CI_COMMIT_SHA
|
||||||
|
- mv $DAMASKROOT/PRIVATE/documenting/DAMASK_* $BACKUP/$CI_COMMIT_SHA/
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
mergeIntoMaster:
|
||||||
|
stage: updateMaster
|
||||||
|
script:
|
||||||
|
- cd $DAMASKROOT
|
||||||
|
- export TESTEDREV=$(git describe) # might be detached from development branch
|
||||||
|
- echo $TESTEDREV > VERSION
|
||||||
|
- git commit VERSION -m "[skip ci] updated version information after successful test of $TESTEDREV"
|
||||||
|
- export UPDATEDREV=$(git describe) # tested state + 1 commit
|
||||||
|
- git checkout master
|
||||||
|
- git merge $UPDATEDREV -s recursive -X ours # conflicts occur only for inconsistent state
|
||||||
|
- git push origin master # master is now tested version and has updated VERSION file
|
||||||
|
- git checkout development
|
||||||
|
- git pull
|
||||||
|
- git merge master -s recursive -X ours -m "[skip ci] Merge branch 'master' into development" # only possible conflict is in VERSION file
|
||||||
|
- git push origin development # development is unchanged (as master is based on it) but has updated VERSION file
|
||||||
|
only:
|
||||||
|
- development
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
removeData:
|
||||||
|
stage: clean
|
||||||
|
before_script:
|
||||||
|
- echo 'Do nothing'
|
||||||
|
script:
|
||||||
|
- rm -rf $TESTROOT/GitLabCI_Pipeline_$CI_PIPELINE_ID
|
||||||
|
- sed -i "/$CI_PIPELINE_ID/d" $TESTROOT/GitLabCI.queue # in case pipeline was manually (web GUI) restarted and releaseLock was performed already
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
removeLock:
|
||||||
|
stage: releaseLock
|
||||||
|
before_script:
|
||||||
|
- echo 'Do nothing'
|
||||||
|
when: always
|
||||||
|
script: sed -i "/$CI_PIPELINE_ID/d" $TESTROOT/GitLabCI.queue
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
|
@ -0,0 +1,4 @@
|
||||||
|
[submodule "PRIVATE"]
|
||||||
|
path = PRIVATE
|
||||||
|
url = ../PRIVATE.git
|
||||||
|
branch = master
|
|
@ -0,0 +1,483 @@
|
||||||
|
########################################################################################
|
||||||
|
# Compiler options for building DAMASK
|
||||||
|
cmake_minimum_required (VERSION 2.8.8 FATAL_ERROR)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------------
|
||||||
|
# Find PETSc from system environment
|
||||||
|
set(PETSC_DIR $ENV{PETSC_DIR})
|
||||||
|
if ("${PETSC_DIR}" STREQUAL "")
|
||||||
|
message (FATAL_ERROR "PETSC_DIR is not defined")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set (petsc_conf_variables "${PETSC_DIR}/lib/petsc/conf/variables")
|
||||||
|
set (petsc_conf_rules "${PETSC_DIR}/lib/petsc/conf/rules" )
|
||||||
|
|
||||||
|
# Use existing variables from PETSc
|
||||||
|
# https://github.com/jedbrown/cmake-modules/blob/master/FindPETSc.cmake
|
||||||
|
|
||||||
|
# Generate a temporary makefile to probe the PETSc configuration
|
||||||
|
# This file will be deleted
|
||||||
|
# once the settings from PETSc are parsed into CMake
|
||||||
|
|
||||||
|
exec_program (mktemp ARGS -d OUTPUT_VARIABLE TEMPDIR)
|
||||||
|
set (petsc_config_makefile "${TEMPDIR}/Makefile.petsc")
|
||||||
|
file (WRITE
|
||||||
|
"${petsc_config_makefile}"
|
||||||
|
"## This file was auto generated by CMake
|
||||||
|
# PETSC_DIR = ${PETSC_DIR}
|
||||||
|
SHELL = /bin/sh
|
||||||
|
include ${petsc_conf_rules}
|
||||||
|
include ${petsc_conf_variables}
|
||||||
|
INCLUDE_DIRS := \${PETSC_FC_INCLUDES}
|
||||||
|
LIBRARIES := \${PETSC_WITH_EXTERNAL_LIB}
|
||||||
|
COMPILERF := \${FC}
|
||||||
|
COMPILERC := \${CC}
|
||||||
|
LINKERNAME := \${FLINKER}
|
||||||
|
includes:
|
||||||
|
\t@echo \${INCLUDE_DIRS}
|
||||||
|
extlibs:
|
||||||
|
\t@echo \${LIBRARIES}
|
||||||
|
compilerf:
|
||||||
|
\t@echo \${COMPILERF}
|
||||||
|
compilerc:
|
||||||
|
\t@echo \${COMPILERC}
|
||||||
|
linker:
|
||||||
|
\t@echo \${LINKERNAME}
|
||||||
|
")
|
||||||
|
|
||||||
|
# CMake will execute each target in the ${petsc_config_makefile}
|
||||||
|
# to acquire corresponding PETSc Variables.
|
||||||
|
find_program (MAKE_EXECUTABLE NAMES make gmake)
|
||||||
|
# Find the PETSc includes directory settings
|
||||||
|
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "includes"
|
||||||
|
RESULT_VARIABLE PETSC_INCLUDES_RETURN
|
||||||
|
OUTPUT_VARIABLE petsc_includes
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
# Find the PETSc external linking directory settings
|
||||||
|
# required for final linking, must be appended after the executable
|
||||||
|
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "extlibs"
|
||||||
|
RESULT_VARIABLE PETSC_EXTERNAL_LIB_RETURN
|
||||||
|
OUTPUT_VARIABLE petsc_external_lib
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
# PETSc specified fortran compiler
|
||||||
|
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "compilerf"
|
||||||
|
RESULT_VARIABLE PETSC_MPIFC_RETURN
|
||||||
|
OUTPUT_VARIABLE PETSC_MPIFC
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
# PETSc specified C compiler
|
||||||
|
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "compilerc"
|
||||||
|
RESULT_VARIABLE PETSC_MPICC_RETURN
|
||||||
|
OUTPUT_VARIABLE PETSC_MPICC
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
# PETSc specified linker (MPIF90 + PETSc linking flags)
|
||||||
|
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "linker"
|
||||||
|
RESULT_VARIABLE PETSC_LINKER_RETURN
|
||||||
|
OUTPUT_VARIABLE PETSC_LINKER
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
# Remove temporary makefile, no need to keep it anymore.
|
||||||
|
file (REMOVE_RECURSE ${TEMPDIR})
|
||||||
|
|
||||||
|
# Remove duplicate compiler and linker flags
|
||||||
|
string (REGEX MATCHALL "-I([^\" ]+)" TMP_LIST "${petsc_includes}")
|
||||||
|
list (REMOVE_DUPLICATES TMP_LIST)
|
||||||
|
foreach (dir ${TMP_LIST})
|
||||||
|
set (PETSC_INCLUDES "${PETSC_INCLUDES} ${dir}")
|
||||||
|
endforeach (dir)
|
||||||
|
string (REGEX MATCHALL "-[lLW]([^\" ]+)" TMP_LIST "${petsc_external_lib}")
|
||||||
|
list (REMOVE_DUPLICATES TMP_LIST)
|
||||||
|
foreach (exlib ${TMP_LIST})
|
||||||
|
set (PETSC_EXTERNAL_LIB "${PETSC_EXTERNAL_LIB} ${exlib}")
|
||||||
|
endforeach (exlib)
|
||||||
|
|
||||||
|
message ("Found PETSC_DIR:\n${PETSC_DIR}\n" )
|
||||||
|
message ("Found PETSC_INCLUDES:\n${PETSC_INCLUDES}\n" )
|
||||||
|
message ("Found PETSC_EXTERNAL_LIB:\n${PETSC_EXTERNAL_LIB}\n")
|
||||||
|
message ("Found PETSC_LINKER:\n${PETSC_LINKER}\n" )
|
||||||
|
message ("Found MPI Fortran Compiler:\n${PETSC_MPIFC}\n" )
|
||||||
|
message ("Found MPI C Compiler:\n${PETSC_MPICC}\n" )
|
||||||
|
|
||||||
|
# set compiler commands to match PETSc (needs to be done before defining the project)
|
||||||
|
# https://cmake.org/Wiki/CMake_FAQ#How_do_I_use_a_different_compiler.3F
|
||||||
|
set (CMAKE_Fortran_COMPILER "${PETSC_MPIFC}")
|
||||||
|
set (CMAKE_C_COMPILER "${PETSC_MPICC}")
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------------
|
||||||
|
# Now start to care about DAMASK
|
||||||
|
|
||||||
|
# DAMASK solver defines project to build
|
||||||
|
if ("${DAMASK_SOLVER}" STREQUAL "SPECTRAL")
|
||||||
|
project (DAMASK_spectral Fortran C)
|
||||||
|
add_definitions (-DSpectral)
|
||||||
|
message ("Building Spectral Solver\n")
|
||||||
|
elseif ("${DAMASK_SOLVER}" STREQUAL "FEM")
|
||||||
|
project (DAMASK_FEM Fortran C)
|
||||||
|
add_definitions (-DFEM)
|
||||||
|
message ("Building FEM Solver\n")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# set linker commands (needs to be done after defining the project)
|
||||||
|
set (CMAKE_LINKER "${PETSC_LINKER}")
|
||||||
|
|
||||||
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||||
|
set (CMAKE_BUILD_TYPE "RELEASE")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Predefined sets for OPTIMIZATION/OPENMP based on BUILD_TYPE
|
||||||
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG" OR "${CMAKE_BUILD_TYPE}" STREQUAL "SYNTAXONLY" )
|
||||||
|
set (PARALLEL "OFF")
|
||||||
|
set (OPTI "OFF")
|
||||||
|
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RELEASE")
|
||||||
|
set (PARALLEL "ON")
|
||||||
|
set (OPTI "DEFENSIVE")
|
||||||
|
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "PERFORMANCE")
|
||||||
|
set (PARALLEL "ON")
|
||||||
|
set (OPTI "AGGRESSIVE")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# $OPTIMIZATION takes precedence over $BUILD_TYPE defaults
|
||||||
|
if ("${OPTIMIZATION}" STREQUAL "")
|
||||||
|
set (OPTIMIZATION "${OPTI}")
|
||||||
|
else ()
|
||||||
|
set (OPTIMIZATION "${OPTIMIZATION}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# $OPENMP takes precedence over $BUILD_TYPE defaults
|
||||||
|
if ("${OPENMP}" STREQUAL "")
|
||||||
|
set (OPENMP "${PARALLEL}")
|
||||||
|
else ()
|
||||||
|
set(OPENMP "${OPENMP}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# syntax check only (mainly for pre-receive hook, works only with gfortran)
|
||||||
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "SYNTAXONLY" )
|
||||||
|
set (BUILDCMD_POST "${BUILDCMD_POST} -fsyntax-only")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Parse DAMASK_BIN from CONFIG file
|
||||||
|
file (READ "CONFIG" CONFIGFILE)
|
||||||
|
string (REGEX REPLACE ";" "\\\\;" CONFIGFILE "${CONFIGFILE}")
|
||||||
|
string (REGEX REPLACE "\n" ";" CONFIGFILE "${CONFIGFILE}")
|
||||||
|
foreach (item ${CONFIGFILE})
|
||||||
|
string (REGEX MATCH ".+DAMASK_BIN.+" item ${item})
|
||||||
|
if (item)
|
||||||
|
string (REGEX REPLACE "set" "" item "${item}")
|
||||||
|
string (REGEX REPLACE "=" " " item "${item}")
|
||||||
|
string (REGEX REPLACE "\\\${DAMASK_ROOT}" "${PROJECT_SOURCE_DIR}" item "${item}")
|
||||||
|
string (REPLACE "DAMASK_BIN" ";" STRING_LIST ${item})
|
||||||
|
list (GET STRING_LIST 1 item)
|
||||||
|
string (STRIP "${item}" CMAKE_INSTALL_PREFIX)
|
||||||
|
endif ()
|
||||||
|
endforeach(item ${CONFIGFILE})
|
||||||
|
|
||||||
|
# Parse DAMASK version from VERSION file
|
||||||
|
find_program (CAT_EXECUTABLE NAMES cat)
|
||||||
|
execute_process (COMMAND ${CAT_EXECUTABLE} ${PROJECT_SOURCE_DIR}/VERSION
|
||||||
|
RESULT_VARIABLE DAMASK_VERSION_RETURN
|
||||||
|
OUTPUT_VARIABLE DAMASK_V
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
add_definitions (-DDAMASKVERSION="${DAMASK_V}")
|
||||||
|
|
||||||
|
# definition of other macros
|
||||||
|
add_definitions (-DPETSc)
|
||||||
|
add_definitions (-DFLOAT=8)
|
||||||
|
add_definitions (-DINT=4)
|
||||||
|
|
||||||
|
set (DAMASK_INCLUDE_FLAGS "${DAMASK_INCLUDE_FLAGS} ${PETSC_INCLUDES}")
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
# Intel Compiler
|
||||||
|
###################################################################################################
|
||||||
|
if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel")
|
||||||
|
|
||||||
|
if (OPENMP)
|
||||||
|
set (OPENMP_FLAGS "-qopenmp -parallel")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if ("${OPTIMIZATION}" STREQUAL "OFF")
|
||||||
|
set (OPTIMIZATION_FLAGS "-O0 -no-ip")
|
||||||
|
elseif ("${OPTIMIZATION}" STREQUAL "DEFENSIVE")
|
||||||
|
set (OPTIMIZATION_FLAGS "-O2")
|
||||||
|
elseif ("${OPTIMIZATION}" STREQUAL "AGGRESSIVE")
|
||||||
|
set (OPTIMIZATION_FLAGS "-ipo -O3 -no-prec-div -fp-model fast=2 -xHost")
|
||||||
|
# -fast = -ipo, -O3, -no-prec-div, -static, -fp-model fast=2, and -xHost"
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set (STANDARD_CHECK "-stand f08 -standard-semantics")
|
||||||
|
set (LINKER_FLAGS "${LINKER_FLAGS} -shared-intel")
|
||||||
|
# Link against shared Intel libraries instead of static ones
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------------
|
||||||
|
# Fine tuning compilation options
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -fpp")
|
||||||
|
# preprocessor
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -ftz")
|
||||||
|
# flush underflow to zero, automatically set if -O[1,2,3]
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -assume")
|
||||||
|
# assume ...
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} byterecl")
|
||||||
|
# ... record length is given in bytes (also set by -standard-semantics)
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS},fpe_summary")
|
||||||
|
# ... print list of floating point exceptions occured during execution
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -diag-disable")
|
||||||
|
# disables warnings ...
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} 5268")
|
||||||
|
# ... the text exceeds right hand column allowed on the line (we have only comments there)
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -warn")
|
||||||
|
# enables warnings ...
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} declarations")
|
||||||
|
# ... any undeclared names (alternative name: -implicitnone)
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS},general")
|
||||||
|
# ... warning messages and informational messages are issued by the compiler
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS},usage")
|
||||||
|
# ... questionable programming practices
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS},interfaces")
|
||||||
|
# ... checks the interfaces of all SUBROUTINEs called and FUNCTIONs invoked in your compilation against an external set of interface blocks
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS},ignore_loc")
|
||||||
|
# ... %LOC is stripped from an actual argument
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS},alignments")
|
||||||
|
# ... data that is not naturally aligned
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS},unused")
|
||||||
|
# ... declared variables that are never used
|
||||||
|
|
||||||
|
# Additional options
|
||||||
|
# -warn: enables warnings, where
|
||||||
|
# truncated_source: Determines whether warnings occur when source exceeds the maximum column width in fixed-format files.
|
||||||
|
# (too many warnings because we have comments beyond character 132)
|
||||||
|
# uncalled: Determines whether warnings occur when a statement function is never called
|
||||||
|
# all:
|
||||||
|
# -name as_is: case sensitive Fortran!
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------------
|
||||||
|
# Runtime debugging
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -g")
|
||||||
|
# Generate symbolic debugging information in the object file
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -traceback")
|
||||||
|
# Generate extra information in the object file to provide source file traceback information when a severe error occurs at run time
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -gen-interfaces")
|
||||||
|
# Generate an interface block for each routine. http://software.intel.com/en-us/blogs/2012/01/05/doctor-fortran-gets-explicit-again/
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -fp-stack-check")
|
||||||
|
# Generate extra code after every function call to ensure that the floating-point (FP) stack is in the expected state
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -fp-model strict")
|
||||||
|
# Trap uninitalized variables
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -check" )
|
||||||
|
# Checks at runtime ...
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} bounds")
|
||||||
|
# ... if an array index is too small (<1) or too large!
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS},format")
|
||||||
|
# ... for the data type of an item being formatted for output.
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS},output_conversion")
|
||||||
|
# ... for the fit of data items within a designated format descriptor field.
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS},pointers")
|
||||||
|
# ... for certain disassociated or uninitialized pointers or unallocated allocatable objects.
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS},uninit")
|
||||||
|
# ... for uninitialized variables.
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -ftrapuv")
|
||||||
|
# ... initializes stack local variables to an unusual value to aid error detection
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -fpe-all0")
|
||||||
|
# ... capture all floating-point exceptions, sets -ftz automatically
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -warn")
|
||||||
|
# enables warnings ...
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} errors")
|
||||||
|
# ... warnings are changed to errors
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS},stderrors")
|
||||||
|
# ... warnings about Fortran standard violations are changed to errors
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -debug-parameters all")
|
||||||
|
# generate debug information for parameters
|
||||||
|
|
||||||
|
# Additional options
|
||||||
|
# -heap-arrays: Should not be done for OpenMP, but set "ulimit -s unlimited" on shell. Probably it helps also to unlimit other limits
|
||||||
|
# -check: Checks at runtime, where
|
||||||
|
# arg_temp_created: will cause a lot of warnings because we create a bunch of temporary arrays (performance?)
|
||||||
|
# stack:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------------
|
||||||
|
# precision settings
|
||||||
|
set (PRECISION_FLAGS "${PRECISION_FLAGS} -real-size 64")
|
||||||
|
# set precision for standard real to 32 | 64 | 128 (= 4 | 8 | 16 bytes, type pReal is always 8 bytes)
|
||||||
|
set (PRECISION_FLAGS "${PRECISION_FLAGS} -integer-size 32")
|
||||||
|
# set precision for standard int to 16 | 32 | 64 (= 2 | 4 | 8 bytes, type pInt is always 4 bytes)
|
||||||
|
|
||||||
|
|
||||||
|
###################################################################################################
|
||||||
|
# GNU Compiler
|
||||||
|
###################################################################################################
|
||||||
|
elseif(${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU")
|
||||||
|
|
||||||
|
if (OPENMP)
|
||||||
|
set (OPENMP_FLAGS "-fopenmp")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if ("${OPTIMIZATION}" STREQUAL "OFF")
|
||||||
|
set (OPTIMIZATION_FLAGS "-O0" )
|
||||||
|
elseif ("${OPTIMIZATION}" STREQUAL "DEFENSIVE")
|
||||||
|
set (OPTIMIZATION_FLAGS "-O2")
|
||||||
|
elseif ("${OPTIMIZATION}" STREQUAL "AGGRESSIVE")
|
||||||
|
set (OPTIMIZATION_FLAGS "-O3 -ffast-math -funroll-loops -ftree-vectorize")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set (STANDARD_CHECK "-std=f2008ts -pedantic-errors" )
|
||||||
|
set (LINKER_FLAGS "${LINKER_FLAGS} -Wl")
|
||||||
|
# options parsed directly to the linker
|
||||||
|
set (LINKER_FLAGS "${LINKER_FLAGS},-undefined,dynamic_lookup" )
|
||||||
|
# ensure to link against dynamic libraries
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------------
|
||||||
|
# Fine tuning compilation options
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -xf95-cpp-input")
|
||||||
|
# preprocessor
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -ffree-line-length-132")
|
||||||
|
# restrict line length to the standard 132 characters (lattice.f90 require more characters)
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -fimplicit-none")
|
||||||
|
# assume "implicit none" even if not present in source
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -fmodule-private")
|
||||||
|
# assume "private" even if not present in source
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wall")
|
||||||
|
# sets the following Fortran options:
|
||||||
|
# -Waliasing: warn about possible aliasing of dummy arguments. Specifically, it warns if the same actual argument is associated with a dummy argument with "INTENT(IN)" and a dummy argument with "INTENT(OUT)" in a call with an explicit interface.
|
||||||
|
# -Wampersand: checks if a character expression is continued proberly by an ampersand at the end of the line and at the beginning of the new line
|
||||||
|
# -Warray-bounds: checks if array reference is out of bounds at compile time. use -fcheck-bounds to also check during runtime
|
||||||
|
# -Wconversion: warn about implicit conversions between different type
|
||||||
|
# -Wsurprising: warn when "suspicious" code constructs are encountered. While technically legal these usually indicate that an error has been made.
|
||||||
|
# -Wc-binding-type:
|
||||||
|
# -Wintrinsics-std: only standard intrisics are available, e.g. "call flush(6)" will cause an error
|
||||||
|
# -Wno-tabs: do not allow tabs in source
|
||||||
|
# -Wintrinsic-shadow: warn if a user-defined procedure or module procedure has the same name as an intrinsic
|
||||||
|
# -Wline-truncation:
|
||||||
|
# -Wtarget-lifetime:
|
||||||
|
# -Wreal-q-constant: warn about real-literal-constants with 'q' exponent-letter
|
||||||
|
# -Wunused: a number of unused-xxx warnings
|
||||||
|
# and sets the general (non-Fortran options) options:
|
||||||
|
# -Waddress
|
||||||
|
# -Warray-bounds (only with -O2)
|
||||||
|
# -Wc++11-compat
|
||||||
|
# -Wchar-subscripts
|
||||||
|
# -Wcomment
|
||||||
|
# -Wformat
|
||||||
|
# -Wmaybe-uninitialized
|
||||||
|
# -Wnonnull
|
||||||
|
# -Wparentheses
|
||||||
|
# -Wpointer-sign
|
||||||
|
# -Wreorder
|
||||||
|
# -Wreturn-type
|
||||||
|
# -Wsequence-point
|
||||||
|
# -Wstrict-aliasing
|
||||||
|
# -Wstrict-overflow=1
|
||||||
|
# -Wswitch
|
||||||
|
# -Wtrigraphs
|
||||||
|
# -Wuninitialized
|
||||||
|
# -Wunknown-pragmas
|
||||||
|
# -Wunused-function
|
||||||
|
# -Wunused-label
|
||||||
|
# -Wunused-value
|
||||||
|
# -Wunused-variable
|
||||||
|
# -Wvolatile-register-var
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wextra")
|
||||||
|
# sets the following Fortran options:
|
||||||
|
# -Wunuses-parameter:
|
||||||
|
# -Wcompare-reals:
|
||||||
|
# and sets the general (non-Fortran options) options:
|
||||||
|
# -Wclobbered
|
||||||
|
# -Wempty-body
|
||||||
|
# -Wignored-qualifiers
|
||||||
|
# -Wmissing-field-initializers
|
||||||
|
# -Woverride-init
|
||||||
|
# -Wsign-compare
|
||||||
|
# -Wtype-limits
|
||||||
|
# -Wuninitialized
|
||||||
|
# -Wunused-but-set-parameter (only with -Wunused or -Wall)
|
||||||
|
# -Wno-globals
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wcharacter-truncation")
|
||||||
|
# warn if character expressions (strings) are truncated
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wunderflow")
|
||||||
|
# produce a warning when numerical constant expressions are encountered, which yield an UNDERFLOW during compilation
|
||||||
|
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wsuggest-attribute=pure")
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wsuggest-attribute=noreturn")
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wconversion-extra")
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wimplicit-procedure")
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-unused-parameter")
|
||||||
|
set (COMPILE_FLAGS "${COMPILE_FLAGS} -ffpe-summary=all")
|
||||||
|
# print summary of floating point exeptions (invalid,zero,overflow,underflow,inexact,denormal)
|
||||||
|
|
||||||
|
# Additional options
|
||||||
|
# -Warray-temporarieswarnings: because we have many temporary arrays (performance issue?):
|
||||||
|
# -Wimplicit-interface: no interfaces for lapack/MPI routines
|
||||||
|
# -Wunsafe-loop-optimizations: warn if the loop cannot be optimized due to nontrivial assumptions.
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------------
|
||||||
|
# Runtime debugging
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -ffpe-trap=invalid,zero,overflow")
|
||||||
|
# stop execution if floating point exception is detected (NaN is silent)
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -g")
|
||||||
|
# Generate symbolic debugging information in the object file
|
||||||
|
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -fbacktrace")
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -fdump-core")
|
||||||
|
set (DEBUG_FLAGS "${DEBUG_FLAGS} -fcheck=all")
|
||||||
|
# checks for (array-temps,bounds,do,mem,pointer,recursion)
|
||||||
|
|
||||||
|
# Additional options
|
||||||
|
# -ffpe-trap=precision,denormal,underflow
|
||||||
|
#------------------------------------------------------------------------------------------------
|
||||||
|
# precision settings
|
||||||
|
set (PRECISION_FLAGS "${PRECISION_FLAGS} -fdefault-real-8")
|
||||||
|
# set precision to 8 bytes for standard real (=8 for pReal). Will set size of double to 16 bytes as long as -fdefault-double-8 is not set
|
||||||
|
|
||||||
|
set (PRECISION_FLAGS "${PRECISION_FLAGS} -fdefault-double-8")
|
||||||
|
# set precision to 8 bytes for double real, would be 16 bytes if -fdefault-real-8 is used
|
||||||
|
|
||||||
|
# Additional options
|
||||||
|
# -fdefault-integer-8: Use it to set precision to 8 bytes for integer, don't use it for the standard case of pInt=4 (there is no -fdefault-integer-4)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${BUILDCMD_PRE} ${OPENMP_FLAGS} ${STANDARD_CHECK} ${OPTIMIZATION_FLAGS} ${COMPILE_FLAGS} ${PRECISION_FLAGS}")
|
||||||
|
set (CMAKE_Fortran_LINK_EXECUTABLE "${BUILDCMD_PRE} ${CMAKE_LINKER} ${OPENMP_FLAGS} ${OPTIMIZATION_FLAGS} ${LINKER_FLAGS}")
|
||||||
|
|
||||||
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
||||||
|
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}} ${DEBUG_FLAGS}")
|
||||||
|
set (CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} ${DEBUG_FLAGS}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}} ${DAMASK_INCLUDE_FLAGS} ${BUILDCMD_POST}")
|
||||||
|
set (CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} <OBJECTS> -o <TARGET> <LINK_LIBRARIES> ${PETSC_EXTERNAL_LIB} ${BUILDCMD_POST}")
|
||||||
|
|
||||||
|
message ("Fortran Compiler Flags:\n${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}}\n")
|
||||||
|
message ("C Compiler Flags:\n${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}\n")
|
||||||
|
message ("Fortran Linker Command:\n${CMAKE_Fortran_LINK_EXECUTABLE}\n")
|
||||||
|
|
||||||
|
# location of code
|
||||||
|
add_subdirectory (src)
|
||||||
|
|
||||||
|
# INSTALL BUILT BINARIES
|
||||||
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "SYNTAXONLY")
|
||||||
|
exec_program (mktemp ARGS -d OUTPUT_VARIABLE BLACK_HOLE)
|
||||||
|
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/prec.mod
|
||||||
|
DESTINATION ${BLACK_HOLE})
|
||||||
|
else ()
|
||||||
|
if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
||||||
|
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/DAMASK_spectral
|
||||||
|
DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
|
elseif ("${PROJECT_NAME}" STREQUAL "DAMASK_FEM")
|
||||||
|
install (PROGRAMS ${PROJECT_BINARY_DIR}/src/DAMASK_FEM
|
||||||
|
DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
|
endif ()
|
||||||
|
endif ()
|
6
CONFIG
|
@ -5,7 +5,7 @@ set DAMASK_BIN = ${DAMASK_ROOT}/bin
|
||||||
|
|
||||||
set DAMASK_NUM_THREADS = 4
|
set DAMASK_NUM_THREADS = 4
|
||||||
|
|
||||||
set MSC_ROOT = /opt/MSC
|
set MSC_ROOT = /opt/msc
|
||||||
set MARC_VERSION = 2015
|
set MARC_VERSION = 2016
|
||||||
|
|
||||||
set ABAQUS_VERSION = 6.14-5
|
set ABAQUS_VERSION = 2017
|
||||||
|
|
|
@ -10,6 +10,9 @@ else
|
||||||
DAMASK_ROOT=${STAT##* }
|
DAMASK_ROOT=${STAT##* }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# shorthand command to change to DAMASK_ROOT directory
|
||||||
|
eval "function damask() { cd $DAMASK_ROOT; }"
|
||||||
|
|
||||||
# defining set() allows to source the same file for tcsh and bash, with and without space around =
|
# defining set() allows to source the same file for tcsh and bash, with and without space around =
|
||||||
set() {
|
set() {
|
||||||
export $1$2$3
|
export $1$2$3
|
||||||
|
@ -22,11 +25,11 @@ if [[ "x$DAMASK_BIN" != "x" && ! $(echo ":$PATH:" | grep $DAMASK_BIN:) ]]; then
|
||||||
export PATH=$DAMASK_BIN:$PATH
|
export PATH=$DAMASK_BIN:$PATH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SOLVER=$(which DAMASK_spectral 2>/dev/null)
|
SOLVER=$(which DAMASK_spectral || true 2>/dev/null)
|
||||||
if [ "x$SOLVER" == "x" ]; then
|
if [ "x$SOLVER" == "x" ]; then
|
||||||
SOLVER='Not found!'
|
SOLVER='Not found!'
|
||||||
fi
|
fi
|
||||||
PROCESSING=$(which postResults 2>/dev/null)
|
PROCESSING=$(which postResults || true 2>/dev/null)
|
||||||
if [ "x$PROCESSING" == "x" ]; then
|
if [ "x$PROCESSING" == "x" ]; then
|
||||||
PROCESSING='Not found!'
|
PROCESSING='Not found!'
|
||||||
fi
|
fi
|
||||||
|
@ -36,12 +39,14 @@ fi
|
||||||
|
|
||||||
# according to http://software.intel.com/en-us/forums/topic/501500
|
# according to http://software.intel.com/en-us/forums/topic/501500
|
||||||
# this seems to make sense for the stack size
|
# this seems to make sense for the stack size
|
||||||
FREE=$(which free 2>/dev/null)
|
FREE=$(type -p free 2>/dev/null)
|
||||||
if [ "x$FREE" != "x" ]; then
|
if [ "x$FREE" != "x" ]; then
|
||||||
freeMem=$(free -k | grep -E '(Mem|Speicher):' | awk '{print $4;}')
|
freeMem=$(free -k | grep -E '(Mem|Speicher):' | awk '{print $4;}')
|
||||||
# http://superuser.com/questions/220059/what-parameters-has-ulimit
|
# http://superuser.com/questions/220059/what-parameters-has-ulimit
|
||||||
ulimit -d $(expr $freeMem / 2) 2>/dev/null # maximum heap size (kB)
|
ulimit -d unlimited 2>/dev/null \
|
||||||
ulimit -s $(expr $freeMem / $DAMASK_NUM_THREADS / 2) 2>/dev/null # maximum stack size (kB)
|
|| ulimit -d $(expr $freeMem / 2) 2>/dev/null # maximum heap size (kB)
|
||||||
|
ulimit -s unlimited 2>/dev/null \
|
||||||
|
|| ulimit -s $(expr $freeMem / $DAMASK_NUM_THREADS / 2) 2>/dev/null # maximum stack size (kB)
|
||||||
fi
|
fi
|
||||||
ulimit -v unlimited 2>/dev/null # maximum virtual memory size
|
ulimit -v unlimited 2>/dev/null # maximum virtual memory size
|
||||||
ulimit -m unlimited 2>/dev/null # maximum physical memory size
|
ulimit -m unlimited 2>/dev/null # maximum physical memory size
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
|
|
||||||
DAMASK_ROOT=${0:a:h}
|
DAMASK_ROOT=${0:a:h}
|
||||||
|
|
||||||
|
# shorthand command to change to DAMASK_ROOT directory
|
||||||
|
eval "function damask() { cd $DAMASK_ROOT; }"
|
||||||
|
|
||||||
# defining set() allows to source the same file for tcsh and zsh, with and without space around =
|
# defining set() allows to source the same file for tcsh and zsh, with and without space around =
|
||||||
set() {
|
set() {
|
||||||
export $1$2$3
|
export $1$2$3
|
||||||
|
@ -16,8 +19,8 @@ if [[ ( "x$DAMASK_BIN" != "x" ) && ( "x$MATCH" = "x" ) ]]; then
|
||||||
export PATH=$DAMASK_BIN:$PATH
|
export PATH=$DAMASK_BIN:$PATH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SOLVER=`which DAMASK_spectral 2>/dev/null`
|
SOLVER=`which DAMASK_spectral || True 2>/dev/null`
|
||||||
PROCESSING=`which postResults 2>/dev/null`
|
PROCESSING=`which postResults || True 2>/dev/null`
|
||||||
if [ "x$DAMASK_NUM_THREADS" = "x" ]; then
|
if [ "x$DAMASK_NUM_THREADS" = "x" ]; then
|
||||||
DAMASK_NUM_THREADS=1
|
DAMASK_NUM_THREADS=1
|
||||||
fi
|
fi
|
||||||
|
|
2
LICENSE
|
@ -1,4 +1,4 @@
|
||||||
Copyright 2011-16 Max-Planck-Institut für Eisenforschung GmbH
|
Copyright 2011-17 Max-Planck-Institut für Eisenforschung GmbH
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -3,30 +3,36 @@ SHELL = /bin/sh
|
||||||
# Makefile for the installation of DAMASK
|
# Makefile for the installation of DAMASK
|
||||||
########################################################################################
|
########################################################################################
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: spectral marc processing
|
all: spectral FEM marc processing
|
||||||
|
|
||||||
.PHONY: spectral
|
.PHONY: spectral
|
||||||
spectral:
|
spectral: build/spectral
|
||||||
$(MAKE) DAMASK_spectral.exe -C code
|
@(cd build/spectral;make --no-print-directory -ws all install;)
|
||||||
|
|
||||||
.PHONY: FEM
|
.PHONY: FEM
|
||||||
FEM:
|
FEM: build/FEM
|
||||||
$(MAKE) DAMASK_FEM.exe -C code
|
@(cd build/FEM; make --no-print-directory -ws all install;)
|
||||||
|
|
||||||
|
.PHONY: build/spectral
|
||||||
|
build/spectral:
|
||||||
|
@mkdir -p build/spectral
|
||||||
|
@(cd build/spectral; cmake -Wno-dev -DDAMASK_SOLVER=SPECTRAL -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DBUILDCMD_POST=${BUILDCMD_POST} -DBUILDCMD_PRE=${BUILDCMD_PRE} -DOPTIMIZATION=${OPTIMIZATION} -DOPENMP=${OPENMP} ../../;)
|
||||||
|
|
||||||
|
.PHONY: build/FEM
|
||||||
|
build/FEM:
|
||||||
|
@mkdir -p build/FEM
|
||||||
|
@(cd build/FEM; cmake -Wno-dev -DDAMASK_SOLVER=FEM -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DBUILDCMD_POST=${BUILDCMD_POST} -DBUILDCMD_PRE=${BUILDCMD_PRE} -DOPTIMIZATION=${OPTIMIZATION} -DOPENMP=${OPENMP} ../../;)
|
||||||
|
|
||||||
.PHONY: marc
|
.PHONY: marc
|
||||||
marc:
|
marc:
|
||||||
|
@./installation/symLink_Code.sh
|
||||||
@./installation/mods_MarcMentat/apply_DAMASK_modifications.sh ${MAKEFLAGS}
|
@./installation/mods_MarcMentat/apply_DAMASK_modifications.sh ${MAKEFLAGS}
|
||||||
|
|
||||||
.PHONY: tidy
|
|
||||||
tidy:
|
|
||||||
@$(MAKE) tidy -C code >/dev/null
|
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
@$(MAKE) cleanDAMASK -C code >/dev/null
|
@rm -rf build
|
||||||
|
|
||||||
.PHONY: install
|
.PHONY: processing
|
||||||
install:
|
processing:
|
||||||
@./installation/symlink_Code.py ${MAKEFLAGS}
|
|
||||||
@./installation/symlink_Processing.py ${MAKEFLAGS}
|
@./installation/symlink_Processing.py ${MAKEFLAGS}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit a629ee95c53924f2da16e8981855f9abcc1d50f7
|
5
README
|
@ -1,4 +1,5 @@
|
||||||
visit damask.mpie.de for installation and usage instructions
|
DAMASK - The Düsseldorf Advanced Material Simulation Kit
|
||||||
|
Visit damask.mpie.de for installation and usage instructions
|
||||||
|
|
||||||
CONTACT INFORMATION
|
CONTACT INFORMATION
|
||||||
|
|
||||||
|
@ -8,4 +9,4 @@ Max-Planck-Str. 1
|
||||||
Germany
|
Germany
|
||||||
|
|
||||||
Email: DAMASK@mpie.de
|
Email: DAMASK@mpie.de
|
||||||
http://damask.mpie.de
|
https://damask.mpie.de
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
# from https://help.github.com/articles/dealing-with-line-endings/
|
|
||||||
#
|
|
||||||
# always use LF, even if the files are edited on windows, they need to be compiled/used on unix
|
|
||||||
* text eol=lf
|
|
||||||
|
|
||||||
# Denote all files that are truly binary and should not be modified.
|
|
||||||
*.png binary
|
|
||||||
*.jpg binary
|
|
740
code/Makefile
|
@ -1,740 +0,0 @@
|
||||||
SHELL = /bin/sh
|
|
||||||
########################################################################################
|
|
||||||
# Makefile to compile the Material subroutine for BVP solution using spectral method
|
|
||||||
########################################################################################
|
|
||||||
# Be sure to remove all files compiled with different options by using "make clean"
|
|
||||||
########################################################################################
|
|
||||||
# OPTIONS = standard (alternative): meaning
|
|
||||||
#-------------------------------------------------------------
|
|
||||||
# F90 = ifort (gfortran): compiler type, choose Intel or GNU
|
|
||||||
# FCOMPILERNAME = name of the compiler executable (if not the same as the type), e.g. using mpich-g90 instead of ifort
|
|
||||||
# PORTABLE = TRUE (FALSE): decision, if executable is optimized for the machine on which it was built.
|
|
||||||
# OPTIMIZATION = DEFENSIVE (OFF,AGGRESSIVE,ULTRA): Optimization mode: O2, O0, O3 + further options for most files, O3 + further options for all files
|
|
||||||
# OPENMP = TRUE (FALSE): OpenMP multiprocessor support
|
|
||||||
# PREFIX = arbitrary prefix (before FCOMPILERNAME)
|
|
||||||
# OPTION = arbitrary option (just before file to compile)
|
|
||||||
# SUFFIX = arbitrary suffix (after file to compile)
|
|
||||||
# STANDARD_CHECK = checking for Fortran 2008, compiler dependend
|
|
||||||
########################################################################################
|
|
||||||
# including PETSc files. PETSC_ARCH is loaded from these files.
|
|
||||||
DAMASKVERSION :=$(shell cat ../VERSION)
|
|
||||||
|
|
||||||
include ${PETSC_DIR}/lib/petsc/conf/variables
|
|
||||||
include ${PETSC_DIR}/lib/petsc/conf/rules
|
|
||||||
|
|
||||||
INCLUDE_DIRS := $(PETSC_FC_INCLUDES) -DPETSc
|
|
||||||
LIBRARIES := $(PETSC_WITH_EXTERNAL_LIB)
|
|
||||||
FCOMPILERNAME ?= $(FC)
|
|
||||||
CCOMPILERNAME ?= $(CC)
|
|
||||||
LINKERNAME ?= $(FLINKER)
|
|
||||||
|
|
||||||
# MPI compiler wrappers will tell if they are pointing to ifort or gfortran
|
|
||||||
COMPILEROUT :=$(shell $(FC) -show)
|
|
||||||
# search in FC or COMPILEROUT for gfortran/ifort if not defined
|
|
||||||
ifeq ($(strip $(F90)),)
|
|
||||||
F90 :=$(findstring gfortran,$(FC) $(COMPILEROUT))
|
|
||||||
endif
|
|
||||||
ifeq ($(strip $(F90)),)
|
|
||||||
F90 :=$(findstring ifort,$(FC) $(COMPILEROUT))
|
|
||||||
endif
|
|
||||||
|
|
||||||
OPENMP ?= ON
|
|
||||||
OPTIMIZATION ?= DEFENSIVE
|
|
||||||
|
|
||||||
ifeq "$(OPTIMIZATION)" "OFF"
|
|
||||||
OPTI := OFF
|
|
||||||
MAXOPTI := OFF
|
|
||||||
endif
|
|
||||||
ifeq "$(OPTIMIZATION)" "DEFENSIVE"
|
|
||||||
OPTI := DEFENSIVE
|
|
||||||
MAXOPTI := DEFENSIVE
|
|
||||||
endif
|
|
||||||
ifeq "$(OPTIMIZATION)" "AGGRESSIVE"
|
|
||||||
OPTI := AGGRESSIVE
|
|
||||||
MAXOPTI := DEFENSIVE
|
|
||||||
endif
|
|
||||||
ifeq "$(OPTIMIZATION)" "ULTRA"
|
|
||||||
OPTI := AGGRESSIVE
|
|
||||||
MAXOPTI := AGGRESSIVE
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef OPTI
|
|
||||||
OPTI := DEFENSIVE
|
|
||||||
MAXOPTI := DEFENSIVE
|
|
||||||
endif
|
|
||||||
|
|
||||||
# settings for shared memory multicore support
|
|
||||||
ifeq "$(OPENMP)" "ON"
|
|
||||||
OPENMP_FLAG_ifort =-qopenmp -parallel
|
|
||||||
OPENMP_FLAG_gfortran =-fopenmp
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef STANDARD_CHECK
|
|
||||||
STANDARD_CHECK_ifort =$(STANDARD_CHECK)
|
|
||||||
STANDARD_CHECK_gfortran =$(STANDARD_CHECK)
|
|
||||||
endif
|
|
||||||
|
|
||||||
STANDARD_CHECK_ifort ?=-stand f08 -standard-semantics
|
|
||||||
STANDARD_CHECK_gfortran ?=-std=f2008ts -pedantic-errors
|
|
||||||
|
|
||||||
#-pedantic: more strict on standard, enables some warnings
|
|
||||||
# -pedantic-errors: like pedantic, but errors instead of warnings
|
|
||||||
OPTIMIZATION_OFF_ifort :=-O0 -no-ip
|
|
||||||
OPTIMIZATION_OFF_gfortran :=-O0
|
|
||||||
OPTIMIZATION_DEFENSIVE_ifort :=-O2
|
|
||||||
OPTIMIZATION_DEFENSIVE_gfortran :=-O2
|
|
||||||
OPTIMIZATION_AGGRESSIVE_ifort :=-ipo -O3 -no-prec-div -fp-model fast=2 -xHost #-fast = -ipo, -O3, -no-prec-div, -static, -fp-model fast=2, and -xHost
|
|
||||||
OPTIMIZATION_AGGRESSIVE_gfortran :=-O3 -ffast-math -funroll-loops -ftree-vectorize
|
|
||||||
|
|
||||||
|
|
||||||
LINK_OPTIONS_ifort :=-shared-intel
|
|
||||||
COMPILE_OPTIONS_ifort :=-DDAMASKVERSION=\"${DAMASKVERSION}\"\
|
|
||||||
-fpp\
|
|
||||||
-ftz\
|
|
||||||
-assume byterecl,fpe_summary\
|
|
||||||
-diag-disable 5268\
|
|
||||||
-warn declarations\
|
|
||||||
-warn general\
|
|
||||||
-warn usage\
|
|
||||||
-warn interfaces\
|
|
||||||
-warn ignore_loc\
|
|
||||||
-warn alignments\
|
|
||||||
-warn unused
|
|
||||||
|
|
||||||
###################################################################################################
|
|
||||||
#COMPILE SWITCHES
|
|
||||||
#-shared-intel: Link against shared Intel libraries instead of static ones
|
|
||||||
#-fpp: preprocessor
|
|
||||||
#-ftz: flush unterflow to zero, automatically set if O<0,1,2,3> >0
|
|
||||||
#-assume byterecl record length is given in bytes (also set by -standard-semantics)
|
|
||||||
# fpe_summary print list of floating point exceptions occured during execution
|
|
||||||
#-fimplicit-none: assume "implicit-none" even if not present in source
|
|
||||||
#-diag-disable: disables warnings, where
|
|
||||||
# warning ID 5268: the text exceeds right hand column allowed on the line (we have only comments there)
|
|
||||||
#-warn: enables warnings, where
|
|
||||||
# declarations: any undeclared names (alternative name: -implicitnone)
|
|
||||||
# general: warning messages and informational messages are issued by the compiler
|
|
||||||
# usage: questionable programming practices
|
|
||||||
# interfaces: checks the interfaces of all SUBROUTINEs called and FUNCTIONs invoked in your compilation against an external set of interface blocks
|
|
||||||
# ignore_loc: %LOC is stripped from an actual argument
|
|
||||||
# alignments: data that is not naturally aligned
|
|
||||||
# unused: declared variables that are never used
|
|
||||||
# stderrors: warnings about Fortran standard violations are changed to errors (STANDARD_CHECK)
|
|
||||||
#
|
|
||||||
###################################################################################################
|
|
||||||
#MORE OPTIONS FOR DEBUGGING DURING COMPILATION
|
|
||||||
#-warn: enables warnings, where
|
|
||||||
# truncated_source: Determines whether warnings occur when source exceeds the maximum column width in fixed-format files. (too many warnings because we have comments beyond character 132)
|
|
||||||
# uncalled: Determines whether warnings occur when a statement function is never called
|
|
||||||
# all:
|
|
||||||
# -name as_is: case sensitive Fortran!
|
|
||||||
|
|
||||||
DEBUG_OPTIONS_ifort :=-g\
|
|
||||||
-traceback\
|
|
||||||
-gen-interfaces\
|
|
||||||
-fp-stack-check\
|
|
||||||
-fp-model strict\
|
|
||||||
-check bounds,format,output_conversion,pointers,uninit\
|
|
||||||
-ftrapuv\
|
|
||||||
-fpe-all0\
|
|
||||||
-warn errors\
|
|
||||||
-warn stderrors\
|
|
||||||
-debug-parameters all
|
|
||||||
|
|
||||||
###################################################################################################
|
|
||||||
#COMPILE SWITCHES FOR RUNTIME DEBUGGING
|
|
||||||
#-g: Generate symbolic debugging information in the object file
|
|
||||||
#-traceback: Generate extra information in the object file to provide source file traceback information when a severe error occurs at run time.
|
|
||||||
#-gen-interfaces: Generate an interface block for each routine. http://software.intel.com/en-us/blogs/2012/01/05/doctor-fortran-gets-explicit-again/
|
|
||||||
#-fp-stack-check: Generate extra code after every function call to ensure that the floating-point (FP) stack is in the expected state.
|
|
||||||
#-ftrapuv Trap uninitalized variables
|
|
||||||
#-check: checks at runtime, where
|
|
||||||
# bounds: check if an array index is too small (<1) or too large!
|
|
||||||
# format: Checking for the data type of an item being formatted for output.
|
|
||||||
# output_conversion: Checking for the fit of data items within a designated format descriptor field.
|
|
||||||
# pointers: Checking for certain disassociated or uninitialized pointers or unallocated allocatable objects.
|
|
||||||
# uninit: Checking for uninitialized variables.
|
|
||||||
#-fpe-all0 capture all floating-point exceptions, sets -ftz automatically
|
|
||||||
#-warn: enables warnings, where
|
|
||||||
# errors: warnings are changed to errors
|
|
||||||
# stderrors: warnings about Fortran standard violations are changed to errors
|
|
||||||
# information on http://software.intel.com/en-us/articles/determining-root-cause-of-sigsegv-or-sigbus-errors/
|
|
||||||
###################################################################################################
|
|
||||||
#MORE OPTIONS FOR RUNTIME DEBUGGING
|
|
||||||
#-heap-arrays: should not be done for OpenMP, but set "ulimit -s unlimited" on shell. Probably it helps also to unlimit other limits
|
|
||||||
#-check: checks at runtime, where
|
|
||||||
# arg_temp_created: will cause a lot of warnings because we create a bunch of temporary arrays (performance?)
|
|
||||||
# stack:
|
|
||||||
LINK_OPTIONS_gfortran :=-Wl,-undefined,dynamic_lookup
|
|
||||||
COMPILE_OPTIONS_gfortran :=-DDAMASKVERSION=\"${DAMASKVERSION}\"\
|
|
||||||
-xf95-cpp-input\
|
|
||||||
-ffree-line-length-132\
|
|
||||||
-fimplicit-none\
|
|
||||||
-fmodule-private\
|
|
||||||
-Wall\
|
|
||||||
-Wextra\
|
|
||||||
-Wcharacter-truncation\
|
|
||||||
-Wunderflow\
|
|
||||||
-Wsuggest-attribute=pure\
|
|
||||||
-Wsuggest-attribute=noreturn\
|
|
||||||
-Wconversion-extra\
|
|
||||||
-Wimplicit-procedure\
|
|
||||||
-Wno-unused-parameter
|
|
||||||
#-ffpe-summary=all only for newer gfortran
|
|
||||||
###################################################################################################
|
|
||||||
#COMPILE SWITCHES
|
|
||||||
#-shared
|
|
||||||
#-Wl,-undefined,dynamic_lookup:ensure to link against dynamic libraries
|
|
||||||
#-xf95-cpp-input: preprocessor
|
|
||||||
#-ffree-line-length-132: restrict line length to the standard 132 characters
|
|
||||||
#-ffpe-summary: print summary of floating point exeptions (‘invalid’, ‘zero’, ‘overflow’, ‘underflow’, ‘inexact’ and ‘denormal’)
|
|
||||||
#-fimplicit-none: assume "implicit-none" even if not present in source
|
|
||||||
#-fmodule-private: assume "private" even if not present in source
|
|
||||||
#-Wcharacter-truncation: warn if character expressions (strings) are truncated
|
|
||||||
#-Wunderflow: produce a warning when numerical constant expressions are encountered, which yield an UNDERFLOW during compilation
|
|
||||||
#-Wsuggest-attribute=pure:
|
|
||||||
#-Wsuggest-attribute=noreturn:
|
|
||||||
#-Wconversion-extra
|
|
||||||
#-Wimplicit-procedure
|
|
||||||
#-Wall: sets the following Fortran options:
|
|
||||||
# -Waliasing: warn about possible aliasing of dummy arguments. Specifically, it warns if the same actual argument is associated with a dummy argument with "INTENT(IN)" and a dummy argument with "INTENT(OUT)" in a call with an explicit interface.
|
|
||||||
# -Wampersand: checks if a character expression is continued proberly by an ampersand at the end of the line and at the beginning of the new line
|
|
||||||
# -Warray-bounds: checks if array reference is out of bounds at compile time. use -fcheck-bounds to also check during runtime
|
|
||||||
# -Wconversion: warn about implicit conversions between different type
|
|
||||||
# -Wsurprising: warn when "suspicious" code constructs are encountered. While technically legal these usually indicate that an error has been made.
|
|
||||||
# -Wc-binding-type:
|
|
||||||
# -Wintrinsics-std: only standard intrisics are available, e.g. "call flush(6)" will cause an error
|
|
||||||
# -Wno-tabs: do not allow tabs in source
|
|
||||||
# -Wintrinsic-shadow: warn if a user-defined procedure or module procedure has the same name as an intrinsic
|
|
||||||
# -Wline-truncation:
|
|
||||||
# -Wtarget-lifetime:
|
|
||||||
# -Wreal-q-constant: warn about real-literal-constants with 'q' exponent-letter
|
|
||||||
# -Wunused: a number of unused-xxx warnings
|
|
||||||
# these are general (non -Fortran options) implied by -Wall
|
|
||||||
# -Waddress
|
|
||||||
# -Warray-bounds (only with -O2)
|
|
||||||
# -Wc++11-compat
|
|
||||||
# -Wchar-subscripts
|
|
||||||
# -Wcomment
|
|
||||||
# -Wformat
|
|
||||||
# -Wmaybe-uninitialized
|
|
||||||
# -Wnonnull
|
|
||||||
# -Wparentheses
|
|
||||||
# -Wpointer-sign
|
|
||||||
# -Wreorder
|
|
||||||
# -Wreturn-type
|
|
||||||
# -Wsequence-point
|
|
||||||
# -Wstrict-aliasing
|
|
||||||
# -Wstrict-overflow=1
|
|
||||||
# -Wswitch
|
|
||||||
# -Wtrigraphs
|
|
||||||
# -Wuninitialized
|
|
||||||
# -Wunknown-pragmas
|
|
||||||
# -Wunused-function
|
|
||||||
# -Wunused-label
|
|
||||||
# -Wunused-value
|
|
||||||
# -Wunused-variable
|
|
||||||
# -Wvolatile-register-var
|
|
||||||
#-Wextra: sets the following Fortran options:
|
|
||||||
# -Wunuses-parameter:
|
|
||||||
# -Wcompare-reals:
|
|
||||||
# these are general (non -Fortran options) implied by -Wextra
|
|
||||||
# -Wclobbered
|
|
||||||
# -Wempty-body
|
|
||||||
# -Wignored-qualifiers
|
|
||||||
# -Wmissing-field-initializers
|
|
||||||
# -Woverride-init
|
|
||||||
# -Wsign-compare
|
|
||||||
# -Wtype-limits
|
|
||||||
# -Wuninitialized
|
|
||||||
# -Wunused-but-set-parameter (only with -Wunused or -Wall)
|
|
||||||
# -Wno-globals
|
|
||||||
|
|
||||||
###################################################################################################
|
|
||||||
#MORE OPTIONS FOR DEBUGGING DURING COMPILATION
|
|
||||||
#-Warray-temporarieswarnings: because we have many temporary arrays (performance issue?):
|
|
||||||
#-Wimplicit-interface: no interfaces for lapack routines
|
|
||||||
#-Wunsafe-loop-optimizations: warn if the loop cannot be optimized due to nontrivial assumptions.
|
|
||||||
#-Wstrict-overflow:
|
|
||||||
|
|
||||||
DEBUG_OPTIONS_gfortran :=-g \
|
|
||||||
-fbacktrace \
|
|
||||||
-fdump-core \
|
|
||||||
-fcheck=all \
|
|
||||||
-ffpe-trap=invalid,zero,overflow
|
|
||||||
|
|
||||||
###################################################################################################
|
|
||||||
#COMPILE SWITCHES FOR RUNTIME DEBUGGING
|
|
||||||
#-ffpe-trap=invalid,\ stop execution if floating point exception is detected (NaN is silent)
|
|
||||||
# zero,\
|
|
||||||
# overflow
|
|
||||||
#-fcheck=all: sets the following Fortran options:
|
|
||||||
#array-temps
|
|
||||||
#bounds
|
|
||||||
#do
|
|
||||||
#mem
|
|
||||||
#pointer
|
|
||||||
#recursion
|
|
||||||
###################################################################################################
|
|
||||||
#MORE OPTIONS FOR RUNTIME DEBUGGING
|
|
||||||
#-ffpe-trap=precision,\
|
|
||||||
# denormal, \
|
|
||||||
# underflow
|
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "ON"
|
|
||||||
COMPILE_OPTIONS_$(F90) +=$(DEBUG_OPTIONS_$(F90))
|
|
||||||
LINK_OPTIONS_$(F90) +=$(DEBUG_OPTIONS_$(F90))
|
|
||||||
endif
|
|
||||||
LINK_OPTIONS_$(F90) += $(OPTIMIZATION_$(MAXOPTI)_$(F90))
|
|
||||||
|
|
||||||
PRECISION_ifort :=-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4
|
|
||||||
#-real-size 32: set precision to one of those 32/64/128 (= 4/8/16 bytes) for standard real (=8 for pReal)
|
|
||||||
#-integer-size 16: set precision to one of those 16/32/64 (= 2/4/8 bytes) for standard integer (=4 for pInt)
|
|
||||||
PRECISION_gfortran :=-fdefault-real-8 -fdefault-double-8 -DFLOAT=8 -DINT=4
|
|
||||||
#-fdefault-real-8: set precision to 8 bytes for standard real (=8 for pReal). Will set size of double to 16 bytes as long as -fdefault-double-8 is not set
|
|
||||||
#-fdefault-double-8: set precision to 8 bytes for double real, would be 16 bytes because -fdefault-real-8 is used
|
|
||||||
#-fdefault-integer-8: Use it to set precision to 8 bytes for integer, don't use it for the standard case of pInt=4 (there is no -fdefault-integer-4)
|
|
||||||
|
|
||||||
###################################################################################################
|
|
||||||
COMPILE =$(OPENMP_FLAG_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(OPTI)_$(F90)) $(COMPILE_OPTIONS_$(F90)) $(INCLUDE_DIRS) $(PRECISION_$(F90))
|
|
||||||
COMPILE_MAXOPTI =$(OPENMP_FLAG_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) $(COMPILE_OPTIONS_$(F90)) $(INCLUDE_DIRS) $(PRECISION_$(F90))
|
|
||||||
###################################################################################################
|
|
||||||
SOURCE_FILES = \
|
|
||||||
source_thermal_dissipation.o \
|
|
||||||
source_thermal_externalheat.o \
|
|
||||||
source_damage_isoBrittle.o \
|
|
||||||
source_damage_isoDuctile.o \
|
|
||||||
source_damage_anisoBrittle.o \
|
|
||||||
source_damage_anisoDuctile.o \
|
|
||||||
source_vacancy_phenoplasticity.o \
|
|
||||||
source_vacancy_irradiation.o \
|
|
||||||
source_vacancy_thermalfluc.o
|
|
||||||
|
|
||||||
KINEMATICS_FILES = \
|
|
||||||
kinematics_cleavage_opening.o \
|
|
||||||
kinematics_slipplane_opening.o \
|
|
||||||
kinematics_thermal_expansion.o \
|
|
||||||
kinematics_vacancy_strain.o \
|
|
||||||
kinematics_hydrogen_strain.o
|
|
||||||
|
|
||||||
PLASTIC_FILES = \
|
|
||||||
plastic_dislotwin.o \
|
|
||||||
plastic_disloUCLA.o \
|
|
||||||
plastic_isotropic.o \
|
|
||||||
plastic_phenopowerlaw.o \
|
|
||||||
plastic_titanmod.o \
|
|
||||||
plastic_nonlocal.o \
|
|
||||||
plastic_none.o \
|
|
||||||
plastic_phenoplus.o
|
|
||||||
|
|
||||||
THERMAL_FILES = \
|
|
||||||
thermal_isothermal.o \
|
|
||||||
thermal_adiabatic.o \
|
|
||||||
thermal_conduction.o
|
|
||||||
|
|
||||||
DAMAGE_FILES = \
|
|
||||||
damage_none.o \
|
|
||||||
damage_local.o \
|
|
||||||
damage_nonlocal.o
|
|
||||||
|
|
||||||
VACANCYFLUX_FILES = \
|
|
||||||
vacancyflux_isoconc.o \
|
|
||||||
vacancyflux_isochempot.o \
|
|
||||||
vacancyflux_cahnhilliard.o
|
|
||||||
|
|
||||||
POROSITY_FILES = \
|
|
||||||
porosity_none.o \
|
|
||||||
porosity_phasefield.o
|
|
||||||
|
|
||||||
HYDROGENFLUX_FILES = \
|
|
||||||
hydrogenflux_isoconc.o \
|
|
||||||
hydrogenflux_cahnhilliard.o
|
|
||||||
|
|
||||||
HOMOGENIZATION_FILES = \
|
|
||||||
homogenization_RGC.o \
|
|
||||||
homogenization_isostrain.o \
|
|
||||||
homogenization_none.o
|
|
||||||
|
|
||||||
#####################
|
|
||||||
# Spectral Solver
|
|
||||||
#####################
|
|
||||||
DAMASK_spectral.exe: IGNORE := \#
|
|
||||||
DAMASK_spectral.exe: COMPILE += -DSpectral
|
|
||||||
DAMASK_spectral.exe: COMPILE_MAXOPTI += -DSpectral
|
|
||||||
DAMASK_spectral.exe: MESHNAME := mesh.f90
|
|
||||||
DAMASK_spectral.exe: INTERFACENAME := spectral_interface.f90
|
|
||||||
|
|
||||||
DAMASK_spectral.o: IGNORE := \#
|
|
||||||
DAMASK_spectral.o: COMPILE += -DSpectral
|
|
||||||
DAMASK_spectral.o: COMPILE_MAXOPTI += -DSpectral
|
|
||||||
DAMASK_spectral.o: MESHNAME := mesh.f90
|
|
||||||
DAMASK_spectral.o: INTERFACENAME := spectral_interface.f90
|
|
||||||
|
|
||||||
|
|
||||||
SPECTRAL_SOLVER_FILES = spectral_mech_AL.o spectral_mech_Basic.o spectral_mech_Polarisation.o \
|
|
||||||
spectral_thermal.o spectral_damage.o
|
|
||||||
|
|
||||||
SPECTRAL_FILES = C_routines.o \
|
|
||||||
system_routines.o \
|
|
||||||
prec.o \
|
|
||||||
DAMASK_interface.o \
|
|
||||||
IO.o \
|
|
||||||
numerics.o \
|
|
||||||
debug.o \
|
|
||||||
math.o \
|
|
||||||
FEsolving.o \
|
|
||||||
mesh.o \
|
|
||||||
material.o \
|
|
||||||
lattice.o \
|
|
||||||
$(SOURCE_FILES) \
|
|
||||||
$(KINEMATICS_FILES) \
|
|
||||||
$(PLASTIC_FILES) \
|
|
||||||
constitutive.o \
|
|
||||||
crystallite.o \
|
|
||||||
$(THERMAL_FILES) \
|
|
||||||
$(DAMAGE_FILES) \
|
|
||||||
$(VACANCYFLUX_FILES) \
|
|
||||||
$(HYDROGENFLUX_FILES) \
|
|
||||||
$(POROSITY_FILES) \
|
|
||||||
$(HOMOGENIZATION_FILES) homogenization.o \
|
|
||||||
CPFEM2.o \
|
|
||||||
spectral_utilities.o \
|
|
||||||
$(SPECTRAL_SOLVER_FILES)
|
|
||||||
|
|
||||||
DAMASK_spectral.exe: DAMASK_spectral.o
|
|
||||||
$(PREFIX) $(LINKERNAME) $(OPENMP_FLAG_$(F90)) $(LINK_OPTIONS_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) \
|
|
||||||
-o DAMASK_spectral.exe DAMASK_spectral.o \
|
|
||||||
$(SPECTRAL_FILES) $(LIBRARIES) $(SUFFIX)
|
|
||||||
|
|
||||||
|
|
||||||
DAMASK_spectral.o: DAMASK_spectral.f90 \
|
|
||||||
$(SPECTRAL_SOLVER_FILES)
|
|
||||||
$(PREFIX) $(FCOMPILERNAME) $(COMPILE_MAXOPTI) -c DAMASK_spectral.f90 $(SUFFIX)
|
|
||||||
|
|
||||||
spectral_mech_AL.o: spectral_mech_AL.f90 \
|
|
||||||
spectral_utilities.o
|
|
||||||
|
|
||||||
spectral_mech_Polarisation.o: spectral_mech_Polarisation.f90 \
|
|
||||||
spectral_utilities.o
|
|
||||||
|
|
||||||
spectral_mech_Basic.o: spectral_mech_Basic.f90 \
|
|
||||||
spectral_utilities.o
|
|
||||||
|
|
||||||
spectral_thermal.o: spectral_thermal.f90 \
|
|
||||||
spectral_utilities.o
|
|
||||||
|
|
||||||
spectral_damage.o: spectral_damage.f90 \
|
|
||||||
spectral_utilities.o
|
|
||||||
|
|
||||||
spectral_utilities.o: spectral_utilities.f90 \
|
|
||||||
CPFEM2.o
|
|
||||||
|
|
||||||
#####################
|
|
||||||
# FEM Solver
|
|
||||||
#####################
|
|
||||||
VPATH := ../private/FEM/code
|
|
||||||
DAMASK_FEM.exe: COMPILE += -DFEM
|
|
||||||
DAMASK_FEM.exe: COMPILE_MAXOPTI += -DFEM
|
|
||||||
DAMASK_FEM.exe: MESHNAME := ../private/FEM/code/meshFEM.f90
|
|
||||||
DAMASK_FEM.exe: INTERFACENAME := ../private/FEM/code/DAMASK_FEM_interface.f90
|
|
||||||
DAMASK_FEM.exe: INCLUDE_DIRS += -I./
|
|
||||||
|
|
||||||
FEM_SOLVER_FILES = FEM_mech.o FEM_thermal.o FEM_damage.o FEM_vacancyflux.o FEM_porosity.o FEM_hydrogenflux.o
|
|
||||||
|
|
||||||
FEM_FILES = prec.o \
|
|
||||||
DAMASK_interface.o \
|
|
||||||
FEZoo.o \
|
|
||||||
IO.o \
|
|
||||||
numerics.o \
|
|
||||||
debug.o \
|
|
||||||
math.o \
|
|
||||||
FEsolving.o \
|
|
||||||
mesh.o \
|
|
||||||
material.o \
|
|
||||||
lattice.o \
|
|
||||||
$(SOURCE_FILES) \
|
|
||||||
$(KINEMATICS_FILES) \
|
|
||||||
$(PLASTIC_FILES) \
|
|
||||||
constitutive.o \
|
|
||||||
crystallite.o \
|
|
||||||
$(THERMAL_FILES) \
|
|
||||||
$(DAMAGE_FILES) \
|
|
||||||
$(VACANCYFLUX_FILES) \
|
|
||||||
$(HYDROGENFLUX_FILES) \
|
|
||||||
$(POROSITY_FILES) \
|
|
||||||
$(HOMOGENIZATION_FILES) homogenization.o \
|
|
||||||
CPFEM.o \
|
|
||||||
FEM_utilities.o \
|
|
||||||
$(FEM_SOLVER_FILES)
|
|
||||||
|
|
||||||
DAMASK_FEM.exe: DAMASK_FEM_driver.o
|
|
||||||
$(PREFIX) $(LINKERNAME) $(OPENMP_FLAG_$(F90)) $(LINK_OPTIONS_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) \
|
|
||||||
-o DAMASK_FEM.exe DAMASK_FEM_driver.o \
|
|
||||||
$(FEM_FILES) $(LIBRARIES) $(SUFFIX)
|
|
||||||
|
|
||||||
DAMASK_FEM_driver.o: DAMASK_FEM_driver.f90 $(FEM_SOLVER_FILES)
|
|
||||||
$(PREFIX) $(FCOMPILERNAME) $(COMPILE_MAXOPTI) -c ../private/FEM/code/DAMASK_FEM_driver.f90 $(SUFFIX)
|
|
||||||
|
|
||||||
FEM_mech.o: FEM_mech.f90 \
|
|
||||||
FEM_utilities.o
|
|
||||||
|
|
||||||
FEM_thermal.o: FEM_thermal.f90 \
|
|
||||||
FEM_utilities.o
|
|
||||||
|
|
||||||
FEM_damage.o: FEM_damage.f90 \
|
|
||||||
FEM_utilities.o
|
|
||||||
|
|
||||||
FEM_vacancyflux.o: FEM_vacancyflux.f90 \
|
|
||||||
FEM_utilities.o
|
|
||||||
|
|
||||||
FEM_porosity.o: FEM_porosity.f90 \
|
|
||||||
FEM_utilities.o
|
|
||||||
|
|
||||||
FEM_hydrogenflux.o: FEM_hydrogenflux.f90 \
|
|
||||||
FEM_utilities.o
|
|
||||||
|
|
||||||
FEM_utilities.o: FEM_utilities.f90 \
|
|
||||||
CPFEM.o
|
|
||||||
|
|
||||||
FEZoo.o: $(wildcard FEZoo.f90) \
|
|
||||||
IO.o
|
|
||||||
$(IGNORE) $(PREFIX) $(FCOMPILERNAME) $(COMPILE) -c ../private/FEM/code/FEZoo.f90 $(SUFFIX)
|
|
||||||
touch FEZoo.o
|
|
||||||
|
|
||||||
CPFEM.o: CPFEM.f90 \
|
|
||||||
homogenization.o
|
|
||||||
|
|
||||||
CPFEM2.o: CPFEM2.f90 \
|
|
||||||
homogenization.o
|
|
||||||
|
|
||||||
homogenization.o: homogenization.f90 \
|
|
||||||
$(THERMAL_FILES) \
|
|
||||||
$(DAMAGE_FILES) \
|
|
||||||
$(VACANCYFLUX_FILES) \
|
|
||||||
$(POROSITY_FILES) \
|
|
||||||
$(HYDROGENFLUX_FILES) \
|
|
||||||
$(HOMOGENIZATION_FILES)
|
|
||||||
|
|
||||||
thermal_isothermal.o: thermal_isothermal.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
thermal_adiabatic.o: thermal_adiabatic.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
thermal_conduction.o: thermal_conduction.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
damage_none.o: damage_none.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
damage_local.o: damage_local.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
damage_nonlocal.o: damage_nonlocal.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
thermal_conduction.o: thermal_conduction.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
vacancyflux_isoconc.o: vacancyflux_isoconc.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
vacancyflux_isochempot.o: vacancyflux_isochempot.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
vacancyflux_cahnhilliard.o: vacancyflux_cahnhilliard.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
porosity_none.o: porosity_none.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
porosity_phasefield.o: porosity_phasefield.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
hydrogenflux_isoconc.o: hydrogenflux_isoconc.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
hydrogenflux_cahnhilliard.o: hydrogenflux_cahnhilliard.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
homogenization_RGC.o: homogenization_RGC.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
homogenization_isostrain.o: homogenization_isostrain.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
homogenization_none.o: homogenization_none.f90 \
|
|
||||||
crystallite.o
|
|
||||||
|
|
||||||
crystallite.o: crystallite.f90 \
|
|
||||||
constitutive.o
|
|
||||||
|
|
||||||
constitutive.o: constitutive.f90 \
|
|
||||||
$(SOURCE_FILES) \
|
|
||||||
$(KINEMATICS_FILES) \
|
|
||||||
$(PLASTIC_FILES)
|
|
||||||
|
|
||||||
source_thermal_dissipation.o: source_thermal_dissipation.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
source_thermal_externalheat.o: source_thermal_externalheat.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
source_damage_isoBrittle.o: source_damage_isoBrittle.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
source_damage_isoDuctile.o: source_damage_isoDuctile.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
source_damage_anisoBrittle.o: source_damage_anisoBrittle.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
source_damage_anisoDuctile.o: source_damage_anisoDuctile.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
source_vacancy_phenoplasticity.o: source_vacancy_phenoplasticity.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
source_vacancy_irradiation.o: source_vacancy_irradiation.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
source_vacancy_thermalfluc.o: source_vacancy_thermalfluc.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
kinematics_cleavage_opening.o: kinematics_cleavage_opening.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
kinematics_slipplane_opening.o: kinematics_slipplane_opening.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
kinematics_thermal_expansion.o: kinematics_thermal_expansion.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
kinematics_vacancy_strain.o: kinematics_vacancy_strain.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
kinematics_hydrogen_strain.o: kinematics_hydrogen_strain.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
plastic_nonlocal.o: plastic_nonlocal.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
plastic_titanmod.o: plastic_titanmod.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
plastic_disloUCLA.o: plastic_disloUCLA.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
plastic_dislotwin.o: plastic_dislotwin.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
plastic_phenopowerlaw.o: plastic_phenopowerlaw.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
plastic_phenoplus.o: plastic_phenoplus.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
plastic_isotropic.o: plastic_isotropic.f90 \
|
|
||||||
lattice.o
|
|
||||||
|
|
||||||
plastic_none.o: plastic_none.f90 \
|
|
||||||
lattice.o
|
|
||||||
ifeq "$(F90)" "gfortran"
|
|
||||||
lattice.o: lattice.f90 \
|
|
||||||
material.o
|
|
||||||
$(PREFIX) $(FCOMPILERNAME) $(COMPILE) -ffree-line-length-240 -c lattice.f90 $(SUFFIX)
|
|
||||||
# long lines for interaction matrix
|
|
||||||
else
|
|
||||||
lattice.o: lattice.f90 \
|
|
||||||
material.o
|
|
||||||
endif
|
|
||||||
|
|
||||||
material.o: material.f90 \
|
|
||||||
mesh.o
|
|
||||||
|
|
||||||
mesh.o: mesh.f90 \
|
|
||||||
$(wildcard meshFEM.f90) \
|
|
||||||
FEsolving.o \
|
|
||||||
math.o \
|
|
||||||
FEZoo.o
|
|
||||||
$(PREFIX) $(FCOMPILERNAME) $(COMPILE) -c $(MESHNAME) -o mesh.o $(SUFFIX)
|
|
||||||
|
|
||||||
FEsolving.o: FEsolving.f90 \
|
|
||||||
debug.o
|
|
||||||
|
|
||||||
math.o: math.f90 \
|
|
||||||
debug.o
|
|
||||||
|
|
||||||
debug.o: debug.f90 \
|
|
||||||
numerics.o
|
|
||||||
|
|
||||||
numerics.o: numerics.f90 \
|
|
||||||
IO.o
|
|
||||||
|
|
||||||
IO.o: IO.f90 \
|
|
||||||
DAMASK_interface.o
|
|
||||||
|
|
||||||
DAMASK_interface.o: spectral_interface.f90 \
|
|
||||||
$(wildcard DAMASK_FEM_interface.f90) \
|
|
||||||
prec.o
|
|
||||||
$(PREFIX) $(FCOMPILERNAME) $(COMPILE) -c $(INTERFACENAME) -o DAMASK_interface.o $(SUFFIX)
|
|
||||||
|
|
||||||
ifeq "$(F90)" "gfortran"
|
|
||||||
prec.o: prec.f90 \
|
|
||||||
system_routines.o
|
|
||||||
$(PREFIX) $(FCOMPILERNAME) $(COMPILE) -c prec.f90 -fno-range-check -fall-intrinsics -fno-fast-math $(SUFFIX)
|
|
||||||
# fno-range-check: Disable range checking on results of simplification of constant expressions during compilation
|
|
||||||
# --> allows the definition of DAMASK_NaN
|
|
||||||
#-fall-intrinsics: all intrinsic procedures (including the GNU-specific extensions) are accepted. -Wintrinsics-std will be ignored
|
|
||||||
# and no user-defined procedure with the same name as any intrinsic will be called except when it is explicitly declared external
|
|
||||||
# --> allows the use of 'isnan'
|
|
||||||
#-fno-fast-math:
|
|
||||||
# --> otherwise, when setting -ffast-math, isnan always evaluates to false (I would call it a bug)
|
|
||||||
else
|
|
||||||
|
|
||||||
prec.o: prec.f90 \
|
|
||||||
system_routines.o
|
|
||||||
endif
|
|
||||||
|
|
||||||
system_routines.o: system_routines.f90 \
|
|
||||||
C_routines.o
|
|
||||||
|
|
||||||
C_routines.o: C_routines.c
|
|
||||||
|
|
||||||
|
|
||||||
%.o : %.f90
|
|
||||||
$(PREFIX) $(FCOMPILERNAME) $(COMPILE) -c $< $(SUFFIX)
|
|
||||||
|
|
||||||
%.o : %.c
|
|
||||||
$(CCOMPILERNAME) -c $<
|
|
||||||
|
|
||||||
.PHONY: tidy
|
|
||||||
tidy:
|
|
||||||
@rm -rf *.o
|
|
||||||
@rm -rf *.mod
|
|
||||||
@rm -rf *.optrpt
|
|
||||||
@rm -rf *.inst.f90 # for instrumentation
|
|
||||||
@rm -rf *.pomp.f90 # for instrumentation
|
|
||||||
@rm -rf *.pp.f90 # for instrumentation
|
|
||||||
@rm -rf *.pdb # for instrumentation
|
|
||||||
@rm -rf *.opari.inc # for instrumentation
|
|
||||||
|
|
||||||
.PHONY: cleanDAMASK
|
|
||||||
cleanDAMASK:
|
|
||||||
@rm -rf *.exe
|
|
||||||
@rm -rf *.marc
|
|
||||||
@rm -rf *.o
|
|
||||||
@rm -rf *.mod
|
|
||||||
@rm -rf *.optrpt
|
|
||||||
@rm -rf *.inst.f90 # for instrumentation
|
|
||||||
@rm -rf *.pomp.f90 # for instrumentation
|
|
||||||
@rm -rf *.pp.f90 # for instrumentation
|
|
||||||
@rm -rf *.pdb # for instrumentation
|
|
||||||
@rm -rf *.opari.inc # for instrumentation
|
|
||||||
|
|
||||||
.PHONY: help
|
|
||||||
help:
|
|
||||||
F90="$(F90)"
|
|
||||||
FCOMPILERNAME="$(FCOMPILERNAME)"
|
|
||||||
COMPILEROUT="$(COMPILEROUT)"
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ interactionSlipSlip 0.122 0.122 0.625 0.07 0.137 0.122 # Interaction coefficient
|
||||||
|
|
||||||
### Shearband parameters ###
|
### Shearband parameters ###
|
||||||
shearbandresistance 180e6
|
shearbandresistance 180e6
|
||||||
shearbandvelocity 1e-4 # set to zero to turn shear banding of
|
shearbandvelocity 0e-4 # set to zero to turn shear banding of
|
||||||
QedgePerSbSystem 3.7e-19 # Activation energy for shear banding [J]
|
QedgePerSbSystem 3.7e-19 # Activation energy for shear banding [J]
|
||||||
p_shearband 1.0 # p-exponent in glide velocity
|
p_shearband 1.0 # p-exponent in glide velocity
|
||||||
q_shearband 1.0 # q-exponent in glide velocity
|
q_shearband 1.0 # q-exponent in glide velocity
|
||||||
|
|
|
@ -12,4 +12,4 @@ c13 60.41e9
|
||||||
c23 60.41e9
|
c23 60.41e9
|
||||||
c44 28.34e9
|
c44 28.34e9
|
||||||
c55 28.34e9
|
c55 28.34e9
|
||||||
c66 28.34e9
|
c66 28.34e9
|
||||||
|
|
|
@ -18,8 +18,5 @@ tau0_slip 95.e6 97.e6 # per family, optimization long
|
||||||
tausat_slip 222.e6 412.7e6 # per family, optimization long simplex 109
|
tausat_slip 222.e6 412.7e6 # per family, optimization long simplex 109
|
||||||
h0_slipslip 1000.0e6
|
h0_slipslip 1000.0e6
|
||||||
interaction_slipslip 1 1 1.4 1.4 1.4 1.4
|
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
|
|
||||||
w0_slip 2.0
|
w0_slip 2.0
|
||||||
(output) totalshear
|
(output) totalshear
|
||||||
|
|
|
@ -18,8 +18,5 @@ tau0_slip 405.8e6 456.7e6 # per family
|
||||||
tausat_slip 872.9e6 971.2e6 # per family
|
tausat_slip 872.9e6 971.2e6 # per family
|
||||||
h0_slipslip 563.0e9
|
h0_slipslip 563.0e9
|
||||||
interaction_slipslip 1 1 1.4 1.4 1.4 1.4
|
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
|
|
||||||
w0_slip 2.0
|
w0_slip 2.0
|
||||||
(output) totalshear
|
(output) totalshear
|
||||||
|
|
|
@ -35,18 +35,7 @@ tausat_slip 53.00e6 # per family
|
||||||
a_slip 1.0
|
a_slip 1.0
|
||||||
gdot0_twin 0.001
|
gdot0_twin 0.001
|
||||||
n_twin 20
|
n_twin 20
|
||||||
tau0_twin 0 # 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_slipslip 75e6
|
||||||
h0_twinslip 0
|
|
||||||
h0_twintwin 0
|
|
||||||
interaction_slipslip 1 1 1.4 1.4 1.4 1.4
|
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
|
atol_resistance 1
|
||||||
|
|
||||||
|
|
|
@ -29,18 +29,8 @@ a_slip 2.25
|
||||||
gdot0_twin 0.001
|
gdot0_twin 0.001
|
||||||
n_twin 20
|
n_twin 20
|
||||||
tau0_twin 31e6 # per family
|
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_slipslip 75e6
|
||||||
h0_twinslip 0
|
|
||||||
h0_twintwin 0
|
|
||||||
interaction_slipslip 1 1 1.4 1.4 1.4 1.4
|
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
|
atol_resistance 1
|
||||||
|
|
||||||
(stiffness_degradation) damage
|
(stiffness_degradation) damage
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
isobrittle_criticalStrainEnergy 1400000.0
|
isobrittle_criticalStrainEnergy 1400000.0
|
||||||
isobrittle_atol 0.01
|
isobrittle_atol 0.01
|
||||||
isobrittle_N 1.0
|
isobrittle_N 1.0
|
||||||
(output) isoBrittle_DrivingForce
|
(output) isoBrittle_DrivingForce
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[001]
|
[001]
|
||||||
(gauss) phi1 0.000 Phi 0.000 phi2 0.000 scatter 0.000 fraction 1.000
|
(gauss) phi1 0.000 Phi 0.000 phi2 0.000 scatter 0.000 fraction 1.000
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[101]
|
[101]
|
||||||
(gauss) phi1 0.000 Phi 45.000 phi2 90.000 scatter 0.000 fraction 1.000
|
(gauss) phi1 0.000 Phi 45.000 phi2 90.000 scatter 0.000 fraction 1.000
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[111]
|
[111]
|
||||||
(gauss) phi1 0.000 Phi 54.7356 phi2 45.000 scatter 0.000 fraction 1.000
|
(gauss) phi1 0.000 Phi 54.7356 phi2 45.000 scatter 0.000 fraction 1.000
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[123]
|
[123]
|
||||||
(gauss) phi1 209.805 Phi 29.206 phi2 63.435 scatter 0.000 fraction 1.000
|
(gauss) phi1 209.805 Phi 29.206 phi2 63.435 scatter 0.000 fraction 1.000
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[RandomSingleCrystals]
|
[RandomSingleCrystals]
|
||||||
(random) scatter 0.000 fraction 1.000
|
(random) scatter 0.000 fraction 1.000
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<homogenization>
|
<homogenization>
|
||||||
#-------------------#
|
#-------------------#
|
||||||
|
|
||||||
{../../code/config/Homogenization_None_Dummy.config}
|
{../ConfigFiles/Homogenization_None_Dummy.config}
|
||||||
|
|
||||||
#-------------------#
|
#-------------------#
|
||||||
<microstructure>
|
<microstructure>
|
||||||
|
@ -524,12 +524,12 @@ crystallite 1
|
||||||
<crystallite>
|
<crystallite>
|
||||||
#-------------------#
|
#-------------------#
|
||||||
|
|
||||||
{../../code/config/Crystallite_All.config}
|
{../ConfigFiles/Crystallite_All.config}
|
||||||
|
|
||||||
#-------------------#
|
#-------------------#
|
||||||
<phase>
|
<phase>
|
||||||
#-------------------#
|
#-------------------#
|
||||||
|
|
||||||
{../../code/config/Phase_Phenopowerlaw_Aluminum.config}
|
{../ConfigFiles/Phase_Phenopowerlaw_Aluminum.config}
|
||||||
|
|
||||||
{../../code/config/Phase_J2_AluminumIsotropic.config}
|
{../ConfigFiles/Phase_Isotropic_AluminumIsotropic.config}
|
||||||
|
|
|
@ -52,22 +52,8 @@ n_slip 20
|
||||||
tau0_slip 31e6 # per family
|
tau0_slip 31e6 # per family
|
||||||
tausat_slip 63e6 # per family
|
tausat_slip 63e6 # per family
|
||||||
a_slip 2.25
|
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_slipslip 75e6
|
||||||
h0_sliptwin 0
|
|
||||||
h0_twinslip 0
|
|
||||||
h0_twintwin 0
|
|
||||||
interaction_slipslip 1 1 1.4 1.4 1.4 1.4
|
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
|
atol_resistance 1
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ fortCmd = "ifort"
|
||||||
# -integer-size 32 -DINT=4 assume size of integer to be 4 bytes, matches our definition of pInt
|
# -integer-size 32 -DINT=4 assume size of integer to be 4 bytes, matches our definition of pInt
|
||||||
|
|
||||||
compile_fortran = (fortCmd + " -c -fPIC -auto -shared-intel " +
|
compile_fortran = (fortCmd + " -c -fPIC -auto -shared-intel " +
|
||||||
"-I%I -I../lib -free -O1 -fpp -openmp " +
|
"-I%I -free -O1 -fpp -openmp " +
|
||||||
"-ftz -diag-disable 5268 " +
|
"-ftz -diag-disable 5268 " +
|
||||||
"-implicitnone -assume byterecl -stand f08 -standard-semantics " +
|
"-implicitnone -assume byterecl -stand f08 -standard-semantics " +
|
||||||
"-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 " +
|
"-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 " +
|
||||||
|
@ -58,4 +58,4 @@ ask_delete=OFF
|
||||||
|
|
||||||
# Remove the temporary names from the namespace
|
# Remove the temporary names from the namespace
|
||||||
del fortCmd
|
del fortCmd
|
||||||
|
del DAMASKVERSION
|
||||||
|
|
|
@ -31,7 +31,7 @@ fortCmd = "ifort"
|
||||||
# -integer-size 32 -DINT=4 assume size of integer to be 4 bytes, matches our definition of pInt
|
# -integer-size 32 -DINT=4 assume size of integer to be 4 bytes, matches our definition of pInt
|
||||||
|
|
||||||
compile_fortran = (fortCmd + " -c -fPIC -auto -shared-intel " +
|
compile_fortran = (fortCmd + " -c -fPIC -auto -shared-intel " +
|
||||||
"-I%I -I../lib -free -O1 -fpp " +
|
"-I%I -free -O1 -fpp " +
|
||||||
"-ftz -diag-disable 5268 " +
|
"-ftz -diag-disable 5268 " +
|
||||||
"-implicitnone -assume byterecl -stand f08 -standard-semantics " +
|
"-implicitnone -assume byterecl -stand f08 -standard-semantics " +
|
||||||
"-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 " +
|
"-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 " +
|
||||||
|
@ -58,4 +58,4 @@ ask_delete=OFF
|
||||||
|
|
||||||
# Remove the temporary names from the namespace
|
# Remove the temporary names from the namespace
|
||||||
del fortCmd
|
del fortCmd
|
||||||
|
del DAMASKVERSION
|
||||||
|
|
|
@ -442,20 +442,13 @@ FORTNA="$FCOMP $FORT_OPT -fno-alias -O3 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM"
|
||||||
|
|
||||||
# determine DAMASK version
|
# determine DAMASK version
|
||||||
HIT=0
|
if test -n "$DAMASK_USER"; then
|
||||||
for arg in "$@"
|
DAMASKROOT=`dirname $DAMASK_USER`/..
|
||||||
do
|
read DAMASKVERSION < $DAMASKROOT/VERSION
|
||||||
if [ $HIT = 1 ]
|
DAMASKVERSION="'"$DAMASKVERSION"'"
|
||||||
then
|
else
|
||||||
DAMASKPATH=`dirname $arg`
|
DAMASKVERSION="'N/A'"
|
||||||
break
|
fi
|
||||||
elif [ ${arg:0:2} = -u -o ${arg:0:2} = -U ]
|
|
||||||
then
|
|
||||||
HIT=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
read DAMASKVERSION < $DAMASKPATH/../VERSION
|
|
||||||
DAMASKVERSION="'"$DAMASKVERSION"'"
|
|
||||||
|
|
||||||
# DAMASK compiler calls: additional flags are in line 2 OpenMP flags in line 3
|
# DAMASK compiler calls: additional flags are in line 2 OpenMP flags in line 3
|
||||||
DFORTLOW="$FCOMP $FORT_OPT $PROFILE -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTLOW="$FCOMP $FORT_OPT $PROFILE -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
|
|
|
@ -299,6 +299,20 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -299,6 +299,20 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -299,6 +299,20 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -299,6 +299,20 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -299,6 +299,20 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -299,6 +299,20 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -452,10 +452,10 @@ fi
|
||||||
FORT_OPT="-c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr -mp1 -WB -fp-model source"
|
FORT_OPT="-c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr -mp1 -WB -fp-model source"
|
||||||
if test "$MTHREAD" = "OPENMP"
|
if test "$MTHREAD" = "OPENMP"
|
||||||
then
|
then
|
||||||
FORT_OPT=" $FORT_OPT -openmp"
|
FORT_OPT=" $FORT_OPT -qopenmp"
|
||||||
if test "$OMP_COMPAT" = "YES"
|
if test "$OMP_COMPAT" = "YES"
|
||||||
then
|
then
|
||||||
FORT_OPT=" $FORT_OPT -openmp-threadprivate=compat"
|
FORT_OPT=" $FORT_OPT -qopenmp-threadprivate=compat"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# FORT_OPT=" $FORT_OPT -auto "
|
# FORT_OPT=" $FORT_OPT -auto "
|
||||||
|
@ -471,21 +471,14 @@ FORTHIGH="$FCOMP $FORT_OPT $PROFILE -fno-alias -O3 $I8FFLAGS -I$MARC_SOURCE/comm
|
||||||
FORTNA="$FCOMP $FORT_OPT -fno-alias -O3 $I8FFLAGS -I$MARC_SOURCE/common \
|
FORTNA="$FCOMP $FORT_OPT -fno-alias -O3 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM"
|
||||||
|
|
||||||
# determine DAMASK version
|
# determine DAMASK version
|
||||||
HIT=0
|
if test -n "$DAMASK_USER"; then
|
||||||
for arg in "$@"
|
DAMASKROOT=`dirname $DAMASK_USER`/..
|
||||||
do
|
read DAMASKVERSION < $DAMASKROOT/VERSION
|
||||||
if [ $HIT = 1 ]
|
DAMASKVERSION="'"$DAMASKVERSION"'"
|
||||||
then
|
else
|
||||||
DAMASKPATH=`dirname $arg`
|
DAMASKVERSION="'N/A'"
|
||||||
break
|
fi
|
||||||
elif [ ${arg:0:2} = -u -o ${arg:0:2} = -U ]
|
|
||||||
then
|
|
||||||
HIT=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
read DAMASKVERSION < $DAMASKPATH/../VERSION
|
|
||||||
DAMASKVERSION="'"$DAMASKVERSION"'"
|
|
||||||
|
|
||||||
# DAMASK compiler calls: additional flags are in line 2 OpenMP flags in line 3
|
# DAMASK compiler calls: additional flags are in line 2 OpenMP flags in line 3
|
||||||
DFORTLOW="$FCOMP $FORT_OPT $PROFILE -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTLOW="$FCOMP $FORT_OPT $PROFILE -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
|
@ -493,21 +486,21 @@ DFORTLOW="$FCOMP $FORT_OPT $PROFILE -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTLOWMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTLOWMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB -O0 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-openmp -openmp_report2 -openmp-threadprivate=compat\
|
-qopenmp -qopenmp-threadprivate=compat\
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTRAN="$FCOMP $FORT_OPT $PROFILE -O1 $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTRAN="$FCOMP $FORT_OPT $PROFILE -O1 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-enable sc3 -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-enable sc3 -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTRANMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB -O1 $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTRANMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB -O1 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-openmp -openmp_report2 -openmp-threadprivate=compat\
|
-qopenmp -qopenmp-threadprivate=compat\
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTHIGH="$FCOMP $FORT_OPT $PROFILE -fno-alias -O2 $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTHIGH="$FCOMP $FORT_OPT $PROFILE -fno-alias -O2 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-enable sc3 -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-enable sc3 -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTHIGHMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB -fno-alias -O2 $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTHIGHMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB -fno-alias -O2 $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-openmp -openmp_report2 -openmp-threadprivate=compat\
|
-qopenmp -qopenmp-threadprivate=compat\
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
|
|
||||||
if test "$MARCDEBUG" = "ON"
|
if test "$MARCDEBUG" = "ON"
|
||||||
|
@ -527,21 +520,21 @@ then
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTLOWMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTLOWMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-openmp -openmp_report2 -openmp-threadprivate=compat\
|
-qopenmp -qopenmp-threadprivate=compat\
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTRAN="$FCOMP $FORT_OPT $PROFILE $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTRAN="$FCOMP $FORT_OPT $PROFILE $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-enable sc3 -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-enable sc3 -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTRANMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTRANMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-openmp -openmp_report2 -openmp-threadprivate=compat\
|
-qopenmp -qopenmp-threadprivate=compat\
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTHIGH="$FCOMP $FORT_OPT $PROFILE -fno-alias $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTHIGH="$FCOMP $FORT_OPT $PROFILE -fno-alias $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-enable sc3 -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-enable sc3 -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
DFORTHIGHMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB -fno-alias $I8FFLAGS -I$MARC_SOURCE/common \
|
DFORTHIGHMP="$FCOMP -c -assume byterecl -stand f08 -standard-semantics -safe_cray_ptr $PROFILE -zero -mp1 -WB -fno-alias $I8FFLAGS -I$MARC_SOURCE/common \
|
||||||
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
-fpp -ftz -diag-disable 5268 -warn declarations -warn general -warn usage -warn interfaces -warn ignore_loc -warn alignments -DMarc4DAMASK=2016 -DDAMASKVERSION=$DAMASKVERSION \
|
||||||
-openmp -openmp_report2 -openmp-threadprivate=compat\
|
-qopenmp -qopenmp-threadprivate=compat\
|
||||||
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
-I$MARC_SOURCE/${BCS_DIR}/common -I$MARC_SOURCE/mumpssolver/include $I8DEFINES -DLinux -DLINUX -DLinux_intel $FDEFINES $DDM $SOLVERFLAGS"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
@ -726,7 +719,7 @@ else
|
||||||
SFLIB=" "
|
SFLIB=" "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
OPENMP="-openmp"
|
OPENMP="-qopenmp"
|
||||||
|
|
||||||
SYSLIBS=" $OPENMP -lpthread "
|
SYSLIBS=" $OPENMP -lpthread "
|
||||||
|
|
||||||
|
|
|
@ -299,7 +299,23 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -299,7 +299,23 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -299,7 +299,23 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -299,7 +299,23 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -299,7 +299,23 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -299,7 +299,23 @@ fi
|
||||||
|
|
||||||
. "$DIR/getarch"
|
. "$DIR/getarch"
|
||||||
|
|
||||||
|
|
||||||
|
# getting user subroutine file name
|
||||||
|
found=0
|
||||||
|
for i in "$@"; do
|
||||||
|
if test $found = 1; then
|
||||||
|
DAMASK_USER=$i
|
||||||
|
found=0
|
||||||
|
fi
|
||||||
|
case $i in
|
||||||
|
-u* | -U*)
|
||||||
|
found=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# sourcing include_linux64 (needs DAMASK_USER to be set)
|
||||||
. $MARC_INCLUDE
|
. $MARC_INCLUDE
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -25,6 +25,7 @@ do
|
||||||
if [ -z "$VERSION" ]; then
|
if [ -z "$VERSION" ]; then
|
||||||
VERSION=${DEFAULT_VERSION}
|
VERSION=${DEFAULT_VERSION}
|
||||||
fi
|
fi
|
||||||
|
[[ -d "$SCRIPTLOCATION/$VERSION" ]] || echo -e "$VERSION not supported..!\n"
|
||||||
done
|
done
|
||||||
echo "MSC version: $VERSION"
|
echo "MSC version: $VERSION"
|
||||||
|
|
||||||
|
@ -35,6 +36,7 @@ do
|
||||||
if [ -z "$INSTALLDIR" ]; then
|
if [ -z "$INSTALLDIR" ]; then
|
||||||
INSTALLDIR=${DEFAULT_DIR}
|
INSTALLDIR=${DEFAULT_DIR}
|
||||||
fi
|
fi
|
||||||
|
[[ -d "$INSTALLDIR" ]] || echo -e "$INSTALLDIR not found..!\n"
|
||||||
done
|
done
|
||||||
|
|
||||||
INSTALLDIR=${INSTALLDIR%/} # remove trailing slash
|
INSTALLDIR=${INSTALLDIR%/} # remove trailing slash
|
||||||
|
@ -54,7 +56,7 @@ echo "Editor: $EDITOR"
|
||||||
|
|
||||||
# tools
|
# tools
|
||||||
echo ''
|
echo ''
|
||||||
echo 'copying Marc tools...'
|
echo 'adapting Marc tools...'
|
||||||
theDIR=$INSTALLDIR/marc$VERSION/tools
|
theDIR=$INSTALLDIR/marc$VERSION/tools
|
||||||
for filename in 'comp_damask' \
|
for filename in 'comp_damask' \
|
||||||
'comp_damask_l' \
|
'comp_damask_l' \
|
||||||
|
@ -77,7 +79,7 @@ done
|
||||||
|
|
||||||
# Mentat scripts
|
# Mentat scripts
|
||||||
echo ''
|
echo ''
|
||||||
echo 'copying Mentat scripts...'
|
echo 'adapting Mentat scripts...'
|
||||||
theDIR=$INSTALLDIR/mentat$VERSION/bin
|
theDIR=$INSTALLDIR/mentat$VERSION/bin
|
||||||
for filename in 'edit_window' \
|
for filename in 'edit_window' \
|
||||||
'submit4' \
|
'submit4' \
|
||||||
|
@ -101,7 +103,7 @@ done
|
||||||
|
|
||||||
# Mentat scripts
|
# Mentat scripts
|
||||||
echo ''
|
echo ''
|
||||||
echo 'copying Mentat menus...'
|
echo 'adapting Mentat menus...'
|
||||||
theDIR=$INSTALLDIR/mentat$VERSION/menus
|
theDIR=$INSTALLDIR/mentat$VERSION/menus
|
||||||
for filename in 'job_run.ms'; do
|
for filename in 'job_run.ms'; do
|
||||||
cp $SCRIPTLOCATION/$VERSION/Mentat_menus/$filename $theDIR
|
cp $SCRIPTLOCATION/$VERSION/Mentat_menus/$filename $theDIR
|
||||||
|
@ -112,16 +114,20 @@ done
|
||||||
|
|
||||||
# compile menus
|
# compile menus
|
||||||
echo ''
|
echo ''
|
||||||
echo 'compiling menus...'
|
echo 'compiling Mentat menu binaries...'
|
||||||
$INSTALLDIR/mentat$VERSION/bin/mentat -compile $INSTALLDIR/mentat$VERSION/menus/linux64/main.msb
|
$(which xvfb-run 2>/dev/null) $INSTALLDIR/mentat$VERSION/bin/mentat -compile $INSTALLDIR/mentat$VERSION/menus/linux64/main.msb
|
||||||
|
[[ $? != 0 ]] && echo '...failed. Try installing xvfb-run on your system.'
|
||||||
|
|
||||||
# setting access rights
|
# setting access rights
|
||||||
echo ''
|
echo ''
|
||||||
echo 'setting file access rights...'
|
echo 'setting file access rights...'
|
||||||
chmod 755 $INSTALLDIR/marc$VERSION/tools/run_damask*
|
for filename in marc$VERSION/tools/run_damask* \
|
||||||
chmod 755 $INSTALLDIR/marc$VERSION/tools/comp_damask*
|
marc$VERSION/tools/comp_damask* \
|
||||||
chmod 755 $INSTALLDIR/mentat$VERSION/bin/submit{4..9}
|
mentat$VERSION/bin/submit{4..9} \
|
||||||
chmod 755 $INSTALLDIR/mentat$VERSION/bin/kill{4..9}
|
mentat$VERSION/bin/kill{4..9} \
|
||||||
|
|
||||||
|
chmod 755 $INSTALLDIR/${filename}
|
||||||
|
done
|
||||||
|
|
||||||
#creating symlinks for run_damask_scripts in /usr/local/bin
|
#creating symlinks for run_damask_scripts in /usr/local/bin
|
||||||
|
|
||||||
|
@ -152,5 +158,15 @@ if [ -d "$BIN_DIR" ]; then
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# cloning user subroutine
|
||||||
|
echo ''
|
||||||
|
echo 'cloning $VERSION HYPELA2 user subroutine...'
|
||||||
|
ln -s DAMASK_marc.f90 ${DAMASK_ROOT}/src/DAMASK_marc${VERSION}.f90
|
||||||
|
|
||||||
|
# precompiling user subroutine
|
||||||
|
echo ''
|
||||||
|
echo 'precompiling $VERSION HYPELA2 user subroutine...'
|
||||||
|
echo 'not yet implemented..!'
|
||||||
|
|
||||||
echo ''
|
echo ''
|
||||||
echo 'done.'
|
echo 'done.'
|
||||||
|
|
|
@ -13,5 +13,3 @@ patch -p1 < installation/patch/nameOfPatch
|
||||||
|
|
||||||
* **fwbw_derivative** switches the default spatial derivative from continuous to forward/backward difference.
|
* **fwbw_derivative** switches the default spatial derivative from continuous to forward/backward difference.
|
||||||
This generally reduces spurious oscillations in the result as the spatial accuracy of the derivative is then compatible with the underlying solution grid.
|
This generally reduces spurious oscillations in the result as the spatial accuracy of the derivative is then compatible with the underlying solution grid.
|
||||||
* **petsc3.7** adapts to API changes introduced between PETSc 3.6.x and 3.7.x for setting PETSc options.
|
|
||||||
Use this patch if your system runs PETSc 3.7.x.
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
diff --git a/code/spectral_utilities.f90 b/code/spectral_utilities.f90
|
|
||||||
index 34eb0ea..a33c7a9 100644
|
|
||||||
--- a/code/spectral_utilities.f90
|
|
||||||
+++ b/code/spectral_utilities.f90
|
|
||||||
@@ -227,12 +227,13 @@ subroutine utilities_init()
|
|
||||||
trim(PETScDebug), &
|
|
||||||
' add more using the PETSc_Options keyword in numerics.config '; flush(6)
|
|
||||||
|
|
||||||
- call PetscOptionsClear(ierr); CHKERRQ(ierr)
|
|
||||||
- if(debugPETSc) call PetscOptionsInsertString(trim(PETSCDEBUG),ierr)
|
|
||||||
+ call PetscOptionsClear(PETSC_NULL_OBJECT,ierr)
|
|
||||||
CHKERRQ(ierr)
|
|
||||||
- call PetscOptionsInsertString(trim(petsc_defaultOptions),ierr)
|
|
||||||
+ if(debugPETSc) call PetscOptionsInsertString(PETSC_NULL_OBJECT,trim(PETSCDEBUG),ierr)
|
|
||||||
CHKERRQ(ierr)
|
|
||||||
- call PetscOptionsInsertString(trim(petsc_options),ierr)
|
|
||||||
+ call PetscOptionsInsertString(PETSC_NULL_OBJECT,trim(petsc_defaultOptions),ierr)
|
|
||||||
+ CHKERRQ(ierr)
|
|
||||||
+ call PetscOptionsInsertString(PETSC_NULL_OBJECT,trim(petsc_options),ierr)
|
|
||||||
CHKERRQ(ierr)
|
|
||||||
|
|
||||||
grid1Red = grid(1)/2_pInt + 1_pInt
|
|
|
@ -1,65 +0,0 @@
|
||||||
#!/usr/bin/env python2.7
|
|
||||||
# -*- coding: UTF-8 no BOM -*-
|
|
||||||
|
|
||||||
import os,sys
|
|
||||||
import damask
|
|
||||||
|
|
||||||
bin_link = { \
|
|
||||||
'.' : [
|
|
||||||
'DAMASK_spectral.exe',
|
|
||||||
'DAMASK_FEM.exe'
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
MarcReleases =[ \
|
|
||||||
'2014',
|
|
||||||
'2014.2',
|
|
||||||
'2015',
|
|
||||||
'2016'
|
|
||||||
]
|
|
||||||
|
|
||||||
damaskEnv = damask.Environment()
|
|
||||||
baseDir = damaskEnv.relPath('code/')
|
|
||||||
binDir = damaskEnv.options['DAMASK_BIN']
|
|
||||||
|
|
||||||
if not os.path.isdir(binDir):
|
|
||||||
os.mkdir(binDir)
|
|
||||||
|
|
||||||
sys.stdout.write('\nsymbolic linking...\n')
|
|
||||||
|
|
||||||
for subDir in bin_link:
|
|
||||||
theDir = os.path.abspath(os.path.join(baseDir,subDir))
|
|
||||||
sys.stdout.write('\n'+binDir+' ->\n'+theDir+damask.util.deemph(' ...')+'\n')
|
|
||||||
|
|
||||||
for theFile in bin_link[subDir]:
|
|
||||||
theName,theExt = os.path.splitext(theFile)
|
|
||||||
src = os.path.abspath(os.path.join(theDir,theFile))
|
|
||||||
|
|
||||||
if os.path.exists(src):
|
|
||||||
sym_link = os.path.abspath(os.path.join(binDir,subDir if theFile == '' else theName))
|
|
||||||
|
|
||||||
if os.path.lexists(sym_link):
|
|
||||||
os.remove(sym_link)
|
|
||||||
output = theName+damask.util.deemph(theExt)
|
|
||||||
else:
|
|
||||||
output = damask.util.emph(theName)+damask.util.deemph(theExt)
|
|
||||||
|
|
||||||
sys.stdout.write(damask.util.deemph('... ')+output+'\n')
|
|
||||||
os.symlink(src,sym_link)
|
|
||||||
|
|
||||||
|
|
||||||
sys.stdout.write('\nMSC.Marc versioning...\n\n')
|
|
||||||
theMaster = 'DAMASK_marc.f90'
|
|
||||||
|
|
||||||
for version in MarcReleases:
|
|
||||||
src = os.path.abspath(os.path.join(baseDir,theMaster))
|
|
||||||
if os.path.exists(src):
|
|
||||||
sym_link = os.path.abspath(os.path.join(baseDir,'DAMASK_marc{}.f90'.format(version)))
|
|
||||||
if os.path.lexists(sym_link):
|
|
||||||
os.remove(sym_link)
|
|
||||||
output = version
|
|
||||||
else:
|
|
||||||
output = damask.util.emph(version)
|
|
||||||
|
|
||||||
sys.stdout.write(' '+output+'\n')
|
|
||||||
os.symlink(theMaster,sym_link)
|
|
|
@ -1,7 +1,13 @@
|
||||||
# -*- coding: UTF-8 no BOM -*-
|
# -*- coding: UTF-8 no BOM -*-
|
||||||
|
|
||||||
"""Main aggregator"""
|
"""Main aggregator"""
|
||||||
import os
|
import os,sys,time
|
||||||
|
|
||||||
|
h5py_flag = os.path.join(os.path.dirname(__file__),'../../.noH5py')
|
||||||
|
h5py_grace = 7200 # only complain once every 7200 sec (2 hours)
|
||||||
|
h5py_msg = "h5py module not found."
|
||||||
|
|
||||||
|
now = time.time()
|
||||||
|
|
||||||
with open(os.path.join(os.path.dirname(__file__),'../../VERSION')) as f:
|
with open(os.path.join(os.path.dirname(__file__),'../../VERSION')) as f:
|
||||||
version = f.readline()[:-1]
|
version = f.readline()[:-1]
|
||||||
|
@ -9,9 +15,18 @@ with open(os.path.join(os.path.dirname(__file__),'../../VERSION')) as f:
|
||||||
from .environment import Environment # noqa
|
from .environment import Environment # noqa
|
||||||
from .asciitable import ASCIItable # noqa
|
from .asciitable import ASCIItable # noqa
|
||||||
try:
|
try:
|
||||||
from .h5table import H5Table # noqa
|
from .h5table import H5Table # noqa
|
||||||
|
if os.path.exists(h5py_flag): os.remove(h5py_flag) # delete flagging file on success
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print("h5py module not found")
|
if os.path.exists(h5py_flag):
|
||||||
|
if now - os.path.getmtime(h5py_flag) > h5py_grace: # complain (again) every so-and-so often
|
||||||
|
sys.stderr.write(h5py_msg+'\n')
|
||||||
|
with open(h5py_flag, 'a'):
|
||||||
|
os.utime(h5py_flag,(now,now)) # update flag modification time to "now"
|
||||||
|
else:
|
||||||
|
open(h5py_flag, 'a').close() # create flagging file
|
||||||
|
sys.stderr.write(h5py_msg+'\n') # complain for the first time
|
||||||
|
|
||||||
from .config import Material # noqa
|
from .config import Material # noqa
|
||||||
from .colormaps import Colormap, Color # noqa
|
from .colormaps import Colormap, Color # noqa
|
||||||
from .orientation import Quaternion, Rodrigues, Symmetry, Orientation # noqa
|
from .orientation import Quaternion, Rodrigues, Symmetry, Orientation # noqa
|
||||||
|
|
|
@ -547,7 +547,10 @@ class ASCIItable():
|
||||||
except:
|
except:
|
||||||
output = [fmt % row] if fmt else [repr(row)]
|
output = [fmt % row] if fmt else [repr(row)]
|
||||||
|
|
||||||
self.__IO__['out'].write(delimiter.join(output) + '\n')
|
try:
|
||||||
|
self.__IO__['out'].write(delimiter.join(output) + '\n')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
def data_append(self,
|
def data_append(self,
|
||||||
|
|
|
@ -33,7 +33,7 @@ class Environment():
|
||||||
'explicit':5}
|
'explicit':5}
|
||||||
if Nneeded == -1: Nneeded = licensesNeeded[software]
|
if Nneeded == -1: Nneeded = licensesNeeded[software]
|
||||||
try:
|
try:
|
||||||
cmd = """ ssh mulicense2 "/Stat_Flexlm | grep 'Users of %s: ' | cut -d' ' -f7,13" """%software
|
cmd = """ ssh mulicense2 "/lm-status | grep 'Users of %s: ' | cut -d' ' -f7,13" """%software
|
||||||
process = subprocess.Popen(shlex.split(cmd),stdout = subprocess.PIPE,stderr = subprocess.PIPE)
|
process = subprocess.Popen(shlex.split(cmd),stdout = subprocess.PIPE,stderr = subprocess.PIPE)
|
||||||
licenses = list(map(int, process.stdout.readline().split()))
|
licenses = list(map(int, process.stdout.readline().split()))
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
from .solver import Solver
|
from .solver import Solver
|
||||||
import damask
|
import damask
|
||||||
|
import subprocess,re
|
||||||
|
|
||||||
class Abaqus(Solver):
|
class Abaqus(Solver):
|
||||||
|
|
||||||
|
@ -20,8 +21,6 @@ class Abaqus(Solver):
|
||||||
raise Exception('unknown Abaqus solver %'%solver)
|
raise Exception('unknown Abaqus solver %'%solver)
|
||||||
|
|
||||||
def return_run_command(self,model):
|
def return_run_command(self,model):
|
||||||
import subprocess
|
|
||||||
import re
|
|
||||||
env=damask.Environment()
|
env=damask.Environment()
|
||||||
shortVersion = re.sub('[\.,-]', '',self.version)
|
shortVersion = re.sub('[\.,-]', '',self.version)
|
||||||
try:
|
try:
|
||||||
|
@ -33,4 +32,4 @@ class Abaqus(Solver):
|
||||||
detectedVersion = process.stdout.readlines()[1].split()[1]
|
detectedVersion = process.stdout.readlines()[1].split()[1]
|
||||||
if self.version != detectedVersion:
|
if self.version != detectedVersion:
|
||||||
raise Exception('found Abaqus version %s, but requested %s'%(detectedVersion,self.version))
|
raise Exception('found Abaqus version %s, but requested %s'%(detectedVersion,self.version))
|
||||||
return '%s -job %s -user %s/code/DAMASK_abaqus_%s interactive'%(cmd,model,env.rootDir(),self.solver)
|
return '%s -job %s -user %s/src/DAMASK_abaqus_%s interactive'%(cmd,model,env.rootDir(),self.solver)
|
||||||
|
|
|
@ -13,9 +13,6 @@ class Marc(Solver):
|
||||||
'2015': ['linux64',''],
|
'2015': ['linux64',''],
|
||||||
'2014.2':['linux64',''],
|
'2014.2':['linux64',''],
|
||||||
'2014' :['linux64',''],
|
'2014' :['linux64',''],
|
||||||
'2013.1':['linux64',''],
|
|
||||||
'2013': ['linux64',''],
|
|
||||||
'2012': ['linux64',''],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,13 +83,13 @@ class Marc(Solver):
|
||||||
|
|
||||||
damaskEnv = damask.environment.Environment()
|
damaskEnv = damask.environment.Environment()
|
||||||
|
|
||||||
user = os.path.join(damaskEnv.relPath('code/'),'DAMASK_marc') # might be updated if special version (symlink) is found
|
user = os.path.join(damaskEnv.relPath('src/'),'DAMASK_marc') # might be updated if special version (symlink) is found
|
||||||
if compile:
|
if compile:
|
||||||
if os.path.isfile(os.path.join(damaskEnv.relPath('code/'),'DAMASK_marc%s.f90'%release)):
|
if os.path.isfile(os.path.join(damaskEnv.relPath('src/'),'DAMASK_marc%s.f90'%release)):
|
||||||
user = os.path.join(damaskEnv.relPath('code/'),'DAMASK_marc%s'%release)
|
user = os.path.join(damaskEnv.relPath('src/'),'DAMASK_marc%s'%release)
|
||||||
else:
|
else:
|
||||||
if os.path.isfile(os.path.join(damaskEnv.relPath('code/'),'DAMASK_marc%s.marc'%release)):
|
if os.path.isfile(os.path.join(damaskEnv.relPath('src/'),'DAMASK_marc%s.marc'%release)):
|
||||||
user = os.path.join(damaskEnv.relPath('code/'),'DAMASK_marc%s'%release)
|
user = os.path.join(damaskEnv.relPath('src/'),'DAMASK_marc%s'%release)
|
||||||
|
|
||||||
# Define options [see Marc Installation and Operation Guide, pp 23]
|
# Define options [see Marc Installation and Operation Guide, pp 23]
|
||||||
script = 'run_damask%s'%({False:'',True:'_'}[optimization!='' or openMP])
|
script = 'run_damask%s'%({False:'',True:'_'}[optimization!='' or openMP])
|
||||||
|
|
|
@ -74,6 +74,10 @@ class Test():
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def variantName(self,variant):
|
||||||
|
"""Generate name of (numerical) variant."""
|
||||||
|
return str(variant)
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
"""Run all variants and report first failure."""
|
"""Run all variants and report first failure."""
|
||||||
if not self.options.keep:
|
if not self.options.keep:
|
||||||
|
@ -81,7 +85,8 @@ class Test():
|
||||||
self.clean()
|
self.clean()
|
||||||
self.prepareAll()
|
self.prepareAll()
|
||||||
|
|
||||||
for variant,name in enumerate(self.variants):
|
for variant,object in enumerate(self.variants):
|
||||||
|
name = self.variantName(variant)
|
||||||
if self.options.show:
|
if self.options.show:
|
||||||
logging.critical('{}: {}'.format(variant+1,name))
|
logging.critical('{}: {}'.format(variant+1,name))
|
||||||
elif self.options.select is not None \
|
elif self.options.select is not None \
|
||||||
|
@ -203,58 +208,63 @@ class Test():
|
||||||
shutil.copy2(source,target)
|
shutil.copy2(source,target)
|
||||||
except:
|
except:
|
||||||
logging.critical('error copying {} to {}'.format(source,target))
|
logging.critical('error copying {} to {}'.format(source,target))
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
def copy_Reference2Current(self,sourcefiles=[],targetfiles=[]):
|
def copy_Reference2Current(self,sourcefiles=[],targetfiles=[]):
|
||||||
|
|
||||||
if len(targetfiles) == 0: targetfiles = sourcefiles
|
if len(targetfiles) == 0: targetfiles = sourcefiles
|
||||||
for i,file in enumerate(sourcefiles):
|
for i,f in enumerate(sourcefiles):
|
||||||
try:
|
try:
|
||||||
shutil.copy2(self.fileInReference(file),self.fileInCurrent(targetfiles[i]))
|
shutil.copy2(self.fileInReference(f),self.fileInCurrent(targetfiles[i]))
|
||||||
except:
|
except:
|
||||||
logging.critical('Reference2Current: Unable to copy file "{}"'.format(file))
|
logging.critical('Reference2Current: Unable to copy file "{}"'.format(f))
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
def copy_Base2Current(self,sourceDir,sourcefiles=[],targetfiles=[]):
|
def copy_Base2Current(self,sourceDir,sourcefiles=[],targetfiles=[]):
|
||||||
|
|
||||||
source=os.path.normpath(os.path.join(self.dirBase,'../../..',sourceDir))
|
source=os.path.normpath(os.path.join(self.dirBase,'../../..',sourceDir))
|
||||||
if len(targetfiles) == 0: targetfiles = sourcefiles
|
if len(targetfiles) == 0: targetfiles = sourcefiles
|
||||||
for i,file in enumerate(sourcefiles):
|
for i,f in enumerate(sourcefiles):
|
||||||
try:
|
try:
|
||||||
shutil.copy2(os.path.join(source,file),self.fileInCurrent(targetfiles[i]))
|
shutil.copy2(os.path.join(source,f),self.fileInCurrent(targetfiles[i]))
|
||||||
except:
|
except:
|
||||||
logging.error(os.path.join(source,file))
|
logging.error(os.path.join(source,f))
|
||||||
logging.critical('Base2Current: Unable to copy file "{}"'.format(file))
|
logging.critical('Base2Current: Unable to copy file "{}"'.format(f))
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
def copy_Current2Reference(self,sourcefiles=[],targetfiles=[]):
|
def copy_Current2Reference(self,sourcefiles=[],targetfiles=[]):
|
||||||
|
|
||||||
if len(targetfiles) == 0: targetfiles = sourcefiles
|
if len(targetfiles) == 0: targetfiles = sourcefiles
|
||||||
for i,file in enumerate(sourcefiles):
|
for i,f in enumerate(sourcefiles):
|
||||||
try:
|
try:
|
||||||
shutil.copy2(self.fileInCurrent(file),self.fileInReference(targetfiles[i]))
|
shutil.copy2(self.fileInCurrent(f),self.fileInReference(targetfiles[i]))
|
||||||
except:
|
except:
|
||||||
logging.critical('Current2Reference: Unable to copy file "{}"'.format(file))
|
logging.critical('Current2Reference: Unable to copy file "{}"'.format(f))
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
def copy_Proof2Current(self,sourcefiles=[],targetfiles=[]):
|
def copy_Proof2Current(self,sourcefiles=[],targetfiles=[]):
|
||||||
|
|
||||||
if len(targetfiles) == 0: targetfiles = sourcefiles
|
if len(targetfiles) == 0: targetfiles = sourcefiles
|
||||||
for i,file in enumerate(sourcefiles):
|
for i,f in enumerate(sourcefiles):
|
||||||
try:
|
try:
|
||||||
shutil.copy2(self.fileInProof(file),self.fileInCurrent(targetfiles[i]))
|
shutil.copy2(self.fileInProof(f),self.fileInCurrent(targetfiles[i]))
|
||||||
except:
|
except:
|
||||||
logging.critical('Proof2Current: Unable to copy file "{}"'.format(file))
|
logging.critical('Proof2Current: Unable to copy file "{}"'.format(f))
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
def copy_Current2Current(self,sourcefiles=[],targetfiles=[]):
|
def copy_Current2Current(self,sourcefiles=[],targetfiles=[]):
|
||||||
|
|
||||||
for i,file in enumerate(sourcefiles):
|
for i,f in enumerate(sourcefiles):
|
||||||
try:
|
try:
|
||||||
shutil.copy2(self.fileInReference(file),self.fileInCurrent(targetfiles[i]))
|
shutil.copy2(self.fileInReference(f),self.fileInCurrent(targetfiles[i]))
|
||||||
except:
|
except:
|
||||||
logging.critical('Current2Current: Unable to copy file "{}"'.format(file))
|
logging.critical('Current2Current: Unable to copy file "{}"'.format(f))
|
||||||
|
raise
|
||||||
|
|
||||||
def execute_inCurrentDir(self,cmd,streamIn=None):
|
def execute_inCurrentDir(self,cmd,streamIn=None):
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ def croak(what, newline = True):
|
||||||
def report(who = None,
|
def report(who = None,
|
||||||
what = None):
|
what = None):
|
||||||
"""Reports script and file name"""
|
"""Reports script and file name"""
|
||||||
croak( (emph(who)+': ' if who else '') + (what if what else '') )
|
croak( (emph(who)+': ' if who is not None else '') + (what if what is not None else '') )
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
|
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 404 KiB After Width: | Height: | Size: 404 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
@ -128,7 +128,8 @@ for name in filenames:
|
||||||
outname = outname,
|
outname = outname,
|
||||||
buffered = False)
|
buffered = False)
|
||||||
except: continue
|
except: continue
|
||||||
damask.util.report(scriptName,'{}{}'.format(name,' --> {}'.format(outname) if outname else ''))
|
damask.util.report(scriptName,'{}{}'.format(name if name else '',
|
||||||
|
' --> {}'.format(outname) if outname else ''))
|
||||||
|
|
||||||
# ------------------------------------------ read header ------------------------------------------
|
# ------------------------------------------ read header ------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -89,15 +89,13 @@ if options.weight is not None: labels += [options.weight]
|
||||||
if filenames == []: filenames = [None]
|
if filenames == []: filenames = [None]
|
||||||
|
|
||||||
for name in filenames:
|
for name in filenames:
|
||||||
try:
|
try: table = damask.ASCIItable(name = name,
|
||||||
table = damask.ASCIItable(name = name,
|
outname = os.path.join(os.path.dirname(name),
|
||||||
outname = os.path.join(os.path.dirname(name),
|
'binned-{}-{}_'.format(*options.data) +
|
||||||
'binned-{}-{}_'.format(*options.data)+ \
|
('weighted-{}_'.format(options.weight) if options.weight else '') +
|
||||||
('weighted-{}_'.format(options.weight) if options.weight else '') + \
|
os.path.basename(name)) if name else name,
|
||||||
os.path.basename(name)) if name else name,
|
buffered = False)
|
||||||
buffered = False)
|
except: continue
|
||||||
except:
|
|
||||||
continue
|
|
||||||
damask.util.report(scriptName,name)
|
damask.util.report(scriptName,name)
|
||||||
|
|
||||||
# ------------------------------------------ read header ------------------------------------------
|
# ------------------------------------------ read header ------------------------------------------
|
||||||
|
|
|
@ -851,7 +851,7 @@ for opt in ['nodalScalar','elemScalar','elemTensor','homogenizationResult','crys
|
||||||
|
|
||||||
if options.info:
|
if options.info:
|
||||||
if options.filetype == 'marc':
|
if options.filetype == 'marc':
|
||||||
print('\n\nMentat release {}'.format(damask.solver.Marc().version('../../')))
|
print('\n\nMentat release {}'.format(damask.solver.Marc().version()))
|
||||||
if options.filetype == 'spectral':
|
if options.filetype == 'spectral':
|
||||||
print('\n\n{}'.format(p))
|
print('\n\n{}'.format(p))
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,6 @@ import damask
|
||||||
scriptName = os.path.splitext(os.path.basename(__file__))[0]
|
scriptName = os.path.splitext(os.path.basename(__file__))[0]
|
||||||
scriptID = ' '.join([scriptName,damask.version])
|
scriptID = ' '.join([scriptName,damask.version])
|
||||||
|
|
||||||
oversampling = 2.
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------
|
||||||
# MAIN
|
# MAIN
|
||||||
#--------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------
|
||||||
|
@ -33,40 +31,49 @@ Depending on the sign of the dimension parameters, these objects can be boxes, c
|
||||||
|
|
||||||
""", version = scriptID)
|
""", version = scriptID)
|
||||||
|
|
||||||
parser.add_option('-c', '--center', dest='center', type='int', nargs = 3, metavar=' '.join(['int']*3),
|
parser.add_option('-c', '--center', dest='center', type='float', nargs = 3, metavar=' '.join(['float']*3),
|
||||||
help='a,b,c origin of primitive %default')
|
help='a,b,c origin of primitive %default')
|
||||||
parser.add_option('-d', '--dimension', dest='dimension', type='int', nargs = 3, metavar=' '.join(['int']*3),
|
parser.add_option('-d', '--dimension', dest='dimension', type='float', nargs = 3, metavar=' '.join(['float']*3),
|
||||||
help='a,b,c extension of hexahedral box; negative values are diameters')
|
help='a,b,c extension of hexahedral box; negative values are diameters')
|
||||||
|
parser.add_option('-e', '--exponent', dest='exponent', type='float', nargs = 3, metavar=' '.join(['float']*3),
|
||||||
|
help='i,j,k exponents for axes - 2 gives a sphere (x^2 + y^2 + z^2 < 1), 1 makes \
|
||||||
|
octahedron (|x| + |y| + |z| < 1). Large values produce boxes, 0 - 1 is concave. ')
|
||||||
parser.add_option('-f', '--fill', dest='fill', type='int', metavar = 'int',
|
parser.add_option('-f', '--fill', dest='fill', type='int', metavar = 'int',
|
||||||
help='grain index to fill primitive. "0" selects maximum microstructure index + 1 [%default]')
|
help='grain index to fill primitive. "0" selects maximum microstructure index + 1 [%default]')
|
||||||
parser.add_option('-q', '--quaternion', dest='quaternion', type='float', nargs = 4, metavar=' '.join(['float']*4),
|
parser.add_option('-q', '--quaternion', dest='quaternion', type='float', nargs = 4, metavar=' '.join(['float']*4),
|
||||||
help = 'rotation of primitive as quaternion')
|
help = 'rotation of primitive as quaternion')
|
||||||
parser.add_option('-a', '--angleaxis', dest='angleaxis', nargs = 4, metavar=' '.join(['float']*4),
|
parser.add_option('-a', '--angleaxis', dest='angleaxis', nargs = 4, metavar=' '.join(['float']*4),
|
||||||
help = 'rotation of primitive as angle and axis')
|
help = 'angle,x,y,z clockwise rotation of primitive about axis by angle')
|
||||||
parser.add_option( '--degrees', dest='degrees', action='store_true',
|
parser.add_option( '--degrees', dest='degrees', action='store_true',
|
||||||
help = 'angle is given in degrees [%default]')
|
help = 'angle is given in degrees [%default]')
|
||||||
|
parser.add_option( '--nonperiodic', dest='periodic', action='store_false',
|
||||||
parser.set_defaults(center = [0,0,0],
|
help = 'wrap around edges [%default]')
|
||||||
|
parser.add_option( '--voxelspace', dest='voxelspace', action='store_true',
|
||||||
|
help = '-c and -d are given in (0 to grid) coordinates instead of (origin to origin+size) \
|
||||||
|
coordinates [%default]')
|
||||||
|
parser.set_defaults(center = (.0,.0,.0),
|
||||||
fill = 0,
|
fill = 0,
|
||||||
quaternion = [],
|
|
||||||
angleaxis = [],
|
|
||||||
degrees = False,
|
degrees = False,
|
||||||
|
exponent = (1e10,1e10,1e10), # box shape by default
|
||||||
|
periodic = True,
|
||||||
|
voxelspace = False
|
||||||
)
|
)
|
||||||
|
|
||||||
(options, filenames) = parser.parse_args()
|
(options, filenames) = parser.parse_args()
|
||||||
|
if options.dimension is None:
|
||||||
if options.angleaxis != []:
|
parser.error('no dimension specified.')
|
||||||
|
if options.angleaxis is not None:
|
||||||
options.angleaxis = map(float,options.angleaxis)
|
options.angleaxis = map(float,options.angleaxis)
|
||||||
rotation = damask.Quaternion().fromAngleAxis(np.radians(options.angleaxis[0]) if options.degrees else options.angleaxis[0],
|
rotation = damask.Quaternion().fromAngleAxis(np.radians(options.angleaxis[0]) if options.degrees else options.angleaxis[0],
|
||||||
options.angleaxis[1:4]).conjugated()
|
options.angleaxis[1:4])
|
||||||
elif options.quaternion != []:
|
elif options.quaternion is not None:
|
||||||
options.quaternion = map(float,options.quaternion)
|
options.quaternion = map(float,options.quaternion)
|
||||||
rotation = damask.Quaternion(options.quaternion).conjugated()
|
rotation = damask.Quaternion(options.quaternion)
|
||||||
else:
|
else:
|
||||||
rotation = damask.Quaternion().conjugated()
|
rotation = damask.Quaternion()
|
||||||
|
|
||||||
options.center = np.array(options.center)
|
options.center = np.array(options.center)
|
||||||
invRotation = rotation.conjugated() # rotation of gridpos into primitive coordinate system
|
options.dimension = np.array(options.dimension)
|
||||||
|
|
||||||
# --- loop over input files -------------------------------------------------------------------------
|
# --- loop over input files -------------------------------------------------------------------------
|
||||||
if filenames == []: filenames = [None]
|
if filenames == []: filenames = [None]
|
||||||
|
@ -108,33 +115,92 @@ for name in filenames:
|
||||||
'microstructures': 0,
|
'microstructures': 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if options.fill == 0:
|
if options.fill == 0:
|
||||||
options.fill = microstructure.max()+1
|
options.fill = microstructure.max()+1
|
||||||
|
|
||||||
|
# If we have a negative dimension, make it an ellipsoid for backwards compatibility
|
||||||
|
options.exponent = np.where(np.array(options.dimension) > 0, options.exponent, 2)
|
||||||
microstructure = microstructure.reshape(info['grid'],order='F')
|
microstructure = microstructure.reshape(info['grid'],order='F')
|
||||||
|
|
||||||
|
# coordinates given in real space (default) vs voxel space
|
||||||
|
if not options.voxelspace:
|
||||||
|
options.center += info['origin']
|
||||||
|
options.center *= np.array(info['grid']) / np.array(info['size'])
|
||||||
|
options.dimension *= np.array(info['grid']) / np.array(info['size'])
|
||||||
|
|
||||||
if options.dimension is not None:
|
size = microstructure.shape
|
||||||
mask = (np.array(options.dimension) < 0).astype(float) # zero where positive dimension, otherwise one
|
|
||||||
dim = abs(np.array(options.dimension)) # dimensions of primitive body
|
|
||||||
pos = np.zeros(3,dtype='float')
|
|
||||||
# hiresPrimitive = np.zeros((2*dim[0],2*dim[1],2*dim[2],3)) # primitive discretized at twice the grid resolution
|
|
||||||
for i,pos[0] in enumerate(np.arange(-dim[0]/oversampling,(dim[0]+1)/oversampling,1./oversampling)):
|
|
||||||
for j,pos[1] in enumerate(np.arange(-dim[1]/oversampling,(dim[1]+1)/oversampling,1./oversampling)):
|
|
||||||
for k,pos[2] in enumerate(np.arange(-dim[2]/oversampling,(dim[2]+1)/oversampling,1./oversampling)):
|
|
||||||
gridpos = np.floor(rotation*pos) # rotate and lock into spacial grid
|
|
||||||
primPos = invRotation*gridpos # rotate back to primitive coordinate system
|
|
||||||
if np.dot(mask*primPos/dim,mask*primPos/dim) <= 0.25 and \
|
|
||||||
np.all(abs((1.-mask)*primPos/dim) <= 0.5): # inside ellipsoid and inside box
|
|
||||||
microstructure[int((gridpos[0]+options.center[0])%info['grid'][0]),
|
|
||||||
int((gridpos[1]+options.center[1])%info['grid'][1]),
|
|
||||||
int((gridpos[2]+options.center[2])%info['grid'][2])] = options.fill # assign microstructure index
|
|
||||||
|
|
||||||
|
# change to coordinate space where the primitive is the unit sphere/cube/etc
|
||||||
|
if options.periodic: # use padding to achieve periodicity
|
||||||
|
(X, Y, Z) = np.meshgrid(np.arange(-size[0]/2, (3*size[0])/2, dtype=np.float32), # 50% padding on each side
|
||||||
|
np.arange(-size[1]/2, (3*size[1])/2, dtype=np.float32),
|
||||||
|
np.arange(-size[2]/2, (3*size[2])/2, dtype=np.float32),
|
||||||
|
indexing='ij')
|
||||||
|
# Padding handling
|
||||||
|
X = np.roll(np.roll(np.roll(X,
|
||||||
|
-size[0]/2, axis=0),
|
||||||
|
-size[1]/2, axis=1),
|
||||||
|
-size[2]/2, axis=2)
|
||||||
|
Y = np.roll(np.roll(np.roll(Y,
|
||||||
|
-size[0]/2, axis=0),
|
||||||
|
-size[1]/2, axis=1),
|
||||||
|
-size[2]/2, axis=2)
|
||||||
|
Z = np.roll(np.roll(np.roll(Z,
|
||||||
|
-size[0]/2, axis=0),
|
||||||
|
-size[1]/2, axis=1),
|
||||||
|
-size[2]/2, axis=2)
|
||||||
|
else: # nonperiodic, much lighter on resources
|
||||||
|
# change to coordinate space where the primitive is the unit sphere/cube/etc
|
||||||
|
(X, Y, Z) = np.meshgrid(np.arange(0, size[0], dtype=np.float32),
|
||||||
|
np.arange(0, size[1], dtype=np.float32),
|
||||||
|
np.arange(0, size[2], dtype=np.float32),
|
||||||
|
indexing='ij')
|
||||||
|
|
||||||
|
# first by translating the center onto 0, 0.5 shifts the voxel origin onto the center of the voxel
|
||||||
|
X -= options.center[0] - 0.5
|
||||||
|
Y -= options.center[1] - 0.5
|
||||||
|
Z -= options.center[2] - 0.5
|
||||||
|
# and then by applying the quaternion
|
||||||
|
# this should be rotation.conjugate() * (X,Y,Z), but it is this way for backwards compatibility with the older version of this script
|
||||||
|
(X, Y, Z) = rotation * (X, Y, Z)
|
||||||
|
# and finally by scaling (we don't worry about options.dimension being negative, np.abs occurs on the microstructure = np.where... line)
|
||||||
|
X /= options.dimension[0] * 0.5
|
||||||
|
Y /= options.dimension[1] * 0.5
|
||||||
|
Z /= options.dimension[2] * 0.5
|
||||||
|
|
||||||
|
|
||||||
|
# High exponents can cause underflow & overflow - loss of precision is okay here, we just compare it to 1, so +infinity and 0 are fine
|
||||||
|
old_settings = np.seterr()
|
||||||
|
np.seterr(over='ignore', under='ignore')
|
||||||
|
|
||||||
|
if options.periodic: # use padding to achieve periodicity
|
||||||
|
inside = np.zeros(size, dtype=bool)
|
||||||
|
for i in range(2):
|
||||||
|
for j in range(2):
|
||||||
|
for k in range(2):
|
||||||
|
inside = inside | ( # Most of this is handling the padding
|
||||||
|
np.abs(X[size[0] * i : size[0] * (i+1),
|
||||||
|
size[1] * j : size[1] * (j+1),
|
||||||
|
size[2] * k : size[2] * (k+1)])**options.exponent[0] +
|
||||||
|
np.abs(Y[size[0] * i : size[0] * (i+1),
|
||||||
|
size[1] * j : size[1] * (j+1),
|
||||||
|
size[2] * k : size[2] * (k+1)])**options.exponent[1] +
|
||||||
|
np.abs(Z[size[0] * i : size[0] * (i+1),
|
||||||
|
size[1] * j : size[1] * (j+1),
|
||||||
|
size[2] * k : size[2] * (k+1)])**options.exponent[2] < 1)
|
||||||
|
|
||||||
|
microstructure = np.where(inside, options.fill, microstructure)
|
||||||
|
|
||||||
|
else: # nonperiodic, much lighter on resources
|
||||||
|
microstructure = np.where(np.abs(X)**options.exponent[0] +
|
||||||
|
np.abs(Y)**options.exponent[1] +
|
||||||
|
np.abs(Z)**options.exponent[2] < 1, options.fill, microstructure)
|
||||||
|
|
||||||
|
np.seterr(**old_settings) # Reset warnings to old state
|
||||||
newInfo['microstructures'] = microstructure.max()
|
newInfo['microstructures'] = microstructure.max()
|
||||||
|
|
||||||
|
|
||||||
# --- report ---------------------------------------------------------------------------------------
|
# --- report ---------------------------------------------------------------------------------------
|
||||||
if ( newInfo['microstructures'] != info['microstructures']):
|
if (newInfo['microstructures'] != info['microstructures']):
|
||||||
damask.util.croak('--> microstructures: %i'%newInfo['microstructures'])
|
damask.util.croak('--> microstructures: %i'%newInfo['microstructures'])
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -74,10 +74,10 @@ for name in filenames:
|
||||||
while outputAlive and table.data_read():
|
while outputAlive and table.data_read():
|
||||||
if table.data != []:
|
if table.data != []:
|
||||||
currPos = table.data[3:6]
|
currPos = table.data[3:6]
|
||||||
for i in xrange(3):
|
for i in range(3):
|
||||||
coords[i][currPos[i]] = True
|
coords[i][currPos[i]] = True
|
||||||
currPos = map(float,currPos)
|
currPos = map(float,currPos)
|
||||||
for i in xrange(3):
|
for i in range(3):
|
||||||
pos['min'][i] = min(pos['min'][i],currPos[i])
|
pos['min'][i] = min(pos['min'][i],currPos[i])
|
||||||
pos['max'][i] = max(pos['max'][i],currPos[i])
|
pos['max'][i] = max(pos['max'][i],currPos[i])
|
||||||
eulerangles.append(map(math.degrees,map(float,table.data[:3])))
|
eulerangles.append(map(math.degrees,map(float,table.data[:3])))
|
||||||
|
@ -94,10 +94,10 @@ for name in filenames:
|
||||||
|
|
||||||
limits = [360,180,360]
|
limits = [360,180,360]
|
||||||
if any([np.any(eulerangles[:,i]>=limits[i]) for i in [0,1,2]]):
|
if any([np.any(eulerangles[:,i]>=limits[i]) for i in [0,1,2]]):
|
||||||
file['croak'].write('Error: euler angles out of bound. Ang file might contain unidexed poins.\n')
|
damask.util.croak.write('Error: euler angles out of bound. Ang file might contain unidexed poins.\n')
|
||||||
for i,angle in enumerate(['phi1','PHI','phi2']):
|
for i,angle in enumerate(['phi1','PHI','phi2']):
|
||||||
for n in np.nditer(np.where(eulerangles[:,i]>=limits[i]),['zerosize_ok']):
|
for n in np.nditer(np.where(eulerangles[:,i]>=limits[i]),['zerosize_ok']):
|
||||||
file['croak'].write('%s in line %i (%4.2f %4.2f %4.2f)\n'
|
damask.util.croak.write('%s in line %i (%4.2f %4.2f %4.2f)\n'
|
||||||
%(angle,n,eulerangles[n,0],eulerangles[n,1],eulerangles[n,2]))
|
%(angle,n,eulerangles[n,0],eulerangles[n,1],eulerangles[n,2]))
|
||||||
continue
|
continue
|
||||||
eulerangles=np.around(eulerangles,int(options.precision)) # round to desired precision
|
eulerangles=np.around(eulerangles,int(options.precision)) # round to desired precision
|
||||||
|
@ -114,9 +114,9 @@ for name in filenames:
|
||||||
formatString='{0:0>'+str(int(options.precision)+3)+'}'
|
formatString='{0:0>'+str(int(options.precision)+3)+'}'
|
||||||
euleranglesRadInt = (eulerangles*10**int(options.precision)).astype('int')
|
euleranglesRadInt = (eulerangles*10**int(options.precision)).astype('int')
|
||||||
eulerKeys = np.array([int(''.join(map(formatString.format,euleranglesRadInt[i,:]))) \
|
eulerKeys = np.array([int(''.join(map(formatString.format,euleranglesRadInt[i,:]))) \
|
||||||
for i in xrange(info['grid'].prod())])
|
for i in range(info['grid'].prod())])
|
||||||
devNull, texture, eulerKeys_idx = np.unique(eulerKeys, return_index = True, return_inverse=True)
|
devNull, texture, eulerKeys_idx = np.unique(eulerKeys, return_index = True, return_inverse=True)
|
||||||
msFull = np.array([[eulerKeys_idx[i],phase[i]] for i in xrange(info['grid'].prod())],'i8')
|
msFull = np.array([[eulerKeys_idx[i],phase[i]] for i in range(info['grid'].prod())],'i8')
|
||||||
devNull,msUnique,matPoints = np.unique(msFull.view('c16'),True,True)
|
devNull,msUnique,matPoints = np.unique(msFull.view('c16'),True,True)
|
||||||
matPoints+=1
|
matPoints+=1
|
||||||
microstructure = np.array([msFull[i] for i in msUnique]) # pick only unique microstructures
|
microstructure = np.array([msFull[i] for i in msUnique]) # pick only unique microstructures
|
||||||
|
@ -129,7 +129,7 @@ for name in filenames:
|
||||||
|
|
||||||
formatwidth = 1+int(math.log10(len(microstructure)))
|
formatwidth = 1+int(math.log10(len(microstructure)))
|
||||||
config_header += ['<microstructure>']
|
config_header += ['<microstructure>']
|
||||||
for i in xrange(len(microstructure)):
|
for i in range(len(microstructure)):
|
||||||
config_header += ['[Grain%s]'%str(i+1).zfill(formatwidth),
|
config_header += ['[Grain%s]'%str(i+1).zfill(formatwidth),
|
||||||
'crystallite\t%i'%options.crystallite,
|
'crystallite\t%i'%options.crystallite,
|
||||||
'(constituent)\tphase %i\ttexture %i\tfraction 1.0'%(microstructure[i,1],microstructure[i,0]+1)
|
'(constituent)\tphase %i\ttexture %i\tfraction 1.0'%(microstructure[i,1],microstructure[i,0]+1)
|
||||||
|
@ -138,7 +138,7 @@ for name in filenames:
|
||||||
|
|
||||||
eulerFormatOut='%%%i.%if'%(int(options.precision)+4,int(options.precision))
|
eulerFormatOut='%%%i.%if'%(int(options.precision)+4,int(options.precision))
|
||||||
outStringAngles='(gauss) phi1 '+eulerFormatOut+' Phi '+eulerFormatOut+' phi2 '+eulerFormatOut+' scatter 0.0 fraction 1.0'
|
outStringAngles='(gauss) phi1 '+eulerFormatOut+' Phi '+eulerFormatOut+' phi2 '+eulerFormatOut+' scatter 0.0 fraction 1.0'
|
||||||
for i in xrange(len(texture)):
|
for i in range(len(texture)):
|
||||||
config_header += ['[Texture%s]'%str(i+1).zfill(formatOut),
|
config_header += ['[Texture%s]'%str(i+1).zfill(formatOut),
|
||||||
outStringAngles%tuple(eulerangles[texture[i],...])
|
outStringAngles%tuple(eulerangles[texture[i],...])
|
||||||
]
|
]
|
||||||
|
|
|
@ -178,7 +178,7 @@ parser.add_option_group(group)
|
||||||
|
|
||||||
group = OptionGroup(parser, "Configuration","")
|
group = OptionGroup(parser, "Configuration","")
|
||||||
|
|
||||||
group.add_option('--no-config',
|
group.add_option('--without-config',
|
||||||
dest = 'config',
|
dest = 'config',
|
||||||
action = 'store_false',
|
action = 'store_false',
|
||||||
help = 'omit material configuration header')
|
help = 'omit material configuration header')
|
||||||
|
|
|
@ -36,12 +36,12 @@ for name in filenames:
|
||||||
table.head_read()
|
table.head_read()
|
||||||
info,extra_header = table.head_getGeom()
|
info,extra_header = table.head_getGeom()
|
||||||
|
|
||||||
damask.util.croak(['grid a b c: %s'%(' x '.join(map(str,info['grid']))),
|
damask.util.croak(['grid a b c: {}'.format(' x '.join(map(str,info['grid']))),
|
||||||
'size x y z: %s'%(' x '.join(map(str,info['size']))),
|
'size x y z: {}'.format(' x '.join(map(str,info['size']))),
|
||||||
'origin x y z: %s'%(' : '.join(map(str,info['origin']))),
|
'origin x y z: {}'.format(' : '.join(map(str,info['origin']))),
|
||||||
'homogenization: %i'%info['homogenization'],
|
'homogenization: {}'.format(info['homogenization']),
|
||||||
'microstructures: %i'%info['microstructures'],
|
'microstructures: {}'.format(info['microstructures']),
|
||||||
])
|
])
|
||||||
|
|
||||||
errors = []
|
errors = []
|
||||||
if np.any(info['grid'] < 1): errors.append('invalid grid a b c.')
|
if np.any(info['grid'] < 1): errors.append('invalid grid a b c.')
|
||||||
|
@ -81,7 +81,7 @@ for name in filenames:
|
||||||
else: items = map(int,items)
|
else: items = map(int,items)
|
||||||
|
|
||||||
for current in items:
|
for current in items:
|
||||||
if abs(current - former) == 1 and abs(start-former) == reps - 1:
|
if abs(current - former) == 1 and (start - current) == reps*(former - current):
|
||||||
compressType = 'to'
|
compressType = 'to'
|
||||||
reps += 1
|
reps += 1
|
||||||
elif current == former and start == former:
|
elif current == former and start == former:
|
||||||
|
|
|
@ -1,67 +1,101 @@
|
||||||
#!/usr/bin/env python2.7
|
#!/usr/bin/env python2.7
|
||||||
# -*- coding: UTF-8 no BOM -*-
|
# -*- coding: UTF-8 no BOM -*-
|
||||||
|
|
||||||
import sys,os
|
import sys,os,re,time,tempfile
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
import damask
|
import damask
|
||||||
|
|
||||||
|
sys.path.append(damask.solver.Marc().libraryPath())
|
||||||
|
|
||||||
scriptName = os.path.splitext(os.path.basename(__file__))[0]
|
scriptName = os.path.splitext(os.path.basename(__file__))[0]
|
||||||
scriptID = ' '.join([scriptName,damask.version])
|
scriptID = ' '.join([scriptName,damask.version])
|
||||||
|
|
||||||
sys.path.append(damask.solver.Marc().libraryPath())
|
# Convert .mfd file into a usable format
|
||||||
|
# Broken into labeled sections (eg. nodes, links, etc)
|
||||||
|
# Each section has a list of labeled elements with formatted numerical data
|
||||||
|
def parseMFD(dat):
|
||||||
|
formatted = []
|
||||||
|
section = 0
|
||||||
|
formatted.append({'label': 'header', 'uid': -1, 'els': []})
|
||||||
|
# in between =beg= and =end= part of file
|
||||||
|
in_block = False
|
||||||
|
for line in dat:
|
||||||
|
if in_block: # currently in a section
|
||||||
|
# lines that start with a space are numerical data
|
||||||
|
if line[0] == ' ':
|
||||||
|
formatted[section]['els'].append([])
|
||||||
|
|
||||||
|
# grab numbers
|
||||||
|
nums = re.split(r'\s+', line.strip())
|
||||||
|
|
||||||
|
for num in nums:
|
||||||
|
# floating point has format ' -x.xxxxxxxxxxxxe+yy'
|
||||||
|
# scientific notation is used for float
|
||||||
|
if (len(num) >= 4) and (num[-4] == 'e'):
|
||||||
|
formatted[section]['els'][-1].append(float(num))
|
||||||
|
else: # integer
|
||||||
|
formatted[section]['els'][-1].append(int(num))
|
||||||
|
else: # not numerical data, so it is a label for an element or section end
|
||||||
|
if line[0] == '=' and re.search(r'=end=$', line) is not None: # End of section, avoiding regex if possible
|
||||||
|
in_block = False
|
||||||
|
else:
|
||||||
|
formatted[section]['els'].append([])
|
||||||
|
formatted[section]['els'][-1] = line
|
||||||
|
|
||||||
|
else: # Not in a section, we are looking for a =beg= now
|
||||||
|
search = re.search(r'=beg=\s+(\d+)\s\((.*?)\)', line)
|
||||||
|
if search is not None: # found start of a new section
|
||||||
|
section += 1
|
||||||
|
in_block = True
|
||||||
|
formatted.append({'label': search.group(2), 'uid': int(search.group(1)), 'els': []})
|
||||||
|
else: # No =beg= found, probably in the header
|
||||||
|
# Either header or somthing we didn't plan for - just save the line so it isn't lost
|
||||||
|
if formatted[section]['uid'] > 0:
|
||||||
|
section += 1
|
||||||
|
formatted.append({'label': '', 'uid': -2, 'els': []}) # make dummy section to store unrecognized data
|
||||||
|
formatted[section]['els'].append(line)
|
||||||
|
|
||||||
|
return formatted
|
||||||
|
|
||||||
active=[True,True,True] # directions on which to add PBC
|
def asMFD(mfd_data):
|
||||||
def outMentat(cmd,locals):
|
result = ''
|
||||||
if cmd[0:3] == '(!)':
|
for section in mfd_data:
|
||||||
exec(cmd[3:])
|
if section['uid'] > 0:
|
||||||
elif cmd[0:3] == '(?)':
|
result += '=beg={0:5d} ({1})\n'.format(section['uid'], section['label'])
|
||||||
cmd = eval(cmd[3:])
|
for el in section['els']:
|
||||||
py_mentat.py_send(cmd)
|
if type(el) == str:
|
||||||
else:
|
result += el
|
||||||
py_mentat.py_send(cmd)
|
elif type(el) == list:
|
||||||
return
|
for num in el:
|
||||||
|
if type(num) == int:
|
||||||
#-------------------------------------------------------------------------------------------------
|
result += '{:20d}'.format(num)
|
||||||
def outFile(cmd,locals,dest):
|
elif type(num) == float:
|
||||||
if cmd[0:3] == '(!)':
|
result += '{:20.12e}'.format(num)
|
||||||
exec(cmd[3:])
|
else:
|
||||||
elif cmd[0:3] == '(?)':
|
damask.util.croak('WARNING: encountered unknown type: ' + str(type(el)))
|
||||||
cmd = eval(cmd[3:])
|
result += '\n'
|
||||||
dest.write(cmd+'\n')
|
|
||||||
else:
|
|
||||||
dest.write(cmd+'\n')
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------------------------
|
|
||||||
def output(cmds,locals,dest):
|
|
||||||
for cmd in cmds:
|
|
||||||
if isinstance(cmd,list):
|
|
||||||
output(cmd,locals,dest)
|
|
||||||
else:
|
|
||||||
if dest == 'Mentat':
|
|
||||||
outMentat(str(cmd),locals)
|
|
||||||
else:
|
else:
|
||||||
outFile(str(cmd),locals,dest)
|
damask.util.croak('WARNING: encountered unknown type: ' + str(type(el)))
|
||||||
return
|
if section['uid'] > 0:
|
||||||
|
result += '=end=\n'
|
||||||
|
return result.strip()
|
||||||
|
|
||||||
|
|
||||||
|
def add_servoLinks(mfd_data,active=[True,True,True]): # directions on which to add PBC
|
||||||
def servoLink():
|
|
||||||
|
|
||||||
cmds = []
|
|
||||||
base = ['x','y','z']
|
base = ['x','y','z']
|
||||||
box = {'min': np.zeros(3,dtype='d'),
|
box = {'min': np.zeros(3,dtype='d'),
|
||||||
'max': np.zeros(3,dtype='d'),
|
'max': np.zeros(3,dtype='d'),
|
||||||
'delta': np.zeros(3,dtype='d'),
|
'delta': np.zeros(3,dtype='d'),
|
||||||
}
|
}
|
||||||
Nnodes = py_mentat.py_get_int("nnodes()")
|
|
||||||
NodeCoords = np.zeros((Nnodes,3),dtype='d')
|
mfd_dict = {}
|
||||||
for node in range(Nnodes):
|
for i in range(len(mfd_data)):
|
||||||
NodeCoords[node,0] = py_mentat.py_get_float("node_x(%i)"%(node+1))
|
mfd_dict[mfd_data[i]['label']] = i
|
||||||
NodeCoords[node,1] = py_mentat.py_get_float("node_y(%i)"%(node+1))
|
|
||||||
NodeCoords[node,2] = py_mentat.py_get_float("node_z(%i)"%(node+1))
|
NodeCoords = np.array(mfd_data[mfd_dict['nodes']]['els'][0::4])[:,1:4]
|
||||||
|
Nnodes = NodeCoords.shape[0]
|
||||||
|
|
||||||
box['min'] = NodeCoords.min(axis=0) # find the bounding box
|
box['min'] = NodeCoords.min(axis=0) # find the bounding box
|
||||||
box['max'] = NodeCoords.max(axis=0)
|
box['max'] = NodeCoords.max(axis=0)
|
||||||
box['delta'] = box['max']-box['min']
|
box['delta'] = box['max']-box['min']
|
||||||
|
@ -108,9 +142,12 @@ def servoLink():
|
||||||
if any([maxFlag[i] and active[i] for i in range(3)]):
|
if any([maxFlag[i] and active[i] for i in range(3)]):
|
||||||
linkNodes.append({'id': node+1,'coord': NodeCoords[node], 'faceMember': [maxFlag[i] and active[i] for i in range(3)]})
|
linkNodes.append({'id': node+1,'coord': NodeCoords[node], 'faceMember': [maxFlag[i] and active[i] for i in range(3)]})
|
||||||
|
|
||||||
|
mfd_data[mfd_dict['entities']]['els'][0][0] += len(linkNodes) * 3
|
||||||
|
|
||||||
baseCorner = baseNode["%.8e"%box['min'][0]]["%.8e"%box['min'][1]]["%.8e"%box['min'][2]] # detect ultimate base node
|
baseCorner = baseNode["%.8e"%box['min'][0]]["%.8e"%box['min'][1]]["%.8e"%box['min'][2]] # detect ultimate base node
|
||||||
|
|
||||||
|
links = {'uid': 1705, 'label': 'links', 'els': [[7,0],[9,0]]}
|
||||||
|
linkID = 0
|
||||||
for node in linkNodes: # loop over all linked nodes
|
for node in linkNodes: # loop over all linked nodes
|
||||||
linkCoord = [node['coord']] # start list of control node coords with my coords
|
linkCoord = [node['coord']] # start list of control node coords with my coords
|
||||||
for dir in range(3): # check for each direction
|
for dir in range(3): # check for each direction
|
||||||
|
@ -121,76 +158,104 @@ def servoLink():
|
||||||
|
|
||||||
nLinks = len(linkCoord)
|
nLinks = len(linkCoord)
|
||||||
for dof in [1,2,3]:
|
for dof in [1,2,3]:
|
||||||
cmds.append([
|
tied_node = node['id']
|
||||||
"*new_link *link_class servo",
|
nterms = 1 + nLinks
|
||||||
"*link_class servo *tied_node %i"%node['id'],
|
|
||||||
"*link_class servo *tied_dof %i"%dof,
|
linkID += 1
|
||||||
"*servo_nterms %i"%(1+nLinks),
|
# Link header
|
||||||
])
|
links['els'].append('link{0}\n'.format(linkID))
|
||||||
for i in range(nLinks):
|
links['els'].append([linkID, 1])
|
||||||
cmds.append([
|
links['els'].append([0])
|
||||||
"*link_class servo *servo_ret_node %i %i"\
|
links['els'].append([0])
|
||||||
%(i+1,baseNode["%.8e"%linkCoord[i][0]]["%.8e"%linkCoord[i][1]]["%.8e"%linkCoord[i][2]]),
|
links['els'].append([0, 0, 0, tied_node])
|
||||||
"*link_class servo *servo_ret_dof %i %i"%(i+1,dof),
|
|
||||||
"*link_class servo *servo_ret_coef %i 1"%(i+1),
|
# these need to be put in groups of four
|
||||||
])
|
link_payload = [dof, 0, nterms]
|
||||||
cmds.append([
|
|
||||||
"*link_class servo *servo_ret_node %i %i"%(1+nLinks,baseCorner),
|
# Individual node contributions (node, dof, coef.)
|
||||||
"*link_class servo *servo_ret_dof %i %i"%(1+nLinks,dof),
|
for i in range(nterms):
|
||||||
"*link_class servo *servo_ret_coef %i -%i"%(1+nLinks,nLinks-1),
|
if i == nLinks:
|
||||||
])
|
link_payload.append(baseCorner)
|
||||||
return cmds
|
else:
|
||||||
|
link_payload.append(baseNode["%.8e"%linkCoord[i][0]]["%.8e"%linkCoord[i][1]]["%.8e"%linkCoord[i][2]])
|
||||||
|
for i in range(nterms):
|
||||||
|
link_payload.append(dof)
|
||||||
|
for i in range(nterms):
|
||||||
|
if i == nLinks:
|
||||||
|
link_payload.append(1.0 - nLinks)
|
||||||
|
else:
|
||||||
|
link_payload.append(1.0)
|
||||||
|
|
||||||
|
# Needs to be formatted 4 data points per row, character width of 20, so 80 total
|
||||||
|
for j in range(0, len(link_payload), 4):
|
||||||
|
links['els'].append(link_payload[j:j+4])
|
||||||
|
if j+4 < len(link_payload):
|
||||||
|
links['els'].append(link_payload[j+4:])
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
while i < len(mfd_data) and mfd_data[i]['uid'] < 1705: i += 1
|
||||||
|
|
||||||
|
if mfd_data[i]['uid'] == 1705: del mfd_data[i]
|
||||||
|
mfd_data.insert(i, links)
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------
|
||||||
# MAIN
|
# MAIN
|
||||||
#--------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------
|
||||||
parser = OptionParser(option_class=damask.extendableOption, usage = '%prog [options]', description = """
|
parser = OptionParser(option_class=damask.extendableOption, usage='%prog options [file[s]]', description = """
|
||||||
Set up servo linking to achieve periodic boundary conditions for a regular hexahedral mesh presently opened in MSC.Mentat
|
Set up servo linking to achieve periodic boundary conditions for a regular hexahedral mesh.
|
||||||
|
Use *py_connection to operate on model presently opened in MSC.Mentat.
|
||||||
|
|
||||||
""", version = scriptID)
|
""", version = scriptID)
|
||||||
|
|
||||||
parser.add_option("-p", "--port", type="int", dest="port", metavar='int',
|
parser.add_option('-p', '--port',
|
||||||
help="Mentat connection port [%default]")
|
type = int, metavar = 'int', default = None,
|
||||||
parser.add_option("-v", "--verbose", action="store_true", dest="verbose",
|
help = 'Mentat connection port')
|
||||||
help="write Mentat command stream also to stdout [%default]")
|
parser.add_option('-x',
|
||||||
parser.set_defaults(port = 40007)
|
action = 'store_false', default = True,
|
||||||
parser.set_defaults(verbose = False)
|
help = 'no PBC along x direction')
|
||||||
|
parser.add_option('-y',
|
||||||
|
action = 'store_false', default = True,
|
||||||
|
help = 'no PBC along y direction')
|
||||||
|
parser.add_option('-z',
|
||||||
|
action = 'store_false', default = True,
|
||||||
|
help = 'no PBC along z direction')
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
(options, filenames) = parser.parse_args()
|
||||||
|
|
||||||
if options.verbose:
|
remote = options.port is not None
|
||||||
file={'croak':sys.stderr}
|
|
||||||
else:
|
|
||||||
file={'croak':sys.stdout}
|
|
||||||
|
|
||||||
try:
|
if remote and filenames != []:
|
||||||
import py_mentat
|
parser.error('file can not be specified when port is given.')
|
||||||
except:
|
if filenames == []: filenames = [None]
|
||||||
file['croak'].write('error: no valid Mentat release found')
|
|
||||||
sys.exit(-1)
|
|
||||||
|
|
||||||
outputLocals = {}
|
if remote:
|
||||||
|
try: import py_mentat
|
||||||
|
except:
|
||||||
|
damask.util.croak('no valid Mentat release found.')
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
file['croak'].write('\033[1m'+scriptName+'\033[0m\n\n')
|
damask.util.report(scriptName, 'waiting to connect...')
|
||||||
file['croak'].write( 'waiting to connect...\n')
|
filenames = [os.path.join(tempfile._get_default_tempdir(), next(tempfile._get_candidate_names()) + '.mfd')]
|
||||||
try:
|
try:
|
||||||
py_mentat.py_connect('',options.port)
|
py_mentat.py_connect('',options.port)
|
||||||
# prevent redrawing in Mentat, should be much faster. Since py_connect has no return value, try this to determine if failed or not
|
py_mentat.py_send('*set_save_formatted on')
|
||||||
output(['*draw_manual'],outputLocals,'Mentat')
|
py_mentat.py_send('*save_as_model "{}" yes'.format(filenames[0]))
|
||||||
except:
|
py_mentat.py_get_int("nnodes()") # hopefully blocks until file is written
|
||||||
file['croak'].write('Could not connect. Set Tools/Python/"Run as Separate Process" & "Initiate"...\n')
|
except:
|
||||||
sys.exit()
|
damask.util.croak('failed. try setting Tools/Python/"Run as Separate Process" & "Initiate".')
|
||||||
file['croak'].write( 'connected...\n')
|
sys.exit()
|
||||||
|
damask.util.croak( 'connected...')
|
||||||
|
|
||||||
output(['*remove_all_servos',
|
for name in filenames:
|
||||||
'*sweep_all',
|
while remote and not os.path.exists(name): time.sleep(0.5) # wait for Mentat to write MFD file
|
||||||
'*renumber_nodes',
|
with open( name,'r') if name is not None else sys.stdin as fileIn:
|
||||||
'*set_links off',
|
damask.util.report(scriptName, name)
|
||||||
],outputLocals,'Mentat') # script depends on consecutive numbering of nodes
|
mfd = parseMFD(fileIn)
|
||||||
|
|
||||||
cmds = servoLink()
|
add_servoLinks(mfd,[options.x,options.y,options.z])
|
||||||
output(cmds,outputLocals,'Mentat')
|
with open( name,'w') if name is not None else sys.stdout as fileOut:
|
||||||
py_mentat.py_disconnect()
|
fileOut.write(asMFD(mfd))
|
||||||
|
|
||||||
if options.verbose:
|
if remote:
|
||||||
output(cmds,outputLocals,sys.stdout)
|
try: py_mentat.py_send('*open_model "{}"'.format(filenames[0]))
|
||||||
|
except: damask.util.croak('lost connection on sending open command for "{}".'.format(filenames[0]))
|
||||||
|
|
|
@ -247,6 +247,7 @@ for name in filenames:
|
||||||
'*identify_sets',
|
'*identify_sets',
|
||||||
'*show_model',
|
'*show_model',
|
||||||
'*redraw',
|
'*redraw',
|
||||||
|
'*draw_automatic',
|
||||||
]
|
]
|
||||||
|
|
||||||
outputLocals = {}
|
outputLocals = {}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
DAMASK_marc*.f90
|
DAMASK_marc*.f90
|
||||||
|
Makefile
|
||||||
|
cmake_install.cmake
|
||||||
quit__genmod.f90
|
quit__genmod.f90
|
||||||
*.marc
|
*.marc
|
|
@ -0,0 +1,205 @@
|
||||||
|
# special flags for some files
|
||||||
|
if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU")
|
||||||
|
|
||||||
|
SET_SOURCE_FILES_PROPERTIES( "prec.f90" PROPERTIES
|
||||||
|
COMPILE_FLAGS "-fno-range-check -fall-intrinsics -fno-fast-math")
|
||||||
|
# fno-range-check: Disable range checking on results of simplification of constant expressions during compilation
|
||||||
|
# --> allows the definition of DAMASK_NaN
|
||||||
|
#-fall-intrinsics: all intrinsic procedures (including the GNU-specific extensions) are accepted. -Wintrinsics-std will be ignored
|
||||||
|
# and no user-defined procedure with the same name as any intrinsic will be called except when it is explicitly declared external
|
||||||
|
# --> allows the use of 'isnan'
|
||||||
|
#-fno-fast-math:
|
||||||
|
# --> otherwise, when setting -ffast-math, isnan always evaluates to false (I would call it a bug)
|
||||||
|
|
||||||
|
SET_SOURCE_FILES_PROPERTIES( "lattice.f90" PROPERTIES
|
||||||
|
COMPILE_FLAGS "-ffree-line-length-240")
|
||||||
|
# long lines for interaction matrix
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# The dependency detection in CMake is not functioning for Fortran,
|
||||||
|
# hence we declare the dependencies from top to bottom in the following
|
||||||
|
add_library(C_ROUTINES OBJECT "C_routines.c")
|
||||||
|
set(OBJECTFILES $<TARGET_OBJECTS:C_ROUTINES>)
|
||||||
|
|
||||||
|
add_library(SYSTEM_ROUTINES OBJECT "system_routines.f90")
|
||||||
|
add_dependencies(SYSTEM_ROUTINES C_ROUTINES)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:SYSTEM_ROUTINES>)
|
||||||
|
|
||||||
|
add_library(PREC OBJECT "prec.f90")
|
||||||
|
add_dependencies(PREC SYSTEM_ROUTINES)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:PREC>)
|
||||||
|
|
||||||
|
if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
||||||
|
add_library(DAMASK_INTERFACE OBJECT "spectral_interface.f90")
|
||||||
|
elseif ("${PROJECT_NAME}" STREQUAL "DAMASK_FEM")
|
||||||
|
add_library(DAMASK_INTERFACE OBJECT "FEM_interface.f90")
|
||||||
|
endif()
|
||||||
|
add_dependencies(DAMASK_INTERFACE PREC)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_INTERFACE>)
|
||||||
|
|
||||||
|
add_library(IO OBJECT "IO.f90")
|
||||||
|
add_dependencies(IO DAMASK_INTERFACE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:IO>)
|
||||||
|
|
||||||
|
add_library(NUMERICS OBJECT "numerics.f90")
|
||||||
|
add_dependencies(NUMERICS IO)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:NUMERICS>)
|
||||||
|
|
||||||
|
add_library(DEBUG OBJECT "debug.f90")
|
||||||
|
add_dependencies(DEBUG NUMERICS)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DEBUG>)
|
||||||
|
|
||||||
|
add_library(FEsolving OBJECT "FEsolving.f90")
|
||||||
|
add_dependencies(FEsolving DEBUG)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:FEsolving>)
|
||||||
|
|
||||||
|
add_library(DAMASK_MATH OBJECT "math.f90")
|
||||||
|
add_dependencies(DAMASK_MATH FEsolving)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_MATH>)
|
||||||
|
|
||||||
|
# SPECTRAL solver and FEM solver use different mesh files
|
||||||
|
if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
||||||
|
add_library(MESH OBJECT "mesh.f90")
|
||||||
|
add_dependencies(MESH DAMASK_MATH)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:MESH>)
|
||||||
|
elseif ("${PROJECT_NAME}" STREQUAL "DAMASK_FEM")
|
||||||
|
add_library(FEZoo OBJECT "FEZoo.f90")
|
||||||
|
add_dependencies(FEZoo DAMASK_MATH)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:FEZoo>)
|
||||||
|
add_library(MESH OBJECT "meshFEM.f90")
|
||||||
|
add_dependencies(MESH FEZoo)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:MESH>)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library(MATERIAL OBJECT "material.f90")
|
||||||
|
add_dependencies(MATERIAL MESH)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:MATERIAL>)
|
||||||
|
|
||||||
|
add_library(DAMASK_HELPERS OBJECT "lattice.f90")
|
||||||
|
add_dependencies(DAMASK_HELPERS MATERIAL)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_HELPERS>)
|
||||||
|
|
||||||
|
# For each modular section
|
||||||
|
add_library (PLASTIC OBJECT
|
||||||
|
"plastic_dislotwin.f90"
|
||||||
|
"plastic_disloUCLA.f90"
|
||||||
|
"plastic_isotropic.f90"
|
||||||
|
"plastic_phenopowerlaw.f90"
|
||||||
|
"plastic_titanmod.f90"
|
||||||
|
"plastic_nonlocal.f90"
|
||||||
|
"plastic_none.f90"
|
||||||
|
"plastic_phenoplus.f90")
|
||||||
|
add_dependencies(PLASTIC DAMASK_HELPERS)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:PLASTIC>)
|
||||||
|
|
||||||
|
add_library (KINEMATICS OBJECT
|
||||||
|
"kinematics_cleavage_opening.f90"
|
||||||
|
"kinematics_slipplane_opening.f90"
|
||||||
|
"kinematics_thermal_expansion.f90"
|
||||||
|
"kinematics_vacancy_strain.f90"
|
||||||
|
"kinematics_hydrogen_strain.f90")
|
||||||
|
add_dependencies(KINEMATICS DAMASK_HELPERS)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:KINEMATICS>)
|
||||||
|
|
||||||
|
add_library (SOURCE OBJECT
|
||||||
|
"source_thermal_dissipation.f90"
|
||||||
|
"source_thermal_externalheat.f90"
|
||||||
|
"source_damage_isoBrittle.f90"
|
||||||
|
"source_damage_isoDuctile.f90"
|
||||||
|
"source_damage_anisoBrittle.f90"
|
||||||
|
"source_damage_anisoDuctile.f90"
|
||||||
|
"source_vacancy_phenoplasticity.f90"
|
||||||
|
"source_vacancy_irradiation.f90"
|
||||||
|
"source_vacancy_thermalfluc.f90")
|
||||||
|
add_dependencies(SOURCE DAMASK_HELPERS)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:SOURCE>)
|
||||||
|
|
||||||
|
add_library(CONSTITUTIVE OBJECT "constitutive.f90")
|
||||||
|
add_dependencies(CONSTITUTIVE PLASTIC KINEMATICS SOURCE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:CONSTITUTIVE>)
|
||||||
|
|
||||||
|
add_library(CRYSTALLITE OBJECT "crystallite.f90")
|
||||||
|
add_dependencies(CRYSTALLITE CONSTITUTIVE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:CRYSTALLITE>)
|
||||||
|
|
||||||
|
add_library(HOMOGENIZATION OBJECT
|
||||||
|
"homogenization_RGC.f90"
|
||||||
|
"homogenization_isostrain.f90"
|
||||||
|
"homogenization_none.f90")
|
||||||
|
add_dependencies(HOMOGENIZATION CRYSTALLITE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:HOMOGENIZATION>)
|
||||||
|
|
||||||
|
add_library(HYDROGENFLUX OBJECT
|
||||||
|
"hydrogenflux_isoconc.f90"
|
||||||
|
"hydrogenflux_cahnhilliard.f90")
|
||||||
|
add_dependencies(HYDROGENFLUX CRYSTALLITE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:HYDROGENFLUX>)
|
||||||
|
|
||||||
|
add_library(POROSITY OBJECT
|
||||||
|
"porosity_none.f90"
|
||||||
|
"porosity_phasefield.f90")
|
||||||
|
add_dependencies(POROSITY CRYSTALLITE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:POROSITY>)
|
||||||
|
|
||||||
|
add_library(VACANCYFLUX OBJECT
|
||||||
|
"vacancyflux_isoconc.f90"
|
||||||
|
"vacancyflux_isochempot.f90"
|
||||||
|
"vacancyflux_cahnhilliard.f90")
|
||||||
|
add_dependencies(VACANCYFLUX CRYSTALLITE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:VACANCYFLUX>)
|
||||||
|
|
||||||
|
add_library(DAMAGE OBJECT
|
||||||
|
"damage_none.f90"
|
||||||
|
"damage_local.f90"
|
||||||
|
"damage_nonlocal.f90")
|
||||||
|
add_dependencies(DAMAGE CRYSTALLITE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMAGE>)
|
||||||
|
|
||||||
|
add_library(THERMAL OBJECT
|
||||||
|
"thermal_isothermal.f90"
|
||||||
|
"thermal_adiabatic.f90"
|
||||||
|
"thermal_conduction.f90")
|
||||||
|
add_dependencies(THERMAL CRYSTALLITE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:THERMAL>)
|
||||||
|
|
||||||
|
add_library(DAMASK_ENGINE OBJECT "homogenization.f90")
|
||||||
|
add_dependencies(DAMASK_ENGINE THERMAL DAMAGE VACANCYFLUX POROSITY HYDROGENFLUX HOMOGENIZATION)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_ENGINE>)
|
||||||
|
|
||||||
|
add_library(DAMASK_CPFE OBJECT "CPFEM2.f90")
|
||||||
|
add_dependencies(DAMASK_CPFE DAMASK_ENGINE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:DAMASK_CPFE>)
|
||||||
|
|
||||||
|
if ("${PROJECT_NAME}" STREQUAL "DAMASK_spectral")
|
||||||
|
add_library(SPECTRAL_UTILITIES OBJECT "spectral_utilities.f90")
|
||||||
|
add_dependencies(SPECTRAL_UTILITIES DAMASK_CPFE)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:SPECTRAL_UTILITIES>)
|
||||||
|
|
||||||
|
add_library(SPECTRAL_SOLVER OBJECT
|
||||||
|
"spectral_thermal.f90"
|
||||||
|
"spectral_damage.f90"
|
||||||
|
"spectral_mech_AL.f90"
|
||||||
|
"spectral_mech_Polarisation.f90"
|
||||||
|
"spectral_mech_Basic.f90")
|
||||||
|
add_dependencies(SPECTRAL_SOLVER SPECTRAL_UTILITIES)
|
||||||
|
list(APPEND OBJECTFILES $<TARGET_OBJECTS:SPECTRAL_SOLVER>)
|
||||||
|
if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "SYNTAXONLY")
|
||||||
|
add_executable(DAMASK_spectral "DAMASK_spectral.f90" ${OBJECTFILES})
|
||||||
|
add_dependencies(DAMASK_spectral SPECTRAL_SOLVER)
|
||||||
|
endif()
|
||||||
|
elseif ("${PROJECT_NAME}" STREQUAL "DAMASK_FEM")
|
||||||
|
add_library(FEM_UTILITIES OBJECT "FEM_utilities.f90")
|
||||||
|
add_dependencies(FEM_UTILITIES DAMASK_CPFE)
|
||||||
|
|
||||||
|
add_library(FEM_SOLVER OBJECT
|
||||||
|
"FEM_hydrogenflux.f90"
|
||||||
|
"FEM_porosity.f90"
|
||||||
|
"FEM_vacancyflux.f90"
|
||||||
|
"FEM_damage.f90"
|
||||||
|
"FEM_thermal.f90"
|
||||||
|
"FEM_mech.f90")
|
||||||
|
add_dependencies(FEM_SOLVER FEM_UTILITIES)
|
||||||
|
|
||||||
|
add_executable(DAMASK_FEM "DAMASK_FEM_driver.f90")
|
||||||
|
add_dependencies(DAMASK_FEM FEM_SOLVER)
|
||||||
|
endif()
|
|
@ -302,6 +302,8 @@ subroutine CPFEM_general(mode, parallelExecution, ffn, ffn1, temperature_inp, dt
|
||||||
phase_plasticity, &
|
phase_plasticity, &
|
||||||
temperature, &
|
temperature, &
|
||||||
thermalMapping, &
|
thermalMapping, &
|
||||||
|
thermal_type, &
|
||||||
|
THERMAL_conduction_ID, &
|
||||||
phase_Nsources, &
|
phase_Nsources, &
|
||||||
material_homog, &
|
material_homog, &
|
||||||
material_Nhomogenization
|
material_Nhomogenization
|
||||||
|
@ -489,8 +491,11 @@ subroutine CPFEM_general(mode, parallelExecution, ffn, ffn1, temperature_inp, dt
|
||||||
!* If no parallel execution is required, there is no need to collect FEM input
|
!* If no parallel execution is required, there is no need to collect FEM input
|
||||||
|
|
||||||
if (.not. parallelExecution) then
|
if (.not. parallelExecution) then
|
||||||
temperature(material_homog(ip,elCP))%p(thermalMapping(material_homog(ip,elCP))%p(ip,elCP)) = &
|
chosenThermal1: select case (thermal_type(mesh_element(3,elCP)))
|
||||||
temperature_inp
|
case (THERMAL_conduction_ID) chosenThermal1
|
||||||
|
temperature(material_homog(ip,elCP))%p(thermalMapping(material_homog(ip,elCP))%p(ip,elCP)) = &
|
||||||
|
temperature_inp
|
||||||
|
end select chosenThermal1
|
||||||
materialpoint_F0(1:3,1:3,ip,elCP) = ffn
|
materialpoint_F0(1:3,1:3,ip,elCP) = ffn
|
||||||
materialpoint_F(1:3,1:3,ip,elCP) = ffn1
|
materialpoint_F(1:3,1:3,ip,elCP) = ffn1
|
||||||
|
|
||||||
|
@ -499,8 +504,11 @@ subroutine CPFEM_general(mode, parallelExecution, ffn, ffn1, temperature_inp, dt
|
||||||
if (rnd < 0.5_pReal) rnd = rnd - 1.0_pReal
|
if (rnd < 0.5_pReal) rnd = rnd - 1.0_pReal
|
||||||
CPFEM_cs(1:6,ip,elCP) = rnd * CPFEM_odd_stress
|
CPFEM_cs(1:6,ip,elCP) = rnd * CPFEM_odd_stress
|
||||||
CPFEM_dcsde(1:6,1:6,ip,elCP) = CPFEM_odd_jacobian * math_identity2nd(6)
|
CPFEM_dcsde(1:6,1:6,ip,elCP) = CPFEM_odd_jacobian * math_identity2nd(6)
|
||||||
temperature(material_homog(ip,elCP))%p(thermalMapping(material_homog(ip,elCP))%p(ip,elCP)) = &
|
chosenThermal2: select case (thermal_type(mesh_element(3,elCP)))
|
||||||
temperature_inp
|
case (THERMAL_conduction_ID) chosenThermal2
|
||||||
|
temperature(material_homog(ip,elCP))%p(thermalMapping(material_homog(ip,elCP))%p(ip,elCP)) = &
|
||||||
|
temperature_inp
|
||||||
|
end select chosenThermal2
|
||||||
materialpoint_F0(1:3,1:3,ip,elCP) = ffn
|
materialpoint_F0(1:3,1:3,ip,elCP) = ffn
|
||||||
materialpoint_F(1:3,1:3,ip,elCP) = ffn1
|
materialpoint_F(1:3,1:3,ip,elCP) = ffn1
|
||||||
CPFEM_calc_done = .false.
|
CPFEM_calc_done = .false.
|
|
@ -1,5 +1,5 @@
|
||||||
#define QUOTE(x) #x
|
#define QUOTE(x) #x
|
||||||
#define PASTE(x,y) x ## y
|
#define PASTE(x,y) x ## y
|
||||||
|
|
||||||
#ifndef INT
|
#ifndef INT
|
||||||
#define INT 4
|
#define INT 4
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
!> @details - creeps: timinc
|
!> @details - creeps: timinc
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
module DAMASK_interface
|
module DAMASK_interface
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=4), parameter :: InputFileExtension = '.dat'
|
character(len=4), parameter :: InputFileExtension = '.dat'
|
||||||
character(len=4), parameter :: LogFileExtension = '.log'
|
character(len=4), parameter :: LogFileExtension = '.log'
|
||||||
|
@ -57,18 +57,18 @@ subroutine DAMASK_interface_init
|
||||||
write(6,'(/,a)') ' Version: '//DAMASKVERSION
|
write(6,'(/,a)') ' Version: '//DAMASKVERSION
|
||||||
write(6,'(a,2(i2.2,a),i4.4)') ' Date: ',dateAndTime(3),'/',&
|
write(6,'(a,2(i2.2,a),i4.4)') ' Date: ',dateAndTime(3),'/',&
|
||||||
dateAndTime(2),'/',&
|
dateAndTime(2),'/',&
|
||||||
dateAndTime(1)
|
dateAndTime(1)
|
||||||
write(6,'(a,2(i2.2,a),i2.2)') ' Time: ',dateAndTime(5),':',&
|
write(6,'(a,2(i2.2,a),i2.2)') ' Time: ',dateAndTime(5),':',&
|
||||||
dateAndTime(6),':',&
|
dateAndTime(6),':',&
|
||||||
dateAndTime(7)
|
dateAndTime(7)
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>'
|
||||||
#include "compilation_info.f90"
|
#include "compilation_info.f90"
|
||||||
|
|
||||||
end subroutine DAMASK_interface_init
|
end subroutine DAMASK_interface_init
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief returns the current workingDir
|
!> @brief returns the current workingDir
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function getSolverWorkingDirectoryName()
|
function getSolverWorkingDirectoryName()
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
!$ include "omp_lib.h" ! the openMP function library
|
!$ include "omp_lib.h" ! the openMP function library
|
||||||
integer(pInt), intent(in) :: & ! according to MSC.Marc 2012 Manual D
|
integer(pInt), intent(in) :: & ! according to MSC.Marc 2012 Manual D
|
||||||
ngens, & !< size of stress-strain law
|
ngens, & !< size of stress-strain law
|
||||||
nn, & !< integration point number
|
nn, & !< integration point number
|
||||||
ndi, & !< number of direct components
|
ndi, & !< number of direct components
|
||||||
nshear, & !< number of shear components
|
nshear, & !< number of shear components
|
||||||
ncrd, & !< number of coordinates
|
ncrd, & !< number of coordinates
|
||||||
|
@ -199,7 +199,7 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
integer(pInt), dimension(2), intent(in) :: & ! according to MSC.Marc 2012 Manual D
|
integer(pInt), dimension(2), intent(in) :: & ! according to MSC.Marc 2012 Manual D
|
||||||
m, & !< (1) user element number, (2) internal element number
|
m, & !< (1) user element number, (2) internal element number
|
||||||
matus, & !< (1) user material identification number, (2) internal material identification number
|
matus, & !< (1) user material identification number, (2) internal material identification number
|
||||||
kcus, & !< (1) layer number, (2) internal layer number
|
kcus, & !< (1) layer number, (2) internal layer number
|
||||||
lclass !< (1) element class, (2) 0: displacement, 1: low order Herrmann, 2: high order Herrmann
|
lclass !< (1) element class, (2) 0: displacement, 1: low order Herrmann, 2: high order Herrmann
|
||||||
real(pReal), dimension(*), intent(in) :: & ! has dimension(1) according to MSC.Marc 2012 Manual D, but according to example hypela2.f dimension(*)
|
real(pReal), dimension(*), intent(in) :: & ! has dimension(1) according to MSC.Marc 2012 Manual D, but according to example hypela2.f dimension(*)
|
||||||
e, & !< total elastic strain
|
e, & !< total elastic strain
|
||||||
|
@ -240,17 +240,17 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
real(pReal), dimension(6) :: stress
|
real(pReal), dimension(6) :: stress
|
||||||
real(pReal), dimension(6,6) :: ddsdde
|
real(pReal), dimension(6,6) :: ddsdde
|
||||||
integer(pInt) :: computationMode, i, cp_en, node, CPnodeID
|
integer(pInt) :: computationMode, i, cp_en, node, CPnodeID
|
||||||
!$ integer :: defaultNumThreadsInt !< default value set by Marc
|
!$ integer(4) :: defaultNumThreadsInt !< default value set by Marc
|
||||||
|
|
||||||
if (iand(debug_level(debug_MARC),debug_LEVELBASIC) /= 0_pInt) then
|
if (iand(debug_level(debug_MARC),debug_LEVELBASIC) /= 0_pInt) then
|
||||||
write(6,'(a,/,i8,i8,i2)') ' MSC.MARC information on shape of element(2), IP:', m, nn
|
write(6,'(a,/,i8,i8,i2)') ' MSC.MARC information on shape of element(2), IP:', m, nn
|
||||||
write(6,'(a,2(i1))') ' Jacobian: ', ngens,ngens
|
write(6,'(a,2(i1))') ' Jacobian: ', ngens,ngens
|
||||||
write(6,'(a,i1)') ' Direct stress: ', ndi
|
write(6,'(a,i1)') ' Direct stress: ', ndi
|
||||||
write(6,'(a,i1)') ' Shear stress: ', nshear
|
write(6,'(a,i1)') ' Shear stress: ', nshear
|
||||||
write(6,'(a,i2)') ' DoF: ', ndeg
|
write(6,'(a,i2)') ' DoF: ', ndeg
|
||||||
write(6,'(a,i2)') ' Coordinates: ', ncrd
|
write(6,'(a,i2)') ' Coordinates: ', ncrd
|
||||||
write(6,'(a,i12)') ' Nodes: ', nnode
|
write(6,'(a,i12)') ' Nodes: ', nnode
|
||||||
write(6,'(a,i1)') ' Deformation gradient: ', itel
|
write(6,'(a,i1)') ' Deformation gradient: ', itel
|
||||||
write(6,'(/,a,/,3(3(f12.7,1x)/))',advance='no') ' Deformation gradient at t=n:', &
|
write(6,'(/,a,/,3(3(f12.7,1x)/))',advance='no') ' Deformation gradient at t=n:', &
|
||||||
math_transpose33(ffn)
|
math_transpose33(ffn)
|
||||||
write(6,'(/,a,/,3(3(f12.7,1x)/))',advance='no') ' Deformation gradient at t=n+1:', &
|
write(6,'(/,a,/,3(3(f12.7,1x)/))',advance='no') ' Deformation gradient at t=n+1:', &
|
||||||
|
@ -310,7 +310,7 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif ! convergence treatment end
|
endif ! convergence treatment end
|
||||||
|
|
||||||
|
|
||||||
if (usePingPong) then
|
if (usePingPong) then
|
||||||
calcMode(nn,cp_en) = .not. calcMode(nn,cp_en) ! ping pong (calc <--> collect)
|
calcMode(nn,cp_en) = .not. calcMode(nn,cp_en) ! ping pong (calc <--> collect)
|
||||||
if (calcMode(nn,cp_en)) then ! now --- CALC ---
|
if (calcMode(nn,cp_en)) then ! now --- CALC ---
|
||||||
|
@ -339,7 +339,7 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
mesh_node(1:ndeg,CPnodeID) = mesh_node0(1:ndeg,CPnodeID) + numerics_unitlength * dispt(1:ndeg,node)
|
mesh_node(1:ndeg,CPnodeID) = mesh_node0(1:ndeg,CPnodeID) + numerics_unitlength * dispt(1:ndeg,node)
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
else ! --- PLAIN MODE ---
|
else ! --- PLAIN MODE ---
|
||||||
computationMode = CPFEM_CALCRESULTS ! always calc
|
computationMode = CPFEM_CALCRESULTS ! always calc
|
||||||
if (lastLovl /= lovl) then
|
if (lastLovl /= lovl) then
|
||||||
|
@ -378,12 +378,39 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
s(1:ndi+nshear) = stress(1:ndi+nshear)*invnrmMandel(1:ndi+nshear)
|
s(1:ndi+nshear) = stress(1:ndi+nshear)*invnrmMandel(1:ndi+nshear)
|
||||||
g = 0.0_pReal
|
g = 0.0_pReal
|
||||||
if(symmetricSolver) d = 0.5_pReal*(d+transpose(d))
|
if(symmetricSolver) d = 0.5_pReal*(d+transpose(d))
|
||||||
|
|
||||||
!$ call omp_set_num_threads(defaultNumThreadsInt) ! reset number of threads to stored default value
|
!$ call omp_set_num_threads(defaultNumThreadsInt) ! reset number of threads to stored default value
|
||||||
|
|
||||||
end subroutine hypela2
|
end subroutine hypela2
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief calculate internal heat generated due to inelastic energy dissipation
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
subroutine flux(f,ts,n,time)
|
||||||
|
use prec, only: &
|
||||||
|
pReal, &
|
||||||
|
pInt
|
||||||
|
use thermal_conduction, only: &
|
||||||
|
thermal_conduction_getSourceAndItsTangent
|
||||||
|
use mesh, only: &
|
||||||
|
mesh_FEasCP
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
real(pReal), dimension(6), intent(in) :: &
|
||||||
|
ts
|
||||||
|
integer(pInt), dimension(10), intent(in) :: &
|
||||||
|
n
|
||||||
|
real(pReal), intent(in) :: &
|
||||||
|
time
|
||||||
|
real(pReal), dimension(2), intent(out) :: &
|
||||||
|
f
|
||||||
|
|
||||||
|
call thermal_conduction_getSourceAndItsTangent(f(1), f(2), ts(3), n(3),mesh_FEasCP('elem',n(1)))
|
||||||
|
|
||||||
|
end subroutine flux
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief sets user defined output variables for Marc
|
!> @brief sets user defined output variables for Marc
|
||||||
!> @details select a variable contour plotting (user subroutine).
|
!> @details select a variable contour plotting (user subroutine).
|
||||||
|
@ -399,7 +426,7 @@ subroutine plotv(v,s,sp,etot,eplas,ecreep,t,m,nn,layer,ndi,nshear,jpltcd)
|
||||||
use homogenization, only: &
|
use homogenization, only: &
|
||||||
materialpoint_results,&
|
materialpoint_results,&
|
||||||
materialpoint_sizeResults
|
materialpoint_sizeResults
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), intent(in) :: &
|
integer(pInt), intent(in) :: &
|
||||||
m, & !< element number
|
m, & !< element number
|
||||||
|
@ -411,7 +438,7 @@ subroutine plotv(v,s,sp,etot,eplas,ecreep,t,m,nn,layer,ndi,nshear,jpltcd)
|
||||||
real(pReal), dimension(*), intent(in) :: &
|
real(pReal), dimension(*), intent(in) :: &
|
||||||
s, & !< stress array
|
s, & !< stress array
|
||||||
sp, & !< stresses in preferred direction
|
sp, & !< stresses in preferred direction
|
||||||
etot, & !< total strain (generalized)
|
etot, & !< total strain (generalized)
|
||||||
eplas, & !< total plastic strain
|
eplas, & !< total plastic strain
|
||||||
ecreep, & !< total creep strain
|
ecreep, & !< total creep strain
|
||||||
t !< current temperature
|
t !< current temperature
|
|
@ -0,0 +1 @@
|
||||||
|
DAMASK_marc.f90
|
|
@ -0,0 +1 @@
|
||||||
|
DAMASK_marc.f90
|
|
@ -0,0 +1 @@
|
||||||
|
DAMASK_marc.f90
|
|
@ -0,0 +1 @@
|
||||||
|
DAMASK_marc.f90
|
|
@ -0,0 +1 @@
|
||||||
|
DAMASK_marc.f90
|
|
@ -0,0 +1 @@
|
||||||
|
DAMASK_marc.f90
|
|
@ -0,0 +1 @@
|
||||||
|
DAMASK_marc.f90
|
|
@ -14,7 +14,10 @@ module IO
|
||||||
private
|
private
|
||||||
character(len=5), parameter, public :: &
|
character(len=5), parameter, public :: &
|
||||||
IO_EOF = '#EOF#' !< end of file string
|
IO_EOF = '#EOF#' !< end of file string
|
||||||
|
character(len=168), parameter, private :: &
|
||||||
|
IO_divider = '───────────────────'//&
|
||||||
|
'───────────────────'//&
|
||||||
|
'──────────────────'
|
||||||
public :: &
|
public :: &
|
||||||
IO_init, &
|
IO_init, &
|
||||||
IO_read, &
|
IO_read, &
|
||||||
|
@ -878,7 +881,7 @@ function IO_spotTagInPart(fileUnit,part,tag,Nsections)
|
||||||
|
|
||||||
IO_spotTagInPart = .false. ! assume to nowhere spot tag
|
IO_spotTagInPart = .false. ! assume to nowhere spot tag
|
||||||
section = 0_pInt
|
section = 0_pInt
|
||||||
line =''
|
line = ''
|
||||||
|
|
||||||
rewind(fileUnit)
|
rewind(fileUnit)
|
||||||
do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= part) ! search for part
|
do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= part) ! search for part
|
||||||
|
@ -1669,33 +1672,35 @@ subroutine IO_error(error_ID,el,ip,g,ext_msg)
|
||||||
end select
|
end select
|
||||||
|
|
||||||
!$OMP CRITICAL (write2out)
|
!$OMP CRITICAL (write2out)
|
||||||
write(6,'(/,a)') ' +--------------------------------------------------------+'
|
write(0,'(/,a)') ' ┌'//IO_divider//'┐'
|
||||||
write(6,'(a)') ' + error +'
|
write(0,'(a)') ' │ error │'
|
||||||
write(6,'(a,i3,a)') ' + ',error_ID,' +'
|
write(0,'(a)') ' ├'//IO_divider//'┤'
|
||||||
write(6,'(a)') ' + +'
|
write(0,'(a,i3,a)') ' │ ',error_ID,' │'
|
||||||
write(formatString,'(a,i6.6,a,i6.6,a)') '(1x,a2,a',max(1,len(trim(msg))),',',&
|
write(0,'(a)') ' │ │'
|
||||||
|
write(formatString,'(a,i6.6,a,i6.6,a)') '(1x,a4,a',max(1,len(trim(msg))),',',&
|
||||||
max(1,60-len(trim(msg))-5),'x,a)'
|
max(1,60-len(trim(msg))-5),'x,a)'
|
||||||
write(6,formatString) '+ ', trim(msg),'+'
|
write(0,formatString) '│ ',trim(msg),'│'
|
||||||
if (present(ext_msg)) then
|
if (present(ext_msg)) then
|
||||||
write(formatString,'(a,i6.6,a,i6.6,a)') '(1x,a2,a',max(1,len(trim(ext_msg))),',',&
|
write(formatString,'(a,i6.6,a,i6.6,a)') '(1x,a4,a',max(1,len(trim(ext_msg))),',',&
|
||||||
max(1,60-len(trim(ext_msg))-5),'x,a)'
|
max(1,60-len(trim(ext_msg))-5),'x,a)'
|
||||||
write(6,formatString) '+ ', trim(ext_msg),'+'
|
write(0,formatString) '│ ',trim(ext_msg),'│'
|
||||||
endif
|
endif
|
||||||
if (present(el)) then
|
if (present(el)) then
|
||||||
if (present(ip)) then
|
if (present(ip)) then
|
||||||
if (present(g)) then
|
if (present(g)) then
|
||||||
write(6,'(a13,1x,i9,1x,a2,1x,i2,1x,a5,1x,i4,18x,a1)') ' + at element',el,'IP',ip,'grain',g,'+'
|
write(0,'(a13,1x,i9,1x,a2,1x,i2,1x,a5,1x,i4,18x,a1)') ' │ at element',el,'IP',ip,'grain',g,'│'
|
||||||
else
|
else
|
||||||
write(6,'(a13,1x,i9,1x,a2,1x,i2,29x,a1)') ' + at element',el,'IP',ip,'+'
|
write(0,'(a13,1x,i9,1x,a2,1x,i2,29x,a1)') ' │ at element',el,'IP',ip,'│'
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
write(6,'(a13,1x,i9,35x,a1)') ' + at element',el,'+'
|
write(0,'(a13,1x,i9,35x,a1)') ' │ at element',el,'│'
|
||||||
endif
|
endif
|
||||||
elseif (present(ip)) then ! now having the meaning of "instance"
|
elseif (present(ip)) then ! now having the meaning of "instance"
|
||||||
write(6,'(a15,1x,i9,33x,a1)') ' + for instance',ip,'+'
|
write(0,'(a14,1x,i9,34x,a1)') ' │ at instance',ip,'│'
|
||||||
endif
|
endif
|
||||||
write(6,'(a)') ' +--------------------------------------------------------+'
|
write(0,'(a)') ' │ │'
|
||||||
flush(6)
|
write(0,'(a)') ' └'//IO_divider//'┘'
|
||||||
|
flush(0)
|
||||||
call quit(9000_pInt+error_ID)
|
call quit(9000_pInt+error_ID)
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
|
|
|
@ -207,7 +207,7 @@ subroutine constitutive_init()
|
||||||
outputName = PLASTICITY_NONE_label
|
outputName = PLASTICITY_NONE_label
|
||||||
thisNoutput => null()
|
thisNoutput => null()
|
||||||
thisOutput => null()
|
thisOutput => null()
|
||||||
thisSize => null()
|
thisSize => null()
|
||||||
case (PLASTICITY_ISOTROPIC_ID) plasticityType
|
case (PLASTICITY_ISOTROPIC_ID) plasticityType
|
||||||
outputName = PLASTICITY_ISOTROPIC_label
|
outputName = PLASTICITY_ISOTROPIC_label
|
||||||
thisNoutput => plastic_isotropic_Noutput
|
thisNoutput => plastic_isotropic_Noutput
|
|
@ -421,7 +421,7 @@ subroutine crystallite_init
|
||||||
crystallite_partionedFp0 = crystallite_Fp0
|
crystallite_partionedFp0 = crystallite_Fp0
|
||||||
crystallite_partionedFi0 = crystallite_Fi0
|
crystallite_partionedFi0 = crystallite_Fi0
|
||||||
crystallite_partionedF0 = crystallite_F0
|
crystallite_partionedF0 = crystallite_F0
|
||||||
crystallite_partionedF = crystallite_F0
|
crystallite_partionedF = crystallite_F0
|
||||||
|
|
||||||
call crystallite_orientations()
|
call crystallite_orientations()
|
||||||
crystallite_orientation0 = crystallite_orientation ! store initial orientations for calculation of grain rotations
|
crystallite_orientation0 = crystallite_orientation ! store initial orientations for calculation of grain rotations
|
||||||
|
@ -1428,7 +1428,6 @@ subroutine crystallite_integrateStateRK4()
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
||||||
if (crystallite_todo(g,i,e)) &
|
if (crystallite_todo(g,i,e)) &
|
||||||
!***dirty way to pass orientation information
|
|
||||||
call constitutive_microstructure(crystallite_orientation, &
|
call constitutive_microstructure(crystallite_orientation, &
|
||||||
crystallite_Fe(1:3,1:3,g,i,e), &
|
crystallite_Fe(1:3,1:3,g,i,e), &
|
||||||
crystallite_Fp(1:3,1:3,g,i,e), &
|
crystallite_Fp(1:3,1:3,g,i,e), &
|
||||||
|
@ -1754,7 +1753,6 @@ subroutine crystallite_integrateStateRKCK45()
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
||||||
if (crystallite_todo(g,i,e)) &
|
if (crystallite_todo(g,i,e)) &
|
||||||
!***dirty way to pass orientations to constitutive_microstructure
|
|
||||||
call constitutive_microstructure(crystallite_orientation, &
|
call constitutive_microstructure(crystallite_orientation, &
|
||||||
crystallite_Fe(1:3,1:3,g,i,e), &
|
crystallite_Fe(1:3,1:3,g,i,e), &
|
||||||
crystallite_Fp(1:3,1:3,g,i,e), &
|
crystallite_Fp(1:3,1:3,g,i,e), &
|
||||||
|
@ -1974,7 +1972,6 @@ subroutine crystallite_integrateStateRKCK45()
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
||||||
if (crystallite_todo(g,i,e)) &
|
if (crystallite_todo(g,i,e)) &
|
||||||
!***dirty way to pass orientations to constitutive_microstructure
|
|
||||||
call constitutive_microstructure(crystallite_orientation, &
|
call constitutive_microstructure(crystallite_orientation, &
|
||||||
crystallite_Fe(1:3,1:3,g,i,e), &
|
crystallite_Fe(1:3,1:3,g,i,e), &
|
||||||
crystallite_Fp(1:3,1:3,g,i,e), &
|
crystallite_Fp(1:3,1:3,g,i,e), &
|
||||||
|
@ -2209,7 +2206,6 @@ subroutine crystallite_integrateStateAdaptiveEuler()
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
||||||
if (crystallite_todo(g,i,e)) &
|
if (crystallite_todo(g,i,e)) &
|
||||||
!***dirty way to pass orientations to constitutive_microstructure
|
|
||||||
call constitutive_microstructure(crystallite_orientation, &
|
call constitutive_microstructure(crystallite_orientation, &
|
||||||
crystallite_Fe(1:3,1:3,g,i,e), &
|
crystallite_Fe(1:3,1:3,g,i,e), &
|
||||||
crystallite_Fp(1:3,1:3,g,i,e), &
|
crystallite_Fp(1:3,1:3,g,i,e), &
|
||||||
|
@ -2553,7 +2549,6 @@ eIter = FEsolving_execElem(1:2)
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
||||||
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) &
|
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) &
|
||||||
!***dirty way to pass orientations to constitutive_microstructure
|
|
||||||
call constitutive_microstructure(crystallite_orientation, &
|
call constitutive_microstructure(crystallite_orientation, &
|
||||||
crystallite_Fe(1:3,1:3,g,i,e), &
|
crystallite_Fe(1:3,1:3,g,i,e), &
|
||||||
crystallite_Fp(1:3,1:3,g,i,e), &
|
crystallite_Fp(1:3,1:3,g,i,e), &
|
||||||
|
@ -2798,7 +2793,6 @@ subroutine crystallite_integrateStateFPI()
|
||||||
!$OMP DO PRIVATE(p,c)
|
!$OMP DO PRIVATE(p,c)
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
||||||
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) &
|
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) &
|
||||||
!***dirty way to pass orientations to constitutive_micrsotructure
|
|
||||||
call constitutive_microstructure(crystallite_orientation, &
|
call constitutive_microstructure(crystallite_orientation, &
|
||||||
crystallite_Fe(1:3,1:3,g,i,e), &
|
crystallite_Fe(1:3,1:3,g,i,e), &
|
||||||
crystallite_Fp(1:3,1:3,g,i,e), &
|
crystallite_Fp(1:3,1:3,g,i,e), &
|