From a56f720e36e103335d81ab4b5aa2b5bb3baef054 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 2 Feb 2016 18:59:04 +0100 Subject: [PATCH 1/5] LAPACK version as backup when analytic eigenvalues fail --- code/math.f90 | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/code/math.f90 b/code/math.f90 index 7e090de02..47c7da175 100644 --- a/code/math.f90 +++ b/code/math.f90 @@ -1936,8 +1936,8 @@ end subroutine math_spectralDecompositionSym !-------------------------------------------------------------------------------------------------- -!> @brief eigenvalues and eigenvectors of symmetric 3x3 matrix m using an analytical expression -!> and the general LAPACK powered version as fallback +!> @brief eigenvalues and eigenvectors of symmetric 33 matrix m using an analytical expression +!> and the general LAPACK powered version for arbritrary sized matrices as fallback !> @author Joachim Kopp, Max–Planck–Institut für Kernphysik, Heidelberg (Copyright (C) 2006) !> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH !> @details See http://arxiv.org/abs/physics/0610206 (DSYEVH3) @@ -1958,7 +1958,7 @@ subroutine math_spectralDecompositionSym33(m,values,vectors) m(1, 2)**2_pInt] T = maxval(abs(values)) - U = MAX(T, T**2_pInt) + U = max(T, T**2_pInt) threshold = sqrt(5.0e-14_pReal * U**2_pInt) ! Calculate first eigenvector by the formula v[0] = (m - lambda[0]).e1 x (m - lambda[0]).e2 @@ -2051,35 +2051,35 @@ end function math_eigenvaluesSym !-------------------------------------------------------------------------------------------------- -!> @brief Eigenvalues of symmetric 33 matrix m +!> @brief eigenvalues of symmetric 33 matrix m using an analytical expression +!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH +!> @details similar to http://arxiv.org/abs/physics/0610206 (DSYEVC3) +!> but apparently more stable solution and has general LAPACK powered version for arbritrary sized +!> matrices as fallback !-------------------------------------------------------------------------------------------------- function math_eigenvaluesSym33(m) implicit none real(pReal), intent(in), dimension(3,3) :: m - real(pReal), dimension(3) :: math_eigenvaluesSym33, invariants - real(pReal) :: R, S, T, P, Q, rho, phi + real(pReal), dimension(3) :: math_eigenvaluesSym33,invariants + real(pReal) :: P, Q, rho, phi real(pReal), parameter :: TOL=1.e-14_pReal invariants = math_invariantsSym33(m) - R=-invariants(1) - S= invariants(2) - T=-invariants(3) + P = invariants(2)-invariants(1)**2.0_pReal/3.0_pReal + Q = -2.0_pReal/27.0_pReal*invariants(1)**3.0_pReal+product(invariants(1:2))/3.0_pReal-invariants(3) - P=S-R**2.0_pReal/3.0_pReal - Q=2.0_pReal/27.0_pReal*R**3.0_pReal-R*S/3.0_pReal+T - - if((abs(P) < TOL) .and. (abs(Q) < TOL)) then - math_eigenvaluesSym33 = invariants(1)/3.0_pReal + if(any(abs([p,q]) < TOL)) then + math_eigenvaluesSym33 = math_eigenvaluesSym(m) else rho=sqrt(-3.0_pReal*P**3.0_pReal)/9.0_pReal - phi=acos(math_limit(-Q/rho/2.0_pReal,-1.0_pReal,1.0_pReal)) + phi=acos(math_limit(-Q/rho*0.5_pReal,-1.0_pReal,1.0_pReal)) math_eigenvaluesSym33 = 2.0_pReal*rho**(1.0_pReal/3.0_pReal)* & [cos(phi/3.0_pReal), & - cos(phi/3.0_pReal+2.0_pReal/3.0_pReal*PI), & - cos(phi/3.0_pReal+4.0_pReal/3.0_pReal*PI) & - ] -R/3.0_pReal + cos((phi+2.0_pReal*PI)/3.0_pReal), & + cos((phi+4.0_pReal*PI)/3.0_pReal) & + ] + invariants(1)/3.0_pReal endif end function math_eigenvaluesSym33 From 23f1344031ce82148eb6f974686f96e61051250c Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 2 Feb 2016 19:55:55 +0100 Subject: [PATCH 2/5] for new versioning --- installation/mods_Abaqus/abaqus_v6.env | 4 +++- installation/mods_Abaqus/abaqus_v6_serial.env | 7 +++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/installation/mods_Abaqus/abaqus_v6.env b/installation/mods_Abaqus/abaqus_v6.env index ccf447c19..b48a5ea05 100644 --- a/installation/mods_Abaqus/abaqus_v6.env +++ b/installation/mods_Abaqus/abaqus_v6.env @@ -12,6 +12,7 @@ # Compile_cpp and link_exe for Abaqus make utility. # import os, re, glob, driverUtils +from damask import version as DAMASKVERSION # Use the version in $PATH fortCmd = "ifort" @@ -34,7 +35,8 @@ compile_fortran = (fortCmd + " -c -fPIC -auto -shared-intel " + "-I%I -I../lib -free -O1 -fpp -openmp " + "-ftz -diag-disable 5268 " + "-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 " + + '-DDAMASKVERSION="%s"'%DAMASKVERSION) # Abaqus/CAE will generate an input file without parts and assemblies. cae_no_parts_input_file=ON diff --git a/installation/mods_Abaqus/abaqus_v6_serial.env b/installation/mods_Abaqus/abaqus_v6_serial.env index 880a3c055..a5384cc26 100644 --- a/installation/mods_Abaqus/abaqus_v6_serial.env +++ b/installation/mods_Abaqus/abaqus_v6_serial.env @@ -12,6 +12,7 @@ # Compile_cpp and link_exe for Abaqus make utility. # import os, re, glob, driverUtils +from damask import version as DAMASKVERSION # Use the version in $PATH fortCmd = "ifort" @@ -29,15 +30,13 @@ fortCmd = "ifort" # -assume byterecl count record length in bytes # -real-size 64 -DFLOAT=8 assume size of real to be 8 bytes, matches our definition of pReal # -integer-size 32 -DINT=4 assume size of integer to be 4 bytes, matches our definition of pInt -# -L/usr/lib64 -L/usr/lib search path for lapack libraries -# -Wl,-rpath=/usr/lib64,-rpath=/usr/lib run path for lapack libraries -# -llapack link against lapack compile_fortran = (fortCmd + " -c -fPIC -auto -shared-intel " + "-I%I -I../lib -free -O1 -fpp " + "-ftz -diag-disable 5268 " + "-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 " + + '-DDAMASKVERSION="%s"'%DAMASKVERSION) # Abaqus/CAE will generate an input file without parts and assemblies. cae_no_parts_input_file=ON From 2a3e42a90697325deb81431cf12bb80c3098a7f2 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 2 Feb 2016 23:24:44 +0100 Subject: [PATCH 3/5] prevent import errors (e.g. when using Abaqus, having it's own python without scipy) --- lib/damask/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/damask/util.py b/lib/damask/util.py index b1a25a03d..b3e35812a 100644 --- a/lib/damask/util.py +++ b/lib/damask/util.py @@ -180,7 +180,6 @@ other codes refers to the source code of minpack.py: ''' from numpy import (array, arcsin, asarray, cos, dot, eye, empty_like, isscalar,finfo, take, triu, transpose, sqrt, sin) -from scipy.optimize import _minpack def _check_func(checker, argname, thefunc, x0, args, numinputs, output_shape=None): @@ -279,6 +278,7 @@ def _ext2intLocal(bound): def leastsqBound(func, x0, args=(), bounds=None, Dfun=None, full_output=0, col_deriv=0, ftol=1.49012e-8, xtol=1.49012e-8, gtol=0.0, maxfev=0, epsfcn=None, factor=100, diag=None): + from scipy.optimize import _minpack ''' An internal parameter list is used to enforce contraints on the fitting parameters. The transfomation is based on that of MINUIT package. From 81a7fcbe6e8ebc696bc7a153cc46b4f8bae01e38 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 2 Feb 2016 23:33:21 +0100 Subject: [PATCH 4/5] escape magic for string macro --- installation/mods_Abaqus/abaqus_v6.env | 2 +- installation/mods_Abaqus/abaqus_v6_serial.env | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/installation/mods_Abaqus/abaqus_v6.env b/installation/mods_Abaqus/abaqus_v6.env index b48a5ea05..ac205d5c7 100644 --- a/installation/mods_Abaqus/abaqus_v6.env +++ b/installation/mods_Abaqus/abaqus_v6.env @@ -36,7 +36,7 @@ compile_fortran = (fortCmd + " -c -fPIC -auto -shared-intel " + "-ftz -diag-disable 5268 " + "-implicitnone -assume byterecl -stand f08 -standard-semantics " + "-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 " + - '-DDAMASKVERSION="%s"'%DAMASKVERSION) + '-DDAMASKVERSION=\\\"%s\\\"'%DAMASKVERSION) # Abaqus/CAE will generate an input file without parts and assemblies. cae_no_parts_input_file=ON diff --git a/installation/mods_Abaqus/abaqus_v6_serial.env b/installation/mods_Abaqus/abaqus_v6_serial.env index a5384cc26..94e065e08 100644 --- a/installation/mods_Abaqus/abaqus_v6_serial.env +++ b/installation/mods_Abaqus/abaqus_v6_serial.env @@ -36,7 +36,7 @@ compile_fortran = (fortCmd + " -c -fPIC -auto -shared-intel " + "-ftz -diag-disable 5268 " + "-implicitnone -assume byterecl -stand f08 -standard-semantics " + "-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 " + - '-DDAMASKVERSION="%s"'%DAMASKVERSION) + '-DDAMASKVERSION=\\\"%s\\\"'%DAMASKVERSION) # Abaqus/CAE will generate an input file without parts and assemblies. cae_no_parts_input_file=ON From 08150564cf045b3b3fc75d2329c4866c94460ca4 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 2 Feb 2016 23:34:42 +0100 Subject: [PATCH 5/5] added info like in spectral solver --- code/DAMASK_abaqus_exp.f | 14 ++++++++++++-- code/DAMASK_abaqus_std.f | 11 ++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/code/DAMASK_abaqus_exp.f b/code/DAMASK_abaqus_exp.f index 537a3d82f..eff898e3e 100644 --- a/code/DAMASK_abaqus_exp.f +++ b/code/DAMASK_abaqus_exp.f @@ -35,14 +35,24 @@ contains !> @brief just reporting !-------------------------------------------------------------------------------------------------- subroutine DAMASK_interface_init - + integer, dimension(8) :: & + dateAndTime ! type default integer + call date_and_time(values = dateAndTime) write(6,'(/,a)') ' <<<+- DAMASK_abaqus_exp -+>>>' + write(6,'(/,a)') ' Version: '//DAMASKVERSION + write(6,'(a,2(i2.2,a),i4.4)') ' Date: ',dateAndTime(3),'/',& + dateAndTime(2),'/',& + dateAndTime(1) + write(6,'(a,2(i2.2,a),i2.2)') ' Time: ',dateAndTime(5),':',& + dateAndTime(6),':',& + dateAndTime(7) write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>' -#include "compilation_info.f90" +#include "compilation_info.f90" end subroutine DAMASK_interface_init + !-------------------------------------------------------------------------------------------------- !> @brief using Abaqus/Explicit function to get working directory name !-------------------------------------------------------------------------------------------------- diff --git a/code/DAMASK_abaqus_std.f b/code/DAMASK_abaqus_std.f index 1de3b249a..faec60650 100644 --- a/code/DAMASK_abaqus_std.f +++ b/code/DAMASK_abaqus_std.f @@ -35,8 +35,17 @@ contains !> @brief just reporting !-------------------------------------------------------------------------------------------------- subroutine DAMASK_interface_init - + integer, dimension(8) :: & + dateAndTime ! type default integer + call date_and_time(values = dateAndTime) write(6,'(/,a)') ' <<<+- DAMASK_abaqus_std -+>>>' + write(6,'(/,a)') ' Version: '//DAMASKVERSION + write(6,'(a,2(i2.2,a),i4.4)') ' Date: ',dateAndTime(3),'/',& + dateAndTime(2),'/',& + dateAndTime(1) + write(6,'(a,2(i2.2,a),i2.2)') ' Time: ',dateAndTime(5),':',& + dateAndTime(6),':',& + dateAndTime(7) write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>' #include "compilation_info.f90"