Exemplo n.º 1
0
LOCAData::LOCAData(
     const Teuchos::RCP<LOCA::GlobalData>& global_data,
     const Teuchos::RCP<LOCA::Parameter::SublistParser>& top_params,
     const Teuchos::RCP<NOX::Solver::Generic>& s, 
     const Teuchos::RCP<LOCA::MultiContinuation::AbstractStrategy>& g, 
     const Teuchos::RCP<Teuchos::ParameterList>& par,
     const Teuchos::RCP<NOX::StatusTest::Generic>& st,
     const Teuchos::RCP< std::list<ParamData> >& conParamData) :
  globalData(global_data),
  topParams(top_params),
  solver(s), 
  grp(g), 
  p(par), 
  status(st),
  paramData(conParamData),
  space(NULL), 
  np(g->getNumParams()),
  maxNonlinearIterations(1.0),
  aggressiveness(0.0),
  radius(-1.0),
  maxRadius(0.0),
  minRadius(0.0),
  solutionMax(0.0)
{
  Teuchos::RCP<Teuchos::ParameterList> stepperList = 
    topParams->getSublist("Stepper");
  maxNonlinearIterations = 
    static_cast<double>(stepperList->get("Max Nonlinear Iterations", 
						 15));
  aggressiveness = stepperList->get("Aggressiveness", 0.0);
  solutionMax = stepperList->get("Max Solution Component", 1.0e16);
  mfErrorHandler = MFCreateErrorHandler();
}
Exemplo n.º 2
0
int main(int argc, char *argv[])
 {
  MFImplicitMF M;
  int i;
  int n,k;
  MFNRegion Omega;
  MFAtlas S;
  MFNVector u0;
  FILE *fid;
  double R=.5;
  MFContinuationMethod H;
  MFErrorHandler e;

  e=MFCreateErrorHandler();

  k=4;
  M=MFIMFCreateNSpaceWithRadius(k,.1,e);
  n=MFIMF_N(M,e);
  Omega=MFNRegionCreateHyperCube(n,R,e);
  printf("Interior of Four Cube, volume=%lf\n",2*R*2*R*2*R*2*R);

  u0=MFIMFVectorFactory(M,e);
  for(i=0;i<k;i++)
    MFNVSetC(u0,i, 0.,e);

  H=MFCreateMultifariosMethod(e);
  MFMultifarioSetRealParameter(H,"epsilon",.1,e);
  MFMultifarioSetIntegerParameter(H,"maxCharts",-1,e);
  MFMultifarioSetIntegerParameter(H,"verbose",1,e);
  MFMultifarioSetIntegerParameter(H,"page",1,e);
  MFMultifarioSetFilename(H,"FourSpace",e);


  S=MFComputeAtlas(H,M,Omega,u0,e);

/*fid=fopen("FourSpace.atlas","w");
  MFWriteAtlas(fid,S,e);
  fclose(fid);
  printf("Done writing Atlas\n");fflush(stdout);*/

  MFFreeAtlas(S,e);
  MFFreeContinuationMethod(H,e);
  MFFreeImplicitMF(M,e);
  MFFreeNRegion(Omega,e);
  MFFreeNVector(u0,e);

  MFFreeErrorHandler(e);

  return 0;
 }
Exemplo n.º 3
0
int main(int argc, char *argv[])
 {
  MFImplicitMF M;
  int n;
  MFNRegion Omega;
  MFAtlas S;
  MFNVector u0;
  FILE *fid;
  MFContinuationMethod H;
  MFErrorHandler e;

  e=MFCreateErrorHandler();

  M=MFIMFCreatePlane(e);
  n=MFIMF_N(M,e);
  Omega=MFNRegionCreateRectangle(-1.,-1.,1.,1.,e);

  u0=MFIMFVectorFactory(M,e);
  MFNVSetC(u0,0, 0.,e);
  MFNVSetC(u0,1, 0.,e);

  H=MFCreateMultifariosMethod(e);
  MFMultifarioSetRealParameter(H,"epsilon",.1,e);
  MFMultifarioSetIntegerParameter(H,"maxCharts",-1,e);
  MFMultifarioSetIntegerParameter(H,"verbose",1,e);
  MFMultifarioSetIntegerParameter(H,"page",1,e);
  MFMultifarioSetIntegerParameter(H,"dumpToPlotFile",1,e);
  MFMultifarioSetIntegerParameter(H,"dumpToCenterFile",0,e);
  MFMultifarioSetFilename(H,"Plane",e);

  S=MFComputeAtlas(H,M,Omega,u0,e);

  MFCloseAtlas(H,S,e);
  printf("Done computing Atlas\n");fflush(stdout);

  MFFreeAtlas(S,e);
  MFFreeImplicitMF(M,e);
  MFFreeNRegion(Omega,e);
  MFFreeNVector(u0,e);
  MFFreeContinuationMethod(H,e);

  MFFreeErrorHandler(e);

  return 0;
 }
