file: Hlib/src/Dbutils.c

#include <stdio.h> #include <math.h> #include <veclib.h> #include "hotel.h" /*---------------------------------------------------------------------------* * RCS Information * * * * $Source: /users/tcew/Hybrid/Hlib/src/RCS/Dbutils.C,v $ * $Revision: 1.1 $ * $Date: 1997/02/25 23:27:18 $ * $Author: tcew $ * $State: Exp $ *---------------------------------------------------------------------------*/ #ifdef DEBUG Telapse timetest[_MAX_TIMECALL]; FILE *debug_out = stdout; /* force compiler to include this file when debugging */ void init_debug(void){ }; void plotdvector(double *mat, int rows, int cols){ int i,j,count = 0; for(i = 0; i < rows-1 ; ++i){ for(j = 0; j < cols-1; ++j) if(fabs(mat[i*cols+j]) > 10e-12){ if(mat[i*cols+j] > 0) putchar('+'); else putchar('*'); ++count; } else putchar('-'); fprintf(debug_out,"\n"); } fprintf(debug_out,"%d values above 10e-12 \n",count); return; } /*----------------------------------------------------------------------* * Plots a '*' if a the absolute value of a matix mat[r][c] is greater * * than 10e-10. The matrix indices run from rl to ru rows by cl to cu * * columns. * *----------------------------------------------------------------------*/ void plotdmatrix(double **mat, int rl, int ru, int cl, int cu){ int i,j,count = 0; for(i = rl; i <= ru; ++i){ for(j = cl; j <= cu; ++j) if(fabs(mat[i][j]) > 10e-12){ if(mat[i][j] > 0) putchar('+'); else putchar('*'); ++count; } else putchar('-'); fprintf(debug_out,"\n"); } fprintf(debug_out,"%d values above 10e-12 \n",count); return; } #define LLEN 7 void showdmatrix(double **d, int rl, int ru, int cl, int cu) { register int i,j,k; int nc = (cu-cl)/LLEN+1,l; for(i = rl; i <= ru ; ++i){ fprintf(debug_out,"row %d\n",i); for(j = 0,l=cl; j < nc; ++j,l+=LLEN){ for(k = l; k <= min(l+LLEN-1,cu); ++k) fprintf(debug_out,"%#8.6lg ",d[i][k]); fprintf(debug_out,"\n"); } } return; } void showdvector(double *d, int l, int u) { register int i,j; int n = (u-l)/LLEN+1; for(i = 0; i < n ; ++i,l+=LLEN){ for(j = l; j <= min(l+LLEN-1,u); ++j) fprintf(debug_out,"%#8.6lg ",d[j]); fprintf(debug_out,"\n"); } fflush(debug_out); return; } void showivector(int *d,int l, int u) { int i; for(i = l; i <= u ; ++i) fprintf(debug_out,"%d ",d[i]); fprintf(debug_out,"\n"); return; } void showfield(Element *E){ register int i,j; Vert *v = E->vert; Edge *e = E->edge; Face *f = E->face; fprintf(debug_out,"\n"); fprintf(debug_out,"field \'%c\' in Element %d. state is \'%c\'", E->type,E->id+1,E->state); Nek_Facet_Type id = E->identify(); //OVERLOAD CALL: identify: Hex.h(?), Prism.h(?), Pyr.h(?), Quad.h(?), Tet.h(?), Tri.h(?), nekstruct.h(?) fprintf(debug_out," Shape = "); switch(id){ case Nek_Tri: fprintf(debug_out,"Triangle"); break; case Nek_Quad: fprintf(debug_out,"Quadrilateral"); break; case Nek_Nodal_Quad: fprintf(debug_out,"Nodal Quadrilateral"); break; case Nek_Nodal_Tri: fprintf(debug_out,"Nodal Triangle"); break; case Nek_Seg: fprintf(debug_out,"Segment"); break; } fprintf(debug_out,"\n"); for(i=0;i < E->Nverts;++i) fprintf(debug_out,"Vertex %c: data is: %lf\n",i+1,v[i].hj[0]); if(E->state == 'p'){ #if DIM == 3 for(i = 0; i < E->qc; ++i){ fprintf(debug_out,"Interior at i = %d\n",i); showdmatrix(E->h[i],0,E->qb-1,0,E->qa-1); fprintf(debug_out,"\n"); } #else showdmatrix(E->h,0,E->qb-1,0,E->qa-1); #endif } else{ for(i=0;i<E->Nedges;++i){ if(e[i].l){ fprintf(debug_out,"Edge %d: data:\n",i+1); showdvector(e[i].hj,0,e[i].l-1); } } for(j=0;j<E->Nfaces;++j){ if(f[j].l){ fprintf(debug_out,"Face %d: data:\n",j+1); switch(id){ case Nek_Tri: for(i = 0; i < f[j].l; ++i) showdvector(f[j].hj[i],0,f[j].l-i-1); break; case Nek_Quad: case Nek_Nodal_Quad: case Nek_Nodal_Tri: for(i = 0; i < f[j].l; ++i) showdvector(f[j].hj[i],0,f[j].l-1); break; } } } #if DIM == 3 if(E->l){ for(i = 0; i < E->l; ++i){ fprintf(debug_out,"Interior at m = %d\n",i); for(j = 0; j < E->l-i; ++j) showdvector(E->hj[i][j],0,E->l-i-j-1); fprintf(debug_out,"\n"); } } #endif } } void showbcs(Bndry *Ubc){ #if 0 int i,nfv; Element *E; double l; Bndry *Ebc; for(Ebc = Ubc; Ebc; Ebc = Ebc->next){ fprintf(debug_out,"\n"); fprintf(debug_out,"Bndry id \t : %d \n",Ebc->id); fprintf(debug_out,"Element id \t : %d \n",Ebc->elmt->id+1); fprintf(debug_out,"Face \t : %d \n",Ebc->face+1); fprintf(debug_out,"Type \t :\'%c\'\n",Ebc->type); fprintf(debug_out,"String \t : %s",Ebc->bstring); fprintf(debug_out,"\n"); E = Ebc->elmt; nfv = E->Nfverts(Ebc->face); //OVERLOAD CALL: Nfverts: Nums.c(Tri), Nums.c(Quad), Nums.c(Tet), Nums.c(Pyr), Nums.c(Prism), Nums.c(Hex), Nums.c(Element) for(i = 0; i < nfv; ++i) fprintf(debug_out,"Vertex %d : %lf \n",i,Ebc->bvert[i]); if(E->dim() == 2){ //OVERLOAD CALL: dim: Pyr.h(?), Quad.h(?), Tet.h(?), Tri.h(?), Hex.h(?), Prism.h(?) if(l=Ebc->elmt->edge[Ebc->face].l){ fprintf(debug_out,"Solution values on edge are : \n"); showdvector(Ebc->bedge[0],0,l-1); } } else{ for(i = 0; i < nfv; ++i) if(l = E->edge[E->ednum(Ebc->face,i)].l){ //OVERLOAD CALL: ednum: Nums.c(Tri), Nums.c(Quad), Nums.c(Tet), Nums.c(Pyr), Nums.c(Prism), Nums.c(Hex), Nums.c(Element) fprintf(debug_out,"Solution values on edge %d are : \n",i); showdvector(Ebc->bedge[i],0,l-1); } if(l = E->face[Ebc->face].l){ fprintf(debug_out,"Solution values on face (%d) are : \n",i); if(nfv == 3) for(i = 0; i < l; ++i) showdvector(Ebc->bface[i],0,l-i-1); else for(i = 0; i < l; ++i) showdvector(Ebc->bface[i],0,l-1); } } fprintf(debug_out,"\n"); fprintf(debug_out,"\n"); } #endif } void showbsys(Bsystem *B, Element_List *EL){ Element *E; fprintf(debug_out,"\n"); fprintf(debug_out,"Bsystem\n"); fprintf(debug_out,"\n"); fprintf(debug_out,"Solve method: %d\n",(int)B->smeth); fprintf(debug_out,"Nel: %d\n",B->nel); fprintf(debug_out,"Nvs: %d\n",B->nv_solve); fprintf(debug_out,"Nes: %d\n",B->ne_solve); fprintf(debug_out,"Nfs: %d\n",B->nf_solve); fprintf(debug_out,"Nsolve: %d\n",B->nsolve); fprintf(debug_out,"Nglobal: %d\n",B->nglobal); fprintf(debug_out,"\n"); fprintf(debug_out,"Edge maps (unknowns):\n"); showivector(B->edge, 0, B->ne_solve-1); fprintf(debug_out,"Face maps (unknowns):\n"); showivector(B->edge, 0, B->nf_solve-1); fprintf(debug_out,"Bmap :\n"); for(E=EL->fhead;E;E=E->next){ fprintf(debug_out,"Element: %d\n", E->id); showivector(B->bmap[E->id], 0, E->Nbmodes-1); } fprintf(debug_out,"Singular: %d\n",B->singular); fprintf(debug_out,"Families: %d\n",B->families); // fprintf(debug_out,"Lambda: %lf\n",B->lambda); } #if 0 void showcoord(Cmodes *X,int L){ register int i; for(i = 0; i < 3; ++i){ // quick hack fprintf(debug_out,"edge %d transformed coords\n",i); showdvector(X->Cedge[i],0,L-1); } if(X->Cface){ fprintf(debug_out,"face transformed coords\n"); for(i = 0; i < L-1; ++i) showdvector(X->Cface[i],0,L-1-i); } } #endif void change_state(Element *U, char state){ for(;U;U = U->next) U->state = state; } /* plot a packed matrix system */ void plotsystem(double *a, int nsolve, int bwidth){ register int i,j,k; if(2*bwidth < nsolve){ for(i = 0; i < nsolve-bwidth; ++i){ for(j = 0; j < bwidth; ++j) if(fabs(a[i*bwidth + j]) > 1e-12){ if(a[i*bwidth+j] > 0) putchar('+'); else putchar('*'); } else putchar('-'); fprintf(debug_out,"\n"); } for(i = nsolve-bwidth; i < nsolve; ++i){ for(j = 0; j < nsolve-i; ++j) if(fabs(a[i*bwidth + j]) > 1e-12){ if(a[i*bwidth+j] > 0) putchar('+'); else putchar('*'); } else putchar('-'); fprintf(debug_out,"\n"); } } else for(i = 0,k=0; i < nsolve; ++i){ for(j = i; j < nsolve; ++j,++k) if(fabs(a[k]) > 1e-12){ if(a[k] > 0) putchar('+'); else putchar('*'); } else putchar('-'); fprintf(debug_out,"\n"); } } #if 0 void pmem(void ){ struct mallinfo minfo = mallinfo(); fprintf(debug_out," arena : %d \n",minfo.arena ); fprintf(debug_out," ordinary blocks : %d \n",minfo.ordblks ); fprintf(debug_out," small blocks : %d \n",minfo.smblks ); fprintf(debug_out," space in holding blocks : %d \n",minfo.hblkhd ); fprintf(debug_out," # of holding blocks : %d \n",minfo.hblks ); fprintf(debug_out," small blocks in use : %d \n",minfo.usmblks ); fprintf(debug_out," free small blocks : %d \n",minfo.fsmblks ); fprintf(debug_out," ordinary blocks in use : %d \n",minfo.uordblks); } #endif void dump_sc(int bsize, int isize, double **bb, double **bi, double **ii){ int i,j; int cnt = 0; for(i = 0; i <bsize; ++i) for(j = 0; j <bsize; ++j) if(fabs(bb[i][j])>1e-10) ++cnt; for(i = 0; i <bsize; ++i) for(j = 0; j <isize; ++j) if(fabs(bi[i][j])>1e-10) cnt += 2; for(i = 0; i <isize; ++i) for(j = 0; j <isize; ++j) if(fabs(ii[i][j])>1e-10) ++cnt; fprintf(debug_out, "VARIABLES = i,j,intensity\n"); fprintf(debug_out, "ZONE F=POINT, I=%d\n",cnt); for(i = 0; i <bsize; ++i) for(j = 0; j <bsize; ++j) if(fabs(bb[i][j])>1e-10) fprintf(debug_out, "%lf %lf %lf\n", i*1.0, j*1.0, bb[i][j]); for(i = 0; i <bsize; ++i) for(j = 0; j <isize; ++j) if(fabs(bi[i][j])>1e-10) { fprintf(debug_out, "%lf %lf %lf\n", i*1.0, (j+bsize)*1.0, bi[i][j]); fprintf(debug_out, "%lf %lf %lf\n", (j+bsize)*1.0, i*1.0, bi[i][j]); } for(i = 0; i <isize; ++i) for(j = 0; j <isize; ++j) if(fabs(ii[i][j])>1e-10) fprintf(debug_out, "%lf %lf %lf\n", (i+bsize)*1.0, (j+bsize)*1.0, ii[i][j]); // exit(-1); } void shownormals(Element_List *EL){ Element *E; int i; for(E=EL->fhead;E;E=E->next){ fprintf(debug_out,"\n"); for(i=0;i<E->Nfaces;++i){ fprintf(debug_out,"x\n"); showdvector(E->face[i].n->x, 0, E->face[i].qface*E->face[i].qface-1); fprintf(debug_out,"y\n"); showdvector(E->face[i].n->y, 0, E->face[i].qface*E->face[i].qface-1); fprintf(debug_out,"z\n"); showdvector(E->face[i].n->z, 0, E->face[i].qface*E->face[i].qface-1); } } } void tecmatrix(FILE *fp, double **data, int asize, int bsize){ int i,j; fprintf(fp, "VARIABLES = i,j,intensity\n"); fprintf(fp, "ZONE F=POINT, I=%d, J=%d\n",asize, bsize); for(i = 0; i <asize; ++i) for(j = 0; j <bsize; ++j) fprintf(fp, "%lf %lf %lf\n", i*1.0, j*1.0, data[i][j]); } void shownum(Element_List *EL){ Element *E; int i,j; for(E=EL->fhead;E;E=E->next){ fprintf(debug_out,"\n"); fprintf(debug_out,"Elmt: %d Numbering:\n", E->id); fprintf(debug_out,"\n"); for(i=0;i<E->Nfaces;++i){ fprintf(debug_out,"Face: %d vertex gids:",i); for(j=0;j<E->Nfverts(i);++j) //OVERLOAD CALL: Nfverts: Nums.c(Tri), Nums.c(Quad), Nums.c(Tet), Nums.c(Pyr), Nums.c(Prism), Nums.c(Hex), Nums.c(Element) fprintf(debug_out," %d ", E->vert[E->vnum(i,j)].gid); //OVERLOAD CALL: vnum: Nums.c(Quad), Nums.c(Tet), Nums.c(Pyr), Nums.c(Prism), Nums.c(Hex), Nums.c(Element), Nums.c(Tri) fprintf(debug_out,"\n"); } fprintf(debug_out,"\n"); for(i=0;i<E->Nedges;++i) fprintf(debug_out,"Edge: %d con: %d\n",i,E->edge[i].con); for(i=0;i<E->Nverts;++i) fprintf(debug_out,"Vert: %d solve: %d\n",i,E->vert[i].solve); fprintf(debug_out,"\n"); for(i=0;i<E->Nfaces;++i){ fprintf(debug_out,"Face: %d edge gids:",i); for(j=0;j<E->Nfverts(i);++j) //OVERLOAD CALL: Nfverts: Nums.c(Tri), Nums.c(Quad), Nums.c(Tet), Nums.c(Pyr), Nums.c(Prism), Nums.c(Hex), Nums.c(Element) fprintf(debug_out," %d ", E->edge[E->ednum(i,j)].gid); //OVERLOAD CALL: ednum: Nums.c(Tri), Nums.c(Quad), Nums.c(Tet), Nums.c(Pyr), Nums.c(Prism), Nums.c(Hex), Nums.c(Element) fprintf(debug_out,"\n"); } fprintf(debug_out,"\n"); for(i=0;i<E->Nfaces;++i) fprintf(debug_out,"Face: %d face gid: %d con: %d\n", i,E->face[i].gid,E->face[i].con); fprintf(debug_out,"\n"); for(i=0;i<E->Nfaces;++i){ if(E->face[i].link) fprintf(debug_out,"Elmt: %d Face: %d -> Elmt: %d Face: %d\n", E->face[i].eid+1,E->face[i].id+1, E->face[i].link->eid+1, E->face[i].link->id+1); else fprintf(debug_out,"Elmt: %d Face: %d -> b.c.\n", E->id+1,i+1); } } fflush(debug_out); } #endif


Back to Source File Index


C++ to HTML Conversion by ctoohtml