int lb_lbnode_set_extforce_GPU(int ind[3], double f[3]) { if ( ind[0] < 0 || ind[0] >= int(lbpar_gpu.dim_x) || ind[1] < 0 || ind[1] >= int(lbpar_gpu.dim_y) || ind[2] < 0 || ind[2] >= int(lbpar_gpu.dim_z) ) return ES_ERROR; unsigned int index = ind[0] + ind[1]*lbpar_gpu.dim_x + ind[2]*lbpar_gpu.dim_x*lbpar_gpu.dim_y; size_t size_of_extforces = (n_extern_nodeforces+1)*sizeof(LB_extern_nodeforce_gpu); host_extern_nodeforces = (LB_extern_nodeforce_gpu*) realloc(host_extern_nodeforces, size_of_extforces); host_extern_nodeforces[n_extern_nodeforces].force[0] = (float)f[0]; host_extern_nodeforces[n_extern_nodeforces].force[1] = (float)f[1]; host_extern_nodeforces[n_extern_nodeforces].force[2] = (float)f[2]; host_extern_nodeforces[n_extern_nodeforces].index = index; n_extern_nodeforces++; if(lbpar_gpu.external_force == 0)lbpar_gpu.external_force = 1; lb_init_extern_nodeforces_GPU(n_extern_nodeforces, host_extern_nodeforces, &lbpar_gpu); return ES_OK; }
static int lbnode_parse_set(Tcl_Interp *interp, int argc, char **argv, int *ind) { unsigned int index; double f[3]; size_t size_of_extforces; int change = 0; if ( ind[0] >= lbpar_gpu.dim_x || ind[1] >= lbpar_gpu.dim_y || ind[2] >= lbpar_gpu.dim_z ) { Tcl_AppendResult(interp, "position is not in the LB lattice", (char *)NULL); return TCL_ERROR; } index = ind[0] + ind[1]*lbpar_gpu.dim_x + ind[2]*lbpar_gpu.dim_x*lbpar_gpu.dim_y; while (argc > 0) { if (change==1) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "Error in lbnode_extforce force. You can only change one field at the same time.", (char *)NULL); return TCL_ERROR; } if(ARG0_IS_S("force")){ if (ARG1_IS_D(f[0])) { argc--; argv++; } else return TCL_ERROR; if (ARG1_IS_D(f[1])) { argc--; argv++; } else return TCL_ERROR; if (ARG1_IS_D(f[2])) { argc--; argv++; } else return TCL_ERROR; change=1; } size_of_extforces = (n_extern_nodeforces+1)*sizeof(LB_extern_nodeforce_gpu); host_extern_nodeforces = realloc(host_extern_nodeforces, size_of_extforces); host_extern_nodeforces[n_extern_nodeforces].force[0] = (float)f[0]; host_extern_nodeforces[n_extern_nodeforces].force[1] = (float)f[1]; host_extern_nodeforces[n_extern_nodeforces].force[2] = (float)f[2]; host_extern_nodeforces[n_extern_nodeforces].index = index; n_extern_nodeforces++; if(lbpar_gpu.external_force == 0)lbpar_gpu.external_force = 1; --argc; ++argv; lb_init_extern_nodeforces_GPU(n_extern_nodeforces, host_extern_nodeforces, &lbpar_gpu); } return TCL_OK; }