⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 output1.cpp

📁 Finite element program for mechanical problem. It can solve various problem in solid problem
💻 CPP
📖 第 1 页 / 共 3 页
字号:
          {            if (Dbcrs->crs[j].ridx[k] != 0)              rindex++;          }        }        for (k = 0; k < Dbcrs->crs[j].nprop; k++)        {          if (Dbcrs->crs[j].propu[k])          {            if (Dbcrs->crs[j].ridx[k] == 0)            {              Dbcrs->crs[j].ridx[k] = rindex;              rindex++;            }          }        }      }    }    nm[i] = 0;    for (j = 0; j < nprop; j++)    // loop over all properties from input    {      // test if number of property matchs number from input      if (Top->E[i].property == Nep[j])      {        if (Mel[j])        // assigning matrial to the element with number i        {          nm[i] = Nmel[j];          me[i] = new mattype[Nmel[j]];          mi[i] = new long[Nmel[j]];          im[i] = new long[Nmel[j]];          for (k = 0; k < Nmel[j]; k++)          {            me[i][k] = Mel[j][k];            mi[i][k] = Melid[j][k];          }        }      }    }    if (me[i] ==  NULL) // unassigned element material    {      fprintf(stderr, "\nError - element %ld hasn't assigned material\n", i+1);      for (k = 0; k < Top->elements; k++)      {        delete [] me[k]; delete [] mi[k]; delete [] im[k];      }      delete [] me; delete [] mi; delete [] nm;      return(1);    }    for (j = 0; j < nm[i]; j++)    {      // searching element material in the material database      if ((im[i][j] = Dbmat->search_mat(me[i][j], mi[i][j]-1)) < 0)      {        fprintf(stderr,                "\nError - material with number %d and index %ld not found\n", me[i][j], mi[i][j]);        for (k = 0; k < Top->elements; k++)        {          delete [] me[k]; delete [] mi[k]; delete [] im[k];        }        delete [] me; delete [] mi; delete [] nm;        return(1);      }      else      {        if (Dbmat->mat[im[i][j]].propu[mi[i][j]-1] == 0)          Dbmat->mat[im[i][j]].npropu++; // indicator whether given material type is used        if (Nmu[im[i][j]] == 0)          Nmu[im[i][j]]++;  // indicator whether material type from material database is used in the given task        Dbmat->mat[im[i][j]].propu[mi[i][j]-1]++; // indicator whether given material index is used      }    }    for (j = 0; j < Dbmat->numt; j++)    {      if (Dbmat->mat[j].npropu)      {        rindex = 1;        for (k = 0; k < Dbmat->mat[j].nprop; k++)        {          if (Dbmat->mat[j].propu[k])          {            Dbmat->mat[j].ridx[k] = rindex;            rindex++;          }        }      }    }    tip = 0;    switch (et)  // determining number of integration points on the element and                 //  whether ip needs cross-section    {      case beam2d:      {        tip = 1;        break;      }      default :        break;    }    if ((tip) && (ce[i] == 0))    {      fprintf(stderr, "\nError - element %ld hasn't assigned cross-section\n", i+1);      delete [] ce; delete [] ci; delete [] ic;      return(3);    }    Mt->elements[i].te = et;    // writing type of element, element number    fprintf(out, "%6ld ", i+1);    if ((et >= planeelementlt) && (et <= planeelementrotlq))      fprintf(out, "%3d %3d", et, ssst);    else      fprintf(out, "%3d", et);    Tet[i] = et;    // writing element nodes    for (j = 0; j < Top->E[i].size; j++)    {/*      if ((et == planeelementqt) && (d->t3d) && (j == 3))      // nodes in T3d file has in this case folowing order 1 2 3 5 6 4 in view of      // SIFEL order 1 2 3 4 5 6        continue;*/      fprintf(out, " %6ld", Top->E[i].node[j]);    }/*    if ((et == planeelementqt) && (d->t3d))    // nodes in T3d file has in this case folowing order 1 2 3 5 6 4 in view of    // SIFEL order 1 2 3 4 5 6    // so it is need to write fourth node      fprintf(out, " %6ld", Top->E[i].node[3]);*/    // no code numbers on element (code numbers not supported at this time)    fprintf(out, " 0");    if (ce[i] > 0)      fprintf(out, " %d %ld", ce[i], Dbcrs->crs[ic[i]].ridx[ci[i]-1]); // if element has cs, write cs type and index    else      fprintf(out, " 0"); // writing element cross-section indicator    for (l = 0; l < nm[i]; l++)      fprintf(out, "%d %ld ", me[i][l], Dbmat->mat[im[i][l]].ridx[mi[i][l]-1]); // writing element material type and index    fprintf(out, "\n");  }  fprintf(out, "\n");  return(0);}/**< Function writes section with description of elements to the text file given by out. @param out - pointer to the opened text file, where the data will be written @retval 0 : on succes*/long wr_globnodnum(FILE *out){  for (long i = 0; i < Top->nodes; i++)    fprintf(out, "%ld\n", Top->Pn[i]);  return(0);}/** Function writes section with description of elements to the text file given by out.  @param out - pointer to the opened text file, where the data will be written  @param nprop - number of entries in the input property file  @retval 0 : if succes  @retval 1 : if element hasn't assigned material  @retval 2 : if element hasn't assigned type  @retval 3 : if element hasn't assigned cross-section*/long wr_intpoints(FILE *out, long nprop){  long i, j, k, l;  mattype **me;  long **mi, **im, *nm;  elemtype et = elemtype(-1);  long rindex;  me   = new mattype* [Top->elements];  memset(me, 0, sizeof(*me)*Top->elements);  mi   = new long* [Top->elements];  memset(mi, 0, sizeof(*mi)*Top->elements);  im   = new long* [Top->elements];  memset(im, 0, sizeof(*im)*Top->elements);  nm   = new long  [Top->elements];  Enip = new long  [Top->elements];  memset(Enip, 0, sizeof(*Enip)*Top->elements);//  Nmu = 0;  for (i = 0; i < Top->elements; i++)  {    nm[i] = 0;    for (j = 0; j < nprop; j++)    // loop over all properties from input    {      // test if number of property matchs number from input      if (Top->E[i].property == Nep[j])      {        if (Mel[j])        // assigning matrial to the element with number i        {          nm[i] = Nmel[j];          me[i] = new mattype[Nmel[j]];          mi[i] = new long[Nmel[j]];          im[i] = new long[Nmel[j]];          for (k = 0; k < Nmel[j]; k++)          {            me[i][k] = Mel[j][k];            mi[i][k] = Melid[j][k];          }        }      }    }    et = Tet[i];    if (et < 0) // unassigned element type    {      fprintf(stderr, "\nError - element %ld hasn't assigned type\n", i+1);      for (k = 0; k < Top->elements; k++)      {        delete [] me[k]; delete [] mi[k]; delete [] im[k];      }      delete [] me; delete [] mi; delete [] nm;      return(1);    }    if (me[i] ==  NULL) // unassigned element material    {      fprintf(stderr, "\nError - element %ld hasn't assigned material\n", i+1);      for (k = 0; k < Top->elements; k++)      {        delete [] me[k]; delete [] mi[k]; delete [] im[k];      }      delete [] me; delete [] mi; delete [] nm;      return(1);    }    for (j = 0; j < nm[i]; j++)    {      // searching element material in the material database      if ((im[i][j] = Dbmat->search_mat(me[i][j], mi[i][j]-1)) < 0)      {        fprintf(stderr,                "\nError - material with number %d and index %ld not found\n", me[i][j], mi[i][j]);        for (k = 0; k < Top->elements; k++)        {          delete [] me[k]; delete [] mi[k]; delete [] im[k];        }        delete [] me; delete [] mi; delete [] nm;        return(1);      }      else      {        if (Dbmat->mat[im[i][j]].propu[mi[i][j]-1] == 0)          Dbmat->mat[im[i][j]].npropu++; // indicator whether given material type is used        if (Nmu[im[i][j]] == 0)          Nmu[im[i][j]]++;  // indicator whether material type from material database is used in the given task        Dbmat->mat[im[i][j]].propu[mi[i][j]-1]++; // indicator whether given material index is used      }    }    Enip[i] = Mt->get_nip(i,0);  }  for (j = 0; j < Dbmat->numt; j++)  {    if (Dbmat->mat[j].npropu)    {      rindex = 1;      for (k = 0; k < Dbmat->mat[j].nprop; k++)      {        if (Dbmat->mat[j].propu[k])        {          Dbmat->mat[j].ridx[k] = rindex;          rindex++;        }      }    }  }  for (i = 0; i < Top->elements; i++)  {    for (k = 0; k < Enip[i]; k++)    {      for (l = 0; l < nm[i]; l++)        fprintf(out, "%d %ld ", me[i][l], Dbmat->mat[im[i][l]].ridx[mi[i][l]-1]); // writing element material type and index      fprintf(out, "\n");    }    fprintf(out, "\n");  }  fprintf(out, "\n");  for (k = 0; k < Top->elements; k++)  {    delete [] me[k];    delete [] mi[k];    delete [] im[k];  }  delete [] me; delete [] mi; delete [] nm;  return(0);}/** Function writes materials and thier parameters to the file given by the out.  @param out - pointer to the opened text file, where the data will be written  @retval 0 : on succes*/long wr_materials(FILE *out){  long i, j, nmtu, wrt;  for (i = 0, nmtu = 0; i < Dbmat->numt; i++)  // countig number of used material types  {    if (Nmu[i])      nmtu++;  }  fprintf(out, "%ld\n", nmtu);  // writing number of material types  for (i = 0; i < Dbmat->numt; i++)  {    wrt = 1;    for (j = 0; j < Dbmat->mat[i].nprop; j++)    {      if (Dbmat->mat[i].propu[j])  // material type index is used (<> 0)      {        if (wrt)  // for the first time write material type number and number of used indeces        {          fprintf(out, "%d %ld\n", Dbmat->mat[i].type, Dbmat->mat[i].npropu);          wrt = 0;  // next time don't write        }        // write material type index and property string        fprintf(out, "%ld %s\n", Dbmat->mat[i].ridx[j], Dbmat->mat[i].prop[j]);      }    }  }  fprintf(out, "\n");  return(0);}long wr_auxpoint(FILE *out, long nprop){  long i, j, psn = 0;  for (i = 0; i < Top->elements; i++)  {    for (j = 0; j < nprop; j++)    {      if ((Top->E[i].property == Nep[j]) && (Sel[j] == Top->E[i].type))      {        if (Eep[j] >= 0)        {          fprintf(out, "%d", Eep[j]);          if (Eps[j])          {            psn++;            Eps[j]->n = psn;            fprintf(out, " %ld", psn);          }          fprintf(out,"\n");          break;        }      }    }  }  if (psn != 0)    fprintf(out, "%ld\n", psn);  for (j = 0; j < nprop; j++)  {    if (Eps[j])      Eps[j]->print(out);  }  fprintf(out, "\n");  return(0);}/** Function writes section with local coordinate systems in points on elements to the text file given by out.  @param out - pointer to the opened text file, where the data will be written  @param nprop - number of entries in the input property file  @retval 0 : if succes*/long wr_ellcsys(FILE *out, long nprop){  long i, j, k;  long *elsvi = NULL, telsvi = 0, nells = 0;  long ips;  pointset    *tps;  elemposition tep;  elsvi = new long[nprop];  memset(elsvi, 0, sizeof(*elsvi)*nprop);  // countig number of elements with l.c. system  for (i = 0; i < Top->elements; i++)  {    for (j = 0; j < nprop; j++)    {      if (Top->E[i].property == Nep[j])      {        if (Elsv[j])        {          nells++;          break;        }      }    }  }  // indexing l. c. system  for (i = 0; i < nprop; i++)  {    if (Elsv[i])    {      telsvi++;      elsvi[i] = telsvi;    }  }  fprintf(out, "%ld\n", nells);  for (i = 0; i < Top->elements; i++)  {    ips = -1;    // searching type of auxiliary points on element    for (j = 0; j < nprop; j++)    {      if ((Top->E[i].property == Nep[j]) && (Sel[j] == Top->E[i].type))      {        if (Eep[j])        {          tep = Eep[j];          tps = Eps[j];          ips = j;          break;        }      }    }    if (ips < 0)    {      fprintf(stderr, "\n\nError - element hasn't assigned position of auxiliary points");      fprintf(stderr, "\nfunction wr_ellcsys() (output.cpp)\n");      return(1);    }    for (j = 0; j < nprop; j++)    {      if (Top->E[i].property == Nep[j])      {        if (Elsv[j])        {          switch (tep)          {            case nowhere :            {              fprintf(out, "%ld %ld\n", i+1, 0L);              break;            }            case intpts :            {              fprintf(out, "%ld %ld ", i+1, Enip[i]);              for (k = 0; k < Enip[i]; k++)                fprintf(out, " %ld %ld", k+1, elsvi[j]);              fprintf(out, "\n");              break;            }            case enodes :            {              fprintf(out, "%ld %ld", i+1, Top->E[i].size);              for (k = 0; k < Top->E[i].size; k++)                fprintf(out, " %ld %ld", k+1, elsvi[j]);              fprintf(out, "\n");              break;            }            case userdefined :            {              fprintf(out, "%ld %ld", i+1, Eps[j]->np);              for (k = 0; k < Eps[j]->np; k++)                fprintf(out, " %ld %ld", k+1, elsvi[j]);              fprintf(out, "\n");              break;            }            default :            {              fprintf(stderr, "\n\nError - unknown type of position of auxiliary points");              fprintf(stderr, "\nfunction wr_ellcsys() (output.cpp)\n");              break;            }          }        }      }    }  }  // print base vectors of local coordinate system  fprintf (out, "%ld\n", telsvi);  for (i = 0; i < telsvi; i++)  {    fprintf(out, "%ld", Elsv[i][0].n*Elsv[i][0].n);    for (j = 0; j < Elsv[i][0].n; j++)    {      for (k = 0; k < Elsv[i][0].n; k++)        fprintf (out, " %e", Elsv[i][j][k]);    }    fprintf(out, "\n");  }  fprintf(out, "\n");  delete [] elsvi;  return(0);}/** Function writes cross-sections and thier parameters to the file given by the out.  @param out - pointer to the opened text file, where the data will be written  @retval 0 : on succes*/long wr_crsecs(FILE *out){  long i, j, wrt, nctu;//  fprintf(out, "%ld", Ecsn+Ncsn);  for(i = 0, nctu = 0; i < Dbcrs->numt; i++)  // countig number of used cross-section types  {    if (Ncu[i])      nctu++;  }  fprintf(out, "%ld\n", nctu);    // writing number of cs types  for (i = 0; i < Dbcrs->numt; i++)  {    wrt = 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -