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

📄 ibgc.c

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 C
字号:
/* last edit: Ilja Schmelzer -------------- 10-JUN-1994 15:04:45.43	*/
/************************************************************************/
/*                                                                      */
/*  <<< 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 "ibgc.h"
#include "ibg.h"
#include "ibglib.h"

int	ibgcpoints[IBGCTMAX];
int	ibgcedges[IBGCTMAX];
int	ibgcsides[IBGCTMAX];
int	ibgcudim[IBGCTMAX];
int	ibgcgdim[IBGCTMAX];
int	ibgccdim[IBGCTMAX];
char	*ibgcname[IBGCTMAX];
int	ibgcepoint1[IBGCTMAX][IBGCEMAX];
int	ibgcepoint2[IBGCTMAX][IBGCEMAX];
int	ibgcesidel[IBGCTMAX][IBGCEMAX];
int	ibgcesider[IBGCTMAX][IBGCEMAX];
int	ibgcssize[IBGCTMAX][IBGCSMAX];
int	ibgcsside[IBGCTMAX][IBGCSMAX][4];
int	ibgcsedge[IBGCTMAX][IBGCSMAX][4];
int	ibgcspoint[IBGCTMAX][IBGCSMAX][5];

void ibgcInit()
{int t,s,e,ee;
				/* <<< ibgc0Nothing >>> */
ibgcName(ibgc0Nothing)	= "Null";
ibgcPoints(ibgc0Nothing)	= 0;
ibgcEdges(ibgc0Nothing)	= 0;
ibgcSides(ibgc0Nothing)	= 0;
ibgcCODIM(ibgc0Nothing)	= ibgSNothing;
ibgcGDIM(ibgc0Nothing)	= ibgSNothing;
ibgcCDIM(ibgc0Nothing)	= 0;
				/* <<< ibgc0Node >>> */
ibgcName(ibgc0Node)	= "Node 0D";
ibgcPoints(ibgc0Node)	= 1;
ibgcEdges(ibgc0Node)	= 0;
ibgcSides(ibgc0Node)	= 0;
ibgcCODIM(ibgc0Node)	= ibgSRegion;
ibgcGDIM(ibgc0Node)	= 0;
ibgcCDIM(ibgc0Node)	= 0;
				/* <<< ibgc1Node >>> */
ibgcName(ibgc1Node)	= "Node 1D";
ibgcPoints(ibgc1Node)	= 1;
ibgcEdges(ibgc1Node)	= 0;
ibgcSides(ibgc1Node)	= 0;
ibgcCODIM(ibgc1Node)	= ibgSFace;
ibgcGDIM(ibgc1Node)	= 1;
ibgcCDIM(ibgc1Node)	= 0;
				/* <<< ibgc2Node >>> */
ibgcName(ibgc2Node)	= "Node 2D";
ibgcPoints(ibgc2Node)	= 1;
ibgcEdges(ibgc2Node)	= 0;
ibgcSides(ibgc2Node)	= 0;
ibgcCODIM(ibgc2Node)	= ibgSLine;
ibgcGDIM(ibgc2Node)	= 2;
ibgcCDIM(ibgc2Node)	= 0;
				/* <<< ibgc3Node >>> */
ibgcName(ibgc3Node)	= "Node 3D";
ibgcPoints(ibgc3Node)	= 1;
ibgcEdges(ibgc3Node)	= 0;
ibgcSides(ibgc3Node)	= 0;
ibgcCODIM(ibgc3Node)	= ibgSNode;
ibgcGDIM(ibgc3Node)	= 3;
ibgcCDIM(ibgc3Node)	= 0;
				/* <<< ibgc1Edge >>> */
ibgcName(ibgc1Edge)	= "Line 1D";
ibgcPoints(ibgc1Edge)	= 2;
ibgcEdges(ibgc1Edge)	= 1;
ibgcSides(ibgc1Edge)	= 2;
ibgcCODIM(ibgc1Edge)	= ibgSRegion;
ibgcGDIM(ibgc1Edge)	= 1;
ibgcCDIM(ibgc1Edge)	= 1;
ibgcEPoint1(ibgc1Edge,0)	= 0;
ibgcEPoint2(ibgc1Edge,0)	= 1;
ibgcSSize(ibgc1Edge,0)	= 1;
ibgcSSize(ibgc1Edge,1)	= 1;
ibgcSPoint1(ibgc1Edge,0,0)	= 0;
ibgcSPoint1(ibgc1Edge,1,0)	= 1;
ibgcSPoint1(ibgc1Edge,0,1)	= 0;
ibgcSPoint1(ibgc1Edge,1,1)	= 1;
				/* <<< ibgc2Edge >>> */
ibgcName(ibgc2Edge)	= "Line 2D";
ibgcPoints(ibgc2Edge)	= 2;
ibgcEdges(ibgc2Edge)	= 1;
ibgcSides(ibgc2Edge) 	= 2;
ibgcCODIM(ibgc2Edge)	= ibgSFace;
ibgcGDIM(ibgc2Edge)	= 2;
ibgcCDIM(ibgc2Edge)	= 1;
ibgcEPoint1(ibgc2Edge,0)	= 0;
ibgcEPoint2(ibgc2Edge,0)	= 1;
ibgcSSize(ibgc2Edge,0)	= 1;
ibgcSSize(ibgc2Edge,1)	= 1;
ibgcSPoint1(ibgc2Edge,0,0)	= 0;
ibgcSPoint1(ibgc2Edge,1,0)	= 1;
ibgcSPoint1(ibgc2Edge,0,1)	= 0;
ibgcSPoint1(ibgc2Edge,1,1)	= 1;
				/* <<< ibgc3Edge >>> */
ibgcName(ibgc3Edge)	= "Line 3D";
ibgcPoints(ibgc3Edge)	= 2;
ibgcEdges(ibgc3Edge)	= 1;
ibgcSides(ibgc3Edge)	= 2;
ibgcCODIM(ibgc3Edge)	= ibgSLine;
ibgcGDIM(ibgc3Edge)	= 3;
ibgcCDIM(ibgc3Edge)	= 1;
ibgcEPoint1(ibgc3Edge,0)	= 0;
ibgcEPoint2(ibgc3Edge,0)	= 1;
ibgcSSize(ibgc3Edge,0)	= 1;
ibgcSSize(ibgc3Edge,1)	= 1;
ibgcSPoint1(ibgc3Edge,0,0)	= 0;
ibgcSPoint1(ibgc3Edge,1,0)	= 1;
ibgcSPoint1(ibgc3Edge,0,1)	= 0;
ibgcSPoint1(ibgc3Edge,1,1)	= 1;
				/* <<< ibgc2Triangle >>> */
ibgcName(ibgc2Triangle)	= "Triangle 2D";
ibgcPoints(ibgc2Triangle)	= 3;
ibgcEdges(ibgc2Triangle)	= 3;
ibgcSides(ibgc2Triangle)	= 3;
ibgcCODIM(ibgc2Triangle)	= ibgSRegion;
ibgcGDIM(ibgc2Triangle)	= 2;
ibgcCDIM(ibgc2Triangle)	= 2;
ibgcEPoint1(ibgc2Triangle,0)	= 1;
ibgcEPoint2(ibgc2Triangle,0)	= 2;
ibgcEPoint1(ibgc2Triangle,1)	= 2;
ibgcEPoint2(ibgc2Triangle,1)	= 0;
ibgcEPoint1(ibgc2Triangle,2)	= 0;
ibgcEPoint2(ibgc2Triangle,2)	= 1;
ibgcSSize(ibgc2Triangle,0)	= 2;
ibgcSSize(ibgc2Triangle,1) 	= 2;
ibgcSSize(ibgc2Triangle,2)	= 2;
ibgcSSide(ibgc2Triangle,0,0)	= 2;
ibgcSSide(ibgc2Triangle,0,1)	= 1;
ibgcSSide(ibgc2Triangle,1,0)	= 0;
ibgcSSide(ibgc2Triangle,1,1)	= 2;
ibgcSSide(ibgc2Triangle,2,0)	= 1;
ibgcSSide(ibgc2Triangle,2,1)	= 0;
ibgcSPoint1(ibgc2Triangle,0,0)	= 1;
ibgcSPoint1(ibgc2Triangle,0,1)	= 2;
ibgcSPoint1(ibgc2Triangle,1,0)	= 2;
ibgcSPoint1(ibgc2Triangle,1,1)	= 0;
ibgcSPoint1(ibgc2Triangle,2,0)	= 0;
ibgcSPoint1(ibgc2Triangle,2,1)	= 1;
		 		/* <<< ibgc3Triangle >>> */
