Advertisement
phystota

lagrangian

Feb 4th, 2025
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.92 KB | None | 0 0
  1. //*****************************************************************//
  2. //** Kernel To Move Particles On the GPU independent of the grid **//
  3. //*****************************************************************//
  4. __global__ void Kernel_MoveParticles(dim *part_pos, dim *part_vel, dim *part_acc, int num_particles , double *timestep, int i_sp, bool glo_ESolver, int glostep, bool *dev_part_CEX, int CollInterval)
  5. {
  6.    int blockId = blockIdx.x + blockIdx.y*gridDim.x;
  7.    int tid = blockId*(blockDim.x*blockDim.y) + threadIdx.y*blockDim.x + threadIdx.x;
  8.    if(tid<num_particles)
  9.    {
  10.       if(glo_ESolver==1)
  11.       {
  12.          if(i_sp==0)
  13.          {
  14.             //**  for neutrals                                        **//
  15.             //**  the acc here is typiclly 1, but after CEX           **//
  16.             //**  acc is weight because of the speed of fast neutrals **//
  17. //            part_pos[tid].x[0] += part_vel[tid].x[0]*timestep[i_sp]*part_acc[tid].x[0];
  18. //            part_pos[tid].x[1] += part_vel[tid].x[1]*timestep[i_sp]*part_acc[tid].x[1];
  19. //            part_pos[tid].x[2] += part_vel[tid].x[2]*timestep[i_sp]*part_acc[tid].x[2];
  20.          }
  21.          if(i_sp>0)
  22.          {
  23.             //** for ions and electrons                                           **//
  24.             //** acc is initially 0, and will be calculated based on E = grad.Phi **//
  25.             //** Using the Leap-frog Scheme                                       **//
  26.              if(glostep==1)
  27.              {
  28.                dim dummvel;
  29. //               dummvel.x[0] = part_vel[tid].x[0] - 0.5 * part_acc[tid].x[0] * timestep[i_sp];
  30. //               dummvel.x[1] = part_vel[tid].x[1] - 0.5 * part_acc[tid].x[1] * timestep[i_sp];
  31. //               dummvel.x[2] = part_vel[tid].x[2] - 0.5 * part_acc[tid].x[2] * timestep[i_sp];
  32. //               part_vel[tid].x[0] = dummvel.x[0];
  33. //               part_vel[tid].x[1] = dummvel.x[1];
  34. //               part_vel[tid].x[2] = dummvel.x[2];
  35.              }
  36.  
  37.  
  38.              if(i_sp == 1)
  39.              {
  40.                 if(dev_part_CEX[tid] == 1)
  41.                 {
  42. //                 part_vel[tid].x[0] += part_acc[tid].x[0]*timestep[i_sp];//*CollInterval;
  43. //                 part_vel[tid].x[1] += part_acc[tid].x[1]*timestep[i_sp];//*CollInterval;
  44. //                 part_vel[tid].x[2] += part_acc[tid].x[2]*timestep[i_sp];//*CollInterval;
  45. //                 part_pos[tid].x[0] += part_vel[tid].x[0]*timestep[i_sp];//*CollInterval;
  46. //                 part_pos[tid].x[1] += part_vel[tid].x[1]*timestep[i_sp];//*CollInterval;
  47. //                 part_pos[tid].x[2] += part_vel[tid].x[2]*timestep[i_sp];//*CollInterval;
  48.                 }
  49.                 else
  50.                 {
  51. //                 part_vel[tid].x[0] += part_acc[tid].x[0]*timestep[i_sp];
  52. //                 part_vel[tid].x[1] += part_acc[tid].x[1]*timestep[i_sp];
  53. //                 part_vel[tid].x[2] += part_acc[tid].x[2]*timestep[i_sp];
  54. //                 part_pos[tid].x[0] += part_vel[tid].x[0]*timestep[i_sp];
  55. //                 part_pos[tid].x[1] += part_vel[tid].x[1]*timestep[i_sp];
  56. //                 part_pos[tid].x[2] += part_vel[tid].x[2]*timestep[i_sp];
  57.                 }
  58.              }
  59.              else
  60.              {
  61.  
  62. //              part_vel[tid].x[0] += part_acc[tid].x[0]*timestep[i_sp];
  63. //              part_vel[tid].x[1] += part_acc[tid].x[1]*timestep[i_sp];
  64. //              part_vel[tid].x[2] += part_acc[tid].x[2]*timestep[i_sp];
  65. //              part_pos[tid].x[0] += part_vel[tid].x[0]*timestep[i_sp];
  66. //              part_pos[tid].x[1] += part_vel[tid].x[1]*timestep[i_sp];
  67. //              part_pos[tid].x[2] += part_vel[tid].x[2]*timestep[i_sp];
  68.              }
  69.  
  70.  
  71.  
  72.          }
  73.       }
  74.  
  75.       if(glo_ESolver==0)
  76.       {
  77. //         part_pos[tid].x[0] += part_vel[tid].x[0]*timestep[i_sp];
  78. //         part_pos[tid].x[1] += part_vel[tid].x[1]*timestep[i_sp];
  79. //         part_pos[tid].x[2] += part_vel[tid].x[2]*timestep[i_sp];
  80.       }
  81.    }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement