Merge branch 'new-ASCII' into grid-filters

This commit is contained in:
Martin Diehl 2019-12-04 07:45:01 +01:00
commit 999321e588
44 changed files with 1772 additions and 283 deletions

2
.gitattributes vendored
View File

@ -3,8 +3,8 @@
# always use LF, even if the files are edited on windows, they need to be compiled/used on unix # always use LF, even if the files are edited on windows, they need to be compiled/used on unix
* text eol=lf * text eol=lf
installation/mods_Abaqus/abaqus_v6_windows.env eol=crlf
# Denote all files that are truly binary and should not be modified. # Denote all files that are truly binary and should not be modified.
*.png binary *.png binary
*.jpg binary *.jpg binary
*.cae binary *.cae binary
*.hdf5 binary

View File

@ -1,6 +1,7 @@
--- ---
stages: stages:
- prepareAll - prepareAll
- python
- preprocessing - preprocessing
- postprocessing - postprocessing
- compilePETSc - compilePETSc
@ -103,6 +104,16 @@ checkout:
- master - master
- release - release
###################################################################################################
Pytest:
stage: python
script:
- cd $DAMASKROOT/python
- pytest
except:
- master
- release
################################################################################################### ###################################################################################################
OrientationRelationship: OrientationRelationship:
stage: preprocessing stage: preprocessing
@ -308,13 +319,6 @@ nonlocal_densityConservation:
- master - master
- release - release
Spectral_ipNeighborhood:
stage: grid
script: Spectral_ipNeighborhood/test.py
except:
- master
- release
RGC_DetectChanges: RGC_DetectChanges:
stage: grid stage: grid
script: RGC_DetectChanges/test.py script: RGC_DetectChanges/test.py

@ -1 +1 @@
Subproject commit a3a88933cbb92b81d481305ce93374917baf3980 Subproject commit 66d562c755cd9aa4bbb8280c509383014acd52db

View File

@ -1 +1 @@
v2.0.3-1097-ga7fca4df v2.0.3-1133-gfede8225

View File

@ -1,9 +0,0 @@
[all]
(output) orientation # quaternion
(output) grainrotation # deviation from initial orientation as axis (1-3) and angle in degree (4) in crystal reference coordinates
(output) F # deformation gradient tensor
(output) Fe # elastic deformation gradient tensor
(output) Fp # plastic deformation gradient tensor
(output) P # first Piola-Kichhoff stress tensor
(output) S # second Piola-Kichhoff stress tensor
(output) Lp # plastic velocity gradient tensor

View File

@ -5,18 +5,6 @@
[SX] [SX]
mech none mech none
#-------------------#
<crystallite>
#-------------------#
[almostAll]
(output) orientation # quaternion
(output) grainrotation # deviation from initial orientation as axis (1-3) and angle in degree (4)
(output) F # deformation gradient tensor
(output) Fe # elastic deformation gradient tensor
(output) Fp # plastic deformation gradient tensor
(output) P # first Piola-Kichhoff stress tensor
(output) Lp # plastic velocity gradient tensor
#-------------------# #-------------------#
<phase> <phase>
#-------------------# #-------------------#

View File

@ -59,35 +59,35 @@ for filename in options.filenames:
data = np.concatenate((data,coords),1) data = np.concatenate((data,coords),1)
header+=' 1_pos 2_pos 3_pos' header+=' 1_pos 2_pos 3_pos'
results.set_visible('materialpoints',False)
results.set_visible('constituents', True)
for label in options.con: for label in options.con:
for p in results.iter_visible('con_physics'): x = results.get_dataset_location(label)
for c in results.iter_visible('constituents'): if len(x) == 0:
x = results.get_dataset_location(label) continue
if len(x) == 0: array = results.read_dataset(x,0,plain=True)
continue d = np.product(np.shape(array)[1:])
array = results.read_dataset(x,0,plain=True) data = np.concatenate((data,np.reshape(array,[np.product(results.grid),d])),1)
d = int(np.product(np.shape(array)[1:]))
data = np.concatenate((data,np.reshape(array,[np.product(results.grid),d])),1)
if d>1:
header+= ''.join([' {}_{}'.format(j+1,label) for j in range(d)])
else:
header+=' '+label
if d>1:
header+= ''.join([' {}_{}'.format(j+1,label) for j in range(d)])
else:
header+=' '+label
results.set_visible('constituents', False)
results.set_visible('materialpoints',True)
for label in options.mat: for label in options.mat:
for p in results.iter_visible('mat_physics'): x = results.get_dataset_location(label)
for m in results.iter_visible('materialpoints'): if len(x) == 0:
x = results.get_dataset_location(label) continue
if len(x) == 0: array = results.read_dataset(x,0,plain=True)
continue d = np.product(np.shape(array)[1:])
array = results.read_dataset(x,0,plain=True) data = np.concatenate((data,np.reshape(array,[np.product(results.grid),d])),1)
d = int(np.product(np.shape(array)[1:]))
data = np.concatenate((data,np.reshape(array,[np.product(results.grid),d])),1)
if d>1: if d>1:
header+= ''.join([' {}_{}'.format(j+1,label) for j in range(d)]) header+= ''.join([' {}_{}'.format(j+1,label) for j in range(d)])
else: else:
header+=' '+label header+=' '+label
dirname = os.path.abspath(os.path.join(os.path.dirname(filename),options.dir)) dirname = os.path.abspath(os.path.join(os.path.dirname(filename),options.dir))
if not os.path.isdir(dirname): if not os.path.isdir(dirname):

View File

@ -74,7 +74,6 @@ for filename in options.filenames:
results.set_visible('materialpoints',False) results.set_visible('materialpoints',False)
results.set_visible('constituents', True) results.set_visible('constituents', True)
for label in options.con: for label in options.con:
for p in results.iter_visible('con_physics'): for p in results.iter_visible('con_physics'):
if p != 'generic': if p != 'generic':
for c in results.iter_visible('constituents'): for c in results.iter_visible('constituents'):

View File

@ -29,6 +29,9 @@ class Table():
d[i] = label d[i] = label
i+=1 i+=1
if i != self.data.shape[1]:
raise IndexError('Mismatch between array shape and headings')
self.data.rename(columns=d,inplace=True) self.data.rename(columns=d,inplace=True)
if comments is None: if comments is None:
@ -44,8 +47,14 @@ class Table():
Create table from ASCII file. Create table from ASCII file.
The first line needs to indicate the number of subsequent header lines as 'n header'. The first line needs to indicate the number of subsequent header lines as 'n header'.
Vector data labels are indicated by '1_x, 2_x, ..., n_x'. Vector data labels are indicated by '1_v, 2_v, ..., n_v'.
Tensor data labels are indicated by '3x3:1_x, 3x3:2_x, ..., 3x3:9_x'. Tensor data labels are indicated by '3x3:1_T, 3x3:2_T, ..., 3x3:9_T'.
Parameters
----------
fname : file, str, or pathlib.Path
Filename or file for reading.
""" """
try: try:
f = open(fname) f = open(fname)
@ -76,7 +85,15 @@ class Table():
return Table(np.loadtxt(f),headings,comments) return Table(np.loadtxt(f),headings,comments)
def get_array(self,label): def get_array(self,label):
"""Return data as array.""" """
Return data as array.
Parameters
----------
label : str
Label of the array.
"""
if re.match(r'[0-9]*?_',label): if re.match(r'[0-9]*?_',label):
idx,key = label.split('_',1) idx,key = label.split('_',1)
return self.data[key].to_numpy()[:,int(idx)-1] return self.data[key].to_numpy()[:,int(idx)-1]
@ -84,7 +101,19 @@ class Table():
return self.data[label].to_numpy().reshape((-1,)+self.headings[label]) return self.data[label].to_numpy().reshape((-1,)+self.headings[label])
def set_array(self,label,array,info): def set_array(self,label,array,info):
"""Set data.""" """
Modify data in the spreadsheet.
Parameters
----------
label : str
Label for the new data.
array : np.ndarray
New data.
info : str
Human-readable information about the new data.
"""
if np.prod(array.shape[1:],dtype=int) == 1: if np.prod(array.shape[1:],dtype=int) == 1:
self.comments.append('{}: {}'.format(label,info)) self.comments.append('{}: {}'.format(label,info))
else: else:
@ -103,6 +132,19 @@ class Table():
return [label for label in self.headings] return [label for label in self.headings]
def add_array(self,label,array,info): def add_array(self,label,array,info):
"""
Add data to the spreadsheet.
Parameters
----------
label : str
Label for the new data.
array : np.ndarray
New data.
info : str
Human-readable information about the new data.
"""
if np.prod(array.shape[1:],dtype=int) == 1: if np.prod(array.shape[1:],dtype=int) == 1:
self.comments.append('{}: {}'.format(label,info)) self.comments.append('{}: {}'.format(label,info))
else: else:
@ -115,6 +157,15 @@ class Table():
self.data = pd.concat([self.data,new_data],axis=1) self.data = pd.concat([self.data,new_data],axis=1)
def to_ASCII(self,fname): def to_ASCII(self,fname):
"""
Store as plain text file.
Parameters
----------
fname : file, str, or pathlib.Path
Filename or file for reading.
"""
labels = [] labels = []
for l in self.headings: for l in self.headings:
if(self.headings[l] == (1,)): if(self.headings[l] == (1,)):
@ -123,7 +174,7 @@ class Table():
labels+=['{}_{}'.format(i+1,l)\ labels+=['{}_{}'.format(i+1,l)\
for i in range(self.headings[l][0])] for i in range(self.headings[l][0])]
else: else:
labels+=['{}:{}_{}'.format(i+1,'x'.join([str(d) for d in self.headings[l]]),l)\ labels+=['{}:{}_{}'.format('x'.join([str(d) for d in self.headings[l]]),i+1,l)\
for i in range(np.prod(self.headings[l],dtype=int))] for i in range(np.prod(self.headings[l],dtype=int))]
header = ['{} header'.format(len(self.comments)+1)]\ header = ['{} header'.format(len(self.comments)+1)]\

21
python/tests/conftest.py Normal file
View File

@ -0,0 +1,21 @@
import os
import pytest
import damask
def pytest_addoption(parser):
parser.addoption("--update",
action="store_true",
default=False)
@pytest.fixture
def update(request):
"""Store current results as new reference results."""
return request.config.getoption("--update")
@pytest.fixture
def reference_dir_base():
"""Directory containing reference results."""
env = damask.Environment()
return os.path.join(env.rootDir(),'python','tests','reference')

View File

@ -0,0 +1,125 @@
68 header
geom_fromVoronoiTessellation 2.0.3-1073-g6f3cb071
<texture>
[Grain1]
(gauss) phi1 358.98 Phi 65.62 phi2 24.48
[Grain2]
(gauss) phi1 121.05 Phi 176.11 phi2 295.73
[Grain3]
(gauss) phi1 43.79 Phi 113.76 phi2 345.90
[Grain4]
(gauss) phi1 265.15 Phi 62.52 phi2 299.71
[Grain5]
(gauss) phi1 221.23 Phi 26.54 phi2 207.05
[Grain6]
(gauss) phi1 249.81 Phi 61.47 phi2 152.14
[Grain7]
(gauss) phi1 332.45 Phi 99.16 phi2 345.34
[Grain8]
(gauss) phi1 312.27 Phi 118.27 phi2 181.59
[Grain9]
(gauss) phi1 303.10 Phi 48.21 phi2 358.03
[Grain10]
(gauss) phi1 338.26 Phi 48.11 phi2 176.78
[Grain11]
(gauss) phi1 115.17 Phi 56.54 phi2 223.84
[Grain12]
(gauss) phi1 281.04 Phi 97.48 phi2 27.94
<microstructure>
[Grain1]
crystallite 1
(constituent) phase 1 texture 1 fraction 1.0
[Grain2]
crystallite 1
(constituent) phase 1 texture 2 fraction 1.0
[Grain3]
crystallite 1
(constituent) phase 1 texture 3 fraction 1.0
[Grain4]
crystallite 1
(constituent) phase 1 texture 4 fraction 1.0
[Grain5]
crystallite 1
(constituent) phase 1 texture 5 fraction 1.0
[Grain6]
crystallite 1
(constituent) phase 1 texture 6 fraction 1.0
[Grain7]
crystallite 1
(constituent) phase 1 texture 7 fraction 1.0
[Grain8]
crystallite 1
(constituent) phase 1 texture 8 fraction 1.0
[Grain9]
crystallite 1
(constituent) phase 1 texture 9 fraction 1.0
[Grain10]
crystallite 1
(constituent) phase 1 texture 10 fraction 1.0
[Grain11]
crystallite 1
(constituent) phase 1 texture 11 fraction 1.0
[Grain12]
crystallite 1
(constituent) phase 1 texture 12 fraction 1.0
<!skip>
grid a 6 b 7 c 8
size x 0.75 y 0.875 z 1.0
origin x 0.0 y 0.0 z 0.0
homogenization 1
9 3 3 10 9 9
9 1 1 1 9 9
9 11 1 1 7 9
7 11 11 7 7 7
7 11 11 7 7 7
12 3 3 10 7 12
12 3 3 10 10 12
12 3 3 1 9 9
9 1 1 1 9 9
9 1 1 1 7 7
7 1 1 7 7 7
12 12 3 7 7 7
12 3 3 3 12 12
12 3 3 3 12 12
12 3 3 1 1 12
9 1 1 1 1 9
6 1 1 1 8 8
7 6 8 8 8 8
12 12 8 8 8 12
12 3 3 3 12 12
12 3 3 3 12 12
5 6 6 6 1 12
6 6 6 6 8 8
6 6 6 8 8 8
8 6 8 8 8 8
12 5 8 8 8 8
12 5 5 8 8 12
5 5 5 3 12 12
5 5 6 6 6 5
6 6 6 6 6 6
6 6 6 6 8 8
4 4 6 8 8 8
4 4 2 2 2 8
5 5 5 2 2 2
5 5 5 5 2 5
5 5 5 10 10 5
6 6 6 6 10 4
4 4 11 11 2 4
4 4 11 2 2 4
4 4 2 2 2 2
5 5 5 2 2 2
5 5 5 10 10 5
5 5 10 10 10 9
4 11 11 11 10 9
4 4 11 11 11 4
4 4 11 11 2 4
4 4 2 2 2 2
5 5 2 2 2 2
5 5 10 10 10 10
9 10 10 10 10 9
9 11 11 10 9 9
4 11 11 11 9 9
4 11 11 11 7 7
4 4 11 2 7 7
12 10 10 10 10 7
9 10 10 10 10 9

View File

@ -0,0 +1,129 @@
<homogenization>
[none]
mech none
ngrains 1
<texture>
[Grain1]
(gauss) phi1 358.98 Phi 65.62 phi2 24.48
[Grain2]
(gauss) phi1 121.05 Phi 176.11 phi2 295.73
[Grain3]
(gauss) phi1 43.79 Phi 113.76 phi2 345.90
[Grain4]
(gauss) phi1 265.15 Phi 62.52 phi2 299.71
[Grain5]
(gauss) phi1 221.23 Phi 26.54 phi2 207.05
[Grain6]
(gauss) phi1 249.81 Phi 61.47 phi2 152.14
[Grain7]
(gauss) phi1 332.45 Phi 99.16 phi2 345.34
[Grain8]
(gauss) phi1 312.27 Phi 118.27 phi2 181.59
[Grain9]
(gauss) phi1 303.10 Phi 48.21 phi2 358.03
[Grain10]
(gauss) phi1 338.26 Phi 48.11 phi2 176.78
[Grain11]
(gauss) phi1 115.17 Phi 56.54 phi2 223.84
[Grain12]
(gauss) phi1 281.04 Phi 97.48 phi2 27.94
<microstructure>
[Grain1]
crystallite 1
(constituent) phase 1 texture 1 fraction 1.0
[Grain2]
crystallite 1
(constituent) phase 1 texture 2 fraction 1.0
[Grain3]
crystallite 1
(constituent) phase 1 texture 3 fraction 1.0
[Grain4]
crystallite 1
(constituent) phase 1 texture 4 fraction 1.0
[Grain5]
crystallite 1
(constituent) phase 1 texture 5 fraction 1.0
[Grain6]
crystallite 1
(constituent) phase 1 texture 6 fraction 1.0
[Grain7]
crystallite 1
(constituent) phase 2 texture 7 fraction 1.0
[Grain8]
crystallite 1
(constituent) phase 2 texture 8 fraction 1.0
[Grain9]
crystallite 1
(constituent) phase 2 texture 9 fraction 1.0
[Grain10]
crystallite 1
(constituent) phase 2 texture 10 fraction 1.0
[Grain11]
crystallite 1
(constituent) phase 2 texture 11 fraction 1.0
[Grain12]
crystallite 1
(constituent) phase 2 texture 12 fraction 1.0
<phase>
[pheno_fcc]
elasticity hooke
plasticity phenopowerlaw
(output) orientation # quaternion
(output) F # deformation gradient tensor
(output) Fe # elastic deformation gradient tensor
(output) Fp # plastic deformation gradient tensor
(output) P # first Piola-Kichhoff stress tensor
(output) Lp # plastic velocity gradient tensor
lattice_structure fcc
Nslip 12 # per family
Ntwin 0 # 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
atol_resistance 1
[pheno_bcc]
elasticity hooke
plasticity phenopowerlaw
(output) orientation # quaternion
(output) F # deformation gradient tensor
(output) Fe # elastic deformation gradient tensor
(output) Fp # plastic deformation gradient tensor
(output) P # first Piola-Kichhoff stress tensor
(output) Lp # plastic velocity gradient tensor
lattice_structure bcc
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
atol_resistance 1
<crystallite>
[dummy]

View File

@ -0,0 +1 @@
fdot * 0 0 0 1.0e-3 0 0 0 * stress 0 * * * * * * * 0 time 20 incs 40 freq 4

View File

@ -0,0 +1,25 @@
4 header
grid a 8 b 5 c 4
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 22 2 2 1 21
1 1 6 26 2 2 5 25
1 1 10 30 2 2 9 29
1 1 14 34 2 2 13 33
1 1 18 38 2 2 17 37
1 1 3 23 2 2 2 22
1 1 7 27 2 2 6 26
1 1 11 31 2 2 10 30
1 1 15 35 2 2 14 34
1 1 19 39 2 2 18 38
1 1 4 24 2 2 3 23
1 1 8 28 2 2 7 27
1 1 12 32 2 2 11 31
1 1 16 36 2 2 15 35
1 1 20 40 2 2 19 39
1 1 5 25 2 2 4 24
1 1 9 29 2 2 8 28
1 1 13 33 2 2 12 32
1 1 17 37 2 2 16 36
1 1 21 41 2 2 20 40

View File

@ -0,0 +1,25 @@
4 header
grid a 8 b 5 c 4
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 1 2 2 2 1 1
1 1 1 2 2 2 2 1
1 1 1 6 2 2 2 5
1 1 1 10 2 2 2 9
1 1 1 14 2 2 2 13
1 1 1 2 2 2 2 1
1 1 1 2 2 2 2 1
1 1 1 6 2 2 2 5
1 1 1 10 2 2 2 9
1 1 1 14 2 2 2 13
1 1 1 3 2 2 2 2
1 1 1 3 2 2 2 2
1 1 1 7 2 2 2 6
1 1 1 11 2 2 2 10
1 1 1 15 2 2 2 14
1 1 1 4 2 2 2 3
1 1 1 4 2 2 2 3
1 1 1 8 2 2 2 7
1 1 1 12 2 2 2 11
1 1 1 16 2 2 2 15

View File

@ -0,0 +1,25 @@
4 header
grid a 8 b 5 c 4
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 1 2 2 2 2 21
1 1 1 2 2 2 2 21
1 1 1 2 2 2 2 25
1 1 1 2 2 2 2 29
1 1 1 2 2 2 2 37
1 1 1 2 2 2 2 21
1 1 1 2 2 2 2 21
1 1 1 2 2 2 2 25
1 1 1 2 2 2 2 29
1 1 1 2 2 2 2 37
1 1 1 2 2 2 2 22
1 1 1 2 2 2 2 22
1 1 1 2 2 2 2 26
1 1 1 2 2 2 2 30
1 1 1 2 2 2 2 38
1 1 1 2 2 2 2 24
1 1 1 2 2 2 2 24
1 1 1 2 2 2 2 28
1 1 1 2 2 2 2 32
1 1 1 2 2 2 2 40

View File

@ -0,0 +1,25 @@
4 header
grid a 8 b 5 c 4
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 1 2 2 2 2 2
1 1 1 2 2 2 2 2
1 1 1 2 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 2 2 2 2 2
1 1 1 2 2 2 2 2
1 1 1 2 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 2 2 2 2 2
1 1 1 2 2 2 2 2
1 1 1 2 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2
1 1 1 1 2 2 2 2

View File

