/** Calculate temperature of the LB fluid. * \param result Fluid temperature */ void lb_calc_fluid_temp(double *result) { int x, y, z, index; double local_rho, local_j2; double temp = 0.0; for (x=1; x<=lblattice.grid[0]; x++) { for (y=1; y<=lblattice.grid[1]; y++) { for (z=1; z<=lblattice.grid[2]; z++) { index = get_linear_index(x,y,z,lblattice.halo_grid); lb_calc_local_j(&lbfluid[index]); lb_calc_local_rho(&lbfluid[index]); local_rho = *lbfluid[index].rho; local_j2 = scalar(lbfluid[index].j,lbfluid[index].j); temp += local_j2; } } } temp *= 1./(lbpar.rho*lblattice.grid_volume*lbpar.tau*lbpar.tau*pow(lblattice.agrid,4)); MPI_Reduce(&temp, result, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); }
/** Calculate momentum of the LB fluid. * \param result Fluid momentum */ void lb_calc_fluid_momentum(double *result) { int x, y, z, index; double j[3], momentum[3] = { 0.0, 0.0, 0.0 }; for (x=1; x<=lblattice.grid[0]; x++) { for (y=1; y<=lblattice.grid[1]; y++) { for (z=1; z<=lblattice.grid[2]; z++) { index = get_linear_index(x,y,z,lblattice.halo_grid); lb_calc_local_j(index,j); momentum[0] += j[0] + lbfields[index].force[0]; momentum[1] += j[1] + lbfields[index].force[1]; momentum[2] += j[2] + lbfields[index].force[2]; } } } momentum[0] *= lblattice.agrid/lbpar.tau; momentum[1] *= lblattice.agrid/lbpar.tau; momentum[2] *= lblattice.agrid/lbpar.tau; MPI_Reduce(momentum, result, 3, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); }
/** Calculate a velocity profile for the LB fluid. */ void lb_calc_velocity_profile(double *velprof, int vcomp, int pdir, int x1, int x2) { int index, dir[3]; double local_rho, local_j; /* \todo generalize and parallelize */ dir[(pdir+1)%3] = x1; dir[(pdir+2)%3] = x2; for (dir[pdir]=1;dir[pdir]<=lblattice.grid[pdir];dir[pdir]++) { index = get_linear_index(dir[0],dir[1],dir[2],lblattice.halo_grid); lb_calc_local_j(&lbfluid[index]); lb_calc_local_rho(&lbfluid[index]); local_rho = *lbfluid[index].rho; local_j = lbfluid[index].j[vcomp]; if (local_j == 0) { velprof[dir[pdir]-1] = 0.0; } else { velprof[dir[pdir]-1] = local_j/local_rho * lblattice.agrid/lbpar.tau; } } }