<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic You need to tell the compiler in Intel® Fortran Compiler</title>
    <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057307#M116534</link>
    <description>&lt;P&gt;You need to tell the compiler how&amp;nbsp;long STR is.&lt;/P&gt;

&lt;P&gt;For example&amp;nbsp;character :: str(len=80)&lt;/P&gt;

&lt;P&gt;Les&lt;/P&gt;</description>
    <pubDate>Tue, 08 Jul 2014 08:27:42 GMT</pubDate>
    <dc:creator>Les_Neilson</dc:creator>
    <dc:date>2014-07-08T08:27:42Z</dc:date>
    <item>
      <title>Character</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057306#M116533</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;

&lt;P&gt;I wrote small program to read and write a character. But it gives error messages.&lt;/P&gt;

&lt;P&gt;program check1&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; CHARACTER str*(*)&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; read *, str&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; print *, str&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;end program check1&lt;/P&gt;

&lt;P&gt;When i ran this program, it gave following error.&lt;/P&gt;

&lt;P&gt;Error&amp;nbsp;&amp;nbsp; &amp;nbsp;2&amp;nbsp;&amp;nbsp; &amp;nbsp;Compilation Aborted (code 1)&amp;nbsp;&amp;nbsp; &amp;nbsp;J:\Personal Works\Fortran\CHECK\check1\check1\check1.f90&amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	Error&amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp;&amp;nbsp; &amp;nbsp; error #6832: This passed length character name has been used in an invalid context. &amp;nbsp; [STR] &amp;nbsp; &amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;I could not find any error in the source code. Anyone can explain what is wrong with this code.&lt;/P&gt;

&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Tue, 08 Jul 2014 07:51:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057306#M116533</guid>
      <dc:creator>Rasa_N_</dc:creator>
      <dc:date>2014-07-08T07:51:03Z</dc:date>
    </item>
    <item>
      <title>You need to tell the compiler</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057307#M116534</link>
      <description>&lt;P&gt;You need to tell the compiler how&amp;nbsp;long STR is.&lt;/P&gt;

&lt;P&gt;For example&amp;nbsp;character :: str(len=80)&lt;/P&gt;

&lt;P&gt;Les&lt;/P&gt;</description>
      <pubDate>Tue, 08 Jul 2014 08:27:42 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057307#M116534</guid>
      <dc:creator>Les_Neilson</dc:creator>
      <dc:date>2014-07-08T08:27:42Z</dc:date>
    </item>
    <item>
      <title>What if, length of string is</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057308#M116535</link>
      <description>&lt;P&gt;What if, length of string is unknown how to define the character?&lt;/P&gt;</description>
      <pubDate>Fri, 11 Jul 2014 03:47:22 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057308#M116535</guid>
      <dc:creator>Rasa_N_</dc:creator>
      <dc:date>2014-07-11T03:47:22Z</dc:date>
    </item>
    <item>
      <title>If you add the declaration</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057309#M116536</link>
      <description>&lt;P&gt;If you add the declaration&lt;/P&gt;

&lt;P&gt;CHARACTER :: STR(LEN=80)&lt;/P&gt;

&lt;P&gt;you are telling the compiler to assign 80 bytes of memory as a buffer to receive your character string(s). As long as the strings you are reading in have a length less than or equal to the declared length, then after your READ *, STR, the character string will be left justified in memory, starting from the address of the first byte in STR. The remaining characters will be blanks. If the string is longer than the length of the memory buffer assigned to STR, your stored string will be a truncated version of the string you are reading from.&lt;/P&gt;

&lt;P&gt;You will have a problem determining the length of the string that you have read in if it actually contains blanks, or if it actually has trailing blanks. Windows gets around that problem by always terminating its strings with the CHAR(0) character (sometimes two of them) which can be searched for using the INDEX intrinsic function to determine its position in the buffer and hence the length of the string.&lt;/P&gt;</description>
      <pubDate>Fri, 11 Jul 2014 08:20:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057309#M116536</guid>
      <dc:creator>Anthony_Richards</dc:creator>
      <dc:date>2014-07-11T08:20:54Z</dc:date>
    </item>
    <item>
      <title>Fortran doesn't directly</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057310#M116537</link>
      <description>&lt;P&gt;Fortran doesn't directly allow you to perform an input of unknown length, but it's possible to write out a function that does this using deferred length character variables.&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;module m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; contains
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), allocatable :: getline
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, intent(in) :: iunit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, parameter :: N = 10
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(N) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer sizeread
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read(iunit,'(a)',advance='no',eor=10,size=sizeread) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer(1:sizeread)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end function getline
end module m

