00001 #include "aepointst.h"
00002 #include "globalt.h"
00003 #include "vector.h"
00004
00005
00006 aepointst::aepointst ()
00007 {
00008 tape=NULL; ptape=NULL;
00009 }
00010 aepointst::~aepointst ()
00011 {
00012 delete [] tape;
00013 delete [] ptape;
00014 }
00015
00016 void aepointst::read (FILE *in)
00017 {
00018 long i,j,k;
00019
00020 tape = new long [Tt->ne];
00021 ptape = new long [Tt->ne];
00022
00023 for (i=0;i<Tt->ne;i++){
00024 ptape[i]=-2;
00025 fscanf (in,"%ld",tape+i);
00026 if (tape[i]==userdefinedt){
00027 fscanf (in,"%ld",ptape+i);
00028 ptape[i]--;
00029 }
00030 }
00031
00032
00033 fscanf (in,"%ld",&nudsets);
00034 udpc = new double** [nudsets];
00035 udpa = new long* [nudsets];
00036 for (i=0;i<nudsets;i++){
00037 udpa[i] = new long [2];
00038
00039 fscanf (in,"%ld %ld",&udpa[i][0],&udpa[i][1]);
00040 udpc[i] = new double* [udpa[i][0]];
00041 for (j=0;j<udpa[i][0];j++){
00042 udpc[i][j] = new double [udpa[i][1]];
00043 for (k=0;k<udpa[i][1];k++){
00044 fscanf (in,"%lf",&udpc[i][j][k]);
00045 }
00046 }
00047 }
00048
00049
00050 fscanf (in,"%ld",&net);
00051 ent = new long [net];
00052 npt = new long [net];
00053 pt = new long* [net];
00054 plcs = new long* [net];
00055 for (i=0;i<net;i++){
00056 fscanf (in,"%ld %ld",ent+i,npt+i);
00057 ent[i]--;
00058 pt[i] = new long [npt[i]];
00059 plcs[i] = new long [npt[i]];
00060 for (j=0;j<npt[i];j++){
00061 fscanf (in,"%ld %ld",&pt[i][j],&plcs[i][j]);
00062 pt[i][j]--; plcs[i][j]--;
00063 }
00064 }
00065
00066
00067 if (net>0){
00068 fscanf (in,"%ld",&nlcs);
00069 lcs = new double* [nlcs];
00070 nclcs = new long [nlcs];
00071 for (i=0;i<nlcs;i++){
00072 fscanf (in,"%ld",nclcs+i);
00073 lcs[i] = new double [nclcs[i]];
00074 for (j=0;j<nclcs[i];j++){
00075 fscanf (in,"%lf",&lcs[i][j]);
00076 }
00077 }
00078 }
00079
00080 }
00081
00082
00083
00084 void aepointst::init (strastret sst)
00085 {
00086 long i;
00087
00088 tape = new long [Tt->ne];
00089 ptape = new long [Tt->ne];
00090
00091 if (sst==grad)
00092 {
00093 for (i=0; i<Tt->ne; i++)
00094 {
00095 if (Outdt->eo.selegrad.presence_id(i) || Tp->gradcomp)
00096 tape[i] = 1;
00097 }
00098 }
00099
00100 if (sst==flux)
00101 {
00102 for (i=0; i<Tt->ne; i++)
00103 {
00104 if (Outdt->eo.seleflux.presence_id(i) || Tp->fluxcomp)
00105 tape[i] = 1;
00106 }
00107 }
00108 nudsets = 0;
00109 net = 0;
00110 nlcs =0;
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123 long aepointst::give_naep (long eid)
00124 {
00125 long naep;
00126 naep = udpa[eid][0];
00127 return naep;
00128 }
00129
00130
00131
00132
00133
00134
00135
00136
00137 long aepointst::give_ncomp (long eid)
00138 {
00139 long ncomp;
00140 ncomp = udpa[eid][1];
00141 return ncomp;
00142 }
00143
00144
00145
00146
00147
00148
00149
00150
00151 long aepointst::give_sid (long eid)
00152 {
00153 long sid;
00154 sid = ptape[eid];
00155 return sid;
00156 }
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 void aepointst::give_aepcoord (long sid,long pid,vector &coord)
00168 {
00169 long i;
00170 for (i=0;i<udpa[sid][1];i++){
00171 coord[i]=udpc[sid][pid][i];
00172 }
00173 }
00174
00175
00176
00177
00178
00179
00180
00181
00182 void aepointst::alloc (long nlc)
00183 {
00184 long i,j,naep,ncomp;
00185
00186 ev = new double** [Tt->ne];
00187
00188 for (i=0;i<Tt->ne;i++){
00189 if (tape[i]==userdefinedt){
00190
00191 naep=udpa[ptape[i]][0];
00192 ev[i] = new double* [naep];
00193
00194 ncomp=Tt->give_ncomp(i);
00195 for (j=0;j<naep;j++){
00196 ev[i][j] = new double [nlc*ncomp];
00197 }
00198 }
00199 }
00200 }
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212 void aepointst::storevalues (long lcid,long eid,long pid,vector &val)
00213 {
00214 long i,ncomp;
00215
00216 if (tape[eid]!=userdefinedt){
00217 fprintf (stderr,"\n\n wrong application of function aepointst::storevalues (%s, line %d).\n",__FILE__,__LINE__);
00218 }
00219
00220 ncomp=val.n;
00221 for (i=0;i<ncomp;i++){
00222 ev[eid][pid][i]=val[lcid*ncomp+i];
00223 }
00224
00225 }
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238 void aepointst::transformvalues (long tt)
00239 {
00240 tt = tt;
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295 }
00296