FLA_Error FLA_Cont_with_1xmode3_to_1xmode2_check( FLA_Obj *AT,  FLA_Obj A0,
                                                                FLA_Obj A1,
                                                  FLA_Obj *AB,  FLA_Obj A2,
                                                                dim_t mode, FLA_Side side )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( AT );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( AB );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( A0 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( A1 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( A2 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_topbottom_side( side );
  FLA_Check_error_code( e_val );

  // Needed: check for adjacency, similar to those in FLA_Merge_*().

  return FLA_SUCCESS;
}
FLA_Error FLASH_Obj_blocksizes_check( FLA_Obj H, dim_t* b_m, dim_t* b_n )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( b_m );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( b_n );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Trsm_internal_check( FLA_Side side, FLA_Uplo uplo, FLA_Trans transa, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B, fla_trsm_t* cntl )
{
	FLA_Error e_val;

	// Abort if the control structure is NULL.
	e_val = FLA_Check_null_pointer( ( void* ) cntl );
	FLA_Check_error_code( e_val );

	// Verify that the object element types are identical.
	e_val = FLA_Check_identical_object_elemtype( A, B );
	FLA_Check_error_code( e_val );

	// Verify conformality between all the objects. This check works regardless
	// of whether the element type is FLA_MATRIX or FLA_SCALAR because the
	// element length and width are used instead of scalar length and width.
	if ( side == FLA_LEFT )
	{
		//e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B );
		//FLA_Check_error_code( e_val );
		e_val = FLA_Check_object_length_equals( A, FLA_Obj_length( B ) );
		FLA_Check_error_code( e_val );
	}
	else
	{
		e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B );
		FLA_Check_error_code( e_val );
	}

	return FLA_SUCCESS;
}
FLA_Error FLA_QR_UT_copy_internal_check( FLA_Obj A, FLA_Obj T, FLA_Obj U, fla_qrut_t* cntl )
{
	FLA_Error e_val;

	// Abort if the control structure is NULL.
	e_val = FLA_Check_null_pointer( ( void* ) cntl );
	FLA_Check_error_code( e_val );

	// Verify that the object element types are identical.
	e_val = FLA_Check_identical_object_elemtype( A, T );
	FLA_Check_error_code( e_val );

	e_val = FLA_Check_identical_object_elemtype( A, U );
	FLA_Check_error_code( e_val );

	// Verify conformality between all the objects. This check works regardless
	// of whether the element type is FLA_MATRIX or FLA_SCALAR because the
	// element length and width are used instead of scalar length and width.
	e_val = FLA_Check_object_width_equals( T, FLA_Obj_width( A ) );
	FLA_Check_error_code( e_val );

	e_val = FLA_Check_conformal_dims( FLA_NO_TRANSPOSE, A, U );
	FLA_Check_error_code( e_val );

	return FLA_SUCCESS;
}
FLA_Error FLA_Herk_internal_check( FLA_Uplo uplo, FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj beta, FLA_Obj C, fla_herk_t* cntl )
{
	FLA_Error e_val;

	// Abort if the control structure is NULL.
	e_val = FLA_Check_null_pointer( ( void* ) cntl );
	FLA_Check_error_code( e_val );

	// Verify that the object element types are identical.
	e_val = FLA_Check_identical_object_elemtype( A, C );
	FLA_Check_error_code( e_val );

	// Verify conformality between all the objects. This check works regardless
	// of whether the element type is FLA_MATRIX or FLA_SCALAR because the
	// element length and width are used instead of scalar length and width.
	if ( trans == FLA_NO_TRANSPOSE )
	{
		e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C );
		FLA_Check_error_code( e_val );
	}
	else
	{
		e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C );
		FLA_Check_error_code( e_val );
	}

	return FLA_SUCCESS;
}
FLA_Error FLA_Obj_datatype_check( FLA_Obj obj )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( obj.base );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLASH_Obj_free_without_buffer_check( FLA_Obj* H )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( H );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLASH_Obj_create_flat_copy_of_hier_check( FLA_Obj H, FLA_Obj* F )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( F );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLASH_Obj_attach_buffer_hierarchy_check( FLA_Obj F, FLA_Obj* H )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( H );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLASH_Obj_create_hier_copy_of_flat_ext_check( FLA_Obj F, dim_t depth, dim_t* b_m, dim_t* b_n, FLA_Obj* H )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( b_m );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( b_n );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( H );
  FLA_Check_error_code( e_val );

  // A value of depth < 0 should cause an error.

  // First depth entries in blocksize should be checked; values < 1 should cause error.

  return FLA_SUCCESS;
}
FLA_Error FLA_Scal_internal_check( FLA_Obj alpha, FLA_Obj A, fla_scal_t* cntl )
{
	FLA_Error e_val;

	// Abort if the control structure is NULL.
	e_val = FLA_Check_null_pointer( ( void* ) cntl );
	FLA_Check_error_code( e_val );

	return FLA_SUCCESS;
}
FLA_Error FLA_Trinv_internal_check( FLA_Uplo uplo, FLA_Diag diag, FLA_Obj A, fla_trinv_t* cntl )
{
	FLA_Error e_val;

	// Abort if the control structure is NULL.
	e_val = FLA_Check_null_pointer( ( void* ) cntl );
	FLA_Check_error_code( e_val );

	return FLA_SUCCESS;
}
FLA_Error FLA_Apply_CAQ2_UT_internal_check( FLA_Side side, FLA_Trans trans, FLA_Direct direct, FLA_Store storev, FLA_Obj D, FLA_Obj T, FLA_Obj W, FLA_Obj C, FLA_Obj E, fla_apcaq2ut_t* cntl )
{
	FLA_Error e_val;

	// Abort if the control structure is NULL.
	e_val = FLA_Check_null_pointer( ( void* ) cntl );
	FLA_Check_error_code( e_val );

	// Verify that the object element types are identical.
	e_val = FLA_Check_identical_object_elemtype( D, T );
	FLA_Check_error_code( e_val );

	e_val = FLA_Check_identical_object_elemtype( D, W );
	FLA_Check_error_code( e_val );

	e_val = FLA_Check_identical_object_elemtype( D, C );
	FLA_Check_error_code( e_val );

	e_val = FLA_Check_identical_object_elemtype( D, E );
	FLA_Check_error_code( e_val );

	// Verify conformality between all the objects.
	if ( side == FLA_LEFT )
	{
		if ( FLA_Obj_elemtype( D ) == FLA_MATRIX )
		{
			e_val = FLA_Check_conformal_dims( FLA_NO_TRANSPOSE, D, T );
			FLA_Check_error_code( e_val );

			e_val = FLA_Check_conformal_dims( FLA_NO_TRANSPOSE, C, W );
			FLA_Check_error_code( e_val );
		}
		else // if ( FLA_Obj_elemtype( D ) == FLA_SCALAR )
		{
			//e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, E, C, D );
			//FLA_Check_error_code( e_val );

			e_val = FLA_Check_object_width_equals( C, FLA_Obj_width( E ) );
			FLA_Check_error_code( e_val );

			e_val = FLA_Check_object_length_equals( D, FLA_Obj_length( E ) );
			FLA_Check_error_code( e_val );
		}

		//e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, D, C, E );
		//FLA_Check_error_code( e_val );

	}
	else
	{
		FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
	}

	return FLA_SUCCESS;
}
Exemple #14
0
FLA_Error FLA_Obj_flip_base( FLA_Obj *obj )
{
  FLA_Error e_val;
  dim_t temp;

  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
  {
    e_val = FLA_Check_null_pointer( obj );
    FLA_Check_error_code( e_val );
    
    e_val = FLA_Check_null_pointer( obj->base );
    FLA_Check_error_code( e_val );
  }

  exchange( obj->base->m,       obj->base->n,       temp );
  exchange( obj->base->cs,      obj->base->rs,      temp );
  exchange( obj->base->m_inner, obj->base->n_inner, temp );
  exchange( obj->base->m_index, obj->base->n_index, temp );

  return FLA_SUCCESS;
}
FLA_Error FLA_Obj_create_buffer_check( dim_t rs, dim_t cs, FLA_Obj *obj )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( obj );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_matrix_strides( FLA_Obj_length( *obj ), FLA_Obj_width( *obj ), rs, cs );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Obj_create_without_buffer_check( FLA_Datatype datatype, dim_t m, dim_t n, FLA_Obj *obj )
{
  FLA_Error e_val;

  e_val = FLA_Check_valid_datatype( datatype );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( obj );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Repart_1xmode2_to_1xmode3_check( FLA_Obj AT,  FLA_Obj *A0,
                                                            FLA_Obj *A1,
                                               FLA_Obj AB,  FLA_Obj *A2,
                                               dim_t mode,  dim_t    b,  FLA_Side side )
{
  FLA_Error e_val;

  e_val = FLA_Check_valid_object_datatype( AT );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( AB );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A0 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A1 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A2 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_topbottom_side( side );
  FLA_Check_error_code( e_val );

  if      ( side == FLA_TOP )
  {
    e_val = FLA_Check_attempted_repart_1xmode2( AT, mode, b );
    FLA_Check_error_code( e_val );
  }
  else if ( side == FLA_BOTTOM )
  {
    e_val = FLA_Check_attempted_repart_1xmode2( AB, mode, b );
    FLA_Check_error_code( e_val );
  }

  // Needed: check for adjacency, similar to those in FLA_Merge_*().

  return FLA_SUCCESS;
}
FLA_Error FLA_Apply_Q_UT_internal_check( FLA_Side side, FLA_Trans trans, FLA_Direct direct, FLA_Store storev, FLA_Obj A, FLA_Obj T, FLA_Obj W, FLA_Obj B, fla_apqut_t* cntl )
{
	FLA_Error e_val;

	// Abort if the control structure is NULL.
	e_val = FLA_Check_null_pointer( ( void* ) cntl );
	FLA_Check_error_code( e_val );

	// Verify that the object element types are identical.
	e_val = FLA_Check_identical_object_elemtype( A, T );
	FLA_Check_error_code( e_val );

	e_val = FLA_Check_identical_object_elemtype( A, W );
	FLA_Check_error_code( e_val );

	e_val = FLA_Check_identical_object_elemtype( A, B );
	FLA_Check_error_code( e_val );

	// Verify conformality between all the objects. This check works regardless
	// of whether the element type is FLA_MATRIX or FLA_SCALAR because the
	// element length and width are used instead of scalar length and width.
	if ( side == FLA_LEFT )
	{
		if ( storev == FLA_COLUMNWISE )
		{
			e_val = FLA_Check_object_length_equals( A, FLA_Obj_length( B ) );
			FLA_Check_error_code( e_val );
		}
		else // if ( storev == FLA_ROWWISE )
		{
			e_val = FLA_Check_object_width_equals( A, FLA_Obj_length( B ) );
			FLA_Check_error_code( e_val );
		}
	}
	else // if ( side == FLA_RIGHT )
	{
		if ( storev == FLA_COLUMNWISE )
		{
			e_val = FLA_Check_object_length_equals( A, FLA_Obj_width( B ) );
			FLA_Check_error_code( e_val );
		}
		else // if ( storev == FLA_ROWWISE )
		{
			e_val = FLA_Check_object_width_equals( A, FLA_Obj_width( B ) );
			FLA_Check_error_code( e_val );
		}
	}

	return FLA_SUCCESS;
}
FLA_Error FLA_Obj_create_conf_to_check( FLA_Trans trans, FLA_Obj obj_old, FLA_Obj *obj )
{
  FLA_Error e_val;

  e_val = FLA_Check_valid_trans( trans );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( obj_old );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( obj );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Obj_datatype_proj_to_real_check( FLA_Obj obj )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( obj.base );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_floating_object( obj );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_nonconstant_object( obj );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Obj_fshow_check( FILE* file, char* s1, FLA_Obj obj, char* format, char* s2 )
{
  FLA_Error e_val;

  e_val = FLA_Check_null_pointer( file );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( s1 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_object_scalar_elemtype( obj );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( obj );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( format );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( s2 );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Obj_extract_real_scalar_check( FLA_Obj alpha, double* alpha_value )
{
  FLA_Error e_val;

  e_val = FLA_Check_real_object( alpha );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_if_scalar( alpha );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( alpha_value );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Axpy_buffer_to_object_check( FLA_Trans trans, FLA_Obj alpha, dim_t m, dim_t n, void* A_buffer, dim_t rs, dim_t cs, dim_t i, dim_t j, FLA_Obj B )
{
  FLA_Error e_val;

  e_val = FLA_Check_valid_real_trans( trans );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_floating_object( B );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_nonconstant_object( B );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_consistent_object_datatype( B, alpha );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_if_scalar( alpha );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A_buffer );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_object_dims( trans, m, n, B );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_matrix_strides( m, n, rs, cs );
  FLA_Check_error_code( e_val );

  if ( trans == FLA_NO_TRANSPOSE )
  {
    e_val = FLA_Check_submatrix_dims_and_offset( m, n, i, j, B );
    FLA_Check_error_code( e_val );
  }
  else
  {
    e_val = FLA_Check_submatrix_dims_and_offset( n, m, i, j, B );
    FLA_Check_error_code( e_val );
  }

  e_val = FLA_Check_nonconstant_object( B );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Copyt_internal_check( FLA_Trans trans, FLA_Obj A, FLA_Obj B, fla_copyt_t* cntl )
{
	FLA_Error e_val;

	// Abort if the control structure is NULL.
	e_val = FLA_Check_null_pointer( ( void* ) cntl );
	FLA_Check_error_code( e_val );

	// Verify that the object element types are identical.
	e_val = FLA_Check_identical_object_elemtype( A, B );
	FLA_Check_error_code( e_val );

	// Verify conformality between all the objects. This check works regardless
	// of whether the element type is FLA_MATRIX or FLA_SCALAR because the
	// element length and width are used instead of scalar length and width.
	e_val = FLA_Check_conformal_dims( trans, A, B );
	FLA_Check_error_code( e_val );

	return FLA_SUCCESS;
}
FLA_Error FLA_Copy_object_to_buffer_check( FLA_Trans trans, dim_t i, dim_t j, FLA_Obj A, dim_t m, dim_t n, void* B_buffer, dim_t rs, dim_t cs )
{
  FLA_Error e_val;

  e_val = FLA_Check_valid_real_trans( trans );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_floating_object( A );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_nonconstant_object( A );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( B_buffer );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_object_dims( trans, m, n, A );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_matrix_strides( m, n, rs, cs );
  FLA_Check_error_code( e_val );

  if ( trans == FLA_NO_TRANSPOSE )
  {
    e_val = FLA_Check_submatrix_dims_and_offset( m, n, i, j, A );
    FLA_Check_error_code( e_val );
  }
  else
  {
    e_val = FLA_Check_submatrix_dims_and_offset( n, m, i, j, A );
    FLA_Check_error_code( e_val );
  }

  e_val = FLA_Check_nonconstant_object( A );
  FLA_Check_error_code( e_val );

  return FLA_SUCCESS;
}
FLA_Error FLA_Repart_2x2_to_3x3_check( FLA_Obj ATL, FLA_Obj ATR,  FLA_Obj *A00, FLA_Obj *A01, FLA_Obj *A02,
                                                                  FLA_Obj *A10, FLA_Obj *A11, FLA_Obj *A12,
                                       FLA_Obj ABL, FLA_Obj ABR,  FLA_Obj *A20, FLA_Obj *A21, FLA_Obj *A22,
                                       dim_t   mb,  dim_t    nb,  FLA_Quadrant quadrant )
{
  FLA_Error e_val;

  e_val = FLA_Check_valid_object_datatype( ATL );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( ABL );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( ATR );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_object_datatype( ABR );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A00 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A10 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A20 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A01 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A11 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A21 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A02 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A12 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_null_pointer( A22 );
  FLA_Check_error_code( e_val );

  e_val = FLA_Check_valid_quadrant( quadrant );
  FLA_Check_error_code( e_val );

  if      ( quadrant == FLA_TL )
  {
    e_val = FLA_Check_attempted_repart_2x2( ATL, mb, nb );
    FLA_Check_error_code( e_val );
  }
  else if ( quadrant == FLA_TR )
  {
    e_val = FLA_Check_attempted_repart_2x2( ATR, mb, nb );
    FLA_Check_error_code( e_val );
  }
  else if ( quadrant == FLA_BL )
  {
    e_val = FLA_Check_attempted_repart_2x2( ABL, mb, nb );
    FLA_Check_error_code( e_val );
  }
  else if ( quadrant == FLA_BR )
  {
    e_val = FLA_Check_attempted_repart_2x2( ABR, mb, nb );
    FLA_Check_error_code( e_val );
  }

  // Needed: check for adjacency, similar to those in FLA_Merge_*().

  return FLA_SUCCESS;
}