예제 #1
0
int test_Matrix::serialtest2()
{
  testData* testdata = new testData(localProc_, numProcs_);
  std::vector<int>& idTypes = testdata->idTypes;
  std::vector<int>& ids = testdata->ids;

  fei::SharedPtr<fei::VectorSpace> vspc(new fei::VectorSpace(comm_, "sU_Mat"));

  vspc->defineIDTypes(idTypes.size(), &idTypes[0]);

  fei::SharedPtr<fei::MatrixGraph> matgraph(new fei::MatrixGraph_Impl2(vspc, vspc, "sU_Mat"));

  int numIDs = ids.size();
  int idType = idTypes[0];

  int patternID = matgraph->definePattern(numIDs, idType);

  CHK_ERR( matgraph->initConnectivityBlock(0, 1, patternID) );

  CHK_ERR( matgraph->initConnectivity(0, 0, &ids[0]) );

  CHK_ERR( matgraph->initComplete() );

  fei::SharedPtr<fei::FillableMat> ssmat(new fei::FillableMat), ssmatT(new fei::FillableMat);
  int localsize = matgraph->getRowSpace()->getNumIndices_Owned();
  fei::Matrix* matrix = new fei::Matrix_Impl<fei::FillableMat>(ssmat, matgraph, localsize);

  fei::Matrix* matrixT = new fei::Matrix_Impl<fei::FillableMat>(ssmatT, matgraph, localsize);

  std::vector<int> indices(numIDs);
  CHK_ERR( matgraph->getConnectivityIndices(0, 0, numIDs, &indices[0], numIDs) );

  std::vector<double> data1(numIDs*numIDs);
  std::vector<double*> data2d(numIDs);

  int i;
  for(i=0; i<numIDs; ++i) {
    data2d[i] = &(data1[i*numIDs]);
  }

  for(i=0; i<numIDs*numIDs; ++i) {
    data1[i] = 1.0*i;
  }

  CHK_ERR( matrix->sumIn(numIDs, &indices[0],
			 numIDs, &indices[0], &data2d[0], 0) );

  CHK_ERR( matrixT->sumIn(numIDs, &indices[0],
			 numIDs, &indices[0], &data2d[0], 3) );

  if (*ssmat != *ssmatT) {
    ERReturn(-1);
  }

  delete matrix;
  delete matrixT;
  delete testdata;

  return(0);
}
예제 #2
0
Interactor* Builder::PannerPositionControls () {
    Tray* t = new Tray;
    Interactor* pannerLabel = PannerLabel();

    t->HBox(t, pannerLabel);
    t->HBox(t, hspc(2), topleft, hspc(), topright, new HGlue, t);
    t->HBox(t, hspc(2), bottomleft, hspc(), bottomright, new HGlue, t);
    t->Align(Left, topleft, bottomleft);
    t->Align(Left, topright, bottomright);

    t->VBox(t, pannerLabel, vspc(), topleft, vspc(), bottomleft, t);
    t->Align(VertCenter, topleft, topright);
    t->Align(VertCenter, bottomleft, bottomright);
    
    return t;
}
예제 #3
0
Interactor* Builder::ScrollerPositionControls () {
    Tray* t = new Tray;
    Interactor* scrollerLabel = ScrollerLabel();
    Interactor* hscrollerPositions = HScrollerPositions();
    Interactor* vscrollerPositions = VScrollerPositions();
    
    t->HBox(t, scrollerLabel);
    t->HBox(t, hspc(2), horizontal, hspc(2), hscrollerPositions, new HGlue, t);
    t->HBox(t, hspc(2), vertical, hspc(2), vscrollerPositions, new HGlue, t);
    t->Align(Left, horizontal, vertical);
    t->Align(Left, hscrollerPositions, vscrollerPositions);

    t->VBox(t, scrollerLabel, vspc(), horizontal, vspc(), vertical, t);
    t->Align(VertCenter, horizontal, hscrollerPositions);
    t->Align(VertCenter, vertical, vscrollerPositions);
    
    return t;
}
예제 #4
0
Interactor* Builder::TypeSizeControls () {
    Tray* t = new Tray;
    Interactor* typeLabel = TypeLabel();
    Interactor* types = Types();
    Interactor* sizeLabel = SizeLabel();
    Interactor* sizes = Sizes();
    
    t->HBox(t, typeLabel, hgap(), types, new HGlue, t);
    t->HBox(t, sizeLabel, hgap(), sizes, new HGlue, t);
    t->Align(Left, types, sizes);

    t->VBox(t, typeLabel, vspc(), sizeLabel, t);
    t->Align(VertCenter, typeLabel, types);
    t->Align(VertCenter, sizeLabel, sizes);

    return t;
}
예제 #5
0
int test_Matrix::serialtest3()
{
  testData* testdata = new testData(localProc_, numProcs_);
  std::vector<int>& fieldIDs = testdata->fieldIDs;
  std::vector<int>& fieldSizes = testdata->fieldSizes;
  std::vector<int>& idTypes = testdata->idTypes;
  std::vector<int>& ids = testdata->ids;

  fei::SharedPtr<fei::VectorSpace> vspc(new fei::VectorSpace(comm_, "sU_Mat3"));

  vspc->defineFields(fieldIDs.size(), &fieldIDs[0], &fieldSizes[0]);

  vspc->defineIDTypes(idTypes.size(), &idTypes[0]);

  fei::SharedPtr<fei::MatrixGraph>
    matgraph(new fei::MatrixGraph_Impl2(vspc, vspc, "sU_Mat3"));

  int numIDs = ids.size();
  int fieldID = fieldIDs[0];
  int idType = idTypes[0];

  int patternID = matgraph->definePattern(numIDs, idType, fieldID);

  CHK_ERR( matgraph->initConnectivityBlock(0, 1, patternID) );

  CHK_ERR( matgraph->initConnectivity(0, 0, &ids[0]) );

  //set up a slave constraint that defines id 2, field 0 to be equal to
  //id 1, field 0.
  int offsetOfSlave = 1;
  int offsetIntoSlaveField = 0;
  std::vector<double> weights(2);
  weights[0] = 1.0;
  weights[1] = -1.0;
  double rhsValue = 0.0;
  std::vector<int> cr_idtypes(2, idTypes[0]);
  std::vector<int> cr_fieldIDs(2, fieldIDs[0]);

  CHK_ERR( matgraph->initSlaveConstraint(2, //numIDs
					&cr_idtypes[0],
					&ids[1],
					&cr_fieldIDs[0],
					offsetOfSlave,
					offsetIntoSlaveField,
					&weights[0],
					rhsValue) );

  CHK_ERR( matgraph->initComplete() );

  fei::SharedPtr<fei::FillableMat> ssmat(new fei::FillableMat);
  int localsize = matgraph->getRowSpace()->getNumIndices_Owned();
  localsize -= 1;//subtract the slave
  fei::Matrix* matrix = new fei::Matrix_Impl<fei::FillableMat>(ssmat, matgraph, localsize);

  if (matrix == NULL) {
    ERReturn(-1);
  }

  std::vector<int> indices(numIDs);
  CHK_ERR( matgraph->getConnectivityIndices(0, 0, numIDs,
					   &indices[0], numIDs) );

  std::vector<double> data1(numIDs*numIDs);
  std::vector<double*> data2d(numIDs);

  int i;
  for(i=0; i<numIDs; ++i) {
    data2d[i] = &(data1[i*numIDs]);
  }

  for(i=0; i<numIDs*numIDs; ++i) {
    data1[i] = 1.0*i;
  }

  CHK_ERR( matrix->sumIn(numIDs, &indices[0],
			 numIDs, &indices[0], &data2d[0], 0) );

  CHK_ERR( matrix->sumIn(0, 0, &data2d[0], 0) );

  delete matrix;
  delete testdata;

  return(0);
}