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

📄 ibgd1d.c

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 C
字号:
/* last edit: Ilja Schmelzer -------------- 10-JUN-1994 15:04:55.40	*/
/************************************************************************/
/*                                                                      */
/*  <<< 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")	*/
/*                                                                      */
/************************************************************************/
/* <<< ibgD1D >>> - Intersection-Based Geometry - 1D intersection of 3D geom.
*/
#include "ibglib.h"
#include "ibgd.h"
#include "ibgi.h"
#include "ibg.h"
#include "ibgd0.h"
#include "ibgdefault.h"

typedef struct{
	ibGeometryRec	g;
	ibGeometry	gold;
	ibgFloat	y;
	ibgFloat	z;
}ibgD1DRec,*ibgD1D;

static int RegionOfPoint(ibGeometry g, ibgPoint *nint, ibgPoint *nold)
{ibgD1D gz = (ibgD1D )g;
 ibgFloat y0,y1,z0,z1;
 int rc;
 y0 = ibgpX(*nint)[1]; 
 z0 = ibgpX(*nint)[2]; 
 ibgpX(*nint)[1] = gz->y;
 ibgpX(*nint)[2] = gz->z;
 if(nold){
	y1 = ibgpX(*nold)[1]; 
	z1 = ibgpX(*nold)[2]; 
	ibgpX(*nold)[1] = gz->y;
	ibgpX(*nold)[2] = gz->z;
 }
 rc = ibgiRegionOfPoint(gz->gold,nint,nold);
 ibgpX(*nint)[1] = y0;
 ibgpX(*nint)[2] = z0;
 if(nold){
	ibgpX(*nold)[1] = y1;
	ibgpX(*nold)[2] = z1;
 }
 return rc;
}

static int FaceWithEdge(ibGeometry g, ibgPoint *nint, 
			ibgPoint *n1, ibgPoint *n2)
{ibgD1D gz = (ibgD1D )g;
 ibgDouble xx,dx,pp,y1,y2,z1,z2;
 int rc;
 y1 = ibgpX(*n1)[1]; 
 y2 = ibgpX(*n2)[1]; 
 z1 = ibgpX(*n1)[2]; 
 z2 = ibgpX(*n2)[2]; 
 ibgpX(*n1)[1] = gz->y;
 ibgpX(*n2)[1] = gz->y;
 ibgpX(*n1)[2] = gz->z;
 ibgpX(*n2)[2] = gz->z;
 rc = ibgiFaceWithEdge(gz->gold,nint,n1,n2);
 ibgpX(*n1)[1] = y1;
 ibgpX(*n2)[1] = y2;
 ibgpX(*n1)[2] = z1;
 ibgpX(*n2)[2] = z2;
 dx = ibgpX(*n2)[0] - ibgpX(*n1)[0];
 xx = ibgpX(*nint)[0] - ibgpX(*n1)[0];
 if(dx == 0.0)	pp = 0.0;
 else 		pp = xx/dx;
 ibgpX(*nint)[2] = y1 + pp*(y2-y1);
 ibgpX(*nint)[2] = z1 + pp*(z2-z1);
 return rc;
}

static int Free(ibGeometry g)
{ibgD1D gz=((ibgD1D )g);
 ibgdFree(gz->gold);
 return ibgSuccess;
}

static ibGeometryClassRec	ibgD1DClass;

ibGeometry ibgd1D(ibGeometry gold, ibgFloat z)
{ibgD1DRec  *fnc;
 fnc = malloc(sizeof(ibgD1DRec));
 fnc->gold = gold;
 fnc->z    = z;
 ibgdInitialize((ibGeometry)fnc,&ibgD1DClass);
 ibgD1DClass.RegionOfPoint = (ibgdFunctionRegionOfPoint) RegionOfPoint;
 ibgD1DClass.FaceWithEdge = (ibgdFunctionFaceWithEdge)FaceWithEdge;
 ibgD1DClass.Free = Free;
 return (ibGeometry)fnc;
}

⌨️ 快捷键说明

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