SPINS User Guide: Difference between revisions

From Fluids Wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
Line 23: Line 23:
== Examples of common operations ==
== Examples of common operations ==


== Outputting the grid ==
=== Outputting the grid ===


At the top of your file include the global tensor indices:
At the top of your file include the global tensor indices:
Line 48: Line 48:
</syntaxhighlight>
</syntaxhighlight>


== Energy diagnostic ==
=== Energy diagnostic ===
If you're on a periodic grid, use this for kinetic energy diagnostic
If you're on a periodic grid, use this for kinetic energy diagnostic


Line 65: Line 65:
                   (pow(u(ii,jj,kk),2)+pow(v(ii,jj,kk),2)+pow(w(ii,jj,kk),2))));
                   (pow(u(ii,jj,kk),2)+pow(v(ii,jj,kk),2)+pow(w(ii,jj,kk),2))));
</syntaxhighlight>
</syntaxhighlight>
=== Initialising velocities ===
ToDo: More here!!

Revision as of 09:57, 12 July 2012

Welcome to the SPINS case setup page.


Getting SPINS and compiling

(Chris: Can we put it on GitHub or make a new repo?)

SPINS consists of a bunch of C++ source files, a case file, and it requires four libraries. UMFPack, AMD and Blitz++ are supplied with SPINS, and it uses the system-installed FFTW.

Directory structure:

  • cpp/src - SPINS source files
  • cpp/src/cases - a few dozen example case files
  • cpp/AMD - AMD library
  • cpp/UMFPack - UMFPack library
  • cpp/UFconfig - Helper for compiling AMD/UMFPack

To compile, first ....

The basics

The SPINS model is a Navier-Stokes solver that gets parameters and initial/boundary conditions from calls to user-provided routines. The user-provided routines are encapsulated in the class BaseCase (see BaseCase.hpp).

Creating your own custom configuration involves building a derived class based on BaseCase. The case file cases/doc_minimal.cpp shows the structure of a case file. It makes sense to start with another similar case file and customise it.

Examples of common operations

Outputting the grid

At the top of your file include the global tensor indices:

// Tensor variables for indexing
blitz::firstIndex ii;
blitz::secondIndex jj;
blitz::thirdIndex kk;

Create array tmp and generate the grid, then write the array and the grid reader out:

tmp = xx(ii) + 0*jj + 0*kk;
write_array(tmp,"xgrid");
write_reader(tmp,"xgrid",false);

tmp = 0*ii + yy(jj) + 0*kk;
write_array(tmp,"ygrid");
write_reader(tmp,"ygrid",false);

tmp = 0*ii + 0*jj + zz(kk);
write_array(tmp,"zgrid");
write_reader(tmp,"zgrid",false);

Energy diagnostic

If you're on a periodic grid, use this for kinetic energy diagnostic

double ke = 0.5*rho_0*pssum(sum(u*u+v*v+w*w))/(Nx*Ny*Nz)*Lx*Ly*Lz; // KE
if (master()) {
  FILE * en_record = fopen("energy_record.txt","a");
  assert(en_record);
  fprintf(en_record,"%.8f %.14g %.14g %.14g\n",time,keh,kev,pe);
  fclose(en_record);
}

and if you're on a mapped chebyshev grid, you can use this for the KE computation

double ke = pssum(sum((*get_quad_x())(ii)*(*get_quad_y())(jj)*(*get_quad_z())(kk)*
                  (pow(u(ii,jj,kk),2)+pow(v(ii,jj,kk),2)+pow(w(ii,jj,kk),2))));

Initialising velocities

ToDo: More here!!