00001
00002
00003
00004 #include "cddefines.h"
00005 #include "iso.h"
00006
00007
00008
00009 void iso_put_error(long int ipISO,
00010 long int nelem,
00011 long int ipHi,
00012 long int ipLo,
00013 long int whichData,
00014 realnum errorOpt,
00015 realnum errorPess)
00016 {
00017
00018 DEBUG_ENTRY( "iso_put_error()" );
00019
00020 if( iso_ctrl.lgRandErrGen[ipISO] )
00021 {
00022
00023 ASSERT( whichData <= 2 );
00024 ASSERT( ipISO < NISO );
00025 ASSERT( nelem < LIMELM );
00026 ASSERT( ipHi <= iso_sp[ipISO][nelem].numLevels_max );
00027 ASSERT( ipLo <= iso_sp[ipISO][nelem].numLevels_max );
00028 ASSERT( errorOpt >= 0. );
00029 ASSERT( errorPess >= 0. );
00030
00031 if( !iso_ctrl.lgPessimisticErrors )
00032 iso_sp[ipISO][nelem].ex[ipHi][ipLo].Error[whichData] = errorOpt;
00033 else
00034 iso_sp[ipISO][nelem].ex[ipHi][ipLo].Error[whichData] = errorPess;
00035 }
00036 return;
00037 }
00038
00039 void iso_error_generation( long ipISO, long nelem )
00040 {
00041 long ipHi, ipLo, typeOfRate;
00042
00043 DEBUG_ENTRY( "iso_error_generation()" );
00044
00045
00046
00047
00048 for( ipHi=1; ipHi<= iso_sp[ipISO][nelem].numLevels_max; ipHi++ )
00049 {
00050
00051 for( ipLo=0; ipLo< ipHi; ipLo++ )
00052 {
00053 for( typeOfRate=0; typeOfRate<=1; typeOfRate++ )
00054 {
00055 if( iso_sp[ipISO][nelem].ex[ipHi][ipLo].Error[typeOfRate] >= 0. )
00056 {
00057 iso_sp[ipISO][nelem].ex[ipHi][ipLo].ErrorFactor[typeOfRate] =
00058 (realnum)MyGaussRand( iso_sp[ipISO][nelem].ex[ipHi][ipLo].Error[typeOfRate] );
00059 ASSERT( iso_sp[ipISO][nelem].ex[ipHi][ipLo].ErrorFactor[typeOfRate] > 0. );
00060 }
00061 else
00062 {
00063 iso_sp[ipISO][nelem].ex[ipHi][ipLo].ErrorFactor[typeOfRate] = 1.0f;
00064 }
00065 }
00066 }
00067 }
00068
00069
00070 iso_sp[ipISO][nelem].lgErrGenDone = true;
00071 return;
00072 }