POST example#
Description#
This post computation generates a field of the tresca values for a given tensor variable.
Code Listing#
#include <Utility.h>
#include <Post_eigen.h>
#include <Post_simple.h>
ZCLASS2 POST_TRESCA :public POST_SIMPLE {
PTR<POST_EIGEN2> lp_eigen;
void set_eigen2();
protected :
int tsz;
public :
POST_TRESCA();
virtual ~POST_TRESCA();
virtual MODIFY_INFO_RECORD* get_modify_info_record();
virtual bool verify_info();
virtual void input_i_need(int,ARRAY<STRING>&);
virtual void output_i_give(bool&,ARRAY<STRING>&);
virtual void compute(const ARRAY<VECTOR>&,ARRAY<VECTOR>&);
};
DECLARE_OBJECT(LOCAL_POST_COMPUTATION,POST_TRESCA,tresca);
POST_TRESCA::POST_TRESCA()
{ class_name="tresca";
}
POST_TRESCA::~POST_TRESCA() { }
MODIFY_INFO_RECORD* POST_TRESCA::get_modify_info_record()
{ MODIFY_INFO_RECORD* ret = POST_SIMPLE::get_modify_info_record();
if (!lp_eigen()) lp_eigen = (POST_EIGEN2*)Create_object(LOCAL_POST_COMPUTATION, "eigen2");
MODIFY_INFO_RECORD* ret_eigen = new MODIFY_INFO_RECORD;
ret_eigen->ptr=(void*)lp_eigen; ret_eigen->info="eigen2";
ret->commands.add(ret_eigen);
return ret;
}
bool POST_TRESCA::verify_info()
{ bool ret = POST_SIMPLE::verify_info();
lp_eigen->set_post_simple(var_name, scalar, diag);
return ret;
}
void POST_TRESCA::input_i_need(int dim,ARRAY<STRING>& ret)
{ tsz=TENSOR2::give_symmetric_size(dim);
lp_eigen->input_i_need(dim, ret);
}
void POST_TRESCA::output_i_give(bool& every_card,ARRAY<STRING>& ret)
{ every_card=TRUE;
ret.resize(1); ret[0]=var_name+"tresca";
}
void POST_TRESCA::compute(const ARRAY<VECTOR>& in,ARRAY<VECTOR>& out)
{
ARRAY<VECTOR> eigen_out(!in);
for( int i=0;i<!in;i++) eigen_out[i].resize(3);
lp_eigen->compute(in,eigen_out);
for(int icard=0;icard<!in;icard++)
out[icard][0]=eigen_out[icard][0]-eigen_out[icard][2];
}