Merge branch 'development' into fix_homogenization_restart
This commit is contained in:
commit
0d0aaa0df6
|
@ -84,7 +84,7 @@ for executable in python python3; do
|
||||||
done
|
done
|
||||||
secondLevel "Details on $DEFAULT_PYTHON:"
|
secondLevel "Details on $DEFAULT_PYTHON:"
|
||||||
echo $(ls -la $(which $DEFAULT_PYTHON))
|
echo $(ls -la $(which $DEFAULT_PYTHON))
|
||||||
for module in numpy scipy pandas;do
|
for module in numpy scipy pandas matplotlib yaml h5py;do
|
||||||
thirdLevel $module
|
thirdLevel $module
|
||||||
$DEFAULT_PYTHON -c "import $module; \
|
$DEFAULT_PYTHON -c "import $module; \
|
||||||
print('Version: {}'.format($module.__version__)); \
|
print('Version: {}'.format($module.__version__)); \
|
||||||
|
@ -94,10 +94,6 @@ thirdLevel vtk
|
||||||
$DEFAULT_PYTHON -c "import vtk; \
|
$DEFAULT_PYTHON -c "import vtk; \
|
||||||
print('Version: {}'.format(vtk.vtkVersion.GetVTKVersion())); \
|
print('Version: {}'.format(vtk.vtkVersion.GetVTKVersion())); \
|
||||||
print('Location: {}'.format(vtk.__file__))"
|
print('Location: {}'.format(vtk.__file__))"
|
||||||
thirdLevel h5py
|
|
||||||
$DEFAULT_PYTHON -c "import h5py; \
|
|
||||||
print('Version: {}'.format(h5py.version.version)); \
|
|
||||||
print('Location: {}'.format(h5py.__file__))"
|
|
||||||
|
|
||||||
firstLevel "GNU Compiler Collection"
|
firstLevel "GNU Compiler Collection"
|
||||||
for executable in gcc g++ gfortran ;do
|
for executable in gcc g++ gfortran ;do
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
[SX]
|
|
||||||
type isostrain
|
|
||||||
Ngrains 1
|
|
||||||
{./Homogenization_Damage_NonLocal.config}
|
|
||||||
{./Homogenization_Thermal_Conduction.config}
|
|
||||||
{./Homogenization_VacancyFlux_CahnHilliard.config}
|
|
||||||
{./Homogenization_Porosity_PhaseField.config}
|
|
||||||
{./Homogenization_HydrogenFlux_CahnHilliard.config}
|
|
|
@ -1,9 +1,9 @@
|
||||||
# Kuo, J. C., Mikrostrukturmechanik von Bikristallen mit Kippkorngrenzen. Shaker-Verlag 2004. http://edoc.mpg.de/204079
|
# Kuo, J. C., Mikrostrukturmechanik von Bikristallen mit Kippkorngrenzen. Shaker-Verlag 2004. http://edoc.mpg.de/204079
|
||||||
Aluminum:
|
Aluminum:
|
||||||
mechanics:
|
|
||||||
lattice: aP
|
lattice: aP
|
||||||
elasticity: {C_11: 110.9e9, C_12: 58.34e9, type: hooke}
|
mechanics:
|
||||||
output: [F, P, Fe, Fp, Lp]
|
output: [F, P, F_e, F_p, L_p]
|
||||||
|
elasticity: {type: hooke, C_11: 110.9e9, C_12: 58.34e9}
|
||||||
plasticity:
|
plasticity:
|
||||||
type: isotropic
|
type: isotropic
|
||||||
output: [xi]
|
output: [xi]
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
# Maiti and Eisenlohr 2018 Scripta Materialia
|
|
||||||
Air:
|
Air:
|
||||||
mechanics:
|
|
||||||
lattice: aP
|
lattice: aP
|
||||||
elasticity: {C_11: 10e9, C_12: 0.0, type: hooke}
|
mechanics:
|
||||||
output: [F, P, Fe, Fp, Lp]
|
output: [F, P, F_e, F_p, L_p]
|
||||||
|
elasticity: {type: hooke, C_11: 1e8, C_12: 1e6}
|
||||||
plasticity:
|
plasticity:
|
||||||
type: isotropic
|
type: isotropic
|
||||||
output: [xi]
|
output: [xi]
|
||||||
|
@ -14,4 +13,4 @@ Air:
|
||||||
M: 3
|
M: 3
|
||||||
h_0: 1e6
|
h_0: 1e6
|
||||||
a: 2
|
a: 2
|
||||||
dilatation: true
|
dilatation: True
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
[Aluminum]
|
|
||||||
elasticity hooke
|
|
||||||
plasticity phenopowerlaw
|
|
||||||
|
|
||||||
(output) resistance_slip
|
|
||||||
(output) accumulatedshear_slip
|
|
||||||
|
|
||||||
lattice_structure fcc
|
|
||||||
Nslip 12 # per family
|
|
||||||
|
|
||||||
c11 106.75e9
|
|
||||||
c12 60.41e9
|
|
||||||
c44 28.34e9
|
|
||||||
|
|
||||||
gdot0_slip 0.001
|
|
||||||
n_slip 20
|
|
||||||
tau0_slip 31e6 # per family
|
|
||||||
tausat_slip 63e6 # per family
|
|
||||||
a_slip 2.25
|
|
||||||
h0_slipslip 75e6
|
|
||||||
interaction_slipslip 1 1 1.4 1.4 1.4 1.4
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
Aluminum:
|
||||||
|
lattice: cF
|
||||||
|
mechanics:
|
||||||
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
|
elasticity: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke}
|
||||||
|
plasticity:
|
||||||
|
N_sl: [12]
|
||||||
|
a_sl: 2.25
|
||||||
|
dot_gamma_0_sl: 0.001
|
||||||
|
h_0_sl_sl: 75e6
|
||||||
|
h_sl_sl: [1, 1, 1.4, 1.4, 1.4, 1.4]
|
||||||
|
n_sl: 20
|
||||||
|
output: [xi_sl, gamma_sl]
|
||||||
|
type: phenopowerlaw
|
||||||
|
xi_0_sl: [31e6]
|
||||||
|
xi_inf_sl: [63e6]
|
|
@ -2,8 +2,8 @@
|
||||||
# Tasan et.al. 2015 International Journal of Plasticity
|
# Tasan et.al. 2015 International Journal of Plasticity
|
||||||
# Diehl et.al. 2015 Meccanica
|
# Diehl et.al. 2015 Meccanica
|
||||||
Ferrite:
|
Ferrite:
|
||||||
mechanics:
|
|
||||||
lattice: cI
|
lattice: cI
|
||||||
|
mechanics:
|
||||||
elasticity: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: hooke}
|
elasticity: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: hooke}
|
||||||
plasticity:
|
plasticity:
|
||||||
N_sl: [12, 12]
|
N_sl: [12, 12]
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# Tasan et.al. 2015 International Journal of Plasticity
|
# Tasan et.al. 2015 International Journal of Plasticity
|
||||||
# Diehl et.al. 2015 Meccanica
|
# Diehl et.al. 2015 Meccanica
|
||||||
Martensite:
|
Martensite:
|
||||||
mechanics:
|
|
||||||
lattice: cI
|
lattice: cI
|
||||||
|
mechanics:
|
||||||
elasticity: {C_11: 417.4e9, C_12: 242.4e9, C_44: 211.1e9, type: hooke}
|
elasticity: {C_11: 417.4e9, C_12: 242.4e9, C_44: 211.1e9, type: hooke}
|
||||||
plasticity:
|
plasticity:
|
||||||
N_sl: [12, 12]
|
N_sl: [12, 12]
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
# parameters fitted by D. Ma to:
|
|
||||||
# I. Kovács, G. Vörös
|
|
||||||
# On the mathematical description of the tensile stress-strain curves of polycrystalline face centered cubic metals
|
|
||||||
# International Journal of Plasticity, Volume 12, Issue 1, 1996, Pages 35–43
|
|
||||||
# DOI: 10.1016/S0749-6419(95)00043-7
|
|
||||||
|
|
||||||
[gold_phenopowerlaw]
|
|
||||||
elasticity hooke
|
|
||||||
plasticity phenopowerlaw
|
|
||||||
|
|
||||||
(output) resistance_slip
|
|
||||||
|
|
||||||
lattice_structure fcc
|
|
||||||
Nslip 12 # per family
|
|
||||||
|
|
||||||
c11 191.0e9
|
|
||||||
c12 162.0e9
|
|
||||||
c44 42.20e9
|
|
||||||
|
|
||||||
gdot0_slip 0.001
|
|
||||||
n_slip 83.3
|
|
||||||
tau0_slip 26.25e6 # per family
|
|
||||||
tausat_slip 53.00e6 # per family
|
|
||||||
a_slip 1.0
|
|
||||||
h0_slipslip 75e6
|
|
||||||
interaction_slipslip 1 1 1.4 1.4 1.4 1.4
|
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
# parameters fitted by D. Ma to:
|
||||||
|
# On the mathematical description of the tensile stress-strain curves of polycrystalline face centered cubic metals
|
||||||
|
# International Journal of Plasticity, Volume 12, Issue 1, 1996, Pages 35-43
|
||||||
|
# DOI: 10.1016/S0749-6419(95)00043-7
|
||||||
|
|
||||||
|
Gold:
|
||||||
|
lattice: cF
|
||||||
|
mechanics:
|
||||||
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
|
elasticity: {type: hooke, C_11: 191e9, C_12: 162e9, C_44: 42.2e9}
|
||||||
|
plasticity:
|
||||||
|
type: phenopowerlaw
|
||||||
|
output: [xi_sl]
|
||||||
|
N_sl: [12]
|
||||||
|
n_sl: 83
|
||||||
|
dot_gamma_0_sl: 0.001
|
||||||
|
h_0_sl_sl: 75e6
|
||||||
|
h_sl_sl: [1, 1, 1.4, 1.4, 1.4, 1.4]
|
||||||
|
a_sl: 1.0
|
||||||
|
xi_0_sl: [26e6]
|
||||||
|
xi_inf_sl: [53e6]
|
|
@ -1,56 +0,0 @@
|
||||||
#-------------------#
|
|
||||||
<phase>
|
|
||||||
#-------------------#
|
|
||||||
/echo/
|
|
||||||
[Mg]
|
|
||||||
plasticity phenopowerlaw
|
|
||||||
elasticity hooke
|
|
||||||
|
|
||||||
(output) resistance_slip
|
|
||||||
(output) resistance_twin
|
|
||||||
|
|
||||||
lattice_structure hex
|
|
||||||
c/a 1.62350 # from Tromans 2011, Elastic Anisotropy of HCP Metal Crystals and Polycrystals
|
|
||||||
c11 59.3e9 # - " -
|
|
||||||
c33 61.5e9 # - " -
|
|
||||||
c44 16.4e9 # - " -
|
|
||||||
c12 25.7e9 # - " -
|
|
||||||
c13 21.4e9 # - " -
|
|
||||||
|
|
||||||
# basal prism prism pyr(a) pyr(c+a) pyr(c+a)
|
|
||||||
Nslip 3 3 0 6 0 6 # from Agnew et al 2006, Validating a polycrystal model for the elastoplastic response of mg alloy AZ32 using in situ neutron diffraction
|
|
||||||
# T1 C1 T2 C2
|
|
||||||
Ntwin 6 0 0 6 # - " -
|
|
||||||
# basal prism prism pyr(a) pyr(c+a) pyr(c+a)
|
|
||||||
tau0_slip 10.0e6 55.0e6 0 60.0e6 0.0 60.0e6 # - " - table 1, pyr(a) set to pyr(c+a)
|
|
||||||
tausat_slip 40.0e6 135.0e6 0 150.0e6 0.0 150.0e6 # - " - table 1, pyr(a) set to pyr(c+a)
|
|
||||||
# T1 C1 T2 C2
|
|
||||||
tau0_twin 40e6 0.0 0.0 60.0e6 # - " - table 1, compressive twin guessed by Steffi, tensile twin modified to match experimental results
|
|
||||||
|
|
||||||
h0_twintwin 50.0e6 # - " - table 1, same range as theta_0
|
|
||||||
h0_slipslip 500.0e6 # - " - table 1, same range as theta_0
|
|
||||||
h0_twinslip 150.0e6 # guessing
|
|
||||||
|
|
||||||
interaction_slipslip 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 # just guessing
|
|
||||||
interaction_twintwin 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 # - " -
|
|
||||||
interaction_sliptwin 1 1 1 1 1 1 1 1 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 1 1 1 1 1 1 1 1 # - " -
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################################################
|
|
||||||
# open for discussion
|
|
||||||
####################################################
|
|
||||||
n_twin 20
|
|
||||||
n_slip 20
|
|
||||||
|
|
||||||
gdot0_twin 0.001
|
|
||||||
gdot0_slip 0.001
|
|
||||||
|
|
||||||
twin_b 0
|
|
||||||
twin_c 0
|
|
||||||
twin_d 20
|
|
||||||
twin_e 20
|
|
||||||
|
|
||||||
a_slip 2.25
|
|
||||||
s_pr 10.0 # push-up factor for slip saturation due to twinning
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Tromans 2011, Elastic Anisotropy of HCP Metal Crystals and Polycrystals
|
||||||
|
Magnesium:
|
||||||
|
lattice: hP
|
||||||
|
c/a: 1.62350
|
||||||
|
mechanics:
|
||||||
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
|
elasticity: {C_11: 59.3e9, C_12: 25.7e9, C_13: 21.4e9, C_33: 61.5e9, C_44: 16.4e9, type: hooke}
|
||||||
|
plasticity:
|
||||||
|
N_sl: [3, 3, 0, 6, 0, 6]
|
||||||
|
N_tw: [6, 0, 0, 6]
|
||||||
|
h_0_tw_tw: 50.0e6
|
||||||
|
h_0_sl_sl: 500.0e6
|
||||||
|
h_0_tw_sl: 150.0e6
|
||||||
|
h_sl_sl: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||||
|
h_tw_tw: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||||
|
h_sl_tw: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||||
|
h_tw_sl: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||||
|
output: [xi_sl, xi_tw]
|
||||||
|
type: phenopowerlaw
|
||||||
|
xi_0_sl: [10.0e6, 55.0e6, 0, 60.0e6, 0.0, 60.0e6]
|
||||||
|
xi_inf_sl: [40.0e6, 135.0e6, 0, 150.0e6, 0.0, 150.0e6]
|
||||||
|
xi_0_tw: [40e6, 0.0, 0.0, 60.0e6]
|
||||||
|
####################################################
|
||||||
|
# open for discussion
|
||||||
|
####################################################
|
||||||
|
a_sl: 2.25
|
||||||
|
dot_gamma_0_sl: 0.001
|
||||||
|
dot_gamma_0_tw: 0.001
|
||||||
|
n_sl: 20
|
||||||
|
n_tw: 20
|
||||||
|
f_sl_sat_tw: 10.0
|
|
@ -1,23 +0,0 @@
|
||||||
[cpTi-alpha]
|
|
||||||
plasticity phenopowerlaw
|
|
||||||
elasticity hooke
|
|
||||||
|
|
||||||
lattice_structure hex
|
|
||||||
covera_ratio 1.587
|
|
||||||
|
|
||||||
# M. Levy, Handbook of Elastic Properties of Solids, Liquids, and Gases (2001)
|
|
||||||
c11 160.0e9
|
|
||||||
c12 90.0e9
|
|
||||||
c13 66.0e9
|
|
||||||
c33 181.7e9
|
|
||||||
c44 46.5e9
|
|
||||||
# C. Zambaldi, "Orientation informed nanoindentation of a-titanium: Indentation pileup in hexagonal metals deforming by prismatic slip", J. Mater. Res., Vol. 27, No. 1, Jan 14, 2012
|
|
||||||
gdot0_slip 0.001
|
|
||||||
n_slip 20
|
|
||||||
nslip 3 3 0 6
|
|
||||||
tau0_slip 349.3e6 150e6 0 1107.9e6
|
|
||||||
tausat_slip 568.6e6 1502.2e6 0 3420.1e6
|
|
||||||
a_slip 2
|
|
||||||
h0_slipslip 15e6
|
|
||||||
|
|
||||||
interaction_slipslip 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# M. Levy, Handbook of Elastic Properties of Solids, Liquids, and Gases (2001)
|
||||||
|
# C. Zambaldi, "Orientation informed nanoindentation of a-titanium: Indentation pileup in hexagonal metals deforming by prismatic slip", J. Mater. Res., Vol. 27, No. 1, Jan 14, 2012
|
||||||
|
Ti-alpha:
|
||||||
|
lattice: hP
|
||||||
|
c/a: 1.587
|
||||||
|
mechanics:
|
||||||
|
output: [F, P, F_e, F_p, L_p, O]
|
||||||
|
elasticity: {C_11: 160.0e9, C_12: 90.0e9, C_13: 66.0e9, C_33: 181.7e9, C_44: 46.5e9, type: hooke}
|
||||||
|
plasticity:
|
||||||
|
N_sl: [3, 3, 0, 0, 12]
|
||||||
|
a_sl: 2.0
|
||||||
|
dot_gamma_0_sl: 0.001
|
||||||
|
h_0_sl_sl: 200e6
|
||||||
|
h_sl_sl: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||||
|
n_sl: 20
|
||||||
|
output: [gamma_sl]
|
||||||
|
type: phenopowerlaw
|
||||||
|
xi_0_sl: [349e6, 150e6, 0, 0, 1107e6]
|
||||||
|
xi_inf_sl: [568e6, 1502e6, 0, 0, 3420e6]
|
|
@ -1,2 +0,0 @@
|
||||||
[001]
|
|
||||||
(gauss) phi1 0.000 Phi 0.000 phi2 0.000
|
|
|
@ -1,2 +0,0 @@
|
||||||
[101]
|
|
||||||
(gauss) phi1 0.000 Phi 45.000 phi2 90.000
|
|
|
@ -1,2 +0,0 @@
|
||||||
[111]
|
|
||||||
(gauss) phi1 0.000 Phi 54.7356 phi2 45.000
|
|
|
@ -1,2 +0,0 @@
|
||||||
[123]
|
|
||||||
(gauss) phi1 209.805 Phi 29.206 phi2 63.435
|
|
|
@ -1,20 +0,0 @@
|
||||||
# The material.config file needs to specify five parts:
|
|
||||||
# homogenization, microstructure, crystallite, phase, and texture.
|
|
||||||
# You can either put the full text in here or include suited separate files
|
|
||||||
|
|
||||||
<homogenization>
|
|
||||||
{./Homogenization_Isostrain_SX.config}
|
|
||||||
|
|
||||||
<microstructure>
|
|
||||||
[one_only]
|
|
||||||
crystallite 1
|
|
||||||
(constituent) phase 1 texture 1 fraction 1.0
|
|
||||||
|
|
||||||
<crystallite>
|
|
||||||
{./Crystallite_All.config}
|
|
||||||
|
|
||||||
<phase>
|
|
||||||
{./Phase_Phenopowerlaw_Aluminum.config}
|
|
||||||
|
|
||||||
<texture>
|
|
||||||
{./Texture_Gauss_001.config}
|
|
|
@ -3,6 +3,7 @@ import numpy as np
|
||||||
from . import Config
|
from . import Config
|
||||||
from . import Rotation
|
from . import Rotation
|
||||||
from . import Orientation
|
from . import Orientation
|
||||||
|
from . import util
|
||||||
|
|
||||||
class ConfigMaterial(Config):
|
class ConfigMaterial(Config):
|
||||||
"""Material configuration."""
|
"""Material configuration."""
|
||||||
|
@ -46,7 +47,7 @@ class ConfigMaterial(Config):
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_table(table,constituents={},**kwargs):
|
def from_table(table,**kwargs):
|
||||||
"""
|
"""
|
||||||
Load from an ASCII table.
|
Load from an ASCII table.
|
||||||
|
|
||||||
|
@ -54,12 +55,9 @@ class ConfigMaterial(Config):
|
||||||
----------
|
----------
|
||||||
table : damask.Table
|
table : damask.Table
|
||||||
Table that contains material information.
|
Table that contains material information.
|
||||||
constituents : dict, optional
|
|
||||||
Entries for 'constituents'. The key is the name and the value specifies
|
|
||||||
the label of the data column in the table
|
|
||||||
**kwargs
|
**kwargs
|
||||||
Keyword arguments where the key is the name and the value specifies
|
Keyword arguments where the key is the name and the value specifies
|
||||||
the label of the data column in the table
|
the label of the data column in the table.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
|
@ -70,7 +68,8 @@ class ConfigMaterial(Config):
|
||||||
pos pos pos qu qu qu qu phase homog
|
pos pos pos qu qu qu qu phase homog
|
||||||
0 0 0 0 0.19 0.8 0.24 -0.51 Aluminum SX
|
0 0 0 0 0.19 0.8 0.24 -0.51 Aluminum SX
|
||||||
1 1 0 0 0.8 0.19 0.24 -0.51 Steel SX
|
1 1 0 0 0.8 0.19 0.24 -0.51 Steel SX
|
||||||
>>> cm.from_table(t,{'O':'qu','phase':'phase'},homogenization='homog')
|
1 1 1 0 0.8 0.19 0.24 -0.51 Steel SX
|
||||||
|
>>> cm.from_table(t,O='qu',phase='phase',homogenization='homog')
|
||||||
material:
|
material:
|
||||||
- constituents:
|
- constituents:
|
||||||
- O: [0.19, 0.8, 0.24, -0.51]
|
- O: [0.19, 0.8, 0.24, -0.51]
|
||||||
|
@ -86,16 +85,13 @@ class ConfigMaterial(Config):
|
||||||
phase: {}
|
phase: {}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
constituents_ = {k:table.get(v) for k,v in constituents.items()}
|
|
||||||
kwargs_ = {k:table.get(v) for k,v in kwargs.items()}
|
kwargs_ = {k:table.get(v) for k,v in kwargs.items()}
|
||||||
|
|
||||||
_,idx = np.unique(np.hstack(list({**constituents_,**kwargs_}.values())),return_index=True,axis=0)
|
_,idx = np.unique(np.hstack(list(kwargs_.values())),return_index=True,axis=0)
|
||||||
|
|
||||||
idx = np.sort(idx)
|
idx = np.sort(idx)
|
||||||
constituents_ = {k:np.atleast_1d(v[idx].squeeze()) for k,v in constituents_.items()}
|
|
||||||
kwargs_ = {k:np.atleast_1d(v[idx].squeeze()) for k,v in kwargs_.items()}
|
kwargs_ = {k:np.atleast_1d(v[idx].squeeze()) for k,v in kwargs_.items()}
|
||||||
|
|
||||||
return ConfigMaterial().material_add(constituents_,**kwargs_)
|
return ConfigMaterial().material_add(**kwargs_)
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -103,7 +99,6 @@ class ConfigMaterial(Config):
|
||||||
"""Check for completeness."""
|
"""Check for completeness."""
|
||||||
ok = True
|
ok = True
|
||||||
for top_level in ['homogenization','phase','material']:
|
for top_level in ['homogenization','phase','material']:
|
||||||
# ToDo: With python 3.8 as prerequisite we can shorten with :=
|
|
||||||
ok &= top_level in self
|
ok &= top_level in self
|
||||||
if top_level not in self: print(f'{top_level} entry missing')
|
if top_level not in self: print(f'{top_level} entry missing')
|
||||||
|
|
||||||
|
@ -154,7 +149,7 @@ class ConfigMaterial(Config):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_valid(self):
|
def is_valid(self):
|
||||||
"""Check for valid file layout."""
|
"""Check for valid content."""
|
||||||
ok = True
|
ok = True
|
||||||
|
|
||||||
if 'phase' in self:
|
if 'phase' in self:
|
||||||
|
@ -163,8 +158,7 @@ class ConfigMaterial(Config):
|
||||||
try:
|
try:
|
||||||
Orientation(lattice=v['lattice'])
|
Orientation(lattice=v['lattice'])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
s = v['lattice']
|
print(f"Invalid lattice '{v['lattice']}' in phase '{k}'")
|
||||||
print(f"Invalid lattice: '{s}' in phase '{k}'")
|
|
||||||
ok = False
|
ok = False
|
||||||
|
|
||||||
if 'material' in self:
|
if 'material' in self:
|
||||||
|
@ -172,16 +166,15 @@ class ConfigMaterial(Config):
|
||||||
if 'constituents' in m:
|
if 'constituents' in m:
|
||||||
v = 0.0
|
v = 0.0
|
||||||
for c in m['constituents']:
|
for c in m['constituents']:
|
||||||
v+= float(c['v'])
|
v += float(c['v'])
|
||||||
if 'O' in c:
|
if 'O' in c:
|
||||||
try:
|
try:
|
||||||
Rotation.from_quaternion(c['O'])
|
Rotation.from_quaternion(c['O'])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
o = c['O']
|
print(f"Invalid orientation '{c['O']}' in material '{i}'")
|
||||||
print(f"Invalid orientation: '{o}' in material '{i}'")
|
|
||||||
ok = False
|
ok = False
|
||||||
if not np.isclose(v,1.0):
|
if not np.isclose(v,1.0):
|
||||||
print(f"Invalid total fraction (v) '{v}' in material '{i}'")
|
print(f"Total fraction v = {v} ≠ 1 in material '{i}'")
|
||||||
ok = False
|
ok = False
|
||||||
|
|
||||||
return ok
|
return ok
|
||||||
|
@ -200,10 +193,15 @@ class ConfigMaterial(Config):
|
||||||
constituent: list of ints, optional
|
constituent: list of ints, optional
|
||||||
Limit renaming to selected constituents.
|
Limit renaming to selected constituents.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
cfg : damask.ConfigMaterial
|
||||||
|
Updated material configuration.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
dup = self.copy()
|
dup = self.copy()
|
||||||
for i,m in enumerate(dup['material']):
|
for i,m in enumerate(dup['material']):
|
||||||
if ID and i not in ID: continue
|
if ID is not None and i not in ID: continue
|
||||||
for c in m['constituents']:
|
for c in m['constituents']:
|
||||||
if constituent is not None and c not in constituent: continue
|
if constituent is not None and c not in constituent: continue
|
||||||
try:
|
try:
|
||||||
|
@ -224,10 +222,15 @@ class ConfigMaterial(Config):
|
||||||
ID: list of ints, optional
|
ID: list of ints, optional
|
||||||
Limit renaming to selected homogenization IDs.
|
Limit renaming to selected homogenization IDs.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
cfg : damask.ConfigMaterial
|
||||||
|
Updated material configuration.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
dup = self.copy()
|
dup = self.copy()
|
||||||
for i,m in enumerate(dup['material']):
|
for i,m in enumerate(dup['material']):
|
||||||
if ID and i not in ID: continue
|
if ID is not None and i not in ID: continue
|
||||||
try:
|
try:
|
||||||
m['homogenization'] = mapping[m['homogenization']]
|
m['homogenization'] = mapping[m['homogenization']]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
@ -235,24 +238,27 @@ class ConfigMaterial(Config):
|
||||||
return dup
|
return dup
|
||||||
|
|
||||||
|
|
||||||
def material_add(self,constituents=None,**kwargs):
|
def material_add(self,**kwargs):
|
||||||
"""
|
"""
|
||||||
Add material entries.
|
Add material entries.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
constituents : dict, optional
|
|
||||||
Entries for 'constituents' as key-value pair.
|
|
||||||
**kwargs
|
**kwargs
|
||||||
Key-value pairs.
|
Key-value pairs.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
cfg : damask.ConfigMaterial
|
||||||
|
Updated material configuration.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
|
>>> import numpy as np
|
||||||
>>> import damask
|
>>> import damask
|
||||||
>>> O = damask.Rotation.from_random(3).as_quaternion()
|
>>> m = damask.ConfigMaterial().material_add(phase = ['Aluminum','Steel'],
|
||||||
>>> phase = ['Aluminum','Steel','Aluminum']
|
... O = damask.Rotation.from_random(2),
|
||||||
>>> m = damask.ConfigMaterial().material_add(constituents={'phase':phase,'O':O},
|
... homogenization = 'SX')
|
||||||
... homogenization='SX')
|
|
||||||
>>> m
|
>>> m
|
||||||
material:
|
material:
|
||||||
- constituents:
|
- constituents:
|
||||||
|
@ -265,63 +271,59 @@ class ConfigMaterial(Config):
|
||||||
v: 1.0
|
v: 1.0
|
||||||
phase: Steel
|
phase: Steel
|
||||||
homogenization: SX
|
homogenization: SX
|
||||||
|
homogenization: {}
|
||||||
|
phase: {}
|
||||||
|
|
||||||
|
>>> m = damask.ConfigMaterial().material_add(phase = np.array(['Austenite','Martensite']).reshape(1,2),
|
||||||
|
... O = damask.Rotation.from_random((2,2)),
|
||||||
|
... v = np.array([0.2,0.8]).reshape(1,2),
|
||||||
|
... homogenization = ['A','B'])
|
||||||
|
>>> m
|
||||||
|
material:
|
||||||
- constituents:
|
- constituents:
|
||||||
- O: [0.0886257, -0.144848, 0.615674, -0.769487]
|
- phase: Austenite
|
||||||
v: 1.0
|
O: [0.659802978293224, 0.6953785848195171, 0.22426295326327111, -0.17554139512785227]
|
||||||
phase: Aluminum
|
v: 0.2
|
||||||
homogenization: SX
|
- phase: Martensite
|
||||||
|
O: [0.49356745891301596, 0.2841806579193434, -0.7487679215072818, -0.339085707289975]
|
||||||
|
v: 0.8
|
||||||
|
homogenization: A
|
||||||
|
- constituents:
|
||||||
|
- phase: Austenite
|
||||||
|
O: [0.26542221365204055, 0.7268854930702071, 0.4474726435701472, -0.44828201137283735]
|
||||||
|
v: 0.2
|
||||||
|
- phase: Martensite
|
||||||
|
O: [0.6545817158479885, -0.08004812803625233, -0.6226561293931374, 0.4212059104577611]
|
||||||
|
v: 0.8
|
||||||
|
homogenization: B
|
||||||
homogenization: {}
|
homogenization: {}
|
||||||
phase: {}
|
phase: {}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
length = -1
|
N,n,shaped = 1,1,{}
|
||||||
for v in kwargs.values():
|
|
||||||
if hasattr(v,'__len__') and not isinstance(v,str):
|
|
||||||
if length != -1 and len(v) != length:
|
|
||||||
raise ValueError('Cannot add entries of different length')
|
|
||||||
else:
|
|
||||||
length = len(v)
|
|
||||||
length = max(1,length)
|
|
||||||
|
|
||||||
c = [{} for _ in range(length)] if constituents is None else \
|
|
||||||
[{'constituents':u} for u in ConfigMaterial._constituents(**constituents)]
|
|
||||||
|
|
||||||
if len(c) == 1: c = [c[0] for _ in range(length)]
|
|
||||||
|
|
||||||
if length != 1 and length != len(c):
|
|
||||||
raise ValueError('Cannot add entries of different length')
|
|
||||||
|
|
||||||
for k,v in kwargs.items():
|
for k,v in kwargs.items():
|
||||||
if hasattr(v,'__len__') and not isinstance(v,str):
|
shaped[k] = np.array(v)
|
||||||
for i,vv in enumerate(v):
|
s = shaped[k].shape[:-1] if k=='O' else shaped[k].shape
|
||||||
c[i][k] = vv.item() if isinstance(vv,np.generic) else vv
|
N = max(N,s[0]) if len(s)>0 else N
|
||||||
|
n = max(n,s[1]) if len(s)>1 else n
|
||||||
|
|
||||||
|
mat = [{'constituents':[{} for _ in range(n)]} for _ in range(N)]
|
||||||
|
|
||||||
|
if 'v' not in kwargs:
|
||||||
|
shaped['v'] = np.broadcast_to(1/n,(N,n))
|
||||||
|
|
||||||
|
for k,v in shaped.items():
|
||||||
|
target = (N,n,4) if k=='O' else (N,n)
|
||||||
|
obj = np.broadcast_to(v.reshape(util.shapeshifter(v.shape,target,mode='right')),target)
|
||||||
|
for i in range(N):
|
||||||
|
if k in ['phase','O','v']:
|
||||||
|
for j in range(n):
|
||||||
|
mat[i]['constituents'][j][k] = obj[i,j].item() if isinstance(obj[i,j],np.generic) else obj[i,j]
|
||||||
else:
|
else:
|
||||||
for i in range(len(c)):
|
mat[i][k] = obj[i,0].item() if isinstance(obj[i,0],np.generic) else obj[i,0]
|
||||||
c[i][k] = v
|
|
||||||
dup = self.copy()
|
dup = self.copy()
|
||||||
dup['material'] = dup['material'] + c if 'material' in dup else c
|
dup['material'] = dup['material'] + mat if 'material' in dup else mat
|
||||||
|
|
||||||
return dup
|
return dup
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _constituents(N=1,**kwargs):
|
|
||||||
"""Construct list of constituents."""
|
|
||||||
N_material=1
|
|
||||||
for v in kwargs.values():
|
|
||||||
if hasattr(v,'__len__') and not isinstance(v,str): N_material = len(v)
|
|
||||||
|
|
||||||
if N == 1:
|
|
||||||
m = [[{'v':1.0}] for _ in range(N_material)]
|
|
||||||
for k,v in kwargs.items():
|
|
||||||
if hasattr(v,'__len__') and not isinstance(v,str):
|
|
||||||
if len(v) != N_material:
|
|
||||||
raise ValueError('Cannot add entries of different length')
|
|
||||||
for i,vv in enumerate(np.array(v)):
|
|
||||||
m[i][0][k] = vv.item() if isinstance(vv,np.generic) else vv
|
|
||||||
else:
|
|
||||||
for i in range(N_material):
|
|
||||||
m[i][0][k] = v
|
|
||||||
return m
|
|
||||||
else:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
|
@ -122,7 +122,7 @@ class Grid:
|
||||||
|
|
||||||
@size.setter
|
@size.setter
|
||||||
def size(self,size):
|
def size(self,size):
|
||||||
if len(size) != 3 or any(np.array(size) <= 0):
|
if len(size) != 3 or any(np.array(size) < 0):
|
||||||
raise ValueError(f'invalid size {size}')
|
raise ValueError(f'invalid size {size}')
|
||||||
else:
|
else:
|
||||||
self._size = np.array(size)
|
self._size = np.array(size)
|
||||||
|
@ -202,7 +202,7 @@ class Grid:
|
||||||
Geometry file to read.
|
Geometry file to read.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
warnings.warn('Support for ASCII-based geom format will be removed in DAMASK 3.1.0', DeprecationWarning)
|
warnings.warn('Support for ASCII-based geom format will be removed in DAMASK 3.1.0', DeprecationWarning,2)
|
||||||
try:
|
try:
|
||||||
f = open(fname)
|
f = open(fname)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
|
@ -303,7 +303,7 @@ class Grid:
|
||||||
Need to be ordered (1./x fast, 3./z slow).
|
Need to be ordered (1./x fast, 3./z slow).
|
||||||
labels : str or list of str
|
labels : str or list of str
|
||||||
Label(s) of the columns containing the material definition.
|
Label(s) of the columns containing the material definition.
|
||||||
Each unique combintation of values results in one material ID.
|
Each unique combination of values results in one material ID.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cells,size,origin = grid_filters.cellsSizeOrigin_coordinates0_point(table.get(coordinates))
|
cells,size,origin = grid_filters.cellsSizeOrigin_coordinates0_point(table.get(coordinates))
|
||||||
|
@ -541,7 +541,7 @@ class Grid:
|
||||||
Compress geometry with 'x of y' and 'a to b'.
|
Compress geometry with 'x of y' and 'a to b'.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
warnings.warn('Support for ASCII-based geom format will be removed in DAMASK 3.1.0', DeprecationWarning)
|
warnings.warn('Support for ASCII-based geom format will be removed in DAMASK 3.1.0', DeprecationWarning,2)
|
||||||
header = [f'{len(self.comments)+4} header'] + self.comments \
|
header = [f'{len(self.comments)+4} header'] + self.comments \
|
||||||
+ ['grid a {} b {} c {}'.format(*self.cells),
|
+ ['grid a {} b {} c {}'.format(*self.cells),
|
||||||
'size x {} y {} z {}'.format(*self.size),
|
'size x {} y {} z {}'.format(*self.size),
|
||||||
|
@ -760,7 +760,7 @@ class Grid:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if fill is None: fill = np.nanmax(self.material) + 1
|
if fill is None: fill = np.nanmax(self.material) + 1
|
||||||
dtype = float if np.isnan(fill) or int(fill) != fill or self.material.dtype==np.float else int
|
dtype = float if isinstance(fill,float) or self.material.dtype in np.sctypes['float'] else int
|
||||||
|
|
||||||
material = self.material
|
material = self.material
|
||||||
# These rotations are always applied in the reference coordinate system, i.e. (z,x,z) not (z,x',z'')
|
# These rotations are always applied in the reference coordinate system, i.e. (z,x,z) not (z,x',z'')
|
||||||
|
|
|
@ -125,9 +125,18 @@ class Rotation:
|
||||||
return np.logical_not(self==other)
|
return np.logical_not(self==other)
|
||||||
|
|
||||||
|
|
||||||
|
def __array__(self):
|
||||||
|
"""Initializer for numpy."""
|
||||||
|
return self.quaternion
|
||||||
|
|
||||||
|
|
||||||
|
@property
|
||||||
|
def size(self):
|
||||||
|
return self.quaternion[...,0].size
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def shape(self):
|
def shape(self):
|
||||||
return self.quaternion.shape[:-1]
|
return self.quaternion[...,0].shape
|
||||||
|
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
|
|
|
@ -246,8 +246,8 @@ class VTK:
|
||||||
raise ValueError('No label defined for numpy.ndarray')
|
raise ValueError('No label defined for numpy.ndarray')
|
||||||
|
|
||||||
N_data = data.shape[0]
|
N_data = data.shape[0]
|
||||||
d = np_to_vtk((data.astype(np.float32) if data.dtype in [np.float64, np.float128]
|
d = np_to_vtk((data.astype(np.single) if data.dtype in [np.double, np.longdouble] else
|
||||||
else data).reshape(N_data,-1),deep=True) # avoid large files
|
data).reshape(N_data,-1),deep=True) # avoid large files
|
||||||
d.SetName(label)
|
d.SetName(label)
|
||||||
|
|
||||||
if N_data == N_points:
|
if N_data == N_points:
|
||||||
|
|
|
@ -183,7 +183,7 @@ def scale_to_coprime(v):
|
||||||
# Python 3.9 provides math.lcm, see https://stackoverflow.com/questions/51716916.
|
# Python 3.9 provides math.lcm, see https://stackoverflow.com/questions/51716916.
|
||||||
return a * b // np.gcd(a, b)
|
return a * b // np.gcd(a, b)
|
||||||
|
|
||||||
m = (np.array(v) * reduce(lcm, map(lambda x: int(get_square_denominator(x)),v)) ** 0.5).astype(np.int)
|
m = (np.array(v) * reduce(lcm, map(lambda x: int(get_square_denominator(x)),v)) ** 0.5).astype(int)
|
||||||
m = m//reduce(np.gcd,m)
|
m = m//reduce(np.gcd,m)
|
||||||
|
|
||||||
with np.errstate(invalid='ignore'):
|
with np.errstate(invalid='ignore'):
|
||||||
|
|
|
@ -6,28 +6,29 @@ with open(Path(__file__).parent/'damask/VERSION') as f:
|
||||||
version = re.sub(r'(-([^-]*)).*$',r'.\2',re.sub(r'^v(\d+\.\d+(\.\d+)?)',r'\1',f.readline().strip()))
|
version = re.sub(r'(-([^-]*)).*$',r'.\2',re.sub(r'^v(\d+\.\d+(\.\d+)?)',r'\1',f.readline().strip()))
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="damask",
|
name='damask',
|
||||||
version=version,
|
version=version,
|
||||||
author="The DAMASK team",
|
author='The DAMASK team',
|
||||||
author_email="damask@mpie.de",
|
author_email='damask@mpie.de',
|
||||||
description="DAMASK library",
|
description='DAMASK library',
|
||||||
long_description="Python library for pre and post processing of DAMASK simulations",
|
long_description='Python library for pre and post processing of DAMASK simulations',
|
||||||
url="https://damask.mpie.de",
|
url='https://damask.mpie.de',
|
||||||
packages=setuptools.find_packages(),
|
packages=setuptools.find_packages(),
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
|
python_requires = '>=3.6',
|
||||||
install_requires = [
|
install_requires = [
|
||||||
"pandas", # requires numpy
|
'pandas>=0.24', # requires numpy
|
||||||
"scipy",
|
'scipy>=1.2',
|
||||||
"h5py", # requires numpy
|
'h5py>=2.9', # requires numpy
|
||||||
"vtk",
|
'vtk>=8.1',
|
||||||
"matplotlib", # requires numpy, pillow
|
'matplotlib>=3.0', # requires numpy, pillow
|
||||||
"pyaml"
|
'pyaml>=3.12'
|
||||||
],
|
],
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Intended Audience :: Science/Research",
|
'Intended Audience :: Science/Research',
|
||||||
"Topic :: Scientific/Engineering",
|
'Topic :: Scientific/Engineering',
|
||||||
"Programming Language :: Python :: 3",
|
'Programming Language :: Python :: 3',
|
||||||
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
|
||||||
"Operating System :: OS Independent",
|
'Operating System :: OS Independent',
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -5,6 +5,7 @@ import numpy as np
|
||||||
|
|
||||||
from damask import ConfigMaterial
|
from damask import ConfigMaterial
|
||||||
from damask import Table
|
from damask import Table
|
||||||
|
from damask import Rotation
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def ref_path(ref_path_base):
|
def ref_path(ref_path_base):
|
||||||
|
@ -85,42 +86,25 @@ class TestConfigMaterial:
|
||||||
|
|
||||||
def test_from_table(self):
|
def test_from_table(self):
|
||||||
N = np.random.randint(3,10)
|
N = np.random.randint(3,10)
|
||||||
a = np.vstack((np.hstack((np.arange(N),np.arange(N)[::-1])),np.ones(N*2),np.zeros(N*2),np.ones(N*2))).T
|
a = np.vstack((np.hstack((np.arange(N),np.arange(N)[::-1])),np.ones(N*2),np.zeros(N*2),np.ones(N*2),np.ones(N*2))).T
|
||||||
t = Table(a,{'varying':2,'constant':2})
|
t = Table(a,{'varying':1,'constant':4})
|
||||||
c = ConfigMaterial.from_table(t,constituents={'a':'varying','b':'1_constant'},c='2_constant')
|
c = ConfigMaterial.from_table(t,**{'phase':'varying','O':'constant','homogenization':'4_constant'})
|
||||||
assert len(c['material']) == N
|
assert len(c['material']) == N
|
||||||
for i,m in enumerate(c['material']):
|
for i,m in enumerate(c['material']):
|
||||||
c = m['constituents'][0]
|
assert m['homogenization'] == 1 and (m['constituents'][0]['O'] == [1,0,1,1]).all()
|
||||||
assert m['c'] == 1 and c['b'] == 0 and (c['a'] == [i,1]).all()
|
|
||||||
|
|
||||||
def test_constituents(self):
|
@pytest.mark.parametrize('N,n,kw',[
|
||||||
c = ConfigMaterial._constituents(c=1,v=[2,3])
|
(1,1,{'phase':'Gold',
|
||||||
assert c[0][0]['c'] == c[1][0]['c'] == 1
|
'O':[1,0,0,0],
|
||||||
assert c[0][0]['v'] == c[1][0]['v'] -1 ==2
|
'homogenization':'SX'}),
|
||||||
|
(3,1,{'phase':'Gold',
|
||||||
@pytest.mark.parametrize('constituents',[{'W':1,'X':[2,3]},{'Y':4},{'Z':[5,6]}])
|
'O':Rotation.from_random(3),
|
||||||
@pytest.mark.parametrize('a',[[7.,8.],9.])
|
'homogenization':'SX'}),
|
||||||
@pytest.mark.parametrize('b',['bd',['efg','hi']])
|
(2,3,{'phase':np.broadcast_to(['a','b','c'],(2,3)),
|
||||||
def test_material_add(self,tmp_path,constituents,a,b):
|
'O':Rotation.from_random((2,3)),
|
||||||
len_c = len(ConfigMaterial()._constituents(1,**constituents))
|
'homogenization':['SX','PX']}),
|
||||||
len_a = len(a) if isinstance(a,list) else 1
|
])
|
||||||
len_b = len(b) if isinstance(b,list) else 1
|
def test_material_add(self,kw,N,n):
|
||||||
m = ConfigMaterial().material_add(constituents,a=a,b=b)
|
m = ConfigMaterial().material_add(**kw)
|
||||||
m.save()
|
assert len(m['material']) == N
|
||||||
assert len(m['material']) == np.max([len_a,len_b,len_c])
|
assert len(m['material'][0]['constituents']) == n
|
||||||
|
|
||||||
@pytest.mark.parametrize('constituents',[{'W':1,'X':np.array([2,3])},{'Y':4},{'Z':np.array([5,6])}])
|
|
||||||
@pytest.mark.parametrize('a',[np.array([7,8]),9])
|
|
||||||
def test_material_add_np(self,tmp_path,constituents,a):
|
|
||||||
len_c = len(ConfigMaterial()._constituents(1,**constituents))
|
|
||||||
len_a = len(a) if isinstance(a,np.ndarray) else 1
|
|
||||||
m = ConfigMaterial().material_add(constituents,ld=a)
|
|
||||||
m.save()
|
|
||||||
assert len(m['material']) == np.max([len_a,len_c])
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('constituents',[{'X':np.array([2,3,4,5])},{'Y':4}])
|
|
||||||
@pytest.mark.parametrize('a',[np.array([1,2,3]),[4,5,6]])
|
|
||||||
@pytest.mark.parametrize('b',[np.array([6.,7.]),[8.,9.]])
|
|
||||||
def test_material_add_invalid(self,constituents,a,b):
|
|
||||||
with pytest.raises(ValueError):
|
|
||||||
ConfigMaterial().material_add(constituents,a=a,u=b)
|
|
||||||
|
|
|
@ -347,7 +347,7 @@ class TestGrid:
|
||||||
@pytest.mark.parametrize('approach',['Laguerre','Voronoi'])
|
@pytest.mark.parametrize('approach',['Laguerre','Voronoi'])
|
||||||
def test_tessellate_bicrystal(self,approach):
|
def test_tessellate_bicrystal(self,approach):
|
||||||
cells = np.random.randint(5,10,3)*2
|
cells = np.random.randint(5,10,3)*2
|
||||||
size = cells.astype(np.float)
|
size = cells.astype(float)
|
||||||
seeds = np.vstack((size*np.array([0.5,0.25,0.5]),size*np.array([0.5,0.75,0.5])))
|
seeds = np.vstack((size*np.array([0.5,0.25,0.5]),size*np.array([0.5,0.75,0.5])))
|
||||||
material = np.zeros(cells)
|
material = np.zeros(cells)
|
||||||
material[:,cells[1]//2:,:] = 1
|
material[:,cells[1]//2:,:] = 1
|
||||||
|
|
|
@ -689,6 +689,10 @@ class TestRotation:
|
||||||
with pytest.raises(TypeError):
|
with pytest.raises(TypeError):
|
||||||
Rotation(np.ones(3))
|
Rotation(np.ones(3))
|
||||||
|
|
||||||
|
def test_to_numpy(self):
|
||||||
|
r = Rotation.from_random(np.random.randint(0,10,4))
|
||||||
|
assert np.all(r.as_quaternion() == np.array(r))
|
||||||
|
|
||||||
@pytest.mark.parametrize('degrees',[True,False])
|
@pytest.mark.parametrize('degrees',[True,False])
|
||||||
def test_Eulers(self,set_of_rotations,degrees):
|
def test_Eulers(self,set_of_rotations,degrees):
|
||||||
for rot in set_of_rotations:
|
for rot in set_of_rotations:
|
||||||
|
@ -804,7 +808,11 @@ class TestRotation:
|
||||||
r = Rotation.from_random()
|
r = Rotation.from_random()
|
||||||
assert r == ~~r
|
assert r == ~~r
|
||||||
|
|
||||||
@pytest.mark.parametrize('shape',[None,1,(1,),(4,2),(1,1,1)])
|
@pytest.mark.parametrize('shape',[1,(1,),(4,2),(1,1,1),tuple(np.random.randint(0,10,4))])
|
||||||
|
def test_size(self,shape):
|
||||||
|
assert Rotation.from_random(shape).size == np.prod(shape)
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('shape',[None,1,(1,),(4,2),(1,1,1),tuple(np.random.randint(0,10,4))])
|
||||||
def test_shape(self,shape):
|
def test_shape(self,shape):
|
||||||
r = Rotation.from_random(shape=shape)
|
r = Rotation.from_random(shape=shape)
|
||||||
assert r.shape == (shape if isinstance(shape,tuple) else (shape,) if shape else ())
|
assert r.shape == (shape if isinstance(shape,tuple) else (shape,) if shape else ())
|
||||||
|
|
|
@ -75,7 +75,6 @@ end subroutine CPFEM_initAll
|
||||||
subroutine CPFEM_init
|
subroutine CPFEM_init
|
||||||
|
|
||||||
integer(HID_T) :: fileHandle
|
integer(HID_T) :: fileHandle
|
||||||
character(len=pStringLen) :: fileName
|
|
||||||
|
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- CPFEM init -+>>>'; flush(IO_STDOUT)
|
print'(/,a)', ' <<<+- CPFEM init -+>>>'; flush(IO_STDOUT)
|
||||||
|
@ -83,8 +82,8 @@ subroutine CPFEM_init
|
||||||
|
|
||||||
if (interface_restartInc > 0) then
|
if (interface_restartInc > 0) then
|
||||||
print'(/,a,i0,a)', ' reading restart information of increment from file'; flush(IO_STDOUT)
|
print'(/,a,i0,a)', ' reading restart information of increment from file'; flush(IO_STDOUT)
|
||||||
write(fileName,'(a,i0,a)') trim(getSolverJobName())//'_',worldrank,'.hdf5'
|
|
||||||
fileHandle = HDF5_openFile(fileName)
|
fileHandle = HDF5_openFile(getSolverJobName()//'_restart.hdf5','r')
|
||||||
|
|
||||||
call homogenization_restartRead(fileHandle)
|
call homogenization_restartRead(fileHandle)
|
||||||
call phase_restartRead(fileHandle)
|
call phase_restartRead(fileHandle)
|
||||||
|
@ -101,13 +100,11 @@ end subroutine CPFEM_init
|
||||||
subroutine CPFEM_restartWrite
|
subroutine CPFEM_restartWrite
|
||||||
|
|
||||||
integer(HID_T) :: fileHandle
|
integer(HID_T) :: fileHandle
|
||||||
character(len=pStringLen) :: fileName
|
|
||||||
|
|
||||||
|
|
||||||
print*, ' writing field and constitutive data required for restart to file';flush(IO_STDOUT)
|
print*, ' writing field and constitutive data required for restart to file';flush(IO_STDOUT)
|
||||||
|
|
||||||
write(fileName,'(a,i0,a)') trim(getSolverJobName())//'_',worldrank,'.hdf5'
|
fileHandle = HDF5_openFile(getSolverJobName()//'_restart.hdf5','a')
|
||||||
fileHandle = HDF5_openFile(fileName,'a')
|
|
||||||
|
|
||||||
call homogenization_restartWrite(fileHandle)
|
call homogenization_restartWrite(fileHandle)
|
||||||
call phase_restartWrite(fileHandle)
|
call phase_restartWrite(fileHandle)
|
||||||
|
|
|
@ -71,6 +71,12 @@ module HDF5_utilities
|
||||||
module procedure HDF5_addAttribute_real_array
|
module procedure HDF5_addAttribute_real_array
|
||||||
end interface HDF5_addAttribute
|
end interface HDF5_addAttribute
|
||||||
|
|
||||||
|
#ifdef PETSc
|
||||||
|
logical, parameter, private :: parallel_default = .true.
|
||||||
|
#else
|
||||||
|
logical, parameter, private :: parallel_default = .false.
|
||||||
|
#endif
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,16 +111,16 @@ end subroutine HDF5_utilities_init
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief open and initializes HDF5 output file
|
!> @brief open and initializes HDF5 output file
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
integer(HID_T) function HDF5_openFile(fileName,mode,parallel)
|
integer(HID_T) function HDF5_openFile(fileName,mode)
|
||||||
|
|
||||||
character(len=*), intent(in) :: fileName
|
character(len=*), intent(in) :: fileName
|
||||||
character, intent(in), optional :: mode
|
character, intent(in), optional :: mode
|
||||||
logical, intent(in), optional :: parallel
|
|
||||||
|
|
||||||
character :: m
|
character :: m
|
||||||
integer(HID_T) :: plist_id
|
integer(HID_T) :: plist_id
|
||||||
integer :: hdferr
|
integer :: hdferr
|
||||||
|
|
||||||
|
|
||||||
if (present(mode)) then
|
if (present(mode)) then
|
||||||
m = mode
|
m = mode
|
||||||
else
|
else
|
||||||
|
@ -125,10 +131,8 @@ integer(HID_T) function HDF5_openFile(fileName,mode,parallel)
|
||||||
if(hdferr < 0) error stop 'HDF5 error'
|
if(hdferr < 0) error stop 'HDF5 error'
|
||||||
|
|
||||||
#ifdef PETSc
|
#ifdef PETSc
|
||||||
if (present(parallel)) then; if (parallel) then
|
|
||||||
call h5pset_fapl_mpio_f(plist_id, PETSC_COMM_WORLD, MPI_INFO_NULL, hdferr)
|
call h5pset_fapl_mpio_f(plist_id, PETSC_COMM_WORLD, MPI_INFO_NULL, hdferr)
|
||||||
if(hdferr < 0) error stop 'HDF5 error'
|
if(hdferr < 0) error stop 'HDF5 error'
|
||||||
endif; endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (m == 'w') then
|
if (m == 'w') then
|
||||||
|
@ -547,7 +551,7 @@ subroutine HDF5_read_real1(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
||||||
|
@ -587,7 +591,7 @@ subroutine HDF5_read_real2(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
||||||
|
@ -627,7 +631,7 @@ subroutine HDF5_read_real3(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
||||||
|
@ -667,7 +671,7 @@ subroutine HDF5_read_real4(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
||||||
|
@ -707,7 +711,7 @@ subroutine HDF5_read_real5(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
||||||
|
@ -747,7 +751,7 @@ subroutine HDF5_read_real6(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
||||||
|
@ -787,7 +791,7 @@ subroutine HDF5_read_real7(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_DOUBLE,dataset,totalShape, hdferr,&
|
||||||
|
@ -829,7 +833,7 @@ subroutine HDF5_read_int1(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
||||||
|
@ -869,7 +873,7 @@ subroutine HDF5_read_int2(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
||||||
|
@ -909,7 +913,7 @@ subroutine HDF5_read_int3(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
||||||
|
@ -949,7 +953,7 @@ subroutine HDF5_read_int4(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
||||||
|
@ -989,7 +993,7 @@ subroutine HDF5_read_int5(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
||||||
|
@ -1029,7 +1033,7 @@ subroutine HDF5_read_int6(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
||||||
|
@ -1069,7 +1073,7 @@ subroutine HDF5_read_int7(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel)
|
||||||
else
|
else
|
||||||
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
call initialize_read(dset_id, filespace_id, memspace_id, plist_id, aplist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
call h5dread_f(dset_id, H5T_NATIVE_INTEGER,dataset,totalShape, hdferr,&
|
||||||
|
@ -1109,7 +1113,7 @@ subroutine HDF5_write_real1(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape,loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
myStart, totalShape,loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape,loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,.false.)
|
myStart, totalShape,loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1150,7 +1154,7 @@ subroutine HDF5_write_real2(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1191,7 +1195,7 @@ subroutine HDF5_write_real3(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1232,7 +1236,7 @@ subroutine HDF5_write_real4(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1274,7 +1278,7 @@ subroutine HDF5_write_real5(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1315,7 +1319,7 @@ subroutine HDF5_write_real6(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1356,7 +1360,7 @@ subroutine HDF5_write_real7(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_DOUBLE,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1398,7 +1402,7 @@ subroutine HDF5_write_int1(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1439,7 +1443,7 @@ subroutine HDF5_write_int2(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1480,7 +1484,7 @@ subroutine HDF5_write_int3(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1521,7 +1525,7 @@ subroutine HDF5_write_int4(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1562,7 +1566,7 @@ subroutine HDF5_write_int5(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1603,7 +1607,7 @@ subroutine HDF5_write_int6(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
@ -1644,7 +1648,7 @@ subroutine HDF5_write_int7(loc_id,dataset,datasetName,parallel)
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel)
|
||||||
else
|
else
|
||||||
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
call initialize_write(dset_id, filespace_id, memspace_id, plist_id, &
|
||||||
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,.false.)
|
myStart, totalShape, loc_id,myShape,datasetName,H5T_NATIVE_INTEGER,parallel_default)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (product(totalShape) /= 0) then
|
if (product(totalShape) /= 0) then
|
||||||
|
|
|
@ -225,8 +225,8 @@ program DAMASK_grid
|
||||||
loadCases(l)%t = step_discretization%get_asFloat('t')
|
loadCases(l)%t = step_discretization%get_asFloat('t')
|
||||||
loadCases(l)%N = step_discretization%get_asInt ('N')
|
loadCases(l)%N = step_discretization%get_asInt ('N')
|
||||||
loadCases(l)%r = step_discretization%get_asFloat('r', defaultVal= 1.0_pReal)
|
loadCases(l)%r = step_discretization%get_asFloat('r', defaultVal= 1.0_pReal)
|
||||||
loadCases(l)%f_restart = step_discretization%get_asInt ('f_restart', defaultVal=huge(0))
|
|
||||||
|
|
||||||
|
loadCases(l)%f_restart = load_step%get_asInt('f_restart', defaultVal=huge(0))
|
||||||
loadCases(l)%f_out = load_step%get_asInt('f_out', defaultVal=1)
|
loadCases(l)%f_out = load_step%get_asInt('f_out', defaultVal=1)
|
||||||
loadCases(l)%estimate_rate = (load_step%get_asBool('estimate_rate',defaultVal=.true.) .and. &
|
loadCases(l)%estimate_rate = (load_step%get_asBool('estimate_rate',defaultVal=.true.) .and. &
|
||||||
merge(.true.,.false.,l > 1))
|
merge(.true.,.false.,l > 1))
|
||||||
|
|
|
@ -68,8 +68,11 @@ subroutine discretization_grid_init(restart)
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- discretization_grid init -+>>>'; flush(IO_STDOUT)
|
print'(/,a)', ' <<<+- discretization_grid init -+>>>'; flush(IO_STDOUT)
|
||||||
|
|
||||||
if(worldrank == 0) call readVTR(grid,geomSize,origin,materialAt_global)
|
if(worldrank == 0) then
|
||||||
|
call readVTR(grid,geomSize,origin,materialAt_global)
|
||||||
|
else
|
||||||
|
allocate(materialAt_global(0)) ! needed for IntelMPI
|
||||||
|
endif
|
||||||
|
|
||||||
call MPI_Bcast(grid,3,MPI_INTEGER,0,PETSC_COMM_WORLD, ierr)
|
call MPI_Bcast(grid,3,MPI_INTEGER,0,PETSC_COMM_WORLD, ierr)
|
||||||
if (ierr /= 0) error stop 'MPI error'
|
if (ierr /= 0) error stop 'MPI error'
|
||||||
|
|
|
@ -108,8 +108,6 @@ subroutine grid_mechanical_FEM_init
|
||||||
u_current,u_lastInc
|
u_current,u_lastInc
|
||||||
PetscInt, dimension(0:worldsize-1) :: localK
|
PetscInt, dimension(0:worldsize-1) :: localK
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
character(len=pStringLen) :: &
|
|
||||||
fileName
|
|
||||||
class(tNode), pointer :: &
|
class(tNode), pointer :: &
|
||||||
num_grid, &
|
num_grid, &
|
||||||
debug_grid
|
debug_grid
|
||||||
|
@ -234,8 +232,7 @@ subroutine grid_mechanical_FEM_init
|
||||||
restartRead: if (interface_restartInc > 0) then
|
restartRead: if (interface_restartInc > 0) then
|
||||||
print'(/,a,i0,a)', ' reading restart data of increment ', interface_restartInc, ' from file'
|
print'(/,a,i0,a)', ' reading restart data of increment ', interface_restartInc, ' from file'
|
||||||
|
|
||||||
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
fileHandle = HDF5_openFile(getSolverJobName()//'_restart.hdf5','r')
|
||||||
fileHandle = HDF5_openFile(fileName)
|
|
||||||
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_read(groupHandle,P_aim, 'P_aim')
|
call HDF5_read(groupHandle,P_aim, 'P_aim')
|
||||||
|
@ -422,7 +419,7 @@ subroutine grid_mechanical_FEM_restartWrite
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
PetscScalar, dimension(:,:,:,:), pointer :: u_current,u_lastInc
|
PetscScalar, dimension(:,:,:,:), pointer :: u_current,u_lastInc
|
||||||
character(len=pStringLen) :: fileName
|
|
||||||
|
|
||||||
call DMDAVecGetArrayF90(mechanical_grid,solution_current,u_current,ierr)
|
call DMDAVecGetArrayF90(mechanical_grid,solution_current,u_current,ierr)
|
||||||
CHKERRQ(ierr)
|
CHKERRQ(ierr)
|
||||||
|
@ -431,8 +428,7 @@ subroutine grid_mechanical_FEM_restartWrite
|
||||||
|
|
||||||
print*, 'writing solver data required for restart to file'; flush(IO_STDOUT)
|
print*, 'writing solver data required for restart to file'; flush(IO_STDOUT)
|
||||||
|
|
||||||
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
fileHandle = HDF5_openFile(getSolverJobName()//'_restart.hdf5','w')
|
||||||
fileHandle = HDF5_openFile(fileName,'w')
|
|
||||||
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_write(groupHandle,P_aim, 'P_aim')
|
call HDF5_write(groupHandle,P_aim, 'P_aim')
|
||||||
|
|
|
@ -99,8 +99,6 @@ subroutine grid_mechanical_spectral_basic_init
|
||||||
PetscInt, dimension(0:worldsize-1) :: localK
|
PetscInt, dimension(0:worldsize-1) :: localK
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
integer :: fileUnit
|
integer :: fileUnit
|
||||||
character(len=pStringLen) :: &
|
|
||||||
fileName
|
|
||||||
class (tNode), pointer :: &
|
class (tNode), pointer :: &
|
||||||
num_grid, &
|
num_grid, &
|
||||||
debug_grid
|
debug_grid
|
||||||
|
@ -182,8 +180,7 @@ subroutine grid_mechanical_spectral_basic_init
|
||||||
restartRead: if (interface_restartInc > 0) then
|
restartRead: if (interface_restartInc > 0) then
|
||||||
print'(/,a,i0,a)', ' reading restart data of increment ', interface_restartInc, ' from file'
|
print'(/,a,i0,a)', ' reading restart data of increment ', interface_restartInc, ' from file'
|
||||||
|
|
||||||
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
fileHandle = HDF5_openFile(getSolverJobName()//'_restart.hdf5','r')
|
||||||
fileHandle = HDF5_openFile(fileName)
|
|
||||||
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_read(groupHandle,P_aim, 'P_aim')
|
call HDF5_read(groupHandle,P_aim, 'P_aim')
|
||||||
|
@ -365,14 +362,12 @@ subroutine grid_mechanical_spectral_basic_restartWrite
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
PetscScalar, dimension(:,:,:,:), pointer :: F
|
PetscScalar, dimension(:,:,:,:), pointer :: F
|
||||||
character(len=pStringLen) :: fileName
|
|
||||||
|
|
||||||
call DMDAVecGetArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr)
|
call DMDAVecGetArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr)
|
||||||
|
|
||||||
print*, 'writing solver data required for restart to file'; flush(IO_STDOUT)
|
print*, 'writing solver data required for restart to file'; flush(IO_STDOUT)
|
||||||
|
|
||||||
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
fileHandle = HDF5_openFile(getSolverJobName()//'_restart.hdf5','w')
|
||||||
fileHandle = HDF5_openFile(fileName,'w')
|
|
||||||
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_write(groupHandle,P_aim, 'P_aim')
|
call HDF5_write(groupHandle,P_aim, 'P_aim')
|
||||||
|
|
|
@ -112,8 +112,6 @@ subroutine grid_mechanical_spectral_polarisation_init
|
||||||
PetscInt, dimension(0:worldsize-1) :: localK
|
PetscInt, dimension(0:worldsize-1) :: localK
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
integer :: fileUnit
|
integer :: fileUnit
|
||||||
character(len=pStringLen) :: &
|
|
||||||
fileName
|
|
||||||
class (tNode), pointer :: &
|
class (tNode), pointer :: &
|
||||||
num_grid, &
|
num_grid, &
|
||||||
debug_grid
|
debug_grid
|
||||||
|
@ -204,8 +202,7 @@ subroutine grid_mechanical_spectral_polarisation_init
|
||||||
restartRead: if (interface_restartInc > 0) then
|
restartRead: if (interface_restartInc > 0) then
|
||||||
print'(/,a,i0,a)', ' reading restart data of increment ', interface_restartInc, ' from file'
|
print'(/,a,i0,a)', ' reading restart data of increment ', interface_restartInc, ' from file'
|
||||||
|
|
||||||
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
fileHandle = HDF5_openFile(getSolverJobName()//'_restart.hdf5','r')
|
||||||
fileHandle = HDF5_openFile(fileName)
|
|
||||||
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_read(groupHandle,P_aim, 'P_aim')
|
call HDF5_read(groupHandle,P_aim, 'P_aim')
|
||||||
|
@ -419,7 +416,6 @@ subroutine grid_mechanical_spectral_polarisation_restartWrite
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
PetscScalar, dimension(:,:,:,:), pointer :: FandF_tau, F, F_tau
|
PetscScalar, dimension(:,:,:,:), pointer :: FandF_tau, F, F_tau
|
||||||
character(len=pStringLen) :: fileName
|
|
||||||
|
|
||||||
call DMDAVecGetArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr)
|
call DMDAVecGetArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr)
|
||||||
F => FandF_tau(0: 8,:,:,:)
|
F => FandF_tau(0: 8,:,:,:)
|
||||||
|
@ -427,8 +423,7 @@ subroutine grid_mechanical_spectral_polarisation_restartWrite
|
||||||
|
|
||||||
print*, 'writing solver data required for restart to file'; flush(IO_STDOUT)
|
print*, 'writing solver data required for restart to file'; flush(IO_STDOUT)
|
||||||
|
|
||||||
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
fileHandle = HDF5_openFile(getSolverJobName()//'_restart.hdf5','w')
|
||||||
fileHandle = HDF5_openFile(fileName,'w')
|
|
||||||
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_write(groupHandle,F_aim, 'P_aim')
|
call HDF5_write(groupHandle,F_aim, 'P_aim')
|
||||||
|
|
|
@ -65,7 +65,7 @@ subroutine results_init(restart)
|
||||||
print*, 'https://doi.org/10.1007/s40192-017-0084-5'//IO_EOL
|
print*, 'https://doi.org/10.1007/s40192-017-0084-5'//IO_EOL
|
||||||
|
|
||||||
if(.not. restart) then
|
if(.not. restart) then
|
||||||
resultsFile = HDF5_openFile(trim(getSolverJobName())//'.hdf5','w',.true.)
|
resultsFile = HDF5_openFile(getSolverJobName()//'.hdf5','w')
|
||||||
call results_addAttribute('DADF5_version_major',0)
|
call results_addAttribute('DADF5_version_major',0)
|
||||||
call results_addAttribute('DADF5_version_minor',11)
|
call results_addAttribute('DADF5_version_minor',11)
|
||||||
call results_addAttribute('DAMASK_version',DAMASKVERSION)
|
call results_addAttribute('DAMASK_version',DAMASKVERSION)
|
||||||
|
@ -83,7 +83,7 @@ end subroutine results_init
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine results_openJobFile
|
subroutine results_openJobFile
|
||||||
|
|
||||||
resultsFile = HDF5_openFile(trim(getSolverJobName())//'.hdf5','a',.true.)
|
resultsFile = HDF5_openFile(getSolverJobName()//'.hdf5','a')
|
||||||
|
|
||||||
end subroutine results_openJobFile
|
end subroutine results_openJobFile
|
||||||
|
|
||||||
|
@ -289,11 +289,7 @@ subroutine results_writeScalarDataset_real(group,dataset,label,description,SIuni
|
||||||
|
|
||||||
groupHandle = results_openGroup(group)
|
groupHandle = results_openGroup(group)
|
||||||
|
|
||||||
#ifdef PETSc
|
call HDF5_write(groupHandle,dataset,label)
|
||||||
call HDF5_write(groupHandle,dataset,label,.true.)
|
|
||||||
#else
|
|
||||||
call HDF5_write(groupHandle,dataset,label,.false.)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (HDF5_objectExists(groupHandle,label)) &
|
if (HDF5_objectExists(groupHandle,label)) &
|
||||||
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
||||||
|
@ -320,11 +316,7 @@ subroutine results_writeVectorDataset_real(group,dataset,label,description,SIuni
|
||||||
|
|
||||||
groupHandle = results_openGroup(group)
|
groupHandle = results_openGroup(group)
|
||||||
|
|
||||||
#ifdef PETSc
|
call HDF5_write(groupHandle,dataset,label)
|
||||||
call HDF5_write(groupHandle,dataset,label,.true.)
|
|
||||||
#else
|
|
||||||
call HDF5_write(groupHandle,dataset,label,.false.)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (HDF5_objectExists(groupHandle,label)) &
|
if (HDF5_objectExists(groupHandle,label)) &
|
||||||
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
||||||
|
@ -362,7 +354,7 @@ subroutine results_writeTensorDataset_real(group,dataset,label,description,SIuni
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if(transposed_) then
|
if(transposed_) then
|
||||||
if(size(dataset,1) /= size(dataset,2)) call IO_error(0,ext_msg='transpose non-symmetric tensor')
|
if(size(dataset,1) /= size(dataset,2)) error stop 'transpose non-symmetric tensor'
|
||||||
allocate(dataset_transposed,mold=dataset)
|
allocate(dataset_transposed,mold=dataset)
|
||||||
do i=1,size(dataset_transposed,3)
|
do i=1,size(dataset_transposed,3)
|
||||||
dataset_transposed(:,:,i) = transpose(dataset(:,:,i))
|
dataset_transposed(:,:,i) = transpose(dataset(:,:,i))
|
||||||
|
@ -373,11 +365,7 @@ subroutine results_writeTensorDataset_real(group,dataset,label,description,SIuni
|
||||||
|
|
||||||
groupHandle = results_openGroup(group)
|
groupHandle = results_openGroup(group)
|
||||||
|
|
||||||
#ifdef PETSc
|
call HDF5_write(groupHandle,dataset_transposed,label)
|
||||||
call HDF5_write(groupHandle,dataset_transposed,label,.true.)
|
|
||||||
#else
|
|
||||||
call HDF5_write(groupHandle,dataset_transposed,label,.false.)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (HDF5_objectExists(groupHandle,label)) &
|
if (HDF5_objectExists(groupHandle,label)) &
|
||||||
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
||||||
|
@ -405,11 +393,7 @@ subroutine results_writeVectorDataset_int(group,dataset,label,description,SIunit
|
||||||
|
|
||||||
groupHandle = results_openGroup(group)
|
groupHandle = results_openGroup(group)
|
||||||
|
|
||||||
#ifdef PETSc
|
call HDF5_write(groupHandle,dataset,label)
|
||||||
call HDF5_write(groupHandle,dataset,label,.true.)
|
|
||||||
#else
|
|
||||||
call HDF5_write(groupHandle,dataset,label,.false.)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (HDF5_objectExists(groupHandle,label)) &
|
if (HDF5_objectExists(groupHandle,label)) &
|
||||||
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
||||||
|
@ -437,11 +421,7 @@ subroutine results_writeTensorDataset_int(group,dataset,label,description,SIunit
|
||||||
|
|
||||||
groupHandle = results_openGroup(group)
|
groupHandle = results_openGroup(group)
|
||||||
|
|
||||||
#ifdef PETSc
|
call HDF5_write(groupHandle,dataset,label)
|
||||||
call HDF5_write(groupHandle,dataset,label,.true.)
|
|
||||||
#else
|
|
||||||
call HDF5_write(groupHandle,dataset,label,.false.)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (HDF5_objectExists(groupHandle,label)) &
|
if (HDF5_objectExists(groupHandle,label)) &
|
||||||
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
call HDF5_addAttribute(groupHandle,'Description',description,label)
|
||||||
|
@ -577,7 +557,7 @@ subroutine results_mapping_phase(phaseAt,memberAtLocal,label)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! write the components of the compound type individually
|
! write the components of the compound type individually
|
||||||
call h5pset_preserve_f(plist_id, .TRUE., hdferr)
|
call h5pset_preserve_f(plist_id, .true., hdferr)
|
||||||
if(hdferr < 0) error stop 'HDF5 error'
|
if(hdferr < 0) error stop 'HDF5 error'
|
||||||
|
|
||||||
loc_id = results_openGroup('/mapping')
|
loc_id = results_openGroup('/mapping')
|
||||||
|
@ -733,7 +713,8 @@ subroutine results_mapping_homogenization(homogenizationAt,memberAtLocal,label)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! write the components of the compound type individually
|
! write the components of the compound type individually
|
||||||
call h5pset_preserve_f(plist_id, .TRUE., hdferr)
|
call h5pset_preserve_f(plist_id, .true., hdferr)
|
||||||
|
if(hdferr < 0) error stop 'HDF5 error'
|
||||||
|
|
||||||
loc_id = results_openGroup('/mapping')
|
loc_id = results_openGroup('/mapping')
|
||||||
call h5dcreate_f(loc_id, 'homogenization', dtype_id, filespace_id, dset_id, hdferr)
|
call h5dcreate_f(loc_id, 'homogenization', dtype_id, filespace_id, dset_id, hdferr)
|
||||||
|
|
Loading…
Reference in New Issue