Replies: 1 comment 2 replies
-
|
That is very likely because your The unbeaching count can increase on every |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Hi, @erikvansebille. I have been troubled by the following problems for a long time, and I have tried many methods, but they still have not been solved.
unbeach_countdo not follow the expected pattern of starting from 1 and incrementing for each particle.For instance, here are some
unbeach_countvalues for different particles:Particle 2: [0, 0, 24, 72, 120, 168, 216, 264, 281, -2147483648, -2147483648, -2147483648, ...]
Particle 42: [0, 0, 0, 39, 87, 135, 183, 205, -2147483648, -2147483648, -2147483648, ...]
Particle 47: [0, 0, 14, 62, 110, 158, 206, 227, -2147483648, -2147483648, -2147483648, ...]
The Parcels version I used is 2.4.2. Could you provide any insights into why these might be happening? Or is there anything I might have overlooked? Any help would be greatly appreciated.
Some of my code is below:
class CustomParticle(JITParticle):age = Variable('age', dtype=np.float32, initial=0.)particle_state = Variable('particle_state', dtype=np.int32, initial=0.)unbeach_count = Variable('unbeach_count', dtype=np.int32, initial=0.)prev_lon = Variable('prev_lon', dtype = np.float32, to_write=True, initial=attrgetter('lon'))prev_lat = Variable('prev_lat', dtype = np.float32, to_write=True, initial=attrgetter('lat'))countDeleteParticle = Variable('countDeleteParticle', dtype = np.int64, to_write = True)def AdvectionRK4(particle, fieldset, time):if particle.particle_state == 0:(u1, v1) = fieldset.UV[time, particle.depth, particle.lat, particle.lon]lon1_adv, lat1_adv = (particle.lon + u1*.5*particle.dt, particle.lat + v1*.5*particle.dt)(u2, v2) = fieldset.UV[time + .5 * particle.dt, particle.depth, lat1_adv, lon1_adv]lon2_adv, lat2_adv = (particle.lon + u2*.5*particle.dt, particle.lat + v2*.5*particle.dt)(u3, v3) = fieldset.UV[time + .5 * particle.dt, particle.depth, lat2_adv, lon2_adv]lon3_adv, lat3_adv = (particle.lon + u3*particle.dt, particle.lat + v3*particle.dt)(u4, v4) = fieldset.UV[time + particle.dt, particle.depth, lat3_adv, lon3_adv]particle.lon += = (u1 + 2*u2 + 2*u3 + u4) / 6. * particle.dtparticle.lat += (v1 + 2*v2 + 2*v3 + v4) / 6. * particle.dtparticle.particle_state = 2def BeachTesting_Adv(particle, fieldset, time):if particle.particle_state == 2:part_dis_to_coast1 = fieldset.dist[time, particle.depth, particle.lat, particle.lon]beaching_dist1 = 0.1if part_dis_to_coast1 <= beaching_dist1:particle.particle_state = 4else:particle.particle_state = 0def UnBeaching(particle, fieldset, time):if particle.particle_state == 4:print("Runing Unbeaching For:")lat_1 = particle.latlon_1 = particle.lonprint(lat_1)print(lon_1)particle.lon = particle.prev_lonparticle.lat = particle.prev_latprint("New LatLon:")lat_1new = particle.latlon_1new = particle.lonprint(lat_1new)print(lon_1new)particle.particle_state = 0particle.unbeach_count += 1def StokesDrag(particle, fieldset, time):if particle.particle_state == 0:(u_uss, v_uss) = fieldset.UVuss[time, particle.depth, particle.lat, particle.lon]particle.lon += u_uss * particle.dtparticle.lat += v_uss * particle.dtparticle.particle_state = 3def Beaching_StkDr(particle, fieldset, time):if particle.particle_state == 3:part_dis_to_coast2 = fieldset.dist[time, particle.depth, particle.lat, particle.lon]beaching_dist2 = 0.1if part_dis_to_coast2 <= beaching_dist2:print("Particle beaching at:")lat_beaching = particle.latlon_beaching = particle.lonprint(lat_beaching)print(lon_beaching)particle.particle_state = 1particle.countDeleteParticle = 2particle.delete()else:particle.particle_state = 0particle.prev_lon = particle.lonparticle.prev_lat = particle.latKernels= [AdvectionRK4, BeachTesting_Adv, UnBeaching, StokesDrag, Beaching_StkDr, Ageing]Beta Was this translation helpful? Give feedback.
All reactions