ibgcName(ibgc3Triangle)	= "Triangle 3D";
ibgcPoints(ibgc3Triangle)	= 3;
ibgcEdges(ibgc3Triangle)	= 3;
ibgcSides(ibgc3Triangle)	= 3;
ibgcCODIM(ibgc3Triangle)	= ibgSFace;
ibgcGDIM(ibgc3Triangle)	= 3;
ibgcCDIM(ibgc3Triangle)	= 2;
ibgcEPoint1(ibgc3Triangle,0)	= 1;
ibgcEPoint2(ibgc3Triangle,0)	= 2;
ibgcEPoint1(ibgc3Triangle,1)	= 2;
ibgcEPoint2(ibgc3Triangle,1)	= 0;
ibgcEPoint1(ibgc3Triangle,2)	= 0;
ibgcEPoint2(ibgc3Triangle,2)	= 1;
ibgcSSize(ibgc3Triangle,0)	= 2;
ibgcSSize(ibgc3Triangle,1) 	= 2;
ibgcSSize(ibgc3Triangle,2)	= 2;
ibgcSSide(ibgc3Triangle,0,0)	= 2;
ibgcSSide(ibgc3Triangle,0,1)	= 1;
ibgcSSide(ibgc3Triangle,1,0)	= 0;
ibgcSSide(ibgc3Triangle,1,1)	= 2;
ibgcSSide(ibgc3Triangle,2,0)	= 1;
ibgcSSide(ibgc3Triangle,2,1)	= 0;
ibgcSPoint1(ibgc3Triangle,0,0)	= 1;
ibgcSPoint1(ibgc3Triangle,0,1)	= 2;
ibgcSPoint1(ibgc3Triangle,1,0)	= 2;
ibgcSPoint1(ibgc3Triangle,1,1)	= 0;
ibgcSPoint1(ibgc3Triangle,2,0)	= 0;
ibgcSPoint1(ibgc3Triangle,2,1)	= 1;
				/* <<< ibgc2Rectangle >>> */