Exemplo n.º 4
0
int main(int argc, char *argv[])
 {
  int gray;
  MFAtlas S;
  MFEnumPolytope P;
  FILE *fid;
  char name[1024]="";
  MFErrorHandler e;

  if(argc<2){printf("Usage %s filename\n",argv[0]);fflush(stdout);return 8;}

  printf("%s %s\n",argv[0],argv[1]);

  strcpy(name,argv[1]);
  strcat(name,".atlas");

  fid=fopen(name,"r");
  if(fid==(FILE*)NULL)
   {
    printf("Error, could not open file %s, %s\n",name,strerror(errno));
    fflush(stdout);
    return 12;
   }

  e=MFCreateErrorHandler();

  printf("Reading Atlas %s\n",argv[1]);fflush(stdout);
  S=MFReadAtlas(fid,e);
  fclose(fid);
  printf("Done reading Atlas\n");fflush(stdout);

  printf("Dump Atlas as DX file\n");fflush(stdout);
  strcpy(name,argv[1]);
/*strcat(name,".dx");*/
/*MFAtlasToDX(S,name,e);*/
  MFAtlasToDX2(S,name,e);

  MFFreeAtlas(S,e);
  MFFreeErrorHandler(e);

  return(0);
 }
Exemplo n.º 5
0
int main(int argc,char *argv[])
 {
  MFAUTOTPBVP tpbvp;
  MFNSpace space;
  MFNRegion Omega;
  MFImplicitMF M;
  MFContinuationMethod H;
  MFNVector u0;
  MFNKMatrix Phi0;
  MFAtlas S;
  MFErrorHandler e;

  double epsilon=1.00;
  int through=10;
  doublereal rl0[1]={0.};
  doublereal rl1[1]={20.};
  doublereal a0=0.;
  doublereal a1=100.;
  doublereal ds=0.1;

  integer npar=3;
  integer nicp=1;
  integer icp[1]={0};
  doublereal par[3];

  doublereal thu[2]={1.,1.};
  doublereal thl[3]={1.,1.,1.};

  integer k=1;
  integer jac=1;
  integer ntst=5,ncol=4,ndim=2;
  integer nbc=1,nic=1;

  e=MFCreateErrorHandler();

  tpbvp=MFCreateAUTOTPBVP(k,ndim,f,jac,nbc,a,nic,ic,npar,nicp,icp,ntst,ncol,plt,e);

  space=MFCreateAUTONSpace(tpbvp,thu,thl,e);
  M=MFCreateAUTOBV(tpbvp,space,e);

  MFAUTOBVSetRealParameter(M,"dlmin",0.0001,e);
  MFAUTOBVSetRealParameter(M,"dsmax",2.0,e);
  MFAUTOBVSetRealParameter(M,"ds0",0.1,e);
  MFAUTOBVSetRealParameter(M,"epsl",1.e-4,e);
  MFAUTOBVSetRealParameter(M,"epsu",1.e-4,e);
  MFAUTOBVSetIntegerParameter(M,"iid",0,e);

/*MFAUTOAddUserZero(M,0,1.,e);
  MFAUTOAddUserZero(M,0,3.,e);
  MFAUTODetectLimitPoints(M,e);*/

  Omega=MFNRegionCreateAUTO(space,k,icp,rl0,rl1,a0,a1,e);

  H=MFCreateMultifariosMethod(e);
  MFMultifarioSetRealParameter(H,"minR",0.0001,e);
  MFMultifarioSetRealParameter(H,"maxR",2.0,e);
  MFMultifarioSetRealParameter(H,"epsilon",epsilon,e);
  MFMultifarioSetIntegerParameter(H,"maxCharts",-1,e);
  MFMultifarioSetIntegerParameter(H,"verbose",1,e);
  MFMultifarioSetIntegerParameter(H,"page",1,e);
  MFMultifarioSetIntegerParameter(H,"branchSwitch",1,e);
  MFMultifarioSetIntegerParameter(H,"dumpToPlotFile",1,e);
  MFMultifarioSetIntegerParameter(H,"dumpToCenterFile",0,e);
  MFMultifarioSetFilename(H,"AUTINTMultifario",e);

  par[0]=0.;
  par[1]=0.;
  par[2]=0.;
  MFAUTOGetStartPoint(M,tpbvp,stpnt,par,&u0,&Phi0,e);

  S=MFComputeAtlasWithTangent(H,M,Omega,u0,Phi0,e);
  MFCloseAtlas(H,S,e);

  MFFreeNRegion(Omega,e);
  MFFreeNSpace(space,e);
  MFFreeNVector(u0,e);
  if(Phi0!=(MFNKMatrix)NULL)MFFreeNKMatrix(Phi0,e);
  MFFreeImplicitMF(M,e);
  MFFreeContinuationMethod(H,e);
  MFFreeAtlas(S,e);

  MFFreeErrorHandler(e);

  return 0;
 } 
