int test_LinearSystem::test2()
{
#ifdef HAVE_FEI_AZTECOO
  fei::SharedPtr<testData> testdata(new testData(localProc_, numProcs_));
  std::vector<int>& fieldIDs = testdata->fieldIDs;
  std::vector<int>& idTypes = testdata->idTypes;
  std::vector<int>& ids = testdata->ids;

  fei::SharedPtr<LinearSystemCore> az_lsc(new fei_trilinos::Aztec_LinSysCore(comm_));

  char* param = new char[64];
  sprintf(param,"debugOutput .");

  CHK_ERR( az_lsc->parameters(1, &param) );
  delete [] param;

  fei::SharedPtr<fei::Factory> factory(new snl_fei::Factory(comm_, az_lsc));

  fei::SharedPtr<fei::VectorSpace> vectorSpacePtr =
    test_VectorSpace::create_VectorSpace(comm_,
					 testdata.get(), localProc_, numProcs_,
					 false, false, "U_LS2", factory);

  fei::SharedPtr<fei::MatrixGraph> matrixGraphPtr =
    test_MatrixGraph::create_MatrixGraph(testdata.get(), localProc_, numProcs_,
					 false, false, "U_LS2", vectorSpacePtr,
					 factory, path_);

  std::vector<int> crIDTypes(2);
  std::vector<int> crFieldIDs(2);
  crIDTypes[0] = idTypes[0]; crIDTypes[1] = idTypes[0];
  crFieldIDs[0] = fieldIDs[0]; crFieldIDs[1] = fieldIDs[0];

  CHK_ERR( matrixGraphPtr->initLagrangeConstraint(0, idTypes[1],
						  2, //numIDs
						  &crIDTypes[0],
						  &(ids[1]),
						  &crFieldIDs[0]) );

  CHK_ERR( matrixGraphPtr->initComplete() );

  fei::SharedPtr<fei::Vector> vec_lsc = factory->createVector(vectorSpacePtr);

  fei::SharedPtr<fei::Vector> vec_lsc2 = factory->createVector(vectorSpacePtr, true);

  fei::SharedPtr<fei::Matrix> mat_lsc = factory->createMatrix(matrixGraphPtr);

  fei::SharedPtr<fei::LinearSystem> linsys = factory->createLinearSystem(matrixGraphPtr);
  linsys->setMatrix(mat_lsc);
  linsys->setSolutionVector(vec_lsc2);
  linsys->setRHS(vec_lsc);

  int blockID=0;
  int numIndices = matrixGraphPtr->getConnectivityNumIndices(blockID);

  std::vector<int> indicesArray(numIndices);
  int* indicesPtr = &indicesArray[0];

  int checkNumIndices = 0;
  CHK_ERR( matrixGraphPtr->getConnectivityIndices(blockID, 0,
					     numIndices, indicesPtr,
					     checkNumIndices) );

  std::vector<double> data(ids.size(), 1.0);
  double* dptr = &data[0];
  std::vector<double*> coefPtrs(ids.size());
  std::vector<double> crdata(2);
  crdata[0] = 1.0;
  crdata[1] = -1.0;

  for(unsigned ii=0; ii<ids.size(); ++ii) coefPtrs[ii] = dptr;

  CHK_ERR( mat_lsc->sumIn(numIndices, indicesPtr, numIndices, indicesPtr,
			  &coefPtrs[0]) );

  CHK_ERR( vec_lsc->sumInFieldData(fieldIDs[0], idTypes[0],
				    ids.size(), &ids[0],
				    &data[0]) );

  CHK_ERR( linsys->loadLagrangeConstraint(0, &crdata[0], 0.0) );

  CHK_ERR( mat_lsc->gatherFromOverlap() );

  CHK_ERR( az_lsc->matrixLoadComplete() );

   CHK_ERR( linsys->loadComplete() );

  std::vector<int> crindices;
  linsys->getConstrainedEqns(crindices);
  if (crindices.size() != 2) {
    ERReturn(-7);
  }

  CHK_ERR( az_lsc->writeSystem("U_LS2") );

  MPI_Barrier(comm_);
#endif

  return(0);
}
Example #2
0
int main(int argc, char const *argv[])
{
	int num;
	int data,pos;
	bool flag = FALSE;
	DLinkList pnode;
	DLinkList list = createlist(0);
	while(flag == FALSE)
	{
		printf("Main Menu\n");
		printf("1. Insert\n");
		printf("2. Delete Node\n");
		printf("3. Find\n");
		printf("4. Length\n");
		printf("5. Positive print\n");
		printf("6. Negative print\n");
		printf("7. Delete list\n");
		printf("8. Insert data where are you hope\n");
		scanf("%d",&num);
		switch(num)
		{
			case 1: printf("Input the data to Insert:\n");
				scanf("%d",&data);
				list = create(list,data);
				printlist(list);
				printf("\n");break;
			case 2: printf("Input the data to Delete:\n");
				scanf("%d",&data);
				deletenode(list,data);
				printlist(list);
				printf("\n");break;
			case 3: printf("Input the data to Find:\n");
				scanf("%d",&data);
				pnode = findnode(list,data);
				if (NULL != pnode)
				{
					printf("find succeed! position is %d\n",pnode->data);
					printf("\n");
				}
				else{
					printf("Find failed\n");
					printf("\n");
				}
				break;
			case 4: printf("The list's length is %d\n",getlength(list));
				printf("\n");break;
			case 5: printlist(list);
				//printf("\n");
				break;
			case 6: reverprint(list);
				printf("\n");break;
			case 7: deletelist(list);
				printf("\n");break;
			case 8:  printf("Input the data to Insert:\n");
				scanf("%d,%d",&pos,&data);
				list = crdata(list,pos,data);
				printlist(list);
				printf("\n");break;
			case 0: deletelist(list);
				flag = TRUE;
		}
	}
	return 0;
}