@ -0,0 +1,85 @@
4 header
grid a 16 b 10 c 8
size x 1.6e-05 y 1e-05 z 8e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 22 2 2 1 21 21 1 2 2 22 2 1 1
1 1 6 26 2 2 5 25 25 5 2 2 26 6 1 1
1 1 10 30 2 2 9 29 29 9 2 2 30 10 1 1
1 1 14 34 2 2 13 33 33 13 2 2 34 14 1 1
1 1 18 38 2 2 17 37 37 17 2 2 38 18 1 1
1 1 18 38 2 2 17 37 37 17 2 2 38 18 1 1
1 1 14 34 2 2 13 33 33 13 2 2 34 14 1 1
1 1 10 30 2 2 9 29 29 9 2 2 30 10 1 1
1 1 6 26 2 2 5 25 25 5 2 2 26 6 1 1
1 1 2 22 2 2 1 21 21 1 2 2 22 2 1 1
1 1 3 23 2 2 2 22 22 2 2 2 23 3 1 1
1 1 7 27 2 2 6 26 26 6 2 2 27 7 1 1
1 1 11 31 2 2 10 30 30 10 2 2 31 11 1 1
1 1 15 35 2 2 14 34 34 14 2 2 35 15 1 1
1 1 19 39 2 2 18 38 38 18 2 2 39 19 1 1
1 1 19 39 2 2 18 38 38 18 2 2 39 19 1 1
1 1 15 35 2 2 14 34 34 14 2 2 35 15 1 1
1 1 11 31 2 2 10 30 30 10 2 2 31 11 1 1
1 1 7 27 2 2 6 26 26 6 2 2 27 7 1 1
1 1 3 23 2 2 2 22 22 2 2 2 23 3 1 1
1 1 4 24 2 2 3 23 23 3 2 2 24 4 1 1
1 1 8 28 2 2 7 27 27 7 2 2 28 8 1 1
1 1 12 32 2 2 11 31 31 11 2 2 32 12 1 1
1 1 16 36 2 2 15 35 35 15 2 2 36 16 1 1
1 1 20 40 2 2 19 39 39 19 2 2 40 20 1 1
1 1 20 40 2 2 19 39 39 19 2 2 40 20 1 1
1 1 16 36 2 2 15 35 35 15 2 2 36 16 1 1
1 1 12 32 2 2 11 31 31 11 2 2 32 12 1 1
1 1 8 28 2 2 7 27 27 7 2 2 28 8 1 1
1 1 4 24 2 2 3 23 23 3 2 2 24 4 1 1
1 1 5 25 2 2 4 24 24 4 2 2 25 5 1 1
1 1 9 29 2 2 8 28 28 8 2 2 29 9 1 1
1 1 13 33 2 2 12 32 32 12 2 2 33 13 1 1
1 1 17 37 2 2 16 36 36 16 2 2 37 17 1 1
1 1 21 41 2 2 20 40 40 20 2 2 41 21 1 1
1 1 21 41 2 2 20 40 40 20 2 2 41 21 1 1
1 1 17 37 2 2 16 36 36 16 2 2 37 17 1 1
1 1 13 33 2 2 12 32 32 12 2 2 33 13 1 1
1 1 9 29 2 2 8 28 28 8 2 2 29 9 1 1
1 1 5 25 2 2 4 24 24 4 2 2 25 5 1 1
1 1 5 25 2 2 4 24 24 4 2 2 25 5 1 1
1 1 9 29 2 2 8 28 28 8 2 2 29 9 1 1
1 1 13 33 2 2 12 32 32 12 2 2 33 13 1 1
1 1 17 37 2 2 16 36 36 16 2 2 37 17 1 1
1 1 21 41 2 2 20 40 40 20 2 2 41 21 1 1
1 1 21 41 2 2 20 40 40 20 2 2 41 21 1 1
1 1 17 37 2 2 16 36 36 16 2 2 37 17 1 1
1 1 13 33 2 2 12 32 32 12 2 2 33 13 1 1
1 1 9 29 2 2 8 28 28 8 2 2 29 9 1 1
1 1 5 25 2 2 4 24 24 4 2 2 25 5 1 1
1 1 4 24 2 2 3 23 23 3 2 2 24 4 1 1
1 1 8 28 2 2 7 27 27 7 2 2 28 8 1 1
1 1 12 32 2 2 11 31 31 11 2 2 32 12 1 1
1 1 16 36 2 2 15 35 35 15 2 2 36 16 1 1
1 1 20 40 2 2 19 39 39 19 2 2 40 20 1 1
1 1 20 40 2 2 19 39 39 19 2 2 40 20 1 1
1 1 16 36 2 2 15 35 35 15 2 2 36 16 1 1
1 1 12 32 2 2 11 31 31 11 2 2 32 12 1 1
1 1 8 28 2 2 7 27 27 7 2 2 28 8 1 1
1 1 4 24 2 2 3 23 23 3 2 2 24 4 1 1
1 1 3 23 2 2 2 22 22 2 2 2 23 3 1 1
1 1 7 27 2 2 6 26 26 6 2 2 27 7 1 1
1 1 11 31 2 2 10 30 30 10 2 2 31 11 1 1
1 1 15 35 2 2 14 34 34 14 2 2 35 15 1 1
1 1 19 39 2 2 18 38 38 18 2 2 39 19 1 1
1 1 19 39 2 2 18 38 38 18 2 2 39 19 1 1
1 1 15 35 2 2 14 34 34 14 2 2 35 15 1 1
1 1 11 31 2 2 10 30 30 10 2 2 31 11 1 1
1 1 7 27 2 2 6 26 26 6 2 2 27 7 1 1
1 1 3 23 2 2 2 22 22 2 2 2 23 3 1 1
1 1 2 22 2 2 1 21 21 1 2 2 22 2 1 1
1 1 6 26 2 2 5 25 25 5 2 2 26 6 1 1
1 1 10 30 2 2 9 29 29 9 2 2 30 10 1 1
1 1 14 34 2 2 13 33 33 13 2 2 34 14 1 1
1 1 18 38 2 2 17 37 37 17 2 2 38 18 1 1
1 1 18 38 2 2 17 37 37 17 2 2 38 18 1 1
1 1 14 34 2 2 13 33 33 13 2 2 34 14 1 1
1 1 10 30 2 2 9 29 29 9 2 2 30 10 1 1
1 1 6 26 2 2 5 25 25 5 2 2 26 6 1 1
1 1 2 22 2 2 1 21 21 1 2 2 22 2 1 1

View File

@ -0,0 +1,25 @@
4 header
grid a 14 b 5 c 4
size x 1.4e-05 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 22 2 2 1 21 1 2 2 22 2 1
1 1 6 26 2 2 5 25 5 2 2 26 6 1
1 1 10 30 2 2 9 29 9 2 2 30 10 1
1 1 14 34 2 2 13 33 13 2 2 34 14 1
1 1 18 38 2 2 17 37 17 2 2 38 18 1
1 1 3 23 2 2 2 22 2 2 2 23 3 1
1 1 7 27 2 2 6 26 6 2 2 27 7 1
1 1 11 31 2 2 10 30 10 2 2 31 11 1
1 1 15 35 2 2 14 34 14 2 2 35 15 1
1 1 19 39 2 2 18 38 18 2 2 39 19 1
1 1 4 24 2 2 3 23 3 2 2 24 4 1
1 1 8 28 2 2 7 27 7 2 2 28 8 1
1 1 12 32 2 2 11 31 11 2 2 32 12 1
1 1 16 36 2 2 15 35 15 2 2 36 16 1
1 1 20 40 2 2 19 39 19 2 2 40 20 1
1 1 5 25 2 2 4 24 4 2 2 25 5 1
1 1 9 29 2 2 8 28 8 2 2 29 9 1
1 1 13 33 2 2 12 32 12 2 2 33 13 1
1 1 17 37 2 2 16 36 16 2 2 37 17 1
1 1 21 41 2 2 20 40 20 2 2 41 21 1

View File

@ -0,0 +1,53 @@
4 header
grid a 8 b 8 c 6
size x 8e-06 y 8.000000000000001e-06 z 6e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 22 2 2 1 21
1 1 6 26 2 2 5 25
1 1 10 30 2 2 9 29
1 1 14 34 2 2 13 33
1 1 18 38 2 2 17 37
1 1 14 34 2 2 13 33
1 1 10 30 2 2 9 29
1 1 6 26 2 2 5 25
1 1 3 23 2 2 2 22
1 1 7 27 2 2 6 26
1 1 11 31 2 2 10 30
1 1 15 35 2 2 14 34
1 1 19 39 2 2 18 38
1 1 15 35 2 2 14 34
1 1 11 31 2 2 10 30
1 1 7 27 2 2 6 26
1 1 4 24 2 2 3 23
1 1 8 28 2 2 7 27
1 1 12 32 2 2 11 31
1 1 16 36 2 2 15 35
1 1 20 40 2 2 19 39
1 1 16 36 2 2 15 35
1 1 12 32 2 2 11 31
1 1 8 28 2 2 7 27
1 1 5 25 2 2 4 24
1 1 9 29 2 2 8 28
1 1 13 33 2 2 12 32
1 1 17 37 2 2 16 36
1 1 21 41 2 2 20 40
1 1 17 37 2 2 16 36
1 1 13 33 2 2 12 32
1 1 9 29 2 2 8 28
1 1 4 24 2 2 3 23
1 1 8 28 2 2 7 27
1 1 12 32 2 2 11 31
1 1 16 36 2 2 15 35
1 1 20 40 2 2 19 39
1 1 16 36 2 2 15 35
1 1 12 32 2 2 11 31
1 1 8 28 2 2 7 27
1 1 3 23 2 2 2 22
1 1 7 27 2 2 6 26
1 1 11 31 2 2 10 30
1 1 15 35 2 2 14 34
1 1 19 39 2 2 18 38
1 1 15 35 2 2 14 34
1 1 11 31 2 2 10 30
1 1 7 27 2 2 6 26

View File

@ -0,0 +1,53 @@
4 header
grid a 14 b 8 c 6
size x 1.4e-05 y 8.000000000000001e-06 z 6e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 22 2 2 1 21 1 2 2 22 2 1
1 1 6 26 2 2 5 25 5 2 2 26 6 1
1 1 10 30 2 2 9 29 9 2 2 30 10 1
1 1 14 34 2 2 13 33 13 2 2 34 14 1
1 1 18 38 2 2 17 37 17 2 2 38 18 1
1 1 14 34 2 2 13 33 13 2 2 34 14 1
1 1 10 30 2 2 9 29 9 2 2 30 10 1
1 1 6 26 2 2 5 25 5 2 2 26 6 1
1 1 3 23 2 2 2 22 2 2 2 23 3 1
1 1 7 27 2 2 6 26 6 2 2 27 7 1
1 1 11 31 2 2 10 30 10 2 2 31 11 1
1 1 15 35 2 2 14 34 14 2 2 35 15 1
1 1 19 39 2 2 18 38 18 2 2 39 19 1
1 1 15 35 2 2 14 34 14 2 2 35 15 1
1 1 11 31 2 2 10 30 10 2 2 31 11 1
1 1 7 27 2 2 6 26 6 2 2 27 7 1
1 1 4 24 2 2 3 23 3 2 2 24 4 1
1 1 8 28 2 2 7 27 7 2 2 28 8 1
1 1 12 32 2 2 11 31 11 2 2 32 12 1
1 1 16 36 2 2 15 35 15 2 2 36 16 1
1 1 20 40 2 2 19 39 19 2 2 40 20 1
1 1 16 36 2 2 15 35 15 2 2 36 16 1
1 1 12 32 2 2 11 31 11 2 2 32 12 1
1 1 8 28 2 2 7 27 7 2 2 28 8 1
1 1 5 25 2 2 4 24 4 2 2 25 5 1
1 1 9 29 2 2 8 28 8 2 2 29 9 1
1 1 13 33 2 2 12 32 12 2 2 33 13 1
1 1 17 37 2 2 16 36 16 2 2 37 17 1
1 1 21 41 2 2 20 40 20 2 2 41 21 1
1 1 17 37 2 2 16 36 16 2 2 37 17 1
1 1 13 33 2 2 12 32 12 2 2 33 13 1
1 1 9 29 2 2 8 28 8 2 2 29 9 1
1 1 4 24 2 2 3 23 3 2 2 24 4 1
1 1 8 28 2 2 7 27 7 2 2 28 8 1
1 1 12 32 2 2 11 31 11 2 2 32 12 1
1 1 16 36 2 2 15 35 15 2 2 36 16 1
1 1 20 40 2 2 19 39 19 2 2 40 20 1
1 1 16 36 2 2 15 35 15 2 2 36 16 1
1 1 12 32 2 2 11 31 11 2 2 32 12 1
1 1 8 28 2 2 7 27 7 2 2 28 8 1
1 1 3 23 2 2 2 22 2 2 2 23 3 1
1 1 7 27 2 2 6 26 6 2 2 27 7 1
1 1 11 31 2 2 10 30 10 2 2 31 11 1
1 1 15 35 2 2 14 34 14 2 2 35 15 1
1 1 19 39 2 2 18 38 18 2 2 39 19 1
1 1 15 35 2 2 14 34 14 2 2 35 15 1
1 1 11 31 2 2 10 30 10 2 2 31 11 1
1 1 7 27 2 2 6 26 6 2 2 27 7 1

