#Supplementary Material (ESI) for Lab on a Chip #This journal is © The Royal Society of Chemistry 2010 #include #include #include // sort, max_element, random_shuffle, remove_if, lower_bound #include // greater, bind2nd using namespace std; #include #include #include #include #include #include #include "TECIO.h" #include #include #include #ifdef _MSC_VER // Windows #include #include #include #else // Linux #include #include #include #endif /*_MSC_VER*/ extern FILE *rf=stdin, *rdev=stdin, *rdev2=stdin,*f=stdout, *wdev=stdout, *f2=stdout, *adev=stdout, *wbdev=stdout,*rbdev=stdin, *f3=stdout, *abdev=stdout; #include "nrutil.h" #include "nrutil.c" #include "myvector.h" #include "myMatrixSolver.h" #include "geometry.h" /*------------------- Global Variable -----------------------------------------*/ int *CPIT_,*subcset_; int *boundCell2_; int *CELL; double *CellRT_; /* calculate the residence time (RT) of visited cell at the ith cell, will be reset */ double *vertex_; double *cellcenter_; int *BetaCell_; int *cbound_, *cbound0_; double *verU_; double *verV_; double *verW_; double *verT_; double *cellU_; double *cellV_; double *cellW_; double *cellT_; int *Deposit_; int *VcCount_, *VbCount_; int *VToC_; unsigned int *VToC0_,*Vbound0_; int *Length_cell_,*cell0_; int *Vbound_; std::vector Bicp_(0); std::vector Bface_(0); std::vector Bregion_(0); std::vector Bound_(0); std::vector Bound0_(0); std::vector Bound_Length_(0); std::vector cell_(0); double *tetra_xyz_; double *tetra_uvw_,*tetra_t_; double *w; int bbcount,cccount; double X_ref, Y_ref, Z_ref; double X_min, Y_min, Z_min; double Sum_slope; double Vel_max; typetrack TR[MXTR+1]; double time0_[MXTR+1]; type_Ellipsoid xyz_Ellip[MXTR+1],xyz_Ellip_DP[T_MXS+1]; typexyz fxyz_spring[2],F_spring_[MAXNb],dfxyz_spring[2],dF_spring1_[MAXNb],dF_spring2_[MAXNb]; typexyz Fevij_[MAXNb], dFevij_[MAXNb][MAXNb], F_Brown_[MAXNb], dF_Brown_[MAXNb]; typexyz OMEGAP_[MXTR][MAXNb], ORIENP_[MXTR][MAXNb]; double *MomegaX_,*MomegaY_,*MomegaZ_,*Meps1P_,*Meps2P_,*Meps3P_,*MetaP_,*MSlope_,*MtempF_,*MTstep_; double *Mtime_,*Mtime0_,*MActE_; int *McellType_,*Mcount_; typevariables FPLo_[T_MXS+1][MAXNb]; typeseed Seed_[T_MXS+1]; typeseed2 *Muvw_, *Mxyz_, quater_[MXTR][MAXNb]; typeseed3 RadVar_[T_MXS+1]; typexyz Ip_cell_[T_MXS+1]; typeseed2 FPEPS_[T_MXS+1][MAXNb]; double GVX_[8*MAXNb],DFdt0_[8*MAXNb], g1_[8*MAXNb], g2_[8*MAXNb], g3_[8*MAXNb], g4_[8*MAXNb], AA_[64*MAXNb*MAXNb],AA0_[64*MAXNb*MAXNb]; double uvxyn_[8*MAXNb+2],uvxy_[8*MAXNb]; typexyz xyzPress_[MAXNb], xyzPP_[MAXNb]; typexyz xyzPP0_[MAXNb],xyzPP1_[MAXNb],xyzPP2_[MAXNb],xyzPP3_[MAXNb]; typexyz uvwP1_[MAXNb],uvwP2_[MAXNb],uvwP0_[MAXNb]; typexyz uvwF1_[MAXNb],uvwF2_[MAXNb],uvwF3_[MAXNb]; typexyz aP1_[MAXNb],aP2_[MAXNb],aP3_[MAXNb]; typexyz aF1_[MAXNb],aF2_[MAXNb],aF3_[MAXNb]; typexyz omP1_[MAXNb],omP2_[MAXNb],omP3_[MAXNb]; typexyz OrienP1_[MAXNb],OrienP2_[MAXNb]; typexyz uvwPP_[MAXNb], uvwF0_[MAXNb], omegaP_[MAXNb]; typeseed2 epsP_[MAXNb]; typeseed2 epsP1_[MAXNb],epsP2_[MAXNb],epsP3_[MAXNb]; typescalar tPP_[MAXNb],alpha_chPP_[MAXNb], tF0_[MAXNb],tF1_[MAXNb]; typescalar tP1_[MAXNb],tP2_[MAXNb],tP0_[MAXNb]; typescalar dtP1_[MAXNb],dtP2_[MAXNb],dtP3_[MAXNb]; typescalar dtFdt1_[MAXNb],dtFdt2_[MAXNb],dtFdt3_[MAXNb]; typescalar alpha_chP1_[MAXNb],alpha_chP2_[MAXNb],alpha_chP3_[MAXNb]; int index_[13*MAXNb]; int lopas[MAXNb]; double arlx[15]; const int tetra[5][4]={{4,5,2,1},{7,2,5,6},{2,7,4,3},{5,4,7,8},{2,4,5,7}}; const int cpit4[1][4]={{1,2,3,4}}; const int cpit5[2][4]={{1,3,5,4},{1,3,5,2}}; const int ocpi5[2][1]={{2},{4}}; const int cpit6[3][4]={{1,6,5,4},{1,5,3,2},{1,3,6,5}}; const int ocpi6[3][2]={{2,3},{4,6},{2,4}}; const int other[5][4]={{6,7,8,3},{1,3,4,8},{1,5,6,8},{1,2,3,6},{1,6,3,8}}; const int other2[3][1]={{3},{1},{1}}; int od[6]={6,4,2,5,3,1}; int od2[6]={1,3,5,6,2,4}; int od3[6]={4,2,6,3,5,1}; //structure of a record(148):time_(14),tstep(14):lopa(8):xp(14),yp(14),zp(14),up(14),vp(14),wp(14),act(14),weight(14); char recform1[] ="%14e%14e%8d%14e%14e%14e%14e%14e%14e%14e%14e"; char recform2[] ="%14lf%14lf%8d%14lf%14lf%14lf%14lf%14lf%14lf%14lf%14lf"; char dspform[] ="%-e %e %6d %e %e %e %e %e %e %e %e"; int iPath; int id; static int iset=0; static double gset; double fac_g,rsq_g,v1_g,v2_g; int Brown_c; double dzy,dyx,wzy,wxz,wyx; double Minor_a,Major_b,Beta_ab; char rfm1[81]="%lf\n"; char rfm2[81]="%lf %lf\n"; char rfm3[81]="%lf %lf %lf\n"; char rfm4[81]="%lf %lf %lf %lf\n"; char rfm5[81]="%lf %lf %lf %lf %lf\n"; char rfm6[81]="%lf %lf %lf %lf %lf %lf\n"; char rfm7[81]="%lf %lf %lf %lf %lf %lf %lf\n"; char rfm8[81]="%lf %lf %lf %lf %lf %lf %lf %lf\n"; char rfm9[81]="%lf %lf %lf %lf %lf %lf %lf %lf %lf\n"; char ifm1[81]="%d\n"; char ifm2[81]="%d %d\n"; char ifm3[81]="%d %d %d\n"; char ifm4[81]="%d %d %d %d\n"; char ifm5[81]="%d %d %d %d %d\n"; char ifm6[81]="%d %d %d %d %d %d\n"; char ifm7[81]="%d %d %d %d %d %d %d\n"; char ifm8[81]="%d %d %d %d %d %d %d %d\n"; char ifm9[81]="%d %d %d %d %d %d %d %d %d\n"; char ifm10[81]="%d %d %d %d %d %d %d %d %d %d\n"; /*------------------------------------------------------------------------*/ char sfm9[81]="%d %lf %lf %lf %lf %lf %lf %lf %lf\n"; /**************************************************************************/ void loadgeom0() /**************************************************************************/ { out(f,"\n ---------------------------------------------------------------" "\n WELCOME TO Cell Dynamic Solver for Microfluidics." "\n Polymerase Chain Reaction Chip." "\n Biomedical Microdevices and Microenvironments Laboratory." "\n Department of BioMedical Engineering" "\n Boston University" "\n" "\n " "\n This program was developed by Min-Cheol Kim, Ph.D." "\n ---------------------------------------------------------------" "\n" "\n ENTER YOUR JOB NAME \? "); gets(jobname); if(strlen(jobname) == 0) strcat(jobname,"job"); strcpy(jobvertex,jobname); strcat(jobvertex,".vrt"); strcpy(jobcell,jobname); strcat(jobcell,".cel"); strcpy(jobbound,jobname); strcat(jobbound,".bnd"); strcpy(jobbound2,jobname); strcat(jobbound2,".bnd2"); strcpy(jobconnect,jobname); strcat(jobconnect,".con"); strcpy(jobvertexbc,jobname); strcat(jobvertexbc,".vbc"); strcpy(jobprob,jobname); strcat(jobprob,".prb"); strcpy(jobcset,jobname); strcat(jobcset,".cst"); strcpy(jobfemlab1,jobname); strcat(jobfemlab1,".gfl"); strcpy(jobfemlab2,jobname); strcat(jobfemlab2,".bfl"); strcpy(jobcollision ,jobname); strcat(jobcollision ,".col"); strcpy(jobdeposition ,jobname); strcat(jobdeposition ,".dps"); // Loading Problem ifrdev(jobprob) { out(f,"\n *ERROR-UNABLE TO OPEN %s", jobprob); exit(1); } else out(f,"\n LOADING PROBLEM DATA FROM FILE %s\n", jobprob); skip(8); fscanf(rdev,ifm7, &menu,&effect,&TrackWrite,&WallPara_Cal,&TrackRead,&opengl,&tecplot); skip(3); fscanf(rdev,"%d %d %d\n",&Mesh, &starcd, &femlab); skip(3); fscanf(rdev,"%lf %lf %d %d %d %d %d\n", &NearWLength,&rhop,&Diffuse, &Magnet,&DEP,&heat); skip(3); fscanf(rdev,"%d %d %lf %lf %d %d %d\n",&STEADY, &NEWTONIAN,&T,&TimeStep,&iter,&Interpolation,&data_type); printf(" number of uvw file in case of transient flow: %d \n", (int)(RoundOff(T/TimeStep))); skip(3); fscanf(rdev,rfm4, &rho,&mu, &SCALE, &Hemoto); skip(3); fscanf(rdev,ifm6, &Dep,&RV, &TempInt, &SLIP, &MaxIter, &Restart); skip(3); fscanf(rdev,ifm2,&s_time, &e_time); skip(2); fscanf(rdev,ifm4,&s_np, &e_np, &inc_np,&BFT1); skip(3); fscanf(rdev,ifm10, &U_tecplot, &V_tecplot, &W_tecplot, &T_tecplot,&MWSS_tecplot, &AWSS_tecplot,&OSI_tecplot, &VRT_tecplot, &NWDP_tecplot,&BF); skip(3); fscanf(rdev,"%lf %d %d %d\n",&Time_P,&S_P,&E_P,&Inc_P); skip(3); fscanf(rdev,"%lf %lf %lf %d\n",&MovieStartT,&MovieEndT, &MovieDT, &NumMovieFrame); skip(3); fscanf(rdev,ifm2, &freq_out, &mon_iter); skip(3); fscanf(rdev,rfm5, &T_anneal,&T_melting,&T_extension,&H_heater,&L_heater); if(RV==1) printf("Radius of particles are variable \n"); else { } omega = 2.*PI/T; nu = mu/rho; alpha = rho/rhop; beta = 1./(1.+0.5*alpha); fclose(rdev); } /**************************************************************************/ real Area(int icp) /**************************************************************************/ { double a[3],b[3],c[3],d[3], temp1[3],temp2[3]; int k; int nv1,nv2,nv3,nv4,B_len; B_len=Bound_Length(icp); nv1=BoundJ(icp,1); nv2=BoundJ(icp,2); nv3=BoundJ(icp,3); if(B_len>3) nv4=BoundJ(icp,4); else nv4=-1; if(nv4!=-1) { for(k=0; k<3; k++) { a[k]=vertex(nv3,k+1)-vertex(nv2,k+1); b[k]=vertex(nv1,k+1)-vertex(nv2,k+1); c[k]=vertex(nv1,k+1)-vertex(nv4,k+1); d[k]=vertex(nv3,k+1)-vertex(nv4,k+1); } Cross(a,b,temp1); Cross(c,d,temp2); return ( 0.5*(sqrt(Dot(temp1,temp1))+sqrt(Dot(temp2,temp2)) ) ); } else { for(k=0; k<3; k++) { a[k]=vertex(nv3,k+1)-vertex(nv2,k+1); b[k]=vertex(nv1,k+1)-vertex(nv2,k+1); } Cross(a,b,temp1); return ( 0.5*sqrt(Dot(temp1,temp1)) ); } } /**************************************************************************/ void loadCFDdata() // CFD data based on Vertex /**************************************************************************/ { real u1,v1,w1,temp1; int i,n,nv,max_nv; char s[100]; double max1, max2, max3, max4; double min1, min2, min3, min4; double xyz1[3]; // out(f,"\n ENTER YOUR CFD data NAME \? "); gets(CFDname); if(data_type==Vertex_f) { verU_=new double[MXV]; verV_=new double[MXV]; verW_=new double[MXV]; verT_=new double[MXV]; } else if(data_type==Cell_f) { cellU_=new double[MXC]; cellV_=new double[MXC]; cellW_=new double[MXC]; cellT_=new double[MXC]; cellcenter_=new double[3*MXC]; } max1=smallest; max2=smallest; max3=smallest; max4=smallest; min1=Large; min2=Large; min3=Large; min4=Large; if(data_type==Vertex_f) { i=1; max_nv=MXV; } else if(data_type==Cell_f) { i=2; max_nv=MXC; Interpolation=InverseD; } sprintf(s,"_%d.usr",i); strcpy(jobCFDdata,jobname); strcat(jobCFDdata,s); ifrdev(jobCFDdata) { out(f,"\n *ERROR-UNABLE TO OPEN"); exit(1); } out(f,"\n LOADING VERTEX DATA FROM FILE %s\n", jobCFDdata); for(n=1; n <= max_nv; n++) { fscanf(rdev,"%d %lf %lf %lf", &nv,&u1,&v1,&w1); if(heat) fscanf(rdev,"%lf",&temp1); else temp1=293.0; if(data_type==Vertex_f) { verU(i,n)=u1; verV(i,n)=v1; verW(i,n)=w1; verT(i,n)=temp1; } else if(data_type==Cell_f) { cellU(n)=u1; cellV(n)=v1; cellW(n)=w1; cellT(n)=temp1; Ccenter(n, xyz1); cellcenterX(n)=xyz1[0]; cellcenterY(n)=xyz1[1]; cellcenterZ(n)=xyz1[2]; } max1=MAX(max1,u1); min1=MIN(min1,u1); max2=MAX(max2,v1); min2=MIN(min2,v1); max3=MAX(max3,w1); min3=MIN(min3,w1); max4=MAX(max4,temp1); min4=MIN(min4,temp1); } fclose(rdev); out(f,"\n Loading CFD finished \n"); if(heat) out(f,"\n Loading Temperature finished \n"); out(f,"\n max U velocity: %lf m/s \n",max1); out(f," min U velocity: %lf m/s \n",min1); out(f,"\n max V velocity: %lf m/s \n",max2); out(f," min V velocity: %lf m/s \n",min2); out(f,"\n max W velocity: %lf m/s \n",max3); out(f," min W velocity: %lf m/s \n",min3); out(f,"\n max temperature: %lf oC \n",max4); out(f," min temperature: %lf oC \n",min4); VelU_max=max1; VelV_max=max2; VelW_max=max3; VelU_min=min1; VelV_min=min2; VelW_min=min3; Vel_max=sqrt(VelU_max*VelU_max+VelV_max*VelV_max+VelW_max*VelW_max); VelMAX=sqrt(max1*max1+max2+max2+max3*max3); LengMAX=1.0e-2/VelMAX; } /**************************************************************************/ void loadSeed() // Loading Seeding points /**************************************************************************/ { real r1,r2,x1,y1,z1,t1, r0; int n,ns, n0, i,ctype; char s[100]; for(i=1; i<=1; i++) { sprintf(s,"_%d.seed",i); strcpy(jobSeed,jobname); strcat(jobSeed,s); ifrdev(jobSeed) { out(f,"\n *ERROR-UNABLE TO OPEN"); exit(1); } out(f,"\n LOADING SEED POINTS FROM FILE %s\n", jobSeed); fscanf(rdev,"%d ", &Lo_Seed); for(n=1; n <=T_MXS; n++) { fscanf(rdev,"%d %d %lf %lf %lf %lf %lf %lf", &ns,&ctype,&r1,&r2,&x1,&y1,&z1,&t1); SeedX(n)=x1; SeedY(n)=y1; SeedZ(n)=z1; SeedTime(n)=t1; Rpvar1(n)=r1; Rpvar2(n)=r2; celltype(n)=ctype; if(ctype==Ellipsoid) { Minor_a=Rpvar1(n); Major_b=Rpvar2(n); Beta_ab=Major_b/Minor_a; beta_ab2=Beta_ab*Beta_ab; Vpvar(n) = 4.*PI*Minor_a*Minor_a*Minor_a*Beta_ab/3.; Mpvar(n) = rhop*Vpvar(n); Ipx(n)=0.2*Mpvar(n)*(1.+ beta_ab2)*Minor_a*Minor_a; Ipy(n)=0.4*Mpvar(n)*Minor_a*Minor_a; Ipz(n)=Ipx(n); } if(feof(rdev)) { MXS = n-1; break; } } fclose(rdev); } } /**************************************************************************/ void AA( int i,int j) /**************************************************************************/ { if(CPIT(i)==4) { switch (j) { case 1: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,3); Vlist(3)=cellJ(i,2); Vlist(4)=-1; break; case 2: Vlist(1)=-1; Vlist(2)=-1; Vlist(3)=-1; Vlist(4)=-1; break; case 3: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,2); Vlist(3)=cellJ(i,4); Vlist(4)=-1; break; case 4: Vlist(1)=-1; Vlist(2)=-1; Vlist(3)=-1; Vlist(4)=-1; break; case 5: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,4); Vlist(3)=cellJ(i,3); Vlist(4)=-1; break; case 6: Vlist(1)=cellJ(i,2); Vlist(2)=cellJ(i,3); Vlist(3)=cellJ(i,4); Vlist(4)=-1; break; } } else if(CPIT(i)==5) { switch (j) { case 1: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,4); Vlist(3)=cellJ(i,3); Vlist(4)=cellJ(i,2); break; case 2: Vlist(1)=-1; Vlist(2)=-1; Vlist(3)=-1; Vlist(4)=-1; break; case 3: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,2); Vlist(3)=cellJ(i,5); Vlist(4)=-1; break; case 4: Vlist(1)=cellJ(i,5); Vlist(2)=cellJ(i,3); Vlist(3)=cellJ(i,4); Vlist(4)=-1; break; case 5: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,5); Vlist(3)=cellJ(i,4); Vlist(4)=-1; break; case 6: Vlist(1)=cellJ(i,2); Vlist(2)=cellJ(i,3); Vlist(3)=cellJ(i,5); Vlist(4)=-1; break; } } else if(CPIT(i)==6) { switch (j) { case 1: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,3); Vlist(3)=cellJ(i,2); Vlist(4)=-1; break; case 2: Vlist(1)=cellJ(i,4); Vlist(2)=cellJ(i,5); Vlist(3)=cellJ(i,6); Vlist(4)=-1; break; case 3: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,2); Vlist(3)=cellJ(i,5); Vlist(4)=cellJ(i,4); break; case 4: Vlist(1)=-1; Vlist(2)=-1; Vlist(3)=-1; Vlist(4)=-1; break; case 5: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,4); Vlist(3)=cellJ(i,6); Vlist(4)=cellJ(i,3); break; case 6: Vlist(1)=cellJ(i,2); Vlist(2)=cellJ(i,3); Vlist(3)=cellJ(i,6); Vlist(4)=cellJ(i,5); break; } } else { switch (j) { case 1: Vlist(1)=cellJ(i,3); Vlist(2)=cellJ(i,2); Vlist(3)=cellJ(i,6); Vlist(4)=cellJ(i,7); break; case 2: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,4); Vlist(3)=cellJ(i,8); Vlist(4)=cellJ(i,5); break; case 3: Vlist(1)=cellJ(i,4); Vlist(2)=cellJ(i,3); Vlist(3)=cellJ(i,7); Vlist(4)=cellJ(i,8); break; case 4: Vlist(1)=cellJ(i,2); Vlist(2)=cellJ(i,1); Vlist(3)=cellJ(i,5); Vlist(4)=cellJ(i,6); break; case 5: Vlist(1)=cellJ(i,6); Vlist(2)=cellJ(i,5); Vlist(3)=cellJ(i,8); Vlist(4)=cellJ(i,7); break; case 6: Vlist(1)=cellJ(i,1); Vlist(2)=cellJ(i,2); Vlist(3)=cellJ(i,3); Vlist(4)=cellJ(i,4); break; } } } /**************************************************************************/ void Cross(double xyz0[], double xyz1[], double temp[]) // cross product /**************************************************************************/ { double x0,y0,z0,x1,y1,z1; x0=xyz0[0]; y0=xyz0[1]; z0=xyz0[2]; x1=xyz1[0]; y1=xyz1[1]; z1=xyz1[2]; temp[0]=-(y1*z0) + y0*z1; temp[1]=x1*z0 - x0*z1; temp[2]=-(x1*y0) + x0*y1; } /**************************************************************************/ double Dot(double xyz0[], double xyz1[]) // dot product /**************************************************************************/ { double result; double x0,y0,z0,x1,y1,z1; x0=xyz0[0]; y0=xyz0[1]; z0=xyz0[2]; x1=xyz1[0]; y1=xyz1[1]; z1=xyz1[2]; result=x0*x1 + y0*y1 + z0*z1; return result; } /**************************************************************************/ double Dotn(double xyz0[], double xyz1[], int n) /**************************************************************************/ { int i; double k; k=0; for(i=0; icb) { flag=1; for(kk=1; kk<=6; kk++) { cbb=cboundJ(cb,kk); if(cbb==i) { AA(cb,kk); break; } } } else AA(i,j); } for(k=0; k<4; k++) { m=Vlist(k+1); if(m!=-1) { for(l=0; l<3; l++) VXYZ(k,l)=vertex(m,l+1); } } if(Vlist(4)!=-1) { VecMinus(VXYZ_[2],VXYZ_[0],tmp1_); VecMinus(VXYZ_[1],VXYZ_[3],tmp2_); } else { VecMinus(VXYZ_[1],VXYZ_[0],tmp2_); VecMinus(VXYZ_[2],VXYZ_[0],tmp1_); } Cross(tmp1_,tmp2_,tmp4_); mag=sqrt(Dot(tmp4_,tmp4_)); if(mag==0.) for(k=0; k<3; k++) temp[k]=0.; else for(k=0; k<3; k++) temp[k]=tmp4(k)/mag; if(flag==1) for(k=0; k<3; k++) temp[k]*=-1; lab1: ; } /**************************************************************************/ void Nvec2(int i, double temp[]) /* Normal Vector in Boundary */ /**************************************************************************/ { int k, l; int m,B_len; B_len=Bound_Length(i); for(k=1; k<=B_len; k++) { m=BoundJ(i,k); if(m!=-1) { for(l=0; l<3; l++) VXYZ(k-1,l)=vertex(m,l+1); } } if(B_len>3) { VecMinus(VXYZ_[2],VXYZ_[0],tmp1_); VecMinus(VXYZ_[1],VXYZ_[3],tmp2_); } else { VecMinus(VXYZ_[1],VXYZ_[0],tmp2_); VecMinus(VXYZ_[2],VXYZ_[0],tmp1_); } Cross(tmp1_,tmp2_,tmp4_); mag=sqrt(Dot(tmp4_,tmp4_)); if(mag==0.) for(k=0; k<3; k++) temp[k]=0.; else for(k=0; k<3; k++) temp[k]=tmp4(k)/mag; } /**************************************************************************/ int SubtractSet(int A[],int n, int B[], int m) /**************************************************************************/ { int i,j, flag, count, result; count=0; for(i=0; i=1000) { if(count%100==0) { out(f,"%d: searching order is randomly rearraged \n", count); out(f2,"%d: searching order is randomly rearraged \n", count); if(count >= 600) goto Finish; } } a=0; cc=0; for(k=0; k<6; k++) { if(cboundJ(l,od2[k])!=0) { I1=Mindist1(l,od2[k],xyz); } else { a=a+1; goto lab1; } if(I1==-1) { i=cboundJ(l,od2[k]); if(count<1000) { if(i>0) break; } } else if(I1==1) { a=a+1; } else if(I1==0) { cc=1; I2=Mindist2(l,od2[k],xyz); if(I2==0) { ii=cboundJ(l,od2[k]); } else ii=l; } lab1: ; } if(count>=1000) { if( a==5 ) { if(cc==1) { i=ii; goto Finish; } else goto Finish; } } } else { count++; Mix(od2); if(count>=500) { if(count%100==0) { out(f,"%d: searching order is randomly rearraged \n",count); out(f2,"%d: searching order is randomly rearraged \n",count); if(count >= 600) goto Finish; } } a=0; cc=0; for(k=0; k<6; k++) { if(cboundJ(l,od2[k])!=0) { I1=Mindist1(l,od2[k],xyz); } else { a=a+1; goto lab2; } if(I1==-1) { i=cboundJ(l,od2[k]); break; } else if(I1==1) { a=a+1; } else if(I1==0) { cc=1; if(count%2==1) I2=Mindist2(l,od2[k],xyz); else I2=Mindist2(l,od2[k],xyz); if(I2==0) { ii=cboundJ(l,od2[k]); } else ii=l; } lab2: ; } if(count>=500) { if( a==5 ) { if(cc==1) { i=ii; goto Finish; } else goto Finish; } } } if(i < 0) goto Finish; else { if(i==l ) { goto Finish; } else goto Start; } Finish: return i; } /**************************************************************************/ double TriPlane(int vlist[],double plist[]) /**************************************************************************/ { double A[3], B[3], CP[3], tricenter[3]; double x[3], y[3], z[3]; double xc, yc, zc; int i,m; xc=0.; yc=0.; zc=0.; for(i=0; i<3; i++) { m = vlist[i]; x[i] = vertexX(m); y[i] = vertexY(m); z[i] = vertexZ(m); xc=xc+x[i]; yc=yc+y[i]; zc=zc+z[i]; } xc=xc/3.; yc=yc/3.; zc=zc/3.; A[0]=x[0]-x[1]; A[1]=y[0]-y[1]; A[2]=z[0]-z[1]; B[0]=x[2]-x[1]; B[1]=y[2]-y[1]; B[2]=z[2]-z[1]; tricenter[0]=xc; tricenter[1]=yc; tricenter[2]=zc; for(i=0; i<3; i++) { CP[i]=plist[i]-tricenter[i]; } Cross(A,B,tmp6_); DottempCP=Dot(tmp6_,CP); return DottempCP; } /**************************************************************************/ double Phi1(double xp, double yp, double zp, double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0,a1,a2,a3; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(-(x4*y3*z2) + x3*y4*z2 + x4*y2*z3 - x2*y4*z3 - x3*y2*z4 + x2*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a1=(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a2=(-(x3*z2) + x4*z2 + x2*z3 - x4*z3 - x2*z4 + x3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a3=(x3*y2 - x4*y2 - x2*y3 + x4*y3 + x2*y4 - x3*y4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); return (a0 + a1*xp + a2*yp + a3*zp); } /**************************************************************************/ void Find_transform_coordinate_tetra(double xp, double yp, double zp, double xyz[], double eta1[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; eta1[0]=((-y1 + yp)*(x3*z1 - x4*z1 - x1*z3 + x4*z3 + x1*z4 - x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)\ + ((-x1 + xp)*(-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)\ + ((-(x3*y1) + x4*y1 + x1*y3 - x4*y3 - x1*y4 + x3*y4)*(-z1 + zp))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); eta1[1]=((-y1 + yp)*(-(x2*z1) + x4*z1 + x1*z2 - x4*z2 - x1*z4 + x2*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)\ + ((-x1 + xp)*(y2*z1 - y4*z1 - y1*z2 + y4*z2 + y1*z4 - y2*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)\ + ((x2*y1 - x4*y1 - x1*y2 + x4*y2 + x1*y4 - x2*y4)*(-z1 + zp))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); eta1[2]=((-y1 + yp)*(x2*z1 - x3*z1 - x1*z2 + x3*z2 + x1*z3 - x2*z3))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)\ + ((-x1 + xp)*(-(y2*z1) + y3*z1 + y1*z2 - y3*z2 - y1*z3 + y2*z3))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)\ + ((-(x2*y1) + x3*y1 + x1*y2 - x3*y2 - x1*y3 + x2*y3)*(-z1 + zp))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); } /**************************************************************************/ double Phi2(double xp, double yp, double zp, double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0,a1,a2,a3; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(x4*y3*z1 - x3*y4*z1 - x4*y1*z3 + x1*y4*z3 + x3*y1*z4 - x1*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a1=(-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a2=(x3*z1 - x4*z1 - x1*z3 + x4*z3 + x1*z4 - x3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a3=(-(x3*y1) + x4*y1 + x1*y3 - x4*y3 - x1*y4 + x3*y4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); return (a0 + a1*xp + a2*yp + a3*zp); } /**************************************************************************/ double Phi3(double xp, double yp, double zp, double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0,a1,a2,a3; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(-(x4*y2*z1) + x2*y4*z1 + x4*y1*z2 - x1*y4*z2 - x2*y1*z4 + x1*y2*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a1=(y2*z1 - y4*z1 - y1*z2 + y4*z2 + y1*z4 - y2*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a2=(-(x2*z1) + x4*z1 + x1*z2 - x4*z2 - x1*z4 + x2*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a3=(x2*y1 - x4*y1 - x1*y2 + x4*y2 + x1*y4 - x2*y4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); return (a0 + a1*xp + a2*yp + a3*zp); } /**************************************************************************/ double Phi4(double xp, double yp, double zp, double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0,a1,a2,a3; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(x3*y2*z1 - x2*y3*z1 - x3*y1*z2 + x1*y3*z2 + x2*y1*z3 - x1*y2*z3)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a1=(-(y2*z1) + y3*z1 + y1*z2 - y3*z2 - y1*z3 + y2*z3)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a2=(x2*z1 - x3*z1 - x1*z2 + x3*z2 + x1*z3 - x2*z3)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); a3=(-(x2*y1) + x3*y1 + x1*y2 - x3*y2 - x1*y3 + x2*y3)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4); return (a0 + a1*xp + a2*yp + a3*zp); } /**************************************************************************/ double ddPhiPhiPhi1_xx(real x, real y, real z,double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(4*(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4)* (-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4)* (((-(x3*y1) + x4*y1 + x1*y3 - x4*y3 - x1*y4 + x3*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(x3*z1 - x4*z1 - x1*z3 + x4*z3 + x1*z4 - x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x4*y3*z1 - x3*y4*z1 - x4*y1*z3 + x1*y4*z3 + x3*y1*z4 - x1*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2) + (2*pow(-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4,2)*(((x3*y2 - x4*y2 - x2*y3 + x4*y3 + x2*y4 - x3*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(-(x3*z2) + x4*z2 + x2*z3 - x4*z3 - x2*z4 + x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (-(x4*y3*z2) + x3*y4*z2 + x4*y2*z3 - x2*y4*z3 - x3*y2*z4 + x2*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2); return (a0); } /**************************************************************************/ double ddPhiPhiPhi2_xx(real x, real y, real z,double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(4*(y2*z1 - y4*z1 - y1*z2 + y4*z2 + y1*z4 - y2*z4)* (y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4)* (((x2*y1 - x4*y1 - x1*y2 + x4*y2 + x1*y4 - x2*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(-(x2*z1) + x4*z1 + x1*z2 - x4*z2 - x1*z4 + x2*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(y2*z1 - y4*z1 - y1*z2 + y4*z2 + y1*z4 - y2*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (-(x4*y2*z1) + x2*y4*z1 + x4*y1*z2 - x1*y4*z2 - x2*y1*z4 + x1*y2*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2) + (2*pow(y2*z1 - y4*z1 - y1*z2 + y4*z2 + y1*z4 - y2*z4,2)*(((x3*y2 - x4*y2 - x2*y3 + x4*y3 + x2*y4 - x3*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(-(x3*z2) + x4*z2 + x2*z3 - x4*z3 - x2*z4 + x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (-(x4*y3*z2) + x3*y4*z2 + x4*y2*z3 - x2*y4*z3 - x3*y2*z4 + x2*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2); return (a0); } /**************************************************************************/ double ddPhiPhiPhi3_xx(real x, real y, real z,double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(4*(-(y2*z1) + y3*z1 + y1*z2 - y3*z2 - y1*z3 + y2*z3)* (y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4)* (((-(x2*y1) + x3*y1 + x1*y2 - x3*y2 - x1*y3 + x2*y3)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(x2*z1 - x3*z1 - x1*z2 + x3*z2 + x1*z3 - x2*z3))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(-(y2*z1) + y3*z1 + y1*z2 - y3*z2 - y1*z3 + y2*z3))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x3*y2*z1 - x2*y3*z1 - x3*y1*z2 + x1*y3*z2 + x2*y1*z3 - x1*y2*z3)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2) + (2*pow(-(y2*z1) + y3*z1 + y1*z2 - y3*z2 - y1*z3 + y2*z3,2)*(((x3*y2 - x4*y2 - x2*y3 + x4*y3 + x2*y4 - x3*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(-(x3*z2) + x4*z2 + x2*z3 - x4*z3 - x2*z4 + x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (-(x4*y3*z2) + x3*y4*z2 + x4*y2*z3 - x2*y4*z3 - x3*y2*z4 + x2*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2); return (a0); } /**************************************************************************/ double ddPhiPhiPhi4_xx(real x, real y, real z,double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*pow(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4,2)* (((-(x3*y1) + x4*y1 + x1*y3 - x4*y3 - x1*y4 + x3*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(x3*z1 - x4*z1 - x1*z3 + x4*z3 + x1*z4 - x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x4*y3*z1 - x3*y4*z1 - x4*y1*z3 + x1*y4*z3 + x3*y1*z4 - x1*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2) + (4*(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4)* (-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4)* (((x3*y2 - x4*y2 - x2*y3 + x4*y3 + x2*y4 - x3*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(-(x3*z2) + x4*z2 + x2*z3 - x4*z3 - x2*z4 + x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (-(x4*y3*z2) + x3*y4*z2 + x4*y2*z3 - x2*y4*z3 - x3*y2*z4 + x2*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2); return (a0); } /**************************************************************************/ double ddPhiPhiPhi5_xx(real x, real y, real z,double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(4*(y2*z1 - y4*z1 - y1*z2 + y4*z2 + y1*z4 - y2*z4)* (-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4)* (((x2*y1 - x4*y1 - x1*y2 + x4*y2 + x1*y4 - x2*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(-(x2*z1) + x4*z1 + x1*z2 - x4*z2 - x1*z4 + x2*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(y2*z1 - y4*z1 - y1*z2 + y4*z2 + y1*z4 - y2*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (-(x4*y2*z1) + x2*y4*z1 + x4*y1*z2 - x1*y4*z2 - x2*y1*z4 + x1*y2*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2) + (2*pow(y2*z1 - y4*z1 - y1*z2 + y4*z2 + y1*z4 - y2*z4,2)*(((-(x3*y1) + x4*y1 + x1*y3 - x4*y3 - x1*y4 + x3*y4)* z)/(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(x3*z1 - x4*z1 - x1*z3 + x4*z3 + x1*z4 - x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(-(y3*z1) + y4*z1 + y1*z3 - y4*z3 - y1*z4 + y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x4*y3*z1 - x3*y4*z1 - x4*y1*z3 + x1*y4*z3 + x3*y1*z4 - x1*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2); return (a0); } { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(x3*y2 - x4*y2 - x2*y3 + x4*y3 + x2*y4 - x3*y4)* (x2*z1 - x3*z1 - x1*z2 + x3*z2 + x1*z3 - x2*z3)* (((-(x2*y1) + x3*y1 + x1*y2 - x3*y2 - x1*y3 + x2*y3)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(x2*z1 - x3*z1 - x1*z2 + x3*z2 + x1*z3 - x2*z3))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(-(y2*z1) + y3*z1 + y1*z2 - y3*z2 - y1*z3 + y2*z3))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x3*y2*z1 - x2*y3*z1 - x3*y1*z2 + x1*y3*z2 + x2*y1*z3 - x1*y2*z3)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2) + (2*(-(x2*y1) + x3*y1 + x1*y2 - x3*y2 - x1*y3 + x2*y3)*(-(x3*z2) + x4*z2 + x2*z3 - x4*z3 - x2*z4 + x3*z4)* (((-(x2*y1) + x3*y1 + x1*y2 - x3*y2 - x1*y3 + x2*y3)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(x2*z1 - x3*z1 - x1*z2 + x3*z2 + x1*z3 - x2*z3))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(-(y2*z1) + y3*z1 + y1*z2 - y3*z2 - y1*z3 + y2*z3))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x3*y2*z1 - x2*y3*z1 - x3*y1*z2 + x1*y3*z2 + x2*y1*z3 - x1*y2*z3)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2) + (2*(-(x2*y1) + x3*y1 + x1*y2 - x3*y2 - x1*y3 + x2*y3)*(x2*z1 - x3*z1 - x1*z2 + x3*z2 + x1*z3 - x2*z3)* (((x3*y2 - x4*y2 - x2*y3 + x4*y3 + x2*y4 - x3*y4)*z)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (y*(-(x3*z2) + x4*z2 + x2*z3 - x4*z3 - x2*z4 + x3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (x*(y3*z2 - y4*z2 - y2*z3 + y4*z3 + y2*z4 - y3*z4))/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4) + (-(x4*y3*z2) + x3*y4*z2 + x4*y2*z3 - x2*y4*z3 - x3*y2*z4 + x2*y3*z4)/ (x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4)))/ pow(x3*y2*z1 - x4*y2*z1 - x2*y3*z1 + x4*y3*z1 + x2*y4*z1 - x3*y4*z1 - x3*y1*z2 + x4*y1*z2 + x1*y3*z2 - x4*y3*z2 - x1*y4*z2 + x3*y4*z2 + x2*y1*z3 - x4*y1*z3 - x1*y2*z3 + x4*y2*z3 + x1*y4*z3 - x2*y4*z3 - x2*y1*z4 + x3*y1*z4 + x1*y2*z4 - x3*y2*z4 - x1*y3*z4 + x2*y3*z4,2); return (a0); } double ddPhi1Phi2_xx(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi2_yy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4)*(-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi2_zz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4)*(-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi2_xy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4)*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi2_xz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4)*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi2_yz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4)*(x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4)*(-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi3_xx(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi3_yy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4)*(x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi3_zz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4)*(-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi3_xy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4)*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi3_xz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4)*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi3_yz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4)*(x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4)*(x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi4_xx(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi4_yy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3)*(x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi4_zz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi4_xy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3)*(x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi4_xz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4)*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(-(y3*z2) + y4*z2 + y2*z3 - y4*z3 - y2*z4 + y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi1Phi4_yz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((-(x3*y2) + x4*(y2 - y3) + x2*y3 - x2*y4 + x3*y4)*(-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(x3*z2 - x2*z3 + x4*(-z2 + z3) + x2*z4 - x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi3_xx(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4)*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi3_yy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4)*(-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi3_zz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4)*(x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi3_xy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4)*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4)*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi3_xz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4)*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4)*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi3_yz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4)*(x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4)*(-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi4_xx(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3)*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi4_yy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3)*(-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi4_zz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi4_xy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3)*(-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3)*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi4_xz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4)*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(y3*z1 - y4*z1 - y1*z3 + y4*z3 + y1*z4 - y3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi2Phi4_yz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((x3*y1 - x1*y3 + x4*(-y1 + y3) + x1*y4 - x3*y4)*(-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(-(x3*z1) + x4*(z1 - z3) + x1*z3 - x1*z4 + x3*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi3Phi4_xx(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3)*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi3Phi4_yy(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3)*(x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi3Phi4_zz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=(2*(x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi3Phi4_xy( double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3)*(x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3)*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi3Phi4_xz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4)*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(-(y2*z1) + y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ double ddPhi3Phi4_yz(double xyz[]) /**************************************************************************/ { real x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; real a0; x1=xyz[0]; y1=xyz[1]; z1=xyz[2]; x2=xyz[3]; y2=xyz[4]; z2=xyz[5]; x3=xyz[6]; y3=xyz[7]; z3=xyz[8]; x4=xyz[9]; y4=xyz[10]; z4=xyz[11]; a0=((-(x2*y1) + x4*(y1 - y2) + x1*y2 - x1*y4 + x2*y4)*(-(x2*z1) + x3*(z1 - z2) + x1*z2 - x1*z3 + x2*z3))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2) + ((x2*y1 - x1*y2 + x3*(-y1 + y2) + x1*y3 - x2*y3)*(x2*z1 - x1*z2 + x4*(-z1 + z2) + x1*z4 - x2*z4))/ pow(x2*y3*z1 - x2*y4*z1 - x1*y3*z2 + x1*y4*z2 - x2*y1*z3 + x1*y2*z3 - x1*y4*z3 + x2*y4*z3 + x4*(y2*z1 - y3*z1 - y1*z2 + y3*z2 + y1*z3 - y2*z3) + x2*y1*z4 - x1*y2*z4 + x1*y3*z4 - x2*y3*z4 + x3*(y4*z1 + y1*z2 - y4*z2 - y1*z4 + y2*(-z1 + z4)),2); return (a0); } /**************************************************************************/ void LinearQ(double x, double y, double z, double t_xyz[], double t_phi[], double phi_linear[], int vec) /**************************************************************************/ { int i,LenVar; double P1, P2, P3, P4; if(vec==1) LenVar=3; else LenVar=1; P1=Phi1(x,y,z, t_xyz); P2=Phi2(x,y,z, t_xyz); P3=Phi3(x,y,z, t_xyz); P4=Phi4(x,y,z, t_xyz); for(i=0; i3) { for(k=0; k<3; k++) result[k] = 0.25* output[k]; } else { for(k=0; k<3; k++) result[k] = output[k]/3.; } } /**************************************************************************/ int ConnectTetandTet(int c) /**************************************************************************/ { int result; result=c+1; return result; } /**************************************************************************/ int ConnectTetandPiramid(int c) /**************************************************************************/ { int c1; c1=c+2; return c1; } /**************************************************************************/ int ConnectTetandPrism(int c) /**************************************************************************/ { int c1; c1=c+3; return c1; } /**************************************************************************/ int ConnectPiramidandTet(int c) /**************************************************************************/ { int c1; c1=c+2; return c1; } /**************************************************************************/ int ConnectPiramidandPiramid(int i,int j, int c) /**************************************************************************/ { int c1; AA(i,j); if(Vlist(3)==Vlist(4)) c1=c+2; else c1=c+1; return c1; } /**************************************************************************/ int ConnectPiramidandPrism(int i,int j, int c) /**************************************************************************/ { int c1; AA(i,j); if(Vlist(3)==Vlist(4)) c1=c+3; else c1=c+2; return c1; } /**************************************************************************/ int ConnectPrismandTet(int c) /**************************************************************************/ { int c1; c1=c+1; return c1; } /**************************************************************************/ int ConnectPrismandPiramid(int i,int j, int c) /**************************************************************************/ { int c1; AA(i,j); if(Vlist(3)==Vlist(4)) c1=c+2; else c1=c+1; return c1; } /**************************************************************************/ int ConnectPrismandPrism(int i,int j, int c) /**************************************************************************/ { int c1; AA(i,j); if(Vlist(3)==Vlist(4)) c1=c+3; else c1=c+2; return c1; } /**************************************************************************/ int ConnectTetandAny(int i,int cb, int c) /**************************************************************************/ { int c1,l,cbb; c1=c; for(l=1; l<=6; l++) { cbb=cboundJ(cb,l); if(cbb>0 && cbb!=i) { if(CPIT(cbb)==4) { c1=ConnectTetandTet(c1); if(HI) c1=ConnectTetandAny2(cb,cbb,c1); } else if(CPIT(cbb)==5) { c1=ConnectTetandPiramid(c1); if(HI) c1=ConnectPiramidandAny(cb,cbb,c1); } else if(CPIT(cbb)==6) { c1=ConnectTetandPrism(c1); if(HI) c1=ConnectPrismandAny2(cb,cbb,c1); } } } return c1; } /**************************************************************************/ int ConnectTetandAny2(int i,int cb, int c) /**************************************************************************/ { int c1,l,cbb; c1=c; for(l=1; l<=6; l++) { cbb=cboundJ(cb,l); if(cbb>0 && cbb!=i) { if(CPIT(cbb)==4) c1=ConnectTetandTet(c1); else if(CPIT(cbb)==5) c1=ConnectTetandPiramid(c1); else if(CPIT(cbb)==6) c1=ConnectTetandPrism(c1); } } return c1; } /**************************************************************************/ int ConnectPiramidandAny(int i,int cb,int c) /**************************************************************************/ { int c1,l,cbb; c1=c; for(l=1; l<=6; l++) { cbb=cboundJ(cb,l); if(cbb>0 && cbb!=i) { if(CPIT(cbb)==4) { c1=ConnectPiramidandTet(c1); if(HI) c1=ConnectTetandAny2(cb,cbb,c1); } else if(CPIT(cbb)==5) { c1=ConnectPiramidandPiramid(cb,l,c1); if(HI) c1=ConnectPiramidandAny(cb,cbb,c1); } else { c1=ConnectPiramidandPrism(cb,l,c1); if(HI) c1=ConnectPrismandAny2(cb,cbb,c1); } } } return c1; } /**************************************************************************/ int ConnectPiramidandAny2(int i,int cb,int c) /**************************************************************************/ { int c1,l,cbb; c1=c; for(l=1; l<=6; l++) { cbb=cboundJ(cb,l); if(cbb>0 && cbb!=i) { if(CPIT(cbb)==4) c1=ConnectPiramidandTet(c1); else if(CPIT(cbb)==5) c1=ConnectPiramidandPiramid(cb,l,c1); else c1=ConnectPiramidandPrism(cb,l,c1); } } return c1; } /**************************************************************************/ int ConnectPrismandAny(int i,int cb, int c) /**************************************************************************/ { int c1,l,cbb; c1=c; for(l=1; l<=6; l++) { cbb=cboundJ(cb,l); if(cbb>0 && cbb!=i) { if(CPIT(cbb)==4) { c1=ConnectPrismandTet(c1); if(HI) c1=ConnectTetandAny2(cb,cbb,c1); } else if(CPIT(cbb)==5) { c1=ConnectPrismandPiramid(cb,l,c1); if(HI) c1=ConnectPiramidandAny(cb,cbb,c1); } else { c1=ConnectPrismandPrism(cb,l,c1); if(HI) c1=ConnectPrismandAny2(cb,cbb,c1); } } } return c1; } /**************************************************************************/ int ConnectPrismandAny2(int i,int cb, int c) /**************************************************************************/ { int c1,l,cbb; c1=c; for(l=1; l<=6; l++) { cbb=cboundJ(cb,l); if(cbb>0 && cbb!=i) { if(CPIT(cbb)==4) c1=ConnectPrismandTet(c1); else if(CPIT(cbb)==5) c1=ConnectPrismandPiramid(cb,l,c1); else c1=ConnectPrismandPrism(cb,l,c1); } } return c1; } /**************************************************************************/ int CountNeighborVertex(int i, int c) /**************************************************************************/ { int cb, c1, j; c1=c; if(CPIT(i)==4) { for(j=1;j<=6;j++) { cb=cboundJ(i,j); if(cb>0) { if(CPIT(cb)==4) { c1=ConnectTetandTet(c1); c1=ConnectTetandAny(i,cb,c1); } else if(CPIT(cb)==5) { c1=ConnectTetandPiramid(c1); c1=ConnectPiramidandAny(i,cb,c1); } else if(CPIT(cb)==6) { c1=ConnectTetandPrism(c1); c1=ConnectPrismandAny(i,cb,c1); } } } } else if(CPIT(i)==5) { for(j=1;j<=6;j++) { cb=cboundJ(i,j); if(cb>0) { if(CPIT(cb)==4) { c1=ConnectPiramidandTet(c1); c1=ConnectTetandAny(i,cb,c1); } else if(CPIT(cb)==5) { c1=ConnectPiramidandPiramid(cb,j,c1); c1=ConnectPiramidandAny(i,cb,c1); } else if(CPIT(cb)==6) { c1=ConnectPiramidandPrism(cb,j,c1); c1=ConnectPrismandAny(i,cb,c1); } } } } else if(CPIT(i)==6) { for(j=1;j<=6;j++) { cb=cboundJ(i,j); if(cb>0) { if(CPIT(cb)==4) { c1=ConnectPrismandTet(c1); c1=ConnectTetandAny(i,cb,c1); } else if(CPIT(cb)==5) { c1=ConnectPrismandPiramid(cb,j,c1); c1=ConnectPiramidandAny(i,cb,c1); } else if(CPIT(cb)==6) { c1=ConnectPrismandPrism(cb,j,c1); c1=ConnectPrismandAny(i,cb,c1); } } } } return c1; } /**************************************************************************/ void whichTetra(int i, double t, int ww) /**************************************************************************/ { int m[8]; int t1, t2, vo1, vo2, vo3, cb, cbb, cbbb, c1,c2; int j, l, mm, k, n,kk, ll, kkk; int m2[8], tempv; int len1; vector numbers; c1=0; if(Mesh==Tetra) { c1=CountNeighborVertex(i,c1); } else { for(j=1; j<=6; j++) { cb=cboundJ(i,j); if (cb > 0) c1=c1+1; } } if(Mesh==Tetra) { if(CPIT(i)==4) n=c1; else if(CPIT(i)==5) n=c1+1; else if(CPIT(i)==6) n=c1+2; } else n=4*(c1+1); mm=(int)(RoundOff(t/TimeStep)); k=(int)(RoundOff(mm%MXT)); if (k==0) k=MXT; for(j=1; j<=CPIT(i); j++) { m[j-1]=cellJ(i,j); } if(Mesh==Tetra) { c1=-1; } else c1=3; for(j=0; j<4; j++) { if(CPIT(i)==4) t1=cpit4[0][j]; else if(CPIT(i)==5) t1=cpit5[ww][j]; else if(CPIT(i)==6) t1=cpit6[ww][j]; vo1=m[t1-1]; tetra_xyz(j,0)=vertexX(vo1); tetra_xyz(j,1)=vertexY(vo1); tetra_xyz(j,2)=vertexZ(vo1); tetra_uvw(j,0)=verU(k,vo1); tetra_uvw(j,1)=verV(k,vo1); tetra_uvw(j,2)=verW(k,vo1); tetra_t(j)=verT(k,vo1); if(Mesh==Tetra) { if(CPIT(i)==5 && j==0) { t2=ocpi5[ww][j]; vo2=m[t2-1]; // vertex order 1th, 2th,.... -> 1001, 1002,... c1=c1+1; nb_xyz(c1,0)=vertexX(vo2); nb_xyz(c1,1)=vertexY(vo2); nb_xyz(c1,2)=vertexZ(vo2); nb_uvw(c1,0)=verU(k,vo2); nb_uvw(c1,1)=verV(k,vo2); nb_uvw(c1,2)=verW(k,vo2); nb_t(c1)=verT(k,vo2); } else if(CPIT(i)==6 && j<=1) { t2=ocpi6[ww][j]; vo2=m[t2-1]; // vertex order 1th, 2th,.... -> 1001, 1002,... c1=c1+1; nb_xyz(c1,0)=vertexX(vo2); nb_xyz(c1,1)=vertexY(vo2); nb_xyz(c1,2)=vertexZ(vo2); nb_uvw(c1,0)=verU(k,vo2); nb_uvw(c1,1)=verV(k,vo2); nb_uvw(c1,2)=verW(k,vo2); nb_t(c1)=verT(k,vo2); if(Magnet) { // nb_Fm(c1,0)=magFx(vo2); // nb_Fm(c1,1)=magFy(vo2); // nb_Fm(c1,2)=magFz(vo2); } } } } c2=0; for(j=1; j<=6; j++) { cb=cboundJ(i,j); if (cb > 0) { if(Mesh==Tetra) { //c2=0; if(CPIT(cb)==4) { tempv=SubtractSet(&cellJ(cb,1),cb,&cellJ(i,1),i); if(c2==0) { c2=c2+1; numbers.push_back(tempv); } else { for(kkk=1; kkk<=c2; kkk++) { if(tempv==Vlist(kkk)) break; if(tempv!=Vlist(kkk) && kkk==c2) { c2=c2+1; numbers.push_back(tempv); break; } } } } else if(CPIT(cb)==5 || CPIT(cb)==6) { SubtractSet3(&cellJ(cb,1),cb,&cellJ(i,1),i,&m2[0]); for(kk=0; kk0 && cbb!=i) { if(CPIT(cbb)==4) { tempv=SubtractSet(&cellJ(cbb,1),cbb,&cellJ(cb,1),cb); for(kkk=1; kkk<=c2; kkk++) { if(tempv==Vlist(kkk)) break; if(tempv!=Vlist(kkk) && kkk==c2) { c2=c2+1; numbers.push_back(tempv); break; } } } else if(CPIT(cbb)==5 || CPIT(cbb)==6) { SubtractSet3(&cellJ(cbb,1),cbb,&cellJ(cb,1),cb,&m2[0]); for(kk=0; kk0 && cbbb!=cb) { if(CPIT(cbbb)==4) { tempv=SubtractSet(&cellJ(cbbb,1),cbbb,&cellJ(cbb,1),cbb); for(kkk=1; kkk<=c2; kkk++) { if(tempv==Vlist(kkk)) break; if(tempv!=Vlist(kkk) && kkk==c2) { c2=c2+1; numbers.push_back(tempv); break; } } } else if(CPIT(cbbb)==5 || CPIT(cbbb)==6) { SubtractSet3(&cellJ(cbbb,1),cbbb,&cellJ(cbb,1),cbb,&m2[0]); for(kk=0; kk numbers; vector numbers2; vector dist1; vector dist2; vector tetra_vertex_; vector::iterator smallest1; xyz1=new double[3]; mm=(int)(RoundOff(t/TimeStep)); k=(int)(RoundOff(mm%MXT)); if (k==0) k=MXT; for(j=1; j<=CPIT(i); j++) { m[j-1]=cellJ(i,j); } if(data_type==Vertex_f && ( Interpolation==Quad || Interpolation==Cubic || Interpolation==Linear)) { for(j=0; j<4; j++) { if(CPIT(i)==4) t1=cpit4[0][j]; else if(CPIT(i)==5) t1=cpit5[ww][j]; else if(CPIT(i)==6) t1=cpit6[ww][j]; vo1=m[t1-1]; tetra_vertex_.push_back(vo1); if(Mesh==Tetra) { if(CPIT(i)==5 && j==0) { t2=ocpi5[ww][j]; vo2=m[t2-1]; // vertex order 1th, 2th,.... -> 1001, 1002,... numbers.push_back(vo2); } else if(CPIT(i)==6 && j<=1) { t2=ocpi6[ww][j]; vo2=m[t2-1]; // vertex order 1th, 2th,.... -> 1001, 1002,... numbers.push_back(vo2); } } else { t2=other[ww][j]; vo2=m[t2-1]; // vertex order 1th, 2th,.... -> 1001, 1002,... numbers.push_back(vo2); } } } else if(Interpolation==InverseD) { for(j=1; j<=CPIT(i); j++) { numbers.push_back(m[j-1]); } if(data_type==Cell_f) { len1=numbers.size(); dist1.resize(len1); for(j=1; j<=len1; j++) { for(l=1; l<=3; l++) xyz1[l-1]=vertex(numbers[j-1],l); dist1[j-1]=Distance(xyz0,xyz1); } smallest1 = min_element( dist1.begin(), dist1.end() ); index2=smallest1-dist1.begin(); nv_VC=numbers[index2]; len1=VcCount(nv_VC); numbers.clear(); dist1.clear(); for(j=1; j<=len1; j++) { numbers.push_back(VToCJ(nv_VC,j)); } sort( numbers.begin(), numbers.end() ); numbers.erase( unique( numbers.begin(), numbers.end() ), numbers.end() ); len1=numbers.size(); if(len1 !=VcCount(nv_VC)) { printf("check \n"); } Sum1=0.; for(j=1; j<=len1; j++) { for(l=1; l<=3; l++) xyz1[l-1]=cellcenter(numbers[j-1],l); dd=Distance(xyz0,xyz1); dist1.push_back(dd); Sum1+=dd; } Sum1=Sum1/len1; for(j=1; j<=len1; j++) { numbers2.push_back(numbers[j-1]); dist2.push_back(dist1[j-1]); } len1=numbers2.size(); w=new double[len1]; Id2=new double[len1]; Sum2=0.; for(j=1; j<=len1; j++) w[j-1]=0.; for(j=1; j<=len1; j++) { if(dist2[j-1]>=0. && dist2[j-1]<=1.0e-11 ) { w[j-1]=1.; goto lab2; } Id2[j-1]=1./pow(dist2[j-1],2.); Sum2=Sum2+Id2[j-1]; } for(j=1; j<=len1; j++) { w[j-1]=Id2[j-1]/Sum2; } } } len1=numbers.size(); */ if(Mesh==Tetra) { c1=-1; } else c1=3; if(data_type==Vertex_f && Interpolation!=Linear) { c2=0; for(j=1; j<=6; j++) { cb=cboundJ(i,j); if (cb > 0) { if(Mesh==Tetra) { if(CPIT(cb)==4) { tempv=SubtractSet(&cellJ(cb,1),cb,&cellJ(i,1),i); if(c2==0) { c2=c2+1; numbers.push_back(tempv); } else { for(kkk=1; kkk<=c2; kkk++) { if(tempv==Vlist(kkk)) break; if(tempv!=Vlist(kkk) && kkk==c2) { c2=c2+1; numbers.push_back(tempv); break; } } } } else if(CPIT(cb)==5 || CPIT(cb)==6) { SubtractSet3(&cellJ(cb,1),cb,&cellJ(i,1),i,&m2[0]); for(kk=0; kk0 && cbb!=i) { if(CPIT(cbb)==4) { tempv=SubtractSet(&cellJ(cbb,1),cbb,&cellJ(cb,1),cb); for(kkk=1; kkk<=c2; kkk++) { if(tempv==Vlist(kkk)) break; if(tempv!=Vlist(kkk) && kkk==c2) { c2=c2+1; numbers.push_back(tempv); break; } } } else if(CPIT(cbb)==5 || CPIT(cbb)==6) { SubtractSet3(&cellJ(cbb,1),cbb,&cellJ(cb,1),cb,&m2[0]); for(kk=0; kk0 && cbbb!=cb) { if(CPIT(cbbb)==4) { tempv=SubtractSet(&cellJ(cbbb,1),cbbb,&cellJ(cbb,1),cbb); for(kkk=1; kkk<=c2; kkk++) { if(tempv==Vlist(kkk)) break; if(tempv!=Vlist(kkk) && kkk==c2) { c2=c2+1; numbers.push_back(tempv); break; } } } else if(CPIT(cbbb)==5 || CPIT(cbbb)==6) { SubtractSet3(&cellJ(cbbb,1),cbbb,&cellJ(cbb,1),cbb,&m2[0]); for(kk=0; kk=0. && dist2[j-1]<=1.0e-20 ) { w[j-1]=1.; goto lab; } Id2[j-1]=1./(dist2[j-1]*dist2[j-1]); Sum2=Sum2+Id2[j-1]; } for(j=1; j<=len1; j++) { w[j-1]=Id2[j-1]/Sum2; } } lab: numbers.clear(); dist1.clear(); len1=numbers2.size(); } if(data_type==Vertex_f && (Interpolation==Quad || Interpolation==Cubic || Interpolation==Linear)) { for(j=0; j<4; j++) { vo1=tetra_vertex_[j]; tetra_xyz(j,0)=vertexX(vo1); tetra_xyz(j,1)=vertexY(vo1); tetra_xyz(j,2)=vertexZ(vo1); tetra_uvw(j,0)=verU(k,vo1); tetra_uvw(j,1)=verV(k,vo1); tetra_uvw(j,2)=verW(k,vo1); tetra_t(j)=verT(k,vo1); } } if(data_type==Vertex_f && Interpolation!=Linear) { for(j=0; j tetra_vertex_; for(j=1; j<=CPIT(icp); j++) { m[j-1]=cellJ(icp,j); } for(j=0; j<4; j++) { if(CPIT(icp)==4) t1=cpit4[0][j]; else if(CPIT(icp)==5) t1=cpit5[ww][j]; else if(CPIT(icp)==6) t1=cpit6[ww][j]; vo1=m[t1-1]; tetra_vertex_.push_back(vo1); } for(j=0; j<4; j++) { vo1=tetra_vertex_[j]; tetra_xyz(j,0)=vertexX(vo1); tetra_xyz(j,1)=vertexY(vo1); tetra_xyz(j,2)=vertexZ(vo1); } tetra_vertex_.clear(); } /**************************************************************************/ void TetraDecomp(int i, double k, double plist[]) /**************************************************************************/ { int j,kk; int vlist[8], m[8], trilist[3]; for(j=1; j<=CPIT(i); j++) { vlist[j-1]=cellJ(i,j); m[j-1]=vlist[j-1]; } if(Mesh==Tetra) { if(CPIT(i)==4) { whichTetra_v2(i,plist, k, 0); goto finish; } else if(CPIT(i)==5) { kk=0; for(j=0; j<3; j++) { trilist[j]=vlist[cpit5[kk][j]-1]; } if(TriPlane(trilist, plist) > 0 ) { whichTetra_v2(i,plist, k,0); goto finish; } whichTetra_v2(i,plist, k,1); goto finish; } else if(CPIT(i)==6) { kk=0; for(j=0; j<3; j++) { trilist[j]=vlist[cpit6[kk][j]-1]; } if(TriPlane(trilist, plist) > 0 ) { whichTetra_v2(i,plist, k,0); goto finish; } else { kk=1; for(j=0; j<3; j++) { trilist[j]=vlist[cpit6[kk][j]-1]; } if(TriPlane(trilist, plist) > 0 ) { whichTetra_v2(i,plist, k,1); goto finish; } else { whichTetra_v2(i,plist, k,2); goto finish; } } } else { whichTetra_v2(i,plist, k,0); goto finish; } } else { for(kk=0; kk<4; kk++) { for(j=0; j<3; j++) { trilist[j]=vlist[tetra[kk][j]-1]; } if(TriPlane(trilist, plist) > 0 ) { whichTetra_v2(i,plist, k,0); goto finish; } } whichTetra_v2(i,plist, k,0); goto finish; } finish: ; } /**************************************************************************/ void ScatterInter(int i, double plist[], double nb_phi[], double tetra_phi[], double uvw_Inter[], int vec) /**************************************************************************/ { int j,k, c1, n,cb,LenVar, Len1; double PhiPhi[16], Phi_Linear[3], WW[100]; double b[17], A[17]; double wmax, wmin; c1=0; if(vec) LenVar=3; else LenVar=1; if(Interpolation==Cubic) Len1=16; else if(Interpolation==Quad) Len1=6; if(Mesh==Tetra) { c1=CountNeighborVertex(i,c1); } else { for(j=1; j<=6; j++) { cb=cboundJ(i,j); if (cb > 0) c1=c1+1; } } if(Mesh==Tetra) { if(CPIT(i)==4) n=c1; else if(CPIT(i)==5) n=c1+1; else if(CPIT(i)==6) n=c1+2; } else n=4*(c1+1); n=NBV; if(n>=100) printf("\n n is over 50\n"); if(Interpolation==Linear) { LinearQ_tetra(plist[0],plist[1],plist[2],tetra_xyz_, tetra_phi, Phi_Linear,vec); } if(Interpolation==Quad || Interpolation==Cubic) { CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_phi, n, tetra_xyz_, tetra_phi, W_,vec); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_phi, Phi_Linear,vec); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); for(k=0; k wmax) wmax=wQR(j); wmin = wmax*1.0e-6; for(j=1; j<=Len1; j++) if (wQR(j) < wmin) wQR(j)=0.0; for(k=1; k<=LenVar; k++) { for(j=1;j<=Len1; j++) { b[j]=bQR_[Len1*(k-1)+j]; A[j]=AQR_[Len1*(k-1)+j]; } svbksb(uQR_,wQR_,vQR_,Len1,Len1,b,A); for(j=1; j<=Len1; j++) A0_[k-1][j-1]=A[j]; } } if(Interpolation==Linear) { for(j=0; j 0) c1=c1+1; } } if(Mesh==Tetra) { if(CPIT(i)==4) n=c1; else if(CPIT(i)==5) n=c1+1; else if(CPIT(i)==6) n=c1+2; } else n=4*(c1+1); n=NBV; if(Interpolation==Linear) { LinearQ_tetra(plist[0],plist[1],plist[2],tetra_xyz_, tetra_phi, Phi_Linear,vec); } if(Interpolation==Quad || Interpolation==Cubic) { CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_phi, n, tetra_xyz_, tetra_phi, W_,vec); // LinearQ_tetra(plist[0],plist[1],plist[2],tetra_xyz_, tetra_phi, Phi_Linear,vec); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_phi, Phi_Linear,vec); DLinearQdx(tetra_xyz_, tetra_phi, DPhi_LinearDx,vec); DLinearQdy(tetra_xyz_, tetra_phi, DPhi_LinearDy,vec); DLinearQdz(tetra_xyz_, tetra_phi, DPhi_LinearDz,vec); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); DCubicRowDx(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDx); DCubicRowDy(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDy); DCubicRowDz(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDz); DDCubicRow_xx(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xx); DDCubicRow_yy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yy); DDCubicRow_zz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_zz); DDCubicRow_xy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xy); DDCubicRow_xz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xz); DDCubicRow_yz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yz); for(k=0; k wmax) wmax=wQR(j); wmin = wmax*1.0e-6; for(j=1; j<=Len1; j++) if (wQR(j) < wmin) wQR(j)=0.0; for(k=1; k<=LenVar; k++) { for(j=1;j<=Len1; j++) { b[j]=bQR_[Len1*(k-1)+j]; //A[j]=AQR_[Len1*(k-1)+j]; } svbksb(uQR_,wQR_,vQR_,Len1,Len1,b,A); for(j=1; j<=Len1; j++) A0_[k-1][j-1]=A[j]; } } if(Interpolation==Linear) { for(j=0; j 0) c1=c1+1; } n=4*(c1+1); /* A=dmatrix(1,3,1,6); u=dmatrix(1,6,1,6); v=dmatrix(1,6,1,6); w=dvector(1,6); b=dmatrix(1,3,1,6); */ for(j=1; j<=8; j++) { vlist[j-1]=cellJ(i,j); m[j-1]=vlist[j-1]; } for(j=0; j<3; j++) { trilist[j]=vlist[tetra[0][j]-1]; } if (TriPlane(trilist, plist) > 0 ) { whichTetra(i, k, 0); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); goto finish; //Interpolate in A; } else { for(j=0; j<3; j++) { trilist[j]=vlist[tetra[1][j]-1]; } if (TriPlane(trilist, plist) > 0 ) { whichTetra(i, k, 1); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); goto finish; //Interpolate in B; } else { for(j=0; j<3; j++) { trilist[j]=vlist[tetra[2][j]-1]; } if (TriPlane(trilist, plist) > 0 ) { whichTetra(i, k, 2); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); goto finish; //Interpolate in c; } else { for(j=0; j<3; j++) { trilist[j]=vlist[tetra[3][j]-1]; } if (TriPlane(trilist, plist) > 0 ) { whichTetra(i, k, 3); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); goto finish; //Interpolate in D; } else { whichTetra(i, k, 4); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); //Interpolate in E; } } } } finish: for(kk=0; kk wmax) wmax=wQR(j); wmin = wmax*1.0e-6; for(j=1; j<=6; j++) if (wQR(j) < wmin) wQR(j)=0.0; for(kk=1; kk<=3; kk++) { for(j=1;j<=6; j++) { b[j]=bQR(kk,j); A[j]=AQR(kk,j); } svbksb(uQR_,wQR_,vQR_,6,6,b,A); for(j=1; j<=6; j++) A0_[kk-1][j-1]=A[j]; } for(j=0; j<3; j++) { uvw_Inter[j]=Phi_Linear[j] + Dotn(A0_[j],PhiPhi,6); } /* free_dmatrix(A,1,3,1,6); free_dmatrix(u,1,6,1,6); free_dmatrix(v,1,6,1,6); free_dvector(w,1,6); free_dvector(b,1,3,1,6); */ } /**************************************************************************/ void TetraDecompInter2(int i, double k, double plist[], double uvw_Inter[], double Duvw_InterDx[],double Duvw_InterDy[] ,double Duvw_InterDz[]) /**************************************************************************/ { int j,kk, c1, n; int vlist[8], m[8], trilist[3]; double PhiPhi[6], Phi_Linear[3], WW[28]; double DPhiPhiDx[6], DPhi_LinearDx[3]; double DPhiPhiDy[6], DPhi_LinearDy[3]; double DPhiPhiDz[6], DPhi_LinearDz[3]; double DDPhiPhi_xx[6],DDPhiPhi_yy[6],DDPhiPhi_zz[6],DDPhiPhi_xy[6],DDPhiPhi_xz[6],DDPhiPhi_yz[6]; real A[7]; double b[7]; double wmax, wmin; c1=0; for(j=1; j<=6; j++) { if (cboundJ(i,j) > 0) c1=c1+1; } n=4*(c1+1); for(j=1; j<=8; j++) { vlist[j-1]=cellJ(i,j); m[j-1]=vlist[j-1]; } for(j=0; j<3; j++) { trilist[j]=vlist[tetra[0][j]-1]; } if (TriPlane(trilist, plist) > 0 ) { whichTetra(i, k, 0); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ_tetra(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); DLinearQdx(tetra_xyz_, tetra_uvw_, DPhi_LinearDx,1); DLinearQdy(tetra_xyz_, tetra_uvw_, DPhi_LinearDy,1); DLinearQdz(tetra_xyz_, tetra_uvw_, DPhi_LinearDz,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); DCubicRowDx(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDx); DCubicRowDy(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDy); DCubicRowDz(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDz); DDCubicRow_xx(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xx); DDCubicRow_yy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yy); DDCubicRow_zz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_zz); DDCubicRow_xy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xy); DDCubicRow_xz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xz); DDCubicRow_yz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yz); goto finish; //Interpolate in A; } else { for(j=0; j<3; j++) { trilist[j]=vlist[tetra[1][j]-1]; } if (TriPlane(trilist, plist) > 0 ) { whichTetra(i, k, 1); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); DLinearQdx(tetra_xyz_, tetra_uvw_, DPhi_LinearDx,1); DLinearQdy(tetra_xyz_, tetra_uvw_, DPhi_LinearDy,1); DLinearQdz(tetra_xyz_, tetra_uvw_, DPhi_LinearDz,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); DCubicRowDx(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDx); DCubicRowDy(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDy); DCubicRowDz(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDz); DDCubicRow_xx(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xx); DDCubicRow_yy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yy); DDCubicRow_zz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_zz); DDCubicRow_xy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xy); DDCubicRow_xz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xz); DDCubicRow_yz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yz); goto finish; //Interpolate in B; } else { for(j=0; j<3; j++) { trilist[j]=vlist[tetra[2][j]-1]; } if (TriPlane(trilist, plist) > 0 ) { whichTetra(i, k, 2); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); DLinearQdx(tetra_xyz_, tetra_uvw_, DPhi_LinearDx,1); DLinearQdy(tetra_xyz_, tetra_uvw_, DPhi_LinearDy,1); DLinearQdz(tetra_xyz_, tetra_uvw_, DPhi_LinearDz,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); DCubicRowDx(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDx); DCubicRowDy(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDy); DCubicRowDz(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDz); DDCubicRow_xx(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xx); DDCubicRow_yy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yy); DDCubicRow_zz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_zz); DDCubicRow_xy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xy); DDCubicRow_xz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xz); DDCubicRow_yz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yz); goto finish; //Interpolate in c; } else { for(j=0; j<3; j++) { trilist[j]=vlist[tetra[3][j]-1]; } if (TriPlane(trilist, plist) > 0 ) { whichTetra(i, k, 3); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); DLinearQdx(tetra_xyz_, tetra_uvw_, DPhi_LinearDx,1); DLinearQdy(tetra_xyz_, tetra_uvw_, DPhi_LinearDy,1); DLinearQdz(tetra_xyz_, tetra_uvw_, DPhi_LinearDz,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); DCubicRowDx(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDx); DCubicRowDy(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDy); DCubicRowDz(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDz); DDCubicRow_xx(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xx); DDCubicRow_yy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yy); DDCubicRow_zz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_zz); DDCubicRow_xy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xy); DDCubicRow_xz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xz); DDCubicRow_yz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yz); goto finish; //Interpolate in D; } else { whichTetra(i, k, 4); CubicMatrix(nb_xyz_, n, tetra_xyz_, Cmat_); Wvector(nb_xyz_, nb_uvw_, n, tetra_xyz_, tetra_uvw_, W_,1); LinearQ(plist[0],plist[1],plist[2],tetra_xyz_, tetra_uvw_, Phi_Linear,1); DLinearQdx(tetra_xyz_, tetra_uvw_, DPhi_LinearDx,1); DLinearQdy(tetra_xyz_, tetra_uvw_, DPhi_LinearDy,1); DLinearQdz(tetra_xyz_, tetra_uvw_, DPhi_LinearDz,1); CubicRow(plist[0], plist[1], plist[2], tetra_xyz_, PhiPhi); DCubicRowDx(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDx); DCubicRowDy(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDy); DCubicRowDz(plist[0], plist[1], plist[2], tetra_xyz_, DPhiPhiDz); DDCubicRow_xx(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xx); DDCubicRow_yy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yy); DDCubicRow_zz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_zz); DDCubicRow_xy(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xy); DDCubicRow_xz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_xz); DDCubicRow_yz(plist[0], plist[1], plist[2],tetra_xyz_, DDPhiPhi_yz); //Interpolate in E; } } } } finish: for(kk=0; kk wmax) wmax=wQR(j); wmin = wmax*1.0e-6; for(j=1; j<=6; j++) if (wQR(j) < wmin) wQR(j)=0.0; for(kk=1; kk<=3; kk++) { for(j=1;j<=6; j++) { b[j]=bQR(kk,j); A[j]=AQR(kk,j); } svbksb(uQR_,wQR_,vQR_,6,6,b,A); for(j=1; j<=6; j++) A0_[kk-1][j-1]=A[j]; } for(j=0; j<3; j++) { uvw_Inter[j]=Phi_Linear[j] + Dotn(A0_[j],PhiPhi,6); Duvw_InterDx[j]=DPhi_LinearDx[j] + Dotn(A0_[j],DPhiPhiDx,6); Duvw_InterDy[j]=DPhi_LinearDy[j] + Dotn(A0_[j],DPhiPhiDy,6); Duvw_InterDz[j]=DPhi_LinearDz[j] + Dotn(A0_[j],DPhiPhiDz,6) } } /**************************************************************************/ double TauP(double vis, double rp) /**************************************************************************/ { return (2.*rp*rp*rhop/(9.*vis)); } /**************************************************************************/ double ReP(double uvwP[], double VF[], double vis, double rp) /**************************************************************************/ { double result; VecMinus(uvwP,VF,tmp8_); result= sqrt(Dot(tmp8_,tmp8_))*2.*rp*rho/vis ; return result; } /**************************************************************************/ void GUVXY_beads(int stage, int pn,int iter1,int i[], double t, double h, typexyz Vp0_[],typexyz Vp1_[],typexyz Ap1_[],typexyz Af1_[], typexyz Vf0_[],typexyz Vf2_[],typexyz Wp_[],typeseed2 Epsp_[],typescalar Tp0_[],typescalar Tp1_[],typescalar Tf2_[],typescalar dTp1_[],typescalar dTf1_[], typescalar alpha_chp1_[], typexyz xyz0_[],typexyz xyz1_[], double vis, double Df[]) /**************************************************************************/ { int ii,j, k,n,nv,m, mm, kk; double VIS, mag1, v_mag,Cp1,Pr1; double y2[3]; double xyz1[3], Wp[3], Vp0[3],Vp1[3], Vf00[3],Vf0[3], Vf2[3], alpha_chp1[1],Epsp[4], Tp1[1],Tp0[1],Tf2[1],tf00; double Ap1[3],dTp1[1]; double Af1[3],dTf1[1]; double Tf0_[1],xyz0[3],Vf00_[3]; if(P_shape==Ellipsoid || P_shape==RBC) { if(heat==1) nv=15; else nv=13; } else if(P_shape==0) { if(heat==1) nv=8; else nv=6; } else if(P_shape==DNA) nv=8; if(Refulsive_signal==0) { for(j=0; j<3; j++) { Sum_WFrepul_[j]=0.; Sum_WTrepul_[j]=0.; } } n=nv*Nb; if(stage==1) { if(P_shape==DNA) { for(ii=0; ii=3 && j<6) { if(effect==1 || effect==2 || effect==3 || effect==4) { GVX(k*nv+j) = Vp1[j-3];// + 0.5*(Sum_Frep(j-3)+Sum_WFrepul_[j-3] )*h/Mp; DFdt0(k*nv+j)=0.; //Ap1[j-3]; } } else if( j>=6 && j= 3 && j<6 ) { uvxy(nv*m+j)=xyz1[j-3]; } } if(P_shape==Ellipsoid ) { uvxy(nv*m+6)=Wp[0]; uvxy(nv*m+7)=Wp[1]; uvxy(nv*m+8)=Wp[2]; uvxy(nv*m+9)=Epsp[0]; uvxy(nv*m+10)=Epsp[1]; uvxy(nv*m+11)=Epsp[2];; uvxy(nv*m+12)=Epsp[3]; if(heat) { uvxy(nv*m+13)=Tp1[0]; uvxy(nv*m+14)=alpah_p[0]; } } count=0; } Again: k++; if(k<=40) { for(m=0; m10.) ||(vmag2>10.)) { printf(" k= %d errmax= %lf \n",k,errmax); } if (errmax <=1.0) { hdid = h; hnext = (errmax > ERRCON ? safety*h*pow(errmax, pgrow) : grow*h); goto Finish; } else { hnext =safety*h*pow(errmax,pshrnk); h = (h >= 0.0 ? MAX(hnext, shrnk*h) : MIN(hnext, shrnk*h)); goto Again; } } Stop: hdid=h; hnext=h; goto Finish; for(m=0; mpdist) { for(i=0; i<3; i++) { Frepul_[i]=0.; Trepul_[i]=0.; } } else { if(dist_c0>=dist_c1) { for(i=0; i<3; i++) { NN_[i]=(xyz1[i]-xyz0[i])/dist; xyz_contact[i]=0.5*(xyz1[i]+xyz0[i]); rxyz[i]=xyz_contact[i] - xyzc[i]; } d=pdist-dist; } else { for(i=0; i<3; i++) { NN_[i]=-(xyz1[i]-xyz0[i])/dist; xyz_contact[i]=0.5*(xyz1[i]+xyz0[i]); rxyz[i]=xyz_contact[i] - xyzc[i]; } d=pdist+dist; } // kn=sqrt(2.*r1*d)*E_young/(3.*(1.-poisson*poisson)); kn=stiff_max; for(i=0; i<3; i++) { // Frepul_[i]=((stiff_max*d)+force)*NN_[i]; Frepul_[i]=((kn*d))*NN_[i]; } Cross(rxyz,Frepul_,Trepul_); MatVecProduct(Trepul_, Tran_A_, Trepul_, 3, 3); // Frepul_[2]=0.; // DFrepul=(stiff_max*d)*nano/dist; } } double Spring_force_ellipsoid(double a, double b, double theta) /**************************************************************************/ { double Y1, Y2, poissonR, Effective_Y; double p,q; double Ramda1,effective_R; double det,L1,G1,spring_constant; Y1=200.e+3; Y2=100.e+6; poissonR=0.5; Effective_Y=(1.-poissonR*poissonR)/Y1 + (1.-poissonR*poissonR)/Y2; Effective_Y=1./Effective_Y; p=a*cos(0.5*PI-theta); q=b*sin(0.5*PI-theta); effective_R=a*a*b*(p*p/pow(a,4.)+q*q/pow(b,4.)); Ramda1=b*b*(p*p/pow(a,4.)+q*q/pow(b,4.)); det=MAX(Ramda1,1./Ramda1); L1=log(Ramda1); if(det<=10) { G1=1.+ 0.020789*L1*L1 -4.271e-5 *pow(L1,4.); } else if(det>10 && det<=100) { G1=1. + 0.020487*L1*L1; } spring_constant=4.*Effective_Y*sqrt(effective_R)*G1/3.; return spring_constant; } /**************************************************************************/ void Force_Wall_repulsive4(int pn, int icp, double xyz1[], double uvw1[],double uvwf[], double omega1[], double y2[], double timestep) /* particle repulsive force at the wall*/ /**************************************************************************/ { double NN1_[3],d,d2,height,height2; double xyz0[3],xyz2[3],xyz_beadcenter[3],xyz_bead_contact[3], y2NN[3],x2[3]; int i,bn1,j,Len1; double vec_r[3],r1,r2; double temp1[3], temp2[3]; double hc; int c_contact; double *xyz_bead_bound; int k,bnlen,icp_bead; double stiff_max=0.044; double delta_max=50.e-9; double delta; double stiff_coef; double vmag1, *NN2_,*TT1_,*TT2_,*Op2_, *abc,*N_contact1,*N_contact2, *X1,*X3, *udir; double thetac,thetac2, abc_mag; double xx1,xx2, yy1,yy2,zz1,zz2,cosRa,sinRb,invRaRb; INTVECTOR Bneighbor; DOUBLEVECTOR dist1; vector::iterator smallest1; xyz_bead_bound=new double[3]; NN2_=new double[3]; TT1_=new double[3]; TT2_=new double[3]; Op2_=new double[3]; abc=new double[3]; N_contact1=new double[3]; N_contact2=new double[3]; X1=new double[3]; X3=new double[3]; udir=new double[3]; double sum2; c_contact=0; re_calculation=0; if(P_shape==Ellipsoid) Len1=32; else if(P_shape==RBC) Len1=266; vmag1=sqrt(Dot(uvw1,uvw1)); for(i=0; i<3; i++) { Sum_WFrepul_[i]=0.; Sum_WTrepul_[i]=0.; WFrepul_[i]=0.; WTrepul_[i]=0.; udir[i]=uvw1[i]/vmag1; } for(k=1;k<=7;k++) //find neighboring lists of boundary where the cell contact { bn1=NwallJ(icp,k); if(bn1==0) break; else { Bcenter(bn1,xyz0); Nvec2(bn1,NN1_); Cross(y2,NN1_,y2NN); abc_mag=sqrt(Dot(y2NN,y2NN)); for(i=0; i<3; i++) y2NN[i]=y2NN[i]/abc_mag; Cross(y2NN,y2,X1); abc_mag=sqrt(Dot(X1,X1)); for(i=0; i<3; i++) X1[i]=X1[i]/abc_mag; Cross(NN1_,y2NN,TT1_); abc_mag=sqrt(Dot(TT1_,TT1_)); for(i=0; i<3; i++) TT1_[i]=TT1_[i]/abc_mag; Op2_[0]=0.; Op2_[1]=1.; Op2_[2]=0.; MatVecProduct(&TT2_[0], Tran_A_, &TT1_[0], 3, 3); MatVecProduct(&NN2_[0], Tran_A_, &NN1_[0], 3, 3); MatVecProduct(&X1[0], Tran_A_, &X1[0], 3, 3); if(Dot(y2,NN1_)<=0.) { abc_mag=Dot(TT1_,y2); if(abc_mag>=1.) abc_mag=1.; thetac=acos(abc_mag); if(thetac<0.) thetac=thetac+PI; } else { abc_mag=Dot(TT1_,y2); if(abc_mag>=1.) abc_mag=1.; thetac=acos(abc_mag); thetac=2.*PI-thetac; } /* XT=Rb*Dot(TT2_,X1); YT=-Ra*Dot(TT2_,Op2_); if(YT>0) { if(XT>0.) thetac=atan(YT/XT); else thetac=2.*PI-atan(YT/fabs(XT)); } else { if(XT>0.) thetac=PI-atan(fabs(YT)/XT); else thetac=PI+atan(fabs(YT)/fabs(XT)); } */ cosRa=cos(thetac)/Ra; sinRb=sin(thetac)/Rb; invRaRb=1./(Ra*Ra)-1./(Rb*Rb); xx1=pow((Rb*Rb-Ra*Ra)*sin(thetac)*cos(thetac),2.)*(cosRa*cosRa+sinRb*sinRb); yy1=1.+pow((Ra*Rb*invRaRb*sin(thetac)*cos(thetac)),2.); if(Dot(y2,NN1_)<=0.) { zz1=sqrt(xx1/yy1); xx2=-zz1*invRaRb*sin(thetac)*cos(thetac)-sqrt(pow(cosRa,2.) + pow(sinRb,2.) - pow((zz1/Ra/Rb),2.) ); } else { zz1=-sqrt(xx1/yy1); xx2=-zz1*invRaRb*sin(thetac)*cos(thetac)-sqrt(pow(cosRa,2.) + pow(sinRb,2.) - pow((zz1/Ra/Rb),2.) ); } yy2=pow(cosRa,2.)+pow(sinRb,2.); zz2=xx2/yy2; for(i=0; i<3; i++) { N_contact1[i]=zz1*TT1_[i]+zz2*NN1_[i]; } /* for(i=0; i<3; i++) { N_contact2[i]=-sin(-thetac)*X1[i]+cos(-thetac)*Op2_[i]; } MatVecProduct(&N_contact1[0], ITran_A_, &N_contact2[0], 3, 3); Cell_contact_length=sqrt(pow(Ra*sin(thetac),2.)+pow(Rb*cos(thetac),2.)); */ VecMinus(xyz1, xyz0, xyz2); height=Dot(NN1_,xyz2); if(P_shape==Ellipsoid) { // hc=Cell_contact_length*Dot(NN1_,N_contact1); hc=Dot(NN1_,N_contact1); if(hc<0.) { hc=fabs(hc); } else { for(i=0 ;i<3; i++) N_contact1[i]=-N_contact1[i]; //hc=fabs(Cell_contact_length*Dot(NN1_,N_contact1)); hc=fabs(Dot(NN1_,N_contact1)); } thetac2=acos(Dot(y2,N_contact1)/sqrt(Dot(N_contact1,N_contact1))); if(thetac2 >0.5*PI) thetac2=PI - thetac2; stiff_coef=Spring_force_ellipsoid(Ra, Rb, thetac2); for(i=0; i<3; i++) { vec_r[i]=N_contact1[i]; } } else if(P_shape==RBC) { Cross(y2,NN1_,y2NN); Cross(y2NN,y2,x2); hc=fabs(Ra*Dot(NN1_,x2)); } if(P_shape==Ellipsoid || P_shape==RBC) { r1=4.*Rbead; r2=0.5*Rbead; } else r1=R; d=height-hc; if(P_shape==Ellipsoid) { if(d<0.) { Bneighbor.push_back(bn1); } } else if(P_shape==RBC) { if(height= delta_max) { //re_calculation=1; //goto lab1; delta=delta_max; } else delta=fabs(d); if(Dot(udir,TT1_)>0) { for(i=0; i<3; i++) WFrepul_[i]=stiff_coef*pow(delta,1.5)*(NN1_[i]+0.2*TT1_[i]); } else { for(i=0; i<3; i++) WFrepul_[i]=stiff_coef*pow(delta,1.5)*(NN1_[i]-0.2*TT1_[i]); } Cross(vec_r,WFrepul_,WTrepul_); MatVecProduct(WTrepul_, Tran_A_, WTrepul_, 3, 3); for(i=0; i<3; i++) { Sum_WFrepul_[i]+=WFrepul_[i]; Sum_WTrepul_[i]+=WTrepul_[i]; } if(delta>repusive_dist_wall) { for(i=0; i<3; i++) xyz1[i]= xyz1[i] + 1.5*fabs(d)*(NN1_[i]); } else { for(i=0; i<3; i++) xyz1[i]= xyz1[i] + 1.5*fabs(d)*(NN1_[i]); } Make_ellipsoid_in_Solver(pn,xyz1,&epsP2_[0].v[0], y2); sum2=0.; for(i=0; i<3; i++) sum2 = sum2 + uvw1[i] * NN1_[i]; if(sum2<0) { for(i=0; i<3; i++) temp2[i]= Mp*sum2 * NN1_[i]; Cross(vec_r, temp2, temp1); MatVecProduct(temp2, Tran_A_, temp1, 3, 3); if(SLIP==1) { for(i=0; i<3; i++) { // uvw1[i] = uvw1[i] - sum2*NN1_[i]; // omega1[i] = omega1[i] - temp2[i]/Ip[i]; } } else { for(i=0; i<3; i++) { // uvw1[i] = uvw1[i] - 2.0*sum2*NN1_[i]; // omega1[i] = omega1[i] - temp2[i]/Ip[i]; } } } } */ } //when there is a cell contact on the wall } bnlen=Bneighbor.size(); if(bnlen==0) goto lab1; dist1.resize(bnlen); for(j=1; j<=Len1; j++) { for(i=0; i<3; i++) xyz_beadcenter[i] = xyz_EPS(j,i+1); icp_bead=InewTetra(xyz_beadcenter,icp); if(icp_bead>0) bn1=NwallJ(icp_bead,1); else bn1=NwallJ(icp,1); if(bn1==0) goto lab2; Bcenter(bn1,xyz0); Nvec2(bn1,NN1_); VecMinus(xyz_beadcenter, xyz0, xyz2); height2=Dot(NN1_,xyz2); if(height2<=0.5*Rbead) { c_contact++; Cross(y2,NN1_,y2NN); abc_mag=sqrt(Dot(y2NN,y2NN)); for(i=0; i<3; i++) y2NN[i]=y2NN[i]/abc_mag; Cross(y2NN,y2,X1); abc_mag=sqrt(Dot(X1,X1)); for(i=0; i<3; i++) X1[i]=X1[i]/abc_mag; Cross(NN1_,y2NN,TT1_); abc_mag=sqrt(Dot(TT1_,TT1_)); for(i=0; i<3; i++) TT1_[i]=TT1_[i]/abc_mag; Op2_[0]=0.; Op2_[1]=1.; Op2_[2]=0.; if(Dot(y2,NN1_)<=0.) { abc_mag=Dot(TT1_,y2); if(abc_mag>=1.) abc_mag=1.; thetac=acos(abc_mag); if(thetac<0.) thetac=thetac+PI; } else { abc_mag=Dot(TT1_,y2); if(abc_mag>=1.) abc_mag=1.; thetac=acos(abc_mag); thetac=2.*PI-thetac; } cosRa=cos(thetac)/Ra; sinRb=sin(thetac)/Rb; invRaRb=1./(Ra*Ra)-1./(Rb*Rb); xx1=pow((Rb*Rb-Ra*Ra)*sin(thetac)*cos(thetac),2.)*(cosRa*cosRa+sinRb*sinRb); yy1=1.+pow((Ra*Rb*invRaRb*sin(thetac)*cos(thetac)),2.); if(Dot(y2,NN1_)<=0.) { zz1=sqrt(xx1/yy1); xx2=-zz1*invRaRb*sin(thetac)*cos(thetac)-sqrt(pow(cosRa,2.) + pow(sinRb,2.) - pow((zz1/Ra/Rb),2.) ); } else { zz1=-sqrt(xx1/yy1); xx2=-zz1*invRaRb*sin(thetac)*cos(thetac)-sqrt(pow(cosRa,2.) + pow(sinRb,2.) - pow((zz1/Ra/Rb),2.) ); } yy2=pow(cosRa,2.)+pow(sinRb,2.); zz2=xx2/yy2; for(i=0; i<3; i++) { N_contact1[i]=zz1*TT1_[i]+zz2*NN1_[i]; } if(P_shape==Ellipsoid) { hc=Dot(NN1_,N_contact1); if(hc<0.) { hc=fabs(hc); } else { for(i=0 ;i<3; i++) N_contact1[i]=-N_contact1[i]; hc=fabs(Dot(NN1_,N_contact1)); } thetac2=acos(Dot(y2,N_contact1)/sqrt(Dot(N_contact1,N_contact1))); if(thetac2 >0.5*PI) thetac2=PI - thetac2; stiff_coef=Spring_force_ellipsoid(Ra, Rb, thetac2); for(i=0; i<3; i++) { vec_r[i]=N_contact1[i]; } } d2=height2-hc; c_contact++; for(i=0; i<3; i++) { xyz_bead_contact[i] = xyz_beadcenter[i] - height2*NN1_[i]; } //VecMinus(xyz_bead_contact,xyz1,vec_r); d=r2-height2; if(d>= delta_max) { //re_calculation=1; delta=delta_max; } else delta=d; for(i=0; i<3; i++) { WFrepul_[i]=stiff_coef*pow(delta,1.5)*(NN1_[i]); } Cross(vec_r,WFrepul_,WTrepul_); MatVecProduct(WTrepul_, Tran_A_, WTrepul_, 3, 3); for(i=0; i<3; i++) { Sum_WFrepul_[i]+=WFrepul_[i]; Sum_WTrepul_[i]+=WTrepul_[i]; } if(d>repusive_dist_wall) { for(i=0; i<3; i++) xyz1[i]= xyz1[i] + 1.5*d*(NN1_[i]); } else { for(i=0; i<3; i++) xyz1[i]= xyz1[i] + 1.5*d*(NN1_[i]); } Make_ellipsoid_in_Solver(pn,xyz1,&epsP2_[0].v[0], y2); sum2=0.; for(i=0; i<3; i++) sum2 = sum2 + uvw1[i] * NN1_[i]; if(sum2<0) { for(i=0; i<3; i++) temp2[i]= Mp*sum2 * NN1_[i]; Cross(vec_r, temp2, temp1); MatVecProduct(temp2, Tran_A_, temp1, 3, 3); if(SLIP==1) { for(i=0; i<3; i++) { uvw1[i] = uvw1[i] - sum2*NN1_[i]; omega1[i] = omega1[i] - temp2[i]/Ip[i]; } } else { for(i=0; i<3; i++) { uvw1[i] = uvw1[i] - 2.0*sum2*NN1_[i]; omega1[i] = omega1[i] - temp2[i]/Ip[i]; } } } } lab2: ; } lab1: dist1.clear(); Bneighbor.clear(); if(c_contact==0) Refulsive_signal=0; else Refulsive_signal=1; delete xyz_bead_bound; delete NN2_; delete TT1_; delete TT2_; delete Op2_; delete abc; delete N_contact1; delete N_contact2; delete X1; delete X3; delete udir; } /**************************************************************************/ void GravityForce() /**************************************************************************/ { F_grav_[0]=0.; F_grav_[1]=0.; F_grav_[2]=-g; } double Nwallb(int i, double xyz[]) /**************************************************************************/ { double min1, res; int m, k; int bd, j; min1=0.; if(Mesh==Tetra) { res=1.0e30; for(j=1; j<=7; j++) { bd=NwallJ(i,j); if(bd!=0) { Bcenter(bd, Bcen_); VecMinus(xyz, Bcen_, tmp11_); Nvec2(bd,wallN_); min1=Dot(wallN_,tmp11_); res=MIN(min1,res); } } } else { for(k=1; k<=6; k++) { m=cboundJ(i,k); if( m<0 && Bregion(-m)==0) { AC(i,k); VecMinus(xyz, Acen_, tmp11_); Nvec(i,k,wallN_); res=Dot(wallN_,tmp11_); break; } } } return (res); } /**************************************************************************/ /**************************************************************************/ void ParticleSeed(int pn, double stime ,double S_slope[],int niter, int Lo) /**************************************************************************/ { double sum1,del; int i,j,k,Coll_count,m,m1, nv,n,k1; double *ss,*vp1,*vp0; double y2[3]; ss=new double[3]; vp1=new double[3]; vp0=new double[3]; if(AGAIN==0) { for(j=1; j<=MXC; j++) CellRT_[j-1]=0.; bbcount=0; Contact=0; cccount=0; Coll_count=0; TStep(1) = 1.0e-5; //TimeFind(time(1), xyz1, LoPa(1)); for(m=0; m=50*Nb) { iPath = i; TStep(iPath)=200*T; Deposit(LoPa(i,m))=Deposit(LoPa(i,m))+1; FPLoX(pn,m)= xP(i,m); FPLoY(pn,m)= yP(i,m); FPLoZ(pn,m)= zP(i,m); FPVelU(pn,m) =uP(i,m); FPVelV(pn,m) =vP(i,m); FPVelW(pn,m) =wP(i,m); DepositP(pn,m)=LoPa(i,m); /* it gives each chain's location */ if(P_shape==Ellipsoid) { FPox(pn,m)=oX(i,m); FPoy(pn,m)=oY(i,m); FPoz(pn,m)=oZ(i,m); FPeps1(pn,m)=eps1_TR(i,m); FPeps2(pn,m)=eps2_TR(i,m); FPeps3(pn,m)=eps3_TR(i,m); FPeps4(pn,m)=eta_TR(i,m); Make_ellipsoid_in_Deposition(pn,&FPLo_[pn-1][m].xyz[0], &FPEPS_[pn-1][m].v[0], pn); } goto lab2; } else { lab4: TStep(i)=0.7 * TStep(i); goto lab1; } } else if( Subcset(LoPa(i+1,m))==0 ) { iPath = i; TStep(iPath)=TStep(iPath-1); for(m1=0; m1=500*Nb ) { iPath = i; TStep(iPath)=200*T; Deposit(LoPa(i,m))=Deposit(LoPa(i,m))+1; FPLoX(pn,m)= xP(i,m); FPLoY(pn,m)= yP(i,m); FPLoZ(pn,m)= zP(i,m); FPVelU(pn,m) =uP(i,m); FPVelV(pn,m) =vP(i,m); FPVelW(pn,m) =wP(i,m); DepositP(pn,m)=LoPa(i,m); /* it gives each chain's location */ if(P_shape==Ellipsoid ) { FPox(pn,m)=oX(i,m); FPoy(pn,m)=oY(i,m); FPoz(pn,m)=oZ(i,m); FPeps1(pn,m)=eps1_TR(i,m); FPeps2(pn,m)=eps2_TR(i,m); FPeps3(pn,m)=eps3_TR(i,m); FPeps4(pn,m)=eta_TR(i,m); Make_ellipsoid_in_Deposition(pn,&FPLo_[pn-1][m].xyz[0], &FPEPS_[pn-1][m].v[0], pn); } goto lab2; } } else if QcbTetra(LoPa(i+1,m),LoPa(i,m)) { Flag = 1; if((Nwall(LoPa(i+1,m))!=0 || Nwall2(LoPa(i+1,m))!=0 || Nwall3(LoPa(i+1,m))!=0 || Nwall4(LoPa(i+1,m))!=0 || Nwall5(LoPa(i+1,m))!=0 || Nwall6(LoPa(i+1,m))!=0 || Nwall7(LoPa(i+1,m))!=0 ) && TStep(i) < 1.0e-12) cccount=cccount+1; if(cccount>=500*Nb ) { iPath = i; TStep(iPath)=200*T; Deposit(LoPa(i,m))=Deposit(LoPa(i,m))+1; FPLoX(pn,m)= xP(i,m); FPLoY(pn,m)= yP(i,m); FPLoZ(pn,m)= zP(i,m); FPVelU(pn,m) =uP(i,m); FPVelV(pn,m) =vP(i,m); FPVelW(pn,m) =wP(i,m); DepositP(pn,m)=LoPa(i,m); /* it gives each chain's location */ if(P_shape==Ellipsoid ) { FPox(pn,m)=oX(i,m); FPoy(pn,m)=oY(i,m); FPoz(pn,m)=oZ(i,m); FPeps1(pn,m)=eps1_TR(i,m); FPeps2(pn,m)=eps2_TR(i,m); FPeps3(pn,m)=eps3_TR(i,m); FPeps4(pn,m)=eta_TR(i,m); Make_ellipsoid_in_Deposition(pn,&FPLo_[pn-1][m].xyz[0], &FPEPS_[pn-1][m].v[0], pn); } goto lab2; } } else if Qic1Tetra(LoPa(i+1,m),LoPa(i,m)) { Flag=1; cccount=0; } else if Qic2Tetra(LoPa(i+1,m),LoPa(i,m)) { Flag=1; cccount=0; } else if Qic3Tetra(LoPa(i+1,m),LoPa(i,m)) { Flag=1; cccount=0; } else if Qic4Tetra(LoPa(i+1,m),LoPa(i,m)) { Flag=1; cccount=0; } else if Qic5Tetra(LoPa(i+1,m),LoPa(i,m)) { Flag=1; cccount=0; } else if Qic6Tetra(LoPa(i+1,m),LoPa(i,m)) { Flag=1; cccount=0; } else { lab3: TStep(i)=0.7 * TStep(i); goto lab1; } } } for(m=0; m 0 && (Nwall(LoPa(i+1,m))!=0 || Nwall2(LoPa(i+1,m))!=0 || Nwall3(LoPa(i+1,m))!=0 || Nwall4(LoPa(i+1,m))!=0 || Nwall5(LoPa(i+1,m))!=0 || Nwall6(LoPa(i+1,m))!=0 || Nwall7(LoPa(i+1,m))!=0 )) { del = Nwallb(LoPa(i+1,m), &xyzPP2_[m].v1[0]); if(P_shape==Ellipsoid) { num_bound = MAX(Ra,Rb); } if(del <= num_bound ) { if(Dep==1) { if(P_shape==Ellipsoid || P_shape==RBC) { Make_ellipsoid_in_Solver(pn,&xyzPP2_[m].v1[0],&epsP2_[m].v[0], y2); Force_Wall_repulsive4(pn,LoPa(i+1,m),&xyzPP2_[m].v1[0],&uvwP2_[m].v1[0], &uvwF0_[m].v1[0], &omP2_[m].v1[0],y2,TStep(i+1)); if(re_calculation==1) { Refulsive_signal=0; goto lab4; } else if(re_calculation==2) { Refulsive_signal=0; TStep(i)=1.01 * TStep(i); goto lab3; } } else { ImageWall(&uvwP2_[m].v1[0], &xyzPP2_[m].v1[0], LoPa(i+1,m), num_bound - del,Rpvar1(pn)); } if(Mesh==Tetra) { LoPa(i+1,m)=InewTetra( &xyzPP2_[m].v1[0], LoPa(i,m)); if(CPIT(LoPa(i + 1,m))==4) { LoPa(i + 1,m)=Cell_search(LoPa(i + 1,m), &xyzPP2_[m].v1[0]); } } else LoPa(i+1,m)=Inew4( &xyzPP2_[m].v1[0], LoPa(i,m)); uP(i + 1,m)= uvwP2(m,0); vP(i + 1,m)= uvwP2(m,1); wP(i + 1,m)= uvwP2(m,2); xP(i + 1,m)= xyzP2(m,0); yP(i + 1,m)= xyzP2(m,1); zP(i + 1,m)= xyzP2(m,2); if(heat) { tempp(i + 1,m)= tP2(m,0); alpha_chp(i + 1,m)=alpha_chP2(m,0); } if(P_shape==Ellipsoid || P_shape==RBC) { oX(i + 1,m) = omP2(m,0); oY(i + 1,m) = omP2(m,1); oZ(i + 1,m) = omP2(m,2); OrienX(i+1,m)=OrienP2(m,0); OrienY(i+1,m)=OrienP2(m,1); OrienZ(i+1,m)=OrienP2(m,2); eps1_TR(i+1,m)=epsP2_[m].v[0]; eps2_TR(i+1,m)=epsP2_[m].v[1]; eps3_TR(i+1,m)=epsP2_[m].v[2]; eta_TR(i+1,m)=epsP2_[m].v[3]; } if (LoPa(i+1,m) < 0 && Bregion(-LoPa(i+1,m) )==0 ) { iPath = i; TStep(iPath)=200*T; Deposit(LoPa(i,m))=Deposit(LoPa(i,m))+1; FPLoX(pn,m)= xP(i,m); FPLoY(pn,m)= yP(i,m); FPLoZ(pn,m)= zP(i,m); FPVelU(pn,m) =uP(i,m); FPVelV(pn,m) =vP(i,m); FPVelW(pn,m) =wP(i,m); DepositP(pn,m)=LoPa(i,m); /* it gives each chain's location */ if(P_shape==Ellipsoid || P_shape==RBC) { FPox(pn,m)=oX(i,m); FPoy(pn,m)=oY(i,m); FPoz(pn,m)=oZ(i,m); FPeps1(pn,m)=eps1_TR(i,m); FPeps2(pn,m)=eps2_TR(i,m); FPeps3(pn,m)=eps3_TR(i,m); FPeps4(pn,m)=eta_TR(i,m); Make_ellipsoid_in_Deposition(pn,&FPLo_[pn-1][m].xyz[0], &FPEPS_[pn-1][m].v[0], pn); } goto lab2; } } } else Refulsive_signal=0; } else Refulsive_signal=0; } /*----------------------------------------------------------------------------------------------*/ time(i + 1) = time(i) + TStep(i); for(m=0; m1.0 ) /* when RT is larger than 1 sec. */ { iPath = i; TStep(iPath)=200*T; Deposit(LoPa(i,m))=Deposit(LoPa(i,m))+1; FPLoX(pn,m)= xP(i,m); FPLoY(pn,m)= yP(i,m); FPLoZ(pn,m)= zP(i,m); FPVelU(pn,m) =uP(i,m); FPVelV(pn,m) =vP(i,m); FPVelW(pn,m) =wP(i,m); DepositP(pn,m)=LoPa(i,m); /* it gives each chain's location */ if(P_shape==Ellipsoid || P_shape==RBC) { FPox(pn,m)=oX(i,m); FPoy(pn,m)=oY(i,m); FPoz(pn,m)=oZ(i,m); FPeps1(pn,m)=eps1_TR(i,m); FPeps2(pn,m)=eps2_TR(i,m); FPeps3(pn,m)=eps3_TR(i,m); FPeps4(pn,m)=eta_TR(i,m); Make_ellipsoid_in_Deposition(pn,&FPLo_[pn-1][m].xyz[0], &FPEPS_[pn-1][m].v[0], pn); } goto lab2; } } if(i==niter) { AGAIN=1; iPath = i; for(m=0; m= 1.0 || rsq_g ==0.0); fac_g=sqrt(-2.0*log(rsq_g)/rsq_g); gset=v1_g*fac_g; iset=1; return v2_g*fac_g; } else { iset=0; return gset; } } /**************************************************************************/ double gaussrand() /**************************************************************************/ { static double V1, V2, S; static int phase = 0; double X; if(phase == 0) { do { double U1 = (double)rand() / RAND_MAX; double U2 = (double)rand() / RAND_MAX; V1 = 2 * U1 - 1; V2 = 2 * U2 - 1; S = V1 * V1 + V2 * V2; } while(S >= 1 || S == 0); X = V1 * sqrt(-2 * log(S) / S); } else X = V2 * sqrt(-2 * log(S) / S); phase = 1 - phase; return X; } /**************************************************************************/ void Make_gaussdev() /**************************************************************************/ { long idum1; int i; idum1=-1; for(i=0; i<30000; i++) { GD[i]=gaussrand(); } } /**************************************************************************/ void Ellipsoid_Brownian_Motion(int lp,double xyz1[],double y2[], double delt, double rp) /**************************************************************************/ { double Dxx,Dyy,Dzz; double sigma[3]; long idum1,idum2,idum3; double dxyz[3]; int k,bn,j,lp1; double xyz0[3], NN_[3],Fbrown_NN[3],xyz3[3]; double len1, height,FBro,r1,hc; idum1=-1; idum2=-1; idum3=-1; // Dxx=2.*Kb*Tm*Kxx/delt; // Dyy=2.*Kb*Tm*Kyy/delt; // Dzz=2.*Kb*Tm*Kzz/delt; Dxx=Kb*Tm/(Kxx*PI*rp*mu); Dyy=Kb*Tm/(Kyy*PI*rp*mu); Dzz=Kb*Tm/(Kzz*PI*rp*mu); sigma[0]=sqrt(2.*Dxx*delt); sigma[1]=sqrt(2.*Dyy*delt); sigma[2]=sqrt(2.*Dzz*delt); /* Dxx=Kb*Tm*(Kxx*PI*R*mu); Dyy=Kb*Tm*(Kyy*PI*R*mu); Dzz=Kb*Tm*(Kzz*PI*R*mu); sigma[0]=sqrt(2.*Dxx/delt); sigma[1]=sqrt(2.*Dyy/delt); sigma[2]=sqrt(2.*Dzz/delt); */ //rn1=(int) RandomRange(29999.); dxyz[0]=sigma[0]*GD[Brown_c]; //rn1=(int) RandomRange(29999.); dxyz[1]=sigma[1]*GD[Brown_c+10000]; //rn1=(int) RandomRange(29999.); dxyz[2]=sigma[2]*GD[Brown_c+20000]; /*for(j=0; j<3; j++) { rm=uniform01()-0.5; dxyz[j]=rm*sigma[j]; } */ /* dxyz[0]=0.; dxyz[1]=0.; dxyz[2]=0.;*/ MatVecProduct(&F_Brown_[0].v1[0], ITran_A_, dxyz, 3, 3); FBro=sqrt(Dot(&F_Brown_[0].v1[0],&F_Brown_[0].v1[0])); if(FBro>rp) { for(j=0; j<3; j++) Fbrown_NN[j]=F_Brown_[0].v1[j]/FBro; for(j=0; j<3; j++) F_Brown_[0].v1[j]=rp*Fbrown_NN[j]; } for(j=0; j<3; j++) xyz3[j]=xyz1[j] + F_Brown_[0].v1[j]; lp1=InewTetra(xyz3,lp); if( lp1 <0) { for(j=0; j<3; j++) F_Brown_[0].v1[j]=-F_Brown_[0].v1[j]; goto lab1; } if ( lp > 0 && (Nwall(lp)!=0 || Nwall2(lp)!=0 || Nwall3(lp)!=0 || Nwall4(lp)!=0 || Nwall5(lp)!=0 || Nwall6(lp)!=0 || Nwall7(lp)!=0 )) { for(k=1;k<=7;k++) { bn=NwallJ(lp,k); if(bn==0) break; else { Bcenter(bn,xyz0); Nvec2(bn,NN_); VecMinus(xyz1, xyz0, xyz3); height=Dot(NN_,xyz3); r1=rp; hc=fabs(rp*Dot(NN_,y2)); if(height0. && rndx0 && rn= time0(j)) && (Mtime0(kk) < time0(j+1))) { kk_count++; if(kk_count==1) { kk0=kk; } cc=j; tau= (Mtime0(kk) - time0(j))/(time0(j+1) - time0(j)); MxP(kk) = tau*xP(j+1,m) + (1.-tau)*xP(j,m); MyP(kk) = tau*yP(j+1,m) + (1.-tau)*yP(j,m); MzP(kk) = tau*zP(j+1,m) + (1.-tau)*zP(j,m); if(MzP(kk)>=10000) { printf(" error \n"); } MuP(kk) = tau*uP(j+1,m) + (1.-tau)*uP(j,m); MvP(kk) = tau*vP(j+1,m) + (1.-tau)*vP(j,m); MwP(kk) = tau*wP(j+1,m) + (1.-tau)*wP(j,m); if(P_shape==Ellipsoid || P_shape==RBC) { MoxP(kk) = tau*oX(j+1,m) + (1.-tau)*oX(j,m); MoyP(kk) = tau*oY(j+1,m) + (1.-tau)*oY(j,m); MozP(kk) = tau*oZ(j+1,m) + (1.-tau)*oZ(j,m); Meps1P(kk) = tau*eps1_TR(j+1,m) + (1.-tau)*eps1_TR(j,m); Meps2P(kk) = tau*eps2_TR(j+1,m) + (1.-tau)*eps2_TR(j,m); Meps3P(kk) = tau*eps3_TR(j+1,m) + (1.-tau)*eps3_TR(j,m); MetaP(kk) = tau*eta_TR(j+1,m) + (1.-tau)*eta_TR(j,m); } else { MoxP(kk) = 0.; MoyP(kk) = 0.; MozP(kk) = 0.; Meps1P(kk) = 0.; Meps2P(kk) = 0.; Meps3P(kk) = 0.; MetaP(kk) = 0.; } MtempP(kk) = tau*tempp(j+1,m) + (1.-tau)*tempp(j,m); // MPT(kk) = Ptype(i); Mcelltype(kk)=i; if(P_shape==Ellipsoid) { MPT(kk) =0.56667e-6; } else if(P_shape==RBC) { MPT(kk) =2.*0.56667e-6; } else { MPT(kk) = 2.*Rpvar1(i); } newiPath=kk-1; if(j==iPath-1 && Mtime0(kk) < time0(iPath) ) goto lab1; else break; } else if(Mtime0(kk) >= time0(iPath) && Mtime0(kk) <= tend) { if(TStep(iPath) > 100*T) { cc=iPath-1; MxP(kk) = xP(iPath,m) ; MyP(kk) = yP(iPath,m) ; MzP(kk) = zP(iPath,m) ; if(MzP(kk)>=10000) { printf(" error \n"); } MuP(kk) = uP(iPath,m); MvP(kk) = vP(iPath,m); MwP(kk) = wP(iPath,m); if(P_shape==Ellipsoid || P_shape==RBC) { MoxP(kk) = oX(iPath,m); MoyP(kk) = oY(iPath,m); MozP(kk) = oZ(iPath,m); Meps1P(kk) = eps1_TR(iPath,m); Meps2P(kk) = eps2_TR(iPath,m); Meps3P(kk) = eps3_TR(iPath,m); MetaP(kk) = eta_TR(iPath,m); } else { MoxP(kk) = 0.; MoyP(kk) = 0.; MozP(kk) = 0.; Meps1P(kk) = 0.; Meps2P(kk) = 0.; Meps3P(kk) = 0.; MetaP(kk) = 0.; } // MPT(kk) = Ptype(i); MtempP(kk) =tempp(iPath,m); Mcelltype(kk)=i; if(P_shape==Ellipsoid) { MPT(kk) =0.56667e-6; } else if(P_shape==RBC) { MPT(kk) =2.*0.56667e-6; } else { MPT(kk) = 2.*Rpvar1(i); } newiPath=kk-1; break; } else { MxP(kk) = xP(iPath,m) ; MyP(kk) = yP(iPath,m) ; MzP(kk) = zP(iPath,m) ; MuP(kk) = uP(iPath,m); MvP(kk) = vP(iPath,m); MwP(kk) = wP(iPath,m); // MPT(kk) = Ptype(i); if(P_shape==Ellipsoid || P_shape==RBC) { MoxP(kk) = oX(iPath,m); MoyP(kk) = oY(iPath,m); MozP(kk) = oZ(iPath,m); Meps1P(kk) = eps1_TR(iPath,m); Meps2P(kk) = eps2_TR(iPath,m); Meps3P(kk) = eps3_TR(iPath,m); MetaP(kk) = eta_TR(iPath,m); } else { MoxP(kk) = 0.; MoyP(kk) = 0.; MozP(kk) = 0.; Meps1P(kk) = 0.; Meps2P(kk) = 0.; Meps3P(kk) = 0.; MetaP(kk) = 0.; } MtempP(kk) =tempp(iPath,m); Mcelltype(kk)=i; if(P_shape==Ellipsoid) { MPT(kk) =0.56667e-6; } else if(P_shape==RBC) { MPT(kk) =2.*0.56667e-6; } else { MPT(kk) = 2.*Rpvar1(i); } newiPath=kk-1; goto lab1; } } else if(Mtime0(kk) > tend) { newiPath=kk-1; goto lab1; } } } lab1: if(flag==0) goto lab4; if(newiPath==0) goto lab2; endk= (int)((tend-tstart)/Mts) + 1; // for(dd=0; dd<=(nT-1); dd++) for(dd=0; dd<=(1-1); dd++) { if(dd%100==0) out(f,"\n Summing Period %d !!",dd+1); for(j=1; j<=newiPath; j++ ) { Mtime(j)=Mtime0(j) + dd*T; } kk = (int)(RoundOff((Mtime(1)-tstart)/Mts)); for(j=kk0;j<=newiPath; j++) { if(j+kk <= endk) { Mcount(kk+j) = Mcount(kk+j) + 1; tZoneX(kk+j, Mcount(kk+j) )=MxP(j); tZoneY(kk+j, Mcount(kk+j) )=MyP(j); tZoneZ(kk+j, Mcount(kk+j) )=MzP(j); tZoneU(kk+j, Mcount(kk+j) )=MuP(j); tZoneV(kk+j, Mcount(kk+j) )=MvP(j); tZoneW(kk+j, Mcount(kk+j) )=MwP(j); tZoneOx(kk+j, Mcount(kk+j) )=MoxP(j); tZoneOy(kk+j, Mcount(kk+j) )=MoyP(j); tZoneOz(kk+j, Mcount(kk+j) )=MozP(j); tZoneEps1(kk+j, Mcount(kk+j) )=Meps1P(j); tZoneEps2(kk+j, Mcount(kk+j) )=Meps2P(j); tZoneEps3(kk+j, Mcount(kk+j) )=Meps3P(j); tZoneEta(kk+j, Mcount(kk+j) )=MetaP(j); tZoneTemp(kk+j, Mcount(kk+j) )=MtempP(j); tZoneCelltype(kk+j, Mcount(kk+j) )=Mcelltype(j); tZoneRP(kk+j, Mcount(kk+j) )=MPT(j); } else break; } } lab2: delete [] Mxyz_; delete [] Muvw_; delete MomegaX_; delete MomegaY_; delete MomegaZ_; delete Meps1P_; delete Meps2P_; delete Meps3P_; delete MetaP_; delete McellType_; delete Mtime_; delete Mtime0_; } /**************************************************************************/ /**************************************************************************/ /**************************************************************************/ void ReadTrack2_BIN(double t, double tstart,double tend, int i, int m, double Mts) /**************************************************************************/ { int j,j1, n, kk,nT, dd,js, flag; int cc, k, endk, newiPath; double tau; struct zigzag inZig; struct zigzag *ptr; /* the memory address we will send to readbinary */ ptr = &inZig; k=(int)(RoundOff(t/TimeStep)); n=(int)(RoundOff(T/TimeStep)); nT=(int)(RoundOff(tend/T)); P_shape=celltype(i); // t2=(double)((k%n)*TimeStep); /* sprintf(jobtemp,"time_%lf_particle_%d.trkb", t2,i); ifrbdev(jobtemp) { out(f,"\n *ERROR-UNABLE TO OPEN %s", jobtemp); goto lab2; } else { if(i%1==0) out(f,"\n time: %lf LOADING PROBLEM DATA FROM FILE %s\n", t,jobtemp); } */ flag=0; js=1; lab4: for(j1=js; ;j1++ ) { if(j1%MaxIter==0) j=MaxIter; else j=j1%MaxIter; // fscanf(rbdev,recform2,&time0(j),&TStep(j),&LoPa(j),&xP(j),&yP(j),&zP(j),&uP(j),&vP(j),&wP(j),&Act(j),&Weight(j)); readBinary(rbdev,ptr); if(P_shape==Ellipsoid || P_shape==RBC) { LoPa(j,m) =inZig.a; time0(j) = inZig.b[0]; TStep(j) = inZig.b[1]; xP(j,m) = inZig.b[2]; yP(j,m) = inZig.b[3]; zP(j,m) = inZig.b[4]; uP(j,m) = inZig.b[5]; vP(j,m) = inZig.b[6]; wP(j,m) = inZig.b[7]; oX(j,m) = inZig.b[8]; oY(j,m) = inZig.b[9]; oZ(j,m) = inZig.b[10]; eps1_TR(j,m) = inZig.b[11]; eps2_TR(j,m) = inZig.b[12]; eps3_TR(j,m) = inZig.b[13]; eta_TR(j,m) = inZig.b[14]; tempp(j,m) = inZig.b[15]; tempF(j,m) = inZig.b[16]; alpha_chp(j,m)=inZig.b[17]; Slope(j,m)=inZig.b[18]; } else { LoPa(j,m) =inZig.a; time0(j) = inZig.b[0]; TStep(j) = inZig.b[1]; xP(j,m) = inZig.b[2]; yP(j,m) = inZig.b[3]; zP(j,m) = inZig.b[4]; uP(j,m) = inZig.b[5]; vP(j,m) = inZig.b[6]; wP(j,m) = inZig.b[7]; tempp(j,m) = inZig.b[8]; tempp(j,m) = inZig.b[9]; alpha_chp(j,m) = inZig.b[10]; Weight(j) = inZig.b[11]; Slope(j,m)=inZig.b[12]; } if(TStep(j)<-10000000000.) { printf(" timestep warning \n"); } if(j1%MaxIter==0) { iPath=j; if(feof(rdev)) { flag=1; break; } else { js=j1+1; goto lab3; } } if(feof(rbdev)) { iPath=j; break; } } fclose(rbdev); lab3: cc=1; newiPath=0; for(kk=1; ; kk++) // 다시 시간 단위로 재 배열 { Mtime0(kk) = tstart + Mts*(kk-1); for(j=cc; j<=iPath-1; j++) { if((Mtime0(kk) >= time0(j)) && (Mtime0(kk) < time0(j+1)) ) { cc=j; tau= (Mtime0(kk) - time0(j))/(time0(j+1) - time0(j)); MxP(kk) = tau*xP(j+1,m) + (1.-tau)*xP(j,m); MyP(kk) = tau*yP(j+1,m) + (1.-tau)*yP(j,m); MzP(kk) = tau*zP(j+1,m) + (1.-tau)*zP(j,m); if(MzP(kk)>=10000) { printf(" error \n"); } MuP(kk) = tau*uP(j+1,m) + (1.-tau)*uP(j,m); MvP(kk) = tau*vP(j+1,m) + (1.-tau)*vP(j,m); MwP(kk) = tau*wP(j+1,m) + (1.-tau)*wP(j,m); if(P_shape==Ellipsoid || P_shape==RBC) { MoxP(kk) = tau*oX(j+1,m) + (1.-tau)*oX(j,m); MoyP(kk) = tau*oY(j+1,m) + (1.-tau)*oY(j,m); MozP(kk) = tau*oZ(j+1,m) + (1.-tau)*oZ(j,m); Meps1P(kk) = tau*eps1_TR(j+1,m) + (1.-tau)*eps1_TR(j,m); Meps2P(kk) = tau*eps2_TR(j+1,m) + (1.-tau)*eps2_TR(j,m); Meps3P(kk) = tau*eps3_TR(j+1,m) + (1.-tau)*eps3_TR(j,m); MetaP(kk) = tau*eta_TR(j+1,m) + (1.-tau)*eta_TR(j,m); } else { MoxP(kk) = 0.; MoyP(kk) = 0.; MozP(kk) = 0.; Meps1P(kk) = 0.; Meps2P(kk) = 0.; Meps3P(kk) = 0.; MetaP(kk) = 0.; } MtempP(kk) = tau*tempp(j+1,m) + (1.-tau)*tempp(j,m); Mcelltype(kk)=i; if(P_shape==Ellipsoid) { MPT(kk) =0.56667e-6; } else if(P_shape==RBC) { MPT(kk) =2.*0.56667e-6; } else { MPT(kk) = 2.*Rpvar1(i); } newiPath=kk; if(j==iPath-1 && Mtime0(kk) < time0(iPath) ) goto lab1; else break; } else if(Mtime0(kk) >= time0(iPath) && Mtime0(kk) <= tend) { if(TStep(iPath) > 100*T) { cc=iPath-1; MxP(kk) = xP(iPath,m) ; MyP(kk) = yP(iPath,m) ; MzP(kk) = zP(iPath,m) ; if(MzP(kk)>=10000) { printf(" error \n"); } MuP(kk) = uP(iPath,m); MvP(kk) = vP(iPath,m); MwP(kk) = wP(iPath,m); if(P_shape==Ellipsoid || P_shape==RBC) { MoxP(kk) = oX(iPath,m); MoyP(kk) = oY(iPath,m); MozP(kk) = oZ(iPath,m); Meps1P(kk) = eps1_TR(iPath,m); Meps2P(kk) = eps2_TR(iPath,m); Meps3P(kk) = eps3_TR(iPath,m); MetaP(kk) = eta_TR(iPath,m); } else { MoxP(kk) = 0.; MoyP(kk) = 0.; MozP(kk) = 0.; Meps1P(kk) = 0.; Meps2P(kk) = 0.; Meps3P(kk) = 0.; MetaP(kk) = 0.; } MtempP(kk) = tempp(iPath,m); // MPT(kk) = Ptype(i); Mcelltype(kk)=i; if(P_shape==Ellipsoid) { MPT(kk) =0.56667e-6; } else if(P_shape==RBC) { MPT(kk) =2.*0.56667e-6; } else { MPT(kk) = 2.*Rpvar1(i); } newiPath=kk; break; } } else if(Mtime0(kk) > tend) { newiPath=kk; goto lab1; } } } lab1: if(flag==0) goto lab4; if(newiPath==0) goto lab2; endk= (int)(RoundOff((tend-tstart)/Mts)) + 1; for(dd=0; dd<=(1-1); dd++) { if(dd%100==0) out(f,"\n Summing Period %d !!",dd+1); for(j=1; j<=newiPath; j++ ) { Mtime(j)=Mtime0(j) + dd*T; } kk = (int)(RoundOff((Mtime(1)-tstart)/Mts)); for(j=1;j<=newiPath; j++) { if(j+kk <= endk) { Mcount(kk+j) = Mcount(kk+j) + 1; tZoneX(kk+j, Mcount(kk+j) )=MxP(j); tZoneY(kk+j, Mcount(kk+j) )=MyP(j); tZoneZ(kk+j, Mcount(kk+j) )=MzP(j); tZoneU(kk+j, Mcount(kk+j) )=MuP(j); tZoneV(kk+j, Mcount(kk+j) )=MvP(j); tZoneW(kk+j, Mcount(kk+j) )=MwP(j); tZoneOx(kk+j, Mcount(kk+j) )=MoxP(j); tZoneOy(kk+j, Mcount(kk+j) )=MoyP(j); tZoneOz(kk+j, Mcount(kk+j) )=MozP(j); tZoneEps1(kk+j, Mcount(kk+j) )=Meps1P(j); tZoneEps2(kk+j, Mcount(kk+j) )=Meps2P(j); tZoneEps3(kk+j, Mcount(kk+j) )=Meps3P(j); tZoneEta(kk+j, Mcount(kk+j) )=MetaP(j); tZoneTemp(kk+j, Mcount(kk+j) )=MtempP(j); tZoneCelltype(kk+j, Mcount(kk+j) )=Mcelltype(j); tZoneRP(kk+j, Mcount(kk+j) )=MPT(j); } else break; } } lab2: ; } /**************************************************************************/ int ImposeInletVel(int i,double t, int Lo) /**************************************************************************/ { int flag,m; double del; flag=0; for(m=0; m0) { if(WallCell2(Lo) == 3 || Nwall(Lo)!=0 || Nwall2(Lo)!=0 || Nwall3(Lo)!=0 || Nwall4(Lo)!=0 || Nwall5(Lo)!=0 || Nwall6(Lo)!=0 || Nwall7(Lo)!=0 ) { del = Nwallb(Lo, &xP(1,m)); num_bound = Rpvar1(i); if( (del <=num_bound) ) goto lab1; } flag=1; if(STEADY==1) { SteadyInter0(Lo, t, &xP(1,m), InVel_,InT_); if(Magnet) SteadyInter0(Lo, t, &xP(1,m), InVel_,Fm1_); } else { if(TempInt==0) CubicInter1(Lo, t, &xP(1,m), InVel_, Fm1_); else LinearInter0(Lo, t, &xP(1,m), InVel_, Fm1_); } uP(1,m)= InVel_[0]; vP(1,m)= InVel_[1]; wP(1,m)= InVel_[2]; tempp(1,m)=InT_[0]; tempF(1,m)=InT_[0]; if(heat) { alpha_chp(1,m)=1.; } } } lab1: Lo_init=Lo; return flag; } /**************************************************************************/ double uniform01(void) /**************************************************************************/ { return rand()/((double) RAND_MAX + 1); } /**************************************************************************/ /**************************************************************************/ void Make_Elliptic_Init(int is) /**************************************************************************/ { if(P_shape==Ellipsoid) { Minor_a=Rpvar1(is); Major_b=Rpvar2(is); Beta_ab=Major_b/Minor_a; Vo = 4.*PI*Minor_a*Minor_a*Minor_a*Beta_ab/3.; } else if(P_shape==RBC) { Minor_a=3.4625e-6; Major_b=1.33086e-6; Beta_ab=Major_b/Minor_a; Vo = 98.e-18; } Mp = rhop*Vo; beta_ab2=Beta_ab*Beta_ab; Ip[0]=0.2*(1.+beta_ab2)* Minor_a*Minor_a*Mp; Ip[1]=0.4* Minor_a*Minor_a*Mp; Ip[2]=0.2*(1.+beta_ab2)* Minor_a*Minor_a*Mp; if(Beta_ab>1.) { sq_beta_ab2minusOne=sqrt(fabs(beta_ab2-1.)); log_beta_ab2=log(Beta_ab + sq_beta_ab2minusOne); Kxx=16.*pow(sq_beta_ab2minusOne,3)/( (2.*sq_beta_ab2minusOne*sq_beta_ab2minusOne - 1.)*log_beta_ab2 + Beta_ab*sq_beta_ab2minusOne); Kzz=Kxx; Kyy=8.*pow(sq_beta_ab2minusOne,3)/( (2.*sq_beta_ab2minusOne*sq_beta_ab2minusOne + 1.)*log_beta_ab2 - Beta_ab*sq_beta_ab2minusOne); Minor_a2=Minor_a*Minor_a; Major_b2=Major_b*Major_b; Minor_a3=Minor_a2*Minor_a; betaMinusaOne=beta_ab2-1.; Beta_ab0 = -2./betaMinusaOne - Beta_ab*(pow(betaMinusaOne,-3./2.))*log((Beta_ab - sq_beta_ab2minusOne)/(Beta_ab + sq_beta_ab2minusOne)); Alpha_ab0= beta_ab2/betaMinusaOne + 0.5*Beta_ab*(pow(betaMinusaOne,-3./2.))*log((Beta_ab - sq_beta_ab2minusOne)/(Beta_ab + sq_beta_ab2minusOne)); Gamma_ab0= Alpha_ab0; } else if(Beta_ab==1.0) { Kxx=6.;Kyy=6.;Kzz=6.; Minor_a2=Minor_a*Minor_a; Major_b2=Major_b*Major_b; Minor_a3=Minor_a2*Minor_a; Alpha_ab0=2./3.; Beta_ab0 =Alpha_ab0; Gamma_ab0=Alpha_ab0; } else if(Beta_ab<1.) { sq_beta_ab2minusOne=sqrt(fabs(beta_ab2-1.)); log_beta_ab2=atan(sq_beta_ab2minusOne/Beta_ab); Kxx=16.*pow(sq_beta_ab2minusOne,3)/( (2.*sq_beta_ab2minusOne*sq_beta_ab2minusOne - 1.)*log_beta_ab2 - Beta_ab*sq_beta_ab2minusOne); Kzz=Kxx; Kyy=8.*pow(sq_beta_ab2minusOne,3)/( (2.*sq_beta_ab2minusOne*sq_beta_ab2minusOne - 1.)*log_beta_ab2 + Beta_ab*sq_beta_ab2minusOne); Minor_a2=Minor_a*Minor_a; Major_b2=Major_b*Major_b; Minor_a3=Minor_a2*Minor_a; betaMinusaOne=1.-beta_ab2; Beta_ab0 = 2./betaMinusaOne - 2.*Beta_ab*(pow(betaMinusaOne,-3./2.))*atan(sqrt(betaMinusaOne)/Beta_ab); Alpha_ab0= beta_ab2/betaMinusaOne + Beta_ab*(pow(betaMinusaOne,-3./2.))*atan(sqrt(betaMinusaOne)/Beta_ab); Gamma_ab0= Alpha_ab0; } } void Transform_A(double omega1[],double epsV[], double DVfDx[], double DVfDy[], double DVfDz[], double DDVf_xx[],double DDVf_yy[],double DDVf_zz[], double DDVf_xy[],double DDVf_xz[],double DDVf_yz[]) /**************************************************************************/ { double T_DDVf[3]; int i,j; Tran_A(0,0)=1.-2.*(epsV[1]*epsV[1]+epsV[2]*epsV[2]); Tran_A(0,1)=2.*(epsV[0]*epsV[1]+epsV[2]*epsV[3]); Tran_A(0,2)=2.*(epsV[0]*epsV[2]-epsV[1]*epsV[3]); Tran_A(1,0)=2.*(epsV[0]*epsV[1]-epsV[2]*epsV[3]); Tran_A(1,1)=1.-2.*(epsV[0]*epsV[0]+epsV[2]*epsV[2]); Tran_A(1,2)=2.*(epsV[1]*epsV[2]+epsV[0]*epsV[3]); Tran_A(2,0)=2.*(epsV[0]*epsV[2]+epsV[1]*epsV[3]); Tran_A(2,1)=2.*(epsV[1]*epsV[2]-epsV[0]*epsV[3]); Tran_A(2,2)=1.-2.*(epsV[0]*epsV[0]+epsV[1]*epsV[1]); for(i=0;i<3;i++) for(j=0;j<3;j++) ITran_A(j,i)=Tran_A(i,j); KMat(1,1)=pow(Tran_A(0,0),2.)*Kxx + pow(Tran_A(1,0),2.)*Kyy + pow(Tran_A(2,0),2.)*Kzz; KMat(1,2)=Tran_A(0,0)*Tran_A(0,1)*Kxx + Tran_A(1,0)*Tran_A(1,1)*Kyy + Tran_A(2,0)*Tran_A(2,1)*Kzz; KMat(1,3)=Tran_A(0,0)*Tran_A(0,2)*Kxx + Tran_A(1,0)*Tran_A(1,2)*Kyy + Tran_A(2,0)*Tran_A(2,2)*Kzz; KMat(2,1)=KMat(1,2); KMat(2,2)=pow(Tran_A(0,1),2.)*Kxx + pow(Tran_A(1,1),2.)*Kyy + pow(Tran_A(2,1),2.)*Kzz; KMat(2,3)=Tran_A(0,1)*Tran_A(0,2)*Kxx + Tran_A(1,1)*Tran_A(1,2)*Kyy + Tran_A(2,1)*Tran_A(2,2)*Kzz; KMat(3,1)=KMat(1,3); KMat(3,1)=KMat(2,3); KMat(3,3)=pow(Tran_A(0,2),2.)*Kxx + pow(Tran_A(1,2),2.)*Kyy + pow(Tran_A(2,2),2.)*Kzz; dKMat_e1(1,1)= 8.*epsV[1]*(epsV[0]*epsV[1] - epsV[2]*epsV[3])*Kyy + 8.*epsV[2]*(epsV[0]*epsV[2] + epsV[1]*epsV[3])*Kzz; dKMat_e2(1,1)= 8.*(epsV[1]*(-1. + 2.*pow(epsV[1],2.) + 2.*pow(epsV[2],2.))*Kxx + epsV[0]*(epsV[0]*epsV[1] - epsV[2]*epsV[3])*Kyy + epsV[3]*(epsV[0]*epsV[2] + epsV[1]*epsV[3])*Kzz); dKMat_e3(1,1)= 8.*(epsV[2]*(-1. + 2.*pow(epsV[1],2.) + 2.*pow(epsV[2],2.))*Kxx + epsV[3]*(-(epsV[0]*epsV[1]) + epsV[2]*epsV[3])*Kyy + epsV[0]*(epsV[0]*epsV[2] + epsV[1]*epsV[3])*Kzz); dKMat_e4(1,1)= 8.*epsV[2]*(-(epsV[0]*epsV[1]) + epsV[2]*epsV[3])*Kyy + 8.*epsV[1]*(epsV[0]*epsV[2] + epsV[1]*epsV[3])*Kzz; dKMat_e1(1,2)= -4.*pow(epsV[1],3.)*(Kxx - 3.*Kyy) + 8.*epsV[0]*epsV[2]*epsV[3]*(Kyy - Kzz) + epsV[1]*(2.*Kxx - 10.*Kyy + pow(epsV[3],2.)*(12.*Kyy - 4.*Kzz) + pow(epsV[2],2.)*(-4.*Kxx + 8.*Kyy + 4.*Kzz)); dKMat_e2(1,2)= 8.*epsV[1]*epsV[2]*epsV[3]*(-Kxx + Kzz) + epsV[0]*(2.*Kxx - 2.*Kyy + 4.*pow(epsV[1],2.)*(-3.*Kxx + Kyy) + 4.*pow(epsV[3],2.)*(Kyy - Kzz) + pow(epsV[2],2.)*(-4.*Kxx + 4.*Kzz)); dKMat_e3(1,2)= 2.*epsV[3]*(Kxx + Kyy - 2.*Kzz) - 4.*pow(epsV[1],2.)*epsV[3]*(Kxx + Kyy - 2.*Kzz) - 8.*epsV[0]*epsV[1]*epsV[2]*(Kxx + Kyy - Kzz) + 4.*pow(epsV[2],2.)*epsV[3]*(-3.*Kxx + 2.*Kyy + Kzz) + pow(epsV[3],3.)*(-4.*Kyy + 4.*Kzz); dKMat_e4(1,2)= 2.*epsV[2]*(Kxx + Kyy - 2.*Kzz) - 4.*pow(epsV[1],2.)*epsV[2]*(Kxx + Kyy - 2.*Kzz) - 8.*epsV[0]*epsV[1]*epsV[3]*Kzz + pow(epsV[2],3.)*(-4.*Kxx + 4.*Kzz) + epsV[2]*pow(epsV[3],2.)*(-4.*Kyy + 4.*Kzz); dKMat_e1(1,3)= -4.*pow(epsV[2],3.)*(Kxx - 3.*Kzz) + 8.*epsV[0]*epsV[1]*epsV[3]*(Kyy - Kzz) + epsV[2]*(2.*Kxx - 4.*pow(epsV[3],2.)*(Kyy - 3.*Kzz) - 10.*Kzz + pow(epsV[1],2.)*(-4.*Kxx + 4.*Kyy + 8.*Kzz)); dKMat_e2(1,3)= -2.*epsV[3]*(Kxx - 2.*Kyy + Kzz) + 4.*pow(epsV[2],2.)*epsV[3]*(Kxx - 2.*Kyy + Kzz) - 8.*epsV[0]*epsV[1]*epsV[2]*(Kxx - Kyy + Kzz) + pow(epsV[3],3.)*(-4.*Kyy + 4.*Kzz) + pow(epsV[1],2.)*epsV[3]*(12.*Kxx - 4.*(Kyy + 2.*Kzz)); dKMat_e3(1,3)= 8.*epsV[1]*epsV[2]*epsV[3]*(Kxx - Kyy) + epsV[0]*(2.*Kxx + pow(epsV[1],2.)*(-4.*Kxx + 4.*Kyy) - 2.*Kzz + 4*pow(epsV[2],2.)*(-3.*Kxx + Kzz) + pow(epsV[3],2.)*(-4.*Kyy + 4.*Kzz)); dKMat_e4(1,3)= 4.*pow(epsV[1],3.)*(Kxx - Kyy) - 8.*epsV[0]*epsV[2]*epsV[3]*Kyy - 2.*epsV[1]*(Kxx - 2.*Kyy + Kzz) + 4.*epsV[1]*pow(epsV[2],2.)*(Kxx - 2.*Kyy + Kzz) + epsV[1]*pow(epsV[3],2.)*(-4.*Kyy + 4.*Kzz); dKMat_e1(2,1)= pow(epsV[1],3.)*(-4.*Kxx + 4.*Kyy) - 8.*epsV[0]*epsV[2]*epsV[3]*Kzz + epsV[1]*(2.*Kxx - 2.*Kyy + 4.*pow(epsV[3],2.)*(Kyy - Kzz) + pow(epsV[2],2.)*(-4.*Kxx + 4.*Kzz)); dKMat_e2(2,1)= -8.*epsV[1]*epsV[2]*epsV[3]*(Kxx + Kyy - Kzz) + epsV[0]*(2.*Kxx - 12.*pow(epsV[1],2.)*(Kxx - Kyy) - 2.*Kyy + 4.*pow(epsV[3],2.)*(Kyy - Kzz) + pow(epsV[2],2.)*(-4.*Kxx + 4.*Kzz)); dKMat_e3(2,1)= 2.*epsV[3]*(Kxx + Kyy - 2.*Kzz) - 4.*pow(epsV[1],2.)*epsV[3]*(Kxx + Kyy - 2.*Kzz) + 4.*pow(epsV[2],2.)*epsV[3]*(-3.*Kxx + Kzz) + pow(epsV[3],3.)*(-4.*Kyy + 4.*Kzz) + epsV[0]*epsV[1]*epsV[2]*(-8.*Kxx + 8.*Kzz); dKMat_e4(2,1)= 8.*epsV[0]*epsV[1]*epsV[3]*(Kyy - Kzz) + pow(epsV[2],3.)*(-4.*Kxx + 4.*Kzz) + 2.*epsV[2]*(Kxx + Kyy - 2.*pow(epsV[1],2.)*(Kxx + Kyy - 2.*Kzz) - 2.*Kzz + 2.*pow(epsV[3],2.)*(-3.*Kyy + Kzz)); dKMat_e1(2,2)= 8.*(epsV[0]*pow(epsV[1],2.)*Kxx + epsV[1]*epsV[2]*epsV[3]*(Kxx - Kzz) + epsV[0]*pow(epsV[3],2.)*Kzz); dKMat_e2(2,2)= 8.*(epsV[0]*(epsV[0]*epsV[1] + epsV[2]*epsV[3])*Kxx + epsV[1]*(-1. + 2.*pow(epsV[1],2.) + 2.*pow(epsV[3],2.))*Kyy + epsV[2]*(epsV[1]*epsV[2] - epsV[0]*epsV[3])*Kzz); dKMat_e3(2,2)= 8.*(epsV[2]*pow(epsV[3],2.)*Kxx + epsV[0]*epsV[1]*epsV[3]*(Kxx - Kzz) + pow(epsV[1],2.)*epsV[2]*Kzz); dKMat_e4(2,2)= 8.*(epsV[2]*(epsV[0]*epsV[1] + epsV[2]*epsV[3])*Kxx + epsV[3]*(-1. + 2.*pow(epsV[1],2.) + 2.*pow(epsV[3],2.))*Kyy + epsV[0]*(-(epsV[1]*epsV[2]) + epsV[0]*epsV[3])*Kzz); dKMat_e1(2,3)= 8.*epsV[0]*epsV[1]*epsV[2]*(Kxx - Kzz) + epsV[3]*(-2.*Kyy + 4.*pow(epsV[2],2.)*(Kxx - 3.*Kzz) + 4.*pow(epsV[3],2.)*(Kyy - 3.*Kzz) + 10.*Kzz - 4.*pow(epsV[1],2.)*(Kxx - Kyy + 2.*Kzz)); dKMat_e2(2,3)= 8.*epsV[0]*epsV[1]*epsV[3]*(-Kxx + Kyy + Kzz) + pow(epsV[2],3.)*(-4.*Kxx + 4.*Kzz) + epsV[2]*(4.*Kxx - 2.*Kyy - 2.*Kzz + 4.*pow(epsV[3],2.)*(-2.*Kxx + Kyy + Kzz) - 4.*pow(epsV[1],2.)*(Kxx - 3.*Kyy + 2.*Kzz)); dKMat_e3(2,3)= 8.*epsV[0]*epsV[2]*epsV[3]*Kxx + epsV[1]*(pow(epsV[3],2.)*(-4.*Kxx + 4.*Kyy) + 2.*(-1 + 2.*pow(epsV[1],2.))*(Kyy - Kzz)) + 4.*pow(epsV[0],2.)*epsV[1]*(Kxx - Kzz); dKMat_e4(2,3)= 8.*epsV[1]*epsV[2]*epsV[3]*(-Kxx + Kyy) + epsV[0]*(-2.*Kyy + pow(epsV[1],2.)*(-4.*Kxx + 4.*Kyy) + pow(epsV[3],2.)*(12.*Kyy - 4.*Kzz) + 4*pow(epsV[2],2.)*(Kxx - Kzz) + 2.*Kzz); dKMat_e1(3,1)= 8.*epsV[0]*epsV[1]*epsV[3]*Kyy + pow(epsV[2],3.)*(-4.*Kxx + 4.*Kzz) + epsV[2]*(2.*Kxx + pow(epsV[1],2.)*(-4.*Kxx + 4.*Kyy) - 2.*Kzz + pow(epsV[3],2.)*(-4.*Kyy + 4.*Kzz)); dKMat_e2(3,1)= pow(epsV[1],2.)*epsV[3]*(12.*Kxx - 4.*Kyy) + epsV[0]*epsV[1]*epsV[2]*(-8.*Kxx + 8.*Kyy) - 2.*epsV[3]*(Kxx - 2.*Kyy + Kzz) + 4.*pow(epsV[2],2.)*epsV[3]*(Kxx - 2.*Kyy + Kzz) + pow(epsV[3],3.)*(-4.*Kyy + 4.*Kzz); dKMat_e3(3,1)= 8.*epsV[1]*epsV[2]*epsV[3]*(Kxx - Kyy + Kzz) + epsV[0]*(2.*Kxx + pow(epsV[1],2.)*(-4.*Kxx + 4.*Kyy) - 12.*pow(epsV[2],2.)*(Kxx - Kzz) - 2.*Kzz + pow(epsV[3],2.)*(-4.*Kyy + 4.*Kzz)); dKMat_e4(3,1)= 4.*pow(epsV[1],3.)*(Kxx - Kyy) + 8.*epsV[0]*epsV[2]*epsV[3]*(-Kyy + Kzz) + epsV[1]*(-2.*Kxx + 4.*Kyy - 4.*pow(epsV[3],2.)*(Kyy - 3.*Kzz) - 2.*Kzz + 4.*pow(epsV[2],2.)*(Kxx - 2.*Kyy + Kzz)); dKMat_e1(3,2)= 8.*epsV[0]*epsV[1]*epsV[2]*(Kxx - Kyy) + epsV[3]*(-4.*pow(epsV[1],2.)*(Kxx - 3.*Kyy) - 10.*Kyy + pow(epsV[3],2.)*(12.*Kyy - 4.*Kzz) + 4.*pow(epsV[2],2.)*(Kxx + 2.*Kyy - Kzz) + 2.*Kzz); dKMat_e2(3,2)= 2.*(-4.*epsV[0]*epsV[1]*epsV[3]*Kxx + 2.*pow(epsV[0],2.)*epsV[2]*(Kxx - Kyy) + epsV[2]*(-((-1. + 2.*pow(epsV[2],2.))*(Kyy - Kzz)) + pow(epsV[3],2.)*(-2.*Kxx + 2.*Kzz))); dKMat_e3(3,2)= pow(epsV[1],3.)*(-4.*Kxx + 4.*Kyy) + 8.*epsV[0]*epsV[2]*epsV[3]*(Kxx - Kyy - Kzz) + epsV[1]*(4.*Kxx - 2.*Kyy - 4.*pow(epsV[2],2.)*(Kxx + 2.*Kyy - 3.*Kzz) - 2.*Kzz + 4.*pow(epsV[3],2.)*(-2.*Kxx + Kyy + Kzz)); dKMat_e4(3,2)= 8.*epsV[1]*epsV[2]*epsV[3]*(-Kxx + Kzz) + epsV[0]*(-2.*Kyy + pow(epsV[1],2.)*(-4.*Kxx + 4.*Kyy) + 4.*pow(epsV[3],2.)*(Kyy - 3*Kzz) + 4.*pow(epsV[2],2.)*(Kxx - Kzz) + 2.*Kzz); dKMat_e1(3,3)= 8.*epsV[2]*(epsV[0]*epsV[2] - epsV[1]*epsV[3])*Kxx + 8.*epsV[3]*(epsV[1]*epsV[2] + epsV[0]*epsV[3])*Kyy; dKMat_e2(3,3)= 8.*epsV[3]*(-(epsV[0]*epsV[2]) + epsV[1]*epsV[3])*Kxx + 8.*epsV[2]*(epsV[1]*epsV[2] + epsV[0]*epsV[3])*Kyy; dKMat_e3(3,3)= 8.*(epsV[0]*(epsV[0]*epsV[2] - epsV[1]*epsV[3])*Kxx + epsV[1]*(epsV[1]*epsV[2] + epsV[0]*epsV[3])*Kyy + epsV[2]*(-1. + 2.*pow(epsV[2],2.) + 2.*pow(epsV[3],2.))*Kzz); dKMat_e4(3,3)= 8.*(epsV[1]*(-(epsV[0]*epsV[2]) + epsV[1]*epsV[3])*Kxx + epsV[0]*(epsV[1]*epsV[2] + epsV[0]*epsV[3])*Kyy + epsV[3]*(-1. + 2.*pow(epsV[2],2.) + 2.*pow(epsV[3],2.))*Kzz); for(i=0; i<3; i++) { Tran_DVfDx[i]=0.; Tran_DVfDy[i]=0.; Tran_DVfDz[i]=0.; } for(i=0; i<3; i++) { for(j=0; j<3; j++) { Tran_DVfDx[i]+=Tran_A(i,j)*DVfDx[j]*ITran_A(0,0) + Tran_A(i,j)*DVfDy[j]*ITran_A(1,0) + Tran_A(i,j)*DVfDz[j]*ITran_A(2,0); Tran_DVfDy[i]+=Tran_A(i,j)*DVfDx[j]*ITran_A(0,1) + Tran_A(i,j)*DVfDy[j]*ITran_A(1,1) + Tran_A(i,j)*DVfDz[j]*ITran_A(2,1); Tran_DVfDz[i]+=Tran_A(i,j)*DVfDx[j]*ITran_A(0,2) + Tran_A(i,j)*DVfDy[j]*ITran_A(1,2) + Tran_A(i,j)*DVfDz[j]*ITran_A(2,2); } } // MatVecProduct(Tran_DVfDx, Tran_A_, T_DVfDx, 3, 3); // MatVecProduct(Tran_DVfDy, Tran_A_, T_DVfDy, 3, 3); // MatVecProduct(Tran_DVfDz, Tran_A_, T_DVfDz, 3, 3); dzy=0.5*(Tran_DVfDy[2]+Tran_DVfDz[1]); dyx=0.5*(Tran_DVfDx[1]+Tran_DVfDy[0]); wzy=0.5*(Tran_DVfDy[2]-Tran_DVfDz[1]); wxz=0.5*(Tran_DVfDz[0]-Tran_DVfDx[2]); wyx=0.5*(Tran_DVfDx[1]-Tran_DVfDy[0]); dThdo_[0]=16.*PI*mu*Minor_a3*Beta_ab/(3.*(beta_ab2*Beta_ab0+Gamma_ab0))*(beta_ab2+1); dThdo_[1]=32.*PI*mu*Minor_a3*Beta_ab/(3.*(Gamma_ab0+Alpha_ab0)); dThdo_[2]=16.*PI*mu*Minor_a3*Beta_ab/(3.*(beta_ab2*Beta_ab0+Alpha_ab0))*(beta_ab2+1); /*Th_[0]=16.*PI*mu*Minor_a3*Beta_ab/(3.*(beta_ab2*Beta_ab0+Gamma_ab0))*( (beta_ab2-1.)*dzy + (beta_ab2+1)*(wzy-omega1[0])); Th_[1]=32.*PI*mu*Minor_a3*Beta_ab/(3.*(Gamma_ab0+Alpha_ab0))*(wxz-omega1[1]+omega_fla); Th_[2]=16.*PI*mu*Minor_a3*Beta_ab/(3.*(beta_ab2*Beta_ab0+Alpha_ab0))*( (1.- beta_ab2)*dyx + (beta_ab2+1)*(wyx-omega1[2])); */ for(i=0; i<3; i++) { T_DDVf[i]= DDVf_xx[i]*(Minor_a2*ITran_A(0,0)*ITran_A(0,0) + Major_b2*ITran_A(0,1)*ITran_A(0,1) + Minor_a2*ITran_A(0,2)*ITran_A(0,2)) + DDVf_yy[i]*(Minor_a2*ITran_A(1,0)*ITran_A(1,0) + Major_b2*ITran_A(1,1)*ITran_A(1,1) + Minor_a2*ITran_A(1,2)*ITran_A(1,2)) + DDVf_zz[i]*(Minor_a2*ITran_A(2,0)*ITran_A(2,0) + Major_b2*ITran_A(2,1)*ITran_A(2,1) + Minor_a2*ITran_A(2,2)*ITran_A(2,2)) +2.* DDVf_xy[i]*(Minor_a2*ITran_A(0,0)*ITran_A(1,0) + Major_b2*ITran_A(0,1)*ITran_A(1,1) + Minor_a2*ITran_A(0,2)*ITran_A(1,2)) +2.* DDVf_xz[i]*(Minor_a2*ITran_A(0,0)*ITran_A(2,0) + Major_b2*ITran_A(0,1)*ITran_A(2,1) + Minor_a2*ITran_A(0,2)*ITran_A(2,2)) +2.* DDVf_yz[i]*(Minor_a2*ITran_A(1,0)*ITran_A(2,0) + Major_b2*ITran_A(1,1)*ITran_A(2,1) + Minor_a2*ITran_A(1,2)*ITran_A(2,2)); // Sec_Vis_F[i]=mu*Kvec[i]*T_DDVf[i]/6.; /* second term for viscous drag force */ } } /**************************************************************************/ void Find_Orientation(double output[]) /**************************************************************************/ { double y[3]; y[0]=0.; y[1]=1.; y[2]=0.; MatVecProduct(output, ITran_A_, y, 3, 3); } /**************************************************************************/ void Direct_cosine() /**************************************************************************/ { int i; double x[3],y[3],z[3]; double x1[3],y1[3],z1[3]; double aa11,aa12,aa13; double aa21,aa22,aa23; double aa31,aa32,aa33; for(i=0; i<3; i++) { x[i]=0.; x1[i]=0.; y[i]=0.; y1[i]=0.; z[i]=0.; z1[i]=0.; } x[0]=1.; y[1]=1.; z[2]=1.; x1[0]=-1.; y1[1]=-1.; z1[2]=1.; aa11=Dot(x,x1); aa12=Dot(x,y1); aa13=Dot(x,z1); aa21=Dot(y,x1); aa22=Dot(y,y1); aa23=Dot(y,z1); aa31=Dot(z,x1); aa32=Dot(z,y1); aa33=Dot(z,z1); eta=0.5*sqrt(1.+aa11+aa22+aa33); if(eta!=0) { eps1=0.25*(aa23-aa32)/(eta+smallest); eps2=0.25*(aa31-aa13)/(eta+smallest); eps3=0.25*(aa12-aa21)/(eta+smallest); } else { eps1=sqrt(0.5*(1.+ aa11)); if(eps1 != 0) { eps2 = 0.5*aa12/eps1; } else { eps2=sqrt(0.5*(1.+ aa22)); } if(eps2 != 0) { eps3 = 0.5*aa23/eps2; } else { eps3=sqrt(0.5*(1.+ aa33)); } } } void Function_ellipsoid(int pn,double theta, double phi, double output[]) /**************************************************************************/ { double a,b; if(P_shape==Ellipsoid) { a=Rpvar1(pn); b=Rpvar2(pn); output[0]=a*sin(theta)*cos(phi); output[1]=b*sin(phi); output[2]=a*cos(theta)*cos(phi); } else if(P_shape==RBC) { a=2.5e-6; b=1.38581894; output[0]=(a*b-0.56667e-6)*sin(phi)*cos(theta); output[1]=(0.5*a*b-0.56667e-6)*(0.207+2.003*pow(sin(phi),2.) - 1.123*pow(sin(phi),4.))*cos(phi); output[2]=(a*b-0.56667e-6)*sin(phi)*sin(theta); } } /**************************************************************************/ void Make_ellipsoid(int pn, double xyzPc[], double epsV[], int m, double y2[]) /**************************************************************************/ { int i,j,count; double theta,phi; double y1[3]; typexyz output[266],output2[266]; Tran_A(0,0)=1.-2.*(epsV[1]*epsV[1]+epsV[2]*epsV[2]); Tran_A(0,1)=2.*(epsV[0]*epsV[1]+epsV[2]*epsV[3]); Tran_A(0,2)=2.*(epsV[0]*epsV[2]-epsV[1]*epsV[3]); Tran_A(1,0)=2.*(epsV[0]*epsV[1]-epsV[2]*epsV[3]); Tran_A(1,1)=1.-2.*(epsV[0]*epsV[0]+epsV[2]*epsV[2]); Tran_A(1,2)=2.*(epsV[1]*epsV[2]+epsV[0]*epsV[3]); Tran_A(2,0)=2.*(epsV[0]*epsV[2]+epsV[1]*epsV[3]); Tran_A(2,1)=2.*(epsV[1]*epsV[2]-epsV[0]*epsV[3]); Tran_A(2,2)=1.-2.*(epsV[0]*epsV[0]+epsV[1]*epsV[1]); for(i=0;i<3;i++) for(j=0;j<3;j++) ITran_A(j,i)=Tran_A(i,j); if(P_shape==Ellipsoid) { theta=0.; phi=0.5*PI; Function_ellipsoid(pn, theta, phi, &output[0].v1[0]); count=0; phi=-0.729728; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn,theta, phi, &output[count].v1[0]); } phi=-0.339837; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn,theta, phi, &output[count].v1[0]); } phi=0.; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn,theta, phi, &output[count].v1[0]); } phi=0.339837; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn,theta, phi, &output[count].v1[0]); } phi=0.729728; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn,theta, phi, &output[count].v1[0]); } theta=0.; phi=-0.5*PI; Function_ellipsoid(pn, theta, phi, &output[31].v1[0]); for(i=0; i<32; i++) { MatVecProduct(&output2[i].v1[0], ITran_A_, &output[i].v1[0], 3, 3); for(j=0; j<3; j++) { xyzP_EL(m,i+1,j+1) = output2[i].v1[j] + xyzPc[j]; } } } y1[0]=0.; y1[1]=1.0; y1[2]=0.; MatVecProduct(&y2[0], ITran_A_, &y1[0], 3, 3); } /**************************************************************************/ void Make_ellipsoid_in_Deposition(int pn,double xyzPc[], double epsV[], int m) /**************************************************************************/ { int i,j,count; double theta,phi; // double y1[3]; typexyz output[266],output2[266]; Tran_A(0,0)=1.-2.*(epsV[1]*epsV[1]+epsV[2]*epsV[2]); Tran_A(0,1)=2.*(epsV[0]*epsV[1]+epsV[2]*epsV[3]); Tran_A(0,2)=2.*(epsV[0]*epsV[2]-epsV[1]*epsV[3]); Tran_A(1,0)=2.*(epsV[0]*epsV[1]-epsV[2]*epsV[3]); Tran_A(1,1)=1.-2.*(epsV[0]*epsV[0]+epsV[2]*epsV[2]); Tran_A(1,2)=2.*(epsV[1]*epsV[2]+epsV[0]*epsV[3]); Tran_A(2,0)=2.*(epsV[0]*epsV[2]+epsV[1]*epsV[3]); Tran_A(2,1)=2.*(epsV[1]*epsV[2]-epsV[0]*epsV[3]); Tran_A(2,2)=1.-2.*(epsV[0]*epsV[0]+epsV[1]*epsV[1]); for(i=0;i<3;i++) for(j=0;j<3;j++) ITran_A(j,i)=Tran_A(i,j); if(P_shape==Ellipsoid) { theta=0.; phi=0.5*PI; Function_ellipsoid(pn, theta, phi, &output[0].v1[0]); count=0; phi=-0.729728; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } phi=-0.339837; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } phi=0.; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } phi=0.339837; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } phi=0.729728; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } theta=0.; phi=-0.5*PI; Function_ellipsoid(pn, theta, phi, &output[31].v1[0]); for(i=0; i<32; i++) { MatVecProduct(&output2[i].v1[0], ITran_A_, &output[i].v1[0], 3, 3); for(j=0; j<3; j++) { xyzP_EL_DP(m,i+1,j+1) = output2[i].v1[j] + xyzPc[j]; } } } } /**************************************************************************/ void Make_ellipsoid_in_Solver(int pn, double xyzPc[],double epsV[], double y2[]) /**************************************************************************/ { int i,j,count; double theta,phi; double y1[3]; typexyz output[266],output2[266]; double temp[10]; Tran_A(0,0)=1.-2.*(epsV[1]*epsV[1]+epsV[2]*epsV[2]); Tran_A(0,1)=2.*(epsV[0]*epsV[1]+epsV[2]*epsV[3]); Tran_A(0,2)=2.*(epsV[0]*epsV[2]-epsV[1]*epsV[3]); Tran_A(1,0)=2.*(epsV[0]*epsV[1]-epsV[2]*epsV[3]); Tran_A(1,1)=1.-2.*(epsV[0]*epsV[0]+epsV[2]*epsV[2]); Tran_A(1,2)=2.*(epsV[1]*epsV[2]+epsV[0]*epsV[3]); Tran_A(2,0)=2.*(epsV[0]*epsV[2]+epsV[1]*epsV[3]); Tran_A(2,1)=2.*(epsV[1]*epsV[2]-epsV[0]*epsV[3]); Tran_A(2,2)=1.-2.*(epsV[0]*epsV[0]+epsV[1]*epsV[1]); for(i=0;i<3;i++) { for(j=0;j<3;j++) { ITran_A(j,i)=Tran_A(i,j); In_Ibody(i,j)=0.; } } In_Ibody(0,0)=1./Ip[0]; In_Ibody(1,1)=1./Ip[1]; In_Ibody(2,2)=1./Ip[2]; MatMatProduct(temp,In_Ibody_,Tran_A_,3,3,3); MatMatProduct(Ibody_,ITran_A_,temp,3,3,3); /* A-1.I-1_body.A */ if(P_shape==Ellipsoid) { theta=0.; phi=0.5*PI; Function_ellipsoid(pn, theta, phi, &output[0].v1[0]); count=0; phi=-0.729728; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } phi=-0.339837; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } phi=0.; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } phi=0.339837; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } phi=0.729728; for(j=0; j<6; j++) { count++; theta=PI*j/3.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } theta=0.; phi=-0.5*PI; Function_ellipsoid(pn, theta, phi, &output[31].v1[0]); for(i=0; i<32; i++) { MatVecProduct(&output2[i].v1[0], ITran_A_, &output[i].v1[0], 3, 3); for(j=0; j<3; j++) { xyz_EPS(i+1,j+1) = output2[i].v1[j] + xyzPc[j]; } } } else if(P_shape==RBC) { theta=0.; phi=0.; Function_ellipsoid(pn, theta, phi, &output[0].v1[0]); count=0; for(i=1; i<12; i++) { for(j=0; j<24; j++) { count++; phi=PI*i/12.; theta=PI*j/12.; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); } } count++; theta=0.; phi=PI; Function_ellipsoid(pn, theta, phi, &output[count].v1[0]); for(i=0; i<266; i++) { MatVecProduct(&output2[i].v1[0], ITran_A_, &output[i].v1[0], 3, 3); for(j=0; j<3; j++) { xyz_EPS(i+1,j+1) = output2[i].v1[j] + xyzPc[j]; } } } y1[0]=0.; y1[1]=1.0; y1[2]=0.; MatVecProduct(&y2[0], ITran_A_, &y1[0], 3, 3); } /**************************************************************************/ void Make_ellipsoid_GVX(double Vp[], double Vfluid[],double omegap[]) /**************************************************************************/ { double stiff_max=3.2e-4; Th_[0]=16.*PI*mu*Minor_a3*Beta_ab/(3.*(beta_ab2*Beta_ab0+Gamma_ab0))*( (beta_ab2-1.)*dzy + (beta_ab2+1)*(wzy-omegap[0])); Th_[1]=32.*PI*mu*Minor_a3*Beta_ab/(3.*(Gamma_ab0+Alpha_ab0))*(wxz-omegap[1]); Th_[2]=16.*PI*mu*Minor_a3*Beta_ab/(3.*(beta_ab2*Beta_ab0+Alpha_ab0))*( (1.- beta_ab2)*dyx + (beta_ab2+1)*(wyx-omegap[2])); GVX_E(0) = -mu*PI*R*( KMat(1,1)*(Vp[0] - Vfluid[0]) + KMat(1,2)*(Vp[1] - Vfluid[1]) + KMat(1,3)*(Vp[2] - Vfluid[2]))/Mp + (1.-alpha)*F_grav(0); GVX_E(1) = -mu*PI*R*( KMat(2,1)*(Vp[0] - Vfluid[0]) + KMat(2,2)*(Vp[1] - Vfluid[1]) + KMat(2,3)*(Vp[2] - Vfluid[2]))/Mp + (1.-alpha)*F_grav(1); GVX_E(2) = -mu*PI*R*( KMat(3,1)*(Vp[0] - Vfluid[0]) + KMat(3,2)*(Vp[1] - Vfluid[1]) + KMat(3,3)*(Vp[2] - Vfluid[2]))/Mp + (1.-alpha)*F_grav(2); GVX_E(3) = omegap[1]*omegap[2]*(Ip[1]-Ip[2])/Ip[0] + Th_[0]/Ip[0]; GVX_E(4) = Th_[1]/Ip[1]; GVX_E(5) = omegap[0]*omegap[1]*(Ip[0]-Ip[1])/Ip[2] + Th_[2]/Ip[2]; repusive_dist_wall=sqrt(GVX_E(0)*GVX_E(0)+GVX_E(1)*GVX_E(1)+GVX_E(2)*GVX_E(2))*Mp/stiff_max; } /**************************************************************************/ /**************************************************************************/ /**************************************************************************/ /**************************************************************************/ void Data_trasfer1(int i) /**************************************************************************/ { int m; for(m=0; m0) WriteTRP(i,m); } lab2: ; } if(i==100) SaveGDeposit2(id,1); else if(i==300) SaveGDeposit2(id,2); else if(i==500) SaveGDeposit2(id,3); else if (i==700) SaveGDeposit2(id,4); else if (i==1000) SaveGDeposit2(id,5); else if (i==2000) SaveGDeposit2(id,6); else if (i==3000) SaveGDeposit2(id,7); else if (i==4000) SaveGDeposit2(id,8); else if (i==5000) SaveGDeposit2(id,9); else if (i==7500) SaveGDeposit2(id,10); else if (i==10000) SaveGDeposit2(id,11); else if (i==12500) SaveGDeposit2(id,12); else if (i==15000) SaveGDeposit2(id,13); } } SaveDeposit(id); delete BetaCell_; delete Deposit_; delete boundCell2_; delete subcset_; delete tetra_uvw_; delete tetra_xyz_; delete tetra_t_; printf("Process %d is done \n", id); printf("!! Good Job !!\n", id); if(id==0) SaveGDeposit(id); } fclose(f2); fclose(f3); if(tecplot) { t1=MovieEndT; TecplotMovieGen_BIN(MovieStartT,MovieEndT, MovieDT); tecMacro_MakeMovie(NumMovieFrame ); tecMacro_MakeMovie2(NumMovieFrame ); tecMacro_MakeFlash(NumMovieFrame ); } delete CELL; delete CPIT_; delete CellRT_; delete vertex_; delete cbound_; delete verU_; delete verV_; delete verW_; delete verT_; Bicp_.clear(); Bface_.clear(); Bregion_.clear(); Bound_.clear(); Bound0_.clear(); cell_.clear(); return 0; }