Exemplo n.º 1
0
Arquivo: eval.c Projeto: marcinlos/FPL
static value_object eval_aux(expr* node)
{
    if (node == NULL)
        return make_null();
    if (node->type == EXP_ASSIGN)
        return assign_value(node->left, node->right);

    value_object left = eval_aux(node->left);
    value_object right = eval_aux(node->right);

    switch (node->type)
    {
    case EXP_PLUS:
        return add_values(left, right);
    case EXP_MINUS:
        return sub_values(left, right);
    case EXP_TIMES:
        return mul_values(left, right);
    case EXP_DIV:
        return div_values(left, right);
    case EXP_INT:
        return make_int(atoi(node->text));
    case EXP_FLOAT:
        return make_float(to_float64(node->text));
    case EXP_NATIVE:
        return make_native(atof(node->text));
    case EXP_CALL:
        return eval_function(node->text, node->args);
    case EXP_ID:
        return get_variable_value(node->text);
    case EXP_UNMINUS:
        return negate_value(left);
    }
}
Exemplo n.º 2
0
void IntrepidKernel<Scalar>::dfuncValue( Teuchos::ArrayRCP<Scalar> &values, 
					 const double param_coords[3] )
{
    MDArray coords(1,3);
    coords(0,0) = param_coords[0];
    coords(0,1) = param_coords[1];
    coords(0,2) = param_coords[2];

    if ( this->b_function_space_type == FOOD_HGRAD )
    {
	MDArray grad_values( this->b_cardinality, 1 );

	d_intrepid_basis->getValues( grad_values, 
				     coords, 
				     Intrepid::OPERATOR_VALUE );

	values = grad_values.getData();
    }
    else if ( this->b_function_space_type == FOOD_HDIV )
    {
	MDArray div_values( this->b_cardinality, 1, 3 );

	d_intrepid_basis->getValues( div_values, 
				     coords, 
				     Intrepid::OPERATOR_VALUE );

	values = div_values.getData();
    }
    else if ( this->b_function_space_type == FOOD_HCURL )
    {
	MDArray curl_values( this->b_cardinality, 1, 3 );

	d_intrepid_basis->getValues( curl_values, 
				     coords, 
				     Intrepid::OPERATOR_VALUE );

	values = curl_values.getData();
    }
    else
    {	    
	testPrecondition( this->b_function_space_type == FOOD_HGRAD ||
			  this->b_function_space_type == FOOD_HDIV  ||
			  this->b_function_space_type == FOOD_HCURL,
			  "Invalid function space type" );
    }
}