Evaluates Matrix Y and RHS of the linear System. Valid for Neumann-type & Dirichlet-type Boundary Conditions. Coefficients are read from file.
44 int mpi_ncntr,mpi_nelmu;
46 DOUBLE bb,cc,dd,thetac,estar;
50 struct panel4* mpi_elements;
81 int nrow,nrowi,iloop,nloop,irow,nio,nrlast;
86 int csymmoffset,bsymmoffset;
96 MPI_Group* mpi_row_groups;
97 MPI_Group mpi_group_world;
113 #ifdef _ACOUSTO_DEBUG 114 cmatfile = fopen(
"CD.matrix.out",
"w");
115 fprintf(cmatfile,
"CD=[");
123 cstride = locRows * locCols;
133 for(i = 0; i < locRows*locCols; i++)
145 pzgemr2d_(&gCRows,&ione,
solution->
vecPsiu ,&ione, &ione,descpsiu, psiuvec ,&ione,&ione,descgpsiu,&
runinfo->
ctxt);
146 pzgemr2d_(&gCRows,&ione,
solution->
vecPsinc,&ione, &ione,descpsiu, psincvec,&ione,&ione,descgpsiu,&
runinfo->
ctxt);
147 pzgemr2d_(&gCRows,&ione,
solution->
vecPhinc,&ione, &ione,descpsiu, phincvec,&ione,&ione,descgpsiu,&
runinfo->
ctxt);
165 j12(locRows,nrow,&nrlast,&nloop);
169 fbcoef = fopen(fbname,
"rb");
173 fccoef = fopen(fcname,
"rb");
176 for(iloop=0;iloop<nloop;iloop++){
178 if(iloop == nloop-1) nrowi = nrlast;
179 cstride = nrowi*locCols;
180 bstride = nrowi*locCols;
186 for(irow=0;irow<nrowi;irow++){
187 i=
j21(irow,iloop,nrow);
201 for(j=0;j<locCols;j++){
203 ic = irow*locCols +j;
204 ib = irow*locCols +j;
206 estar = (icntr == ielmu ) ? 0.5 : 0.0;
210 ielmb = ielmu + is*mpi_nelmu;
212 csymmoffset = is * 4*nrowi*locCols;
213 bsymmoffset = is * 2*nrowi*locCols;
217 dd =
bodycoefs->
C[ic + cstride + csymmoffset];
218 thetac =
bodycoefs->
C[ic + cstride*2 + csymmoffset];
219 cexpc =
CEXP(-cfreq*thetac);
221 vec_copy(&un,mpi_elements[ielmb].n);
225 gamma_over_lambda = gamma/lambda;
226 lambda_over_gamma = lambda/gamma;
231 matval = (cc+cfreq*dd) * cexpc ;
244 if (
modsolinfo->
dirneu == 2)
solution->
rhs[i] += bb * cexpc*((func+gdotn)/lambda - phincvec[ielmu]*gamma_over_lambda - psincvec[ielmu]);
252 #ifdef _ACOUSTO_DEBUG 258 #ifdef _ACOUSTO_DEBUG 259 fprintf(cmatfile,
";\n");
264 #ifdef _ACOUSTO_DEBUG 265 fprintf(cmatfile,
"];\n");
280 MPI_Comm_group(MPI_COMM_WORLD, &mpi_group_world);
285 ierr = MPI_Group_incl(mpi_group_world,
runinfo->
npcols,row_ranks,&mpi_row_groups[i]);
286 ierr = MPI_Comm_create(MPI_COMM_WORLD, mpi_row_groups[i], &mpi_comm[i]);
291 if(MPI_COMM_NULL != mpi_comm[i]){
302 for(i=0;i<locRows;i++){
307 #ifdef _ACOUSTO_DEBUG 309 f = fopen(fname,
"w");
310 for(i=0;i<locRows;i++){
312 for(j=0;j<locCols;j++){
321 if(psiuvec ) free(psiuvec);
322 if(psincvec ) free(psincvec);
323 if(phincvec ) free(phincvec);
324 if(ctmp ) free(ctmp);
struct bodycoefs_struct * bodycoefs
Definition: globals.h:48
struct run_info * runinfo
Definition: globals.h:34
#define Vec
Definition: types.h:63
int npcols
Definition: structs.h:113
int ncntr
Definition: structs.h:299
COMPLEX * matY
Definition: structs.h:603
MPI_Datatype mpi_complex
Definition: globals.h:93
#define CREAL(x)
Definition: functions.h:49
#define MPI_ACOUSTO_COMPLEX
Definition: types.h:56
Vec vecPsinc
Definition: structs.h:580
int myrow
Definition: structs.h:115
void vec_copy(struct vector *vdest, const struct vector vsrc)
Definition: math.c:158
int nprows
Definition: structs.h:111
void get_filename(char *filename, const char *format,...)
Definition: utils.c:59
vector struct to hold triplets.
Definition: structs.h:29
#define CIMAG(x)
Definition: functions.h:50
DOUBLE * B
Definition: structs.h:385
COMPLEX * lambda
Definition: structs.h:623
int nchief
Definition: structs.h:301
MPI_Op mpi_op_complex_sum
Definition: globals.h:124
DOUBLE * C
Definition: structs.h:387
#define LOG_INFO
Definition: logger.h:26
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...
struct bc_struct bc
Definition: globals.h:54
int nelmb
Definition: structs.h:295
#define CEXP(x)
Definition: functions.h:48
Vec vecPhinc
Definition: structs.h:578
#define COMPLEX_ZERO
Definition: constants.h:44
int ctxt
Definition: structs.h:109
int knw
Definition: structs.h:446
Definition of a quadrilateral panel.
Definition: structs.h:44
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 vecPsiu
Definition: structs.h:584
struct modsol_info * modsolinfo
Definition: globals.h:44
DOUBLE z
Definition: structs.h:35
void j12(int i12, int n1, int *i1, int *i2)
Definition: math.c:206
struct vector g
Definition: structs.h:626
DOUBLE vec_dot(struct vector v1, struct vector v2)
Definition: math.c:34
COMPLEX * gamma
Definition: structs.h:624
int j21(int i1, int i2, int n1)
Definition: math.c:202
int mycol
Definition: structs.h:117
int nsymm
Definition: structs.h:97
double DOUBLE
Definition: types.h:44
int numroc_(int *m, int *mb, int *p, int *ia, int *npr)
int rank
Definition: globals.h:79
DOUBLE x
Definition: structs.h:31
#define CREATE_VEC(v, lsize)
Definition: allocation.h:90
int col_block_size
Definition: structs.h:121
COMPLEX * func
Definition: structs.h:625
int krow
Definition: structs.h:105
Geometry info structure.
Definition: structs.h:161
#define MAX_PATH
Definition: constants.h:29
COMPLEX * rhs
Definition: structs.h:605
int row_block_size
Definition: structs.h:119
void logger(int level, char *msg,...)
Definition: logger.c:56
#define calloc(n, size)
Definition: allocation.h:37
struct modgeom_info * modgeominfo
Definition: globals.h:38
void sc_l2g(int il, int p, int n, int np, int nb, int *i)
Definition: matutils.c:116
#define VecZeroEntries(V, n)
Definition: allocation.h:99
DOUBLE y
Definition: structs.h:33
int dirneu
Definition: structs.h:444