⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datab.c

📁 GESPI 2.0动态系统模拟工具  
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "copyleft.h"

/*
    GEPASI - a simulator of metabolic pathways and other dynamical systems
    Copyright (C) 1989, 1992  Pedro Mendes
*/

/*************************************/
/*                                   */
/*   databases and their functions   */
/*                                   */
/*        Zortech C/C++ 3.0 r4       */
/*          MICROSOFT C 6.00         */
/*          Visual C/C++ 1.0         */
/*           QuickC/WIN 1.0          */
/*             ULTRIX cc             */
/*              GNU gcc              */
/*                                   */
/*   (include here compilers that    */
/*   compiled GEPASI successfully)   */
/*                                   */
/*************************************/


#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#ifdef _ZTC
#define MEM_DEBUG 1
#include "mem.h"
#else
#define mem_malloc malloc
#define mem_free free
#define mem_realloc realloc
#endif

#include "globals.h"
#include "globvar.h"
#include "lsoda.h"
#include "strtbl.h"
#include "heapchk.h"

/* structure holding information relative to kinetic mechanisms */

struct kint {
				unsigned char nsub;             /* number ofsubstrates  */
				unsigned char npro;             /* number of products   */
				unsigned char nmodf;    /* number of modifiers  */
				unsigned char revers;   /* reversability                */
				unsigned char nconst;   /* number of kin. const.*/
				char *descr;                    /* title                                */
				char *constnam;                 /* kin. constant names  */
		    };

/* structures for user-defined rate equations                                   */

struct nodet{
	     char item;
	     unsigned char val;
	     unsigned char left;
	     unsigned char right;
	    } ;

struct treet{
	     struct nodet node[256];
	     char id[64][10];
	     float constant[32];
	     int nnode,
		 nnum,
		 nid,
		 nsub,
		 npro,
		 nmodf,
		 nconst,
		 revers;
	     char descr[64];
	    } ;

/* structure holding simulation options                                                 */

struct opt {
	    int		dyn;
	    long	pfo;
		double	endtime;
	    double	reltol;
	    double	abstol;
	    double	hrcz;
	    int		adams;
	    int		bdf;
	    int		ss;
	    int		debug;
	    int		txt;
	    int		structan;
	    int		staban;
	    int		stdela;
	    int		nonela;
	    int		stdcc;
	    int		noncc;
	    int		dat;
		char	datname[PWIDTH];
	    int		datsep;
	    int		datwidth;
	    int		dattit;
	    int		datmca;
	    int		datss;
	    int		append;
	    int		quotes;
		char	timeu[32];
		char	concu[32];
	    int		scan;
	    int		scandens;
	    int		scanlog;
	   };

struct sp{
	      PDBL var;
	      double low;
	      double high;
	      double ampl;
	      int dens;
	      int log;
	      PDBL linkedto;
	      double factor;
	      int operation;
	     };

PDBL    params[MAX_STEP];                                                       /* ptr to parameters for each rate eq.  */
int     *eff[MAX_STEP];                                                         /* ptr to parameters for each rate eq.  */
unsigned char	revers[MAX_STEP];                                       /* 1 if reaction is reversible                  */
struct  opt options;                                                            /* structure with simulation options    */
struct  kint *ktype;                                                            /* ptr array of kinetic types & proprt  */
struct  sp *sparam;                                                                     /* ptr array with parameters to scan    */
PDBL    *scanpar;                                                                       /* ptrs to all possbl.params 4 scanning */
PDBL    *outpel;                                                                        /* ptrs to all possbl. values for output*/
PDBL    *poutelem;                                                                        /* ptrs to values for actual dat output */
char    *outtit;                                                                        /* pointer to buffer with column titles */
char    *treestr;                                                                       /* pointer to buffer with constant names*/
char    *treeptr;                                                                       /* pointer to buffer with constant names*/
int     *scindex;                                                                       /* ptr to base of array with idx to scan*/
int     *lindex;                                                                        /* ptr to base of array with idx 2 links*/
int     nscanpar;                                   /* number of scanning elements                      */
int     noutpel;                                    /* number of output elements                        */
int     totscan;                                    /* number of selected scanning params       */
int     nlinks;                                                                         /* number of linked parameters                  */
int     nudf;                                                                           /* number of user-def functions                 */
int     nrateq;                                                                         /* number of total rate equations               */
int     totsel;                                     /* number of selected output elements       */
int     kfl[MAX_STEP];                                                          /* flags for kinetic types                              */
unsigned int sizespar;
unsigned int sizeparam;
unsigned int sizeeff;
unsigned int sizeoutp;
unsigned int sizetr;
struct  treet *tree;                                                            /* function tree for rate equations             */
struct  treet tr;                                                                       /* tree for the input                                   */

