This file was generated by DECSS: Descriptive English for C Statements and Subroutines. The C source file for it was called 'demunck.c'. The author adds this comment here: " deMunck's multilayer model. " Now back to the code. Note: This program makes use of the system file 'time.h'. Note: This program makes use of the system file 'stdio.h'. Note: This program makes use of the system file 'stdlib.h'. Note: This program makes use of the system file 'math.h'. Note: This program makes use of the system file 'malloc.h'. Note: This program makes use of the system file 'limits.h'. Note: This program makes use of the system file 'values.h'. Note: This program makes use of the user file 'matrixmalloc.h'. Note: we define Pi to mean "3.14159265358979". Note: we define pi to mean "3.14159265358979". Specifying the type integer, allocate the variables 'I', 'J', and 'K'. Specifying the type double precision floating point number, allocate the variable pointer 'x'. Specifying the type double precision floating point number, allocate the variable 'rad'. Specifying the type character, allocate the variable pointer 'dummy'. Specifying the type double precision floating point number, allocate the variables pointer 'r', pointer 'eps', and pointer 'eta'. Specifying the type integer, allocate the variable 'layers'. Specifying the type double precision floating point number, allocate the variables 'Mrad' and 'Mtan'. This is the definition of the function 'ijkton'. It returns a value of the type integer. The function 'ijkton' has the following parameters: integer 'i', integer 'j', and integer 'k'. And now comes the instruction set for the function 'ijkton'. Here we end the current subroutine. We return the following value: "`i' plus `I' times the parenthetical expression `j' minus 1 now plus `I' times `J' times the parenthetical expression `k' minus 1". And here ends the definition of the function 'ijkton'. This is the definition of the function 'nu'. It returns a value of the type double precision floating point number. The function 'nu' has the following parameters: integer 'j' and integer 'n'. And now comes the instruction set for the function 'nu'. Here we end the current subroutine. We return the following value: "the parenthetical expression -1 plus the function `sqrt' as applied to the argument '1 plus 4 times `n' times the parenthetical expression `n' plus 1 now times array eta's element at address (`j') divided by array eps's element at address (`j')' now divided by 2". And here ends the definition of the function 'nu'. This is the definition of the function 'smatrix'. It returns a value of the type 2nd-level pointer to a double precision floating point number. The function 'smatrix' has the following parameters: integer 'sign', integer 'j', double precision floating point number 'r_a', double precision floating point number 'r_b', and integer 'n'. The local variables for the function 'smatrix' begin here: Specifying the type double precision floating point number, allocate the variable 'nu_val'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp'. And now comes the instruction set for the function 'smatrix'. Assign to `temp' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `nu_val' the value "the function `nu' as applied to the arguments '`j'' and '`n''". Execute the following part if the expression "`sign' checked for equality against -1" evaluates as positive: A compound statement begins here. And now some statements. Assign to array temp's element at address (1,1) the value "`nu_val' times `r_a' divided by the 2-layered parenthetical expression 2 times `nu_val' plus 1 now times `r_b'". Assign to array temp's element at address (1,2) the value "minus `r_a' divided by the 2-layered parenthetical expression 2 times `nu_val' plus 1 now times array eps's element at address (`j')". Assign to array temp's element at address (2,1) the value "minus the parenthetical expression `nu_val' plus 1 now times `nu_val' times array eps's element at address (`j') divided by the 2-layered parenthetical expression 2 times `nu_val' plus 1 now times `r_b'". Assign to array temp's element at address (2,2) the value "the parenthetical expression `nu_val' plus 1 now divided by the parenthetical expression 2 times `nu_val' plus 1". A compound block of instructions for an if block ends here. Execute the following part if the expression "`sign' checked for equality against 1" evaluates as positive: A compound statement begins here. And now some statements. Assign to array temp's element at address (1,1) the value "the parenthetical expression `nu_val' plus 1 now divided by the parenthetical expression 2 times `nu_val' plus 1". Assign to array temp's element at address (1,2) the value "`r_b' divided by the 2-layered parenthetical expression 2 times `nu_val' plus 1 now times array eps's element at address (`j')". Assign to array temp's element at address (2,1) the value "the parenthetical expression `nu_val' plus 1 now times `nu_val' times array eps's element at address (`j') divided by the 2-layered parenthetical expression 2 times `nu_val' plus 1 now times `r_a'". Assign to array temp's element at address (2,2) the value "`nu_val' times `r_b' divided by the 2-layered parenthetical expression 2 times `nu_val' plus 1 now times `r_a'". A compound block of instructions for an if block ends here. Here we end the current subroutine. We return the following value: "`temp'". And here ends the definition of the function 'smatrix'. The author adds this comment here: " void matrix_prod_2x2(double **a, double **b, double ** prod){ prod[1][1] = a[1][1]*b[1][1]+a[1][2]*b[2][1]; prod[1][2] = a[1][1]*b[2][1]+a[1][2]*b[2][2]; prod[2][1] = a[2][1]*b[1][1]+a[2][2]*b[2][1]; prod[2][2] = a[2][1]*b[2][1]+a[2][2]*b[2][2]; } " Now back to the code. This is the definition of the function 'matrix_prod_2x2'. It returns a value of the type void. The function 'matrix_prod_2x2' has the following parameters: double precision floating point number 2nd-level pointer 'a', double precision floating point number 2nd-level pointer 'b', and double precision floating point number 2nd-level pointer 'prod'. And now comes the instruction set for the function 'matrix_prod_2x2'. Assign to array prod's element at address (1,1) the value "array a's element at address (1,1) times array b's element at address (1,1) plus array a's element at address (1,2) times array b's element at address (2,1)". Assign to array prod's element at address (1,2) the value "array a's element at address (1,1) times array b's element at address (1,2) plus array a's element at address (1,2) times array b's element at address (2,2)". Assign to array prod's element at address (2,1) the value "array a's element at address (2,1) times array b's element at address (1,1) plus array a's element at address (2,2) times array b's element at address (2,1)". Assign to array prod's element at address (2,2) the value "array a's element at address (2,1) times array b's element at address (1,2) plus array a's element at address (2,2) times array b's element at address (2,2)". And here ends the definition of the function 'matrix_prod_2x2'. This is the definition of the function 'clear_2x2'. It returns a value of the type void. The function 'clear_2x2' has the following parameters: double precision floating point number 2nd-level pointer 'matrix'. And now comes the instruction set for the function 'clear_2x2'. The author adds this comment here: " free(matrix[2]); " Now back to the code. Perform the function `free' as applied to the argument 'array matrix's element at address (1)'. The author adds this comment here: " free(matrix[0]); " Now back to the code. Perform the function `free' as applied to the argument '`matrix''. And here ends the definition of the function 'clear_2x2'. Note: The current context is interrupted. The next section is used only if we meet this macro condition: "0". This is the definition of the function 'other_matrix_sum_2x2'. It returns a value of the type 2nd-level pointer to a double precision floating point number. The function 'other_matrix_sum_2x2' has the following parameters: double precision floating point number 2nd-level pointer 'a' and double precision floating point number 2nd-level pointer 'b'. The local variables for the function 'other_matrix_sum_2x2' begin here: Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp'. And now comes the instruction set for the function 'other_matrix_sum_2x2'. Assign to `temp' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to array temp's element at address (1,1) the value "array a's element at address (1,1) plus array b's element at address (1,1)". Assign to array temp's element at address (1,2) the value "array a's element at address (1,2) plus array b's element at address (1,2)". Assign to array temp's element at address (2,2) the value "array a's element at address (2,2) plus array b's element at address (2,2)". Assign to array temp's element at address (2,1) the value "array a's element at address (2,1) plus array b's element at address (2,1)". Here we end the current subroutine. We return the following value: "`temp'". And here ends the definition of the function 'other_matrix_sum_2x2'. Note: This ends a conditional inclusion section. This is the definition of the function 'matrix_sum_2x2'. It returns a value of the type void. The function 'matrix_sum_2x2' has the following parameters: double precision floating point number 2nd-level pointer 'a' and double precision floating point number 2nd-level pointer 'b'. And now comes the instruction set for the function 'matrix_sum_2x2'. Increase array a's element at address (1,1) by "array b's element at address (1,1)". Increase array a's element at address (1,2) by "array b's element at address (1,2)". Increase array a's element at address (2,2) by "array b's element at address (2,2)". Increase array a's element at address (2,1) by "array b's element at address (2,1)". And here ends the definition of the function 'matrix_sum_2x2'. This is the definition of the function 'copy_2x2'. It returns a value of the type void. The function 'copy_2x2' has the following parameters: double precision floating point number 2nd-level pointer 'a' and double precision floating point number 2nd-level pointer 'b'. And now comes the instruction set for the function 'copy_2x2'. Assign to array a's element at address (1,1) the value "array b's element at address (1,1)". Assign to array a's element at address (1,2) the value "array b's element at address (1,2)". Assign to array a's element at address (2,1) the value "array b's element at address (2,1)". Assign to array a's element at address (2,2) the value "array b's element at address (2,2)". And here ends the definition of the function 'copy_2x2'. This is the definition of the function 'matrix_rascal_2x2'. It returns a value of the type void. The function 'matrix_rascal_2x2' has the following parameters: double precision floating point number 2nd-level pointer 'a' and double precision floating point number 'b'. And now comes the instruction set for the function 'matrix_rascal_2x2'. Multiply array a's element at address (1,1) by "`b'". Multiply array a's element at address (1,2) by "`b'". Multiply array a's element at address (2,1) by "`b'". Multiply array a's element at address (2,2) by "`b'". And here ends the definition of the function 'matrix_rascal_2x2'. This is the definition of the function 'lambda'. It returns a value of the type double precision floating point number. The function 'lambda' has the following parameters: integer 'j' and double precision floating point number 'nu_'. And now comes the instruction set for the function 'lambda'. Here we end the current subroutine. We return the following value: "the function `pow' as applied to the arguments 'array r's element at address (`j' plus 1) divided by array r's element at address (`j')' and '`nu_''". And here ends the definition of the function 'lambda'. This is the definition of the function 'u_matrix'. It returns a value of the type void. The function 'u_matrix' has the following parameters: integer 'n', integer 'j', double precision floating point number 'r_a', double precision floating point number 'r_b', and double precision floating point number 2nd-level pointer 'out'. The local variables for the function 'u_matrix' begin here: Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'sminus'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'splus'. Specifying the type double precision floating point number, allocate the variable 'tempscalar'. And now comes the instruction set for the function 'u_matrix'. Assign to `tempscalar' the value "`r_a' divided by `r_b'". Assign to `tempscalar' the value "the function `pow' as applied to the arguments '`tempscalar'' and '-2 times the function `nu' as applied to the arguments '`j'' and '`n'' minus 2'". Assign to `splus' the value "the function `smatrix' as applied to the arguments '1', '`j'', '`r_a'', '`r_b'', and '`n''". Assign to `sminus' the value "the function `smatrix' as applied to the arguments '-1', '`j'', '`r_a'', '`r_b'', and '`n''". Perform the function `matrix_rascal_2x2' as applied to the arguments '`sminus'' and '`tempscalar''. Perform the function `matrix_sum_2x2' as applied to the arguments '`splus'' and '`sminus''. Perform the function `copy_2x2' as applied to the arguments '`out'' and '`splus''. The author adds this comment here: " preventing a memory leak. " Now back to the code. Perform the function `clear_2x2' as applied to the argument '`splus''. Perform the function `clear_2x2' as applied to the argument '`sminus''. And here ends the definition of the function 'u_matrix'. This is the definition of the function 'R'. It returns a value of the type double precision floating point number. The function 'R' has the following parameters: integer 'n', double precision floating point number 'r_o', double precision floating point number 'r_e', integer 'Jo', and integer 'Je'. The local variables for the function 'R' begin here: Specifying the type floating point number, allocate the variables 'nu_', 'nu_Jo', and 'nu_Je'. Specifying the type integer, allocate the variable 'j'. Specifying the type double precision floating point number, allocate the variables 'temp' and 'temp2'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2a'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2b'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2c'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2d'. And now comes the instruction set for the function 'R'. Assign to `temp2x2' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `temp2x2a' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `temp2x2b' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `temp2x2c' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `temp2x2d' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `nu_Jo' the value "the function `nu' as applied to the arguments '`Jo'' and '`n''". Assign to `nu_Je' the value "the function `nu' as applied to the arguments '`Je'' and '`n''". Perform the function `u_matrix' as applied to the arguments '`n'', '`Je'', 'array r's element at address (`Je')', '`r_e'', and '`temp2x2a''. Perform the function `u_matrix' as applied to the arguments '`n'', '`Je' minus 1', 'array r's element at address (`Je' minus 1)', 'array r's element at address (`Je')', and '`temp2x2c''. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "`Je' minus 2". We continue the loop as long as the following expression comes out positive: "`j' checked to be greater than or equal to 1". At the end of each repetition we perform this to increment things: Increment `j' down by one. This is the loop: A compound statement begins here. And now some statements. Perform the function `u_matrix' as applied to the arguments '`n'', '`j'', 'array r's element at address (`j')', 'array r's element at address (`j' plus 1)', and '`temp2x2''. Perform the function `copy_2x2' as applied to the arguments '`temp2x2d'' and '`temp2x2c''. Perform the function `matrix_prod_2x2' as applied to the arguments '`temp2x2d'', '`temp2x2'', and '`temp2x2c''. A compound block of instructions for a for loop ends here. Perform the function `copy_2x2' as applied to the arguments '`temp2x2d'' and '`temp2x2c''. Perform the function `matrix_prod_2x2' as applied to the arguments '`temp2x2d'', '`temp2x2a'', and '`temp2x2c''. Assign to `temp' the value "array temp2x2c's element at address (2,2)". The author adds this comment here: " fix this line !!! " Now back to the code. Perform the function `u_matrix' as applied to the arguments '`n'', '`Jo'', '`r_o'', 'array r's element at address (`Jo' plus 1)', and '`temp2x2c''. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "`layers' minus 1". We continue the loop as long as the following expression comes out positive: "`j' checked to be greater than `Jo'". At the end of each repetition we perform this to increment things: Increment `j' down by one. This is the loop: A compound statement begins here. And now some statements. Perform the function `copy_2x2' as applied to the arguments '`temp2x2d'' and '`temp2x2c''. Perform the function `u_matrix' as applied to the arguments '`n'', '`j'', 'array r's element at address (`j')', 'array r's element at address (`j' plus 1)', and '`temp2x2''. Perform the function `matrix_prod_2x2' as applied to the arguments '`temp2x2d'', '`temp2x2'', and '`temp2x2c''. A compound block of instructions for a for loop ends here. Multiply `temp' by "array temp2x2c's element at address (1,2)". Perform the function `u_matrix' as applied to the arguments '`n'', '`layers' minus 1', 'array r's element at address (`layers' minus 1)', 'array r's element at address (`layers')', and '`temp2x2c''. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "`layers' minus 2". We continue the loop as long as the following expression comes out positive: "`j' checked to be greater than or equal to 1". At the end of each repetition we perform this to increment things: Increment `j' down by one. This is the loop: A compound statement begins here. And now some statements. Perform the function `copy_2x2' as applied to the arguments '`temp2x2d'' and '`temp2x2c''. Perform the function `u_matrix' as applied to the arguments '`n'', '`j'', 'array r's element at address (`j')', 'array r's element at address (`j' plus 1)', and '`temp2x2''. Perform the function `matrix_prod_2x2' as applied to the arguments '`temp2x2d'', '`temp2x2'', and '`temp2x2c''. A compound block of instructions for a for loop ends here. Divide `temp' by "minus `r_e' times `r_e' times array temp2x2c's element at address (2,2)". Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "`Jo' minus 1". We continue the loop as long as the following expression comes out positive: "`j' checked to be less than or equal to `Je'". At the end of each repetition we perform this to increment things: Increment `j' up by one. This is the loop: A compound statement begins here. And now some statements. Assign to `nu_' the value "the function `nu' as applied to the arguments '`j'' and '`n''". Multiply `temp' by "the function `lambda' as applied to the arguments '`j'' and '`nu_'' times the function `pow' as applied to the arguments '`r_o' divided by array r's element at address (`Jo')' and '`nu_Jo'' divided by the function `pow' as applied to the arguments '`r_e' divided by array r's element at address (`Je')' and '`nu_Je''". A compound block of instructions for a for loop ends here. Perform the function `clear_2x2' as applied to the argument '`temp2x2''. Perform the function `clear_2x2' as applied to the argument '`temp2x2a''. Perform the function `clear_2x2' as applied to the argument '`temp2x2b''. Perform the function `clear_2x2' as applied to the argument '`temp2x2c''. Perform the function `clear_2x2' as applied to the argument '`temp2x2d''. Here we end the current subroutine. We return the following value: "`temp'". And here ends the definition of the function 'R'. This is the definition of the function 'Rprime'. It returns a value of the type double precision floating point number. The function 'Rprime' has the following parameters: integer 'n', double precision floating point number 'r_o', double precision floating point number 'r_e', integer 'Jo', and integer 'Je'. The local variables for the function 'Rprime' begin here: Specifying the type integer, allocate the variable 'j'. Specifying the type floating point number, allocate the variables 'nu_', 'nu_Jo', and 'nu_Je'. Specifying the type double precision floating point number, allocate the variables 'temp' and 'temp2'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2a'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2b'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2c'. Specifying the type double precision floating point number, allocate the variable 2nd-level pointer 'temp2x2d'. And now comes the instruction set for the function 'Rprime'. Assign to `temp2x2' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `temp2x2a' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `temp2x2b' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `temp2x2c' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `temp2x2d' the value "the function `fmatrix' as applied to the arguments '2' and '2'". Assign to `nu_Jo' the value "the function `nu' as applied to the arguments '`Jo'' and '`n''". Assign to `nu_Je' the value "the function `nu' as applied to the arguments '`Je'' and '`n''". Perform the function `u_matrix' as applied to the arguments '`n'', '`Je'', 'array r's element at address (`Je')', '`r_e'', and '`temp2x2a''. Perform the function `u_matrix' as applied to the arguments '`n'', '`Je' minus 1', 'array r's element at address (`Je' minus 1)', 'array r's element at address (`Je')', and '`temp2x2c''. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "`Je' minus 2". We continue the loop as long as the following expression comes out positive: "`j' checked to be greater than or equal to 1". At the end of each repetition we perform this to increment things: Increment `j' down by one. This is the loop: A compound statement begins here. And now some statements. Perform the function `u_matrix' as applied to the arguments '`n'', '`j'', 'array r's element at address (`j')', 'array r's element at address (`j' plus 1)', and '`temp2x2''. Perform the function `copy_2x2' as applied to the arguments '`temp2x2d'' and '`temp2x2c''. Perform the function `matrix_prod_2x2' as applied to the arguments '`temp2x2d'', '`temp2x2'', and '`temp2x2c''. A compound block of instructions for a for loop ends here. Perform the function `copy_2x2' as applied to the arguments '`temp2x2d'' and '`temp2x2c''. Perform the function `matrix_prod_2x2' as applied to the arguments '`temp2x2d'', '`temp2x2a'', and '`temp2x2c''. Assign to `temp' the value "array temp2x2c's element at address (2,2)". The author adds this comment here: " fix this line !!! " Now back to the code. Perform the function `u_matrix' as applied to the arguments '`n'', '`Jo'', '`r_o'', 'array r's element at address (`Jo' plus 1)', and '`temp2x2c''. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "`layers' minus 1". We continue the loop as long as the following expression comes out positive: "`j' checked to be greater than `Jo'". At the end of each repetition we perform this to increment things: Increment `j' down by one. This is the loop: A compound statement begins here. And now some statements. Perform the function `copy_2x2' as applied to the arguments '`temp2x2d'' and '`temp2x2c''. Perform the function `u_matrix' as applied to the arguments '`n'', '`j'', 'array r's element at address (`j')', 'array r's element at address (`j' plus 1)', and '`temp2x2''. Perform the function `matrix_prod_2x2' as applied to the arguments '`temp2x2d'', '`temp2x2'', and '`temp2x2c''. A compound block of instructions for a for loop ends here. Multiply `temp' by "array temp2x2c's element at address (2,2)". Perform the function `u_matrix' as applied to the arguments '`n'', '`layers' minus 1', 'array r's element at address (`layers' minus 1)', 'array r's element at address (`layers')', and '`temp2x2c''. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "`layers' minus 2". We continue the loop as long as the following expression comes out positive: "`j' checked to be greater than or equal to 1". At the end of each repetition we perform this to increment things: Increment `j' down by one. This is the loop: A compound statement begins here. And now some statements. Perform the function `copy_2x2' as applied to the arguments '`temp2x2d'' and '`temp2x2c''. Perform the function `u_matrix' as applied to the arguments '`n'', '`j'', 'array r's element at address (`j')', 'array r's element at address (`j' plus 1)', and '`temp2x2''. Perform the function `matrix_prod_2x2' as applied to the arguments '`temp2x2d'', '`temp2x2'', and '`temp2x2c''. A compound block of instructions for a for loop ends here. Divide `temp' by "minus `r_e' times `r_e' times array temp2x2c's element at address (2,2) times array eps's element at address (`Jo')". Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "`Je'". We continue the loop as long as the following expression comes out positive: "`j' checked to be less than or equal to `Jo' minus 1". At the end of each repetition we perform this to increment things: Increment `j' up by one. This is the loop: A compound statement begins here. And now some statements. The author adds this comment here: " FIX! " Now back to the code. Assign to `nu_' the value "the function `nu' as applied to the arguments '`j'' and '`n''". Multiply `temp' by "the function `lambda' as applied to the arguments '`j'' and '`nu_'' times the function `pow' as applied to the arguments '`r_o' divided by array r's element at address (`Jo')' and '`nu_Jo'' divided by the function `pow' as applied to the arguments '`r_e' divided by array r's element at address (`Je')' and '`nu_Je''". A compound block of instructions for a for loop ends here. Perform the function `clear_2x2' as applied to the argument '`temp2x2''. Perform the function `clear_2x2' as applied to the argument '`temp2x2a''. Perform the function `clear_2x2' as applied to the argument '`temp2x2b''. Perform the function `clear_2x2' as applied to the argument '`temp2x2c''. Perform the function `clear_2x2' as applied to the argument '`temp2x2d''. Here we end the current subroutine. We return the following value: "`temp'". And here ends the definition of the function 'Rprime'. This is the definition of the function 'find_Jo'. It returns a value of the type integer. The function 'find_Jo' has the following parameters: floating point number 'r_o'. The local variables for the function 'find_Jo' begin here: Specifying the type integer, allocate the variable 'temp' (initialized to 1). And now comes the instruction set for the function 'find_Jo'. Here we go into a repetition loop which we stay in as long as the following expression evaluates as positive: 'array r's element at address (`temp') checked to be greater than `r_o'' Increment `temp' up by one. Now ends the repetition loop. Increment `temp' down by one. Here we end the current subroutine. We return the following value: "`temp'". And here ends the definition of the function 'find_Jo'. This is the definition of the function 'find_Je'. It returns a value of the type integer. The function 'find_Je' has the following parameters: floating point number 'r_e'. The local variables for the function 'find_Je' begin here: Specifying the type integer, allocate the variable 'temp' (initialized to 1). And now comes the instruction set for the function 'find_Je'. Here we go into a repetition loop which we stay in as long as the following expression evaluates as positive: 'array r's element at address (`temp') checked to be greater than `r_e'' Increment `temp' up by one. Now ends the repetition loop. Increment `temp' down by one. Here we end the current subroutine. We return the following value: "`temp'". And here ends the definition of the function 'find_Je'. This is the definition of the function 'plgndr'. It returns a value of the type double precision floating point number. The function 'plgndr' has the following parameters: integer 'l', integer 'm', and floating point number 'x'. The local variables for the function 'plgndr' begin here: Specifying the type double precision floating point number, allocate the variables 'fact', 'pll', 'pmm', 'pmmp1', and 'somx2'. Specifying the type integer, allocate the variables 'i' and 'll'. And now comes the instruction set for the function 'plgndr'. Assign to `pmm' the value "the floating point number 1.0". Execute the following part if the expression "`m' checked to be greater than 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `somx2' the value "the function `sqrt' as applied to the argument 'the parenthetical expression the floating point number 1.0 minus `x' now times the parenthetical expression the floating point number 1.0 plus `x' now'". Assign to `fact' the value "the floating point number 1.0". Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `i' the value "1". We continue the loop as long as the following expression comes out positive: "`i' checked to be less than or equal to `m'". At the end of each repetition we perform this to increment things: Increment `i' up by one. This is the loop: A compound statement begins here. And now some statements. Multiply `pmm' by "minus `fact' times `somx2'". Increase `fact' by "the floating point number 2.0". A compound block of instructions for a for loop ends here. A compound block of instructions for an if block ends here. Execute the following part if the expression "`l' checked for equality against `m'" evaluates as positive: A compound statement begins here. And now some statements. Here we end the current subroutine. We return the following value: "`pmm'". A compound block of instructions for an if block ends here. If the expression evaluated as negative, execute this section: A compound statement begins here. And now some statements. Assign to `pmmp1' the value "`x' times the parenthetical expression 2 times `m' plus 1 now times `pmm'". Execute the following part if the expression "`l' checked for equality against the parenthetical expression `m' plus 1 now" evaluates as positive: A compound statement begins here. And now some statements. Here we end the current subroutine. We return the following value: "`pmmp1'". A compound block of instructions for an if block ends here. If the expression evaluated as negative, execute this section: A compound statement begins here. And now some statements. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `ll' the value "`m' plus 2". We continue the loop as long as the following expression comes out positive: "`ll' checked to be less than or equal to `l'". At the end of each repetition we perform this to increment things: Increment `ll' up by one. This is the loop: A compound statement begins here. And now some statements. Assign to `pll' the value "the parenthetical expression `x' times the parenthetical expression 2 times `ll' minus 1 now times `pmmp1' minus the parenthetical expression `ll' plus `m' minus 1 now times `pmm' now divided by the parenthetical expression `ll' minus `m'". Assign to `pmm' the value "`pmmp1'". Assign to `pmmp1' the value "`pll'". A compound block of instructions for a for loop ends here. Here we end the current subroutine. We return the following value: "`pll'". A compound block of instructions for an else block ends here. A compound block of instructions for an else block ends here. And here ends the definition of the function 'plgndr'. The author adds this comment here: " double nu(int j,int n) { return (-1+sqrt(1+4*n*(n+1)*eta[j]/eps[j]))/2; } " Now back to the code. This is the definition of the function 'psifun_demunck'. It returns a value of the type double precision floating point number. The function 'psifun_demunck' has the following parameters: double precision floating point number 'r_o', double precision floating point number 'r_e', double precision floating point number 'theta', double precision floating point number 'phi', double precision floating point number 'Mrad1', and double precision floating point number 'Mtan1'. The local variables for the function 'psifun_demunck' begin here: Specifying the type double precision floating point number, allocate the variables 'tolerance', 'psi', 'psiprev', and 'small'. Specifying the type integer, allocate the variables 'flag', 'n', 'Jo', and 'Je'. And now comes the instruction set for the function 'psifun_demunck'. Assign to `tolerance' the value "the function `pow' as applied to the arguments '10' and '-4'". Assign to `n' the value "1". The author adds this comment here: " beware this was 1 previously. " Now back to the code. Assign to `psiprev' the value "0". Assign to `Jo' the value "the function `find_Jo' as applied to the argument '`r_o''". Assign to `Je' the value "the function `find_Je' as applied to the argument '`r_e''". Assign to `psi' the value "0". Assign to `flag' the value "0". Here we go into a repetition loop which we stay in as long as the following expression evaluates as positive: 'the logical negation of `flag'' A compound statement begins here. And now some statements. Execute the following part if the expression "`n' modulo 100 checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Execute the following part if the expression "the function `fabs' as applied to the argument '`psi' minus `psiprev'' checked to be greater than the function `fabs' as applied to the argument '`psi''" evaluates as positive: A compound statement begins here. And now some statements. Perform the function `printf' as applied to the argument '"x"'. Perform the function `fflush' as applied to the argument '`NULL''. A compound block of instructions for an if block ends here. If the expression evaluated as negative, execute this section: A compound statement begins here. And now some statements. Perform the function `printf' as applied to the argument '"1"'. Perform the function `fflush' as applied to the argument '`NULL''. A compound block of instructions for an else block ends here. A compound block of instructions for an if block ends here. Assign to `psiprev' the value "`psi'". Increase `psi' by "the parenthetical expression minus `Mtan1' times the function `cos' as applied to the argument '`phi'' times the parenthetical expression 2 times `n' plus 1 now times the function `R' as applied to the arguments '`n'', '`r_o'', '`r_e'', '`Jo'', and '`Je'' times the function `plgndr' as applied to the arguments '`n'', '1', and 'the function `cos' as applied to the argument '`theta''' divided by the parenthetical expression the function `sqrt' as applied to the argument '1 minus the function `cos' as applied to the argument '`theta'' times the function `cos' as applied to the argument '`theta''' times the parenthetical expression `r_o' times 4 times `Pi' (now drop 1 layers of context ) plus the parenthetical expression `Mrad1' times the parenthetical expression 2 times `n' plus 1 now times the function `Rprime' as applied to the arguments '`n'', '`r_o'', '`r_e'', '`Jo'', and '`Je'' times the function `plgndr' as applied to the arguments '`n'', '0', and 'the function `cos' as applied to the argument '`theta''' divided by the parenthetical expression 4 times `Pi' (now drop 2 layers of context)". Execute the following part if the expression "`psi' logically anded by the function `fabs' as applied to the argument 'the parenthetical expression `psi' minus `psiprev' now divided by `psi'' checked to be less than `tolerance'" evaluates as positive: Assign to `flag' the value "1". Execute the following part if the expression "`n' checked to be greater than 10 logically anded by `psi' checked for equality against 0" evaluates as positive: Assign to `flag' the value "1". Increment `n' up by one. A compound block of instructions for a while loop ends here. Now ends the repetition loop. Perform the function `printf' as applied to the argument '"."'. Perform the function `fflush' as applied to the argument '`NULL''. Here we end the current subroutine. We return the following value: "`psi'". And here ends the definition of the function 'psifun_demunck'. This is the definition of the function 'record_surface'. It returns a value of the type void. The function 'record_surface' has the following parameters: double precision floating point number 'rad_min', double precision floating point number 'rad_max', integer 'orientation', double precision floating point number 'mrad', double precision floating point number 'mtan', integer 'surfmode', integer 'poweradj', and character pointer 'outfilename'. The local variables for the function 'record_surface' begin here: Specifying the type double precision floating point number, allocate the variables 'booger', 'booger2', 'xc', 'yc', 'zc', 'az', 'el', 'wt1', 'wt2', and 'subrad'. Specifying the type integer, allocate the variables 'i', 'j', 'k', 'k2', 'kb', 'k2b', and 'dummy'. Specifying the type double precision floating point number, allocate the variables 'temp', 'voxel_radius', 'r_e', and 'r_o'. Specifying the type FILE, allocate the variable pointer 'surfile'. And now comes the instruction set for the function 'record_surface'. Assign to `surfile' the value "the function `fopen' as applied to the arguments '`outfilename'' and '"w"'". Perform the function `printf' as applied to the argument '"Recording the surface.\n"'. Assign to `r_o' the value "array r's element at address (0)". Assign to `dummy' the value "0". Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `i' the value "1". We continue the loop as long as the following expression comes out positive: "`i' checked to be less than or equal to `I'". At the end of each repetition we perform this to increment things: Increment `i' up by one. This is the loop: A compound statement begins here. And now some statements. Assign to `xc' the value "a casting into the type 'double precision floating point number' of `i' minus a casting into the type 'double precision floating point number' of `I' divided by 2". Perform the function `printf' as applied to the arguments '"%d"' and '`i' modulo 10'. Execute the following part if the expression "`dummy' checked to be greater than 0" evaluates as positive: Perform the function `printf' as applied to the argument '"."'. Perform the function `fflush' as applied to the argument '`NULL''. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "1". We continue the loop as long as the following expression comes out positive: "`j' checked to be less than or equal to `J'". At the end of each repetition we perform this to increment things: Increment `j' up by one. This is the loop: A compound statement begins here. And now some statements. Assign to `yc' the value "a casting into the type 'double precision floating point number' of `j' minus a casting into the type 'double precision floating point number' of `J' divided by 2". Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `k' the value "1". We continue the loop as long as the following expression comes out positive: "`k' checked to be less than or equal to `K'". At the end of each repetition we perform this to increment things: Increment `k' up by one. This is the loop: A compound statement begins here. And now some statements. Assign to `zc' the value "a casting into the type 'double precision floating point number' of `k' minus a casting into the type 'double precision floating point number' of `K' divided by 2". Assign to `voxel_radius' the value "the function `sqrt' as applied to the argument '`xc' times `xc' plus `yc' times `yc' plus `zc' times `zc''". Assign to `r_e' the value "`voxel_radius'". Execute the following part if the expression "the parenthetical expression `voxel_radius' checked to be greater than `rad_min' now logically anded by the parenthetical expression `voxel_radius' checked to be less than `rad_max' now" evaluates as positive: A compound statement begins here. And now some statements. Increment `dummy' up by one. The author adds this comment here: " printf(\"%d %d %f %f \n\",k,kb,wt1,wt2); " Now back to the code. Assign to `booger' the value "array x's element at address (the function `ijkton' as applied to the arguments '`i'', '`j'', and '`k'')". This section is controlled by a switch based on the expression '`orientation'': A compound statement begins here. And now some statements. In the case it has the value 1, do this: Assign to `el' the value "the function `acos' as applied to the argument '`zc' divided by `voxel_radius''". Assign to `subrad' the value "the function `sqrt' as applied to the argument '`xc' times `xc' plus `yc' times `yc''". Execute the following part if the expression "`xc' checked to be greater than or equal to 0 logically anded by `yc' checked for inequality against 0" evaluates as positive: Assign to `az' the value "the function `asin' as applied to the argument '`yc' divided by `subrad''". Execute the following part if the expression "the parenthetical expression `xc' checked to be less than 0 now logically anded by the parenthetical expression `yc' checked to be greater than or equal to 0 now" evaluates as positive: Assign to `az' the value "`Pi' minus the function `asin' as applied to the argument '`yc' divided by `subrad''". Execute the following part if the expression "the parenthetical expression `xc' checked to be less than 0 now logically anded by the parenthetical expression `yc' checked to be less than 0 now" evaluates as positive: Assign to `az' the value "minus the function `asin' as applied to the argument '`yc' divided by `subrad'' minus `Pi'". Execute the following part if the expression "`yc' checked for equality against 0 logically anded by `xc' checked for equality against 0" evaluates as positive: Assign to `az' the value "0". Here we break from the current loop. In the case it has the value 2, do this: In the default case, do this: Assign to `el' the value "the function `acos' as applied to the argument 'minus `zc' divided by `voxel_radius''". Assign to `subrad' the value "the function `sqrt' as applied to the argument '`xc' times `xc' plus `yc' times `yc''". Execute the following part if the expression "`xc' checked to be greater than or equal to 0 logically anded by `yc' checked for inequality against 0" evaluates as positive: Assign to `az' the value "the function `asin' as applied to the argument '`yc' divided by `subrad''". Execute the following part if the expression "the parenthetical expression `xc' checked to be less than 0 now logically anded by the parenthetical expression `yc' checked to be greater than or equal to 0 now" evaluates as positive: Assign to `az' the value "`Pi' minus the function `asin' as applied to the argument '`yc' divided by `subrad''". Execute the following part if the expression "the parenthetical expression `xc' checked to be less than 0 now logically anded by the parenthetical expression `yc' checked to be less than 0 now" evaluates as positive: Assign to `az' the value "minus the function `asin' as applied to the argument '`yc' divided by `subrad'' minus `Pi'". Execute the following part if the expression "`yc' checked for equality against 0 logically anded by `xc' checked for equality against 0" evaluates as positive: Assign to `az' the value "0". Decrease `az' by "`Pi' divided by 2". Here we break from the current loop. A compound block of instructions for a switch ends here. Assign to `temp' the value "the function `psifun_demunck' as applied to the arguments '`r_o'', '`r_e'', '`el'', '`az'', '`mrad'', and '`mtan''". Perform the function `fprintf' as applied to the arguments '`surfile'', '"%d %d %d %f %f %f %f %f %.20f %.20f\n"', '`i'', '`j'', '`k'', '`xc'', '`yc'', '`zc'', '`az'', '`el'', '`booger'', and '`temp''. A compound block of instructions for an if block ends here. A compound block of instructions for a for loop ends here. A compound block of instructions for a for loop ends here. A compound block of instructions for a for loop ends here. Perform the function `fclose' as applied to the argument '`surfile''. Perform the function `printf' as applied to the argument '"\n"'. And here ends the definition of the function 'record_surface'. This is the definition of the function 'main'. It returns a value of the type integer. The function 'main' has the following parameters: integer 'argc' and character pointer 'argv', defined to be an array with the size nil. The local variables for the function 'main' begin here: Specifying the type integer, allocate the variables 'i', 'j', 'k', 'temp_index', 'orientation', 'layers', and 'layer_flag'. Specifying the type integer, allocate the variables 'temp2', 'filemode', 'surfmode', and 'poweradj'. Specifying the type FILE, allocate the variable pointer 'infile'. Specifying the type double precision floating point number, allocate the variables 'dummy', 'rmin', and 'rmax'. Specifying the type floating point number, allocate the variable 'dummy2'. And now comes the instruction set for the function 'main'. Assign to `layers' the value "4". Assign to `layer_flag' the value "0". Assign to `I' the value "100". Assign to `J' the value "100". Assign to `K' the value "100". Assign to `rmin' the value "the function `atof' as applied to the argument 'array argv's element at address (3)'". Assign to `rmax' the value "the function `atof' as applied to the argument 'array argv's element at address (4)'". Assign to `orientation' the value "1". Assign to `poweradj' the value "1". Assign to `Mrad' the value "1000". Assign to `Mtan' the value "0". Assign to `filemode' the value "1". Assign to `surfmode' the value "0". Execute the following part if the expression "`argc' checked to be greater than 3" evaluates as positive: Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `temp_index' the value "3". We continue the loop as long as the following expression comes out positive: "`temp_index' checked to be less than `argc'". At the end of each repetition we perform this to increment things: Increment `temp_index' up by one. This is the loop: A compound statement begins here. And now some statements. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-sm"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `surfmode' the value "1". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-fm"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `filemode' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-pa"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `poweradj' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-I"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `I' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-J"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `J' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-K"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `K' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-or"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `orientation' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-la"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `layers' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". Increment `layer_flag' up by one. Assign to `r' the value "the function `fvector' as applied to the argument '`layers''". Assign to `eps' the value "the function `fvector' as applied to the argument '`layers''". Assign to `eta' the value "the function `fvector' as applied to the argument '`layers''". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-Mrad"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `Mrad' the value "the function `atof' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-rmin"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `rmin' the value "the function `atof' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-rmax"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `rmax' the value "the function `atof' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-Mtan"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `Mtan' the value "the function `atof' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-R"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `temp2' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". Assign to array r's element at address (`temp2') the value "the function `atof' as applied to the argument 'array argv's element at address (`temp_index' plus 2)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-eta"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `temp2' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". Assign to array eta's element at address (`temp2') the value "the function `atof' as applied to the argument 'array argv's element at address (`temp_index' plus 2)'". A compound block of instructions for an if block ends here. Execute the following part if the expression "the function `strcmp' as applied to the arguments 'array argv's element at address (`temp_index')' and '"-eps"' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `temp2' the value "the function `atoi' as applied to the argument 'array argv's element at address (`temp_index' plus 1)'". Assign to array eps's element at address (`temp2') the value "the function `atof' as applied to the argument 'array argv's element at address (`temp_index' plus 2)'". A compound block of instructions for an if block ends here. A compound block of instructions for a for loop ends here. Execute the following part if the expression "`layer_flag' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to `r' the value "the function `fvector' as applied to the argument '`layers''". Assign to `eps' the value "the function `fvector' as applied to the argument '`layers''". Assign to `eta' the value "the function `fvector' as applied to the argument '`layers''". A compound block of instructions for an if block ends here. Perform the function `printf' as applied to the arguments '"Min: %f Max: %f\n"', '`rmin'', and '`rmax''. Perform the function `printf' as applied to the arguments '"I %d. "' and '`I''. Perform the function `fflush' as applied to the argument '`NULL''. Perform the function `printf' as applied to the arguments '"J %d. "' and '`J''. Perform the function `fflush' as applied to the argument '`NULL''. Perform the function `printf' as applied to the arguments '"K %d. "' and '`K''. Perform the function `fflush' as applied to the argument '`NULL''. Perform the function `printf' as applied to the arguments '" filemode %d\n"' and '`filemode''. Perform the function `fflush' as applied to the argument '`NULL''. Perform the function `printf' as applied to the arguments '"Mrad: %f Mtan: %f \n"', '`Mrad'', and '`Mtan''. Assign to `x' the value "the function `fvector' as applied to the argument '`I' times `J' times `K''". Execute the following part if the expression "`argc' checked to be greater than 1" evaluates as positive: A compound statement begins here. And now some statements. Assign to `infile' the value "the function `fopen' as applied to the arguments 'array argv's element at address (1)' and '"r"'". A compound block of instructions for an if block ends here. If the expression evaluated as negative, execute this section: A compound statement begins here. And now some statements. Assign to `infile' the value "the function `fopen' as applied to the arguments '"/var/tmp/out.txt"' and '"r"'". A compound block of instructions for an else block ends here. Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `k' the value "1". We continue the loop as long as the following expression comes out positive: "`k' checked to be less than or equal to `K'". At the end of each repetition we perform this to increment things: Increment `k' up by one. This is the loop: Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `j' the value "1". We continue the loop as long as the following expression comes out positive: "`j' checked to be less than or equal to `J'". At the end of each repetition we perform this to increment things: Increment `j' up by one. This is the loop: Here we set up for an iteration loop. We initialize by performing this instruction: Assign to `i' the value "1". We continue the loop as long as the following expression comes out positive: "`i' checked to be less than or equal to `I'". At the end of each repetition we perform this to increment things: Increment `i' up by one. This is the loop: A compound statement begins here. And now some statements. This section is controlled by a switch based on the expression '`filemode'': A compound statement begins here. And now some statements. In the case it has the value 1, do this: Perform the function `fscanf' as applied to the arguments '`infile'', '"%lf"', and 'the memory location of `dummy''. Assign to array x's element at address (the function `ijkton' as applied to the arguments '`i'', '`j'', and '`k'') the value "`dummy'". Here we break from the current loop. In the case it has the value 2, do this: Perform the function `fread' as applied to the arguments 'the memory location of `dummy'', 'the memory size of the datatype double precision floating point number', '1', and '`infile''. Assign to array x's element at address (the function `ijkton' as applied to the arguments '`i'', '`j'', and '`k'') the value "`dummy'". Here we break from the current loop. In the case it has the value 3, do this: Perform the function `fread' as applied to the arguments 'the memory location of `dummy2'', 'the memory size of the datatype floating point number', '1', and '`infile''. Assign to array x's element at address (the function `ijkton' as applied to the arguments '`i'', '`j'', and '`k'') the value "a casting into the type 'double precision floating point number' of `dummy2'". Here we break from the current loop. In the default case, do this: Here we break from the current loop. A compound block of instructions for a switch ends here. A compound block of instructions for a for loop ends here. Perform the function `fclose' as applied to the argument '`infile''. Execute the following part if the expression "`layer_flag' checked for equality against 0" evaluates as positive: A compound statement begins here. And now some statements. Assign to array eps's element at address (1) the value "the floating point number .33". Assign to array eps's element at address (2) the value "the floating point number .0042". Assign to array eps's element at address (3) the value "1". Assign to array eps's element at address (4) the value "the floating point number .33". Assign to array eta's element at address (1) the value "the floating point number .33". Assign to array eta's element at address (2) the value "the floating point number .0042". Assign to array eta's element at address (3) the value "1". Assign to array eta's element at address (4) the value "the floating point number .33". Assign to array r's element at address (0) the value "31". Assign to array r's element at address (1) the value "40". Assign to array r's element at address (2) the value "the floating point number 37.8667". Assign to array r's element at address (3) the value "the floating point number 34.6667". Assign to array r's element at address (4) the value "the floating point number 33.6". A compound block of instructions for an if block ends here. Perform the function `printf' as applied to the arguments '"radii: %f %f %f %f %f \n"', 'array r's element at address (0)', 'array r's element at address (1)', 'array r's element at address (2)', 'array r's element at address (3)', and 'array r's element at address (4)'. Perform the function `printf' as applied to the arguments '"eta: %f %f %f %f \n"', 'array eta's element at address (1)', 'array eta's element at address (2)', 'array eta's element at address (3)', and 'array eta's element at address (4)'. Perform the function `printf' as applied to the arguments '"eps: %f %f %f %f \n"', 'array eps's element at address (1)', 'array eps's element at address (2)', 'array eps's element at address (3)', and 'array eps's element at address (4)'. Perform the function `record_surface' as applied to the arguments '`rmin'', '`rmax'', '`orientation'', '`Mrad'', '`Mtan'', '`surfmode'', '`poweradj'', and 'array argv's element at address (2)'. And here ends the definition of the function 'main'. ----