#BEGIN OUTFILE1
# before write_ruby top matter
ALWAYS = 1
INFO = 2
DEBUGL = 3
DEBUGMASSIVE = 4
MAX_UNCHANGED = 10
MAX_TERMS = 30
# before write_ats library and user def block
#BEGIN ATS LIBRARY BLOCK
# Begin Function number 2
def omniout_str(iolevel,str)
if ($glob_iolevel >= iolevel) then # if number 1
puts str
end# end if 1
end # End Function number 2
# Begin Function number 3
def omniout_str_noeol(iolevel,str)
if ($glob_iolevel >= iolevel) then # if number 1
printf("%s", str)
end# end if 1
end # End Function number 3
# Begin Function number 4
def omniout_labstr(iolevel,label,str)
if ($glob_iolevel >= iolevel) then # if number 1
puts label + str
end# end if 1
end # End Function number 4
# Begin Function number 5
def omniout_float(iolevel,prelabel,prelen,value,vallen,postlabel)
if ($glob_iolevel >= iolevel) then # if number 1
puts prelabel.ljust(30) + value.to_s + postlabel
end# end if 1
end # End Function number 5
# Begin Function number 6
def omniout_int(iolevel,prelabel,prelen,value,vallen,postlabel)
if ($glob_iolevel >= iolevel) then # if number 1
puts prelabel.ljust(32) + value.to_s + postlabel
end# end if 1
end # End Function number 6
# Begin Function number 7
def omniout_float_arr(iolevel,prelabel,elemnt,prelen,value,vallen,postlabel)
if ($glob_iolevel >= iolevel) then # if number 1
puts (prelabel.ljust(12) + " " + elemnt.to_s + " " + value.to_s + " " + postlabel)
end# end if 1
end # End Function number 7
# Begin Function number 8
def dump_series(iolevel,dump_label,series_name,arr_series,numb)
if ($glob_iolevel >= iolevel) then # if number 1
i = 1
while (i <= numb) do
puts dump_label + series_name + "[" + i.to_s + "]" + arr_series[i].to_s
i += 1
end
end
end # End Function number 8
# Begin Function number 9
def dump_series_2(iolevel,dump_label,series_name2,arr_series2,numb,subnum,arr_x)
if ($glob_iolevel >= iolevel) then # if number 2
sub = 1;
while (sub <= subnum) do
i = 1;
while (i <= numb) do
puts dump_label + series_name2 + "[" + sub.to_s + "," + i.to_s + "]" + arr_series2[sub,i].to_s
end# end do number 0
sub += 1;
end# end do number -1
end# end if 2
end # End Function number 9
# Begin Function number 10
def cs_info(iolevel,str)
if ($glob_iolevel >= iolevel) then # if number 2
puts "cs_info " + str + " $glob_correct_start_flag = " , $glob_correct_start_flag.to_s + "$glob_h := " + $glob_h + "$glob_reached_optimal_h := " + $glob_reached_optimal_h
end# end if 2
end # End Function number 10
# Begin Function number 11
def logitem_time(fd,secs_in)
fd.printf("
")
if (secs_in >= 0) then # if number 2
years_int = int_trunc(secs_in / $glob_sec_in_year)
sec_temp = (secs_in % $glob_sec_in_year)
days_int = int_trunc(sec_temp / $glob_sec_in_day)
sec_temp = (sec_temp % $glob_sec_in_day)
hours_int = int_trunc(sec_temp / $glob_sec_in_hour)
sec_temp = (sec_temp % $glob_sec_in_hour)
minutes_int = int_trunc(sec_temp / $glob_sec_in_minute)
sec_int = (sec_temp % $glob_sec_in_minute)
if (years_int > 0) then # if number 3
fd.printf(years_int.to_s + " Years " + days_int.to_s + " Days " + hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds")
elsif
(days_int > 0) then # if number 4
fd.printf(days_int.to_s + " Days " + hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds")
elsif
(hours_int > 0) then # if number 5
fd.printf(hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds")
elsif
(minutes_int > 0) then # if number 6
fd.printf(minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds")
else
fd.printf(sec_int.to_s + " Seconds")
end# end if 6
else
fd.printf(" 0.0 Seconds")
end# end if 5
fd.printf(" | ")
end # End Function number 11
# Begin Function number 12
def omniout_timestr(secs_in)
if (secs_in >= 0) then # if number 5
years_int = int_trunc(secs_in / $glob_sec_in_year)
sec_temp = (secs_in % $glob_sec_in_year)
days_int = int_trunc(sec_temp / $glob_sec_in_day)
sec_temp = (sec_temp % $glob_sec_in_day)
hours_int = int_trunc(sec_temp / $glob_sec_in_hour)
sec_temp = (sec_temp % $glob_sec_in_hour)
minutes_int = int_trunc(sec_temp / $glob_sec_in_minute)
sec_int = (sec_temp % $glob_sec_in_minute)
if (years_int > 0) then # if number 6
puts years_int.to_s + " Years " + days_int.to_s + " Days " + hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds"
elsif
(days_int > 0) then # if number 7
puts days_int.to_s + " Days " + hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds"
elsif
(hours_int > 0) then # if number 8
puts hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds"
elsif
(minutes_int > 0) then # if number 9
puts minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds"
else
puts sec_int.to_s + " Seconds"
end# end if 9
else
puts " 0.0 Seconds"
end# end if 8
end # End Function number 12
# Begin Function number 13
def zero_ats_ar(arr_a)
iii = 1
while (iii <= MAX_TERMS) do # do number -1
arr_a [iii] = 0.0
iii = iii + 1
end# end do number -1
end # End Function number 13
# Begin Function number 14
def ats(mmm_ats,arr_a,arr_b,jjj_ats)
ret_ats = 0.0
if (jjj_ats <= mmm_ats) then # if number 8
ma_ats = mmm_ats + 1
iii_ats = jjj_ats
while (iii_ats <= mmm_ats) do # do number -1
lll_ats = ma_ats - iii_ats
if ((lll_ats <= MAX_TERMS and (iii_ats <= MAX_TERMS) )) then # if number 9
ret_ats = ret_ats + arr_a[iii_ats]*arr_b[lll_ats]
end# end if 9
iii_ats = iii_ats + 1
end# end do number -1
end# end if 8
return ( ret_ats)
end # End Function number 14
# Begin Function number 15
def att(mmm_att,arr_aa,arr_bb,jjj_att)
ret_att = 0.0
if (jjj_att < mmm_att) then # if number 8
ma_att = mmm_att + 2
iii_att = jjj_att
while ((iii_att < mmm_att) and (iii_att <= MAX_TERMS) ) do # do number -1
lll_att = ma_att - iii_att
al_att = (lll_att - 1)
if ((lll_att <= MAX_TERMS and (iii_att <= MAX_TERMS) )) then # if number 9
ret_att = ret_att + arr_aa[iii_att]*arr_bb[lll_att]* (al_att)
end# end if 9
iii_att = iii_att + 1
end# end do number -1
ret_att = ret_att / (mmm_att)
end# end if 8
return ( ret_att)
end # End Function number 15
# Begin Function number 16
def logditto(file)
file.printf("")
file.printf("ditto")
file.printf(" | ")
end # End Function number 16
# Begin Function number 17
def logitem_integer(file,n)
file.printf("")
file.printf("%d",n)
file.printf(" | ")
end # End Function number 17
# Begin Function number 18
def logitem_str(file,str)
file.printf("")
file.printf(str)
file.printf(" | ")
end # End Function number 18
# Begin Function number 19
def logitem_good_digits(file,rel_error)
file.printf("")
if (rel_error != -1.0) then # if number 8
if (rel_error > + 0.0000000000000000000000000000000001) then # if number 9
good_digits = 3-int_trunc(log10(rel_error))
file.printf("%d",good_digits)
else
good_digits = 16
file.printf("%d",good_digits)
end# end if 9
else
file.printf("Unknown")
end# end if 8
file.printf(" | ")
end # End Function number 19
# Begin Function number 20
def log_revs(file,revs)
file.printf(revs.to_s)
end # End Function number 20
# Begin Function number 21
def logitem_float(file,x)
file.printf("")
file.printf(x.to_s)
file.printf(" | ")
end # End Function number 21
# Begin Function number 22
def logitem_pole(file,pole)
file.printf("")
if pole == 0 then # if number 8
file.printf("NA")
elsif
pole == 1 then # if number 9
file.printf("Real")
elsif
pole == 2 then # if number 10
file.printf("Complex")
elsif
pole == 4 then # if number 11
file.printf("Yes")
else
file.printf("No")
end# end if 11
file.printf(" | ")
end # End Function number 22
# Begin Function number 23
def logstart(file)
file.printf("")
end # End Function number 23
# Begin Function number 24
def logend(file)
file.printf("
")
end # End Function number 24
# Begin Function number 25
def chk_data()
errflag = false
if ($glob_max_iter < 2) then # if number 11
omniout_str(ALWAYS,"Illegal max_iter")
errflag = true
end# end if 11
if (errflag) then # if number 11
end# end if 11
end # End Function number 25
# Begin Function number 26
def comp_expect_sec(t_end2,t_start2,t2,clock_sec2)
ms2 = clock_sec2
sub1 = (t_end2-t_start2)
sub2 = (t2-t_start2)
if (sub1 == 0.0) then # if number 11
sec_left = 0.0
else
if (sub2 > 0.0) then # if number 12
rrr = (sub1/sub2)
sec_left = rrr * ms2 - ms2
else
sec_left = 0.0
end# end if 12
end# end if 11
return ( sec_left)
end # End Function number 26
# Begin Function number 27
def comp_percent(t_end2,t_start2, t2)
sub1 = (t_end2-t_start2)
sub2 = (t2-t_start2)
if (sub2 > $glob_small_float) then # if number 11
rrr = (100.0*sub2)/sub1
else
rrr = 0.0
end# end if 11
return ( rrr)
end # End Function number 27
# Begin Function number 28
def comp_rad_from_ratio(term1,term2,last_no)
#TOP TWO TERM RADIUS ANALYSIS
if (term2 > 0.0) then # if number 11
ret = float_abs(term1 * $glob_h / term2)
else
ret = $glob_large_float
end# end if 11
return ( ret)
#BOTTOM TWO TERM RADIUS ANALYSIS
end # End Function number 28
# Begin Function number 29
def comp_ord_from_ratio(term1,term2,last_no)
#TOP TWO TERM ORDER ANALYSIS
if (term2 > 0.0) then # if number 11
ret = 1.0 + float_abs(term2) * convfloat(last_no) * ln(float_abs(term1 * $glob_h / term2))/ln(convfloat(last_no))
else
ret = $glob_large_float
end# end if 11
return ( ret)
#BOTTOM TWO TERM ORDER ANALYSIS
end # End Function number 29
# Begin Function number 30
def comp_rad_from_three_terms(term1,term2,term3,last_no)
#TOP THREE TERM RADIUS ANALYSIS
temp = float_abs(term2*term2*convfloat(last_no)-2.0*term2*term2-term1*term3*convfloat(last_no)+term1*term3)
if (temp > 0.0) then # if number 11
ret = float_abs((term2*$glob_h*term1)/(temp))
else
ret = $glob_large_float
end# end if 11
return ( ret)
#BOTTOM THREE TERM RADIUS ANALYSIS
end # End Function number 30
# Begin Function number 31
def comp_ord_from_three_terms(term1,term2,term3,last_no)
#TOP THREE TERM ORDER ANALYSIS
ret = float_abs((4.0*term1*term3*convfloat(last_no)-3.0*term1*term3-4.0*term2*term2*convfloat(last_no)+4.0*term2*term2+term2*term2*convfloat(last_no*last_no)-term1*term3*convfloat(last_no*last_no))/(term2*term2*convfloat(last_no)-2.0*term2*term2-term1*term3*convfloat(last_no)+term1*term3))
return ( ret)
#TOP THREE TERM ORDER ANALYSIS
end # End Function number 31
# Begin Function number 32
def comp_rad_from_six_terms(term1,term2,term3,term4,term5,term6,last_no)
#TOP SIX TERM RADIUS ANALYSIS
if ((term5 != 0.0) and (term4 != 0.0) and (term3 != 0.0) and (term2 != 0.0) and (term1 != 0.0)) then # if number 11
rm0 = term6/term5
rm1 = term5/term4
rm2 = term4/term3
rm3 = term3/term2
rm4 = term2/term1
nr1 = convfloat(last_no-1)*rm0 - 2.0*convfloat(last_no-2)*rm1 + convfloat(last_no-3)*rm2
nr2 = convfloat(last_no-2)*rm1 - 2.0*convfloat(last_no-3)*rm2 + convfloat(last_no-4)*rm3
dr1 = (-1.0)/rm1 + 2.0/rm2 - 1.0/rm3
dr2 = (-1.0)/rm2 + 2.0/rm3 - 1.0/rm4
ds1 = 3.0/rm1 - 8.0/rm2 + 5.0/rm3
ds2 = 3.0/rm2 - 8.0/rm3 + 5.0/rm4
if ((float_abs(nr1 * dr2 - nr2 * dr1) == 0.0) or (float_abs(dr1) == 0.0)) then # if number 12
rad_c = $glob_large_float
ord_no = $glob_large_float
else
if (float_abs(nr1*dr2 - nr2 * dr1) != 0.0) then # if number 13
rcs = ((ds1*dr2 - ds2*dr1 +dr1*dr2)/(nr1*dr2 - nr2 * dr1))
#(Manuels) rcs = (ds1*dr2 - ds2*dr1)/(nr1*dr2 - nr2 * dr1)
ord_no = (rcs*nr1 - ds1)/(2.0*dr1) -convfloat(last_no)/2.0
if (float_abs(rcs) != 0.0) then # if number 14
if (rcs > 0.0) then # if number 15
rad_c = sqrt(rcs) * float_abs($glob_h)
else
rad_c = $glob_large_float
ord_no = $glob_large_float
end# end if 15
else
rad_c = $glob_large_float
ord_no = $glob_large_float
end# end if 14
else
rad_c = $glob_large_float
ord_no = $glob_large_float
end# end if 13
end# end if 12
else
rad_c = $glob_large_float
ord_no = $glob_large_float
end# end if 11
$glob_six_term_ord_save = ord_no
return ( rad_c)
#BOTTOM SIX TERM RADIUS ANALYSIS
end # End Function number 32
# Begin Function number 33
def comp_ord_from_six_terms(term1,term2,term3,term4,term5,term6,last_no)
#TOP SIX TERM ORDER ANALYSIS
#TOP SAVED FROM SIX TERM RADIUS ANALYSIS
return ( $glob_six_term_ord_save)
#BOTTOM SIX TERM ORDER ANALYSIS
end # End Function number 33
# Begin Function number 34
def factorial_2(nnn)
if (nnn > 0) then # if number 11
return ( nnn * factorial_2(nnn - 1))
else
return ( 1.0)
end# end if 11
end # End Function number 34
# Begin Function number 35
def factorial_1(nnn)
if (nnn <= MAX_TERMS) then # if number 11
if ($array_fact_1[nnn] == 0) then # if number 12
ret = factorial_2(nnn)
$array_fact_1[nnn] = ret
else
ret = $array_fact_1[nnn]
end# end if 12
else
ret = factorial_2(nnn)
end# end if 11
return ( ret)
end # End Function number 35
# Begin Function number 36
def factorial_3(mmm,nnn)
if ((nnn <= MAX_TERMS) and (mmm <= MAX_TERMS)) then # if number 11
if ($array_fact_2[mmm][nnn] == 0) then # if number 12
ret = factorial_1(mmm)/factorial_1(nnn)
$array_fact_2[mmm][nnn] = ret
else
ret = $array_fact_2[mmm][nnn]
end# end if 12
else
ret = factorial_2(mmm)/factorial_2(nnn)
end# end if 11
return ( ret)
end # End Function number 36
# Begin Function number 37
def convfloat(mmm)
return(mmm.to_f)
end # End Function number 37
# Begin Function number 38
def elapsed_time_seconds()
t = Time.now
return(t.to_i)
end # End Function number 38
# Begin Function number 39
def expt(x,y)
if ((x <= 0.0) and (y < 0.0)) then # if number 11
puts "expt error x = " + x.to_s + "y = " + y.to_s
end# end if 11
return(x**y)
end # End Function number 39
# Begin Function number 40
def Si(x)
return(0.0)
end # End Function number 40
# Begin Function number 41
def Ci(x)
return(0.0)
end # End Function number 41
# Begin Function number 42
def float_abs(x)
return(x.abs)
end # End Function number 42
# Begin Function number 43
def int_abs(x)
return(x.abs)
end # End Function number 43
# Begin Function number 44
def exp(x)
return(Math.exp(x))
end # End Function number 44
# Begin Function number 45
def int_trunc(x)
return(x.to_i)
end # End Function number 45
# Begin Function number 46
def floor(x)
return(x.floor)
end # End Function number 46
# Begin Function number 47
def sin(x)
return(Math.sin(x))
end # End Function number 47
# Begin Function number 48
def cos(x)
return(Math.cos(x))
end # End Function number 48
# Begin Function number 49
def tan(x)
return(Math.tan(x))
end # End Function number 49
# Begin Function number 50
def arccos(x)
return(Math.acos(x))
end # End Function number 50
# Begin Function number 51
def arccosh(x)
return(Math.acosh(x))
end # End Function number 51
# Begin Function number 52
def arcsin(x)
return(Math.asin(x))
end # End Function number 52
# Begin Function number 53
def arcsinh(x)
return(Math.asinh(x))
end # End Function number 53
# Begin Function number 54
def arctan(x)
return(Math.atan(x))
end # End Function number 54
# Begin Function number 55
def arctanh(x)
return(Math.atanh(x))
end # End Function number 55
# Begin Function number 56
def cosh(x)
return(Math.cosh(x))
end # End Function number 56
# Begin Function number 57
def erf(x)
return(Math.erf(x))
end # End Function number 57
# Begin Function number 58
def ln(x)
return(Math.log(x))
end # End Function number 58
# Begin Function number 59
def log10(x)
return(Math.log10(x))
end # End Function number 59
# Begin Function number 60
def sinh(x)
return(Math.sinh(x))
end # End Function number 60
# Begin Function number 61
def tanh(x)
return(Math.tanh(x))
end # End Function number 61
# Begin Function number 62
def sqrt(x)
return(Math.sqrt(x))
end # End Function number 62
# Begin Function number 63
def array2d(op3,op4)
i = 0
x1 = Array.new(op3.to_i + 1)
while i <= op3.to_i + 1 do # do number -1
x1[i] = Array.new(op4.to_i + 1)
i += 1
end# end do number -1
return x1
end # End Function number 63
# Begin Function number 64
def estimated_needed_step_error(x_start,x_end,estimated_h,estimated_answer)
omniout_float(ALWAYS,"$glob_desired_digits_correct",32,$glob_desired_digits_correct,32,"")
desired_abs_gbl_error = expt(10.0, -$glob_desired_digits_correct) * float_abs(estimated_answer)
omniout_float(ALWAYS,"estimated_h",32,estimated_h,32,"")
omniout_float(ALWAYS,"estimated_answer",32,estimated_answer,32,"")
omniout_float(ALWAYS,"desired_abs_gbl_error",32,desired_abs_gbl_error,32,"")
range = (x_end - x_start)
omniout_float(ALWAYS,"range",32,range,32,"")
estimated_steps = range / estimated_h
omniout_float(ALWAYS,"estimated_steps",32,estimated_steps,32,"")
step_error = float_abs(desired_abs_gbl_error / estimated_steps)
omniout_float(ALWAYS,"step_error",32,step_error,32,"")
return ( (step_error))
end # End Function number 64
#END ATS LIBRARY BLOCK
#BEGIN USER FUNCTION BLOCK
#BEGIN BLOCK 3
#BEGIN USER DEF BLOCK
def exact_soln_y (x)
return(1.0 + cos(x))
end
def exact_soln_yp (x)
return(-sin(x))
end
def exact_soln_ypp (x)
return(-cos(x))
end
#END USER DEF BLOCK
#END BLOCK 3
#END USER FUNCTION BLOCK
# before write_aux functions
# Begin Function number 2
def display_poles()
if ($glob_type_given_pole == 4) then # if number 1
rad_given = sqrt(($array_x[1] - $array_given_rad_poles[1][1]) * ($array_x[1] - $array_given_rad_poles[1][1]) + $array_given_rad_poles[1][2] * $array_given_rad_poles[1][2])
if (rad_given < $glob_least_given_sing) then # if number 2
$glob_least_given_sing = rad_given
end# end if 2
omniout_float(ALWAYS,"Radius of convergence (given) for eq 1 ",4,rad_given,4," ")
omniout_float(ALWAYS,"Order of pole (given) ",4,$array_given_ord_poles[1][1],4," ")
elsif
($glob_type_given_pole == 3) then # if number 2
omniout_str(ALWAYS,"NO POLE (given) for Equation 1")
else
omniout_str(ALWAYS,"NO INFO (given) for Equation 1")
end# end if 2
if ($array_rad_test_poles[1][1] != $glob_large_float) then # if number 2
omniout_float(ALWAYS,"Radius of convergence (ratio test) for eq 1 ",4,$array_rad_test_poles[1][1],4," ")
if ($array_rad_test_poles[1][1]< $glob_least_ratio_sing) then # if number 3
$glob_least_ratio_sing = $array_rad_test_poles[1][1]
end# end if 3
omniout_float(ALWAYS,"Order of pole (ratio test) ",4, $array_ord_test_poles[1][1],4," ")
else
omniout_str(ALWAYS,"NO POLE (ratio test) for Equation 1")
end# end if 2
if (($array_rad_test_poles[1][2] > 0.0) and ($array_rad_test_poles[1][2] != $glob_large_float)) then # if number 2
omniout_float(ALWAYS,"Radius of convergence (three term test) for eq 1 ",4,$array_rad_test_poles[1][2],4," ")
if ($array_rad_test_poles[1][2]< $glob_least_3_sing) then # if number 3
$glob_least_3_sing = $array_rad_test_poles[1][2]
end# end if 3
omniout_float(ALWAYS,"Order of pole (three term test) ",4, $array_ord_test_poles[1][2],4," ")
else
omniout_str(ALWAYS,"NO REAL POLE (three term test) for Equation 1")
end# end if 2
if (($array_rad_test_poles[1][3] > 0.0) and ($array_rad_test_poles[1][3] != $glob_large_float)) then # if number 2
omniout_float(ALWAYS,"Radius of convergence (six term test) for eq 1 ",4,$array_rad_test_poles[1][3],4," ")
if ($array_rad_test_poles[1][3]< $glob_least_6_sing) then # if number 3
$glob_least_6_sing = $array_rad_test_poles[1][3]
end# end if 3
omniout_float(ALWAYS,"Order of pole (six term test) ",4, $array_ord_test_poles[1][3],4," ")
else
omniout_str(ALWAYS,"NO COMPLEX POLE (six term test) for Equation 1")
end# end if 2
end # End Function number 2
# Begin Function number 3
def my_check_sign( x0 ,xf)
if (xf > x0) then # if number 2
ret = 1.0
else
ret = -1.0
end# end if 2
return ( ret)
end # End Function number 3
# Begin Function number 4
def est_size_answer()
min_size = $glob_estimated_size_answer
if (float_abs($array_y[1]) < min_size) then # if number 2
min_size = float_abs($array_y[1])
omniout_float(ALWAYS,"min_size",32,min_size,32,"")
end# end if 2
if (min_size < 1.0) then # if number 2
min_size = 1.0
omniout_float(ALWAYS,"min_size",32,min_size,32,"")
end# end if 2
return ( min_size)
end # End Function number 4
# Begin Function number 5
def test_suggested_h()
max_estimated_step_error = 0.0
no_terms = MAX_TERMS
hn_div_ho = 0.5
hn_div_ho_2 = 0.25
hn_div_ho_3 = 0.125
omniout_float(ALWAYS,"hn_div_ho",32,hn_div_ho,32,"")
omniout_float(ALWAYS,"hn_div_ho_2",32,hn_div_ho_2,32,"")
omniout_float(ALWAYS,"hn_div_ho_3",32,hn_div_ho_3,32,"")
est_tmp = float_abs($array_y[no_terms-3] + $array_y[no_terms - 2] * hn_div_ho + $array_y[no_terms - 1] * hn_div_ho_2 + $array_y[no_terms] * hn_div_ho_3)
if (est_tmp >= max_estimated_step_error) then # if number 2
max_estimated_step_error = est_tmp
end# end if 2
omniout_float(ALWAYS,"max_estimated_step_error",32,max_estimated_step_error,32,"")
return ( max_estimated_step_error)
end # End Function number 5
# Begin Function number 6
def reached_interval()
if ($glob_check_sign * ($array_x[1]) >= $glob_check_sign * $glob_next_display) then # if number 2
ret = true
else
ret = false
end# end if 2
return(ret)
end # End Function number 6
# Begin Function number 7
def display_alot(iter)
#TOP DISPLAY ALOT
if (reached_interval()) then # if number 2
if (iter >= 0) then # if number 3
ind_var = $array_x[1]
omniout_float(ALWAYS,"x[1] ",33,ind_var,20," ")
analytic_val_y = exact_soln_y(ind_var)
omniout_float(ALWAYS,"y[1] (analytic) ",33,analytic_val_y,20," ")
term_no = 1
numeric_val = $array_y[term_no]
abserr = float_abs(numeric_val - analytic_val_y)
omniout_float(ALWAYS,"y[1] (numeric) ",33,numeric_val,20," ")
if (float_abs(analytic_val_y) != 0.0) then # if number 4
relerr = abserr*100.0/float_abs(analytic_val_y)
if (relerr > 0.0000000000000000000000000000000001) then # if number 5
$glob_good_digits = -int_trunc(log10(relerr)) + 3
else
$glob_good_digits = 16
end# end if 5
else
relerr = -1.0
$glob_good_digits = -1
end# end if 4
if ($glob_iter == 1) then # if number 4
$array_1st_rel_error[1] = relerr
else
$array_last_rel_error[1] = relerr
end# end if 4
omniout_float(ALWAYS,"absolute error ",4,abserr,20," ")
omniout_float(ALWAYS,"relative error ",4,relerr,20,"%")
omniout_int(INFO,"Correct digits ",32,$glob_good_digits,4," ")
omniout_float(ALWAYS,"h ",4,$glob_h,20," ")
end# end if 3
#BOTTOM DISPLAY ALOT
end# end if 2
end # End Function number 7
# Begin Function number 8
def adjust_for_pole(h_param)
#TOP ADJUST FOR POLE
hnew = h_param
$glob_normmax = $glob_small_float
if (float_abs($array_y_higher[1][1]) > $glob_small_float) then # if number 2
tmp = float_abs($array_y_higher[1][1])
if (tmp < $glob_normmax) then # if number 3
$glob_normmax = tmp
end# end if 3
end# end if 2
if ($glob_look_poles and ($glob_min_pole_est > $glob_small_float) and ($glob_min_pole_est != $glob_large_float)) then # if number 2
sz2 = $glob_min_pole_est/10.0
if (sz2 < hnew) then # if number 3
omniout_float(INFO,"$glob_h adjusted to ",20,h_param,12,"due to singularity.")
omniout_str(INFO,"Reached Optimal")
return(hnew)
end# end if 3
end# end if 2
if ( not $glob_reached_optimal_h) then # if number 2
$glob_reached_optimal_h = true
$glob_curr_iter_when_opt = $glob_current_iter
$glob_optimal_clock_start_sec = elapsed_time_seconds()
$glob_optimal_start = $array_x[1]
end# end if 2
hnew = sz2
#END block
return ( hnew)
#BOTTOM ADJUST FOR POLE
end # End Function number 8
# Begin Function number 9
def prog_report(x_start,x_end)
#TOP PROGRESS REPORT
clock_sec1 = elapsed_time_seconds()
total_clock_sec = (clock_sec1) - ($glob_orig_start_sec)
$glob_clock_sec = (clock_sec1) - ($glob_clock_start_sec)
left_sec = ($glob_max_sec) + ($glob_orig_start_sec) - (clock_sec1)
expect_sec = comp_expect_sec((x_end),(x_start),($array_x[1]) + ($glob_h) ,( clock_sec1) - ($glob_orig_start_sec))
opt_clock_sec = ( clock_sec1) - ($glob_optimal_clock_start_sec)
$glob_optimal_expect_sec = comp_expect_sec((x_end),(x_start),($array_x[1]) +( $glob_h) ,( opt_clock_sec))
$glob_total_exp_sec = $glob_optimal_expect_sec + total_clock_sec
percent_done = comp_percent((x_end),(x_start),($array_x[1]) + ($glob_h))
$glob_percent_done = percent_done
omniout_str_noeol(INFO,"Total Elapsed Time ")
omniout_timestr((total_clock_sec))
omniout_str_noeol(INFO,"Elapsed Time(since restart) ")
omniout_timestr(($glob_clock_sec))
if ((percent_done) < (100.0)) then # if number 2
omniout_str_noeol(INFO,"Expected Time Remaining ")
omniout_timestr((expect_sec))
omniout_str_noeol(INFO,"Optimized Time Remaining ")
omniout_timestr(($glob_optimal_expect_sec))
omniout_str_noeol(INFO,"Expected Total Time ")
omniout_timestr(($glob_total_exp_sec))
end# end if 2
omniout_str_noeol(INFO,"Time to Timeout ")
omniout_timestr((left_sec))
omniout_float(INFO, "Percent Done ",33,percent_done,4,"%")
#BOTTOM PROGRESS REPORT
end # End Function number 9
# Begin Function number 10
def check_for_pole()
#TOP CHECK FOR POLE
$glob_min_pole_est = $glob_large_float
tmp_rad = $glob_large_float
prev_tmp_rad = $glob_large_float
tmp_ratio = $glob_large_float
rad_c = $glob_large_float
$array_rad_test_poles[1][1] = $glob_large_float
$array_ord_test_poles[1][1] = $glob_large_float
found_sing = 1
last_no = MAX_TERMS - 3 - 10
cnt = 0
while (last_no < MAX_TERMS-3 and found_sing == 1) do # do number 1
tmp_rad = comp_rad_from_ratio($array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no)
tmp_ratio = tmp_rad / prev_tmp_rad
if ((cnt > 0 ) and (tmp_ratio < $glob_upper_ratio_limit) and (tmp_ratio > $glob_lower_ratio_limit)) then # if number 2
rad_c = tmp_rad
elsif
(cnt == 0) then # if number 3
rad_c = tmp_rad
elsif
(cnt > 0) then # if number 4
found_sing = 0
end# end if 4
prev_tmp_rad = tmp_rad
cnt = cnt + 1
last_no = last_no + 1
end# end do number 1
if (found_sing == 1) then # if number 4
if (rad_c < $array_rad_test_poles[1][1]) then # if number 5
$array_rad_test_poles[1][1] = rad_c
last_no = last_no - 1
tmp_ord = comp_ord_from_ratio($array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no)
$array_rad_test_poles[1][1] = rad_c
$array_ord_test_poles[1][1] = tmp_ord
end# end if 5
end# end if 4
#BOTTOM general radius test1
$glob_min_pole_est = $glob_large_float
tmp_rad = $glob_large_float
prev_tmp_rad = $glob_large_float
tmp_ratio = $glob_large_float
rad_c = $glob_large_float
$array_rad_test_poles[1][2] = $glob_large_float
$array_ord_test_poles[1][2] = $glob_large_float
found_sing = 1
last_no = MAX_TERMS - 3 - 10
cnt = 0
while (last_no < MAX_TERMS-4 and found_sing == 1) do # do number 1
tmp_rad = comp_rad_from_three_terms($array_y_higher[1][last_no-2],$array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no)
tmp_ratio = tmp_rad / prev_tmp_rad
if ((cnt > 0 ) and (tmp_ratio < $glob_upper_ratio_limit) and (tmp_ratio > $glob_lower_ratio_limit)) then # if number 4
rad_c = tmp_rad
elsif
(cnt == 0) then # if number 5
rad_c = tmp_rad
elsif
(cnt > 0) then # if number 6
found_sing = 0
end# end if 6
prev_tmp_rad = tmp_rad
cnt = cnt + 1
last_no = last_no + 1
end# end do number 1
if (found_sing == 1) then # if number 6
if (rad_c < $array_rad_test_poles[1][2]) then # if number 7
$array_rad_test_poles[1][2] = rad_c
last_no = last_no - 1
tmp_ord = comp_ord_from_three_terms($array_y_higher[1][last_no-2],$array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no)
$array_rad_test_poles[1][2] = rad_c
if (rad_c < $glob_min_pole_est) then # if number 8
$glob_min_pole_est = rad_c
end# end if 8
$array_ord_test_poles[1][2] = tmp_ord
end# end if 7
end# end if 6
#BOTTOM general radius test1
$glob_min_pole_est = $glob_large_float
tmp_rad = $glob_large_float
prev_tmp_rad = $glob_large_float
tmp_ratio = $glob_large_float
rad_c = $glob_large_float
$array_rad_test_poles[1][3] = $glob_large_float
$array_ord_test_poles[1][3] = $glob_large_float
found_sing = 1
last_no = MAX_TERMS - 3 - 10
cnt = 0
while (last_no < MAX_TERMS-7 and found_sing == 1) do # do number 1
tmp_rad = comp_rad_from_six_terms($array_y_higher[1][last_no-5],$array_y_higher[1][last_no-4],$array_y_higher[1][last_no-3],$array_y_higher[1][last_no-2],$array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no)
tmp_ratio = tmp_rad / prev_tmp_rad
if ((cnt > 0 ) and (tmp_ratio < $glob_upper_ratio_limit) and (tmp_ratio > $glob_lower_ratio_limit)) then # if number 6
rad_c = tmp_rad
elsif
(cnt == 0) then # if number 7
rad_c = tmp_rad
elsif
(cnt > 0) then # if number 8
found_sing = 0
end# end if 8
prev_tmp_rad = tmp_rad
cnt = cnt + 1
last_no = last_no + 1
end# end do number 1
if (found_sing == 1) then # if number 8
if (rad_c < $array_rad_test_poles[1][3]) then # if number 9
$array_rad_test_poles[1][3] = rad_c
last_no = last_no - 1
tmp_ord = comp_ord_from_six_terms($array_y_higher[1][last_no-5],$array_y_higher[1][last_no-4],$array_y_higher[1][last_no-3],$array_y_higher[1][last_no-2],$array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no)
$array_rad_test_poles[1][3] = rad_c
if (rad_c < $glob_min_pole_est) then # if number 10
$glob_min_pole_est = rad_c
end# end if 10
$array_ord_test_poles[1][3] = tmp_ord
end# end if 9
end# end if 8
#BOTTOM general radius test1
#START ADJUST ALL SERIES
if (float_abs($glob_min_pole_est) * $glob_ratio_of_radius < float_abs($glob_h)) then # if number 8
h_new = $glob_check_sign * $glob_min_pole_est * $glob_ratio_of_radius
term = 1
ratio = 1.0
while (term <= MAX_TERMS) do # do number 1
$array_y[term] = $array_y[term]* ratio
$array_y_higher[1][term] = $array_y_higher[1][term]* ratio
$array_x[term] = $array_x[term]* ratio
ratio = ratio * h_new / float_abs($glob_h)
term = term + 1
end# end do number 1
$glob_h = h_new
end# end if 8
#BOTTOM ADJUST ALL SERIES
if (reached_interval()) then # if number 8
display_poles()
end# end if 8
end # End Function number 10
# Begin Function number 11
def atomall()
#TOP ATOMALL
#END OUTFILE1
#BEGIN OUTFILE2
#END OUTFILE2
#BEGIN ATOMHDR1
#emit pre sin 1 $eq_no = 1
$array_tmp1[1] = sin($array_x[1])
$array_tmp1_g[1] = cos($array_x[1])
#emit pre add CONST FULL $eq_no = 1 i = 1
$array_tmp2[1] = $array_const_0D0[1] + $array_tmp1[1]
#emit pre assign xxx $eq_no = 1 i = 1 $min_hdrs = 5
if ( not $array_y_set_initial[1][4]) then # if number 1
if (1 <= MAX_TERMS) then # if number 2
temporary = $array_tmp2[1] * expt($glob_h , (3)) * factorial_3(0,3)
if (4 <= MAX_TERMS) then # if number 3
$array_y[4] = temporary
$array_y_higher[1][4] = temporary
end# end if 3
temporary = temporary / $glob_h * (3.0)
$array_y_higher[2][3] = temporary
temporary = temporary / $glob_h * (2.0)
$array_y_higher[3][2] = temporary
temporary = temporary / $glob_h * (1.0)
$array_y_higher[4][1] = temporary
end# end if 2
end# end if 1
kkk = 2
#END ATOMHDR1
#BEGIN ATOMHDR2
#emit pre sin ID_LINEAR iii = 2 $eq_no = 1
$array_tmp1[2] = $array_tmp1_g[1] * $array_x[2] / 1
$array_tmp1_g[2] = -$array_tmp1[1] * $array_x[2] / 1
#emit pre add CONST FULL $eq_no = 1 i = 2
$array_tmp2[2] = $array_tmp1[2]
#emit pre assign xxx $eq_no = 1 i = 2 $min_hdrs = 5
if ( not $array_y_set_initial[1][5]) then # if number 1
if (2 <= MAX_TERMS) then # if number 2
temporary = $array_tmp2[2] * expt($glob_h , (3)) * factorial_3(1,4)
if (5 <= MAX_TERMS) then # if number 3
$array_y[5] = temporary
$array_y_higher[1][5] = temporary
end# end if 3
temporary = temporary / $glob_h * (4.0)
$array_y_higher[2][4] = temporary
temporary = temporary / $glob_h * (3.0)
$array_y_higher[3][3] = temporary
temporary = temporary / $glob_h * (2.0)
$array_y_higher[4][2] = temporary
end# end if 2
end# end if 1
kkk = 3
#END ATOMHDR2
#BEGIN ATOMHDR3
#emit pre sin ID_LINEAR iii = 3 $eq_no = 1
$array_tmp1[3] = $array_tmp1_g[2] * $array_x[2] / 2
$array_tmp1_g[3] = -$array_tmp1[2] * $array_x[2] / 2
#emit pre add CONST FULL $eq_no = 1 i = 3
$array_tmp2[3] = $array_tmp1[3]
#emit pre assign xxx $eq_no = 1 i = 3 $min_hdrs = 5
if ( not $array_y_set_initial[1][6]) then # if number 1
if (3 <= MAX_TERMS) then # if number 2
temporary = $array_tmp2[3] * expt($glob_h , (3)) * factorial_3(2,5)
if (6 <= MAX_TERMS) then # if number 3
$array_y[6] = temporary
$array_y_higher[1][6] = temporary
end# end if 3
temporary = temporary / $glob_h * (5.0)
$array_y_higher[2][5] = temporary
temporary = temporary / $glob_h * (4.0)
$array_y_higher[3][4] = temporary
temporary = temporary / $glob_h * (3.0)
$array_y_higher[4][3] = temporary
end# end if 2
end# end if 1
kkk = 4
#END ATOMHDR3
#BEGIN ATOMHDR4
#emit pre sin ID_LINEAR iii = 4 $eq_no = 1
$array_tmp1[4] = $array_tmp1_g[3] * $array_x[2] / 3
$array_tmp1_g[4] = -$array_tmp1[3] * $array_x[2] / 3
#emit pre add CONST FULL $eq_no = 1 i = 4
$array_tmp2[4] = $array_tmp1[4]
#emit pre assign xxx $eq_no = 1 i = 4 $min_hdrs = 5
if ( not $array_y_set_initial[1][7]) then # if number 1
if (4 <= MAX_TERMS) then # if number 2
temporary = $array_tmp2[4] * expt($glob_h , (3)) * factorial_3(3,6)
if (7 <= MAX_TERMS) then # if number 3
$array_y[7] = temporary
$array_y_higher[1][7] = temporary
end# end if 3
temporary = temporary / $glob_h * (6.0)
$array_y_higher[2][6] = temporary
temporary = temporary / $glob_h * (5.0)
$array_y_higher[3][5] = temporary
temporary = temporary / $glob_h * (4.0)
$array_y_higher[4][4] = temporary
end# end if 2
end# end if 1
kkk = 5
#END ATOMHDR4
#BEGIN ATOMHDR5
#emit pre sin ID_LINEAR iii = 5 $eq_no = 1
$array_tmp1[5] = $array_tmp1_g[4] * $array_x[2] / 4
$array_tmp1_g[5] = -$array_tmp1[4] * $array_x[2] / 4
#emit pre add CONST FULL $eq_no = 1 i = 5
$array_tmp2[5] = $array_tmp1[5]
#emit pre assign xxx $eq_no = 1 i = 5 $min_hdrs = 5
if ( not $array_y_set_initial[1][8]) then # if number 1
if (5 <= MAX_TERMS) then # if number 2
temporary = $array_tmp2[5] * expt($glob_h , (3)) * factorial_3(4,7)
if (8 <= MAX_TERMS) then # if number 3
$array_y[8] = temporary
$array_y_higher[1][8] = temporary
end# end if 3
temporary = temporary / $glob_h * (7.0)
$array_y_higher[2][7] = temporary
temporary = temporary / $glob_h * (6.0)
$array_y_higher[3][6] = temporary
temporary = temporary / $glob_h * (5.0)
$array_y_higher[4][5] = temporary
end# end if 2
end# end if 1
kkk = 6
#END ATOMHDR5
#BEGIN OUTFILE3
#Top Atomall While Loop-- outfile3
while (kkk <= MAX_TERMS) do # do number 1
#END OUTFILE3
#BEGIN OUTFILE4
#emit sin LINEAR $eq_no = 1
$array_tmp1[kkk] = $array_tmp1_g[kkk - 1] * $array_x[2] / (kkk - 1)
$array_tmp1_g[kkk] = -$array_tmp1[kkk - 1] * $array_x[2] / (kkk - 1)
#emit NOT FULL - FULL add $eq_no = 1
$array_tmp2[kkk] = $array_tmp1[kkk]
#emit assign $eq_no = 1
order_d = 3
if (kkk + order_d <= MAX_TERMS) then # if number 1
if ( not $array_y_set_initial[1][kkk + order_d]) then # if number 2
temporary = $array_tmp2[kkk] * expt($glob_h , (order_d)) * factorial_3((kkk - 1),(kkk + order_d - 1))
$array_y[kkk + order_d] = temporary
$array_y_higher[1][kkk + order_d] = temporary
term = kkk + order_d - 1
adj2 = kkk + order_d - 1
adj3 = 2
while ((term >= 1) and (term <= MAX_TERMS) and (adj3 < order_d + 1)) do # do number 1
if (adj3 <= order_d + 1) then # if number 3
if (adj2 > 0) then # if number 4
temporary = temporary / $glob_h * (adj2)
else
temporary = temporary
end# end if 4
$array_y_higher[adj3][term] = temporary
end# end if 3
term = term - 1
adj2 = adj2 - 1
adj3 = adj3 + 1
end# end do number 1
end# end if 2
end# end if 1
kkk = kkk + 1
end# end do number 1
#BOTTOM ATOMALL
#END OUTFILE4
#BEGIN OUTFILE5
#BOTTOM ATOMALL ???
end # End Function number 12
#END OUTFILE5
# before write_ruby_main_top
# Begin Function number 12
def main()
#BEGIN OUTFILEMAIN
# before first input block
#BEGIN FIRST INPUT BLOCK
#BEGIN BLOCK 1
#BEGIN FIRST INPUT BLOCK
# Digits:=32; ELIMINATED in preodein.rb
max_terms=30
#END BLOCK 1
#END FIRST INPUT BLOCK
#START OF INITS AFTER INPUT BLOCK
$glob_html_log = true
#END OF INITS AFTER INPUT BLOCK
# before generate arrays
$array_y_init= Array.new(MAX_TERMS + 1)
$array_norms= Array.new(MAX_TERMS + 1)
$array_fact_1= Array.new(MAX_TERMS + 1)
$array_1st_rel_error= Array.new(2 + 1)
$array_last_rel_error= Array.new(2 + 1)
$array_type_pole= Array.new(2 + 1)
$array_type_real_pole= Array.new(2 + 1)
$array_type_complex_pole= Array.new(2 + 1)
$array_y= Array.new(MAX_TERMS + 1)
$array_x= Array.new(MAX_TERMS + 1)
$array_tmp0= Array.new(MAX_TERMS + 1)
$array_tmp1_g= Array.new(MAX_TERMS + 1)
$array_tmp1= Array.new(MAX_TERMS + 1)
$array_tmp2= Array.new(MAX_TERMS + 1)
$array_m1= Array.new(MAX_TERMS + 1)
$array_y_higher = array2d(4 + 1 ,MAX_TERMS + 1)
$array_y_higher_work = array2d(4 + 1 ,MAX_TERMS + 1)
$array_y_higher_work2 = array2d(4 + 1 ,MAX_TERMS + 1)
$array_y_set_initial = array2d(2 + 1 ,MAX_TERMS + 1)
$array_given_rad_poles = array2d(2 + 1 ,3 + 1)
$array_given_ord_poles = array2d(2 + 1 ,3 + 1)
$array_rad_test_poles = array2d(2 + 1 ,3 + 1)
$array_ord_test_poles = array2d(2 + 1 ,3 + 1)
$array_fact_2 = array2d(MAX_TERMS + 1 ,MAX_TERMS + 1)
# before generate constants
# before generate globals definition
#Top Generate Globals Definition
$glob_check_sign=1.0
$glob_desired_digits_correct=8.0
$glob_max_estimated_step_error=0.0
$glob_ratio_of_radius=0.1
$glob_percent_done=0.0
$glob_subiter_method=3
$glob_total_exp_sec=0.1
$glob_optimal_expect_sec=0.1
$glob_estimated_size_answer=100.0
$glob_html_log=true
$glob_good_digits=0
$glob_max_opt_iter=10
$glob_dump=false
$glob_djd_debug=true
$glob_display_flag=true
$glob_djd_debug2=true
$glob_sec_in_minute=60
$glob_min_in_hour=60.0
$glob_hours_in_day=24.0
$glob_days_in_year=365
$glob_sec_in_hour=3600
$glob_sec_in_day=86400
$glob_sec_in_year=31536000
$glob_almost_1=0.9990
$glob_clock_sec=0.0
$glob_clock_start_sec=0.0
$glob_not_yet_finished=true
$glob_initial_pass=true
$glob_not_yet_start_msg=true
$glob_reached_optimal_h=false
$glob_optimal_done=false
$glob_disp_incr=0.1
$glob_h=0.1
$glob_diff_rc_fm=0.1
$glob_diff_rc_fmm1=0.1
$glob_diff_rc_fmm2=0.1
$glob_diff_ord_fm=0.1
$glob_diff_ord_fmm1=0.1
$glob_diff_ord_fmm2=0.1
$glob_six_term_ord_save=0.1
$glob_guess_error_rc=0.1
$glob_guess_error_ord=0.1
$glob_max_h=0.1
$glob_min_h=0.000001
$glob_type_given_pole=0
$glob_large_float=9.0e100
$glob_least_given_sing=9.9e100
$glob_least_ratio_sing=9.9e100
$glob_least_3_sing=9.9e100
$glob_least_6_sing=9.9e100
$glob_last_good_h=0.1
$glob_look_poles=false
$glob_neg_h=false
$glob_display_interval=0.0
$glob_next_display=0.0
$glob_dump_analytic=false
$glob_abserr=0.1e-10
$glob_relerr=0.1e-10
$glob_min_pole_est=0.1e+10
$glob_max_hours=0.0
$glob_max_iter=1000
$glob_max_rel_trunc_err=0.1e-10
$glob_max_trunc_err=0.1e-10
$glob_no_eqs=0
$glob_optimal_clock_start_sec=0.0
$glob_optimal_start=0.0
$glob_upper_ratio_limit=1.1
$glob_lower_ratio_limit=0.9
$glob_small_float=0.0
$glob_smallish_float=0.0
$glob_unchanged_h_cnt=0
$glob_warned=false
$glob_warned2=false
$glob_max_sec=10000.0
$glob_orig_start_sec=0.0
$glob_start=0
$glob_curr_iter_when_opt=0
$glob_current_iter=0
$glob_iter=0
$glob_normmax=0.0
$glob_max_minutes=0.0
#Bottom Generate Globals Deninition
# before generate const definition
$array_const_3= Array.new(MAX_TERMS + 1)
$array_const_0D0= Array.new(MAX_TERMS + 1)
# before arrays initialized
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_y_init[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_norms[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_fact_1[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= 2) do # do number 1
$array_1st_rel_error[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= 2) do # do number 1
$array_last_rel_error[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= 2) do # do number 1
$array_type_pole[term] = 0
term = term + 1
end# end do number 1
term = 1
while (term <= 2) do # do number 1
$array_type_real_pole[term] = 0
term = term + 1
end# end do number 1
term = 1
while (term <= 2) do # do number 1
$array_type_complex_pole[term] = 0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_y[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_x[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_tmp0[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_tmp1_g[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_tmp1[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_tmp2[term] = 0.0
term = term + 1
end# end do number 1
term = 1
while (term <= MAX_TERMS) do # do number 1
$array_m1[term] = 0.0
term = term + 1
end# end do number 1
ord = 1
while (ord <=4) do # do number 1
term = 1
while (term <= MAX_TERMS) do # do number 2
$array_y_higher[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
ord = 1
while (ord <=4) do # do number 1
term = 1
while (term <= MAX_TERMS) do # do number 2
$array_y_higher_work[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
ord = 1
while (ord <=4) do # do number 1
term = 1
while (term <= MAX_TERMS) do # do number 2
$array_y_higher_work2[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
ord = 1
while (ord <=2) do # do number 1
term = 1
while (term <= MAX_TERMS) do # do number 2
$array_y_set_initial[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
ord = 1
while (ord <=2) do # do number 1
term = 1
while (term <= 3) do # do number 2
$array_given_rad_poles[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
ord = 1
while (ord <=2) do # do number 1
term = 1
while (term <= 3) do # do number 2
$array_given_ord_poles[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
ord = 1
while (ord <=2) do # do number 1
term = 1
while (term <= 3) do # do number 2
$array_rad_test_poles[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
ord = 1
while (ord <=2) do # do number 1
term = 1
while (term <= 3) do # do number 2
$array_ord_test_poles[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
ord = 1
while (ord <=MAX_TERMS) do # do number 1
term = 1
while (term <= MAX_TERMS) do # do number 2
$array_fact_2[ord][term] = 0.0
term = term + 1
end# end do number 2
ord = ord + 1
end# end do number 1
# before symbols initialized
#BEGIN SYMBOLS INITIALIZATED
zero_ats_ar($array_y)
zero_ats_ar($array_x)
zero_ats_ar($array_tmp0)
zero_ats_ar($array_tmp1_g)
zero_ats_ar($array_tmp1)
zero_ats_ar($array_tmp2)
zero_ats_ar($array_m1)
zero_ats_ar($array_const_3)
$array_const_3[1] = 3
zero_ats_ar($array_const_0D0)
$array_const_0D0[1] = 0.0
zero_ats_ar($array_m1)
$array_m1[1] = -1.0
#END SYMBOLS INITIALIZATED
# before generate factorials init
#Initing Factorial Tables
iiif = 0
while (iiif <= MAX_TERMS) do # do number 1
jjjf = 0
while (jjjf <= MAX_TERMS) do # do number 2
$array_fact_1[iiif] = 0
$array_fact_2[iiif][jjjf] = 0
jjjf = jjjf + 1
end# end do number 2
iiif = iiif + 1
end# end do number 1
#Done Initing Factorial Table
# before generate set diff initial
$array_y_set_initial[1][1] = true
$array_y_set_initial[1][2] = true
$array_y_set_initial[1][3] = true
$array_y_set_initial[1][4] = false
$array_y_set_initial[1][5] = false
$array_y_set_initial[1][6] = false
$array_y_set_initial[1][7] = false
$array_y_set_initial[1][8] = false
$array_y_set_initial[1][9] = false
$array_y_set_initial[1][10] = false
$array_y_set_initial[1][11] = false
$array_y_set_initial[1][12] = false
$array_y_set_initial[1][13] = false
$array_y_set_initial[1][14] = false
$array_y_set_initial[1][15] = false
$array_y_set_initial[1][16] = false
$array_y_set_initial[1][17] = false
$array_y_set_initial[1][18] = false
$array_y_set_initial[1][19] = false
$array_y_set_initial[1][20] = false
$array_y_set_initial[1][21] = false
$array_y_set_initial[1][22] = false
$array_y_set_initial[1][23] = false
$array_y_set_initial[1][24] = false
$array_y_set_initial[1][25] = false
$array_y_set_initial[1][26] = false
$array_y_set_initial[1][27] = false
$array_y_set_initial[1][28] = false
$array_y_set_initial[1][29] = false
$array_y_set_initial[1][30] = false
# before generate init omniout const
$glob_iolevel = INFO
# set default block
#Write Set Defaults
$glob_orig_start_sec = elapsed_time_seconds()
$glob_curr_iter_when_opt = 0
$glob_display_flag = true
$glob_no_eqs = 1
$glob_iter = -1
opt_iter = -1
$glob_max_iter = 50000
$glob_max_hours = 0.0
$glob_max_minutes = 15.0
omniout_str(ALWAYS,"##############ECHO OF PROBLEM#################")
omniout_str(ALWAYS,"##############temp/h3sinpostode.ode#################")
omniout_str(ALWAYS,"diff ( y , x , 3 ) = sin ( x ) ; ")
omniout_str(ALWAYS,"!")
omniout_str(ALWAYS,"#BEGIN FIRST INPUT BLOCK")
omniout_str(ALWAYS,"# Digits:=32; ELIMINATED in preodein.rb")
omniout_str(ALWAYS,"max_terms=30 ")
omniout_str(ALWAYS,"!")
omniout_str(ALWAYS,"#END FIRST INPUT BLOCK")
omniout_str(ALWAYS,"#BEGIN SECOND INPUT BLOCK")
omniout_str(ALWAYS,"x_start=0.1 ")
omniout_str(ALWAYS,"x_end=1.5 ")
omniout_str(ALWAYS,"##")
omniout_str(ALWAYS,"## trouble about Pi/2")
omniout_str(ALWAYS,"##")
omniout_str(ALWAYS,"$array_y_init[0 + 1] = exact_soln_y(x_start)")
omniout_str(ALWAYS,"$array_y_init[1 + 1] = exact_soln_yp(x_start)")
omniout_str(ALWAYS,"$array_y_init[2 + 1] = exact_soln_ypp(x_start)")
omniout_str(ALWAYS,"$glob_look_poles=true ")
omniout_str(ALWAYS,"$glob_max_iter=20 ")
omniout_str(ALWAYS,"#END SECOND INPUT BLOCK")
omniout_str(ALWAYS,"#BEGIN OVERRIDE BLOCK")
omniout_str(ALWAYS,"$glob_desired_digits_correct=10 ")
omniout_str(ALWAYS,"$glob_display_interval=0.01 ")
omniout_str(ALWAYS,"$glob_look_poles=true ")
omniout_str(ALWAYS,"$glob_max_iter=1000000000 ")
omniout_str(ALWAYS,"$glob_max_minutes=30.0 ")
omniout_str(ALWAYS,"$glob_subiter_method=3 ")
omniout_str(ALWAYS,"#END OVERRIDE BLOCK")
omniout_str(ALWAYS,"!")
omniout_str(ALWAYS,"#BEGIN USER DEF BLOCK")
omniout_str(ALWAYS,"def exact_soln_y (x)")
omniout_str(ALWAYS,"return(1.0 + cos(x)) ")
omniout_str(ALWAYS,"end")
omniout_str(ALWAYS,"def exact_soln_yp (x)")
omniout_str(ALWAYS,"return(-sin(x)) ")
omniout_str(ALWAYS,"end")
omniout_str(ALWAYS,"def exact_soln_ypp (x)")
omniout_str(ALWAYS,"return(-cos(x)) ")
omniout_str(ALWAYS,"end")
omniout_str(ALWAYS,"#END USER DEF BLOCK")
omniout_str(ALWAYS,"#######END OF ECHO OF PROBLEM#################")
$glob_unchanged_h_cnt = 0
$glob_warned = false
$glob_warned2 = false
$glob_small_float = 0.0
$glob_smallish_float = 0.0
$glob_large_float = 1.0e100
$glob_almost_1 = 0.99
# before second block
#TOP SECOND INPUT BLOCK
#BEGIN SECOND INPUT BLOCK
#BEGIN BLOCK 2
#END FIRST INPUT BLOCK
#BEGIN SECOND INPUT BLOCK
x_start=0.1
x_end=1.5
##
## trouble about Pi/2
##
$array_y_init[0 + 1] = exact_soln_y(x_start)
$array_y_init[1 + 1] = exact_soln_yp(x_start)
$array_y_init[2 + 1] = exact_soln_ypp(x_start)
$glob_look_poles=true
$glob_max_iter=20
#END SECOND INPUT BLOCK
#BEGIN OVERRIDE BLOCK
$glob_desired_digits_correct=10
$glob_display_interval=0.01
$glob_look_poles=true
$glob_max_iter=1000000000
$glob_max_minutes=30.0
$glob_subiter_method=3
#END OVERRIDE BLOCK
#END BLOCK 2
#END SECOND INPUT BLOCK
#BEGIN INITS AFTER SECOND INPUT BLOCK
$glob_last_good_h = $glob_h
$glob_max_sec = (60.0) * ($glob_max_minutes) + (3600.0) * ($glob_max_hours)
# after second input block
#BEGIN OPTIMIZE CODE
omniout_str(ALWAYS,"START of Optimize")
#Start Series -- INITIALIZE FOR OPTIMIZE
$glob_check_sign = my_check_sign(x_start,x_end)
found_h = false
$glob_h = $glob_min_h * $glob_check_sign
if (float_abs($glob_max_h) < float_abs($glob_h)) then # if number 8
$glob_h = float_abs($glob_max_h) * $glob_check_sign
end# end if 8
if (float_abs($glob_display_interval) < float_abs($glob_h)) then # if number 8
$glob_h = float_abs($glob_display_interval)
end# end if 8
if ($glob_h > 0.0) then # if number 8
$glob_neg_h = false
$glob_display_interval = float_abs($glob_display_interval)
else
$glob_neg_h = true
$glob_display_interval = -float_abs($glob_display_interval)
end# end if 8
chk_data()
best_h = $glob_h
min_value = $glob_large_float
est_answer = est_size_answer()
opt_iter = 1
est_needed_step_err = estimated_needed_step_error(x_start,x_end,$glob_h,est_answer)
omniout_float(ALWAYS,"est_needed_step_err",32,est_needed_step_err,16,"")
estimated_step_error = 0.0
while ((opt_iter <= 100) and ( not found_h)) do # do number 1
omniout_int(ALWAYS,"opt_iter",32,opt_iter,4,"")
$array_x[1] = x_start
$array_x[2] = $glob_h
$glob_next_display = x_start
order_diff = 3
#Start Series $array_y
term_no = 1
while (term_no <= order_diff) do # do number 2
$array_y[term_no] = $array_y_init[term_no] * expt($glob_h , (term_no - 1)) / factorial_1(term_no - 1)
term_no = term_no + 1
end# end do number 2
rows = order_diff
r_order = 1
while (r_order <= rows) do # do number 2
term_no = 1
while (term_no <= (rows - r_order + 1)) do # do number 3
it = term_no + r_order - 1
if (term_no < MAX_TERMS) then # if number 8
$array_y_higher[r_order][term_no] = $array_y_init[it]* expt($glob_h , (term_no - 1)) / ((factorial_1(term_no - 1)))
end# end if 8
term_no = term_no + 1
end# end do number 3
r_order = r_order + 1
end# end do number 2
atomall()
estimated_step_error = test_suggested_h()
omniout_float(ALWAYS,"estimated_step_error",32,estimated_step_error,32,"")
if (((estimated_step_error > est_needed_step_err) and (opt_iter == 1)) or (($glob_check_sign * $glob_h) >= ($glob_check_sign *$glob_max_h ))) then # if number 8
found_h = true
$glob_h = $glob_check_sign * $glob_max_h
best_h = $glob_h
elsif
((estimated_step_error > est_needed_step_err) and ( not found_h)) then # if number 9
$glob_h = $glob_h/2.0
best_h = $glob_h
found_h = true
else
$glob_h = $glob_h*2.0
best_h = $glob_h
end# end if 9
omniout_float(ALWAYS,"best_h",32,best_h,32,"")
opt_iter = opt_iter + 1
end# end do number 1
if (( not found_h) and (opt_iter == 1)) then # if number 9
omniout_str(ALWAYS,"Beginning $glob_h too large.")
found_h = false
end# end if 9
if (opt_iter > 100) then # if number 9
$glob_h = $glob_check_sign * $glob_max_h
found_h = false
end# end if 9
if ($glob_check_sign * $glob_display_interval < $glob_check_sign * $glob_h) then # if number 9
$glob_h = $glob_check_sign * $glob_display_interval
end# end if 9
#END OPTIMIZE CODE
if ($glob_html_log) then # if number 9
html_log_file = File.new("entry.html","w")
end# end if 9
#BEGIN SOLUTION CODE
if (found_h) then # if number 9
omniout_str(ALWAYS,"START of Soultion")
#Start Series -- INITIALIZE FOR SOLUTION
$array_x[1] = x_start
$array_x[2] = $glob_h
$glob_next_display = x_start
order_diff = 3
#Start Series $array_y
term_no = 1
while (term_no <= order_diff) do # do number 1
$array_y[term_no] = $array_y_init[term_no] * expt($glob_h , (term_no - 1)) / factorial_1(term_no - 1)
term_no = term_no + 1
end# end do number 1
rows = order_diff
r_order = 1
while (r_order <= rows) do # do number 1
term_no = 1
while (term_no <= (rows - r_order + 1)) do # do number 2
it = term_no + r_order - 1
if (term_no < MAX_TERMS) then # if number 10
$array_y_higher[r_order][term_no] = $array_y_init[it]* expt($glob_h , (term_no - 1)) / ((factorial_1(term_no - 1)))
end# end if 10
term_no = term_no + 1
end# end do number 2
r_order = r_order + 1
end# end do number 1
current_iter = 1
$glob_clock_start_sec = elapsed_time_seconds()
$glob_clock_sec = elapsed_time_seconds()
$glob_current_iter = 0
$glob_iter = 0
omniout_str(DEBUGL," ")
$glob_reached_optimal_h = true
$glob_optimal_clock_start_sec = elapsed_time_seconds()
while (($glob_current_iter < $glob_max_iter) and ($glob_check_sign * $array_x[1] < $glob_check_sign * x_end ) and ((($glob_clock_sec) - ($glob_orig_start_sec)) < ($glob_max_sec))) do # do number 1
#left paren 0001C
if (reached_interval()) then # if number 10
omniout_str(INFO," ")
omniout_str(INFO,"TOP MAIN SOLVE Loop")
end# end if 10
$glob_iter = $glob_iter + 1
$glob_clock_sec = elapsed_time_seconds()
$glob_current_iter = $glob_current_iter + 1
atomall()
display_alot(current_iter)
if ($glob_look_poles) then # if number 10
#left paren 0004C
check_for_pole()
end# end if 10#was right paren 0004C
if (reached_interval()) then # if number 10
$glob_next_display = $glob_next_display + $glob_display_interval
end# end if 10
$array_x[1] = $array_x[1] + $glob_h
$array_x[2] = $glob_h
#Jump Series $array_y
order_diff = 4
#START PART 1 SUM AND ADJUST
#START SUM AND ADJUST EQ =1
#sum_and_adjust $array_y
#BEFORE ADJUST SUBSERIES EQ =1
ord = 4
calc_term = 1
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[4][iii] = $array_y_higher[4][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 4
calc_term = 1
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 3
calc_term = 2
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[3][iii] = $array_y_higher[3][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 3
calc_term = 2
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 3
calc_term = 1
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[3][iii] = $array_y_higher[3][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 3
calc_term = 1
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 2
calc_term = 3
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[2][iii] = $array_y_higher[2][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 2
calc_term = 3
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 2
calc_term = 2
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[2][iii] = $array_y_higher[2][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 2
calc_term = 2
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 2
calc_term = 1
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[2][iii] = $array_y_higher[2][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 2
calc_term = 1
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 1
calc_term = 4
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[1][iii] = $array_y_higher[1][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 1
calc_term = 4
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 1
calc_term = 3
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[1][iii] = $array_y_higher[1][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 1
calc_term = 3
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 1
calc_term = 2
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[1][iii] = $array_y_higher[1][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 1
calc_term = 2
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#BEFORE ADJUST SUBSERIES EQ =1
ord = 1
calc_term = 1
#adjust_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
$array_y_higher_work[1][iii] = $array_y_higher[1][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1)
iii = iii - 1
end# end do number 2
#AFTER ADJUST SUBSERIES EQ =1
#BEFORE SUM SUBSERIES EQ =1
temp_sum = 0.0
ord = 1
calc_term = 1
#sum_subseries$array_y
iii = MAX_TERMS
while (iii >= calc_term) do # do number 2
temp_sum = temp_sum + $array_y_higher_work[ord][iii]
iii = iii - 1
end# end do number 2
$array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1))
#AFTER SUM SUBSERIES EQ =1
#END SUM AND ADJUST EQ =1
#END PART 1
#START PART 2 MOVE TERMS to REGULAR Array
term_no = MAX_TERMS
while (term_no >= 1) do # do number 2
$array_y[term_no] = $array_y_higher_work2[1][term_no]
ord = 1
while (ord <= order_diff) do # do number 3
$array_y_higher[ord][term_no] = $array_y_higher_work2[ord][term_no]
ord = ord + 1
end# end do number 3
term_no = term_no - 1
end# end do number 2
#END PART 2 HEVE MOVED TERMS to REGULAR Array
end# end do number 1#right paren 0001C
omniout_str(ALWAYS,"Finished!")
if ($glob_iter >= $glob_max_iter) then # if number 10
omniout_str(ALWAYS,"Maximum Iterations Reached before Solution Completed!")
end# end if 10
if (elapsed_time_seconds() - ($glob_orig_start_sec) >= ($glob_max_sec )) then # if number 10
omniout_str(ALWAYS,"Maximum Time Reached before Solution Completed!")
end# end if 10
$glob_clock_sec = elapsed_time_seconds()
omniout_str(INFO,"diff ( y , x , 3 ) = sin ( x ) ; ")
omniout_int(INFO,"Iterations ",32,$glob_iter,4," ")
prog_report(x_start,x_end)
if ($glob_html_log) then # if number 10
logstart(html_log_file)
logitem_str(html_log_file,"2014-01-08T03:37:20-06:00")
logitem_str(html_log_file,"Ruby")
logitem_str(html_log_file,"h3sin")
logitem_str(html_log_file,"diff ( y , x , 3 ) = sin ( x ) ; ")
logitem_float(html_log_file,x_start)
logitem_float(html_log_file,x_end)
logitem_float(html_log_file,$array_x[1])
logitem_float(html_log_file,$glob_h)
logitem_str(html_log_file,"16")
logitem_good_digits(html_log_file,$array_last_rel_error[1])
logitem_integer(html_log_file,MAX_TERMS)
if ($glob_least_given_sing < $glob_large_float) then # if number 11
logitem_float(html_log_file,$glob_least_given_sing)
else
logitem_str(html_log_file,"NOT GIVEN")
end# end if 11
if ($glob_least_ratio_sing < $glob_large_float) then # if number 11
logitem_float(html_log_file,$glob_least_ratio_sing)
else
logitem_str(html_log_file,"NONE")
end# end if 11
if ($glob_least_3_sing < $glob_large_float) then # if number 11
logitem_float(html_log_file,$glob_least_3_sing)
else
logitem_str(html_log_file,"NONE")
end# end if 11
if ($glob_least_6_sing < $glob_large_float) then # if number 11
logitem_float(html_log_file,$glob_least_6_sing)
else
logitem_str(html_log_file,"NONE")
end# end if 11
logitem_integer(html_log_file,$glob_iter)
logitem_time(html_log_file,($glob_clock_sec))
if ($glob_percent_done < 100.0) then # if number 11
logitem_time(html_log_file,($glob_total_exp_sec))
0
else
logitem_str(html_log_file,"Done")
0
end# end if 11
log_revs(html_log_file," 223 | ")
logitem_str(html_log_file,"h3sin diffeq.rb")
logitem_str(html_log_file,"h3sin Ruby results")
logitem_str(html_log_file,"All Tests - Ruby only - to save time")
logend(html_log_file)
end# end if 10
if ($glob_html_log) then # if number 10
html_log_file.close;
end# end if 10
end# end if 9
#END OUTFILEMAIN
end # End Function number 12
main()