/* main point for memory block allocation               */
int MemAlloc( void )
{
 int i;


 sizeparam = sizeof( double );
 params[0] = (double *) mem_malloc( sizeparam );
 if( params[0] == NULL ) return -1;
 /* make the other params[i] point to NULL                                                                */
 for( i=1; i<MAX_STEP; i++ ) params[i] = NULL;

 sizeeff = 1;
 eff[0] = (int *) mem_malloc( sizeeff * sizeof( int ) );
 if( eff[0] == NULL )
 {
  mem_free( params[0] );
  return -1;
 }
 /* make the other eff[i] point to NULL                                                                   */
 for( i=1; i<MAX_STEP; i++ ) eff[i] = NULL;

 /* allocate space for the MAX_TYPE descriptors of kinetic types	*/
 ktype = (struct kint *) mem_malloc( MAX_TYP * sizeof( struct kint ) );
 if( ktype == NULL )
 {
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 sizeoutp = 4 * sizeof( PDBL );
 outpel = (PDBL *) mem_malloc( sizeoutp );
 if( outpel == NULL )
 {
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 poutelem = (PDBL *) mem_malloc( sizeof(PDBL) );
 if( poutelem == NULL )
 {
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 loop = ( unsigned char (*)[MAX_STEP][MAX_MET] ) mem_malloc( MAX_STEP * MAX_MET * sizeof( unsigned char ) );
 if( loop == NULL )
 {
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 rstr = ( int (*)[MAX_STEP][MAX_MOL] ) mem_malloc( MAX_STEP * MAX_MOL * sizeof( int ) );
 if( rstr == NULL )
 {
  mem_free( loop );
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 outtit = ( char * ) mem_malloc( 25 * sizeof( char ) );
 if( outtit == NULL )
 {
  mem_free( rstr );
  mem_free( loop );
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 sparam = (struct sp *) mem_malloc( sizeof( struct sp ) );
 if( sparam == NULL )
 {
  mem_free( outtit );
  mem_free( rstr );
  mem_free( loop );
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 sizespar = 4 * sizeof( PDBL );
 scanpar = (PDBL *) mem_malloc( sizespar );
 if( scanpar == NULL )
 {
  mem_free( sparam );
  mem_free( outtit );
  mem_free( rstr );
  mem_free( loop );
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 scindex = (int *) mem_malloc( 4 * sizeof(int) );
 if( scindex == NULL )
 {
  mem_free( scanpar );
  mem_free( sparam );
  mem_free( outtit );
  mem_free( rstr );
  mem_free( loop );
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 lindex = (int *) mem_malloc( sizeof(int) );
 if( lindex == NULL )
 {
  mem_free( scindex );
  mem_free( scanpar );
  mem_free( sparam );
  mem_free( outtit );
  mem_free( rstr );
  mem_free( loop );
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 tree = (struct treet *) mem_malloc( sizeof( struct treet ) );
 if( tree == NULL )
 {
  mem_free( lindex );
  mem_free( scindex );
  mem_free( scanpar );
  mem_free( sparam );
  mem_free( outtit );
  mem_free( rstr );
  mem_free( loop );
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 sizetr = 4;
 treestr = (char *) mem_malloc( sizetr * sizeof( char ) );
 if( treestr == NULL )
 {
  mem_free( tree );
  mem_free( lindex );
  mem_free( scindex );
  mem_free( scanpar );
  mem_free( sparam );
  mem_free( outtit );
  mem_free( rstr );
  mem_free( loop );
  mem_free( poutelem );
  mem_free( outpel );
  mem_free( ktype );
  mem_free( params[0] );
  mem_free( eff[0] );
  return -1;
 }

 return 0;
}

/* Initialization of databases */

void InitDataBase( void )
{
 ktype[NOT].nsub = 0;                                                           /* init info of kinetic types   */
 ktype[NOT].npro = 0;
 ktype[NOT].nconst = 0;
 ktype[NOT].nmodf = 0;
 ktype[NOT].constnam = "";
 ktype[NOT].descr = "<not defined>";
 ktype[I01].nsub = 0;
 ktype[I01].npro = 1;
 ktype[I01].nconst = 1;
 ktype[I01].nmodf = 0;
 ktype[I01].constnam = "k";
 ktype[I01].descr = "constant rate";
 ktype[I10].nsub = 1;
 ktype[I10].npro = 0;
 ktype[I10].nconst = 1;
 ktype[I10].nmodf = 0;
 ktype[I10].constnam = ktype[I01].constnam;
 ktype[I10].descr = ktype[I01].descr;
 ktype[I11].nsub = 1;
 ktype[I11].npro = 1;
 ktype[I11].revers = 0;
 ktype[I11].nconst = 1;
 ktype[I11].nmodf = 0;
 ktype[I11].constnam = ktype[I01].constnam;
 ktype[I11].descr = "mass action";
 ktype[R11].nsub = 1;
 ktype[R11].npro = 1;
 ktype[R11].nconst = 2;
 ktype[R11].nmodf = 0;
 ktype[R11].constnam = "k1\0k2";
 ktype[R11].descr = ktype[I11].descr;
 ktype[I21].nsub = 2;
 ktype[I21].npro = 1;
 ktype[I21].nconst = 1;
 ktype[I21].nmodf = 0;
 ktype[I21].constnam = ktype[I01].constnam;
 ktype[I21].descr = ktype[I11].descr;
 ktype[R21].nsub = 2;
 ktype[R21].npro = 1;
 ktype[R21].nconst = 2;
 ktype[R21].nmodf = 0;
 ktype[R21].constnam = ktype[R11].constnam;
 ktype[R21].descr = ktype[I11].descr;
 ktype[I12].nsub = 1;
 ktype[I12].npro = 2;
 ktype[I12].nconst = 1;
 ktype[I12].nmodf = 0;
 ktype[I12].constnam = ktype[I01].constnam;
 ktype[I12].descr = ktype[I11].descr;
 ktype[R12].nsub = 1;
 ktype[R12].npro = 2;
 ktype[R12].nconst = 2;
 ktype[R12].nmodf = 0;
 ktype[R12].constnam = ktype[R11].constnam;
 ktype[R12].descr = ktype[I11].descr;
 ktype[I31].nsub = 3;
 ktype[I31].npro = 1;
 ktype[I31].nconst = 1;
 ktype[I31].nmodf = 0;
 ktype[I31].constnam = ktype[I01].constnam;
 ktype[I31].descr = ktype[I11].descr;
 ktype[R31].nsub = 3;
 ktype[R31].npro = 1;
 ktype[R31].nconst = 2;
 ktype[R31].nmodf = 0;
 ktype[R31].constnam = ktype[R11].constnam;
 ktype[R31].descr = ktype[I11].descr;
 ktype[I13].nsub = 1;
 ktype[I13].npro = 3;
 ktype[I13].nconst = 1;
 ktype[I13].nmodf = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -