AcouSTO  version 2.0

◆ printsol_on_master()

void printsol_on_master ( int  icounter,
COMPLEX  cfreq 
)

Prints solution on Master node Output file name is in the form: <run title>-surf-<frequency in Hertz>Hz.out.

Parameters
[in]cfreqCOMPLEX frequency
[in]icounterfrequency index
32  {
33  FILE *file;
34  char fname[MAX_PATH];
35  int mpi_ncntr;
36  COMPLEX phiinc,phisc,phitot;
37  COMPLEX psiinc,psisc,psitot;
38  DOUBLE rs,is;
39  //Vec locSol;
40  int nstart,nend;
41  int i = 0;
42 
43  Vec gPhinc = NULL;
44  Vec gPsinc = NULL;
45  int gRows,mm,nn;
46  int descl[9];
47  int descg[9];
48  int izero = 0;
49  int ione = 1;
50  int info;
51 
52  mpi_ncntr = modgeominfo->ncntr + modgeominfo->nchief;
53 
54  calculate_bounds(rank,mpi_ncntr,size, &nstart,&nend);
55 
56 
57  if (0 == rank) gPhinc = calloc(modgeominfo->ncntr,sizeof(COMPLEX));
58  if (0 == rank) gPsinc = calloc(modgeominfo->ncntr,sizeof(COMPLEX));
59  gRows = modgeominfo->ncntr;
60 
61  mm = gRows;
62  nn = runinfo->npcols;
63 
64  // Gathering vectors on node 0
65  descinit_(descl , &mm ,&ione, &runinfo->row_block_size,&ione,&izero,&izero,&runinfo->ctxt,&gRows ,&info);
66  descinit_(descg , &mm ,&ione, &gRows, &ione,&izero,&izero,&runinfo->ctxt,&gRows ,&info);
67  pzgemr2d_(&gRows,&ione,solution->vecPhinc ,&ione, &ione,descl, gPhinc ,&ione,&ione,descg,&runinfo->ctxt);
68  pzgemr2d_(&gRows,&ione,solution->vecPsinc ,&ione, &ione,descl, gPsinc ,&ione,&ione,descg,&runinfo->ctxt);
69 
70  file = NULL;
71  rs = 0.0;
72  is = 0.0;
73  if(0==rank){
74  get_filename(fname,"%s-surf-%.4fHz.out",rundetails->title,(double)HZFREQ(cfreq));
75  file = fopen(fname,"w");
76  fprintf(file, "# Run name = %s\n",rundetails->title);
77  fprintf(file, "# Run owner = %s\n",rundetails->owner);
78  fprintf(file, "# Cfg file = %s\n",rundetails->cfg_filename);
79  fprintf(file, "# Frequency = %f + i*%f (%8.4f Hz)\n",(double)CREAL(cfreq),(double)CIMAG(cfreq), (double)HZFREQ(cfreq));
80  fprintf(file, "# \n");
81  fprintf(file, "# 1 2 3 4 5 6 7 8 9 10 11 12 13\n");
82  fprintf(file, "# inod xnod ynod znod re(inc) im(inc) abs(inc) re(scat) im(scat) abs(scat) re(tot) im(tot) abs(tot)\n");
83  for(i=0;i<mpi_ncntr;i++){
84  if (modsolinfo->dirneu == 1){
85  psiinc = gPsinc[i];
86  psisc = (modsolinfo->knw == 1) ? solution->sol[i]-psiinc : solution->sol[i];
87  psitot = (modsolinfo->knw == 1) ? solution->sol[i] : solution->sol[i] + psiinc;
88  fprintf(file,f1I12F,
89  i, // CONTROL POINT INFO
90  geometry->cntr[i].x,
91  geometry->cntr[i].y,
92  geometry->cntr[i].z,
93 
94  CREAL(psiinc), // INCIDENT
95  CIMAG(psiinc),
96  CABS(psiinc),
97 
98  CREAL(psisc), // SCATTERING
99  CIMAG(psisc),
100  CABS(psisc),
101 
102  CREAL(psitot), // TOTAL
103  CIMAG(psitot),
104  CABS(psitot)
105  );
106  }else if(modsolinfo->dirneu == 2){
107  phiinc = gPhinc[i];
108  phisc = (modsolinfo->knw == 1) ? solution->sol[i]-phiinc : solution->sol[i];
109  phitot = (modsolinfo->knw == 1) ? solution->sol[i] : solution->sol[i] + phiinc;
110  fprintf(file,f1I12F,
111  i, // CONTROL POINT INFO
112  geometry->cntr[i].x,
113  geometry->cntr[i].y,
114  geometry->cntr[i].z,
115 
116  CREAL(phiinc), // INCIDENT
117  CIMAG(phiinc),
118  CABS(phiinc),
119 
120  CREAL(phisc), // SCATTERING
121  CIMAG(phisc),
122  CABS(phisc),
123 
124  CREAL(phitot), // TOTAL
125  CIMAG(phitot),
126  CABS(phitot)
127  );
128  }
129  }
130 
131  fclose(file);
132  free(gPhinc);
133  free(gPsinc);
134  }
135 }
struct run_info * runinfo
Definition: globals.h:34
#define Vec
Definition: types.h:63
int npcols
Definition: structs.h:113
const char * title
Definition: structs.h:135
int ncntr
Definition: structs.h:299
#define CREAL(x)
Definition: functions.h:49
const char * owner
Definition: structs.h:133
char * cfg_filename
Definition: structs.h:137
Vec vecPsinc
Definition: structs.h:580
void get_filename(char *filename, const char *format,...)
Definition: utils.c:59
#define CIMAG(x)
Definition: functions.h:50
int nchief
Definition: structs.h:301
COMPLEX * sol
Definition: structs.h:607
int size
Definition: globals.h:81
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...
Vec vecPhinc
Definition: structs.h:578
int ctxt
Definition: structs.h:109
int knw
Definition: structs.h:446
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
void calculate_bounds(int _rank, int _nelmb, int _size, int *nstart, int *nend)
Definition: math.c:219
#define CABS(x)
Definition: functions.h:51
struct modsol_info * modsolinfo
Definition: globals.h:44
#define HZFREQ(x)
Definition: functions.h:28
double DOUBLE
Definition: types.h:44
int rank
Definition: globals.h:79
struct run_details * rundetails
Definition: globals.h:36
#define f1I12F
Definition: formats.h:80
Geometry info structure.
Definition: structs.h:161
#define MAX_PATH
Definition: constants.h:29
int row_block_size
Definition: structs.h:119
#define calloc(n, size)
Definition: allocation.h:37
struct modgeom_info * modgeominfo
Definition: globals.h:38
int dirneu
Definition: structs.h:444