int main()
{
  double V0[] = {1,0,0,
		 0,1,0,
		 0,0,0,
		 0,0,1};
  
  std::vector<double> Vertices(V0, V0+12);
  
  Tetrahedron::SetGlobalCoordinatesArray(Vertices);
  Triangle<3>::SetGlobalCoordinatesArray(Vertices);
  Segment<3>::SetGlobalCoordinatesArray(Vertices);
  
  P13DElement<2> Elm(1,2,3,4);

  P13DElementBoundaryTraces<2>
    EBT(Elm, true, false, true, true, P13DTrace<2>::ThreeDofs);

  std::cout<<"\n Number of Traces: "<<EBT.getNumTraceFaces()<<" should be 3. \n";

  for(unsigned int a=0; a<3; a++)  // Change to test different/all traces.
    {
      int facenumber = EBT.getTraceFaceIds()[a];
      std::cout<<" \n FaceNumber :"<<facenumber<<"\n";
      
      std::cout<<"\n Normal to face: ";
      for(unsigned int q=0; q<EBT.getNormal(a).size(); q++)
	std::cout<< EBT.getNormal(a)[q]<<", ";
      std::cout<<"\n";

    }

  for(unsigned int a=0; a<1; a++)
    {
      int facenumber = EBT.getTraceFaceIds()[a];
      std::cout<<"\nFace Number :"<<facenumber<<"\n";
      
      const Element &face = EBT[a];

      // Integration weights:
      std::cout<<"\n Integration weights: \n";
      for(unsigned int q=0; q<face.getIntegrationWeights(0).size(); q++)
	std::cout<<face.getIntegrationWeights(0)[q]<<", ";
    
       // Integration points:
      std::cout<<"\n Integration point coordinates: \n";
      for(unsigned int q=0; q<face.getIntegrationPtCoords(0).size(); q++)
	std::cout<<face.getIntegrationPtCoords(0)[q]<<", ";
      

      // Shape functions:
      std::cout<<"\n Shape Functions at quadrature points: \n";
      for(unsigned int q=0; q<face.getShapes(0).size(); q++)
	std::cout<<face.getShapes(0)[q]<<", ";
      
      std::cout<<"\n";
    }

}
示例#2
0
/* w blob_number identyfikator obiektu binarnego w tabeli tblob */
long db2_bmd_db_export_blob(void *hDB,GenBuf_t *dataGenBuf,char **blob_number)
{

	DB_bmd_db_conn_t *db_conn=NULL;
		long err=0;
	#ifndef BLOB_IN_BYTEA
		long lobj_fd=0,tmp=0;
		Oid lobjId ;
	#else
		char *SQLQuery			= NULL;
		char *c_tmp				= NULL;
		long fetched_counter = 0;
		long rows = 0;
		long cols = 0;
		//Oid in_oid[]={0,17}; /* varchar, bytea */
		char* params[]={NULL,NULL};	//{chunk_size,bobj};
		int params_length[2]={0,0};	//nalezy ustawic rozmiary przynajmniej dla danych nie tekstowych
		//int params_format[2]={0,1}; /* text,binary */
		void *bmd_db_res	= NULL;
		SQLRETURN     rc;
	#endif

		PRINT_INFO("LIBBMDPGINF Exporting file to LO\n");

		if (hDB==NULL)
			return BMD_ERR_PARAM1;
		if (dataGenBuf == NULL)
			{	BMD_FOK(BMD_ERR_PARAM2);	}
		if (blob_number == NULL)
			{	BMD_FOK(BMD_ERR_PARAM3);	}
		if ((*blob_number) != NULL)
			{	BMD_FOK(BMD_ERR_PARAM3);	}
		if( (*((long *)hDB)) != BMD_DBCONN_MAGIC )
			return BMD_ERR_INVALID_PTR;

		db_conn=(DB_bmd_db_conn_t *)hDB;
		if( db_conn->hdbc == NULL )
			return BMD_ERR_NODATA;

		SBT(hDB,db_conn);
		/*
		 * Utworz large object.
		 */
	#ifndef BLOB_IN_BYTEA
		//lobjId = lo_creat(db_conn->pg_conn, INV_READ | INV_WRITE);
		if( lobjId == 0)
		{
			RBT(hDB,db_conn);
			PRINT_ERROR("LIBBMDPGERR Error in creating large object - lo_creat.\n");
			return BMD_ERR_OP_FAILED;
		}

		//lobj_fd = lo_open(db_conn->pg_conn, lobjId, INV_WRITE);
		//if(lobj_fd == -1)
		{
			RBT(hDB,db_conn);
			BMD_FOK(BMD_ERR_OP_FAILED);
		}

		//tmp = lo_write(db_conn->pg_conn, lobj_fd, (char *)dataGenBuf->buf, dataGenBuf->size);
		if(tmp < dataGenBuf->size)
		{
			RBT(hDB,db_conn);
			BMD_FOK(BMD_ERR_OP_FAILED);
		}

		//(void) lo_close(db_conn->pg_conn, lobj_fd);
		asprintf(blob_number, "%li", (long)lobjId);
	#else
		/* pobierz sekwencj� numeru obiektu binarnego lobjId (blob_number)*/
		asprintf(&SQLQuery, "VALUES NEXT VALUE FOR co_raster_id");
		 ;
		if(SQLQuery == NULL) return NO_MEMORY;
		err = db2_bmd_db_execute_sql(	hDB, SQLQuery,
											&rows, &cols, (void **)&bmd_db_res);
		/**if(SQLQuery != NULL) */{ free(SQLQuery); SQLQuery=NULL; }
		if(err<BMD_OK)
		{
			PRINT_ERROR("LIBBMDSQLERR Error in while execute VALUES NEXT VALUE FOR co_raster_id\n");
			db2_bmd_db_rollback_transaction(hDB, NULL);
			if(SQLQuery != NULL) { free(SQLQuery); SQLQuery=NULL; }
			return err;
		}
		err=db2_bmd_db_result_get_value(hDB,(void *)bmd_db_res,0,0,&c_tmp,FETCH_ABSOLUTE,&fetched_counter);
		if(err<BMD_OK)
		{
			PRINT_ERROR("LIBBMDSQLERR Error while getting value\n");
			db2_bmd_db_rollback_transaction(hDB, NULL);
			db2_bmd_db_result_free((void**)&bmd_db_res);
			if(SQLQuery != NULL) { free(SQLQuery); SQLQuery=NULL; }
			return err;
		}
		db2_bmd_db_result_free((void**)&bmd_db_res);
		bmd_db_res = NULL;

		//wlasciwy etap zapisu
		params[0] = (char *)c_tmp;
		params[1] = (char *) dataGenBuf->buf;

		params_length[0] = (int)strlen(c_tmp);
		params_length[1] = dataGenBuf->size;

		db_conn = (DB_bmd_db_conn_t *) hDB;
		SQLCHAR *stmt = ( SQLCHAR * )"INSERT INTO tblob(fk_co_raster_id,bobj) VALUES (?, ?)";
				//sizeof(params)/sizeof(params[0]),
				//in_oid, (const char *const * )params, (const int*)params_length,
				//(const int*)params_format, 1

		rc = SQLAllocHandle(SQL_HANDLE_STMT, *(db_conn->hdbc), db_conn->hstmt);
			if (rc != SQL_SUCCESS)
			{
				PRINT_ERROR("Error while esec sql query: INSERT INTO tblob...\n");
				extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT);
				db2_bmd_db_rollback_transaction(hDB, NULL);
				return BMD_DB_EXECUTION_ERROR;
			}

		rc = SQLBindParameter(*(db_conn->hstmt), 1, SQL_PARAM_INPUT, SQL_C_CHAR,
		                             SQL_VARCHAR, params_length[0], 0, params[0], params_length[0], NULL);
		if (rc != SQL_SUCCESS)
					{
						PRINT_ERROR(">--- Error while SQLBindParameter, (SQL_VARCHAR)\n");
						extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT);
						db2_bmd_db_rollback_transaction(hDB, NULL);
						return BMD_DB_EXECUTION_ERROR;
					}
		rc = SQLBindParameter(*(db_conn->hstmt), 2, SQL_PARAM_INPUT, SQL_C_BINARY,
					SQL_BLOB, params_length[1], 0, params[1], params_length[1], NULL);
		if (rc != SQL_SUCCESS)
					{
						PRINT_ERROR(">--- Error while SQLBindParameter, (SQL_BLOB)\n");
						extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT);
						db2_bmd_db_rollback_transaction(hDB, NULL);
						return BMD_DB_EXECUTION_ERROR;
					}
		rc = SQLExecDirect(*(db_conn->hstmt), stmt, SQL_NTS);
		if (rc != SQL_SUCCESS)
					{
						PRINT_ERROR("Driver reported the following diagnostics: ");
						extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT);
						db2_bmd_db_rollback_transaction(hDB, NULL);
						return BMD_DB_EXECUTION_ERROR;
					}

		*blob_number = c_tmp;
		c_tmp = NULL;	//przekazywane na zewnatrz funkcji
		params[0] = NULL;
		if (rc == SQL_SUCCESS)

		{
			/* success */
			err = BMD_OK;
		}
		else
		{
			PRINT_ERROR("LIBBMDPINFO DBresultStatus(pq_db_res)\n");
			db2_bmd_db_rollback_transaction(hDB, NULL);
			BMD_FOK(BMD_ERR_NODATA);
		}

	#endif
		EBT(hDB,db_conn);

		return err;

}