74 char cflag[1],*lakonf=NULL,*sideface=NULL,fncvg[132]=
"";
76 ITG *ipointer=NULL,*mast1=NULL,*irow=NULL,*icol=NULL,*jq=NULL,
77 nzs=20000000,kode,compressible,*ifabou=NULL,*ja=NULL,
79 *ipkonf=NULL,*nelemface=NULL,last=0,icyclic,*iau6=NULL,
80 *inomat=NULL,ithermalref,*integerglob=NULL,iincf,
81 iconvergence=0,i,*inum=NULL,iitf,ifreefa,*neielcp=NULL,
82 *iponofa=NULL,*inofa=NULL,is,ie,*ia=NULL,*ielpropf=NULL,
83 icent=0,isti=0,iqfx=0,nfield,ndim,iorienglob,force=0,icfd=1,
84 imach=0,ikappa=0,iit,jit,iatleastonepressurebc,iturb=0,
85 *inoel=NULL,*iponoel=NULL;
87 ITG nelt,isym,itol,itmax,iunit,lrgw,*igwk=NULL,ligw,ierr,*iwork=NULL,iter,
90 double *umfa=NULL,reltime,*doubleglob=NULL,
91 *co=NULL,*vold=NULL,*coel=NULL,*cosa=NULL,*gradvel=NULL,*gradvfa=NULL,
92 *xxn=NULL,*xxi=NULL,*xle=NULL,*xlen=NULL,*xlet=NULL,timef,dtimef,
93 *cofa=NULL,*area=NULL,*xrlfa=NULL,reltimef,ttimef,*hcfa=NULL,*cvel=NULL,
94 *au=NULL,*ad=NULL,*b=NULL,*volume=NULL,*body=NULL,*dy=NULL,
95 *advfa=NULL,*ap=NULL,*bp=NULL,*xxj=NULL,*gradkel=NULL,*gradoel=NULL,
96 *v=NULL,*velo=NULL,*veloo=NULL,*cosb=NULL,dmin,tincfguess,
97 *hel=NULL,*hfa=NULL,*auv=NULL,*adv=NULL,*bv=NULL,*sel=NULL,*gamma=NULL,
98 *gradtfa=NULL,*gradtel=NULL,*umel=NULL,*cvfa=NULL,*gradpel=NULL,
99 *eei=NULL,*ener=NULL,*thicke=NULL,*eme=NULL,c[9],*gradkfa=NULL,
100 ptimef,*stn=NULL,*qfn=NULL,*hcel=NULL,*aua=NULL,a1,a2,a3,beta,
101 *prop=NULL,*dp=NULL,*xxni=NULL,*xxnj=NULL,*xxicn=NULL,*xturb=NULL,
102 *xmach=NULL,*xkappa=NULL,urelax,*
flux=NULL,velnormo[5],velnorm[5],
103 relnormt,relnormv,relnormp,relnormmax=1.e30,*temp=NULL,*auv6=NULL,
104 *adv6=NULL,*auv3=NULL,*bv3=NULL,*vela=NULL,*velaa=NULL,
105 *gradofa=NULL,betam=0.1,*gradpfa=NULL;
107 double tol,*rgwk=NULL,err,*sb=NULL,*sx=NULL,*rwork=NULL,*rf=NULL;
112 ipkonf=*ipkonfp;lakonf=*lakonfp;
113 nelemface=*nelemfacep;sideface=*sidefacep;
114 vold=*voldp;inomat=*inomatp;
120 strcpy(fncvg,jobnamec);
121 strcat(fncvg,
"f.cvg");
123 if((f1=fopen(fncvg,
"w"))==NULL){
125 printf(
"*ERROR in compfluid: cannot open cvg file for writing...");
128 fprintf(f1,
"temperature velocity pressure\n\n");
134 reltime=(*time)/(*tper);
143 char *env,*envloc,*envsys;
150 envsys=getenv(
"NUMBER_OF_CPUS");
152 sys_cpus=atoi(envsys);
153 if(sys_cpus<0) sys_cpus=0;
160 if(sys_cpus<1) sys_cpus=1;
165 envloc = getenv(
"CCX_NPROC_CFD");
177 env = getenv(
"OMP_NUM_THREADS");
204 if((*iexpl==1)||(*iexpl==3)){
213 ithermalref=*ithermal;
226 mastructf(nk,konf,ipkonf,lakonf,nef,icol,jq,&mast1,&irow,
227 isolver,ipointer,&nzs,ipnei,neiel,mi);
240 NNEW(aua,
double,nzs+*nef);
246 NNEW(coel,
double,3**nef);
247 NNEW(volume,
double,*nef);
248 NNEW(cosa,
double,*nflnei);
249 NNEW(cosb,
double,*nflnei);
250 NNEW(xxn,
double,3**nflnei);
251 NNEW(xxi,
double,3**nflnei);
252 NNEW(xxj,
double,3**nflnei);
253 NNEW(xxni,
double,3**nflnei);
254 NNEW(xxicn,
double,3**nflnei);
255 NNEW(xxnj,
double,3**nflnei);
256 NNEW(xle,
double,*nflnei);
257 NNEW(xlen,
double,*nflnei);
258 NNEW(xlet,
double,*nflnei);
259 NNEW(cofa,
double,3**nface);
260 NNEW(area,
double,*nface);
261 NNEW(xrlfa,
double,3**nface);
262 NNEW(rf,
double,3**nface);
263 if(*iturbulent>0)
NNEW(dy,
double,*nsolidsurf);
266 ielfa,area,ipnei,neiel,xxn,xxi,xle,xlen,xlet,xrlfa,cosa,
267 volume,neifa,xxj,cosb,&dmin,ifatie,cs,tieset,&icyclic,c,
268 neij,physcon,isolidsurf,nsolidsurf,dy,xxni,xxnj,xxicn,
269 nflnei,iturbulent,rf));
277 nboun,typeboun,nelemload,nload,sideload,isolidsurf,nsolidsurf,
278 ifabou,&nfabou,nface,nodeboun,ndirboun,ikmpc,ilmpc,labmpc,nmpc,
279 nactdohinv,&compressible,&iatleastonepressurebc,ipkonf,kon,konf,
290 konf,lakonf,nface,nk));
298 NNEW(umfa,
double,*nface);
299 NNEW(umel,
double,*nef);
314 NNEW(hcfa,
double,*nface);
315 NNEW(cvel,
double,*nef);
316 NNEW(cvfa,
double,*nface);
319 if(*nbody>0)
NNEW(body,
double,4**nef);
324 NNEW(v,
double,5**nk);
334 xloadold,xload,xloadact,iamload,nload,ibody,xbody,nbody,
335 xbodyold,xbodyact,t1old,t1,t1act,iamt1,nk,amta,
336 namta,nam,ampli,time,&reltime,ttime,dtime,ithermal,nmethod,
337 xbounold,xboun,xbounact,iamboun,nboun,
338 nodeboun,ndirboun,nodeforc,ndirforc,istep,iinc,
339 co,v,itg,ntg,amname,ikboun,ilboun,nelemload,sideload,mi,
340 ntrans,trab,inotr,vold,integerglob,doubleglob,tieset,istartset,
341 iendset,ialset,ntie,nmpc,ipompc,ikmpc,ilmpc,nodempc,coefmpc,
342 ipobody,iponoel,inoel));
355 NNEW(gradvel,
double,9**nef);
356 NNEW(gradvfa,
double,9**nface);
359 ifabou,xbounact,ipnei,nef,&icyclic,c,ifatie,xxn,gradvel,
360 gradvfa,neifa,rf,area,volume,xle,xxi,xxj,xlet,
361 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh));
366 NNEW(gradpel,
double,3**nef);
367 NNEW(gradpfa,
double,3**nface);
370 ifabou,xbounact,nef,gradpel,gradpfa,neifa,rf,area,volume,
371 xle,xxi,&icyclic,xxn,ipnei,ifatie,
372 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh));
379 NNEW(gradtel,
double,3**nef);
380 NNEW(gradtfa,
double,3**nface);
383 ifabou,xbounact,nef,gradtel,gradtfa,neifa,rf,area,volume,
384 xle,xxi,&icyclic,xxn,ipnei,ifatie,xload,xlet,xxj,
385 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh));
398 mi,ielfa,cvfa,physcon));
405 mi,ielfa,cvfa,physcon));
409 NNEW(flux,
double,6**nef);
433 mi,ielfa,ipnei,vel,nef,flux,gradpel,gradtel,xxj,
445 ithermal,mi,ielfa,umfa));
452 NNEW(gradkel,
double,3**nef);
453 NNEW(gradkfa,
double,3**nface);
454 NNEW(gradoel,
double,3**nef);
455 NNEW(gradofa,
double,3**nface);
460 ifabou,xbounact,nef,gradkel,gradkfa,neifa,rf,area,volume,
461 xle,xxi,&icyclic,xxn,ipnei,ifatie,xlet,xxj,
462 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh,
466 ifabou,xbounact,nef,gradoel,gradofa,neifa,rf,area,volume,
467 xle,xxi,&icyclic,xxn,ipnei,ifatie,xlet,xxj,
468 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh,
480 NNEW(advfa,
double,*nface);
481 NNEW(hfa,
double,3**nface);
483 NNEW(ap,
double,*nface);
484 NNEW(bp,
double,*nface);
486 NNEW(au,
double,*nflnei+*nef);
487 NNEW(ad,
double,*nef);
491 NNEW(auv6,
double,6**nef);
492 NNEW(adv6,
double,6**nef);
493 NNEW(auv3,
double,3**nef);
494 NNEW(bv3,
double,3**nef);
495 NNEW(vela,
double,8**nef);
496 NNEW(velaa,
double,8**nef);
498 NNEW(auv,
double,*nflnei+*nef);
501 NNEW(bv,
double,3**nef);
502 NNEW(hel,
double,3**nef);
503 NNEW(sel,
double,3**nef);
505 NNEW(rwork,
double,*nef);
509 NNEW(velo,
double,8**nef);
510 if((compressible==0)&&(*nblk==0))
NNEW(veloo,
double,8**nef);
514 if((compressible==0)&&(*nblk==0)) memcpy(&veloo[0],&vel[0],
sizeof(
double)*8**nef);
515 memcpy(&velo[0],&vel[0],
sizeof(
double)*8**nef);
519 if((
strcmp1(&filab[1914],
"MACH")==0)||
520 (
strcmp1(&filab[3132],
"PTF")==0)||
521 (
strcmp1(&filab[3219],
"TTF")==0)){
525 if((
strcmp1(&filab[3132],
"PTF")==0)||
526 (
strcmp1(&filab[3219],
"TTF")==0)){
530 if(
strcmp1(&filab[2088],
"TURB")==0){
534 for(i=0;i<*nprint;i++){
536 if((
strcmp1(&prlab[6*i],
"MACH")==0)||
537 (
strcmp1(&prlab[6*i],
"PTF")==0)||
538 (
strcmp1(&prlab[6*i],
"TTF")==0)){
543 if((
strcmp1(&prlab[6*i],
"PTF")==0)||
544 (
strcmp1(&prlab[6*i],
"TTF")==0)){
549 if(
strcmp1(&prlab[6*i],
"TURB")==0){
557 if(*tincf<=0.) *tincf=tincfguess;
558 printf(
"time increment for the CFD-calculations = %e\n\n",*tincf);
573 NNEW(temp,
double,6**nef);
574 NNEW(gamma,
double,*nface);
580 printf(
"fluid increment = %d\n",iincf);
583 if((*time<timef)&&(*nmethod==4)){
584 dtimef-=(timef-*time);
587 beta=dtimef/(*tincf);
588 a1=(2.+beta)/(1.+beta);
590 a3=1./(beta*(1.+beta));
596 for(i=0;i<5;i++){velnormo[i]=0;}
602 printf(
" iteration = %d\n",iit);
611 xloadold,xload,xloadact,iamload,nload,ibody,xbody,nbody,
612 xbodyold,xbodyact,t1old,t1,t1act,iamt1,nk,amta,
613 namta,nam,ampli,&timef,&reltimef,&ttimef,&dtimef,ithermal,nmethod,
614 xbounold,xboun,xbounact,iamboun,nboun,
615 nodeboun,ndirboun,nodeforc,ndirforc,istep,iinc,
616 co,v,itg,ntg,amname,ikboun,ilboun,nelemload,sideload,mi,
617 ntrans,trab,inotr,vold,integerglob,doubleglob,tieset,istartset,
618 iendset,ialset,ntie,nmpc,ipompc,ikmpc,ilmpc,nodempc,coefmpc,
619 ipobody,iponoel,inoel));
652 ntmat_,mi,cvel,vfa,cocon,ncocon,physcon,cvfa,
653 ithermal,nface,umel,umfa,ielfa,hcfa,rhcon,nrhcon));
663 ntmat_,mi,cvel,vfa,cocon,ncocon,physcon,cvfa,
664 ithermal,nface,umel,umfa,ielfa,hcfa));
674 DMEMSET(auv,0,*nflnei+*nef,0.);
682 ipnei,&betam,nef,flux));
685 auv,&auv[*nflnei],jq,irow,&nzs,bv,vel,cosa,umfa,
686 xlet,xle,gradvfa,xxi,
687 body,volume,ielfa,lakonf,ifabou,nbody,
688 &dtimef,velo,veloo,sel,xrlfa,gamma,xxj,nactdohinv,&a1,
689 &a2,&a3,flux,&icyclic,c,ifatie,iau6,xxni,xxnj,
700 auv,&auv[*nflnei],jq,irow,&nzs,bv,vel,cosa,umfa,
701 xlet,xle,gradvfa,xxi,
702 body,volume,ielfa,lakonf,ifabou,nbody,
703 &dtimef,velo,veloo,sel,xrlfa,gamma,xxj,nactdohinv,&a1,
704 &a2,&a3,flux,&icyclic,c,ifatie,iau6,xxni,xxnj);
710 NNEW(rgwk,
double,lrgw);
712 for(i=0;i<*nef;i++){rwork[i]=1./auv[*nflnei+i];}
715 memcpy(&temp[*nef],&vel[*nef],
sizeof(
double)*3**nef);
720 &isym,&itol,&tol,&itmax,&iter,
721 &err,&ierr,&iunit,sb,sx,rgwk,&lrgw,igwk,
724 printf(
"*WARNING in compfluid: error message from predgmres (v_x)=%d\n",ierr);
727 &isym,&itol,&tol,&itmax,&iter,
728 &err,&ierr,&iunit,sb,sx,rgwk,&lrgw,igwk,
731 printf(
"*WARNING in compfluid: error message from predgmres (v_y)=%d\n",ierr);
734 &isym,&itol,&tol,&itmax,&iter,
735 &err,&ierr,&iunit,sb,sx,rgwk,&lrgw,igwk,
738 printf(
"*WARNING in compfluid: error message from predgmres (v_z)=%d\n",ierr);
743 for(i=*nef;i<4**nef;i++){vel[i]=0.8*vel[i]+0.2*temp[i];}
762 for(iitf=0;iitf<jit;iitf++){
764 memcpy(&hel[0],&sel[0],
sizeof(
double)*(3**nef));
773 irow,ipnei,neiel,ifatie,c,lakonf,neifa,&nzs));
791 hfa,&icyclic,c,ifatie));
811 advfa,xlet,cosa,volume,au,ad,jq,irow,ap,
812 ielfa,ifabou,xle,b,xxn,nef,
813 &nzs,hfa,gradpel,bp,xxi,neij,xlen,cosb,
814 &iatleastonepressurebc,iau6,xxicn);
822 rhspmain(nef,lakonf,ipnei,neifa,neiel,vfa,area,
823 advfa,xlet,cosa,volume,au,ad,jq,irow,ap,ielfa,ifabou,xle,
824 b,xxn,nef,&nzs,hfa,gradpel,bp,xxi,neij,xlen,
825 &iatleastonepressurebc,xxicn);
843 lenw=131+17**nef+2*nelt;
844 NNEW(rgwk,
double,lenw);
845 leniw=32+4**nef+2*nelt;
848 memcpy(&temp[4**nef],&vel[4**nef],
sizeof(
double)**nef);
851 &isym,&nsave,&itol,&tol,&itmax,&iter,
852 &err,&ierr,&iunit,rgwk,&lenw,igwk,&leniw));
855 for(i=4**nef;i<5**nef;i++){vel[i]=0.3*vel[i]+0.7*temp[i];}
872 advfa,xlet,cosa,volume,au,&au[*nflnei],jq,irow,ap,
873 ielfa,ifabou,xle,b,xxn,nef,
874 &nzs,hfa,gradpel,bp,xxi,neij,xlen,cosb,
875 ielmatf,mi,&a1,&a2,&a3,velo,veloo,&dtimef,shcon,
876 ntmat_,vel,nactdohinv,xrlfa,flux,iau6,xxicn,
882 NNEW(rgwk,
double,lrgw);
884 for(i=0;i<*nef;i++){rwork[i]=1./au[*nflnei+i];}
886 NNEW(dp,
double,*nef);
888 &isym,&itol,&tol,&itmax,&iter,
889 &err,&ierr,&iunit,sb,sx,rgwk,&lrgw,igwk,
894 vel[4**nef+i]+=0.3*dp[i];
900 printf(
"*WARNING in compfluid: error message from predgmres (p)=%d\n",ierr);
906 ifabou,xbounact,nef,gradpel,gradpfa,neifa,rf,area,volume,
907 xle,xxi,&icyclic,xxn,ipnei,ifatie,
908 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh));
917 if((iitf<jit-1)&&((relnormmax>=1.e-5)||(iitf<1))){
920 ifabou,ipnei,nef,neifa,hfa,vel,xbounact,lakonf,
934 au,&au[*nflnei],jq,irow,&nzs,b,vel,umel,xlet,
936 body,volume,ielfa,lakonf,ifabou,nbody,nef,
937 &dtimef,velo,veloo,cvfa,hcfa,cvel,gradvel,
939 xrlfa,xxj,nactdohinv,&a1,&a2,&a3,flux,iau6,
945 NNEW(rgwk,
double,lrgw);
947 for(i=0;i<*nef;i++){rwork[i]=1./au[*nflnei+i];}
949 &isym,&itol,&tol,&itmax,&iter,
950 &err,&ierr,&iunit,sb,sx,rgwk,&lrgw,igwk,
954 printf(
"*WARNING in compfluid: error message from predgmres (T)=%d\n",ierr);
958 ifabou,xbounact,nef,gradtel,gradtfa,neifa,rf,area,volume,
959 xle,xxi,&icyclic,xxn,ipnei,ifatie,xload,xlet,xxj,
960 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh));
971 mi,ielfa,ipnei,vel,nef,flux,gradpel,gradtel,xxj,
974 for(i=0;i<5;i++){velnorm[i]=0;}
983 if(velnorm[0]/(*nef)>1.e-10){
984 relnormt=fabs(velnorm[0]-velnormo[0])/(velnormo[0]);
985 if(relnormt>relnormmax) relnormmax=relnormt;
988 if((velnorm[1]+velnorm[2]+velnorm[3])/(*nef)>1.e-10){
989 relnormv=fabs(velnorm[1]+velnorm[2]+velnorm[3]-velnormo[1]-velnormo[2]-velnormo[3])/(velnormo[1]+velnormo[2]+velnormo[3]);
990 if(relnormv>relnormmax) relnormmax=relnormv;
992 if(velnorm[4]/(*nef)>1.e-10){
993 relnormp=fabs(velnorm[4]-velnormo[4])/(velnormo[4]);
994 if(relnormp>relnormmax) relnormmax=relnormp;
996 printf(
"%d %11.4e %11.4e %11.4e\n",iitf,relnormt,relnormv,relnormp);
998 memcpy(velnormo,velnorm,
sizeof(
double)*5);
1015 ifabou,ipnei,nef,neifa,hfa,vel,xbounact,lakonf,
1023 DMEMSET(au,0,*nflnei+*nef,0.);
1026 if(compressible==0){
1031 ipnei,&betam,nef,flux));
1034 au,&au[*nflnei],jq,irow,&nzs,b,vel,umel,xlet,xle,gradtfa,xxi,
1035 body,volume,ielfa,lakonf,ifabou,nbody,nef,
1036 &dtimef,velo,veloo,cvfa,hcfa,cvel,gradvel,xload,gamma,
1037 xrlfa,xxj,nactdohinv,&a1,&a2,&a3,flux,iau6,xxni,xxnj,
1048 au,&au[*nflnei],jq,irow,&nzs,b,vel,umel,xlet,xle,gradtfa,xxi,
1049 body,volume,ielfa,lakonf,ifabou,nbody,nef,
1050 &dtimef,velo,veloo,cvfa,hcfa,cvel,gradvel,xload,gamma,
1051 xrlfa,xxj,nactdohinv,&a1,&a2,&a3,flux,iau6,xxni,xxnj);
1057 NNEW(rgwk,
double,lrgw);
1059 for(i=0;i<*nef;i++){rwork[i]=1./au[*nflnei+i];}
1061 &isym,&itol,&tol,&itmax,&iter,
1062 &err,&ierr,&iunit,sb,sx,rgwk,&lrgw,igwk,
1063 &ligw,rwork,iwork));
1066 printf(
"*WARNING in compfluid: error message from predgmres (T)=%d\n",ierr);
1073 ifabou,xbounact,nef,gradtel,gradtfa,neifa,rf,area,volume,
1074 xle,xxi,&icyclic,xxn,ipnei,ifatie,xload,xlet,xxj,
1075 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh));
1079 if(compressible!=0){
1090 mi,ielfa,ipnei,vel,nef,flux,gradpel,gradtel,xxj,
1101 DMEMSET(au,0,*nflnei+*nef,0.);
1107 ipnei,&betam,nef,flux));
1109 if(compressible==0){
1111 au,&au[*nflnei],jq,irow,&nzs,b,vel,umfa,xlet,xle,gradkfa,xxi,
1112 body,volume,ielfa,lakonf,ifabou,nbody,nef,
1113 &dtimef,velo,veloo,cvfa,hcfa,cvel,gradvel,xload,gamma,
1114 xrlfa,xxj,nactdohinv,&a1,&a2,&a3,flux,iau6,xxni,xxnj,
1118 au,&au[*nflnei],jq,irow,&nzs,b,vel,umel,xlet,xle,gradtfa,xxi,
1119 body,volume,ielfa,lakonf,ifabou,nbody,nef,
1120 &dtimef,velo,veloo,cvfa,hcfa,cvel,gradvel,xload,gamma,
1121 xrlfa,xxj,nactdohinv,&a1,&a2,&a3,flux,iau6,xxni,xxnj);
1127 NNEW(rgwk,
double,lrgw);
1129 for(i=0;i<*nef;i++){rwork[i]=1./au[*nflnei+i];}
1130 memcpy(&temp[0],&vel[6**nef],
sizeof(
double)**nef);
1132 &isym,&itol,&tol,&itmax,&iter,
1133 &err,&ierr,&iunit,sb,sx,rgwk,&lrgw,igwk,
1134 &ligw,rwork,iwork));
1137 printf(
"*WARNING in compfluid: error message from predgmres (k)=%d\n",ierr);
1142 DMEMSET(au,0,*nflnei+*nef,0.);
1148 ipnei,&betam,nef,flux));
1150 if(compressible==0){
1152 au,&au[*nflnei],jq,irow,&nzs,b,vel,umfa,xlet,xle,gradofa,xxi,
1153 body,volume,ielfa,lakonf,ifabou,nbody,nef,
1154 &dtimef,velo,veloo,cvfa,hcfa,cvel,gradvel,xload,gamma,
1155 xrlfa,xxj,nactdohinv,&a1,&a2,&a3,flux,iau6,xxni,xxnj,
1156 iturbulent,gradkel,gradoel);
1159 au,&au[*nflnei],jq,irow,&nzs,b,vel,umel,xlet,xle,gradtfa,xxi,
1160 body,volume,ielfa,lakonf,ifabou,nbody,nef,
1161 &dtimef,velo,veloo,cvfa,hcfa,cvel,gradvel,xload,gamma,
1162 xrlfa,xxj,nactdohinv,&a1,&a2,&a3,flux,iau6,xxni,xxnj);
1168 NNEW(rgwk,
double,lrgw);
1170 for(i=0;i<*nef;i++){rwork[i]=1./au[*nflnei+i];}
1172 &isym,&itol,&tol,&itmax,&iter,
1173 &err,&ierr,&iunit,sb,sx,rgwk,&lrgw,igwk,
1174 &ligw,rwork,iwork));
1177 printf(
"*WARNING in compfluid: error message from predgmres (om)=%d\n",ierr);
1182 memcpy(&vel[6**nef],&temp[0],
sizeof(
double)**nef);
1188 ifabou,xbounact,nef,gradkel,gradkfa,neifa,rf,area,volume,
1189 xle,xxi,&icyclic,xxn,ipnei,ifatie,xlet,xxj,
1190 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh,
1194 ifabou,xbounact,nef,gradoel,gradofa,neifa,rf,area,volume,
1195 xle,xxi,&icyclic,xxn,ipnei,ifatie,xlet,xxj,
1196 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh,
1205 ifabou,xbounact,ipnei,nef,&icyclic,c,ifatie,xxn,gradvel,
1206 gradvfa,neifa,rf,area,volume,xle,xxi,xxj,xlet,
1207 coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh));
1213 for(i=0;i<5;i++){velnorm[i]=0;}
1222 if(velnorm[0]/(*nef)>1.e-10){
1223 relnormt=fabs(velnorm[0]-velnormo[0])/(velnormo[0]);
1224 if(relnormt>relnormmax) relnormmax=relnormt;
1227 if((velnorm[1]+velnorm[2]+velnorm[3])/(*nef)>1.e-10){
1228 relnormv=fabs(velnorm[1]+velnorm[2]+velnorm[3]-velnormo[1]-velnormo[2]-velnormo[3])/(velnormo[1]+velnormo[2]+velnormo[3]);
1229 if(relnormv>relnormmax) relnormmax=relnormv;
1231 if(velnorm[4]/(*nef)>1.e-10){
1232 relnormp=fabs(velnorm[4]-velnormo[4])/(velnormo[4]);
1233 if(relnormp>relnormmax) relnormmax=relnormp;
1236 fprintf(f1,
"%11.4e %11.4e %11.4e\n",relnormt,relnormv,relnormp);
1239 memcpy(velnormo,velnorm,
sizeof(
double)*5);
1241 if((*nmethod==1)&&(compressible!=1)){
1246 if(relnormmax<1.e-10) iconvergence=1;
1254 if((compressible==1)&&(iit==1))
break;
1259 if(relnormmax<1.e-3)
break;
1264 if(((iincf/jout[1])*jout[1]==iincf)||(iconvergence==1)||
1270 if((
strcmp1(&filab[3306],
"SF ")==0)||
1271 (
strcmp1(&filab[3480],
"SVF ")==0))isti=1;
1272 if(
strcmp1(&filab[3393],
"HFLF")==0)iqfx=1;
1273 for(i=0;i<*nprint;i++){
1274 if(
strcmp1(&prlab[6*i],
"SVF")==0) isti=1;
1275 if(
strcmp1(&prlab[6*i],
"HFLF")==0)iqfx=1;
1281 NNEW(hcel,
double,*nef);
1289 if((isti==1)||(iqfx==1)){
1291 gradtel,nef,&isti,&iqfx,mi));
1292 if(iqfx==1)
SFREE(hcel);
1297 if((
strcmp1(&filab[3306],
"SF ")==0)||
1298 (
strcmp1(&filab[3480],
"SVF ")==0)){
1302 ((
strcmp1(&filab[3311],
"L")==0)||(
strcmp1(&filab[3485],
"L")==0))){
1307 strcpy1(&cflag[0],&filab[2962],1);
1308 NNEW(stn,
double,6**nk);
1310 &nfield,nk,nef,mi,&ndim,orab,ielorienf,co,&iorienglob,
1311 cflag,vold,&force,ielmatf,thicke,ielpropf,prop));
1317 if(
strcmp1(&filab[3393],
"HFLF")==0){
1320 if((*norien>0)&&(
strcmp1(&filab[3398],
"L")==0)){
1325 strcpy1(&cflag[0],&filab[3049],1);
1326 NNEW(qfn,
double,3**nk);
1328 &nfield,nk,nef,mi,&ndim,orab,ielorienf,co,&iorienglob,
1329 cflag,vold,&force,ielmatf,thicke,ielpropf,prop));
1335 if(imach){
NNEW(xmach,
double,*nk);}
1336 if(ikappa){
NNEW(xkappa,
double,*nk);}
1337 if(iturb){
NNEW(xturb,
double,2**nk);}
1340 ithermal,&imach,&ikappa,xmach,xkappa,shcon,nshcon,ntmat_,
1341 ielmatf,physcon,mi,&iturb,xturb));
1345 ptimef=ttimef+timef;
1347 prlab,prset,ipkonf,lakonf,sti,eei,
1348 xstate,ener,mi,nstate_,co,konf,qfx,
1349 &ptimef,trab,inotr,ntrans,orab,ielorienf,
1350 norien,vold,ielmatf,
1351 thicke,eme,xturb,physcon,nactdoh,
1352 ielpropf,prop,xkappa,xmach,ithermal,
1358 cocon,ncocon,&compressible,istartset,iendset,ipkonf,
1360 ialset,prset,&ptimef,nset,
set,nprint,prlab,ielmatf,mi,
1361 ithermal,nactdoh,&icfd,time,stn));
1365 FORTRAN(
frdfluid,(co,nk,konf,ipkonf,lakonf,nef,vold,&kode,&timef,ielmatf,
1366 matname,filab,inum,ntrans,inotr,trab,mi,istep,
1367 stn,qfn,nactdohinv,xmach,xkappa,physcon,xturb));
1371 if((
strcmp1(&filab[3306],
"SF ")==0)||
1375 if(imach){
SFREE(xmach);}
1376 if(ikappa){
SFREE(xkappa);}
1377 if(iturb){
SFREE(xturb);}
1382 printf(
"*INFO: maximum number of fluid increments reached\n\n");
1387 printf(
"*INFO: mechanical time increment reached: time=%e\n\n",*dtime);
1391 if(iconvergence==1){
1392 printf(
"*INFO: steady state reached\n\n");
1398 if((compressible==0)&&(*nblk==0)) memcpy(&veloo[0],&velo[0],
sizeof(
double)*8**nef);
1399 memcpy(&velo[0],&vel[0],
sizeof(
double)*8**nef);
1415 if(*iturbulent>0)
SFREE(dy);
1438 if((compressible==0)&&(*nblk==0))
SFREE(veloo);
1442 if(*nbody>0)
SFREE(body);
1444 *ithermal=ithermalref;
#define ITGFORMAT
Definition: CalculiX.h:52
subroutine calchcel(vel, cocon, ncocon, ielmat, ntmat_, mi, hcel, nef)
Definition: calchcel.f:21
subroutine convert2slapcol(au, ad, jq, nzs, nef, aua)
Definition: convert2slapcol.f:26
void mafilltmain(ITG *nef, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *xxn, double *area, double *au, double *ad, ITG *jq, ITG *irow, ITG *nzs, double *b, double *vel, double *umel, double *xlet, double *xle, double *gradtfa, double *xxi, double *body, double *volume, ITG *ielfa, char *lakonf, ITG *ifabou, ITG *nbody, ITG *neq, double *dtimef, double *velo, double *veloo, double *cpfa, double *hcfa, double *cvel, double *gradvel, double *xload, double *gammat, double *xrlfa, double *xxj, ITG *nactdohinv, double *a1, double *a2, double *a3, double *flux, ITG *iau6, double *xxni, double *xxnj, ITG *iturbulent)
Definition: mafilltmain.c:35
subroutine calcguesstincf(nface, dmin, vfa, umfa, cvfa, hcfa, ithermal, tincfguess, compressible)
Definition: calcguesstincf.f:21
subroutine calccvfa(nface, vfa, shcon, nshcon, ielmat, ntmat_, mi, ielfa, cvfa, physcon)
Definition: calccvfa.f:21
subroutine complete_hel(nef, bv, hel, adv, auv, ipnei, neiel, nzs)
Definition: complete_hel.f:26
subroutine calcbody(nef, body, ipobody, ibody, xbody, coel, vel, lakon, nactdohinv)
Definition: calcbody.f:21
subroutine inicalcbody(nef, body, ipobody, ibody, xbody, coel, vel, lakon, nactdohinv, icent)
Definition: inicalcbody.f:21
subroutine printoutfluid(set, nset, istartset, iendset, ialset, nprint, prlab, prset, ipkonf, lakonf, sti, eei, xstate, ener, mi, nstate_, co, konf, qfx, ttime, trab, inotr, ntrans, orab, ielorienf, norien, vold, ielmatf, thicke, eme, xturb, physcon, nactdoh, ielpropf, prop, xkappa, xmach, ithermal, orname)
Definition: printoutfluid.f:25
subroutine cataloguenodes(iponofa, inofa, ifreefa, ielfa, ifabou, ipkon, konf, lakon, nface, nk)
Definition: cataloguenodes.f:21
subroutine calcgammat(nface, ielfa, vel, gradtel, gamma, xlet, xxn, xxj, ipnei, betam, nef, flux)
Definition: calcgammat.f:21
subroutine calcumel(nef, vel, shcon, nshcon, ielmat, ntmat_, ithermal, mi, umel)
Definition: calcumel.f:21
subroutine calcrhofa(nface, vfa, rhcon, nrhcon, ielmat, ntmat_, ithermal, mi, ielfa)
Definition: calcrhofa.f:21
void mafillpcompmain(ITG *ne, char *lakonf, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *area, double *adfa, double *xlet, double *cosa, double *volume, double *au, double *ad, ITG *jq, ITG *irow, double *ap, ITG *ielfa, ITG *ifabou, double *xle, double *b, double *xxn, ITG *neq, ITG *nzs, double *hfa, double *gradpel, double *bp, double *xxi, ITG *neij, double *xlen, double *cosb, ITG *ielmatf, ITG *mi, double *a1, double *a2, double *a3, double *velo, double *veloo, double *dtimef, double *shcon, ITG *ntmat_, double *vel, ITG *nactdohinv, double *xrlfa, double *flux, ITG *iau6, double *xxicn, double *gamma)
Definition: mafillpcompmain.c:36
subroutine complete_hel_blk(vel, hel, auv6, ipnei, neiel, nef, nactdohinv)
Definition: complete_hel_blk.f:27
ITG strcpy1(char *s1, const char *s2, ITG length)
Definition: strcpy1.c:24
void FORTRAN(actideacti,(char *set, ITG *nset, ITG *istartset, ITG *iendset, ITG *ialset, char *objectset, ITG *ipkon, ITG *ibject, ITG *ne))
subroutine flux(node1, node2, nodem, nelem, lakon, kon, ipkon, nactdog, identity, ielprop, prop, kflag, v, xflow, f, nodef, idirf, df, cp, R, rho, physcon, g, co, dvi, numf, vold, set, shcon, nshcon, rhcon, nrhcon, ntmat_, mi, ider, ttime, time, iaxial)
Definition: flux.f:24
void mafillkmain(ITG *nef, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *xxn, double *area, double *au, double *ad, ITG *jq, ITG *irow, ITG *nzs, double *b, double *vel, double *umel, double *xlet, double *xle, double *gradkfa, double *xxi, double *body, double *volume, ITG *ielfa, char *lakonf, ITG *ifabou, ITG *nbody, ITG *neq, double *dtimef, double *velo, double *veloo, double *cpfa, double *hcfa, double *cvel, double *gradvel, double *xload, double *gammat, double *xrlfa, double *xxj, ITG *nactdohinv, double *a1, double *a2, double *a3, double *flux, ITG *iau6, double *xxni, double *xxnj, ITG *iturbulent)
Definition: mafillkmain.c:35
ITG strcmp1(const char *s1, const char *s2)
Definition: strcmp1.c:24
subroutine calcinitialflux(area, vfa, xxn, ipnei, nef, neifa, lakonf, flux)
Definition: calcinitialflux.f:21
subroutine frdfluid(co, nk, konf, ipkonf, lakonf, nef, vold, kode, time, ielmat, matname, filab, inum, ntrans, inotr, trab, mi, istep, stn, qfn, nactdohinv, xmach, xkappa, physcon, xturb)
Definition: frdfluid.f:22
subroutine norm(vel, velnorm, nef)
Definition: norm.f:20
subroutine openfilefluid(jobname)
Definition: openfilefluid.f:20
ITG getSystemCPUs()
Definition: getSystemCPUs.c:40
subroutine tempload(xforcold, xforc, xforcact, iamforc, nforc, xloadold, xload, xloadact, iamload, nload, ibody, xbody, nbody, xbodyold, xbodyact, t1old, t1, t1act, iamt1, nk, amta, namta, nam, ampli, time, reltime, ttime, dtime, ithermal, nmethod, xbounold, xboun, xbounact, iamboun, nboun, nodeboun, ndirboun, nodeforc, ndirforc, istep, iinc, co, vold, itg, ntg, amname, ikboun, ilboun, nelemload, sideload, mi, ntrans, trab, inotr, veold, integerglob, doubleglob, tieset, istartset, iendset, ialset, ntie, nmpc, ipompc, ikmpc, ilmpc, nodempc, coefmpc, ipobody, iponoel, inoel)
Definition: tempload.f:29
#define DMEMSET(a, b, c, d)
Definition: CalculiX.h:45
subroutine stop()
Definition: stop.f:20
subroutine preconvert2slapcol(irow, ia, jq, ja, nzs, nef)
Definition: preconvert2slapcol.f:26
subroutine dslugm(N, B, X, NELT, IA, JA, A, ISYM, NSAVE, ITOL, TOL, ITMAX, ITER, ERR, IERR, IUNIT, RWORK, LENW, IWORK, LENIW)
Definition: dslugm.f:4
subroutine correctvel(hel, adv, vfa, ipnei, area, bv, xxn, neifa, lakonf, nef, neq)
Definition: correctvel.f:21
subroutine closefilefluid()
Definition: closefilefluid.f:20
subroutine calchcfa(nface, vfa, cocon, ncocon, ielmat, ntmat_, mi, ielfa, hcfa)
Definition: calchcfa.f:21
subroutine calcgamma(nface, ielfa, vel, gradvel, gamma, xlet, xxn, xxj, ipnei, betam, nef, flux)
Definition: calcgamma.f:21
subroutine calcstressheatflux(sti, umel, gradvel, qfx, hcel, gradtel, nef, isti, iqfx, mi)
Definition: calcstressheatflux.f:21
subroutine calcumfa(nface, vfa, shcon, nshcon, ielmat, ntmat_, ithermal, mi, ielfa, umfa)
Definition: calcumfa.f:21
subroutine predgmres(n, b, x, nelt, ia, ja, a, isym, itol, tol, itmax, iter, err, ierr, iunit, sb, sx, rgwk, lrgw, igwk, ligw, rwork, iwork)
Definition: predgmres.f:28
subroutine complete_hel_cyclic_blk(vel, hel, auv6, c, ipnei, neiel, neifa, ifatie, nef)
Definition: complete_hel_cyclic_blk.f:27
#define RENEW(a, b, c)
Definition: CalculiX.h:40
subroutine materialdata_cfd_comp(nef, vel, shcon, nshcon, ielmatf, ntmat_, mi, cvel, vfa, cocon, ncocon, physcon, cvfa, ithermal, nface, umel, umfa, ielfa, hcfa)
Definition: materialdata_cfd_comp.f:22
#define SFREE(a)
Definition: CalculiX.h:41
subroutine calcgammak(nface, ielfa, vel, gradkel, gamma, xlet, xxn, xxj, ipnei, betam, nef, flux)
Definition: calcgammak.f:21
subroutine calcrhoelcomp(nef, vel, shcon, ielmat, ntmat_, mi)
Definition: calcrhoelcomp.f:21
subroutine create_iau6(nef, ipnei, neiel, jq, irow, nzs, iau6, lakonf)
Definition: create_iau6.f:20
void mafillomain(ITG *nef, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *xxn, double *area, double *au, double *ad, ITG *jq, ITG *irow, ITG *nzs, double *b, double *vel, double *umel, double *xlet, double *xle, double *gradofa, double *xxi, double *body, double *volume, ITG *ielfa, char *lakonf, ITG *ifabou, ITG *nbody, ITG *neq, double *dtimef, double *velo, double *veloo, double *cpfa, double *hcfa, double *cvel, double *gradvel, double *xload, double *gammat, double *xrlfa, double *xxj, ITG *nactdohinv, double *a1, double *a2, double *a3, double *flux, ITG *iau6, double *xxni, double *xxnj, ITG *iturbulent, double *gradkel, double *gradoel)
Definition: mafillomain.c:35
static double * f1
Definition: objectivemain_se.c:47
subroutine materialdata_cfd(nef, vel, shcon, nshcon, ielmatf, ntmat_, mi, cvel, vfa, cocon, ncocon, physcon, cvfa, ithermal, nface, umel, umfa, ielfa, hcfa, rhcon, nrhcon)
Definition: materialdata_cfd.f:22
void mafillpmain(ITG *ne, char *lakonf, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *area, double *adfa, double *xlet, double *cosa, double *volume, double *au, double *ad, ITG *jq, ITG *irow, double *ap, ITG *ielfa, ITG *ifabou, double *xle, double *b, double *xxn, ITG *neq, ITG *nzs, double *hfa, double *gradpel, double *bp, double *xxi, ITG *neij, double *xlen, double *cosb, ITG *iatleastonepressurebc, ITG *iau6, double *xxicn)
Definition: mafillpmain.c:33
void mafilltcompmain(ITG *nef, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *xxn, double *area, double *au, double *ad, ITG *jq, ITG *irow, ITG *nzs, double *b, double *vel, double *umel, double *xlet, double *xle, double *gradtfa, double *xxi, double *body, double *volume, ITG *ielfa, char *lakonf, ITG *ifabou, ITG *nbody, ITG *neq, double *dtimef, double *velo, double *veloo, double *cpfa, double *hcfa, double *cvel, double *gradvel, double *xload, double *gammat, double *xrlfa, double *xxj, ITG *nactdohinv, double *a1, double *a2, double *a3, double *flux, ITG *iau6, double *xxni, double *xxnj)
Definition: mafilltcompmain.c:35
static ITG num_cpus
Definition: compfluid.c:37
subroutine complete_hel_cyclic(nef, bv, hel, adv, auv, jq, irow, ipnei, neiel, ifatie, c, lakonf, neifa, nzs)
Definition: complete_hel_cyclic.f:27
subroutine applyboun(ifaext, nfaext, ielfa, ikboun, ilboun, nboun, typeboun, nelemload, nload, sideload, isolidsurf, nsolidsurf, ifabou, nfabou, nface, nodeboun, ndirboun, ikmpc, ilmpc, labmpc, nmpc, nactdohinv, compressible, iatleastonepressurebc, ipkonf, kon, konf, nblk)
Definition: applyboun.f:24
subroutine printoutface(co, rhcon, nrhcon, ntmat_, vold, shcon, nshcon, cocon, ncocon, icompressible, istartset, iendset, ipkonf, lakonf, konf, ialset, prset, ttime, nset, set, nprint, prlab, ielmat, mi, ithermal, nactdoh, icfd, time, stn)
Definition: printoutface.f:23
void mastructf(ITG *nk, ITG *kon, ITG *ipkon, char *lakon, ITG *ne, ITG *icol, ITG *jq, ITG **mast1p, ITG **irowp, ITG *isolver, ITG *ipointer, ITG *nzs, ITG *ipnei, ITG *ineiel, ITG *mi)
Definition: mastructf.c:27
subroutine calcrhoel(nef, vel, rhcon, nrhcon, ielmat, ntmat_, ithermal, mi)
Definition: calcrhoel.f:21
subroutine correctvfa(nface, ielfa, area, vfa, ap, bp, xxn, ifabou, ipnei, nef, neifa, hfa, vel, xboun, lakonf, flux)
Definition: correctvfa.f:21
subroutine calcrhofacomp(nface, vfa, shcon, ielmat, ntmat_, mi, ielfa, ipnei, vel, nef, flux, gradpel, gradtel, xxj, betam, xlet)
Definition: calcrhofacomp.f:22
subroutine calccvfacomp(nface, vfa, shcon, nshcon, ielmat, ntmat_, mi, ielfa, cvfa, physcon)
Definition: calccvfacomp.f:21
void rhspmain(ITG *ne, char *lakon, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *area, double *adfa, double *xlet, double *cosa, double *volume, double *au, double *ad, ITG *jq, ITG *irow, double *ap, ITG *ielfa, ITG *ifabou, double *xle, double *b, double *xxn, ITG *neq, ITG *nzs, double *hfa, double *gradpel, double *bp, double *xxi, ITG *neij, double *xlen, ITG *iatleastonepressurebc, double *xxicn)
Definition: rhspmain.c:34
void mafillvcompmain(ITG *nef, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *xxn, double *area, double *au, double *ad, ITG *jq, ITG *irow, ITG *nzs, double *b, double *vel, double *cosa, double *umfa, double *xlet, double *xle, double *gradvfa, double *xxi, double *body, double *volume, ITG *ielfa, char *lakonf, ITG *ifabou, ITG *nbody, double *dtimef, double *velo, double *veloo, double *sel, double *xrlfa, double *gamma, double *xxj, ITG *nactdohinv, double *a1, double *a2, double *a3, double *flux, ITG *icyclic, double *c, ITG *ifatie, ITG *iau6, double *xxni, double *xxnj)
Definition: mafillvcompmain.c:35
subroutine calcgammao(nface, ielfa, vel, gradoel, gamma, xlet, xxn, xxj, ipnei, betam, nef, flux)
Definition: calcgammao.f:21
#define ITG
Definition: CalculiX.h:51
void mafillvmain(ITG *nef, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *xxn, double *area, double *au, double *ad, ITG *jq, ITG *irow, ITG *nzs, double *b, double *vel, double *cosa, double *umfa, double *xlet, double *xle, double *gradvfa, double *xxi, double *body, double *volume, ITG *ielfa, char *lakonf, ITG *ifabou, ITG *nbody, double *dtimef, double *velo, double *veloo, double *sel, double *xrlfa, double *gamma, double *xxj, ITG *nactdohinv, double *a1, double *a2, double *a3, double *flux, ITG *icyclic, double *c, ITG *ifatie, ITG *iau6, double *xxni, double *xxnj, ITG *iturbulent, double *gradvel)
Definition: mafillvmain.c:35
subroutine initialcfd(nef, ipkonf, konf, lakonf, co, coel, cofa, nface, ielfa, area, ipnei, neiel, xxn, xxi, xle, xlen, xlet, xrlfa, cosa, volume, neifa, xxj, cosb, dmin, ifatie, cs, tieset, icyclic, c, neij, physcon, isolidsurf, nsolidsurf, dy, xxni, xxnj, xxicn, nflnei, iturbulent, rf)
Definition: initialcfd.f:24
#define NNEW(a, b, c)
Definition: CalculiX.h:39
subroutine fill_neiel(nef, ipnei, neiel, neielcp)
Definition: fill_neiel.f:20