AcouSTO  version 2.0

◆ mshoutm()

void mshoutm ( int  icounter,
COMPLEX  cfreq 
)

Routine mshoutm(icounter, cfreq). Produces the file 'runname.mics.fHz.msh', which can bee used to visualize the solution at the microphones array with Gmsh. Arguments: 'icounter' is the frequency index (equal to ifreq); 'cfreq' is the complex frequency (the Laplace variable). Scalar fields included are:

  • Re Im and Abs of the scattered field
  • Re Im and Abs of the total field
  • Total pressure in Db
  • Insertion Loss = 20 Log [(total field)/(incident field)]
Parameters
[in]cfreqCOMPLEX frequency
[in]icounterfrequency index
40  {
41 
42  int i, ive1, ive2, ive3, ive4;
43  //int in1,in2,in3,in4;
44  FILE *f;
45  char fname[MAX_PATH];
46  COMPLEX val;
47  Vec gPhiscm = NULL;
48  Vec gPhincm = NULL;
49  DOUBLE iloss,prat,spl;
50 
51  int locRows;
52  int gRows;
53  int mm,nn;
54  int descl[9];
55  int descg[9];
56  int izero=0;
57  int ione=1;
58  int info, celltype, cellvrtx;
59 
60  celltype=2;
61  cellvrtx=modgeominfo->nmics;
62 
63  if (0 == rank) {
64  gPhiscm = calloc(modgeominfo->nmics,sizeof(COMPLEX));
65  gPhincm = calloc(modgeominfo->nmics,sizeof(COMPLEX));
66  }
67 
68  gRows = modgeominfo->nmics;
69  locRows = numroc_(&gRows ,&runinfo->mics_block_size,&runinfo->myrow,&izero,&runinfo->nprows);
70 
71 
72  // Gathering vectors on node 0
73  mm = gRows;// * runinfo->nprows;
74  nn = runinfo->npcols;
75  descinit_(descl, &gRows,&ione, &runinfo->mics_block_size, &ione, &izero, &izero, &runinfo->ctxt, &gRows, &info);
76  descinit_(descg, &mm ,&ione, &gRows , &ione, &izero, &izero, &runinfo->ctxt, &gRows, &info);
77 
78  pzgemr2d_(&gRows,&ione,solution->vecPhium ,&ione, &ione,descl, gPhiscm ,&ione,&ione,descg,&runinfo->ctxt);
79  pzgemr2d_(&gRows,&ione,solution->vecPhincm ,&ione, &ione,descl, gPhincm ,&ione,&ione,descg,&runinfo->ctxt);
80 
81  if (0 != rank) return;
82  get_filename(fname,"%s-mics-%.4fHz.msh",rundetails->title,(double)HZFREQ(cfreq));
83  f = fopen(fname,"w");
84 
85  fprintf(f,"$MeshFormat\n");
86  fprintf(f,"2.2 0 %d \n",(int)sizeof(double));
87  fprintf(f,"$EndMeshFormat\n");
88 
89  fprintf(f,"$Nodes\n");
90  fprintf(f,"%d \n",modgeominfo->nmics);
91  for(i=0;i<modgeominfo->nmics;i++){
92  fprintf(f,"%d %f %f %f \n",i+1,(double)geometry->mics[i].x,(double)geometry->mics[i].y,(double)geometry->mics[i].z);
93  }
94  fprintf(f,"$EndNodes\n");
95 
96  fprintf(f,"$Elements\n");
97  fprintf(f,"%d \n",modgeominfo->nemics);
98  for(i=0;i<modgeominfo->nemics;i++){
99  ive1 = 0 + i*4 ;
100  ive2 = 1 + i*4 ;
101  ive3 = 2 + i*4 ;
102  ive4 = 3 + i*4 ;
103  if (2 == geometry->kelmm[i]) fprintf(f,"%d %d 2 1 1 %d %d %d \n",i+1,geometry->kelmm[i],geometry->jnodm[ive1]+1,geometry->jnodm[ive2]+1,geometry->jnodm[ive3]+1);
104  if (3 == geometry->kelmm[i]) fprintf(f,"%d %d 2 1 1 %d %d %d %d\n",i+1,geometry->kelmm[i],geometry->jnodm[ive1]+1,geometry->jnodm[ive2]+1,geometry->jnodm[ive3]+1,geometry->jnodm[ive4]+1);
105  if (4 == geometry->kelmm[i]) fprintf(f,"%d %d 2 1 1 %d %d %d %d\n",i+1,geometry->kelmm[i],geometry->jnodm[ive1]+1,geometry->jnodm[ive2]+1,geometry->jnodm[ive3]+1,geometry->jnodm[ive4]+1);
106  }
107  fprintf(f,"$EndElements\n");
108 
109  fprintf(f,"$NodeData\n");
110  fprintf(f,"%d \n",1);
111  fprintf(f,"\"Mics Re(Incident_Field)\"\n");
112  fprintf(f,"%d \n",1);
113  fprintf(f,"%f \n",HZFREQ(cfreq));
114  fprintf(f,"%d \n",3);
115  fprintf(f,"%d \n",icounter);
116  fprintf(f,"%d \n",1);
117  fprintf(f,"%d \n",modgeominfo->nmics);
118  for(i=0;i<modgeominfo->nmics;i++){
119  val = gPhincm[i];
120  fprintf(f,"%d %f\n",i+1,CREAL(val));
121  }
122  fprintf(f,"$EndNodeData\n");
123 
124  fprintf(f,"$NodeData\n");
125  fprintf(f,"%d \n",1);
126  fprintf(f,"\"Mics Im(Incident_Field)\"\n");
127  fprintf(f,"%d \n",1);
128  fprintf(f,"%f \n",HZFREQ(cfreq));
129  fprintf(f,"%d \n",3);
130  fprintf(f,"%d \n",icounter);
131  fprintf(f,"%d \n",1);
132  fprintf(f,"%d \n",modgeominfo->nmics);
133  for(i=0;i<modgeominfo->nmics;i++){
134  val = gPhincm[i];
135  fprintf(f,"%d %f\n",i+1,CIMAG(val));
136  }
137  fprintf(f,"$EndNodeData\n");
138 
139  fprintf(f,"$NodeData\n");
140  fprintf(f,"%d \n",1);
141  fprintf(f,"\"Mics Abs(Incident_Field)\"\n");
142  fprintf(f,"%d \n",1);
143  fprintf(f,"%f \n",HZFREQ(cfreq));
144  fprintf(f,"%d \n",3);
145  fprintf(f,"%d \n",icounter);
146  fprintf(f,"%d \n",1);
147  fprintf(f,"%d \n",modgeominfo->nmics);
148  for(i=0;i<modgeominfo->nmics;i++){
149  val = gPhincm[i];
150  fprintf(f,"%d %f\n",i+1,CABS(val));
151  }
152  fprintf(f,"$EndNodeData\n");
153 
154  fprintf(f,"$NodeData\n");
155  fprintf(f,"%d \n",1);
156  fprintf(f,"\"Mics Re(Scattered_Field)\"\n");
157  fprintf(f,"%d \n",1);
158  fprintf(f,"%f \n",HZFREQ(cfreq));
159  fprintf(f,"%d \n",3);
160  fprintf(f,"%d \n",icounter);
161  fprintf(f,"%d \n",1);
162  fprintf(f,"%d \n",modgeominfo->nmics);
163  for(i=0;i<modgeominfo->nmics;i++){
164  val = gPhiscm[i];
165  fprintf(f,"%d %f\n",i+1,CREAL(val));
166  }
167  fprintf(f,"$EndNodeData\n");
168 
169  fprintf(f,"$NodeData\n");
170  fprintf(f,"%d \n",1);
171  fprintf(f,"\"Mics Im(Scattered_Field)\"\n");
172  fprintf(f,"%d \n",1);
173  fprintf(f,"%f \n",HZFREQ(cfreq));
174  fprintf(f,"%d \n",3);
175  fprintf(f,"%d \n",icounter);
176  fprintf(f,"%d \n",1);
177  fprintf(f,"%d \n",modgeominfo->nmics);
178  for(i=0;i<modgeominfo->nmics;i++){
179  val = gPhiscm[i];
180  fprintf(f,"%d %f\n",i+1,CIMAG(val));
181  }
182  fprintf(f,"$EndNodeData\n");
183 
184  fprintf(f,"$NodeData\n");
185  fprintf(f,"%d \n",1);
186  fprintf(f,"\"Mics Abs(Scattered_Field)\"\n");
187  fprintf(f,"%d \n",1);
188  fprintf(f,"%f \n",HZFREQ(cfreq));
189  fprintf(f,"%d \n",3);
190  fprintf(f,"%d \n",icounter);
191  fprintf(f,"%d \n",1);
192  fprintf(f,"%d \n",modgeominfo->nmics);
193  for(i=0;i<modgeominfo->nmics;i++){
194  val = gPhiscm[i];
195  fprintf(f,"%d %f\n",i+1,CABS(val));
196  }
197  fprintf(f,"$EndNodeData\n");
198 
199  fprintf(f,"$NodeData\n");
200  fprintf(f,"%d \n",1);
201  fprintf(f,"\"Mics Re(Total_Field)\"\n");
202  fprintf(f,"%d \n",1);
203  fprintf(f,"%f \n",HZFREQ(cfreq));
204  fprintf(f,"%d \n",3);
205  fprintf(f,"%d \n",icounter);
206  fprintf(f,"%d \n",1);
207  fprintf(f,"%d \n",modgeominfo->nmics);
208  for(i=0;i<modgeominfo->nmics;i++){
209  val = gPhiscm[i] + gPhincm[i];
210  fprintf(f,"%d %f\n",i+1,CREAL(val));
211  }
212  fprintf(f,"$EndNodeData\n");
213 
214  fprintf(f,"$NodeData\n");
215  fprintf(f,"%d \n",1);
216  fprintf(f,"\"Mics Im(Total_Field)\"\n");
217  fprintf(f,"%d \n",1);
218  fprintf(f,"%f \n",HZFREQ(cfreq));
219  fprintf(f,"%d \n",3);
220  fprintf(f,"%d \n",icounter);
221  fprintf(f,"%d \n",1);
222  fprintf(f,"%d \n",modgeominfo->nmics);
223  for(i=0;i<modgeominfo->nmics;i++){
224  val = gPhiscm[i] + gPhincm[i];
225  fprintf(f,"%d %f\n",i+1,CIMAG(val));
226  }
227  fprintf(f,"$EndNodeData\n");
228 
229  fprintf(f,"$NodeData\n");
230  fprintf(f,"%d \n",1);
231  fprintf(f,"\"Mics Abs(Total_Field)\"\n");
232  fprintf(f,"%d \n",1);
233  fprintf(f,"%f \n",HZFREQ(cfreq));
234  fprintf(f,"%d \n",3);
235  fprintf(f,"%d \n",icounter);
236  fprintf(f,"%d \n",1);
237  fprintf(f,"%d \n",modgeominfo->nmics);
238  for(i=0;i<modgeominfo->nmics;i++){
239  val = gPhiscm[i] + gPhincm[i];
240  fprintf(f,"%d %f\n",i+1,CABS(val));
241  }
242  fprintf(f,"$EndNodeData\n");
243 
244  fprintf(f,"$NodeData\n");
245  fprintf(f,"%d \n",1);
246  fprintf(f,"\"Mics Insertion Loss\"\n");
247  fprintf(f,"%d \n",1);
248  fprintf(f,"%f \n",HZFREQ(cfreq));
249  fprintf(f,"%d \n",3);
250  fprintf(f,"%d \n",icounter);
251  fprintf(f,"%d \n",1);
252  fprintf(f,"%d \n",modgeominfo->nmics);
253  for(i=0;i<modgeominfo->nmics;i++){
254  prat = CABS(gPhincm[i]+gPhiscm[i])/CABS(gPhincm[i]);
255  iloss = 20.0*log10(1./prat);
256  fprintf(f,"%d %f\n",i+1,iloss);
257  }
258  fprintf(f,"$EndNodeData\n");
259 
260  fprintf(f,"$NodeData\n");
261  fprintf(f,"%d \n",1);
262  fprintf(f,"\"Mics SPL\"\n");
263  fprintf(f,"%d \n",1);
264  fprintf(f,"%f \n",HZFREQ(cfreq));
265  fprintf(f,"%d \n",3);
266  fprintf(f,"%d \n",icounter);
267  fprintf(f,"%d \n",1);
268  fprintf(f,"%d \n",modgeominfo->nmics);
269  for(i=0;i<modgeominfo->nmics;i++){
270  prat = 0.70710678*CABS(gPhiscm[i]+gPhincm[i])/0.00002;
271  spl = 20.0*log10(prat);
272  fprintf(f,"%d %f\n",i+1,spl);
273  }
274  fprintf(f,"$EndNodeData\n");
275 
276 
277  fclose(f);
278 
279  VecDestroy(gPhincm);
280  VecDestroy(gPhiscm);
281 
282 }
struct run_info * runinfo
Definition: globals.h:34
#define Vec
Definition: types.h:63
int npcols
Definition: structs.h:113
#define VecDestroy(v)
Definition: allocation.h:111
const char * title
Definition: structs.h:135
#define CREAL(x)
Definition: functions.h:49
int nemics
Definition: structs.h:305
int myrow
Definition: structs.h:115
int nprows
Definition: structs.h:111
void get_filename(char *filename, const char *format,...)
Definition: utils.c:59
#define CIMAG(x)
Definition: functions.h:50
int mics_block_size
Definition: structs.h:124
void pzgemr2d_(int *m, int *n, COMPLEX *A, int *ia, int *ja, int *desca, COMPLEX *B, int *ib, int *jb, int *descb, int *ictxt)
Copies a (m x n) submatrix of A from element (ia,ja) on a submatrix of B from element (ib...
int ctxt
Definition: structs.h:109
void descinit_(int *desc, int *m, int *n, int *mb, int *nb, int *ia, int *ja, int *ictxt, int *llda, int *info)
struct solution_struct * solution
Definition: globals.h:52
#define COMPLEX
Definition: types.h:48
Vec vecPhincm
Definition: structs.h:582
#define CABS(x)
Definition: functions.h:51
int nmics
Definition: structs.h:304
#define HZFREQ(x)
Definition: functions.h:28
Vec vecPhium
Definition: structs.h:586
double DOUBLE
Definition: types.h:44
int numroc_(int *m, int *mb, int *p, int *ia, int *npr)
int rank
Definition: globals.h:79
struct run_details * rundetails
Definition: globals.h:36
Geometry info structure.
Definition: structs.h:161
#define MAX_PATH
Definition: constants.h:29
#define calloc(n, size)
Definition: allocation.h:37
struct modgeom_info * modgeominfo
Definition: globals.h:38