title: How to break out of a nested parallel (OpenMP) Fortran loop idiomatically?
body: <p>Here's sequential code:</p>
  
  <pre><code>do i = 1, n
     do j = i+1, n
        if ("some_condition(i,j)") then
           result = "here's result"
           return
        end if
     end do
  end do
  </code></pre>
  
  <p>Is there a cleaner way to execute iterations of the outer loop concurrently other than:</p>
  
  <pre><code>  !$OMP PARALLEL private(i,j)
    !$OMP DO 
    do i = 1, n     
       !$OMP FLUSH(found)
       if (found) goto 10
       do j = i+1, n        
          if ("some_condition(i,j)") then
             !$OMP CRITICAL
             !$OMP FLUSH(found)
             if (.not.found) then           
                found = .true.
                result = "here's result"
             end if
             !$OMP FLUSH(found)
             !$OMP END CRITICAL
             goto 10
          end if
       end do
  10   continue
    end do
    !$OMP END DO NOWAIT
    !$OMP END PARALLEL
  </code></pre>
  
  <p>The order of iterations over <code>i</code>-loop may be arbitrary as long as <em>some</em> <code>result</code> is found (it doesn't matter if it changes from run to run as long as it satisfies <code>"some_condition"</code>).</p>