Exemplo n.º 6
0
int main(int argc, char *argv[])
 {
  MFImplicitMF M;
  int n;
  MFNRegion Omega;
  MFAtlas S;
  MFNVector u0,u;
  MFNKMatrix Phi;
  FILE *fid;
  MFContinuationMethod H;
  MFErrorHandler e;

  e=MFCreateErrorHandler();

  M=MFIMFCreateAlgebraicExpression("[x,y,z]",
  "[((sqrt((x-.8)**2+y**2)-.8)**2+z**2 -.5**2)*((sqrt((x+.8)**2+y**2)-.8)**2+z**2 -.5**2)-.05]",e);
  n=MFIMF_N(M,e);
  Omega=MFNRegionCreateHyperCube(n,2.4,e);

/* This bit starts with an approximate point on M, and calls project to get a point on M */

  u=MFIMFVectorFactory(M,e);
  MFNVSetC(u,0, 1.2,e);
  MFNVSetC(u,1, 0.,e);
  MFNVSetC(u,2, 0.,e);
  u0=MFIMFVectorFactory(M,e);
  Phi=MFIMFMatrixFactory(M,e);

  MFNKMSetC(Phi,0,0,0.,e);
  MFNKMSetC(Phi,1,0,1.,e);
  MFNKMSetC(Phi,2,0,0.,e);
  MFNKMSetC(Phi,0,1,0.,e);
  MFNKMSetC(Phi,1,1,0.,e);
  MFNKMSetC(Phi,2,1,1.,e);

  if(!MFIMFProject(M,u,Phi,u0,e))return 8;

  H=MFCreateMultifariosMethod(e);
  MFMultifarioSetRealParameter(H,"epsilon",.01,e);
  MFMultifarioSetIntegerParameter(H,"maxCharts",-1,e);
  MFMultifarioSetIntegerParameter(H,"verbose",1,e);
  MFMultifarioSetIntegerParameter(H,"page",1,e);
  MFMultifarioSetIntegerParameter(H,"dumpToPlotFile",1,e);
  MFMultifarioSetIntegerParameter(H,"dumpToCenterFile",0,e);
  MFMultifarioSetFilename(H,"GenusTwo",e);

  S=MFComputeAtlas(H,M,Omega,u0,e);

  MFCloseAtlas(H,S,e);
  printf("Done computing Atlas\n");fflush(stdout);

  MFFreeAtlas(S,e);
  MFFreeImplicitMF(M,e);
  MFFreeContinuationMethod(H,e);
  MFFreeNRegion(Omega,e);
  MFFreeNVector(u0,e);

  MFFreeErrorHandler(e);

  return(0);
 }