program p
&amp;nbsp;&amp;nbsp; use m
&amp;nbsp;&amp;nbsp; use, intrinsic :: iso_fortran_env, only: input_unit
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; character(:), allocatable :: line
&amp;nbsp;&amp;nbsp; line = getline(input_unit)
&amp;nbsp;&amp;nbsp; print*, line
end program p
&lt;/PRE&gt;

&lt;P&gt;I don't know how foolproof the above is, but it worked for a simple testing.&lt;/P&gt;</description>
      <pubDate>Fri, 11 Jul 2014 13:10:46 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057310#M116537</guid>
      <dc:creator>JVanB</dc:creator>
      <dc:date>2014-07-11T13:10:46Z</dc:date>
    </item>
    <item>
      <title>Great example.</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057311#M116538</link>
      <description>&lt;P&gt;Great example.&lt;/P&gt;

&lt;P&gt;A change I would recommend though is to create a threadprivate SAVE allocatable array inside the function. Use that, expanding as necessary, in the do read loop. Then pass the temp(1:sizeread) out directly to getline. (test code)&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;module m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; contains
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use omp_lib
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), allocatable :: getline
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, intent(in) :: iunit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, parameter :: N = 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(N), SAVE :: buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer sizeread
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), SAVE, allocatable :: privateLine
&amp;nbsp;!$omp threadprivate (privateLine, buffer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(buffer, *) 'x', omp_get_thread_num(), 'x'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; privateLine = ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call sleepqq(1000)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! read(iunit,'(a)',advance='no',eor=10,size=sizeread) privateLine
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; privateLine = privateLine // buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,&amp;nbsp; privateLine
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = privateLine(1:sizeread)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end function getline
end module m
&amp;nbsp; 
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1x
&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7x
&lt;/PRE&gt;

&lt;P&gt;This will reduce the number of allocations and possibly reduce potential memory fragmentation issues.&lt;/P&gt;

&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
      <pubDate>Fri, 11 Jul 2014 20:52:43 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057311#M116538</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2014-07-11T20:52:43Z</dc:date>
    </item>
    <item>
      <title>I think this is really quite</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057312#M116539</link>
      <description>&lt;P&gt;I think this is really quite simple. Here's the way I do it:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHARACTER(1)&amp;nbsp;&amp;nbsp; :: ch
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHARACTER(:), ALLOCATABLE&amp;nbsp; :: string
      ...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OPEN (1, FILE = 'InputFile1.txt')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string = '' ! initialize to null
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; READ (1, '(A)', ADVANCE = 'NO', EOR = 100) ch
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string = string // ch
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END DO
100&amp;nbsp;&amp;nbsp; CONTINUE 
&lt;/PRE&gt;

&lt;P&gt;This solution assumes that the string is terminated by a carriage return in the input file (or typed from the keyboard), i.e. one record per line (which makes EOR = 100 a sufficient DO exit. But it is easily modified for other cases. And if you are averse to statement labels (100) that is easily changed too, but it is more concise this way.&lt;/P&gt;</description>
      <pubDate>Sat, 12 Jul 2014 15:16:08 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057312#M116539</guid>
      <dc:creator>dboggs</dc:creator>
      <dc:date>2014-07-12T15:16:08Z</dc:date>
    </item>
    <item>
      <title>This last post reminds me</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057313#M116540</link>
      <description>&lt;P&gt;This last post reminds me that my method was O(N) in terms of number of allocations required.&amp;nbsp;It's not too much of a stretch to make it O(log(N)).&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;module m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; contains
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), allocatable :: getline
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, intent(in) :: iunit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer sizeread
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N = 10
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read_loop: do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; block
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(N) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read(iunit,'(a)',advance='no',eor=10,size=sizeread) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N = 2*N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cycle read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer(1:sizeread)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end block
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end function getline
end module m

program p
&amp;nbsp;&amp;nbsp; use m
&amp;nbsp;&amp;nbsp; use, intrinsic :: iso_fortran_env, only: input_unit
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; character(:), allocatable :: line
&amp;nbsp;&amp;nbsp; line = getline(input_unit)
&amp;nbsp;&amp;nbsp; print*, line
end program p
&lt;/PRE&gt;

&lt;P&gt;Again, this sample has only survived a minimal testing.&lt;/P&gt;</description>
      <pubDate>Sat, 12 Jul 2014 16:22:56 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057313#M116540</guid>
      <dc:creator>JVanB</dc:creator>
      <dc:date>2014-07-12T16:22:56Z</dc:date>
    </item>
    <item>
      <title>Mmmf... I found a test the my</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057314#M116541</link>
      <description>&lt;P&gt;Mmmf... I found a test my function failed.&amp;nbsp;First we write an input file:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;open(7,file='InputFile1.txt',status='replace',access='stream')
do i = 1,10**6
&amp;nbsp;&amp;nbsp; write(7) achar(mod(i-1,10)+48),'XOXOXOXOX'
end do
write(7) achar(13),achar(10)
close(7)
end
&lt;/PRE&gt;

&lt;P&gt;Then a version of the logarithmic program that tries to read the input file:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;module m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; contains
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), allocatable :: getline
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, intent(in) :: iunit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer sizeread
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N = 10
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read_loop: do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; block
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(N) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read(iunit,'(a)',advance='no',eor=10,size=sizeread) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N = 2*N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cycle read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer(1:sizeread)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end block
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end function getline
end module m

program p
&amp;nbsp;&amp;nbsp; use m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; character(:), allocatable :: line
&amp;nbsp;&amp;nbsp; integer iunit
&amp;nbsp;&amp;nbsp; open(newunit=iunit,file='InputFile1.txt',status='old')
&amp;nbsp;&amp;nbsp; line = getline(iunit)
&amp;nbsp;&amp;nbsp; print '(i0)', len(line)
&amp;nbsp;&amp;nbsp; print '(a)', line(1:10)
&amp;nbsp;&amp;nbsp; print '(a)', line(max(1,len(line)-9):len(line))
end program p
&lt;/PRE&gt;

&lt;P&gt;Now, if the loop in the writing program only goes up to 10**5, we get output:&lt;/P&gt;

&lt;PRE class="brush:plain;"&gt;1000000
0XOXOXOXOX
9XOXOXOXOX&lt;/PRE&gt;

&lt;P&gt;But at 10**6 as posted above, gfortran crashes at runtime. Perhaps that's just a bug: does it work with ifort?&lt;/P&gt;</description>
      <pubDate>Sat, 12 Jul 2014 17:03:52 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057314#M116541</guid>
      <dc:creator>JVanB</dc:creator>
      <dc:date>2014-07-12T17:03:52Z</dc:date>
    </item>
    <item>
      <title>The 15 beta (required because</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057315#M116542</link>
      <description>&lt;P&gt;The 15 beta (required because of the use of BLOCK from F2008) dies with an ice.&lt;/P&gt;

&lt;P&gt;If the processor puts automatic variables on the stack, then your longer test line is likely to exhaust the default stack allocation on Windows.&amp;nbsp; If the processor doesn't put automatic variables on the stack (and hence does an "allocation" under the covers), then the total number of allocations carried out may still be larger for small line lengths.&amp;nbsp; I guess if it was critical you'd have to measure to confirm.&lt;/P&gt;</description>
      <pubDate>Sat, 12 Jul 2014 21:52:26 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057315#M116542</guid>
      <dc:creator>IanH</dc:creator>
      <dc:date>2014-07-12T21:52:26Z</dc:date>
    </item>
    <item>
      <title>You're right about that stack</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057316#M116543</link>
      <description>&lt;P&gt;You're right about that stack stuff. When I changed my compile line to&lt;/P&gt;

&lt;P&gt;C:\&amp;gt;gfortran bench.f90 -obench -Wl,--stack,500000000&lt;/P&gt;

&lt;P&gt;it was able to process the line of length 1e8 created when the writing program loops up to 10**7, so indeed it's not a gfortran bug.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 12 Jul 2014 23:55:14 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057316#M116543</guid>
      <dc:creator>JVanB</dc:creator>
      <dc:date>2014-07-12T23:55:14Z</dc:date>
    </item>
    <item>
      <title>IanH and I were having an off</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057317#M116544</link>
      <description>&lt;P&gt;IanH and I were having an off line discussion. This is what I've come up with:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;
module m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; contains
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use omp_lib
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), allocatable :: getline
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, intent(in) :: iunit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, parameter :: N = 10&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(N), SAVE :: bufferExpandBy
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer sizeread
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), SAVE, allocatable :: privateLine
!$omp threadprivate (privateLine)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(.not. allocated(privateLine)) privateLine = bufferExpandBy
!DIR$ IF DEFINED (REGULAR_CODE) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read(iunit,'(a)',advance='no',eor=10,size=sizeread) privateLine
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! here when record .gt. privateLine
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; privateLine = privateLine // bufferExpandBy
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! now read with advancing
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read(iunit,'(a)',) privateLine 
!DIR$ ELSE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! TEST CODE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! simulate read of .gt. size of private line
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sizeread = sizeof(privateline)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! here when record .gt. privateLine
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; privateLine = privateLine // bufferExpandBy
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! put thread specific data into reallocated private line (starting at the pre-expanded position)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(privateLine(sizeread:), "('x',i1,'=',i3,'x')") iunit, omp_get_thread_num()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! "post read" new size
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sizeread = sizeof(privateline)
!DIR$ ENDIF
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = privateLine(1:sizeread)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end function getline
&amp;nbsp;&amp;nbsp;&amp;nbsp; end module m
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
program test
&amp;nbsp;&amp;nbsp;&amp;nbsp; use m
&amp;nbsp;&amp;nbsp;&amp;nbsp; implicit none

&amp;nbsp;&amp;nbsp;&amp;nbsp; ! Variables
&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), allocatable :: myline
!$omp parallel private(myline)
&amp;nbsp;&amp;nbsp;&amp;nbsp; myline = getline(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; write(6,*) 1, myline, sizeof(myline)
&amp;nbsp;&amp;nbsp;&amp;nbsp; myline = getline(2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; write(6,*) 2, myline, sizeof(myline)
&amp;nbsp;&amp;nbsp;&amp;nbsp; myline = getline(3)
&amp;nbsp;&amp;nbsp;&amp;nbsp; write(6,*) 3, myline, sizeof(myline)
&amp;nbsp;&amp;nbsp;&amp;nbsp; myline = getline(4)
&amp;nbsp;&amp;nbsp;&amp;nbsp; write(6,*) 4, myline, sizeof(myline)
&amp;nbsp;&amp;nbsp;&amp;nbsp; flush(6)
!$omp end parallel
end program test

&lt;/PRE&gt;

&lt;P&gt;Note the above is test code, real code would not have the test code printouts and would use the conditional code that is conditionalized out. Also the N and size of bufferExpandBy would be something reasonable: 128, 256, 512, 1024, ...&lt;/P&gt;

&lt;P&gt;Output:&lt;/P&gt;

&lt;PRE class="brush:plain;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp; x4=&amp;nbsp; 3x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp; x4=&amp;nbsp; 5x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp; x4=&amp;nbsp; 4x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp; x4=&amp;nbsp; 6x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp; x4=&amp;nbsp; 7x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp; x4=&amp;nbsp; 1x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp; x4=&amp;nbsp; 0x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp; x2=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp; x3=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp; x4=&amp;nbsp; 2x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50
&lt;/PRE&gt;

&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
      <pubDate>Sun, 13 Jul 2014 00:32:37 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057317#M116544</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2014-07-13T00:32:37Z</dc:date>
    </item>
    <item>
      <title>Where do we get from the</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057318#M116545</link>
      <description>&lt;P&gt;Where do we get from the simple bare-bones 10-line code of #7 to the 40-line code of #12? I realize this is not an apples-apples comparison, that one is a snippet while the other is a robust "permanent" module, etc. And, I realize that the simple one is heavy on allocations while the other is efficient.&lt;/P&gt;

&lt;P&gt;But I think some more discussion of this is in order. #7 is exceedingly easy to inject in any code, and in most cases the less allocation efficiency is probably unnoticeable--after all, are people reading 100-character strings or 10,000 character strings? And how significant is the time required to allocate 1-charcter chunks, vs. the time required to process multi-character chunks&amp;nbsp;anyway? I would really like some idea of this. #7 is so simple that all one needs is the basic concept then bang it is memorized and easily reproduced when needed. Contrast this with the details of the other methods and you get some idea of why Fortran has the reputation of being difficult to implement basic things that are nearly automatic in other languages.&lt;/P&gt;

&lt;P&gt;So, a rundown of features&amp;nbsp;in the other solutions that make them worthwhile would be beneficial to those of us who crave simplicity.&lt;/P&gt;</description>
      <pubDate>Sun, 13 Jul 2014 16:24:05 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057318#M116545</guid>
      <dc:creator>dboggs</dc:creator>
      <dc:date>2014-07-13T16:24:05Z</dc:date>
    </item>
    <item>
      <title>I wanted to try a little</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057319#M116546</link>
      <description>&lt;P&gt;I wanted to try a little benchmarking here, so a post that seems to request benchmarking is welcome. First, I modified the writing program so that it created&amp;nbsp;records of length 10**[1,2,3,4,5,6,7,8] bytes.&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;program P
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; integer i, j
&amp;nbsp;&amp;nbsp; character(20) filename
&amp;nbsp;&amp;nbsp; do j = 0,7
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(filename,'(a,i0,a)') 'InputFile',j+1,'.txt'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; open(7,file=filename,status='replace',access='stream')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = 1,10**j
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(7) achar(mod(i-1,10)+48),'XOXOXOXOX'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(7) achar(13),achar(10)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; close(7)
&amp;nbsp;&amp;nbsp; end do
end program P
&lt;/PRE&gt;

&lt;P&gt;Next, I modified the test program for the logarithmic algorithm so that it read all the files and printed out an approximation of time to process each one.&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;module m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; contains
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), allocatable :: getline
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, intent(in) :: iunit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer sizeread
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N = 10
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read_loop: do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; block
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(N) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read(iunit,'(a)',advance='no',eor=10,size=sizeread) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N = 2*N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cycle read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer(1:sizeread)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end block
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end function getline
end module m

program p
&amp;nbsp;&amp;nbsp; use m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; character(:), allocatable :: line
&amp;nbsp;&amp;nbsp; integer iunit
&amp;nbsp;&amp;nbsp; integer j
&amp;nbsp;&amp;nbsp; character(20) filename
&amp;nbsp;&amp;nbsp; integer values(8,2)
&amp;nbsp;&amp;nbsp; double precision time
&amp;nbsp;&amp;nbsp; do j = 1,8
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(filename,'(a,i0,a)') 'InputFile',j,'.txt'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; open(newunit=iunit,file=filename,status='old')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(/a,i0)', 'Testing logarithmic algorithm for len = 10**',j
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call date_and_time(values=values(:,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; line = getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(i0)', len(line)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a)', line(1:min(10,len(line)))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a)', line(max(1,len(line)-9):len(line))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call date_and_time(values=values(:,2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = modulo(values(5,2)-values(5,1),24)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time*60+(values(6,2)-values(6,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time*60+(values(7,2)-values(7,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time+1.0d-3*(values(8,2)-values(8,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a,f0.3)', 'Elapsed time = ',time
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; close(iunit)
&amp;nbsp;&amp;nbsp; end do
end program p
&lt;/PRE&gt;

&lt;P&gt;Results:&lt;/P&gt;

&lt;PRE class="brush:plain;"&gt;Testing logarithmic algorithm for len = 10**1
10
0XOXOXOXOX
0XOXOXOXOX
Elapsed time = .000

Testing logarithmic algorithm for len = 10**2
100
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing logarithmic algorithm for len = 10**3
1000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing logarithmic algorithm for len = 10**4
10000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing logarithmic algorithm for len = 10**5
100000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing logarithmic algorithm for len = 10**6
1000000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing logarithmic algorithm for len = 10**7
10000000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .046

Testing logarithmic algorithm for len = 10**8
100000000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .500
&lt;/PRE&gt;

&lt;P&gt;Then I changed the test program so that it tested the linear algorithm.&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;program p
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; character ch
&amp;nbsp;&amp;nbsp; character(:), allocatable :: line
&amp;nbsp;&amp;nbsp; integer iunit
&amp;nbsp;&amp;nbsp; integer j
&amp;nbsp;&amp;nbsp; character(20) filename
&amp;nbsp;&amp;nbsp; integer values(8,2)
&amp;nbsp;&amp;nbsp; double precision time
&amp;nbsp;&amp;nbsp; do j = 1,8
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(filename,'(a,i0,a)') 'InputFile',j,'.txt'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; open(newunit=iunit,file=filename,status='old')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(/a,i0)', 'Testing linear algorithm for len = 10**',j
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call date_and_time(values=values(:,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; line = ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read(iunit,'(a)',advance='no',eor=100) ch
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; line = line//ch
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100 continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(i0)', len(line)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a)', line(1:min(10,len(line)))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a)', line(max(1,len(line)-9):len(line))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call date_and_time(values=values(:,2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = modulo(values(5,2)-values(5,1),24)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time*60+(values(6,2)-values(6,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time*60+(values(7,2)-values(7,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time+1.0d-3*(values(8,2)-values(8,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a,f0.3)', 'Elapsed time = ',time
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; close(iunit)
&amp;nbsp;&amp;nbsp; end do
end program p
&lt;/PRE&gt;

&lt;P&gt;Results:&lt;/P&gt;

&lt;PRE class="brush:plain;"&gt;Testing linear algorithm for len = 10**1
10
0XOXOXOXOX
0XOXOXOXOX
Elapsed time = .000

Testing linear algorithm for len = 10**2
100
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing linear algorithm for len = 10**3
1000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing linear algorithm for len = 10**4
10000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .016

Testing linear algorithm for len = 10**5
100000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .406

Testing linear algorithm for len = 10**6
1000000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = 96.079

Testing linear algorithm for len = 10**7
^C&lt;/PRE&gt;

&lt;P&gt;I stopped the test at this point because it was just too slow. Although the latter algorithm is linear in allocations, each allocation implies one or two copies of the data already read (O(N)) unless the Fortran processor is clever enough to detect this idiom. Thus, O(N) in allocations can mean O(N**2) in operations, and for sufficiently large data the difference between O(N**2) and O(N*log(N)) may become apparent.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 13 Jul 2014 17:41:09 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057319#M116546</guid>
      <dc:creator>JVanB</dc:creator>
      <dc:date>2014-07-13T17:41:09Z</dc:date>
    </item>
    <item>
      <title>If you know you have a record</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057320#M116547</link>
      <description>&lt;P&gt;If you know you have a record of 10**8 bytes you should use an internal record size of at least 10**8 bytes. And consider expanding by 10**6 bytes.&lt;/P&gt;

&lt;P&gt;Also, make your line SAVE such that it only grows. (if used in parallel region, then make it threadprivate too).&lt;/P&gt;

&lt;P&gt;Jim Dempsey&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Jul 2014 13:01:53 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057320#M116547</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2014-07-14T13:01:53Z</dc:date>
    </item>
    <item>
      <title>I filed issue DPD200358648</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057321#M116548</link>
      <description>&lt;P&gt;I filed issue&amp;nbsp;DPD200358648 for the ICE that RepeatOffender noted in post #14.&lt;/P&gt;</description>
      <pubDate>Mon, 14 Jul 2014 14:53:44 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057321#M116548</guid>
      <dc:creator>Steven_L_Intel1</dc:creator>
      <dc:date>2014-07-14T14:53:44Z</dc:date>
    </item>
    <item>
      <title>Thanks for filing the ICE,</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057322#M116549</link>
      <description>&lt;P&gt;Thanks for filing the ICE, Steve. I've got a workaround that does essentially what the BLOCK construct did but uses pre-f2008 syntax.&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;module m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; contains
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(:), allocatable :: getline
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer, intent(in) :: iunit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer sizeread
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N = 10
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read_loop: do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call block(*10)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do read_loop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contains
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subroutine block(*)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; character(N) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read(iunit,'(a)',advance='no',eor=10,size=sizeread) buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N = 2*N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getline = getline // buffer(1:sizeread)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end subroutine block
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end function getline
end module m

program p
&amp;nbsp;&amp;nbsp; use m
&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp; character(:), allocatable :: line
&amp;nbsp;&amp;nbsp; integer iunit
&amp;nbsp;&amp;nbsp; integer j
&amp;nbsp;&amp;nbsp; character(20) filename
&amp;nbsp;&amp;nbsp; integer values(8,2)
&amp;nbsp;&amp;nbsp; double precision time
&amp;nbsp;&amp;nbsp; do j = 1,8
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(filename,'(a,i0,a)') 'InputFile',j,'.txt'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; open(newunit=iunit,file=filename,status='old')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(/a,i0)', 'Testing logarithmic algorithm for len = 10**',j
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call date_and_time(values=values(:,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; line = getline(iunit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(i0)', len(line)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a)', line(1:min(10,len(line)))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a)', line(max(1,len(line)-9):len(line))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call date_and_time(values=values(:,2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = modulo(values(5,2)-values(5,1),24)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time*60+(values(6,2)-values(6,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time*60+(values(7,2)-values(7,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time = time+1.0d-3*(values(8,2)-values(8,1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '(a,f0.3)', 'Elapsed time = ',time
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; close(iunit)
&amp;nbsp;&amp;nbsp; end do
end program p
&lt;/PRE&gt;

&lt;P&gt;Now users can compare performance of the linear and logarithmic algorithms with ifort. Here is the output I get with gfortran:&lt;/P&gt;

&lt;PRE class="brush:plain;"&gt;Testing logarithmic algorithm for len = 10**1
10
0XOXOXOXOX
0XOXOXOXOX
Elapsed time = .020

Testing logarithmic algorithm for len = 10**2
100
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing logarithmic algorithm for len = 10**3
1000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .000

Testing logarithmic algorithm for len = 10**4
10000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .011

Testing logarithmic algorithm for len = 10**5
100000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .010

Testing logarithmic algorithm for len = 10**6
1000000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .040

Testing logarithmic algorithm for len = 10**7
10000000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .120

Testing logarithmic algorithm for len = 10**8
100000000
0XOXOXOXOX
9XOXOXOXOX
Elapsed time = .720&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Jul 2014 20:24:24 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057322#M116549</guid>
      <dc:creator>JVanB</dc:creator>
      <dc:date>2014-07-14T20:24:24Z</dc:date>
    </item>
    <item>
      <title>FWIW, it's come up for</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057323#M116550</link>
      <description>&lt;P&gt;FWIW, it's come up for discussion in the standards committee a couple of times that it "would have been nice" if you could name a deferred-length allocatable character variable in a READ and get it to automatically reallocate to the needed size,. But this didn't make the cut for the next standard, which has a rather limited scope. Perhaps the one after that.&lt;/P&gt;</description>
      <pubDate>Mon, 14 Jul 2014 20:49:06 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057323#M116550</guid>
      <dc:creator>Steven_L_Intel1</dc:creator>
      <dc:date>2014-07-14T20:49:06Z</dc:date>
    </item>
    <item>
      <title>It use to be the case that</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057324#M116551</link>
      <description>&lt;P&gt;It use to be the case that you could declare a character array in blank common, read the string with stream input, find the length and go from there. Not knowing how big a data set could be is a general problem that has always existed. I don't think this latest discussion shows much of a change.&lt;/P&gt;

&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Mon, 14 Jul 2014 23:10:51 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057324#M116551</guid>
      <dc:creator>John_Campbell</dc:creator>
      <dc:date>2014-07-14T23:10:51Z</dc:date>
    </item>
    <item>
      <title>The BLOCK error has been</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057325#M116552</link>
      <description>&lt;P&gt;The BLOCK error has been fixed for an update later this year (not in the initial 15.0 release.)&lt;/P&gt;</description>
      <pubDate>Tue, 22 Jul 2014 19:44:34 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Character/m-p/1057325#M116552</guid>
      <dc:creator>Steven_L_Intel1</dc:creator>
      <dc:date>2014-07-22T19:44:34Z</dc:date>
    </item>
  </channel>
</rss>