View File

@ -0,0 +1,105 @@
4 header
grid a 10 b 10 c 10
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 2 22 2 2 2 1 21
1 1 2 2 22 2 2 2 1 21
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 18 18 38 2 2 2 17 37
1 1 18 18 38 2 2 2 17 37
1 1 2 2 22 2 2 2 1 21
1 1 2 2 22 2 2 2 1 21
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 18 18 38 2 2 2 17 37
1 1 18 18 38 2 2 2 17 37
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 5 5 25 2 2 2 4 24
1 1 5 5 25 2 2 2 4 24
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 21 21 41 2 2 2 20 40
1 1 21 21 41 2 2 2 20 40
1 1 5 5 25 2 2 2 4 24
1 1 5 5 25 2 2 2 4 24
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 21 21 41 2 2 2 20 40
1 1 21 21 41 2 2 2 20 40

View File

@ -0,0 +1,115 @@
4 header
grid a 10 b 11 c 10
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 2 22 2 2 2 1 21
1 1 2 2 22 2 2 2 1 21
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 18 18 38 2 2 2 17 37
1 1 18 18 38 2 2 2 17 37
1 1 2 2 22 2 2 2 1 21
1 1 2 2 22 2 2 2 1 21
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 18 18 38 2 2 2 17 37
1 1 18 18 38 2 2 2 17 37
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 5 5 25 2 2 2 4 24
1 1 5 5 25 2 2 2 4 24
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 21 21 41 2 2 2 20 40
1 1 21 21 41 2 2 2 20 40
1 1 5 5 25 2 2 2 4 24
1 1 5 5 25 2 2 2 4 24
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 21 21 41 2 2 2 20 40
1 1 21 21 41 2 2 2 20 40

View File

@ -0,0 +1,135 @@
4 header
grid a 10 b 13 c 10
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 2 22 2 2 2 1 21
1 1 2 2 22 2 2 2 1 21
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 18 18 38 2 2 2 17 37
1 1 18 18 38 2 2 2 17 37
1 1 2 2 22 2 2 2 1 21
1 1 2 2 22 2 2 2 1 21
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 18 18 38 2 2 2 17 37
1 1 18 18 38 2 2 2 17 37
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 3 3 23 2 2 2 2 22
1 1 3 3 23 2 2 2 2 22
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 7 7 27 2 2 2 6 26
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 11 11 31 2 2 2 10 30
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 15 15 35 2 2 2 14 34
1 1 19 19 39 2 2 2 18 38
1 1 19 19 39 2 2 2 18 38
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 4 4 24 2 2 2 3 23
1 1 4 4 24 2 2 2 3 23
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 8 8 28 2 2 2 7 27
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 12 12 32 2 2 2 11 31
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 16 16 36 2 2 2 15 35
1 1 20 20 40 2 2 2 19 39
1 1 20 20 40 2 2 2 19 39
1 1 5 5 25 2 2 2 4 24
1 1 5 5 25 2 2 2 4 24
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 21 21 41 2 2 2 20 40
1 1 21 21 41 2 2 2 20 40
1 1 5 5 25 2 2 2 4 24
1 1 5 5 25 2 2 2 4 24
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 21 21 41 2 2 2 20 40
1 1 21 21 41 2 2 2 20 40

View File

@ -0,0 +1,45 @@
4 header
grid a 10 b 20 c 2
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 2 22 2 2 2 1 21
1 1 2 2 22 2 2 2 1 21
1 1 2 2 22 2 2 2 1 21
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 6 6 26 2 2 2 5 25
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 10 10 30 2 2 2 9 29
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 14 14 34 2 2 2 13 33
1 1 18 18 38 2 2 2 17 37
1 1 18 18 38 2 2 2 17 37
1 1 18 18 38 2 2 2 17 37
1 1 5 5 25 2 2 2 4 24
1 1 5 5 25 2 2 2 4 24
1 1 5 5 25 2 2 2 4 24
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 9 9 29 2 2 2 8 28
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 13 13 33 2 2 2 12 32
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 17 17 37 2 2 2 16 36
1 1 21 21 41 2 2 2 20 40
1 1 21 21 41 2 2 2 20 40
1 1 21 21 41 2 2 2 20 40

View File

@ -0,0 +1,85 @@
4 header
grid a 5 b 4 c 20
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 2 2 2 21
1 6 2 2 25
1 14 2 2 33
1 18 2 2 37
1 2 2 2 21
1 6 2 2 25
1 14 2 2 33
1 18 2 2 37
1 2 2 2 21
1 6 2 2 25
1 14 2 2 33
1 18 2 2 37
1 2 2 2 21
1 6 2 2 25
1 14 2 2 33
1 18 2 2 37
1 3 2 2 22
1 7 2 2 26
1 15 2 2 34
1 19 2 2 38
1 3 2 2 22
1 7 2 2 26
1 15 2 2 34
1 19 2 2 38
1 3 2 2 22
1 7 2 2 26
1 15 2 2 34
1 19 2 2 38
1 3 2 2 22
1 7 2 2 26
1 15 2 2 34
1 19 2 2 38
1 3 2 2 22
1 7 2 2 26
1 15 2 2 34
1 19 2 2 38
1 3 2 2 22
1 7 2 2 26
1 15 2 2 34
1 19 2 2 38
1 4 2 2 23
1 8 2 2 27
1 16 2 2 35
1 20 2 2 39
1 4 2 2 23
1 8 2 2 27
1 16 2 2 35
1 20 2 2 39
1 4 2 2 23
1 8 2 2 27
1 16 2 2 35
1 20 2 2 39
1 4 2 2 23
1 8 2 2 27
1 16 2 2 35
1 20 2 2 39
1 4 2 2 23
1 8 2 2 27
1 16 2 2 35
1 20 2 2 39
1 4 2 2 23
1 8 2 2 27
1 16 2 2 35
1 20 2 2 39
1 5 2 2 24
1 9 2 2 28
1 17 2 2 36
1 21 2 2 40
1 5 2 2 24
1 9 2 2 28
1 17 2 2 36
1 21 2 2 40
1 5 2 2 24
1 9 2 2 28
1 17 2 2 36
1 21 2 2 40
1 5 2 2 24
1 9 2 2 28
1 17 2 2 36
1 21 2 2 40

View File

@ -0,0 +1,125 @@
4 header
grid a 8 b 10 c 12
size x 8e-06 y 5e-06 z 4e-06
origin x 0.0 y 0.0 z 0.0
homogenization 1
1 1 2 22 2 2 1 21
1 1 2 22 2 2 1 21
1 1 6 26 2 2 5 25
1 1 6 26 2 2 5 25
1 1 10 30 2 2 9 29
1 1 10 30 2 2 9 29
1 1 14 34 2 2 13 33
1 1 14 34 2 2 13 33
1 1 18 38 2 2 17 37
1 1 18 38 2 2 17 37
1 1 2 22 2 2 1 21
1 1 2 22 2 2 1 21
1 1 6 26 2 2 5 25
1 1 6 26 2 2 5 25
1 1 10 30 2 2 9 29
1 1 10 30 2 2 9 29
1 1 14 34 2 2 13 33
1 1 14 34 2 2 13 33
1 1 18 38 2 2 17 37
1 1 18 38 2 2 17 37
1 1 3 23 2 2 2 22
1 1 3 23 2 2 2 22
1 1 7 27 2 2 6 26
1 1 7 27 2 2 6 26
1 1 11 31 2 2 10 30
1 1 11 31 2 2 10 30
1 1 15 35 2 2 14 34
1 1 15 35 2 2 14 34
1 1 19 39 2 2 18 38
1 1 19 39 2 2 18 38
1 1 3 23 2 2 2 22
1 1 3 23 2 2 2 22
1 1 7 27 2 2 6 26
1 1 7 27 2 2 6 26
1 1 11 31 2 2 10 30
1 1 11 31 2 2 10 30
1 1 15 35 2 2 14 34
1 1 15 35 2 2 14 34
1 1 19 39 2 2 18 38
1 1 19 39 2 2 18 38
1 1 3 23 2 2 2 22
1 1 3 23 2 2 2 22
1 1 7 27 2 2 6 26
1 1 7 27 2 2 6 26
1 1 11 31 2 2 10 30
1 1 11 31 2 2 10 30
1 1 15 35 2 2 14 34
1 1 15 35 2 2 14 34
1 1 19 39 2 2 18 38
1 1 19 39 2 2 18 38
1 1 3 23 2 2 2 22
1 1 3 23 2 2 2 22
1 1 7 27 2 2 6 26
1 1 7 27 2 2 6 26
1 1 11 31 2 2 10 30
1 1 11 31 2 2 10 30
1 1 15 35 2 2 14 34
1 1 15 35 2 2 14 34
1 1 19 39 2 2 18 38
1 1 19 39 2 2 18 38
1 1 4 24 2 2 3 23
1 1 4 24 2 2 3 23
1 1 8 28 2 2 7 27
1 1 8 28 2 2 7 27
1 1 12 32 2 2 11 31
1 1 12 32 2 2 11 31
1 1 16 36 2 2 15 35
1 1 16 36 2 2 15 35
1 1 20 40 2 2 19 39
1 1 20 40 2 2 19 39
1 1 4 24 2 2 3 23
1 1 4 24 2 2 3 23
1 1 8 28 2 2 7 27
1 1 8 28 2 2 7 27
1 1 12 32 2 2 11 31
1 1 12 32 2 2 11 31
1 1 16 36 2 2 15 35
1 1 16 36 2 2 15 35
1 1 20 40 2 2 19 39
1 1 20 40 2 2 19 39
1 1 4 24 2 2 3 23
1 1 4 24 2 2 3 23
1 1 8 28 2 2 7 27
1 1 8 28 2 2 7 27
1 1 12 32 2 2 11 31
1 1 12 32 2 2 11 31
1 1 16 36 2 2 15 35
1 1 16 36 2 2 15 35
1 1 20 40 2 2 19 39
1 1 20 40 2 2 19 39
1 1 4 24 2 2 3 23
1 1 4 24 2 2 3 23
1 1 8 28 2 2 7 27
1 1 8 28 2 2 7 27
1 1 12 32 2 2 11 31
1 1 12 32 2 2 11 31
1 1 16 36 2 2 15 35
1 1 16 36 2 2 15 35
1 1 20 40 2 2 19 39
1 1 20 40 2 2 19 39
1 1 5 25 2 2 4 24
1 1 5 25 2 2 4 24
1 1 9 29 2 2 8 28
1 1 9 29 2 2 8 28
1 1 13 33 2 2 12 32
1 1 13 33 2 2 12 32
1 1 17 37 2 2 16 36
1 1 17 37 2 2 16 36
1 1 21 41 2 2 20 40
1 1 21 41 2 2 20 40
1 1 5 25 2 2 4 24
1 1 5 25 2 2 4 24
1 1 9 29 2 2 8 28
1 1 9 29 2 2 8 28
1 1 13 33 2 2 12 32
1 1 13 33 2 2 12 32
1 1 17 37 2 2 16 36
1 1 17 37 2 2 16 36
1 1 21 41 2 2 20 40
1 1 21 41 2 2 20 40

