root/src/frdselect.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. frdselect

   1 /*     CalculiX - A 3-dimensional finite element program                 */
   2 /*              Copyright (C) 1998-2015 Guido Dhondt                          */
   3 
   4 /*     This program is free software; you can redistribute it and/or     */
   5 /*     modify it under the terms of the GNU General Public License as    */
   6 /*     published by the Free Software Foundation(version 2);    */
   7 /*                                                                       */
   8 
   9 /*     This program is distributed in the hope that it will be useful,   */
  10 /*     but WITHOUT ANY WARRANTY; without even the implied warranty of    */ 
  11 /*     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the      */
  12 /*     GNU General Public License for more details.                      */
  13 
  14 /*     You should have received a copy of the GNU General Public License */
  15 /*     along with this program; if not, write to the Free Software       */
  16 /*     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.         */
  17 
  18 #include <stdlib.h>
  19 #include <math.h>
  20 #include <stdio.h>
  21 #include <string.h>
  22 #include "CalculiX.h"
  23 
  24 #define min(a,b) ((a) <= (b) ? (a) : (b))
  25 #define max(a,b) ((a) >= (b) ? (a) : (b))
  26 
  27 void frdselect(double *field1,double *field2,ITG *iset,ITG *nkcoords,ITG *inum,
  28      char *m1,ITG *istartset,ITG *iendset,ITG *ialset,ITG *ngraph,ITG *ncomp,
  29      ITG *ifield,ITG *icomp,ITG *nfield,ITG *iselect,char *m2,FILE *f1,
  30      char *output, char*m3){
  31 
  32   /* storing scalars, components of vectors and tensors without additional
  33      transformations */
  34 
  35   /* number of components in field1: nfield[0]
  36      number of components in field2: nfield[1]
  37 
  38      number of entities to store: ncomp
  39      for each entity i, 0<=i<ncomp:
  40          - ifield[i]: 1=field1,2=field2
  41          - icomp[i]: component: 0...,(nfield[0]-1 or nfield[1]-1) */
  42  
  43   ITG i,j,k,l,m,n,nksegment;
  44       
  45   int iw;
  46 
  47   float ifl;
  48 
  49   if(*iset==0){
  50     for(i=0;i<*nkcoords;i++){
  51 
  52       /* check whether output is requested for solid nodes or
  53          network nodes */
  54 
  55       if(*iselect==1){
  56         if(inum[i]<=0) continue;
  57       }else if(*iselect==-1){
  58         if(inum[i]>=0) continue;
  59       }else{
  60         if(inum[i]==0) continue;
  61       }
  62 
  63       /* storing the entities */
  64 
  65         for(n=1;n<=(ITG)((*ncomp+5)/6);n++){
  66           if(n==1){
  67             if(strcmp1(output,"asc")==0){
  68               fprintf(f1,"%3s%10" ITGFORMAT "",m1,i+1);
  69             }else{
  70               iw=(int)(i+1);fwrite(&iw,sizeof(int),1,f1);
  71             }
  72             for(j=0;j<min(6,*ncomp);j++){
  73               if(ifield[j]==1){
  74                 if(strcmp1(output,"asc")==0){
  75                     fprintf(f1,"%12.5E",(float)field1[i*nfield[0]+icomp[j]]);
  76                 }else{
  77                   ifl=(float)field1[i*nfield[0]+icomp[j]];
  78                   fwrite(&ifl,sizeof(float),1,f1);
  79                 }
  80               }else{
  81                 if(strcmp1(output,"asc")==0){
  82                   fprintf(f1,"%12.5E",(float)field2[i*nfield[1]+icomp[j]]);
  83                 }else{
  84                   ifl=(float)field2[i*nfield[1]+icomp[j]];
  85                   fwrite(&ifl,sizeof(float),1,f1);
  86                 }
  87               }
  88             }
  89             if(strcmp1(output,"asc")==0)fprintf(f1,"\n");
  90           }else{
  91             if(strcmp1(output,"asc")==0)fprintf(f1,"%3s          ",m2);
  92             for(j=(n-1)*6;j<min(n*6,*ncomp);j++){
  93               if(ifield[j]==1){
  94                 if(strcmp1(output,"asc")==0){
  95                   fprintf(f1,"%12.5E",(float)field1[i*nfield[0]+icomp[j]]);
  96                 }else{
  97                   ifl=(float)field1[i*nfield[0]+icomp[j]];
  98                   fwrite(&ifl,sizeof(float),1,f1);
  99                 }
 100               }else{
 101                 if(strcmp1(output,"asc")==0){
 102                   fprintf(f1,"%12.5E",(float)field2[i*nfield[1]+icomp[j]]);
 103                 }else{
 104                   ifl=(float)field2[i*nfield[1]+icomp[j]];
 105                   fwrite(&ifl,sizeof(float),1,f1);
 106                 }
 107               }
 108             }
 109             if(strcmp1(output,"asc")==0)fprintf(f1,"\n");
 110           }
 111         }
 112 
 113     }
 114   }else{
 115     nksegment=(*nkcoords)/(*ngraph);
 116     for(k=istartset[*iset-1]-1;k<iendset[*iset-1];k++){
 117       if(ialset[k]>0){
 118         for(l=0;l<*ngraph;l++){
 119           i=ialset[k]+l*nksegment-1;
 120 
 121           /* check whether output is requested for solid nodes or
 122              network nodes */
 123 
 124           if(*iselect==1){
 125             if(inum[i]<=0) continue;
 126           }else if(*iselect==-1){
 127             if(inum[i]>=0) continue;
 128           }else{
 129             if(inum[i]==0) continue;
 130           }
 131           
 132           /* storing the entities */
 133 
 134           for(n=1;n<=(ITG)((*ncomp+5)/6);n++){
 135             if(n==1){
 136               if(strcmp1(output,"asc")==0){
 137                 fprintf(f1,"%3s%10" ITGFORMAT "",m1,i+1);
 138               }else{
 139                 iw=(int)(i+1);fwrite(&iw,sizeof(int),1,f1);
 140               }
 141               for(j=0;j<min(6,*ncomp);j++){
 142                 if(ifield[j]==1){
 143                   if(strcmp1(output,"asc")==0){
 144                     fprintf(f1,"%12.5E",(float)field1[i*nfield[0]+icomp[j]]);
 145                   }else{
 146                     ifl=(float)field1[i*nfield[0]+icomp[j]];
 147                     fwrite(&ifl,sizeof(float),1,f1);
 148                   }
 149                 }else{
 150                   if(strcmp1(output,"asc")==0){
 151                     fprintf(f1,"%12.5E",(float)field2[i*nfield[1]+icomp[j]]);
 152                   }else{
 153                     ifl=(float)field2[i*nfield[1]+icomp[j]];
 154                     fwrite(&ifl,sizeof(float),1,f1);
 155                   }
 156                 }
 157               }
 158               if(strcmp1(output,"asc")==0)fprintf(f1,"\n");
 159             }else{
 160               if(strcmp1(output,"asc")==0)fprintf(f1,"%3s          ",m2);
 161               for(j=(n-1)*6;j<min(n*6,*ncomp);j++){
 162                 if(ifield[j]==1){
 163                   if(strcmp1(output,"asc")==0){
 164                     fprintf(f1,"%12.5E",(float)field1[i*nfield[0]+j]);
 165                   }else{
 166                     ifl=(float)field1[i*nfield[0]+icomp[j]];
 167                     fwrite(&ifl,sizeof(float),1,f1);
 168                   }
 169                 }else{
 170                   if(strcmp1(output,"asc")==0){
 171                     fprintf(f1,"%12.5E",(float)field2[i*nfield[1]+j]);
 172                   }else{
 173                     ifl=(float)field2[i*nfield[1]+icomp[j]];
 174                     fwrite(&ifl,sizeof(float),1,f1);
 175                   }
 176                 }
 177               }
 178               if(strcmp1(output,"asc")==0)fprintf(f1,"\n");
 179             }
 180           }
 181           
 182         }
 183       }else{
 184         l=ialset[k-2];
 185         do{
 186           l-=ialset[k];
 187           if(l>=ialset[k-1]) break;
 188           for(m=0;m<*ngraph;m++){
 189             i=l+m*nksegment-1;
 190             
 191             /* check whether output is requested for solid nodes or
 192                network nodes */
 193             
 194             if(*iselect==1){
 195               if(inum[i]<=0) continue;
 196             }else if(*iselect==-1){
 197               if(inum[i]>=0) continue;
 198             }else{
 199               if(inum[i]==0) continue;
 200             }
 201             
 202             /* storing the entities */
 203             
 204             for(n=1;n<=(ITG)((*ncomp+5)/6);n++){
 205               if(n==1){
 206                 if(strcmp1(output,"asc")==0){
 207                   fprintf(f1,"%3s%10" ITGFORMAT "",m1,i+1);
 208                 }else{
 209                   iw=(int)(i+1);fwrite(&iw,sizeof(int),1,f1);
 210                 }
 211                 for(j=0;j<min(6,*ncomp);j++){
 212                   if(ifield[j]==1){
 213                     if(strcmp1(output,"asc")==0){
 214                       fprintf(f1,"%12.5E",(float)field1[i*nfield[0]+icomp[j]]);
 215                     }else{
 216                       ifl=(float)field1[i*nfield[0]+icomp[j]];
 217                       fwrite(&ifl,sizeof(float),1,f1);
 218                     }
 219                   }else{
 220                     if(strcmp1(output,"asc")==0){
 221                       fprintf(f1,"%12.5E",(float)field2[i*nfield[1]+icomp[j]]);
 222                     }else{
 223                       ifl=(float)field2[i*nfield[1]+icomp[j]];
 224                       fwrite(&ifl,sizeof(float),1,f1);
 225                     }
 226                   }
 227                 }
 228                 if(strcmp1(output,"asc")==0)fprintf(f1,"\n");
 229               }else{
 230                 if(strcmp1(output,"asc")==0)fprintf(f1,"%3s          ",m2);
 231                 for(j=(n-1)*6;j<min(n*6,*ncomp);j++){
 232                   if(ifield[j]==1){
 233                     if(strcmp1(output,"asc")==0){
 234                       fprintf(f1,"%12.5E",(float)field1[i*nfield[0]+j]);
 235                     }else{
 236                       ifl=(float)field1[i*nfield[0]+icomp[j]];
 237                       fwrite(&ifl,sizeof(float),1,f1);
 238                     }
 239                   }else{
 240                     if(strcmp1(output,"asc")==0){
 241                       fprintf(f1,"%12.5E",(float)field2[i*nfield[1]+j]);
 242                     }else{
 243                       ifl=(float)field2[i*nfield[1]+icomp[j]];
 244                       fwrite(&ifl,sizeof(float),1,f1);
 245                     }
 246                   }
 247                 }
 248                 if(strcmp1(output,"asc")==0)fprintf(f1,"\n");
 249               }
 250             }
 251             
 252           }
 253         }while(1);
 254       }
 255     }
 256   }
 257   
 258   if(strcmp1(output,"asc")==0)fprintf(f1,"%3s\n",m3);
 259 
 260   return;
 261 
 262 }
 263 

/* [<][>][^][v][top][bottom][index][help] */