Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

src/expde/extemp/operav.cc

Go to the documentation of this file.
00001 //    expde: expression templates for partial differential equations.
00002 //    Copyright (C) 2001  Christoph Pflaum
00003 //    This program is free software; you can redistribute it and/or modify
00004 //    it under the terms of the GNU General Public License as published by
00005 //    the Free Software Foundation; either version 2 of the License, or
00006 //    (at your option) any later version.
00007 //
00008 //    This program is distributed in the hope that it will be useful,
00009 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00011 //    GNU General Public License for more details.
00012 //
00013 //                 SEE  Notice1.doc made by 
00014 //                 LAWRENCE LIVERMORE NATIONAL LABORATORY
00015 //
00016 
00017 // ------------------------------------------------------------
00018 // operatorv.cc
00019 //
00020 // ------------------------------------------------------------
00021 
00022 // Include level 0:
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 // Include level 0:
00037 #include "../parser.h"
00038 
00039 // Include level 1:
00040 #include "../paramete.h"
00041 #include "../abbrevi.h"
00042 #include "../math_lib/math_lib.h"
00043 
00044 // Include level 2:
00045 #include "../basic/basic.h"
00046 
00047 // Include level 3:
00048 #include "../domain/domain.h"
00049 
00050 // Include level 4:
00051 #include "../formulas/boundy.h"
00052 #include "../formulas/loc_sten.h"
00053 #include "../formulas/diffop.h"
00054 #include "../formulas/diffopc.h"
00055 #include "../formulas/diffopv.h"
00056 
00057 // Include level 5:
00058 #include "../grid/gpar.h"
00059 #include "../grid/parallel.h"
00060 #include "../grid/mgcoeff.h"
00061 #include "../grid/sto_man.h"
00062 #include "../grid/gridbase.h"
00063 #include "../grid/grid.h"
00064 #include "../grid/input.h"
00065 
00066 // Include level 5.1
00067 #include "../evpar/evpar.h"
00068 
00069 
00070 
00071 // Include level 6:
00072 #include "variable.h"
00073 #include "opera.h"
00074 #include "operav.h"
00075 //#include "extemp/mg_op.h"
00076 #include "sim.h"
00077 #include "res_op.h"
00078 //#include "extemp/res_opv.h"
00079 //#include "extemp/extra.h"
00080 #include "array.h"
00081 
00082 
00083 
00084 
00085 
00087                // 1.: member functions of operatorv.h
00089 
00090 
00091 
00092 /* Unary operators */
00093 // Laplace
00094 #define Macro_operator_var_implement(insertA,insertB) \
00095 DExpr<DVarDiff_17S_Op_var< insertA , insertB ,laplace_FE_variable> > \
00096 Laplace_FE_var(insertA a, insertB v) \
00097 { \
00098   typedef DVarDiff_17S_Op_var< insertA , insertB ,laplace_FE_variable> ExprT; \
00099   return DExpr<ExprT>(ExprT(a,v)); \
00100 } \
00101 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dxdx_FE_variable> > \
00102 DxDx_FE_var(insertA a, insertB v) \
00103 { \
00104   typedef DVarDiff_17S_Op_var< insertA, insertB, dxdx_FE_variable> ExprT; \
00105   return DExpr<ExprT>(ExprT(a,v)); \
00106 } \
00107 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dydy_FE_variable> > \
00108 DyDy_FE_var(insertA a, insertB v) \
00109 { \
00110   typedef DVarDiff_17S_Op_var< insertA, insertB, dydy_FE_variable> ExprT; \
00111   return DExpr<ExprT>(ExprT(a,v)); \
00112 } \
00113 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dzdz_FE_variable> > \
00114 DzDz_FE_var(insertA a, insertB v) \
00115 { \
00116   typedef DVarDiff_17S_Op_var< insertA, insertB, dzdz_FE_variable> ExprT; \
00117   return DExpr<ExprT>(ExprT(a,v)); \
00118 } \
00119 DExpr<DVarDiff_17S_Op_var< insertA, insertB, helm_FE_variable> > \
00120 Helm_FE_var(insertA a, insertB v) \
00121 { \
00122   typedef DVarDiff_17S_Op_var< insertA, insertB, helm_FE_variable> ExprT; \
00123   return DExpr<ExprT>(ExprT(a,v)); \
00124 } \
00125 /* ///////////////////////// \
00126 // Nichsymmetrische Terme \
00128 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dxdy_FE_variable> > \
00129 DxDy_FE_var(insertA a, insertB v) \
00130 { \
00131   typedef DVarDiff_17S_Op_var< insertA, insertB, dxdy_FE_variable> ExprT; \
00132   return DExpr<ExprT>(ExprT(a,v)); \
00133 } \
00134 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dydx_FE_variable> > \
00135 DyDx_FE_var(insertA a, insertB v) \
00136 { \
00137   typedef DVarDiff_17S_Op_var< insertA, insertB, dydx_FE_variable> ExprT; \
00138   return DExpr<ExprT>(ExprT(a,v)); \
00139 } \
00140 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dxdz_FE_variable> > \
00141 DxDz_FE_var(insertA a, insertB v) \
00142 { \
00143   typedef DVarDiff_17S_Op_var< insertA, insertB, dxdz_FE_variable> ExprT; \
00144   return DExpr<ExprT>(ExprT(a,v)); \
00145 } \
00146 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dzdx_FE_variable> > \
00147 DzDx_FE_var(insertA a, insertB v) \
00148 { \
00149   typedef DVarDiff_17S_Op_var< insertA, insertB, dzdx_FE_variable> ExprT; \
00150   return DExpr<ExprT>(ExprT(a,v)); \
00151 } \
00152 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dydz_FE_variable> > \
00153 DyDz_FE_var(insertA a, insertB v) \
00154 { \
00155   typedef DVarDiff_17S_Op_var< insertA, insertB, dydz_FE_variable> ExprT; \
00156   return DExpr<ExprT>(ExprT(a,v)); \
00157 } \
00158 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dzdy_FE_variable> > \
00159 DzDy_FE_var(insertA a, insertB v) \
00160 { \
00161   typedef DVarDiff_17S_Op_var< insertA, insertB, dzdy_FE_variable> ExprT; \
00162   return DExpr<ExprT>(ExprT(a,v)); \
00163 } \
00164 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dxhelm_FE_variable> > \
00165 DX_FE_var(insertA a, insertB v) \
00166 { \
00167   typedef DVarDiff_17S_Op_var< insertA, insertB, dxhelm_FE_variable> ExprT; \
00168   return DExpr<ExprT>(ExprT(a,v)); \
00169 } \
00170 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dyhelm_FE_variable> > \
00171 DY_FE_var(insertA a, insertB v) \
00172 { \
00173   typedef DVarDiff_17S_Op_var< insertA, insertB, dyhelm_FE_variable> ExprT; \
00174   return DExpr<ExprT>(ExprT(a,v)); \
00175 } \
00176 DExpr<DVarDiff_17S_Op_var< insertA, insertB, dzhelm_FE_variable> > \
00177 DZ_FE_var(insertA a, insertB v) \
00178 { \
00179   typedef DVarDiff_17S_Op_var< insertA, insertB, dzhelm_FE_variable> ExprT; \
00180   return DExpr<ExprT>(ExprT(a,v)); \
00181 } \
00182 DExpr<DVarDiff_17S_Op_var< insertA, insertB, helmdx_FE_variable> > \
00183 DX_FE_var_t(insertA a, insertB v) \
00184 { \
00185   typedef DVarDiff_17S_Op_var< insertA, insertB, helmdx_FE_variable> ExprT; \
00186   return DExpr<ExprT>(ExprT(a,v)); \
00187 } \
00188 DExpr<DVarDiff_17S_Op_var< insertA, insertB, helmdy_FE_variable> > \
00189 DY_FE_var_t(insertA a, insertB v) \
00190 { \
00191   typedef DVarDiff_17S_Op_var< insertA, insertB, helmdy_FE_variable> ExprT; \
00192   return DExpr<ExprT>(ExprT(a,v)); \
00193 } \
00194 DExpr<DVarDiff_17S_Op_var< insertA, insertB, helmdz_FE_variable> > \
00195 DZ_FE_var_t(insertA a, insertB v) \
00196 { \
00197   typedef DVarDiff_17S_Op_var< insertA, insertB, helmdz_FE_variable> ExprT; \
00198   return DExpr<ExprT>(ExprT(a,v)); \
00199 } \
00200 /* ///////////////////////// \
00201 // Rand-operatoren \
00203 DExpr<DVarDiff_17S_Op_var< insertA, insertB, L2boundary_variable> > \
00204 Int_boundary_var(insertA a, insertB v) \
00205 { \
00206   typedef DVarDiff_17S_Op_var< insertA, insertB, L2boundary_variable> ExprT; \
00207   return DExpr<ExprT>(ExprT(a,v)); \
00208 }
00209 
00210 Macro_operator_var_implement(Variable,Variable);
00211 Macro_operator_var_implement(DExpr<DExprVAR_ARR>,DExpr<DExprVAR_ARR>);
00212 //Macro_operator_var_implement(DExpr<DExprVAR_ARR>,Variable);
00213 //Macro_operator_var_implement(Variable,DExpr<DExprVAR_ARR>);
00214 
00215 /* Unary operators */
00216 
00217 // Laplace
00218 DExpr<DiagonalDiff_Op_var<laplace_FE_variable> >
00219 Diag_Laplace_FE_var(Variable a)
00220 {
00221   typedef DiagonalDiff_Op_var<laplace_FE_variable> ExprT;
00222   return DExpr<ExprT>(ExprT(a));
00223 }
00224 
00225 // DxDx
00226 DExpr<DiagonalDiff_Op_var<dxdx_FE_variable> >
00227 Diag_DxDx_FE_var(Variable a)
00228 {
00229   typedef DiagonalDiff_Op_var<dxdx_FE_variable> ExprT;
00230   return DExpr<ExprT>(ExprT(a));
00231 }
00232 
00233 // DyDy
00234 DExpr<DiagonalDiff_Op_var<dydy_FE_variable> >
00235 Diag_DyDy_FE_var(Variable a)
00236 {
00237   typedef DiagonalDiff_Op_var<dydy_FE_variable> ExprT;
00238   return DExpr<ExprT>(ExprT(a));
00239 }
00240 
00241 // DzDz
00242 DExpr<DiagonalDiff_Op_var<dzdz_FE_variable> >
00243 Diag_DzDz_FE_var(Variable a)
00244 {
00245   typedef DiagonalDiff_Op_var<dzdz_FE_variable> ExprT;
00246   return DExpr<ExprT>(ExprT(a));
00247 }
00248 
00249 // Helm
00250 DExpr<DiagonalDiff_Op_var<helm_FE_variable> >
00251 Diag_Helm_FE_var(Variable a)
00252 {
00253   typedef DiagonalDiff_Op_var<helm_FE_variable> ExprT;
00254   return DExpr<ExprT>(ExprT(a));
00255 }
00256 
00258 // Nichsymmetrische Terme
00260 
00261 // DxDy
00262 DExpr<DiagonalDiff_Op_var<dxdy_FE_variable> >
00263 Diag_DxDy_FE_var(Variable a)
00264 {
00265   typedef DiagonalDiff_Op_var<dxdy_FE_variable> ExprT;
00266   return DExpr<ExprT>(ExprT(a));
00267 }
00268 
00269 // DyDx
00270 DExpr<DiagonalDiff_Op_var<dydx_FE_variable> >
00271 Diag_DyDx_FE_var(Variable a)
00272 {
00273   typedef DiagonalDiff_Op_var<dydx_FE_variable> ExprT;
00274   return DExpr<ExprT>(ExprT(a));
00275 }
00276 
00277 
00278 // DxDz
00279 DExpr<DiagonalDiff_Op_var<dxdz_FE_variable> >
00280 Diag_DxDz_FE_var(Variable a)
00281 {
00282   typedef DiagonalDiff_Op_var<dxdz_FE_variable> ExprT;
00283   return DExpr<ExprT>(ExprT(a));
00284 }
00285 
00286 // DzDx
00287 DExpr<DiagonalDiff_Op_var<dzdx_FE_variable> >
00288 Diag_DzDx_FE_var(Variable a)
00289 {
00290   typedef DiagonalDiff_Op_var<dzdx_FE_variable> ExprT;
00291   return DExpr<ExprT>(ExprT(a));
00292 }
00293 
00294 // DyDz
00295 DExpr<DiagonalDiff_Op_var<dydz_FE_variable> >
00296 Diag_DyDz_FE_var(Variable a)
00297 {
00298   typedef DiagonalDiff_Op_var<dydz_FE_variable> ExprT;
00299   return DExpr<ExprT>(ExprT(a));
00300 }
00301 
00302 // DzDy
00303 DExpr<DiagonalDiff_Op_var<dzdy_FE_variable> >
00304 Diag_DzDy_FE_var(Variable a)
00305 {
00306   typedef DiagonalDiff_Op_var<dzdy_FE_variable> ExprT;
00307   return DExpr<ExprT>(ExprT(a));
00308 }
00309 
00310 // DX
00311 DExpr<DiagonalDiff_Op_var<dxhelm_FE_variable> >
00312 Diag_DX_FE_var(Variable a)
00313 {
00314   typedef DiagonalDiff_Op_var<dxhelm_FE_variable> ExprT;
00315   return DExpr<ExprT>(ExprT(a));
00316 }
00317 
00318 // DY
00319 DExpr<DiagonalDiff_Op_var<dyhelm_FE_variable> >
00320 Diag_DY_FE_var(Variable a)
00321 {
00322   typedef DiagonalDiff_Op_var<dyhelm_FE_variable> ExprT;
00323   return DExpr<ExprT>(ExprT(a));
00324 }
00325 
00326 // DZ
00327 DExpr<DiagonalDiff_Op_var<dzhelm_FE_variable> >
00328 Diag_DZ_FE_var(Variable a)
00329 {
00330   typedef DiagonalDiff_Op_var<dzhelm_FE_variable> ExprT;
00331   return DExpr<ExprT>(ExprT(a));
00332 }
00333 
00334 // DX
00335 DExpr<DiagonalDiff_Op_var<helmdx_FE_variable> >
00336 Diag_DX_FE_var_t(Variable a)
00337 {
00338   typedef DiagonalDiff_Op_var<helmdx_FE_variable> ExprT;
00339   return DExpr<ExprT>(ExprT(a));
00340 }
00341 
00342 // DY
00343 DExpr<DiagonalDiff_Op_var<helmdy_FE_variable> >
00344 Diag_DY_FE_var_t(Variable a)
00345 {
00346   typedef DiagonalDiff_Op_var<helmdy_FE_variable> ExprT;
00347   return DExpr<ExprT>(ExprT(a));
00348 }
00349 
00350 // DZ
00351 DExpr<DiagonalDiff_Op_var<helmdz_FE_variable> >
00352 Diag_DZ_FE_var_t(Variable a)
00353 {
00354   typedef DiagonalDiff_Op_var<helmdz_FE_variable> ExprT;
00355   return DExpr<ExprT>(ExprT(a));
00356 }
00357 
00358 
00360 // Rand-operatoren
00362 
00363 DExpr<DiagonalDiff_Op_var<L2boundary_variable> >
00364 Diag_Int_boundary_var(Variable a)
00365 {
00366   typedef DiagonalDiff_Op_var<L2boundary_variable> ExprT;
00367   return DExpr<ExprT>(ExprT(a));
00368 }
00369 
00370 
00371 
00372 
00373 
00374 

Generated on Fri Nov 2 01:25:57 2007 for IPPL by doxygen 1.3.5