ibgcName(ibgc2Rectangle)	= "Rectangle 2D";
ibgcPoints(ibgc2Rectangle)	= 4;
ibgcEdges(ibgc2Rectangle)	= 4;
ibgcSides(ibgc2Rectangle)	= 4;
ibgcCODIM(ibgc2Rectangle)	= ibgSRegion;
ibgcGDIM(ibgc2Rectangle)	= 2;
ibgcCDIM(ibgc2Rectangle)	= 2;
ibgcEPoint1(ibgc2Rectangle,0)	= 0;
ibgcEPoint2(ibgc2Rectangle,0)	= 1;
ibgcEPoint1(ibgc2Rectangle,1)	= 1;
ibgcEPoint2(ibgc2Rectangle,1)	= 2;
ibgcEPoint1(ibgc2Rectangle,2)	= 2;
ibgcEPoint2(ibgc2Rectangle,2)	= 3;
ibgcEPoint1(ibgc2Rectangle,3)	= 3;
ibgcEPoint2(ibgc2Rectangle,3)	= 0;
ibgcSSize(ibgc2Rectangle,0)	= 2;
ibgcSSize(ibgc2Rectangle,1) 	= 2;
ibgcSSize(ibgc2Rectangle,2)	= 2;
ibgcSSize(ibgc2Rectangle,3)	= 2;
ibgcSSide(ibgc2Rectangle,0,0)	= 3;
ibgcSSide(ibgc2Rectangle,0,1)	= 1;
ibgcSSide(ibgc2Rectangle,1,0)	= 0;
ibgcSSide(ibgc2Rectangle,1,1)	= 2;
ibgcSSide(ibgc2Rectangle,2,0)	= 1;
ibgcSSide(ibgc2Rectangle,2,1)	= 3;
ibgcSSide(ibgc2Rectangle,3,0)	= 2;
ibgcSSide(ibgc2Rectangle,3,1)	= 0;
ibgcSPoint1(ibgc2Rectangle,0,0)	= 0;
ibgcSPoint1(ibgc2Rectangle,0,1)	= 1;
ibgcSPoint1(ibgc2Rectangle,1,0)	= 1;
ibgcSPoint1(ibgc2Rectangle,1,1)	= 2;
ibgcSPoint1(ibgc2Rectangle,2,0)	= 2;
ibgcSPoint1(ibgc2Rectangle,2,1)	= 3;
ibgcSPoint1(ibgc2Rectangle,3,0)	= 3;
ibgcSPoint1(ibgc2Rectangle,3,1)	= 0;
				/* <<< ibgc3Rectangle >>> */
ibgcName(ibgc3Rectangle)		= "Rectangle 3D";
ibgcPoints(ibgc3Rectangle)	= 4;
ibgcEdges(ibgc3Rectangle)	= 4;
ibgcSides(ibgc3Rectangle)	= 4;
ibgcCODIM(ibgc3Rectangle)	= ibgSFace;
ibgcGDIM(ibgc3Rectangle)	= 3;
ibgcCDIM(ibgc3Rectangle)	= 2;
ibgcEPoint1(ibgc3Rectangle,0)	= 0;
ibgcEPoint2(ibgc3Rectangle,0)	= 1;
ibgcEPoint1(ibgc3Rectangle,1)	= 1;
ibgcEPoint2(ibgc3Rectangle,1)	= 2;
ibgcEPoint1(ibgc3Rectangle,2)	= 2;
ibgcEPoint2(ibgc3Rectangle,2)	= 3;
ibgcEPoint1(ibgc3Rectangle,3)	= 3;
ibgcEPoint2(ibgc3Rectangle,3)	= 0;
ibgcSSize(ibgc3Rectangle,0)	= 2;
ibgcSSize(ibgc3Rectangle,1) 	= 2;
ibgcSSize(ibgc3Rectangle,2)	= 2;
ibgcSSize(ibgc3Rectangle,3)	= 2;
ibgcSSide(ibgc3Rectangle,0,0)	= 3;
ibgcSSide(ibgc3Rectangle,0,1)	= 1;
ibgcSSide(ibgc3Rectangle,1,0)	= 0;
ibgcSSide(ibgc3Rectangle,1,1)	= 2;
ibgcSSide(ibgc3Rectangle,2,0)	= 1;
ibgcSSide(ibgc3Rectangle,2,1)	= 3;
ibgcSSide(ibgc3Rectangle,3,0)	= 2;
ibgcSSide(ibgc3Rectangle,3,1)	= 0;
ibgcSPoint1(ibgc3Rectangle,0,0)	= 0;
ibgcSPoint1(ibgc3Rectangle,0,1)	= 1;
ibgcSPoint1(ibgc3Rectangle,1,0)	= 1;
ibgcSPoint1(ibgc3Rectangle,1,1)	= 2;
ibgcSPoint1(ibgc3Rectangle,2,0)	= 2;
ibgcSPoint1(ibgc3Rectangle,2,1)	= 3;
ibgcSPoint1(ibgc3Rectangle,3,0)	= 3;
ibgcSPoint1(ibgc3Rectangle,3,1)	= 0;
				/* <<< ibgc3Tetrahedron >>> */
