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"); }