/*MakeDeriv derive numerical derivative of heating minus cooling */ #include #include "cddefines.h" #define NSTMAX 50 #include "makederiv.h" void MakeDeriv(char *job, double hmc, double te, float *DerivNumer) { long int i; static long int nstore; double dTe; static double TeSave[NSTMAX], hmcSave[NSTMAX]; # ifdef DEBUG_FUN fputs( "<+>MakeDeriv()\n", debug_fp ); # endif if( strcmp(job,"zero") == 0 ) { nstore = 0; } else if( strcmp(job,"incr") == 0 ) { nstore += 1; if( nstore > NSTMAX ) { fprintf( ioQQQ, " too many stores for MakeDeriv\n" ); nstore = NSTMAX; } hmcSave[nstore-1] = hmc; TeSave[nstore-1] = te; if( nstore > 1 ) { *DerivNumer = 0.; for( i=0; i < (nstore - 1); i++ ) { dTe = TeSave[i] - TeSave[i+1]; if( dTe != 0. ) { *DerivNumer += (float)((hmcSave[i] - hmcSave[i+1])/dTe); } } *DerivNumer /= nstore - 1; } else { *DerivNumer = 0.; } } else { fprintf( ioQQQ, " MakeDeriv called with insane job=%4.4s\n", job ); puts( "[Stop in makederiv]" ); exit(1); } # ifdef DEBUG_FUN fputs( " <->MakeDeriv()\n", debug_fp ); # endif return; }