00001 #include <stdlib.h>
00002 #include <stdio.h>
00003 #include "syspro.h"
00004 #include "sysprolinear.h"
00005 #include "linear_impl.h"
00006 #include "sysprosuit.h"
00007 #include "anamod.h"
00008 #include "linksp.h"
00009 #include "petscmat.h"
00010 #include "petscpc.h"
00011 #include "petscksp.h"
00012
00013
00014
00015 #undef __FUNCT__
00016 #define __FUNCT__ "onlyforsymmetricproblem"
00017 PetscErrorCode onlyforsymmetricproblem
00018 (NumericalProblem problem,void *ctx,SuitabilityValue *v)
00019 {
00020 FeatureSet features = (FeatureSet)ctx; FeatureValues values;
00021 AnalysisItem sn,an; PetscTruth f1,f2; PetscErrorCode ierr;
00022
00023 PetscFunctionBegin;
00024 ierr = NewFeatureValues(&values); CHKERRQ(ierr);
00025 ierr = InstantiateFeatureSet((void*)problem,features,values); CHKERRQ(ierr);
00026 ierr = GetFeatureValue(values,0,&sn,&f1); CHKERRQ(ierr);
00027 ierr = GetFeatureValue(values,1,&an,&f2); CHKERRQ(ierr);
00028 ierr = DeleteFeatureValues(values); CHKERRQ(ierr);
00029 printf("got norms: %d,%d=%e,%e\n",f1,f2,sn.r,an.r);
00030 *v = -1;
00031 if (f1 && f2 && an.r>1.e-12*sn.r) {
00032 printf("problem too unsymmetric\n");
00033 *v = 0;
00034 }
00035 PetscFunctionReturn(0);
00036 }