示例#1
0
static int
SparseMatrix_init(SparseMatrix *self, PyObject *args, PyObject *kwds)
{
  int i,nr,nc,nnz;
  PyObject *nzval,*colind,*rowptr;
  if(!PyArg_ParseTuple(args,
                       "iiiOOO",
                       &nr,
                       &nc,
                       &nnz,
                       &nzval,
                       &colind,
                       &rowptr))
    return -1;
  self->dim[0]=nr;
  self->dim[1]=nc;
  self->A.nnz = nnz;
  self->A.nzval = DDATA(nzval);
  self->A.colind = (int_t*)malloc(nnz*sizeof(int_t));
  for (i=0;i<nnz;i++)
    self->A.colind[i] = IDATA(colind)[i];
  self->A.rowptr = (int_t*)malloc((nr+1)*sizeof(int_t));
  for (i=0;i<nr+1;i++)
    self->A.rowptr[i] = IDATA(rowptr)[i];
  SuperMatrix Aprint;
  Aprint.Stype = SLU_NC;
  Aprint.Dtype = SLU_D;
  Aprint.Mtype = SLU_GE;
  Aprint.nrow = nr;
  Aprint.ncol = nc;
  Aprint.Store = &self->A;
  return 0;
}
示例#2
0
static PyObject* ctracking_setNodeOnBoundaryArray(PyObject* self,
						  PyObject* args)
{
  PyObject *exteriorElementBoundariesArray,
    *elementBoundaryNodesArray,
    *nodeOnBoundaryArray;
  if (!PyArg_ParseTuple(args,
			"OOO",
			&exteriorElementBoundariesArray,
			&elementBoundaryNodesArray,
			&nodeOnBoundaryArray))
    return NULL;

  setNodeOnBoundaryArray(SHAPE(exteriorElementBoundariesArray)[0],
			 SHAPE(elementBoundaryNodesArray)[1],
			 IDATA(exteriorElementBoundariesArray),
			 IDATA(elementBoundaryNodesArray),
			 IDATA(nodeOnBoundaryArray));

  Py_INCREF(Py_None); 
  return Py_None;
}
示例#3
0
static PyObject *
lapack_lite_dgelsd(PyObject *NPY_UNUSED(self), PyObject *args)
{
    int lapack_lite_status;
    int m;
    int n;
    int nrhs;
    PyObject *a;
    int lda;
    PyObject *b;
    int ldb;
    PyObject *s;
    double rcond;
    int rank;
    PyObject *work;
    PyObject *iwork;
    int lwork;
    int info;
    TRY(PyArg_ParseTuple(args,"iiiOiOiOdiOiOi",
                         &m,&n,&nrhs,&a,&lda,&b,&ldb,&s,&rcond,
                         &rank,&work,&lwork,&iwork,&info));

    TRY(check_object(a,NPY_DOUBLE,"a","NPY_DOUBLE","dgelsd"));
    TRY(check_object(b,NPY_DOUBLE,"b","NPY_DOUBLE","dgelsd"));
    TRY(check_object(s,NPY_DOUBLE,"s","NPY_DOUBLE","dgelsd"));
    TRY(check_object(work,NPY_DOUBLE,"work","NPY_DOUBLE","dgelsd"));
    TRY(check_object(iwork,NPY_INT,"iwork","NPY_INT","dgelsd"));

    lapack_lite_status =
            FNAME(dgelsd)(&m,&n,&nrhs,DDATA(a),&lda,DDATA(b),&ldb,
                          DDATA(s),&rcond,&rank,DDATA(work),&lwork,
                          IDATA(iwork),&info);
    if (PyErr_Occurred()) {
        return NULL;
    }

    return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:d,s:i,s:i,s:i}","dgelsd_",
                         lapack_lite_status,"m",m,"n",n,"nrhs",nrhs,
                         "lda",lda,"ldb",ldb,"rcond",rcond,"rank",rank,
                         "lwork",lwork,"info",info);
}
static PyObject *calc_grid_values( PyObject *self, PyObject *args )
{
	int i, ok, num_tri, num_vert, ncol, nrow, num_norms, num_grid_val;
	long *volumes; 
	double nodata_val;
    double cell_size;
	double *x, *y;
    double *norms;
	double *result;
	double *grid_val;
	PyObject *pyobj_x;
    PyObject *pyobj_y;
    PyObject *pyobj_norms;
	PyObject *pyobj_volumes;
	PyObject *pyobj_result;
	PyObject *pyobj_grid_val;

	ok = PyArg_ParseTuple( args, "iiddOOOOOO",
				&nrow,
				&ncol,
                &cell_size,
				&nodata_val, 
				&pyobj_x,
                &pyobj_y,
                &pyobj_norms,
				&pyobj_volumes, 
				&pyobj_result,
				&pyobj_grid_val );




	if( !ok ){
		fprintf( stderr, "calc_grid_values: argument parsing error\n" );
		exit(1);
	}

	// get data from python objects
	x = DDATA( pyobj_x );
    y = DDATA( pyobj_y );
    norms    = DDATA( pyobj_norms );
	result	 = DDATA( pyobj_result );
	grid_val = DDATA( pyobj_grid_val );
	volumes  = IDATA( pyobj_volumes );


	num_tri  = ((PyArrayObject*)pyobj_volumes)->dimensions[0];
	num_vert = ((PyArrayObject*)pyobj_x)->dimensions[0];
    num_norms = ((PyArrayObject*)pyobj_norms)->dimensions[0];
    num_grid_val = ((PyArrayObject*)pyobj_grid_val)->dimensions[0];

    //printf("==== %d %d %d %d %d \n",num_norms,num_tri,num_vert,nrow,ncol);

	// init triangle array
	init_norms( x,y, norms, volumes, num_tri );



        //printf("+++ %d\n",nrow*ncol);
	// evaluate grid
	for ( i = 0 ; i < nrow*ncol; i++ ) 
		grid_val[i] = nodata_val;



	_calc_grid_values( x,y, norms, num_vert, volumes, num_tri, \
				    cell_size, nrow, ncol,   	\
				    result, grid_val );


	return Py_BuildValue("");
}
示例#5
0
static PyObject* ctracking_trackPointsC0P1Velocity1d(PyObject* self,
						   PyObject* args)
{
  int nElements_global,
    nNodes_global,
    nNodes_element,
    nElementBoundaries_element,
    nPointsToTrack;

  double dir,
    zeroTolForTracking;

  PyObject *nodeArray,
    *elementNodesArray,
    *elementNeighborsArray,
    *cvelocity_l2g,
    *cvelocity_dof,
    *x_depart_times,
    *x_arrive_times,
    *x_in,
    *x_element,
    *x_out,
    *flag;

  if (!PyArg_ParseTuple(args,
			"iiiiOOOOOdOOidOOOO",
			&nElements_global,
			&nNodes_global,
			&nNodes_element,
			&nElementBoundaries_element,
			&nodeArray,
			&elementNodesArray,
			&elementNeighborsArray,
			&cvelocity_l2g,
			&cvelocity_dof,
			&dir,                   
			&x_depart_times,               
			&x_arrive_times,               
			&nPointsToTrack,        
			&zeroTolForTracking,    
			&x_in,                
			&x_element,           
			&x_out,               
			&flag))    
    return NULL;

  trackPointsC0P1Velocity1d(nElements_global,               //mesh representation
			    nNodes_global,
			    nNodes_element,
			    nElementBoundaries_element,
			    DDATA(nodeArray),
			    IDATA(elementNodesArray),
			    IDATA(elementNeighborsArray), //local boundary id is associated with node across from boundary 
			    IDATA(cvelocity_l2g),
			    DDATA(cvelocity_dof),       //characteristic speed (velocity) representation
			    dir,                        //direction in time
			    DDATA(x_depart_times),      //in  -- time of departure for each point
			    DDATA(x_arrive_times),      //desired stopping time
			    //out -- stopping time for each point 
			    nPointsToTrack,             //number of points to track
			    zeroTolForTracking,         //ignore point if |u| < eps or |v| < eps
			    DDATA(x_in),                //points for tracking (always 3d)
			    IDATA(x_element),           //in -- element where point i is located at tIn
			    //out -- element where point i is located at tOut
			    DDATA(x_out),               //stopping location for point i at tOut
			    IDATA(flag));                        //in: > -2  -- track point
                                                                 //in: -3    -- skip point
                                                                 //out: -1   -- point in interior at tOut
  			                                         //out: -2   -- point exited domain somewhere in (tIn,tOut)
                                                                 //out: -3   -- did not track (e.g.,  or u = 0)
 
  Py_INCREF(Py_None); 
  return Py_None;
}
示例#6
0
static PyObject* ctracking_trackPointsRT0Velocity2dWithTrajectories(PyObject* self,
								    PyObject* args)
{
  int localVelocityRepresentationFlag,
    nElements_global,
    nNodes_global,
    nNodes_element,
    nElementBoundaries_element,
    nPointsToTrack,
    debugLevel;
  
  double dir,
    zeroTolForTracking;

  PyObject *nodeArray,
    *elementNodesArray,
    *elementNeighborsArray,
    *elementBoundariesArray,
    *elementBoundaryBarycentersArray,
    *elementLocalBoundaryOuterNormalsArray,
    *cvelocity_l2g,
    *cvelocity_dof,
    *x_depart_times,
    *x_arrive_times,
    *x_in,
    *x_element,
    *x_out,
    *flag;

  //try to build arrays for trajectories and return
  int n_traj,n_tracked;
  double * x_traj = 0, * t_traj = 0;
  int * e_traj = 0, * offsets_traj = 0;
  debugLevel = 0;
  if (!PyArg_ParseTuple(args,
			"iiiiiOOOOOOOOdOOidOOOO|i",
			&localVelocityRepresentationFlag,
			&nElements_global,
			&nNodes_global,
			&nNodes_element,
			&nElementBoundaries_element,
			&nodeArray,
			&elementNodesArray,
			&elementNeighborsArray,
			&elementBoundariesArray,
			&elementBoundaryBarycentersArray,
			&elementLocalBoundaryOuterNormalsArray,
			&cvelocity_l2g,
			&cvelocity_dof,
			&dir,                   
			&x_depart_times,               
			&x_arrive_times,               
			&nPointsToTrack,        
			&zeroTolForTracking,    
			&x_in,                
			&x_element,           
			&x_out,               
			&flag,
			&debugLevel))    
    return NULL;

  trackPointsRT0Velocity2dWithTrajectories(debugLevel,
					   localVelocityRepresentationFlag,
					   nElements_global,             
					   nNodes_global,
					   nNodes_element,
					   nElementBoundaries_element,
					   DDATA(nodeArray),
					   IDATA(elementNodesArray),
					   IDATA(elementNeighborsArray), 
					   IDATA(elementBoundariesArray),
					   DDATA(elementBoundaryBarycentersArray),
					   DDATA(elementLocalBoundaryOuterNormalsArray),
					   IDATA(cvelocity_l2g),
					   DDATA(cvelocity_dof),       
					   dir,                        
					   DDATA(x_depart_times),      
					   DDATA(x_arrive_times),      
					   nPointsToTrack,             
					   zeroTolForTracking,         
					   DDATA(x_in),                
					   IDATA(x_element),           
					   DDATA(x_out),
					   IDATA(flag),
					   n_traj,
					   n_tracked,
					   offsets_traj,
					   x_traj,
					   t_traj,
					   e_traj);
  npy_intp dim[1],dim2[2]; 
  dim[0] = n_traj;
  PyArrayObject *t_traj_py = (PyArrayObject *)PyArray_SimpleNew(1,dim,PyArray_DOUBLE);
  double* t_ptr = DDATA(t_traj_py);

  dim2[0] = n_traj; dim2[1] = 3;
  PyArrayObject *x_traj_py = (PyArrayObject *)PyArray_SimpleNew(2,dim2,PyArray_DOUBLE);
  double* x_ptr = DDATA(x_traj_py);

  dim[0] = n_traj;
  PyArrayObject *e_traj_py = (PyArrayObject *)PyArray_SimpleNew(1,dim,PyArray_INT);
  int* e_ptr = IDATA(e_traj_py);

  dim[0] = n_tracked+1;
  PyArrayObject *o_traj_py = (PyArrayObject *)PyArray_SimpleNew(1,dim,PyArray_INT);
  int* o_ptr = IDATA(o_traj_py);

  for (int i=0; i < n_traj; i++)
    {
      t_ptr[i] = t_traj[i]; e_ptr[i] = e_traj[i]; 
      for (int j=0; j < 3; j++)
	x_ptr[i*3+j] = x_traj[i*3+j];
    }
  for (int i=0; i < n_tracked+1; i++)
    {
      o_ptr[i] = offsets_traj[i];
    }
  return Py_BuildValue("(O,O,O,O)",PyArray_Return(x_traj_py),PyArray_Return(t_traj_py),PyArray_Return(e_traj_py),PyArray_Return(o_traj_py));

}
示例#7
0
static PyObject* ctracking_trackPointsRT0Velocity2d(PyObject* self,
						    PyObject* args)
{
  int localVelocityRepresentationFlag,
    nElements_global,
    nNodes_global,
    nNodes_element,
    nElementBoundaries_element,
    nPointsToTrack,
    debugLevel;
  
  double dir,
    zeroTolForTracking;

  PyObject *nodeArray,
    *elementNodesArray,
    *elementNeighborsArray,
    *elementBoundariesArray,
    *elementBoundaryBarycentersArray,
    *elementLocalBoundaryOuterNormalsArray,
    *cvelocity_l2g,
    *cvelocity_dof,
    *x_depart_times,
    *x_arrive_times,
    *x_in,
    *x_element,
    *x_out,
    *flag;

  debugLevel = 0;
  if (!PyArg_ParseTuple(args,
			"iiiiiOOOOOOOOdOOidOOOO|i",
			&localVelocityRepresentationFlag,
			&nElements_global,
			&nNodes_global,
			&nNodes_element,
			&nElementBoundaries_element,
			&nodeArray,
			&elementNodesArray,
			&elementNeighborsArray,
			&elementBoundariesArray,
			&elementBoundaryBarycentersArray,
			&elementLocalBoundaryOuterNormalsArray,
			&cvelocity_l2g,
			&cvelocity_dof,
			&dir,                   
			&x_depart_times,               
			&x_arrive_times,               
			&nPointsToTrack,        
			&zeroTolForTracking,    
			&x_in,                
			&x_element,           
			&x_out,               
			&flag,
			&debugLevel))    
    return NULL;

  trackPointsRT0Velocity2d(debugLevel,
			   localVelocityRepresentationFlag,
			   nElements_global,             
			   nNodes_global,
			   nNodes_element,
			   nElementBoundaries_element,
			   DDATA(nodeArray),
			   IDATA(elementNodesArray),
			   IDATA(elementNeighborsArray), 
			   IDATA(elementBoundariesArray),
			   DDATA(elementBoundaryBarycentersArray),
			   DDATA(elementLocalBoundaryOuterNormalsArray),
			   IDATA(cvelocity_l2g),
			   DDATA(cvelocity_dof),       
			   dir,                        
			   DDATA(x_depart_times),      
			   DDATA(x_arrive_times),      
			   nPointsToTrack,             
			   zeroTolForTracking,         
			   DDATA(x_in),                
			   IDATA(x_element),           
			   DDATA(x_out),
			   IDATA(flag));

  Py_INCREF(Py_None); 
  return Py_None;
}
示例#8
0
	TEXT(T_UP,    "<   Go up stairs");
	TEXT(T_DOWN,  ">   Go down stairs");
	TEXT(T_CT,    "^T  Teleport");
	TEXT(T_WAIT,  ".   Wait a moment");
	TEXT(T_E,     "E   Engrave msg on floor");

#define IFLAGS ITEMENABLED|ITEMTEXT|HIGHCOMP
#define IDATA(cmd,str,off) 0,off,WDT,9,IFLAGS,0,(APTR)&str,NULL,cmd,0L,0

/* Commands */

#undef	WDT
#define WDT 184

static struct MenuItem cmdsub[] = {
    { &cmdsub[1], IDATA('?', T_HELP,   0) }, /*   Display help */
    { &cmdsub[2], IDATA('&', T_amp,   10) }, /*   Explain a command */
    { &cmdsub[3], IDATA('O', T_O,     20) }, /*   Set options */
    { &cmdsub[4], IDATA('!', T_SHELL, 30) }, /*   AmigaDos commands */
    { &cmdsub[5], IDATA('v', T_v,     40) }, /*   Version number */
    { &cmdsub[6], IDATA(022, T_CR,    50) }, /*R  Redraw screen */
    { &cmdsub[7], IDATA(020 ,T_CP,    60) }, /*P  Repeat last message */
    { &cmdsub[8], IDATA('Q', T_Q,     70) }, /*   Quit game */
    { NULL,	  IDATA('S', T_S,     80) }, /*   Save the game */
};

/* Inventory */

#undef	WDT
#define WDT 184