@@ -202,63 +202,32 @@ def create_fieldset(settings):
202202 return fieldset
203203
204204
205- def create_particleset_from_map (fieldset , settings ):
206- """ A constructor method to create a Parcels.ParticleSet for a plasticparcels simulation from one of the available initialisation maps
205+ def create_particleset (fieldset , settings , release_locations ):
206+ """ A constructor method to create a Parcels.ParticleSet for a plasticparcels simulation
207207
208208 Parameters
209209 ----------
210210 fieldset :
211211 A Parcels.FieldSet object
212212 settings :
213213 A dictionary of model settings, simulation settings, and release settings and plastic-type settings
214+ release_locations :
215+ A dictionary of release locations for particles
214216
215217 Returns
216218 -------
217219 particleset
218220 A parcels.ParticleSet object
219221 """
220222
221- # Load release type information
222- release_type = settings ['release' ]['initialisation_type' ] # TODO: MAKE THIS PART BETTER!
223-
224- release_quantity_names = {
225- 'coastal' : 'MPW_Cell' ,
226- 'rivers' : 'Emissions' ,
227- 'fisheries' : 'fishing_hours' ,
228- 'global_concentrations' : 'Concentration'
229- }
230- release_quantity_name = release_quantity_names [release_type ]
231-
232- particle_locations = pd .read_csv (settings ['release_maps' ][release_type ])
233-
234- # Select specific continent/region/subregion/country/economic status if applicable:
235- if 'continent' in settings ['release' ].keys ():
236- particle_locations = particle_locations [particle_locations ['Continent' ] == settings ['release' ]['continent' ]]
237- if 'region' in settings ['release' ].keys ():
238- particle_locations = particle_locations [particle_locations ['Region' ] == settings ['release' ]['region' ]]
239- if 'subregion' in settings ['release' ].keys ():
240- particle_locations = particle_locations [particle_locations ['Subregion' ] == settings ['release' ]['subregion' ]]
241- if 'country' in settings ['release' ].keys ():
242- particle_locations = particle_locations [particle_locations ['Country' ] == settings ['release' ]['country' ]]
243- if 'economicstatus' in settings ['release' ].keys ():
244- particle_locations = particle_locations [particle_locations ['Economic status' ] == settings ['release' ]['economicstatus' ]]
245- if 'concentration_type' in settings ['release' ].keys ():
246- particle_locations = particle_locations [particle_locations ['ConcentrationType' ] == settings ['release' ]['concentration_type' ]]
247-
248- particle_locations = particle_locations .groupby (['Longitude' , 'Latitude' ])[release_quantity_name ].agg ('sum' ).reset_index ()
249- particle_locations = particle_locations [particle_locations [release_quantity_name ] > 0 ]
250-
251- release_locations = {'lons' : particle_locations ['Longitude' ],
252- 'lats' : particle_locations ['Latitude' ],
253- 'plastic_amount' : particle_locations [release_quantity_name ]}
254-
255223 # Set the longitude, latitude, and plastic amount per particle
256224 lons = release_locations ['lons' ]
257225 lats = release_locations ['lats' ]
258- plastic_amounts = release_locations ['plastic_amount' ]
226+ if 'plastic_amount' in release_locations .keys ():
227+ plastic_amounts = release_locations ['plastic_amount' ]
228+ else :
229+ plastic_amounts = np .nan_like (lons )
259230
260- # 20240429 - for simplification I have removed the option to set custom times and depths, as well as different densities, diameters, and wind_coefficients, this can be done in an alternate way
261- # TODO: Update this to use model grid id's instead of T-points lat/lon
262231 # Set particle properties
263232 plastic_densities = np .full (lons .shape , settings ['plastictype' ]['plastic_density' ])
264233 plastic_diameters = np .full (lons .shape , settings ['plastictype' ]['plastic_diameter' ])
@@ -301,6 +270,61 @@ def create_particleset_from_map(fieldset, settings):
301270 return pset
302271
303272
273+ def create_particleset_from_map (fieldset , settings ):
274+ """ A constructor method to create a Parcels.ParticleSet for a plasticparcels simulation from one of the available initialisation maps
275+
276+ Parameters
277+ ----------
278+ fieldset :
279+ A Parcels.FieldSet object
280+ settings :
281+ A dictionary of model settings, simulation settings, and release settings and plastic-type settings
282+
283+ Returns
284+ -------
285+ particleset
286+ A parcels.ParticleSet object
287+ """
288+
289+ # Load release type information
290+ release_type = settings ['release' ]['initialisation_type' ]
291+
292+ release_quantity_names = {
293+ 'coastal' : 'MPW_Cell' ,
294+ 'rivers' : 'Emissions' ,
295+ 'fisheries' : 'fishing_hours' ,
296+ 'global_concentrations' : 'Concentration'
297+ }
298+ release_quantity_name = release_quantity_names [release_type ]
299+
300+ particle_locations = pd .read_csv (settings ['release_maps' ][release_type ])
301+
302+ # Select specific continent/region/subregion/country/economic status if applicable:
303+ if 'continent' in settings ['release' ].keys ():
304+ particle_locations = particle_locations [particle_locations ['Continent' ] == settings ['release' ]['continent' ]]
305+ if 'region' in settings ['release' ].keys ():
306+ particle_locations = particle_locations [particle_locations ['Region' ] == settings ['release' ]['region' ]]
307+ if 'subregion' in settings ['release' ].keys ():
308+ particle_locations = particle_locations [particle_locations ['Subregion' ] == settings ['release' ]['subregion' ]]
309+ if 'country' in settings ['release' ].keys ():
310+ particle_locations = particle_locations [particle_locations ['Country' ] == settings ['release' ]['country' ]]
311+ if 'economicstatus' in settings ['release' ].keys ():
312+ particle_locations = particle_locations [particle_locations ['Economic status' ] == settings ['release' ]['economicstatus' ]]
313+ if 'concentration_type' in settings ['release' ].keys ():
314+ particle_locations = particle_locations [particle_locations ['ConcentrationType' ] == settings ['release' ]['concentration_type' ]]
315+
316+ particle_locations = particle_locations .groupby (['Longitude' , 'Latitude' ])[release_quantity_name ].agg ('sum' ).reset_index ()
317+ particle_locations = particle_locations [particle_locations [release_quantity_name ] > 0 ]
318+
319+ release_locations = {'lons' : particle_locations ['Longitude' ],
320+ 'lats' : particle_locations ['Latitude' ],
321+ 'plastic_amount' : particle_locations [release_quantity_name ]}
322+
323+ pset = create_particleset (fieldset , settings , release_locations )
324+
325+ return pset
326+
327+
304328def create_kernel (fieldset ):
305329 """ A constructor method to create a list of kernels for a plasticparcels simulation
306330
0 commit comments