diff --git a/dedalus/core/evaluator.py b/dedalus/core/evaluator.py index f3b82e62..3762dcfa 100644 --- a/dedalus/core/evaluator.py +++ b/dedalus/core/evaluator.py @@ -631,6 +631,29 @@ def dset_metadata(self, task, task_num, dset, scale_group, gnc_shape, gnc_start, scale.make_scale(sn) dset.dims[0].attach_scale(scale) + # Tensor components + skip = 1 + for comp in op.tensorsig: + data = np.array(comp.names,dtype='S') + sn = 'coords' + if self.dist.comm_cart.rank == 0: + scale_hash = hashlib.sha1(data).hexdigest() + else: + scale_hash = None + if not virtual_file: + scale_hash = self.dist.comm_cart.bcast(scale_hash, root=0) + + lookup = 'hash_' + scale_hash + + if lookup not in scale_group: + scale_group.create_dataset(name=lookup, data=data) + scale_group[lookup].make_scale(sn) + + scale = scale_group[lookup] + dset.dims[skip].label = sn + dset.dims[skip].attach_scale(scale) + skip += 1 + # Spatial scales for axis in range(self.dist.dim): basis = op.domain.full_bases[axis] @@ -662,10 +685,10 @@ def dset_metadata(self, task, task_num, dset, scale_group, gnc_shape, gnc_start, if lookup not in scale_group: scale_group.create_dataset(name=lookup, data=data) - scale_group[lookup].make_scale() + scale_group[lookup].make_scale(sn) scale = scale_group[lookup] - dset.dims[axis+1].label = sn - dset.dims[axis+1].attach_scale(scale) + dset.dims[axis+skip].label = sn + dset.dims[axis+skip].attach_scale(scale) def process(self, world_time=0, wall_time=0, sim_time=0, timestep=0, iteration=0, **kw):