101 C_INT slow = dim - fast;
138 for (i = 0; i < dim; ++i)
139 Xconc[i] =
mY[i] * number2conc;
141 for (i = 0; i < dim; i++)
145 Xconc_initial.
resize(dim);
147 for (i = 0; i < dim; ++i)
148 Xconc_initial[i] =
mY_initial[i] * number2conc;
151 for (i = 0; i < dim; i++)
152 for (j = 0; j < dim; j++)
165 for (i = 0; i < dim; i++)
166 for (j = 0; j < dim; j++)
172 for (i = 0; i < dim; i++)
173 for (j = 0; j < dim; j++)
183 C_INT info_schur = 0;
186 C_INT failed_while = 0;
211 orthog_prove.
resize(dim, dim);
229 for (i = 0; i < dim; i++)
230 for (j = 0; j < dim; j++)
241 if (
mR(dim - 1, dim - 1) ==
mR(dim - 2 , dim - 2))
250 if (
mR(dim - 1, dim - 1) >= 0)
268 if (
mR(dim - fast2, dim - fast2) >= 0)
293 if ((failed == 1) || (failed_while == 1))
300 if ((fast >= 1) && (
mR(slow - 1, slow - 1) ==
mR(slow , slow)))
313 for (i = 0; i < dim; i++)
314 for (j = 0; j < dim; j++)
316 mTd(i, j) =
mQ(i, j);
344 for (j = 0; j < dim; j++)
347 for (i = 0; i < dim ; i ++)
348 for (j = 0; j < dim; j++)
349 if (
mVslow(dim - i - 1, j) > 70)
356 number = index_metab[k];
367 for (j = 0; j < dim; j++)
373 for (j = 0; j < dim; j++)
396 for (i = 0; i < dim; i ++)
400 x_relax[i] = x_help[i];
411 eps = 1 / fabs(
mR(dim - k - 1 , dim - k - 1));
415 for (i = 0; i < dim; i++)
421 re[i] = fabs(dxdt_relax[i] - dxdt[i]);
427 for (i = 0; i < dim; i++)
439 number = index_metab[k];
472 for (i = 0; i < dim - 1; i++)
476 for (j = i + 1; j < dim; j++)
478 if (reval[j] <= reval[min])
483 tmp_ind = index[
min];
484 reval[
min] = reval[i];
485 index[
min] = index[i];
499 C_INT i, j, info_newton;
501 C_INT fast = dim - slow;
522 eps = 1 / fabs(
mR(dim - fast , dim - fast));
527 for (i = 0; i < dim; i++)
533 for (i = 0; i < dim; i++)
540 for (i = 0; i < dim; i++)
541 index_temp[i] = index[i];
543 for (i = 0; i < dim; i++)
545 index[i] = index_temp[dim - i - 1];
553 for (j = 0; j < dim; j++)
559 for (j = 0; j < dim; j++)
580 for (i = 0; i < dim; i++)
593 for (i = 0; i < dim; i++)
595 re[i] = fabs(dxdt_relax[i] - dxdt[i]);
598 for (j = 0; j < fast; j ++)
603 for (i = 0; i < dim; i++)
617 C_INT i, j, k, m, iter, iterations, itermax;
618 C_INT nrhs, ok, fast, flag_newton;
631 s_22_array.
resize(fast * fast);
652 Jac_fast.
resize(fast, fast);
670 for (i = 0; i < fast; i++)
674 for (j = 0; j < fast; j++)
678 if ((m > -1) & (k > -1))
688 for (i = 0; i < dim; i++)
691 for (i = 0; i < fast; i++)
692 for (j = 0; j < fast; j++)
693 s_22_array[j + fast * i] = Jac_fast(j, i);
695 for (i = 0; i < dim; i++)
708 for (i = 0; i < dim; i++)
709 y_newton[i] = y_newton[i] + d_yf[i];
713 for (i = 0; i < fast; i++)
716 gf_newton[i] = -1. * dydt_newton[j];
789 for (i = 0; i < fast; i++)
792 for (j = 0; j < fast; j++)
796 for (i = 0; i < dim; i ++)
799 d_yf[k] = gf_newton[j];
805 for (i = 0; i < fast; i++)
807 gf_newton[i] = fabs(gf_newton[i]);
809 if (err < gf_newton[i])
813 iterations = iterations + 1;
835 for (i = 0; i < dim; i++)
850 C_INT i, iter, itermax, flag_newton;
882 for (i = 0; i < dim; ++i)
898 y_newton[metabolite_number] = y_newton[metabolite_number] + d_y;
902 d_y = - 1 / deriv * dydt[metabolite_number];
908 y_consistent = y_newton[metabolite_number];
973 name =
"Contribution of species to modes";
988 name =
"Modes distribution for species";
1003 name =
"Slow space";
1018 name =
"Fast space";
1043 if (step == 0)
return false;
1054 std::stringstream sstr;
1109 sstr << dim - mVec_SlowModes[
step];
1136 std::ostream & os = *ostream;
1138 C_INT i, j, istep = 0;
1149 for (istep = 0; istep < stepNumber; istep++)
1153 os <<
"**************** Time step " << istep + 1 <<
" ************************** " << std::endl;
1157 os <<
"Contribution of species to modes" << std::endl;
1159 os <<
"Rows : contribution to mode (TS - corresponding timescale)" << std::endl;
1160 os <<
"Columns: species ";
1178 os << timeScale <<
"): ";
1188 os <<
"Modes distribution for species" << std::endl;
1190 os <<
"Rows : Mode distribution for each species" << std::endl;
1191 os <<
"Columns: Modes (TS - corresponding timescale) ";
1203 os << timeScale <<
") ";
1220 os <<
"Slow space" << std::endl;
1222 os <<
"Rows : Species" << std::endl;
1223 os <<
"Column: Contribution to slow space ";
1229 os <<
mData.
dim - mVec_SlowModes[istep];
1242 os <<
"Fast space" << std::endl;
1244 os <<
"Rows : Species" << std::endl;
1245 os <<
"Column: Contribution to fast space ";
1248 os << mVec_SlowModes[istep];
1251 os <<
mData.
dim - mVec_SlowModes[istep];
CCopasiDataModel * getObjectDataModel()
std::vector< CMatrix< C_FLOAT64 > > mVec_mVslowMetab
int dgesv_(integer *n, integer *nrhs, doublereal *a, integer *lda, integer *ipiv, doublereal *b, integer *ldb, integer *info)
std::vector< C_FLOAT64 > mCurrentTime
CMatrix< C_FLOAT64 > mVslowPrint
const std::string & getObjectName() const
CMatrix< C_FLOAT64 > mVslow
CMatrix< C_FLOAT64 > mTdInverse
CVector< C_FLOAT64 > mY_initial
void evalsort(C_FLOAT64 *reval, C_INT *index, const C_INT &dim_x)
void updateSimulatedValues(const bool &updateMoieties)
void calculateJacobianX(CMatrix< C_FLOAT64 > &jacobianX, const C_FLOAT64 &derivationFactor, const C_FLOAT64 &resolution)
std::map< std::string, CArrayAnnotation * > mapTableToName
CVector< C_FLOAT64 > mVslow_space
void initializeIntegrationsParameter()
CMatrix< C_FLOAT64 > mTd_save
void integrationStep(const double &deltaT)
void resize(size_t size, const bool ©=false)
void setDescription(const std::string &s)
CArrayAnnotation * pVslowPrintAnn
void deuflhard_metab(C_INT &slow, C_INT &info)
std::vector< CMatrix< C_FLOAT64 > > mVec_mVslow
virtual void step(const double &deltaT)
virtual void initializeParameter()
CMatrix< C_FLOAT64 > mTdInverse_save
void mat_anal_mod_space(C_INT &slow)
CMatrix< C_FLOAT64 > mVfastSpacePrint
CVector< C_FLOAT64 > mVfast_space
void setAnnotationString(size_t d, size_t i, const std::string s)
CArrayAnnotation * pVslowMetabPrintAnn
CMatrix< C_FLOAT64 > mJacobian_initial
CArrayAnnotation * pVslowSpacePrintAnn
virtual bool setAnnotationM(size_t step)
const C_FLOAT64 & getNumber2QuantityFactor() const
void calculateDerivativesX(C_FLOAT64 *X1, C_FLOAT64 *Y1)
void createAnnotationsM()
std::vector< std::string > tableNames
void mat_anal_fast_space(C_INT &slow)
void setVectors(int slowMode)
const Value & getValue() const
CVector< C_FLOAT64 > mY_cons
void setCopasiVector(size_t d, const CCopasiContainer *v)
CMatrix< C_FLOAT64 > mVslowMetabPrint
virtual void print(std::ostream *ostream) const
void newton_new(C_INT *index_metab, C_INT &slow, C_INT &info)
virtual void start(const CState *initialState)
void newton_for_timestep(C_INT metabolite_number, C_FLOAT64 &y_consistent, C_INT &info)
virtual void resize(size_t rows, size_t cols, const bool ©=false)
void mat_anal_metab(C_INT &slow)
void setMode(size_t d, Mode m)
CCopasiVectorNS< CCompartment > & getCompartments()
void setDimensionDescription(size_t d, const std::string &s)
std::vector< CVector< C_FLOAT64 > > mVec_TimeScale
CMatrix< C_FLOAT64 > mJacobian
std::vector< CVector< C_FLOAT64 > > mVec_mVslowSpace
void printResult(std::ostream *ostream) const
CCopasiParameter * assertParameter(const std::string &name, const CCopasiParameter::Type type, const CType &defaultValue)
CILDMModifiedMethod(const CCopasiContainer *pParent=NULL)
CMatrix< C_FLOAT64 > mVslowSpacePrint
const CCopasiVector< CMetab > & getMetabolitesX() const
CCopasiObject * addMatrixReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
std::vector< CVector< C_FLOAT64 > > mVec_mVfastSpace
void integrationMethodStart(const CState *initialState)
std::vector< C_INT > mVec_SlowModes
void mat_anal_mod(C_INT &slow)
CArrayAnnotation * pVfastSpacePrintAnn
CMatrix< C_FLOAT64 > mVslow_metab