CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
exoselect.c File Reference
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "CalculiX.h"
#include "exodusII.h"
#include "exo.h"
Include dependency graph for exoselect.c:

Go to the source code of this file.

Macros

#define min(a, b)   ((a) <= (b) ? (a) : (b))
 
#define max(a, b)   ((a) >= (b) ? (a) : (b))
 

Functions

void exoselect (double *field1, double *field2, ITG *iset, ITG *nkcoords, ITG *inum, ITG *istartset, ITG *iendset, ITG *ialset, ITG *ngraph, ITG *ncomp, ITG *ifield, ITG *icomp, ITG *nfield, ITG *iselect, ITG exoid, ITG time_step, int countvar, ITG nout)
 

Macro Definition Documentation

◆ max

#define max (   a,
 
)    ((a) >= (b) ? (a) : (b))

◆ min

#define min (   a,
 
)    ((a) <= (b) ? (a) : (b))

Function Documentation

◆ exoselect()

void exoselect ( double *  field1,
double *  field2,
ITG iset,
ITG nkcoords,
ITG inum,
ITG istartset,
ITG iendset,
ITG ialset,
ITG ngraph,
ITG ncomp,
ITG ifield,
ITG icomp,
ITG nfield,
ITG iselect,
ITG  exoid,
ITG  time_step,
int  countvar,
ITG  nout 
)
34  {
35 
36  /* storing scalars, components of vectors and tensors without additional
37  transformations */
38 
39  /* number of components in field1: nfield[0]
40  number of components in field2: nfield[1]
41 
42  number of entities to store: ncomp
43  for each entity i, 0<=i<ncomp:
44  - ifield[i]: 1=field1,2=field2
45  - icomp[i]: component: 0...,(nfield[0]-1 or nfield[1]-1) */
46 
47  ITG i,j,k,l,m,o,nksegment;
48  /* When initializing parameter values:
49  "g" (or "G")
50  For global variables.
51  "n" (or "N")
52  For nodal variables.
53  "e" (or "E")
54  For element variables.
55  "m" (or "M")
56  For nodeset variables.
57  "s" (or "S")
58  For sideset variables.
59  */
60  // ITG num_nod_vars = *ncomp;
61  float *nodal_var_vals;
62  nodal_var_vals = (float *) calloc (nout, sizeof(float));
63 
64 
65  for(j=0;j<*ncomp;j++){
66  if(*iset==0){
67  m=0;
68  for(i=0;i<*nkcoords;i++){
69  /* check whether output is requested for solid nodes or
70  network nodes */
71 
72  if(*iselect==1){
73  if(inum[i]<=0) continue;
74  }else if(*iselect==-1){
75  if(inum[i]>=0) continue;
76  }else{
77  if(inum[i]==0) continue;
78  }
79 
80  /* storing the entities */
81  if(ifield[j]==1){
82  nodal_var_vals[m]=field1[i*nfield[0]+icomp[j]];
83  }else{
84  nodal_var_vals[m]=field2[i*nfield[1]+icomp[j]];
85  }
86  m++;
87  }
88  }else{
89  nksegment=(*nkcoords)/(*ngraph);
90  m=0;
91  for(k=istartset[*iset-1]-1;k<iendset[*iset-1];k++){
92  if(ialset[k]>0){
93 
94  for(l=0;l<*ngraph;l++){
95  i=ialset[k]+l*nksegment-1;
96 
97  /* check whether output is requested for solid nodes or
98  network nodes */
99 
100  if(*iselect==1){
101  if(inum[i]<=0) continue;
102  }else if(*iselect==-1){
103  if(inum[i]>=0) continue;
104  }else{
105  if(inum[i]==0) continue;
106  }
107 
108  /* storing the entities */
109  if(ifield[j]==1){
110  nodal_var_vals[m]=field1[i*nfield[0]+icomp[j]];
111  }else{
112  nodal_var_vals[m]=field2[i*nfield[1]+icomp[j]];
113  }
114  m++;
115  }
116  }else{
117  l=ialset[k-2];
118  do{
119  l-=ialset[k];
120  if(l>=ialset[k-1]) break;
121  o=0;
122  for(m=0;m<*ngraph;m++){
123  i=l+m*nksegment-1;
124 
125  /* check whether output is requested for solid nodes or
126  network nodes */
127 
128  if(*iselect==1){
129  if(inum[i]<=0) continue;
130  }else if(*iselect==-1){
131  if(inum[i]>=0) continue;
132  }else{
133  if(inum[i]==0) continue;
134  }
135 
136  /* storing the entities */
137  if(ifield[j]==1){
138  nodal_var_vals[o]=field1[i*nfield[0]+icomp[j]];
139  }else{
140  nodal_var_vals[o]=field2[i*nfield[1]+icomp[j]];
141  }
142  }
143  o++;
144  printf ("%f\n",nodal_var_vals[m]);
145  }while(1);
146  }
147  }
148  }
149 
150  // Note: the results for exo tensor format are strangely ordered,
151  if (*ncomp==12){
152  k=j;
153  }else{k=j;}
154 
155  int errr = ex_put_nodal_var (exoid, time_step, k+1+countvar, nout, nodal_var_vals);
156  if (errr) printf ("ERROR exoselect data for dim %i record %i.\n", j, countvar+j);
157  }
158 
159  free(nodal_var_vals);
160  return;
161 
162 }
#define ITG
Definition: CalculiX.h:51
Hosted by OpenAircraft.com, (Michigan UAV, LLC)