|
SALSA Analysis Modules
|
AnaMod has a mechanism for querying single category/component pairs, but often a specific set of features is needed quickly, and/or multiple times. For this, the `feature set' mechanism exists.
A feature set is a set of category/component pairs. It does not contain actual values. A feature set can be instantiated to a `feature values' object, which contains the actual values that the feature set takes on a given problem.
This is the workflow:
Here is a piece of example code:
{
FeatureSet symmetry; int sidx,aidx;
ierr = NewFeatureSet(&symmetry); CHKERRQ(ierr);
ierr = AddToFeatureSet
(symmetry,"simple","symmetry-snorm",&sidx); CHKERRQ(ierr);
ierr = AddToFeatureSet
(symmetry,"simple","symmetry-anorm",&aidx); CHKERRQ(ierr);
ierr = TransformObjectSetSuitabilityFunction
(cur,(void*)symmetry,&onlyforsymmetricproblem); CHKERRQ(ierr);
}
PetscErrorCode onlyforsymmetricproblem
(NumericalProblem problem,void *ctx,SuitabilityValue *v)
{
FeatureSet features = (FeatureSet)ctx; FeatureValues values;
AnalysisItem sn,an; PetscBool f1,f2; PetscErrorCode ierr;
PetscFunctionBegin;
ierr = NewFeatureValues(&values); CHKERRQ(ierr);
ierr = InstantiateFeatureSet((void*)problem,features,values); CHKERRQ(ierr);
ierr = GetFeatureValue(values,sidx,&sn,&f1); CHKERRQ(ierr);
ierr = GetFeatureValue(values,aidx,&an,&f2); CHKERRQ(ierr);
ierr = DeleteFeatureValues(values); CHKERRQ(ierr);
if (f1 && f2 && an.r>1.e-12*sn.r) {
printf("problem too unsymmetric\n");
}
1.7.6.1