PDEOptIterCallbackBase.cpp
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 }

Site Contact