// ex1.C - sample Prometheus program
//
#undef __FUNC__
#define __FUNC__ "main"
int main( int argc, char **args )
{
int ierr,  nstep=1, niter=0;
int numnd, numel, nena, nen1a, nndf, *edges=0, *eq_id=0, minc=4;
int npLoc, npGst,*pnode_fnode=0,* proc_gnode=0,*ghost_gnode=0, *ghost_proc=0;
Mat A;
Vec x,b;
Scalar energy, *coord=0;

EPIMETHEUS *epimetheus = new EPIMETHEUS( &argc, &args, 0, 0 );    CHKNEW(epimetheus,1);
ierr = epimetheus->InitParameters();                                                                 CHKERRA(ierr);
int mype = CONTEXT::myproc, np = CONTEXT::numprocs;

// setup application data ... (eg, "coord", "edges", etc. as specified in the users guide)

// local data
 ierr = epimetheus->PromInitLocal( coord, numnd, nndf, edges, numel, nena, nen1a, 1, 4, eq_id);
CHKERRA(ierr);

// global data
ierr = epimetheus->PromInitGlobal( npLoc, npGst, proc_gnode, ghost_gnode, ghost_proc ); CHKERRA(ierr);

// free arrays allocated in setup data ...

 // make one coarse grid
ierr = epimetheus->PromBuildGrids( 1 );                                                         CHKERRA(ierr);

// get stiffness matrix and add data to it ...
ierr = epimetheus->GetA( &A );                                                                       CHKERRA(ierr);
// get RHS and add data to it
ierr = epimetheus->Getb( &b );                                                                          CHKERRA(ierr);

// solve Ax=b
ierr = epimetheus->PreSolve( nstep, niter );                                                   CHKERRA(ierr);
ierr = epimetheus->Solve( niter, &energy );                                                   CHKERRA(ierr);

// look at answere
ierr = epimetheus->Getx( &x );                                                                          CHKERRA(ierr);

// clean up
delete epimetheus; CONTEXT::numnews--;

return 0;

}