示例#1
0
文件: mmg3d.c 项目: XL64/mmg
static inline void endcod() {
  char    stim[32];

  chrono(OFF,&ctim[0]);
  printim(ctim[0].gdif,stim);
  fprintf(stdout,"\n   MMG3DLIB: ELAPSED TIME  %s\n",stim);
}
示例#2
0
文件: mmg3d.c 项目: XL64/mmg
/**
 *
 * Messages at end of the code.
 *
 */
static void _MMG5_endcod() {
    char    stim[32];

    chrono(OFF,&MMG5_ctim[0]);
    printim(MMG5_ctim[0].gdif,stim);
    fprintf(stdout,"\n   ELAPSED TIME  %s\n",stim);
}
示例#3
0
/* free global data structure */
int LS_stop(LSst *lsst) {
	char   stim[32];

	/* release memory */
  free(lsst->sol.u);
	free(lsst->sol.cl);
	free(lsst->sol.mat);

  chrono(OFF,&lsst->info.ctim[0]);
  if ( lsst->info.verb != '0' ) {
	  printim(lsst->info.ctim[0].gdif,stim);
    fprintf(stdout,"\n ** Cumulative time: %s sec.\n",stim);
  }

	return(1);
}
示例#4
0
/* free global data structure */
int VL_stop(VLst *vlst) {
	char   stim[32];

	/* release memory */
  free(vlst->sol.u);
	free(vlst->sol.cl);
	free(vlst->sol.mat);

  chrono(OFF,&vlst->info.ctim[0]);
  if ( vlst->info.verb != '0' ) {
    printim(vlst->info.ctim[0].gdif,stim);
    fprintf(stdout,"\n  Cumulative time: %s sec.\n",stim);
  }

	return(1);
}
示例#5
0
文件: mmg3d.c 项目: XL64/mmg
int main(int argc,char *argv[]) {
  MMG5_pMesh      mesh;
  MMG5_pSol       met;
  int             ier;
  char            stim[32];

  atexit(endcod);

  tminit(ctim,TIMEMAX);
  chrono(ON,&ctim[0]);

  /* assign default values */
  mesh = NULL;
  met  = NULL;

  MMG5_Init_mesh(&mesh,&met);

  /* reset default values for file names */
  MMG5_Free_names(mesh,met);

  /* command line */
  if ( !MMG5_parsar(argc,argv,mesh,met) )  return(1);

  /* load data */
  fprintf(stdout,"\n  -- INPUT DATA\n");
  chrono(ON,&ctim[1]);
  /* read mesh file */
  if ( !MMG5_loadMesh(mesh) ) {
    MMG5_Free_all(mesh,met );
    return(MMG5_STRONGFAILURE);
  }
  if ( !MMG5_Set_solSize(mesh,met,MMG5_Vertex,0,MMG5_Scalar) ) {
    MMG5_Free_all(mesh,met);
    return(MMG5_STRONGFAILURE);
  }

  /* read metric if any */
  ier = MMG5_loadMet(mesh,met);
  if ( !ier ) {
    MMG5_Free_all(mesh,met);
    return(MMG5_STRONGFAILURE);
  }

  if ( !MMG5_parsop(mesh,met) )
    RETURN_AND_FREE(mesh,met,MMG5_LOWFAILURE);

  chrono(OFF,&ctim[1]);
  printim(ctim[1].gdif,stim);
  fprintf(stdout,"  -- DATA READING COMPLETED.     %s\n",stim);

  ier = MMG5_mmg3dlib(mesh,met );

  if ( ier != MMG5_STRONGFAILURE ) {
    chrono(ON,&ctim[1]);
    if ( mesh->info.imprim )
      fprintf(stdout,"\n  -- WRITING DATA FILE %s\n",mesh->nameout);
    if ( !MMG5_saveMesh(mesh) )         {
      MMG5_Free_all(mesh,met );
      return(EXIT_FAILURE);
    }
    if ( !MMG5_saveMet(mesh,met) )     {
      MMG5_Free_all(mesh,met);
      return(EXIT_FAILURE);
    }
    chrono(OFF,&ctim[1]);
    if ( mesh->info.imprim )
      fprintf(stdout,"  -- WRITING COMPLETED\n");
  }

  /* free mem */
  chrono(OFF,&ctim[0]);
  printim(ctim[0].gdif,stim);
  fprintf(stdout,"\n   MMG3D: ELAPSED TIME  %s\n",stim);
  MMG5_Free_all(mesh,met);
  return(ier);
}
示例#6
0
文件: mmg3d.c 项目: XL64/mmg
/**
 * \param argc number of command line arguments.
 * \param argv command line arguments.
 * \return \ref MMG5_SUCCESS if success.
 * \return \ref MMG5_LOWFAILURE if failed but a conform mesh is saved.
 * \return \ref MMG5_STRONGFAILURE if failed and we can't save the mesh.
 *
 * Main program for MMG3D executable: perform mesh adaptation.
 *
 */
