Merge branch 'enable_hybridrep_gpu_testing' of https://github.com/prckent/qmcpack into enable_hybridrep_gpu_testing

This commit is contained in:
Paul Kent 2017-12-14 21:56:01 -05:00
commit e01c73e737
4 changed files with 66 additions and 63 deletions

View File

@ -144,6 +144,15 @@ class HDFgroup(DevBase):
#end def read_arrays
def get_keys(self):
if '_groups' in self:
keys = list(self._groups.keys())
else:
keys = list(self.keys())
#end if
return keys
#end def get_keys
#project interface methods
def zero(self,*names):
@ -152,11 +161,11 @@ class HDFgroup(DevBase):
self[name][:] = 0
#end if
#end for
for name,value in self._groups.iteritems():
if isinstance(value,str):
ci(ls(),gs())
for name in self.get_keys():
value = self[name]
if isinstance(value,HDFgroup):
value.zero(*names)
#end if
value.zero(*names)
#end for
#self.sum(*names)
#end def zero
@ -166,13 +175,8 @@ class HDFgroup(DevBase):
name_set = set(names)
snames = set(self.keys()) & name_set
onames = set(other.keys()) & name_set
if len(snames)>0 and len(snames)<len(names):
self.error('only some names found in self\n names_requested:'+str(names)+'\n names found: '+str(snames))
elif len(onames)>0 and len(onames)<len(names):
self.error('only some names found in other\n names_requested:'+str(names)+'\n names found: '+str(onames))
#end if
if len(snames)>0:
for name in names:
if snames==onames:
for name in snames:
svalue = self[name]
ovalue = other[name]
if not isinstance(svalue,ndarray) or not isinstance(ovalue,ndarray):
@ -182,11 +186,14 @@ class HDFgroup(DevBase):
self[name] = resize(svalue,shape)
#end for
#end if
for name,value in self._groups.iteritems():
if name in other and isinstance(other[name],HDFgroup):
value.minsize(other[name])
else:
self.error(name+' not found in minsize partner')
for name in self.get_keys():
value = self[name]
if isinstance(value,HDFgroup):
if name in other and isinstance(other[name],HDFgroup):
value.minsize(other[name])
else:
self.error(name+' not found in minsize partner')
#end if
#end if
#end for
#self.sum(*names)
@ -197,13 +204,8 @@ class HDFgroup(DevBase):
name_set = set(names)
snames = set(self.keys()) & name_set
onames = set(other.keys()) & name_set
if len(snames)>0 and len(snames)<len(names):
self.error('only some names found in self\n names_requested:'+str(names)+'\n names found: '+str(snames))
elif len(onames)>0 and len(onames)<len(names):
self.error('only some names found in other\n names_requested:'+str(names)+'\n names found: '+str(onames))
#end if
if len(snames)>0:
for name in names:
if snames==onames:
for name in snames:
svalue = self[name]
ovalue = other[name]
if not isinstance(svalue,ndarray) or not isinstance(ovalue,ndarray):
@ -221,11 +223,14 @@ class HDFgroup(DevBase):
svalue += ovalue[ix_(*ranges)]
#end for
#end if
for name,value in self._groups.iteritems():
if name in other and isinstance(other[name],HDFgroup):
value.accumulate(other[name])
else:
self.error(name+' not found in accumulate partner')
for name in self.get_keys():
value = self[name]
if isinstance(value,HDFgroup):
if name in other and isinstance(other[name],HDFgroup):
value.accumulate(other[name])
else:
self.error(name+' not found in accumulate partner')
#end if
#end if
#end for
#self.sum(*names)
@ -238,8 +243,11 @@ class HDFgroup(DevBase):
self[name] /= normalization
#end if
#end for
for name,value in self._groups.iteritems():
value.normalize(normalization,*names)
for name in self.get_keys():
value = self[name]
if isinstance(value,HDFgroup):
value.normalize(normalization,*names)
#end if
#end for
#self.sum(*names)
#end def normalize

View File