int main(int argc, char *argv[])
 {
  MFImplicitMF M;
  int i,n;
  MFNRegion Omega;
  MFAtlas S;
  MFNVector u0;
  FILE *fid;
  char *vars;
  char *expr;
  char *digits[]={"0","1","2","3","4","5","6","7","8","9"};
  char name[80]="";
  MFContinuationMethod H;
  MFErrorHandler e;

  e=MFCreateErrorHandler();

  n=4;
  if(argc>1)sscanf(argv[1],"%d",&n);
  if(n<1||n>9)
   {
    fprintf(stderr,"%s currently only works for 0<n<10. You supplied n=%d\n",n);
    fflush(stderr);
    return 12;
   }
  vars=(char*)malloc((2+3*n)*sizeof(char));
  strcpy(vars,"[");
  for(i=0;i<n;i++)
   {
    if(i>0)strcat(vars,",");
    strcat(vars,"v");
    strcat(vars,digits[i]);
   }
  strcat(vars,"]");

  expr=(char*)malloc((5+6*n)*sizeof(char));
  strcpy(expr,"[");
  for(i=0;i<n;i++)
   {
    if(i>0)strcat(expr,"+");
    strcat(expr,"v");
    strcat(expr,digits[i]);
    strcat(expr,"**2");
   }
  strcat(expr,"-1.]");

  printf("Variables : %s\n",vars);
  fflush(stdout);
  printf("Expression: %s\n",expr);
  fflush(stdout);

  M=MFIMFCreateAlgebraicExpression(vars,expr,e);
  MFIMFSetR(M,sqrt(3.)/2.1,e);
  Omega=MFNRegionCreateHyperCube(n,3.,e);

  u0=MFIMFVectorFactory(M,e);
  MFNVSetC(u0,0, 1.,e);
  for(i=1;i<n;i++)MFNVSetC(u0,i, 0.,e);

  H=MFCreateMultifariosMethod(e);
  MFMultifarioSetRealParameter(H,"epsilon",1.,e);
  MFMultifarioSetIntegerParameter(H,"maxCharts",-1,e);
  MFMultifarioSetIntegerParameter(H,"verbose",1,e);
  MFMultifarioSetIntegerParameter(H,"page",0,e);
  MFMultifarioSetIntegerParameter(H,"dumpToPlotFile",1,e);
  MFMultifarioSetIntegerParameter(H,"dumpToCenterFile",0,e);
  strcpy(name,"SpherePacking");
  strcat(name,digits[n]);
  MFMultifarioSetFilename(H,name,e);

  S=MFComputeAtlas(H,M,Omega,u0,e);

  MFCloseAtlas(H,S,e);
  printf("Done computing manifold\n");fflush(stdout);

  MFFreeAtlas(S,e);
  MFFreeImplicitMF(M,e);
  MFFreeNRegion(Omega,e);
  MFFreeNVector(u0,e);
  MFFreeContinuationMethod(H,e);
  free(vars);
  free(expr);

  MFFreeErrorHandler(e);

  return 0;
 }