ibgcName(ibgc3Tetrahedron)	= "Tetrahedron 3D";
ibgcPoints(ibgc3Tetrahedron)	= 4;
ibgcEdges(ibgc3Tetrahedron)	= 6;
ibgcSides(ibgc3Tetrahedron)	= 4;
ibgcCODIM(ibgc3Tetrahedron)	= ibgSRegion;
ibgcGDIM(ibgc3Tetrahedron)	= 3;
ibgcCDIM(ibgc3Tetrahedron)	= 3;
ibgcEPoint1(ibgc3Tetrahedron,0)	= 2;	/* Edge 0 */
ibgcEPoint2(ibgc3Tetrahedron,0)	= 3;
ibgcESideL(ibgc3Tetrahedron,0)	= 0;
ibgcESideR(ibgc3Tetrahedron,0)	= 1;
ibgcEPoint1(ibgc3Tetrahedron,1)	= 3;	/* Edge 1 */
ibgcEPoint2(ibgc3Tetrahedron,1)	= 1;
ibgcESideL(ibgc3Tetrahedron,1)	= 0;
ibgcESideR(ibgc3Tetrahedron,1)	= 2;
ibgcEPoint1(ibgc3Tetrahedron,2)	= 1;	/* Edge 2 */
ibgcEPoint2(ibgc3Tetrahedron,2)   	= 2;
ibgcESideL(ibgc3Tetrahedron,2)	= 0;
ibgcESideR(ibgc3Tetrahedron,2)	= 3;
ibgcEPoint1(ibgc3Tetrahedron,3)	= 0;	/* Edge 3 */
ibgcEPoint2(ibgc3Tetrahedron,3)   	= 1;
ibgcESideL(ibgc3Tetrahedron,3)	= 2;
ibgcESideR(ibgc3Tetrahedron,3)	= 3;
ibgcEPoint1(ibgc3Tetrahedron,4)	= 0;	/* Edge 4 */
ibgcEPoint2(ibgc3Tetrahedron,4)   	= 2;
ibgcESideL(ibgc3Tetrahedron,4)	= 3;
ibgcESideR(ibgc3Tetrahedron,4)	= 1;
ibgcEPoint1(ibgc3Tetrahedron,5)	= 0;	/* Edge 5 */
ibgcEPoint2(ibgc3Tetrahedron,5)   	= 3;
ibgcESideL(ibgc3Tetrahedron,5)	= 1;
ibgcESideR(ibgc3Tetrahedron,5)	= 2;
ibgcSSize(ibgc3Tetrahedron,0)	= 3;	/* Side 0 */
ibgcSSide(ibgc3Tetrahedron,0,0)	= 3;
ibgcSSide(ibgc3Tetrahedron,0,1)	= 1;
ibgcSSide(ibgc3Tetrahedron,0,2)	= 2;
ibgcSEdge(ibgc3Tetrahedron,0,0)	= 2;
ibgcSEdge(ibgc3Tetrahedron,0,1)	= 0;
ibgcSEdge(ibgc3Tetrahedron,0,2)	= 1;
ibgcSPoint1(ibgc3Tetrahedron,0,0)	= 1;
ibgcSPoint1(ibgc3Tetrahedron,0,1)	= 2;
ibgcSPoint1(ibgc3Tetrahedron,0,2)	= 3;
ibgcSPoint1(ibgc3Tetrahedron,0,3)	= 1;
ibgcSSize(ibgc3Tetrahedron,1)	= 3;	/* Side 1 */
ibgcSSide(ibgc3Tetrahedron,1,0)	= 0;
ibgcSSide(ibgc3Tetrahedron,1,1)	= 3;
ibgcSSide(ibgc3Tetrahedron,1,2)	= 2;
ibgcSEdge(ibgc3Tetrahedron,1,0)	= 0;
ibgcSEdge(ibgc3Tetrahedron,1,1)	= 4;
ibgcSEdge(ibgc3Tetrahedron,1,2)	= 5;
ibgcSPoint1(ibgc3Tetrahedron,1,0)	= 3;
ibgcSPoint1(ibgc3Tetrahedron,1,1)	= 2;
ibgcSPoint1(ibgc3Tetrahedron,1,2)	= 0;
ibgcSPoint1(ibgc3Tetrahedron,1,3)	= 3;
ibgcSSize(ibgc3Tetrahedron,2)	= 3;	/* Side 2 */
ibgcSSide(ibgc3Tetrahedron,2,0)	= 3;
ibgcSSide(ibgc3Tetrahedron,2,1)	= 0;
ibgcSSide(ibgc3Tetrahedron,2,2)	= 1;
ibgcSEdge(ibgc3Tetrahedron,2,0)	= 3;
ibgcSEdge(ibgc3Tetrahedron,2,1)	= 1;
ibgcSEdge(ibgc3Tetrahedron,2,2)	= 5;
ibgcSPoint1(ibgc3Tetrahedron,2,0)	= 0;
ibgcSPoint1(ibgc3Tetrahedron,2,1)	= 1;
ibgcSPoint1(ibgc3Tetrahedron,2,2)	= 3;
ibgcSPoint1(ibgc3Tetrahedron,2,3)	= 0;
ibgcSSize(ibgc3Tetrahedron,3)	= 3;	/* Side 3 */
ibgcSSide(ibgc3Tetrahedron,3,0)	= 2;
ibgcSSide(ibgc3Tetrahedron,3,1)	= 1;
ibgcSSide(ibgc3Tetrahedron,3,2)	= 0;
ibgcSEdge(ibgc3Tetrahedron,3,0)	= 3;
ibgcSEdge(ibgc3Tetrahedron,3,1)	= 4;
ibgcSEdge(ibgc3Tetrahedron,3,2)	= 2;
ibgcSPoint1(ibgc3Tetrahedron,3,0)	= 1;
ibgcSPoint1(ibgc3Tetrahedron,3,1)	= 0;
ibgcSPoint1(ibgc3Tetrahedron,3,2)	= 2;
ibgcSPoint1(ibgc3Tetrahedron,3,3)	= 1;

