void load_fields_from_fft(const CH_FFT& fft , Triangulation& T ) { int Nb = fft.Nx(); c_array vx = fft.field_vel_x(); c_array vy = fft.field_vel_y(); c_array al = fft.field_f(); for(F_v_it vit=T.vertices_begin(); vit != T.vertices_end(); vit++) { int nx = vit->nx.val(); int ny = vit->ny.val(); // "right" ordering int i = ( Nb - 1 ) - ny ; int j = nx; // "wrong" ordering // int i = nx; // int j = ny; vit->U.set( Vector_2( real(vx(i,j)) , real(vy(i,j)) ) ); vit->alpha.set( real( al(i,j) ) ); // TODO: return more fields (chem pot, pressure, force, etc) } return; }
void load_alpha_on_fft( const Triangulation& T , CH_FFT& fft ) { int Nb = fft.Nx(); size_t align=fft.alignment(); c_array al( Nb , Nb , align ); for(F_v_it vit=T.vertices_begin(); vit != T.vertices_end(); vit++) { int nx = vit->nx.val(); int ny = vit->ny.val(); // "right" ordering int i = ( Nb - 1 ) - ny ; int j = nx; // "wrong" ordering // int i = nx; // int j = ny; FT val = vit->alpha0.val(); //FT val = vit->alpha.val(); al(i,j) = val; } fft.set_f( al ); return; }
void load_fields_on_fft( const Triangulation& T , CH_FFT& fft ) { int Nb = fft.Nx(); size_t align=fft.alignment(); c_array u0x( Nb , Nb , align ); c_array u0y( Nb , Nb , align ); // fully implicit c_array uux( Nb , Nb , align ); c_array uuy( Nb , Nb , align ); for(F_v_it vit=T.vertices_begin(); vit != T.vertices_end(); vit++) { int nx = vit->nx.val(); int ny = vit->ny.val(); // "right" ordering int i = ( Nb - 1 ) - ny ; int j = nx; // "wrong" ordering // int i = nx; // int j = ny; Vector_2 v0 = vit->Uold.val(); u0x(i,j) = v0.x(); u0y(i,j) = v0.y(); // fully implicit //Vector_2 vv = vit->U.val(); //uux(i,j) = vv.x(); //uuy(i,j) = vv.y(); //FT val = vit->alpha.val(); } fft.set_u( u0x , u0y ); // fully implicit // hack force field to store current velocity // fft.set_force( uux , uuy ); return; }
void number(Triangulation& T) { int i=0; for(F_v_it vit=T.vertices_begin(); vit != T.vertices_end(); vit++) { // vit->indx.set(i); //or vit->idx=i; ++i; } return; }
void number(Triangulation& T) { int idx=0; int N=simu.no_of_particles(); int Nb=sqrt(N + 1e-12); FT spacing=LL/FT(Nb+0); FT side=LL-1*spacing; for(F_v_it vit=T.vertices_begin(); vit != T.vertices_end(); vit++) { // vit->indx.set(i); //or vit->idx = idx; FT x = vit->point().x() + side/2.0; FT y = vit->point().y() + side/2.0; int i = rint( FT(Nb) * x / LL );//+ 0.5); int j = rint( FT(Nb) * y / LL );//+ 0.5); // --i; --j; vit->nx = i; vit->ny = j; // cout << idx // << " " << i // << " " << j // << " " << x // << " " << y // << endl; ++idx; } return; }
void clone(const Triangulation& Tfrom,Triangulation& Tto) { for(F_v_it vit=Tfrom.vertices_begin(); vit != Tfrom.vertices_end(); vit++) { Periodic_point pp=Tfrom.periodic_point(vit); Point p=Tfrom.point(pp); Vertex_handle fv=Tto.insert( p ); fv->rold.set( p ); fv->U.set( vit->U.val() ); fv->Uold.set( vit->U.val() ); fv->idx.set( vit->idx.val() ); } return; }
void load_fields_on_fft( const Triangulation& T , CH_FFT& fft ) { int Nb = fft.Nx(); size_t align=fft.alignment(); c_array ux( Nb , Nb , align ); c_array uy( Nb , Nb , align ); for(F_v_it vit=T.vertices_begin(); vit != T.vertices_end(); vit++) { int nx = vit->nx.val(); int ny = vit->ny.val(); // "right" ordering int i = ( Nb - 1 ) - ny ; int j = nx; // "wrong" ordering // int i = nx; // int j = ny; Vector_2 vv = vit->Uold.val(); //FT val = vit->alpha.val(); ux(i,j) = vv.x(); uy(i,j) = vv.y(); } fft.set_u( ux , uy ); return; }