Exemplo n.º 8
0
int main(int argc, char *argv[])
 {
  static char RoutineName[]={"main"};
  FILE *fin;
  FILE *fout;
  char file[4096];
  int n,k;
  MFModifiedPolytope P,Q;
  double on;
  double  d;
  MFNVector nrm;
  MFErrorHandler e;
  int i;

  if(argc<2){printf("Usage %s infilename o n[0] n[1] n[2] ...\n",argv[0]);fflush(stdout);return 8;}

  strcpy(file,argv[1]);
  strcat(file,".plotfile");
  fin=fopen(file,"r");
  if(fin==(FILE*)NULL){printf("Error opening file %s\n",file);fflush(stdout);return 8;}

  strcpy(file,"sliced");
  strcat(file,argv[1]);
  strcat(file,".plotfile");
  fout=fopen(file,"w");
  if(fout==(FILE*)NULL){printf("Error opening file %s\n",file);fflush(stdout);return 8;}

  fscanf(fin,"Dimension of vertices, %d\n",&n);
  fscanf(fin,"Dimension of manifold, %d\n",&k);

  sscanf(argv[1],"%lf",&on);
  printf("  origin=%lf\n",on);fflush(stdout);
  nrm=MFCreateNVector(n,e);
  for(i=0;i<n;i++)
   {
    d=atoi(argv[3+i]);
    printf("  nrm[%d]=%lf\n",i,d);fflush(stdout);
    MFNVSetC(nrm,i,d,e);
   }

  e=MFCreateErrorHandler();

  fprintf(fout,"Dimension of vertices, %d\n",n);
  fprintf(fout,"Dimension of manifold, %d\n",k);

  i=0;
  while(!feof(fin))
   {
    P=MFReadPolytopeFromPlotfile(fin,k,n,e);
    Q=MFCreateSectionOfPolytope(P,-1,nrm,on,e);
    MFFreeModifiedPolytope(P,e);
    MFWriteModifiedPolytopeToPlotFile(i,fout,Q,e);
    MFFreeModifiedPolytope(Q,e);
    i++;
   }

  fclose(fin);
  fclose(fout);
  MFFreeErrorHandler(e);

  return 0;
 }
int main(int argc, char *argv[])
 {
  MFImplicitMF M;
  int n;
  MFNRegion Omega;
  MFAtlas S;
  MFNVector u0[2];
  FILE *fid;
  MFContinuationMethod H;
  MFErrorHandler e;
  MFNVector ur,ll;

  e=MFCreateErrorHandler();

/*M=MFIMFCreateAlgebraicExpression("[x,y,z]","[(z-x)*(x+y+z)]",e);*/
  M=MFIMFCreateAlgebraicExpression("[x,y,z]","[(z-x-.5*(y-1)*(y-1))*(x+y+z)]",e);
  n=MFIMF_N(M,e);

  ur=MFCreateNVector(n,e);
  MFNVSetC(ur,0,0.6,e);
  MFNVSetC(ur,1,0.6,e);
  MFNVSetC(ur,2,1.6,e);

  ll=MFCreateNVector(n,e);
  MFNVSetC(ll,0,-0.6,e);
  MFNVSetC(ll,1,-0.6,e);
  MFNVSetC(ll,2,-0.6,e);

/*Omega=MFNRegionCreateHyperCubeByCorners(n,ll,ur,e);*/
  Omega=MFNRegionCreateHyperCube(n,1.1,e);

  u0[0]=MFIMFVectorFactory(M,e);
  MFNVSetC(u0[0],0, 0.,e);
  MFNVSetC(u0[0],1, 1.,e);
  MFNVSetC(u0[0],2,-1.,e);

  u0[1]=MFIMFVectorFactory(M,e);
  MFNVSetC(u0[1],0, 1.,e);
  MFNVSetC(u0[1],1, 1.,e);
  MFNVSetC(u0[1],2, 1.,e);

  MFNVSetC(u0[0],0,0.0,e);
  MFNVSetC(u0[0],1, .1,e);
  MFNVSetC(u0[0],2,-.1,e);

  H=MFCreateMultifariosMethod(e);
  MFMultifarioSetRealParameter(H,"epsilon",.1,e);
  MFMultifarioSetIntegerParameter(H,"maxCharts",8000,e);
  MFMultifarioSetIntegerParameter(H,"verbose",1,e);
  MFMultifarioSetIntegerParameter(H,"page",1,e);
  MFMultifarioSetIntegerParameter(H,"pageEvery",100000,e);

  MFMultifarioSetRealParameter(H,"dotmin",.3,e);

  MFMultifarioSetIntegerParameter(H,"dumpToPlotFile",1,e);
  MFMultifarioSetIntegerParameter(H,"dumpToCenterFile",0,e);
  MFMultifarioSetIntegerParameter(H,"branchSwitch",2,e);
  MFMultifarioSetFilename(H,"Transcritical",e);

  S=MFComputeAtlasMultiple(H,M,Omega,1,u0,e);


  if(0){
   int i;
   int j;
   int n;
   int m;
   int vMark;
   int prt;

   MFChart C;
   MFPolytope P;

   n=MFAtlasNumberOfCharts(S,e);
   printf("\n\n\nThere are %d charts\n",n);fflush(stdout);
   for(i=0;i<n;i++)
    {
     C=MFAtlasChart(S,i,e);
     P=MFChartPolytope(C,e);
     m=MFPolytopeNumberOfVertices(P,e);

#if 0
     {
      double x,y,z;
      double v0,v1;
      char sign0,sign1;

      MFNVector u;

      u=MFChartCenter(C,e);
      x=MFNV_C(u,0,e);
      y=MFNV_C(u,1,e);
      z=MFNV_C(u,2,e);

      v0=z-x-.5*(y-1)*(y-1);
      sign0='+';if(v0<0.)sign0='-';if(fabs(v0)<1.e-7)sign0='0';

      v1=x+y+z;
      sign1='+';if(v1<1.)sign1='-';if(fabs(v1)<1.e-7)sign1='0';

      printf("  chart %d, index1=%d, index2=%d,  sign(v0)=%c, sign(v1)=%c\n",i,MFNVGetIndex(MFChartCenter(C,e),e),MFNVGetIndex2(MFChartCenter(C,e),e),sign0,sign1);fflush(stdout);
     }
#endif

     if(MFNVGetIndex2(MFChartCenter(C,e),e)>-1)
      {
       prt=0;
       for(j=0;j<m;j++)
        {
         double x,y,z;
         double v0;
         int sign0;

         MFNVector u;
         MFKVector s;

         if(MFPolytopeRadiusOfVertex(P,j,e)/MFChartRadius(C,e)>1.&& MFPolytopeGetVertexMark(P,j,e)==0)prt=1;

         u=MFCreateNVector(MFAtlasN(S,e),e);
         s=MFCreateKVector(MFAtlasK(S,e),e);

         MFPolytopeVertex(P,j,s,e);
         MFChartEvaluate(C,s,u,e);

         x=MFNV_C(u,0,e);
         y=MFNV_C(u,1,e);
         z=MFNV_C(u,2,e);

         MFFreeNVector(u,e);
         MFFreeKVector(s,e);

         v0=z-x-.5*(y-1)*(y-1);
         sign0=1;if(v0<0.)sign0=-1;if(fabs(v0)<1.e-7)sign0=0;
         if(sign0==1)prt=1;
        }

       if(prt)
        {
         double x,y,z;
         double v0;
         int sign0;

         MFNVector u;
         MFKVector s;

         u=MFCreateNVector(MFAtlasN(S,e),e);
         s=MFCreateKVector(MFAtlasK(S,e),e);

         printf("  chart %d, index1=%d, index2=%d,  polytope has %d vertices\n",i,MFNVGetIndex(MFChartCenter(C,e),e),MFNVGetIndex2(MFChartCenter(C,e),e),m);fflush(stdout);
         for(j=0;j<m;j++)
          {
           vMark=MFPolytopeGetVertexMark(P,j,e);

           MFPolytopeVertex(P,j,s,e);
           MFChartEvaluate(C,s,u,e);
  
           x=MFNV_C(u,0,e);
           y=MFNV_C(u,1,e);
           z=MFNV_C(u,2,e);

           v0=z-x-.5*(y-1)*(y-1);
           sign0=1;if(v0<0.)sign0=-1;if(fabs(v0)<1.e-7)sign0=0;

           printf("     vertex %d has mark %d, sign %2d, vertexRadius/chartRadius %lf (%lf,%lf,%lf)\n",j,vMark,sign0,MFPolytopeRadiusOfVertex(P,j,e)/MFChartRadius(C,e),x,y,z);fflush(stdout);
          }

         MFFreeNVector(u,e);
         MFFreeKVector(s,e);
        }
      }
    }
  }

  MFCloseAtlas(H,S,e);

  MFFreeAtlas(S,e);

  MFFreeImplicitMF(M,e);
  MFFreeNRegion(Omega,e);
  MFFreeNVector(u0[0],e);
  MFFreeNVector(u0[1],e);
  MFFreeContinuationMethod(H,e);
  MFFreeErrorHandler(e);

  return;
 }