for(t=0;t<=(int)ibgc3Node;t++){
 switch(ibgcCDIM(t)){
	case 3:
	 for(s=0;s<ibgcSides(t);s++){
	  for(e=0;e<ibgcSSize(t,s);e++){
		ee=ibgcSEdge(t,s,e);
		if(ibgcESideL(t,ee)==s){
			ibgassert(ibgcEPoint1(t,ee)==ibgcSPoint1(t,s,e));
			ibgassert(ibgcEPoint2(t,ee)==ibgcSPoint2(t,s,e));
			ibgassert(ibgcESideR(t,ee)==ibgcSSide(t,s,e));
	 	}else if(ibgcESideR(t,ee)==s){
			ibgassert(ibgcEPoint2(t,ee)==ibgcSPoint1(t,s,e));
			ibgassert(ibgcEPoint1(t,ee)==ibgcSPoint2(t,s,e));
			ibgassert(ibgcESideL(t,ee)==ibgcSSide(t,s,e));
		}else	ibgfatal;
	 }}
	 ibgassert(ibgcSides(t)-ibgcEdges(t)+ibgcPoints(t)==2);
	 break;
	case 2:
	 ibgassert(ibgcSides(t)==ibgcEdges(t));
	 ibgassert(ibgcSides(t)==ibgcPoints(t));
	 break;
	case 1:
	 break;
	case 0:
 	 break;
 }
 ibgassert(ibgcGDIM(t)-ibgcCDIM(t)==(int)ibgcCODIM(t));
}
}

⌨️ 快捷键说明

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