int main(int argc,char *argv[]) {
    MMG5_Mesh      mesh;
    MMG5_Sol       met;
    int       ier;
    char      stim[32];

    fprintf(stdout,"  -- MMG3d, Release %s (%s) \n",MG_VER,MG_REL);
    fprintf(stdout,"     %s\n",MG_CPY);
    fprintf(stdout,"     %s %s\n",__DATE__,__TIME__);

    signal(SIGABRT,_MMG5_excfun);
    signal(SIGFPE,_MMG5_excfun);
    signal(SIGILL,_MMG5_excfun);
    signal(SIGSEGV,_MMG5_excfun);
    signal(SIGTERM,_MMG5_excfun);
    signal(SIGINT,_MMG5_excfun);
    atexit(_MMG5_endcod);

    tminit(MMG5_ctim,TIMEMAX);
    chrono(ON,&MMG5_ctim[0]);

    /* assign default values */
    memset(&mesh,0,sizeof(MMG5_Mesh));
    memset(&met,0,sizeof(MMG5_Sol));

    MMG5_Init_parameters(&mesh);

    met.size      = 1;

    /* command line */
    if ( !MMG5_parsar(argc,argv,&mesh,&met) )  return(MMG5_STRONGFAILURE);
#ifdef USE_SCOTCH
    _MMG5_warnScotch(&mesh);
#endif

    /* load data */
    fprintf(stdout,"\n  -- INPUT DATA\n");
    chrono(ON,&MMG5_ctim[1]);
    _MMG5_warnOrientation(&mesh);
    /* read mesh file */
    if ( !MMG5_loadMesh(&mesh) ) _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);

    /* read metric if any */
    ier = MMG5_loadMet(&mesh,&met);
    if ( !ier )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
    else if ( ier > 0 && met.np != mesh.np ) {
        fprintf(stdout,"  ## WARNING: WRONG SOLUTION NUMBER. IGNORED\n");
        _MMG5_DEL_MEM(&mesh,met.m,(met.size*met.npmax+1)*sizeof(double));
        met.np = 0;
    } else if ( met.size!=1 ) {
        fprintf(stdout,"  ## ERROR: ANISOTROPIC METRIC NOT IMPLEMENTED.\n");
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
    }
    if ( !MMG5_parsop(&mesh,&met) )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE);

    chrono(OFF,&MMG5_ctim[1]);
    printim(MMG5_ctim[1].gdif,stim);
    fprintf(stdout,"  -- DATA READING COMPLETED.     %s\n",stim);

    /* analysis */
    chrono(ON,&MMG5_ctim[2]);
    _MMG5_setfunc(&mesh,&met);
    MMG5_Set_saveFunc(&mesh);

    if ( abs(mesh.info.imprim) > 0 )  _MMG5_outqua(&mesh,&met);
    fprintf(stdout,"\n  %s\n   MODULE MMG3D: IMB-LJLL : %s (%s)\n  %s\n",
            MG_STR,MG_VER,MG_REL,MG_STR);
    if ( mesh.info.imprim )  fprintf(stdout,"\n  -- PHASE 1 : ANALYSIS\n");

    if ( !_MMG5_scaleMesh(&mesh,&met) )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
    if ( mesh.info.iso ) {
        if ( !met.np ) {
            fprintf(stdout,"\n  ## ERROR: A VALID SOLUTION FILE IS NEEDED \n");
            _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
        }
        if ( !_MMG5_mmg3d2(&mesh,&met) )
            _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
    }

    if ( !mesh.info.iso && !met.np && !_MMG5_DoSol(&mesh,&met) )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE);

    if ( !_MMG5_analys(&mesh) )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE);

    if ( mesh.info.imprim > 3 && !mesh.info.iso && met.m ) _MMG5_prilen(&mesh,&met);

    chrono(OFF,&MMG5_ctim[2]);
    printim(MMG5_ctim[2].gdif,stim);
    if ( mesh.info.imprim )
        fprintf(stdout,"  -- PHASE 1 COMPLETED.     %s\n",stim);

    /* mesh adaptation */
    chrono(ON,&MMG5_ctim[3]);
    if ( mesh.info.imprim )
        fprintf(stdout,"\n  -- PHASE 2 : %s MESHING\n",met.size < 6 ? "ISOTROPIC" : "ANISOTROPIC");

    /* renumerotation if available */
    if ( !_MMG5_scotchCall(&mesh,&met) )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);


