|
294 | 294 | "fieldset = parcels.FieldSet([U, V, UV, Tnode, Tface])" |
295 | 295 | ] |
296 | 296 | }, |
| 297 | + { |
| 298 | + "cell_type": "markdown", |
| 299 | + "metadata": {}, |
| 300 | + "source": [ |
| 301 | + "We can now create particles to sample data using either the node registered or face registered data." |
| 302 | + ] |
| 303 | + }, |
| 304 | + { |
| 305 | + "cell_type": "code", |
| 306 | + "execution_count": null, |
| 307 | + "metadata": {}, |
| 308 | + "outputs": [], |
| 309 | + "source": [ |
| 310 | + "SampleParticle = parcels.Particle.add_variable(\n", |
| 311 | + " parcels.Variable(\"Tracer\", dtype=np.float32, initial=np.nan)\n", |
| 312 | + ")\n", |
| 313 | + "\n", |
| 314 | + "\n", |
| 315 | + "def SampleTracer_Node(particles, fieldset):\n", |
| 316 | + " particles.Tracer = fieldset.T_node[particles]\n", |
| 317 | + "\n", |
| 318 | + "\n", |
| 319 | + "def SampleTracer_Face(particles, fieldset):\n", |
| 320 | + " particles.Tracer = fieldset.T_face[particles]" |
| 321 | + ] |
| 322 | + }, |
| 323 | + { |
| 324 | + "cell_type": "markdown", |
| 325 | + "metadata": {}, |
| 326 | + "source": [] |
| 327 | + }, |
| 328 | + { |
| 329 | + "cell_type": "code", |
| 330 | + "execution_count": null, |
| 331 | + "metadata": {}, |
| 332 | + "outputs": [], |
| 333 | + "source": [ |
| 334 | + "print(fieldset.fields)" |
| 335 | + ] |
| 336 | + }, |
| 337 | + { |
| 338 | + "cell_type": "code", |
| 339 | + "execution_count": null, |
| 340 | + "metadata": {}, |
| 341 | + "outputs": [], |
| 342 | + "source": [ |
| 343 | + "pset = {}\n", |
| 344 | + "\n", |
| 345 | + "xv, yv = np.meshgrid(np.linspace(0.2, 0.8, 8), np.linspace(0.2, 0.9, 8))\n", |
| 346 | + "pset[\"node\"] = parcels.ParticleSet(\n", |
| 347 | + " fieldset, pclass=SampleParticle, lon=xv.flatten(), lat=yv.flatten()\n", |
| 348 | + ")\n", |
| 349 | + "pset[\"node\"].execute(\n", |
| 350 | + " SampleTracer_Node, runtime=np.timedelta64(1, \"D\"), dt=np.timedelta64(1, \"D\")\n", |
| 351 | + ")\n", |
| 352 | + "\n", |
| 353 | + "pset[\"face\"] = parcels.ParticleSet(\n", |
| 354 | + " fieldset, pclass=SampleParticle, lon=xv.flatten(), lat=yv.flatten()\n", |
| 355 | + ")\n", |
| 356 | + "pset[\"face\"].execute(\n", |
| 357 | + " SampleTracer_Face, runtime=np.timedelta64(1, \"D\"), dt=np.timedelta64(1, \"D\")\n", |
| 358 | + ")" |
| 359 | + ] |
| 360 | + }, |
297 | 361 | { |
298 | 362 | "cell_type": "code", |
299 | 363 | "execution_count": null, |
|
330 | 394 | " x, y, c=T_node, cmap=\"viridis\", s=150, edgecolors=\"black\", vmin=-1.0, vmax=1.0\n", |
331 | 395 | ")\n", |
332 | 396 | "\n", |
| 397 | + "ax[0].scatter(\n", |
| 398 | + " pset[\"node\"].lon,\n", |
| 399 | + " pset[\"node\"].lat,\n", |
| 400 | + " c=pset[\"node\"].Tracer,\n", |
| 401 | + " cmap=\"viridis\",\n", |
| 402 | + " edgecolors=\"k\",\n", |
| 403 | + " s=50,\n", |
| 404 | + " vmin=-1.0,\n", |
| 405 | + " vmax=1.0,\n", |
| 406 | + ")\n", |
| 407 | + "\n", |
333 | 408 | "cbar = fig.colorbar(sc1, ax=ax[0])\n", |
334 | 409 | "cbar.set_label(\"T\")\n", |
335 | 410 | "\n", |
|
340 | 415 | "\n", |
341 | 416 | "# # Plot the face registered data\n", |
342 | 417 | "T_face = np.squeeze(ds[\"T_face\"][0, 0, :].values)\n", |
343 | | - "tpc = ax[1].tripcolor(\n", |
| 418 | + "assert triang.triangles.shape[0] == T_face.shape[0]\n", |
| 419 | + "tpc2 = ax[1].tripcolor(\n", |
344 | 420 | " triang,\n", |
345 | | - " T_face,\n", |
| 421 | + " facecolors=T_face,\n", |
346 | 422 | " shading=\"flat\",\n", |
347 | 423 | " cmap=\"viridis\",\n", |
348 | 424 | " edgecolors=\"k\",\n", |
|
353 | 429 | "# Plot the element edges\n", |
354 | 430 | "ax[1].triplot(triang, color=\"black\", linewidth=0.5)\n", |
355 | 431 | "\n", |
356 | | - "# Plot the node registered data\n", |
| 432 | + "# Plot the face registered data\n", |
357 | 433 | "xf = ds.uxgrid.face_lon.values\n", |
358 | 434 | "yf = ds.uxgrid.face_lat.values\n", |
359 | | - "sc2 = ax[1].scatter(\n", |
360 | | - " xf, yf, c=T_face, cmap=\"viridis\", s=150, edgecolors=\"black\", vmin=-1.0, vmax=1.0\n", |
| 435 | + "\n", |
| 436 | + "ax[1].scatter(\n", |
| 437 | + " pset[\"face\"].lon,\n", |
| 438 | + " pset[\"face\"].lat,\n", |
| 439 | + " c=pset[\"face\"].Tracer,\n", |
| 440 | + " cmap=\"viridis\",\n", |
| 441 | + " edgecolors=\"k\",\n", |
| 442 | + " s=50,\n", |
| 443 | + " vmin=-1.0,\n", |
| 444 | + " vmax=1.0,\n", |
361 | 445 | ")\n", |
362 | 446 | "\n", |
363 | | - "cbar = fig.colorbar(sc2, ax=ax[1])\n", |
| 447 | + "cbar = fig.colorbar(tpc, ax=ax[1])\n", |
364 | 448 | "cbar.set_label(\"T\")\n", |
365 | 449 | "\n", |
366 | 450 | "ax[1].set_aspect(\"equal\", \"box\")\n", |
|
0 commit comments