vertprop.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 static char const Id[] = "$Id: vertprop.c 2962 2010-02-04 19:50:44Z scholz $\n\n";
00025 static char const Td[] = "$Today: " __FILE__ " " __DATE__ " " __TIME__ " $\n\n";
00026
00027 #include "init.h"
00028
00029 int VertProp(GridData *gdata)
00030 {
00031 MagparFunctionLogBegin;
00032
00033 int rank,size;
00034 ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr);
00035 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr);
00036
00037 if (rank) {
00038 MagparFunctionLogReturn(0);
00039 }
00040
00041
00042 ierr = PetscMalloc(gdata->n_vert*sizeof(int),&gdata->vertprop);CHKERRQ(ierr);
00043 for (int i=0; i<gdata->n_vert; i++) {
00044 gdata->vertprop[i]=-1;
00045 }
00046
00047
00048 for (int i=0; i<gdata->n_ele; i++) {
00049 for (int j=0; j<NV; j++) {
00050 if (gdata->vertprop[gdata->elevert[NV*i+j]]==-1 ||
00051 gdata->propdat[NP*gdata->eleprop[i]+4]>
00052 gdata->propdat[NP*gdata->vertprop[gdata->elevert[NV*i+j]]+4]) {
00053 gdata->vertprop[gdata->elevert[NV*i+j]]=gdata->eleprop[i];
00054 }
00055 }
00056 }
00057
00058 int *npidvert;
00059 ierr = PetscMalloc(gdata->n_prop*sizeof(int),&npidvert);CHKERRQ(ierr);
00060 for (int i=0; i<gdata->n_prop; i++) {
00061 npidvert[i]=0;
00062 }
00063
00064
00065 for (int i=0; i<gdata->n_vert; i++) {
00066 if (gdata->vertprop[i]<0) {
00067 PetscPrintf(PETSC_COMM_WORLD,"Warning: node %i unused\n",i);
00068 gdata->vertprop[i]=0;
00069 }
00070 npidvert[gdata->vertprop[i]]++;
00071 assert(gdata->vertprop[i]<gdata->n_prop);
00072 }
00073
00074 PetscInfo(0," pid | n_vert\n");
00075 PetscInfo(0,"-----------------\n");
00076 for (int i=0; i<gdata->n_prop; i++) {
00077 PetscInfo2(0,"%6i | %8i\n",i,npidvert[i]);
00078 }
00079
00080 #ifdef ADDONS
00081 PetscInfo(0," vert | pid | v_coupl \n");
00082 PetscInfo(0,"----------------------------\n");
00083 for (int i=0; i<gdata->n_vert; i++) {
00084 if (gdata->vertcoupl!=PETSC_NULL) {
00085 PetscInfo3(0,"%6i | %8i | %8i\n",i,gdata->vertprop[i],gdata->vertcoupl[i]);
00086 }
00087 else {
00088 PetscInfo2(0,"%6i | %8i\n",i,gdata->vertprop[i]);
00089 }
00090 }
00091 #endif
00092
00093 ierr = PetscFree(npidvert);CHKERRQ(ierr);
00094
00095 MagparFunctionLogReturn(0);
00096 }