00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef MECHSYS_COUPLEDELASTIC_H
00023 #define MECHSYS_COUPLEDELASTIC_H
00024
00025 #include "models/coupled/genericc.h"
00026 #include "models/linearelastic.h"
00027 #include "models/flow/linearflow.h"
00028
00029 class CElastic : public GenericC<LinearElastic, LinearFlow>
00030 {
00031 public:
00032
00033 CElastic(Array<REAL> const & Prms, Array<REAL> const & IniData);
00034
00035
00036 String Name() const { return "CElastic"; };
00037
00038 };
00039
00040
00042
00043
00044 inline CElastic::CElastic(Array<REAL> const & Prms, Array<REAL> const & IniData)
00045 {
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 const size_t n_equi_prms = LinearElastic::NPRMS;
00056 const size_t n_flow_prms = LinearFlow ::NPRMS;
00057 const size_t n_prms = n_equi_prms+n_flow_prms;
00058 if (Prms.size()!=n_prms)
00059 throw new Fatal(_("CElastic::Constructor: The number of parameters (%d) is incorrect. It must be equal to %d"), Prms.size(), n_prms);
00060
00061
00062 Array<REAL> equi_prms; equi_prms.resize(n_equi_prms); for (size_t i=0; i<n_equi_prms; ++i) equi_prms[i]=Prms[i];
00063 Array<REAL> flow_prms; flow_prms.resize(n_flow_prms); for (size_t i=0; i<n_flow_prms; ++i) flow_prms[i]=Prms[i+n_equi_prms];
00064
00065
00066
00067
00068 const size_t n_equi_idat = LinearElastic::NIDAT;
00069 const size_t n_flow_idat = LinearFlow ::NIDAT;
00070 const size_t n_idat = n_equi_idat+n_flow_idat;
00071 if (IniData.size()!=n_idat)
00072 throw new Fatal(_("CElastic::Constructor: The number of initial data (%d) is not sufficiet (it must be equal to %d)"), IniData.size(), n_idat);
00073
00074
00075 Array<REAL> equi_idat; equi_idat.resize(n_equi_idat); for (size_t i=0; i<n_equi_idat; ++i) equi_idat[i]=IniData[i];
00076 Array<REAL> flow_idat; flow_idat.resize(n_flow_idat); for (size_t i=0; i<n_flow_idat; ++i) flow_idat[i]=IniData[i+n_equi_idat];
00077
00078
00079
00080
00081 AllocateSubModels(equi_prms, equi_idat, flow_prms, flow_idat);
00082
00083 }
00084
00085
00087
00088
00089 CoupledModel * CElasticMaker(Array<REAL> const & Prms, Array<REAL> const & IniData)
00090 {
00091 return new CElastic(Prms, IniData);
00092 }
00093
00094
00095 int CElasticRegister()
00096 {
00097 CoupledModelFactory["CElastic"] = CElasticMaker;
00098 return 0;
00099 }
00100
00101
00102 int __CElastic_dummy_int = CElasticRegister();
00103
00104
00105
00106 #endif // MECHSYS_COUPLEDELASTIC_H
00107
00108