?? cpp1.cpp
字號:
#include <stdlib.h>
#include <iomanip.h>
#include <fstream.h>
#ifndef __SHAPE2D_
#define __SHAPE2D_
void FN(double A,double B,double *N,int *Ele);
void FNA(double A,double B,double *NA,int *Ele);
void FNB(double A,double B,double *NA,int *Ele);
double Inv_jaco(double A,double B,double *xo,double *yo,
double *Nx, double *Ny,int *Ele);
void FN(double A,double B,double *N,int *Ele)
/* A、B—局部坐標(biāo)ξ和η;
N—長度為8的數(shù)組的指針,存放八個插值基函數(shù)值;
Ele—長度為8的數(shù)組的指針,存放插值區(qū)域的節(jié)點
構(gòu)成;如果某元素為零,則意味該節(jié)點不存在。*/
{ if(Ele[4]) N[4]=0.5*(1-A*A)*(1-B);else N[4]=0.0;
if(Ele[5]) N[5]=0.5*(1+A)*(1-B*B);else N[5]=0.0;
if(Ele[6]) N[6]=0.5*(1-A*A)*(1+B);else N[6]=0.0;
if(Ele[7]) N[7]=0.5*(1-A)*(1-B*B);else N[7]=0.0;
N[0]=0.25*(1-A)*(1-B)-0.5*N[7]-0.5*N[4];
N[1]=0.25*(1+A)*(1-B)-0.5*N[4]-0.5*N[5];
N[2]=0.25*(1+A)*(1+B)-0.5*N[5]-0.5*N[6];
N[3]=0.25*(1-A)*(1+B)-0.5*N[6]-0.5*N[7];
return;
}
void FNA(double A,double B,double *NA,int *Ele)
/* A、B—局部坐標(biāo)ξ和η;
NA—長度為8的數(shù)組的指針,存放插值基函數(shù)偏導(dǎo)數(shù)值;
Ele—長度為8的數(shù)組的指針,存放插值區(qū)域的節(jié)點
構(gòu)成;如果某元素為零,則意味該節(jié)點不存在。*/
{ if(Ele[4]) NA[4]=-A*(1-B); else NA[4]=0.0;
if(Ele[5]) NA[5]=0.5*(1-B*B);else NA[5]=0.0;
if(Ele[6]) NA[6]=-A*(1+B); else NA[6]=0.0;
if(Ele[7]) NA[7]=-0.5*(1-B*B); else NA[7]=0.0;
NA[0]=-0.25*(1-B)-0.5*NA[7]-0.5*NA[4];
NA[1]=0.25*(1-B)-0.5*NA[4]-0.5*NA[5];
NA[2]=0.25*(1+B)-0.5*NA[5]-0.5*NA[6];
NA[3]=-0.25*(1+B)-0.5*NA[6]-0.5*NA[7];
return;
}
void FNB(double A,double B,double *NB,int *Ele)
/* A、B—局部坐標(biāo)?和?;
NB—長度為8的數(shù)組的指針,存放插值基函數(shù)偏導(dǎo)數(shù)值;
Ele—長度為8的數(shù)組的指針,存放插值區(qū)域的節(jié)點
構(gòu)成;如果某元素為零,則意味該節(jié)點不存在。*/
{ if(Ele[4]) NB[4]=-0.5*(1-A*A);else NB[4]=0.0;
if(Ele[5]) NB[5]=-B*(1+A); else NB[5]=0.0;
if(Ele[6]) NB[6]=0.5*(1-A*A); else NB[6]=0.0;
if(Ele[7]) NB[7]=-B*(1-A); else NB[7]=0.0;
NB[0]=-0.25*(1-A)-0.5*NB[7]-0.5*NB[4];
NB[1]=-0.25*(1+A)-0.5*NB[4]-0.5*NB[5];
NB[2]=0.25*(1+A)-0.5*NB[5]-0.5*NB[6];
NB[3]=0.25*(1-A)-0.5*NB[6]-0.5*NB[7];
return;
}
double Inv_jaco(double A,double B,double *xo,double *yo,
double *Nx, double *Ny,int *Ele)
/* A、B—局部坐標(biāo)ξ和η;
xo—長度為8的數(shù)組的指針,存放插值節(jié)點總體x坐標(biāo);
yo—長度為8的數(shù)組的指針,存放插值節(jié)點總體y坐標(biāo);
Nx—長度為8的數(shù)組的指針,存放插值基函數(shù)對x偏導(dǎo)數(shù);
Ny—長度為8的數(shù)組的指針,存放插值基函數(shù)對y偏導(dǎo)數(shù);
Ele—長度為8的數(shù)組的指針,存放插值區(qū)域的節(jié)點
構(gòu)成;如果某元素為零,則意味該節(jié)點不存在。
*/
{ int i,j; double detj,temp,NA[8],NB[8],jaco[2][2];
for(i=0;i<2;i++) for(j=0;j<2;j++) jaco[i][j]=0.0;
FNA(A,B,NA,Ele);FNB(A,B,NB,Ele);
for(i=0;i<8;i++) if(Ele[i])
{ jaco[0][0]+=NA[i]*xo[i];jaco[0][1]+=NA[i]*yo[i];
jaco[1][0]+=NB[i]*xo[i];jaco[1][1]+=NB[i]*yo[i];
}
detj=jaco[0][0]*jaco[1][1]-jaco[0][1]*jaco[1][0];
if(detj<1.0e-16)
{ ofstream Out("file.err"); Out<<"detj<=0\n";Out.close();exit(1); }
temp=jaco[0][0]/detj; jaco[0][0]=jaco[1][1]/detj; jaco[1][1]=temp;
jaco[0][1]=-jaco[0][1]/detj; jaco[1][0]=-jaco[1][0]/detj;
for(i=0;i<8;i++) if(Ele[i])
{ Nx[i]=jaco[0][0]*NA[i]+jaco[0][1]*NB[i];
Ny[i]=jaco[1][0]*NA[i]+jaco[1][1]*NB[i];
}
return(detj);
}
#endif;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -