/*fiddle adjust energy bounds of certain cells so that match ionization edges exactly */ #include "cddefines.h" #include "rfield.h" #include "fiddle.h" void fiddle(long int ipnt, double exact) { double anuold, bhi, blo, extra; # ifdef DEBUG_FUN fputs( "<+>fiddle()\n", debug_fp ); # endif /* make low edge of cell exact for photo integrals *begin sanity checks */ assert( ipnt >= 1 ); assert( ipnt <= (NCELL-1) ); bhi = rfield.anu[ipnt] - rfield.widflx[ipnt]*0.5; blo = exact; extra = rfield.widflx[ipnt-1] - (bhi - blo); rfield.anu[ipnt-2] += (float)(extra*0.5); rfield.widflx[ipnt-2] += (float)extra; rfield.widflx[ipnt-1] = (float)(bhi - blo); anuold = rfield.anu[ipnt-1]; rfield.anu[ipnt-1] = (float)((bhi + blo)/2.); if( rfield.widflx[ipnt-1] <= 0. || rfield.widflx[ipnt-1] > rfield.widflx[ipnt-2]*2. ) { fprintf( ioQQQ, " logic error in FIDDLE; EXACT, IPNT=%10.2e%5ld\n", exact, ipnt ); fprintf( ioQQQ, " anu(ipnt)=%11.3e\n", anuold ); puts( "[Stop in fiddle]" ); exit(1); } # ifdef DEBUG_FUN fputs( " <->fiddle()\n", debug_fp ); # endif return; }