View File

@ -0,0 +1,67 @@
import shutil
import os
import pytest
import numpy as np
from damask import DADF5
from damask import mechanics
@pytest.fixture
def default(tmp_path,reference_dir):
"""Small DADF5 file in temp location for modification."""
fname = '12grains6x7x8_tensionY.hdf5'
shutil.copy(os.path.join(reference_dir,fname),tmp_path)
f = DADF5(os.path.join(tmp_path,fname))
f.set_by_time(20.0,20.0)
return f
@pytest.fixture
def reference_dir(reference_dir_base):
"""Directory containing reference results."""
return os.path.join(reference_dir_base,'DADF5')
class TestDADF5:
def test_add_deviator(self,default):
default.add_deviator('P')
loc = {'P' :default.get_dataset_location('P'),
's_P':default.get_dataset_location('s_P')}
in_memory = mechanics.deviatoric_part(default.read_dataset(loc['P'],0))
in_file = default.read_dataset(loc['s_P'],0)
assert np.allclose(in_memory,in_file)
def test_add_Cauchy(self,default):
default.add_Cauchy('P','F')
loc = {'F': default.get_dataset_location('F'),
'P': default.get_dataset_location('P'),
'sigma':default.get_dataset_location('sigma')}
in_memory = mechanics.Cauchy(default.read_dataset(loc['F'],0),
default.read_dataset(loc['P'],0))
in_file = default.read_dataset(loc['sigma'],0)
assert np.allclose(in_memory,in_file)
def test_add_absolute(self,default):
default.add_absolute('Fe')
loc = {'Fe': default.get_dataset_location('Fe'),
'|Fe|': default.get_dataset_location('|Fe|')}
in_memory = np.abs(default.read_dataset(loc['Fe'],0))
in_file = default.read_dataset(loc['|Fe|'],0)
assert np.allclose(in_memory,in_file)
def test_add_determinant(self,default):
default.add_determinant('P')
loc = {'P': default.get_dataset_location('P'),
'det(P)': default.get_dataset_location('det(P)')}
in_memory = np.linalg.det(default.read_dataset(loc['P'],0)).reshape(-1,1)
in_file = default.read_dataset(loc['det(P)'],0)
assert np.allclose(in_memory,in_file)
def test_add_spherical(self,default):
default.add_spherical('P')
loc = {'P': default.get_dataset_location('P'),
'p_P': default.get_dataset_location('p_P')}
in_memory = mechanics.spherical_part(default.read_dataset(loc['P'],0)).reshape(-1,1)
in_file = default.read_dataset(loc['p_P'],0)
assert np.allclose(in_memory,in_file)

99
python/tests/test_Geom.py Normal file
View File

@ -0,0 +1,99 @@
import copy
import os
import pytest
import numpy as np
from damask import Geom
def geom_equal(a,b):
return np.all(a.get_microstructure() == b.get_microstructure()) and \
np.all(a.get_size() == b.get_size()) and \
np.all(a.get_grid() == b.get_grid())
@pytest.fixture
def default():
"""Simple geometry."""
x=np.concatenate((np.ones(40,dtype=int),
np.arange(2,42),
np.ones(40,dtype=int)*2,
np.arange(1,41))).reshape((8,5,4))
return Geom(x,[8e-6,5e-6,4e-6])
@pytest.fixture
def reference_dir(reference_dir_base):
"""Directory containing reference results."""
return os.path.join(reference_dir_base,'Geom')
class TestGeom:
def test_update(self,default):
modified = copy.deepcopy(default)
modified.update(
default.get_microstructure(),
default.get_size(),
default.get_origin()
)
assert geom_equal(modified,default)
def test_write_read_str(self,default,tmpdir):
default.to_file(str(tmpdir.join('default.geom')))
new = Geom.from_file(str(tmpdir.join('default.geom')))
assert geom_equal(new,default)
def test_write_read_file(self,default,tmpdir):
with open(tmpdir.join('default.geom'),'w') as f:
default.to_file(f)
with open(tmpdir.join('default.geom')) as f:
new = Geom.from_file(f)
assert geom_equal(new,default)
@pytest.mark.parametrize('pack',[True,False])
def test_pack(self,default,tmpdir,pack):
default.to_file(tmpdir.join('default.geom'),pack=pack)
new = Geom.from_file(tmpdir.join('default.geom'))
assert geom_equal(new,default)
@pytest.mark.parametrize('directions,reflect',[
(['x'], False),
(['x','y','z'],True),
(['z','x','y'],False),
(['y','z'], False)
]
)
def test_mirror(self,default,update,reference_dir,directions,reflect):
modified = copy.deepcopy(default)
modified.mirror(directions,reflect)
tag = 'directions={}_reflect={}'.format('-'.join(directions),reflect)
reference = os.path.join(reference_dir,'mirror_{}.geom'.format(tag))
if update: modified.to_file(reference)
assert geom_equal(modified,Geom.from_file(reference))
@pytest.mark.parametrize('stencil',[(1),(2),(3),(4)])
def test_clean(self,default,update,reference_dir,stencil):
modified = copy.deepcopy(default)
modified.clean(stencil)
tag = 'stencil={}'.format(stencil)
reference = os.path.join(reference_dir,'clean_{}.geom'.format(tag))
if update: modified.to_file(reference)
assert geom_equal(modified,Geom.from_file(reference))
@pytest.mark.parametrize('grid',[
((10,11,10)),
([10,13,10]),
(np.array((10,10,10))),
(np.array((8, 10,12))),
(np.array((5, 4, 20))),
(np.array((10,20,2)) )
]
)
def test_scale(self,default,update,reference_dir,grid):
modified = copy.deepcopy(default)
modified.scale(grid)
tag = 'grid={}'.format('-'.join([str(x) for x in grid]))
reference = os.path.join(reference_dir,'scale_{}.geom'.format(tag))
if update: modified.to_file(reference)
assert geom_equal(modified,Geom.from_file(reference))

View File

@ -0,0 +1,55 @@
import pytest
import numpy as np
from damask import Rotation
n = 1000
@pytest.fixture
def default():
"""A set of n random rotations."""
return [Rotation.fromRandom() for r in range(n)]
class TestRotation:
def test_Eulers(self,default):
for rot in default:
assert np.allclose(rot.asQuaternion(),
Rotation.fromEulers(rot.asEulers()).asQuaternion())
def test_AxisAngle(self,default):
for rot in default:
assert np.allclose(rot.asEulers(),
Rotation.fromAxisAngle(rot.asAxisAngle()).asEulers())
def test_Matrix(self,default):
for rot in default:
assert np.allclose(rot.asAxisAngle(),
Rotation.fromMatrix(rot.asMatrix()).asAxisAngle())
def test_Rodriques(self,default):
for rot in default:
assert np.allclose(rot.asMatrix(),
Rotation.fromRodrigues(rot.asRodrigues()).asMatrix())
def test_Homochoric(self,default):
for rot in default:
assert np.allclose(rot.asRodrigues(),
Rotation.fromHomochoric(rot.asHomochoric()).asRodrigues())
def test_Cubochoric(self,default):
for rot in default:
assert np.allclose(rot.asHomochoric(),
Rotation.fromCubochoric(rot.asCubochoric()).asHomochoric())
def test_Quaternion(self,default):
for rot in default:
assert np.allclose(rot.asCubochoric(),
Rotation.fromQuaternion(rot.asQuaternion()).asCubochoric())

View File

@ -0,0 +1,57 @@
import pytest
import numpy as np
from damask import Table
@pytest.fixture
def default():
"""Simple Table."""
x = np.ones((5,13))
return Table(x,{'F':(3,3),'v':(3,),'s':(1,)},['test data','contains only ones'])
class TestTable:
def test_get_tensor(self,default):
d = default.get_array('F')
assert np.allclose(d,1.0) and d.shape[1:] == (3,3)
def test_get_vector(self,default):
d = default.get_array('v')
assert np.allclose(d,1.0) and d.shape[1:] == (3,)
def test_write_read_str(self,default,tmpdir):
default.to_ASCII(str(tmpdir.join('default.txt')))
new = Table.from_ASCII(str(tmpdir.join('default.txt')))
assert all(default.data==new.data)
def test_write_read_file(self,default,tmpdir):
with open(tmpdir.join('default.txt'),'w') as f:
default.to_ASCII(f)
with open(tmpdir.join('default.txt')) as f:
new = Table.from_ASCII(f)
assert all(default.data==new.data)
def test_set_array(self,default):
default.set_array('F',np.zeros((5,3,3)),'set to zero')
d=default.get_array('F')
assert np.allclose(d,0.0) and d.shape[1:] == (3,3)
def test_get_labels(self,default):
assert default.get_labels() == ['F','v','s']
def test_add_array(self,default):
d = np.random.random((5,9))
default.add_array('nine',d,'random data')
assert np.allclose(d,default.get_array('nine'))
def test_invalid_initialization(self,default):
x = default.get_array('v')
with pytest.raises(IndexError):
Table(x,{'F':(3,3)})
def test_invalid_set(self,default):
x = default.get_array('v')
with pytest.raises(ValueError):
default.set_array('F',x,'does not work')

View File

@ -0,0 +1,142 @@
import numpy as np
from damask import mechanics
class TestMechanics:
n = 1000
c = np.random.randint(n)
def test_vectorize_Cauchy(self):
P = np.random.random((self.n,3,3))
F = np.random.random((self.n,3,3))
assert np.allclose(mechanics.Cauchy(F,P)[self.c],
mechanics.Cauchy(F[self.c],P[self.c]))
def test_vectorize_strain_tensor(self):
F = np.random.random((self.n,3,3))
t = ['V','U'][np.random.randint(0,2)]
m = np.random.random()*10. -5.0
assert np.allclose(mechanics.strain_tensor(F,t,m)[self.c],
mechanics.strain_tensor(F[self.c],t,m))
def test_vectorize_deviatoric_part(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.deviatoric_part(x)[self.c],
mechanics.deviatoric_part(x[self.c]))
def test_vectorize_spherical_part(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.spherical_part(x)[self.c],
mechanics.spherical_part(x[self.c]))
def test_vectorize_Mises_stress(self):
sigma = np.random.random((self.n,3,3))
assert np.allclose(mechanics.Mises_stress(sigma)[self.c],
mechanics.Mises_stress(sigma[self.c]))
def test_vectorize_Mises_strain(self):
epsilon = np.random.random((self.n,3,3))
assert np.allclose(mechanics.Mises_strain(epsilon)[self.c],
mechanics.Mises_strain(epsilon[self.c]))
def test_vectorize_symmetric(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.symmetric(x)[self.c],
mechanics.symmetric(x[self.c]))
def test_vectorize_maximum_shear(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.maximum_shear(x)[self.c],
mechanics.maximum_shear(x[self.c]))
def test_vectorize_principal_components(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.principal_components(x)[self.c],
mechanics.principal_components(x[self.c]))
def test_vectorize_transpose(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.transpose(x)[self.c],
mechanics.transpose(x[self.c]))
def test_vectorize_rotational_part(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.rotational_part(x)[self.c],
mechanics.rotational_part(x[self.c]))
def test_vectorize_left_stretch(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.left_stretch(x)[self.c],
mechanics.left_stretch(x[self.c]))
def test_vectorize_right_stretch(self):
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.right_stretch(x)[self.c],
mechanics.right_stretch(x[self.c]))
def test_Cauchy(self):
"""Ensure Cauchy stress is symmetrized 1. Piola-Kirchhoff stress for no deformation."""
P = np.random.random((self.n,3,3))
assert np.allclose(mechanics.Cauchy(np.broadcast_to(np.eye(3),(self.n,3,3)),P),
mechanics.symmetric(P))
def test_strain_tensor_no_rotation(self):
"""Ensure that left and right stretch give same results for no rotation."""
F = np.broadcast_to(np.eye(3),[self.n,3,3])*np.random.random((self.n,3,3))
m = np.random.random()*20.0-10.0
assert np.allclose(mechanics.strain_tensor(F,'U',m),
mechanics.strain_tensor(F,'V',m))
def test_strain_tensor_rotation(self):
"""Ensure that pure rotation results in no strain."""
F = mechanics.rotational_part(np.random.random((self.n,3,3)))
t = ['V','U'][np.random.randint(0,2)]
m = np.random.random()*2.0 - 1.0
assert np.allclose(mechanics.strain_tensor(F,t,m),
0.0)
def test_spherical_deviatoric_part(self):
"""Ensure that full tensor is sum of spherical and deviatoric part."""
x = np.random.random((self.n,3,3))
sph = np.broadcast_to(np.eye(3),(self.n,3,3))\
* np.repeat(mechanics.spherical_part(x),9).reshape(self.n,3,3)
assert np.allclose(sph + mechanics.deviatoric_part(x),
x)
def test_symmetric(self):
"""Ensure that a symmetric tensor is half of the sum of a tensor and its transpose."""
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.symmetric(x)*2.0,
mechanics.transpose(x)+x)
def test_transpose(self):
"""Ensure that a symmetric tensor equals its transpose."""
x = mechanics.symmetric(np.random.random((self.n,3,3)))
assert np.allclose(mechanics.transpose(x),
x)
def test_Mises(self):
"""Ensure that equivalent stress is 3/2 of equivalent strain."""
x = np.random.random((self.n,3,3))
assert np.allclose(mechanics.Mises_stress(x)/mechanics.Mises_strain(x),
1.5)

View File

@ -57,10 +57,10 @@ subroutine CPFEM_initAll
call config_init call config_init
call math_init call math_init
call rotations_init call rotations_init
call mesh_init
call lattice_init call lattice_init
call HDF5_utilities_init call HDF5_utilities_init
call results_init call results_init
call mesh_init
call material_init call material_init
call constitutive_init call constitutive_init
call crystallite_init call crystallite_init

View File

@ -85,6 +85,7 @@ subroutine config_init
case (trim('crystallite')) case (trim('crystallite'))
call parse_materialConfig(config_name_crystallite,config_crystallite,line,fileContent(i+1:)) call parse_materialConfig(config_name_crystallite,config_crystallite,line,fileContent(i+1:))
if (verbose) write(6,'(a)') ' Crystallite parsed'; flush(6) if (verbose) write(6,'(a)') ' Crystallite parsed'; flush(6)
deallocate(config_crystallite)
case (trim('homogenization')) case (trim('homogenization'))
call parse_materialConfig(config_name_homogenization,config_homogenization,line,fileContent(i+1:)) call parse_materialConfig(config_name_homogenization,config_homogenization,line,fileContent(i+1:))
@ -102,27 +103,25 @@ subroutine config_init
call IO_error(160,ext_msg='<homogenization>') call IO_error(160,ext_msg='<homogenization>')
if (.not. allocated(config_microstructure) .or. size(config_microstructure) < 1) & if (.not. allocated(config_microstructure) .or. size(config_microstructure) < 1) &
call IO_error(160,ext_msg='<microstructure>') call IO_error(160,ext_msg='<microstructure>')
if (.not. allocated(config_crystallite) .or. size(config_crystallite) < 1) &
call IO_error(160,ext_msg='<crystallite>')
if (.not. allocated(config_phase) .or. size(config_phase) < 1) & if (.not. allocated(config_phase) .or. size(config_phase) < 1) &
call IO_error(160,ext_msg='<phase>') call IO_error(160,ext_msg='<phase>')
if (.not. allocated(config_texture) .or. size(config_texture) < 1) & if (.not. allocated(config_texture) .or. size(config_texture) < 1) &
call IO_error(160,ext_msg='<texture>') call IO_error(160,ext_msg='<texture>')
inquire(file='numerics.config', exist=fileExists) inquire(file='numerics.config', exist=fileExists)
if (fileExists) then if (fileExists) then
write(6,'(/,a)') ' reading numerics.config'; flush(6) write(6,'(/,a)') ' reading numerics.config'; flush(6)
fileContent = IO_read_ASCII('numerics.config') fileContent = IO_read_ASCII('numerics.config')
call parse_debugAndNumericsConfig(config_numerics,fileContent) call parse_debugAndNumericsConfig(config_numerics,fileContent)
endif endif
inquire(file='debug.config', exist=fileExists) inquire(file='debug.config', exist=fileExists)
if (fileExists) then if (fileExists) then
write(6,'(/,a)') ' reading debug.config'; flush(6) write(6,'(/,a)') ' reading debug.config'; flush(6)
fileContent = IO_read_ASCII('debug.config') fileContent = IO_read_ASCII('debug.config')
call parse_debugAndNumericsConfig(config_debug,fileContent) call parse_debugAndNumericsConfig(config_debug,fileContent)
endif endif
contains contains
@ -295,9 +294,6 @@ subroutine config_deallocate(what)
case('material.config/microstructure') case('material.config/microstructure')
deallocate(config_microstructure) deallocate(config_microstructure)
case('material.config/crystallite')
deallocate(config_crystallite)
case('material.config/homogenization') case('material.config/homogenization')
deallocate(config_homogenization) deallocate(config_homogenization)

View File

