/** (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); }
/** (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); }