Go to the documentation of this file.00001 #include "PDEOptIterCallbackBase.hpp"
00002 #include "PDEOptPDEConstrainedObjBase.hpp"
00003 #include "Sundance.hpp"
00004
00005 namespace Sundance
00006 {
00007
00008 DefaultIterCallback::DefaultIterCallback(
00009 const std::string& filename,
00010 const std::string& type,
00011 int frequency)
00012 : type_(type), filename_(filename), frequency_(frequency)
00013 {}
00014
00015 void DefaultIterCallback::call(const PDEConstrainedObjBase* obj,
00016 int iter) const
00017 {
00018 if (iter % frequency_ != 0) return;
00019
00020 string name = filename_ + "-iter-" + Teuchos::toString(iter);
00021
00022 FieldWriter writer;
00023
00024 if (type_=="VTK")
00025 {
00026 writer = new VTKWriter(name);
00027 }
00028 else if (type_=="Exodus")
00029 {
00030 writer = new ExodusWriter(name);
00031 }
00032 else if (type_=="Matlab")
00033 {
00034 writer = new MatlabWriter(name);
00035 }
00036 else
00037 {
00038 TEUCHOS_TEST_FOR_EXCEPTION(true, RuntimeError,
00039 "writer type [" << type_ << "] not defined");
00040 }
00041
00042 Array<Expr> state = obj->stateVars();
00043 Array<Expr> adjoint = obj->adjointVars();
00044 Expr design = obj->designVar();
00045
00046 writer.addMesh(obj->mesh());
00047
00048 for (int b=0; b<state.size(); b++)
00049 {
00050 for (int i=0; i<state[b].size(); i++)
00051 {
00052 string tag = "[" + Teuchos::toString(b)
00053 + "][" + Teuchos::toString(i) + "]";
00054 writer.addField("state" + tag, new ExprFieldWrapper(state[b][i]));
00055 writer.addField("adjoint" + tag, new ExprFieldWrapper(adjoint[b][i]));
00056 }
00057 }
00058
00059 for (int i=0; i<design.size(); i++)
00060 {
00061 string tag = "[" + Teuchos::toString(i) + "]";
00062 writer.addField("design" + tag, new ExprFieldWrapper(design[i]));
00063 }
00064
00065 writer.write();
00066 }
00067
00068
00069 }