#ifdef PATTERN
    if ( !_MMG5_mmg3d1_pattern(&mesh,&met) ) {
        if ( !(mesh.adja) && !_MMG5_hashTetra(&mesh,1) ) {
            fprintf(stdout,"  ## Hashing problem. Unable to save mesh.\n");
            _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
        }
        if ( !_MMG5_unscaleMesh(&mesh,&met) )
            _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
        if ( !MMG5_saveMesh(&mesh) )
            _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
        if ( met.m && !MMG5_saveMet(&mesh,&met) )
            _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE);
    }
#else
    /* Pattern in iso mode, delauney otherwise */
    if ( !mesh.info.iso ) {
        if( !_MMG5_mmg3d1_delone(&mesh,&met) ) {
            if ( !(mesh.adja) && !_MMG5_hashTetra(&mesh,1) ) {
                fprintf(stdout,"  ## Hashing problem. Unable to save mesh.\n");
                _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
            }
            if ( !_MMG5_unscaleMesh(&mesh,&met) )
                _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
            if ( !MMG5_saveMesh(&mesh) )
                _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
            if ( met.m && !MMG5_saveMet(&mesh,&met) )
                _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
            _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE);
        }
    }
    else {
        if( !_MMG5_mmg3d1_pattern(&mesh,&met) ) {
            if ( !(mesh.adja) && !_MMG5_hashTetra(&mesh,1) ) {
                fprintf(stdout,"  ## Hashing problem. Unable to save mesh.\n");
                _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
            }
            if ( !_MMG5_unscaleMesh(&mesh,&met) )
                _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
            if ( !MMG5_saveMesh(&mesh) )
                _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
            if ( met.m && !MMG5_saveMet(&mesh,&met) )
                _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
            _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_LOWFAILURE);
        }
    }
#endif

    chrono(OFF,&MMG5_ctim[3]);
    printim(MMG5_ctim[3].gdif,stim);
    if ( mesh.info.imprim )
        fprintf(stdout,"  -- PHASE 2 COMPLETED.     %s\n",stim);
    fprintf(stdout,"\n  %s\n   END OF MODULE MMG3d: IMB-LJLL \n  %s\n",MG_STR,MG_STR);

    /* save file */
    _MMG5_outqua(&mesh,&met);

    if ( mesh.info.imprim > 3 && !mesh.info.iso )
        _MMG5_prilen(&mesh,&met);

    chrono(ON,&MMG5_ctim[1]);
    if ( mesh.info.imprim )  fprintf(stdout,"\n  -- WRITING DATA FILE %s\n",mesh.nameout);
    if ( !_MMG5_unscaleMesh(&mesh,&met) )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);

    if ( !MMG5_saveMesh(&mesh) )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);

    if ( !MMG5_saveMet(&mesh,&met) )
        _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_STRONGFAILURE);
    chrono(OFF,&MMG5_ctim[1]);
    if ( mesh.info.imprim )  fprintf(stdout,"  -- WRITING COMPLETED\n");

    /* free mem */
    _MMG5_RETURN_AND_FREE(&mesh,&met,MMG5_SUCCESS);
}