00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifdef COMP_GNUOLD
00024 #include <iostream.h>
00025 #include <fstream.h>
00026 #include <time.h>
00027 #include <math.h>
00028 #else
00029 #include <iostream>
00030 #include <fstream>
00031 #include <ctime>
00032 #include <cmath>
00033 #endif
00034
00035
00036
00037 #include "../parser.h"
00038
00039
00040 #include "../paramete.h"
00041 #include "../abbrevi.h"
00042 #include "../math_lib/math_lib.h"
00043
00044
00045 #include "../basic/basic.h"
00046
00047
00048 #include "../domain/domain.h"
00049
00050
00051 #include "../formulas/boundy.h"
00052 #include "../formulas/loc_sten.h"
00053
00054
00055 #include "../grid/gpar.h"
00056 #include "../grid/parallel.h"
00057 #include "../grid/mgcoeff.h"
00058 #include "../grid/sto_man.h"
00059 #include "../grid/gridbase.h"
00060 #include "../grid/grid.h"
00061 #include "../grid/input.h"
00062
00063
00064 #include "../evpar/evpar.h"
00065
00066
00067 #include "variable.h"
00068 #include "varcon.h"
00069
00070 void Print_UCD(Cell_Variable& a, ofstream *Datei) {
00071 a.Give_grid()->Print_Cell_Variable_AVS(Datei,a.Number_cell_variable());
00072 };
00073 void Print_UCD_moved(Cell_Variable& v,
00074 Variable& a, Variable& b, Variable& c, ofstream *Datei) {
00075 a.Give_grid()->Print_Cell_Variable_AVS_moved(Datei,
00076 v.Number_cell_variable(),
00077 a.Number_variable(),
00078 b.Number_variable(),
00079 c.Number_variable());
00080 };
00081
00082 void Print_UCD_parallel(Cell_Variable& a, ofstream *Datei) {
00083 a.Give_grid()->Print_Cell_Variable_AVS_parallel(Datei,
00084 a.Number_cell_variable());
00085 };
00086
00087 CoExpr<CoExprTrans> Cell_Interpolation(const Variable& vec) {
00088 typedef CoExprTrans ExprT;
00089 return CoExpr<ExprT>(ExprT(vec));
00090 }
00091
00092 void Cell_Variable::operator=(double (*Formula)(double x,double y,double z)) {
00093 D3vector V;
00094 Test_init();
00095
00096
00097 for(iter_ice=grid->Start_P_interior_cell(level);
00098 iter_ice!=NULL;iter_ice=iter_ice->Next()) {
00099 V = iter_ice->coordinate(grid);
00100 iter_ice->varM(grid)[number_cell_variable] =
00101 Formula(V.x,V.y,V.z);
00102 }
00103
00104 for(iter_bce=grid->Start_P_boundary_tet(level);
00105 iter_bce!=NULL;iter_bce=iter_bce->Next()) {
00106 V = iter_bce->coordinate(grid);
00107 iter_bce->varM(grid)[number_cell_variable] =
00108 Formula(V.x,V.y,V.z);
00109 }
00110 }
00111
00112
00113
00114 void Cell_Variable::operator=(Input_data_object& input_object) {
00115 D3vector V;
00116 Test_init();
00117
00118
00119 for(iter_ice=grid->Start_P_interior_cell(level);
00120 iter_ice!=NULL;iter_ice=iter_ice->Next()) {
00121 V = iter_ice->coordinate(grid);
00122 iter_ice->varM(grid)[number_cell_variable] =
00123 input_object.Interpolate_value(V);
00124 }
00125
00126 for(iter_bce=grid->Start_P_boundary_tet(level);
00127 iter_bce!=NULL;iter_bce=iter_bce->Next()) {
00128 V = iter_bce->coordinate(grid);
00129 iter_bce->varM(grid)[number_cell_variable] =
00130 input_object.Interpolate_value(V);
00131 }
00132 }
00133
00134
00135
00136 void Cell_Variable::operator=(double x) {
00137 Test_init();
00138
00139
00140 for(iter_ice=grid->Start_P_interior_cell(level);
00141 iter_ice!=NULL;iter_ice=iter_ice->Next()) {
00142 iter_ice->varM(grid)[number_cell_variable] = x;
00143 }
00144
00145 for(iter_bce=grid->Start_P_boundary_tet(level);
00146 iter_bce!=NULL;iter_bce=iter_bce->Next()) {
00147 iter_bce->varM(grid)[number_cell_variable] = x;
00148 }
00149 }
00150
00151 double Maximum(Cell_Variable& v) {
00152 v.Test_init();
00153 double maxi,x;
00154 Grid *grid;
00155 int number_cell_variable;
00156 P_interior_cell *iter_ice;
00157 P_boundary_tet *iter_bce;
00158 number_cell_variable = v.Number_cell_variable();
00159
00160 grid = v.Give_grid();
00161 maxi = grid->Start_P_interior_cell(
00162 v.Level())->varM(grid)[number_cell_variable];
00163
00164 for(iter_ice=grid->Start_P_interior_cell(v.Level());
00165 iter_ice!=NULL;iter_ice=iter_ice->Next()) {
00166 x = iter_ice->varM(grid)[number_cell_variable];
00167 if(maxi<x) maxi=x;
00168 }
00169
00170 for(iter_bce=grid->Start_P_boundary_tet(v.Level());
00171 iter_bce!=NULL;iter_bce=iter_bce->Next()) {
00172 x = iter_bce->varM(grid)[number_cell_variable];
00173 if(maxi<x) maxi=x;
00174 }
00175 return maxi;
00176 }
00177
00178 double L_infty(Cell_Variable& v) {
00179 v.Test_init();
00180 double maxi,x;
00181 Grid *grid;
00182 int number_cell_variable;
00183 P_interior_cell *iter_ice;
00184 P_boundary_tet *iter_bce;
00185 number_cell_variable = v.Number_cell_variable();
00186
00187 grid = v.Give_grid();
00188 maxi = 0.0;
00189
00190 for(iter_ice=grid->Start_P_interior_cell(v.Level());
00191 iter_ice!=NULL;iter_ice=iter_ice->Next()) {
00192 x = ABS(iter_ice->varM(grid)[number_cell_variable]);
00193 if(maxi<x) maxi=x;
00194 }
00195
00196 for(iter_bce=grid->Start_P_boundary_tet(v.Level());
00197 iter_bce!=NULL;iter_bce=iter_bce->Next()) {
00198 x = ABS(iter_bce->varM(grid)[number_cell_variable]);
00199 if(maxi<x) maxi=x;
00200 }
00201 return maxi;
00202 }
00203
00204 double Minimum(Cell_Variable& v) {
00205 v.Test_init();
00206 double mini,x;
00207 Grid *grid;
00208 int number_cell_variable;
00209 P_interior_cell *iter_ice;
00210 P_boundary_tet *iter_bce;
00211 number_cell_variable = v.Number_cell_variable();
00212
00213 grid = v.Give_grid();
00214 mini = grid->Start_P_interior_cell(
00215 v.Level())->varM(grid)[number_cell_variable];
00216
00217 for(iter_ice=grid->Start_P_interior_cell(v.Level());
00218 iter_ice!=NULL;iter_ice=iter_ice->Next()) {
00219 x = iter_ice->varM(grid)[number_cell_variable];
00220 if(mini>x) mini=x;
00221 }
00222
00223 for(iter_bce=grid->Start_P_boundary_tet(v.Level());
00224 iter_bce!=NULL;iter_bce=iter_bce->Next()) {
00225 x = iter_bce->varM(grid)[number_cell_variable];
00226 if(mini>x) mini=x;
00227 }
00228 return mini;
00229 }
00230
00231
00232
00233
00234
00235
00236 #define Macro_set_expressions_for_cells(insertA,insertB) \
00237 CoExpr<CoExprBinOp<CoExprLIT, CoExprVAR, insertA> > \
00238 insertB(double x, Cell_Variable& a) \
00239 { \
00240 typedef CoExprBinOp<CoExprLIT, CoExprVAR, insertA> ExprT; \
00241 return CoExpr<ExprT>(ExprT(CoExprLIT(x),CoExprVAR(a))); \
00242 } \
00243 CoExpr<CoExprBinOp<CoExprVAR, CoExprLIT, insertA> > \
00244 insertB(Cell_Variable& a,double x) \
00245 { \
00246 typedef CoExprBinOp<CoExprVAR, CoExprLIT, insertA> ExprT; \
00247 return CoExpr<ExprT>(ExprT(CoExprVAR(a),CoExprLIT(x))); \
00248 } \
00249 CoExpr<CoExprBinOp<CoExprVAR, CoExprVAR, insertA> > \
00250 insertB(Cell_Variable& b, Cell_Variable& a) \
00251 { \
00252 typedef CoExprBinOp<CoExprVAR, CoExprVAR, insertA> ExprT; \
00253 return CoExpr<ExprT>(ExprT(CoExprVAR(b),CoExprVAR(a))); \
00254 }
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265 Macro_set_expressions_for_cells(CoApMul,operator*)
00266 Macro_set_expressions_for_cells(CoApAdd,operator+)
00267 Macro_set_expressions_for_cells(CoApDivide,operator/)
00268 Macro_set_expressions_for_cells(CoApSub,operator-)