void Universe::UpdateStress(Rectangle const& r ) { drawing_area drawing(r.StartX(),r.StartY(),r.Width(),r.Height(),drawingMemory); for( int i=r.StartY(); i<r.EndY() ; ++i ) { drawing.set_pos(1, i-r.StartY()); #pragma ivdep for( int j=r.StartX(); j<r.EndX() ; ++j ) { S[i][j] += M[i][j]*(V[i][j+1]-V[i][j]); T[i][j] += M[i][j]*(V[i+1][j]-V[i][j]); int index = (int)(V[i][j]*(ColorMapSize/2)) + ColorMapSize/2; if( index<0 ) index = 0; if( index>=ColorMapSize ) index = ColorMapSize-1; color_t* c = ColorMap[material[i][j]]; drawing.put_pixel(c[index]); } } }
void Universe::UpdateVelocity(Rectangle const& r) { for( int i=r.StartY(); i<r.EndY(); ++i ) #pragma ivdep for( int j=r.StartX(); j<r.EndX(); ++j ) V[i][j] = D[i][j]*(V[i][j] + L[i][j]*(S[i][j] - S[i][j-1] + T[i][j] - T[i-1][j])); }