@ -22,22 +22,10 @@ module crystallite
use discretization use discretization
use lattice use lattice
use plastic_nonlocal use plastic_nonlocal
use geometry_plastic_nonlocal, only: &
nIPneighbors => geometry_plastic_nonlocal_nIPneighbors, &
IPneighborhood => geometry_plastic_nonlocal_IPneighborhood
use HDF5_utilities
use results use results
implicit none implicit none
private private
character(len=64), dimension(:,:), allocatable :: &
crystallite_output !< name of each post result output
integer, public, protected :: &
crystallite_maxSizePostResults !< description not available
integer, dimension(:), allocatable, public, protected :: &
crystallite_sizePostResults !< description not available
integer, dimension(:,:), allocatable :: &
crystallite_sizePostResult !< description not available
real(pReal), dimension(:,:,:), allocatable, public :: & real(pReal), dimension(:,:,:), allocatable, public :: &
crystallite_dt !< requested time increment of each grain crystallite_dt !< requested time increment of each grain
@ -90,21 +78,11 @@ module crystallite
enum, bind(c) enum, bind(c)
enumerator :: undefined_ID, & enumerator :: undefined_ID, &
phase_ID, &
texture_ID, &
orientation_ID, & orientation_ID, &
grainrotation_ID, &
defgrad_ID, & defgrad_ID, &
fe_ID, &
fp_ID, & fp_ID, &
fi_ID, &
lp_ID, &
li_ID, &
p_ID, & p_ID, &
s_ID, & elasmatrix_ID
elasmatrix_ID, &
neighboringip_ID, &
neighboringelement_ID
end enum end enum
integer(kind(undefined_ID)),dimension(:,:), allocatable :: & integer(kind(undefined_ID)),dimension(:,:), allocatable :: &
crystallite_outputID !< ID of each post result output crystallite_outputID !< ID of each post result output
@ -213,13 +191,6 @@ subroutine crystallite_init
allocate(crystallite_requested(cMax,iMax,eMax), source=.false.) allocate(crystallite_requested(cMax,iMax,eMax), source=.false.)
allocate(crystallite_todo(cMax,iMax,eMax), source=.false.) allocate(crystallite_todo(cMax,iMax,eMax), source=.false.)
allocate(crystallite_converged(cMax,iMax,eMax), source=.true.) allocate(crystallite_converged(cMax,iMax,eMax), source=.true.)
allocate(crystallite_output(maxval(crystallite_Noutput), &
size(config_crystallite))) ; crystallite_output = ''
allocate(crystallite_outputID(maxval(crystallite_Noutput), &
size(config_crystallite)), source=undefined_ID)
allocate(crystallite_sizePostResults(size(config_crystallite)),source=0)
allocate(crystallite_sizePostResult(maxval(crystallite_Noutput), &
size(config_crystallite)), source=0)
num%subStepMinCryst = config_numerics%getFloat('substepmincryst', defaultVal=1.0e-3_pReal) num%subStepMinCryst = config_numerics%getFloat('substepmincryst', defaultVal=1.0e-3_pReal)
num%subStepSizeCryst = config_numerics%getFloat('substepsizecryst', defaultVal=0.25_pReal) num%subStepSizeCryst = config_numerics%getFloat('substepsizecryst', defaultVal=0.25_pReal)
@ -266,55 +237,6 @@ subroutine crystallite_init
integrateState => integrateStateRKCK45 integrateState => integrateStateRKCK45
end select end select
do c = 1, size(config_crystallite)
#if defined(__GFORTRAN__)
str = ['GfortranBug86277']
str = config_crystallite(c)%getStrings('(output)',defaultVal=str)
if (str(1) == 'GfortranBug86277') str = [character(len=65536)::]
#else
str = config_crystallite(c)%getStrings('(output)',defaultVal=[character(len=65536)::])
#endif
do o = 1, size(str)
crystallite_output(o,c) = str(o)
outputName: select case(str(o))
case ('phase') outputName
crystallite_outputID(o,c) = phase_ID
case ('texture') outputName
crystallite_outputID(o,c) = texture_ID
case ('orientation') outputName
crystallite_outputID(o,c) = orientation_ID
case ('grainrotation') outputName
crystallite_outputID(o,c) = grainrotation_ID
case ('defgrad','f') outputName ! ToDo: no alias (f only)
crystallite_outputID(o,c) = defgrad_ID
case ('fe') outputName
crystallite_outputID(o,c) = fe_ID
case ('fp') outputName
crystallite_outputID(o,c) = fp_ID
case ('fi') outputName
crystallite_outputID(o,c) = fi_ID
case ('lp') outputName
crystallite_outputID(o,c) = lp_ID
case ('li') outputName
crystallite_outputID(o,c) = li_ID
case ('p','firstpiola','1stpiola') outputName ! ToDo: no alias (p only)
crystallite_outputID(o,c) = p_ID
case ('s','tstar','secondpiola','2ndpiola') outputName ! ToDo: no alias (s only)
crystallite_outputID(o,c) = s_ID
case ('elasmatrix') outputName
crystallite_outputID(o,c) = elasmatrix_ID
case ('neighboringip') outputName ! ToDo: this is not a result, it is static. Should be written out by mesh
crystallite_outputID(o,c) = neighboringip_ID
case ('neighboringelement') outputName ! ToDo: this is not a result, it is static. Should be written out by mesh
crystallite_outputID(o,c) = neighboringelement_ID
case default outputName
call IO_error(105,ext_msg=trim(str(o))//' (Crystallite)')
end select outputName
enddo
enddo
allocate(output_constituent(size(config_phase))) allocate(output_constituent(size(config_phase)))
do c = 1, size(config_phase) do c = 1, size(config_phase)
#if defined(__GFORTRAN__) #if defined(__GFORTRAN__)
@ -327,47 +249,14 @@ subroutine crystallite_init
#endif #endif
enddo enddo
do r = 1,size(config_crystallite)
do o = 1,crystallite_Noutput(r)
select case(crystallite_outputID(o,r))
case(orientation_ID)
mySize = 4
case(defgrad_ID,fp_ID,p_ID)
mySize = 9
case(neighboringip_ID,neighboringelement_ID)
mySize = nIPneighbors
case default
mySize = 0
end select
crystallite_sizePostResult(o,r) = mySize
crystallite_sizePostResults(r) = crystallite_sizePostResults(r) + mySize
enddo
enddo
crystallite_maxSizePostResults = &
maxval(crystallite_sizePostResults(microstructure_crystallite),microstructure_active)
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! write description file for crystallite output ! write description file for crystallite output
if (worldrank == 0) then if (worldrank == 0) then
call IO_write_jobFile(FILEUNIT,'outputCrystallite') call IO_write_jobFile(FILEUNIT,'outputCrystallite')
write(FILEUNIT,'(/,a,/)') '[not supported anymore]'
do r = 1,size(config_crystallite)
if (any(microstructure_crystallite(discretization_microstructureAt) == r)) then
write(FILEUNIT,'(/,a,/)') '['//trim(config_name_crystallite(r))//']'
do o = 1,crystallite_Noutput(r)
write(FILEUNIT,'(a,i4)') trim(crystallite_output(o,r))//char(9),crystallite_sizePostResult(o,r)
enddo
endif
enddo
close(FILEUNIT) close(FILEUNIT)
endif endif
call config_deallocate('material.config/phase') call config_deallocate('material.config/phase')
call config_deallocate('material.config/crystallite')
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! initialize ! initialize
@ -869,59 +758,21 @@ function crystallite_postResults(ipc, ip, el)
ip, & !< integration point index ip, & !< integration point index
ipc !< grain index ipc !< grain index
real(pReal), dimension(1+crystallite_sizePostResults(microstructure_crystallite(discretization_microstructureAt(el))) + & real(pReal), dimension(1+ &
1+plasticState(material_phaseAt(ipc,el))%sizePostResults + & 1+plasticState(material_phaseAt(ipc,el))%sizePostResults + &
sum(sourceState(material_phaseAt(ipc,el))%p(:)%sizePostResults)) :: & sum(sourceState(material_phaseAt(ipc,el))%p(:)%sizePostResults)) :: &
crystallite_postResults crystallite_postResults
integer :: & integer :: &
o, & o, &
c, & c, &
crystID, &
mySize, & mySize, &
n n
crystID = microstructure_crystallite(discretization_microstructureAt(el))
crystallite_postResults = 0.0_pReal crystallite_postResults = 0.0_pReal
crystallite_postResults(1) = real(crystallite_sizePostResults(crystID),pReal) ! header-like information (length) crystallite_postResults(1) = 0.0_pReal ! header-like information (length)
c = 1 c = 1
do o = 1,crystallite_Noutput(crystID)
mySize = 0
select case(crystallite_outputID(o,crystID))
case (orientation_ID)
mySize = 4
crystallite_postResults(c+1:c+mySize) = crystallite_orientation(ipc,ip,el)%asQuaternion()
! remark: tensor output is of the form 11,12,13, 21,22,23, 31,32,33
! thus row index i is slow, while column index j is fast. reminder: "row is slow"
case (defgrad_ID)
mySize = 9
crystallite_postResults(c+1:c+mySize) = &
reshape(transpose(crystallite_partionedF(1:3,1:3,ipc,ip,el)),[mySize])
case (fp_ID)
mySize = 9
crystallite_postResults(c+1:c+mySize) = &
reshape(transpose(crystallite_Fp(1:3,1:3,ipc,ip,el)),[mySize])
case (p_ID)
mySize = 9
crystallite_postResults(c+1:c+mySize) = &
reshape(transpose(crystallite_P(1:3,1:3,ipc,ip,el)),[mySize])
case(neighboringelement_ID)
mySize = nIPneighbors
crystallite_postResults(c+1:c+mySize) = 0.0_pReal
forall (n = 1:mySize) &
crystallite_postResults(c+n) = real(IPneighborhood(1,n,ip,el),pReal)
case(neighboringip_ID)
mySize = nIPneighbors
crystallite_postResults(c+1:c+mySize) = 0.0_pReal
forall (n = 1:mySize) &
crystallite_postResults(c+n) = real(IPneighborhood(2,n,ip,el),pReal)
end select
c = c + mySize
enddo
crystallite_postResults(c+1) = real(plasticState(material_phaseAt(ipc,el))%sizePostResults,pReal) ! size of constitutive results crystallite_postResults(c+1) = real(plasticState(material_phaseAt(ipc,el))%sizePostResults,pReal) ! size of constitutive results
c = c + 1 c = c + 1
if (size(crystallite_postResults)-c > 0) & if (size(crystallite_postResults)-c > 0) &
@ -945,7 +796,7 @@ subroutine crystallite_results
do p=1,size(config_name_phase) do p=1,size(config_name_phase)
group = trim('current/constituent')//'/'//trim(config_name_phase(p))//'/generic' group = trim('current/constituent')//'/'//trim(config_name_phase(p))//'/generic'
call HDF5_closeGroup(results_addGroup(group)) call results_closeGroup(results_addGroup(group))
do o = 1, size(output_constituent(p)%label) do o = 1, size(output_constituent(p)%label)
select case (output_constituent(p)%label(o)) select case (output_constituent(p)%label(o))

View File

@ -6,9 +6,6 @@ module discretization
use prec use prec
use results use results
#if defined(PETSc) || defined(DAMASK_HDF5)
use HDF5_utilities
#endif
implicit none implicit none
private private
@ -84,7 +81,7 @@ subroutine discretization_results
#if defined(PETSc) || defined(DAMASK_HDF5) #if defined(PETSc) || defined(DAMASK_HDF5)
real(pReal), dimension(:,:), allocatable :: u real(pReal), dimension(:,:), allocatable :: u
call HDF5_closeGroup(results_addGroup(trim('current/geometry'))) call results_closeGroup(results_addGroup(trim('current/geometry')))
u = discretization_NodeCoords (1:3,:discretization_sharedNodesBeginn) & u = discretization_NodeCoords (1:3,:discretization_sharedNodesBeginn) &
- discretization_NodeCoords0(1:3,:discretization_sharedNodesBeginn) - discretization_NodeCoords0(1:3,:discretization_sharedNodesBeginn)

View File

@ -122,7 +122,7 @@ subroutine geometry_plastic_nonlocal_results
integer, dimension(:), allocatable :: shp integer, dimension(:), allocatable :: shp
#if defined(DAMASK_HDF5) #if defined(PETSc) || defined(DAMASK_HDF5)
call results_openJobFile call results_openJobFile
writeVolume: block writeVolume: block

View File

@ -27,7 +27,6 @@ program DAMASK_spectral
use grid_mech_FEM use grid_mech_FEM
use grid_damage_spectral use grid_damage_spectral
use grid_thermal_spectral use grid_thermal_spectral
use HDF5_utilities
use results use results
use rotations use rotations
@ -319,15 +318,9 @@ program DAMASK_spectral
enddo enddo
close(fileUnit) close(fileUnit)
call results_openJobFile
call HDF5_closeGroup(results_addGroup('geometry'))
call results_addAttribute('grid',grid,'geometry')
call results_addAttribute('size',geomSize,'geometry')
call results_closeJobFile
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! doing initialization depending on active solvers ! doing initialization depending on active solvers
call Utilities_init() call Utilities_init
do field = 1, nActiveFields do field = 1, nActiveFields
select case (loadCases(1)%ID(field)) select case (loadCases(1)%ID(field))
case(FIELD_MECH_ID) case(FIELD_MECH_ID)

View File

@ -262,7 +262,7 @@ subroutine homogenization_init
materialpoint_sizeResults = 1 & ! grain count materialpoint_sizeResults = 1 & ! grain count
+ 1 + thermal_maxSizePostResults & + 1 + thermal_maxSizePostResults &
+ damage_maxSizePostResults & + damage_maxSizePostResults &
+ homogenization_maxNgrains * (1 + crystallite_maxSizePostResults & ! crystallite size & crystallite results + homogenization_maxNgrains * (1 & ! crystallite size
+ 1 + constitutive_plasticity_maxSizePostResults & ! constitutive size & constitutive results + 1 + constitutive_plasticity_maxSizePostResults & ! constitutive size & constitutive results
+ constitutive_source_maxSizePostResults) + constitutive_source_maxSizePostResults)
allocate(materialpoint_results(materialpoint_sizeResults,discretization_nIP,discretization_nElem)) allocate(materialpoint_results(materialpoint_sizeResults,discretization_nIP,discretization_nElem))
@ -592,15 +592,13 @@ subroutine materialpoint_postResults
thePos, & thePos, &
theSize, & theSize, &
myNgrains, & myNgrains, &
myCrystallite, &
g, & !< grain number g, & !< grain number
i, & !< integration point number i, & !< integration point number
e !< element number e !< element number
!$OMP PARALLEL DO PRIVATE(myNgrains,myCrystallite,thePos,theSize) !$OMP PARALLEL DO PRIVATE(myNgrains,thePos,theSize)
elementLooping: do e = FEsolving_execElem(1),FEsolving_execElem(2) elementLooping: do e = FEsolving_execElem(1),FEsolving_execElem(2)
myNgrains = homogenization_Ngrains(material_homogenizationAt(e)) myNgrains = homogenization_Ngrains(material_homogenizationAt(e))
myCrystallite = microstructure_crystallite(discretization_microstructureAt(e))
IpLooping: do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e) IpLooping: do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
thePos = 0 thePos = 0
@ -618,7 +616,7 @@ subroutine materialpoint_postResults
thePos = thePos + 1 thePos = thePos + 1
grainLooping :do g = 1,myNgrains grainLooping :do g = 1,myNgrains
theSize = 1 + crystallite_sizePostResults(myCrystallite) + & theSize = 1 + &
1 + plasticState (material_phaseAt(g,e))%sizePostResults + & 1 + plasticState (material_phaseAt(g,e))%sizePostResults + &
sum(sourceState(material_phaseAt(g,e))%p(:)%sizePostResults) sum(sourceState(material_phaseAt(g,e))%p(:)%sizePostResults)
materialpoint_results(thePos+1:thePos+theSize,i,e) = crystallite_postResults(g,i,e) ! tell crystallite results materialpoint_results(thePos+1:thePos+theSize,i,e) = crystallite_postResults(g,i,e) ! tell crystallite results

