Add task to handler.
(self, task, layout='g', name=None, scales=None)
| 276 | return scheduled |
| 277 | |
| 278 | def add_task(self, task, layout='g', name=None, scales=None): |
| 279 | """Add task to handler.""" |
| 280 | # Default name |
| 281 | if name is None: |
| 282 | name = str(task) |
| 283 | # Create operator |
| 284 | if isinstance(task, str): |
| 285 | op = FutureField.parse(task, self.vars, self.dist) |
| 286 | elif isinstance(task, Field): |
| 287 | op = Copy(task) |
| 288 | else: |
| 289 | op = task |
| 290 | # Check scales |
| 291 | if isinstance(op, (LockedField, FutureLockedField)): |
| 292 | if scales is None: |
| 293 | scales = op.domain.dealias |
| 294 | else: |
| 295 | scales = self.dist.remedy_scales(scales) |
| 296 | if scales != op.domain.dealias: |
| 297 | scales = op.domain.dealias |
| 298 | logger.warning("Cannot specify non-delias scales for LockedFields") |
| 299 | else: |
| 300 | scales = self.dist.remedy_scales(scales) |
| 301 | # Build task dictionary |
| 302 | task = dict() |
| 303 | task['operator'] = op |
| 304 | task['layout'] = self.dist.get_layout_object(layout) |
| 305 | task['name'] = name |
| 306 | task['scales'] = scales |
| 307 | task['dtype'] = op.dtype |
| 308 | self.tasks.append(task) |
| 309 | |
| 310 | def add_tasks(self, tasks, **kw): |
| 311 | """Add multiple tasks.""" |