|
1 | 1 | import numpy as np |
2 | 2 | import pytest |
3 | 3 |
|
4 | | -from parcels.particle import ParticleClass, Variable |
| 4 | +from parcels._core.utils.time import TimeInterval |
| 5 | +from parcels._datasets.structured.generic import TIME |
| 6 | +from parcels.particle import _SAME_AS_FIELDSET_TIME_INTERVAL, Particle, ParticleClass, Variable, create_particle_data |
5 | 7 |
|
6 | 8 |
|
7 | 9 | def test_variable_init(): |
@@ -104,3 +106,39 @@ def test_particleclass_add_variable_collision(): |
104 | 106 |
|
105 | 107 | with pytest.raises(ValueError, match="Variable name already exists: "): |
106 | 108 | p_initial.add_variable([Variable("vara", dtype=np.float32, to_write=True)]) |
| 109 | + |
| 110 | + |
| 111 | +@pytest.mark.parametrize( |
| 112 | + "particle", |
| 113 | + [ |
| 114 | + ParticleClass( |
| 115 | + variables=[ |
| 116 | + Variable("vara", dtype=np.float32, initial=1.0), |
| 117 | + Variable("varb", dtype=np.float32, initial=2.0), |
| 118 | + ] |
| 119 | + ), |
| 120 | + Particle, |
| 121 | + ], |
| 122 | +) |
| 123 | +@pytest.mark.parametrize("nparticles", [5, 10]) |
| 124 | +def test_create_particle_data(particle, nparticles): |
| 125 | + time_interval = TimeInterval(TIME[0], TIME[-1]) |
| 126 | + ngrids = 4 |
| 127 | + data = create_particle_data(pclass=particle, nparticles=nparticles, ngrids=ngrids, time_interval=time_interval) |
| 128 | + |
| 129 | + assert isinstance(data, dict) |
| 130 | + assert len(data) == len(particle.variables) + 1 # ei variable is separate |
| 131 | + |
| 132 | + variables = {var.name: var for var in particle.variables} |
| 133 | + |
| 134 | + for variable_name in variables.keys(): |
| 135 | + variable = variables[variable_name] |
| 136 | + variable_array = data[variable_name] |
| 137 | + |
| 138 | + assert variable_array.shape[0] == nparticles |
| 139 | + |
| 140 | + dtype = variable.dtype |
| 141 | + if dtype is _SAME_AS_FIELDSET_TIME_INTERVAL.VALUE: |
| 142 | + dtype = type(time_interval.left) |
| 143 | + |
| 144 | + assert variable_array.dtype == dtype |
0 commit comments