⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ibgsave.c

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 C
字号:
/* last edit: Ilja Schmelzer -------------- 20-OCT-1994 11:16:12.44	*/
/************************************************************************/
/*                                                                      */
/*  <<< I B G >>> - Intersection - Based Grid generation package 	*/
/*                                                                      */
/*  Version 1.1 by Ilja Schmelzer   schmelzer@iaas-berlin.d400.de       */
/*                                                                      */
/*  to be distributed under IBG license conditions (see "readme.ibg")	*/
/*                                                                      */
/************************************************************************/
#include "ibgg.h"
#include "ibglib.h"
#include "ibgoutput.h"
#include <stdio.h>

int ibGridSave(ibGrid *gg, FILE *file)
{int rc;
 rc = fprintf(file,"IBGRID unformatted version 1.00\n");
 rc = fwrite(gg,sizeof(ibGrid),1,file);
 rc = fwrite(gg->Point,IBGPOINTSIZE,gg->lastPoint+1,file);
 rc = fwrite(gg->CellType,sizeof(ibgCellType),gg->lastCell+1,file);
 rc = fwrite(gg->CellSegment,sizeof(int),gg->lastCell+1,file);
 rc = fwrite(gg->CPointFirst,sizeof(int),gg->lastCell+1,file);
 rc = fwrite(gg->CSideFirst,sizeof(int),gg->lastCell+1,file);
 rc = fwrite(gg->CPoint,sizeof(int),gg->freeCPoint,file);
 rc = fwrite(gg->CSide,sizeof(int),gg->freeCSide,file);
 if(gg->lastCOut>0){
	rc = fwrite(gg->COutNext,sizeof(int),gg->lastCOut+1,file);
	rc = fwrite(gg->COutside,sizeof(int),gg->lastCOut+1,file);
 }
 return ibgSuccess;
}

ibGrid *ibGridLoad(FILE *file)
{ibGrid *gg = malloc(sizeof(ibGrid));
 int rc;
 rc = fscanf(file,"IBGRID unformatted version 1.00\n");
 if(rc==EOF) {ibgmessage(ibgMELoadError); ibGridFree(gg); return ibgNULL;}
 rc = fread(gg,sizeof(ibGrid),1,file);
 gg->Point	= malloc(IBGPOINTSIZE*(gg->maxPoint+1));
 gg->CellType	= malloc(sizeof(ibgCellType)*(gg->maxCell+1));
 gg->CellSegment	= malloc(sizeof(int)*(gg->maxCell+1));
 gg->CPointFirst	= malloc(sizeof(int)*(gg->maxCell+1));
 gg->CSideFirst	= malloc(sizeof(int)*(gg->maxCell+1));
 gg->CPoint	= malloc(sizeof(int)*(gg->maxCPoint+1));
 gg->CSide	= malloc(sizeof(int)*(gg->maxCSide+1));
 rc = fread(gg->Point,IBGPOINTSIZE,gg->lastPoint+1,file);
 rc = fread(gg->CellType,sizeof(ibgCellType),gg->lastCell+1,file);
 rc = fread(gg->CellSegment,sizeof(int),gg->lastCell+1,file);
 rc = fread(gg->CPointFirst,sizeof(int),gg->lastCell+1,file);
 rc = fread(gg->CSideFirst,sizeof(int),gg->lastCell+1,file);
 rc = fread(gg->CPoint,sizeof(int),gg->freeCPoint,file);
 rc = fread(gg->CSide,sizeof(int),gg->freeCSide,file);
 if(gg->lastCOut>0){
	gg->COutNext	= malloc(sizeof(int)*(gg->maxCOut+1));
	gg->COutside	= malloc(sizeof(int)*(gg->maxCOut+1));
	rc = fread(gg->COutNext,sizeof(int),gg->lastCOut+1,file);
	rc = fread(gg->COutside,sizeof(int),gg->lastCOut+1,file);
 }
 return gg;
}

int ibGridWrite(ibGrid *gg, FILE *file)
{int i,rc;
 rc = fprintf(file,"IBGRID ASCII-format version 1.00\n");
 rc = fprintf(file,"grid dimension %d space dimension %d\n"
		,gg->gridDimension, gg->spaceDimension);
 rc = fprintf(file,"Window x: %f %f y: %f %f z: %f %f\n"
		,gg->xmin[0],gg->xmax[0]
		,gg->xmin[1],gg->xmax[1]
		,gg->xmin[2],gg->xmax[2]);
 rc = fprintf(file,"maximal Point: %d Cell: %d CN: %d CS: %d CO: %d\n"
		,gg->maxPoint,gg->maxCell,gg->maxCPoint
		,gg->maxCSide,gg->maxCOut);
 rc = fprintf(file,"first   Point: %d Cell: %d\n"
		,gg->firstPoint,gg->firstCell);
 rc = fprintf(file,"        Reg: %d Face: %d Line: %d Vert: %d\n"
		,gg->firstRegion,gg->firstFace,gg->firstLine,gg->firstNode);
 rc = fprintf(file,"last    Point: %d Cell: %d CO: %d\n"
		,gg->lastPoint,gg->lastCell,gg->lastCOut);
 rc = fprintf(file,"        Reg: %d Face: %d Line: %d Vert: %d\n"
		,gg->lastRegion,gg->lastFace,gg->lastLine,gg->lastNode);
 rc = fprintf(file,"free    CPoint: %d CSide: %d\n"
		,gg->freeCPoint,gg->freeCSide);
 rc = fprintf(file,"point data:\n");
 for(i=gg->firstPoint;i<=gg->lastPoint;i++){
	rc = fprintf(file,"%d: %f %f %f %d %d\n",i
		,gg->Point[i].xx[0],gg->Point[i].xx[1],gg->Point[i].xx[2]
		,(int)gg->Point[i].tt
		,gg->Point[i].uu);
 }
 rc = fprintf(file,"cell data:\n");
 for(i=gg->firstCell;i<=gg->lastCell;i++){
	rc = fprintf(file,"%d: %d %d %d %d\n",i
		,(int)gg->CellType[i]
		,gg->CellSegment[i]
		,gg->CPointFirst[i]
		,gg->CSideFirst[i]);
 }
 rc = fprintf(file,"cellpoint data:\n");
 for(i=0;i<gg->freeCPoint;i++){
	rc = fprintf(file,"%d: %d\n",i
		,gg->CPoint[i]);
 }
 rc = fprintf(file,"cellside data:\n");
 for(i=0;i<gg->freeCSide;i++){
	rc = fprintf(file,"%d: %d\n",i
		,gg->CSide[i]);
 }
 rc = fprintf(file,"celloutside data:\n");
 for(i=1;i<=gg->lastCOut;i++){
	rc = fprintf(file,"%d: %d\n",i
		,gg->COutNext[i]
		,gg->COutside[i]);
 }
 rc = fprintf(file,"end of ibGrid\n");
 return ibgSuccess;
}

