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

📄 ibgoutput.c

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 C
📖 第 1 页 / 共 2 页
字号:
/* last edit: Ilja Schmelzer -------------- 28-FEB-1995 11:07:13.73	*/
/************************************************************************/
/*                                                                      */
/*  <<< 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 "ibg.h"
#include "ibgoutput.h"
#include "ibgapplication.h"
#include "ibgdefault.h"
#include "ibgg.h"
#include "ibgc.h"
#include "ibglib.h"
#include "ibgerror.h"
#include <stdio.h>
#include <string.h>

/* declaration of external parameters - ibgSMAX-arrays: */
int		ibgMaterial[ibgSMAX];
int		ibgBCondition[ibgSMAX];
int		ibgColRegion[ibgSMAX];
int		ibgColFace[ibgSMAX];
int		ibgColLine[ibgSMAX];
int		ibgColNode[ibgSMAX];
int		ibgColMaterial[ibgSMAX];
int		ibgColBCondition[ibgSMAX];
ibgBoolean	ibgOSSpecial[ibgSMAX];
char*		ibgNameRegion[ibgSMAX];
char*		ibgNameFace[ibgSMAX];
char*		ibgNameLine[ibgSMAX];
char*		ibgNameNode[ibgSMAX];
char*		ibgNameMaterial[ibgSMAX];
char*		ibgNameBCondition[ibgSMAX];

/* other arrays: */
ibgSegment		ibgOSList[ibgOSMaxLength];
ibgFloat	ibgWX[ibgDIM];
ibgFloat	ibgWAlpha,ibgWBeta;
ibgFloat	ibgWXMin[ibgDIM];
ibgFloat	ibgWXMax[ibgDIM];
ibgColor	ibgColorOf[ibgColorMAX];
char*		ibgColorName[ibgColorMAX];
ibgBoolean	ibgOutputType[IBGSTMAX];
char*		ibgSname[IBGSTMAX] = {"IsRegion","IsFace","IsLine","IsNode",
					""};

/* declaration and initialization of scalar external parameters: */
int 		(*ibgBCDefault)(ibgSegment u1, ibgSegment u2) = ibgBCDefaultDirichlet;
ibgBoolean 	ibgMOn;
ibgBoolean	ibgBCOn;
ibgSegmentType	ibgOSType;
ibgBoolean	ibgOSOutside;
int		ibgOSMode;
int		ibgOSListLength;
char*		ibgOSName;
int		ibgIdPoint;
int		ibgIdCell;
ibgBoolean	ibgWindow;
int		ibgColorFree;
int		ibgColorCurrent;
int		ibgColDoubleBoundary;
int		ibgColSingleBoundary;
int		ibgColOutsideBoundary;
ibgSegment		ibgOSSegment;
ibgBoolean	ibgResetGrid;
char*		ibgNameApplication;
char*		ibgNameFile;
int  		ibgFileMode;
ibGrid		*ibggCurrent;
int  	 	ibgFileModFree;
char*	 	ibgFileModName[ibgFileModMAX];
char*	 	ibgFileType[ibgFileModMAX];
int	 	(*(ibgFileOutput[ibgFileModMAX]))(ibGrid *g, FILE *file);
static 	int	ibgreadcolors();

void	ibgOutputInit()
{ibgSegment u; int color,fmod;
 ibgBCDefault	= ibgBCDefaultDirichlet;
 ibgMOn		= ibgFalse;
 ibgBCOn	= ibgFalse;
 ibgOSType	= ibgSRegion;
 ibgOSOutside	= ibgFalse;
 ibgOSMode	= ibgOSModSpecial;
 ibgOSListLength	= 0;
 ibgOSName	= ibgOSNoName;
 ibgIdPoint	= ibgIdModOff;
 ibgIdCell	= ibgIdModOff;
 ibgWindow	= ibgFalse;
 ibgColorFree	= 0;
 ibgColorCurrent	= -1;
 ibgColDoubleBoundary	= ibgColModMax;
 ibgColSingleBoundary	= ibgColModSelf;
 ibgColOutsideBoundary	= ibgColModSelf;
 ibgOSSegment		= ibgRSpace;
 ibgResetGrid 		= ibgTrue;
 if(ibgNameApplication == ibgNULL) ibgNameApplication	= "ibg";
 ibgNameFile		= "ibg";
 ibgFileMode		= ibgFileModNone;
 ibgFileModFree		= 0;
 ibggCurrent		= ibgNULL;

 for(u=0;u<ibgSMAX;u++){
	ibgMaterial[u]		= u;
	ibgBCondition[u]	= u;
	ibgNameRegion[u]	= ibgOSNoName;
	ibgNameFace[u]		= ibgOSNoName;
	ibgNameMaterial[u]	= ibgOSNoName;
	ibgNameBCondition[u]	= ibgOSNoName;
	ibgColRegion[u]		= ibgColDefaultRegion;
	ibgColFace[u]		= ibgColDefaultFace;
	ibgColLine[u]		= ibgColDefaultLine;
	ibgColNode[u]		= ibgColDefaultNode;
	ibgColMaterial[u]	= ibgColDefaultRegion;
	ibgColBCondition[u]	= ibgColDefaultFace;
	ibgOSSpecial[u]		= ibgTrue;
 }
 for(u=0;u<IBGSTMAX;u++)	ibgOutputType[u] = ibgFalse;
 ibgNameRegion[0]	= "Unknown";
 ibgNameFace[0]		= "Unknown";
 ibgNameMaterial[0]	= "Unknown";
 ibgNameBCondition[0]	= "Unknown";
 ibgNameMaterial[ibgMAir]		= "Air";
 ibgNameRegion[ibgRSpace]		= "Space";
 ibgNameBCondition[ibgBCDirichlet] 	= "Dirichlet";
 ibgNameBCondition[ibgBCNeumann]	= "Neumann";
 ibgNameBCondition[ibgBCMixed]		= "Mixed";
/* color declarations: */
 ibgreadcolors();
 color = ibgDeclareColor("ColBackground",	"#fdf5e6"); /* OldLace	*/
 ibgAssert(color == ibgColBackground);
 color = ibgDeclareColor("ColError",		"#ff0000"); /* red	*/
 ibgAssert(color == ibgColError);
 color = ibgDeclareColor("ColForeground",	"#000000"); /* black	*/
 ibgAssert(color == ibgColForeground);
 color = ibgDeclareColor("ColDefaultNode",	"#b22222"); /* firebrick  */
 ibgAssert(color == ibgColDefaultNode);
 color = ibgDeclareColor("ColDefaultLine",	"#ff6347"); /* tomato	*/
 ibgAssert(color == ibgColDefaultLine);
 color = ibgDeclareColor("ColDefaultFace",	"#e9967a"); /* DarkSalmon */
 ibgAssert(color == ibgColDefaultFace);
 ibgAssert(color == ibgColDefaultBCondition);
 ibgColBCondition[ibgBCDirichlet]    	=
 	 ibgDeclareColor("ColDirichlet", 	"#32cd32"); /* LimeGreen */
 ibgColBCondition[ibgBCNeumann]		=
	 ibgDeclareColor("ColNeumann",		"#4169e1"); /* RoyalBlue */
 ibgColBCondition[ibgBCMixed]		=
	 ibgDeclareColor("ColMixed",		"#20b2aa"); /* LightSeaGreen */
 color = ibgDeclareColor("ColDefaultRegion",	"#a0522d"); /* sienna	*/
 ibgAssert(color == ibgColDefaultRegion);
 ibgAssert(color == ibgColDefaultMaterial);
 ibgColMaterial[ibgMAir] 	       	=  ibgColRegion[ibgRSpace]	=
	 ibgDeclareColor("ColAir",  		"#c0c0c0");	/* gray	*/
/* output function list initialization: */
 fmod =	ibgDeclareFileMode("None",	"",	ibgNoFunction);
 ibgAssert(fmod == ibgFileModNone);
 fmod =	ibgDeclareFileMode("ibgDump",	"dmp",	ibGridSave);
 ibgAssert(fmod == ibgFileModSave);
 fmod =	ibgDeclareFileMode("ibGrid",	"grd",	ibGridWrite);
 ibgAssert(fmod == ibgFileModWrite);
 fmod =	ibgDeclareFileMode("Simplex",	"smp",	ibgToSimplex);
 ibgAssert(fmod == ibgFileModSimplex);
}

void	ibgOutput(ibGrid *g)
{char c,filename[500];
 int i,rc,notype=1;
 FILE *file;
 int d;
 ibggCurrent = g;
 if(ibgResetGrid){
	ibgResetGrid = ibgFalse;
	for(d=0;d<ibgDIM;d++){
		ibgWXMin[d] = ibgridXMin(*g,d);
		ibgWXMax[d] = ibgridXMax(*g,d);
		ibgWX[d]    = ibgridXMax(*g,d) - ibgridXMin(*g,d);
		if(ibgWX[d]<= 0.0) ibgWX[d] = 1.0;
	}
 	ibgWindow = ibgTrue;
	if(ibgridGDIM(*g) == 3){
	      	ibgOutputType[ibgSRegion]	= ibgFalse;
		ibgOutputType[ibgSFace]		= ibgTrue;
	}else{
	      	ibgOutputType[ibgSRegion]	= ibgTrue;
		ibgOutputType[ibgSFace]		= ibgFalse;
	}
 }
/* user control over output parameters: */
 ibgControl();
/* consistency tests: */
 if((ibgFileMode <= ibgFileModNone)||
    (ibgFileMode >= ibgFileModFree)) {
     ibgmessage(ibgMEIncFileMode);
     return;
 }
/* file name creation (with correct file type): */
 i=0;
 while(c=ibgNameFile[i]){
    	filename[i++] = c; if(c=='.') notype=0;
 }
 if(notype){int j=0;
    	filename[i++] = '.';
	while(filename[i++]=(ibgFileType[ibgFileMode])[j++]);
 }
 filename[i++] = '\0';
/* start of file writing: */
 file = fopen(filename,"w");
 if(file==NULL){
	/* unable to open file */
     ibgmessage(ibgMEOpenFile);
     ibgprintf("%s", filename);
     ibgmsgreset;
     return;
 }
 if(ibgFileOutput[ibgFileMode]){
     rc = ibgFileOutput[ibgFileMode](g,file);
     if(rc != ibgSuccess){
	 ibgmessage(ibgMEWriteFile);
     }else{
	 ibgmessage(ibgMIWriteFile);
     }
     ibgprintf("%s", filename);
 }else{
	/* output function not defined */
     ibgmessage(ibgMEIncFileMode);
 }
 ibgmsgreset;
 fclose(file);
 return;
}