View File

@ -116,13 +116,11 @@ module material
phase_Noutput, & !< number of '(output)' items per phase phase_Noutput, & !< number of '(output)' items per phase
phase_elasticityInstance, & !< instance of particular elasticity of each phase phase_elasticityInstance, & !< instance of particular elasticity of each phase
phase_plasticityInstance, & !< instance of particular plasticity of each phase phase_plasticityInstance, & !< instance of particular plasticity of each phase
crystallite_Noutput, & !< number of '(output)' items per crystallite setting
homogenization_Ngrains, & !< number of grains in each homogenization homogenization_Ngrains, & !< number of grains in each homogenization
homogenization_Noutput, & !< number of '(output)' items per homogenization homogenization_Noutput, & !< number of '(output)' items per homogenization
homogenization_typeInstance, & !< instance of particular type of each homogenization homogenization_typeInstance, & !< instance of particular type of each homogenization
thermal_typeInstance, & !< instance of particular type of each thermal transport thermal_typeInstance, & !< instance of particular type of each thermal transport
damage_typeInstance, & !< instance of particular type of each nonlocal damage damage_typeInstance !< instance of particular type of each nonlocal damage
microstructure_crystallite !< crystallite setting ID of each microstructure ! DEPRECATED !!!!
real(pReal), dimension(:), allocatable, public, protected :: & real(pReal), dimension(:), allocatable, public, protected :: &
thermal_initialT, & !< initial temperature per each homogenization thermal_initialT, & !< initial temperature per each homogenization
@ -245,9 +243,6 @@ subroutine material_init
call material_parseMicrostructure() call material_parseMicrostructure()
if (iand(myDebug,debug_levelBasic) /= 0) write(6,'(a)') ' Microstructure parsed'; flush(6) if (iand(myDebug,debug_levelBasic) /= 0) write(6,'(a)') ' Microstructure parsed'; flush(6)
call material_parseCrystallite()
if (iand(myDebug,debug_levelBasic) /= 0) write(6,'(a)') ' Crystallite parsed'; flush(6)
call material_parseHomogenization() call material_parseHomogenization()
if (iand(myDebug,debug_levelBasic) /= 0) write(6,'(a)') ' Homogenization parsed'; flush(6) if (iand(myDebug,debug_levelBasic) /= 0) write(6,'(a)') ' Homogenization parsed'; flush(6)
@ -277,9 +272,6 @@ subroutine material_init
allocate(temperatureRate (material_Nhomogenization)) allocate(temperatureRate (material_Nhomogenization))
do m = 1,size(config_microstructure) do m = 1,size(config_microstructure)
if(microstructure_crystallite(m) < 1 .or. &
microstructure_crystallite(m) > size(config_crystallite)) &
call IO_error(150,m,ext_msg='crystallite')
if(minval(microstructure_phase(1:microstructure_Nconstituents(m),m)) < 1 .or. & if(minval(microstructure_phase(1:microstructure_Nconstituents(m),m)) < 1 .or. &
maxval(microstructure_phase(1:microstructure_Nconstituents(m),m)) > size(config_phase)) & maxval(microstructure_phase(1:microstructure_Nconstituents(m),m)) > size(config_phase)) &
call IO_error(150,m,ext_msg='phase') call IO_error(150,m,ext_msg='phase')
@ -298,9 +290,8 @@ subroutine material_init
enddo enddo
write(6,'(/,a14,18x,1x,a11,1x,a12,1x,a13)') 'microstructure','crystallite','constituents' write(6,'(/,a14,18x,1x,a11,1x,a12,1x,a13)') 'microstructure','crystallite','constituents'
do m = 1,size(config_microstructure) do m = 1,size(config_microstructure)
write(6,'(1x,a32,1x,i11,1x,i12)') config_name_microstructure(m), & write(6,'(1x,a32,1x,i12)') config_name_microstructure(m), &
microstructure_crystallite(m), & microstructure_Nconstituents(m)
microstructure_Nconstituents(m)
if (microstructure_Nconstituents(m) > 0) then if (microstructure_Nconstituents(m) > 0) then
do c = 1,microstructure_Nconstituents(m) do c = 1,microstructure_Nconstituents(m)
write(6,'(a1,1x,a32,1x,a32,1x,f7.4)') '>',config_name_phase(microstructure_phase(c,m)),& write(6,'(a1,1x,a32,1x,a32,1x,f7.4)') '>',config_name_phase(microstructure_phase(c,m)),&
@ -500,7 +491,6 @@ subroutine material_parseMicrostructure
character(len=65536) :: & character(len=65536) :: &
tag tag
allocate(microstructure_crystallite(size(config_microstructure)), source=0)
allocate(microstructure_Nconstituents(size(config_microstructure)), source=0) allocate(microstructure_Nconstituents(size(config_microstructure)), source=0)
allocate(microstructure_active(size(config_microstructure)), source=.false.) allocate(microstructure_active(size(config_microstructure)), source=.false.)
@ -512,7 +502,6 @@ subroutine material_parseMicrostructure
do m=1, size(config_microstructure) do m=1, size(config_microstructure)
microstructure_Nconstituents(m) = config_microstructure(m)%countKeys('(constituent)') microstructure_Nconstituents(m) = config_microstructure(m)%countKeys('(constituent)')
microstructure_crystallite(m) = config_microstructure(m)%getInt('crystallite')
enddo enddo
microstructure_maxNconstituents = maxval(microstructure_Nconstituents) microstructure_maxNconstituents = maxval(microstructure_Nconstituents)
@ -547,21 +536,6 @@ subroutine material_parseMicrostructure
end subroutine material_parseMicrostructure end subroutine material_parseMicrostructure
!--------------------------------------------------------------------------------------------------
!> @brief parses the crystallite part in the material configuration file
!--------------------------------------------------------------------------------------------------
subroutine material_parseCrystallite
integer :: c
allocate(crystallite_Noutput(size(config_crystallite)),source=0)
do c=1, size(config_crystallite)
crystallite_Noutput(c) = config_crystallite(c)%countKeys('(output)')
enddo
end subroutine material_parseCrystallite
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief parses the phase part in the material configuration file !> @brief parses the phase part in the material configuration file
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------

View File

@ -14,6 +14,7 @@ module mesh_grid
use IO use IO
use debug use debug
use numerics use numerics
use results
use discretization use discretization
use geometry_plastic_nonlocal use geometry_plastic_nonlocal
use FEsolving use FEsolving
@ -99,6 +100,14 @@ subroutine mesh_init(ip,el)
FEsolving_execElem = [1,product(myGrid)] ! parallel loop bounds set to comprise all elements FEsolving_execElem = [1,product(myGrid)] ! parallel loop bounds set to comprise all elements
allocate(FEsolving_execIP(2,product(myGrid)),source=1) ! parallel loop bounds set to comprise the only IP allocate(FEsolving_execIP(2,product(myGrid)),source=1) ! parallel loop bounds set to comprise the only IP
!--------------------------------------------------------------------------------------------------
! store geometry information for post processing
call results_openJobFile
call results_closeGroup(results_addGroup('geometry'))
call results_addAttribute('grid',grid,'geometry')
call results_addAttribute('size',geomSize,'geometry')
call results_closeJobFile
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! geometry information required by the nonlocal CP model ! geometry information required by the nonlocal CP model
call geometry_plastic_nonlocal_setIPvolume(reshape([(product(mySize/real(myGrid,pReal)),j=1,product(myGrid))], & call geometry_plastic_nonlocal_setIPvolume(reshape([(product(mySize/real(myGrid,pReal)),j=1,product(myGrid))], &

View File

@ -69,7 +69,7 @@ subroutine mesh_init(ip,el)
microstructureAt, & microstructureAt, &
homogenizationAt homogenizationAt
integer:: & integer:: &
Nnodes !< total number of nodes in mesh Nnodes !< total number of nodes in mesh
real(pReal), dimension(:,:), allocatable :: & real(pReal), dimension(:,:), allocatable :: &
ip_reshaped ip_reshaped
@ -119,15 +119,17 @@ subroutine mesh_init(ip,el)
reshape(connectivity_cell,[elem%NcellNodesPerCell,elem%nIPs*nElems]),& reshape(connectivity_cell,[elem%NcellNodesPerCell,elem%nIPs*nElems]),&
node0_cell,ip_reshaped) node0_cell,ip_reshaped)
!--------------------------------------------------------------------------------------------------
! geometry information required by the nonlocal CP model
call geometry_plastic_nonlocal_setIPvolume(IPvolume(elem,node0_cell,connectivity_cell)) call geometry_plastic_nonlocal_setIPvolume(IPvolume(elem,node0_cell,connectivity_cell))
unscaledNormals = IPareaNormal(elem,nElems,connectivity_cell,node0_cell) unscaledNormals = IPareaNormal(elem,nElems,connectivity_cell,node0_cell)
call geometry_plastic_nonlocal_setIParea(norm2(unscaledNormals,1)) call geometry_plastic_nonlocal_setIParea(norm2(unscaledNormals,1))
call geometry_plastic_nonlocal_setIPareaNormal(unscaledNormals/spread(norm2(unscaledNormals,1),1,3)) call geometry_plastic_nonlocal_setIPareaNormal(unscaledNormals/spread(norm2(unscaledNormals,1),1,3))
call geometry_plastic_nonlocal_results call geometry_plastic_nonlocal_results
end subroutine mesh_init end subroutine mesh_init
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief Writes all information needed for the DADF5 geometry !> @brief Writes all information needed for the DADF5 geometry
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------

View File

@ -50,6 +50,7 @@ module results
results_addIncrement, & results_addIncrement, &
results_addGroup, & results_addGroup, &
results_openGroup, & results_openGroup, &
results_closeGroup, &
results_writeDataset, & results_writeDataset, &
results_setLink, & results_setLink, &
results_addAttribute, & results_addAttribute, &
@ -120,6 +121,7 @@ subroutine results_addIncrement(inc,time)
end subroutine results_addIncrement end subroutine results_addIncrement
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief open a group from the results file !> @brief open a group from the results file
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
@ -144,6 +146,18 @@ integer(HID_T) function results_addGroup(groupName)
end function results_addGroup end function results_addGroup
!--------------------------------------------------------------------------------------------------
!> @brief close a group
!--------------------------------------------------------------------------------------------------
subroutine results_closeGroup(group_id)
integer(HID_T), intent(in) :: group_id
call HDF5_closeGroup(group_id)
end subroutine results_closeGroup
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief set link to object in results file !> @brief set link to object in results file
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------