System Preprocessors
|
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 }