#define buflen 1000
static char buffer[buflen];

ibGrid *ibGridRead(FILE *file)
{int i,i0,rc;
 ibgSegmentType utyp;
 ibgCellType ctyp;
 ibGrid *gg = calloc(1,sizeof(ibGrid));
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"IBGRID ASCII-format version 1.00");
 if(rc==EOF) {ibgmessage(ibgMELoadError); ibGridFree(gg); return ibgNULL;}
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"grid dimension %d space dimension %d"
		,&(gg->gridDimension),&(gg->spaceDimension));
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"Window x: %f %f y: %f %f z: %f %f"
		,&(gg->xmin[0]),&(gg->xmax[0])
		,&(gg->xmin[1]),&(gg->xmax[1])
		,&(gg->xmin[2]),&(gg->xmax[2]));
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"maximal Point: %d Cell: %d CN: %d CS: %d CO: %d"
		,&(gg->maxPoint),&(gg->maxCell),&(gg->maxCPoint)
		,&(gg->maxCSide),&(gg->maxCOut));
 fgets(buffer,buflen,file);                  
 rc = sscanf(buffer,"first   Point: %d Cell: %d"
		,&(gg->firstPoint),&(gg->firstCell));
 fgets(buffer,buflen,file);                  
 rc = sscanf(buffer,"        Reg: %d Face: %d Line: %d Vert: %d"
		,&(gg->firstRegion),&(gg->firstFace)
		,&(gg->firstLine),&(gg->firstNode));
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"last    Point: %d Cell: %d CO: %d"
		,&(gg->lastPoint),&(gg->lastCell),&(gg->lastCOut));
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"        Reg: %d Face: %d Line: %d Vert: %d"
		,&(gg->lastRegion),&(gg->lastFace)
		,&(gg->lastLine),&(gg->lastNode));
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"free    CPoint: %d CSide: %d"
		,&(gg->freeCPoint),&(gg->freeCSide));
 gg->Point	= malloc(IBGPOINTSIZE*(gg->maxPoint+1));
 gg->CellType	= malloc(sizeof(ibgCellType)*(gg->maxCell+1));
 gg->CellSegment	= malloc(sizeof(int)*(gg->maxCell+1));
 gg->CPointFirst	= malloc(sizeof(int)*(gg->maxCell+1));
 gg->CSideFirst	= malloc(sizeof(int)*(gg->maxCell+1));
 gg->CPoint	= malloc(sizeof(int)*(gg->maxCPoint+1));
 gg->CSide	= malloc(sizeof(int)*(gg->maxCSide+1));
 gg->COutNext	= malloc(sizeof(int)*(gg->maxCOut+1));
 gg->COutside	= malloc(sizeof(int)*(gg->maxCOut+1));
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"point data:");
 for(i=gg->firstPoint;i<=gg->lastPoint;i++){
	fgets(buffer,buflen,file);
	rc = sscanf(buffer,"%d: %f %f %f %d %d",&i0
		,&(gg->Point[i].xx[0]),&(gg->Point[i].xx[1]),&(gg->Point[i].xx[2])
		,&utyp
		,&(gg->Point[i].uu));
	gg->Point[i].tt = utyp;
	ibgAssert(i==i0);
 }
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"cell data:");
 for(i=gg->firstCell;i<=gg->lastCell;i++){
	fgets(buffer,buflen,file);
	rc = sscanf(buffer,"%d: %d %d %d %d",&i0
		,&ctyp
		,&(gg->CellSegment[i])
		,&(gg->CPointFirst[i])
		,&(gg->CSideFirst[i]));
	gg->CellType[i] = ctyp;
	ibgAssert(i==i0);
 }
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"cellpoint data:");
 for(i=0;i<gg->freeCPoint;i++){
	fgets(buffer,buflen,file);
	rc = sscanf(buffer,"%d: %d",&i0
		,&(gg->CPoint[i]));
	ibgAssert(i==i0);
 }
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"cellside data:");
 for(i=0;i<gg->freeCSide;i++){
	fgets(buffer,buflen,file);
	rc = sscanf(buffer,"%d: %d",&i0
		,&(gg->CSide[i]));
	ibgAssert(i==i0);
 }
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"celloutside data:");
 for(i=0;i<=gg->lastCOut;i++){
	fgets(buffer,buflen,file);
	rc = sscanf(buffer,"%d: %d",&i
		,&(gg->COutNext[i])
		,&(gg->COutside[i]));
 }
 fgets(buffer,buflen,file);
 rc = sscanf(buffer,"end of ibGrid");
 return gg;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -