00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <math.h>
00026
00027 #include "hydroclimate.h"
00028 #include "hydroparams.h"
00029
00030 #ifdef DBG
00031 #include "hydroinout.h"
00032 #endif
00033
00034
00035
00036
00037 int hydroshoulder()
00038 {
00039
00040
00041
00042
00043 int err, jj;
00044 double diff12, daysum, dumdbl;
00045 double dayoffset, leftpercent, maxpercent;
00046
00047 err = 0;
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 dayoffset = 3.0;
00068 leftpercent = 0.65;
00069 maxpercent = 0.7;
00070
00071
00072
00073
00074
00075
00076 for( jj=0; jj<maxshoulder; jj++ )
00077 shoulderright[jj] = 0.0;
00078
00079
00080
00081
00082
00083 shouldern = mx( (int)( basinlength[ep]/(avgvel[ep]*dTOs) ), 3 );
00084
00085
00086
00087
00088
00089
00090 if (Rvol[ep] > 0.0 && Rvol[ep] < 0.5)
00091 shouldern += (int)floor(.4*3.3333);
00092 if (Rvol[ep] >= 0.5)
00093 shouldern += (int)floor(.8*3.3333);
00094
00095
00096
00097
00098 shoulderleft = sin(PI/((double)shouldern + dayoffset)) * leftpercent;
00099 shouldermain = sin(PI/((double)shouldern + dayoffset)) * maxpercent;
00100 diff12 = 1.00 - (shouldermain + shoulderleft);
00101
00102 daysum = 0;
00103 for( jj=1; jj<shouldern-1; jj++ )
00104 daysum += jj;
00105 for( jj=0; jj<shouldern-2; jj++ )
00106 shoulderright[jj] = diff12 * (double)((shouldern-2-jj)/daysum);
00107
00108 #ifdef DBG
00109 fprintf( fidlog,"\t HydroShoulder: \n" );
00110 fprintf( fidlog,"\t\t dayoffset = %f \n", dayoffset );
00111 fprintf( fidlog,"\t\t leftpercent = %f \n", leftpercent );
00112 fprintf( fidlog,"\t\t maxpercent = %f \n", maxpercent );
00113 fprintf( fidlog,"\t\t shouldern = %d \n", shouldern );
00114 fprintf( fidlog,"\t\t shoulderleft = %f \n", shoulderleft );
00115 fprintf( fidlog,"\t\t shouldermain = %f \n", shouldermain );
00116 for( jj=0; jj<shouldern-2; jj++ )
00117 fprintf( fidlog,"\t\t shoulderright[jj] = %f \n", shoulderright[jj] );
00118 #endif
00119
00120
00121
00122
00123 dumdbl = 0.0;
00124 for( jj=0; jj<shouldern-2; jj++ )
00125 dumdbl += shoulderright[jj];
00126 dumdbl += shoulderleft + shouldermain;
00127 if( fabs(dumdbl-1.0) > 0.000001 ) {
00128 fprintf( stderr, "ERROR in HydroShoulder.c: \n");
00129 fprintf( stderr, " The shoulder events do not sum to 1.0 \n");
00130 fprintf( stderr, " sum(shoulder) = %f \n", dumdbl );
00131 fprintf( stderr, " shoulderleft = %f \n", shoulderleft );
00132 fprintf( stderr, " shouldermain = %f \n", shouldermain );
00133 for( jj=0; jj<shouldern-2; jj++ )
00134 fprintf( stderr, " shoulderright[jj] = %f \n", shoulderright[jj] );
00135 err = 1;
00136 }
00137
00138 return(err);
00139 }
00140