System Preprocessors
suit.c
Go to the documentation of this file.
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 /*! \section suitc Suitability functions for the linear problem 
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 }