@ -308,14 +308,20 @@ class ScalarsHDFAnalyzer(HDFAnalyzer):
corrvars = ['LocalEnergy','ElecElec','MPC','KEcorr']
if set(corrvars)<set(self.data.keys()):
Ed,Ved,Vmd,Kcd = self.data.tuple(*corrvars)
E,E2 = Ed.value,Ed.value_squared
Ve,Ve2 = Ved.value,Ved.value_squared
Vm,Vm2 = Vmd.value,Vmd.value_squared
Kc,Kc2 = Kcd.value,Kcd.value_squared
self.data.LocalEnergy_mpc_kc = obj(
value = E-Ve+Vm+Kc,
value_squared = E2+Ve2+Vm2+Kc2 + 2*(E*(-Ve+Vm+Kc)-Ve*(Vm+Kc)+Vm*Kc)
)
E_mpc_kc = obj()
E = Ed.value
Ve = Ved.value
Vm = Vmd.value
Kc = Kcd.value
E_mpc_kc.value = E-Ve+Vm+Kc
if 'value_squared' in Ed:
E2 = Ed.value_squared
Ve2 = Ved.value_squared
Vm2 = Vmd.value_squared
Kc2 = Kcd.value_squared
E_mpc_kc.value_squared = E2+Ve2+Vm2+Kc2 + 2*(E*(-Ve+Vm+Kc)-Ve*(Vm+Kc)+Vm*Kc)
#end if
self.data.LocalEnergy_mpc_kc = E_mpc_kc
#end if
#end def load_data_local
@ -325,9 +331,14 @@ class ScalarsHDFAnalyzer(HDFAnalyzer):
self.info.nblocks_exclude = nbe
for varname,val in self.data.iteritems():
(mean,var,error,kappa)=simstats(val.value[nbe:,...].ravel())
if 'value_squared' in val:
variance = val.value_squared[nbe:,...].mean()-mean**2
else:
variance = var
#end if
self[varname] = obj(
mean = mean,
variance = val.value_squared[nbe:,...].mean()-mean**2,
variance = variance,
sample_variance = var,
error = error,
kappa = kappa
@ -441,7 +452,7 @@ class EnergyDensityAnalyzer(HDFAnalyzer):
# add simple data first
for k,v in data._iteritems():
if not sg_pattern.match(k):
self._add_attribute(k,v)
self[k] = v
else:
nspacegrids+=1
#end if
@ -1896,7 +1907,9 @@ class SpinDensityAnalyzer(DensityAnalyzerBase):
for d in self.data:
b = len(d.value)
d.value.shape = (b,g[0],g[1],g[2])
d.value_squared.shape = (b,g[0],g[1],g[2])
if 'value_squared' in d:
d.value_squared.shape = (b,g[0],g[1],g[2])
#end if
#end for
#end def load_data_local
@ -2308,7 +2321,7 @@ class SpaceGridBase(QAobject):
def check_complete(self,exit_on_fail=True):
succeeded = True
for k,v in self._iteritems():
if k[0]!='_' and v==None:
if k[0]!='_' and v is None:
succeeded=False
if exit_on_fail:
self.error('SpaceGridBase.'+k+' must be provided',exit=False)

View File

@ -33,7 +33,6 @@ const hsize_t h5_observable_type=H5T_NATIVE_DOUBLE;
* This is a helper class to manage a hdf5 dagroup for each collectable.
* The data handled by an Estimator should be presented by dense N-dim array in C.
* /observables/title/value
* /observables/title/value_sq
*/
struct observable_helper
{
@ -48,10 +47,6 @@ struct observable_helper
hid_t space1_id;
///id of the value dataset
hid_t value1_id;
///dataspace for squared value
hid_t space2_id;
///id of the squred value dataset
hid_t value2_id;
///my dimensions
std::vector<hsize_t> mydims;
///maximum dimensions
@ -65,7 +60,7 @@ struct observable_helper
///default constructor
observable_helper(const std::string& title="dummy")
:data_id(-1),space1_id(-1),space2_id(-1), group_name(title)
:data_id(-1),space1_id(-1), group_name(title)
{
}
@ -74,8 +69,6 @@ struct observable_helper
{
if(space1_id>-1)
H5Sclose(space1_id);
if(space2_id>-1)
H5Sclose(space2_id);
if(data_id>-1)
H5Gclose(data_id);
}
@ -119,11 +112,6 @@ struct observable_helper
hid_t memspace = H5Screate_simple(rank, &mydims[0], NULL);
herr_t ret = H5Dwrite(value1_id, h5_observable_type, memspace, space1_id, H5P_DEFAULT, &zeros[0]);
H5Sclose(memspace);
space2_id=H5Screate_simple(rank, &mydims[0], &maxdims[0]);
value2_id= H5Dcreate(data_id,"value_squared",h5_observable_type,space2_id,p);
memspace = H5Screate_simple(rank, &mydims[0], NULL);
ret = H5Dwrite(value2_id, h5_observable_type, memspace, space2_id, H5P_DEFAULT, &zeros[0]);
H5Sclose(memspace);
H5Pclose(p);
}
}
@ -196,12 +184,6 @@ struct observable_helper
hid_t memspace = H5Screate_simple(rank, &mydims[0], NULL);
herr_t ret = H5Dwrite(value1_id, h5_observable_type, memspace, space1_id, H5P_DEFAULT, first_v+lower_bound);
H5Sclose(memspace);
H5Sset_extent_simple(space2_id,rank,&curdims[0],&maxdims[0]);
H5Sselect_hyperslab(space2_id, H5S_SELECT_SET, &offsets[0], NULL, &mydims[0], NULL);
H5Dextend(value2_id,&curdims[0]);
memspace = H5Screate_simple(rank, &mydims[0], NULL);
ret = H5Dwrite(value2_id, h5_observable_type, memspace, space2_id, H5P_DEFAULT, first_vv+lower_bound);
H5Sclose(memspace);
curdims[0]++;
offsets[0]++;
}

View File

@ -90,7 +90,7 @@ ENDIF()
qmc_cpu_limit_vmc.xml)
IF (TEST_ADDED)
SET_PROPERTY(TEST ${FULL_NAME} APPEND PROPERTY TIMEOUT 120)
SET_PROPERTY(TEST ${FULL_NAME} APPEND PROPERTY TIMEOUT 180)
SET_PROPERTY(TEST ${FULL_NAME} APPEND PROPERTY PASS_REGULAR_EXPRESSION "Time limit reached for")
ENDIF()
@ -116,7 +116,7 @@ ENDIF()
qmc_cpu_limit_dmc.xml)
IF (TEST_ADDED)
SET_PROPERTY(TEST ${FULL_NAME} APPEND PROPERTY TIMEOUT 120)
SET_PROPERTY(TEST ${FULL_NAME} APPEND PROPERTY TIMEOUT 240)
SET_PROPERTY(TEST ${FULL_NAME} APPEND PROPERTY PASS_REGULAR_EXPRESSION "Time limit reached for")
ENDIF()