Merge remote-tracking branch 'origin/development' into vector-mechanics

This commit is contained in:
Martin Diehl 2020-11-23 19:55:34 +01:00
commit cbe8160e13
11 changed files with 115 additions and 140 deletions

@ -1 +1 @@
Subproject commit 5b2a0eb3e5ea0991d54ed9753804f45947cf61b4
Subproject commit 8bd09b5511d1e0e0ea288b47d16ce4924d75adcd

View File

@ -1 +1 @@
v3.0.0-alpha-791-g662a033d9
v3.0.0-alpha-801-g7356330cf

View File

@ -20,9 +20,9 @@ parser.add_argument('filenames', nargs='+',
parser.add_argument('-d','--dir', dest='dir',default='postProc',metavar='string',
help='name of subdirectory relative to the location of the DADF5 file to hold output')
parser.add_argument('--mat', nargs='+',
help='labels for materialpoint',dest='mat')
help='labels for homogenization',dest='mat')
parser.add_argument('--con', nargs='+',
help='labels for constituent',dest='con')
help='labels for phase',dest='con')
options = parser.parse_args()
@ -41,15 +41,15 @@ for filename in options.filenames:
table = damask.Table(np.ones(np.product(results.grid),dtype=int)*int(inc[3:]),{'inc':(1,)})\
.add('pos',coords.reshape(-1,3))
results.pick('materialpoints',False)
results.pick('constituents', True)
results.pick('homogenizations',False)
results.pick('phases',True)
for label in options.con:
x = results.get_dataset_location(label)
if len(x) != 0:
table = table.add(label,results.read_dataset(x,0,plain=True).reshape(results.grid.prod(),-1))
results.pick('constituents', False)
results.pick('materialpoints',True)
results.pick('phases',False)
results.pick('homogenizations',True)
for label in options.mat:
x = results.get_dataset_location(label)
if len(x) != 0:

View File