ibgBoolean	ibgOSelected(ibgSegment u)
{char* nam;int i;
 switch(ibgOSMode){
 case ibgOSModAll:	return ibgTrue;
 case ibgOSModOne:
	if(u==ibgOSSegment)	return ibgTrue;	else	return ibgFalse;
 case ibgOSModSpecial:
	if((u<0)||(u>=ibgSMAX))	return ibgOSSpecial[0];
	else			return ibgOSSpecial[u];
 case ibgOSModName:
	if((u<0)||(u>=ibgSMAX))	u = 0;
	switch(ibgOSType){
	case ibgSRegion:	nam = ibgNameRegion[u];	break;
	case ibgSFace:		nam = ibgNameFace[u];	break;
	case ibgSLine:		nam = ibgNameLine[u];	break;
	case ibgSNode:	nam = ibgNameNode[u];	break;
	}
	if(strcmp(nam,ibgOSName)) return ibgFalse; else return ibgTrue;
 case ibgOSModNamed:
	if((u<0)||(u>=ibgSMAX))	u = 0;
	switch(ibgOSType){
	case ibgSRegion:	nam = ibgNameRegion[u];	break;
	case ibgSFace:		nam = ibgNameFace[u];	break;
	case ibgSLine:		nam = ibgNameLine[u];	break;
	case ibgSNode:	nam = ibgNameNode[u];	break;
	}
	if(nam == ibgOSNoName)	return ibgFalse; else return ibgTrue;
 case ibgOSModList:
	for(i=0;i<ibgOSListLength;i++){
		if(u == ibgOSList[i])	return ibgTrue;
	}
	return ibgFalse;
 }
}

ibgBoolean	ibgOSelectedRegion(ibgSegment u)
{if(ibgOutputType[ibgSRegion]){
	if(ibgOSType == ibgSRegion)
		return ibgOSelected(u);
	else
		return ibgFalse;
 }else{
	return ibgFalse;
 }
}

ibgBoolean	ibgOSelectedFace(ibgSegment u, ibgSegment left, ibgSegment right)
{if(ibgOutputType[ibgSFace]){
	switch(ibgOSType){
	case ibgSRegion:
		if(!ibgOSOutside){
			if(left==0)	return ibgFalse;
			if(right==0)	return ibgFalse;
		}
		if(ibgOSelected(left))	return ibgTrue;
		if(ibgOSelected(right))	return ibgTrue;
		return ibgFalse;
	case ibgSFace:
		if(u<ibgSMAX)
			return ibgOSelected(u);
	default:
       		return ibgFalse;
	}
 }else{
	return ibgFalse;
 }
}

ibgBoolean	ibgOSelectedLine(ibgSegment u)
{if(ibgOutputType[ibgSLine]){
	switch(ibgOSType){
	case  ibgSLine:
		return ibgOSelected(u);
	case  ibgSNode:
		return ibgFalse;
	default:
		return ibgTrue;
	}
 }else{
	return ibgFalse;
 }
}

ibgBoolean	ibgOSelectedNode(ibgSegment u)
{if(ibgOutputType[ibgSNode]){
	if(ibgOSType == ibgSNode)
		return ibgOSelected(u);
	else
		return ibgTrue;
 }else{
	return ibgFalse;
 }
}

ibgBoolean	ibgIdentPoint(int n, char* ident)
{int num; char* nam; ibgSegmentType typ;
 switch(ibgIdPoint){
 case ibgIdModOff:	return ibgFalse;
 case ibgIdModOn:
	num = n;
	goto numwrite;
 case ibgIdModTyp:
	num = ibgpType(ibgridPoint(*ibggCurrent,n));
	goto numwrite;
 case ibgIdModSegment:
	num = ibgpSegment(ibgridPoint(*ibggCurrent,n));
	goto numwrite;
 case ibgIdModMaterial:

⌨️ 快捷键说明

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