Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include "SundanceUnknownFunctionStub.hpp"
00043 #include "SundanceUnknownFuncElement.hpp"
00044 #include "SundanceSpectralBasis.hpp"
00045 #include "SundanceSpectralExpr.hpp"
00046
00047
00048 using namespace Sundance;
00049 using namespace Sundance;
00050
00051 using namespace Sundance;
00052 using namespace Teuchos;
00053
00054
00055
00056 UnknownFunctionStub::UnknownFunctionStub(const std::string& name,
00057 int tensorOrder,
00058 int dim,
00059 const RCP<const UnknownFuncDataStub>& data)
00060 : SymbolicFunc(makeFuncID(tensorOrder),
00061 rcp_dynamic_cast<const CommonFuncDataStub>(data)), data_(data)
00062 {
00063 FunctionIdentifier myFid = fid();
00064 if (tensorOrder==0)
00065 {
00066 Expr u = new UnknownFuncElement(data, name, "", myFid);
00067 append(u);
00068 }
00069 else if (tensorOrder==1)
00070 {
00071 for (int d=0; d<dim; d++)
00072 {
00073 std::string suffix="[" + Teuchos::toString(d) + "]";
00074 FunctionIdentifier fid = myFid.createComponent(d);
00075 append(new UnknownFuncElement(data, name, suffix, fid));
00076 }
00077 }
00078 else
00079 {
00080 TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "tensor order = " << tensorOrder
00081 << " not supported");
00082 }
00083 }
00084
00085
00086
00087 UnknownFunctionStub::UnknownFunctionStub(const std::string& name,
00088 const SpectralBasis& sbasis, int tensorOrder, int dim,
00089 const RCP<const UnknownFuncDataStub>& data)
00090 : SymbolicFunc(FunctionIdentifier(),
00091 rcp_dynamic_cast<const CommonFuncDataStub>(data)), data_(data)
00092 {
00093 Array<FunctionIdentifier> cFid(sbasis.nterms());
00094
00095 for (int n=0; n<sbasis.nterms(); n++)
00096 {
00097 cFid[n] = makeFuncID(tensorOrder);
00098 }
00099
00100 if (tensorOrder==0 || dim==1)
00101 {
00102 Array<Expr> coeffs(sbasis.nterms());
00103 for (int n=0; n<sbasis.nterms(); n++)
00104 {
00105 std::string suffix="";
00106 if (sbasis.nterms()>1) suffix = "[" + Teuchos::toString(n) + "]";
00107 coeffs[n] = new UnknownFuncElement(data, name, suffix, cFid[n]);
00108 }
00109 append(new SpectralExpr(sbasis, coeffs));
00110 }
00111 else if (tensorOrder==1)
00112 {
00113 for (int d=0; d<dim; d++)
00114 {
00115 std::string suffix="[" + Teuchos::toString(d) + "]";
00116 Array<Expr> coeffs(sbasis.nterms());
00117 for (int n=0; n<sbasis.nterms(); n++)
00118 {
00119 FunctionIdentifier fid = cFid[n].createComponent(d);
00120 if (sbasis.nterms()>1) suffix += "[" + Teuchos::toString(n) + "]";
00121 coeffs[n]= new UnknownFuncElement(data, name, suffix, fid);
00122 }
00123 append(new SpectralExpr(sbasis, coeffs));
00124 }
00125 }
00126 else
00127 {
00128 TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "tensor order = " << tensorOrder
00129 << " not supported");
00130 }
00131 }
00132
00133