@ -42,14 +42,10 @@ class Result:
"""
with h5py.File(fname,'r') as f:
try:
self.version_major = f.attrs['DADF5_version_major']
self.version_minor = f.attrs['DADF5_version_minor']
except KeyError:
self.version_major = f.attrs['DADF5-major']
self.version_minor = f.attrs['DADF5-minor']
self.version_major = f.attrs['DADF5_version_major']
self.version_minor = f.attrs['DADF5_version_minor']
if self.version_major != 0 or not 2 <= self.version_minor <= 7:
if self.version_major != 0 or not 7 <= self.version_minor <= 8:
raise TypeError(f'Unsupported DADF5 version {self.version_major}.{self.version_minor}')
self.structured = 'grid' in f['geometry'].attrs.keys()
@ -57,35 +53,33 @@ class Result:
if self.structured:
self.grid = f['geometry'].attrs['grid']
self.size = f['geometry'].attrs['size']
self.origin = f['geometry'].attrs['origin'] if self.version_major == 0 and self.version_minor >= 5 else \
np.zeros(3)
self.origin = f['geometry'].attrs['origin']
r=re.compile('inc[0-9]+')
increments_unsorted = {int(i[3:]):i for i in f.keys() if r.match(i)}
self.increments = [increments_unsorted[i] for i in sorted(increments_unsorted)]
self.times = [round(f[i].attrs['time/s'],12) for i in self.increments]
self.Nmaterialpoints, self.Nconstituents = np.shape(f['mapping/cellResults/constituent'])
self.materialpoints = [m.decode() for m in np.unique(f['mapping/cellResults/materialpoint']['Name'])]
self.constituents = [c.decode() for c in np.unique(f['mapping/cellResults/constituent'] ['Name'])]
self.N_materialpoints, self.N_constituents = np.shape(f['mapping/phase'])
# faster, but does not work with (deprecated) DADF5_postResults
#self.materialpoints = [m for m in f['inc0/materialpoint']]
#self.constituents = [c for c in f['inc0/constituent']]
self.homogenizations = [m.decode() for m in np.unique(f['mapping/homogenization']['Name'])]
self.phases = [c.decode() for c in np.unique(f['mapping/phase']['Name'])]
self.con_physics = []
for c in self.constituents:
self.con_physics += f['/'.join([self.increments[0],'constituent',c])].keys()
self.con_physics = list(set(self.con_physics)) # make unique
self.out_type_ph = []
for c in self.phases:
self.out_type_ph += f['/'.join([self.increments[0],'phase',c])].keys()
self.out_type_ph = list(set(self.out_type_ph)) # make unique
self.mat_physics = []
for m in self.materialpoints:
self.mat_physics += f['/'.join([self.increments[0],'materialpoint',m])].keys()
self.mat_physics = list(set(self.mat_physics)) # make unique
self.out_type_ho = []
for m in self.homogenizations:
self.out_type_ho += f['/'.join([self.increments[0],'homogenization',m])].keys()
self.out_type_ho = list(set(self.out_type_ho)) # make unique
self.selection = {'increments': self.increments,
'constituents': self.constituents,'materialpoints': self.materialpoints,
'con_physics': self.con_physics, 'mat_physics': self.mat_physics
self.selection = {'increments': self.increments,
'phases': self.phases,
'homogenizations': self.homogenizations,
'out_type_ph': self.out_type_ph,
'out_type_ho': self.out_type_ho
}
self.fname = Path(fname).absolute()
@ -289,34 +283,34 @@ class Result:
# def datamerger(regular expression to filter groups into one copy)
def place(self,datasets,component=0,tagged=False,split=True):
def place(self,datasets,constituent=0,tagged=False,split=True):
"""
Distribute datasets onto geometry and return Table or (split) dictionary of Tables.
Must not mix nodal end cell data.
Only data within
- inc?????/constituent/*_*/*
- inc?????/materialpoint/*_*/*
- inc?????/geometry/*
- inc*/phase/*/*
- inc*/homogenization/*/*
- inc*/geometry/*
are considered.
Parameters
----------
datasets : iterable or str
component : int
homogenization component to consider for constituent data
constituent : int
Constituent to consider for phase data
tagged : bool
tag Table.column name with '#component'
tag Table.column name with '#constituent'
defaults to False
split : bool
split Table by increment and return dictionary of Tables
defaults to True
"""
sets = datasets if hasattr(datasets,'__iter__') and not isinstance(datasets,str) \
else [datasets]
tag = f'#{component}' if tagged else ''
sets = datasets if hasattr(datasets,'__iter__') and not isinstance(datasets,str) else \
[datasets]
tag = f'#{constituent}' if tagged else ''
tbl = {} if split else None
inGeom = {}
inData = {}
@ -328,15 +322,15 @@ class Result:
key = '/'.join([prop,name+tag])
if key not in inGeom:
if prop == 'geometry':
inGeom[key] = inData[key] = np.arange(self.Nmaterialpoints)
elif prop == 'constituent':
inGeom[key] = np.where(f['mapping/cellResults/constituent'][:,component]['Name'] == str.encode(name))[0]
inData[key] = f['mapping/cellResults/constituent'][inGeom[key],component]['Position']
else:
inGeom[key] = np.where(f['mapping/cellResults/materialpoint']['Name'] == str.encode(name))[0]
inData[key] = f['mapping/cellResults/materialpoint'][inGeom[key].tolist()]['Position']
inGeom[key] = inData[key] = np.arange(self.N_materialpoints)
elif prop == 'phase':
inGeom[key] = np.where(f['mapping/phase'][:,constituent]['Name'] == str.encode(name))[0]
inData[key] = f['mapping/phase'][inGeom[key],constituent]['Position']
elif prop == 'homogenization':
inGeom[key] = np.where(f['mapping/homogenization']['Name'] == str.encode(name))[0]
inData[key] = f['mapping/homogenization'][inGeom[key].tolist()]['Position']
shape = np.shape(f[path])
data = np.full((self.Nmaterialpoints,) + (shape[1:] if len(shape)>1 else (1,)),
data = np.full((self.N_materialpoints,) + (shape[1:] if len(shape)>1 else (1,)),
np.nan,
dtype=np.dtype(f[path]))
data[inGeom[key]] = (f[path] if len(shape)>1 else np.expand_dims(f[path],1))[inData[key]]
@ -345,12 +339,12 @@ class Result:
try:
tbl[inc].add(path,data)
except KeyError:
tbl[inc] = Table(data.reshape(self.Nmaterialpoints,-1),{path:data.shape[1:]})
tbl[inc] = Table(data.reshape(self.N_materialpoints,-1),{path:data.shape[1:]})
else:
try:
tbl.add(path,data)
except AttributeError:
tbl = Table(data.reshape(self.Nmaterialpoints,-1),{path:data.shape[1:]})
tbl = Table(data.reshape(self.N_materialpoints,-1),{path:data.shape[1:]})
return tbl
@ -360,8 +354,8 @@ class Result:
Return groups that contain all requested datasets.
Only groups within
- inc*/constituent/*/*
- inc*/materialpoint/*/*
- inc*/phase/*/*
- inc*/homogenization/*/*
- inc*/geometry/*
are considered as they contain user-relevant data.
@ -393,7 +387,7 @@ class Result:
with h5py.File(self.fname,'r') as f:
for i in self.iterate('increments'):
for o,p in zip(['constituents','materialpoints'],['con_physics','mat_physics']):
for o,p in zip(['phases','homogenizations'],['out_type_ph','out_type_ho']):
for oo in self.iterate(o):
for pp in self.iterate(p):
group = '/'.join([i,o[:-1],oo,pp]) # o[:-1]: plural/singular issue
@ -412,7 +406,7 @@ class Result:
with h5py.File(self.fname,'r') as f:
for i in self.iterate('increments'):
message += f'\n{i} ({self.times[self.increments.index(i)]}s)\n'
for o,p in zip(['constituents','materialpoints'],['con_physics','mat_physics']):
for o,p in zip(['phases','homogenizations'],['out_type_ph','out_type_ho']):
message += f' {o[:-1]}\n'
for oo in self.iterate(o):
message += f' {oo}\n'
@ -446,7 +440,7 @@ class Result:
path.append(k)
except KeyError:
pass
for o,p in zip(['constituents','materialpoints'],['con_physics','mat_physics']):
for o,p in zip(['phases','homogenizations'],['out_type_ph','out_type_ho']):
for oo in self.iterate(o):
for pp in self.iterate(p):
k = '/'.join([i,o[:-1],oo,pp,label])
@ -461,7 +455,7 @@ class Result:
def get_constituent_ID(self,c=0):
"""Pointwise constituent ID."""
with h5py.File(self.fname,'r') as f:
names = f['/mapping/cellResults/constituent']['Name'][:,c].astype('str')
names = f['/mapping/phase']['Name'][:,c].astype('str')
return np.array([int(n.split('_')[0]) for n in names.tolist()],dtype=np.int32)
@ -484,7 +478,7 @@ class Result:
If more than one path is given, the dataset is composed of the individual contributions.
"""
with h5py.File(self.fname,'r') as f:
shape = (self.Nmaterialpoints,) + np.shape(f[path[0]])[1:]
shape = (self.N_materialpoints,) + np.shape(f[path[0]])[1:]
if len(shape) == 1: shape = shape +(1,)
dataset = np.full(shape,np.nan,dtype=np.dtype(f[path[0]]))
for pa in path:
@ -494,17 +488,17 @@ class Result:
dataset = np.array(f[pa])
continue
p = np.where(f['mapping/cellResults/constituent'][:,c]['Name'] == str.encode(label))[0]
p = np.where(f['mapping/phase'][:,c]['Name'] == str.encode(label))[0]
if len(p)>0:
u = (f['mapping/cellResults/constituent']['Position'][p,c])
u = (f['mapping/phase']['Position'][p,c])
a = np.array(f[pa])
if len(a.shape) == 1:
a=a.reshape([a.shape[0],1])
dataset[p,:] = a[u,:]
p = np.where(f['mapping/cellResults/materialpoint']['Name'] == str.encode(label))[0]
p = np.where(f['mapping/homogenization']['Name'] == str.encode(label))[0]
if len(p)>0:
u = (f['mapping/cellResults/materialpoint']['Position'][p.tolist()])
u = (f['mapping/homogenization']['Position'][p.tolist()])
a = np.array(f[pa])
if len(a.shape) == 1:
a=a.reshape([a.shape[0],1])
@ -1134,7 +1128,7 @@ class Result:
This works only for scalar, 3-vector and 3x3-tensor data.
Selection is not taken into account.
"""
if len(self.constituents) != 1 or not self.structured:
if self.N_constituents != 1 or not self.structured:
raise NotImplementedError('XDMF only available for grid results with 1 constituent.')
xdmf=ET.Element('Xdmf')
@ -1196,7 +1190,7 @@ class Result:
'Dimensions': '{} {} {} 3'.format(*(self.grid+1))}
data_items[-1].text=f'{os.path.split(self.fname)[1]}:/{inc}/geometry/u_n'
for o,p in zip(['constituents','materialpoints'],['con_physics','mat_physics']):
for o,p in zip(['phases','homogenizations'],['out_type_ph','out_type_ho']):
for oo in getattr(self,o):
for pp in getattr(self,p):
g = '/'.join([inc,o[:-1],oo,pp])
@ -1206,17 +1200,18 @@ class Result:
dtype = f[name].dtype
prec = f[name].dtype.itemsize
if (shape not in [(1,), (3,), (3,3)]) or dtype != np.float64: continue
if (shape not in [(), (3,), (3,3)]) or dtype != np.float64: continue
attributes.append(ET.SubElement(grid, 'Attribute'))
attributes[-1].attrib={'Name': name.split('/',2)[2],
'Center': 'Cell',
'AttributeType': 'Tensor'}
'AttributeType': {():'Scalar',(3):'Vector',(3,3):'Tensor'}[shape]}
data_items.append(ET.SubElement(attributes[-1], 'DataItem'))
data_items[-1].attrib={'Format': 'HDF',
'NumberType': 'Float',
'Precision': f'{prec}',
'Dimensions': '{} {} {} {}'.format(*self.grid,np.prod(shape))}
'Dimensions': '{} {} {} {}'.format(*self.grid,1 if shape == () else
np.prod(shape))}
data_items[-1].text=f'{os.path.split(self.fname)[1]}:{name}'
with open(self.fname.with_suffix('.xdmf').name,'w') as f:
@ -1244,6 +1239,7 @@ class Result:
with h5py.File(self.fname,'r') as f:
v = VTK.from_unstructured_grid(f['/geometry/x_n'][()],
f['/geometry/T_c'][()]-1,
f['/geometry/T_c'].attrs['VTK_TYPE'] if h5py3 else \
f['/geometry/T_c'].attrs['VTK_TYPE'].decode())
elif mode.lower()=='point':
v = VTK.from_poly_data(self.cell_coordinates)
@ -1252,45 +1248,39 @@ class Result:
for inc in util.show_progress(self.iterate('increments'),len(self.selection['increments'])):
materialpoints_backup = self.selection['materialpoints'].copy()
self.pick('materialpoints',False)
picked_backup_ho = self.selection['homogenizations'].copy()
self.pick('homogenizations',False)
for label in (labels if isinstance(labels,list) else [labels]):
for p in self.iterate('con_physics'):
if p != 'generic':
for c in self.iterate('constituents'):
x = self.get_dataset_location(label)
if len(x) == 0:
for o in self.iterate('out_type_ph'):
for c in range(self.N_constituents):
prefix = '' if self.N_constituents == 1 else f'constituent{c}/'
if o != 'mechanics':
for _ in self.iterate('phases'):
path = self.get_dataset_location(label)
if len(path) == 0:
continue
array = self.read_dataset(path,c)
v.add(array,prefix+path[0].split('/',1)[1])
else:
paths = self.get_dataset_location(label)
if len(paths) == 0:
continue
array = self.read_dataset(x,0)
v.add(array,'1_'+x[0].split('/',1)[1]) #ToDo: hard coded 1!
else:
x = self.get_dataset_location(label)
if len(x) == 0:
continue
array = self.read_dataset(x,0)
ph_name = re.compile(r'(?<=(constituent\/))(.*?)(?=(generic))') # identify phase name
dset_name = '1_' + re.sub(ph_name,r'',x[0].split('/',1)[1]) # removing phase name
v.add(array,dset_name)
self.pick('materialpoints',materialpoints_backup)
array = self.read_dataset(paths,c)
ph_name = re.compile(r'(?<=(phase\/))(.*?)(?=(mechanics))') # identify phase name
dset_name = prefix+re.sub(ph_name,r'',paths[0].split('/',1)[1]) # remove phase name
v.add(array,dset_name)
self.pick('homogenizations',picked_backup_ho)
constituents_backup = self.selection['constituents'].copy()
self.pick('constituents',False)
picked_backup_ph = self.selection['phases'].copy()
self.pick('phases',False)
for label in (labels if isinstance(labels,list) else [labels]):
for p in self.iterate('mat_physics'):
if p != 'generic':
for m in self.iterate('materialpoints'):
x = self.get_dataset_location(label)
if len(x) == 0:
continue
array = self.read_dataset(x,0)
v.add(array,'1_'+x[0].split('/',1)[1]) #ToDo: why 1_?
else:
x = self.get_dataset_location(label)
if len(x) == 0:
continue
array = self.read_dataset(x,0)
v.add(array,'1_'+x[0].split('/',1)[1])
self.pick('constituents',constituents_backup)
for _ in self.iterate('out_type_ho'):
paths = self.get_dataset_location(label)
if len(paths) == 0:
continue
array = self.read_dataset(paths)
v.add(array,paths[0].split('/',1)[1])
self.pick('phases',picked_backup_ph)
u = self.read_dataset(self.get_dataset_location('u_n' if mode.lower() == 'cell' else 'u_p'))
v.add(u,'u')

View File

@ -59,7 +59,7 @@ class TestResult:
f = default.get_dataset_location('F')
assert a == b == c == d == e ==f
@pytest.mark.parametrize('what',['increments','times','constituents']) # ToDo: discuss materialpoints
@pytest.mark.parametrize('what',['increments','times','phases']) # ToDo: discuss homogenizations
def test_pick_none(self,default,what):
default.pick(what,False)
a = default.get_dataset_location('F')
@ -68,7 +68,7 @@ class TestResult:
assert a == b == []
@pytest.mark.parametrize('what',['increments','times','constituents']) # ToDo: discuss materialpoints
@pytest.mark.parametrize('what',['increments','times','phases']) # ToDo: discuss homogenizations
def test_pick_more(self,default,what):
default.pick(what,False)
default.pick_more(what,'*')
@ -79,7 +79,7 @@ class TestResult:
assert a == b
@pytest.mark.parametrize('what',['increments','times','constituents']) # ToDo: discuss materialpoints
@pytest.mark.parametrize('what',['increments','times','phases']) # ToDo: discuss homogenizations
def test_pick_less(self,default,what):
default.pick(what,True)
default.pick_less(what,'*')

View File

@ -225,7 +225,7 @@ module subroutine damage_results
do p = 1, size(material_name_phase)
sourceLoop: do i = 1, phase_Nsources(p)
group = trim('current/constituent')//'/'//trim(material_name_phase(p))
group = trim('current/phase')//'/'//trim(material_name_phase(p))
group = trim(group)//'/sources'
call results_closeGroup(results_addGroup(group))

View File

@ -457,7 +457,7 @@ module subroutine plastic_results
character(len=pStringLen) :: group
plasticityLoop: do p=1,size(material_name_phase)
group = trim('current/constituent')//'/'//trim(material_name_phase(p))
group = trim('current/phase')//'/'//trim(material_name_phase(p))
call results_closeGroup(results_addGroup(group))
group = trim(group)//'/plastic'

View File

@ -739,7 +739,7 @@ subroutine crystallite_results
character(len=:), allocatable :: group,structureLabel
do p=1,size(material_name_phase)
group = trim('current/constituent')//'/'//trim(material_name_phase(p))//'/mechanics'
group = trim('current/phase')//'/'//trim(material_name_phase(p))//'/mechanics'
call results_closeGroup(results_addGroup(group))
@ -772,11 +772,11 @@ subroutine crystallite_results
case('P')
selected_tensors = select_tensors(crystallite_P,p)
call results_writeDataset(group,selected_tensors,output_constituent(p)%label(o),&
'First Piola-Kirchoff stress','Pa')
'First Piola-Kirchhoff stress','Pa')
case('S')
selected_tensors = select_tensors(crystallite_S,p)
call results_writeDataset(group,selected_tensors,output_constituent(p)%label(o),&
'Second Piola-Kirchoff stress','Pa')
'Second Piola-Kirchhoff stress','Pa')
case('O')
select case(lattice_structure(p))
case(lattice_ISO_ID)
@ -1553,16 +1553,16 @@ subroutine crystallite_restartWrite
call HDF5_write(fileHandle,crystallite_Li, 'L_i')
call HDF5_write(fileHandle,crystallite_S, 'S')
groupHandle = HDF5_addGroup(fileHandle,'constituent')
groupHandle = HDF5_addGroup(fileHandle,'phase')
do i = 1,size(material_name_phase)
write(datasetName,'(i0,a)') i,'_omega_plastic'
write(datasetName,'(i0,a)') i,'_omega'
call HDF5_write(groupHandle,plasticState(i)%state,datasetName)
enddo
call HDF5_closeGroup(groupHandle)
groupHandle = HDF5_addGroup(fileHandle,'materialpoint')
groupHandle = HDF5_addGroup(fileHandle,'homogenization')
do i = 1, size(material_name_homogenization)
write(datasetName,'(i0,a)') i,'_omega_homogenization'
write(datasetName,'(i0,a)') i,'_omega'
call HDF5_write(groupHandle,homogState(i)%state,datasetName)
enddo
call HDF5_closeGroup(groupHandle)
@ -1594,16 +1594,16 @@ subroutine crystallite_restartRead
call HDF5_read(fileHandle,crystallite_Li0,'L_i')
call HDF5_read(fileHandle,crystallite_S0, 'S')
groupHandle = HDF5_openGroup(fileHandle,'constituent')
groupHandle = HDF5_openGroup(fileHandle,'phase')
do i = 1,size(material_name_phase)
write(datasetName,'(i0,a)') i,'_omega_plastic'
write(datasetName,'(i0,a)') i,'_omega'
call HDF5_read(groupHandle,plasticState(i)%state0,datasetName)
enddo
call HDF5_closeGroup(groupHandle)
groupHandle = HDF5_openGroup(fileHandle,'materialpoint')
groupHandle = HDF5_openGroup(fileHandle,'homogenization')
do i = 1,size(material_name_homogenization)
write(datasetName,'(i0,a)') i,'_omega_homogenization'
write(datasetName,'(i0,a)') i,'_omega'
call HDF5_read(groupHandle,homogState(i)%state0,datasetName)
enddo
call HDF5_closeGroup(groupHandle)

View File

@ -534,7 +534,7 @@ subroutine homogenization_results
!real(pReal), dimension(:,:,:), allocatable :: temp
do p=1,size(material_name_homogenization)
group_base = 'current/materialpoint/'//trim(material_name_homogenization(p))
group_base = 'current/homogenization/'//trim(material_name_homogenization(p))
call results_closeGroup(results_addGroup(group_base))
group = trim(group_base)//'/generic'

View File

@ -387,7 +387,7 @@ end subroutine sanityCheck
!--------------------------------------------------------------------------------------------------
!> @brief Get all keys from a dictionary (currently with #_ prefix)
!> @brief Get all keys from a dictionary
!--------------------------------------------------------------------------------------------------
function getKeys(dict)
@ -395,12 +395,10 @@ function getKeys(dict)
character(len=pStringLen), dimension(:), allocatable :: getKeys
integer :: i
character(len=pStringLen) :: sectionName
allocate(getKeys(dict%length))
do i=1, dict%length
write(sectionName,'(i0,a)') i,'_'
getKeys(i) = trim(adjustl(sectionName))//dict%getKey(i) !ToDo: remove prefix
getKeys(i) = dict%getKey(i)
enddo
end function getKeys

View File

@ -74,12 +74,11 @@ subroutine results_init(restart)
if(.not. restart) then
resultsFile = HDF5_openFile(trim(getSolverJobName())//'.hdf5','w',.true.)
call results_addAttribute('DADF5_version_major',0)
call results_addAttribute('DADF5_version_minor',7)
call results_addAttribute('DADF5_version_minor',8)
call results_addAttribute('DAMASK_version',DAMASKVERSION)
call get_command(commandLine)
call results_addAttribute('call',trim(commandLine))
call results_closeGroup(results_addGroup('mapping'))
call results_closeGroup(results_addGroup('mapping/cellResults'))
call results_closeJobFile
endif
@ -122,12 +121,6 @@ subroutine results_addIncrement(inc,time)
call results_closeGroup(results_addGroup('current/phase'))
call results_closeGroup(results_addGroup('current/homogenization'))
! for backward compatibility
call results_setLink(trim('/inc'//trim(adjustl(incChar)))//'/phase',&
trim('/inc'//trim(adjustl(incChar)))//'/constituent')
call results_setLink(trim('/inc'//trim(adjustl(incChar)))//'/homogenization',&
trim('/inc'//trim(adjustl(incChar)))//'/materialpoint')
end subroutine results_addIncrement
@ -656,9 +649,6 @@ subroutine results_mapping_constituent(phaseAt,memberAtLocal,label)
if(hdferr < 0) error stop 'HDF5 error'
call h5tclose_f(position_id, hdferr)
! for backward compatibility
call results_setLink('/mapping/phase','/mapping/cellResults/constituent')
end subroutine results_mapping_constituent
@ -814,9 +804,6 @@ subroutine results_mapping_homogenization(homogenizationAt,memberAtLocal,label)
call h5tclose_f(position_id, hdferr)
if(hdferr < 0) error stop 'HDF5 error'
! for backward compatibility
call results_setLink('/mapping/homogenization','/mapping/cellResults/materialpoint')
end subroutine results_mapping_homogenization