int
saf_declare_default_coords(SAF_ParMode pmode, /* the parallel mode */
SAF_Set *base, /* the base space set whose default coordinates are being declared */
SAF_Field *field /* the field to serve as the default coordinates */
)
{
SAF_ENTER(saf_declare_default_coords, SAF_PRECONDITION_ERROR);
SAF_REQUIRE(_saf_valid_pmode(pmode), SAF_LOW_CHK_COST, SAF_PRECONDITION_ERROR,
_saf_errmsg("PMODE must be valid"));
if (!_saf_is_participating_proc(pmode)) SAF_RETURN(-1);
SAF_REQUIRE(SS_SET(base), SAF_LOW_CHK_COST, SAF_PRECONDITION_ERROR,
_saf_errmsg("BASE must be a valid set handle"));
SAF_REQUIRE(SS_FIELD(field), SAF_LOW_CHK_COST, SAF_PRECONDITION_ERROR,
_saf_errmsg("FIELD must be a valid field handle"));
SAF_ASSERT(SS_FIELD(field)->is_coord_field, SAF_LOW_CHK_COST, SAF_ASSERTION_ERROR,
_saf_errmsg("the specified field must be a coordinate field"));
/* The field's base space must be `base' */
SAF_ASSERT(SS_PERS_EQ(SS_FIELD_P(field,base_space), base), SAF_LOW_CHK_COST, SAF_ASSERTION_ERROR,
_saf_errmsg("the field to be used as default coord must be defined on BASE"));
/* Set the default coordinate field on the set */
SAF_DIRTY(base, pmode);
SS_SET(base)->dflt_coordfld = *field;
SAF_LEAVE(SAF_SUCCESS);
}