示例#1
0
/** (Re-)initializes the fluid. */
void lb_reinit_parameters_gpu() {
  int ii;

  lbpar_gpu.time_step = (float)time_step;
  for(ii=0;ii<LB_COMPONENTS;++ii){
    lbpar_gpu.mu[ii] = 0.0;
  
    if (lbpar_gpu.viscosity[ii] > 0.0) {
      /* Eq. (80) Duenweg, Schiller, Ladd, PRE 76(3):036704 (2007). */
      lbpar_gpu.gamma_shear[ii] = 1. - 2./(6.*lbpar_gpu.viscosity[ii]*lbpar_gpu.tau/(lbpar_gpu.agrid*lbpar_gpu.agrid) + 1.);   
    }
  
    if (lbpar_gpu.bulk_viscosity[ii] > 0.0) {
      /* Eq. (81) Duenweg, Schiller, Ladd, PRE 76(3):036704 (2007). */
      lbpar_gpu.gamma_bulk[ii] = 1. - 2./(9.*lbpar_gpu.bulk_viscosity[ii]*lbpar_gpu.tau/(lbpar_gpu.agrid*lbpar_gpu.agrid) + 1.);
    }
#ifdef SHANCHEN
    if (lbpar_gpu.mobility[0] > 0.0) {
      lbpar_gpu.gamma_mobility[0] = 1. - 2./(6.*lbpar_gpu.mobility[0]*lbpar_gpu.tau/(lbpar_gpu.agrid*lbpar_gpu.agrid) + 1.);
    }
#endif
    if (temperature > 0.0) {  /* fluctuating hydrodynamics ? */
  
      lbpar_gpu.fluct = 1;
  	LB_TRACE (fprintf(stderr, "fluct on \n"));
      /* Eq. (51) Duenweg, Schiller, Ladd, PRE 76(3):036704 (2007).*/
      /* Note that the modes are not normalized as in the paper here! */
      lbpar_gpu.mu[ii] = (float)temperature*lbpar_gpu.tau*lbpar_gpu.tau/c_sound_sq/(lbpar_gpu.agrid*lbpar_gpu.agrid); 
  
      /* lb_coupl_pref is stored in MD units (force)
       * Eq. (16) Ahlrichs and Duenweg, JCP 111(17):8225 (1999).
       * The factor 12 comes from the fact that we use random numbers
       * from -0.5 to 0.5 (equally distributed) which have variance 1/12.
       * time_step comes from the discretization.
       */
  
      lbpar_gpu.lb_coupl_pref[ii] = sqrt(12.f*2.f*lbpar_gpu.friction[ii]*(float)temperature/lbpar_gpu.time_step);
      lbpar_gpu.lb_coupl_pref2[ii] = sqrt(2.f*lbpar_gpu.friction[ii]*(float)temperature/lbpar_gpu.time_step);
  
    } else {
      /* no fluctuations at zero temperature */
      lbpar_gpu.fluct = 0;
      lbpar_gpu.lb_coupl_pref[ii] = 0.0;
      lbpar_gpu.lb_coupl_pref2[ii] = 0.0;
    }
  	LB_TRACE (fprintf(stderr,"lb_reinit_prarameters_gpu \n"));
  }
  reinit_parameters_GPU(&lbpar_gpu);
}
示例#2
0
/** (Re-)initializes the fluid. */
void lb_reinit_parameters_gpu() {
  int ii;

  lbpar_gpu.time_step = (float)time_step;
  for(ii=0;ii<LB_COMPONENTS;++ii){
    lbpar_gpu.mu[ii] = 0.0;
  
    if (lbpar_gpu.viscosity[ii] > 0.0) {
      /* Eq. (80) Duenweg, Schiller, Ladd, PRE 76(3):036704 (2007). */
      lbpar_gpu.gamma_shear[ii] = 1. - 2./(6.*lbpar_gpu.viscosity[ii]*lbpar_gpu.tau/(lbpar_gpu.agrid*lbpar_gpu.agrid) + 1.);   
    }
  
    if (lbpar_gpu.bulk_viscosity[ii] > 0.0) {
      /* Eq. (81) Duenweg, Schiller, Ladd, PRE 76(3):036704 (2007). */
      lbpar_gpu.gamma_bulk[ii] = 1. - 2./(9.*lbpar_gpu.bulk_viscosity[ii]*lbpar_gpu.tau/(lbpar_gpu.agrid*lbpar_gpu.agrid) + 1.);
    }
#ifdef SHANCHEN
    if (lbpar_gpu.mobility[0] > 0.0) {
      lbpar_gpu.gamma_mobility[0] = 1. - 2./(6.*lbpar_gpu.mobility[0]*lbpar_gpu.tau/(lbpar_gpu.agrid*lbpar_gpu.agrid) + 1.);
    }
#endif
    if (temperature > 0.0) {  /* fluctuating hydrodynamics ? */
  
      lbpar_gpu.fluct = 1;
  	LB_TRACE (fprintf(stderr, "fluct on \n"));
      /* Eq. (51) Duenweg, Schiller, Ladd, PRE 76(3):036704 (2007).*/
      /* Note that the modes are not normalized as in the paper here! */
      lbpar_gpu.mu[ii] = (float)temperature*lbpar_gpu.tau*lbpar_gpu.tau/c_sound_sq/(lbpar_gpu.agrid*lbpar_gpu.agrid); 
  
      /* lb_coupl_pref is stored in MD units (force)
       * Eq. (16) Ahlrichs and Duenweg, JCP 111(17):8225 (1999).
       * The factor 12 comes from the fact that we use random numbers
       * from -0.5 to 0.5 (equally distributed) which have variance 1/12.
       * time_step comes from the discretization.
       */
  
      lbpar_gpu.lb_coupl_pref[ii] = sqrt(12.f*2.f*lbpar_gpu.friction[ii]*(float)temperature/lbpar_gpu.time_step);
      lbpar_gpu.lb_coupl_pref2[ii] = sqrt(2.f*lbpar_gpu.friction[ii]*(float)temperature/lbpar_gpu.time_step);
  
    } else {
      /* no fluctuations at zero temperature */
      lbpar_gpu.fluct = 0;
      lbpar_gpu.lb_coupl_pref[ii] = 0.0;
      lbpar_gpu.lb_coupl_pref2[ii] = 0.0;
    }
  	LB_TRACE (fprintf(stderr,"lb_reinit_prarameters_gpu \n"));
  }


#ifdef ELECTROKINETICS
  if (ek_initialized) {
    lbpar_gpu.dim_x = (unsigned int) round(box_l[0] / lbpar_gpu.agrid); //TODO code duplication with lb.c start
    lbpar_gpu.dim_y = (unsigned int) round(box_l[1] / lbpar_gpu.agrid);
    lbpar_gpu.dim_z = (unsigned int) round(box_l[2] / lbpar_gpu.agrid);
    
    unsigned int tmp[3];
    
    tmp[0] = lbpar_gpu.dim_x;
    tmp[1] = lbpar_gpu.dim_y;
    tmp[2] = lbpar_gpu.dim_z;
    
    /* sanity checks */
    int dir;
    
    for (dir=0;dir<3;dir++) {
    /* check if box_l is compatible with lattice spacing */
      if (fabs(box_l[dir] - tmp[dir] * lbpar_gpu.agrid) > 1.0e-3) {
          ostringstream msg;
          msg <<"Lattice spacing lbpar_gpu.agrid= "<< lbpar_gpu.agrid << " is incompatible with box_l[" << dir << "]=" << box_l[dir];
          runtimeError(msg);
      }
    }
    
    lbpar_gpu.number_of_nodes = lbpar_gpu.dim_x * lbpar_gpu.dim_y * lbpar_gpu.dim_z;
    lbpar_gpu.tau = (float) time_step; //TODO code duplication with lb.c end
  }
#endif
  
	LB_TRACE (fprintf(stderr,"lb_reinit_prarameters_gpu \n"));

  reinit_parameters_GPU(&lbpar_gpu);
}